WHO Clinical Care in Crisis Implementation Guide for Children
0.1.0 - ci-build

WHO Clinical Care in Crisis Implementation Guide for Children - Local Development build (v0.1.0). See the Directory of published versions

: ArmCircumferenceForAge - JSON Representation

Active as of 2023-10-04

Raw json | Download


{
  "resourceType" : "Library",
  "id" : "ArmCircumferenceForAge",
  "text" : {
    "status" : "generated",
    "div" : "<div xmlns=\"http://www.w3.org/1999/xhtml\"><h2>Related Artifacts</h2><table class=\"grid\"><tr><td>depends-on</td><td><a href=\"Library-anthrobase.html\">anthrobase</a></td></tr><tr><td>depends-on</td><td><code>http://fhir.org/guides/who/anc-cds/Library/FHIRHelpers</code></td></tr></table><h2>Parameters</h2><table class=\"grid\"><tr><td>zscore</td><td>in</td><td/><td/><td>decimal</td></tr><tr><td>Age</td><td>in</td><td/><td/><td>decimal</td></tr><tr><td>sex</td><td>in</td><td/><td/><td>decimal</td></tr><tr><td>generateArmCircumferenceFromAge</td><td>out</td><td/><td/><td>decimal</td></tr><tr><td>generateZScoreArmCircumferenceForAge</td><td>out</td><td/><td/><td>decimal</td></tr><tr><td>ZscoreArmCircumferenceForAgetables_s</td><td>out</td><td/><td/><td>decimal</td></tr><tr><td>ZscoreArmCircumferenceForAgetables_m</td><td>out</td><td/><td/><td>decimal</td></tr><tr><td>ZscoreArmCircumferenceForAgetables_l</td><td>out</td><td/><td/><td>decimal</td></tr></table><h2>Data Requirements</h2><table class=\"grid\"><tr><td colspan=\"2\"><b>Type</b>: <a href=\"http://hl7.org/fhir/R4/patient.html\">Patient</a> (<a href=\"http://hl7.org/fhir/R4/patient.html\">Patient</a>)</td></tr></table><h2>Contents</h2><p><code>text/cql</code></p><pre><code class=\"language-sql\">\nlibrary ArmCircumferenceForAge version '1.0.4'\nusing FHIR version '4.0.1'\ninclude anthrobase version '1.0.4' called base\ninclude FHIRHelpers version '4.0.1' called FHIRHelpers\n\n// Antrho library for ArmCircumferenceForAge  Z-Score from the acanthro files\ncodesystem &quot;administrative-gender&quot;: 'http://hl7.org/fhir/administrative-gender'\n//code &quot;Female&quot; : 'female' from &quot;administrative-gender&quot;  display 'Female'\n\n\ndefine ArmCircumferenceForAgeFemale:\n{\n\t{y:91.0,l:-0.1733,s:0.08262,m:13.0245},\n\t{y:98.0,l:-0.1733,s:0.08271,m:13.1107},\n\t{y:105.0,l:-0.1733,s:0.0828,m:13.1919},\n\t{y:112.0,l:-0.1733,s:0.08288,m:13.2679},\n\t{y:119.0,l:-0.1733,s:0.08296,m:13.3386},\n\t{y:126.0,l:-0.1733,s:0.08303,m:13.4039},\n\t{y:133.0,l:-0.1733,s:0.08309,m:13.4642},\n\t{y:140.0,l:-0.1733,s:0.08316,m:13.5197},\n\t{y:147.0,l:-0.1733,s:0.08321,m:13.5709},\n\t{y:154.0,l:-0.1733,s:0.08327,m:13.618},\n\t{y:161.0,l:-0.1733,s:0.08331,m:13.6616},\n\t{y:168.0,l:-0.1733,s:0.08336,m:13.7019},\n\t{y:175.0,l:-0.1733,s:0.0834,m:13.7394},\n\t{y:182.0,l:-0.1733,s:0.08343,m:13.7741},\n\t{y:197.0,l:-0.1733,s:0.08348,m:13.8407},\n\t{y:227.0,l:-0.1733,s:0.08352,m:13.9477},\n\t{y:257.0,l:-0.1733,s:0.08348,m:14.0292},\n\t{y:287.0,l:-0.1733,s:0.08335,m:14.0918},\n\t{y:317.0,l:-0.1733,s:0.08317,m:14.1413},\n\t{y:347.0,l:-0.1733,s:0.08295,m:14.1829},\n\t{y:377.0,l:-0.1733,s:0.0827,m:14.2215},\n\t{y:407.0,l:-0.1733,s:0.08244,m:14.2602},\n\t{y:437.0,l:-0.1733,s:0.08218,m:14.3009},\n\t{y:467.0,l:-0.1733,s:0.08194,m:14.3444},\n\t{y:497.0,l:-0.1733,s:0.08173,m:14.3913},\n\t{y:527.0,l:-0.1733,s:0.08154,m:14.442},\n\t{y:557.0,l:-0.1733,s:0.08139,m:14.4964},\n\t{y:587.0,l:-0.1733,s:0.08128,m:14.5544},\n\t{y:617.0,l:-0.1733,s:0.08121,m:14.616},\n\t{y:647.0,l:-0.1733,s:0.08118,m:14.6813},\n\t{y:677.0,l:-0.1733,s:0.08118,m:14.7501},\n\t{y:707.0,l:-0.1733,s:0.08122,m:14.8217},\n\t{y:737.0,l:-0.1733,s:0.08129,m:14.8957},\n\t{y:767.0,l:-0.1733,s:0.08138,m:14.9712},\n\t{y:797.0,l:-0.1733,s:0.0815,m:15.0468},\n\t{y:827.0,l:-0.1733,s:0.08164,m:15.1212},\n\t{y:857.0,l:-0.1733,s:0.08181,m:15.1928},\n\t{y:887.0,l:-0.1733,s:0.08199,m:15.2609},\n\t{y:917.0,l:-0.1733,s:0.0822,m:15.3248},\n\t{y:947.0,l:-0.1733,s:0.08243,m:15.3845},\n\t{y:977.0,l:-0.1733,s:0.08268,m:15.4405},\n\t{y:1007.0,l:-0.1733,s:0.08294,m:15.494},\n\t{y:1037.0,l:-0.1733,s:0.08323,m:15.5459},\n\t{y:1067.0,l:-0.1733,s:0.08353,m:15.597},\n\t{y:1097.0,l:-0.1733,s:0.08384,m:15.6477},\n\t{y:1127.0,l:-0.1733,s:0.08417,m:15.6983},\n\t{y:1157.0,l:-0.1733,s:0.08452,m:15.749},\n\t{y:1187.0,l:-0.1733,s:0.08487,m:15.7996},\n\t{y:1217.0,l:-0.1733,s:0.08524,m:15.85},\n\t{y:1247.0,l:-0.1733,s:0.08562,m:15.9001},\n\t{y:1277.0,l:-0.1733,s:0.086,m:15.9496},\n\t{y:1307.0,l:-0.1733,s:0.0864,m:15.9986},\n\t{y:1337.0,l:-0.1733,s:0.0868,m:16.0473},\n\t{y:1367.0,l:-0.1733,s:0.0872,m:16.0957},\n\t{y:1397.0,l:-0.1733,s:0.0876,m:16.1441},\n\t{y:1427.0,l:-0.1733,s:0.08801,m:16.1925},\n\t{y:1457.0,l:-0.1733,s:0.08842,m:16.2412},\n\t{y:1487.0,l:-0.1733,s:0.08884,m:16.2901},\n\t{y:1517.0,l:-0.1733,s:0.08925,m:16.3395},\n\t{y:1547.0,l:-0.1733,s:0.08966,m:16.3892},\n\t{y:1577.0,l:-0.1733,s:0.09008,m:16.4393},\n\t{y:1607.0,l:-0.1733,s:0.09049,m:16.4897},\n\t{y:1637.0,l:-0.1733,s:0.0909,m:16.5403},\n\t{y:1667.0,l:-0.1733,s:0.0913,m:16.5907},\n\t{y:1697.0,l:-0.1733,s:0.09171,m:16.641},\n\t{y:1727.0,l:-0.1733,s:0.09211,m:16.6908},\n\t{y:1757.0,l:-0.1733,s:0.09251,m:16.7402},\n\t{y:1787.0,l:-0.1733,s:0.0929,m:16.7891},\n\t{y:1817.0,l:-0.1733,s:0.09329,m:16.8377},\n\t{y:1847.0,l:-0.1733,s:0.09368,m:16.886}\n}\n\ndefine ArmCircumferenceForAgeMale:\n{\n\t{y:91.0,l:0.3933,s:0.07474,m:13.4779},\n\t{y:98.0,l:0.3821,s:0.07486,m:13.5607},\n\t{y:105.0,l:0.3714,s:0.07498,m:13.6392},\n\t{y:112.0,l:0.3611,s:0.07509,m:13.7134},\n\t{y:119.0,l:0.3513,s:0.07519,m:13.7834},\n\t{y:126.0,l:0.3418,s:0.0753,m:13.849},\n\t{y:133.0,l:0.3327,s:0.0754,m:13.9105},\n\t{y:140.0,l:0.3239,s:0.07549,m:13.9679},\n\t{y:147.0,l:0.3153,s:0.07559,m:14.0214},\n\t{y:154.0,l:0.307,s:0.07568,m:14.071},\n\t{y:161.0,l:0.299,s:0.07577,m:14.117},\n\t{y:168.0,l:0.2912,s:0.07585,m:14.1597},\n\t{y:175.0,l:0.2836,s:0.07593,m:14.1992},\n\t{y:182.0,l:0.2762,s:0.076,m:14.2358},\n\t{y:197.0,l:0.2609,s:0.07615,m:14.3053},\n\t{y:227.0,l:0.2325,s:0.0764,m:14.4135},\n\t{y:257.0,l:0.2064,s:0.07657,m:14.4907},\n\t{y:287.0,l:0.1822,s:0.0767,m:14.5471},\n\t{y:317.0,l:0.1596,s:0.07679,m:14.5902},\n\t{y:347.0,l:0.1384,s:0.07686,m:14.6256},\n\t{y:377.0,l:0.1184,s:0.07691,m:14.657},\n\t{y:407.0,l:0.0993,s:0.07696,m:14.687},\n\t{y:437.0,l:0.0812,s:0.077,m:14.7174},\n\t{y:467.0,l:0.0638,s:0.07704,m:14.7495},\n\t{y:497.0,l:0.0471,s:0.07708,m:14.7842},\n\t{y:527.0,l:0.0311,s:0.07711,m:14.8218},\n\t{y:557.0,l:0.0157,s:0.07714,m:14.8622},\n\t{y:587.0,l:0.0008,s:0.07718,m:14.9054},\n\t{y:617.0,l:-0.0136,s:0.07722,m:14.9519},\n\t{y:647.0,l:-0.0275,s:0.07727,m:15.0016},\n\t{y:677.0,l:-0.0411,s:0.07732,m:15.0542},\n\t{y:707.0,l:-0.0542,s:0.07739,m:15.1093},\n\t{y:737.0,l:-0.067,s:0.07748,m:15.1659},\n\t{y:767.0,l:-0.0795,s:0.07758,m:15.2231},\n\t{y:797.0,l:-0.0916,s:0.07769,m:15.2799},\n\t{y:827.0,l:-0.1035,s:0.07782,m:15.3354},\n\t{y:857.0,l:-0.115,s:0.07796,m:15.3892},\n\t{y:887.0,l:-0.1264,s:0.07812,m:15.4408},\n\t{y:917.0,l:-0.1374,s:0.0783,m:15.4901},\n\t{y:947.0,l:-0.1483,s:0.07848,m:15.537},\n\t{y:977.0,l:-0.1589,s:0.07868,m:15.5814},\n\t{y:1007.0,l:-0.1693,s:0.07889,m:15.6236},\n\t{y:1037.0,l:-0.1795,s:0.07911,m:15.6639},\n\t{y:1067.0,l:-0.1895,s:0.07934,m:15.7024},\n\t{y:1097.0,l:-0.1993,s:0.07957,m:15.7395},\n\t{y:1127.0,l:-0.209,s:0.07982,m:15.7755},\n\t{y:1157.0,l:-0.2185,s:0.08007,m:15.8105},\n\t{y:1187.0,l:-0.2278,s:0.08032,m:15.8449},\n\t{y:1217.0,l:-0.237,s:0.08058,m:15.8788},\n\t{y:1247.0,l:-0.246,s:0.08084,m:15.9122},\n\t{y:1277.0,l:-0.2549,s:0.0811,m:15.9451},\n\t{y:1307.0,l:-0.2637,s:0.08137,m:15.9778},\n\t{y:1337.0,l:-0.2723,s:0.08164,m:16.01},\n\t{y:1367.0,l:-0.2808,s:0.08192,m:16.0419},\n\t{y:1397.0,l:-0.2892,s:0.08219,m:16.0735},\n\t{y:1427.0,l:-0.2975,s:0.08247,m:16.1048},\n\t{y:1457.0,l:-0.3056,s:0.08275,m:16.1359},\n\t{y:1487.0,l:-0.3137,s:0.08303,m:16.1668},\n\t{y:1517.0,l:-0.3216,s:0.08331,m:16.1977},\n\t{y:1547.0,l:-0.3295,s:0.08359,m:16.2285},\n\t{y:1577.0,l:-0.3372,s:0.08387,m:16.2594},\n\t{y:1607.0,l:-0.3449,s:0.08415,m:16.2904},\n\t{y:1637.0,l:-0.3524,s:0.08444,m:16.3215},\n\t{y:1667.0,l:-0.3599,s:0.08472,m:16.3526},\n\t{y:1697.0,l:-0.3673,s:0.08501,m:16.3838},\n\t{y:1727.0,l:-0.3746,s:0.08529,m:16.415},\n\t{y:1757.0,l:-0.3818,s:0.08558,m:16.4463},\n\t{y:1787.0,l:-0.3889,s:0.08587,m:16.4778},\n\t{y:1817.0,l:-0.396,s:0.08615,m:16.5094},\n\t{y:1847.0,l:-0.4029,s:0.08644,m:16.541}\n}\n\n\n\n\ndefine function ZscoreArmCircumferenceForAgetables(sex String, age Decimal):\n\tif sex = 'female' then  \n        First(ArmCircumferenceForAgeFemale c where c.y = base.AgeToMini(age) )\n\telse \n        First(ArmCircumferenceForAgeMale c where  c.y = base.AgeToMini(age))\n            \ndefine function generateZScoreArmCircumferenceForAge(sex System.String, age System.Decimal, weight  System.Decimal)  : \n\t generateZScoreArmCircumferenceForAgedet(ZscoreArmCircumferenceForAgetables(sex,age), weight )\n\ndefine function generateZScoreArmCircumferenceForAgedet(row Tuple {y System.Decimal,l System.Decimal,s System.Decimal,m System.Decimal}, weight  System.Decimal):\n    if row is not null then \n        base.computeZScore(\n            weight,\n            row.m , \n            row.l ,\n            row.s \n        )\n    else null\n\n\ndefine function generateArmCircumferenceFromAge(sex System.String, age System.Decimal, zscore  System.Decimal) : \n\t generateArmCircumferenceFromAgedet(ZscoreArmCircumferenceForAgetables(sex,age),zscore  )\n\ndefine function generateArmCircumferenceFromAgedet(row Tuple {y System.Decimal,l System.Decimal,s System.Decimal,m System.Decimal},zscore  System.Decimal) : \n    if row is not null then \n        base.computeReverseZScore(\n            zscore,\n            row.m , \n            row.l ,\n            row.s \n        )\n    else null    \n\n    \n</code></pre></div>"
  },
  "url" : "https://fhir.dk.swisstph-mis.ch/matchbox/fhir/Library/ArmCircumferenceForAge",
  "version" : "0.1.0",
  "name" : "ArmCircumferenceForAge",
  "status" : "active",
  "type" : {
    "coding" : [
      {
        "system" : "http://hl7.org/fhir/ValueSet/library-type",
        "code" : "logic-library"
      }
    ]
  },
  "date" : "2023-10-04T12:32:21+00:00",
  "publisher" : "WHO",
  "contact" : [
    {
      "name" : "WHO",
      "telecom" : [
        {
          "system" : "url",
          "value" : "http://who.int"
        }
      ]
    }
  ],
  "relatedArtifact" : [
    {
      "type" : "depends-on",
      "resource" : "https://fhir.dk.swisstph-mis.ch/matchbox/fhir/Library/anthrobase"
    },
    {
      "type" : "depends-on",
      "resource" : "http://fhir.org/guides/who/anc-cds/Library/FHIRHelpers"
    }
  ],
  "parameter" : [
    {
      "name" : "zscore",
      "use" : "in",
      "type" : "decimal"
    },
    {
      "name" : "Age",
      "use" : "in",
      "type" : "decimal"
    },
    {
      "name" : "sex",
      "use" : "in",
      "type" : "decimal"
    },
    {
      "name" : "generateArmCircumferenceFromAge",
      "use" : "out",
      "type" : "decimal"
    },
    {
      "name" : "generateZScoreArmCircumferenceForAge",
      "use" : "out",
      "type" : "decimal"
    },
    {
      "name" : "ZscoreArmCircumferenceForAgetables_s",
      "use" : "out",
      "type" : "decimal"
    },
    {
      "name" : "ZscoreArmCircumferenceForAgetables_m",
      "use" : "out",
      "type" : "decimal"
    },
    {
      "name" : "ZscoreArmCircumferenceForAgetables_l",
      "use" : "out",
      "type" : "decimal"
    }
  ],
  "dataRequirement" : [
    {
      "type" : "Patient",
      "profile" : [
        "http://hl7.org/fhir/StructureDefinition/Patient"
      ]
    }
  ],
  "content" : [
    {
      "id" : "ig-loader-ArmCircumferenceForAge.cql",
      "contentType" : "text/cql",
      "data" : "CmxpYnJhcnkgQXJtQ2lyY3VtZmVyZW5jZUZvckFnZSB2ZXJzaW9uICcxLjAuNCcKdXNpbmcgRkhJUiB2ZXJzaW9uICc0LjAuMScKaW5jbHVkZSBhbnRocm9iYXNlIHZlcnNpb24gJzEuMC40JyBjYWxsZWQgYmFzZQppbmNsdWRlIEZISVJIZWxwZXJzIHZlcnNpb24gJzQuMC4xJyBjYWxsZWQgRkhJUkhlbHBlcnMKCi8vIEFudHJobyBsaWJyYXJ5IGZvciBBcm1DaXJjdW1mZXJlbmNlRm9yQWdlICBaLVNjb3JlIGZyb20gdGhlIGFjYW50aHJvIGZpbGVzCmNvZGVzeXN0ZW0gImFkbWluaXN0cmF0aXZlLWdlbmRlciI6ICdodHRwOi8vaGw3Lm9yZy9maGlyL2FkbWluaXN0cmF0aXZlLWdlbmRlcicKLy9jb2RlICJGZW1hbGUiIDogJ2ZlbWFsZScgZnJvbSAiYWRtaW5pc3RyYXRpdmUtZ2VuZGVyIiAgZGlzcGxheSAnRmVtYWxlJwoKCmRlZmluZSBBcm1DaXJjdW1mZXJlbmNlRm9yQWdlRmVtYWxlOgp7Cgl7eTo5MS4wLGw6LTAuMTczMyxzOjAuMDgyNjIsbToxMy4wMjQ1fSwKCXt5Ojk4LjAsbDotMC4xNzMzLHM6MC4wODI3MSxtOjEzLjExMDd9LAoJe3k6MTA1LjAsbDotMC4xNzMzLHM6MC4wODI4LG06MTMuMTkxOX0sCgl7eToxMTIuMCxsOi0wLjE3MzMsczowLjA4Mjg4LG06MTMuMjY3OX0sCgl7eToxMTkuMCxsOi0wLjE3MzMsczowLjA4Mjk2LG06MTMuMzM4Nn0sCgl7eToxMjYuMCxsOi0wLjE3MzMsczowLjA4MzAzLG06MTMuNDAzOX0sCgl7eToxMzMuMCxsOi0wLjE3MzMsczowLjA4MzA5LG06MTMuNDY0Mn0sCgl7eToxNDAuMCxsOi0wLjE3MzMsczowLjA4MzE2LG06MTMuNTE5N30sCgl7eToxNDcuMCxsOi0wLjE3MzMsczowLjA4MzIxLG06MTMuNTcwOX0sCgl7eToxNTQuMCxsOi0wLjE3MzMsczowLjA4MzI3LG06MTMuNjE4fSwKCXt5OjE2MS4wLGw6LTAuMTczMyxzOjAuMDgzMzEsbToxMy42NjE2fSwKCXt5OjE2OC4wLGw6LTAuMTczMyxzOjAuMDgzMzYsbToxMy43MDE5fSwKCXt5OjE3NS4wLGw6LTAuMTczMyxzOjAuMDgzNCxtOjEzLjczOTR9LAoJe3k6MTgyLjAsbDotMC4xNzMzLHM6MC4wODM0MyxtOjEzLjc3NDF9LAoJe3k6MTk3LjAsbDotMC4xNzMzLHM6MC4wODM0OCxtOjEzLjg0MDd9LAoJe3k6MjI3LjAsbDotMC4xNzMzLHM6MC4wODM1MixtOjEzLjk0Nzd9LAoJe3k6MjU3LjAsbDotMC4xNzMzLHM6MC4wODM0OCxtOjE0LjAyOTJ9LAoJe3k6Mjg3LjAsbDotMC4xNzMzLHM6MC4wODMzNSxtOjE0LjA5MTh9LAoJe3k6MzE3LjAsbDotMC4xNzMzLHM6MC4wODMxNyxtOjE0LjE0MTN9LAoJe3k6MzQ3LjAsbDotMC4xNzMzLHM6MC4wODI5NSxtOjE0LjE4Mjl9LAoJe3k6Mzc3LjAsbDotMC4xNzMzLHM6MC4wODI3LG06MTQuMjIxNX0sCgl7eTo0MDcuMCxsOi0wLjE3MzMsczowLjA4MjQ0LG06MTQuMjYwMn0sCgl7eTo0MzcuMCxsOi0wLjE3MzMsczowLjA4MjE4LG06MTQuMzAwOX0sCgl7eTo0NjcuMCxsOi0wLjE3MzMsczowLjA4MTk0LG06MTQuMzQ0NH0sCgl7eTo0OTcuMCxsOi0wLjE3MzMsczowLjA4MTczLG06MTQuMzkxM30sCgl7eTo1MjcuMCxsOi0wLjE3MzMsczowLjA4MTU0LG06MTQuNDQyfSwKCXt5OjU1Ny4wLGw6LTAuMTczMyxzOjAuMDgxMzksbToxNC40OTY0fSwKCXt5OjU4Ny4wLGw6LTAuMTczMyxzOjAuMDgxMjgsbToxNC41NTQ0fSwKCXt5OjYxNy4wLGw6LTAuMTczMyxzOjAuMDgxMjEsbToxNC42MTZ9LAoJe3k6NjQ3LjAsbDotMC4xNzMzLHM6MC4wODExOCxtOjE0LjY4MTN9LAoJe3k6Njc3LjAsbDotMC4xNzMzLHM6MC4wODExOCxtOjE0Ljc1MDF9LAoJe3k6NzA3LjAsbDotMC4xNzMzLHM6MC4wODEyMixtOjE0LjgyMTd9LAoJe3k6NzM3LjAsbDotMC4xNzMzLHM6MC4wODEyOSxtOjE0Ljg5NTd9LAoJe3k6NzY3LjAsbDotMC4xNzMzLHM6MC4wODEzOCxtOjE0Ljk3MTJ9LAoJe3k6Nzk3LjAsbDotMC4xNzMzLHM6MC4wODE1LG06MTUuMDQ2OH0sCgl7eTo4MjcuMCxsOi0wLjE3MzMsczowLjA4MTY0LG06MTUuMTIxMn0sCgl7eTo4NTcuMCxsOi0wLjE3MzMsczowLjA4MTgxLG06MTUuMTkyOH0sCgl7eTo4ODcuMCxsOi0wLjE3MzMsczowLjA4MTk5LG06MTUuMjYwOX0sCgl7eTo5MTcuMCxsOi0wLjE3MzMsczowLjA4MjIsbToxNS4zMjQ4fSwKCXt5Ojk0Ny4wLGw6LTAuMTczMyxzOjAuMDgyNDMsbToxNS4zODQ1fSwKCXt5Ojk3Ny4wLGw6LTAuMTczMyxzOjAuMDgyNjgsbToxNS40NDA1fSwKCXt5OjEwMDcuMCxsOi0wLjE3MzMsczowLjA4Mjk0LG06MTUuNDk0fSwKCXt5OjEwMzcuMCxsOi0wLjE3MzMsczowLjA4MzIzLG06MTUuNTQ1OX0sCgl7eToxMDY3LjAsbDotMC4xNzMzLHM6MC4wODM1MyxtOjE1LjU5N30sCgl7eToxMDk3LjAsbDotMC4xNzMzLHM6MC4wODM4NCxtOjE1LjY0Nzd9LAoJe3k6MTEyNy4wLGw6LTAuMTczMyxzOjAuMDg0MTcsbToxNS42OTgzfSwKCXt5OjExNTcuMCxsOi0wLjE3MzMsczowLjA4NDUyLG06MTUuNzQ5fSwKCXt5OjExODcuMCxsOi0wLjE3MzMsczowLjA4NDg3LG06MTUuNzk5Nn0sCgl7eToxMjE3LjAsbDotMC4xNzMzLHM6MC4wODUyNCxtOjE1Ljg1fSwKCXt5OjEyNDcuMCxsOi0wLjE3MzMsczowLjA4NTYyLG06MTUuOTAwMX0sCgl7eToxMjc3LjAsbDotMC4xNzMzLHM6MC4wODYsbToxNS45NDk2fSwKCXt5OjEzMDcuMCxsOi0wLjE3MzMsczowLjA4NjQsbToxNS45OTg2fSwKCXt5OjEzMzcuMCxsOi0wLjE3MzMsczowLjA4NjgsbToxNi4wNDczfSwKCXt5OjEzNjcuMCxsOi0wLjE3MzMsczowLjA4NzIsbToxNi4wOTU3fSwKCXt5OjEzOTcuMCxsOi0wLjE3MzMsczowLjA4NzYsbToxNi4xNDQxfSwKCXt5OjE0MjcuMCxsOi0wLjE3MzMsczowLjA4ODAxLG06MTYuMTkyNX0sCgl7eToxNDU3LjAsbDotMC4xNzMzLHM6MC4wODg0MixtOjE2LjI0MTJ9LAoJe3k6MTQ4Ny4wLGw6LTAuMTczMyxzOjAuMDg4ODQsbToxNi4yOTAxfSwKCXt5OjE1MTcuMCxsOi0wLjE3MzMsczowLjA4OTI1LG06MTYuMzM5NX0sCgl7eToxNTQ3LjAsbDotMC4xNzMzLHM6MC4wODk2NixtOjE2LjM4OTJ9LAoJe3k6MTU3Ny4wLGw6LTAuMTczMyxzOjAuMDkwMDgsbToxNi40MzkzfSwKCXt5OjE2MDcuMCxsOi0wLjE3MzMsczowLjA5MDQ5LG06MTYuNDg5N30sCgl7eToxNjM3LjAsbDotMC4xNzMzLHM6MC4wOTA5LG06MTYuNTQwM30sCgl7eToxNjY3LjAsbDotMC4xNzMzLHM6MC4wOTEzLG06MTYuNTkwN30sCgl7eToxNjk3LjAsbDotMC4xNzMzLHM6MC4wOTE3MSxtOjE2LjY0MX0sCgl7eToxNzI3LjAsbDotMC4xNzMzLHM6MC4wOTIxMSxtOjE2LjY5MDh9LAoJe3k6MTc1Ny4wLGw6LTAuMTczMyxzOjAuMDkyNTEsbToxNi43NDAyfSwKCXt5OjE3ODcuMCxsOi0wLjE3MzMsczowLjA5MjksbToxNi43ODkxfSwKCXt5OjE4MTcuMCxsOi0wLjE3MzMsczowLjA5MzI5LG06MTYuODM3N30sCgl7eToxODQ3LjAsbDotMC4xNzMzLHM6MC4wOTM2OCxtOjE2Ljg4Nn0KfQoKZGVmaW5lIEFybUNpcmN1bWZlcmVuY2VGb3JBZ2VNYWxlOgp7Cgl7eTo5MS4wLGw6MC4zOTMzLHM6MC4wNzQ3NCxtOjEzLjQ3Nzl9LAoJe3k6OTguMCxsOjAuMzgyMSxzOjAuMDc0ODYsbToxMy41NjA3fSwKCXt5OjEwNS4wLGw6MC4zNzE0LHM6MC4wNzQ5OCxtOjEzLjYzOTJ9LAoJe3k6MTEyLjAsbDowLjM2MTEsczowLjA3NTA5LG06MTMuNzEzNH0sCgl7eToxMTkuMCxsOjAuMzUxMyxzOjAuMDc1MTksbToxMy43ODM0fSwKCXt5OjEyNi4wLGw6MC4zNDE4LHM6MC4wNzUzLG06MTMuODQ5fSwKCXt5OjEzMy4wLGw6MC4zMzI3LHM6MC4wNzU0LG06MTMuOTEwNX0sCgl7eToxNDAuMCxsOjAuMzIzOSxzOjAuMDc1NDksbToxMy45Njc5fSwKCXt5OjE0Ny4wLGw6MC4zMTUzLHM6MC4wNzU1OSxtOjE0LjAyMTR9LAoJe3k6MTU0LjAsbDowLjMwNyxzOjAuMDc1NjgsbToxNC4wNzF9LAoJe3k6MTYxLjAsbDowLjI5OSxzOjAuMDc1NzcsbToxNC4xMTd9LAoJe3k6MTY4LjAsbDowLjI5MTIsczowLjA3NTg1LG06MTQuMTU5N30sCgl7eToxNzUuMCxsOjAuMjgzNixzOjAuMDc1OTMsbToxNC4xOTkyfSwKCXt5OjE4Mi4wLGw6MC4yNzYyLHM6MC4wNzYsbToxNC4yMzU4fSwKCXt5OjE5Ny4wLGw6MC4yNjA5LHM6MC4wNzYxNSxtOjE0LjMwNTN9LAoJe3k6MjI3LjAsbDowLjIzMjUsczowLjA3NjQsbToxNC40MTM1fSwKCXt5OjI1Ny4wLGw6MC4yMDY0LHM6MC4wNzY1NyxtOjE0LjQ5MDd9LAoJe3k6Mjg3LjAsbDowLjE4MjIsczowLjA3NjcsbToxNC41NDcxfSwKCXt5OjMxNy4wLGw6MC4xNTk2LHM6MC4wNzY3OSxtOjE0LjU5MDJ9LAoJe3k6MzQ3LjAsbDowLjEzODQsczowLjA3Njg2LG06MTQuNjI1Nn0sCgl7eTozNzcuMCxsOjAuMTE4NCxzOjAuMDc2OTEsbToxNC42NTd9LAoJe3k6NDA3LjAsbDowLjA5OTMsczowLjA3Njk2LG06MTQuNjg3fSwKCXt5OjQzNy4wLGw6MC4wODEyLHM6MC4wNzcsbToxNC43MTc0fSwKCXt5OjQ2Ny4wLGw6MC4wNjM4LHM6MC4wNzcwNCxtOjE0Ljc0OTV9LAoJe3k6NDk3LjAsbDowLjA0NzEsczowLjA3NzA4LG06MTQuNzg0Mn0sCgl7eTo1MjcuMCxsOjAuMDMxMSxzOjAuMDc3MTEsbToxNC44MjE4fSwKCXt5OjU1Ny4wLGw6MC4wMTU3LHM6MC4wNzcxNCxtOjE0Ljg2MjJ9LAoJe3k6NTg3LjAsbDowLjAwMDgsczowLjA3NzE4LG06MTQuOTA1NH0sCgl7eTo2MTcuMCxsOi0wLjAxMzYsczowLjA3NzIyLG06MTQuOTUxOX0sCgl7eTo2NDcuMCxsOi0wLjAyNzUsczowLjA3NzI3LG06MTUuMDAxNn0sCgl7eTo2NzcuMCxsOi0wLjA0MTEsczowLjA3NzMyLG06MTUuMDU0Mn0sCgl7eTo3MDcuMCxsOi0wLjA1NDIsczowLjA3NzM5LG06MTUuMTA5M30sCgl7eTo3MzcuMCxsOi0wLjA2NyxzOjAuMDc3NDgsbToxNS4xNjU5fSwKCXt5Ojc2Ny4wLGw6LTAuMDc5NSxzOjAuMDc3NTgsbToxNS4yMjMxfSwKCXt5Ojc5Ny4wLGw6LTAuMDkxNixzOjAuMDc3NjksbToxNS4yNzk5fSwKCXt5OjgyNy4wLGw6LTAuMTAzNSxzOjAuMDc3ODIsbToxNS4zMzU0fSwKCXt5Ojg1Ny4wLGw6LTAuMTE1LHM6MC4wNzc5NixtOjE1LjM4OTJ9LAoJe3k6ODg3LjAsbDotMC4xMjY0LHM6MC4wNzgxMixtOjE1LjQ0MDh9LAoJe3k6OTE3LjAsbDotMC4xMzc0LHM6MC4wNzgzLG06MTUuNDkwMX0sCgl7eTo5NDcuMCxsOi0wLjE0ODMsczowLjA3ODQ4LG06MTUuNTM3fSwKCXt5Ojk3Ny4wLGw6LTAuMTU4OSxzOjAuMDc4NjgsbToxNS41ODE0fSwKCXt5OjEwMDcuMCxsOi0wLjE2OTMsczowLjA3ODg5LG06MTUuNjIzNn0sCgl7eToxMDM3LjAsbDotMC4xNzk1LHM6MC4wNzkxMSxtOjE1LjY2Mzl9LAoJe3k6MTA2Ny4wLGw6LTAuMTg5NSxzOjAuMDc5MzQsbToxNS43MDI0fSwKCXt5OjEwOTcuMCxsOi0wLjE5OTMsczowLjA3OTU3LG06MTUuNzM5NX0sCgl7eToxMTI3LjAsbDotMC4yMDksczowLjA3OTgyLG06MTUuNzc1NX0sCgl7eToxMTU3LjAsbDotMC4yMTg1LHM6MC4wODAwNyxtOjE1LjgxMDV9LAoJe3k6MTE4Ny4wLGw6LTAuMjI3OCxzOjAuMDgwMzIsbToxNS44NDQ5fSwKCXt5OjEyMTcuMCxsOi0wLjIzNyxzOjAuMDgwNTgsbToxNS44Nzg4fSwKCXt5OjEyNDcuMCxsOi0wLjI0NixzOjAuMDgwODQsbToxNS45MTIyfSwKCXt5OjEyNzcuMCxsOi0wLjI1NDksczowLjA4MTEsbToxNS45NDUxfSwKCXt5OjEzMDcuMCxsOi0wLjI2MzcsczowLjA4MTM3LG06MTUuOTc3OH0sCgl7eToxMzM3LjAsbDotMC4yNzIzLHM6MC4wODE2NCxtOjE2LjAxfSwKCXt5OjEzNjcuMCxsOi0wLjI4MDgsczowLjA4MTkyLG06MTYuMDQxOX0sCgl7eToxMzk3LjAsbDotMC4yODkyLHM6MC4wODIxOSxtOjE2LjA3MzV9LAoJe3k6MTQyNy4wLGw6LTAuMjk3NSxzOjAuMDgyNDcsbToxNi4xMDQ4fSwKCXt5OjE0NTcuMCxsOi0wLjMwNTYsczowLjA4Mjc1LG06MTYuMTM1OX0sCgl7eToxNDg3LjAsbDotMC4zMTM3LHM6MC4wODMwMyxtOjE2LjE2Njh9LAoJe3k6MTUxNy4wLGw6LTAuMzIxNixzOjAuMDgzMzEsbToxNi4xOTc3fSwKCXt5OjE1NDcuMCxsOi0wLjMyOTUsczowLjA4MzU5LG06MTYuMjI4NX0sCgl7eToxNTc3LjAsbDotMC4zMzcyLHM6MC4wODM4NyxtOjE2LjI1OTR9LAoJe3k6MTYwNy4wLGw6LTAuMzQ0OSxzOjAuMDg0MTUsbToxNi4yOTA0fSwKCXt5OjE2MzcuMCxsOi0wLjM1MjQsczowLjA4NDQ0LG06MTYuMzIxNX0sCgl7eToxNjY3LjAsbDotMC4zNTk5LHM6MC4wODQ3MixtOjE2LjM1MjZ9LAoJe3k6MTY5Ny4wLGw6LTAuMzY3MyxzOjAuMDg1MDEsbToxNi4zODM4fSwKCXt5OjE3MjcuMCxsOi0wLjM3NDYsczowLjA4NTI5LG06MTYuNDE1fSwKCXt5OjE3NTcuMCxsOi0wLjM4MTgsczowLjA4NTU4LG06MTYuNDQ2M30sCgl7eToxNzg3LjAsbDotMC4zODg5LHM6MC4wODU4NyxtOjE2LjQ3Nzh9LAoJe3k6MTgxNy4wLGw6LTAuMzk2LHM6MC4wODYxNSxtOjE2LjUwOTR9LAoJe3k6MTg0Ny4wLGw6LTAuNDAyOSxzOjAuMDg2NDQsbToxNi41NDF9Cn0KCgoKCmRlZmluZSBmdW5jdGlvbiBac2NvcmVBcm1DaXJjdW1mZXJlbmNlRm9yQWdldGFibGVzKHNleCBTdHJpbmcsIGFnZSBEZWNpbWFsKToKCWlmIHNleCA9ICdmZW1hbGUnIHRoZW4gIAogICAgICAgIEZpcnN0KEFybUNpcmN1bWZlcmVuY2VGb3JBZ2VGZW1hbGUgYyB3aGVyZSBjLnkgPSBiYXNlLkFnZVRvTWluaShhZ2UpICkKCWVsc2UgCiAgICAgICAgRmlyc3QoQXJtQ2lyY3VtZmVyZW5jZUZvckFnZU1hbGUgYyB3aGVyZSAgYy55ID0gYmFzZS5BZ2VUb01pbmkoYWdlKSkKICAgICAgICAgICAgCmRlZmluZSBmdW5jdGlvbiBnZW5lcmF0ZVpTY29yZUFybUNpcmN1bWZlcmVuY2VGb3JBZ2Uoc2V4IFN5c3RlbS5TdHJpbmcsIGFnZSBTeXN0ZW0uRGVjaW1hbCwgd2VpZ2h0ICBTeXN0ZW0uRGVjaW1hbCkgIDogCgkgZ2VuZXJhdGVaU2NvcmVBcm1DaXJjdW1mZXJlbmNlRm9yQWdlZGV0KFpzY29yZUFybUNpcmN1bWZlcmVuY2VGb3JBZ2V0YWJsZXMoc2V4LGFnZSksIHdlaWdodCApCgpkZWZpbmUgZnVuY3Rpb24gZ2VuZXJhdGVaU2NvcmVBcm1DaXJjdW1mZXJlbmNlRm9yQWdlZGV0KHJvdyBUdXBsZSB7eSBTeXN0ZW0uRGVjaW1hbCxsIFN5c3RlbS5EZWNpbWFsLHMgU3lzdGVtLkRlY2ltYWwsbSBTeXN0ZW0uRGVjaW1hbH0sIHdlaWdodCAgU3lzdGVtLkRlY2ltYWwpOgogICAgaWYgcm93IGlzIG5vdCBudWxsIHRoZW4gCiAgICAgICAgYmFzZS5jb21wdXRlWlNjb3JlKAogICAgICAgICAgICB3ZWlnaHQsCiAgICAgICAgICAgIHJvdy5tICwgCiAgICAgICAgICAgIHJvdy5sICwKICAgICAgICAgICAgcm93LnMgCiAgICAgICAgKQogICAgZWxzZSBudWxsCgoKZGVmaW5lIGZ1bmN0aW9uIGdlbmVyYXRlQXJtQ2lyY3VtZmVyZW5jZUZyb21BZ2Uoc2V4IFN5c3RlbS5TdHJpbmcsIGFnZSBTeXN0ZW0uRGVjaW1hbCwgenNjb3JlICBTeXN0ZW0uRGVjaW1hbCkgOiAKCSBnZW5lcmF0ZUFybUNpcmN1bWZlcmVuY2VGcm9tQWdlZGV0KFpzY29yZUFybUNpcmN1bWZlcmVuY2VGb3JBZ2V0YWJsZXMoc2V4LGFnZSksenNjb3JlICApCgpkZWZpbmUgZnVuY3Rpb24gZ2VuZXJhdGVBcm1DaXJjdW1mZXJlbmNlRnJvbUFnZWRldChyb3cgVHVwbGUge3kgU3lzdGVtLkRlY2ltYWwsbCBTeXN0ZW0uRGVjaW1hbCxzIFN5c3RlbS5EZWNpbWFsLG0gU3lzdGVtLkRlY2ltYWx9LHpzY29yZSAgU3lzdGVtLkRlY2ltYWwpIDogCiAgICBpZiByb3cgaXMgbm90IG51bGwgdGhlbiAKICAgICAgICBiYXNlLmNvbXB1dGVSZXZlcnNlWlNjb3JlKAogICAgICAgICAgICB6c2NvcmUsCiAgICAgICAgICAgIHJvdy5tICwgCiAgICAgICAgICAgIHJvdy5sICwKICAgICAgICAgICAgcm93LnMgCiAgICAgICAgKQogICAgZWxzZSBudWxsICAgIAoKICAgIAo="
    }
  ]
}