dQM QICore Content Implementation Guide
2026.0.0 - CI Build
dQM QICore Content Implementation Guide, published by cqframework. This guide is not an authorized publication; it is the continuous build for version 2026.0.0 built by the FHIR (HL7® FHIR® Standard) CI Build. This version is based on the current content of https://github.com/cqframework/dqm-content-qicore-2026/ and changes regularly. See the Directory of published versions
| Page standards status: Informative | Maturity Level: 1 |
{
"resourceType" : "Library",
"id" : "BreastCancerScreeningDQMDraft",
"text" : {
"status" : "extensions",
"div" : "<div xmlns=\"http://www.w3.org/1999/xhtml\">\n <table class=\"narrative-table\">\n <tbody>\n<tr>\n\n\n<th colspan=\"2\" scope=\"row\" class=\"row-header\">Metadata</th>\n\n\n</tr>\n\n<tr>\n\n\n<th scope=\"row\" class=\"row-header\">Title</th>\n\n\n\n<td class=\"content-container\">Breast Cancer Screening DQM Draft</td>\n\n\n</tr>\n\n\n\n<tr>\n\n\n<th scope=\"row\" class=\"row-header\">Version</th>\n\n\n\n<td class=\"content-container\">2026.0.0</td>\n\n\n</tr>\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<tr>\n\n\n<th scope=\"row\" class=\"row-header\">Topic</th>\n\n\n\n<td class=\"content-container\">FHIR\n</td>\n\n\n</tr>\n\n<tr>\n\n\n<th scope=\"row\" class=\"row-header\">Topic</th>\n\n\n\n<td class=\"content-container\">CQL\n</td>\n\n\n</tr>\n\n\n\n\n\n\n\n\n\n\n\n\n\n<tr>\n\n\n<th scope=\"row\" class=\"row-header\">Description</th>\n\n\n\n<td class=\"content-container\"><div><p>BreastCancerScreeningDQMDraft logic.</p>\n</div></td>\n\n\n</tr>\n\n\n\n\n\n\n<tr>\n\n\n<th scope=\"row\" class=\"row-header\">Type</th>\n\n\n\n<td class=\"content-container\">\n logic-library from <a href=\"http://terminology.hl7.org/7.1.0/CodeSystem-library-type.html\">http://terminology.hl7.org/CodeSystem/library-type</a> \n\n\n</td>\n\n\n</tr>\n\n\n\n\n <tr>\n\n\n<th colspan=\"2\" scope=\"row\" class=\"row-header\">Library Content</th>\n\n\n</tr>\n \n \n <tr>\n <th scope=\"row\" class=\"row-header\">CQL Content</th>\n <td>\n <a name=\"cql-content\"> </a>\n <pre style=\"border: none;\" class=\"content-container highlight language-cql\"><code class=\"language-cql\">/*\nNOTE: For use by January 2026 Connectathon participants for internal use only. Not for use or distribution in commercial products.\n*/\nlibrary BreastCancerScreeningDQMDraft version '1.0.000'\n\nusing QICore version '7.0.2'\nusing USCore version '7.0.0'\nusing C4BB version '2.1.1'\nusing FHIR version '4.0.1'\n\ninclude hl7.fhir.uv.cql.FHIRHelpers version '4.0.1' called FHIRHelpers\ninclude hl7.fhir.uv.cql.FHIRCommon version '2.0.0' called FHIRCommon\ninclude hl7.fhir.us.cql.USCoreCommon called USCommon\ninclude QICoreCommon\n\ninclude SupplementalDataElements version '6.0.000' called SDE\ninclude AdultOutpatientEncounters version '5.0.000' called AdultOutpatientEncounters\ninclude Hospice version '7.0.000' called Hospice\ninclude Status version '2.0.000' called Status\ninclude PalliativeCare version '2.0.000' called PalliativeCare\ninclude AdvancedIllnessandFrailty version '2.0.000' called AIFrailLTCF\n\ncodesystem "ClaimTypeCodes": 'http://terminology.hl7.org/CodeSystem/claim-type'\ncodesystem "SNOMEDCT": 'http://snomed.info/sct'\n\nvalueset "Bilateral Mastectomy": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.198.12.1005'\nvalueset "History of bilateral mastectomy": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.198.12.1068'\nvalueset "Mammography": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.108.12.1018'\nvalueset "Status Post Left Mastectomy": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.198.12.1069'\nvalueset "Status Post Right Mastectomy": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.198.12.1070'\nvalueset "Unilateral Mastectomy Left": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.198.12.1133'\nvalueset "Unilateral Mastectomy Right": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.198.12.1134'\nvalueset "Unilateral Mastectomy": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.1285'\nvalueset "HCPCS Mammogram Codes": 'https://cms.madie.gov/ValueSet/HCPCS-Mammogram-Codes'\n\ncode "Female (finding)": '248152002' from "SNOMEDCT" display 'Female (finding)'\ncode "Entire left breast (body structure)": '361716006' from "SNOMEDCT" display 'Entire left breast (body structure)'\ncode "Entire right breast (body structure)": '361715005' from "SNOMEDCT" display 'Entire right breast (body structure)'\ncode "institutional": 'Institutional' from "ClaimTypeCodes"\ncode "professional": 'Professional' from "ClaimTypeCodes"\n\nparameter "Measurement Period" Interval<DateTime>\n default Interval[@2026-01-01T00:00:00, @2026-12-31T23:59:59]\n\ncontext Patient\n\ndefine "Initial Population":\n AgeInYearsAt(date from \n end of "Measurement Period"\n ) in Interval[42, 74]\n and Patient.sex().value = '248152002'\n and exists AdultOutpatientEncounters."Qualifying Encounters"\n\ndefine "Denominator":\n "Initial Population"\n\ndefine "Denominator Exclusions":\n "Is deceased during measurement period"\n or Hospice."Has Hospice Services"\n or ( ( exists ( "Right Mastectomy Diagnosis" )\n or exists ( "Right Mastectomy Procedure" )\n )\n and ( exists ( "Left Mastectomy Diagnosis" )\n or exists ( "Left Mastectomy Procedure" )\n )\n )\n or exists "Bilateral Mastectomy Diagnosis"\n or exists "Bilateral Mastectomy Procedure"\n or AIFrailLTCF."Is Age 66 or Older with Advanced Illness and Frailty"\n or AIFrailLTCF."Is Age 66 or Older Living Long Term in a Nursing Home"\n or PalliativeCare."Has Palliative Care in the Measurement Period"\n\n define "Is deceased during measurement period":\n Patient."Deceased during"("Measurement Period")\n\n define fluent function "Deceased during"(patient FHIR.Patient, duringPeriod Interval<System.DateTime>):\n if patient is null or duringPeriod is null or patient.deceased is null then false\n else \n patient."Deceased date"() during day of duringPeriod\n\ndefine fluent function "Deceased date"(patient FHIR.Patient):\n if patient is null then null\n else \n if patient.deceased is null then null\n else\n case \n when patient.deceased is FHIR.dateTime then \n date from (patient.deceased as FHIR.dateTime)\n else Message(null, true, 'BreastCancerScreeningDQMDraft.DeceasedDate.NotSupported', 'Error', 'Cannot determine deceased date because deceased is specified as a boolean')\n end\n\ndefine "Right Mastectomy Diagnosis":\n ( ([Condition: "Status Post Right Mastectomy"]).verified ( ) ) RightMastectomy\n where RightMastectomy.prevalenceInterval ( ) starts on or before end of "Measurement Period"\n\ndefine "Right Mastectomy Procedure":\n ( ( [QICore.Procedure: "Unilateral Mastectomy Right"]\n union [QICore.Procedure: "Unilateral Mastectomy"] UnilateralMastectomyProcedure \n where exists UnilateralMastectomyProcedure.bodySite S where S ~ "Entire right breast (body structure)" \n ).isProcedurePerformed ( ) ) UnilateralMastectomyRightPerformed\n where UnilateralMastectomyRightPerformed.performed.toInterval ( ) ends on or before end of "Measurement Period"\n\ndefine "Left Mastectomy Diagnosis":\n ( ( [Condition: "Status Post Left Mastectomy"] ).verified ( ) ) LeftMastectomy\n where LeftMastectomy.prevalenceInterval ( ) starts on or before end of "Measurement Period"\n\ndefine "Left Mastectomy Procedure":\n ( ( [QICore.Procedure: "Unilateral Mastectomy Left"] \n union [QICore.Procedure: "Unilateral Mastectomy"] UnilateralMastectomyProcedure\n where exists UnilateralMastectomyProcedure.bodySite S where S ~ "Entire left breast (body structure)"\n ).isProcedurePerformed ( ) ) UnilateralMastectomyLeftPerformed\n where UnilateralMastectomyLeftPerformed.performed.toInterval ( ) ends on or before end of "Measurement Period"\n\ndefine "Bilateral Mastectomy Diagnosis":\n ( ( [Condition: "History of bilateral mastectomy"] ).verified ( ) ) BilateralMastectomyHistory\n where BilateralMastectomyHistory.prevalenceInterval ( ) starts on or before end of "Measurement Period"\n\ndefine "Bilateral Mastectomy Procedure":\n ( ( [QICore.Procedure: "Bilateral Mastectomy"] ).isProcedurePerformed ( ) ) BilateralMastectomyPerformed\n where BilateralMastectomyPerformed.performed.toInterval ( ) ends on or before end of "Measurement Period"\n\ndefine "Numerator":\nexists "Mammography Observation"\n or exists "Mammography Claim"\n or exists "Mammography EOB"\n \n//Mammography Observation\ndefine "Mammography Observation":\n ( ( [ObservationClinicalResult: code in "Mammography"] ).isDiagnosticStudyPerformed ( ) ) Mammogram\n where Mammogram.effective.toInterval ( ) ends during day of Interval["October 1 Two Years Prior to the Measurement Period", end of "Measurement Period"] \n\ndefine "October 1 Two Years Prior to the Measurement Period":\n DateTime((year from start of "Measurement Period" - 2), 10, 1, 0, 0, 0, 0, 0)\n\n//Mammography Claim\ndefine "Mammography Claim":\n([QICore.Claim])."With mammography during"(\n Interval[date from "October 1 Two Years Prior to the Measurement Period", date from end of "Measurement Period"])\n\ndefine fluent function "With mammography during"(\n claims List<FHIR.Claim>,\n duringPeriod Interval<System.Date>\n):\n if duringPeriod is null then null\n else\n claims\n ."With product or service during"(\n "HCPCS Mammogram Codes",\n duringPeriod\n )\n\ndefine fluent function "With product or service during"(\n claims List<FHIR.Claim>, \n productOrServiceCodes System.ValueSet, \n duringPeriod Interval<Date>\n):\n if duringPeriod is null then null\n else \n (claims."Professional or institutional"()) singleClaim\n with (\n singleClaim.item\n ."Starts during"(duringPeriod)\n ) item\n such that item."Has product or service"(productOrServiceCodes)\n\ndefine fluent function "Has product or service"(item FHIR.Claim.Item, codes System.ValueSet):\n if item is null or item.productOrService is null then false\n else \n item.productOrService in codes\n\ndefine fluent function "Professional or institutional"(claims List<FHIR.Claim>):\n (claims) claim\n where claim.type ~ "institutional"\n or claim.type ~ "professional"\n\ndefine fluent function "Starts during"(items List<FHIR.Claim.Item>, interval Interval<Date>):\n if interval is null then null\n else \n (items) item\n where item."Serviced"() starts during interval\n\ndefine fluent function "Serviced"(item FHIR.Claim.Item):\n if item is null or item.serviced is null then null\n else \n case \n when item.serviced is FHIR.date then \n (item.serviced as FHIR.date)."Serviced internal"()\n when item.serviced is FHIR.Period then \n (item.serviced as FHIR.Period)."To date interval"()\n else null\n end\n\ndefine fluent function "Serviced internal"(serviced FHIR.date):\n if serviced is null then null\n else \n Interval[FHIRHelpers.ToDate(serviced), FHIRHelpers.ToDate(serviced)]\n\ndefine fluent function "To date interval"(period FHIR.Period):\n if period is null then null\n else \n Interval[date from period.start, date from period.end]\n\n//Mammography EOB\ndefine "Mammography EOB":\n([ExplanationOfBenefit])."With mammography during"(\n Interval[date from "October 1 Two Years Prior to the Measurement Period", date from end of "Measurement Period"])\n\ndefine fluent function "With mammography during"(\n eobs List<FHIR.ExplanationOfBenefit>,\n duringPeriod Interval<System.Date>\n):\n if duringPeriod is null then null\n else\n eobs\n ."With product or service during"(\n "HCPCS Mammogram Codes",\n duringPeriod\n )\n\ndefine fluent function "With product or service during"(\n eobs List<FHIR.ExplanationOfBenefit>, \n productOrServiceCodes System.ValueSet, \n duringPeriod Interval<Date>\n):\n if duringPeriod is null then null\n else \n ( eobs."Professional or institutional"() ) singleEob\n with (\n singleEob.item\n ."During"(duringPeriod)\n ) item\n such that item."Has product or service"(productOrServiceCodes)\n\ndefine fluent function "During"(items List<FHIR.ExplanationOfBenefit.Item>, interval Interval<Date>):\n if interval is null then null\n else \n (items) item\n where item."Serviced"() overlaps interval \n\ndefine fluent function "Serviced"(item FHIR.ExplanationOfBenefit.Item):\n if item is null or item.serviced is null then null\n else \n case \n when item.serviced is FHIR.date then \n (item.serviced as FHIR.date)."Serviced internal"()\n when item.serviced is FHIR.Period then \n (item.serviced as FHIR.Period)."To date interval"()\n else null\n end\n\ndefine fluent function "Has product or service"(item FHIR.ExplanationOfBenefit.Item, codes System.ValueSet):\n if item is null or item.productOrService is null then false\n else \n item.productOrService in codes\n\ndefine fluent function "Professional or institutional"(eobs List<FHIR.ExplanationOfBenefit>): \n (eobs) eob\n where eob.type ~ "institutional"\n or eob.type ~ "professional"\n\ndefine "SDE Ethnicity":\n SDE."SDE Ethnicity"\n\ndefine "SDE Payer":\n SDE."SDE Payer"\n\ndefine "SDE Race":\n SDE."SDE Race"\n\ndefine "SDE Sex":\n SDE."SDE Sex"\n\ndefine "Stratification 1":\n AgeInYearsAt(date from \n end of "Measurement Period"\n ) in Interval[42, 51]\n\ndefine "Stratification 2":\n AgeInYearsAt(date from \n end of "Measurement Period"\n ) in Interval[52, 74]\n</code></pre>\n </td>\n </tr>\n \n \n \n \n\n<tr>\n <th colspan=\"2\" scope=\"row\" class=\"row-header\">Generated using version 0.5.0 of the sample-content-ig Liquid templates</th>\n</tr>\n\n </tbody>\n </table>\n</div>"
},
"extension" : [
{
"url" : "http://hl7.org/fhir/StructureDefinition/structuredefinition-fmm",
"valueInteger" : 1
},
{
"url" : "http://hl7.org/fhir/StructureDefinition/structuredefinition-wg",
"valueCode" : "cds"
},
{
"url" : "http://hl7.org/fhir/StructureDefinition/structuredefinition-standards-status",
"valueCode" : "informative"
}
],
"url" : "https://madie.cms.gov/Library/BreastCancerScreeningDQMDraft",
"version" : "2026.0.0",
"name" : "BreastCancerScreeningDQMDraft",
"title" : "Breast Cancer Screening DQM Draft",
"status" : "active",
"experimental" : false,
"type" : {
"coding" : [
{
"system" : "http://terminology.hl7.org/CodeSystem/library-type",
"code" : "logic-library"
}
]
},
"date" : "2026-03-31T18:18:47+00:00",
"description" : "BreastCancerScreeningDQMDraft logic.",
"topic" : [
{
"text" : "FHIR"
},
{
"text" : "CQL"
}
],
"content" : [
{
"contentType" : "text/cql",
"data" : "LyoKTk9URTogRm9yIHVzZSBieSBKYW51YXJ5IDIwMjYgQ29ubmVjdGF0aG9uIHBhcnRpY2lwYW50cyBmb3IgaW50ZXJuYWwgdXNlIG9ubHkuIE5vdCBmb3IgdXNlIG9yIGRpc3RyaWJ1dGlvbiBpbiBjb21tZXJjaWFsIHByb2R1Y3RzLgoqLwpsaWJyYXJ5IEJyZWFzdENhbmNlclNjcmVlbmluZ0RRTURyYWZ0IHZlcnNpb24gJzEuMC4wMDAnCgp1c2luZyBRSUNvcmUgdmVyc2lvbiAnNy4wLjInCnVzaW5nIFVTQ29yZSB2ZXJzaW9uICc3LjAuMCcKdXNpbmcgQzRCQiB2ZXJzaW9uICcyLjEuMScKdXNpbmcgRkhJUiB2ZXJzaW9uICc0LjAuMScKCmluY2x1ZGUgaGw3LmZoaXIudXYuY3FsLkZISVJIZWxwZXJzIHZlcnNpb24gJzQuMC4xJyBjYWxsZWQgRkhJUkhlbHBlcnMKaW5jbHVkZSBobDcuZmhpci51di5jcWwuRkhJUkNvbW1vbiB2ZXJzaW9uICcyLjAuMCcgY2FsbGVkIEZISVJDb21tb24KaW5jbHVkZSBobDcuZmhpci51cy5jcWwuVVNDb3JlQ29tbW9uIGNhbGxlZCBVU0NvbW1vbgppbmNsdWRlIFFJQ29yZUNvbW1vbgoKaW5jbHVkZSBTdXBwbGVtZW50YWxEYXRhRWxlbWVudHMgdmVyc2lvbiAnNi4wLjAwMCcgY2FsbGVkIFNERQppbmNsdWRlIEFkdWx0T3V0cGF0aWVudEVuY291bnRlcnMgdmVyc2lvbiAnNS4wLjAwMCcgY2FsbGVkIEFkdWx0T3V0cGF0aWVudEVuY291bnRlcnMKaW5jbHVkZSBIb3NwaWNlIHZlcnNpb24gJzcuMC4wMDAnIGNhbGxlZCBIb3NwaWNlCmluY2x1ZGUgU3RhdHVzIHZlcnNpb24gJzIuMC4wMDAnIGNhbGxlZCBTdGF0dXMKaW5jbHVkZSBQYWxsaWF0aXZlQ2FyZSB2ZXJzaW9uICcyLjAuMDAwJyBjYWxsZWQgUGFsbGlhdGl2ZUNhcmUKaW5jbHVkZSBBZHZhbmNlZElsbG5lc3NhbmRGcmFpbHR5IHZlcnNpb24gJzIuMC4wMDAnIGNhbGxlZCBBSUZyYWlsTFRDRgoKY29kZXN5c3RlbSAiQ2xhaW1UeXBlQ29kZXMiOiAnaHR0cDovL3Rlcm1pbm9sb2d5LmhsNy5vcmcvQ29kZVN5c3RlbS9jbGFpbS10eXBlJwpjb2Rlc3lzdGVtICJTTk9NRURDVCI6ICdodHRwOi8vc25vbWVkLmluZm8vc2N0JwoKdmFsdWVzZXQgIkJpbGF0ZXJhbCBNYXN0ZWN0b215IjogJ2h0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzg4My4zLjQ2NC4xMDAzLjE5OC4xMi4xMDA1Jwp2YWx1ZXNldCAiSGlzdG9yeSBvZiBiaWxhdGVyYWwgbWFzdGVjdG9teSI6ICdodHRwOi8vY3RzLm5sbS5uaWguZ292L2ZoaXIvVmFsdWVTZXQvMi4xNi44NDAuMS4xMTM4ODMuMy40NjQuMTAwMy4xOTguMTIuMTA2OCcKdmFsdWVzZXQgIk1hbW1vZ3JhcGh5IjogJ2h0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzg4My4zLjQ2NC4xMDAzLjEwOC4xMi4xMDE4Jwp2YWx1ZXNldCAiU3RhdHVzIFBvc3QgTGVmdCBNYXN0ZWN0b215IjogJ2h0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzg4My4zLjQ2NC4xMDAzLjE5OC4xMi4xMDY5Jwp2YWx1ZXNldCAiU3RhdHVzIFBvc3QgUmlnaHQgTWFzdGVjdG9teSI6ICdodHRwOi8vY3RzLm5sbS5uaWguZ292L2ZoaXIvVmFsdWVTZXQvMi4xNi44NDAuMS4xMTM4ODMuMy40NjQuMTAwMy4xOTguMTIuMTA3MCcKdmFsdWVzZXQgIlVuaWxhdGVyYWwgTWFzdGVjdG9teSBMZWZ0IjogJ2h0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzg4My4zLjQ2NC4xMDAzLjE5OC4xMi4xMTMzJwp2YWx1ZXNldCAiVW5pbGF0ZXJhbCBNYXN0ZWN0b215IFJpZ2h0IjogJ2h0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzg4My4zLjQ2NC4xMDAzLjE5OC4xMi4xMTM0Jwp2YWx1ZXNldCAiVW5pbGF0ZXJhbCBNYXN0ZWN0b215IjogJ2h0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzg4My4zLjQ2NC4xMDAzLjEyODUnCnZhbHVlc2V0ICJIQ1BDUyBNYW1tb2dyYW0gQ29kZXMiOiAnaHR0cHM6Ly9jbXMubWFkaWUuZ292L1ZhbHVlU2V0L0hDUENTLU1hbW1vZ3JhbS1Db2RlcycKCmNvZGUgIkZlbWFsZSAoZmluZGluZykiOiAnMjQ4MTUyMDAyJyBmcm9tICJTTk9NRURDVCIgZGlzcGxheSAnRmVtYWxlIChmaW5kaW5nKScKY29kZSAiRW50aXJlIGxlZnQgYnJlYXN0IChib2R5IHN0cnVjdHVyZSkiOiAnMzYxNzE2MDA2JyBmcm9tICJTTk9NRURDVCIgZGlzcGxheSAnRW50aXJlIGxlZnQgYnJlYXN0IChib2R5IHN0cnVjdHVyZSknCmNvZGUgIkVudGlyZSByaWdodCBicmVhc3QgKGJvZHkgc3RydWN0dXJlKSI6ICczNjE3MTUwMDUnIGZyb20gIlNOT01FRENUIiBkaXNwbGF5ICdFbnRpcmUgcmlnaHQgYnJlYXN0IChib2R5IHN0cnVjdHVyZSknCmNvZGUgImluc3RpdHV0aW9uYWwiOiAnSW5zdGl0dXRpb25hbCcgZnJvbSAiQ2xhaW1UeXBlQ29kZXMiCmNvZGUgInByb2Zlc3Npb25hbCI6ICdQcm9mZXNzaW9uYWwnIGZyb20gIkNsYWltVHlwZUNvZGVzIgoKcGFyYW1ldGVyICJNZWFzdXJlbWVudCBQZXJpb2QiIEludGVydmFsPERhdGVUaW1lPgogIGRlZmF1bHQgSW50ZXJ2YWxbQDIwMjYtMDEtMDFUMDA6MDA6MDAsIEAyMDI2LTEyLTMxVDIzOjU5OjU5XQoKY29udGV4dCBQYXRpZW50CgpkZWZpbmUgIkluaXRpYWwgUG9wdWxhdGlvbiI6CiAgQWdlSW5ZZWFyc0F0KGRhdGUgZnJvbSAKICAgIGVuZCBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIgogICkgaW4gSW50ZXJ2YWxbNDIsIDc0XQogICAgYW5kIFBhdGllbnQuc2V4KCkudmFsdWUgPSAnMjQ4MTUyMDAyJwogICAgYW5kIGV4aXN0cyBBZHVsdE91dHBhdGllbnRFbmNvdW50ZXJzLiJRdWFsaWZ5aW5nIEVuY291bnRlcnMiCgpkZWZpbmUgIkRlbm9taW5hdG9yIjoKICAiSW5pdGlhbCBQb3B1bGF0aW9uIgoKZGVmaW5lICJEZW5vbWluYXRvciBFeGNsdXNpb25zIjoKICAiSXMgZGVjZWFzZWQgZHVyaW5nIG1lYXN1cmVtZW50IHBlcmlvZCIKICAgIG9yIEhvc3BpY2UuIkhhcyBIb3NwaWNlIFNlcnZpY2VzIgogICAgb3IgKCAoIGV4aXN0cyAoICJSaWdodCBNYXN0ZWN0b215IERpYWdub3NpcyIgKQogICAgICAgICAgb3IgZXhpc3RzICggIlJpZ2h0IE1hc3RlY3RvbXkgUHJvY2VkdXJlIiApCiAgICAgICkKICAgICAgICBhbmQgKCBleGlzdHMgKCAiTGVmdCBNYXN0ZWN0b215IERpYWdub3NpcyIgKQogICAgICAgICAgICBvciBleGlzdHMgKCAiTGVmdCBNYXN0ZWN0b215IFByb2NlZHVyZSIgKQogICAgICAgICkKICAgICkKICAgIG9yIGV4aXN0cyAiQmlsYXRlcmFsIE1hc3RlY3RvbXkgRGlhZ25vc2lzIgogICAgb3IgZXhpc3RzICJCaWxhdGVyYWwgTWFzdGVjdG9teSBQcm9jZWR1cmUiCiAgICBvciBBSUZyYWlsTFRDRi4iSXMgQWdlIDY2IG9yIE9sZGVyIHdpdGggQWR2YW5jZWQgSWxsbmVzcyBhbmQgRnJhaWx0eSIKICAgIG9yIEFJRnJhaWxMVENGLiJJcyBBZ2UgNjYgb3IgT2xkZXIgTGl2aW5nIExvbmcgVGVybSBpbiBhIE51cnNpbmcgSG9tZSIKICAgIG9yIFBhbGxpYXRpdmVDYXJlLiJIYXMgUGFsbGlhdGl2ZSBDYXJlIGluIHRoZSBNZWFzdXJlbWVudCBQZXJpb2QiCgogZGVmaW5lICJJcyBkZWNlYXNlZCBkdXJpbmcgbWVhc3VyZW1lbnQgcGVyaW9kIjoKICAgICBQYXRpZW50LiJEZWNlYXNlZCBkdXJpbmciKCJNZWFzdXJlbWVudCBQZXJpb2QiKQoKIGRlZmluZSBmbHVlbnQgZnVuY3Rpb24gIkRlY2Vhc2VkIGR1cmluZyIocGF0aWVudCBGSElSLlBhdGllbnQsIGR1cmluZ1BlcmlvZCBJbnRlcnZhbDxTeXN0ZW0uRGF0ZVRpbWU+KToKICAgICBpZiBwYXRpZW50IGlzIG51bGwgb3IgZHVyaW5nUGVyaW9kIGlzIG51bGwgb3IgcGF0aWVudC5kZWNlYXNlZCBpcyBudWxsIHRoZW4gZmFsc2UKICAgICBlbHNlIAogICAgICAgICBwYXRpZW50LiJEZWNlYXNlZCBkYXRlIigpIGR1cmluZyBkYXkgb2YgZHVyaW5nUGVyaW9kCgpkZWZpbmUgZmx1ZW50IGZ1bmN0aW9uICJEZWNlYXNlZCBkYXRlIihwYXRpZW50IEZISVIuUGF0aWVudCk6CiAgICAgaWYgcGF0aWVudCBpcyBudWxsIHRoZW4gbnVsbAogICAgIGVsc2UgCiAgICAgICAgIGlmIHBhdGllbnQuZGVjZWFzZWQgaXMgbnVsbCB0aGVuIG51bGwKICAgICAgICAgZWxzZQogICAgICAgICAgICAgY2FzZSAKICAgICAgICAgICAgICAgICB3aGVuIHBhdGllbnQuZGVjZWFzZWQgaXMgRkhJUi5kYXRlVGltZSB0aGVuIAogICAgICAgICAgICAgICAgICAgICBkYXRlIGZyb20gKHBhdGllbnQuZGVjZWFzZWQgYXMgRkhJUi5kYXRlVGltZSkKICAgICAgICAgICAgICAgICBlbHNlIE1lc3NhZ2UobnVsbCwgdHJ1ZSwgJ0JyZWFzdENhbmNlclNjcmVlbmluZ0RRTURyYWZ0LkRlY2Vhc2VkRGF0ZS5Ob3RTdXBwb3J0ZWQnLCAnRXJyb3InLCAnQ2Fubm90IGRldGVybWluZSBkZWNlYXNlZCBkYXRlIGJlY2F1c2UgZGVjZWFzZWQgaXMgc3BlY2lmaWVkIGFzIGEgYm9vbGVhbicpCiAgICAgICAgICAgICBlbmQKCmRlZmluZSAiUmlnaHQgTWFzdGVjdG9teSBEaWFnbm9zaXMiOgogICggKFtDb25kaXRpb246ICJTdGF0dXMgUG9zdCBSaWdodCBNYXN0ZWN0b215Il0pLnZlcmlmaWVkICggKSApIFJpZ2h0TWFzdGVjdG9teQogICAgd2hlcmUgUmlnaHRNYXN0ZWN0b215LnByZXZhbGVuY2VJbnRlcnZhbCAoICkgc3RhcnRzIG9uIG9yIGJlZm9yZSBlbmQgb2YgIk1lYXN1cmVtZW50IFBlcmlvZCIKCmRlZmluZSAiUmlnaHQgTWFzdGVjdG9teSBQcm9jZWR1cmUiOgogICggKCBbUUlDb3JlLlByb2NlZHVyZTogIlVuaWxhdGVyYWwgTWFzdGVjdG9teSBSaWdodCJdCiAgdW5pb24gW1FJQ29yZS5Qcm9jZWR1cmU6ICJVbmlsYXRlcmFsIE1hc3RlY3RvbXkiXSBVbmlsYXRlcmFsTWFzdGVjdG9teVByb2NlZHVyZSAKICB3aGVyZSBleGlzdHMgVW5pbGF0ZXJhbE1hc3RlY3RvbXlQcm9jZWR1cmUuYm9keVNpdGUgUyB3aGVyZSBTIH4gIkVudGlyZSByaWdodCBicmVhc3QgKGJvZHkgc3RydWN0dXJlKSIgCiAgKS5pc1Byb2NlZHVyZVBlcmZvcm1lZCAoICkgKSBVbmlsYXRlcmFsTWFzdGVjdG9teVJpZ2h0UGVyZm9ybWVkCiAgICB3aGVyZSBVbmlsYXRlcmFsTWFzdGVjdG9teVJpZ2h0UGVyZm9ybWVkLnBlcmZvcm1lZC50b0ludGVydmFsICggKSBlbmRzIG9uIG9yIGJlZm9yZSBlbmQgb2YgIk1lYXN1cmVtZW50IFBlcmlvZCIKCmRlZmluZSAiTGVmdCBNYXN0ZWN0b215IERpYWdub3NpcyI6CiAgKCAoIFtDb25kaXRpb246ICJTdGF0dXMgUG9zdCBMZWZ0IE1hc3RlY3RvbXkiXSApLnZlcmlmaWVkICggKSApIExlZnRNYXN0ZWN0b215CiAgICB3aGVyZSBMZWZ0TWFzdGVjdG9teS5wcmV2YWxlbmNlSW50ZXJ2YWwgKCApIHN0YXJ0cyBvbiBvciBiZWZvcmUgZW5kIG9mICJNZWFzdXJlbWVudCBQZXJpb2QiCgpkZWZpbmUgIkxlZnQgTWFzdGVjdG9teSBQcm9jZWR1cmUiOgogICggKCBbUUlDb3JlLlByb2NlZHVyZTogIlVuaWxhdGVyYWwgTWFzdGVjdG9teSBMZWZ0Il0gCiAgICAgICAgdW5pb24gW1FJQ29yZS5Qcm9jZWR1cmU6ICJVbmlsYXRlcmFsIE1hc3RlY3RvbXkiXSBVbmlsYXRlcmFsTWFzdGVjdG9teVByb2NlZHVyZQogICAgICAgIHdoZXJlIGV4aXN0cyBVbmlsYXRlcmFsTWFzdGVjdG9teVByb2NlZHVyZS5ib2R5U2l0ZSBTIHdoZXJlIFMgfiAiRW50aXJlIGxlZnQgYnJlYXN0IChib2R5IHN0cnVjdHVyZSkiCiAgKS5pc1Byb2NlZHVyZVBlcmZvcm1lZCAoICkgKSBVbmlsYXRlcmFsTWFzdGVjdG9teUxlZnRQZXJmb3JtZWQKICAgIHdoZXJlIFVuaWxhdGVyYWxNYXN0ZWN0b215TGVmdFBlcmZvcm1lZC5wZXJmb3JtZWQudG9JbnRlcnZhbCAoICkgZW5kcyBvbiBvciBiZWZvcmUgZW5kIG9mICJNZWFzdXJlbWVudCBQZXJpb2QiCgpkZWZpbmUgIkJpbGF0ZXJhbCBNYXN0ZWN0b215IERpYWdub3NpcyI6CiAgKCAoIFtDb25kaXRpb246ICJIaXN0b3J5IG9mIGJpbGF0ZXJhbCBtYXN0ZWN0b215Il0gKS52ZXJpZmllZCAoICkgKSBCaWxhdGVyYWxNYXN0ZWN0b215SGlzdG9yeQogICAgd2hlcmUgQmlsYXRlcmFsTWFzdGVjdG9teUhpc3RvcnkucHJldmFsZW5jZUludGVydmFsICggKSBzdGFydHMgb24gb3IgYmVmb3JlIGVuZCBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIgoKZGVmaW5lICJCaWxhdGVyYWwgTWFzdGVjdG9teSBQcm9jZWR1cmUiOgogICggKCBbUUlDb3JlLlByb2NlZHVyZTogIkJpbGF0ZXJhbCBNYXN0ZWN0b215Il0gKS5pc1Byb2NlZHVyZVBlcmZvcm1lZCAoICkgKSBCaWxhdGVyYWxNYXN0ZWN0b215UGVyZm9ybWVkCiAgICB3aGVyZSBCaWxhdGVyYWxNYXN0ZWN0b215UGVyZm9ybWVkLnBlcmZvcm1lZC50b0ludGVydmFsICggKSBlbmRzIG9uIG9yIGJlZm9yZSBlbmQgb2YgIk1lYXN1cmVtZW50IFBlcmlvZCIKCmRlZmluZSAiTnVtZXJhdG9yIjoKZXhpc3RzICJNYW1tb2dyYXBoeSBPYnNlcnZhdGlvbiIKICBvciBleGlzdHMgIk1hbW1vZ3JhcGh5IENsYWltIgogIG9yIGV4aXN0cyAiTWFtbW9ncmFwaHkgRU9CIgogICAgCi8vTWFtbW9ncmFwaHkgT2JzZXJ2YXRpb24KZGVmaW5lICJNYW1tb2dyYXBoeSBPYnNlcnZhdGlvbiI6CiAgICAgKCAoIFtPYnNlcnZhdGlvbkNsaW5pY2FsUmVzdWx0OiBjb2RlIGluICJNYW1tb2dyYXBoeSJdICkuaXNEaWFnbm9zdGljU3R1ZHlQZXJmb3JtZWQgKCApICkgTWFtbW9ncmFtCiAgICB3aGVyZSBNYW1tb2dyYW0uZWZmZWN0aXZlLnRvSW50ZXJ2YWwgKCApIGVuZHMgZHVyaW5nIGRheSBvZiBJbnRlcnZhbFsiT2N0b2JlciAxIFR3byBZZWFycyBQcmlvciB0byB0aGUgTWVhc3VyZW1lbnQgUGVyaW9kIiwgZW5kIG9mICJNZWFzdXJlbWVudCBQZXJpb2QiXSAKCmRlZmluZSAiT2N0b2JlciAxIFR3byBZZWFycyBQcmlvciB0byB0aGUgTWVhc3VyZW1lbnQgUGVyaW9kIjoKICBEYXRlVGltZSgoeWVhciBmcm9tIHN0YXJ0IG9mICJNZWFzdXJlbWVudCBQZXJpb2QiIC0gMiksIDEwLCAxLCAwLCAwLCAwLCAwLCAwKQoKLy9NYW1tb2dyYXBoeSBDbGFpbQpkZWZpbmUgIk1hbW1vZ3JhcGh5IENsYWltIjoKKFtRSUNvcmUuQ2xhaW1dKS4iV2l0aCBtYW1tb2dyYXBoeSBkdXJpbmciKAogICAgICAgIEludGVydmFsW2RhdGUgZnJvbSAiT2N0b2JlciAxIFR3byBZZWFycyBQcmlvciB0byB0aGUgTWVhc3VyZW1lbnQgUGVyaW9kIiwgZGF0ZSBmcm9tIGVuZCBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIl0pCgpkZWZpbmUgZmx1ZW50IGZ1bmN0aW9uICJXaXRoIG1hbW1vZ3JhcGh5IGR1cmluZyIoCiAgICBjbGFpbXMgTGlzdDxGSElSLkNsYWltPiwKICAgIGR1cmluZ1BlcmlvZCBJbnRlcnZhbDxTeXN0ZW0uRGF0ZT4KKToKICAgIGlmIGR1cmluZ1BlcmlvZCBpcyBudWxsIHRoZW4gbnVsbAogICAgZWxzZQogICAgICAgIGNsYWltcwogICAgICAgICAgICAuIldpdGggcHJvZHVjdCBvciBzZXJ2aWNlIGR1cmluZyIoCiAgICAgICAgICAgICAgICAiSENQQ1MgTWFtbW9ncmFtIENvZGVzIiwKICAgICAgICAgICAgICAgIGR1cmluZ1BlcmlvZAogICAgICAgICAgICApCgpkZWZpbmUgZmx1ZW50IGZ1bmN0aW9uICJXaXRoIHByb2R1Y3Qgb3Igc2VydmljZSBkdXJpbmciKAogICAgY2xhaW1zIExpc3Q8RkhJUi5DbGFpbT4sIAogICAgcHJvZHVjdE9yU2VydmljZUNvZGVzIFN5c3RlbS5WYWx1ZVNldCwgCiAgICBkdXJpbmdQZXJpb2QgSW50ZXJ2YWw8RGF0ZT4KKToKICAgIGlmIGR1cmluZ1BlcmlvZCBpcyBudWxsIHRoZW4gbnVsbAogICAgZWxzZSAKICAgICAgICAoY2xhaW1zLiJQcm9mZXNzaW9uYWwgb3IgaW5zdGl0dXRpb25hbCIoKSkgc2luZ2xlQ2xhaW0KICAgICAgICB3aXRoICgKICAgICAgICAgICAgc2luZ2xlQ2xhaW0uaXRlbQogICAgICAgICAgICAgICAgLiJTdGFydHMgZHVyaW5nIihkdXJpbmdQZXJpb2QpCiAgICAgICAgKSBpdGVtCiAgICAgICAgc3VjaCB0aGF0IGl0ZW0uIkhhcyBwcm9kdWN0IG9yIHNlcnZpY2UiKHByb2R1Y3RPclNlcnZpY2VDb2RlcykKCmRlZmluZSBmbHVlbnQgZnVuY3Rpb24gIkhhcyBwcm9kdWN0IG9yIHNlcnZpY2UiKGl0ZW0gRkhJUi5DbGFpbS5JdGVtLCBjb2RlcyBTeXN0ZW0uVmFsdWVTZXQpOgogICAgaWYgaXRlbSBpcyBudWxsIG9yIGl0ZW0ucHJvZHVjdE9yU2VydmljZSBpcyBudWxsIHRoZW4gZmFsc2UKICAgIGVsc2UgCiAgICAgICAgaXRlbS5wcm9kdWN0T3JTZXJ2aWNlIGluIGNvZGVzCgpkZWZpbmUgZmx1ZW50IGZ1bmN0aW9uICJQcm9mZXNzaW9uYWwgb3IgaW5zdGl0dXRpb25hbCIoY2xhaW1zIExpc3Q8RkhJUi5DbGFpbT4pOgogICAgKGNsYWltcykgY2xhaW0KICAgICAgd2hlcmUgY2xhaW0udHlwZSB+ICJpbnN0aXR1dGlvbmFsIgogICAgICAgIG9yIGNsYWltLnR5cGUgfiAicHJvZmVzc2lvbmFsIgoKZGVmaW5lIGZsdWVudCBmdW5jdGlvbiAiU3RhcnRzIGR1cmluZyIoaXRlbXMgTGlzdDxGSElSLkNsYWltLkl0ZW0+LCBpbnRlcnZhbCBJbnRlcnZhbDxEYXRlPik6CiAgICBpZiBpbnRlcnZhbCBpcyBudWxsIHRoZW4gbnVsbAogICAgZWxzZSAKICAgICAgICAoaXRlbXMpIGl0ZW0KICAgICAgICB3aGVyZSBpdGVtLiJTZXJ2aWNlZCIoKSBzdGFydHMgZHVyaW5nIGludGVydmFsCgpkZWZpbmUgZmx1ZW50IGZ1bmN0aW9uICJTZXJ2aWNlZCIoaXRlbSBGSElSLkNsYWltLkl0ZW0pOgogICAgaWYgaXRlbSBpcyBudWxsIG9yIGl0ZW0uc2VydmljZWQgaXMgbnVsbCB0aGVuIG51bGwKICAgIGVsc2UgCiAgICAgICAgY2FzZSAKICAgICAgICAgICAgd2hlbiBpdGVtLnNlcnZpY2VkIGlzIEZISVIuZGF0ZSB0aGVuIAogICAgICAgICAgICAgICAgKGl0ZW0uc2VydmljZWQgYXMgRkhJUi5kYXRlKS4iU2VydmljZWQgaW50ZXJuYWwiKCkKICAgICAgICAgICAgd2hlbiBpdGVtLnNlcnZpY2VkIGlzIEZISVIuUGVyaW9kIHRoZW4gCiAgICAgICAgICAgICAgICAoaXRlbS5zZXJ2aWNlZCBhcyBGSElSLlBlcmlvZCkuIlRvIGRhdGUgaW50ZXJ2YWwiKCkKICAgICAgICAgICAgZWxzZSBudWxsCiAgICAgICAgZW5kCgpkZWZpbmUgZmx1ZW50IGZ1bmN0aW9uICJTZXJ2aWNlZCBpbnRlcm5hbCIoc2VydmljZWQgRkhJUi5kYXRlKToKICAgIGlmIHNlcnZpY2VkIGlzIG51bGwgdGhlbiBudWxsCiAgICBlbHNlIAogICAgICAgIEludGVydmFsW0ZISVJIZWxwZXJzLlRvRGF0ZShzZXJ2aWNlZCksIEZISVJIZWxwZXJzLlRvRGF0ZShzZXJ2aWNlZCldCgpkZWZpbmUgZmx1ZW50IGZ1bmN0aW9uICJUbyBkYXRlIGludGVydmFsIihwZXJpb2QgRkhJUi5QZXJpb2QpOgogICAgaWYgcGVyaW9kIGlzIG51bGwgdGhlbiBudWxsCiAgICBlbHNlIAogICAgICAgIEludGVydmFsW2RhdGUgZnJvbSBwZXJpb2Quc3RhcnQsIGRhdGUgZnJvbSBwZXJpb2QuZW5kXQoKLy9NYW1tb2dyYXBoeSBFT0IKZGVmaW5lICJNYW1tb2dyYXBoeSBFT0IiOgooW0V4cGxhbmF0aW9uT2ZCZW5lZml0XSkuIldpdGggbWFtbW9ncmFwaHkgZHVyaW5nIigKICAgICAgICBJbnRlcnZhbFtkYXRlIGZyb20gIk9jdG9iZXIgMSBUd28gWWVhcnMgUHJpb3IgdG8gdGhlIE1lYXN1cmVtZW50IFBlcmlvZCIsIGRhdGUgZnJvbSBlbmQgb2YgIk1lYXN1cmVtZW50IFBlcmlvZCJdKQoKZGVmaW5lIGZsdWVudCBmdW5jdGlvbiAiV2l0aCBtYW1tb2dyYXBoeSBkdXJpbmciKAogICAgZW9icyBMaXN0PEZISVIuRXhwbGFuYXRpb25PZkJlbmVmaXQ+LAogICAgZHVyaW5nUGVyaW9kIEludGVydmFsPFN5c3RlbS5EYXRlPgopOgogICAgaWYgZHVyaW5nUGVyaW9kIGlzIG51bGwgdGhlbiBudWxsCiAgICBlbHNlCiAgICAgICAgZW9icwogICAgICAgICAgICAuIldpdGggcHJvZHVjdCBvciBzZXJ2aWNlIGR1cmluZyIoCiAgICAgICAgICAgICAgICAiSENQQ1MgTWFtbW9ncmFtIENvZGVzIiwKICAgICAgICAgICAgICAgIGR1cmluZ1BlcmlvZAogICAgICAgICAgICApCgpkZWZpbmUgZmx1ZW50IGZ1bmN0aW9uICJXaXRoIHByb2R1Y3Qgb3Igc2VydmljZSBkdXJpbmciKAogICAgZW9icyBMaXN0PEZISVIuRXhwbGFuYXRpb25PZkJlbmVmaXQ+LCAKICAgIHByb2R1Y3RPclNlcnZpY2VDb2RlcyBTeXN0ZW0uVmFsdWVTZXQsIAogICAgZHVyaW5nUGVyaW9kIEludGVydmFsPERhdGU+Cik6CiAgICBpZiBkdXJpbmdQZXJpb2QgaXMgbnVsbCB0aGVuIG51bGwKICAgIGVsc2UgCiAgICAgICAgKCBlb2JzLiJQcm9mZXNzaW9uYWwgb3IgaW5zdGl0dXRpb25hbCIoKSApIHNpbmdsZUVvYgogICAgICAgIHdpdGggKAogICAgICAgICAgICBzaW5nbGVFb2IuaXRlbQogICAgICAgICAgICAgICAgLiJEdXJpbmciKGR1cmluZ1BlcmlvZCkKICAgICAgICApIGl0ZW0KICAgICAgICBzdWNoIHRoYXQgaXRlbS4iSGFzIHByb2R1Y3Qgb3Igc2VydmljZSIocHJvZHVjdE9yU2VydmljZUNvZGVzKQoKZGVmaW5lIGZsdWVudCBmdW5jdGlvbiAiRHVyaW5nIihpdGVtcyBMaXN0PEZISVIuRXhwbGFuYXRpb25PZkJlbmVmaXQuSXRlbT4sIGludGVydmFsIEludGVydmFsPERhdGU+KToKICAgIGlmIGludGVydmFsIGlzIG51bGwgdGhlbiBudWxsCiAgICBlbHNlIAogICAgICAgIChpdGVtcykgaXRlbQogICAgICAgIHdoZXJlIGl0ZW0uIlNlcnZpY2VkIigpIG92ZXJsYXBzIGludGVydmFsIAoKZGVmaW5lIGZsdWVudCBmdW5jdGlvbiAiU2VydmljZWQiKGl0ZW0gRkhJUi5FeHBsYW5hdGlvbk9mQmVuZWZpdC5JdGVtKToKICAgIGlmIGl0ZW0gaXMgbnVsbCBvciBpdGVtLnNlcnZpY2VkIGlzIG51bGwgdGhlbiBudWxsCiAgICBlbHNlIAogICAgICAgIGNhc2UgCiAgICAgICAgICAgIHdoZW4gaXRlbS5zZXJ2aWNlZCBpcyBGSElSLmRhdGUgdGhlbiAKICAgICAgICAgICAgICAgIChpdGVtLnNlcnZpY2VkIGFzIEZISVIuZGF0ZSkuIlNlcnZpY2VkIGludGVybmFsIigpCiAgICAgICAgICAgIHdoZW4gaXRlbS5zZXJ2aWNlZCBpcyBGSElSLlBlcmlvZCB0aGVuIAogICAgICAgICAgICAgICAgKGl0ZW0uc2VydmljZWQgYXMgRkhJUi5QZXJpb2QpLiJUbyBkYXRlIGludGVydmFsIigpCiAgICAgICAgICAgIGVsc2UgbnVsbAogICAgICAgIGVuZAoKZGVmaW5lIGZsdWVudCBmdW5jdGlvbiAiSGFzIHByb2R1Y3Qgb3Igc2VydmljZSIoaXRlbSBGSElSLkV4cGxhbmF0aW9uT2ZCZW5lZml0Lkl0ZW0sIGNvZGVzIFN5c3RlbS5WYWx1ZVNldCk6CiAgICBpZiBpdGVtIGlzIG51bGwgb3IgaXRlbS5wcm9kdWN0T3JTZXJ2aWNlIGlzIG51bGwgdGhlbiBmYWxzZQogICAgZWxzZSAKICAgICAgICBpdGVtLnByb2R1Y3RPclNlcnZpY2UgaW4gY29kZXMKCmRlZmluZSBmbHVlbnQgZnVuY3Rpb24gIlByb2Zlc3Npb25hbCBvciBpbnN0aXR1dGlvbmFsIihlb2JzIExpc3Q8RkhJUi5FeHBsYW5hdGlvbk9mQmVuZWZpdD4pOiAKICAgIChlb2JzKSBlb2IKICAgICAgd2hlcmUgZW9iLnR5cGUgfiAiaW5zdGl0dXRpb25hbCIKICAgICAgICBvciBlb2IudHlwZSB+ICJwcm9mZXNzaW9uYWwiCgpkZWZpbmUgIlNERSBFdGhuaWNpdHkiOgogIFNERS4iU0RFIEV0aG5pY2l0eSIKCmRlZmluZSAiU0RFIFBheWVyIjoKICBTREUuIlNERSBQYXllciIKCmRlZmluZSAiU0RFIFJhY2UiOgogIFNERS4iU0RFIFJhY2UiCgpkZWZpbmUgIlNERSBTZXgiOgogIFNERS4iU0RFIFNleCIKCmRlZmluZSAiU3RyYXRpZmljYXRpb24gMSI6CiAgQWdlSW5ZZWFyc0F0KGRhdGUgZnJvbSAKICAgIGVuZCBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIgogICkgaW4gSW50ZXJ2YWxbNDIsIDUxXQoKZGVmaW5lICJTdHJhdGlmaWNhdGlvbiAyIjoKICBBZ2VJblllYXJzQXQoZGF0ZSBmcm9tIAogICAgZW5kIG9mICJNZWFzdXJlbWVudCBQZXJpb2QiCiAgKSBpbiBJbnRlcnZhbFs1MiwgNzRdCg=="
}
]
}