FHIR © HL7.org  |  Server Home  |  Health Intersections FHIR Server v1.9.374  |  FHIR Version 4.6.0  | User: ANONYMOUS (Unknown)  

History Record

XML or JSON representation

Links: First Previous Next Last  (21 found). Search: http://test.fhir.org/r5/Library/_history?&_prior=2021-06-21T01:14:49.437Z&_format=text/xhtml&history-id=9d7aac15-c8bd-45b9-b00a-b787214523 

Library "zika-virus-intervention-logic" Version "1"

Tags: (no tags)  +

This Resource , XML or JSON representation, or the full version history.. provenance for this resource
Updated: by

Zika Virus Intervention Logic

{
  "resourceType" : "Library",
  "id" : "zika-virus-intervention-logic",
  "meta" : {
    "versionId" : "1",
    "lastUpdated" : "2021-05-24T10:50:20.953Z",
    "tag" : [
      {
        "system" : "http://terminology.hl7.org/CodeSystem/v3-ActReason",
        "code" : "HTEST",
        "display" : "test health data"
      }
    ]
  },
  "text" : {
    "status" : "generated",
    "div" : "<div xmlns=\"http://www.w3.org/1999/xhtml\">Zika Virus Intervention Logic</div>"
  },
  "identifier" : [
    {
      "use" : "official",
      "value" : "zika-virus-intervention-logic"
    }
  ],
  "version" : "1.0.0",
  "title" : "Zika Virus Intervention Logic",
  "status" : "active",
  "experimental" : true,
  "type" : {
    "coding" : [
      {
        "code" : "logic-library"
      }
    ]
  },
  "date" : "2016-11-14",
  "description" : "Decision support logic for managing zika virus infection",
  "useContext" : [
    {
      "code" : {
        "system" : "http://terminology.hl7.org/CodeSystem/usage-context-type",
        "code" : "age"
      },
      "valueRange" : {
        "low" : {
          "value" : 12,
          "unit" : "a"
        }
      }
    },
    {
      "code" : {
        "system" : "http://terminology.hl7.org/CodeSystem/usage-context-type",
        "code" : "user"
      },
      "valueCodeableConcept" : {
        "coding" : [
          {
            "system" : "http://snomed.info/sct",
            "code" : "309343006",
            "display" : "Physician"
          }
        ]
      }
    }
  ],
  "topic" : [
    {
      "text" : "Zika Virus Management"
    }
  ],
  "relatedArtifact" : [
    {
      "type" : "depends-on",
      "resource" : "http://example.org/fhir/Library/fhir-model-definition"
    },
    {
      "type" : "depends-on",
      "resource" : "http://hl7.org/fhir/ValueSet/zika-affected-area"
    }
  ],
  "parameter" : [
    {
      "name" : "Patient",
      "use" : "in",
      "type" : "Patient"
    },
    {
      "name" : "Current Encounter",
      "use" : "in",
      "type" : "Encounter"
    }
  ],
  "dataRequirement" : [
    {
      "type" : "Condition",
      "codeFilter" : [
        {
          "path" : "code",
          "valueSet" : "urn:oid:X.Y.Z"
        }
      ]
    },
    {
      "type" : "Observation",
      "codeFilter" : [
        {
          "path" : "code",
          "valueSet" : "urn:oid:X.Y.Z"
        }
      ]
    },
    {
      "type" : "Condition",
      "codeFilter" : [
        {
          "path" : "code",
          "valueSet" : "urn:oid:2.16.840.1.114222.4.11.7459"
        }
      ]
    }
  ],
  "content" : [
    {
      "contentType" : "text/cql",
      "data" : "bGlicmFyeSAiemlrYS12aXJ1cy1pbnRlcnZlbnRpb24tbG9naWMiIHZlcnNpb24gJzEuMC4wJw0KDQp1c2luZyBGSElSIHZlcnNpb24gJzEuOCcNCg0KaW5jbHVkZSBGSElSSGVscGVycyB2ZXJzaW9uICcxLjgnIGNhbGxlZCBGSElSSGVscGVycw0KDQpjb2Rlc3lzdGVtICJFeGFtcGxlIFF1ZXN0aW9ubmFpcmVzIjogJ2h0dHA6Ly9leGFtcGxlLm9yZy9xdWVzdGlvbm5haXJlcycNCg0KdmFsdWVzZXQgIlByZWduYW5jeSI6ICd1cm46b2lkOlguWS5aJw0KdmFsdWVzZXQgIlppa2EgQWZmZWN0ZWQgQXJlYXMiOiAndXJuOm9pZDoyLjE2Ljg0MC4xLjExNDIyMi40LjExLjc0NTcnIC8vIFZhbHVlIHNldCBoYXMgYmVlbiBjcmVhdGVkIGJhc2VkIHVwb24gSmFuIDI2dGgsIDIwMTYgdHJhdmVsIG5vdGljZSBmcm9tIENEQyBaaWthIHZpcnVzIGRpc2Vhc2Ugd2Vic2l0ZQlodHRwczovL3BoaW52YWRzLmNkYy5nb3YvdmFkcy9WaWV3VmFsdWVTZXQuYWN0aW9uP29pZD0yLjE2Ljg0MC4xLjExNDIyMi40LjExLjc0NTcNCnZhbHVlc2V0ICJaaWthIFZpcnVzIFNpZ25zIGFuZCBTeW1wdG9tcyI6CScyLjE2Ljg0MC4xLjExNDIyMi40LjExLjc0NTknIC8vIGh0dHBzOi8vcGhpbnZhZHMuY2RjLmdvdi92YWRzL1ZpZXdWYWx1ZVNldC5hY3Rpb24/b2lkPTIuMTYuODQwLjEuMTE0MjIyLjQuMTEuNzQ1OQ0KdmFsdWVzZXQgIkdlbmVyYWwgQXJib3ZpcnVzIFNpZ25zIGFuZCBTeW1wdG9tcyI6ICcyLjE2Ljg0MC4xLjExNDIyMi40LjExLjc0NjAnIC8vIFNpZ25zIGFuZCBTeW1wdG9tcyBvZiBBcmJvdmlyYWwgZGlzZWFzZXMuIFRoaXMgdmFsdWUgc2V0IHdvdWxkIGJlIHVzZWQgZm9yIHB1YmxpYyBoZWFsdGggY2FzZSBub3RpZmljYXRpb24gYW5kIGluY2x1ZGVzIHNpZ25zIGFuZCBzeW1wdG9tcyBvZiBEZW5ndWUsIENoaWt1bmd1bnlhIGFuZCBaaWthLglodHRwczovL3BoaW52YWRzLmNkYy5nb3YvdmFkcy9WaWV3VmFsdWVTZXQuYWN0aW9uP29pZD0yLjE2Ljg0MC4xLjExNDIyMi40LjExLjc0NjANCnZhbHVlc2V0ICJaaWthIFZpcnVzIFRlc3RzIjogJzIuMTYuODQwLjEuMTE0MjIyLjQuMTEuNzQ4MCcJLy8gaHR0cHM6Ly9waGludmFkcy5jZGMuZ292L3ZhZHMvVmlld1ZhbHVlU2V0LmFjdGlvbj9vaWQ9Mi4xNi44NDAuMS4xMTQyMjIuNC4xMS43NDgwDQp2YWx1ZXNldCAiQXJib3ZpcnVzIFRlc3RzIjogJzIuMTYuODQwLjEuMTE0MjIyLjQuMTEuNDEyMCcgLy8gaHR0cHM6Ly9waGludmFkcy5jZGMuZ292L3ZhZHMvVmlld1ZhbHVlU2V0LmFjdGlvbj9vaWQ9Mi4xNi44NDAuMS4xMTQyMjIuNC4xMS40MTIwDQp2YWx1ZXNldCAiQ2hpa3VuZ3VueWEgVGVzdHMiOiAnMi4xNi44NDAuMS4xMTQyMjIuNC4xMS43MzM5JyAvLyBodHRwczovL3BoaW52YWRzLmNkYy5nb3YvdmFkcy9WaWV3VmFsdWVTZXQuYWN0aW9uP29pZD0yLjE2Ljg0MC4xLjExNDIyMi40LjExLjczMzkNCnZhbHVlc2V0ICJEZW5ndWUgVGVzdHMiOiAnMi4xNi44NDAuMS4xMTQyMjIuNC4xMS40MTQxJyAvLwlodHRwczovL3BoaW52YWRzLmNkYy5nb3YvdmFkcy9WaWV3VmFsdWVTZXQuYWN0aW9uP29pZD0yLjE2Ljg0MC4xLjExNDIyMi40LjExLjQxNDENCnZhbHVlc2V0ICJaaWthIFZpcnVzIElnTSBFTElTQSBSZXN1bHRzIjogJzIuMTYuODQwLjEuMTE0MjIyLjQuMTEuNzQ3NicgLy8gVGhpcyB2YWx1ZSBzZXQgaXMgaW50ZW5kZWQgZm9yIHVzZSBpbiBlbGVjdHJvbmljIGxhYm9yYXRvcnkgcmVwb3J0aW5nIGJhc2VkIG9uIHRoZSByZXN1bHRzIHJlY2VpdmVkIGZyb20gdGhlIGxhYm9yYXRvcnkuICBUaGUgbGFib3JhdG9yeSBtYXkgYWxzbyByZXBvcnQgYSBxdWFudGl0YXRpdmUgdGl0ZXIgaWYgYXBwbGljYWJsZS4JaHR0cHM6Ly9waGludmFkcy5jZGMuZ292L3ZhZHMvVmlld1ZhbHVlU2V0LmFjdGlvbj9vaWQ9Mi4xNi44NDAuMS4xMTQyMjIuNC4xMS43NDc2DQp2YWx1ZXNldCAiWmlrYSBWaXJ1cyBOZXV0cmFsaXppbmcgQW50aWJvZHkgUmVzdWx0cyI6ICcyLjE2Ljg0MC4xLjExNDIyMi40LjExLjc0NzcnIC8vIFRoaXMgdmFsdWUgc2V0IGlzIGludGVuZGVkIGZvciB1c2UgaW4gZWxlY3Ryb25pYyBsYWJvcmF0b3J5IHJlcG9ydGluZyBiYXNlZCBvbiB0aGUgcmVzdWx0cyByZWNlaXZlZCBmcm9tIHRoZSBsYWJvcmF0b3J5LiAgVGhlIGxhYm9yYXRvcnkgbWF5IGFsc28gcmVwb3J0IGEgcXVhbnRpdGF0aXZlIHRpdGVyIGlmIGFwcGxpY2FibGUuCWh0dHBzOi8vcGhpbnZhZHMuY2RjLmdvdi92YWRzL1ZpZXdWYWx1ZVNldC5hY3Rpb24/b2lkPTIuMTYuODQwLjEuMTE0MjIyLjQuMTEuNzQ3Nw0KdmFsdWVzZXQgIkFyYm92aXJ1cyBUZXN0IFJlc3VsdHMiOiAnMi4xNi44NDAuMS4xMTQyMjIuNC4xMS40MDAzJyAvLwlodHRwczovL3BoaW52YWRzLmNkYy5nb3YvdmFkcy9WaWV3VmFsdWVTZXQuYWN0aW9uP29pZD0yLjE2Ljg0MC4xLjExNDIyMi40LjExLjQwMDMNCnZhbHVlc2V0ICJDaGlrdW5ndW55YSBUZXN0IFJlc3VsdHMiOiAnMi4xNi44NDAuMS4xMTQyMjIuNC4xMS43MzQzJyAvLyBUaGlzIHZhbHVlIHNldCBpcyBpbnRlbmRlZCBmb3IgdXNlIGluIGVsZWN0cm9uaWMgbGFib3JhdG9yeSByZXBvcnRpbmcgYmFzZWQgb24gdGhlIHJlc3VsdHMgcmVjZWl2ZWQgZnJvbSB0aGUgbGFib3JhdG9yeS4gIFRoZSBsYWJvcmF0b3J5IG1heSBhbHNvIHJlcG9ydCBhIHF1YW50aXRhdGl2ZSB0aXRlciBpZiBhcHBsaWNhYmxlLglodHRwczovL3BoaW52YWRzLmNkYy5nb3YvdmFkcy9WaWV3VmFsdWVTZXQuYWN0aW9uP29pZD0yLjE2Ljg0MC4xLjExNDIyMi40LjExLjczNDMNCnZhbHVlc2V0ICJEZW5ndWUgVGVzdCBSZXN1bHRzIjogJzIuMTYuODQwLjEuMTE0MjIyLjQuMTEuNDAyNScgLy8gVGhpcyB2YWx1ZSBzZXQgaXMgaW50ZW5kZWQgZm9yIHVzZSBpbiBlbGVjdHJvbmljIGxhYm9yYXRvcnkgcmVwb3J0aW5nIGJhc2VkIG9uIHRoZSByZXN1bHRzIHJlY2VpdmVkIGZyb20gdGhlIGxhYm9yYXRvcnkuICBUaGUgbGFib3JhdG9yeSBtYXkgYWxzbyByZXBvcnQgYSBxdWFudGl0YXRpdmUgdGl0ZXIgaWYgYXBwbGljYWJsZS4JaHR0cHM6Ly9waGludmFkcy5jZGMuZ292L3ZhZHMvVmlld1ZhbHVlU2V0LmFjdGlvbj9vaWQ9Mi4xNi44NDAuMS4xMTQyMjIuNC4xMS40MDI1DQoNCmNvZGUgIkNERTogUmVzaWRlbnQgb2Ygb3IgRnJlcXVlbnQgVHJhdmVsZXIgdG8gWmlrYSBBcmVhIjogJ0NERTogUmVzaWRlbnQgb2Ygb3IgRnJlcXVlbnQgVHJhdmVsZXIgdG8gWmlrYSBBcmVhJyBmcm9tICJFeGFtcGxlIFF1ZXN0aW9ubmFpcmVzIg0KY29kZSAiQ0RFOiBSZWNlbnQgVHJhdmVsIHRvIFppa2EgQXJlYSI6ICdDREU6IFJlY2VudCBUcmF2ZWwgdG8gWmlrYSBBcmVhJyBmcm9tICJFeGFtcGxlIFF1ZXN0aW9ubmFpcmVzIg0KY29kZSAiQ0RFOiBUaW1lIFNpbmNlIFJldHVybmVkIEZyb20gVHJhdmVsIjogJ0NERTogVGltZSBTaW5jZSBSZXR1cm5lZCBGcm9tIFRyYXZlbCcgZnJvbSAiRXhhbXBsZSBRdWVzdGlvbm5haXJlcyINCmNvZGUgIkNERTogUmVjZW50IFNleHVhbCBFbmNvdW50ZXIgV2l0aCBUcmF2ZWxlciB0byBaaWthIEFyZWEiOiAnQ0RFOiBSZWNlbnQgU2V4dWFsIEVuY291bnRlciBXaXRoIFRyYXZlbGVyIHRvIFppa2EgQXJlYScgZnJvbSAiRXhhbXBsZSBRdWVzdGlvbm5haXJlcyINCmNvZGUgIkNERTogVGltZSBTaW5jZSBTZXh1YWwgRW5jb3VudGVyIjogJ0NERTogVGltZSBTaW5jZSBTZXh1YWwgRW5jb3VudGVyJyBmcm9tICJFeGFtcGxlIFF1ZXN0aW9ubmFpcmVzIg0KY29kZSAiQ0RFOiBQbGFubmVkIFRyYXZlbCB0byBaaWthIEFyZWEiOiAnQ0RFOiBQbGFubmVkIFRyYXZlbCB0byBaaWthIEFyZWEnIGZyb20gIkV4YW1wbGUgUXVlc3Rpb25uYWlyZXMiDQoNCnBhcmFtZXRlciAiQ3VycmVudCBFbmNvdW50ZXIiIEVuY291bnRlcg0KDQpjb250ZXh0IFBhdGllbnQNCg0KZGVmaW5lICJQcmVnbmFuY3kgQ29uZGl0aW9ucyI6DQogIFtDb25kaXRpb246ICJQcmVnbmFuY3kiXSBDDQogICAgd2hlcmUgQy5jbGluaWNhbFN0YXR1cyA9ICdhY3RpdmUnDQogICAgICBhbmQgQy52ZXJpZmljYXRpb25TdGF0dXMgPSAnY29uZmlybWVkJw0KICAgICAgLy8gd2VsbCwgdGhpcyBpcyB1Z2x5Li4uLg0KICAgICAgYW5kIEludGVydmFsW0Mub25zZXQgYXMgZGF0ZVRpbWUsIEMuYWJhdGVtZW50IGFzIGRhdGVUaW1lXSBpbmNsdWRlcyBUb2RheSgpDQoNCmRlZmluZSAiSXMgUGF0aWVudCBQcmVnbmFudCI6DQogIFBhdGllbnQuZ2VuZGVyID0gJ2ZlbWFsZScNCiAgICBhbmQgZXhpc3RzICgiUHJlZ25hbmN5IENvbmRpdGlvbnMiKQ0KDQpkZWZpbmUgIlppa2EgRXhwb3N1cmUgQXNzZXNzbWVudCI6DQogIENvZGUgJ1ppa2EgVmlydXMgRXhwb3N1cmUgQXNzZXNzbWVudCcgZnJvbSAiRXhhbXBsZSBRdWVzdGlvbm5haXJlcyINCg0KZGVmaW5lICJaaWthIEV4cG9zdXJlIEFzc2Vzc21lbnQgUmVzdWx0IjoNCiAgRmlyc3QoDQogICAgW09ic2VydmF0aW9uOiAiWmlrYSBFeHBvc3VyZSBBc3Nlc3NtZW50Il0gTw0KICAgICAgd2hlcmUgTy5zdGF0dXMgPSAnZmluYWwnDQogICAgICAgIGFuZCBPLmVuY291bnRlci5yZWZlcmVuY2UgPSAiQ3VycmVudCBFbmNvdW50ZXIiLmlkIC8vIFRPRE86IGZpeA0KICAgICAgc29ydCBieSAoTy5lZmZlY3RpdmUpIGRlc2MNCiAgKQ0KDQpkZWZpbmUgIkhhcyBaaWthIEV4cG9zdXJlIEFzc2Vzc21lbnQiOg0KICAiWmlrYSBFeHBvc3VyZSBBc3Nlc3NtZW50IFJlc3VsdCIgaXMgbm90IG51bGwNCg0KZGVmaW5lICJaaWthIFN5bXB0b21zIjoNCiAgW0NvbmRpdGlvbjogIlppa2EgVmlydXMgU2lnbnMgYW5kIFN5bXB0b21zIl0gQw0KICAgIHdoZXJlIEMuY2xpbmljYWxTdGF0dXMgPSAnYWN0aXZlJw0KICAgICAgYW5kIEMudmVyaWZpY2F0aW9uU3RhdHVzID0gJ2NvbmZpcm1lZCcNCiAgICAgIGFuZCBDLiJjb250ZXh0Ii5yZWZlcmVuY2UgPSAiQ3VycmVudCBFbmNvdW50ZXIiLmlkIC8vIFRPRE86IGZpeA0KDQpkZWZpbmUgIkhhcyBaaWthIFN5bXB0b21zIjoNCiAgZXhpc3RzICJaaWthIFN5bXB0b21zIg0KDQpkZWZpbmUgIk5vIFppa2EgU3ltcHRvbXMiOg0KICBub3QgIkhhcyBaaWthIFN5bXB0b21zIg0KDQpkZWZpbmUgIlllcyI6IHsgJ1llcycgfQ0KDQpkZWZpbmUgIlJlc2lkZW50IG9mIG9yIEZyZXF1ZW50IFRyYXZlbGVyIHRvIFppa2EgQXJlYSI6DQogIGV4aXN0cyAoDQogICAgIlppa2EgRXhwb3N1cmUgQXNzZXNzbWVudCBSZXN1bHQiLmNvbXBvbmVudCBDDQogICAgICAvLyBUT0RPOiBOZWVkIHRvIHN0cmVhbWxpbmUsIHRoaXMgb3VnaHQgdG8gaGF2ZSB3b3JrZWQsIG5vdCBzdXJlIHdoeSBpdCBkaWRuJ3QgKHdpdGhvdXQgdGhlIGNvZGluZ1swXSBhY2Nlc3MpDQogICAgICB3aGVyZSBDLmNvZGUuY29kaW5nWzBdID0gIkNERTogUmVzaWRlbnQgb2Ygb3IgRnJlcXVlbnQgVHJhdmVsZXIgdG8gWmlrYSBBcmVhIg0KICAgICAgICBhbmQgQy52YWx1ZSBpbiAiWWVzIg0KICApDQoNCmRlZmluZSAiUmVjZW50IFRyYXZlbCB0byBaaWthIEFyZWEiOg0KICBleGlzdHMgKA0KICAgICJaaWthIEV4cG9zdXJlIEFzc2Vzc21lbnQgUmVzdWx0Ii5jb21wb25lbnQgQw0KICAgICAgd2hlcmUgQy5jb2RlLmNvZGluZ1swXSA9ICJDREU6IFJlY2VudCBUcmF2ZWwgdG8gWmlrYSBBcmVhIg0KICAgICAgICBhbmQgQy52YWx1ZSBpbiAiWWVzIg0KICApDQoNCmRlZmluZSAiVGltZSBTaW5jZSBSZXR1cm5lZCBGcm9tIFRyYXZlbCI6DQogIHNpbmdsZXRvbiBmcm9tICgNCiAgICAiWmlrYSBFeHBvc3VyZSBBc3Nlc3NtZW50IFJlc3VsdCIuY29tcG9uZW50IEMNCiAgICAgIHdoZXJlIEMuY29kZS5jb2RpbmdbMF0gPSAiQ0RFOiBUaW1lIFNpbmNlIFJldHVybmVkIEZyb20gVHJhdmVsIg0KICAgICAgcmV0dXJuIEMudmFsdWUgYXMgUXVhbnRpdHkNCiAgKQ0KDQpkZWZpbmUgIlJlY2VudCBTZXh1YWwgRW5jb3VudGVyIFdpdGggVHJhdmVsZXIgdG8gWmlrYSBBcmVhIjoNCiAgZXhpc3RzICgNCiAgICAiWmlrYSBFeHBvc3VyZSBBc3Nlc3NtZW50IFJlc3VsdCIuY29tcG9uZW50IEMNCiAgICAgIHdoZXJlIEMuY29kZS5jb2RpbmdbMF0gPSAiQ0RFOiBSZWNlbnQgU2V4dWFsIEVuY291bnRlciBXaXRoIFRyYXZlbGVyIHRvIFppa2EgQXJlYSINCiAgICAgICAgYW5kIEMudmFsdWUgaW4gIlllcyINCiAgKQ0KDQpkZWZpbmUgIlRpbWUgU2luY2UgU2V4dWFsIEVuY291bnRlciI6DQogIHNpbmdsZXRvbiBmcm9tICgNCiAgICAiWmlrYSBFeHBvc3VyZSBBc3Nlc3NtZW50IFJlc3VsdCIuY29tcG9uZW50IEMNCiAgICAgIHdoZXJlIEMuY29kZS5jb2RpbmdbMF0gPSAiQ0RFOiBUaW1lIFNpbmNlIFNleHVhbCBFbmNvdW50ZXIiDQogICAgICByZXR1cm4gQy52YWx1ZSBhcyBRdWFudGl0eQ0KICApDQoNCmRlZmluZSAiVGltZSBTaW5jZSBQb3NzaWJsZSBFeHBvc3VyZSI6DQogIENvYWxlc2NlKCJUaW1lIFNpbmNlIFJldHVybmVkIEZyb20gVHJhdmVsIiwgIlRpbWUgU2luY2UgU2V4dWFsIEVuY291bnRlciIpDQoNCmRlZmluZSAiUGxhbm5lZCBUcmF2ZWwgdG8gWmlrYSBBcmVhIjoNCiAgZXhpc3RzICgNCiAgICAiWmlrYSBFeHBvc3VyZSBBc3Nlc3NtZW50IFJlc3VsdCIuY29tcG9uZW50IEMNCiAgICAgIHdoZXJlIEMuY29kZS5jb2RpbmdbMF0gPSAiQ0RFOiBQbGFubmVkIFRyYXZlbCB0byBaaWthIEFyZWEiDQogICAgICAgIGFuZCBDLnZhbHVlIGluICJZZXMiDQogICkNCg0KZGVmaW5lICJIYXMgUG9zc2libGUgWmlrYSBFeHBvc3VyZSI6DQogICJSZXNpZGVudCBvZiBvciBGcmVxdWVudCBUcmF2ZWxlciB0byBaaWthIEFyZWEiDQogICAgb3IgIlJlY2VudCBUcmF2ZWwgdG8gWmlrYSBBcmVhIg0KICAgIG9yICJSZWNlbnQgU2V4dWFsIEVuY291bnRlciBXaXRoIFRyYXZlbGVyIHRvIFppa2EgQXJlYSINCg0KZGVmaW5lICJaaWthIFN5bXB0b20gT25zZXQiOg0KICBGaXJzdCgNCiAgICAiWmlrYSBTeW1wdG9tcyIgUw0KICAgICAgc29ydCBieSAoUy5vbnNldCBhcyBkYXRlVGltZSkNCiAgKS5vbnNldA0KDQpkZWZpbmUgIlRpbWUgU2luY2UgU3ltcHRvbSBPbnNldCI6DQogIFN5c3RlbS5RdWFudGl0eSB7IHZhbHVlOiB3ZWVrcyBiZXR3ZWVuICJaaWthIFN5bXB0b20gT25zZXQiIGFuZCBUb2RheSgpLCB1bml0OiAnd2snIH0NCg0KZGVmaW5lICJTaG91bGQgQWRtaW5pc3RlciBaaWthIEV4cG9zdXJlIEFzc2Vzc21lbnQiOg0KICBub3QgKCJIYXMgWmlrYSBFeHBvc3VyZSBBc3Nlc3NtZW50IikNCg0KZGVmaW5lICJTaG91bGQgT3JkZXIgU2VydW0gKyBVcmluZSByUlQtUENSIFRlc3QiOg0KICAoIkhhcyBQb3NzaWJsZSBaaWthIEV4cG9zdXJlIiBhbmQgIkhhcyBaaWthIFN5bXB0b21zIiBhbmQgIlRpbWUgU2luY2UgU3ltcHRvbSBPbnNldCIgPCAyIHdlZWtzKQ0KICAgIG9yICgiTm8gWmlrYSBTeW1wdG9tcyIgYW5kICJUaW1lIFNpbmNlIFBvc3NpYmxlIEV4cG9zdXJlIiA8IDIgd2Vla3MpDQoNCmRlZmluZSAiU2hvdWxkIE9yZGVyIFNlcnVtIFppa2EgVmlydXMgSWdNICsgRGVuZ3VlIFZpcnVzIElnTSI6DQogICgiSGFzIFBvc3NpYmxlIFppa2EgRXhwb3N1cmUiIGFuZCAiSGFzIFppa2EgU3ltcHRvbXMiIGFuZCAiVGltZSBTaW5jZSBTeW1wdG9tIE9uc2V0IiBpbiBJbnRlcnZhbFsyIHdlZWtzLCAxMiB3ZWVrcykpDQogICAgb3IgKCJSZXNpZGVudCBvZiBvciBGcmVxdWVudCBUcmF2ZWxlciB0byBaaWthIEFyZWEiIGFuZCAiTm8gWmlrYSBTeW1wdG9tcyIpDQogICAgb3IgKCJObyBaaWthIFN5bXB0b21zIiBhbmQgIlRpbWUgU2luY2UgUG9zc2libGUgRXhwb3N1cmUiIGluIEludGVydmFsWzIgd2Vla3MsIDEyIHdlZWtzKSkNCg0KZGVmaW5lICJTaG91bGQgQ29uc2lkZXIgSWdNIEFudGlib2R5IFRlc3RpbmciOg0KICAoIkhhcyBQb3NzaWJsZSBaaWthIEV4cG9zdXJlIiBhbmQgIkhhcyBaaWthIFN5bXB0b21zIiBhbmQgIlRpbWUgU2luY2UgU3ltcHRvbSBPbnNldCIgPj0gMTIgd2Vla3MpDQogICAgb3IgKCJObyBaaWthIFN5bXB0b21zIiBhbmQgIlRpbWUgU2luY2UgUG9zc2libGUgRXhwb3N1cmUiID49IDEyIHdlZWtzKQ0KDQpkZWZpbmUgIlNob3VsZCBQcm92aWRlIE1vc3F1aXRvIFByZXZlbnRpb24gYW5kIENvbnRyYWNlcHRpb24gQWR2aWNlIjoNCiAgIlBsYW5uZWQgVHJhdmVsIHRvIFppa2EgQXJlYSINCg==",
      "url" : "library-zika-virus-intervention-logic-content.cql",
      "title" : "Zika Virus Intervention Logic"
    }
  ]
}

Library "library-quick-model-definition" Version "1"

Tags: (no tags)  +

This Resource , XML or JSON representation, or the full version history.. provenance for this resource
Updated: by

Id:
Library/library-quick-model-definition
Identifier:
value: QUICK

Version:
1.0.0

Title:
QUICK Model Definition

Type:
code: model-definition

Status:
draft

Description:
Model definition for the QUICK Logical Model

Topic:
text: QUICK

Content:

type: application/xml

url: http://cqlrepository.org/quick-modelinfo.xml


{
  "resourceType" : "Library",
  "id" : "library-quick-model-definition",
  "meta" : {
    "versionId" : "1",
    "lastUpdated" : "2021-05-24T10:50:20.907Z",
    "tag" : [
      {
        "system" : "http://terminology.hl7.org/CodeSystem/v3-ActReason",
        "code" : "HTEST",
        "display" : "test health data"
      }
    ]
  },
  "text" : {
    "status" : "generated",
    "div" : "<div xmlns=\"http://www.w3.org/1999/xhtml\">\n <table class=\"grid dict\">\n <tr>\n <td>\n <b>Id: </b>\n </td>\n </tr>\n <tr>\n <td style=\"padding-left: 25px; padding-right: 25px;\">Library/library-quick-model-definition</td>\n </tr>\n </table>\n <table class=\"grid dict\">\n <tr>\n <td>\n <b>Identifier: </b>\n </td>\n </tr>\n <tr>\n <td style=\"padding-left: 25px; padding-right: 25px;\">\n <b>value: </b>\n <span>QUICK</span>\n </td>\n </tr>\n </table>\n <p/>\n <table class=\"grid dict\">\n <tr>\n <td>\n <b>Version: </b>\n </td>\n </tr>\n <tr>\n <td style=\"padding-left: 25px; padding-right: 25px;\">1.0.0</td>\n </tr>\n </table>\n <p/>\n <table class=\"grid dict\">\n <tr>\n <td>\n <b>Title: </b>\n </td>\n </tr>\n <tr>\n <td style=\"padding-left: 25px; padding-right: 25px;\">QUICK Model Definition</td>\n </tr>\n </table>\n <p/>\n <table class=\"grid dict\">\n <tr>\n <td>\n <b>Type: </b>\n </td>\n </tr>\n <tr>\n <td style=\"padding-right: 25px;\">\n <span>\n <span>\n <span style=\"padding-left: 25px;\">\n <b>code: </b>\n <span>model-definition</span>\n </span>\n </span>\n </span>\n </td>\n </tr>\n </table>\n <p/>\n <table class=\"grid dict\">\n <tr>\n <td>\n <b>Status: </b>\n </td>\n </tr>\n <tr>\n <td style=\"padding-left: 25px; padding-right: 25px;\">draft</td>\n </tr>\n </table>\n <p/>\n <table class=\"grid dict\">\n <tr>\n <td>\n <b>Description: </b>\n </td>\n </tr>\n <tr>\n <td style=\"padding-left: 25px; padding-right: 25px;\">Model definition for the QUICK Logical Model</td>\n </tr>\n </table>\n <p/>\n <table class=\"grid dict\">\n <tr>\n <td>\n <b>Topic: </b>\n </td>\n </tr>\n <tr>\n <td style=\"padding-right: 25px;\">\n <span style=\"padding-left: 25px;\">\n <b>text: </b>\n <span>QUICK</span>\n </span>\n </td>\n </tr>\n </table>\n <p/>\n <table class=\"grid dict\">\n <tr>\n <td>\n <b>Content: </b>\n </td>\n </tr>\n <tr>\n <td style=\"padding-left: 25px; padding-right: 25px;\">\n <p style=\"margin-bottom: 5px;\">\n <b>type: </b>\n <span>application/xml</span>\n </p>\n <p style=\"margin-bottom: 5px;\">\n <b>url: </b>\n <span>http://cqlrepository.org/quick-modelinfo.xml</span>\n </p>\n </td>\n </tr>\n </table>\n </div>"
  },
  "identifier" : [
    {
      "use" : "official",
      "value" : "QUICK"
    }
  ],
  "version" : "1.0.0",
  "title" : "QUICK Model Definition",
  "status" : "draft",
  "type" : {
    "coding" : [
      {
        "code" : "model-definition"
      }
    ]
  },
  "date" : "2016-07-08",
  "description" : "Model definition for the QUICK Logical Model",
  "topic" : [
    {
      "text" : "QUICK"
    }
  ],
  "content" : [
    {
      "contentType" : "application/xml",
      "url" : "http://cqlrepository.org/quick-modelinfo.xml"
    }
  ]
}

Library "library-fhir-helpers-predecessor" Version "1"

Tags: (no tags)  +

This Resource , XML or JSON representation, or the full version history.. provenance for this resource
Updated: by

Id:
Library/library-fhir-helpers-predecessor
Identifier:
value: FHIRHelpers

Version:
1.6

Title:
FHIR Helpers

Type:
code: logic-library

Status:
active

Description:
FHIR Helpers

Topic:
text: FHIR Helpers

Related:

type: depends-on

Resource:
reference: Library/fhir-model-definition

Content:

title: FHIR Helpers

type: text/cql

url: library-fhir-helpers-content.cql


{
  "resourceType" : "Library",
  "id" : "library-fhir-helpers-predecessor",
  "meta" : {
    "versionId" : "1",
    "lastUpdated" : "2021-05-24T10:50:20.828Z",
    "tag" : [
      {
        "system" : "http://terminology.hl7.org/CodeSystem/v3-ActReason",
        "code" : "HTEST",
        "display" : "test health data"
      }
    ]
  },
  "text" : {
    "status" : "generated",
    "div" : "<div xmlns=\"http://www.w3.org/1999/xhtml\">\n <table class=\"grid dict\">\n <tr>\n <td>\n <b>Id: </b>\n </td>\n </tr>\n <tr>\n <td style=\"padding-left: 25px; padding-right: 25px;\">Library/library-fhir-helpers-predecessor</td>\n </tr>\n </table>\n <table class=\"grid dict\">\n <tr>\n <td>\n <b>Identifier: </b>\n </td>\n </tr>\n <tr>\n <td style=\"padding-left: 25px; padding-right: 25px;\">\n <b>value: </b>\n <span>FHIRHelpers</span>\n </td>\n </tr>\n </table>\n <p/>\n <table class=\"grid dict\">\n <tr>\n <td>\n <b>Version: </b>\n </td>\n </tr>\n <tr>\n <td style=\"padding-left: 25px; padding-right: 25px;\">1.6</td>\n </tr>\n </table>\n <p/>\n <table class=\"grid dict\">\n <tr>\n <td>\n <b>Title: </b>\n </td>\n </tr>\n <tr>\n <td style=\"padding-left: 25px; padding-right: 25px;\">FHIR Helpers</td>\n </tr>\n </table>\n <p/>\n <table class=\"grid dict\">\n <tr>\n <td>\n <b>Type: </b>\n </td>\n </tr>\n <tr>\n <td style=\"padding-right: 25px;\">\n <span>\n <span>\n <span style=\"padding-left: 25px;\">\n <b>code: </b>\n <span>logic-library</span>\n </span>\n </span>\n </span>\n </td>\n </tr>\n </table>\n <p/>\n <table class=\"grid dict\">\n <tr>\n <td>\n <b>Status: </b>\n </td>\n </tr>\n <tr>\n <td style=\"padding-left: 25px; padding-right: 25px;\">active</td>\n </tr>\n </table>\n <p/>\n <table class=\"grid dict\">\n <tr>\n <td>\n <b>Description: </b>\n </td>\n </tr>\n <tr>\n <td style=\"padding-left: 25px; padding-right: 25px;\">FHIR Helpers</td>\n </tr>\n </table>\n <p/>\n <table class=\"grid dict\">\n <tr>\n <td>\n <b>Topic: </b>\n </td>\n </tr>\n <tr>\n <td style=\"padding-right: 25px;\">\n <span style=\"padding-left: 25px;\">\n <b>text: </b>\n <span>FHIR Helpers</span>\n </span>\n </td>\n </tr>\n </table>\n <p/>\n <table class=\"grid dict\">\n <tr>\n <td>\n <b>Related: </b>\n </td>\n </tr>\n <tr style=\"vertical-align: top;\">\n <td style=\"padding-left: 25px; padding-right: 25px;\">\n <p style=\"margin-bottom: 5px;\">\n <b>type: </b>\n <span>depends-on</span>\n </p>\n <p style=\"margin-bottom: 5px;\">\n <b>Resource: </b>\n <br/>\n <span>\n <span style=\"padding-left: 25px;\">\n <b>reference: </b>\n <span>Library/fhir-model-definition</span>\n </span>\n </span>\n </p>\n </td>\n </tr>\n </table>\n <table class=\"grid dict\">\n <tr>\n <td>\n <b>Content: </b>\n </td>\n </tr>\n <tr>\n <td style=\"padding-left: 25px; padding-right: 25px;\">\n <p style=\"margin-bottom: 5px;\">\n <b>title: </b>\n <span>FHIR Helpers</span>\n </p>\n <p style=\"margin-bottom: 5px;\">\n <b>type: </b>\n <span>text/cql</span>\n </p>\n <p style=\"margin-bottom: 5px;\">\n <b>url: </b>\n <span>library-fhir-helpers-content.cql</span>\n </p>\n </td>\n </tr>\n </table>\n </div>"
  },
  "identifier" : [
    {
      "use" : "official",
      "value" : "FHIRHelpers"
    }
  ],
  "version" : "1.6",
  "title" : "FHIR Helpers",
  "status" : "active",
  "experimental" : true,
  "type" : {
    "coding" : [
      {
        "code" : "logic-library"
      }
    ]
  },
  "date" : "2016-11-14",
  "description" : "FHIR Helpers",
  "topic" : [
    {
      "text" : "FHIR Helpers"
    }
  ],
  "relatedArtifact" : [
    {
      "type" : "depends-on",
      "resource" : "http://example.org/fhir/Library/fhir-model-definition"
    },
    {
      "type" : "successor",
      "resource" : "http://example.org/fhir/Library/library-fhir-helpers"
    }
  ],
  "content" : [
    {
      "contentType" : "text/cql",
      "data" : "bGlicmFyeSBGSElSSGVscGVycyB2ZXJzaW9uICcxLjgnDQoNCnVzaW5nIEZISVIgdmVyc2lvbiAnMS44Jw0KDQpkZWZpbmUgZnVuY3Rpb24gVG9JbnRlcnZhbChwZXJpb2QgRkhJUi5QZXJpb2QpOg0KICAgIEludGVydmFsW3BlcmlvZC4ic3RhcnQiLnZhbHVlLCBwZXJpb2QuImVuZCIudmFsdWVdDQoNCmRlZmluZSBmdW5jdGlvbiBUb1F1YW50aXR5KHF1YW50aXR5IEZISVIuUXVhbnRpdHkpOg0KICAgIFN5c3RlbS5RdWFudGl0eSB7IHZhbHVlOiBxdWFudGl0eS52YWx1ZS52YWx1ZSwgdW5pdDogcXVhbnRpdHkudW5pdC52YWx1ZSB9DQoNCmRlZmluZSBmdW5jdGlvbiBUb0ludGVydmFsKHJhbmdlIEZISVIuUmFuZ2UpOg0KICAgIEludGVydmFsW1RvUXVhbnRpdHkocmFuZ2UubG93KSwgVG9RdWFudGl0eShyYW5nZS5oaWdoKV0NCg0KZGVmaW5lIGZ1bmN0aW9uIFRvQ29kZShjb2RpbmcgRkhJUi5Db2RpbmcpOg0KICAgIFN5c3RlbS5Db2RlIHsNCiAgICAgIGNvZGU6IGNvZGluZy5jb2RlLnZhbHVlLA0KICAgICAgc3lzdGVtOiBjb2Rpbmcuc3lzdGVtLnZhbHVlLA0KICAgICAgdmVyc2lvbjogY29kaW5nLnZlcnNpb24udmFsdWUsDQogICAgICBkaXNwbGF5OiBjb2RpbmcuZGlzcGxheS52YWx1ZQ0KICAgIH0NCg0KZGVmaW5lIGZ1bmN0aW9uIFRvQ29uY2VwdChjb25jZXB0IEZISVIuQ29kZWFibGVDb25jZXB0KToNCiAgICBTeXN0ZW0uQ29uY2VwdCB7DQogICAgICAgIGNvZGVzOiBjb25jZXB0LmNvZGluZyBDIHJldHVybiBUb0NvZGUoQyksDQogICAgICAgIGRpc3BsYXk6IGNvbmNlcHQudGV4dC52YWx1ZQ0KICAgIH0NCg0KZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIudXVpZCk6IHZhbHVlLnZhbHVlDQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5QbGFuQWN0aW9uUHJlY2hlY2tCZWhhdmlvcik6IHZhbHVlLnZhbHVlDQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5Qcm92ZW5hbmNlRW50aXR5Um9sZSk6IHZhbHVlLnZhbHVlDQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5Vbml0c09mVGltZSk6IHZhbHVlLnZhbHVlDQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5BZGRyZXNzVHlwZSk6IHZhbHVlLnZhbHVlDQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5BbGxlcmd5SW50b2xlcmFuY2VDYXRlZ29yeSk6IHZhbHVlLnZhbHVlDQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5TcGVjaW1lblN0YXR1cyk6IHZhbHVlLnZhbHVlDQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5SZXN0ZnVsQ2FwYWJpbGl0eU1vZGUpOiB2YWx1ZS52YWx1ZQ0KZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuRGV0ZWN0ZWRJc3N1ZVNldmVyaXR5KTogdmFsdWUudmFsdWUNCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLklzc3VlU2V2ZXJpdHkpOiB2YWx1ZS52YWx1ZQ0KZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuRGF0YUVsZW1lbnRTdHJpbmdlbmN5KTogdmFsdWUudmFsdWUNCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLlBsYW5BY3Rpb25Db25kaXRpb25LaW5kKTogdmFsdWUudmFsdWUNCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLkVuY291bnRlclN0YXR1cyk6IHZhbHVlLnZhbHVlDQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5TdHJ1Y3R1cmVEZWZpbml0aW9uS2luZCk6IHZhbHVlLnZhbHVlDQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5QdWJsaWNhdGlvblN0YXR1cyk6IHZhbHVlLnZhbHVlDQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5Db25zZW50RGF0YU1lYW5pbmcpOiB2YWx1ZS52YWx1ZQ0KZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuUXVlc3Rpb25uYWlyZVJlc3BvbnNlU3RhdHVzKTogdmFsdWUudmFsdWUNCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLlNlYXJjaENvbXBhcmF0b3IpOiB2YWx1ZS52YWx1ZQ0KZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuQWxsZXJneUludG9sZXJhbmNlVHlwZSk6IHZhbHVlLnZhbHVlDQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5Eb2N1bWVudFJlbGF0aW9uc2hpcFR5cGUpOiB2YWx1ZS52YWx1ZQ0KZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuQWxsZXJneUludG9sZXJhbmNlQ2xpbmljYWxTdGF0dXMpOiB2YWx1ZS52YWx1ZQ0KZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuQ2FyZVBsYW5BY3Rpdml0eVN0YXR1cyk6IHZhbHVlLnZhbHVlDQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5BY3Rpb25MaXN0KTogdmFsdWUudmFsdWUNCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLlBhcnRpY2lwYXRpb25TdGF0dXMpOiB2YWx1ZS52YWx1ZQ0KZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuUGxhbkFjdGlvblNlbGVjdGlvbkJlaGF2aW9yKTogdmFsdWUudmFsdWUNCmRlZmluZSBmdW5jdGlvbiBUb0RhdGVUaW1lKHZhbHVlIEZISVIuaW5zdGFudCk6IHZhbHVlLnZhbHVlDQpkZWZpbmUgZnVuY3Rpb24gVG9EYXRlVGltZSh2YWx1ZSBGSElSLmRhdGVUaW1lKTogdmFsdWUudmFsdWUNCmRlZmluZSBmdW5jdGlvbiBUb0RhdGVUaW1lKHZhbHVlIEZISVIuZGF0ZSk6IHZhbHVlLnZhbHVlDQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5Eb2N1bWVudE1vZGUpOiB2YWx1ZS52YWx1ZQ0KZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuQXNzZXJ0aW9uT3BlcmF0b3JUeXBlKTogdmFsdWUudmFsdWUNCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLkRheXNPZldlZWspOiB2YWx1ZS52YWx1ZQ0KZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuSXNzdWVUeXBlKTogdmFsdWUudmFsdWUNCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLkNvbnRlbnRUeXBlKTogdmFsdWUudmFsdWUNCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLlN0cnVjdHVyZU1hcENvbnRleHRUeXBlKTogdmFsdWUudmFsdWUNCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLkZhbWlseUhpc3RvcnlTdGF0dXMpOiB2YWx1ZS52YWx1ZQ0KZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuTWVkaWNhdGlvblN0YXRlbWVudENhdGVnb3J5KTogdmFsdWUudmFsdWUNCmRlZmluZSBmdW5jdGlvbiBUb0ludGVnZXIodmFsdWUgRkhJUi5wb3NpdGl2ZUludCk6IHZhbHVlLnZhbHVlDQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5Db21tdW5pY2F0aW9uU3RhdHVzKTogdmFsdWUudmFsdWUNCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLkNsaW5pY2FsSW1wcmVzc2lvblN0YXR1cyk6IHZhbHVlLnZhbHVlDQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5Bc3NlcnRpb25SZXNwb25zZVR5cGVzKTogdmFsdWUudmFsdWUNCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLk5hcnJhdGl2ZVN0YXR1cyk6IHZhbHVlLnZhbHVlDQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5SZWZlcnJhbENhdGVnb3J5KTogdmFsdWUudmFsdWUNCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLk1lYXNtbnRQcmluY2lwbGUpOiB2YWx1ZS52YWx1ZQ0KZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuQ29uc2VudEV4Y2VwdFR5cGUpOiB2YWx1ZS52YWx1ZQ0KZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuc3RyaW5nKTogdmFsdWUudmFsdWUNCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLkVuZHBvaW50U3RhdHVzKTogdmFsdWUudmFsdWUNCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLkd1aWRlUGFnZUtpbmQpOiB2YWx1ZS52YWx1ZQ0KZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuR3VpZGVEZXBlbmRlbmN5VHlwZSk6IHZhbHVlLnZhbHVlDQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5SZXNvdXJjZVZlcnNpb25Qb2xpY3kpOiB2YWx1ZS52YWx1ZQ0KZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuTWVkaWNhdGlvblJlcXVlc3RTdGF0dXMpOiB2YWx1ZS52YWx1ZQ0KZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuTWVkaWNhdGlvbkFkbWluaXN0cmF0aW9uU3RhdHVzKTogdmFsdWUudmFsdWUNCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLk5hbWluZ1N5c3RlbUlkZW50aWZpZXJUeXBlKTogdmFsdWUudmFsdWUNCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLkFjY291bnRTdGF0dXMpOiB2YWx1ZS52YWx1ZQ0KZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuUHJvY2VkdXJlUmVxdWVzdFByaW9yaXR5KTogdmFsdWUudmFsdWUNCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLk1lZGljYXRpb25EaXNwZW5zZVN0YXR1cyk6IHZhbHVlLnZhbHVlDQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5JZGVudGlmaWVyVXNlKTogdmFsdWUudmFsdWUNCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLkRpZ2l0YWxNZWRpYVR5cGUpOiB2YWx1ZS52YWx1ZQ0KZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuVGVzdFJlcG9ydFBhcnRpY2lwYW50VHlwZSk6IHZhbHVlLnZhbHVlDQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5CaW5kaW5nU3RyZW5ndGgpOiB2YWx1ZS52YWx1ZQ0KZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuQ29uc2VudFN0YXR1cyk6IHZhbHVlLnZhbHVlDQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5QYXJ0aWNpcGFudFJlcXVpcmVkKTogdmFsdWUudmFsdWUNCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLlhQYXRoVXNhZ2VUeXBlKTogdmFsdWUudmFsdWUNCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLlN0cnVjdHVyZU1hcElucHV0TW9kZSk6IHZhbHVlLnZhbHVlDQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5JbnN0YW5jZUF2YWlsYWJpbGl0eSk6IHZhbHVlLnZhbHVlDQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5pZCk6IHZhbHVlLnZhbHVlDQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5MaW5rYWdlVHlwZSk6IHZhbHVlLnZhbHVlDQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5SZWZlcmVuY2VIYW5kbGluZ1BvbGljeSk6IHZhbHVlLnZhbHVlDQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5GaWx0ZXJPcGVyYXRvcik6IHZhbHVlLnZhbHVlDQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5OYW1pbmdTeXN0ZW1UeXBlKTogdmFsdWUudmFsdWUNCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLlJlc2VhcmNoU3R1ZHlTdGF0dXMpOiB2YWx1ZS52YWx1ZQ0KZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuRXh0ZW5zaW9uQ29udGV4dCk6IHZhbHVlLnZhbHVlDQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5BdWRpdEV2ZW50T3V0Y29tZSk6IHZhbHVlLnZhbHVlDQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5Db25zdHJhaW50U2V2ZXJpdHkpOiB2YWx1ZS52YWx1ZQ0KZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuRXZlbnRDYXBhYmlsaXR5TW9kZSk6IHZhbHVlLnZhbHVlDQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5QbGFuQWN0aW9uUGFydGljaXBhbnRUeXBlKTogdmFsdWUudmFsdWUNCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLlByb2NlZHVyZVN0YXR1cyk6IHZhbHVlLnZhbHVlDQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5SZXNlYXJjaFN1YmplY3RTdGF0dXMpOiB2YWx1ZS52YWx1ZQ0KZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuUGxhbkFjdGlvbkdyb3VwaW5nQmVoYXZpb3IpOiB2YWx1ZS52YWx1ZQ0KZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuQ29tcG9zaXRlTWVhc3VyZVNjb3JpbmcpOiB2YWx1ZS52YWx1ZQ0KZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuRGV2aWNlTWV0cmljQ2F0ZWdvcnkpOiB2YWx1ZS52YWx1ZQ0KZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuUXVlc3Rpb25uYWlyZVN0YXR1cyk6IHZhbHVlLnZhbHVlDQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5TdHJ1Y3R1cmVNYXBUcmFuc2Zvcm0pOiB2YWx1ZS52YWx1ZQ0KZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuUmVzcG9uc2VUeXBlKTogdmFsdWUudmFsdWUNCmRlZmluZSBmdW5jdGlvbiBUb0RlY2ltYWwodmFsdWUgRkhJUi5kZWNpbWFsKTogdmFsdWUudmFsdWUNCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLkFnZ3JlZ2F0aW9uTW9kZSk6IHZhbHVlLnZhbHVlDQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5DYXBhYmlsaXR5U3RhdGVtZW50S2luZCk6IHZhbHVlLnZhbHVlDQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5zZXF1ZW5jZVR5cGUpOiB2YWx1ZS52YWx1ZQ0KZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuQWxsZXJneUludG9sZXJhbmNlVmVyaWZpY2F0aW9uU3RhdHVzKTogdmFsdWUudmFsdWUNCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLkV2ZW50VGltaW5nKTogdmFsdWUudmFsdWUNCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLkdvYWxTdGF0dXMpOiB2YWx1ZS52YWx1ZQ0KZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuU2VhcmNoUGFyYW1UeXBlKTogdmFsdWUudmFsdWUNCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLlN5c3RlbVJlc3RmdWxJbnRlcmFjdGlvbik6IHZhbHVlLnZhbHVlDQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5TdHJ1Y3R1cmVNYXBNb2RlbE1vZGUpOiB2YWx1ZS52YWx1ZQ0KZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuVGFza1N0YXR1cyk6IHZhbHVlLnZhbHVlDQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5NZWFzdXJlUG9wdWxhdGlvblR5cGUpOiB2YWx1ZS52YWx1ZQ0KZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuU3Vic2NyaXB0aW9uQ2hhbm5lbFR5cGUpOiB2YWx1ZS52YWx1ZQ0KZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuUHJvY2VkdXJlUmVxdWVzdFN0YXR1cyk6IHZhbHVlLnZhbHVlDQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5SZWZlcnJhbFN0YXR1cyk6IHZhbHVlLnZhbHVlDQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5Bc3NlcnRpb25EaXJlY3Rpb25UeXBlKTogdmFsdWUudmFsdWUNCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLlNsaWNpbmdSdWxlcyk6IHZhbHVlLnZhbHVlDQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5FeHBsYW5hdGlvbk9mQmVuZWZpdFN0YXR1cyk6IHZhbHVlLnZhbHVlDQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5MaW5rVHlwZSk6IHZhbHVlLnZhbHVlDQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5BbGxlcmd5SW50b2xlcmFuY2VDcml0aWNhbGl0eSk6IHZhbHVlLnZhbHVlDQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5Db25jZXB0TWFwRXF1aXZhbGVuY2UpOiB2YWx1ZS52YWx1ZQ0KZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuUHJvcGVydHlSZXByZXNlbnRhdGlvbik6IHZhbHVlLnZhbHVlDQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5BdWRpdEV2ZW50QWN0aW9uKTogdmFsdWUudmFsdWUNCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLk1lYXN1cmVEYXRhVXNhZ2UpOiB2YWx1ZS52YWx1ZQ0KZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuVHJpZ2dlclR5cGUpOiB2YWx1ZS52YWx1ZQ0KZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuQWN0aXZpdHlEZWZpbml0aW9uQ2F0ZWdvcnkpOiB2YWx1ZS52YWx1ZQ0KZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuU2VhcmNoTW9kaWZpZXJDb2RlKTogdmFsdWUudmFsdWUNCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLkNvbXBvc2l0aW9uU3RhdHVzKTogdmFsdWUudmFsdWUNCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLkFwcG9pbnRtZW50U3RhdHVzKTogdmFsdWUudmFsdWUNCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLk1lc3NhZ2VTaWduaWZpY2FuY2VDYXRlZ29yeSk6IHZhbHVlLnZhbHVlDQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5PcGVyYXRpb25QYXJhbWV0ZXJVc2UpOiB2YWx1ZS52YWx1ZQ0KZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuTGlzdE1vZGUpOiB2YWx1ZS52YWx1ZQ0KZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuT2JzZXJ2YXRpb25TdGF0dXMpOiB2YWx1ZS52YWx1ZQ0KZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIucXVhbGl0eVR5cGUpOiB2YWx1ZS52YWx1ZQ0KZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuQWRtaW5pc3RyYXRpdmVHZW5kZXIpOiB2YWx1ZS52YWx1ZQ0KZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuTWVhc3VyZVR5cGUpOiB2YWx1ZS52YWx1ZQ0KZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuUXVlc3Rpb25uYWlyZUl0ZW1UeXBlKTogdmFsdWUudmFsdWUNCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLlN0cnVjdHVyZU1hcExpc3RNb2RlKTogdmFsdWUudmFsdWUNCmRlZmluZSBmdW5jdGlvbiBUb0Jvb2xlYW4odmFsdWUgRkhJUi5ib29sZWFuKTogdmFsdWUudmFsdWUNCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLkRldmljZU1ldHJpY0NhbGlicmF0aW9uVHlwZSk6IHZhbHVlLnZhbHVlDQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5jb2RlKTogdmFsdWUudmFsdWUNCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLlN1cHBseVJlcXVlc3RTdGF0dXMpOiB2YWx1ZS52YWx1ZQ0KZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuRW5jb3VudGVyTG9jYXRpb25TdGF0dXMpOiB2YWx1ZS52YWx1ZQ0KZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuU3VwcGx5RGVsaXZlcnlTdGF0dXMpOiB2YWx1ZS52YWx1ZQ0KZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuRGlhZ25vc3RpY1JlcG9ydFN0YXR1cyk6IHZhbHVlLnZhbHVlDQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5GbGFnU3RhdHVzKTogdmFsdWUudmFsdWUNCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLkFsbGVyZ3lJbnRvbGVyYW5jZUNlcnRhaW50eSk6IHZhbHVlLnZhbHVlDQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5DYXJlUGxhblN0YXR1cyk6IHZhbHVlLnZhbHVlDQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5MaXN0U3RhdHVzKTogdmFsdWUudmFsdWUNCmRlZmluZSBmdW5jdGlvbiBUb2Jhc2U2NEJpbmFyeSh2YWx1ZSBGSElSLmJhc2U2NEJpbmFyeSk6IHZhbHVlLnZhbHVlDQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5NZWFzdXJlU2NvcmluZyk6IHZhbHVlLnZhbHVlDQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5BdWRpdEV2ZW50QWdlbnROZXR3b3JrVHlwZSk6IHZhbHVlLnZhbHVlDQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5BZGRyZXNzVXNlKTogdmFsdWUudmFsdWUNCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLkNvbmRpdGlvbmFsRGVsZXRlU3RhdHVzKTogdmFsdWUudmFsdWUNCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLkNvbnRhY3RQb2ludFVzZSk6IHZhbHVlLnZhbHVlDQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5EZXZpY2VNZXRyaWNPcGVyYXRpb25hbFN0YXR1cyk6IHZhbHVlLnZhbHVlDQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5OdXRyaXRpb25PcmRlclN0YXR1cyk6IHZhbHVlLnZhbHVlDQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi51cmkpOiB2YWx1ZS52YWx1ZQ0KZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuQ29udHJpYnV0b3JUeXBlKTogdmFsdWUudmFsdWUNCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLlJlZmVyZW5jZVZlcnNpb25SdWxlcyk6IHZhbHVlLnZhbHVlDQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5Vc2UpOiB2YWx1ZS52YWx1ZQ0KZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuSWRlbnRpdHlBc3N1cmFuY2VMZXZlbCk6IHZhbHVlLnZhbHVlDQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5NZWFzdXJlUmVwb3J0U3RhdHVzKTogdmFsdWUudmFsdWUNCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLkRldmljZU1ldHJpY0NvbG9yKTogdmFsdWUudmFsdWUNCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLlNlYXJjaEVudHJ5TW9kZSk6IHZhbHVlLnZhbHVlDQpkZWZpbmUgZnVuY3Rpb24gVG9UaW1lKHZhbHVlIEZISVIudGltZSk6IHZhbHVlLnZhbHVlDQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5Db25kaXRpb25hbFJlYWRTdGF0dXMpOiB2YWx1ZS52YWx1ZQ0KZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuQ29uZGl0aW9uVmVyaWZpY2F0aW9uU3RhdHVzKTogdmFsdWUudmFsdWUNCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLkFsbGVyZ3lJbnRvbGVyYW5jZVNldmVyaXR5KTogdmFsdWUudmFsdWUNCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLk9wZXJhdGlvbktpbmQpOiB2YWx1ZS52YWx1ZQ0KZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuT2JzZXJ2YXRpb25SZWxhdGlvbnNoaXBUeXBlKTogdmFsdWUudmFsdWUNCmRlZmluZSBmdW5jdGlvbiBUb0ludGVnZXIodmFsdWUgRkhJUi51bnNpZ25lZEludCk6IHZhbHVlLnZhbHVlDQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5OYW1lVXNlKTogdmFsdWUudmFsdWUNCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLlN1YnNjcmlwdGlvblN0YXR1cyk6IHZhbHVlLnZhbHVlDQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5Db21tdW5pY2F0aW9uUmVxdWVzdFN0YXR1cyk6IHZhbHVlLnZhbHVlDQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5Eb2N1bWVudFJlZmVyZW5jZVN0YXR1cyk6IHZhbHVlLnZhbHVlDQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5Mb2NhdGlvbk1vZGUpOiB2YWx1ZS52YWx1ZQ0KZGVmaW5lIGZ1bmN0aW9uIFRvSW50ZWdlcih2YWx1ZSBGSElSLmludGVnZXIpOiB2YWx1ZS52YWx1ZQ0KZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIucmVwb3NpdG9yeVR5cGUpOiB2YWx1ZS52YWx1ZQ0KZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuQ2FyZVBsYW5SZWxhdGlvbnNoaXApOiB2YWx1ZS52YWx1ZQ0KZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuTG9jYXRpb25TdGF0dXMpOiB2YWx1ZS52YWx1ZQ0KZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuVW5rbm93bkNvbnRlbnRDb2RlKTogdmFsdWUudmFsdWUNCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLk5vdGVUeXBlKTogdmFsdWUudmFsdWUNCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLlRlc3RSZXBvcnRTdGF0dXMpOiB2YWx1ZS52YWx1ZQ0KZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuSFRUUFZlcmIpOiB2YWx1ZS52YWx1ZQ0KZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuQ29kZVN5c3RlbUNvbnRlbnRNb2RlKTogdmFsdWUudmFsdWUNCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLlBsYW5BY3Rpb25SZWxhdGlvbnNoaXBUeXBlKTogdmFsdWUudmFsdWUNCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLkVwaXNvZGVPZkNhcmVTdGF0dXMpOiB2YWx1ZS52YWx1ZQ0KZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuUmVtaXR0YW5jZU91dGNvbWUpOiB2YWx1ZS52YWx1ZQ0KZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuQ29udGFjdFBvaW50U3lzdGVtKTogdmFsdWUudmFsdWUNCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLlNsb3RTdGF0dXMpOiB2YWx1ZS52YWx1ZQ0KZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuUHJvcGVydHlUeXBlKTogdmFsdWUudmFsdWUNCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLm1hcmtkb3duKTogdmFsdWUudmFsdWUNCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLlR5cGVEZXJpdmF0aW9uUnVsZSk6IHZhbHVlLnZhbHVlDQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5NZWRpY2F0aW9uU3RhdGVtZW50U3RhdHVzKTogdmFsdWUudmFsdWUNCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLkd1aWRhbmNlUmVzcG9uc2VTdGF0dXMpOiB2YWx1ZS52YWx1ZQ0KZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuUXVhbnRpdHlDb21wYXJhdG9yKTogdmFsdWUudmFsdWUNCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLlJlbGF0ZWRBcnRpZmFjdFR5cGUpOiB2YWx1ZS52YWx1ZQ0KZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIub2lkKTogdmFsdWUudmFsdWUNCmRlZmluZSBmdW5jdGlvbiBUb1N0cmluZyh2YWx1ZSBGSElSLkRldmljZVN0YXR1cyk6IHZhbHVlLnZhbHVlDQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5UZXN0UmVwb3J0UmVzdWx0Q29kZXMpOiB2YWx1ZS52YWx1ZQ0KZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuTWVhc3VyZVJlcG9ydFR5cGUpOiB2YWx1ZS52YWx1ZQ0KZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuU2FtcGxlZERhdGFEYXRhVHlwZSk6IHZhbHVlLnZhbHVlDQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5Db21wYXJ0bWVudFR5cGUpOiB2YWx1ZS52YWx1ZQ0KZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuQ29tcG9zaXRpb25BdHRlc3RhdGlvbk1vZGUpOiB2YWx1ZS52YWx1ZQ0KZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuUGxhbkFjdGlvblJlcXVpcmVkQmVoYXZpb3IpOiB2YWx1ZS52YWx1ZQ0KZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuRGV2aWNlTWV0cmljQ2FsaWJyYXRpb25TdGF0ZSk6IHZhbHVlLnZhbHVlDQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5Hcm91cFR5cGUpOiB2YWx1ZS52YWx1ZQ0KZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuVHlwZVJlc3RmdWxJbnRlcmFjdGlvbik6IHZhbHVlLnZhbHVlDQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5QbGFuQWN0aW9uQ2FyZGluYWxpdHlCZWhhdmlvcik6IHZhbHVlLnZhbHVlDQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5Db2RlU3lzdGVtSGllcmFyY2h5TWVhbmluZyk6IHZhbHVlLnZhbHVlDQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5NZWRpY2F0aW9uU3RhdGVtZW50Tm90VGFrZW4pOiB2YWx1ZS52YWx1ZQ0KZGVmaW5lIGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlIEZISVIuQnVuZGxlVHlwZSk6IHZhbHVlLnZhbHVlDQpkZWZpbmUgZnVuY3Rpb24gVG9TdHJpbmcodmFsdWUgRkhJUi5TeXN0ZW1WZXJzaW9uUHJvY2Vzc2luZ01vZGUpOiB2YWx1ZS52YWx1ZQ0K",
      "url" : "library-fhir-helpers-content.cql",
      "title" : "FHIR Helpers"
    }
  ]
}

Library "opioidcds-recommendation-11" Version "1"

Tags: (no tags)  +

This Resource , XML or JSON representation, or the full version history.. provenance for this resource
Updated: by

Participants

Author Kensaku Kawamoto, MD, PhD, MHS
Author Bryn Rhodes
Author Floyd Eisenberg, MD, MPH
Author Robert McClure, MD, MPH

Related Artifacts

Documentation CDC guideline for prescribing opioids for chronic pain https://guidelines.gov/summaries/summary/50153/cdc-guideline-for-prescribing-opioids-for-chronic-pain---united-states-2016#420
Depends On http://example.org/fhir/Library/opioidcds-common

Data Requirements

Type: MedicationRequest
Filter Value
medicationCodeableConcept In ValueSet http://example.org/fhir/ValueSet/benzodiazepines
Type: MedicationRequest
Filter Value
medicationCodeableConcept In ValueSet http://example.org/fhir/ValueSet/opioids-abused-in-ambulatory-care

Contents

application/elm+xml

        <?xml version="1.0" encoding="UTF-8"?>
<library xmlns="urn:hl7-org:elm:r1" xmlns:t="urn:hl7-org:elm-types:r1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:fhir="http://hl7.org/fhir" xmlns:qdm43="urn:healthit-gov:qdm:v4_3" xmlns:qdm53="urn:healthit-gov:qdm:v5_3" xmlns:a="urn:hl7-org:cql-annotations:r1">
   <annotation startLine="54" startChar="13" endLine="54" endChar="57" message="Could not resolve code path medicationCodeableConcept for the type of the retrieve FHIR.MedicationRequest." errorType="semantic" errorSeverity="warning" xsi:type="a:CqlToElmError"/>
   <annotation startLine="54" startChar="13" endLine="54" endChar="57" message="Could not resolve membership operator for terminology target of the retrieve." errorType="semantic" errorSeverity="warning" xsi:type="a:CqlToElmError"/>
   <annotation startLine="58" startChar="14" endLine="58" endChar="77" message="Could not resolve code path medicationCodeableConcept for the type of the retrieve FHIR.MedicationRequest." errorType="semantic" errorSeverity="warning" xsi:type="a:CqlToElmError"/>
   <annotation startLine="58" startChar="14" endLine="58" endChar="77" message="Could not resolve membership operator for terminology target of the retrieve." errorType="semantic" errorSeverity="warning" xsi:type="a:CqlToElmError"/>
   <identifier id="OpioidCDS_STU4_REC_11" version="0.1.0"/>
   <schemaIdentifier id="urn:hl7-org:elm" version="r1"/>
   <usings>
      <def localIdentifier="System" uri="urn:hl7-org:elm-types:r1"/>
      <def localIdentifier="FHIR" uri="http://hl7.org/fhir" version="3.2.0"/>
   </usings>
   <includes>
      <def localIdentifier="Common" path="OpioidCDS_STU4_Common" version="0.1.0"/>
   </includes>
   <parameters>
      <def name="ContextPrescriptions" accessLevel="Public">
         <parameterTypeSpecifier xsi:type="ListTypeSpecifier">
            <elementType name="fhir:MedicationRequest" xsi:type="NamedTypeSpecifier"/>
         </parameterTypeSpecifier>
      </def>
   </parameters>
   <statements>
      <def name="Patient" context="Patient">
         <expression xsi:type="SingletonFrom">
            <operand dataType="fhir:Patient" xsi:type="Retrieve"/>
         </expression>
      </def>
      <def name="Validate Trigger Event For Benzodiazepine" context="Patient" accessLevel="Public">
         <expression xsi:type="Exists">
            <operand xsi:type="Query">
               <source alias="triggerScript">
                  <expression name="ContextPrescriptions" xsi:type="ParameterRef"/>
               </source>
               <where name="IsBenzodiazepine" libraryName="Common" xsi:type="FunctionRef">
                  <operand name="ToCode" libraryName="Common" xsi:type="FunctionRef">
                     <operand xsi:type="Indexer">
                        <operand path="coding" xsi:type="Property">
                           <source path="medication" scope="triggerScript" xsi:type="Property"/>
                        </operand>
                        <operand valueType="t:Integer" value="0" xsi:type="Literal"/>
                     </operand>
                  </operand>
               </where>
            </operand>
         </expression>
      </def>
      <def name="Validate Trigger Event For Ambulatory Care Abuse Potential" context="Patient" accessLevel="Public">
         <expression xsi:type="Exists">
            <operand xsi:type="Query">
               <source alias="triggerScript">
                  <expression name="ContextPrescriptions" xsi:type="ParameterRef"/>
               </source>
               <where name="IsOpioidWithAmbulatoryAbusePotential" libraryName="Common" xsi:type="FunctionRef">
                  <operand name="ToCode" libraryName="Common" xsi:type="FunctionRef">
                     <operand xsi:type="Indexer">
                        <operand path="coding" xsi:type="Property">
                           <source path="medication" scope="triggerScript" xsi:type="Property"/>
                        </operand>
                        <operand valueType="t:Integer" value="0" xsi:type="Literal"/>
                     </operand>
                  </operand>
               </where>
            </operand>
         </expression>
      </def>
      <def name="On Benzodiazepine" context="Patient" accessLevel="Public">
         <expression xsi:type="Or">
            <operand name="Validate Trigger Event For Benzodiazepine" xsi:type="ExpressionRef"/>
            <operand xsi:type="Exists">
               <operand dataType="fhir:MedicationRequest" codeProperty="medicationCodeableConcept" xsi:type="Retrieve">
                  <codes name="Benzodiazepines" libraryName="Common" xsi:type="ValueSetRef"/>
               </operand>
            </operand>
         </expression>
      </def>
      <def name="Opioid with Ambulatory Care Abuse Potential" context="Patient" accessLevel="Public">
         <expression xsi:type="Or">
            <operand name="Validate Trigger Event For Ambulatory Care Abuse Potential" xsi:type="ExpressionRef"/>
            <operand xsi:type="Exists">
               <operand dataType="fhir:MedicationRequest" codeProperty="medicationCodeableConcept" xsi:type="Retrieve">
                  <codes name="Ambulatory Abuse Potential Opioids" libraryName="Common" xsi:type="ValueSetRef"/>
               </operand>
            </operand>
         </expression>
      </def>
      <def name="Inclusion Criteria" context="Patient" accessLevel="Public">
         <expression xsi:type="And">
            <operand xsi:type="And">
               <operand xsi:type="Or">
                  <operand name="Validate Trigger Event For Benzodiazepine" xsi:type="ExpressionRef"/>
                  <operand name="Validate Trigger Event For Ambulatory Care Abuse Potential" xsi:type="ExpressionRef"/>
               </operand>
               <operand name="On Benzodiazepine" xsi:type="ExpressionRef"/>
            </operand>
            <operand name="Opioid with Ambulatory Care Abuse Potential" xsi:type="ExpressionRef"/>
         </expression>
      </def>
      <def name="Get Indicator" context="Patient" accessLevel="Public">
         <expression valueType="t:String" value="warning" xsi:type="Literal"/>
      </def>
      <def name="Get Summary" context="Patient" accessLevel="Public">
         <expression valueType="t:String" value="Avoid prescribing opioid pain medication and benzodiazepine concurrently whenever possible." xsi:type="Literal"/>
      </def>
      <def name="Get Detail" context="Patient" accessLevel="Public">
         <expression xsi:type="If">
            <condition asType="t:Boolean" xsi:type="As">
               <operand name="Validate Trigger Event For Benzodiazepine" xsi:type="ExpressionRef"/>
            </condition>
            <then valueType="t:String" value="The benzodiazepine prescription request is concurrent with an active opioid prescription" xsi:type="Literal"/>
            <else valueType="t:String" value="The opioid prescription request is concurrent with an active benzodiazepine prescription" xsi:type="Literal"/>
         </expression>
      </def>
   </statements>
</library>

      

{
  "resourceType" : "Library",
  "id" : "opioidcds-recommendation-11",
  "meta" : {
    "versionId" : "1",
    "lastUpdated" : "2021-05-24T10:50:20.750Z",
    "tag" : [
      {
        "system" : "http://terminology.hl7.org/CodeSystem/v3-ActReason",
        "code" : "HTEST",
        "display" : "test health data"
      }
    ]
  },
  "text" : {
    "status" : "generated",
    "div" : "<div xmlns=\"http://www.w3.org/1999/xhtml\">\n <h2>Participants</h2>\n <table class=\"grid\">\n <tr>\n <td>Author</td>\n <td>Kensaku Kawamoto, MD, PhD, MHS</td>\n </tr>\n <tr>\n <td>Author</td>\n <td>Bryn Rhodes</td>\n </tr>\n <tr>\n <td>Author</td>\n <td>Floyd Eisenberg, MD, MPH</td>\n </tr>\n <tr>\n <td>Author</td>\n <td>Robert McClure, MD, MPH</td>\n </tr>\n </table>\n <h2>Related Artifacts</h2>\n <table class=\"grid\">\n <tr>\n <td>Documentation</td>\n <td>CDC guideline for prescribing opioids for chronic pain</td>\n <td>https://guidelines.gov/summaries/summary/50153/cdc-guideline-for-prescribing-opioids-for-chronic-pain---united-states-2016#420</td>\n </tr>\n <tr>\n <td>Depends On</td>\n <td/>\n <td>\n <code>http://example.org/fhir/Library/opioidcds-common</code>\n </td>\n </tr>\n </table>\n <h2>Data Requirements</h2>\n <table class=\"grid\">\n <tr>\n <td colspan=\"2\">\n <b>Type</b>: \n <a href=\"medicationrequest.html\">MedicationRequest</a>\n </td>\n </tr>\n <tr style=\"background-color: #efefef\">\n <td>Filter</td>\n <td>Value</td>\n </tr>\n <tr>\n <td>medicationCodeableConcept</td>\n <td>In ValueSet \n <a href=\"http://example.org/fhir/ValueSet/benzodiazepines\">http://example.org/fhir/ValueSet/benzodiazepines</a>\n </td>\n </tr>\n </table>\n <table class=\"grid\">\n <tr>\n <td colspan=\"2\">\n <b>Type</b>: \n <a href=\"medicationrequest.html\">MedicationRequest</a>\n </td>\n </tr>\n <tr style=\"background-color: #efefef\">\n <td>Filter</td>\n <td>Value</td>\n </tr>\n <tr>\n <td>medicationCodeableConcept</td>\n <td>In ValueSet \n <a href=\"http://example.org/fhir/ValueSet/opioids-abused-in-ambulatory-care\">http://example.org/fhir/ValueSet/opioids-abused-in-ambulatory-care</a>\n </td>\n </tr>\n </table>\n <h2>Contents</h2>\n <p>\n <code>application/elm+xml</code>\n </p>\n <pre>\n <code class=\"language-xml\">&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&gt;\n&lt;library xmlns=\"urn:hl7-org:elm:r1\" xmlns:t=\"urn:hl7-org:elm-types:r1\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:fhir=\"http://hl7.org/fhir\" xmlns:qdm43=\"urn:healthit-gov:qdm:v4_3\" xmlns:qdm53=\"urn:healthit-gov:qdm:v5_3\" xmlns:a=\"urn:hl7-org:cql-annotations:r1\"&gt;\n &lt;annotation startLine=\"54\" startChar=\"13\" endLine=\"54\" endChar=\"57\" message=\"Could not resolve code path medicationCodeableConcept for the type of the retrieve FHIR.MedicationRequest.\" errorType=\"semantic\" errorSeverity=\"warning\" xsi:type=\"a:CqlToElmError\"/&gt;\n &lt;annotation startLine=\"54\" startChar=\"13\" endLine=\"54\" endChar=\"57\" message=\"Could not resolve membership operator for terminology target of the retrieve.\" errorType=\"semantic\" errorSeverity=\"warning\" xsi:type=\"a:CqlToElmError\"/&gt;\n &lt;annotation startLine=\"58\" startChar=\"14\" endLine=\"58\" endChar=\"77\" message=\"Could not resolve code path medicationCodeableConcept for the type of the retrieve FHIR.MedicationRequest.\" errorType=\"semantic\" errorSeverity=\"warning\" xsi:type=\"a:CqlToElmError\"/&gt;\n &lt;annotation startLine=\"58\" startChar=\"14\" endLine=\"58\" endChar=\"77\" message=\"Could not resolve membership operator for terminology target of the retrieve.\" errorType=\"semantic\" errorSeverity=\"warning\" xsi:type=\"a:CqlToElmError\"/&gt;\n &lt;identifier id=\"OpioidCDS_STU4_REC_11\" version=\"0.1.0\"/&gt;\n &lt;schemaIdentifier id=\"urn:hl7-org:elm\" version=\"r1\"/&gt;\n &lt;usings&gt;\n &lt;def localIdentifier=\"System\" uri=\"urn:hl7-org:elm-types:r1\"/&gt;\n &lt;def localIdentifier=\"FHIR\" uri=\"http://hl7.org/fhir\" version=\"3.2.0\"/&gt;\n &lt;/usings&gt;\n &lt;includes&gt;\n &lt;def localIdentifier=\"Common\" path=\"OpioidCDS_STU4_Common\" version=\"0.1.0\"/&gt;\n &lt;/includes&gt;\n &lt;parameters&gt;\n &lt;def name=\"ContextPrescriptions\" accessLevel=\"Public\"&gt;\n &lt;parameterTypeSpecifier xsi:type=\"ListTypeSpecifier\"&gt;\n &lt;elementType name=\"fhir:MedicationRequest\" xsi:type=\"NamedTypeSpecifier\"/&gt;\n &lt;/parameterTypeSpecifier&gt;\n &lt;/def&gt;\n &lt;/parameters&gt;\n &lt;statements&gt;\n &lt;def name=\"Patient\" context=\"Patient\"&gt;\n &lt;expression xsi:type=\"SingletonFrom\"&gt;\n &lt;operand dataType=\"fhir:Patient\" xsi:type=\"Retrieve\"/&gt;\n &lt;/expression&gt;\n &lt;/def&gt;\n &lt;def name=\"Validate Trigger Event For Benzodiazepine\" context=\"Patient\" accessLevel=\"Public\"&gt;\n &lt;expression xsi:type=\"Exists\"&gt;\n &lt;operand xsi:type=\"Query\"&gt;\n &lt;source alias=\"triggerScript\"&gt;\n &lt;expression name=\"ContextPrescriptions\" xsi:type=\"ParameterRef\"/&gt;\n &lt;/source&gt;\n &lt;where name=\"IsBenzodiazepine\" libraryName=\"Common\" xsi:type=\"FunctionRef\"&gt;\n &lt;operand name=\"ToCode\" libraryName=\"Common\" xsi:type=\"FunctionRef\"&gt;\n &lt;operand xsi:type=\"Indexer\"&gt;\n &lt;operand path=\"coding\" xsi:type=\"Property\"&gt;\n &lt;source path=\"medication\" scope=\"triggerScript\" xsi:type=\"Property\"/&gt;\n &lt;/operand&gt;\n &lt;operand valueType=\"t:Integer\" value=\"0\" xsi:type=\"Literal\"/&gt;\n &lt;/operand&gt;\n &lt;/operand&gt;\n &lt;/where&gt;\n &lt;/operand&gt;\n &lt;/expression&gt;\n &lt;/def&gt;\n &lt;def name=\"Validate Trigger Event For Ambulatory Care Abuse Potential\" context=\"Patient\" accessLevel=\"Public\"&gt;\n &lt;expression xsi:type=\"Exists\"&gt;\n &lt;operand xsi:type=\"Query\"&gt;\n &lt;source alias=\"triggerScript\"&gt;\n &lt;expression name=\"ContextPrescriptions\" xsi:type=\"ParameterRef\"/&gt;\n &lt;/source&gt;\n &lt;where name=\"IsOpioidWithAmbulatoryAbusePotential\" libraryName=\"Common\" xsi:type=\"FunctionRef\"&gt;\n &lt;operand name=\"ToCode\" libraryName=\"Common\" xsi:type=\"FunctionRef\"&gt;\n &lt;operand xsi:type=\"Indexer\"&gt;\n &lt;operand path=\"coding\" xsi:type=\"Property\"&gt;\n &lt;source path=\"medication\" scope=\"triggerScript\" xsi:type=\"Property\"/&gt;\n &lt;/operand&gt;\n &lt;operand valueType=\"t:Integer\" value=\"0\" xsi:type=\"Literal\"/&gt;\n &lt;/operand&gt;\n &lt;/operand&gt;\n &lt;/where&gt;\n &lt;/operand&gt;\n &lt;/expression&gt;\n &lt;/def&gt;\n &lt;def name=\"On Benzodiazepine\" context=\"Patient\" accessLevel=\"Public\"&gt;\n &lt;expression xsi:type=\"Or\"&gt;\n &lt;operand name=\"Validate Trigger Event For Benzodiazepine\" xsi:type=\"ExpressionRef\"/&gt;\n &lt;operand xsi:type=\"Exists\"&gt;\n &lt;operand dataType=\"fhir:MedicationRequest\" codeProperty=\"medicationCodeableConcept\" xsi:type=\"Retrieve\"&gt;\n &lt;codes name=\"Benzodiazepines\" libraryName=\"Common\" xsi:type=\"ValueSetRef\"/&gt;\n &lt;/operand&gt;\n &lt;/operand&gt;\n &lt;/expression&gt;\n &lt;/def&gt;\n &lt;def name=\"Opioid with Ambulatory Care Abuse Potential\" context=\"Patient\" accessLevel=\"Public\"&gt;\n &lt;expression xsi:type=\"Or\"&gt;\n &lt;operand name=\"Validate Trigger Event For Ambulatory Care Abuse Potential\" xsi:type=\"ExpressionRef\"/&gt;\n &lt;operand xsi:type=\"Exists\"&gt;\n &lt;operand dataType=\"fhir:MedicationRequest\" codeProperty=\"medicationCodeableConcept\" xsi:type=\"Retrieve\"&gt;\n &lt;codes name=\"Ambulatory Abuse Potential Opioids\" libraryName=\"Common\" xsi:type=\"ValueSetRef\"/&gt;\n &lt;/operand&gt;\n &lt;/operand&gt;\n &lt;/expression&gt;\n &lt;/def&gt;\n &lt;def name=\"Inclusion Criteria\" context=\"Patient\" accessLevel=\"Public\"&gt;\n &lt;expression xsi:type=\"And\"&gt;\n &lt;operand xsi:type=\"And\"&gt;\n &lt;operand xsi:type=\"Or\"&gt;\n &lt;operand name=\"Validate Trigger Event For Benzodiazepine\" xsi:type=\"ExpressionRef\"/&gt;\n &lt;operand name=\"Validate Trigger Event For Ambulatory Care Abuse Potential\" xsi:type=\"ExpressionRef\"/&gt;\n &lt;/operand&gt;\n &lt;operand name=\"On Benzodiazepine\" xsi:type=\"ExpressionRef\"/&gt;\n &lt;/operand&gt;\n &lt;operand name=\"Opioid with Ambulatory Care Abuse Potential\" xsi:type=\"ExpressionRef\"/&gt;\n &lt;/expression&gt;\n &lt;/def&gt;\n &lt;def name=\"Get Indicator\" context=\"Patient\" accessLevel=\"Public\"&gt;\n &lt;expression valueType=\"t:String\" value=\"warning\" xsi:type=\"Literal\"/&gt;\n &lt;/def&gt;\n &lt;def name=\"Get Summary\" context=\"Patient\" accessLevel=\"Public\"&gt;\n &lt;expression valueType=\"t:String\" value=\"Avoid prescribing opioid pain medication and benzodiazepine concurrently whenever possible.\" xsi:type=\"Literal\"/&gt;\n &lt;/def&gt;\n &lt;def name=\"Get Detail\" context=\"Patient\" accessLevel=\"Public\"&gt;\n &lt;expression xsi:type=\"If\"&gt;\n &lt;condition asType=\"t:Boolean\" xsi:type=\"As\"&gt;\n &lt;operand name=\"Validate Trigger Event For Benzodiazepine\" xsi:type=\"ExpressionRef\"/&gt;\n &lt;/condition&gt;\n &lt;then valueType=\"t:String\" value=\"The benzodiazepine prescription request is concurrent with an active opioid prescription\" xsi:type=\"Literal\"/&gt;\n &lt;else valueType=\"t:String\" value=\"The opioid prescription request is concurrent with an active benzodiazepine prescription\" xsi:type=\"Literal\"/&gt;\n &lt;/expression&gt;\n &lt;/def&gt;\n &lt;/statements&gt;\n&lt;/library&gt;\n</code>\n </pre>\n </div>"
  },
  "identifier" : [
    {
      "use" : "official",
      "value" : "OpioidCDS_REC_11"
    }
  ],
  "version" : "0.1.0",
  "title" : "Opioid CDS Logic for recommendation #11",
  "status" : "active",
  "experimental" : false,
  "type" : {
    "coding" : [
      {
        "system" : "http://terminology.hl7.org/CodeSystem/library-type",
        "code" : "logic-library",
        "display" : "Logic Library"
      }
    ]
  },
  "date" : "2018-03-25T13:49:09-06:00",
  "publisher" : "Centers for Disease Control and Prevention (CDC)",
  "description" : "Opioid decision support logic to avoid prescribing opioid pain medication and benzodiazepines concurrently whenever possible.",
  "useContext" : [
    {
      "code" : {
        "system" : "http://terminology.hl7.org/CodeSystem/usage-context-type",
        "code" : "focus",
        "display" : "Clinical Focus"
      },
      "valueCodeableConcept" : {
        "coding" : [
          {
            "system" : "http://snomed.info/sct",
            "code" : "182888003",
            "display" : "Medication requested (situation)"
          }
        ]
      }
    },
    {
      "code" : {
        "system" : "http://terminology.hl7.org/CodeSystem/usage-context-type",
        "code" : "focus",
        "display" : "Clinical Focus"
      },
      "valueCodeableConcept" : {
        "coding" : [
          {
            "system" : "http://snomed.info/sct",
            "code" : "82423001",
            "display" : "Chronic pain (finding)"
          }
        ]
      }
    }
  ],
  "jurisdiction" : [
    {
      "coding" : [
        {
          "system" : "urn:iso:std:iso:3166",
          "code" : "US",
          "display" : "United States of America"
        }
      ]
    }
  ],
  "purpose" : "The purpose of this library is to determine whether opioid pain medication and benzodiazepines have been prescribed concurrently.",
  "usage" : "This library is used to notify the prescriber/user to avoid prescribing opioid pain medication and benzodiazepines concurrently.",
  "copyright" : "© CDC 2016+.",
  "topic" : [
    {
      "text" : "Opioid Prescribing"
    }
  ],
  "author" : [
    {
      "name" : "Kensaku Kawamoto, MD, PhD, MHS
"
    },
    {
      "name" : "Bryn Rhodes"
    },
    {
      "name" : "Floyd Eisenberg, MD, MPH"
    },
    {
      "name" : "Robert McClure, MD, MPH"
    }
  ],
  "relatedArtifact" : [
    {
      "type" : "documentation",
      "display" : "CDC guideline for prescribing opioids for chronic pain",
      "url" : "https://guidelines.gov/summaries/summary/50153/cdc-guideline-for-prescribing-opioids-for-chronic-pain---united-states-2016#420"
    },
    {
      "type" : "depends-on",
      "resource" : "http://example.org/fhir/Library/opioidcds-common"
    }
  ],
  "dataRequirement" : [
    {
      "type" : "MedicationRequest",
      "codeFilter" : [
        {
          "path" : "medicationCodeableConcept",
          "valueSet" : "http://example.org/fhir/ValueSet/benzodiazepines"
        }
      ]
    },
    {
      "type" : "MedicationRequest",
      "codeFilter" : [
        {
          "path" : "medicationCodeableConcept",
          "valueSet" : "http://example.org/fhir/ValueSet/opioids-abused-in-ambulatory-care"
        }
      ]
    }
  ],
  "content" : [
    {
      "contentType" : "application/elm+xml",
      "data" : "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPGxpYnJhcnkgeG1sbnM9InVybjpobDctb3JnOmVsbTpyMSIgeG1sbnM6dD0idXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczpmaGlyPSJodHRwOi8vaGw3Lm9yZy9maGlyIiB4bWxuczpxZG00Mz0idXJuOmhlYWx0aGl0LWdvdjpxZG06djRfMyIgeG1sbnM6cWRtNTM9InVybjpoZWFsdGhpdC1nb3Y6cWRtOnY1XzMiIHhtbG5zOmE9InVybjpobDctb3JnOmNxbC1hbm5vdGF0aW9uczpyMSI+CiAgIDxhbm5vdGF0aW9uIHN0YXJ0TGluZT0iNTQiIHN0YXJ0Q2hhcj0iMTMiIGVuZExpbmU9IjU0IiBlbmRDaGFyPSI1NyIgbWVzc2FnZT0iQ291bGQgbm90IHJlc29sdmUgY29kZSBwYXRoIG1lZGljYXRpb25Db2RlYWJsZUNvbmNlcHQgZm9yIHRoZSB0eXBlIG9mIHRoZSByZXRyaWV2ZSBGSElSLk1lZGljYXRpb25SZXF1ZXN0LiIgZXJyb3JUeXBlPSJzZW1hbnRpYyIgZXJyb3JTZXZlcml0eT0id2FybmluZyIgeHNpOnR5cGU9ImE6Q3FsVG9FbG1FcnJvciIvPgogICA8YW5ub3RhdGlvbiBzdGFydExpbmU9IjU0IiBzdGFydENoYXI9IjEzIiBlbmRMaW5lPSI1NCIgZW5kQ2hhcj0iNTciIG1lc3NhZ2U9IkNvdWxkIG5vdCByZXNvbHZlIG1lbWJlcnNoaXAgb3BlcmF0b3IgZm9yIHRlcm1pbm9sb2d5IHRhcmdldCBvZiB0aGUgcmV0cmlldmUuIiBlcnJvclR5cGU9InNlbWFudGljIiBlcnJvclNldmVyaXR5PSJ3YXJuaW5nIiB4c2k6dHlwZT0iYTpDcWxUb0VsbUVycm9yIi8+CiAgIDxhbm5vdGF0aW9uIHN0YXJ0TGluZT0iNTgiIHN0YXJ0Q2hhcj0iMTQiIGVuZExpbmU9IjU4IiBlbmRDaGFyPSI3NyIgbWVzc2FnZT0iQ291bGQgbm90IHJlc29sdmUgY29kZSBwYXRoIG1lZGljYXRpb25Db2RlYWJsZUNvbmNlcHQgZm9yIHRoZSB0eXBlIG9mIHRoZSByZXRyaWV2ZSBGSElSLk1lZGljYXRpb25SZXF1ZXN0LiIgZXJyb3JUeXBlPSJzZW1hbnRpYyIgZXJyb3JTZXZlcml0eT0id2FybmluZyIgeHNpOnR5cGU9ImE6Q3FsVG9FbG1FcnJvciIvPgogICA8YW5ub3RhdGlvbiBzdGFydExpbmU9IjU4IiBzdGFydENoYXI9IjE0IiBlbmRMaW5lPSI1OCIgZW5kQ2hhcj0iNzciIG1lc3NhZ2U9IkNvdWxkIG5vdCByZXNvbHZlIG1lbWJlcnNoaXAgb3BlcmF0b3IgZm9yIHRlcm1pbm9sb2d5IHRhcmdldCBvZiB0aGUgcmV0cmlldmUuIiBlcnJvclR5cGU9InNlbWFudGljIiBlcnJvclNldmVyaXR5PSJ3YXJuaW5nIiB4c2k6dHlwZT0iYTpDcWxUb0VsbUVycm9yIi8+CiAgIDxpZGVudGlmaWVyIGlkPSJPcGlvaWRDRFNfU1RVNF9SRUNfMTEiIHZlcnNpb249IjAuMS4wIi8+CiAgIDxzY2hlbWFJZGVudGlmaWVyIGlkPSJ1cm46aGw3LW9yZzplbG0iIHZlcnNpb249InIxIi8+CiAgIDx1c2luZ3M+CiAgICAgIDxkZWYgbG9jYWxJZGVudGlmaWVyPSJTeXN0ZW0iIHVyaT0idXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxIi8+CiAgICAgIDxkZWYgbG9jYWxJZGVudGlmaWVyPSJGSElSIiB1cmk9Imh0dHA6Ly9obDcub3JnL2ZoaXIiIHZlcnNpb249IjMuMi4wIi8+CiAgIDwvdXNpbmdzPgogICA8aW5jbHVkZXM+CiAgICAgIDxkZWYgbG9jYWxJZGVudGlmaWVyPSJDb21tb24iIHBhdGg9Ik9waW9pZENEU19TVFU0X0NvbW1vbiIgdmVyc2lvbj0iMC4xLjAiLz4KICAgPC9pbmNsdWRlcz4KICAgPHBhcmFtZXRlcnM+CiAgICAgIDxkZWYgbmFtZT0iQ29udGV4dFByZXNjcmlwdGlvbnMiIGFjY2Vzc0xldmVsPSJQdWJsaWMiPgogICAgICAgICA8cGFyYW1ldGVyVHlwZVNwZWNpZmllciB4c2k6dHlwZT0iTGlzdFR5cGVTcGVjaWZpZXIiPgogICAgICAgICAgICA8ZWxlbWVudFR5cGUgbmFtZT0iZmhpcjpNZWRpY2F0aW9uUmVxdWVzdCIgeHNpOnR5cGU9Ik5hbWVkVHlwZVNwZWNpZmllciIvPgogICAgICAgICA8L3BhcmFtZXRlclR5cGVTcGVjaWZpZXI+CiAgICAgIDwvZGVmPgogICA8L3BhcmFtZXRlcnM+CiAgIDxzdGF0ZW1lbnRzPgogICAgICA8ZGVmIG5hbWU9IlBhdGllbnQiIGNvbnRleHQ9IlBhdGllbnQiPgogICAgICAgICA8ZXhwcmVzc2lvbiB4c2k6dHlwZT0iU2luZ2xldG9uRnJvbSI+CiAgICAgICAgICAgIDxvcGVyYW5kIGRhdGFUeXBlPSJmaGlyOlBhdGllbnQiIHhzaTp0eXBlPSJSZXRyaWV2ZSIvPgogICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIG5hbWU9IlZhbGlkYXRlIFRyaWdnZXIgRXZlbnQgRm9yIEJlbnpvZGlhemVwaW5lIiBjb250ZXh0PSJQYXRpZW50IiBhY2Nlc3NMZXZlbD0iUHVibGljIj4KICAgICAgICAgPGV4cHJlc3Npb24geHNpOnR5cGU9IkV4aXN0cyI+CiAgICAgICAgICAgIDxvcGVyYW5kIHhzaTp0eXBlPSJRdWVyeSI+CiAgICAgICAgICAgICAgIDxzb3VyY2UgYWxpYXM9InRyaWdnZXJTY3JpcHQiPgogICAgICAgICAgICAgICAgICA8ZXhwcmVzc2lvbiBuYW1lPSJDb250ZXh0UHJlc2NyaXB0aW9ucyIgeHNpOnR5cGU9IlBhcmFtZXRlclJlZiIvPgogICAgICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgICAgPHdoZXJlIG5hbWU9IklzQmVuem9kaWF6ZXBpbmUiIGxpYnJhcnlOYW1lPSJDb21tb24iIHhzaTp0eXBlPSJGdW5jdGlvblJlZiI+CiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIG5hbWU9IlRvQ29kZSIgbGlicmFyeU5hbWU9IkNvbW1vbiIgeHNpOnR5cGU9IkZ1bmN0aW9uUmVmIj4KICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgeHNpOnR5cGU9IkluZGV4ZXIiPgogICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBwYXRoPSJjb2RpbmciIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgcGF0aD0ibWVkaWNhdGlvbiIgc2NvcGU9InRyaWdnZXJTY3JpcHQiIHhzaTp0eXBlPSJQcm9wZXJ0eSIvPgogICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHZhbHVlVHlwZT0idDpJbnRlZ2VyIiB2YWx1ZT0iMCIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgIDwvd2hlcmU+CiAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICA8L2RlZj4KICAgICAgPGRlZiBuYW1lPSJWYWxpZGF0ZSBUcmlnZ2VyIEV2ZW50IEZvciBBbWJ1bGF0b3J5IENhcmUgQWJ1c2UgUG90ZW50aWFsIiBjb250ZXh0PSJQYXRpZW50IiBhY2Nlc3NMZXZlbD0iUHVibGljIj4KICAgICAgICAgPGV4cHJlc3Npb24geHNpOnR5cGU9IkV4aXN0cyI+CiAgICAgICAgICAgIDxvcGVyYW5kIHhzaTp0eXBlPSJRdWVyeSI+CiAgICAgICAgICAgICAgIDxzb3VyY2UgYWxpYXM9InRyaWdnZXJTY3JpcHQiPgogICAgICAgICAgICAgICAgICA8ZXhwcmVzc2lvbiBuYW1lPSJDb250ZXh0UHJlc2NyaXB0aW9ucyIgeHNpOnR5cGU9IlBhcmFtZXRlclJlZiIvPgogICAgICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgICAgPHdoZXJlIG5hbWU9IklzT3Bpb2lkV2l0aEFtYnVsYXRvcnlBYnVzZVBvdGVudGlhbCIgbGlicmFyeU5hbWU9IkNvbW1vbiIgeHNpOnR5cGU9IkZ1bmN0aW9uUmVmIj4KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbmFtZT0iVG9Db2RlIiBsaWJyYXJ5TmFtZT0iQ29tbW9uIiB4c2k6dHlwZT0iRnVuY3Rpb25SZWYiPgogICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCB4c2k6dHlwZT0iSW5kZXhlciI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHBhdGg9ImNvZGluZyIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBwYXRoPSJtZWRpY2F0aW9uIiBzY29wZT0idHJpZ2dlclNjcmlwdCIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgdmFsdWVUeXBlPSJ0OkludGVnZXIiIHZhbHVlPSIwIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgPC93aGVyZT4KICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIG5hbWU9Ik9uIEJlbnpvZGlhemVwaW5lIiBjb250ZXh0PSJQYXRpZW50IiBhY2Nlc3NMZXZlbD0iUHVibGljIj4KICAgICAgICAgPGV4cHJlc3Npb24geHNpOnR5cGU9Ik9yIj4KICAgICAgICAgICAgPG9wZXJhbmQgbmFtZT0iVmFsaWRhdGUgVHJpZ2dlciBFdmVudCBGb3IgQmVuem9kaWF6ZXBpbmUiIHhzaTp0eXBlPSJFeHByZXNzaW9uUmVmIi8+CiAgICAgICAgICAgIDxvcGVyYW5kIHhzaTp0eXBlPSJFeGlzdHMiPgogICAgICAgICAgICAgICA8b3BlcmFuZCBkYXRhVHlwZT0iZmhpcjpNZWRpY2F0aW9uUmVxdWVzdCIgY29kZVByb3BlcnR5PSJtZWRpY2F0aW9uQ29kZWFibGVDb25jZXB0IiB4c2k6dHlwZT0iUmV0cmlldmUiPgogICAgICAgICAgICAgICAgICA8Y29kZXMgbmFtZT0iQmVuem9kaWF6ZXBpbmVzIiBsaWJyYXJ5TmFtZT0iQ29tbW9uIiB4c2k6dHlwZT0iVmFsdWVTZXRSZWYiLz4KICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgPC9kZWY+CiAgICAgIDxkZWYgbmFtZT0iT3Bpb2lkIHdpdGggQW1idWxhdG9yeSBDYXJlIEFidXNlIFBvdGVudGlhbCIgY29udGV4dD0iUGF0aWVudCIgYWNjZXNzTGV2ZWw9IlB1YmxpYyI+CiAgICAgICAgIDxleHByZXNzaW9uIHhzaTp0eXBlPSJPciI+CiAgICAgICAgICAgIDxvcGVyYW5kIG5hbWU9IlZhbGlkYXRlIFRyaWdnZXIgRXZlbnQgRm9yIEFtYnVsYXRvcnkgQ2FyZSBBYnVzZSBQb3RlbnRpYWwiIHhzaTp0eXBlPSJFeHByZXNzaW9uUmVmIi8+CiAgICAgICAgICAgIDxvcGVyYW5kIHhzaTp0eXBlPSJFeGlzdHMiPgogICAgICAgICAgICAgICA8b3BlcmFuZCBkYXRhVHlwZT0iZmhpcjpNZWRpY2F0aW9uUmVxdWVzdCIgY29kZVByb3BlcnR5PSJtZWRpY2F0aW9uQ29kZWFibGVDb25jZXB0IiB4c2k6dHlwZT0iUmV0cmlldmUiPgogICAgICAgICAgICAgICAgICA8Y29kZXMgbmFtZT0iQW1idWxhdG9yeSBBYnVzZSBQb3RlbnRpYWwgT3Bpb2lkcyIgbGlicmFyeU5hbWU9IkNvbW1vbiIgeHNpOnR5cGU9IlZhbHVlU2V0UmVmIi8+CiAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIG5hbWU9IkluY2x1c2lvbiBDcml0ZXJpYSIgY29udGV4dD0iUGF0aWVudCIgYWNjZXNzTGV2ZWw9IlB1YmxpYyI+CiAgICAgICAgIDxleHByZXNzaW9uIHhzaTp0eXBlPSJBbmQiPgogICAgICAgICAgICA8b3BlcmFuZCB4c2k6dHlwZT0iQW5kIj4KICAgICAgICAgICAgICAgPG9wZXJhbmQgeHNpOnR5cGU9Ik9yIj4KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbmFtZT0iVmFsaWRhdGUgVHJpZ2dlciBFdmVudCBGb3IgQmVuem9kaWF6ZXBpbmUiIHhzaTp0eXBlPSJFeHByZXNzaW9uUmVmIi8+CiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIG5hbWU9IlZhbGlkYXRlIFRyaWdnZXIgRXZlbnQgRm9yIEFtYnVsYXRvcnkgQ2FyZSBBYnVzZSBQb3RlbnRpYWwiIHhzaTp0eXBlPSJFeHByZXNzaW9uUmVmIi8+CiAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgPG9wZXJhbmQgbmFtZT0iT24gQmVuem9kaWF6ZXBpbmUiIHhzaTp0eXBlPSJFeHByZXNzaW9uUmVmIi8+CiAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgPG9wZXJhbmQgbmFtZT0iT3Bpb2lkIHdpdGggQW1idWxhdG9yeSBDYXJlIEFidXNlIFBvdGVudGlhbCIgeHNpOnR5cGU9IkV4cHJlc3Npb25SZWYiLz4KICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICA8L2RlZj4KICAgICAgPGRlZiBuYW1lPSJHZXQgSW5kaWNhdG9yIiBjb250ZXh0PSJQYXRpZW50IiBhY2Nlc3NMZXZlbD0iUHVibGljIj4KICAgICAgICAgPGV4cHJlc3Npb24gdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9Indhcm5pbmciIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIG5hbWU9IkdldCBTdW1tYXJ5IiBjb250ZXh0PSJQYXRpZW50IiBhY2Nlc3NMZXZlbD0iUHVibGljIj4KICAgICAgICAgPGV4cHJlc3Npb24gdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9IkF2b2lkIHByZXNjcmliaW5nIG9waW9pZCBwYWluIG1lZGljYXRpb24gYW5kIGJlbnpvZGlhemVwaW5lIGNvbmN1cnJlbnRseSB3aGVuZXZlciBwb3NzaWJsZS4iIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIG5hbWU9IkdldCBEZXRhaWwiIGNvbnRleHQ9IlBhdGllbnQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiPgogICAgICAgICA8ZXhwcmVzc2lvbiB4c2k6dHlwZT0iSWYiPgogICAgICAgICAgICA8Y29uZGl0aW9uIGFzVHlwZT0idDpCb29sZWFuIiB4c2k6dHlwZT0iQXMiPgogICAgICAgICAgICAgICA8b3BlcmFuZCBuYW1lPSJWYWxpZGF0ZSBUcmlnZ2VyIEV2ZW50IEZvciBCZW56b2RpYXplcGluZSIgeHNpOnR5cGU9IkV4cHJlc3Npb25SZWYiLz4KICAgICAgICAgICAgPC9jb25kaXRpb24+CiAgICAgICAgICAgIDx0aGVuIHZhbHVlVHlwZT0idDpTdHJpbmciIHZhbHVlPSJUaGUgYmVuem9kaWF6ZXBpbmUgcHJlc2NyaXB0aW9uIHJlcXVlc3QgaXMgY29uY3VycmVudCB3aXRoIGFuIGFjdGl2ZSBvcGlvaWQgcHJlc2NyaXB0aW9uIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICA8ZWxzZSB2YWx1ZVR5cGU9InQ6U3RyaW5nIiB2YWx1ZT0iVGhlIG9waW9pZCBwcmVzY3JpcHRpb24gcmVxdWVzdCBpcyBjb25jdXJyZW50IHdpdGggYW4gYWN0aXZlIGJlbnpvZGlhemVwaW5lIHByZXNjcmlwdGlvbiIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICA8L2RlZj4KICAgPC9zdGF0ZW1lbnRzPgo8L2xpYnJhcnk+Cg=="
    }
  ]
}

Library "opioidcds-recommendation-10" Version "1"

Tags: (no tags)  +

This Resource , XML or JSON representation, or the full version history.. provenance for this resource
Updated: by

Participants

Author Kensaku Kawamoto, MD, PhD, MHS
Author Bryn Rhodes
Author Floyd Eisenberg, MD, MPH
Author Robert McClure, MD, MPH

Related Artifacts

Documentation CDC guideline for prescribing opioids for chronic pain https://guidelines.gov/summaries/summary/50153/cdc-guideline-for-prescribing-opioids-for-chronic-pain---united-states-2016#420
Depends On http://example.org/fhir/Library/opioidcds-common

Data Requirements

Type: MedicationRequest
Filter Value
medicationCodeableConcept In ValueSet http://example.org/fhir/ValueSet/opioids-indicating-end-of-life
Type: MedicationRequest
Filter Value
medicationCodeableConcept In ValueSet http://example.org/fhir/ValueSet/opioids-abused-in-ambulatory-care
Type: Observation
Filter Value
combo-code In ValueSet http://example.org/fhir/ValueSet/illicit-drug-urine-screening
Type: Observation
Filter Value
combo-code In ValueSet http://example.org/fhir/ValueSet/opioid-urine-screening

Contents

application/elm+xml

        <?xml version="1.0" encoding="UTF-8"?>
<library xmlns="urn:hl7-org:elm:r1" xmlns:t="urn:hl7-org:elm-types:r1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:fhir="http://hl7.org/fhir" xmlns:qdm43="urn:healthit-gov:qdm:v4_3" xmlns:qdm53="urn:healthit-gov:qdm:v5_3" xmlns:a="urn:hl7-org:cql-annotations:r1">
   <annotation startLine="62" startChar="12" endLine="62" endChar="60" message="Could not resolve code path medicationCodeableConcept for the type of the retrieve FHIR.MedicationRequest." errorType="semantic" errorSeverity="warning" xsi:type="a:CqlToElmError"/>
   <annotation startLine="62" startChar="12" endLine="62" endChar="60" message="Could not resolve membership operator for terminology target of the retrieve." errorType="semantic" errorSeverity="warning" xsi:type="a:CqlToElmError"/>
   <annotation startLine="66" startChar="3" endLine="66" endChar="66" message="Could not resolve code path medicationCodeableConcept for the type of the retrieve FHIR.MedicationRequest." errorType="semantic" errorSeverity="warning" xsi:type="a:CqlToElmError"/>
   <annotation startLine="66" startChar="3" endLine="66" endChar="66" message="Could not resolve membership operator for terminology target of the retrieve." errorType="semantic" errorSeverity="warning" xsi:type="a:CqlToElmError"/>
   <annotation startLine="74" startChar="3" endLine="74" endChar="64" message="Could not resolve code path combo-code for the type of the retrieve FHIR.Observation." errorType="semantic" errorSeverity="warning" xsi:type="a:CqlToElmError"/>
   <annotation startLine="74" startChar="3" endLine="74" endChar="64" message="Could not resolve membership operator for terminology target of the retrieve." errorType="semantic" errorSeverity="warning" xsi:type="a:CqlToElmError"/>
   <annotation startLine="79" startChar="3" endLine="79" endChar="63" message="Could not resolve code path combo-code for the type of the retrieve FHIR.Observation." errorType="semantic" errorSeverity="warning" xsi:type="a:CqlToElmError"/>
   <annotation startLine="79" startChar="3" endLine="79" endChar="63" message="Could not resolve membership operator for terminology target of the retrieve." errorType="semantic" errorSeverity="warning" xsi:type="a:CqlToElmError"/>
   <annotation startLine="134" startChar="20" endLine="134" endChar="76" message="List-valued expression was demoted to a singleton." errorType="semantic" errorSeverity="warning" xsi:type="a:CqlToElmError"/>
   <annotation startLine="143" startChar="16" endLine="143" endChar="17" message="List-valued expression was demoted to a singleton." errorType="semantic" errorSeverity="warning" xsi:type="a:CqlToElmError"/>
   <annotation startLine="157" startChar="52" endLine="157" endChar="73" message="List-valued expression was demoted to a singleton." errorType="semantic" errorSeverity="warning" xsi:type="a:CqlToElmError"/>
   <annotation startLine="171" startChar="62" endLine="171" endChar="78" message="List-valued expression was demoted to a singleton." errorType="semantic" errorSeverity="warning" xsi:type="a:CqlToElmError"/>
   <identifier id="OpioidCDS_STU4_REC_10" version="0.1.0"/>
   <schemaIdentifier id="urn:hl7-org:elm" version="r1"/>
   <usings>
      <def localIdentifier="System" uri="urn:hl7-org:elm-types:r1"/>
      <def localIdentifier="FHIR" uri="http://hl7.org/fhir" version="3.2.0"/>
   </usings>
   <includes>
      <def localIdentifier="Common" path="OpioidCDS_STU4_Common" version="0.1.0"/>
   </includes>
   <parameters>
      <def name="ContextPrescriptions" accessLevel="Public">
         <parameterTypeSpecifier xsi:type="ListTypeSpecifier">
            <elementType name="fhir:MedicationRequest" xsi:type="NamedTypeSpecifier"/>
         </parameterTypeSpecifier>
      </def>
   </parameters>
   <statements>
      <def name="Patient" context="Patient">
         <expression xsi:type="SingletonFrom">
            <operand dataType="fhir:Patient" xsi:type="Retrieve"/>
         </expression>
      </def>
      <def name="Lookback Year" context="Patient" accessLevel="Public">
         <expression lowClosed="true" highClosed="true" xsi:type="Interval">
            <low xsi:type="Subtract">
               <operand xsi:type="Subtract">
                  <operand xsi:type="Today"/>
                  <operand value="12" unit="months" xsi:type="Quantity"/>
               </operand>
               <operand value="1" unit="days" xsi:type="Quantity"/>
            </low>
            <high xsi:type="Subtract">
               <operand xsi:type="Today"/>
               <operand value="1" unit="day" xsi:type="Quantity"/>
            </high>
         </expression>
      </def>
      <def name="Validate Trigger Event" context="Patient" accessLevel="Public">
         <expression xsi:type="Exists">
            <operand xsi:type="Query">
               <source alias="triggerScript">
                  <expression name="ContextPrescriptions" xsi:type="ParameterRef"/>
               </source>
               <where name="IsOpioidWithAmbulatoryAbusePotential" libraryName="Common" xsi:type="FunctionRef">
                  <operand name="ToCode" libraryName="Common" xsi:type="FunctionRef">
                     <operand xsi:type="Indexer">
                        <operand path="coding" xsi:type="Property">
                           <source path="medication" scope="triggerScript" xsi:type="Property"/>
                        </operand>
                        <operand valueType="t:Integer" value="0" xsi:type="Literal"/>
                     </operand>
                  </operand>
               </where>
            </operand>
         </expression>
      </def>
      <def name="Exclusion Criteria" context="Patient" accessLevel="Public">
         <expression xsi:type="Or">
            <operand xsi:type="Exists">
               <operand dataType="fhir:MedicationRequest" codeProperty="medicationCodeableConcept" xsi:type="Retrieve">
                  <codes name="End Of Life Opioids" libraryName="Common" xsi:type="ValueSetRef"/>
               </operand>
            </operand>
            <operand name="HasMetastaticCancer" libraryName="Common" xsi:type="ExpressionRef"/>
         </expression>
      </def>
      <def name="Get Active Ambulatory Opioid Rx" context="Patient" accessLevel="Public">
         <expression xsi:type="Query">
            <source alias="Rx">
               <expression dataType="fhir:MedicationRequest" codeProperty="medicationCodeableConcept" xsi:type="Retrieve">
                  <codes name="Ambulatory Abuse Potential Opioids" libraryName="Common" xsi:type="ValueSetRef"/>
               </expression>
            </source>
            <where xsi:type="And">
               <operand xsi:type="Equal">
                  <operand path="value" xsi:type="Property">
                     <source path="status" scope="Rx" xsi:type="Property"/>
                  </operand>
                  <operand valueType="t:String" value="active" xsi:type="Literal"/>
               </operand>
               <operand xsi:type="Equal">
                  <operand path="value" xsi:type="Property">
                     <source path="code" xsi:type="Property">
                        <source xsi:type="Indexer">
                           <operand xsi:type="Flatten">
                              <operand xsi:type="Query">
                                 <source alias="$this">
                                    <expression path="category" scope="Rx" xsi:type="Property"/>
                                 </source>
                                 <where xsi:type="Not">
                                    <operand xsi:type="IsNull">
                                       <operand path="coding" xsi:type="Property">
                                          <source name="$this" xsi:type="AliasRef"/>
                                       </operand>
                                    </operand>
                                 </where>
                                 <return>
                                    <expression path="coding" xsi:type="Property">
                                       <source name="$this" xsi:type="AliasRef"/>
                                    </expression>
                                 </return>
                              </operand>
                           </operand>
                           <operand valueType="t:Integer" value="0" xsi:type="Literal"/>
                        </source>
                     </source>
                  </operand>
                  <operand valueType="t:String" value="outpatient" xsi:type="Literal"/>
               </operand>
            </where>
         </expression>
      </def>
      <def name="Get Illicit Drug Urine Screenings in Last 12 Months" context="Patient" accessLevel="Public">
         <expression xsi:type="Query">
            <source alias="observation">
               <expression dataType="fhir:Observation" codeProperty="combo-code" xsi:type="Retrieve">
                  <codes name="Illicit Drug Screening" libraryName="Common" xsi:type="ValueSetRef"/>
               </expression>
            </source>
            <where xsi:type="In">
               <operand path="value" xsi:type="Property">
                  <source path="effective" scope="observation" xsi:type="Property"/>
               </operand>
               <operand name="Lookback Year" xsi:type="ExpressionRef"/>
            </where>
            <sort>
               <by direction="asc" xsi:type="ByExpression">
                  <expression path="value" xsi:type="Property">
                     <source name="effective" xsi:type="IdentifierRef"/>
                  </expression>
               </by>
            </sort>
         </expression>
      </def>
      <def name="Most Recent Illicit Drug Urine Screenings in Last 12 Months" context="Patient" accessLevel="Public">
         <expression xsi:type="Last">
            <source name="Get Illicit Drug Urine Screenings in Last 12 Months" xsi:type="ExpressionRef"/>
         </expression>
      </def>
      <def name="Get Opioid Drug Urine Screenings in Last 12 Months" context="Patient" accessLevel="Public">
         <expression xsi:type="Query">
            <source alias="observation">
               <expression dataType="fhir:Observation" codeProperty="combo-code" xsi:type="Retrieve">
                  <codes name="Opioid Drug Screening" libraryName="Common" xsi:type="ValueSetRef"/>
               </expression>
            </source>
            <where xsi:type="In">
               <operand path="value" xsi:type="Property">
                  <source path="effective" scope="observation" xsi:type="Property"/>
               </operand>
               <operand name="Lookback Year" xsi:type="ExpressionRef"/>
            </where>
            <sort>
               <by direction="asc" xsi:type="ByExpression">
                  <expression path="value" xsi:type="Property">
                     <source name="effective" xsi:type="IdentifierRef"/>
                  </expression>
               </by>
            </sort>
         </expression>
      </def>
      <def name="Most Recent Opioid Drug Urine Screenings in Last 12 Months" context="Patient" accessLevel="Public">
         <expression xsi:type="Last">
            <source name="Get Opioid Drug Urine Screenings in Last 12 Months" xsi:type="ExpressionRef"/>
         </expression>
      </def>
      <def name="No Urine Screening In Last 12 Months" context="Patient" accessLevel="Public">
         <expression xsi:type="And">
            <operand xsi:type="IsNull">
               <operand name="Most Recent Illicit Drug Urine Screenings in Last 12 Months" xsi:type="ExpressionRef"/>
            </operand>
            <operand xsi:type="IsNull">
               <operand name="Most Recent Opioid Drug Urine Screenings in Last 12 Months" xsi:type="ExpressionRef"/>
            </operand>
         </expression>
      </def>
      <def name="Positive Opioid Drug Screening" context="Patient" accessLevel="Public">
         <expression xsi:type="Query">
            <source alias="mostRecentScreening">
               <expression name="Most Recent Opioid Drug Urine Screenings in Last 12 Months" xsi:type="ExpressionRef"/>
            </source>
            <where xsi:type="Or">
               <operand xsi:type="Equal">
                  <operand path="value" xsi:type="Property">
                     <source path="code" xsi:type="Property">
                        <source xsi:type="Indexer">
                           <operand path="coding" xsi:type="Property">
                              <source path="interpretation" scope="mostRecentScreening" xsi:type="Property"/>
                           </operand>
                           <operand valueType="t:Integer" value="0" xsi:type="Literal"/>
                        </source>
                     </source>
                  </operand>
                  <operand valueType="t:String" value="POS" xsi:type="Literal"/>
               </operand>
               <operand xsi:type="If">
                  <condition asType="t:Boolean" xsi:type="As">
                     <operand xsi:type="Not">
                        <operand xsi:type="IsNull">
                           <operand xsi:type="Indexer">
                              <operand path="component" scope="mostRecentScreening" xsi:type="Property"/>
                              <operand valueType="t:Integer" value="0" xsi:type="Literal"/>
                           </operand>
                        </operand>
                     </operand>
                  </condition>
                  <then xsi:type="Equal">
                     <operand path="value" xsi:type="Property">
                        <source path="code" xsi:type="Property">
                           <source xsi:type="Indexer">
                              <operand path="coding" xsi:type="Property">
                                 <source path="interpretation" xsi:type="Property">
                                    <source xsi:type="Indexer">
                                       <operand path="component" scope="mostRecentScreening" xsi:type="Property"/>
                                       <operand valueType="t:Integer" value="0" xsi:type="Literal"/>
                                    </source>
                                 </source>
                              </operand>
                              <operand valueType="t:Integer" value="0" xsi:type="Literal"/>
                           </source>
                        </source>
                     </operand>
                     <operand valueType="t:String" value="POS" xsi:type="Literal"/>
                  </then>
                  <else valueType="t:Boolean" value="false" xsi:type="Literal"/>
               </operand>
            </where>
         </expression>
      </def>
      <def name="Orders Before Most Recent Opioid Screening" context="Patient" accessLevel="Public">
         <expression xsi:type="Query">
            <source alias="orders">
               <expression name="Get Active Ambulatory Opioid Rx" xsi:type="ExpressionRef"/>
            </source>
            <relationship alias="mostRecentScreening" xsi:type="With">
               <expression name="Positive Opioid Drug Screening" xsi:type="ExpressionRef"/>
               <suchThat xsi:type="Less">
                  <operand path="value" xsi:type="Property">
                     <source path="authoredOn" scope="orders" xsi:type="Property"/>
                  </operand>
                  <operand path="value" xsi:type="Property">
                     <source path="effective" scope="mostRecentScreening" xsi:type="Property"/>
                  </operand>
               </suchThat>
            </relationship>
            <return>
               <expression name="orders" xsi:type="AliasRef"/>
            </return>
         </expression>
      </def>
      <def name="Prescribed Opioids" context="Patient" accessLevel="Public">
         <expression xsi:type="Query">
            <source alias="orders">
               <expression name="Orders Before Most Recent Opioid Screening" xsi:type="ExpressionRef"/>
            </source>
            <return>
               <expression xsi:type="Lower">
                  <operand xsi:type="SingletonFrom">
                     <operand name="GetIngredient" libraryName="Common" xsi:type="FunctionRef">
                        <operand name="ToCode" libraryName="Common" xsi:type="FunctionRef">
                           <operand xsi:type="Indexer">
                              <operand path="coding" xsi:type="Property">
                                 <source path="medication" scope="orders" xsi:type="Property"/>
                              </operand>
                              <operand valueType="t:Integer" value="0" xsi:type="Literal"/>
                           </operand>
                        </operand>
                     </operand>
                  </operand>
               </expression>
            </return>
         </expression>
      </def>
      <def name="GetOpioid" context="Patient" accessLevel="Public" xsi:type="FunctionDef">
         <expression xsi:type="Case">
            <comparand name="value" xsi:type="OperandRef"/>
            <caseItem>
               <when valueType="t:String" value="3299-5" xsi:type="Literal"/>
               <then valueType="t:String" value="Acetaminophen" xsi:type="Literal"/>
            </caseItem>
            <caseItem>
               <when valueType="t:String" value="14184-6" xsi:type="Literal"/>
               <then valueType="t:String" value="Atropine" xsi:type="Literal"/>
            </caseItem>
            <caseItem>
               <when valueType="t:String" value="16485-5" xsi:type="Literal"/>
               <then valueType="t:String" value="Bromodiphenhydramine" xsi:type="Literal"/>
            </caseItem>
            <caseItem>
               <when valueType="t:String" value="3408-2" xsi:type="Literal"/>
               <then valueType="t:String" value="Brompheniramine" xsi:type="Literal"/>
            </caseItem>
            <caseItem>
               <when valueType="t:String" value="3414-0" xsi:type="Literal"/>
               <then valueType="t:String" value="Buprenorphine" xsi:type="Literal"/>
            </caseItem>
            <caseItem>
               <when valueType="t:String" value="3421-5" xsi:type="Literal"/>
               <then valueType="t:String" value="Butalbital" xsi:type="Literal"/>
            </caseItem>
            <caseItem>
               <when valueType="t:String" value="12333-1" xsi:type="Literal"/>
               <then valueType="t:String" value="Butorphanol" xsi:type="Literal"/>
            </caseItem>
            <caseItem>
               <when valueType="t:String" value="3423-1" xsi:type="Literal"/>
               <then valueType="t:String" value="Caffeine" xsi:type="Literal"/>
            </caseItem>
            <caseItem>
               <when valueType="t:String" value="21142-5" xsi:type="Literal"/>
               <then valueType="t:String" value="Carisoprodol" xsi:type="Literal"/>
            </caseItem>
            <caseItem>
               <when valueType="t:String" value="16605-8" xsi:type="Literal"/>
               <then valueType="t:String" value="Chlorcyclizine" xsi:type="Literal"/>
            </caseItem>
            <caseItem>
               <when valueType="t:String" value="3467-8" xsi:type="Literal"/>
               <then valueType="t:String" value="Chlorpheniramine" xsi:type="Literal"/>
            </caseItem>
            <caseItem>
               <when valueType="t:String" value="3507-1" xsi:type="Literal"/>
               <then valueType="t:String" value="Codeine" xsi:type="Literal"/>
            </caseItem>
            <caseItem>
               <when valueType="t:String" value="14066-5" xsi:type="Literal"/>
               <then valueType="t:String" value="Dihydrocodeine" xsi:type="Literal"/>
            </caseItem>
            <caseItem>
               <when valueType="t:String" value="3571-7" xsi:type="Literal"/>
               <then valueType="t:String" value="Diphenhydramine" xsi:type="Literal"/>
            </caseItem>
            <caseItem>
               <when valueType="t:String" value="11235-9" xsi:type="Literal"/>
               <then valueType="t:String" value="Fentanyl" xsi:type="Literal"/>
            </caseItem>
            <caseItem>
               <when valueType="t:String" value="12308-3" xsi:type="Literal"/>
               <then valueType="t:String" value="Hydrocodone" xsi:type="Literal"/>
            </caseItem>
            <caseItem>
               <when valueType="t:String" value="9834-3" xsi:type="Literal"/>
               <then valueType="t:String" value="Hydromorphone" xsi:type="Literal"/>
            </caseItem>
            <caseItem>
               <when valueType="t:String" value="14071" xsi:type="Literal"/>
               <then valueType="t:String" value="Ibuprofen" xsi:type="Literal"/>
            </caseItem>
            <caseItem>
               <when valueType="t:String" value="3711-9" xsi:type="Literal"/>
               <then valueType="t:String" value="Levorphanol" xsi:type="Literal"/>
            </caseItem>
            <caseItem>
               <when valueType="t:String" value="3746-5" xsi:type="Literal"/>
               <then valueType="t:String" value="Meperidine" xsi:type="Literal"/>
            </caseItem>
            <caseItem>
               <when valueType="t:String" value="3773-9" xsi:type="Literal"/>
               <then valueType="t:String" value="Methadone" xsi:type="Literal"/>
            </caseItem>
            <caseItem>
               <when valueType="t:String" value="3830-7" xsi:type="Literal"/>
               <then valueType="t:String" value="Morphine" xsi:type="Literal"/>
            </caseItem>
            <caseItem>
               <when valueType="t:String" value="42618-9" xsi:type="Literal"/>
               <then valueType="t:String" value="Naloxone" xsi:type="Literal"/>
            </caseItem>
            <caseItem>
               <when valueType="t:String" value="12309-1" xsi:type="Literal"/>
               <then valueType="t:String" value="Naltrexone" xsi:type="Literal"/>
            </caseItem>
            <caseItem>
               <when valueType="t:String" value="10998-3" xsi:type="Literal"/>
               <then valueType="t:String" value="Oxycodone" xsi:type="Literal"/>
            </caseItem>
            <caseItem>
               <when valueType="t:String" value="11247-4" xsi:type="Literal"/>
               <then valueType="t:String" value="Oxymorphone" xsi:type="Literal"/>
            </caseItem>
            <caseItem>
               <when valueType="t:String" value="3917-2" xsi:type="Literal"/>
               <then valueType="t:String" value="Pentazocine" xsi:type="Literal"/>
            </caseItem>
            <caseItem>
               <when valueType="t:String" value="3962-8" xsi:type="Literal"/>
               <then valueType="t:String" value="Phenylephrine" xsi:type="Literal"/>
            </caseItem>
            <caseItem>
               <when valueType="t:String" value="3965-1" xsi:type="Literal"/>
               <then valueType="t:String" value="Phenylpropanolamine" xsi:type="Literal"/>
            </caseItem>
            <caseItem>
               <when valueType="t:String" value="11000-7" xsi:type="Literal"/>
               <then valueType="t:String" value="Promethazine" xsi:type="Literal"/>
            </caseItem>
            <caseItem>
               <when valueType="t:String" value="4003-0" xsi:type="Literal"/>
               <then valueType="t:String" value="Pseudoephedrine" xsi:type="Literal"/>
            </caseItem>
            <caseItem>
               <when valueType="t:String" value="4009-7" xsi:type="Literal"/>
               <then valueType="t:String" value="Pyrilamine" xsi:type="Literal"/>
            </caseItem>
            <caseItem>
               <when valueType="t:String" value="65807-0" xsi:type="Literal"/>
               <then valueType="t:String" value="Tapentadol" xsi:type="Literal"/>
            </caseItem>
            <caseItem>
               <when valueType="t:String" value="43219-5" xsi:type="Literal"/>
               <then valueType="t:String" value="Tramadol" xsi:type="Literal"/>
            </caseItem>
            <else xsi:type="Concatenate">
               <operand valueType="t:String" value="Unknown code: " xsi:type="Literal"/>
               <operand name="value" xsi:type="OperandRef"/>
            </else>
         </expression>
         <operand name="value">
            <operandTypeSpecifier name="t:String" xsi:type="NamedTypeSpecifier"/>
         </operand>
      </def>
      <def name="Missing Opioids" context="Patient" accessLevel="Public">
         <expression xsi:type="If">
            <condition asType="t:Boolean" xsi:type="As">
               <operand xsi:type="Not">
                  <operand xsi:type="IsNull">
                     <operand name="Positive Opioid Drug Screening" xsi:type="ExpressionRef"/>
                  </operand>
               </operand>
            </condition>
            <then xsi:type="Except">
               <operand xsi:type="Query">
                  <source alias="Prescriptions">
                     <expression name="Prescribed Opioids" xsi:type="ExpressionRef"/>
                  </source>
               </operand>
               <operand xsi:type="ToList">
                  <operand xsi:type="Lower">
                     <operand name="GetOpioid" xsi:type="FunctionRef">
                        <operand path="value" xsi:type="Property">
                           <source path="code" xsi:type="Property">
                              <source xsi:type="Indexer">
                                 <operand path="coding" xsi:type="Property">
                                    <source path="code" xsi:type="Property">
                                       <source name="Positive Opioid Drug Screening" xsi:type="ExpressionRef"/>
                                    </source>
                                 </operand>
                                 <operand valueType="t:Integer" value="0" xsi:type="Literal"/>
                              </source>
                           </source>
                        </operand>
                     </operand>
                  </operand>
               </operand>
            </then>
            <else xsi:type="As">
               <operand xsi:type="Null"/>
               <asTypeSpecifier xsi:type="ListTypeSpecifier">
                  <elementType name="t:String" xsi:type="NamedTypeSpecifier"/>
               </asTypeSpecifier>
            </else>
         </expression>
      </def>
      <def name="Has Missing Opioids?" context="Patient" accessLevel="Public">
         <expression xsi:type="Exists">
            <operand name="Missing Opioids" xsi:type="ExpressionRef"/>
         </expression>
      </def>
      <def name="Get Opioids From Most Recent Screening" context="Patient" accessLevel="Public">
         <expression xsi:type="Query">
            <source alias="mostRecentScreening">
               <expression name="Positive Opioid Drug Screening" xsi:type="ExpressionRef"/>
            </source>
            <return>
               <expression xsi:type="Union">
                  <operand xsi:type="ToList">
                     <operand xsi:type="Lower">
                        <operand name="GetOpioid" xsi:type="FunctionRef">
                           <operand path="value" xsi:type="Property">
                              <source path="code" xsi:type="Property">
                                 <source xsi:type="Indexer">
                                    <operand path="coding" xsi:type="Property">
                                       <source path="code" scope="mostRecentScreening" xsi:type="Property"/>
                                    </operand>
                                    <operand valueType="t:Integer" value="0" xsi:type="Literal"/>
                                 </source>
                              </source>
                           </operand>
                        </operand>
                     </operand>
                  </operand>
                  <operand xsi:type="ToList">
                     <operand xsi:type="If">
                        <condition asType="t:Boolean" xsi:type="As">
                           <operand xsi:type="Not">
                              <operand xsi:type="IsNull">
                                 <operand xsi:type="Indexer">
                                    <operand path="component" scope="mostRecentScreening" xsi:type="Property"/>
                                    <operand valueType="t:Integer" value="0" xsi:type="Literal"/>
                                 </operand>
                              </operand>
                           </operand>
                        </condition>
                        <then xsi:type="Lower">
                           <operand name="GetOpioid" xsi:type="FunctionRef">
                              <operand path="value" xsi:type="Property">
                                 <source path="code" xsi:type="Property">
                                    <source xsi:type="Indexer">
                                       <operand path="coding" xsi:type="Property">
                                          <source path="code" xsi:type="Property">
                                             <source xsi:type="Indexer">
                                                <operand path="component" scope="mostRecentScreening" xsi:type="Property"/>
                                                <operand valueType="t:Integer" value="0" xsi:type="Literal"/>
                                             </source>
                                          </source>
                                       </operand>
                                       <operand valueType="t:Integer" value="0" xsi:type="Literal"/>
                                    </source>
                                 </source>
                              </operand>
                           </operand>
                        </then>
                        <else asType="t:String" xsi:type="As">
                           <operand xsi:type="SingletonFrom">
                              <operand xsi:type="List"/>
                           </operand>
                        </else>
                     </operand>
                  </operand>
               </expression>
            </return>
         </expression>
      </def>
      <def name="Unprescribed Opioids" context="Patient" accessLevel="Public">
         <expression xsi:type="Query">
            <source alias="mostRecentScreeningOpioids">
               <expression name="Get Opioids From Most Recent Screening" xsi:type="ExpressionRef"/>
            </source>
            <relationship alias="ingredients" xsi:type="With">
               <expression name="Prescribed Opioids" xsi:type="ExpressionRef"/>
               <suchThat xsi:type="Not">
                  <operand xsi:type="In">
                     <operand name="mostRecentScreeningOpioids" xsi:type="AliasRef"/>
                     <operand xsi:type="ToList">
                        <operand name="ingredients" xsi:type="AliasRef"/>
                     </operand>
                  </operand>
               </suchThat>
            </relationship>
            <return>
               <expression name="mostRecentScreeningOpioids" xsi:type="AliasRef"/>
            </return>
         </expression>
      </def>
      <def name="Has Unprescribed Opioids?" context="Patient" accessLevel="Public">
         <expression xsi:type="Exists">
            <operand name="Unprescribed Opioids" xsi:type="ExpressionRef"/>
         </expression>
      </def>
      <def name="Positive Illicit Drug Screening" context="Patient" accessLevel="Public">
         <expression xsi:type="Query">
            <source alias="mostRecentScreening">
               <expression name="Most Recent Illicit Drug Urine Screenings in Last 12 Months" xsi:type="ExpressionRef"/>
            </source>
            <where xsi:type="Or">
               <operand xsi:type="Equal">
                  <operand path="value" xsi:type="Property">
                     <source path="code" xsi:type="Property">
                        <source xsi:type="Indexer">
                           <operand path="coding" xsi:type="Property">
                              <source path="interpretation" scope="mostRecentScreening" xsi:type="Property"/>
                           </operand>
                           <operand valueType="t:Integer" value="0" xsi:type="Literal"/>
                        </source>
                     </source>
                  </operand>
                  <operand valueType="t:String" value="POS" xsi:type="Literal"/>
               </operand>
               <operand xsi:type="If">
                  <condition asType="t:Boolean" xsi:type="As">
                     <operand xsi:type="Not">
                        <operand xsi:type="IsNull">
                           <operand xsi:type="Indexer">
                              <operand path="component" scope="mostRecentScreening" xsi:type="Property"/>
                              <operand valueType="t:Integer" value="0" xsi:type="Literal"/>
                           </operand>
                        </operand>
                     </operand>
                  </condition>
                  <then xsi:type="Equal">
                     <operand path="value" xsi:type="Property">
                        <source path="code" xsi:type="Property">
                           <source xsi:type="Indexer">
                              <operand path="coding" xsi:type="Property">
                                 <source path="interpretation" xsi:type="Property">
                                    <source xsi:type="Indexer">
                                       <operand path="component" scope="mostRecentScreening" xsi:type="Property"/>
                                       <operand valueType="t:Integer" value="0" xsi:type="Literal"/>
                                    </source>
                                 </source>
                              </operand>
                              <operand valueType="t:Integer" value="0" xsi:type="Literal"/>
                           </source>
                        </source>
                     </operand>
                     <operand valueType="t:String" value="POS" xsi:type="Literal"/>
                  </then>
                  <else valueType="t:Boolean" value="false" xsi:type="Literal"/>
               </operand>
            </where>
         </expression>
      </def>
      <def name="Has Illicit Drugs in Screening?" context="Patient" accessLevel="Public">
         <expression xsi:type="Exists">
            <operand xsi:type="ToList">
               <operand name="Positive Illicit Drug Screening" xsi:type="ExpressionRef"/>
            </operand>
         </expression>
      </def>
      <def name="Inclusion Criteria" context="Patient" accessLevel="Public">
         <expression xsi:type="And">
            <operand xsi:type="And">
               <operand xsi:type="And">
                  <operand name="Validate Trigger Event" xsi:type="ExpressionRef"/>
                  <operand xsi:type="Not">
                     <operand name="Exclusion Criteria" xsi:type="ExpressionRef"/>
                  </operand>
               </operand>
               <operand xsi:type="AnyTrue">
                  <source name="ProbableDaysInRange" libraryName="Common" xsi:type="FunctionRef">
                     <operand name="Get Active Ambulatory Opioid Rx" xsi:type="ExpressionRef"/>
                     <operand valueType="t:Integer" value="90" xsi:type="Literal"/>
                     <operand valueType="t:Integer" value="80" xsi:type="Literal"/>
                  </source>
               </operand>
            </operand>
            <operand xsi:type="Or">
               <operand xsi:type="Or">
                  <operand xsi:type="Or">
                     <operand name="No Urine Screening In Last 12 Months" xsi:type="ExpressionRef"/>
                     <operand name="Has Missing Opioids?" xsi:type="ExpressionRef"/>
                  </operand>
                  <operand name="Has Unprescribed Opioids?" xsi:type="ExpressionRef"/>
               </operand>
               <operand name="Has Illicit Drugs in Screening?" xsi:type="ExpressionRef"/>
            </operand>
         </expression>
      </def>
      <def name="GetIllicitDrug" context="Patient" accessLevel="Public" xsi:type="FunctionDef">
         <expression xsi:type="Case">
            <comparand name="value" xsi:type="OperandRef"/>
            <caseItem>
               <when valueType="t:String" value="3397-7" xsi:type="Literal"/>
               <then valueType="t:String" value="Cocaine" xsi:type="Literal"/>
            </caseItem>
            <caseItem>
               <when valueType="t:String" value="14267-9" xsi:type="Literal"/>
               <then valueType="t:String" value="Methylenedioxymethamphetamine (MDMA)" xsi:type="Literal"/>
            </caseItem>
            <caseItem>
               <when valueType="t:String" value="29868-7" xsi:type="Literal"/>
               <then valueType="t:String" value="Gamma Hydroxybutyric Acid (GHB)" xsi:type="Literal"/>
            </caseItem>
            <caseItem>
               <when valueType="t:String" value="12327-3" xsi:type="Literal"/>
               <then valueType="t:String" value="Ketamine" xsi:type="Literal"/>
            </caseItem>
            <caseItem>
               <when valueType="t:String" value="3732-5" xsi:type="Literal"/>
               <then valueType="t:String" value="Lysergic Acid Diethylamide (LSD)" xsi:type="Literal"/>
            </caseItem>
            <caseItem>
               <when valueType="t:String" value="3779-6" xsi:type="Literal"/>
               <then valueType="t:String" value="Methamphetamine" xsi:type="Literal"/>
            </caseItem>
            <caseItem>
               <when valueType="t:String" value="17504-2" xsi:type="Literal"/>
               <then valueType="t:String" value="Psilocybin" xsi:type="Literal"/>
            </caseItem>
            <caseItem>
               <when valueType="t:String" value="41020-9" xsi:type="Literal"/>
               <then valueType="t:String" value="Flunitrazepam (Rohypnol)" xsi:type="Literal"/>
            </caseItem>
            <caseItem>
               <when valueType="t:String" value="3426-4" xsi:type="Literal"/>
               <then valueType="t:String" value="Tetrahydrocannabinol (THC)" xsi:type="Literal"/>
            </caseItem>
            <else xsi:type="Concatenate">
               <operand valueType="t:String" value="Unknown code: " xsi:type="Literal"/>
               <operand name="value" xsi:type="OperandRef"/>
            </else>
         </expression>
         <operand name="value">
            <operandTypeSpecifier name="t:String" xsi:type="NamedTypeSpecifier"/>
         </operand>
      </def>
      <def name="Inconsistent Illicit Drugs" context="Patient" accessLevel="Public">
         <expression xsi:type="Concatenate">
            <operand valueType="t:String" value="Found the following illicit drug(s) in urine drug screen: " xsi:type="Literal"/>
            <operand xsi:type="If">
               <condition asType="t:Boolean" xsi:type="As">
                  <operand xsi:type="IsNull">
                     <operand name="GetIllicitDrug" xsi:type="FunctionRef">
                        <operand path="value" xsi:type="Property">
                           <source path="code" xsi:type="Property">
                              <source xsi:type="Indexer">
                                 <operand path="coding" xsi:type="Property">
                                    <source path="code" xsi:type="Property">
                                       <source name="Positive Illicit Drug Screening" xsi:type="ExpressionRef"/>
                                    </source>
                                 </operand>
                                 <operand valueType="t:Integer" value="0" xsi:type="Literal"/>
                              </source>
                           </source>
                        </operand>
                     </operand>
                  </operand>
               </condition>
               <then name="GetIllicitDrug" xsi:type="FunctionRef">
                  <operand path="value" xsi:type="Property">
                     <source path="code" xsi:type="Property">
                        <source xsi:type="Indexer">
                           <operand path="coding" xsi:type="Property">
                              <source path="interpretation" xsi:type="Property">
                                 <source name="Positive Illicit Drug Screening" xsi:type="ExpressionRef"/>
                              </source>
                           </operand>
                           <operand valueType="t:Integer" value="0" xsi:type="Literal"/>
                        </source>
                     </source>
                  </operand>
               </then>
               <else name="GetIllicitDrug" xsi:type="FunctionRef">
                  <operand path="value" xsi:type="Property">
                     <source path="code" xsi:type="Property">
                        <source xsi:type="Indexer">
                           <operand path="coding" xsi:type="Property">
                              <source path="code" xsi:type="Property">
                                 <source name="Positive Illicit Drug Screening" xsi:type="ExpressionRef"/>
                              </source>
                           </operand>
                           <operand valueType="t:Integer" value="0" xsi:type="Literal"/>
                        </source>
                     </source>
                  </operand>
               </else>
            </operand>
         </expression>
      </def>
      <def name="Has Opioids in Screening?" context="Patient" accessLevel="Public">
         <expression xsi:type="Exists">
            <operand xsi:type="ToList">
               <operand name="Positive Opioid Drug Screening" xsi:type="ExpressionRef"/>
            </operand>
         </expression>
      </def>
      <def name="Inconsistent Unprescribed Opioids" context="Patient" accessLevel="Public">
         <expression xsi:type="Concatenate">
            <operand valueType="t:String" value="Found the following unprescribed opioid(s): " xsi:type="Literal"/>
            <operand xsi:type="SingletonFrom">
               <operand name="Unprescribed Opioids" xsi:type="ExpressionRef"/>
            </operand>
         </expression>
      </def>
      <def name="Inconsistent Missing Opioids" context="Patient" accessLevel="Public">
         <expression xsi:type="Concatenate">
            <operand valueType="t:String" value="The following opioids are missing from the screening: " xsi:type="Literal"/>
            <operand xsi:type="SingletonFrom">
               <operand name="Missing Opioids" xsi:type="ExpressionRef"/>
            </operand>
         </expression>
      </def>
      <def name="Get Indicator" context="Patient" accessLevel="Public">
         <expression valueType="t:String" value="warning" xsi:type="Literal"/>
      </def>
   </statements>
</library>

      

{
  "resourceType" : "Library",
  "id" : "opioidcds-recommendation-10",
  "meta" : {
    "versionId" : "1",
    "lastUpdated" : "2021-05-24T10:50:20.688Z",
    "tag" : [
      {
        "system" : "http://terminology.hl7.org/CodeSystem/v3-ActReason",
        "code" : "HTEST",
        "display" : "test health data"
      }
    ]
  },
  "text" : {
    "status" : "generated",
    "div" : "<div xmlns=\"http://www.w3.org/1999/xhtml\">\n <h2>Participants</h2>\n <table class=\"grid\">\n <tr>\n <td>Author</td>\n <td>Kensaku Kawamoto, MD, PhD, MHS</td>\n </tr>\n <tr>\n <td>Author</td>\n <td>Bryn Rhodes</td>\n </tr>\n <tr>\n <td>Author</td>\n <td>Floyd Eisenberg, MD, MPH</td>\n </tr>\n <tr>\n <td>Author</td>\n <td>Robert McClure, MD, MPH</td>\n </tr>\n </table>\n <h2>Related Artifacts</h2>\n <table class=\"grid\">\n <tr>\n <td>Documentation</td>\n <td>CDC guideline for prescribing opioids for chronic pain</td>\n <td>https://guidelines.gov/summaries/summary/50153/cdc-guideline-for-prescribing-opioids-for-chronic-pain---united-states-2016#420</td>\n </tr>\n <tr>\n <td>Depends On</td>\n <td/>\n <td>\n <code>http://example.org/fhir/Library/opioidcds-common</code>\n </td>\n </tr>\n </table>\n <h2>Data Requirements</h2>\n <table class=\"grid\">\n <tr>\n <td colspan=\"2\">\n <b>Type</b>: \n <a href=\"medicationrequest.html\">MedicationRequest</a>\n </td>\n </tr>\n <tr style=\"background-color: #efefef\">\n <td>Filter</td>\n <td>Value</td>\n </tr>\n <tr>\n <td>medicationCodeableConcept</td>\n <td>In ValueSet \n <a href=\"http://example.org/fhir/ValueSet/opioids-indicating-end-of-life\">http://example.org/fhir/ValueSet/opioids-indicating-end-of-life</a>\n </td>\n </tr>\n </table>\n <table class=\"grid\">\n <tr>\n <td colspan=\"2\">\n <b>Type</b>: \n <a href=\"medicationrequest.html\">MedicationRequest</a>\n </td>\n </tr>\n <tr style=\"background-color: #efefef\">\n <td>Filter</td>\n <td>Value</td>\n </tr>\n <tr>\n <td>medicationCodeableConcept</td>\n <td>In ValueSet \n <a href=\"http://example.org/fhir/ValueSet/opioids-abused-in-ambulatory-care\">http://example.org/fhir/ValueSet/opioids-abused-in-ambulatory-care</a>\n </td>\n </tr>\n </table>\n <table class=\"grid\">\n <tr>\n <td colspan=\"2\">\n <b>Type</b>: \n <a href=\"observation.html\">Observation</a>\n </td>\n </tr>\n <tr style=\"background-color: #efefef\">\n <td>Filter</td>\n <td>Value</td>\n </tr>\n <tr>\n <td>combo-code</td>\n <td>In ValueSet \n <a href=\"http://example.org/fhir/ValueSet/illicit-drug-urine-screening\">http://example.org/fhir/ValueSet/illicit-drug-urine-screening</a>\n </td>\n </tr>\n </table>\n <table class=\"grid\">\n <tr>\n <td colspan=\"2\">\n <b>Type</b>: \n <a href=\"observation.html\">Observation</a>\n </td>\n </tr>\n <tr style=\"background-color: #efefef\">\n <td>Filter</td>\n <td>Value</td>\n </tr>\n <tr>\n <td>combo-code</td>\n <td>In ValueSet \n <a href=\"http://example.org/fhir/ValueSet/opioid-urine-screening\">http://example.org/fhir/ValueSet/opioid-urine-screening</a>\n </td>\n </tr>\n </table>\n <h2>Contents</h2>\n <p>\n <code>application/elm+xml</code>\n </p>\n <pre>\n <code>&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&gt;\n&lt;library xmlns=\"urn:hl7-org:elm:r1\" xmlns:t=\"urn:hl7-org:elm-types:r1\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:fhir=\"http://hl7.org/fhir\" xmlns:qdm43=\"urn:healthit-gov:qdm:v4_3\" xmlns:qdm53=\"urn:healthit-gov:qdm:v5_3\" xmlns:a=\"urn:hl7-org:cql-annotations:r1\"&gt;\n &lt;annotation startLine=\"62\" startChar=\"12\" endLine=\"62\" endChar=\"60\" message=\"Could not resolve code path medicationCodeableConcept for the type of the retrieve FHIR.MedicationRequest.\" errorType=\"semantic\" errorSeverity=\"warning\" xsi:type=\"a:CqlToElmError\"/&gt;\n &lt;annotation startLine=\"62\" startChar=\"12\" endLine=\"62\" endChar=\"60\" message=\"Could not resolve membership operator for terminology target of the retrieve.\" errorType=\"semantic\" errorSeverity=\"warning\" xsi:type=\"a:CqlToElmError\"/&gt;\n &lt;annotation startLine=\"66\" startChar=\"3\" endLine=\"66\" endChar=\"66\" message=\"Could not resolve code path medicationCodeableConcept for the type of the retrieve FHIR.MedicationRequest.\" errorType=\"semantic\" errorSeverity=\"warning\" xsi:type=\"a:CqlToElmError\"/&gt;\n &lt;annotation startLine=\"66\" startChar=\"3\" endLine=\"66\" endChar=\"66\" message=\"Could not resolve membership operator for terminology target of the retrieve.\" errorType=\"semantic\" errorSeverity=\"warning\" xsi:type=\"a:CqlToElmError\"/&gt;\n &lt;annotation startLine=\"74\" startChar=\"3\" endLine=\"74\" endChar=\"64\" message=\"Could not resolve code path combo-code for the type of the retrieve FHIR.Observation.\" errorType=\"semantic\" errorSeverity=\"warning\" xsi:type=\"a:CqlToElmError\"/&gt;\n &lt;annotation startLine=\"74\" startChar=\"3\" endLine=\"74\" endChar=\"64\" message=\"Could not resolve membership operator for terminology target of the retrieve.\" errorType=\"semantic\" errorSeverity=\"warning\" xsi:type=\"a:CqlToElmError\"/&gt;\n &lt;annotation startLine=\"79\" startChar=\"3\" endLine=\"79\" endChar=\"63\" message=\"Could not resolve code path combo-code for the type of the retrieve FHIR.Observation.\" errorType=\"semantic\" errorSeverity=\"warning\" xsi:type=\"a:CqlToElmError\"/&gt;\n &lt;annotation startLine=\"79\" startChar=\"3\" endLine=\"79\" endChar=\"63\" message=\"Could not resolve membership operator for terminology target of the retrieve.\" errorType=\"semantic\" errorSeverity=\"warning\" xsi:type=\"a:CqlToElmError\"/&gt;\n &lt;annotation startLine=\"134\" startChar=\"20\" endLine=\"134\" endChar=\"76\" message=\"List-valued expression was demoted to a singleton.\" errorType=\"semantic\" errorSeverity=\"warning\" xsi:type=\"a:CqlToElmError\"/&gt;\n &lt;annotation startLine=\"143\" startChar=\"16\" endLine=\"143\" endChar=\"17\" message=\"List-valued expression was demoted to a singleton.\" errorType=\"semantic\" errorSeverity=\"warning\" xsi:type=\"a:CqlToElmError\"/&gt;\n &lt;annotation startLine=\"157\" startChar=\"52\" endLine=\"157\" endChar=\"73\" message=\"List-valued expression was demoted to a singleton.\" errorType=\"semantic\" errorSeverity=\"warning\" xsi:type=\"a:CqlToElmError\"/&gt;\n &lt;annotation startLine=\"171\" startChar=\"62\" endLine=\"171\" endChar=\"78\" message=\"List-valued expression was demoted to a singleton.\" errorType=\"semantic\" errorSeverity=\"warning\" xsi:type=\"a:CqlToElmError\"/&gt;\n &lt;identifier id=\"OpioidCDS_STU4_REC_10\" version=\"0.1.0\"/&gt;\n &lt;schemaIdentifier id=\"urn:hl7-org:elm\" version=\"r1\"/&gt;\n &lt;usings&gt;\n &lt;def localIdentifier=\"System\" uri=\"urn:hl7-org:elm-types:r1\"/&gt;\n &lt;def localIdentifier=\"FHIR\" uri=\"http://hl7.org/fhir\" version=\"3.2.0\"/&gt;\n &lt;/usings&gt;\n &lt;includes&gt;\n &lt;def localIdentifier=\"Common\" path=\"OpioidCDS_STU4_Common\" version=\"0.1.0\"/&gt;\n &lt;/includes&gt;\n &lt;parameters&gt;\n &lt;def name=\"ContextPrescriptions\" accessLevel=\"Public\"&gt;\n &lt;parameterTypeSpecifier xsi:type=\"ListTypeSpecifier\"&gt;\n &lt;elementType name=\"fhir:MedicationRequest\" xsi:type=\"NamedTypeSpecifier\"/&gt;\n &lt;/parameterTypeSpecifier&gt;\n &lt;/def&gt;\n &lt;/parameters&gt;\n &lt;statements&gt;\n &lt;def name=\"Patient\" context=\"Patient\"&gt;\n &lt;expression xsi:type=\"SingletonFrom\"&gt;\n &lt;operand dataType=\"fhir:Patient\" xsi:type=\"Retrieve\"/&gt;\n &lt;/expression&gt;\n &lt;/def&gt;\n &lt;def name=\"Lookback Year\" context=\"Patient\" accessLevel=\"Public\"&gt;\n &lt;expression lowClosed=\"true\" highClosed=\"true\" xsi:type=\"Interval\"&gt;\n &lt;low xsi:type=\"Subtract\"&gt;\n &lt;operand xsi:type=\"Subtract\"&gt;\n &lt;operand xsi:type=\"Today\"/&gt;\n &lt;operand value=\"12\" unit=\"months\" xsi:type=\"Quantity\"/&gt;\n &lt;/operand&gt;\n &lt;operand value=\"1\" unit=\"days\" xsi:type=\"Quantity\"/&gt;\n &lt;/low&gt;\n &lt;high xsi:type=\"Subtract\"&gt;\n &lt;operand xsi:type=\"Today\"/&gt;\n &lt;operand value=\"1\" unit=\"day\" xsi:type=\"Quantity\"/&gt;\n &lt;/high&gt;\n &lt;/expression&gt;\n &lt;/def&gt;\n &lt;def name=\"Validate Trigger Event\" context=\"Patient\" accessLevel=\"Public\"&gt;\n &lt;expression xsi:type=\"Exists\"&gt;\n &lt;operand xsi:type=\"Query\"&gt;\n &lt;source alias=\"triggerScript\"&gt;\n &lt;expression name=\"ContextPrescriptions\" xsi:type=\"ParameterRef\"/&gt;\n &lt;/source&gt;\n &lt;where name=\"IsOpioidWithAmbulatoryAbusePotential\" libraryName=\"Common\" xsi:type=\"FunctionRef\"&gt;\n &lt;operand name=\"ToCode\" libraryName=\"Common\" xsi:type=\"FunctionRef\"&gt;\n &lt;operand xsi:type=\"Indexer\"&gt;\n &lt;operand path=\"coding\" xsi:type=\"Property\"&gt;\n &lt;source path=\"medication\" scope=\"triggerScript\" xsi:type=\"Property\"/&gt;\n &lt;/operand&gt;\n &lt;operand valueType=\"t:Integer\" value=\"0\" xsi:type=\"Literal\"/&gt;\n &lt;/operand&gt;\n &lt;/operand&gt;\n &lt;/where&gt;\n &lt;/operand&gt;\n &lt;/expression&gt;\n &lt;/def&gt;\n &lt;def name=\"Exclusion Criteria\" context=\"Patient\" accessLevel=\"Public\"&gt;\n &lt;expression xsi:type=\"Or\"&gt;\n &lt;operand xsi:type=\"Exists\"&gt;\n &lt;operand dataType=\"fhir:MedicationRequest\" codeProperty=\"medicationCodeableConcept\" xsi:type=\"Retrieve\"&gt;\n &lt;codes name=\"End Of Life Opioids\" libraryName=\"Common\" xsi:type=\"ValueSetRef\"/&gt;\n &lt;/operand&gt;\n &lt;/operand&gt;\n &lt;operand name=\"HasMetastaticCancer\" libraryName=\"Common\" xsi:type=\"ExpressionRef\"/&gt;\n &lt;/expression&gt;\n &lt;/def&gt;\n &lt;def name=\"Get Active Ambulatory Opioid Rx\" context=\"Patient\" accessLevel=\"Public\"&gt;\n &lt;expression xsi:type=\"Query\"&gt;\n &lt;source alias=\"Rx\"&gt;\n &lt;expression dataType=\"fhir:MedicationRequest\" codeProperty=\"medicationCodeableConcept\" xsi:type=\"Retrieve\"&gt;\n &lt;codes name=\"Ambulatory Abuse Potential Opioids\" libraryName=\"Common\" xsi:type=\"ValueSetRef\"/&gt;\n &lt;/expression&gt;\n &lt;/source&gt;\n &lt;where xsi:type=\"And\"&gt;\n &lt;operand xsi:type=\"Equal\"&gt;\n &lt;operand path=\"value\" xsi:type=\"Property\"&gt;\n &lt;source path=\"status\" scope=\"Rx\" xsi:type=\"Property\"/&gt;\n &lt;/operand&gt;\n &lt;operand valueType=\"t:String\" value=\"active\" xsi:type=\"Literal\"/&gt;\n &lt;/operand&gt;\n &lt;operand xsi:type=\"Equal\"&gt;\n &lt;operand path=\"value\" xsi:type=\"Property\"&gt;\n &lt;source path=\"code\" xsi:type=\"Property\"&gt;\n &lt;source xsi:type=\"Indexer\"&gt;\n &lt;operand xsi:type=\"Flatten\"&gt;\n &lt;operand xsi:type=\"Query\"&gt;\n &lt;source alias=\"$this\"&gt;\n &lt;expression path=\"category\" scope=\"Rx\" xsi:type=\"Property\"/&gt;\n &lt;/source&gt;\n &lt;where xsi:type=\"Not\"&gt;\n &lt;operand xsi:type=\"IsNull\"&gt;\n &lt;operand path=\"coding\" xsi:type=\"Property\"&gt;\n &lt;source name=\"$this\" xsi:type=\"AliasRef\"/&gt;\n &lt;/operand&gt;\n &lt;/operand&gt;\n &lt;/where&gt;\n &lt;return&gt;\n &lt;expression path=\"coding\" xsi:type=\"Property\"&gt;\n &lt;source name=\"$this\" xsi:type=\"AliasRef\"/&gt;\n &lt;/expression&gt;\n &lt;/return&gt;\n &lt;/operand&gt;\n &lt;/operand&gt;\n &lt;operand valueType=\"t:Integer\" value=\"0\" xsi:type=\"Literal\"/&gt;\n &lt;/source&gt;\n &lt;/source&gt;\n &lt;/operand&gt;\n &lt;operand valueType=\"t:String\" value=\"outpatient\" xsi:type=\"Literal\"/&gt;\n &lt;/operand&gt;\n &lt;/where&gt;\n &lt;/expression&gt;\n &lt;/def&gt;\n &lt;def name=\"Get Illicit Drug Urine Screenings in Last 12 Months\" context=\"Patient\" accessLevel=\"Public\"&gt;\n &lt;expression xsi:type=\"Query\"&gt;\n &lt;source alias=\"observation\"&gt;\n &lt;expression dataType=\"fhir:Observation\" codeProperty=\"combo-code\" xsi:type=\"Retrieve\"&gt;\n &lt;codes name=\"Illicit Drug Screening\" libraryName=\"Common\" xsi:type=\"ValueSetRef\"/&gt;\n &lt;/expression&gt;\n &lt;/source&gt;\n &lt;where xsi:type=\"In\"&gt;\n &lt;operand path=\"value\" xsi:type=\"Property\"&gt;\n &lt;source path=\"effective\" scope=\"observation\" xsi:type=\"Property\"/&gt;\n &lt;/operand&gt;\n &lt;operand name=\"Lookback Year\" xsi:type=\"ExpressionRef\"/&gt;\n &lt;/where&gt;\n &lt;sort&gt;\n &lt;by direction=\"asc\" xsi:type=\"ByExpression\"&gt;\n &lt;expression path=\"value\" xsi:type=\"Property\"&gt;\n &lt;source name=\"effective\" xsi:type=\"IdentifierRef\"/&gt;\n &lt;/expression&gt;\n &lt;/by&gt;\n &lt;/sort&gt;\n &lt;/expression&gt;\n &lt;/def&gt;\n &lt;def name=\"Most Recent Illicit Drug Urine Screenings in Last 12 Months\" context=\"Patient\" accessLevel=\"Public\"&gt;\n &lt;expression xsi:type=\"Last\"&gt;\n &lt;source name=\"Get Illicit Drug Urine Screenings in Last 12 Months\" xsi:type=\"ExpressionRef\"/&gt;\n &lt;/expression&gt;\n &lt;/def&gt;\n &lt;def name=\"Get Opioid Drug Urine Screenings in Last 12 Months\" context=\"Patient\" accessLevel=\"Public\"&gt;\n &lt;expression xsi:type=\"Query\"&gt;\n &lt;source alias=\"observation\"&gt;\n &lt;expression dataType=\"fhir:Observation\" codeProperty=\"combo-code\" xsi:type=\"Retrieve\"&gt;\n &lt;codes name=\"Opioid Drug Screening\" libraryName=\"Common\" xsi:type=\"ValueSetRef\"/&gt;\n &lt;/expression&gt;\n &lt;/source&gt;\n &lt;where xsi:type=\"In\"&gt;\n &lt;operand path=\"value\" xsi:type=\"Property\"&gt;\n &lt;source path=\"effective\" scope=\"observation\" xsi:type=\"Property\"/&gt;\n &lt;/operand&gt;\n &lt;operand name=\"Lookback Year\" xsi:type=\"ExpressionRef\"/&gt;\n &lt;/where&gt;\n &lt;sort&gt;\n &lt;by direction=\"asc\" xsi:type=\"ByExpression\"&gt;\n &lt;expression path=\"value\" xsi:type=\"Property\"&gt;\n &lt;source name=\"effective\" xsi:type=\"IdentifierRef\"/&gt;\n &lt;/expression&gt;\n &lt;/by&gt;\n &lt;/sort&gt;\n &lt;/expression&gt;\n &lt;/def&gt;\n &lt;def name=\"Most Recent Opioid Drug Urine Screenings in Last 12 Months\" context=\"Patient\" accessLevel=\"Public\"&gt;\n &lt;expression xsi:type=\"Last\"&gt;\n &lt;source name=\"Get Opioid Drug Urine Screenings in Last 12 Months\" xsi:type=\"ExpressionRef\"/&gt;\n &lt;/expression&gt;\n &lt;/def&gt;\n &lt;def name=\"No Urine Screening In Last 12 Months\" context=\"Patient\" accessLevel=\"Public\"&gt;\n &lt;expression xsi:type=\"And\"&gt;\n &lt;operand xsi:type=\"IsNull\"&gt;\n &lt;operand name=\"Most Recent Illicit Drug Urine Screenings in Last 12 Months\" xsi:type=\"ExpressionRef\"/&gt;\n &lt;/operand&gt;\n &lt;operand xsi:type=\"IsNull\"&gt;\n &lt;operand name=\"Most Recent Opioid Drug Urine Screenings in Last 12 Months\" xsi:type=\"ExpressionRef\"/&gt;\n &lt;/operand&gt;\n &lt;/expression&gt;\n &lt;/def&gt;\n &lt;def name=\"Positive Opioid Drug Screening\" context=\"Patient\" accessLevel=\"Public\"&gt;\n &lt;expression xsi:type=\"Query\"&gt;\n &lt;source alias=\"mostRecentScreening\"&gt;\n &lt;expression name=\"Most Recent Opioid Drug Urine Screenings in Last 12 Months\" xsi:type=\"ExpressionRef\"/&gt;\n &lt;/source&gt;\n &lt;where xsi:type=\"Or\"&gt;\n &lt;operand xsi:type=\"Equal\"&gt;\n &lt;operand path=\"value\" xsi:type=\"Property\"&gt;\n &lt;source path=\"code\" xsi:type=\"Property\"&gt;\n &lt;source xsi:type=\"Indexer\"&gt;\n &lt;operand path=\"coding\" xsi:type=\"Property\"&gt;\n &lt;source path=\"interpretation\" scope=\"mostRecentScreening\" xsi:type=\"Property\"/&gt;\n &lt;/operand&gt;\n &lt;operand valueType=\"t:Integer\" value=\"0\" xsi:type=\"Literal\"/&gt;\n &lt;/source&gt;\n &lt;/source&gt;\n &lt;/operand&gt;\n &lt;operand valueType=\"t:String\" value=\"POS\" xsi:type=\"Literal\"/&gt;\n &lt;/operand&gt;\n &lt;operand xsi:type=\"If\"&gt;\n &lt;condition asType=\"t:Boolean\" xsi:type=\"As\"&gt;\n &lt;operand xsi:type=\"Not\"&gt;\n &lt;operand xsi:type=\"IsNull\"&gt;\n &lt;operand xsi:type=\"Indexer\"&gt;\n &lt;operand path=\"component\" scope=\"mostRecentScreening\" xsi:type=\"Property\"/&gt;\n &lt;operand valueType=\"t:Integer\" value=\"0\" xsi:type=\"Literal\"/&gt;\n &lt;/operand&gt;\n &lt;/operand&gt;\n &lt;/operand&gt;\n &lt;/condition&gt;\n &lt;then xsi:type=\"Equal\"&gt;\n &lt;operand path=\"value\" xsi:type=\"Property\"&gt;\n &lt;source path=\"code\" xsi:type=\"Property\"&gt;\n &lt;source xsi:type=\"Indexer\"&gt;\n &lt;operand path=\"coding\" xsi:type=\"Property\"&gt;\n &lt;source path=\"interpretation\" xsi:type=\"Property\"&gt;\n &lt;source xsi:type=\"Indexer\"&gt;\n &lt;operand path=\"component\" scope=\"mostRecentScreening\" xsi:type=\"Property\"/&gt;\n &lt;operand valueType=\"t:Integer\" value=\"0\" xsi:type=\"Literal\"/&gt;\n &lt;/source&gt;\n &lt;/source&gt;\n &lt;/operand&gt;\n &lt;operand valueType=\"t:Integer\" value=\"0\" xsi:type=\"Literal\"/&gt;\n &lt;/source&gt;\n &lt;/source&gt;\n &lt;/operand&gt;\n &lt;operand valueType=\"t:String\" value=\"POS\" xsi:type=\"Literal\"/&gt;\n &lt;/then&gt;\n &lt;else valueType=\"t:Boolean\" value=\"false\" xsi:type=\"Literal\"/&gt;\n &lt;/operand&gt;\n &lt;/where&gt;\n &lt;/expression&gt;\n &lt;/def&gt;\n &lt;def name=\"Orders Before Most Recent Opioid Screening\" context=\"Patient\" accessLevel=\"Public\"&gt;\n &lt;expression xsi:type=\"Query\"&gt;\n &lt;source alias=\"orders\"&gt;\n &lt;expression name=\"Get Active Ambulatory Opioid Rx\" xsi:type=\"ExpressionRef\"/&gt;\n &lt;/source&gt;\n &lt;relationship alias=\"mostRecentScreening\" xsi:type=\"With\"&gt;\n &lt;expression name=\"Positive Opioid Drug Screening\" xsi:type=\"ExpressionRef\"/&gt;\n &lt;suchThat xsi:type=\"Less\"&gt;\n &lt;operand path=\"value\" xsi:type=\"Property\"&gt;\n &lt;source path=\"authoredOn\" scope=\"orders\" xsi:type=\"Property\"/&gt;\n &lt;/operand&gt;\n &lt;operand path=\"value\" xsi:type=\"Property\"&gt;\n &lt;source path=\"effective\" scope=\"mostRecentScreening\" xsi:type=\"Property\"/&gt;\n &lt;/operand&gt;\n &lt;/suchThat&gt;\n &lt;/relationship&gt;\n &lt;return&gt;\n &lt;expression name=\"orders\" xsi:type=\"AliasRef\"/&gt;\n &lt;/return&gt;\n &lt;/expression&gt;\n &lt;/def&gt;\n &lt;def name=\"Prescribed Opioids\" context=\"Patient\" accessLevel=\"Public\"&gt;\n &lt;expression xsi:type=\"Query\"&gt;\n &lt;source alias=\"orders\"&gt;\n &lt;expression name=\"Orders Before Most Recent Opioid Screening\" xsi:type=\"ExpressionRef\"/&gt;\n &lt;/source&gt;\n &lt;return&gt;\n &lt;expression xsi:type=\"Lower\"&gt;\n &lt;operand xsi:type=\"SingletonFrom\"&gt;\n &lt;operand name=\"GetIngredient\" libraryName=\"Common\" xsi:type=\"FunctionRef\"&gt;\n &lt;operand name=\"ToCode\" libraryName=\"Common\" xsi:type=\"FunctionRef\"&gt;\n &lt;operand xsi:type=\"Indexer\"&gt;\n &lt;operand path=\"coding\" xsi:type=\"Property\"&gt;\n &lt;source path=\"medication\" scope=\"orders\" xsi:type=\"Property\"/&gt;\n &lt;/operand&gt;\n &lt;operand valueType=\"t:Integer\" value=\"0\" xsi:type=\"Literal\"/&gt;\n &lt;/operand&gt;\n &lt;/operand&gt;\n &lt;/operand&gt;\n &lt;/operand&gt;\n &lt;/expression&gt;\n &lt;/return&gt;\n &lt;/expression&gt;\n &lt;/def&gt;\n &lt;def name=\"GetOpioid\" context=\"Patient\" accessLevel=\"Public\" xsi:type=\"FunctionDef\"&gt;\n &lt;expression xsi:type=\"Case\"&gt;\n &lt;comparand name=\"value\" xsi:type=\"OperandRef\"/&gt;\n &lt;caseItem&gt;\n &lt;when valueType=\"t:String\" value=\"3299-5\" xsi:type=\"Literal\"/&gt;\n &lt;then valueType=\"t:String\" value=\"Acetaminophen\" xsi:type=\"Literal\"/&gt;\n &lt;/caseItem&gt;\n &lt;caseItem&gt;\n &lt;when valueType=\"t:String\" value=\"14184-6\" xsi:type=\"Literal\"/&gt;\n &lt;then valueType=\"t:String\" value=\"Atropine\" xsi:type=\"Literal\"/&gt;\n &lt;/caseItem&gt;\n &lt;caseItem&gt;\n &lt;when valueType=\"t:String\" value=\"16485-5\" xsi:type=\"Literal\"/&gt;\n &lt;then valueType=\"t:String\" value=\"Bromodiphenhydramine\" xsi:type=\"Literal\"/&gt;\n &lt;/caseItem&gt;\n &lt;caseItem&gt;\n &lt;when valueType=\"t:String\" value=\"3408-2\" xsi:type=\"Literal\"/&gt;\n &lt;then valueType=\"t:String\" value=\"Brompheniramine\" xsi:type=\"Literal\"/&gt;\n &lt;/caseItem&gt;\n &lt;caseItem&gt;\n &lt;when valueType=\"t:String\" value=\"3414-0\" xsi:type=\"Literal\"/&gt;\n &lt;then valueType=\"t:String\" value=\"Buprenorphine\" xsi:type=\"Literal\"/&gt;\n &lt;/caseItem&gt;\n &lt;caseItem&gt;\n &lt;when valueType=\"t:String\" value=\"3421-5\" xsi:type=\"Literal\"/&gt;\n &lt;then valueType=\"t:String\" value=\"Butalbital\" xsi:type=\"Literal\"/&gt;\n &lt;/caseItem&gt;\n &lt;caseItem&gt;\n &lt;when valueType=\"t:String\" value=\"12333-1\" xsi:type=\"Literal\"/&gt;\n &lt;then valueType=\"t:String\" value=\"Butorphanol\" xsi:type=\"Literal\"/&gt;\n &lt;/caseItem&gt;\n &lt;caseItem&gt;\n &lt;when valueType=\"t:String\" value=\"3423-1\" xsi:type=\"Literal\"/&gt;\n &lt;then valueType=\"t:String\" value=\"Caffeine\" xsi:type=\"Literal\"/&gt;\n &lt;/caseItem&gt;\n &lt;caseItem&gt;\n &lt;when valueType=\"t:String\" value=\"21142-5\" xsi:type=\"Literal\"/&gt;\n &lt;then valueType=\"t:String\" value=\"Carisoprodol\" xsi:type=\"Literal\"/&gt;\n &lt;/caseItem&gt;\n &lt;caseItem&gt;\n &lt;when valueType=\"t:String\" value=\"16605-8\" xsi:type=\"Literal\"/&gt;\n &lt;then valueType=\"t:String\" value=\"Chlorcyclizine\" xsi:type=\"Literal\"/&gt;\n &lt;/caseItem&gt;\n &lt;caseItem&gt;\n &lt;when valueType=\"t:String\" value=\"3467-8\" xsi:type=\"Literal\"/&gt;\n &lt;then valueType=\"t:String\" value=\"Chlorpheniramine\" xsi:type=\"Literal\"/&gt;\n &lt;/caseItem&gt;\n &lt;caseItem&gt;\n &lt;when valueType=\"t:String\" value=\"3507-1\" xsi:type=\"Literal\"/&gt;\n &lt;then valueType=\"t:String\" value=\"Codeine\" xsi:type=\"Literal\"/&gt;\n &lt;/caseItem&gt;\n &lt;caseItem&gt;\n &lt;when valueType=\"t:String\" value=\"14066-5\" xsi:type=\"Literal\"/&gt;\n &lt;then valueType=\"t:String\" value=\"Dihydrocodeine\" xsi:type=\"Literal\"/&gt;\n &lt;/caseItem&gt;\n &lt;caseItem&gt;\n &lt;when valueType=\"t:String\" value=\"3571-7\" xsi:type=\"Literal\"/&gt;\n &lt;then valueType=\"t:String\" value=\"Diphenhydramine\" xsi:type=\"Literal\"/&gt;\n &lt;/caseItem&gt;\n &lt;caseItem&gt;\n &lt;when valueType=\"t:String\" value=\"11235-9\" xsi:type=\"Literal\"/&gt;\n &lt;then valueType=\"t:String\" value=\"Fentanyl\" xsi:type=\"Literal\"/&gt;\n &lt;/caseItem&gt;\n &lt;caseItem&gt;\n &lt;when valueType=\"t:String\" value=\"12308-3\" xsi:type=\"Literal\"/&gt;\n &lt;then valueType=\"t:String\" value=\"Hydrocodone\" xsi:type=\"Literal\"/&gt;\n &lt;/caseItem&gt;\n &lt;caseItem&gt;\n &lt;when valueType=\"t:String\" value=\"9834-3\" xsi:type=\"Literal\"/&gt;\n &lt;then valueType=\"t:String\" value=\"Hydromorphone\" xsi:type=\"Literal\"/&gt;\n &lt;/caseItem&gt;\n &lt;caseItem&gt;\n &lt;when valueType=\"t:String\" value=\"14071\" xsi:type=\"Literal\"/&gt;\n &lt;then valueType=\"t:String\" value=\"Ibuprofen\" xsi:type=\"Literal\"/&gt;\n &lt;/caseItem&gt;\n &lt;caseItem&gt;\n &lt;when valueType=\"t:String\" value=\"3711-9\" xsi:type=\"Literal\"/&gt;\n &lt;then valueType=\"t:String\" value=\"Levorphanol\" xsi:type=\"Literal\"/&gt;\n &lt;/caseItem&gt;\n &lt;caseItem&gt;\n &lt;when valueType=\"t:String\" value=\"3746-5\" xsi:type=\"Literal\"/&gt;\n &lt;then valueType=\"t:String\" value=\"Meperidine\" xsi:type=\"Literal\"/&gt;\n &lt;/caseItem&gt;\n &lt;caseItem&gt;\n &lt;when valueType=\"t:String\" value=\"3773-9\" xsi:type=\"Literal\"/&gt;\n &lt;then valueType=\"t:String\" value=\"Methadone\" xsi:type=\"Literal\"/&gt;\n &lt;/caseItem&gt;\n &lt;caseItem&gt;\n &lt;when valueType=\"t:String\" value=\"3830-7\" xsi:type=\"Literal\"/&gt;\n &lt;then valueType=\"t:String\" value=\"Morphine\" xsi:type=\"Literal\"/&gt;\n &lt;/caseItem&gt;\n &lt;caseItem&gt;\n &lt;when valueType=\"t:String\" value=\"42618-9\" xsi:type=\"Literal\"/&gt;\n &lt;then valueType=\"t:String\" value=\"Naloxone\" xsi:type=\"Literal\"/&gt;\n &lt;/caseItem&gt;\n &lt;caseItem&gt;\n &lt;when valueType=\"t:String\" value=\"12309-1\" xsi:type=\"Literal\"/&gt;\n &lt;then valueType=\"t:String\" value=\"Naltrexone\" xsi:type=\"Literal\"/&gt;\n &lt;/caseItem&gt;\n &lt;caseItem&gt;\n &lt;when valueType=\"t:String\" value=\"10998-3\" xsi:type=\"Literal\"/&gt;\n &lt;then valueType=\"t:String\" value=\"Oxycodone\" xsi:type=\"Literal\"/&gt;\n &lt;/caseItem&gt;\n &lt;caseItem&gt;\n &lt;when valueType=\"t:String\" value=\"11247-4\" xsi:type=\"Literal\"/&gt;\n &lt;then valueType=\"t:String\" value=\"Oxymorphone\" xsi:type=\"Literal\"/&gt;\n &lt;/caseItem&gt;\n &lt;caseItem&gt;\n &lt;when valueType=\"t:String\" value=\"3917-2\" xsi:type=\"Literal\"/&gt;\n &lt;then valueType=\"t:String\" value=\"Pentazocine\" xsi:type=\"Literal\"/&gt;\n &lt;/caseItem&gt;\n &lt;caseItem&gt;\n &lt;when valueType=\"t:String\" value=\"3962-8\" xsi:type=\"Literal\"/&gt;\n &lt;then valueType=\"t:String\" value=\"Phenylephrine\" xsi:type=\"Literal\"/&gt;\n &lt;/caseItem&gt;\n &lt;caseItem&gt;\n &lt;when valueType=\"t:String\" value=\"3965-1\" xsi:type=\"Literal\"/&gt;\n &lt;then valueType=\"t:String\" value=\"Phenylpropanolamine\" xsi:type=\"Literal\"/&gt;\n &lt;/caseItem&gt;\n &lt;caseItem&gt;\n &lt;when valueType=\"t:String\" value=\"11000-7\" xsi:type=\"Literal\"/&gt;\n &lt;then valueType=\"t:String\" value=\"Promethazine\" xsi:type=\"Literal\"/&gt;\n &lt;/caseItem&gt;\n &lt;caseItem&gt;\n &lt;when valueType=\"t:String\" value=\"4003-0\" xsi:type=\"Literal\"/&gt;\n &lt;then valueType=\"t:String\" value=\"Pseudoephedrine\" xsi:type=\"Literal\"/&gt;\n &lt;/caseItem&gt;\n &lt;caseItem&gt;\n &lt;when valueType=\"t:String\" value=\"4009-7\" xsi:type=\"Literal\"/&gt;\n &lt;then valueType=\"t:String\" value=\"Pyrilamine\" xsi:type=\"Literal\"/&gt;\n &lt;/caseItem&gt;\n &lt;caseItem&gt;\n &lt;when valueType=\"t:String\" value=\"65807-0\" xsi:type=\"Literal\"/&gt;\n &lt;then valueType=\"t:String\" value=\"Tapentadol\" xsi:type=\"Literal\"/&gt;\n &lt;/caseItem&gt;\n &lt;caseItem&gt;\n &lt;when valueType=\"t:String\" value=\"43219-5\" xsi:type=\"Literal\"/&gt;\n &lt;then valueType=\"t:String\" value=\"Tramadol\" xsi:type=\"Literal\"/&gt;\n &lt;/caseItem&gt;\n &lt;else xsi:type=\"Concatenate\"&gt;\n &lt;operand valueType=\"t:String\" value=\"Unknown code: \" xsi:type=\"Literal\"/&gt;\n &lt;operand name=\"value\" xsi:type=\"OperandRef\"/&gt;\n &lt;/else&gt;\n &lt;/expression&gt;\n &lt;operand name=\"value\"&gt;\n &lt;operandTypeSpecifier name=\"t:String\" xsi:type=\"NamedTypeSpecifier\"/&gt;\n &lt;/operand&gt;\n &lt;/def&gt;\n &lt;def name=\"Missing Opioids\" context=\"Patient\" accessLevel=\"Public\"&gt;\n &lt;expression xsi:type=\"If\"&gt;\n &lt;condition asType=\"t:Boolean\" xsi:type=\"As\"&gt;\n &lt;operand xsi:type=\"Not\"&gt;\n &lt;operand xsi:type=\"IsNull\"&gt;\n &lt;operand name=\"Positive Opioid Drug Screening\" xsi:type=\"ExpressionRef\"/&gt;\n &lt;/operand&gt;\n &lt;/operand&gt;\n &lt;/condition&gt;\n &lt;then xsi:type=\"Except\"&gt;\n &lt;operand xsi:type=\"Query\"&gt;\n &lt;source alias=\"Prescriptions\"&gt;\n &lt;expression name=\"Prescribed Opioids\" xsi:type=\"ExpressionRef\"/&gt;\n &lt;/source&gt;\n &lt;/operand&gt;\n &lt;operand xsi:type=\"ToList\"&gt;\n &lt;operand xsi:type=\"Lower\"&gt;\n &lt;operand name=\"GetOpioid\" xsi:type=\"FunctionRef\"&gt;\n &lt;operand path=\"value\" xsi:type=\"Property\"&gt;\n &lt;source path=\"code\" xsi:type=\"Property\"&gt;\n &lt;source xsi:type=\"Indexer\"&gt;\n &lt;operand path=\"coding\" xsi:type=\"Property\"&gt;\n &lt;source path=\"code\" xsi:type=\"Property\"&gt;\n &lt;source name=\"Positive Opioid Drug Screening\" xsi:type=\"ExpressionRef\"/&gt;\n &lt;/source&gt;\n &lt;/operand&gt;\n &lt;operand valueType=\"t:Integer\" value=\"0\" xsi:type=\"Literal\"/&gt;\n &lt;/source&gt;\n &lt;/source&gt;\n &lt;/operand&gt;\n &lt;/operand&gt;\n &lt;/operand&gt;\n &lt;/operand&gt;\n &lt;/then&gt;\n &lt;else xsi:type=\"As\"&gt;\n &lt;operand xsi:type=\"Null\"/&gt;\n &lt;asTypeSpecifier xsi:type=\"ListTypeSpecifier\"&gt;\n &lt;elementType name=\"t:String\" xsi:type=\"NamedTypeSpecifier\"/&gt;\n &lt;/asTypeSpecifier&gt;\n &lt;/else&gt;\n &lt;/expression&gt;\n &lt;/def&gt;\n &lt;def name=\"Has Missing Opioids?\" context=\"Patient\" accessLevel=\"Public\"&gt;\n &lt;expression xsi:type=\"Exists\"&gt;\n &lt;operand name=\"Missing Opioids\" xsi:type=\"ExpressionRef\"/&gt;\n &lt;/expression&gt;\n &lt;/def&gt;\n &lt;def name=\"Get Opioids From Most Recent Screening\" context=\"Patient\" accessLevel=\"Public\"&gt;\n &lt;expression xsi:type=\"Query\"&gt;\n &lt;source alias=\"mostRecentScreening\"&gt;\n &lt;expression name=\"Positive Opioid Drug Screening\" xsi:type=\"ExpressionRef\"/&gt;\n &lt;/source&gt;\n &lt;return&gt;\n &lt;expression xsi:type=\"Union\"&gt;\n &lt;operand xsi:type=\"ToList\"&gt;\n &lt;operand xsi:type=\"Lower\"&gt;\n &lt;operand name=\"GetOpioid\" xsi:type=\"FunctionRef\"&gt;\n &lt;operand path=\"value\" xsi:type=\"Property\"&gt;\n &lt;source path=\"code\" xsi:type=\"Property\"&gt;\n &lt;source xsi:type=\"Indexer\"&gt;\n &lt;operand path=\"coding\" xsi:type=\"Property\"&gt;\n &lt;source path=\"code\" scope=\"mostRecentScreening\" xsi:type=\"Property\"/&gt;\n &lt;/operand&gt;\n &lt;operand valueType=\"t:Integer\" value=\"0\" xsi:type=\"Literal\"/&gt;\n &lt;/source&gt;\n &lt;/source&gt;\n &lt;/operand&gt;\n &lt;/operand&gt;\n &lt;/operand&gt;\n &lt;/operand&gt;\n &lt;operand xsi:type=\"ToList\"&gt;\n &lt;operand xsi:type=\"If\"&gt;\n &lt;condition asType=\"t:Boolean\" xsi:type=\"As\"&gt;\n &lt;operand xsi:type=\"Not\"&gt;\n &lt;operand xsi:type=\"IsNull\"&gt;\n &lt;operand xsi:type=\"Indexer\"&gt;\n &lt;operand path=\"component\" scope=\"mostRecentScreening\" xsi:type=\"Property\"/&gt;\n &lt;operand valueType=\"t:Integer\" value=\"0\" xsi:type=\"Literal\"/&gt;\n &lt;/operand&gt;\n &lt;/operand&gt;\n &lt;/operand&gt;\n &lt;/condition&gt;\n &lt;then xsi:type=\"Lower\"&gt;\n &lt;operand name=\"GetOpioid\" xsi:type=\"FunctionRef\"&gt;\n &lt;operand path=\"value\" xsi:type=\"Property\"&gt;\n &lt;source path=\"code\" xsi:type=\"Property\"&gt;\n &lt;source xsi:type=\"Indexer\"&gt;\n &lt;operand path=\"coding\" xsi:type=\"Property\"&gt;\n &lt;source path=\"code\" xsi:type=\"Property\"&gt;\n &lt;source xsi:type=\"Indexer\"&gt;\n &lt;operand path=\"component\" scope=\"mostRecentScreening\" xsi:type=\"Property\"/&gt;\n &lt;operand valueType=\"t:Integer\" value=\"0\" xsi:type=\"Literal\"/&gt;\n &lt;/source&gt;\n &lt;/source&gt;\n &lt;/operand&gt;\n &lt;operand valueType=\"t:Integer\" value=\"0\" xsi:type=\"Literal\"/&gt;\n &lt;/source&gt;\n &lt;/source&gt;\n &lt;/operand&gt;\n &lt;/operand&gt;\n &lt;/then&gt;\n &lt;else asType=\"t:String\" xsi:type=\"As\"&gt;\n &lt;operand xsi:type=\"SingletonFrom\"&gt;\n &lt;operand xsi:type=\"List\"/&gt;\n &lt;/operand&gt;\n &lt;/else&gt;\n &lt;/operand&gt;\n &lt;/operand&gt;\n &lt;/expression&gt;\n &lt;/return&gt;\n &lt;/expression&gt;\n &lt;/def&gt;\n &lt;def name=\"Unprescribed Opioids\" context=\"Patient\" accessLevel=\"Public\"&gt;\n &lt;expression xsi:type=\"Query\"&gt;\n &lt;source alias=\"mostRecentScreeningOpioids\"&gt;\n &lt;expression name=\"Get Opioids From Most Recent Screening\" xsi:type=\"ExpressionRef\"/&gt;\n &lt;/source&gt;\n &lt;relationship alias=\"ingredients\" xsi:type=\"With\"&gt;\n &lt;expression name=\"Prescribed Opioids\" xsi:type=\"ExpressionRef\"/&gt;\n &lt;suchThat xsi:type=\"Not\"&gt;\n &lt;operand xsi:type=\"In\"&gt;\n &lt;operand name=\"mostRecentScreeningOpioids\" xsi:type=\"AliasRef\"/&gt;\n &lt;operand xsi:type=\"ToList\"&gt;\n &lt;operand name=\"ingredients\" xsi:type=\"AliasRef\"/&gt;\n &lt;/operand&gt;\n &lt;/operand&gt;\n &lt;/suchThat&gt;\n &lt;/relationship&gt;\n &lt;return&gt;\n &lt;expression name=\"mostRecentScreeningOpioids\" xsi:type=\"AliasRef\"/&gt;\n &lt;/return&gt;\n &lt;/expression&gt;\n &lt;/def&gt;\n &lt;def name=\"Has Unprescribed Opioids?\" context=\"Patient\" accessLevel=\"Public\"&gt;\n &lt;expression xsi:type=\"Exists\"&gt;\n &lt;operand name=\"Unprescribed Opioids\" xsi:type=\"ExpressionRef\"/&gt;\n &lt;/expression&gt;\n &lt;/def&gt;\n &lt;def name=\"Positive Illicit Drug Screening\" context=\"Patient\" accessLevel=\"Public\"&gt;\n &lt;expression xsi:type=\"Query\"&gt;\n &lt;source alias=\"mostRecentScreening\"&gt;\n &lt;expression name=\"Most Recent Illicit Drug Urine Screenings in Last 12 Months\" xsi:type=\"ExpressionRef\"/&gt;\n &lt;/source&gt;\n &lt;where xsi:type=\"Or\"&gt;\n &lt;operand xsi:type=\"Equal\"&gt;\n &lt;operand path=\"value\" xsi:type=\"Property\"&gt;\n &lt;source path=\"code\" xsi:type=\"Property\"&gt;\n &lt;source xsi:type=\"Indexer\"&gt;\n &lt;operand path=\"coding\" xsi:type=\"Property\"&gt;\n &lt;source path=\"interpretation\" scope=\"mostRecentScreening\" xsi:type=\"Property\"/&gt;\n &lt;/operand&gt;\n &lt;operand valueType=\"t:Integer\" value=\"0\" xsi:type=\"Literal\"/&gt;\n &lt;/source&gt;\n &lt;/source&gt;\n &lt;/operand&gt;\n &lt;operand valueType=\"t:String\" value=\"POS\" xsi:type=\"Literal\"/&gt;\n &lt;/operand&gt;\n &lt;operand xsi:type=\"If\"&gt;\n &lt;condition asType=\"t:Boolean\" xsi:type=\"As\"&gt;\n &lt;operand xsi:type=\"Not\"&gt;\n &lt;operand xsi:type=\"IsNull\"&gt;\n &lt;operand xsi:type=\"Indexer\"&gt;\n &lt;operand path=\"component\" scope=\"mostRecentScreening\" xsi:type=\"Property\"/&gt;\n &lt;operand valueType=\"t:Integer\" value=\"0\" xsi:type=\"Literal\"/&gt;\n &lt;/operand&gt;\n &lt;/operand&gt;\n &lt;/operand&gt;\n &lt;/condition&gt;\n &lt;then xsi:type=\"Equal\"&gt;\n &lt;operand path=\"value\" xsi:type=\"Property\"&gt;\n &lt;source path=\"code\" xsi:type=\"Property\"&gt;\n &lt;source xsi:type=\"Indexer\"&gt;\n &lt;operand path=\"coding\" xsi:type=\"Property\"&gt;\n &lt;source path=\"interpretation\" xsi:type=\"Property\"&gt;\n &lt;source xsi:type=\"Indexer\"&gt;\n &lt;operand path=\"component\" scope=\"mostRecentScreening\" xsi:type=\"Property\"/&gt;\n &lt;operand valueType=\"t:Integer\" value=\"0\" xsi:type=\"Literal\"/&gt;\n &lt;/source&gt;\n &lt;/source&gt;\n &lt;/operand&gt;\n &lt;operand valueType=\"t:Integer\" value=\"0\" xsi:type=\"Literal\"/&gt;\n &lt;/source&gt;\n &lt;/source&gt;\n &lt;/operand&gt;\n &lt;operand valueType=\"t:String\" value=\"POS\" xsi:type=\"Literal\"/&gt;\n &lt;/then&gt;\n &lt;else valueType=\"t:Boolean\" value=\"false\" xsi:type=\"Literal\"/&gt;\n &lt;/operand&gt;\n &lt;/where&gt;\n &lt;/expression&gt;\n &lt;/def&gt;\n &lt;def name=\"Has Illicit Drugs in Screening?\" context=\"Patient\" accessLevel=\"Public\"&gt;\n &lt;expression xsi:type=\"Exists\"&gt;\n &lt;operand xsi:type=\"ToList\"&gt;\n &lt;operand name=\"Positive Illicit Drug Screening\" xsi:type=\"ExpressionRef\"/&gt;\n &lt;/operand&gt;\n &lt;/expression&gt;\n &lt;/def&gt;\n &lt;def name=\"Inclusion Criteria\" context=\"Patient\" accessLevel=\"Public\"&gt;\n &lt;expression xsi:type=\"And\"&gt;\n &lt;operand xsi:type=\"And\"&gt;\n &lt;operand xsi:type=\"And\"&gt;\n &lt;operand name=\"Validate Trigger Event\" xsi:type=\"ExpressionRef\"/&gt;\n &lt;operand xsi:type=\"Not\"&gt;\n &lt;operand name=\"Exclusion Criteria\" xsi:type=\"ExpressionRef\"/&gt;\n &lt;/operand&gt;\n &lt;/operand&gt;\n &lt;operand xsi:type=\"AnyTrue\"&gt;\n &lt;source name=\"ProbableDaysInRange\" libraryName=\"Common\" xsi:type=\"FunctionRef\"&gt;\n &lt;operand name=\"Get Active Ambulatory Opioid Rx\" xsi:type=\"ExpressionRef\"/&gt;\n &lt;operand valueType=\"t:Integer\" value=\"90\" xsi:type=\"Literal\"/&gt;\n &lt;operand valueType=\"t:Integer\" value=\"80\" xsi:type=\"Literal\"/&gt;\n &lt;/source&gt;\n &lt;/operand&gt;\n &lt;/operand&gt;\n &lt;operand xsi:type=\"Or\"&gt;\n &lt;operand xsi:type=\"Or\"&gt;\n &lt;operand xsi:type=\"Or\"&gt;\n &lt;operand name=\"No Urine Screening In Last 12 Months\" xsi:type=\"ExpressionRef\"/&gt;\n &lt;operand name=\"Has Missing Opioids?\" xsi:type=\"ExpressionRef\"/&gt;\n &lt;/operand&gt;\n &lt;operand name=\"Has Unprescribed Opioids?\" xsi:type=\"ExpressionRef\"/&gt;\n &lt;/operand&gt;\n &lt;operand name=\"Has Illicit Drugs in Screening?\" xsi:type=\"ExpressionRef\"/&gt;\n &lt;/operand&gt;\n &lt;/expression&gt;\n &lt;/def&gt;\n &lt;def name=\"GetIllicitDrug\" context=\"Patient\" accessLevel=\"Public\" xsi:type=\"FunctionDef\"&gt;\n &lt;expression xsi:type=\"Case\"&gt;\n &lt;comparand name=\"value\" xsi:type=\"OperandRef\"/&gt;\n &lt;caseItem&gt;\n &lt;when valueType=\"t:String\" value=\"3397-7\" xsi:type=\"Literal\"/&gt;\n &lt;then valueType=\"t:String\" value=\"Cocaine\" xsi:type=\"Literal\"/&gt;\n &lt;/caseItem&gt;\n &lt;caseItem&gt;\n &lt;when valueType=\"t:String\" value=\"14267-9\" xsi:type=\"Literal\"/&gt;\n &lt;then valueType=\"t:String\" value=\"Methylenedioxymethamphetamine (MDMA)\" xsi:type=\"Literal\"/&gt;\n &lt;/caseItem&gt;\n &lt;caseItem&gt;\n &lt;when valueType=\"t:String\" value=\"29868-7\" xsi:type=\"Literal\"/&gt;\n &lt;then valueType=\"t:String\" value=\"Gamma Hydroxybutyric Acid (GHB)\" xsi:type=\"Literal\"/&gt;\n &lt;/caseItem&gt;\n &lt;caseItem&gt;\n &lt;when valueType=\"t:String\" value=\"12327-3\" xsi:type=\"Literal\"/&gt;\n &lt;then valueType=\"t:String\" value=\"Ketamine\" xsi:type=\"Literal\"/&gt;\n &lt;/caseItem&gt;\n &lt;caseItem&gt;\n &lt;when valueType=\"t:String\" value=\"3732-5\" xsi:type=\"Literal\"/&gt;\n &lt;then valueType=\"t:String\" value=\"Lysergic Acid Diethylamide (LSD)\" xsi:type=\"Literal\"/&gt;\n &lt;/caseItem&gt;\n &lt;caseItem&gt;\n &lt;when valueType=\"t:String\" value=\"3779-6\" xsi:type=\"Literal\"/&gt;\n &lt;then valueType=\"t:String\" value=\"Methamphetamine\" xsi:type=\"Literal\"/&gt;\n &lt;/caseItem&gt;\n &lt;caseItem&gt;\n &lt;when valueType=\"t:String\" value=\"17504-2\" xsi:type=\"Literal\"/&gt;\n &lt;then valueType=\"t:String\" value=\"Psilocybin\" xsi:type=\"Literal\"/&gt;\n &lt;/caseItem&gt;\n &lt;caseItem&gt;\n &lt;when valueType=\"t:String\" value=\"41020-9\" xsi:type=\"Literal\"/&gt;\n &lt;then valueType=\"t:String\" value=\"Flunitrazepam (Rohypnol)\" xsi:type=\"Literal\"/&gt;\n &lt;/caseItem&gt;\n &lt;caseItem&gt;\n &lt;when valueType=\"t:String\" value=\"3426-4\" xsi:type=\"Literal\"/&gt;\n &lt;then valueType=\"t:String\" value=\"Tetrahydrocannabinol (THC)\" xsi:type=\"Literal\"/&gt;\n &lt;/caseItem&gt;\n &lt;else xsi:type=\"Concatenate\"&gt;\n &lt;operand valueType=\"t:String\" value=\"Unknown code: \" xsi:type=\"Literal\"/&gt;\n &lt;operand name=\"value\" xsi:type=\"OperandRef\"/&gt;\n &lt;/else&gt;\n &lt;/expression&gt;\n &lt;operand name=\"value\"&gt;\n &lt;operandTypeSpecifier name=\"t:String\" xsi:type=\"NamedTypeSpecifier\"/&gt;\n &lt;/operand&gt;\n &lt;/def&gt;\n &lt;def name=\"Inconsistent Illicit Drugs\" context=\"Patient\" accessLevel=\"Public\"&gt;\n &lt;expression xsi:type=\"Concatenate\"&gt;\n &lt;operand valueType=\"t:String\" value=\"Found the following illicit drug(s) in urine drug screen: \" xsi:type=\"Literal\"/&gt;\n &lt;operand xsi:type=\"If\"&gt;\n &lt;condition asType=\"t:Boolean\" xsi:type=\"As\"&gt;\n &lt;operand xsi:type=\"IsNull\"&gt;\n &lt;operand name=\"GetIllicitDrug\" xsi:type=\"FunctionRef\"&gt;\n &lt;operand path=\"value\" xsi:type=\"Property\"&gt;\n &lt;source path=\"code\" xsi:type=\"Property\"&gt;\n &lt;source xsi:type=\"Indexer\"&gt;\n &lt;operand path=\"coding\" xsi:type=\"Property\"&gt;\n &lt;source path=\"code\" xsi:type=\"Property\"&gt;\n &lt;source name=\"Positive Illicit Drug Screening\" xsi:type=\"ExpressionRef\"/&gt;\n &lt;/source&gt;\n &lt;/operand&gt;\n &lt;operand valueType=\"t:Integer\" value=\"0\" xsi:type=\"Literal\"/&gt;\n &lt;/source&gt;\n &lt;/source&gt;\n &lt;/operand&gt;\n &lt;/operand&gt;\n &lt;/operand&gt;\n &lt;/condition&gt;\n &lt;then name=\"GetIllicitDrug\" xsi:type=\"FunctionRef\"&gt;\n &lt;operand path=\"value\" xsi:type=\"Property\"&gt;\n &lt;source path=\"code\" xsi:type=\"Property\"&gt;\n &lt;source xsi:type=\"Indexer\"&gt;\n &lt;operand path=\"coding\" xsi:type=\"Property\"&gt;\n &lt;source path=\"interpretation\" xsi:type=\"Property\"&gt;\n &lt;source name=\"Positive Illicit Drug Screening\" xsi:type=\"ExpressionRef\"/&gt;\n &lt;/source&gt;\n &lt;/operand&gt;\n &lt;operand valueType=\"t:Integer\" value=\"0\" xsi:type=\"Literal\"/&gt;\n &lt;/source&gt;\n &lt;/source&gt;\n &lt;/operand&gt;\n &lt;/then&gt;\n &lt;else name=\"GetIllicitDrug\" xsi:type=\"FunctionRef\"&gt;\n &lt;operand path=\"value\" xsi:type=\"Property\"&gt;\n &lt;source path=\"code\" xsi:type=\"Property\"&gt;\n &lt;source xsi:type=\"Indexer\"&gt;\n &lt;operand path=\"coding\" xsi:type=\"Property\"&gt;\n &lt;source path=\"code\" xsi:type=\"Property\"&gt;\n &lt;source name=\"Positive Illicit Drug Screening\" xsi:type=\"ExpressionRef\"/&gt;\n &lt;/source&gt;\n &lt;/operand&gt;\n &lt;operand valueType=\"t:Integer\" value=\"0\" xsi:type=\"Literal\"/&gt;\n &lt;/source&gt;\n &lt;/source&gt;\n &lt;/operand&gt;\n &lt;/else&gt;\n &lt;/operand&gt;\n &lt;/expression&gt;\n &lt;/def&gt;\n &lt;def name=\"Has Opioids in Screening?\" context=\"Patient\" accessLevel=\"Public\"&gt;\n &lt;expression xsi:type=\"Exists\"&gt;\n &lt;operand xsi:type=\"ToList\"&gt;\n &lt;operand name=\"Positive Opioid Drug Screening\" xsi:type=\"ExpressionRef\"/&gt;\n &lt;/operand&gt;\n &lt;/expression&gt;\n &lt;/def&gt;\n &lt;def name=\"Inconsistent Unprescribed Opioids\" context=\"Patient\" accessLevel=\"Public\"&gt;\n &lt;expression xsi:type=\"Concatenate\"&gt;\n &lt;operand valueType=\"t:String\" value=\"Found the following unprescribed opioid(s): \" xsi:type=\"Literal\"/&gt;\n &lt;operand xsi:type=\"SingletonFrom\"&gt;\n &lt;operand name=\"Unprescribed Opioids\" xsi:type=\"ExpressionRef\"/&gt;\n &lt;/operand&gt;\n &lt;/expression&gt;\n &lt;/def&gt;\n &lt;def name=\"Inconsistent Missing Opioids\" context=\"Patient\" accessLevel=\"Public\"&gt;\n &lt;expression xsi:type=\"Concatenate\"&gt;\n &lt;operand valueType=\"t:String\" value=\"The following opioids are missing from the screening: \" xsi:type=\"Literal\"/&gt;\n &lt;operand xsi:type=\"SingletonFrom\"&gt;\n &lt;operand name=\"Missing Opioids\" xsi:type=\"ExpressionRef\"/&gt;\n &lt;/operand&gt;\n &lt;/expression&gt;\n &lt;/def&gt;\n &lt;def name=\"Get Indicator\" context=\"Patient\" accessLevel=\"Public\"&gt;\n &lt;expression valueType=\"t:String\" value=\"warning\" xsi:type=\"Literal\"/&gt;\n &lt;/def&gt;\n &lt;/statements&gt;\n&lt;/library&gt;\n</code>\n </pre>\n </div>"
  },
  "identifier" : [
    {
      "use" : "official",
      "value" : "OpioidCDS_REC_10"
    }
  ],
  "version" : "0.1.0",
  "title" : "Opioid CDS Logic for recommendation #10",
  "status" : "active",
  "experimental" : false,
  "type" : {
    "coding" : [
      {
        "system" : "http://terminology.hl7.org/CodeSystem/library-type",
        "code" : "logic-library",
        "display" : "Logic Library"
      }
    ]
  },
  "date" : "2018-03-25T13:49:09-06:00",
  "publisher" : "Centers for Disease Control and Prevention (CDC)",
  "description" : "Opioid decision support logic to evaluate whether the patient has had a urine screening in the past 12 months and provide analysis.",
  "useContext" : [
    {
      "code" : {
        "system" : "http://terminology.hl7.org/CodeSystem/usage-context-type",
        "code" : "focus",
        "display" : "Clinical Focus"
      },
      "valueCodeableConcept" : {
        "coding" : [
          {
            "system" : "http://snomed.info/sct",
            "code" : "182888003",
            "display" : "Medication requested (situation)"
          }
        ]
      }
    },
    {
      "code" : {
        "system" : "http://terminology.hl7.org/CodeSystem/usage-context-type",
        "code" : "focus",
        "display" : "Clinical Focus"
      },
      "valueCodeableConcept" : {
        "coding" : [
          {
            "system" : "http://snomed.info/sct",
            "code" : "82423001",
            "display" : "Chronic pain (finding)"
          }
        ]
      }
    }
  ],
  "jurisdiction" : [
    {
      "coding" : [
        {
          "system" : "urn:iso:std:iso:3166",
          "code" : "US",
          "display" : "United States of America"
        }
      ]
    }
  ],
  "purpose" : "The purpose of this library is to determine whether the patient has had a urine screening in the past 12 months. Is so, then check the results for missing opioids that are prescribed, present opioids that aren't prescribed or present illicit drugs.
",
  "usage" : "This library is used to notify the prescriber/user whether the patient has had a urine screening in the past 12 months and to provide analysis if true.",
  "copyright" : "© CDC 2016+.",
  "topic" : [
    {
      "text" : "Opioid Prescribing"
    }
  ],
  "author" : [
    {
      "name" : "Kensaku Kawamoto, MD, PhD, MHS"
    },
    {
      "name" : "Bryn Rhodes"
    },
    {
      "name" : "Floyd Eisenberg, MD, MPH"
    },
    {
      "name" : "Robert McClure, MD, MPH"
    }
  ],
  "relatedArtifact" : [
    {
      "type" : "documentation",
      "display" : "CDC guideline for prescribing opioids for chronic pain",
      "url" : "https://guidelines.gov/summaries/summary/50153/cdc-guideline-for-prescribing-opioids-for-chronic-pain---united-states-2016#420"
    },
    {
      "type" : "depends-on",
      "resource" : "http://example.org/fhir/Library/opioidcds-common"
    }
  ],
  "dataRequirement" : [
    {
      "type" : "MedicationRequest",
      "codeFilter" : [
        {
          "path" : "medicationCodeableConcept",
          "valueSet" : "http://example.org/fhir/ValueSet/opioids-indicating-end-of-life"
        }
      ]
    },
    {
      "type" : "MedicationRequest",
      "codeFilter" : [
        {
          "path" : "medicationCodeableConcept",
          "valueSet" : "http://example.org/fhir/ValueSet/opioids-abused-in-ambulatory-care"
        }
      ]
    },
    {
      "type" : "Observation",
      "codeFilter" : [
        {
          "path" : "combo-code",
          "valueSet" : "http://example.org/fhir/ValueSet/illicit-drug-urine-screening"
        }
      ]
    },
    {
      "type" : "Observation",
      "codeFilter" : [
        {
          "path" : "combo-code",
          "valueSet" : "http://example.org/fhir/ValueSet/opioid-urine-screening"
        }
      ]
    }
  ],
  "content" : [
    {
      "contentType" : "application/elm+xml",
      "data" : "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPGxpYnJhcnkgeG1sbnM9InVybjpobDctb3JnOmVsbTpyMSIgeG1sbnM6dD0idXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczpmaGlyPSJodHRwOi8vaGw3Lm9yZy9maGlyIiB4bWxuczpxZG00Mz0idXJuOmhlYWx0aGl0LWdvdjpxZG06djRfMyIgeG1sbnM6cWRtNTM9InVybjpoZWFsdGhpdC1nb3Y6cWRtOnY1XzMiIHhtbG5zOmE9InVybjpobDctb3JnOmNxbC1hbm5vdGF0aW9uczpyMSI+CiAgIDxhbm5vdGF0aW9uIHN0YXJ0TGluZT0iNjIiIHN0YXJ0Q2hhcj0iMTIiIGVuZExpbmU9IjYyIiBlbmRDaGFyPSI2MCIgbWVzc2FnZT0iQ291bGQgbm90IHJlc29sdmUgY29kZSBwYXRoIG1lZGljYXRpb25Db2RlYWJsZUNvbmNlcHQgZm9yIHRoZSB0eXBlIG9mIHRoZSByZXRyaWV2ZSBGSElSLk1lZGljYXRpb25SZXF1ZXN0LiIgZXJyb3JUeXBlPSJzZW1hbnRpYyIgZXJyb3JTZXZlcml0eT0id2FybmluZyIgeHNpOnR5cGU9ImE6Q3FsVG9FbG1FcnJvciIvPgogICA8YW5ub3RhdGlvbiBzdGFydExpbmU9IjYyIiBzdGFydENoYXI9IjEyIiBlbmRMaW5lPSI2MiIgZW5kQ2hhcj0iNjAiIG1lc3NhZ2U9IkNvdWxkIG5vdCByZXNvbHZlIG1lbWJlcnNoaXAgb3BlcmF0b3IgZm9yIHRlcm1pbm9sb2d5IHRhcmdldCBvZiB0aGUgcmV0cmlldmUuIiBlcnJvclR5cGU9InNlbWFudGljIiBlcnJvclNldmVyaXR5PSJ3YXJuaW5nIiB4c2k6dHlwZT0iYTpDcWxUb0VsbUVycm9yIi8+CiAgIDxhbm5vdGF0aW9uIHN0YXJ0TGluZT0iNjYiIHN0YXJ0Q2hhcj0iMyIgZW5kTGluZT0iNjYiIGVuZENoYXI9IjY2IiBtZXNzYWdlPSJDb3VsZCBub3QgcmVzb2x2ZSBjb2RlIHBhdGggbWVkaWNhdGlvbkNvZGVhYmxlQ29uY2VwdCBmb3IgdGhlIHR5cGUgb2YgdGhlIHJldHJpZXZlIEZISVIuTWVkaWNhdGlvblJlcXVlc3QuIiBlcnJvclR5cGU9InNlbWFudGljIiBlcnJvclNldmVyaXR5PSJ3YXJuaW5nIiB4c2k6dHlwZT0iYTpDcWxUb0VsbUVycm9yIi8+CiAgIDxhbm5vdGF0aW9uIHN0YXJ0TGluZT0iNjYiIHN0YXJ0Q2hhcj0iMyIgZW5kTGluZT0iNjYiIGVuZENoYXI9IjY2IiBtZXNzYWdlPSJDb3VsZCBub3QgcmVzb2x2ZSBtZW1iZXJzaGlwIG9wZXJhdG9yIGZvciB0ZXJtaW5vbG9neSB0YXJnZXQgb2YgdGhlIHJldHJpZXZlLiIgZXJyb3JUeXBlPSJzZW1hbnRpYyIgZXJyb3JTZXZlcml0eT0id2FybmluZyIgeHNpOnR5cGU9ImE6Q3FsVG9FbG1FcnJvciIvPgogICA8YW5ub3RhdGlvbiBzdGFydExpbmU9Ijc0IiBzdGFydENoYXI9IjMiIGVuZExpbmU9Ijc0IiBlbmRDaGFyPSI2NCIgbWVzc2FnZT0iQ291bGQgbm90IHJlc29sdmUgY29kZSBwYXRoIGNvbWJvLWNvZGUgZm9yIHRoZSB0eXBlIG9mIHRoZSByZXRyaWV2ZSBGSElSLk9ic2VydmF0aW9uLiIgZXJyb3JUeXBlPSJzZW1hbnRpYyIgZXJyb3JTZXZlcml0eT0id2FybmluZyIgeHNpOnR5cGU9ImE6Q3FsVG9FbG1FcnJvciIvPgogICA8YW5ub3RhdGlvbiBzdGFydExpbmU9Ijc0IiBzdGFydENoYXI9IjMiIGVuZExpbmU9Ijc0IiBlbmRDaGFyPSI2NCIgbWVzc2FnZT0iQ291bGQgbm90IHJlc29sdmUgbWVtYmVyc2hpcCBvcGVyYXRvciBmb3IgdGVybWlub2xvZ3kgdGFyZ2V0IG9mIHRoZSByZXRyaWV2ZS4iIGVycm9yVHlwZT0ic2VtYW50aWMiIGVycm9yU2V2ZXJpdHk9Indhcm5pbmciIHhzaTp0eXBlPSJhOkNxbFRvRWxtRXJyb3IiLz4KICAgPGFubm90YXRpb24gc3RhcnRMaW5lPSI3OSIgc3RhcnRDaGFyPSIzIiBlbmRMaW5lPSI3OSIgZW5kQ2hhcj0iNjMiIG1lc3NhZ2U9IkNvdWxkIG5vdCByZXNvbHZlIGNvZGUgcGF0aCBjb21iby1jb2RlIGZvciB0aGUgdHlwZSBvZiB0aGUgcmV0cmlldmUgRkhJUi5PYnNlcnZhdGlvbi4iIGVycm9yVHlwZT0ic2VtYW50aWMiIGVycm9yU2V2ZXJpdHk9Indhcm5pbmciIHhzaTp0eXBlPSJhOkNxbFRvRWxtRXJyb3IiLz4KICAgPGFubm90YXRpb24gc3RhcnRMaW5lPSI3OSIgc3RhcnRDaGFyPSIzIiBlbmRMaW5lPSI3OSIgZW5kQ2hhcj0iNjMiIG1lc3NhZ2U9IkNvdWxkIG5vdCByZXNvbHZlIG1lbWJlcnNoaXAgb3BlcmF0b3IgZm9yIHRlcm1pbm9sb2d5IHRhcmdldCBvZiB0aGUgcmV0cmlldmUuIiBlcnJvclR5cGU9InNlbWFudGljIiBlcnJvclNldmVyaXR5PSJ3YXJuaW5nIiB4c2k6dHlwZT0iYTpDcWxUb0VsbUVycm9yIi8+CiAgIDxhbm5vdGF0aW9uIHN0YXJ0TGluZT0iMTM0IiBzdGFydENoYXI9IjIwIiBlbmRMaW5lPSIxMzQiIGVuZENoYXI9Ijc2IiBtZXNzYWdlPSJMaXN0LXZhbHVlZCBleHByZXNzaW9uIHdhcyBkZW1vdGVkIHRvIGEgc2luZ2xldG9uLiIgZXJyb3JUeXBlPSJzZW1hbnRpYyIgZXJyb3JTZXZlcml0eT0id2FybmluZyIgeHNpOnR5cGU9ImE6Q3FsVG9FbG1FcnJvciIvPgogICA8YW5ub3RhdGlvbiBzdGFydExpbmU9IjE0MyIgc3RhcnRDaGFyPSIxNiIgZW5kTGluZT0iMTQzIiBlbmRDaGFyPSIxNyIgbWVzc2FnZT0iTGlzdC12YWx1ZWQgZXhwcmVzc2lvbiB3YXMgZGVtb3RlZCB0byBhIHNpbmdsZXRvbi4iIGVycm9yVHlwZT0ic2VtYW50aWMiIGVycm9yU2V2ZXJpdHk9Indhcm5pbmciIHhzaTp0eXBlPSJhOkNxbFRvRWxtRXJyb3IiLz4KICAgPGFubm90YXRpb24gc3RhcnRMaW5lPSIxNTciIHN0YXJ0Q2hhcj0iNTIiIGVuZExpbmU9IjE1NyIgZW5kQ2hhcj0iNzMiIG1lc3NhZ2U9Ikxpc3QtdmFsdWVkIGV4cHJlc3Npb24gd2FzIGRlbW90ZWQgdG8gYSBzaW5nbGV0b24uIiBlcnJvclR5cGU9InNlbWFudGljIiBlcnJvclNldmVyaXR5PSJ3YXJuaW5nIiB4c2k6dHlwZT0iYTpDcWxUb0VsbUVycm9yIi8+CiAgIDxhbm5vdGF0aW9uIHN0YXJ0TGluZT0iMTcxIiBzdGFydENoYXI9IjYyIiBlbmRMaW5lPSIxNzEiIGVuZENoYXI9Ijc4IiBtZXNzYWdlPSJMaXN0LXZhbHVlZCBleHByZXNzaW9uIHdhcyBkZW1vdGVkIHRvIGEgc2luZ2xldG9uLiIgZXJyb3JUeXBlPSJzZW1hbnRpYyIgZXJyb3JTZXZlcml0eT0id2FybmluZyIgeHNpOnR5cGU9ImE6Q3FsVG9FbG1FcnJvciIvPgogICA8aWRlbnRpZmllciBpZD0iT3Bpb2lkQ0RTX1NUVTRfUkVDXzEwIiB2ZXJzaW9uPSIwLjEuMCIvPgogICA8c2NoZW1hSWRlbnRpZmllciBpZD0idXJuOmhsNy1vcmc6ZWxtIiB2ZXJzaW9uPSJyMSIvPgogICA8dXNpbmdzPgogICAgICA8ZGVmIGxvY2FsSWRlbnRpZmllcj0iU3lzdGVtIiB1cmk9InVybjpobDctb3JnOmVsbS10eXBlczpyMSIvPgogICAgICA8ZGVmIGxvY2FsSWRlbnRpZmllcj0iRkhJUiIgdXJpPSJodHRwOi8vaGw3Lm9yZy9maGlyIiB2ZXJzaW9uPSIzLjIuMCIvPgogICA8L3VzaW5ncz4KICAgPGluY2x1ZGVzPgogICAgICA8ZGVmIGxvY2FsSWRlbnRpZmllcj0iQ29tbW9uIiBwYXRoPSJPcGlvaWRDRFNfU1RVNF9Db21tb24iIHZlcnNpb249IjAuMS4wIi8+CiAgIDwvaW5jbHVkZXM+CiAgIDxwYXJhbWV0ZXJzPgogICAgICA8ZGVmIG5hbWU9IkNvbnRleHRQcmVzY3JpcHRpb25zIiBhY2Nlc3NMZXZlbD0iUHVibGljIj4KICAgICAgICAgPHBhcmFtZXRlclR5cGVTcGVjaWZpZXIgeHNpOnR5cGU9Ikxpc3RUeXBlU3BlY2lmaWVyIj4KICAgICAgICAgICAgPGVsZW1lbnRUeXBlIG5hbWU9ImZoaXI6TWVkaWNhdGlvblJlcXVlc3QiIHhzaTp0eXBlPSJOYW1lZFR5cGVTcGVjaWZpZXIiLz4KICAgICAgICAgPC9wYXJhbWV0ZXJUeXBlU3BlY2lmaWVyPgogICAgICA8L2RlZj4KICAgPC9wYXJhbWV0ZXJzPgogICA8c3RhdGVtZW50cz4KICAgICAgPGRlZiBuYW1lPSJQYXRpZW50IiBjb250ZXh0PSJQYXRpZW50Ij4KICAgICAgICAgPGV4cHJlc3Npb24geHNpOnR5cGU9IlNpbmdsZXRvbkZyb20iPgogICAgICAgICAgICA8b3BlcmFuZCBkYXRhVHlwZT0iZmhpcjpQYXRpZW50IiB4c2k6dHlwZT0iUmV0cmlldmUiLz4KICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICA8L2RlZj4KICAgICAgPGRlZiBuYW1lPSJMb29rYmFjayBZZWFyIiBjb250ZXh0PSJQYXRpZW50IiBhY2Nlc3NMZXZlbD0iUHVibGljIj4KICAgICAgICAgPGV4cHJlc3Npb24gbG93Q2xvc2VkPSJ0cnVlIiBoaWdoQ2xvc2VkPSJ0cnVlIiB4c2k6dHlwZT0iSW50ZXJ2YWwiPgogICAgICAgICAgICA8bG93IHhzaTp0eXBlPSJTdWJ0cmFjdCI+CiAgICAgICAgICAgICAgIDxvcGVyYW5kIHhzaTp0eXBlPSJTdWJ0cmFjdCI+CiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHhzaTp0eXBlPSJUb2RheSIvPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCB2YWx1ZT0iMTIiIHVuaXQ9Im1vbnRocyIgeHNpOnR5cGU9IlF1YW50aXR5Ii8+CiAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgPG9wZXJhbmQgdmFsdWU9IjEiIHVuaXQ9ImRheXMiIHhzaTp0eXBlPSJRdWFudGl0eSIvPgogICAgICAgICAgICA8L2xvdz4KICAgICAgICAgICAgPGhpZ2ggeHNpOnR5cGU9IlN1YnRyYWN0Ij4KICAgICAgICAgICAgICAgPG9wZXJhbmQgeHNpOnR5cGU9IlRvZGF5Ii8+CiAgICAgICAgICAgICAgIDxvcGVyYW5kIHZhbHVlPSIxIiB1bml0PSJkYXkiIHhzaTp0eXBlPSJRdWFudGl0eSIvPgogICAgICAgICAgICA8L2hpZ2g+CiAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgPC9kZWY+CiAgICAgIDxkZWYgbmFtZT0iVmFsaWRhdGUgVHJpZ2dlciBFdmVudCIgY29udGV4dD0iUGF0aWVudCIgYWNjZXNzTGV2ZWw9IlB1YmxpYyI+CiAgICAgICAgIDxleHByZXNzaW9uIHhzaTp0eXBlPSJFeGlzdHMiPgogICAgICAgICAgICA8b3BlcmFuZCB4c2k6dHlwZT0iUXVlcnkiPgogICAgICAgICAgICAgICA8c291cmNlIGFsaWFzPSJ0cmlnZ2VyU2NyaXB0Ij4KICAgICAgICAgICAgICAgICAgPGV4cHJlc3Npb24gbmFtZT0iQ29udGV4dFByZXNjcmlwdGlvbnMiIHhzaTp0eXBlPSJQYXJhbWV0ZXJSZWYiLz4KICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgIDx3aGVyZSBuYW1lPSJJc09waW9pZFdpdGhBbWJ1bGF0b3J5QWJ1c2VQb3RlbnRpYWwiIGxpYnJhcnlOYW1lPSJDb21tb24iIHhzaTp0eXBlPSJGdW5jdGlvblJlZiI+CiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIG5hbWU9IlRvQ29kZSIgbGlicmFyeU5hbWU9IkNvbW1vbiIgeHNpOnR5cGU9IkZ1bmN0aW9uUmVmIj4KICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgeHNpOnR5cGU9IkluZGV4ZXIiPgogICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBwYXRoPSJjb2RpbmciIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgcGF0aD0ibWVkaWNhdGlvbiIgc2NvcGU9InRyaWdnZXJTY3JpcHQiIHhzaTp0eXBlPSJQcm9wZXJ0eSIvPgogICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHZhbHVlVHlwZT0idDpJbnRlZ2VyIiB2YWx1ZT0iMCIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgIDwvd2hlcmU+CiAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICA8L2RlZj4KICAgICAgPGRlZiBuYW1lPSJFeGNsdXNpb24gQ3JpdGVyaWEiIGNvbnRleHQ9IlBhdGllbnQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiPgogICAgICAgICA8ZXhwcmVzc2lvbiB4c2k6dHlwZT0iT3IiPgogICAgICAgICAgICA8b3BlcmFuZCB4c2k6dHlwZT0iRXhpc3RzIj4KICAgICAgICAgICAgICAgPG9wZXJhbmQgZGF0YVR5cGU9ImZoaXI6TWVkaWNhdGlvblJlcXVlc3QiIGNvZGVQcm9wZXJ0eT0ibWVkaWNhdGlvbkNvZGVhYmxlQ29uY2VwdCIgeHNpOnR5cGU9IlJldHJpZXZlIj4KICAgICAgICAgICAgICAgICAgPGNvZGVzIG5hbWU9IkVuZCBPZiBMaWZlIE9waW9pZHMiIGxpYnJhcnlOYW1lPSJDb21tb24iIHhzaTp0eXBlPSJWYWx1ZVNldFJlZiIvPgogICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgPG9wZXJhbmQgbmFtZT0iSGFzTWV0YXN0YXRpY0NhbmNlciIgbGlicmFyeU5hbWU9IkNvbW1vbiIgeHNpOnR5cGU9IkV4cHJlc3Npb25SZWYiLz4KICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICA8L2RlZj4KICAgICAgPGRlZiBuYW1lPSJHZXQgQWN0aXZlIEFtYnVsYXRvcnkgT3Bpb2lkIFJ4IiBjb250ZXh0PSJQYXRpZW50IiBhY2Nlc3NMZXZlbD0iUHVibGljIj4KICAgICAgICAgPGV4cHJlc3Npb24geHNpOnR5cGU9IlF1ZXJ5Ij4KICAgICAgICAgICAgPHNvdXJjZSBhbGlhcz0iUngiPgogICAgICAgICAgICAgICA8ZXhwcmVzc2lvbiBkYXRhVHlwZT0iZmhpcjpNZWRpY2F0aW9uUmVxdWVzdCIgY29kZVByb3BlcnR5PSJtZWRpY2F0aW9uQ29kZWFibGVDb25jZXB0IiB4c2k6dHlwZT0iUmV0cmlldmUiPgogICAgICAgICAgICAgICAgICA8Y29kZXMgbmFtZT0iQW1idWxhdG9yeSBBYnVzZSBQb3RlbnRpYWwgT3Bpb2lkcyIgbGlicmFyeU5hbWU9IkNvbW1vbiIgeHNpOnR5cGU9IlZhbHVlU2V0UmVmIi8+CiAgICAgICAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgIDx3aGVyZSB4c2k6dHlwZT0iQW5kIj4KICAgICAgICAgICAgICAgPG9wZXJhbmQgeHNpOnR5cGU9IkVxdWFsIj4KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgcGF0aD0idmFsdWUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgcGF0aD0ic3RhdHVzIiBzY29wZT0iUngiIHhzaTp0eXBlPSJQcm9wZXJ0eSIvPgogICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHZhbHVlVHlwZT0idDpTdHJpbmciIHZhbHVlPSJhY3RpdmUiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgPG9wZXJhbmQgeHNpOnR5cGU9IkVxdWFsIj4KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgcGF0aD0idmFsdWUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgcGF0aD0iY29kZSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSB4c2k6dHlwZT0iSW5kZXhlciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHhzaTp0eXBlPSJGbGF0dGVuIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgeHNpOnR5cGU9IlF1ZXJ5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBhbGlhcz0iJHRoaXMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXhwcmVzc2lvbiBwYXRoPSJjYXRlZ29yeSIgc2NvcGU9IlJ4IiB4c2k6dHlwZT0iUHJvcGVydHkiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3aGVyZSB4c2k6dHlwZT0iTm90Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgeHNpOnR5cGU9IklzTnVsbCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHBhdGg9ImNvZGluZyIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBuYW1lPSIkdGhpcyIgeHNpOnR5cGU9IkFsaWFzUmVmIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3doZXJlPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmV0dXJuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXhwcmVzc2lvbiBwYXRoPSJjb2RpbmciIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbmFtZT0iJHRoaXMiIHhzaTp0eXBlPSJBbGlhc1JlZiIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcmV0dXJuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgdmFsdWVUeXBlPSJ0OkludGVnZXIiIHZhbHVlPSIwIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9Im91dHBhdGllbnQiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgPC93aGVyZT4KICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICA8L2RlZj4KICAgICAgPGRlZiBuYW1lPSJHZXQgSWxsaWNpdCBEcnVnIFVyaW5lIFNjcmVlbmluZ3MgaW4gTGFzdCAxMiBNb250aHMiIGNvbnRleHQ9IlBhdGllbnQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiPgogICAgICAgICA8ZXhwcmVzc2lvbiB4c2k6dHlwZT0iUXVlcnkiPgogICAgICAgICAgICA8c291cmNlIGFsaWFzPSJvYnNlcnZhdGlvbiI+CiAgICAgICAgICAgICAgIDxleHByZXNzaW9uIGRhdGFUeXBlPSJmaGlyOk9ic2VydmF0aW9uIiBjb2RlUHJvcGVydHk9ImNvbWJvLWNvZGUiIHhzaTp0eXBlPSJSZXRyaWV2ZSI+CiAgICAgICAgICAgICAgICAgIDxjb2RlcyBuYW1lPSJJbGxpY2l0IERydWcgU2NyZWVuaW5nIiBsaWJyYXJ5TmFtZT0iQ29tbW9uIiB4c2k6dHlwZT0iVmFsdWVTZXRSZWYiLz4KICAgICAgICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgPHdoZXJlIHhzaTp0eXBlPSJJbiI+CiAgICAgICAgICAgICAgIDxvcGVyYW5kIHBhdGg9InZhbHVlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICA8c291cmNlIHBhdGg9ImVmZmVjdGl2ZSIgc2NvcGU9Im9ic2VydmF0aW9uIiB4c2k6dHlwZT0iUHJvcGVydHkiLz4KICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICA8b3BlcmFuZCBuYW1lPSJMb29rYmFjayBZZWFyIiB4c2k6dHlwZT0iRXhwcmVzc2lvblJlZiIvPgogICAgICAgICAgICA8L3doZXJlPgogICAgICAgICAgICA8c29ydD4KICAgICAgICAgICAgICAgPGJ5IGRpcmVjdGlvbj0iYXNjIiB4c2k6dHlwZT0iQnlFeHByZXNzaW9uIj4KICAgICAgICAgICAgICAgICAgPGV4cHJlc3Npb24gcGF0aD0idmFsdWUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbmFtZT0iZWZmZWN0aXZlIiB4c2k6dHlwZT0iSWRlbnRpZmllclJlZiIvPgogICAgICAgICAgICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgICAgICAgICAgIDwvYnk+CiAgICAgICAgICAgIDwvc29ydD4KICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICA8L2RlZj4KICAgICAgPGRlZiBuYW1lPSJNb3N0IFJlY2VudCBJbGxpY2l0IERydWcgVXJpbmUgU2NyZWVuaW5ncyBpbiBMYXN0IDEyIE1vbnRocyIgY29udGV4dD0iUGF0aWVudCIgYWNjZXNzTGV2ZWw9IlB1YmxpYyI+CiAgICAgICAgIDxleHByZXNzaW9uIHhzaTp0eXBlPSJMYXN0Ij4KICAgICAgICAgICAgPHNvdXJjZSBuYW1lPSJHZXQgSWxsaWNpdCBEcnVnIFVyaW5lIFNjcmVlbmluZ3MgaW4gTGFzdCAxMiBNb250aHMiIHhzaTp0eXBlPSJFeHByZXNzaW9uUmVmIi8+CiAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgPC9kZWY+CiAgICAgIDxkZWYgbmFtZT0iR2V0IE9waW9pZCBEcnVnIFVyaW5lIFNjcmVlbmluZ3MgaW4gTGFzdCAxMiBNb250aHMiIGNvbnRleHQ9IlBhdGllbnQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiPgogICAgICAgICA8ZXhwcmVzc2lvbiB4c2k6dHlwZT0iUXVlcnkiPgogICAgICAgICAgICA8c291cmNlIGFsaWFzPSJvYnNlcnZhdGlvbiI+CiAgICAgICAgICAgICAgIDxleHByZXNzaW9uIGRhdGFUeXBlPSJmaGlyOk9ic2VydmF0aW9uIiBjb2RlUHJvcGVydHk9ImNvbWJvLWNvZGUiIHhzaTp0eXBlPSJSZXRyaWV2ZSI+CiAgICAgICAgICAgICAgICAgIDxjb2RlcyBuYW1lPSJPcGlvaWQgRHJ1ZyBTY3JlZW5pbmciIGxpYnJhcnlOYW1lPSJDb21tb24iIHhzaTp0eXBlPSJWYWx1ZVNldFJlZiIvPgogICAgICAgICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICA8d2hlcmUgeHNpOnR5cGU9IkluIj4KICAgICAgICAgICAgICAgPG9wZXJhbmQgcGF0aD0idmFsdWUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgIDxzb3VyY2UgcGF0aD0iZWZmZWN0aXZlIiBzY29wZT0ib2JzZXJ2YXRpb24iIHhzaTp0eXBlPSJQcm9wZXJ0eSIvPgogICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgIDxvcGVyYW5kIG5hbWU9Ikxvb2tiYWNrIFllYXIiIHhzaTp0eXBlPSJFeHByZXNzaW9uUmVmIi8+CiAgICAgICAgICAgIDwvd2hlcmU+CiAgICAgICAgICAgIDxzb3J0PgogICAgICAgICAgICAgICA8YnkgZGlyZWN0aW9uPSJhc2MiIHhzaTp0eXBlPSJCeUV4cHJlc3Npb24iPgogICAgICAgICAgICAgICAgICA8ZXhwcmVzc2lvbiBwYXRoPSJ2YWx1ZSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBuYW1lPSJlZmZlY3RpdmUiIHhzaTp0eXBlPSJJZGVudGlmaWVyUmVmIi8+CiAgICAgICAgICAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgICAgICAgICAgPC9ieT4KICAgICAgICAgICAgPC9zb3J0PgogICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIG5hbWU9Ik1vc3QgUmVjZW50IE9waW9pZCBEcnVnIFVyaW5lIFNjcmVlbmluZ3MgaW4gTGFzdCAxMiBNb250aHMiIGNvbnRleHQ9IlBhdGllbnQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiPgogICAgICAgICA8ZXhwcmVzc2lvbiB4c2k6dHlwZT0iTGFzdCI+CiAgICAgICAgICAgIDxzb3VyY2UgbmFtZT0iR2V0IE9waW9pZCBEcnVnIFVyaW5lIFNjcmVlbmluZ3MgaW4gTGFzdCAxMiBNb250aHMiIHhzaTp0eXBlPSJFeHByZXNzaW9uUmVmIi8+CiAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgPC9kZWY+CiAgICAgIDxkZWYgbmFtZT0iTm8gVXJpbmUgU2NyZWVuaW5nIEluIExhc3QgMTIgTW9udGhzIiBjb250ZXh0PSJQYXRpZW50IiBhY2Nlc3NMZXZlbD0iUHVibGljIj4KICAgICAgICAgPGV4cHJlc3Npb24geHNpOnR5cGU9IkFuZCI+CiAgICAgICAgICAgIDxvcGVyYW5kIHhzaTp0eXBlPSJJc051bGwiPgogICAgICAgICAgICAgICA8b3BlcmFuZCBuYW1lPSJNb3N0IFJlY2VudCBJbGxpY2l0IERydWcgVXJpbmUgU2NyZWVuaW5ncyBpbiBMYXN0IDEyIE1vbnRocyIgeHNpOnR5cGU9IkV4cHJlc3Npb25SZWYiLz4KICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICA8b3BlcmFuZCB4c2k6dHlwZT0iSXNOdWxsIj4KICAgICAgICAgICAgICAgPG9wZXJhbmQgbmFtZT0iTW9zdCBSZWNlbnQgT3Bpb2lkIERydWcgVXJpbmUgU2NyZWVuaW5ncyBpbiBMYXN0IDEyIE1vbnRocyIgeHNpOnR5cGU9IkV4cHJlc3Npb25SZWYiLz4KICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIG5hbWU9IlBvc2l0aXZlIE9waW9pZCBEcnVnIFNjcmVlbmluZyIgY29udGV4dD0iUGF0aWVudCIgYWNjZXNzTGV2ZWw9IlB1YmxpYyI+CiAgICAgICAgIDxleHByZXNzaW9uIHhzaTp0eXBlPSJRdWVyeSI+CiAgICAgICAgICAgIDxzb3VyY2UgYWxpYXM9Im1vc3RSZWNlbnRTY3JlZW5pbmciPgogICAgICAgICAgICAgICA8ZXhwcmVzc2lvbiBuYW1lPSJNb3N0IFJlY2VudCBPcGlvaWQgRHJ1ZyBVcmluZSBTY3JlZW5pbmdzIGluIExhc3QgMTIgTW9udGhzIiB4c2k6dHlwZT0iRXhwcmVzc2lvblJlZiIvPgogICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgPHdoZXJlIHhzaTp0eXBlPSJPciI+CiAgICAgICAgICAgICAgIDxvcGVyYW5kIHhzaTp0eXBlPSJFcXVhbCI+CiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHBhdGg9InZhbHVlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICA8c291cmNlIHBhdGg9ImNvZGUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgeHNpOnR5cGU9IkluZGV4ZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBwYXRoPSJjb2RpbmciIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgcGF0aD0iaW50ZXJwcmV0YXRpb24iIHNjb3BlPSJtb3N0UmVjZW50U2NyZWVuaW5nIiB4c2k6dHlwZT0iUHJvcGVydHkiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCB2YWx1ZVR5cGU9InQ6SW50ZWdlciIgdmFsdWU9IjAiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCB2YWx1ZVR5cGU9InQ6U3RyaW5nIiB2YWx1ZT0iUE9TIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgIDxvcGVyYW5kIHhzaTp0eXBlPSJJZiI+CiAgICAgICAgICAgICAgICAgIDxjb25kaXRpb24gYXNUeXBlPSJ0OkJvb2xlYW4iIHhzaTp0eXBlPSJBcyI+CiAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHhzaTp0eXBlPSJOb3QiPgogICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCB4c2k6dHlwZT0iSXNOdWxsIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgeHNpOnR5cGU9IkluZGV4ZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBwYXRoPSJjb21wb25lbnQiIHNjb3BlPSJtb3N0UmVjZW50U2NyZWVuaW5nIiB4c2k6dHlwZT0iUHJvcGVydHkiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgdmFsdWVUeXBlPSJ0OkludGVnZXIiIHZhbHVlPSIwIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICA8L2NvbmRpdGlvbj4KICAgICAgICAgICAgICAgICAgPHRoZW4geHNpOnR5cGU9IkVxdWFsIj4KICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgcGF0aD0idmFsdWUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgcGF0aD0iY29kZSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSB4c2k6dHlwZT0iSW5kZXhlciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHBhdGg9ImNvZGluZyIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBwYXRoPSJpbnRlcnByZXRhdGlvbiIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSB4c2k6dHlwZT0iSW5kZXhlciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHBhdGg9ImNvbXBvbmVudCIgc2NvcGU9Im1vc3RSZWNlbnRTY3JlZW5pbmciIHhzaTp0eXBlPSJQcm9wZXJ0eSIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCB2YWx1ZVR5cGU9InQ6SW50ZWdlciIgdmFsdWU9IjAiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCB2YWx1ZVR5cGU9InQ6SW50ZWdlciIgdmFsdWU9IjAiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICAgICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCB2YWx1ZVR5cGU9InQ6U3RyaW5nIiB2YWx1ZT0iUE9TIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICAgICA8L3RoZW4+CiAgICAgICAgICAgICAgICAgIDxlbHNlIHZhbHVlVHlwZT0idDpCb29sZWFuIiB2YWx1ZT0iZmFsc2UiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgPC93aGVyZT4KICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICA8L2RlZj4KICAgICAgPGRlZiBuYW1lPSJPcmRlcnMgQmVmb3JlIE1vc3QgUmVjZW50IE9waW9pZCBTY3JlZW5pbmciIGNvbnRleHQ9IlBhdGllbnQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiPgogICAgICAgICA8ZXhwcmVzc2lvbiB4c2k6dHlwZT0iUXVlcnkiPgogICAgICAgICAgICA8c291cmNlIGFsaWFzPSJvcmRlcnMiPgogICAgICAgICAgICAgICA8ZXhwcmVzc2lvbiBuYW1lPSJHZXQgQWN0aXZlIEFtYnVsYXRvcnkgT3Bpb2lkIFJ4IiB4c2k6dHlwZT0iRXhwcmVzc2lvblJlZiIvPgogICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgPHJlbGF0aW9uc2hpcCBhbGlhcz0ibW9zdFJlY2VudFNjcmVlbmluZyIgeHNpOnR5cGU9IldpdGgiPgogICAgICAgICAgICAgICA8ZXhwcmVzc2lvbiBuYW1lPSJQb3NpdGl2ZSBPcGlvaWQgRHJ1ZyBTY3JlZW5pbmciIHhzaTp0eXBlPSJFeHByZXNzaW9uUmVmIi8+CiAgICAgICAgICAgICAgIDxzdWNoVGhhdCB4c2k6dHlwZT0iTGVzcyI+CiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHBhdGg9InZhbHVlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICA8c291cmNlIHBhdGg9ImF1dGhvcmVkT24iIHNjb3BlPSJvcmRlcnMiIHhzaTp0eXBlPSJQcm9wZXJ0eSIvPgogICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHBhdGg9InZhbHVlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICA8c291cmNlIHBhdGg9ImVmZmVjdGl2ZSIgc2NvcGU9Im1vc3RSZWNlbnRTY3JlZW5pbmciIHhzaTp0eXBlPSJQcm9wZXJ0eSIvPgogICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgIDwvc3VjaFRoYXQ+CiAgICAgICAgICAgIDwvcmVsYXRpb25zaGlwPgogICAgICAgICAgICA8cmV0dXJuPgogICAgICAgICAgICAgICA8ZXhwcmVzc2lvbiBuYW1lPSJvcmRlcnMiIHhzaTp0eXBlPSJBbGlhc1JlZiIvPgogICAgICAgICAgICA8L3JldHVybj4KICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICA8L2RlZj4KICAgICAgPGRlZiBuYW1lPSJQcmVzY3JpYmVkIE9waW9pZHMiIGNvbnRleHQ9IlBhdGllbnQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiPgogICAgICAgICA8ZXhwcmVzc2lvbiB4c2k6dHlwZT0iUXVlcnkiPgogICAgICAgICAgICA8c291cmNlIGFsaWFzPSJvcmRlcnMiPgogICAgICAgICAgICAgICA8ZXhwcmVzc2lvbiBuYW1lPSJPcmRlcnMgQmVmb3JlIE1vc3QgUmVjZW50IE9waW9pZCBTY3JlZW5pbmciIHhzaTp0eXBlPSJFeHByZXNzaW9uUmVmIi8+CiAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICA8cmV0dXJuPgogICAgICAgICAgICAgICA8ZXhwcmVzc2lvbiB4c2k6dHlwZT0iTG93ZXIiPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCB4c2k6dHlwZT0iU2luZ2xldG9uRnJvbSI+CiAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIG5hbWU9IkdldEluZ3JlZGllbnQiIGxpYnJhcnlOYW1lPSJDb21tb24iIHhzaTp0eXBlPSJGdW5jdGlvblJlZiI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIG5hbWU9IlRvQ29kZSIgbGlicmFyeU5hbWU9IkNvbW1vbiIgeHNpOnR5cGU9IkZ1bmN0aW9uUmVmIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgeHNpOnR5cGU9IkluZGV4ZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBwYXRoPSJjb2RpbmciIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgcGF0aD0ibWVkaWNhdGlvbiIgc2NvcGU9Im9yZGVycyIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgdmFsdWVUeXBlPSJ0OkludGVnZXIiIHZhbHVlPSIwIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgICAgICAgPC9yZXR1cm4+CiAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgPC9kZWY+CiAgICAgIDxkZWYgbmFtZT0iR2V0T3Bpb2lkIiBjb250ZXh0PSJQYXRpZW50IiBhY2Nlc3NMZXZlbD0iUHVibGljIiB4c2k6dHlwZT0iRnVuY3Rpb25EZWYiPgogICAgICAgICA8ZXhwcmVzc2lvbiB4c2k6dHlwZT0iQ2FzZSI+CiAgICAgICAgICAgIDxjb21wYXJhbmQgbmFtZT0idmFsdWUiIHhzaTp0eXBlPSJPcGVyYW5kUmVmIi8+CiAgICAgICAgICAgIDxjYXNlSXRlbT4KICAgICAgICAgICAgICAgPHdoZW4gdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9IjMyOTktNSIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgPHRoZW4gdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9IkFjZXRhbWlub3BoZW4iIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgIDwvY2FzZUl0ZW0+CiAgICAgICAgICAgIDxjYXNlSXRlbT4KICAgICAgICAgICAgICAgPHdoZW4gdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9IjE0MTg0LTYiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgIDx0aGVuIHZhbHVlVHlwZT0idDpTdHJpbmciIHZhbHVlPSJBdHJvcGluZSIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgPC9jYXNlSXRlbT4KICAgICAgICAgICAgPGNhc2VJdGVtPgogICAgICAgICAgICAgICA8d2hlbiB2YWx1ZVR5cGU9InQ6U3RyaW5nIiB2YWx1ZT0iMTY0ODUtNSIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgPHRoZW4gdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9IkJyb21vZGlwaGVuaHlkcmFtaW5lIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICA8L2Nhc2VJdGVtPgogICAgICAgICAgICA8Y2FzZUl0ZW0+CiAgICAgICAgICAgICAgIDx3aGVuIHZhbHVlVHlwZT0idDpTdHJpbmciIHZhbHVlPSIzNDA4LTIiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgIDx0aGVuIHZhbHVlVHlwZT0idDpTdHJpbmciIHZhbHVlPSJCcm9tcGhlbmlyYW1pbmUiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgIDwvY2FzZUl0ZW0+CiAgICAgICAgICAgIDxjYXNlSXRlbT4KICAgICAgICAgICAgICAgPHdoZW4gdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9IjM0MTQtMCIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgPHRoZW4gdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9IkJ1cHJlbm9ycGhpbmUiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgIDwvY2FzZUl0ZW0+CiAgICAgICAgICAgIDxjYXNlSXRlbT4KICAgICAgICAgICAgICAgPHdoZW4gdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9IjM0MjEtNSIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgPHRoZW4gdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9IkJ1dGFsYml0YWwiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgIDwvY2FzZUl0ZW0+CiAgICAgICAgICAgIDxjYXNlSXRlbT4KICAgICAgICAgICAgICAgPHdoZW4gdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9IjEyMzMzLTEiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgIDx0aGVuIHZhbHVlVHlwZT0idDpTdHJpbmciIHZhbHVlPSJCdXRvcnBoYW5vbCIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgPC9jYXNlSXRlbT4KICAgICAgICAgICAgPGNhc2VJdGVtPgogICAgICAgICAgICAgICA8d2hlbiB2YWx1ZVR5cGU9InQ6U3RyaW5nIiB2YWx1ZT0iMzQyMy0xIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICA8dGhlbiB2YWx1ZVR5cGU9InQ6U3RyaW5nIiB2YWx1ZT0iQ2FmZmVpbmUiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgIDwvY2FzZUl0ZW0+CiAgICAgICAgICAgIDxjYXNlSXRlbT4KICAgICAgICAgICAgICAgPHdoZW4gdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9IjIxMTQyLTUiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgIDx0aGVuIHZhbHVlVHlwZT0idDpTdHJpbmciIHZhbHVlPSJDYXJpc29wcm9kb2wiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgIDwvY2FzZUl0ZW0+CiAgICAgICAgICAgIDxjYXNlSXRlbT4KICAgICAgICAgICAgICAgPHdoZW4gdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9IjE2NjA1LTgiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgIDx0aGVuIHZhbHVlVHlwZT0idDpTdHJpbmciIHZhbHVlPSJDaGxvcmN5Y2xpemluZSIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgPC9jYXNlSXRlbT4KICAgICAgICAgICAgPGNhc2VJdGVtPgogICAgICAgICAgICAgICA8d2hlbiB2YWx1ZVR5cGU9InQ6U3RyaW5nIiB2YWx1ZT0iMzQ2Ny04IiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICA8dGhlbiB2YWx1ZVR5cGU9InQ6U3RyaW5nIiB2YWx1ZT0iQ2hsb3JwaGVuaXJhbWluZSIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgPC9jYXNlSXRlbT4KICAgICAgICAgICAgPGNhc2VJdGVtPgogICAgICAgICAgICAgICA8d2hlbiB2YWx1ZVR5cGU9InQ6U3RyaW5nIiB2YWx1ZT0iMzUwNy0xIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICA8dGhlbiB2YWx1ZVR5cGU9InQ6U3RyaW5nIiB2YWx1ZT0iQ29kZWluZSIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgPC9jYXNlSXRlbT4KICAgICAgICAgICAgPGNhc2VJdGVtPgogICAgICAgICAgICAgICA8d2hlbiB2YWx1ZVR5cGU9InQ6U3RyaW5nIiB2YWx1ZT0iMTQwNjYtNSIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgPHRoZW4gdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9IkRpaHlkcm9jb2RlaW5lIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICA8L2Nhc2VJdGVtPgogICAgICAgICAgICA8Y2FzZUl0ZW0+CiAgICAgICAgICAgICAgIDx3aGVuIHZhbHVlVHlwZT0idDpTdHJpbmciIHZhbHVlPSIzNTcxLTciIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgIDx0aGVuIHZhbHVlVHlwZT0idDpTdHJpbmciIHZhbHVlPSJEaXBoZW5oeWRyYW1pbmUiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgIDwvY2FzZUl0ZW0+CiAgICAgICAgICAgIDxjYXNlSXRlbT4KICAgICAgICAgICAgICAgPHdoZW4gdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9IjExMjM1LTkiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgIDx0aGVuIHZhbHVlVHlwZT0idDpTdHJpbmciIHZhbHVlPSJGZW50YW55bCIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgPC9jYXNlSXRlbT4KICAgICAgICAgICAgPGNhc2VJdGVtPgogICAgICAgICAgICAgICA8d2hlbiB2YWx1ZVR5cGU9InQ6U3RyaW5nIiB2YWx1ZT0iMTIzMDgtMyIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgPHRoZW4gdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9Ikh5ZHJvY29kb25lIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICA8L2Nhc2VJdGVtPgogICAgICAgICAgICA8Y2FzZUl0ZW0+CiAgICAgICAgICAgICAgIDx3aGVuIHZhbHVlVHlwZT0idDpTdHJpbmciIHZhbHVlPSI5ODM0LTMiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgIDx0aGVuIHZhbHVlVHlwZT0idDpTdHJpbmciIHZhbHVlPSJIeWRyb21vcnBob25lIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICA8L2Nhc2VJdGVtPgogICAgICAgICAgICA8Y2FzZUl0ZW0+CiAgICAgICAgICAgICAgIDx3aGVuIHZhbHVlVHlwZT0idDpTdHJpbmciIHZhbHVlPSIxNDA3MSIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgPHRoZW4gdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9IklidXByb2ZlbiIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgPC9jYXNlSXRlbT4KICAgICAgICAgICAgPGNhc2VJdGVtPgogICAgICAgICAgICAgICA8d2hlbiB2YWx1ZVR5cGU9InQ6U3RyaW5nIiB2YWx1ZT0iMzcxMS05IiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICA8dGhlbiB2YWx1ZVR5cGU9InQ6U3RyaW5nIiB2YWx1ZT0iTGV2b3JwaGFub2wiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgIDwvY2FzZUl0ZW0+CiAgICAgICAgICAgIDxjYXNlSXRlbT4KICAgICAgICAgICAgICAgPHdoZW4gdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9IjM3NDYtNSIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgPHRoZW4gdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9Ik1lcGVyaWRpbmUiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgIDwvY2FzZUl0ZW0+CiAgICAgICAgICAgIDxjYXNlSXRlbT4KICAgICAgICAgICAgICAgPHdoZW4gdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9IjM3NzMtOSIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgPHRoZW4gdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9Ik1ldGhhZG9uZSIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgPC9jYXNlSXRlbT4KICAgICAgICAgICAgPGNhc2VJdGVtPgogICAgICAgICAgICAgICA8d2hlbiB2YWx1ZVR5cGU9InQ6U3RyaW5nIiB2YWx1ZT0iMzgzMC03IiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICA8dGhlbiB2YWx1ZVR5cGU9InQ6U3RyaW5nIiB2YWx1ZT0iTW9ycGhpbmUiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgIDwvY2FzZUl0ZW0+CiAgICAgICAgICAgIDxjYXNlSXRlbT4KICAgICAgICAgICAgICAgPHdoZW4gdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9IjQyNjE4LTkiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgIDx0aGVuIHZhbHVlVHlwZT0idDpTdHJpbmciIHZhbHVlPSJOYWxveG9uZSIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgPC9jYXNlSXRlbT4KICAgICAgICAgICAgPGNhc2VJdGVtPgogICAgICAgICAgICAgICA8d2hlbiB2YWx1ZVR5cGU9InQ6U3RyaW5nIiB2YWx1ZT0iMTIzMDktMSIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgPHRoZW4gdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9Ik5hbHRyZXhvbmUiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgIDwvY2FzZUl0ZW0+CiAgICAgICAgICAgIDxjYXNlSXRlbT4KICAgICAgICAgICAgICAgPHdoZW4gdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9IjEwOTk4LTMiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgIDx0aGVuIHZhbHVlVHlwZT0idDpTdHJpbmciIHZhbHVlPSJPeHljb2RvbmUiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgIDwvY2FzZUl0ZW0+CiAgICAgICAgICAgIDxjYXNlSXRlbT4KICAgICAgICAgICAgICAgPHdoZW4gdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9IjExMjQ3LTQiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgIDx0aGVuIHZhbHVlVHlwZT0idDpTdHJpbmciIHZhbHVlPSJPeHltb3JwaG9uZSIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgPC9jYXNlSXRlbT4KICAgICAgICAgICAgPGNhc2VJdGVtPgogICAgICAgICAgICAgICA8d2hlbiB2YWx1ZVR5cGU9InQ6U3RyaW5nIiB2YWx1ZT0iMzkxNy0yIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICA8dGhlbiB2YWx1ZVR5cGU9InQ6U3RyaW5nIiB2YWx1ZT0iUGVudGF6b2NpbmUiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgIDwvY2FzZUl0ZW0+CiAgICAgICAgICAgIDxjYXNlSXRlbT4KICAgICAgICAgICAgICAgPHdoZW4gdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9IjM5NjItOCIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgPHRoZW4gdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9IlBoZW55bGVwaHJpbmUiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgIDwvY2FzZUl0ZW0+CiAgICAgICAgICAgIDxjYXNlSXRlbT4KICAgICAgICAgICAgICAgPHdoZW4gdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9IjM5NjUtMSIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgPHRoZW4gdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9IlBoZW55bHByb3Bhbm9sYW1pbmUiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgIDwvY2FzZUl0ZW0+CiAgICAgICAgICAgIDxjYXNlSXRlbT4KICAgICAgICAgICAgICAgPHdoZW4gdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9IjExMDAwLTciIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgIDx0aGVuIHZhbHVlVHlwZT0idDpTdHJpbmciIHZhbHVlPSJQcm9tZXRoYXppbmUiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgIDwvY2FzZUl0ZW0+CiAgICAgICAgICAgIDxjYXNlSXRlbT4KICAgICAgICAgICAgICAgPHdoZW4gdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9IjQwMDMtMCIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgPHRoZW4gdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9IlBzZXVkb2VwaGVkcmluZSIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgPC9jYXNlSXRlbT4KICAgICAgICAgICAgPGNhc2VJdGVtPgogICAgICAgICAgICAgICA8d2hlbiB2YWx1ZVR5cGU9InQ6U3RyaW5nIiB2YWx1ZT0iNDAwOS03IiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICA8dGhlbiB2YWx1ZVR5cGU9InQ6U3RyaW5nIiB2YWx1ZT0iUHlyaWxhbWluZSIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgPC9jYXNlSXRlbT4KICAgICAgICAgICAgPGNhc2VJdGVtPgogICAgICAgICAgICAgICA8d2hlbiB2YWx1ZVR5cGU9InQ6U3RyaW5nIiB2YWx1ZT0iNjU4MDctMCIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgPHRoZW4gdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9IlRhcGVudGFkb2wiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgIDwvY2FzZUl0ZW0+CiAgICAgICAgICAgIDxjYXNlSXRlbT4KICAgICAgICAgICAgICAgPHdoZW4gdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9IjQzMjE5LTUiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgIDx0aGVuIHZhbHVlVHlwZT0idDpTdHJpbmciIHZhbHVlPSJUcmFtYWRvbCIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgPC9jYXNlSXRlbT4KICAgICAgICAgICAgPGVsc2UgeHNpOnR5cGU9IkNvbmNhdGVuYXRlIj4KICAgICAgICAgICAgICAgPG9wZXJhbmQgdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9IlVua25vd24gY29kZTogIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICA8b3BlcmFuZCBuYW1lPSJ2YWx1ZSIgeHNpOnR5cGU9Ik9wZXJhbmRSZWYiLz4KICAgICAgICAgICAgPC9lbHNlPgogICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgICAgIDxvcGVyYW5kIG5hbWU9InZhbHVlIj4KICAgICAgICAgICAgPG9wZXJhbmRUeXBlU3BlY2lmaWVyIG5hbWU9InQ6U3RyaW5nIiB4c2k6dHlwZT0iTmFtZWRUeXBlU3BlY2lmaWVyIi8+CiAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgPC9kZWY+CiAgICAgIDxkZWYgbmFtZT0iTWlzc2luZyBPcGlvaWRzIiBjb250ZXh0PSJQYXRpZW50IiBhY2Nlc3NMZXZlbD0iUHVibGljIj4KICAgICAgICAgPGV4cHJlc3Npb24geHNpOnR5cGU9IklmIj4KICAgICAgICAgICAgPGNvbmRpdGlvbiBhc1R5cGU9InQ6Qm9vbGVhbiIgeHNpOnR5cGU9IkFzIj4KICAgICAgICAgICAgICAgPG9wZXJhbmQgeHNpOnR5cGU9Ik5vdCI+CiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHhzaTp0eXBlPSJJc051bGwiPgogICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBuYW1lPSJQb3NpdGl2ZSBPcGlvaWQgRHJ1ZyBTY3JlZW5pbmciIHhzaTp0eXBlPSJFeHByZXNzaW9uUmVmIi8+CiAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICA8L2NvbmRpdGlvbj4KICAgICAgICAgICAgPHRoZW4geHNpOnR5cGU9IkV4Y2VwdCI+CiAgICAgICAgICAgICAgIDxvcGVyYW5kIHhzaTp0eXBlPSJRdWVyeSI+CiAgICAgICAgICAgICAgICAgIDxzb3VyY2UgYWxpYXM9IlByZXNjcmlwdGlvbnMiPgogICAgICAgICAgICAgICAgICAgICA8ZXhwcmVzc2lvbiBuYW1lPSJQcmVzY3JpYmVkIE9waW9pZHMiIHhzaTp0eXBlPSJFeHByZXNzaW9uUmVmIi8+CiAgICAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgIDxvcGVyYW5kIHhzaTp0eXBlPSJUb0xpc3QiPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCB4c2k6dHlwZT0iTG93ZXIiPgogICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBuYW1lPSJHZXRPcGlvaWQiIHhzaTp0eXBlPSJGdW5jdGlvblJlZiI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHBhdGg9InZhbHVlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIHBhdGg9ImNvZGUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgeHNpOnR5cGU9IkluZGV4ZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBwYXRoPSJjb2RpbmciIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgcGF0aD0iY29kZSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBuYW1lPSJQb3NpdGl2ZSBPcGlvaWQgRHJ1ZyBTY3JlZW5pbmciIHhzaTp0eXBlPSJFeHByZXNzaW9uUmVmIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHZhbHVlVHlwZT0idDpJbnRlZ2VyIiB2YWx1ZT0iMCIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgIDwvdGhlbj4KICAgICAgICAgICAgPGVsc2UgeHNpOnR5cGU9IkFzIj4KICAgICAgICAgICAgICAgPG9wZXJhbmQgeHNpOnR5cGU9Ik51bGwiLz4KICAgICAgICAgICAgICAgPGFzVHlwZVNwZWNpZmllciB4c2k6dHlwZT0iTGlzdFR5cGVTcGVjaWZpZXIiPgogICAgICAgICAgICAgICAgICA8ZWxlbWVudFR5cGUgbmFtZT0idDpTdHJpbmciIHhzaTp0eXBlPSJOYW1lZFR5cGVTcGVjaWZpZXIiLz4KICAgICAgICAgICAgICAgPC9hc1R5cGVTcGVjaWZpZXI+CiAgICAgICAgICAgIDwvZWxzZT4KICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICA8L2RlZj4KICAgICAgPGRlZiBuYW1lPSJIYXMgTWlzc2luZyBPcGlvaWRzPyIgY29udGV4dD0iUGF0aWVudCIgYWNjZXNzTGV2ZWw9IlB1YmxpYyI+CiAgICAgICAgIDxleHByZXNzaW9uIHhzaTp0eXBlPSJFeGlzdHMiPgogICAgICAgICAgICA8b3BlcmFuZCBuYW1lPSJNaXNzaW5nIE9waW9pZHMiIHhzaTp0eXBlPSJFeHByZXNzaW9uUmVmIi8+CiAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgPC9kZWY+CiAgICAgIDxkZWYgbmFtZT0iR2V0IE9waW9pZHMgRnJvbSBNb3N0IFJlY2VudCBTY3JlZW5pbmciIGNvbnRleHQ9IlBhdGllbnQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiPgogICAgICAgICA8ZXhwcmVzc2lvbiB4c2k6dHlwZT0iUXVlcnkiPgogICAgICAgICAgICA8c291cmNlIGFsaWFzPSJtb3N0UmVjZW50U2NyZWVuaW5nIj4KICAgICAgICAgICAgICAgPGV4cHJlc3Npb24gbmFtZT0iUG9zaXRpdmUgT3Bpb2lkIERydWcgU2NyZWVuaW5nIiB4c2k6dHlwZT0iRXhwcmVzc2lvblJlZiIvPgogICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgPHJldHVybj4KICAgICAgICAgICAgICAgPGV4cHJlc3Npb24geHNpOnR5cGU9IlVuaW9uIj4KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgeHNpOnR5cGU9IlRvTGlzdCI+CiAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHhzaTp0eXBlPSJMb3dlciI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIG5hbWU9IkdldE9waW9pZCIgeHNpOnR5cGU9IkZ1bmN0aW9uUmVmIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgcGF0aD0idmFsdWUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgcGF0aD0iY29kZSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSB4c2k6dHlwZT0iSW5kZXhlciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHBhdGg9ImNvZGluZyIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBwYXRoPSJjb2RlIiBzY29wZT0ibW9zdFJlY2VudFNjcmVlbmluZyIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgdmFsdWVUeXBlPSJ0OkludGVnZXIiIHZhbHVlPSIwIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgeHNpOnR5cGU9IlRvTGlzdCI+CiAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHhzaTp0eXBlPSJJZiI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxjb25kaXRpb24gYXNUeXBlPSJ0OkJvb2xlYW4iIHhzaTp0eXBlPSJBcyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHhzaTp0eXBlPSJOb3QiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCB4c2k6dHlwZT0iSXNOdWxsIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgeHNpOnR5cGU9IkluZGV4ZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBwYXRoPSJjb21wb25lbnQiIHNjb3BlPSJtb3N0UmVjZW50U2NyZWVuaW5nIiB4c2k6dHlwZT0iUHJvcGVydHkiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgdmFsdWVUeXBlPSJ0OkludGVnZXIiIHZhbHVlPSIwIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICA8L2NvbmRpdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgPHRoZW4geHNpOnR5cGU9Ikxvd2VyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbmFtZT0iR2V0T3Bpb2lkIiB4c2k6dHlwZT0iRnVuY3Rpb25SZWYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBwYXRoPSJ2YWx1ZSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBwYXRoPSJjb2RlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIHhzaTp0eXBlPSJJbmRleGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgcGF0aD0iY29kaW5nIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIHBhdGg9ImNvZGUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgeHNpOnR5cGU9IkluZGV4ZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBwYXRoPSJjb21wb25lbnQiIHNjb3BlPSJtb3N0UmVjZW50U2NyZWVuaW5nIiB4c2k6dHlwZT0iUHJvcGVydHkiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgdmFsdWVUeXBlPSJ0OkludGVnZXIiIHZhbHVlPSIwIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgdmFsdWVUeXBlPSJ0OkludGVnZXIiIHZhbHVlPSIwIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RoZW4+CiAgICAgICAgICAgICAgICAgICAgICAgIDxlbHNlIGFzVHlwZT0idDpTdHJpbmciIHhzaTp0eXBlPSJBcyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHhzaTp0eXBlPSJTaW5nbGV0b25Gcm9tIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgeHNpOnR5cGU9Ikxpc3QiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Vsc2U+CiAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgICAgICAgIDwvcmV0dXJuPgogICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIG5hbWU9IlVucHJlc2NyaWJlZCBPcGlvaWRzIiBjb250ZXh0PSJQYXRpZW50IiBhY2Nlc3NMZXZlbD0iUHVibGljIj4KICAgICAgICAgPGV4cHJlc3Npb24geHNpOnR5cGU9IlF1ZXJ5Ij4KICAgICAgICAgICAgPHNvdXJjZSBhbGlhcz0ibW9zdFJlY2VudFNjcmVlbmluZ09waW9pZHMiPgogICAgICAgICAgICAgICA8ZXhwcmVzc2lvbiBuYW1lPSJHZXQgT3Bpb2lkcyBGcm9tIE1vc3QgUmVjZW50IFNjcmVlbmluZyIgeHNpOnR5cGU9IkV4cHJlc3Npb25SZWYiLz4KICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgIDxyZWxhdGlvbnNoaXAgYWxpYXM9ImluZ3JlZGllbnRzIiB4c2k6dHlwZT0iV2l0aCI+CiAgICAgICAgICAgICAgIDxleHByZXNzaW9uIG5hbWU9IlByZXNjcmliZWQgT3Bpb2lkcyIgeHNpOnR5cGU9IkV4cHJlc3Npb25SZWYiLz4KICAgICAgICAgICAgICAgPHN1Y2hUaGF0IHhzaTp0eXBlPSJOb3QiPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCB4c2k6dHlwZT0iSW4iPgogICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBuYW1lPSJtb3N0UmVjZW50U2NyZWVuaW5nT3Bpb2lkcyIgeHNpOnR5cGU9IkFsaWFzUmVmIi8+CiAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHhzaTp0eXBlPSJUb0xpc3QiPgogICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBuYW1lPSJpbmdyZWRpZW50cyIgeHNpOnR5cGU9IkFsaWFzUmVmIi8+CiAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICA8L3N1Y2hUaGF0PgogICAgICAgICAgICA8L3JlbGF0aW9uc2hpcD4KICAgICAgICAgICAgPHJldHVybj4KICAgICAgICAgICAgICAgPGV4cHJlc3Npb24gbmFtZT0ibW9zdFJlY2VudFNjcmVlbmluZ09waW9pZHMiIHhzaTp0eXBlPSJBbGlhc1JlZiIvPgogICAgICAgICAgICA8L3JldHVybj4KICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICA8L2RlZj4KICAgICAgPGRlZiBuYW1lPSJIYXMgVW5wcmVzY3JpYmVkIE9waW9pZHM/IiBjb250ZXh0PSJQYXRpZW50IiBhY2Nlc3NMZXZlbD0iUHVibGljIj4KICAgICAgICAgPGV4cHJlc3Npb24geHNpOnR5cGU9IkV4aXN0cyI+CiAgICAgICAgICAgIDxvcGVyYW5kIG5hbWU9IlVucHJlc2NyaWJlZCBPcGlvaWRzIiB4c2k6dHlwZT0iRXhwcmVzc2lvblJlZiIvPgogICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIG5hbWU9IlBvc2l0aXZlIElsbGljaXQgRHJ1ZyBTY3JlZW5pbmciIGNvbnRleHQ9IlBhdGllbnQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiPgogICAgICAgICA8ZXhwcmVzc2lvbiB4c2k6dHlwZT0iUXVlcnkiPgogICAgICAgICAgICA8c291cmNlIGFsaWFzPSJtb3N0UmVjZW50U2NyZWVuaW5nIj4KICAgICAgICAgICAgICAgPGV4cHJlc3Npb24gbmFtZT0iTW9zdCBSZWNlbnQgSWxsaWNpdCBEcnVnIFVyaW5lIFNjcmVlbmluZ3MgaW4gTGFzdCAxMiBNb250aHMiIHhzaTp0eXBlPSJFeHByZXNzaW9uUmVmIi8+CiAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICA8d2hlcmUgeHNpOnR5cGU9Ik9yIj4KICAgICAgICAgICAgICAgPG9wZXJhbmQgeHNpOnR5cGU9IkVxdWFsIj4KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgcGF0aD0idmFsdWUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgcGF0aD0iY29kZSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSB4c2k6dHlwZT0iSW5kZXhlciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHBhdGg9ImNvZGluZyIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBwYXRoPSJpbnRlcnByZXRhdGlvbiIgc2NvcGU9Im1vc3RSZWNlbnRTY3JlZW5pbmciIHhzaTp0eXBlPSJQcm9wZXJ0eSIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHZhbHVlVHlwZT0idDpJbnRlZ2VyIiB2YWx1ZT0iMCIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHZhbHVlVHlwZT0idDpTdHJpbmciIHZhbHVlPSJQT1MiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgPG9wZXJhbmQgeHNpOnR5cGU9IklmIj4KICAgICAgICAgICAgICAgICAgPGNvbmRpdGlvbiBhc1R5cGU9InQ6Qm9vbGVhbiIgeHNpOnR5cGU9IkFzIj4KICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgeHNpOnR5cGU9Ik5vdCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHhzaTp0eXBlPSJJc051bGwiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCB4c2k6dHlwZT0iSW5kZXhlciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHBhdGg9ImNvbXBvbmVudCIgc2NvcGU9Im1vc3RSZWNlbnRTY3JlZW5pbmciIHhzaTp0eXBlPSJQcm9wZXJ0eSIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCB2YWx1ZVR5cGU9InQ6SW50ZWdlciIgdmFsdWU9IjAiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgIDwvY29uZGl0aW9uPgogICAgICAgICAgICAgICAgICA8dGhlbiB4c2k6dHlwZT0iRXF1YWwiPgogICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBwYXRoPSJ2YWx1ZSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBwYXRoPSJjb2RlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIHhzaTp0eXBlPSJJbmRleGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgcGF0aD0iY29kaW5nIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIHBhdGg9ImludGVycHJldGF0aW9uIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIHhzaTp0eXBlPSJJbmRleGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgcGF0aD0iY29tcG9uZW50IiBzY29wZT0ibW9zdFJlY2VudFNjcmVlbmluZyIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHZhbHVlVHlwZT0idDpJbnRlZ2VyIiB2YWx1ZT0iMCIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHZhbHVlVHlwZT0idDpJbnRlZ2VyIiB2YWx1ZT0iMCIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHZhbHVlVHlwZT0idDpTdHJpbmciIHZhbHVlPSJQT1MiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgICAgIDwvdGhlbj4KICAgICAgICAgICAgICAgICAgPGVsc2UgdmFsdWVUeXBlPSJ0OkJvb2xlYW4iIHZhbHVlPSJmYWxzZSIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICA8L3doZXJlPgogICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIG5hbWU9IkhhcyBJbGxpY2l0IERydWdzIGluIFNjcmVlbmluZz8iIGNvbnRleHQ9IlBhdGllbnQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiPgogICAgICAgICA8ZXhwcmVzc2lvbiB4c2k6dHlwZT0iRXhpc3RzIj4KICAgICAgICAgICAgPG9wZXJhbmQgeHNpOnR5cGU9IlRvTGlzdCI+CiAgICAgICAgICAgICAgIDxvcGVyYW5kIG5hbWU9IlBvc2l0aXZlIElsbGljaXQgRHJ1ZyBTY3JlZW5pbmciIHhzaTp0eXBlPSJFeHByZXNzaW9uUmVmIi8+CiAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICA8L2RlZj4KICAgICAgPGRlZiBuYW1lPSJJbmNsdXNpb24gQ3JpdGVyaWEiIGNvbnRleHQ9IlBhdGllbnQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiPgogICAgICAgICA8ZXhwcmVzc2lvbiB4c2k6dHlwZT0iQW5kIj4KICAgICAgICAgICAgPG9wZXJhbmQgeHNpOnR5cGU9IkFuZCI+CiAgICAgICAgICAgICAgIDxvcGVyYW5kIHhzaTp0eXBlPSJBbmQiPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCBuYW1lPSJWYWxpZGF0ZSBUcmlnZ2VyIEV2ZW50IiB4c2k6dHlwZT0iRXhwcmVzc2lvblJlZiIvPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCB4c2k6dHlwZT0iTm90Ij4KICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbmFtZT0iRXhjbHVzaW9uIENyaXRlcmlhIiB4c2k6dHlwZT0iRXhwcmVzc2lvblJlZiIvPgogICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgPG9wZXJhbmQgeHNpOnR5cGU9IkFueVRydWUiPgogICAgICAgICAgICAgICAgICA8c291cmNlIG5hbWU9IlByb2JhYmxlRGF5c0luUmFuZ2UiIGxpYnJhcnlOYW1lPSJDb21tb24iIHhzaTp0eXBlPSJGdW5jdGlvblJlZiI+CiAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIG5hbWU9IkdldCBBY3RpdmUgQW1idWxhdG9yeSBPcGlvaWQgUngiIHhzaTp0eXBlPSJFeHByZXNzaW9uUmVmIi8+CiAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHZhbHVlVHlwZT0idDpJbnRlZ2VyIiB2YWx1ZT0iOTAiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHZhbHVlVHlwZT0idDpJbnRlZ2VyIiB2YWx1ZT0iODAiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgPG9wZXJhbmQgeHNpOnR5cGU9Ik9yIj4KICAgICAgICAgICAgICAgPG9wZXJhbmQgeHNpOnR5cGU9Ik9yIj4KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgeHNpOnR5cGU9Ik9yIj4KICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbmFtZT0iTm8gVXJpbmUgU2NyZWVuaW5nIEluIExhc3QgMTIgTW9udGhzIiB4c2k6dHlwZT0iRXhwcmVzc2lvblJlZiIvPgogICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBuYW1lPSJIYXMgTWlzc2luZyBPcGlvaWRzPyIgeHNpOnR5cGU9IkV4cHJlc3Npb25SZWYiLz4KICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCBuYW1lPSJIYXMgVW5wcmVzY3JpYmVkIE9waW9pZHM/IiB4c2k6dHlwZT0iRXhwcmVzc2lvblJlZiIvPgogICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgIDxvcGVyYW5kIG5hbWU9IkhhcyBJbGxpY2l0IERydWdzIGluIFNjcmVlbmluZz8iIHhzaTp0eXBlPSJFeHByZXNzaW9uUmVmIi8+CiAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICA8L2RlZj4KICAgICAgPGRlZiBuYW1lPSJHZXRJbGxpY2l0RHJ1ZyIgY29udGV4dD0iUGF0aWVudCIgYWNjZXNzTGV2ZWw9IlB1YmxpYyIgeHNpOnR5cGU9IkZ1bmN0aW9uRGVmIj4KICAgICAgICAgPGV4cHJlc3Npb24geHNpOnR5cGU9IkNhc2UiPgogICAgICAgICAgICA8Y29tcGFyYW5kIG5hbWU9InZhbHVlIiB4c2k6dHlwZT0iT3BlcmFuZFJlZiIvPgogICAgICAgICAgICA8Y2FzZUl0ZW0+CiAgICAgICAgICAgICAgIDx3aGVuIHZhbHVlVHlwZT0idDpTdHJpbmciIHZhbHVlPSIzMzk3LTciIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgIDx0aGVuIHZhbHVlVHlwZT0idDpTdHJpbmciIHZhbHVlPSJDb2NhaW5lIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICA8L2Nhc2VJdGVtPgogICAgICAgICAgICA8Y2FzZUl0ZW0+CiAgICAgICAgICAgICAgIDx3aGVuIHZhbHVlVHlwZT0idDpTdHJpbmciIHZhbHVlPSIxNDI2Ny05IiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICA8dGhlbiB2YWx1ZVR5cGU9InQ6U3RyaW5nIiB2YWx1ZT0iTWV0aHlsZW5lZGlveHltZXRoYW1waGV0YW1pbmUgKE1ETUEpIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICA8L2Nhc2VJdGVtPgogICAgICAgICAgICA8Y2FzZUl0ZW0+CiAgICAgICAgICAgICAgIDx3aGVuIHZhbHVlVHlwZT0idDpTdHJpbmciIHZhbHVlPSIyOTg2OC03IiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICA8dGhlbiB2YWx1ZVR5cGU9InQ6U3RyaW5nIiB2YWx1ZT0iR2FtbWEgSHlkcm94eWJ1dHlyaWMgQWNpZCAoR0hCKSIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgPC9jYXNlSXRlbT4KICAgICAgICAgICAgPGNhc2VJdGVtPgogICAgICAgICAgICAgICA8d2hlbiB2YWx1ZVR5cGU9InQ6U3RyaW5nIiB2YWx1ZT0iMTIzMjctMyIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgPHRoZW4gdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9IktldGFtaW5lIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICA8L2Nhc2VJdGVtPgogICAgICAgICAgICA8Y2FzZUl0ZW0+CiAgICAgICAgICAgICAgIDx3aGVuIHZhbHVlVHlwZT0idDpTdHJpbmciIHZhbHVlPSIzNzMyLTUiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgIDx0aGVuIHZhbHVlVHlwZT0idDpTdHJpbmciIHZhbHVlPSJMeXNlcmdpYyBBY2lkIERpZXRoeWxhbWlkZSAoTFNEKSIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgPC9jYXNlSXRlbT4KICAgICAgICAgICAgPGNhc2VJdGVtPgogICAgICAgICAgICAgICA8d2hlbiB2YWx1ZVR5cGU9InQ6U3RyaW5nIiB2YWx1ZT0iMzc3OS02IiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICA8dGhlbiB2YWx1ZVR5cGU9InQ6U3RyaW5nIiB2YWx1ZT0iTWV0aGFtcGhldGFtaW5lIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICA8L2Nhc2VJdGVtPgogICAgICAgICAgICA8Y2FzZUl0ZW0+CiAgICAgICAgICAgICAgIDx3aGVuIHZhbHVlVHlwZT0idDpTdHJpbmciIHZhbHVlPSIxNzUwNC0yIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICA8dGhlbiB2YWx1ZVR5cGU9InQ6U3RyaW5nIiB2YWx1ZT0iUHNpbG9jeWJpbiIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgPC9jYXNlSXRlbT4KICAgICAgICAgICAgPGNhc2VJdGVtPgogICAgICAgICAgICAgICA8d2hlbiB2YWx1ZVR5cGU9InQ6U3RyaW5nIiB2YWx1ZT0iNDEwMjAtOSIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgPHRoZW4gdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9IkZsdW5pdHJhemVwYW0gKFJvaHlwbm9sKSIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgPC9jYXNlSXRlbT4KICAgICAgICAgICAgPGNhc2VJdGVtPgogICAgICAgICAgICAgICA8d2hlbiB2YWx1ZVR5cGU9InQ6U3RyaW5nIiB2YWx1ZT0iMzQyNi00IiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICA8dGhlbiB2YWx1ZVR5cGU9InQ6U3RyaW5nIiB2YWx1ZT0iVGV0cmFoeWRyb2Nhbm5hYmlub2wgKFRIQykiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgIDwvY2FzZUl0ZW0+CiAgICAgICAgICAgIDxlbHNlIHhzaTp0eXBlPSJDb25jYXRlbmF0ZSI+CiAgICAgICAgICAgICAgIDxvcGVyYW5kIHZhbHVlVHlwZT0idDpTdHJpbmciIHZhbHVlPSJVbmtub3duIGNvZGU6ICIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgPG9wZXJhbmQgbmFtZT0idmFsdWUiIHhzaTp0eXBlPSJPcGVyYW5kUmVmIi8+CiAgICAgICAgICAgIDwvZWxzZT4KICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICAgICA8b3BlcmFuZCBuYW1lPSJ2YWx1ZSI+CiAgICAgICAgICAgIDxvcGVyYW5kVHlwZVNwZWNpZmllciBuYW1lPSJ0OlN0cmluZyIgeHNpOnR5cGU9Ik5hbWVkVHlwZVNwZWNpZmllciIvPgogICAgICAgICA8L29wZXJhbmQ+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIG5hbWU9IkluY29uc2lzdGVudCBJbGxpY2l0IERydWdzIiBjb250ZXh0PSJQYXRpZW50IiBhY2Nlc3NMZXZlbD0iUHVibGljIj4KICAgICAgICAgPGV4cHJlc3Npb24geHNpOnR5cGU9IkNvbmNhdGVuYXRlIj4KICAgICAgICAgICAgPG9wZXJhbmQgdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9IkZvdW5kIHRoZSBmb2xsb3dpbmcgaWxsaWNpdCBkcnVnKHMpIGluIHVyaW5lIGRydWcgc2NyZWVuOiAiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgIDxvcGVyYW5kIHhzaTp0eXBlPSJJZiI+CiAgICAgICAgICAgICAgIDxjb25kaXRpb24gYXNUeXBlPSJ0OkJvb2xlYW4iIHhzaTp0eXBlPSJBcyI+CiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHhzaTp0eXBlPSJJc051bGwiPgogICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBuYW1lPSJHZXRJbGxpY2l0RHJ1ZyIgeHNpOnR5cGU9IkZ1bmN0aW9uUmVmIj4KICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgcGF0aD0idmFsdWUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgcGF0aD0iY29kZSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSB4c2k6dHlwZT0iSW5kZXhlciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHBhdGg9ImNvZGluZyIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBwYXRoPSJjb2RlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIG5hbWU9IlBvc2l0aXZlIElsbGljaXQgRHJ1ZyBTY3JlZW5pbmciIHhzaTp0eXBlPSJFeHByZXNzaW9uUmVmIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHZhbHVlVHlwZT0idDpJbnRlZ2VyIiB2YWx1ZT0iMCIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICA8L2NvbmRpdGlvbj4KICAgICAgICAgICAgICAgPHRoZW4gbmFtZT0iR2V0SWxsaWNpdERydWciIHhzaTp0eXBlPSJGdW5jdGlvblJlZiI+CiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHBhdGg9InZhbHVlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICA8c291cmNlIHBhdGg9ImNvZGUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgeHNpOnR5cGU9IkluZGV4ZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBwYXRoPSJjb2RpbmciIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgcGF0aD0iaW50ZXJwcmV0YXRpb24iIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbmFtZT0iUG9zaXRpdmUgSWxsaWNpdCBEcnVnIFNjcmVlbmluZyIgeHNpOnR5cGU9IkV4cHJlc3Npb25SZWYiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgdmFsdWVUeXBlPSJ0OkludGVnZXIiIHZhbHVlPSIwIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgPC90aGVuPgogICAgICAgICAgICAgICA8ZWxzZSBuYW1lPSJHZXRJbGxpY2l0RHJ1ZyIgeHNpOnR5cGU9IkZ1bmN0aW9uUmVmIj4KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgcGF0aD0idmFsdWUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgcGF0aD0iY29kZSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSB4c2k6dHlwZT0iSW5kZXhlciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHBhdGg9ImNvZGluZyIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBwYXRoPSJjb2RlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIG5hbWU9IlBvc2l0aXZlIElsbGljaXQgRHJ1ZyBTY3JlZW5pbmciIHhzaTp0eXBlPSJFeHByZXNzaW9uUmVmIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHZhbHVlVHlwZT0idDpJbnRlZ2VyIiB2YWx1ZT0iMCIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgIDwvZWxzZT4KICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIG5hbWU9IkhhcyBPcGlvaWRzIGluIFNjcmVlbmluZz8iIGNvbnRleHQ9IlBhdGllbnQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiPgogICAgICAgICA8ZXhwcmVzc2lvbiB4c2k6dHlwZT0iRXhpc3RzIj4KICAgICAgICAgICAgPG9wZXJhbmQgeHNpOnR5cGU9IlRvTGlzdCI+CiAgICAgICAgICAgICAgIDxvcGVyYW5kIG5hbWU9IlBvc2l0aXZlIE9waW9pZCBEcnVnIFNjcmVlbmluZyIgeHNpOnR5cGU9IkV4cHJlc3Npb25SZWYiLz4KICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIG5hbWU9IkluY29uc2lzdGVudCBVbnByZXNjcmliZWQgT3Bpb2lkcyIgY29udGV4dD0iUGF0aWVudCIgYWNjZXNzTGV2ZWw9IlB1YmxpYyI+CiAgICAgICAgIDxleHByZXNzaW9uIHhzaTp0eXBlPSJDb25jYXRlbmF0ZSI+CiAgICAgICAgICAgIDxvcGVyYW5kIHZhbHVlVHlwZT0idDpTdHJpbmciIHZhbHVlPSJGb3VuZCB0aGUgZm9sbG93aW5nIHVucHJlc2NyaWJlZCBvcGlvaWQocyk6ICIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgPG9wZXJhbmQgeHNpOnR5cGU9IlNpbmdsZXRvbkZyb20iPgogICAgICAgICAgICAgICA8b3BlcmFuZCBuYW1lPSJVbnByZXNjcmliZWQgT3Bpb2lkcyIgeHNpOnR5cGU9IkV4cHJlc3Npb25SZWYiLz4KICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIG5hbWU9IkluY29uc2lzdGVudCBNaXNzaW5nIE9waW9pZHMiIGNvbnRleHQ9IlBhdGllbnQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiPgogICAgICAgICA8ZXhwcmVzc2lvbiB4c2k6dHlwZT0iQ29uY2F0ZW5hdGUiPgogICAgICAgICAgICA8b3BlcmFuZCB2YWx1ZVR5cGU9InQ6U3RyaW5nIiB2YWx1ZT0iVGhlIGZvbGxvd2luZyBvcGlvaWRzIGFyZSBtaXNzaW5nIGZyb20gdGhlIHNjcmVlbmluZzogIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICA8b3BlcmFuZCB4c2k6dHlwZT0iU2luZ2xldG9uRnJvbSI+CiAgICAgICAgICAgICAgIDxvcGVyYW5kIG5hbWU9Ik1pc3NpbmcgT3Bpb2lkcyIgeHNpOnR5cGU9IkV4cHJlc3Npb25SZWYiLz4KICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIG5hbWU9IkdldCBJbmRpY2F0b3IiIGNvbnRleHQ9IlBhdGllbnQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiPgogICAgICAgICA8ZXhwcmVzc2lvbiB2YWx1ZVR5cGU9InQ6U3RyaW5nIiB2YWx1ZT0id2FybmluZyIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgPC9kZWY+CiAgIDwvc3RhdGVtZW50cz4KPC9saWJyYXJ5Pgo="
    }
  ]
}

Library "opioidcds-recommendation-08" Version "1"

Tags: (no tags)  +

This Resource , XML or JSON representation, or the full version history.. provenance for this resource
Updated: by

Participants

Author Kensaku Kawamoto, MD, PhD, MHS
Author Bryn Rhodes
Author Floyd Eisenberg, MD, MPH
Author Robert McClure, MD, MPH

Related Artifacts

Documentation CDC guideline for prescribing opioids for chronic pain https://guidelines.gov/summaries/summary/50153/cdc-guideline-for-prescribing-opioids-for-chronic-pain---united-states-2016#420
Depends On http://example.org/fhir/Library/opioidcds-common
Documentation MME Conversion Tables https://www.cdc.gov/drugoverdose/pdf/calculating_total_daily_dose-a.pdf

Data Requirements

Type: MedicationRequest
Filter Value
medicationCodeableConcept In ValueSet http://example.org/fhir/ValueSet/naloxone
Type: MedicationRequest
Filter Value
medicationCodeableConcept In ValueSet http://example.org/fhir/ValueSet/opioids-abused-in-ambulatory-care
Type: MedicationRequest
Filter Value
medicationCodeableConcept In ValueSet http://example.org/fhir/ValueSet/benzodiazepines
Type: Condition
Filter Value
code In ValueSet http://example.org/fhir/ValueSet/substance-abuse

Contents

application/elm+xml

        <?xml version="1.0" encoding="UTF-8"?>
<library xmlns="urn:hl7-org:elm:r1" xmlns:t="urn:hl7-org:elm-types:r1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:fhir="http://hl7.org/fhir" xmlns:qdm43="urn:healthit-gov:qdm:v4_3" xmlns:qdm53="urn:healthit-gov:qdm:v5_3" xmlns:a="urn:hl7-org:cql-annotations:r1">
   <annotation startLine="63" startChar="11" endLine="63" endChar="48" message="Could not resolve code path medicationCodeableConcept for the type of the retrieve FHIR.MedicationRequest." errorType="semantic" errorSeverity="warning" xsi:type="a:CqlToElmError"/>
   <annotation startLine="63" startChar="11" endLine="63" endChar="48" message="Could not resolve membership operator for terminology target of the retrieve." errorType="semantic" errorSeverity="warning" xsi:type="a:CqlToElmError"/>
   <annotation startLine="81" startChar="5" endLine="81" endChar="68" message="Could not resolve code path medicationCodeableConcept for the type of the retrieve FHIR.MedicationRequest." errorType="semantic" errorSeverity="warning" xsi:type="a:CqlToElmError"/>
   <annotation startLine="81" startChar="5" endLine="81" endChar="68" message="Could not resolve membership operator for terminology target of the retrieve." errorType="semantic" errorSeverity="warning" xsi:type="a:CqlToElmError"/>
   <annotation startLine="74" startChar="11" endLine="74" endChar="55" message="Could not resolve code path medicationCodeableConcept for the type of the retrieve FHIR.MedicationRequest." errorType="semantic" errorSeverity="warning" xsi:type="a:CqlToElmError"/>
   <annotation startLine="74" startChar="11" endLine="74" endChar="55" message="Could not resolve membership operator for terminology target of the retrieve." errorType="semantic" errorSeverity="warning" xsi:type="a:CqlToElmError"/>
   <annotation startLine="77" startChar="12" endLine="77" endChar="41" message="Could not resolve membership operator for terminology target of the retrieve." errorType="semantic" errorSeverity="warning" xsi:type="a:CqlToElmError"/>
   <identifier id="OpioidCDS_STU4_REC_08" version="0.1.0"/>
   <schemaIdentifier id="urn:hl7-org:elm" version="r1"/>
   <usings>
      <def localIdentifier="System" uri="urn:hl7-org:elm-types:r1"/>
      <def localIdentifier="FHIR" uri="http://hl7.org/fhir" version="3.2.0"/>
   </usings>
   <includes>
      <def localIdentifier="Common" path="OpioidCDS_STU4_Common" version="0.1.0"/>
   </includes>
   <parameters>
      <def name="ContextPrescriptions" accessLevel="Public">
         <parameterTypeSpecifier xsi:type="ListTypeSpecifier">
            <elementType name="fhir:MedicationRequest" xsi:type="NamedTypeSpecifier"/>
         </parameterTypeSpecifier>
      </def>
   </parameters>
   <valueSets>
      <def name="Substance Abuse" id="TODO" accessLevel="Public"/>
   </valueSets>
   <statements>
      <def name="Patient" context="Patient">
         <expression xsi:type="SingletonFrom">
            <operand dataType="fhir:Patient" xsi:type="Retrieve"/>
         </expression>
      </def>
      <def name="Validate Trigger Event" context="Patient" accessLevel="Public">
         <expression xsi:type="Exists">
            <operand xsi:type="Query">
               <source alias="triggerScript">
                  <expression name="ContextPrescriptions" xsi:type="ParameterRef"/>
               </source>
               <where name="IsOpioidWithAmbulatoryAbusePotential" libraryName="Common" xsi:type="FunctionRef">
                  <operand name="ToCode" libraryName="Common" xsi:type="FunctionRef">
                     <operand xsi:type="Indexer">
                        <operand path="coding" xsi:type="Property">
                           <source path="medication" scope="triggerScript" xsi:type="Property"/>
                        </operand>
                        <operand valueType="t:Integer" value="0" xsi:type="Literal"/>
                     </operand>
                  </operand>
               </where>
            </operand>
         </expression>
      </def>
      <def name="Exclusion Criteria" context="Patient" accessLevel="Public">
         <expression xsi:type="Exists">
            <operand dataType="fhir:MedicationRequest" codeProperty="medicationCodeableConcept" xsi:type="Retrieve">
               <codes name="Naloxone" libraryName="Common" xsi:type="ValueSetRef"/>
            </operand>
         </expression>
      </def>
      <def name="Get Active Ambulatory Opioid Rx" context="Patient" accessLevel="Public">
         <expression xsi:type="Union">
            <operand xsi:type="Query">
               <source alias="Rx">
                  <expression dataType="fhir:MedicationRequest" codeProperty="medicationCodeableConcept" xsi:type="Retrieve">
                     <codes name="Ambulatory Abuse Potential Opioids" libraryName="Common" xsi:type="ValueSetRef"/>
                  </expression>
               </source>
               <where xsi:type="And">
                  <operand xsi:type="Equal">
                     <operand path="value" xsi:type="Property">
                        <source path="status" scope="Rx" xsi:type="Property"/>
                     </operand>
                     <operand valueType="t:String" value="active" xsi:type="Literal"/>
                  </operand>
                  <operand xsi:type="Equal">
                     <operand path="value" xsi:type="Property">
                        <source path="code" xsi:type="Property">
                           <source xsi:type="Indexer">
                              <operand xsi:type="Flatten">
                                 <operand xsi:type="Query">
                                    <source alias="$this">
                                       <expression path="category" scope="Rx" xsi:type="Property"/>
                                    </source>
                                    <where xsi:type="Not">
                                       <operand xsi:type="IsNull">
                                          <operand path="coding" xsi:type="Property">
                                             <source name="$this" xsi:type="AliasRef"/>
                                          </operand>
                                       </operand>
                                    </where>
                                    <return>
                                       <expression path="coding" xsi:type="Property">
                                          <source name="$this" xsi:type="AliasRef"/>
                                       </expression>
                                    </return>
                                 </operand>
                              </operand>
                              <operand valueType="t:Integer" value="0" xsi:type="Literal"/>
                           </source>
                        </source>
                     </operand>
                     <operand valueType="t:String" value="outpatient" xsi:type="Literal"/>
                  </operand>
               </where>
            </operand>
            <operand name="ContextPrescriptions" xsi:type="ParameterRef"/>
         </expression>
      </def>
      <def name="Average MME" context="Patient" accessLevel="Public">
         <expression name="TotalMME" libraryName="Common" xsi:type="FunctionRef">
            <operand name="Get Active Ambulatory Opioid Rx" xsi:type="ExpressionRef"/>
         </expression>
      </def>
      <def name="MME >= 50 mg/d?" context="Patient" accessLevel="Public">
         <expression xsi:type="If">
            <condition asType="t:Boolean" xsi:type="As">
               <operand xsi:type="IsNull">
                  <operand name="Average MME" xsi:type="ExpressionRef"/>
               </operand>
            </condition>
            <then valueType="t:Boolean" value="false" xsi:type="Literal"/>
            <else xsi:type="GreaterOrEqual">
               <operand name="Average MME" xsi:type="ExpressionRef"/>
               <operand value="50" unit="mg/d" xsi:type="Quantity"/>
            </else>
         </expression>
      </def>
      <def name="On Benzodiazepine" context="Patient" accessLevel="Public">
         <expression xsi:type="Exists">
            <operand dataType="fhir:MedicationRequest" codeProperty="medicationCodeableConcept" xsi:type="Retrieve">
               <codes name="Benzodiazepines" libraryName="Common" xsi:type="ValueSetRef"/>
            </operand>
         </expression>
      </def>
      <def name="Inclusion Criteria" context="Patient" accessLevel="Public">
         <expression xsi:type="And">
            <operand xsi:type="And">
               <operand name="Validate Trigger Event" xsi:type="ExpressionRef"/>
               <operand xsi:type="Not">
                  <operand name="Exclusion Criteria" xsi:type="ExpressionRef"/>
               </operand>
            </operand>
            <operand xsi:type="Or">
               <operand name="MME >= 50 mg/d?" xsi:type="ExpressionRef"/>
               <operand name="On Benzodiazepine" xsi:type="ExpressionRef"/>
            </operand>
         </expression>
      </def>
      <def name="Has Substance Abuse History" context="Patient" accessLevel="Public">
         <expression xsi:type="Exists">
            <operand dataType="fhir:Condition" codeProperty="code" xsi:type="Retrieve">
               <codes name="Substance Abuse" xsi:type="ValueSetRef"/>
            </operand>
         </expression>
      </def>
      <def name="Get Indicator" context="Patient" accessLevel="Public">
         <expression valueType="t:String" value="warning" xsi:type="Literal"/>
      </def>
      <def name="Get Summary" context="Patient" accessLevel="Public">
         <expression valueType="t:String" value="Incorporate into the management plan strategies to mitigate risk; including considering offering naloxone when factors that increase risk for opioid overdose are present" xsi:type="Literal"/>
      </def>
      <def name="Get Notification" context="Patient" accessLevel="Public">
         <expression xsi:type="Concatenate">
            <operand valueType="t:String" value="Consider offering naloxone given following risk factor(s) for opioid overdose: " xsi:type="Literal"/>
            <operand xsi:type="If">
               <condition asType="t:Boolean" xsi:type="As">
                  <operand name="MME >= 50 mg/d?" xsi:type="ExpressionRef"/>
               </condition>
               <then xsi:type="Concatenate">
                  <operand xsi:type="Concatenate">
                     <operand valueType="t:String" value="Average MME (" xsi:type="Literal"/>
                     <operand xsi:type="ToString">
                        <operand name="Average MME" xsi:type="ExpressionRef"/>
                     </operand>
                  </operand>
                  <operand valueType="t:String" value=") >= 50 mg/day, " xsi:type="Literal"/>
               </then>
               <else xsi:type="Concatenate">
                  <operand valueType="t:String" value="" xsi:type="Literal"/>
                  <operand xsi:type="If">
                     <condition asType="t:Boolean" xsi:type="As">
                        <operand name="On Benzodiazepine" xsi:type="ExpressionRef"/>
                     </condition>
                     <then valueType="t:String" value="concurrent use of benzodiazepine, " xsi:type="Literal"/>
                     <else valueType="t:String" value="" xsi:type="Literal"/>
                  </operand>
               </else>
            </operand>
         </expression>
      </def>
   </statements>
</library>

      

{
  "resourceType" : "Library",
  "id" : "opioidcds-recommendation-08",
  "meta" : {
    "versionId" : "1",
    "lastUpdated" : "2021-05-24T10:50:20.625Z",
    "tag" : [
      {
        "system" : "http://terminology.hl7.org/CodeSystem/v3-ActReason",
        "code" : "HTEST",
        "display" : "test health data"
      }
    ]
  },
  "text" : {
    "status" : "generated",
    "div" : "<div xmlns=\"http://www.w3.org/1999/xhtml\">\n <h2>Participants</h2>\n <table class=\"grid\">\n <tr>\n <td>Author</td>\n <td>Kensaku Kawamoto, MD, PhD, MHS</td>\n </tr>\n <tr>\n <td>Author</td>\n <td>Bryn Rhodes</td>\n </tr>\n <tr>\n <td>Author</td>\n <td>Floyd Eisenberg, MD, MPH</td>\n </tr>\n <tr>\n <td>Author</td>\n <td>Robert McClure, MD, MPH</td>\n </tr>\n </table>\n <h2>Related Artifacts</h2>\n <table class=\"grid\">\n <tr>\n <td>Documentation</td>\n <td>CDC guideline for prescribing opioids for chronic pain</td>\n <td>https://guidelines.gov/summaries/summary/50153/cdc-guideline-for-prescribing-opioids-for-chronic-pain---united-states-2016#420</td>\n </tr>\n <tr>\n <td>Depends On</td>\n <td/>\n <td>\n <code>http://example.org/fhir/Library/opioidcds-common</code>\n </td>\n </tr>\n <tr>\n <td>Documentation</td>\n <td>MME Conversion Tables</td>\n <td>https://www.cdc.gov/drugoverdose/pdf/calculating_total_daily_dose-a.pdf</td>\n </tr>\n </table>\n <h2>Data Requirements</h2>\n <table class=\"grid\">\n <tr>\n <td colspan=\"2\">\n <b>Type</b>: \n <a href=\"medicationrequest.html\">MedicationRequest</a>\n </td>\n </tr>\n <tr style=\"background-color: #efefef\">\n <td>Filter</td>\n <td>Value</td>\n </tr>\n <tr>\n <td>medicationCodeableConcept</td>\n <td>In ValueSet \n <a href=\"http://example.org/fhir/ValueSet/naloxone\">http://example.org/fhir/ValueSet/naloxone</a>\n </td>\n </tr>\n </table>\n <table class=\"grid\">\n <tr>\n <td colspan=\"2\">\n <b>Type</b>: \n <a href=\"medicationrequest.html\">MedicationRequest</a>\n </td>\n </tr>\n <tr style=\"background-color: #efefef\">\n <td>Filter</td>\n <td>Value</td>\n </tr>\n <tr>\n <td>medicationCodeableConcept</td>\n <td>In ValueSet \n <a href=\"http://example.org/fhir/ValueSet/opioids-abused-in-ambulatory-care\">http://example.org/fhir/ValueSet/opioids-abused-in-ambulatory-care</a>\n </td>\n </tr>\n </table>\n <table class=\"grid\">\n <tr>\n <td colspan=\"2\">\n <b>Type</b>: \n <a href=\"medicationrequest.html\">MedicationRequest</a>\n </td>\n </tr>\n <tr style=\"background-color: #efefef\">\n <td>Filter</td>\n <td>Value</td>\n </tr>\n <tr>\n <td>medicationCodeableConcept</td>\n <td>In ValueSet \n <a href=\"http://example.org/fhir/ValueSet/benzodiazepines\">http://example.org/fhir/ValueSet/benzodiazepines</a>\n </td>\n </tr>\n </table>\n <table class=\"grid\">\n <tr>\n <td colspan=\"2\">\n <b>Type</b>: \n <a href=\"condition.html\">Condition</a>\n </td>\n </tr>\n <tr style=\"background-color: #efefef\">\n <td>Filter</td>\n <td>Value</td>\n </tr>\n <tr>\n <td>code</td>\n <td>In ValueSet \n <a href=\"http://example.org/fhir/ValueSet/substance-abuse\">http://example.org/fhir/ValueSet/substance-abuse</a>\n </td>\n </tr>\n </table>\n <h2>Contents</h2>\n <p>\n <code>application/elm+xml</code>\n </p>\n <pre>\n <code class=\"language-xml\">&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&gt;\n&lt;library xmlns=\"urn:hl7-org:elm:r1\" xmlns:t=\"urn:hl7-org:elm-types:r1\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:fhir=\"http://hl7.org/fhir\" xmlns:qdm43=\"urn:healthit-gov:qdm:v4_3\" xmlns:qdm53=\"urn:healthit-gov:qdm:v5_3\" xmlns:a=\"urn:hl7-org:cql-annotations:r1\"&gt;\n &lt;annotation startLine=\"63\" startChar=\"11\" endLine=\"63\" endChar=\"48\" message=\"Could not resolve code path medicationCodeableConcept for the type of the retrieve FHIR.MedicationRequest.\" errorType=\"semantic\" errorSeverity=\"warning\" xsi:type=\"a:CqlToElmError\"/&gt;\n &lt;annotation startLine=\"63\" startChar=\"11\" endLine=\"63\" endChar=\"48\" message=\"Could not resolve membership operator for terminology target of the retrieve.\" errorType=\"semantic\" errorSeverity=\"warning\" xsi:type=\"a:CqlToElmError\"/&gt;\n &lt;annotation startLine=\"81\" startChar=\"5\" endLine=\"81\" endChar=\"68\" message=\"Could not resolve code path medicationCodeableConcept for the type of the retrieve FHIR.MedicationRequest.\" errorType=\"semantic\" errorSeverity=\"warning\" xsi:type=\"a:CqlToElmError\"/&gt;\n &lt;annotation startLine=\"81\" startChar=\"5\" endLine=\"81\" endChar=\"68\" message=\"Could not resolve membership operator for terminology target of the retrieve.\" errorType=\"semantic\" errorSeverity=\"warning\" xsi:type=\"a:CqlToElmError\"/&gt;\n &lt;annotation startLine=\"74\" startChar=\"11\" endLine=\"74\" endChar=\"55\" message=\"Could not resolve code path medicationCodeableConcept for the type of the retrieve FHIR.MedicationRequest.\" errorType=\"semantic\" errorSeverity=\"warning\" xsi:type=\"a:CqlToElmError\"/&gt;\n &lt;annotation startLine=\"74\" startChar=\"11\" endLine=\"74\" endChar=\"55\" message=\"Could not resolve membership operator for terminology target of the retrieve.\" errorType=\"semantic\" errorSeverity=\"warning\" xsi:type=\"a:CqlToElmError\"/&gt;\n &lt;annotation startLine=\"77\" startChar=\"12\" endLine=\"77\" endChar=\"41\" message=\"Could not resolve membership operator for terminology target of the retrieve.\" errorType=\"semantic\" errorSeverity=\"warning\" xsi:type=\"a:CqlToElmError\"/&gt;\n &lt;identifier id=\"OpioidCDS_STU4_REC_08\" version=\"0.1.0\"/&gt;\n &lt;schemaIdentifier id=\"urn:hl7-org:elm\" version=\"r1\"/&gt;\n &lt;usings&gt;\n &lt;def localIdentifier=\"System\" uri=\"urn:hl7-org:elm-types:r1\"/&gt;\n &lt;def localIdentifier=\"FHIR\" uri=\"http://hl7.org/fhir\" version=\"3.2.0\"/&gt;\n &lt;/usings&gt;\n &lt;includes&gt;\n &lt;def localIdentifier=\"Common\" path=\"OpioidCDS_STU4_Common\" version=\"0.1.0\"/&gt;\n &lt;/includes&gt;\n &lt;parameters&gt;\n &lt;def name=\"ContextPrescriptions\" accessLevel=\"Public\"&gt;\n &lt;parameterTypeSpecifier xsi:type=\"ListTypeSpecifier\"&gt;\n &lt;elementType name=\"fhir:MedicationRequest\" xsi:type=\"NamedTypeSpecifier\"/&gt;\n &lt;/parameterTypeSpecifier&gt;\n &lt;/def&gt;\n &lt;/parameters&gt;\n &lt;valueSets&gt;\n &lt;def name=\"Substance Abuse\" id=\"TODO\" accessLevel=\"Public\"/&gt;\n &lt;/valueSets&gt;\n &lt;statements&gt;\n &lt;def name=\"Patient\" context=\"Patient\"&gt;\n &lt;expression xsi:type=\"SingletonFrom\"&gt;\n &lt;operand dataType=\"fhir:Patient\" xsi:type=\"Retrieve\"/&gt;\n &lt;/expression&gt;\n &lt;/def&gt;\n &lt;def name=\"Validate Trigger Event\" context=\"Patient\" accessLevel=\"Public\"&gt;\n &lt;expression xsi:type=\"Exists\"&gt;\n &lt;operand xsi:type=\"Query\"&gt;\n &lt;source alias=\"triggerScript\"&gt;\n &lt;expression name=\"ContextPrescriptions\" xsi:type=\"ParameterRef\"/&gt;\n &lt;/source&gt;\n &lt;where name=\"IsOpioidWithAmbulatoryAbusePotential\" libraryName=\"Common\" xsi:type=\"FunctionRef\"&gt;\n &lt;operand name=\"ToCode\" libraryName=\"Common\" xsi:type=\"FunctionRef\"&gt;\n &lt;operand xsi:type=\"Indexer\"&gt;\n &lt;operand path=\"coding\" xsi:type=\"Property\"&gt;\n &lt;source path=\"medication\" scope=\"triggerScript\" xsi:type=\"Property\"/&gt;\n &lt;/operand&gt;\n &lt;operand valueType=\"t:Integer\" value=\"0\" xsi:type=\"Literal\"/&gt;\n &lt;/operand&gt;\n &lt;/operand&gt;\n &lt;/where&gt;\n &lt;/operand&gt;\n &lt;/expression&gt;\n &lt;/def&gt;\n &lt;def name=\"Exclusion Criteria\" context=\"Patient\" accessLevel=\"Public\"&gt;\n &lt;expression xsi:type=\"Exists\"&gt;\n &lt;operand dataType=\"fhir:MedicationRequest\" codeProperty=\"medicationCodeableConcept\" xsi:type=\"Retrieve\"&gt;\n &lt;codes name=\"Naloxone\" libraryName=\"Common\" xsi:type=\"ValueSetRef\"/&gt;\n &lt;/operand&gt;\n &lt;/expression&gt;\n &lt;/def&gt;\n &lt;def name=\"Get Active Ambulatory Opioid Rx\" context=\"Patient\" accessLevel=\"Public\"&gt;\n &lt;expression xsi:type=\"Union\"&gt;\n &lt;operand xsi:type=\"Query\"&gt;\n &lt;source alias=\"Rx\"&gt;\n &lt;expression dataType=\"fhir:MedicationRequest\" codeProperty=\"medicationCodeableConcept\" xsi:type=\"Retrieve\"&gt;\n &lt;codes name=\"Ambulatory Abuse Potential Opioids\" libraryName=\"Common\" xsi:type=\"ValueSetRef\"/&gt;\n &lt;/expression&gt;\n &lt;/source&gt;\n &lt;where xsi:type=\"And\"&gt;\n &lt;operand xsi:type=\"Equal\"&gt;\n &lt;operand path=\"value\" xsi:type=\"Property\"&gt;\n &lt;source path=\"status\" scope=\"Rx\" xsi:type=\"Property\"/&gt;\n &lt;/operand&gt;\n &lt;operand valueType=\"t:String\" value=\"active\" xsi:type=\"Literal\"/&gt;\n &lt;/operand&gt;\n &lt;operand xsi:type=\"Equal\"&gt;\n &lt;operand path=\"value\" xsi:type=\"Property\"&gt;\n &lt;source path=\"code\" xsi:type=\"Property\"&gt;\n &lt;source xsi:type=\"Indexer\"&gt;\n &lt;operand xsi:type=\"Flatten\"&gt;\n &lt;operand xsi:type=\"Query\"&gt;\n &lt;source alias=\"$this\"&gt;\n &lt;expression path=\"category\" scope=\"Rx\" xsi:type=\"Property\"/&gt;\n &lt;/source&gt;\n &lt;where xsi:type=\"Not\"&gt;\n &lt;operand xsi:type=\"IsNull\"&gt;\n &lt;operand path=\"coding\" xsi:type=\"Property\"&gt;\n &lt;source name=\"$this\" xsi:type=\"AliasRef\"/&gt;\n &lt;/operand&gt;\n &lt;/operand&gt;\n &lt;/where&gt;\n &lt;return&gt;\n &lt;expression path=\"coding\" xsi:type=\"Property\"&gt;\n &lt;source name=\"$this\" xsi:type=\"AliasRef\"/&gt;\n &lt;/expression&gt;\n &lt;/return&gt;\n &lt;/operand&gt;\n &lt;/operand&gt;\n &lt;operand valueType=\"t:Integer\" value=\"0\" xsi:type=\"Literal\"/&gt;\n &lt;/source&gt;\n &lt;/source&gt;\n &lt;/operand&gt;\n &lt;operand valueType=\"t:String\" value=\"outpatient\" xsi:type=\"Literal\"/&gt;\n &lt;/operand&gt;\n &lt;/where&gt;\n &lt;/operand&gt;\n &lt;operand name=\"ContextPrescriptions\" xsi:type=\"ParameterRef\"/&gt;\n &lt;/expression&gt;\n &lt;/def&gt;\n &lt;def name=\"Average MME\" context=\"Patient\" accessLevel=\"Public\"&gt;\n &lt;expression name=\"TotalMME\" libraryName=\"Common\" xsi:type=\"FunctionRef\"&gt;\n &lt;operand name=\"Get Active Ambulatory Opioid Rx\" xsi:type=\"ExpressionRef\"/&gt;\n &lt;/expression&gt;\n &lt;/def&gt;\n &lt;def name=\"MME &gt;= 50 mg/d?\" context=\"Patient\" accessLevel=\"Public\"&gt;\n &lt;expression xsi:type=\"If\"&gt;\n &lt;condition asType=\"t:Boolean\" xsi:type=\"As\"&gt;\n &lt;operand xsi:type=\"IsNull\"&gt;\n &lt;operand name=\"Average MME\" xsi:type=\"ExpressionRef\"/&gt;\n &lt;/operand&gt;\n &lt;/condition&gt;\n &lt;then valueType=\"t:Boolean\" value=\"false\" xsi:type=\"Literal\"/&gt;\n &lt;else xsi:type=\"GreaterOrEqual\"&gt;\n &lt;operand name=\"Average MME\" xsi:type=\"ExpressionRef\"/&gt;\n &lt;operand value=\"50\" unit=\"mg/d\" xsi:type=\"Quantity\"/&gt;\n &lt;/else&gt;\n &lt;/expression&gt;\n &lt;/def&gt;\n &lt;def name=\"On Benzodiazepine\" context=\"Patient\" accessLevel=\"Public\"&gt;\n &lt;expression xsi:type=\"Exists\"&gt;\n &lt;operand dataType=\"fhir:MedicationRequest\" codeProperty=\"medicationCodeableConcept\" xsi:type=\"Retrieve\"&gt;\n &lt;codes name=\"Benzodiazepines\" libraryName=\"Common\" xsi:type=\"ValueSetRef\"/&gt;\n &lt;/operand&gt;\n &lt;/expression&gt;\n &lt;/def&gt;\n &lt;def name=\"Inclusion Criteria\" context=\"Patient\" accessLevel=\"Public\"&gt;\n &lt;expression xsi:type=\"And\"&gt;\n &lt;operand xsi:type=\"And\"&gt;\n &lt;operand name=\"Validate Trigger Event\" xsi:type=\"ExpressionRef\"/&gt;\n &lt;operand xsi:type=\"Not\"&gt;\n &lt;operand name=\"Exclusion Criteria\" xsi:type=\"ExpressionRef\"/&gt;\n &lt;/operand&gt;\n &lt;/operand&gt;\n &lt;operand xsi:type=\"Or\"&gt;\n &lt;operand name=\"MME &gt;= 50 mg/d?\" xsi:type=\"ExpressionRef\"/&gt;\n &lt;operand name=\"On Benzodiazepine\" xsi:type=\"ExpressionRef\"/&gt;\n &lt;/operand&gt;\n &lt;/expression&gt;\n &lt;/def&gt;\n &lt;def name=\"Has Substance Abuse History\" context=\"Patient\" accessLevel=\"Public\"&gt;\n &lt;expression xsi:type=\"Exists\"&gt;\n &lt;operand dataType=\"fhir:Condition\" codeProperty=\"code\" xsi:type=\"Retrieve\"&gt;\n &lt;codes name=\"Substance Abuse\" xsi:type=\"ValueSetRef\"/&gt;\n &lt;/operand&gt;\n &lt;/expression&gt;\n &lt;/def&gt;\n &lt;def name=\"Get Indicator\" context=\"Patient\" accessLevel=\"Public\"&gt;\n &lt;expression valueType=\"t:String\" value=\"warning\" xsi:type=\"Literal\"/&gt;\n &lt;/def&gt;\n &lt;def name=\"Get Summary\" context=\"Patient\" accessLevel=\"Public\"&gt;\n &lt;expression valueType=\"t:String\" value=\"Incorporate into the management plan strategies to mitigate risk; including considering offering naloxone when factors that increase risk for opioid overdose are present\" xsi:type=\"Literal\"/&gt;\n &lt;/def&gt;\n &lt;def name=\"Get Notification\" context=\"Patient\" accessLevel=\"Public\"&gt;\n &lt;expression xsi:type=\"Concatenate\"&gt;\n &lt;operand valueType=\"t:String\" value=\"Consider offering naloxone given following risk factor(s) for opioid overdose: \" xsi:type=\"Literal\"/&gt;\n &lt;operand xsi:type=\"If\"&gt;\n &lt;condition asType=\"t:Boolean\" xsi:type=\"As\"&gt;\n &lt;operand name=\"MME &gt;= 50 mg/d?\" xsi:type=\"ExpressionRef\"/&gt;\n &lt;/condition&gt;\n &lt;then xsi:type=\"Concatenate\"&gt;\n &lt;operand xsi:type=\"Concatenate\"&gt;\n &lt;operand valueType=\"t:String\" value=\"Average MME (\" xsi:type=\"Literal\"/&gt;\n &lt;operand xsi:type=\"ToString\"&gt;\n &lt;operand name=\"Average MME\" xsi:type=\"ExpressionRef\"/&gt;\n &lt;/operand&gt;\n &lt;/operand&gt;\n &lt;operand valueType=\"t:String\" value=\") &gt;= 50 mg/day, \" xsi:type=\"Literal\"/&gt;\n &lt;/then&gt;\n &lt;else xsi:type=\"Concatenate\"&gt;\n &lt;operand valueType=\"t:String\" value=\"\" xsi:type=\"Literal\"/&gt;\n &lt;operand xsi:type=\"If\"&gt;\n &lt;condition asType=\"t:Boolean\" xsi:type=\"As\"&gt;\n &lt;operand name=\"On Benzodiazepine\" xsi:type=\"ExpressionRef\"/&gt;\n &lt;/condition&gt;\n &lt;then valueType=\"t:String\" value=\"concurrent use of benzodiazepine, \" xsi:type=\"Literal\"/&gt;\n &lt;else valueType=\"t:String\" value=\"\" xsi:type=\"Literal\"/&gt;\n &lt;/operand&gt;\n &lt;/else&gt;\n &lt;/operand&gt;\n &lt;/expression&gt;\n &lt;/def&gt;\n &lt;/statements&gt;\n&lt;/library&gt;\n</code>\n </pre>\n </div>"
  },
  "identifier" : [
    {
      "use" : "official",
      "value" : "OpioidCDS_REC_04"
    }
  ],
  "version" : "0.1.0",
  "title" : "Opioid CDS Logic for recommendation #4",
  "status" : "active",
  "experimental" : false,
  "type" : {
    "coding" : [
      {
        "system" : "http://terminology.hl7.org/CodeSystem/library-type",
        "code" : "logic-library",
        "display" : "Logic Library"
      }
    ]
  },
  "date" : "2018-03-25T13:49:09-06:00",
  "publisher" : "Centers for Disease Control and Prevention (CDC)",
  "description" : "Opioid decision support logic to consider offering Naloxone when factors that increase risk for opioid overdose are present.",
  "useContext" : [
    {
      "code" : {
        "system" : "http://terminology.hl7.org/CodeSystem/usage-context-type",
        "code" : "focus",
        "display" : "Clinical Focus"
      },
      "valueCodeableConcept" : {
        "coding" : [
          {
            "system" : "http://snomed.info/sct",
            "code" : "182888003",
            "display" : "Medication requested (situation)"
          }
        ]
      }
    },
    {
      "code" : {
        "system" : "http://terminology.hl7.org/CodeSystem/usage-context-type",
        "code" : "focus",
        "display" : "Clinical Focus"
      },
      "valueCodeableConcept" : {
        "coding" : [
          {
            "system" : "http://snomed.info/sct",
            "code" : "82423001",
            "display" : "Chronic pain (finding)"
          }
        ]
      }
    }
  ],
  "jurisdiction" : [
    {
      "coding" : [
        {
          "system" : "urn:iso:std:iso:3166",
          "code" : "US",
          "display" : "United States of America"
        }
      ]
    }
  ],
  "purpose" : "The purpose of this library is to determine whether increased risks for opioid overdose are present.",
  "usage" : "This library is used to recommend the prescriber/user to consider offering Naloxone when increased risks for opioid overdose are present.",
  "copyright" : "© CDC 2016+.",
  "topic" : [
    {
      "text" : "Opioid Prescribing"
    }
  ],
  "author" : [
    {
      "name" : "Kensaku Kawamoto, MD, PhD, MHS
"
    },
    {
      "name" : "Bryn Rhodes"
    },
    {
      "name" : "Floyd Eisenberg, MD, MPH
"
    },
    {
      "name" : "Robert McClure, MD, MPH
"
    }
  ],
  "relatedArtifact" : [
    {
      "type" : "documentation",
      "display" : "CDC guideline for prescribing opioids for chronic pain",
      "url" : "https://guidelines.gov/summaries/summary/50153/cdc-guideline-for-prescribing-opioids-for-chronic-pain---united-states-2016#420"
    },
    {
      "type" : "depends-on",
      "resource" : "http://example.org/fhir/Library/opioidcds-common"
    },
    {
      "type" : "documentation",
      "display" : "MME Conversion Tables",
      "url" : "https://www.cdc.gov/drugoverdose/pdf/calculating_total_daily_dose-a.pdf"
    }
  ],
  "dataRequirement" : [
    {
      "type" : "MedicationRequest",
      "codeFilter" : [
        {
          "path" : "medicationCodeableConcept",
          "valueSet" : "http://example.org/fhir/ValueSet/naloxone"
        }
      ]
    },
    {
      "type" : "MedicationRequest",
      "codeFilter" : [
        {
          "path" : "medicationCodeableConcept",
          "valueSet" : "http://example.org/fhir/ValueSet/opioids-abused-in-ambulatory-care"
        }
      ]
    },
    {
      "type" : "MedicationRequest",
      "codeFilter" : [
        {
          "path" : "medicationCodeableConcept",
          "valueSet" : "http://example.org/fhir/ValueSet/benzodiazepines"
        }
      ]
    },
    {
      "type" : "Condition",
      "codeFilter" : [
        {
          "path" : "code",
          "valueSet" : "http://example.org/fhir/ValueSet/substance-abuse"
        }
      ]
    }
  ],
  "content" : [
    {
      "contentType" : "application/elm+xml",
      "data" : "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPGxpYnJhcnkgeG1sbnM9InVybjpobDctb3JnOmVsbTpyMSIgeG1sbnM6dD0idXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczpmaGlyPSJodHRwOi8vaGw3Lm9yZy9maGlyIiB4bWxuczpxZG00Mz0idXJuOmhlYWx0aGl0LWdvdjpxZG06djRfMyIgeG1sbnM6cWRtNTM9InVybjpoZWFsdGhpdC1nb3Y6cWRtOnY1XzMiIHhtbG5zOmE9InVybjpobDctb3JnOmNxbC1hbm5vdGF0aW9uczpyMSI+CiAgIDxhbm5vdGF0aW9uIHN0YXJ0TGluZT0iNjMiIHN0YXJ0Q2hhcj0iMTEiIGVuZExpbmU9IjYzIiBlbmRDaGFyPSI0OCIgbWVzc2FnZT0iQ291bGQgbm90IHJlc29sdmUgY29kZSBwYXRoIG1lZGljYXRpb25Db2RlYWJsZUNvbmNlcHQgZm9yIHRoZSB0eXBlIG9mIHRoZSByZXRyaWV2ZSBGSElSLk1lZGljYXRpb25SZXF1ZXN0LiIgZXJyb3JUeXBlPSJzZW1hbnRpYyIgZXJyb3JTZXZlcml0eT0id2FybmluZyIgeHNpOnR5cGU9ImE6Q3FsVG9FbG1FcnJvciIvPgogICA8YW5ub3RhdGlvbiBzdGFydExpbmU9IjYzIiBzdGFydENoYXI9IjExIiBlbmRMaW5lPSI2MyIgZW5kQ2hhcj0iNDgiIG1lc3NhZ2U9IkNvdWxkIG5vdCByZXNvbHZlIG1lbWJlcnNoaXAgb3BlcmF0b3IgZm9yIHRlcm1pbm9sb2d5IHRhcmdldCBvZiB0aGUgcmV0cmlldmUuIiBlcnJvclR5cGU9InNlbWFudGljIiBlcnJvclNldmVyaXR5PSJ3YXJuaW5nIiB4c2k6dHlwZT0iYTpDcWxUb0VsbUVycm9yIi8+CiAgIDxhbm5vdGF0aW9uIHN0YXJ0TGluZT0iODEiIHN0YXJ0Q2hhcj0iNSIgZW5kTGluZT0iODEiIGVuZENoYXI9IjY4IiBtZXNzYWdlPSJDb3VsZCBub3QgcmVzb2x2ZSBjb2RlIHBhdGggbWVkaWNhdGlvbkNvZGVhYmxlQ29uY2VwdCBmb3IgdGhlIHR5cGUgb2YgdGhlIHJldHJpZXZlIEZISVIuTWVkaWNhdGlvblJlcXVlc3QuIiBlcnJvclR5cGU9InNlbWFudGljIiBlcnJvclNldmVyaXR5PSJ3YXJuaW5nIiB4c2k6dHlwZT0iYTpDcWxUb0VsbUVycm9yIi8+CiAgIDxhbm5vdGF0aW9uIHN0YXJ0TGluZT0iODEiIHN0YXJ0Q2hhcj0iNSIgZW5kTGluZT0iODEiIGVuZENoYXI9IjY4IiBtZXNzYWdlPSJDb3VsZCBub3QgcmVzb2x2ZSBtZW1iZXJzaGlwIG9wZXJhdG9yIGZvciB0ZXJtaW5vbG9neSB0YXJnZXQgb2YgdGhlIHJldHJpZXZlLiIgZXJyb3JUeXBlPSJzZW1hbnRpYyIgZXJyb3JTZXZlcml0eT0id2FybmluZyIgeHNpOnR5cGU9ImE6Q3FsVG9FbG1FcnJvciIvPgogICA8YW5ub3RhdGlvbiBzdGFydExpbmU9Ijc0IiBzdGFydENoYXI9IjExIiBlbmRMaW5lPSI3NCIgZW5kQ2hhcj0iNTUiIG1lc3NhZ2U9IkNvdWxkIG5vdCByZXNvbHZlIGNvZGUgcGF0aCBtZWRpY2F0aW9uQ29kZWFibGVDb25jZXB0IGZvciB0aGUgdHlwZSBvZiB0aGUgcmV0cmlldmUgRkhJUi5NZWRpY2F0aW9uUmVxdWVzdC4iIGVycm9yVHlwZT0ic2VtYW50aWMiIGVycm9yU2V2ZXJpdHk9Indhcm5pbmciIHhzaTp0eXBlPSJhOkNxbFRvRWxtRXJyb3IiLz4KICAgPGFubm90YXRpb24gc3RhcnRMaW5lPSI3NCIgc3RhcnRDaGFyPSIxMSIgZW5kTGluZT0iNzQiIGVuZENoYXI9IjU1IiBtZXNzYWdlPSJDb3VsZCBub3QgcmVzb2x2ZSBtZW1iZXJzaGlwIG9wZXJhdG9yIGZvciB0ZXJtaW5vbG9neSB0YXJnZXQgb2YgdGhlIHJldHJpZXZlLiIgZXJyb3JUeXBlPSJzZW1hbnRpYyIgZXJyb3JTZXZlcml0eT0id2FybmluZyIgeHNpOnR5cGU9ImE6Q3FsVG9FbG1FcnJvciIvPgogICA8YW5ub3RhdGlvbiBzdGFydExpbmU9Ijc3IiBzdGFydENoYXI9IjEyIiBlbmRMaW5lPSI3NyIgZW5kQ2hhcj0iNDEiIG1lc3NhZ2U9IkNvdWxkIG5vdCByZXNvbHZlIG1lbWJlcnNoaXAgb3BlcmF0b3IgZm9yIHRlcm1pbm9sb2d5IHRhcmdldCBvZiB0aGUgcmV0cmlldmUuIiBlcnJvclR5cGU9InNlbWFudGljIiBlcnJvclNldmVyaXR5PSJ3YXJuaW5nIiB4c2k6dHlwZT0iYTpDcWxUb0VsbUVycm9yIi8+CiAgIDxpZGVudGlmaWVyIGlkPSJPcGlvaWRDRFNfU1RVNF9SRUNfMDgiIHZlcnNpb249IjAuMS4wIi8+CiAgIDxzY2hlbWFJZGVudGlmaWVyIGlkPSJ1cm46aGw3LW9yZzplbG0iIHZlcnNpb249InIxIi8+CiAgIDx1c2luZ3M+CiAgICAgIDxkZWYgbG9jYWxJZGVudGlmaWVyPSJTeXN0ZW0iIHVyaT0idXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxIi8+CiAgICAgIDxkZWYgbG9jYWxJZGVudGlmaWVyPSJGSElSIiB1cmk9Imh0dHA6Ly9obDcub3JnL2ZoaXIiIHZlcnNpb249IjMuMi4wIi8+CiAgIDwvdXNpbmdzPgogICA8aW5jbHVkZXM+CiAgICAgIDxkZWYgbG9jYWxJZGVudGlmaWVyPSJDb21tb24iIHBhdGg9Ik9waW9pZENEU19TVFU0X0NvbW1vbiIgdmVyc2lvbj0iMC4xLjAiLz4KICAgPC9pbmNsdWRlcz4KICAgPHBhcmFtZXRlcnM+CiAgICAgIDxkZWYgbmFtZT0iQ29udGV4dFByZXNjcmlwdGlvbnMiIGFjY2Vzc0xldmVsPSJQdWJsaWMiPgogICAgICAgICA8cGFyYW1ldGVyVHlwZVNwZWNpZmllciB4c2k6dHlwZT0iTGlzdFR5cGVTcGVjaWZpZXIiPgogICAgICAgICAgICA8ZWxlbWVudFR5cGUgbmFtZT0iZmhpcjpNZWRpY2F0aW9uUmVxdWVzdCIgeHNpOnR5cGU9Ik5hbWVkVHlwZVNwZWNpZmllciIvPgogICAgICAgICA8L3BhcmFtZXRlclR5cGVTcGVjaWZpZXI+CiAgICAgIDwvZGVmPgogICA8L3BhcmFtZXRlcnM+CiAgIDx2YWx1ZVNldHM+CiAgICAgIDxkZWYgbmFtZT0iU3Vic3RhbmNlIEFidXNlIiBpZD0iVE9ETyIgYWNjZXNzTGV2ZWw9IlB1YmxpYyIvPgogICA8L3ZhbHVlU2V0cz4KICAgPHN0YXRlbWVudHM+CiAgICAgIDxkZWYgbmFtZT0iUGF0aWVudCIgY29udGV4dD0iUGF0aWVudCI+CiAgICAgICAgIDxleHByZXNzaW9uIHhzaTp0eXBlPSJTaW5nbGV0b25Gcm9tIj4KICAgICAgICAgICAgPG9wZXJhbmQgZGF0YVR5cGU9ImZoaXI6UGF0aWVudCIgeHNpOnR5cGU9IlJldHJpZXZlIi8+CiAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgPC9kZWY+CiAgICAgIDxkZWYgbmFtZT0iVmFsaWRhdGUgVHJpZ2dlciBFdmVudCIgY29udGV4dD0iUGF0aWVudCIgYWNjZXNzTGV2ZWw9IlB1YmxpYyI+CiAgICAgICAgIDxleHByZXNzaW9uIHhzaTp0eXBlPSJFeGlzdHMiPgogICAgICAgICAgICA8b3BlcmFuZCB4c2k6dHlwZT0iUXVlcnkiPgogICAgICAgICAgICAgICA8c291cmNlIGFsaWFzPSJ0cmlnZ2VyU2NyaXB0Ij4KICAgICAgICAgICAgICAgICAgPGV4cHJlc3Npb24gbmFtZT0iQ29udGV4dFByZXNjcmlwdGlvbnMiIHhzaTp0eXBlPSJQYXJhbWV0ZXJSZWYiLz4KICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgIDx3aGVyZSBuYW1lPSJJc09waW9pZFdpdGhBbWJ1bGF0b3J5QWJ1c2VQb3RlbnRpYWwiIGxpYnJhcnlOYW1lPSJDb21tb24iIHhzaTp0eXBlPSJGdW5jdGlvblJlZiI+CiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIG5hbWU9IlRvQ29kZSIgbGlicmFyeU5hbWU9IkNvbW1vbiIgeHNpOnR5cGU9IkZ1bmN0aW9uUmVmIj4KICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgeHNpOnR5cGU9IkluZGV4ZXIiPgogICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBwYXRoPSJjb2RpbmciIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgcGF0aD0ibWVkaWNhdGlvbiIgc2NvcGU9InRyaWdnZXJTY3JpcHQiIHhzaTp0eXBlPSJQcm9wZXJ0eSIvPgogICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHZhbHVlVHlwZT0idDpJbnRlZ2VyIiB2YWx1ZT0iMCIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgIDwvd2hlcmU+CiAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICA8L2RlZj4KICAgICAgPGRlZiBuYW1lPSJFeGNsdXNpb24gQ3JpdGVyaWEiIGNvbnRleHQ9IlBhdGllbnQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiPgogICAgICAgICA8ZXhwcmVzc2lvbiB4c2k6dHlwZT0iRXhpc3RzIj4KICAgICAgICAgICAgPG9wZXJhbmQgZGF0YVR5cGU9ImZoaXI6TWVkaWNhdGlvblJlcXVlc3QiIGNvZGVQcm9wZXJ0eT0ibWVkaWNhdGlvbkNvZGVhYmxlQ29uY2VwdCIgeHNpOnR5cGU9IlJldHJpZXZlIj4KICAgICAgICAgICAgICAgPGNvZGVzIG5hbWU9Ik5hbG94b25lIiBsaWJyYXJ5TmFtZT0iQ29tbW9uIiB4c2k6dHlwZT0iVmFsdWVTZXRSZWYiLz4KICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIG5hbWU9IkdldCBBY3RpdmUgQW1idWxhdG9yeSBPcGlvaWQgUngiIGNvbnRleHQ9IlBhdGllbnQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiPgogICAgICAgICA8ZXhwcmVzc2lvbiB4c2k6dHlwZT0iVW5pb24iPgogICAgICAgICAgICA8b3BlcmFuZCB4c2k6dHlwZT0iUXVlcnkiPgogICAgICAgICAgICAgICA8c291cmNlIGFsaWFzPSJSeCI+CiAgICAgICAgICAgICAgICAgIDxleHByZXNzaW9uIGRhdGFUeXBlPSJmaGlyOk1lZGljYXRpb25SZXF1ZXN0IiBjb2RlUHJvcGVydHk9Im1lZGljYXRpb25Db2RlYWJsZUNvbmNlcHQiIHhzaTp0eXBlPSJSZXRyaWV2ZSI+CiAgICAgICAgICAgICAgICAgICAgIDxjb2RlcyBuYW1lPSJBbWJ1bGF0b3J5IEFidXNlIFBvdGVudGlhbCBPcGlvaWRzIiBsaWJyYXJ5TmFtZT0iQ29tbW9uIiB4c2k6dHlwZT0iVmFsdWVTZXRSZWYiLz4KICAgICAgICAgICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgICAgPHdoZXJlIHhzaTp0eXBlPSJBbmQiPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCB4c2k6dHlwZT0iRXF1YWwiPgogICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBwYXRoPSJ2YWx1ZSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBwYXRoPSJzdGF0dXMiIHNjb3BlPSJSeCIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+CiAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9ImFjdGl2ZSIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCB4c2k6dHlwZT0iRXF1YWwiPgogICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBwYXRoPSJ2YWx1ZSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBwYXRoPSJjb2RlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIHhzaTp0eXBlPSJJbmRleGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgeHNpOnR5cGU9IkZsYXR0ZW4iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCB4c2k6dHlwZT0iUXVlcnkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIGFsaWFzPSIkdGhpcyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxleHByZXNzaW9uIHBhdGg9ImNhdGVnb3J5IiBzY29wZT0iUngiIHhzaTp0eXBlPSJQcm9wZXJ0eSIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHdoZXJlIHhzaTp0eXBlPSJOb3QiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCB4c2k6dHlwZT0iSXNOdWxsIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgcGF0aD0iY29kaW5nIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIG5hbWU9IiR0aGlzIiB4c2k6dHlwZT0iQWxpYXNSZWYiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvd2hlcmU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZXR1cm4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxleHByZXNzaW9uIHBhdGg9ImNvZGluZyIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBuYW1lPSIkdGhpcyIgeHNpOnR5cGU9IkFsaWFzUmVmIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9yZXR1cm4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCB2YWx1ZVR5cGU9InQ6SW50ZWdlciIgdmFsdWU9IjAiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICAgICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCB2YWx1ZVR5cGU9InQ6U3RyaW5nIiB2YWx1ZT0ib3V0cGF0aWVudCIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICA8L3doZXJlPgogICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgIDxvcGVyYW5kIG5hbWU9IkNvbnRleHRQcmVzY3JpcHRpb25zIiB4c2k6dHlwZT0iUGFyYW1ldGVyUmVmIi8+CiAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgPC9kZWY+CiAgICAgIDxkZWYgbmFtZT0iQXZlcmFnZSBNTUUiIGNvbnRleHQ9IlBhdGllbnQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiPgogICAgICAgICA8ZXhwcmVzc2lvbiBuYW1lPSJUb3RhbE1NRSIgbGlicmFyeU5hbWU9IkNvbW1vbiIgeHNpOnR5cGU9IkZ1bmN0aW9uUmVmIj4KICAgICAgICAgICAgPG9wZXJhbmQgbmFtZT0iR2V0IEFjdGl2ZSBBbWJ1bGF0b3J5IE9waW9pZCBSeCIgeHNpOnR5cGU9IkV4cHJlc3Npb25SZWYiLz4KICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICA8L2RlZj4KICAgICAgPGRlZiBuYW1lPSJNTUUgPj0gNTAgbWcvZD8iIGNvbnRleHQ9IlBhdGllbnQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiPgogICAgICAgICA8ZXhwcmVzc2lvbiB4c2k6dHlwZT0iSWYiPgogICAgICAgICAgICA8Y29uZGl0aW9uIGFzVHlwZT0idDpCb29sZWFuIiB4c2k6dHlwZT0iQXMiPgogICAgICAgICAgICAgICA8b3BlcmFuZCB4c2k6dHlwZT0iSXNOdWxsIj4KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbmFtZT0iQXZlcmFnZSBNTUUiIHhzaTp0eXBlPSJFeHByZXNzaW9uUmVmIi8+CiAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgPC9jb25kaXRpb24+CiAgICAgICAgICAgIDx0aGVuIHZhbHVlVHlwZT0idDpCb29sZWFuIiB2YWx1ZT0iZmFsc2UiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgIDxlbHNlIHhzaTp0eXBlPSJHcmVhdGVyT3JFcXVhbCI+CiAgICAgICAgICAgICAgIDxvcGVyYW5kIG5hbWU9IkF2ZXJhZ2UgTU1FIiB4c2k6dHlwZT0iRXhwcmVzc2lvblJlZiIvPgogICAgICAgICAgICAgICA8b3BlcmFuZCB2YWx1ZT0iNTAiIHVuaXQ9Im1nL2QiIHhzaTp0eXBlPSJRdWFudGl0eSIvPgogICAgICAgICAgICA8L2Vsc2U+CiAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgPC9kZWY+CiAgICAgIDxkZWYgbmFtZT0iT24gQmVuem9kaWF6ZXBpbmUiIGNvbnRleHQ9IlBhdGllbnQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiPgogICAgICAgICA8ZXhwcmVzc2lvbiB4c2k6dHlwZT0iRXhpc3RzIj4KICAgICAgICAgICAgPG9wZXJhbmQgZGF0YVR5cGU9ImZoaXI6TWVkaWNhdGlvblJlcXVlc3QiIGNvZGVQcm9wZXJ0eT0ibWVkaWNhdGlvbkNvZGVhYmxlQ29uY2VwdCIgeHNpOnR5cGU9IlJldHJpZXZlIj4KICAgICAgICAgICAgICAgPGNvZGVzIG5hbWU9IkJlbnpvZGlhemVwaW5lcyIgbGlicmFyeU5hbWU9IkNvbW1vbiIgeHNpOnR5cGU9IlZhbHVlU2V0UmVmIi8+CiAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICA8L2RlZj4KICAgICAgPGRlZiBuYW1lPSJJbmNsdXNpb24gQ3JpdGVyaWEiIGNvbnRleHQ9IlBhdGllbnQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiPgogICAgICAgICA8ZXhwcmVzc2lvbiB4c2k6dHlwZT0iQW5kIj4KICAgICAgICAgICAgPG9wZXJhbmQgeHNpOnR5cGU9IkFuZCI+CiAgICAgICAgICAgICAgIDxvcGVyYW5kIG5hbWU9IlZhbGlkYXRlIFRyaWdnZXIgRXZlbnQiIHhzaTp0eXBlPSJFeHByZXNzaW9uUmVmIi8+CiAgICAgICAgICAgICAgIDxvcGVyYW5kIHhzaTp0eXBlPSJOb3QiPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCBuYW1lPSJFeGNsdXNpb24gQ3JpdGVyaWEiIHhzaTp0eXBlPSJFeHByZXNzaW9uUmVmIi8+CiAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICA8b3BlcmFuZCB4c2k6dHlwZT0iT3IiPgogICAgICAgICAgICAgICA8b3BlcmFuZCBuYW1lPSJNTUUgPj0gNTAgbWcvZD8iIHhzaTp0eXBlPSJFeHByZXNzaW9uUmVmIi8+CiAgICAgICAgICAgICAgIDxvcGVyYW5kIG5hbWU9Ik9uIEJlbnpvZGlhemVwaW5lIiB4c2k6dHlwZT0iRXhwcmVzc2lvblJlZiIvPgogICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgPC9kZWY+CiAgICAgIDxkZWYgbmFtZT0iSGFzIFN1YnN0YW5jZSBBYnVzZSBIaXN0b3J5IiBjb250ZXh0PSJQYXRpZW50IiBhY2Nlc3NMZXZlbD0iUHVibGljIj4KICAgICAgICAgPGV4cHJlc3Npb24geHNpOnR5cGU9IkV4aXN0cyI+CiAgICAgICAgICAgIDxvcGVyYW5kIGRhdGFUeXBlPSJmaGlyOkNvbmRpdGlvbiIgY29kZVByb3BlcnR5PSJjb2RlIiB4c2k6dHlwZT0iUmV0cmlldmUiPgogICAgICAgICAgICAgICA8Y29kZXMgbmFtZT0iU3Vic3RhbmNlIEFidXNlIiB4c2k6dHlwZT0iVmFsdWVTZXRSZWYiLz4KICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIG5hbWU9IkdldCBJbmRpY2F0b3IiIGNvbnRleHQ9IlBhdGllbnQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiPgogICAgICAgICA8ZXhwcmVzc2lvbiB2YWx1ZVR5cGU9InQ6U3RyaW5nIiB2YWx1ZT0id2FybmluZyIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgPC9kZWY+CiAgICAgIDxkZWYgbmFtZT0iR2V0IFN1bW1hcnkiIGNvbnRleHQ9IlBhdGllbnQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiPgogICAgICAgICA8ZXhwcmVzc2lvbiB2YWx1ZVR5cGU9InQ6U3RyaW5nIiB2YWx1ZT0iSW5jb3Jwb3JhdGUgaW50byB0aGUgbWFuYWdlbWVudCBwbGFuIHN0cmF0ZWdpZXMgdG8gbWl0aWdhdGUgcmlzazsgaW5jbHVkaW5nIGNvbnNpZGVyaW5nIG9mZmVyaW5nIG5hbG94b25lIHdoZW4gZmFjdG9ycyB0aGF0IGluY3JlYXNlIHJpc2sgZm9yIG9waW9pZCBvdmVyZG9zZSBhcmUgcHJlc2VudCIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgPC9kZWY+CiAgICAgIDxkZWYgbmFtZT0iR2V0IE5vdGlmaWNhdGlvbiIgY29udGV4dD0iUGF0aWVudCIgYWNjZXNzTGV2ZWw9IlB1YmxpYyI+CiAgICAgICAgIDxleHByZXNzaW9uIHhzaTp0eXBlPSJDb25jYXRlbmF0ZSI+CiAgICAgICAgICAgIDxvcGVyYW5kIHZhbHVlVHlwZT0idDpTdHJpbmciIHZhbHVlPSJDb25zaWRlciBvZmZlcmluZyBuYWxveG9uZSBnaXZlbiBmb2xsb3dpbmcgcmlzayBmYWN0b3IocykgZm9yIG9waW9pZCBvdmVyZG9zZTogIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICA8b3BlcmFuZCB4c2k6dHlwZT0iSWYiPgogICAgICAgICAgICAgICA8Y29uZGl0aW9uIGFzVHlwZT0idDpCb29sZWFuIiB4c2k6dHlwZT0iQXMiPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCBuYW1lPSJNTUUgPj0gNTAgbWcvZD8iIHhzaTp0eXBlPSJFeHByZXNzaW9uUmVmIi8+CiAgICAgICAgICAgICAgIDwvY29uZGl0aW9uPgogICAgICAgICAgICAgICA8dGhlbiB4c2k6dHlwZT0iQ29uY2F0ZW5hdGUiPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCB4c2k6dHlwZT0iQ29uY2F0ZW5hdGUiPgogICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCB2YWx1ZVR5cGU9InQ6U3RyaW5nIiB2YWx1ZT0iQXZlcmFnZSBNTUUgKCIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgeHNpOnR5cGU9IlRvU3RyaW5nIj4KICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbmFtZT0iQXZlcmFnZSBNTUUiIHhzaTp0eXBlPSJFeHByZXNzaW9uUmVmIi8+CiAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCB2YWx1ZVR5cGU9InQ6U3RyaW5nIiB2YWx1ZT0iKSA+PSA1MCBtZy9kYXksICIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgPC90aGVuPgogICAgICAgICAgICAgICA8ZWxzZSB4c2k6dHlwZT0iQ29uY2F0ZW5hdGUiPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCB2YWx1ZVR5cGU9InQ6U3RyaW5nIiB2YWx1ZT0iIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCB4c2k6dHlwZT0iSWYiPgogICAgICAgICAgICAgICAgICAgICA8Y29uZGl0aW9uIGFzVHlwZT0idDpCb29sZWFuIiB4c2k6dHlwZT0iQXMiPgogICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBuYW1lPSJPbiBCZW56b2RpYXplcGluZSIgeHNpOnR5cGU9IkV4cHJlc3Npb25SZWYiLz4KICAgICAgICAgICAgICAgICAgICAgPC9jb25kaXRpb24+CiAgICAgICAgICAgICAgICAgICAgIDx0aGVuIHZhbHVlVHlwZT0idDpTdHJpbmciIHZhbHVlPSJjb25jdXJyZW50IHVzZSBvZiBiZW56b2RpYXplcGluZSwgIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICAgICAgICA8ZWxzZSB2YWx1ZVR5cGU9InQ6U3RyaW5nIiB2YWx1ZT0iIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgIDwvZWxzZT4KICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgIDwvZGVmPgogICA8L3N0YXRlbWVudHM+CjwvbGlicmFyeT4K"
    }
  ]
}

Library "opioidcds-recommendation-07" Version "1"

Tags: (no tags)  +

This Resource , XML or JSON representation, or the full version history.. provenance for this resource
Updated: by

Participants

Author Kensaku Kawamoto, MD, PhD, MHS
Author Bryn Rhodes
Author Floyd Eisenberg, MD, MPH
Author Robert McClure, MD, MPH

Related Artifacts

Documentation CDC guideline for prescribing opioids for chronic pain https://guidelines.gov/summaries/summary/50153/cdc-guideline-for-prescribing-opioids-for-chronic-pain---united-states-2016#420
Depends On http://example.org/fhir/Library/opioidcds-common

Data Requirements

Type: MedicationRequest
Filter Value
medicationCodeableConcept In ValueSet http://example.org/fhir/ValueSet/opioids-indicating-end-of-life
Type: Procedure
Filter Value
code One of these codes:
Type: Procedure
Filter Value
code One of these codes:
Type: MedicationRequest
Filter Value
medicationCodeableConcept In ValueSet http://example.org/fhir/ValueSet/opioids-abused-in-ambulatory-care
Type: Encounter

Contents

application/elm+xml

        <?xml version="1.0" encoding="UTF-8"?>
<library xmlns="urn:hl7-org:elm:r1" xmlns:t="urn:hl7-org:elm-types:r1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:fhir="http://hl7.org/fhir" xmlns:qdm43="urn:healthit-gov:qdm:v4_3" xmlns:qdm53="urn:healthit-gov:qdm:v5_3" xmlns:a="urn:hl7-org:cql-annotations:r1">
   <annotation startLine="76" startChar="3" endLine="76" endChar="51" message="Could not resolve code path medicationCodeableConcept for the type of the retrieve FHIR.MedicationRequest." errorType="semantic" errorSeverity="warning" xsi:type="a:CqlToElmError"/>
   <annotation startLine="76" startChar="3" endLine="76" endChar="51" message="Could not resolve membership operator for terminology target of the retrieve." errorType="semantic" errorSeverity="warning" xsi:type="a:CqlToElmError"/>
   <annotation startLine="85" startChar="4" endLine="85" endChar="53" message="Could not resolve membership operator for terminology target of the retrieve." errorType="semantic" errorSeverity="warning" xsi:type="a:CqlToElmError"/>
   <annotation startLine="86" startChar="13" endLine="86" endChar="52" message="Could not resolve membership operator for terminology target of the retrieve." errorType="semantic" errorSeverity="warning" xsi:type="a:CqlToElmError"/>
   <annotation startLine="95" startChar="3" endLine="95" endChar="66" message="Could not resolve code path medicationCodeableConcept for the type of the retrieve FHIR.MedicationRequest." errorType="semantic" errorSeverity="warning" xsi:type="a:CqlToElmError"/>
   <annotation startLine="95" startChar="3" endLine="95" endChar="66" message="Could not resolve membership operator for terminology target of the retrieve." errorType="semantic" errorSeverity="warning" xsi:type="a:CqlToElmError"/>
   <annotation startLine="103" startChar="10" endLine="103" endChar="70" message="List-valued expression was demoted to a singleton." errorType="semantic" errorSeverity="warning" xsi:type="a:CqlToElmError"/>
   <annotation startLine="69" startChar="59" endLine="69" endChar="88" message="List-valued expression was demoted to a singleton." errorType="semantic" errorSeverity="warning" xsi:type="a:CqlToElmError"/>
   <annotation startLine="115" startChar="6" endLine="115" endChar="35" message="List-valued expression was demoted to a singleton." errorType="semantic" errorSeverity="warning" xsi:type="a:CqlToElmError"/>
   <identifier id="OpioidCDS_STU4_REC_07" version="0.1.0"/>
   <schemaIdentifier id="urn:hl7-org:elm" version="r1"/>
   <usings>
      <def localIdentifier="System" uri="urn:hl7-org:elm-types:r1"/>
      <def localIdentifier="FHIR" uri="http://hl7.org/fhir" version="3.2.0"/>
   </usings>
   <includes>
      <def localIdentifier="Common" path="OpioidCDS_STU4_Common" version="0.1.0"/>
   </includes>
   <parameters>
      <def name="ContextPrescriptions" accessLevel="Public">
         <parameterTypeSpecifier xsi:type="ListTypeSpecifier">
            <elementType name="fhir:MedicationRequest" xsi:type="NamedTypeSpecifier"/>
         </parameterTypeSpecifier>
      </def>
   </parameters>
   <codeSystems>
      <def name="SNOMED" id="http://snomed.info/sct" accessLevel="Public"/>
   </codeSystems>
   <codes>
      <def name="Assessment of risk for opioid abuse" id="454281000124100" accessLevel="Public">
         <codeSystem name="SNOMED"/>
      </def>
      <def name="High risk drug monitoring" id="268525008" accessLevel="Public">
         <codeSystem name="SNOMED"/>
      </def>
   </codes>
   <statements>
      <def name="Patient" context="Patient">
         <expression xsi:type="SingletonFrom">
            <operand dataType="fhir:Patient" xsi:type="Retrieve"/>
         </expression>
      </def>
      <def name="Risk Assessment Interval" context="Patient" accessLevel="Public">
         <expression lowClosed="true" highClosed="true" xsi:type="Interval">
            <low xsi:type="Subtract">
               <operand xsi:type="Today"/>
               <operand value="91" unit="days" xsi:type="Quantity"/>
            </low>
            <high xsi:type="Subtract">
               <operand xsi:type="Today"/>
               <operand value="1" unit="day" xsi:type="Quantity"/>
            </high>
         </expression>
      </def>
      <def name="Encounter Interval" context="Patient" accessLevel="Public">
         <expression lowClosed="true" highClosed="true" xsi:type="Interval">
            <low xsi:type="Subtract">
               <operand xsi:type="Subtract">
                  <operand xsi:type="Today"/>
                  <operand value="12" unit="months" xsi:type="Quantity"/>
               </operand>
               <operand value="1" unit="days" xsi:type="Quantity"/>
            </low>
            <high xsi:type="Subtract">
               <operand xsi:type="Today"/>
               <operand value="1" unit="day" xsi:type="Quantity"/>
            </high>
         </expression>
      </def>
      <def name="Validate Trigger Event" context="Patient" accessLevel="Public">
         <expression xsi:type="Exists">
            <operand xsi:type="Query">
               <source alias="triggerScript">
                  <expression name="ContextPrescriptions" xsi:type="ParameterRef"/>
               </source>
               <where name="IsOpioidWithAmbulatoryAbusePotential" libraryName="Common" xsi:type="FunctionRef">
                  <operand name="ToCode" libraryName="Common" xsi:type="FunctionRef">
                     <operand xsi:type="Indexer">
                        <operand path="coding" xsi:type="Property">
                           <source path="medication" scope="triggerScript" xsi:type="Property"/>
                        </operand>
                        <operand valueType="t:Integer" value="0" xsi:type="Literal"/>
                     </operand>
                  </operand>
               </where>
            </operand>
         </expression>
      </def>
      <def name="Medications Indicating End Of Life" context="Patient" accessLevel="Public">
         <expression xsi:type="Query">
            <source alias="endOfLifeRx">
               <expression dataType="fhir:MedicationRequest" codeProperty="medicationCodeableConcept" xsi:type="Retrieve">
                  <codes name="End Of Life Opioids" libraryName="Common" xsi:type="ValueSetRef"/>
               </expression>
            </source>
            <where xsi:type="Equal">
               <operand path="value" xsi:type="Property">
                  <source path="status" scope="endOfLifeRx" xsi:type="Property"/>
               </operand>
               <operand valueType="t:String" value="active" xsi:type="Literal"/>
            </where>
         </expression>
      </def>
      <def name="Exclusion Criteria" context="Patient" accessLevel="Public">
         <expression xsi:type="Exists">
            <operand name="Medications Indicating End Of Life" xsi:type="ExpressionRef"/>
         </expression>
      </def>
      <def name="Opioid Risk Assessment in Past 90 Days" context="Patient" accessLevel="Public">
         <expression xsi:type="Query">
            <source alias="riskAssessment">
               <expression xsi:type="Union">
                  <operand dataType="fhir:Procedure" codeProperty="code" xsi:type="Retrieve">
                     <codes name="Assessment of risk for opioid abuse" xsi:type="CodeRef"/>
                  </operand>
                  <operand dataType="fhir:Procedure" codeProperty="code" xsi:type="Retrieve">
                     <codes name="High risk drug monitoring" xsi:type="CodeRef"/>
                  </operand>
               </expression>
            </source>
            <where xsi:type="In">
               <operand path="value" xsi:type="Property">
                  <source path="start" xsi:type="Property">
                     <source path="performed" scope="riskAssessment" xsi:type="Property"/>
                  </source>
               </operand>
               <operand name="Risk Assessment Interval" xsi:type="ExpressionRef"/>
            </where>
         </expression>
      </def>
      <def name="Get Active Ambulatory Opioid Rx" context="Patient" accessLevel="Public">
         <expression xsi:type="Query">
            <source alias="Rx">
               <expression dataType="fhir:MedicationRequest" codeProperty="medicationCodeableConcept" xsi:type="Retrieve">
                  <codes name="Ambulatory Abuse Potential Opioids" libraryName="Common" xsi:type="ValueSetRef"/>
               </expression>
            </source>
            <where xsi:type="And">
               <operand xsi:type="Equal">
                  <operand path="value" xsi:type="Property">
                     <source path="status" scope="Rx" xsi:type="Property"/>
                  </operand>
                  <operand valueType="t:String" value="active" xsi:type="Literal"/>
               </operand>
               <operand xsi:type="Equal">
                  <operand path="value" xsi:type="Property">
                     <source path="code" xsi:type="Property">
                        <source xsi:type="Indexer">
                           <operand xsi:type="Flatten">
                              <operand xsi:type="Query">
                                 <source alias="$this">
                                    <expression path="category" scope="Rx" xsi:type="Property"/>
                                 </source>
                                 <where xsi:type="Not">
                                    <operand xsi:type="IsNull">
                                       <operand path="coding" xsi:type="Property">
                                          <source name="$this" xsi:type="AliasRef"/>
                                       </operand>
                                    </operand>
                                 </where>
                                 <return>
                                    <expression path="coding" xsi:type="Property">
                                       <source name="$this" xsi:type="AliasRef"/>
                                    </expression>
                                 </return>
                              </operand>
                           </operand>
                           <operand valueType="t:Integer" value="0" xsi:type="Literal"/>
                        </source>
                     </source>
                  </operand>
                  <operand valueType="t:String" value="outpatient" xsi:type="Literal"/>
               </operand>
            </where>
         </expression>
      </def>
      <def name="Encounter in past 12 months" context="Patient" accessLevel="Public">
         <expression xsi:type="Query">
            <source alias="E">
               <expression dataType="fhir:Encounter" xsi:type="Retrieve"/>
            </source>
            <where xsi:type="In">
               <operand path="value" xsi:type="Property">
                  <source path="start" xsi:type="Property">
                     <source path="period" scope="E" xsi:type="Property"/>
                  </source>
               </operand>
               <operand name="Encounter Interval" xsi:type="ExpressionRef"/>
            </where>
         </expression>
      </def>
      <def name="Rx Active 7 of Past 10 Days With Encounter" context="Patient" accessLevel="Public">
         <expression xsi:type="And">
            <operand xsi:type="SingletonFrom">
               <operand name="ProbableDaysInRange" libraryName="Common" xsi:type="FunctionRef">
                  <operand name="Get Active Ambulatory Opioid Rx" xsi:type="ExpressionRef"/>
                  <operand valueType="t:Integer" value="10" xsi:type="Literal"/>
                  <operand valueType="t:Integer" value="7" xsi:type="Literal"/>
               </operand>
            </operand>
            <operand xsi:type="Exists">
               <operand name="Encounter in past 12 months" xsi:type="ExpressionRef"/>
            </operand>
         </expression>
      </def>
      <def name="Rx Active 63 of Past 90 Days" context="Patient" accessLevel="Public">
         <expression name="ProbableDaysInRange" libraryName="Common" xsi:type="FunctionRef">
            <operand name="Get Active Ambulatory Opioid Rx" xsi:type="ExpressionRef"/>
            <operand valueType="t:Integer" value="90" xsi:type="Literal"/>
            <operand valueType="t:Integer" value="63" xsi:type="Literal"/>
         </expression>
      </def>
      <def name="Inclusion Criteria" context="Patient" accessLevel="Public">
         <expression xsi:type="And">
            <operand xsi:type="And">
               <operand xsi:type="And">
                  <operand name="Validate Trigger Event" xsi:type="ExpressionRef"/>
                  <operand xsi:type="Not">
                     <operand name="Exclusion Criteria" xsi:type="ExpressionRef"/>
                  </operand>
               </operand>
               <operand xsi:type="Not">
                  <operand xsi:type="Exists">
                     <operand name="Opioid Risk Assessment in Past 90 Days" xsi:type="ExpressionRef"/>
                  </operand>
               </operand>
            </operand>
            <operand xsi:type="Or">
               <operand name="Rx Active 7 of Past 10 Days With Encounter" xsi:type="ExpressionRef"/>
               <operand xsi:type="SingletonFrom">
                  <operand name="Rx Active 63 of Past 90 Days" xsi:type="ExpressionRef"/>
               </operand>
            </operand>
         </expression>
      </def>
      <def name="Get Indicator" context="Patient" accessLevel="Public">
         <expression valueType="t:String" value="warning" xsi:type="Literal"/>
      </def>
      <def name="Get Summary" context="Patient" accessLevel="Public">
         <expression valueType="t:String" value="Patients on opioid therapy should be evaluated for benefits and harms within 1 to 4 weeks of starting opioid therapy and every 3 months or more subsequently." xsi:type="Literal"/>
      </def>
      <def name="Get Detail" context="Patient" accessLevel="Public">
         <expression xsi:type="If">
            <condition xsi:type="SingletonFrom">
               <operand name="Rx Active 63 of Past 90 Days" xsi:type="ExpressionRef"/>
            </condition>
            <then valueType="t:String" value="No evaluation for benefits and harms associated with opioid therapy has been performed for the patient in the past 3 months" xsi:type="Literal"/>
            <else valueType="t:String" value="No evaluation for benefits and harms has been performed for the patient starting opioid therapy" xsi:type="Literal"/>
         </expression>
      </def>
   </statements>
</library>

      

{
  "resourceType" : "Library",
  "id" : "opioidcds-recommendation-07",
  "meta" : {
    "versionId" : "1",
    "lastUpdated" : "2021-05-24T10:50:20.563Z",
    "tag" : [
      {
        "system" : "http://terminology.hl7.org/CodeSystem/v3-ActReason",
        "code" : "HTEST",
        "display" : "test health data"
      }
    ]
  },
  "text" : {
    "status" : "generated",
    "div" : "<div xmlns=\"http://www.w3.org/1999/xhtml\">\n <h2>Participants</h2>\n <table class=\"grid\">\n <tr>\n <td>Author</td>\n <td>Kensaku Kawamoto, MD, PhD, MHS</td>\n </tr>\n <tr>\n <td>Author</td>\n <td>Bryn Rhodes</td>\n </tr>\n <tr>\n <td>Author</td>\n <td>Floyd Eisenberg, MD, MPH</td>\n </tr>\n <tr>\n <td>Author</td>\n <td>Robert McClure, MD, MPH</td>\n </tr>\n </table>\n <h2>Related Artifacts</h2>\n <table class=\"grid\">\n <tr>\n <td>Documentation</td>\n <td>CDC guideline for prescribing opioids for chronic pain</td>\n <td>https://guidelines.gov/summaries/summary/50153/cdc-guideline-for-prescribing-opioids-for-chronic-pain---united-states-2016#420</td>\n </tr>\n <tr>\n <td>Depends On</td>\n <td/>\n <td>\n <code>http://example.org/fhir/Library/opioidcds-common</code>\n </td>\n </tr>\n </table>\n <h2>Data Requirements</h2>\n <table class=\"grid\">\n <tr>\n <td colspan=\"2\">\n <b>Type</b>: \n <a href=\"medicationrequest.html\">MedicationRequest</a>\n </td>\n </tr>\n <tr style=\"background-color: #efefef\">\n <td>Filter</td>\n <td>Value</td>\n </tr>\n <tr>\n <td>medicationCodeableConcept</td>\n <td>In ValueSet \n <a href=\"http://example.org/fhir/ValueSet/opioids-indicating-end-of-life\">http://example.org/fhir/ValueSet/opioids-indicating-end-of-life</a>\n </td>\n </tr>\n </table>\n <table class=\"grid\">\n <tr>\n <td colspan=\"2\">\n <b>Type</b>: \n <a href=\"procedure.html\">Procedure</a>\n </td>\n </tr>\n <tr style=\"background-color: #efefef\">\n <td>Filter</td>\n <td>Value</td>\n </tr>\n <tr>\n <td>code</td>\n <td>One of these codes: </td>\n </tr>\n </table>\n <table class=\"grid\">\n <tr>\n <td colspan=\"2\">\n <b>Type</b>: \n <a href=\"procedure.html\">Procedure</a>\n </td>\n </tr>\n <tr style=\"background-color: #efefef\">\n <td>Filter</td>\n <td>Value</td>\n </tr>\n <tr>\n <td>code</td>\n <td>One of these codes: </td>\n </tr>\n </table>\n <table class=\"grid\">\n <tr>\n <td colspan=\"2\">\n <b>Type</b>: \n <a href=\"medicationrequest.html\">MedicationRequest</a>\n </td>\n </tr>\n <tr style=\"background-color: #efefef\">\n <td>Filter</td>\n <td>Value</td>\n </tr>\n <tr>\n <td>medicationCodeableConcept</td>\n <td>In ValueSet \n <a href=\"http://example.org/fhir/ValueSet/opioids-abused-in-ambulatory-care\">http://example.org/fhir/ValueSet/opioids-abused-in-ambulatory-care</a>\n </td>\n </tr>\n </table>\n <table class=\"grid\">\n <tr>\n <td colspan=\"2\">\n <b>Type</b>: \n <a href=\"encounter.html\">Encounter</a>\n </td>\n </tr>\n </table>\n <h2>Contents</h2>\n <p>\n <code>application/elm+xml</code>\n </p>\n <pre>\n <code class=\"language-xml\">&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&gt;\n&lt;library xmlns=\"urn:hl7-org:elm:r1\" xmlns:t=\"urn:hl7-org:elm-types:r1\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:fhir=\"http://hl7.org/fhir\" xmlns:qdm43=\"urn:healthit-gov:qdm:v4_3\" xmlns:qdm53=\"urn:healthit-gov:qdm:v5_3\" xmlns:a=\"urn:hl7-org:cql-annotations:r1\"&gt;\n &lt;annotation startLine=\"76\" startChar=\"3\" endLine=\"76\" endChar=\"51\" message=\"Could not resolve code path medicationCodeableConcept for the type of the retrieve FHIR.MedicationRequest.\" errorType=\"semantic\" errorSeverity=\"warning\" xsi:type=\"a:CqlToElmError\"/&gt;\n &lt;annotation startLine=\"76\" startChar=\"3\" endLine=\"76\" endChar=\"51\" message=\"Could not resolve membership operator for terminology target of the retrieve.\" errorType=\"semantic\" errorSeverity=\"warning\" xsi:type=\"a:CqlToElmError\"/&gt;\n &lt;annotation startLine=\"85\" startChar=\"4\" endLine=\"85\" endChar=\"53\" message=\"Could not resolve membership operator for terminology target of the retrieve.\" errorType=\"semantic\" errorSeverity=\"warning\" xsi:type=\"a:CqlToElmError\"/&gt;\n &lt;annotation startLine=\"86\" startChar=\"13\" endLine=\"86\" endChar=\"52\" message=\"Could not resolve membership operator for terminology target of the retrieve.\" errorType=\"semantic\" errorSeverity=\"warning\" xsi:type=\"a:CqlToElmError\"/&gt;\n &lt;annotation startLine=\"95\" startChar=\"3\" endLine=\"95\" endChar=\"66\" message=\"Could not resolve code path medicationCodeableConcept for the type of the retrieve FHIR.MedicationRequest.\" errorType=\"semantic\" errorSeverity=\"warning\" xsi:type=\"a:CqlToElmError\"/&gt;\n &lt;annotation startLine=\"95\" startChar=\"3\" endLine=\"95\" endChar=\"66\" message=\"Could not resolve membership operator for terminology target of the retrieve.\" errorType=\"semantic\" errorSeverity=\"warning\" xsi:type=\"a:CqlToElmError\"/&gt;\n &lt;annotation startLine=\"103\" startChar=\"10\" endLine=\"103\" endChar=\"70\" message=\"List-valued expression was demoted to a singleton.\" errorType=\"semantic\" errorSeverity=\"warning\" xsi:type=\"a:CqlToElmError\"/&gt;\n &lt;annotation startLine=\"69\" startChar=\"59\" endLine=\"69\" endChar=\"88\" message=\"List-valued expression was demoted to a singleton.\" errorType=\"semantic\" errorSeverity=\"warning\" xsi:type=\"a:CqlToElmError\"/&gt;\n &lt;annotation startLine=\"115\" startChar=\"6\" endLine=\"115\" endChar=\"35\" message=\"List-valued expression was demoted to a singleton.\" errorType=\"semantic\" errorSeverity=\"warning\" xsi:type=\"a:CqlToElmError\"/&gt;\n &lt;identifier id=\"OpioidCDS_STU4_REC_07\" version=\"0.1.0\"/&gt;\n &lt;schemaIdentifier id=\"urn:hl7-org:elm\" version=\"r1\"/&gt;\n &lt;usings&gt;\n &lt;def localIdentifier=\"System\" uri=\"urn:hl7-org:elm-types:r1\"/&gt;\n &lt;def localIdentifier=\"FHIR\" uri=\"http://hl7.org/fhir\" version=\"3.2.0\"/&gt;\n &lt;/usings&gt;\n &lt;includes&gt;\n &lt;def localIdentifier=\"Common\" path=\"OpioidCDS_STU4_Common\" version=\"0.1.0\"/&gt;\n &lt;/includes&gt;\n &lt;parameters&gt;\n &lt;def name=\"ContextPrescriptions\" accessLevel=\"Public\"&gt;\n &lt;parameterTypeSpecifier xsi:type=\"ListTypeSpecifier\"&gt;\n &lt;elementType name=\"fhir:MedicationRequest\" xsi:type=\"NamedTypeSpecifier\"/&gt;\n &lt;/parameterTypeSpecifier&gt;\n &lt;/def&gt;\n &lt;/parameters&gt;\n &lt;codeSystems&gt;\n &lt;def name=\"SNOMED\" id=\"http://snomed.info/sct\" accessLevel=\"Public\"/&gt;\n &lt;/codeSystems&gt;\n &lt;codes&gt;\n &lt;def name=\"Assessment of risk for opioid abuse\" id=\"454281000124100\" accessLevel=\"Public\"&gt;\n &lt;codeSystem name=\"SNOMED\"/&gt;\n &lt;/def&gt;\n &lt;def name=\"High risk drug monitoring\" id=\"268525008\" accessLevel=\"Public\"&gt;\n &lt;codeSystem name=\"SNOMED\"/&gt;\n &lt;/def&gt;\n &lt;/codes&gt;\n &lt;statements&gt;\n &lt;def name=\"Patient\" context=\"Patient\"&gt;\n &lt;expression xsi:type=\"SingletonFrom\"&gt;\n &lt;operand dataType=\"fhir:Patient\" xsi:type=\"Retrieve\"/&gt;\n &lt;/expression&gt;\n &lt;/def&gt;\n &lt;def name=\"Risk Assessment Interval\" context=\"Patient\" accessLevel=\"Public\"&gt;\n &lt;expression lowClosed=\"true\" highClosed=\"true\" xsi:type=\"Interval\"&gt;\n &lt;low xsi:type=\"Subtract\"&gt;\n &lt;operand xsi:type=\"Today\"/&gt;\n &lt;operand value=\"91\" unit=\"days\" xsi:type=\"Quantity\"/&gt;\n &lt;/low&gt;\n &lt;high xsi:type=\"Subtract\"&gt;\n &lt;operand xsi:type=\"Today\"/&gt;\n &lt;operand value=\"1\" unit=\"day\" xsi:type=\"Quantity\"/&gt;\n &lt;/high&gt;\n &lt;/expression&gt;\n &lt;/def&gt;\n &lt;def name=\"Encounter Interval\" context=\"Patient\" accessLevel=\"Public\"&gt;\n &lt;expression lowClosed=\"true\" highClosed=\"true\" xsi:type=\"Interval\"&gt;\n &lt;low xsi:type=\"Subtract\"&gt;\n &lt;operand xsi:type=\"Subtract\"&gt;\n &lt;operand xsi:type=\"Today\"/&gt;\n &lt;operand value=\"12\" unit=\"months\" xsi:type=\"Quantity\"/&gt;\n &lt;/operand&gt;\n &lt;operand value=\"1\" unit=\"days\" xsi:type=\"Quantity\"/&gt;\n &lt;/low&gt;\n &lt;high xsi:type=\"Subtract\"&gt;\n &lt;operand xsi:type=\"Today\"/&gt;\n &lt;operand value=\"1\" unit=\"day\" xsi:type=\"Quantity\"/&gt;\n &lt;/high&gt;\n &lt;/expression&gt;\n &lt;/def&gt;\n &lt;def name=\"Validate Trigger Event\" context=\"Patient\" accessLevel=\"Public\"&gt;\n &lt;expression xsi:type=\"Exists\"&gt;\n &lt;operand xsi:type=\"Query\"&gt;\n &lt;source alias=\"triggerScript\"&gt;\n &lt;expression name=\"ContextPrescriptions\" xsi:type=\"ParameterRef\"/&gt;\n &lt;/source&gt;\n &lt;where name=\"IsOpioidWithAmbulatoryAbusePotential\" libraryName=\"Common\" xsi:type=\"FunctionRef\"&gt;\n &lt;operand name=\"ToCode\" libraryName=\"Common\" xsi:type=\"FunctionRef\"&gt;\n &lt;operand xsi:type=\"Indexer\"&gt;\n &lt;operand path=\"coding\" xsi:type=\"Property\"&gt;\n &lt;source path=\"medication\" scope=\"triggerScript\" xsi:type=\"Property\"/&gt;\n &lt;/operand&gt;\n &lt;operand valueType=\"t:Integer\" value=\"0\" xsi:type=\"Literal\"/&gt;\n &lt;/operand&gt;\n &lt;/operand&gt;\n &lt;/where&gt;\n &lt;/operand&gt;\n &lt;/expression&gt;\n &lt;/def&gt;\n &lt;def name=\"Medications Indicating End Of Life\" context=\"Patient\" accessLevel=\"Public\"&gt;\n &lt;expression xsi:type=\"Query\"&gt;\n &lt;source alias=\"endOfLifeRx\"&gt;\n &lt;expression dataType=\"fhir:MedicationRequest\" codeProperty=\"medicationCodeableConcept\" xsi:type=\"Retrieve\"&gt;\n &lt;codes name=\"End Of Life Opioids\" libraryName=\"Common\" xsi:type=\"ValueSetRef\"/&gt;\n &lt;/expression&gt;\n &lt;/source&gt;\n &lt;where xsi:type=\"Equal\"&gt;\n &lt;operand path=\"value\" xsi:type=\"Property\"&gt;\n &lt;source path=\"status\" scope=\"endOfLifeRx\" xsi:type=\"Property\"/&gt;\n &lt;/operand&gt;\n &lt;operand valueType=\"t:String\" value=\"active\" xsi:type=\"Literal\"/&gt;\n &lt;/where&gt;\n &lt;/expression&gt;\n &lt;/def&gt;\n &lt;def name=\"Exclusion Criteria\" context=\"Patient\" accessLevel=\"Public\"&gt;\n &lt;expression xsi:type=\"Exists\"&gt;\n &lt;operand name=\"Medications Indicating End Of Life\" xsi:type=\"ExpressionRef\"/&gt;\n &lt;/expression&gt;\n &lt;/def&gt;\n &lt;def name=\"Opioid Risk Assessment in Past 90 Days\" context=\"Patient\" accessLevel=\"Public\"&gt;\n &lt;expression xsi:type=\"Query\"&gt;\n &lt;source alias=\"riskAssessment\"&gt;\n &lt;expression xsi:type=\"Union\"&gt;\n &lt;operand dataType=\"fhir:Procedure\" codeProperty=\"code\" xsi:type=\"Retrieve\"&gt;\n &lt;codes name=\"Assessment of risk for opioid abuse\" xsi:type=\"CodeRef\"/&gt;\n &lt;/operand&gt;\n &lt;operand dataType=\"fhir:Procedure\" codeProperty=\"code\" xsi:type=\"Retrieve\"&gt;\n &lt;codes name=\"High risk drug monitoring\" xsi:type=\"CodeRef\"/&gt;\n &lt;/operand&gt;\n &lt;/expression&gt;\n &lt;/source&gt;\n &lt;where xsi:type=\"In\"&gt;\n &lt;operand path=\"value\" xsi:type=\"Property\"&gt;\n &lt;source path=\"start\" xsi:type=\"Property\"&gt;\n &lt;source path=\"performed\" scope=\"riskAssessment\" xsi:type=\"Property\"/&gt;\n &lt;/source&gt;\n &lt;/operand&gt;\n &lt;operand name=\"Risk Assessment Interval\" xsi:type=\"ExpressionRef\"/&gt;\n &lt;/where&gt;\n &lt;/expression&gt;\n &lt;/def&gt;\n &lt;def name=\"Get Active Ambulatory Opioid Rx\" context=\"Patient\" accessLevel=\"Public\"&gt;\n &lt;expression xsi:type=\"Query\"&gt;\n &lt;source alias=\"Rx\"&gt;\n &lt;expression dataType=\"fhir:MedicationRequest\" codeProperty=\"medicationCodeableConcept\" xsi:type=\"Retrieve\"&gt;\n &lt;codes name=\"Ambulatory Abuse Potential Opioids\" libraryName=\"Common\" xsi:type=\"ValueSetRef\"/&gt;\n &lt;/expression&gt;\n &lt;/source&gt;\n &lt;where xsi:type=\"And\"&gt;\n &lt;operand xsi:type=\"Equal\"&gt;\n &lt;operand path=\"value\" xsi:type=\"Property\"&gt;\n &lt;source path=\"status\" scope=\"Rx\" xsi:type=\"Property\"/&gt;\n &lt;/operand&gt;\n &lt;operand valueType=\"t:String\" value=\"active\" xsi:type=\"Literal\"/&gt;\n &lt;/operand&gt;\n &lt;operand xsi:type=\"Equal\"&gt;\n &lt;operand path=\"value\" xsi:type=\"Property\"&gt;\n &lt;source path=\"code\" xsi:type=\"Property\"&gt;\n &lt;source xsi:type=\"Indexer\"&gt;\n &lt;operand xsi:type=\"Flatten\"&gt;\n &lt;operand xsi:type=\"Query\"&gt;\n &lt;source alias=\"$this\"&gt;\n &lt;expression path=\"category\" scope=\"Rx\" xsi:type=\"Property\"/&gt;\n &lt;/source&gt;\n &lt;where xsi:type=\"Not\"&gt;\n &lt;operand xsi:type=\"IsNull\"&gt;\n &lt;operand path=\"coding\" xsi:type=\"Property\"&gt;\n &lt;source name=\"$this\" xsi:type=\"AliasRef\"/&gt;\n &lt;/operand&gt;\n &lt;/operand&gt;\n &lt;/where&gt;\n &lt;return&gt;\n &lt;expression path=\"coding\" xsi:type=\"Property\"&gt;\n &lt;source name=\"$this\" xsi:type=\"AliasRef\"/&gt;\n &lt;/expression&gt;\n &lt;/return&gt;\n &lt;/operand&gt;\n &lt;/operand&gt;\n &lt;operand valueType=\"t:Integer\" value=\"0\" xsi:type=\"Literal\"/&gt;\n &lt;/source&gt;\n &lt;/source&gt;\n &lt;/operand&gt;\n &lt;operand valueType=\"t:String\" value=\"outpatient\" xsi:type=\"Literal\"/&gt;\n &lt;/operand&gt;\n &lt;/where&gt;\n &lt;/expression&gt;\n &lt;/def&gt;\n &lt;def name=\"Encounter in past 12 months\" context=\"Patient\" accessLevel=\"Public\"&gt;\n &lt;expression xsi:type=\"Query\"&gt;\n &lt;source alias=\"E\"&gt;\n &lt;expression dataType=\"fhir:Encounter\" xsi:type=\"Retrieve\"/&gt;\n &lt;/source&gt;\n &lt;where xsi:type=\"In\"&gt;\n &lt;operand path=\"value\" xsi:type=\"Property\"&gt;\n &lt;source path=\"start\" xsi:type=\"Property\"&gt;\n &lt;source path=\"period\" scope=\"E\" xsi:type=\"Property\"/&gt;\n &lt;/source&gt;\n &lt;/operand&gt;\n &lt;operand name=\"Encounter Interval\" xsi:type=\"ExpressionRef\"/&gt;\n &lt;/where&gt;\n &lt;/expression&gt;\n &lt;/def&gt;\n &lt;def name=\"Rx Active 7 of Past 10 Days With Encounter\" context=\"Patient\" accessLevel=\"Public\"&gt;\n &lt;expression xsi:type=\"And\"&gt;\n &lt;operand xsi:type=\"SingletonFrom\"&gt;\n &lt;operand name=\"ProbableDaysInRange\" libraryName=\"Common\" xsi:type=\"FunctionRef\"&gt;\n &lt;operand name=\"Get Active Ambulatory Opioid Rx\" xsi:type=\"ExpressionRef\"/&gt;\n &lt;operand valueType=\"t:Integer\" value=\"10\" xsi:type=\"Literal\"/&gt;\n &lt;operand valueType=\"t:Integer\" value=\"7\" xsi:type=\"Literal\"/&gt;\n &lt;/operand&gt;\n &lt;/operand&gt;\n &lt;operand xsi:type=\"Exists\"&gt;\n &lt;operand name=\"Encounter in past 12 months\" xsi:type=\"ExpressionRef\"/&gt;\n &lt;/operand&gt;\n &lt;/expression&gt;\n &lt;/def&gt;\n &lt;def name=\"Rx Active 63 of Past 90 Days\" context=\"Patient\" accessLevel=\"Public\"&gt;\n &lt;expression name=\"ProbableDaysInRange\" libraryName=\"Common\" xsi:type=\"FunctionRef\"&gt;\n &lt;operand name=\"Get Active Ambulatory Opioid Rx\" xsi:type=\"ExpressionRef\"/&gt;\n &lt;operand valueType=\"t:Integer\" value=\"90\" xsi:type=\"Literal\"/&gt;\n &lt;operand valueType=\"t:Integer\" value=\"63\" xsi:type=\"Literal\"/&gt;\n &lt;/expression&gt;\n &lt;/def&gt;\n &lt;def name=\"Inclusion Criteria\" context=\"Patient\" accessLevel=\"Public\"&gt;\n &lt;expression xsi:type=\"And\"&gt;\n &lt;operand xsi:type=\"And\"&gt;\n &lt;operand xsi:type=\"And\"&gt;\n &lt;operand name=\"Validate Trigger Event\" xsi:type=\"ExpressionRef\"/&gt;\n &lt;operand xsi:type=\"Not\"&gt;\n &lt;operand name=\"Exclusion Criteria\" xsi:type=\"ExpressionRef\"/&gt;\n &lt;/operand&gt;\n &lt;/operand&gt;\n &lt;operand xsi:type=\"Not\"&gt;\n &lt;operand xsi:type=\"Exists\"&gt;\n &lt;operand name=\"Opioid Risk Assessment in Past 90 Days\" xsi:type=\"ExpressionRef\"/&gt;\n &lt;/operand&gt;\n &lt;/operand&gt;\n &lt;/operand&gt;\n &lt;operand xsi:type=\"Or\"&gt;\n &lt;operand name=\"Rx Active 7 of Past 10 Days With Encounter\" xsi:type=\"ExpressionRef\"/&gt;\n &lt;operand xsi:type=\"SingletonFrom\"&gt;\n &lt;operand name=\"Rx Active 63 of Past 90 Days\" xsi:type=\"ExpressionRef\"/&gt;\n &lt;/operand&gt;\n &lt;/operand&gt;\n &lt;/expression&gt;\n &lt;/def&gt;\n &lt;def name=\"Get Indicator\" context=\"Patient\" accessLevel=\"Public\"&gt;\n &lt;expression valueType=\"t:String\" value=\"warning\" xsi:type=\"Literal\"/&gt;\n &lt;/def&gt;\n &lt;def name=\"Get Summary\" context=\"Patient\" accessLevel=\"Public\"&gt;\n &lt;expression valueType=\"t:String\" value=\"Patients on opioid therapy should be evaluated for benefits and harms within 1 to 4 weeks of starting opioid therapy and every 3 months or more subsequently.\" xsi:type=\"Literal\"/&gt;\n &lt;/def&gt;\n &lt;def name=\"Get Detail\" context=\"Patient\" accessLevel=\"Public\"&gt;\n &lt;expression xsi:type=\"If\"&gt;\n &lt;condition xsi:type=\"SingletonFrom\"&gt;\n &lt;operand name=\"Rx Active 63 of Past 90 Days\" xsi:type=\"ExpressionRef\"/&gt;\n &lt;/condition&gt;\n &lt;then valueType=\"t:String\" value=\"No evaluation for benefits and harms associated with opioid therapy has been performed for the patient in the past 3 months\" xsi:type=\"Literal\"/&gt;\n &lt;else valueType=\"t:String\" value=\"No evaluation for benefits and harms has been performed for the patient starting opioid therapy\" xsi:type=\"Literal\"/&gt;\n &lt;/expression&gt;\n &lt;/def&gt;\n &lt;/statements&gt;\n&lt;/library&gt;\n</code>\n </pre>\n </div>"
  },
  "identifier" : [
    {
      "use" : "official",
      "value" : "OpioidCDS_REC_07"
    }
  ],
  "version" : "0.1.0",
  "title" : "Opioid CDS Logic for recommendation #7",
  "status" : "active",
  "experimental" : false,
  "type" : {
    "coding" : [
      {
        "system" : "http://terminology.hl7.org/CodeSystem/library-type",
        "code" : "logic-library",
        "display" : "Logic Library"
      }
    ]
  },
  "date" : "2018-03-25T13:49:09-06:00",
  "publisher" : "Centers for Disease Control and Prevention (CDC)",
  "description" : "Opioid decision support logic to evaluate benefits and harms with patients within 1 to 4 weeks of starting opioid therapy and harms of continued therapy with patients every 3 months or more frequently.",
  "useContext" : [
    {
      "code" : {
        "system" : "http://terminology.hl7.org/CodeSystem/usage-context-type",
        "code" : "focus",
        "display" : "Clinical Focus"
      },
      "valueCodeableConcept" : {
        "coding" : [
          {
            "system" : "http://snomed.info/sct",
            "code" : "182888003",
            "display" : "Medication requested (situation)"
          }
        ]
      }
    },
    {
      "code" : {
        "system" : "http://terminology.hl7.org/CodeSystem/usage-context-type",
        "code" : "focus",
        "display" : "Clinical Focus"
      },
      "valueCodeableConcept" : {
        "coding" : [
          {
            "system" : "http://snomed.info/sct",
            "code" : "82423001",
            "display" : "Chronic pain (finding)"
          }
        ]
      }
    }
  ],
  "jurisdiction" : [
    {
      "coding" : [
        {
          "system" : "urn:iso:std:iso:3166",
          "code" : "US",
          "display" : "United States of America"
        }
      ]
    }
  ],
  "purpose" : "The purpose of this library is to determine whether the patient has been evaluated for benefits and harms within 1 to 4 weeks of starting opioid therapy and every 3 months or more subsequently.",
  "usage" : "This library is used to notify the prescriber/user whether an evaluation for benefits and harms associated with opioid therapy is recommended for the patient.",
  "copyright" : "© CDC 2016+.",
  "topic" : [
    {
      "text" : "Opioid Prescribing"
    }
  ],
  "author" : [
    {
      "name" : "Kensaku Kawamoto, MD, PhD, MHS
"
    },
    {
      "name" : "Bryn Rhodes"
    },
    {
      "name" : "Floyd Eisenberg, MD, MPH"
    },
    {
      "name" : "Robert McClure, MD, MPH"
    }
  ],
  "relatedArtifact" : [
    {
      "type" : "documentation",
      "display" : "CDC guideline for prescribing opioids for chronic pain",
      "url" : "https://guidelines.gov/summaries/summary/50153/cdc-guideline-for-prescribing-opioids-for-chronic-pain---united-states-2016#420"
    },
    {
      "type" : "depends-on",
      "resource" : "http://example.org/fhir/Library/opioidcds-common"
    }
  ],
  "dataRequirement" : [
    {
      "type" : "MedicationRequest",
      "codeFilter" : [
        {
          "path" : "medicationCodeableConcept",
          "valueSet" : "http://example.org/fhir/ValueSet/opioids-indicating-end-of-life"
        }
      ]
    },
    {
      "type" : "Procedure",
      "codeFilter" : [
        {
          "path" : "code"
        }
      ]
    },
    {
      "type" : "Procedure",
      "codeFilter" : [
        {
          "path" : "code"
        }
      ]
    },
    {
      "type" : "MedicationRequest",
      "codeFilter" : [
        {
          "path" : "medicationCodeableConcept",
          "valueSet" : "http://example.org/fhir/ValueSet/opioids-abused-in-ambulatory-care"
        }
      ]
    },
    {
      "type" : "Encounter"
    }
  ],
  "content" : [
    {
      "contentType" : "application/elm+xml",
      "data" : "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPGxpYnJhcnkgeG1sbnM9InVybjpobDctb3JnOmVsbTpyMSIgeG1sbnM6dD0idXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczpmaGlyPSJodHRwOi8vaGw3Lm9yZy9maGlyIiB4bWxuczpxZG00Mz0idXJuOmhlYWx0aGl0LWdvdjpxZG06djRfMyIgeG1sbnM6cWRtNTM9InVybjpoZWFsdGhpdC1nb3Y6cWRtOnY1XzMiIHhtbG5zOmE9InVybjpobDctb3JnOmNxbC1hbm5vdGF0aW9uczpyMSI+CiAgIDxhbm5vdGF0aW9uIHN0YXJ0TGluZT0iNzYiIHN0YXJ0Q2hhcj0iMyIgZW5kTGluZT0iNzYiIGVuZENoYXI9IjUxIiBtZXNzYWdlPSJDb3VsZCBub3QgcmVzb2x2ZSBjb2RlIHBhdGggbWVkaWNhdGlvbkNvZGVhYmxlQ29uY2VwdCBmb3IgdGhlIHR5cGUgb2YgdGhlIHJldHJpZXZlIEZISVIuTWVkaWNhdGlvblJlcXVlc3QuIiBlcnJvclR5cGU9InNlbWFudGljIiBlcnJvclNldmVyaXR5PSJ3YXJuaW5nIiB4c2k6dHlwZT0iYTpDcWxUb0VsbUVycm9yIi8+CiAgIDxhbm5vdGF0aW9uIHN0YXJ0TGluZT0iNzYiIHN0YXJ0Q2hhcj0iMyIgZW5kTGluZT0iNzYiIGVuZENoYXI9IjUxIiBtZXNzYWdlPSJDb3VsZCBub3QgcmVzb2x2ZSBtZW1iZXJzaGlwIG9wZXJhdG9yIGZvciB0ZXJtaW5vbG9neSB0YXJnZXQgb2YgdGhlIHJldHJpZXZlLiIgZXJyb3JUeXBlPSJzZW1hbnRpYyIgZXJyb3JTZXZlcml0eT0id2FybmluZyIgeHNpOnR5cGU9ImE6Q3FsVG9FbG1FcnJvciIvPgogICA8YW5ub3RhdGlvbiBzdGFydExpbmU9Ijg1IiBzdGFydENoYXI9IjQiIGVuZExpbmU9Ijg1IiBlbmRDaGFyPSI1MyIgbWVzc2FnZT0iQ291bGQgbm90IHJlc29sdmUgbWVtYmVyc2hpcCBvcGVyYXRvciBmb3IgdGVybWlub2xvZ3kgdGFyZ2V0IG9mIHRoZSByZXRyaWV2ZS4iIGVycm9yVHlwZT0ic2VtYW50aWMiIGVycm9yU2V2ZXJpdHk9Indhcm5pbmciIHhzaTp0eXBlPSJhOkNxbFRvRWxtRXJyb3IiLz4KICAgPGFubm90YXRpb24gc3RhcnRMaW5lPSI4NiIgc3RhcnRDaGFyPSIxMyIgZW5kTGluZT0iODYiIGVuZENoYXI9IjUyIiBtZXNzYWdlPSJDb3VsZCBub3QgcmVzb2x2ZSBtZW1iZXJzaGlwIG9wZXJhdG9yIGZvciB0ZXJtaW5vbG9neSB0YXJnZXQgb2YgdGhlIHJldHJpZXZlLiIgZXJyb3JUeXBlPSJzZW1hbnRpYyIgZXJyb3JTZXZlcml0eT0id2FybmluZyIgeHNpOnR5cGU9ImE6Q3FsVG9FbG1FcnJvciIvPgogICA8YW5ub3RhdGlvbiBzdGFydExpbmU9Ijk1IiBzdGFydENoYXI9IjMiIGVuZExpbmU9Ijk1IiBlbmRDaGFyPSI2NiIgbWVzc2FnZT0iQ291bGQgbm90IHJlc29sdmUgY29kZSBwYXRoIG1lZGljYXRpb25Db2RlYWJsZUNvbmNlcHQgZm9yIHRoZSB0eXBlIG9mIHRoZSByZXRyaWV2ZSBGSElSLk1lZGljYXRpb25SZXF1ZXN0LiIgZXJyb3JUeXBlPSJzZW1hbnRpYyIgZXJyb3JTZXZlcml0eT0id2FybmluZyIgeHNpOnR5cGU9ImE6Q3FsVG9FbG1FcnJvciIvPgogICA8YW5ub3RhdGlvbiBzdGFydExpbmU9Ijk1IiBzdGFydENoYXI9IjMiIGVuZExpbmU9Ijk1IiBlbmRDaGFyPSI2NiIgbWVzc2FnZT0iQ291bGQgbm90IHJlc29sdmUgbWVtYmVyc2hpcCBvcGVyYXRvciBmb3IgdGVybWlub2xvZ3kgdGFyZ2V0IG9mIHRoZSByZXRyaWV2ZS4iIGVycm9yVHlwZT0ic2VtYW50aWMiIGVycm9yU2V2ZXJpdHk9Indhcm5pbmciIHhzaTp0eXBlPSJhOkNxbFRvRWxtRXJyb3IiLz4KICAgPGFubm90YXRpb24gc3RhcnRMaW5lPSIxMDMiIHN0YXJ0Q2hhcj0iMTAiIGVuZExpbmU9IjEwMyIgZW5kQ2hhcj0iNzAiIG1lc3NhZ2U9Ikxpc3QtdmFsdWVkIGV4cHJlc3Npb24gd2FzIGRlbW90ZWQgdG8gYSBzaW5nbGV0b24uIiBlcnJvclR5cGU9InNlbWFudGljIiBlcnJvclNldmVyaXR5PSJ3YXJuaW5nIiB4c2k6dHlwZT0iYTpDcWxUb0VsbUVycm9yIi8+CiAgIDxhbm5vdGF0aW9uIHN0YXJ0TGluZT0iNjkiIHN0YXJ0Q2hhcj0iNTkiIGVuZExpbmU9IjY5IiBlbmRDaGFyPSI4OCIgbWVzc2FnZT0iTGlzdC12YWx1ZWQgZXhwcmVzc2lvbiB3YXMgZGVtb3RlZCB0byBhIHNpbmdsZXRvbi4iIGVycm9yVHlwZT0ic2VtYW50aWMiIGVycm9yU2V2ZXJpdHk9Indhcm5pbmciIHhzaTp0eXBlPSJhOkNxbFRvRWxtRXJyb3IiLz4KICAgPGFubm90YXRpb24gc3RhcnRMaW5lPSIxMTUiIHN0YXJ0Q2hhcj0iNiIgZW5kTGluZT0iMTE1IiBlbmRDaGFyPSIzNSIgbWVzc2FnZT0iTGlzdC12YWx1ZWQgZXhwcmVzc2lvbiB3YXMgZGVtb3RlZCB0byBhIHNpbmdsZXRvbi4iIGVycm9yVHlwZT0ic2VtYW50aWMiIGVycm9yU2V2ZXJpdHk9Indhcm5pbmciIHhzaTp0eXBlPSJhOkNxbFRvRWxtRXJyb3IiLz4KICAgPGlkZW50aWZpZXIgaWQ9Ik9waW9pZENEU19TVFU0X1JFQ18wNyIgdmVyc2lvbj0iMC4xLjAiLz4KICAgPHNjaGVtYUlkZW50aWZpZXIgaWQ9InVybjpobDctb3JnOmVsbSIgdmVyc2lvbj0icjEiLz4KICAgPHVzaW5ncz4KICAgICAgPGRlZiBsb2NhbElkZW50aWZpZXI9IlN5c3RlbSIgdXJpPSJ1cm46aGw3LW9yZzplbG0tdHlwZXM6cjEiLz4KICAgICAgPGRlZiBsb2NhbElkZW50aWZpZXI9IkZISVIiIHVyaT0iaHR0cDovL2hsNy5vcmcvZmhpciIgdmVyc2lvbj0iMy4yLjAiLz4KICAgPC91c2luZ3M+CiAgIDxpbmNsdWRlcz4KICAgICAgPGRlZiBsb2NhbElkZW50aWZpZXI9IkNvbW1vbiIgcGF0aD0iT3Bpb2lkQ0RTX1NUVTRfQ29tbW9uIiB2ZXJzaW9uPSIwLjEuMCIvPgogICA8L2luY2x1ZGVzPgogICA8cGFyYW1ldGVycz4KICAgICAgPGRlZiBuYW1lPSJDb250ZXh0UHJlc2NyaXB0aW9ucyIgYWNjZXNzTGV2ZWw9IlB1YmxpYyI+CiAgICAgICAgIDxwYXJhbWV0ZXJUeXBlU3BlY2lmaWVyIHhzaTp0eXBlPSJMaXN0VHlwZVNwZWNpZmllciI+CiAgICAgICAgICAgIDxlbGVtZW50VHlwZSBuYW1lPSJmaGlyOk1lZGljYXRpb25SZXF1ZXN0IiB4c2k6dHlwZT0iTmFtZWRUeXBlU3BlY2lmaWVyIi8+CiAgICAgICAgIDwvcGFyYW1ldGVyVHlwZVNwZWNpZmllcj4KICAgICAgPC9kZWY+CiAgIDwvcGFyYW1ldGVycz4KICAgPGNvZGVTeXN0ZW1zPgogICAgICA8ZGVmIG5hbWU9IlNOT01FRCIgaWQ9Imh0dHA6Ly9zbm9tZWQuaW5mby9zY3QiIGFjY2Vzc0xldmVsPSJQdWJsaWMiLz4KICAgPC9jb2RlU3lzdGVtcz4KICAgPGNvZGVzPgogICAgICA8ZGVmIG5hbWU9IkFzc2Vzc21lbnQgb2YgcmlzayBmb3Igb3Bpb2lkIGFidXNlIiBpZD0iNDU0MjgxMDAwMTI0MTAwIiBhY2Nlc3NMZXZlbD0iUHVibGljIj4KICAgICAgICAgPGNvZGVTeXN0ZW0gbmFtZT0iU05PTUVEIi8+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIG5hbWU9IkhpZ2ggcmlzayBkcnVnIG1vbml0b3JpbmciIGlkPSIyNjg1MjUwMDgiIGFjY2Vzc0xldmVsPSJQdWJsaWMiPgogICAgICAgICA8Y29kZVN5c3RlbSBuYW1lPSJTTk9NRUQiLz4KICAgICAgPC9kZWY+CiAgIDwvY29kZXM+CiAgIDxzdGF0ZW1lbnRzPgogICAgICA8ZGVmIG5hbWU9IlBhdGllbnQiIGNvbnRleHQ9IlBhdGllbnQiPgogICAgICAgICA8ZXhwcmVzc2lvbiB4c2k6dHlwZT0iU2luZ2xldG9uRnJvbSI+CiAgICAgICAgICAgIDxvcGVyYW5kIGRhdGFUeXBlPSJmaGlyOlBhdGllbnQiIHhzaTp0eXBlPSJSZXRyaWV2ZSIvPgogICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIG5hbWU9IlJpc2sgQXNzZXNzbWVudCBJbnRlcnZhbCIgY29udGV4dD0iUGF0aWVudCIgYWNjZXNzTGV2ZWw9IlB1YmxpYyI+CiAgICAgICAgIDxleHByZXNzaW9uIGxvd0Nsb3NlZD0idHJ1ZSIgaGlnaENsb3NlZD0idHJ1ZSIgeHNpOnR5cGU9IkludGVydmFsIj4KICAgICAgICAgICAgPGxvdyB4c2k6dHlwZT0iU3VidHJhY3QiPgogICAgICAgICAgICAgICA8b3BlcmFuZCB4c2k6dHlwZT0iVG9kYXkiLz4KICAgICAgICAgICAgICAgPG9wZXJhbmQgdmFsdWU9IjkxIiB1bml0PSJkYXlzIiB4c2k6dHlwZT0iUXVhbnRpdHkiLz4KICAgICAgICAgICAgPC9sb3c+CiAgICAgICAgICAgIDxoaWdoIHhzaTp0eXBlPSJTdWJ0cmFjdCI+CiAgICAgICAgICAgICAgIDxvcGVyYW5kIHhzaTp0eXBlPSJUb2RheSIvPgogICAgICAgICAgICAgICA8b3BlcmFuZCB2YWx1ZT0iMSIgdW5pdD0iZGF5IiB4c2k6dHlwZT0iUXVhbnRpdHkiLz4KICAgICAgICAgICAgPC9oaWdoPgogICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIG5hbWU9IkVuY291bnRlciBJbnRlcnZhbCIgY29udGV4dD0iUGF0aWVudCIgYWNjZXNzTGV2ZWw9IlB1YmxpYyI+CiAgICAgICAgIDxleHByZXNzaW9uIGxvd0Nsb3NlZD0idHJ1ZSIgaGlnaENsb3NlZD0idHJ1ZSIgeHNpOnR5cGU9IkludGVydmFsIj4KICAgICAgICAgICAgPGxvdyB4c2k6dHlwZT0iU3VidHJhY3QiPgogICAgICAgICAgICAgICA8b3BlcmFuZCB4c2k6dHlwZT0iU3VidHJhY3QiPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCB4c2k6dHlwZT0iVG9kYXkiLz4KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgdmFsdWU9IjEyIiB1bml0PSJtb250aHMiIHhzaTp0eXBlPSJRdWFudGl0eSIvPgogICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgIDxvcGVyYW5kIHZhbHVlPSIxIiB1bml0PSJkYXlzIiB4c2k6dHlwZT0iUXVhbnRpdHkiLz4KICAgICAgICAgICAgPC9sb3c+CiAgICAgICAgICAgIDxoaWdoIHhzaTp0eXBlPSJTdWJ0cmFjdCI+CiAgICAgICAgICAgICAgIDxvcGVyYW5kIHhzaTp0eXBlPSJUb2RheSIvPgogICAgICAgICAgICAgICA8b3BlcmFuZCB2YWx1ZT0iMSIgdW5pdD0iZGF5IiB4c2k6dHlwZT0iUXVhbnRpdHkiLz4KICAgICAgICAgICAgPC9oaWdoPgogICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIG5hbWU9IlZhbGlkYXRlIFRyaWdnZXIgRXZlbnQiIGNvbnRleHQ9IlBhdGllbnQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiPgogICAgICAgICA8ZXhwcmVzc2lvbiB4c2k6dHlwZT0iRXhpc3RzIj4KICAgICAgICAgICAgPG9wZXJhbmQgeHNpOnR5cGU9IlF1ZXJ5Ij4KICAgICAgICAgICAgICAgPHNvdXJjZSBhbGlhcz0idHJpZ2dlclNjcmlwdCI+CiAgICAgICAgICAgICAgICAgIDxleHByZXNzaW9uIG5hbWU9IkNvbnRleHRQcmVzY3JpcHRpb25zIiB4c2k6dHlwZT0iUGFyYW1ldGVyUmVmIi8+CiAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICAgICA8d2hlcmUgbmFtZT0iSXNPcGlvaWRXaXRoQW1idWxhdG9yeUFidXNlUG90ZW50aWFsIiBsaWJyYXJ5TmFtZT0iQ29tbW9uIiB4c2k6dHlwZT0iRnVuY3Rpb25SZWYiPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCBuYW1lPSJUb0NvZGUiIGxpYnJhcnlOYW1lPSJDb21tb24iIHhzaTp0eXBlPSJGdW5jdGlvblJlZiI+CiAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHhzaTp0eXBlPSJJbmRleGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgcGF0aD0iY29kaW5nIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIHBhdGg9Im1lZGljYXRpb24iIHNjb3BlPSJ0cmlnZ2VyU2NyaXB0IiB4c2k6dHlwZT0iUHJvcGVydHkiLz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCB2YWx1ZVR5cGU9InQ6SW50ZWdlciIgdmFsdWU9IjAiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICA8L3doZXJlPgogICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgPC9kZWY+CiAgICAgIDxkZWYgbmFtZT0iTWVkaWNhdGlvbnMgSW5kaWNhdGluZyBFbmQgT2YgTGlmZSIgY29udGV4dD0iUGF0aWVudCIgYWNjZXNzTGV2ZWw9IlB1YmxpYyI+CiAgICAgICAgIDxleHByZXNzaW9uIHhzaTp0eXBlPSJRdWVyeSI+CiAgICAgICAgICAgIDxzb3VyY2UgYWxpYXM9ImVuZE9mTGlmZVJ4Ij4KICAgICAgICAgICAgICAgPGV4cHJlc3Npb24gZGF0YVR5cGU9ImZoaXI6TWVkaWNhdGlvblJlcXVlc3QiIGNvZGVQcm9wZXJ0eT0ibWVkaWNhdGlvbkNvZGVhYmxlQ29uY2VwdCIgeHNpOnR5cGU9IlJldHJpZXZlIj4KICAgICAgICAgICAgICAgICAgPGNvZGVzIG5hbWU9IkVuZCBPZiBMaWZlIE9waW9pZHMiIGxpYnJhcnlOYW1lPSJDb21tb24iIHhzaTp0eXBlPSJWYWx1ZVNldFJlZiIvPgogICAgICAgICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICA8d2hlcmUgeHNpOnR5cGU9IkVxdWFsIj4KICAgICAgICAgICAgICAgPG9wZXJhbmQgcGF0aD0idmFsdWUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgIDxzb3VyY2UgcGF0aD0ic3RhdHVzIiBzY29wZT0iZW5kT2ZMaWZlUngiIHhzaTp0eXBlPSJQcm9wZXJ0eSIvPgogICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgIDxvcGVyYW5kIHZhbHVlVHlwZT0idDpTdHJpbmciIHZhbHVlPSJhY3RpdmUiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgIDwvd2hlcmU+CiAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgPC9kZWY+CiAgICAgIDxkZWYgbmFtZT0iRXhjbHVzaW9uIENyaXRlcmlhIiBjb250ZXh0PSJQYXRpZW50IiBhY2Nlc3NMZXZlbD0iUHVibGljIj4KICAgICAgICAgPGV4cHJlc3Npb24geHNpOnR5cGU9IkV4aXN0cyI+CiAgICAgICAgICAgIDxvcGVyYW5kIG5hbWU9Ik1lZGljYXRpb25zIEluZGljYXRpbmcgRW5kIE9mIExpZmUiIHhzaTp0eXBlPSJFeHByZXNzaW9uUmVmIi8+CiAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgPC9kZWY+CiAgICAgIDxkZWYgbmFtZT0iT3Bpb2lkIFJpc2sgQXNzZXNzbWVudCBpbiBQYXN0IDkwIERheXMiIGNvbnRleHQ9IlBhdGllbnQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiPgogICAgICAgICA8ZXhwcmVzc2lvbiB4c2k6dHlwZT0iUXVlcnkiPgogICAgICAgICAgICA8c291cmNlIGFsaWFzPSJyaXNrQXNzZXNzbWVudCI+CiAgICAgICAgICAgICAgIDxleHByZXNzaW9uIHhzaTp0eXBlPSJVbmlvbiI+CiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGRhdGFUeXBlPSJmaGlyOlByb2NlZHVyZSIgY29kZVByb3BlcnR5PSJjb2RlIiB4c2k6dHlwZT0iUmV0cmlldmUiPgogICAgICAgICAgICAgICAgICAgICA8Y29kZXMgbmFtZT0iQXNzZXNzbWVudCBvZiByaXNrIGZvciBvcGlvaWQgYWJ1c2UiIHhzaTp0eXBlPSJDb2RlUmVmIi8+CiAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgZGF0YVR5cGU9ImZoaXI6UHJvY2VkdXJlIiBjb2RlUHJvcGVydHk9ImNvZGUiIHhzaTp0eXBlPSJSZXRyaWV2ZSI+CiAgICAgICAgICAgICAgICAgICAgIDxjb2RlcyBuYW1lPSJIaWdoIHJpc2sgZHJ1ZyBtb25pdG9yaW5nIiB4c2k6dHlwZT0iQ29kZVJlZiIvPgogICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgIDx3aGVyZSB4c2k6dHlwZT0iSW4iPgogICAgICAgICAgICAgICA8b3BlcmFuZCBwYXRoPSJ2YWx1ZSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgPHNvdXJjZSBwYXRoPSJzdGFydCIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBwYXRoPSJwZXJmb3JtZWQiIHNjb3BlPSJyaXNrQXNzZXNzbWVudCIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+CiAgICAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgIDxvcGVyYW5kIG5hbWU9IlJpc2sgQXNzZXNzbWVudCBJbnRlcnZhbCIgeHNpOnR5cGU9IkV4cHJlc3Npb25SZWYiLz4KICAgICAgICAgICAgPC93aGVyZT4KICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICA8L2RlZj4KICAgICAgPGRlZiBuYW1lPSJHZXQgQWN0aXZlIEFtYnVsYXRvcnkgT3Bpb2lkIFJ4IiBjb250ZXh0PSJQYXRpZW50IiBhY2Nlc3NMZXZlbD0iUHVibGljIj4KICAgICAgICAgPGV4cHJlc3Npb24geHNpOnR5cGU9IlF1ZXJ5Ij4KICAgICAgICAgICAgPHNvdXJjZSBhbGlhcz0iUngiPgogICAgICAgICAgICAgICA8ZXhwcmVzc2lvbiBkYXRhVHlwZT0iZmhpcjpNZWRpY2F0aW9uUmVxdWVzdCIgY29kZVByb3BlcnR5PSJtZWRpY2F0aW9uQ29kZWFibGVDb25jZXB0IiB4c2k6dHlwZT0iUmV0cmlldmUiPgogICAgICAgICAgICAgICAgICA8Y29kZXMgbmFtZT0iQW1idWxhdG9yeSBBYnVzZSBQb3RlbnRpYWwgT3Bpb2lkcyIgbGlicmFyeU5hbWU9IkNvbW1vbiIgeHNpOnR5cGU9IlZhbHVlU2V0UmVmIi8+CiAgICAgICAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgIDx3aGVyZSB4c2k6dHlwZT0iQW5kIj4KICAgICAgICAgICAgICAgPG9wZXJhbmQgeHNpOnR5cGU9IkVxdWFsIj4KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgcGF0aD0idmFsdWUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgcGF0aD0ic3RhdHVzIiBzY29wZT0iUngiIHhzaTp0eXBlPSJQcm9wZXJ0eSIvPgogICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHZhbHVlVHlwZT0idDpTdHJpbmciIHZhbHVlPSJhY3RpdmUiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgPG9wZXJhbmQgeHNpOnR5cGU9IkVxdWFsIj4KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgcGF0aD0idmFsdWUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgcGF0aD0iY29kZSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSB4c2k6dHlwZT0iSW5kZXhlciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHhzaTp0eXBlPSJGbGF0dGVuIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgeHNpOnR5cGU9IlF1ZXJ5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBhbGlhcz0iJHRoaXMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXhwcmVzc2lvbiBwYXRoPSJjYXRlZ29yeSIgc2NvcGU9IlJ4IiB4c2k6dHlwZT0iUHJvcGVydHkiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3aGVyZSB4c2k6dHlwZT0iTm90Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgeHNpOnR5cGU9IklzTnVsbCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHBhdGg9ImNvZGluZyIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBuYW1lPSIkdGhpcyIgeHNpOnR5cGU9IkFsaWFzUmVmIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3doZXJlPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmV0dXJuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXhwcmVzc2lvbiBwYXRoPSJjb2RpbmciIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbmFtZT0iJHRoaXMiIHhzaTp0eXBlPSJBbGlhc1JlZiIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcmV0dXJuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgdmFsdWVUeXBlPSJ0OkludGVnZXIiIHZhbHVlPSIwIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9Im91dHBhdGllbnQiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgPC93aGVyZT4KICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICA8L2RlZj4KICAgICAgPGRlZiBuYW1lPSJFbmNvdW50ZXIgaW4gcGFzdCAxMiBtb250aHMiIGNvbnRleHQ9IlBhdGllbnQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiPgogICAgICAgICA8ZXhwcmVzc2lvbiB4c2k6dHlwZT0iUXVlcnkiPgogICAgICAgICAgICA8c291cmNlIGFsaWFzPSJFIj4KICAgICAgICAgICAgICAgPGV4cHJlc3Npb24gZGF0YVR5cGU9ImZoaXI6RW5jb3VudGVyIiB4c2k6dHlwZT0iUmV0cmlldmUiLz4KICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgIDx3aGVyZSB4c2k6dHlwZT0iSW4iPgogICAgICAgICAgICAgICA8b3BlcmFuZCBwYXRoPSJ2YWx1ZSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgPHNvdXJjZSBwYXRoPSJzdGFydCIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBwYXRoPSJwZXJpb2QiIHNjb3BlPSJFIiB4c2k6dHlwZT0iUHJvcGVydHkiLz4KICAgICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgPG9wZXJhbmQgbmFtZT0iRW5jb3VudGVyIEludGVydmFsIiB4c2k6dHlwZT0iRXhwcmVzc2lvblJlZiIvPgogICAgICAgICAgICA8L3doZXJlPgogICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIG5hbWU9IlJ4IEFjdGl2ZSA3IG9mIFBhc3QgMTAgRGF5cyBXaXRoIEVuY291bnRlciIgY29udGV4dD0iUGF0aWVudCIgYWNjZXNzTGV2ZWw9IlB1YmxpYyI+CiAgICAgICAgIDxleHByZXNzaW9uIHhzaTp0eXBlPSJBbmQiPgogICAgICAgICAgICA8b3BlcmFuZCB4c2k6dHlwZT0iU2luZ2xldG9uRnJvbSI+CiAgICAgICAgICAgICAgIDxvcGVyYW5kIG5hbWU9IlByb2JhYmxlRGF5c0luUmFuZ2UiIGxpYnJhcnlOYW1lPSJDb21tb24iIHhzaTp0eXBlPSJGdW5jdGlvblJlZiI+CiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIG5hbWU9IkdldCBBY3RpdmUgQW1idWxhdG9yeSBPcGlvaWQgUngiIHhzaTp0eXBlPSJFeHByZXNzaW9uUmVmIi8+CiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHZhbHVlVHlwZT0idDpJbnRlZ2VyIiB2YWx1ZT0iMTAiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHZhbHVlVHlwZT0idDpJbnRlZ2VyIiB2YWx1ZT0iNyIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgIDxvcGVyYW5kIHhzaTp0eXBlPSJFeGlzdHMiPgogICAgICAgICAgICAgICA8b3BlcmFuZCBuYW1lPSJFbmNvdW50ZXIgaW4gcGFzdCAxMiBtb250aHMiIHhzaTp0eXBlPSJFeHByZXNzaW9uUmVmIi8+CiAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICA8L2RlZj4KICAgICAgPGRlZiBuYW1lPSJSeCBBY3RpdmUgNjMgb2YgUGFzdCA5MCBEYXlzIiBjb250ZXh0PSJQYXRpZW50IiBhY2Nlc3NMZXZlbD0iUHVibGljIj4KICAgICAgICAgPGV4cHJlc3Npb24gbmFtZT0iUHJvYmFibGVEYXlzSW5SYW5nZSIgbGlicmFyeU5hbWU9IkNvbW1vbiIgeHNpOnR5cGU9IkZ1bmN0aW9uUmVmIj4KICAgICAgICAgICAgPG9wZXJhbmQgbmFtZT0iR2V0IEFjdGl2ZSBBbWJ1bGF0b3J5IE9waW9pZCBSeCIgeHNpOnR5cGU9IkV4cHJlc3Npb25SZWYiLz4KICAgICAgICAgICAgPG9wZXJhbmQgdmFsdWVUeXBlPSJ0OkludGVnZXIiIHZhbHVlPSI5MCIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgPG9wZXJhbmQgdmFsdWVUeXBlPSJ0OkludGVnZXIiIHZhbHVlPSI2MyIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICA8L2RlZj4KICAgICAgPGRlZiBuYW1lPSJJbmNsdXNpb24gQ3JpdGVyaWEiIGNvbnRleHQ9IlBhdGllbnQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiPgogICAgICAgICA8ZXhwcmVzc2lvbiB4c2k6dHlwZT0iQW5kIj4KICAgICAgICAgICAgPG9wZXJhbmQgeHNpOnR5cGU9IkFuZCI+CiAgICAgICAgICAgICAgIDxvcGVyYW5kIHhzaTp0eXBlPSJBbmQiPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCBuYW1lPSJWYWxpZGF0ZSBUcmlnZ2VyIEV2ZW50IiB4c2k6dHlwZT0iRXhwcmVzc2lvblJlZiIvPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCB4c2k6dHlwZT0iTm90Ij4KICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbmFtZT0iRXhjbHVzaW9uIENyaXRlcmlhIiB4c2k6dHlwZT0iRXhwcmVzc2lvblJlZiIvPgogICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgPG9wZXJhbmQgeHNpOnR5cGU9Ik5vdCI+CiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHhzaTp0eXBlPSJFeGlzdHMiPgogICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBuYW1lPSJPcGlvaWQgUmlzayBBc3Nlc3NtZW50IGluIFBhc3QgOTAgRGF5cyIgeHNpOnR5cGU9IkV4cHJlc3Npb25SZWYiLz4KICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgPG9wZXJhbmQgeHNpOnR5cGU9Ik9yIj4KICAgICAgICAgICAgICAgPG9wZXJhbmQgbmFtZT0iUnggQWN0aXZlIDcgb2YgUGFzdCAxMCBEYXlzIFdpdGggRW5jb3VudGVyIiB4c2k6dHlwZT0iRXhwcmVzc2lvblJlZiIvPgogICAgICAgICAgICAgICA8b3BlcmFuZCB4c2k6dHlwZT0iU2luZ2xldG9uRnJvbSI+CiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIG5hbWU9IlJ4IEFjdGl2ZSA2MyBvZiBQYXN0IDkwIERheXMiIHhzaTp0eXBlPSJFeHByZXNzaW9uUmVmIi8+CiAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIG5hbWU9IkdldCBJbmRpY2F0b3IiIGNvbnRleHQ9IlBhdGllbnQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiPgogICAgICAgICA8ZXhwcmVzc2lvbiB2YWx1ZVR5cGU9InQ6U3RyaW5nIiB2YWx1ZT0id2FybmluZyIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgPC9kZWY+CiAgICAgIDxkZWYgbmFtZT0iR2V0IFN1bW1hcnkiIGNvbnRleHQ9IlBhdGllbnQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiPgogICAgICAgICA8ZXhwcmVzc2lvbiB2YWx1ZVR5cGU9InQ6U3RyaW5nIiB2YWx1ZT0iUGF0aWVudHMgb24gb3Bpb2lkIHRoZXJhcHkgc2hvdWxkIGJlIGV2YWx1YXRlZCBmb3IgYmVuZWZpdHMgYW5kIGhhcm1zIHdpdGhpbiAxIHRvIDQgd2Vla3Mgb2Ygc3RhcnRpbmcgb3Bpb2lkIHRoZXJhcHkgYW5kIGV2ZXJ5IDMgbW9udGhzIG9yIG1vcmUgc3Vic2VxdWVudGx5LiIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgPC9kZWY+CiAgICAgIDxkZWYgbmFtZT0iR2V0IERldGFpbCIgY29udGV4dD0iUGF0aWVudCIgYWNjZXNzTGV2ZWw9IlB1YmxpYyI+CiAgICAgICAgIDxleHByZXNzaW9uIHhzaTp0eXBlPSJJZiI+CiAgICAgICAgICAgIDxjb25kaXRpb24geHNpOnR5cGU9IlNpbmdsZXRvbkZyb20iPgogICAgICAgICAgICAgICA8b3BlcmFuZCBuYW1lPSJSeCBBY3RpdmUgNjMgb2YgUGFzdCA5MCBEYXlzIiB4c2k6dHlwZT0iRXhwcmVzc2lvblJlZiIvPgogICAgICAgICAgICA8L2NvbmRpdGlvbj4KICAgICAgICAgICAgPHRoZW4gdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9Ik5vIGV2YWx1YXRpb24gZm9yIGJlbmVmaXRzIGFuZCBoYXJtcyBhc3NvY2lhdGVkIHdpdGggb3Bpb2lkIHRoZXJhcHkgaGFzIGJlZW4gcGVyZm9ybWVkIGZvciB0aGUgcGF0aWVudCBpbiB0aGUgcGFzdCAzIG1vbnRocyIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgPGVsc2UgdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9Ik5vIGV2YWx1YXRpb24gZm9yIGJlbmVmaXRzIGFuZCBoYXJtcyBoYXMgYmVlbiBwZXJmb3JtZWQgZm9yIHRoZSBwYXRpZW50IHN0YXJ0aW5nIG9waW9pZCB0aGVyYXB5IiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgIDwvZGVmPgogICA8L3N0YXRlbWVudHM+CjwvbGlicmFyeT4K"
    }
  ]
}

Library "opioidcds-recommendation-05" Version "1"

Tags: (no tags)  +

This Resource , XML or JSON representation, or the full version history.. provenance for this resource
Updated: by

Participants

Author Kensaku Kawamoto, MD, PhD, MHS
Author Bryn Rhodes
Author Floyd Eisenberg, MD, MPH
Author Robert McClure, MD, MPH

Related Artifacts

Documentation CDC guideline for prescribing opioids for chronic pain https://guidelines.gov/summaries/summary/50153/cdc-guideline-for-prescribing-opioids-for-chronic-pain---united-states-2016#420
Depends On http://example.org/fhir/Library/opioidcds-common
Documentation MME Conversion Tables https://www.cdc.gov/drugoverdose/pdf/calculating_total_daily_dose-a.pdf

Data Requirements

Type: MedicationRequest
Filter Value
status One of these codes: [not stated] active: active
category One of these codes: http://terminology.hl7.org/CodeSystem/medicationrequest-category outpatient: Outpatient

Contents

application/elm+xml

        <?xml version="1.0" encoding="UTF-8"?>
<library xmlns="urn:hl7-org:elm:r1" xmlns:t="urn:hl7-org:elm-types:r1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:fhir="http://hl7.org/fhir" xmlns:qdm43="urn:healthit-gov:qdm:v4_3" xmlns:qdm53="urn:healthit-gov:qdm:v5_3" xmlns:a="urn:hl7-org:cql-annotations:r1">
   <identifier id="OpioidCDS_STU4" version="0.1.0"/>
   <schemaIdentifier id="urn:hl7-org:elm" version="r1"/>
   <usings>
      <def localIdentifier="System" uri="urn:hl7-org:elm-types:r1"/>
      <def localIdentifier="FHIR" uri="http://hl7.org/fhir" version="3.2.0"/>
   </usings>
   <includes>
      <def localIdentifier="MMECommon" path="OpioidCDS_STU4_Common" version="0.1.0"/>
   </includes>
   <parameters>
      <def name="UserID" accessLevel="Public">
         <parameterTypeSpecifier name="t:String" xsi:type="NamedTypeSpecifier"/>
      </def>
      <def name="ContextPrescriptions" accessLevel="Public">
         <parameterTypeSpecifier xsi:type="ListTypeSpecifier">
            <elementType name="fhir:MedicationRequest" xsi:type="NamedTypeSpecifier"/>
         </parameterTypeSpecifier>
      </def>
   </parameters>
   <statements>
      <def name="Patient" context="Patient">
         <expression xsi:type="SingletonFrom">
            <operand dataType="fhir:Patient" xsi:type="Retrieve"/>
         </expression>
      </def>
      <def name="Get Active Prescriptions" context="Patient" accessLevel="Public">
         <expression xsi:type="Query">
            <source alias="activeRx">
               <expression dataType="fhir:MedicationRequest" xsi:type="Retrieve"/>
            </source>
            <where xsi:type="And">
               <operand xsi:type="Equal">
                  <operand path="value" xsi:type="Property">
                     <source path="status" scope="activeRx" xsi:type="Property"/>
                  </operand>
                  <operand valueType="t:String" value="active" xsi:type="Literal"/>
               </operand>
               <operand xsi:type="Equal">
                  <operand path="value" xsi:type="Property">
                     <source path="code" xsi:type="Property">
                        <source xsi:type="Indexer">
                           <operand xsi:type="Flatten">
                              <operand xsi:type="Query">
                                 <source alias="$this">
                                    <expression path="category" scope="activeRx" xsi:type="Property"/>
                                 </source>
                                 <where xsi:type="Not">
                                    <operand xsi:type="IsNull">
                                       <operand path="coding" xsi:type="Property">
                                          <source name="$this" xsi:type="AliasRef"/>
                                       </operand>
                                    </operand>
                                 </where>
                                 <return>
                                    <expression path="coding" xsi:type="Property">
                                       <source name="$this" xsi:type="AliasRef"/>
                                    </expression>
                                 </return>
                              </operand>
                           </operand>
                           <operand valueType="t:Integer" value="0" xsi:type="Literal"/>
                        </source>
                     </source>
                  </operand>
                  <operand valueType="t:String" value="outpatient" xsi:type="Literal"/>
               </operand>
            </where>
         </expression>
      </def>
      <def name="Total MME" context="Patient" accessLevel="Public">
         <expression name="TotalMME" libraryName="MMECommon" xsi:type="FunctionRef">
            <operand xsi:type="Union">
               <operand name="ContextPrescriptions" xsi:type="ParameterRef"/>
               <operand name="Get Active Prescriptions" xsi:type="ExpressionRef"/>
            </operand>
         </expression>
      </def>
      <def name="Is MME 50 Or More?" context="Patient" accessLevel="Public">
         <expression xsi:type="GreaterOrEqual">
            <operand name="Total MME" xsi:type="ExpressionRef"/>
            <operand value="50" unit="mg/d" xsi:type="Quantity"/>
         </expression>
      </def>
      <def name="Get Indicator" context="Patient" accessLevel="Public">
         <expression valueType="t:String" value="warning" xsi:type="Literal"/>
      </def>
      <def name="Get Summary" context="Patient" accessLevel="Public">
         <expression xsi:type="Concatenate">
            <operand valueType="t:String" value="High risk for opioid overdose - " xsi:type="Literal"/>
            <operand xsi:type="Case">
               <caseItem>
                  <when xsi:type="GreaterOrEqual">
                     <operand path="value" xsi:type="Property">
                        <source name="Total MME" xsi:type="ExpressionRef"/>
                     </operand>
                     <operand xsi:type="ToDecimal">
                        <operand valueType="t:Integer" value="90" xsi:type="Literal"/>
                     </operand>
                  </when>
                  <then valueType="t:String" value="taper now" xsi:type="Literal"/>
               </caseItem>
               <else valueType="t:String" value="consider tapering" xsi:type="Literal"/>
            </operand>
         </expression>
      </def>
      <def name="Get Detail" context="Patient" accessLevel="Public">
         <expression xsi:type="Concatenate">
            <operand xsi:type="Concatenate">
               <operand valueType="t:String" value="Total morphine milligram equivalent (MME) is " xsi:type="Literal"/>
               <operand xsi:type="ToString">
                  <operand name="Total MME" xsi:type="ExpressionRef"/>
               </operand>
            </operand>
            <operand valueType="t:String" value=". Taper to less than 50." xsi:type="Literal"/>
         </expression>
      </def>
   </statements>
</library>

      

{
  "resourceType" : "Library",
  "id" : "opioidcds-recommendation-05",
  "meta" : {
    "versionId" : "1",
    "lastUpdated" : "2021-05-24T10:50:20.500Z",
    "tag" : [
      {
        "system" : "http://terminology.hl7.org/CodeSystem/v3-ActReason",
        "code" : "HTEST",
        "display" : "test health data"
      }
    ]
  },
  "text" : {
    "status" : "generated",
    "div" : "<div xmlns=\"http://www.w3.org/1999/xhtml\">\n <h2>Participants</h2>\n <table class=\"grid\">\n <tr>\n <td>Author</td>\n <td>Kensaku Kawamoto, MD, PhD, MHS</td>\n </tr>\n <tr>\n <td>Author</td>\n <td>Bryn Rhodes</td>\n </tr>\n <tr>\n <td>Author</td>\n <td>Floyd Eisenberg, MD, MPH</td>\n </tr>\n <tr>\n <td>Author</td>\n <td>Robert McClure, MD, MPH</td>\n </tr>\n </table>\n <h2>Related Artifacts</h2>\n <table class=\"grid\">\n <tr>\n <td>Documentation</td>\n <td>CDC guideline for prescribing opioids for chronic pain</td>\n <td>https://guidelines.gov/summaries/summary/50153/cdc-guideline-for-prescribing-opioids-for-chronic-pain---united-states-2016#420</td>\n </tr>\n <tr>\n <td>Depends On</td>\n <td/>\n <td>\n <code>http://example.org/fhir/Library/opioidcds-common</code>\n </td>\n </tr>\n <tr>\n <td>Documentation</td>\n <td>MME Conversion Tables</td>\n <td>https://www.cdc.gov/drugoverdose/pdf/calculating_total_daily_dose-a.pdf</td>\n </tr>\n </table>\n <h2>Data Requirements</h2>\n <table class=\"grid\">\n <tr>\n <td colspan=\"2\">\n <b>Type</b>: \n <a href=\"medicationrequest.html\">MedicationRequest</a>\n </td>\n </tr>\n <tr style=\"background-color: #efefef\">\n <td>Filter</td>\n <td>Value</td>\n </tr>\n <tr>\n <td>status</td>\n <td>One of these codes: [not stated] active: active</td>\n </tr>\n <tr>\n <td>category</td>\n <td>One of these codes: \n <a href=\"http://terminology.hl7.org/2.1.0/CodeSystem-medicationrequest-category.html\">http://terminology.hl7.org/CodeSystem/medicationrequest-category</a> outpatient: Outpatient\n </td>\n </tr>\n </table>\n <h2>Contents</h2>\n <p>\n <code>application/elm+xml</code>\n </p>\n <pre>\n <code class=\"language-xml\">&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&gt;\n&lt;library xmlns=\"urn:hl7-org:elm:r1\" xmlns:t=\"urn:hl7-org:elm-types:r1\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:fhir=\"http://hl7.org/fhir\" xmlns:qdm43=\"urn:healthit-gov:qdm:v4_3\" xmlns:qdm53=\"urn:healthit-gov:qdm:v5_3\" xmlns:a=\"urn:hl7-org:cql-annotations:r1\"&gt;\n &lt;identifier id=\"OpioidCDS_STU4\" version=\"0.1.0\"/&gt;\n &lt;schemaIdentifier id=\"urn:hl7-org:elm\" version=\"r1\"/&gt;\n &lt;usings&gt;\n &lt;def localIdentifier=\"System\" uri=\"urn:hl7-org:elm-types:r1\"/&gt;\n &lt;def localIdentifier=\"FHIR\" uri=\"http://hl7.org/fhir\" version=\"3.2.0\"/&gt;\n &lt;/usings&gt;\n &lt;includes&gt;\n &lt;def localIdentifier=\"MMECommon\" path=\"OpioidCDS_STU4_Common\" version=\"0.1.0\"/&gt;\n &lt;/includes&gt;\n &lt;parameters&gt;\n &lt;def name=\"UserID\" accessLevel=\"Public\"&gt;\n &lt;parameterTypeSpecifier name=\"t:String\" xsi:type=\"NamedTypeSpecifier\"/&gt;\n &lt;/def&gt;\n &lt;def name=\"ContextPrescriptions\" accessLevel=\"Public\"&gt;\n &lt;parameterTypeSpecifier xsi:type=\"ListTypeSpecifier\"&gt;\n &lt;elementType name=\"fhir:MedicationRequest\" xsi:type=\"NamedTypeSpecifier\"/&gt;\n &lt;/parameterTypeSpecifier&gt;\n &lt;/def&gt;\n &lt;/parameters&gt;\n &lt;statements&gt;\n &lt;def name=\"Patient\" context=\"Patient\"&gt;\n &lt;expression xsi:type=\"SingletonFrom\"&gt;\n &lt;operand dataType=\"fhir:Patient\" xsi:type=\"Retrieve\"/&gt;\n &lt;/expression&gt;\n &lt;/def&gt;\n &lt;def name=\"Get Active Prescriptions\" context=\"Patient\" accessLevel=\"Public\"&gt;\n &lt;expression xsi:type=\"Query\"&gt;\n &lt;source alias=\"activeRx\"&gt;\n &lt;expression dataType=\"fhir:MedicationRequest\" xsi:type=\"Retrieve\"/&gt;\n &lt;/source&gt;\n &lt;where xsi:type=\"And\"&gt;\n &lt;operand xsi:type=\"Equal\"&gt;\n &lt;operand path=\"value\" xsi:type=\"Property\"&gt;\n &lt;source path=\"status\" scope=\"activeRx\" xsi:type=\"Property\"/&gt;\n &lt;/operand&gt;\n &lt;operand valueType=\"t:String\" value=\"active\" xsi:type=\"Literal\"/&gt;\n &lt;/operand&gt;\n &lt;operand xsi:type=\"Equal\"&gt;\n &lt;operand path=\"value\" xsi:type=\"Property\"&gt;\n &lt;source path=\"code\" xsi:type=\"Property\"&gt;\n &lt;source xsi:type=\"Indexer\"&gt;\n &lt;operand xsi:type=\"Flatten\"&gt;\n &lt;operand xsi:type=\"Query\"&gt;\n &lt;source alias=\"$this\"&gt;\n &lt;expression path=\"category\" scope=\"activeRx\" xsi:type=\"Property\"/&gt;\n &lt;/source&gt;\n &lt;where xsi:type=\"Not\"&gt;\n &lt;operand xsi:type=\"IsNull\"&gt;\n &lt;operand path=\"coding\" xsi:type=\"Property\"&gt;\n &lt;source name=\"$this\" xsi:type=\"AliasRef\"/&gt;\n &lt;/operand&gt;\n &lt;/operand&gt;\n &lt;/where&gt;\n &lt;return&gt;\n &lt;expression path=\"coding\" xsi:type=\"Property\"&gt;\n &lt;source name=\"$this\" xsi:type=\"AliasRef\"/&gt;\n &lt;/expression&gt;\n &lt;/return&gt;\n &lt;/operand&gt;\n &lt;/operand&gt;\n &lt;operand valueType=\"t:Integer\" value=\"0\" xsi:type=\"Literal\"/&gt;\n &lt;/source&gt;\n &lt;/source&gt;\n &lt;/operand&gt;\n &lt;operand valueType=\"t:String\" value=\"outpatient\" xsi:type=\"Literal\"/&gt;\n &lt;/operand&gt;\n &lt;/where&gt;\n &lt;/expression&gt;\n &lt;/def&gt;\n &lt;def name=\"Total MME\" context=\"Patient\" accessLevel=\"Public\"&gt;\n &lt;expression name=\"TotalMME\" libraryName=\"MMECommon\" xsi:type=\"FunctionRef\"&gt;\n &lt;operand xsi:type=\"Union\"&gt;\n &lt;operand name=\"ContextPrescriptions\" xsi:type=\"ParameterRef\"/&gt;\n &lt;operand name=\"Get Active Prescriptions\" xsi:type=\"ExpressionRef\"/&gt;\n &lt;/operand&gt;\n &lt;/expression&gt;\n &lt;/def&gt;\n &lt;def name=\"Is MME 50 Or More?\" context=\"Patient\" accessLevel=\"Public\"&gt;\n &lt;expression xsi:type=\"GreaterOrEqual\"&gt;\n &lt;operand name=\"Total MME\" xsi:type=\"ExpressionRef\"/&gt;\n &lt;operand value=\"50\" unit=\"mg/d\" xsi:type=\"Quantity\"/&gt;\n &lt;/expression&gt;\n &lt;/def&gt;\n &lt;def name=\"Get Indicator\" context=\"Patient\" accessLevel=\"Public\"&gt;\n &lt;expression valueType=\"t:String\" value=\"warning\" xsi:type=\"Literal\"/&gt;\n &lt;/def&gt;\n &lt;def name=\"Get Summary\" context=\"Patient\" accessLevel=\"Public\"&gt;\n &lt;expression xsi:type=\"Concatenate\"&gt;\n &lt;operand valueType=\"t:String\" value=\"High risk for opioid overdose - \" xsi:type=\"Literal\"/&gt;\n &lt;operand xsi:type=\"Case\"&gt;\n &lt;caseItem&gt;\n &lt;when xsi:type=\"GreaterOrEqual\"&gt;\n &lt;operand path=\"value\" xsi:type=\"Property\"&gt;\n &lt;source name=\"Total MME\" xsi:type=\"ExpressionRef\"/&gt;\n &lt;/operand&gt;\n &lt;operand xsi:type=\"ToDecimal\"&gt;\n &lt;operand valueType=\"t:Integer\" value=\"90\" xsi:type=\"Literal\"/&gt;\n &lt;/operand&gt;\n &lt;/when&gt;\n &lt;then valueType=\"t:String\" value=\"taper now\" xsi:type=\"Literal\"/&gt;\n &lt;/caseItem&gt;\n &lt;else valueType=\"t:String\" value=\"consider tapering\" xsi:type=\"Literal\"/&gt;\n &lt;/operand&gt;\n &lt;/expression&gt;\n &lt;/def&gt;\n &lt;def name=\"Get Detail\" context=\"Patient\" accessLevel=\"Public\"&gt;\n &lt;expression xsi:type=\"Concatenate\"&gt;\n &lt;operand xsi:type=\"Concatenate\"&gt;\n &lt;operand valueType=\"t:String\" value=\"Total morphine milligram equivalent (MME) is \" xsi:type=\"Literal\"/&gt;\n &lt;operand xsi:type=\"ToString\"&gt;\n &lt;operand name=\"Total MME\" xsi:type=\"ExpressionRef\"/&gt;\n &lt;/operand&gt;\n &lt;/operand&gt;\n &lt;operand valueType=\"t:String\" value=\". Taper to less than 50.\" xsi:type=\"Literal\"/&gt;\n &lt;/expression&gt;\n &lt;/def&gt;\n &lt;/statements&gt;\n&lt;/library&gt;\n</code>\n </pre>\n </div>"
  },
  "identifier" : [
    {
      "use" : "official",
      "value" : "OpioidCDS_REC_05"
    }
  ],
  "version" : "0.1.0",
  "title" : "Opioid CDS Logic for recommendation #5",
  "status" : "active",
  "experimental" : false,
  "type" : {
    "coding" : [
      {
        "system" : "http://terminology.hl7.org/CodeSystem/library-type",
        "code" : "logic-library",
        "display" : "Logic Library"
      }
    ]
  },
  "date" : "2018-03-25T13:49:09-06:00",
  "publisher" : "Centers for Disease Control and Prevention (CDC)",
  "description" : "Opioid Decision Support Logic for use in implementing CDC Opioid Prescribing Guidelines.",
  "useContext" : [
    {
      "code" : {
        "system" : "http://terminology.hl7.org/CodeSystem/usage-context-type",
        "code" : "focus",
        "display" : "Clinical Focus"
      },
      "valueCodeableConcept" : {
        "coding" : [
          {
            "system" : "http://snomed.info/sct",
            "code" : "182888003",
            "display" : "Medication requested (situation)"
          }
        ]
      }
    },
    {
      "code" : {
        "system" : "http://terminology.hl7.org/CodeSystem/usage-context-type",
        "code" : "focus",
        "display" : "Clinical Focus"
      },
      "valueCodeableConcept" : {
        "coding" : [
          {
            "system" : "http://snomed.info/sct",
            "code" : "82423001",
            "display" : "Chronic pain (finding)"
          }
        ]
      }
    }
  ],
  "jurisdiction" : [
    {
      "coding" : [
        {
          "system" : "urn:iso:std:iso:3166",
          "code" : "US",
          "display" : "United States of America"
        }
      ]
    }
  ],
  "purpose" : "This library works in concert with the OMTK logic library to provide decision support for Morphine Milligram Equivalence calculations and dynamic value resolution.",
  "usage" : "This library is to notify the prescriber/user whether the current prescription exceeds the recommended MME.",
  "copyright" : "© CDC 2016+.",
  "topic" : [
    {
      "text" : "Opioid Prescribing"
    }
  ],
  "author" : [
    {
      "name" : "Kensaku Kawamoto, MD, PhD, MHS
"
    },
    {
      "name" : "Bryn Rhodes"
    },
    {
      "name" : "Floyd Eisenberg, MD, MPH"
    },
    {
      "name" : "Robert McClure, MD, MPH"
    }
  ],
  "relatedArtifact" : [
    {
      "type" : "documentation",
      "display" : "CDC guideline for prescribing opioids for chronic pain",
      "url" : "https://guidelines.gov/summaries/summary/50153/cdc-guideline-for-prescribing-opioids-for-chronic-pain---united-states-2016#420"
    },
    {
      "type" : "depends-on",
      "resource" : "http://example.org/fhir/Library/opioidcds-common"
    },
    {
      "type" : "documentation",
      "display" : "MME Conversion Tables",
      "url" : "https://www.cdc.gov/drugoverdose/pdf/calculating_total_daily_dose-a.pdf"
    }
  ],
  "dataRequirement" : [
    {
      "id" : "medications",
      "type" : "MedicationRequest",
      "codeFilter" : [
        {
          "path" : "status",
          "code" : [
            {
              "code" : "active"
            }
          ]
        },
        {
          "path" : "category",
          "code" : [
            {
              "system" : "http://terminology.hl7.org/CodeSystem/medicationrequest-category",
              "code" : "outpatient"
            }
          ]
        }
      ]
    }
  ],
  "content" : [
    {
      "contentType" : "application/elm+xml",
      "data" : "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPGxpYnJhcnkgeG1sbnM9InVybjpobDctb3JnOmVsbTpyMSIgeG1sbnM6dD0idXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczpmaGlyPSJodHRwOi8vaGw3Lm9yZy9maGlyIiB4bWxuczpxZG00Mz0idXJuOmhlYWx0aGl0LWdvdjpxZG06djRfMyIgeG1sbnM6cWRtNTM9InVybjpoZWFsdGhpdC1nb3Y6cWRtOnY1XzMiIHhtbG5zOmE9InVybjpobDctb3JnOmNxbC1hbm5vdGF0aW9uczpyMSI+CiAgIDxpZGVudGlmaWVyIGlkPSJPcGlvaWRDRFNfU1RVNCIgdmVyc2lvbj0iMC4xLjAiLz4KICAgPHNjaGVtYUlkZW50aWZpZXIgaWQ9InVybjpobDctb3JnOmVsbSIgdmVyc2lvbj0icjEiLz4KICAgPHVzaW5ncz4KICAgICAgPGRlZiBsb2NhbElkZW50aWZpZXI9IlN5c3RlbSIgdXJpPSJ1cm46aGw3LW9yZzplbG0tdHlwZXM6cjEiLz4KICAgICAgPGRlZiBsb2NhbElkZW50aWZpZXI9IkZISVIiIHVyaT0iaHR0cDovL2hsNy5vcmcvZmhpciIgdmVyc2lvbj0iMy4yLjAiLz4KICAgPC91c2luZ3M+CiAgIDxpbmNsdWRlcz4KICAgICAgPGRlZiBsb2NhbElkZW50aWZpZXI9Ik1NRUNvbW1vbiIgcGF0aD0iT3Bpb2lkQ0RTX1NUVTRfQ29tbW9uIiB2ZXJzaW9uPSIwLjEuMCIvPgogICA8L2luY2x1ZGVzPgogICA8cGFyYW1ldGVycz4KICAgICAgPGRlZiBuYW1lPSJVc2VySUQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiPgogICAgICAgICA8cGFyYW1ldGVyVHlwZVNwZWNpZmllciBuYW1lPSJ0OlN0cmluZyIgeHNpOnR5cGU9Ik5hbWVkVHlwZVNwZWNpZmllciIvPgogICAgICA8L2RlZj4KICAgICAgPGRlZiBuYW1lPSJDb250ZXh0UHJlc2NyaXB0aW9ucyIgYWNjZXNzTGV2ZWw9IlB1YmxpYyI+CiAgICAgICAgIDxwYXJhbWV0ZXJUeXBlU3BlY2lmaWVyIHhzaTp0eXBlPSJMaXN0VHlwZVNwZWNpZmllciI+CiAgICAgICAgICAgIDxlbGVtZW50VHlwZSBuYW1lPSJmaGlyOk1lZGljYXRpb25SZXF1ZXN0IiB4c2k6dHlwZT0iTmFtZWRUeXBlU3BlY2lmaWVyIi8+CiAgICAgICAgIDwvcGFyYW1ldGVyVHlwZVNwZWNpZmllcj4KICAgICAgPC9kZWY+CiAgIDwvcGFyYW1ldGVycz4KICAgPHN0YXRlbWVudHM+CiAgICAgIDxkZWYgbmFtZT0iUGF0aWVudCIgY29udGV4dD0iUGF0aWVudCI+CiAgICAgICAgIDxleHByZXNzaW9uIHhzaTp0eXBlPSJTaW5nbGV0b25Gcm9tIj4KICAgICAgICAgICAgPG9wZXJhbmQgZGF0YVR5cGU9ImZoaXI6UGF0aWVudCIgeHNpOnR5cGU9IlJldHJpZXZlIi8+CiAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgPC9kZWY+CiAgICAgIDxkZWYgbmFtZT0iR2V0IEFjdGl2ZSBQcmVzY3JpcHRpb25zIiBjb250ZXh0PSJQYXRpZW50IiBhY2Nlc3NMZXZlbD0iUHVibGljIj4KICAgICAgICAgPGV4cHJlc3Npb24geHNpOnR5cGU9IlF1ZXJ5Ij4KICAgICAgICAgICAgPHNvdXJjZSBhbGlhcz0iYWN0aXZlUngiPgogICAgICAgICAgICAgICA8ZXhwcmVzc2lvbiBkYXRhVHlwZT0iZmhpcjpNZWRpY2F0aW9uUmVxdWVzdCIgeHNpOnR5cGU9IlJldHJpZXZlIi8+CiAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICA8d2hlcmUgeHNpOnR5cGU9IkFuZCI+CiAgICAgICAgICAgICAgIDxvcGVyYW5kIHhzaTp0eXBlPSJFcXVhbCI+CiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHBhdGg9InZhbHVlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICA8c291cmNlIHBhdGg9InN0YXR1cyIgc2NvcGU9ImFjdGl2ZVJ4IiB4c2k6dHlwZT0iUHJvcGVydHkiLz4KICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCB2YWx1ZVR5cGU9InQ6U3RyaW5nIiB2YWx1ZT0iYWN0aXZlIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgIDxvcGVyYW5kIHhzaTp0eXBlPSJFcXVhbCI+CiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHBhdGg9InZhbHVlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICA8c291cmNlIHBhdGg9ImNvZGUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgeHNpOnR5cGU9IkluZGV4ZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCB4c2k6dHlwZT0iRmxhdHRlbiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHhzaTp0eXBlPSJRdWVyeSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgYWxpYXM9IiR0aGlzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGV4cHJlc3Npb24gcGF0aD0iY2F0ZWdvcnkiIHNjb3BlPSJhY3RpdmVSeCIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8d2hlcmUgeHNpOnR5cGU9Ik5vdCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHhzaTp0eXBlPSJJc051bGwiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBwYXRoPSJjb2RpbmciIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbmFtZT0iJHRoaXMiIHhzaTp0eXBlPSJBbGlhc1JlZiIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC93aGVyZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJldHVybj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGV4cHJlc3Npb24gcGF0aD0iY29kaW5nIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIG5hbWU9IiR0aGlzIiB4c2k6dHlwZT0iQWxpYXNSZWYiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3JldHVybj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHZhbHVlVHlwZT0idDpJbnRlZ2VyIiB2YWx1ZT0iMCIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHZhbHVlVHlwZT0idDpTdHJpbmciIHZhbHVlPSJvdXRwYXRpZW50IiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgIDwvd2hlcmU+CiAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgPC9kZWY+CiAgICAgIDxkZWYgbmFtZT0iVG90YWwgTU1FIiBjb250ZXh0PSJQYXRpZW50IiBhY2Nlc3NMZXZlbD0iUHVibGljIj4KICAgICAgICAgPGV4cHJlc3Npb24gbmFtZT0iVG90YWxNTUUiIGxpYnJhcnlOYW1lPSJNTUVDb21tb24iIHhzaTp0eXBlPSJGdW5jdGlvblJlZiI+CiAgICAgICAgICAgIDxvcGVyYW5kIHhzaTp0eXBlPSJVbmlvbiI+CiAgICAgICAgICAgICAgIDxvcGVyYW5kIG5hbWU9IkNvbnRleHRQcmVzY3JpcHRpb25zIiB4c2k6dHlwZT0iUGFyYW1ldGVyUmVmIi8+CiAgICAgICAgICAgICAgIDxvcGVyYW5kIG5hbWU9IkdldCBBY3RpdmUgUHJlc2NyaXB0aW9ucyIgeHNpOnR5cGU9IkV4cHJlc3Npb25SZWYiLz4KICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIG5hbWU9IklzIE1NRSA1MCBPciBNb3JlPyIgY29udGV4dD0iUGF0aWVudCIgYWNjZXNzTGV2ZWw9IlB1YmxpYyI+CiAgICAgICAgIDxleHByZXNzaW9uIHhzaTp0eXBlPSJHcmVhdGVyT3JFcXVhbCI+CiAgICAgICAgICAgIDxvcGVyYW5kIG5hbWU9IlRvdGFsIE1NRSIgeHNpOnR5cGU9IkV4cHJlc3Npb25SZWYiLz4KICAgICAgICAgICAgPG9wZXJhbmQgdmFsdWU9IjUwIiB1bml0PSJtZy9kIiB4c2k6dHlwZT0iUXVhbnRpdHkiLz4KICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICA8L2RlZj4KICAgICAgPGRlZiBuYW1lPSJHZXQgSW5kaWNhdG9yIiBjb250ZXh0PSJQYXRpZW50IiBhY2Nlc3NMZXZlbD0iUHVibGljIj4KICAgICAgICAgPGV4cHJlc3Npb24gdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9Indhcm5pbmciIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIG5hbWU9IkdldCBTdW1tYXJ5IiBjb250ZXh0PSJQYXRpZW50IiBhY2Nlc3NMZXZlbD0iUHVibGljIj4KICAgICAgICAgPGV4cHJlc3Npb24geHNpOnR5cGU9IkNvbmNhdGVuYXRlIj4KICAgICAgICAgICAgPG9wZXJhbmQgdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9IkhpZ2ggcmlzayBmb3Igb3Bpb2lkIG92ZXJkb3NlIC0gIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICA8b3BlcmFuZCB4c2k6dHlwZT0iQ2FzZSI+CiAgICAgICAgICAgICAgIDxjYXNlSXRlbT4KICAgICAgICAgICAgICAgICAgPHdoZW4geHNpOnR5cGU9IkdyZWF0ZXJPckVxdWFsIj4KICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgcGF0aD0idmFsdWUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbmFtZT0iVG90YWwgTU1FIiB4c2k6dHlwZT0iRXhwcmVzc2lvblJlZiIvPgogICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHhzaTp0eXBlPSJUb0RlY2ltYWwiPgogICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCB2YWx1ZVR5cGU9InQ6SW50ZWdlciIgdmFsdWU9IjkwIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgIDwvd2hlbj4KICAgICAgICAgICAgICAgICAgPHRoZW4gdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9InRhcGVyIG5vdyIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgPC9jYXNlSXRlbT4KICAgICAgICAgICAgICAgPGVsc2UgdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9ImNvbnNpZGVyIHRhcGVyaW5nIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgPC9kZWY+CiAgICAgIDxkZWYgbmFtZT0iR2V0IERldGFpbCIgY29udGV4dD0iUGF0aWVudCIgYWNjZXNzTGV2ZWw9IlB1YmxpYyI+CiAgICAgICAgIDxleHByZXNzaW9uIHhzaTp0eXBlPSJDb25jYXRlbmF0ZSI+CiAgICAgICAgICAgIDxvcGVyYW5kIHhzaTp0eXBlPSJDb25jYXRlbmF0ZSI+CiAgICAgICAgICAgICAgIDxvcGVyYW5kIHZhbHVlVHlwZT0idDpTdHJpbmciIHZhbHVlPSJUb3RhbCBtb3JwaGluZSBtaWxsaWdyYW0gZXF1aXZhbGVudCAoTU1FKSBpcyAiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgIDxvcGVyYW5kIHhzaTp0eXBlPSJUb1N0cmluZyI+CiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIG5hbWU9IlRvdGFsIE1NRSIgeHNpOnR5cGU9IkV4cHJlc3Npb25SZWYiLz4KICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgIDxvcGVyYW5kIHZhbHVlVHlwZT0idDpTdHJpbmciIHZhbHVlPSIuIFRhcGVyIHRvIGxlc3MgdGhhbiA1MC4iIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgPC9kZWY+CiAgIDwvc3RhdGVtZW50cz4KPC9saWJyYXJ5Pgo="
    }
  ]
}

Library "opioidcds-recommendation-04" Version "1"

Tags: (no tags)  +

This Resource , XML or JSON representation, or the full version history.. provenance for this resource
Updated: by

Participants

Author Kensaku Kawamoto, MD, PhD, MHS
Author Bryn Rhodes
Author Floyd Eisenberg, MD, MPH
Author Robert McClure, MD, MPH

Related Artifacts

Documentation CDC guideline for prescribing opioids for chronic pain https://guidelines.gov/summaries/summary/50153/cdc-guideline-for-prescribing-opioids-for-chronic-pain---united-states-2016#420
Depends On http://example.org/fhir/Library/opioidcds-common

Data Requirements

Type: MedicationRequest
Filter Value
medicationCodeableConcept In ValueSet http://example.org/fhir/ValueSet/opioids-abused-in-ambulatory-care
Type: Encounter

Contents

application/elm+xml

        <?xml version="1.0" encoding="UTF-8"?>
<library xmlns="urn:hl7-org:elm:r1" xmlns:t="urn:hl7-org:elm-types:r1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:fhir="http://hl7.org/fhir" xmlns:qdm43="urn:healthit-gov:qdm:v4_3" xmlns:qdm53="urn:healthit-gov:qdm:v5_3" xmlns:a="urn:hl7-org:cql-annotations:r1">
   <annotation startLine="67" startChar="5" endLine="67" endChar="68" message="Could not resolve code path medicationCodeableConcept for the type of the retrieve FHIR.MedicationRequest." errorType="semantic" errorSeverity="warning" xsi:type="a:CqlToElmError"/>
   <annotation startLine="67" startChar="5" endLine="67" endChar="68" message="Could not resolve membership operator for terminology target of the retrieve." errorType="semantic" errorSeverity="warning" xsi:type="a:CqlToElmError"/>
   <annotation startLine="78" startChar="83" endLine="78" endChar="126" message="List-valued expression was demoted to a singleton." errorType="semantic" errorSeverity="warning" xsi:type="a:CqlToElmError"/>
   <identifier id="OpioidCDS_STU4_REC_04" version="0.1.0"/>
   <schemaIdentifier id="urn:hl7-org:elm" version="r1"/>
   <usings>
      <def localIdentifier="System" uri="urn:hl7-org:elm-types:r1"/>
      <def localIdentifier="FHIR" uri="http://hl7.org/fhir" version="3.2.0"/>
   </usings>
   <includes>
      <def localIdentifier="Common" path="OpioidCDS_STU4_Common" version="0.1.0"/>
   </includes>
   <parameters>
      <def name="ContextPrescriptions" accessLevel="Public">
         <parameterTypeSpecifier xsi:type="ListTypeSpecifier">
            <elementType name="fhir:MedicationRequest" xsi:type="NamedTypeSpecifier"/>
         </parameterTypeSpecifier>
      </def>
   </parameters>
   <statements>
      <def name="Patient" context="Patient">
         <expression xsi:type="SingletonFrom">
            <operand dataType="fhir:Patient" xsi:type="Retrieve"/>
         </expression>
      </def>
      <def name="Inclusion Period" context="Patient" accessLevel="Public">
         <expression lowClosed="true" highClosed="true" xsi:type="Interval">
            <low xsi:type="Subtract">
               <operand xsi:type="Today"/>
               <operand value="91" unit="days" xsi:type="Quantity"/>
            </low>
            <high xsi:type="Subtract">
               <operand xsi:type="Today"/>
               <operand value="1" unit="days" xsi:type="Quantity"/>
            </high>
         </expression>
      </def>
      <def name="Encounter Period" context="Patient" accessLevel="Public">
         <expression lowClosed="true" highClosed="true" xsi:type="Interval">
            <low xsi:type="Subtract">
               <operand xsi:type="Subtract">
                  <operand xsi:type="Today"/>
                  <operand value="12" unit="months" xsi:type="Quantity"/>
               </operand>
               <operand value="1" unit="days" xsi:type="Quantity"/>
            </low>
            <high xsi:type="Subtract">
               <operand xsi:type="Today"/>
               <operand value="1" unit="days" xsi:type="Quantity"/>
            </high>
         </expression>
      </def>
      <def name="Get Trigger Event Prescriptions" context="Patient" accessLevel="Public">
         <expression xsi:type="Query">
            <source alias="triggerScripts">
               <expression name="ContextPrescriptions" xsi:type="ParameterRef"/>
            </source>
            <let identifier="rxNormCode">
               <expression name="ToCode" libraryName="Common" xsi:type="FunctionRef">
                  <operand xsi:type="Indexer">
                     <operand path="coding" xsi:type="Property">
                        <source path="medication" scope="triggerScripts" xsi:type="Property"/>
                     </operand>
                     <operand valueType="t:Integer" value="0" xsi:type="Literal"/>
                  </operand>
               </expression>
            </let>
            <where xsi:type="And">
               <operand name="IsOpioidWithAmbulatoryAbusePotential" libraryName="Common" xsi:type="FunctionRef">
                  <operand name="rxNormCode" xsi:type="QueryLetRef"/>
               </operand>
               <operand name="IsLongActingOpioid" libraryName="Common" xsi:type="FunctionRef">
                  <operand name="rxNormCode" xsi:type="QueryLetRef"/>
               </operand>
            </where>
         </expression>
      </def>
      <def name="Get Trigger Trigger Event Prescription Ids" context="Patient" accessLevel="Public">
         <expression xsi:type="Query">
            <source alias="triggerScripts">
               <expression name="Get Trigger Event Prescriptions" xsi:type="ExpressionRef"/>
            </source>
            <let identifier="codeString">
               <expression valueType="t:String" value="" xsi:type="Literal"/>
            </let>
            <return>
               <expression xsi:type="Concatenate">
                  <operand xsi:type="Concatenate">
                     <operand name="codeString" xsi:type="QueryLetRef"/>
                     <operand path="value" xsi:type="Property">
                        <source path="id" scope="triggerScripts" xsi:type="Property"/>
                     </operand>
                  </operand>
                  <operand valueType="t:String" value=" " xsi:type="Literal"/>
               </expression>
            </return>
         </expression>
      </def>
      <def name="Validate Trigger Event" context="Patient" accessLevel="Public">
         <expression xsi:type="Exists">
            <operand name="Get Trigger Event Prescriptions" xsi:type="ExpressionRef"/>
         </expression>
      </def>
      <def name="Opioid with Ambulatory Care Abuse Potential in Past 90 Days" context="Patient" accessLevel="Public">
         <expression xsi:type="Exists">
            <operand xsi:type="Query">
               <source alias="orders">
                  <expression dataType="fhir:MedicationRequest" codeProperty="medicationCodeableConcept" xsi:type="Retrieve">
                     <codes name="Ambulatory Abuse Potential Opioids" libraryName="Common" xsi:type="ValueSetRef"/>
                  </expression>
               </source>
               <where xsi:type="In">
                  <operand xsi:type="DateFrom">
                     <operand path="value" xsi:type="Property">
                        <source path="authoredOn" scope="orders" xsi:type="Property"/>
                     </operand>
                  </operand>
                  <operand name="Inclusion Period" xsi:type="ExpressionRef"/>
               </where>
            </operand>
         </expression>
      </def>
      <def name="Inclusion Criteria" context="Patient" accessLevel="Public">
         <expression xsi:type="And">
            <operand xsi:type="And">
               <operand name="Validate Trigger Event" xsi:type="ExpressionRef"/>
               <operand xsi:type="Not">
                  <operand name="Opioid with Ambulatory Care Abuse Potential in Past 90 Days" xsi:type="ExpressionRef"/>
               </operand>
            </operand>
            <operand xsi:type="Exists">
               <operand xsi:type="Query">
                  <source alias="encounters">
                     <expression dataType="fhir:Encounter" xsi:type="Retrieve"/>
                  </source>
                  <where xsi:type="In">
                     <operand xsi:type="DateFrom">
                        <operand path="value" xsi:type="Property">
                           <source path="start" xsi:type="Property">
                              <source path="period" scope="encounters" xsi:type="Property"/>
                           </source>
                        </operand>
                     </operand>
                     <operand name="Encounter Period" xsi:type="ExpressionRef"/>
                  </where>
               </operand>
            </operand>
         </expression>
      </def>
      <def name="Get Indicator" context="Patient" accessLevel="Public">
         <expression valueType="t:String" value="warning" xsi:type="Literal"/>
      </def>
      <def name="Get Summary" context="Patient" accessLevel="Public">
         <expression valueType="t:String" value="Recommend use of immediate-release opioids instead of extended release/long acting opioids when starting patient on opioids." xsi:type="Literal"/>
      </def>
      <def name="Get Detail" context="Patient" accessLevel="Public">
         <expression xsi:type="Concatenate">
            <operand valueType="t:String" value="The following medication requests(s) release rates should be re-evaluated: " xsi:type="Literal"/>
            <operand xsi:type="SingletonFrom">
               <operand name="Get Trigger Trigger Event Prescription Ids" xsi:type="ExpressionRef"/>
            </operand>
         </expression>
      </def>
   </statements>
</library>

      

{
  "resourceType" : "Library",
  "id" : "opioidcds-recommendation-04",
  "meta" : {
    "versionId" : "1",
    "lastUpdated" : "2021-05-24T10:50:20.453Z",
    "tag" : [
      {
        "system" : "http://terminology.hl7.org/CodeSystem/v3-ActReason",
        "code" : "HTEST",
        "display" : "test health data"
      }
    ]
  },
  "text" : {
    "status" : "generated",
    "div" : "<div xmlns=\"http://www.w3.org/1999/xhtml\">\n <h2>Participants</h2>\n <table class=\"grid\">\n <tr>\n <td>Author</td>\n <td>Kensaku Kawamoto, MD, PhD, MHS</td>\n </tr>\n <tr>\n <td>Author</td>\n <td>Bryn Rhodes</td>\n </tr>\n <tr>\n <td>Author</td>\n <td>Floyd Eisenberg, MD, MPH</td>\n </tr>\n <tr>\n <td>Author</td>\n <td>Robert McClure, MD, MPH</td>\n </tr>\n </table>\n <h2>Related Artifacts</h2>\n <table class=\"grid\">\n <tr>\n <td>Documentation</td>\n <td>CDC guideline for prescribing opioids for chronic pain</td>\n <td>https://guidelines.gov/summaries/summary/50153/cdc-guideline-for-prescribing-opioids-for-chronic-pain---united-states-2016#420</td>\n </tr>\n <tr>\n <td>Depends On</td>\n <td/>\n <td>\n <code>http://example.org/fhir/Library/opioidcds-common</code>\n </td>\n </tr>\n </table>\n <h2>Data Requirements</h2>\n <table class=\"grid\">\n <tr>\n <td colspan=\"2\">\n <b>Type</b>: \n <a href=\"medicationrequest.html\">MedicationRequest</a>\n </td>\n </tr>\n <tr style=\"background-color: #efefef\">\n <td>Filter</td>\n <td>Value</td>\n </tr>\n <tr>\n <td>medicationCodeableConcept</td>\n <td>In ValueSet \n <a href=\"http://example.org/fhir/ValueSet/opioids-abused-in-ambulatory-care\">http://example.org/fhir/ValueSet/opioids-abused-in-ambulatory-care</a>\n </td>\n </tr>\n </table>\n <table class=\"grid\">\n <tr>\n <td colspan=\"2\">\n <b>Type</b>: \n <a href=\"encounter.html\">Encounter</a>\n </td>\n </tr>\n </table>\n <h2>Contents</h2>\n <p>\n <code>application/elm+xml</code>\n </p>\n <pre>\n <code class=\"language-xml\">&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&gt;\n&lt;library xmlns=\"urn:hl7-org:elm:r1\" xmlns:t=\"urn:hl7-org:elm-types:r1\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:fhir=\"http://hl7.org/fhir\" xmlns:qdm43=\"urn:healthit-gov:qdm:v4_3\" xmlns:qdm53=\"urn:healthit-gov:qdm:v5_3\" xmlns:a=\"urn:hl7-org:cql-annotations:r1\"&gt;\n &lt;annotation startLine=\"67\" startChar=\"5\" endLine=\"67\" endChar=\"68\" message=\"Could not resolve code path medicationCodeableConcept for the type of the retrieve FHIR.MedicationRequest.\" errorType=\"semantic\" errorSeverity=\"warning\" xsi:type=\"a:CqlToElmError\"/&gt;\n &lt;annotation startLine=\"67\" startChar=\"5\" endLine=\"67\" endChar=\"68\" message=\"Could not resolve membership operator for terminology target of the retrieve.\" errorType=\"semantic\" errorSeverity=\"warning\" xsi:type=\"a:CqlToElmError\"/&gt;\n &lt;annotation startLine=\"78\" startChar=\"83\" endLine=\"78\" endChar=\"126\" message=\"List-valued expression was demoted to a singleton.\" errorType=\"semantic\" errorSeverity=\"warning\" xsi:type=\"a:CqlToElmError\"/&gt;\n &lt;identifier id=\"OpioidCDS_STU4_REC_04\" version=\"0.1.0\"/&gt;\n &lt;schemaIdentifier id=\"urn:hl7-org:elm\" version=\"r1\"/&gt;\n &lt;usings&gt;\n &lt;def localIdentifier=\"System\" uri=\"urn:hl7-org:elm-types:r1\"/&gt;\n &lt;def localIdentifier=\"FHIR\" uri=\"http://hl7.org/fhir\" version=\"3.2.0\"/&gt;\n &lt;/usings&gt;\n &lt;includes&gt;\n &lt;def localIdentifier=\"Common\" path=\"OpioidCDS_STU4_Common\" version=\"0.1.0\"/&gt;\n &lt;/includes&gt;\n &lt;parameters&gt;\n &lt;def name=\"ContextPrescriptions\" accessLevel=\"Public\"&gt;\n &lt;parameterTypeSpecifier xsi:type=\"ListTypeSpecifier\"&gt;\n &lt;elementType name=\"fhir:MedicationRequest\" xsi:type=\"NamedTypeSpecifier\"/&gt;\n &lt;/parameterTypeSpecifier&gt;\n &lt;/def&gt;\n &lt;/parameters&gt;\n &lt;statements&gt;\n &lt;def name=\"Patient\" context=\"Patient\"&gt;\n &lt;expression xsi:type=\"SingletonFrom\"&gt;\n &lt;operand dataType=\"fhir:Patient\" xsi:type=\"Retrieve\"/&gt;\n &lt;/expression&gt;\n &lt;/def&gt;\n &lt;def name=\"Inclusion Period\" context=\"Patient\" accessLevel=\"Public\"&gt;\n &lt;expression lowClosed=\"true\" highClosed=\"true\" xsi:type=\"Interval\"&gt;\n &lt;low xsi:type=\"Subtract\"&gt;\n &lt;operand xsi:type=\"Today\"/&gt;\n &lt;operand value=\"91\" unit=\"days\" xsi:type=\"Quantity\"/&gt;\n &lt;/low&gt;\n &lt;high xsi:type=\"Subtract\"&gt;\n &lt;operand xsi:type=\"Today\"/&gt;\n &lt;operand value=\"1\" unit=\"days\" xsi:type=\"Quantity\"/&gt;\n &lt;/high&gt;\n &lt;/expression&gt;\n &lt;/def&gt;\n &lt;def name=\"Encounter Period\" context=\"Patient\" accessLevel=\"Public\"&gt;\n &lt;expression lowClosed=\"true\" highClosed=\"true\" xsi:type=\"Interval\"&gt;\n &lt;low xsi:type=\"Subtract\"&gt;\n &lt;operand xsi:type=\"Subtract\"&gt;\n &lt;operand xsi:type=\"Today\"/&gt;\n &lt;operand value=\"12\" unit=\"months\" xsi:type=\"Quantity\"/&gt;\n &lt;/operand&gt;\n &lt;operand value=\"1\" unit=\"days\" xsi:type=\"Quantity\"/&gt;\n &lt;/low&gt;\n &lt;high xsi:type=\"Subtract\"&gt;\n &lt;operand xsi:type=\"Today\"/&gt;\n &lt;operand value=\"1\" unit=\"days\" xsi:type=\"Quantity\"/&gt;\n &lt;/high&gt;\n &lt;/expression&gt;\n &lt;/def&gt;\n &lt;def name=\"Get Trigger Event Prescriptions\" context=\"Patient\" accessLevel=\"Public\"&gt;\n &lt;expression xsi:type=\"Query\"&gt;\n &lt;source alias=\"triggerScripts\"&gt;\n &lt;expression name=\"ContextPrescriptions\" xsi:type=\"ParameterRef\"/&gt;\n &lt;/source&gt;\n &lt;let identifier=\"rxNormCode\"&gt;\n &lt;expression name=\"ToCode\" libraryName=\"Common\" xsi:type=\"FunctionRef\"&gt;\n &lt;operand xsi:type=\"Indexer\"&gt;\n &lt;operand path=\"coding\" xsi:type=\"Property\"&gt;\n &lt;source path=\"medication\" scope=\"triggerScripts\" xsi:type=\"Property\"/&gt;\n &lt;/operand&gt;\n &lt;operand valueType=\"t:Integer\" value=\"0\" xsi:type=\"Literal\"/&gt;\n &lt;/operand&gt;\n &lt;/expression&gt;\n &lt;/let&gt;\n &lt;where xsi:type=\"And\"&gt;\n &lt;operand name=\"IsOpioidWithAmbulatoryAbusePotential\" libraryName=\"Common\" xsi:type=\"FunctionRef\"&gt;\n &lt;operand name=\"rxNormCode\" xsi:type=\"QueryLetRef\"/&gt;\n &lt;/operand&gt;\n &lt;operand name=\"IsLongActingOpioid\" libraryName=\"Common\" xsi:type=\"FunctionRef\"&gt;\n &lt;operand name=\"rxNormCode\" xsi:type=\"QueryLetRef\"/&gt;\n &lt;/operand&gt;\n &lt;/where&gt;\n &lt;/expression&gt;\n &lt;/def&gt;\n &lt;def name=\"Get Trigger Trigger Event Prescription Ids\" context=\"Patient\" accessLevel=\"Public\"&gt;\n &lt;expression xsi:type=\"Query\"&gt;\n &lt;source alias=\"triggerScripts\"&gt;\n &lt;expression name=\"Get Trigger Event Prescriptions\" xsi:type=\"ExpressionRef\"/&gt;\n &lt;/source&gt;\n &lt;let identifier=\"codeString\"&gt;\n &lt;expression valueType=\"t:String\" value=\"\" xsi:type=\"Literal\"/&gt;\n &lt;/let&gt;\n &lt;return&gt;\n &lt;expression xsi:type=\"Concatenate\"&gt;\n &lt;operand xsi:type=\"Concatenate\"&gt;\n &lt;operand name=\"codeString\" xsi:type=\"QueryLetRef\"/&gt;\n &lt;operand path=\"value\" xsi:type=\"Property\"&gt;\n &lt;source path=\"id\" scope=\"triggerScripts\" xsi:type=\"Property\"/&gt;\n &lt;/operand&gt;\n &lt;/operand&gt;\n &lt;operand valueType=\"t:String\" value=\" \" xsi:type=\"Literal\"/&gt;\n &lt;/expression&gt;\n &lt;/return&gt;\n &lt;/expression&gt;\n &lt;/def&gt;\n &lt;def name=\"Validate Trigger Event\" context=\"Patient\" accessLevel=\"Public\"&gt;\n &lt;expression xsi:type=\"Exists\"&gt;\n &lt;operand name=\"Get Trigger Event Prescriptions\" xsi:type=\"ExpressionRef\"/&gt;\n &lt;/expression&gt;\n &lt;/def&gt;\n &lt;def name=\"Opioid with Ambulatory Care Abuse Potential in Past 90 Days\" context=\"Patient\" accessLevel=\"Public\"&gt;\n &lt;expression xsi:type=\"Exists\"&gt;\n &lt;operand xsi:type=\"Query\"&gt;\n &lt;source alias=\"orders\"&gt;\n &lt;expression dataType=\"fhir:MedicationRequest\" codeProperty=\"medicationCodeableConcept\" xsi:type=\"Retrieve\"&gt;\n &lt;codes name=\"Ambulatory Abuse Potential Opioids\" libraryName=\"Common\" xsi:type=\"ValueSetRef\"/&gt;\n &lt;/expression&gt;\n &lt;/source&gt;\n &lt;where xsi:type=\"In\"&gt;\n &lt;operand xsi:type=\"DateFrom\"&gt;\n &lt;operand path=\"value\" xsi:type=\"Property\"&gt;\n &lt;source path=\"authoredOn\" scope=\"orders\" xsi:type=\"Property\"/&gt;\n &lt;/operand&gt;\n &lt;/operand&gt;\n &lt;operand name=\"Inclusion Period\" xsi:type=\"ExpressionRef\"/&gt;\n &lt;/where&gt;\n &lt;/operand&gt;\n &lt;/expression&gt;\n &lt;/def&gt;\n &lt;def name=\"Inclusion Criteria\" context=\"Patient\" accessLevel=\"Public\"&gt;\n &lt;expression xsi:type=\"And\"&gt;\n &lt;operand xsi:type=\"And\"&gt;\n &lt;operand name=\"Validate Trigger Event\" xsi:type=\"ExpressionRef\"/&gt;\n &lt;operand xsi:type=\"Not\"&gt;\n &lt;operand name=\"Opioid with Ambulatory Care Abuse Potential in Past 90 Days\" xsi:type=\"ExpressionRef\"/&gt;\n &lt;/operand&gt;\n &lt;/operand&gt;\n &lt;operand xsi:type=\"Exists\"&gt;\n &lt;operand xsi:type=\"Query\"&gt;\n &lt;source alias=\"encounters\"&gt;\n &lt;expression dataType=\"fhir:Encounter\" xsi:type=\"Retrieve\"/&gt;\n &lt;/source&gt;\n &lt;where xsi:type=\"In\"&gt;\n &lt;operand xsi:type=\"DateFrom\"&gt;\n &lt;operand path=\"value\" xsi:type=\"Property\"&gt;\n &lt;source path=\"start\" xsi:type=\"Property\"&gt;\n &lt;source path=\"period\" scope=\"encounters\" xsi:type=\"Property\"/&gt;\n &lt;/source&gt;\n &lt;/operand&gt;\n &lt;/operand&gt;\n &lt;operand name=\"Encounter Period\" xsi:type=\"ExpressionRef\"/&gt;\n &lt;/where&gt;\n &lt;/operand&gt;\n &lt;/operand&gt;\n &lt;/expression&gt;\n &lt;/def&gt;\n &lt;def name=\"Get Indicator\" context=\"Patient\" accessLevel=\"Public\"&gt;\n &lt;expression valueType=\"t:String\" value=\"warning\" xsi:type=\"Literal\"/&gt;\n &lt;/def&gt;\n &lt;def name=\"Get Summary\" context=\"Patient\" accessLevel=\"Public\"&gt;\n &lt;expression valueType=\"t:String\" value=\"Recommend use of immediate-release opioids instead of extended release/long acting opioids when starting patient on opioids.\" xsi:type=\"Literal\"/&gt;\n &lt;/def&gt;\n &lt;def name=\"Get Detail\" context=\"Patient\" accessLevel=\"Public\"&gt;\n &lt;expression xsi:type=\"Concatenate\"&gt;\n &lt;operand valueType=\"t:String\" value=\"The following medication requests(s) release rates should be re-evaluated: \" xsi:type=\"Literal\"/&gt;\n &lt;operand xsi:type=\"SingletonFrom\"&gt;\n &lt;operand name=\"Get Trigger Trigger Event Prescription Ids\" xsi:type=\"ExpressionRef\"/&gt;\n &lt;/operand&gt;\n &lt;/expression&gt;\n &lt;/def&gt;\n &lt;/statements&gt;\n&lt;/library&gt;\n</code>\n </pre>\n </div>"
  },
  "identifier" : [
    {
      "use" : "official",
      "value" : "OpioidCDS_REC_04"
    }
  ],
  "version" : "0.1.0",
  "title" : "Opioid CDS Logic for recommendation #4",
  "status" : "active",
  "experimental" : false,
  "type" : {
    "coding" : [
      {
        "system" : "http://terminology.hl7.org/CodeSystem/library-type",
        "code" : "logic-library",
        "display" : "Logic Library"
      }
    ]
  },
  "date" : "2018-03-25T13:49:09-06:00",
  "publisher" : "Centers for Disease Control and Prevention (CDC)",
  "description" : "Opioid decision support logic for prescribing extended-release/long-acting (ER/LA) opioids when starting a patient on opioids.",
  "useContext" : [
    {
      "code" : {
        "system" : "http://terminology.hl7.org/CodeSystem/usage-context-type",
        "code" : "focus",
        "display" : "Clinical Focus"
      },
      "valueCodeableConcept" : {
        "coding" : [
          {
            "system" : "http://snomed.info/sct",
            "code" : "182888003",
            "display" : "Medication requested (situation)"
          }
        ]
      }
    },
    {
      "code" : {
        "system" : "http://terminology.hl7.org/CodeSystem/usage-context-type",
        "code" : "focus",
        "display" : "Clinical Focus"
      },
      "valueCodeableConcept" : {
        "coding" : [
          {
            "system" : "http://snomed.info/sct",
            "code" : "82423001",
            "display" : "Chronic pain (finding)"
          }
        ]
      }
    }
  ],
  "jurisdiction" : [
    {
      "coding" : [
        {
          "system" : "urn:iso:std:iso:3166",
          "code" : "US",
          "display" : "United States of America"
        }
      ]
    }
  ],
  "purpose" : "The purpose of this library is to determine the appropriateness of extended-release opioids with ambulatory abuse potential for the patient.",
  "usage" : "This library is used to notify the prescriber/user that immediate-release opioids are recommended when starting a patient on opioids.",
  "copyright" : "© CDC 2016+.",
  "topic" : [
    {
      "text" : "Opioid Prescribing"
    }
  ],
  "author" : [
    {
      "name" : "Kensaku Kawamoto, MD, PhD, MHS
"
    },
    {
      "name" : "Bryn Rhodes"
    },
    {
      "name" : "Floyd Eisenberg, MD, MPH"
    },
    {
      "name" : "Robert McClure, MD, MPH"
    }
  ],
  "relatedArtifact" : [
    {
      "type" : "documentation",
      "display" : "CDC guideline for prescribing opioids for chronic pain",
      "url" : "https://guidelines.gov/summaries/summary/50153/cdc-guideline-for-prescribing-opioids-for-chronic-pain---united-states-2016#420"
    },
    {
      "type" : "depends-on",
      "resource" : "http://example.org/fhir/Library/opioidcds-common"
    }
  ],
  "dataRequirement" : [
    {
      "type" : "MedicationRequest",
      "codeFilter" : [
        {
          "path" : "medicationCodeableConcept",
          "valueSet" : "http://example.org/fhir/ValueSet/opioids-abused-in-ambulatory-care"
        }
      ]
    },
    {
      "type" : "Encounter"
    }
  ],
  "content" : [
    {
      "contentType" : "application/elm+xml",
      "data" : "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPGxpYnJhcnkgeG1sbnM9InVybjpobDctb3JnOmVsbTpyMSIgeG1sbnM6dD0idXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczpmaGlyPSJodHRwOi8vaGw3Lm9yZy9maGlyIiB4bWxuczpxZG00Mz0idXJuOmhlYWx0aGl0LWdvdjpxZG06djRfMyIgeG1sbnM6cWRtNTM9InVybjpoZWFsdGhpdC1nb3Y6cWRtOnY1XzMiIHhtbG5zOmE9InVybjpobDctb3JnOmNxbC1hbm5vdGF0aW9uczpyMSI+CiAgIDxhbm5vdGF0aW9uIHN0YXJ0TGluZT0iNjciIHN0YXJ0Q2hhcj0iNSIgZW5kTGluZT0iNjciIGVuZENoYXI9IjY4IiBtZXNzYWdlPSJDb3VsZCBub3QgcmVzb2x2ZSBjb2RlIHBhdGggbWVkaWNhdGlvbkNvZGVhYmxlQ29uY2VwdCBmb3IgdGhlIHR5cGUgb2YgdGhlIHJldHJpZXZlIEZISVIuTWVkaWNhdGlvblJlcXVlc3QuIiBlcnJvclR5cGU9InNlbWFudGljIiBlcnJvclNldmVyaXR5PSJ3YXJuaW5nIiB4c2k6dHlwZT0iYTpDcWxUb0VsbUVycm9yIi8+CiAgIDxhbm5vdGF0aW9uIHN0YXJ0TGluZT0iNjciIHN0YXJ0Q2hhcj0iNSIgZW5kTGluZT0iNjciIGVuZENoYXI9IjY4IiBtZXNzYWdlPSJDb3VsZCBub3QgcmVzb2x2ZSBtZW1iZXJzaGlwIG9wZXJhdG9yIGZvciB0ZXJtaW5vbG9neSB0YXJnZXQgb2YgdGhlIHJldHJpZXZlLiIgZXJyb3JUeXBlPSJzZW1hbnRpYyIgZXJyb3JTZXZlcml0eT0id2FybmluZyIgeHNpOnR5cGU9ImE6Q3FsVG9FbG1FcnJvciIvPgogICA8YW5ub3RhdGlvbiBzdGFydExpbmU9Ijc4IiBzdGFydENoYXI9IjgzIiBlbmRMaW5lPSI3OCIgZW5kQ2hhcj0iMTI2IiBtZXNzYWdlPSJMaXN0LXZhbHVlZCBleHByZXNzaW9uIHdhcyBkZW1vdGVkIHRvIGEgc2luZ2xldG9uLiIgZXJyb3JUeXBlPSJzZW1hbnRpYyIgZXJyb3JTZXZlcml0eT0id2FybmluZyIgeHNpOnR5cGU9ImE6Q3FsVG9FbG1FcnJvciIvPgogICA8aWRlbnRpZmllciBpZD0iT3Bpb2lkQ0RTX1NUVTRfUkVDXzA0IiB2ZXJzaW9uPSIwLjEuMCIvPgogICA8c2NoZW1hSWRlbnRpZmllciBpZD0idXJuOmhsNy1vcmc6ZWxtIiB2ZXJzaW9uPSJyMSIvPgogICA8dXNpbmdzPgogICAgICA8ZGVmIGxvY2FsSWRlbnRpZmllcj0iU3lzdGVtIiB1cmk9InVybjpobDctb3JnOmVsbS10eXBlczpyMSIvPgogICAgICA8ZGVmIGxvY2FsSWRlbnRpZmllcj0iRkhJUiIgdXJpPSJodHRwOi8vaGw3Lm9yZy9maGlyIiB2ZXJzaW9uPSIzLjIuMCIvPgogICA8L3VzaW5ncz4KICAgPGluY2x1ZGVzPgogICAgICA8ZGVmIGxvY2FsSWRlbnRpZmllcj0iQ29tbW9uIiBwYXRoPSJPcGlvaWRDRFNfU1RVNF9Db21tb24iIHZlcnNpb249IjAuMS4wIi8+CiAgIDwvaW5jbHVkZXM+CiAgIDxwYXJhbWV0ZXJzPgogICAgICA8ZGVmIG5hbWU9IkNvbnRleHRQcmVzY3JpcHRpb25zIiBhY2Nlc3NMZXZlbD0iUHVibGljIj4KICAgICAgICAgPHBhcmFtZXRlclR5cGVTcGVjaWZpZXIgeHNpOnR5cGU9Ikxpc3RUeXBlU3BlY2lmaWVyIj4KICAgICAgICAgICAgPGVsZW1lbnRUeXBlIG5hbWU9ImZoaXI6TWVkaWNhdGlvblJlcXVlc3QiIHhzaTp0eXBlPSJOYW1lZFR5cGVTcGVjaWZpZXIiLz4KICAgICAgICAgPC9wYXJhbWV0ZXJUeXBlU3BlY2lmaWVyPgogICAgICA8L2RlZj4KICAgPC9wYXJhbWV0ZXJzPgogICA8c3RhdGVtZW50cz4KICAgICAgPGRlZiBuYW1lPSJQYXRpZW50IiBjb250ZXh0PSJQYXRpZW50Ij4KICAgICAgICAgPGV4cHJlc3Npb24geHNpOnR5cGU9IlNpbmdsZXRvbkZyb20iPgogICAgICAgICAgICA8b3BlcmFuZCBkYXRhVHlwZT0iZmhpcjpQYXRpZW50IiB4c2k6dHlwZT0iUmV0cmlldmUiLz4KICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICA8L2RlZj4KICAgICAgPGRlZiBuYW1lPSJJbmNsdXNpb24gUGVyaW9kIiBjb250ZXh0PSJQYXRpZW50IiBhY2Nlc3NMZXZlbD0iUHVibGljIj4KICAgICAgICAgPGV4cHJlc3Npb24gbG93Q2xvc2VkPSJ0cnVlIiBoaWdoQ2xvc2VkPSJ0cnVlIiB4c2k6dHlwZT0iSW50ZXJ2YWwiPgogICAgICAgICAgICA8bG93IHhzaTp0eXBlPSJTdWJ0cmFjdCI+CiAgICAgICAgICAgICAgIDxvcGVyYW5kIHhzaTp0eXBlPSJUb2RheSIvPgogICAgICAgICAgICAgICA8b3BlcmFuZCB2YWx1ZT0iOTEiIHVuaXQ9ImRheXMiIHhzaTp0eXBlPSJRdWFudGl0eSIvPgogICAgICAgICAgICA8L2xvdz4KICAgICAgICAgICAgPGhpZ2ggeHNpOnR5cGU9IlN1YnRyYWN0Ij4KICAgICAgICAgICAgICAgPG9wZXJhbmQgeHNpOnR5cGU9IlRvZGF5Ii8+CiAgICAgICAgICAgICAgIDxvcGVyYW5kIHZhbHVlPSIxIiB1bml0PSJkYXlzIiB4c2k6dHlwZT0iUXVhbnRpdHkiLz4KICAgICAgICAgICAgPC9oaWdoPgogICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIG5hbWU9IkVuY291bnRlciBQZXJpb2QiIGNvbnRleHQ9IlBhdGllbnQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiPgogICAgICAgICA8ZXhwcmVzc2lvbiBsb3dDbG9zZWQ9InRydWUiIGhpZ2hDbG9zZWQ9InRydWUiIHhzaTp0eXBlPSJJbnRlcnZhbCI+CiAgICAgICAgICAgIDxsb3cgeHNpOnR5cGU9IlN1YnRyYWN0Ij4KICAgICAgICAgICAgICAgPG9wZXJhbmQgeHNpOnR5cGU9IlN1YnRyYWN0Ij4KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgeHNpOnR5cGU9IlRvZGF5Ii8+CiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHZhbHVlPSIxMiIgdW5pdD0ibW9udGhzIiB4c2k6dHlwZT0iUXVhbnRpdHkiLz4KICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICA8b3BlcmFuZCB2YWx1ZT0iMSIgdW5pdD0iZGF5cyIgeHNpOnR5cGU9IlF1YW50aXR5Ii8+CiAgICAgICAgICAgIDwvbG93PgogICAgICAgICAgICA8aGlnaCB4c2k6dHlwZT0iU3VidHJhY3QiPgogICAgICAgICAgICAgICA8b3BlcmFuZCB4c2k6dHlwZT0iVG9kYXkiLz4KICAgICAgICAgICAgICAgPG9wZXJhbmQgdmFsdWU9IjEiIHVuaXQ9ImRheXMiIHhzaTp0eXBlPSJRdWFudGl0eSIvPgogICAgICAgICAgICA8L2hpZ2g+CiAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgPC9kZWY+CiAgICAgIDxkZWYgbmFtZT0iR2V0IFRyaWdnZXIgRXZlbnQgUHJlc2NyaXB0aW9ucyIgY29udGV4dD0iUGF0aWVudCIgYWNjZXNzTGV2ZWw9IlB1YmxpYyI+CiAgICAgICAgIDxleHByZXNzaW9uIHhzaTp0eXBlPSJRdWVyeSI+CiAgICAgICAgICAgIDxzb3VyY2UgYWxpYXM9InRyaWdnZXJTY3JpcHRzIj4KICAgICAgICAgICAgICAgPGV4cHJlc3Npb24gbmFtZT0iQ29udGV4dFByZXNjcmlwdGlvbnMiIHhzaTp0eXBlPSJQYXJhbWV0ZXJSZWYiLz4KICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgIDxsZXQgaWRlbnRpZmllcj0icnhOb3JtQ29kZSI+CiAgICAgICAgICAgICAgIDxleHByZXNzaW9uIG5hbWU9IlRvQ29kZSIgbGlicmFyeU5hbWU9IkNvbW1vbiIgeHNpOnR5cGU9IkZ1bmN0aW9uUmVmIj4KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgeHNpOnR5cGU9IkluZGV4ZXIiPgogICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBwYXRoPSJjb2RpbmciIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgcGF0aD0ibWVkaWNhdGlvbiIgc2NvcGU9InRyaWdnZXJTY3JpcHRzIiB4c2k6dHlwZT0iUHJvcGVydHkiLz4KICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCB2YWx1ZVR5cGU9InQ6SW50ZWdlciIgdmFsdWU9IjAiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICAgICAgICA8L2xldD4KICAgICAgICAgICAgPHdoZXJlIHhzaTp0eXBlPSJBbmQiPgogICAgICAgICAgICAgICA8b3BlcmFuZCBuYW1lPSJJc09waW9pZFdpdGhBbWJ1bGF0b3J5QWJ1c2VQb3RlbnRpYWwiIGxpYnJhcnlOYW1lPSJDb21tb24iIHhzaTp0eXBlPSJGdW5jdGlvblJlZiI+CiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIG5hbWU9InJ4Tm9ybUNvZGUiIHhzaTp0eXBlPSJRdWVyeUxldFJlZiIvPgogICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgIDxvcGVyYW5kIG5hbWU9IklzTG9uZ0FjdGluZ09waW9pZCIgbGlicmFyeU5hbWU9IkNvbW1vbiIgeHNpOnR5cGU9IkZ1bmN0aW9uUmVmIj4KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbmFtZT0icnhOb3JtQ29kZSIgeHNpOnR5cGU9IlF1ZXJ5TGV0UmVmIi8+CiAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgPC93aGVyZT4KICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICA8L2RlZj4KICAgICAgPGRlZiBuYW1lPSJHZXQgVHJpZ2dlciBUcmlnZ2VyIEV2ZW50IFByZXNjcmlwdGlvbiBJZHMiIGNvbnRleHQ9IlBhdGllbnQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiPgogICAgICAgICA8ZXhwcmVzc2lvbiB4c2k6dHlwZT0iUXVlcnkiPgogICAgICAgICAgICA8c291cmNlIGFsaWFzPSJ0cmlnZ2VyU2NyaXB0cyI+CiAgICAgICAgICAgICAgIDxleHByZXNzaW9uIG5hbWU9IkdldCBUcmlnZ2VyIEV2ZW50IFByZXNjcmlwdGlvbnMiIHhzaTp0eXBlPSJFeHByZXNzaW9uUmVmIi8+CiAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICA8bGV0IGlkZW50aWZpZXI9ImNvZGVTdHJpbmciPgogICAgICAgICAgICAgICA8ZXhwcmVzc2lvbiB2YWx1ZVR5cGU9InQ6U3RyaW5nIiB2YWx1ZT0iIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICA8L2xldD4KICAgICAgICAgICAgPHJldHVybj4KICAgICAgICAgICAgICAgPGV4cHJlc3Npb24geHNpOnR5cGU9IkNvbmNhdGVuYXRlIj4KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgeHNpOnR5cGU9IkNvbmNhdGVuYXRlIj4KICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbmFtZT0iY29kZVN0cmluZyIgeHNpOnR5cGU9IlF1ZXJ5TGV0UmVmIi8+CiAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHBhdGg9InZhbHVlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIHBhdGg9ImlkIiBzY29wZT0idHJpZ2dlclNjcmlwdHMiIHhzaTp0eXBlPSJQcm9wZXJ0eSIvPgogICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9IiAiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgICAgICAgPC9yZXR1cm4+CiAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgPC9kZWY+CiAgICAgIDxkZWYgbmFtZT0iVmFsaWRhdGUgVHJpZ2dlciBFdmVudCIgY29udGV4dD0iUGF0aWVudCIgYWNjZXNzTGV2ZWw9IlB1YmxpYyI+CiAgICAgICAgIDxleHByZXNzaW9uIHhzaTp0eXBlPSJFeGlzdHMiPgogICAgICAgICAgICA8b3BlcmFuZCBuYW1lPSJHZXQgVHJpZ2dlciBFdmVudCBQcmVzY3JpcHRpb25zIiB4c2k6dHlwZT0iRXhwcmVzc2lvblJlZiIvPgogICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIG5hbWU9Ik9waW9pZCB3aXRoIEFtYnVsYXRvcnkgQ2FyZSBBYnVzZSBQb3RlbnRpYWwgaW4gUGFzdCA5MCBEYXlzIiBjb250ZXh0PSJQYXRpZW50IiBhY2Nlc3NMZXZlbD0iUHVibGljIj4KICAgICAgICAgPGV4cHJlc3Npb24geHNpOnR5cGU9IkV4aXN0cyI+CiAgICAgICAgICAgIDxvcGVyYW5kIHhzaTp0eXBlPSJRdWVyeSI+CiAgICAgICAgICAgICAgIDxzb3VyY2UgYWxpYXM9Im9yZGVycyI+CiAgICAgICAgICAgICAgICAgIDxleHByZXNzaW9uIGRhdGFUeXBlPSJmaGlyOk1lZGljYXRpb25SZXF1ZXN0IiBjb2RlUHJvcGVydHk9Im1lZGljYXRpb25Db2RlYWJsZUNvbmNlcHQiIHhzaTp0eXBlPSJSZXRyaWV2ZSI+CiAgICAgICAgICAgICAgICAgICAgIDxjb2RlcyBuYW1lPSJBbWJ1bGF0b3J5IEFidXNlIFBvdGVudGlhbCBPcGlvaWRzIiBsaWJyYXJ5TmFtZT0iQ29tbW9uIiB4c2k6dHlwZT0iVmFsdWVTZXRSZWYiLz4KICAgICAgICAgICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgICAgPHdoZXJlIHhzaTp0eXBlPSJJbiI+CiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHhzaTp0eXBlPSJEYXRlRnJvbSI+CiAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHBhdGg9InZhbHVlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIHBhdGg9ImF1dGhvcmVkT24iIHNjb3BlPSJvcmRlcnMiIHhzaTp0eXBlPSJQcm9wZXJ0eSIvPgogICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbmFtZT0iSW5jbHVzaW9uIFBlcmlvZCIgeHNpOnR5cGU9IkV4cHJlc3Npb25SZWYiLz4KICAgICAgICAgICAgICAgPC93aGVyZT4KICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIG5hbWU9IkluY2x1c2lvbiBDcml0ZXJpYSIgY29udGV4dD0iUGF0aWVudCIgYWNjZXNzTGV2ZWw9IlB1YmxpYyI+CiAgICAgICAgIDxleHByZXNzaW9uIHhzaTp0eXBlPSJBbmQiPgogICAgICAgICAgICA8b3BlcmFuZCB4c2k6dHlwZT0iQW5kIj4KICAgICAgICAgICAgICAgPG9wZXJhbmQgbmFtZT0iVmFsaWRhdGUgVHJpZ2dlciBFdmVudCIgeHNpOnR5cGU9IkV4cHJlc3Npb25SZWYiLz4KICAgICAgICAgICAgICAgPG9wZXJhbmQgeHNpOnR5cGU9Ik5vdCI+CiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIG5hbWU9Ik9waW9pZCB3aXRoIEFtYnVsYXRvcnkgQ2FyZSBBYnVzZSBQb3RlbnRpYWwgaW4gUGFzdCA5MCBEYXlzIiB4c2k6dHlwZT0iRXhwcmVzc2lvblJlZiIvPgogICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgPG9wZXJhbmQgeHNpOnR5cGU9IkV4aXN0cyI+CiAgICAgICAgICAgICAgIDxvcGVyYW5kIHhzaTp0eXBlPSJRdWVyeSI+CiAgICAgICAgICAgICAgICAgIDxzb3VyY2UgYWxpYXM9ImVuY291bnRlcnMiPgogICAgICAgICAgICAgICAgICAgICA8ZXhwcmVzc2lvbiBkYXRhVHlwZT0iZmhpcjpFbmNvdW50ZXIiIHhzaTp0eXBlPSJSZXRyaWV2ZSIvPgogICAgICAgICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgICAgICAgPHdoZXJlIHhzaTp0eXBlPSJJbiI+CiAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHhzaTp0eXBlPSJEYXRlRnJvbSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHBhdGg9InZhbHVlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIHBhdGg9InN0YXJ0IiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIHBhdGg9InBlcmlvZCIgc2NvcGU9ImVuY291bnRlcnMiIHhzaTp0eXBlPSJQcm9wZXJ0eSIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIG5hbWU9IkVuY291bnRlciBQZXJpb2QiIHhzaTp0eXBlPSJFeHByZXNzaW9uUmVmIi8+CiAgICAgICAgICAgICAgICAgIDwvd2hlcmU+CiAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIG5hbWU9IkdldCBJbmRpY2F0b3IiIGNvbnRleHQ9IlBhdGllbnQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiPgogICAgICAgICA8ZXhwcmVzc2lvbiB2YWx1ZVR5cGU9InQ6U3RyaW5nIiB2YWx1ZT0id2FybmluZyIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgPC9kZWY+CiAgICAgIDxkZWYgbmFtZT0iR2V0IFN1bW1hcnkiIGNvbnRleHQ9IlBhdGllbnQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiPgogICAgICAgICA8ZXhwcmVzc2lvbiB2YWx1ZVR5cGU9InQ6U3RyaW5nIiB2YWx1ZT0iUmVjb21tZW5kIHVzZSBvZiBpbW1lZGlhdGUtcmVsZWFzZSBvcGlvaWRzIGluc3RlYWQgb2YgZXh0ZW5kZWQgcmVsZWFzZS9sb25nIGFjdGluZyBvcGlvaWRzIHdoZW4gc3RhcnRpbmcgcGF0aWVudCBvbiBvcGlvaWRzLiIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgPC9kZWY+CiAgICAgIDxkZWYgbmFtZT0iR2V0IERldGFpbCIgY29udGV4dD0iUGF0aWVudCIgYWNjZXNzTGV2ZWw9IlB1YmxpYyI+CiAgICAgICAgIDxleHByZXNzaW9uIHhzaTp0eXBlPSJDb25jYXRlbmF0ZSI+CiAgICAgICAgICAgIDxvcGVyYW5kIHZhbHVlVHlwZT0idDpTdHJpbmciIHZhbHVlPSJUaGUgZm9sbG93aW5nIG1lZGljYXRpb24gcmVxdWVzdHMocykgcmVsZWFzZSByYXRlcyBzaG91bGQgYmUgcmUtZXZhbHVhdGVkOiAiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgIDxvcGVyYW5kIHhzaTp0eXBlPSJTaW5nbGV0b25Gcm9tIj4KICAgICAgICAgICAgICAgPG9wZXJhbmQgbmFtZT0iR2V0IFRyaWdnZXIgVHJpZ2dlciBFdmVudCBQcmVzY3JpcHRpb24gSWRzIiB4c2k6dHlwZT0iRXhwcmVzc2lvblJlZiIvPgogICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgPC9kZWY+CiAgIDwvc3RhdGVtZW50cz4KPC9saWJyYXJ5Pgo="
    }
  ]
}

Library "opioidcds-common" Version "1"

Tags: (no tags)  +

This Resource , XML or JSON representation, or the full version history.. provenance for this resource
Updated: by

Participants

Author Kensaku Kawamoto, MD, PhD, MHS
Author Bryn Rhodes
Author Floyd Eisenberg, MD, MPH
Author Robert McClure, MD, MPH

Related Artifacts

Documentation CDC guideline for prescribing opioids for chronic pain https://guidelines.gov/summaries/summary/50153/cdc-guideline-for-prescribing-opioids-for-chronic-pain---united-states-2016#420
Depends On http://example.org/fhir/Library/omtk-logic
Documentation MME Conversion Tables https://www.cdc.gov/drugoverdose/pdf/calculating_total_daily_dose-a.pdf

Contents

application/elm+xml

        <?xml version="1.0" encoding="UTF-8"?>
<library xmlns="urn:hl7-org:elm:r1" xmlns:t="urn:hl7-org:elm-types:r1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:fhir="http://hl7.org/fhir" xmlns:qdm43="urn:healthit-gov:qdm:v4_3" xmlns:qdm53="urn:healthit-gov:qdm:v5_3" xmlns:a="urn:hl7-org:cql-annotations:r1">
   <identifier id="OpioidCDS_STU4_Common" version="0.1.0"/>
   <schemaIdentifier id="urn:hl7-org:elm" version="r1"/>
   <usings>
      <def localIdentifier="System" uri="urn:hl7-org:elm-types:r1"/>
      <def localIdentifier="FHIR" uri="http://hl7.org/fhir" version="3.2.0"/>
   </usings>
   <includes>
      <def localIdentifier="OMTKLogic" path="OMTKLogic" version="0.1.0"/>
   </includes>
   <valueSets>
      <def name="Benzodiazepines" id="benzodiazepines" accessLevel="Public"/>
      <def name="Naloxone" id="naloxone" accessLevel="Public"/>
      <def name="Ambulatory Abuse Potential Opioids" id="opioids-abused-in-ambulatory-care" accessLevel="Public"/>
      <def name="End Of Life Opioids" id="opioids-indicating-end-of-life" accessLevel="Public"/>
      <def name="Long Acting Opioids" id="long-acting-opioids" accessLevel="Public"/>
      <def name="Illicit Drug Screening" id="illicit-drug-urine-screening" accessLevel="Public"/>
      <def name="Opioid Drug Screening" id="opioid-urine-screening" accessLevel="Public"/>
      <def name="Opioids" id="opioids" accessLevel="Public"/>
      <def name="Codeine Cough Meds" id="opioids-codeine-cough-meds" accessLevel="Public"/>
      <def name="Short Acting Opioids" id="short-acting-opioids" accessLevel="Public"/>
   </valueSets>
   <statements>
      <def name="IsForChronicPain" context="Patient" accessLevel="Public">
         <expression valueType="t:Boolean" value="true" xsi:type="Literal"/>
      </def>
      <def name="HasMetastaticCancer" context="Patient" accessLevel="Public">
         <expression valueType="t:Boolean" value="false" xsi:type="Literal"/>
      </def>
      <def name="ToCode" context="Patient" accessLevel="Public" xsi:type="FunctionDef">
         <expression classType="t:Code" xsi:type="Instance">
            <element name="code">
               <value path="value" xsi:type="Property">
                  <source path="code" xsi:type="Property">
                     <source name="coding" xsi:type="OperandRef"/>
                  </source>
               </value>
            </element>
            <element name="system">
               <value path="value" xsi:type="Property">
                  <source path="system" xsi:type="Property">
                     <source name="coding" xsi:type="OperandRef"/>
                  </source>
               </value>
            </element>
            <element name="version">
               <value path="value" xsi:type="Property">
                  <source path="version" xsi:type="Property">
                     <source name="coding" xsi:type="OperandRef"/>
                  </source>
               </value>
            </element>
            <element name="display">
               <value path="value" xsi:type="Property">
                  <source path="display" xsi:type="Property">
                     <source name="coding" xsi:type="OperandRef"/>
                  </source>
               </value>
            </element>
         </expression>
         <operand name="coding">
            <operandTypeSpecifier name="fhir:Coding" xsi:type="NamedTypeSpecifier"/>
         </operand>
      </def>
      <def name="ToQuantity" context="Patient" accessLevel="Public" xsi:type="FunctionDef">
         <expression classType="t:Quantity" xsi:type="Instance">
            <element name="value">
               <value path="value" xsi:type="Property">
                  <source path="value" xsi:type="Property">
                     <source name="quantity" xsi:type="OperandRef"/>
                  </source>
               </value>
            </element>
            <element name="unit">
               <value path="value" xsi:type="Property">
                  <source path="unit" xsi:type="Property">
                     <source name="quantity" xsi:type="OperandRef"/>
                  </source>
               </value>
            </element>
         </expression>
         <operand name="quantity">
            <operandTypeSpecifier name="fhir:Quantity" xsi:type="NamedTypeSpecifier"/>
         </operand>
      </def>
      <def name="Prescriptions" context="Patient" accessLevel="Public" xsi:type="FunctionDef">
         <expression xsi:type="Query">
            <source alias="O">
               <expression name="Orders" xsi:type="OperandRef"/>
            </source>
            <let identifier="rxNormCode">
               <expression name="ToCode" xsi:type="FunctionRef">
                  <operand xsi:type="Indexer">
                     <operand path="coding" xsi:type="Property">
                        <source path="medication" scope="O" xsi:type="Property"/>
                     </operand>
                     <operand valueType="t:Integer" value="0" xsi:type="Literal"/>
                  </operand>
               </expression>
            </let>
            <let identifier="medicationName">
               <expression name="GetMedicationName" libraryName="OMTKLogic" xsi:type="FunctionRef">
                  <operand name="rxNormCode" xsi:type="QueryLetRef"/>
               </expression>
            </let>
            <let identifier="dosageInstruction">
               <expression xsi:type="Indexer">
                  <operand path="dosageInstruction" scope="O" xsi:type="Property"/>
                  <operand valueType="t:Integer" value="0" xsi:type="Literal"/>
               </expression>
            </let>
            <let identifier="repeat">
               <expression path="repeat" xsi:type="Property">
                  <source path="timing" xsi:type="Property">
                     <source name="dosageInstruction" xsi:type="QueryLetRef"/>
                  </source>
               </expression>
            </let>
            <let identifier="frequency">
               <expression xsi:type="Coalesce">
                  <operand path="value" xsi:type="Property">
                     <source path="frequencyMax" xsi:type="Property">
                        <source name="repeat" xsi:type="QueryLetRef"/>
                     </source>
                  </operand>
                  <operand path="value" xsi:type="Property">
                     <source path="frequency" xsi:type="Property">
                        <source name="repeat" xsi:type="QueryLetRef"/>
                     </source>
                  </operand>
               </expression>
            </let>
            <let identifier="period">
               <expression classType="t:Quantity" xsi:type="Instance">
                  <element name="value">
                     <value path="value" xsi:type="Property">
                        <source path="period" xsi:type="Property">
                           <source name="repeat" xsi:type="QueryLetRef"/>
                        </source>
                     </value>
                  </element>
                  <element name="unit">
                     <value path="value" xsi:type="Property">
                        <source path="periodUnit" xsi:type="Property">
                           <source name="repeat" xsi:type="QueryLetRef"/>
                        </source>
                     </value>
                  </element>
               </expression>
            </let>
            <let identifier="doseDescription">
               <expression xsi:type="Coalesce">
                  <operand xsi:type="ToList">
                     <operand xsi:type="If">
                        <condition asType="t:Boolean" xsi:type="As">
                           <operand xsi:type="Is">
                              <operand path="dose" xsi:type="Property">
                                 <source name="dosageInstruction" xsi:type="QueryLetRef"/>
                              </operand>
                              <isTypeSpecifier name="fhir:Range" xsi:type="NamedTypeSpecifier"/>
                           </operand>
                        </condition>
                        <then xsi:type="Concatenate">
                           <operand xsi:type="Concatenate">
                              <operand xsi:type="Concatenate">
                                 <operand xsi:type="ToString">
                                    <operand name="ToQuantity" xsi:type="FunctionRef">
                                       <operand path="low" xsi:type="Property">
                                          <source path="dose" xsi:type="Property">
                                             <source name="dosageInstruction" xsi:type="QueryLetRef"/>
                                          </source>
                                       </operand>
                                    </operand>
                                 </operand>
                                 <operand valueType="t:String" value="-" xsi:type="Literal"/>
                              </operand>
                              <operand xsi:type="ToString">
                                 <operand name="ToQuantity" xsi:type="FunctionRef">
                                    <operand path="high" xsi:type="Property">
                                       <source path="dose" xsi:type="Property">
                                          <source name="dosageInstruction" xsi:type="QueryLetRef"/>
                                       </source>
                                    </operand>
                                 </operand>
                              </operand>
                           </operand>
                           <operand path="value" xsi:type="Property">
                              <source path="unit" xsi:type="Property">
                                 <source path="high" xsi:type="Property">
                                    <source path="dose" xsi:type="Property">
                                       <source name="dosageInstruction" xsi:type="QueryLetRef"/>
                                    </source>
                                 </source>
                              </source>
                           </operand>
                        </then>
                        <else xsi:type="ToString">
                           <operand name="ToQuantity" xsi:type="FunctionRef">
                              <operand asType="fhir:Quantity" xsi:type="As">
                                 <operand path="dose" xsi:type="Property">
                                    <source name="dosageInstruction" xsi:type="QueryLetRef"/>
                                 </operand>
                              </operand>
                           </operand>
                        </else>
                     </operand>
                  </operand>
               </expression>
            </let>
            <let identifier="frequencyDescription">
               <expression xsi:type="Concatenate">
                  <operand xsi:type="ToString">
                     <operand path="value" xsi:type="Property">
                        <source path="frequency" xsi:type="Property">
                           <source path="repeat" xsi:type="Property">
                              <source path="timing" xsi:type="Property">
                                 <source name="dosageInstruction" xsi:type="QueryLetRef"/>
                              </source>
                           </source>
                        </source>
                     </operand>
                  </operand>
                  <operand xsi:type="Coalesce">
                     <operand xsi:type="Concatenate">
                        <operand valueType="t:String" value="-" xsi:type="Literal"/>
                        <operand xsi:type="ToString">
                           <operand path="value" xsi:type="Property">
                              <source path="frequencyMax" xsi:type="Property">
                                 <source path="repeat" xsi:type="Property">
                                    <source path="timing" xsi:type="Property">
                                       <source name="dosageInstruction" xsi:type="QueryLetRef"/>
                                    </source>
                                 </source>
                              </source>
                           </operand>
                        </operand>
                     </operand>
                     <operand valueType="t:String" value="" xsi:type="Literal"/>
                  </operand>
               </expression>
            </let>
            <return>
               <expression xsi:type="Tuple">
                  <element name="rxNormCode">
                     <value name="rxNormCode" xsi:type="QueryLetRef"/>
                  </element>
                  <element name="isDraft">
                     <value xsi:type="Equal">
                        <operand path="value" xsi:type="Property">
                           <source path="status" scope="O" xsi:type="Property"/>
                        </operand>
                        <operand valueType="t:String" value="draft" xsi:type="Literal"/>
                     </value>
                  </element>
                  <element name="isPRN">
                     <value path="value" xsi:type="Property">
                        <source path="asNeeded" xsi:type="Property">
                           <source name="dosageInstruction" xsi:type="QueryLetRef"/>
                        </source>
                     </value>
                  </element>
                  <element name="prescription">
                     <value xsi:type="If">
                        <condition asType="t:Boolean" xsi:type="As">
                           <operand xsi:type="Not">
                              <operand xsi:type="IsNull">
                                 <operand path="text" xsi:type="Property">
                                    <source name="dosageInstruction" xsi:type="QueryLetRef"/>
                                 </operand>
                              </operand>
                           </operand>
                        </condition>
                        <then xsi:type="Concatenate">
                           <operand xsi:type="Concatenate">
                              <operand name="medicationName" xsi:type="QueryLetRef"/>
                              <operand valueType="t:String" value=" " xsi:type="Literal"/>
                           </operand>
                           <operand path="value" xsi:type="Property">
                              <source path="text" xsi:type="Property">
                                 <source name="dosageInstruction" xsi:type="QueryLetRef"/>
                              </source>
                           </operand>
                        </then>
                        <else xsi:type="Concatenate">
                           <operand xsi:type="Concatenate">
                              <operand xsi:type="Concatenate">
                                 <operand xsi:type="Concatenate">
                                    <operand xsi:type="Concatenate">
                                       <operand name="medicationName" xsi:type="QueryLetRef"/>
                                       <operand valueType="t:String" value=" " xsi:type="Literal"/>
                                    </operand>
                                    <operand name="doseDescription" xsi:type="QueryLetRef"/>
                                 </operand>
                                 <operand valueType="t:String" value=" q" xsi:type="Literal"/>
                              </operand>
                              <operand name="frequencyDescription" xsi:type="QueryLetRef"/>
                           </operand>
                           <operand xsi:type="If">
                              <condition asType="t:Boolean" xsi:type="As">
                                 <operand path="value" xsi:type="Property">
                                    <source path="asNeeded" xsi:type="Property">
                                       <source name="dosageInstruction" xsi:type="QueryLetRef"/>
                                    </source>
                                 </operand>
                              </condition>
                              <then valueType="t:String" value=" PRN" xsi:type="Literal"/>
                              <else valueType="t:String" value="" xsi:type="Literal"/>
                           </operand>
                        </else>
                     </value>
                  </element>
                  <element name="dose">
                     <value xsi:type="If">
                        <condition asType="t:Boolean" xsi:type="As">
                           <operand xsi:type="Is">
                              <operand path="dose" xsi:type="Property">
                                 <source name="dosageInstruction" xsi:type="QueryLetRef"/>
                              </operand>
                              <isTypeSpecifier name="fhir:Range" xsi:type="NamedTypeSpecifier"/>
                           </operand>
                        </condition>
                        <then name="ToQuantity" xsi:type="FunctionRef">
                           <operand path="high" xsi:type="Property">
                              <source path="dose" xsi:type="Property">
                                 <source name="dosageInstruction" xsi:type="QueryLetRef"/>
                              </source>
                           </operand>
                        </then>
                        <else name="ToQuantity" xsi:type="FunctionRef">
                           <operand asType="fhir:Quantity" xsi:type="As">
                              <operand path="dose" xsi:type="Property">
                                 <source name="dosageInstruction" xsi:type="QueryLetRef"/>
                              </operand>
                           </operand>
                        </else>
                     </value>
                  </element>
                  <element name="dosesPerDay">
                     <value xsi:type="Coalesce">
                        <operand name="ToDaily" libraryName="OMTKLogic" xsi:type="FunctionRef">
                           <operand name="frequency" xsi:type="QueryLetRef"/>
                           <operand name="period" xsi:type="QueryLetRef"/>
                        </operand>
                        <operand valueType="t:Decimal" value="1.0" xsi:type="Literal"/>
                     </value>
                  </element>
               </expression>
            </return>
         </expression>
         <operand name="Orders">
            <operandTypeSpecifier xsi:type="ListTypeSpecifier">
               <elementType name="fhir:MedicationRequest" xsi:type="NamedTypeSpecifier"/>
            </operandTypeSpecifier>
         </operand>
      </def>
      <def name="MME" context="Patient" accessLevel="Public" xsi:type="FunctionDef">
         <expression xsi:type="Query">
            <source alias="P">
               <expression name="Prescriptions" xsi:type="FunctionRef">
                  <operand name="prescriptions" xsi:type="OperandRef"/>
               </expression>
            </source>
            <let identifier="mme">
               <expression xsi:type="SingletonFrom">
                  <operand name="CalculateMMEs" libraryName="OMTKLogic" xsi:type="FunctionRef">
                     <operand xsi:type="List">
                        <element xsi:type="Tuple">
                           <element name="rxNormCode">
                              <value path="rxNormCode" scope="P" xsi:type="Property"/>
                           </element>
                           <element name="doseQuantity">
                              <value path="dose" scope="P" xsi:type="Property"/>
                           </element>
                           <element name="dosesPerDay">
                              <value path="dosesPerDay" scope="P" xsi:type="Property"/>
                           </element>
                        </element>
                     </operand>
                  </operand>
               </expression>
            </let>
            <return>
               <expression xsi:type="Tuple">
                  <element name="rxNormCode">
                     <value path="rxNormCode" scope="P" xsi:type="Property"/>
                  </element>
                  <element name="isDraft">
                     <value path="isDraft" scope="P" xsi:type="Property"/>
                  </element>
                  <element name="isPRN">
                     <value path="isPRN" scope="P" xsi:type="Property"/>
                  </element>
                  <element name="prescription">
                     <value path="prescription" scope="P" xsi:type="Property"/>
                  </element>
                  <element name="dailyDose">
                     <value path="dailyDoseDescription" xsi:type="Property">
                        <source name="mme" xsi:type="QueryLetRef"/>
                     </value>
                  </element>
                  <element name="conversionFactor">
                     <value path="conversionFactor" xsi:type="Property">
                        <source name="mme" xsi:type="QueryLetRef"/>
                     </value>
                  </element>
                  <element name="mme">
                     <value path="mme" xsi:type="Property">
                        <source name="mme" xsi:type="QueryLetRef"/>
                     </value>
                  </element>
               </expression>
            </return>
         </expression>
         <operand name="prescriptions">
            <operandTypeSpecifier xsi:type="ListTypeSpecifier">
               <elementType name="fhir:MedicationRequest" xsi:type="NamedTypeSpecifier"/>
            </operandTypeSpecifier>
         </operand>
      </def>
      <def name="TotalMME" context="Patient" accessLevel="Public" xsi:type="FunctionDef">
         <expression classType="t:Quantity" xsi:type="Instance">
            <element name="value">
               <value xsi:type="Sum">
                  <source xsi:type="Query">
                     <source alias="M">
                        <expression name="MME" xsi:type="FunctionRef">
                           <operand name="prescriptions" xsi:type="OperandRef"/>
                        </expression>
                     </source>
                     <return>
                        <expression path="value" xsi:type="Property">
                           <source path="mme" scope="M" xsi:type="Property"/>
                        </expression>
                     </return>
                  </source>
               </value>
            </element>
            <element name="unit">
               <value valueType="t:String" value="mg/d" xsi:type="Literal"/>
            </element>
         </expression>
         <operand name="prescriptions">
            <operandTypeSpecifier xsi:type="ListTypeSpecifier">
               <elementType name="fhir:MedicationRequest" xsi:type="NamedTypeSpecifier"/>
            </operandTypeSpecifier>
         </operand>
      </def>
      <def name="GetPeriodDays" context="Patient" accessLevel="Public" xsi:type="FunctionDef">
         <expression xsi:type="Case">
            <caseItem>
               <when xsi:type="StartsWith">
                  <operand name="value" xsi:type="OperandRef"/>
                  <operand valueType="t:String" value="year" xsi:type="Literal"/>
               </when>
               <then valueType="t:Decimal" value="365.0" xsi:type="Literal"/>
            </caseItem>
            <caseItem>
               <when xsi:type="StartsWith">
                  <operand name="value" xsi:type="OperandRef"/>
                  <operand valueType="t:String" value="month" xsi:type="Literal"/>
               </when>
               <then valueType="t:Decimal" value="30.0" xsi:type="Literal"/>
            </caseItem>
            <caseItem>
               <when xsi:type="StartsWith">
                  <operand name="value" xsi:type="OperandRef"/>
                  <operand valueType="t:String" value="hour" xsi:type="Literal"/>
               </when>
               <then xsi:type="Divide">
                  <operand valueType="t:Decimal" value="1.0" xsi:type="Literal"/>
                  <operand valueType="t:Decimal" value="24.0" xsi:type="Literal"/>
               </then>
            </caseItem>
            <caseItem>
               <when xsi:type="StartsWith">
                  <operand name="value" xsi:type="OperandRef"/>
                  <operand valueType="t:String" value="minute" xsi:type="Literal"/>
               </when>
               <then xsi:type="Multiply">
                  <operand xsi:type="Divide">
                     <operand valueType="t:Decimal" value="1.0" xsi:type="Literal"/>
                     <operand valueType="t:Decimal" value="24.0" xsi:type="Literal"/>
                  </operand>
                  <operand valueType="t:Decimal" value="60.0" xsi:type="Literal"/>
               </then>
            </caseItem>
            <else valueType="t:Decimal" value="1.0" xsi:type="Literal"/>
         </expression>
         <operand name="value">
            <operandTypeSpecifier name="t:String" xsi:type="NamedTypeSpecifier"/>
         </operand>
      </def>
      <def name="GetDurationInDays" context="Patient" accessLevel="Public" xsi:type="FunctionDef">
         <expression xsi:type="Case">
            <caseItem>
               <when xsi:type="StartsWith">
                  <operand path="value" xsi:type="Property">
                     <source path="unit" xsi:type="Property">
                        <source name="value" xsi:type="OperandRef"/>
                     </source>
                  </operand>
                  <operand valueType="t:String" value="year" xsi:type="Literal"/>
               </when>
               <then xsi:type="Multiply">
                  <operand path="value" xsi:type="Property">
                     <source path="value" xsi:type="Property">
                        <source name="value" xsi:type="OperandRef"/>
                     </source>
                  </operand>
                  <operand valueType="t:Decimal" value="365.0" xsi:type="Literal"/>
               </then>
            </caseItem>
            <caseItem>
               <when xsi:type="StartsWith">
                  <operand path="value" xsi:type="Property">
                     <source path="unit" xsi:type="Property">
                        <source name="value" xsi:type="OperandRef"/>
                     </source>
                  </operand>
                  <operand valueType="t:String" value="month" xsi:type="Literal"/>
               </when>
               <then xsi:type="Multiply">
                  <operand path="value" xsi:type="Property">
                     <source path="value" xsi:type="Property">
                        <source name="value" xsi:type="OperandRef"/>
                     </source>
                  </operand>
                  <operand valueType="t:Decimal" value="30.0" xsi:type="Literal"/>
               </then>
            </caseItem>
            <else path="value" xsi:type="Property">
               <source path="value" xsi:type="Property">
                  <source name="value" xsi:type="OperandRef"/>
               </source>
            </else>
         </expression>
         <operand name="value">
            <operandTypeSpecifier name="fhir:Duration" xsi:type="NamedTypeSpecifier"/>
         </operand>
      </def>
      <def name="ProbableDaysInRange" context="Patient" accessLevel="Public" xsi:type="FunctionDef">
         <expression xsi:type="Query">
            <source alias="orders">
               <expression name="Orders" xsi:type="OperandRef"/>
            </source>
            <let identifier="frequency">
               <expression path="value" xsi:type="Property">
                  <source path="frequency" xsi:type="Property">
                     <source path="repeat" xsi:type="Property">
                        <source path="timing" xsi:type="Property">
                           <source xsi:type="Indexer">
                              <operand path="dosageInstruction" scope="orders" xsi:type="Property"/>
                              <operand valueType="t:Integer" value="0" xsi:type="Literal"/>
                           </source>
                        </source>
                     </source>
                  </source>
               </expression>
            </let>
            <let identifier="period">
               <expression path="value" xsi:type="Property">
                  <source path="period" xsi:type="Property">
                     <source path="repeat" xsi:type="Property">
                        <source path="timing" xsi:type="Property">
                           <source xsi:type="Indexer">
                              <operand path="dosageInstruction" scope="orders" xsi:type="Property"/>
                              <operand valueType="t:Integer" value="0" xsi:type="Literal"/>
                           </source>
                        </source>
                     </source>
                  </source>
               </expression>
            </let>
            <let identifier="periodDays">
               <expression name="GetPeriodDays" xsi:type="FunctionRef">
                  <operand path="value" xsi:type="Property">
                     <source path="periodUnit" xsi:type="Property">
                        <source path="repeat" xsi:type="Property">
                           <source path="timing" xsi:type="Property">
                              <source xsi:type="Indexer">
                                 <operand path="dosageInstruction" scope="orders" xsi:type="Property"/>
                                 <operand valueType="t:Integer" value="0" xsi:type="Literal"/>
                              </source>
                           </source>
                        </source>
                     </source>
                  </operand>
               </expression>
            </let>
            <let identifier="dosesPerDay">
               <expression xsi:type="If">
                  <condition asType="t:Boolean" xsi:type="As">
                     <operand xsi:type="GreaterOrEqual">
                        <operand xsi:type="Divide">
                           <operand xsi:type="ToDecimal">
                              <operand name="frequency" xsi:type="QueryLetRef"/>
                           </operand>
                           <operand xsi:type="Multiply">
                              <operand name="period" xsi:type="QueryLetRef"/>
                              <operand name="periodDays" xsi:type="QueryLetRef"/>
                           </operand>
                        </operand>
                        <operand valueType="t:Decimal" value="1.0" xsi:type="Literal"/>
                     </operand>
                  </condition>
                  <then valueType="t:Decimal" value="1.0" xsi:type="Literal"/>
                  <else xsi:type="Divide">
                     <operand xsi:type="ToDecimal">
                        <operand name="frequency" xsi:type="QueryLetRef"/>
                     </operand>
                     <operand xsi:type="Multiply">
                        <operand name="period" xsi:type="QueryLetRef"/>
                        <operand name="periodDays" xsi:type="QueryLetRef"/>
                     </operand>
                  </else>
               </expression>
            </let>
            <let identifier="repeat">
               <expression path="value" xsi:type="Property">
                  <source path="numberOfRepeatsAllowed" xsi:type="Property">
                     <source path="dispenseRequest" scope="orders" xsi:type="Property"/>
                  </source>
               </expression>
            </let>
            <let identifier="supplyDuration">
               <expression name="GetDurationInDays" xsi:type="FunctionRef">
                  <operand path="expectedSupplyDuration" xsi:type="Property">
                     <source path="dispenseRequest" scope="orders" xsi:type="Property"/>
                  </operand>
               </expression>
            </let>
            <let identifier="validityPeriod">
               <expression precision="Day" xsi:type="DurationBetween">
                  <operand path="value" xsi:type="Property">
                     <source path="start" xsi:type="Property">
                        <source path="validityPeriod" xsi:type="Property">
                           <source path="dispenseRequest" scope="orders" xsi:type="Property"/>
                        </source>
                     </source>
                  </operand>
                  <operand xsi:type="Today"/>
               </expression>
            </let>
            <let identifier="endDifference">
               <expression xsi:type="If">
                  <condition asType="t:Boolean" xsi:type="As">
                     <operand xsi:type="Less">
                        <operand path="value" xsi:type="Property">
                           <source path="end" xsi:type="Property">
                              <source path="validityPeriod" xsi:type="Property">
                                 <source path="dispenseRequest" scope="orders" xsi:type="Property"/>
                              </source>
                           </source>
                        </operand>
                        <operand xsi:type="Today"/>
                     </operand>
                  </condition>
                  <then precision="Day" xsi:type="DurationBetween">
                     <operand path="value" xsi:type="Property">
                        <source path="end" xsi:type="Property">
                           <source path="validityPeriod" xsi:type="Property">
                              <source path="dispenseRequest" scope="orders" xsi:type="Property"/>
                           </source>
                        </source>
                     </operand>
                     <operand xsi:type="Today"/>
                  </then>
                  <else valueType="t:Integer" value="0" xsi:type="Literal"/>
               </expression>
            </let>
            <return>
               <expression xsi:type="GreaterOrEqual">
                  <operand xsi:type="Multiply">
                     <operand xsi:type="Multiply">
                        <operand name="dosesPerDay" xsi:type="QueryLetRef"/>
                        <operand xsi:type="Divide">
                           <operand xsi:type="Multiply">
                              <operand xsi:type="ToDecimal">
                                 <operand name="repeat" xsi:type="QueryLetRef"/>
                              </operand>
                              <operand name="supplyDuration" xsi:type="QueryLetRef"/>
                           </operand>
                           <operand xsi:type="ToDecimal">
                              <operand name="validityPeriod" xsi:type="QueryLetRef"/>
                           </operand>
                        </operand>
                     </operand>
                     <operand xsi:type="ToDecimal">
                        <operand xsi:type="Subtract">
                           <operand name="daysPast" xsi:type="OperandRef"/>
                           <operand name="endDifference" xsi:type="QueryLetRef"/>
                        </operand>
                     </operand>
                  </operand>
                  <operand xsi:type="ToDecimal">
                     <operand name="numDaysInDaysPast" xsi:type="OperandRef"/>
                  </operand>
               </expression>
            </return>
         </expression>
         <operand name="Orders">
            <operandTypeSpecifier xsi:type="ListTypeSpecifier">
               <elementType name="fhir:MedicationRequest" xsi:type="NamedTypeSpecifier"/>
            </operandTypeSpecifier>
         </operand>
         <operand name="daysPast">
            <operandTypeSpecifier name="t:Integer" xsi:type="NamedTypeSpecifier"/>
         </operand>
         <operand name="numDaysInDaysPast">
            <operandTypeSpecifier name="t:Integer" xsi:type="NamedTypeSpecifier"/>
         </operand>
      </def>
      <def name="IsNaloxone" context="Patient" accessLevel="Public" xsi:type="FunctionDef">
         <expression xsi:type="InValueSet">
            <code name="rxNormCode" xsi:type="OperandRef"/>
            <valueset name="Naloxone"/>
         </expression>
         <operand name="rxNormCode">
            <operandTypeSpecifier name="t:Code" xsi:type="NamedTypeSpecifier"/>
         </operand>
      </def>
      <def name="IsBenzodiazepine" context="Patient" accessLevel="Public" xsi:type="FunctionDef">
         <expression xsi:type="InValueSet">
            <code name="rxNormCode" xsi:type="OperandRef"/>
            <valueset name="Benzodiazepines"/>
         </expression>
         <operand name="rxNormCode">
            <operandTypeSpecifier name="t:Code" xsi:type="NamedTypeSpecifier"/>
         </operand>
      </def>
      <def name="IsOpioidWithAmbulatoryAbusePotential" context="Patient" accessLevel="Public" xsi:type="FunctionDef">
         <expression xsi:type="InValueSet">
            <code name="rxNormCode" xsi:type="OperandRef"/>
            <valueset name="Ambulatory Abuse Potential Opioids"/>
         </expression>
         <operand name="rxNormCode">
            <operandTypeSpecifier name="t:Code" xsi:type="NamedTypeSpecifier"/>
         </operand>
      </def>
      <def name="IsLongActingOpioid" context="Patient" accessLevel="Public" xsi:type="FunctionDef">
         <expression xsi:type="InValueSet">
            <code name="rxNormCode" xsi:type="OperandRef"/>
            <valueset name="Long Acting Opioids"/>
         </expression>
         <operand name="rxNormCode">
            <operandTypeSpecifier name="t:Code" xsi:type="NamedTypeSpecifier"/>
         </operand>
      </def>
      <def name="IsEndOfLifeOpioid" context="Patient" accessLevel="Public" xsi:type="FunctionDef">
         <expression xsi:type="InValueSet">
            <code name="rxNormCode" xsi:type="OperandRef"/>
            <valueset name="End Of Life Opioids"/>
         </expression>
         <operand name="rxNormCode">
            <operandTypeSpecifier name="t:Code" xsi:type="NamedTypeSpecifier"/>
         </operand>
      </def>
      <def name="IsOpioidDrugScreen" context="Patient" accessLevel="Public" xsi:type="FunctionDef">
         <expression xsi:type="InValueSet">
            <code name="observationCode" xsi:type="OperandRef"/>
            <valueset name="Opioid Drug Screening"/>
         </expression>
         <operand name="observationCode">
            <operandTypeSpecifier name="t:Code" xsi:type="NamedTypeSpecifier"/>
         </operand>
      </def>
      <def name="IsIllicitDrugScreen" context="Patient" accessLevel="Public" xsi:type="FunctionDef">
         <expression xsi:type="InValueSet">
            <code name="observationCode" xsi:type="OperandRef"/>
            <valueset name="Illicit Drug Screening"/>
         </expression>
         <operand name="observationCode">
            <operandTypeSpecifier name="t:Code" xsi:type="NamedTypeSpecifier"/>
         </operand>
      </def>
      <def name="GetIngredient" context="Patient" accessLevel="Public" xsi:type="FunctionDef">
         <expression xsi:type="Query">
            <source alias="$this">
               <expression name="GetIngredients" libraryName="OMTKLogic" xsi:type="FunctionRef">
                  <operand name="rxNormCode" xsi:type="OperandRef"/>
               </expression>
            </source>
            <where xsi:type="Not">
               <operand xsi:type="IsNull">
                  <operand path="ingredientName" xsi:type="Property">
                     <source name="$this" xsi:type="AliasRef"/>
                  </operand>
               </operand>
            </where>
            <return>
               <expression path="ingredientName" xsi:type="Property">
                  <source name="$this" xsi:type="AliasRef"/>
               </expression>
            </return>
         </expression>
         <operand name="rxNormCode">
            <operandTypeSpecifier name="t:Code" xsi:type="NamedTypeSpecifier"/>
         </operand>
      </def>
   </statements>
</library>

      

{
  "resourceType" : "Library",
  "id" : "opioidcds-common",
  "meta" : {
    "versionId" : "1",
    "lastUpdated" : "2021-05-24T10:50:20.375Z",
    "tag" : [
      {
        "system" : "http://terminology.hl7.org/CodeSystem/v3-ActReason",
        "code" : "HTEST",
        "display" : "test health data"
      }
    ]
  },
  "text" : {
    "status" : "generated",
    "div" : "<div xmlns=\"http://www.w3.org/1999/xhtml\">\n <h2>Participants</h2>\n <table class=\"grid\">\n <tr>\n <td>Author</td>\n <td>Kensaku Kawamoto, MD, PhD, MHS</td>\n </tr>\n <tr>\n <td>Author</td>\n <td>Bryn Rhodes</td>\n </tr>\n <tr>\n <td>Author</td>\n <td>Floyd Eisenberg, MD, MPH</td>\n </tr>\n <tr>\n <td>Author</td>\n <td>Robert McClure, MD, MPH</td>\n </tr>\n </table>\n <h2>Related Artifacts</h2>\n <table class=\"grid\">\n <tr>\n <td>Documentation</td>\n <td>CDC guideline for prescribing opioids for chronic pain</td>\n <td>https://guidelines.gov/summaries/summary/50153/cdc-guideline-for-prescribing-opioids-for-chronic-pain---united-states-2016#420</td>\n </tr>\n <tr>\n <td>Depends On</td>\n <td/>\n <td>\n <code>http://example.org/fhir/Library/omtk-logic</code>\n </td>\n </tr>\n <tr>\n <td>Documentation</td>\n <td>MME Conversion Tables</td>\n <td>https://www.cdc.gov/drugoverdose/pdf/calculating_total_daily_dose-a.pdf</td>\n </tr>\n </table>\n <h2>Contents</h2>\n <p>\n <code>application/elm+xml</code>\n </p>\n <pre>\n <code>&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&gt;\n&lt;library xmlns=\"urn:hl7-org:elm:r1\" xmlns:t=\"urn:hl7-org:elm-types:r1\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:fhir=\"http://hl7.org/fhir\" xmlns:qdm43=\"urn:healthit-gov:qdm:v4_3\" xmlns:qdm53=\"urn:healthit-gov:qdm:v5_3\" xmlns:a=\"urn:hl7-org:cql-annotations:r1\"&gt;\n &lt;identifier id=\"OpioidCDS_STU4_Common\" version=\"0.1.0\"/&gt;\n &lt;schemaIdentifier id=\"urn:hl7-org:elm\" version=\"r1\"/&gt;\n &lt;usings&gt;\n &lt;def localIdentifier=\"System\" uri=\"urn:hl7-org:elm-types:r1\"/&gt;\n &lt;def localIdentifier=\"FHIR\" uri=\"http://hl7.org/fhir\" version=\"3.2.0\"/&gt;\n &lt;/usings&gt;\n &lt;includes&gt;\n &lt;def localIdentifier=\"OMTKLogic\" path=\"OMTKLogic\" version=\"0.1.0\"/&gt;\n &lt;/includes&gt;\n &lt;valueSets&gt;\n &lt;def name=\"Benzodiazepines\" id=\"benzodiazepines\" accessLevel=\"Public\"/&gt;\n &lt;def name=\"Naloxone\" id=\"naloxone\" accessLevel=\"Public\"/&gt;\n &lt;def name=\"Ambulatory Abuse Potential Opioids\" id=\"opioids-abused-in-ambulatory-care\" accessLevel=\"Public\"/&gt;\n &lt;def name=\"End Of Life Opioids\" id=\"opioids-indicating-end-of-life\" accessLevel=\"Public\"/&gt;\n &lt;def name=\"Long Acting Opioids\" id=\"long-acting-opioids\" accessLevel=\"Public\"/&gt;\n &lt;def name=\"Illicit Drug Screening\" id=\"illicit-drug-urine-screening\" accessLevel=\"Public\"/&gt;\n &lt;def name=\"Opioid Drug Screening\" id=\"opioid-urine-screening\" accessLevel=\"Public\"/&gt;\n &lt;def name=\"Opioids\" id=\"opioids\" accessLevel=\"Public\"/&gt;\n &lt;def name=\"Codeine Cough Meds\" id=\"opioids-codeine-cough-meds\" accessLevel=\"Public\"/&gt;\n &lt;def name=\"Short Acting Opioids\" id=\"short-acting-opioids\" accessLevel=\"Public\"/&gt;\n &lt;/valueSets&gt;\n &lt;statements&gt;\n &lt;def name=\"IsForChronicPain\" context=\"Patient\" accessLevel=\"Public\"&gt;\n &lt;expression valueType=\"t:Boolean\" value=\"true\" xsi:type=\"Literal\"/&gt;\n &lt;/def&gt;\n &lt;def name=\"HasMetastaticCancer\" context=\"Patient\" accessLevel=\"Public\"&gt;\n &lt;expression valueType=\"t:Boolean\" value=\"false\" xsi:type=\"Literal\"/&gt;\n &lt;/def&gt;\n &lt;def name=\"ToCode\" context=\"Patient\" accessLevel=\"Public\" xsi:type=\"FunctionDef\"&gt;\n &lt;expression classType=\"t:Code\" xsi:type=\"Instance\"&gt;\n &lt;element name=\"code\"&gt;\n &lt;value path=\"value\" xsi:type=\"Property\"&gt;\n &lt;source path=\"code\" xsi:type=\"Property\"&gt;\n &lt;source name=\"coding\" xsi:type=\"OperandRef\"/&gt;\n &lt;/source&gt;\n &lt;/value&gt;\n &lt;/element&gt;\n &lt;element name=\"system\"&gt;\n &lt;value path=\"value\" xsi:type=\"Property\"&gt;\n &lt;source path=\"system\" xsi:type=\"Property\"&gt;\n &lt;source name=\"coding\" xsi:type=\"OperandRef\"/&gt;\n &lt;/source&gt;\n &lt;/value&gt;\n &lt;/element&gt;\n &lt;element name=\"version\"&gt;\n &lt;value path=\"value\" xsi:type=\"Property\"&gt;\n &lt;source path=\"version\" xsi:type=\"Property\"&gt;\n &lt;source name=\"coding\" xsi:type=\"OperandRef\"/&gt;\n &lt;/source&gt;\n &lt;/value&gt;\n &lt;/element&gt;\n &lt;element name=\"display\"&gt;\n &lt;value path=\"value\" xsi:type=\"Property\"&gt;\n &lt;source path=\"display\" xsi:type=\"Property\"&gt;\n &lt;source name=\"coding\" xsi:type=\"OperandRef\"/&gt;\n &lt;/source&gt;\n &lt;/value&gt;\n &lt;/element&gt;\n &lt;/expression&gt;\n &lt;operand name=\"coding\"&gt;\n &lt;operandTypeSpecifier name=\"fhir:Coding\" xsi:type=\"NamedTypeSpecifier\"/&gt;\n &lt;/operand&gt;\n &lt;/def&gt;\n &lt;def name=\"ToQuantity\" context=\"Patient\" accessLevel=\"Public\" xsi:type=\"FunctionDef\"&gt;\n &lt;expression classType=\"t:Quantity\" xsi:type=\"Instance\"&gt;\n &lt;element name=\"value\"&gt;\n &lt;value path=\"value\" xsi:type=\"Property\"&gt;\n &lt;source path=\"value\" xsi:type=\"Property\"&gt;\n &lt;source name=\"quantity\" xsi:type=\"OperandRef\"/&gt;\n &lt;/source&gt;\n &lt;/value&gt;\n &lt;/element&gt;\n &lt;element name=\"unit\"&gt;\n &lt;value path=\"value\" xsi:type=\"Property\"&gt;\n &lt;source path=\"unit\" xsi:type=\"Property\"&gt;\n &lt;source name=\"quantity\" xsi:type=\"OperandRef\"/&gt;\n &lt;/source&gt;\n &lt;/value&gt;\n &lt;/element&gt;\n &lt;/expression&gt;\n &lt;operand name=\"quantity\"&gt;\n &lt;operandTypeSpecifier name=\"fhir:Quantity\" xsi:type=\"NamedTypeSpecifier\"/&gt;\n &lt;/operand&gt;\n &lt;/def&gt;\n &lt;def name=\"Prescriptions\" context=\"Patient\" accessLevel=\"Public\" xsi:type=\"FunctionDef\"&gt;\n &lt;expression xsi:type=\"Query\"&gt;\n &lt;source alias=\"O\"&gt;\n &lt;expression name=\"Orders\" xsi:type=\"OperandRef\"/&gt;\n &lt;/source&gt;\n &lt;let identifier=\"rxNormCode\"&gt;\n &lt;expression name=\"ToCode\" xsi:type=\"FunctionRef\"&gt;\n &lt;operand xsi:type=\"Indexer\"&gt;\n &lt;operand path=\"coding\" xsi:type=\"Property\"&gt;\n &lt;source path=\"medication\" scope=\"O\" xsi:type=\"Property\"/&gt;\n &lt;/operand&gt;\n &lt;operand valueType=\"t:Integer\" value=\"0\" xsi:type=\"Literal\"/&gt;\n &lt;/operand&gt;\n &lt;/expression&gt;\n &lt;/let&gt;\n &lt;let identifier=\"medicationName\"&gt;\n &lt;expression name=\"GetMedicationName\" libraryName=\"OMTKLogic\" xsi:type=\"FunctionRef\"&gt;\n &lt;operand name=\"rxNormCode\" xsi:type=\"QueryLetRef\"/&gt;\n &lt;/expression&gt;\n &lt;/let&gt;\n &lt;let identifier=\"dosageInstruction\"&gt;\n &lt;expression xsi:type=\"Indexer\"&gt;\n &lt;operand path=\"dosageInstruction\" scope=\"O\" xsi:type=\"Property\"/&gt;\n &lt;operand valueType=\"t:Integer\" value=\"0\" xsi:type=\"Literal\"/&gt;\n &lt;/expression&gt;\n &lt;/let&gt;\n &lt;let identifier=\"repeat\"&gt;\n &lt;expression path=\"repeat\" xsi:type=\"Property\"&gt;\n &lt;source path=\"timing\" xsi:type=\"Property\"&gt;\n &lt;source name=\"dosageInstruction\" xsi:type=\"QueryLetRef\"/&gt;\n &lt;/source&gt;\n &lt;/expression&gt;\n &lt;/let&gt;\n &lt;let identifier=\"frequency\"&gt;\n &lt;expression xsi:type=\"Coalesce\"&gt;\n &lt;operand path=\"value\" xsi:type=\"Property\"&gt;\n &lt;source path=\"frequencyMax\" xsi:type=\"Property\"&gt;\n &lt;source name=\"repeat\" xsi:type=\"QueryLetRef\"/&gt;\n &lt;/source&gt;\n &lt;/operand&gt;\n &lt;operand path=\"value\" xsi:type=\"Property\"&gt;\n &lt;source path=\"frequency\" xsi:type=\"Property\"&gt;\n &lt;source name=\"repeat\" xsi:type=\"QueryLetRef\"/&gt;\n &lt;/source&gt;\n &lt;/operand&gt;\n &lt;/expression&gt;\n &lt;/let&gt;\n &lt;let identifier=\"period\"&gt;\n &lt;expression classType=\"t:Quantity\" xsi:type=\"Instance\"&gt;\n &lt;element name=\"value\"&gt;\n &lt;value path=\"value\" xsi:type=\"Property\"&gt;\n &lt;source path=\"period\" xsi:type=\"Property\"&gt;\n &lt;source name=\"repeat\" xsi:type=\"QueryLetRef\"/&gt;\n &lt;/source&gt;\n &lt;/value&gt;\n &lt;/element&gt;\n &lt;element name=\"unit\"&gt;\n &lt;value path=\"value\" xsi:type=\"Property\"&gt;\n &lt;source path=\"periodUnit\" xsi:type=\"Property\"&gt;\n &lt;source name=\"repeat\" xsi:type=\"QueryLetRef\"/&gt;\n &lt;/source&gt;\n &lt;/value&gt;\n &lt;/element&gt;\n &lt;/expression&gt;\n &lt;/let&gt;\n &lt;let identifier=\"doseDescription\"&gt;\n &lt;expression xsi:type=\"Coalesce\"&gt;\n &lt;operand xsi:type=\"ToList\"&gt;\n &lt;operand xsi:type=\"If\"&gt;\n &lt;condition asType=\"t:Boolean\" xsi:type=\"As\"&gt;\n &lt;operand xsi:type=\"Is\"&gt;\n &lt;operand path=\"dose\" xsi:type=\"Property\"&gt;\n &lt;source name=\"dosageInstruction\" xsi:type=\"QueryLetRef\"/&gt;\n &lt;/operand&gt;\n &lt;isTypeSpecifier name=\"fhir:Range\" xsi:type=\"NamedTypeSpecifier\"/&gt;\n &lt;/operand&gt;\n &lt;/condition&gt;\n &lt;then xsi:type=\"Concatenate\"&gt;\n &lt;operand xsi:type=\"Concatenate\"&gt;\n &lt;operand xsi:type=\"Concatenate\"&gt;\n &lt;operand xsi:type=\"ToString\"&gt;\n &lt;operand name=\"ToQuantity\" xsi:type=\"FunctionRef\"&gt;\n &lt;operand path=\"low\" xsi:type=\"Property\"&gt;\n &lt;source path=\"dose\" xsi:type=\"Property\"&gt;\n &lt;source name=\"dosageInstruction\" xsi:type=\"QueryLetRef\"/&gt;\n &lt;/source&gt;\n &lt;/operand&gt;\n &lt;/operand&gt;\n &lt;/operand&gt;\n &lt;operand valueType=\"t:String\" value=\"-\" xsi:type=\"Literal\"/&gt;\n &lt;/operand&gt;\n &lt;operand xsi:type=\"ToString\"&gt;\n &lt;operand name=\"ToQuantity\" xsi:type=\"FunctionRef\"&gt;\n &lt;operand path=\"high\" xsi:type=\"Property\"&gt;\n &lt;source path=\"dose\" xsi:type=\"Property\"&gt;\n &lt;source name=\"dosageInstruction\" xsi:type=\"QueryLetRef\"/&gt;\n &lt;/source&gt;\n &lt;/operand&gt;\n &lt;/operand&gt;\n &lt;/operand&gt;\n &lt;/operand&gt;\n &lt;operand path=\"value\" xsi:type=\"Property\"&gt;\n &lt;source path=\"unit\" xsi:type=\"Property\"&gt;\n &lt;source path=\"high\" xsi:type=\"Property\"&gt;\n &lt;source path=\"dose\" xsi:type=\"Property\"&gt;\n &lt;source name=\"dosageInstruction\" xsi:type=\"QueryLetRef\"/&gt;\n &lt;/source&gt;\n &lt;/source&gt;\n &lt;/source&gt;\n &lt;/operand&gt;\n &lt;/then&gt;\n &lt;else xsi:type=\"ToString\"&gt;\n &lt;operand name=\"ToQuantity\" xsi:type=\"FunctionRef\"&gt;\n &lt;operand asType=\"fhir:Quantity\" xsi:type=\"As\"&gt;\n &lt;operand path=\"dose\" xsi:type=\"Property\"&gt;\n &lt;source name=\"dosageInstruction\" xsi:type=\"QueryLetRef\"/&gt;\n &lt;/operand&gt;\n &lt;/operand&gt;\n &lt;/operand&gt;\n &lt;/else&gt;\n &lt;/operand&gt;\n &lt;/operand&gt;\n &lt;/expression&gt;\n &lt;/let&gt;\n &lt;let identifier=\"frequencyDescription\"&gt;\n &lt;expression xsi:type=\"Concatenate\"&gt;\n &lt;operand xsi:type=\"ToString\"&gt;\n &lt;operand path=\"value\" xsi:type=\"Property\"&gt;\n &lt;source path=\"frequency\" xsi:type=\"Property\"&gt;\n &lt;source path=\"repeat\" xsi:type=\"Property\"&gt;\n &lt;source path=\"timing\" xsi:type=\"Property\"&gt;\n &lt;source name=\"dosageInstruction\" xsi:type=\"QueryLetRef\"/&gt;\n &lt;/source&gt;\n &lt;/source&gt;\n &lt;/source&gt;\n &lt;/operand&gt;\n &lt;/operand&gt;\n &lt;operand xsi:type=\"Coalesce\"&gt;\n &lt;operand xsi:type=\"Concatenate\"&gt;\n &lt;operand valueType=\"t:String\" value=\"-\" xsi:type=\"Literal\"/&gt;\n &lt;operand xsi:type=\"ToString\"&gt;\n &lt;operand path=\"value\" xsi:type=\"Property\"&gt;\n &lt;source path=\"frequencyMax\" xsi:type=\"Property\"&gt;\n &lt;source path=\"repeat\" xsi:type=\"Property\"&gt;\n &lt;source path=\"timing\" xsi:type=\"Property\"&gt;\n &lt;source name=\"dosageInstruction\" xsi:type=\"QueryLetRef\"/&gt;\n &lt;/source&gt;\n &lt;/source&gt;\n &lt;/source&gt;\n &lt;/operand&gt;\n &lt;/operand&gt;\n &lt;/operand&gt;\n &lt;operand valueType=\"t:String\" value=\"\" xsi:type=\"Literal\"/&gt;\n &lt;/operand&gt;\n &lt;/expression&gt;\n &lt;/let&gt;\n &lt;return&gt;\n &lt;expression xsi:type=\"Tuple\"&gt;\n &lt;element name=\"rxNormCode\"&gt;\n &lt;value name=\"rxNormCode\" xsi:type=\"QueryLetRef\"/&gt;\n &lt;/element&gt;\n &lt;element name=\"isDraft\"&gt;\n &lt;value xsi:type=\"Equal\"&gt;\n &lt;operand path=\"value\" xsi:type=\"Property\"&gt;\n &lt;source path=\"status\" scope=\"O\" xsi:type=\"Property\"/&gt;\n &lt;/operand&gt;\n &lt;operand valueType=\"t:String\" value=\"draft\" xsi:type=\"Literal\"/&gt;\n &lt;/value&gt;\n &lt;/element&gt;\n &lt;element name=\"isPRN\"&gt;\n &lt;value path=\"value\" xsi:type=\"Property\"&gt;\n &lt;source path=\"asNeeded\" xsi:type=\"Property\"&gt;\n &lt;source name=\"dosageInstruction\" xsi:type=\"QueryLetRef\"/&gt;\n &lt;/source&gt;\n &lt;/value&gt;\n &lt;/element&gt;\n &lt;element name=\"prescription\"&gt;\n &lt;value xsi:type=\"If\"&gt;\n &lt;condition asType=\"t:Boolean\" xsi:type=\"As\"&gt;\n &lt;operand xsi:type=\"Not\"&gt;\n &lt;operand xsi:type=\"IsNull\"&gt;\n &lt;operand path=\"text\" xsi:type=\"Property\"&gt;\n &lt;source name=\"dosageInstruction\" xsi:type=\"QueryLetRef\"/&gt;\n &lt;/operand&gt;\n &lt;/operand&gt;\n &lt;/operand&gt;\n &lt;/condition&gt;\n &lt;then xsi:type=\"Concatenate\"&gt;\n &lt;operand xsi:type=\"Concatenate\"&gt;\n &lt;operand name=\"medicationName\" xsi:type=\"QueryLetRef\"/&gt;\n &lt;operand valueType=\"t:String\" value=\" \" xsi:type=\"Literal\"/&gt;\n &lt;/operand&gt;\n &lt;operand path=\"value\" xsi:type=\"Property\"&gt;\n &lt;source path=\"text\" xsi:type=\"Property\"&gt;\n &lt;source name=\"dosageInstruction\" xsi:type=\"QueryLetRef\"/&gt;\n &lt;/source&gt;\n &lt;/operand&gt;\n &lt;/then&gt;\n &lt;else xsi:type=\"Concatenate\"&gt;\n &lt;operand xsi:type=\"Concatenate\"&gt;\n &lt;operand xsi:type=\"Concatenate\"&gt;\n &lt;operand xsi:type=\"Concatenate\"&gt;\n &lt;operand xsi:type=\"Concatenate\"&gt;\n &lt;operand name=\"medicationName\" xsi:type=\"QueryLetRef\"/&gt;\n &lt;operand valueType=\"t:String\" value=\" \" xsi:type=\"Literal\"/&gt;\n &lt;/operand&gt;\n &lt;operand name=\"doseDescription\" xsi:type=\"QueryLetRef\"/&gt;\n &lt;/operand&gt;\n &lt;operand valueType=\"t:String\" value=\" q\" xsi:type=\"Literal\"/&gt;\n &lt;/operand&gt;\n &lt;operand name=\"frequencyDescription\" xsi:type=\"QueryLetRef\"/&gt;\n &lt;/operand&gt;\n &lt;operand xsi:type=\"If\"&gt;\n &lt;condition asType=\"t:Boolean\" xsi:type=\"As\"&gt;\n &lt;operand path=\"value\" xsi:type=\"Property\"&gt;\n &lt;source path=\"asNeeded\" xsi:type=\"Property\"&gt;\n &lt;source name=\"dosageInstruction\" xsi:type=\"QueryLetRef\"/&gt;\n &lt;/source&gt;\n &lt;/operand&gt;\n &lt;/condition&gt;\n &lt;then valueType=\"t:String\" value=\" PRN\" xsi:type=\"Literal\"/&gt;\n &lt;else valueType=\"t:String\" value=\"\" xsi:type=\"Literal\"/&gt;\n &lt;/operand&gt;\n &lt;/else&gt;\n &lt;/value&gt;\n &lt;/element&gt;\n &lt;element name=\"dose\"&gt;\n &lt;value xsi:type=\"If\"&gt;\n &lt;condition asType=\"t:Boolean\" xsi:type=\"As\"&gt;\n &lt;operand xsi:type=\"Is\"&gt;\n &lt;operand path=\"dose\" xsi:type=\"Property\"&gt;\n &lt;source name=\"dosageInstruction\" xsi:type=\"QueryLetRef\"/&gt;\n &lt;/operand&gt;\n &lt;isTypeSpecifier name=\"fhir:Range\" xsi:type=\"NamedTypeSpecifier\"/&gt;\n &lt;/operand&gt;\n &lt;/condition&gt;\n &lt;then name=\"ToQuantity\" xsi:type=\"FunctionRef\"&gt;\n &lt;operand path=\"high\" xsi:type=\"Property\"&gt;\n &lt;source path=\"dose\" xsi:type=\"Property\"&gt;\n &lt;source name=\"dosageInstruction\" xsi:type=\"QueryLetRef\"/&gt;\n &lt;/source&gt;\n &lt;/operand&gt;\n &lt;/then&gt;\n &lt;else name=\"ToQuantity\" xsi:type=\"FunctionRef\"&gt;\n &lt;operand asType=\"fhir:Quantity\" xsi:type=\"As\"&gt;\n &lt;operand path=\"dose\" xsi:type=\"Property\"&gt;\n &lt;source name=\"dosageInstruction\" xsi:type=\"QueryLetRef\"/&gt;\n &lt;/operand&gt;\n &lt;/operand&gt;\n &lt;/else&gt;\n &lt;/value&gt;\n &lt;/element&gt;\n &lt;element name=\"dosesPerDay\"&gt;\n &lt;value xsi:type=\"Coalesce\"&gt;\n &lt;operand name=\"ToDaily\" libraryName=\"OMTKLogic\" xsi:type=\"FunctionRef\"&gt;\n &lt;operand name=\"frequency\" xsi:type=\"QueryLetRef\"/&gt;\n &lt;operand name=\"period\" xsi:type=\"QueryLetRef\"/&gt;\n &lt;/operand&gt;\n &lt;operand valueType=\"t:Decimal\" value=\"1.0\" xsi:type=\"Literal\"/&gt;\n &lt;/value&gt;\n &lt;/element&gt;\n &lt;/expression&gt;\n &lt;/return&gt;\n &lt;/expression&gt;\n &lt;operand name=\"Orders\"&gt;\n &lt;operandTypeSpecifier xsi:type=\"ListTypeSpecifier\"&gt;\n &lt;elementType name=\"fhir:MedicationRequest\" xsi:type=\"NamedTypeSpecifier\"/&gt;\n &lt;/operandTypeSpecifier&gt;\n &lt;/operand&gt;\n &lt;/def&gt;\n &lt;def name=\"MME\" context=\"Patient\" accessLevel=\"Public\" xsi:type=\"FunctionDef\"&gt;\n &lt;expression xsi:type=\"Query\"&gt;\n &lt;source alias=\"P\"&gt;\n &lt;expression name=\"Prescriptions\" xsi:type=\"FunctionRef\"&gt;\n &lt;operand name=\"prescriptions\" xsi:type=\"OperandRef\"/&gt;\n &lt;/expression&gt;\n &lt;/source&gt;\n &lt;let identifier=\"mme\"&gt;\n &lt;expression xsi:type=\"SingletonFrom\"&gt;\n &lt;operand name=\"CalculateMMEs\" libraryName=\"OMTKLogic\" xsi:type=\"FunctionRef\"&gt;\n &lt;operand xsi:type=\"List\"&gt;\n &lt;element xsi:type=\"Tuple\"&gt;\n &lt;element name=\"rxNormCode\"&gt;\n &lt;value path=\"rxNormCode\" scope=\"P\" xsi:type=\"Property\"/&gt;\n &lt;/element&gt;\n &lt;element name=\"doseQuantity\"&gt;\n &lt;value path=\"dose\" scope=\"P\" xsi:type=\"Property\"/&gt;\n &lt;/element&gt;\n &lt;element name=\"dosesPerDay\"&gt;\n &lt;value path=\"dosesPerDay\" scope=\"P\" xsi:type=\"Property\"/&gt;\n &lt;/element&gt;\n &lt;/element&gt;\n &lt;/operand&gt;\n &lt;/operand&gt;\n &lt;/expression&gt;\n &lt;/let&gt;\n &lt;return&gt;\n &lt;expression xsi:type=\"Tuple\"&gt;\n &lt;element name=\"rxNormCode\"&gt;\n &lt;value path=\"rxNormCode\" scope=\"P\" xsi:type=\"Property\"/&gt;\n &lt;/element&gt;\n &lt;element name=\"isDraft\"&gt;\n &lt;value path=\"isDraft\" scope=\"P\" xsi:type=\"Property\"/&gt;\n &lt;/element&gt;\n &lt;element name=\"isPRN\"&gt;\n &lt;value path=\"isPRN\" scope=\"P\" xsi:type=\"Property\"/&gt;\n &lt;/element&gt;\n &lt;element name=\"prescription\"&gt;\n &lt;value path=\"prescription\" scope=\"P\" xsi:type=\"Property\"/&gt;\n &lt;/element&gt;\n &lt;element name=\"dailyDose\"&gt;\n &lt;value path=\"dailyDoseDescription\" xsi:type=\"Property\"&gt;\n &lt;source name=\"mme\" xsi:type=\"QueryLetRef\"/&gt;\n &lt;/value&gt;\n &lt;/element&gt;\n &lt;element name=\"conversionFactor\"&gt;\n &lt;value path=\"conversionFactor\" xsi:type=\"Property\"&gt;\n &lt;source name=\"mme\" xsi:type=\"QueryLetRef\"/&gt;\n &lt;/value&gt;\n &lt;/element&gt;\n &lt;element name=\"mme\"&gt;\n &lt;value path=\"mme\" xsi:type=\"Property\"&gt;\n &lt;source name=\"mme\" xsi:type=\"QueryLetRef\"/&gt;\n &lt;/value&gt;\n &lt;/element&gt;\n &lt;/expression&gt;\n &lt;/return&gt;\n &lt;/expression&gt;\n &lt;operand name=\"prescriptions\"&gt;\n &lt;operandTypeSpecifier xsi:type=\"ListTypeSpecifier\"&gt;\n &lt;elementType name=\"fhir:MedicationRequest\" xsi:type=\"NamedTypeSpecifier\"/&gt;\n &lt;/operandTypeSpecifier&gt;\n &lt;/operand&gt;\n &lt;/def&gt;\n &lt;def name=\"TotalMME\" context=\"Patient\" accessLevel=\"Public\" xsi:type=\"FunctionDef\"&gt;\n &lt;expression classType=\"t:Quantity\" xsi:type=\"Instance\"&gt;\n &lt;element name=\"value\"&gt;\n &lt;value xsi:type=\"Sum\"&gt;\n &lt;source xsi:type=\"Query\"&gt;\n &lt;source alias=\"M\"&gt;\n &lt;expression name=\"MME\" xsi:type=\"FunctionRef\"&gt;\n &lt;operand name=\"prescriptions\" xsi:type=\"OperandRef\"/&gt;\n &lt;/expression&gt;\n &lt;/source&gt;\n &lt;return&gt;\n &lt;expression path=\"value\" xsi:type=\"Property\"&gt;\n &lt;source path=\"mme\" scope=\"M\" xsi:type=\"Property\"/&gt;\n &lt;/expression&gt;\n &lt;/return&gt;\n &lt;/source&gt;\n &lt;/value&gt;\n &lt;/element&gt;\n &lt;element name=\"unit\"&gt;\n &lt;value valueType=\"t:String\" value=\"mg/d\" xsi:type=\"Literal\"/&gt;\n &lt;/element&gt;\n &lt;/expression&gt;\n &lt;operand name=\"prescriptions\"&gt;\n &lt;operandTypeSpecifier xsi:type=\"ListTypeSpecifier\"&gt;\n &lt;elementType name=\"fhir:MedicationRequest\" xsi:type=\"NamedTypeSpecifier\"/&gt;\n &lt;/operandTypeSpecifier&gt;\n &lt;/operand&gt;\n &lt;/def&gt;\n &lt;def name=\"GetPeriodDays\" context=\"Patient\" accessLevel=\"Public\" xsi:type=\"FunctionDef\"&gt;\n &lt;expression xsi:type=\"Case\"&gt;\n &lt;caseItem&gt;\n &lt;when xsi:type=\"StartsWith\"&gt;\n &lt;operand name=\"value\" xsi:type=\"OperandRef\"/&gt;\n &lt;operand valueType=\"t:String\" value=\"year\" xsi:type=\"Literal\"/&gt;\n &lt;/when&gt;\n &lt;then valueType=\"t:Decimal\" value=\"365.0\" xsi:type=\"Literal\"/&gt;\n &lt;/caseItem&gt;\n &lt;caseItem&gt;\n &lt;when xsi:type=\"StartsWith\"&gt;\n &lt;operand name=\"value\" xsi:type=\"OperandRef\"/&gt;\n &lt;operand valueType=\"t:String\" value=\"month\" xsi:type=\"Literal\"/&gt;\n &lt;/when&gt;\n &lt;then valueType=\"t:Decimal\" value=\"30.0\" xsi:type=\"Literal\"/&gt;\n &lt;/caseItem&gt;\n &lt;caseItem&gt;\n &lt;when xsi:type=\"StartsWith\"&gt;\n &lt;operand name=\"value\" xsi:type=\"OperandRef\"/&gt;\n &lt;operand valueType=\"t:String\" value=\"hour\" xsi:type=\"Literal\"/&gt;\n &lt;/when&gt;\n &lt;then xsi:type=\"Divide\"&gt;\n &lt;operand valueType=\"t:Decimal\" value=\"1.0\" xsi:type=\"Literal\"/&gt;\n &lt;operand valueType=\"t:Decimal\" value=\"24.0\" xsi:type=\"Literal\"/&gt;\n &lt;/then&gt;\n &lt;/caseItem&gt;\n &lt;caseItem&gt;\n &lt;when xsi:type=\"StartsWith\"&gt;\n &lt;operand name=\"value\" xsi:type=\"OperandRef\"/&gt;\n &lt;operand valueType=\"t:String\" value=\"minute\" xsi:type=\"Literal\"/&gt;\n &lt;/when&gt;\n &lt;then xsi:type=\"Multiply\"&gt;\n &lt;operand xsi:type=\"Divide\"&gt;\n &lt;operand valueType=\"t:Decimal\" value=\"1.0\" xsi:type=\"Literal\"/&gt;\n &lt;operand valueType=\"t:Decimal\" value=\"24.0\" xsi:type=\"Literal\"/&gt;\n &lt;/operand&gt;\n &lt;operand valueType=\"t:Decimal\" value=\"60.0\" xsi:type=\"Literal\"/&gt;\n &lt;/then&gt;\n &lt;/caseItem&gt;\n &lt;else valueType=\"t:Decimal\" value=\"1.0\" xsi:type=\"Literal\"/&gt;\n &lt;/expression&gt;\n &lt;operand name=\"value\"&gt;\n &lt;operandTypeSpecifier name=\"t:String\" xsi:type=\"NamedTypeSpecifier\"/&gt;\n &lt;/operand&gt;\n &lt;/def&gt;\n &lt;def name=\"GetDurationInDays\" context=\"Patient\" accessLevel=\"Public\" xsi:type=\"FunctionDef\"&gt;\n &lt;expression xsi:type=\"Case\"&gt;\n &lt;caseItem&gt;\n &lt;when xsi:type=\"StartsWith\"&gt;\n &lt;operand path=\"value\" xsi:type=\"Property\"&gt;\n &lt;source path=\"unit\" xsi:type=\"Property\"&gt;\n &lt;source name=\"value\" xsi:type=\"OperandRef\"/&gt;\n &lt;/source&gt;\n &lt;/operand&gt;\n &lt;operand valueType=\"t:String\" value=\"year\" xsi:type=\"Literal\"/&gt;\n &lt;/when&gt;\n &lt;then xsi:type=\"Multiply\"&gt;\n &lt;operand path=\"value\" xsi:type=\"Property\"&gt;\n &lt;source path=\"value\" xsi:type=\"Property\"&gt;\n &lt;source name=\"value\" xsi:type=\"OperandRef\"/&gt;\n &lt;/source&gt;\n &lt;/operand&gt;\n &lt;operand valueType=\"t:Decimal\" value=\"365.0\" xsi:type=\"Literal\"/&gt;\n &lt;/then&gt;\n &lt;/caseItem&gt;\n &lt;caseItem&gt;\n &lt;when xsi:type=\"StartsWith\"&gt;\n &lt;operand path=\"value\" xsi:type=\"Property\"&gt;\n &lt;source path=\"unit\" xsi:type=\"Property\"&gt;\n &lt;source name=\"value\" xsi:type=\"OperandRef\"/&gt;\n &lt;/source&gt;\n &lt;/operand&gt;\n &lt;operand valueType=\"t:String\" value=\"month\" xsi:type=\"Literal\"/&gt;\n &lt;/when&gt;\n &lt;then xsi:type=\"Multiply\"&gt;\n &lt;operand path=\"value\" xsi:type=\"Property\"&gt;\n &lt;source path=\"value\" xsi:type=\"Property\"&gt;\n &lt;source name=\"value\" xsi:type=\"OperandRef\"/&gt;\n &lt;/source&gt;\n &lt;/operand&gt;\n &lt;operand valueType=\"t:Decimal\" value=\"30.0\" xsi:type=\"Literal\"/&gt;\n &lt;/then&gt;\n &lt;/caseItem&gt;\n &lt;else path=\"value\" xsi:type=\"Property\"&gt;\n &lt;source path=\"value\" xsi:type=\"Property\"&gt;\n &lt;source name=\"value\" xsi:type=\"OperandRef\"/&gt;\n &lt;/source&gt;\n &lt;/else&gt;\n &lt;/expression&gt;\n &lt;operand name=\"value\"&gt;\n &lt;operandTypeSpecifier name=\"fhir:Duration\" xsi:type=\"NamedTypeSpecifier\"/&gt;\n &lt;/operand&gt;\n &lt;/def&gt;\n &lt;def name=\"ProbableDaysInRange\" context=\"Patient\" accessLevel=\"Public\" xsi:type=\"FunctionDef\"&gt;\n &lt;expression xsi:type=\"Query\"&gt;\n &lt;source alias=\"orders\"&gt;\n &lt;expression name=\"Orders\" xsi:type=\"OperandRef\"/&gt;\n &lt;/source&gt;\n &lt;let identifier=\"frequency\"&gt;\n &lt;expression path=\"value\" xsi:type=\"Property\"&gt;\n &lt;source path=\"frequency\" xsi:type=\"Property\"&gt;\n &lt;source path=\"repeat\" xsi:type=\"Property\"&gt;\n &lt;source path=\"timing\" xsi:type=\"Property\"&gt;\n &lt;source xsi:type=\"Indexer\"&gt;\n &lt;operand path=\"dosageInstruction\" scope=\"orders\" xsi:type=\"Property\"/&gt;\n &lt;operand valueType=\"t:Integer\" value=\"0\" xsi:type=\"Literal\"/&gt;\n &lt;/source&gt;\n &lt;/source&gt;\n &lt;/source&gt;\n &lt;/source&gt;\n &lt;/expression&gt;\n &lt;/let&gt;\n &lt;let identifier=\"period\"&gt;\n &lt;expression path=\"value\" xsi:type=\"Property\"&gt;\n &lt;source path=\"period\" xsi:type=\"Property\"&gt;\n &lt;source path=\"repeat\" xsi:type=\"Property\"&gt;\n &lt;source path=\"timing\" xsi:type=\"Property\"&gt;\n &lt;source xsi:type=\"Indexer\"&gt;\n &lt;operand path=\"dosageInstruction\" scope=\"orders\" xsi:type=\"Property\"/&gt;\n &lt;operand valueType=\"t:Integer\" value=\"0\" xsi:type=\"Literal\"/&gt;\n &lt;/source&gt;\n &lt;/source&gt;\n &lt;/source&gt;\n &lt;/source&gt;\n &lt;/expression&gt;\n &lt;/let&gt;\n &lt;let identifier=\"periodDays\"&gt;\n &lt;expression name=\"GetPeriodDays\" xsi:type=\"FunctionRef\"&gt;\n &lt;operand path=\"value\" xsi:type=\"Property\"&gt;\n &lt;source path=\"periodUnit\" xsi:type=\"Property\"&gt;\n &lt;source path=\"repeat\" xsi:type=\"Property\"&gt;\n &lt;source path=\"timing\" xsi:type=\"Property\"&gt;\n &lt;source xsi:type=\"Indexer\"&gt;\n &lt;operand path=\"dosageInstruction\" scope=\"orders\" xsi:type=\"Property\"/&gt;\n &lt;operand valueType=\"t:Integer\" value=\"0\" xsi:type=\"Literal\"/&gt;\n &lt;/source&gt;\n &lt;/source&gt;\n &lt;/source&gt;\n &lt;/source&gt;\n &lt;/operand&gt;\n &lt;/expression&gt;\n &lt;/let&gt;\n &lt;let identifier=\"dosesPerDay\"&gt;\n &lt;expression xsi:type=\"If\"&gt;\n &lt;condition asType=\"t:Boolean\" xsi:type=\"As\"&gt;\n &lt;operand xsi:type=\"GreaterOrEqual\"&gt;\n &lt;operand xsi:type=\"Divide\"&gt;\n &lt;operand xsi:type=\"ToDecimal\"&gt;\n &lt;operand name=\"frequency\" xsi:type=\"QueryLetRef\"/&gt;\n &lt;/operand&gt;\n &lt;operand xsi:type=\"Multiply\"&gt;\n &lt;operand name=\"period\" xsi:type=\"QueryLetRef\"/&gt;\n &lt;operand name=\"periodDays\" xsi:type=\"QueryLetRef\"/&gt;\n &lt;/operand&gt;\n &lt;/operand&gt;\n &lt;operand valueType=\"t:Decimal\" value=\"1.0\" xsi:type=\"Literal\"/&gt;\n &lt;/operand&gt;\n &lt;/condition&gt;\n &lt;then valueType=\"t:Decimal\" value=\"1.0\" xsi:type=\"Literal\"/&gt;\n &lt;else xsi:type=\"Divide\"&gt;\n &lt;operand xsi:type=\"ToDecimal\"&gt;\n &lt;operand name=\"frequency\" xsi:type=\"QueryLetRef\"/&gt;\n &lt;/operand&gt;\n &lt;operand xsi:type=\"Multiply\"&gt;\n &lt;operand name=\"period\" xsi:type=\"QueryLetRef\"/&gt;\n &lt;operand name=\"periodDays\" xsi:type=\"QueryLetRef\"/&gt;\n &lt;/operand&gt;\n &lt;/else&gt;\n &lt;/expression&gt;\n &lt;/let&gt;\n &lt;let identifier=\"repeat\"&gt;\n &lt;expression path=\"value\" xsi:type=\"Property\"&gt;\n &lt;source path=\"numberOfRepeatsAllowed\" xsi:type=\"Property\"&gt;\n &lt;source path=\"dispenseRequest\" scope=\"orders\" xsi:type=\"Property\"/&gt;\n &lt;/source&gt;\n &lt;/expression&gt;\n &lt;/let&gt;\n &lt;let identifier=\"supplyDuration\"&gt;\n &lt;expression name=\"GetDurationInDays\" xsi:type=\"FunctionRef\"&gt;\n &lt;operand path=\"expectedSupplyDuration\" xsi:type=\"Property\"&gt;\n &lt;source path=\"dispenseRequest\" scope=\"orders\" xsi:type=\"Property\"/&gt;\n &lt;/operand&gt;\n &lt;/expression&gt;\n &lt;/let&gt;\n &lt;let identifier=\"validityPeriod\"&gt;\n &lt;expression precision=\"Day\" xsi:type=\"DurationBetween\"&gt;\n &lt;operand path=\"value\" xsi:type=\"Property\"&gt;\n &lt;source path=\"start\" xsi:type=\"Property\"&gt;\n &lt;source path=\"validityPeriod\" xsi:type=\"Property\"&gt;\n &lt;source path=\"dispenseRequest\" scope=\"orders\" xsi:type=\"Property\"/&gt;\n &lt;/source&gt;\n &lt;/source&gt;\n &lt;/operand&gt;\n &lt;operand xsi:type=\"Today\"/&gt;\n &lt;/expression&gt;\n &lt;/let&gt;\n &lt;let identifier=\"endDifference\"&gt;\n &lt;expression xsi:type=\"If\"&gt;\n &lt;condition asType=\"t:Boolean\" xsi:type=\"As\"&gt;\n &lt;operand xsi:type=\"Less\"&gt;\n &lt;operand path=\"value\" xsi:type=\"Property\"&gt;\n &lt;source path=\"end\" xsi:type=\"Property\"&gt;\n &lt;source path=\"validityPeriod\" xsi:type=\"Property\"&gt;\n &lt;source path=\"dispenseRequest\" scope=\"orders\" xsi:type=\"Property\"/&gt;\n &lt;/source&gt;\n &lt;/source&gt;\n &lt;/operand&gt;\n &lt;operand xsi:type=\"Today\"/&gt;\n &lt;/operand&gt;\n &lt;/condition&gt;\n &lt;then precision=\"Day\" xsi:type=\"DurationBetween\"&gt;\n &lt;operand path=\"value\" xsi:type=\"Property\"&gt;\n &lt;source path=\"end\" xsi:type=\"Property\"&gt;\n &lt;source path=\"validityPeriod\" xsi:type=\"Property\"&gt;\n &lt;source path=\"dispenseRequest\" scope=\"orders\" xsi:type=\"Property\"/&gt;\n &lt;/source&gt;\n &lt;/source&gt;\n &lt;/operand&gt;\n &lt;operand xsi:type=\"Today\"/&gt;\n &lt;/then&gt;\n &lt;else valueType=\"t:Integer\" value=\"0\" xsi:type=\"Literal\"/&gt;\n &lt;/expression&gt;\n &lt;/let&gt;\n &lt;return&gt;\n &lt;expression xsi:type=\"GreaterOrEqual\"&gt;\n &lt;operand xsi:type=\"Multiply\"&gt;\n &lt;operand xsi:type=\"Multiply\"&gt;\n &lt;operand name=\"dosesPerDay\" xsi:type=\"QueryLetRef\"/&gt;\n &lt;operand xsi:type=\"Divide\"&gt;\n &lt;operand xsi:type=\"Multiply\"&gt;\n &lt;operand xsi:type=\"ToDecimal\"&gt;\n &lt;operand name=\"repeat\" xsi:type=\"QueryLetRef\"/&gt;\n &lt;/operand&gt;\n &lt;operand name=\"supplyDuration\" xsi:type=\"QueryLetRef\"/&gt;\n &lt;/operand&gt;\n &lt;operand xsi:type=\"ToDecimal\"&gt;\n &lt;operand name=\"validityPeriod\" xsi:type=\"QueryLetRef\"/&gt;\n &lt;/operand&gt;\n &lt;/operand&gt;\n &lt;/operand&gt;\n &lt;operand xsi:type=\"ToDecimal\"&gt;\n &lt;operand xsi:type=\"Subtract\"&gt;\n &lt;operand name=\"daysPast\" xsi:type=\"OperandRef\"/&gt;\n &lt;operand name=\"endDifference\" xsi:type=\"QueryLetRef\"/&gt;\n &lt;/operand&gt;\n &lt;/operand&gt;\n &lt;/operand&gt;\n &lt;operand xsi:type=\"ToDecimal\"&gt;\n &lt;operand name=\"numDaysInDaysPast\" xsi:type=\"OperandRef\"/&gt;\n &lt;/operand&gt;\n &lt;/expression&gt;\n &lt;/return&gt;\n &lt;/expression&gt;\n &lt;operand name=\"Orders\"&gt;\n &lt;operandTypeSpecifier xsi:type=\"ListTypeSpecifier\"&gt;\n &lt;elementType name=\"fhir:MedicationRequest\" xsi:type=\"NamedTypeSpecifier\"/&gt;\n &lt;/operandTypeSpecifier&gt;\n &lt;/operand&gt;\n &lt;operand name=\"daysPast\"&gt;\n &lt;operandTypeSpecifier name=\"t:Integer\" xsi:type=\"NamedTypeSpecifier\"/&gt;\n &lt;/operand&gt;\n &lt;operand name=\"numDaysInDaysPast\"&gt;\n &lt;operandTypeSpecifier name=\"t:Integer\" xsi:type=\"NamedTypeSpecifier\"/&gt;\n &lt;/operand&gt;\n &lt;/def&gt;\n &lt;def name=\"IsNaloxone\" context=\"Patient\" accessLevel=\"Public\" xsi:type=\"FunctionDef\"&gt;\n &lt;expression xsi:type=\"InValueSet\"&gt;\n &lt;code name=\"rxNormCode\" xsi:type=\"OperandRef\"/&gt;\n &lt;valueset name=\"Naloxone\"/&gt;\n &lt;/expression&gt;\n &lt;operand name=\"rxNormCode\"&gt;\n &lt;operandTypeSpecifier name=\"t:Code\" xsi:type=\"NamedTypeSpecifier\"/&gt;\n &lt;/operand&gt;\n &lt;/def&gt;\n &lt;def name=\"IsBenzodiazepine\" context=\"Patient\" accessLevel=\"Public\" xsi:type=\"FunctionDef\"&gt;\n &lt;expression xsi:type=\"InValueSet\"&gt;\n &lt;code name=\"rxNormCode\" xsi:type=\"OperandRef\"/&gt;\n &lt;valueset name=\"Benzodiazepines\"/&gt;\n &lt;/expression&gt;\n &lt;operand name=\"rxNormCode\"&gt;\n &lt;operandTypeSpecifier name=\"t:Code\" xsi:type=\"NamedTypeSpecifier\"/&gt;\n &lt;/operand&gt;\n &lt;/def&gt;\n &lt;def name=\"IsOpioidWithAmbulatoryAbusePotential\" context=\"Patient\" accessLevel=\"Public\" xsi:type=\"FunctionDef\"&gt;\n &lt;expression xsi:type=\"InValueSet\"&gt;\n &lt;code name=\"rxNormCode\" xsi:type=\"OperandRef\"/&gt;\n &lt;valueset name=\"Ambulatory Abuse Potential Opioids\"/&gt;\n &lt;/expression&gt;\n &lt;operand name=\"rxNormCode\"&gt;\n &lt;operandTypeSpecifier name=\"t:Code\" xsi:type=\"NamedTypeSpecifier\"/&gt;\n &lt;/operand&gt;\n &lt;/def&gt;\n &lt;def name=\"IsLongActingOpioid\" context=\"Patient\" accessLevel=\"Public\" xsi:type=\"FunctionDef\"&gt;\n &lt;expression xsi:type=\"InValueSet\"&gt;\n &lt;code name=\"rxNormCode\" xsi:type=\"OperandRef\"/&gt;\n &lt;valueset name=\"Long Acting Opioids\"/&gt;\n &lt;/expression&gt;\n &lt;operand name=\"rxNormCode\"&gt;\n &lt;operandTypeSpecifier name=\"t:Code\" xsi:type=\"NamedTypeSpecifier\"/&gt;\n &lt;/operand&gt;\n &lt;/def&gt;\n &lt;def name=\"IsEndOfLifeOpioid\" context=\"Patient\" accessLevel=\"Public\" xsi:type=\"FunctionDef\"&gt;\n &lt;expression xsi:type=\"InValueSet\"&gt;\n &lt;code name=\"rxNormCode\" xsi:type=\"OperandRef\"/&gt;\n &lt;valueset name=\"End Of Life Opioids\"/&gt;\n &lt;/expression&gt;\n &lt;operand name=\"rxNormCode\"&gt;\n &lt;operandTypeSpecifier name=\"t:Code\" xsi:type=\"NamedTypeSpecifier\"/&gt;\n &lt;/operand&gt;\n &lt;/def&gt;\n &lt;def name=\"IsOpioidDrugScreen\" context=\"Patient\" accessLevel=\"Public\" xsi:type=\"FunctionDef\"&gt;\n &lt;expression xsi:type=\"InValueSet\"&gt;\n &lt;code name=\"observationCode\" xsi:type=\"OperandRef\"/&gt;\n &lt;valueset name=\"Opioid Drug Screening\"/&gt;\n &lt;/expression&gt;\n &lt;operand name=\"observationCode\"&gt;\n &lt;operandTypeSpecifier name=\"t:Code\" xsi:type=\"NamedTypeSpecifier\"/&gt;\n &lt;/operand&gt;\n &lt;/def&gt;\n &lt;def name=\"IsIllicitDrugScreen\" context=\"Patient\" accessLevel=\"Public\" xsi:type=\"FunctionDef\"&gt;\n &lt;expression xsi:type=\"InValueSet\"&gt;\n &lt;code name=\"observationCode\" xsi:type=\"OperandRef\"/&gt;\n &lt;valueset name=\"Illicit Drug Screening\"/&gt;\n &lt;/expression&gt;\n &lt;operand name=\"observationCode\"&gt;\n &lt;operandTypeSpecifier name=\"t:Code\" xsi:type=\"NamedTypeSpecifier\"/&gt;\n &lt;/operand&gt;\n &lt;/def&gt;\n &lt;def name=\"GetIngredient\" context=\"Patient\" accessLevel=\"Public\" xsi:type=\"FunctionDef\"&gt;\n &lt;expression xsi:type=\"Query\"&gt;\n &lt;source alias=\"$this\"&gt;\n &lt;expression name=\"GetIngredients\" libraryName=\"OMTKLogic\" xsi:type=\"FunctionRef\"&gt;\n &lt;operand name=\"rxNormCode\" xsi:type=\"OperandRef\"/&gt;\n &lt;/expression&gt;\n &lt;/source&gt;\n &lt;where xsi:type=\"Not\"&gt;\n &lt;operand xsi:type=\"IsNull\"&gt;\n &lt;operand path=\"ingredientName\" xsi:type=\"Property\"&gt;\n &lt;source name=\"$this\" xsi:type=\"AliasRef\"/&gt;\n &lt;/operand&gt;\n &lt;/operand&gt;\n &lt;/where&gt;\n &lt;return&gt;\n &lt;expression path=\"ingredientName\" xsi:type=\"Property\"&gt;\n &lt;source name=\"$this\" xsi:type=\"AliasRef\"/&gt;\n &lt;/expression&gt;\n &lt;/return&gt;\n &lt;/expression&gt;\n &lt;operand name=\"rxNormCode\"&gt;\n &lt;operandTypeSpecifier name=\"t:Code\" xsi:type=\"NamedTypeSpecifier\"/&gt;\n &lt;/operand&gt;\n &lt;/def&gt;\n &lt;/statements&gt;\n&lt;/library&gt;\n</code>\n </pre>\n </div>"
  },
  "identifier" : [
    {
      "use" : "official",
      "value" : "OpioidCDS_Common"
    }
  ],
  "version" : "0.1.0",
  "title" : "Opioid CDS Common Logic",
  "status" : "active",
  "experimental" : false,
  "type" : {
    "coding" : [
      {
        "system" : "http://terminology.hl7.org/CodeSystem/library-type",
        "code" : "logic-library",
        "display" : "Logic Library"
      }
    ]
  },
  "date" : "2018-03-25T13:49:09-06:00",
  "publisher" : "Centers for Disease Control and Prevention (CDC)",
  "description" : "Common Opioid Decision Support Logic for use in implementing CDC Opioid Prescribing Guidelines.",
  "useContext" : [
    {
      "code" : {
        "system" : "http://terminology.hl7.org/CodeSystem/usage-context-type",
        "code" : "focus",
        "display" : "Clinical Focus"
      },
      "valueCodeableConcept" : {
        "coding" : [
          {
            "system" : "http://snomed.info/sct",
            "code" : "182888003",
            "display" : "Medication requested (situation)"
          }
        ]
      }
    },
    {
      "code" : {
        "system" : "http://terminology.hl7.org/CodeSystem/usage-context-type",
        "code" : "focus",
        "display" : "Clinical Focus"
      },
      "valueCodeableConcept" : {
        "coding" : [
          {
            "system" : "http://snomed.info/sct",
            "code" : "82423001",
            "display" : "Chronic pain (finding)"
          }
        ]
      }
    }
  ],
  "jurisdiction" : [
    {
      "coding" : [
        {
          "system" : "urn:iso:std:iso:3166",
          "code" : "US",
          "display" : "United States of America"
        }
      ]
    }
  ],
  "purpose" : "This library contains common logic across recommendations including MME calculations, conversions, and looking up codes in valuesets.
",
  "usage" : "This library is used for decision support for opioid guideline recommendations when applying PlanDefinitions.",
  "copyright" : "© CDC 2016+.",
  "topic" : [
    {
      "text" : "Opioid Prescribing"
    }
  ],
  "author" : [
    {
      "name" : "Kensaku Kawamoto, MD, PhD, MHS"
    },
    {
      "name" : "Bryn Rhodes"
    },
    {
      "name" : "Floyd Eisenberg, MD, MPH"
    },
    {
      "name" : "Robert McClure, MD, MPH"
    }
  ],
  "relatedArtifact" : [
    {
      "type" : "documentation",
      "display" : "CDC guideline for prescribing opioids for chronic pain",
      "url" : "https://guidelines.gov/summaries/summary/50153/cdc-guideline-for-prescribing-opioids-for-chronic-pain---united-states-2016#420"
    },
    {
      "type" : "depends-on",
      "resource" : "http://example.org/fhir/Library/omtk-logic"
    },
    {
      "type" : "documentation",
      "display" : "MME Conversion Tables",
      "url" : "https://www.cdc.gov/drugoverdose/pdf/calculating_total_daily_dose-a.pdf"
    }
  ],
  "content" : [
    {
      "contentType" : "application/elm+xml",
      "data" : "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPGxpYnJhcnkgeG1sbnM9InVybjpobDctb3JnOmVsbTpyMSIgeG1sbnM6dD0idXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczpmaGlyPSJodHRwOi8vaGw3Lm9yZy9maGlyIiB4bWxuczpxZG00Mz0idXJuOmhlYWx0aGl0LWdvdjpxZG06djRfMyIgeG1sbnM6cWRtNTM9InVybjpoZWFsdGhpdC1nb3Y6cWRtOnY1XzMiIHhtbG5zOmE9InVybjpobDctb3JnOmNxbC1hbm5vdGF0aW9uczpyMSI+CiAgIDxpZGVudGlmaWVyIGlkPSJPcGlvaWRDRFNfU1RVNF9Db21tb24iIHZlcnNpb249IjAuMS4wIi8+CiAgIDxzY2hlbWFJZGVudGlmaWVyIGlkPSJ1cm46aGw3LW9yZzplbG0iIHZlcnNpb249InIxIi8+CiAgIDx1c2luZ3M+CiAgICAgIDxkZWYgbG9jYWxJZGVudGlmaWVyPSJTeXN0ZW0iIHVyaT0idXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxIi8+CiAgICAgIDxkZWYgbG9jYWxJZGVudGlmaWVyPSJGSElSIiB1cmk9Imh0dHA6Ly9obDcub3JnL2ZoaXIiIHZlcnNpb249IjMuMi4wIi8+CiAgIDwvdXNpbmdzPgogICA8aW5jbHVkZXM+CiAgICAgIDxkZWYgbG9jYWxJZGVudGlmaWVyPSJPTVRLTG9naWMiIHBhdGg9Ik9NVEtMb2dpYyIgdmVyc2lvbj0iMC4xLjAiLz4KICAgPC9pbmNsdWRlcz4KICAgPHZhbHVlU2V0cz4KICAgICAgPGRlZiBuYW1lPSJCZW56b2RpYXplcGluZXMiIGlkPSJiZW56b2RpYXplcGluZXMiIGFjY2Vzc0xldmVsPSJQdWJsaWMiLz4KICAgICAgPGRlZiBuYW1lPSJOYWxveG9uZSIgaWQ9Im5hbG94b25lIiBhY2Nlc3NMZXZlbD0iUHVibGljIi8+CiAgICAgIDxkZWYgbmFtZT0iQW1idWxhdG9yeSBBYnVzZSBQb3RlbnRpYWwgT3Bpb2lkcyIgaWQ9Im9waW9pZHMtYWJ1c2VkLWluLWFtYnVsYXRvcnktY2FyZSIgYWNjZXNzTGV2ZWw9IlB1YmxpYyIvPgogICAgICA8ZGVmIG5hbWU9IkVuZCBPZiBMaWZlIE9waW9pZHMiIGlkPSJvcGlvaWRzLWluZGljYXRpbmctZW5kLW9mLWxpZmUiIGFjY2Vzc0xldmVsPSJQdWJsaWMiLz4KICAgICAgPGRlZiBuYW1lPSJMb25nIEFjdGluZyBPcGlvaWRzIiBpZD0ibG9uZy1hY3Rpbmctb3Bpb2lkcyIgYWNjZXNzTGV2ZWw9IlB1YmxpYyIvPgogICAgICA8ZGVmIG5hbWU9IklsbGljaXQgRHJ1ZyBTY3JlZW5pbmciIGlkPSJpbGxpY2l0LWRydWctdXJpbmUtc2NyZWVuaW5nIiBhY2Nlc3NMZXZlbD0iUHVibGljIi8+CiAgICAgIDxkZWYgbmFtZT0iT3Bpb2lkIERydWcgU2NyZWVuaW5nIiBpZD0ib3Bpb2lkLXVyaW5lLXNjcmVlbmluZyIgYWNjZXNzTGV2ZWw9IlB1YmxpYyIvPgogICAgICA8ZGVmIG5hbWU9Ik9waW9pZHMiIGlkPSJvcGlvaWRzIiBhY2Nlc3NMZXZlbD0iUHVibGljIi8+CiAgICAgIDxkZWYgbmFtZT0iQ29kZWluZSBDb3VnaCBNZWRzIiBpZD0ib3Bpb2lkcy1jb2RlaW5lLWNvdWdoLW1lZHMiIGFjY2Vzc0xldmVsPSJQdWJsaWMiLz4KICAgICAgPGRlZiBuYW1lPSJTaG9ydCBBY3RpbmcgT3Bpb2lkcyIgaWQ9InNob3J0LWFjdGluZy1vcGlvaWRzIiBhY2Nlc3NMZXZlbD0iUHVibGljIi8+CiAgIDwvdmFsdWVTZXRzPgogICA8c3RhdGVtZW50cz4KICAgICAgPGRlZiBuYW1lPSJJc0ZvckNocm9uaWNQYWluIiBjb250ZXh0PSJQYXRpZW50IiBhY2Nlc3NMZXZlbD0iUHVibGljIj4KICAgICAgICAgPGV4cHJlc3Npb24gdmFsdWVUeXBlPSJ0OkJvb2xlYW4iIHZhbHVlPSJ0cnVlIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICA8L2RlZj4KICAgICAgPGRlZiBuYW1lPSJIYXNNZXRhc3RhdGljQ2FuY2VyIiBjb250ZXh0PSJQYXRpZW50IiBhY2Nlc3NMZXZlbD0iUHVibGljIj4KICAgICAgICAgPGV4cHJlc3Npb24gdmFsdWVUeXBlPSJ0OkJvb2xlYW4iIHZhbHVlPSJmYWxzZSIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgPC9kZWY+CiAgICAgIDxkZWYgbmFtZT0iVG9Db2RlIiBjb250ZXh0PSJQYXRpZW50IiBhY2Nlc3NMZXZlbD0iUHVibGljIiB4c2k6dHlwZT0iRnVuY3Rpb25EZWYiPgogICAgICAgICA8ZXhwcmVzc2lvbiBjbGFzc1R5cGU9InQ6Q29kZSIgeHNpOnR5cGU9Ikluc3RhbmNlIj4KICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0iY29kZSI+CiAgICAgICAgICAgICAgIDx2YWx1ZSBwYXRoPSJ2YWx1ZSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgPHNvdXJjZSBwYXRoPSJjb2RlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICA8c291cmNlIG5hbWU9ImNvZGluZyIgeHNpOnR5cGU9Ik9wZXJhbmRSZWYiLz4KICAgICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgIDwvdmFsdWU+CiAgICAgICAgICAgIDwvZWxlbWVudD4KICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0ic3lzdGVtIj4KICAgICAgICAgICAgICAgPHZhbHVlIHBhdGg9InZhbHVlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICA8c291cmNlIHBhdGg9InN5c3RlbSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBuYW1lPSJjb2RpbmciIHhzaTp0eXBlPSJPcGVyYW5kUmVmIi8+CiAgICAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICAgICA8L3ZhbHVlPgogICAgICAgICAgICA8L2VsZW1lbnQ+CiAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9InZlcnNpb24iPgogICAgICAgICAgICAgICA8dmFsdWUgcGF0aD0idmFsdWUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgIDxzb3VyY2UgcGF0aD0idmVyc2lvbiIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBuYW1lPSJjb2RpbmciIHhzaTp0eXBlPSJPcGVyYW5kUmVmIi8+CiAgICAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICAgICA8L3ZhbHVlPgogICAgICAgICAgICA8L2VsZW1lbnQ+CiAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9ImRpc3BsYXkiPgogICAgICAgICAgICAgICA8dmFsdWUgcGF0aD0idmFsdWUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgIDxzb3VyY2UgcGF0aD0iZGlzcGxheSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBuYW1lPSJjb2RpbmciIHhzaTp0eXBlPSJPcGVyYW5kUmVmIi8+CiAgICAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICAgICA8L3ZhbHVlPgogICAgICAgICAgICA8L2VsZW1lbnQ+CiAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgICAgPG9wZXJhbmQgbmFtZT0iY29kaW5nIj4KICAgICAgICAgICAgPG9wZXJhbmRUeXBlU3BlY2lmaWVyIG5hbWU9ImZoaXI6Q29kaW5nIiB4c2k6dHlwZT0iTmFtZWRUeXBlU3BlY2lmaWVyIi8+CiAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgPC9kZWY+CiAgICAgIDxkZWYgbmFtZT0iVG9RdWFudGl0eSIgY29udGV4dD0iUGF0aWVudCIgYWNjZXNzTGV2ZWw9IlB1YmxpYyIgeHNpOnR5cGU9IkZ1bmN0aW9uRGVmIj4KICAgICAgICAgPGV4cHJlc3Npb24gY2xhc3NUeXBlPSJ0OlF1YW50aXR5IiB4c2k6dHlwZT0iSW5zdGFuY2UiPgogICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJ2YWx1ZSI+CiAgICAgICAgICAgICAgIDx2YWx1ZSBwYXRoPSJ2YWx1ZSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgPHNvdXJjZSBwYXRoPSJ2YWx1ZSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBuYW1lPSJxdWFudGl0eSIgeHNpOnR5cGU9Ik9wZXJhbmRSZWYiLz4KICAgICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgIDwvdmFsdWU+CiAgICAgICAgICAgIDwvZWxlbWVudD4KICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0idW5pdCI+CiAgICAgICAgICAgICAgIDx2YWx1ZSBwYXRoPSJ2YWx1ZSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgPHNvdXJjZSBwYXRoPSJ1bml0IiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICA8c291cmNlIG5hbWU9InF1YW50aXR5IiB4c2k6dHlwZT0iT3BlcmFuZFJlZiIvPgogICAgICAgICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgICAgPC92YWx1ZT4KICAgICAgICAgICAgPC9lbGVtZW50PgogICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgICAgIDxvcGVyYW5kIG5hbWU9InF1YW50aXR5Ij4KICAgICAgICAgICAgPG9wZXJhbmRUeXBlU3BlY2lmaWVyIG5hbWU9ImZoaXI6UXVhbnRpdHkiIHhzaTp0eXBlPSJOYW1lZFR5cGVTcGVjaWZpZXIiLz4KICAgICAgICAgPC9vcGVyYW5kPgogICAgICA8L2RlZj4KICAgICAgPGRlZiBuYW1lPSJQcmVzY3JpcHRpb25zIiBjb250ZXh0PSJQYXRpZW50IiBhY2Nlc3NMZXZlbD0iUHVibGljIiB4c2k6dHlwZT0iRnVuY3Rpb25EZWYiPgogICAgICAgICA8ZXhwcmVzc2lvbiB4c2k6dHlwZT0iUXVlcnkiPgogICAgICAgICAgICA8c291cmNlIGFsaWFzPSJPIj4KICAgICAgICAgICAgICAgPGV4cHJlc3Npb24gbmFtZT0iT3JkZXJzIiB4c2k6dHlwZT0iT3BlcmFuZFJlZiIvPgogICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgPGxldCBpZGVudGlmaWVyPSJyeE5vcm1Db2RlIj4KICAgICAgICAgICAgICAgPGV4cHJlc3Npb24gbmFtZT0iVG9Db2RlIiB4c2k6dHlwZT0iRnVuY3Rpb25SZWYiPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCB4c2k6dHlwZT0iSW5kZXhlciI+CiAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHBhdGg9ImNvZGluZyIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBwYXRoPSJtZWRpY2F0aW9uIiBzY29wZT0iTyIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+CiAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgdmFsdWVUeXBlPSJ0OkludGVnZXIiIHZhbHVlPSIwIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgICAgICAgPC9sZXQ+CiAgICAgICAgICAgIDxsZXQgaWRlbnRpZmllcj0ibWVkaWNhdGlvbk5hbWUiPgogICAgICAgICAgICAgICA8ZXhwcmVzc2lvbiBuYW1lPSJHZXRNZWRpY2F0aW9uTmFtZSIgbGlicmFyeU5hbWU9Ik9NVEtMb2dpYyIgeHNpOnR5cGU9IkZ1bmN0aW9uUmVmIj4KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbmFtZT0icnhOb3JtQ29kZSIgeHNpOnR5cGU9IlF1ZXJ5TGV0UmVmIi8+CiAgICAgICAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgICAgICAgPC9sZXQ+CiAgICAgICAgICAgIDxsZXQgaWRlbnRpZmllcj0iZG9zYWdlSW5zdHJ1Y3Rpb24iPgogICAgICAgICAgICAgICA8ZXhwcmVzc2lvbiB4c2k6dHlwZT0iSW5kZXhlciI+CiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHBhdGg9ImRvc2FnZUluc3RydWN0aW9uIiBzY29wZT0iTyIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+CiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHZhbHVlVHlwZT0idDpJbnRlZ2VyIiB2YWx1ZT0iMCIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICAgICAgICA8L2xldD4KICAgICAgICAgICAgPGxldCBpZGVudGlmaWVyPSJyZXBlYXQiPgogICAgICAgICAgICAgICA8ZXhwcmVzc2lvbiBwYXRoPSJyZXBlYXQiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgIDxzb3VyY2UgcGF0aD0idGltaW5nIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICA8c291cmNlIG5hbWU9ImRvc2FnZUluc3RydWN0aW9uIiB4c2k6dHlwZT0iUXVlcnlMZXRSZWYiLz4KICAgICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgICAgICAgPC9sZXQ+CiAgICAgICAgICAgIDxsZXQgaWRlbnRpZmllcj0iZnJlcXVlbmN5Ij4KICAgICAgICAgICAgICAgPGV4cHJlc3Npb24geHNpOnR5cGU9IkNvYWxlc2NlIj4KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgcGF0aD0idmFsdWUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgcGF0aD0iZnJlcXVlbmN5TWF4IiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIG5hbWU9InJlcGVhdCIgeHNpOnR5cGU9IlF1ZXJ5TGV0UmVmIi8+CiAgICAgICAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHBhdGg9InZhbHVlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICA8c291cmNlIHBhdGg9ImZyZXF1ZW5jeSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBuYW1lPSJyZXBlYXQiIHhzaTp0eXBlPSJRdWVyeUxldFJlZiIvPgogICAgICAgICAgICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgICAgICAgIDwvbGV0PgogICAgICAgICAgICA8bGV0IGlkZW50aWZpZXI9InBlcmlvZCI+CiAgICAgICAgICAgICAgIDxleHByZXNzaW9uIGNsYXNzVHlwZT0idDpRdWFudGl0eSIgeHNpOnR5cGU9Ikluc3RhbmNlIj4KICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0idmFsdWUiPgogICAgICAgICAgICAgICAgICAgICA8dmFsdWUgcGF0aD0idmFsdWUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgcGF0aD0icGVyaW9kIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIG5hbWU9InJlcGVhdCIgeHNpOnR5cGU9IlF1ZXJ5TGV0UmVmIi8+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICAgICAgICAgICA8L3ZhbHVlPgogICAgICAgICAgICAgICAgICA8L2VsZW1lbnQ+CiAgICAgICAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9InVuaXQiPgogICAgICAgICAgICAgICAgICAgICA8dmFsdWUgcGF0aD0idmFsdWUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgcGF0aD0icGVyaW9kVW5pdCIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBuYW1lPSJyZXBlYXQiIHhzaTp0eXBlPSJRdWVyeUxldFJlZiIvPgogICAgICAgICAgICAgICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgICAgICAgICAgPC92YWx1ZT4KICAgICAgICAgICAgICAgICAgPC9lbGVtZW50PgogICAgICAgICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgICAgICAgIDwvbGV0PgogICAgICAgICAgICA8bGV0IGlkZW50aWZpZXI9ImRvc2VEZXNjcmlwdGlvbiI+CiAgICAgICAgICAgICAgIDxleHByZXNzaW9uIHhzaTp0eXBlPSJDb2FsZXNjZSI+CiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHhzaTp0eXBlPSJUb0xpc3QiPgogICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCB4c2k6dHlwZT0iSWYiPgogICAgICAgICAgICAgICAgICAgICAgICA8Y29uZGl0aW9uIGFzVHlwZT0idDpCb29sZWFuIiB4c2k6dHlwZT0iQXMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCB4c2k6dHlwZT0iSXMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBwYXRoPSJkb3NlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIG5hbWU9ImRvc2FnZUluc3RydWN0aW9uIiB4c2k6dHlwZT0iUXVlcnlMZXRSZWYiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aXNUeXBlU3BlY2lmaWVyIG5hbWU9ImZoaXI6UmFuZ2UiIHhzaTp0eXBlPSJOYW1lZFR5cGVTcGVjaWZpZXIiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICA8L2NvbmRpdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgPHRoZW4geHNpOnR5cGU9IkNvbmNhdGVuYXRlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgeHNpOnR5cGU9IkNvbmNhdGVuYXRlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgeHNpOnR5cGU9IkNvbmNhdGVuYXRlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgeHNpOnR5cGU9IlRvU3RyaW5nIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbmFtZT0iVG9RdWFudGl0eSIgeHNpOnR5cGU9IkZ1bmN0aW9uUmVmIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgcGF0aD0ibG93IiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIHBhdGg9ImRvc2UiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbmFtZT0iZG9zYWdlSW5zdHJ1Y3Rpb24iIHhzaTp0eXBlPSJRdWVyeUxldFJlZiIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9Ii0iIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgeHNpOnR5cGU9IlRvU3RyaW5nIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbmFtZT0iVG9RdWFudGl0eSIgeHNpOnR5cGU9IkZ1bmN0aW9uUmVmIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgcGF0aD0iaGlnaCIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBwYXRoPSJkb3NlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIG5hbWU9ImRvc2FnZUluc3RydWN0aW9uIiB4c2k6dHlwZT0iUXVlcnlMZXRSZWYiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgcGF0aD0idmFsdWUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgcGF0aD0idW5pdCIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBwYXRoPSJoaWdoIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIHBhdGg9ImRvc2UiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbmFtZT0iZG9zYWdlSW5zdHJ1Y3Rpb24iIHhzaTp0eXBlPSJRdWVyeUxldFJlZiIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGhlbj4KICAgICAgICAgICAgICAgICAgICAgICAgPGVsc2UgeHNpOnR5cGU9IlRvU3RyaW5nIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbmFtZT0iVG9RdWFudGl0eSIgeHNpOnR5cGU9IkZ1bmN0aW9uUmVmIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgYXNUeXBlPSJmaGlyOlF1YW50aXR5IiB4c2k6dHlwZT0iQXMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBwYXRoPSJkb3NlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIG5hbWU9ImRvc2FnZUluc3RydWN0aW9uIiB4c2k6dHlwZT0iUXVlcnlMZXRSZWYiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9lbHNlPgogICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICAgICAgICA8L2xldD4KICAgICAgICAgICAgPGxldCBpZGVudGlmaWVyPSJmcmVxdWVuY3lEZXNjcmlwdGlvbiI+CiAgICAgICAgICAgICAgIDxleHByZXNzaW9uIHhzaTp0eXBlPSJDb25jYXRlbmF0ZSI+CiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHhzaTp0eXBlPSJUb1N0cmluZyI+CiAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHBhdGg9InZhbHVlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIHBhdGg9ImZyZXF1ZW5jeSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBwYXRoPSJyZXBlYXQiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgcGF0aD0idGltaW5nIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIG5hbWU9ImRvc2FnZUluc3RydWN0aW9uIiB4c2k6dHlwZT0iUXVlcnlMZXRSZWYiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICAgICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHhzaTp0eXBlPSJDb2FsZXNjZSI+CiAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHhzaTp0eXBlPSJDb25jYXRlbmF0ZSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHZhbHVlVHlwZT0idDpTdHJpbmciIHZhbHVlPSItIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCB4c2k6dHlwZT0iVG9TdHJpbmciPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBwYXRoPSJ2YWx1ZSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBwYXRoPSJmcmVxdWVuY3lNYXgiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgcGF0aD0icmVwZWF0IiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIHBhdGg9InRpbWluZyIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBuYW1lPSJkb3NhZ2VJbnN0cnVjdGlvbiIgeHNpOnR5cGU9IlF1ZXJ5TGV0UmVmIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHZhbHVlVHlwZT0idDpTdHJpbmciIHZhbHVlPSIiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICAgICAgICA8L2xldD4KICAgICAgICAgICAgPHJldHVybj4KICAgICAgICAgICAgICAgPGV4cHJlc3Npb24geHNpOnR5cGU9IlR1cGxlIj4KICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0icnhOb3JtQ29kZSI+CiAgICAgICAgICAgICAgICAgICAgIDx2YWx1ZSBuYW1lPSJyeE5vcm1Db2RlIiB4c2k6dHlwZT0iUXVlcnlMZXRSZWYiLz4KICAgICAgICAgICAgICAgICAgPC9lbGVtZW50PgogICAgICAgICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJpc0RyYWZ0Ij4KICAgICAgICAgICAgICAgICAgICAgPHZhbHVlIHhzaTp0eXBlPSJFcXVhbCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHBhdGg9InZhbHVlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIHBhdGg9InN0YXR1cyIgc2NvcGU9Ik8iIHhzaTp0eXBlPSJQcm9wZXJ0eSIvPgogICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHZhbHVlVHlwZT0idDpTdHJpbmciIHZhbHVlPSJkcmFmdCIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgICAgICAgPC92YWx1ZT4KICAgICAgICAgICAgICAgICAgPC9lbGVtZW50PgogICAgICAgICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJpc1BSTiI+CiAgICAgICAgICAgICAgICAgICAgIDx2YWx1ZSBwYXRoPSJ2YWx1ZSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBwYXRoPSJhc05lZWRlZCIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBuYW1lPSJkb3NhZ2VJbnN0cnVjdGlvbiIgeHNpOnR5cGU9IlF1ZXJ5TGV0UmVmIi8+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICAgICAgICAgICA8L3ZhbHVlPgogICAgICAgICAgICAgICAgICA8L2VsZW1lbnQ+CiAgICAgICAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9InByZXNjcmlwdGlvbiI+CiAgICAgICAgICAgICAgICAgICAgIDx2YWx1ZSB4c2k6dHlwZT0iSWYiPgogICAgICAgICAgICAgICAgICAgICAgICA8Y29uZGl0aW9uIGFzVHlwZT0idDpCb29sZWFuIiB4c2k6dHlwZT0iQXMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCB4c2k6dHlwZT0iTm90Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgeHNpOnR5cGU9IklzTnVsbCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHBhdGg9InRleHQiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbmFtZT0iZG9zYWdlSW5zdHJ1Y3Rpb24iIHhzaTp0eXBlPSJRdWVyeUxldFJlZiIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICA8L2NvbmRpdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgPHRoZW4geHNpOnR5cGU9IkNvbmNhdGVuYXRlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgeHNpOnR5cGU9IkNvbmNhdGVuYXRlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbmFtZT0ibWVkaWNhdGlvbk5hbWUiIHhzaTp0eXBlPSJRdWVyeUxldFJlZiIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCB2YWx1ZVR5cGU9InQ6U3RyaW5nIiB2YWx1ZT0iICIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBwYXRoPSJ2YWx1ZSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBwYXRoPSJ0ZXh0IiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIG5hbWU9ImRvc2FnZUluc3RydWN0aW9uIiB4c2k6dHlwZT0iUXVlcnlMZXRSZWYiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgPC90aGVuPgogICAgICAgICAgICAgICAgICAgICAgICA8ZWxzZSB4c2k6dHlwZT0iQ29uY2F0ZW5hdGUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCB4c2k6dHlwZT0iQ29uY2F0ZW5hdGUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCB4c2k6dHlwZT0iQ29uY2F0ZW5hdGUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCB4c2k6dHlwZT0iQ29uY2F0ZW5hdGUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCB4c2k6dHlwZT0iQ29uY2F0ZW5hdGUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBuYW1lPSJtZWRpY2F0aW9uTmFtZSIgeHNpOnR5cGU9IlF1ZXJ5TGV0UmVmIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHZhbHVlVHlwZT0idDpTdHJpbmciIHZhbHVlPSIgIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIG5hbWU9ImRvc2VEZXNjcmlwdGlvbiIgeHNpOnR5cGU9IlF1ZXJ5TGV0UmVmIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9IiBxIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIG5hbWU9ImZyZXF1ZW5jeURlc2NyaXB0aW9uIiB4c2k6dHlwZT0iUXVlcnlMZXRSZWYiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCB4c2k6dHlwZT0iSWYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y29uZGl0aW9uIGFzVHlwZT0idDpCb29sZWFuIiB4c2k6dHlwZT0iQXMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBwYXRoPSJ2YWx1ZSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBwYXRoPSJhc05lZWRlZCIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBuYW1lPSJkb3NhZ2VJbnN0cnVjdGlvbiIgeHNpOnR5cGU9IlF1ZXJ5TGV0UmVmIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY29uZGl0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGhlbiB2YWx1ZVR5cGU9InQ6U3RyaW5nIiB2YWx1ZT0iIFBSTiIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVsc2UgdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9IiIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Vsc2U+CiAgICAgICAgICAgICAgICAgICAgIDwvdmFsdWU+CiAgICAgICAgICAgICAgICAgIDwvZWxlbWVudD4KICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0iZG9zZSI+CiAgICAgICAgICAgICAgICAgICAgIDx2YWx1ZSB4c2k6dHlwZT0iSWYiPgogICAgICAgICAgICAgICAgICAgICAgICA8Y29uZGl0aW9uIGFzVHlwZT0idDpCb29sZWFuIiB4c2k6dHlwZT0iQXMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCB4c2k6dHlwZT0iSXMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBwYXRoPSJkb3NlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIG5hbWU9ImRvc2FnZUluc3RydWN0aW9uIiB4c2k6dHlwZT0iUXVlcnlMZXRSZWYiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aXNUeXBlU3BlY2lmaWVyIG5hbWU9ImZoaXI6UmFuZ2UiIHhzaTp0eXBlPSJOYW1lZFR5cGVTcGVjaWZpZXIiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICA8L2NvbmRpdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgPHRoZW4gbmFtZT0iVG9RdWFudGl0eSIgeHNpOnR5cGU9IkZ1bmN0aW9uUmVmIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgcGF0aD0iaGlnaCIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBwYXRoPSJkb3NlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIG5hbWU9ImRvc2FnZUluc3RydWN0aW9uIiB4c2k6dHlwZT0iUXVlcnlMZXRSZWYiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgPC90aGVuPgogICAgICAgICAgICAgICAgICAgICAgICA8ZWxzZSBuYW1lPSJUb1F1YW50aXR5IiB4c2k6dHlwZT0iRnVuY3Rpb25SZWYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBhc1R5cGU9ImZoaXI6UXVhbnRpdHkiIHhzaTp0eXBlPSJBcyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHBhdGg9ImRvc2UiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbmFtZT0iZG9zYWdlSW5zdHJ1Y3Rpb24iIHhzaTp0eXBlPSJRdWVyeUxldFJlZiIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9lbHNlPgogICAgICAgICAgICAgICAgICAgICA8L3ZhbHVlPgogICAgICAgICAgICAgICAgICA8L2VsZW1lbnQ+CiAgICAgICAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9ImRvc2VzUGVyRGF5Ij4KICAgICAgICAgICAgICAgICAgICAgPHZhbHVlIHhzaTp0eXBlPSJDb2FsZXNjZSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIG5hbWU9IlRvRGFpbHkiIGxpYnJhcnlOYW1lPSJPTVRLTG9naWMiIHhzaTp0eXBlPSJGdW5jdGlvblJlZiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIG5hbWU9ImZyZXF1ZW5jeSIgeHNpOnR5cGU9IlF1ZXJ5TGV0UmVmIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIG5hbWU9InBlcmlvZCIgeHNpOnR5cGU9IlF1ZXJ5TGV0UmVmIi8+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgdmFsdWVUeXBlPSJ0OkRlY2ltYWwiIHZhbHVlPSIxLjAiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgICAgICAgIDwvdmFsdWU+CiAgICAgICAgICAgICAgICAgIDwvZWxlbWVudD4KICAgICAgICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICAgICAgICA8L3JldHVybj4KICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICAgICA8b3BlcmFuZCBuYW1lPSJPcmRlcnMiPgogICAgICAgICAgICA8b3BlcmFuZFR5cGVTcGVjaWZpZXIgeHNpOnR5cGU9Ikxpc3RUeXBlU3BlY2lmaWVyIj4KICAgICAgICAgICAgICAgPGVsZW1lbnRUeXBlIG5hbWU9ImZoaXI6TWVkaWNhdGlvblJlcXVlc3QiIHhzaTp0eXBlPSJOYW1lZFR5cGVTcGVjaWZpZXIiLz4KICAgICAgICAgICAgPC9vcGVyYW5kVHlwZVNwZWNpZmllcj4KICAgICAgICAgPC9vcGVyYW5kPgogICAgICA8L2RlZj4KICAgICAgPGRlZiBuYW1lPSJNTUUiIGNvbnRleHQ9IlBhdGllbnQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiIHhzaTp0eXBlPSJGdW5jdGlvbkRlZiI+CiAgICAgICAgIDxleHByZXNzaW9uIHhzaTp0eXBlPSJRdWVyeSI+CiAgICAgICAgICAgIDxzb3VyY2UgYWxpYXM9IlAiPgogICAgICAgICAgICAgICA8ZXhwcmVzc2lvbiBuYW1lPSJQcmVzY3JpcHRpb25zIiB4c2k6dHlwZT0iRnVuY3Rpb25SZWYiPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCBuYW1lPSJwcmVzY3JpcHRpb25zIiB4c2k6dHlwZT0iT3BlcmFuZFJlZiIvPgogICAgICAgICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICA8bGV0IGlkZW50aWZpZXI9Im1tZSI+CiAgICAgICAgICAgICAgIDxleHByZXNzaW9uIHhzaTp0eXBlPSJTaW5nbGV0b25Gcm9tIj4KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbmFtZT0iQ2FsY3VsYXRlTU1FcyIgbGlicmFyeU5hbWU9Ik9NVEtMb2dpYyIgeHNpOnR5cGU9IkZ1bmN0aW9uUmVmIj4KICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgeHNpOnR5cGU9Ikxpc3QiPgogICAgICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCB4c2k6dHlwZT0iVHVwbGUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJyeE5vcm1Db2RlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZhbHVlIHBhdGg9InJ4Tm9ybUNvZGUiIHNjb3BlPSJQIiB4c2k6dHlwZT0iUHJvcGVydHkiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9lbGVtZW50PgogICAgICAgICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJkb3NlUXVhbnRpdHkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmFsdWUgcGF0aD0iZG9zZSIgc2NvcGU9IlAiIHhzaTp0eXBlPSJQcm9wZXJ0eSIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L2VsZW1lbnQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9ImRvc2VzUGVyRGF5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZhbHVlIHBhdGg9ImRvc2VzUGVyRGF5IiBzY29wZT0iUCIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZWxlbWVudD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9lbGVtZW50PgogICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICAgICAgICA8L2xldD4KICAgICAgICAgICAgPHJldHVybj4KICAgICAgICAgICAgICAgPGV4cHJlc3Npb24geHNpOnR5cGU9IlR1cGxlIj4KICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0icnhOb3JtQ29kZSI+CiAgICAgICAgICAgICAgICAgICAgIDx2YWx1ZSBwYXRoPSJyeE5vcm1Db2RlIiBzY29wZT0iUCIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+CiAgICAgICAgICAgICAgICAgIDwvZWxlbWVudD4KICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0iaXNEcmFmdCI+CiAgICAgICAgICAgICAgICAgICAgIDx2YWx1ZSBwYXRoPSJpc0RyYWZ0IiBzY29wZT0iUCIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+CiAgICAgICAgICAgICAgICAgIDwvZWxlbWVudD4KICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0iaXNQUk4iPgogICAgICAgICAgICAgICAgICAgICA8dmFsdWUgcGF0aD0iaXNQUk4iIHNjb3BlPSJQIiB4c2k6dHlwZT0iUHJvcGVydHkiLz4KICAgICAgICAgICAgICAgICAgPC9lbGVtZW50PgogICAgICAgICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJwcmVzY3JpcHRpb24iPgogICAgICAgICAgICAgICAgICAgICA8dmFsdWUgcGF0aD0icHJlc2NyaXB0aW9uIiBzY29wZT0iUCIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+CiAgICAgICAgICAgICAgICAgIDwvZWxlbWVudD4KICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0iZGFpbHlEb3NlIj4KICAgICAgICAgICAgICAgICAgICAgPHZhbHVlIHBhdGg9ImRhaWx5RG9zZURlc2NyaXB0aW9uIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIG5hbWU9Im1tZSIgeHNpOnR5cGU9IlF1ZXJ5TGV0UmVmIi8+CiAgICAgICAgICAgICAgICAgICAgIDwvdmFsdWU+CiAgICAgICAgICAgICAgICAgIDwvZWxlbWVudD4KICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0iY29udmVyc2lvbkZhY3RvciI+CiAgICAgICAgICAgICAgICAgICAgIDx2YWx1ZSBwYXRoPSJjb252ZXJzaW9uRmFjdG9yIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIG5hbWU9Im1tZSIgeHNpOnR5cGU9IlF1ZXJ5TGV0UmVmIi8+CiAgICAgICAgICAgICAgICAgICAgIDwvdmFsdWU+CiAgICAgICAgICAgICAgICAgIDwvZWxlbWVudD4KICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0ibW1lIj4KICAgICAgICAgICAgICAgICAgICAgPHZhbHVlIHBhdGg9Im1tZSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBuYW1lPSJtbWUiIHhzaTp0eXBlPSJRdWVyeUxldFJlZiIvPgogICAgICAgICAgICAgICAgICAgICA8L3ZhbHVlPgogICAgICAgICAgICAgICAgICA8L2VsZW1lbnQ+CiAgICAgICAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgICAgICAgPC9yZXR1cm4+CiAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgICAgPG9wZXJhbmQgbmFtZT0icHJlc2NyaXB0aW9ucyI+CiAgICAgICAgICAgIDxvcGVyYW5kVHlwZVNwZWNpZmllciB4c2k6dHlwZT0iTGlzdFR5cGVTcGVjaWZpZXIiPgogICAgICAgICAgICAgICA8ZWxlbWVudFR5cGUgbmFtZT0iZmhpcjpNZWRpY2F0aW9uUmVxdWVzdCIgeHNpOnR5cGU9Ik5hbWVkVHlwZVNwZWNpZmllciIvPgogICAgICAgICAgICA8L29wZXJhbmRUeXBlU3BlY2lmaWVyPgogICAgICAgICA8L29wZXJhbmQ+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIG5hbWU9IlRvdGFsTU1FIiBjb250ZXh0PSJQYXRpZW50IiBhY2Nlc3NMZXZlbD0iUHVibGljIiB4c2k6dHlwZT0iRnVuY3Rpb25EZWYiPgogICAgICAgICA8ZXhwcmVzc2lvbiBjbGFzc1R5cGU9InQ6UXVhbnRpdHkiIHhzaTp0eXBlPSJJbnN0YW5jZSI+CiAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9InZhbHVlIj4KICAgICAgICAgICAgICAgPHZhbHVlIHhzaTp0eXBlPSJTdW0iPgogICAgICAgICAgICAgICAgICA8c291cmNlIHhzaTp0eXBlPSJRdWVyeSI+CiAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgYWxpYXM9Ik0iPgogICAgICAgICAgICAgICAgICAgICAgICA8ZXhwcmVzc2lvbiBuYW1lPSJNTUUiIHhzaTp0eXBlPSJGdW5jdGlvblJlZiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIG5hbWU9InByZXNjcmlwdGlvbnMiIHhzaTp0eXBlPSJPcGVyYW5kUmVmIi8+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgICAgICAgIDxyZXR1cm4+CiAgICAgICAgICAgICAgICAgICAgICAgIDxleHByZXNzaW9uIHBhdGg9InZhbHVlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIHBhdGg9Im1tZSIgc2NvcGU9Ik0iIHhzaTp0eXBlPSJQcm9wZXJ0eSIvPgogICAgICAgICAgICAgICAgICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgICAgICAgICAgICAgICAgIDwvcmV0dXJuPgogICAgICAgICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgICAgPC92YWx1ZT4KICAgICAgICAgICAgPC9lbGVtZW50PgogICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJ1bml0Ij4KICAgICAgICAgICAgICAgPHZhbHVlIHZhbHVlVHlwZT0idDpTdHJpbmciIHZhbHVlPSJtZy9kIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICA8L2VsZW1lbnQ+CiAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgICAgPG9wZXJhbmQgbmFtZT0icHJlc2NyaXB0aW9ucyI+CiAgICAgICAgICAgIDxvcGVyYW5kVHlwZVNwZWNpZmllciB4c2k6dHlwZT0iTGlzdFR5cGVTcGVjaWZpZXIiPgogICAgICAgICAgICAgICA8ZWxlbWVudFR5cGUgbmFtZT0iZmhpcjpNZWRpY2F0aW9uUmVxdWVzdCIgeHNpOnR5cGU9Ik5hbWVkVHlwZVNwZWNpZmllciIvPgogICAgICAgICAgICA8L29wZXJhbmRUeXBlU3BlY2lmaWVyPgogICAgICAgICA8L29wZXJhbmQ+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIG5hbWU9IkdldFBlcmlvZERheXMiIGNvbnRleHQ9IlBhdGllbnQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiIHhzaTp0eXBlPSJGdW5jdGlvbkRlZiI+CiAgICAgICAgIDxleHByZXNzaW9uIHhzaTp0eXBlPSJDYXNlIj4KICAgICAgICAgICAgPGNhc2VJdGVtPgogICAgICAgICAgICAgICA8d2hlbiB4c2k6dHlwZT0iU3RhcnRzV2l0aCI+CiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIG5hbWU9InZhbHVlIiB4c2k6dHlwZT0iT3BlcmFuZFJlZiIvPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCB2YWx1ZVR5cGU9InQ6U3RyaW5nIiB2YWx1ZT0ieWVhciIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgPC93aGVuPgogICAgICAgICAgICAgICA8dGhlbiB2YWx1ZVR5cGU9InQ6RGVjaW1hbCIgdmFsdWU9IjM2NS4wIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICA8L2Nhc2VJdGVtPgogICAgICAgICAgICA8Y2FzZUl0ZW0+CiAgICAgICAgICAgICAgIDx3aGVuIHhzaTp0eXBlPSJTdGFydHNXaXRoIj4KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbmFtZT0idmFsdWUiIHhzaTp0eXBlPSJPcGVyYW5kUmVmIi8+CiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHZhbHVlVHlwZT0idDpTdHJpbmciIHZhbHVlPSJtb250aCIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgPC93aGVuPgogICAgICAgICAgICAgICA8dGhlbiB2YWx1ZVR5cGU9InQ6RGVjaW1hbCIgdmFsdWU9IjMwLjAiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgIDwvY2FzZUl0ZW0+CiAgICAgICAgICAgIDxjYXNlSXRlbT4KICAgICAgICAgICAgICAgPHdoZW4geHNpOnR5cGU9IlN0YXJ0c1dpdGgiPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCBuYW1lPSJ2YWx1ZSIgeHNpOnR5cGU9Ik9wZXJhbmRSZWYiLz4KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9ImhvdXIiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgIDwvd2hlbj4KICAgICAgICAgICAgICAgPHRoZW4geHNpOnR5cGU9IkRpdmlkZSI+CiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHZhbHVlVHlwZT0idDpEZWNpbWFsIiB2YWx1ZT0iMS4wIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCB2YWx1ZVR5cGU9InQ6RGVjaW1hbCIgdmFsdWU9IjI0LjAiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgIDwvdGhlbj4KICAgICAgICAgICAgPC9jYXNlSXRlbT4KICAgICAgICAgICAgPGNhc2VJdGVtPgogICAgICAgICAgICAgICA8d2hlbiB4c2k6dHlwZT0iU3RhcnRzV2l0aCI+CiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIG5hbWU9InZhbHVlIiB4c2k6dHlwZT0iT3BlcmFuZFJlZiIvPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCB2YWx1ZVR5cGU9InQ6U3RyaW5nIiB2YWx1ZT0ibWludXRlIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICA8L3doZW4+CiAgICAgICAgICAgICAgIDx0aGVuIHhzaTp0eXBlPSJNdWx0aXBseSI+CiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHhzaTp0eXBlPSJEaXZpZGUiPgogICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCB2YWx1ZVR5cGU9InQ6RGVjaW1hbCIgdmFsdWU9IjEuMCIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgdmFsdWVUeXBlPSJ0OkRlY2ltYWwiIHZhbHVlPSIyNC4wIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHZhbHVlVHlwZT0idDpEZWNpbWFsIiB2YWx1ZT0iNjAuMCIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgPC90aGVuPgogICAgICAgICAgICA8L2Nhc2VJdGVtPgogICAgICAgICAgICA8ZWxzZSB2YWx1ZVR5cGU9InQ6RGVjaW1hbCIgdmFsdWU9IjEuMCIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICAgICA8b3BlcmFuZCBuYW1lPSJ2YWx1ZSI+CiAgICAgICAgICAgIDxvcGVyYW5kVHlwZVNwZWNpZmllciBuYW1lPSJ0OlN0cmluZyIgeHNpOnR5cGU9Ik5hbWVkVHlwZVNwZWNpZmllciIvPgogICAgICAgICA8L29wZXJhbmQ+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIG5hbWU9IkdldER1cmF0aW9uSW5EYXlzIiBjb250ZXh0PSJQYXRpZW50IiBhY2Nlc3NMZXZlbD0iUHVibGljIiB4c2k6dHlwZT0iRnVuY3Rpb25EZWYiPgogICAgICAgICA8ZXhwcmVzc2lvbiB4c2k6dHlwZT0iQ2FzZSI+CiAgICAgICAgICAgIDxjYXNlSXRlbT4KICAgICAgICAgICAgICAgPHdoZW4geHNpOnR5cGU9IlN0YXJ0c1dpdGgiPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCBwYXRoPSJ2YWx1ZSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBwYXRoPSJ1bml0IiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIG5hbWU9InZhbHVlIiB4c2k6dHlwZT0iT3BlcmFuZFJlZiIvPgogICAgICAgICAgICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCB2YWx1ZVR5cGU9InQ6U3RyaW5nIiB2YWx1ZT0ieWVhciIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgPC93aGVuPgogICAgICAgICAgICAgICA8dGhlbiB4c2k6dHlwZT0iTXVsdGlwbHkiPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCBwYXRoPSJ2YWx1ZSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBwYXRoPSJ2YWx1ZSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBuYW1lPSJ2YWx1ZSIgeHNpOnR5cGU9Ik9wZXJhbmRSZWYiLz4KICAgICAgICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgdmFsdWVUeXBlPSJ0OkRlY2ltYWwiIHZhbHVlPSIzNjUuMCIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgPC90aGVuPgogICAgICAgICAgICA8L2Nhc2VJdGVtPgogICAgICAgICAgICA8Y2FzZUl0ZW0+CiAgICAgICAgICAgICAgIDx3aGVuIHhzaTp0eXBlPSJTdGFydHNXaXRoIj4KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgcGF0aD0idmFsdWUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgcGF0aD0idW5pdCIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBuYW1lPSJ2YWx1ZSIgeHNpOnR5cGU9Ik9wZXJhbmRSZWYiLz4KICAgICAgICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9Im1vbnRoIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICA8L3doZW4+CiAgICAgICAgICAgICAgIDx0aGVuIHhzaTp0eXBlPSJNdWx0aXBseSI+CiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHBhdGg9InZhbHVlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICA8c291cmNlIHBhdGg9InZhbHVlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIG5hbWU9InZhbHVlIiB4c2k6dHlwZT0iT3BlcmFuZFJlZiIvPgogICAgICAgICAgICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCB2YWx1ZVR5cGU9InQ6RGVjaW1hbCIgdmFsdWU9IjMwLjAiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgIDwvdGhlbj4KICAgICAgICAgICAgPC9jYXNlSXRlbT4KICAgICAgICAgICAgPGVsc2UgcGF0aD0idmFsdWUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgIDxzb3VyY2UgcGF0aD0idmFsdWUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbmFtZT0idmFsdWUiIHhzaTp0eXBlPSJPcGVyYW5kUmVmIi8+CiAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICA8L2Vsc2U+CiAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgICAgPG9wZXJhbmQgbmFtZT0idmFsdWUiPgogICAgICAgICAgICA8b3BlcmFuZFR5cGVTcGVjaWZpZXIgbmFtZT0iZmhpcjpEdXJhdGlvbiIgeHNpOnR5cGU9Ik5hbWVkVHlwZVNwZWNpZmllciIvPgogICAgICAgICA8L29wZXJhbmQ+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIG5hbWU9IlByb2JhYmxlRGF5c0luUmFuZ2UiIGNvbnRleHQ9IlBhdGllbnQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiIHhzaTp0eXBlPSJGdW5jdGlvbkRlZiI+CiAgICAgICAgIDxleHByZXNzaW9uIHhzaTp0eXBlPSJRdWVyeSI+CiAgICAgICAgICAgIDxzb3VyY2UgYWxpYXM9Im9yZGVycyI+CiAgICAgICAgICAgICAgIDxleHByZXNzaW9uIG5hbWU9Ik9yZGVycyIgeHNpOnR5cGU9Ik9wZXJhbmRSZWYiLz4KICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgIDxsZXQgaWRlbnRpZmllcj0iZnJlcXVlbmN5Ij4KICAgICAgICAgICAgICAgPGV4cHJlc3Npb24gcGF0aD0idmFsdWUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgIDxzb3VyY2UgcGF0aD0iZnJlcXVlbmN5IiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICA8c291cmNlIHBhdGg9InJlcGVhdCIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBwYXRoPSJ0aW1pbmciIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgeHNpOnR5cGU9IkluZGV4ZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBwYXRoPSJkb3NhZ2VJbnN0cnVjdGlvbiIgc2NvcGU9Im9yZGVycyIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHZhbHVlVHlwZT0idDpJbnRlZ2VyIiB2YWx1ZT0iMCIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgICAgICAgPC9sZXQ+CiAgICAgICAgICAgIDxsZXQgaWRlbnRpZmllcj0icGVyaW9kIj4KICAgICAgICAgICAgICAgPGV4cHJlc3Npb24gcGF0aD0idmFsdWUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgIDxzb3VyY2UgcGF0aD0icGVyaW9kIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICA8c291cmNlIHBhdGg9InJlcGVhdCIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBwYXRoPSJ0aW1pbmciIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgeHNpOnR5cGU9IkluZGV4ZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBwYXRoPSJkb3NhZ2VJbnN0cnVjdGlvbiIgc2NvcGU9Im9yZGVycyIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHZhbHVlVHlwZT0idDpJbnRlZ2VyIiB2YWx1ZT0iMCIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgICAgICAgPC9sZXQ+CiAgICAgICAgICAgIDxsZXQgaWRlbnRpZmllcj0icGVyaW9kRGF5cyI+CiAgICAgICAgICAgICAgIDxleHByZXNzaW9uIG5hbWU9IkdldFBlcmlvZERheXMiIHhzaTp0eXBlPSJGdW5jdGlvblJlZiI+CiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHBhdGg9InZhbHVlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICA8c291cmNlIHBhdGg9InBlcmlvZFVuaXQiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgcGF0aD0icmVwZWF0IiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIHBhdGg9InRpbWluZyIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSB4c2k6dHlwZT0iSW5kZXhlciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHBhdGg9ImRvc2FnZUluc3RydWN0aW9uIiBzY29wZT0ib3JkZXJzIiB4c2k6dHlwZT0iUHJvcGVydHkiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgdmFsdWVUeXBlPSJ0OkludGVnZXIiIHZhbHVlPSIwIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgICAgICAgIDwvbGV0PgogICAgICAgICAgICA8bGV0IGlkZW50aWZpZXI9ImRvc2VzUGVyRGF5Ij4KICAgICAgICAgICAgICAgPGV4cHJlc3Npb24geHNpOnR5cGU9IklmIj4KICAgICAgICAgICAgICAgICAgPGNvbmRpdGlvbiBhc1R5cGU9InQ6Qm9vbGVhbiIgeHNpOnR5cGU9IkFzIj4KICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgeHNpOnR5cGU9IkdyZWF0ZXJPckVxdWFsIj4KICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgeHNpOnR5cGU9IkRpdmlkZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHhzaTp0eXBlPSJUb0RlY2ltYWwiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBuYW1lPSJmcmVxdWVuY3kiIHhzaTp0eXBlPSJRdWVyeUxldFJlZiIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHhzaTp0eXBlPSJNdWx0aXBseSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIG5hbWU9InBlcmlvZCIgeHNpOnR5cGU9IlF1ZXJ5TGV0UmVmIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIG5hbWU9InBlcmlvZERheXMiIHhzaTp0eXBlPSJRdWVyeUxldFJlZiIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgdmFsdWVUeXBlPSJ0OkRlY2ltYWwiIHZhbHVlPSIxLjAiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgPC9jb25kaXRpb24+CiAgICAgICAgICAgICAgICAgIDx0aGVuIHZhbHVlVHlwZT0idDpEZWNpbWFsIiB2YWx1ZT0iMS4wIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICAgICA8ZWxzZSB4c2k6dHlwZT0iRGl2aWRlIj4KICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgeHNpOnR5cGU9IlRvRGVjaW1hbCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIG5hbWU9ImZyZXF1ZW5jeSIgeHNpOnR5cGU9IlF1ZXJ5TGV0UmVmIi8+CiAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgeHNpOnR5cGU9Ik11bHRpcGx5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbmFtZT0icGVyaW9kIiB4c2k6dHlwZT0iUXVlcnlMZXRSZWYiLz4KICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbmFtZT0icGVyaW9kRGF5cyIgeHNpOnR5cGU9IlF1ZXJ5TGV0UmVmIi8+CiAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgPC9lbHNlPgogICAgICAgICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgICAgICAgIDwvbGV0PgogICAgICAgICAgICA8bGV0IGlkZW50aWZpZXI9InJlcGVhdCI+CiAgICAgICAgICAgICAgIDxleHByZXNzaW9uIHBhdGg9InZhbHVlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICA8c291cmNlIHBhdGg9Im51bWJlck9mUmVwZWF0c0FsbG93ZWQiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgcGF0aD0iZGlzcGVuc2VSZXF1ZXN0IiBzY29wZT0ib3JkZXJzIiB4c2k6dHlwZT0iUHJvcGVydHkiLz4KICAgICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgICAgICAgPC9sZXQ+CiAgICAgICAgICAgIDxsZXQgaWRlbnRpZmllcj0ic3VwcGx5RHVyYXRpb24iPgogICAgICAgICAgICAgICA8ZXhwcmVzc2lvbiBuYW1lPSJHZXREdXJhdGlvbkluRGF5cyIgeHNpOnR5cGU9IkZ1bmN0aW9uUmVmIj4KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgcGF0aD0iZXhwZWN0ZWRTdXBwbHlEdXJhdGlvbiIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBwYXRoPSJkaXNwZW5zZVJlcXVlc3QiIHNjb3BlPSJvcmRlcnMiIHhzaTp0eXBlPSJQcm9wZXJ0eSIvPgogICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgICAgICAgPC9sZXQ+CiAgICAgICAgICAgIDxsZXQgaWRlbnRpZmllcj0idmFsaWRpdHlQZXJpb2QiPgogICAgICAgICAgICAgICA8ZXhwcmVzc2lvbiBwcmVjaXNpb249IkRheSIgeHNpOnR5cGU9IkR1cmF0aW9uQmV0d2VlbiI+CiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHBhdGg9InZhbHVlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICA8c291cmNlIHBhdGg9InN0YXJ0IiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIHBhdGg9InZhbGlkaXR5UGVyaW9kIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIHBhdGg9ImRpc3BlbnNlUmVxdWVzdCIgc2NvcGU9Im9yZGVycyIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCB4c2k6dHlwZT0iVG9kYXkiLz4KICAgICAgICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICAgICAgICA8L2xldD4KICAgICAgICAgICAgPGxldCBpZGVudGlmaWVyPSJlbmREaWZmZXJlbmNlIj4KICAgICAgICAgICAgICAgPGV4cHJlc3Npb24geHNpOnR5cGU9IklmIj4KICAgICAgICAgICAgICAgICAgPGNvbmRpdGlvbiBhc1R5cGU9InQ6Qm9vbGVhbiIgeHNpOnR5cGU9IkFzIj4KICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgeHNpOnR5cGU9Ikxlc3MiPgogICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBwYXRoPSJ2YWx1ZSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBwYXRoPSJlbmQiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgcGF0aD0idmFsaWRpdHlQZXJpb2QiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgcGF0aD0iZGlzcGVuc2VSZXF1ZXN0IiBzY29wZT0ib3JkZXJzIiB4c2k6dHlwZT0iUHJvcGVydHkiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHhzaTp0eXBlPSJUb2RheSIvPgogICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgIDwvY29uZGl0aW9uPgogICAgICAgICAgICAgICAgICA8dGhlbiBwcmVjaXNpb249IkRheSIgeHNpOnR5cGU9IkR1cmF0aW9uQmV0d2VlbiI+CiAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHBhdGg9InZhbHVlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIHBhdGg9ImVuZCIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBwYXRoPSJ2YWxpZGl0eVBlcmlvZCIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBwYXRoPSJkaXNwZW5zZVJlcXVlc3QiIHNjb3BlPSJvcmRlcnMiIHhzaTp0eXBlPSJQcm9wZXJ0eSIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgeHNpOnR5cGU9IlRvZGF5Ii8+CiAgICAgICAgICAgICAgICAgIDwvdGhlbj4KICAgICAgICAgICAgICAgICAgPGVsc2UgdmFsdWVUeXBlPSJ0OkludGVnZXIiIHZhbHVlPSIwIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgICAgICAgIDwvbGV0PgogICAgICAgICAgICA8cmV0dXJuPgogICAgICAgICAgICAgICA8ZXhwcmVzc2lvbiB4c2k6dHlwZT0iR3JlYXRlck9yRXF1YWwiPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCB4c2k6dHlwZT0iTXVsdGlwbHkiPgogICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCB4c2k6dHlwZT0iTXVsdGlwbHkiPgogICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBuYW1lPSJkb3Nlc1BlckRheSIgeHNpOnR5cGU9IlF1ZXJ5TGV0UmVmIi8+CiAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHhzaTp0eXBlPSJEaXZpZGUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCB4c2k6dHlwZT0iTXVsdGlwbHkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCB4c2k6dHlwZT0iVG9EZWNpbWFsIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbmFtZT0icmVwZWF0IiB4c2k6dHlwZT0iUXVlcnlMZXRSZWYiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBuYW1lPSJzdXBwbHlEdXJhdGlvbiIgeHNpOnR5cGU9IlF1ZXJ5TGV0UmVmIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgeHNpOnR5cGU9IlRvRGVjaW1hbCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIG5hbWU9InZhbGlkaXR5UGVyaW9kIiB4c2k6dHlwZT0iUXVlcnlMZXRSZWYiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgeHNpOnR5cGU9IlRvRGVjaW1hbCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHhzaTp0eXBlPSJTdWJ0cmFjdCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIG5hbWU9ImRheXNQYXN0IiB4c2k6dHlwZT0iT3BlcmFuZFJlZiIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBuYW1lPSJlbmREaWZmZXJlbmNlIiB4c2k6dHlwZT0iUXVlcnlMZXRSZWYiLz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgeHNpOnR5cGU9IlRvRGVjaW1hbCI+CiAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIG5hbWU9Im51bURheXNJbkRheXNQYXN0IiB4c2k6dHlwZT0iT3BlcmFuZFJlZiIvPgogICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgICAgICAgPC9yZXR1cm4+CiAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgICAgPG9wZXJhbmQgbmFtZT0iT3JkZXJzIj4KICAgICAgICAgICAgPG9wZXJhbmRUeXBlU3BlY2lmaWVyIHhzaTp0eXBlPSJMaXN0VHlwZVNwZWNpZmllciI+CiAgICAgICAgICAgICAgIDxlbGVtZW50VHlwZSBuYW1lPSJmaGlyOk1lZGljYXRpb25SZXF1ZXN0IiB4c2k6dHlwZT0iTmFtZWRUeXBlU3BlY2lmaWVyIi8+CiAgICAgICAgICAgIDwvb3BlcmFuZFR5cGVTcGVjaWZpZXI+CiAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgPG9wZXJhbmQgbmFtZT0iZGF5c1Bhc3QiPgogICAgICAgICAgICA8b3BlcmFuZFR5cGVTcGVjaWZpZXIgbmFtZT0idDpJbnRlZ2VyIiB4c2k6dHlwZT0iTmFtZWRUeXBlU3BlY2lmaWVyIi8+CiAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgPG9wZXJhbmQgbmFtZT0ibnVtRGF5c0luRGF5c1Bhc3QiPgogICAgICAgICAgICA8b3BlcmFuZFR5cGVTcGVjaWZpZXIgbmFtZT0idDpJbnRlZ2VyIiB4c2k6dHlwZT0iTmFtZWRUeXBlU3BlY2lmaWVyIi8+CiAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgPC9kZWY+CiAgICAgIDxkZWYgbmFtZT0iSXNOYWxveG9uZSIgY29udGV4dD0iUGF0aWVudCIgYWNjZXNzTGV2ZWw9IlB1YmxpYyIgeHNpOnR5cGU9IkZ1bmN0aW9uRGVmIj4KICAgICAgICAgPGV4cHJlc3Npb24geHNpOnR5cGU9IkluVmFsdWVTZXQiPgogICAgICAgICAgICA8Y29kZSBuYW1lPSJyeE5vcm1Db2RlIiB4c2k6dHlwZT0iT3BlcmFuZFJlZiIvPgogICAgICAgICAgICA8dmFsdWVzZXQgbmFtZT0iTmFsb3hvbmUiLz4KICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICAgICA8b3BlcmFuZCBuYW1lPSJyeE5vcm1Db2RlIj4KICAgICAgICAgICAgPG9wZXJhbmRUeXBlU3BlY2lmaWVyIG5hbWU9InQ6Q29kZSIgeHNpOnR5cGU9Ik5hbWVkVHlwZVNwZWNpZmllciIvPgogICAgICAgICA8L29wZXJhbmQ+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIG5hbWU9IklzQmVuem9kaWF6ZXBpbmUiIGNvbnRleHQ9IlBhdGllbnQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiIHhzaTp0eXBlPSJGdW5jdGlvbkRlZiI+CiAgICAgICAgIDxleHByZXNzaW9uIHhzaTp0eXBlPSJJblZhbHVlU2V0Ij4KICAgICAgICAgICAgPGNvZGUgbmFtZT0icnhOb3JtQ29kZSIgeHNpOnR5cGU9Ik9wZXJhbmRSZWYiLz4KICAgICAgICAgICAgPHZhbHVlc2V0IG5hbWU9IkJlbnpvZGlhemVwaW5lcyIvPgogICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgICAgIDxvcGVyYW5kIG5hbWU9InJ4Tm9ybUNvZGUiPgogICAgICAgICAgICA8b3BlcmFuZFR5cGVTcGVjaWZpZXIgbmFtZT0idDpDb2RlIiB4c2k6dHlwZT0iTmFtZWRUeXBlU3BlY2lmaWVyIi8+CiAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgPC9kZWY+CiAgICAgIDxkZWYgbmFtZT0iSXNPcGlvaWRXaXRoQW1idWxhdG9yeUFidXNlUG90ZW50aWFsIiBjb250ZXh0PSJQYXRpZW50IiBhY2Nlc3NMZXZlbD0iUHVibGljIiB4c2k6dHlwZT0iRnVuY3Rpb25EZWYiPgogICAgICAgICA8ZXhwcmVzc2lvbiB4c2k6dHlwZT0iSW5WYWx1ZVNldCI+CiAgICAgICAgICAgIDxjb2RlIG5hbWU9InJ4Tm9ybUNvZGUiIHhzaTp0eXBlPSJPcGVyYW5kUmVmIi8+CiAgICAgICAgICAgIDx2YWx1ZXNldCBuYW1lPSJBbWJ1bGF0b3J5IEFidXNlIFBvdGVudGlhbCBPcGlvaWRzIi8+CiAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgICAgPG9wZXJhbmQgbmFtZT0icnhOb3JtQ29kZSI+CiAgICAgICAgICAgIDxvcGVyYW5kVHlwZVNwZWNpZmllciBuYW1lPSJ0OkNvZGUiIHhzaTp0eXBlPSJOYW1lZFR5cGVTcGVjaWZpZXIiLz4KICAgICAgICAgPC9vcGVyYW5kPgogICAgICA8L2RlZj4KICAgICAgPGRlZiBuYW1lPSJJc0xvbmdBY3RpbmdPcGlvaWQiIGNvbnRleHQ9IlBhdGllbnQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiIHhzaTp0eXBlPSJGdW5jdGlvbkRlZiI+CiAgICAgICAgIDxleHByZXNzaW9uIHhzaTp0eXBlPSJJblZhbHVlU2V0Ij4KICAgICAgICAgICAgPGNvZGUgbmFtZT0icnhOb3JtQ29kZSIgeHNpOnR5cGU9Ik9wZXJhbmRSZWYiLz4KICAgICAgICAgICAgPHZhbHVlc2V0IG5hbWU9IkxvbmcgQWN0aW5nIE9waW9pZHMiLz4KICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICAgICA8b3BlcmFuZCBuYW1lPSJyeE5vcm1Db2RlIj4KICAgICAgICAgICAgPG9wZXJhbmRUeXBlU3BlY2lmaWVyIG5hbWU9InQ6Q29kZSIgeHNpOnR5cGU9Ik5hbWVkVHlwZVNwZWNpZmllciIvPgogICAgICAgICA8L29wZXJhbmQ+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIG5hbWU9IklzRW5kT2ZMaWZlT3Bpb2lkIiBjb250ZXh0PSJQYXRpZW50IiBhY2Nlc3NMZXZlbD0iUHVibGljIiB4c2k6dHlwZT0iRnVuY3Rpb25EZWYiPgogICAgICAgICA8ZXhwcmVzc2lvbiB4c2k6dHlwZT0iSW5WYWx1ZVNldCI+CiAgICAgICAgICAgIDxjb2RlIG5hbWU9InJ4Tm9ybUNvZGUiIHhzaTp0eXBlPSJPcGVyYW5kUmVmIi8+CiAgICAgICAgICAgIDx2YWx1ZXNldCBuYW1lPSJFbmQgT2YgTGlmZSBPcGlvaWRzIi8+CiAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgICAgPG9wZXJhbmQgbmFtZT0icnhOb3JtQ29kZSI+CiAgICAgICAgICAgIDxvcGVyYW5kVHlwZVNwZWNpZmllciBuYW1lPSJ0OkNvZGUiIHhzaTp0eXBlPSJOYW1lZFR5cGVTcGVjaWZpZXIiLz4KICAgICAgICAgPC9vcGVyYW5kPgogICAgICA8L2RlZj4KICAgICAgPGRlZiBuYW1lPSJJc09waW9pZERydWdTY3JlZW4iIGNvbnRleHQ9IlBhdGllbnQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiIHhzaTp0eXBlPSJGdW5jdGlvbkRlZiI+CiAgICAgICAgIDxleHByZXNzaW9uIHhzaTp0eXBlPSJJblZhbHVlU2V0Ij4KICAgICAgICAgICAgPGNvZGUgbmFtZT0ib2JzZXJ2YXRpb25Db2RlIiB4c2k6dHlwZT0iT3BlcmFuZFJlZiIvPgogICAgICAgICAgICA8dmFsdWVzZXQgbmFtZT0iT3Bpb2lkIERydWcgU2NyZWVuaW5nIi8+CiAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgICAgPG9wZXJhbmQgbmFtZT0ib2JzZXJ2YXRpb25Db2RlIj4KICAgICAgICAgICAgPG9wZXJhbmRUeXBlU3BlY2lmaWVyIG5hbWU9InQ6Q29kZSIgeHNpOnR5cGU9Ik5hbWVkVHlwZVNwZWNpZmllciIvPgogICAgICAgICA8L29wZXJhbmQ+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIG5hbWU9IklzSWxsaWNpdERydWdTY3JlZW4iIGNvbnRleHQ9IlBhdGllbnQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiIHhzaTp0eXBlPSJGdW5jdGlvbkRlZiI+CiAgICAgICAgIDxleHByZXNzaW9uIHhzaTp0eXBlPSJJblZhbHVlU2V0Ij4KICAgICAgICAgICAgPGNvZGUgbmFtZT0ib2JzZXJ2YXRpb25Db2RlIiB4c2k6dHlwZT0iT3BlcmFuZFJlZiIvPgogICAgICAgICAgICA8dmFsdWVzZXQgbmFtZT0iSWxsaWNpdCBEcnVnIFNjcmVlbmluZyIvPgogICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgICAgIDxvcGVyYW5kIG5hbWU9Im9ic2VydmF0aW9uQ29kZSI+CiAgICAgICAgICAgIDxvcGVyYW5kVHlwZVNwZWNpZmllciBuYW1lPSJ0OkNvZGUiIHhzaTp0eXBlPSJOYW1lZFR5cGVTcGVjaWZpZXIiLz4KICAgICAgICAgPC9vcGVyYW5kPgogICAgICA8L2RlZj4KICAgICAgPGRlZiBuYW1lPSJHZXRJbmdyZWRpZW50IiBjb250ZXh0PSJQYXRpZW50IiBhY2Nlc3NMZXZlbD0iUHVibGljIiB4c2k6dHlwZT0iRnVuY3Rpb25EZWYiPgogICAgICAgICA8ZXhwcmVzc2lvbiB4c2k6dHlwZT0iUXVlcnkiPgogICAgICAgICAgICA8c291cmNlIGFsaWFzPSIkdGhpcyI+CiAgICAgICAgICAgICAgIDxleHByZXNzaW9uIG5hbWU9IkdldEluZ3JlZGllbnRzIiBsaWJyYXJ5TmFtZT0iT01US0xvZ2ljIiB4c2k6dHlwZT0iRnVuY3Rpb25SZWYiPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCBuYW1lPSJyeE5vcm1Db2RlIiB4c2k6dHlwZT0iT3BlcmFuZFJlZiIvPgogICAgICAgICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICA8d2hlcmUgeHNpOnR5cGU9Ik5vdCI+CiAgICAgICAgICAgICAgIDxvcGVyYW5kIHhzaTp0eXBlPSJJc051bGwiPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCBwYXRoPSJpbmdyZWRpZW50TmFtZSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBuYW1lPSIkdGhpcyIgeHNpOnR5cGU9IkFsaWFzUmVmIi8+CiAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICA8L3doZXJlPgogICAgICAgICAgICA8cmV0dXJuPgogICAgICAgICAgICAgICA8ZXhwcmVzc2lvbiBwYXRoPSJpbmdyZWRpZW50TmFtZSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgPHNvdXJjZSBuYW1lPSIkdGhpcyIgeHNpOnR5cGU9IkFsaWFzUmVmIi8+CiAgICAgICAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgICAgICAgPC9yZXR1cm4+CiAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgICAgPG9wZXJhbmQgbmFtZT0icnhOb3JtQ29kZSI+CiAgICAgICAgICAgIDxvcGVyYW5kVHlwZVNwZWNpZmllciBuYW1lPSJ0OkNvZGUiIHhzaTp0eXBlPSJOYW1lZFR5cGVTcGVjaWZpZXIiLz4KICAgICAgICAgPC9vcGVyYW5kPgogICAgICA8L2RlZj4KICAgPC9zdGF0ZW1lbnRzPgo8L2xpYnJhcnk+Cg=="
    }
  ]
}

Library "omtk-modelinfo" Version "1"

Tags: (no tags)  +

This Resource , XML or JSON representation, or the full version history.. provenance for this resource
Updated: by

Participants

Author Kensaku Kawamoto, MD, PhD, MHS
Author Bryn Rhodes
Author Floyd Eisenberg, MD, MPH
Author Robert McClure, MD, MPH

Contents

application/xml

        <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns4:modelInfo name="OMTK" url="http://org.opencds/opioid-cds" targetQualifier="cdc" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:ns4="urn:hl7-org:elm-modelinfo:r1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               version="0.1.0">
    <ns4:typeInfo xsi:type="ns4:ClassInfo" name="OMTK.MED_DOSE_FORM" baseType="System.Any" retrievable="true">
        <ns4:element name="DOSE_FORM_RXCUI" type="System.Code"/>
        <ns4:element name="DOSE_FORM_NAME" type="System.String"/>
        <ns4:element name="UPDATE_DTM" type="System.DateTime"/>
    </ns4:typeInfo>
    <ns4:typeInfo xsi:type="ns4:ClassInfo" name="OMTK.MED_DOSE_FORM_GROUP" baseType="System.Any" retrievable="true">
        <ns4:element name="DOSE_FORM_GROUP_RXCUI" type="System.Code"/>
        <ns4:element name="DOSE_FORM_GROUP_NAME" type="System.String"/>
        <ns4:element name="UPDATE_DTM" type="System.DateTime"/>
    </ns4:typeInfo>
    <ns4:typeInfo xsi:type="ns4:ClassInfo" name="OMTK.MED_DRUG" baseType="System.Any" retrievable="true">
        <ns4:element name="DRUG_RXCUI" type="System.Code"/>
        <ns4:element name="DRUG_TYPE" type="System.String"/>
        <ns4:element name="DRUG_NAME" type="System.String"/>
        <ns4:element name="DOSE_FORM_RXCUI" type="System.Code"/>
        <ns4:element name="UPDATE_DTM" type="System.DateTime"/>
    </ns4:typeInfo>
    <ns4:typeInfo xsi:type="ns4:ClassInfo" name="OMTK.MED_DRUG_DOSE_FORM_GROUP" baseType="System.Any" retrievable="true">
        <ns4:element name="DRUG_RXCUI" type="System.Code"/>
        <ns4:element name="DOSE_FORM_GROUP_RXCUI" type="System.Code"/>
        <ns4:element name="UPDATE_DTM" type="System.DateTime"/>
    </ns4:typeInfo>
    <ns4:typeInfo xsi:type="ns4:ClassInfo" name="OMTK.MED_DRUG_VALUE_SET" baseType="System.Any" retrievable="true">
        <ns4:element name="VALUE_SET_ID" type="System.Integer"/>
        <ns4:element name="DRUG_RXCUI" type="System.Code"/>
    </ns4:typeInfo>
    <ns4:typeInfo xsi:type="ns4:ClassInfo" name="OMTK.MED_DRUG_WITH_INGREDIENT" baseType="System.Any" retrievable="true">
        <ns4:element name="INGREDIENT_RXCUI" type="System.Code"/>
        <ns4:element name="DRUG_RXCUI" type="System.Code"/>
        <ns4:element name="UPDATE_DTM" type="System.DateTime"/>
    </ns4:typeInfo>
    <ns4:typeInfo xsi:type="ns4:ClassInfo" name="OMTK.MED_INGREDIENT" baseType="System.Any" retrievable="true">
        <ns4:element name="INGREDIENT_RXCUI" type="System.Code"/>
        <ns4:element name="INGREDIENT_NAME" type="System.String"/>
        <ns4:element name="USE_TO_POPULATE_DB" type="System.Integer"/>
        <ns4:element name="SKIP" type="System.Integer"/>
        <ns4:element name="UPDATE_DTM" type="System.DateTime"/>
    </ns4:typeInfo>
    <ns4:typeInfo xsi:type="ns4:ClassInfo" name="OMTK.MED_INGREDIENT_IN_CLASS" baseType="System.Any" retrievable="true">
        <ns4:element name="MED_CLASS_ID" type="System.Integer"/>
        <ns4:element name="INGREDIENT_RXCUI" type="System.Code"/>
        <ns4:element name="UPDATE_DTM" type="System.DateTime"/>
    </ns4:typeInfo>
    <ns4:typeInfo xsi:type="ns4:ClassInfo" name="OMTK.MED_INGREDIENT_TYPE" baseType="System.Any" retrievable="true">
        <ns4:element name="INGREDIENT_RXCUI" type="System.Code"/>
        <ns4:element name="INGREDIENT_TYPE" type="System.String"/>
        <ns4:element name="UPDATE_DTM" type="System.DateTime"/>
    </ns4:typeInfo>
    <ns4:typeInfo xsi:type="ns4:ClassInfo" name="OMTK.MED_SCDC" baseType="System.Any" retrievable="true">
        <ns4:element name="SCDC_RXCUI" type="System.Code"/>
        <ns4:element name="SCDC_NAME" type="System.String"/>
        <ns4:element name="INGREDIENT_RXCUI" type="System.Code"/>
        <ns4:element name="STRENGTH" type="System.String"/>
        <ns4:element name="STRENGTH_VALUE" type="System.Decimal"/>
        <ns4:element name="STRENGTH_UNIT" type="System.String"/>
        <ns4:element name="UPDATE_DTM" type="System.DateTime"/>
    </ns4:typeInfo>
    <ns4:typeInfo xsi:type="ns4:ClassInfo" name="OMTK.MED_SCDC_FOR_DRUG" baseType="System.Any" retrievable="true">
        <ns4:element name="DRUG_RXCUI" type="System.Code"/>
        <ns4:element name="SCDC_RXCUI" type="System.Code"/>
        <ns4:element name="UPDATE_DTM" type="System.DateTime"/>
    </ns4:typeInfo>
    <ns4:typeInfo xsi:type="ns4:ClassInfo" name="OMTK.VALUE_SET" baseType="System.Any" retrievable="true">
        <ns4:element name="VALUE_SET_ID" type="System.Integer"/>
        <ns4:element name="EXECUTE_ORDER" type="System.Integer"/>
        <ns4:element name="VALUE_SET_NAME" type="System.String"/>
        <ns4:element name="DESCRIPTION" type="System.String"/>
        <ns4:element name="SQL" type="System.String"/>
        <ns4:element name="COMMENTS" type="System.String"/>
        <ns4:element name="UPDATE_DTM" type="System.DateTime"/>
    </ns4:typeInfo>
</ns4:modelInfo>

      

{
  "resourceType" : "Library",
  "id" : "omtk-modelinfo",
  "meta" : {
    "versionId" : "1",
    "lastUpdated" : "2021-05-24T10:50:20.325Z",
    "tag" : [
      {
        "system" : "http://terminology.hl7.org/CodeSystem/v3-ActReason",
        "code" : "HTEST",
        "display" : "test health data"
      }
    ]
  },
  "text" : {
    "status" : "generated",
    "div" : "<div xmlns=\"http://www.w3.org/1999/xhtml\">\n <h2>Participants</h2>\n <table class=\"grid\">\n <tr>\n <td>Author</td>\n <td>Kensaku Kawamoto, MD, PhD, MHS</td>\n </tr>\n <tr>\n <td>Author</td>\n <td>Bryn Rhodes</td>\n </tr>\n <tr>\n <td>Author</td>\n <td>Floyd Eisenberg, MD, MPH</td>\n </tr>\n <tr>\n <td>Author</td>\n <td>Robert McClure, MD, MPH</td>\n </tr>\n </table>\n <h2>Contents</h2>\n <p>\n <code>application/xml</code>\n </p>\n <pre>\n <code class=\"language-xml\">&lt;?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?&gt;\n&lt;ns4:modelInfo name=\"OMTK\" url=\"http://org.opencds/opioid-cds\" targetQualifier=\"cdc\" xmlns:xs=\"http://www.w3.org/2001/XMLSchema\" xmlns:ns4=\"urn:hl7-org:elm-modelinfo:r1\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n version=\"0.1.0\"&gt;\n &lt;ns4:typeInfo xsi:type=\"ns4:ClassInfo\" name=\"OMTK.MED_DOSE_FORM\" baseType=\"System.Any\" retrievable=\"true\"&gt;\n &lt;ns4:element name=\"DOSE_FORM_RXCUI\" type=\"System.Code\"/&gt;\n &lt;ns4:element name=\"DOSE_FORM_NAME\" type=\"System.String\"/&gt;\n &lt;ns4:element name=\"UPDATE_DTM\" type=\"System.DateTime\"/&gt;\n &lt;/ns4:typeInfo&gt;\n &lt;ns4:typeInfo xsi:type=\"ns4:ClassInfo\" name=\"OMTK.MED_DOSE_FORM_GROUP\" baseType=\"System.Any\" retrievable=\"true\"&gt;\n &lt;ns4:element name=\"DOSE_FORM_GROUP_RXCUI\" type=\"System.Code\"/&gt;\n &lt;ns4:element name=\"DOSE_FORM_GROUP_NAME\" type=\"System.String\"/&gt;\n &lt;ns4:element name=\"UPDATE_DTM\" type=\"System.DateTime\"/&gt;\n &lt;/ns4:typeInfo&gt;\n &lt;ns4:typeInfo xsi:type=\"ns4:ClassInfo\" name=\"OMTK.MED_DRUG\" baseType=\"System.Any\" retrievable=\"true\"&gt;\n &lt;ns4:element name=\"DRUG_RXCUI\" type=\"System.Code\"/&gt;\n &lt;ns4:element name=\"DRUG_TYPE\" type=\"System.String\"/&gt;\n &lt;ns4:element name=\"DRUG_NAME\" type=\"System.String\"/&gt;\n &lt;ns4:element name=\"DOSE_FORM_RXCUI\" type=\"System.Code\"/&gt;\n &lt;ns4:element name=\"UPDATE_DTM\" type=\"System.DateTime\"/&gt;\n &lt;/ns4:typeInfo&gt;\n &lt;ns4:typeInfo xsi:type=\"ns4:ClassInfo\" name=\"OMTK.MED_DRUG_DOSE_FORM_GROUP\" baseType=\"System.Any\" retrievable=\"true\"&gt;\n &lt;ns4:element name=\"DRUG_RXCUI\" type=\"System.Code\"/&gt;\n &lt;ns4:element name=\"DOSE_FORM_GROUP_RXCUI\" type=\"System.Code\"/&gt;\n &lt;ns4:element name=\"UPDATE_DTM\" type=\"System.DateTime\"/&gt;\n &lt;/ns4:typeInfo&gt;\n &lt;ns4:typeInfo xsi:type=\"ns4:ClassInfo\" name=\"OMTK.MED_DRUG_VALUE_SET\" baseType=\"System.Any\" retrievable=\"true\"&gt;\n &lt;ns4:element name=\"VALUE_SET_ID\" type=\"System.Integer\"/&gt;\n &lt;ns4:element name=\"DRUG_RXCUI\" type=\"System.Code\"/&gt;\n &lt;/ns4:typeInfo&gt;\n &lt;ns4:typeInfo xsi:type=\"ns4:ClassInfo\" name=\"OMTK.MED_DRUG_WITH_INGREDIENT\" baseType=\"System.Any\" retrievable=\"true\"&gt;\n &lt;ns4:element name=\"INGREDIENT_RXCUI\" type=\"System.Code\"/&gt;\n &lt;ns4:element name=\"DRUG_RXCUI\" type=\"System.Code\"/&gt;\n &lt;ns4:element name=\"UPDATE_DTM\" type=\"System.DateTime\"/&gt;\n &lt;/ns4:typeInfo&gt;\n &lt;ns4:typeInfo xsi:type=\"ns4:ClassInfo\" name=\"OMTK.MED_INGREDIENT\" baseType=\"System.Any\" retrievable=\"true\"&gt;\n &lt;ns4:element name=\"INGREDIENT_RXCUI\" type=\"System.Code\"/&gt;\n &lt;ns4:element name=\"INGREDIENT_NAME\" type=\"System.String\"/&gt;\n &lt;ns4:element name=\"USE_TO_POPULATE_DB\" type=\"System.Integer\"/&gt;\n &lt;ns4:element name=\"SKIP\" type=\"System.Integer\"/&gt;\n &lt;ns4:element name=\"UPDATE_DTM\" type=\"System.DateTime\"/&gt;\n &lt;/ns4:typeInfo&gt;\n &lt;ns4:typeInfo xsi:type=\"ns4:ClassInfo\" name=\"OMTK.MED_INGREDIENT_IN_CLASS\" baseType=\"System.Any\" retrievable=\"true\"&gt;\n &lt;ns4:element name=\"MED_CLASS_ID\" type=\"System.Integer\"/&gt;\n &lt;ns4:element name=\"INGREDIENT_RXCUI\" type=\"System.Code\"/&gt;\n &lt;ns4:element name=\"UPDATE_DTM\" type=\"System.DateTime\"/&gt;\n &lt;/ns4:typeInfo&gt;\n &lt;ns4:typeInfo xsi:type=\"ns4:ClassInfo\" name=\"OMTK.MED_INGREDIENT_TYPE\" baseType=\"System.Any\" retrievable=\"true\"&gt;\n &lt;ns4:element name=\"INGREDIENT_RXCUI\" type=\"System.Code\"/&gt;\n &lt;ns4:element name=\"INGREDIENT_TYPE\" type=\"System.String\"/&gt;\n &lt;ns4:element name=\"UPDATE_DTM\" type=\"System.DateTime\"/&gt;\n &lt;/ns4:typeInfo&gt;\n &lt;ns4:typeInfo xsi:type=\"ns4:ClassInfo\" name=\"OMTK.MED_SCDC\" baseType=\"System.Any\" retrievable=\"true\"&gt;\n &lt;ns4:element name=\"SCDC_RXCUI\" type=\"System.Code\"/&gt;\n &lt;ns4:element name=\"SCDC_NAME\" type=\"System.String\"/&gt;\n &lt;ns4:element name=\"INGREDIENT_RXCUI\" type=\"System.Code\"/&gt;\n &lt;ns4:element name=\"STRENGTH\" type=\"System.String\"/&gt;\n &lt;ns4:element name=\"STRENGTH_VALUE\" type=\"System.Decimal\"/&gt;\n &lt;ns4:element name=\"STRENGTH_UNIT\" type=\"System.String\"/&gt;\n &lt;ns4:element name=\"UPDATE_DTM\" type=\"System.DateTime\"/&gt;\n &lt;/ns4:typeInfo&gt;\n &lt;ns4:typeInfo xsi:type=\"ns4:ClassInfo\" name=\"OMTK.MED_SCDC_FOR_DRUG\" baseType=\"System.Any\" retrievable=\"true\"&gt;\n &lt;ns4:element name=\"DRUG_RXCUI\" type=\"System.Code\"/&gt;\n &lt;ns4:element name=\"SCDC_RXCUI\" type=\"System.Code\"/&gt;\n &lt;ns4:element name=\"UPDATE_DTM\" type=\"System.DateTime\"/&gt;\n &lt;/ns4:typeInfo&gt;\n &lt;ns4:typeInfo xsi:type=\"ns4:ClassInfo\" name=\"OMTK.VALUE_SET\" baseType=\"System.Any\" retrievable=\"true\"&gt;\n &lt;ns4:element name=\"VALUE_SET_ID\" type=\"System.Integer\"/&gt;\n &lt;ns4:element name=\"EXECUTE_ORDER\" type=\"System.Integer\"/&gt;\n &lt;ns4:element name=\"VALUE_SET_NAME\" type=\"System.String\"/&gt;\n &lt;ns4:element name=\"DESCRIPTION\" type=\"System.String\"/&gt;\n &lt;ns4:element name=\"SQL\" type=\"System.String\"/&gt;\n &lt;ns4:element name=\"COMMENTS\" type=\"System.String\"/&gt;\n &lt;ns4:element name=\"UPDATE_DTM\" type=\"System.DateTime\"/&gt;\n &lt;/ns4:typeInfo&gt;\n&lt;/ns4:modelInfo&gt;\n</code>\n </pre>\n </div>"
  },
  "identifier" : [
    {
      "use" : "official",
      "value" : "OMTKModelInfo"
    }
  ],
  "version" : "0.1.0",
  "title" : "OMTK Model Info",
  "status" : "active",
  "experimental" : true,
  "type" : {
    "coding" : [
      {
        "system" : "http://terminology.hl7.org/CodeSystem/library-type",
        "code" : "model-definition"
      }
    ]
  },
  "date" : "2017-05-05",
  "publisher" : "Centers for Disease Control and Prevention (CDC)",
  "description" : "Opioid Management Terminology Knowledge Base Model Definition for use in implementing CDC Opioid Prescribing Guidelines.",
  "useContext" : [
    {
      "code" : {
        "system" : "http://terminology.hl7.org/CodeSystem/usage-context-type",
        "code" : "focus",
        "display" : "Clinical Focus"
      },
      "valueCodeableConcept" : {
        "coding" : [
          {
            "system" : "http://snomed.info/sct",
            "code" : "182888003",
            "display" : "Medication requested (situation)"
          }
        ]
      }
    },
    {
      "code" : {
        "system" : "http://terminology.hl7.org/CodeSystem/usage-context-type",
        "code" : "focus",
        "display" : "Clinical Focus"
      },
      "valueCodeableConcept" : {
        "coding" : [
          {
            "system" : "http://snomed.info/sct",
            "code" : "82423001",
            "display" : "Chronic pain (finding)"
          }
        ]
      }
    }
  ],
  "jurisdiction" : [
    {
      "coding" : [
        {
          "system" : "urn:iso:std:iso:3166",
          "code" : "US",
          "display" : "United States of America"
        }
      ]
    }
  ],
  "purpose" : "This library defines the Opioid Management Terminology Knowledge Base model",
  "usage" : "This library is used to resolve data elements in the Opioid Management Terminology Knowledge Base model",
  "copyright" : "© CDC 2016+.",
  "topic" : [
    {
      "text" : "Opioid Prescribing"
    }
  ],
  "author" : [
    {
      "name" : "Kensaku Kawamoto, MD, PhD, MHS
"
    },
    {
      "name" : "Bryn Rhodes"
    },
    {
      "name" : "Floyd Eisenberg, MD, MPH"
    },
    {
      "name" : "Robert McClure, MD, MPH"
    }
  ],
  "content" : [
    {
      "contentType" : "application/xml",
      "data" : "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9InllcyI/Pg0KPG5zNDptb2RlbEluZm8gbmFtZT0iT01USyIgdXJsPSJodHRwOi8vb3JnLm9wZW5jZHMvb3Bpb2lkLWNkcyIgdGFyZ2V0UXVhbGlmaWVyPSJjZGMiIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6bnM0PSJ1cm46aGw3LW9yZzplbG0tbW9kZWxpbmZvOnIxIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIg0KICAgICAgICAgICAgICAgdmVyc2lvbj0iMC4xLjAiPg0KICAgIDxuczQ6dHlwZUluZm8geHNpOnR5cGU9Im5zNDpDbGFzc0luZm8iIG5hbWU9Ik9NVEsuTUVEX0RPU0VfRk9STSIgYmFzZVR5cGU9IlN5c3RlbS5BbnkiIHJldHJpZXZhYmxlPSJ0cnVlIj4NCiAgICAgICAgPG5zNDplbGVtZW50IG5hbWU9IkRPU0VfRk9STV9SWENVSSIgdHlwZT0iU3lzdGVtLkNvZGUiLz4NCiAgICAgICAgPG5zNDplbGVtZW50IG5hbWU9IkRPU0VfRk9STV9OQU1FIiB0eXBlPSJTeXN0ZW0uU3RyaW5nIi8+DQogICAgICAgIDxuczQ6ZWxlbWVudCBuYW1lPSJVUERBVEVfRFRNIiB0eXBlPSJTeXN0ZW0uRGF0ZVRpbWUiLz4NCiAgICA8L25zNDp0eXBlSW5mbz4NCiAgICA8bnM0OnR5cGVJbmZvIHhzaTp0eXBlPSJuczQ6Q2xhc3NJbmZvIiBuYW1lPSJPTVRLLk1FRF9ET1NFX0ZPUk1fR1JPVVAiIGJhc2VUeXBlPSJTeXN0ZW0uQW55IiByZXRyaWV2YWJsZT0idHJ1ZSI+DQogICAgICAgIDxuczQ6ZWxlbWVudCBuYW1lPSJET1NFX0ZPUk1fR1JPVVBfUlhDVUkiIHR5cGU9IlN5c3RlbS5Db2RlIi8+DQogICAgICAgIDxuczQ6ZWxlbWVudCBuYW1lPSJET1NFX0ZPUk1fR1JPVVBfTkFNRSIgdHlwZT0iU3lzdGVtLlN0cmluZyIvPg0KICAgICAgICA8bnM0OmVsZW1lbnQgbmFtZT0iVVBEQVRFX0RUTSIgdHlwZT0iU3lzdGVtLkRhdGVUaW1lIi8+DQogICAgPC9uczQ6dHlwZUluZm8+DQogICAgPG5zNDp0eXBlSW5mbyB4c2k6dHlwZT0ibnM0OkNsYXNzSW5mbyIgbmFtZT0iT01USy5NRURfRFJVRyIgYmFzZVR5cGU9IlN5c3RlbS5BbnkiIHJldHJpZXZhYmxlPSJ0cnVlIj4NCiAgICAgICAgPG5zNDplbGVtZW50IG5hbWU9IkRSVUdfUlhDVUkiIHR5cGU9IlN5c3RlbS5Db2RlIi8+DQogICAgICAgIDxuczQ6ZWxlbWVudCBuYW1lPSJEUlVHX1RZUEUiIHR5cGU9IlN5c3RlbS5TdHJpbmciLz4NCiAgICAgICAgPG5zNDplbGVtZW50IG5hbWU9IkRSVUdfTkFNRSIgdHlwZT0iU3lzdGVtLlN0cmluZyIvPg0KICAgICAgICA8bnM0OmVsZW1lbnQgbmFtZT0iRE9TRV9GT1JNX1JYQ1VJIiB0eXBlPSJTeXN0ZW0uQ29kZSIvPg0KICAgICAgICA8bnM0OmVsZW1lbnQgbmFtZT0iVVBEQVRFX0RUTSIgdHlwZT0iU3lzdGVtLkRhdGVUaW1lIi8+DQogICAgPC9uczQ6dHlwZUluZm8+DQogICAgPG5zNDp0eXBlSW5mbyB4c2k6dHlwZT0ibnM0OkNsYXNzSW5mbyIgbmFtZT0iT01USy5NRURfRFJVR19ET1NFX0ZPUk1fR1JPVVAiIGJhc2VUeXBlPSJTeXN0ZW0uQW55IiByZXRyaWV2YWJsZT0idHJ1ZSI+DQogICAgICAgIDxuczQ6ZWxlbWVudCBuYW1lPSJEUlVHX1JYQ1VJIiB0eXBlPSJTeXN0ZW0uQ29kZSIvPg0KICAgICAgICA8bnM0OmVsZW1lbnQgbmFtZT0iRE9TRV9GT1JNX0dST1VQX1JYQ1VJIiB0eXBlPSJTeXN0ZW0uQ29kZSIvPg0KICAgICAgICA8bnM0OmVsZW1lbnQgbmFtZT0iVVBEQVRFX0RUTSIgdHlwZT0iU3lzdGVtLkRhdGVUaW1lIi8+DQogICAgPC9uczQ6dHlwZUluZm8+DQogICAgPG5zNDp0eXBlSW5mbyB4c2k6dHlwZT0ibnM0OkNsYXNzSW5mbyIgbmFtZT0iT01USy5NRURfRFJVR19WQUxVRV9TRVQiIGJhc2VUeXBlPSJTeXN0ZW0uQW55IiByZXRyaWV2YWJsZT0idHJ1ZSI+DQogICAgICAgIDxuczQ6ZWxlbWVudCBuYW1lPSJWQUxVRV9TRVRfSUQiIHR5cGU9IlN5c3RlbS5JbnRlZ2VyIi8+DQogICAgICAgIDxuczQ6ZWxlbWVudCBuYW1lPSJEUlVHX1JYQ1VJIiB0eXBlPSJTeXN0ZW0uQ29kZSIvPg0KICAgIDwvbnM0OnR5cGVJbmZvPg0KICAgIDxuczQ6dHlwZUluZm8geHNpOnR5cGU9Im5zNDpDbGFzc0luZm8iIG5hbWU9Ik9NVEsuTUVEX0RSVUdfV0lUSF9JTkdSRURJRU5UIiBiYXNlVHlwZT0iU3lzdGVtLkFueSIgcmV0cmlldmFibGU9InRydWUiPg0KICAgICAgICA8bnM0OmVsZW1lbnQgbmFtZT0iSU5HUkVESUVOVF9SWENVSSIgdHlwZT0iU3lzdGVtLkNvZGUiLz4NCiAgICAgICAgPG5zNDplbGVtZW50IG5hbWU9IkRSVUdfUlhDVUkiIHR5cGU9IlN5c3RlbS5Db2RlIi8+DQogICAgICAgIDxuczQ6ZWxlbWVudCBuYW1lPSJVUERBVEVfRFRNIiB0eXBlPSJTeXN0ZW0uRGF0ZVRpbWUiLz4NCiAgICA8L25zNDp0eXBlSW5mbz4NCiAgICA8bnM0OnR5cGVJbmZvIHhzaTp0eXBlPSJuczQ6Q2xhc3NJbmZvIiBuYW1lPSJPTVRLLk1FRF9JTkdSRURJRU5UIiBiYXNlVHlwZT0iU3lzdGVtLkFueSIgcmV0cmlldmFibGU9InRydWUiPg0KICAgICAgICA8bnM0OmVsZW1lbnQgbmFtZT0iSU5HUkVESUVOVF9SWENVSSIgdHlwZT0iU3lzdGVtLkNvZGUiLz4NCiAgICAgICAgPG5zNDplbGVtZW50IG5hbWU9IklOR1JFRElFTlRfTkFNRSIgdHlwZT0iU3lzdGVtLlN0cmluZyIvPg0KICAgICAgICA8bnM0OmVsZW1lbnQgbmFtZT0iVVNFX1RPX1BPUFVMQVRFX0RCIiB0eXBlPSJTeXN0ZW0uSW50ZWdlciIvPg0KICAgICAgICA8bnM0OmVsZW1lbnQgbmFtZT0iU0tJUCIgdHlwZT0iU3lzdGVtLkludGVnZXIiLz4NCiAgICAgICAgPG5zNDplbGVtZW50IG5hbWU9IlVQREFURV9EVE0iIHR5cGU9IlN5c3RlbS5EYXRlVGltZSIvPg0KICAgIDwvbnM0OnR5cGVJbmZvPg0KICAgIDxuczQ6dHlwZUluZm8geHNpOnR5cGU9Im5zNDpDbGFzc0luZm8iIG5hbWU9Ik9NVEsuTUVEX0lOR1JFRElFTlRfSU5fQ0xBU1MiIGJhc2VUeXBlPSJTeXN0ZW0uQW55IiByZXRyaWV2YWJsZT0idHJ1ZSI+DQogICAgICAgIDxuczQ6ZWxlbWVudCBuYW1lPSJNRURfQ0xBU1NfSUQiIHR5cGU9IlN5c3RlbS5JbnRlZ2VyIi8+DQogICAgICAgIDxuczQ6ZWxlbWVudCBuYW1lPSJJTkdSRURJRU5UX1JYQ1VJIiB0eXBlPSJTeXN0ZW0uQ29kZSIvPg0KICAgICAgICA8bnM0OmVsZW1lbnQgbmFtZT0iVVBEQVRFX0RUTSIgdHlwZT0iU3lzdGVtLkRhdGVUaW1lIi8+DQogICAgPC9uczQ6dHlwZUluZm8+DQogICAgPG5zNDp0eXBlSW5mbyB4c2k6dHlwZT0ibnM0OkNsYXNzSW5mbyIgbmFtZT0iT01USy5NRURfSU5HUkVESUVOVF9UWVBFIiBiYXNlVHlwZT0iU3lzdGVtLkFueSIgcmV0cmlldmFibGU9InRydWUiPg0KICAgICAgICA8bnM0OmVsZW1lbnQgbmFtZT0iSU5HUkVESUVOVF9SWENVSSIgdHlwZT0iU3lzdGVtLkNvZGUiLz4NCiAgICAgICAgPG5zNDplbGVtZW50IG5hbWU9IklOR1JFRElFTlRfVFlQRSIgdHlwZT0iU3lzdGVtLlN0cmluZyIvPg0KICAgICAgICA8bnM0OmVsZW1lbnQgbmFtZT0iVVBEQVRFX0RUTSIgdHlwZT0iU3lzdGVtLkRhdGVUaW1lIi8+DQogICAgPC9uczQ6dHlwZUluZm8+DQogICAgPG5zNDp0eXBlSW5mbyB4c2k6dHlwZT0ibnM0OkNsYXNzSW5mbyIgbmFtZT0iT01USy5NRURfU0NEQyIgYmFzZVR5cGU9IlN5c3RlbS5BbnkiIHJldHJpZXZhYmxlPSJ0cnVlIj4NCiAgICAgICAgPG5zNDplbGVtZW50IG5hbWU9IlNDRENfUlhDVUkiIHR5cGU9IlN5c3RlbS5Db2RlIi8+DQogICAgICAgIDxuczQ6ZWxlbWVudCBuYW1lPSJTQ0RDX05BTUUiIHR5cGU9IlN5c3RlbS5TdHJpbmciLz4NCiAgICAgICAgPG5zNDplbGVtZW50IG5hbWU9IklOR1JFRElFTlRfUlhDVUkiIHR5cGU9IlN5c3RlbS5Db2RlIi8+DQogICAgICAgIDxuczQ6ZWxlbWVudCBuYW1lPSJTVFJFTkdUSCIgdHlwZT0iU3lzdGVtLlN0cmluZyIvPg0KICAgICAgICA8bnM0OmVsZW1lbnQgbmFtZT0iU1RSRU5HVEhfVkFMVUUiIHR5cGU9IlN5c3RlbS5EZWNpbWFsIi8+DQogICAgICAgIDxuczQ6ZWxlbWVudCBuYW1lPSJTVFJFTkdUSF9VTklUIiB0eXBlPSJTeXN0ZW0uU3RyaW5nIi8+DQogICAgICAgIDxuczQ6ZWxlbWVudCBuYW1lPSJVUERBVEVfRFRNIiB0eXBlPSJTeXN0ZW0uRGF0ZVRpbWUiLz4NCiAgICA8L25zNDp0eXBlSW5mbz4NCiAgICA8bnM0OnR5cGVJbmZvIHhzaTp0eXBlPSJuczQ6Q2xhc3NJbmZvIiBuYW1lPSJPTVRLLk1FRF9TQ0RDX0ZPUl9EUlVHIiBiYXNlVHlwZT0iU3lzdGVtLkFueSIgcmV0cmlldmFibGU9InRydWUiPg0KICAgICAgICA8bnM0OmVsZW1lbnQgbmFtZT0iRFJVR19SWENVSSIgdHlwZT0iU3lzdGVtLkNvZGUiLz4NCiAgICAgICAgPG5zNDplbGVtZW50IG5hbWU9IlNDRENfUlhDVUkiIHR5cGU9IlN5c3RlbS5Db2RlIi8+DQogICAgICAgIDxuczQ6ZWxlbWVudCBuYW1lPSJVUERBVEVfRFRNIiB0eXBlPSJTeXN0ZW0uRGF0ZVRpbWUiLz4NCiAgICA8L25zNDp0eXBlSW5mbz4NCiAgICA8bnM0OnR5cGVJbmZvIHhzaTp0eXBlPSJuczQ6Q2xhc3NJbmZvIiBuYW1lPSJPTVRLLlZBTFVFX1NFVCIgYmFzZVR5cGU9IlN5c3RlbS5BbnkiIHJldHJpZXZhYmxlPSJ0cnVlIj4NCiAgICAgICAgPG5zNDplbGVtZW50IG5hbWU9IlZBTFVFX1NFVF9JRCIgdHlwZT0iU3lzdGVtLkludGVnZXIiLz4NCiAgICAgICAgPG5zNDplbGVtZW50IG5hbWU9IkVYRUNVVEVfT1JERVIiIHR5cGU9IlN5c3RlbS5JbnRlZ2VyIi8+DQogICAgICAgIDxuczQ6ZWxlbWVudCBuYW1lPSJWQUxVRV9TRVRfTkFNRSIgdHlwZT0iU3lzdGVtLlN0cmluZyIvPg0KICAgICAgICA8bnM0OmVsZW1lbnQgbmFtZT0iREVTQ1JJUFRJT04iIHR5cGU9IlN5c3RlbS5TdHJpbmciLz4NCiAgICAgICAgPG5zNDplbGVtZW50IG5hbWU9IlNRTCIgdHlwZT0iU3lzdGVtLlN0cmluZyIvPg0KICAgICAgICA8bnM0OmVsZW1lbnQgbmFtZT0iQ09NTUVOVFMiIHR5cGU9IlN5c3RlbS5TdHJpbmciLz4NCiAgICAgICAgPG5zNDplbGVtZW50IG5hbWU9IlVQREFURV9EVE0iIHR5cGU9IlN5c3RlbS5EYXRlVGltZSIvPg0KICAgIDwvbnM0OnR5cGVJbmZvPg0KPC9uczQ6bW9kZWxJbmZvPg0K",
      "url" : "elm/OMTK-modelinfo-0.1.0.xml"
    }
  ]
}

Library "omtk-logic" Version "1"

Tags: (no tags)  +

This Resource , XML or JSON representation, or the full version history.. provenance for this resource
Updated: by

Participants

Author Kensaku Kawamoto, MD, PhD, MHS
Author Bryn Rhodes
Author Floyd Eisenberg, MD, MPH
Author Robert McClure, MD, MPH

Related Artifacts

Depends On http://example.org/fhir/Library/omtk-modelinfo
Documentation CDC guideline for prescribing opioids for chronic pain https://guidelines.gov/summaries/summary/50153/cdc-guideline-for-prescribing-opioids-for-chronic-pain---united-states-2016#420
Documentation MME Conversion Tables https://www.cdc.gov/drugoverdose/pdf/calculating_total_daily_dose-a.pdf

Contents

text/cql

        library OMTKLogic version '0.1.0'

using OMTK version '0.1.0'

codesystem RxNorm: 'http://www.nlm.nih.gov/research/umls/rxnorm'

//define MED_DOSE_FORMS: [MED_DOSE_FORM]

// Given an RxNorm Code:
// NON_SURGICAL_OPIOID_TO_INCLUDE.DRUG_RXCUI
// MED_DRUG.DRUG_RXCUI
// MED_SCDC_FOR_DRUG.DRUG_RXCUI -> SCDC_RXCUI
// MED_SCDC.SCDC_RXCUI (STRENGTH, STRENGTH_VALUE, STRENGTH_UNIT)
// MED_INGREDIENT_FOR_SCDC.SCDC_RXCUI -> INGREDIENT_RXCUI
// MED_INGREDIENT.INGREDIENT_RXCUI
// MED_INGREDIENT_TYPE.INGREDIENT_RXCUI (INGREDIENT_TYPE = 'NonSurgicalOpioid')

/*
 SQL ->
select D.DRUG_RXCUI, D.DRUG_NAME, DF.DOSE_FORM_NAME, SCDCD.SCDC_RXCUI, SCDC.SCDC_NAME, SCDC.STRENGTH, SCDC.STRENGTH_VALUE, SCDC.STRENGTH_UNIT, I.INGREDIENT_RXCUI, I.INGREDIENT_NAME
  from MED_DRUG D
    join NON_SURGICAL_OPIOID_TO_INCLUDE NSO on D.DRUG_RXCUI = NSO.DRUG_RXCUI
    join MED_SCDC_FOR_DRUG SCDCD on D.DRUG_RXCUI = SCDCD.DRUG_RXCUI
    join MED_SCDC SCDC on SCDCD.SCDC_RXCUI = SCDC.SCDC_RXCUI
    join MED_INGREDIENT_FOR_SCDC SCDCI on SCDC.SCDC_RXCUI = SCDCI.SCDC_RXCUI
    join MED_INGREDIENT I on SCDCI.INGREDIENT_RXCUI = I.INGREDIENT_RXCUI
    join MED_INGREDIENT_TYPE IT on I.INGREDIENT_RXCUI = IT.INGREDIENT_RXCUI
	left join MED_DRUG_DOSE_FORM DDF on D.DRUG_RXCUI = DDF.DRUG_RXCUI
	left join MED_DOSE_FORM DF on DDF.DOSE_FORM_RXCUI = DF.DOSE_FORM_RXCUI
	--Most of the drugs have multiple dose form groups...
	--left join MED_DRUG_DOSE_FORM_GROUP DDFG on D.DRUG_RXCUI = DDFG.DRUG_RXCUI
	--left join MED_DOSE_FORM_GROUP DFG on DDFG.DOSE_FORM_GROUP_RXCUI = DFG.DOSE_FORM_GROUP_RXCUI
  where D.DRUG_RXCUI = @RxNormCode // 197696
    and IT.INGREDIENT_TYPE = 'NonSurgicalOpioid'
*/

/*
  CQL, assuming translation to SQL:

  from
    [MED_DRUG: rxNormCode] D,
    [NON_SURGICAL_OPIOID_TO_INCLUDE] NSO,
    [MED_SCDC_FOR_DRUG] SCDCD,
    [MED_SCDC] SCDC,
    [MED_INGREDIENT_FOR_SCDC] SCDCI,
    [MED_INGREDIENT] I,
    [MED_INGREDIENT_TYPE] IT,
    [MED_DRUG_DOSE_FORM] DDF,
    [MED_DOSE_FORM] DF
  where D.DRUG_RXCUI = NSO.DRUG_RXCUI
    and D.DRUG_RXCUI = SCDCD.DRUG_RXCUI
    and SCDCD.SCDC_RXCUI = SCDC.SCDC_RXCUI
    and SCDC.SCDC_RXCUI = SCDCI.SCDC_RXCUI
    and SDCDI.INGREDIENT_RXCUI = I.INGREDIENT_RXCUI
    and I.INGREDIENT_RXCUI = IT.INGREDIENT_RXCUI
    and D.DRUG_RXCUI = DDF.DRUG_RXCUI
    and DDF.DOSE_FORM_RXCUI = DF.DOSE_FORM_RXCUI
    and IT.INGREDIENT_TYPE = 'NonSurgicalOpioid'
*/

/*
An engine with a naive implementation for multi-source queries would perform
pretty horribly here, so rewrite it using "syntactic optimization" :)
*/

/*
  Normalizes the input units to UCUM units
  
  Note guidance for UCUM presentation of medication units from SNOMED here:
  https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&uact=8&ved=0ahUKEwjU3vLpicPTAhWFMGMKHRpOBUAQFggiMAA&url=https%3A%2F%2Fconfluence.ihtsdotools.org%2Fdownload%2Fattachments%2F17859188%2FExpressing%2520Units%2520of%2520Measure%2520for%2520Medicinal%2520Products.doc%3Fapi%3Dv2&usg=AFQjCNE5sboicqvJDUyXJ2im8VzBpgHE8A
  
  The values listed here are the only ones currently present in the OMTK data
  
  Based on the HL7 UCUM subset here:
  http://download.hl7.de/documents/ucum/ucumdata.html
*/
define function ToUCUM(unit String):
  case unit
    when 'MG' then 'mg'
    when 'MG/ACTUAT' then 'mg/{actuat}'
    when 'MG/HR' then 'mg/h'
    when 'MG/ML' then 'mg/mL'
    else 'unknown{' + unit + '}' // Should probably be an error
  end

/*
  Calculates daily frequency given frequency within a period
*/
define function ToDaily(frequency Integer, period System.Quantity):
  case period.unit
    when 'h' then frequency * (24.0 / period.value)
    when 'min' then frequency * (24.0 / period.value) * 60
    when 's' then frequency * (24.0 / period.value) * 60 * 60
    when 'd' then frequency * (24.0 / period.value) / 24
    when 'wk' then frequency * (24.0 / period.value) / (24 * 7)
    when 'mo' then frequency * (24.0 / period.value) / (24 * 30) // assuming 30 days in month
    when 'a' then frequency * (24.0 / period.value) / (24 * 365) // assuming 365 days in year
    else null
  end

/*
  Returns true if the given dose form is a patch (transdermal system)
*/
define function IsPatch(doseFormCode Code):
  ToInteger(doseFormCode.code) = 316987

/*
  Returns the conversion factor for the given ingredient

Opioid (strength in mg except where noted)	MME Conversion Factor*
Buprenorphine, transdermal patch (MCG/HR)	12.6
Buprenorphine, tablet or film	30
Buprenorphine, film (MCG)	0.03
Butorphanol	7
Codeine	0.15
Dihydrocodeine	0.25
Fentanyl, buccal/SL tabet or lozenge/troche (MCG)	0.13
Fentanyl, film or oral spray (MCG)	0.18
Fentanyl, nasal spray (MCG)	0.16
Fentanyl, transdermal patch (MCG/HR)	7.2
Hydrocodone	1
Hydromorphone	4
Levomethadyl acetate	8
Levorphanol tartrate	11
Meperidine 	0.1
Methadone	3
  1-20 mg/d 4
  21-40 mg/d 8
  41-60 mg/d 10
  61-80 mg/d 12
Morphine	1
Opium	1 // NOTE: Not present as an ingredient in the RxNorm data
Oxycodone	1.5
Oxymorphone	3
Pentazocine	0.37
Tapentadol	0.4
Tramadol	0.1

*/
define function GetConversionFactor(ingredientCode Code, dailyDose Quantity, doseFormCode Code):
  case ToInteger(ingredientCode.code)
    when 161 then 0 //	Acetaminophen
    when 1191 then 0 //	Aspirin
    when 1223 then 0 //	Atropine
    when 1767 then 0 //	Brompheniramine
    when 1819 then ( //	Buprenorphine
      case 
        when ToInteger(doseFormCode.code) = 316987 then 12.6 // Transdermal system
        else 30 // Tablet or Film (or Film in MCG)
      end
    ) 
    when 1841 then 7 //	Butorphanol
    when 1886 then 0 //	Caffeine
    when 2101 then 0 //	Carisoprodol
    when 2354 then 0 //	chlorcyclizine
    when 2400 then 0 //	Chlorpheniramine
    when 2670 then 0.15 //	Codeine
    when 3423 then 4 //	Hydromorphone
    when 3498 then 0 //	Diphenhydramine
    when 4337 then ( //	Fentanyl
      case
        when ToInteger(doseFormCode.code) in { 970789, 317007, 316992 } then 0.13 // Buccal Tablet, Sublingual Tablet, Oral Lozenge
        when ToInteger(doseFormCode.code) = 346163 then 0.18 // Buccal Film
        when ToInteger(doseFormCode.code) in { 126542, 346163 } then 0.16 // Nasal Spray, Mucosal Spray
        when IsPatch(doseFormCode) then 7.2 // Transdermal system
        else 1000 // Really ought to be an error because it represents a previously unencountered dose form....
      end
    )
    when 5032 then 0 //	Guaifenesin
    when 5489 then 1 //	Hydrocodone
    when 5640 then 0 //	Ibuprofen
    when 6102 then 0 //	Kaolin
    when 6378 then 11 //	Levorphanol (NOTE: Given as Levorphanol tartrate in the CDC conversion table)
    when 6754 then 0.1 //	Meperidine
    when 6813 then ( //	Methadone
      case
        when dailyDose.value between 1 and 20 then 4
        when dailyDose.value between 21 and 40 then 8
        when dailyDose.value between 41 and 60 then 10
        when dailyDose.value >= 61 then 12
        else 1000 // Really ought to be an error because it represents an unexpected dose range...
      end
    )
    when 7052 then 1 //	Morphine
    when 7242 then 0 //	Naloxone
    when 7243 then 0 //	Naltrexone
    when 7804 then 1.5 //	Oxycodone
    when 7814 then 3 //	Oxymorphone
    when 8001 then 0.37 //	Pentazocine
    when 8163 then 0 //	Phenylephrine
    when 8175 then 0 //	Phenylpropanolamine
    when 8745 then 0 //	Promethazine
    when 8896 then 0 //	Pseudoephedrine
    when 9009 then 0 //	Pyrilamine
    when 10689 then 0.1 //	Tramadol
    when 10849 then 0 //	Triprolidine
    when 19759 then 0 //	bromodiphenhydramine
    when 19860 then 0 //	butalbital
    when 22696 then 0 //	dexbrompheniramine
    when 22697 then 0 //	dexchlorpheniramine
    when 23088 then 0.25 //	dihydrocodeine
    when 27084 then 0 //	homatropine
    when 35780 then 0 //	ropivacaine
    when 237005 then 8 //	Levomethadyl (NOTE: given as Levomethadyl acetate in the CDC conversion table)
    when 636827 then 0 //	guaiacolsulfonate
    when 787390 then 0.4 //	tapentadol
    else 0
  end

define function EnsureMicrogramQuantity(strength Quantity):
  if strength.value < 0.1 and (PositionOf('mg', strength.unit) = 0) then
    Quantity {
      value: strength.value * 1000,
      unit: 'mcg' + Substring(strength.unit, 2)
    }
  else
    strength

/*
  Returns the non-surgical opioid ingredients and their strengths that
  make up the drug identified by the given rxNormCode as a list of tuples:

  List<Tuple {
    rxNormCode Code,
    doseFormCode Code,
    doseFormName String,
    ingredientCode Code,
    ingredientName String,
    strength Quantity
  }>
*/
define function GetIngredients(rxNormCode Code):
  (
    [MED_SCDC_FOR_DRUG: DRUG_RXCUI in rxNormCode] SD
      where exists ([MED_DRUG_VALUE_SET: DRUG_RXCUI in SD.DRUG_RXCUI])
      return {
        rxNormCode: rxNormCode,
        component: SingletonFrom([MED_SCDC: SCDC_RXCUI in SD.SCDC_RXCUI]),
        ingredientCode: SingletonFrom([MED_SCDC: SCDC_RXCUI in SD.SCDC_RXCUI]).INGREDIENT_RXCUI,
        doseFormCode: SingletonFrom([MED_DRUG: DRUG_RXCUI in SD.DRUG_RXCUI]).DOSE_FORM_RXCUI // Could potentially look this up only once...
      }
  ) C
    let
      ingredient: SingletonFrom([MED_INGREDIENT: INGREDIENT_RXCUI in C.ingredientCode]),
      doseForm: SingletonFrom([MED_DOSE_FORM: DOSE_FORM_RXCUI in C.doseFormCode])
    where exists (
      [MED_INGREDIENT_TYPE: INGREDIENT_RXCUI in C.ingredientCode] IT
        where IT.INGREDIENT_TYPE = 'Opioid_NonSurgical'
    )
    return {
      rxNormCode: rxNormCode,
      doseFormCode: C.doseFormCode,
      doseFormName: doseForm.DOSE_FORM_NAME,
      ingredientCode: C.ingredientCode,
      ingredientName: ingredient.INGREDIENT_NAME,
      strength:
        EnsureMicrogramQuantity(
          Quantity {
            value: C.component.STRENGTH_VALUE,
            unit: ToUCUM(C.component.STRENGTH_UNIT)
          }
        )
    }

/*
  Calculates daily dose for a specific ingredient based on the ingredient strength, dose form, dose quantity, and daily frequency
*/
define function GetDailyDose(ingredientCode Code, strength Quantity, doseFormCode Code, doseQuantity Quantity, dosesPerDay Decimal):
  case
	  // if patch --> daily dose = dose value (e.g, number patches with doseQuantity unit = "patch") * per-hour strength
    when IsPatch(doseFormCode) then
      // buprenorphine or fentanyl patch
      if ToInteger(ingredientCode.code) in { 1819, 4337 } then
        Quantity { value: dosesPerDay * doseQuantity.value * strength.value, unit: strength.unit }
      else
        null

    // if dose unit in actual mass units (mg or mcg -- when it's a single med) --> daily dose = numTimesPerDay * dose
    when doseQuantity.unit in { 'mg', 'mcg' } then
      Quantity { value: dosesPerDay * doseQuantity.value, unit: doseQuantity.unit }

    // if doseQuantity is in actual volume units (mL) --> daily dose = numTimesPerDay * dose * strength
    when doseQuantity.unit = 'mL' and (PositionOf('/mL', strength.unit) = Length(strength.unit) - 3) then
      Quantity { value: dosesPerDay * doseQuantity.value * strength.value, unit: Substring(strength.unit, 0, PositionOf('/', strength.unit)) }

		// if doseQuantity is not in actual units (e.g., 1 tab, 1 spray -- when it's a combo med with a unit of tablet, or it's mg/actuat) --> daily dose = numTimesPerDay * dose value * strength value
    else
      Quantity { value: dosesPerDay * doseQuantity.value * strength.value, unit: Substring(strength.unit, 0, PositionOf('/', strength.unit)) }
  end
  
define function GetMedicationName(rxNormCode Code):
  SingletonFrom([MED_DRUG: DRUG_RXCUI in rxNormCode]).DRUG_NAME

/*
  Builds a description for the daily dose for an ingredient
*/
define function GetDailyDoseDescription(ingredientCode Code, ingredientName String, strength Quantity, doseFormCode Code, doseFormName String, doseQuantity Quantity, dosesPerDay Decimal, dailyDose Quantity):
  case
    // if patch
    when IsPatch(doseFormCode) then
      // buprenorphine or fentanyl patch
      if ToInteger(ingredientCode.code) in { 1819, 4337 } then
        ingredientName + ' patch: ' + ToString(doseQuantity.value) + ' * ' + ToString(strength) + ' = ' + ToString(dailyDose)
      else
        null

    // if dose unit in actual mass units (mg or mcg -- when it's a single med)
    when doseQuantity.unit in { 'mg', 'mcg' } then
      ingredientName + ' ' + doseFormName + ': ' + ToString(dosesPerDay) + '/d * ' + ToString(doseQuantity) + ' = ' + ToString(dailyDose)

    // if doseQuantity in actual volume units (mL) or not in actual units (e.g. 1 tab, 1 spray)
    else
      ingredientName + ' ' + doseFormName + ': ' + ToString(dosesPerDay) + '/d * ' + ToString(doseQuantity) + ' * ' + ToString(strength) + ' = ' + ToString(dailyDose)
  end

/*
  Calculates MMEs for the given input prescription information and returns it
  as a list of tuples:

  List<Tuple {
    rxNormCode Code,
    doseFormCode Code,
    doseQuantity Quantity,
    dosesPerDay Decimal,
    ingredientCode Code,
    ingredientName String,
    strength Quantity,
    dailyDose Quantity,
    dailyDoseDescription String,
    conversionFactor Decimal,
    mme Quantity
  }>
*/
define function CalculateMMEs(medications List<Tuple { rxNormCode Code, doseQuantity Quantity, dosesPerDay Decimal }>):
  Flatten(
    medications M
      let Ingredients: GetIngredients(M.rxNormCode)
      return
        Ingredients I
          let
            adjustedDoseQuantity: EnsureMicrogramQuantity(M.doseQuantity),
            dailyDose: GetDailyDose(I.ingredientCode, I.strength, I.doseFormCode, adjustedDoseQuantity, M.dosesPerDay),
            factor: GetConversionFactor(I.ingredientCode, dailyDose, I.doseFormCode)
          return {
            rxNormCode: M.rxNormCode,
            doseFormCode: I.doseFormCode,
            doseQuantity: adjustedDoseQuantity,
            dosesPerDay: M.dosesPerDay,
            ingredientCode: I.ingredientCode,
            ingredientName: I.ingredientName,
            strength: I.strength,
            dailyDose: dailyDose,
            dailyDoseDescription: GetDailyDoseDescription(I.ingredientCode, I.ingredientName, I.strength, I.doseFormCode, I.doseFormName, adjustedDoseQuantity, M.dosesPerDay, dailyDose),
            conversionFactor: factor,
            mme: Quantity {
              value: dailyDose.value * factor,
              unit: dailyDose.unit + '/d'
            }
          }
  )

define TestCalculateMMEs:
  CalculateMMEs({ { rxNormCode: Code '388508' from RxNorm, doseQuantity: Quantity { value: 1, unit: 'patch' }, dosesPerDay: 0.33 } })
      

Content not shown - ( application/elm+xml, size = 183Kb)


{
  "resourceType" : "Library",
  "id" : "omtk-logic",
  "meta" : {
    "versionId" : "1",
    "lastUpdated" : "2021-05-24T10:50:20.235Z",
    "tag" : [
      {
        "system" : "http://terminology.hl7.org/CodeSystem/v3-ActReason",
        "code" : "HTEST",
        "display" : "test health data"
      }
    ]
  },
  "text" : {
    "status" : "generated",
    "div" : "<div xmlns=\"http://www.w3.org/1999/xhtml\">\n <h2>Participants</h2>\n <table class=\"grid\">\n <tr>\n <td>Author</td>\n <td>Kensaku Kawamoto, MD, PhD, MHS</td>\n </tr>\n <tr>\n <td>Author</td>\n <td>Bryn Rhodes</td>\n </tr>\n <tr>\n <td>Author</td>\n <td>Floyd Eisenberg, MD, MPH</td>\n </tr>\n <tr>\n <td>Author</td>\n <td>Robert McClure, MD, MPH</td>\n </tr>\n </table>\n <h2>Related Artifacts</h2>\n <table class=\"grid\">\n <tr>\n <td>Depends On</td>\n <td/>\n <td>\n <code>http://example.org/fhir/Library/omtk-modelinfo</code>\n </td>\n </tr>\n <tr>\n <td>Documentation</td>\n <td>CDC guideline for prescribing opioids for chronic pain</td>\n <td>https://guidelines.gov/summaries/summary/50153/cdc-guideline-for-prescribing-opioids-for-chronic-pain---united-states-2016#420</td>\n </tr>\n <tr>\n <td>Documentation</td>\n <td>MME Conversion Tables</td>\n <td>https://www.cdc.gov/drugoverdose/pdf/calculating_total_daily_dose-a.pdf</td>\n </tr>\n </table>\n <h2>Contents</h2>\n <p>\n <code>text/cql</code>\n </p>\n <pre>\n <code class=\"language-sql\">library OMTKLogic version '0.1.0'\n\nusing OMTK version '0.1.0'\n\ncodesystem RxNorm: 'http://www.nlm.nih.gov/research/umls/rxnorm'\n\n//define MED_DOSE_FORMS: [MED_DOSE_FORM]\n\n// Given an RxNorm Code:\n// NON_SURGICAL_OPIOID_TO_INCLUDE.DRUG_RXCUI\n// MED_DRUG.DRUG_RXCUI\n// MED_SCDC_FOR_DRUG.DRUG_RXCUI -&gt; SCDC_RXCUI\n// MED_SCDC.SCDC_RXCUI (STRENGTH, STRENGTH_VALUE, STRENGTH_UNIT)\n// MED_INGREDIENT_FOR_SCDC.SCDC_RXCUI -&gt; INGREDIENT_RXCUI\n// MED_INGREDIENT.INGREDIENT_RXCUI\n// MED_INGREDIENT_TYPE.INGREDIENT_RXCUI (INGREDIENT_TYPE = 'NonSurgicalOpioid')\n\n/*\n SQL -&gt;\nselect D.DRUG_RXCUI, D.DRUG_NAME, DF.DOSE_FORM_NAME, SCDCD.SCDC_RXCUI, SCDC.SCDC_NAME, SCDC.STRENGTH, SCDC.STRENGTH_VALUE, SCDC.STRENGTH_UNIT, I.INGREDIENT_RXCUI, I.INGREDIENT_NAME\n from MED_DRUG D\n join NON_SURGICAL_OPIOID_TO_INCLUDE NSO on D.DRUG_RXCUI = NSO.DRUG_RXCUI\n join MED_SCDC_FOR_DRUG SCDCD on D.DRUG_RXCUI = SCDCD.DRUG_RXCUI\n join MED_SCDC SCDC on SCDCD.SCDC_RXCUI = SCDC.SCDC_RXCUI\n join MED_INGREDIENT_FOR_SCDC SCDCI on SCDC.SCDC_RXCUI = SCDCI.SCDC_RXCUI\n join MED_INGREDIENT I on SCDCI.INGREDIENT_RXCUI = I.INGREDIENT_RXCUI\n join MED_INGREDIENT_TYPE IT on I.INGREDIENT_RXCUI = IT.INGREDIENT_RXCUI\n&#x09;left join MED_DRUG_DOSE_FORM DDF on D.DRUG_RXCUI = DDF.DRUG_RXCUI\n&#x09;left join MED_DOSE_FORM DF on DDF.DOSE_FORM_RXCUI = DF.DOSE_FORM_RXCUI\n&#x09;--Most of the drugs have multiple dose form groups...\n&#x09;--left join MED_DRUG_DOSE_FORM_GROUP DDFG on D.DRUG_RXCUI = DDFG.DRUG_RXCUI\n&#x09;--left join MED_DOSE_FORM_GROUP DFG on DDFG.DOSE_FORM_GROUP_RXCUI = DFG.DOSE_FORM_GROUP_RXCUI\n where D.DRUG_RXCUI = @RxNormCode // 197696\n and IT.INGREDIENT_TYPE = 'NonSurgicalOpioid'\n*/\n\n/*\n CQL, assuming translation to SQL:\n\n from\n [MED_DRUG: rxNormCode] D,\n [NON_SURGICAL_OPIOID_TO_INCLUDE] NSO,\n [MED_SCDC_FOR_DRUG] SCDCD,\n [MED_SCDC] SCDC,\n [MED_INGREDIENT_FOR_SCDC] SCDCI,\n [MED_INGREDIENT] I,\n [MED_INGREDIENT_TYPE] IT,\n [MED_DRUG_DOSE_FORM] DDF,\n [MED_DOSE_FORM] DF\n where D.DRUG_RXCUI = NSO.DRUG_RXCUI\n and D.DRUG_RXCUI = SCDCD.DRUG_RXCUI\n and SCDCD.SCDC_RXCUI = SCDC.SCDC_RXCUI\n and SCDC.SCDC_RXCUI = SCDCI.SCDC_RXCUI\n and SDCDI.INGREDIENT_RXCUI = I.INGREDIENT_RXCUI\n and I.INGREDIENT_RXCUI = IT.INGREDIENT_RXCUI\n and D.DRUG_RXCUI = DDF.DRUG_RXCUI\n and DDF.DOSE_FORM_RXCUI = DF.DOSE_FORM_RXCUI\n and IT.INGREDIENT_TYPE = 'NonSurgicalOpioid'\n*/\n\n/*\nAn engine with a naive implementation for multi-source queries would perform\npretty horribly here, so rewrite it using \"syntactic optimization\" :)\n*/\n\n/*\n Normalizes the input units to UCUM units\n \n Note guidance for UCUM presentation of medication units from SNOMED here:\n https://www.google.com/url?sa=t&amp;rct=j&amp;q=&amp;esrc=s&amp;source=web&amp;cd=1&amp;cad=rja&amp;uact=8&amp;ved=0ahUKEwjU3vLpicPTAhWFMGMKHRpOBUAQFggiMAA&amp;url=https%3A%2F%2Fconfluence.ihtsdotools.org%2Fdownload%2Fattachments%2F17859188%2FExpressing%2520Units%2520of%2520Measure%2520for%2520Medicinal%2520Products.doc%3Fapi%3Dv2&amp;usg=AFQjCNE5sboicqvJDUyXJ2im8VzBpgHE8A\n \n The values listed here are the only ones currently present in the OMTK data\n \n Based on the HL7 UCUM subset here:\n http://download.hl7.de/documents/ucum/ucumdata.html\n*/\ndefine function ToUCUM(unit String):\n case unit\n when 'MG' then 'mg'\n when 'MG/ACTUAT' then 'mg/{actuat}'\n when 'MG/HR' then 'mg/h'\n when 'MG/ML' then 'mg/mL'\n else 'unknown{' + unit + '}' // Should probably be an error\n end\n\n/*\n Calculates daily frequency given frequency within a period\n*/\ndefine function ToDaily(frequency Integer, period System.Quantity):\n case period.unit\n when 'h' then frequency * (24.0 / period.value)\n when 'min' then frequency * (24.0 / period.value) * 60\n when 's' then frequency * (24.0 / period.value) * 60 * 60\n when 'd' then frequency * (24.0 / period.value) / 24\n when 'wk' then frequency * (24.0 / period.value) / (24 * 7)\n when 'mo' then frequency * (24.0 / period.value) / (24 * 30) // assuming 30 days in month\n when 'a' then frequency * (24.0 / period.value) / (24 * 365) // assuming 365 days in year\n else null\n end\n\n/*\n Returns true if the given dose form is a patch (transdermal system)\n*/\ndefine function IsPatch(doseFormCode Code):\n ToInteger(doseFormCode.code) = 316987\n\n/*\n Returns the conversion factor for the given ingredient\n\nOpioid (strength in mg except where noted)&#x09;MME Conversion Factor*\nBuprenorphine, transdermal patch (MCG/HR)&#x09;12.6\nBuprenorphine, tablet or film&#x09;30\nBuprenorphine, film (MCG)&#x09;0.03\nButorphanol&#x09;7\nCodeine&#x09;0.15\nDihydrocodeine&#x09;0.25\nFentanyl, buccal/SL tabet or lozenge/troche (MCG)&#x09;0.13\nFentanyl, film or oral spray (MCG)&#x09;0.18\nFentanyl, nasal spray (MCG)&#x09;0.16\nFentanyl, transdermal patch (MCG/HR)&#x09;7.2\nHydrocodone&#x09;1\nHydromorphone&#x09;4\nLevomethadyl acetate&#x09;8\nLevorphanol tartrate&#x09;11\nMeperidine &#x09;0.1\nMethadone&#x09;3\n 1-20 mg/d 4\n 21-40 mg/d 8\n 41-60 mg/d 10\n 61-80 mg/d 12\nMorphine&#x09;1\nOpium&#x09;1 // NOTE: Not present as an ingredient in the RxNorm data\nOxycodone&#x09;1.5\nOxymorphone&#x09;3\nPentazocine&#x09;0.37\nTapentadol&#x09;0.4\nTramadol&#x09;0.1\n\n*/\ndefine function GetConversionFactor(ingredientCode Code, dailyDose Quantity, doseFormCode Code):\n case ToInteger(ingredientCode.code)\n when 161 then 0 //&#x09;Acetaminophen\n when 1191 then 0 //&#x09;Aspirin\n when 1223 then 0 //&#x09;Atropine\n when 1767 then 0 //&#x09;Brompheniramine\n when 1819 then ( //&#x09;Buprenorphine\n case \n when ToInteger(doseFormCode.code) = 316987 then 12.6 // Transdermal system\n else 30 // Tablet or Film (or Film in MCG)\n end\n ) \n when 1841 then 7 //&#x09;Butorphanol\n when 1886 then 0 //&#x09;Caffeine\n when 2101 then 0 //&#x09;Carisoprodol\n when 2354 then 0 //&#x09;chlorcyclizine\n when 2400 then 0 //&#x09;Chlorpheniramine\n when 2670 then 0.15 //&#x09;Codeine\n when 3423 then 4 //&#x09;Hydromorphone\n when 3498 then 0 //&#x09;Diphenhydramine\n when 4337 then ( //&#x09;Fentanyl\n case\n when ToInteger(doseFormCode.code) in { 970789, 317007, 316992 } then 0.13 // Buccal Tablet, Sublingual Tablet, Oral Lozenge\n when ToInteger(doseFormCode.code) = 346163 then 0.18 // Buccal Film\n when ToInteger(doseFormCode.code) in { 126542, 346163 } then 0.16 // Nasal Spray, Mucosal Spray\n when IsPatch(doseFormCode) then 7.2 // Transdermal system\n else 1000 // Really ought to be an error because it represents a previously unencountered dose form....\n end\n )\n when 5032 then 0 //&#x09;Guaifenesin\n when 5489 then 1 //&#x09;Hydrocodone\n when 5640 then 0 //&#x09;Ibuprofen\n when 6102 then 0 //&#x09;Kaolin\n when 6378 then 11 //&#x09;Levorphanol (NOTE: Given as Levorphanol tartrate in the CDC conversion table)\n when 6754 then 0.1 //&#x09;Meperidine\n when 6813 then ( //&#x09;Methadone\n case\n when dailyDose.value between 1 and 20 then 4\n when dailyDose.value between 21 and 40 then 8\n when dailyDose.value between 41 and 60 then 10\n when dailyDose.value &gt;= 61 then 12\n else 1000 // Really ought to be an error because it represents an unexpected dose range...\n end\n )\n when 7052 then 1 //&#x09;Morphine\n when 7242 then 0 //&#x09;Naloxone\n when 7243 then 0 //&#x09;Naltrexone\n when 7804 then 1.5 //&#x09;Oxycodone\n when 7814 then 3 //&#x09;Oxymorphone\n when 8001 then 0.37 //&#x09;Pentazocine\n when 8163 then 0 //&#x09;Phenylephrine\n when 8175 then 0 //&#x09;Phenylpropanolamine\n when 8745 then 0 //&#x09;Promethazine\n when 8896 then 0 //&#x09;Pseudoephedrine\n when 9009 then 0 //&#x09;Pyrilamine\n when 10689 then 0.1 //&#x09;Tramadol\n when 10849 then 0 //&#x09;Triprolidine\n when 19759 then 0 //&#x09;bromodiphenhydramine\n when 19860 then 0 //&#x09;butalbital\n when 22696 then 0 //&#x09;dexbrompheniramine\n when 22697 then 0 //&#x09;dexchlorpheniramine\n when 23088 then 0.25 //&#x09;dihydrocodeine\n when 27084 then 0 //&#x09;homatropine\n when 35780 then 0 //&#x09;ropivacaine\n when 237005 then 8 //&#x09;Levomethadyl (NOTE: given as Levomethadyl acetate in the CDC conversion table)\n when 636827 then 0 //&#x09;guaiacolsulfonate\n when 787390 then 0.4 //&#x09;tapentadol\n else 0\n end\n\ndefine function EnsureMicrogramQuantity(strength Quantity):\n if strength.value &lt; 0.1 and (PositionOf('mg', strength.unit) = 0) then\n Quantity {\n value: strength.value * 1000,\n unit: 'mcg' + Substring(strength.unit, 2)\n }\n else\n strength\n\n/*\n Returns the non-surgical opioid ingredients and their strengths that\n make up the drug identified by the given rxNormCode as a list of tuples:\n\n List&lt;Tuple {\n rxNormCode Code,\n doseFormCode Code,\n doseFormName String,\n ingredientCode Code,\n ingredientName String,\n strength Quantity\n }&gt;\n*/\ndefine function GetIngredients(rxNormCode Code):\n (\n [MED_SCDC_FOR_DRUG: DRUG_RXCUI in rxNormCode] SD\n where exists ([MED_DRUG_VALUE_SET: DRUG_RXCUI in SD.DRUG_RXCUI])\n return {\n rxNormCode: rxNormCode,\n component: SingletonFrom([MED_SCDC: SCDC_RXCUI in SD.SCDC_RXCUI]),\n ingredientCode: SingletonFrom([MED_SCDC: SCDC_RXCUI in SD.SCDC_RXCUI]).INGREDIENT_RXCUI,\n doseFormCode: SingletonFrom([MED_DRUG: DRUG_RXCUI in SD.DRUG_RXCUI]).DOSE_FORM_RXCUI // Could potentially look this up only once...\n }\n ) C\n let\n ingredient: SingletonFrom([MED_INGREDIENT: INGREDIENT_RXCUI in C.ingredientCode]),\n doseForm: SingletonFrom([MED_DOSE_FORM: DOSE_FORM_RXCUI in C.doseFormCode])\n where exists (\n [MED_INGREDIENT_TYPE: INGREDIENT_RXCUI in C.ingredientCode] IT\n where IT.INGREDIENT_TYPE = 'Opioid_NonSurgical'\n )\n return {\n rxNormCode: rxNormCode,\n doseFormCode: C.doseFormCode,\n doseFormName: doseForm.DOSE_FORM_NAME,\n ingredientCode: C.ingredientCode,\n ingredientName: ingredient.INGREDIENT_NAME,\n strength:\n EnsureMicrogramQuantity(\n Quantity {\n value: C.component.STRENGTH_VALUE,\n unit: ToUCUM(C.component.STRENGTH_UNIT)\n }\n )\n }\n\n/*\n Calculates daily dose for a specific ingredient based on the ingredient strength, dose form, dose quantity, and daily frequency\n*/\ndefine function GetDailyDose(ingredientCode Code, strength Quantity, doseFormCode Code, doseQuantity Quantity, dosesPerDay Decimal):\n case\n&#x09; // if patch --&gt; daily dose = dose value (e.g, number patches with doseQuantity unit = \"patch\") * per-hour strength\n when IsPatch(doseFormCode) then\n // buprenorphine or fentanyl patch\n if ToInteger(ingredientCode.code) in { 1819, 4337 } then\n Quantity { value: dosesPerDay * doseQuantity.value * strength.value, unit: strength.unit }\n else\n null\n\n // if dose unit in actual mass units (mg or mcg -- when it's a single med) --&gt; daily dose = numTimesPerDay * dose\n when doseQuantity.unit in { 'mg', 'mcg' } then\n Quantity { value: dosesPerDay * doseQuantity.value, unit: doseQuantity.unit }\n\n // if doseQuantity is in actual volume units (mL) --&gt; daily dose = numTimesPerDay * dose * strength\n when doseQuantity.unit = 'mL' and (PositionOf('/mL', strength.unit) = Length(strength.unit) - 3) then\n Quantity { value: dosesPerDay * doseQuantity.value * strength.value, unit: Substring(strength.unit, 0, PositionOf('/', strength.unit)) }\n\n&#x09;&#x09;// if doseQuantity is not in actual units (e.g., 1 tab, 1 spray -- when it's a combo med with a unit of tablet, or it's mg/actuat) --&gt; daily dose = numTimesPerDay * dose value * strength value\n else\n Quantity { value: dosesPerDay * doseQuantity.value * strength.value, unit: Substring(strength.unit, 0, PositionOf('/', strength.unit)) }\n end\n \ndefine function GetMedicationName(rxNormCode Code):\n SingletonFrom([MED_DRUG: DRUG_RXCUI in rxNormCode]).DRUG_NAME\n\n/*\n Builds a description for the daily dose for an ingredient\n*/\ndefine function GetDailyDoseDescription(ingredientCode Code, ingredientName String, strength Quantity, doseFormCode Code, doseFormName String, doseQuantity Quantity, dosesPerDay Decimal, dailyDose Quantity):\n case\n // if patch\n when IsPatch(doseFormCode) then\n // buprenorphine or fentanyl patch\n if ToInteger(ingredientCode.code) in { 1819, 4337 } then\n ingredientName + ' patch: ' + ToString(doseQuantity.value) + ' * ' + ToString(strength) + ' = ' + ToString(dailyDose)\n else\n null\n\n // if dose unit in actual mass units (mg or mcg -- when it's a single med)\n when doseQuantity.unit in { 'mg', 'mcg' } then\n ingredientName + ' ' + doseFormName + ': ' + ToString(dosesPerDay) + '/d * ' + ToString(doseQuantity) + ' = ' + ToString(dailyDose)\n\n // if doseQuantity in actual volume units (mL) or not in actual units (e.g. 1 tab, 1 spray)\n else\n ingredientName + ' ' + doseFormName + ': ' + ToString(dosesPerDay) + '/d * ' + ToString(doseQuantity) + ' * ' + ToString(strength) + ' = ' + ToString(dailyDose)\n end\n\n/*\n Calculates MMEs for the given input prescription information and returns it\n as a list of tuples:\n\n List&lt;Tuple {\n rxNormCode Code,\n doseFormCode Code,\n doseQuantity Quantity,\n dosesPerDay Decimal,\n ingredientCode Code,\n ingredientName String,\n strength Quantity,\n dailyDose Quantity,\n dailyDoseDescription String,\n conversionFactor Decimal,\n mme Quantity\n }&gt;\n*/\ndefine function CalculateMMEs(medications List&lt;Tuple { rxNormCode Code, doseQuantity Quantity, dosesPerDay Decimal }&gt;):\n Flatten(\n medications M\n let Ingredients: GetIngredients(M.rxNormCode)\n return\n Ingredients I\n let\n adjustedDoseQuantity: EnsureMicrogramQuantity(M.doseQuantity),\n dailyDose: GetDailyDose(I.ingredientCode, I.strength, I.doseFormCode, adjustedDoseQuantity, M.dosesPerDay),\n factor: GetConversionFactor(I.ingredientCode, dailyDose, I.doseFormCode)\n return {\n rxNormCode: M.rxNormCode,\n doseFormCode: I.doseFormCode,\n doseQuantity: adjustedDoseQuantity,\n dosesPerDay: M.dosesPerDay,\n ingredientCode: I.ingredientCode,\n ingredientName: I.ingredientName,\n strength: I.strength,\n dailyDose: dailyDose,\n dailyDoseDescription: GetDailyDoseDescription(I.ingredientCode, I.ingredientName, I.strength, I.doseFormCode, I.doseFormName, adjustedDoseQuantity, M.dosesPerDay, dailyDose),\n conversionFactor: factor,\n mme: Quantity {\n value: dailyDose.value * factor,\n unit: dailyDose.unit + '/d'\n }\n }\n )\n\ndefine TestCalculateMMEs:\n CalculateMMEs({ { rxNormCode: Code '388508' from RxNorm, doseQuantity: Quantity { value: 1, unit: 'patch' }, dosesPerDay: 0.33 } })</code>\n </pre>\n <p>\n <code>Content not shown - (</code>\n <code>application/elm+xml</code>, size = 183Kb)\n </p>\n </div>"
  },
  "identifier" : [
    {
      "use" : "official",
      "value" : "OMTKLogic"
    }
  ],
  "version" : "0.1.0",
  "title" : "OMTK Logic",
  "status" : "active",
  "experimental" : true,
  "type" : {
    "coding" : [
      {
        "system" : "http://terminology.hl7.org/CodeSystem/library-type",
        "code" : "logic-library",
        "display" : "Logic Library"
      }
    ]
  },
  "date" : "2017-05-05",
  "publisher" : "Centers for Disease Control and Prevention (CDC)",
  "description" : "Opioid Management Terminology Knowledge Base Logic for use in implementing CDC Opioid Prescribing Guidelines.",
  "useContext" : [
    {
      "code" : {
        "system" : "http://terminology.hl7.org/CodeSystem/usage-context-type",
        "code" : "focus",
        "display" : "Clinical Focus"
      },
      "valueCodeableConcept" : {
        "coding" : [
          {
            "system" : "http://snomed.info/sct",
            "code" : "182888003",
            "display" : "Medication requested (situation)"
          }
        ]
      }
    },
    {
      "code" : {
        "system" : "http://terminology.hl7.org/CodeSystem/usage-context-type",
        "code" : "focus",
        "display" : "Clinical Focus"
      },
      "valueCodeableConcept" : {
        "coding" : [
          {
            "system" : "http://snomed.info/sct",
            "code" : "82423001",
            "display" : "Chronic pain (finding)"
          }
        ]
      }
    }
  ],
  "jurisdiction" : [
    {
      "coding" : [
        {
          "system" : "urn:iso:std:iso:3166",
          "code" : "US",
          "display" : "United States of America"
        }
      ]
    }
  ],
  "purpose" : "This library normalizes units to UCUM units, identifies the conversion factor for the given ingredient, identifies the non-surgical opioid ingredients and their strengths that make up a drug identified by the given rxNormCode, calculates daily dose for a specific ingredient based on the ingredient strength, dose form, dose quantity, and daily frequency, calculates daily frequency given frequency within a period, and calculates the Morphine Milligram Equivalency (MME) for a given prescription.",
  "usage" : "This library is used to gather information about an opioid prescription necessary to offer opioid management guidance for a patient.",
  "copyright" : "© CDC 2016+.",
  "topic" : [
    {
      "text" : "Opioid Prescribing"
    }
  ],
  "author" : [
    {
      "name" : "Kensaku Kawamoto, MD, PhD, MHS"
    },
    {
      "name" : "Bryn Rhodes"
    },
    {
      "name" : "Floyd Eisenberg, MD, MPH"
    },
    {
      "name" : "Robert McClure, MD, MPH"
    }
  ],
  "relatedArtifact" : [
    {
      "type" : "depends-on",
      "resource" : "http://example.org/fhir/Library/omtk-modelinfo"
    },
    {
      "type" : "documentation",
      "display" : "CDC guideline for prescribing opioids for chronic pain",
      "url" : "https://guidelines.gov/summaries/summary/50153/cdc-guideline-for-prescribing-opioids-for-chronic-pain---united-states-2016#420"
    },
    {
      "type" : "documentation",
      "display" : "MME Conversion Tables",
      "url" : "https://www.cdc.gov/drugoverdose/pdf/calculating_total_daily_dose-a.pdf"
    }
  ],
  "content" : [
    {
      "contentType" : "text/cql",
      "data" : "bGlicmFyeSBPTVRLTG9naWMgdmVyc2lvbiAnMC4xLjAnDQoNCnVzaW5nIE9NVEsgdmVyc2lvbiAnMC4xLjAnDQoNCmNvZGVzeXN0ZW0gUnhOb3JtOiAnaHR0cDovL3d3dy5ubG0ubmloLmdvdi9yZXNlYXJjaC91bWxzL3J4bm9ybScNCg0KLy9kZWZpbmUgTUVEX0RPU0VfRk9STVM6IFtNRURfRE9TRV9GT1JNXQ0KDQovLyBHaXZlbiBhbiBSeE5vcm0gQ29kZToNCi8vIE5PTl9TVVJHSUNBTF9PUElPSURfVE9fSU5DTFVERS5EUlVHX1JYQ1VJDQovLyBNRURfRFJVRy5EUlVHX1JYQ1VJDQovLyBNRURfU0NEQ19GT1JfRFJVRy5EUlVHX1JYQ1VJIC0+IFNDRENfUlhDVUkNCi8vIE1FRF9TQ0RDLlNDRENfUlhDVUkgKFNUUkVOR1RILCBTVFJFTkdUSF9WQUxVRSwgU1RSRU5HVEhfVU5JVCkNCi8vIE1FRF9JTkdSRURJRU5UX0ZPUl9TQ0RDLlNDRENfUlhDVUkgLT4gSU5HUkVESUVOVF9SWENVSQ0KLy8gTUVEX0lOR1JFRElFTlQuSU5HUkVESUVOVF9SWENVSQ0KLy8gTUVEX0lOR1JFRElFTlRfVFlQRS5JTkdSRURJRU5UX1JYQ1VJIChJTkdSRURJRU5UX1RZUEUgPSAnTm9uU3VyZ2ljYWxPcGlvaWQnKQ0KDQovKg0KIFNRTCAtPg0Kc2VsZWN0IEQuRFJVR19SWENVSSwgRC5EUlVHX05BTUUsIERGLkRPU0VfRk9STV9OQU1FLCBTQ0RDRC5TQ0RDX1JYQ1VJLCBTQ0RDLlNDRENfTkFNRSwgU0NEQy5TVFJFTkdUSCwgU0NEQy5TVFJFTkdUSF9WQUxVRSwgU0NEQy5TVFJFTkdUSF9VTklULCBJLklOR1JFRElFTlRfUlhDVUksIEkuSU5HUkVESUVOVF9OQU1FDQogIGZyb20gTUVEX0RSVUcgRA0KICAgIGpvaW4gTk9OX1NVUkdJQ0FMX09QSU9JRF9UT19JTkNMVURFIE5TTyBvbiBELkRSVUdfUlhDVUkgPSBOU08uRFJVR19SWENVSQ0KICAgIGpvaW4gTUVEX1NDRENfRk9SX0RSVUcgU0NEQ0Qgb24gRC5EUlVHX1JYQ1VJID0gU0NEQ0QuRFJVR19SWENVSQ0KICAgIGpvaW4gTUVEX1NDREMgU0NEQyBvbiBTQ0RDRC5TQ0RDX1JYQ1VJID0gU0NEQy5TQ0RDX1JYQ1VJDQogICAgam9pbiBNRURfSU5HUkVESUVOVF9GT1JfU0NEQyBTQ0RDSSBvbiBTQ0RDLlNDRENfUlhDVUkgPSBTQ0RDSS5TQ0RDX1JYQ1VJDQogICAgam9pbiBNRURfSU5HUkVESUVOVCBJIG9uIFNDRENJLklOR1JFRElFTlRfUlhDVUkgPSBJLklOR1JFRElFTlRfUlhDVUkNCiAgICBqb2luIE1FRF9JTkdSRURJRU5UX1RZUEUgSVQgb24gSS5JTkdSRURJRU5UX1JYQ1VJID0gSVQuSU5HUkVESUVOVF9SWENVSQ0KCWxlZnQgam9pbiBNRURfRFJVR19ET1NFX0ZPUk0gRERGIG9uIEQuRFJVR19SWENVSSA9IERERi5EUlVHX1JYQ1VJDQoJbGVmdCBqb2luIE1FRF9ET1NFX0ZPUk0gREYgb24gRERGLkRPU0VfRk9STV9SWENVSSA9IERGLkRPU0VfRk9STV9SWENVSQ0KCS0tTW9zdCBvZiB0aGUgZHJ1Z3MgaGF2ZSBtdWx0aXBsZSBkb3NlIGZvcm0gZ3JvdXBzLi4uDQoJLS1sZWZ0IGpvaW4gTUVEX0RSVUdfRE9TRV9GT1JNX0dST1VQIERERkcgb24gRC5EUlVHX1JYQ1VJID0gRERGRy5EUlVHX1JYQ1VJDQoJLS1sZWZ0IGpvaW4gTUVEX0RPU0VfRk9STV9HUk9VUCBERkcgb24gRERGRy5ET1NFX0ZPUk1fR1JPVVBfUlhDVUkgPSBERkcuRE9TRV9GT1JNX0dST1VQX1JYQ1VJDQogIHdoZXJlIEQuRFJVR19SWENVSSA9IEBSeE5vcm1Db2RlIC8vIDE5NzY5Ng0KICAgIGFuZCBJVC5JTkdSRURJRU5UX1RZUEUgPSAnTm9uU3VyZ2ljYWxPcGlvaWQnDQoqLw0KDQovKg0KICBDUUwsIGFzc3VtaW5nIHRyYW5zbGF0aW9uIHRvIFNRTDoNCg0KICBmcm9tDQogICAgW01FRF9EUlVHOiByeE5vcm1Db2RlXSBELA0KICAgIFtOT05fU1VSR0lDQUxfT1BJT0lEX1RPX0lOQ0xVREVdIE5TTywNCiAgICBbTUVEX1NDRENfRk9SX0RSVUddIFNDRENELA0KICAgIFtNRURfU0NEQ10gU0NEQywNCiAgICBbTUVEX0lOR1JFRElFTlRfRk9SX1NDRENdIFNDRENJLA0KICAgIFtNRURfSU5HUkVESUVOVF0gSSwNCiAgICBbTUVEX0lOR1JFRElFTlRfVFlQRV0gSVQsDQogICAgW01FRF9EUlVHX0RPU0VfRk9STV0gRERGLA0KICAgIFtNRURfRE9TRV9GT1JNXSBERg0KICB3aGVyZSBELkRSVUdfUlhDVUkgPSBOU08uRFJVR19SWENVSQ0KICAgIGFuZCBELkRSVUdfUlhDVUkgPSBTQ0RDRC5EUlVHX1JYQ1VJDQogICAgYW5kIFNDRENELlNDRENfUlhDVUkgPSBTQ0RDLlNDRENfUlhDVUkNCiAgICBhbmQgU0NEQy5TQ0RDX1JYQ1VJID0gU0NEQ0kuU0NEQ19SWENVSQ0KICAgIGFuZCBTRENESS5JTkdSRURJRU5UX1JYQ1VJID0gSS5JTkdSRURJRU5UX1JYQ1VJDQogICAgYW5kIEkuSU5HUkVESUVOVF9SWENVSSA9IElULklOR1JFRElFTlRfUlhDVUkNCiAgICBhbmQgRC5EUlVHX1JYQ1VJID0gRERGLkRSVUdfUlhDVUkNCiAgICBhbmQgRERGLkRPU0VfRk9STV9SWENVSSA9IERGLkRPU0VfRk9STV9SWENVSQ0KICAgIGFuZCBJVC5JTkdSRURJRU5UX1RZUEUgPSAnTm9uU3VyZ2ljYWxPcGlvaWQnDQoqLw0KDQovKg0KQW4gZW5naW5lIHdpdGggYSBuYWl2ZSBpbXBsZW1lbnRhdGlvbiBmb3IgbXVsdGktc291cmNlIHF1ZXJpZXMgd291bGQgcGVyZm9ybQ0KcHJldHR5IGhvcnJpYmx5IGhlcmUsIHNvIHJld3JpdGUgaXQgdXNpbmcgInN5bnRhY3RpYyBvcHRpbWl6YXRpb24iIDopDQoqLw0KDQovKg0KICBOb3JtYWxpemVzIHRoZSBpbnB1dCB1bml0cyB0byBVQ1VNIHVuaXRzDQogIA0KICBOb3RlIGd1aWRhbmNlIGZvciBVQ1VNIHByZXNlbnRhdGlvbiBvZiBtZWRpY2F0aW9uIHVuaXRzIGZyb20gU05PTUVEIGhlcmU6DQogIGh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vdXJsP3NhPXQmcmN0PWomcT0mZXNyYz1zJnNvdXJjZT13ZWImY2Q9MSZjYWQ9cmphJnVhY3Q9OCZ2ZWQ9MGFoVUtFd2pVM3ZMcGljUFRBaFdGTUdNS0hScE9CVUFRRmdnaU1BQSZ1cmw9aHR0cHMlM0ElMkYlMkZjb25mbHVlbmNlLmlodHNkb3Rvb2xzLm9yZyUyRmRvd25sb2FkJTJGYXR0YWNobWVudHMlMkYxNzg1OTE4OCUyRkV4cHJlc3NpbmclMjUyMFVuaXRzJTI1MjBvZiUyNTIwTWVhc3VyZSUyNTIwZm9yJTI1MjBNZWRpY2luYWwlMjUyMFByb2R1Y3RzLmRvYyUzRmFwaSUzRHYyJnVzZz1BRlFqQ05FNXNib2ljcXZKRFV5WEoyaW04VnpCcGdIRThBDQogIA0KICBUaGUgdmFsdWVzIGxpc3RlZCBoZXJlIGFyZSB0aGUgb25seSBvbmVzIGN1cnJlbnRseSBwcmVzZW50IGluIHRoZSBPTVRLIGRhdGENCiAgDQogIEJhc2VkIG9uIHRoZSBITDcgVUNVTSBzdWJzZXQgaGVyZToNCiAgaHR0cDovL2Rvd25sb2FkLmhsNy5kZS9kb2N1bWVudHMvdWN1bS91Y3VtZGF0YS5odG1sDQoqLw0KZGVmaW5lIGZ1bmN0aW9uIFRvVUNVTSh1bml0IFN0cmluZyk6DQogIGNhc2UgdW5pdA0KICAgIHdoZW4gJ01HJyB0aGVuICdtZycNCiAgICB3aGVuICdNRy9BQ1RVQVQnIHRoZW4gJ21nL3thY3R1YXR9Jw0KICAgIHdoZW4gJ01HL0hSJyB0aGVuICdtZy9oJw0KICAgIHdoZW4gJ01HL01MJyB0aGVuICdtZy9tTCcNCiAgICBlbHNlICd1bmtub3dueycgKyB1bml0ICsgJ30nIC8vIFNob3VsZCBwcm9iYWJseSBiZSBhbiBlcnJvcg0KICBlbmQNCg0KLyoNCiAgQ2FsY3VsYXRlcyBkYWlseSBmcmVxdWVuY3kgZ2l2ZW4gZnJlcXVlbmN5IHdpdGhpbiBhIHBlcmlvZA0KKi8NCmRlZmluZSBmdW5jdGlvbiBUb0RhaWx5KGZyZXF1ZW5jeSBJbnRlZ2VyLCBwZXJpb2QgU3lzdGVtLlF1YW50aXR5KToNCiAgY2FzZSBwZXJpb2QudW5pdA0KICAgIHdoZW4gJ2gnIHRoZW4gZnJlcXVlbmN5ICogKDI0LjAgLyBwZXJpb2QudmFsdWUpDQogICAgd2hlbiAnbWluJyB0aGVuIGZyZXF1ZW5jeSAqICgyNC4wIC8gcGVyaW9kLnZhbHVlKSAqIDYwDQogICAgd2hlbiAncycgdGhlbiBmcmVxdWVuY3kgKiAoMjQuMCAvIHBlcmlvZC52YWx1ZSkgKiA2MCAqIDYwDQogICAgd2hlbiAnZCcgdGhlbiBmcmVxdWVuY3kgKiAoMjQuMCAvIHBlcmlvZC52YWx1ZSkgLyAyNA0KICAgIHdoZW4gJ3drJyB0aGVuIGZyZXF1ZW5jeSAqICgyNC4wIC8gcGVyaW9kLnZhbHVlKSAvICgyNCAqIDcpDQogICAgd2hlbiAnbW8nIHRoZW4gZnJlcXVlbmN5ICogKDI0LjAgLyBwZXJpb2QudmFsdWUpIC8gKDI0ICogMzApIC8vIGFzc3VtaW5nIDMwIGRheXMgaW4gbW9udGgNCiAgICB3aGVuICdhJyB0aGVuIGZyZXF1ZW5jeSAqICgyNC4wIC8gcGVyaW9kLnZhbHVlKSAvICgyNCAqIDM2NSkgLy8gYXNzdW1pbmcgMzY1IGRheXMgaW4geWVhcg0KICAgIGVsc2UgbnVsbA0KICBlbmQNCg0KLyoNCiAgUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBkb3NlIGZvcm0gaXMgYSBwYXRjaCAodHJhbnNkZXJtYWwgc3lzdGVtKQ0KKi8NCmRlZmluZSBmdW5jdGlvbiBJc1BhdGNoKGRvc2VGb3JtQ29kZSBDb2RlKToNCiAgVG9JbnRlZ2VyKGRvc2VGb3JtQ29kZS5jb2RlKSA9IDMxNjk4Nw0KDQovKg0KICBSZXR1cm5zIHRoZSBjb252ZXJzaW9uIGZhY3RvciBmb3IgdGhlIGdpdmVuIGluZ3JlZGllbnQNCg0KT3Bpb2lkIChzdHJlbmd0aCBpbiBtZyBleGNlcHQgd2hlcmUgbm90ZWQpCU1NRSBDb252ZXJzaW9uIEZhY3RvcioNCkJ1cHJlbm9ycGhpbmUsIHRyYW5zZGVybWFsIHBhdGNoIChNQ0cvSFIpCTEyLjYNCkJ1cHJlbm9ycGhpbmUsIHRhYmxldCBvciBmaWxtCTMwDQpCdXByZW5vcnBoaW5lLCBmaWxtIChNQ0cpCTAuMDMNCkJ1dG9ycGhhbm9sCTcNCkNvZGVpbmUJMC4xNQ0KRGloeWRyb2NvZGVpbmUJMC4yNQ0KRmVudGFueWwsIGJ1Y2NhbC9TTCB0YWJldCBvciBsb3plbmdlL3Ryb2NoZSAoTUNHKQkwLjEzDQpGZW50YW55bCwgZmlsbSBvciBvcmFsIHNwcmF5IChNQ0cpCTAuMTgNCkZlbnRhbnlsLCBuYXNhbCBzcHJheSAoTUNHKQkwLjE2DQpGZW50YW55bCwgdHJhbnNkZXJtYWwgcGF0Y2ggKE1DRy9IUikJNy4yDQpIeWRyb2NvZG9uZQkxDQpIeWRyb21vcnBob25lCTQNCkxldm9tZXRoYWR5bCBhY2V0YXRlCTgNCkxldm9ycGhhbm9sIHRhcnRyYXRlCTExDQpNZXBlcmlkaW5lIAkwLjENCk1ldGhhZG9uZQkzDQogIDEtMjAgbWcvZCA0DQogIDIxLTQwIG1nL2QgOA0KICA0MS02MCBtZy9kIDEwDQogIDYxLTgwIG1nL2QgMTINCk1vcnBoaW5lCTENCk9waXVtCTEgLy8gTk9URTogTm90IHByZXNlbnQgYXMgYW4gaW5ncmVkaWVudCBpbiB0aGUgUnhOb3JtIGRhdGENCk94eWNvZG9uZQkxLjUNCk94eW1vcnBob25lCTMNClBlbnRhem9jaW5lCTAuMzcNClRhcGVudGFkb2wJMC40DQpUcmFtYWRvbAkwLjENCg0KKi8NCmRlZmluZSBmdW5jdGlvbiBHZXRDb252ZXJzaW9uRmFjdG9yKGluZ3JlZGllbnRDb2RlIENvZGUsIGRhaWx5RG9zZSBRdWFudGl0eSwgZG9zZUZvcm1Db2RlIENvZGUpOg0KICBjYXNlIFRvSW50ZWdlcihpbmdyZWRpZW50Q29kZS5jb2RlKQ0KICAgIHdoZW4gMTYxIHRoZW4gMCAvLwlBY2V0YW1pbm9waGVuDQogICAgd2hlbiAxMTkxIHRoZW4gMCAvLwlBc3BpcmluDQogICAgd2hlbiAxMjIzIHRoZW4gMCAvLwlBdHJvcGluZQ0KICAgIHdoZW4gMTc2NyB0aGVuIDAgLy8JQnJvbXBoZW5pcmFtaW5lDQogICAgd2hlbiAxODE5IHRoZW4gKCAvLwlCdXByZW5vcnBoaW5lDQogICAgICBjYXNlIA0KICAgICAgICB3aGVuIFRvSW50ZWdlcihkb3NlRm9ybUNvZGUuY29kZSkgPSAzMTY5ODcgdGhlbiAxMi42IC8vIFRyYW5zZGVybWFsIHN5c3RlbQ0KICAgICAgICBlbHNlIDMwIC8vIFRhYmxldCBvciBGaWxtIChvciBGaWxtIGluIE1DRykNCiAgICAgIGVuZA0KICAgICkgDQogICAgd2hlbiAxODQxIHRoZW4gNyAvLwlCdXRvcnBoYW5vbA0KICAgIHdoZW4gMTg4NiB0aGVuIDAgLy8JQ2FmZmVpbmUNCiAgICB3aGVuIDIxMDEgdGhlbiAwIC8vCUNhcmlzb3Byb2RvbA0KICAgIHdoZW4gMjM1NCB0aGVuIDAgLy8JY2hsb3JjeWNsaXppbmUNCiAgICB3aGVuIDI0MDAgdGhlbiAwIC8vCUNobG9ycGhlbmlyYW1pbmUNCiAgICB3aGVuIDI2NzAgdGhlbiAwLjE1IC8vCUNvZGVpbmUNCiAgICB3aGVuIDM0MjMgdGhlbiA0IC8vCUh5ZHJvbW9ycGhvbmUNCiAgICB3aGVuIDM0OTggdGhlbiAwIC8vCURpcGhlbmh5ZHJhbWluZQ0KICAgIHdoZW4gNDMzNyB0aGVuICggLy8JRmVudGFueWwNCiAgICAgIGNhc2UNCiAgICAgICAgd2hlbiBUb0ludGVnZXIoZG9zZUZvcm1Db2RlLmNvZGUpIGluIHsgOTcwNzg5LCAzMTcwMDcsIDMxNjk5MiB9IHRoZW4gMC4xMyAvLyBCdWNjYWwgVGFibGV0LCBTdWJsaW5ndWFsIFRhYmxldCwgT3JhbCBMb3plbmdlDQogICAgICAgIHdoZW4gVG9JbnRlZ2VyKGRvc2VGb3JtQ29kZS5jb2RlKSA9IDM0NjE2MyB0aGVuIDAuMTggLy8gQnVjY2FsIEZpbG0NCiAgICAgICAgd2hlbiBUb0ludGVnZXIoZG9zZUZvcm1Db2RlLmNvZGUpIGluIHsgMTI2NTQyLCAzNDYxNjMgfSB0aGVuIDAuMTYgLy8gTmFzYWwgU3ByYXksIE11Y29zYWwgU3ByYXkNCiAgICAgICAgd2hlbiBJc1BhdGNoKGRvc2VGb3JtQ29kZSkgdGhlbiA3LjIgLy8gVHJhbnNkZXJtYWwgc3lzdGVtDQogICAgICAgIGVsc2UgMTAwMCAvLyBSZWFsbHkgb3VnaHQgdG8gYmUgYW4gZXJyb3IgYmVjYXVzZSBpdCByZXByZXNlbnRzIGEgcHJldmlvdXNseSB1bmVuY291bnRlcmVkIGRvc2UgZm9ybS4uLi4NCiAgICAgIGVuZA0KICAgICkNCiAgICB3aGVuIDUwMzIgdGhlbiAwIC8vCUd1YWlmZW5lc2luDQogICAgd2hlbiA1NDg5IHRoZW4gMSAvLwlIeWRyb2NvZG9uZQ0KICAgIHdoZW4gNTY0MCB0aGVuIDAgLy8JSWJ1cHJvZmVuDQogICAgd2hlbiA2MTAyIHRoZW4gMCAvLwlLYW9saW4NCiAgICB3aGVuIDYzNzggdGhlbiAxMSAvLwlMZXZvcnBoYW5vbCAoTk9URTogR2l2ZW4gYXMgTGV2b3JwaGFub2wgdGFydHJhdGUgaW4gdGhlIENEQyBjb252ZXJzaW9uIHRhYmxlKQ0KICAgIHdoZW4gNjc1NCB0aGVuIDAuMSAvLwlNZXBlcmlkaW5lDQogICAgd2hlbiA2ODEzIHRoZW4gKCAvLwlNZXRoYWRvbmUNCiAgICAgIGNhc2UNCiAgICAgICAgd2hlbiBkYWlseURvc2UudmFsdWUgYmV0d2VlbiAxIGFuZCAyMCB0aGVuIDQNCiAgICAgICAgd2hlbiBkYWlseURvc2UudmFsdWUgYmV0d2VlbiAyMSBhbmQgNDAgdGhlbiA4DQogICAgICAgIHdoZW4gZGFpbHlEb3NlLnZhbHVlIGJldHdlZW4gNDEgYW5kIDYwIHRoZW4gMTANCiAgICAgICAgd2hlbiBkYWlseURvc2UudmFsdWUgPj0gNjEgdGhlbiAxMg0KICAgICAgICBlbHNlIDEwMDAgLy8gUmVhbGx5IG91Z2h0IHRvIGJlIGFuIGVycm9yIGJlY2F1c2UgaXQgcmVwcmVzZW50cyBhbiB1bmV4cGVjdGVkIGRvc2UgcmFuZ2UuLi4NCiAgICAgIGVuZA0KICAgICkNCiAgICB3aGVuIDcwNTIgdGhlbiAxIC8vCU1vcnBoaW5lDQogICAgd2hlbiA3MjQyIHRoZW4gMCAvLwlOYWxveG9uZQ0KICAgIHdoZW4gNzI0MyB0aGVuIDAgLy8JTmFsdHJleG9uZQ0KICAgIHdoZW4gNzgwNCB0aGVuIDEuNSAvLwlPeHljb2RvbmUNCiAgICB3aGVuIDc4MTQgdGhlbiAzIC8vCU94eW1vcnBob25lDQogICAgd2hlbiA4MDAxIHRoZW4gMC4zNyAvLwlQZW50YXpvY2luZQ0KICAgIHdoZW4gODE2MyB0aGVuIDAgLy8JUGhlbnlsZXBocmluZQ0KICAgIHdoZW4gODE3NSB0aGVuIDAgLy8JUGhlbnlscHJvcGFub2xhbWluZQ0KICAgIHdoZW4gODc0NSB0aGVuIDAgLy8JUHJvbWV0aGF6aW5lDQogICAgd2hlbiA4ODk2IHRoZW4gMCAvLwlQc2V1ZG9lcGhlZHJpbmUNCiAgICB3aGVuIDkwMDkgdGhlbiAwIC8vCVB5cmlsYW1pbmUNCiAgICB3aGVuIDEwNjg5IHRoZW4gMC4xIC8vCVRyYW1hZG9sDQogICAgd2hlbiAxMDg0OSB0aGVuIDAgLy8JVHJpcHJvbGlkaW5lDQogICAgd2hlbiAxOTc1OSB0aGVuIDAgLy8JYnJvbW9kaXBoZW5oeWRyYW1pbmUNCiAgICB3aGVuIDE5ODYwIHRoZW4gMCAvLwlidXRhbGJpdGFsDQogICAgd2hlbiAyMjY5NiB0aGVuIDAgLy8JZGV4YnJvbXBoZW5pcmFtaW5lDQogICAgd2hlbiAyMjY5NyB0aGVuIDAgLy8JZGV4Y2hsb3JwaGVuaXJhbWluZQ0KICAgIHdoZW4gMjMwODggdGhlbiAwLjI1IC8vCWRpaHlkcm9jb2RlaW5lDQogICAgd2hlbiAyNzA4NCB0aGVuIDAgLy8JaG9tYXRyb3BpbmUNCiAgICB3aGVuIDM1NzgwIHRoZW4gMCAvLwlyb3BpdmFjYWluZQ0KICAgIHdoZW4gMjM3MDA1IHRoZW4gOCAvLwlMZXZvbWV0aGFkeWwgKE5PVEU6IGdpdmVuIGFzIExldm9tZXRoYWR5bCBhY2V0YXRlIGluIHRoZSBDREMgY29udmVyc2lvbiB0YWJsZSkNCiAgICB3aGVuIDYzNjgyNyB0aGVuIDAgLy8JZ3VhaWFjb2xzdWxmb25hdGUNCiAgICB3aGVuIDc4NzM5MCB0aGVuIDAuNCAvLwl0YXBlbnRhZG9sDQogICAgZWxzZSAwDQogIGVuZA0KDQpkZWZpbmUgZnVuY3Rpb24gRW5zdXJlTWljcm9ncmFtUXVhbnRpdHkoc3RyZW5ndGggUXVhbnRpdHkpOg0KICBpZiBzdHJlbmd0aC52YWx1ZSA8IDAuMSBhbmQgKFBvc2l0aW9uT2YoJ21nJywgc3RyZW5ndGgudW5pdCkgPSAwKSB0aGVuDQogICAgUXVhbnRpdHkgew0KICAgICAgdmFsdWU6IHN0cmVuZ3RoLnZhbHVlICogMTAwMCwNCiAgICAgIHVuaXQ6ICdtY2cnICsgU3Vic3RyaW5nKHN0cmVuZ3RoLnVuaXQsIDIpDQogICAgfQ0KICBlbHNlDQogICAgc3RyZW5ndGgNCg0KLyoNCiAgUmV0dXJucyB0aGUgbm9uLXN1cmdpY2FsIG9waW9pZCBpbmdyZWRpZW50cyBhbmQgdGhlaXIgc3RyZW5ndGhzIHRoYXQNCiAgbWFrZSB1cCB0aGUgZHJ1ZyBpZGVudGlmaWVkIGJ5IHRoZSBnaXZlbiByeE5vcm1Db2RlIGFzIGEgbGlzdCBvZiB0dXBsZXM6DQoNCiAgTGlzdDxUdXBsZSB7DQogICAgcnhOb3JtQ29kZSBDb2RlLA0KICAgIGRvc2VGb3JtQ29kZSBDb2RlLA0KICAgIGRvc2VGb3JtTmFtZSBTdHJpbmcsDQogICAgaW5ncmVkaWVudENvZGUgQ29kZSwNCiAgICBpbmdyZWRpZW50TmFtZSBTdHJpbmcsDQogICAgc3RyZW5ndGggUXVhbnRpdHkNCiAgfT4NCiovDQpkZWZpbmUgZnVuY3Rpb24gR2V0SW5ncmVkaWVudHMocnhOb3JtQ29kZSBDb2RlKToNCiAgKA0KICAgIFtNRURfU0NEQ19GT1JfRFJVRzogRFJVR19SWENVSSBpbiByeE5vcm1Db2RlXSBTRA0KICAgICAgd2hlcmUgZXhpc3RzIChbTUVEX0RSVUdfVkFMVUVfU0VUOiBEUlVHX1JYQ1VJIGluIFNELkRSVUdfUlhDVUldKQ0KICAgICAgcmV0dXJuIHsNCiAgICAgICAgcnhOb3JtQ29kZTogcnhOb3JtQ29kZSwNCiAgICAgICAgY29tcG9uZW50OiBTaW5nbGV0b25Gcm9tKFtNRURfU0NEQzogU0NEQ19SWENVSSBpbiBTRC5TQ0RDX1JYQ1VJXSksDQogICAgICAgIGluZ3JlZGllbnRDb2RlOiBTaW5nbGV0b25Gcm9tKFtNRURfU0NEQzogU0NEQ19SWENVSSBpbiBTRC5TQ0RDX1JYQ1VJXSkuSU5HUkVESUVOVF9SWENVSSwNCiAgICAgICAgZG9zZUZvcm1Db2RlOiBTaW5nbGV0b25Gcm9tKFtNRURfRFJVRzogRFJVR19SWENVSSBpbiBTRC5EUlVHX1JYQ1VJXSkuRE9TRV9GT1JNX1JYQ1VJIC8vIENvdWxkIHBvdGVudGlhbGx5IGxvb2sgdGhpcyB1cCBvbmx5IG9uY2UuLi4NCiAgICAgIH0NCiAgKSBDDQogICAgbGV0DQogICAgICBpbmdyZWRpZW50OiBTaW5nbGV0b25Gcm9tKFtNRURfSU5HUkVESUVOVDogSU5HUkVESUVOVF9SWENVSSBpbiBDLmluZ3JlZGllbnRDb2RlXSksDQogICAgICBkb3NlRm9ybTogU2luZ2xldG9uRnJvbShbTUVEX0RPU0VfRk9STTogRE9TRV9GT1JNX1JYQ1VJIGluIEMuZG9zZUZvcm1Db2RlXSkNCiAgICB3aGVyZSBleGlzdHMgKA0KICAgICAgW01FRF9JTkdSRURJRU5UX1RZUEU6IElOR1JFRElFTlRfUlhDVUkgaW4gQy5pbmdyZWRpZW50Q29kZV0gSVQNCiAgICAgICAgd2hlcmUgSVQuSU5HUkVESUVOVF9UWVBFID0gJ09waW9pZF9Ob25TdXJnaWNhbCcNCiAgICApDQogICAgcmV0dXJuIHsNCiAgICAgIHJ4Tm9ybUNvZGU6IHJ4Tm9ybUNvZGUsDQogICAgICBkb3NlRm9ybUNvZGU6IEMuZG9zZUZvcm1Db2RlLA0KICAgICAgZG9zZUZvcm1OYW1lOiBkb3NlRm9ybS5ET1NFX0ZPUk1fTkFNRSwNCiAgICAgIGluZ3JlZGllbnRDb2RlOiBDLmluZ3JlZGllbnRDb2RlLA0KICAgICAgaW5ncmVkaWVudE5hbWU6IGluZ3JlZGllbnQuSU5HUkVESUVOVF9OQU1FLA0KICAgICAgc3RyZW5ndGg6DQogICAgICAgIEVuc3VyZU1pY3JvZ3JhbVF1YW50aXR5KA0KICAgICAgICAgIFF1YW50aXR5IHsNCiAgICAgICAgICAgIHZhbHVlOiBDLmNvbXBvbmVudC5TVFJFTkdUSF9WQUxVRSwNCiAgICAgICAgICAgIHVuaXQ6IFRvVUNVTShDLmNvbXBvbmVudC5TVFJFTkdUSF9VTklUKQ0KICAgICAgICAgIH0NCiAgICAgICAgKQ0KICAgIH0NCg0KLyoNCiAgQ2FsY3VsYXRlcyBkYWlseSBkb3NlIGZvciBhIHNwZWNpZmljIGluZ3JlZGllbnQgYmFzZWQgb24gdGhlIGluZ3JlZGllbnQgc3RyZW5ndGgsIGRvc2UgZm9ybSwgZG9zZSBxdWFudGl0eSwgYW5kIGRhaWx5IGZyZXF1ZW5jeQ0KKi8NCmRlZmluZSBmdW5jdGlvbiBHZXREYWlseURvc2UoaW5ncmVkaWVudENvZGUgQ29kZSwgc3RyZW5ndGggUXVhbnRpdHksIGRvc2VGb3JtQ29kZSBDb2RlLCBkb3NlUXVhbnRpdHkgUXVhbnRpdHksIGRvc2VzUGVyRGF5IERlY2ltYWwpOg0KICBjYXNlDQoJICAvLyBpZiBwYXRjaCAtLT4gZGFpbHkgZG9zZSA9IGRvc2UgdmFsdWUgKGUuZywgbnVtYmVyIHBhdGNoZXMgd2l0aCBkb3NlUXVhbnRpdHkgdW5pdCA9ICJwYXRjaCIpICogcGVyLWhvdXIgc3RyZW5ndGgNCiAgICB3aGVuIElzUGF0Y2goZG9zZUZvcm1Db2RlKSB0aGVuDQogICAgICAvLyBidXByZW5vcnBoaW5lIG9yIGZlbnRhbnlsIHBhdGNoDQogICAgICBpZiBUb0ludGVnZXIoaW5ncmVkaWVudENvZGUuY29kZSkgaW4geyAxODE5LCA0MzM3IH0gdGhlbg0KICAgICAgICBRdWFudGl0eSB7IHZhbHVlOiBkb3Nlc1BlckRheSAqIGRvc2VRdWFudGl0eS52YWx1ZSAqIHN0cmVuZ3RoLnZhbHVlLCB1bml0OiBzdHJlbmd0aC51bml0IH0NCiAgICAgIGVsc2UNCiAgICAgICAgbnVsbA0KDQogICAgLy8gaWYgZG9zZSB1bml0IGluIGFjdHVhbCBtYXNzIHVuaXRzIChtZyBvciBtY2cgLS0gd2hlbiBpdCdzIGEgc2luZ2xlIG1lZCkgLS0+IGRhaWx5IGRvc2UgPSBudW1UaW1lc1BlckRheSAqIGRvc2UNCiAgICB3aGVuIGRvc2VRdWFudGl0eS51bml0IGluIHsgJ21nJywgJ21jZycgfSB0aGVuDQogICAgICBRdWFudGl0eSB7IHZhbHVlOiBkb3Nlc1BlckRheSAqIGRvc2VRdWFudGl0eS52YWx1ZSwgdW5pdDogZG9zZVF1YW50aXR5LnVuaXQgfQ0KDQogICAgLy8gaWYgZG9zZVF1YW50aXR5IGlzIGluIGFjdHVhbCB2b2x1bWUgdW5pdHMgKG1MKSAtLT4gZGFpbHkgZG9zZSA9IG51bVRpbWVzUGVyRGF5ICogZG9zZSAqIHN0cmVuZ3RoDQogICAgd2hlbiBkb3NlUXVhbnRpdHkudW5pdCA9ICdtTCcgYW5kIChQb3NpdGlvbk9mKCcvbUwnLCBzdHJlbmd0aC51bml0KSA9IExlbmd0aChzdHJlbmd0aC51bml0KSAtIDMpIHRoZW4NCiAgICAgIFF1YW50aXR5IHsgdmFsdWU6IGRvc2VzUGVyRGF5ICogZG9zZVF1YW50aXR5LnZhbHVlICogc3RyZW5ndGgudmFsdWUsIHVuaXQ6IFN1YnN0cmluZyhzdHJlbmd0aC51bml0LCAwLCBQb3NpdGlvbk9mKCcvJywgc3RyZW5ndGgudW5pdCkpIH0NCg0KCQkvLyBpZiBkb3NlUXVhbnRpdHkgaXMgbm90IGluIGFjdHVhbCB1bml0cyAoZS5nLiwgMSB0YWIsIDEgc3ByYXkgLS0gd2hlbiBpdCdzIGEgY29tYm8gbWVkIHdpdGggYSB1bml0IG9mIHRhYmxldCwgb3IgaXQncyBtZy9hY3R1YXQpIC0tPiBkYWlseSBkb3NlID0gbnVtVGltZXNQZXJEYXkgKiBkb3NlIHZhbHVlICogc3RyZW5ndGggdmFsdWUNCiAgICBlbHNlDQogICAgICBRdWFudGl0eSB7IHZhbHVlOiBkb3Nlc1BlckRheSAqIGRvc2VRdWFudGl0eS52YWx1ZSAqIHN0cmVuZ3RoLnZhbHVlLCB1bml0OiBTdWJzdHJpbmcoc3RyZW5ndGgudW5pdCwgMCwgUG9zaXRpb25PZignLycsIHN0cmVuZ3RoLnVuaXQpKSB9DQogIGVuZA0KICANCmRlZmluZSBmdW5jdGlvbiBHZXRNZWRpY2F0aW9uTmFtZShyeE5vcm1Db2RlIENvZGUpOg0KICBTaW5nbGV0b25Gcm9tKFtNRURfRFJVRzogRFJVR19SWENVSSBpbiByeE5vcm1Db2RlXSkuRFJVR19OQU1FDQoNCi8qDQogIEJ1aWxkcyBhIGRlc2NyaXB0aW9uIGZvciB0aGUgZGFpbHkgZG9zZSBmb3IgYW4gaW5ncmVkaWVudA0KKi8NCmRlZmluZSBmdW5jdGlvbiBHZXREYWlseURvc2VEZXNjcmlwdGlvbihpbmdyZWRpZW50Q29kZSBDb2RlLCBpbmdyZWRpZW50TmFtZSBTdHJpbmcsIHN0cmVuZ3RoIFF1YW50aXR5LCBkb3NlRm9ybUNvZGUgQ29kZSwgZG9zZUZvcm1OYW1lIFN0cmluZywgZG9zZVF1YW50aXR5IFF1YW50aXR5LCBkb3Nlc1BlckRheSBEZWNpbWFsLCBkYWlseURvc2UgUXVhbnRpdHkpOg0KICBjYXNlDQogICAgLy8gaWYgcGF0Y2gNCiAgICB3aGVuIElzUGF0Y2goZG9zZUZvcm1Db2RlKSB0aGVuDQogICAgICAvLyBidXByZW5vcnBoaW5lIG9yIGZlbnRhbnlsIHBhdGNoDQogICAgICBpZiBUb0ludGVnZXIoaW5ncmVkaWVudENvZGUuY29kZSkgaW4geyAxODE5LCA0MzM3IH0gdGhlbg0KICAgICAgICBpbmdyZWRpZW50TmFtZSArICcgcGF0Y2g6ICcgKyBUb1N0cmluZyhkb3NlUXVhbnRpdHkudmFsdWUpICsgJyAqICcgKyBUb1N0cmluZyhzdHJlbmd0aCkgKyAnID0gJyArIFRvU3RyaW5nKGRhaWx5RG9zZSkNCiAgICAgIGVsc2UNCiAgICAgICAgbnVsbA0KDQogICAgLy8gaWYgZG9zZSB1bml0IGluIGFjdHVhbCBtYXNzIHVuaXRzIChtZyBvciBtY2cgLS0gd2hlbiBpdCdzIGEgc2luZ2xlIG1lZCkNCiAgICB3aGVuIGRvc2VRdWFudGl0eS51bml0IGluIHsgJ21nJywgJ21jZycgfSB0aGVuDQogICAgICBpbmdyZWRpZW50TmFtZSArICcgJyArIGRvc2VGb3JtTmFtZSArICc6ICcgKyBUb1N0cmluZyhkb3Nlc1BlckRheSkgKyAnL2QgKiAnICsgVG9TdHJpbmcoZG9zZVF1YW50aXR5KSArICcgPSAnICsgVG9TdHJpbmcoZGFpbHlEb3NlKQ0KDQogICAgLy8gaWYgZG9zZVF1YW50aXR5IGluIGFjdHVhbCB2b2x1bWUgdW5pdHMgKG1MKSBvciBub3QgaW4gYWN0dWFsIHVuaXRzIChlLmcuIDEgdGFiLCAxIHNwcmF5KQ0KICAgIGVsc2UNCiAgICAgIGluZ3JlZGllbnROYW1lICsgJyAnICsgZG9zZUZvcm1OYW1lICsgJzogJyArIFRvU3RyaW5nKGRvc2VzUGVyRGF5KSArICcvZCAqICcgKyBUb1N0cmluZyhkb3NlUXVhbnRpdHkpICsgJyAqICcgKyBUb1N0cmluZyhzdHJlbmd0aCkgKyAnID0gJyArIFRvU3RyaW5nKGRhaWx5RG9zZSkNCiAgZW5kDQoNCi8qDQogIENhbGN1bGF0ZXMgTU1FcyBmb3IgdGhlIGdpdmVuIGlucHV0IHByZXNjcmlwdGlvbiBpbmZvcm1hdGlvbiBhbmQgcmV0dXJucyBpdA0KICBhcyBhIGxpc3Qgb2YgdHVwbGVzOg0KDQogIExpc3Q8VHVwbGUgew0KICAgIHJ4Tm9ybUNvZGUgQ29kZSwNCiAgICBkb3NlRm9ybUNvZGUgQ29kZSwNCiAgICBkb3NlUXVhbnRpdHkgUXVhbnRpdHksDQogICAgZG9zZXNQZXJEYXkgRGVjaW1hbCwNCiAgICBpbmdyZWRpZW50Q29kZSBDb2RlLA0KICAgIGluZ3JlZGllbnROYW1lIFN0cmluZywNCiAgICBzdHJlbmd0aCBRdWFudGl0eSwNCiAgICBkYWlseURvc2UgUXVhbnRpdHksDQogICAgZGFpbHlEb3NlRGVzY3JpcHRpb24gU3RyaW5nLA0KICAgIGNvbnZlcnNpb25GYWN0b3IgRGVjaW1hbCwNCiAgICBtbWUgUXVhbnRpdHkNCiAgfT4NCiovDQpkZWZpbmUgZnVuY3Rpb24gQ2FsY3VsYXRlTU1FcyhtZWRpY2F0aW9ucyBMaXN0PFR1cGxlIHsgcnhOb3JtQ29kZSBDb2RlLCBkb3NlUXVhbnRpdHkgUXVhbnRpdHksIGRvc2VzUGVyRGF5IERlY2ltYWwgfT4pOg0KICBGbGF0dGVuKA0KICAgIG1lZGljYXRpb25zIE0NCiAgICAgIGxldCBJbmdyZWRpZW50czogR2V0SW5ncmVkaWVudHMoTS5yeE5vcm1Db2RlKQ0KICAgICAgcmV0dXJuDQogICAgICAgIEluZ3JlZGllbnRzIEkNCiAgICAgICAgICBsZXQNCiAgICAgICAgICAgIGFkanVzdGVkRG9zZVF1YW50aXR5OiBFbnN1cmVNaWNyb2dyYW1RdWFudGl0eShNLmRvc2VRdWFudGl0eSksDQogICAgICAgICAgICBkYWlseURvc2U6IEdldERhaWx5RG9zZShJLmluZ3JlZGllbnRDb2RlLCBJLnN0cmVuZ3RoLCBJLmRvc2VGb3JtQ29kZSwgYWRqdXN0ZWREb3NlUXVhbnRpdHksIE0uZG9zZXNQZXJEYXkpLA0KICAgICAgICAgICAgZmFjdG9yOiBHZXRDb252ZXJzaW9uRmFjdG9yKEkuaW5ncmVkaWVudENvZGUsIGRhaWx5RG9zZSwgSS5kb3NlRm9ybUNvZGUpDQogICAgICAgICAgcmV0dXJuIHsNCiAgICAgICAgICAgIHJ4Tm9ybUNvZGU6IE0ucnhOb3JtQ29kZSwNCiAgICAgICAgICAgIGRvc2VGb3JtQ29kZTogSS5kb3NlRm9ybUNvZGUsDQogICAgICAgICAgICBkb3NlUXVhbnRpdHk6IGFkanVzdGVkRG9zZVF1YW50aXR5LA0KICAgICAgICAgICAgZG9zZXNQZXJEYXk6IE0uZG9zZXNQZXJEYXksDQogICAgICAgICAgICBpbmdyZWRpZW50Q29kZTogSS5pbmdyZWRpZW50Q29kZSwNCiAgICAgICAgICAgIGluZ3JlZGllbnROYW1lOiBJLmluZ3JlZGllbnROYW1lLA0KICAgICAgICAgICAgc3RyZW5ndGg6IEkuc3RyZW5ndGgsDQogICAgICAgICAgICBkYWlseURvc2U6IGRhaWx5RG9zZSwNCiAgICAgICAgICAgIGRhaWx5RG9zZURlc2NyaXB0aW9uOiBHZXREYWlseURvc2VEZXNjcmlwdGlvbihJLmluZ3JlZGllbnRDb2RlLCBJLmluZ3JlZGllbnROYW1lLCBJLnN0cmVuZ3RoLCBJLmRvc2VGb3JtQ29kZSwgSS5kb3NlRm9ybU5hbWUsIGFkanVzdGVkRG9zZVF1YW50aXR5LCBNLmRvc2VzUGVyRGF5LCBkYWlseURvc2UpLA0KICAgICAgICAgICAgY29udmVyc2lvbkZhY3RvcjogZmFjdG9yLA0KICAgICAgICAgICAgbW1lOiBRdWFudGl0eSB7DQogICAgICAgICAgICAgIHZhbHVlOiBkYWlseURvc2UudmFsdWUgKiBmYWN0b3IsDQogICAgICAgICAgICAgIHVuaXQ6IGRhaWx5RG9zZS51bml0ICsgJy9kJw0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0NCiAgKQ0KDQpkZWZpbmUgVGVzdENhbGN1bGF0ZU1NRXM6DQogIENhbGN1bGF0ZU1NRXMoeyB7IHJ4Tm9ybUNvZGU6IENvZGUgJzM4ODUwOCcgZnJvbSBSeE5vcm0sIGRvc2VRdWFudGl0eTogUXVhbnRpdHkgeyB2YWx1ZTogMSwgdW5pdDogJ3BhdGNoJyB9LCBkb3Nlc1BlckRheTogMC4zMyB9IH0p",
      "url" : "cql/OMTKLogic-0.1.0.cql"
    },
    {
      "contentType" : "application/elm+xml",
      "data" : "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPGxpYnJhcnkgeG1sbnM9InVybjpobDctb3JnOmVsbTpyMSIgeG1sbnM6dD0idXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczpmaGlyPSJodHRwOi8vaGw3Lm9yZy9maGlyIiB4bWxuczphPSJ1cm46aGw3LW9yZzpjcWwtYW5ub3RhdGlvbnM6cjEiPgogICA8aWRlbnRpZmllciBpZD0iT01US0xvZ2ljIiB2ZXJzaW9uPSIwLjEuMCIvPgogICA8c2NoZW1hSWRlbnRpZmllciBpZD0idXJuOmhsNy1vcmc6ZWxtIiB2ZXJzaW9uPSJyMSIvPgogICA8dXNpbmdzPgogICAgICA8ZGVmIGxvY2FsSWRlbnRpZmllcj0iU3lzdGVtIiB1cmk9InVybjpobDctb3JnOmVsbS10eXBlczpyMSIvPgogICAgICA8ZGVmIGxvY2FsSWQ9IjEiIGxvY2FsSWRlbnRpZmllcj0iT01USyIgdXJpPSJodHRwOi8vb3JnLm9wZW5jZHMvb3Bpb2lkLWNkcyIgdmVyc2lvbj0iMC4xLjAiLz4KICAgPC91c2luZ3M+CiAgIDxjb2RlU3lzdGVtcz4KICAgICAgPGRlZiBsb2NhbElkPSIyIiBuYW1lPSJSeE5vcm0iIGlkPSJodHRwOi8vd3d3Lm5sbS5uaWguZ292L3Jlc2VhcmNoL3VtbHMvcnhub3JtIiBhY2Nlc3NMZXZlbD0iUHVibGljIi8+CiAgIDwvY29kZVN5c3RlbXM+CiAgIDxzdGF0ZW1lbnRzPgogICAgICA8ZGVmIGxvY2FsSWQ9IjIzIiBuYW1lPSJUb1VDVU0iIGNvbnRleHQ9IlBhdGllbnQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiIHhzaTp0eXBlPSJGdW5jdGlvbkRlZiI+CiAgICAgICAgIDxhbm5vdGF0aW9uIHhzaTp0eXBlPSJhOkFubm90YXRpb24iPgogICAgICAgICAgICA8YTpzIHI9IjIzIj4KICAgICAgICAgICAgICAgPGE6cz5kZWZpbmUgZnVuY3Rpb24gVG9VQ1VNKHVuaXQgPC9hOnM+CiAgICAgICAgICAgICAgIDxhOnMgcj0iMyI+CiAgICAgICAgICAgICAgICAgIDxhOnM+U3RyaW5nPC9hOnM+CiAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICA8YTpzPik6CiAgPC9hOnM+CiAgICAgICAgICAgICAgIDxhOnMgcj0iMjIiPgogICAgICAgICAgICAgICAgICA8YTpzIHI9IjIyIj4KICAgICAgICAgICAgICAgICAgICAgPGE6cz5jYXNlIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQiPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnVuaXQ8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+CiAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz53aGVuIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPidNRyc8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+IHRoZW4gPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+J21nJzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+CiAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxMCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+d2hlbiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4nTUcvQUNUVUFUJzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gdGhlbiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4nbWcve2FjdHVhdH0nPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4KICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjEzIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz53aGVuIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjExIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4nTUcvSFInPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiB0aGVuIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjEyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4nbWcvaCc8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzPgogICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTYiPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPndoZW4gPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPidNRy9NTCc8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+IHRoZW4gPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPidtZy9tTCc8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzPgogICAgZWxzZSA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4ndW5rbm93bnsnPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiArIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz51bml0PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gKyA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+J30nPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4gLy8gU2hvdWxkIHByb2JhYmx5IGJlIGFuIGVycm9yCiAgZW5kPC9hOnM+CiAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgIDwvYW5ub3RhdGlvbj4KICAgICAgICAgPGV4cHJlc3Npb24gbG9jYWxJZD0iMjIiIHhzaTp0eXBlPSJDYXNlIj4KICAgICAgICAgICAgPGNvbXBhcmFuZCBsb2NhbElkPSI0IiBuYW1lPSJ1bml0IiB4c2k6dHlwZT0iT3BlcmFuZFJlZiIvPgogICAgICAgICAgICA8Y2FzZUl0ZW0gbG9jYWxJZD0iNyI+CiAgICAgICAgICAgICAgIDx3aGVuIGxvY2FsSWQ9IjUiIHZhbHVlVHlwZT0idDpTdHJpbmciIHZhbHVlPSJNRyIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgPHRoZW4gbG9jYWxJZD0iNiIgdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9Im1nIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICA8L2Nhc2VJdGVtPgogICAgICAgICAgICA8Y2FzZUl0ZW0gbG9jYWxJZD0iMTAiPgogICAgICAgICAgICAgICA8d2hlbiBsb2NhbElkPSI4IiB2YWx1ZVR5cGU9InQ6U3RyaW5nIiB2YWx1ZT0iTUcvQUNUVUFUIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICA8dGhlbiBsb2NhbElkPSI5IiB2YWx1ZVR5cGU9InQ6U3RyaW5nIiB2YWx1ZT0ibWcve2FjdHVhdH0iIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgIDwvY2FzZUl0ZW0+CiAgICAgICAgICAgIDxjYXNlSXRlbSBsb2NhbElkPSIxMyI+CiAgICAgICAgICAgICAgIDx3aGVuIGxvY2FsSWQ9IjExIiB2YWx1ZVR5cGU9InQ6U3RyaW5nIiB2YWx1ZT0iTUcvSFIiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgIDx0aGVuIGxvY2FsSWQ9IjEyIiB2YWx1ZVR5cGU9InQ6U3RyaW5nIiB2YWx1ZT0ibWcvaCIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgPC9jYXNlSXRlbT4KICAgICAgICAgICAgPGNhc2VJdGVtIGxvY2FsSWQ9IjE2Ij4KICAgICAgICAgICAgICAgPHdoZW4gbG9jYWxJZD0iMTQiIHZhbHVlVHlwZT0idDpTdHJpbmciIHZhbHVlPSJNRy9NTCIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgPHRoZW4gbG9jYWxJZD0iMTUiIHZhbHVlVHlwZT0idDpTdHJpbmciIHZhbHVlPSJtZy9tTCIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgPC9jYXNlSXRlbT4KICAgICAgICAgICAgPGVsc2UgbG9jYWxJZD0iMjEiIHhzaTp0eXBlPSJDb25jYXRlbmF0ZSI+CiAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjE5IiB4c2k6dHlwZT0iQ29uY2F0ZW5hdGUiPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIxNyIgdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9InVua25vd257IiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIxOCIgbmFtZT0idW5pdCIgeHNpOnR5cGU9Ik9wZXJhbmRSZWYiLz4KICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIyMCIgdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9In0iIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgIDwvZWxzZT4KICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICAgICA8b3BlcmFuZCBuYW1lPSJ1bml0Ij4KICAgICAgICAgICAgPG9wZXJhbmRUeXBlU3BlY2lmaWVyIGxvY2FsSWQ9IjMiIG5hbWU9InQ6U3RyaW5nIiB4c2k6dHlwZT0iTmFtZWRUeXBlU3BlY2lmaWVyIi8+CiAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgPC9kZWY+CiAgICAgIDxkZWYgbG9jYWxJZD0iMTA2IiBuYW1lPSJUb0RhaWx5IiBjb250ZXh0PSJQYXRpZW50IiBhY2Nlc3NMZXZlbD0iUHVibGljIiB4c2k6dHlwZT0iRnVuY3Rpb25EZWYiPgogICAgICAgICA8YW5ub3RhdGlvbiB4c2k6dHlwZT0iYTpBbm5vdGF0aW9uIj4KICAgICAgICAgICAgPGE6cyByPSIxMDYiPgogICAgICAgICAgICAgICA8YTpzPmRlZmluZSBmdW5jdGlvbiBUb0RhaWx5KGZyZXF1ZW5jeSA8L2E6cz4KICAgICAgICAgICAgICAgPGE6cyByPSIyNCI+CiAgICAgICAgICAgICAgICAgIDxhOnM+SW50ZWdlcjwvYTpzPgogICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgPGE6cz4sIHBlcmlvZCA8L2E6cz4KICAgICAgICAgICAgICAgPGE6cyByPSIyNSI+CiAgICAgICAgICAgICAgICAgIDxhOnM+U3lzdGVtLlF1YW50aXR5PC9hOnM+CiAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICA8YTpzPik6CiAgPC9hOnM+CiAgICAgICAgICAgICAgIDxhOnMgcj0iMTA1Ij4KICAgICAgICAgICAgICAgICAgPGE6cyByPSIxMDUiPgogICAgICAgICAgICAgICAgICAgICA8YTpzPmNhc2UgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjciPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5wZXJpb2Q8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz51bml0PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4KICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjM1Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz53aGVuIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4naCc8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+IHRoZW4gPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5mcmVxdWVuY3k8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+ICogPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPig8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzMyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzAiPjI0LjAgLyA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzMiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnBlcmlvZDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnZhbHVlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+KTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzPgogICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDUiPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPndoZW4gPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPidtaW4nPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiB0aGVuIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQ0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0MiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPmZyZXF1ZW5jeTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gKiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0MSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+KDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQxIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzOCI+MjQuMCAvIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzOSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+cGVyaW9kPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0MCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+dmFsdWU8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4pPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gKiA2MDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+CiAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI1NyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+d2hlbiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0NiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+J3MnPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiB0aGVuIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjU2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI1NCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNTIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQ3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5mcmVxdWVuY3k8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+ICogPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNTEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPig8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI1MSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDgiPjI0LjAgLyA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI1MCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnBlcmlvZDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNTAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnZhbHVlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+KTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+ICogNjA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+ICogNjA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzPgogICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNjciPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPndoZW4gPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNTgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPidkJzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gdGhlbiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI2NiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNjQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjU5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5mcmVxdWVuY3k8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+ICogPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNjMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPig8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI2MyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNjAiPjI0LjAgLyA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI2MiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNjEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnBlcmlvZDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNjIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnZhbHVlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+KTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+IC8gMjQ8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzPgogICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNzkiPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPndoZW4gPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNjgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPid3ayc8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+IHRoZW4gPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNzgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9Ijc0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI2OSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+ZnJlcXVlbmN5PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiAqIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjczIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4oPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNzMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjcwIj4yNC4wIC8gPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNzIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjcxIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5wZXJpb2Q8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjcyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz52YWx1ZTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPik8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiAvIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9Ijc3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4oPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNzciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9Ijc1Ij4yNCAqIDc8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+KTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzPgogICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iOTEiPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPndoZW4gPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iODAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPidtbyc8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+IHRoZW4gPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iOTAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9Ijg2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI4MSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+ZnJlcXVlbmN5PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiAqIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9Ijg1Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4oPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iODUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjgyIj4yNC4wIC8gPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iODQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjgzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5wZXJpb2Q8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9Ijg0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz52YWx1ZTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPik8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiAvIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9Ijg5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4oPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iODkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9Ijg3Ij4yNCAqIDMwPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPik8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4gLy8gYXNzdW1pbmcgMzAgZGF5cyBpbiBtb250aAogICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTAzIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz53aGVuIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjkyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4nYSc8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+IHRoZW4gPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTAyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI5OCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iOTMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPmZyZXF1ZW5jeTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gKiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI5NyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+KDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9Ijk3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI5NCI+MjQuMCAvIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9Ijk2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI5NSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+cGVyaW9kPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI5NiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+dmFsdWU8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4pPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gLyA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxMDEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPig8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxMDEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9Ijk5Ij4yNCAqIDM2NTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4pPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+IC8vIGFzc3VtaW5nIDM2NSBkYXlzIGluIHllYXIKICAgIGVsc2UgbnVsbAogIGVuZDwvYTpzPgogICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgIDwvYTpzPgogICAgICAgICA8L2Fubm90YXRpb24+CiAgICAgICAgIDxleHByZXNzaW9uIGxvY2FsSWQ9IjEwNSIgeHNpOnR5cGU9IkNhc2UiPgogICAgICAgICAgICA8Y29tcGFyYW5kIGxvY2FsSWQ9IjI3IiBwYXRoPSJ1bml0IiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjI2IiBuYW1lPSJwZXJpb2QiIHhzaTp0eXBlPSJPcGVyYW5kUmVmIi8+CiAgICAgICAgICAgIDwvY29tcGFyYW5kPgogICAgICAgICAgICA8Y2FzZUl0ZW0gbG9jYWxJZD0iMzUiPgogICAgICAgICAgICAgICA8d2hlbiBsb2NhbElkPSIyOCIgdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9ImgiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgIDx0aGVuIGxvY2FsSWQ9IjM0IiB4c2k6dHlwZT0iTXVsdGlwbHkiPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCB4c2k6dHlwZT0iVG9EZWNpbWFsIj4KICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMjkiIG5hbWU9ImZyZXF1ZW5jeSIgeHNpOnR5cGU9Ik9wZXJhbmRSZWYiLz4KICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIzMyIgeHNpOnR5cGU9IkRpdmlkZSI+CiAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjMwIiB2YWx1ZVR5cGU9InQ6RGVjaW1hbCIgdmFsdWU9IjI0LjAiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjMyIiBwYXRoPSJ2YWx1ZSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSIzMSIgbmFtZT0icGVyaW9kIiB4c2k6dHlwZT0iT3BlcmFuZFJlZiIvPgogICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgPC90aGVuPgogICAgICAgICAgICA8L2Nhc2VJdGVtPgogICAgICAgICAgICA8Y2FzZUl0ZW0gbG9jYWxJZD0iNDUiPgogICAgICAgICAgICAgICA8d2hlbiBsb2NhbElkPSIzNiIgdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9Im1pbiIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgPHRoZW4gbG9jYWxJZD0iNDQiIHhzaTp0eXBlPSJNdWx0aXBseSI+CiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjQyIiB4c2k6dHlwZT0iTXVsdGlwbHkiPgogICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCB4c2k6dHlwZT0iVG9EZWNpbWFsIj4KICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMzciIG5hbWU9ImZyZXF1ZW5jeSIgeHNpOnR5cGU9Ik9wZXJhbmRSZWYiLz4KICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI0MSIgeHNpOnR5cGU9IkRpdmlkZSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjM4IiB2YWx1ZVR5cGU9InQ6RGVjaW1hbCIgdmFsdWU9IjI0LjAiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjQwIiBwYXRoPSJ2YWx1ZSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSIzOSIgbmFtZT0icGVyaW9kIiB4c2k6dHlwZT0iT3BlcmFuZFJlZiIvPgogICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCB4c2k6dHlwZT0iVG9EZWNpbWFsIj4KICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNDMiIHZhbHVlVHlwZT0idDpJbnRlZ2VyIiB2YWx1ZT0iNjAiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgPC90aGVuPgogICAgICAgICAgICA8L2Nhc2VJdGVtPgogICAgICAgICAgICA8Y2FzZUl0ZW0gbG9jYWxJZD0iNTciPgogICAgICAgICAgICAgICA8d2hlbiBsb2NhbElkPSI0NiIgdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9InMiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgIDx0aGVuIGxvY2FsSWQ9IjU2IiB4c2k6dHlwZT0iTXVsdGlwbHkiPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI1NCIgeHNpOnR5cGU9Ik11bHRpcGx5Ij4KICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNTIiIHhzaTp0eXBlPSJNdWx0aXBseSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHhzaTp0eXBlPSJUb0RlY2ltYWwiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI0NyIgbmFtZT0iZnJlcXVlbmN5IiB4c2k6dHlwZT0iT3BlcmFuZFJlZiIvPgogICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjUxIiB4c2k6dHlwZT0iRGl2aWRlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNDgiIHZhbHVlVHlwZT0idDpEZWNpbWFsIiB2YWx1ZT0iMjQuMCIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNTAiIHBhdGg9InZhbHVlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjQ5IiBuYW1lPSJwZXJpb2QiIHhzaTp0eXBlPSJPcGVyYW5kUmVmIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHhzaTp0eXBlPSJUb0RlY2ltYWwiPgogICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI1MyIgdmFsdWVUeXBlPSJ0OkludGVnZXIiIHZhbHVlPSI2MCIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHhzaTp0eXBlPSJUb0RlY2ltYWwiPgogICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI1NSIgdmFsdWVUeXBlPSJ0OkludGVnZXIiIHZhbHVlPSI2MCIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICA8L3RoZW4+CiAgICAgICAgICAgIDwvY2FzZUl0ZW0+CiAgICAgICAgICAgIDxjYXNlSXRlbSBsb2NhbElkPSI2NyI+CiAgICAgICAgICAgICAgIDx3aGVuIGxvY2FsSWQ9IjU4IiB2YWx1ZVR5cGU9InQ6U3RyaW5nIiB2YWx1ZT0iZCIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgPHRoZW4gbG9jYWxJZD0iNjYiIHhzaTp0eXBlPSJEaXZpZGUiPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI2NCIgeHNpOnR5cGU9Ik11bHRpcGx5Ij4KICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgeHNpOnR5cGU9IlRvRGVjaW1hbCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjU5IiBuYW1lPSJmcmVxdWVuY3kiIHhzaTp0eXBlPSJPcGVyYW5kUmVmIi8+CiAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNjMiIHhzaTp0eXBlPSJEaXZpZGUiPgogICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI2MCIgdmFsdWVUeXBlPSJ0OkRlY2ltYWwiIHZhbHVlPSIyNC4wIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI2MiIgcGF0aD0idmFsdWUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iNjEiIG5hbWU9InBlcmlvZCIgeHNpOnR5cGU9Ik9wZXJhbmRSZWYiLz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgeHNpOnR5cGU9IlRvRGVjaW1hbCI+CiAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjY1IiB2YWx1ZVR5cGU9InQ6SW50ZWdlciIgdmFsdWU9IjI0IiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgIDwvdGhlbj4KICAgICAgICAgICAgPC9jYXNlSXRlbT4KICAgICAgICAgICAgPGNhc2VJdGVtIGxvY2FsSWQ9Ijc5Ij4KICAgICAgICAgICAgICAgPHdoZW4gbG9jYWxJZD0iNjgiIHZhbHVlVHlwZT0idDpTdHJpbmciIHZhbHVlPSJ3ayIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgPHRoZW4gbG9jYWxJZD0iNzgiIHhzaTp0eXBlPSJEaXZpZGUiPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI3NCIgeHNpOnR5cGU9Ik11bHRpcGx5Ij4KICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgeHNpOnR5cGU9IlRvRGVjaW1hbCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjY5IiBuYW1lPSJmcmVxdWVuY3kiIHhzaTp0eXBlPSJPcGVyYW5kUmVmIi8+CiAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNzMiIHhzaTp0eXBlPSJEaXZpZGUiPgogICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI3MCIgdmFsdWVUeXBlPSJ0OkRlY2ltYWwiIHZhbHVlPSIyNC4wIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI3MiIgcGF0aD0idmFsdWUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iNzEiIG5hbWU9InBlcmlvZCIgeHNpOnR5cGU9Ik9wZXJhbmRSZWYiLz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgeHNpOnR5cGU9IlRvRGVjaW1hbCI+CiAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9Ijc3IiB4c2k6dHlwZT0iTXVsdGlwbHkiPgogICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI3NSIgdmFsdWVUeXBlPSJ0OkludGVnZXIiIHZhbHVlPSIyNCIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNzYiIHZhbHVlVHlwZT0idDpJbnRlZ2VyIiB2YWx1ZT0iNyIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgIDwvdGhlbj4KICAgICAgICAgICAgPC9jYXNlSXRlbT4KICAgICAgICAgICAgPGNhc2VJdGVtIGxvY2FsSWQ9IjkxIj4KICAgICAgICAgICAgICAgPHdoZW4gbG9jYWxJZD0iODAiIHZhbHVlVHlwZT0idDpTdHJpbmciIHZhbHVlPSJtbyIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgPHRoZW4gbG9jYWxJZD0iOTAiIHhzaTp0eXBlPSJEaXZpZGUiPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI4NiIgeHNpOnR5cGU9Ik11bHRpcGx5Ij4KICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgeHNpOnR5cGU9IlRvRGVjaW1hbCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjgxIiBuYW1lPSJmcmVxdWVuY3kiIHhzaTp0eXBlPSJPcGVyYW5kUmVmIi8+CiAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iODUiIHhzaTp0eXBlPSJEaXZpZGUiPgogICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI4MiIgdmFsdWVUeXBlPSJ0OkRlY2ltYWwiIHZhbHVlPSIyNC4wIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI4NCIgcGF0aD0idmFsdWUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iODMiIG5hbWU9InBlcmlvZCIgeHNpOnR5cGU9Ik9wZXJhbmRSZWYiLz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgeHNpOnR5cGU9IlRvRGVjaW1hbCI+CiAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9Ijg5IiB4c2k6dHlwZT0iTXVsdGlwbHkiPgogICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI4NyIgdmFsdWVUeXBlPSJ0OkludGVnZXIiIHZhbHVlPSIyNCIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iODgiIHZhbHVlVHlwZT0idDpJbnRlZ2VyIiB2YWx1ZT0iMzAiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICA8L3RoZW4+CiAgICAgICAgICAgIDwvY2FzZUl0ZW0+CiAgICAgICAgICAgIDxjYXNlSXRlbSBsb2NhbElkPSIxMDMiPgogICAgICAgICAgICAgICA8d2hlbiBsb2NhbElkPSI5MiIgdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9ImEiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgIDx0aGVuIGxvY2FsSWQ9IjEwMiIgeHNpOnR5cGU9IkRpdmlkZSI+CiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9Ijk4IiB4c2k6dHlwZT0iTXVsdGlwbHkiPgogICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCB4c2k6dHlwZT0iVG9EZWNpbWFsIj4KICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iOTMiIG5hbWU9ImZyZXF1ZW5jeSIgeHNpOnR5cGU9Ik9wZXJhbmRSZWYiLz4KICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI5NyIgeHNpOnR5cGU9IkRpdmlkZSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9Ijk0IiB2YWx1ZVR5cGU9InQ6RGVjaW1hbCIgdmFsdWU9IjI0LjAiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9Ijk2IiBwYXRoPSJ2YWx1ZSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSI5NSIgbmFtZT0icGVyaW9kIiB4c2k6dHlwZT0iT3BlcmFuZFJlZiIvPgogICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCB4c2k6dHlwZT0iVG9EZWNpbWFsIj4KICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMTAxIiB4c2k6dHlwZT0iTXVsdGlwbHkiPgogICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI5OSIgdmFsdWVUeXBlPSJ0OkludGVnZXIiIHZhbHVlPSIyNCIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMTAwIiB2YWx1ZVR5cGU9InQ6SW50ZWdlciIgdmFsdWU9IjM2NSIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgIDwvdGhlbj4KICAgICAgICAgICAgPC9jYXNlSXRlbT4KICAgICAgICAgICAgPGVsc2UgYXNUeXBlPSJ0OkRlY2ltYWwiIHhzaTp0eXBlPSJBcyI+CiAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjEwNCIgeHNpOnR5cGU9Ik51bGwiLz4KICAgICAgICAgICAgICAgPGFzVHlwZVNwZWNpZmllciBuYW1lPSJ0OkRlY2ltYWwiIHhzaTp0eXBlPSJOYW1lZFR5cGVTcGVjaWZpZXIiLz4KICAgICAgICAgICAgPC9lbHNlPgogICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgICAgIDxvcGVyYW5kIG5hbWU9ImZyZXF1ZW5jeSI+CiAgICAgICAgICAgIDxvcGVyYW5kVHlwZVNwZWNpZmllciBsb2NhbElkPSIyNCIgbmFtZT0idDpJbnRlZ2VyIiB4c2k6dHlwZT0iTmFtZWRUeXBlU3BlY2lmaWVyIi8+CiAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgPG9wZXJhbmQgbmFtZT0icGVyaW9kIj4KICAgICAgICAgICAgPG9wZXJhbmRUeXBlU3BlY2lmaWVyIGxvY2FsSWQ9IjI1IiBuYW1lPSJ0OlF1YW50aXR5IiB4c2k6dHlwZT0iTmFtZWRUeXBlU3BlY2lmaWVyIi8+CiAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgPC9kZWY+CiAgICAgIDxkZWYgbG9jYWxJZD0iMTEzIiBuYW1lPSJJc1BhdGNoIiBjb250ZXh0PSJQYXRpZW50IiBhY2Nlc3NMZXZlbD0iUHVibGljIiB4c2k6dHlwZT0iRnVuY3Rpb25EZWYiPgogICAgICAgICA8YW5ub3RhdGlvbiB4c2k6dHlwZT0iYTpBbm5vdGF0aW9uIj4KICAgICAgICAgICAgPGE6cyByPSIxMTMiPgogICAgICAgICAgICAgICA8YTpzPmRlZmluZSBmdW5jdGlvbiBJc1BhdGNoKGRvc2VGb3JtQ29kZSA8L2E6cz4KICAgICAgICAgICAgICAgPGE6cyByPSIxMDciPgogICAgICAgICAgICAgICAgICA8YTpzPkNvZGU8L2E6cz4KICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgIDxhOnM+KToKICA8L2E6cz4KICAgICAgICAgICAgICAgPGE6cyByPSIxMTIiPgogICAgICAgICAgICAgICAgICA8YTpzIHI9IjExMiI+CiAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTEwIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5Ub0ludGVnZXIoPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTA5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxMDgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPmRvc2VGb3JtQ29kZTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTA5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5jb2RlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4pPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzPiA9IDMxNjk4NzwvYTpzPgogICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgIDwvYTpzPgogICAgICAgICA8L2Fubm90YXRpb24+CiAgICAgICAgIDxleHByZXNzaW9uIGxvY2FsSWQ9IjExMiIgeHNpOnR5cGU9IkVxdWFsIj4KICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMTEwIiB4c2k6dHlwZT0iVG9JbnRlZ2VyIj4KICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMTA5IiBwYXRoPSJjb2RlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjEwOCIgbmFtZT0iZG9zZUZvcm1Db2RlIiB4c2k6dHlwZT0iT3BlcmFuZFJlZiIvPgogICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMTExIiB2YWx1ZVR5cGU9InQ6SW50ZWdlciIgdmFsdWU9IjMxNjk4NyIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICAgICA8b3BlcmFuZCBuYW1lPSJkb3NlRm9ybUNvZGUiPgogICAgICAgICAgICA8b3BlcmFuZFR5cGVTcGVjaWZpZXIgbG9jYWxJZD0iMTA3IiBuYW1lPSJ0OkNvZGUiIHhzaTp0eXBlPSJOYW1lZFR5cGVTcGVjaWZpZXIiLz4KICAgICAgICAgPC9vcGVyYW5kPgogICAgICA8L2RlZj4KICAgICAgPGRlZiBsb2NhbElkPSIzMjEiIG5hbWU9IkdldENvbnZlcnNpb25GYWN0b3IiIGNvbnRleHQ9IlBhdGllbnQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiIHhzaTp0eXBlPSJGdW5jdGlvbkRlZiI+CiAgICAgICAgIDxhbm5vdGF0aW9uIHhzaTp0eXBlPSJhOkFubm90YXRpb24iPgogICAgICAgICAgICA8YTpzIHI9IjMyMSI+CiAgICAgICAgICAgICAgIDxhOnM+ZGVmaW5lIGZ1bmN0aW9uIEdldENvbnZlcnNpb25GYWN0b3IoaW5ncmVkaWVudENvZGUgPC9hOnM+CiAgICAgICAgICAgICAgIDxhOnMgcj0iMTE0Ij4KICAgICAgICAgICAgICAgICAgPGE6cz5Db2RlPC9hOnM+CiAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICA8YTpzPiwgZGFpbHlEb3NlIDwvYTpzPgogICAgICAgICAgICAgICA8YTpzIHI9IjExNSI+CiAgICAgICAgICAgICAgICAgIDxhOnM+UXVhbnRpdHk8L2E6cz4KICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgIDxhOnM+LCBkb3NlRm9ybUNvZGUgPC9hOnM+CiAgICAgICAgICAgICAgIDxhOnMgcj0iMTE2Ij4KICAgICAgICAgICAgICAgICAgPGE6cz5Db2RlPC9hOnM+CiAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICA8YTpzPik6CiAgPC9hOnM+CiAgICAgICAgICAgICAgIDxhOnMgcj0iMzIwIj4KICAgICAgICAgICAgICAgICAgPGE6cyByPSIzMjAiPgogICAgICAgICAgICAgICAgICAgICA8YTpzPmNhc2UgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTE5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5Ub0ludGVnZXIoPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTE4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxMTciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPmluZ3JlZGllbnRDb2RlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxMTgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPmNvZGU8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPik8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+CiAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxMjIiPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPndoZW4gMTYxIHRoZW4gMDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4gLy8JQWNldGFtaW5vcGhlbgogICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTI1Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz53aGVuIDExOTEgdGhlbiAwPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzPiAvLwlBc3BpcmluCiAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxMjgiPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPndoZW4gMTIyMyB0aGVuIDA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+IC8vCUF0cm9waW5lCiAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxMzEiPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPndoZW4gMTc2NyB0aGVuIDA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+IC8vCUJyb21waGVuaXJhbWluZQogICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTQyIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz53aGVuIDE4MTkgdGhlbiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxNDEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiggLy8JQnVwcmVub3JwaGluZQogICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxNDEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPmNhc2UgCiAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTM5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz53aGVuIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjEzNyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTM1Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5Ub0ludGVnZXIoPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTM0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxMzMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPmRvc2VGb3JtQ29kZTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTM0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5jb2RlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4pPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiA9IDMxNjk4NzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gdGhlbiAxMi42PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiAvLyBUcmFuc2Rlcm1hbCBzeXN0ZW0KICAgICAgICBlbHNlIDMwIC8vIFRhYmxldCBvciBGaWxtIChvciBGaWxtIGluIE1DRykKICAgICAgZW5kPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgogICAgKTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+IAogICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTQ1Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz53aGVuIDE4NDEgdGhlbiA3PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzPiAvLwlCdXRvcnBoYW5vbAogICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTQ4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz53aGVuIDE4ODYgdGhlbiAwPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzPiAvLwlDYWZmZWluZQogICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTUxIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz53aGVuIDIxMDEgdGhlbiAwPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzPiAvLwlDYXJpc29wcm9kb2wKICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE1NCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+d2hlbiAyMzU0IHRoZW4gMDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4gLy8JY2hsb3JjeWNsaXppbmUKICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE1NyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+d2hlbiAyNDAwIHRoZW4gMDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4gLy8JQ2hsb3JwaGVuaXJhbWluZQogICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTYwIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz53aGVuIDI2NzAgdGhlbiAwLjE1PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzPiAvLwlDb2RlaW5lCiAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxNjMiPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPndoZW4gMzQyMyB0aGVuIDQ8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+IC8vCUh5ZHJvbW9ycGhvbmUKICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE2NiI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+d2hlbiAzNDk4IHRoZW4gMDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4gLy8JRGlwaGVuaHlkcmFtaW5lCiAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMDAiPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPndoZW4gNDMzNyB0aGVuIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE5OSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+KCAvLwlGZW50YW55bAogICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxOTkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPmNhc2UKICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxNzciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPndoZW4gPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTc1Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxNzAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPlRvSW50ZWdlcig8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxNjkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE2OCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+ZG9zZUZvcm1Db2RlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxNjkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPmNvZGU8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPik8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+IGluIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE3NCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+eyA5NzA3ODksIDMxNzAwNywgMzE2OTkyIH08L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiB0aGVuIDAuMTM8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+IC8vIEJ1Y2NhbCBUYWJsZXQsIFN1Ymxpbmd1YWwgVGFibGV0LCBPcmFsIExvemVuZ2UKICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxODQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPndoZW4gPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTgyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxODAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPlRvSW50ZWdlcig8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxNzkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE3OCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+ZG9zZUZvcm1Db2RlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxNzkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPmNvZGU8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPik8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+ID0gMzQ2MTYzPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiB0aGVuIDAuMTg8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+IC8vIEJ1Y2NhbCBGaWxtCiAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTkzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz53aGVuIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE5MSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTg3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5Ub0ludGVnZXIoPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTg2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxODUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPmRvc2VGb3JtQ29kZTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTg2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5jb2RlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4pPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiBpbiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxOTAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnsgMTI2NTQyLCAzNDYxNjMgfTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+IHRoZW4gMC4xNjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gLy8gTmFzYWwgU3ByYXksIE11Y29zYWwgU3ByYXkKICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxOTciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPndoZW4gPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTk1Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5Jc1BhdGNoKDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE5NCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+ZG9zZUZvcm1Db2RlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPik8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+IHRoZW4gNy4yPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiAvLyBUcmFuc2Rlcm1hbCBzeXN0ZW0KICAgICAgICBlbHNlIDEwMDAgLy8gUmVhbGx5IG91Z2h0IHRvIGJlIGFuIGVycm9yIGJlY2F1c2UgaXQgcmVwcmVzZW50cyBhIHByZXZpb3VzbHkgdW5lbmNvdW50ZXJlZCBkb3NlIGZvcm0uLi4uCiAgICAgIGVuZDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KICAgICk8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzPgogICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjAzIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz53aGVuIDUwMzIgdGhlbiAwPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzPiAvLwlHdWFpZmVuZXNpbgogICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjA2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz53aGVuIDU0ODkgdGhlbiAxPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzPiAvLwlIeWRyb2NvZG9uZQogICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjA5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz53aGVuIDU2NDAgdGhlbiAwPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzPiAvLwlJYnVwcm9mZW4KICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjIxMiI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+d2hlbiA2MTAyIHRoZW4gMDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4gLy8JS2FvbGluCiAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMTUiPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPndoZW4gNjM3OCB0aGVuIDExPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzPiAvLwlMZXZvcnBoYW5vbCAoTk9URTogR2l2ZW4gYXMgTGV2b3JwaGFub2wgdGFydHJhdGUgaW4gdGhlIENEQyBjb252ZXJzaW9uIHRhYmxlKQogICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjE4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz53aGVuIDY3NTQgdGhlbiAwLjE8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+IC8vCU1lcGVyaWRpbmUKICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI0OSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+d2hlbiA2ODEzIHRoZW4gPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjQ4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4oIC8vCU1ldGhhZG9uZQogICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyNDgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPmNhc2UKICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMjYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPndoZW4gPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjI0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMjEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjIyMCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+ZGFpbHlEb3NlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMjEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnZhbHVlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gYmV0d2VlbiAxIGFuZCAyMDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gdGhlbiA0PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgogICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjIzMyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+d2hlbiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMzEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjIyOCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjI3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5kYWlseURvc2U8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjIyOCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+dmFsdWU8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiBiZXR3ZWVuIDIxIGFuZCA0MDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gdGhlbiA4PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgogICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI0MCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+d2hlbiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMzgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjIzNSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjM0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5kYWlseURvc2U8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjIzNSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+dmFsdWU8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiBiZXR3ZWVuIDQxIGFuZCA2MDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gdGhlbiAxMDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyNDYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPndoZW4gPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjQ0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyNDIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI0MSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+ZGFpbHlEb3NlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyNDIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnZhbHVlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gPj0gNjE8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+IHRoZW4gMTI8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CiAgICAgICAgZWxzZSAxMDAwIC8vIFJlYWxseSBvdWdodCB0byBiZSBhbiBlcnJvciBiZWNhdXNlIGl0IHJlcHJlc2VudHMgYW4gdW5leHBlY3RlZCBkb3NlIHJhbmdlLi4uCiAgICAgIGVuZDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KICAgICk8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzPgogICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjUyIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz53aGVuIDcwNTIgdGhlbiAxPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzPiAvLwlNb3JwaGluZQogICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjU1Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz53aGVuIDcyNDIgdGhlbiAwPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzPiAvLwlOYWxveG9uZQogICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjU4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz53aGVuIDcyNDMgdGhlbiAwPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzPiAvLwlOYWx0cmV4b25lCiAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyNjEiPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPndoZW4gNzgwNCB0aGVuIDEuNTwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4gLy8JT3h5Y29kb25lCiAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyNjQiPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPndoZW4gNzgxNCB0aGVuIDM8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+IC8vCU94eW1vcnBob25lCiAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyNjciPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPndoZW4gODAwMSB0aGVuIDAuMzc8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+IC8vCVBlbnRhem9jaW5lCiAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyNzAiPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPndoZW4gODE2MyB0aGVuIDA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+IC8vCVBoZW55bGVwaHJpbmUKICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI3MyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+d2hlbiA4MTc1IHRoZW4gMDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4gLy8JUGhlbnlscHJvcGFub2xhbWluZQogICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjc2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz53aGVuIDg3NDUgdGhlbiAwPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzPiAvLwlQcm9tZXRoYXppbmUKICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI3OSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+d2hlbiA4ODk2IHRoZW4gMDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4gLy8JUHNldWRvZXBoZWRyaW5lCiAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyODIiPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPndoZW4gOTAwOSB0aGVuIDA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+IC8vCVB5cmlsYW1pbmUKICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI4NSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+d2hlbiAxMDY4OSB0aGVuIDAuMTwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4gLy8JVHJhbWFkb2wKICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI4OCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+d2hlbiAxMDg0OSB0aGVuIDA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+IC8vCVRyaXByb2xpZGluZQogICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjkxIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz53aGVuIDE5NzU5IHRoZW4gMDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4gLy8JYnJvbW9kaXBoZW5oeWRyYW1pbmUKICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI5NCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+d2hlbiAxOTg2MCB0aGVuIDA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+IC8vCWJ1dGFsYml0YWwKICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI5NyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+d2hlbiAyMjY5NiB0aGVuIDA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+IC8vCWRleGJyb21waGVuaXJhbWluZQogICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzAwIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz53aGVuIDIyNjk3IHRoZW4gMDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4gLy8JZGV4Y2hsb3JwaGVuaXJhbWluZQogICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzAzIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz53aGVuIDIzMDg4IHRoZW4gMC4yNTwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4gLy8JZGloeWRyb2NvZGVpbmUKICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjMwNiI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+d2hlbiAyNzA4NCB0aGVuIDA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+IC8vCWhvbWF0cm9waW5lCiAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzMDkiPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPndoZW4gMzU3ODAgdGhlbiAwPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzPiAvLwlyb3BpdmFjYWluZQogICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzEyIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz53aGVuIDIzNzAwNSB0aGVuIDg8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+IC8vCUxldm9tZXRoYWR5bCAoTk9URTogZ2l2ZW4gYXMgTGV2b21ldGhhZHlsIGFjZXRhdGUgaW4gdGhlIENEQyBjb252ZXJzaW9uIHRhYmxlKQogICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzE1Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz53aGVuIDYzNjgyNyB0aGVuIDA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+IC8vCWd1YWlhY29sc3VsZm9uYXRlCiAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzMTgiPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPndoZW4gNzg3MzkwIHRoZW4gMC40PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzPiAvLwl0YXBlbnRhZG9sCiAgICBlbHNlIDAKICBlbmQ8L2E6cz4KICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICA8L2E6cz4KICAgICAgICAgPC9hbm5vdGF0aW9uPgogICAgICAgICA8ZXhwcmVzc2lvbiBsb2NhbElkPSIzMjAiIHhzaTp0eXBlPSJDYXNlIj4KICAgICAgICAgICAgPGNvbXBhcmFuZCBsb2NhbElkPSIxMTkiIHhzaTp0eXBlPSJUb0ludGVnZXIiPgogICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIxMTgiIHBhdGg9ImNvZGUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iMTE3IiBuYW1lPSJpbmdyZWRpZW50Q29kZSIgeHNpOnR5cGU9Ik9wZXJhbmRSZWYiLz4KICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICA8L2NvbXBhcmFuZD4KICAgICAgICAgICAgPGNhc2VJdGVtIGxvY2FsSWQ9IjEyMiI+CiAgICAgICAgICAgICAgIDx3aGVuIGxvY2FsSWQ9IjEyMCIgdmFsdWVUeXBlPSJ0OkludGVnZXIiIHZhbHVlPSIxNjEiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgIDx0aGVuIHhzaTp0eXBlPSJUb0RlY2ltYWwiPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIxMjEiIHZhbHVlVHlwZT0idDpJbnRlZ2VyIiB2YWx1ZT0iMCIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgPC90aGVuPgogICAgICAgICAgICA8L2Nhc2VJdGVtPgogICAgICAgICAgICA8Y2FzZUl0ZW0gbG9jYWxJZD0iMTI1Ij4KICAgICAgICAgICAgICAgPHdoZW4gbG9jYWxJZD0iMTIzIiB2YWx1ZVR5cGU9InQ6SW50ZWdlciIgdmFsdWU9IjExOTEiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgIDx0aGVuIHhzaTp0eXBlPSJUb0RlY2ltYWwiPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIxMjQiIHZhbHVlVHlwZT0idDpJbnRlZ2VyIiB2YWx1ZT0iMCIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgPC90aGVuPgogICAgICAgICAgICA8L2Nhc2VJdGVtPgogICAgICAgICAgICA8Y2FzZUl0ZW0gbG9jYWxJZD0iMTI4Ij4KICAgICAgICAgICAgICAgPHdoZW4gbG9jYWxJZD0iMTI2IiB2YWx1ZVR5cGU9InQ6SW50ZWdlciIgdmFsdWU9IjEyMjMiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgIDx0aGVuIHhzaTp0eXBlPSJUb0RlY2ltYWwiPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIxMjciIHZhbHVlVHlwZT0idDpJbnRlZ2VyIiB2YWx1ZT0iMCIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgPC90aGVuPgogICAgICAgICAgICA8L2Nhc2VJdGVtPgogICAgICAgICAgICA8Y2FzZUl0ZW0gbG9jYWxJZD0iMTMxIj4KICAgICAgICAgICAgICAgPHdoZW4gbG9jYWxJZD0iMTI5IiB2YWx1ZVR5cGU9InQ6SW50ZWdlciIgdmFsdWU9IjE3NjciIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgIDx0aGVuIHhzaTp0eXBlPSJUb0RlY2ltYWwiPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIxMzAiIHZhbHVlVHlwZT0idDpJbnRlZ2VyIiB2YWx1ZT0iMCIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgPC90aGVuPgogICAgICAgICAgICA8L2Nhc2VJdGVtPgogICAgICAgICAgICA8Y2FzZUl0ZW0gbG9jYWxJZD0iMTQyIj4KICAgICAgICAgICAgICAgPHdoZW4gbG9jYWxJZD0iMTMyIiB2YWx1ZVR5cGU9InQ6SW50ZWdlciIgdmFsdWU9IjE4MTkiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgIDx0aGVuIGxvY2FsSWQ9IjE0MSIgeHNpOnR5cGU9IkNhc2UiPgogICAgICAgICAgICAgICAgICA8Y2FzZUl0ZW0gbG9jYWxJZD0iMTM5Ij4KICAgICAgICAgICAgICAgICAgICAgPHdoZW4gbG9jYWxJZD0iMTM3IiB4c2k6dHlwZT0iRXF1YWwiPgogICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIxMzUiIHhzaTp0eXBlPSJUb0ludGVnZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIxMzQiIHBhdGg9ImNvZGUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iMTMzIiBuYW1lPSJkb3NlRm9ybUNvZGUiIHhzaTp0eXBlPSJPcGVyYW5kUmVmIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIxMzYiIHZhbHVlVHlwZT0idDpJbnRlZ2VyIiB2YWx1ZT0iMzE2OTg3IiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICAgICAgICA8L3doZW4+CiAgICAgICAgICAgICAgICAgICAgIDx0aGVuIGxvY2FsSWQ9IjEzOCIgdmFsdWVUeXBlPSJ0OkRlY2ltYWwiIHZhbHVlPSIxMi42IiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICAgICA8L2Nhc2VJdGVtPgogICAgICAgICAgICAgICAgICA8ZWxzZSB4c2k6dHlwZT0iVG9EZWNpbWFsIj4KICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMTQwIiB2YWx1ZVR5cGU9InQ6SW50ZWdlciIgdmFsdWU9IjMwIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgI