@citolab/qti-components 6.9.1-beta.6 → 6.9.1-beta.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -563,4 +563,4 @@ import{a as b,b as q,c as i,d as Nt}from"../chunk-H4VLZ2F7.js";import{provide as
563
563
  justify-content: center;
564
564
  }
565
565
  `,i([nn({type:String,attribute:!1})],le.prototype,"marker",2),le=i([on("qti-simple-choice")],le);console.log("%cC\xBFTO%cLab%c: qti-components loaded","font-weight:bold; color:green",'font-family: "PT Sans", font-weight:bold; color:green; font-size: smaller;vertical-align: sub',"font-weight:unset");export{g as Interaction,ve as QtPrintedVariable,Be as QtiAnd,C as QtiAssessmentItem,z as QtiAssessmentStimulusRef,Re as QtiAssociableHotspot,ee as QtiAssociateInteraction,Xe as QtiBaseValue,E as QtiChoice,Z as QtiChoiceInteraction,He as QtiCompanionMaterialsInfo,w as QtiConditionExpression,ct as QtiContains,Ve as QtiContentBody,pt as QtiCorrect,V as QtiCustomInteraction,we as QtiCustomOperator,te as QtiEndAttemptInteraction,je as QtiEqual,Ye as QtiEqualRounded,u as QtiExpression,M as QtiExtendedTextInteraction,ue as QtiFeedbackBlock,me as QtiFeedbackInline,ie as QtiGap,oe as QtiGapImg,xe as QtiGapMatchInteraction,ne as QtiGapText,$ as QtiGraphicAssociateInteraction,Ee as QtiGraphicGapMatchInteraction,qe as QtiGraphicOrderInteraction,dt as QtiGt,ut as QtiGte,ae as QtiHotspotChoice,Ce as QtiHotspotInteraction,Ae as QtiHottext,Ie as QtiHottextInteraction,Se as QtiInlineChoice,U as QtiInlineChoiceInteraction,mt as QtiIsNull,Fe as QtiLookupOutcomeValue,ht as QtiLt,ft as QtiLte,Ke as QtiMapResponse,G as QtiMapping,bt as QtiMatch,X as QtiMatchInteraction,ke as QtiMediaInteraction,vt as QtiMember,he as QtiModalFeedback,yt as QtiMultiple,xt as QtiNot,Et as QtiOr,O as QtiOrderInteraction,qt as QtiOrdered,S as QtiOutcomeDeclaration,fe as QtiOutcomeProcessing,it as QtiOutcomeProcessingProcessor,F as QtiPortableCustomInteraction,Te as QtiPositionObjectStage,Ct as QtiProduct,Le as QtiPrompt,ot as QtiResponseCondition,D as QtiResponseDeclaration,ge as QtiResponseElse,lt as QtiResponseElseIf,be as QtiResponseIf,K as QtiResponseProcessing,L as QtiRubricBlock,N as QtiRule,Je as QtiSPositionObjectInteraction,Y as QtiSelectPointInteraction,nt as QtiSetOutcomeValue,at as QtiSetOutcomeValueRule,B as QtiSimpleAssociableChoice,le as QtiSimpleChoice,x as QtiSliderInteraction,We as QtiStringMatch,Me as QtiStylesheet,_t as QtiSum,kt as QtiSumExpression,T as QtiTextEntryInteraction,Tt as QtiVariable,A as itemContext,Ht as itemContextVariables,Qs as qtiAndMixin};
566
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktYXNzZXNzbWVudC1pdGVtL3F0aS1hc3Nlc3NtZW50LWl0ZW0udHMiLCAiLi4vLi4vc3JjL2xpYi9kZWNvcmF0b3JzL3dhdGNoLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWFzc2Vzc21lbnQtaXRlbS9xdGktYXNzZXNzbWVudC1pdGVtLmNvbnRleHQudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktYXNzZXNzbWVudC1zdGltdWx1cy1yZWYvcXRpLWFzc2Vzc21lbnQtc3RpbXVsdXMtcmVmLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWludGVyYWN0aW9uL2ludGVybmFsL2Nob2ljZS9xdGktY2hvaWNlLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWl0ZW0tYm9keS9xdGktaXRlbS1ib2R5LnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWl0ZW0tYm9keS9xdGktaXRlbS1ib2R5LnN0eWxlcy50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1wcm9tcHQvcXRpLXByb21wdC50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1zdHlsZXNoZWV0L3F0aS1zdHlsZXNoZWV0LnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXZhcmlhYmxlLWRlY2xhcmF0aW9uL3F0aS1vdXRjb21lLWRlY2xhcmF0aW9uL3F0aS1vdXRjb21lLWRlY2xhcmF0aW9uLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXZhcmlhYmxlLWRlY2xhcmF0aW9uL3F0aS12YXJpYWJsZS1kZWNsYXJhdGlvbi50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS12YXJpYWJsZS1kZWNsYXJhdGlvbi9xdGktcmVzcG9uc2UtZGVjbGFyYXRpb24vcXRpLXJlc3BvbnNlLWRlY2xhcmF0aW9uLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWNvbXBhbmlvbi1tYXRlcmlhbHMtaW5mby9xdGktY29tcGFuaW9uLW1hdGVyaWFscy1pbmZvLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJ1YnJpYy1ibG9jay9xdGktY29udGVudC1ib2R5LnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJ1YnJpYy1ibG9jay9xdGktcnVicmljLWJsb2NrLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWZlZWRiYWNrL3F0aS1mZWVkYmFjay1ibG9jay9xdGktZmVlZGJhY2stYmxvY2sudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktZmVlZGJhY2svcXRpLWZlZWRiYWNrLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvaW50ZXJuYWwvdXRpbHMudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktZmVlZGJhY2svcXRpLWZlZWRiYWNrLWlubGluZS9xdGktZmVlZGJhY2staW5saW5lLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWZlZWRiYWNrL3F0aS1tb2RhbC1mZWVkYmFjay9xdGktbW9kYWwtZmVlZGJhY2sudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaW50ZXJhY3Rpb24vcXRpLWV4dGVuZGVkLXRleHQtaW50ZXJhY3Rpb24vcXRpLWV4dGVuZGVkLXRleHQtaW50ZXJhY3Rpb24udHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaW50ZXJhY3Rpb24vaW50ZXJuYWwvaW50ZXJhY3Rpb24vaW50ZXJhY3Rpb24udHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaW50ZXJhY3Rpb24vcXRpLXRleHQtZW50cnktaW50ZXJhY3Rpb24vcXRpLXRleHQtZW50cnktaW50ZXJhY3Rpb24udHMiLCAiLi4vLi4vc3JjL2xpYi9kZWNvcmF0b3JzL2xpdmUtcXVlcnkudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaW50ZXJhY3Rpb24vcXRpLWhvdHRleHQtaW50ZXJhY3Rpb24vcXRpLWhvdHRleHQtaW50ZXJhY3Rpb24udHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaW50ZXJhY3Rpb24vaW50ZXJuYWwvY2hvaWNlcy9jaG9pY2VzLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWludGVyYWN0aW9uL3F0aS1pbmxpbmUtY2hvaWNlLWludGVyYWN0aW9uL3F0aS1pbmxpbmUtY2hvaWNlLWludGVyYWN0aW9uLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWludGVyYWN0aW9uL3F0aS1jaG9pY2UtaW50ZXJhY3Rpb24vcXRpLWNob2ljZS1pbnRlcmFjdGlvbi50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1pbnRlcmFjdGlvbi9pbnRlcm5hbC9zaHVmZmxlL3NodWZmbGUtbWl4aW4udHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaW50ZXJhY3Rpb24vaW50ZXJuYWwvdm9jYWJ1bGFyeS92b2NhYnVsYXJ5LW1peGluLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWludGVyYWN0aW9uL3F0aS1jaG9pY2UtaW50ZXJhY3Rpb24vcXRpLWNob2ljZS1pbnRlcmFjdGlvbi5zdHlsZXMudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktb3V0Y29tZS1wcm9jZXNzaW5nL3F0aS1vdXRjb21lLXByb2Nlc3NpbmcudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZy9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZy9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZy50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL2ludGVybmFsL3RlbXBsYXRlLXN0cmluZ3MudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZy9xdGktcnVsZS9xdGktbG9va3VwLW91dGNvbWUtdmFsdWUvcXRpLWxvb2t1cC1vdXRjb21lLXZhbHVlLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLXJ1bGUvcXRpLXJ1bGUudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZy9xdGktcnVsZS9xdGktcmVzcG9uc2UtY29uZGl0aW9uL3F0aS1yZXNwb25zZS1jb25kaXRpb24udHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZy9xdGktcnVsZS9xdGktc2V0LW91dGNvbWUtdmFsdWUvcXRpLXNldC1vdXRjb21lLXZhbHVlLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLXJlc3BvbnNlLWVsc2UvcXRpLXJlc3BvbnNlLWVsc2UudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZy9xdGktcmVzcG9uc2UtZWxzZS9xdGktcmVzcG9uc2UtaWYvcXRpLXJlc3BvbnNlLWVsc2UtaWYvcXRpLXJlc3BvbnNlLWVsc2UtaWYudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZy9xdGktcmVzcG9uc2UtZWxzZS9xdGktcmVzcG9uc2UtaWYvcXRpLXJlc3BvbnNlLWlmLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLWV4cHJlc3Npb24vcXRpLWV4cHJlc3Npb24udHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZy9xdGktZXhwcmVzc2lvbi9xdGktY29uZGl0aW9uLWV4cHJlc3Npb24udHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZy9xdGktZXhwcmVzc2lvbi9xdGktYW5kL3F0aS1hbmQudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZy9xdGktZXhwcmVzc2lvbi9xdGktYW5kL2luZGV4LnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLWV4cHJlc3Npb24vcXRpLWJhc2V2YWx1ZS9xdGktYmFzZXZhbHVlLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLWV4cHJlc3Npb24vcXRpLWNvbnRhaW5zL3F0aS1jb250YWlucy50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nL3F0aS1leHByZXNzaW9uL3F0aS1jb3JyZWN0L3F0aS1jb3JyZWN0LnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLWV4cHJlc3Npb24vcXRpLWVxdWFsLXJvdW5kZWQvcXRpLWVxdWFsLXJvdW5kZWQudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZy9xdGktZXhwcmVzc2lvbi9xdGktZXF1YWwvcXRpLWVxdWFsLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvdXRpbGl0aWVzL3Njb3JpbmctaGVscGVyLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLWV4cHJlc3Npb24vcXRpLWd0L3F0aS1ndC50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nL3F0aS1leHByZXNzaW9uL3F0aS1ndGUvcXRpLWd0ZS50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nL3F0aS1leHByZXNzaW9uL3F0aS1pcy1udWxsL3F0aS1pcy1udWxsLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLWV4cHJlc3Npb24vcXRpLWx0L3F0aS1sdC50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nL3F0aS1leHByZXNzaW9uL3F0aS1sdGUvcXRpLWx0ZS50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nL3F0aS1leHByZXNzaW9uL3F0aS1tYXAtcmVzcG9uc2UvcXRpLW1hcC1yZXNwb25zZS50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nL3F0aS1leHByZXNzaW9uL3F0aS1tYXBwaW5nL3F0aS1tYXBwaW5nLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLWV4cHJlc3Npb24vcXRpLW1hdGNoL3F0aS1tYXRjaC50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nL3F0aS1leHByZXNzaW9uL3F0aS1tZW1iZXIvcXRpLW1lbWJlci50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nL3F0aS1leHByZXNzaW9uL3F0aS1tdWx0aXBsZS9xdGktbXVsdGlwbGUudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZy9xdGktZXhwcmVzc2lvbi9xdGktbm90L3F0aS1ub3QudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZy9xdGktZXhwcmVzc2lvbi9xdGktb3IvcXRpLW9yLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLWV4cHJlc3Npb24vcXRpLW9yZGVyZWQvcXRpLW9yZGVyZWQudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZy9xdGktZXhwcmVzc2lvbi9xdGktcHJpbnRlZC12YXJpYWJsZS9xdGktcHJpbnRlZC12YXJpYWJsZS50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nL3F0aS1leHByZXNzaW9uL3F0aS1wcm9kdWN0L3F0aS1wcm9kdWN0LnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLWV4cHJlc3Npb24vcXRpLXN0cmluZy1tYXRjaC9xdGktc3RyaW5nLW1hdGNoLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLWV4cHJlc3Npb24vcXRpLXN1bS9xdGktc3VtLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLWV4cHJlc3Npb24vcXRpLXZhcmlhYmxlL3F0aS12YXJpYWJsZS50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1pbnRlcmFjdGlvbi9xdGktcG9ydGFibGUtY3VzdG9tLWludGVyYWN0aW9uL3F0aS1wb3J0YWJsZS1jdXN0b20taW50ZXJhY3Rpb24udHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaW50ZXJhY3Rpb24vcXRpLWFzc29jaWF0ZS1pbnRlcmFjdGlvbi9xdGktYXNzb2NpYXRlLWludGVyYWN0aW9uLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWludGVyYWN0aW9uL2ludGVybmFsL2RyYWctZHJvcC9kcmFnLWRyb3AtYXBpLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWludGVyYWN0aW9uL2ludGVybmFsL2RyYWctZHJvcC9kcm9wcGFibGVzLW1peGluLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWludGVyYWN0aW9uL2ludGVybmFsL2RyYWctZHJvcC9mbGlwcGFibGVzLW1peGluLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWludGVyYWN0aW9uL2ludGVybmFsL2RyYWctZHJvcC9kcmFnLWRyb3AtaW50ZXJhY3Rpb24tbWl4aW4udHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaW50ZXJhY3Rpb24vcXRpLWN1c3RvbS1pbnRlcmFjdGlvbi9xdGktY3VzdG9tLWludGVyYWN0aW9uLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWludGVyYWN0aW9uL3F0aS1lbmQtYXR0ZW1wdC1pbnRlcmFjdGlvbi9xdGktZW5kLWF0dGVtcHQtaW50ZXJhY3Rpb24udHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaW50ZXJhY3Rpb24vcXRpLWdhcC1tYXRjaC1pbnRlcmFjdGlvbi9xdGktZ2FwLW1hdGNoLWludGVyYWN0aW9uLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWludGVyYWN0aW9uL3F0aS1ncmFwaGljLWFzc29jaWF0ZS1pbnRlcmFjdGlvbi9xdGktZ3JhcGhpYy1hc3NvY2lhdGUtaW50ZXJhY3Rpb24udHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaW50ZXJhY3Rpb24vaW50ZXJuYWwvaG90c3BvdHMvaG90c3BvdC50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1pbnRlcmFjdGlvbi9xdGktZ3JhcGhpYy1nYXAtbWF0Y2gtaW50ZXJhY3Rpb24vcXRpLWdyYXBoaWMtZ2FwLW1hdGNoLWludGVyYWN0aW9uLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWludGVyYWN0aW9uL3F0aS1ncmFwaGljLW9yZGVyLWludGVyYWN0aW9uL3F0aS1ncmFwaGljLW9yZGVyLWludGVyYWN0aW9uLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWludGVyYWN0aW9uL3F0aS1ob3RzcG90LWludGVyYWN0aW9uL3F0aS1ob3RzcG90LWludGVyYWN0aW9uLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWludGVyYWN0aW9uL3F0aS1tYXRjaC1pbnRlcmFjdGlvbi9xdGktbWF0Y2gtaW50ZXJhY3Rpb24udHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaW50ZXJhY3Rpb24vcXRpLXNpbXBsZS1hc3NvY2lhYmxlLWNob2ljZS50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1pbnRlcmFjdGlvbi9xdGktbWVkaWEtaW50ZXJhY3Rpb24vcXRpLW1lZGlhLWludGVyYWN0aW9uLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWludGVyYWN0aW9uL3F0aS1vcmRlci1pbnRlcmFjdGlvbi9xdGktb3JkZXItaW50ZXJhY3Rpb24udHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaW50ZXJhY3Rpb24vcXRpLXBvc2l0aW9uLW9iamVjdC1pbnRlcmFjdGlvbi9xdGktcG9zaXRpb24tb2JqZWN0LWludGVyYWN0aW9uLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWludGVyYWN0aW9uL3F0aS1wb3NpdGlvbi1vYmplY3QtaW50ZXJhY3Rpb24vcXRpLXBvc2l0aW9uLW9iamVjdC1zdGFnZS50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1pbnRlcmFjdGlvbi9xdGktc2VsZWN0LXBvaW50LWludGVyYWN0aW9uL3F0aS1zZWxlY3QtcG9pbnQtaW50ZXJhY3Rpb24udHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaW50ZXJhY3Rpb24vcXRpLXNsaWRlci1pbnRlcmFjdGlvbi9xdGktc2xpZGVyLWludGVyYWN0aW9uLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWN1c3RvbS1vcGVyYXRvci9xdGktY3VzdG9tLW9wZXJhdG9yLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWludGVyYWN0aW9uL3F0aS1hc3NvY2lhYmxlLWhvdHNwb3QudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaW50ZXJhY3Rpb24vcXRpLWdhcC50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1pbnRlcmFjdGlvbi9xdGktZ2FwLWltZy50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1pbnRlcmFjdGlvbi9xdGktZ2FwLXRleHQudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaW50ZXJhY3Rpb24vcXRpLWhvdHNwb3QtY2hvaWNlLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWludGVyYWN0aW9uL3F0aS1ob3R0ZXh0LnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWludGVyYWN0aW9uL3F0aS1pbmxpbmUtY2hvaWNlLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWludGVyYWN0aW9uL3F0aS1zaW1wbGUtY2hvaWNlLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvaW5kZXgudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IHByb3ZpZGUgfSBmcm9tICdAbGl0L2NvbnRleHQnO1xuaW1wb3J0IHsgTGl0RWxlbWVudCwgaHRtbCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50LCBwcm9wZXJ0eSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IHdhdGNoIH0gZnJvbSAnLi4vLi4vZGVjb3JhdG9ycy93YXRjaCc7XG5pbXBvcnQgdHlwZSB7IEludGVyYWN0aW9uQ2hhbmdlZERldGFpbHMsIE91dGNvbWVDaGFuZ2VkRGV0YWlscyB9IGZyb20gJy4uL2ludGVybmFsL2V2ZW50LXR5cGVzJztcbmltcG9ydCB0eXBlIHsgUmVzcG9uc2VJbnRlcmFjdGlvbiB9IGZyb20gJy4uL2ludGVybmFsL2V4cHJlc3Npb24tcmVzdWx0JztcbmltcG9ydCB0eXBlIHsgVmFyaWFibGVEZWNsYXJhdGlvbiwgVmFyaWFibGVWYWx1ZSB9IGZyb20gJy4uL2ludGVybmFsL3ZhcmlhYmxlcyc7XG5pbXBvcnQgeyBPdXRjb21lVmFyaWFibGUsIFJlc3BvbnNlVmFyaWFibGUgfSBmcm9tICcuLi9pbnRlcm5hbC92YXJpYWJsZXMnO1xuaW1wb3J0IHR5cGUgeyBRdGlGZWVkYmFjayB9IGZyb20gJy4uL3F0aS1mZWVkYmFjay9xdGktZmVlZGJhY2snO1xuaW1wb3J0IHR5cGUgeyBJbnRlcmFjdGlvbiB9IGZyb20gJy4uL3F0aS1pbnRlcmFjdGlvbi9pbnRlcm5hbC9pbnRlcmFjdGlvbi9pbnRlcmFjdGlvbic7XG5pbXBvcnQgdHlwZSB7IFF0aVJlc3BvbnNlUHJvY2Vzc2luZyB9IGZyb20gJy4uL3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nJztcbmltcG9ydCB7IEl0ZW1Db250ZXh0LCBpdGVtQ29udGV4dCwgaXRlbUNvbnRleHRWYXJpYWJsZXMgfSBmcm9tICcuL3F0aS1hc3Nlc3NtZW50LWl0ZW0uY29udGV4dCc7XG5cbi8qKlxuICogQHN1bW1hcnkgVGhlIHF0aS1hc3Nlc3NtZW50LWl0ZW0gZWxlbWVudCBjb250YWlucyBhbGwgdGhlIG90aGVyIFFUSSAzIGl0ZW0gc3RydWN0dXJlcy5cbiAqIEBkb2N1bWVudGF0aW9uIGh0dHBzOi8vd3d3Lmltc2dsb2JhbC5vcmcvc3BlYy9xdGkvdjNwMC9pbXBsI2guZGx0bm5qODdsMHlqXG4gKiBAc3RhdHVzIHN0YWJsZVxuICogQHNpbmNlIDQuMFxuICpcbiAqIEBkZXBlbmRlbmN5IHF0aS1mZWVkYmFja1xuICogQGRlcGVuZGVuY3kgcXRpLXJlc3BvbnNlcHJvY2Vzc2luZ1xuICpcbiAqIEBzbG90IC0gVGhlIGRlZmF1bHQgc2xvdCB3aGVyZSBhbGwgdGhlIG90aGVyIFFUSSAzIGl0ZW0gc3RydWN0dXJlcyBnby5cbiAqXG4gKiBAZXZlbnQgcXRpLWludGVyYWN0aW9uLWNoYW5nZWQgLSBFbWl0dGVkIHdoZW4gYW4gaW50ZXJhY3Rpb24gaXMgY2hhbmdlZC5cbiAqIEBldmVudCBxdGktb3V0Y29tZS1jaGFuZ2VkIC0gRW1pdHRlZCB3aGVuIGFuIG91dGNvbWUgaGFzIGNoYW5nZWQuXG4gKiBAZXZlbnQgcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcgLSBFbWl0dGVkIHdoZW4gcmVzcG9uc2UtcHJvY2Vzc2luZyBpcyBjYWxsZWQuXG4gKlxuICovXG5AY3VzdG9tRWxlbWVudCgncXRpLWFzc2Vzc21lbnQtaXRlbScpXG5leHBvcnQgY2xhc3MgUXRpQXNzZXNzbWVudEl0ZW0gZXh0ZW5kcyBMaXRFbGVtZW50IHtcbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nIH0pIHRpdGxlOiBzdHJpbmc7XG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZyB9KSBpZGVudGlmaWVyOiBzdHJpbmcgPSAnJztcbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nIH0pIGFkYXB0aXZlOiAndHJ1ZScgfCAnZmFsc2UnID0gJ2ZhbHNlJztcbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nIH0pIHRpbWVEZXBlbmRlbnQ6ICd0cnVlJyB8ICdmYWxzZScgfCBudWxsID0gbnVsbDtcblxuICBAcHJvcGVydHkoeyB0eXBlOiBCb29sZWFuIH0pIGRpc2FibGVkOiBib29sZWFuO1xuICBAd2F0Y2goJ2Rpc2FibGVkJywgeyB3YWl0VW50aWxGaXJzdFVwZGF0ZTogdHJ1ZSB9KVxuICBfaGFuZGxlRGlzYWJsZWRDaGFuZ2UgPSAoXzogYm9vbGVhbiwgZGlzYWJsZWQ6IGJvb2xlYW4pID0+IHtcbiAgICB0aGlzLl9pbnRlcmFjdGlvbkVsZW1lbnRzLmZvckVhY2goY2ggPT4gKGNoLmRpc2FibGVkID0gZGlzYWJsZWQpKTtcbiAgfTtcblxuICBAcHJvcGVydHkoeyB0eXBlOiBCb29sZWFuIH0pIHJlYWRvbmx5OiBib29sZWFuO1xuICBAd2F0Y2goJ3JlYWRvbmx5JywgeyB3YWl0VW50aWxGaXJzdFVwZGF0ZTogdHJ1ZSB9KVxuICBfaGFuZGxlUmVhZG9ubHlDaGFuZ2UgPSAoXzogYm9vbGVhbiwgcmVhZG9ubHk6IGJvb2xlYW4pID0+XG4gICAgdGhpcy5faW50ZXJhY3Rpb25FbGVtZW50cy5mb3JFYWNoKGNoID0+IChjaC5yZWFkb25seSA9IHJlYWRvbmx5KSk7XG5cbiAgQHByb3ZpZGUoeyBjb250ZXh0OiBpdGVtQ29udGV4dCB9KVxuICAvLyBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6IGZhbHNlIH0pXG4gIHByaXZhdGUgX2NvbnRleHQ6IEl0ZW1Db250ZXh0ID0ge1xuICAgIGlkZW50aWZpZXI6IHRoaXMuZ2V0QXR0cmlidXRlKCdpZGVudGlmaWVyJyksXG4gICAgdmFyaWFibGVzOiBpdGVtQ29udGV4dFZhcmlhYmxlc1xuICB9O1xuXG4gIHB1YmxpYyBnZXQgdmFyaWFibGVzKCk6IFZhcmlhYmxlVmFsdWU8c3RyaW5nIHwgc3RyaW5nW10gfCBudWxsPltdIHtcbiAgICByZXR1cm4gdGhpcy5fY29udGV4dC52YXJpYWJsZXMubWFwKHYgPT4gKHtcbiAgICAgIGlkZW50aWZpZXI6IHYuaWRlbnRpZmllcixcbiAgICAgIHZhbHVlOiB2LnZhbHVlLFxuICAgICAgdHlwZTogdi50eXBlLFxuICAgICAgLy8gYWRkIGV4dGVybmFsc2NvcmVkLCBhIGZpeGVkIHByb3AgdG8gdGhlIHRlc3QsIHNvIHRoZSB0ZXN0Y29udGV4dCBjYW4gcmVhZCBhbmQgZGVjaWRlIGhvdyB0byBzY29yZSB0aGlzIGl0ZW1cbiAgICAgIC4uLih2LnR5cGUgPT09ICdvdXRjb21lJyAmJiB2LmlkZW50aWZpZXIgPT09ICdTQ09SRSdcbiAgICAgICAgPyB7IGV4dGVybmFsU2NvcmVkOiAodiBhcyBPdXRjb21lVmFyaWFibGUpLmV4dGVybmFsU2NvcmVkIH1cbiAgICAgICAgOiB7fSlcbiAgICB9KSk7XG4gIH1cblxuICBwdWJsaWMgc2V0IHZhcmlhYmxlcyh2YWx1ZTogVmFyaWFibGVWYWx1ZTxzdHJpbmcgfCBzdHJpbmdbXSB8IG51bGw+W10pIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUpIHx8IHZhbHVlLnNvbWUodiA9PiAhKCdpZGVudGlmaWVyJyBpbiB2KSkpIHtcbiAgICAgIGNvbnNvbGUud2FybigndmFyaWFibGVzIHByb3BlcnR5IHNob3VsZCBiZSBhbiBhcnJheSBvZiBWYXJpYWJsZURlY2xhcmF0aW9uJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fY29udGV4dCA9IHtcbiAgICAgIC4uLnRoaXMuX2NvbnRleHQsXG4gICAgICB2YXJpYWJsZXM6IHRoaXMuX2NvbnRleHQudmFyaWFibGVzLm1hcCh2YXJpYWJsZSA9PiB7XG4gICAgICAgIGNvbnN0IG1hdGNoaW5nVmFsdWUgPSB2YWx1ZS5maW5kKHYgPT4gdi5pZGVudGlmaWVyID09PSB2YXJpYWJsZS5pZGVudGlmaWVyKTtcbiAgICAgICAgaWYgKG1hdGNoaW5nVmFsdWUpIHtcbiAgICAgICAgICByZXR1cm4geyAuLi52YXJpYWJsZSwgLi4ubWF0Y2hpbmdWYWx1ZSB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YXJpYWJsZTtcbiAgICAgIH0pXG4gICAgfTtcblxuICAgIHRoaXMuX2NvbnRleHQudmFyaWFibGVzLmZvckVhY2godmFyaWFibGUgPT4ge1xuICAgICAgaWYgKHZhcmlhYmxlLnR5cGUgPT09ICdyZXNwb25zZScpIHtcbiAgICAgICAgY29uc3QgaW50ZXJhY3Rpb25FbGVtZW50ID0gdGhpcy5faW50ZXJhY3Rpb25FbGVtZW50cy5maW5kKFxuICAgICAgICAgIChlbDogSW50ZXJhY3Rpb24pID0+IGVsLnJlc3BvbnNlSWRlbnRpZmllciA9PT0gdmFyaWFibGUuaWRlbnRpZmllclxuICAgICAgICApO1xuICAgICAgICBpZiAoaW50ZXJhY3Rpb25FbGVtZW50KSB7XG4gICAgICAgICAgaW50ZXJhY3Rpb25FbGVtZW50LnJlc3BvbnNlID0gdmFyaWFibGUudmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHZhcmlhYmxlLnR5cGUgPT09ICdvdXRjb21lJykge1xuICAgICAgICB0aGlzLl9mZWVkYmFja0VsZW1lbnRzLmZvckVhY2goZmUgPT4gZmUuY2hlY2tTaG93RmVlZGJhY2sodmFyaWFibGUuaWRlbnRpZmllcikpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfaW5pdGlhbENvbnRleHQ6IFJlYWRvbmx5PEl0ZW1Db250ZXh0PiA9IHsgLi4udGhpcy5fY29udGV4dCwgdmFyaWFibGVzOiB0aGlzLl9jb250ZXh0LnZhcmlhYmxlcyB9O1xuICBwcml2YXRlIF9mZWVkYmFja0VsZW1lbnRzOiBRdGlGZWVkYmFja1tdID0gW107XG4gIHByaXZhdGUgX2ludGVyYWN0aW9uRWxlbWVudHM6IEludGVyYWN0aW9uW10gPSBbXTtcblxuICBhc3luYyBjb25uZWN0ZWRDYWxsYmFjaygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIGF3YWl0IHRoaXMudXBkYXRlQ29tcGxldGU7XG4gICAgdGhpcy5fZW1pdDx7IGRldGFpbDogUXRpQXNzZXNzbWVudEl0ZW0gfT4oJ3F0aS1hc3Nlc3NtZW50LWl0ZW0tY29ubmVjdGVkJywgdGhpcyk7XG4gIH1cblxuICAvKiogQGRlcHJlY2F0ZWQgdXNlIHZhcmlhYmxlcyBwcm9wZXJ0eSBpbnN0ZWFkICovXG4gIHNldCByZXNwb25zZXMobXlSZXNwb25zZXM6IFJlc3BvbnNlSW50ZXJhY3Rpb25bXSkge1xuICAgIGlmIChteVJlc3BvbnNlcykge1xuICAgICAgZm9yIChjb25zdCByZXNwb25zZSBvZiBteVJlc3BvbnNlcykge1xuICAgICAgICBjb25zdCByZXNwb25zZVZhcmlhYmxlID0gdGhpcy5nZXRSZXNwb25zZShyZXNwb25zZS5yZXNwb25zZUlkZW50aWZpZXIpO1xuICAgICAgICBpZiAocmVzcG9uc2VWYXJpYWJsZSkge1xuICAgICAgICAgIHRoaXMudXBkYXRlUmVzcG9uc2VWYXJpYWJsZShyZXNwb25zZS5yZXNwb25zZUlkZW50aWZpZXIsIHJlc3BvbnNlLnJlc3BvbnNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGludGVyYWN0aW9uOiBJbnRlcmFjdGlvbiB8IHVuZGVmaW5lZCA9IHRoaXMuX2ludGVyYWN0aW9uRWxlbWVudHMuZmluZChcbiAgICAgICAgICBpID0+IGkuZ2V0QXR0cmlidXRlKCdyZXNwb25zZS1pZGVudGlmaWVyJykgPT09IHJlc3BvbnNlLnJlc3BvbnNlSWRlbnRpZmllclxuICAgICAgICApO1xuICAgICAgICBpZiAoaW50ZXJhY3Rpb24pIHtcbiAgICAgICAgICBpbnRlcmFjdGlvbi5yZXNwb25zZSA9IHJlc3BvbnNlLnJlc3BvbnNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYDxzbG90Pjwvc2xvdD5gO1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3F0aS1yZWdpc3Rlci12YXJpYWJsZScsIGUgPT4ge1xuICAgICAgdGhpcy5fY29udGV4dCA9IHsgLi4udGhpcy5fY29udGV4dCwgdmFyaWFibGVzOiBbLi4udGhpcy5fY29udGV4dC52YXJpYWJsZXMsIGUuZGV0YWlsLnZhcmlhYmxlXSB9O1xuICAgICAgdGhpcy5faW5pdGlhbENvbnRleHQgPSB0aGlzLl9jb250ZXh0O1xuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9KTtcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3F0aS1yZWdpc3Rlci1mZWVkYmFjaycsIChlOiBDdXN0b21FdmVudDxRdGlGZWVkYmFjaz4pID0+IHtcbiAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBjb25zdCBmZWVkYmFja0VsZW1lbnQgPSBlLmRldGFpbDtcbiAgICAgIHRoaXMuX2ZlZWRiYWNrRWxlbWVudHMucHVzaChmZWVkYmFja0VsZW1lbnQpO1xuICAgICAgZmVlZGJhY2tFbGVtZW50LmNoZWNrU2hvd0ZlZWRiYWNrKGZlZWRiYWNrRWxlbWVudC5vdXRjb21lSWRlbnRpZmllcik7XG4gICAgfSk7XG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdxdGktcmVnaXN0ZXItaW50ZXJhY3Rpb24nLCAoZTogQ3VzdG9tRXZlbnQ8bnVsbD4pID0+IHtcbiAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICB0aGlzLl9pbnRlcmFjdGlvbkVsZW1lbnRzLnB1c2goZS50YXJnZXQgYXMgSW50ZXJhY3Rpb24pO1xuICAgIH0pO1xuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignZW5kLWF0dGVtcHQnLCAoZTogQ3VzdG9tRXZlbnQ8eyByZXNwb25zZUlkZW50aWZpZXI6IHN0cmluZzsgY291bnRBdHRlbXB0OiBib29sZWFuIH0+KSA9PiB7XG4gICAgICBjb25zdCB7IHJlc3BvbnNlSWRlbnRpZmllciwgY291bnRBdHRlbXB0IH0gPSBlLmRldGFpbDtcbiAgICAgIHRoaXMudXBkYXRlUmVzcG9uc2VWYXJpYWJsZShyZXNwb25zZUlkZW50aWZpZXIsICd0cnVlJyk7XG4gICAgICB0aGlzLnByb2Nlc3NSZXNwb25zZShjb3VudEF0dGVtcHQpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgLy8gd29yZHQgYWFuZ2Vyb2VwZW4gdmFudWl0IGRlIHByb2Nlc3Npbmd0ZW1wbGF0ZVxuICAgICAgJ3F0aS1zZXQtb3V0Y29tZS12YWx1ZScsXG4gICAgICAoZTogQ3VzdG9tRXZlbnQ8eyBvdXRjb21lSWRlbnRpZmllcjogc3RyaW5nOyB2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10gfT4pID0+IHtcbiAgICAgICAgY29uc3QgeyBvdXRjb21lSWRlbnRpZmllciwgdmFsdWUgfSA9IGUuZGV0YWlsO1xuICAgICAgICB0aGlzLnVwZGF0ZU91dGNvbWVWYXJpYWJsZShvdXRjb21lSWRlbnRpZmllciwgdmFsdWUpO1xuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3F0aS1pbnRlcmFjdGlvbi1yZXNwb25zZScsIHRoaXMuaGFuZGxlVXBkYXRlUmVzcG9uc2VWYXJpYWJsZSk7XG4gIH1cblxuICBwdWJsaWMgc2hvd0NvcnJlY3RSZXNwb25zZShzaG93OiBib29sZWFuKSB7XG4gICAgY29uc3QgcmVzcG9uc2VWYXJpYWJsZXMgPSB0aGlzLl9jb250ZXh0LnZhcmlhYmxlcy5maWx0ZXIoXG4gICAgICAodmFyaTogUmVzcG9uc2VWYXJpYWJsZSB8IE91dGNvbWVWYXJpYWJsZSkgPT4gJ2NvcnJlY3RSZXNwb25zZScgaW4gdmFyaSAmJiB2YXJpLmNvcnJlY3RSZXNwb25zZVxuICAgICkgYXMgUmVzcG9uc2VWYXJpYWJsZVtdO1xuICAgIGNvbnN0IHJlc3BvbnNlcyA9IHJlc3BvbnNlVmFyaWFibGVzLm1hcChjciA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICByZXNwb25zZUlkZW50aWZpZXI6IGNyLmlkZW50aWZpZXIsXG4gICAgICAgIHJlc3BvbnNlOiBjci5jb3JyZWN0UmVzcG9uc2VcbiAgICAgIH07XG4gICAgfSk7XG4gICAgZm9yIChjb25zdCByZXNwb25zZSBvZiByZXNwb25zZXMpIHtcbiAgICAgIGNvbnN0IGludGVyYWN0aW9uOiBJbnRlcmFjdGlvbiB8IHVuZGVmaW5lZCA9IHRoaXMuX2ludGVyYWN0aW9uRWxlbWVudHMuZmluZChcbiAgICAgICAgaSA9PiBpLmdldEF0dHJpYnV0ZSgncmVzcG9uc2UtaWRlbnRpZmllcicpID09PSByZXNwb25zZS5yZXNwb25zZUlkZW50aWZpZXJcbiAgICAgICk7XG4gICAgICBpbnRlcmFjdGlvbiAmJiAoaW50ZXJhY3Rpb24uY29ycmVjdFJlc3BvbnNlID0gc2hvdyA/IHJlc3BvbnNlLnJlc3BvbnNlIDogJycpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBwcm9jZXNzUmVzcG9uc2UoY291bnROdW1BdHRlbXB0czogYm9vbGVhbiA9IHRydWUpOiBib29sZWFuIHtcbiAgICBjb25zdCByZXNwb25zZVByb2Nlc3NvciA9IHRoaXMucXVlcnlTZWxlY3RvcjxRdGlSZXNwb25zZVByb2Nlc3Npbmc+KCdxdGktcmVzcG9uc2UtcHJvY2Vzc2luZycpO1xuICAgIGlmICghcmVzcG9uc2VQcm9jZXNzb3IpIHtcbiAgICAgIC8vIGNvbnNvbGUuaW5mbygnQ2xpZW50IHNpZGUgcmVzcG9uc2UgcHJvY2Vzc2luZyB0ZW1wbGF0ZSBub3QgYXZhaWxhYmxlJyk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKCFyZXNwb25zZVByb2Nlc3Nvci5wcm9jZXNzKSB7XG4gICAgICAvLyBjb25zb2xlLmluZm8oJ0NsaWVudCBzaWRlIHJlc3BvbnNlIHdlYmNvbXBvbmVudHMgbm90IGF2YWlsYWJsZScpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJlc3BvbnNlUHJvY2Vzc29yLnByb2Nlc3MoKTtcblxuICAgIGlmICh0aGlzLmFkYXB0aXZlID09PSAnZmFsc2UnKSB7XG4gICAgICAvLyBpZiBhZGFwdGl2ZSwgY29tcGxldGlvblN0YXR1cyBpcyBzZXQgYnkgdGhlIHByb2Nlc3NpbmcgdGVtcGxhdGVcbiAgICAgIHRoaXMudXBkYXRlT3V0Y29tZVZhcmlhYmxlKCdjb21wbGV0aW9uU3RhdHVzJywgdGhpcy5fZ2V0Q29tcGxldGlvblN0YXR1cygpKTtcbiAgICB9XG5cbiAgICBjb3VudE51bUF0dGVtcHRzICYmXG4gICAgICB0aGlzLnVwZGF0ZU91dGNvbWVWYXJpYWJsZShcbiAgICAgICAgJ251bUF0dGVtcHRzJyxcbiAgICAgICAgKCt0aGlzLl9jb250ZXh0LnZhcmlhYmxlcy5maW5kKHYgPT4gdi5pZGVudGlmaWVyID09PSAnbnVtQXR0ZW1wdHMnKT8udmFsdWUgKyAxKS50b1N0cmluZygpXG4gICAgICApO1xuXG4gICAgdGhpcy5fZW1pdCgncXRpLXJlc3BvbnNlLXByb2Nlc3NlZCcpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHVibGljIHJlc2V0UmVzcG9uc2VzKCkge1xuICAgIHRoaXMuX2NvbnRleHQgPSB0aGlzLl9pbml0aWFsQ29udGV4dDtcbiAgfVxuXG4gIHB1YmxpYyBnZXRSZXNwb25zZShpZGVudGlmaWVyOiBzdHJpbmcpOiBSZWFkb25seTxSZXNwb25zZVZhcmlhYmxlPiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VmFyaWFibGUoaWRlbnRpZmllcikgYXMgUmVzcG9uc2VWYXJpYWJsZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRPdXRjb21lKGlkZW50aWZpZXI6IHN0cmluZyk6IFJlYWRvbmx5PE91dGNvbWVWYXJpYWJsZT4ge1xuICAgIHJldHVybiB0aGlzLmdldFZhcmlhYmxlKGlkZW50aWZpZXIpIGFzIE91dGNvbWVWYXJpYWJsZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRWYXJpYWJsZShpZGVudGlmaWVyOiBzdHJpbmcpOiBSZWFkb25seTxWYXJpYWJsZURlY2xhcmF0aW9uPHN0cmluZyB8IHN0cmluZ1tdIHwgbnVsbD4+IHtcbiAgICByZXR1cm4gdGhpcy5fY29udGV4dC52YXJpYWJsZXMuZmluZCh2ID0+IHYuaWRlbnRpZmllciA9PT0gaWRlbnRpZmllcikgfHwgbnVsbDtcbiAgfVxuXG4gIC8vIHNhdmluZyBwcml2YXRlcyBoZXJlOiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICBwcml2YXRlIGhhbmRsZVVwZGF0ZVJlc3BvbnNlVmFyaWFibGUoZXZlbnQ6IEN1c3RvbUV2ZW50PFJlc3BvbnNlSW50ZXJhY3Rpb24+KSB7XG4gICAgY29uc3QgeyByZXNwb25zZUlkZW50aWZpZXIsIHJlc3BvbnNlIH0gPSBldmVudC5kZXRhaWw7XG4gICAgdGhpcy51cGRhdGVSZXNwb25zZVZhcmlhYmxlKHJlc3BvbnNlSWRlbnRpZmllciwgcmVzcG9uc2UpO1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZVJlc3BvbnNlVmFyaWFibGUoaWRlbnRpZmllcjogc3RyaW5nLCB2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9jb250ZXh0ID0ge1xuICAgICAgLi4udGhpcy5fY29udGV4dCxcbiAgICAgIHZhcmlhYmxlczogdGhpcy5fY29udGV4dC52YXJpYWJsZXMubWFwKHYgPT4gKHYuaWRlbnRpZmllciAhPT0gaWRlbnRpZmllciA/IHYgOiB7IC4uLnYsIHZhbHVlOiB2YWx1ZSB9KSlcbiAgICB9O1xuXG4gICAgdGhpcy5fZW1pdDxJbnRlcmFjdGlvbkNoYW5nZWREZXRhaWxzPigncXRpLWludGVyYWN0aW9uLWNoYW5nZWQnLCB7XG4gICAgICBpdGVtOiB0aGlzLmlkZW50aWZpZXIsXG4gICAgICByZXNwb25zZUlkZW50aWZpZXI6IGlkZW50aWZpZXIsXG4gICAgICByZXNwb25zZTogQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyBbLi4udmFsdWVdIDogdmFsdWVcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLmFkYXB0aXZlID09PSAnZmFsc2UnKSB7XG4gICAgICAvLyBpZiBhZGFwYXRpdmUsIGNvbXBsZXRpb25TdGF0dXMgaXMgc2V0IGJ5IHRoZSBwcm9jZXNzaW5nIHRlbXBsYXRlXG4gICAgICB0aGlzLnVwZGF0ZU91dGNvbWVWYXJpYWJsZSgnY29tcGxldGlvblN0YXR1cycsIHRoaXMuX2dldENvbXBsZXRpb25TdGF0dXMoKSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHVwZGF0ZU91dGNvbWVWYXJpYWJsZShpZGVudGlmaWVyOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcgfCBzdHJpbmdbXSB8IHVuZGVmaW5lZCkge1xuICAgIGNvbnN0IG91dGNvbWVWYXJpYWJsZSA9IHRoaXMuZ2V0T3V0Y29tZShpZGVudGlmaWVyKTtcblxuICAgIGlmICghb3V0Y29tZVZhcmlhYmxlKSB7XG4gICAgICBjb25zb2xlLndhcm4oYENhbiBub3Qgc2V0IHF0aS1vdXRjb21lLWlkZW50aWZpZXI6ICR7aWRlbnRpZmllcn0sIGl0IGlzIG5vdCBhdmFpbGFibGVgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9jb250ZXh0ID0ge1xuICAgICAgLi4udGhpcy5fY29udGV4dCxcbiAgICAgIHZhcmlhYmxlczogdGhpcy5fY29udGV4dC52YXJpYWJsZXMubWFwKHYgPT4ge1xuICAgICAgICBpZiAodi5pZGVudGlmaWVyICE9PSBpZGVudGlmaWVyKSB7XG4gICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi52LFxuICAgICAgICAgIHZhbHVlOiBvdXRjb21lVmFyaWFibGUuY2FyZGluYWxpdHkgPT09ICdzaW5nbGUnID8gdmFsdWUgOiBbLi4udi52YWx1ZSwgdmFsdWUgYXMgc3RyaW5nXVxuICAgICAgICB9O1xuICAgICAgfSlcbiAgICB9O1xuICAgIHRoaXMuX2ZlZWRiYWNrRWxlbWVudHMuZm9yRWFjaChmZSA9PiBmZS5jaGVja1Nob3dGZWVkYmFjayhpZGVudGlmaWVyKSk7XG5cbiAgICB0aGlzLl9lbWl0PE91dGNvbWVDaGFuZ2VkRGV0YWlscz4oJ3F0aS1vdXRjb21lLWNoYW5nZWQnLCB7XG4gICAgICBpdGVtOiB0aGlzLmlkZW50aWZpZXIsXG4gICAgICBvdXRjb21lSWRlbnRpZmllcjogaWRlbnRpZmllcixcbiAgICAgIHZhbHVlOiB0aGlzLl9jb250ZXh0LnZhcmlhYmxlcy5maW5kKHYgPT4gdi5pZGVudGlmaWVyID09PSBpZGVudGlmaWVyKT8udmFsdWVcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX2dldENvbXBsZXRpb25TdGF0dXMoKTogJ2NvbXBsZXRlZCcgfCAnaW5jb21wbGV0ZScgfCAnbm90X2F0dGVtcHRlZCcgfCAndW5rbm93bicge1xuICAgIGlmICh0aGlzLl9pbnRlcmFjdGlvbkVsZW1lbnRzLmV2ZXJ5KGludGVyYWN0aW9uRWxlbWVudCA9PiBpbnRlcmFjdGlvbkVsZW1lbnQudmFsaWRhdGUoKSkpIHJldHVybiAnY29tcGxldGVkJztcbiAgICBpZiAodGhpcy5faW50ZXJhY3Rpb25FbGVtZW50cy5zb21lKGludGVyYWN0aW9uRWxlbWVudCA9PiBpbnRlcmFjdGlvbkVsZW1lbnQudmFsaWRhdGUoKSkpIHJldHVybiAnaW5jb21wbGV0ZSc7XG4gICAgcmV0dXJuICdub3RfYXR0ZW1wdGVkJztcbiAgfVxuXG4gIHByaXZhdGUgX2VtaXQ8VD4obmFtZSwgZGV0YWlsID0gbnVsbCkge1xuICAgIHRoaXMuZGlzcGF0Y2hFdmVudChcbiAgICAgIG5ldyBDdXN0b21FdmVudDxUPihuYW1lLCB7XG4gICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgIGNvbXBvc2VkOiB0cnVlLFxuICAgICAgICBkZXRhaWxcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktYXNzZXNzbWVudC1pdGVtJzogUXRpQXNzZXNzbWVudEl0ZW07XG4gIH1cbn1cbiIsICJpbXBvcnQgdHlwZSB7IExpdEVsZW1lbnQgfSBmcm9tICdsaXQnO1xuXG50eXBlIFVwZGF0ZUhhbmRsZXIgPSAocHJldj86IHVua25vd24sIG5leHQ/OiB1bmtub3duKSA9PiB2b2lkO1xuXG50eXBlIE5vblVuZGVmaW5lZDxBPiA9IEEgZXh0ZW5kcyB1bmRlZmluZWQgPyBuZXZlciA6IEE7XG5cbnR5cGUgVXBkYXRlSGFuZGxlckZ1bmN0aW9uS2V5czxUIGV4dGVuZHMgb2JqZWN0PiA9IHtcbiAgW0sgaW4ga2V5b2YgVF0tPzogTm9uVW5kZWZpbmVkPFRbS10+IGV4dGVuZHMgVXBkYXRlSGFuZGxlciA/IEsgOiBuZXZlcjtcbn1ba2V5b2YgVF07XG5cbmludGVyZmFjZSBXYXRjaE9wdGlvbnMge1xuICAvKipcbiAgICogSWYgdHJ1ZSwgd2lsbCBvbmx5IHN0YXJ0IHdhdGNoaW5nIGFmdGVyIHRoZSBpbml0aWFsIHVwZGF0ZS9yZW5kZXJcbiAgICovXG4gIHdhaXRVbnRpbEZpcnN0VXBkYXRlPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBSdW5zIHdoZW4gb2JzZXJ2ZWQgcHJvcGVydGllcyBjaGFuZ2UsIGUuZy4gQHByb3BlcnR5IG9yIEBzdGF0ZSwgYnV0IGJlZm9yZSB0aGUgY29tcG9uZW50IHVwZGF0ZXMuIFRvIHdhaXQgZm9yIGFuXG4gKiB1cGRhdGUgdG8gY29tcGxldGUgYWZ0ZXIgYSBjaGFuZ2Ugb2NjdXJzLCB1c2UgYGF3YWl0IHRoaXMudXBkYXRlQ29tcGxldGVgIGluIHRoZSBoYW5kbGVyLiBUbyBzdGFydCB3YXRjaGluZyBhZnRlciB0aGVcbiAqIGluaXRpYWwgdXBkYXRlL3JlbmRlciwgdXNlIGB7IHdhaXRVbnRpbEZpcnN0VXBkYXRlOiB0cnVlIH1gIG9yIGB0aGlzLmhhc1VwZGF0ZWRgIGluIHRoZSBoYW5kbGVyLlxuICpcbiAqIFVzYWdlOlxuICpcbiAqIEB3YXRjaCgncHJvcE5hbWUnKVxuICogaGFuZGxlUHJvcENoYW5nZShvbGRWYWx1ZSwgbmV3VmFsdWUpIHtcbiAqICAgLi4uXG4gKiB9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3YXRjaChwcm9wZXJ0eU5hbWU6IHN0cmluZyB8IHN0cmluZ1tdLCBvcHRpb25zPzogV2F0Y2hPcHRpb25zKSB7XG4gIGNvbnN0IHJlc29sdmVkT3B0aW9uczogUmVxdWlyZWQ8V2F0Y2hPcHRpb25zPiA9IHtcbiAgICB3YWl0VW50aWxGaXJzdFVwZGF0ZTogZmFsc2UsXG4gICAgLi4ub3B0aW9uc1xuICB9O1xuICByZXR1cm4gPEVsZW1DbGFzcyBleHRlbmRzIExpdEVsZW1lbnQ+KHByb3RvOiBFbGVtQ2xhc3MsIGRlY29yYXRlZEZuTmFtZTogVXBkYXRlSGFuZGxlckZ1bmN0aW9uS2V5czxFbGVtQ2xhc3M+KSA9PiB7XG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIHVwZGF0ZSBpcyBhIHByb3RlY3RlZCBwcm9wZXJ0eVxuICAgIGNvbnN0IHsgdXBkYXRlIH0gPSBwcm90bztcbiAgICBjb25zdCB3YXRjaGVkUHJvcGVydGllcyA9IEFycmF5LmlzQXJyYXkocHJvcGVydHlOYW1lKSA/IHByb3BlcnR5TmFtZSA6IFtwcm9wZXJ0eU5hbWVdO1xuXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIHVwZGF0ZSBpcyBhIHByb3RlY3RlZCBwcm9wZXJ0eVxuICAgIHByb3RvLnVwZGF0ZSA9IGZ1bmN0aW9uICh0aGlzOiBFbGVtQ2xhc3MsIGNoYW5nZWRQcm9wczogTWFwPGtleW9mIEVsZW1DbGFzcywgRWxlbUNsYXNzW2tleW9mIEVsZW1DbGFzc10+KSB7XG4gICAgICB3YXRjaGVkUHJvcGVydGllcy5mb3JFYWNoKHByb3BlcnR5ID0+IHtcbiAgICAgICAgY29uc3Qga2V5ID0gcHJvcGVydHkgYXMga2V5b2YgRWxlbUNsYXNzO1xuICAgICAgICBpZiAoY2hhbmdlZFByb3BzLmhhcyhrZXkpKSB7XG4gICAgICAgICAgY29uc3Qgb2xkVmFsdWUgPSBjaGFuZ2VkUHJvcHMuZ2V0KGtleSk7XG4gICAgICAgICAgY29uc3QgbmV3VmFsdWUgPSB0aGlzW2tleV07XG5cbiAgICAgICAgICBpZiAob2xkVmFsdWUgIT09IG5ld1ZhbHVlKSB7XG4gICAgICAgICAgICBpZiAoIXJlc29sdmVkT3B0aW9ucy53YWl0VW50aWxGaXJzdFVwZGF0ZSB8fCB0aGlzLmhhc1VwZGF0ZWQpIHtcbiAgICAgICAgICAgICAgKHRoaXNbZGVjb3JhdGVkRm5OYW1lXSBhcyB1bmtub3duIGFzIFVwZGF0ZUhhbmRsZXIpKG9sZFZhbHVlLCBuZXdWYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgdXBkYXRlLmNhbGwodGhpcywgY2hhbmdlZFByb3BzKTtcbiAgICB9O1xuICB9O1xufVxuIiwgImltcG9ydCB7IGNyZWF0ZUNvbnRleHQgfSBmcm9tICdAbGl0L2NvbnRleHQnO1xuaW1wb3J0IHsgVmFyaWFibGVEZWNsYXJhdGlvbiB9IGZyb20gJy4uL2ludGVybmFsL3ZhcmlhYmxlcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSXRlbUNvbnRleHQge1xuICBocmVmPzogc3RyaW5nO1xuICBpZGVudGlmaWVyOiBzdHJpbmc7XG4gIHZhcmlhYmxlczogUmVhZG9ubHlBcnJheTxWYXJpYWJsZURlY2xhcmF0aW9uPHN0cmluZyB8IHN0cmluZ1tdPj47XG59XG5cbmV4cG9ydCBjb25zdCBpdGVtQ29udGV4dFZhcmlhYmxlcyA9IFtcbiAge1xuICAgIGlkZW50aWZpZXI6ICdjb21wbGV0aW9uU3RhdHVzJyxcbiAgICBjYXJkaW5hbGl0eTogJ3NpbmdsZScsXG4gICAgYmFzZVR5cGU6ICdzdHJpbmcnLFxuICAgIHZhbHVlOiAndW5rbm93bicsXG4gICAgdHlwZTogJ291dGNvbWUnXG4gIH0sXG4gIHtcbiAgICBpZGVudGlmaWVyOiAnbnVtQXR0ZW1wdHMnLFxuICAgIGNhcmRpbmFsaXR5OiAnc2luZ2xlJyxcbiAgICBiYXNlVHlwZTogJ2ludGVnZXInLFxuICAgIHZhbHVlOiAnMCcsXG4gICAgdHlwZTogJ3Jlc3BvbnNlJ1xuICB9XG5dIGFzIFZhcmlhYmxlRGVjbGFyYXRpb248c3RyaW5nIHwgc3RyaW5nW10+W107XG5cbmV4cG9ydCBjb25zdCBpdGVtQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQ8SXRlbUNvbnRleHQ+KCdpdGVtJyk7XG4iLCAiaW1wb3J0IHsgTGl0RWxlbWVudCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50LCBwcm9wZXJ0eSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IHF0aVRyYW5zZm9ybUl0ZW0gfSBmcm9tICcuLi8uLi9xdGktdHJhbnNmb3JtZXJzJztcblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgY3VzdG9tIGVsZW1lbnQgZm9yIHJlZmVyZW5jaW5nIGFuIGFzc2Vzc21lbnQgc3RpbXVsdXMuXG4gKi9cbkBjdXN0b21FbGVtZW50KCdxdGktYXNzZXNzbWVudC1zdGltdWx1cy1yZWYnKVxuZXhwb3J0IGNsYXNzIFF0aUFzc2Vzc21lbnRTdGltdWx1c1JlZiBleHRlbmRzIExpdEVsZW1lbnQge1xuICAvKipcbiAgICogVGhlIGlkZW50aWZpZXIgb2YgdGhlIHN0aW11bHVzLlxuICAgKi9cbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nIH0pIGlkZW50aWZpZXIgPSAnJztcblxuICAvKipcbiAgICogVGhlIGhyZWYgb2YgdGhlIHN0aW11bHVzLlxuICAgKi9cbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nIH0pIGhyZWYgPSAnJztcblxuICAvKipcbiAgICogTGlmZWN5Y2xlIG1ldGhvZCBjYWxsZWQgd2hlbiB0aGUgZWxlbWVudCBpcyBjb25uZWN0ZWQgdG8gdGhlIERPTS5cbiAgICogTG9hZHMgYW5kIGFwcGVuZHMgdGhlIHN0aW11bHVzIGlmIHRoZSAncXRpLWFzc2Vzc21lbnQtc3RpbXVsdXMtcmVmLWNvbm5lY3RlZCcgZXZlbnQgaXMgbm90IHByZXZlbnRlZC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBjb25uZWN0ZWRDYWxsYmFjaygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuXG4gICAgY29uc3QgZXZlbnQgPSBuZXcgRXZlbnQoJ3F0aS1hc3Nlc3NtZW50LXN0aW11bHVzLXJlZi1jb25uZWN0ZWQnLCB7IGNhbmNlbGFibGU6IHRydWUsIGJ1YmJsZXM6IHRydWUgfSk7XG4gICAgY29uc3QgaXNQcmV2ZW50ZWQgPSB0aGlzLmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xuXG4gICAgaWYgKGlzUHJldmVudGVkKSB7XG4gICAgICBjb25zdCBpdGVtID0gdGhpcy5jbG9zZXN0KCdxdGktYXNzZXNzbWVudC1pdGVtJyk7XG5cbiAgICAgIGNvbnN0IHN0aW11bHVzUmVmID0gaXRlbS5xdWVyeVNlbGVjdG9yKGBbZGF0YS1zdGltdWx1cy1pZHJlZj0ke3RoaXMuaWRlbnRpZmllcn1dYCk7XG4gICAgICBpZiAoc3RpbXVsdXNSZWYpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkQW5kQXBwZW5kU3RpbXVsdXMoc3RpbXVsdXNSZWYpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS53YXJuKGBTdGltdWx1cyB3aXRoIGRhdGEtc3RpbXVsdXMtaWRyZWYgJHt0aGlzLmlkZW50aWZpZXJ9IG5vdCBmb3VuZGApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkcyBhbmQgYXBwZW5kcyB0aGUgc3RpbXVsdXMgdG8gdGhlIHNwZWNpZmllZCBlbGVtZW50LlxuICAgKiBAcGFyYW0gc3RpbXVsdXNSZWYgLSBUaGUgZWxlbWVudCB0byB3aGljaCB0aGUgc3RpbXVsdXMgd2lsbCBiZSBhcHBlbmRlZC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBsb2FkQW5kQXBwZW5kU3RpbXVsdXMoc3RpbXVsdXNSZWY6IEVsZW1lbnQpIHtcbiAgICBjb25zdCBwYXRoID0gdGhpcy5ocmVmLnN1YnN0cmluZygwLCB0aGlzLmhyZWYubGFzdEluZGV4T2YoJy8nKSk7XG4gICAgY29uc3Qgc3RpbXVsdXMgPSBhd2FpdCBxdGlUcmFuc2Zvcm1JdGVtKClcbiAgICAgIC5sb2FkKHRoaXMuaHJlZilcbiAgICAgIC50aGVuKGFwaSA9PiBhcGkucGF0aChwYXRoKS5odG1sZG9jKCkpO1xuICAgIGlmIChzdGltdWx1cykgeyAgICAgIFxuICAgICAgY29uc3QgZWxlbWVudHMgPSBzdGltdWx1cy5xdWVyeVNlbGVjdG9yQWxsKCdxdGktc3RpbXVsdXMtYm9keSwgcXRpLXN0eWxlc2hlZXQnKTtcbiAgICAgIHN0aW11bHVzUmVmLmFwcGVuZCguLi5lbGVtZW50cyk7ICAgICAgXG4gICAgICBjb25zdCB0aXRsZSA9IChzdGltdWx1cy5xdWVyeVNlbGVjdG9yKCdxdGktYXNzZXNzbWVudC1zdGltdWx1cycpIGFzIEhUTUxFbGVtZW50KT8udGl0bGU7XG4gICAgICBpZiAodGl0bGUuaW5jbHVkZXMoJyhsaWpzdCknKSkge1xuICAgICAgICBzdGltdWx1c1JlZi5jbGFzc0xpc3QuYWRkKCdxdGktc3RpbXVsdXMtbGlzdCcpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktYXNzZXNzbWVudC1zdGltdWx1cy1yZWYnOiBRdGlBc3Nlc3NtZW50U3RpbXVsdXNSZWY7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBMaXRFbGVtZW50LCBodG1sIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgd2F0Y2ggfSBmcm9tICcuLi8uLi8uLi8uLi9kZWNvcmF0b3JzL3dhdGNoJztcblxuY29uc3QgS0VZQ09ERSA9IHtcbiAgU1BBQ0U6IDMyXG59O1xuXG4vKipcbiAqIEBzdW1tYXJ5IHF0aS1jaG9pY2UgaXMgdXNlZCBieSBxdGktc2ltcGxlLWNob2ljZSwgcXRpLWlubGluZS1jaG9pY2UsIHF0aS1ob3R0ZXh0LCBxdGktaG90c3BvdC1jaG9pY2UuXG4gKlxuICogQHNpbmNlIDEuMFxuICogQHN0YXR1cyBzdGFibGVcbiAqXG4gKiBAZXZlbnQgcXRpLXJlZ2lzdGVyLWNob2ljZSAtIHJlZ2lzdGVyIGl0c2VsdmVzIG9uIGEgcXRpLWNob2ljZS1pbnRlcmFjdGlvbiBlbGVtZW50LlxuICogQGV2ZW50IHF0aS1sb29zZS1jaG9pY2UgLSBkZS1yZWdpc3RlciBpdHNlbHZlcyBvbiBhIHF0aS1jaG9pY2UtaW50ZXJhY3Rpb24gZWxlbWVudC5cbiAqIEBldmVudCBxdGktY2hvaWNlLWVsZW1lbnQtc2VsZWN0ZWQgLSBFbWl0dGVkIHdoZW4gdGhlIGNob2ljZSBpcyBzZWxlY3RlZC5cbiAqXG4gKiBAc2xvdCAtIFRoZSBjaG9pY2VzIHNsb3QgZWxlbWVudFxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgUXRpQ2hvaWNlIGV4dGVuZHMgTGl0RWxlbWVudCB7XG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZyB9KSBpZGVudGlmaWVyOiBzdHJpbmc7XG5cbiAgQHByb3BlcnR5KHsgdHlwZTogTnVtYmVyLCByZWZsZWN0OiB0cnVlIH0pIHRhYmluZGV4OiBudW1iZXIgfCB1bmRlZmluZWQgPSAwO1xuXG4gIEBwcm9wZXJ0eSh7XG4gICAgcmVmbGVjdDogdHJ1ZSxcbiAgICB0eXBlOiBCb29sZWFuLFxuICAgIGF0dHJpYnV0ZTogJ2FyaWEtZGlzYWJsZWQnLFxuICAgIGNvbnZlcnRlcjoge1xuICAgICAgdG9BdHRyaWJ1dGU6IHZhbHVlID0+IHZhbHVlXG4gICAgfVxuICB9KVxuICBkaXNhYmxlZCA9IGZhbHNlO1xuXG4gIEBwcm9wZXJ0eSh7XG4gICAgcmVmbGVjdDogdHJ1ZSxcbiAgICB0eXBlOiBCb29sZWFuLFxuICAgIGF0dHJpYnV0ZTogJ2FyaWEtcmVhZG9ubHknLFxuICAgIGNvbnZlcnRlcjoge1xuICAgICAgdG9BdHRyaWJ1dGU6IHZhbHVlID0+IHZhbHVlXG4gICAgfVxuICB9KVxuICByZWFkb25seSA9IGZhbHNlO1xuXG4gIEBwcm9wZXJ0eSh7XG4gICAgcmVmbGVjdDogdHJ1ZSxcbiAgICB0eXBlOiBCb29sZWFuLFxuICAgIGF0dHJpYnV0ZTogJ2FyaWEtY2hlY2tlZCcsXG4gICAgY29udmVydGVyOiB7XG4gICAgICB0b0F0dHJpYnV0ZTogdmFsdWUgPT4gdmFsdWVcbiAgICB9XG4gIH0pXG4gIGNoZWNrZWQgPSBmYWxzZTtcblxuICBAd2F0Y2goJ2Rpc2FibGVkJywgeyB3YWl0VW50aWxGaXJzdFVwZGF0ZTogdHJ1ZSB9KVxuICBoYW5kbGVEaXNhYmxlZENoYW5nZShfOiBib29sZWFuLCBkaXNhYmxlZDogYm9vbGVhbikge1xuICAgIGlmIChkaXNhYmxlZCkge1xuICAgICAgdGhpcy50YWJpbmRleCA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuYmx1cigpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnRhYkluZGV4ID0gMDtcbiAgICB9XG4gIH1cblxuICBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuXG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdrZXl1cCcsIHRoaXMuX29uS2V5VXApO1xuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLl9vbkNsaWNrKTtcblxuICAgIHRoaXMuZGlzcGF0Y2hFdmVudChcbiAgICAgIG5ldyBDdXN0b21FdmVudCgncXRpLXJlZ2lzdGVyLWNob2ljZScsIHtcbiAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgY2FuY2VsYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbXBvc2VkOiB0cnVlXG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBvdmVycmlkZSBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleXVwJywgdGhpcy5fb25LZXlVcCk7XG4gICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuX29uQ2xpY2spO1xuXG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KFxuICAgICAgbmV3IEN1c3RvbUV2ZW50KCdxdGktbG9vc2UtY2hvaWNlJywge1xuICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICBjYW5jZWxhYmxlOiBmYWxzZSxcbiAgICAgICAgY29tcG9zZWQ6IHRydWVcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyByZXNldCgpIHtcbiAgICB0aGlzLmNoZWNrZWQgPSBmYWxzZTtcbiAgICB0aGlzLmRpc2FibGVkID0gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIF9vbktleVVwKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LmFsdEtleSkgcmV0dXJuO1xuXG4gICAgc3dpdGNoIChldmVudC5rZXlDb2RlKSB7XG4gICAgICBjYXNlIEtFWUNPREUuU1BBQ0U6XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuX3RvZ2dsZUNoZWNrZWQoKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfb25DbGljaygpIHtcbiAgICB0aGlzLl90b2dnbGVDaGVja2VkKCk7XG4gIH1cblxuICBwcml2YXRlIF90b2dnbGVDaGVja2VkKCkge1xuICAgIGlmICh0aGlzLmRpc2FibGVkIHx8IHRoaXMucmVhZG9ubHkpIHJldHVybjtcbiAgICB0aGlzLmNoZWNrZWQgPSAhdGhpcy5jaGVja2VkO1xuXG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KFxuICAgICAgbmV3IEN1c3RvbUV2ZW50KCdxdGktY2hvaWNlLWVsZW1lbnQtc2VsZWN0ZWQnLCB7XG4gICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgIGNhbmNlbGFibGU6IGZhbHNlLFxuICAgICAgICBjb21wb3NlZDogdHJ1ZSxcbiAgICAgICAgZGV0YWlsOiB7IGlkZW50aWZpZXI6IHRoaXMuaWRlbnRpZmllciwgY2hlY2tlZDogdGhpcy5jaGVja2VkIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICByZXR1cm4gaHRtbGAgPHNsb3Q+PC9zbG90PiBgO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1jaG9pY2UnOiBRdGlDaG9pY2U7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBjdXN0b21FbGVtZW50IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgaHRtbCwgTGl0RWxlbWVudCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgc3R5bGVzIGZyb20gJy4vcXRpLWl0ZW0tYm9keS5zdHlsZXMnO1xuaW1wb3J0IHR5cGUgeyBDU1NSZXN1bHRHcm91cCB9IGZyb20gJ2xpdCc7XG5cbi8qKlxuICogQHN1bW1hcnkgVGhlIHF0aS1pdGVtLWJvZHkgbm9kZSBjb250YWlucyB0aGUgdGV4dCwgZ3JhcGhpY3MsIG1lZGlhIG9iamVjdHMgYW5kIGludGVyYWN0aW9ucyB0aGF0IGRlc2NyaWJlIHRoZSBpdGVtJ3MgY29udGVudCBhbmQgaW5mb3JtYXRpb24gYWJvdXQgaG93IGl0IGlzIHN0cnVjdHVyZWQuXG4gKiBAZG9jdW1lbnRhdGlvbiBodHRwczovL3d3dy5pbXNnbG9iYWwub3JnL3NwZWMvcXRpL3YzcDAvaW1wbCNoLnNwaHBvNmx1NnpxaVxuICogQHN0YXR1cyBzdGFibGVcbiAqIEBzaW5jZSA0LjBcbiAqXG4gKiBAc2xvdCAtIGl0ZW0gYm9keSBjb250ZW50LlxuICogQHNsb3QgcXRpLXJ1YnJpYy1ibG9jayAtIHRoZSBxdGkgcnVicmljIGJsb2NrIGlzIHBsYWNlZCBhYm92ZSB0aGUgaXRlbVxuICpcbiAqL1xuQGN1c3RvbUVsZW1lbnQoJ3F0aS1pdGVtLWJvZHknKVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUXRpSXRlbUJvZHkgZXh0ZW5kcyBMaXRFbGVtZW50IHtcbiAgc3RhdGljIHN0eWxlczogQ1NTUmVzdWx0R3JvdXAgPSBzdHlsZXM7XG5cbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYDxzbG90IG5hbWU9XCJxdGktcnVicmljLWJsb2NrXCI+PC9zbG90PjxzbG90Pjwvc2xvdD5gO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1pdGVtLWJvZHknOiBRdGlJdGVtQm9keTtcbiAgfVxufVxuIiwgImltcG9ydCB7IGNzcyB9IGZyb20gJ2xpdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNzc2BcbiAgOmhvc3Qge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICB9XG5gO1xuIiwgImltcG9ydCB7IGh0bWwsIExpdEVsZW1lbnQgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbkBjdXN0b21FbGVtZW50KCdxdGktcHJvbXB0JylcbmV4cG9ydCBjbGFzcyBRdGlQcm9tcHQgZXh0ZW5kcyBMaXRFbGVtZW50IHtcbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYDxzbG90Pjwvc2xvdD5gO1xuICB9XG5cbiAgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgLy8gaWYgcHJvbXB0cyBhcmUgaW4gaW50ZXJhY3Rpb25zIHRoZXkgc2hvdWxkIGhhdmUgYSBzbG90LCBzbyB0aGUgcHJvbXB0IGhhcyB0byBnbyB0aGVyZVxuICAgIC8vIGlmIHByb21wdCBpcyBpbiB0aGUgYm9keSwgdGhlbiBqdXN0IGRpc3BsYXkgdGhlIHByb21wdCB0aGVyZS5cbiAgICAvLyBBIGJldHRlciBjaGVjayB3b3VsZCBiZSB0aGUgbGF0dGVyLCBidXQgbm90IGNhbid0IGdldCB0aHJvdWdoIHRoZSBzaGFkb3dyb290IHRvIGZpbmQgdGhlIHNsb3RcbiAgICBjb25zdCBpbkludGVyYWN0aW9uID0gdGhpcy5wYXJlbnRFbGVtZW50LnRhZ05hbWUuZW5kc1dpdGgoJ0lOVEVSQUNUSU9OJyk7XG4gICAgaW5JbnRlcmFjdGlvbiAmJiB0aGlzLnNldEF0dHJpYnV0ZSgnc2xvdCcsICdwcm9tcHQnKTtcbiAgICAvLyBjb25zdCBwcm9tcHRTbG90ID0gdGhpcy5wYXJlbnRFbGVtZW50LnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcihcIltuYW1lPSdwcm9tcHQnXVwiKTtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktcHJvbXB0JzogUXRpUHJvbXB0O1xuICB9XG59XG4iLCAiaW1wb3J0IHsgTGl0RWxlbWVudCwgUHJvcGVydHlWYWx1ZU1hcCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuXG5AY3VzdG9tRWxlbWVudCgncXRpLXN0eWxlc2hlZXQnKVxuZXhwb3J0IGNsYXNzIFF0aVN0eWxlc2hlZXQgZXh0ZW5kcyBMaXRFbGVtZW50IHtcbiAgcHJpdmF0ZSBzdHlsZUxpbms6IEhUTUxTdHlsZUVsZW1lbnQgfCBIVE1MTGlua0VsZW1lbnQ7XG5cbiAgLy8gcHJvdGVjdGVkIGNyZWF0ZVJlbmRlclJvb3QoKTogSFRNTEVsZW1lbnQgfCBEb2N1bWVudEZyYWdtZW50IHtcbiAgLy8gICByZXR1cm4gdGhpcztcbiAgLy8gfVxuXG4gIHByb3RlY3RlZCBmaXJzdFVwZGF0ZWQoX2NoYW5nZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eVZhbHVlTWFwPGFueT4gfCBNYXA8UHJvcGVydHlLZXksIHVua25vd24+KTogdm9pZCB7XG4gICAgc3VwZXIuZmlyc3RVcGRhdGVkKF9jaGFuZ2VkUHJvcGVydGllcyk7XG5cbiAgICBjb25zdCBpdGVtID0gdGhpcztcbiAgICBjb25zdCBsaW5rID0gdGhpcy5nZXRBdHRyaWJ1dGUoJ2hyZWYnKTtcblxuICAgIGlmIChsaW5rICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBzdHlsZXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsaW5rJyk7XG4gICAgICBzdHlsZXMucmVsID0gJ3N0eWxlc2hlZXQnO1xuICAgICAgc3R5bGVzLnR5cGUgPSAndGV4dC9jc3MnO1xuICAgICAgc3R5bGVzLm1lZGlhID0gJ3NjcmVlbic7XG4gICAgICBzdHlsZXMuaHJlZiA9IGxpbms7XG4gICAgICBpdGVtLmFwcGVuZENoaWxkKHN0eWxlcyk7XG4gICAgICB0aGlzLnN0eWxlTGluayA9IHN0eWxlcztcbiAgICB9XG5cbiAgICBpZiAodGhpcy50ZXh0Q29udGVudCAhPT0gbnVsbCkge1xuICAgICAgY29uc3Qgc3R5bGVzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcbiAgICAgIHN0eWxlcy5tZWRpYSA9ICdzY3JlZW4nO1xuICAgICAgc3R5bGVzLnRleHRDb250ZW50ID0gdGhpcy50ZXh0Q29udGVudDtcbiAgICAgIGl0ZW0uYXBwZW5kQ2hpbGQoc3R5bGVzKTtcbiAgICAgIHRoaXMuc3R5bGVMaW5rID0gc3R5bGVzO1xuICAgIH1cbiAgfVxuXG4gIG92ZXJyaWRlIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIGlmICh0aGlzLnN0eWxlTGluaykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5zdHlsZUxpbmsucmVtb3ZlKCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmxvZygnY291bGQgbm90IHJlbW92ZSBzdHlsZXNoZWV0Jyk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1zdHlsZXNoZWV0JzogUXRpU3R5bGVzaGVldDtcbiAgfVxufVxuIiwgImltcG9ydCB7IGNvbnN1bWUgfSBmcm9tICdAbGl0L2NvbnRleHQnO1xuaW1wb3J0IHsgY3NzLCBodG1sIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQsIHByb3BlcnR5LCBzdGF0ZSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IEJhc2VUeXBlLCBDYXJkaW5hbGl0eSB9IGZyb20gJy4uLy4uL2ludGVybmFsL2V4cHJlc3Npb24tcmVzdWx0JztcbmltcG9ydCB7IE91dGNvbWVWYXJpYWJsZSB9IGZyb20gJy4uLy4uL2ludGVybmFsL3ZhcmlhYmxlcyc7XG5pbXBvcnQgeyBJdGVtQ29udGV4dCwgaXRlbUNvbnRleHQgfSBmcm9tICcuLi8uLi9xdGktYXNzZXNzbWVudC1pdGVtL3F0aS1hc3Nlc3NtZW50LWl0ZW0uY29udGV4dCc7XG5pbXBvcnQgeyBRdGlWYXJpYWJsZURlY2xhcmF0aW9uIH0gZnJvbSAnLi4vcXRpLXZhcmlhYmxlLWRlY2xhcmF0aW9uJztcblxuQGN1c3RvbUVsZW1lbnQoJ3F0aS1vdXRjb21lLWRlY2xhcmF0aW9uJylcbmV4cG9ydCBjbGFzcyBRdGlPdXRjb21lRGVjbGFyYXRpb24gZXh0ZW5kcyBRdGlWYXJpYWJsZURlY2xhcmF0aW9uIHtcbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nLCBhdHRyaWJ1dGU6ICdiYXNlLXR5cGUnIH0pIGJhc2VUeXBlOiBCYXNlVHlwZTtcbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nLCBhdHRyaWJ1dGU6ICdleHRlcm5hbC1zY29yZWQnIH0pIGV4dGVybmFsU2NvcmVkOiAnaHVtYW4nIHwgJ2V4dGVybmFsTWFjaGluZScgfCBudWxsID0gbnVsbDtcbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nIH0pIGlkZW50aWZpZXI6IHN0cmluZztcbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nIH0pIGNhcmRpbmFsaXR5OiBDYXJkaW5hbGl0eTtcblxuICBAY29uc3VtZSh7IGNvbnRleHQ6IGl0ZW1Db250ZXh0LCBzdWJzY3JpYmU6IHRydWUgfSlcbiAgQHN0YXRlKClcbiAgcHVibGljIGl0ZW1Db250ZXh0PzogSXRlbUNvbnRleHQ7XG5cbiAgc3RhdGljIHN0eWxlcyA9IFtcbiAgICBjc3NgXG4gICAgICA6aG9zdCB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICB9XG4gICAgYFxuICBdO1xuXG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuaXRlbUNvbnRleHQ/LnZhcmlhYmxlcy5maW5kKHYgPT4gdi5pZGVudGlmaWVyID09PSB0aGlzLmlkZW50aWZpZXIpPy52YWx1ZTtcbiAgICByZXR1cm4gaHRtbGAke0pTT04uc3RyaW5naWZ5KHZhbHVlLCBudWxsLCAyKX1gO1xuICB9XG5cbiAgZ2V0IGludGVycG9sYXRpb25UYWJsZSgpOiBNYXA8bnVtYmVyLCBudW1iZXI+IHwgbnVsbCB7XG4gICAgY29uc3QgdGFibGUgPSB0aGlzLnF1ZXJ5U2VsZWN0b3IoJ3F0aS1pbnRlcnBvbGF0aW9uLXRhYmxlJyk7XG4gICAgaWYgKHRhYmxlKSB7XG4gICAgICBjb25zdCBlbnRyaWVzID0gbmV3IE1hcDxudW1iZXIsIG51bWJlcj4oKTtcbiAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgdGFibGUucXVlcnlTZWxlY3RvckFsbCgncXRpLWludGVycG9sYXRpb24tdGFibGUtZW50cnknKSkge1xuICAgICAgICBpZiAoIWVudHJ5LmdldEF0dHJpYnV0ZSgnc291cmNlLXZhbHVlJykgJiYgZW50cnkuZ2V0QXR0cmlidXRlKCd0YXJnZXQtdmFsdWUnKSkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ3NvdXJjZS12YWx1ZSBvciB0YXJnZXQtdmFsdWUgaXMgbWlzc2luZyBpbiBxdGktaW50ZXJwb2xhdGlvbi10YWJsZS1lbnRyeScpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNvdXJjZVZhbHVlID0gcGFyc2VJbnQoZW50cnkuZ2V0QXR0cmlidXRlKCdzb3VyY2UtdmFsdWUnKSk7XG4gICAgICAgIGNvbnN0IHRhcmdldFZhbHVlID0gcGFyc2VJbnQoZW50cnkuZ2V0QXR0cmlidXRlKCd0YXJnZXQtdmFsdWUnKSk7XG4gICAgICAgIGlmIChpc05hTihzb3VyY2VWYWx1ZSkgfHwgaXNOYU4odGFyZ2V0VmFsdWUpKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignc291cmNlLXZhbHVlIG9yIHRhcmdldC12YWx1ZSBpcyBub3QgYSBudW1iZXIgaW4gcXRpLWludGVycG9sYXRpb24tdGFibGUtZW50cnknKTtcbiAgICAgICAgfVxuICAgICAgICBlbnRyaWVzLnNldChzb3VyY2VWYWx1ZSwgdGFyZ2V0VmFsdWUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGVudHJpZXM7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgY29uc3Qgb3V0Y29tZVZhcmlhYmxlOiBPdXRjb21lVmFyaWFibGUgPSB7XG4gICAgICBpZGVudGlmaWVyOiB0aGlzLmlkZW50aWZpZXIsXG4gICAgICBjYXJkaW5hbGl0eTogdGhpcy5jYXJkaW5hbGl0eSxcbiAgICAgIGJhc2VUeXBlOiB0aGlzLmJhc2VUeXBlLFxuICAgICAgdHlwZTogJ291dGNvbWUnLFxuICAgICAgdmFsdWU6IG51bGwsXG4gICAgICBpbnRlcnBvbGF0aW9uVGFibGU6IHRoaXMuaW50ZXJwb2xhdGlvblRhYmxlLFxuICAgICAgZXh0ZXJuYWxTY29yZWQ6IHRoaXMuZXh0ZXJuYWxTY29yZWRcbiAgICB9O1xuICAgIG91dGNvbWVWYXJpYWJsZS52YWx1ZSA9IHRoaXMuZGVmYXVsdFZhbHVlcyhvdXRjb21lVmFyaWFibGUpO1xuICAgIHRoaXMuZGlzcGF0Y2hFdmVudChcbiAgICAgIG5ldyBDdXN0b21FdmVudCgncXRpLXJlZ2lzdGVyLXZhcmlhYmxlJywge1xuICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICBjb21wb3NlZDogdHJ1ZSxcbiAgICAgICAgZGV0YWlsOiB7IHZhcmlhYmxlOiBvdXRjb21lVmFyaWFibGUgfVxuICAgICAgfSlcbiAgICApO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1vdXRjb21lLWRlY2xhcmF0aW9uJzogUXRpT3V0Y29tZURlY2xhcmF0aW9uO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgaHRtbCwgTGl0RWxlbWVudCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgVmFyaWFibGVEZWNsYXJhdGlvbiB9IGZyb20gJy4uL2ludGVybmFsL3ZhcmlhYmxlcyc7XG5cbkBjdXN0b21FbGVtZW50KCdxdGktdmFyaWFibGVkZWNsYXJhdGlvbicpXG5leHBvcnQgY2xhc3MgUXRpVmFyaWFibGVEZWNsYXJhdGlvbiBleHRlbmRzIExpdEVsZW1lbnQge1xuICBvdmVycmlkZSByZW5kZXIoKSB7XG4gICAgcmV0dXJuIGh0bWxgPHNsb3Q+PC9zbG90PmA7XG4gIH1cblxuICBwcm90ZWN0ZWQgZGVmYXVsdFZhbHVlcyh2YXJpYWJsZTogVmFyaWFibGVEZWNsYXJhdGlvbjxzdHJpbmcgfCBzdHJpbmdbXSB8IG51bGw+KSB7XG4gICAgY29uc3QgaHRtbFZhbHVlcyA9IEFycmF5LmZyb20odGhpcy5xdWVyeVNlbGVjdG9yQWxsKCdxdGktZGVmYXVsdC12YWx1ZSA+IHF0aS12YWx1ZScpKTtcblxuICAgIGlmIChodG1sVmFsdWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgZGVmYXVsdFZhbHVlcyA9IGh0bWxWYWx1ZXMubWFwKG4gPT4gbi5pbm5lckhUTUwpO1xuICAgIGlmIChkZWZhdWx0VmFsdWVzLmxlbmd0aCA+IDEgfHwgdmFyaWFibGUuY2FyZGluYWxpdHkgPT09ICdtdWx0aXBsZScgfHwgdmFyaWFibGUuY2FyZGluYWxpdHkgPT09ICdvcmRlcmVkJykge1xuICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZXM7XG4gICAgfVxuICAgIHJldHVybiBkZWZhdWx0VmFsdWVzWzBdO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS12YXJpYWJsZWRlY2xhcmF0aW9uJzogUXRpVmFyaWFibGVEZWNsYXJhdGlvbjtcbiAgfVxufVxuIiwgImltcG9ydCB7IGNvbnN1bWUgfSBmcm9tICdAbGl0L2NvbnRleHQnO1xuaW1wb3J0IHsgY3NzLCBodG1sIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQsIHByb3BlcnR5LCBzdGF0ZSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IEJhc2VUeXBlLCBDYXJkaW5hbGl0eSB9IGZyb20gJy4uLy4uL2ludGVybmFsL2V4cHJlc3Npb24tcmVzdWx0JztcbmltcG9ydCB7IFJlc3BvbnNlVmFyaWFibGUgfSBmcm9tICcuLi8uLi9pbnRlcm5hbC92YXJpYWJsZXMnO1xuaW1wb3J0IHsgSXRlbUNvbnRleHQsIGl0ZW1Db250ZXh0IH0gZnJvbSAnLi4vLi4vcXRpLWFzc2Vzc21lbnQtaXRlbS9xdGktYXNzZXNzbWVudC1pdGVtLmNvbnRleHQnO1xuaW1wb3J0IHsgUXRpTWFwcGluZyB9IGZyb20gJy4uLy4uL3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nL3F0aS1leHByZXNzaW9uL3F0aS1tYXBwaW5nL3F0aS1tYXBwaW5nJztcbmltcG9ydCB7IFF0aVZhcmlhYmxlRGVjbGFyYXRpb24gfSBmcm9tICcuLi9xdGktdmFyaWFibGUtZGVjbGFyYXRpb24nO1xuXG5AY3VzdG9tRWxlbWVudCgncXRpLXJlc3BvbnNlLWRlY2xhcmF0aW9uJylcbmV4cG9ydCBjbGFzcyBRdGlSZXNwb25zZURlY2xhcmF0aW9uIGV4dGVuZHMgUXRpVmFyaWFibGVEZWNsYXJhdGlvbiB7XG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZywgYXR0cmlidXRlOiAnYmFzZS10eXBlJyB9KSBiYXNlVHlwZTogQmFzZVR5cGU7XG5cbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nIH0pIGlkZW50aWZpZXI6IHN0cmluZztcblxuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcgfSkgY2FyZGluYWxpdHk6IENhcmRpbmFsaXR5O1xuXG4gIEBjb25zdW1lKHsgY29udGV4dDogaXRlbUNvbnRleHQsIHN1YnNjcmliZTogdHJ1ZSB9KVxuICBAc3RhdGUoKVxuICBwdWJsaWMgaXRlbUNvbnRleHQ/OiBJdGVtQ29udGV4dDtcblxuICBzdGF0aWMgc3R5bGVzID0gW1xuICAgIGNzc2BcbiAgICAgIDpob3N0IHtcbiAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgIH1cbiAgICBgXG4gIF07XG5cbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5pdGVtQ29udGV4dD8udmFyaWFibGVzLmZpbmQodiA9PiB2LmlkZW50aWZpZXIgPT09IHRoaXMuaWRlbnRpZmllcik/LnZhbHVlO1xuICAgIHJldHVybiBodG1sYCR7SlNPTi5zdHJpbmdpZnkodmFsdWUsIG51bGwsIDIpfWA7XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcblxuICAgIGNvbnN0IHJlc3BvbnNlVmFyaWFibGU6IFJlc3BvbnNlVmFyaWFibGUgPSB7XG4gICAgICBiYXNlVHlwZTogdGhpcy5iYXNlVHlwZSxcbiAgICAgIGlkZW50aWZpZXI6IHRoaXMuaWRlbnRpZmllcixcbiAgICAgIGNvcnJlY3RSZXNwb25zZTogdGhpcy5jb3JyZWN0UmVzcG9uc2UsXG4gICAgICBjYXJkaW5hbGl0eTogdGhpcy5jYXJkaW5hbGl0eSB8fCAnc2luZ2xlJyxcbiAgICAgIG1hcHBpbmc6IHRoaXMubWFwcGluZyxcbiAgICAgIHZhbHVlOiBudWxsLFxuICAgICAgdHlwZTogJ3Jlc3BvbnNlJyxcbiAgICAgIGNhbmRpZGF0ZVJlc3BvbnNlOiBudWxsXG4gICAgfTtcbiAgICByZXNwb25zZVZhcmlhYmxlLnZhbHVlID0gdGhpcy5kZWZhdWx0VmFsdWVzKHJlc3BvbnNlVmFyaWFibGUpO1xuXG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KFxuICAgICAgbmV3IEN1c3RvbUV2ZW50KCdxdGktcmVnaXN0ZXItdmFyaWFibGUnLCB7XG4gICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgIGNvbXBvc2VkOiB0cnVlLFxuICAgICAgICBkZXRhaWw6IHsgdmFyaWFibGU6IHJlc3BvbnNlVmFyaWFibGUgfVxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgY29ycmVjdFJlc3BvbnNlKCk6IHN0cmluZyB8IHN0cmluZ1tdIHtcbiAgICBsZXQgcmVzdWx0OiBzdHJpbmcgfCBzdHJpbmdbXTtcbiAgICBjb25zdCBjb3JyZWN0UmVzcG9uc2UgPSB0aGlzLnF1ZXJ5U2VsZWN0b3IoJ3F0aS1jb3JyZWN0LXJlc3BvbnNlJyk7XG4gICAgaWYgKGNvcnJlY3RSZXNwb25zZSkge1xuICAgICAgY29uc3QgdmFsdWVzID0gY29ycmVjdFJlc3BvbnNlLnF1ZXJ5U2VsZWN0b3JBbGwoJ3F0aS12YWx1ZScpO1xuICAgICAgaWYgKHRoaXMuY2FyZGluYWxpdHkgPT09ICdzaW5nbGUnICYmIHZhbHVlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJlc3VsdCA9IHZhbHVlc1swXS50ZXh0Q29udGVudDtcbiAgICAgICAgdmFsdWVzWzBdLnJlbW92ZSgpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLmNhcmRpbmFsaXR5ICE9PSAnc2luZ2xlJykge1xuICAgICAgICByZXN1bHQgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICByZXN1bHQucHVzaCh2YWx1ZXNbaV0udGV4dENvbnRlbnQpO1xuICAgICAgICAgIHZhbHVlc1tpXS5yZW1vdmUoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgbWFwcGluZygpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yKCdxdGktbWFwcGluZycpIGFzIFF0aU1hcHBpbmc7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLXJlc3BvbnNlLWRlY2xhcmF0aW9uJzogUXRpUmVzcG9uc2VEZWNsYXJhdGlvbjtcbiAgfVxufVxuIiwgImltcG9ydCB7IExpdEVsZW1lbnQgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcblxuQGN1c3RvbUVsZW1lbnQoJ3F0aS1jb21wYW5pb24tbWF0ZXJpYWxzLWluZm8nKVxuZXhwb3J0IGNsYXNzIFF0aUNvbXBhbmlvbk1hdGVyaWFsc0luZm8gZXh0ZW5kcyBMaXRFbGVtZW50IHtcbiAgLy8gc3RhdGljIG92ZXJyaWRlIHN0eWxlcyA9IGNzc2BcbiAgLy8gICBzbG90IHtcbiAgLy8gICAgIGRpc3BsYXk6IGhpZGRlbjtcbiAgLy8gICB9XG4gIC8vIGA7XG4gIC8vIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgLy8gICByZXR1cm4gaHRtbGAgPHNsb3Q+PC9zbG90PiBgO1xuICAvLyB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1jb21wYW5pb24tbWF0ZXJpYWxzLWluZm8nOiBRdGlDb21wYW5pb25NYXRlcmlhbHNJbmZvO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgTGl0RWxlbWVudCwgaHRtbCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuXG5AY3VzdG9tRWxlbWVudCgncXRpLWNvbnRlbnQtYm9keScpXG5leHBvcnQgY2xhc3MgUXRpQ29udGVudEJvZHkgZXh0ZW5kcyBMaXRFbGVtZW50IHtcbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYDxzbG90Pjwvc2xvdD5gO1xuICB9XG59XG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktY29udGVudC1ib2R5JzogUXRpQ29udGVudEJvZHk7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBMaXRFbGVtZW50LCBjc3MsIGh0bWwgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCwgcHJvcGVydHkgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyB3YXRjaCB9IGZyb20gJy4uLy4uL2RlY29yYXRvcnMvd2F0Y2gnO1xuXG5AY3VzdG9tRWxlbWVudCgncXRpLXJ1YnJpYy1ibG9jaycpXG5leHBvcnQgY2xhc3MgUXRpUnVicmljQmxvY2sgZXh0ZW5kcyBMaXRFbGVtZW50IHtcbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nIH0pIG92ZXJyaWRlIGlkOyAvLyA9XCJxdGlBc3BlY3RJbmhvdWRSdWJyaWNCbG9ja1wiXG5cbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nIH0pIHVzZTogJ2luc3RydWN0aW9ucycgfCAnc2NvcmluZycgfCAnbmF2aWdhdGlvbic7IC8vICA9IFwic2NvcmluZ1wiXG5cbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nIH0pIHZpZXc6ICdhdXRob3InIHwgJ2NhbmRpZGF0ZScgfCAncHJvY3RvcicgfCAnc2NvcmVyJyB8ICd0ZXN0Q29uc3RydWN0b3InIHwgJ3R1dG9yJztcblxuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcsIGF0dHJpYnV0ZTogJ2NsYXNzJyB9KSBjbGFzc05hbWVzO1xuICBAd2F0Y2goJ2NsYXNzTmFtZXMnLCB7IHdhaXRVbnRpbEZpcnN0VXBkYXRlOiB0cnVlIH0pXG4gIGhhbmRsZWNsYXNzTmFtZXNDaGFuZ2Uob2xkLCBkaXNhYmxlZDogYm9vbGVhbikge1xuICAgIGNvbnN0IGNsYXNzTmFtZXMgPSB0aGlzLmNsYXNzTmFtZXMuc3BsaXQoJyAnKTtcbiAgICBjbGFzc05hbWVzLmZvckVhY2goKGNsYXNzTmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICBzd2l0Y2ggKGNsYXNzTmFtZSkge1xuICAgICAgICBjYXNlICdxdGktcnVicmljLWRpc2NyZXRpb25hcnktcGxhY2VtZW50JzpcbiAgICAgICAgICB0aGlzLnNldEF0dHJpYnV0ZSgnc2xvdCcsICdxdGktcnVicmljLWJsb2NrJyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3F0aS1ydWJyaWMtaW5saW5lJzpcbiAgICAgICAgICB0aGlzLnNldEF0dHJpYnV0ZSgnc2xvdCcsICcnKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBvdmVycmlkZSBzdHlsZXMgPSBjc3NgXG4gICAgOmhvc3Qge1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgfVxuICBgO1xuXG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICByZXR1cm4gaHRtbGA8c2xvdD48L3Nsb3Q+YDtcbiAgfVxuXG4gIG92ZXJyaWRlIGNvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xuICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgLy8gYnkgZGVmYXVsdCBwdXQgdGhpcyBpbiBhIHNsb3QgaW4gdGhlIGl0ZW0tYm9keVxuICAgIHRoaXMuc2V0QXR0cmlidXRlKCdzbG90JywgJ3F0aS1ydWJyaWMtYmxvY2snKTtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktcnVicmljLWJsb2NrJzogUXRpUnVicmljQmxvY2s7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBQcm9wZXJ0eVZhbHVlTWFwLCBjc3MsIGh0bWwgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IFF0aUZlZWRiYWNrIH0gZnJvbSAnLi4vcXRpLWZlZWRiYWNrJztcblxuQGN1c3RvbUVsZW1lbnQoJ3F0aS1mZWVkYmFjay1ibG9jaycpXG5leHBvcnQgY2xhc3MgUXRpRmVlZGJhY2tCbG9jayBleHRlbmRzIFF0aUZlZWRiYWNrIHtcbiAgc3RhdGljIG92ZXJyaWRlIHN0eWxlcyA9IGNzc2BcbiAgICA6aG9zdCB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICB9XG4gICAgLm9uIHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIH1cbiAgICAub2ZmIHtcbiAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgfVxuICBgO1xuXG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICByZXR1cm4gaHRtbGAgPHNsb3QgcGFydD1cImZlZWRiYWNrXCIgY2xhc3M9XCJmZWVkYmFjayAke3RoaXMuc2hvd1N0YXR1c31cIj48L3Nsb3Q+IGA7XG4gIH1cblxuICBwcm90ZWN0ZWQgZmlyc3RVcGRhdGVkKF9jaGFuZ2VkUHJvcGVydGllczogUHJvcGVydHlWYWx1ZU1hcDxhbnk+IHwgTWFwPFByb3BlcnR5S2V5LCB1bmtub3duPik6IHZvaWQge1xuICAgIHRoaXMuY2hlY2tTaG93RmVlZGJhY2sodGhpcy5vdXRjb21lSWRlbnRpZmllcik7XG4gIH1cbn1cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1mZWVkYmFjay1ibG9jayc6IFF0aUZlZWRiYWNrQmxvY2s7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBMaXRFbGVtZW50LCBQcm9wZXJ0eVZhbHVlTWFwIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgUXRpQXNzZXNzbWVudEl0ZW0gfSBmcm9tICcuLi9xdGktYXNzZXNzbWVudC1pdGVtL3F0aS1hc3Nlc3NtZW50LWl0ZW0nO1xuaW1wb3J0IHsgSXNOdWxsT3JVbmRlZmluZWQgfSBmcm9tICcuLi9pbnRlcm5hbC91dGlscyc7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBRdGlGZWVkYmFjayBleHRlbmRzIExpdEVsZW1lbnQge1xuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcsIGF0dHJpYnV0ZTogJ3Nob3ctaGlkZScgfSlcbiAgcHJvdGVjdGVkIHNob3dIaWRlOiBzdHJpbmc7XG5cbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nLCBhdHRyaWJ1dGU6ICdvdXRjb21lLWlkZW50aWZpZXInIH0pXG4gIHB1YmxpYyBvdXRjb21lSWRlbnRpZmllcjogc3RyaW5nO1xuXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZyB9KVxuICBwcm90ZWN0ZWQgaWRlbnRpZmllcjogc3RyaW5nO1xuXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZywgYXR0cmlidXRlOiBmYWxzZSB9KVxuICBwdWJsaWMgc2hvd1N0YXR1czogc3RyaW5nO1xuXG4gIHB1YmxpYyBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIHRoaXMuZGlzcGF0Y2hFdmVudChcbiAgICAgIG5ldyBDdXN0b21FdmVudDxRdGlGZWVkYmFjaz4oJ3F0aS1yZWdpc3Rlci1mZWVkYmFjaycsIHtcbiAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgY29tcG9zZWQ6IHRydWUsXG4gICAgICAgIGRldGFpbDogdGhpc1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGNoZWNrU2hvd0ZlZWRiYWNrKG91dGNvbWVJZGVudGlmaWVyOiBzdHJpbmcpIHsgICAgXG4gICAgY29uc3Qgb3V0Y29tZVZhcmlhYmxlID0gKHRoaXMuY2xvc2VzdCgncXRpLWFzc2Vzc21lbnQtaXRlbScpIGFzIFF0aUFzc2Vzc21lbnRJdGVtKS5nZXRPdXRjb21lKG91dGNvbWVJZGVudGlmaWVyKTtcblxuICAgIGlmICh0aGlzLm91dGNvbWVJZGVudGlmaWVyICE9PSBvdXRjb21lSWRlbnRpZmllciB8fCAhb3V0Y29tZVZhcmlhYmxlKSByZXR1cm47XG4gICAgbGV0IGlzRm91bmQgPSBmYWxzZTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShvdXRjb21lVmFyaWFibGUudmFsdWUpKSB7XG4gICAgICBpc0ZvdW5kID0gb3V0Y29tZVZhcmlhYmxlLnZhbHVlLmluY2x1ZGVzKHRoaXMuaWRlbnRpZmllcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlzRm91bmQgPVxuICAgICAgICAoIUlzTnVsbE9yVW5kZWZpbmVkKHRoaXMuaWRlbnRpZmllcikgJiZcbiAgICAgICAgICAhSXNOdWxsT3JVbmRlZmluZWQob3V0Y29tZVZhcmlhYmxlPy52YWx1ZSkgJiZcbiAgICAgICAgICB0aGlzLmlkZW50aWZpZXIgPT09IG91dGNvbWVWYXJpYWJsZS52YWx1ZSkgfHxcbiAgICAgICAgZmFsc2U7XG4gICAgfVxuXG4gICAgdGhpcy5zaG93RmVlZGJhY2soaXNGb3VuZCk7XG4gIH1cblxuICBwcml2YXRlIHNob3dGZWVkYmFjayh2YWx1ZTogYm9vbGVhbikgeyAgICBcbiAgICB0aGlzLnNob3dTdGF0dXMgPSAodmFsdWUgJiYgdGhpcy5zaG93SGlkZSA9PT0gJ3Nob3cnKSB8fCAoIXZhbHVlICYmIHRoaXMuc2hvd0hpZGUgPT09ICdoaWRlJykgPyAnb24nIDogJ29mZic7ICAgIFxuICB9XG59XG4iLCAiZXhwb3J0IGNvbnN0IGRlY2ltYWxTZXBhcmF0b3IgPSAoKSA9PiB7XG4gIHJldHVybiBuZXcgSW50bC5OdW1iZXJGb3JtYXQoKS5mb3JtYXQoMC4xKS5yZXBsYWNlKC9cXGQvZywgJycpO1xufTtcblxuZXhwb3J0IGNvbnN0IGNvbnZlcnROdW1iZXJUb1VuaXZlcmFsRm9ybWF0ID0gKG51bWJlcjogbnVtYmVyIHwgc3RyaW5nKSA9PiB7XG4gIC8vIGNoZWNrIGlmIHR5cGUgaXMgc3RyaW5nXG4gIGlmICh0eXBlb2YgbnVtYmVyID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBudW1iZXI7XG4gIH1cbiAgY29uc3QgZFNlcCA9IGRlY2ltYWxTZXBhcmF0b3IoKTtcbiAgaWYgKGRTZXAgPT09ICcuJykge1xuICAgIHJldHVybiBudW1iZXIudG9Mb2NhbGVTdHJpbmcoKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbnVtYmVyLnRvU3RyaW5nKCkucmVwbGFjZSgnLicsICcnKS5yZXBsYWNlKGRTZXAsICcuJyk7XG4gIH1cbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBJc051bGxPclVuZGVmaW5lZCh2YWx1ZTogdW5rbm93bikge1xuICByZXR1cm4gdmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZURvdWJsZVNsYXNoZXMoc3RyOiBzdHJpbmcpIHtcbiAgY29uc3Qgc2luZ2xlRm9yd2FyZFNsYXNoZXMgPSBzdHJcbiAgICAucmVwbGFjZSgvKFteOl1cXC8pXFwvKy9nLCAnJDEnKVxuICAgIC5yZXBsYWNlKC9cXC9cXC8vZywgJy8nKVxuICAgIC5yZXBsYWNlKCdodHRwOi8nLCAnaHR0cDovLycpXG4gICAgLnJlcGxhY2UoJ2h0dHBzOi8nLCAnaHR0cHM6Ly8nKTtcbiAgcmV0dXJuIHNpbmdsZUZvcndhcmRTbGFzaGVzO1xufVxuIiwgImltcG9ydCB7IGNzcywgaHRtbCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgUXRpRmVlZGJhY2sgfSBmcm9tICcuLi9xdGktZmVlZGJhY2snO1xuXG5AY3VzdG9tRWxlbWVudCgncXRpLWZlZWRiYWNrLWlubGluZScpXG5leHBvcnQgY2xhc3MgUXRpRmVlZGJhY2tJbmxpbmUgZXh0ZW5kcyBRdGlGZWVkYmFjayB7XG4gIHN0YXRpYyBvdmVycmlkZSBzdHlsZXMgPSBjc3NgXG4gICAgLm9uIHtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICB9XG4gICAgLm9mZiB7XG4gICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cbiAgYDtcblxuICBvdmVycmlkZSByZW5kZXIgPSAoKSA9PiBodG1sYCA8c2xvdCBwYXJ0PVwiZmVlZGJhY2tcIiBjbGFzcz1cIiR7dGhpcy5zaG93U3RhdHVzfVwiPjwvc2xvdD4gYDtcbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLWZlZWRiYWNrLWlubGluZSc6IFF0aUZlZWRiYWNrSW5saW5lO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgY3NzLCBodG1sIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBRdGlGZWVkYmFjayB9IGZyb20gJy4uL3F0aS1mZWVkYmFjayc7XG5cbkBjdXN0b21FbGVtZW50KCdxdGktbW9kYWwtZmVlZGJhY2snKVxuZXhwb3J0IGNsYXNzIFF0aU1vZGFsRmVlZGJhY2sgZXh0ZW5kcyBRdGlGZWVkYmFjayB7XG4gIHN0YXRpYyBvdmVycmlkZSBzdHlsZXMgPSBjc3NgXG4gICAgLm9uIHtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICB9XG4gICAgLm9mZiB7XG4gICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cbiAgYDtcblxuICBvdmVycmlkZSByZW5kZXIgPSAoKSA9PiBodG1sYCA8c2xvdCBwYXJ0PVwiZmVlZGJhY2tcIiBjbGFzcz1cIiR7dGhpcy5zaG93U3RhdHVzfVwiPjwvc2xvdD4gYDtcbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLW1vZGFsLWZlZWRiYWNrJzogUXRpTW9kYWxGZWVkYmFjaztcbiAgfVxufVxuIiwgImltcG9ydCB7IGNzcywgaHRtbCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBpZkRlZmluZWQgfSBmcm9tICdsaXQvZGlyZWN0aXZlcy9pZi1kZWZpbmVkLmpzJztcbmltcG9ydCB7IEludGVyYWN0aW9uIH0gZnJvbSAnLi4vaW50ZXJuYWwvaW50ZXJhY3Rpb24vaW50ZXJhY3Rpb24nO1xuaW1wb3J0IHsgcmVmLCBjcmVhdGVSZWYgfSBmcm9tICdsaXQvZGlyZWN0aXZlcy9yZWYuanMnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCwgcHJvcGVydHksIHN0YXRlIH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgd2F0Y2ggfSBmcm9tICcuLi8uLi8uLi9kZWNvcmF0b3JzL3dhdGNoJztcblxuQGN1c3RvbUVsZW1lbnQoJ3F0aS1leHRlbmRlZC10ZXh0LWludGVyYWN0aW9uJylcbmV4cG9ydCBjbGFzcyBRdGlFeHRlbmRlZFRleHRJbnRlcmFjdGlvbiBleHRlbmRzIEludGVyYWN0aW9uIHtcbiAgLy8gcHVibGljIHN0YXRpYyByb3dIZWlnaHRDbGFzcyA9IFtdO1xuXG4gIHRleHRhcmVhUmVmID0gY3JlYXRlUmVmPEhUTUxUZXh0QXJlYUVsZW1lbnQ+KCk7XG5cbiAgLyoqIGV4cGVjdGVkIGxlbmd0aCBpcyBtYXBwZWQgdG8gdGhlIHByb3BlcnR5IG1heGxlbmd0aCBvbiB0aGUgdGV4dGFyZWEgKi9cbiAgQHByb3BlcnR5KHsgdHlwZTogTnVtYmVyLCBhdHRyaWJ1dGU6ICdleHBlY3RlZC1sZW5ndGgnIH0pIGV4cGVjdGVkTGVuZ3RoOiBudW1iZXI7XG5cbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nLCBhdHRyaWJ1dGU6ICdwYXR0ZXJuLW1hc2snIH0pIHBhdHRlcm5NYXNrOiBzdHJpbmc7XG5cbiAgLyoqIHRleHQgYXBwZWFyaW5nIGluIHRoZSBleHRlbmRlZC10ZXh0LW50ZXJhY3Rpb24gaWYgaXQgaXMgZW1wdHkgKi9cbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nLCBhdHRyaWJ1dGU6ICdwbGFjZWhvbGRlci10ZXh0JyB9KSBwbGFjZWhvbGRlclRleHQ6IHN0cmluZztcblxuICBAc3RhdGUoKVxuICBwcml2YXRlIF92YWx1ZSA9ICcnO1xuXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZywgYXR0cmlidXRlOiAnY2xhc3MnIH0pIGNsYXNzTmFtZXM7XG4gIEB3YXRjaCgnY2xhc3NOYW1lcycsIHsgd2FpdFVudGlsRmlyc3RVcGRhdGU6IHRydWUgfSlcbiAgaGFuZGxlY2xhc3NOYW1lc0NoYW5nZShvbGQsIGRpc2FibGVkOiBib29sZWFuKSB7XG4gICAgY29uc3QgY2xhc3NOYW1lcyA9IHRoaXMuY2xhc3NOYW1lcy5zcGxpdCgnICcpO1xuICAgIGNsYXNzTmFtZXMuZm9yRWFjaCgoY2xhc3NOYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgIGlmIChjbGFzc05hbWUuc3RhcnRzV2l0aCgncXRpLWhlaWdodC1saW5lcycpKSB7XG4gICAgICAgIGNvbnN0IG5yUm93cyA9IGNsYXNzTmFtZS5yZXBsYWNlKCdxdGktaGVpZ2h0LWxpbmVzLScsICcnKTtcbiAgICAgICAgaWYgKHRoaXMudGV4dGFyZWFSZWYpIHtcbiAgICAgICAgICB0aGlzLnRleHRhcmVhUmVmLnZhbHVlLnJvd3MgPSBwYXJzZUludChuclJvd3MpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgc2V0IHJlc3BvbnNlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl92YWx1ZSA9IHZhbHVlICE9PSB1bmRlZmluZWQgPyB2YWx1ZSA6ICcnO1xuICB9XG5cbiAgcHVibGljIHZhbGlkYXRlKCkge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZSAhPT0gJyc7XG4gIH1cblxuICBzdGF0aWMgb3ZlcnJpZGUgZ2V0IHN0eWxlcygpIHtcbiAgICByZXR1cm4gW1xuICAgICAgY3NzYFxuICAgICAgICAvKiBQSzogZGlzcGxheSBob3N0IGFzIGJsb2NrLCBlbHNlIGRlc2lnbiB3aWxsIGJlIGNvbGxhcHNlZCAqL1xuICAgICAgICA6aG9zdCB7XG4gICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIH1cbiAgICAgICAgdGV4dGFyZWEge1xuICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICAgIGJvcmRlcjogMDtcbiAgICAgICAgfVxuICAgICAgYFxuICAgIF07XG4gIH1cblxuICBvdmVycmlkZSByZW5kZXIoKSB7XG4gICAgcmV0dXJuIGh0bWxgPHNsb3QgbmFtZT1cInByb21wdFwiPjwvc2xvdFxuICAgICAgPjx0ZXh0YXJlYVxuICAgICAgICBwYXJ0PVwidGV4dGFyZWFcIlxuICAgICAgICAke3JlZih0aGlzLnRleHRhcmVhUmVmKX1cbiAgICAgICAgc3BlbGxjaGVjaz1cImZhbHNlXCJcbiAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgQGtleWRvd249XCIke2V2ZW50ID0+IGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfVwiXG4gICAgICAgIEBrZXl1cD1cIiR7dGhpcy50ZXh0Q2hhbmdlZH1cIlxuICAgICAgICBAY2hhbmdlPVwiJHt0aGlzLnRleHRDaGFuZ2VkfVwiXG4gICAgICAgIEBibHVyPVwiJHsoZXZlbnQ6IEZvY3VzRXZlbnQpID0+IHtcbiAgICAgICAgICBjb25zdCBpbnB1dCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgICAgICAgIGlmICghaW5wdXQuY2hlY2tWYWxpZGl0eSgpKSB7XG4gICAgICAgICAgICBpbnB1dC5zZXRDdXN0b21WYWxpZGl0eSh0aGlzLmRhdGFzZXQucGF0dGVybm1hc2tNZXNzYWdlIHx8ICdJbnZhbGlkIGlucHV0Jyk7XG4gICAgICAgICAgICBpbnB1dC5yZXBvcnRWYWxpZGl0eSgpOyAvLyBTaG93IHRoZSB2YWxpZGF0aW9uIG1lc3NhZ2VcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaW5wdXQuc2V0Q3VzdG9tVmFsaWRpdHkoJycpOyAvLyBDbGVhciB0aGUgY3VzdG9tIHZhbGlkaXR5IG1lc3NhZ2VcbiAgICAgICAgICB9XG4gICAgICAgIH19XCJcbiAgICAgICAgcGxhY2Vob2xkZXI9XCIke2lmRGVmaW5lZCh0aGlzLnBsYWNlaG9sZGVyVGV4dCA/IHRoaXMucGxhY2Vob2xkZXJUZXh0IDogdW5kZWZpbmVkKX1cIlxuICAgICAgICBtYXhsZW5ndGg9XCIke2lmRGVmaW5lZCh0aGlzLmV4cGVjdGVkTGVuZ3RoID8gdGhpcy5leHBlY3RlZExlbmd0aCA6IHVuZGVmaW5lZCl9XCJcbiAgICAgICAgcGF0dGVybj1cIiR7aWZEZWZpbmVkKHRoaXMucGF0dGVybk1hc2sgPyB0aGlzLnBhdHRlcm5NYXNrIDogdW5kZWZpbmVkKX1cIlxuICAgICAgICA/ZGlzYWJsZWQ9XCIke3RoaXMuZGlzYWJsZWR9XCJcbiAgICAgICAgP3JlYWRvbmx5PVwiJHt0aGlzLnJlYWRvbmx5fVwiXG4gICAgICAgIC52YWx1ZT0ke3RoaXMuX3ZhbHVlfVxuICAgICAgPjwvdGV4dGFyZWE+YDtcbiAgfVxuXG4gIHByb3RlY3RlZCB0ZXh0Q2hhbmdlZChldmVudDogRXZlbnQpIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCB8fCB0aGlzLnJlYWRvbmx5KSByZXR1cm47XG4gICAgY29uc3QgaW5wdXQgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICB0aGlzLnNldEVtcHR5QXR0cmlidXRlKGlucHV0LnZhbHVlKTtcbiAgICBpZiAodGhpcy5fdmFsdWUgIT09IGlucHV0LnZhbHVlKSB7XG4gICAgICB0aGlzLl92YWx1ZSA9IGlucHV0LnZhbHVlO1xuICAgICAgdGhpcy5zYXZlUmVzcG9uc2UoaW5wdXQudmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHJlc2V0KCk6IHZvaWQge1xuICAgIHRoaXMuX3ZhbHVlID0gJyc7XG4gIH1cblxuICBwcml2YXRlIHNldEVtcHR5QXR0cmlidXRlKHRleHQ6IHN0cmluZykge1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKCdlbXB0eScsIHRleHQgPT09ICcnID8gJ3RydWUnIDogJ2ZhbHNlJyk7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLWV4dGVuZGVkLXRleHQtaW50ZXJhY3Rpb24nOiBRdGlFeHRlbmRlZFRleHRJbnRlcmFjdGlvbjtcbiAgfVxufVxuIiwgImltcG9ydCB7IHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgTGl0RWxlbWVudCB9IGZyb20gJ2xpdCc7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBJbnRlcmFjdGlvbiBleHRlbmRzIExpdEVsZW1lbnQge1xuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdyZXNwb25zZS1pZGVudGlmaWVyJyB9KSByZXNwb25zZUlkZW50aWZpZXI6IHN0cmluZyA9ICcnO1xuXG4gIC8qKiBkaXNhYmxlZCBzaG91bGQgYmUgZXhwb3NlZCB0byB0aGUgYXR0cmlidXRlcyBhbmQgYWNjZXNzaWJsZSBhcyBwcm9wZXJ0eSAqL1xuICBAcHJvcGVydHkoeyByZWZsZWN0OiB0cnVlLCB0eXBlOiBCb29sZWFuIH0pIGRpc2FibGVkID0gZmFsc2U7XG5cbiAgLyoqIHJlYWRvbmx5IHNob3VsZCBiZSBleHBvc2VkIHRvIHRoZSBhdHRyaWJ1dGVzIGFuZCBhY2Nlc3NpYmxlIGFzIHByb3BlcnR5ICovXG4gIEBwcm9wZXJ0eSh7IHJlZmxlY3Q6IHRydWUsIHR5cGU6IEJvb2xlYW4gfSkgcmVhZG9ubHkgPSBmYWxzZTtcblxuICBhYnN0cmFjdCB2YWxpZGF0ZSgpOiBib29sZWFuO1xuICBhYnN0cmFjdCBzZXQgcmVzcG9uc2UodmFsOiBSZWFkb25seTxzdHJpbmcgfCBzdHJpbmdbXT4pO1xuICBzZXQgY29ycmVjdFJlc3BvbnNlKHZhbDogUmVhZG9ubHk8c3RyaW5nIHwgc3RyaW5nW10+KSB7XG4gICAgY29uc29sZS53YXJuKCdjb3JyZWN0UmVzcG9uc2UgaXMgbm90IGltcGxlbWVudGVkJyk7XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcblxuICAgIHRoaXMuZGlzcGF0Y2hFdmVudChcbiAgICAgIG5ldyBDdXN0b21FdmVudCgncXRpLXJlZ2lzdGVyLWludGVyYWN0aW9uJywge1xuICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICBjYW5jZWxhYmxlOiBmYWxzZSxcbiAgICAgICAgY29tcG9zZWQ6IHRydWVcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBzYXZlUmVzcG9uc2UodmFsdWU6IHN0cmluZyB8IHN0cmluZ1tdKSB7XG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KFxuICAgICAgbmV3IEN1c3RvbUV2ZW50KCdxdGktaW50ZXJhY3Rpb24tcmVzcG9uc2UnLCB7XG4gICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgIGNhbmNlbGFibGU6IGZhbHNlLFxuICAgICAgICBjb21wb3NlZDogdHJ1ZSxcbiAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgcmVzcG9uc2VJZGVudGlmaWVyOiB0aGlzLnJlc3BvbnNlSWRlbnRpZmllcixcbiAgICAgICAgICByZXNwb25zZTogQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyBbLi4udmFsdWVdIDogdmFsdWVcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgY3NzLCBodG1sIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQsIHByb3BlcnR5LCBzdGF0ZSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IGlmRGVmaW5lZCB9IGZyb20gJ2xpdC9kaXJlY3RpdmVzL2lmLWRlZmluZWQuanMnO1xuaW1wb3J0IHsgY3JlYXRlUmVmIH0gZnJvbSAnbGl0L2RpcmVjdGl2ZXMvcmVmLmpzJztcbmltcG9ydCB7IHdhdGNoIH0gZnJvbSAnLi4vLi4vLi4vZGVjb3JhdG9ycyc7XG5pbXBvcnQgeyBJbnRlcmFjdGlvbiB9IGZyb20gJy4uL2ludGVybmFsL2ludGVyYWN0aW9uL2ludGVyYWN0aW9uJztcblxuQGN1c3RvbUVsZW1lbnQoJ3F0aS10ZXh0LWVudHJ5LWludGVyYWN0aW9uJylcbmV4cG9ydCBjbGFzcyBRdGlUZXh0RW50cnlJbnRlcmFjdGlvbiBleHRlbmRzIEludGVyYWN0aW9uIHtcbiAgQHByb3BlcnR5KHsgdHlwZTogTnVtYmVyLCBhdHRyaWJ1dGU6ICdleHBlY3RlZC1sZW5ndGgnIH0pIGV4cGVjdGVkTGVuZ3RoOiBudW1iZXI7XG5cbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nLCBhdHRyaWJ1dGU6ICdwYXR0ZXJuLW1hc2snIH0pIHBhdHRlcm5NYXNrOiBzdHJpbmc7XG5cbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nLCBhdHRyaWJ1dGU6ICdwbGFjZWhvbGRlci10ZXh0JyB9KSBwbGFjZWhvbGRlclRleHQ6IHN0cmluZztcblxuICBAc3RhdGUoKVxuICBwcml2YXRlIF92YWx1ZSA9ICcnO1xuXG4gIEBzdGF0ZSgpXG4gIHByaXZhdGUgX2NvcnJlY3RWYWx1ZSA9ICcnO1xuXG4gIEBzdGF0ZSgpXG4gIHByaXZhdGUgX3NpemUgPSA1O1xuXG4gIGlucHV0UmVmID0gY3JlYXRlUmVmPEhUTUxJbnB1dEVsZW1lbnQ+KCk7XG5cbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nLCBhdHRyaWJ1dGU6ICdjbGFzcycgfSkgY2xhc3NOYW1lcztcbiAgQHdhdGNoKCdjbGFzc05hbWVzJylcbiAgaGFuZGxlY2xhc3NOYW1lc0NoYW5nZShvbGQsIGNsYXNzZXM6IHN0cmluZykge1xuICAgIGNvbnN0IGNsYXNzTmFtZXMgPSBjbGFzc2VzLnNwbGl0KCcgJyk7XG4gICAgY2xhc3NOYW1lcy5mb3JFYWNoKChjbGFzc05hbWU6IHN0cmluZykgPT4ge1xuICAgICAgaWYgKGNsYXNzTmFtZS5zdGFydHNXaXRoKCdxdGktaW5wdXQtd2lkdGgnKSkge1xuICAgICAgICBjb25zdCBuclJvd3MgPSBjbGFzc05hbWUucmVwbGFjZSgncXRpLWlucHV0LXdpZHRoLScsICcnKTtcbiAgICAgICAgdGhpcy5fc2l6ZSA9IHBhcnNlSW50KG5yUm93cyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgc2V0IHJlc3BvbnNlKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl92YWx1ZSA9IHZhbHVlICE9PSB1bmRlZmluZWQgPyB2YWx1ZSA6ICcnO1xuICB9XG5cbiAgcHVibGljIHZhbGlkYXRlKCkge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZSAhPT0gJyc7XG4gIH1cblxuICBzdGF0aWMgb3ZlcnJpZGUgZ2V0IHN0eWxlcygpIHtcbiAgICByZXR1cm4gW1xuICAgICAgY3NzYFxuICAgICAgICBbcGFydD0nY29ycmVjdCddIHtcbiAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIH1cbiAgICAgIGBcbiAgICBdO1xuICB9XG5cbiAgc2V0IGNvcnJlY3RSZXNwb25zZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fY29ycmVjdFZhbHVlID0gdmFsdWU7XG4gIH1cblxuICBvdmVycmlkZSByZW5kZXIoKSB7XG4gICAgcmV0dXJuIGh0bWxgXG4gICAgICA8aW5wdXRcbiAgICAgICAgcGFydD1cImlucHV0XCJcbiAgICAgICAgc3BlbGxjaGVjaz1cImZhbHNlXCJcbiAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgQGJsdXI9XCIkeyhldmVudDogRm9jdXNFdmVudCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGlucHV0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgICAgICAgaWYgKCFpbnB1dC5jaGVja1ZhbGlkaXR5KCkpIHtcbiAgICAgICAgICAgIGlucHV0LnNldEN1c3RvbVZhbGlkaXR5KHRoaXMuZGF0YXNldC5wYXR0ZXJubWFza01lc3NhZ2UgfHwgJ0ludmFsaWQgaW5wdXQnKTtcbiAgICAgICAgICAgIGlucHV0LnJlcG9ydFZhbGlkaXR5KCk7IC8vIFNob3cgdGhlIHZhbGlkYXRpb24gbWVzc2FnZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpbnB1dC5zZXRDdXN0b21WYWxpZGl0eSgnJyk7IC8vIENsZWFyIHRoZSBjdXN0b20gdmFsaWRpdHkgbWVzc2FnZVxuICAgICAgICAgIH1cbiAgICAgICAgfX1cIlxuICAgICAgICBAa2V5ZG93bj1cIiR7ZXZlbnQgPT4gZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9XCJcbiAgICAgICAgQGtleXVwPVwiJHt0aGlzLnRleHRDaGFuZ2VkfVwiXG4gICAgICAgIEBjaGFuZ2U9XCIke3RoaXMudGV4dENoYW5nZWR9XCJcbiAgICAgICAgdHlwZT1cIiR7dGhpcy5wYXR0ZXJuTWFzayA9PSAnWzAtOV0qJyA/ICdudW1iZXInIDogJ3RleHQnfVwiXG4gICAgICAgIHBsYWNlaG9sZGVyPVwiJHtpZkRlZmluZWQodGhpcy5wbGFjZWhvbGRlclRleHQgPyB0aGlzLnBsYWNlaG9sZGVyVGV4dCA6IHVuZGVmaW5lZCl9XCJcbiAgICAgICAgLnZhbHVlPVwiJHt0aGlzLl92YWx1ZX1cIlxuICAgICAgICBzaXplPVwiJHt0aGlzLl9zaXplfVwiXG4gICAgICAgIHBhdHRlcm49XCIke2lmRGVmaW5lZCh0aGlzLnBhdHRlcm5NYXNrID8gdGhpcy5wYXR0ZXJuTWFzayA6IHVuZGVmaW5lZCl9XCJcbiAgICAgICAgP2Rpc2FibGVkPVwiJHt0aGlzLmRpc2FibGVkfVwiXG4gICAgICAgID9yZWFkb25seT1cIiR7dGhpcy5yZWFkb25seX1cIlxuICAgICAgLz5cbiAgICAgIDxkaXYgcGFydD1cImNvcnJlY3RcIj4ke3RoaXMuX2NvcnJlY3RWYWx1ZX08L2Rpdj5cbiAgICBgO1xuICB9XG4gIC8vXG4gIC8vIG1heGxlbmd0aD1cIiR7aWZEZWZpbmVkKHRoaXMuZXhwZWN0ZWRMZW5ndGggPyB0aGlzLmV4cGVjdGVkTGVuZ3RoIDogdW5kZWZpbmVkKX1cIlxuXG4gIHByb3RlY3RlZCB0ZXh0Q2hhbmdlZChldmVudDogRXZlbnQpIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCB8fCB0aGlzLnJlYWRvbmx5KSByZXR1cm47XG4gICAgY29uc3QgaW5wdXQgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICB0aGlzLnNldEVtcHR5QXR0cmlidXRlKGlucHV0LnZhbHVlKTtcbiAgICBpZiAodGhpcy5fdmFsdWUgIT09IGlucHV0LnZhbHVlKSB7XG4gICAgICB0aGlzLl92YWx1ZSA9IGlucHV0LnZhbHVlO1xuICAgICAgdGhpcy5zYXZlUmVzcG9uc2UoaW5wdXQudmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHJlc2V0KCk6IHZvaWQge1xuICAgIHRoaXMuX3ZhbHVlID0gJyc7XG4gIH1cblxuICBwcml2YXRlIHNldEVtcHR5QXR0cmlidXRlKHRleHQ6IHN0cmluZykge1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKCdlbXB0eScsIHRleHQgPT09ICcnID8gJ3RydWUnIDogJ2ZhbHNlJyk7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLXRleHQtZW50cnktaW50ZXJhY3Rpb24nOiBRdGlUZXh0RW50cnlJbnRlcmFjdGlvbjtcbiAgfVxufVxuIiwgIi8vIEB3YXRjaCBkZWNvcmF0b3Jcbi8vXG4vLyBSdW5zIHdoZW4gYW4gb2JzZXJ2ZWQgcHJvcGVydHkgY2hhbmdlcywgZS5nLiBAcHJvcGVydHkgb3IgQHN0YXRlLCBidXQgYmVmb3JlIHRoZSBjb21wb25lbnQgdXBkYXRlcy5cbi8vXG4vLyBUbyB3YWl0IGZvciBhbiB1cGRhdGUgdG8gY29tcGxldGUgYWZ0ZXIgYSBjaGFuZ2Ugb2NjdXJzLCB1c2UgYGF3YWl0IHRoaXMudXBkYXRlQ29tcGxldGVgIGluIHRoZSBoYW5kbGVyLiBUbyBzdGFydFxuLy8gd2F0Y2hpbmcgYWZ0ZXIgdGhlIGluaXRpYWwgdXBkYXRlL3JlbmRlciwgdXNlIGB7IHdhaXRVbnRpbEZpcnN0VXBkYXRlOiB0cnVlIH1gIG9yIGB0aGlzLmhhc1VwZGF0ZWRgIGluIHRoZSBoYW5kbGVyLlxuLy9cbi8vIFVzYWdlOlxuLy9cbi8vICBAd2F0Y2goJ3Byb3BOYW1lJylcbi8vICBoYW5kbGVQcm9wQ2hhbmdlKG9sZFZhbHVlLCBuZXdWYWx1ZSkge1xuLy8gICAgLi4uXG4vLyAgfVxuXG5pbXBvcnQgdHlwZSB7IExpdEVsZW1lbnQgfSBmcm9tICdsaXQnO1xuXG50eXBlIFVwZGF0ZUhhbmRsZXIgPSAocHJldj86IHVua25vd24sIG5leHQ/OiB1bmtub3duKSA9PiB2b2lkO1xuXG50eXBlIE5vblVuZGVmaW5lZDxBPiA9IEEgZXh0ZW5kcyB1bmRlZmluZWQgPyBuZXZlciA6IEE7XG5cbnR5cGUgVXBkYXRlSGFuZGxlckZ1bmN0aW9uS2V5czxUIGV4dGVuZHMgb2JqZWN0PiA9IHtcbiAgW0sgaW4ga2V5b2YgVF0tPzogTm9uVW5kZWZpbmVkPFRbS10+IGV4dGVuZHMgVXBkYXRlSGFuZGxlciA/IEsgOiBuZXZlcjtcbn1ba2V5b2YgVF07XG5cbmludGVyZmFjZSBMaXZlUXVlcnlPcHRpb25zIHtcbiAgLyoqXG4gICAqIElmIHRydWUsIHdpbGwgb25seSBzdGFydCB3YXRjaGluZyBhZnRlciB0aGUgaW5pdGlhbCB1cGRhdGUvcmVuZGVyXG4gICAqL1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGl2ZVF1ZXJ5KHF1ZXJ5U2VsZWN0b3I6IHN0cmluZywgb3B0aW9ucz86IExpdmVRdWVyeU9wdGlvbnMpIHtcbiAgbGV0IG9ic2VydmVyOiBNdXRhdGlvbk9ic2VydmVyO1xuICBjb25zdCByZXNvbHZlZE9wdGlvbnM6IFJlcXVpcmVkPExpdmVRdWVyeU9wdGlvbnM+ID0ge1xuICAgIC4uLm9wdGlvbnNcbiAgfTtcbiAgcmV0dXJuIDxFbGVtQ2xhc3MgZXh0ZW5kcyBMaXRFbGVtZW50PihcbiAgICBwcm90bzogRWxlbUNsYXNzLFxuICAgIGRlY29yYXRlZEZuTmFtZTogVXBkYXRlSGFuZGxlckZ1bmN0aW9uS2V5czxFbGVtQ2xhc3M+XG4gICk6IHZvaWQgPT4ge1xuICAgIGNvbnN0IHsgY29ubmVjdGVkQ2FsbGJhY2ssIGRpc2Nvbm5lY3RlZENhbGxiYWNrIH0gPSBwcm90bztcblxuICAgIHByb3RvLmNvbm5lY3RlZENhbGxiYWNrID0gZnVuY3Rpb24gKHRoaXM6IEVsZW1DbGFzcykge1xuICAgICAgY29ubmVjdGVkQ2FsbGJhY2suY2FsbCh0aGlzKTtcbiAgICAgIGNvbnN0IGNhbGxiYWNrID0gKG11dGF0aW9uTGlzdDogTXV0YXRpb25SZWNvcmRbXSkgPT4ge1xuICAgICAgICBjb25zdCBlbGVtZW50c1RvV2F0Y2ggPSBBcnJheS5mcm9tKHRoaXMucXVlcnlTZWxlY3RvckFsbChxdWVyeVNlbGVjdG9yKSk7XG4gICAgICAgIGZvciAoY29uc3QgbXV0YXRpb24gb2YgbXV0YXRpb25MaXN0KSB7XG4gICAgICAgICAgY29uc3QgYWRkZWROb2RlcyA9IEFycmF5LmZyb20obXV0YXRpb24uYWRkZWROb2RlcykubWFwKGUgPT4gZSBhcyBFbGVtZW50KTtcbiAgICAgICAgICBjb25zdCByZW1vdmVkTm9kZXMgPSBBcnJheS5mcm9tKG11dGF0aW9uLmFkZGVkTm9kZXMpLm1hcChlID0+IGUgYXMgRWxlbWVudCk7XG4gICAgICAgICAgaWYgKG11dGF0aW9uLnR5cGUgPT09ICdjaGlsZExpc3QnICYmIGFkZGVkTm9kZXMuZmluZChuID0+IGVsZW1lbnRzVG9XYXRjaC5pbmNsdWRlcyhuKSkpIHtcbiAgICAgICAgICAgICh0aGlzW2RlY29yYXRlZEZuTmFtZV0gYXMgdW5rbm93biBhcyBVcGRhdGVIYW5kbGVyKShhZGRlZE5vZGVzLCByZW1vdmVkTm9kZXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoY2FsbGJhY2spO1xuICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLCB7IGNoaWxkTGlzdDogdHJ1ZSwgc3VidHJlZTogdHJ1ZSB9KTtcblxuICAgICAgY29uc3QgZWxlbWVudHNBZGRlZCA9IHRoaXMucXVlcnlTZWxlY3RvckFsbChxdWVyeVNlbGVjdG9yKSA/PyBbXTtcbiAgICAgICh0aGlzW2RlY29yYXRlZEZuTmFtZV0gYXMgdW5rbm93biBhcyBVcGRhdGVIYW5kbGVyKShBcnJheS5mcm9tKGVsZW1lbnRzQWRkZWQpLCBbXSk7XG4gICAgfTtcblxuICAgIHByb3RvLmRpc2Nvbm5lY3RlZENhbGxiYWNrID0gZnVuY3Rpb24gKHRoaXM6IEVsZW1DbGFzcykge1xuICAgICAgZGlzY29ubmVjdGVkQ2FsbGJhY2suY2FsbCh0aGlzKTtcbiAgICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICB9O1xuICB9O1xufVxuIiwgImltcG9ydCB7IGh0bWwsIExpdEVsZW1lbnQgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IENob2ljZXNNaXhpbiB9IGZyb20gJy4uL2ludGVybmFsL2Nob2ljZXMvY2hvaWNlcyc7XG5cbkBjdXN0b21FbGVtZW50KCdxdGktaG90dGV4dC1pbnRlcmFjdGlvbicpXG5leHBvcnQgY2xhc3MgUXRpSG90dGV4dEludGVyYWN0aW9uIGV4dGVuZHMgQ2hvaWNlc01peGluKExpdEVsZW1lbnQsICdxdGktaG90dGV4dCcpIHtcbiAgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZSgncXRpLWhvdHRleHQtaW50ZXJhY3Rpb24nLCAnJyk7XG4gIH1cblxuICBvdmVycmlkZSByZW5kZXIgPSAoKSA9PiBodG1sYDxzbG90Pjwvc2xvdD5gO1xufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktaG90dGV4dC1pbnRlcmFjdGlvbic6IFF0aUhvdHRleHRJbnRlcmFjdGlvbjtcbiAgfVxufVxuIiwgImltcG9ydCB7IExpdEVsZW1lbnQgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgcHJvcGVydHkgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyB3YXRjaCB9IGZyb20gJy4uLy4uLy4uLy4uL2RlY29yYXRvcnMvd2F0Y2gnO1xuaW1wb3J0IHsgUXRpQ2hvaWNlIH0gZnJvbSAnLi4vY2hvaWNlL3F0aS1jaG9pY2UnO1xuXG50eXBlIENvbnN0cnVjdG9yPFQgPSB7fT4gPSBuZXcgKC4uLmFyZ3M6IGFueVtdKSA9PiBUO1xuXG5leHBvcnQgaW50ZXJmYWNlIENob2ljZXNJbnRlcmZhY2Uge1xuICB2YWxpZGF0ZSgpOiBib29sZWFuO1xuICBfY2hvaWNlRWxlbWVudHM6IEhUTUxFbGVtZW50W107XG4gIGNvcnJlY3RSZXNwb25zZTogc3RyaW5nIHwgc3RyaW5nW107XG59XG5cbmV4cG9ydCBjb25zdCBDaG9pY2VzTWl4aW4gPSA8VCBleHRlbmRzIENvbnN0cnVjdG9yPExpdEVsZW1lbnQ+PihzdXBlckNsYXNzOiBULCBzZWxlY3Rvcjogc3RyaW5nKSA9PiB7XG4gIGNsYXNzIENob2ljZXNNaXhpbkVsZW1lbnQgZXh0ZW5kcyBzdXBlckNsYXNzIGltcGxlbWVudHMgQ2hvaWNlc0ludGVyZmFjZSB7XG4gICAgcHVibGljIF9jaG9pY2VFbGVtZW50czogUXRpQ2hvaWNlW10gPSBbXTtcblxuICAgIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ3Jlc3BvbnNlLWlkZW50aWZpZXInIH0pIHJlc3BvbnNlSWRlbnRpZmllcjogc3RyaW5nID0gJyc7XG5cbiAgICBAcHJvcGVydHkoe1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgYXR0cmlidXRlOiAnbWluLWNob2ljZXMnXG4gICAgfSlcbiAgICBwdWJsaWMgbWluQ2hvaWNlczogbnVtYmVyID0gMDtcblxuICAgIC8qKiB0aGUgbWF4aW11bSBudW1iZXIgb2Ygc2VsZWN0aW9ucyBhIGNhbmRpZGF0ZSBtdXN0IG1ha2UsIHRoZSBvdGhlciBvcHRpb25zIHdpbGwgYmUgZGlzYWJsZWQgd2hlbiBtYXggb3B0aW9ucyBpcyBjaGVja2VkICovXG4gICAgQHByb3BlcnR5KHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIGF0dHJpYnV0ZTogJ21heC1jaG9pY2VzJ1xuICAgIH0pXG4gICAgcHVibGljIG1heENob2ljZXM6IG51bWJlciA9IDE7XG5cbiAgICBAd2F0Y2goJ2Rpc2FibGVkJywgeyB3YWl0VW50aWxGaXJzdFVwZGF0ZTogdHJ1ZSB9KVxuICAgIF9oYW5kbGVEaXNhYmxlZENoYW5nZSA9IChfOiBib29sZWFuLCBkaXNhYmxlZDogYm9vbGVhbikgPT5cbiAgICAgIHRoaXMuX2Nob2ljZUVsZW1lbnRzLmZvckVhY2goY2ggPT4gKGNoLmRpc2FibGVkID0gZGlzYWJsZWQpKTtcblxuICAgIEB3YXRjaCgncmVhZG9ubHknLCB7IHdhaXRVbnRpbEZpcnN0VXBkYXRlOiB0cnVlIH0pXG4gICAgX2hhbmRsZVJlYWRvbmx5Q2hhbmdlID0gKF86IGJvb2xlYW4sIHJlYWRvbmx5OiBib29sZWFuKSA9PlxuICAgICAgdGhpcy5fY2hvaWNlRWxlbWVudHMuZm9yRWFjaChjaCA9PiAoY2gucmVhZG9ubHkgPSByZWFkb25seSkpO1xuXG4gICAgQHdhdGNoKCdtYXhDaG9pY2VzJywgeyB3YWl0VW50aWxGaXJzdFVwZGF0ZTogdHJ1ZSB9KVxuICAgIF9oYW5kbGVNYXhDaG9pY2VzQ2hhbmdlID0gKCkgPT4gdGhpcy5fZGV0ZXJtaW5lSW5wdXRUeXBlKCk7XG5cbiAgICBjb25zdHJ1Y3RvciguLi5hcmdzOiBhbnlbXSkge1xuICAgICAgc3VwZXIoLi4uYXJncyk7XG5cbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigncXRpLXJlZ2lzdGVyLWNob2ljZScsIHRoaXMuX3JlZ2lzdGVyQ2hvaWNlRWxlbWVudCk7XG4gICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3F0aS1sb29zZS1jaG9pY2UnLCB0aGlzLl9sb29zZUNob2ljZUVsZW1lbnQpO1xuICAgIH1cblxuICAgIHZhbGlkYXRlKCk6IGJvb2xlYW4ge1xuICAgICAgY29uc3QgbnJTZWxlY3RlZCA9IHRoaXMuX2Nob2ljZUVsZW1lbnRzLnJlZHVjZSgoYWNjLCB2YWwpID0+IHtcbiAgICAgICAgcmV0dXJuIGFjYyArICh2YWwuY2hlY2tlZCA/IDEgOiAwKTtcbiAgICAgIH0sIDApO1xuICAgICAgcmV0dXJuIG5yU2VsZWN0ZWQgPj0gdGhpcy5taW5DaG9pY2VzO1xuICAgIH1cblxuICAgIHNldCByZXNwb25zZShyZXNwb25zZVZhbHVlOiBzdHJpbmcgfCBzdHJpbmdbXSkge1xuICAgICAgY29uc3QgcmVzcG9uc2VWYWx1ZUFycmF5ID0gQXJyYXkuaXNBcnJheShyZXNwb25zZVZhbHVlKSA/IHJlc3BvbnNlVmFsdWUgOiBbcmVzcG9uc2VWYWx1ZV07XG4gICAgICB0aGlzLl9jaG9pY2VFbGVtZW50cy5mb3JFYWNoKGNlID0+IHtcbiAgICAgICAgY2UuY2hlY2tlZCA9IHJlc3BvbnNlVmFsdWVBcnJheS5maW5kKHJ2ID0+IHJ2ID09PSBjZS5pZGVudGlmaWVyKSA/IHRydWUgOiBmYWxzZTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHNldCBjb3JyZWN0UmVzcG9uc2UocmVzcG9uc2VWYWx1ZTogc3RyaW5nIHwgc3RyaW5nW10pIHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlVmFsdWVBcnJheSA9IEFycmF5LmlzQXJyYXkocmVzcG9uc2VWYWx1ZSkgPyByZXNwb25zZVZhbHVlIDogW3Jlc3BvbnNlVmFsdWVdO1xuICAgICAgaWYgKHJlc3BvbnNlVmFsdWUgPT0gJycpIHtcbiAgICAgICAgdGhpcy5fY2hvaWNlRWxlbWVudHMuZm9yRWFjaChjZSA9PiB7XG4gICAgICAgICAgY2UucmVtb3ZlQXR0cmlidXRlKCdkYXRhLWNvcnJlY3QtcmVzcG9uc2UnKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2Nob2ljZUVsZW1lbnRzLmZvckVhY2goY2UgPT4ge1xuICAgICAgICBjZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgJ2RhdGEtY29ycmVjdC1yZXNwb25zZScsXG4gICAgICAgICAgcmVzcG9uc2VWYWx1ZUFycmF5LmZpbmQocnYgPT4gcnYgPT09IGNlLmlkZW50aWZpZXIpID8gJ3RydWUnIDogJ2ZhbHNlJ1xuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdxdGktcmVnaXN0ZXItY2hvaWNlJywgdGhpcy5fcmVnaXN0ZXJDaG9pY2VFbGVtZW50KTtcbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigncXRpLWNob2ljZS1lbGVtZW50LXNlbGVjdGVkJywgdGhpcy5fY2hvaWNlRWxlbWVudFNlbGVjdGVkSGFuZGxlcik7XG4gICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoXG4gICAgICAgIG5ldyBDdXN0b21FdmVudCgncXRpLXJlZ2lzdGVyLWludGVyYWN0aW9uJywge1xuICAgICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgICAgY2FuY2VsYWJsZTogZmFsc2UsXG4gICAgICAgICAgY29tcG9zZWQ6IHRydWVcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgb3ZlcnJpZGUgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgICBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdxdGktY2hvaWNlLWVsZW1lbnQtc2VsZWN0ZWQnLCB0aGlzLl9jaG9pY2VFbGVtZW50U2VsZWN0ZWRIYW5kbGVyKTtcbiAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcigncXRpLXJlZ2lzdGVyLWNob2ljZScsIHRoaXMuX3JlZ2lzdGVyQ2hvaWNlRWxlbWVudCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcmVnaXN0ZXJDaG9pY2VFbGVtZW50KGU6IEN1c3RvbUV2ZW50KSB7XG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgY29uc3QgY2hvaWNlRWxlbWVudCA9IGUudGFyZ2V0IGFzIFF0aUNob2ljZTtcbiAgICAgIHRoaXMuX2Nob2ljZUVsZW1lbnRzLnB1c2goY2hvaWNlRWxlbWVudCk7XG4gICAgICB0aGlzLl9zZXRJbnB1dFR5cGUoY2hvaWNlRWxlbWVudCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfbG9vc2VDaG9pY2VFbGVtZW50KGU6IEN1c3RvbUV2ZW50KSB7XG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgY29uc3QgY2hvaWNlRWxlbWVudCA9IGUudGFyZ2V0IGFzIFF0aUNob2ljZTtcbiAgICAgIHRoaXMuX2Nob2ljZUVsZW1lbnRzLnB1c2goY2hvaWNlRWxlbWVudCk7XG4gICAgICB0aGlzLl9jaG9pY2VFbGVtZW50cyA9IHRoaXMuX2Nob2ljZUVsZW1lbnRzLmZpbHRlcihjaCA9PiBjaCAhPT0gY2hvaWNlRWxlbWVudCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZGV0ZXJtaW5lSW5wdXRUeXBlKCkge1xuICAgICAgdGhpcy5fY2hvaWNlRWxlbWVudHMuZm9yRWFjaChjaG9pY2VFbGVtZW50ID0+IHtcbiAgICAgICAgdGhpcy5fc2V0SW5wdXRUeXBlKGNob2ljZUVsZW1lbnQpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfc2V0SW5wdXRUeXBlKGNob2ljZUVsZW1lbnQ6IFF0aUNob2ljZSkge1xuICAgICAgaWYgKHRoaXMubWF4Q2hvaWNlcyA9PT0gMSkge1xuICAgICAgICAvLyBpZiB6ZXJvIHRoZW4geW91IGNhbiBjaG9vc2UgaG93IG11Y2ggeW91IHdhbnRcbiAgICAgICAgY2hvaWNlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3JvbGUnLCAncmFkaW8nKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNob2ljZUVsZW1lbnQuc2V0QXR0cmlidXRlKCdyb2xlJywgJ2NoZWNrYm94Jyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIF9jaG9pY2VFbGVtZW50U2VsZWN0ZWRIYW5kbGVyKGV2ZW50OiBDdXN0b21FdmVudDx7IGlkZW50aWZpZXI6IHN0cmluZzsgY2hlY2tlZDogYm9vbGVhbiB9Pikge1xuICAgICAgaWYgKHRoaXMubWF4Q2hvaWNlcyA9PT0gMSkge1xuICAgICAgICB0aGlzLl9jaG9pY2VFbGVtZW50c1xuICAgICAgICAgIC5maWx0ZXIoY2UgPT4gY2UuaWRlbnRpZmllciAhPT0gZXZlbnQuZGV0YWlsLmlkZW50aWZpZXIpXG4gICAgICAgICAgLmZvckVhY2goY2UgPT4ge1xuICAgICAgICAgICAgY2UuY2hlY2tlZCA9IGZhbHNlO1xuICAgICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgdGhpcy5fY2hvaWNlRWxlbWVudFNlbGVjdGVkKCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIF9jaG9pY2VFbGVtZW50U2VsZWN0ZWQoKSB7XG4gICAgICBjb25zdCBzZWxlY3RlZElkZW50aWZpZXJzID0gdGhpcy5fY2hvaWNlRWxlbWVudHMuZmlsdGVyKGNlID0+IGNlLmNoZWNrZWQpLm1hcChjZSA9PiBjZS5pZGVudGlmaWVyKTtcblxuICAgICAgaWYgKHRoaXMubWF4Q2hvaWNlcyA+IDEpIHtcbiAgICAgICAgaWYgKHRoaXMubWF4Q2hvaWNlcyA9PT0gc2VsZWN0ZWRJZGVudGlmaWVycy5sZW5ndGgpIHtcbiAgICAgICAgICB0aGlzLl9jaG9pY2VFbGVtZW50cy5mb3JFYWNoKGNlID0+IChjZS5kaXNhYmxlZCA9ICFjZS5jaGVja2VkKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5fY2hvaWNlRWxlbWVudHMuZm9yRWFjaChjZSA9PiAoY2UuZGlzYWJsZWQgPSBmYWxzZSkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGxldCByZXN1bHQ6IHN0cmluZyB8IHN0cmluZ1tdO1xuICAgICAgaWYgKHRoaXMubWF4Q2hvaWNlcyA9PT0gMSkge1xuICAgICAgICByZXN1bHQgPSBzZWxlY3RlZElkZW50aWZpZXJzLmxlbmd0aCA+IDAgPyBzZWxlY3RlZElkZW50aWZpZXJzWzBdIDogdW5kZWZpbmVkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0ID0gc2VsZWN0ZWRJZGVudGlmaWVycztcbiAgICAgIH1cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWFyZ3VtZW50XG4gICAgICB0aGlzLnNhdmVSZXNwb25zZShyZXN1bHQpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBzYXZlUmVzcG9uc2UocmVzcG9uc2UpIHtcbiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgbmV3IEN1c3RvbUV2ZW50KCdxdGktaW50ZXJhY3Rpb24tcmVzcG9uc2UnLCB7XG4gICAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgICBjb21wb3NlZDogdHJ1ZSxcbiAgICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICAgIHJlc3BvbnNlSWRlbnRpZmllcjogdGhpcy5yZXNwb25zZUlkZW50aWZpZXIsXG4gICAgICAgICAgICByZXNwb25zZVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIHJldHVybiBDaG9pY2VzTWl4aW5FbGVtZW50IGFzIENvbnN0cnVjdG9yPENob2ljZXNJbnRlcmZhY2U+ICYgVDtcbn07XG4iLCAiaW1wb3J0IHsgY3NzLCBodG1sIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQsIHByb3BlcnR5LCBzdGF0ZSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IHVuc2FmZUhUTUwgfSBmcm9tICdsaXQvZGlyZWN0aXZlcy91bnNhZmUtaHRtbC5qcyc7XG5pbXBvcnQgeyBJbnRlcmFjdGlvbiB9IGZyb20gJy4uL2ludGVybmFsL2ludGVyYWN0aW9uL2ludGVyYWN0aW9uJztcblxuaW50ZXJmYWNlIE9wdGlvblR5cGUge1xuICB0ZXh0Q29udGVudDogc3RyaW5nO1xuICB2YWx1ZTogc3RyaW5nO1xuICBzZWxlY3RlZDogYm9vbGVhbjtcbn1cblxuQGN1c3RvbUVsZW1lbnQoJ3F0aS1pbmxpbmUtY2hvaWNlLWludGVyYWN0aW9uJylcbmV4cG9ydCBjbGFzcyBRdGlJbmxpbmVDaG9pY2VJbnRlcmFjdGlvbiBleHRlbmRzIEludGVyYWN0aW9uIHtcbiAgc3RhdGljIG92ZXJyaWRlIGdldCBzdHlsZXMoKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIGNzc2BcbiAgICAgICAgOmhvc3Qge1xuICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgfVxuICAgICAgICBzbG90IHtcbiAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIH1cbiAgICAgICAgW3JvbGU9J21lbnUnXSB7XG4gICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgIHotaW5kZXg6IDEwMDA7XG4gICAgICAgIH1cbiAgICAgICAgLmFuY2hvciB7XG4gICAgICAgICAgLyogYW5jaG9yLW5hbWU6IC0taW5mb2JveDsgKi9cbiAgICAgICAgICB3aWR0aDogZml0LWNvbnRlbnQ7XG4gICAgICAgIH1cblxuICAgICAgICAucG9zaXRpb25lZEVsZW1lbnQge1xuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAvKiBwb3NpdGlvbi1hbmNob3I6IC0taW5mb2JveDsgKi9cbiAgICAgICAgICAvKiB0b3A6IGFuY2hvcihib3R0b20pOyAqL1xuICAgICAgICB9XG4gICAgICBgXG4gICAgXTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgaW5wdXRXaWR0aENsYXNzID0gW1xuICAgICcnLFxuICAgICdxdGktaW5wdXQtd2lkdGgtMicsXG4gICAgJ3F0aS1pbnB1dC13aWR0aC0xJyxcbiAgICAncXRpLWlucHV0LXdpZHRoLTMnLFxuICAgICdxdGktaW5wdXQtd2lkdGgtNCcsXG4gICAgJ3F0aS1pbnB1dC13aWR0aC02JyxcbiAgICAncXRpLWlucHV0LXdpZHRoLTEwJyxcbiAgICAncXRpLWlucHV0LXdpZHRoLTE1JyxcbiAgICAncXRpLWlucHV0LXdpZHRoLTIwJyxcbiAgICAncXRpLWlucHV0LXdpZHRoLTcyJ1xuICBdO1xuXG4gIEBzdGF0ZSgpIG9wdGlvbnM6IE9wdGlvblR5cGVbXSA9IFtdO1xuXG4gIEBzdGF0ZSgpIGNvcnJlY3RPcHRpb246IHN0cmluZyA9ICcnO1xuXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ2RhdGEtcHJvbXB0JywgdHlwZTogU3RyaW5nIH0pXG4gIGRhdGFQcm9tcHQ6IHN0cmluZyA9ICdzZWxlY3QnO1xuXG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICByZXR1cm4gaHRtbGBcbiAgICAgIDxzZWxlY3QgcGFydD1cInNlbGVjdFwiIEBjaGFuZ2U9XCIke3RoaXMuY2hvaWNlU2VsZWN0ZWR9XCIgP2Rpc2FibGVkPVwiJHt0aGlzLmRpc2FibGVkfVwiID9yZWFkb25seT1cIiR7dGhpcy5yZWFkb25seX1cIj5cbiAgICAgICAgJHt0aGlzLm9wdGlvbnMubWFwKFxuICAgICAgICAgIG9wdGlvbiA9PiBodG1sYFxuICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIiR7b3B0aW9uLnZhbHVlfVwiID9zZWxlY3RlZD1cIiR7b3B0aW9uLnNlbGVjdGVkfVwiPiR7dW5zYWZlSFRNTChvcHRpb24udGV4dENvbnRlbnQpfTwvb3B0aW9uPlxuICAgICAgICAgIGBcbiAgICAgICAgKX1cbiAgICAgIDwvc2VsZWN0PlxuXG4gICAgICAke3Vuc2FmZUhUTUwodGhpcy5jb3JyZWN0T3B0aW9uKX1cbiAgICBgO1xuICB9XG5cbiAgLypcbiAgICA8ZGV0YWlscyBjbGFzcz1cImFuY2hvclwiPlxuICAgICAgPHN1bW1hcnk+JHt0aGlzLmRhdGFQcm9tcHR9PC9zdW1tYXJ5PlxuXG4gICAgICA8ZGl2IHJvbGU9XCJtZW51XCIgcGFydD1cIm1lbnVcIiBjbGFzcz1cInBvc2l0aW9uZWRFbGVtZW50XCI+XG4gICAgICAgIDxzbG90Pjwvc2xvdD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGV0YWlscz5cbiAgICAqL1xuXG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdvbi1kcm9wZG93bi1zZWxlY3RlZCcsIHRoaXMuY2hvaWNlU2VsZWN0ZWQpO1xuICAgIGNvbnN0IGNob2ljZXMgPSBBcnJheS5mcm9tKHRoaXMucXVlcnlTZWxlY3RvckFsbCgncXRpLWlubGluZS1jaG9pY2UnKSk7XG4gICAgdGhpcy5vcHRpb25zID0gW1xuICAgICAge1xuICAgICAgICB0ZXh0Q29udGVudDogdGhpcy5kYXRhUHJvbXB0LFxuICAgICAgICB2YWx1ZTogJycsXG4gICAgICAgIHNlbGVjdGVkOiBmYWxzZVxuICAgICAgfSxcbiAgICAgIC4uLmNob2ljZXMubWFwKGNob2ljZSA9PiAoe1xuICAgICAgICB0ZXh0Q29udGVudDogY2hvaWNlLmlubmVySFRNTCxcbiAgICAgICAgdmFsdWU6IGNob2ljZS5nZXRBdHRyaWJ1dGUoJ2lkZW50aWZpZXInKSxcbiAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlXG4gICAgICB9KSlcbiAgICBdO1xuICB9XG5cbiAgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdvbi1kcm9wZG93bi1zZWxlY3RlZCcsIHRoaXMuY2hvaWNlU2VsZWN0ZWQpO1xuICB9XG5cbiAgcHVibGljIHZhbGlkYXRlKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHNlbGVjdGVkT3B0aW9uID0gdGhpcy5vcHRpb25zLmZpbmQob3B0aW9uID0+IG9wdGlvbi5zZWxlY3RlZCk7XG4gICAgcmV0dXJuIHNlbGVjdGVkT3B0aW9uID8gc2VsZWN0ZWRPcHRpb24udmFsdWUgIT09ICcnIDogZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgcmVzZXQoKSB7XG4gICAgdGhpcy5vcHRpb25zID0gdGhpcy5vcHRpb25zLm1hcCgob3B0aW9uLCBpKSA9PiAoeyAuLi5vcHRpb24sIHNlbGVjdGVkOiBpID09PSAwIH0pKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgcmVzcG9uc2UodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMub3B0aW9ucyA9IHRoaXMub3B0aW9ucy5tYXAob3B0aW9uID0+IHtcbiAgICAgIHZhbHVlID09PSBvcHRpb24udmFsdWUgJiYgKG9wdGlvbi5zZWxlY3RlZCA9IHRydWUpO1xuICAgICAgcmV0dXJuIG9wdGlvbjtcbiAgICB9KTtcbiAgfVxuXG4gIHNldCBjb3JyZWN0UmVzcG9uc2UodmFsdWU6IFJlYWRvbmx5PHN0cmluZyB8IHN0cmluZ1tdPikge1xuICAgIGlmICh2YWx1ZSA9PT0gJycpIHtcbiAgICAgIHRoaXMuY29ycmVjdE9wdGlvbiA9ICcnO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmNvcnJlY3RPcHRpb24gPSBgPHNwYW4gcGFydD1cImNvcnJlY3Qtb3B0aW9uXCI+JHtcbiAgICAgIHRoaXMub3B0aW9ucy5maW5kKG9wdGlvbiA9PiB2YWx1ZSA9PT0gb3B0aW9uLnZhbHVlKS50ZXh0Q29udGVudFxuICAgIH08L3NwYW4+YDtcbiAgfVxuXG4gIHB1YmxpYyBjaG9pY2VTZWxlY3RlZChldmVudDogRXZlbnQpIHtcbiAgICBjb25zdCBzZWxlY3RlZE9wdGlvblZhbHVlID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MU2VsZWN0RWxlbWVudCkudmFsdWU7XG4gICAgdGhpcy5vcHRpb25zID0gdGhpcy5vcHRpb25zLm1hcChvcHRpb24gPT4gKHsgLi4ub3B0aW9uLCBzZWxlY3RlZDogb3B0aW9uLnZhbHVlID09PSBzZWxlY3RlZE9wdGlvblZhbHVlIH0pKTtcbiAgICB0aGlzLnNhdmVSZXNwb25zZShzZWxlY3RlZE9wdGlvblZhbHVlKTtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktaW5saW5lLWNob2ljZS1pbnRlcmFjdGlvbic6IFF0aUlubGluZUNob2ljZUludGVyYWN0aW9uO1xuICB9XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBDU1NSZXN1bHRHcm91cCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBodG1sLCBMaXRFbGVtZW50IH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQsIHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgQ2hvaWNlc0ludGVyZmFjZSwgQ2hvaWNlc01peGluIH0gZnJvbSAnLi4vaW50ZXJuYWwvY2hvaWNlcy9jaG9pY2VzJztcbmltcG9ydCB7IFNodWZmbGVNaXhpbiB9IGZyb20gJy4uL2ludGVybmFsL3NodWZmbGUvc2h1ZmZsZS1taXhpbic7XG5pbXBvcnQgeyBWb2NhYnVsYXJ5TWl4aW4gfSBmcm9tICcuLi9pbnRlcm5hbC92b2NhYnVsYXJ5L3ZvY2FidWxhcnktbWl4aW4nO1xuaW1wb3J0IHN0eWxlcyBmcm9tICcuL3F0aS1jaG9pY2UtaW50ZXJhY3Rpb24uc3R5bGVzJztcblxuQGN1c3RvbUVsZW1lbnQoJ3F0aS1jaG9pY2UtaW50ZXJhY3Rpb24nKVxuZXhwb3J0IGNsYXNzIFF0aUNob2ljZUludGVyYWN0aW9uXG4gIGV4dGVuZHMgVm9jYWJ1bGFyeU1peGluKFxuICAgIFNodWZmbGVNaXhpbihDaG9pY2VzTWl4aW4oTGl0RWxlbWVudCwgJ3F0aS1zaW1wbGUtY2hvaWNlJyksICdxdGktc2ltcGxlLWNob2ljZScpLFxuICAgICdxdGktc2ltcGxlLWNob2ljZSdcbiAgKVxuICBpbXBsZW1lbnRzIENob2ljZXNJbnRlcmZhY2VcbntcbiAgc3RhdGljIHN0eWxlczogQ1NTUmVzdWx0R3JvdXAgPSBzdHlsZXM7XG5cbiAgLyoqIG9yaWVudGF0aW9uIG9mIGNob2ljZXMgKi9cbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nIH0pXG4gIHB1YmxpYyBvcmllbnRhdGlvbjogJ2hvcml6b250YWwnIHwgJ3ZlcnRpY2FsJztcblxuICByZW5kZXIoKSB7XG4gICAgcmV0dXJuIGh0bWxgIDxzbG90IG5hbWU9XCJwcm9tcHRcIj48L3Nsb3Q+PHNsb3QgcGFydD1cInNsb3RcIj48L3Nsb3Q+YDtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktY2hvaWNlLWludGVyYWN0aW9uJzogUXRpQ2hvaWNlSW50ZXJhY3Rpb247XG4gIH1cbn1cbiIsICIvKipcbiAqIE1peGluIHRoYXQgcHJvdmlkZXMgc2h1ZmZsaW5nIGZ1bmN0aW9uYWxpdHkgZm9yIGEgTGl0RWxlbWVudC5cbiAqIEB0ZW1wbGF0ZSBUIC0gVGhlIHR5cGUgb2YgdGhlIExpdEVsZW1lbnQgc3ViY2xhc3MuXG4gKiBAcGFyYW0ge1R9IHN1cGVyQ2xhc3MgLSBUaGUgc3VwZXJjbGFzcyB0byBleHRlbmQuXG4gKiBAcGFyYW0ge3N0cmluZ30gc2VsZWN0b3IgLSBUaGUgQ1NTIHNlbGVjdG9yIGZvciB0aGUgZWxlbWVudHMgdG8gc2h1ZmZsZS5cbiAqIEByZXR1cm5zIHtDb25zdHJ1Y3RvcjxTaHVmZmxlSW50ZXJmYWNlPiAmIFR9IC0gVGhlIGV4dGVuZGVkIGNsYXNzIHdpdGggc2h1ZmZsaW5nIGZ1bmN0aW9uYWxpdHkuXG4gKlxuICogYWRkcyBhIHNodWZmbGUgcHJvcGVydHkgdG8gdGhlIGNsYXNzIHdpdGggYW4gYXR0cmlidXRlIGNvbnZlcnRlclxuICpcbiAqIHF0aS1pbmxpbmUtY2hvaWNlLWludGVyYWN0aW9uXG4gKiBxdGktY2hvaWNlLWludGVyYWN0aW9uXG4gKiBxdGktbWF0Y2gtaW50ZXJhY3Rpb25cbiAqL1xuaW1wb3J0IHsgTGl0RWxlbWVudCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBwcm9wZXJ0eSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcblxudHlwZSBDb25zdHJ1Y3RvcjxUID0ge30+ID0gbmV3ICguLi5hcmdzOiBhbnlbXSkgPT4gVDtcblxuZGVjbGFyZSBjbGFzcyBTaHVmZmxlSW50ZXJmYWNlIHt9XG5leHBvcnQgY29uc3QgU2h1ZmZsZU1peGluID0gPFQgZXh0ZW5kcyBDb25zdHJ1Y3RvcjxMaXRFbGVtZW50Pj4oc3VwZXJDbGFzczogVCwgc2VsZWN0b3I6IHN0cmluZykgPT4ge1xuICBjbGFzcyBTaHVmZmxlRWxlbWVudCBleHRlbmRzIHN1cGVyQ2xhc3Mge1xuICAgIHByaXZhdGUgX3NodWZmbGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8vIERlZmluZSB0aGUgcHJvcGVydHkgd2l0aCB0aGUgY3VzdG9tIGNvbnZlcnRlclxuICAgIEBwcm9wZXJ0eSh7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICByZWZsZWN0OiB0cnVlLFxuICAgICAgY29udmVydGVyOiBzdHJpbmdUb0Jvb2xlYW5Db252ZXJ0ZXJcbiAgICB9KVxuICAgIHNldCBzaHVmZmxlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICBjb25zdCBvbGRWYWx1ZSA9IHRoaXMuX3NodWZmbGU7XG4gICAgICB0aGlzLl9zaHVmZmxlID0gdmFsdWU7XG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgdGhpcy5fc2h1ZmZsZUNob2ljZXMoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX3Jlc2V0U2h1ZmZsZUNob2ljZXMoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMucmVxdWVzdFVwZGF0ZSgnc2h1ZmZsZScsIG9sZFZhbHVlKTtcbiAgICB9XG5cbiAgICBnZXQgc2h1ZmZsZSgpOiBib29sZWFuIHtcbiAgICAgIHJldHVybiB0aGlzLl9zaHVmZmxlO1xuICAgIH1cblxuICAgIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICAgIC8vIENhbGwgX3Jlc2V0U2h1ZmZsZUNob2ljZXMgaW5pdGlhbGx5IHRvIHNldCB0aGUgQ1NTIG9yZGVyIHRvIGluaXRpYWwuXG4gICAgICAvLyBJZiBzaHVmZmxlIGlzIHRydWUsIF9zaHVmZmxlQ2hvaWNlcyB3aWxsIGJlIGNhbGxlZCBhdXRvbWF0aWNhbGx5IHZpYSB0aGUgc2V0dGVyLlxuICAgICAgaWYgKHRoaXMuc2h1ZmZsZSkge1xuICAgICAgICB0aGlzLl9zaHVmZmxlQ2hvaWNlcygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fcmVzZXRTaHVmZmxlQ2hvaWNlcygpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX3NodWZmbGVDaG9pY2VzKCkge1xuICAgICAgY29uc3QgY2hvaWNlcyA9IEFycmF5LmZyb20odGhpcy5xdWVyeVNlbGVjdG9yQWxsPEhUTUxFbGVtZW50PihzZWxlY3RvcikpO1xuXG4gICAgICBjb25zdCBmaXhlZEVsZW1lbnRzOiBBcnJheTx7IGVsZW1lbnQ6IEhUTUxFbGVtZW50OyBpbmRleDogbnVtYmVyIH0+ID0gW107XG4gICAgICBjb25zdCBub25GaXhlZEVsZW1lbnRzOiBBcnJheTxIVE1MRWxlbWVudD4gPSBbXTtcblxuICAgICAgLy8gU2VwYXJhdGUgZml4ZWQgYW5kIG5vbi1maXhlZCBlbGVtZW50c1xuICAgICAgY2hvaWNlcy5mb3JFYWNoKChjaG9pY2UsIGluZGV4KSA9PiB7XG4gICAgICAgIGlmIChjaG9pY2UuaGFzQXR0cmlidXRlKCdmaXhlZCcpKSB7XG4gICAgICAgICAgZml4ZWRFbGVtZW50cy5wdXNoKHsgZWxlbWVudDogY2hvaWNlLCBpbmRleDogaW5kZXggfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbm9uRml4ZWRFbGVtZW50cy5wdXNoKGNob2ljZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICAvLyBJZiB0aGVyZSBhcmUgMSBvciBmZXdlciBub24tZml4ZWQgZWxlbWVudHMsIHRocm93IGFuIGVycm9yIChubyBzaHVmZmxlIHBvc3NpYmxlKVxuICAgICAgaWYgKG5vbkZpeGVkRWxlbWVudHMubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTaHVmZmxpbmcgaXMgbm90IHBvc3NpYmxlIHdpdGggZmV3ZXIgdGhhbiAyIG5vbi1maXhlZCBlbGVtZW50cy4nKTtcbiAgICAgIH1cblxuICAgICAgbGV0IGlzU2h1ZmZsZWQgPSBmYWxzZTtcbiAgICAgIGNvbnN0IG1heEF0dGVtcHRzID0gMTA7IC8vIE1heCBhdHRlbXB0cyB0byBwcmV2ZW50IGluZmluaXRlIGxvb3BzXG4gICAgICBsZXQgYXR0ZW1wdCA9IDA7XG5cbiAgICAgIC8vIFNodWZmbGUgdW50aWwgdGhlIHJlc3VsdCBpcyBkaWZmZXJlbnQgb3IgbWF4QXR0ZW1wdHMgaXMgcmVhY2hlZFxuICAgICAgd2hpbGUgKCFpc1NodWZmbGVkICYmIGF0dGVtcHQgPCBtYXhBdHRlbXB0cykge1xuICAgICAgICBhdHRlbXB0Kys7XG5cbiAgICAgICAgLy8gU2h1ZmZsZSBub24tZml4ZWQgZWxlbWVudHNcbiAgICAgICAgZm9yIChsZXQgaSA9IG5vbkZpeGVkRWxlbWVudHMubGVuZ3RoIC0gMTsgaSA+IDA7IGktLSkge1xuICAgICAgICAgIGNvbnN0IGogPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAoaSArIDEpKTtcbiAgICAgICAgICBbbm9uRml4ZWRFbGVtZW50c1tpXSwgbm9uRml4ZWRFbGVtZW50c1tqXV0gPSBbbm9uRml4ZWRFbGVtZW50c1tqXSwgbm9uRml4ZWRFbGVtZW50c1tpXV07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDaGVjayBpZiB0aGUgc2h1ZmZsZWQgcmVzdWx0IGlzIGRpZmZlcmVudCBmcm9tIHRoZSBvcmlnaW5hbCBvcmRlclxuICAgICAgICBpc1NodWZmbGVkID0gbm9uRml4ZWRFbGVtZW50cy5zb21lKChjaG9pY2UsIGluZGV4KSA9PiB7XG4gICAgICAgICAgY29uc3Qgb3JpZ2luYWxJbmRleCA9IGNob2ljZXMuaW5kZXhPZihjaG9pY2UpO1xuICAgICAgICAgIHJldHVybiBvcmlnaW5hbEluZGV4ICE9PSBpbmRleDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKGlzU2h1ZmZsZWQpIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWlzU2h1ZmZsZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gc2h1ZmZsZSB0aGUgY2hvaWNlcyBhZnRlciBtdWx0aXBsZSBhdHRlbXB0cy4nKTtcbiAgICAgIH1cblxuICAgICAgLy8gQXNzaWduIG9yZGVyIHRvIGVhY2ggZWxlbWVudFxuICAgICAgbGV0IG9yZGVyID0gMTtcbiAgICAgIGNob2ljZXMuZm9yRWFjaCgoY2hvaWNlOiBIVE1MRWxlbWVudCwgaW5kZXgpID0+IHtcbiAgICAgICAgaWYgKGNob2ljZS5oYXNBdHRyaWJ1dGUoJ2ZpeGVkJykpIHtcbiAgICAgICAgICBjaG9pY2Uuc3R5bGUuc2V0UHJvcGVydHkoJ29yZGVyJywgU3RyaW5nKG9yZGVyKyspKTsgLy8gY2hvaWNlLnN0eWxlLm9yZGVyID0gU3RyaW5nKG9yZGVyKyspO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IG5vbkZpeGVkQ2hvaWNlID0gbm9uRml4ZWRFbGVtZW50cy5zaGlmdCgpO1xuICAgICAgICAgIG5vbkZpeGVkQ2hvaWNlIS5zdHlsZS5zZXRQcm9wZXJ0eSgnb3JkZXInLCBTdHJpbmcob3JkZXIrKykpOyAvLyBub25GaXhlZENob2ljZSEuc3R5bGUub3JkZXIgPSBTdHJpbmcob3JkZXIrKyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3Jlc2V0U2h1ZmZsZUNob2ljZXMoKSB7XG4gICAgICBjb25zdCBjaG9pY2VzID0gQXJyYXkuZnJvbSh0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwoJ3F0aS1zaW1wbGUtY2hvaWNlJykpO1xuICAgICAgY2hvaWNlcy5mb3JFYWNoKChjaG9pY2UsIGluZGV4KSA9PiB7XG4gICAgICAgIGNob2ljZS5zdHlsZS5zZXRQcm9wZXJ0eSgnb3JkZXInLCAnaW5pdGlhbCcpOyAvLyBjaG9pY2Uuc3R5bGUub3JkZXIgPSAnaW5pdGlhbCc7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIFNodWZmbGVFbGVtZW50IGFzIENvbnN0cnVjdG9yPFNodWZmbGVJbnRlcmZhY2U+ICYgVDtcbn07XG5cbmNvbnN0IHN0cmluZ1RvQm9vbGVhbkNvbnZlcnRlciA9IHtcbiAgZnJvbUF0dHJpYnV0ZSh2YWx1ZTogc3RyaW5nIHwgbnVsbCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB2YWx1ZSA9PT0gJ3RydWUnO1xuICB9LFxuICB0b0F0dHJpYnV0ZSh2YWx1ZTogYm9vbGVhbik6IHN0cmluZyB7XG4gICAgcmV0dXJuIHZhbHVlID8gJ3RydWUnIDogJ2ZhbHNlJztcbiAgfVxufTtcbiIsICIvKipcbiAqIE1peGluIHRoYXQgcHJvdmlkZXMgc2h1ZmZsaW5nIGZ1bmN0aW9uYWxpdHkgZm9yIGEgTGl0RWxlbWVudC5cbiAqIEB0ZW1wbGF0ZSBUIC0gVGhlIHR5cGUgb2YgdGhlIExpdEVsZW1lbnQgc3ViY2xhc3MuXG4gKiBAcGFyYW0ge1R9IHN1cGVyQ2xhc3MgLSBUaGUgc3VwZXJjbGFzcyB0byBleHRlbmQuXG4gKiBAcGFyYW0ge3N0cmluZ30gc2VsZWN0b3IgLSBUaGUgQ1NTIHNlbGVjdG9yIGZvciB0aGUgZWxlbWVudHMgdG8gc2h1ZmZsZS5cbiAqIEByZXR1cm5zIHtDb25zdHJ1Y3RvcjxTaHVmZmxlSW50ZXJmYWNlPiAmIFR9IC0gVGhlIGV4dGVuZGVkIGNsYXNzIHdpdGggc2h1ZmZsaW5nIGZ1bmN0aW9uYWxpdHkuXG4gKlxuICogYWRkcyBhIHNodWZmbGUgcHJvcGVydHkgdG8gdGhlIGNsYXNzIHdpdGggYW4gYXR0cmlidXRlIGNvbnZlcnRlclxuICpcbiAqIHF0aS1pbmxpbmUtY2hvaWNlLWludGVyYWN0aW9uXG4gKiBxdGktY2hvaWNlLWludGVyYWN0aW9uXG4gKiBxdGktbWF0Y2gtaW50ZXJhY3Rpb25cbiAqL1xuaW1wb3J0IHsgaHRtbCwgTGl0RWxlbWVudCwgUHJvcGVydHlWYWx1ZXMgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgcHJvcGVydHkgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBRdGlDaG9pY2UgfSBmcm9tICcuLi9jaG9pY2UvcXRpLWNob2ljZSc7XG5pbXBvcnQgeyBRdGlTaW1wbGVDaG9pY2UgfSBmcm9tICcuLi8uLi9xdGktc2ltcGxlLWNob2ljZSc7XG5cbnR5cGUgQ29uc3RydWN0b3I8VCA9IHt9PiA9IG5ldyAoLi4uYXJnczogYW55W10pID0+IFQ7XG5cbnR5cGUgTGFiZWxUeXBlID0gJ3F0aS1sYWJlbHMtZGVjaW1hbCcgfCAncXRpLWxhYmVscy1sb3dlci1hbHBoYScgfCAncXRpLWxhYmVscy11cHBlci1hbHBoYSc7XG50eXBlIExhYmVsU3VmZml4VHlwZSA9ICdxdGktbGFiZWxzLXN1ZmZpeC1wZXJpb2QnIHwgJ3F0aS1sYWJlbHMtc3VmZml4LXBhcmVudGhlc2lzJztcblxuZGVjbGFyZSBjbGFzcyBWb2NhYnVsYXJ5SW50ZXJmYWNlIHt9XG5cbmV4cG9ydCBjb25zdCBWb2NhYnVsYXJ5TWl4aW4gPSA8VCBleHRlbmRzIENvbnN0cnVjdG9yPExpdEVsZW1lbnQ+PihzdXBlckNsYXNzOiBULCBzZWxlY3Rvcjogc3RyaW5nKSA9PiB7XG4gIGNsYXNzIFZvY2FidWxhcnlFbGVtZW50IGV4dGVuZHMgc3VwZXJDbGFzcyB7XG4gICAgcHJpdmF0ZSBfY2xhc3Nlczogc3RyaW5nW10gPSBbXTtcbiAgICBwcml2YXRlIF9hbGxMYWJlbHMgPSBbJ3F0aS1sYWJlbHMtZGVjaW1hbCcsICdxdGktbGFiZWxzLWxvd2VyLWFscGhhJywgJ3F0aS1sYWJlbHMtdXBwZXItYWxwaGEnXTtcbiAgICBwcml2YXRlIF9hbGxMYWJlbFN1ZmZpeGVzID0gWydxdGktbGFiZWxzLXN1ZmZpeC1wZXJpb2QnLCAncXRpLWxhYmVscy1zdWZmaXgtcGFyZW50aGVzaXMnXTtcbiAgICAvLyBEZWZpbmUgdGhlIHByb3BlcnR5IHdpdGggdGhlIGN1c3RvbSBjb252ZXJ0ZXJcbiAgICBAcHJvcGVydHkoe1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgcmVmbGVjdDogdHJ1ZVxuICAgIH0pXG4gICAgc2V0IGNsYXNzKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgLy8gY29uc3Qgb2xkVmFsdWUgPSB0aGlzLl9jbGFzc2VzLmpvaW4oJyAnKTtcbiAgICAgIHRoaXMuX2NsYXNzZXMgPSB2YWx1ZS5zcGxpdCgnICcpO1xuXG4gICAgICB0aGlzLl9hZGRMYWJlbHMoKTtcbiAgICAgIC8vIHRoaXMucmVxdWVzdFVwZGF0ZSgnY2xhc3MnLCBvbGRWYWx1ZSk7XG4gICAgfVxuICAgIGdldCBjbGFzcygpOiBzdHJpbmcge1xuICAgICAgcmV0dXJuIHRoaXMuX2NsYXNzZXM/LmpvaW4oJyAnKSB8fCAnJztcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgdXBkYXRlZChfY2hhbmdlZFByb3BlcnRpZXM6IFByb3BlcnR5VmFsdWVzKTogdm9pZCB7XG4gICAgICBzdXBlci51cGRhdGVkKF9jaGFuZ2VkUHJvcGVydGllcyk7XG4gICAgICBpZiAoX2NoYW5nZWRQcm9wZXJ0aWVzLmhhcygnc2h1ZmZsZScpKSB7XG4gICAgICAgIHRoaXMuX2FkZExhYmVscygpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX2FkZExhYmVscygpIHtcbiAgICAgIGNvbnN0IGNsYXNzQ29udGFpbnNMYWJlbCA9IHRoaXMuX2NsYXNzZXMuc29tZShcbiAgICAgICAgY2xzID0+IHRoaXMuX2FsbExhYmVscy5pbmNsdWRlcyhjbHMpIHx8IHRoaXMuX2FsbExhYmVsU3VmZml4ZXMuaW5jbHVkZXMoY2xzKVxuICAgICAgKTtcbiAgICAgIGNvbnN0IGlzTnVtYmVyID0gdmFsdWUgPT4ge1xuICAgICAgICByZXR1cm4gIWlzTmFOKCt2YWx1ZSk7XG4gICAgICB9O1xuICAgICAgaWYgKGNsYXNzQ29udGFpbnNMYWJlbCkge1xuICAgICAgICBjb25zdCBjaG9pY2VFbGVtZW50cyA9IEFycmF5LmZyb20odGhpcy5xdWVyeVNlbGVjdG9yQWxsKCdxdGktc2ltcGxlLWNob2ljZScpKS5tYXAoYyA9PiBjIGFzIFF0aVNpbXBsZUNob2ljZSk7XG4gICAgICAgIGNvbnN0IGNob2ljZXMgPSBjaG9pY2VFbGVtZW50c1xuICAgICAgICAgIC5tYXAoKGNob2ljZTogSFRNTEVsZW1lbnQsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4geyBlbDogY2hvaWNlLCBvcmRlcjogaXNOdW1iZXIoY2hvaWNlLnN0eWxlLm9yZGVyKSA/ICtjaG9pY2Uuc3R5bGUub3JkZXIgOiBpbmRleCArIDEgfTtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLm9yZGVyIC0gYi5vcmRlcilcbiAgICAgICAgICAubWFwKGNob2ljZSA9PiBjaG9pY2UuZWwpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNob2ljZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAoY2hvaWNlc1tpXSBhcyBRdGlTaW1wbGVDaG9pY2UpLm1hcmtlciA9IHRoaXMuX2dldExhYmVsKGkgKyAxKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBwcml2YXRlIF9nZXRMYWJlbChpbmRleDogbnVtYmVyKSB7XG4gICAgICBsZXQgbGFzdExhYmVsID0gdGhpcy5fY2xhc3Nlcy5maWx0ZXIoYyA9PiB0aGlzLl9hbGxMYWJlbHMuaW5jbHVkZXMoYykpLnBvcCgpO1xuICAgICAgY29uc3QgbGFzdExhYmVsU3VmZml4ID0gdGhpcy5fY2xhc3Nlcy5maWx0ZXIoYyA9PiB0aGlzLl9hbGxMYWJlbFN1ZmZpeGVzLmluY2x1ZGVzKGMpKS5wb3AoKTtcblxuICAgICAgaWYgKCFsYXN0TGFiZWwgJiYgbGFzdExhYmVsU3VmZml4KSB7XG4gICAgICAgIC8vIGEgc3VmZml4IHdpdGhvdXQgYSBsYWJlbCBpcyBzdHJhbmdlIHNvIGFkZCBxdGktbGFiZWxzLXVwcGVyLWFscGhhXG4gICAgICAgIGxhc3RMYWJlbCA9ICdxdGktbGFiZWxzLXVwcGVyLWFscGhhJztcbiAgICAgIH1cbiAgICAgIGxldCBsYWJlbCA9ICcnO1xuICAgICAgc3dpdGNoIChsYXN0TGFiZWwpIHtcbiAgICAgICAgY2FzZSAncXRpLWxhYmVscy1kZWNpbWFsJzpcbiAgICAgICAgICBsYWJlbCA9IGAke2luZGV4fWA7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3F0aS1sYWJlbHMtbG93ZXItYWxwaGEnOlxuICAgICAgICAgIGxhYmVsID0gYCR7U3RyaW5nLmZyb21DaGFyQ29kZSg5NyArIGluZGV4IC0gMSl9YDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAncXRpLWxhYmVscy11cHBlci1hbHBoYSc6XG4gICAgICAgICAgbGFiZWwgPSBgJHtTdHJpbmcuZnJvbUNoYXJDb2RlKDY1ICsgaW5kZXggLSAxKX1gO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgaWYgKGxhc3RMYWJlbFN1ZmZpeCA9PT0gJ3F0aS1sYWJlbHMtc3VmZml4LXBlcmlvZCcpIHtcbiAgICAgICAgbGFiZWwgKz0gJy4nO1xuICAgICAgfSBlbHNlIGlmIChsYXN0TGFiZWxTdWZmaXggPT09ICdxdGktbGFiZWxzLXN1ZmZpeC1wYXJlbnRoZXNpcycpIHtcbiAgICAgICAgbGFiZWwgKz0gYClgO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGxhYmVsO1xuICAgIH1cbiAgfVxuICByZXR1cm4gVm9jYWJ1bGFyeUVsZW1lbnQgYXMgQ29uc3RydWN0b3I8Vm9jYWJ1bGFyeUludGVyZmFjZT4gJiBUO1xufTtcbiIsICJpbXBvcnQgeyBjc3MgfSBmcm9tICdsaXQnO1xuLy8gaW1wb3J0IGNvbXBvbmVudFN0eWxlcyBmcm9tICcuLi8uLi91dGlsaXRpZXMvc3R5bGVzL2NvbXBvbmVudC5zdHlsZXMnO1xuXG4vKiAke2NvbXBvbmVudFN0eWxlc30gKi9cbmV4cG9ydCBkZWZhdWx0IGNzc2BcbiAgOmhvc3Qge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAvLyBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgfVxuYDtcbiIsICJpbXBvcnQgeyBjc3MsIGh0bWwsIExpdEVsZW1lbnQgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IFF0aVJ1bGUsIFF0aVJ1bGVCYXNlIH0gZnJvbSAnLi4nO1xuXG5AY3VzdG9tRWxlbWVudCgncXRpLW91dGNvbWUtcHJvY2Vzc2luZycpXG5leHBvcnQgY2xhc3MgUXRpT3V0Y29tZVByb2Nlc3NpbmcgZXh0ZW5kcyBMaXRFbGVtZW50IHtcbiAgc3RhdGljIHN0eWxlcyA9IFtcbiAgICBjc3NgXG4gICAgICA6aG9zdCB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICB9XG4gICAgYFxuICBdO1xuXG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICByZXR1cm4gaHRtbGA8c2xvdD48L3Nsb3Q+YDtcbiAgfVxuXG4gIHB1YmxpYyBwcm9jZXNzKCkge1xuICAgIGNvbnN0IGxvZ2ljID0gbmV3IFF0aU91dGNvbWVQcm9jZXNzaW5nUHJvY2Vzc29yKCk7XG4gICAgY29uc3QgcnVsZXMgPSBbLi4udGhpcy5jaGlsZHJlbl0gYXMgUXRpUnVsZVtdO1xuICAgIGxvZ2ljLnByb2Nlc3MocnVsZXMpO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1vdXRjb21lLXByb2Nlc3NpbmcnOiBRdGlPdXRjb21lUHJvY2Vzc2luZztcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgUXRpT3V0Y29tZVByb2Nlc3NpbmdQcm9jZXNzb3Ige1xuICBwdWJsaWMgcHJvY2VzcyhydWxlczogUXRpUnVsZUJhc2VbXSkge1xuICAgIGZvciAoY29uc3QgcnVsZSBvZiBydWxlcykge1xuICAgICAgcnVsZS5wcm9jZXNzKCk7XG4gICAgfVxuICB9XG59XG4iLCAiaW1wb3J0IHsgY3NzLCBodG1sLCBMaXRFbGVtZW50LCBQcm9wZXJ0eVZhbHVlTWFwIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5cbmltcG9ydCB7IG1hcFJlc3BvbnNlLCBtYXBSZXNwb25zZVBvaW50LCBtYXRjaENvcnJlY3QgfSBmcm9tICcuLi8uLi9pbnRlcm5hbC90ZW1wbGF0ZS1zdHJpbmdzJztcbmltcG9ydCB7IHR5cGUgUXRpUnVsZSB9IGZyb20gJy4uL3F0aS1ydWxlL3F0aS1ydWxlJztcblxuQGN1c3RvbUVsZW1lbnQoJ3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nJylcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFF0aVJlc3BvbnNlUHJvY2Vzc2luZyBleHRlbmRzIExpdEVsZW1lbnQge1xuICBzdGF0aWMgc3R5bGVzID0gW1xuICAgIGNzc2BcbiAgICAgIDpob3N0IHtcbiAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgIH1cbiAgICBgXG4gIF07XG5cbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYDxzbG90Pjwvc2xvdD5gO1xuICB9XG5cbiAgcHVibGljIHByb2Nlc3MoKSB7XG4gICAgY29uc3QgcnVsZXMgPSBbLi4udGhpcy5jaGlsZHJlbl0gYXMgUXRpUnVsZVtdO1xuXG4gICAgZm9yIChjb25zdCBydWxlIG9mIHJ1bGVzKSB7XG4gICAgICBydWxlLnByb2Nlc3MoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZmlyc3RVcGRhdGVkKF9jaGFuZ2VkUHJvcGVydGllczogUHJvcGVydHlWYWx1ZU1hcDxhbnk+IHwgTWFwPFByb3BlcnR5S2V5LCB1bmtub3duPik6IHZvaWQge1xuICAgIGlmICh0aGlzLmdldEF0dHJpYnV0ZSgndGVtcGxhdGUnKSkge1xuICAgICAgY29uc3Qgc3BsaXR0ZWRUZW1wbGF0ZU5hbWUgPSB0aGlzLmdldEF0dHJpYnV0ZSgndGVtcGxhdGUnKSEuc3BsaXQoJy8nKTtcbiAgICAgIGNvbnN0IHRlbXBsYXRlTmFtZSA9IHNwbGl0dGVkVGVtcGxhdGVOYW1lW3NwbGl0dGVkVGVtcGxhdGVOYW1lLmxlbmd0aCAtIDFdLnJlcGxhY2UoJy54bWwnLCAnJyk7XG4gICAgICB0aGlzLmlubmVySFRNTCA9ICcnO1xuICAgICAgc3dpdGNoICh0ZW1wbGF0ZU5hbWUpIHtcbiAgICAgICAgY2FzZSAnbWFwX3Jlc3BvbnNlJzoge1xuICAgICAgICAgIHRoaXMuYXBwZW5kQ2hpbGQodGhpcy5mcmFnbWVudEZyb21TdHJpbmcobWFwUmVzcG9uc2UpLmZpcnN0RWxlbWVudENoaWxkLmZpcnN0RWxlbWVudENoaWxkKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdtYXBfcmVzcG9uc2VfcG9pbnQnOiB7XG4gICAgICAgICAgdGhpcy5hcHBlbmRDaGlsZCh0aGlzLmZyYWdtZW50RnJvbVN0cmluZyhtYXBSZXNwb25zZVBvaW50KS5maXJzdEVsZW1lbnRDaGlsZC5maXJzdEVsZW1lbnRDaGlsZCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnbWF0Y2hfY29ycmVjdCc6XG4gICAgICAgICAgdGhpcy5hcHBlbmRDaGlsZCh0aGlzLmZyYWdtZW50RnJvbVN0cmluZyhtYXRjaENvcnJlY3QpLmZpcnN0RWxlbWVudENoaWxkLmZpcnN0RWxlbWVudENoaWxkKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZyYWdtZW50RnJvbVN0cmluZyhzdHJIVE1MOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKS5jcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQoc3RySFRNTCk7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcnOiBRdGlSZXNwb25zZVByb2Nlc3Npbmc7XG4gIH1cbn1cbiIsICJleHBvcnQgY29uc3QgbWF0Y2hDb3JyZWN0ID0gYDxxdGktcmVzcG9uc2UtcHJvY2Vzc2luZz5cbiAgPHF0aS1yZXNwb25zZS1jb25kaXRpb24+XG4gICAgPHF0aS1yZXNwb25zZS1pZj5cbiAgICAgIDxxdGktbWF0Y2g+XG4gICAgICAgIDxxdGktdmFyaWFibGUgaWRlbnRpZmllcj1cIlJFU1BPTlNFXCI+PC9xdGktdmFyaWFibGU+XG4gICAgICAgIDxxdGktY29ycmVjdCBpZGVudGlmaWVyPVwiUkVTUE9OU0VcIj48L3F0aS1jb3JyZWN0PlxuICAgICAgPC9xdGktbWF0Y2g+XG4gICAgICA8cXRpLXNldC1vdXRjb21lLXZhbHVlIGlkZW50aWZpZXI9XCJTQ09SRVwiPlxuICAgICAgICA8cXRpLWJhc2UtdmFsdWUgYmFzZS10eXBlPVwiZmxvYXRcIj4xPC9xdGktYmFzZS12YWx1ZT5cbiAgICAgIDwvcXRpLXNldC1vdXRjb21lLXZhbHVlPlxuICAgIDwvcXRpLXJlc3BvbnNlLWlmPlxuICAgIDxxdGktcmVzcG9uc2UtZWxzZT5cbiAgICAgIDxxdGktc2V0LW91dGNvbWUtdmFsdWUgaWRlbnRpZmllcj1cIlNDT1JFXCI+XG4gICAgICAgIDxxdGktYmFzZS12YWx1ZSBiYXNlLXR5cGU9XCJmbG9hdFwiPjA8L3F0aS1iYXNlLXZhbHVlPlxuICAgICAgPC9xdGktc2V0LW91dGNvbWUtdmFsdWU+XG4gICAgPC9xdGktcmVzcG9uc2UtZWxzZT5cbiAgPC9xdGktcmVzcG9uc2UtY29uZGl0aW9uPlxuPC9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZz5gO1xuXG5leHBvcnQgY29uc3QgbWFwUmVzcG9uc2UgPSBgPHF0aS1yZXNwb25zZS1wcm9jZXNzaW5nPlxuICA8cXRpLXJlc3BvbnNlLWNvbmRpdGlvbj5cbiAgICA8cXRpLXJlc3BvbnNlLWlmPlxuICAgICAgPHF0aS1pcy1udWxsPlxuICAgICAgICA8cXRpLXZhcmlhYmxlIGlkZW50aWZpZXI9XCJSRVNQT05TRVwiPjwvcXRpLXZhcmlhYmxlPlxuICAgICAgPC9xdGktaXMtbnVsbD5cbiAgICAgIDxxdGktc2V0LW91dGNvbWUtdmFsdWUgaWRlbnRpZmllcj1cIlNDT1JFXCI+XG4gICAgICAgIDxxdGktYmFzZS12YWx1ZSBiYXNlLXR5cGU9XCJmbG9hdFwiPjAuMDwvcXRpLWJhc2UtdmFsdWU+XG4gICAgICA8L3F0aS1zZXQtb3V0Y29tZS12YWx1ZT5cbiAgICA8L3F0aS1yZXNwb25zZS1pZj5cbiAgICA8cXRpLXJlc3BvbnNlLWVsc2U+XG4gICAgICA8cXRpLXNldC1vdXRjb21lLXZhbHVlIGlkZW50aWZpZXI9XCJTQ09SRVwiPlxuICAgICAgICA8cXRpLW1hcC1yZXNwb25zZSBpZGVudGlmaWVyPVwiUkVTUE9OU0VcIj4gPC9xdGktbWFwLXJlc3BvbnNlPlxuICAgICAgPC9xdGktc2V0LW91dGNvbWUtdmFsdWU+XG4gICAgPC9xdGktcmVzcG9uc2UtZWxzZT5cbiAgPC9xdGktcmVzcG9uc2UtY29uZGl0aW9uPlxuPC9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZz5gO1xuXG5leHBvcnQgY29uc3QgbWFwUmVzcG9uc2VQb2ludCA9IGA8cXRpLXJlc3BvbnNlLXByb2Nlc3Npbmc+XG4gIDxxdGktcmVzcG9uc2UtY29uZGl0aW9uPlxuICAgIDxxdGktcmVzcG9uc2UtaWY+XG4gICAgICA8cXRpLWlzLW51bGw+XG4gICAgICAgIDxxdGktdmFyaWFibGUgaWRlbnRpZmllcj1cIlJFU1BPTlNFXCI+PC9xdGktdmFyaWFibGU+XG4gICAgICA8L3F0aS1pcy1udWxsPlxuICAgICAgPHF0aS1zZXQtb3V0Y29tZS12YWx1ZSBpZGVudGlmaWVyPVwiU0NPUkVcIj5cbiAgICAgICAgPHF0aS1iYXNlLXZhbHVlIGJhc2UtdHlwZT1cImZsb2F0XCI+MDwvcXRpLWJhc2UtdmFsdWU+XG4gICAgICA8L3F0aS1zZXQtb3V0Y29tZS12YWx1ZT5cbiAgICA8L3F0aS1yZXNwb25zZS1pZj5cbiAgICA8cXRpLXJlc3BvbnNlLWVsc2U+XG4gICAgICA8cXRpLXNldC1vdXRjb21lLXZhbHVlIGlkZW50aWZpZXI9XCJTQ09SRVwiPlxuICAgICAgICA8cXRpLW1hcC1yZXNwb25zZS1wb2ludCBpZGVudGlmaWVyPVwiUkVTUE9OU0VcIj48L3F0aS1tYXAtcmVzcG9uc2UtcG9pbnQ+XG4gICAgICA8L3F0aS1zZXQtb3V0Y29tZS12YWx1ZT5cbiAgICA8L3F0aS1yZXNwb25zZS1lbHNlPlxuICA8L3F0aS1yZXNwb25zZS1jb25kaXRpb24+XG48L3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nPmA7XG4iLCAiaW1wb3J0IHsgT3V0Y29tZVZhcmlhYmxlIH0gZnJvbSAnQGNpdG9sYWIvcXRpLWNvbXBvbmVudHMvcXRpLWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgcHJvcGVydHkgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBjb252ZXJ0TnVtYmVyVG9Vbml2ZXJhbEZvcm1hdCB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFsL3V0aWxzJztcbmltcG9ydCB7IFF0aUV4cHJlc3Npb24gfSBmcm9tICcuLi8uLi9xdGktZXhwcmVzc2lvbi9xdGktZXhwcmVzc2lvbic7XG5pbXBvcnQgeyBRdGlSdWxlIH0gZnJvbSAnLi4vcXRpLXJ1bGUnO1xuXG4vKipcbiAqIFRoZSBsb29rdXBPdXRjb21lVmFsdWUgcnVsZSBzZXRzIHRoZSB2YWx1ZSBvZiBhbiBvdXRjb21lIHZhcmlhYmxlIHRvIHRoZSB2YWx1ZSBvYnRhaW5lZFxuICogYnkgbG9va2luZyB1cCB0aGUgdmFsdWUgb2YgdGhlIGFzc29jaWF0ZWQgZXhwcmVzc2lvbiBpbiB0aGUgbG9va3VwVGFibGUgYXNzb2NpYXRlZFxuICogd2l0aCB0aGUgb3V0Y29tZSdzIGRlY2xhcmF0aW9uLlxuICovXG5leHBvcnQgY2xhc3MgUXRpTG9va3VwT3V0Y29tZVZhbHVlIGV4dGVuZHMgUXRpUnVsZSB7XG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZyB9KSBpZGVudGlmaWVyOiBzdHJpbmc7XG5cbiAgZ2V0IGNoaWxkRXhwcmVzc2lvbigpOiBRdGlFeHByZXNzaW9uPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLmZpcnN0RWxlbWVudENoaWxkIGFzIFF0aUV4cHJlc3Npb248c3RyaW5nPjtcbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBwcm9jZXNzKCk6IG51bWJlciB7XG4gICAgY29uc3QgaWRlbnRpZmllciA9IHRoaXMuZ2V0QXR0cmlidXRlKCdpZGVudGlmaWVyJyk7XG4gICAgY29uc3Qgb3V0Y29tZVZhcmlhYmxlID0gdGhpcy5jbG9zZXN0KCdxdGktYXNzZXNzbWVudC1pdGVtJykuZ2V0VmFyaWFibGUoaWRlbnRpZmllcikgYXMgT3V0Y29tZVZhcmlhYmxlO1xuICAgIGxldCB2YWx1ZTtcbiAgICBpZiAob3V0Y29tZVZhcmlhYmxlLmludGVycG9sYXRpb25UYWJsZSkge1xuICAgICAgdmFsdWUgPSBvdXRjb21lVmFyaWFibGUuaW50ZXJwb2xhdGlvblRhYmxlLmdldChwYXJzZUludCh0aGlzLmNoaWxkRXhwcmVzc2lvbi5jYWxjdWxhdGUoKSkpO1xuICAgIH1cbiAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc29sZS53YXJuKCdsb29rdXBPdXRjb21lVmFsdWU6IHZhbHVlIGlzIG51bGwgb3IgdW5kZWZpbmVkJyk7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KFxuICAgICAgbmV3IEN1c3RvbUV2ZW50PHsgb3V0Y29tZUlkZW50aWZpZXI6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB8IHN0cmluZ1tdIH0+KCdxdGktc2V0LW91dGNvbWUtdmFsdWUnLCB7XG4gICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgIGNvbXBvc2VkOiB0cnVlLFxuICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICBvdXRjb21lSWRlbnRpZmllcjogdGhpcy5pZGVudGlmaWVyLFxuICAgICAgICAgIHZhbHVlOiBjb252ZXJ0TnVtYmVyVG9Vbml2ZXJhbEZvcm1hdCh2YWx1ZSlcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxufVxuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdxdGktbG9va3VwLW91dGNvbWUtdmFsdWUnLCBRdGlMb29rdXBPdXRjb21lVmFsdWUpO1xuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktbG9va3VwLW91dGNvbWUtdmFsdWUnOiBRdGlMb29rdXBPdXRjb21lVmFsdWU7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBjdXN0b21FbGVtZW50IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgaHRtbCwgTGl0RWxlbWVudCB9IGZyb20gJ2xpdCc7XG5cbkBjdXN0b21FbGVtZW50KCdxdGktcnVsZScpXG5leHBvcnQgY2xhc3MgUXRpUnVsZSBleHRlbmRzIExpdEVsZW1lbnQgaW1wbGVtZW50cyBRdGlSdWxlQmFzZSB7XG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICByZXR1cm4gaHRtbGA8c2xvdD48L3Nsb3Q+YDtcbiAgfVxuXG4gIHB1YmxpYyBwcm9jZXNzKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignTm90IGltcGxlbWVudGVkJyk7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBRdGlSdWxlQmFzZSB7XG4gIHByb2Nlc3MoKTogYW55O1xufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktcnVsZSc6IFF0aVJ1bGU7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBodG1sIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IFF0aUV4cHJlc3Npb24gfSBmcm9tICcuLi8uLi9xdGktZXhwcmVzc2lvbi9xdGktZXhwcmVzc2lvbic7XG5pbXBvcnQgeyBRdGlSdWxlIH0gZnJvbSAnLi4vcXRpLXJ1bGUnO1xuXG5leHBvcnQgY2xhc3MgUXRpUmVzcG9uc2VDb25kaXRpb24gZXh0ZW5kcyBRdGlSdWxlIHtcbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYDxzbG90Pjwvc2xvdD5gO1xuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIHByb2Nlc3MoKSB7XG4gICAgY29uc3QgYnJhbmNoZXMgPSBbLi4udGhpcy5jaGlsZHJlbl0gYXMgUXRpRXhwcmVzc2lvbjxhbnk+W107XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJyYW5jaGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBicmFuY2ggPSBicmFuY2hlc1tpXTtcblxuICAgICAgaWYgKGJyYW5jaC5jYWxjdWxhdGUoKSkge1xuICAgICAgICAoYnJhbmNoIGFzIHVua25vd24gYXMgUXRpUnVsZSkucHJvY2VzcygpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdxdGktcmVzcG9uc2UtY29uZGl0aW9uJywgUXRpUmVzcG9uc2VDb25kaXRpb24pO1xuIiwgImltcG9ydCB7IGNvbnZlcnROdW1iZXJUb1VuaXZlcmFsRm9ybWF0IH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWwvdXRpbHMnO1xuaW1wb3J0IHsgUXRpRXhwcmVzc2lvbiwgUXRpRXhwcmVzc2lvbkJhc2UgfSBmcm9tICcuLi8uLi9xdGktZXhwcmVzc2lvbi9xdGktZXhwcmVzc2lvbic7XG5pbXBvcnQgeyBRdGlSdWxlLCBRdGlSdWxlQmFzZSB9IGZyb20gJy4uL3F0aS1ydWxlJztcblxuZXhwb3J0IGNsYXNzIFF0aVNldE91dGNvbWVWYWx1ZSBleHRlbmRzIFF0aVJ1bGUge1xuICBwdWJsaWMgb3ZlcnJpZGUgcHJvY2VzcygpIHtcbiAgICBjb25zdCBvdXRjb21lSWRlbnRpZmllciA9IHRoaXMuZ2V0QXR0cmlidXRlKCdpZGVudGlmaWVyJyk7XG5cbiAgICBjb25zdCBleHByZXNzaW9uID0gdGhpcy5maXJzdEVsZW1lbnRDaGlsZCBhcyBRdGlFeHByZXNzaW9uPHN0cmluZz47XG5cbiAgICBjb25zdCBydWxlID0gbmV3IFF0aVNldE91dGNvbWVWYWx1ZVJ1bGUoZXhwcmVzc2lvbik7XG4gICAgY29uc3QgdmFsdWUgPSBydWxlLnByb2Nlc3MoKTtcbiAgICB0aGlzLmRpc3BhdGNoRXZlbnQoXG4gICAgICBuZXcgQ3VzdG9tRXZlbnQ8eyBvdXRjb21lSWRlbnRpZmllcjogc3RyaW5nOyB2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10gfT4oJ3F0aS1zZXQtb3V0Y29tZS12YWx1ZScsIHtcbiAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgY29tcG9zZWQ6IHRydWUsXG4gICAgICAgIGRldGFpbDoge1xuICAgICAgICAgIG91dGNvbWVJZGVudGlmaWVyLFxuICAgICAgICAgIHZhbHVlOiBBcnJheS5pc0FycmF5KHZhbHVlKVxuICAgICAgICAgICAgPyB2YWx1ZS5tYXAoKHY6IHN0cmluZykgPT4gY29udmVydE51bWJlclRvVW5pdmVyYWxGb3JtYXQodikpXG4gICAgICAgICAgICA6IGNvbnZlcnROdW1iZXJUb1VuaXZlcmFsRm9ybWF0KHZhbHVlKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFF0aVNldE91dGNvbWVWYWx1ZVJ1bGU8VD4gaW1wbGVtZW50cyBRdGlSdWxlQmFzZSB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZXhwcmVzc2lvbjogUXRpRXhwcmVzc2lvbkJhc2U8VD4pIHt9XG5cbiAgcHJvY2VzcygpOiBhbnkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5leHByZXNzaW9uID8gdGhpcy5leHByZXNzaW9uLmNhbGN1bGF0ZSgpIDogbnVsbDtcblxuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ3NldE91dGNvbWVWYWx1ZTogdmFsdWUgaXMgbnVsbCBvciB1bmRlZmluZWQnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG59XG5cbmN1c3RvbUVsZW1lbnRzLmRlZmluZSgncXRpLXNldC1vdXRjb21lLXZhbHVlJywgUXRpU2V0T3V0Y29tZVZhbHVlKTtcbiIsICJpbXBvcnQgeyBMaXRFbGVtZW50LCBodG1sIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IFF0aVJ1bGUgfSBmcm9tICcuLi9xdGktcnVsZS9xdGktcnVsZSc7XG5cbmV4cG9ydCBjbGFzcyBRdGlSZXNwb25zZUVsc2UgZXh0ZW5kcyBMaXRFbGVtZW50IHtcbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYDxzbG90Pjwvc2xvdD5gO1xuICB9XG5cbiAgcHVibGljIGNhbGN1bGF0ZSgpIHtcbiAgICBjb25zdCByZXN1bHQgPSB0cnVlO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHVibGljIGdldFN1YlJ1bGVzKCk6IFF0aVJ1bGVbXSB7XG4gICAgcmV0dXJuIFsuLi50aGlzLmNoaWxkcmVuXSBhcyBRdGlSdWxlW107XG4gIH1cblxuICBwdWJsaWMgcHJvY2VzcygpIHtcbiAgICBjb25zdCBzdWJSdWxlcyA9IHRoaXMuZ2V0U3ViUnVsZXMoKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN1YlJ1bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBzdWJSdWxlID0gc3ViUnVsZXNbaV07XG4gICAgICBzdWJSdWxlLnByb2Nlc3MoKTtcbiAgICB9XG4gIH1cbn1cblxuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdxdGktcmVzcG9uc2UtZWxzZScsIFF0aVJlc3BvbnNlRWxzZSk7XG4iLCAiaW1wb3J0IHsgaHRtbCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBRdGlSZXNwb25zZUlmIH0gZnJvbSAnLi4vcXRpLXJlc3BvbnNlLWlmJztcblxuZXhwb3J0IGNsYXNzIFF0aVJlc3BvbnNlRWxzZUlmIGV4dGVuZHMgUXRpUmVzcG9uc2VJZiB7XG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICByZXR1cm4gaHRtbGAke3N1cGVyLnJlbmRlcigpfWA7XG4gIH1cbn1cblxuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdxdGktcmVzcG9uc2UtZWxzZS1pZicsIFF0aVJlc3BvbnNlRWxzZUlmKTtcbiIsICJpbXBvcnQgeyBRdGlFeHByZXNzaW9uIH0gZnJvbSAnLi4vLi4vcXRpLWV4cHJlc3Npb24vcXRpLWV4cHJlc3Npb24nO1xuaW1wb3J0IHsgUXRpUnVsZSB9IGZyb20gJy4uLy4uL3F0aS1ydWxlL3F0aS1ydWxlJztcbmltcG9ydCB7IFF0aVJlc3BvbnNlRWxzZSB9IGZyb20gJy4uL3F0aS1yZXNwb25zZS1lbHNlJztcblxuZXhwb3J0IGNsYXNzIFF0aVJlc3BvbnNlSWYgZXh0ZW5kcyBRdGlSZXNwb25zZUVsc2Uge1xuICBwdWJsaWMgb3ZlcnJpZGUgY2FsY3VsYXRlKCkge1xuICAgIGNvbnN0IGV4cHJlc3Npb24gPSB0aGlzLmZpcnN0RWxlbWVudENoaWxkIGFzIFF0aUV4cHJlc3Npb248Ym9vbGVhbj47XG4gICAgY29uc3QgcmVzdWx0ID0gZXhwcmVzc2lvbi5jYWxjdWxhdGUoKSBhcyBib29sZWFuO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgZ2V0U3ViUnVsZXMoKTogUXRpUnVsZVtdIHtcbiAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgIHJlc3VsdC5wdXNoKHRoaXMuY2hpbGRyZW5baV0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59XG5cbmN1c3RvbUVsZW1lbnRzLmRlZmluZSgncXRpLXJlc3BvbnNlLWlmJywgUXRpUmVzcG9uc2VJZik7XG4iLCAiaW1wb3J0IHsgTGl0RWxlbWVudCwgY3NzLCBodG1sIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IHN0YXRlIH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgUmVzcG9uc2VWYXJpYWJsZSwgVmFyaWFibGVEZWNsYXJhdGlvbiB9IGZyb20gJy4uLy4uL2ludGVybmFsL3ZhcmlhYmxlcyc7XG5pbXBvcnQgeyBRdGlBc3Nlc3NtZW50SXRlbSB9IGZyb20gJy4uLy4uL3F0aS1hc3Nlc3NtZW50LWl0ZW0vcXRpLWFzc2Vzc21lbnQtaXRlbSc7XG5pbXBvcnQgeyBRdGlNdWx0aXBsZSB9IGZyb20gJy4vcXRpLW11bHRpcGxlL3F0aS1tdWx0aXBsZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUXRpRXhwcmVzc2lvbkJhc2U8VD4ge1xuICAvLyBnZXQgYXNzZXNzbWVudEl0ZW0oKTogUXRpQXNzZXNzbWVudEl0ZW07XG5cbiAgLy8gZ2V0VmFyaWFibGVzKCk6IFZhcmlhYmxlRGVjbGFyYXRpb248bnVtYmVyIHwgc3RyaW5nIHwgKG51bWJlciB8IHN0cmluZylbXSB8IG51bGw+W107XG4gIGNhbGN1bGF0ZSgpOiBSZWFkb25seTxUPjtcbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFF0aUV4cHJlc3Npb248VD4gZXh0ZW5kcyBMaXRFbGVtZW50IGltcGxlbWVudHMgUXRpRXhwcmVzc2lvbkJhc2U8VD4ge1xuICBAc3RhdGUoKVxuICBwcm90ZWN0ZWQgcmVzdWx0OiBhbnk7XG5cbiAgLy8gaGlkZSB0aGUgc2xvdCB3aXRoIGNzc1xuICBzdGF0aWMgc3R5bGVzID0gY3NzYFxuICAgIHNsb3Qge1xuICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG4gIGA7XG5cbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYDxwcmU+JHtKU09OLnN0cmluZ2lmeSh0aGlzLnJlc3VsdCwgbnVsbCwgMil9PC9wcmU+XG4gICAgICA8c2xvdD48L3Nsb3Q+YDtcbiAgfVxuXG4gIHB1YmxpYyBjYWxjdWxhdGUoKTogUmVhZG9ubHk8VD4ge1xuICAgIHRoaXMucmVzdWx0ID0gdGhpcy5nZXRSZXN1bHQoKTtcbiAgICByZXR1cm4gdGhpcy5yZXN1bHQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0UmVzdWx0KCk6IFJlYWRvbmx5PFQ+IHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCcpO1xuICB9XG5cbiAgZ2V0IGFzc2Vzc21lbnRJdGVtKCk6IFF0aUFzc2Vzc21lbnRJdGVtIHtcbiAgICByZXR1cm4gdGhpcy5jbG9zZXN0KCdxdGktYXNzZXNzbWVudC1pdGVtJykgYXMgUXRpQXNzZXNzbWVudEl0ZW07XG4gIH1cblxuICBnZXRWYXJpYWJsZXMgPSAoKTogVmFyaWFibGVEZWNsYXJhdGlvbjxudW1iZXIgfCBzdHJpbmcgfCAobnVtYmVyIHwgc3RyaW5nKVtdIHwgbnVsbD5bXSA9PlxuICAgIC8vIEZJWE1FOiBpZiB0aGlzIGl0c2VsZiBpcyBtdWx0aXBsZSwgdGhpcyB3aWxsIG5ldmVyIGVudGVyIHRoZSBxdGktbXVsdGlwbGUgc3dpdGNoXG4gICAgLy8gU2VlIHRoaXMgZXhhbXBsZSBoZXJlOiBodHRwczovL2dpdGh1Yi5jb20vMUVkVGVjaC9xdGktZXhhbXBsZXMvYmxvYi9tYXN0ZXIvcXRpdjMtZXhhbXBsZXMvcGFja2FnaW5nL2l0ZW1zL0V4YW1wbGUwNS1mZWVkYmFja0Jsb2NrLWFkYXB0aXZlLnhtbFxuXG4gICAgQXJyYXkuZnJvbSh0aGlzLmNoaWxkcmVuKVxuICAgICAgLm1hcCgoZTogRWxlbWVudCkgPT4ge1xuICAgICAgICBzd2l0Y2ggKGUudGFnTmFtZS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgY2FzZSAncXRpLWJhc2UtdmFsdWUnOiB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBiYXNlVHlwZTogZS5nZXRBdHRyaWJ1dGUoJ2Jhc2UtdHlwZScpLFxuICAgICAgICAgICAgICB2YWx1ZTogZS50ZXh0Q29udGVudCxcbiAgICAgICAgICAgICAgY2FyZGluYWxpdHk6ICdzaW5nbGUnXG4gICAgICAgICAgICB9IGFzIFJlc3BvbnNlVmFyaWFibGU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgJ3F0aS12YXJpYWJsZSc6IHtcbiAgICAgICAgICAgIGNvbnN0IGlkZW50aWZpZXIgPSBlLmdldEF0dHJpYnV0ZSgnaWRlbnRpZmllcicpIHx8ICcnO1xuICAgICAgICAgICAgY29uc3QgdmFyaWFibGUgPSB0aGlzLmFzc2Vzc21lbnRJdGVtLmdldFZhcmlhYmxlKGlkZW50aWZpZXIpO1xuICAgICAgICAgICAgcmV0dXJuIHZhcmlhYmxlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlICdxdGktbXVsdGlwbGUnOiB7XG4gICAgICAgICAgICBjb25zdCBtdWx0aXBsZSA9IGUgYXMgUXRpTXVsdGlwbGU7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZXMgPSBtdWx0aXBsZS5nZXRSZXN1bHQoKTtcbiAgICAgICAgICAgIGlmICh2YWx1ZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGlkZW50aWZpZXI6ICcnLFxuICAgICAgICAgICAgICAgIGJhc2VUeXBlOiB2YWx1ZXNbMF0uYmFzZVR5cGUsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlcy5tYXAodiA9PiB2LnZhbHVlKSxcbiAgICAgICAgICAgICAgICBjYXJkaW5hbGl0eTogJ211bHRpcGxlJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAncmVzcG9uc2UnXG4gICAgICAgICAgICAgIH0gYXMgUmVzcG9uc2VWYXJpYWJsZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlICdxdGktY29ycmVjdCc6IHtcbiAgICAgICAgICAgIGNvbnN0IGlkZW50aWZpZXIgPSBlLmdldEF0dHJpYnV0ZSgnaWRlbnRpZmllcicpIHx8ICcnO1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2VWYXJpYWJsZSA9IHRoaXMuYXNzZXNzbWVudEl0ZW0uZ2V0UmVzcG9uc2UoaWRlbnRpZmllcik7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBiYXNlVHlwZTogcmVzcG9uc2VWYXJpYWJsZS5iYXNlVHlwZSxcbiAgICAgICAgICAgICAgdmFsdWU6IHJlc3BvbnNlVmFyaWFibGUuY29ycmVjdFJlc3BvbnNlLFxuICAgICAgICAgICAgICBjYXJkaW5hbGl0eTogcmVzcG9uc2VWYXJpYWJsZS5jYXJkaW5hbGl0eVxuICAgICAgICAgICAgfSBhcyBSZXNwb25zZVZhcmlhYmxlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAvLyBhZGRlZCBmb3IgdXNlIG9mIHF0aS1lcXVhbC1yb3VuZGVkXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBjb25zdCBleHByZXNzaW9uID0gZSBhcyBRdGlFeHByZXNzaW9uPG51bWJlcj47XG4gICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZXhwcmVzc2lvbi5nZXRSZXN1bHQoKTtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBiYXNlVHlwZTogJ2ludGVnZXInLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZS50b1N0cmluZygpLFxuICAgICAgICAgICAgICAgIGNhcmRpbmFsaXR5OiAnc2luZ2xlJ1xuICAgICAgICAgICAgICB9IGFzIFJlc3BvbnNlVmFyaWFibGU7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ2RlZmF1bHQgbm90IHN1ZmZpY2llbnQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIC5maWx0ZXIodiA9PiB2ICE9PSBudWxsKTtcbn1cbiIsICJpbXBvcnQgeyBRdGlFeHByZXNzaW9uIH0gZnJvbSAnLi9xdGktZXhwcmVzc2lvbic7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBRdGlDb25kaXRpb25FeHByZXNzaW9uIGV4dGVuZHMgUXRpRXhwcmVzc2lvbjxib29sZWFuPiB7XG4gIHB1YmxpYyBjYWxjdWxhdGUoKTogUmVhZG9ubHk8Ym9vbGVhbj4ge1xuICAgIHRoaXMucmVzdWx0ID0gdGhpcy5nZXRSZXN1bHQoKTtcbiAgICByZXR1cm4gdGhpcy5yZXN1bHQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0UmVzdWx0KCk6IFJlYWRvbmx5PGJvb2xlYW4+IHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCcpO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgUXRpQ29uZGl0aW9uRXhwcmVzc2lvbiB9IGZyb20gJy4uL3F0aS1jb25kaXRpb24tZXhwcmVzc2lvbic7XG5pbXBvcnQgeyBRdGlFeHByZXNzaW9uIH0gZnJvbSAnLi4vcXRpLWV4cHJlc3Npb24nO1xuXG50eXBlIENvbnN0cnVjdG9yPFQ+ID0gbmV3ICguLi5hcmdzOiBhbnlbXSkgPT4gVDtcbmV4cG9ydCBjbGFzcyBRdGlBbmQgZXh0ZW5kcyBxdGlBbmRNaXhpbihRdGlDb25kaXRpb25FeHByZXNzaW9uIGFzIHVua25vd24gYXMgQ29uc3RydWN0b3I8UXRpQ29uZGl0aW9uRXhwcmVzc2lvbj4pIHtcbiAgcHVibGljIGNhbGN1bGF0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5jYWxjdWxhdGVDaGlsZHJlbihBcnJheS5mcm9tKHRoaXMuY2hpbGRyZW4gYXMgdW5rbm93biBhcyBRdGlFeHByZXNzaW9uPGFueT5bXSkpO1xuICB9XG59XG5cbmV4cG9ydCB0eXBlIE1vY2tRdGlFeHByZXNzaW9uPFQ+ID0geyBjYWxjdWxhdGU6ICgpID0+IFQgfTtcbnR5cGUgTW9ja0NvbnN0cnVjdG9yID0gbmV3ICguLi5hcmdzOiBhbnlbXSkgPT4ge307XG5leHBvcnQgZnVuY3Rpb24gcXRpQW5kTWl4aW48VEJhc2UgZXh0ZW5kcyBNb2NrQ29uc3RydWN0b3I+KEJhc2U6IFRCYXNlKSB7XG4gIHJldHVybiBjbGFzcyBNb2NrUXRpQW5kIGV4dGVuZHMgQmFzZSB7XG4gICAgcHVibGljIGNhbGN1bGF0ZUNoaWxkcmVuKGNoaWxkcmVuOiBBcnJheTxNb2NrUXRpRXhwcmVzc2lvbjxhbnk+Pikge1xuICAgICAgLy8gY2hpbGRyZW4gY2FuIGJlIGEgbWl4IG9mIHF0aS1leHByZXNzaW9uIGFuZCBxdGktY29uZGl0aW9uLWV4cHJlc3Npb25cbiAgICAgIGNvbnN0IHZhbHVlcyA9IGNoaWxkcmVuLm1hcChjID0+IHtcbiAgICAgICAgY29uc3QgY29uZGl0aW9uID0gYyBhcyBNb2NrUXRpRXhwcmVzc2lvbjxhbnk+O1xuICAgICAgICBpZiAoIWNvbmRpdGlvbi5jYWxjdWxhdGUpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFwiRWxlbWVudCBkb2Vzbid0IGltcGxlbWVudCBRdGlDb25kaXRpb25FeHByZXNzaW9uXCIpO1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGxldCB2YWx1ZSA9IGNvbmRpdGlvbi5jYWxjdWxhdGUoKSBhcyBCb29sZWFuO1xuICAgICAgICAvLyBjb252ZXJ0IHN0cmluZyB2YWx1ZSB0byBib29sZWFuIGFuZCByZXR1cm4gbnVsbCBpZiBub3QgcG9zc2libGVcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICBpZiAodmFsdWUgPT09ICd0cnVlJykge1xuICAgICAgICAgICAgdmFsdWUgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT09ICdmYWxzZScpIHtcbiAgICAgICAgICAgIHZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ3VuZXhwZWN0ZWQgdmFsdWUgaW4gcXRpLWFuZCwgZXhwZWN0ZWQgYm9vbGVhbicpO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHZhbHVlcy5ldmVyeShlID0+IHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBlID09PSAnYm9vbGVhbicgJiYgZTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcbn1cbiIsICJpbXBvcnQgeyBRdGlBbmQgfSBmcm9tICcuL3F0aS1hbmQnO1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdxdGktYW5kJywgUXRpQW5kKTtcblxuZXhwb3J0ICogZnJvbSAnLi9xdGktYW5kJztcblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLWFuZCc6IFF0aUFuZDtcbiAgfVxufVxuIiwgImltcG9ydCB7IHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgQmFzZVR5cGUgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbC9leHByZXNzaW9uLXJlc3VsdCc7XG5pbXBvcnQgeyBRdGlFeHByZXNzaW9uIH0gZnJvbSAnLi4vcXRpLWV4cHJlc3Npb24nO1xuZXhwb3J0IGNsYXNzIFF0aUJhc2VWYWx1ZSBleHRlbmRzIFF0aUV4cHJlc3Npb248c3RyaW5nPiB7XG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZywgYXR0cmlidXRlOiAnYmFzZS10eXBlJyB9KSBiYXNlVHlwZTogQmFzZVR5cGUgPSAnc3RyaW5nJztcblxuICBwdWJsaWMgb3ZlcnJpZGUgZ2V0UmVzdWx0KCk6IHN0cmluZyB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLnRleHRDb250ZW50O1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxufVxuXG5jdXN0b21FbGVtZW50cy5kZWZpbmUoJ3F0aS1iYXNlLXZhbHVlJywgUXRpQmFzZVZhbHVlKTtcbiIsICJpbXBvcnQgeyBSZXNwb25zZVZhcmlhYmxlIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWwvdmFyaWFibGVzJztcbmltcG9ydCB7IFF0aUNvbmRpdGlvbkV4cHJlc3Npb24gfSBmcm9tICcuLi9xdGktY29uZGl0aW9uLWV4cHJlc3Npb24nO1xuXG4vLyBQSzogRm9yIHRoZSBjb250YWlucyB3ZSBhc3N1bWUgdGhlIGV4cHJlc3Npb25zIHRvIGNhbGN1bGF0ZSBhcmUgYWxsIGRpcmVjdGVkUGFpcnNcbi8vIEkgZG9uJ3Qga25vdyBpdCB0aGlzIGluIFFUSSBpcyBhbHdheXMgdGhlIGNhc2UgaG93ZXZlcj9cbmV4cG9ydCBjbGFzcyBRdGlDb250YWlucyBleHRlbmRzIFF0aUNvbmRpdGlvbkV4cHJlc3Npb24ge1xuICBwdWJsaWMgb3ZlcnJpZGUgZ2V0UmVzdWx0KCkge1xuICAgIC8vIFRPRE86IGltcGxlbWVudCB0aGlzIGZvciBvdGhlciB0eXBlcyB0aGFuIGRpcmVjdGVkUGFpclxuICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMuZ2V0VmFyaWFibGVzKCkgYXMgUmVzcG9uc2VWYXJpYWJsZVtdO1xuICAgIGlmICh0aGlzLmNoaWxkcmVuLmxlbmd0aCA9PT0gMikge1xuICAgICAgY29uc3QgdmFsdWUxID0gdmFsdWVzWzBdO1xuICAgICAgY29uc3QgdmFsdWUyID0gdmFsdWVzWzFdO1xuICAgICAgaWYgKFxuICAgICAgICB2YWx1ZTEuYmFzZVR5cGUgPT09ICdkaXJlY3RlZFBhaXInICYmXG4gICAgICAgIHZhbHVlMi5iYXNlVHlwZSA9PT0gJ2RpcmVjdGVkUGFpcicgJiZcbiAgICAgICAgdmFsdWUxLmNhcmRpbmFsaXR5ID09PSAnbXVsdGlwbGUnXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgcHJvamVjdGlvbjEgPSB2YWx1ZTEudmFsdWUgYXMgc3RyaW5nW107XG4gICAgICAgIGNvbnN0IHByb2plY3Rpb24yID0gdmFsdWUyLnZhbHVlIGFzIHN0cmluZ1tdO1xuICAgICAgICBjb25zdCBlbnVtZXJhYmxlID0gcHJvamVjdGlvbjEuZmlsdGVyKHggPT4gcHJvamVjdGlvbjIuaW5jbHVkZXMoeCkpO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGVudW1lcmFibGUubGVuZ3RoID4gMDtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIHZhbHVlMS5iYXNlVHlwZSA9PT0gJ2RpcmVjdGVkUGFpcicgJiZcbiAgICAgICAgdmFsdWUyLmJhc2VUeXBlID09PSAnZGlyZWN0ZWRQYWlyJyAmJlxuICAgICAgICB2YWx1ZTEuY2FyZGluYWxpdHkgPT09ICdzaW5nbGUnXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgcHJvamVjdGlvbjEgPSB2YWx1ZTEudmFsdWUgYXMgc3RyaW5nO1xuICAgICAgICBjb25zdCBwcm9qZWN0aW9uMiA9IHZhbHVlMi52YWx1ZSBhcyBzdHJpbmdbXTtcbiAgICAgICAgcmV0dXJuIHByb2plY3Rpb24yLmluY2x1ZGVzKHByb2plY3Rpb24xKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgJ3Vuc3VwcG9ydGVkIGJhc2VUeXBlIG9yIGNhcmRpbmFsaXR5IGluIHF0aSBjb250YWlucywgb25seSBiYXNlVHlwZTogZGlyZWN0ZWRQYWlyIGFuZCBjYXJkaW5hbGl0eTogbXVsdGlwbGUgaXMgc3VwcG9ydGVkJ1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmVycm9yKCd1bmV4cGVjdGVkIG51bWJlciBvZiBjaGlsZHJlbiBpbiBxdGkgY29udGFpbnMnKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmN1c3RvbUVsZW1lbnRzLmRlZmluZSgncXRpLWNvbnRhaW5zJywgUXRpQ29udGFpbnMpO1xuIiwgImltcG9ydCB7IFF0aUFzc2Vzc21lbnRJdGVtIH0gZnJvbSAnLi4vLi4vLi4vcXRpLWFzc2Vzc21lbnQtaXRlbS9xdGktYXNzZXNzbWVudC1pdGVtJztcbmltcG9ydCB7IFF0aUV4cHJlc3Npb24gfSBmcm9tICcuLi9xdGktZXhwcmVzc2lvbic7XG5cbmV4cG9ydCBjbGFzcyBRdGlDb3JyZWN0IGV4dGVuZHMgUXRpRXhwcmVzc2lvbjxzdHJpbmcgfCBzdHJpbmdbXT4ge1xuICBnZXQgaW50ZXJwcmV0YXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0QXR0cmlidXRlKCdpbnRlcnByZXRhdGlvbicpIHx8ICcnO1xuICB9XG5cbiAgb3ZlcnJpZGUgZ2V0UmVzdWx0KCkge1xuICAgIGNvbnN0IGlkZW50aWZpZXIgPSB0aGlzLmdldEF0dHJpYnV0ZSgnaWRlbnRpZmllcicpIHx8ICcnO1xuICAgIGNvbnN0IHJlc3BvbnNlVmFyaWFibGUgPSAodGhpcy5jbG9zZXN0KCdxdGktYXNzZXNzbWVudC1pdGVtJykgYXMgUXRpQXNzZXNzbWVudEl0ZW0pLmdldFJlc3BvbnNlKGlkZW50aWZpZXIpO1xuICAgIHJlc3BvbnNlVmFyaWFibGUuY29ycmVjdFJlc3BvbnNlO1xuICAgIGlmIChyZXNwb25zZVZhcmlhYmxlLmNhcmRpbmFsaXR5ICE9PSAnc2luZ2xlJykge1xuICAgICAgcmV0dXJuIHJlc3BvbnNlVmFyaWFibGUuY29ycmVjdFJlc3BvbnNlLmxlbmd0aCA+IDAgPyByZXNwb25zZVZhcmlhYmxlLmNvcnJlY3RSZXNwb25zZVswXSA6ICcnO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gcmVzcG9uc2VWYXJpYWJsZS5jb3JyZWN0UmVzcG9uc2U7XG4gICAgfVxuICB9XG59XG5cbmN1c3RvbUVsZW1lbnRzLmRlZmluZSgncXRpLWNvcnJlY3QnLCBRdGlDb3JyZWN0KTtcbiIsICJpbXBvcnQgeyBwcm9wZXJ0eSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IFJlc3BvbnNlVmFyaWFibGUgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbC92YXJpYWJsZXMnO1xuaW1wb3J0IHsgUXRpRXhwcmVzc2lvbiB9IGZyb20gJy4uL3F0aS1leHByZXNzaW9uJztcblxuZXhwb3J0IGNsYXNzIFF0aUVxdWFsUm91bmRlZCBleHRlbmRzIFF0aUV4cHJlc3Npb248Ym9vbGVhbj4ge1xuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcgfSkgcm91bmRpbmdNb2RlOiAnZGVjaW1hbFBsYWNlcycgfCAnc2lnbmlmaWNhbnRGaWd1cmVzJyA9ICdzaWduaWZpY2FudEZpZ3VyZXMnO1xuXG4gIGdldCBmaWd1cmVzKCkge1xuICAgIGNvbnN0IGF0dHIgPSB0aGlzLmdldEF0dHJpYnV0ZSgnZmlndXJlcycpO1xuICAgIGlmICghYXR0cikge1xuICAgICAgY29uc29sZS5lcnJvcignZmlndXJlcyBhdHRyaWJ1dGUgaXMgbWlzc2luZycpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IGZpZ3VyZXMgPSBwYXJzZUludCh0aGlzLmdldEF0dHJpYnV0ZSgnZmlndXJlcycpIHx8ICcwJyk7XG4gICAgaWYgKGlzTmFOKGZpZ3VyZXMpKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdmaWd1cmVzIGF0dHJpYnV0ZSBpcyBub3QgYSBudW1iZXInKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBpZiAoZmlndXJlcyA8IDApIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ2ZpZ3VyZXMgYXR0cmlidXRlIGlzIG5lZ2F0aXZlJyk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgaWYgKGZpZ3VyZXMgPCAxICYmIHRoaXMucm91bmRpbmdNb2RlID09PSAnc2lnbmlmaWNhbnRGaWd1cmVzJykge1xuICAgICAgY29uc29sZS5lcnJvcignZmlndXJlcyBjYW5ub3QgYmUgc21hbGxlciB0aGFuIDEgZm9yIFJvdW5kaW5nTW9kZSBzaWduaWZpY2FudEZpZ3VyZXMnKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gZmlndXJlcztcbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBnZXRSZXN1bHQoKSB7XG4gICAgaWYgKHRoaXMuY2hpbGRyZW4ubGVuZ3RoID09PSAyKSB7XG4gICAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLmdldFZhcmlhYmxlcygpIGFzIFJlc3BvbnNlVmFyaWFibGVbXTtcbiAgICAgIGNvbnN0IHZhbHVlMSA9IHZhbHVlc1swXTtcbiAgICAgIGNvbnN0IHZhbHVlMiA9IHZhbHVlc1sxXTtcbiAgICAgIGlmICh0aGlzLnJvdW5kaW5nTW9kZSA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgdmFsdWUxLmNhcmRpbmFsaXR5ICE9PSAnc2luZ2xlJyB8fFxuICAgICAgICB2YWx1ZTIuY2FyZGluYWxpdHkgIT09ICdzaW5nbGUnIHx8XG4gICAgICAgIEFycmF5LmlzQXJyYXkodmFsdWUxLnZhbHVlKSB8fFxuICAgICAgICBBcnJheS5pc0FycmF5KHZhbHVlMi52YWx1ZSlcbiAgICAgICkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCd1bmV4cGVjdGVkIGNhcmRpbmFsaXR5IGluIHF0aSBlcXVhbCcpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBzd2l0Y2ggKHZhbHVlc1swXS5iYXNlVHlwZSkge1xuICAgICAgICBjYXNlICdpbnRlZ2VyJzpcbiAgICAgICAgY2FzZSAnZmxvYXQnOiB7XG4gICAgICAgICAgY29uc3QgZmxvYXQxID0gcGFyc2VGbG9hdCh2YWx1ZTEudmFsdWUgYXMgc3RyaW5nKTtcbiAgICAgICAgICBjb25zdCBmbG9hdDIgPSBwYXJzZUZsb2F0KHZhbHVlMi52YWx1ZSBhcyBzdHJpbmcpO1xuXG4gICAgICAgICAgaWYgKCFpc05hTihmbG9hdDEpICYmICFpc05hTihmbG9hdDIpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5yb3VuZGluZ01vZGUgPT09ICdzaWduaWZpY2FudEZpZ3VyZXMnKSB7XG4gICAgICAgICAgICAgIHJldHVybiBmbG9hdDEudG9QcmVjaXNpb24odGhpcy5maWd1cmVzKSA9PT0gZmxvYXQyLnRvUHJlY2lzaW9uKHRoaXMuZmlndXJlcyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIE1hdGgucm91bmQoZmxvYXQxICogTWF0aC5wb3coMTAsIHRoaXMuZmlndXJlcykpIC8gTWF0aC5wb3coMTAsIHRoaXMuZmlndXJlcykgPT09XG4gICAgICAgICAgICAgICAgTWF0aC5yb3VuZChmbG9hdDIgKiBNYXRoLnBvdygxMCwgdGhpcy5maWd1cmVzKSkgLyBNYXRoLnBvdygxMCwgdGhpcy5maWd1cmVzKVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGB2YWx1ZSBjYW5ub3QgYmUgY2FzdGVkIHRvIG51bWVyaWMgdmFsdWUgaW4gZXF1YWxSb3VuZGVkIG9wZXJhdG9yOiAke2Zsb2F0MX0sICR7ZmxvYXQyfWApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihgdmFsdWVzIG90aGVyIHRoYW4gZmxvYXQgYW5kIGludCBjYW5ub3QgYmUgdXNlZCBpbiBlcXVhbFJvdW5kZWQgb3BlcmF0b3IuYCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc29sZS5lcnJvcigndW5leHBlY3RlZCBudW1iZXIgb2YgY2hpbGRyZW4gaW4gcXRpLWVxdWFsLXJvdW5kZWQnKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5jdXN0b21FbGVtZW50cy5kZWZpbmUoJ3F0aS1lcXVhbC1yb3VuZGVkJywgUXRpRXF1YWxSb3VuZGVkKTtcbiIsICJpbXBvcnQgeyBwcm9wZXJ0eSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IFJlc3BvbnNlVmFyaWFibGUgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbC92YXJpYWJsZXMnO1xuaW1wb3J0IHsgU2NvcmluZ0hlbHBlciB9IGZyb20gJy4uLy4uL3V0aWxpdGllcy9zY29yaW5nLWhlbHBlcic7XG5pbXBvcnQgeyBRdGlFeHByZXNzaW9uIH0gZnJvbSAnLi4vcXRpLWV4cHJlc3Npb24nO1xuXG5leHBvcnQgY2xhc3MgUXRpRXF1YWwgZXh0ZW5kcyBRdGlFeHByZXNzaW9uPGJvb2xlYW4+IHtcbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nIH0pIHRvbGVyYW5jZU1vZGU6ICdleGFjdCcgfCAncmVsYXRpdmUnIHwgJ2Fic29sdXRlJyA9ICdleGFjdCc7XG5cbiAgcHVibGljIG92ZXJyaWRlIGdldFJlc3VsdCgpIHtcbiAgICBpZiAodGhpcy5jaGlsZHJlbi5sZW5ndGggPT09IDIpIHtcbiAgICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMuZ2V0VmFyaWFibGVzKCkgYXMgUmVzcG9uc2VWYXJpYWJsZVtdO1xuICAgICAgY29uc3QgdmFsdWUxID0gdmFsdWVzWzBdO1xuICAgICAgY29uc3QgdmFsdWUyID0gdmFsdWVzWzFdO1xuICAgICAgaWYgKHRoaXMudG9sZXJhbmNlTW9kZSAhPT0gJ2V4YWN0Jykge1xuICAgICAgICBjb25zb2xlLmVycm9yKCd0b2xlcmFuY2VNb2RlIGlzIG5vdCBzdXBwb3J0ZWQgeWV0Jyk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgdmFsdWUxLmNhcmRpbmFsaXR5ICE9PSAnc2luZ2xlJyB8fFxuICAgICAgICB2YWx1ZTIuY2FyZGluYWxpdHkgIT09ICdzaW5nbGUnIHx8XG4gICAgICAgIEFycmF5LmlzQXJyYXkodmFsdWUxLnZhbHVlKSB8fFxuICAgICAgICBBcnJheS5pc0FycmF5KHZhbHVlMi52YWx1ZSlcbiAgICAgICkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCd1bmV4cGVjdGVkIGNhcmRpbmFsaXR5IGluIHF0aSBlcXVhbCcpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gU2NvcmluZ0hlbHBlci5jb21wYXJlU2luZ2xlVmFsdWVzKHZhbHVlMS52YWx1ZSBhcyBzdHJpbmcsIHZhbHVlMi52YWx1ZSBhcyBzdHJpbmcsIHZhbHVlMS5iYXNlVHlwZSk7XG4gICAgfVxuICAgIGNvbnNvbGUuZXJyb3IoJ3VuZXhwZWN0ZWQgbnVtYmVyIG9mIGNoaWxkcmVuIGluIHF0aS1lcXVhbCcpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmN1c3RvbUVsZW1lbnRzLmRlZmluZSgncXRpLWVxdWFsJywgUXRpRXF1YWwpO1xuIiwgImltcG9ydCB7IEJhc2VUeXBlIH0gZnJvbSAnLi4vLi4nO1xuXG5leHBvcnQgY2xhc3MgU2NvcmluZ0hlbHBlciB7XG4gIHB1YmxpYyBzdGF0aWMgY29tcGFyZVNpbmdsZVZhbHVlcyh2YWx1ZTE6IFJlYWRvbmx5PHN0cmluZz4sIHZhbHVlMjogUmVhZG9ubHk8c3RyaW5nPiwgYmFzZVR5cGU6IEJhc2VUeXBlKTogYm9vbGVhbiB7XG4gICAgc3dpdGNoIChiYXNlVHlwZSkge1xuICAgICAgY2FzZSAnaWRlbnRpZmllcic6XG4gICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICByZXR1cm4gdmFsdWUxID09PSB2YWx1ZTI7XG4gICAgICBjYXNlICdpbnRlZ2VyJzoge1xuICAgICAgICBjb25zdCBpbnQxID0gcGFyc2VJbnQodmFsdWUxLCAxMCk7XG4gICAgICAgIGNvbnN0IGludDIgPSBwYXJzZUludCh2YWx1ZTIsIDEwKTtcbiAgICAgICAgaWYgKCFpc05hTihpbnQxKSAmJiAhaXNOYU4oaW50MikpIHtcbiAgICAgICAgICByZXR1cm4gaW50MSA9PT0gaW50MjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGBDYW5ub3QgY29udmVydCAke3ZhbHVlMX0gYW5kL29yICR7dmFsdWUyfSB0byBpbnQuYCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdmbG9hdCc6IHtcbiAgICAgICAgY29uc3QgZmxvYXQxID0gcGFyc2VGbG9hdCh2YWx1ZTEpO1xuICAgICAgICBjb25zdCBmbG9hdDIgPSBwYXJzZUZsb2F0KHZhbHVlMik7XG4gICAgICAgIGlmICghaXNOYU4oZmxvYXQxKSAmJiAhaXNOYU4oZmxvYXQyKSkge1xuICAgICAgICAgIHJldHVybiBmbG9hdDEgPT09IGZsb2F0MjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGBjb3VsZG4ndCBjb252ZXJ0ICR7dmFsdWUxfSBhbmQvb3IgJHt2YWx1ZTJ9IHRvIGZsb2F0LmApO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAncGFpcic6XG4gICAgICBjYXNlICdkaXJlY3RlZFBhaXInOiB7XG4gICAgICAgIGNvbnN0IHBhaXIxID0gdmFsdWUxLnNwbGl0KCcgJykuc29ydCgpO1xuICAgICAgICBjb25zdCBwYWlyMiA9IHZhbHVlMi5zcGxpdCgnICcpLnNvcnQoKTtcbiAgICAgICAgaWYgKHBhaXIxLmxlbmd0aCA9PT0gMiAmJiBwYWlyMi5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICBpZiAoYmFzZVR5cGUgPT09ICdwYWlyJykge1xuICAgICAgICAgICAgcGFpcjEuc29ydCgpO1xuICAgICAgICAgICAgcGFpcjIuc29ydCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcGFpcjEuam9pbignICcpID09PSBwYWlyMi5qb2luKCcgJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihgY29tcGFyZWQgdHdvIHBhaXIgYnV0IG9uZSBvZiB0aGUgdmFsdWVzIGRvZXMgbm90IGhhdmUgMiB2YWx1ZXM6IDE6ICR7dmFsdWUxfSAyOiAke3ZhbHVlMn1gKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBSZXNwb25zZVZhcmlhYmxlIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWwvdmFyaWFibGVzJztcbmltcG9ydCB7IFF0aUV4cHJlc3Npb24gfSBmcm9tICcuLi9xdGktZXhwcmVzc2lvbic7XG5cbmV4cG9ydCBjbGFzcyBRdGlHdCBleHRlbmRzIFF0aUV4cHJlc3Npb248Ym9vbGVhbj4ge1xuICBwdWJsaWMgb3ZlcnJpZGUgZ2V0UmVzdWx0KCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmNoaWxkcmVuLmxlbmd0aCA9PT0gMikge1xuICAgICAgY29uc3QgdmFsdWVzID0gdGhpcy5nZXRWYXJpYWJsZXMoKSBhcyBSZXNwb25zZVZhcmlhYmxlW107XG4gICAgICBjb25zdCB2YWx1ZTEgPSB2YWx1ZXNbMF07XG4gICAgICBjb25zdCB2YWx1ZTIgPSB2YWx1ZXNbMV07XG4gICAgICBpZiAodmFsdWUxLmJhc2VUeXBlID09PSB2YWx1ZTIuYmFzZVR5cGUgJiYgKHZhbHVlMS5iYXNlVHlwZSA9PT0gJ2ludGVnZXInIHx8IHZhbHVlMS5iYXNlVHlwZSA9PT0gJ2Zsb2F0JykpIHtcbiAgICAgICAgcmV0dXJuICt2YWx1ZTEudmFsdWUgPiArdmFsdWUyLnZhbHVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5lcnJvcigndW5leHBlY3RlZCBiYXNlVHlwZSBvciBjYXJkaW5hbGl0eSBpbiBxdGkgZ3QnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc29sZS5lcnJvcigndW5leHBlY3RlZCBudW1iZXIgb2YgY2hpbGRyZW4gaW4gcXQnKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5jdXN0b21FbGVtZW50cy5kZWZpbmUoJ3F0aS1ndCcsIFF0aUd0KTtcbiIsICJpbXBvcnQgeyBSZXNwb25zZVZhcmlhYmxlIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWwvdmFyaWFibGVzJztcbmltcG9ydCB7IFF0aUNvbmRpdGlvbkV4cHJlc3Npb24gfSBmcm9tICcuLi9xdGktY29uZGl0aW9uLWV4cHJlc3Npb24nO1xuXG4vLyBQSzogRm9yIHRoZSBjb250YWlucyB3ZSBhc3N1bWUgdGhlIGV4cHJlc3Npb25zIHRvIGNhbGN1bGF0ZSBhcmUgYWxsIGRpcmVjdGVkUGFpcnNcbi8vIEkgZG9uJ3Qga25vdyBpdCB0aGlzIGluIFFUSSBpcyBhbHdheXMgdGhlIGNhc2UgaG93ZXZlcj9cbmV4cG9ydCBjbGFzcyBRdGlHdGUgZXh0ZW5kcyBRdGlDb25kaXRpb25FeHByZXNzaW9uIHtcbiAgcHVibGljIG92ZXJyaWRlIGdldFJlc3VsdCgpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5jaGlsZHJlbi5sZW5ndGggPT09IDIpIHtcbiAgICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMuZ2V0VmFyaWFibGVzKCkgYXMgUmVzcG9uc2VWYXJpYWJsZVtdO1xuICAgICAgY29uc3QgdmFsdWUxID0gdmFsdWVzWzBdO1xuICAgICAgY29uc3QgdmFsdWUyID0gdmFsdWVzWzFdO1xuICAgICAgaWYgKHZhbHVlMS5iYXNlVHlwZSA9PT0gdmFsdWUyLmJhc2VUeXBlICYmICh2YWx1ZTEuYmFzZVR5cGUgPT09ICdpbnRlZ2VyJyB8fCB2YWx1ZTEuYmFzZVR5cGUgPT09ICdmbG9hdCcpKSB7XG4gICAgICAgIHJldHVybiArdmFsdWUxLnZhbHVlID49ICt2YWx1ZTIudmFsdWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmVycm9yKCd1bmV4cGVjdGVkIGJhc2VUeXBlIG9yIGNhcmRpbmFsaXR5IGluIHF0aSBndGUnKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnNvbGUubG9nKCd1bmV4cGVjdGVkIG51bWJlciBvZiBjaGlsZHJlbiBpbiBxdGUnKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5jdXN0b21FbGVtZW50cy5kZWZpbmUoJ3F0aS1ndGUnLCBRdGlHdGUpO1xuIiwgImltcG9ydCB7IFJlc3BvbnNlVmFyaWFibGUgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbC92YXJpYWJsZXMnO1xuaW1wb3J0IHsgUXRpRXhwcmVzc2lvbiB9IGZyb20gJy4uL3F0aS1leHByZXNzaW9uJztcblxuLy8gUEs6IEZvciB0aGUgY29udGFpbnMgd2UgYXNzdW1lIHRoZSBleHByZXNzaW9ucyB0byBjYWxjdWxhdGUgYXJlIGFsbCBkaXJlY3RlZFBhaXJzXG4vLyBJIGRvbid0IGtub3cgaXQgdGhpcyBpbiBRVEkgaXMgYWx3YXlzIHRoZSBjYXNlIGhvd2V2ZXI/XG5leHBvcnQgY2xhc3MgUXRpSXNOdWxsIGV4dGVuZHMgUXRpRXhwcmVzc2lvbjxib29sZWFuPiB7XG4gIHB1YmxpYyBvdmVycmlkZSBnZXRSZXN1bHQoKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuY2hpbGRyZW4ubGVuZ3RoID09PSAxKSB7XG4gICAgICBjb25zdCB2YXJpYWJsZXMgPSB0aGlzLmdldFZhcmlhYmxlcygpIGFzIFJlc3BvbnNlVmFyaWFibGVbXTtcbiAgICAgIGlmICghdmFyaWFibGVzKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgdmFsdWUgPSB2YXJpYWJsZXNbMF0udmFsdWU7XG4gICAgICByZXR1cm4gdmFsdWUgPT0gbnVsbCB8fCB2YWx1ZSA9PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09ICcnO1xuICAgIH1cbiAgICBjb25zb2xlLmVycm9yKCd1bmV4cGVjdGVkIG51bWJlciBvZiBjaGlsZHJlbiBpbiBxdGkgTnVsbCcpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmN1c3RvbUVsZW1lbnRzLmRlZmluZSgncXRpLWlzLW51bGwnLCBRdGlJc051bGwpO1xuIiwgImltcG9ydCB7IFJlc3BvbnNlVmFyaWFibGUgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbC92YXJpYWJsZXMnO1xuaW1wb3J0IHsgUXRpRXhwcmVzc2lvbiB9IGZyb20gJy4uL3F0aS1leHByZXNzaW9uJztcblxuZXhwb3J0IGNsYXNzIFF0aUx0IGV4dGVuZHMgUXRpRXhwcmVzc2lvbjxib29sZWFuPiB7XG4gIHB1YmxpYyBvdmVycmlkZSBnZXRSZXN1bHQoKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuY2hpbGRyZW4ubGVuZ3RoID09PSAyKSB7XG4gICAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLmdldFZhcmlhYmxlcygpIGFzIFJlc3BvbnNlVmFyaWFibGVbXTtcbiAgICAgIGNvbnN0IHZhbHVlMSA9IHZhbHVlc1swXTtcbiAgICAgIGNvbnN0IHZhbHVlMiA9IHZhbHVlc1sxXTtcbiAgICAgIGlmICh2YWx1ZTEuYmFzZVR5cGUgPT09IHZhbHVlMi5iYXNlVHlwZSAmJiAodmFsdWUxLmJhc2VUeXBlID09PSAnaW50ZWdlcicgfHwgdmFsdWUxLmJhc2VUeXBlID09PSAnZmxvYXQnKSkge1xuICAgICAgICByZXR1cm4gK3ZhbHVlMS52YWx1ZSA8ICt2YWx1ZTIudmFsdWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmVycm9yKCd1bmV4cGVjdGVkIGJhc2VUeXBlIG9yIGNhcmRpbmFsaXR5IGluIHF0aSBsdCcpO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zb2xlLmVycm9yKCd1bmV4cGVjdGVkIG51bWJlciBvZiBjaGlsZHJlbiBpbiBsdCcpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmN1c3RvbUVsZW1lbnRzLmRlZmluZSgncXRpLWx0JywgUXRpTHQpO1xuIiwgImltcG9ydCB7IFJlc3BvbnNlVmFyaWFibGUgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbC92YXJpYWJsZXMnO1xuaW1wb3J0IHsgUXRpQ29uZGl0aW9uRXhwcmVzc2lvbiB9IGZyb20gJy4uL3F0aS1jb25kaXRpb24tZXhwcmVzc2lvbic7XG5cbi8vIFBLOiBGb3IgdGhlIGNvbnRhaW5zIHdlIGFzc3VtZSB0aGUgZXhwcmVzc2lvbnMgdG8gY2FsY3VsYXRlIGFyZSBhbGwgZGlyZWN0ZWRQYWlyc1xuLy8gSSBkb24ndCBrbm93IGl0IHRoaXMgaW4gUVRJIGlzIGFsd2F5cyB0aGUgY2FzZSBob3dldmVyP1xuZXhwb3J0IGNsYXNzIFF0aUx0ZSBleHRlbmRzIFF0aUNvbmRpdGlvbkV4cHJlc3Npb24ge1xuICBwdWJsaWMgb3ZlcnJpZGUgZ2V0UmVzdWx0KCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmNoaWxkcmVuLmxlbmd0aCA9PT0gMikge1xuICAgICAgY29uc3QgdmFsdWVzID0gdGhpcy5nZXRWYXJpYWJsZXMoKSBhcyBSZXNwb25zZVZhcmlhYmxlW107XG4gICAgICBjb25zdCB2YWx1ZTEgPSB2YWx1ZXNbMF07XG4gICAgICBjb25zdCB2YWx1ZTIgPSB2YWx1ZXNbMV07XG4gICAgICBpZiAodmFsdWUxLmJhc2VUeXBlID09PSB2YWx1ZTIuYmFzZVR5cGUgJiYgKHZhbHVlMS5iYXNlVHlwZSA9PT0gJ2ludGVnZXInIHx8IHZhbHVlMS5iYXNlVHlwZSA9PT0gJ2Zsb2F0JykpIHtcbiAgICAgICAgcmV0dXJuICt2YWx1ZTEudmFsdWUgPD0gK3ZhbHVlMi52YWx1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ3VuZXhwZWN0ZWQgYmFzZVR5cGUgb3IgY2FyZGluYWxpdHkgaW4gcXRpIGx0ZScpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc29sZS5sb2coJ3VuZXhwZWN0ZWQgbnVtYmVyIG9mIGNoaWxkcmVuIGluIGx0ZScpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmN1c3RvbUVsZW1lbnRzLmRlZmluZSgncXRpLWx0ZScsIFF0aUx0ZSk7XG4iLCAiaW1wb3J0IHsgcHJvcGVydHkgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBTY29yaW5nSGVscGVyIH0gZnJvbSAnLi4vLi4vdXRpbGl0aWVzL3Njb3JpbmctaGVscGVyJztcbmltcG9ydCB7IFF0aUV4cHJlc3Npb24gfSBmcm9tICcuLi9xdGktZXhwcmVzc2lvbic7XG5cbmV4cG9ydCBjbGFzcyBRdGlNYXBSZXNwb25zZSBleHRlbmRzIFF0aUV4cHJlc3Npb248bnVtYmVyPiB7XG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZyB9KSBpZGVudGlmaWVyOiBzdHJpbmc7XG5cbiAgcHVibGljIG92ZXJyaWRlIGdldFJlc3VsdCgpOiBudW1iZXIge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gdGhpcy5hc3Nlc3NtZW50SXRlbS5nZXRSZXNwb25zZSh0aGlzLmlkZW50aWZpZXIpO1xuICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgIGNvbnNvbGUud2FybihgUmVzcG9uc2UgJHt0aGlzLmlkZW50aWZpZXJ9IGNhbiBub3QgYmUgZm91bmRgKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBtYXBwaW5nID0gcmVzcG9uc2UubWFwcGluZztcbiAgICBjb25zdCBjYW5kaWRhdGVSZXNwb25zZXMgPSAhQXJyYXkuaXNBcnJheShyZXNwb25zZS52YWx1ZSkgPyBbcmVzcG9uc2UudmFsdWVdIDogcmVzcG9uc2UudmFsdWU7XG4gICAgbGV0IHJlc3VsdCA9IDA7XG4gICAgZm9yIChjb25zdCBjYW5kaWRhdGVSZXNwb25zZSBvZiBjYW5kaWRhdGVSZXNwb25zZXMpIHtcbiAgICAgIGNvbnN0IG1hcHBlZFZhbHVlID0gbWFwcGluZy5tYXBFbnRyaWVzLmZpbmQoZW50cnkgPT4ge1xuICAgICAgICByZXR1cm4gU2NvcmluZ0hlbHBlci5jb21wYXJlU2luZ2xlVmFsdWVzKGVudHJ5Lm1hcEtleSwgY2FuZGlkYXRlUmVzcG9uc2UsIHJlc3BvbnNlLmJhc2VUeXBlKTtcbiAgICAgIH0pO1xuICAgICAgaWYgKCEobWFwcGVkVmFsdWUgPT0gbnVsbCB8fCBtYXBwZWRWYWx1ZS5tYXBwZWRWYWx1ZSA9PSB1bmRlZmluZWQpKSB7XG4gICAgICAgIHJlc3VsdCArPSBtYXBwZWRWYWx1ZS5tYXBwZWRWYWx1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdCArPSBtYXBwaW5nLmRlZmF1bHRWYWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKG1hcHBpbmcubG93ZXJCb3VuZCAhPSBudWxsKSB7XG4gICAgICByZXN1bHQgPSBNYXRoLm1heChtYXBwaW5nLmxvd2VyQm91bmQsIHJlc3VsdCk7XG4gICAgfVxuICAgIGlmIChtYXBwaW5nLnVwcGVyQm91bmQgIT0gbnVsbCkge1xuICAgICAgcmVzdWx0ID0gTWF0aC5taW4obWFwcGluZy51cHBlckJvdW5kLCByZXN1bHQpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59XG5cbmN1c3RvbUVsZW1lbnRzLmRlZmluZSgncXRpLW1hcC1yZXNwb25zZScsIFF0aU1hcFJlc3BvbnNlKTtcbiIsICJpbXBvcnQgeyBwcm9wZXJ0eSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IExpdEVsZW1lbnQgfSBmcm9tICdsaXQnO1xuXG5leHBvcnQgY2xhc3MgUXRpTWFwcGluZyBleHRlbmRzIExpdEVsZW1lbnQge1xuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdkZWZhdWx0LXZhbHVlJywgdHlwZTogTnVtYmVyIH0pIGRlZmF1bHRWYWx1ZTogbnVtYmVyID0gMDtcbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAnbG93ZXItYm91bmQnLCB0eXBlOiBOdW1iZXIgfSkgbG93ZXJCb3VuZDogbnVtYmVyO1xuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICd1cHBlci1ib3VuZCcsIHR5cGU6IE51bWJlciB9KSB1cHBlckJvdW5kOiBudW1iZXI7XG5cbiAgcHVibGljIGdldCBtYXBFbnRyaWVzKCkge1xuICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMucXVlcnlTZWxlY3RvckFsbCgncXRpLW1hcC1lbnRyeScpKS5tYXAoZWwgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbWFwS2V5OiBlbC5nZXRBdHRyaWJ1dGUoJ21hcC1rZXknKSxcbiAgICAgICAgbWFwcGVkVmFsdWU6ICtlbC5nZXRBdHRyaWJ1dGUoJ21hcHBlZC12YWx1ZScpXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG59XG5cbmN1c3RvbUVsZW1lbnRzLmRlZmluZSgncXRpLW1hcHBpbmcnLCBRdGlNYXBwaW5nKTtcbiIsICJpbXBvcnQgeyBSZXNwb25zZVZhcmlhYmxlIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWwvdmFyaWFibGVzJztcbmltcG9ydCB7IFNjb3JpbmdIZWxwZXIgfSBmcm9tICcuLi8uLi91dGlsaXRpZXMvc2NvcmluZy1oZWxwZXInO1xuaW1wb3J0IHsgUXRpRXhwcmVzc2lvbiB9IGZyb20gJy4uL3F0aS1leHByZXNzaW9uJztcblxuZXhwb3J0IGNsYXNzIFF0aU1hdGNoIGV4dGVuZHMgUXRpRXhwcmVzc2lvbjxib29sZWFuPiB7XG4gIC8vUEsgOiBGSVhNRS5cbiAgLy8gVGhpcyB3YXMgYSBsaXR0bGUgZXhwZXJpbWVudCBpZiB3ZSBjb3VsZCBjYWxsIHRoZSBtYXRjaCBmdW5jdGlvbiBhcyBhIHN0YXRpYyBmdW5jdGlvbixcbiAgLy8gVGhpcyBjYW4gYmUgdXNlZCBmb3IgYWxsIGtpbmQgb2YgdGhpbmdzLCBidXQgbm93IGVzcGVjaWFsbHkgZm9yIHVzZSBpblxuICAvLyBxdGktcmVzcG9uc2UtY29uZGl0aW9uLXNjcmlwdFxuICAvLyBpbiB3aGljaCB3ZSBwYXNzIHRoZSBleHByZXNzaW9ucyBhcyBwdXJlIGZ1bmN0aW9ucywgYW5kIGhvcGUgZm9yIHRoZSBiZXN0LlxuICAvLyBTQURMWSwgdGhlIGdldFZhcmlhYmxlcyB0aHJvd3Mgcm9ldCBpbiBkZSBldGVuLi4gd2VldCBub2cgbmlldCBwcmVjaWVzIGhvZSBkZXplIHdlcmt0LlxuICAvLyBNYWFyIGlrIGdhIGVyaW4gZHVpa2VuLlxuICBwdWJsaWMgb3ZlcnJpZGUgZ2V0UmVzdWx0KCkge1xuICAgIGlmICh0aGlzLmNoaWxkcmVuLmxlbmd0aCA9PT0gMikge1xuICAgICAgY29uc3QgdmFsdWVzID0gdGhpcy5nZXRWYXJpYWJsZXMoKSBhcyBSZXNwb25zZVZhcmlhYmxlW107XG4gICAgICBjb25zdCB2YWx1ZVRvTWFwID0gdmFsdWVzWzBdO1xuICAgICAgY29uc3QgY29ycmVjdFZhbHVlSW5mbyA9IHZhbHVlc1sxXTtcbiAgICAgIHJldHVybiBRdGlNYXRjaC5tYXRjaCh2YWx1ZVRvTWFwLCBjb3JyZWN0VmFsdWVJbmZvKTtcbiAgICB9XG5cbiAgICBjb25zb2xlLmVycm9yKCd1bmV4cGVjdGVkIG51bWJlciBvZiBjaGlsZHJlbiBpbiBtYXRjaCcpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBtYXRjaCh2YWx1ZVRvTWFwOiBSZXNwb25zZVZhcmlhYmxlLCBjb3JyZWN0VmFsdWVJbmZvOiBSZXNwb25zZVZhcmlhYmxlKSB7XG4gICAgc3dpdGNoIChjb3JyZWN0VmFsdWVJbmZvLmNhcmRpbmFsaXR5KSB7XG4gICAgICBjYXNlICdzaW5nbGUnOiB7XG4gICAgICAgIGlmICh2YWx1ZVRvTWFwLnZhbHVlID09PSBudWxsKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlVG9NYXAudmFsdWUpIHx8IEFycmF5LmlzQXJyYXkoY29ycmVjdFZhbHVlSW5mby52YWx1ZSkpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCd1bmV4cGVjdGVkIGNhcmRpbmFsaXR5IGluIHF0aSBtYXRjaCcpO1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gU2NvcmluZ0hlbHBlci5jb21wYXJlU2luZ2xlVmFsdWVzKFxuICAgICAgICAgIHZhbHVlVG9NYXAudmFsdWU/LnRvU3RyaW5nKCksXG4gICAgICAgICAgY29ycmVjdFZhbHVlSW5mby52YWx1ZS50b1N0cmluZygpLFxuICAgICAgICAgIGNvcnJlY3RWYWx1ZUluZm8uYmFzZVR5cGVcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgY2FzZSAnb3JkZXJlZCc6IHtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlVG9NYXAudmFsdWUpIHx8ICFBcnJheS5pc0FycmF5KGNvcnJlY3RWYWx1ZUluZm8udmFsdWUpKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcigndW5leHBlY3RlZCBjYXJkaW5hbGl0eSBpbiBxdGkgbWF0Y2gnKTtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbHVlVG9NYXAudmFsdWUubGVuZ3RoICE9PSBjb3JyZWN0VmFsdWVJbmZvLnZhbHVlLmxlbmd0aCkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbHVlVG9NYXAudmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBTY29yaW5nSGVscGVyLmNvbXBhcmVTaW5nbGVWYWx1ZXMoXG4gICAgICAgICAgICBjb3JyZWN0VmFsdWVJbmZvLnZhbHVlW2ldLFxuICAgICAgICAgICAgdmFsdWVUb01hcC52YWx1ZVtpXSxcbiAgICAgICAgICAgIGNvcnJlY3RWYWx1ZUluZm8uYmFzZVR5cGVcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmICghcmVzdWx0KSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjYXNlICdtdWx0aXBsZSc6IHtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlVG9NYXAudmFsdWUpIHx8ICFBcnJheS5pc0FycmF5KGNvcnJlY3RWYWx1ZUluZm8udmFsdWUpKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcigndW5leHBlY3RlZCBjYXJkaW5hbGl0eSBpbiBxdGkgbWF0Y2gnKTtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbHVlVG9NYXAudmFsdWUubGVuZ3RoICE9PSBjb3JyZWN0VmFsdWVJbmZvLnZhbHVlLmxlbmd0aCkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgYW5zd2VySW5kZXggPSAwO1xuICAgICAgICBmb3IgKGNvbnN0IGNvcnJlY3RBbnN3ZXIgb2YgY29ycmVjdFZhbHVlSW5mby52YWx1ZSkge1xuICAgICAgICAgIGxldCBtYXRjaGluZ1ZhbHVlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgICAgICAgICBjb25zdCBhcnIgPSBbLi4udmFsdWVUb01hcC52YWx1ZV07XG4gICAgICAgICAgZm9yIChjb25zdCBtdiBvZiBhcnIpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IFNjb3JpbmdIZWxwZXIuY29tcGFyZVNpbmdsZVZhbHVlcyhjb3JyZWN0QW5zd2VyLCBtdiwgY29ycmVjdFZhbHVlSW5mby5iYXNlVHlwZSk7XG4gICAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgIG1hdGNoaW5nVmFsdWUgPSBtdjtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChtYXRjaGluZ1ZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAoYXJyIGFzIHN0cmluZ1tdKS5zcGxpY2UoYXJyLmluZGV4T2YobWF0Y2hpbmdWYWx1ZSksIDEpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIGFuc3dlckluZGV4Kys7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ3VuZXhwZWN0ZWQgY2FyZGluYWxpdHkgaW4gcXRpIG1hdGNoJyk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbn1cblxuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdxdGktbWF0Y2gnLCBRdGlNYXRjaCk7XG4iLCAiaW1wb3J0IHsgUmVzcG9uc2VWYXJpYWJsZSB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFsL3ZhcmlhYmxlcyc7XG5pbXBvcnQgeyBRdGlFeHByZXNzaW9uIH0gZnJvbSAnLi4vcXRpLWV4cHJlc3Npb24nO1xuXG5leHBvcnQgY2xhc3MgUXRpTWVtYmVyIGV4dGVuZHMgUXRpRXhwcmVzc2lvbjxib29sZWFuIHwgbnVsbD4ge1xuICBwdWJsaWMgb3ZlcnJpZGUgZ2V0UmVzdWx0KCkge1xuICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMuZ2V0VmFyaWFibGVzKCkgYXMgUmVzcG9uc2VWYXJpYWJsZVtdO1xuXG4gICAgaWYgKCEodGhpcy5jaGlsZHJlbi5sZW5ndGggPT09IDIpKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1RoZSBtZW1iZXIgb3BlcmF0b3IgdGFrZXMgdHdvIHN1Yi1leHByZXNzaW9ucycpO1xuICAgIH1cblxuICAgIGNvbnN0IFt2YWx1ZTEsIHZhbHVlMl0gPSB2YWx1ZXM7XG5cbiAgICBpZiAoISh2YWx1ZTEuYmFzZVR5cGUgPT09IHZhbHVlMi5iYXNlVHlwZSkpIHtcbiAgICAgIGNvbnNvbGUud2FybignV2hpY2ggbXVzdCBib3RoIGhhdmUgdGhlIHNhbWUgYmFzZS10eXBlJyk7XG4gICAgfVxuICAgIGlmICghKHZhbHVlMi5jYXJkaW5hbGl0eSA9PT0gJ211bHRpcGxlJyB8fCB2YWx1ZTIuY2FyZGluYWxpdHkgPT09ICdvcmRlcmVkJykpIHtcbiAgICAgIGNvbnNvbGUud2FybignYW5kIHRoZSBzZWNvbmQgbXVzdCBiZSBhIG11bHRpcGxlIG9yIG9yZGVyZWQgY29udGFpbmVyJyk7XG4gICAgfVxuICAgIGlmICh2YWx1ZTEuYmFzZVR5cGUgPT09ICdmbG9hdCcgfHwgdmFsdWUyLmJhc2VUeXBlID09PSAnZmxvYXQnKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1RoZSBtZW1iZXIgb3BlcmF0b3Igc2hvdWxkIG5vdCBiZSB1c2VkIG9uIHN1Yi1leHByZXNzaW9ucyB3aXRoIGEgYmFzZS10eXBlIG9mIGZsb2F0Jyk7XG4gICAgfVxuICAgIGlmICh2YWx1ZTEuYmFzZVR5cGUgPT09ICdkdXJhdGlvbicgfHwgdmFsdWUyLmJhc2VUeXBlID09PSAnZHVyYXRpb24nKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ0l0IG11c3Qgbm90IGJlIHVzZWQgb24gc3ViLWV4cHJlc3Npb25zIHdpdGggYSBiYXNlLXR5cGUgb2YgZHVyYXRpb24nKTtcbiAgICB9XG5cbiAgICAvLyBJZiBlaXRoZXIgc3ViLWV4cHJlc3Npb24gaXMgTlVMTCB0aGVuIHRoZSByZXN1bHQgb2YgdGhlIG9wZXJhdG9yIGlzIE5VTExcbiAgICBpZiAodmFsdWUxLnZhbHVlID09PSBudWxsIHx8IHZhbHVlMi52YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8gVGhlIHJlc3VsdCBpcyBhIHNpbmdsZSBib29sZWFuIHdpdGggYSB2YWx1ZSBvZiAndHJ1ZScgaWYgdGhlIHZhbHVlIGdpdmVuIGJ5IHRoZSBmaXJzdCBzdWItZXhwcmVzc2lvbiBpcyBpbiB0aGUgY29udGFpbmVyIGRlZmluZWQgYnkgdGhlIHNlY29uZCBzdWItZXhwcmVzc2lvbi5cbiAgICBjb25zdCBwcm9qZWN0aW9uMSA9IHZhbHVlMS52YWx1ZSBhcyBzdHJpbmc7XG4gICAgY29uc3QgcHJvamVjdGlvbjIgPSB2YWx1ZTIudmFsdWUgYXMgc3RyaW5nW107XG4gICAgcmV0dXJuIHByb2plY3Rpb24yLmluY2x1ZGVzKHByb2plY3Rpb24xKTtcbiAgfVxufVxuXG5jdXN0b21FbGVtZW50cy5kZWZpbmUoJ3F0aS1tZW1iZXInLCBRdGlNZW1iZXIpO1xuIiwgImltcG9ydCB7IFJlc3BvbnNlVmFyaWFibGUsIFZhcmlhYmxlRGVjbGFyYXRpb24gfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbC92YXJpYWJsZXMnO1xuaW1wb3J0IHsgUXRpRXhwcmVzc2lvbiB9IGZyb20gJy4uL3F0aS1leHByZXNzaW9uJztcbmV4cG9ydCBjbGFzcyBRdGlNdWx0aXBsZSBleHRlbmRzIFF0aUV4cHJlc3Npb248VmFyaWFibGVEZWNsYXJhdGlvbjxzdHJpbmcgfCBzdHJpbmdbXT5bXT4ge1xuICBwdWJsaWMgb3ZlcnJpZGUgZ2V0UmVzdWx0KCk6IFJlc3BvbnNlVmFyaWFibGVbXSB7XG4gICAgY29uc3QgdmFyaWFibGVzID0gdGhpcy5nZXRWYXJpYWJsZXMoKSBhcyBSZXNwb25zZVZhcmlhYmxlW107XG4gICAgaWYgKHZhcmlhYmxlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ3VuZXhwZWN0ZWQgbnVtYmVyIG9mIGNoaWxkcmVuIGluIHF0aSBtdWx0aXBsZScpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGZvciAoY29uc3QgdmFyaWFibGUgb2YgdmFyaWFibGVzKSB7XG4gICAgICBpZiAodmFyaWFibGUuY2FyZGluYWxpdHkgIT09ICdtdWx0aXBsZScgJiYgdmFyaWFibGUuY2FyZGluYWxpdHkgIT09ICdzaW5nbGUnKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ3VuZXhwZWN0ZWQgY2FyZGluYWxpdHkgaW4gcXRpIG11bHRpcGxlJyk7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBjb25zdCB2YWx1ZXMgPSB2YXJpYWJsZXMubWFwKHYgPT4gdi52YWx1ZSk7XG4gICAgLy8gY29uc29sZS5sb2codmFyaWFibGVzKTtcbiAgICAvLyBjb25zdCBmbGF0dGVuZWRBcnJheSA9IHZhbHVlcy5yZWR1Y2UoKGFjYzogc3RyaW5nW10sIHZhbHVlOiBzdHJpbmcgfCBzdHJpbmdbXSkgPT4ge1xuICAgIC8vICAgcmV0dXJuIGFjYy5jb25jYXQoQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyBbLi4udmFsdWVdIDogdmFsdWUpO1xuICAgIC8vIH0sIFtdKTtcbiAgICAvLyByZXR1cm4gZmxhdHRlbmVkQXJyYXk7XG5cbiAgICByZXR1cm4gdmFyaWFibGVzO1xuICB9XG59XG5cbmN1c3RvbUVsZW1lbnRzLmRlZmluZSgncXRpLW11bHRpcGxlJywgUXRpTXVsdGlwbGUpO1xuIiwgImltcG9ydCB7IGh0bWwgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgUXRpRXhwcmVzc2lvbiB9IGZyb20gJy4uL3F0aS1leHByZXNzaW9uJztcblxuZXhwb3J0IGNsYXNzIFF0aU5vdCBleHRlbmRzIFF0aUV4cHJlc3Npb248Ym9vbGVhbj4ge1xuICBvdmVycmlkZSByZW5kZXIoKSB7XG4gICAgcmV0dXJuIGh0bWxgJHtzdXBlci5yZW5kZXIoKX1gO1xuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIGdldFJlc3VsdCgpIHtcbiAgICBjb25zdCBleHByZXNzaW9uID0gdGhpcy5maXJzdEVsZW1lbnRDaGlsZCBhcyBRdGlFeHByZXNzaW9uPGJvb2xlYW4+O1xuICAgIGNvbnN0IHJlc3VsdCA9IGV4cHJlc3Npb24uY2FsY3VsYXRlKCkgYXMgYm9vbGVhbjtcbiAgICByZXR1cm4gIXJlc3VsdDtcbiAgfVxufVxuXG5jdXN0b21FbGVtZW50cy5kZWZpbmUoJ3F0aS1ub3QnLCBRdGlOb3QpO1xuIiwgImltcG9ydCB7IFF0aUNvbmRpdGlvbkV4cHJlc3Npb24gfSBmcm9tICcuLi9xdGktY29uZGl0aW9uLWV4cHJlc3Npb24nO1xuaW1wb3J0IHsgUXRpRXhwcmVzc2lvbiB9IGZyb20gJy4uL3F0aS1leHByZXNzaW9uJztcblxuZXhwb3J0IGNsYXNzIFF0aU9yIGV4dGVuZHMgUXRpQ29uZGl0aW9uRXhwcmVzc2lvbiB7XG4gIHB1YmxpYyBvdmVycmlkZSBnZXRSZXN1bHQoKSB7XG4gICAgLy8gY2hpbGRyZW4gY2FuIGJlIGEgbWl4IG9mIHF0aS1leHByZXNzaW9uIGFuZCBxdGktY29uZGl0aW9uLWV4cHJlc3Npb25cbiAgICBjb25zdCB2YWx1ZXMgPSBBcnJheS5mcm9tKHRoaXMuY2hpbGRyZW4pLm1hcChjID0+IHtcbiAgICAgIGNvbnN0IGNvbmRpdGlvbiA9IGMgYXMgUXRpRXhwcmVzc2lvbjxhbnk+O1xuICAgICAgaWYgKCFjb25kaXRpb24uY2FsY3VsYXRlKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJFbGVtZW50IGRvZXNuJ3QgaW1wbGVtZW50IFF0aUNvbmRpdGlvbkV4cHJlc3Npb25cIik7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgbGV0IHZhbHVlID0gY29uZGl0aW9uLmNhbGN1bGF0ZSgpIGFzIEJvb2xlYW47XG4gICAgICAvLyBjb252ZXJ0IHN0cmluZyB2YWx1ZSB0byBib29sZWFuIGFuZCByZXR1cm4gbnVsbCBpZiBub3QgcG9zc2libGVcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gJ3RydWUnKSB7XG4gICAgICAgICAgdmFsdWUgPSB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKHZhbHVlID09PSAnZmFsc2UnKSB7XG4gICAgICAgICAgdmFsdWUgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCd1bmV4cGVjdGVkIHZhbHVlIGluIHF0aS1vciwgZXhwZWN0ZWQgYm9vbGVhbicpO1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfSk7XG4gICAgcmV0dXJuIHZhbHVlcy5zb21lKGUgPT4ge1xuICAgICAgcmV0dXJuIHR5cGVvZiBlID09PSAnYm9vbGVhbicgJiYgZTtcbiAgICB9KTtcbiAgfVxufVxuXG5jdXN0b21FbGVtZW50cy5kZWZpbmUoJ3F0aS1vcicsIFF0aU9yKTtcbiIsICJpbXBvcnQgeyBSZXNwb25zZVZhcmlhYmxlIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWwvdmFyaWFibGVzJztcbmltcG9ydCB7IFF0aUV4cHJlc3Npb24gfSBmcm9tICcuLi9xdGktZXhwcmVzc2lvbic7XG5leHBvcnQgY2xhc3MgUXRpT3JkZXJlZCBleHRlbmRzIFF0aUV4cHJlc3Npb248UmVzcG9uc2VWYXJpYWJsZVtdPiB7XG4gIHB1YmxpYyBvdmVycmlkZSBnZXRSZXN1bHQoKTogUmVzcG9uc2VWYXJpYWJsZVtdIHtcbiAgICBjb25zdCB2YXJpYWJsZXMgPSB0aGlzLmdldFZhcmlhYmxlcygpIGFzIFJlc3BvbnNlVmFyaWFibGVbXTtcbiAgICBpZiAodmFyaWFibGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgY29uc29sZS5lcnJvcigndW5leHBlY3RlZCBudW1iZXIgb2YgY2hpbGRyZW4gaW4gcXRpIG11bHRpcGxlJyk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZm9yIChjb25zdCB2YXJpYWJsZSBvZiB2YXJpYWJsZXMpIHtcbiAgICAgIGlmICh2YXJpYWJsZS5jYXJkaW5hbGl0eSAhPT0gJ29yZGVyZWQnICYmIHZhcmlhYmxlLmNhcmRpbmFsaXR5ICE9PSAnc2luZ2xlJykge1xuICAgICAgICBjb25zb2xlLmVycm9yKCd1bmV4cGVjdGVkIGNhcmRpbmFsaXR5IGluIHF0aSBvcmRlcmVkJyk7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHZhcmlhYmxlcztcbiAgfVxufVxuXG5jdXN0b21FbGVtZW50cy5kZWZpbmUoJ3F0aS1vcmRlcmVkJywgUXRpT3JkZXJlZCk7XG4iLCAiaW1wb3J0IHsgY29uc3VtZSB9IGZyb20gJ0BsaXQvY29udGV4dCc7XG5pbXBvcnQgeyBMaXRFbGVtZW50LCBodG1sIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IHByb3BlcnR5LCBzdGF0ZSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IEl0ZW1Db250ZXh0LCBpdGVtQ29udGV4dCB9IGZyb20gJ3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWFzc2Vzc21lbnQtaXRlbS9xdGktYXNzZXNzbWVudC1pdGVtLmNvbnRleHQnO1xuaW1wb3J0IHsgUXRpQXNzZXNzbWVudEl0ZW0gfSBmcm9tICcuLi8uLi8uLi9xdGktYXNzZXNzbWVudC1pdGVtL3F0aS1hc3Nlc3NtZW50LWl0ZW0nO1xuXG5leHBvcnQgY2xhc3MgUXRQcmludGVkVmFyaWFibGUgZXh0ZW5kcyBMaXRFbGVtZW50IHtcbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nIH0pXG4gIGlkZW50aWZpZXI6IHN0cmluZztcblxuICBAY29uc3VtZSh7IGNvbnRleHQ6IGl0ZW1Db250ZXh0LCBzdWJzY3JpYmU6IHRydWUgfSlcbiAgQHN0YXRlKClcbiAgcHVibGljIGl0ZW1Db250ZXh0PzogSXRlbUNvbnRleHQ7XG5cbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5pdGVtQ29udGV4dD8udmFyaWFibGVzLmZpbmQodiA9PiB2LmlkZW50aWZpZXIgPT09IHRoaXMuaWRlbnRpZmllcik/LnZhbHVlO1xuICAgIHJldHVybiBodG1sYCR7SlNPTi5zdHJpbmdpZnkodmFsdWUsIG51bGwsIDIpfWA7XG4gIH1cblxuICAvLyBjb25zdHJ1Y3RvcigpIHtcbiAgLy8gICBzdXBlcigpO1xuICAvLyAgIGNvbnN0IGFzc2Vzc21lbnRJdGVtID0gdGhpcy5jbG9zZXN0KCdxdGktYXNzZXNzbWVudC1pdGVtJykgYXMgUXRpQXNzZXNzbWVudEl0ZW07XG4gIC8vICAgYXNzZXNzbWVudEl0ZW0uYWRkRXZlbnRMaXN0ZW5lcigncXRpLXJlc3BvbnNlLXByb2Nlc3NlZCcsICgpID0+IHtcbiAgLy8gICAgIHRoaXMudmFsdWUgPSB0aGlzLmNhbGN1bGF0ZSgpIGFzIHN0cmluZztcbiAgLy8gICB9KTtcbiAgLy8gfVxuXG4gIC8vIHB1YmxpYyBjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgLy8gICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuICAvLyAgIHRoaXMudmFsdWUgPSB0aGlzLmNhbGN1bGF0ZSgpIGFzIHN0cmluZztcbiAgLy8gfVxuXG4gIHB1YmxpYyBjYWxjdWxhdGUoKTogUmVhZG9ubHk8c3RyaW5nIHwgc3RyaW5nW10+IHtcbiAgICBjb25zdCBhc3Nlc3NtZW50SXRlbSA9IHRoaXMuY2xvc2VzdCgncXRpLWFzc2Vzc21lbnQtaXRlbScpIGFzIFF0aUFzc2Vzc21lbnRJdGVtO1xuICAgIGNvbnN0IGlkZW50aWZpZXIgPSB0aGlzLmlkZW50aWZpZXI7XG4gICAgY29uc3QgcmVzdWx0ID0gYXNzZXNzbWVudEl0ZW0uZ2V0VmFyaWFibGUoaWRlbnRpZmllcikudmFsdWU7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufVxuXG5jdXN0b21FbGVtZW50cy5kZWZpbmUoJ3F0aS1wcmludGVkLXZhcmlhYmxlJywgUXRQcmludGVkVmFyaWFibGUpO1xuIiwgImltcG9ydCB7IFJlc3BvbnNlVmFyaWFibGUgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbC92YXJpYWJsZXMnO1xuaW1wb3J0IHsgUXRpRXhwcmVzc2lvbiB9IGZyb20gJy4uL3F0aS1leHByZXNzaW9uJztcblxuZXhwb3J0IGNsYXNzIFF0aVByb2R1Y3QgZXh0ZW5kcyBRdGlFeHByZXNzaW9uPG51bWJlcj4ge1xuICBwdWJsaWMgb3ZlcnJpZGUgZ2V0UmVzdWx0KCkge1xuICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMuZ2V0VmFyaWFibGVzKCkgYXMgUmVzcG9uc2VWYXJpYWJsZVtdO1xuICAgIGNvbnN0IHByb2R1Y3QgPSB2YWx1ZXMucmVkdWNlKChhY2N1bXVsYXRvciwgY3VycmVudFZhbHVlKSA9PiB7XG4gICAgICBpZiAoY3VycmVudFZhbHVlLmJhc2VUeXBlID09ICdmbG9hdCcgfHwgY3VycmVudFZhbHVlLmJhc2VUeXBlID09ICdpbnRlZ2VyJykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiBhY2N1bXVsYXRvciAqIHBhcnNlSW50KGN1cnJlbnRWYWx1ZS52YWx1ZS50b1N0cmluZygpKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oYGNhbiBub3QgY29udmVydCB0byBudW1iZXJgKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS53YXJuKGBoYXMgYW5vdGhlciBiYXNlVHlwZSAke2N1cnJlbnRWYWx1ZS5iYXNlVHlwZX1gKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2N1bXVsYXRvcjtcbiAgICB9LCAxKTtcbiAgICByZXR1cm4gcHJvZHVjdDtcbiAgfVxufVxuXG5jdXN0b21FbGVtZW50cy5kZWZpbmUoJ3F0aS1wcm9kdWN0JywgUXRpUHJvZHVjdCk7XG4iLCAiaW1wb3J0IHsgcHJvcGVydHkgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBSZXNwb25zZVZhcmlhYmxlIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWwvdmFyaWFibGVzJztcbmltcG9ydCB7IFNjb3JpbmdIZWxwZXIgfSBmcm9tICcuLi8uLi91dGlsaXRpZXMvc2NvcmluZy1oZWxwZXInO1xuaW1wb3J0IHsgUXRpRXhwcmVzc2lvbiB9IGZyb20gJy4uL3F0aS1leHByZXNzaW9uJztcblxuZXhwb3J0IGNsYXNzIFF0aVN0cmluZ01hdGNoIGV4dGVuZHMgUXRpRXhwcmVzc2lvbjxib29sZWFuPiB7XG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZywgYXR0cmlidXRlOiAnY2FzZS1zZW5zaXRpdmUnIH0pIGNhc2VTZW5zaXRpdmUgPSAndHJ1ZSc7XG5cbiAgcHVibGljIG92ZXJyaWRlIGdldFJlc3VsdCgpIHtcbiAgICBpZiAodGhpcy5jaGlsZHJlbi5sZW5ndGggPT09IDIpIHtcbiAgICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMuZ2V0VmFyaWFibGVzKCkgYXMgUmVzcG9uc2VWYXJpYWJsZVtdO1xuICAgICAgY29uc3QgdmFsdWUxID0gdmFsdWVzWzBdO1xuICAgICAgY29uc3QgdmFsdWUyID0gdmFsdWVzWzFdO1xuICAgICAgaWYgKFxuICAgICAgICB2YWx1ZTEuY2FyZGluYWxpdHkgIT09ICdzaW5nbGUnIHx8XG4gICAgICAgIHZhbHVlMi5jYXJkaW5hbGl0eSAhPT0gJ3NpbmdsZScgfHxcbiAgICAgICAgQXJyYXkuaXNBcnJheSh2YWx1ZTEudmFsdWUpIHx8XG4gICAgICAgIEFycmF5LmlzQXJyYXkodmFsdWUyLnZhbHVlKVxuICAgICAgKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ3VuZXhwZWN0ZWQgY2FyZGluYWxpdHkgaW4gcXRpIHN0cmluZy1tYXRjaCcpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBjb25zdCB2MSA9IHRoaXMuY2FzZVNlbnNpdGl2ZSA9PT0gJ3RydWUnID8gdmFsdWUxLnZhbHVlIDogKHZhbHVlMS52YWx1ZSBhcyBzdHJpbmcpLnRvTG93ZXJDYXNlKCk7XG4gICAgICBjb25zdCB2MiA9IHRoaXMuY2FzZVNlbnNpdGl2ZSA9PT0gJ3RydWUnID8gdmFsdWUyLnZhbHVlIDogKHZhbHVlMi52YWx1ZSBhcyBzdHJpbmcpLnRvTG93ZXJDYXNlKCk7XG4gICAgICByZXR1cm4gU2NvcmluZ0hlbHBlci5jb21wYXJlU2luZ2xlVmFsdWVzKHYxIGFzIHN0cmluZywgdjIgYXMgc3RyaW5nLCB2YWx1ZTEuYmFzZVR5cGUpO1xuICAgIH1cbiAgICBjb25zb2xlLmVycm9yKCd1bmV4cGVjdGVkIG51bWJlciBvZiBjaGlsZHJlbiBpbiBxdGktc3RyaW5nLW1hdGNoJyk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdxdGktc3RyaW5nLW1hdGNoJywgUXRpU3RyaW5nTWF0Y2gpO1xuIiwgImltcG9ydCB7IFF0aUV4cHJlc3Npb24sIFF0aUV4cHJlc3Npb25CYXNlIH0gZnJvbSAnLi4vcXRpLWV4cHJlc3Npb24nO1xuXG5leHBvcnQgY2xhc3MgUXRpU3VtIGV4dGVuZHMgUXRpRXhwcmVzc2lvbjxudW1iZXI+IHtcbiAgcHJpdmF0ZSBfZXhwcmVzc2lvbjogUXRpU3VtRXhwcmVzc2lvbjtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLl9leHByZXNzaW9uID0gbmV3IFF0aVN1bUV4cHJlc3Npb24oQXJyYXkuZnJvbSh0aGlzLmNoaWxkcmVuIGFzIHVua25vd24gYXMgUXRpRXhwcmVzc2lvbkJhc2U8bnVtYmVyPltdKSk7XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgZ2V0UmVzdWx0KCkge1xuICAgIC8vIGNoaWxkcmVuIGNhbiBiZSBhIG1peCBvZiBxdGktZXhwcmVzc2lvbiBhbmQgcXRpLWNvbmRpdGlvbi1leHByZXNzaW9uXG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLl9leHByZXNzaW9uLmNhbGN1bGF0ZSgpO1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgUXRpU3VtRXhwcmVzc2lvbiBpbXBsZW1lbnRzIFF0aUV4cHJlc3Npb25CYXNlPG51bWJlcj4ge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGV4cHJlc3Npb25zOiBRdGlFeHByZXNzaW9uQmFzZTxudW1iZXI+W10pIHt9XG5cbiAgcHVibGljIGNhbGN1bGF0ZSgpIHtcbiAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLmV4cHJlc3Npb25zLm1hcChjID0+IHtcbiAgICAgIGlmICghYy5jYWxjdWxhdGUpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkVsZW1lbnQgZG9lc24ndCBpbXBsZW1lbnQgUXRpQ29uZGl0aW9uRXhwcmVzc2lvblwiKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBjb25zdCB2YWx1ZSA9IGMuY2FsY3VsYXRlKCk7XG4gICAgICBpZiAoTnVtYmVyLmlzTmFOKHZhbHVlKSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCd1bmV4cGVjdGVkIHZhbHVlIGluIHF0aS1zdW0sIGV4cGVjdGVkIG51bWJlcicpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIE51bWJlcih2YWx1ZSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHZhbHVlcy5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiLCAwKTtcbiAgfVxufVxuXG5jdXN0b21FbGVtZW50cy5kZWZpbmUoJ3F0aS1zdW0nLCBRdGlTdW0pO1xuIiwgImltcG9ydCB7IFF0aUFzc2Vzc21lbnRJdGVtIH0gZnJvbSAnLi4vLi4vLi4vcXRpLWFzc2Vzc21lbnQtaXRlbS9xdGktYXNzZXNzbWVudC1pdGVtJztcbmltcG9ydCB7IFF0aUV4cHJlc3Npb24gfSBmcm9tICcuLi9xdGktZXhwcmVzc2lvbic7XG5cbmV4cG9ydCBjbGFzcyBRdGlWYXJpYWJsZSBleHRlbmRzIFF0aUV4cHJlc3Npb248c3RyaW5nIHwgc3RyaW5nW10+IHtcbiAgcHVibGljIG92ZXJyaWRlIGdldFJlc3VsdCgpIHtcbiAgICBjb25zdCBpZGVudGlmaWVyID0gdGhpcy5nZXRBdHRyaWJ1dGUoJ2lkZW50aWZpZXInKTtcbiAgICBjb25zdCByZXN1bHQgPSAodGhpcy5jbG9zZXN0KCdxdGktYXNzZXNzbWVudC1pdGVtJykgYXMgUXRpQXNzZXNzbWVudEl0ZW0pLmdldFZhcmlhYmxlKGlkZW50aWZpZXIpLnZhbHVlO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn1cblxuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdxdGktdmFyaWFibGUnLCBRdGlWYXJpYWJsZSk7XG4iLCAiaW1wb3J0IHsgaHRtbCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50LCBwcm9wZXJ0eSwgc3RhdGUgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBJbnRlcmFjdGlvbiB9IGZyb20gJy4uL2ludGVybmFsL2ludGVyYWN0aW9uL2ludGVyYWN0aW9uJztcbmltcG9ydCB7IElNU3BjaSwgTW9kdWxlUmVzb2x1dGlvbkNvbmZpZywgUXRpVmFyaWFibGVKU09OIH0gZnJvbSAnLi9pbnRlcmZhY2UnO1xuXG5kZWNsYXJlIGNvbnN0IHJlcXVpcmVqczogYW55O1xuZGVjbGFyZSBjb25zdCBkZWZpbmU6IGFueTtcblxuQGN1c3RvbUVsZW1lbnQoJ3F0aS1wb3J0YWJsZS1jdXN0b20taW50ZXJhY3Rpb24nKVxuZXhwb3J0IGNsYXNzIFF0aVBvcnRhYmxlQ3VzdG9tSW50ZXJhY3Rpb24gZXh0ZW5kcyBJbnRlcmFjdGlvbiB7XG4gIHByaXZhdGUgaW50ZXJ2YWxJZDogYW55O1xuICBwcml2YXRlIHJhd1Jlc3BvbnNlOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSBwY2k6IElNU3BjaTx1bmtub3duPjtcblxuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcsIGF0dHJpYnV0ZTogJ3Jlc3BvbnNlLWlkZW50aWZpZXInIH0pXG4gIHJlc3BvbnNlSWRlbnRpZmllcjogc3RyaW5nO1xuXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZywgYXR0cmlidXRlOiAnbW9kdWxlJyB9KVxuICBtb2R1bGU6IHN0cmluZztcblxuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcsIGF0dHJpYnV0ZTogJ2N1c3RvbS1pbnRlcmFjdGlvbi10eXBlLWlkZW50aWZpZXInIH0pXG4gIGN1c3RvbUludGVyYWN0aW9uVHlwZUlkZW50aWZpZXI6IHN0cmluZztcblxuICBAc3RhdGUoKVxuICBwcml2YXRlIF9lcnJvck1lc3NhZ2U6IHN0cmluZyA9IG51bGw7XG5cbiAgcHJpdmF0ZSBjb252ZXJ0UXRpVmFyaWFibGVKU09OKGlucHV0OiBRdGlWYXJpYWJsZUpTT04pOiBzdHJpbmcgfCBzdHJpbmdbXSB7XG4gICAgZm9yIChjb25zdCB0b3BMZXZlbEtleSBpbiBpbnB1dCkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICAgICAgaWYgKGlucHV0Lmhhc093blByb3BlcnR5KHRvcExldmVsS2V5KSkge1xuICAgICAgICBjb25zdCBuZXN0ZWRPYmplY3QgPSBpbnB1dFt0b3BMZXZlbEtleSBhcyAnbGlzdCcgfCAnYmFzZSddO1xuICAgICAgICBpZiAobmVzdGVkT2JqZWN0KSB7XG4gICAgICAgICAgZm9yIChjb25zdCBuZXN0ZWRLZXkgaW4gbmVzdGVkT2JqZWN0KSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG4gICAgICAgICAgICBpZiAobmVzdGVkT2JqZWN0Lmhhc093blByb3BlcnR5KG5lc3RlZEtleSkpIHtcbiAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBuZXN0ZWRPYmplY3RbbmVzdGVkS2V5IGFzIGtleW9mIHR5cGVvZiBuZXN0ZWRPYmplY3RdO1xuICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUubWFwKFN0cmluZyk7IC8vIENvbnZlcnQgZWFjaCBlbGVtZW50IGluIHRoZSBhcnJheSB0byBzdHJpbmdcbiAgICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7IC8vIENvbnZlcnQgdGhlIHNpbmdsZSB2YWx1ZSB0byBzdHJpbmdcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgc3RhcnRDaGVja2luZygpOiB2b2lkIHtcbiAgICAvLyBiZWNhdXNlIHRoZSBwY2kgZG9lc24ndCBoYXZlIGEgbWV0aG9kIHRvIGNoZWNrIGZvciBjaGFuZ2VzIHdlJ2xsIHVzZSBhbiBpbnRlcnZhbFxuICAgIC8vIHRvIGNoZWNrIGlmIHRoZSByZXNwb25zZSBoYXMgY2hhbmdlZC4gSWYgY2hhbmdlZCB3ZSdsbCBzYXZlIHRoZSByZXNwb25zZVxuICAgIHRoaXMuaW50ZXJ2YWxJZCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gdGhpcy5wY2kuZ2V0UmVzcG9uc2UoKTtcbiAgICAgIGNvbnN0IG5ld1Jlc3BvbnNlID0gdGhpcy5wY2kuZ2V0UmVzcG9uc2UoKTtcbiAgICAgIGNvbnN0IHN0cmluZ2lmaWVkID0gSlNPTi5zdHJpbmdpZnkocmVzcG9uc2UpO1xuICAgICAgaWYgKHN0cmluZ2lmaWVkICE9PSB0aGlzLnJhd1Jlc3BvbnNlKSB7XG4gICAgICAgIHRoaXMucmF3UmVzcG9uc2UgPSBzdHJpbmdpZmllZDtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmNvbnZlcnRRdGlWYXJpYWJsZUpTT04obmV3UmVzcG9uc2UpO1xuICAgICAgICB0aGlzLnJlc3BvbnNlID0gdmFsdWU7XG4gICAgICAgIHRoaXMuc2F2ZVJlc3BvbnNlKHZhbHVlKTtcbiAgICAgIH1cbiAgICB9LCAyMDApO1xuICB9XG5cbiAgcHJpdmF0ZSBzdG9wQ2hlY2tpbmcoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaW50ZXJ2YWxJZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjbGVhckludGVydmFsKHRoaXMuaW50ZXJ2YWxJZCk7XG4gICAgfVxuICB9XG5cbiAgdmFsaWRhdGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7IC8vIEZPUiBOT1dcbiAgfVxuICBzZXQgcmVzcG9uc2UodmFsOiBSZWFkb25seTxzdHJpbmcgfCBzdHJpbmdbXT4pIHtcbiAgICAvLyBPbmx5IHNldCBzdGF0ZSBpcyBzdXBwb3J0ZWQgaW4gYSBQQ0lcbiAgfVxuXG4gIGdldFRBT0NvbmZpZyhub2RlKSB7XG4gICAgY29uc3QgYSA9IG5vZGUucXVlcnlTZWxlY3RvckFsbCgncHJvcGVydGllcycpO1xuICAgIGxldCBjb25maWcgPSB7fTtcblxuICAgIGNvbnN0IGdldFByb3BlcnR5VmFsdWUgPSBlbCA9PiB7XG4gICAgICBjb25zdCBwcm9wZXJ0eSA9IHt9O1xuICAgICAgY29uc3Qga2V5ID0gZWwuZ2V0QXR0cmlidXRlKCdrZXknKTtcbiAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBBcnJheS5mcm9tKGVsLmNoaWxkcmVuKTtcbiAgICAgICAgY29uc3QgYWxsS2V5ID0gY2hpbGRyZW4ubWFwKChjOiBIVE1MRWxlbWVudCkgPT4gYy5nZXRBdHRyaWJ1dGUoJ2tleScpKTtcbiAgICAgICAgY29uc3QgaXNBcnJheSA9IGFsbEtleS5sZW5ndGggPiAwICYmICFhbGxLZXkuZmluZChrID0+ICFOdW1iZXIuaXNJbnRlZ2VyKCtrKSk7XG4gICAgICAgIGlmIChpc0FycmF5KSB7XG4gICAgICAgICAgcHJvcGVydHlba2V5XSA9IGNoaWxkcmVuLm1hcChjID0+IGdldENoaWxkUHJvcGVydGllcyhjKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcHJvcGVydHlba2V5XSA9IGVsLnRleHRDb250ZW50O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcHJvcGVydHk7XG4gICAgfTtcblxuICAgIGNvbnN0IGdldENoaWxkUHJvcGVydGllcyA9IChlbCk6IHt9IHwgdm9pZCA9PiB7XG4gICAgICBpZiAoZWwpIHtcbiAgICAgICAgbGV0IHByb3BlcnRpZXMgPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBlbC5jaGlsZHJlbikge1xuICAgICAgICAgIHByb3BlcnRpZXMgPSB7IC4uLnByb3BlcnRpZXMsIC4uLmdldFByb3BlcnR5VmFsdWUoY2hpbGQpIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHByb3BlcnRpZXM7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGZvciAoY29uc3QgcHJvcGVydGllcyBvZiBhKSB7XG4gICAgICBjb25zdCBrZXkgPSBwcm9wZXJ0aWVzLmdldEF0dHJpYnV0ZSgna2V5Jyk7XG4gICAgICBpZiAoIWtleSkge1xuICAgICAgICBjb25maWcgPSB7IC4uLmNvbmZpZywgLi4uZ2V0Q2hpbGRQcm9wZXJ0aWVzKHByb3BlcnRpZXMpIH07XG4gICAgICB9XG4gICAgICByZXR1cm4gY29uZmlnO1xuICAgIH1cbiAgICBjb25zb2xlLmxvZygnQ2FuIG5vdCBmaW5kIHF0aS1jdXN0b20taW50ZXJhY3Rpb24gY29uZmlnJyk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZWdpc3RlcihwY2k6IElNU3BjaTx1bmtub3duPikge1xuICAgIHRoaXMucGNpID0gcGNpO1xuXG4gICAgY29uc3QgdHlwZSA9IHRoaXMucGFyZW50RWxlbWVudC50YWdOYW1lID09PSAnUVRJLUNVU1RPTS1JTlRFUkFDVElPTicgPyAnVEFPJyA6ICdJTVMnO1xuICAgIGNvbnN0IGRvbTogSFRNTEVsZW1lbnQgPVxuICAgICAgdHlwZSA9PSAnSU1TJyA/IHRoaXMucXVlcnlTZWxlY3RvcigncXRpLWludGVyYWN0aW9uLW1hcmt1cCcpIDogdGhpcy5xdWVyeVNlbGVjdG9yKCdtYXJrdXAnKTtcbiAgICBkb20uY2xhc3NMaXN0LmFkZCgncXRpLWN1c3RvbUludGVyYWN0aW9uJyk7XG5cbiAgICBpZiAodHlwZSA9PSAnVEFPJyAmJiB0aGlzLnF1ZXJ5U2VsZWN0b3IoJ3Byb3BlcnRpZXMnKSkge1xuICAgICAgKHRoaXMucXVlcnlTZWxlY3RvcigncHJvcGVydGllcycpIGFzIEhUTUxFbGVtZW50KS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbmZpZzogYW55ID1cbiAgICAgIHR5cGUgPT0gJ0lNUydcbiAgICAgICAgPyB7XG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiB0aGlzLmRhdGFzZXQsXG4gICAgICAgICAgICBvbnJlYWR5OiAoKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdvbnJlYWR5Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICA6IHRoaXMuZ2V0VEFPQ29uZmlnKHRoaXMpO1xuXG4gICAgdHlwZSA9PSAnSU1TJ1xuICAgICAgPyBwY2kuZ2V0SW5zdGFuY2UoZG9tLCBjb25maWcsIHVuZGVmaW5lZClcbiAgICAgIDogKHBjaSBhcyBhbnkpLmluaXRpYWxpemUodGhpcy5jdXN0b21JbnRlcmFjdGlvblR5cGVJZGVudGlmaWVyLCBkb20uZmlyc3RFbGVtZW50Q2hpbGQsIGNvbmZpZyk7XG5cbiAgICBpZiAodHlwZSA9PSAnVEFPJykge1xuICAgICAgY29uc3QgbGlua3MgPSBBcnJheS5mcm9tKHRoaXMucXVlcnlTZWxlY3RvckFsbCgnbGluaycpKS5tYXAoYWNjID0+IGFjYy5nZXRBdHRyaWJ1dGUoJ2hyZWYnKSk7XG4gICAgICBsaW5rcy5mb3JFYWNoKGxpbmsgPT4ge1xuICAgICAgICBjb25zdCBzdHlsZXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsaW5rJyk7XG4gICAgICAgIHN0eWxlcy5yZWwgPSAnc3R5bGVzaGVldCc7XG4gICAgICAgIHN0eWxlcy50eXBlID0gJ3RleHQvY3NzJztcbiAgICAgICAgc3R5bGVzLm1lZGlhID0gJ3NjcmVlbic7XG4gICAgICAgIHN0eWxlcy5ocmVmID0gbGluaztcbiAgICAgICAgZG9tLmFwcGVuZENoaWxkKHN0eWxlcyk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5zdGFydENoZWNraW5nKCk7XG4gIH1cblxuICBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuXG4gICAgZGVmaW5lKCdxdGlDdXN0b21JbnRlcmFjdGlvbkNvbnRleHQnLCAoKSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICByZWdpc3RlcjogY3R4QSA9PiB7XG4gICAgICAgICAgdGhpcy5yZWdpc3RlcihjdHhBKTtcbiAgICAgICAgfSxcbiAgICAgICAgbm90aWZ5UmVhZHk6ICgpID0+IHtcbiAgICAgICAgICAvKiBvbmx5IHVzZWQgaW4gdGhlIFRBTyB2ZXJzaW9uICovXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICBjb25zdCBjb25maWcgPSB0aGlzLmJ1aWxkUmVxdWlyZUNvbmZpZygpO1xuICAgIGNvbnN0IHJlcXVpcmVQQ0kgPSByZXF1aXJlanMuY29uZmlnKGNvbmZpZyk7XG4gICAgcmVxdWlyZVBDSShbJ3JlcXVpcmUnXSwgcmVxdWlyZSA9PiB7XG4gICAgICByZXF1aXJlKFt0aGlzLm1vZHVsZV0pO1xuICAgIH0pO1xuICB9XG5cbiAgb3ZlcnJpZGUgZGlzY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICByZXF1aXJlanMudW5kZWYodGhpcy5jdXN0b21JbnRlcmFjdGlvblR5cGVJZGVudGlmaWVyKTtcbiAgICAvLyBDbGVhciB0aGUgbW9kdWxlcyBpbiB0aGUgY29udGV4dFxuICAgIGNvbnN0IGNvbnRleHQgPSByZXF1aXJlanMucy5jb250ZXh0cztcbiAgICBkZWxldGUgY29udGV4dFt0aGlzLmN1c3RvbUludGVyYWN0aW9uVHlwZUlkZW50aWZpZXJdO1xuICAgIHRoaXMuc3RvcENoZWNraW5nKCk7XG4gIH1cblxuICBidWlsZFJlcXVpcmVDb25maWcoKSB7XG4gICAgLy8gU2V0IFJlcXVpcmVKUyBwYXRocyBhbmQgc2hpbSBjb25maWd1cmF0aW9uIGlmIGF2YWlsYWJsZVxuICAgIGNvbnN0IGNvbmZpZzogTW9kdWxlUmVzb2x1dGlvbkNvbmZpZyA9IHtcbiAgICAgIGNvbnRleHQ6IHRoaXMuY3VzdG9tSW50ZXJhY3Rpb25UeXBlSWRlbnRpZmllcixcbiAgICAgIGNhdGNoRXJyb3I6IHRydWUsXG4gICAgICBwYXRoczogd2luZG93WydyZXF1aXJlUGF0aHMnXSB8fCB7fSxcbiAgICAgIHNoaW06IHdpbmRvd1sncmVxdWlyZVNoaW0nXSB8fCB7fVxuICAgIH07XG4gICAgLy8gQ2hlY2sgaWYgUmVxdWlyZUpTIGlzIGF2YWlsYWJsZSwgaWYgbm90LCBzZXQgYW4gZXJyb3IgbWVzc2FnZVxuICAgIGlmICghZ2xvYmFsVGhpcy5yZXF1aXJlKSB7XG4gICAgICB0aGlzLl9lcnJvck1lc3NhZ2UgPSBgUmVxdWlyZUpTIG5vdCBmb3VuZC4gUGxlYXNlIGxvYWQgaXQgdmlhIENETjogaHR0cHM6Ly9jZG5qcy5jb20vbGlicmFyaWVzL3JlcXVpcmUuanNgO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IGJhc2VVcmwgPSB0aGlzLmdldEF0dHJpYnV0ZSgnZGF0YS1iYXNlLXVybCcpO1xuICAgIGNvbnN0IGludGVyYWN0aW9uTW9kdWxlcyA9IHRoaXMucXVlcnlTZWxlY3RvcigncXRpLWludGVyYWN0aW9uLW1vZHVsZXMnKTtcblxuICAgIGlmIChpbnRlcmFjdGlvbk1vZHVsZXMpIHtcbiAgICAgIGNvbnN0IG1vZHVsZXMgPSBpbnRlcmFjdGlvbk1vZHVsZXMucXVlcnlTZWxlY3RvckFsbCgncXRpLWludGVyYWN0aW9uLW1vZHVsZScpO1xuICAgICAgZm9yIChjb25zdCBtb2R1bGUgb2YgbW9kdWxlcykge1xuICAgICAgICBjb25zdCBtb2R1bGVJZCA9IG1vZHVsZS5nZXRBdHRyaWJ1dGUoJ2lkJyk7XG4gICAgICAgIGNvbnN0IHByaW1hcnlQYXRoID0gbW9kdWxlLmdldEF0dHJpYnV0ZSgncHJpbWFyeS1wYXRoJyk7XG4gICAgICAgIGNvbnN0IGZhbGxiYWNrUGF0aCA9IG1vZHVsZS5nZXRBdHRyaWJ1dGUoJ2ZhbGxiYWNrLXBhdGgnKTtcblxuICAgICAgICBpZiAobW9kdWxlSWQgJiYgcHJpbWFyeVBhdGgpIHtcbiAgICAgICAgICAvLyBTZXQgdGhlIHBhdGhzIHVzaW5nIFJlcXVpcmVKUydzIGZhbGxiYWNrIGFycmF5XG4gICAgICAgICAgY29uc3QgcGF0aHMgPSBmYWxsYmFja1BhdGhcbiAgICAgICAgICAgID8gdGhpcy5jb21iaW5lUmVxdWlyZVJlc29sdmVQYXRocyhcbiAgICAgICAgICAgICAgICB0aGlzLmdldFJlc29sdmFibGVQYXRoKHByaW1hcnlQYXRoLCBiYXNlVXJsKSxcbiAgICAgICAgICAgICAgICB0aGlzLmdldFJlc29sdmFibGVQYXRoKGZhbGxiYWNrUGF0aCwgYmFzZVVybClcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgOiB0aGlzLmdldFJlc29sdmFibGVQYXRoKHByaW1hcnlQYXRoLCBiYXNlVXJsKTtcbiAgICAgICAgICBjb25zdCBleGlzdGluZ1BhdGggPSBjb25maWcucGF0aHNbbW9kdWxlSWRdIHx8IFtdO1xuICAgICAgICAgIGNvbmZpZy5wYXRoc1ttb2R1bGVJZF0gPSB0aGlzLmNvbWJpbmVSZXF1aXJlUmVzb2x2ZVBhdGhzKGV4aXN0aW5nUGF0aCwgcGF0aHMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjb25maWc7XG4gIH1cblxuICBwcml2YXRlIGNvbWJpbmVSZXF1aXJlUmVzb2x2ZVBhdGhzKHBhdGgxOiBzdHJpbmcgfCBzdHJpbmdbXSwgcGF0aDI6IHN0cmluZyB8IHN0cmluZ1tdKSB7XG4gICAgY29uc3QgcGF0aDFBcnJheSA9IEFycmF5LmlzQXJyYXkocGF0aDEpID8gcGF0aDEgOiBbcGF0aDFdO1xuICAgIGNvbnN0IHBhdGgyQXJyYXkgPSBBcnJheS5pc0FycmF5KHBhdGgyKSA/IHBhdGgyIDogW3BhdGgyXTtcbiAgICByZXR1cm4gcGF0aDFBcnJheS5jb25jYXQocGF0aDJBcnJheSk7XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZURvdWJsZVNsYXNoZXMoc3RyOiBzdHJpbmcpIHtcbiAgICBjb25zdCBzaW5nbGVGb3J3YXJkU2xhc2hlcyA9IHN0clxuICAgICAgLnJlcGxhY2UoLyhbXjpdXFwvKVxcLysvZywgJyQxJylcbiAgICAgIC5yZXBsYWNlKC9cXC9cXC8vZywgJy8nKVxuICAgICAgLnJlcGxhY2UoJ2h0dHA6LycsICdodHRwOi8vJylcbiAgICAgIC5yZXBsYWNlKCdodHRwczovJywgJ2h0dHBzOi8vJyk7XG4gICAgcmV0dXJuIHNpbmdsZUZvcndhcmRTbGFzaGVzO1xuICB9XG5cbiAgbG9hZENvbmZpZyA9IGFzeW5jICh1cmw6IHN0cmluZywgYmFzZVVybD86IHN0cmluZyk6IFByb21pc2U8TW9kdWxlUmVzb2x1dGlvbkNvbmZpZz4gPT4ge1xuICAgIHVybCA9IHRoaXMucmVtb3ZlRG91YmxlU2xhc2hlcyh1cmwpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXF1aXJlQ29uZmlnID0gYXdhaXQgZmV0Y2godXJsKTtcbiAgICAgIGlmIChyZXF1aXJlQ29uZmlnLm9rKSB7XG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IGF3YWl0IHJlcXVpcmVDb25maWcuanNvbigpO1xuICAgICAgICBjb25zdCBtb2R1bGVDb25nID0gY29uZmlnIGFzIE1vZHVsZVJlc29sdXRpb25Db25maWc7XG4gICAgICAgIGZvciAoY29uc3QgbW9kdWxlSWQgaW4gbW9kdWxlQ29uZy5wYXRocykge1xuICAgICAgICAgIGlmIChiYXNlVXJsKSB7XG4gICAgICAgICAgICBtb2R1bGVDb25nLnBhdGhzW21vZHVsZUlkXSA9IHRoaXMuZ2V0UmVzb2x2YWJsZVBhdGgobW9kdWxlQ29uZy5wYXRoc1ttb2R1bGVJZF0sIGJhc2VVcmwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbW9kdWxlQ29uZztcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBkbyBub3RoaW5nXG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9O1xuXG4gIGdldFJlc29sdmFibGVQYXRoU3RyaW5nID0gKHBhdGg6IHN0cmluZywgYmFzZVBhdGg/OiBzdHJpbmcpID0+IHtcbiAgICBwYXRoID0gcGF0aC5yZXBsYWNlKC9cXC5qcyQvLCAnJyk7XG4gICAgcmV0dXJuIHBhdGg/LnRvTG9jYWxlTG93ZXJDYXNlKCkuc3RhcnRzV2l0aCgnaHR0cCcpIHx8ICFiYXNlUGF0aFxuICAgICAgPyBwYXRoXG4gICAgICA6IHRoaXMucmVtb3ZlRG91YmxlU2xhc2hlcyhgJHtiYXNlUGF0aH0vJHtwYXRofWApO1xuICB9O1xuXG4gIGdldFJlc29sdmFibGVQYXRoID0gKHBhdGg6IHN0cmluZyB8IHN0cmluZ1tdLCBiYXNlUGF0aD86IHN0cmluZykgPT4ge1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHBhdGgpXG4gICAgICA/IHBhdGgubWFwKHAgPT4gdGhpcy5nZXRSZXNvbHZhYmxlUGF0aFN0cmluZyhwLCBiYXNlUGF0aCkpXG4gICAgICA6IHRoaXMuZ2V0UmVzb2x2YWJsZVBhdGhTdHJpbmcocGF0aCwgYmFzZVBhdGgpO1xuICB9O1xuXG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICByZXR1cm4gaHRtbGA8c2xvdD48L3Nsb3Q+JHt0aGlzLl9lcnJvck1lc3NhZ2UgJiZcbiAgICAgIGh0bWxgPGRpdiBzdHlsZT1cImNvbG9yOnJlZFwiPlxuICAgICAgICA8aDE+RXJyb3I8L2gxPlxuICAgICAgICAke3RoaXMuX2Vycm9yTWVzc2FnZX1cbiAgICAgIDwvZGl2PmB9YDtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktcG9ydGFibGUtY3VzdG9tLWludGVyYWN0aW9uJzogUXRpUG9ydGFibGVDdXN0b21JbnRlcmFjdGlvbjtcbiAgfVxufVxuIiwgImltcG9ydCB7IExpdEVsZW1lbnQsIGNzcywgaHRtbCB9IGZyb20gJ2xpdCc7XG5cbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQsIHN0YXRlIH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgRHJhZ0Ryb3BJbnRlcmFjdGlvbk1peGluIH0gZnJvbSAnLi4vaW50ZXJuYWwvZHJhZy1kcm9wJztcblxuQGN1c3RvbUVsZW1lbnQoJ3F0aS1hc3NvY2lhdGUtaW50ZXJhY3Rpb24nKVxuZXhwb3J0IGNsYXNzIFF0aUFzc29jaWF0ZUludGVyYWN0aW9uIGV4dGVuZHMgRHJhZ0Ryb3BJbnRlcmFjdGlvbk1peGluKFxuICBMaXRFbGVtZW50LFxuICAncXRpLXNpbXBsZS1hc3NvY2lhYmxlLWNob2ljZScsXG4gIHRydWUsXG4gICcuZGwnXG4pIHtcbiAgQHN0YXRlKCkgcHJpdmF0ZSBfY2hpbGRyZW5NYXA6IEVsZW1lbnRbXTtcblxuICBzdGF0aWMgb3ZlcnJpZGUgc3R5bGVzID0gY3NzYFxuICAgIDpob3N0IHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrOyAvKiBuZWNlc3NhcnkgdG8gY2FsY3VsYXRlIHNjYWxpbmcgcG9zaXRpb24gKi9cbiAgICB9XG4gICAgc2xvdFtuYW1lPSdxdGktc2ltcGxlLWFzc29jaWFibGUtY2hvaWNlJ10ge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICAgIGdhcDogMC41cmVtO1xuICAgIH1cbiAgYDtcblxuICBvdmVycmlkZSByZW5kZXIoKSB7XG4gICAgcmV0dXJuIGh0bWxgIDxzbG90IG5hbWU9XCJwcm9tcHRcIj48L3Nsb3Q+XG4gICAgICA8c2xvdCBuYW1lPVwicXRpLXNpbXBsZS1hc3NvY2lhYmxlLWNob2ljZVwiPjwvc2xvdD5cbiAgICAgICR7dGhpcy5fY2hpbGRyZW5NYXAubGVuZ3RoID4gMCAmJlxuICAgICAgQXJyYXkuZnJvbShBcnJheShNYXRoLmNlaWwodGhpcy5fY2hpbGRyZW5NYXAubGVuZ3RoIC8gMikpLmtleXMoKSkubWFwKFxuICAgICAgICAoXywgaW5kZXgpID0+XG4gICAgICAgICAgaHRtbGA8ZGl2IHBhcnQ9XCJhc3NvY2lhYmxlcy1jb250YWluZXJcIj5cbiAgICAgICAgICAgIDxkaXYgbmFtZT1cImxlZnQke2luZGV4fVwiIHBhcnQ9XCJkcm9wLWxpc3RcIiBjbGFzcz1cImRsXCIgaWRlbnRpZmllcj1cImRyb3BsaXN0JHtpbmRleH1fbGVmdFwiPjwvZGl2PlxuICAgICAgICAgICAgPGRpdiBuYW1lPVwicmlnaHQke2luZGV4fVwiIHBhcnQ9XCJkcm9wLWxpc3RcIiBjbGFzcz1cImRsXCIgaWRlbnRpZmllcj1cImRyb3BsaXN0JHtpbmRleH1fcmlnaHRcIj48L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5gXG4gICAgICApfWA7XG4gIH1cblxuICBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIHRoaXMuX2NoaWxkcmVuTWFwID0gQXJyYXkuZnJvbSh0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwoJ3F0aS1zaW1wbGUtYXNzb2NpYWJsZS1jaG9pY2UnKSk7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLWFzc29jaWF0ZS1pbnRlcmFjdGlvbic6IFF0aUFzc29jaWF0ZUludGVyYWN0aW9uO1xuICB9XG59XG4iLCAiZXhwb3J0IGNsYXNzIFRvdWNoRHJhZ0FuZERyb3Age1xuICBwcml2YXRlIF90b3VjaEJlZ2luID0gMDsgLy8gdGltZXN0YW1wIG9mIGZpcnN0IHRvdWNoXG4gIHByaXZhdGUgX3RvdWNoRG93biA9IG51bGw7IC8vIHBvaW50IG9mIGZpcnN0IHRvdWNoXG4gIHByaXZhdGUgX2xhc3RDbGljayA9IDA7IC8vIHRpbWVzdGFtcCBvZiBwcmV2aW91cyBjbGljayAodG91Y2hzdGFydCArIHRvdWNoZW5kKVxuICBwcml2YXRlIF9jYW5EcmFnID0gZmFsc2U7IC8vIHdoZXRoZXIgdGhlcmUgaXMgYW4gZWxlbWVudCB3aGljaCBjYW4gYmUgZHJhZ2dlZFxuICBwcml2YXRlIF9kcmFnU3JjID0gbnVsbDsgLy8gdGhlIGVsZW1lbnQgd2hpY2ggc2hvdWxkIGJlIGRyYWdnZWRcbiAgcHJpdmF0ZSBfZHJhZ0NvcHkgPSBudWxsOyAvLyBjb3B5IG9mIGRyYWcgc291cmNlIGZvciBkcmFnIGZlZWRiYWNrXG4gIHByaXZhdGUgX3RvdWNoRW5kQ2FsbGVkID0gZmFsc2U7IC8vIHdoZXRoZXIgdG91Y2hFbmQgb2NjdXJlZFxuICBwcml2YXRlIF9kcmFnUnVubmluZyA9IGZhbHNlOyAvLyB3aGV0aGVyIGEgZHJhZyBwcm9jZXNzIGlzIHJ1bm5pbmcgYXQgdGhlIG1vbWVudFxuXG4gIHByaXZhdGUgX2RhdGFUcmFuc2ZlciA9IHtcbiAgICBkYXRhOiB7fSxcbiAgICBzZXREYXRhOiBmdW5jdGlvbiAodHlwZSwgdmFsKSB7XG4gICAgICB0aGlzLmRhdGFbdHlwZV0gPSB2YWw7XG4gICAgfSxcbiAgICBnZXREYXRhOiBmdW5jdGlvbiAodHlwZSkge1xuICAgICAgcmV0dXJuIHRoaXMuZGF0YVt0eXBlXTtcbiAgICB9LFxuICAgIGVmZmVjdEFsbG93ZWQ6ICdtb3ZlJ1xuICB9O1xuICBwcml2YXRlIF9jb3B5T2Zmc2V0ID0geyB4OiAwLCB5OiAwIH07IC8vIE9mZnNldCBmb3IgcG9zaXRpb25pbmcgdGhlIGRyYWcgY29weVxuXG4gIHByaXZhdGUgX2xhc3RUYXJnZXQgPSBudWxsOyAvLyBUaGUgbGFzdCByZWdpc3RlcmVkIHRvdWNoIHRhcmdldFxuICBwcml2YXRlIF9jdXJyZW50RHJvcENvbnRhaW5lciA9IG51bGw7IC8vIFRoZSBjdXJyZW50IGRyb3AgY29udGFpbmVyOyBmYWxzZSBpZiBlbGVtZW50IGlzIG5vdCBkcm9wcGFibGVcbiAgcHJpdmF0ZSBfaGFuZGxlQ2xpY2sgPSB0cnVlOyAvLyBTcGVjaWZpZXNcblxuICBwcml2YXRlIF9EQkxDTElDS0RFTEFZID0gNTAwOyAvLyBtYXhpbXVtIGRlbGF5IGluIHdoaWNoIGEgc2Vjb25kIGNsaWNrIG11c3Qgb2NjdXJcbiAgcHJpdmF0ZSBfQ09OVEVYVE1FTlVERUxBWSA9IDEwMDA7IC8vIGhvbGQgZGVsYXkgYWZ0ZXIgd2hpY2ggY29udGV4dCBtZW51IGlzIHNob3duXG4gIHByaXZhdGUgX0RSQUdERUxUQSA9IDU7IC8vIE1pbmltdW0gb2YgcGl4ZWxzIHdoaWNoIHRoZSBmaW5nZXIgbXVzdCBiZSBtb3ZlZCB0byBzdGFydCBkcmFnXG4gIHByaXZhdGUgX0NPUFlPUEFDSVRZID0gMC43OyAvLyBPcGFjaXR5IG9mIHRoZSBkcmFnIGNvcHkgZWxlbWVudFxuICBwcml2YXRlIHN0YXRpYyBfaW5zdGFuY2U6IFRvdWNoRHJhZ0FuZERyb3A7XG5cbiAgY29weVN0eWxlc0RyYWdDbG9uZTogYm9vbGVhbiA9IHRydWU7XG4gIGRyYWdPbkNsaWNrOiBib29sZWFuID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgLy8gQ2hlY2sgc2luZ2xldG9uXG4gICAgaWYgKFRvdWNoRHJhZ0FuZERyb3AuX2luc3RhbmNlKSB7XG4gICAgICAvLyAgdGhyb3cgbmV3IEVycm9yKFwiVG91Y2hEcmFnQW5kRHJvcCBjYW4ndCBiZSBpbnN0YW50aWF0ZWQgbW9yZSB0aGFuIG9uY2UuXCIpO1xuICAgICAgcmV0dXJuIFRvdWNoRHJhZ0FuZERyb3AuX2luc3RhbmNlO1xuICAgIH1cbiAgICBUb3VjaERyYWdBbmREcm9wLl9pbnN0YW5jZSA9IHRoaXM7XG5cbiAgICAvLyB0aGlzLl9pbml0aWFsaXplRmllbGRzKCk7XG5cbiAgICAvLyBBZGQgZXZlbnQgbGlzdGVuZXJzXG5cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCB0aGlzLl90b3VjaE1vdmUuYmluZCh0aGlzKSwgeyBwYXNzaXZlOiBmYWxzZSwgY2FwdHVyZTogZmFsc2UgfSk7XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5fdG91Y2hNb3ZlLmJpbmQodGhpcyksIHsgcGFzc2l2ZTogZmFsc2UsIGNhcHR1cmU6IGZhbHNlIH0pO1xuXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCB0aGlzLl90b3VjaEVuZC5iaW5kKHRoaXMpLCB7IHBhc3NpdmU6IGZhbHNlLCBjYXB0dXJlOiBmYWxzZSB9KTtcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgdGhpcy5fdG91Y2hFbmQuYmluZCh0aGlzKSwgeyBwYXNzaXZlOiBmYWxzZSwgY2FwdHVyZTogZmFsc2UgfSk7XG5cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaGNhbmNlbCcsIHRoaXMuX3RvdWNoQ2FuY2VsLmJpbmQodGhpcyksIHsgcGFzc2l2ZTogZmFsc2UsIGNhcHR1cmU6IGZhbHNlIH0pO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBhZGREcmFnZ2FibGVzKGRyYWdnYWJsZXM6IEVsZW1lbnRbXSkge1xuICAgIGRyYWdnYWJsZXMuZm9yRWFjaChlbCA9PiB7XG4gICAgICBlbC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgdGhpcy5fdG91Y2hTdGFydC5iaW5kKHRoaXMpLCB7IHBhc3NpdmU6IGZhbHNlLCBjYXB0dXJlOiBmYWxzZSB9KTtcbiAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIHRoaXMuX3RvdWNoU3RhcnQuYmluZCh0aGlzKSwgeyBwYXNzaXZlOiBmYWxzZSwgY2FwdHVyZTogZmFsc2UgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGJhY2sgZm9yIHRvdWNoc3RhcnQgZXZlbnQgbGlzdGVuZXIuXG4gICAqIEBwYXJhbSB7VG91Y2hFdmVudH0gZVxuICAgKi9cbiAgcHJpdmF0ZSBfdG91Y2hTdGFydChlKSB7XG4gICAgLy8gU2F2ZSBjdXJyZW50IHRpbWVzdGFtcFxuICAgIHRoaXMuX3RvdWNoQmVnaW4gPSBEYXRlLm5vdygpO1xuXG4gICAgY29uc3QgeyB4LCB5IH0gPSB0aGlzLl9nZXRQb2ludChlKTtcblxuICAgIHRoaXMuX3RvdWNoRG93biA9IHsgeCwgeSB9O1xuXG4gICAgdGhpcy5fZHJhZ1NyYyA9IGUuY3VycmVudFRhcmdldDtcbiAgICB0aGlzLl9jYW5EcmFnID0gdHJ1ZTtcblxuICAgIGlmICh0aGlzLmRyYWdPbkNsaWNrKSB7XG4gICAgICBjb25zdCBfdG91Y2hlcyA9IHsgY2xpZW50WDogeCwgY2xpZW50WTogeSB9O1xuICAgICAgdGhpcy5fZHJhZ1J1bm5pbmcgPSB0cnVlO1xuICAgICAgdGhpcy5fY3JlYXRlRHJhZ0NvcHkoZSwgX3RvdWNoZXMpO1xuICAgIH1cblxuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmb3IgdG91Y2htb3ZlIGV2ZW50IGxpc3RlbmVyLlxuICAgKiBAcGFyYW0ge1RvdWNoRXZlbnR9IGVcbiAgICovXG4gIHByaXZhdGUgX3RvdWNoTW92ZShlKSB7XG4gICAgaWYgKHRoaXMuX2NhbkRyYWcgJiYgdGhpcy5fZHJhZ1NyYykge1xuICAgICAgLy8gQ3JlYXRlIGNvcHkgb2YgZWxlbWVudCBmb3IgdmlzdWFsIGRyYWcgZmVlZGJhY2tcblxuICAgICAgY29uc3QgeyB4LCB5IH0gPSB0aGlzLl9nZXRQb2ludChlKTtcbiAgICAgIGNvbnN0IF90b3VjaGVzID0geyBjbGllbnRYOiB4LCBjbGllbnRZOiB5IH07XG5cbiAgICAgIGlmICh0aGlzLl9nZXREZWx0YShfdG91Y2hlcykgPj0gdGhpcy5fRFJBR0RFTFRBKSB7XG4gICAgICAgIHRoaXMuX2RyYWdSdW5uaW5nID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fY3JlYXRlRHJhZ0NvcHkoZSwgX3RvdWNoZXMpO1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2NyZWF0ZURyYWdDb3B5ID0gKGU6IGFueSwgX3RvdWNoZXM6IHsgY2xpZW50WDogbnVtYmVyOyBjbGllbnRZOiBudW1iZXIgfSkgPT4ge1xuICAgIGlmICh0aGlzLl9kcmFnQ29weSA9PT0gbnVsbCAmJiB0aGlzLl9kcmFnUnVubmluZykge1xuICAgICAgdGhpcy5fZHJhZ1NyYy5zdHlsZS5vcGFjaXR5ID0gdGhpcy5fQ09QWU9QQUNJVFk7XG4gICAgICB0aGlzLl9kcmFnQ29weSA9IHRoaXMuX2RyYWdTcmMuY2xvbmVOb2RlKHRydWUpO1xuICAgICAgY29uc3QgZWxlbWVudFN0eWxlcyA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMuX2RyYWdTcmMpO1xuXG4gICAgICB0aGlzLl9kcmFnQ29weS5zdHlsZSA9ICcnO1xuICAgICAgdGhpcy5fZHJhZ0NvcHkuc2V0QXR0cmlidXRlKCdkcmFnY2xvbmUnLCAnJyk7XG5cbiAgICAgIGlmICh0aGlzLmNvcHlTdHlsZXNEcmFnQ2xvbmUpIHtcbiAgICAgICAgZm9yIChjb25zdCBzdHlsZSBvZiBlbGVtZW50U3R5bGVzKSB7XG4gICAgICAgICAgdGhpcy5fZHJhZ0NvcHkuc3R5bGVbc3R5bGVdID0gZWxlbWVudFN0eWxlcy5nZXRQcm9wZXJ0eVZhbHVlKHN0eWxlKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLl9jYWxjdWxhdGVEcmFnQ29weVBvc2l0aW9uKF90b3VjaGVzKTtcblxuICAgICAgdGhpcy5fZHJhZ0NvcHkuc3R5bGUudG9wID0gX3RvdWNoZXMuY2xpZW50WSAtIHRoaXMuX2NvcHlPZmZzZXQueSArICdweCc7XG4gICAgICB0aGlzLl9kcmFnQ29weS5zdHlsZS5sZWZ0ID0gX3RvdWNoZXMuY2xpZW50WCAtIHRoaXMuX2NvcHlPZmZzZXQueCArICdweCc7XG4gICAgICB0aGlzLl9kcmFnQ29weS5zdHlsZS5wb3NpdGlvbiA9ICdmaXhlZCc7XG4gICAgICB0aGlzLl9kcmFnQ29weS5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ25vbmUnO1xuICAgICAgdGhpcy5fZHJhZ0NvcHkuc3R5bGUuekluZGV4ID0gJzk5OTk5OSc7XG5cbiAgICAgIHRoaXMuX2RyYWdDb3B5ID0gZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLl9kcmFnQ29weSk7XG4gICAgICB0aGlzLl9kaXNwYXRjaEV2ZW50KHRoaXMuX2RyYWdTcmMsICdkcmFnc3RhcnQnKTtcbiAgICB9XG5cbiAgICAvLyBEcmFnIGlzIHJ1bm5pbmcsIG1vdmUgZHJhZyBjb3B5IGFuZCBmaXJlIGV2ZW50c1xuICAgIGlmICh0aGlzLl9kcmFnUnVubmluZykge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby10aGlzLWFsaWFzXG4gICAgICBjb25zdCBfdGhpcyA9IHRoaXM7XG4gICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoX3RoaXMuX3RvdWNoRW5kQ2FsbGVkIHx8IF90aGlzLl9kcmFnQ29weSA9PT0gbnVsbCkgcmV0dXJuO1xuICAgICAgICBfdGhpcy5fZHJhZ0NvcHkuc3R5bGUudG9wID0gX3RvdWNoZXMuY2xpZW50WSAtIF90aGlzLl9jb3B5T2Zmc2V0LnkgKyAncHgnO1xuICAgICAgICBfdGhpcy5fZHJhZ0NvcHkuc3R5bGUubGVmdCA9IF90b3VjaGVzLmNsaWVudFggLSBfdGhpcy5fY29weU9mZnNldC54ICsgJ3B4JztcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCB0YXJnZXQgPSB0aGlzLl9maW5kRHJvcHBhYmxlKGUpO1xuXG4gICAgICAvLyBGaXJlIGRyYWdsZWF2ZSBhbmQgZHJhZ2VudGVyIGV2ZW50cyB3aGVuIHRhcmdldCBoYXMgY2hhbmdlZCBkdXJpbmcgbW92ZVxuICAgICAgaWYgKHRhcmdldCAhPSB0aGlzLl9sYXN0VGFyZ2V0KSB7XG4gICAgICAgIHRoaXMuX2Rpc3BhdGNoRXZlbnQodGFyZ2V0LCAnZHJhZ2VudGVyJyk7XG4gICAgICAgIHRoaXMuX2Rpc3BhdGNoRXZlbnQodGhpcy5fbGFzdFRhcmdldCwgJ2RyYWdsZWF2ZScpO1xuICAgICAgICB0aGlzLl9sYXN0VGFyZ2V0ID0gdGFyZ2V0O1xuICAgICAgfVxuXG4gICAgICAvLyBNYWtlIGN1cnJlbnQgZHJvcCBjb250YWluZXIgY2xhc3N3aWRlIGF2YWlsYWJsZSBhbmQgZmlyZSBkcmFnb3ZlciBpZiBpdCdzIHJlYWxseSBhIGRyb3AgY29udGFpbmVyLlxuXG4gICAgICB0aGlzLl9jdXJyZW50RHJvcENvbnRhaW5lciA9IHRhcmdldDtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50RHJvcENvbnRhaW5lcikgdGhpcy5fZGlzcGF0Y2hFdmVudCh0YXJnZXQsICdkcmFnb3ZlcicpO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogQ2FsbGJhY2sgZm9yIHRvdWNoZW5kIGV2ZW50IGxpc3RlbmVyLlxuICAgKiBAcGFyYW0ge1RvdWNoRXZlbnR9IGVcbiAgICovXG4gIHByaXZhdGUgX3RvdWNoRW5kKGUpIHtcbiAgICB0aGlzLl90b3VjaEVuZENhbGxlZCA9IHRydWU7XG4gICAgdGhpcy5fY2FuRHJhZyA9IGZhbHNlO1xuXG4gICAgLy8gY29uc29sZS5sb2coMSwgZS50YXJnZXQsIHRoaXMuX2N1cnJlbnREcm9wQ29udGFpbmVyKTtcblxuICAgIC8vIFVzZXIgc2VlbXMgdG8gY2xpY2tcbiAgICAvLyBpZiAoIXRoaXMuX2RyYWdSdW5uaW5nICYmIHRoaXMuX2hhbmRsZUNsaWNrKSB7XG4gICAgLy8gICB0aGlzLl9kaXNwYXRjaEV2ZW50KGUudGFyZ2V0LCAnY2xpY2snKTtcbiAgICAvLyAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAvLyAgIHJldHVybjtcbiAgICAvLyB9XG4gICAgaWYgKHRoaXMuX2N1cnJlbnREcm9wQ29udGFpbmVyKSB7XG4gICAgICB0aGlzLl9kaXNwYXRjaEV2ZW50KHRoaXMuX2N1cnJlbnREcm9wQ29udGFpbmVyLCAnZHJvcCcpO1xuICAgICAgdGhpcy5fZGlzcGF0Y2hFdmVudCh0aGlzLl9kcmFnU3JjLCAnZHJhZ2VuZCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBmaXJlIGRyYWdFdmVudCBldmVuIGlmIHRoZWlyIGlzIG5vIGRyb3BwYWJsZS4gQW5kIGFzc2lnbiBkcm9wRWZmZWN0IG5vbmUuXG4gICAgICAvLyBmb3Igb3VyIHB1cnBvc2UsIHRoaXMgd2lsbCBicmluZyBiYWNrIHRoZSBkcmFnIHRvIGl0cyBzdGFydCBwb3NpdGlvbiwgc2VlbCBkcmFnLWRyb3AtaW50ZXJhY3Rpb24tbWl4aW4udHNcbiAgICAgIGlmICh0aGlzLl9kcmFnUnVubmluZykge1xuICAgICAgICBjb25zdCBldmVudCA9IG5ldyBDdXN0b21FdmVudCgnZHJhZ2VuZCcsIHsgYnViYmxlczogdHJ1ZSwgY2FuY2VsYWJsZTogdHJ1ZSB9KTtcbiAgICAgICAgZXZlbnRbJ2RhdGFUcmFuc2ZlciddID0geyBkcm9wRWZmZWN0OiAnbm9uZScgfTtcbiAgICAgICAgdGhpcy5fZHJhZ1NyYz8uZGlzcGF0Y2hFdmVudChldmVudCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5fcmVzZXQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmb3IgdG91Y2hjYW5jZWwgZXZlbnQgbGlzdGVuZXIsIGluIGNhc2UgYnJvd3NlciBzdXBwb3J0cyB0aGlzLlxuICAgKiBAcGFyYW0ge1RvdWNoRXZlbnR9IGVcbiAgICovXG4gIHByaXZhdGUgX3RvdWNoQ2FuY2VsKGUpIHtcbiAgICB0aGlzLl9yZXNldCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgdGhlIG5leHQgZHJvcHBhYmxlIGVsZW1lbnQgYXQgY3VycmVudCBwb2ludC5cbiAgICogQHBhcmFtIHtPYmplY3R9IHB0XG4gICAqL1xuICBwcml2YXRlIF9maW5kRHJvcHBhYmxlKGV2ZW50KSB7XG4gICAgY29uc3QgcG9pbnRGcm9tVG91Y2hFdmVudCA9IHRoaXMuX2dldFBvaW50KGV2ZW50KTtcbiAgICBjb25zdCB2aXNpdGVkID0gbmV3IFNldDxFbGVtZW50PigpO1xuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmdldEVsZW1lbnRXaXRoRHJvcHpvbmUoZG9jdW1lbnQsIHBvaW50RnJvbVRvdWNoRXZlbnQueCwgcG9pbnRGcm9tVG91Y2hFdmVudC55LCB2aXNpdGVkKTtcbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RWxlbWVudFdpdGhEcm9wem9uZShcbiAgICByb290OiBEb2N1bWVudE9yU2hhZG93Um9vdCxcbiAgICB4OiBudW1iZXIsXG4gICAgeTogbnVtYmVyLFxuICAgIHZpc2l0ZWQ6IFNldDxFbGVtZW50PlxuICApOiBFbGVtZW50IHwgbnVsbCB7XG4gICAgY29uc3QgZWwgPSByb290LmVsZW1lbnRGcm9tUG9pbnQoeCwgeSkgYXMgSFRNTEVsZW1lbnQgfCBudWxsO1xuICAgIGlmIChlbCkge1xuICAgICAgLy8gQ2hlY2sgaWYgd2UndmUgYWxyZWFkeSB2aXNpdGVkIHRoaXMgZWxlbWVudFxuICAgICAgaWYgKHZpc2l0ZWQuaGFzKGVsKSkge1xuICAgICAgICAvLyBQcmV2ZW50IGluZmluaXRlIHJlY3Vyc2lvbiBieSBub3QgcmV2aXNpdGluZyB0aGUgc2FtZSBlbGVtZW50XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgdmlzaXRlZC5hZGQoZWwpO1xuXG4gICAgICBpZiAoZWwuaGFzQXR0cmlidXRlKCdkcm9wem9uZScpKSB7XG4gICAgICAgIC8vIEZvdW5kIGFuIGVsZW1lbnQgd2l0aCAnZHJvcHpvbmUnOyByZXR1cm4gaXQgaW1tZWRpYXRlbHlcbiAgICAgICAgcmV0dXJuIGVsO1xuICAgICAgfVxuICAgICAgaWYgKGVsLnNoYWRvd1Jvb3QpIHtcbiAgICAgICAgLy8gUmVjdXJzaXZlbHkgc2VhcmNoIHdpdGhpbiB0aGUgU2hhZG93IERPTVxuICAgICAgICBjb25zdCBuZXN0ZWRFbCA9IHRoaXMuZ2V0RWxlbWVudFdpdGhEcm9wem9uZShlbC5zaGFkb3dSb290LCB4LCB5LCB2aXNpdGVkKTtcbiAgICAgICAgaWYgKG5lc3RlZEVsKSB7XG4gICAgICAgICAgLy8gSWYgYSBuZXN0ZWQgZWxlbWVudCB3aXRoICdkcm9wem9uZScgaXMgZm91bmQsIHJldHVybiBpdFxuICAgICAgICAgIHJldHVybiBuZXN0ZWRFbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gTm8gJ2Ryb3B6b25lJyBhdHRyaWJ1dGUgZm91bmQgaW4gZGVlcGVyIGxldmVsczsgcmV0dXJuIHRoZSBjdXJyZW50IGVsZW1lbnRcbiAgICAgIHJldHVybiBlbDtcbiAgICB9XG4gICAgLy8gTm8gZWxlbWVudCBmb3VuZCBhdCB0aGUgZ2l2ZW4gY29vcmRpbmF0ZXNcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgX2dldFBvaW50KGV2ZW50LCBwYWdlPykge1xuICAgIGlmIChldmVudCAmJiBldmVudC50b3VjaGVzKSB7XG4gICAgICBldmVudCA9IGV2ZW50LnRvdWNoZXNbMF07XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICB4OiBwYWdlID8gZXZlbnQucGFnZVggOiBldmVudC5jbGllbnRYLFxuICAgICAgeTogcGFnZSA/IGV2ZW50LnBhZ2VZIDogZXZlbnQuY2xpZW50WVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlcyB0aGUgb2Zmc2V0IGZvciBkaXNwbGF5aW5nIHRoZSBkcmFnIGNvcHkgdG8gaGF2ZSBhIHNlYW1sZXNzIGRyYWdnaW5nLlxuICAgKiBAcGFyYW0ge1RvdWNofSB0b3VjaCBUaGUgY3VycmVudCB0b3VjaC5cbiAgICovXG4gIHByaXZhdGUgX2NhbGN1bGF0ZURyYWdDb3B5UG9zaXRpb24odG91Y2gpIHtcbiAgICBjb25zdCBjbGllbnRSZWN0ID0gdGhpcy5fZHJhZ1NyYy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICB0aGlzLl9jb3B5T2Zmc2V0LnggPSB0b3VjaC5jbGllbnRYIC0gY2xpZW50UmVjdC5sZWZ0O1xuICAgIHRoaXMuX2NvcHlPZmZzZXQueSA9IHRvdWNoLmNsaWVudFkgLSBjbGllbnRSZWN0LnRvcDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGVzIHRoZSBwaXhlbCBkZWx0YSBiZXR3ZWVuIGZpcnN0IHRvdWNoIGFuZCB0aGUgY3VycmVudCB0b3VjaCBwb3NpdGlvbi5cbiAgICogQHBhcmFtIHtPYmplY3R9IHRvdWNoXG4gICAqL1xuICBwcml2YXRlIF9nZXREZWx0YSh0b3VjaCkge1xuICAgIGNvbnN0IHggPSBNYXRoLmFicyh0b3VjaC5jbGllbnRYIC0gdGhpcy5fdG91Y2hEb3duLngpO1xuICAgIGNvbnN0IHkgPSBNYXRoLmFicyh0b3VjaC5jbGllbnRZIC0gdGhpcy5fdG91Y2hEb3duLnkpO1xuXG4gICAgcmV0dXJuIHggKyB5O1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gZSBUaGUgZXZlbnQncyB0YXJnZXQgZWxlbWVudC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50VHlwZSBUaGUgdHlwZSBvZiB0aGUgZXZlbnQuXG4gICAqIEBwYXJhbSB7Ym9vbH0gYnViYmxlIFNldHMgd2hldGhlciB0aGUgZXZlbnQgc2hvdWxkIGJ1YmJsZS5cbiAgICovXG4gIHByaXZhdGUgX2Rpc3BhdGNoRXZlbnQoZSwgZXZlbnRUeXBlLCBidWJibGUgPSB0cnVlKSB7XG4gICAgaWYgKCFlKSByZXR1cm4gZmFsc2U7XG5cbiAgICBjb25zdCBldmVudCA9IG5ldyBDdXN0b21FdmVudChldmVudFR5cGUsIHsgYnViYmxlczogYnViYmxlLCBjYW5jZWxhYmxlOiB0cnVlIH0pO1xuICAgIGV2ZW50WydkYXRhVHJhbnNmZXInXSA9IHRoaXMuX2RhdGFUcmFuc2ZlcjtcbiAgICBlLmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xuICAgIHJldHVybiBldmVudC5kZWZhdWx0UHJldmVudGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0cyBhbGwgdmFyaWFibGVzIGFuZCBwcmVwYXJlcyBmb3IgbmV3IERyYWcgYW5kIERyb3AuXG4gICAqL1xuICBwcml2YXRlIF9yZXNldCgpIHtcbiAgICBpZiAodGhpcy5fZHJhZ1J1bm5pbmcpIHtcbiAgICAgIHRoaXMuX2RyYWdTcmMuc3R5bGUub3BhY2l0eSA9ICcxLjAnO1xuICAgICAgdGhpcy5fZHJhZ0NvcHkucGFyZW50RWxlbWVudC5yZW1vdmVDaGlsZCh0aGlzLl9kcmFnQ29weSk7XG4gICAgfVxuXG4gICAgdGhpcy5fZHJhZ1J1bm5pbmcgPSBmYWxzZTtcbiAgICB0aGlzLl9kcmFnU3JjID0gbnVsbDtcbiAgICB0aGlzLl9kcmFnQ29weSA9IG51bGw7XG4gICAgdGhpcy5fY2FuRHJhZyA9IGZhbHNlO1xuXG4gICAgdGhpcy5fdG91Y2hCZWdpbiA9IDA7XG4gICAgdGhpcy5fdG91Y2hEb3duID0gbnVsbDtcbiAgICB0aGlzLl9sYXN0Q2xpY2sgPSAwO1xuICAgIHRoaXMuX3RvdWNoRW5kQ2FsbGVkID0gZmFsc2U7XG4gICAgdGhpcy5fZGF0YVRyYW5zZmVyID0ge1xuICAgICAgZGF0YToge30sXG4gICAgICBzZXREYXRhOiBmdW5jdGlvbiAodHlwZSwgdmFsKSB7XG4gICAgICAgIHRoaXMuZGF0YVt0eXBlXSA9IHZhbDtcbiAgICAgIH0sXG4gICAgICBnZXREYXRhOiBmdW5jdGlvbiAodHlwZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRhW3R5cGVdO1xuICAgICAgfSxcbiAgICAgIGVmZmVjdEFsbG93ZWQ6ICdtb3ZlJ1xuICAgIH07XG4gICAgdGhpcy5fY29weU9mZnNldCA9IHsgeDogMCwgeTogMCB9O1xuXG4gICAgdGhpcy5fbGFzdFRhcmdldCA9IG51bGw7XG4gICAgdGhpcy5fY3VycmVudERyb3BDb250YWluZXIgPSBudWxsO1xuICAgIHRoaXMuX2hhbmRsZUNsaWNrID0gdHJ1ZTtcbiAgfVxuXG4gIC8vIHByaXZhdGUgX2dldFBvc2l0aW9uRnJvbUV2ZW50KGU6IGFueSk6IHtcbiAgLy8gICB4OiBudW1iZXI7XG4gIC8vICAgeTogbnVtYmVyO1xuICAvLyB9IHtcbiAgLy8gICBsZXQgX3RvdWNoTW92ZTtcbiAgLy8gICBpZiAoZS50eXBlID09ICd0b3VjaHN0YXJ0JyB8fCBlLnR5cGUgPT0gJ3RvdWNobW92ZScgfHwgZS50eXBlID09ICd0b3VjaGVuZCcgfHwgZS50eXBlID09ICd0b3VjaGNhbmNlbCcpIHtcbiAgLy8gICAgIGNvbnN0IGV2dCA9IHR5cGVvZiBlLm9yaWdpbmFsRXZlbnQgPT09ICd1bmRlZmluZWQnID8gZSA6IGUub3JpZ2luYWxFdmVudDtcbiAgLy8gICAgIGNvbnN0IHRvdWNoID0gZXZ0LnRvdWNoZXNbMF0gfHwgZXZ0LmNoYW5nZWRUb3VjaGVzWzBdO1xuICAvLyAgICAgX3RvdWNoTW92ZSA9IHtcbiAgLy8gICAgICAgeDogdG91Y2gucGFnZVgsXG4gIC8vICAgICAgIHk6IHRvdWNoLnBhZ2VZXG4gIC8vICAgICB9O1xuICAvLyAgIH0gZWxzZSBpZiAoXG4gIC8vICAgICBlLnR5cGUgPT0gJ21vdXNlZG93bicgfHxcbiAgLy8gICAgIGUudHlwZSA9PSAnbW91c2V1cCcgfHxcbiAgLy8gICAgIGUudHlwZSA9PSAnbW91c2Vtb3ZlJyB8fFxuICAvLyAgICAgZS50eXBlID09ICdtb3VzZW92ZXInIHx8XG4gIC8vICAgICBlLnR5cGUgPT0gJ21vdXNlb3V0JyB8fFxuICAvLyAgICAgZS50eXBlID09ICdtb3VzZWVudGVyJyB8fFxuICAvLyAgICAgZS50eXBlID09ICdtb3VzZWxlYXZlJ1xuICAvLyAgICkge1xuICAvLyAgICAgX3RvdWNoTW92ZSA9IHtcbiAgLy8gICAgICAgeDogZS5jbGllbnRYLFxuICAvLyAgICAgICB5OiBlLmNsaWVudFlcbiAgLy8gICAgIH07XG4gIC8vICAgfVxuICAvLyAgIHJldHVybiBfdG91Y2hNb3ZlO1xuICAvLyB9XG59XG4iLCAiaW1wb3J0IHsgTGl0RWxlbWVudCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBwcm9wZXJ0eSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcblxudHlwZSBDb25zdHJ1Y3RvcjxUPiA9IG5ldyAoLi4uYXJnczogYW55W10pID0+IFQ7XG5cbmRlY2xhcmUgY2xhc3MgRHJvcHBhYmxlc0ludGVyZmFjZSB7fVxuXG4vLyBodHRwczovL25nLXJ1bi5jb20vZWRpdC85TUdyNWRZV0EyMEFpSnRweTVhej9vcGVuPWFwcCUyRmFwcC5jb21wb25lbnQuaHRtbFxuZXhwb3J0IGNvbnN0IERyb3BwYWJsZXNNaXhpbiA9IDxUIGV4dGVuZHMgQ29uc3RydWN0b3I8TGl0RWxlbWVudD4+KFxuICBzdXBlckNsYXNzOiBULFxuICBkcm9wcGFibGVzSW5TaGFkb3dSb290OiBib29sZWFuLFxuICBkcm9wcGFibGVzU2VsZWN0b3I6IHN0cmluZ1xuKSA9PiB7XG4gIGNsYXNzIERyb3BwYWJsZXNFbGVtZW50IGV4dGVuZHMgc3VwZXJDbGFzcyB7XG4gICAgcHJpdmF0ZSBvYnNlcnZlcjogTXV0YXRpb25PYnNlcnZlcjtcblxuICAgIEBwcm9wZXJ0eSh7IHR5cGU6IEJvb2xlYW4sIHJlZmxlY3Q6IHRydWUgfSkgZGlzYWJsZWQgPSBmYWxzZTtcblxuICAgIG92ZXJyaWRlIGZpcnN0VXBkYXRlZChjaGFuZ2VkUHJvcHMpOiB2b2lkIHtcbiAgICAgIC8vIGZvciBxdGktbWF0Y2gtaW50ZXJhY3Rpb24gdGhlIGRyYWcgaW50ZXJhY3Rpb24gY2FuIGJlIHJlcGxhY2Ugd2l0aCBhIHF0aS1tYXRjaC10YWJ1bGFyIGNsYXNzXG4gICAgICAvLyB3aGljaCBzaG93cyB0aGUgZGF0YSBpbiBhIGEgdGFidWxhciB3YXksIHNvIG5vIGRyYWcgZHJvcCBzaG91bGQgYmUgaW52b2x2ZWQgdGhlblxuICAgICAgaWYgKHRoaXMuY2xhc3NMaXN0LmNvbnRhaW5zKCdxdGktbWF0Y2gtdGFidWxhcicpKSByZXR1cm47XG5cbiAgICAgIHN1cGVyLmZpcnN0VXBkYXRlZChjaGFuZ2VkUHJvcHMpO1xuXG4gICAgICBjb25zdCBkcm9wcGFibGVzID0gQXJyYXkuZnJvbShcbiAgICAgICAgZHJvcHBhYmxlc0luU2hhZG93Um9vdFxuICAgICAgICAgID8gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoZHJvcHBhYmxlc1NlbGVjdG9yKVxuICAgICAgICAgIDogdGhpcy5xdWVyeVNlbGVjdG9yQWxsKGRyb3BwYWJsZXNTZWxlY3RvcilcbiAgICAgICk7XG5cbiAgICAgIHRoaXMuZHJhZ292ZXJIYW5kbGVyID0gdGhpcy5kcmFnb3ZlckhhbmRsZXIuYmluZCh0aGlzKTtcbiAgICAgIHRoaXMuZHJhZ2xlYXZlSGFuZGxlciA9IHRoaXMuZHJhZ2xlYXZlSGFuZGxlci5iaW5kKHRoaXMpO1xuICAgICAgdGhpcy5kcmFnZW50ZXJIYW5kbGVyID0gdGhpcy5kcmFnZW50ZXJIYW5kbGVyLmJpbmQodGhpcyk7XG5cbiAgICAgIHRoaXMuZHJvcEhhbmRsZXIgPSB0aGlzLmRyb3BIYW5kbGVyLmJpbmQodGhpcyk7XG5cbiAgICAgIGRyb3BwYWJsZXMuZm9yRWFjaChkID0+IHtcbiAgICAgICAgZC5zZXRBdHRyaWJ1dGUoJ2Ryb3B6b25lJywgJ21vdmUnKTtcbiAgICAgICAgZC5hZGRFdmVudExpc3RlbmVyKCdkcmFnbGVhdmUnLCB0aGlzLmRyYWdsZWF2ZUhhbmRsZXIpO1xuXG4gICAgICAgIHRoaXMuYXR0YWNoSGFuZGxlcihkKTtcbiAgICAgIH0pO1xuICAgICAgZm9yIChjb25zdCBkcm9wcGFibGUgb2YgZHJvcHBhYmxlcykge1xuICAgICAgICB0aGlzLm9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIobXV0YXRpb25zID0+IHtcbiAgICAgICAgICBtdXRhdGlvbnMuZm9yRWFjaChtdXRhdGlvbiA9PiB7XG4gICAgICAgICAgICBpZiAobXV0YXRpb24udHlwZSA9PT0gJ2F0dHJpYnV0ZXMnKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHByb3BOYW1lID0gbXV0YXRpb24uYXR0cmlidXRlTmFtZTtcbiAgICAgICAgICAgICAgc3dpdGNoIChwcm9wTmFtZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ2Rpc2FibGVkJzoge1xuICAgICAgICAgICAgICAgICAgY29uc3QgZGlzYWJsZWQgPSBkcm9wcGFibGUuaGFzQXR0cmlidXRlKCdkaXNhYmxlZCcpO1xuICAgICAgICAgICAgICAgICAgaWYgKCFkaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmF0dGFjaEhhbmRsZXIoZHJvcHBhYmxlKTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlSGFuZGxlcihkcm9wcGFibGUpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm9ic2VydmVyLm9ic2VydmUoZHJvcHBhYmxlLCB7XG4gICAgICAgICAgYXR0cmlidXRlczogdHJ1ZSAvL2NvbmZpZ3VyZSBpdCB0byBsaXN0ZW4gdG8gYXR0cmlidXRlIGNoYW5nZXNcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhdHRhY2hIYW5kbGVyKGRyb3BwYWJsZTogRWxlbWVudCkge1xuICAgICAgZHJvcHBhYmxlLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdvdmVyJywgdGhpcy5kcmFnb3ZlckhhbmRsZXIpO1xuICAgICAgZHJvcHBhYmxlLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdlbnRlcicsIHRoaXMuZHJhZ2VudGVySGFuZGxlcik7XG4gICAgICBkcm9wcGFibGUuYWRkRXZlbnRMaXN0ZW5lcignZHJvcCcsIHRoaXMuZHJvcEhhbmRsZXIpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVtb3ZlSGFuZGxlcihkcm9wcGFibGU6IEVsZW1lbnQpIHtcbiAgICAgIGRyb3BwYWJsZS5yZW1vdmVFdmVudExpc3RlbmVyKCdkcmFnb3ZlcicsIHRoaXMuZHJhZ292ZXJIYW5kbGVyKTtcbiAgICAgIGRyb3BwYWJsZS5yZW1vdmVFdmVudExpc3RlbmVyKCdkcmFnZW50ZXInLCB0aGlzLmRyYWdlbnRlckhhbmRsZXIpO1xuICAgICAgZHJvcHBhYmxlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Ryb3AnLCB0aGlzLmRyb3BIYW5kbGVyKTtcbiAgICB9XG5cbiAgICBvdmVycmlkZSBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICAgIC8vIGZvciBxdGktbWF0Y2gtaW50ZXJhY3Rpb24gdGhlIGRyYWcgaW50ZXJhY3Rpb24gY2FuIGJlIHJlcGxhY2Ugd2l0aCBhIHF0aS1tYXRjaC10YWJ1bGFyIGNsYXNzXG4gICAgICAvLyB3aGljaCBzaG93cyB0aGUgZGF0YSBpbiBhIGEgdGFidWxhciB3YXksIHNvIG5vIGRyYWcgZHJvcCBzaG91bGQgYmUgaW52b2x2ZWQgdGhlblxuICAgICAgaWYgKHRoaXMuY2xhc3NMaXN0LmNvbnRhaW5zKCdxdGktbWF0Y2gtdGFidWxhcicpKSByZXR1cm47XG5cbiAgICAgIHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgICB0aGlzLm9ic2VydmVyPy5kaXNjb25uZWN0KCk7XG4gICAgfVxuXG4gICAgZHJhZ2VudGVySGFuZGxlcihldjogRHJhZ0V2ZW50KSB7XG4gICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIGRyYWdvdmVySGFuZGxlcihldjogRHJhZ0V2ZW50KSB7XG4gICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgY29uc3QgZHJvcHBhYmxlID0gZXYuY3VycmVudFRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICAgIC8vIGRyb3BwYWJsZXNJblNoYWRvd1Jvb3RcbiAgICAgIC8vID8gZHJvcHBhYmxlLnNldEF0dHJpYnV0ZSgncGFydCcsIGRyb3BwYWJsZS5nZXRBdHRyaWJ1dGUoJ3BhcnQnKSArICcgYWN0aXZlJykgOlxuICAgICAgZHJvcHBhYmxlLnNldEF0dHJpYnV0ZSgnYWN0aXZlJywgJycpO1xuXG4gICAgICBldi5kYXRhVHJhbnNmZXIuZHJvcEVmZmVjdCA9ICdtb3ZlJztcblxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGRyb3BIYW5kbGVyKGV2OiBEcmFnRXZlbnQpIHtcbiAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBjb25zdCBkcm9wcGFibGUgPSBldi5jdXJyZW50VGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgICAgLy8gcGs6IGRyYWdnYWJsZXMgaW4gbGlnaHQgZG9tIGNhbiBiZSBkcmFnZ2VkIHRvIHNoYWRvd2RvbSwgdGhpcyBpcyBvbmUgb2YgdGhlIHJ1bGVzIG9mIHdlYmNvbXBvbmVudHMuXG4gICAgICAvLyBUaGV5IG1heSBub3QgY3JlYXRlIG5ldyBlbGVtZW50cyBpbiBsaWdodCBkb20uIFNvbWUgc29tZXRpbWVzcyBkcm9wIHpvbmVzIHNob3VsZCBiZSBnZW5lcmF0ZWRcbiAgICAgIC8vIGJ5IHRoZSB3ZWJjb21wb25lbnQuIFRoZW4gYSBkcmFnZ2FibGUgKCB3aGljaCBpcyBhbHdheXMgYWxyZWFkeSBjcmVhdGVkIGJ5IGEgd2ViY29tcG9uZW50IClcbiAgICAgIC8vIGNhbiBiZSBpbiBsaWdodCBkb20sIGVuIGNhbiBiZSBkcmFnZ2VkIHRvIHNoYWRvdyBkb20uXG4gICAgICAvLyB0aGlua2luZyBvZiBhbm90aGVyIHdheSB3aGVyZSB3ZSBqdXN0IGNoYW5nZSBzbG90cy4gTWF5YmUgdGhhdHMgYmV0dGVyLi5cbiAgICAgIGNvbnN0IGRyYWdnYWJsZUluTGlnaHREb20gPSB0aGlzLnF1ZXJ5U2VsZWN0b3IoYFtpZGVudGlmaWVyPSR7ZXYuZGF0YVRyYW5zZmVyLmdldERhdGEoJ3RleHQnKX1gKTtcbiAgICAgIGNvbnN0IGRyYWdnYWJsZSA9IGRyYWdnYWJsZUluTGlnaHREb21cbiAgICAgICAgPyBkcmFnZ2FibGVJbkxpZ2h0RG9tXG4gICAgICAgIDogdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoYFtpZGVudGlmaWVyPSR7ZXYuZGF0YVRyYW5zZmVyLmdldERhdGEoJ3RleHQnKX1gKTtcblxuICAgICAgaWYgKCFkcm9wcGFibGUpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgY2Fubm90IGZpbmQgZHJvcHBhYmxlLCB0YXJnZXQ6ICR7ZXYudGFyZ2V0ID8gSlNPTi5zdHJpbmdpZnkoZXYudGFyZ2V0KSA6ICdudWxsJ31gKTtcbiAgICAgIH0gZWxzZSBpZiAoZHJhZ2dhYmxlLnBhcmVudEVsZW1lbnQuZ2V0QXR0cmlidXRlKCdpZGVudGlmaWVyJykgIT09IGRyb3BwYWJsZS5nZXRBdHRyaWJ1dGUoJ2lkZW50aWZpZXInKSkge1xuICAgICAgICBkcm9wcGFibGUuYXBwZW5kQ2hpbGQoZHJhZ2dhYmxlKTtcbiAgICAgIH1cbiAgICAgIC8vIGRyb3BwYWJsZXNJblNoYWRvd1Jvb3RcbiAgICAgIC8vID8gZHJvcHBhYmxlLnNldEF0dHJpYnV0ZSgncGFydCcsIGRyb3BwYWJsZS5nZXRBdHRyaWJ1dGUoJ3BhcnQnKS5yZXBsYWNlKCdhY3RpdmUnLCAnJykudHJpbSgpKSA6XG4gICAgICBkcm9wcGFibGUucmVtb3ZlQXR0cmlidXRlKCdhY3RpdmUnKTtcblxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGRyYWdsZWF2ZUhhbmRsZXIoZXY6IERyYWdFdmVudCkge1xuICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgY29uc3QgZHJvcHBhYmxlID0gZXYuY3VycmVudFRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICAgIGRyb3BwYWJsZS5yZW1vdmVBdHRyaWJ1dGUoJ2FjdGl2ZScpO1xuICAgICAgZXYuZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3QgPSAnbm9uZSc7XG5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIERyb3BwYWJsZXNFbGVtZW50IGFzIENvbnN0cnVjdG9yPERyb3BwYWJsZXNJbnRlcmZhY2U+ICYgVDtcbn07XG4iLCAiLy8gVEhJUyBJUyBBIE1JWElOLCBUSElTIElTIEEgTUlYSU5cbi8vIFVTRSBMSUtFIFRISVNcbi8vIGBgYGNsYXNzIERyb3BMaXN0IGV4dGVuZHMgRmxpcHBhYmxlcyhMaXRFbGVtZW50KSB7YGBgXG4vLyBtaXhpbiB3aGljaCBhbmltYXRlcyBjaGlsZHJlbiB3aXRoIEZMSVBcbi8vIGEgY29tYmluYXRpb24gYmV0d2VlbiB0aGlzIGRpcmVjdGl2ZTpcbi8vIGh0dHBzOi8vbmctcnVuLmNvbS9lZGl0LzlNR3I1ZFlXQTIwQWlKdHB5NWF6P29wZW49YXBwJTJGYXBwLmNvbXBvbmVudC5odG1sXG4vLyBhbmQgYSB0dXRvcmlhbCBob3cgdG8gbWFrZSBhIG1peGluXG4vLyBodHRwczovL2xpdC5kZXYvZG9jcy9jb21wb3NpdGlvbi9taXhpbnMvXG5cbmltcG9ydCB7IExpdEVsZW1lbnQgfSBmcm9tICdsaXQnO1xuXG50eXBlIENvbnN0cnVjdG9yPFQ+ID0gbmV3ICguLi5hcmdzOiBhbnlbXSkgPT4gVDtcblxuZXhwb3J0IGRlY2xhcmUgY2xhc3MgRmxpcHBhYmxlc0ludGVyZmFjZSB7XG4gIGNvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQ7XG4gIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQ7XG59XG5cbi8vIGp1c3QgYSBjb252ZXJzaW9uIG9mIGEgYW5ndWxhciBGTElQIGRpcmVjdGl2ZSwgbWFkZSBhcyBhIE1peGluXG4vLyBodHRwczovL25nLXJ1bi5jb20vZWRpdC85TUdyNWRZV0EyMEFpSnRweTVhej9vcGVuPWFwcCUyRmFwcC5jb21wb25lbnQuaHRtbFxuZXhwb3J0IGNvbnN0IEZsaXBwYWJsZXNNaXhpbiA9IDxUIGV4dGVuZHMgQ29uc3RydWN0b3I8TGl0RWxlbWVudD4+KFxuICBzdXBlckNsYXNzOiBULFxuICBkcm9wcGFibGVzU2VsOiBzdHJpbmcsXG4gIGRyYWdnYWJsZXNTZWw6IHN0cmluZ1xuKSA9PiB7XG4gIGNsYXNzIEZsaXBwYWJsZXNFbGVtZW50IGV4dGVuZHMgc3VwZXJDbGFzcyB7XG4gICAgLy8gcHJpdmF0ZSBzdGF0ZSA9IG5ldyBNYXA8RWxlbWVudCwgYW55PigpO1xuICAgIC8vIHByaXZhdGUgb2JzZXJ2ZXI6IE11dGF0aW9uT2JzZXJ2ZXI7XG4gICAgLy8gZmxpcHBhYmxlc1NlbGVjdG9yOiBzdHJpbmc7XG4gICAgLy8gb3ZlcnJpZGUgYXN5bmMgZmlyc3RVcGRhdGVkKGNoYW5nZWRQcm9wcykge1xuICAgIC8vICAgYXdhaXQgdGhpcy51cGRhdGVDb21wbGV0ZTsgLy8gcGs6IHRoaXMgaXMgdGhlIGtleSB0byBjYWxjdWxhdGUgY29ycmVjdCBwcm9wb3J0aW9uc1xuICAgIC8vICAgY29uc3QgZHJhZ2dhYmxlcyA9IEFycmF5LmZyb20odGhpcy5xdWVyeVNlbGVjdG9yQWxsKGRyYWdnYWJsZXNTZWwpKTtcbiAgICAvLyAgIGRyYWdnYWJsZXMuZm9yRWFjaCgoZWxlbSkgPT4ge1xuICAgIC8vICAgICBjb25zdCB7IGxlZnQsIHRvcCwgd2lkdGgsIGhlaWdodCB9ID0gZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAvLyAgICAgdGhpcy5zdGF0ZS5zZXQoZWxlbSwgeyBsZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHQgfSk7XG4gICAgLy8gICB9KTtcbiAgICAvLyAgIHRoaXMub2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcih0aGlzLmFuaW1hdGVNZSk7XG4gICAgLy8gICBjb25zdCBkcm9wcGFibGVzID0gQXJyYXkuZnJvbSh0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwoZHJvcHBhYmxlc1NlbCkpO1xuICAgIC8vICAgZHJvcHBhYmxlcy5mb3JFYWNoKChkcmFnZ2FibGUpID0+IHtcbiAgICAvLyAgICAgdGhpcy5vYnNlcnZlci5vYnNlcnZlKGRyYWdnYWJsZSwgeyBjaGlsZExpc3Q6IHRydWUgfSk7XG4gICAgLy8gICB9KTtcbiAgICAvLyAgIHRoaXMub2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLCB7IGNoaWxkTGlzdDogdHJ1ZSB9KTtcbiAgICAvLyAgIHN1cGVyLmZpcnN0VXBkYXRlZChjaGFuZ2VkUHJvcHMpO1xuICAgIC8vIH1cbiAgICAvLyBwcml2YXRlIGFuaW1hdGVNZSA9ICgpID0+IHtcbiAgICAvLyAgIHRoaXMuc3RhdGUuZm9yRWFjaCgodmFsdWUsIGVsZW0pID0+IHtcbiAgICAvLyAgICAgY29uc3QgeyBsZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHQgfSA9IGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgLy8gICAgIGlmICh0aGlzLnN0YXRlLmdldChlbGVtKSA9PSBudWxsKSB7XG4gICAgLy8gICAgICAgdGhpcy5zdGF0ZS5zZXQoZWxlbSwgeyBsZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHQgfSk7XG4gICAgLy8gICAgIH1cbiAgICAvLyAgICAgY29uc3QgY2FjaGUgPSB0aGlzLnN0YXRlLmdldChlbGVtKTtcbiAgICAvLyAgICAgY29uc3QgZGVsdGFYID0gY2FjaGUubGVmdCAtIGxlZnQ7XG4gICAgLy8gICAgIGNvbnN0IGRlbHRhWSA9IGNhY2hlLnRvcCAtIHRvcDtcbiAgICAvLyAgICAgY29uc3QgZGVsdGFXID0gY2FjaGUud2lkdGggLyB3aWR0aDtcbiAgICAvLyAgICAgY29uc3QgZGVsdGFIID0gY2FjaGUuaGVpZ2h0IC8gaGVpZ2h0O1xuICAgIC8vICAgICB0aGlzLnN0YXRlLnNldChlbGVtLCB7IGxlZnQsIHRvcCwgd2lkdGgsIGhlaWdodCB9KTtcbiAgICAvLyAgICAgY29uc3QgeyBkdXJhdGlvbiwgZWFzaW5nIH0gPSB7IGR1cmF0aW9uOiAzNTAsIGVhc2luZzogJ2N1YmljLWJlemllcigwLjI2LCAwLjg2LCAwLjQ0LCAwLjk4NSknIH07XG4gICAgLy8gICAgIGVsZW0uYW5pbWF0ZShcbiAgICAvLyAgICAgICBbXG4gICAgLy8gICAgICAgICB7XG4gICAgLy8gICAgICAgICAgIHRyYW5zZm9ybU9yaWdpbjogJ3RvcCBsZWZ0JyxcbiAgICAvLyAgICAgICAgICAgdHJhbnNmb3JtOiBgXG4gICAgLy8gdHJhbnNsYXRlKCR7ZGVsdGFYfXB4LCAke2RlbHRhWX1weClcbiAgICAvLyBzY2FsZSgke2RlbHRhV30sICR7ZGVsdGFIfSlcbiAgICAvLyBgLFxuICAgIC8vICAgICAgICAgICAvLyB3aWR0aDogY2FjaGUud2lkdGgsXG4gICAgLy8gICAgICAgICAgIC8vIGhlaWdodDogY2FjaGUuaGVpZ2h0KyAncHgnLFxuICAgIC8vICAgICAgICAgICAvLyBvcGFjaXR5OiBjYWNoZS5vcGFjaXR5LFxuICAgIC8vICAgICAgICAgfSxcbiAgICAvLyAgICAgICAgIHtcbiAgICAvLyAgICAgICAgICAgdHJhbnNmb3JtT3JpZ2luOiAndG9wIGxlZnQnLFxuICAgIC8vICAgICAgICAgICB0cmFuc2Zvcm06ICdub25lJyxcbiAgICAvLyAgICAgICAgIH0sXG4gICAgLy8gICAgICAgXSxcbiAgICAvLyAgICAgICB7XG4gICAgLy8gICAgICAgICBkdXJhdGlvbixcbiAgICAvLyAgICAgICAgIGVhc2luZyxcbiAgICAvLyAgICAgICB9XG4gICAgLy8gICAgICk7XG4gICAgLy8gICB9KTtcbiAgICAvLyB9O1xuICAgIC8vIG92ZXJyaWRlIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xuICAgIC8vICAgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICAvLyAgIHRoaXMub2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgIC8vIH1cbiAgfVxuICByZXR1cm4gRmxpcHBhYmxlc0VsZW1lbnQgYXMgQ29uc3RydWN0b3I8RmxpcHBhYmxlc0ludGVyZmFjZT4gJiBUO1xufTtcbiIsICJpbXBvcnQgeyBMaXRFbGVtZW50IH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IElJbnRlcmFjdGlvbiB9IGZyb20gJy4uL2ludGVyYWN0aW9uL2ludGVyYWN0aW9uLmludGVyZmFjZSc7XG5pbXBvcnQgeyBEcm9wcGFibGVzTWl4aW4gfSBmcm9tICcuL2Ryb3BwYWJsZXMtbWl4aW4nO1xuaW1wb3J0IHsgRmxpcHBhYmxlc01peGluIH0gZnJvbSAnLi9mbGlwcGFibGVzLW1peGluJztcblxuaW1wb3J0IHsgcHJvcGVydHkgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBsaXZlUXVlcnkgfSBmcm9tICcuLi8uLi8uLi8uLi9kZWNvcmF0b3JzL2xpdmUtcXVlcnknO1xuaW1wb3J0IHsgd2F0Y2ggfSBmcm9tICcuLi8uLi8uLi8uLi9kZWNvcmF0b3JzL3dhdGNoJztcbmltcG9ydCB7IFRvdWNoRHJhZ0FuZERyb3AgfSBmcm9tICcuL2RyYWctZHJvcC1hcGknO1xuLy8ga2V5Ym9hcmQgbmF2aWdhdGFibGUgZHJhZyBkcm9wOiBodHRwczovL2NvZGVwZW4uaW8vU2l0ZVBvaW50L3Blbi92RXpYYmpcbi8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzU1MjQyMTk2L3R5cGVzY3JpcHQtYWxsb3dzLXRvLXVzZS1wcm9wZXItbXVsdGlwbGUtaW5oZXJpdGFuY2Utd2l0aC1taXhpbnMtYnV0LWZhaWxzLXRvLWNcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9taWNyb3NvZnQvVHlwZVNjcmlwdC9pc3N1ZXMvMTc3NDQjaXNzdWVjb21tZW50LTU1ODk5MDM4MVxuLy8gaHR0cHM6Ly9uZy1ydW4uY29tL2VkaXQvOU1HcjVkWVdBMjBBaUp0cHk1YXo/b3Blbj1hcHAlMkZhcHAuY29tcG9uZW50Lmh0bWxcblxudHlwZSBDb25zdHJ1Y3RvcjxUPiA9IG5ldyAoLi4uYXJnczogYW55W10pID0+IFQ7XG5cbmludGVyZmFjZSBJbnRlcmFjdGlvbkNvbmZpZ3VyYXRpb24ge1xuICBjb3B5U3R5bGVzRHJhZ0Nsb25lOiBib29sZWFuO1xuICBkcmFnQ2FuQmVQbGFjZWRCYWNrOiBib29sZWFuO1xuICBkcmFnT25DbGljazogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNvbnN0IERyYWdEcm9wSW50ZXJhY3Rpb25NaXhpbiA9IDxUIGV4dGVuZHMgQ29uc3RydWN0b3I8TGl0RWxlbWVudD4+KFxuICBzdXBlckNsYXNzOiBULFxuICBkcmFnZ2FibGVzU2VsZWN0b3I6IHN0cmluZyxcbiAgZHJvcHBhYmxlc0luU2hhZG93Um9vdDogYm9vbGVhbixcbiAgZHJvcHBhYmxlc1NlbGVjdG9yOiBzdHJpbmdcbikgPT4ge1xuICBjbGFzcyBEcmFnRHJvcEludGVyYWN0aW9uRWxlbWVudCBleHRlbmRzIEZsaXBwYWJsZXNNaXhpbihcbiAgICBEcm9wcGFibGVzTWl4aW4oc3VwZXJDbGFzcywgZHJvcHBhYmxlc0luU2hhZG93Um9vdCwgZHJvcHBhYmxlc1NlbGVjdG9yKSxcbiAgICBkcm9wcGFibGVzU2VsZWN0b3IsXG4gICAgZHJhZ2dhYmxlc1NlbGVjdG9yXG4gICkge1xuICAgIHByb3RlY3RlZCBkcmFnZ2FibGVzID0gbmV3IE1hcDxFbGVtZW50LCB7IHBhcmVudDogRWxlbWVudDsgaW5kZXg6IG51bWJlciB9PigpO1xuICAgIHByb3RlY3RlZCBkcm9wcGFibGVzOiBFbGVtZW50W107XG4gICAgZHJhZ0Ryb3BBcGk6IFRvdWNoRHJhZ0FuZERyb3A7XG5cbiAgICBAbGl2ZVF1ZXJ5KGRyYWdnYWJsZXNTZWxlY3RvcilcbiAgICByZUluaXREcmFnQW5kRHJvcChkcmFnc0FkZGVkOiBFbGVtZW50W10sIGRyYWdzUmVtb3ZlZDogRWxlbWVudFtdKSB7XG4gICAgICBpZiAodGhpcy5jbGFzc0xpc3QuY29udGFpbnMoJ3F0aS1tYXRjaC10YWJ1bGFyJykpIHJldHVybjtcblxuICAgICAgLy8gY2hlY2sgaWYgYWRkZWQgZWxlbWVudHMgYXJlIG5vdCBhbHJlYWR5IGluIGxpc3RcbiAgICAgIGNvbnN0IGRyYWdnYWJsZXMgPSBkcmFnc0FkZGVkLmZpbHRlcihkID0+ICF0aGlzLmRyYWdnYWJsZXMgfHwgIXRoaXMuZHJhZ2dhYmxlcy5nZXQoZCkpO1xuXG4gICAgICBpZiAoZHJhZ2dhYmxlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuZHJhZ0Ryb3BBcGkuYWRkRHJhZ2dhYmxlcyhkcmFnc0FkZGVkKTtcblxuICAgICAgICBkcmFnc0FkZGVkLmZvckVhY2goZWxlbSA9PiB7XG4gICAgICAgICAgLy8gc3RvcmUgaW5pdGlhbCBwb3NpdGlvbnMgb2YgZWxlbWVudHMsIGFuZCBvZiBjb3Vyc2UsIGp1c3QgdGhlIGVsZW1lbnRzIGZvciBsb29waW5nIGFuZCBzdWNoXG4gICAgICAgICAgdGhpcy5kcmFnZ2FibGVzLnNldChlbGVtLCB7XG4gICAgICAgICAgICBwYXJlbnQ6IGVsZW0ucGFyZW50RWxlbWVudCxcbiAgICAgICAgICAgIGluZGV4OiBBcnJheS5mcm9tKGVsZW0ucGFyZW50Tm9kZS5jaGlsZHJlbikuaW5kZXhPZihlbGVtKVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGVsZW0uc2V0QXR0cmlidXRlKCdxdGktZHJhZ2dhYmxlJywgJ3RydWUnKTtcbiAgICAgICAgICBlbGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdzdGFydCcsIHRoaXMuaGFuZGxlRHJhZ1N0YXJ0KTtcbiAgICAgICAgICBlbGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdlbmQnLCB0aGlzLmhhbmRsZURyYWdFbmQpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcsIGF0dHJpYnV0ZTogJ3Jlc3BvbnNlLWlkZW50aWZpZXInIH0pIHJlc3BvbnNlSWRlbnRpZmllcjogc3RyaW5nID0gJyc7XG5cbiAgICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6IGZhbHNlLCB0eXBlOiBPYmplY3QgfSkgY29uZmlndXJhdGlvbjogSW50ZXJhY3Rpb25Db25maWd1cmF0aW9uID0ge1xuICAgICAgY29weVN0eWxlc0RyYWdDbG9uZTogdHJ1ZSxcbiAgICAgIGRyYWdDYW5CZVBsYWNlZEJhY2s6IHRydWUsXG4gICAgICBkcmFnT25DbGljazogZmFsc2VcbiAgICB9O1xuICAgIEB3YXRjaCgnY29uZmlndXJhdGlvbicpXG4gICAgaGFuZGxlRHJhZ09wdGlvbnNDaGFuZ2VkKG9sZCwgZHJhZ09wdGlvbnMpIHtcbiAgICAgIHRoaXMuZHJhZ0Ryb3BBcGkuY29weVN0eWxlc0RyYWdDbG9uZSA9IGRyYWdPcHRpb25zLmNvcHlTdHlsZXNEcmFnQ2xvbmU7XG4gICAgICB0aGlzLmRyYWdEcm9wQXBpLmRyYWdPbkNsaWNrID0gZHJhZ09wdGlvbnMuZHJhZ09uQ2xpY2s7XG4gICAgfVxuXG4gICAgQHByb3BlcnR5KHsgdHlwZTogQm9vbGVhbiwgcmVmbGVjdDogdHJ1ZSB9KSBkaXNhYmxlZCA9IGZhbHNlO1xuICAgIEB3YXRjaCgnZGlzYWJsZWQnLCB7IHdhaXRVbnRpbEZpcnN0VXBkYXRlOiB0cnVlIH0pXG4gICAgaGFuZGxlRGlzYWJsZWRDaGFuZ2Uob2xkLCBkaXNhYmxlZDogYm9vbGVhbikge1xuICAgICAgdGhpcy5kcmFnZ2FibGVzLmZvckVhY2goKHMsIGNoKSA9PiB7XG4gICAgICAgIGRpc2FibGVkID8gY2guc2V0QXR0cmlidXRlKCdkaXNhYmxlZCcsICcnKSA6IGNoLnJlbW92ZUF0dHJpYnV0ZSgnZGlzYWJsZWQnKTtcbiAgICAgICAgZGlzYWJsZWQgPyBjaC5yZW1vdmVBdHRyaWJ1dGUoJ3F0aS1kcmFnZ2FibGUnKSA6IGNoLnNldEF0dHJpYnV0ZSgncXRpLWRyYWdnYWJsZScsICd0cnVlJyk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBAcHJvcGVydHkoeyB0eXBlOiBCb29sZWFuLCByZWZsZWN0OiB0cnVlIH0pIHJlYWRvbmx5ID0gZmFsc2U7XG4gICAgQHdhdGNoKCdyZWFkb25seScsIHsgd2FpdFVudGlsRmlyc3RVcGRhdGU6IHRydWUgfSlcbiAgICBoYW5kbGVSZWFkb25seUNoYW5nZShvbGQsIHJlYWRvbmx5OiBib29sZWFuKSB7XG4gICAgICB0aGlzLmRyYWdnYWJsZXMuZm9yRWFjaCgocywgY2gpID0+IHtcbiAgICAgICAgcmVhZG9ubHkgPyBjaC5zZXRBdHRyaWJ1dGUoJ3JlYWRvbmx5JywgJycpIDogY2gucmVtb3ZlQXR0cmlidXRlKCdyZWFkb25seScpO1xuICAgICAgICByZWFkb25seSA/IGNoLnJlbW92ZUF0dHJpYnV0ZSgncXRpLWRyYWdnYWJsZScpIDogY2guc2V0QXR0cmlidXRlKCdxdGktZHJhZ2dhYmxlJywgJ3RydWUnKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIEBwcm9wZXJ0eSh7IHR5cGU6IE51bWJlciwgcmVmbGVjdDogdHJ1ZSwgYXR0cmlidXRlOiAnbWluLWFzc29jaWF0aW9ucycgfSkgbWluQXNzb2NpYXRpb25zID0gMTtcbiAgICBAcHJvcGVydHkoeyB0eXBlOiBOdW1iZXIsIHJlZmxlY3Q6IHRydWUsIGF0dHJpYnV0ZTogJ21heC1hc3NvY2lhdGlvbnMnIH0pIG1heEFzc29jaWF0aW9ucyA9IDE7XG5cbiAgICBvdmVycmlkZSBmaXJzdFVwZGF0ZWQoY2hhbmdlZFByb3BzKTogdm9pZCB7XG4gICAgICBzdXBlci5maXJzdFVwZGF0ZWQoY2hhbmdlZFByb3BzKTtcbiAgICAgIHRoaXMuZHJvcHBhYmxlcyA9IEFycmF5LmZyb20oXG4gICAgICAgIGRyb3BwYWJsZXNJblNoYWRvd1Jvb3RcbiAgICAgICAgICA/IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKGRyb3BwYWJsZXNTZWxlY3RvcilcbiAgICAgICAgICA6IHRoaXMucXVlcnlTZWxlY3RvckFsbChkcm9wcGFibGVzU2VsZWN0b3IpXG4gICAgICApO1xuICAgICAgLy8gUEs6IE1heWJlIGxhdGVyLCBmb3Igbm93IHdlIGFzc3VtZSBkcm9wcGFibGVzIGFyZSBub3QgZHluYW1pY2x5IGFkZGVkIG9yIHJlbW92ZWRcbiAgICAgIC8vIC5maWx0ZXIoKGVsZW0pID0+ICF0aGlzLmRyb3BwYWJsZXMgfHwgIXRoaXMuZHJvcHBhYmxlcy5pbmNsdWRlcyhlbGVtKSk7XG4gICAgICAvLyB0aGlzLmRyb3BwYWJsZXMgPSB0aGlzLmRyb3BwYWJsZXMgPyB0aGlzLmRyb3BwYWJsZXMuY29uY2F0KG5ld0Ryb3BwYWJsZXMpIDogbmV3RHJvcHBhYmxlcztcbiAgICB9XG5cbiAgICBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG5cbiAgICAgIHRoaXMuZHJhZ0Ryb3BBcGkgPSBuZXcgVG91Y2hEcmFnQW5kRHJvcCgpO1xuXG4gICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoXG4gICAgICAgIG5ldyBDdXN0b21FdmVudDxEcmFnRHJvcEludGVyYWN0aW9uRWxlbWVudD4oJ3F0aS1yZWdpc3Rlci1pbnRlcmFjdGlvbicsIHtcbiAgICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICAgIGNvbXBvc2VkOiB0cnVlLFxuICAgICAgICAgIGRldGFpbDogdGhpc1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZURyYWdTdGFydCA9IChldjogYW55KSA9PiB7XG4gICAgICBldi5kYXRhVHJhbnNmZXIuc2V0RGF0YSgndGV4dCcsIGV2LmN1cnJlbnRUYXJnZXQuZ2V0QXR0cmlidXRlKGBpZGVudGlmaWVyYCkpO1xuICAgICAgZXYuY3VycmVudFRhcmdldC5zZXRBdHRyaWJ1dGUoJ2RyYWdnaW5nJywgJycpO1xuXG4gICAgICAvLyBoaWdobGlnaHQgYWxsIGRyb3BwYWJsZXMgd2l0aCBhbiBhY3RpdmUgY2xhc3NcbiAgICAgIHRoaXMuZHJvcHBhYmxlcy5mb3JFYWNoKGQgPT4gZC5zZXRBdHRyaWJ1dGUoJ2VuYWJsZWQnLCAnJykpO1xuICAgIH07XG5cbiAgICBwcml2YXRlIGhhbmRsZURyYWdFbmQgPSAoZXY6IERyYWdFdmVudCkgPT4ge1xuICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHRoaXMuZHJvcHBhYmxlcy5mb3JFYWNoKGQgPT4gZC5yZW1vdmVBdHRyaWJ1dGUoJ2VuYWJsZWQnKSk7XG4gICAgICBjb25zdCBkcmFnZ2FibGUgPSBldi5jdXJyZW50VGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgICAgZHJhZ2dhYmxlLnJlbW92ZUF0dHJpYnV0ZSgnb3ZlcicpO1xuICAgICAgZHJhZ2dhYmxlLnJlbW92ZUF0dHJpYnV0ZSgnZHJhZ2dpbmcnKTtcblxuICAgICAgLy8gcGs6IGlmIG5vdCBkcm9wcGVkIG9uIGEgZHJvcCBsb2NhdGlvbiBwdXQgaXQgYmFjayB3aGVyZSBpdCBiZWxvbmdzXG4gICAgICBpZiAoZXYuZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3QgPT09ICdub25lJyB8fCBldi5kYXRhVHJhbnNmZXIuZHJvcEVmZmVjdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24uZHJhZ0NhbkJlUGxhY2VkQmFjaykge1xuICAgICAgICAgIHRoaXMucGxhY2VEcmFnZ2FibGVCYWNrKGRyYWdnYWJsZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChldi5kYXRhVHJhbnNmZXIuZHJvcEVmZmVjdCA9PT0gJ21vdmUnKSB7XG4gICAgICAgIHRoaXMuc2F2ZVJlc3BvbnNlKCk7XG4gICAgICAgIHRoaXMuY2hlY2tNYXhNYXRjaEFzc29jaWF0aW9ucygpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBwcml2YXRlIHBsYWNlRHJhZ2dhYmxlQmFjayhkcmFnZ2FibGU6IEhUTUxFbGVtZW50KSB7XG4gICAgICBjb25zdCBwb3NpdGlvbiA9IHRoaXMuZHJhZ2dhYmxlcy5nZXQoZHJhZ2dhYmxlKTtcbiAgICAgIGNvbnN0IGluZGV4ID1cbiAgICAgICAgcG9zaXRpb24uaW5kZXggPD0gcG9zaXRpb24ucGFyZW50LmNoaWxkcmVuLmxlbmd0aCA/IHBvc2l0aW9uLmluZGV4IDogcG9zaXRpb24ucGFyZW50LmNoaWxkcmVuLmxlbmd0aCAtIDE7XG4gICAgICBjb25zdCBpbnRlcmFjdGlvbiA9IHBvc2l0aW9uLnBhcmVudDtcbiAgICAgIGNvbnN0IGdhcFRleHQgPSBwb3NpdGlvbi5wYXJlbnQuY2hpbGRyZW5baW5kZXhdO1xuXG4gICAgICBpbnRlcmFjdGlvbi5pbnNlcnRCZWZvcmUoZHJhZ2dhYmxlLCBnYXBUZXh0KTtcbiAgICAgIHRoaXMuc2F2ZVJlc3BvbnNlKCk7XG4gICAgICB0aGlzLmNoZWNrTWF4TWF0Y2hBc3NvY2lhdGlvbnMoKTtcbiAgICB9XG5cbiAgICByZXNldChzYXZlID0gdHJ1ZSk6IHZvaWQge1xuICAgICAgdGhpcy5kcmFnZ2FibGVzLmZvckVhY2goKHBvc2l0aW9uLCBkcmFnZ2FibGUpID0+IHtcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBwb3NpdGlvbi5wYXJlbnQuY2hpbGRyZW47XG4gICAgICAgIGNvbnN0IGluZGV4ID0gcG9zaXRpb24uaW5kZXggPCBjaGlsZHJlbi5sZW5ndGggPyBwb3NpdGlvbi5pbmRleCA6IGNoaWxkcmVuLmxlbmd0aDtcbiAgICAgICAgcG9zaXRpb24ucGFyZW50Lmluc2VydEJlZm9yZShkcmFnZ2FibGUsIGNoaWxkcmVuW2luZGV4XSk7XG4gICAgICB9KTtcbiAgICAgIHNhdmUgJiYgdGhpcy5zYXZlUmVzcG9uc2UoKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgY2hlY2tNYXhNYXRjaEFzc29jaWF0aW9ucygpIHtcbiAgICAgIHRoaXMuZHJvcHBhYmxlcy5mb3JFYWNoKGQgPT4ge1xuICAgICAgICBjb25zdCBtYXhNYXRjaCA9ICsoZC5nZXRBdHRyaWJ1dGUoJ21hdGNoLW1heCcpIHx8IDEpO1xuICAgICAgICAvLyBjb25zdCBtYXhNaW4gPSArKGQuZ2V0QXR0cmlidXRlKCdtYXRjaC1taW4nKSB8fCAwKTtcbiAgICAgICAgLy8gY29uc3QgZGlzYWJsZSA9IG1heE1hdGNoIDw9IChkLmNoaWxkcmVuLmxlbmd0aCB8fCAwKTtcbiAgICAgICAgY29uc3QgZGlzYWJsZSA9IG1heE1hdGNoIDw9IChkLnF1ZXJ5U2VsZWN0b3JBbGwoJ1txdGktZHJhZ2dhYmxlPVwidHJ1ZVwiXScpLmxlbmd0aCB8fCAwKTtcblxuICAgICAgICBkaXNhYmxlID8gZC5zZXRBdHRyaWJ1dGUoJ2Rpc2FibGVkJywgJycpIDogZC5yZW1vdmVBdHRyaWJ1dGUoJ2Rpc2FibGVkJyk7XG4gICAgICAgIGRpc2FibGUgPyBkLnJlbW92ZUF0dHJpYnV0ZSgnZHJvcHpvbmUnKSA6IGQuc2V0QXR0cmlidXRlKCdkcm9wem9uZScsICdtb3ZlJyk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBzZXQgcmVzcG9uc2UocmVzcG9uc2U6IHN0cmluZ1tdKSB7XG4gICAgICAvLyBmb3IgcXRpLW1hdGNoLWludGVyYWN0aW9uIHRoZSBkcmFnIGludGVyYWN0aW9uIGNhbiBiZSByZXBsYWNlIHdpdGggYSBxdGktbWF0Y2gtdGFidWxhciBjbGFzc1xuICAgICAgLy8gd2hpY2ggc2hvd3MgdGhlIGRhdGEgaW4gYSBhIHRhYnVsYXIgd2F5LCBzbyBubyBkcmFnIGRyb3Agc2hvdWxkIGJlIGludm9sdmVkIHRoZW5cbiAgICAgIGlmICh0aGlzLmNsYXNzTGlzdC5jb250YWlucygncXRpLW1hdGNoLXRhYnVsYXInKSkgcmV0dXJuO1xuXG4gICAgICB0aGlzLnJlc2V0KGZhbHNlKTtcbiAgICAgIGlmIChyZXNwb25zZSAhPT0gbnVsbCAmJiBBcnJheS5pc0FycmF5KHJlc3BvbnNlKSlcbiAgICAgICAgcmVzcG9uc2UuZm9yRWFjaChyZXNwb25zZSA9PiB7XG4gICAgICAgICAgY29uc3QgW2Ryb3BJZCwgLi4uZHJhZ0lkc10gPSByZXNwb25zZS5zcGxpdCgnICcpLnJldmVyc2UoKTtcbiAgICAgICAgICBpZiAoZHJvcElkKSB7XG4gICAgICAgICAgICBjb25zdCBkcm9wcGFibGUgPSB0aGlzLmRyb3BwYWJsZXMuZmluZChkcm9wID0+IGRyb3AuZ2V0QXR0cmlidXRlKCdpZGVudGlmaWVyJykgPT09IGRyb3BJZCk7XG4gICAgICAgICAgICBkcmFnSWRzLmZvckVhY2goZHJhZ0lkID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgZHJhZ2dhYmxlID0gdGhpcy5xdWVyeVNlbGVjdG9yKGBbaWRlbnRpZmllcj0ke2RyYWdJZH1dYCk7XG4gICAgICAgICAgICAgIGlmICghZHJvcHBhYmxlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihgY2Fubm90IGZpbmQgZHJvcHBhYmxlIHdpdGggaWRlbnRpZmllcjogJHtkcm9wSWR9YCk7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoIWRyYWdnYWJsZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYGNhbm5vdCBmaW5kIGRyYWdnYWJsZSB3aXRoIGlkZW50aWZpZXI6ICR7ZHJhZ0lkfWApO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRyb3BwYWJsZS5hcHBlbmRDaGlsZChkcmFnZ2FibGUpO1xuICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tNYXhNYXRjaEFzc29jaWF0aW9ucygpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHZhbGlkYXRlKCkge1xuICAgICAgY29uc3QgZHJvcHBhYmxlcyA9IGRyb3BwYWJsZXNJblNoYWRvd1Jvb3RcbiAgICAgICAgPyBBcnJheS5mcm9tKHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKGRyb3BwYWJsZXNTZWxlY3RvcikpXG4gICAgICAgIDogQXJyYXkuZnJvbSh0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwoZHJvcHBhYmxlc1NlbGVjdG9yKSk7XG4gICAgICBjb25zdCBhc3NvY2lhdGlvbnMgPSBkcm9wcGFibGVzLmZpbHRlcihkID0+IGQuY2hpbGRFbGVtZW50Q291bnQgPiAwKS5sZW5ndGg7XG4gICAgICByZXR1cm4gdGhpcy5taW5Bc3NvY2lhdGlvbnMgPD0gMCB8fCB0aGlzLm1pbkFzc29jaWF0aW9ucyA8PSBhc3NvY2lhdGlvbnM7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHNhdmVSZXNwb25zZSgpIHtcbiAgICAgIGxldCByZXNwb25zZTogc3RyaW5nIHwgc3RyaW5nW107XG4gICAgICBpZiAodHlwZW9mICh0aGlzIGFzIGFueSkuZ2V0UmVzcG9uc2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgLy8gb25seSBmb3IgdGhlIHF0aS1vcmRlci1pbnRlcmFjdGlvbiwgYWJzdHJhY3RlZCB0aGlzIGF3YXkgaW4gYSBtZXRob2RcbiAgICAgICAgcmVzcG9uc2UgPSAodGhpcyBhcyBhbnkpLmdldFJlc3BvbnNlKCk7IC8vIENhbGwgdGhlIG1ldGhvZCBmcm9tIHRoZSBpbXBsZW1lbnRpbmcgY2xhc3NcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3BvbnNlID0gdGhpcy5kcm9wcGFibGVzLm1hcChkcm9wcGFibGUgPT4ge1xuICAgICAgICAgIGNvbnN0IGRyYWdzSW5Ecm9wcGFibGUgPSBkcm9wcGFibGUucXVlcnlTZWxlY3RvckFsbCgnW3F0aS1kcmFnZ2FibGU9XCJ0cnVlXCJdJyk7XG4gICAgICAgICAgY29uc3QgaWRlbnRpZmllcnMgPSBBcnJheS5mcm9tKGRyYWdzSW5Ecm9wcGFibGUpLm1hcChkID0+IGQuZ2V0QXR0cmlidXRlKCdpZGVudGlmaWVyJykpO1xuICAgICAgICAgIGNvbnN0IGRyb3BwYWJsZUlkZW50aWZpZXIgPSBkcm9wcGFibGUuZ2V0QXR0cmlidXRlKCdpZGVudGlmaWVyJyk7XG4gICAgICAgICAgcmV0dXJuIFsuLi5pZGVudGlmaWVycywgZHJvcHBhYmxlSWRlbnRpZmllcl0uam9pbignICcpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KFxuICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoJ3F0aS1pbnRlcmFjdGlvbi1yZXNwb25zZScsIHtcbiAgICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICAgIGNvbXBvc2VkOiB0cnVlLFxuICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgcmVzcG9uc2VJZGVudGlmaWVyOiB0aGlzLnJlc3BvbnNlSWRlbnRpZmllcixcbiAgICAgICAgICAgIHJlc3BvbnNlXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIERyYWdEcm9wSW50ZXJhY3Rpb25FbGVtZW50IGFzIENvbnN0cnVjdG9yPElJbnRlcmFjdGlvbj4gJiBUO1xufTtcbiIsICJpbXBvcnQgeyBodG1sIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQsIHByb3BlcnR5LCBzdGF0ZSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IEludGVyYWN0aW9uIH0gZnJvbSAnLi4vaW50ZXJuYWwvaW50ZXJhY3Rpb24vaW50ZXJhY3Rpb24nO1xuaW1wb3J0IHsgcmVtb3ZlRG91YmxlU2xhc2hlcyB9IGZyb20gJy4uLy4uL2ludGVybmFsL3V0aWxzJztcblxuQGN1c3RvbUVsZW1lbnQoJ3F0aS1jdXN0b20taW50ZXJhY3Rpb24nKVxuZXhwb3J0IGNsYXNzIFF0aUN1c3RvbUludGVyYWN0aW9uIGV4dGVuZHMgSW50ZXJhY3Rpb24ge1xuICAvLyBUaGlzIGN1c3RvbS1pbnRlcmFjdGlvbiBzdXBwb3J0IHRoZSBDRVMgQVBJIHdoaWNoIGlzIHVzZSBpbiBGQUNFVFxuICAvL1xuICAvLyBJdCB3b3JrcyBsaWtlIHRoaXM6XG4gIC8vIDEuIFRoZSBDSSBtYW5pZmVzdCBpcyBmZXRjaGVkXG4gIC8vIDIuIEFuIGlmcmFtZSBpcyBjcmVhdGVkIGFuZCB0aGUgZmlyc3Qgc3R5bGUgYW5kIGZpcnN0IHNjcmlwdCBmcm9tIHRoZSBtYW5pZmVzdCBhcmUgbG9hZGVkXG4gIC8vIDMuIFRoZSBmaXJzdCBzY3JpcHQgaXMgYm9vdHN0cmFwLmpzIHdoaWNoIGFsc28gY3JlYXRlcyBhbiBpZnJhbWUgYW5kIGxvYWRzIHRoZSBmaXJzdCBtZWRpYSBmcm9tIHRoZSBtYW5pZmVzdFxuICAvLyA0LiBDb21tdW5pY2F0aW9uIGlzIGRvbmUgdmlhIHRoZSBDRVMgQVBJIGJ1dCBiZWNhdXNlIHRoZSBpZnJhbWUgaXMgbm90IGFsbG93ZWQgdG8gYWNjZXNzIHRoZSBnbG9iYWwgQ0VTIG9iamVjdCB3ZSBuZWVkIHRvIHVzZSB3aW5kb3cucG9zdE1lc3NhZ2VcblxuICAvLyBUbyBhY2hpZXZlIHRoaXMgd2UgY2hhbmdlIHRoZSBwYWNrYWdlIGJ5IHJlcGxhY2luZyB0aGUgYm9vdHN0cmFwLmpzIHdpdGggb3VyIG93biBhbmQgaW5qZWN0IGEgcHJveHkgQ0VTIEFQSSB0aGF0IGNvbW11bmljYXRlcyB2aWEgcG9zdE1lc3NhZ2VcbiAgLy8gQmVjYXVzZSB3ZSBhbHNvIHdhbnQgdG8gcnVuIHRoaXMgaW4gc3Rvcnlib29rLCB3ZSBjYW5ub3QgdXNlIHdpbmRvdy50b3AgYmVjYXVzZSB0byBzZW5kIG1lc3NhZ2VzIHRoZXJlLCBiZWNhdXNlIGluIGNhc2Ugb2Ygc3Rvcnlib29rIHRoYXQgaXMgbm90IHRoZSB0b3Agd2luZG93LlxuICAvLyBTbyB3ZSBzZW5kIG1lc3NhZ2VzIHRvIGFsbCBwYXJlbnQgd2luZG93c1xuICBwcml2YXRlIHJhd1Jlc3BvbnNlOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmhhbmRsZVBvc3RNZXNzYWdlID0gdGhpcy5oYW5kbGVQb3N0TWVzc2FnZS5iaW5kKHRoaXMpO1xuICB9XG5cbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nLCBhdHRyaWJ1dGU6ICdyZXNwb25zZS1pZGVudGlmaWVyJyB9KVxuICByZXNwb25zZUlkZW50aWZpZXI6IHN0cmluZztcblxuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcsIGF0dHJpYnV0ZTogJ2RhdGEnIH0pXG4gIGRhdGE6IHN0cmluZztcblxuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcsIGF0dHJpYnV0ZTogJ2RhdGEtYmFzZS1pdGVtJyB9KVxuICBiYXNlSXRlbVVybDogc3RyaW5nO1xuXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZywgYXR0cmlidXRlOiAnZGF0YS1iYXNlLXJlZicgfSlcbiAgYmFzZVJlZlVybDogc3RyaW5nO1xuXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZywgYXR0cmlidXRlOiAnaWQnIH0pXG4gIGlkOiBzdHJpbmc7XG5cbiAgQHN0YXRlKClcbiAgcHJpdmF0ZSBfZXJyb3JNZXNzYWdlOiBzdHJpbmcgPSBudWxsO1xuICBtYW5pZmVzdDoge1xuICAgIHNjcmlwdDogc3RyaW5nW107XG4gICAgc3R5bGU6IHN0cmluZ1tdO1xuICAgIG1lZGlhOiBzdHJpbmdbXTtcbiAgfTtcblxuICBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuXG4gICAgY29uc3QgdXJpVG9NYW5pZmVzdCA9IHRoaXMuZGF0YS5zdGFydHNXaXRoKCdodHRwJylcbiAgICAgID8gdGhpcy5kYXRhXG4gICAgICA6IHJlbW92ZURvdWJsZVNsYXNoZXModGhpcy5iYXNlSXRlbVVybCArICcvJyArIHRoaXMuZGF0YSk7XG4gICAgLy8gZmV0Y2ggdGhlIGpzb24gZmlsZSBsb2NhdGVkIGF0IHRoZSBkYXRhIGF0dHJpYnV0ZVxuICAgIGZldGNoKHVyaVRvTWFuaWZlc3QpXG4gICAgICAudGhlbihyZXNwb25zZSA9PiByZXNwb25zZS5qc29uKCkpXG4gICAgICAudGhlbihkYXRhID0+IHtcbiAgICAgICAgdGhpcy5tYW5pZmVzdCA9IGRhdGE7XG4gICAgICAgIHRoaXMuc2V0dXBDRVMoKTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgdGhpcy5fZXJyb3JNZXNzYWdlID0gZXJyO1xuICAgICAgfSk7XG4gIH1cblxuICAvLyBNSDogQ2hhbmdlZCB0aGUgZGVmYXVsdCBib290c3RyYXAuanMgdG8gdXNlIHRoZSBuZXcgQ0VTIEFQSVxuICAvLyBCZWNhdXNlIHRoZSBvbGQgb25lIHVzZXMgdGhlIGdsb2JhbCBDRVMgb2JqZWN0IHRoYXQgaXMgbm90IGFsbG93ZWQgdG8gYmUgYWNjZXNzZWQgd2hlbiB0aGUgQ0lcbiAgLy8gaXMgZW1iZWRkZWQgaW4gYW4gaWZyYW1lIGFuZCBjb21pbmcgZnJvbSBhbm90aGVyIGRvbWFpblxuICAvLyBUaGVyZWZvciB3ZSBuZWVkIHRvIHVzZSB0aGUgbmV3IENFUyBBUEkgdG8gY29tbXVuaWNhdGVzIHZpYSB0aGUgYnJvYWRjYXN0IEFQSVxuICBzZXR1cENFUygpIHtcbiAgICBjb25zdCBpZnJhbWUgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcignI3BjaUNvbnRhaW5lcicpIGFzIEhUTUxJRnJhbWVFbGVtZW50LFxuICAgICAgaWZyYW1lV2luID0gaWZyYW1lLmNvbnRlbnRXaW5kb3cgfHwgaWZyYW1lLFxuICAgICAgaWZyYW1lRG9jID0gaWZyYW1lLmNvbnRlbnREb2N1bWVudDtcblxuICAgIC8vIGNvbnN0IGNoYW5uZWwgPSBuZXcgQnJvYWRjYXN0Q2hhbm5lbCgnY2VzX2NoYW5uZWwnKTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIHRoaXMuaGFuZGxlUG9zdE1lc3NhZ2UpO1xuICAgIGlmcmFtZURvYy5vcGVuKCk7XG4gICAgaWZyYW1lRG9jLndyaXRlKGBcbiAgICAgIDxodG1sPlxuICAgICAgICA8aGVhZD5cbiAgICAgICAgICA8bGluayBocmVmPScke3JlbW92ZURvdWJsZVNsYXNoZXMoYCR7dGhpcy5iYXNlUmVmVXJsfS8ke3RoaXMubWFuaWZlc3Quc3R5bGVbMF19YCl9JyByZWw9XCJzdHlsZXNoZWV0XCIgLz5cbiAgICAgICAgICA8c2NyaXB0IHNyYz0nJHtyZW1vdmVEb3VibGVTbGFzaGVzKGAke3RoaXMuYmFzZVJlZlVybH0vJHt0aGlzLm1hbmlmZXN0LnNjcmlwdFswXX1gKX0nPjwvc2NyaXB0PlxuICAgICAgICA8L2hlYWQ+XG4gICAgICAgIDxib2R5PjwvYm9keT5cbiAgICAgIDwvaHRtbD5cbiAgICAgIGApO1xuXG4gICAgaWZyYW1lRG9jLmNsb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIGdldElGcmFtZXMoKSB7XG4gICAgY29uc3QgaWZyYW1lc0luU2hhZG93Um9vdCA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKCdpZnJhbWUnKTtcbiAgICBjb25zdCBpZnJhbWUgPSB0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwoJ2lmcmFtZScpO1xuXG4gICAgY29uc3Qgb3V0ZXJJRnJhbWVzID0gWy4uLmlmcmFtZXNJblNoYWRvd1Jvb3QsIC4uLmlmcmFtZV07XG4gICAgZm9yIChjb25zdCBpZnJhbWUgb2Ygb3V0ZXJJRnJhbWVzKSB7XG4gICAgICBjb25zdCBpZnJhbWVTcmMgPSBpZnJhbWUuc3JjO1xuICAgICAgY29uc3QgaXNTYW1lT3JpZ2luID0gbmV3IFVSTChpZnJhbWVTcmMsIHdpbmRvdy5sb2NhdGlvbi5ocmVmKS5vcmlnaW4gPT09IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW47XG4gICAgICBpZiAoaXNTYW1lT3JpZ2luKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3Qgb3V0ZXJEb2MgPSBpZnJhbWUuY29udGVudERvY3VtZW50IHx8IGlmcmFtZS5jb250ZW50V2luZG93LmRvY3VtZW50O1xuICAgICAgICAgIGlmIChvdXRlckRvYykge1xuICAgICAgICAgICAgdGhpcy5nZXRJbm5lcklGcmFtZXMob3V0ZXJEb2MsIG91dGVySUZyYW1lcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgYWNjZXNzaW5nIG5lc3RlZCBpZnJhbWU6JywgZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgLy8gZ2V0IG9ubHkgdW5pcXVlIGlmcmFtZXNcbiAgICBvdXRlcklGcmFtZXMuZm9yRWFjaCgoaWZyYW1lLCBpbmRleCkgPT4ge1xuICAgICAgaWYgKG91dGVySUZyYW1lcy5pbmRleE9mKGlmcmFtZSkgIT09IGluZGV4KSB7XG4gICAgICAgIG91dGVySUZyYW1lcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBvdXRlcklGcmFtZXM7XG4gIH1cblxuICBwcml2YXRlIGdldElubmVySUZyYW1lcyhpZnJhbWVEb2N1bWVudDogRG9jdW1lbnQsIGlmcmFtZXMgPSBbXSkge1xuICAgIC8vIEdldCBhbGwgaWZyYW1lcyBpbiB0aGUgY3VycmVudCBkb2N1bWVudFxuICAgIGNvbnN0IGN1cnJlbnRJZnJhbWVzID0gaWZyYW1lRG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnaWZyYW1lJyk7XG5cbiAgICBjdXJyZW50SWZyYW1lcy5mb3JFYWNoKGlmcmFtZSA9PiB7XG4gICAgICAvLyBBZGQgdGhlIGN1cnJlbnQgaWZyYW1lIHRvIHRoZSBsaXN0XG4gICAgICBpZnJhbWVzLnB1c2goaWZyYW1lKTtcblxuICAgICAgLy8gUmVjdXJzaXZlbHkgZ2V0IGlmcmFtZXMgd2l0aGluIHRoZSBjdXJyZW50IGlmcmFtZVxuICAgICAgLy8gQ2hlY2sgaWYgdGhlIGlmcmFtZSBzcmMgaXMgZnJvbSB0aGUgc2FtZSBvcmlnaW5cbiAgICAgIGNvbnN0IGlmcmFtZVNyYyA9IGlmcmFtZS5zcmM7XG4gICAgICBjb25zdCBpc1NhbWVPcmlnaW4gPSBuZXcgVVJMKGlmcmFtZVNyYywgd2luZG93LmxvY2F0aW9uLmhyZWYpLm9yaWdpbiA9PT0gd2luZG93LmxvY2F0aW9uLm9yaWdpbjtcblxuICAgICAgaWYgKGlzU2FtZU9yaWdpbikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IG5lc3RlZERvYyA9IGlmcmFtZS5jb250ZW50RG9jdW1lbnQgfHwgaWZyYW1lLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQ7XG4gICAgICAgICAgdGhpcy5nZXRJbm5lcklGcmFtZXMobmVzdGVkRG9jLCBpZnJhbWVzKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGFjY2Vzc2luZyBuZXN0ZWQgaWZyYW1lOicsIGUpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLndhcm4oJ1NraXBwZWQgY3Jvc3Mtb3JpZ2luIGlmcmFtZTonLCBpZnJhbWVTcmMpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGlmcmFtZXM7XG4gIH1cblxuICBwcml2YXRlIHBvc3RUb1dpbmRvd0FuZElmcmFtZXModHlwZTogc3RyaW5nLCBkYXRhOiBhbnkpIHtcbiAgICB3aW5kb3cucG9zdE1lc3NhZ2UoeyB0eXBlLCBkYXRhIH0sICcqJyk7XG4gICAgY29uc3QgaWZyYW1lcyA9IHRoaXMuZ2V0SUZyYW1lcygpO1xuICAgIGZvciAoY29uc3QgaWZyYW1lIG9mIGlmcmFtZXMpIHtcbiAgICAgIGlmIChpZnJhbWUuY29udGVudFdpbmRvdykge1xuICAgICAgICBpZnJhbWUuY29udGVudFdpbmRvdy5wb3N0TWVzc2FnZSh7IHR5cGUsIGRhdGEgfSwgJyonKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBoYW5kbGVQb3N0TWVzc2FnZShldmVudDogTWVzc2FnZUV2ZW50KSB7XG4gICAgY29uc3QgeyB0eXBlLCBkYXRhIH0gPSBldmVudC5kYXRhO1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSAnc2V0UmVzcG9uc2UnOlxuICAgICAgICB0aGlzLnJhd1Jlc3BvbnNlID0gZGF0YTtcbiAgICAgICAgdGhpcy5zYXZlUmVzcG9uc2UoZGF0YSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZ2V0UmVzcG9uc2UnOiB7XG4gICAgICAgIHRoaXMucG9zdFRvV2luZG93QW5kSWZyYW1lcygncmVzcG9uc2VEYXRhJywgdGhpcy5yYXdSZXNwb25zZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnZ2V0TWVkaWEnOiB7XG4gICAgICAgIGNvbnN0IG1lZGlhRGF0YSA9IHRoaXMubWFuaWZlc3QubWVkaWEubWFwKG1lZGlhID0+IHtcbiAgICAgICAgICBjb25zdCB1cmwgPSBtZWRpYS5zdGFydHNXaXRoKCdodHRwJykgPyBtZWRpYSA6IHJlbW92ZURvdWJsZVNsYXNoZXModGhpcy5iYXNlUmVmVXJsICsgJy8nICsgbWVkaWEpO1xuICAgICAgICAgIHJldHVybiB1cmw7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnBvc3RUb1dpbmRvd0FuZElmcmFtZXMoJ21lZGlhRGF0YScsIG1lZGlhRGF0YSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnc2V0U3RhZ2VIZWlnaHQnOlxuICAgICAgICBjb25zb2xlLmxvZygnc2V0U3RhZ2VIZWlnaHQgbm90IGltcGxlbWVudGVkJyk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHZhbGlkYXRlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnJhd1Jlc3BvbnNlICE9PSAnJztcbiAgfVxuXG4gIHNldCByZXNwb25zZSh2YWw6IFJlYWRvbmx5PHN0cmluZyB8IHN0cmluZ1tdPikge1xuICAgIHRoaXMucmF3UmVzcG9uc2UgPSB2YWwgYXMgc3RyaW5nO1xuICB9XG5cbiAgb3ZlcnJpZGUgZGlzY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCB0aGlzLmhhbmRsZVBvc3RNZXNzYWdlKTtcbiAgICBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpO1xuICB9XG5cbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYDxpZnJhbWVcbiAgICAgICAgd2lkdGg9JHt0aGlzLmdldEF0dHJpYnV0ZSgnd2lkdGgnKX1cbiAgICAgICAgaGVpZ2h0PSR7dGhpcy5nZXRBdHRyaWJ1dGUoJ2hlaWdodCcpfVxuICAgICAgICBmcmFtZWJvcmRlcj1cIjBcIlxuICAgICAgICB0aXRsZT1cInBjaUNvbnRhaW5lclwiXG4gICAgICAgIGlkPVwicGNpQ29udGFpbmVyXCJcbiAgICAgID5cbiAgICAgIDwvaWZyYW1lPlxuICAgICAgJHt0aGlzLl9lcnJvck1lc3NhZ2UgJiZcbiAgICAgIGh0bWxgPGRpdiBzdHlsZT1cImNvbG9yOnJlZFwiPlxuICAgICAgICA8aDE+RXJyb3I8L2gxPlxuICAgICAgICAke3RoaXMuX2Vycm9yTWVzc2FnZX1cbiAgICAgIDwvZGl2PmB9YDtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktY3VzdG9tLWludGVyYWN0aW9uJzogUXRpQ3VzdG9tSW50ZXJhY3Rpb247XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBodG1sIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQsIHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgSW50ZXJhY3Rpb24gfSBmcm9tICcuLi9pbnRlcm5hbC9pbnRlcmFjdGlvbi9pbnRlcmFjdGlvbic7XG5AY3VzdG9tRWxlbWVudCgncXRpLWVuZC1hdHRlbXB0LWludGVyYWN0aW9uJylcbmV4cG9ydCBjbGFzcyBRdGlFbmRBdHRlbXB0SW50ZXJhY3Rpb24gZXh0ZW5kcyBJbnRlcmFjdGlvbiB7XG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZywgYXR0cmlidXRlOiAnY291bnQtYXR0ZW1wdCcgfSlcbiAgcHVibGljIGNvdW50QXR0ZW1wdDogc3RyaW5nID0gJ3RydWUnO1xuXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZyB9KVxuICBwdWJsaWMgdGl0bGU6ICdlbmQgYXR0ZW1wdCc7XG5cbiAgdmFsaWRhdGUoKTogYm9vbGVhbiB7XG4gICAgLy8gdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkLicpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHNldCByZXNwb25zZSh2YWw6IHVuZGVmaW5lZCkge1xuICAgIC8vIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcbiAgfVxuXG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICByZXR1cm4gaHRtbGA8YnV0dG9uID9kaXNhYmxlZD0ke3RoaXMuZGlzYWJsZWR9IHBhcnQ9XCJidXR0b25cIiBAY2xpY2s9JHt0aGlzLmVuZEF0dGVtcHR9PiR7dGhpcy50aXRsZX08L2J1dHRvbj5gO1xuICB9XG4gIHB1YmxpYyBlbmRBdHRlbXB0KGU6IEV2ZW50KSB7XG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KFxuICAgICAgbmV3IEN1c3RvbUV2ZW50KCdlbmQtYXR0ZW1wdCcsIHtcbiAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgY29tcG9zZWQ6IHRydWUsXG4gICAgICAgIGRldGFpbDogeyByZXNwb25zZUlkZW50aWZpZXI6IHRoaXMucmVzcG9uc2VJZGVudGlmaWVyLCBjb3VudEF0dGVtcHQ6IHRoaXMuY291bnRBdHRlbXB0ID09PSAndHJ1ZScgfVxuICAgICAgfSlcbiAgICApO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1lbmQtYXR0ZW1wdC1pbnRlcmFjdGlvbic6IFF0aUVuZEF0dGVtcHRJbnRlcmFjdGlvbjtcbiAgfVxufVxuIiwgImltcG9ydCB7IGNzcywgaHRtbCwgTGl0RWxlbWVudCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgRHJhZ0Ryb3BJbnRlcmFjdGlvbk1peGluIH0gZnJvbSAnLi4vaW50ZXJuYWwvZHJhZy1kcm9wL2RyYWctZHJvcC1pbnRlcmFjdGlvbi1taXhpbic7XG5cbkBjdXN0b21FbGVtZW50KCdxdGktZ2FwLW1hdGNoLWludGVyYWN0aW9uJylcbmV4cG9ydCBjbGFzcyBRdGlHYXBNYXRjaEludGVyYWN0aW9uIGV4dGVuZHMgRHJhZ0Ryb3BJbnRlcmFjdGlvbk1peGluKExpdEVsZW1lbnQsICdxdGktZ2FwLXRleHQnLCBmYWxzZSwgJ3F0aS1nYXAnKSB7XG4gIHN0YXRpYyBvdmVycmlkZSBzdHlsZXMgPSBbXG4gICAgY3NzYFxuICAgICAgOmhvc3Qge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgZ2FwOiAwLjVyZW07XG4gICAgICB9XG5cbiAgICAgIDpob3N0KC5xdGktY2hvaWNlcy10b3ApIHtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgIH1cbiAgICAgIDpob3N0KC5xdGktY2hvaWNlcy1ib3R0b20pIHtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlO1xuICAgICAgfVxuICAgICAgOmhvc3QoLnF0aS1jaG9pY2VzLWxlZnQpIHtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICAgIH1cbiAgICAgIDpob3N0KC5xdGktY2hvaWNlcy1yaWdodCkge1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7XG4gICAgICB9XG4gICAgICAvKiBbcGFydD0nZHJvcHMnXSAsICovXG4gICAgICBbcGFydD0nZHJhZ3MnXSB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICAgICAgICBmbGV4OiAxO1xuICAgICAgICBnYXA6IDAuNXJlbTtcbiAgICAgIH1cbiAgICBgXG4gIF07XG5cbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYCA8c2xvdCBwYXJ0PVwiZHJhZ3NcIiBuYW1lPVwicXRpLWdhcC10ZXh0XCI+PC9zbG90PlxuICAgICAgPHNsb3QgcGFydD1cImRyb3BzXCI+PC9zbG90PmA7XG4gIH1cblxuICBzZXQgY29ycmVjdFJlc3BvbnNlKHZhbHVlOiBSZWFkb25seTxzdHJpbmcgfCBzdHJpbmdbXT4pIHtcbiAgICBsZXQgbWF0Y2hlczogeyB0ZXh0OiBzdHJpbmc7IGdhcDogc3RyaW5nIH1bXSA9IFtdO1xuICAgIGNvbnN0IHJlc3BvbnNlID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZSA6IFt2YWx1ZV07XG5cbiAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgIG1hdGNoZXMgPSByZXNwb25zZS5tYXAoeCA9PiB7XG4gICAgICAgIGNvbnN0IHNwbGl0ID0geC5zcGxpdCgnICcpO1xuICAgICAgICByZXR1cm4geyB0ZXh0OiBzcGxpdFswXSwgZ2FwOiBzcGxpdFsxXSB9O1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgZ2FwcyA9IHRoaXMucXVlcnlTZWxlY3RvckFsbCgncXRpLWdhcCcpO1xuICAgIGdhcHMuZm9yRWFjaCgoZ2FwLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgaWRlbnRpZmllciA9IGdhcC5nZXRBdHRyaWJ1dGUoJ2lkZW50aWZpZXInKTtcbiAgICAgIGNvbnN0IHRleHRJZGVudGlmaWVyID0gbWF0Y2hlcy5maW5kKHggPT4geC5nYXAgPT09IGlkZW50aWZpZXIpPy50ZXh0O1xuICAgICAgY29uc3QgdGV4dCA9IHRoaXMucXVlcnlTZWxlY3RvcihgcXRpLWdhcC10ZXh0W2lkZW50aWZpZXI9XCIke3RleHRJZGVudGlmaWVyfVwiXWApPy50ZXh0Q29udGVudC50cmltKCk7XG4gICAgICBpZiAodGV4dElkZW50aWZpZXIgJiYgdGV4dCkge1xuICAgICAgICBpZiAoIWdhcC5uZXh0RWxlbWVudFNpYmxpbmc/LmNsYXNzTGlzdC5jb250YWlucygnY29ycmVjdC1vcHRpb24nKSkge1xuICAgICAgICAgIGNvbnN0IHRleHRTcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuICAgICAgICAgIHRleHRTcGFuLmNsYXNzTGlzdC5hZGQoJ2NvcnJlY3Qtb3B0aW9uJyk7XG4gICAgICAgICAgdGV4dFNwYW4udGV4dENvbnRlbnQgPSB0ZXh0O1xuICAgICAgICAgIGdhcC5pbnNlcnRBZGphY2VudEVsZW1lbnQoJ2FmdGVyZW5kJywgdGV4dFNwYW4pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGdhcC5uZXh0RWxlbWVudFNpYmxpbmc/LmNsYXNzTGlzdC5jb250YWlucygnY29ycmVjdC1vcHRpb24nKSkge1xuICAgICAgICBnYXAubmV4dEVsZW1lbnRTaWJsaW5nLnJlbW92ZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1nYXAtbWF0Y2gtaW50ZXJhY3Rpb24nOiBRdGlHYXBNYXRjaEludGVyYWN0aW9uO1xuICB9XG59XG4iLCAiLyogZXNsaW50LWRpc2FibGUgbGl0L25vLWludmFsaWQtaHRtbCAqL1xuaW1wb3J0IHsgY3NzLCBodG1sLCBzdmcgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCwgcXVlcnksIHF1ZXJ5QXNzaWduZWRFbGVtZW50cywgc3RhdGUgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBpZkRlZmluZWQgfSBmcm9tICdsaXQvZGlyZWN0aXZlcy9pZi1kZWZpbmVkLmpzJztcbmltcG9ydCB7IHJlcGVhdCB9IGZyb20gJ2xpdC9kaXJlY3RpdmVzL3JlcGVhdC5qcyc7XG5pbXBvcnQgeyBwb3NpdGlvbkhvdHNwb3RzIH0gZnJvbSAnLi4vaW50ZXJuYWwvaG90c3BvdHMvaG90c3BvdCc7XG5pbXBvcnQgeyBJbnRlcmFjdGlvbiB9IGZyb20gJy4uL2ludGVybmFsL2ludGVyYWN0aW9uL2ludGVyYWN0aW9uJztcbmltcG9ydCB7IFF0aUhvdHNwb3RDaG9pY2UgfSBmcm9tICcuLi9xdGktaG90c3BvdC1jaG9pY2UnO1xuXG5AY3VzdG9tRWxlbWVudCgncXRpLWdyYXBoaWMtYXNzb2NpYXRlLWludGVyYWN0aW9uJylcbmV4cG9ydCBjbGFzcyBRdGlHcmFwaGljQXNzb2NpYXRlSW50ZXJhY3Rpb24gZXh0ZW5kcyBJbnRlcmFjdGlvbiB7XG4gIGNob2ljZU9yZGVyaW5nOiBib29sZWFuO1xuICBob3RzcG90cztcbiAgc3RhcnRQb2ludCA9IG51bGw7XG4gIGVuZFBvaW50ID0gbnVsbDtcbiAgQHN0YXRlKCkgX2xpbmVzID0gW107XG4gIEBzdGF0ZSgpIHN0YXJ0Q29vcmQ6IHsgeDogYW55OyB5OiBhbnkgfTtcbiAgQHN0YXRlKCkgbW91c2VDb29yZDogeyB4OiBudW1iZXI7IHk6IG51bWJlciB9O1xuICBAcXVlcnkoJ3N2ZycpIHN2Z0NvbnRhaW5lcjtcbiAgQHF1ZXJ5QXNzaWduZWRFbGVtZW50cyh7IHNlbGVjdG9yOiAnaW1nJyB9KSBnckltYWdlO1xuXG4gIC8vIHRhcmdldCB0aGUgbWFpbiBzbG90IG1ha2UgaXQgcmVsYXRpdmUgYW5kIGZpdCB3aXRoIHRoZSBjb250ZW5cbiAgc3RhdGljIG92ZXJyaWRlIHN0eWxlcyA9IFtcbiAgICBjc3NgXG4gICAgICBzbG90Om5vdChbbmFtZT0ncHJvbXB0J10pIHtcbiAgICAgICAgLy8gcG9zaXRpb246IHJlbGF0aXZlOyAvKiBxdGktaG90c3BvdC1jaG9pY2UgcmVsYXRpdmUgdG8gdGhlIHNsb3QgKi9cbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIHdpZHRoOiBmaXQtY29udGVudDsgLyogaG90c3BvdHMgbm90IHN0cmV0Y2hpbmcgZnVydGhlciBpZiBpbWFnZSBpcyBhdCBtYXggc2l6ZSAqL1xuICAgICAgfVxuICAgICAgOjpzbG90dGVkKGltZykge1xuICAgICAgICAvKiBpbWFnZSBub3Qgc2VsZWN0YWJsZSBhbnltb3JlICovXG4gICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgICAgIH1cbiAgICAgIDo6c2xvdHRlZChxdGktYXNzb2NpYWJsZS1ob3RzcG90KSB7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xuICAgICAgfVxuICAgICAgbGluZS1jb250YWluZXIge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgfVxuICAgICAgc3ZnIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB0b3A6IDBweDtcbiAgICAgICAgbGVmdDogMHB4O1xuICAgICAgfVxuICAgIGBcbiAgXTtcbiAgc3ZnOiBTVkdTVkdFbGVtZW50O1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdxdGktcmVnaXN0ZXItaG90c3BvdCcsIHRoaXMucG9zaXRpb25Ib3RzcG90T25SZWdpc3Rlcik7XG4gIH1cblxuICByZXNldCgpOiB2b2lkIHtcbiAgICB0aGlzLl9saW5lcyA9IFtdO1xuICB9XG4gIHZhbGlkYXRlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9saW5lcy5sZW5ndGggPiAwO1xuICB9XG4gIHNldCByZXNwb25zZSh2YWw6IHN0cmluZyB8IHN0cmluZ1tdKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSkge1xuICAgICAgdGhpcy5fbGluZXMgPSB2YWw7XG4gICAgfVxuICB9XG5cbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYDxzbG90IG5hbWU9XCJwcm9tcHRcIj48L3Nsb3Q+XG4gICAgICA8bGluZS1jb250YWluZXI+XG4gICAgICAgIDxzdmdcbiAgICAgICAgICB3aWR0aD0ke2lmRGVmaW5lZCh0aGlzLmdySW1hZ2VbMF0/LndpZHRoKX1cbiAgICAgICAgICBoZWlnaHQ9JHtpZkRlZmluZWQodGhpcy5nckltYWdlWzBdPy5oZWlnaHQpfVxuICAgICAgICAgIHZpZXdib3g9XCIwIDAgJHt0aGlzLmdySW1hZ2VbMF0/LndpZHRofSAke3RoaXMuZ3JJbWFnZVswXT8uaGVpZ2h0fVwiXG4gICAgICAgID5cbiAgICAgICAgICAke3JlcGVhdChcbiAgICAgICAgICAgIHRoaXMuX2xpbmVzLFxuICAgICAgICAgICAgbGluZSA9PiBsaW5lLFxuICAgICAgICAgICAgKGxpbmUsIGluZGV4KSA9PiBzdmdgXG4gICAgICAgICAgICAgIDxsaW5lXG4gICAgICAgICAgICAgICAgcGFydD1cImxpbmVcIlxuICAgICAgICAgICAgICAgIHgxPSR7cGFyc2VJbnQodGhpcy5xdWVyeVNlbGVjdG9yPFNWR0xpbmVFbGVtZW50PignW2lkZW50aWZpZXI9JyArIGxpbmUuc3BsaXQoJyAnKVswXSArICddJykuc3R5bGUubGVmdCl9XG4gICAgICAgICAgICAgICAgeTE9JHtwYXJzZUludCh0aGlzLnF1ZXJ5U2VsZWN0b3I8U1ZHTGluZUVsZW1lbnQ+KCdbaWRlbnRpZmllcj0nICsgbGluZS5zcGxpdCgnICcpWzBdICsgJ10nKS5zdHlsZS50b3ApfVxuICAgICAgICAgICAgICAgIHgyPSR7cGFyc2VJbnQodGhpcy5xdWVyeVNlbGVjdG9yPFNWR0xpbmVFbGVtZW50PignW2lkZW50aWZpZXI9JyArIGxpbmUuc3BsaXQoJyAnKVsxXSArICddJykuc3R5bGUubGVmdCl9XG4gICAgICAgICAgICAgICAgeTI9JHtwYXJzZUludCh0aGlzLnF1ZXJ5U2VsZWN0b3I8U1ZHTGluZUVsZW1lbnQ+KCdbaWRlbnRpZmllcj0nICsgbGluZS5zcGxpdCgnICcpWzFdICsgJ10nKS5zdHlsZS50b3ApfVxuICAgICAgICAgICAgICAgIHN0cm9rZT1cInJlZFwiXG4gICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiM1wiXG4gICAgICAgICAgICAgICAgQGNsaWNrPSR7KGU6IEV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgICAgdGhpcy5fbGluZXMgPSB0aGlzLl9saW5lcy5maWx0ZXIoKF8sIGkpID0+IGkgIT09IGluZGV4KTtcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2F2ZVJlc3BvbnNlKHRoaXMuX2xpbmVzKTtcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgYFxuICAgICAgICAgICl9XG4gICAgICAgICAgJHt0aGlzLnN0YXJ0UG9pbnQgJiZcbiAgICAgICAgICBzdmdgPGxpbmVcbiAgICAgICAgICAgIHBhcnQ9XCJwb2ludFwiXG4gICAgICAgICAgICB4MT0ke3RoaXMuc3RhcnRDb29yZC54fVxuICAgICAgICAgICAgeTE9JHt0aGlzLnN0YXJ0Q29vcmQueX1cbiAgICAgICAgICAgIHgyPSR7dGhpcy5tb3VzZUNvb3JkLnh9XG4gICAgICAgICAgICB5Mj0ke3RoaXMubW91c2VDb29yZC55fVxuICAgICAgICAgICAgc3Ryb2tlPVwicmVkXCJcbiAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjNcIlxuICAgICAgICAgIC8+YH1cbiAgICAgICAgPC9zdmc+XG4gICAgICAgIDxzbG90Pjwvc2xvdD5cbiAgICAgIDwvbGluZS1jb250YWluZXI+YDtcbiAgfVxuXG4gIHByaXZhdGUgcG9zaXRpb25Ib3RzcG90T25SZWdpc3RlcihlOiBDdXN0b21FdmVudDxRdGlIb3RzcG90Q2hvaWNlPik6IHZvaWQge1xuICAgIGNvbnN0IGltZyA9IHRoaXMucXVlcnlTZWxlY3RvcignaW1nJykgYXMgSFRNTEltYWdlRWxlbWVudDtcbiAgICBjb25zdCBob3RzcG90ID0gZS50YXJnZXQgYXMgUXRpSG90c3BvdENob2ljZTtcbiAgICBjb25zdCBjb29yZHMgPSBob3RzcG90LmdldEF0dHJpYnV0ZSgnY29vcmRzJyk7XG4gICAgY29uc3Qgc2hhcGUgPSBob3RzcG90LmdldEF0dHJpYnV0ZSgnc2hhcGUnKTtcbiAgICBjb25zdCBjb29yZHNOdW1iZXIgPSBjb29yZHMuc3BsaXQoJywnKS5tYXAocyA9PiBwYXJzZUludChzKSk7XG4gICAgcG9zaXRpb25Ib3RzcG90cyhzaGFwZSwgY29vcmRzTnVtYmVyLCBpbWcsIGhvdHNwb3QpO1xuICB9XG5cbiAgb3ZlcnJpZGUgZmlyc3RVcGRhdGVkKGUpOiB2b2lkIHtcbiAgICBzdXBlci5maXJzdFVwZGF0ZWQoZSk7XG5cbiAgICB0aGlzLmhvdHNwb3RzID0gdGhpcy5xdWVyeVNlbGVjdG9yQWxsKCdxdGktYXNzb2NpYWJsZS1ob3RzcG90Jyk7XG5cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBldmVudCA9PiB7XG4gICAgICB0aGlzLm1vdXNlQ29vcmQgPSB7XG4gICAgICAgIHg6IGV2ZW50LmNsaWVudFggLSB0aGlzLmdySW1hZ2VbMF0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCxcbiAgICAgICAgeTogZXZlbnQuY2xpZW50WSAtIHRoaXMuZ3JJbWFnZVswXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3BcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICB0aGlzLmhvdHNwb3RzLmZvckVhY2goaG90c3BvdCA9PiB7XG4gICAgICBob3RzcG90LnN0eWxlLmxlZnQgPSBob3RzcG90LmdldEF0dHJpYnV0ZSgnY29vcmRzJykuc3BsaXQoJywnKVswXSArICdweCc7XG4gICAgICBob3RzcG90LnN0eWxlLnRvcCA9IGhvdHNwb3QuZ2V0QXR0cmlidXRlKCdjb29yZHMnKS5zcGxpdCgnLCcpWzFdICsgJ3B4JztcblxuICAgICAgaG90c3BvdC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGV2ZW50ID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLnN0YXJ0UG9pbnQpIHtcbiAgICAgICAgICB0aGlzLnN0YXJ0UG9pbnQgPSBldmVudC50YXJnZXQ7XG5cbiAgICAgICAgICB0aGlzLnN0YXJ0Q29vcmQgPSB7XG4gICAgICAgICAgICB4OiB0aGlzLnN0YXJ0UG9pbnQuZ2V0QXR0cmlidXRlKCdjb29yZHMnKS5zcGxpdCgnLCcpWzBdLFxuICAgICAgICAgICAgeTogdGhpcy5zdGFydFBvaW50LmdldEF0dHJpYnV0ZSgnY29vcmRzJykuc3BsaXQoJywnKVsxXVxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuZW5kUG9pbnQpIHtcbiAgICAgICAgICB0aGlzLmVuZFBvaW50ID0gZXZlbnQudGFyZ2V0O1xuXG4gICAgICAgICAgdGhpcy5fbGluZXMgPSBbXG4gICAgICAgICAgICAuLi50aGlzLl9saW5lcyxcbiAgICAgICAgICAgIHRoaXMuc3RhcnRQb2ludC5nZXRBdHRyaWJ1dGUoJ2lkZW50aWZpZXInKSArICcgJyArIHRoaXMuZW5kUG9pbnQuZ2V0QXR0cmlidXRlKCdpZGVudGlmaWVyJylcbiAgICAgICAgICBdO1xuICAgICAgICAgIHRoaXMuc2F2ZVJlc3BvbnNlKHRoaXMuX2xpbmVzKTtcbiAgICAgICAgICB0aGlzLnN0YXJ0UG9pbnQgPSBudWxsO1xuICAgICAgICAgIHRoaXMuZW5kUG9pbnQgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuICBvdmVycmlkZSBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcigncXRpLXJlZ2lzdGVyLWhvdHNwb3QnLCB0aGlzLnBvc2l0aW9uSG90c3BvdE9uUmVnaXN0ZXIpO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1ncmFwaGljLWFzc29jaWF0ZS1pbnRlcmFjdGlvbic6IFF0aUdyYXBoaWNBc3NvY2lhdGVJbnRlcmFjdGlvbjtcbiAgfVxufVxuIiwgImltcG9ydCB7IFF0aUhvdHNwb3RDaG9pY2UgfSBmcm9tICcuLi8uLi9xdGktaG90c3BvdC1jaG9pY2UnO1xuXG5leHBvcnQgZnVuY3Rpb24gcG9zaXRpb25Ib3RzcG90cyhcbiAgc2hhcGU6IHN0cmluZyxcbiAgY29vcmRzTnVtYmVyOiBudW1iZXJbXSxcbiAgaW1nOiBIVE1MSW1hZ2VFbGVtZW50LFxuICBob3RzcG90OiBRdGlIb3RzcG90Q2hvaWNlXG4pIHtcbiAgc3dpdGNoIChzaGFwZSkge1xuICAgIGNhc2UgJ2NpcmNsZSc6XG4gICAgICB7XG4gICAgICAgIGNvbnN0IFtjZW50ZXJYLCBjZW50ZXJZLCByYWRpdXNdID0gY29vcmRzTnVtYmVyO1xuICAgICAgICBjb25zdCBjZW50ZXJYUGVyID0gKGNlbnRlclggLyBpbWcud2lkdGgpICogMTAwO1xuICAgICAgICBjb25zdCBjZW50ZXJZUGVyID0gKGNlbnRlclkgLyBpbWcuaGVpZ2h0KSAqIDEwMDtcbiAgICAgICAgY29uc3QgcmFkaXVzUGVyID0gKHJhZGl1cyAvIGltZy53aWR0aCkgKiAxMDA7XG4gICAgICAgIGhvdHNwb3Quc3R5bGUubGVmdCA9IGNlbnRlclhQZXIgLSByYWRpdXNQZXIgKyAnJSc7XG4gICAgICAgIGhvdHNwb3Quc3R5bGUudG9wID0gY2VudGVyWVBlciAtIHJhZGl1c1BlciArICclJztcbiAgICAgICAgaG90c3BvdC5zdHlsZS53aWR0aCA9IGhvdHNwb3Quc3R5bGUuaGVpZ2h0ID0gNCAqIHJhZGl1c1BlciArICdweCc7XG4gICAgICAgIGhvdHNwb3Quc3R5bGUuYm9yZGVyUmFkaXVzID0gYDk5OTlweGA7XG4gICAgICB9XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3JlY3QnOlxuICAgICAge1xuICAgICAgICBjb25zdCBbbGVmdFgsIHRvcFksIHJpZ2h0WCwgYm90dG9tWV0gPSBjb29yZHNOdW1iZXI7XG4gICAgICAgIGNvbnN0IGxlZnRYUGVyID0gKGxlZnRYIC8gaW1nLndpZHRoKSAqIDEwMDtcbiAgICAgICAgY29uc3QgdG9wWVBlciA9ICh0b3BZIC8gaW1nLmhlaWdodCkgKiAxMDA7XG4gICAgICAgIGNvbnN0IHJpZ2h0WFBlciA9IChyaWdodFggLyBpbWcud2lkdGgpICogMTAwO1xuICAgICAgICBjb25zdCBib3R0b21ZUGVyID0gKGJvdHRvbVkgLyBpbWcuaGVpZ2h0KSAqIDEwMDtcbiAgICAgICAgaG90c3BvdC5zdHlsZS5sZWZ0ID0gbGVmdFhQZXIgKyAnJSc7XG4gICAgICAgIGhvdHNwb3Quc3R5bGUudG9wID0gdG9wWVBlciArICclJztcbiAgICAgICAgaG90c3BvdC5zdHlsZS53aWR0aCA9IHJpZ2h0WFBlciAtIGxlZnRYUGVyICsgJyUnO1xuICAgICAgICBob3RzcG90LnN0eWxlLmhlaWdodCA9IGJvdHRvbVlQZXIgLSB0b3BZUGVyICsgJyUnO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdwb2x5JzpcbiAgICAgIHtcbiAgICAgICAgLy8gZnJvbSBhLGIsYyxkLGUsZiA9PiBbe3g6YSwgeTpifSx7eDpjLCB5OmR9LHt4OmUsIHk6Zn1dXG4gICAgICAgIGNvbnN0IHBvbHljb29yZHMgPSBjb29yZHNOdW1iZXIucmVkdWNlKChhY2MsIGN1cnJlbnRWYWx1ZSwgY3VycmVudEluZGV4LCBwb2x5QykgPT4ge1xuICAgICAgICAgIGlmIChjdXJyZW50SW5kZXggJSAyID09PSAxKSB7XG4gICAgICAgICAgICBjb25zdCBsYXN0VmFsID0gYWNjLnBvcCgpO1xuICAgICAgICAgICAgYWNjW2FjYy5sZW5ndGhdID0geyB4OiBsYXN0VmFsLCB5OiBwb2x5Q1tjdXJyZW50SW5kZXhdIH07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFjYy5wdXNoKGN1cnJlbnRWYWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgIH0sIFtdKTtcblxuICAgICAgICAvLyBjYWxjdWxhdGUgYm91bmRpbmcgYm94IGJ5IGZpbmRpbmcgdGhlIG1heCBheCBtaW4gY29vcmRpbmF0ZXMgb2YgeCBhbmQgeVxuICAgICAgICBjb25zdCBsZWZ0WCA9IE1hdGgubWluKC4uLnBvbHljb29yZHMubWFwKHBvaW50ID0+IHBvaW50LngpKTtcbiAgICAgICAgY29uc3QgcmlnaHRYID0gTWF0aC5tYXgoLi4ucG9seWNvb3Jkcy5tYXAocG9pbnQgPT4gcG9pbnQueCkpO1xuICAgICAgICBjb25zdCB0b3BZID0gTWF0aC5taW4oLi4ucG9seWNvb3Jkcy5tYXAocG9pbnQgPT4gcG9pbnQueSkpO1xuICAgICAgICBjb25zdCBib3R0b21ZID0gTWF0aC5tYXgoLi4ucG9seWNvb3Jkcy5tYXAocG9pbnQgPT4gcG9pbnQueSkpO1xuXG4gICAgICAgIC8vIGNhbGN1bGF0ZSB0aGUgcmVsYXRpdmUgZGlzdGFuY2UgY2F1c2Ugd2Ugd2FudCB0byB1c2UgcGVyY2VudGFnZXNcbiAgICAgICAgY29uc3QgbGVmdFhQZXIgPSAobGVmdFggLyBpbWcud2lkdGgpICogMTAwO1xuICAgICAgICBjb25zdCB0b3BZUGVyID0gKHRvcFkgLyBpbWcuaGVpZ2h0KSAqIDEwMDtcbiAgICAgICAgY29uc3QgcmlnaHRYUGVyID0gKHJpZ2h0WCAvIGltZy53aWR0aCkgKiAxMDA7XG4gICAgICAgIGNvbnN0IGJvdHRvbVlQZXIgPSAoYm90dG9tWSAvIGltZy5oZWlnaHQpICogMTAwO1xuXG4gICAgICAgIC8vIHNldCB0aGUgaG90c3BvdCBvbiB4LHkgYW5kIHNldCB0aGUgd2lkdGggYW5kIGhlaWdodCBpbiBwZXJjZW50YWdlc1xuICAgICAgICBob3RzcG90LnN0eWxlLmxlZnQgPSAobGVmdFggLyBpbWcud2lkdGgpICogMTAwICsgJyUnO1xuICAgICAgICBob3RzcG90LnN0eWxlLnRvcCA9ICh0b3BZIC8gaW1nLmhlaWdodCkgKiAxMDAgKyAnJSc7XG4gICAgICAgIGhvdHNwb3Quc3R5bGUud2lkdGggPSByaWdodFhQZXIgLSBsZWZ0WFBlciArICclJztcbiAgICAgICAgaG90c3BvdC5zdHlsZS5oZWlnaHQgPSBib3R0b21ZUGVyIC0gdG9wWVBlciArICclJztcblxuICAgICAgICAvLyBhbGwgdGhlIHBvbHlnb24gcG9pbnRzIHNob3VsZCBiZSBjb3JyZWN0ZWQgY2F1c2VkIHRoZXkgYXJlIGZyb21cbiAgICAgICAgLy8gaW1hZ2UgMCwwIHBvaW50LCBhbmQgc2hvdWxkIGJlIGZyb20gdGhlIGhvdHNwb3QgcG9pbnQgd2hpY2ggYWxyZWFkeVxuICAgICAgICAvLyBoYXMgYmVlbiBvZmZzZXR0ZWQgZnJvbSB0aGUgaW1hZ2UgaW4gdGhlIHByZXZpb3VzIGZldyBsaW5lcyBvZiBjb2RlXG4gICAgICAgIC8vIGFsc28gdGhlIHBvaW50cyBoYXZlIGEgcmVsYXRpdmUgZGlzdGFuY2UgdG8gdGhlIGltYWdlLCBidXQgbm93IGhhdmVcbiAgICAgICAgLy8gdG8gaGF2ZSBhIHJlbGF0aXZlIGRpc3RhbmNlIGZyb20gdGhlIHdpZHRoIG9mIHRoZSBob3RzcG90XG4gICAgICAgIGNvbnN0IHBvbHlnb25EYXRhID0gcG9seWNvb3Jkcy5tYXAocG9pbnQgPT4gKHtcbiAgICAgICAgICB4OiAoKHBvaW50LnggLSBsZWZ0WCkgLyAocmlnaHRYIC0gbGVmdFgpKSAqIDEwMCxcbiAgICAgICAgICB5OiAoKHBvaW50LnkgLSB0b3BZKSAvIChib3R0b21ZIC0gdG9wWSkpICogMTAwXG4gICAgICAgIH0pKTtcblxuICAgICAgICAvLyBjcmVhdGUgY2xpcCBwYXRoIGNvb3JkaW5hdGUgc3R5bGUgaW4gcGVyY2VudGFnZXNcbiAgICAgICAgY29uc3QgcG9seUQgPSBwb2x5Z29uRGF0YS5tYXAocCA9PiBNYXRoLnJvdW5kKHAueCkgKyAnJSAnICsgTWF0aC5yb3VuZChwLnkpICsgJyUnKS5qb2luKCcsJyk7XG5cbiAgICAgICAgLy8gNTAlIDAlLCAxMDAlIDUwJSwgNTAlIDEwMCUsIDAlIDUwJVxuICAgICAgICBob3RzcG90LnN0eWxlLmNsaXBQYXRoID0gYHBvbHlnb24oJHtwb2x5RH0pYDtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIGJyZWFrO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgY3NzLCBodG1sLCBMaXRFbGVtZW50IH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBEcmFnRHJvcEludGVyYWN0aW9uTWl4aW4gfSBmcm9tICcuLi9pbnRlcm5hbC9kcmFnLWRyb3AvZHJhZy1kcm9wLWludGVyYWN0aW9uLW1peGluJztcbmltcG9ydCB7IFF0aUhvdHNwb3RDaG9pY2UgfSBmcm9tICcuLi9xdGktaG90c3BvdC1jaG9pY2UnO1xuXG5AY3VzdG9tRWxlbWVudCgncXRpLWdyYXBoaWMtZ2FwLW1hdGNoLWludGVyYWN0aW9uJylcbmV4cG9ydCBjbGFzcyBRdGlHcmFwaGljR2FwTWF0Y2hJbnRlcmFjdGlvbiBleHRlbmRzIERyYWdEcm9wSW50ZXJhY3Rpb25NaXhpbihcbiAgTGl0RWxlbWVudCxcbiAgJ3F0aS1nYXAtaW1nJyxcbiAgZmFsc2UsXG4gICdxdGktYXNzb2NpYWJsZS1ob3RzcG90J1xuKSB7XG4gIHN0YXRpYyBvdmVycmlkZSBzdHlsZXMgPSBjc3NgXG4gICAgOmhvc3Qge1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIH1cbiAgICBzbG90W25hbWU9J3F0aS1nYXAtaW1nJ10ge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGdhcDogMXJlbTtcbiAgICB9XG4gIGA7XG5cbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYCA8c2xvdD48L3Nsb3Q+XG4gICAgICA8c2xvdCBuYW1lPVwicXRpLWdhcC1pbWdcIj48L3Nsb3Q+YDtcbiAgfVxuXG4gIHByaXZhdGUgcG9zaXRpb25Ib3RzcG90T25SZWdpc3RlcihlOiBDdXN0b21FdmVudDxudWxsPik6IHZvaWQge1xuICAgIGNvbnN0IGltZyA9IHRoaXMucXVlcnlTZWxlY3RvcignaW1nJykgYXMgSFRNTEltYWdlRWxlbWVudDtcbiAgICBjb25zdCBob3RzcG90ID0gZS50YXJnZXQgYXMgUXRpSG90c3BvdENob2ljZTtcbiAgICBjb25zdCBjb29yZHMgPSBob3RzcG90LmdldEF0dHJpYnV0ZSgnY29vcmRzJyk7XG4gICAgY29uc3Qgc2hhcGUgPSBob3RzcG90LmdldEF0dHJpYnV0ZSgnc2hhcGUnKTtcbiAgICBjb25zdCBjb29yZHNOdW1iZXIgPSBjb29yZHMuc3BsaXQoJywnKS5tYXAocyA9PiBwYXJzZUludChzKSk7XG5cbiAgICAvLyBwb3NpdGlvbkhvdHNwb3RzKHNoYXBlLCBjb29yZHNOdW1iZXIsIGltZywgaG90c3BvdCk7XG4gICAgc3dpdGNoIChzaGFwZSkge1xuICAgICAgY2FzZSAnY2lyY2xlJzpcbiAgICAgICAge1xuICAgICAgICAgIGNvbnN0IFtjZW50ZXJYLCBjZW50ZXJZLCByYWRpdXNdID0gY29vcmRzTnVtYmVyO1xuICAgICAgICAgIGhvdHNwb3Quc3R5bGUubGVmdCA9IGNlbnRlclggLSByYWRpdXMgKyAncHgnO1xuICAgICAgICAgIGhvdHNwb3Quc3R5bGUudG9wID0gY2VudGVyWSAtIHJhZGl1cyArICdweCc7XG4gICAgICAgICAgaG90c3BvdC5zdHlsZS53aWR0aCA9IGhvdHNwb3Quc3R5bGUuaGVpZ2h0ID0gMiAqIHJhZGl1cyArICdweCc7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ3JlY3QnOlxuICAgICAgICB7XG4gICAgICAgICAgY29uc3QgW2xlZnRYLCB0b3BZLCByaWdodFgsIGJvdHRvbVldID0gY29vcmRzTnVtYmVyO1xuICAgICAgICAgIGhvdHNwb3Quc3R5bGUubGVmdCA9IGxlZnRYICsgJ3B4JztcbiAgICAgICAgICBob3RzcG90LnN0eWxlLnRvcCA9IHRvcFkgKyAncHgnO1xuICAgICAgICAgIGhvdHNwb3Quc3R5bGUud2lkdGggPSByaWdodFggLSBsZWZ0WCArICdweCc7XG4gICAgICAgICAgaG90c3BvdC5zdHlsZS5oZWlnaHQgPSBib3R0b21ZIC0gdG9wWSArICdweCc7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIG92ZXJyaWRlIGNvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xuICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdxdGktcmVnaXN0ZXItaG90c3BvdCcsIHRoaXMucG9zaXRpb25Ib3RzcG90T25SZWdpc3Rlcik7XG4gIH1cbiAgb3ZlcnJpZGUgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3F0aS1yZWdpc3Rlci1ob3RzcG90JywgdGhpcy5wb3NpdGlvbkhvdHNwb3RPblJlZ2lzdGVyKTtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktZ3JhcGhpYy1nYXAtbWF0Y2gtaW50ZXJhY3Rpb24nOiBRdGlHcmFwaGljR2FwTWF0Y2hJbnRlcmFjdGlvbjtcbiAgfVxufVxuIiwgImltcG9ydCB7IGNzcywgaHRtbCwgTGl0RWxlbWVudCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBDaG9pY2VzTWl4aW4gfSBmcm9tICcuLi9pbnRlcm5hbC9jaG9pY2VzL2Nob2ljZXMnO1xuaW1wb3J0IHsgUXRpSG90c3BvdENob2ljZSB9IGZyb20gJy4uL3F0aS1ob3RzcG90LWNob2ljZSc7XG5cbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBwb3NpdGlvbkhvdHNwb3RzIH0gZnJvbSAnLi4vaW50ZXJuYWwvaG90c3BvdHMvaG90c3BvdCc7XG5cbkBjdXN0b21FbGVtZW50KCdxdGktZ3JhcGhpYy1vcmRlci1pbnRlcmFjdGlvbicpXG5leHBvcnQgY2xhc3MgUXRpR3JhcGhpY09yZGVySW50ZXJhY3Rpb24gZXh0ZW5kcyBDaG9pY2VzTWl4aW4oTGl0RWxlbWVudCwgJ3F0aS1ob3RzcG90LWNob2ljZScpIHtcbiAgY2hvaWNlT3JkZXJpbmc6IGJvb2xlYW47XG5cbiAgLy8gZG8gbm90IHNlbGVjdCAoIGhpZ2hsaWdodCBibHVlLCB0aGUgaW1hZ2UpXG4gIC8vIHRhcmdldCB0aGUgbWFpbiBzbG90IG1ha2UgaXQgcmVsYXRpdmUgYW5kIGZpdCB3aXRoIHRoZSBjb250ZW5cbiAgc3RhdGljIG92ZXJyaWRlIHN0eWxlcyA9IFtcbiAgICBjc3NgXG4gICAgICBzbG90Om5vdChbbmFtZT0ncHJvbXB0J10pIHtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOyAvKiBxdGktaG90c3BvdC1jaG9pY2UgcmVsYXRpdmUgdG8gdGhlIHNsb3QgKi9cbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIHdpZHRoOiBmaXQtY29udGVudDsgLyogaG90c3BvdHMgbm90IHN0cmV0Y2hpbmcgZnVydGhlciBpZiBpbWFnZSBpcyBhdCBtYXggc2l6ZSAqL1xuICAgICAgfVxuICAgICAgOjpzbG90dGVkKGltZykge1xuICAgICAgICAvKiBpbWFnZSBub3Qgc2VsZWN0YWJsZSBhbnltb3JlICovXG4gICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgICAgIH1cbiAgICBgXG4gIF07XG5cbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYFxuICAgICAgPHNsb3QgbmFtZT1cInByb21wdFwiPjwvc2xvdD5cbiAgICAgIDwhLS0gc2xvdCBmb3IgdGhlIHByb21wdCAtLT5cbiAgICAgIDxzbG90Pjwvc2xvdD5cbiAgICAgIDwhLS0gc2xvdCBmb3IgdGhlIGltYWdlIGFuZCBob3RzcG90cyAtLT5cbiAgICBgO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRIb3RzcG90T3JkZXIoZTogQ3VzdG9tRXZlbnQ8eyBpZGVudGlmaWVyOiBzdHJpbmc7IGNoZWNrZWQ6IGJvb2xlYW4gfT4pOiB2b2lkIHtcbiAgICBjb25zdCB7IGlkZW50aWZpZXIgfSA9IGUuZGV0YWlsO1xuXG4gICAgY29uc3QgaG90c3BvdCA9IHRoaXMuX2Nob2ljZUVsZW1lbnRzLmZpbmQoZWwgPT4gZWwuZ2V0QXR0cmlidXRlKCdpZGVudGlmaWVyJykgPT09IGlkZW50aWZpZXIpIGFzIFF0aUhvdHNwb3RDaG9pY2U7XG5cbiAgICBjb25zdCBtYXhTZWxlY3Rpb24gPSB0aGlzLl9jaG9pY2VFbGVtZW50cy5sZW5ndGg7XG4gICAgaWYgKCF0aGlzLmNob2ljZU9yZGVyaW5nKSB7XG4gICAgICB0aGlzLmNob2ljZU9yZGVyaW5nID0gdHJ1ZTtcbiAgICAgIGlmIChob3RzcG90Lm9yZGVyID09IG51bGwpIHtcbiAgICAgICAgaWYgKCh0aGlzLl9jaG9pY2VFbGVtZW50cyBhcyBRdGlIb3RzcG90Q2hvaWNlW10pLmZpbHRlcihpID0+IGkub3JkZXIgPiAwKS5sZW5ndGggPj0gbWF4U2VsZWN0aW9uKSB7XG4gICAgICAgICAgdGhpcy5jaG9pY2VPcmRlcmluZyA9IGZhbHNlO1xuICAgICAgICAgIHJldHVybjsgLy8gZG9uJ3QgZG8gYW55dGhpbmcgaWYgdXNlciBhbHJlYWR5IHNlbGVjdGVkIDUgaW1hZ2VzLlxuICAgICAgICB9XG4gICAgICAgIGhvdHNwb3Qub3JkZXIgPSAodGhpcy5fY2hvaWNlRWxlbWVudHMgYXMgUXRpSG90c3BvdENob2ljZVtdKS5maWx0ZXIoaSA9PiAhIWkub3JkZXIpLmxlbmd0aCArIDE7XG4gICAgICAgIHRoaXMuY2hvaWNlT3JkZXJpbmcgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgKHRoaXMuX2Nob2ljZUVsZW1lbnRzIGFzIFF0aUhvdHNwb3RDaG9pY2VbXSkuZm9yRWFjaChob3RzcG90ID0+IHtcbiAgICAgICAgICBpZiAoaG90c3BvdC5vcmRlciA+IGhvdHNwb3Qub3JkZXIpIHtcbiAgICAgICAgICAgIGhvdHNwb3Qub3JkZXItLTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGhvdHNwb3Q7XG4gICAgICAgIH0pO1xuICAgICAgICBob3RzcG90Lm9yZGVyID0gbnVsbDtcbiAgICAgIH1cbiAgICAgIHRoaXMuY2hvaWNlT3JkZXJpbmcgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHBvc2l0aW9uSG90c3BvdE9uUmVnaXN0ZXIoZTogQ3VzdG9tRXZlbnQ8UXRpSG90c3BvdENob2ljZT4pOiB2b2lkIHtcbiAgICBjb25zdCBpbWcgPSB0aGlzLnF1ZXJ5U2VsZWN0b3IoJ2ltZycpIGFzIEhUTUxJbWFnZUVsZW1lbnQ7XG4gICAgY29uc3QgaG90c3BvdCA9IGUudGFyZ2V0IGFzIFF0aUhvdHNwb3RDaG9pY2U7XG4gICAgY29uc3QgY29vcmRzID0gaG90c3BvdC5nZXRBdHRyaWJ1dGUoJ2Nvb3JkcycpO1xuICAgIGNvbnN0IHNoYXBlID0gaG90c3BvdC5nZXRBdHRyaWJ1dGUoJ3NoYXBlJyk7XG4gICAgY29uc3QgY29vcmRzTnVtYmVyID0gY29vcmRzLnNwbGl0KCcsJykubWFwKHMgPT4gcGFyc2VJbnQocykpO1xuXG4gICAgcG9zaXRpb25Ib3RzcG90cyhzaGFwZSwgY29vcmRzTnVtYmVyLCBpbWcsIGhvdHNwb3QpO1xuICB9XG5cbiAgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3F0aS1jaG9pY2UtZWxlbWVudC1zZWxlY3RlZCcsIHRoaXMuc2V0SG90c3BvdE9yZGVyKTtcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3F0aS1yZWdpc3Rlci1jaG9pY2UnLCB0aGlzLnBvc2l0aW9uSG90c3BvdE9uUmVnaXN0ZXIpO1xuICB9XG4gIG92ZXJyaWRlIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdxdGktY2hvaWNlLWVsZW1lbnQtc2VsZWN0ZWQnLCB0aGlzLnNldEhvdHNwb3RPcmRlcik7XG4gICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdxdGktcmVnaXN0ZXItY2hvaWNlJywgdGhpcy5wb3NpdGlvbkhvdHNwb3RPblJlZ2lzdGVyKTtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktZ3JhcGhpYy1vcmRlci1pbnRlcmFjdGlvbic6IFF0aUdyYXBoaWNPcmRlckludGVyYWN0aW9uO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgY3NzLCBodG1sLCBMaXRFbGVtZW50IH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBDaG9pY2VzTWl4aW4gfSBmcm9tICcuLi9pbnRlcm5hbC9jaG9pY2VzL2Nob2ljZXMnO1xuaW1wb3J0IHsgcG9zaXRpb25Ib3RzcG90cyB9IGZyb20gJy4uL2ludGVybmFsL2hvdHNwb3RzL2hvdHNwb3QnO1xuaW1wb3J0IHsgUXRpSG90c3BvdENob2ljZSB9IGZyb20gJy4uL3F0aS1ob3RzcG90LWNob2ljZSc7XG5cbkBjdXN0b21FbGVtZW50KCdxdGktaG90c3BvdC1pbnRlcmFjdGlvbicpXG5leHBvcnQgY2xhc3MgUXRpSG90c3BvdEludGVyYWN0aW9uIGV4dGVuZHMgQ2hvaWNlc01peGluKExpdEVsZW1lbnQsICdxdGktaG90c3BvdC1jaG9pY2UnKSB7XG4gIC8vIGRvIG5vdCBzZWxlY3QgKCBoaWdobGlnaHQgYmx1ZSwgdGhlIGltYWdlKVxuICAvLyB0YXJnZXQgdGhlIG1haW4gc2xvdCBtYWtlIGl0IHJlbGF0aXZlIGFuZCBmaXQgd2l0aCB0aGUgY29udGVuXG4gIHN0YXRpYyBvdmVycmlkZSBzdHlsZXMgPSBbXG4gICAgY3NzYFxuICAgICAgc2xvdDpub3QoW25hbWU9J3Byb21wdCddKSB7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsgLyogcXRpLWhvdHNwb3QtY2hvaWNlIHJlbGF0aXZlIHRvIHRoZSBzbG90ICovXG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICB3aWR0aDogZml0LWNvbnRlbnQ7IC8qIGhvdHNwb3RzIG5vdCBzdHJldGNoaW5nIGZ1cnRoZXIgaWYgaW1hZ2UgaXMgYXQgbWF4IHNpemUgKi9cbiAgICAgIH1cbiAgICAgIDo6c2xvdHRlZChpbWcpIHtcbiAgICAgICAgLyogaW1hZ2Ugbm90IHNlbGVjdGFibGUgYW55bW9yZSAqL1xuICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7XG4gICAgICAgIC8qIHdpZHRoOjEwMCU7ICovXG4gICAgICB9XG4gICAgYFxuICBdO1xuICBvdmVycmlkZSByZW5kZXIoKSB7XG4gICAgcmV0dXJuIGh0bWxgXG4gICAgICA8c2xvdCBuYW1lPVwicHJvbXB0XCI+PC9zbG90PlxuICAgICAgPCEtLSBzbG90IGZvciB0aGUgcHJvbXB0IC0tPlxuICAgICAgPHNsb3Q+PC9zbG90PlxuICAgICAgPCEtLSBzbG90IGZvciB0aGUgaW1hZ2UgYW5kIGhvdHNwb3RzIC0tPlxuICAgIGA7XG4gIH1cblxuICBwcml2YXRlIHBvc2l0aW9uSG90c3BvdE9uUmVnaXN0ZXIoZTogQ3VzdG9tRXZlbnQ8UXRpSG90c3BvdENob2ljZT4pOiB2b2lkIHtcbiAgICBjb25zdCBpbWcgPSB0aGlzLnF1ZXJ5U2VsZWN0b3IoJ2ltZycpIGFzIEhUTUxJbWFnZUVsZW1lbnQ7XG4gICAgY29uc3QgaG90c3BvdCA9IGUudGFyZ2V0IGFzIFF0aUhvdHNwb3RDaG9pY2U7XG4gICAgY29uc3QgY29vcmRzID0gaG90c3BvdC5nZXRBdHRyaWJ1dGUoJ2Nvb3JkcycpO1xuICAgIGNvbnN0IHNoYXBlID0gaG90c3BvdC5nZXRBdHRyaWJ1dGUoJ3NoYXBlJyk7XG4gICAgY29uc3QgY29vcmRzTnVtYmVyID0gY29vcmRzLnNwbGl0KCcsJykubWFwKHMgPT4gcGFyc2VJbnQocykpO1xuXG4gICAgcG9zaXRpb25Ib3RzcG90cyhzaGFwZSwgY29vcmRzTnVtYmVyLCBpbWcsIGhvdHNwb3QpO1xuICB9XG5cbiAgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3F0aS1yZWdpc3Rlci1jaG9pY2UnLCB0aGlzLnBvc2l0aW9uSG90c3BvdE9uUmVnaXN0ZXIpO1xuICB9XG4gIG92ZXJyaWRlIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdxdGktcmVnaXN0ZXItY2hvaWNlJywgdGhpcy5wb3NpdGlvbkhvdHNwb3RPblJlZ2lzdGVyKTtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktaG90c3BvdC1pbnRlcmFjdGlvbic6IFF0aUhvdHNwb3RJbnRlcmFjdGlvbjtcbiAgfVxufVxuIiwgImltcG9ydCB7IGNzcywgaHRtbCwgTGl0RWxlbWVudCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBEcmFnRHJvcEludGVyYWN0aW9uTWl4aW4gfSBmcm9tICcuLi9pbnRlcm5hbC9kcmFnLWRyb3AvZHJhZy1kcm9wLWludGVyYWN0aW9uLW1peGluJztcblxuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCwgcHJvcGVydHksIHN0YXRlIH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgdW5zYWZlSFRNTCB9IGZyb20gJ2xpdC9kaXJlY3RpdmVzL3Vuc2FmZS1odG1sLmpzJztcbmltcG9ydCB7IFJlc3BvbnNlSW50ZXJhY3Rpb24gfSBmcm9tICcuLi8uLi9pbnRlcm5hbC9leHByZXNzaW9uLXJlc3VsdCc7XG5pbXBvcnQgJy4uL3F0aS1zaW1wbGUtYXNzb2NpYWJsZS1jaG9pY2UnO1xuaW1wb3J0IHsgUXRpU2ltcGxlQXNzb2NpYWJsZUNob2ljZSB9IGZyb20gJy4uL3F0aS1zaW1wbGUtYXNzb2NpYWJsZS1jaG9pY2UnO1xuXG5pbnRlcmZhY2UgQ29sdW1uIHtcbiAgaWQ6IG51bWJlcjtcbiAgbmFtZTogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgUm93IHtcbiAgaWQ6IG51bWJlcjtcbiAgbmFtZTogc3RyaW5nO1xuICBpc0NoZWNrZWQ6IGJvb2xlYW47XG59XG5cbkBjdXN0b21FbGVtZW50KCdxdGktbWF0Y2gtaW50ZXJhY3Rpb24nKVxuZXhwb3J0IGNsYXNzIFF0aU1hdGNoSW50ZXJhY3Rpb24gZXh0ZW5kcyBEcmFnRHJvcEludGVyYWN0aW9uTWl4aW4oXG4gIExpdEVsZW1lbnQsXG4gICdxdGktc2ltcGxlLW1hdGNoLXNldDpmaXJzdC1vZi10eXBlIHF0aS1zaW1wbGUtYXNzb2NpYWJsZS1jaG9pY2UnLFxuICBmYWxzZSxcbiAgJ3F0aS1zaW1wbGUtbWF0Y2gtc2V0Omxhc3Qtb2YtdHlwZSBxdGktc2ltcGxlLWFzc29jaWFibGUtY2hvaWNlJ1xuKSB7XG4gIHN0YXRpYyBvdmVycmlkZSBzdHlsZXMgPSBbXG4gICAgY3NzYFxuICAgICAgOmhvc3Qge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICBnYXA6IDAuNXJlbTtcbiAgICAgIH1cblxuICAgICAgLyogOmhvc3QoLnF0aS1jaG9pY2VzLXRvcCkge1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgfSAqL1xuICAgICAgOmhvc3QoLnF0aS1jaG9pY2VzLWJvdHRvbSkge1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uLXJldmVyc2U7XG4gICAgICB9XG4gICAgICA6aG9zdCgucXRpLWNob2ljZXMtbGVmdCkge1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICAgICAgfVxuICAgICAgOmhvc3QoLnF0aS1jaG9pY2VzLXJpZ2h0KSB7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZTtcbiAgICAgIH1cbiAgICBgXG4gIF07XG5cbiAgcm93czogUXRpU2ltcGxlQXNzb2NpYWJsZUNob2ljZVtdO1xuICBjb2xzOiBRdGlTaW1wbGVBc3NvY2lhYmxlQ2hvaWNlW107XG4gIGxhc3RDaGVja2VkUmFkaW86IEhUTUxJbnB1dEVsZW1lbnQgfCBudWxsID0gbnVsbDtcblxuICBAc3RhdGUoKSByZXNwb25zZSA9IFtdO1xuICBAc3RhdGUoKSBjb3JyZWN0T3B0aW9uczogc3RyaW5nW10gPSBbXTtcbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nLCBhdHRyaWJ1dGU6ICdyZXNwb25zZS1pZGVudGlmaWVyJyB9KSByZXNwb25zZUlkZW50aWZpZXI6IHN0cmluZyA9ICcnO1xuXG4gIGNvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xuICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgdGhpcy5yb3dzID0gQXJyYXkuZnJvbTxRdGlTaW1wbGVBc3NvY2lhYmxlQ2hvaWNlPihcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB3Yy9uby1jaGlsZC10cmF2ZXJzYWwtaW4tY29ubmVjdGVkY2FsbGJhY2tcbiAgICAgIHRoaXMucXVlcnlTZWxlY3RvckFsbCgncXRpLXNpbXBsZS1tYXRjaC1zZXQ6Zmlyc3Qtb2YtdHlwZSBxdGktc2ltcGxlLWFzc29jaWFibGUtY2hvaWNlJylcbiAgICApO1xuICAgIHRoaXMuY29scyA9IEFycmF5LmZyb208UXRpU2ltcGxlQXNzb2NpYWJsZUNob2ljZT4oXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgd2Mvbm8tY2hpbGQtdHJhdmVyc2FsLWluLWNvbm5lY3RlZGNhbGxiYWNrXG4gICAgICB0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwoJ3F0aS1zaW1wbGUtbWF0Y2gtc2V0Omxhc3Qtb2YtdHlwZSBxdGktc2ltcGxlLWFzc29jaWFibGUtY2hvaWNlJylcbiAgICApO1xuXG4gICAgdGhpcy5yZXNwb25zZSA9IFtdO1xuICB9XG5cbiAgaGFuZGxlUmFkaW9DbGljayA9IGUgPT4ge1xuICAgIGNvbnN0IHJhZGlvID0gZS50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICBpZiAodGhpcy5sYXN0Q2hlY2tlZFJhZGlvID09PSByYWRpbykge1xuICAgICAgcmFkaW8uY2hlY2tlZCA9IGZhbHNlO1xuICAgICAgdGhpcy5sYXN0Q2hlY2tlZFJhZGlvID0gbnVsbDtcbiAgICAgIHRoaXMuaGFuZGxlUmFkaW9DaGFuZ2UoZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubGFzdENoZWNrZWRSYWRpbyA9IHJhZGlvO1xuICAgIH1cbiAgfTtcblxuICBoYW5kbGVSYWRpb0NoYW5nZSA9IGUgPT4ge1xuICAgIGNvbnN0IGNoZWNrYm94ID0gZS50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICBjb25zdCB2YWx1ZSA9IGNoZWNrYm94LnZhbHVlO1xuICAgIGNvbnN0IG5hbWUgPSBjaGVja2JveC5uYW1lO1xuICAgIGNvbnN0IHR5cGUgPSBjaGVja2JveC50eXBlO1xuXG4gICAgaWYgKGNoZWNrYm94LmNoZWNrZWQpIHtcbiAgICAgIGlmICghdGhpcy5yZXNwb25zZSkge1xuICAgICAgICB0aGlzLnJlc3BvbnNlID0gW3ZhbHVlXTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5yZXNwb25zZS5pbmRleE9mKHZhbHVlKSA9PT0gLTEpIHtcbiAgICAgICAgaWYgKHR5cGUgPT09ICdyYWRpbycpIHtcbiAgICAgICAgICB0aGlzLnJlc3BvbnNlID0gdGhpcy5yZXNwb25zZS5maWx0ZXIodiA9PiB2LmluZGV4T2YobmFtZSkgPT09IC0xKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlc3BvbnNlID0gWy4uLnRoaXMucmVzcG9uc2UsIHZhbHVlXTtcbiAgICAgIH1cbiAgICAgIHRoaXMubGFzdENoZWNrZWRSYWRpbyA9IGNoZWNrYm94O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlc3BvbnNlID0gdGhpcy5yZXNwb25zZS5maWx0ZXIodiA9PiB2ICE9PSB2YWx1ZSk7XG4gICAgICB0aGlzLmxhc3RDaGVja2VkUmFkaW8gPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMucmVxdWVzdFVwZGF0ZSgpO1xuICAgIHRoaXMuZGlzcGF0Y2hFdmVudChcbiAgICAgIG5ldyBDdXN0b21FdmVudDxSZXNwb25zZUludGVyYWN0aW9uPigncXRpLWludGVyYWN0aW9uLXJlc3BvbnNlJywge1xuICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICBjb21wb3NlZDogdHJ1ZSxcbiAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgcmVzcG9uc2VJZGVudGlmaWVyOiB0aGlzLnJlc3BvbnNlSWRlbnRpZmllcixcbiAgICAgICAgICByZXNwb25zZTogQXJyYXkuaXNBcnJheSh0aGlzLnJlc3BvbnNlKSA/IFsuLi50aGlzLnJlc3BvbnNlXSA6IHRoaXMucmVzcG9uc2VcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICB9O1xuXG4gIHNldCBjb3JyZWN0UmVzcG9uc2UocmVzcG9uc2VWYWx1ZTogc3RyaW5nIHwgc3RyaW5nW10pIHtcbiAgICBpZiAocmVzcG9uc2VWYWx1ZSA9PT0gJycpIHtcbiAgICAgIHRoaXMuY29ycmVjdE9wdGlvbnMgPSBbXTtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkocmVzcG9uc2VWYWx1ZSkpIHtcbiAgICAgIHRoaXMuY29ycmVjdE9wdGlvbnMgPSByZXNwb25zZVZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICBpZiAoIXRoaXMuY2xhc3NMaXN0LmNvbnRhaW5zKCdxdGktbWF0Y2gtdGFidWxhcicpKSB7XG4gICAgICByZXR1cm4gaHRtbGA8c2xvdCBuYW1lPVwicHJvbXB0XCI+PC9zbG90PiA8c2xvdD48L3Nsb3Q+YDtcbiAgICB9XG4gICAgcmV0dXJuIGh0bWxgXG4gICAgICA8c2xvdCBuYW1lPVwicHJvbXB0XCI+PC9zbG90PlxuICAgICAgPHRhYmxlPlxuICAgICAgICA8dHI+XG4gICAgICAgICAgPHRkPjwvdGQ+XG4gICAgICAgICAgJHt0aGlzLmNvbHMubWFwKChjb2wsIGkpID0+IGh0bWxgPHRoIHBhcnQ9XCJyLWhlYWRlclwiPiR7dW5zYWZlSFRNTChjb2wuaW5uZXJIVE1MKX08L3RoPmApfVxuICAgICAgICA8L3RyPlxuXG4gICAgICAgICR7dGhpcy5yb3dzLm1hcChcbiAgICAgICAgICAocm93LCBySW5kZXgpID0+XG4gICAgICAgICAgICBodG1sYDx0cj5cbiAgICAgICAgICAgICAgPHRkIHBhcnQ9XCJjLWhlYWRlclwiPiR7dW5zYWZlSFRNTChyb3cuaW5uZXJIVE1MKX08L3RkPlxuICAgICAgICAgICAgICAke3RoaXMuY29scy5tYXAoKGNvbCwgY0luZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgcm93SWQgPSByb3cuZ2V0QXR0cmlidXRlKCdpZGVudGlmaWVyJyk7XG4gICAgICAgICAgICAgICAgY29uc3QgY29sSWQgPSBjb2wuZ2V0QXR0cmlidXRlKCdpZGVudGlmaWVyJyk7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBgJHtyb3dJZH0gJHtjb2xJZH1gO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkSW5Sb3dDb3VudCA9IHRoaXMucmVzcG9uc2UuZmlsdGVyKHYgPT4gdi5zcGxpdCgnICcpWzBdID09PSByb3dJZCkubGVuZ3RoIHx8IDA7XG4gICAgICAgICAgICAgICAgY29uc3QgY2hlY2tlZCA9IHRoaXMucmVzcG9uc2UuaW5jbHVkZXModmFsdWUpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcnQgPSBgcmIgJHtjaGVja2VkID8gJ3JiLWNoZWNrZWQnIDogJyd9ICR7dGhpcy5jb3JyZWN0T3B0aW9ucy5pbmNsdWRlcyh2YWx1ZSkgPyAncmItY29ycmVjdCcgOiAnJ31gO1xuICAgICAgICAgICAgICAgIC8vIGRpc2FibGUgaWYgbWF0Y2ggbWF4IGlzIGdyZWF0ZXIgdGhhbiAxIGFuZCBtYXggaXMgcmVhY2hlZFxuICAgICAgICAgICAgICAgIGNvbnN0IGRpc2FibGUgPVxuICAgICAgICAgICAgICAgICAgdGhpcy5jb3JyZWN0T3B0aW9ucy5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgICAgID8gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICA6IHJvdy5tYXRjaE1heCA9PT0gMVxuICAgICAgICAgICAgICAgICAgICAgID8gZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICA6IHNlbGVjdGVkSW5Sb3dDb3VudCA+PSByb3cubWF0Y2hNYXggJiYgIWNoZWNrZWQ7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGh0bWxgPHRkPlxuICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgIHR5cGU9JHtyb3cubWF0Y2hNYXggPT09IDEgPyAncmFkaW8nIDogYGNoZWNrYm94YH1cbiAgICAgICAgICAgICAgICAgICAgcGFydD0ke3BhcnR9XG4gICAgICAgICAgICAgICAgICAgIG5hbWU9JHtyb3dJZH1cbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9JHt2YWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgLmRpc2FibGVkPSR7ZGlzYWJsZX1cbiAgICAgICAgICAgICAgICAgICAgQGNoYW5nZT0ke2UgPT4gdGhpcy5oYW5kbGVSYWRpb0NoYW5nZShlKX1cbiAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSR7ZSA9PiAocm93Lm1hdGNoTWF4ID09PSAxID8gdGhpcy5oYW5kbGVSYWRpb0NsaWNrKGUpIDogbnVsbCl9XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvdGQ+YDtcbiAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICA8L3RyPmBcbiAgICAgICAgKX1cbiAgICAgIDwvdGFibGU+XG4gICAgYDtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktbWF0Y2gtaW50ZXJhY3Rpb24nOiBRdGlNYXRjaEludGVyYWN0aW9uO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgY3NzLCBodG1sLCBMaXRFbGVtZW50IH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQsIHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuXG4vLyBUSElTIElTIE5PVCBVU0VEIElOIFRBQlVMQVIgTUFUQ0ggSU5URVJBQ1RJT05cbkBjdXN0b21FbGVtZW50KCdxdGktc2ltcGxlLWFzc29jaWFibGUtY2hvaWNlJylcbi8vIHRzbGludDpkaXNhYmxlOiBpbmRlbnRcbmV4cG9ydCBjbGFzcyBRdGlTaW1wbGVBc3NvY2lhYmxlQ2hvaWNlIGV4dGVuZHMgTGl0RWxlbWVudCB7XG4gIHN0YXRpYyBzdHlsZXMgPSBjc3NgXG4gICAgOmhvc3Qge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIHVzZXItc2VsZWN0OiBub25lO1xuICAgIH1cbiAgICBzbG90IHtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgfVxuICAgIHNsb3RbbmFtZT0ncXRpLXNpbXBsZS1hc3NvY2lhYmxlLWNob2ljZSddIHtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgIH1cbiAgYDtcblxuICAvKiogdGhlIG1pbmltYWwgbnVtYmVyIG9mIHNlbGVjdGlvbnMgYSBjYW5kaWRhdGUgbXVzdCBtYWtlICovXG4gIEBwcm9wZXJ0eSh7XG4gICAgdHlwZTogTnVtYmVyLFxuICAgIGF0dHJpYnV0ZTogJ21hdGNoLW1pbidcbiAgfSlcbiAgcHVibGljIG1hdGNoTWluOiBudW1iZXIgPSAwO1xuXG4gIC8qKiB0aGUgbWF4aW11bSBudW1iZXIgb2Ygc2VsZWN0aW9ucyBhIGNhbmRpZGF0ZSBtdXN0IG1ha2UsIHRoZSBvdGhlciBvcHRpb25zIHdpbGwgYmUgZGlzYWJsZWQgd2hlbiBtYXggb3B0aW9ucyBpcyBjaGVja2VkICovXG4gIEBwcm9wZXJ0eSh7XG4gICAgdHlwZTogTnVtYmVyLFxuICAgIGF0dHJpYnV0ZTogJ21hdGNoLW1heCdcbiAgfSlcbiAgcHVibGljIG1hdGNoTWF4OiBudW1iZXIgPSAxO1xuXG4gIEBwcm9wZXJ0eSh7XG4gICAgdHlwZTogQm9vbGVhbixcbiAgICBhdHRyaWJ1dGU6ICdmaXhlZCdcbiAgfSlcbiAgcHVibGljIGZpeGVkID0gZmFsc2U7XG5cbiAgLy8gcGs6IFRoaXMgbmVlZHMgc29tZSBleHBsYW5hdGlvblxuICAvLyBpbiB0aGUgYXNzb2NpYXRlIGludGVyYWN0aW9uIHRoZXJlIGlzIGEgc3BlY2lhbCBzbG90IGZvciB0aGVzZSBxdGktc2ltcGxlLWFzc29jaWFibGUtY2hvaWNlc1xuICBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKCdzbG90JywgJ3F0aS1zaW1wbGUtYXNzb2NpYWJsZS1jaG9pY2UnKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZSgncGFydCcsICdxdGktc2ltcGxlLWFzc29jaWFibGUtY2hvaWNlJyk7XG4gIH1cblxuICAvLyBwazogVGhpcyBuZWVkcyBzb21lIGV4cGxhbmF0aW9uXG4gIC8vIGluIHF0aS1tYXRjaC1pbnRlcmFjdGlvbiwgcXRpLXNpbXBsZS1hc3NvY2lhYmxlLWNob2ljZSBpcyB1c2VkIHRvIGRlbm90ZSB0aGVcbiAgLy8gZHJhZ2dhYmxlLCBidXQgYWxzbyB0aGUgZHJvcHBhYmxlLiBXRUlSRC4uIGJ1dCBsZXRzIGRlYWwgd2l0aCBpdC5cbiAgLy8gU28gd2UgaGF2ZSBhIHNsb3QgZm9yIHdoZW5ldmVyIGFub3RoZXIgcXRpLXNpbXBsZS1hc3NvY2lhYmxlLWNob2ljZSBpcyBkcm9wcGVkIGluIGhlcmUuXG4gIC8vIEFuZCB3ZSBoYXZlIHNsb3QgZm9yIGNvbnRlbnQgbGlrZSBpbiB0aGlzIGFzc29jaWF0ZSBpbnRlcmFjdGlvblxuICBvdmVycmlkZSByZW5kZXIoKSB7XG4gICAgcmV0dXJuIGh0bWxgXG4gICAgICA8c2xvdD48L3Nsb3Q+XG4gICAgICA8c2xvdCBuYW1lPVwicXRpLXNpbXBsZS1hc3NvY2lhYmxlLWNob2ljZVwiPjwvc2xvdD5cbiAgICBgO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1zaW1wbGUtYXNzb2NpYWJsZS1jaG9pY2UnOiBRdGlTaW1wbGVBc3NvY2lhYmxlQ2hvaWNlO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgY3NzLCBodG1sIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBJbnRlcmFjdGlvbiB9IGZyb20gJy4uL2ludGVybmFsL2ludGVyYWN0aW9uL2ludGVyYWN0aW9uJztcblxuQGN1c3RvbUVsZW1lbnQoJ3F0aS1tZWRpYS1pbnRlcmFjdGlvbicpXG5leHBvcnQgY2xhc3MgUXRpTWVkaWFJbnRlcmFjdGlvbiBleHRlbmRzIEludGVyYWN0aW9uIHtcbiAgdmFsdWUgPSAwO1xuICByZXNldCgpIHtcbiAgICAvLyB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQuJyk7XG4gIH1cbiAgdmFsaWRhdGUoKTogYm9vbGVhbiB7XG4gICAgLy8gdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkLicpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHNldCByZXNwb25zZSh2YWw6IHVuZGVmaW5lZCkge1xuICAgIC8vIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcbiAgfVxuXG4gIHN0YXRpYyBvdmVycmlkZSBnZXQgcHJvcGVydGllcygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uSW50ZXJhY3Rpb24ucHJvcGVydGllcyxcbiAgICAgIC4uLntcbiAgICAgICAgc3RlcDoge1xuICAgICAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgICAgICBhdHRyaWJ1dGU6ICdzdGVwJyxcbiAgICAgICAgICBkZWZhdWx0OiAxMFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBvdmVycmlkZSBzdHlsZXMgPSBbY3NzYGBdO1xuXG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICByZXR1cm4gaHRtbGAgPHNsb3QgbmFtZT1cInByb21wdFwiPjwvc2xvdD5cbiAgICAgIDxzbG90Pjwvc2xvdD5gO1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIG92ZXJyaWRlIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgLy8gZ2V0IGF1ZGlvLCB2aWRlbyBvZiBvYmplY3QgdGFnLlxuICAgIGNvbnN0IG1lZGlhT2JqZWN0ID0gdGhpcy5xdWVyeVNlbGVjdG9yKCdhdWRpbycpIHx8IHRoaXMucXVlcnlTZWxlY3RvcigndmlkZW8nKSB8fCB0aGlzLnF1ZXJ5U2VsZWN0b3IoJ29iamVjdCcpO1xuICAgIGlmIChtZWRpYU9iamVjdCkge1xuICAgICAgLy8gbGlzdGVuIHRvIGVuZGVkIGV2ZW50XG4gICAgICBtZWRpYU9iamVjdC5hZGRFdmVudExpc3RlbmVyKCdlbmRlZCcsICgpID0+IHtcbiAgICAgICAgLy8gc2V0IHZhbHVlIHRvIDBcbiAgICAgICAgdGhpcy52YWx1ZSsrO1xuICAgICAgICB0aGlzLnNhdmVSZXNwb25zZSh0aGlzLnZhbHVlLnRvU3RyaW5nKCkpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1tZWRpYS1pbnRlcmFjdGlvbic6IFF0aU1lZGlhSW50ZXJhY3Rpb247XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBjc3MsIGh0bWwsIExpdEVsZW1lbnQgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCwgcHJvcGVydHksIHN0YXRlIH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgdW5zYWZlSFRNTCB9IGZyb20gJ2xpdC9kaXJlY3RpdmVzL3Vuc2FmZS1odG1sLmpzJztcbmltcG9ydCB7IERyYWdEcm9wSW50ZXJhY3Rpb25NaXhpbiB9IGZyb20gJy4uL2ludGVybmFsL2RyYWctZHJvcC9kcmFnLWRyb3AtaW50ZXJhY3Rpb24tbWl4aW4nO1xuaW1wb3J0IHsgU2h1ZmZsZU1peGluIH0gZnJvbSAnLi4vaW50ZXJuYWwvc2h1ZmZsZS9zaHVmZmxlLW1peGluJzsgLy8gSW1wb3J0IHRoZSBtaXhpblxuaW1wb3J0IHsgUXRpU2ltcGxlQ2hvaWNlIH0gZnJvbSAnLi4vcXRpLXNpbXBsZS1jaG9pY2UnO1xuXG5AY3VzdG9tRWxlbWVudCgncXRpLW9yZGVyLWludGVyYWN0aW9uJylcbmV4cG9ydCBjbGFzcyBRdGlPcmRlckludGVyYWN0aW9uIGV4dGVuZHMgU2h1ZmZsZU1peGluKFxuICBEcmFnRHJvcEludGVyYWN0aW9uTWl4aW4oTGl0RWxlbWVudCwgYHF0aS1zaW1wbGUtY2hvaWNlYCwgdHJ1ZSwgJ2Ryb3AtbGlzdCcpLFxuICAncXRpLXNpbXBsZS1jaG9pY2UnXG4pIHtcbiAgY2hpbGRyZW5NYXA6IEVsZW1lbnRbXTtcblxuICBAc3RhdGUoKSBuckNob2ljZXM6IG51bWJlciA9IDA7XG4gIEBzdGF0ZSgpIGNvcnJlY3RSZXNwb25zZXM6IHN0cmluZ1tdID0gW107XG4gIEBzdGF0ZSgpIHNob3dDb3JyZWN0UmVzcG9uc2VzOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqIG9yaWVudGF0aW9uIG9mIGNob2ljZXMgKi9cbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nIH0pXG4gIHB1YmxpYyBvcmllbnRhdGlvbjogJ2hvcml6b250YWwnIHwgJ3ZlcnRpY2FsJztcblxuICBzdGF0aWMgb3ZlcnJpZGUgc3R5bGVzID0gW1xuICAgIGNzc2BcbiAgICAgIFtwYXJ0PSdkcmFncyddIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG4gICAgICAgIGZsZXg6IDE7XG4gICAgICB9XG5cbiAgICAgIFtwYXJ0PSdkcm9wcyddIHtcbiAgICAgICAgZmxleDogMTtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgZ3JpZC1hdXRvLWZsb3c6IGNvbHVtbjtcbiAgICAgICAgZ3JpZC1hdXRvLWNvbHVtbnM6IDFmcjtcbiAgICAgIH1cblxuICAgICAgOmhvc3QoW29yaWVudGF0aW9uPSdob3Jpem9udGFsJ10pIFtwYXJ0PSdkcmFncyddIHtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICAgIH1cbiAgICAgIDpob3N0KFtvcmllbnRhdGlvbj0naG9yaXpvbnRhbCddKSBbcGFydD0nZHJvcHMnXSB7XG4gICAgICAgIGdyaWQtYXV0by1mbG93OiBjb2x1bW47XG4gICAgICB9XG4gICAgICA6aG9zdChbb3JpZW50YXRpb249J3ZlcnRpY2FsJ10pIFtwYXJ0PSdkcmFncyddIHtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgIH1cbiAgICAgIDpob3N0KFtvcmllbnRhdGlvbj0ndmVydGljYWwnXSkgW3BhcnQ9J2Ryb3BzJ10ge1xuICAgICAgICBncmlkLWF1dG8tZmxvdzogcm93O1xuICAgICAgfVxuXG4gICAgICBbcGFydD0nZHJvcC1saXN0J10ge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgZmxleDogMTtcbiAgICAgIH1cblxuICAgICAgW3BhcnQ9J2NvbnRhaW5lciddIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZ2FwOiAwLjVyZW07XG4gICAgICB9XG4gICAgICA6aG9zdCgucXRpLWNob2ljZXMtdG9wKSBbcGFydD0nY29udGFpbmVyJ10ge1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgfVxuICAgICAgOmhvc3QoLnF0aS1jaG9pY2VzLWJvdHRvbSkgW3BhcnQ9J2NvbnRhaW5lciddIHtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlO1xuICAgICAgfVxuICAgICAgOmhvc3QoLnF0aS1jaG9pY2VzLWxlZnQpIFtwYXJ0PSdjb250YWluZXInXSB7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gICAgICB9XG4gICAgICA6aG9zdCgucXRpLWNob2ljZXMtcmlnaHQpIFtwYXJ0PSdjb250YWluZXInXSB7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZTtcbiAgICAgIH1cbiAgICBgXG4gIF07XG5cbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIGNvbnN0IGNob2ljZXMgPSBBcnJheS5mcm9tKHRoaXMucXVlcnlTZWxlY3RvckFsbCgncXRpLXNpbXBsZS1jaG9pY2UnKSk7XG4gICAgaWYgKHRoaXMubnJDaG9pY2VzIDwgY2hvaWNlcy5sZW5ndGgpIHtcbiAgICAgIHRoaXMubnJDaG9pY2VzID0gY2hvaWNlcy5sZW5ndGg7XG4gICAgfVxuXG4gICAgcmV0dXJuIGh0bWxgIDxzbG90IG5hbWU9XCJwcm9tcHRcIj4gPC9zbG90PlxuICAgICAgPGRpdiBwYXJ0PVwiY29udGFpbmVyXCI+XG4gICAgICAgIDxzbG90IHBhcnQ9XCJkcmFnc1wiPiA8L3Nsb3Q+XG4gICAgICAgIDxkaXYgcGFydD1cImRyb3BzXCI+XG4gICAgICAgICAgJHtBcnJheS5mcm9tKEFycmF5KHRoaXMubnJDaG9pY2VzKSkubWFwKFxuICAgICAgICAgICAgKF8sIGkpID0+XG4gICAgICAgICAgICAgIGh0bWxgPGRyb3AtbGlzdCBwYXJ0PVwiZHJvcC1saXN0XCIgaWRlbnRpZmllcj1cImRyb3BsaXN0JHtpfVwiPjwvZHJvcC1saXN0PiR7dGhpcy5zaG93Q29ycmVjdFJlc3BvbnNlcyAmJlxuICAgICAgICAgICAgICAgIHRoaXMuY29ycmVjdFJlc3BvbnNlcy5sZW5ndGggPiBpXG4gICAgICAgICAgICAgICAgICA/IHVuc2FmZUhUTUwoYDxzcGFuIHBhcnQ9J2NvcnJlY3QtcmVzcG9uc2UnPiR7dGhpcy5jb3JyZWN0UmVzcG9uc2VzW2ldfTwvc3Bhbj5gKVxuICAgICAgICAgICAgICAgICAgOiAnJ31gXG4gICAgICAgICAgKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5gO1xuICB9XG5cbiAgc2V0IGNvcnJlY3RSZXNwb25zZSh2YWx1ZTogUmVhZG9ubHk8c3RyaW5nIHwgc3RyaW5nW10+KSB7XG4gICAgaWYgKHZhbHVlID09PSAnJykge1xuICAgICAgdGhpcy5zaG93Q29ycmVjdFJlc3BvbnNlcyA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNvcnJlY3RSZXNwb25zZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICBjb25zdCByZXNwb25zZXMgPSBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW3ZhbHVlXTtcblxuICAgICAgcmVzcG9uc2VzLmZvckVhY2goKHJlc3BvbnNlLCBpbmRleCkgPT4ge1xuICAgICAgICBsZXQgc2ltcGxlQ2hvaWNlID0gdGhpcy5xdWVyeVNlbGVjdG9yKGBxdGktc2ltcGxlLWNob2ljZVtpZGVudGlmaWVyPVwiJHtyZXNwb25zZX1cIl1gKTtcbiAgICAgICAgaWYgKCFzaW1wbGVDaG9pY2UpIHtcbiAgICAgICAgICBzaW1wbGVDaG9pY2UgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcihgcXRpLXNpbXBsZS1jaG9pY2VbaWRlbnRpZmllcj1cIiR7cmVzcG9uc2V9XCJdYCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0ZXh0ID0gc2ltcGxlQ2hvaWNlPy50ZXh0Q29udGVudC50cmltKCk7XG4gICAgICAgIHRoaXMuY29ycmVjdFJlc3BvbnNlcyA9IFsuLi50aGlzLmNvcnJlY3RSZXNwb25zZXMsIHRleHRdO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5zaG93Q29ycmVjdFJlc3BvbnNlcyA9IHRydWU7XG4gIH1cblxuICAvLyBzb21lIGludGVyYWN0aW9ucyBoYXZlIGEgZGlmZmVyZW50IHdheSBvZiBnZXR0aW5nIHRoZSByZXNwb25zZVxuICAvLyB0aGlzIGlzIGNhbGxlZCBmcm9tIHRoZSBkcmFnIGFuZCBkcm9wIG1peGluIGNsYXNzXG4gIC8vIHlvdSBoYXZlIHRvIGltcGxlbWVudCB5b3VyIG93biBnZXRSZXNwb25zZSBtZXRob2QgaW4gdGhlIHN1cGVyY2xhc3NcbiAgLy8gY2F1c2UgdGhleSBhcmUgZGlmZmVyZW50IGZvciBzb21lIGludGVyYWN0aW9ucy5cbiAgcHJvdGVjdGVkIGdldFJlc3BvbnNlKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBkcm9wcGFibGVzID0gQXJyYXkuZnJvbTxRdGlTaW1wbGVDaG9pY2U+KHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKCdkcm9wLWxpc3QnKSk7XG5cbiAgICBjb25zdCByZXNwb25zZSA9IGRyb3BwYWJsZXMubWFwKGRyb3BwYWJsZSA9PiB7XG4gICAgICBjb25zdCBkcmFnc0luRHJvcHBhYmxlID0gZHJvcHBhYmxlLnF1ZXJ5U2VsZWN0b3JBbGwoJ1txdGktZHJhZ2dhYmxlPVwidHJ1ZVwiXScpO1xuICAgICAgY29uc3QgaWRlbnRpZmllcnMgPSBBcnJheS5mcm9tKGRyYWdzSW5Ecm9wcGFibGUpLm1hcChkID0+IGQuZ2V0QXR0cmlidXRlKCdpZGVudGlmaWVyJykpO1xuICAgICAgcmV0dXJuIFsuLi5pZGVudGlmaWVyc10uam9pbignICcpO1xuICAgIH0pO1xuICAgIHJldHVybiByZXNwb25zZTtcbiAgfVxuXG4gIG92ZXJyaWRlIGFzeW5jIGZpcnN0VXBkYXRlZChjaGFuZ2VkUHJvcHMpIHtcbiAgICBzdXBlci5maXJzdFVwZGF0ZWQoY2hhbmdlZFByb3BzKTtcbiAgICB0aGlzLmNoaWxkcmVuTWFwID0gQXJyYXkuZnJvbSh0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwoJ3F0aS1zaW1wbGUtY2hvaWNlJykpO1xuICAgIHRoaXMuY2hpbGRyZW5NYXAuZm9yRWFjaChlbCA9PiBlbC5zZXRBdHRyaWJ1dGUoJ3BhcnQnLCAncXRpLXNpbXBsZS1jaG9pY2UnKSk7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLW9yZGVyLWludGVyYWN0aW9uJzogUXRpT3JkZXJJbnRlcmFjdGlvbjtcbiAgfVxufVxuIiwgImltcG9ydCB7IExpdEVsZW1lbnQsIGNzcywgaHRtbCB9IGZyb20gJ2xpdCc7XG5cbmV4cG9ydCBjbGFzcyBRdGlTUG9zaXRpb25PYmplY3RJbnRlcmFjdGlvbiBleHRlbmRzIExpdEVsZW1lbnQge1xuICBvdmVycmlkZSByZW5kZXIoKSB7XG4gICAgcmV0dXJuIGh0bWxgPHNsb3Q+PC9zbG90PmA7XG4gIH1cblxuICBzdGF0aWMgb3ZlcnJpZGUgc3R5bGVzID0gW1xuICAgIGNzc2BcbiAgICAgIDpob3N0IHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICB9XG4gICAgICA6OnNsb3R0ZWQoaW1nKSB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgY3Vyc29yOiBtb3ZlO1xuICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgICAgICAgbGVmdDogNTAlO1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XG4gICAgICB9XG4gICAgYFxuICBdO1xufVxuXG5jdXN0b21FbGVtZW50cy5kZWZpbmUoJ3F0aS1wb3NpdGlvbi1vYmplY3QtaW50ZXJhY3Rpb24nLCBRdGlTUG9zaXRpb25PYmplY3RJbnRlcmFjdGlvbik7XG4iLCAiaW1wb3J0IHsgTGl0RWxlbWVudCwgY3NzLCBodG1sIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5cbkBjdXN0b21FbGVtZW50KCdxdGktcG9zaXRpb24tb2JqZWN0LXN0YWdlJylcbmV4cG9ydCBjbGFzcyBRdGlQb3NpdGlvbk9iamVjdFN0YWdlIGV4dGVuZHMgTGl0RWxlbWVudCB7XG4gIGNob2ljZU9yZGVyaW5nOiBib29sZWFuO1xuICBzdGFydFg6IGFueTtcbiAgc3RhcnRZOiBhbnk7XG4gIGRyYWdFbGVtZW50OiBhbnk7XG5cbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYDxzbG90Pjwvc2xvdD5gO1xuICB9XG5cbiAgc3RhdGljIG92ZXJyaWRlIHN0eWxlcyA9IFtcbiAgICBjc3NgXG4gICAgICA6aG9zdCB7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgfVxuICAgIGBcbiAgXTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMucmVtb3ZlTW92ZUxpc3RlbmVyID0gdGhpcy5yZW1vdmVNb3ZlTGlzdGVuZXIuYmluZCh0aGlzKTtcbiAgICB0aGlzLmRyYWdFbGVtZW50SGFuZGxlciA9IHRoaXMuZHJhZ0VsZW1lbnRIYW5kbGVyLmJpbmQodGhpcyk7XG4gIH1cblxuICAvLyBEZWZpbmUgYSBmdW5jdGlvbiB0byBoYW5kbGUgdGhlIG1vdXNlbW92ZSBldmVudCBvbiB0aGUgZHJhZ2dhYmxlIGVsZW1lbnRcbiAgZHJhZ0VsZW1lbnRIYW5kbGVyKGV2ZW50KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgIC8vIENhbGN1bGF0ZSB0aGUgZGlzdGFuY2UgdGhlIG1vdXNlIGhhcyBtb3ZlZCBzaW5jZSB0aGUgbGFzdCBldmVudFxuICAgIGNvbnN0IGRlbHRhWCA9IGV2ZW50LmNsaWVudFggLSB0aGlzLnN0YXJ0WDtcbiAgICBjb25zdCBkZWx0YVkgPSBldmVudC5jbGllbnRZIC0gdGhpcy5zdGFydFk7XG5cbiAgICAvLyBVcGRhdGUgdGhlIHBvc2l0aW9uIG9mIHRoZSBkcmFnZ2FibGUgZWxlbWVudFxuICAgIHRoaXMuZHJhZ0VsZW1lbnQuc3R5bGUubGVmdCA9IHRoaXMuZHJhZ0VsZW1lbnQub2Zmc2V0TGVmdCArIGRlbHRhWCArICdweCc7XG4gICAgdGhpcy5kcmFnRWxlbWVudC5zdHlsZS50b3AgPSB0aGlzLmRyYWdFbGVtZW50Lm9mZnNldFRvcCArIGRlbHRhWSArICdweCc7XG5cbiAgICAvLyBVcGRhdGUgdGhlIHN0YXJ0aW5nIHBvc2l0aW9uIG9mIHRoZSBtb3VzZVxuICAgIHRoaXMuc3RhcnRYID0gZXZlbnQuY2xpZW50WDtcbiAgICB0aGlzLnN0YXJ0WSA9IGV2ZW50LmNsaWVudFk7XG4gIH1cblxuICBvdmVycmlkZSBmaXJzdFVwZGF0ZWQoYSk6IHZvaWQge1xuICAgIHN1cGVyLmZpcnN0VXBkYXRlZChhKTtcblxuICAgIC8vIEdldCB0aGUgZHJhZ2dhYmxlIGFuZCBkcm9wIHpvbmUgZWxlbWVudHNcbiAgICB0aGlzLmRyYWdFbGVtZW50ID0gdGhpcy5xdWVyeVNlbGVjdG9yKCdxdGktcG9zaXRpb24tb2JqZWN0LWludGVyYWN0aW9uPmltZycpO1xuICAgIC8vIGNvbnN0IGNhbnZhc0VsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2FudmFzJyk7XG5cbiAgICAvLyBJbml0aWFsaXplIHZhcmlhYmxlcyBmb3IgdGhlIHN0YXJ0aW5nIHBvc2l0aW9uIG9mIHRoZSBkcmFnZ2FibGUgZWxlbWVudFxuICAgIHRoaXMuc3RhcnRYID0gMDtcbiAgICB0aGlzLnN0YXJ0WSA9IDA7XG5cbiAgICAvLyBBZGQgYSBtb3VzZWRvd24gZXZlbnQgbGlzdGVuZXIgdG8gdGhlIGRyYWdnYWJsZSBlbGVtZW50XG4gICAgdGhpcy5kcmFnRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgIC8vIFNhdmUgdGhlIHN0YXJ0aW5nIHBvc2l0aW9uIG9mIHRoZSBtb3VzZVxuICAgICAgdGhpcy5zdGFydFggPSBldmVudC5jbGllbnRYO1xuICAgICAgdGhpcy5zdGFydFkgPSBldmVudC5jbGllbnRZO1xuXG4gICAgICAvLyBBZGQgYSBtb3VzZW1vdmUgZXZlbnQgbGlzdGVuZXIgdG8gdGhlIGRvY3VtZW50XG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLmRyYWdFbGVtZW50SGFuZGxlciwgdHJ1ZSk7XG4gICAgfSk7XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIHRoaXMucmVtb3ZlTW92ZUxpc3RlbmVyKTtcbiAgfVxuXG4gIHJlbW92ZU1vdmVMaXN0ZW5lcihldmVudCkge1xuICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMuZHJhZ0VsZW1lbnRIYW5kbGVyLCB0cnVlKTtcbiAgfVxuXG4gIG92ZXJyaWRlIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5kcmFnRWxlbWVudEhhbmRsZXIpO1xuICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCB0aGlzLnJlbW92ZU1vdmVMaXN0ZW5lcik7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLXBvc2l0aW9uLW9iamVjdC1zdGFnZSc6IFF0aVBvc2l0aW9uT2JqZWN0U3RhZ2U7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBjc3MsIGh0bWwgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCwgcHJvcGVydHksIHN0YXRlIH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgcmVwZWF0IH0gZnJvbSAnbGl0L2RpcmVjdGl2ZXMvcmVwZWF0LmpzJztcbmltcG9ydCB7IHN0eWxlTWFwIH0gZnJvbSAnbGl0L2RpcmVjdGl2ZXMvc3R5bGUtbWFwLmpzJztcbmltcG9ydCB7IEludGVyYWN0aW9uIH0gZnJvbSAnLi4vaW50ZXJuYWwvaW50ZXJhY3Rpb24vaW50ZXJhY3Rpb24nO1xuXG5AY3VzdG9tRWxlbWVudCgncXRpLXNlbGVjdC1wb2ludC1pbnRlcmFjdGlvbicpXG5leHBvcnQgY2xhc3MgUXRpU2VsZWN0UG9pbnRJbnRlcmFjdGlvbiBleHRlbmRzIEludGVyYWN0aW9uIHtcbiAgc3RhdGljIG92ZXJyaWRlIHN0eWxlcyA9IFtcbiAgICBjc3NgXG4gICAgICA6aG9zdCB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgfVxuICAgICAgcG9pbnQtY29udGFpbmVyIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIH1cbiAgICBgXG4gIF07XG5cbiAgQHByb3BlcnR5KHtcbiAgICB0eXBlOiBOdW1iZXIsXG4gICAgYXR0cmlidXRlOiAnbWF4LWNob2ljZXMnXG4gIH0pXG4gIHB1YmxpYyBtYXhDaG9pY2VzOiBudW1iZXIgPSBJbmZpbml0eTtcblxuICBAcHJvcGVydHkoe1xuICAgIHR5cGU6IE51bWJlcixcbiAgICBhdHRyaWJ1dGU6ICdtaW4tY2hvaWNlcydcbiAgfSlcbiAgcHVibGljIG1pbkNob2ljZXM6IG51bWJlciA9IDA7XG5cbiAgQHN0YXRlKClcbiAgcHJpdmF0ZSBfcG9pbnRzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIC8vIFJlZmVyZW5jZSB0byB0aGUgaW1hZ2UgZWxlbWVudFxuICBwcml2YXRlIF9pbWdFbGVtZW50OiBIVE1MSW1hZ2VFbGVtZW50IHwgbnVsbCA9IG51bGw7XG5cbiAgLy8gRXh0cmFjdGVkIGNsaWNrIGhhbmRsZXIgbWV0aG9kXG4gIHByaXZhdGUgX29uSW1hZ2VDbGljayA9IChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgIGlmICh0aGlzLl9wb2ludHMubGVuZ3RoIDwgdGhpcy5tYXhDaG9pY2VzKSB7XG4gICAgICBjb25zdCB4ID0gZXZlbnQub2Zmc2V0WDtcbiAgICAgIGNvbnN0IHkgPSBldmVudC5vZmZzZXRZO1xuXG4gICAgICB0aGlzLl9wb2ludHMgPSBbLi4udGhpcy5fcG9pbnRzLCBgJHt4fSAke3l9YF07XG4gICAgICB0aGlzLnNhdmVSZXNwb25zZSh0aGlzLl9wb2ludHMpO1xuICAgIH1cbiAgfTtcblxuICBvdmVycmlkZSByZW5kZXIoKSB7XG4gICAgcmV0dXJuIGh0bWxgIDxzbG90IG5hbWU9XCJwcm9tcHRcIj48L3Nsb3Q+XG4gICAgICA8cG9pbnQtY29udGFpbmVyPlxuICAgICAgICAke3JlcGVhdChcbiAgICAgICAgICB0aGlzLl9wb2ludHMsXG4gICAgICAgICAgcG9pbnQgPT4gcG9pbnQsXG4gICAgICAgICAgKHBvaW50LCBpbmRleCkgPT4gaHRtbGBcbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgcGFydD1cInBvaW50XCJcbiAgICAgICAgICAgICAgc3R5bGU9JHtzdHlsZU1hcCh7XG4gICAgICAgICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtOiAndHJhbnNsYXRlKC01MCUsIC01MCUpJyxcbiAgICAgICAgICAgICAgICBsZWZ0OiBgJHtwb2ludC5zcGxpdCgnICcpWzBdfXB4YCxcbiAgICAgICAgICAgICAgICB0b3A6IGAke3BvaW50LnNwbGl0KCcgJylbMV19cHhgXG4gICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiUmVtb3ZlIHBvaW50IGF0ICR7cG9pbnR9XCJcbiAgICAgICAgICAgICAgQGNsaWNrPSR7KGU6IEV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9wb2ludHMgPSB0aGlzLl9wb2ludHMuZmlsdGVyKChfLCBpKSA9PiBpICE9PSBpbmRleCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zYXZlUmVzcG9uc2UodGhpcy5fcG9pbnRzKTtcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICBgXG4gICAgICAgICl9XG4gICAgICAgIDxzbG90Pjwvc2xvdD5cbiAgICAgIDwvcG9pbnQtY29udGFpbmVyPmA7XG4gIH1cblxuICByZXNldCgpOiB2b2lkIHtcbiAgICB0aGlzLl9wb2ludHMgPSBbXTtcbiAgfVxuXG4gIHZhbGlkYXRlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9wb2ludHMubGVuZ3RoID49IHRoaXMubWluQ2hvaWNlcyAmJiB0aGlzLl9wb2ludHMubGVuZ3RoIDw9IHRoaXMubWF4Q2hvaWNlcztcbiAgfVxuXG4gIHNldCByZXNwb25zZSh2YWw6IHN0cmluZyB8IHN0cmluZ1tdKSB7XG4gICAgdGhpcy5fcG9pbnRzID0gQXJyYXkuaXNBcnJheSh2YWwpID8gdmFsIDogW3ZhbF07XG4gIH1cblxuICBvdmVycmlkZSBmaXJzdFVwZGF0ZWQoKTogdm9pZCB7XG4gICAgdGhpcy5faW1nRWxlbWVudCA9IHRoaXMucXVlcnlTZWxlY3RvcignaW1nJyk7XG5cbiAgICBpZiAodGhpcy5faW1nRWxlbWVudCkge1xuICAgICAgLy8gQXR0YWNoIHRoZSBjbGljayBldmVudCBsaXN0ZW5lciB0byB0aGUgaW1hZ2UgZWxlbWVudFxuICAgICAgdGhpcy5faW1nRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuX29uSW1hZ2VDbGljayk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUud2FybignTm8gPGltZz4gZWxlbWVudCBmb3VuZCBpbiA8cXRpLXNlbGVjdC1wb2ludC1pbnRlcmFjdGlvbj4nKTtcbiAgICB9XG4gIH1cblxuICBvdmVycmlkZSBkaXNjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpO1xuXG4gICAgaWYgKHRoaXMuX2ltZ0VsZW1lbnQpIHtcbiAgICAgIC8vIFJlbW92ZSB0aGUgY2xpY2sgZXZlbnQgbGlzdGVuZXIgZnJvbSB0aGUgaW1hZ2UgZWxlbWVudFxuICAgICAgdGhpcy5faW1nRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuX29uSW1hZ2VDbGljayk7XG4gICAgfVxuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1zZWxlY3QtcG9pbnQtaW50ZXJhY3Rpb24nOiBRdGlTZWxlY3RQb2ludEludGVyYWN0aW9uO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgY3NzLCBodG1sLCBub3RoaW5nIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQsIHByb3BlcnR5LCBxdWVyeSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcblxuaW1wb3J0IHsgd2F0Y2ggfSBmcm9tICcuLi8uLi8uLi9kZWNvcmF0b3JzL3dhdGNoJztcbmltcG9ydCB7IEludGVyYWN0aW9uIH0gZnJvbSAnLi4vaW50ZXJuYWwvaW50ZXJhY3Rpb24vaW50ZXJhY3Rpb24nO1xuXG4vKipcbiAqIEBzdW1tYXJ5IFRoZSBTbGlkZXJJbnRlcmFjdGlvbi5UeXBlIChxdGktc2xpZGVyLWludGVyYWN0aW9uKSBwcmVzZW50cyB0aGUgY2FuZGlkYXRlIHdpdGggYSBjb250cm9sIGZvciBzZWxlY3RpbmcgYSBudW1lcmljYWwgdmFsdWUgYmV0d2VlbiBhIGxvd2VyIGFuZCB1cHBlciBib3VuZC5cbiAqIEBkb2N1bWVudGF0aW9uIGh0dHBzOi8vd3d3Lmltc2dsb2JhbC5vcmcvc3BlYy9xdGkvdjNwMC9pbXBsI2guczYxeGNyajRxY3lqXG4gKiBAc3RhdHVzIHN0YWJsZVxuICogQHNpbmNlIDYuMFxuICpcbiAqIEBldmVudCBxdGktcmVnaXN0ZXItaW50ZXJhY3Rpb24gLSBlbWl0dGVkIHdoZW4gdGhlIGludGVyYWN0aW9uIHdhbnRzIHRvIHJlZ2lzdGVyIGl0c2VsZlxuICogQGV2ZW50IHF0aS1pbnRlcmFjdGlvbi1yZXNwb25zZSAtIGVtaXR0ZWQgd2hlbiB0aGUgaW50ZXJhY3Rpb24gY2hhbmdlc1xuICpcbiAqIEBjc3Nwcm9wIC0tc2hvdy12YWx1ZSAtIHNob3dzIHRoZSBjdXJyZW50IHZhbHVlIHdoaWxlIHNsaWRpbmdcbiAqIEBjc3Nwcm9wIC0tc2hvdy10aWNrcyAtIHNob3dzIHRoZSB0aWNrcyBhY2NvcmRpbmcgdG8gc3RlcHNcbiAqIEBjc3Nwcm9wIC0tc2hvdy1ib3VuZHMgLSBzaG93cyB2YWx1ZSBmb3IgbG93ZXIgYW5kIHVwcGVyIGJvdW5kYXJ5XG4gKlxuICogQGNzc3BhcnQgc2xpZGVyIC0tIHNsaWRlciBpbmx1ZGluZywgYm91bmRzIGFuZCB0aWNrcyBhbmQgdmFsdWUsIHVzZSBpdCBmb3IgcGFkZGluZ3MgYW5kIG1hcmdpbnNcbiAqIEBjc3NwYXJ0IGJvdW5kcyAtLSBkaXYgZm9yIGJvdW5kcywgY29udGFpbmluZyB0d28gZGl2cyBmb3Igd2l0aCBtaW4sIGFuZCBtYXggYm91bmRzIHZhbHVlXG4gKiBAY3NzcGFydCB0aWNrcyAtLSBkaXYgZm9yIHRpY2tzLCB1c2UgbGluZWFpciBncmFkaWVudCBhbmQgZXhwb3NlZCBjc3MgdmFyaWFibGVzIGZvciBzdHlsaW5nXG4gKiBAY3NzcGFydCByYWlsIC0tIGRpdiBmb3IgcmFpbCwgc3R5bGUgYWNjb3JkaW5nIHRvIG5lZWRzXG4gKiBAY3NzcGFydCBrbm9iIC0tIGRpdiwgc2hvdWxkIGJlIHJlbGF0aXZlIG9yIGFic29sdXRlXG4gKiBAY3NzcGFydCB2YWx1ZSAtLSBkaXYsIGNvbnRhaW5pbmcgdmFsdWVcbiAqXG4gKiBAc2xvdCAtIFRoZSBkZWZhdWx0IHNsb3Qgd2hlcmUgPHF0aS1zaW1wbGUtY2hvaWNlPiBtdXN0IGJlIHBsYWNlZC5cbiAqIEBzbG90IHByb21wdCAtIHNsb3Qgd2hlcmUgdGhlIHByb21wdCBpcyBwbGFjZWQuXG4gKi9cblxuQGN1c3RvbUVsZW1lbnQoJ3F0aS1zbGlkZXItaW50ZXJhY3Rpb24nKVxuZXhwb3J0IGNsYXNzIFF0aVNsaWRlckludGVyYWN0aW9uIGV4dGVuZHMgSW50ZXJhY3Rpb24ge1xuICBjc0xpdmU6IENTU1N0eWxlRGVjbGFyYXRpb247XG5cbiAgQHF1ZXJ5KCcja25vYicpXG4gIHByaXZhdGUgX2tub2I6IEhUTUxFbGVtZW50O1xuXG4gIEBxdWVyeSgnI3JhaWwnKVxuICBwcml2YXRlIF9yYWlsOiBIVE1MRWxlbWVudDtcblxuICBAcHJvcGVydHkoeyB0eXBlOiBOdW1iZXIgfSkgdmFsdWU6IG51bWJlcjtcblxuICBAcHJvcGVydHkoeyB0eXBlOiBCb29sZWFuLCBhdHRyaWJ1dGU6ICdzdGVwLWxhYmVsJyB9KSBzdGVwTGFiZWwgPSBmYWxzZTtcblxuICBAcHJvcGVydHkoeyB0eXBlOiBCb29sZWFuIH0pIHJldmVyc2UgPSBmYWxzZTtcblxuICBwcml2YXRlIF9taW46IG51bWJlcjtcbiAgQHByb3BlcnR5KHsgdHlwZTogTnVtYmVyLCBhdHRyaWJ1dGU6ICdsb3dlci1ib3VuZCcgfSkgc2V0IG1pbih2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fbWluID0gdmFsdWU7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMuc3R5bGUuc2V0UHJvcGVydHkoJy0tbWluJywgYCR7dGhpcy5fbWlufWApO1xuICB9XG4gIGdldCBtaW4oKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fbWluO1xuICB9XG5cbiAgcHJpdmF0ZSBfbWF4OiBudW1iZXI7XG4gIEBwcm9wZXJ0eSh7IHR5cGU6IE51bWJlciwgYXR0cmlidXRlOiAndXBwZXItYm91bmQnIH0pIHNldCBtYXgodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX21heCA9IHZhbHVlO1xuICAgIHRoaXMuc3R5bGUuc2V0UHJvcGVydHkoJy0tbWF4JywgYCR7dGhpcy5fbWF4fWApO1xuICB9XG4gIGdldCBtYXgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fbWF4O1xuICB9XG5cbiAgcHJpdmF0ZSBfc3RlcDogbnVtYmVyO1xuICBAcHJvcGVydHkoeyB0eXBlOiBOdW1iZXIsIGF0dHJpYnV0ZTogJ3N0ZXAnIH0pIHNldCBzdGVwKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLl9zdGVwID0gdmFsdWU7XG4gICAgdGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1zdGVwJywgYCR7dGhpcy5fc3RlcH1gKTtcbiAgfVxuICBnZXQgc3RlcCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9zdGVwO1xuICB9XG5cbiAgQHdhdGNoKCdkaXNhYmxlZCcsIHsgd2FpdFVudGlsRmlyc3RVcGRhdGU6IHRydWUgfSlcbiAgX2hhbmRsZURpc2FibGVkQ2hhbmdlID0gKG9sZCwgZGlzYWJsZWQpID0+IHt9O1xuXG4gIEB3YXRjaCgncmVhZG9ubHknLCB7IHdhaXRVbnRpbEZpcnN0VXBkYXRlOiB0cnVlIH0pXG4gIF9oYW5kbGVSZWFkb25seUNoYW5nZSA9IChvbGQsIHJlYWRvbmx5KSA9PiB7fTtcblxuICByZXNldCgpIHtcbiAgICAvLyB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQuJyk7XG4gIH1cbiAgdmFsaWRhdGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvLyBzdGF0aWMgc2hhZG93Um9vdE9wdGlvbnM6IFNoYWRvd1Jvb3RJbml0ID0geyAuLi5MaXRFbGVtZW50LnNoYWRvd1Jvb3RPcHRpb25zLCBkZWxlZ2F0ZXNGb2N1czogdHJ1ZSwgbW9kZTogJ29wZW4nIH07XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICAvKiB0aGUgY29tcHV0ZWQgc3R5bGUgaXMgYSBsaXZlIHByb3BlcnR5LCB3ZSB1c2UgdGhpcyB0byBnZXQgY3NzIHZhcmlhYmxlc1xuICAgIHNlZSByZW5kZXIgdGVtcGxhdGUgKi9cbiAgICB0aGlzLmNzTGl2ZSA9IGdldENvbXB1dGVkU3R5bGUodGhpcyk7XG4gIH1cblxuICBzZXQgcmVzcG9uc2UobXlSZXNwb25zZTogc3RyaW5nIHwgc3RyaW5nW10pIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShteVJlc3BvbnNlKSkge1xuICAgICAgY29uc29sZS5lcnJvcignUXRpU2xpZGVySW50ZXJhY3Rpb246IHJlc3BvbnNlIGlzIGFuIGFycmF5LCBidXQgc2hvdWxkIGJlIGEgc2luZ2xlIHZhbHVlJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHZhbHVlID0gcGFyc2VJbnQobXlSZXNwb25zZSk7XG4gICAgaWYgKE51bWJlci5pc05hTih2YWx1ZSkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1F0aVNsaWRlckludGVyYWN0aW9uOiByZXNwb25zZSBpcyBub3QgYSBudW1iZXInKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICB9XG5cbiAgc3RhdGljIG92ZXJyaWRlIHN0eWxlcyA9IFtjc3NgYF07XG5cbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIC8vIGNvbnZlcnQgdGhlIHZhbHVlLCB3aGljaCBpcyB0aGUgcmVhbCBzbGlkZXIgdmFsdWUgdG8gYSBwZXJjZW50YWdlIGZvciB0aGUgZG9tLlxuICAgIHRoaXMudmFsdWUgPCB0aGlzLm1pbiAmJiAodGhpcy52YWx1ZSA9IHRoaXMubWluKTtcbiAgICB0aGlzLnZhbHVlID4gdGhpcy5tYXggJiYgKHRoaXMudmFsdWUgPSB0aGlzLm1heCk7XG4gICAgY29uc3QgdmFsdWVQZXJjZW50YWdlID0gKCh0aGlzLnZhbHVlIC0gdGhpcy5taW4pIC8gKHRoaXMubWF4IC0gdGhpcy5taW4pKSAqIDEwMDtcbiAgICB0aGlzLnN0eWxlLnNldFByb3BlcnR5KCctLXZhbHVlLXBlcmNlbnRhZ2UnLCBgJHt2YWx1ZVBlcmNlbnRhZ2V9JWApO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKCdhcmlhLXZhbHVlbm93JywgdGhpcy52YWx1ZS50b1N0cmluZygpKTtcblxuICAgIHJldHVybiBodG1sYDxzbG90IG5hbWU9XCJwcm9tcHRcIj48L3Nsb3Q+XG4gICAgICA8ZGl2IGlkPVwic2xpZGVyXCIgcGFydD1cInNsaWRlclwiPlxuICAgICAgICAke3RoaXMuY3NMaXZlLmdldFByb3BlcnR5VmFsdWUoJy0tc2hvdy1ib3VuZHMnKSA9PSAndHJ1ZSdcbiAgICAgICAgICA/IGh0bWxgPGRpdiBpZD1cImJvdW5kc1wiIHBhcnQ9XCJib3VuZHNcIj5cbiAgICAgICAgICAgICAgPGRpdj4ke3RoaXMuX21pbn08L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdj4ke3RoaXMuX21heH08L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PmBcbiAgICAgICAgICA6IG5vdGhpbmd9XG4gICAgICAgICR7dGhpcy5jc0xpdmUuZ2V0UHJvcGVydHlWYWx1ZSgnLS1zaG93LXRpY2tzJykgPT0gJ3RydWUnID8gaHRtbGA8ZGl2IGlkPVwidGlja3NcIiBwYXJ0PVwidGlja3NcIj48L2Rpdj5gIDogbm90aGluZ31cbiAgICAgICAgPGRpdiBpZD1cInJhaWxcIiBwYXJ0PVwicmFpbFwiIEBtb3VzZWRvd249JHt0aGlzLl9vbk1vdXNlRG93bn0gQHRvdWNoc3RhcnQ9JHt0aGlzLl9vblRvdWNoTW92ZX0+XG4gICAgICAgICAgPGRpdiBpZD1cImtub2JcIiBwYXJ0PVwia25vYlwiPlxuICAgICAgICAgICAgJHt0aGlzLmNzTGl2ZS5nZXRQcm9wZXJ0eVZhbHVlKCctLXNob3ctdmFsdWUnKSA9PSAndHJ1ZSdcbiAgICAgICAgICAgICAgPyBodG1sYDxkaXYgaWQ9XCJ2YWx1ZVwiIHBhcnQ9XCJ2YWx1ZVwiPiR7dGhpcy52YWx1ZX08L2Rpdj5gXG4gICAgICAgICAgICAgIDogbm90aGluZ31cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5gO1xuICB9XG5cbiAgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICB0aGlzLnN0ZXAgPSAxO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKCd0YWJpbmRleCcsICcwJyk7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoJ3JvbGUnLCAnc2xpZGVyJyk7XG4gIH1cblxuICBwcml2YXRlIF9vblRvdWNoTW92ZShldmVudCkge1xuICAgIGNvbnN0IGhhbmRsZVRvdWNoTW92ZSA9IGV2ZW50ID0+IHtcbiAgICAgIGNvbnN0IHsgeCB9ID0gdGhpcy5nZXRQb3NpdGlvbkZyb21FdmVudChldmVudCk7XG4gICAgICBjb25zdCBkaWZmWCA9IHggLSB0aGlzLl9yYWlsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQgLSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdDtcbiAgICAgIHRoaXMuY2FsY3VsYXRlVmFsdWUoZGlmZlgpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfTtcblxuICAgIGNvbnN0IGhhbmRsZVRvdWNoRW5kID0gKCkgPT4ge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgaGFuZGxlVG91Y2hNb3ZlKTtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgaGFuZGxlVG91Y2hFbmQpO1xuXG4gICAgICB0aGlzLnNhdmVSZXNwb25zZSh0aGlzLnZhbHVlLnRvU3RyaW5nKCkpO1xuICAgIH07XG5cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCBoYW5kbGVUb3VjaE1vdmUpO1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgaGFuZGxlVG91Y2hFbmQpO1xuXG4gICAgY29uc3QgeyB4IH0gPSB0aGlzLmdldFBvc2l0aW9uRnJvbUV2ZW50KGV2ZW50KTtcbiAgICBjb25zdCBkaWZmWCA9IHggLSB0aGlzLl9yYWlsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQgLSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdDtcbiAgICB0aGlzLmNhbGN1bGF0ZVZhbHVlKGRpZmZYKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgfVxuXG4gIHByaXZhdGUgX29uTW91c2VEb3duKGV2ZW50KSB7XG4gICAgY29uc3QgaGFuZGxlTW91c2VNb3ZlID0gKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAvLyBpZiB0aGUgcXRpLXNsaWRlci1pbnRlcmFjdGlvbiBoYXMgYW4gYWJzb2x1dGUgbGVmdCBwb3NpdGlvbiBhbmQgYm9keSBpcyBzY3JvbGxlZCBhIGJpdCwgdGFrZSBhY2NvdW50IGZvciB0aGF0XG4gICAgICBjb25zdCBkaWZmWCA9IGV2ZW50LnBhZ2VYIC0gdGhpcy5fcmFpbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0IC0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnQ7XG5cbiAgICAgIHRoaXMuY2FsY3VsYXRlVmFsdWUoZGlmZlgpO1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH07XG5cbiAgICBjb25zdCBoYW5kbGVNb3VzZVVwID0gKCkgPT4ge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgaGFuZGxlTW91c2VNb3ZlKTtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCBoYW5kbGVNb3VzZVVwKTtcblxuICAgICAgdGhpcy5zYXZlUmVzcG9uc2UodGhpcy52YWx1ZS50b1N0cmluZygpKTtcbiAgICB9O1xuXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgaGFuZGxlTW91c2VNb3ZlKTtcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgaGFuZGxlTW91c2VVcCk7XG5cbiAgICAvLyBpZiB0aGUgcXRpLXNsaWRlci1pbnRlcmFjdGlvbiBoYXMgYW4gYWJzb2x1dGUgbGVmdCBwb3NpdGlvbiBhbmQgYm9keSBpcyBzY3JvbGxlZCBhIGJpdCwgdGFrZSBhY2NvdW50IGZvciB0aGF0XG4gICAgY29uc3QgZGlmZlggPSBldmVudC5wYWdlWCAtIHRoaXMuX3JhaWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCAtIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0O1xuXG4gICAgdGhpcy5jYWxjdWxhdGVWYWx1ZShkaWZmWCk7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgfVxuXG4gIC8qKiBjYWxjdWxhdGVWYWx1ZSBnZXRzIHggcG9zaXRpb24gYW5kIGNvbXBhcmVzIHRoaXMgd2l0aCB0aGUgdG90YWwgd2lkdGggaW4gcGl4ZWxzICovXG4gIHByaXZhdGUgY2FsY3VsYXRlVmFsdWUoZGlmZlg6IG51bWJlcikge1xuICAgIGNvbnN0IHZhbHVlTm93ID0gdGhpcy5taW4gKyAoKHRoaXMubWF4IC0gdGhpcy5taW4pICogZGlmZlgpIC8gdGhpcy5fcmFpbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcbiAgICBjb25zdCByb3VuZGVkU3RlcFZhbHVlID0gdGhpcy5taW4gKyBNYXRoLnJvdW5kKCh2YWx1ZU5vdyAtIHRoaXMubWluKSAvIHRoaXMuX3N0ZXApICogdGhpcy5fc3RlcDtcbiAgICB0aGlzLnZhbHVlID0gcm91bmRlZFN0ZXBWYWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UG9zaXRpb25Gcm9tRXZlbnQoZTogYW55KToge1xuICAgIHg6IG51bWJlcjtcbiAgICB5OiBudW1iZXI7XG4gIH0ge1xuICAgIGxldCBfdG91Y2hNb3ZlO1xuICAgIGlmIChlLnR5cGUgPT0gJ3RvdWNoc3RhcnQnIHx8IGUudHlwZSA9PSAndG91Y2htb3ZlJyB8fCBlLnR5cGUgPT0gJ3RvdWNoZW5kJyB8fCBlLnR5cGUgPT0gJ3RvdWNoY2FuY2VsJykge1xuICAgICAgY29uc3QgZXZ0ID0gdHlwZW9mIGUub3JpZ2luYWxFdmVudCA9PT0gJ3VuZGVmaW5lZCcgPyBlIDogZS5vcmlnaW5hbEV2ZW50O1xuICAgICAgY29uc3QgdG91Y2ggPSBldnQudG91Y2hlc1swXSB8fCBldnQuY2hhbmdlZFRvdWNoZXNbMF07XG4gICAgICBfdG91Y2hNb3ZlID0ge1xuICAgICAgICB4OiB0b3VjaC5wYWdlWCxcbiAgICAgICAgeTogdG91Y2gucGFnZVlcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIGUudHlwZSA9PSAnbW91c2Vkb3duJyB8fFxuICAgICAgZS50eXBlID09ICdtb3VzZXVwJyB8fFxuICAgICAgZS50eXBlID09ICdtb3VzZW1vdmUnIHx8XG4gICAgICBlLnR5cGUgPT0gJ21vdXNlb3ZlcicgfHxcbiAgICAgIGUudHlwZSA9PSAnbW91c2VvdXQnIHx8XG4gICAgICBlLnR5cGUgPT0gJ21vdXNlZW50ZXInIHx8XG4gICAgICBlLnR5cGUgPT0gJ21vdXNlbGVhdmUnXG4gICAgKSB7XG4gICAgICBfdG91Y2hNb3ZlID0ge1xuICAgICAgICB4OiBlLmNsaWVudFgsXG4gICAgICAgIHk6IGUuY2xpZW50WVxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIF90b3VjaE1vdmU7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLXNsaWRlci1pbnRlcmFjdGlvbic6IFF0aVNsaWRlckludGVyYWN0aW9uO1xuICB9XG59XG4iLCAiaW1wb3J0IHtcbiAgaXRlbUNvbnRleHQsXG4gIHR5cGUgQ2FsY3VsYXRlLFxuICB0eXBlIEl0ZW1Db250ZXh0LFxuICB0eXBlIFJlc3BvbnNlVmFyaWFibGVcbn0gZnJvbSAnQGNpdG9sYWIvcXRpLWNvbXBvbmVudHMvcXRpLWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgY29uc3VtZSB9IGZyb20gJ0BsaXQvY29udGV4dCc7XG5pbXBvcnQgeyBMaXRFbGVtZW50LCBodG1sIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQsIHN0YXRlIH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuXG4vKipcbiAqIGh0dHBzOi8vd3d3Lmltc2dsb2JhbC5vcmcvc3BlYy9xdGkvdjNwMC9pbXBsI2guZmkyOXE4ZHViamd3XG4gKiA8cXRpLWN1c3RvbS1vcGVyYXRvciBjbGFzcz1cImpzLm9yZ1wiPlxuICAgICAgICA8cXRpLWJhc2UtdmFsdWUgYmFzZS10eXBlPVwic3RyaW5nXCI+PCFbQ0RBVEFbXG4gICAgICAgICAgY29uc29sZS5sb2coY29udGV4dC52YXJpYWJsZXMpO1xuICAgICAgICAgIHJldHVybiAnQidcbiAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdxdGktZW5kLWF0dGVtcHQtaW50ZXJhY3Rpb24nKS5kaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgXV0+PC9xdGktYmFzZS12YWx1ZT5cbiAgICAgIDwvcXRpLWN1c3RvbS1vcGVyYXRvcj5cbiAgICA8L3F0aS1zZXQtb3V0Y29tZS12YWx1ZT5cbiAqL1xuQGN1c3RvbUVsZW1lbnQoJ3F0aS1jdXN0b20tb3BlcmF0b3InKVxuZXhwb3J0IGNsYXNzIFF0aUN1c3RvbU9wZXJhdG9yIGV4dGVuZHMgTGl0RWxlbWVudCBpbXBsZW1lbnRzIENhbGN1bGF0ZSB7XG4gIHByaXZhdGUgb3BlcmF0b3JGdW5jdGlvbjogRnVuY3Rpb247XG5cbiAgQGNvbnN1bWUoeyBjb250ZXh0OiBpdGVtQ29udGV4dCwgc3Vic2NyaWJlOiB0cnVlIH0pXG4gIEBzdGF0ZSgpXG4gIHByaXZhdGUgX2NvbnRleHQ/OiBJdGVtQ29udGV4dDtcblxuICByZW5kZXIoKSB7XG4gICAgcmV0dXJuIGh0bWxgPHNsb3QgQHNsb3RjaGFuZ2U9JHt0aGlzLmhhbmRsZVNsb3RDaGFuZ2V9Pjwvc2xvdD5gO1xuICB9XG5cbiAgaGFuZGxlU2xvdENoYW5nZShldmVudDogRXZlbnQpIHtcbiAgICAvLyBleHBlY3RpbmcgPFshQ0RBVEFbIC4uLiBdXT4gaXMgY29udmVydGVkIGludG8gPCEtLSAuLi4gLS0+IHdpdGggcXRpLXRyYW5zZm9ybTogY0RhdGFUb0NvbW1lbnRcbiAgICBjb25zdCBjb21tZW50Tm9kZSA9IEFycmF5LmZyb20odGhpcy5maXJzdEVsZW1lbnRDaGlsZD8uY2hpbGROb2RlcyA/PyBbXSkuZmluZChcbiAgICAgIG5vZGUgPT4gbm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5DT01NRU5UX05PREVcbiAgICApO1xuICAgIHRyeSB7XG4gICAgICB0aGlzLm9wZXJhdG9yRnVuY3Rpb24gPSBuZXcgRnVuY3Rpb24oJ2NvbnRleHQnLCAnZm4nLCAnaXRlbScsIGNvbW1lbnROb2RlLnRleHRDb250ZW50ID8/ICcnKTsgICAgICBcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdjdXN0b20tb3BlcmF0b3IgY29udGFpbnMgaW52YWxpZCBqYXZhc2NyaXB0IGNvZGUnLCBlKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgY2FsY3VsYXRlKCkge1xuICAgIGNvbnN0IGZuID0ge1xuICAgICAgdmFyaWFibGU6IChyZXNwb25zZUlkZW50aWZpZXI6IHN0cmluZykgPT5cbiAgICAgICAgdGhpcy5fY29udGV4dD8udmFyaWFibGVzLmZpbmQodiA9PiB2LmlkZW50aWZpZXIgPT09IHJlc3BvbnNlSWRlbnRpZmllcik/LnZhbHVlID8/ICcnLFxuICAgICAgY29ycmVjdDogKHJlc3BvbnNlSWRlbnRpZmllcjogc3RyaW5nKSA9PlxuICAgICAgICAodGhpcy5fY29udGV4dD8udmFyaWFibGVzLmZpbmQodiA9PiB2LmlkZW50aWZpZXIgPT09IHJlc3BvbnNlSWRlbnRpZmllcikgYXMgUmVzcG9uc2VWYXJpYWJsZSlcbiAgICAgICAgICA/LmNvcnJlY3RSZXNwb25zZSA/PyAnJ1xuICAgIH07XG4gICAgY29uc3QgaXRlbSA9IHtcbiAgICAgIGdldFZhcmlhYmxlOiAodmFyaWFibGVJZGVudGlmaWVyOiBzdHJpbmcpID0+XG4gICAgICAgIHRoaXMuX2NvbnRleHQ/LnZhcmlhYmxlcy5maW5kKHYgPT4gdi5pZGVudGlmaWVyID09PSB2YXJpYWJsZUlkZW50aWZpZXIpLFxuICAgICAgdXBkYXRlT3V0Y29tZVZhcmlhYmxlOiAob3V0Y29tZUlkZW50aWZpZXI6IHN0cmluZywgdmFsdWU6IHN0cmluZyB8IHN0cmluZ1tdKSA9PiB7ICAgICAgICBcbiAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgIG5ldyBDdXN0b21FdmVudDx7IG91dGNvbWVJZGVudGlmaWVyOiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfCBzdHJpbmdbXSB9PigncXRpLXNldC1vdXRjb21lLXZhbHVlJywge1xuICAgICAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgICAgIGNvbXBvc2VkOiB0cnVlLFxuICAgICAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgICAgIG91dGNvbWVJZGVudGlmaWVyLFxuICAgICAgICAgICAgICB2YWx1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgICAgdXBkYXRlUmVzcG9uc2VWYXJpYWJsZTogKHJlc3BvbnNlSWRlbnRpZmllcjogc3RyaW5nLCByZXNwb25zZTogc3RyaW5nIHwgc3RyaW5nW10pID0+IHtcbiAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgIG5ldyBDdXN0b21FdmVudDx7IHJlc3BvbnNlSWRlbnRpZmllcjogc3RyaW5nOyByZXNwb25zZTogc3RyaW5nIHwgc3RyaW5nW10gfT4oJ3F0aS1pbnRlcmFjdGlvbi1yZXNwb25zZScsIHtcbiAgICAgICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgICAgICBjb21wb3NlZDogdHJ1ZSxcbiAgICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgICByZXNwb25zZUlkZW50aWZpZXIsXG4gICAgICAgICAgICAgIHJlc3BvbnNlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9OyAgIFxuICAgIFxuICAgIHJldHVybiB0aGlzLm9wZXJhdG9yRnVuY3Rpb24odGhpcy5fY29udGV4dCwgZm4sIGl0ZW0pO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1jdXN0b20tb3BlcmF0b3InOiBRdGlDdXN0b21PcGVyYXRvcjtcbiAgfVxufVxuIiwgImltcG9ydCB7IExpdEVsZW1lbnQsIGNzcywgaHRtbCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuXG5AY3VzdG9tRWxlbWVudCgncXRpLWFzc29jaWFibGUtaG90c3BvdCcpXG5leHBvcnQgY2xhc3MgUXRpQXNzb2NpYWJsZUhvdHNwb3QgZXh0ZW5kcyBMaXRFbGVtZW50IHtcbiAgc3RhdGljIHN0eWxlcyA9IGNzc2BcbiAgICA6aG9zdCB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgfVxuICBgO1xuXG4gIG92ZXJyaWRlIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG5cbiAgICB0aGlzLmRpc3BhdGNoRXZlbnQoXG4gICAgICBuZXcgQ3VzdG9tRXZlbnQoJ3F0aS1yZWdpc3Rlci1ob3RzcG90Jywge1xuICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICBjYW5jZWxhYmxlOiBmYWxzZSxcbiAgICAgICAgY29tcG9zZWQ6IHRydWVcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICByZXR1cm4gaHRtbGAgPHNsb3QgbmFtZT1cInF0aS1nYXAtaW1nXCI+PC9zbG90PiBgO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1hc3NvY2lhYmxlLWhvdHNwb3QnOiBRdGlBc3NvY2lhYmxlSG90c3BvdDtcbiAgfVxufVxuIiwgImltcG9ydCB7IGNzcywgaHRtbCwgTGl0RWxlbWVudCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50LCBwcm9wZXJ0eSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcblxuQGN1c3RvbUVsZW1lbnQoJ3F0aS1nYXAnKVxuZXhwb3J0IGNsYXNzIFF0aUdhcCBleHRlbmRzIExpdEVsZW1lbnQge1xuICBzdGF0aWMgc3R5bGVzID0gY3NzYFxuICAgIDpob3N0IHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgICB9XG4gIGA7XG5cbiAgQHByb3BlcnR5KHsgdHlwZTogTnVtYmVyLCByZWZsZWN0OiB0cnVlIH0pIHRhYmluZGV4OiBudW1iZXIgfCB1bmRlZmluZWQgPSAwO1xuXG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICByZXR1cm4gaHRtbGAgPHNsb3QgbmFtZT1cInF0aS1nYXAtdGV4dFwiPjwvc2xvdD5gO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1nYXAnOiBRdGlHYXA7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBjc3MsIExpdEVsZW1lbnQgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCwgcHJvcGVydHkgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5cbkBjdXN0b21FbGVtZW50KCdxdGktZ2FwLWltZycpXG5leHBvcnQgY2xhc3MgUXRpR2FwSW1nIGV4dGVuZHMgTGl0RWxlbWVudCB7XG4gIHN0YXRpYyBzdHlsZXMgPSBjc3NgXG4gICAgOmhvc3Qge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIHVzZXItc2VsZWN0OiBub25lO1xuICAgIH1cbiAgYDtcblxuICBAcHJvcGVydHkoeyB0eXBlOiBOdW1iZXIsIHJlZmxlY3Q6IHRydWUgfSkgdGFiaW5kZXg6IG51bWJlciB8IHVuZGVmaW5lZCA9IDA7XG5cbiAgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoJ3Nsb3QnLCAncXRpLWdhcC1pbWcnKTtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktZ2FwLWltZyc6IFF0aUdhcEltZztcbiAgfVxufVxuIiwgImltcG9ydCB7IGNzcywgaHRtbCwgTGl0RWxlbWVudCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50LCBwcm9wZXJ0eSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcblxuQGN1c3RvbUVsZW1lbnQoJ3F0aS1nYXAtdGV4dCcpXG5leHBvcnQgY2xhc3MgUXRpR2FwVGV4dCBleHRlbmRzIExpdEVsZW1lbnQge1xuICBzdGF0aWMgc3R5bGVzID0gY3NzYFxuICAgIDpob3N0IHtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7XG4gICAgfVxuICBgO1xuXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IE51bWJlciwgcmVmbGVjdDogdHJ1ZSB9KSB0YWJpbmRleDogbnVtYmVyIHwgdW5kZWZpbmVkID0gMDtcblxuICBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKCdzbG90JywgJ3F0aS1nYXAtdGV4dCcpO1xuICB9XG5cbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYDxzbG90Pjwvc2xvdD5gO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1nYXAtdGV4dCc6IFF0aUdhcFRleHQ7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBjc3MgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCwgcHJvcGVydHkgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBRdGlDaG9pY2UgfSBmcm9tICcuL2ludGVybmFsL2Nob2ljZS9xdGktY2hvaWNlJztcblxuLy8gdHlwZSBzaGFwZSA9IHsgc2hhcGU6ICdyZWN0JyB8ICdjaXJjbGUnIHwgJ3BvbHknOyBjb29yZHM6IG51bWJlcltdIH07XG5cbkBjdXN0b21FbGVtZW50KCdxdGktaG90c3BvdC1jaG9pY2UnKVxuZXhwb3J0IGNsYXNzIFF0aUhvdHNwb3RDaG9pY2UgZXh0ZW5kcyBRdGlDaG9pY2Uge1xuICBzdGF0aWMgc3R5bGVzID0gY3NzYFxuICAgIDpob3N0IHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB9XG4gIGA7XG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ2FyaWEtb3JkZXJ2YWx1ZScsIHR5cGU6IE51bWJlciwgcmVmbGVjdDogdHJ1ZSB9KSBvcmRlcjogbnVtYmVyO1xufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktaG90c3BvdC1jaG9pY2UnOiBRdGlIb3RzcG90Q2hvaWNlO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgY3NzLCBodG1sIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBRdGlDaG9pY2UgfSBmcm9tICcuL2ludGVybmFsL2Nob2ljZS9xdGktY2hvaWNlJztcblxuQGN1c3RvbUVsZW1lbnQoJ3F0aS1ob3R0ZXh0JylcbmV4cG9ydCBjbGFzcyBRdGlIb3R0ZXh0IGV4dGVuZHMgUXRpQ2hvaWNlIHtcbiAgc3RhdGljIHN0eWxlcyA9IGNzc2BcbiAgICA6aG9zdCB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7XG4gICAgfVxuICBgO1xuXG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICByZXR1cm4gaHRtbGA8ZGl2IHBhcnQ9XCJjaFwiPjxkaXYgcGFydD1cImNoYVwiPjwvZGl2PjwvZGl2PlxuICAgICAgPHNsb3Q+PC9zbG90PiBgO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1ob3R0ZXh0JzogUXRpSG90dGV4dDtcbiAgfVxufVxuIiwgImltcG9ydCB7IGNzcywgaHRtbCwgTGl0RWxlbWVudCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50LCBwcm9wZXJ0eSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcblxuQGN1c3RvbUVsZW1lbnQoJ3F0aS1pbmxpbmUtY2hvaWNlJylcbmV4cG9ydCBjbGFzcyBRdGlJbmxpbmVDaG9pY2UgZXh0ZW5kcyBMaXRFbGVtZW50IHtcbiAgc3RhdGljIG92ZXJyaWRlIGdldCBzdHlsZXMoKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIGNzc2BcbiAgICAgICAgOmhvc3Qge1xuICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgfVxuICAgICAgYFxuICAgIF07XG4gIH1cblxuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcgfSlcbiAgaWRlbnRpZmllcjogc3RyaW5nO1xuXG4gIG92ZXJyaWRlIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG5cbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5fb25TZWxlY3RJbmxpbmVDaG9pY2UpO1xuXG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KFxuICAgICAgbmV3IEN1c3RvbUV2ZW50KCdxdGktaW5saW5lLWNob2ljZS1yZWdpc3RlcicsIHtcbiAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgY2FuY2VsYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbXBvc2VkOiB0cnVlXG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBvdmVycmlkZSBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5fb25TZWxlY3RJbmxpbmVDaG9pY2UpO1xuICB9XG5cbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYCA8c2xvdD48L3Nsb3Q+IGA7XG4gIH1cblxuICBwcml2YXRlIF9vblNlbGVjdElubGluZUNob2ljZSgpIHtcbiAgICAvLyBpZiAodGhpcy5kaXNhYmxlZCB8fCB0aGlzLnJlYWRvbmx5KSByZXR1cm47XG5cbiAgICB0aGlzLmRpc3BhdGNoRXZlbnQoXG4gICAgICBuZXcgQ3VzdG9tRXZlbnQoJ3F0aS1pbmxpbmUtY2hvaWNlLXNlbGVjdCcsIHtcbiAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgY2FuY2VsYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbXBvc2VkOiB0cnVlLFxuICAgICAgICBkZXRhaWw6IHsgaWRlbnRpZmllcjogdGhpcy5pZGVudGlmaWVyIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktaW5saW5lLWNob2ljZSc6IFF0aUlubGluZUNob2ljZTtcbiAgfVxufVxuIiwgImltcG9ydCB7IGNzcywgaHRtbCwgbm90aGluZyB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50LCBwcm9wZXJ0eSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IFF0aUNob2ljZSB9IGZyb20gJy4vaW50ZXJuYWwvY2hvaWNlL3F0aS1jaG9pY2UnO1xuXG4vKipcbiAqIEBzdW1tYXJ5IFNob3J0IHN1bW1hcnkgb2YgdGhlIGNvbXBvbmVudCdzIGludGVuZGVkIHVzZS5cbiAqIEBkb2N1bWVudGF0aW9uIGh0dHBzOi8vd3d3Lmltc2dsb2JhbC5vcmcvc3BlYy9xdGkvdjNwMC9pbXBsI2guajludTFvYTF0dTNiXG4gKiBAc3RhdHVzIHN0YWJsZVxuICogQHNpbmNlIDQuMFxuICpcbiAqIEBldmVudCBxdGktY2hvaWNlLWVsZW1lbnQtc2VsZWN0ZWQgLSBFbWl0dGVkIHdoZW4gYSBjaG9pY2UgaXMgc2VsZWN0ZWQuXG4gKiBAZXZlbnQgcXRpLXJlZ2lzdGVyLWNob2ljZSAtIEVtaXR0ZWQgd2hlbiBhbiBjaG9pY2UgaXMgYWRkZWRcbiAqIEBldmVudCBxdGktbG9vc2UtY2hvaWNlIC0gRW1pdHRlZCB3aGVuIGEgY2hvaWNlIGlzIHJlbW92ZWRcbiAqXG4gKiBAc2xvdCAtIFRoZSBkZWZhdWx0IHNsb3QuXG4gKi9cbkBjdXN0b21FbGVtZW50KCdxdGktc2ltcGxlLWNob2ljZScpXG5leHBvcnQgY2xhc3MgUXRpU2ltcGxlQ2hvaWNlIGV4dGVuZHMgUXRpQ2hvaWNlIHtcbiAgc3RhdGljIHN0eWxlcyA9IGNzc2BcbiAgICA6aG9zdCB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7XG4gICAgfVxuICAgIHNsb3Qge1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICB9XG4gICAgW3BhcnQ9J2NoJ10ge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZsZXgtc2hyaW5rOiAwO1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIH1cbiAgYDtcblxuICAvLyBwcm9wZXJ0eSBsYWJlbFxuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcsIGF0dHJpYnV0ZTogZmFsc2UgfSlcbiAgcHVibGljIG1hcmtlcjogc3RyaW5nO1xuXG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICByZXR1cm4gaHRtbGA8ZGl2IHBhcnQ9XCJjaFwiPlxuICAgICAgICA8ZGl2IHBhcnQ9XCJjaGFcIj48L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgJHt0aGlzLm1hcmtlciA/IGh0bWxgPGRpdiBpZD1cImxhYmVsXCI+JHt0aGlzLm1hcmtlcn08L2Rpdj5gIDogbm90aGluZ31cbiAgICAgIDxzbG90IHBhcnQ9XCJzbG90XCI+PC9zbG90PiBgO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1zaW1wbGUtY2hvaWNlJzogUXRpU2ltcGxlQ2hvaWNlO1xuICB9XG59XG4iLCAiLyogb25seSBleHBvcnRlZCB0byBvdmVycmlkZSBvciBleHRlbmQgZm9yIHNwZWNpZmljIHB1cnBvc2VzICovXG5leHBvcnQgKiBmcm9tICcuL2ludGVybmFsL2V2ZW50LXR5cGVzJztcbmV4cG9ydCAqIGZyb20gJy4vaW50ZXJuYWwvZXZlbnRzJztcbmV4cG9ydCAqIGZyb20gJy4vaW50ZXJuYWwvZXhwcmVzc2lvbi1yZXN1bHQnO1xuZXhwb3J0ICogZnJvbSAnLi9pbnRlcm5hbC92YXJpYWJsZXMnO1xuLyogb25seSBleHBvcnRlZCB0byBvdmVycmlkZSBvciBleHRlbmQgZm9yIHNwZWNpZmljIHB1cnBvc2VzICovXG5leHBvcnQgKiBmcm9tICcuL3F0aS1hc3Nlc3NtZW50LWl0ZW0vcXRpLWFzc2Vzc21lbnQtaXRlbSc7XG5leHBvcnQgKiBmcm9tICcuL3F0aS1hc3Nlc3NtZW50LXN0aW11bHVzLXJlZi9xdGktYXNzZXNzbWVudC1zdGltdWx1cy1yZWYnO1xuZXhwb3J0ICogZnJvbSAnLi9xdGktaW50ZXJhY3Rpb24vaW50ZXJuYWwvY2hvaWNlL3F0aS1jaG9pY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9xdGktaXRlbS1ib2R5L3F0aS1pdGVtLWJvZHknO1xuZXhwb3J0ICogZnJvbSAnLi9xdGktcHJvbXB0L3F0aS1wcm9tcHQnO1xuZXhwb3J0ICogZnJvbSAnLi9xdGktc3R5bGVzaGVldC9xdGktc3R5bGVzaGVldCc7XG4vKiBzdGFydCByZXNwb25zZSBhbmQgb3V0Y29tZSAqL1xuZXhwb3J0ICogZnJvbSAnLi9xdGktdmFyaWFibGUtZGVjbGFyYXRpb24vcXRpLW91dGNvbWUtZGVjbGFyYXRpb24vcXRpLW91dGNvbWUtZGVjbGFyYXRpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9xdGktdmFyaWFibGUtZGVjbGFyYXRpb24vcXRpLXJlc3BvbnNlLWRlY2xhcmF0aW9uL3F0aS1yZXNwb25zZS1kZWNsYXJhdGlvbic7XG4vKiBlbmQgcmVzcG9uc2UgYW5kIG91dGNvbWUgKi9cbmV4cG9ydCAqIGZyb20gJy4vcXRpLWNvbXBhbmlvbi1tYXRlcmlhbHMtaW5mby9xdGktY29tcGFuaW9uLW1hdGVyaWFscy1pbmZvJztcbmV4cG9ydCAqIGZyb20gJy4vcXRpLXJ1YnJpYy1ibG9jay9xdGktY29udGVudC1ib2R5JztcbmV4cG9ydCAqIGZyb20gJy4vcXRpLXJ1YnJpYy1ibG9jay9xdGktcnVicmljLWJsb2NrJztcbi8qIHN0YXJ0IGZlZWRiYWNrICovXG5leHBvcnQgKiBmcm9tICcuL3F0aS1mZWVkYmFjay9xdGktZmVlZGJhY2stYmxvY2svcXRpLWZlZWRiYWNrLWJsb2NrJztcbmV4cG9ydCAqIGZyb20gJy4vcXRpLWZlZWRiYWNrL3F0aS1mZWVkYmFjay1pbmxpbmUvcXRpLWZlZWRiYWNrLWlubGluZSc7XG5leHBvcnQgKiBmcm9tICcuL3F0aS1mZWVkYmFjay9xdGktbW9kYWwtZmVlZGJhY2svcXRpLW1vZGFsLWZlZWRiYWNrJztcbi8qIGVuZCBmZWVkYmFjayAqL1xuLyogc3RhcnQgdGV4dGVudHJ5aW50ZXJhY3Rpb24gKi9cbmV4cG9ydCAqIGZyb20gJy4vcXRpLWludGVyYWN0aW9uL3F0aS1leHRlbmRlZC10ZXh0LWludGVyYWN0aW9uL3F0aS1leHRlbmRlZC10ZXh0LWludGVyYWN0aW9uJztcbmV4cG9ydCAqIGZyb20gJy4vcXRpLWludGVyYWN0aW9uL3F0aS10ZXh0LWVudHJ5LWludGVyYWN0aW9uL3F0aS10ZXh0LWVudHJ5LWludGVyYWN0aW9uJztcbi8qIGVuZCB0ZXh0ZW50cnlpbnRlcmFjdGlvbiAqL1xuLyogc3RhcnQgaG90dGV4dCAqL1xuZXhwb3J0ICogZnJvbSAnLi9xdGktaW50ZXJhY3Rpb24vcXRpLWhvdHRleHQtaW50ZXJhY3Rpb24vcXRpLWhvdHRleHQtaW50ZXJhY3Rpb24nO1xuLyogZW5kIGhvdHRleHQgKi9cbi8qIHN0YXJ0IGlubGluZWNob2ljZSAqL1xuZXhwb3J0ICogZnJvbSAnLi9xdGktaW50ZXJhY3Rpb24vcXRpLWlubGluZS1jaG9pY2UtaW50ZXJhY3Rpb24vcXRpLWlubGluZS1jaG9pY2UtaW50ZXJhY3Rpb24nO1xuLyogZW5kIGlubGluZWNob2ljZSAqL1xuLyogc3RhcnQgY2hvaWNlaW50ZXJhY3Rpb24gKi9cbmV4cG9ydCAqIGZyb20gJy4vcXRpLWludGVyYWN0aW9uL3F0aS1jaG9pY2UtaW50ZXJhY3Rpb24vcXRpLWNob2ljZS1pbnRlcmFjdGlvbic7XG4vKiBlbmQgY2hvaWNlaW50ZXJhY3Rpb24gKi9cbmV4cG9ydCAqIGZyb20gJy4vcXRpLW91dGNvbWUtcHJvY2Vzc2luZy9xdGktb3V0Y29tZS1wcm9jZXNzaW5nJztcbmV4cG9ydCAqIGZyb20gJy4vcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcnO1xuLyogc3RhcnQgY3VzdG9tIGludGVyYWN0aW9ucyAqL1xuZXhwb3J0ICogZnJvbSAnLi9xdGktaW50ZXJhY3Rpb24vcXRpLXBvcnRhYmxlLWN1c3RvbS1pbnRlcmFjdGlvbi9xdGktcG9ydGFibGUtY3VzdG9tLWludGVyYWN0aW9uJztcbi8qIGVuZCBjdXN0b20gaW50ZXJhY3Rpb25zICovXG4vKiBzdGFydCBvbmx5IHByZXZpZXcgaXRlbXMgKi9cbmV4cG9ydCAqIGZyb20gJy4vcXRpLWludGVyYWN0aW9uL3F0aS1hc3NvY2lhdGUtaW50ZXJhY3Rpb24vcXRpLWFzc29jaWF0ZS1pbnRlcmFjdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL3F0aS1pbnRlcmFjdGlvbi9xdGktY3VzdG9tLWludGVyYWN0aW9uL3F0aS1jdXN0b20taW50ZXJhY3Rpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9xdGktaW50ZXJhY3Rpb24vcXRpLWVuZC1hdHRlbXB0LWludGVyYWN0aW9uL3F0aS1lbmQtYXR0ZW1wdC1pbnRlcmFjdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL3F0aS1pbnRlcmFjdGlvbi9xdGktZ2FwLW1hdGNoLWludGVyYWN0aW9uL3F0aS1nYXAtbWF0Y2gtaW50ZXJhY3Rpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9xdGktaW50ZXJhY3Rpb24vcXRpLWdyYXBoaWMtYXNzb2NpYXRlLWludGVyYWN0aW9uL3F0aS1ncmFwaGljLWFzc29jaWF0ZS1pbnRlcmFjdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL3F0aS1pbnRlcmFjdGlvbi9xdGktZ3JhcGhpYy1nYXAtbWF0Y2gtaW50ZXJhY3Rpb24vcXRpLWdyYXBoaWMtZ2FwLW1hdGNoLWludGVyYWN0aW9uJztcbmV4cG9ydCAqIGZyb20gJy4vcXRpLWludGVyYWN0aW9uL3F0aS1ncmFwaGljLW9yZGVyLWludGVyYWN0aW9uL3F0aS1ncmFwaGljLW9yZGVyLWludGVyYWN0aW9uJztcbmV4cG9ydCAqIGZyb20gJy4vcXRpLWludGVyYWN0aW9uL3F0aS1ob3RzcG90LWludGVyYWN0aW9uL3F0aS1ob3RzcG90LWludGVyYWN0aW9uJztcbmV4cG9ydCAqIGZyb20gJy4vcXRpLWludGVyYWN0aW9uL3F0aS1tYXRjaC1pbnRlcmFjdGlvbi9xdGktbWF0Y2gtaW50ZXJhY3Rpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9xdGktaW50ZXJhY3Rpb24vcXRpLW1lZGlhLWludGVyYWN0aW9uL3F0aS1tZWRpYS1pbnRlcmFjdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL3F0aS1pbnRlcmFjdGlvbi9xdGktb3JkZXItaW50ZXJhY3Rpb24vcXRpLW9yZGVyLWludGVyYWN0aW9uJztcbmV4cG9ydCAqIGZyb20gJy4vcXRpLWludGVyYWN0aW9uL3F0aS1wb3NpdGlvbi1vYmplY3QtaW50ZXJhY3Rpb24vcXRpLXBvc2l0aW9uLW9iamVjdC1pbnRlcmFjdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL3F0aS1pbnRlcmFjdGlvbi9xdGktcG9zaXRpb24tb2JqZWN0LWludGVyYWN0aW9uL3F0aS1wb3NpdGlvbi1vYmplY3Qtc3RhZ2UnO1xuZXhwb3J0ICogZnJvbSAnLi9xdGktaW50ZXJhY3Rpb24vcXRpLXNlbGVjdC1wb2ludC1pbnRlcmFjdGlvbi9xdGktc2VsZWN0LXBvaW50LWludGVyYWN0aW9uJztcbmV4cG9ydCAqIGZyb20gJy4vcXRpLWludGVyYWN0aW9uL3F0aS1zbGlkZXItaW50ZXJhY3Rpb24vcXRpLXNsaWRlci1pbnRlcmFjdGlvbic7XG4vKiBlbmQgb25seSBwcmV2aWV3IGl0ZW1zICovXG5leHBvcnQgKiBmcm9tICcuL3F0aS1hc3Nlc3NtZW50LWl0ZW0vcXRpLWFzc2Vzc21lbnQtaXRlbS5jb250ZXh0JztcbmV4cG9ydCAqIGZyb20gJy4vcXRpLWN1c3RvbS1vcGVyYXRvci9xdGktY3VzdG9tLW9wZXJhdG9yJztcbmV4cG9ydCAqIGZyb20gJy4vcXRpLWludGVyYWN0aW9uL2ludGVybmFsL2ludGVyYWN0aW9uL2ludGVyYWN0aW9uJztcbmV4cG9ydCAqIGZyb20gJy4vcXRpLWludGVyYWN0aW9uL3F0aS1hc3NvY2lhYmxlLWhvdHNwb3QnO1xuZXhwb3J0ICogZnJvbSAnLi9xdGktaW50ZXJhY3Rpb24vcXRpLWdhcCc7XG5leHBvcnQgKiBmcm9tICcuL3F0aS1pbnRlcmFjdGlvbi9xdGktZ2FwLWltZyc7XG5leHBvcnQgKiBmcm9tICcuL3F0aS1pbnRlcmFjdGlvbi9xdGktZ2FwLXRleHQnO1xuZXhwb3J0ICogZnJvbSAnLi9xdGktaW50ZXJhY3Rpb24vcXRpLWhvdHNwb3QtY2hvaWNlJztcbmV4cG9ydCAqIGZyb20gJy4vcXRpLWludGVyYWN0aW9uL3F0aS1ob3R0ZXh0JztcbmV4cG9ydCAqIGZyb20gJy4vcXRpLWludGVyYWN0aW9uL3F0aS1pbmxpbmUtY2hvaWNlJztcbmV4cG9ydCAqIGZyb20gJy4vcXRpLWludGVyYWN0aW9uL3F0aS1zaW1wbGUtYXNzb2NpYWJsZS1jaG9pY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9xdGktaW50ZXJhY3Rpb24vcXRpLXNpbXBsZS1jaG9pY2UnO1xuXG5jb25zb2xlLmxvZyhcbiAgJyVjQ1x1MDBCRlRPJWNMYWIlYzogcXRpLWNvbXBvbmVudHMgbG9hZGVkJyxcbiAgJ2ZvbnQtd2VpZ2h0OmJvbGQ7IGNvbG9yOmdyZWVuJyxcbiAgJ2ZvbnQtZmFtaWx5OiBcIlBUIFNhbnNcIiwgZm9udC13ZWlnaHQ6Ym9sZDsgY29sb3I6Z3JlZW47IGZvbnQtc2l6ZTogc21hbGxlcjt2ZXJ0aWNhbC1hbGlnbjogc3ViJyxcbiAgJ2ZvbnQtd2VpZ2h0OnVuc2V0J1xuKTtcblxuLy8gY3NzIGZvciBmb250IHB0LXNhbnMgYW5kIHN1YnNjcmlwdCBhbmQgZ3JlZW5cbiJdLAogICJtYXBwaW5ncyI6ICIrREFBQSxPQUFTLFdBQUFBLE9BQWUsZUFDeEIsT0FBUyxjQUFBQyxHQUFZLFFBQUFDLE9BQVksTUFDakMsT0FBUyxpQkFBQUMsR0FBZSxZQUFBQyxNQUFnQixvQkMyQmpDLFNBQVNDLEVBQU1DLEVBQWlDQyxFQUF3QixDQUM3RSxJQUFNQyxFQUEwQ0MsRUFBQSxDQUM5QyxxQkFBc0IsSUFDbkJGLEdBRUwsTUFBTyxDQUErQkcsRUFBa0JDLElBQTBELENBRWhILEdBQU0sQ0FBRSxPQUFBQyxDQUFPLEVBQUlGLEVBQ2JHLEVBQW9CLE1BQU0sUUFBUVAsQ0FBWSxFQUFJQSxFQUFlLENBQUNBLENBQVksRUFHcEZJLEVBQU0sT0FBUyxTQUEyQkksRUFBZ0UsQ0FDeEdELEVBQWtCLFFBQVFFLEdBQVksQ0FDcEMsSUFBTUMsRUFBTUQsRUFDWixHQUFJRCxFQUFhLElBQUlFLENBQUcsRUFBRyxDQUN6QixJQUFNQyxFQUFXSCxFQUFhLElBQUlFLENBQUcsRUFDL0JFLEVBQVcsS0FBS0YsQ0FBRyxFQUVyQkMsSUFBYUMsSUFDWCxDQUFDVixFQUFnQixzQkFBd0IsS0FBSyxhQUMvQyxLQUFLRyxDQUFlLEVBQStCTSxFQUFVQyxDQUFRLENBRzVFLENBQ0YsQ0FBQyxFQUVETixFQUFPLEtBQUssS0FBTUUsQ0FBWSxDQUNoQyxDQUNGLENBQ0YsQ0MxREEsT0FBUyxpQkFBQUssT0FBcUIsZUFTdkIsSUFBTUMsR0FBdUIsQ0FDbEMsQ0FDRSxXQUFZLG1CQUNaLFlBQWEsU0FDYixTQUFVLFNBQ1YsTUFBTyxVQUNQLEtBQU0sU0FDUixF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QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQW1CVEMsRUFBQSxDQUROQyxHQUFTLENBQUUsS0FBTSxPQUFRLFVBQVcsRUFBTSxDQUFDLEdBbkJqQ04sR0FvQkosc0JBcEJJQSxHQUFOSyxFQUFBLENBRE5FLEdBQWMsbUJBQW1CLEdBQ3JCUCxJQ3VEYixRQUFRLElBQ04sMENBQ0EsZ0NBQ0EsZ0dBQ0EsbUJBQ0YiLAogICJuYW1lcyI6IFsicHJvdmlkZSIsICJMaXRFbGVtZW50IiwgImh0bWwiLCAiY3VzdG9tRWxlbWVudCIsICJwcm9wZXJ0eSIsICJ3YXRjaCIsICJwcm9wZXJ0eU5hbWUiLCAib3B0aW9ucyIsICJyZXNvbHZlZE9wdGlvbnMiLCAiX19zcHJlYWRWYWx1ZXMiLCAicHJvdG8iLCAiZGVjb3JhdGVkRm5OYW1lIiwgInVwZGF0ZSIsICJ3YXRjaGVkUHJvcGVydGllcyIsICJjaGFuZ2VkUHJvcHMiLCAicHJvcGVydHkiLCAia2V5IiwgIm9sZFZhbHVlIiwgIm5ld1ZhbHVlIiwgImNyZWF0ZUNvbnRleHQiLCAiaXRlbUNvbnRleHRWYXJpYWJsZXMiLCAiaXRlbUNvbnRleHQiLCAiUXRpQXNzZXNzbWVudEl0ZW0iLCAiTGl0RWxlbWVudCIsICJfIiwgImRpc2FibGVkIiwgImNoIiwgInJlYWRvbmx5IiwgIml0ZW1Db250ZXh0VmFyaWFibGVzIiwgIl9fc3ByZWFkUHJvcHMiLCAiX19zcHJlYWRWYWx1ZXMiLCAiZmVlZGJhY2tFbGVtZW50IiwgInJlc3BvbnNlSWRlbnRpZmllciIsICJjb3VudEF0dGVtcHQiLCAib3V0Y29tZUlkZW50aWZpZXIiLCAidmFsdWUiLCAidiIsICJ2YXJpYWJsZSIsICJtYXRjaGluZ1ZhbHVlIiwgImludGVyYWN0aW9uRWxlbWVudCIsICJlbCIsICJmZSIsICJteVJlc3BvbnNlcyIsICJyZXNwb25zZSIsICJpbnRlcmFjdGlvbiIsICJpIiwgImh0bWwiLCAic2hvdyIsICJyZXNwb25zZXMiLCAidmFyaSIsICJjciIsICJjb3VudE51bUF0dGVtcHRzIiwgIl9hIiwgInJlc3BvbnNlUHJvY2Vzc29yIiwgImlkZW50aWZpZXIiLCAiZXZlbnQiLCAib3V0Y29tZVZhcmlhYmxlIiwgIm5hbWUiLCAiZGV0YWlsIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJwcm9wZXJ0eSIsICJ3YXRjaCIsICJwcm92aWRlIiwgIml0ZW1Db250ZXh0IiwgImN1c3RvbUVsZW1lbnQiLCAiTGl0RWxlbWVudCIsICJjdXN0b21FbGVtZW50IiwgInByb3BlcnR5IiwgIlF0aUFzc2Vzc21lbnRTdGltdWx1c1JlZiIsICJMaXRFbGVtZW50IiwgImV2ZW50IiwgInN0aW11bHVzUmVmIiwgIl9hIiwgInBhdGgiLCAic3RpbXVsdXMiLCAicXRpVHJhbnNmb3JtSXRlbSIsICJhcGkiLCAiZWxlbWVudHMiLCAiX19kZWNvcmF0ZUNsYXNzIiwgInByb3BlcnR5IiwgImN1c3RvbUVsZW1lbnQiLCAiTGl0RWxlbWVudCIsICJodG1sIiwgInByb3BlcnR5IiwgIktFWUNPREUiLCAiUXRpQ2hvaWNlIiwgIkxpdEVsZW1lbnQiLCAiXyIsICJkaXNhYmxlZCIsICJldmVudCIsICJodG1sIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJwcm9wZXJ0eSIsICJ2YWx1ZSIsICJ3YXRjaCIsICJjdXN0b21FbGVtZW50IiwgImh0bWwiLCAiTGl0RWxlbWVudCIsICJjc3MiLCAicXRpX2l0ZW1fYm9keV9zdHlsZXNfZGVmYXVsdCIsICJRdGlJdGVtQm9keSIsICJMaXRFbGVtZW50IiwgImh0bWwiLCAicXRpX2l0ZW1fYm9keV9zdHlsZXNfZGVmYXVsdCIsICJfX2RlY29yYXRlQ2xhc3MiLCAiY3VzdG9tRWxlbWVudCIsICJodG1sIiwgIkxpdEVsZW1lbnQiLCAiY3VzdG9tRWxlbWVudCIsICJRdGlQcm9tcHQiLCAiTGl0RWxlbWVudCIsICJodG1sIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJjdXN0b21FbGVtZW50IiwgIkxpdEVsZW1lbnQiLCAiY3VzdG9tRWxlbWVudCIsICJRdGlTdHlsZXNoZWV0IiwgIkxpdEVsZW1lbnQiLCAiX2NoYW5nZWRQcm9wZXJ0aWVzIiwgIml0ZW0iLCAibGluayIsICJzdHlsZXMiLCAiZXJyb3IiLCAiX19kZWNvcmF0ZUNsYXNzIiwgImN1c3RvbUVsZW1lbnQiLCAiY29uc3VtZSIsICJjc3MiLCAiaHRtbCIsICJjdXN0b21FbGVtZW50IiwgInByb3BlcnR5IiwgInN0YXRlIiwgImh0bWwiLCAiTGl0RWxlbWVudCIsICJjdXN0b21FbGVtZW50IiwgIlF0aVZhcmlhYmxlRGVjbGFyYXRpb24iLCAiTGl0RWxlbWVudCIsICJodG1sIiwgInZhcmlhYmxlIiwgImh0bWxWYWx1ZXMiLCAiZGVmYXVsdFZhbHVlcyIsICJuIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJjdXN0b21FbGVtZW50IiwgIlF0aU91dGNvbWVEZWNsYXJhdGlvbiIsICJRdGlWYXJpYWJsZURlY2xhcmF0aW9uIiwgIl9hIiwgIl9iIiwgInZhbHVlIiwgInYiLCAiaHRtbCIsICJ0YWJsZSIsICJlbnRyaWVzIiwgImVudHJ5IiwgInNvdXJjZVZhbHVlIiwgInRhcmdldFZhbHVlIiwgIm91dGNvbWVWYXJpYWJsZSIsICJjc3MiLCAiX19kZWNvcmF0ZUNsYXNzIiwgInByb3BlcnR5IiwgImNvbnN1bWUiLCAiaXRlbUNvbnRleHQiLCAic3RhdGUiLCAiY3VzdG9tRWxlbWVudCIsICJjb25zdW1lIiwgImNzcyIsICJodG1sIiwgImN1c3RvbUVsZW1lbnQiLCAicHJvcGVydHkiLCAic3RhdGUiLCAiUXRpUmVzcG9uc2VEZWNsYXJhdGlvbiIsICJRdGlWYXJpYWJsZURlY2xhcmF0aW9uIiwgIl9hIiwgIl9iIiwgInZhbHVlIiwgInYiLCAiaHRtbCIsICJyZXNwb25zZVZhcmlhYmxlIiwgInJlc3VsdCIsICJjb3JyZWN0UmVzcG9uc2UiLCAidmFsdWVzIiwgImkiLCAiY3NzIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJwcm9wZXJ0eSIsICJjb25zdW1lIiwgIml0ZW1Db250ZXh0IiwgInN0YXRlIiwgImN1c3RvbUVsZW1lbnQiLCAiTGl0RWxlbWVudCIsICJjdXN0b21FbGVtZW50IiwgIlF0aUNvbXBhbmlvbk1hdGVyaWFsc0luZm8iLCAiTGl0RWxlbWVudCIsICJfX2RlY29yYXRlQ2xhc3MiLCAiY3VzdG9tRWxlbWVudCIsICJMaXRFbGVtZW50IiwgImh0bWwiLCAiY3VzdG9tRWxlbWVudCIsICJRdGlDb250ZW50Qm9keSIsICJMaXRFbGVtZW50IiwgImh0bWwiLCAiX19kZWNvcmF0ZUNsYXNzIiwgImN1c3RvbUVsZW1lbnQiLCAiTGl0RWxlbWVudCIsICJjc3MiLCAiaHRtbCIsICJjdXN0b21FbGVtZW50IiwgInByb3BlcnR5IiwgIlF0aVJ1YnJpY0Jsb2NrIiwgIkxpdEVsZW1lbnQiLCAib2xkIiwgImRpc2FibGVkIiwgImNsYXNzTmFtZSIsICJodG1sIiwgImNzcyIsICJfX2RlY29yYXRlQ2xhc3MiLCAicHJvcGVydHkiLCAid2F0Y2giLCAiY3VzdG9tRWxlbWVudCIsICJjc3MiLCAiaHRtbCIsICJjdXN0b21FbGVtZW50IiwgIkxpdEVsZW1lbnQiLCAicHJvcGVydHkiLCAiZGVjaW1hbFNlcGFyYXRvciIsICJjb252ZXJ0TnVtYmVyVG9Vbml2ZXJhbEZvcm1hdCIsICJudW1iZXIiLCAiZFNlcCIsICJJc051bGxPclVuZGVmaW5lZCIsICJ2YWx1ZSIsICJyZW1vdmVEb3VibGVTbGFzaGVzIiwgInN0ciIsICJRdGlGZWVkYmFjayIsICJMaXRFbGVtZW50IiwgIm91dGNvbWVJZGVudGlmaWVyIiwgIm91dGNvbWVWYXJpYWJsZSIsICJpc0ZvdW5kIiwgIklzTnVsbE9yVW5kZWZpbmVkIiwgInZhbHVlIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJwcm9wZXJ0eSIsICJRdGlGZWVkYmFja0Jsb2NrIiwgIlF0aUZlZWRiYWNrIiwgImh0bWwiLCAiX2NoYW5nZWRQcm9wZXJ0aWVzIiwgImNzcyIsICJfX2RlY29yYXRlQ2xhc3MiLCAiY3VzdG9tRWxlbWVudCIsICJjc3MiLCAiaHRtbCIsICJjdXN0b21FbGVtZW50IiwgIlF0aUZlZWRiYWNrSW5saW5lIiwgIlF0aUZlZWRiYWNrIiwgImh0bWwiLCAiY3NzIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJjdXN0b21FbGVtZW50IiwgImNzcyIsICJodG1sIiwgImN1c3RvbUVsZW1lbnQiLCAiUXRpTW9kYWxGZWVkYmFjayIsICJRdGlGZWVkYmFjayIsICJodG1sIiwgImNzcyIsICJfX2RlY29yYXRlQ2xhc3MiLCAiY3VzdG9tRWxlbWVudCIsICJjc3MiLCAiaHRtbCIsICJpZkRlZmluZWQiLCAicHJvcGVydHkiLCAiTGl0RWxlbWVudCIsICJJbnRlcmFjdGlvbiIsICJMaXRFbGVtZW50IiwgInZhbCIsICJ2YWx1ZSIsICJfX2RlY29yYXRlQ2xhc3MiLCAicHJvcGVydHkiLCAicmVmIiwgImNyZWF0ZVJlZiIsICJjdXN0b21FbGVtZW50IiwgInByb3BlcnR5IiwgInN0YXRlIiwgIlF0aUV4dGVuZGVkVGV4dEludGVyYWN0aW9uIiwgIkludGVyYWN0aW9uIiwgImNyZWF0ZVJlZiIsICJvbGQiLCAiZGlzYWJsZWQiLCAiY2xhc3NOYW1lIiwgIm5yUm93cyIsICJ2YWx1ZSIsICJjc3MiLCAiaHRtbCIsICJyZWYiLCAiZXZlbnQiLCAiaW5wdXQiLCAiaWZEZWZpbmVkIiwgInRleHQiLCAiX19kZWNvcmF0ZUNsYXNzIiwgInByb3BlcnR5IiwgInN0YXRlIiwgIndhdGNoIiwgImN1c3RvbUVsZW1lbnQiLCAiY3NzIiwgImh0bWwiLCAiY3VzdG9tRWxlbWVudCIsICJwcm9wZXJ0eSIsICJzdGF0ZSIsICJpZkRlZmluZWQiLCAiY3JlYXRlUmVmIiwgImxpdmVRdWVyeSIsICJxdWVyeVNlbGVjdG9yIiwgIm9wdGlvbnMiLCAib2JzZXJ2ZXIiLCAicmVzb2x2ZWRPcHRpb25zIiwgIl9fc3ByZWFkVmFsdWVzIiwgInByb3RvIiwgImRlY29yYXRlZEZuTmFtZSIsICJjb25uZWN0ZWRDYWxsYmFjayIsICJkaXNjb25uZWN0ZWRDYWxsYmFjayIsICJfYSIsICJjYWxsYmFjayIsICJtdXRhdGlvbkxpc3QiLCAiZWxlbWVudHNUb1dhdGNoIiwgIm11dGF0aW9uIiwgImFkZGVkTm9kZXMiLCAiZSIsICJyZW1vdmVkTm9kZXMiLCAibiIsICJlbGVtZW50c0FkZGVkIiwgIlF0aVRleHRFbnRyeUludGVyYWN0aW9uIiwgIkludGVyYWN0aW9uIiwgImNyZWF0ZVJlZiIsICJvbGQiLCAiY2xhc3NlcyIsICJjbGFzc05hbWUiLCAibnJSb3dzIiwgInZhbHVlIiwgImNzcyIsICJodG1sIiwgImV2ZW50IiwgImlucHV0IiwgImlmRGVmaW5lZCIsICJ0ZXh0IiwgIl9fZGVjb3JhdGVDbGFzcyIsICJwcm9wZXJ0eSIsICJzdGF0ZSIsICJ3YXRjaCIsICJjdXN0b21FbGVtZW50IiwgImh0bWwiLCAiTGl0RWxlbWVudCIsICJjdXN0b21FbGVtZW50IiwgInByb3BlcnR5IiwgIkNob2ljZXNNaXhpbiIsICJzdXBlckNsYXNzIiwgInNlbGVjdG9yIiwgIkNob2ljZXNNaXhpbkVsZW1lbnQiLCAiYXJncyIsICJfIiwgImRpc2FibGVkIiwgImNoIiwgInJlYWRvbmx5IiwgImFjYyIsICJ2YWwiLCAicmVzcG9uc2VWYWx1ZSIsICJyZXNwb25zZVZhbHVlQXJyYXkiLCAiY2UiLCAicnYiLCAiZSIsICJjaG9pY2VFbGVtZW50IiwgImV2ZW50IiwgInNlbGVjdGVkSWRlbnRpZmllcnMiLCAicmVzdWx0IiwgInJlc3BvbnNlIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJwcm9wZXJ0eSIsICJ3YXRjaCIsICJRdGlIb3R0ZXh0SW50ZXJhY3Rpb24iLCAiQ2hvaWNlc01peGluIiwgIkxpdEVsZW1lbnQiLCAiaHRtbCIsICJfX2RlY29yYXRlQ2xhc3MiLCAiY3VzdG9tRWxlbWVudCIsICJjc3MiLCAiaHRtbCIsICJjdXN0b21FbGVtZW50IiwgInByb3BlcnR5IiwgInN0YXRlIiwgInVuc2FmZUhUTUwiLCAiUXRpSW5saW5lQ2hvaWNlSW50ZXJhY3Rpb24iLCAiSW50ZXJhY3Rpb24iLCAiY3NzIiwgImh0bWwiLCAib3B0aW9uIiwgInVuc2FmZUhUTUwiLCAiY2hvaWNlcyIsICJjaG9pY2UiLCAic2VsZWN0ZWRPcHRpb24iLCAiaSIsICJfX3NwcmVhZFByb3BzIiwgIl9fc3ByZWFkVmFsdWVzIiwgInZhbHVlIiwgImV2ZW50IiwgInNlbGVjdGVkT3B0aW9uVmFsdWUiLCAiX19kZWNvcmF0ZUNsYXNzIiwgInN0YXRlIiwgInByb3BlcnR5IiwgImN1c3RvbUVsZW1lbnQiLCAiaHRtbCIsICJMaXRFbGVtZW50IiwgImN1c3RvbUVsZW1lbnQiLCAicHJvcGVydHkiLCAicHJvcGVydHkiLCAiU2h1ZmZsZU1peGluIiwgInN1cGVyQ2xhc3MiLCAic2VsZWN0b3IiLCAiU2h1ZmZsZUVsZW1lbnQiLCAidmFsdWUiLCAib2xkVmFsdWUiLCAiY2hvaWNlcyIsICJmaXhlZEVsZW1lbnRzIiwgIm5vbkZpeGVkRWxlbWVudHMiLCAiY2hvaWNlIiwgImluZGV4IiwgImlzU2h1ZmZsZWQiLCAibWF4QXR0ZW1wdHMiLCAiYXR0ZW1wdCIsICJpIiwgImoiLCAib3JkZXIiLCAiX19kZWNvcmF0ZUNsYXNzIiwgInByb3BlcnR5IiwgInN0cmluZ1RvQm9vbGVhbkNvbnZlcnRlciIsICJwcm9wZXJ0eSIsICJWb2NhYnVsYXJ5TWl4aW4iLCAic3VwZXJDbGFzcyIsICJzZWxlY3RvciIsICJWb2NhYnVsYXJ5RWxlbWVudCIsICJ2YWx1ZSIsICJfYSIsICJfY2hhbmdlZFByb3BlcnRpZXMiLCAiY2xhc3NDb250YWluc0xhYmVsIiwgImNscyIsICJpc051bWJlciIsICJjaG9pY2VzIiwgImMiLCAiY2hvaWNlIiwgImluZGV4IiwgImEiLCAiYiIsICJpIiwgImxhc3RMYWJlbCIsICJsYXN0TGFiZWxTdWZmaXgiLCAibGFiZWwiLCAiX19kZWNvcmF0ZUNsYXNzIiwgInByb3BlcnR5IiwgImNzcyIsICJxdGlfY2hvaWNlX2ludGVyYWN0aW9uX3N0eWxlc19kZWZhdWx0IiwgIlF0aUNob2ljZUludGVyYWN0aW9uIiwgIlZvY2FidWxhcnlNaXhpbiIsICJTaHVmZmxlTWl4aW4iLCAiQ2hvaWNlc01peGluIiwgIkxpdEVsZW1lbnQiLCAiaHRtbCIsICJxdGlfY2hvaWNlX2ludGVyYWN0aW9uX3N0eWxlc19kZWZhdWx0IiwgIl9fZGVjb3JhdGVDbGFzcyIsICJwcm9wZXJ0eSIsICJjdXN0b21FbGVtZW50IiwgImNzcyIsICJodG1sIiwgIkxpdEVsZW1lbnQiLCAiY3VzdG9tRWxlbWVudCIsICJRdGlPdXRjb21lUHJvY2Vzc2luZyIsICJMaXRFbGVtZW50IiwgImh0bWwiLCAibG9naWMiLCAiUXRpT3V0Y29tZVByb2Nlc3NpbmdQcm9jZXNzb3IiLCAicnVsZXMiLCAiY3NzIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJjdXN0b21FbGVtZW50IiwgInJ1bGUiLCAiY3NzIiwgImh0bWwiLCAiTGl0RWxlbWVudCIsICJjdXN0b21FbGVtZW50IiwgIm1hdGNoQ29ycmVjdCIsICJtYXBSZXNwb25zZSIsICJtYXBSZXNwb25zZVBvaW50IiwgIlF0aVJlc3BvbnNlUHJvY2Vzc2luZyIsICJMaXRFbGVtZW50IiwgImh0bWwiLCAicnVsZXMiLCAicnVsZSIsICJfY2hhbmdlZFByb3BlcnRpZXMiLCAic3BsaXR0ZWRUZW1wbGF0ZU5hbWUiLCAidGVtcGxhdGVOYW1lIiwgIm1hcFJlc3BvbnNlIiwgIm1hcFJlc3BvbnNlUG9pbnQiLCAibWF0Y2hDb3JyZWN0IiwgInN0ckhUTUwiLCAiY3NzIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJjdXN0b21FbGVtZW50IiwgInByb3BlcnR5IiwgImN1c3RvbUVsZW1lbnQiLCAiaHRtbCIsICJMaXRFbGVtZW50IiwgIlF0aVJ1bGUiLCAiTGl0RWxlbWVudCIsICJodG1sIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJjdXN0b21FbGVtZW50IiwgIlF0aUxvb2t1cE91dGNvbWVWYWx1ZSIsICJRdGlSdWxlIiwgImlkZW50aWZpZXIiLCAib3V0Y29tZVZhcmlhYmxlIiwgInZhbHVlIiwgImNvbnZlcnROdW1iZXJUb1VuaXZlcmFsRm9ybWF0IiwgIl9fZGVjb3JhdGVDbGFzcyIsICJwcm9wZXJ0eSIsICJodG1sIiwgIlF0aVJlc3BvbnNlQ29uZGl0aW9uIiwgIlF0aVJ1bGUiLCAiaHRtbCIsICJicmFuY2hlcyIsICJpIiwgImJyYW5jaCIsICJRdGlTZXRPdXRjb21lVmFsdWUiLCAiUXRpUnVsZSIsICJvdXRjb21lSWRlbnRpZmllciIsICJleHByZXNzaW9uIiwgInZhbHVlIiwgIlF0aVNldE91dGNvbWVWYWx1ZVJ1bGUiLCAidiIsICJjb252ZXJ0TnVtYmVyVG9Vbml2ZXJhbEZvcm1hdCIsICJMaXRFbGVtZW50IiwgImh0bWwiLCAiUXRpUmVzcG9uc2VFbHNlIiwgInN1YlJ1bGVzIiwgImkiLCAiaHRtbCIsICJRdGlSZXNwb25zZUlmIiwgIlF0aVJlc3BvbnNlRWxzZSIsICJyZXN1bHQiLCAiaSIsICJRdGlSZXNwb25zZUVsc2VJZiIsICJRdGlSZXNwb25zZUlmIiwgImh0bWwiLCAiTGl0RWxlbWVudCIsICJjc3MiLCAiaHRtbCIsICJzdGF0ZSIsICJRdGlFeHByZXNzaW9uIiwgIkxpdEVsZW1lbnQiLCAiaWRlbnRpZmllciIsICJ2YWx1ZXMiLCAidiIsICJyZXNwb25zZVZhcmlhYmxlIiwgImVycm9yIiwgImh0bWwiLCAiY3NzIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJzdGF0ZSIsICJRdGlDb25kaXRpb25FeHByZXNzaW9uIiwgIlF0aUV4cHJlc3Npb24iLCAiUXRpQW5kIiwgInF0aUFuZE1peGluIiwgIlF0aUNvbmRpdGlvbkV4cHJlc3Npb24iLCAiQmFzZSIsICJjaGlsZHJlbiIsICJjIiwgImNvbmRpdGlvbiIsICJ2YWx1ZSIsICJlIiwgIlF0aUFuZCIsICJwcm9wZXJ0eSIsICJRdGlCYXNlVmFsdWUiLCAiUXRpRXhwcmVzc2lvbiIsICJfX2RlY29yYXRlQ2xhc3MiLCAicHJvcGVydHkiLCAiUXRpQ29udGFpbnMiLCAiUXRpQ29uZGl0aW9uRXhwcmVzc2lvbiIsICJ2YWx1ZXMiLCAidmFsdWUxIiwgInZhbHVlMiIsICJwcm9qZWN0aW9uMSIsICJwcm9qZWN0aW9uMiIsICJ4IiwgIlF0aUNvcnJlY3QiLCAiUXRpRXhwcmVzc2lvbiIsICJpZGVudGlmaWVyIiwgInJlc3BvbnNlVmFyaWFibGUiLCAicHJvcGVydHkiLCAiUXRpRXF1YWxSb3VuZGVkIiwgIlF0aUV4cHJlc3Npb24iLCAiZmlndXJlcyIsICJ2YWx1ZXMiLCAidmFsdWUxIiwgInZhbHVlMiIsICJmbG9hdDEiLCAiZmxvYXQyIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJwcm9wZXJ0eSIsICJwcm9wZXJ0eSIsICJTY29yaW5nSGVscGVyIiwgInZhbHVlMSIsICJ2YWx1ZTIiLCAiYmFzZVR5cGUiLCAiaW50MSIsICJpbnQyIiwgImZsb2F0MSIsICJmbG9hdDIiLCAicGFpcjEiLCAicGFpcjIiLCAiUXRpRXF1YWwiLCAiUXRpRXhwcmVzc2lvbiIsICJ2YWx1ZXMiLCAidmFsdWUxIiwgInZhbHVlMiIsICJTY29yaW5nSGVscGVyIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJwcm9wZXJ0eSIsICJRdGlHdCIsICJRdGlFeHByZXNzaW9uIiwgInZhbHVlcyIsICJ2YWx1ZTEiLCAidmFsdWUyIiwgIlF0aUd0ZSIsICJRdGlDb25kaXRpb25FeHByZXNzaW9uIiwgInZhbHVlcyIsICJ2YWx1ZTEiLCAidmFsdWUyIiwgIlF0aUlzTnVsbCIsICJRdGlFeHByZXNzaW9uIiwgInZhcmlhYmxlcyIsICJ2YWx1ZSIsICJRdGlMdCIsICJRdGlFeHByZXNzaW9uIiwgInZhbHVlcyIsICJ2YWx1ZTEiLCAidmFsdWUyIiwgIlF0aUx0ZSIsICJRdGlDb25kaXRpb25FeHByZXNzaW9uIiwgInZhbHVlcyIsICJ2YWx1ZTEiLCAidmFsdWUyIiwgInByb3BlcnR5IiwgIlF0aU1hcFJlc3BvbnNlIiwgIlF0aUV4cHJlc3Npb24iLCAicmVzcG9uc2UiLCAibWFwcGluZyIsICJjYW5kaWRhdGVSZXNwb25zZXMiLCAicmVzdWx0IiwgImNhbmRpZGF0ZVJlc3BvbnNlIiwgIm1hcHBlZFZhbHVlIiwgImVudHJ5IiwgIlNjb3JpbmdIZWxwZXIiLCAiX19kZWNvcmF0ZUNsYXNzIiwgInByb3BlcnR5IiwgInByb3BlcnR5IiwgIkxpdEVsZW1lbnQiLCAiUXRpTWFwcGluZyIsICJMaXRFbGVtZW50IiwgImVsIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJwcm9wZXJ0eSIsICJRdGlNYXRjaCIsICJfUXRpTWF0Y2giLCAiUXRpRXhwcmVzc2lvbiIsICJ2YWx1ZXMiLCAidmFsdWVUb01hcCIsICJjb3JyZWN0VmFsdWVJbmZvIiwgIl9hIiwgIlNjb3JpbmdIZWxwZXIiLCAiaSIsICJhbnN3ZXJJbmRleCIsICJjb3JyZWN0QW5zd2VyIiwgIm1hdGNoaW5nVmFsdWUiLCAiYXJyIiwgIm12IiwgIlF0aU1lbWJlciIsICJRdGlFeHByZXNzaW9uIiwgInZhbHVlcyIsICJ2YWx1ZTEiLCAidmFsdWUyIiwgInByb2plY3Rpb24xIiwgIlF0aU11bHRpcGxlIiwgIlF0aUV4cHJlc3Npb24iLCAidmFyaWFibGVzIiwgInZhcmlhYmxlIiwgImh0bWwiLCAiUXRpTm90IiwgIlF0aUV4cHJlc3Npb24iLCAiaHRtbCIsICJRdGlPciIsICJRdGlDb25kaXRpb25FeHByZXNzaW9uIiwgImMiLCAiY29uZGl0aW9uIiwgInZhbHVlIiwgIlF0aU9yZGVyZWQiLCAiUXRpRXhwcmVzc2lvbiIsICJ2YXJpYWJsZXMiLCAidmFyaWFibGUiLCAiY29uc3VtZSIsICJMaXRFbGVtZW50IiwgImh0bWwiLCAicHJvcGVydHkiLCAic3RhdGUiLCAiUXRQcmludGVkVmFyaWFibGUiLCAiTGl0RWxlbWVudCIsICJfYSIsICJfYiIsICJ2YWx1ZSIsICJ2IiwgImh0bWwiLCAiYXNzZXNzbWVudEl0ZW0iLCAiaWRlbnRpZmllciIsICJfX2RlY29yYXRlQ2xhc3MiLCAicHJvcGVydHkiLCAiY29uc3VtZSIsICJpdGVtQ29udGV4dCIsICJzdGF0ZSIsICJRdGlQcm9kdWN0IiwgIlF0aUV4cHJlc3Npb24iLCAiYWNjdW11bGF0b3IiLCAiY3VycmVudFZhbHVlIiwgImVycm9yIiwgInByb3BlcnR5IiwgIlF0aVN0cmluZ01hdGNoIiwgIlF0aUV4cHJlc3Npb24iLCAidmFsdWVzIiwgInZhbHVlMSIsICJ2YWx1ZTIiLCAidjEiLCAidjIiLCAiU2NvcmluZ0hlbHBlciIsICJfX2RlY29yYXRlQ2xhc3MiLCAicHJvcGVydHkiLCAiUXRpU3VtIiwgIlF0aUV4cHJlc3Npb24iLCAiUXRpU3VtRXhwcmVzc2lvbiIsICJleHByZXNzaW9ucyIsICJjIiwgInZhbHVlIiwgImEiLCAiYiIsICJRdGlWYXJpYWJsZSIsICJRdGlFeHByZXNzaW9uIiwgImlkZW50aWZpZXIiLCAiaHRtbCIsICJjdXN0b21FbGVtZW50IiwgInByb3BlcnR5IiwgInN0YXRlIiwgIlF0aVBvcnRhYmxlQ3VzdG9tSW50ZXJhY3Rpb24iLCAiSW50ZXJhY3Rpb24iLCAidXJsIiwgImJhc2VVcmwiLCAicmVxdWlyZUNvbmZpZyIsICJtb2R1bGVDb25nIiwgIm1vZHVsZUlkIiwgImUiLCAicGF0aCIsICJiYXNlUGF0aCIsICJwIiwgImlucHV0IiwgInRvcExldmVsS2V5IiwgIm5lc3RlZE9iamVjdCIsICJuZXN0ZWRLZXkiLCAidmFsdWUiLCAicmVzcG9uc2UiLCAibmV3UmVzcG9uc2UiLCAic3RyaW5naWZpZWQiLCAidmFsIiwgIm5vZGUiLCAiYSIsICJjb25maWciLCAiZ2V0UHJvcGVydHlWYWx1ZSIsICJlbCIsICJwcm9wZXJ0eSIsICJrZXkiLCAiY2hpbGRyZW4iLCAiYWxsS2V5IiwgImMiLCAiayIsICJnZXRDaGlsZFByb3BlcnRpZXMiLCAicHJvcGVydGllcyIsICJjaGlsZCIsICJfX3NwcmVhZFZhbHVlcyIsICJwY2kiLCAidHlwZSIsICJkb20iLCAiYWNjIiwgImxpbmsiLCAic3R5bGVzIiwgImN0eEEiLCAicmVxdWlyZSIsICJjb250ZXh0IiwgImludGVyYWN0aW9uTW9kdWxlcyIsICJtb2R1bGVzIiwgIm1vZHVsZSIsICJwcmltYXJ5UGF0aCIsICJmYWxsYmFja1BhdGgiLCAicGF0aHMiLCAiZXhpc3RpbmdQYXRoIiwgInBhdGgxIiwgInBhdGgyIiwgInBhdGgxQXJyYXkiLCAicGF0aDJBcnJheSIsICJzdHIiLCAiaHRtbCIsICJfX2RlY29yYXRlQ2xhc3MiLCAic3RhdGUiLCAiY3VzdG9tRWxlbWVudCIsICJMaXRFbGVtZW50IiwgImNzcyIsICJodG1sIiwgImN1c3RvbUVsZW1lbnQiLCAic3RhdGUiLCAiVG91Y2hEcmFnQW5kRHJvcCIsICJfVG91Y2hEcmFnQW5kRHJvcCIsICJ0eXBlIiwgInZhbCIsICJlIiwgIl90b3VjaGVzIiwgImVsZW1lbnRTdHlsZXMiLCAic3R5bGUiLCAiX3RoaXMiLCAidGFyZ2V0IiwgImRyYWdnYWJsZXMiLCAiZWwiLCAieCIsICJ5IiwgIl9hIiwgImV2ZW50IiwgInBvaW50RnJvbVRvdWNoRXZlbnQiLCAidmlzaXRlZCIsICJyb290IiwgIm5lc3RlZEVsIiwgInBhZ2UiLCAidG91Y2giLCAiY2xpZW50UmVjdCIsICJldmVudFR5cGUiLCAiYnViYmxlIiwgInByb3BlcnR5IiwgIkRyb3BwYWJsZXNNaXhpbiIsICJzdXBlckNsYXNzIiwgImRyb3BwYWJsZXNJblNoYWRvd1Jvb3QiLCAiZHJvcHBhYmxlc1NlbGVjdG9yIiwgIkRyb3BwYWJsZXNFbGVtZW50IiwgImNoYW5nZWRQcm9wcyIsICJkcm9wcGFibGVzIiwgImQiLCAiZHJvcHBhYmxlIiwgIm11dGF0aW9ucyIsICJtdXRhdGlvbiIsICJfYSIsICJldiIsICJkcmFnZ2FibGVJbkxpZ2h0RG9tIiwgImRyYWdnYWJsZSIsICJfX2RlY29yYXRlQ2xhc3MiLCAicHJvcGVydHkiLCAiRmxpcHBhYmxlc01peGluIiwgInN1cGVyQ2xhc3MiLCAiZHJvcHBhYmxlc1NlbCIsICJkcmFnZ2FibGVzU2VsIiwgIkZsaXBwYWJsZXNFbGVtZW50IiwgInByb3BlcnR5IiwgIkRyYWdEcm9wSW50ZXJhY3Rpb25NaXhpbiIsICJzdXBlckNsYXNzIiwgImRyYWdnYWJsZXNTZWxlY3RvciIsICJkcm9wcGFibGVzSW5TaGFkb3dSb290IiwgImRyb3BwYWJsZXNTZWxlY3RvciIsICJEcmFnRHJvcEludGVyYWN0aW9uRWxlbWVudCIsICJGbGlwcGFibGVzTWl4aW4iLCAiRHJvcHBhYmxlc01peGluIiwgImV2IiwgImQiLCAiZHJhZ2dhYmxlIiwgImRyYWdzQWRkZWQiLCAiZHJhZ3NSZW1vdmVkIiwgImVsZW0iLCAib2xkIiwgImRyYWdPcHRpb25zIiwgImRpc2FibGVkIiwgInMiLCAiY2giLCAicmVhZG9ubHkiLCAiY2hhbmdlZFByb3BzIiwgIlRvdWNoRHJhZ0FuZERyb3AiLCAicG9zaXRpb24iLCAiaW5kZXgiLCAiaW50ZXJhY3Rpb24iLCAiZ2FwVGV4dCIsICJzYXZlIiwgImNoaWxkcmVuIiwgImRpc2FibGUiLCAicmVzcG9uc2UiLCAiZHJvcElkIiwgImRyYWdJZHMiLCAiZHJvcHBhYmxlIiwgImRyb3AiLCAiZHJhZ0lkIiwgImFzc29jaWF0aW9ucyIsICJkcmFnc0luRHJvcHBhYmxlIiwgImlkZW50aWZpZXJzIiwgImRyb3BwYWJsZUlkZW50aWZpZXIiLCAiX19kZWNvcmF0ZUNsYXNzIiwgImxpdmVRdWVyeSIsICJwcm9wZXJ0eSIsICJ3YXRjaCIsICJRdGlBc3NvY2lhdGVJbnRlcmFjdGlvbiIsICJEcmFnRHJvcEludGVyYWN0aW9uTWl4aW4iLCAiTGl0RWxlbWVudCIsICJodG1sIiwgIl8iLCAiaW5kZXgiLCAiY3NzIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJzdGF0ZSIsICJjdXN0b21FbGVtZW50IiwgImh0bWwiLCAiY3VzdG9tRWxlbWVudCIsICJwcm9wZXJ0eSIsICJzdGF0ZSIsICJRdGlDdXN0b21JbnRlcmFjdGlvbiIsICJJbnRlcmFjdGlvbiIsICJ1cmlUb01hbmlmZXN0IiwgInJlbW92ZURvdWJsZVNsYXNoZXMiLCAicmVzcG9uc2UiLCAiZGF0YSIsICJlcnIiLCAiaWZyYW1lIiwgImlmcmFtZVdpbiIsICJpZnJhbWVEb2MiLCAiaWZyYW1lc0luU2hhZG93Um9vdCIsICJvdXRlcklGcmFtZXMiLCAiaWZyYW1lU3JjIiwgIm91dGVyRG9jIiwgImUiLCAiaW5kZXgiLCAiaWZyYW1lRG9jdW1lbnQiLCAiaWZyYW1lcyIsICJuZXN0ZWREb2MiLCAidHlwZSIsICJldmVudCIsICJtZWRpYURhdGEiLCAibWVkaWEiLCAidmFsIiwgImh0bWwiLCAiX19kZWNvcmF0ZUNsYXNzIiwgInByb3BlcnR5IiwgInN0YXRlIiwgImN1c3RvbUVsZW1lbnQiLCAiaHRtbCIsICJjdXN0b21FbGVtZW50IiwgInByb3BlcnR5IiwgIlF0aUVuZEF0dGVtcHRJbnRlcmFjdGlvbiIsICJJbnRlcmFjdGlvbiIsICJ2YWwiLCAiaHRtbCIsICJfX2RlY29yYXRlQ2xhc3MiLCAicHJvcGVydHkiLCAiY3VzdG9tRWxlbWVudCIsICJjc3MiLCAiaHRtbCIsICJMaXRFbGVtZW50IiwgImN1c3RvbUVsZW1lbnQiLCAiUXRpR2FwTWF0Y2hJbnRlcmFjdGlvbiIsICJEcmFnRHJvcEludGVyYWN0aW9uTWl4aW4iLCAiTGl0RWxlbWVudCIsICJodG1sIiwgInZhbHVlIiwgIm1hdGNoZXMiLCAicmVzcG9uc2UiLCAieCIsICJzcGxpdCIsICJnYXAiLCAiaW5kZXgiLCAiX2EiLCAiX2IiLCAiX2MiLCAiX2QiLCAiaWRlbnRpZmllciIsICJ0ZXh0SWRlbnRpZmllciIsICJ0ZXh0IiwgInRleHRTcGFuIiwgImNzcyIsICJfX2RlY29yYXRlQ2xhc3MiLCAiY3VzdG9tRWxlbWVudCIsICJjc3MiLCAiaHRtbCIsICJzdmciLCAiY3VzdG9tRWxlbWVudCIsICJxdWVyeSIsICJxdWVyeUFzc2lnbmVkRWxlbWVudHMiLCAic3RhdGUiLCAiaWZEZWZpbmVkIiwgInJlcGVhdCIsICJwb3NpdGlvbkhvdHNwb3RzIiwgInNoYXBlIiwgImNvb3Jkc051bWJlciIsICJpbWciLCAiaG90c3BvdCIsICJjZW50ZXJYIiwgImNlbnRlclkiLCAicmFkaXVzIiwgImNlbnRlclhQZXIiLCAiY2VudGVyWVBlciIsICJyYWRpdXNQZXIiLCAibGVmdFgiLCAidG9wWSIsICJyaWdodFgiLCAiYm90dG9tWSIsICJsZWZ0WFBlciIsICJ0b3BZUGVyIiwgInJpZ2h0WFBlciIsICJib3R0b21ZUGVyIiwgInBvbHljb29yZHMiLCAiYWNjIiwgImN1cnJlbnRWYWx1ZSIsICJjdXJyZW50SW5kZXgiLCAicG9seUMiLCAibGFzdFZhbCIsICJwb2ludCIsICJwb2x5RCIsICJwIiwgIlF0aUdyYXBoaWNBc3NvY2lhdGVJbnRlcmFjdGlvbiIsICJJbnRlcmFjdGlvbiIsICJ2YWwiLCAiX2EiLCAiX2IiLCAiX2MiLCAiX2QiLCAiaHRtbCIsICJpZkRlZmluZWQiLCAicmVwZWF0IiwgImxpbmUiLCAiaW5kZXgiLCAic3ZnIiwgImUiLCAiXyIsICJpIiwgImltZyIsICJob3RzcG90IiwgImNvb3JkcyIsICJzaGFwZSIsICJjb29yZHNOdW1iZXIiLCAicyIsICJwb3NpdGlvbkhvdHNwb3RzIiwgImV2ZW50IiwgImNzcyIsICJfX2RlY29yYXRlQ2xhc3MiLCAic3RhdGUiLCAicXVlcnkiLCAicXVlcnlBc3NpZ25lZEVsZW1lbnRzIiwgImN1c3RvbUVsZW1lbnQiLCAiY3NzIiwgImh0bWwiLCAiTGl0RWxlbWVudCIsICJjdXN0b21FbGVtZW50IiwgIlF0aUdyYXBoaWNHYXBNYXRjaEludGVyYWN0aW9uIiwgIkRyYWdEcm9wSW50ZXJhY3Rpb25NaXhpbiIsICJMaXRFbGVtZW50IiwgImh0bWwiLCAiZSIsICJpbWciLCAiaG90c3BvdCIsICJjb29yZHMiLCAic2hhcGUiLCAiY29vcmRzTnVtYmVyIiwgInMiLCAiY2VudGVyWCIsICJjZW50ZXJZIiwgInJhZGl1cyIsICJsZWZ0WCIsICJ0b3BZIiwgInJpZ2h0WCIsICJib3R0b21ZIiwgImNzcyIsICJfX2RlY29yYXRlQ2xhc3MiLCAiY3VzdG9tRWxlbWVudCIsICJjc3MiLCAiaHRtbCIsICJMaXRFbGVtZW50IiwgImN1c3RvbUVsZW1lbnQiLCAiUXRpR3JhcGhpY09yZGVySW50ZXJhY3Rpb24iLCAiQ2hvaWNlc01peGluIiwgIkxpdEVsZW1lbnQiLCAiaHRtbCIsICJlIiwgImlkZW50aWZpZXIiLCAiaG90c3BvdCIsICJlbCIsICJtYXhTZWxlY3Rpb24iLCAiaSIsICJpbWciLCAiY29vcmRzIiwgInNoYXBlIiwgImNvb3Jkc051bWJlciIsICJzIiwgInBvc2l0aW9uSG90c3BvdHMiLCAiY3NzIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJjdXN0b21FbGVtZW50IiwgImNzcyIsICJodG1sIiwgIkxpdEVsZW1lbnQiLCAiY3VzdG9tRWxlbWVudCIsICJRdGlIb3RzcG90SW50ZXJhY3Rpb24iLCAiQ2hvaWNlc01peGluIiwgIkxpdEVsZW1lbnQiLCAiaHRtbCIsICJlIiwgImltZyIsICJob3RzcG90IiwgImNvb3JkcyIsICJzaGFwZSIsICJjb29yZHNOdW1iZXIiLCAicyIsICJwb3NpdGlvbkhvdHNwb3RzIiwgImNzcyIsICJfX2RlY29yYXRlQ2xhc3MiLCAiY3VzdG9tRWxlbWVudCIsICJjc3MiLCAiaHRtbCIsICJMaXRFbGVtZW50IiwgImN1c3RvbUVsZW1lbnQiLCAicHJvcGVydHkiLCAic3RhdGUiLCAidW5zYWZlSFRNTCIsICJjc3MiLCAiaHRtbCIsICJMaXRFbGVtZW50IiwgImN1c3RvbUVsZW1lbnQiLCAicHJvcGVydHkiLCAiUXRpU2ltcGxlQXNzb2NpYWJsZUNob2ljZSIsICJMaXRFbGVtZW50IiwgImh0bWwiLCAiY3NzIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJwcm9wZXJ0eSIsICJjdXN0b21FbGVtZW50IiwgIlF0aU1hdGNoSW50ZXJhY3Rpb24iLCAiRHJhZ0Ryb3BJbnRlcmFjdGlvbk1peGluIiwgIkxpdEVsZW1lbnQiLCAicmFkaW8iLCAiY2hlY2tib3giLCAidmFsdWUiLCAibmFtZSIsICJ0eXBlIiwgInYiLCAicmVzcG9uc2VWYWx1ZSIsICJodG1sIiwgImNvbCIsICJpIiwgInVuc2FmZUhUTUwiLCAicm93IiwgInJJbmRleCIsICJjSW5kZXgiLCAicm93SWQiLCAiY29sSWQiLCAic2VsZWN0ZWRJblJvd0NvdW50IiwgImNoZWNrZWQiLCAicGFydCIsICJkaXNhYmxlIiwgImUiLCAiY3NzIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJzdGF0ZSIsICJwcm9wZXJ0eSIsICJjdXN0b21FbGVtZW50IiwgImNzcyIsICJodG1sIiwgImN1c3RvbUVsZW1lbnQiLCAiUXRpTWVkaWFJbnRlcmFjdGlvbiIsICJJbnRlcmFjdGlvbiIsICJ2YWwiLCAiX19zcHJlYWRQcm9wcyIsICJfX3NwcmVhZFZhbHVlcyIsICJodG1sIiwgIm1lZGlhT2JqZWN0IiwgImNzcyIsICJfX2RlY29yYXRlQ2xhc3MiLCAiY3VzdG9tRWxlbWVudCIsICJjc3MiLCAiaHRtbCIsICJMaXRFbGVtZW50IiwgImN1c3RvbUVsZW1lbnQiLCAicHJvcGVydHkiLCAic3RhdGUiLCAidW5zYWZlSFRNTCIsICJRdGlPcmRlckludGVyYWN0aW9uIiwgIlNodWZmbGVNaXhpbiIsICJEcmFnRHJvcEludGVyYWN0aW9uTWl4aW4iLCAiTGl0RWxlbWVudCIsICJjaG9pY2VzIiwgImh0bWwiLCAiXyIsICJpIiwgInVuc2FmZUhUTUwiLCAidmFsdWUiLCAicmVzcG9uc2UiLCAiaW5kZXgiLCAic2ltcGxlQ2hvaWNlIiwgInRleHQiLCAiZHJvcHBhYmxlIiwgImRyYWdzSW5Ecm9wcGFibGUiLCAiZCIsICJjaGFuZ2VkUHJvcHMiLCAiZWwiLCAiY3NzIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJzdGF0ZSIsICJwcm9wZXJ0eSIsICJjdXN0b21FbGVtZW50IiwgIkxpdEVsZW1lbnQiLCAiY3NzIiwgImh0bWwiLCAiUXRpU1Bvc2l0aW9uT2JqZWN0SW50ZXJhY3Rpb24iLCAiTGl0RWxlbWVudCIsICJjc3MiLCAiaHRtbCIsICJjdXN0b21FbGVtZW50IiwgIlF0aVBvc2l0aW9uT2JqZWN0U3RhZ2UiLCAiTGl0RWxlbWVudCIsICJodG1sIiwgImV2ZW50IiwgImRlbHRhWCIsICJkZWx0YVkiLCAiYSIsICJjc3MiLCAiX19kZWNvcmF0ZUNsYXNzIiwgImN1c3RvbUVsZW1lbnQiLCAiY3NzIiwgImh0bWwiLCAiY3VzdG9tRWxlbWVudCIsICJwcm9wZXJ0eSIsICJzdGF0ZSIsICJyZXBlYXQiLCAic3R5bGVNYXAiLCAiUXRpU2VsZWN0UG9pbnRJbnRlcmFjdGlvbiIsICJJbnRlcmFjdGlvbiIsICJldmVudCIsICJ4IiwgInkiLCAiaHRtbCIsICJyZXBlYXQiLCAicG9pbnQiLCAiaW5kZXgiLCAic3R5bGVNYXAiLCAiZSIsICJfIiwgImkiLCAidmFsIiwgImNzcyIsICJfX2RlY29yYXRlQ2xhc3MiLCAicHJvcGVydHkiLCAic3RhdGUiLCAiY3VzdG9tRWxlbWVudCIsICJjc3MiLCAiaHRtbCIsICJub3RoaW5nIiwgImN1c3RvbUVsZW1lbnQiLCAicHJvcGVydHkiLCAicXVlcnkiLCAiUXRpU2xpZGVySW50ZXJhY3Rpb24iLCAiSW50ZXJhY3Rpb24iLCAib2xkIiwgImRpc2FibGVkIiwgInJlYWRvbmx5IiwgInZhbHVlIiwgIm15UmVzcG9uc2UiLCAidmFsdWVQZXJjZW50YWdlIiwgImh0bWwiLCAibm90aGluZyIsICJldmVudCIsICJoYW5kbGVUb3VjaE1vdmUiLCAieCIsICJkaWZmWCIsICJoYW5kbGVUb3VjaEVuZCIsICJoYW5kbGVNb3VzZU1vdmUiLCAiaGFuZGxlTW91c2VVcCIsICJ2YWx1ZU5vdyIsICJyb3VuZGVkU3RlcFZhbHVlIiwgIl90b3VjaE1vdmUiLCAiZXZ0IiwgInRvdWNoIiwgImNzcyIsICJfX2RlY29yYXRlQ2xhc3MiLCAicXVlcnkiLCAicHJvcGVydHkiLCAid2F0Y2giLCAiY3VzdG9tRWxlbWVudCIsICJjb25zdW1lIiwgIkxpdEVsZW1lbnQiLCAiaHRtbCIsICJjdXN0b21FbGVtZW50IiwgInN0YXRlIiwgIlF0aUN1c3RvbU9wZXJhdG9yIiwgIkxpdEVsZW1lbnQiLCAiaHRtbCIsICJldmVudCIsICJfYSIsICJfYiIsICJfYyIsICJjb21tZW50Tm9kZSIsICJub2RlIiwgImUiLCAiZm4iLCAicmVzcG9uc2VJZGVudGlmaWVyIiwgInYiLCAiaXRlbSIsICJ2YXJpYWJsZUlkZW50aWZpZXIiLCAib3V0Y29tZUlkZW50aWZpZXIiLCAidmFsdWUiLCAicmVzcG9uc2UiLCAiX19kZWNvcmF0ZUNsYXNzIiwgImNvbnN1bWUiLCAiaXRlbUNvbnRleHQiLCAic3RhdGUiLCAiY3VzdG9tRWxlbWVudCIsICJMaXRFbGVtZW50IiwgImNzcyIsICJodG1sIiwgImN1c3RvbUVsZW1lbnQiLCAiUXRpQXNzb2NpYWJsZUhvdHNwb3QiLCAiTGl0RWxlbWVudCIsICJodG1sIiwgImNzcyIsICJfX2RlY29yYXRlQ2xhc3MiLCAiY3VzdG9tRWxlbWVudCIsICJjc3MiLCAiaHRtbCIsICJMaXRFbGVtZW50IiwgImN1c3RvbUVsZW1lbnQiLCAicHJvcGVydHkiLCAiUXRpR2FwIiwgIkxpdEVsZW1lbnQiLCAiaHRtbCIsICJjc3MiLCAiX19kZWNvcmF0ZUNsYXNzIiwgInByb3BlcnR5IiwgImN1c3RvbUVsZW1lbnQiLCAiY3NzIiwgIkxpdEVsZW1lbnQiLCAiY3VzdG9tRWxlbWVudCIsICJwcm9wZXJ0eSIsICJRdGlHYXBJbWciLCAiTGl0RWxlbWVudCIsICJjc3MiLCAiX19kZWNvcmF0ZUNsYXNzIiwgInByb3BlcnR5IiwgImN1c3RvbUVsZW1lbnQiLCAiY3NzIiwgImh0bWwiLCAiTGl0RWxlbWVudCIsICJjdXN0b21FbGVtZW50IiwgInByb3BlcnR5IiwgIlF0aUdhcFRleHQiLCAiTGl0RWxlbWVudCIsICJodG1sIiwgImNzcyIsICJfX2RlY29yYXRlQ2xhc3MiLCAicHJvcGVydHkiLCAiY3VzdG9tRWxlbWVudCIsICJjc3MiLCAiY3VzdG9tRWxlbWVudCIsICJwcm9wZXJ0eSIsICJRdGlIb3RzcG90Q2hvaWNlIiwgIlF0aUNob2ljZSIsICJjc3MiLCAiX19kZWNvcmF0ZUNsYXNzIiwgInByb3BlcnR5IiwgImN1c3RvbUVsZW1lbnQiLCAiY3NzIiwgImh0bWwiLCAiY3VzdG9tRWxlbWVudCIsICJRdGlIb3R0ZXh0IiwgIlF0aUNob2ljZSIsICJodG1sIiwgImNzcyIsICJfX2RlY29yYXRlQ2xhc3MiLCAiY3VzdG9tRWxlbWVudCIsICJjc3MiLCAiaHRtbCIsICJMaXRFbGVtZW50IiwgImN1c3RvbUVsZW1lbnQiLCAicHJvcGVydHkiLCAiUXRpSW5saW5lQ2hvaWNlIiwgIkxpdEVsZW1lbnQiLCAiY3NzIiwgImh0bWwiLCAiX19kZWNvcmF0ZUNsYXNzIiwgInByb3BlcnR5IiwgImN1c3RvbUVsZW1lbnQiLCAiY3NzIiwgImh0bWwiLCAibm90aGluZyIsICJjdXN0b21FbGVtZW50IiwgInByb3BlcnR5IiwgIlF0aVNpbXBsZUNob2ljZSIsICJRdGlDaG9pY2UiLCAiaHRtbCIsICJub3RoaW5nIiwgImNzcyIsICJfX2RlY29yYXRlQ2xhc3MiLCAicHJvcGVydHkiLCAiY3VzdG9tRWxlbWVudCJdCn0K
566
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktYXNzZXNzbWVudC1pdGVtL3F0aS1hc3Nlc3NtZW50LWl0ZW0udHMiLCAiLi4vLi4vc3JjL2xpYi9kZWNvcmF0b3JzL3dhdGNoLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWFzc2Vzc21lbnQtaXRlbS9xdGktYXNzZXNzbWVudC1pdGVtLmNvbnRleHQudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktYXNzZXNzbWVudC1zdGltdWx1cy1yZWYvcXRpLWFzc2Vzc21lbnQtc3RpbXVsdXMtcmVmLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWludGVyYWN0aW9uL2ludGVybmFsL2Nob2ljZS9xdGktY2hvaWNlLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWl0ZW0tYm9keS9xdGktaXRlbS1ib2R5LnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWl0ZW0tYm9keS9xdGktaXRlbS1ib2R5LnN0eWxlcy50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1wcm9tcHQvcXRpLXByb21wdC50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1zdHlsZXNoZWV0L3F0aS1zdHlsZXNoZWV0LnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXZhcmlhYmxlLWRlY2xhcmF0aW9uL3F0aS1vdXRjb21lLWRlY2xhcmF0aW9uL3F0aS1vdXRjb21lLWRlY2xhcmF0aW9uLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXZhcmlhYmxlLWRlY2xhcmF0aW9uL3F0aS12YXJpYWJsZS1kZWNsYXJhdGlvbi50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS12YXJpYWJsZS1kZWNsYXJhdGlvbi9xdGktcmVzcG9uc2UtZGVjbGFyYXRpb24vcXRpLXJlc3BvbnNlLWRlY2xhcmF0aW9uLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWNvbXBhbmlvbi1tYXRlcmlhbHMtaW5mby9xdGktY29tcGFuaW9uLW1hdGVyaWFscy1pbmZvLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJ1YnJpYy1ibG9jay9xdGktY29udGVudC1ib2R5LnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJ1YnJpYy1ibG9jay9xdGktcnVicmljLWJsb2NrLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWZlZWRiYWNrL3F0aS1mZWVkYmFjay1ibG9jay9xdGktZmVlZGJhY2stYmxvY2sudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktZmVlZGJhY2svcXRpLWZlZWRiYWNrLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvaW50ZXJuYWwvdXRpbHMudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktZmVlZGJhY2svcXRpLWZlZWRiYWNrLWlubGluZS9xdGktZmVlZGJhY2staW5saW5lLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWZlZWRiYWNrL3F0aS1tb2RhbC1mZWVkYmFjay9xdGktbW9kYWwtZmVlZGJhY2sudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaW50ZXJhY3Rpb24vcXRpLWV4dGVuZGVkLXRleHQtaW50ZXJhY3Rpb24vcXRpLWV4dGVuZGVkLXRleHQtaW50ZXJhY3Rpb24udHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaW50ZXJhY3Rpb24vaW50ZXJuYWwvaW50ZXJhY3Rpb24vaW50ZXJhY3Rpb24udHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaW50ZXJhY3Rpb24vcXRpLXRleHQtZW50cnktaW50ZXJhY3Rpb24vcXRpLXRleHQtZW50cnktaW50ZXJhY3Rpb24udHMiLCAiLi4vLi4vc3JjL2xpYi9kZWNvcmF0b3JzL2xpdmUtcXVlcnkudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaW50ZXJhY3Rpb24vcXRpLWhvdHRleHQtaW50ZXJhY3Rpb24vcXRpLWhvdHRleHQtaW50ZXJhY3Rpb24udHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaW50ZXJhY3Rpb24vaW50ZXJuYWwvY2hvaWNlcy9jaG9pY2VzLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWludGVyYWN0aW9uL3F0aS1pbmxpbmUtY2hvaWNlLWludGVyYWN0aW9uL3F0aS1pbmxpbmUtY2hvaWNlLWludGVyYWN0aW9uLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWludGVyYWN0aW9uL3F0aS1jaG9pY2UtaW50ZXJhY3Rpb24vcXRpLWNob2ljZS1pbnRlcmFjdGlvbi50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1pbnRlcmFjdGlvbi9pbnRlcm5hbC9zaHVmZmxlL3NodWZmbGUtbWl4aW4udHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaW50ZXJhY3Rpb24vaW50ZXJuYWwvdm9jYWJ1bGFyeS92b2NhYnVsYXJ5LW1peGluLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWludGVyYWN0aW9uL3F0aS1jaG9pY2UtaW50ZXJhY3Rpb24vcXRpLWNob2ljZS1pbnRlcmFjdGlvbi5zdHlsZXMudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktb3V0Y29tZS1wcm9jZXNzaW5nL3F0aS1vdXRjb21lLXByb2Nlc3NpbmcudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZy9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZy9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZy50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL2ludGVybmFsL3RlbXBsYXRlLXN0cmluZ3MudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZy9xdGktcnVsZS9xdGktbG9va3VwLW91dGNvbWUtdmFsdWUvcXRpLWxvb2t1cC1vdXRjb21lLXZhbHVlLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLXJ1bGUvcXRpLXJ1bGUudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZy9xdGktcnVsZS9xdGktcmVzcG9uc2UtY29uZGl0aW9uL3F0aS1yZXNwb25zZS1jb25kaXRpb24udHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZy9xdGktcnVsZS9xdGktc2V0LW91dGNvbWUtdmFsdWUvcXRpLXNldC1vdXRjb21lLXZhbHVlLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLXJlc3BvbnNlLWVsc2UvcXRpLXJlc3BvbnNlLWVsc2UudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZy9xdGktcmVzcG9uc2UtZWxzZS9xdGktcmVzcG9uc2UtaWYvcXRpLXJlc3BvbnNlLWVsc2UtaWYvcXRpLXJlc3BvbnNlLWVsc2UtaWYudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZy9xdGktcmVzcG9uc2UtZWxzZS9xdGktcmVzcG9uc2UtaWYvcXRpLXJlc3BvbnNlLWlmLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLWV4cHJlc3Npb24vcXRpLWV4cHJlc3Npb24udHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZy9xdGktZXhwcmVzc2lvbi9xdGktY29uZGl0aW9uLWV4cHJlc3Npb24udHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZy9xdGktZXhwcmVzc2lvbi9xdGktYW5kL3F0aS1hbmQudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZy9xdGktZXhwcmVzc2lvbi9xdGktYW5kL2luZGV4LnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLWV4cHJlc3Npb24vcXRpLWJhc2V2YWx1ZS9xdGktYmFzZXZhbHVlLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLWV4cHJlc3Npb24vcXRpLWNvbnRhaW5zL3F0aS1jb250YWlucy50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nL3F0aS1leHByZXNzaW9uL3F0aS1jb3JyZWN0L3F0aS1jb3JyZWN0LnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLWV4cHJlc3Npb24vcXRpLWVxdWFsLXJvdW5kZWQvcXRpLWVxdWFsLXJvdW5kZWQudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZy9xdGktZXhwcmVzc2lvbi9xdGktZXF1YWwvcXRpLWVxdWFsLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvdXRpbGl0aWVzL3Njb3JpbmctaGVscGVyLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLWV4cHJlc3Npb24vcXRpLWd0L3F0aS1ndC50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nL3F0aS1leHByZXNzaW9uL3F0aS1ndGUvcXRpLWd0ZS50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nL3F0aS1leHByZXNzaW9uL3F0aS1pcy1udWxsL3F0aS1pcy1udWxsLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLWV4cHJlc3Npb24vcXRpLWx0L3F0aS1sdC50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nL3F0aS1leHByZXNzaW9uL3F0aS1sdGUvcXRpLWx0ZS50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nL3F0aS1leHByZXNzaW9uL3F0aS1tYXAtcmVzcG9uc2UvcXRpLW1hcC1yZXNwb25zZS50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nL3F0aS1leHByZXNzaW9uL3F0aS1tYXBwaW5nL3F0aS1tYXBwaW5nLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLWV4cHJlc3Npb24vcXRpLW1hdGNoL3F0aS1tYXRjaC50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nL3F0aS1leHByZXNzaW9uL3F0aS1tZW1iZXIvcXRpLW1lbWJlci50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nL3F0aS1leHByZXNzaW9uL3F0aS1tdWx0aXBsZS9xdGktbXVsdGlwbGUudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZy9xdGktZXhwcmVzc2lvbi9xdGktbm90L3F0aS1ub3QudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZy9xdGktZXhwcmVzc2lvbi9xdGktb3IvcXRpLW9yLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLWV4cHJlc3Npb24vcXRpLW9yZGVyZWQvcXRpLW9yZGVyZWQudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZy9xdGktZXhwcmVzc2lvbi9xdGktcHJpbnRlZC12YXJpYWJsZS9xdGktcHJpbnRlZC12YXJpYWJsZS50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nL3F0aS1leHByZXNzaW9uL3F0aS1wcm9kdWN0L3F0aS1wcm9kdWN0LnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLWV4cHJlc3Npb24vcXRpLXN0cmluZy1tYXRjaC9xdGktc3RyaW5nLW1hdGNoLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLWV4cHJlc3Npb24vcXRpLXN1bS9xdGktc3VtLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLWV4cHJlc3Npb24vcXRpLXZhcmlhYmxlL3F0aS12YXJpYWJsZS50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1pbnRlcmFjdGlvbi9xdGktcG9ydGFibGUtY3VzdG9tLWludGVyYWN0aW9uL3F0aS1wb3J0YWJsZS1jdXN0b20taW50ZXJhY3Rpb24udHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaW50ZXJhY3Rpb24vcXRpLWFzc29jaWF0ZS1pbnRlcmFjdGlvbi9xdGktYXNzb2NpYXRlLWludGVyYWN0aW9uLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWludGVyYWN0aW9uL2ludGVybmFsL2RyYWctZHJvcC9kcmFnLWRyb3AtYXBpLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWludGVyYWN0aW9uL2ludGVybmFsL2RyYWctZHJvcC9kcm9wcGFibGVzLW1peGluLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWludGVyYWN0aW9uL2ludGVybmFsL2RyYWctZHJvcC9mbGlwcGFibGVzLW1peGluLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWludGVyYWN0aW9uL2ludGVybmFsL2RyYWctZHJvcC9kcmFnLWRyb3AtaW50ZXJhY3Rpb24tbWl4aW4udHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaW50ZXJhY3Rpb24vcXRpLWN1c3RvbS1pbnRlcmFjdGlvbi9xdGktY3VzdG9tLWludGVyYWN0aW9uLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWludGVyYWN0aW9uL3F0aS1lbmQtYXR0ZW1wdC1pbnRlcmFjdGlvbi9xdGktZW5kLWF0dGVtcHQtaW50ZXJhY3Rpb24udHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaW50ZXJhY3Rpb24vcXRpLWdhcC1tYXRjaC1pbnRlcmFjdGlvbi9xdGktZ2FwLW1hdGNoLWludGVyYWN0aW9uLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWludGVyYWN0aW9uL3F0aS1ncmFwaGljLWFzc29jaWF0ZS1pbnRlcmFjdGlvbi9xdGktZ3JhcGhpYy1hc3NvY2lhdGUtaW50ZXJhY3Rpb24udHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaW50ZXJhY3Rpb24vaW50ZXJuYWwvaG90c3BvdHMvaG90c3BvdC50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1pbnRlcmFjdGlvbi9xdGktZ3JhcGhpYy1nYXAtbWF0Y2gtaW50ZXJhY3Rpb24vcXRpLWdyYXBoaWMtZ2FwLW1hdGNoLWludGVyYWN0aW9uLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWludGVyYWN0aW9uL3F0aS1ncmFwaGljLW9yZGVyLWludGVyYWN0aW9uL3F0aS1ncmFwaGljLW9yZGVyLWludGVyYWN0aW9uLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWludGVyYWN0aW9uL3F0aS1ob3RzcG90LWludGVyYWN0aW9uL3F0aS1ob3RzcG90LWludGVyYWN0aW9uLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWludGVyYWN0aW9uL3F0aS1tYXRjaC1pbnRlcmFjdGlvbi9xdGktbWF0Y2gtaW50ZXJhY3Rpb24udHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaW50ZXJhY3Rpb24vcXRpLXNpbXBsZS1hc3NvY2lhYmxlLWNob2ljZS50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1pbnRlcmFjdGlvbi9xdGktbWVkaWEtaW50ZXJhY3Rpb24vcXRpLW1lZGlhLWludGVyYWN0aW9uLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWludGVyYWN0aW9uL3F0aS1vcmRlci1pbnRlcmFjdGlvbi9xdGktb3JkZXItaW50ZXJhY3Rpb24udHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaW50ZXJhY3Rpb24vcXRpLXBvc2l0aW9uLW9iamVjdC1pbnRlcmFjdGlvbi9xdGktcG9zaXRpb24tb2JqZWN0LWludGVyYWN0aW9uLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWludGVyYWN0aW9uL3F0aS1wb3NpdGlvbi1vYmplY3QtaW50ZXJhY3Rpb24vcXRpLXBvc2l0aW9uLW9iamVjdC1zdGFnZS50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1pbnRlcmFjdGlvbi9xdGktc2VsZWN0LXBvaW50LWludGVyYWN0aW9uL3F0aS1zZWxlY3QtcG9pbnQtaW50ZXJhY3Rpb24udHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaW50ZXJhY3Rpb24vcXRpLXNsaWRlci1pbnRlcmFjdGlvbi9xdGktc2xpZGVyLWludGVyYWN0aW9uLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWN1c3RvbS1vcGVyYXRvci9xdGktY3VzdG9tLW9wZXJhdG9yLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWludGVyYWN0aW9uL3F0aS1hc3NvY2lhYmxlLWhvdHNwb3QudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaW50ZXJhY3Rpb24vcXRpLWdhcC50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1pbnRlcmFjdGlvbi9xdGktZ2FwLWltZy50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1pbnRlcmFjdGlvbi9xdGktZ2FwLXRleHQudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaW50ZXJhY3Rpb24vcXRpLWhvdHNwb3QtY2hvaWNlLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWludGVyYWN0aW9uL3F0aS1ob3R0ZXh0LnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWludGVyYWN0aW9uL3F0aS1pbmxpbmUtY2hvaWNlLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWludGVyYWN0aW9uL3F0aS1zaW1wbGUtY2hvaWNlLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvaW5kZXgudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IHByb3ZpZGUgfSBmcm9tICdAbGl0L2NvbnRleHQnO1xuaW1wb3J0IHsgTGl0RWxlbWVudCwgaHRtbCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50LCBwcm9wZXJ0eSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IHdhdGNoIH0gZnJvbSAnLi4vLi4vZGVjb3JhdG9ycy93YXRjaCc7XG5pbXBvcnQgdHlwZSB7IEludGVyYWN0aW9uQ2hhbmdlZERldGFpbHMsIE91dGNvbWVDaGFuZ2VkRGV0YWlscyB9IGZyb20gJy4uL2ludGVybmFsL2V2ZW50LXR5cGVzJztcbmltcG9ydCB0eXBlIHsgUmVzcG9uc2VJbnRlcmFjdGlvbiB9IGZyb20gJy4uL2ludGVybmFsL2V4cHJlc3Npb24tcmVzdWx0JztcbmltcG9ydCB0eXBlIHsgVmFyaWFibGVEZWNsYXJhdGlvbiwgVmFyaWFibGVWYWx1ZSB9IGZyb20gJy4uL2ludGVybmFsL3ZhcmlhYmxlcyc7XG5pbXBvcnQgeyBPdXRjb21lVmFyaWFibGUsIFJlc3BvbnNlVmFyaWFibGUgfSBmcm9tICcuLi9pbnRlcm5hbC92YXJpYWJsZXMnO1xuaW1wb3J0IHR5cGUgeyBRdGlGZWVkYmFjayB9IGZyb20gJy4uL3F0aS1mZWVkYmFjay9xdGktZmVlZGJhY2snO1xuaW1wb3J0IHR5cGUgeyBJbnRlcmFjdGlvbiB9IGZyb20gJy4uL3F0aS1pbnRlcmFjdGlvbi9pbnRlcm5hbC9pbnRlcmFjdGlvbi9pbnRlcmFjdGlvbic7XG5pbXBvcnQgdHlwZSB7IFF0aVJlc3BvbnNlUHJvY2Vzc2luZyB9IGZyb20gJy4uL3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nJztcbmltcG9ydCB7IEl0ZW1Db250ZXh0LCBpdGVtQ29udGV4dCwgaXRlbUNvbnRleHRWYXJpYWJsZXMgfSBmcm9tICcuL3F0aS1hc3Nlc3NtZW50LWl0ZW0uY29udGV4dCc7XG5cbi8qKlxuICogQHN1bW1hcnkgVGhlIHF0aS1hc3Nlc3NtZW50LWl0ZW0gZWxlbWVudCBjb250YWlucyBhbGwgdGhlIG90aGVyIFFUSSAzIGl0ZW0gc3RydWN0dXJlcy5cbiAqIEBkb2N1bWVudGF0aW9uIGh0dHBzOi8vd3d3Lmltc2dsb2JhbC5vcmcvc3BlYy9xdGkvdjNwMC9pbXBsI2guZGx0bm5qODdsMHlqXG4gKiBAc3RhdHVzIHN0YWJsZVxuICogQHNpbmNlIDQuMFxuICpcbiAqIEBkZXBlbmRlbmN5IHF0aS1mZWVkYmFja1xuICogQGRlcGVuZGVuY3kgcXRpLXJlc3BvbnNlcHJvY2Vzc2luZ1xuICpcbiAqIEBzbG90IC0gVGhlIGRlZmF1bHQgc2xvdCB3aGVyZSBhbGwgdGhlIG90aGVyIFFUSSAzIGl0ZW0gc3RydWN0dXJlcyBnby5cbiAqXG4gKiBAZXZlbnQgcXRpLWludGVyYWN0aW9uLWNoYW5nZWQgLSBFbWl0dGVkIHdoZW4gYW4gaW50ZXJhY3Rpb24gaXMgY2hhbmdlZC5cbiAqIEBldmVudCBxdGktb3V0Y29tZS1jaGFuZ2VkIC0gRW1pdHRlZCB3aGVuIGFuIG91dGNvbWUgaGFzIGNoYW5nZWQuXG4gKiBAZXZlbnQgcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcgLSBFbWl0dGVkIHdoZW4gcmVzcG9uc2UtcHJvY2Vzc2luZyBpcyBjYWxsZWQuXG4gKlxuICovXG5AY3VzdG9tRWxlbWVudCgncXRpLWFzc2Vzc21lbnQtaXRlbScpXG5leHBvcnQgY2xhc3MgUXRpQXNzZXNzbWVudEl0ZW0gZXh0ZW5kcyBMaXRFbGVtZW50IHtcbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nIH0pIHRpdGxlOiBzdHJpbmc7XG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZyB9KSBpZGVudGlmaWVyOiBzdHJpbmcgPSAnJztcbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nIH0pIGFkYXB0aXZlOiAndHJ1ZScgfCAnZmFsc2UnID0gJ2ZhbHNlJztcbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nIH0pIHRpbWVEZXBlbmRlbnQ6ICd0cnVlJyB8ICdmYWxzZScgfCBudWxsID0gbnVsbDtcblxuICBAcHJvcGVydHkoeyB0eXBlOiBCb29sZWFuIH0pIGRpc2FibGVkOiBib29sZWFuO1xuICBAd2F0Y2goJ2Rpc2FibGVkJywgeyB3YWl0VW50aWxGaXJzdFVwZGF0ZTogdHJ1ZSB9KVxuICBfaGFuZGxlRGlzYWJsZWRDaGFuZ2UgPSAoXzogYm9vbGVhbiwgZGlzYWJsZWQ6IGJvb2xlYW4pID0+IHtcbiAgICB0aGlzLl9pbnRlcmFjdGlvbkVsZW1lbnRzLmZvckVhY2goY2ggPT4gKGNoLmRpc2FibGVkID0gZGlzYWJsZWQpKTtcbiAgfTtcblxuICBAcHJvcGVydHkoeyB0eXBlOiBCb29sZWFuIH0pIHJlYWRvbmx5OiBib29sZWFuO1xuICBAd2F0Y2goJ3JlYWRvbmx5JywgeyB3YWl0VW50aWxGaXJzdFVwZGF0ZTogdHJ1ZSB9KVxuICBfaGFuZGxlUmVhZG9ubHlDaGFuZ2UgPSAoXzogYm9vbGVhbiwgcmVhZG9ubHk6IGJvb2xlYW4pID0+XG4gICAgdGhpcy5faW50ZXJhY3Rpb25FbGVtZW50cy5mb3JFYWNoKGNoID0+IChjaC5yZWFkb25seSA9IHJlYWRvbmx5KSk7XG5cbiAgQHByb3ZpZGUoeyBjb250ZXh0OiBpdGVtQ29udGV4dCB9KVxuICAvLyBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6IGZhbHNlIH0pXG4gIHByaXZhdGUgX2NvbnRleHQ6IEl0ZW1Db250ZXh0ID0ge1xuICAgIGlkZW50aWZpZXI6IHRoaXMuZ2V0QXR0cmlidXRlKCdpZGVudGlmaWVyJyksXG4gICAgdmFyaWFibGVzOiBpdGVtQ29udGV4dFZhcmlhYmxlc1xuICB9O1xuXG4gIHB1YmxpYyBnZXQgdmFyaWFibGVzKCk6IFZhcmlhYmxlVmFsdWU8c3RyaW5nIHwgc3RyaW5nW10gfCBudWxsPltdIHtcbiAgICByZXR1cm4gdGhpcy5fY29udGV4dC52YXJpYWJsZXMubWFwKHYgPT4gKHtcbiAgICAgIGlkZW50aWZpZXI6IHYuaWRlbnRpZmllcixcbiAgICAgIHZhbHVlOiB2LnZhbHVlLFxuICAgICAgdHlwZTogdi50eXBlLFxuICAgICAgLy8gYWRkIGV4dGVybmFsc2NvcmVkLCBhIGZpeGVkIHByb3AgdG8gdGhlIHRlc3QsIHNvIHRoZSB0ZXN0Y29udGV4dCBjYW4gcmVhZCBhbmQgZGVjaWRlIGhvdyB0byBzY29yZSB0aGlzIGl0ZW1cbiAgICAgIC4uLih2LnR5cGUgPT09ICdvdXRjb21lJyAmJiB2LmlkZW50aWZpZXIgPT09ICdTQ09SRSdcbiAgICAgICAgPyB7IGV4dGVybmFsU2NvcmVkOiAodiBhcyBPdXRjb21lVmFyaWFibGUpLmV4dGVybmFsU2NvcmVkIH1cbiAgICAgICAgOiB7fSlcbiAgICB9KSk7XG4gIH1cblxuICBwdWJsaWMgc2V0IHZhcmlhYmxlcyh2YWx1ZTogVmFyaWFibGVWYWx1ZTxzdHJpbmcgfCBzdHJpbmdbXSB8IG51bGw+W10pIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUpIHx8IHZhbHVlLnNvbWUodiA9PiAhKCdpZGVudGlmaWVyJyBpbiB2KSkpIHtcbiAgICAgIGNvbnNvbGUud2FybigndmFyaWFibGVzIHByb3BlcnR5IHNob3VsZCBiZSBhbiBhcnJheSBvZiBWYXJpYWJsZURlY2xhcmF0aW9uJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fY29udGV4dCA9IHtcbiAgICAgIC4uLnRoaXMuX2NvbnRleHQsXG4gICAgICB2YXJpYWJsZXM6IHRoaXMuX2NvbnRleHQudmFyaWFibGVzLm1hcCh2YXJpYWJsZSA9PiB7XG4gICAgICAgIGNvbnN0IG1hdGNoaW5nVmFsdWUgPSB2YWx1ZS5maW5kKHYgPT4gdi5pZGVudGlmaWVyID09PSB2YXJpYWJsZS5pZGVudGlmaWVyKTtcbiAgICAgICAgaWYgKG1hdGNoaW5nVmFsdWUpIHtcbiAgICAgICAgICByZXR1cm4geyAuLi52YXJpYWJsZSwgLi4ubWF0Y2hpbmdWYWx1ZSB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YXJpYWJsZTtcbiAgICAgIH0pXG4gICAgfTtcblxuICAgIHRoaXMuX2NvbnRleHQudmFyaWFibGVzLmZvckVhY2godmFyaWFibGUgPT4ge1xuICAgICAgaWYgKHZhcmlhYmxlLnR5cGUgPT09ICdyZXNwb25zZScpIHtcbiAgICAgICAgY29uc3QgaW50ZXJhY3Rpb25FbGVtZW50ID0gdGhpcy5faW50ZXJhY3Rpb25FbGVtZW50cy5maW5kKFxuICAgICAgICAgIChlbDogSW50ZXJhY3Rpb24pID0+IGVsLnJlc3BvbnNlSWRlbnRpZmllciA9PT0gdmFyaWFibGUuaWRlbnRpZmllclxuICAgICAgICApO1xuICAgICAgICBpZiAoaW50ZXJhY3Rpb25FbGVtZW50KSB7XG4gICAgICAgICAgaW50ZXJhY3Rpb25FbGVtZW50LnJlc3BvbnNlID0gdmFyaWFibGUudmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHZhcmlhYmxlLnR5cGUgPT09ICdvdXRjb21lJykge1xuICAgICAgICB0aGlzLl9mZWVkYmFja0VsZW1lbnRzLmZvckVhY2goZmUgPT4gZmUuY2hlY2tTaG93RmVlZGJhY2sodmFyaWFibGUuaWRlbnRpZmllcikpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfaW5pdGlhbENvbnRleHQ6IFJlYWRvbmx5PEl0ZW1Db250ZXh0PiA9IHsgLi4udGhpcy5fY29udGV4dCwgdmFyaWFibGVzOiB0aGlzLl9jb250ZXh0LnZhcmlhYmxlcyB9O1xuICBwcml2YXRlIF9mZWVkYmFja0VsZW1lbnRzOiBRdGlGZWVkYmFja1tdID0gW107XG4gIHByaXZhdGUgX2ludGVyYWN0aW9uRWxlbWVudHM6IEludGVyYWN0aW9uW10gPSBbXTtcblxuICBhc3luYyBjb25uZWN0ZWRDYWxsYmFjaygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIGF3YWl0IHRoaXMudXBkYXRlQ29tcGxldGU7XG4gICAgdGhpcy5fZW1pdDx7IGRldGFpbDogUXRpQXNzZXNzbWVudEl0ZW0gfT4oJ3F0aS1hc3Nlc3NtZW50LWl0ZW0tY29ubmVjdGVkJywgdGhpcyk7XG4gIH1cblxuICAvKiogQGRlcHJlY2F0ZWQgdXNlIHZhcmlhYmxlcyBwcm9wZXJ0eSBpbnN0ZWFkICovXG4gIHNldCByZXNwb25zZXMobXlSZXNwb25zZXM6IFJlc3BvbnNlSW50ZXJhY3Rpb25bXSkge1xuICAgIGlmIChteVJlc3BvbnNlcykge1xuICAgICAgZm9yIChjb25zdCByZXNwb25zZSBvZiBteVJlc3BvbnNlcykge1xuICAgICAgICBjb25zdCByZXNwb25zZVZhcmlhYmxlID0gdGhpcy5nZXRSZXNwb25zZShyZXNwb25zZS5yZXNwb25zZUlkZW50aWZpZXIpO1xuICAgICAgICBpZiAocmVzcG9uc2VWYXJpYWJsZSkge1xuICAgICAgICAgIHRoaXMudXBkYXRlUmVzcG9uc2VWYXJpYWJsZShyZXNwb25zZS5yZXNwb25zZUlkZW50aWZpZXIsIHJlc3BvbnNlLnJlc3BvbnNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGludGVyYWN0aW9uOiBJbnRlcmFjdGlvbiB8IHVuZGVmaW5lZCA9IHRoaXMuX2ludGVyYWN0aW9uRWxlbWVudHMuZmluZChcbiAgICAgICAgICBpID0+IGkuZ2V0QXR0cmlidXRlKCdyZXNwb25zZS1pZGVudGlmaWVyJykgPT09IHJlc3BvbnNlLnJlc3BvbnNlSWRlbnRpZmllclxuICAgICAgICApO1xuICAgICAgICBpZiAoaW50ZXJhY3Rpb24pIHtcbiAgICAgICAgICBpbnRlcmFjdGlvbi5yZXNwb25zZSA9IHJlc3BvbnNlLnJlc3BvbnNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYDxzbG90Pjwvc2xvdD5gO1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3F0aS1yZWdpc3Rlci12YXJpYWJsZScsIGUgPT4ge1xuICAgICAgdGhpcy5fY29udGV4dCA9IHsgLi4udGhpcy5fY29udGV4dCwgdmFyaWFibGVzOiBbLi4udGhpcy5fY29udGV4dC52YXJpYWJsZXMsIGUuZGV0YWlsLnZhcmlhYmxlXSB9O1xuICAgICAgdGhpcy5faW5pdGlhbENvbnRleHQgPSB0aGlzLl9jb250ZXh0O1xuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9KTtcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3F0aS1yZWdpc3Rlci1mZWVkYmFjaycsIChlOiBDdXN0b21FdmVudDxRdGlGZWVkYmFjaz4pID0+IHtcbiAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBjb25zdCBmZWVkYmFja0VsZW1lbnQgPSBlLmRldGFpbDtcbiAgICAgIHRoaXMuX2ZlZWRiYWNrRWxlbWVudHMucHVzaChmZWVkYmFja0VsZW1lbnQpO1xuICAgICAgZmVlZGJhY2tFbGVtZW50LmNoZWNrU2hvd0ZlZWRiYWNrKGZlZWRiYWNrRWxlbWVudC5vdXRjb21lSWRlbnRpZmllcik7XG4gICAgfSk7XG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdxdGktcmVnaXN0ZXItaW50ZXJhY3Rpb24nLCAoZTogQ3VzdG9tRXZlbnQ8bnVsbD4pID0+IHtcbiAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICB0aGlzLl9pbnRlcmFjdGlvbkVsZW1lbnRzLnB1c2goZS50YXJnZXQgYXMgSW50ZXJhY3Rpb24pO1xuICAgIH0pO1xuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignZW5kLWF0dGVtcHQnLCAoZTogQ3VzdG9tRXZlbnQ8eyByZXNwb25zZUlkZW50aWZpZXI6IHN0cmluZzsgY291bnRBdHRlbXB0OiBib29sZWFuIH0+KSA9PiB7XG4gICAgICBjb25zdCB7IHJlc3BvbnNlSWRlbnRpZmllciwgY291bnRBdHRlbXB0IH0gPSBlLmRldGFpbDtcbiAgICAgIHRoaXMudXBkYXRlUmVzcG9uc2VWYXJpYWJsZShyZXNwb25zZUlkZW50aWZpZXIsICd0cnVlJyk7XG4gICAgICB0aGlzLnByb2Nlc3NSZXNwb25zZShjb3VudEF0dGVtcHQpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgLy8gd29yZHQgYWFuZ2Vyb2VwZW4gdmFudWl0IGRlIHByb2Nlc3Npbmd0ZW1wbGF0ZVxuICAgICAgJ3F0aS1zZXQtb3V0Y29tZS12YWx1ZScsXG4gICAgICAoZTogQ3VzdG9tRXZlbnQ8eyBvdXRjb21lSWRlbnRpZmllcjogc3RyaW5nOyB2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10gfT4pID0+IHtcbiAgICAgICAgY29uc3QgeyBvdXRjb21lSWRlbnRpZmllciwgdmFsdWUgfSA9IGUuZGV0YWlsO1xuICAgICAgICB0aGlzLnVwZGF0ZU91dGNvbWVWYXJpYWJsZShvdXRjb21lSWRlbnRpZmllciwgdmFsdWUpO1xuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3F0aS1pbnRlcmFjdGlvbi1yZXNwb25zZScsIHRoaXMuaGFuZGxlVXBkYXRlUmVzcG9uc2VWYXJpYWJsZSk7XG4gIH1cblxuICBwdWJsaWMgc2hvd0NvcnJlY3RSZXNwb25zZShzaG93OiBib29sZWFuKSB7XG4gICAgY29uc3QgcmVzcG9uc2VWYXJpYWJsZXMgPSB0aGlzLl9jb250ZXh0LnZhcmlhYmxlcy5maWx0ZXIoXG4gICAgICAodmFyaTogUmVzcG9uc2VWYXJpYWJsZSB8IE91dGNvbWVWYXJpYWJsZSkgPT4gJ2NvcnJlY3RSZXNwb25zZScgaW4gdmFyaSAmJiB2YXJpLmNvcnJlY3RSZXNwb25zZVxuICAgICkgYXMgUmVzcG9uc2VWYXJpYWJsZVtdO1xuICAgIGNvbnN0IHJlc3BvbnNlcyA9IHJlc3BvbnNlVmFyaWFibGVzLm1hcChjciA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICByZXNwb25zZUlkZW50aWZpZXI6IGNyLmlkZW50aWZpZXIsXG4gICAgICAgIHJlc3BvbnNlOiBjci5jb3JyZWN0UmVzcG9uc2VcbiAgICAgIH07XG4gICAgfSk7XG4gICAgZm9yIChjb25zdCByZXNwb25zZSBvZiByZXNwb25zZXMpIHtcbiAgICAgIGNvbnN0IGludGVyYWN0aW9uOiBJbnRlcmFjdGlvbiB8IHVuZGVmaW5lZCA9IHRoaXMuX2ludGVyYWN0aW9uRWxlbWVudHMuZmluZChcbiAgICAgICAgaSA9PiBpLmdldEF0dHJpYnV0ZSgncmVzcG9uc2UtaWRlbnRpZmllcicpID09PSByZXNwb25zZS5yZXNwb25zZUlkZW50aWZpZXJcbiAgICAgICk7XG4gICAgICBpbnRlcmFjdGlvbiAmJiAoaW50ZXJhY3Rpb24uY29ycmVjdFJlc3BvbnNlID0gc2hvdyA/IHJlc3BvbnNlLnJlc3BvbnNlIDogJycpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBwcm9jZXNzUmVzcG9uc2UoY291bnROdW1BdHRlbXB0czogYm9vbGVhbiA9IHRydWUpOiBib29sZWFuIHtcbiAgICBjb25zdCByZXNwb25zZVByb2Nlc3NvciA9IHRoaXMucXVlcnlTZWxlY3RvcjxRdGlSZXNwb25zZVByb2Nlc3Npbmc+KCdxdGktcmVzcG9uc2UtcHJvY2Vzc2luZycpO1xuICAgIGlmICghcmVzcG9uc2VQcm9jZXNzb3IpIHtcbiAgICAgIC8vIGNvbnNvbGUuaW5mbygnQ2xpZW50IHNpZGUgcmVzcG9uc2UgcHJvY2Vzc2luZyB0ZW1wbGF0ZSBub3QgYXZhaWxhYmxlJyk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKCFyZXNwb25zZVByb2Nlc3Nvci5wcm9jZXNzKSB7XG4gICAgICAvLyBjb25zb2xlLmluZm8oJ0NsaWVudCBzaWRlIHJlc3BvbnNlIHdlYmNvbXBvbmVudHMgbm90IGF2YWlsYWJsZScpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJlc3BvbnNlUHJvY2Vzc29yLnByb2Nlc3MoKTtcblxuICAgIGlmICh0aGlzLmFkYXB0aXZlID09PSAnZmFsc2UnKSB7XG4gICAgICAvLyBpZiBhZGFwdGl2ZSwgY29tcGxldGlvblN0YXR1cyBpcyBzZXQgYnkgdGhlIHByb2Nlc3NpbmcgdGVtcGxhdGVcbiAgICAgIHRoaXMudXBkYXRlT3V0Y29tZVZhcmlhYmxlKCdjb21wbGV0aW9uU3RhdHVzJywgdGhpcy5fZ2V0Q29tcGxldGlvblN0YXR1cygpKTtcbiAgICB9XG5cbiAgICBjb3VudE51bUF0dGVtcHRzICYmXG4gICAgICB0aGlzLnVwZGF0ZU91dGNvbWVWYXJpYWJsZShcbiAgICAgICAgJ251bUF0dGVtcHRzJyxcbiAgICAgICAgKCt0aGlzLl9jb250ZXh0LnZhcmlhYmxlcy5maW5kKHYgPT4gdi5pZGVudGlmaWVyID09PSAnbnVtQXR0ZW1wdHMnKT8udmFsdWUgKyAxKS50b1N0cmluZygpXG4gICAgICApO1xuXG4gICAgdGhpcy5fZW1pdCgncXRpLXJlc3BvbnNlLXByb2Nlc3NlZCcpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHVibGljIHJlc2V0UmVzcG9uc2VzKCkge1xuICAgIHRoaXMuX2NvbnRleHQgPSB0aGlzLl9pbml0aWFsQ29udGV4dDtcbiAgfVxuXG4gIHB1YmxpYyBnZXRSZXNwb25zZShpZGVudGlmaWVyOiBzdHJpbmcpOiBSZWFkb25seTxSZXNwb25zZVZhcmlhYmxlPiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VmFyaWFibGUoaWRlbnRpZmllcikgYXMgUmVzcG9uc2VWYXJpYWJsZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRPdXRjb21lKGlkZW50aWZpZXI6IHN0cmluZyk6IFJlYWRvbmx5PE91dGNvbWVWYXJpYWJsZT4ge1xuICAgIHJldHVybiB0aGlzLmdldFZhcmlhYmxlKGlkZW50aWZpZXIpIGFzIE91dGNvbWVWYXJpYWJsZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRWYXJpYWJsZShpZGVudGlmaWVyOiBzdHJpbmcpOiBSZWFkb25seTxWYXJpYWJsZURlY2xhcmF0aW9uPHN0cmluZyB8IHN0cmluZ1tdIHwgbnVsbD4+IHtcbiAgICByZXR1cm4gdGhpcy5fY29udGV4dC52YXJpYWJsZXMuZmluZCh2ID0+IHYuaWRlbnRpZmllciA9PT0gaWRlbnRpZmllcikgfHwgbnVsbDtcbiAgfVxuXG4gIC8vIHNhdmluZyBwcml2YXRlcyBoZXJlOiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICBwcml2YXRlIGhhbmRsZVVwZGF0ZVJlc3BvbnNlVmFyaWFibGUoZXZlbnQ6IEN1c3RvbUV2ZW50PFJlc3BvbnNlSW50ZXJhY3Rpb24+KSB7XG4gICAgY29uc3QgeyByZXNwb25zZUlkZW50aWZpZXIsIHJlc3BvbnNlIH0gPSBldmVudC5kZXRhaWw7XG4gICAgdGhpcy51cGRhdGVSZXNwb25zZVZhcmlhYmxlKHJlc3BvbnNlSWRlbnRpZmllciwgcmVzcG9uc2UpO1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZVJlc3BvbnNlVmFyaWFibGUoaWRlbnRpZmllcjogc3RyaW5nLCB2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9jb250ZXh0ID0ge1xuICAgICAgLi4udGhpcy5fY29udGV4dCxcbiAgICAgIHZhcmlhYmxlczogdGhpcy5fY29udGV4dC52YXJpYWJsZXMubWFwKHYgPT4gKHYuaWRlbnRpZmllciAhPT0gaWRlbnRpZmllciA/IHYgOiB7IC4uLnYsIHZhbHVlOiB2YWx1ZSB9KSlcbiAgICB9O1xuXG4gICAgdGhpcy5fZW1pdDxJbnRlcmFjdGlvbkNoYW5nZWREZXRhaWxzPigncXRpLWludGVyYWN0aW9uLWNoYW5nZWQnLCB7XG4gICAgICBpdGVtOiB0aGlzLmlkZW50aWZpZXIsXG4gICAgICByZXNwb25zZUlkZW50aWZpZXI6IGlkZW50aWZpZXIsXG4gICAgICByZXNwb25zZTogQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyBbLi4udmFsdWVdIDogdmFsdWVcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLmFkYXB0aXZlID09PSAnZmFsc2UnKSB7XG4gICAgICAvLyBpZiBhZGFwYXRpdmUsIGNvbXBsZXRpb25TdGF0dXMgaXMgc2V0IGJ5IHRoZSBwcm9jZXNzaW5nIHRlbXBsYXRlXG4gICAgICB0aGlzLnVwZGF0ZU91dGNvbWVWYXJpYWJsZSgnY29tcGxldGlvblN0YXR1cycsIHRoaXMuX2dldENvbXBsZXRpb25TdGF0dXMoKSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHVwZGF0ZU91dGNvbWVWYXJpYWJsZShpZGVudGlmaWVyOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcgfCBzdHJpbmdbXSB8IHVuZGVmaW5lZCkge1xuICAgIGNvbnN0IG91dGNvbWVWYXJpYWJsZSA9IHRoaXMuZ2V0T3V0Y29tZShpZGVudGlmaWVyKTtcblxuICAgIGlmICghb3V0Y29tZVZhcmlhYmxlKSB7XG4gICAgICBjb25zb2xlLndhcm4oYENhbiBub3Qgc2V0IHF0aS1vdXRjb21lLWlkZW50aWZpZXI6ICR7aWRlbnRpZmllcn0sIGl0IGlzIG5vdCBhdmFpbGFibGVgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9jb250ZXh0ID0ge1xuICAgICAgLi4udGhpcy5fY29udGV4dCxcbiAgICAgIHZhcmlhYmxlczogdGhpcy5fY29udGV4dC52YXJpYWJsZXMubWFwKHYgPT4ge1xuICAgICAgICBpZiAodi5pZGVudGlmaWVyICE9PSBpZGVudGlmaWVyKSB7XG4gICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi52LFxuICAgICAgICAgIHZhbHVlOiBvdXRjb21lVmFyaWFibGUuY2FyZGluYWxpdHkgPT09ICdzaW5nbGUnID8gdmFsdWUgOiBbLi4udi52YWx1ZSwgdmFsdWUgYXMgc3RyaW5nXVxuICAgICAgICB9O1xuICAgICAgfSlcbiAgICB9O1xuICAgIHRoaXMuX2ZlZWRiYWNrRWxlbWVudHMuZm9yRWFjaChmZSA9PiBmZS5jaGVja1Nob3dGZWVkYmFjayhpZGVudGlmaWVyKSk7XG5cbiAgICB0aGlzLl9lbWl0PE91dGNvbWVDaGFuZ2VkRGV0YWlscz4oJ3F0aS1vdXRjb21lLWNoYW5nZWQnLCB7XG4gICAgICBpdGVtOiB0aGlzLmlkZW50aWZpZXIsXG4gICAgICBvdXRjb21lSWRlbnRpZmllcjogaWRlbnRpZmllcixcbiAgICAgIHZhbHVlOiB0aGlzLl9jb250ZXh0LnZhcmlhYmxlcy5maW5kKHYgPT4gdi5pZGVudGlmaWVyID09PSBpZGVudGlmaWVyKT8udmFsdWVcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX2dldENvbXBsZXRpb25TdGF0dXMoKTogJ2NvbXBsZXRlZCcgfCAnaW5jb21wbGV0ZScgfCAnbm90X2F0dGVtcHRlZCcgfCAndW5rbm93bicge1xuICAgIGlmICh0aGlzLl9pbnRlcmFjdGlvbkVsZW1lbnRzLmV2ZXJ5KGludGVyYWN0aW9uRWxlbWVudCA9PiBpbnRlcmFjdGlvbkVsZW1lbnQudmFsaWRhdGUoKSkpIHJldHVybiAnY29tcGxldGVkJztcbiAgICBpZiAodGhpcy5faW50ZXJhY3Rpb25FbGVtZW50cy5zb21lKGludGVyYWN0aW9uRWxlbWVudCA9PiBpbnRlcmFjdGlvbkVsZW1lbnQudmFsaWRhdGUoKSkpIHJldHVybiAnaW5jb21wbGV0ZSc7XG4gICAgcmV0dXJuICdub3RfYXR0ZW1wdGVkJztcbiAgfVxuXG4gIHByaXZhdGUgX2VtaXQ8VD4obmFtZSwgZGV0YWlsID0gbnVsbCkge1xuICAgIHRoaXMuZGlzcGF0Y2hFdmVudChcbiAgICAgIG5ldyBDdXN0b21FdmVudDxUPihuYW1lLCB7XG4gICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgIGNvbXBvc2VkOiB0cnVlLFxuICAgICAgICBkZXRhaWxcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktYXNzZXNzbWVudC1pdGVtJzogUXRpQXNzZXNzbWVudEl0ZW07XG4gIH1cbn1cbiIsICJpbXBvcnQgdHlwZSB7IExpdEVsZW1lbnQgfSBmcm9tICdsaXQnO1xuXG50eXBlIFVwZGF0ZUhhbmRsZXIgPSAocHJldj86IHVua25vd24sIG5leHQ/OiB1bmtub3duKSA9PiB2b2lkO1xuXG50eXBlIE5vblVuZGVmaW5lZDxBPiA9IEEgZXh0ZW5kcyB1bmRlZmluZWQgPyBuZXZlciA6IEE7XG5cbnR5cGUgVXBkYXRlSGFuZGxlckZ1bmN0aW9uS2V5czxUIGV4dGVuZHMgb2JqZWN0PiA9IHtcbiAgW0sgaW4ga2V5b2YgVF0tPzogTm9uVW5kZWZpbmVkPFRbS10+IGV4dGVuZHMgVXBkYXRlSGFuZGxlciA/IEsgOiBuZXZlcjtcbn1ba2V5b2YgVF07XG5cbmludGVyZmFjZSBXYXRjaE9wdGlvbnMge1xuICAvKipcbiAgICogSWYgdHJ1ZSwgd2lsbCBvbmx5IHN0YXJ0IHdhdGNoaW5nIGFmdGVyIHRoZSBpbml0aWFsIHVwZGF0ZS9yZW5kZXJcbiAgICovXG4gIHdhaXRVbnRpbEZpcnN0VXBkYXRlPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBSdW5zIHdoZW4gb2JzZXJ2ZWQgcHJvcGVydGllcyBjaGFuZ2UsIGUuZy4gQHByb3BlcnR5IG9yIEBzdGF0ZSwgYnV0IGJlZm9yZSB0aGUgY29tcG9uZW50IHVwZGF0ZXMuIFRvIHdhaXQgZm9yIGFuXG4gKiB1cGRhdGUgdG8gY29tcGxldGUgYWZ0ZXIgYSBjaGFuZ2Ugb2NjdXJzLCB1c2UgYGF3YWl0IHRoaXMudXBkYXRlQ29tcGxldGVgIGluIHRoZSBoYW5kbGVyLiBUbyBzdGFydCB3YXRjaGluZyBhZnRlciB0aGVcbiAqIGluaXRpYWwgdXBkYXRlL3JlbmRlciwgdXNlIGB7IHdhaXRVbnRpbEZpcnN0VXBkYXRlOiB0cnVlIH1gIG9yIGB0aGlzLmhhc1VwZGF0ZWRgIGluIHRoZSBoYW5kbGVyLlxuICpcbiAqIFVzYWdlOlxuICpcbiAqIEB3YXRjaCgncHJvcE5hbWUnKVxuICogaGFuZGxlUHJvcENoYW5nZShvbGRWYWx1ZSwgbmV3VmFsdWUpIHtcbiAqICAgLi4uXG4gKiB9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3YXRjaChwcm9wZXJ0eU5hbWU6IHN0cmluZyB8IHN0cmluZ1tdLCBvcHRpb25zPzogV2F0Y2hPcHRpb25zKSB7XG4gIGNvbnN0IHJlc29sdmVkT3B0aW9uczogUmVxdWlyZWQ8V2F0Y2hPcHRpb25zPiA9IHtcbiAgICB3YWl0VW50aWxGaXJzdFVwZGF0ZTogZmFsc2UsXG4gICAgLi4ub3B0aW9uc1xuICB9O1xuICByZXR1cm4gPEVsZW1DbGFzcyBleHRlbmRzIExpdEVsZW1lbnQ+KHByb3RvOiBFbGVtQ2xhc3MsIGRlY29yYXRlZEZuTmFtZTogVXBkYXRlSGFuZGxlckZ1bmN0aW9uS2V5czxFbGVtQ2xhc3M+KSA9PiB7XG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIHVwZGF0ZSBpcyBhIHByb3RlY3RlZCBwcm9wZXJ0eVxuICAgIGNvbnN0IHsgdXBkYXRlIH0gPSBwcm90bztcbiAgICBjb25zdCB3YXRjaGVkUHJvcGVydGllcyA9IEFycmF5LmlzQXJyYXkocHJvcGVydHlOYW1lKSA/IHByb3BlcnR5TmFtZSA6IFtwcm9wZXJ0eU5hbWVdO1xuXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIHVwZGF0ZSBpcyBhIHByb3RlY3RlZCBwcm9wZXJ0eVxuICAgIHByb3RvLnVwZGF0ZSA9IGZ1bmN0aW9uICh0aGlzOiBFbGVtQ2xhc3MsIGNoYW5nZWRQcm9wczogTWFwPGtleW9mIEVsZW1DbGFzcywgRWxlbUNsYXNzW2tleW9mIEVsZW1DbGFzc10+KSB7XG4gICAgICB3YXRjaGVkUHJvcGVydGllcy5mb3JFYWNoKHByb3BlcnR5ID0+IHtcbiAgICAgICAgY29uc3Qga2V5ID0gcHJvcGVydHkgYXMga2V5b2YgRWxlbUNsYXNzO1xuICAgICAgICBpZiAoY2hhbmdlZFByb3BzLmhhcyhrZXkpKSB7XG4gICAgICAgICAgY29uc3Qgb2xkVmFsdWUgPSBjaGFuZ2VkUHJvcHMuZ2V0KGtleSk7XG4gICAgICAgICAgY29uc3QgbmV3VmFsdWUgPSB0aGlzW2tleV07XG5cbiAgICAgICAgICBpZiAob2xkVmFsdWUgIT09IG5ld1ZhbHVlKSB7XG4gICAgICAgICAgICBpZiAoIXJlc29sdmVkT3B0aW9ucy53YWl0VW50aWxGaXJzdFVwZGF0ZSB8fCB0aGlzLmhhc1VwZGF0ZWQpIHtcbiAgICAgICAgICAgICAgKHRoaXNbZGVjb3JhdGVkRm5OYW1lXSBhcyB1bmtub3duIGFzIFVwZGF0ZUhhbmRsZXIpKG9sZFZhbHVlLCBuZXdWYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgdXBkYXRlLmNhbGwodGhpcywgY2hhbmdlZFByb3BzKTtcbiAgICB9O1xuICB9O1xufVxuIiwgImltcG9ydCB7IGNyZWF0ZUNvbnRleHQgfSBmcm9tICdAbGl0L2NvbnRleHQnO1xuaW1wb3J0IHsgVmFyaWFibGVEZWNsYXJhdGlvbiB9IGZyb20gJy4uL2ludGVybmFsL3ZhcmlhYmxlcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSXRlbUNvbnRleHQge1xuICBocmVmPzogc3RyaW5nO1xuICBpZGVudGlmaWVyOiBzdHJpbmc7XG4gIHZhcmlhYmxlczogUmVhZG9ubHlBcnJheTxWYXJpYWJsZURlY2xhcmF0aW9uPHN0cmluZyB8IHN0cmluZ1tdPj47XG59XG5cbmV4cG9ydCBjb25zdCBpdGVtQ29udGV4dFZhcmlhYmxlcyA9IFtcbiAge1xuICAgIGlkZW50aWZpZXI6ICdjb21wbGV0aW9uU3RhdHVzJyxcbiAgICBjYXJkaW5hbGl0eTogJ3NpbmdsZScsXG4gICAgYmFzZVR5cGU6ICdzdHJpbmcnLFxuICAgIHZhbHVlOiAndW5rbm93bicsXG4gICAgdHlwZTogJ291dGNvbWUnXG4gIH0sXG4gIHtcbiAgICBpZGVudGlmaWVyOiAnbnVtQXR0ZW1wdHMnLFxuICAgIGNhcmRpbmFsaXR5OiAnc2luZ2xlJyxcbiAgICBiYXNlVHlwZTogJ2ludGVnZXInLFxuICAgIHZhbHVlOiAnMCcsXG4gICAgdHlwZTogJ3Jlc3BvbnNlJ1xuICB9XG5dIGFzIFZhcmlhYmxlRGVjbGFyYXRpb248c3RyaW5nIHwgc3RyaW5nW10+W107XG5cbmV4cG9ydCBjb25zdCBpdGVtQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQ8SXRlbUNvbnRleHQ+KCdpdGVtJyk7XG4iLCAiaW1wb3J0IHsgTGl0RWxlbWVudCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50LCBwcm9wZXJ0eSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IHF0aVRyYW5zZm9ybUl0ZW0gfSBmcm9tICcuLi8uLi9xdGktdHJhbnNmb3JtZXJzJztcblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgY3VzdG9tIGVsZW1lbnQgZm9yIHJlZmVyZW5jaW5nIGFuIGFzc2Vzc21lbnQgc3RpbXVsdXMuXG4gKi9cbkBjdXN0b21FbGVtZW50KCdxdGktYXNzZXNzbWVudC1zdGltdWx1cy1yZWYnKVxuZXhwb3J0IGNsYXNzIFF0aUFzc2Vzc21lbnRTdGltdWx1c1JlZiBleHRlbmRzIExpdEVsZW1lbnQge1xuICAvKipcbiAgICogVGhlIGlkZW50aWZpZXIgb2YgdGhlIHN0aW11bHVzLlxuICAgKi9cbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nIH0pIGlkZW50aWZpZXIgPSAnJztcblxuICAvKipcbiAgICogVGhlIGhyZWYgb2YgdGhlIHN0aW11bHVzLlxuICAgKi9cbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nIH0pIGhyZWYgPSAnJztcblxuICAvKipcbiAgICogTGlmZWN5Y2xlIG1ldGhvZCBjYWxsZWQgd2hlbiB0aGUgZWxlbWVudCBpcyBjb25uZWN0ZWQgdG8gdGhlIERPTS5cbiAgICogTG9hZHMgYW5kIGFwcGVuZHMgdGhlIHN0aW11bHVzIGlmIHRoZSAncXRpLWFzc2Vzc21lbnQtc3RpbXVsdXMtcmVmLWNvbm5lY3RlZCcgZXZlbnQgaXMgbm90IHByZXZlbnRlZC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBjb25uZWN0ZWRDYWxsYmFjaygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuXG4gICAgY29uc3QgZXZlbnQgPSBuZXcgRXZlbnQoJ3F0aS1hc3Nlc3NtZW50LXN0aW11bHVzLXJlZi1jb25uZWN0ZWQnLCB7IGNhbmNlbGFibGU6IHRydWUsIGJ1YmJsZXM6IHRydWUgfSk7XG4gICAgY29uc3QgaXNQcmV2ZW50ZWQgPSB0aGlzLmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xuXG4gICAgaWYgKGlzUHJldmVudGVkKSB7XG4gICAgICBjb25zdCBpdGVtID0gdGhpcy5jbG9zZXN0KCdxdGktYXNzZXNzbWVudC1pdGVtJyk7XG5cbiAgICAgIGNvbnN0IHN0aW11bHVzUmVmID0gaXRlbS5xdWVyeVNlbGVjdG9yKGBbZGF0YS1zdGltdWx1cy1pZHJlZj0ke3RoaXMuaWRlbnRpZmllcn1dYCk7XG4gICAgICBpZiAoc3RpbXVsdXNSZWYpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkQW5kQXBwZW5kU3RpbXVsdXMoc3RpbXVsdXNSZWYpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS53YXJuKGBTdGltdWx1cyB3aXRoIGRhdGEtc3RpbXVsdXMtaWRyZWYgJHt0aGlzLmlkZW50aWZpZXJ9IG5vdCBmb3VuZGApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkcyBhbmQgYXBwZW5kcyB0aGUgc3RpbXVsdXMgdG8gdGhlIHNwZWNpZmllZCBlbGVtZW50LlxuICAgKiBAcGFyYW0gc3RpbXVsdXNSZWYgLSBUaGUgZWxlbWVudCB0byB3aGljaCB0aGUgc3RpbXVsdXMgd2lsbCBiZSBhcHBlbmRlZC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBsb2FkQW5kQXBwZW5kU3RpbXVsdXMoc3RpbXVsdXNSZWY6IEVsZW1lbnQpIHtcbiAgICBjb25zdCBwYXRoID0gdGhpcy5ocmVmLnN1YnN0cmluZygwLCB0aGlzLmhyZWYubGFzdEluZGV4T2YoJy8nKSk7XG4gICAgY29uc3Qgc3RpbXVsdXMgPSBhd2FpdCBxdGlUcmFuc2Zvcm1JdGVtKClcbiAgICAgIC5sb2FkKHRoaXMuaHJlZilcbiAgICAgIC50aGVuKGFwaSA9PiBhcGkucGF0aChwYXRoKS5odG1sZG9jKCkpO1xuICAgIGlmIChzdGltdWx1cykgeyAgICAgIFxuICAgICAgY29uc3QgZWxlbWVudHMgPSBzdGltdWx1cy5xdWVyeVNlbGVjdG9yQWxsKCdxdGktc3RpbXVsdXMtYm9keSwgcXRpLXN0eWxlc2hlZXQnKTtcbiAgICAgIHN0aW11bHVzUmVmLmFwcGVuZCguLi5lbGVtZW50cyk7ICAgICAgXG4gICAgICBjb25zdCB0aXRsZSA9IChzdGltdWx1cy5xdWVyeVNlbGVjdG9yKCdxdGktYXNzZXNzbWVudC1zdGltdWx1cycpIGFzIEhUTUxFbGVtZW50KT8udGl0bGU7XG4gICAgICBpZiAodGl0bGUuaW5jbHVkZXMoJyhsaWpzdCknKSkge1xuICAgICAgICBzdGltdWx1c1JlZi5jbGFzc0xpc3QuYWRkKCdxdGktc3RpbXVsdXMtbGlzdCcpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktYXNzZXNzbWVudC1zdGltdWx1cy1yZWYnOiBRdGlBc3Nlc3NtZW50U3RpbXVsdXNSZWY7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBMaXRFbGVtZW50LCBodG1sIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgd2F0Y2ggfSBmcm9tICcuLi8uLi8uLi8uLi9kZWNvcmF0b3JzL3dhdGNoJztcblxuY29uc3QgS0VZQ09ERSA9IHtcbiAgU1BBQ0U6IDMyXG59O1xuXG4vKipcbiAqIEBzdW1tYXJ5IHF0aS1jaG9pY2UgaXMgdXNlZCBieSBxdGktc2ltcGxlLWNob2ljZSwgcXRpLWlubGluZS1jaG9pY2UsIHF0aS1ob3R0ZXh0LCBxdGktaG90c3BvdC1jaG9pY2UuXG4gKlxuICogQHNpbmNlIDEuMFxuICogQHN0YXR1cyBzdGFibGVcbiAqXG4gKiBAZXZlbnQgcXRpLXJlZ2lzdGVyLWNob2ljZSAtIHJlZ2lzdGVyIGl0c2VsdmVzIG9uIGEgcXRpLWNob2ljZS1pbnRlcmFjdGlvbiBlbGVtZW50LlxuICogQGV2ZW50IHF0aS1sb29zZS1jaG9pY2UgLSBkZS1yZWdpc3RlciBpdHNlbHZlcyBvbiBhIHF0aS1jaG9pY2UtaW50ZXJhY3Rpb24gZWxlbWVudC5cbiAqIEBldmVudCBxdGktY2hvaWNlLWVsZW1lbnQtc2VsZWN0ZWQgLSBFbWl0dGVkIHdoZW4gdGhlIGNob2ljZSBpcyBzZWxlY3RlZC5cbiAqXG4gKiBAc2xvdCAtIFRoZSBjaG9pY2VzIHNsb3QgZWxlbWVudFxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgUXRpQ2hvaWNlIGV4dGVuZHMgTGl0RWxlbWVudCB7XG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZyB9KSBpZGVudGlmaWVyOiBzdHJpbmc7XG5cbiAgQHByb3BlcnR5KHsgdHlwZTogTnVtYmVyLCByZWZsZWN0OiB0cnVlIH0pIHRhYmluZGV4OiBudW1iZXIgfCB1bmRlZmluZWQgPSAwO1xuXG4gIEBwcm9wZXJ0eSh7XG4gICAgcmVmbGVjdDogdHJ1ZSxcbiAgICB0eXBlOiBCb29sZWFuLFxuICAgIGF0dHJpYnV0ZTogJ2FyaWEtZGlzYWJsZWQnLFxuICAgIGNvbnZlcnRlcjoge1xuICAgICAgdG9BdHRyaWJ1dGU6IHZhbHVlID0+IHZhbHVlXG4gICAgfVxuICB9KVxuICBkaXNhYmxlZCA9IGZhbHNlO1xuXG4gIEBwcm9wZXJ0eSh7XG4gICAgcmVmbGVjdDogdHJ1ZSxcbiAgICB0eXBlOiBCb29sZWFuLFxuICAgIGF0dHJpYnV0ZTogJ2FyaWEtcmVhZG9ubHknLFxuICAgIGNvbnZlcnRlcjoge1xuICAgICAgdG9BdHRyaWJ1dGU6IHZhbHVlID0+IHZhbHVlXG4gICAgfVxuICB9KVxuICByZWFkb25seSA9IGZhbHNlO1xuXG4gIEBwcm9wZXJ0eSh7XG4gICAgcmVmbGVjdDogdHJ1ZSxcbiAgICB0eXBlOiBCb29sZWFuLFxuICAgIGF0dHJpYnV0ZTogJ2FyaWEtY2hlY2tlZCcsXG4gICAgY29udmVydGVyOiB7XG4gICAgICB0b0F0dHJpYnV0ZTogdmFsdWUgPT4gdmFsdWVcbiAgICB9XG4gIH0pXG4gIGNoZWNrZWQgPSBmYWxzZTtcblxuICBAd2F0Y2goJ2Rpc2FibGVkJywgeyB3YWl0VW50aWxGaXJzdFVwZGF0ZTogdHJ1ZSB9KVxuICBoYW5kbGVEaXNhYmxlZENoYW5nZShfOiBib29sZWFuLCBkaXNhYmxlZDogYm9vbGVhbikge1xuICAgIGlmIChkaXNhYmxlZCkge1xuICAgICAgdGhpcy50YWJpbmRleCA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuYmx1cigpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnRhYkluZGV4ID0gMDtcbiAgICB9XG4gIH1cblxuICBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuXG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdrZXl1cCcsIHRoaXMuX29uS2V5VXApO1xuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLl9vbkNsaWNrKTtcblxuICAgIHRoaXMuZGlzcGF0Y2hFdmVudChcbiAgICAgIG5ldyBDdXN0b21FdmVudCgncXRpLXJlZ2lzdGVyLWNob2ljZScsIHtcbiAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgY2FuY2VsYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbXBvc2VkOiB0cnVlXG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBvdmVycmlkZSBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleXVwJywgdGhpcy5fb25LZXlVcCk7XG4gICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuX29uQ2xpY2spO1xuXG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KFxuICAgICAgbmV3IEN1c3RvbUV2ZW50KCdxdGktbG9vc2UtY2hvaWNlJywge1xuICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICBjYW5jZWxhYmxlOiBmYWxzZSxcbiAgICAgICAgY29tcG9zZWQ6IHRydWVcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyByZXNldCgpIHtcbiAgICB0aGlzLmNoZWNrZWQgPSBmYWxzZTtcbiAgICB0aGlzLmRpc2FibGVkID0gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIF9vbktleVVwKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LmFsdEtleSkgcmV0dXJuO1xuXG4gICAgc3dpdGNoIChldmVudC5rZXlDb2RlKSB7XG4gICAgICBjYXNlIEtFWUNPREUuU1BBQ0U6XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuX3RvZ2dsZUNoZWNrZWQoKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfb25DbGljaygpIHtcbiAgICB0aGlzLl90b2dnbGVDaGVja2VkKCk7XG4gIH1cblxuICBwcml2YXRlIF90b2dnbGVDaGVja2VkKCkge1xuICAgIGlmICh0aGlzLmRpc2FibGVkIHx8IHRoaXMucmVhZG9ubHkpIHJldHVybjtcbiAgICB0aGlzLmNoZWNrZWQgPSAhdGhpcy5jaGVja2VkO1xuXG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KFxuICAgICAgbmV3IEN1c3RvbUV2ZW50KCdxdGktY2hvaWNlLWVsZW1lbnQtc2VsZWN0ZWQnLCB7XG4gICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgIGNhbmNlbGFibGU6IGZhbHNlLFxuICAgICAgICBjb21wb3NlZDogdHJ1ZSxcbiAgICAgICAgZGV0YWlsOiB7IGlkZW50aWZpZXI6IHRoaXMuaWRlbnRpZmllciwgY2hlY2tlZDogdGhpcy5jaGVja2VkIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICByZXR1cm4gaHRtbGAgPHNsb3Q+PC9zbG90PiBgO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1jaG9pY2UnOiBRdGlDaG9pY2U7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBjdXN0b21FbGVtZW50IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgaHRtbCwgTGl0RWxlbWVudCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgc3R5bGVzIGZyb20gJy4vcXRpLWl0ZW0tYm9keS5zdHlsZXMnO1xuaW1wb3J0IHR5cGUgeyBDU1NSZXN1bHRHcm91cCB9IGZyb20gJ2xpdCc7XG5cbi8qKlxuICogQHN1bW1hcnkgVGhlIHF0aS1pdGVtLWJvZHkgbm9kZSBjb250YWlucyB0aGUgdGV4dCwgZ3JhcGhpY3MsIG1lZGlhIG9iamVjdHMgYW5kIGludGVyYWN0aW9ucyB0aGF0IGRlc2NyaWJlIHRoZSBpdGVtJ3MgY29udGVudCBhbmQgaW5mb3JtYXRpb24gYWJvdXQgaG93IGl0IGlzIHN0cnVjdHVyZWQuXG4gKiBAZG9jdW1lbnRhdGlvbiBodHRwczovL3d3dy5pbXNnbG9iYWwub3JnL3NwZWMvcXRpL3YzcDAvaW1wbCNoLnNwaHBvNmx1NnpxaVxuICogQHN0YXR1cyBzdGFibGVcbiAqIEBzaW5jZSA0LjBcbiAqXG4gKiBAc2xvdCAtIGl0ZW0gYm9keSBjb250ZW50LlxuICogQHNsb3QgcXRpLXJ1YnJpYy1ibG9jayAtIHRoZSBxdGkgcnVicmljIGJsb2NrIGlzIHBsYWNlZCBhYm92ZSB0aGUgaXRlbVxuICpcbiAqL1xuQGN1c3RvbUVsZW1lbnQoJ3F0aS1pdGVtLWJvZHknKVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUXRpSXRlbUJvZHkgZXh0ZW5kcyBMaXRFbGVtZW50IHtcbiAgc3RhdGljIHN0eWxlczogQ1NTUmVzdWx0R3JvdXAgPSBzdHlsZXM7XG5cbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYDxzbG90IG5hbWU9XCJxdGktcnVicmljLWJsb2NrXCI+PC9zbG90PjxzbG90Pjwvc2xvdD5gO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1pdGVtLWJvZHknOiBRdGlJdGVtQm9keTtcbiAgfVxufVxuIiwgImltcG9ydCB7IGNzcyB9IGZyb20gJ2xpdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNzc2BcbiAgOmhvc3Qge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICB9XG5gO1xuIiwgImltcG9ydCB7IGh0bWwsIExpdEVsZW1lbnQgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbkBjdXN0b21FbGVtZW50KCdxdGktcHJvbXB0JylcbmV4cG9ydCBjbGFzcyBRdGlQcm9tcHQgZXh0ZW5kcyBMaXRFbGVtZW50IHtcbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYDxzbG90Pjwvc2xvdD5gO1xuICB9XG5cbiAgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgLy8gaWYgcHJvbXB0cyBhcmUgaW4gaW50ZXJhY3Rpb25zIHRoZXkgc2hvdWxkIGhhdmUgYSBzbG90LCBzbyB0aGUgcHJvbXB0IGhhcyB0byBnbyB0aGVyZVxuICAgIC8vIGlmIHByb21wdCBpcyBpbiB0aGUgYm9keSwgdGhlbiBqdXN0IGRpc3BsYXkgdGhlIHByb21wdCB0aGVyZS5cbiAgICAvLyBBIGJldHRlciBjaGVjayB3b3VsZCBiZSB0aGUgbGF0dGVyLCBidXQgbm90IGNhbid0IGdldCB0aHJvdWdoIHRoZSBzaGFkb3dyb290IHRvIGZpbmQgdGhlIHNsb3RcbiAgICBjb25zdCBpbkludGVyYWN0aW9uID0gdGhpcy5wYXJlbnRFbGVtZW50LnRhZ05hbWUuZW5kc1dpdGgoJ0lOVEVSQUNUSU9OJyk7XG4gICAgaW5JbnRlcmFjdGlvbiAmJiB0aGlzLnNldEF0dHJpYnV0ZSgnc2xvdCcsICdwcm9tcHQnKTtcbiAgICAvLyBjb25zdCBwcm9tcHRTbG90ID0gdGhpcy5wYXJlbnRFbGVtZW50LnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcihcIltuYW1lPSdwcm9tcHQnXVwiKTtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktcHJvbXB0JzogUXRpUHJvbXB0O1xuICB9XG59XG4iLCAiaW1wb3J0IHsgTGl0RWxlbWVudCwgUHJvcGVydHlWYWx1ZU1hcCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuXG5AY3VzdG9tRWxlbWVudCgncXRpLXN0eWxlc2hlZXQnKVxuZXhwb3J0IGNsYXNzIFF0aVN0eWxlc2hlZXQgZXh0ZW5kcyBMaXRFbGVtZW50IHtcbiAgcHJpdmF0ZSBzdHlsZUxpbms6IEhUTUxTdHlsZUVsZW1lbnQgfCBIVE1MTGlua0VsZW1lbnQ7XG5cbiAgLy8gcHJvdGVjdGVkIGNyZWF0ZVJlbmRlclJvb3QoKTogSFRNTEVsZW1lbnQgfCBEb2N1bWVudEZyYWdtZW50IHtcbiAgLy8gICByZXR1cm4gdGhpcztcbiAgLy8gfVxuXG4gIHByb3RlY3RlZCBmaXJzdFVwZGF0ZWQoX2NoYW5nZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eVZhbHVlTWFwPGFueT4gfCBNYXA8UHJvcGVydHlLZXksIHVua25vd24+KTogdm9pZCB7XG4gICAgc3VwZXIuZmlyc3RVcGRhdGVkKF9jaGFuZ2VkUHJvcGVydGllcyk7XG5cbiAgICBjb25zdCBpdGVtID0gdGhpcztcbiAgICBjb25zdCBsaW5rID0gdGhpcy5nZXRBdHRyaWJ1dGUoJ2hyZWYnKTtcblxuICAgIGlmIChsaW5rICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBzdHlsZXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsaW5rJyk7XG4gICAgICBzdHlsZXMucmVsID0gJ3N0eWxlc2hlZXQnO1xuICAgICAgc3R5bGVzLnR5cGUgPSAndGV4dC9jc3MnO1xuICAgICAgc3R5bGVzLm1lZGlhID0gJ3NjcmVlbic7XG4gICAgICBzdHlsZXMuaHJlZiA9IGxpbms7XG4gICAgICBpdGVtLmFwcGVuZENoaWxkKHN0eWxlcyk7XG4gICAgICB0aGlzLnN0eWxlTGluayA9IHN0eWxlcztcbiAgICB9XG5cbiAgICBpZiAodGhpcy50ZXh0Q29udGVudCAhPT0gbnVsbCkge1xuICAgICAgY29uc3Qgc3R5bGVzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcbiAgICAgIHN0eWxlcy5tZWRpYSA9ICdzY3JlZW4nO1xuICAgICAgc3R5bGVzLnRleHRDb250ZW50ID0gdGhpcy50ZXh0Q29udGVudDtcbiAgICAgIGl0ZW0uYXBwZW5kQ2hpbGQoc3R5bGVzKTtcbiAgICAgIHRoaXMuc3R5bGVMaW5rID0gc3R5bGVzO1xuICAgIH1cbiAgfVxuXG4gIG92ZXJyaWRlIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIGlmICh0aGlzLnN0eWxlTGluaykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5zdHlsZUxpbmsucmVtb3ZlKCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmxvZygnY291bGQgbm90IHJlbW92ZSBzdHlsZXNoZWV0Jyk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1zdHlsZXNoZWV0JzogUXRpU3R5bGVzaGVldDtcbiAgfVxufVxuIiwgImltcG9ydCB7IGNvbnN1bWUgfSBmcm9tICdAbGl0L2NvbnRleHQnO1xuaW1wb3J0IHsgY3NzLCBodG1sIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQsIHByb3BlcnR5LCBzdGF0ZSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IEJhc2VUeXBlLCBDYXJkaW5hbGl0eSB9IGZyb20gJy4uLy4uL2ludGVybmFsL2V4cHJlc3Npb24tcmVzdWx0JztcbmltcG9ydCB7IE91dGNvbWVWYXJpYWJsZSB9IGZyb20gJy4uLy4uL2ludGVybmFsL3ZhcmlhYmxlcyc7XG5pbXBvcnQgeyBJdGVtQ29udGV4dCwgaXRlbUNvbnRleHQgfSBmcm9tICcuLi8uLi9xdGktYXNzZXNzbWVudC1pdGVtL3F0aS1hc3Nlc3NtZW50LWl0ZW0uY29udGV4dCc7XG5pbXBvcnQgeyBRdGlWYXJpYWJsZURlY2xhcmF0aW9uIH0gZnJvbSAnLi4vcXRpLXZhcmlhYmxlLWRlY2xhcmF0aW9uJztcblxuQGN1c3RvbUVsZW1lbnQoJ3F0aS1vdXRjb21lLWRlY2xhcmF0aW9uJylcbmV4cG9ydCBjbGFzcyBRdGlPdXRjb21lRGVjbGFyYXRpb24gZXh0ZW5kcyBRdGlWYXJpYWJsZURlY2xhcmF0aW9uIHtcbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nLCBhdHRyaWJ1dGU6ICdiYXNlLXR5cGUnIH0pIGJhc2VUeXBlOiBCYXNlVHlwZTtcbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nLCBhdHRyaWJ1dGU6ICdleHRlcm5hbC1zY29yZWQnIH0pIGV4dGVybmFsU2NvcmVkOiAnaHVtYW4nIHwgJ2V4dGVybmFsTWFjaGluZScgfCBudWxsID0gbnVsbDtcbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nIH0pIGlkZW50aWZpZXI6IHN0cmluZztcbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nIH0pIGNhcmRpbmFsaXR5OiBDYXJkaW5hbGl0eTtcblxuICBAY29uc3VtZSh7IGNvbnRleHQ6IGl0ZW1Db250ZXh0LCBzdWJzY3JpYmU6IHRydWUgfSlcbiAgQHN0YXRlKClcbiAgcHVibGljIGl0ZW1Db250ZXh0PzogSXRlbUNvbnRleHQ7XG5cbiAgc3RhdGljIHN0eWxlcyA9IFtcbiAgICBjc3NgXG4gICAgICA6aG9zdCB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICB9XG4gICAgYFxuICBdO1xuXG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuaXRlbUNvbnRleHQ/LnZhcmlhYmxlcy5maW5kKHYgPT4gdi5pZGVudGlmaWVyID09PSB0aGlzLmlkZW50aWZpZXIpPy52YWx1ZTtcbiAgICByZXR1cm4gaHRtbGAke0pTT04uc3RyaW5naWZ5KHZhbHVlLCBudWxsLCAyKX1gO1xuICB9XG5cbiAgZ2V0IGludGVycG9sYXRpb25UYWJsZSgpOiBNYXA8bnVtYmVyLCBudW1iZXI+IHwgbnVsbCB7XG4gICAgY29uc3QgdGFibGUgPSB0aGlzLnF1ZXJ5U2VsZWN0b3IoJ3F0aS1pbnRlcnBvbGF0aW9uLXRhYmxlJyk7XG4gICAgaWYgKHRhYmxlKSB7XG4gICAgICBjb25zdCBlbnRyaWVzID0gbmV3IE1hcDxudW1iZXIsIG51bWJlcj4oKTtcbiAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgdGFibGUucXVlcnlTZWxlY3RvckFsbCgncXRpLWludGVycG9sYXRpb24tdGFibGUtZW50cnknKSkge1xuICAgICAgICBpZiAoIWVudHJ5LmdldEF0dHJpYnV0ZSgnc291cmNlLXZhbHVlJykgJiYgZW50cnkuZ2V0QXR0cmlidXRlKCd0YXJnZXQtdmFsdWUnKSkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ3NvdXJjZS12YWx1ZSBvciB0YXJnZXQtdmFsdWUgaXMgbWlzc2luZyBpbiBxdGktaW50ZXJwb2xhdGlvbi10YWJsZS1lbnRyeScpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNvdXJjZVZhbHVlID0gcGFyc2VJbnQoZW50cnkuZ2V0QXR0cmlidXRlKCdzb3VyY2UtdmFsdWUnKSk7XG4gICAgICAgIGNvbnN0IHRhcmdldFZhbHVlID0gcGFyc2VJbnQoZW50cnkuZ2V0QXR0cmlidXRlKCd0YXJnZXQtdmFsdWUnKSk7XG4gICAgICAgIGlmIChpc05hTihzb3VyY2VWYWx1ZSkgfHwgaXNOYU4odGFyZ2V0VmFsdWUpKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignc291cmNlLXZhbHVlIG9yIHRhcmdldC12YWx1ZSBpcyBub3QgYSBudW1iZXIgaW4gcXRpLWludGVycG9sYXRpb24tdGFibGUtZW50cnknKTtcbiAgICAgICAgfVxuICAgICAgICBlbnRyaWVzLnNldChzb3VyY2VWYWx1ZSwgdGFyZ2V0VmFsdWUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGVudHJpZXM7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgY29uc3Qgb3V0Y29tZVZhcmlhYmxlOiBPdXRjb21lVmFyaWFibGUgPSB7XG4gICAgICBpZGVudGlmaWVyOiB0aGlzLmlkZW50aWZpZXIsXG4gICAgICBjYXJkaW5hbGl0eTogdGhpcy5jYXJkaW5hbGl0eSxcbiAgICAgIGJhc2VUeXBlOiB0aGlzLmJhc2VUeXBlLFxuICAgICAgdHlwZTogJ291dGNvbWUnLFxuICAgICAgdmFsdWU6IG51bGwsXG4gICAgICBpbnRlcnBvbGF0aW9uVGFibGU6IHRoaXMuaW50ZXJwb2xhdGlvblRhYmxlLFxuICAgICAgZXh0ZXJuYWxTY29yZWQ6IHRoaXMuZXh0ZXJuYWxTY29yZWRcbiAgICB9O1xuICAgIG91dGNvbWVWYXJpYWJsZS52YWx1ZSA9IHRoaXMuZGVmYXVsdFZhbHVlcyhvdXRjb21lVmFyaWFibGUpO1xuICAgIHRoaXMuZGlzcGF0Y2hFdmVudChcbiAgICAgIG5ldyBDdXN0b21FdmVudCgncXRpLXJlZ2lzdGVyLXZhcmlhYmxlJywge1xuICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICBjb21wb3NlZDogdHJ1ZSxcbiAgICAgICAgZGV0YWlsOiB7IHZhcmlhYmxlOiBvdXRjb21lVmFyaWFibGUgfVxuICAgICAgfSlcbiAgICApO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1vdXRjb21lLWRlY2xhcmF0aW9uJzogUXRpT3V0Y29tZURlY2xhcmF0aW9uO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgaHRtbCwgTGl0RWxlbWVudCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgVmFyaWFibGVEZWNsYXJhdGlvbiB9IGZyb20gJy4uL2ludGVybmFsL3ZhcmlhYmxlcyc7XG5cbkBjdXN0b21FbGVtZW50KCdxdGktdmFyaWFibGVkZWNsYXJhdGlvbicpXG5leHBvcnQgY2xhc3MgUXRpVmFyaWFibGVEZWNsYXJhdGlvbiBleHRlbmRzIExpdEVsZW1lbnQge1xuICBvdmVycmlkZSByZW5kZXIoKSB7XG4gICAgcmV0dXJuIGh0bWxgPHNsb3Q+PC9zbG90PmA7XG4gIH1cblxuICBwcm90ZWN0ZWQgZGVmYXVsdFZhbHVlcyh2YXJpYWJsZTogVmFyaWFibGVEZWNsYXJhdGlvbjxzdHJpbmcgfCBzdHJpbmdbXSB8IG51bGw+KSB7XG4gICAgY29uc3QgaHRtbFZhbHVlcyA9IEFycmF5LmZyb20odGhpcy5xdWVyeVNlbGVjdG9yQWxsKCdxdGktZGVmYXVsdC12YWx1ZSA+IHF0aS12YWx1ZScpKTtcblxuICAgIGlmIChodG1sVmFsdWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgZGVmYXVsdFZhbHVlcyA9IGh0bWxWYWx1ZXMubWFwKG4gPT4gbi5pbm5lckhUTUwpO1xuICAgIGlmIChkZWZhdWx0VmFsdWVzLmxlbmd0aCA+IDEgfHwgdmFyaWFibGUuY2FyZGluYWxpdHkgPT09ICdtdWx0aXBsZScgfHwgdmFyaWFibGUuY2FyZGluYWxpdHkgPT09ICdvcmRlcmVkJykge1xuICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZXM7XG4gICAgfVxuICAgIHJldHVybiBkZWZhdWx0VmFsdWVzWzBdO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS12YXJpYWJsZWRlY2xhcmF0aW9uJzogUXRpVmFyaWFibGVEZWNsYXJhdGlvbjtcbiAgfVxufVxuIiwgImltcG9ydCB7IGNvbnN1bWUgfSBmcm9tICdAbGl0L2NvbnRleHQnO1xuaW1wb3J0IHsgY3NzLCBodG1sIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQsIHByb3BlcnR5LCBzdGF0ZSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IEJhc2VUeXBlLCBDYXJkaW5hbGl0eSB9IGZyb20gJy4uLy4uL2ludGVybmFsL2V4cHJlc3Npb24tcmVzdWx0JztcbmltcG9ydCB7IFJlc3BvbnNlVmFyaWFibGUgfSBmcm9tICcuLi8uLi9pbnRlcm5hbC92YXJpYWJsZXMnO1xuaW1wb3J0IHsgSXRlbUNvbnRleHQsIGl0ZW1Db250ZXh0IH0gZnJvbSAnLi4vLi4vcXRpLWFzc2Vzc21lbnQtaXRlbS9xdGktYXNzZXNzbWVudC1pdGVtLmNvbnRleHQnO1xuaW1wb3J0IHsgUXRpTWFwcGluZyB9IGZyb20gJy4uLy4uL3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nL3F0aS1leHByZXNzaW9uL3F0aS1tYXBwaW5nL3F0aS1tYXBwaW5nJztcbmltcG9ydCB7IFF0aVZhcmlhYmxlRGVjbGFyYXRpb24gfSBmcm9tICcuLi9xdGktdmFyaWFibGUtZGVjbGFyYXRpb24nO1xuXG5AY3VzdG9tRWxlbWVudCgncXRpLXJlc3BvbnNlLWRlY2xhcmF0aW9uJylcbmV4cG9ydCBjbGFzcyBRdGlSZXNwb25zZURlY2xhcmF0aW9uIGV4dGVuZHMgUXRpVmFyaWFibGVEZWNsYXJhdGlvbiB7XG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZywgYXR0cmlidXRlOiAnYmFzZS10eXBlJyB9KSBiYXNlVHlwZTogQmFzZVR5cGU7XG5cbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nIH0pIGlkZW50aWZpZXI6IHN0cmluZztcblxuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcgfSkgY2FyZGluYWxpdHk6IENhcmRpbmFsaXR5O1xuXG4gIEBjb25zdW1lKHsgY29udGV4dDogaXRlbUNvbnRleHQsIHN1YnNjcmliZTogdHJ1ZSB9KVxuICBAc3RhdGUoKVxuICBwdWJsaWMgaXRlbUNvbnRleHQ/OiBJdGVtQ29udGV4dDtcblxuICBzdGF0aWMgc3R5bGVzID0gW1xuICAgIGNzc2BcbiAgICAgIDpob3N0IHtcbiAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgIH1cbiAgICBgXG4gIF07XG5cbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5pdGVtQ29udGV4dD8udmFyaWFibGVzLmZpbmQodiA9PiB2LmlkZW50aWZpZXIgPT09IHRoaXMuaWRlbnRpZmllcik/LnZhbHVlO1xuICAgIHJldHVybiBodG1sYCR7SlNPTi5zdHJpbmdpZnkodmFsdWUsIG51bGwsIDIpfWA7XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcblxuICAgIGNvbnN0IHJlc3BvbnNlVmFyaWFibGU6IFJlc3BvbnNlVmFyaWFibGUgPSB7XG4gICAgICBiYXNlVHlwZTogdGhpcy5iYXNlVHlwZSxcbiAgICAgIGlkZW50aWZpZXI6IHRoaXMuaWRlbnRpZmllcixcbiAgICAgIGNvcnJlY3RSZXNwb25zZTogdGhpcy5jb3JyZWN0UmVzcG9uc2UsXG4gICAgICBjYXJkaW5hbGl0eTogdGhpcy5jYXJkaW5hbGl0eSB8fCAnc2luZ2xlJyxcbiAgICAgIG1hcHBpbmc6IHRoaXMubWFwcGluZyxcbiAgICAgIHZhbHVlOiBudWxsLFxuICAgICAgdHlwZTogJ3Jlc3BvbnNlJyxcbiAgICAgIGNhbmRpZGF0ZVJlc3BvbnNlOiBudWxsXG4gICAgfTtcbiAgICByZXNwb25zZVZhcmlhYmxlLnZhbHVlID0gdGhpcy5kZWZhdWx0VmFsdWVzKHJlc3BvbnNlVmFyaWFibGUpO1xuXG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KFxuICAgICAgbmV3IEN1c3RvbUV2ZW50KCdxdGktcmVnaXN0ZXItdmFyaWFibGUnLCB7XG4gICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgIGNvbXBvc2VkOiB0cnVlLFxuICAgICAgICBkZXRhaWw6IHsgdmFyaWFibGU6IHJlc3BvbnNlVmFyaWFibGUgfVxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgY29ycmVjdFJlc3BvbnNlKCk6IHN0cmluZyB8IHN0cmluZ1tdIHtcbiAgICBsZXQgcmVzdWx0OiBzdHJpbmcgfCBzdHJpbmdbXTtcbiAgICBjb25zdCBjb3JyZWN0UmVzcG9uc2UgPSB0aGlzLnF1ZXJ5U2VsZWN0b3IoJ3F0aS1jb3JyZWN0LXJlc3BvbnNlJyk7XG4gICAgaWYgKGNvcnJlY3RSZXNwb25zZSkge1xuICAgICAgY29uc3QgdmFsdWVzID0gY29ycmVjdFJlc3BvbnNlLnF1ZXJ5U2VsZWN0b3JBbGwoJ3F0aS12YWx1ZScpO1xuICAgICAgaWYgKHRoaXMuY2FyZGluYWxpdHkgPT09ICdzaW5nbGUnICYmIHZhbHVlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJlc3VsdCA9IHZhbHVlc1swXS50ZXh0Q29udGVudDtcbiAgICAgICAgdmFsdWVzWzBdLnJlbW92ZSgpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLmNhcmRpbmFsaXR5ICE9PSAnc2luZ2xlJykge1xuICAgICAgICByZXN1bHQgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICByZXN1bHQucHVzaCh2YWx1ZXNbaV0udGV4dENvbnRlbnQpO1xuICAgICAgICAgIHZhbHVlc1tpXS5yZW1vdmUoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgbWFwcGluZygpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yKCdxdGktbWFwcGluZycpIGFzIFF0aU1hcHBpbmc7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLXJlc3BvbnNlLWRlY2xhcmF0aW9uJzogUXRpUmVzcG9uc2VEZWNsYXJhdGlvbjtcbiAgfVxufVxuIiwgImltcG9ydCB7IExpdEVsZW1lbnQgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcblxuQGN1c3RvbUVsZW1lbnQoJ3F0aS1jb21wYW5pb24tbWF0ZXJpYWxzLWluZm8nKVxuZXhwb3J0IGNsYXNzIFF0aUNvbXBhbmlvbk1hdGVyaWFsc0luZm8gZXh0ZW5kcyBMaXRFbGVtZW50IHtcbiAgLy8gc3RhdGljIG92ZXJyaWRlIHN0eWxlcyA9IGNzc2BcbiAgLy8gICBzbG90IHtcbiAgLy8gICAgIGRpc3BsYXk6IGhpZGRlbjtcbiAgLy8gICB9XG4gIC8vIGA7XG4gIC8vIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgLy8gICByZXR1cm4gaHRtbGAgPHNsb3Q+PC9zbG90PiBgO1xuICAvLyB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1jb21wYW5pb24tbWF0ZXJpYWxzLWluZm8nOiBRdGlDb21wYW5pb25NYXRlcmlhbHNJbmZvO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgTGl0RWxlbWVudCwgaHRtbCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuXG5AY3VzdG9tRWxlbWVudCgncXRpLWNvbnRlbnQtYm9keScpXG5leHBvcnQgY2xhc3MgUXRpQ29udGVudEJvZHkgZXh0ZW5kcyBMaXRFbGVtZW50IHtcbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYDxzbG90Pjwvc2xvdD5gO1xuICB9XG59XG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktY29udGVudC1ib2R5JzogUXRpQ29udGVudEJvZHk7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBMaXRFbGVtZW50LCBjc3MsIGh0bWwgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCwgcHJvcGVydHkgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyB3YXRjaCB9IGZyb20gJy4uLy4uL2RlY29yYXRvcnMvd2F0Y2gnO1xuXG5AY3VzdG9tRWxlbWVudCgncXRpLXJ1YnJpYy1ibG9jaycpXG5leHBvcnQgY2xhc3MgUXRpUnVicmljQmxvY2sgZXh0ZW5kcyBMaXRFbGVtZW50IHtcbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nIH0pIG92ZXJyaWRlIGlkOyAvLyA9XCJxdGlBc3BlY3RJbmhvdWRSdWJyaWNCbG9ja1wiXG5cbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nIH0pIHVzZTogJ2luc3RydWN0aW9ucycgfCAnc2NvcmluZycgfCAnbmF2aWdhdGlvbic7IC8vICA9IFwic2NvcmluZ1wiXG5cbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nIH0pIHZpZXc6ICdhdXRob3InIHwgJ2NhbmRpZGF0ZScgfCAncHJvY3RvcicgfCAnc2NvcmVyJyB8ICd0ZXN0Q29uc3RydWN0b3InIHwgJ3R1dG9yJztcblxuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcsIGF0dHJpYnV0ZTogJ2NsYXNzJyB9KSBjbGFzc05hbWVzO1xuICBAd2F0Y2goJ2NsYXNzTmFtZXMnLCB7IHdhaXRVbnRpbEZpcnN0VXBkYXRlOiB0cnVlIH0pXG4gIGhhbmRsZWNsYXNzTmFtZXNDaGFuZ2Uob2xkLCBkaXNhYmxlZDogYm9vbGVhbikge1xuICAgIGNvbnN0IGNsYXNzTmFtZXMgPSB0aGlzLmNsYXNzTmFtZXMuc3BsaXQoJyAnKTtcbiAgICBjbGFzc05hbWVzLmZvckVhY2goKGNsYXNzTmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICBzd2l0Y2ggKGNsYXNzTmFtZSkge1xuICAgICAgICBjYXNlICdxdGktcnVicmljLWRpc2NyZXRpb25hcnktcGxhY2VtZW50JzpcbiAgICAgICAgICB0aGlzLnNldEF0dHJpYnV0ZSgnc2xvdCcsICdxdGktcnVicmljLWJsb2NrJyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3F0aS1ydWJyaWMtaW5saW5lJzpcbiAgICAgICAgICB0aGlzLnNldEF0dHJpYnV0ZSgnc2xvdCcsICcnKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBvdmVycmlkZSBzdHlsZXMgPSBjc3NgXG4gICAgOmhvc3Qge1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgfVxuICBgO1xuXG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICByZXR1cm4gaHRtbGA8c2xvdD48L3Nsb3Q+YDtcbiAgfVxuXG4gIG92ZXJyaWRlIGNvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xuICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgLy8gYnkgZGVmYXVsdCBwdXQgdGhpcyBpbiBhIHNsb3QgaW4gdGhlIGl0ZW0tYm9keVxuICAgIHRoaXMuc2V0QXR0cmlidXRlKCdzbG90JywgJ3F0aS1ydWJyaWMtYmxvY2snKTtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktcnVicmljLWJsb2NrJzogUXRpUnVicmljQmxvY2s7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBQcm9wZXJ0eVZhbHVlTWFwLCBjc3MsIGh0bWwgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IFF0aUZlZWRiYWNrIH0gZnJvbSAnLi4vcXRpLWZlZWRiYWNrJztcblxuQGN1c3RvbUVsZW1lbnQoJ3F0aS1mZWVkYmFjay1ibG9jaycpXG5leHBvcnQgY2xhc3MgUXRpRmVlZGJhY2tCbG9jayBleHRlbmRzIFF0aUZlZWRiYWNrIHtcbiAgc3RhdGljIG92ZXJyaWRlIHN0eWxlcyA9IGNzc2BcbiAgICA6aG9zdCB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICB9XG4gICAgLm9uIHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIH1cbiAgICAub2ZmIHtcbiAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgfVxuICBgO1xuXG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICByZXR1cm4gaHRtbGAgPHNsb3QgcGFydD1cImZlZWRiYWNrXCIgY2xhc3M9XCJmZWVkYmFjayAke3RoaXMuc2hvd1N0YXR1c31cIj48L3Nsb3Q+IGA7XG4gIH1cblxuICBwcm90ZWN0ZWQgZmlyc3RVcGRhdGVkKF9jaGFuZ2VkUHJvcGVydGllczogUHJvcGVydHlWYWx1ZU1hcDxhbnk+IHwgTWFwPFByb3BlcnR5S2V5LCB1bmtub3duPik6IHZvaWQge1xuICAgIHRoaXMuY2hlY2tTaG93RmVlZGJhY2sodGhpcy5vdXRjb21lSWRlbnRpZmllcik7XG4gIH1cbn1cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1mZWVkYmFjay1ibG9jayc6IFF0aUZlZWRiYWNrQmxvY2s7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBMaXRFbGVtZW50LCBQcm9wZXJ0eVZhbHVlTWFwIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgUXRpQXNzZXNzbWVudEl0ZW0gfSBmcm9tICcuLi9xdGktYXNzZXNzbWVudC1pdGVtL3F0aS1hc3Nlc3NtZW50LWl0ZW0nO1xuaW1wb3J0IHsgSXNOdWxsT3JVbmRlZmluZWQgfSBmcm9tICcuLi9pbnRlcm5hbC91dGlscyc7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBRdGlGZWVkYmFjayBleHRlbmRzIExpdEVsZW1lbnQge1xuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcsIGF0dHJpYnV0ZTogJ3Nob3ctaGlkZScgfSlcbiAgcHJvdGVjdGVkIHNob3dIaWRlOiBzdHJpbmc7XG5cbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nLCBhdHRyaWJ1dGU6ICdvdXRjb21lLWlkZW50aWZpZXInIH0pXG4gIHB1YmxpYyBvdXRjb21lSWRlbnRpZmllcjogc3RyaW5nO1xuXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZyB9KVxuICBwcm90ZWN0ZWQgaWRlbnRpZmllcjogc3RyaW5nO1xuXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZywgYXR0cmlidXRlOiBmYWxzZSB9KVxuICBwdWJsaWMgc2hvd1N0YXR1czogc3RyaW5nO1xuXG4gIHB1YmxpYyBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIHRoaXMuZGlzcGF0Y2hFdmVudChcbiAgICAgIG5ldyBDdXN0b21FdmVudDxRdGlGZWVkYmFjaz4oJ3F0aS1yZWdpc3Rlci1mZWVkYmFjaycsIHtcbiAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgY29tcG9zZWQ6IHRydWUsXG4gICAgICAgIGRldGFpbDogdGhpc1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGNoZWNrU2hvd0ZlZWRiYWNrKG91dGNvbWVJZGVudGlmaWVyOiBzdHJpbmcpIHsgICAgXG4gICAgY29uc3Qgb3V0Y29tZVZhcmlhYmxlID0gKHRoaXMuY2xvc2VzdCgncXRpLWFzc2Vzc21lbnQtaXRlbScpIGFzIFF0aUFzc2Vzc21lbnRJdGVtKS5nZXRPdXRjb21lKG91dGNvbWVJZGVudGlmaWVyKTtcblxuICAgIGlmICh0aGlzLm91dGNvbWVJZGVudGlmaWVyICE9PSBvdXRjb21lSWRlbnRpZmllciB8fCAhb3V0Y29tZVZhcmlhYmxlKSByZXR1cm47XG4gICAgbGV0IGlzRm91bmQgPSBmYWxzZTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShvdXRjb21lVmFyaWFibGUudmFsdWUpKSB7XG4gICAgICBpc0ZvdW5kID0gb3V0Y29tZVZhcmlhYmxlLnZhbHVlLmluY2x1ZGVzKHRoaXMuaWRlbnRpZmllcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlzRm91bmQgPVxuICAgICAgICAoIUlzTnVsbE9yVW5kZWZpbmVkKHRoaXMuaWRlbnRpZmllcikgJiZcbiAgICAgICAgICAhSXNOdWxsT3JVbmRlZmluZWQob3V0Y29tZVZhcmlhYmxlPy52YWx1ZSkgJiZcbiAgICAgICAgICB0aGlzLmlkZW50aWZpZXIgPT09IG91dGNvbWVWYXJpYWJsZS52YWx1ZSkgfHxcbiAgICAgICAgZmFsc2U7XG4gICAgfVxuXG4gICAgdGhpcy5zaG93RmVlZGJhY2soaXNGb3VuZCk7XG4gIH1cblxuICBwcml2YXRlIHNob3dGZWVkYmFjayh2YWx1ZTogYm9vbGVhbikgeyAgICBcbiAgICB0aGlzLnNob3dTdGF0dXMgPSAodmFsdWUgJiYgdGhpcy5zaG93SGlkZSA9PT0gJ3Nob3cnKSB8fCAoIXZhbHVlICYmIHRoaXMuc2hvd0hpZGUgPT09ICdoaWRlJykgPyAnb24nIDogJ29mZic7ICAgIFxuICB9XG59XG4iLCAiZXhwb3J0IGNvbnN0IGRlY2ltYWxTZXBhcmF0b3IgPSAoKSA9PiB7XG4gIHJldHVybiBuZXcgSW50bC5OdW1iZXJGb3JtYXQoKS5mb3JtYXQoMC4xKS5yZXBsYWNlKC9cXGQvZywgJycpO1xufTtcblxuZXhwb3J0IGNvbnN0IGNvbnZlcnROdW1iZXJUb1VuaXZlcmFsRm9ybWF0ID0gKG51bWJlcjogbnVtYmVyIHwgc3RyaW5nKSA9PiB7XG4gIC8vIGNoZWNrIGlmIHR5cGUgaXMgc3RyaW5nXG4gIGlmICh0eXBlb2YgbnVtYmVyID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBudW1iZXI7XG4gIH1cbiAgY29uc3QgZFNlcCA9IGRlY2ltYWxTZXBhcmF0b3IoKTtcbiAgaWYgKGRTZXAgPT09ICcuJykge1xuICAgIHJldHVybiBudW1iZXIudG9Mb2NhbGVTdHJpbmcoKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbnVtYmVyLnRvU3RyaW5nKCkucmVwbGFjZSgnLicsICcnKS5yZXBsYWNlKGRTZXAsICcuJyk7XG4gIH1cbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBJc051bGxPclVuZGVmaW5lZCh2YWx1ZTogdW5rbm93bikge1xuICByZXR1cm4gdmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZURvdWJsZVNsYXNoZXMoc3RyOiBzdHJpbmcpIHtcbiAgY29uc3Qgc2luZ2xlRm9yd2FyZFNsYXNoZXMgPSBzdHJcbiAgICAucmVwbGFjZSgvKFteOl1cXC8pXFwvKy9nLCAnJDEnKVxuICAgIC5yZXBsYWNlKC9cXC9cXC8vZywgJy8nKVxuICAgIC5yZXBsYWNlKCdodHRwOi8nLCAnaHR0cDovLycpXG4gICAgLnJlcGxhY2UoJ2h0dHBzOi8nLCAnaHR0cHM6Ly8nKTtcbiAgcmV0dXJuIHNpbmdsZUZvcndhcmRTbGFzaGVzO1xufVxuIiwgImltcG9ydCB7IGNzcywgaHRtbCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgUXRpRmVlZGJhY2sgfSBmcm9tICcuLi9xdGktZmVlZGJhY2snO1xuXG5AY3VzdG9tRWxlbWVudCgncXRpLWZlZWRiYWNrLWlubGluZScpXG5leHBvcnQgY2xhc3MgUXRpRmVlZGJhY2tJbmxpbmUgZXh0ZW5kcyBRdGlGZWVkYmFjayB7XG4gIHN0YXRpYyBvdmVycmlkZSBzdHlsZXMgPSBjc3NgXG4gICAgLm9uIHtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICB9XG4gICAgLm9mZiB7XG4gICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cbiAgYDtcblxuICBvdmVycmlkZSByZW5kZXIgPSAoKSA9PiBodG1sYCA8c2xvdCBwYXJ0PVwiZmVlZGJhY2tcIiBjbGFzcz1cIiR7dGhpcy5zaG93U3RhdHVzfVwiPjwvc2xvdD4gYDtcbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLWZlZWRiYWNrLWlubGluZSc6IFF0aUZlZWRiYWNrSW5saW5lO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgY3NzLCBodG1sIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBRdGlGZWVkYmFjayB9IGZyb20gJy4uL3F0aS1mZWVkYmFjayc7XG5cbkBjdXN0b21FbGVtZW50KCdxdGktbW9kYWwtZmVlZGJhY2snKVxuZXhwb3J0IGNsYXNzIFF0aU1vZGFsRmVlZGJhY2sgZXh0ZW5kcyBRdGlGZWVkYmFjayB7XG4gIHN0YXRpYyBvdmVycmlkZSBzdHlsZXMgPSBjc3NgXG4gICAgLm9uIHtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICB9XG4gICAgLm9mZiB7XG4gICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cbiAgYDtcblxuICBvdmVycmlkZSByZW5kZXIgPSAoKSA9PiBodG1sYCA8c2xvdCBwYXJ0PVwiZmVlZGJhY2tcIiBjbGFzcz1cIiR7dGhpcy5zaG93U3RhdHVzfVwiPjwvc2xvdD4gYDtcbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLW1vZGFsLWZlZWRiYWNrJzogUXRpTW9kYWxGZWVkYmFjaztcbiAgfVxufVxuIiwgImltcG9ydCB7IGNzcywgaHRtbCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBpZkRlZmluZWQgfSBmcm9tICdsaXQvZGlyZWN0aXZlcy9pZi1kZWZpbmVkLmpzJztcbmltcG9ydCB7IEludGVyYWN0aW9uIH0gZnJvbSAnLi4vaW50ZXJuYWwvaW50ZXJhY3Rpb24vaW50ZXJhY3Rpb24nO1xuaW1wb3J0IHsgcmVmLCBjcmVhdGVSZWYgfSBmcm9tICdsaXQvZGlyZWN0aXZlcy9yZWYuanMnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCwgcHJvcGVydHksIHN0YXRlIH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgd2F0Y2ggfSBmcm9tICcuLi8uLi8uLi9kZWNvcmF0b3JzL3dhdGNoJztcblxuQGN1c3RvbUVsZW1lbnQoJ3F0aS1leHRlbmRlZC10ZXh0LWludGVyYWN0aW9uJylcbmV4cG9ydCBjbGFzcyBRdGlFeHRlbmRlZFRleHRJbnRlcmFjdGlvbiBleHRlbmRzIEludGVyYWN0aW9uIHtcbiAgLy8gcHVibGljIHN0YXRpYyByb3dIZWlnaHRDbGFzcyA9IFtdO1xuXG4gIHRleHRhcmVhUmVmID0gY3JlYXRlUmVmPEhUTUxUZXh0QXJlYUVsZW1lbnQ+KCk7XG5cbiAgLyoqIGV4cGVjdGVkIGxlbmd0aCBpcyBtYXBwZWQgdG8gdGhlIHByb3BlcnR5IG1heGxlbmd0aCBvbiB0aGUgdGV4dGFyZWEgKi9cbiAgQHByb3BlcnR5KHsgdHlwZTogTnVtYmVyLCBhdHRyaWJ1dGU6ICdleHBlY3RlZC1sZW5ndGgnIH0pIGV4cGVjdGVkTGVuZ3RoOiBudW1iZXI7XG5cbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nLCBhdHRyaWJ1dGU6ICdwYXR0ZXJuLW1hc2snIH0pIHBhdHRlcm5NYXNrOiBzdHJpbmc7XG5cbiAgLyoqIHRleHQgYXBwZWFyaW5nIGluIHRoZSBleHRlbmRlZC10ZXh0LW50ZXJhY3Rpb24gaWYgaXQgaXMgZW1wdHkgKi9cbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nLCBhdHRyaWJ1dGU6ICdwbGFjZWhvbGRlci10ZXh0JyB9KSBwbGFjZWhvbGRlclRleHQ6IHN0cmluZztcblxuICBAc3RhdGUoKVxuICBwcml2YXRlIF92YWx1ZSA9ICcnO1xuXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZywgYXR0cmlidXRlOiAnY2xhc3MnIH0pIGNsYXNzTmFtZXM7XG4gIEB3YXRjaCgnY2xhc3NOYW1lcycsIHsgd2FpdFVudGlsRmlyc3RVcGRhdGU6IHRydWUgfSlcbiAgaGFuZGxlY2xhc3NOYW1lc0NoYW5nZShvbGQsIGRpc2FibGVkOiBib29sZWFuKSB7XG4gICAgY29uc3QgY2xhc3NOYW1lcyA9IHRoaXMuY2xhc3NOYW1lcy5zcGxpdCgnICcpO1xuICAgIGNsYXNzTmFtZXMuZm9yRWFjaCgoY2xhc3NOYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgIGlmIChjbGFzc05hbWUuc3RhcnRzV2l0aCgncXRpLWhlaWdodC1saW5lcycpKSB7XG4gICAgICAgIGNvbnN0IG5yUm93cyA9IGNsYXNzTmFtZS5yZXBsYWNlKCdxdGktaGVpZ2h0LWxpbmVzLScsICcnKTtcbiAgICAgICAgaWYgKHRoaXMudGV4dGFyZWFSZWYpIHtcbiAgICAgICAgICB0aGlzLnRleHRhcmVhUmVmLnZhbHVlLnJvd3MgPSBwYXJzZUludChuclJvd3MpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgc2V0IHJlc3BvbnNlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl92YWx1ZSA9IHZhbHVlICE9PSB1bmRlZmluZWQgPyB2YWx1ZSA6ICcnO1xuICB9XG5cbiAgcHVibGljIHZhbGlkYXRlKCkge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZSAhPT0gJyc7XG4gIH1cblxuICBzdGF0aWMgb3ZlcnJpZGUgZ2V0IHN0eWxlcygpIHtcbiAgICByZXR1cm4gW1xuICAgICAgY3NzYFxuICAgICAgICAvKiBQSzogZGlzcGxheSBob3N0IGFzIGJsb2NrLCBlbHNlIGRlc2lnbiB3aWxsIGJlIGNvbGxhcHNlZCAqL1xuICAgICAgICA6aG9zdCB7XG4gICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIH1cbiAgICAgICAgdGV4dGFyZWEge1xuICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICAgIGJvcmRlcjogMDtcbiAgICAgICAgfVxuICAgICAgYFxuICAgIF07XG4gIH1cblxuICBvdmVycmlkZSByZW5kZXIoKSB7XG4gICAgcmV0dXJuIGh0bWxgPHNsb3QgbmFtZT1cInByb21wdFwiPjwvc2xvdFxuICAgICAgPjx0ZXh0YXJlYVxuICAgICAgICBwYXJ0PVwidGV4dGFyZWFcIlxuICAgICAgICAke3JlZih0aGlzLnRleHRhcmVhUmVmKX1cbiAgICAgICAgc3BlbGxjaGVjaz1cImZhbHNlXCJcbiAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgQGtleWRvd249XCIke2V2ZW50ID0+IGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfVwiXG4gICAgICAgIEBrZXl1cD1cIiR7dGhpcy50ZXh0Q2hhbmdlZH1cIlxuICAgICAgICBAY2hhbmdlPVwiJHt0aGlzLnRleHRDaGFuZ2VkfVwiXG4gICAgICAgIEBibHVyPVwiJHsoZXZlbnQ6IEZvY3VzRXZlbnQpID0+IHtcbiAgICAgICAgICBjb25zdCBpbnB1dCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgICAgICAgIGlmICghaW5wdXQuY2hlY2tWYWxpZGl0eSgpKSB7XG4gICAgICAgICAgICBpbnB1dC5zZXRDdXN0b21WYWxpZGl0eSh0aGlzLmRhdGFzZXQucGF0dGVybm1hc2tNZXNzYWdlIHx8ICdJbnZhbGlkIGlucHV0Jyk7XG4gICAgICAgICAgICBpbnB1dC5yZXBvcnRWYWxpZGl0eSgpOyAvLyBTaG93IHRoZSB2YWxpZGF0aW9uIG1lc3NhZ2VcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaW5wdXQuc2V0Q3VzdG9tVmFsaWRpdHkoJycpOyAvLyBDbGVhciB0aGUgY3VzdG9tIHZhbGlkaXR5IG1lc3NhZ2VcbiAgICAgICAgICB9XG4gICAgICAgIH19XCJcbiAgICAgICAgcGxhY2Vob2xkZXI9XCIke2lmRGVmaW5lZCh0aGlzLnBsYWNlaG9sZGVyVGV4dCA/IHRoaXMucGxhY2Vob2xkZXJUZXh0IDogdW5kZWZpbmVkKX1cIlxuICAgICAgICBtYXhsZW5ndGg9XCIke2lmRGVmaW5lZCh0aGlzLmV4cGVjdGVkTGVuZ3RoID8gdGhpcy5leHBlY3RlZExlbmd0aCA6IHVuZGVmaW5lZCl9XCJcbiAgICAgICAgcGF0dGVybj1cIiR7aWZEZWZpbmVkKHRoaXMucGF0dGVybk1hc2sgPyB0aGlzLnBhdHRlcm5NYXNrIDogdW5kZWZpbmVkKX1cIlxuICAgICAgICA/ZGlzYWJsZWQ9XCIke3RoaXMuZGlzYWJsZWR9XCJcbiAgICAgICAgP3JlYWRvbmx5PVwiJHt0aGlzLnJlYWRvbmx5fVwiXG4gICAgICAgIC52YWx1ZT0ke3RoaXMuX3ZhbHVlfVxuICAgICAgPjwvdGV4dGFyZWE+YDtcbiAgfVxuXG4gIHByb3RlY3RlZCB0ZXh0Q2hhbmdlZChldmVudDogRXZlbnQpIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCB8fCB0aGlzLnJlYWRvbmx5KSByZXR1cm47XG4gICAgY29uc3QgaW5wdXQgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICB0aGlzLnNldEVtcHR5QXR0cmlidXRlKGlucHV0LnZhbHVlKTtcbiAgICBpZiAodGhpcy5fdmFsdWUgIT09IGlucHV0LnZhbHVlKSB7XG4gICAgICB0aGlzLl92YWx1ZSA9IGlucHV0LnZhbHVlO1xuICAgICAgdGhpcy5zYXZlUmVzcG9uc2UoaW5wdXQudmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHJlc2V0KCk6IHZvaWQge1xuICAgIHRoaXMuX3ZhbHVlID0gJyc7XG4gIH1cblxuICBwcml2YXRlIHNldEVtcHR5QXR0cmlidXRlKHRleHQ6IHN0cmluZykge1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKCdlbXB0eScsIHRleHQgPT09ICcnID8gJ3RydWUnIDogJ2ZhbHNlJyk7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLWV4dGVuZGVkLXRleHQtaW50ZXJhY3Rpb24nOiBRdGlFeHRlbmRlZFRleHRJbnRlcmFjdGlvbjtcbiAgfVxufVxuIiwgImltcG9ydCB7IHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgTGl0RWxlbWVudCB9IGZyb20gJ2xpdCc7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBJbnRlcmFjdGlvbiBleHRlbmRzIExpdEVsZW1lbnQge1xuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdyZXNwb25zZS1pZGVudGlmaWVyJyB9KSByZXNwb25zZUlkZW50aWZpZXI6IHN0cmluZyA9ICcnO1xuXG4gIC8qKiBkaXNhYmxlZCBzaG91bGQgYmUgZXhwb3NlZCB0byB0aGUgYXR0cmlidXRlcyBhbmQgYWNjZXNzaWJsZSBhcyBwcm9wZXJ0eSAqL1xuICBAcHJvcGVydHkoeyByZWZsZWN0OiB0cnVlLCB0eXBlOiBCb29sZWFuIH0pIGRpc2FibGVkID0gZmFsc2U7XG5cbiAgLyoqIHJlYWRvbmx5IHNob3VsZCBiZSBleHBvc2VkIHRvIHRoZSBhdHRyaWJ1dGVzIGFuZCBhY2Nlc3NpYmxlIGFzIHByb3BlcnR5ICovXG4gIEBwcm9wZXJ0eSh7IHJlZmxlY3Q6IHRydWUsIHR5cGU6IEJvb2xlYW4gfSkgcmVhZG9ubHkgPSBmYWxzZTtcblxuICBhYnN0cmFjdCB2YWxpZGF0ZSgpOiBib29sZWFuO1xuICBhYnN0cmFjdCBzZXQgcmVzcG9uc2UodmFsOiBSZWFkb25seTxzdHJpbmcgfCBzdHJpbmdbXT4pO1xuICBzZXQgY29ycmVjdFJlc3BvbnNlKHZhbDogUmVhZG9ubHk8c3RyaW5nIHwgc3RyaW5nW10+KSB7XG4gICAgY29uc29sZS53YXJuKCdjb3JyZWN0UmVzcG9uc2UgaXMgbm90IGltcGxlbWVudGVkJyk7XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcblxuICAgIHRoaXMuZGlzcGF0Y2hFdmVudChcbiAgICAgIG5ldyBDdXN0b21FdmVudCgncXRpLXJlZ2lzdGVyLWludGVyYWN0aW9uJywge1xuICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICBjYW5jZWxhYmxlOiBmYWxzZSxcbiAgICAgICAgY29tcG9zZWQ6IHRydWVcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBzYXZlUmVzcG9uc2UodmFsdWU6IHN0cmluZyB8IHN0cmluZ1tdKSB7XG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KFxuICAgICAgbmV3IEN1c3RvbUV2ZW50KCdxdGktaW50ZXJhY3Rpb24tcmVzcG9uc2UnLCB7XG4gICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgIGNhbmNlbGFibGU6IGZhbHNlLFxuICAgICAgICBjb21wb3NlZDogdHJ1ZSxcbiAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgcmVzcG9uc2VJZGVudGlmaWVyOiB0aGlzLnJlc3BvbnNlSWRlbnRpZmllcixcbiAgICAgICAgICByZXNwb25zZTogQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyBbLi4udmFsdWVdIDogdmFsdWVcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgY3NzLCBodG1sIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQsIHByb3BlcnR5LCBzdGF0ZSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IGlmRGVmaW5lZCB9IGZyb20gJ2xpdC9kaXJlY3RpdmVzL2lmLWRlZmluZWQuanMnO1xuaW1wb3J0IHsgY3JlYXRlUmVmIH0gZnJvbSAnbGl0L2RpcmVjdGl2ZXMvcmVmLmpzJztcbmltcG9ydCB7IHdhdGNoIH0gZnJvbSAnLi4vLi4vLi4vZGVjb3JhdG9ycyc7XG5pbXBvcnQgeyBJbnRlcmFjdGlvbiB9IGZyb20gJy4uL2ludGVybmFsL2ludGVyYWN0aW9uL2ludGVyYWN0aW9uJztcblxuQGN1c3RvbUVsZW1lbnQoJ3F0aS10ZXh0LWVudHJ5LWludGVyYWN0aW9uJylcbmV4cG9ydCBjbGFzcyBRdGlUZXh0RW50cnlJbnRlcmFjdGlvbiBleHRlbmRzIEludGVyYWN0aW9uIHtcbiAgQHByb3BlcnR5KHsgdHlwZTogTnVtYmVyLCBhdHRyaWJ1dGU6ICdleHBlY3RlZC1sZW5ndGgnIH0pIGV4cGVjdGVkTGVuZ3RoOiBudW1iZXI7XG5cbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nLCBhdHRyaWJ1dGU6ICdwYXR0ZXJuLW1hc2snIH0pIHBhdHRlcm5NYXNrOiBzdHJpbmc7XG5cbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nLCBhdHRyaWJ1dGU6ICdwbGFjZWhvbGRlci10ZXh0JyB9KSBwbGFjZWhvbGRlclRleHQ6IHN0cmluZztcblxuICBAc3RhdGUoKVxuICBwcml2YXRlIF92YWx1ZSA9ICcnO1xuXG4gIEBzdGF0ZSgpXG4gIHByaXZhdGUgX2NvcnJlY3RWYWx1ZSA9ICcnO1xuXG4gIEBzdGF0ZSgpXG4gIHByaXZhdGUgX3NpemUgPSA1O1xuXG4gIGlucHV0UmVmID0gY3JlYXRlUmVmPEhUTUxJbnB1dEVsZW1lbnQ+KCk7XG5cbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nLCBhdHRyaWJ1dGU6ICdjbGFzcycgfSkgY2xhc3NOYW1lcztcbiAgQHdhdGNoKCdjbGFzc05hbWVzJylcbiAgaGFuZGxlY2xhc3NOYW1lc0NoYW5nZShvbGQsIGNsYXNzZXM6IHN0cmluZykge1xuICAgIGNvbnN0IGNsYXNzTmFtZXMgPSBjbGFzc2VzLnNwbGl0KCcgJyk7XG4gICAgY2xhc3NOYW1lcy5mb3JFYWNoKChjbGFzc05hbWU6IHN0cmluZykgPT4ge1xuICAgICAgaWYgKGNsYXNzTmFtZS5zdGFydHNXaXRoKCdxdGktaW5wdXQtd2lkdGgnKSkge1xuICAgICAgICBjb25zdCBuclJvd3MgPSBjbGFzc05hbWUucmVwbGFjZSgncXRpLWlucHV0LXdpZHRoLScsICcnKTtcbiAgICAgICAgdGhpcy5fc2l6ZSA9IHBhcnNlSW50KG5yUm93cyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgc2V0IHJlc3BvbnNlKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl92YWx1ZSA9IHZhbHVlICE9PSB1bmRlZmluZWQgPyB2YWx1ZSA6ICcnO1xuICB9XG5cbiAgcHVibGljIHZhbGlkYXRlKCkge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZSAhPT0gJyc7XG4gIH1cblxuICBzdGF0aWMgb3ZlcnJpZGUgZ2V0IHN0eWxlcygpIHtcbiAgICByZXR1cm4gW1xuICAgICAgY3NzYFxuICAgICAgICBbcGFydD0nY29ycmVjdCddIHtcbiAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIH1cbiAgICAgIGBcbiAgICBdO1xuICB9XG5cbiAgc2V0IGNvcnJlY3RSZXNwb25zZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fY29ycmVjdFZhbHVlID0gdmFsdWU7XG4gIH1cblxuICBvdmVycmlkZSByZW5kZXIoKSB7XG4gICAgcmV0dXJuIGh0bWxgXG4gICAgICA8aW5wdXRcbiAgICAgICAgcGFydD1cImlucHV0XCJcbiAgICAgICAgc3BlbGxjaGVjaz1cImZhbHNlXCJcbiAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgQGJsdXI9XCIkeyhldmVudDogRm9jdXNFdmVudCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGlucHV0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgICAgICAgaWYgKCFpbnB1dC5jaGVja1ZhbGlkaXR5KCkpIHtcbiAgICAgICAgICAgIGlucHV0LnNldEN1c3RvbVZhbGlkaXR5KHRoaXMuZGF0YXNldC5wYXR0ZXJubWFza01lc3NhZ2UgfHwgJ0ludmFsaWQgaW5wdXQnKTtcbiAgICAgICAgICAgIGlucHV0LnJlcG9ydFZhbGlkaXR5KCk7IC8vIFNob3cgdGhlIHZhbGlkYXRpb24gbWVzc2FnZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpbnB1dC5zZXRDdXN0b21WYWxpZGl0eSgnJyk7IC8vIENsZWFyIHRoZSBjdXN0b20gdmFsaWRpdHkgbWVzc2FnZVxuICAgICAgICAgIH1cbiAgICAgICAgfX1cIlxuICAgICAgICBAa2V5ZG93bj1cIiR7ZXZlbnQgPT4gZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9XCJcbiAgICAgICAgQGtleXVwPVwiJHt0aGlzLnRleHRDaGFuZ2VkfVwiXG4gICAgICAgIEBjaGFuZ2U9XCIke3RoaXMudGV4dENoYW5nZWR9XCJcbiAgICAgICAgdHlwZT1cIiR7dGhpcy5wYXR0ZXJuTWFzayA9PSAnWzAtOV0qJyA/ICdudW1iZXInIDogJ3RleHQnfVwiXG4gICAgICAgIHBsYWNlaG9sZGVyPVwiJHtpZkRlZmluZWQodGhpcy5wbGFjZWhvbGRlclRleHQgPyB0aGlzLnBsYWNlaG9sZGVyVGV4dCA6IHVuZGVmaW5lZCl9XCJcbiAgICAgICAgLnZhbHVlPVwiJHt0aGlzLl92YWx1ZX1cIlxuICAgICAgICBzaXplPVwiJHt0aGlzLl9zaXplfVwiXG4gICAgICAgIHBhdHRlcm49XCIke2lmRGVmaW5lZCh0aGlzLnBhdHRlcm5NYXNrID8gdGhpcy5wYXR0ZXJuTWFzayA6IHVuZGVmaW5lZCl9XCJcbiAgICAgICAgP2Rpc2FibGVkPVwiJHt0aGlzLmRpc2FibGVkfVwiXG4gICAgICAgID9yZWFkb25seT1cIiR7dGhpcy5yZWFkb25seX1cIlxuICAgICAgLz5cbiAgICAgIDxkaXYgcGFydD1cImNvcnJlY3RcIj4ke3RoaXMuX2NvcnJlY3RWYWx1ZX08L2Rpdj5cbiAgICBgO1xuICB9XG4gIC8vXG4gIC8vIG1heGxlbmd0aD1cIiR7aWZEZWZpbmVkKHRoaXMuZXhwZWN0ZWRMZW5ndGggPyB0aGlzLmV4cGVjdGVkTGVuZ3RoIDogdW5kZWZpbmVkKX1cIlxuXG4gIHByb3RlY3RlZCB0ZXh0Q2hhbmdlZChldmVudDogRXZlbnQpIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCB8fCB0aGlzLnJlYWRvbmx5KSByZXR1cm47XG4gICAgY29uc3QgaW5wdXQgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICB0aGlzLnNldEVtcHR5QXR0cmlidXRlKGlucHV0LnZhbHVlKTtcbiAgICBpZiAodGhpcy5fdmFsdWUgIT09IGlucHV0LnZhbHVlKSB7XG4gICAgICB0aGlzLl92YWx1ZSA9IGlucHV0LnZhbHVlO1xuICAgICAgdGhpcy5zYXZlUmVzcG9uc2UoaW5wdXQudmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHJlc2V0KCk6IHZvaWQge1xuICAgIHRoaXMuX3ZhbHVlID0gJyc7XG4gIH1cblxuICBwcml2YXRlIHNldEVtcHR5QXR0cmlidXRlKHRleHQ6IHN0cmluZykge1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKCdlbXB0eScsIHRleHQgPT09ICcnID8gJ3RydWUnIDogJ2ZhbHNlJyk7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLXRleHQtZW50cnktaW50ZXJhY3Rpb24nOiBRdGlUZXh0RW50cnlJbnRlcmFjdGlvbjtcbiAgfVxufVxuIiwgIi8vIEB3YXRjaCBkZWNvcmF0b3Jcbi8vXG4vLyBSdW5zIHdoZW4gYW4gb2JzZXJ2ZWQgcHJvcGVydHkgY2hhbmdlcywgZS5nLiBAcHJvcGVydHkgb3IgQHN0YXRlLCBidXQgYmVmb3JlIHRoZSBjb21wb25lbnQgdXBkYXRlcy5cbi8vXG4vLyBUbyB3YWl0IGZvciBhbiB1cGRhdGUgdG8gY29tcGxldGUgYWZ0ZXIgYSBjaGFuZ2Ugb2NjdXJzLCB1c2UgYGF3YWl0IHRoaXMudXBkYXRlQ29tcGxldGVgIGluIHRoZSBoYW5kbGVyLiBUbyBzdGFydFxuLy8gd2F0Y2hpbmcgYWZ0ZXIgdGhlIGluaXRpYWwgdXBkYXRlL3JlbmRlciwgdXNlIGB7IHdhaXRVbnRpbEZpcnN0VXBkYXRlOiB0cnVlIH1gIG9yIGB0aGlzLmhhc1VwZGF0ZWRgIGluIHRoZSBoYW5kbGVyLlxuLy9cbi8vIFVzYWdlOlxuLy9cbi8vICBAd2F0Y2goJ3Byb3BOYW1lJylcbi8vICBoYW5kbGVQcm9wQ2hhbmdlKG9sZFZhbHVlLCBuZXdWYWx1ZSkge1xuLy8gICAgLi4uXG4vLyAgfVxuXG5pbXBvcnQgdHlwZSB7IExpdEVsZW1lbnQgfSBmcm9tICdsaXQnO1xuXG50eXBlIFVwZGF0ZUhhbmRsZXIgPSAocHJldj86IHVua25vd24sIG5leHQ/OiB1bmtub3duKSA9PiB2b2lkO1xuXG50eXBlIE5vblVuZGVmaW5lZDxBPiA9IEEgZXh0ZW5kcyB1bmRlZmluZWQgPyBuZXZlciA6IEE7XG5cbnR5cGUgVXBkYXRlSGFuZGxlckZ1bmN0aW9uS2V5czxUIGV4dGVuZHMgb2JqZWN0PiA9IHtcbiAgW0sgaW4ga2V5b2YgVF0tPzogTm9uVW5kZWZpbmVkPFRbS10+IGV4dGVuZHMgVXBkYXRlSGFuZGxlciA/IEsgOiBuZXZlcjtcbn1ba2V5b2YgVF07XG5cbmludGVyZmFjZSBMaXZlUXVlcnlPcHRpb25zIHtcbiAgLyoqXG4gICAqIElmIHRydWUsIHdpbGwgb25seSBzdGFydCB3YXRjaGluZyBhZnRlciB0aGUgaW5pdGlhbCB1cGRhdGUvcmVuZGVyXG4gICAqL1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGl2ZVF1ZXJ5KHF1ZXJ5U2VsZWN0b3I6IHN0cmluZywgb3B0aW9ucz86IExpdmVRdWVyeU9wdGlvbnMpIHtcbiAgbGV0IG9ic2VydmVyOiBNdXRhdGlvbk9ic2VydmVyO1xuICBjb25zdCByZXNvbHZlZE9wdGlvbnM6IFJlcXVpcmVkPExpdmVRdWVyeU9wdGlvbnM+ID0ge1xuICAgIC4uLm9wdGlvbnNcbiAgfTtcbiAgcmV0dXJuIDxFbGVtQ2xhc3MgZXh0ZW5kcyBMaXRFbGVtZW50PihcbiAgICBwcm90bzogRWxlbUNsYXNzLFxuICAgIGRlY29yYXRlZEZuTmFtZTogVXBkYXRlSGFuZGxlckZ1bmN0aW9uS2V5czxFbGVtQ2xhc3M+XG4gICk6IHZvaWQgPT4ge1xuICAgIGNvbnN0IHsgY29ubmVjdGVkQ2FsbGJhY2ssIGRpc2Nvbm5lY3RlZENhbGxiYWNrIH0gPSBwcm90bztcblxuICAgIHByb3RvLmNvbm5lY3RlZENhbGxiYWNrID0gZnVuY3Rpb24gKHRoaXM6IEVsZW1DbGFzcykge1xuICAgICAgY29ubmVjdGVkQ2FsbGJhY2suY2FsbCh0aGlzKTtcbiAgICAgIGNvbnN0IGNhbGxiYWNrID0gKG11dGF0aW9uTGlzdDogTXV0YXRpb25SZWNvcmRbXSkgPT4ge1xuICAgICAgICBjb25zdCBlbGVtZW50c1RvV2F0Y2ggPSBBcnJheS5mcm9tKHRoaXMucXVlcnlTZWxlY3RvckFsbChxdWVyeVNlbGVjdG9yKSk7XG4gICAgICAgIGZvciAoY29uc3QgbXV0YXRpb24gb2YgbXV0YXRpb25MaXN0KSB7XG4gICAgICAgICAgY29uc3QgYWRkZWROb2RlcyA9IEFycmF5LmZyb20obXV0YXRpb24uYWRkZWROb2RlcykubWFwKGUgPT4gZSBhcyBFbGVtZW50KTtcbiAgICAgICAgICBjb25zdCByZW1vdmVkTm9kZXMgPSBBcnJheS5mcm9tKG11dGF0aW9uLmFkZGVkTm9kZXMpLm1hcChlID0+IGUgYXMgRWxlbWVudCk7XG4gICAgICAgICAgaWYgKG11dGF0aW9uLnR5cGUgPT09ICdjaGlsZExpc3QnICYmIGFkZGVkTm9kZXMuZmluZChuID0+IGVsZW1lbnRzVG9XYXRjaC5pbmNsdWRlcyhuKSkpIHtcbiAgICAgICAgICAgICh0aGlzW2RlY29yYXRlZEZuTmFtZV0gYXMgdW5rbm93biBhcyBVcGRhdGVIYW5kbGVyKShhZGRlZE5vZGVzLCByZW1vdmVkTm9kZXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoY2FsbGJhY2spO1xuICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLCB7IGNoaWxkTGlzdDogdHJ1ZSwgc3VidHJlZTogdHJ1ZSB9KTtcblxuICAgICAgY29uc3QgZWxlbWVudHNBZGRlZCA9IHRoaXMucXVlcnlTZWxlY3RvckFsbChxdWVyeVNlbGVjdG9yKSA/PyBbXTtcbiAgICAgICh0aGlzW2RlY29yYXRlZEZuTmFtZV0gYXMgdW5rbm93biBhcyBVcGRhdGVIYW5kbGVyKShBcnJheS5mcm9tKGVsZW1lbnRzQWRkZWQpLCBbXSk7XG4gICAgfTtcblxuICAgIHByb3RvLmRpc2Nvbm5lY3RlZENhbGxiYWNrID0gZnVuY3Rpb24gKHRoaXM6IEVsZW1DbGFzcykge1xuICAgICAgZGlzY29ubmVjdGVkQ2FsbGJhY2suY2FsbCh0aGlzKTtcbiAgICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICB9O1xuICB9O1xufVxuIiwgImltcG9ydCB7IGh0bWwsIExpdEVsZW1lbnQgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IENob2ljZXNNaXhpbiB9IGZyb20gJy4uL2ludGVybmFsL2Nob2ljZXMvY2hvaWNlcyc7XG5cbkBjdXN0b21FbGVtZW50KCdxdGktaG90dGV4dC1pbnRlcmFjdGlvbicpXG5leHBvcnQgY2xhc3MgUXRpSG90dGV4dEludGVyYWN0aW9uIGV4dGVuZHMgQ2hvaWNlc01peGluKExpdEVsZW1lbnQsICdxdGktaG90dGV4dCcpIHtcbiAgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZSgncXRpLWhvdHRleHQtaW50ZXJhY3Rpb24nLCAnJyk7XG4gIH1cblxuICBvdmVycmlkZSByZW5kZXIgPSAoKSA9PiBodG1sYDxzbG90Pjwvc2xvdD5gO1xufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktaG90dGV4dC1pbnRlcmFjdGlvbic6IFF0aUhvdHRleHRJbnRlcmFjdGlvbjtcbiAgfVxufVxuIiwgImltcG9ydCB7IExpdEVsZW1lbnQgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgcHJvcGVydHkgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyB3YXRjaCB9IGZyb20gJy4uLy4uLy4uLy4uL2RlY29yYXRvcnMvd2F0Y2gnO1xuaW1wb3J0IHsgUXRpQ2hvaWNlIH0gZnJvbSAnLi4vY2hvaWNlL3F0aS1jaG9pY2UnO1xuXG50eXBlIENvbnN0cnVjdG9yPFQgPSB7fT4gPSBuZXcgKC4uLmFyZ3M6IGFueVtdKSA9PiBUO1xuXG5leHBvcnQgaW50ZXJmYWNlIENob2ljZXNJbnRlcmZhY2Uge1xuICB2YWxpZGF0ZSgpOiBib29sZWFuO1xuICBfY2hvaWNlRWxlbWVudHM6IEhUTUxFbGVtZW50W107XG4gIGNvcnJlY3RSZXNwb25zZTogc3RyaW5nIHwgc3RyaW5nW107XG59XG5cbmV4cG9ydCBjb25zdCBDaG9pY2VzTWl4aW4gPSA8VCBleHRlbmRzIENvbnN0cnVjdG9yPExpdEVsZW1lbnQ+PihzdXBlckNsYXNzOiBULCBzZWxlY3Rvcjogc3RyaW5nKSA9PiB7XG4gIGNsYXNzIENob2ljZXNNaXhpbkVsZW1lbnQgZXh0ZW5kcyBzdXBlckNsYXNzIGltcGxlbWVudHMgQ2hvaWNlc0ludGVyZmFjZSB7XG4gICAgcHVibGljIF9jaG9pY2VFbGVtZW50czogUXRpQ2hvaWNlW10gPSBbXTtcblxuICAgIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ3Jlc3BvbnNlLWlkZW50aWZpZXInIH0pIHJlc3BvbnNlSWRlbnRpZmllcjogc3RyaW5nID0gJyc7XG5cbiAgICBAcHJvcGVydHkoe1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgYXR0cmlidXRlOiAnbWluLWNob2ljZXMnXG4gICAgfSlcbiAgICBwdWJsaWMgbWluQ2hvaWNlczogbnVtYmVyID0gMDtcblxuICAgIC8qKiB0aGUgbWF4aW11bSBudW1iZXIgb2Ygc2VsZWN0aW9ucyBhIGNhbmRpZGF0ZSBtdXN0IG1ha2UsIHRoZSBvdGhlciBvcHRpb25zIHdpbGwgYmUgZGlzYWJsZWQgd2hlbiBtYXggb3B0aW9ucyBpcyBjaGVja2VkICovXG4gICAgQHByb3BlcnR5KHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIGF0dHJpYnV0ZTogJ21heC1jaG9pY2VzJ1xuICAgIH0pXG4gICAgcHVibGljIG1heENob2ljZXM6IG51bWJlciA9IDE7XG5cbiAgICBAd2F0Y2goJ2Rpc2FibGVkJywgeyB3YWl0VW50aWxGaXJzdFVwZGF0ZTogdHJ1ZSB9KVxuICAgIF9oYW5kbGVEaXNhYmxlZENoYW5nZSA9IChfOiBib29sZWFuLCBkaXNhYmxlZDogYm9vbGVhbikgPT5cbiAgICAgIHRoaXMuX2Nob2ljZUVsZW1lbnRzLmZvckVhY2goY2ggPT4gKGNoLmRpc2FibGVkID0gZGlzYWJsZWQpKTtcblxuICAgIEB3YXRjaCgncmVhZG9ubHknLCB7IHdhaXRVbnRpbEZpcnN0VXBkYXRlOiB0cnVlIH0pXG4gICAgX2hhbmRsZVJlYWRvbmx5Q2hhbmdlID0gKF86IGJvb2xlYW4sIHJlYWRvbmx5OiBib29sZWFuKSA9PlxuICAgICAgdGhpcy5fY2hvaWNlRWxlbWVudHMuZm9yRWFjaChjaCA9PiAoY2gucmVhZG9ubHkgPSByZWFkb25seSkpO1xuXG4gICAgQHdhdGNoKCdtYXhDaG9pY2VzJywgeyB3YWl0VW50aWxGaXJzdFVwZGF0ZTogdHJ1ZSB9KVxuICAgIF9oYW5kbGVNYXhDaG9pY2VzQ2hhbmdlID0gKCkgPT4gdGhpcy5fZGV0ZXJtaW5lSW5wdXRUeXBlKCk7XG5cbiAgICBjb25zdHJ1Y3RvciguLi5hcmdzOiBhbnlbXSkge1xuICAgICAgc3VwZXIoLi4uYXJncyk7XG5cbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigncXRpLXJlZ2lzdGVyLWNob2ljZScsIHRoaXMuX3JlZ2lzdGVyQ2hvaWNlRWxlbWVudCk7XG4gICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3F0aS1sb29zZS1jaG9pY2UnLCB0aGlzLl9sb29zZUNob2ljZUVsZW1lbnQpO1xuICAgIH1cblxuICAgIHZhbGlkYXRlKCk6IGJvb2xlYW4ge1xuICAgICAgY29uc3QgbnJTZWxlY3RlZCA9IHRoaXMuX2Nob2ljZUVsZW1lbnRzLnJlZHVjZSgoYWNjLCB2YWwpID0+IHtcbiAgICAgICAgcmV0dXJuIGFjYyArICh2YWwuY2hlY2tlZCA/IDEgOiAwKTtcbiAgICAgIH0sIDApO1xuICAgICAgcmV0dXJuIG5yU2VsZWN0ZWQgPj0gdGhpcy5taW5DaG9pY2VzO1xuICAgIH1cblxuICAgIHNldCByZXNwb25zZShyZXNwb25zZVZhbHVlOiBzdHJpbmcgfCBzdHJpbmdbXSkge1xuICAgICAgY29uc3QgcmVzcG9uc2VWYWx1ZUFycmF5ID0gQXJyYXkuaXNBcnJheShyZXNwb25zZVZhbHVlKSA/IHJlc3BvbnNlVmFsdWUgOiBbcmVzcG9uc2VWYWx1ZV07XG4gICAgICB0aGlzLl9jaG9pY2VFbGVtZW50cy5mb3JFYWNoKGNlID0+IHtcbiAgICAgICAgY2UuY2hlY2tlZCA9IHJlc3BvbnNlVmFsdWVBcnJheS5maW5kKHJ2ID0+IHJ2ID09PSBjZS5pZGVudGlmaWVyKSA/IHRydWUgOiBmYWxzZTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHNldCBjb3JyZWN0UmVzcG9uc2UocmVzcG9uc2VWYWx1ZTogc3RyaW5nIHwgc3RyaW5nW10pIHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlVmFsdWVBcnJheSA9IEFycmF5LmlzQXJyYXkocmVzcG9uc2VWYWx1ZSkgPyByZXNwb25zZVZhbHVlIDogW3Jlc3BvbnNlVmFsdWVdO1xuICAgICAgaWYgKHJlc3BvbnNlVmFsdWUgPT0gJycpIHtcbiAgICAgICAgdGhpcy5fY2hvaWNlRWxlbWVudHMuZm9yRWFjaChjZSA9PiB7XG4gICAgICAgICAgY2UucmVtb3ZlQXR0cmlidXRlKCdkYXRhLWNvcnJlY3QtcmVzcG9uc2UnKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2Nob2ljZUVsZW1lbnRzLmZvckVhY2goY2UgPT4ge1xuICAgICAgICBjZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgJ2RhdGEtY29ycmVjdC1yZXNwb25zZScsXG4gICAgICAgICAgcmVzcG9uc2VWYWx1ZUFycmF5LmZpbmQocnYgPT4gcnYgPT09IGNlLmlkZW50aWZpZXIpID8gJ3RydWUnIDogJ2ZhbHNlJ1xuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdxdGktcmVnaXN0ZXItY2hvaWNlJywgdGhpcy5fcmVnaXN0ZXJDaG9pY2VFbGVtZW50KTtcbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigncXRpLWNob2ljZS1lbGVtZW50LXNlbGVjdGVkJywgdGhpcy5fY2hvaWNlRWxlbWVudFNlbGVjdGVkSGFuZGxlcik7XG4gICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoXG4gICAgICAgIG5ldyBDdXN0b21FdmVudCgncXRpLXJlZ2lzdGVyLWludGVyYWN0aW9uJywge1xuICAgICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgICAgY2FuY2VsYWJsZTogZmFsc2UsXG4gICAgICAgICAgY29tcG9zZWQ6IHRydWVcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgb3ZlcnJpZGUgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgICBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdxdGktY2hvaWNlLWVsZW1lbnQtc2VsZWN0ZWQnLCB0aGlzLl9jaG9pY2VFbGVtZW50U2VsZWN0ZWRIYW5kbGVyKTtcbiAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcigncXRpLXJlZ2lzdGVyLWNob2ljZScsIHRoaXMuX3JlZ2lzdGVyQ2hvaWNlRWxlbWVudCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcmVnaXN0ZXJDaG9pY2VFbGVtZW50KGU6IEN1c3RvbUV2ZW50KSB7XG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgY29uc3QgY2hvaWNlRWxlbWVudCA9IGUudGFyZ2V0IGFzIFF0aUNob2ljZTtcbiAgICAgIHRoaXMuX2Nob2ljZUVsZW1lbnRzLnB1c2goY2hvaWNlRWxlbWVudCk7XG4gICAgICB0aGlzLl9zZXRJbnB1dFR5cGUoY2hvaWNlRWxlbWVudCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfbG9vc2VDaG9pY2VFbGVtZW50KGU6IEN1c3RvbUV2ZW50KSB7XG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgY29uc3QgY2hvaWNlRWxlbWVudCA9IGUudGFyZ2V0IGFzIFF0aUNob2ljZTtcbiAgICAgIHRoaXMuX2Nob2ljZUVsZW1lbnRzLnB1c2goY2hvaWNlRWxlbWVudCk7XG4gICAgICB0aGlzLl9jaG9pY2VFbGVtZW50cyA9IHRoaXMuX2Nob2ljZUVsZW1lbnRzLmZpbHRlcihjaCA9PiBjaCAhPT0gY2hvaWNlRWxlbWVudCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZGV0ZXJtaW5lSW5wdXRUeXBlKCkge1xuICAgICAgdGhpcy5fY2hvaWNlRWxlbWVudHMuZm9yRWFjaChjaG9pY2VFbGVtZW50ID0+IHtcbiAgICAgICAgdGhpcy5fc2V0SW5wdXRUeXBlKGNob2ljZUVsZW1lbnQpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfc2V0SW5wdXRUeXBlKGNob2ljZUVsZW1lbnQ6IFF0aUNob2ljZSkge1xuICAgICAgaWYgKHRoaXMubWF4Q2hvaWNlcyA9PT0gMSkge1xuICAgICAgICAvLyBpZiB6ZXJvIHRoZW4geW91IGNhbiBjaG9vc2UgaG93IG11Y2ggeW91IHdhbnRcbiAgICAgICAgY2hvaWNlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3JvbGUnLCAncmFkaW8nKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNob2ljZUVsZW1lbnQuc2V0QXR0cmlidXRlKCdyb2xlJywgJ2NoZWNrYm94Jyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIF9jaG9pY2VFbGVtZW50U2VsZWN0ZWRIYW5kbGVyKGV2ZW50OiBDdXN0b21FdmVudDx7IGlkZW50aWZpZXI6IHN0cmluZzsgY2hlY2tlZDogYm9vbGVhbiB9Pikge1xuICAgICAgaWYgKHRoaXMubWF4Q2hvaWNlcyA9PT0gMSkge1xuICAgICAgICB0aGlzLl9jaG9pY2VFbGVtZW50c1xuICAgICAgICAgIC5maWx0ZXIoY2UgPT4gY2UuaWRlbnRpZmllciAhPT0gZXZlbnQuZGV0YWlsLmlkZW50aWZpZXIpXG4gICAgICAgICAgLmZvckVhY2goY2UgPT4ge1xuICAgICAgICAgICAgY2UuY2hlY2tlZCA9IGZhbHNlO1xuICAgICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgdGhpcy5fY2hvaWNlRWxlbWVudFNlbGVjdGVkKCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIF9jaG9pY2VFbGVtZW50U2VsZWN0ZWQoKSB7XG4gICAgICBjb25zdCBzZWxlY3RlZElkZW50aWZpZXJzID0gdGhpcy5fY2hvaWNlRWxlbWVudHMuZmlsdGVyKGNlID0+IGNlLmNoZWNrZWQpLm1hcChjZSA9PiBjZS5pZGVudGlmaWVyKTtcblxuICAgICAgaWYgKHRoaXMubWF4Q2hvaWNlcyA+IDEpIHtcbiAgICAgICAgaWYgKHRoaXMubWF4Q2hvaWNlcyA9PT0gc2VsZWN0ZWRJZGVudGlmaWVycy5sZW5ndGgpIHtcbiAgICAgICAgICB0aGlzLl9jaG9pY2VFbGVtZW50cy5mb3JFYWNoKGNlID0+IChjZS5kaXNhYmxlZCA9ICFjZS5jaGVja2VkKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5fY2hvaWNlRWxlbWVudHMuZm9yRWFjaChjZSA9PiAoY2UuZGlzYWJsZWQgPSBmYWxzZSkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGxldCByZXN1bHQ6IHN0cmluZyB8IHN0cmluZ1tdO1xuICAgICAgaWYgKHRoaXMubWF4Q2hvaWNlcyA9PT0gMSkge1xuICAgICAgICByZXN1bHQgPSBzZWxlY3RlZElkZW50aWZpZXJzLmxlbmd0aCA+IDAgPyBzZWxlY3RlZElkZW50aWZpZXJzWzBdIDogdW5kZWZpbmVkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0ID0gc2VsZWN0ZWRJZGVudGlmaWVycztcbiAgICAgIH1cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWFyZ3VtZW50XG4gICAgICB0aGlzLnNhdmVSZXNwb25zZShyZXN1bHQpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBzYXZlUmVzcG9uc2UocmVzcG9uc2UpIHtcbiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgbmV3IEN1c3RvbUV2ZW50KCdxdGktaW50ZXJhY3Rpb24tcmVzcG9uc2UnLCB7XG4gICAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgICBjb21wb3NlZDogdHJ1ZSxcbiAgICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICAgIHJlc3BvbnNlSWRlbnRpZmllcjogdGhpcy5yZXNwb25zZUlkZW50aWZpZXIsXG4gICAgICAgICAgICByZXNwb25zZVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIHJldHVybiBDaG9pY2VzTWl4aW5FbGVtZW50IGFzIENvbnN0cnVjdG9yPENob2ljZXNJbnRlcmZhY2U+ICYgVDtcbn07XG4iLCAiaW1wb3J0IHsgY3NzLCBodG1sIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQsIHByb3BlcnR5LCBzdGF0ZSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IHVuc2FmZUhUTUwgfSBmcm9tICdsaXQvZGlyZWN0aXZlcy91bnNhZmUtaHRtbC5qcyc7XG5pbXBvcnQgeyBJbnRlcmFjdGlvbiB9IGZyb20gJy4uL2ludGVybmFsL2ludGVyYWN0aW9uL2ludGVyYWN0aW9uJztcblxuaW50ZXJmYWNlIE9wdGlvblR5cGUge1xuICB0ZXh0Q29udGVudDogc3RyaW5nO1xuICB2YWx1ZTogc3RyaW5nO1xuICBzZWxlY3RlZDogYm9vbGVhbjtcbn1cblxuQGN1c3RvbUVsZW1lbnQoJ3F0aS1pbmxpbmUtY2hvaWNlLWludGVyYWN0aW9uJylcbmV4cG9ydCBjbGFzcyBRdGlJbmxpbmVDaG9pY2VJbnRlcmFjdGlvbiBleHRlbmRzIEludGVyYWN0aW9uIHtcbiAgc3RhdGljIG92ZXJyaWRlIGdldCBzdHlsZXMoKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIGNzc2BcbiAgICAgICAgOmhvc3Qge1xuICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgfVxuICAgICAgICBzbG90IHtcbiAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIH1cbiAgICAgICAgW3JvbGU9J21lbnUnXSB7XG4gICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgIHotaW5kZXg6IDEwMDA7XG4gICAgICAgIH1cbiAgICAgICAgLmFuY2hvciB7XG4gICAgICAgICAgLyogYW5jaG9yLW5hbWU6IC0taW5mb2JveDsgKi9cbiAgICAgICAgICB3aWR0aDogZml0LWNvbnRlbnQ7XG4gICAgICAgIH1cblxuICAgICAgICAucG9zaXRpb25lZEVsZW1lbnQge1xuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAvKiBwb3NpdGlvbi1hbmNob3I6IC0taW5mb2JveDsgKi9cbiAgICAgICAgICAvKiB0b3A6IGFuY2hvcihib3R0b20pOyAqL1xuICAgICAgICB9XG4gICAgICBgXG4gICAgXTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgaW5wdXRXaWR0aENsYXNzID0gW1xuICAgICcnLFxuICAgICdxdGktaW5wdXQtd2lkdGgtMicsXG4gICAgJ3F0aS1pbnB1dC13aWR0aC0xJyxcbiAgICAncXRpLWlucHV0LXdpZHRoLTMnLFxuICAgICdxdGktaW5wdXQtd2lkdGgtNCcsXG4gICAgJ3F0aS1pbnB1dC13aWR0aC02JyxcbiAgICAncXRpLWlucHV0LXdpZHRoLTEwJyxcbiAgICAncXRpLWlucHV0LXdpZHRoLTE1JyxcbiAgICAncXRpLWlucHV0LXdpZHRoLTIwJyxcbiAgICAncXRpLWlucHV0LXdpZHRoLTcyJ1xuICBdO1xuXG4gIEBzdGF0ZSgpIG9wdGlvbnM6IE9wdGlvblR5cGVbXSA9IFtdO1xuXG4gIEBzdGF0ZSgpIGNvcnJlY3RPcHRpb246IHN0cmluZyA9ICcnO1xuXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ2RhdGEtcHJvbXB0JywgdHlwZTogU3RyaW5nIH0pXG4gIGRhdGFQcm9tcHQ6IHN0cmluZyA9ICdzZWxlY3QnO1xuXG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICByZXR1cm4gaHRtbGBcbiAgICAgIDxzZWxlY3QgcGFydD1cInNlbGVjdFwiIEBjaGFuZ2U9XCIke3RoaXMuY2hvaWNlU2VsZWN0ZWR9XCIgP2Rpc2FibGVkPVwiJHt0aGlzLmRpc2FibGVkfVwiID9yZWFkb25seT1cIiR7dGhpcy5yZWFkb25seX1cIj5cbiAgICAgICAgJHt0aGlzLm9wdGlvbnMubWFwKFxuICAgICAgICAgIG9wdGlvbiA9PiBodG1sYFxuICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIiR7b3B0aW9uLnZhbHVlfVwiID9zZWxlY3RlZD1cIiR7b3B0aW9uLnNlbGVjdGVkfVwiPiR7dW5zYWZlSFRNTChvcHRpb24udGV4dENvbnRlbnQpfTwvb3B0aW9uPlxuICAgICAgICAgIGBcbiAgICAgICAgKX1cbiAgICAgIDwvc2VsZWN0PlxuXG4gICAgICAke3Vuc2FmZUhUTUwodGhpcy5jb3JyZWN0T3B0aW9uKX1cbiAgICBgO1xuICB9XG5cbiAgLypcbiAgICA8ZGV0YWlscyBjbGFzcz1cImFuY2hvclwiPlxuICAgICAgPHN1bW1hcnk+JHt0aGlzLmRhdGFQcm9tcHR9PC9zdW1tYXJ5PlxuXG4gICAgICA8ZGl2IHJvbGU9XCJtZW51XCIgcGFydD1cIm1lbnVcIiBjbGFzcz1cInBvc2l0aW9uZWRFbGVtZW50XCI+XG4gICAgICAgIDxzbG90Pjwvc2xvdD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGV0YWlscz5cbiAgICAqL1xuXG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdvbi1kcm9wZG93bi1zZWxlY3RlZCcsIHRoaXMuY2hvaWNlU2VsZWN0ZWQpO1xuICAgIGNvbnN0IGNob2ljZXMgPSBBcnJheS5mcm9tKHRoaXMucXVlcnlTZWxlY3RvckFsbCgncXRpLWlubGluZS1jaG9pY2UnKSk7XG4gICAgdGhpcy5vcHRpb25zID0gW1xuICAgICAge1xuICAgICAgICB0ZXh0Q29udGVudDogdGhpcy5kYXRhUHJvbXB0LFxuICAgICAgICB2YWx1ZTogJycsXG4gICAgICAgIHNlbGVjdGVkOiBmYWxzZVxuICAgICAgfSxcbiAgICAgIC4uLmNob2ljZXMubWFwKGNob2ljZSA9PiAoe1xuICAgICAgICB0ZXh0Q29udGVudDogY2hvaWNlLmlubmVySFRNTCxcbiAgICAgICAgdmFsdWU6IGNob2ljZS5nZXRBdHRyaWJ1dGUoJ2lkZW50aWZpZXInKSxcbiAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlXG4gICAgICB9KSlcbiAgICBdO1xuICB9XG5cbiAgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdvbi1kcm9wZG93bi1zZWxlY3RlZCcsIHRoaXMuY2hvaWNlU2VsZWN0ZWQpO1xuICB9XG5cbiAgcHVibGljIHZhbGlkYXRlKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHNlbGVjdGVkT3B0aW9uID0gdGhpcy5vcHRpb25zLmZpbmQob3B0aW9uID0+IG9wdGlvbi5zZWxlY3RlZCk7XG4gICAgcmV0dXJuIHNlbGVjdGVkT3B0aW9uID8gc2VsZWN0ZWRPcHRpb24udmFsdWUgIT09ICcnIDogZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgcmVzZXQoKSB7XG4gICAgdGhpcy5vcHRpb25zID0gdGhpcy5vcHRpb25zLm1hcCgob3B0aW9uLCBpKSA9PiAoeyAuLi5vcHRpb24sIHNlbGVjdGVkOiBpID09PSAwIH0pKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgcmVzcG9uc2UodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMub3B0aW9ucyA9IHRoaXMub3B0aW9ucy5tYXAob3B0aW9uID0+IHtcbiAgICAgIHZhbHVlID09PSBvcHRpb24udmFsdWUgJiYgKG9wdGlvbi5zZWxlY3RlZCA9IHRydWUpO1xuICAgICAgcmV0dXJuIG9wdGlvbjtcbiAgICB9KTtcbiAgfVxuXG4gIHNldCBjb3JyZWN0UmVzcG9uc2UodmFsdWU6IFJlYWRvbmx5PHN0cmluZyB8IHN0cmluZ1tdPikge1xuICAgIGlmICh2YWx1ZSA9PT0gJycpIHtcbiAgICAgIHRoaXMuY29ycmVjdE9wdGlvbiA9ICcnO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmNvcnJlY3RPcHRpb24gPSBgPHNwYW4gcGFydD1cImNvcnJlY3Qtb3B0aW9uXCI+JHtcbiAgICAgIHRoaXMub3B0aW9ucy5maW5kKG9wdGlvbiA9PiB2YWx1ZSA9PT0gb3B0aW9uLnZhbHVlKS50ZXh0Q29udGVudFxuICAgIH08L3NwYW4+YDtcbiAgfVxuXG4gIHB1YmxpYyBjaG9pY2VTZWxlY3RlZChldmVudDogRXZlbnQpIHtcbiAgICBjb25zdCBzZWxlY3RlZE9wdGlvblZhbHVlID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MU2VsZWN0RWxlbWVudCkudmFsdWU7XG4gICAgdGhpcy5vcHRpb25zID0gdGhpcy5vcHRpb25zLm1hcChvcHRpb24gPT4gKHsgLi4ub3B0aW9uLCBzZWxlY3RlZDogb3B0aW9uLnZhbHVlID09PSBzZWxlY3RlZE9wdGlvblZhbHVlIH0pKTtcbiAgICB0aGlzLnNhdmVSZXNwb25zZShzZWxlY3RlZE9wdGlvblZhbHVlKTtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktaW5saW5lLWNob2ljZS1pbnRlcmFjdGlvbic6IFF0aUlubGluZUNob2ljZUludGVyYWN0aW9uO1xuICB9XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBDU1NSZXN1bHRHcm91cCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBodG1sLCBMaXRFbGVtZW50IH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQsIHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgQ2hvaWNlc0ludGVyZmFjZSwgQ2hvaWNlc01peGluIH0gZnJvbSAnLi4vaW50ZXJuYWwvY2hvaWNlcy9jaG9pY2VzJztcbmltcG9ydCB7IFNodWZmbGVNaXhpbiB9IGZyb20gJy4uL2ludGVybmFsL3NodWZmbGUvc2h1ZmZsZS1taXhpbic7XG5pbXBvcnQgeyBWb2NhYnVsYXJ5TWl4aW4gfSBmcm9tICcuLi9pbnRlcm5hbC92b2NhYnVsYXJ5L3ZvY2FidWxhcnktbWl4aW4nO1xuaW1wb3J0IHN0eWxlcyBmcm9tICcuL3F0aS1jaG9pY2UtaW50ZXJhY3Rpb24uc3R5bGVzJztcblxuQGN1c3RvbUVsZW1lbnQoJ3F0aS1jaG9pY2UtaW50ZXJhY3Rpb24nKVxuZXhwb3J0IGNsYXNzIFF0aUNob2ljZUludGVyYWN0aW9uXG4gIGV4dGVuZHMgVm9jYWJ1bGFyeU1peGluKFxuICAgIFNodWZmbGVNaXhpbihDaG9pY2VzTWl4aW4oTGl0RWxlbWVudCwgJ3F0aS1zaW1wbGUtY2hvaWNlJyksICdxdGktc2ltcGxlLWNob2ljZScpLFxuICAgICdxdGktc2ltcGxlLWNob2ljZSdcbiAgKVxuICBpbXBsZW1lbnRzIENob2ljZXNJbnRlcmZhY2VcbntcbiAgc3RhdGljIHN0eWxlczogQ1NTUmVzdWx0R3JvdXAgPSBzdHlsZXM7XG5cbiAgLyoqIG9yaWVudGF0aW9uIG9mIGNob2ljZXMgKi9cbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nIH0pXG4gIHB1YmxpYyBvcmllbnRhdGlvbjogJ2hvcml6b250YWwnIHwgJ3ZlcnRpY2FsJztcblxuICByZW5kZXIoKSB7XG4gICAgcmV0dXJuIGh0bWxgIDxzbG90IG5hbWU9XCJwcm9tcHRcIj48L3Nsb3Q+PHNsb3QgcGFydD1cInNsb3RcIj48L3Nsb3Q+YDtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktY2hvaWNlLWludGVyYWN0aW9uJzogUXRpQ2hvaWNlSW50ZXJhY3Rpb247XG4gIH1cbn1cbiIsICIvKipcbiAqIE1peGluIHRoYXQgcHJvdmlkZXMgc2h1ZmZsaW5nIGZ1bmN0aW9uYWxpdHkgZm9yIGEgTGl0RWxlbWVudC5cbiAqIEB0ZW1wbGF0ZSBUIC0gVGhlIHR5cGUgb2YgdGhlIExpdEVsZW1lbnQgc3ViY2xhc3MuXG4gKiBAcGFyYW0ge1R9IHN1cGVyQ2xhc3MgLSBUaGUgc3VwZXJjbGFzcyB0byBleHRlbmQuXG4gKiBAcGFyYW0ge3N0cmluZ30gc2VsZWN0b3IgLSBUaGUgQ1NTIHNlbGVjdG9yIGZvciB0aGUgZWxlbWVudHMgdG8gc2h1ZmZsZS5cbiAqIEByZXR1cm5zIHtDb25zdHJ1Y3RvcjxTaHVmZmxlSW50ZXJmYWNlPiAmIFR9IC0gVGhlIGV4dGVuZGVkIGNsYXNzIHdpdGggc2h1ZmZsaW5nIGZ1bmN0aW9uYWxpdHkuXG4gKlxuICogYWRkcyBhIHNodWZmbGUgcHJvcGVydHkgdG8gdGhlIGNsYXNzIHdpdGggYW4gYXR0cmlidXRlIGNvbnZlcnRlclxuICpcbiAqIHF0aS1pbmxpbmUtY2hvaWNlLWludGVyYWN0aW9uXG4gKiBxdGktY2hvaWNlLWludGVyYWN0aW9uXG4gKiBxdGktbWF0Y2gtaW50ZXJhY3Rpb25cbiAqL1xuaW1wb3J0IHsgTGl0RWxlbWVudCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBwcm9wZXJ0eSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcblxudHlwZSBDb25zdHJ1Y3RvcjxUID0ge30+ID0gbmV3ICguLi5hcmdzOiBhbnlbXSkgPT4gVDtcblxuZGVjbGFyZSBjbGFzcyBTaHVmZmxlSW50ZXJmYWNlIHt9XG5leHBvcnQgY29uc3QgU2h1ZmZsZU1peGluID0gPFQgZXh0ZW5kcyBDb25zdHJ1Y3RvcjxMaXRFbGVtZW50Pj4oc3VwZXJDbGFzczogVCwgc2VsZWN0b3I6IHN0cmluZykgPT4ge1xuICBjbGFzcyBTaHVmZmxlRWxlbWVudCBleHRlbmRzIHN1cGVyQ2xhc3Mge1xuICAgIHByaXZhdGUgX3NodWZmbGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8vIERlZmluZSB0aGUgcHJvcGVydHkgd2l0aCB0aGUgY3VzdG9tIGNvbnZlcnRlclxuICAgIEBwcm9wZXJ0eSh7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICByZWZsZWN0OiB0cnVlLFxuICAgICAgY29udmVydGVyOiBzdHJpbmdUb0Jvb2xlYW5Db252ZXJ0ZXJcbiAgICB9KVxuICAgIHNldCBzaHVmZmxlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICBjb25zdCBvbGRWYWx1ZSA9IHRoaXMuX3NodWZmbGU7XG4gICAgICB0aGlzLl9zaHVmZmxlID0gdmFsdWU7XG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgdGhpcy5fc2h1ZmZsZUNob2ljZXMoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX3Jlc2V0U2h1ZmZsZUNob2ljZXMoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMucmVxdWVzdFVwZGF0ZSgnc2h1ZmZsZScsIG9sZFZhbHVlKTtcbiAgICB9XG5cbiAgICBnZXQgc2h1ZmZsZSgpOiBib29sZWFuIHtcbiAgICAgIHJldHVybiB0aGlzLl9zaHVmZmxlO1xuICAgIH1cblxuICAgIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICAgIC8vIENhbGwgX3Jlc2V0U2h1ZmZsZUNob2ljZXMgaW5pdGlhbGx5IHRvIHNldCB0aGUgQ1NTIG9yZGVyIHRvIGluaXRpYWwuXG4gICAgICAvLyBJZiBzaHVmZmxlIGlzIHRydWUsIF9zaHVmZmxlQ2hvaWNlcyB3aWxsIGJlIGNhbGxlZCBhdXRvbWF0aWNhbGx5IHZpYSB0aGUgc2V0dGVyLlxuICAgICAgaWYgKHRoaXMuc2h1ZmZsZSkge1xuICAgICAgICB0aGlzLl9zaHVmZmxlQ2hvaWNlcygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fcmVzZXRTaHVmZmxlQ2hvaWNlcygpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX3NodWZmbGVDaG9pY2VzKCkge1xuICAgICAgY29uc3QgY2hvaWNlcyA9IEFycmF5LmZyb20odGhpcy5xdWVyeVNlbGVjdG9yQWxsPEhUTUxFbGVtZW50PihzZWxlY3RvcikpO1xuXG4gICAgICBjb25zdCBmaXhlZEVsZW1lbnRzOiBBcnJheTx7IGVsZW1lbnQ6IEhUTUxFbGVtZW50OyBpbmRleDogbnVtYmVyIH0+ID0gW107XG4gICAgICBjb25zdCBub25GaXhlZEVsZW1lbnRzOiBBcnJheTxIVE1MRWxlbWVudD4gPSBbXTtcblxuICAgICAgLy8gU2VwYXJhdGUgZml4ZWQgYW5kIG5vbi1maXhlZCBlbGVtZW50c1xuICAgICAgY2hvaWNlcy5mb3JFYWNoKChjaG9pY2UsIGluZGV4KSA9PiB7XG4gICAgICAgIGlmIChjaG9pY2UuaGFzQXR0cmlidXRlKCdmaXhlZCcpKSB7XG4gICAgICAgICAgZml4ZWRFbGVtZW50cy5wdXNoKHsgZWxlbWVudDogY2hvaWNlLCBpbmRleDogaW5kZXggfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbm9uRml4ZWRFbGVtZW50cy5wdXNoKGNob2ljZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICAvLyBJZiB0aGVyZSBhcmUgMSBvciBmZXdlciBub24tZml4ZWQgZWxlbWVudHMsIHRocm93IGFuIGVycm9yIChubyBzaHVmZmxlIHBvc3NpYmxlKVxuICAgICAgaWYgKG5vbkZpeGVkRWxlbWVudHMubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTaHVmZmxpbmcgaXMgbm90IHBvc3NpYmxlIHdpdGggZmV3ZXIgdGhhbiAyIG5vbi1maXhlZCBlbGVtZW50cy4nKTtcbiAgICAgIH1cblxuICAgICAgbGV0IGlzU2h1ZmZsZWQgPSBmYWxzZTtcbiAgICAgIGNvbnN0IG1heEF0dGVtcHRzID0gMTA7IC8vIE1heCBhdHRlbXB0cyB0byBwcmV2ZW50IGluZmluaXRlIGxvb3BzXG4gICAgICBsZXQgYXR0ZW1wdCA9IDA7XG5cbiAgICAgIC8vIFNodWZmbGUgdW50aWwgdGhlIHJlc3VsdCBpcyBkaWZmZXJlbnQgb3IgbWF4QXR0ZW1wdHMgaXMgcmVhY2hlZFxuICAgICAgd2hpbGUgKCFpc1NodWZmbGVkICYmIGF0dGVtcHQgPCBtYXhBdHRlbXB0cykge1xuICAgICAgICBhdHRlbXB0Kys7XG5cbiAgICAgICAgLy8gU2h1ZmZsZSBub24tZml4ZWQgZWxlbWVudHNcbiAgICAgICAgZm9yIChsZXQgaSA9IG5vbkZpeGVkRWxlbWVudHMubGVuZ3RoIC0gMTsgaSA+IDA7IGktLSkge1xuICAgICAgICAgIGNvbnN0IGogPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAoaSArIDEpKTtcbiAgICAgICAgICBbbm9uRml4ZWRFbGVtZW50c1tpXSwgbm9uRml4ZWRFbGVtZW50c1tqXV0gPSBbbm9uRml4ZWRFbGVtZW50c1tqXSwgbm9uRml4ZWRFbGVtZW50c1tpXV07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDaGVjayBpZiB0aGUgc2h1ZmZsZWQgcmVzdWx0IGlzIGRpZmZlcmVudCBmcm9tIHRoZSBvcmlnaW5hbCBvcmRlclxuICAgICAgICBpc1NodWZmbGVkID0gbm9uRml4ZWRFbGVtZW50cy5zb21lKChjaG9pY2UsIGluZGV4KSA9PiB7XG4gICAgICAgICAgY29uc3Qgb3JpZ2luYWxJbmRleCA9IGNob2ljZXMuaW5kZXhPZihjaG9pY2UpO1xuICAgICAgICAgIHJldHVybiBvcmlnaW5hbEluZGV4ICE9PSBpbmRleDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKGlzU2h1ZmZsZWQpIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWlzU2h1ZmZsZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gc2h1ZmZsZSB0aGUgY2hvaWNlcyBhZnRlciBtdWx0aXBsZSBhdHRlbXB0cy4nKTtcbiAgICAgIH1cblxuICAgICAgLy8gQXNzaWduIG9yZGVyIHRvIGVhY2ggZWxlbWVudFxuICAgICAgbGV0IG9yZGVyID0gMTtcbiAgICAgIGNob2ljZXMuZm9yRWFjaCgoY2hvaWNlOiBIVE1MRWxlbWVudCwgaW5kZXgpID0+IHtcbiAgICAgICAgaWYgKGNob2ljZS5oYXNBdHRyaWJ1dGUoJ2ZpeGVkJykpIHtcbiAgICAgICAgICBjaG9pY2Uuc3R5bGUuc2V0UHJvcGVydHkoJ29yZGVyJywgU3RyaW5nKG9yZGVyKyspKTsgLy8gY2hvaWNlLnN0eWxlLm9yZGVyID0gU3RyaW5nKG9yZGVyKyspO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IG5vbkZpeGVkQ2hvaWNlID0gbm9uRml4ZWRFbGVtZW50cy5zaGlmdCgpO1xuICAgICAgICAgIG5vbkZpeGVkQ2hvaWNlIS5zdHlsZS5zZXRQcm9wZXJ0eSgnb3JkZXInLCBTdHJpbmcob3JkZXIrKykpOyAvLyBub25GaXhlZENob2ljZSEuc3R5bGUub3JkZXIgPSBTdHJpbmcob3JkZXIrKyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3Jlc2V0U2h1ZmZsZUNob2ljZXMoKSB7XG4gICAgICBjb25zdCBjaG9pY2VzID0gQXJyYXkuZnJvbSh0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwoJ3F0aS1zaW1wbGUtY2hvaWNlJykpO1xuICAgICAgY2hvaWNlcy5mb3JFYWNoKChjaG9pY2UsIGluZGV4KSA9PiB7XG4gICAgICAgIGNob2ljZS5zdHlsZS5zZXRQcm9wZXJ0eSgnb3JkZXInLCAnaW5pdGlhbCcpOyAvLyBjaG9pY2Uuc3R5bGUub3JkZXIgPSAnaW5pdGlhbCc7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIFNodWZmbGVFbGVtZW50IGFzIENvbnN0cnVjdG9yPFNodWZmbGVJbnRlcmZhY2U+ICYgVDtcbn07XG5cbmNvbnN0IHN0cmluZ1RvQm9vbGVhbkNvbnZlcnRlciA9IHtcbiAgZnJvbUF0dHJpYnV0ZSh2YWx1ZTogc3RyaW5nIHwgbnVsbCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB2YWx1ZSA9PT0gJ3RydWUnO1xuICB9LFxuICB0b0F0dHJpYnV0ZSh2YWx1ZTogYm9vbGVhbik6IHN0cmluZyB7XG4gICAgcmV0dXJuIHZhbHVlID8gJ3RydWUnIDogJ2ZhbHNlJztcbiAgfVxufTtcbiIsICIvKipcbiAqIE1peGluIHRoYXQgcHJvdmlkZXMgc2h1ZmZsaW5nIGZ1bmN0aW9uYWxpdHkgZm9yIGEgTGl0RWxlbWVudC5cbiAqIEB0ZW1wbGF0ZSBUIC0gVGhlIHR5cGUgb2YgdGhlIExpdEVsZW1lbnQgc3ViY2xhc3MuXG4gKiBAcGFyYW0ge1R9IHN1cGVyQ2xhc3MgLSBUaGUgc3VwZXJjbGFzcyB0byBleHRlbmQuXG4gKiBAcGFyYW0ge3N0cmluZ30gc2VsZWN0b3IgLSBUaGUgQ1NTIHNlbGVjdG9yIGZvciB0aGUgZWxlbWVudHMgdG8gc2h1ZmZsZS5cbiAqIEByZXR1cm5zIHtDb25zdHJ1Y3RvcjxTaHVmZmxlSW50ZXJmYWNlPiAmIFR9IC0gVGhlIGV4dGVuZGVkIGNsYXNzIHdpdGggc2h1ZmZsaW5nIGZ1bmN0aW9uYWxpdHkuXG4gKlxuICogYWRkcyBhIHNodWZmbGUgcHJvcGVydHkgdG8gdGhlIGNsYXNzIHdpdGggYW4gYXR0cmlidXRlIGNvbnZlcnRlclxuICpcbiAqIHF0aS1pbmxpbmUtY2hvaWNlLWludGVyYWN0aW9uXG4gKiBxdGktY2hvaWNlLWludGVyYWN0aW9uXG4gKiBxdGktbWF0Y2gtaW50ZXJhY3Rpb25cbiAqL1xuaW1wb3J0IHsgaHRtbCwgTGl0RWxlbWVudCwgUHJvcGVydHlWYWx1ZXMgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgcHJvcGVydHkgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBRdGlDaG9pY2UgfSBmcm9tICcuLi9jaG9pY2UvcXRpLWNob2ljZSc7XG5pbXBvcnQgeyBRdGlTaW1wbGVDaG9pY2UgfSBmcm9tICcuLi8uLi9xdGktc2ltcGxlLWNob2ljZSc7XG5cbnR5cGUgQ29uc3RydWN0b3I8VCA9IHt9PiA9IG5ldyAoLi4uYXJnczogYW55W10pID0+IFQ7XG5cbnR5cGUgTGFiZWxUeXBlID0gJ3F0aS1sYWJlbHMtZGVjaW1hbCcgfCAncXRpLWxhYmVscy1sb3dlci1hbHBoYScgfCAncXRpLWxhYmVscy11cHBlci1hbHBoYSc7XG50eXBlIExhYmVsU3VmZml4VHlwZSA9ICdxdGktbGFiZWxzLXN1ZmZpeC1wZXJpb2QnIHwgJ3F0aS1sYWJlbHMtc3VmZml4LXBhcmVudGhlc2lzJztcblxuZGVjbGFyZSBjbGFzcyBWb2NhYnVsYXJ5SW50ZXJmYWNlIHt9XG5cbmV4cG9ydCBjb25zdCBWb2NhYnVsYXJ5TWl4aW4gPSA8VCBleHRlbmRzIENvbnN0cnVjdG9yPExpdEVsZW1lbnQ+PihzdXBlckNsYXNzOiBULCBzZWxlY3Rvcjogc3RyaW5nKSA9PiB7XG4gIGNsYXNzIFZvY2FidWxhcnlFbGVtZW50IGV4dGVuZHMgc3VwZXJDbGFzcyB7XG4gICAgcHJpdmF0ZSBfY2xhc3Nlczogc3RyaW5nW10gPSBbXTtcbiAgICBwcml2YXRlIF9hbGxMYWJlbHMgPSBbJ3F0aS1sYWJlbHMtZGVjaW1hbCcsICdxdGktbGFiZWxzLWxvd2VyLWFscGhhJywgJ3F0aS1sYWJlbHMtdXBwZXItYWxwaGEnXTtcbiAgICBwcml2YXRlIF9hbGxMYWJlbFN1ZmZpeGVzID0gWydxdGktbGFiZWxzLXN1ZmZpeC1wZXJpb2QnLCAncXRpLWxhYmVscy1zdWZmaXgtcGFyZW50aGVzaXMnXTtcbiAgICAvLyBEZWZpbmUgdGhlIHByb3BlcnR5IHdpdGggdGhlIGN1c3RvbSBjb252ZXJ0ZXJcbiAgICBAcHJvcGVydHkoe1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgcmVmbGVjdDogdHJ1ZVxuICAgIH0pXG4gICAgc2V0IGNsYXNzKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgLy8gY29uc3Qgb2xkVmFsdWUgPSB0aGlzLl9jbGFzc2VzLmpvaW4oJyAnKTtcbiAgICAgIHRoaXMuX2NsYXNzZXMgPSB2YWx1ZS5zcGxpdCgnICcpO1xuXG4gICAgICB0aGlzLl9hZGRMYWJlbHMoKTtcbiAgICAgIC8vIHRoaXMucmVxdWVzdFVwZGF0ZSgnY2xhc3MnLCBvbGRWYWx1ZSk7XG4gICAgfVxuICAgIGdldCBjbGFzcygpOiBzdHJpbmcge1xuICAgICAgcmV0dXJuIHRoaXMuX2NsYXNzZXM/LmpvaW4oJyAnKSB8fCAnJztcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgdXBkYXRlZChfY2hhbmdlZFByb3BlcnRpZXM6IFByb3BlcnR5VmFsdWVzKTogdm9pZCB7XG4gICAgICBzdXBlci51cGRhdGVkKF9jaGFuZ2VkUHJvcGVydGllcyk7XG4gICAgICBpZiAoX2NoYW5nZWRQcm9wZXJ0aWVzLmhhcygnc2h1ZmZsZScpKSB7XG4gICAgICAgIHRoaXMuX2FkZExhYmVscygpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX2FkZExhYmVscygpIHtcbiAgICAgIGNvbnN0IGNsYXNzQ29udGFpbnNMYWJlbCA9IHRoaXMuX2NsYXNzZXMuc29tZShcbiAgICAgICAgY2xzID0+IHRoaXMuX2FsbExhYmVscy5pbmNsdWRlcyhjbHMpIHx8IHRoaXMuX2FsbExhYmVsU3VmZml4ZXMuaW5jbHVkZXMoY2xzKVxuICAgICAgKTtcbiAgICAgIGNvbnN0IGlzTnVtYmVyID0gdmFsdWUgPT4ge1xuICAgICAgICByZXR1cm4gIWlzTmFOKCt2YWx1ZSk7XG4gICAgICB9O1xuICAgICAgaWYgKGNsYXNzQ29udGFpbnNMYWJlbCkge1xuICAgICAgICBjb25zdCBjaG9pY2VFbGVtZW50cyA9IEFycmF5LmZyb20odGhpcy5xdWVyeVNlbGVjdG9yQWxsKCdxdGktc2ltcGxlLWNob2ljZScpKS5tYXAoYyA9PiBjIGFzIFF0aVNpbXBsZUNob2ljZSk7XG4gICAgICAgIGNvbnN0IGNob2ljZXMgPSBjaG9pY2VFbGVtZW50c1xuICAgICAgICAgIC5tYXAoKGNob2ljZTogSFRNTEVsZW1lbnQsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4geyBlbDogY2hvaWNlLCBvcmRlcjogaXNOdW1iZXIoY2hvaWNlLnN0eWxlLm9yZGVyKSA/ICtjaG9pY2Uuc3R5bGUub3JkZXIgOiBpbmRleCArIDEgfTtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLm9yZGVyIC0gYi5vcmRlcilcbiAgICAgICAgICAubWFwKGNob2ljZSA9PiBjaG9pY2UuZWwpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNob2ljZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAoY2hvaWNlc1tpXSBhcyBRdGlTaW1wbGVDaG9pY2UpLm1hcmtlciA9IHRoaXMuX2dldExhYmVsKGkgKyAxKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBwcml2YXRlIF9nZXRMYWJlbChpbmRleDogbnVtYmVyKSB7XG4gICAgICBsZXQgbGFzdExhYmVsID0gdGhpcy5fY2xhc3Nlcy5maWx0ZXIoYyA9PiB0aGlzLl9hbGxMYWJlbHMuaW5jbHVkZXMoYykpLnBvcCgpO1xuICAgICAgY29uc3QgbGFzdExhYmVsU3VmZml4ID0gdGhpcy5fY2xhc3Nlcy5maWx0ZXIoYyA9PiB0aGlzLl9hbGxMYWJlbFN1ZmZpeGVzLmluY2x1ZGVzKGMpKS5wb3AoKTtcblxuICAgICAgaWYgKCFsYXN0TGFiZWwgJiYgbGFzdExhYmVsU3VmZml4KSB7XG4gICAgICAgIC8vIGEgc3VmZml4IHdpdGhvdXQgYSBsYWJlbCBpcyBzdHJhbmdlIHNvIGFkZCBxdGktbGFiZWxzLXVwcGVyLWFscGhhXG4gICAgICAgIGxhc3RMYWJlbCA9ICdxdGktbGFiZWxzLXVwcGVyLWFscGhhJztcbiAgICAgIH1cbiAgICAgIGxldCBsYWJlbCA9ICcnO1xuICAgICAgc3dpdGNoIChsYXN0TGFiZWwpIHtcbiAgICAgICAgY2FzZSAncXRpLWxhYmVscy1kZWNpbWFsJzpcbiAgICAgICAgICBsYWJlbCA9IGAke2luZGV4fWA7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3F0aS1sYWJlbHMtbG93ZXItYWxwaGEnOlxuICAgICAgICAgIGxhYmVsID0gYCR7U3RyaW5nLmZyb21DaGFyQ29kZSg5NyArIGluZGV4IC0gMSl9YDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAncXRpLWxhYmVscy11cHBlci1hbHBoYSc6XG4gICAgICAgICAgbGFiZWwgPSBgJHtTdHJpbmcuZnJvbUNoYXJDb2RlKDY1ICsgaW5kZXggLSAxKX1gO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgaWYgKGxhc3RMYWJlbFN1ZmZpeCA9PT0gJ3F0aS1sYWJlbHMtc3VmZml4LXBlcmlvZCcpIHtcbiAgICAgICAgbGFiZWwgKz0gJy4nO1xuICAgICAgfSBlbHNlIGlmIChsYXN0TGFiZWxTdWZmaXggPT09ICdxdGktbGFiZWxzLXN1ZmZpeC1wYXJlbnRoZXNpcycpIHtcbiAgICAgICAgbGFiZWwgKz0gYClgO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGxhYmVsO1xuICAgIH1cbiAgfVxuICByZXR1cm4gVm9jYWJ1bGFyeUVsZW1lbnQgYXMgQ29uc3RydWN0b3I8Vm9jYWJ1bGFyeUludGVyZmFjZT4gJiBUO1xufTtcbiIsICJpbXBvcnQgeyBjc3MgfSBmcm9tICdsaXQnO1xuLy8gaW1wb3J0IGNvbXBvbmVudFN0eWxlcyBmcm9tICcuLi8uLi91dGlsaXRpZXMvc3R5bGVzL2NvbXBvbmVudC5zdHlsZXMnO1xuXG4vKiAke2NvbXBvbmVudFN0eWxlc30gKi9cbmV4cG9ydCBkZWZhdWx0IGNzc2BcbiAgOmhvc3Qge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAvLyBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgfVxuYDtcbiIsICJpbXBvcnQgeyBjc3MsIGh0bWwsIExpdEVsZW1lbnQgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IFF0aVJ1bGUsIFF0aVJ1bGVCYXNlIH0gZnJvbSAnLi4nO1xuXG5AY3VzdG9tRWxlbWVudCgncXRpLW91dGNvbWUtcHJvY2Vzc2luZycpXG5leHBvcnQgY2xhc3MgUXRpT3V0Y29tZVByb2Nlc3NpbmcgZXh0ZW5kcyBMaXRFbGVtZW50IHtcbiAgc3RhdGljIHN0eWxlcyA9IFtcbiAgICBjc3NgXG4gICAgICA6aG9zdCB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICB9XG4gICAgYFxuICBdO1xuXG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICByZXR1cm4gaHRtbGA8c2xvdD48L3Nsb3Q+YDtcbiAgfVxuXG4gIHB1YmxpYyBwcm9jZXNzKCkge1xuICAgIGNvbnN0IGxvZ2ljID0gbmV3IFF0aU91dGNvbWVQcm9jZXNzaW5nUHJvY2Vzc29yKCk7XG4gICAgY29uc3QgcnVsZXMgPSBbLi4udGhpcy5jaGlsZHJlbl0gYXMgUXRpUnVsZVtdO1xuICAgIGxvZ2ljLnByb2Nlc3MocnVsZXMpO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1vdXRjb21lLXByb2Nlc3NpbmcnOiBRdGlPdXRjb21lUHJvY2Vzc2luZztcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgUXRpT3V0Y29tZVByb2Nlc3NpbmdQcm9jZXNzb3Ige1xuICBwdWJsaWMgcHJvY2VzcyhydWxlczogUXRpUnVsZUJhc2VbXSkge1xuICAgIGZvciAoY29uc3QgcnVsZSBvZiBydWxlcykge1xuICAgICAgcnVsZS5wcm9jZXNzKCk7XG4gICAgfVxuICB9XG59XG4iLCAiaW1wb3J0IHsgY3NzLCBodG1sLCBMaXRFbGVtZW50LCBQcm9wZXJ0eVZhbHVlTWFwIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5cbmltcG9ydCB7IG1hcFJlc3BvbnNlLCBtYXBSZXNwb25zZVBvaW50LCBtYXRjaENvcnJlY3QgfSBmcm9tICcuLi8uLi9pbnRlcm5hbC90ZW1wbGF0ZS1zdHJpbmdzJztcbmltcG9ydCB7IHR5cGUgUXRpUnVsZSB9IGZyb20gJy4uL3F0aS1ydWxlL3F0aS1ydWxlJztcblxuQGN1c3RvbUVsZW1lbnQoJ3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nJylcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFF0aVJlc3BvbnNlUHJvY2Vzc2luZyBleHRlbmRzIExpdEVsZW1lbnQge1xuICBzdGF0aWMgc3R5bGVzID0gW1xuICAgIGNzc2BcbiAgICAgIDpob3N0IHtcbiAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgIH1cbiAgICBgXG4gIF07XG5cbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYDxzbG90Pjwvc2xvdD5gO1xuICB9XG5cbiAgcHVibGljIHByb2Nlc3MoKSB7XG4gICAgY29uc3QgcnVsZXMgPSBbLi4udGhpcy5jaGlsZHJlbl0gYXMgUXRpUnVsZVtdO1xuXG4gICAgZm9yIChjb25zdCBydWxlIG9mIHJ1bGVzKSB7XG4gICAgICBydWxlLnByb2Nlc3MoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZmlyc3RVcGRhdGVkKF9jaGFuZ2VkUHJvcGVydGllczogUHJvcGVydHlWYWx1ZU1hcDxhbnk+IHwgTWFwPFByb3BlcnR5S2V5LCB1bmtub3duPik6IHZvaWQge1xuICAgIGlmICh0aGlzLmdldEF0dHJpYnV0ZSgndGVtcGxhdGUnKSkge1xuICAgICAgY29uc3Qgc3BsaXR0ZWRUZW1wbGF0ZU5hbWUgPSB0aGlzLmdldEF0dHJpYnV0ZSgndGVtcGxhdGUnKSEuc3BsaXQoJy8nKTtcbiAgICAgIGNvbnN0IHRlbXBsYXRlTmFtZSA9IHNwbGl0dGVkVGVtcGxhdGVOYW1lW3NwbGl0dGVkVGVtcGxhdGVOYW1lLmxlbmd0aCAtIDFdLnJlcGxhY2UoJy54bWwnLCAnJyk7XG4gICAgICB0aGlzLmlubmVySFRNTCA9ICcnO1xuICAgICAgc3dpdGNoICh0ZW1wbGF0ZU5hbWUpIHtcbiAgICAgICAgY2FzZSAnbWFwX3Jlc3BvbnNlJzoge1xuICAgICAgICAgIHRoaXMuYXBwZW5kQ2hpbGQodGhpcy5mcmFnbWVudEZyb21TdHJpbmcobWFwUmVzcG9uc2UpLmZpcnN0RWxlbWVudENoaWxkLmZpcnN0RWxlbWVudENoaWxkKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdtYXBfcmVzcG9uc2VfcG9pbnQnOiB7XG4gICAgICAgICAgdGhpcy5hcHBlbmRDaGlsZCh0aGlzLmZyYWdtZW50RnJvbVN0cmluZyhtYXBSZXNwb25zZVBvaW50KS5maXJzdEVsZW1lbnRDaGlsZC5maXJzdEVsZW1lbnRDaGlsZCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnbWF0Y2hfY29ycmVjdCc6XG4gICAgICAgICAgdGhpcy5hcHBlbmRDaGlsZCh0aGlzLmZyYWdtZW50RnJvbVN0cmluZyhtYXRjaENvcnJlY3QpLmZpcnN0RWxlbWVudENoaWxkLmZpcnN0RWxlbWVudENoaWxkKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZyYWdtZW50RnJvbVN0cmluZyhzdHJIVE1MOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKS5jcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQoc3RySFRNTCk7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcnOiBRdGlSZXNwb25zZVByb2Nlc3Npbmc7XG4gIH1cbn1cbiIsICJleHBvcnQgY29uc3QgbWF0Y2hDb3JyZWN0ID0gYDxxdGktcmVzcG9uc2UtcHJvY2Vzc2luZz5cbiAgPHF0aS1yZXNwb25zZS1jb25kaXRpb24+XG4gICAgPHF0aS1yZXNwb25zZS1pZj5cbiAgICAgIDxxdGktbWF0Y2g+XG4gICAgICAgIDxxdGktdmFyaWFibGUgaWRlbnRpZmllcj1cIlJFU1BPTlNFXCI+PC9xdGktdmFyaWFibGU+XG4gICAgICAgIDxxdGktY29ycmVjdCBpZGVudGlmaWVyPVwiUkVTUE9OU0VcIj48L3F0aS1jb3JyZWN0PlxuICAgICAgPC9xdGktbWF0Y2g+XG4gICAgICA8cXRpLXNldC1vdXRjb21lLXZhbHVlIGlkZW50aWZpZXI9XCJTQ09SRVwiPlxuICAgICAgICA8cXRpLWJhc2UtdmFsdWUgYmFzZS10eXBlPVwiZmxvYXRcIj4xPC9xdGktYmFzZS12YWx1ZT5cbiAgICAgIDwvcXRpLXNldC1vdXRjb21lLXZhbHVlPlxuICAgIDwvcXRpLXJlc3BvbnNlLWlmPlxuICAgIDxxdGktcmVzcG9uc2UtZWxzZT5cbiAgICAgIDxxdGktc2V0LW91dGNvbWUtdmFsdWUgaWRlbnRpZmllcj1cIlNDT1JFXCI+XG4gICAgICAgIDxxdGktYmFzZS12YWx1ZSBiYXNlLXR5cGU9XCJmbG9hdFwiPjA8L3F0aS1iYXNlLXZhbHVlPlxuICAgICAgPC9xdGktc2V0LW91dGNvbWUtdmFsdWU+XG4gICAgPC9xdGktcmVzcG9uc2UtZWxzZT5cbiAgPC9xdGktcmVzcG9uc2UtY29uZGl0aW9uPlxuPC9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZz5gO1xuXG5leHBvcnQgY29uc3QgbWFwUmVzcG9uc2UgPSBgPHF0aS1yZXNwb25zZS1wcm9jZXNzaW5nPlxuICA8cXRpLXJlc3BvbnNlLWNvbmRpdGlvbj5cbiAgICA8cXRpLXJlc3BvbnNlLWlmPlxuICAgICAgPHF0aS1pcy1udWxsPlxuICAgICAgICA8cXRpLXZhcmlhYmxlIGlkZW50aWZpZXI9XCJSRVNQT05TRVwiPjwvcXRpLXZhcmlhYmxlPlxuICAgICAgPC9xdGktaXMtbnVsbD5cbiAgICAgIDxxdGktc2V0LW91dGNvbWUtdmFsdWUgaWRlbnRpZmllcj1cIlNDT1JFXCI+XG4gICAgICAgIDxxdGktYmFzZS12YWx1ZSBiYXNlLXR5cGU9XCJmbG9hdFwiPjAuMDwvcXRpLWJhc2UtdmFsdWU+XG4gICAgICA8L3F0aS1zZXQtb3V0Y29tZS12YWx1ZT5cbiAgICA8L3F0aS1yZXNwb25zZS1pZj5cbiAgICA8cXRpLXJlc3BvbnNlLWVsc2U+XG4gICAgICA8cXRpLXNldC1vdXRjb21lLXZhbHVlIGlkZW50aWZpZXI9XCJTQ09SRVwiPlxuICAgICAgICA8cXRpLW1hcC1yZXNwb25zZSBpZGVudGlmaWVyPVwiUkVTUE9OU0VcIj4gPC9xdGktbWFwLXJlc3BvbnNlPlxuICAgICAgPC9xdGktc2V0LW91dGNvbWUtdmFsdWU+XG4gICAgPC9xdGktcmVzcG9uc2UtZWxzZT5cbiAgPC9xdGktcmVzcG9uc2UtY29uZGl0aW9uPlxuPC9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZz5gO1xuXG5leHBvcnQgY29uc3QgbWFwUmVzcG9uc2VQb2ludCA9IGA8cXRpLXJlc3BvbnNlLXByb2Nlc3Npbmc+XG4gIDxxdGktcmVzcG9uc2UtY29uZGl0aW9uPlxuICAgIDxxdGktcmVzcG9uc2UtaWY+XG4gICAgICA8cXRpLWlzLW51bGw+XG4gICAgICAgIDxxdGktdmFyaWFibGUgaWRlbnRpZmllcj1cIlJFU1BPTlNFXCI+PC9xdGktdmFyaWFibGU+XG4gICAgICA8L3F0aS1pcy1udWxsPlxuICAgICAgPHF0aS1zZXQtb3V0Y29tZS12YWx1ZSBpZGVudGlmaWVyPVwiU0NPUkVcIj5cbiAgICAgICAgPHF0aS1iYXNlLXZhbHVlIGJhc2UtdHlwZT1cImZsb2F0XCI+MDwvcXRpLWJhc2UtdmFsdWU+XG4gICAgICA8L3F0aS1zZXQtb3V0Y29tZS12YWx1ZT5cbiAgICA8L3F0aS1yZXNwb25zZS1pZj5cbiAgICA8cXRpLXJlc3BvbnNlLWVsc2U+XG4gICAgICA8cXRpLXNldC1vdXRjb21lLXZhbHVlIGlkZW50aWZpZXI9XCJTQ09SRVwiPlxuICAgICAgICA8cXRpLW1hcC1yZXNwb25zZS1wb2ludCBpZGVudGlmaWVyPVwiUkVTUE9OU0VcIj48L3F0aS1tYXAtcmVzcG9uc2UtcG9pbnQ+XG4gICAgICA8L3F0aS1zZXQtb3V0Y29tZS12YWx1ZT5cbiAgICA8L3F0aS1yZXNwb25zZS1lbHNlPlxuICA8L3F0aS1yZXNwb25zZS1jb25kaXRpb24+XG48L3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nPmA7XG4iLCAiaW1wb3J0IHsgT3V0Y29tZVZhcmlhYmxlIH0gZnJvbSAnQGNpdG9sYWIvcXRpLWNvbXBvbmVudHMvcXRpLWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgcHJvcGVydHkgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBjb252ZXJ0TnVtYmVyVG9Vbml2ZXJhbEZvcm1hdCB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFsL3V0aWxzJztcbmltcG9ydCB7IFF0aUV4cHJlc3Npb24gfSBmcm9tICcuLi8uLi9xdGktZXhwcmVzc2lvbi9xdGktZXhwcmVzc2lvbic7XG5pbXBvcnQgeyBRdGlSdWxlIH0gZnJvbSAnLi4vcXRpLXJ1bGUnO1xuXG4vKipcbiAqIFRoZSBsb29rdXBPdXRjb21lVmFsdWUgcnVsZSBzZXRzIHRoZSB2YWx1ZSBvZiBhbiBvdXRjb21lIHZhcmlhYmxlIHRvIHRoZSB2YWx1ZSBvYnRhaW5lZFxuICogYnkgbG9va2luZyB1cCB0aGUgdmFsdWUgb2YgdGhlIGFzc29jaWF0ZWQgZXhwcmVzc2lvbiBpbiB0aGUgbG9va3VwVGFibGUgYXNzb2NpYXRlZFxuICogd2l0aCB0aGUgb3V0Y29tZSdzIGRlY2xhcmF0aW9uLlxuICovXG5leHBvcnQgY2xhc3MgUXRpTG9va3VwT3V0Y29tZVZhbHVlIGV4dGVuZHMgUXRpUnVsZSB7XG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZyB9KSBpZGVudGlmaWVyOiBzdHJpbmc7XG5cbiAgZ2V0IGNoaWxkRXhwcmVzc2lvbigpOiBRdGlFeHByZXNzaW9uPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLmZpcnN0RWxlbWVudENoaWxkIGFzIFF0aUV4cHJlc3Npb248c3RyaW5nPjtcbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBwcm9jZXNzKCk6IG51bWJlciB7XG4gICAgY29uc3QgaWRlbnRpZmllciA9IHRoaXMuZ2V0QXR0cmlidXRlKCdpZGVudGlmaWVyJyk7XG4gICAgY29uc3Qgb3V0Y29tZVZhcmlhYmxlID0gdGhpcy5jbG9zZXN0KCdxdGktYXNzZXNzbWVudC1pdGVtJykuZ2V0VmFyaWFibGUoaWRlbnRpZmllcikgYXMgT3V0Y29tZVZhcmlhYmxlO1xuICAgIGxldCB2YWx1ZTtcbiAgICBpZiAob3V0Y29tZVZhcmlhYmxlLmludGVycG9sYXRpb25UYWJsZSkge1xuICAgICAgdmFsdWUgPSBvdXRjb21lVmFyaWFibGUuaW50ZXJwb2xhdGlvblRhYmxlLmdldChwYXJzZUludCh0aGlzLmNoaWxkRXhwcmVzc2lvbi5jYWxjdWxhdGUoKSkpO1xuICAgIH1cbiAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc29sZS53YXJuKCdsb29rdXBPdXRjb21lVmFsdWU6IHZhbHVlIGlzIG51bGwgb3IgdW5kZWZpbmVkJyk7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KFxuICAgICAgbmV3IEN1c3RvbUV2ZW50PHsgb3V0Y29tZUlkZW50aWZpZXI6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB8IHN0cmluZ1tdIH0+KCdxdGktc2V0LW91dGNvbWUtdmFsdWUnLCB7XG4gICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgIGNvbXBvc2VkOiB0cnVlLFxuICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICBvdXRjb21lSWRlbnRpZmllcjogdGhpcy5pZGVudGlmaWVyLFxuICAgICAgICAgIHZhbHVlOiBjb252ZXJ0TnVtYmVyVG9Vbml2ZXJhbEZvcm1hdCh2YWx1ZSlcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxufVxuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdxdGktbG9va3VwLW91dGNvbWUtdmFsdWUnLCBRdGlMb29rdXBPdXRjb21lVmFsdWUpO1xuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktbG9va3VwLW91dGNvbWUtdmFsdWUnOiBRdGlMb29rdXBPdXRjb21lVmFsdWU7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBjdXN0b21FbGVtZW50IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgaHRtbCwgTGl0RWxlbWVudCB9IGZyb20gJ2xpdCc7XG5cbkBjdXN0b21FbGVtZW50KCdxdGktcnVsZScpXG5leHBvcnQgY2xhc3MgUXRpUnVsZSBleHRlbmRzIExpdEVsZW1lbnQgaW1wbGVtZW50cyBRdGlSdWxlQmFzZSB7XG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICByZXR1cm4gaHRtbGA8c2xvdD48L3Nsb3Q+YDtcbiAgfVxuXG4gIHB1YmxpYyBwcm9jZXNzKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignTm90IGltcGxlbWVudGVkJyk7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBRdGlSdWxlQmFzZSB7XG4gIHByb2Nlc3MoKTogYW55O1xufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktcnVsZSc6IFF0aVJ1bGU7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBodG1sIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IFF0aUV4cHJlc3Npb24gfSBmcm9tICcuLi8uLi9xdGktZXhwcmVzc2lvbi9xdGktZXhwcmVzc2lvbic7XG5pbXBvcnQgeyBRdGlSdWxlIH0gZnJvbSAnLi4vcXRpLXJ1bGUnO1xuXG5leHBvcnQgY2xhc3MgUXRpUmVzcG9uc2VDb25kaXRpb24gZXh0ZW5kcyBRdGlSdWxlIHtcbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYDxzbG90Pjwvc2xvdD5gO1xuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIHByb2Nlc3MoKSB7XG4gICAgY29uc3QgYnJhbmNoZXMgPSBbLi4udGhpcy5jaGlsZHJlbl0gYXMgUXRpRXhwcmVzc2lvbjxhbnk+W107XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJyYW5jaGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBicmFuY2ggPSBicmFuY2hlc1tpXTtcblxuICAgICAgaWYgKGJyYW5jaC5jYWxjdWxhdGUoKSkge1xuICAgICAgICAoYnJhbmNoIGFzIHVua25vd24gYXMgUXRpUnVsZSkucHJvY2VzcygpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdxdGktcmVzcG9uc2UtY29uZGl0aW9uJywgUXRpUmVzcG9uc2VDb25kaXRpb24pO1xuIiwgImltcG9ydCB7IGNvbnZlcnROdW1iZXJUb1VuaXZlcmFsRm9ybWF0IH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWwvdXRpbHMnO1xuaW1wb3J0IHsgUXRpRXhwcmVzc2lvbiwgUXRpRXhwcmVzc2lvbkJhc2UgfSBmcm9tICcuLi8uLi9xdGktZXhwcmVzc2lvbi9xdGktZXhwcmVzc2lvbic7XG5pbXBvcnQgeyBRdGlSdWxlLCBRdGlSdWxlQmFzZSB9IGZyb20gJy4uL3F0aS1ydWxlJztcblxuZXhwb3J0IGNsYXNzIFF0aVNldE91dGNvbWVWYWx1ZSBleHRlbmRzIFF0aVJ1bGUge1xuICBwdWJsaWMgb3ZlcnJpZGUgcHJvY2VzcygpIHtcbiAgICBjb25zdCBvdXRjb21lSWRlbnRpZmllciA9IHRoaXMuZ2V0QXR0cmlidXRlKCdpZGVudGlmaWVyJyk7XG5cbiAgICBjb25zdCBleHByZXNzaW9uID0gdGhpcy5maXJzdEVsZW1lbnRDaGlsZCBhcyBRdGlFeHByZXNzaW9uPHN0cmluZz47XG5cbiAgICBjb25zdCBydWxlID0gbmV3IFF0aVNldE91dGNvbWVWYWx1ZVJ1bGUoZXhwcmVzc2lvbik7XG4gICAgY29uc3QgdmFsdWUgPSBydWxlLnByb2Nlc3MoKTtcbiAgICB0aGlzLmRpc3BhdGNoRXZlbnQoXG4gICAgICBuZXcgQ3VzdG9tRXZlbnQ8eyBvdXRjb21lSWRlbnRpZmllcjogc3RyaW5nOyB2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10gfT4oJ3F0aS1zZXQtb3V0Y29tZS12YWx1ZScsIHtcbiAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgY29tcG9zZWQ6IHRydWUsXG4gICAgICAgIGRldGFpbDoge1xuICAgICAgICAgIG91dGNvbWVJZGVudGlmaWVyLFxuICAgICAgICAgIHZhbHVlOiBBcnJheS5pc0FycmF5KHZhbHVlKVxuICAgICAgICAgICAgPyB2YWx1ZS5tYXAoKHY6IHN0cmluZykgPT4gY29udmVydE51bWJlclRvVW5pdmVyYWxGb3JtYXQodikpXG4gICAgICAgICAgICA6IGNvbnZlcnROdW1iZXJUb1VuaXZlcmFsRm9ybWF0KHZhbHVlKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFF0aVNldE91dGNvbWVWYWx1ZVJ1bGU8VD4gaW1wbGVtZW50cyBRdGlSdWxlQmFzZSB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZXhwcmVzc2lvbjogUXRpRXhwcmVzc2lvbkJhc2U8VD4pIHt9XG5cbiAgcHJvY2VzcygpOiBhbnkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5leHByZXNzaW9uID8gdGhpcy5leHByZXNzaW9uLmNhbGN1bGF0ZSgpIDogbnVsbDtcblxuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ3NldE91dGNvbWVWYWx1ZTogdmFsdWUgaXMgbnVsbCBvciB1bmRlZmluZWQnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG59XG5cbmN1c3RvbUVsZW1lbnRzLmRlZmluZSgncXRpLXNldC1vdXRjb21lLXZhbHVlJywgUXRpU2V0T3V0Y29tZVZhbHVlKTtcbiIsICJpbXBvcnQgeyBMaXRFbGVtZW50LCBodG1sIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IFF0aVJ1bGUgfSBmcm9tICcuLi9xdGktcnVsZS9xdGktcnVsZSc7XG5cbmV4cG9ydCBjbGFzcyBRdGlSZXNwb25zZUVsc2UgZXh0ZW5kcyBMaXRFbGVtZW50IHtcbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYDxzbG90Pjwvc2xvdD5gO1xuICB9XG5cbiAgcHVibGljIGNhbGN1bGF0ZSgpIHtcbiAgICBjb25zdCByZXN1bHQgPSB0cnVlO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHVibGljIGdldFN1YlJ1bGVzKCk6IFF0aVJ1bGVbXSB7XG4gICAgcmV0dXJuIFsuLi50aGlzLmNoaWxkcmVuXSBhcyBRdGlSdWxlW107XG4gIH1cblxuICBwdWJsaWMgcHJvY2VzcygpIHtcbiAgICBjb25zdCBzdWJSdWxlcyA9IHRoaXMuZ2V0U3ViUnVsZXMoKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN1YlJ1bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBzdWJSdWxlID0gc3ViUnVsZXNbaV07XG4gICAgICBzdWJSdWxlLnByb2Nlc3MoKTtcbiAgICB9XG4gIH1cbn1cblxuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdxdGktcmVzcG9uc2UtZWxzZScsIFF0aVJlc3BvbnNlRWxzZSk7XG4iLCAiaW1wb3J0IHsgaHRtbCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBRdGlSZXNwb25zZUlmIH0gZnJvbSAnLi4vcXRpLXJlc3BvbnNlLWlmJztcblxuZXhwb3J0IGNsYXNzIFF0aVJlc3BvbnNlRWxzZUlmIGV4dGVuZHMgUXRpUmVzcG9uc2VJZiB7XG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICByZXR1cm4gaHRtbGAke3N1cGVyLnJlbmRlcigpfWA7XG4gIH1cbn1cblxuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdxdGktcmVzcG9uc2UtZWxzZS1pZicsIFF0aVJlc3BvbnNlRWxzZUlmKTtcbiIsICJpbXBvcnQgeyBRdGlFeHByZXNzaW9uIH0gZnJvbSAnLi4vLi4vcXRpLWV4cHJlc3Npb24vcXRpLWV4cHJlc3Npb24nO1xuaW1wb3J0IHsgUXRpUnVsZSB9IGZyb20gJy4uLy4uL3F0aS1ydWxlL3F0aS1ydWxlJztcbmltcG9ydCB7IFF0aVJlc3BvbnNlRWxzZSB9IGZyb20gJy4uL3F0aS1yZXNwb25zZS1lbHNlJztcblxuZXhwb3J0IGNsYXNzIFF0aVJlc3BvbnNlSWYgZXh0ZW5kcyBRdGlSZXNwb25zZUVsc2Uge1xuICBwdWJsaWMgb3ZlcnJpZGUgY2FsY3VsYXRlKCkge1xuICAgIGNvbnN0IGV4cHJlc3Npb24gPSB0aGlzLmZpcnN0RWxlbWVudENoaWxkIGFzIFF0aUV4cHJlc3Npb248Ym9vbGVhbj47XG4gICAgY29uc3QgcmVzdWx0ID0gZXhwcmVzc2lvbi5jYWxjdWxhdGUoKSBhcyBib29sZWFuO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgZ2V0U3ViUnVsZXMoKTogUXRpUnVsZVtdIHtcbiAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgIHJlc3VsdC5wdXNoKHRoaXMuY2hpbGRyZW5baV0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59XG5cbmN1c3RvbUVsZW1lbnRzLmRlZmluZSgncXRpLXJlc3BvbnNlLWlmJywgUXRpUmVzcG9uc2VJZik7XG4iLCAiaW1wb3J0IHsgTGl0RWxlbWVudCwgY3NzLCBodG1sIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IHN0YXRlIH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgUmVzcG9uc2VWYXJpYWJsZSwgVmFyaWFibGVEZWNsYXJhdGlvbiB9IGZyb20gJy4uLy4uL2ludGVybmFsL3ZhcmlhYmxlcyc7XG5pbXBvcnQgeyBRdGlBc3Nlc3NtZW50SXRlbSB9IGZyb20gJy4uLy4uL3F0aS1hc3Nlc3NtZW50LWl0ZW0vcXRpLWFzc2Vzc21lbnQtaXRlbSc7XG5pbXBvcnQgeyBRdGlNdWx0aXBsZSB9IGZyb20gJy4vcXRpLW11bHRpcGxlL3F0aS1tdWx0aXBsZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUXRpRXhwcmVzc2lvbkJhc2U8VD4ge1xuICAvLyBnZXQgYXNzZXNzbWVudEl0ZW0oKTogUXRpQXNzZXNzbWVudEl0ZW07XG5cbiAgLy8gZ2V0VmFyaWFibGVzKCk6IFZhcmlhYmxlRGVjbGFyYXRpb248bnVtYmVyIHwgc3RyaW5nIHwgKG51bWJlciB8IHN0cmluZylbXSB8IG51bGw+W107XG4gIGNhbGN1bGF0ZSgpOiBSZWFkb25seTxUPjtcbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFF0aUV4cHJlc3Npb248VD4gZXh0ZW5kcyBMaXRFbGVtZW50IGltcGxlbWVudHMgUXRpRXhwcmVzc2lvbkJhc2U8VD4ge1xuICBAc3RhdGUoKVxuICBwcm90ZWN0ZWQgcmVzdWx0OiBhbnk7XG5cbiAgLy8gaGlkZSB0aGUgc2xvdCB3aXRoIGNzc1xuICBzdGF0aWMgc3R5bGVzID0gY3NzYFxuICAgIHNsb3Qge1xuICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG4gIGA7XG5cbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYDxwcmU+JHtKU09OLnN0cmluZ2lmeSh0aGlzLnJlc3VsdCwgbnVsbCwgMil9PC9wcmU+XG4gICAgICA8c2xvdD48L3Nsb3Q+YDtcbiAgfVxuXG4gIHB1YmxpYyBjYWxjdWxhdGUoKTogUmVhZG9ubHk8VD4ge1xuICAgIHRoaXMucmVzdWx0ID0gdGhpcy5nZXRSZXN1bHQoKTtcbiAgICByZXR1cm4gdGhpcy5yZXN1bHQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0UmVzdWx0KCk6IFJlYWRvbmx5PFQ+IHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCcpO1xuICB9XG5cbiAgZ2V0IGFzc2Vzc21lbnRJdGVtKCk6IFF0aUFzc2Vzc21lbnRJdGVtIHtcbiAgICByZXR1cm4gdGhpcy5jbG9zZXN0KCdxdGktYXNzZXNzbWVudC1pdGVtJykgYXMgUXRpQXNzZXNzbWVudEl0ZW07XG4gIH1cblxuICBnZXRWYXJpYWJsZXMgPSAoKTogVmFyaWFibGVEZWNsYXJhdGlvbjxudW1iZXIgfCBzdHJpbmcgfCAobnVtYmVyIHwgc3RyaW5nKVtdIHwgbnVsbD5bXSA9PlxuICAgIC8vIEZJWE1FOiBpZiB0aGlzIGl0c2VsZiBpcyBtdWx0aXBsZSwgdGhpcyB3aWxsIG5ldmVyIGVudGVyIHRoZSBxdGktbXVsdGlwbGUgc3dpdGNoXG4gICAgLy8gU2VlIHRoaXMgZXhhbXBsZSBoZXJlOiBodHRwczovL2dpdGh1Yi5jb20vMUVkVGVjaC9xdGktZXhhbXBsZXMvYmxvYi9tYXN0ZXIvcXRpdjMtZXhhbXBsZXMvcGFja2FnaW5nL2l0ZW1zL0V4YW1wbGUwNS1mZWVkYmFja0Jsb2NrLWFkYXB0aXZlLnhtbFxuXG4gICAgQXJyYXkuZnJvbSh0aGlzLmNoaWxkcmVuKVxuICAgICAgLm1hcCgoZTogRWxlbWVudCkgPT4ge1xuICAgICAgICBzd2l0Y2ggKGUudGFnTmFtZS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgY2FzZSAncXRpLWJhc2UtdmFsdWUnOiB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBiYXNlVHlwZTogZS5nZXRBdHRyaWJ1dGUoJ2Jhc2UtdHlwZScpLFxuICAgICAgICAgICAgICB2YWx1ZTogZS50ZXh0Q29udGVudCxcbiAgICAgICAgICAgICAgY2FyZGluYWxpdHk6ICdzaW5nbGUnXG4gICAgICAgICAgICB9IGFzIFJlc3BvbnNlVmFyaWFibGU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgJ3F0aS12YXJpYWJsZSc6IHtcbiAgICAgICAgICAgIGNvbnN0IGlkZW50aWZpZXIgPSBlLmdldEF0dHJpYnV0ZSgnaWRlbnRpZmllcicpIHx8ICcnO1xuICAgICAgICAgICAgY29uc3QgdmFyaWFibGUgPSB0aGlzLmFzc2Vzc21lbnRJdGVtLmdldFZhcmlhYmxlKGlkZW50aWZpZXIpO1xuICAgICAgICAgICAgcmV0dXJuIHZhcmlhYmxlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlICdxdGktbXVsdGlwbGUnOiB7XG4gICAgICAgICAgICBjb25zdCBtdWx0aXBsZSA9IGUgYXMgUXRpTXVsdGlwbGU7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZXMgPSBtdWx0aXBsZS5nZXRSZXN1bHQoKTtcbiAgICAgICAgICAgIGlmICh2YWx1ZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGlkZW50aWZpZXI6ICcnLFxuICAgICAgICAgICAgICAgIGJhc2VUeXBlOiB2YWx1ZXNbMF0uYmFzZVR5cGUsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlcy5tYXAodiA9PiB2LnZhbHVlKSxcbiAgICAgICAgICAgICAgICBjYXJkaW5hbGl0eTogJ211bHRpcGxlJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAncmVzcG9uc2UnXG4gICAgICAgICAgICAgIH0gYXMgUmVzcG9uc2VWYXJpYWJsZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlICdxdGktY29ycmVjdCc6IHtcbiAgICAgICAgICAgIGNvbnN0IGlkZW50aWZpZXIgPSBlLmdldEF0dHJpYnV0ZSgnaWRlbnRpZmllcicpIHx8ICcnO1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2VWYXJpYWJsZSA9IHRoaXMuYXNzZXNzbWVudEl0ZW0uZ2V0UmVzcG9uc2UoaWRlbnRpZmllcik7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBiYXNlVHlwZTogcmVzcG9uc2VWYXJpYWJsZS5iYXNlVHlwZSxcbiAgICAgICAgICAgICAgdmFsdWU6IHJlc3BvbnNlVmFyaWFibGUuY29ycmVjdFJlc3BvbnNlLFxuICAgICAgICAgICAgICBjYXJkaW5hbGl0eTogcmVzcG9uc2VWYXJpYWJsZS5jYXJkaW5hbGl0eVxuICAgICAgICAgICAgfSBhcyBSZXNwb25zZVZhcmlhYmxlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAvLyBhZGRlZCBmb3IgdXNlIG9mIHF0aS1lcXVhbC1yb3VuZGVkXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBjb25zdCBleHByZXNzaW9uID0gZSBhcyBRdGlFeHByZXNzaW9uPG51bWJlcj47XG4gICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZXhwcmVzc2lvbi5nZXRSZXN1bHQoKTtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBiYXNlVHlwZTogJ2ludGVnZXInLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZS50b1N0cmluZygpLFxuICAgICAgICAgICAgICAgIGNhcmRpbmFsaXR5OiAnc2luZ2xlJ1xuICAgICAgICAgICAgICB9IGFzIFJlc3BvbnNlVmFyaWFibGU7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ2RlZmF1bHQgbm90IHN1ZmZpY2llbnQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIC5maWx0ZXIodiA9PiB2ICE9PSBudWxsKTtcbn1cbiIsICJpbXBvcnQgeyBRdGlFeHByZXNzaW9uIH0gZnJvbSAnLi9xdGktZXhwcmVzc2lvbic7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBRdGlDb25kaXRpb25FeHByZXNzaW9uIGV4dGVuZHMgUXRpRXhwcmVzc2lvbjxib29sZWFuPiB7XG4gIHB1YmxpYyBjYWxjdWxhdGUoKTogUmVhZG9ubHk8Ym9vbGVhbj4ge1xuICAgIHRoaXMucmVzdWx0ID0gdGhpcy5nZXRSZXN1bHQoKTtcbiAgICByZXR1cm4gdGhpcy5yZXN1bHQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0UmVzdWx0KCk6IFJlYWRvbmx5PGJvb2xlYW4+IHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCcpO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgUXRpQ29uZGl0aW9uRXhwcmVzc2lvbiB9IGZyb20gJy4uL3F0aS1jb25kaXRpb24tZXhwcmVzc2lvbic7XG5pbXBvcnQgeyBRdGlFeHByZXNzaW9uIH0gZnJvbSAnLi4vcXRpLWV4cHJlc3Npb24nO1xuXG50eXBlIENvbnN0cnVjdG9yPFQ+ID0gbmV3ICguLi5hcmdzOiBhbnlbXSkgPT4gVDtcbmV4cG9ydCBjbGFzcyBRdGlBbmQgZXh0ZW5kcyBxdGlBbmRNaXhpbihRdGlDb25kaXRpb25FeHByZXNzaW9uIGFzIHVua25vd24gYXMgQ29uc3RydWN0b3I8UXRpQ29uZGl0aW9uRXhwcmVzc2lvbj4pIHtcbiAgcHVibGljIGNhbGN1bGF0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5jYWxjdWxhdGVDaGlsZHJlbihBcnJheS5mcm9tKHRoaXMuY2hpbGRyZW4gYXMgdW5rbm93biBhcyBRdGlFeHByZXNzaW9uPGFueT5bXSkpO1xuICB9XG59XG5cbmV4cG9ydCB0eXBlIE1vY2tRdGlFeHByZXNzaW9uPFQ+ID0geyBjYWxjdWxhdGU6ICgpID0+IFQgfTtcbnR5cGUgTW9ja0NvbnN0cnVjdG9yID0gbmV3ICguLi5hcmdzOiBhbnlbXSkgPT4ge307XG5leHBvcnQgZnVuY3Rpb24gcXRpQW5kTWl4aW48VEJhc2UgZXh0ZW5kcyBNb2NrQ29uc3RydWN0b3I+KEJhc2U6IFRCYXNlKSB7XG4gIHJldHVybiBjbGFzcyBNb2NrUXRpQW5kIGV4dGVuZHMgQmFzZSB7XG4gICAgcHVibGljIGNhbGN1bGF0ZUNoaWxkcmVuKGNoaWxkcmVuOiBBcnJheTxNb2NrUXRpRXhwcmVzc2lvbjxhbnk+Pikge1xuICAgICAgLy8gY2hpbGRyZW4gY2FuIGJlIGEgbWl4IG9mIHF0aS1leHByZXNzaW9uIGFuZCBxdGktY29uZGl0aW9uLWV4cHJlc3Npb25cbiAgICAgIGNvbnN0IHZhbHVlcyA9IGNoaWxkcmVuLm1hcChjID0+IHtcbiAgICAgICAgY29uc3QgY29uZGl0aW9uID0gYyBhcyBNb2NrUXRpRXhwcmVzc2lvbjxhbnk+O1xuICAgICAgICBpZiAoIWNvbmRpdGlvbi5jYWxjdWxhdGUpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFwiRWxlbWVudCBkb2Vzbid0IGltcGxlbWVudCBRdGlDb25kaXRpb25FeHByZXNzaW9uXCIpO1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGxldCB2YWx1ZSA9IGNvbmRpdGlvbi5jYWxjdWxhdGUoKSBhcyBCb29sZWFuO1xuICAgICAgICAvLyBjb252ZXJ0IHN0cmluZyB2YWx1ZSB0byBib29sZWFuIGFuZCByZXR1cm4gbnVsbCBpZiBub3QgcG9zc2libGVcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICBpZiAodmFsdWUgPT09ICd0cnVlJykge1xuICAgICAgICAgICAgdmFsdWUgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT09ICdmYWxzZScpIHtcbiAgICAgICAgICAgIHZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ3VuZXhwZWN0ZWQgdmFsdWUgaW4gcXRpLWFuZCwgZXhwZWN0ZWQgYm9vbGVhbicpO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHZhbHVlcy5ldmVyeShlID0+IHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBlID09PSAnYm9vbGVhbicgJiYgZTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcbn1cbiIsICJpbXBvcnQgeyBRdGlBbmQgfSBmcm9tICcuL3F0aS1hbmQnO1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdxdGktYW5kJywgUXRpQW5kKTtcblxuZXhwb3J0ICogZnJvbSAnLi9xdGktYW5kJztcblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLWFuZCc6IFF0aUFuZDtcbiAgfVxufVxuIiwgImltcG9ydCB7IHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgQmFzZVR5cGUgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbC9leHByZXNzaW9uLXJlc3VsdCc7XG5pbXBvcnQgeyBRdGlFeHByZXNzaW9uIH0gZnJvbSAnLi4vcXRpLWV4cHJlc3Npb24nO1xuZXhwb3J0IGNsYXNzIFF0aUJhc2VWYWx1ZSBleHRlbmRzIFF0aUV4cHJlc3Npb248c3RyaW5nPiB7XG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZywgYXR0cmlidXRlOiAnYmFzZS10eXBlJyB9KSBiYXNlVHlwZTogQmFzZVR5cGUgPSAnc3RyaW5nJztcblxuICBwdWJsaWMgb3ZlcnJpZGUgZ2V0UmVzdWx0KCk6IHN0cmluZyB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLnRleHRDb250ZW50O1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxufVxuXG5jdXN0b21FbGVtZW50cy5kZWZpbmUoJ3F0aS1iYXNlLXZhbHVlJywgUXRpQmFzZVZhbHVlKTtcbiIsICJpbXBvcnQgeyBSZXNwb25zZVZhcmlhYmxlIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWwvdmFyaWFibGVzJztcbmltcG9ydCB7IFF0aUNvbmRpdGlvbkV4cHJlc3Npb24gfSBmcm9tICcuLi9xdGktY29uZGl0aW9uLWV4cHJlc3Npb24nO1xuXG4vLyBQSzogRm9yIHRoZSBjb250YWlucyB3ZSBhc3N1bWUgdGhlIGV4cHJlc3Npb25zIHRvIGNhbGN1bGF0ZSBhcmUgYWxsIGRpcmVjdGVkUGFpcnNcbi8vIEkgZG9uJ3Qga25vdyBpdCB0aGlzIGluIFFUSSBpcyBhbHdheXMgdGhlIGNhc2UgaG93ZXZlcj9cbmV4cG9ydCBjbGFzcyBRdGlDb250YWlucyBleHRlbmRzIFF0aUNvbmRpdGlvbkV4cHJlc3Npb24ge1xuICBwdWJsaWMgb3ZlcnJpZGUgZ2V0UmVzdWx0KCkge1xuICAgIC8vIFRPRE86IGltcGxlbWVudCB0aGlzIGZvciBvdGhlciB0eXBlcyB0aGFuIGRpcmVjdGVkUGFpclxuICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMuZ2V0VmFyaWFibGVzKCkgYXMgUmVzcG9uc2VWYXJpYWJsZVtdO1xuICAgIGlmICh0aGlzLmNoaWxkcmVuLmxlbmd0aCA9PT0gMikge1xuICAgICAgY29uc3QgdmFsdWUxID0gdmFsdWVzWzBdO1xuICAgICAgY29uc3QgdmFsdWUyID0gdmFsdWVzWzFdO1xuICAgICAgaWYgKFxuICAgICAgICB2YWx1ZTEuYmFzZVR5cGUgPT09ICdkaXJlY3RlZFBhaXInICYmXG4gICAgICAgIHZhbHVlMi5iYXNlVHlwZSA9PT0gJ2RpcmVjdGVkUGFpcicgJiZcbiAgICAgICAgdmFsdWUxLmNhcmRpbmFsaXR5ID09PSAnbXVsdGlwbGUnXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgcHJvamVjdGlvbjEgPSB2YWx1ZTEudmFsdWUgYXMgc3RyaW5nW107XG4gICAgICAgIGNvbnN0IHByb2plY3Rpb24yID0gdmFsdWUyLnZhbHVlIGFzIHN0cmluZ1tdO1xuICAgICAgICBjb25zdCBlbnVtZXJhYmxlID0gcHJvamVjdGlvbjEuZmlsdGVyKHggPT4gcHJvamVjdGlvbjIuaW5jbHVkZXMoeCkpO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGVudW1lcmFibGUubGVuZ3RoID4gMDtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIHZhbHVlMS5iYXNlVHlwZSA9PT0gJ2RpcmVjdGVkUGFpcicgJiZcbiAgICAgICAgdmFsdWUyLmJhc2VUeXBlID09PSAnZGlyZWN0ZWRQYWlyJyAmJlxuICAgICAgICB2YWx1ZTEuY2FyZGluYWxpdHkgPT09ICdzaW5nbGUnXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgcHJvamVjdGlvbjEgPSB2YWx1ZTEudmFsdWUgYXMgc3RyaW5nO1xuICAgICAgICBjb25zdCBwcm9qZWN0aW9uMiA9IHZhbHVlMi52YWx1ZSBhcyBzdHJpbmdbXTtcbiAgICAgICAgcmV0dXJuIHByb2plY3Rpb24yLmluY2x1ZGVzKHByb2plY3Rpb24xKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgJ3Vuc3VwcG9ydGVkIGJhc2VUeXBlIG9yIGNhcmRpbmFsaXR5IGluIHF0aSBjb250YWlucywgb25seSBiYXNlVHlwZTogZGlyZWN0ZWRQYWlyIGFuZCBjYXJkaW5hbGl0eTogbXVsdGlwbGUgaXMgc3VwcG9ydGVkJ1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmVycm9yKCd1bmV4cGVjdGVkIG51bWJlciBvZiBjaGlsZHJlbiBpbiBxdGkgY29udGFpbnMnKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmN1c3RvbUVsZW1lbnRzLmRlZmluZSgncXRpLWNvbnRhaW5zJywgUXRpQ29udGFpbnMpO1xuIiwgImltcG9ydCB7IFF0aUFzc2Vzc21lbnRJdGVtIH0gZnJvbSAnLi4vLi4vLi4vcXRpLWFzc2Vzc21lbnQtaXRlbS9xdGktYXNzZXNzbWVudC1pdGVtJztcbmltcG9ydCB7IFF0aUV4cHJlc3Npb24gfSBmcm9tICcuLi9xdGktZXhwcmVzc2lvbic7XG5cbmV4cG9ydCBjbGFzcyBRdGlDb3JyZWN0IGV4dGVuZHMgUXRpRXhwcmVzc2lvbjxzdHJpbmcgfCBzdHJpbmdbXT4ge1xuICBnZXQgaW50ZXJwcmV0YXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0QXR0cmlidXRlKCdpbnRlcnByZXRhdGlvbicpIHx8ICcnO1xuICB9XG5cbiAgb3ZlcnJpZGUgZ2V0UmVzdWx0KCkge1xuICAgIGNvbnN0IGlkZW50aWZpZXIgPSB0aGlzLmdldEF0dHJpYnV0ZSgnaWRlbnRpZmllcicpIHx8ICcnO1xuICAgIGNvbnN0IHJlc3BvbnNlVmFyaWFibGUgPSAodGhpcy5jbG9zZXN0KCdxdGktYXNzZXNzbWVudC1pdGVtJykgYXMgUXRpQXNzZXNzbWVudEl0ZW0pLmdldFJlc3BvbnNlKGlkZW50aWZpZXIpO1xuICAgIHJlc3BvbnNlVmFyaWFibGUuY29ycmVjdFJlc3BvbnNlO1xuICAgIGlmIChyZXNwb25zZVZhcmlhYmxlLmNhcmRpbmFsaXR5ICE9PSAnc2luZ2xlJykge1xuICAgICAgcmV0dXJuIHJlc3BvbnNlVmFyaWFibGUuY29ycmVjdFJlc3BvbnNlLmxlbmd0aCA+IDAgPyByZXNwb25zZVZhcmlhYmxlLmNvcnJlY3RSZXNwb25zZVswXSA6ICcnO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gcmVzcG9uc2VWYXJpYWJsZS5jb3JyZWN0UmVzcG9uc2U7XG4gICAgfVxuICB9XG59XG5cbmN1c3RvbUVsZW1lbnRzLmRlZmluZSgncXRpLWNvcnJlY3QnLCBRdGlDb3JyZWN0KTtcbiIsICJpbXBvcnQgeyBwcm9wZXJ0eSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IFJlc3BvbnNlVmFyaWFibGUgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbC92YXJpYWJsZXMnO1xuaW1wb3J0IHsgUXRpRXhwcmVzc2lvbiB9IGZyb20gJy4uL3F0aS1leHByZXNzaW9uJztcblxuZXhwb3J0IGNsYXNzIFF0aUVxdWFsUm91bmRlZCBleHRlbmRzIFF0aUV4cHJlc3Npb248Ym9vbGVhbj4ge1xuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcgfSkgcm91bmRpbmdNb2RlOiAnZGVjaW1hbFBsYWNlcycgfCAnc2lnbmlmaWNhbnRGaWd1cmVzJyA9ICdzaWduaWZpY2FudEZpZ3VyZXMnO1xuXG4gIGdldCBmaWd1cmVzKCkge1xuICAgIGNvbnN0IGF0dHIgPSB0aGlzLmdldEF0dHJpYnV0ZSgnZmlndXJlcycpO1xuICAgIGlmICghYXR0cikge1xuICAgICAgY29uc29sZS5lcnJvcignZmlndXJlcyBhdHRyaWJ1dGUgaXMgbWlzc2luZycpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IGZpZ3VyZXMgPSBwYXJzZUludCh0aGlzLmdldEF0dHJpYnV0ZSgnZmlndXJlcycpIHx8ICcwJyk7XG4gICAgaWYgKGlzTmFOKGZpZ3VyZXMpKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdmaWd1cmVzIGF0dHJpYnV0ZSBpcyBub3QgYSBudW1iZXInKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBpZiAoZmlndXJlcyA8IDApIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ2ZpZ3VyZXMgYXR0cmlidXRlIGlzIG5lZ2F0aXZlJyk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgaWYgKGZpZ3VyZXMgPCAxICYmIHRoaXMucm91bmRpbmdNb2RlID09PSAnc2lnbmlmaWNhbnRGaWd1cmVzJykge1xuICAgICAgY29uc29sZS5lcnJvcignZmlndXJlcyBjYW5ub3QgYmUgc21hbGxlciB0aGFuIDEgZm9yIFJvdW5kaW5nTW9kZSBzaWduaWZpY2FudEZpZ3VyZXMnKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gZmlndXJlcztcbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBnZXRSZXN1bHQoKSB7XG4gICAgaWYgKHRoaXMuY2hpbGRyZW4ubGVuZ3RoID09PSAyKSB7XG4gICAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLmdldFZhcmlhYmxlcygpIGFzIFJlc3BvbnNlVmFyaWFibGVbXTtcbiAgICAgIGNvbnN0IHZhbHVlMSA9IHZhbHVlc1swXTtcbiAgICAgIGNvbnN0IHZhbHVlMiA9IHZhbHVlc1sxXTtcbiAgICAgIGlmICh0aGlzLnJvdW5kaW5nTW9kZSA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgdmFsdWUxLmNhcmRpbmFsaXR5ICE9PSAnc2luZ2xlJyB8fFxuICAgICAgICB2YWx1ZTIuY2FyZGluYWxpdHkgIT09ICdzaW5nbGUnIHx8XG4gICAgICAgIEFycmF5LmlzQXJyYXkodmFsdWUxLnZhbHVlKSB8fFxuICAgICAgICBBcnJheS5pc0FycmF5KHZhbHVlMi52YWx1ZSlcbiAgICAgICkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCd1bmV4cGVjdGVkIGNhcmRpbmFsaXR5IGluIHF0aSBlcXVhbCcpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBzd2l0Y2ggKHZhbHVlc1swXS5iYXNlVHlwZSkge1xuICAgICAgICBjYXNlICdpbnRlZ2VyJzpcbiAgICAgICAgY2FzZSAnZmxvYXQnOiB7XG4gICAgICAgICAgY29uc3QgZmxvYXQxID0gcGFyc2VGbG9hdCh2YWx1ZTEudmFsdWUgYXMgc3RyaW5nKTtcbiAgICAgICAgICBjb25zdCBmbG9hdDIgPSBwYXJzZUZsb2F0KHZhbHVlMi52YWx1ZSBhcyBzdHJpbmcpO1xuXG4gICAgICAgICAgaWYgKCFpc05hTihmbG9hdDEpICYmICFpc05hTihmbG9hdDIpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5yb3VuZGluZ01vZGUgPT09ICdzaWduaWZpY2FudEZpZ3VyZXMnKSB7XG4gICAgICAgICAgICAgIHJldHVybiBmbG9hdDEudG9QcmVjaXNpb24odGhpcy5maWd1cmVzKSA9PT0gZmxvYXQyLnRvUHJlY2lzaW9uKHRoaXMuZmlndXJlcyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIE1hdGgucm91bmQoZmxvYXQxICogTWF0aC5wb3coMTAsIHRoaXMuZmlndXJlcykpIC8gTWF0aC5wb3coMTAsIHRoaXMuZmlndXJlcykgPT09XG4gICAgICAgICAgICAgICAgTWF0aC5yb3VuZChmbG9hdDIgKiBNYXRoLnBvdygxMCwgdGhpcy5maWd1cmVzKSkgLyBNYXRoLnBvdygxMCwgdGhpcy5maWd1cmVzKVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGB2YWx1ZSBjYW5ub3QgYmUgY2FzdGVkIHRvIG51bWVyaWMgdmFsdWUgaW4gZXF1YWxSb3VuZGVkIG9wZXJhdG9yOiAke2Zsb2F0MX0sICR7ZmxvYXQyfWApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihgdmFsdWVzIG90aGVyIHRoYW4gZmxvYXQgYW5kIGludCBjYW5ub3QgYmUgdXNlZCBpbiBlcXVhbFJvdW5kZWQgb3BlcmF0b3IuYCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc29sZS5lcnJvcigndW5leHBlY3RlZCBudW1iZXIgb2YgY2hpbGRyZW4gaW4gcXRpLWVxdWFsLXJvdW5kZWQnKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5jdXN0b21FbGVtZW50cy5kZWZpbmUoJ3F0aS1lcXVhbC1yb3VuZGVkJywgUXRpRXF1YWxSb3VuZGVkKTtcbiIsICJpbXBvcnQgeyBwcm9wZXJ0eSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IFJlc3BvbnNlVmFyaWFibGUgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbC92YXJpYWJsZXMnO1xuaW1wb3J0IHsgU2NvcmluZ0hlbHBlciB9IGZyb20gJy4uLy4uL3V0aWxpdGllcy9zY29yaW5nLWhlbHBlcic7XG5pbXBvcnQgeyBRdGlFeHByZXNzaW9uIH0gZnJvbSAnLi4vcXRpLWV4cHJlc3Npb24nO1xuXG5leHBvcnQgY2xhc3MgUXRpRXF1YWwgZXh0ZW5kcyBRdGlFeHByZXNzaW9uPGJvb2xlYW4+IHtcbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nIH0pIHRvbGVyYW5jZU1vZGU6ICdleGFjdCcgfCAncmVsYXRpdmUnIHwgJ2Fic29sdXRlJyA9ICdleGFjdCc7XG5cbiAgcHVibGljIG92ZXJyaWRlIGdldFJlc3VsdCgpIHtcbiAgICBpZiAodGhpcy5jaGlsZHJlbi5sZW5ndGggPT09IDIpIHtcbiAgICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMuZ2V0VmFyaWFibGVzKCkgYXMgUmVzcG9uc2VWYXJpYWJsZVtdO1xuICAgICAgY29uc3QgdmFsdWUxID0gdmFsdWVzWzBdO1xuICAgICAgY29uc3QgdmFsdWUyID0gdmFsdWVzWzFdO1xuICAgICAgaWYgKHRoaXMudG9sZXJhbmNlTW9kZSAhPT0gJ2V4YWN0Jykge1xuICAgICAgICBjb25zb2xlLmVycm9yKCd0b2xlcmFuY2VNb2RlIGlzIG5vdCBzdXBwb3J0ZWQgeWV0Jyk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgdmFsdWUxLmNhcmRpbmFsaXR5ICE9PSAnc2luZ2xlJyB8fFxuICAgICAgICB2YWx1ZTIuY2FyZGluYWxpdHkgIT09ICdzaW5nbGUnIHx8XG4gICAgICAgIEFycmF5LmlzQXJyYXkodmFsdWUxLnZhbHVlKSB8fFxuICAgICAgICBBcnJheS5pc0FycmF5KHZhbHVlMi52YWx1ZSlcbiAgICAgICkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCd1bmV4cGVjdGVkIGNhcmRpbmFsaXR5IGluIHF0aSBlcXVhbCcpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gU2NvcmluZ0hlbHBlci5jb21wYXJlU2luZ2xlVmFsdWVzKHZhbHVlMS52YWx1ZSBhcyBzdHJpbmcsIHZhbHVlMi52YWx1ZSBhcyBzdHJpbmcsIHZhbHVlMS5iYXNlVHlwZSk7XG4gICAgfVxuICAgIGNvbnNvbGUuZXJyb3IoJ3VuZXhwZWN0ZWQgbnVtYmVyIG9mIGNoaWxkcmVuIGluIHF0aS1lcXVhbCcpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmN1c3RvbUVsZW1lbnRzLmRlZmluZSgncXRpLWVxdWFsJywgUXRpRXF1YWwpO1xuIiwgImltcG9ydCB7IEJhc2VUeXBlIH0gZnJvbSAnLi4vLi4nO1xuXG5leHBvcnQgY2xhc3MgU2NvcmluZ0hlbHBlciB7XG4gIHB1YmxpYyBzdGF0aWMgY29tcGFyZVNpbmdsZVZhbHVlcyh2YWx1ZTE6IFJlYWRvbmx5PHN0cmluZz4sIHZhbHVlMjogUmVhZG9ubHk8c3RyaW5nPiwgYmFzZVR5cGU6IEJhc2VUeXBlKTogYm9vbGVhbiB7XG4gICAgc3dpdGNoIChiYXNlVHlwZSkge1xuICAgICAgY2FzZSAnaWRlbnRpZmllcic6XG4gICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICByZXR1cm4gdmFsdWUxID09PSB2YWx1ZTI7XG4gICAgICBjYXNlICdpbnRlZ2VyJzoge1xuICAgICAgICBjb25zdCBpbnQxID0gcGFyc2VJbnQodmFsdWUxLCAxMCk7XG4gICAgICAgIGNvbnN0IGludDIgPSBwYXJzZUludCh2YWx1ZTIsIDEwKTtcbiAgICAgICAgaWYgKCFpc05hTihpbnQxKSAmJiAhaXNOYU4oaW50MikpIHtcbiAgICAgICAgICByZXR1cm4gaW50MSA9PT0gaW50MjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGBDYW5ub3QgY29udmVydCAke3ZhbHVlMX0gYW5kL29yICR7dmFsdWUyfSB0byBpbnQuYCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdmbG9hdCc6IHtcbiAgICAgICAgY29uc3QgZmxvYXQxID0gcGFyc2VGbG9hdCh2YWx1ZTEpO1xuICAgICAgICBjb25zdCBmbG9hdDIgPSBwYXJzZUZsb2F0KHZhbHVlMik7XG4gICAgICAgIGlmICghaXNOYU4oZmxvYXQxKSAmJiAhaXNOYU4oZmxvYXQyKSkge1xuICAgICAgICAgIHJldHVybiBmbG9hdDEgPT09IGZsb2F0MjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGBjb3VsZG4ndCBjb252ZXJ0ICR7dmFsdWUxfSBhbmQvb3IgJHt2YWx1ZTJ9IHRvIGZsb2F0LmApO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAncGFpcic6XG4gICAgICBjYXNlICdkaXJlY3RlZFBhaXInOiB7XG4gICAgICAgIGNvbnN0IHBhaXIxID0gdmFsdWUxLnNwbGl0KCcgJykuc29ydCgpO1xuICAgICAgICBjb25zdCBwYWlyMiA9IHZhbHVlMi5zcGxpdCgnICcpLnNvcnQoKTtcbiAgICAgICAgaWYgKHBhaXIxLmxlbmd0aCA9PT0gMiAmJiBwYWlyMi5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICBpZiAoYmFzZVR5cGUgPT09ICdwYWlyJykge1xuICAgICAgICAgICAgcGFpcjEuc29ydCgpO1xuICAgICAgICAgICAgcGFpcjIuc29ydCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcGFpcjEuam9pbignICcpID09PSBwYWlyMi5qb2luKCcgJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihgY29tcGFyZWQgdHdvIHBhaXIgYnV0IG9uZSBvZiB0aGUgdmFsdWVzIGRvZXMgbm90IGhhdmUgMiB2YWx1ZXM6IDE6ICR7dmFsdWUxfSAyOiAke3ZhbHVlMn1gKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBSZXNwb25zZVZhcmlhYmxlIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWwvdmFyaWFibGVzJztcbmltcG9ydCB7IFF0aUV4cHJlc3Npb24gfSBmcm9tICcuLi9xdGktZXhwcmVzc2lvbic7XG5cbmV4cG9ydCBjbGFzcyBRdGlHdCBleHRlbmRzIFF0aUV4cHJlc3Npb248Ym9vbGVhbj4ge1xuICBwdWJsaWMgb3ZlcnJpZGUgZ2V0UmVzdWx0KCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmNoaWxkcmVuLmxlbmd0aCA9PT0gMikge1xuICAgICAgY29uc3QgdmFsdWVzID0gdGhpcy5nZXRWYXJpYWJsZXMoKSBhcyBSZXNwb25zZVZhcmlhYmxlW107XG4gICAgICBjb25zdCB2YWx1ZTEgPSB2YWx1ZXNbMF07XG4gICAgICBjb25zdCB2YWx1ZTIgPSB2YWx1ZXNbMV07XG4gICAgICBpZiAodmFsdWUxLmJhc2VUeXBlID09PSB2YWx1ZTIuYmFzZVR5cGUgJiYgKHZhbHVlMS5iYXNlVHlwZSA9PT0gJ2ludGVnZXInIHx8IHZhbHVlMS5iYXNlVHlwZSA9PT0gJ2Zsb2F0JykpIHtcbiAgICAgICAgcmV0dXJuICt2YWx1ZTEudmFsdWUgPiArdmFsdWUyLnZhbHVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5lcnJvcigndW5leHBlY3RlZCBiYXNlVHlwZSBvciBjYXJkaW5hbGl0eSBpbiBxdGkgZ3QnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc29sZS5lcnJvcigndW5leHBlY3RlZCBudW1iZXIgb2YgY2hpbGRyZW4gaW4gcXQnKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5jdXN0b21FbGVtZW50cy5kZWZpbmUoJ3F0aS1ndCcsIFF0aUd0KTtcbiIsICJpbXBvcnQgeyBSZXNwb25zZVZhcmlhYmxlIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWwvdmFyaWFibGVzJztcbmltcG9ydCB7IFF0aUNvbmRpdGlvbkV4cHJlc3Npb24gfSBmcm9tICcuLi9xdGktY29uZGl0aW9uLWV4cHJlc3Npb24nO1xuXG4vLyBQSzogRm9yIHRoZSBjb250YWlucyB3ZSBhc3N1bWUgdGhlIGV4cHJlc3Npb25zIHRvIGNhbGN1bGF0ZSBhcmUgYWxsIGRpcmVjdGVkUGFpcnNcbi8vIEkgZG9uJ3Qga25vdyBpdCB0aGlzIGluIFFUSSBpcyBhbHdheXMgdGhlIGNhc2UgaG93ZXZlcj9cbmV4cG9ydCBjbGFzcyBRdGlHdGUgZXh0ZW5kcyBRdGlDb25kaXRpb25FeHByZXNzaW9uIHtcbiAgcHVibGljIG92ZXJyaWRlIGdldFJlc3VsdCgpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5jaGlsZHJlbi5sZW5ndGggPT09IDIpIHtcbiAgICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMuZ2V0VmFyaWFibGVzKCkgYXMgUmVzcG9uc2VWYXJpYWJsZVtdO1xuICAgICAgY29uc3QgdmFsdWUxID0gdmFsdWVzWzBdO1xuICAgICAgY29uc3QgdmFsdWUyID0gdmFsdWVzWzFdO1xuICAgICAgaWYgKHZhbHVlMS5iYXNlVHlwZSA9PT0gdmFsdWUyLmJhc2VUeXBlICYmICh2YWx1ZTEuYmFzZVR5cGUgPT09ICdpbnRlZ2VyJyB8fCB2YWx1ZTEuYmFzZVR5cGUgPT09ICdmbG9hdCcpKSB7XG4gICAgICAgIHJldHVybiArdmFsdWUxLnZhbHVlID49ICt2YWx1ZTIudmFsdWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmVycm9yKCd1bmV4cGVjdGVkIGJhc2VUeXBlIG9yIGNhcmRpbmFsaXR5IGluIHF0aSBndGUnKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnNvbGUubG9nKCd1bmV4cGVjdGVkIG51bWJlciBvZiBjaGlsZHJlbiBpbiBxdGUnKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5jdXN0b21FbGVtZW50cy5kZWZpbmUoJ3F0aS1ndGUnLCBRdGlHdGUpO1xuIiwgImltcG9ydCB7IFJlc3BvbnNlVmFyaWFibGUgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbC92YXJpYWJsZXMnO1xuaW1wb3J0IHsgUXRpRXhwcmVzc2lvbiB9IGZyb20gJy4uL3F0aS1leHByZXNzaW9uJztcblxuLy8gUEs6IEZvciB0aGUgY29udGFpbnMgd2UgYXNzdW1lIHRoZSBleHByZXNzaW9ucyB0byBjYWxjdWxhdGUgYXJlIGFsbCBkaXJlY3RlZFBhaXJzXG4vLyBJIGRvbid0IGtub3cgaXQgdGhpcyBpbiBRVEkgaXMgYWx3YXlzIHRoZSBjYXNlIGhvd2V2ZXI/XG5leHBvcnQgY2xhc3MgUXRpSXNOdWxsIGV4dGVuZHMgUXRpRXhwcmVzc2lvbjxib29sZWFuPiB7XG4gIHB1YmxpYyBvdmVycmlkZSBnZXRSZXN1bHQoKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuY2hpbGRyZW4ubGVuZ3RoID09PSAxKSB7XG4gICAgICBjb25zdCB2YXJpYWJsZXMgPSB0aGlzLmdldFZhcmlhYmxlcygpIGFzIFJlc3BvbnNlVmFyaWFibGVbXTtcbiAgICAgIGlmICghdmFyaWFibGVzKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgdmFsdWUgPSB2YXJpYWJsZXNbMF0udmFsdWU7XG4gICAgICByZXR1cm4gdmFsdWUgPT0gbnVsbCB8fCB2YWx1ZSA9PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09ICcnO1xuICAgIH1cbiAgICBjb25zb2xlLmVycm9yKCd1bmV4cGVjdGVkIG51bWJlciBvZiBjaGlsZHJlbiBpbiBxdGkgTnVsbCcpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmN1c3RvbUVsZW1lbnRzLmRlZmluZSgncXRpLWlzLW51bGwnLCBRdGlJc051bGwpO1xuIiwgImltcG9ydCB7IFJlc3BvbnNlVmFyaWFibGUgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbC92YXJpYWJsZXMnO1xuaW1wb3J0IHsgUXRpRXhwcmVzc2lvbiB9IGZyb20gJy4uL3F0aS1leHByZXNzaW9uJztcblxuZXhwb3J0IGNsYXNzIFF0aUx0IGV4dGVuZHMgUXRpRXhwcmVzc2lvbjxib29sZWFuPiB7XG4gIHB1YmxpYyBvdmVycmlkZSBnZXRSZXN1bHQoKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuY2hpbGRyZW4ubGVuZ3RoID09PSAyKSB7XG4gICAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLmdldFZhcmlhYmxlcygpIGFzIFJlc3BvbnNlVmFyaWFibGVbXTtcbiAgICAgIGNvbnN0IHZhbHVlMSA9IHZhbHVlc1swXTtcbiAgICAgIGNvbnN0IHZhbHVlMiA9IHZhbHVlc1sxXTtcbiAgICAgIGlmICh2YWx1ZTEuYmFzZVR5cGUgPT09IHZhbHVlMi5iYXNlVHlwZSAmJiAodmFsdWUxLmJhc2VUeXBlID09PSAnaW50ZWdlcicgfHwgdmFsdWUxLmJhc2VUeXBlID09PSAnZmxvYXQnKSkge1xuICAgICAgICByZXR1cm4gK3ZhbHVlMS52YWx1ZSA8ICt2YWx1ZTIudmFsdWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmVycm9yKCd1bmV4cGVjdGVkIGJhc2VUeXBlIG9yIGNhcmRpbmFsaXR5IGluIHF0aSBsdCcpO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zb2xlLmVycm9yKCd1bmV4cGVjdGVkIG51bWJlciBvZiBjaGlsZHJlbiBpbiBsdCcpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmN1c3RvbUVsZW1lbnRzLmRlZmluZSgncXRpLWx0JywgUXRpTHQpO1xuIiwgImltcG9ydCB7IFJlc3BvbnNlVmFyaWFibGUgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbC92YXJpYWJsZXMnO1xuaW1wb3J0IHsgUXRpQ29uZGl0aW9uRXhwcmVzc2lvbiB9IGZyb20gJy4uL3F0aS1jb25kaXRpb24tZXhwcmVzc2lvbic7XG5cbi8vIFBLOiBGb3IgdGhlIGNvbnRhaW5zIHdlIGFzc3VtZSB0aGUgZXhwcmVzc2lvbnMgdG8gY2FsY3VsYXRlIGFyZSBhbGwgZGlyZWN0ZWRQYWlyc1xuLy8gSSBkb24ndCBrbm93IGl0IHRoaXMgaW4gUVRJIGlzIGFsd2F5cyB0aGUgY2FzZSBob3dldmVyP1xuZXhwb3J0IGNsYXNzIFF0aUx0ZSBleHRlbmRzIFF0aUNvbmRpdGlvbkV4cHJlc3Npb24ge1xuICBwdWJsaWMgb3ZlcnJpZGUgZ2V0UmVzdWx0KCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmNoaWxkcmVuLmxlbmd0aCA9PT0gMikge1xuICAgICAgY29uc3QgdmFsdWVzID0gdGhpcy5nZXRWYXJpYWJsZXMoKSBhcyBSZXNwb25zZVZhcmlhYmxlW107XG4gICAgICBjb25zdCB2YWx1ZTEgPSB2YWx1ZXNbMF07XG4gICAgICBjb25zdCB2YWx1ZTIgPSB2YWx1ZXNbMV07XG4gICAgICBpZiAodmFsdWUxLmJhc2VUeXBlID09PSB2YWx1ZTIuYmFzZVR5cGUgJiYgKHZhbHVlMS5iYXNlVHlwZSA9PT0gJ2ludGVnZXInIHx8IHZhbHVlMS5iYXNlVHlwZSA9PT0gJ2Zsb2F0JykpIHtcbiAgICAgICAgcmV0dXJuICt2YWx1ZTEudmFsdWUgPD0gK3ZhbHVlMi52YWx1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ3VuZXhwZWN0ZWQgYmFzZVR5cGUgb3IgY2FyZGluYWxpdHkgaW4gcXRpIGx0ZScpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc29sZS5sb2coJ3VuZXhwZWN0ZWQgbnVtYmVyIG9mIGNoaWxkcmVuIGluIGx0ZScpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmN1c3RvbUVsZW1lbnRzLmRlZmluZSgncXRpLWx0ZScsIFF0aUx0ZSk7XG4iLCAiaW1wb3J0IHsgcHJvcGVydHkgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBTY29yaW5nSGVscGVyIH0gZnJvbSAnLi4vLi4vdXRpbGl0aWVzL3Njb3JpbmctaGVscGVyJztcbmltcG9ydCB7IFF0aUV4cHJlc3Npb24gfSBmcm9tICcuLi9xdGktZXhwcmVzc2lvbic7XG5cbmV4cG9ydCBjbGFzcyBRdGlNYXBSZXNwb25zZSBleHRlbmRzIFF0aUV4cHJlc3Npb248bnVtYmVyPiB7XG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZyB9KSBpZGVudGlmaWVyOiBzdHJpbmc7XG5cbiAgcHVibGljIG92ZXJyaWRlIGdldFJlc3VsdCgpOiBudW1iZXIge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gdGhpcy5hc3Nlc3NtZW50SXRlbS5nZXRSZXNwb25zZSh0aGlzLmlkZW50aWZpZXIpO1xuICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgIGNvbnNvbGUud2FybihgUmVzcG9uc2UgJHt0aGlzLmlkZW50aWZpZXJ9IGNhbiBub3QgYmUgZm91bmRgKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBtYXBwaW5nID0gcmVzcG9uc2UubWFwcGluZztcbiAgICBjb25zdCBjYW5kaWRhdGVSZXNwb25zZXMgPSAhQXJyYXkuaXNBcnJheShyZXNwb25zZS52YWx1ZSkgPyBbcmVzcG9uc2UudmFsdWVdIDogcmVzcG9uc2UudmFsdWU7XG4gICAgbGV0IHJlc3VsdCA9IDA7XG4gICAgZm9yIChjb25zdCBjYW5kaWRhdGVSZXNwb25zZSBvZiBjYW5kaWRhdGVSZXNwb25zZXMpIHtcbiAgICAgIGNvbnN0IG1hcHBlZFZhbHVlID0gbWFwcGluZy5tYXBFbnRyaWVzLmZpbmQoZW50cnkgPT4ge1xuICAgICAgICByZXR1cm4gU2NvcmluZ0hlbHBlci5jb21wYXJlU2luZ2xlVmFsdWVzKGVudHJ5Lm1hcEtleSwgY2FuZGlkYXRlUmVzcG9uc2UsIHJlc3BvbnNlLmJhc2VUeXBlKTtcbiAgICAgIH0pO1xuICAgICAgaWYgKCEobWFwcGVkVmFsdWUgPT0gbnVsbCB8fCBtYXBwZWRWYWx1ZS5tYXBwZWRWYWx1ZSA9PSB1bmRlZmluZWQpKSB7XG4gICAgICAgIHJlc3VsdCArPSBtYXBwZWRWYWx1ZS5tYXBwZWRWYWx1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdCArPSBtYXBwaW5nLmRlZmF1bHRWYWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKG1hcHBpbmcubG93ZXJCb3VuZCAhPSBudWxsKSB7XG4gICAgICByZXN1bHQgPSBNYXRoLm1heChtYXBwaW5nLmxvd2VyQm91bmQsIHJlc3VsdCk7XG4gICAgfVxuICAgIGlmIChtYXBwaW5nLnVwcGVyQm91bmQgIT0gbnVsbCkge1xuICAgICAgcmVzdWx0ID0gTWF0aC5taW4obWFwcGluZy51cHBlckJvdW5kLCByZXN1bHQpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59XG5cbmN1c3RvbUVsZW1lbnRzLmRlZmluZSgncXRpLW1hcC1yZXNwb25zZScsIFF0aU1hcFJlc3BvbnNlKTtcbiIsICJpbXBvcnQgeyBwcm9wZXJ0eSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IExpdEVsZW1lbnQgfSBmcm9tICdsaXQnO1xuXG5leHBvcnQgY2xhc3MgUXRpTWFwcGluZyBleHRlbmRzIExpdEVsZW1lbnQge1xuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdkZWZhdWx0LXZhbHVlJywgdHlwZTogTnVtYmVyIH0pIGRlZmF1bHRWYWx1ZTogbnVtYmVyID0gMDtcbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAnbG93ZXItYm91bmQnLCB0eXBlOiBOdW1iZXIgfSkgbG93ZXJCb3VuZDogbnVtYmVyO1xuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICd1cHBlci1ib3VuZCcsIHR5cGU6IE51bWJlciB9KSB1cHBlckJvdW5kOiBudW1iZXI7XG5cbiAgcHVibGljIGdldCBtYXBFbnRyaWVzKCkge1xuICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMucXVlcnlTZWxlY3RvckFsbCgncXRpLW1hcC1lbnRyeScpKS5tYXAoZWwgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbWFwS2V5OiBlbC5nZXRBdHRyaWJ1dGUoJ21hcC1rZXknKSxcbiAgICAgICAgbWFwcGVkVmFsdWU6ICtlbC5nZXRBdHRyaWJ1dGUoJ21hcHBlZC12YWx1ZScpXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG59XG5cbmN1c3RvbUVsZW1lbnRzLmRlZmluZSgncXRpLW1hcHBpbmcnLCBRdGlNYXBwaW5nKTtcbiIsICJpbXBvcnQgeyBSZXNwb25zZVZhcmlhYmxlIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWwvdmFyaWFibGVzJztcbmltcG9ydCB7IFNjb3JpbmdIZWxwZXIgfSBmcm9tICcuLi8uLi91dGlsaXRpZXMvc2NvcmluZy1oZWxwZXInO1xuaW1wb3J0IHsgUXRpRXhwcmVzc2lvbiB9IGZyb20gJy4uL3F0aS1leHByZXNzaW9uJztcblxuZXhwb3J0IGNsYXNzIFF0aU1hdGNoIGV4dGVuZHMgUXRpRXhwcmVzc2lvbjxib29sZWFuPiB7XG4gIC8vUEsgOiBGSVhNRS5cbiAgLy8gVGhpcyB3YXMgYSBsaXR0bGUgZXhwZXJpbWVudCBpZiB3ZSBjb3VsZCBjYWxsIHRoZSBtYXRjaCBmdW5jdGlvbiBhcyBhIHN0YXRpYyBmdW5jdGlvbixcbiAgLy8gVGhpcyBjYW4gYmUgdXNlZCBmb3IgYWxsIGtpbmQgb2YgdGhpbmdzLCBidXQgbm93IGVzcGVjaWFsbHkgZm9yIHVzZSBpblxuICAvLyBxdGktcmVzcG9uc2UtY29uZGl0aW9uLXNjcmlwdFxuICAvLyBpbiB3aGljaCB3ZSBwYXNzIHRoZSBleHByZXNzaW9ucyBhcyBwdXJlIGZ1bmN0aW9ucywgYW5kIGhvcGUgZm9yIHRoZSBiZXN0LlxuICAvLyBTQURMWSwgdGhlIGdldFZhcmlhYmxlcyB0aHJvd3Mgcm9ldCBpbiBkZSBldGVuLi4gd2VldCBub2cgbmlldCBwcmVjaWVzIGhvZSBkZXplIHdlcmt0LlxuICAvLyBNYWFyIGlrIGdhIGVyaW4gZHVpa2VuLlxuICBwdWJsaWMgb3ZlcnJpZGUgZ2V0UmVzdWx0KCkge1xuICAgIGlmICh0aGlzLmNoaWxkcmVuLmxlbmd0aCA9PT0gMikge1xuICAgICAgY29uc3QgdmFsdWVzID0gdGhpcy5nZXRWYXJpYWJsZXMoKSBhcyBSZXNwb25zZVZhcmlhYmxlW107XG4gICAgICBjb25zdCB2YWx1ZVRvTWFwID0gdmFsdWVzWzBdO1xuICAgICAgY29uc3QgY29ycmVjdFZhbHVlSW5mbyA9IHZhbHVlc1sxXTtcbiAgICAgIHJldHVybiBRdGlNYXRjaC5tYXRjaCh2YWx1ZVRvTWFwLCBjb3JyZWN0VmFsdWVJbmZvKTtcbiAgICB9XG5cbiAgICBjb25zb2xlLmVycm9yKCd1bmV4cGVjdGVkIG51bWJlciBvZiBjaGlsZHJlbiBpbiBtYXRjaCcpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBtYXRjaCh2YWx1ZVRvTWFwOiBSZXNwb25zZVZhcmlhYmxlLCBjb3JyZWN0VmFsdWVJbmZvOiBSZXNwb25zZVZhcmlhYmxlKSB7XG4gICAgc3dpdGNoIChjb3JyZWN0VmFsdWVJbmZvLmNhcmRpbmFsaXR5KSB7XG4gICAgICBjYXNlICdzaW5nbGUnOiB7XG4gICAgICAgIGlmICh2YWx1ZVRvTWFwLnZhbHVlID09PSBudWxsKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlVG9NYXAudmFsdWUpIHx8IEFycmF5LmlzQXJyYXkoY29ycmVjdFZhbHVlSW5mby52YWx1ZSkpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCd1bmV4cGVjdGVkIGNhcmRpbmFsaXR5IGluIHF0aSBtYXRjaCcpO1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gU2NvcmluZ0hlbHBlci5jb21wYXJlU2luZ2xlVmFsdWVzKFxuICAgICAgICAgIHZhbHVlVG9NYXAudmFsdWU/LnRvU3RyaW5nKCksXG4gICAgICAgICAgY29ycmVjdFZhbHVlSW5mby52YWx1ZS50b1N0cmluZygpLFxuICAgICAgICAgIGNvcnJlY3RWYWx1ZUluZm8uYmFzZVR5cGVcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgY2FzZSAnb3JkZXJlZCc6IHtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlVG9NYXAudmFsdWUpIHx8ICFBcnJheS5pc0FycmF5KGNvcnJlY3RWYWx1ZUluZm8udmFsdWUpKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcigndW5leHBlY3RlZCBjYXJkaW5hbGl0eSBpbiBxdGkgbWF0Y2gnKTtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbHVlVG9NYXAudmFsdWUubGVuZ3RoICE9PSBjb3JyZWN0VmFsdWVJbmZvLnZhbHVlLmxlbmd0aCkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbHVlVG9NYXAudmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBTY29yaW5nSGVscGVyLmNvbXBhcmVTaW5nbGVWYWx1ZXMoXG4gICAgICAgICAgICBjb3JyZWN0VmFsdWVJbmZvLnZhbHVlW2ldLFxuICAgICAgICAgICAgdmFsdWVUb01hcC52YWx1ZVtpXSxcbiAgICAgICAgICAgIGNvcnJlY3RWYWx1ZUluZm8uYmFzZVR5cGVcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmICghcmVzdWx0KSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjYXNlICdtdWx0aXBsZSc6IHtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlVG9NYXAudmFsdWUpIHx8ICFBcnJheS5pc0FycmF5KGNvcnJlY3RWYWx1ZUluZm8udmFsdWUpKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcigndW5leHBlY3RlZCBjYXJkaW5hbGl0eSBpbiBxdGkgbWF0Y2gnKTtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbHVlVG9NYXAudmFsdWUubGVuZ3RoICE9PSBjb3JyZWN0VmFsdWVJbmZvLnZhbHVlLmxlbmd0aCkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgYW5zd2VySW5kZXggPSAwO1xuICAgICAgICBmb3IgKGNvbnN0IGNvcnJlY3RBbnN3ZXIgb2YgY29ycmVjdFZhbHVlSW5mby52YWx1ZSkge1xuICAgICAgICAgIGxldCBtYXRjaGluZ1ZhbHVlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgICAgICAgICBjb25zdCBhcnIgPSBbLi4udmFsdWVUb01hcC52YWx1ZV07XG4gICAgICAgICAgZm9yIChjb25zdCBtdiBvZiBhcnIpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IFNjb3JpbmdIZWxwZXIuY29tcGFyZVNpbmdsZVZhbHVlcyhjb3JyZWN0QW5zd2VyLCBtdiwgY29ycmVjdFZhbHVlSW5mby5iYXNlVHlwZSk7XG4gICAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgIG1hdGNoaW5nVmFsdWUgPSBtdjtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChtYXRjaGluZ1ZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAoYXJyIGFzIHN0cmluZ1tdKS5zcGxpY2UoYXJyLmluZGV4T2YobWF0Y2hpbmdWYWx1ZSksIDEpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIGFuc3dlckluZGV4Kys7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ3VuZXhwZWN0ZWQgY2FyZGluYWxpdHkgaW4gcXRpIG1hdGNoJyk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbn1cblxuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdxdGktbWF0Y2gnLCBRdGlNYXRjaCk7XG4iLCAiaW1wb3J0IHsgUmVzcG9uc2VWYXJpYWJsZSB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFsL3ZhcmlhYmxlcyc7XG5pbXBvcnQgeyBRdGlFeHByZXNzaW9uIH0gZnJvbSAnLi4vcXRpLWV4cHJlc3Npb24nO1xuXG5leHBvcnQgY2xhc3MgUXRpTWVtYmVyIGV4dGVuZHMgUXRpRXhwcmVzc2lvbjxib29sZWFuIHwgbnVsbD4ge1xuICBwdWJsaWMgb3ZlcnJpZGUgZ2V0UmVzdWx0KCkge1xuICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMuZ2V0VmFyaWFibGVzKCkgYXMgUmVzcG9uc2VWYXJpYWJsZVtdO1xuXG4gICAgaWYgKCEodGhpcy5jaGlsZHJlbi5sZW5ndGggPT09IDIpKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1RoZSBtZW1iZXIgb3BlcmF0b3IgdGFrZXMgdHdvIHN1Yi1leHByZXNzaW9ucycpO1xuICAgIH1cblxuICAgIGNvbnN0IFt2YWx1ZTEsIHZhbHVlMl0gPSB2YWx1ZXM7XG5cbiAgICBpZiAoISh2YWx1ZTEuYmFzZVR5cGUgPT09IHZhbHVlMi5iYXNlVHlwZSkpIHtcbiAgICAgIGNvbnNvbGUud2FybignV2hpY2ggbXVzdCBib3RoIGhhdmUgdGhlIHNhbWUgYmFzZS10eXBlJyk7XG4gICAgfVxuICAgIGlmICghKHZhbHVlMi5jYXJkaW5hbGl0eSA9PT0gJ211bHRpcGxlJyB8fCB2YWx1ZTIuY2FyZGluYWxpdHkgPT09ICdvcmRlcmVkJykpIHtcbiAgICAgIGNvbnNvbGUud2FybignYW5kIHRoZSBzZWNvbmQgbXVzdCBiZSBhIG11bHRpcGxlIG9yIG9yZGVyZWQgY29udGFpbmVyJyk7XG4gICAgfVxuICAgIGlmICh2YWx1ZTEuYmFzZVR5cGUgPT09ICdmbG9hdCcgfHwgdmFsdWUyLmJhc2VUeXBlID09PSAnZmxvYXQnKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1RoZSBtZW1iZXIgb3BlcmF0b3Igc2hvdWxkIG5vdCBiZSB1c2VkIG9uIHN1Yi1leHByZXNzaW9ucyB3aXRoIGEgYmFzZS10eXBlIG9mIGZsb2F0Jyk7XG4gICAgfVxuICAgIGlmICh2YWx1ZTEuYmFzZVR5cGUgPT09ICdkdXJhdGlvbicgfHwgdmFsdWUyLmJhc2VUeXBlID09PSAnZHVyYXRpb24nKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ0l0IG11c3Qgbm90IGJlIHVzZWQgb24gc3ViLWV4cHJlc3Npb25zIHdpdGggYSBiYXNlLXR5cGUgb2YgZHVyYXRpb24nKTtcbiAgICB9XG5cbiAgICAvLyBJZiBlaXRoZXIgc3ViLWV4cHJlc3Npb24gaXMgTlVMTCB0aGVuIHRoZSByZXN1bHQgb2YgdGhlIG9wZXJhdG9yIGlzIE5VTExcbiAgICBpZiAodmFsdWUxLnZhbHVlID09PSBudWxsIHx8IHZhbHVlMi52YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8gVGhlIHJlc3VsdCBpcyBhIHNpbmdsZSBib29sZWFuIHdpdGggYSB2YWx1ZSBvZiAndHJ1ZScgaWYgdGhlIHZhbHVlIGdpdmVuIGJ5IHRoZSBmaXJzdCBzdWItZXhwcmVzc2lvbiBpcyBpbiB0aGUgY29udGFpbmVyIGRlZmluZWQgYnkgdGhlIHNlY29uZCBzdWItZXhwcmVzc2lvbi5cbiAgICBjb25zdCBwcm9qZWN0aW9uMSA9IHZhbHVlMS52YWx1ZSBhcyBzdHJpbmc7XG4gICAgY29uc3QgcHJvamVjdGlvbjIgPSB2YWx1ZTIudmFsdWUgYXMgc3RyaW5nW107XG4gICAgcmV0dXJuIHByb2plY3Rpb24yLmluY2x1ZGVzKHByb2plY3Rpb24xKTtcbiAgfVxufVxuXG5jdXN0b21FbGVtZW50cy5kZWZpbmUoJ3F0aS1tZW1iZXInLCBRdGlNZW1iZXIpO1xuIiwgImltcG9ydCB7IFJlc3BvbnNlVmFyaWFibGUsIFZhcmlhYmxlRGVjbGFyYXRpb24gfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbC92YXJpYWJsZXMnO1xuaW1wb3J0IHsgUXRpRXhwcmVzc2lvbiB9IGZyb20gJy4uL3F0aS1leHByZXNzaW9uJztcbmV4cG9ydCBjbGFzcyBRdGlNdWx0aXBsZSBleHRlbmRzIFF0aUV4cHJlc3Npb248VmFyaWFibGVEZWNsYXJhdGlvbjxzdHJpbmcgfCBzdHJpbmdbXT5bXT4ge1xuICBwdWJsaWMgb3ZlcnJpZGUgZ2V0UmVzdWx0KCk6IFJlc3BvbnNlVmFyaWFibGVbXSB7XG4gICAgY29uc3QgdmFyaWFibGVzID0gdGhpcy5nZXRWYXJpYWJsZXMoKSBhcyBSZXNwb25zZVZhcmlhYmxlW107XG4gICAgaWYgKHZhcmlhYmxlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ3VuZXhwZWN0ZWQgbnVtYmVyIG9mIGNoaWxkcmVuIGluIHF0aSBtdWx0aXBsZScpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGZvciAoY29uc3QgdmFyaWFibGUgb2YgdmFyaWFibGVzKSB7XG4gICAgICBpZiAodmFyaWFibGUuY2FyZGluYWxpdHkgIT09ICdtdWx0aXBsZScgJiYgdmFyaWFibGUuY2FyZGluYWxpdHkgIT09ICdzaW5nbGUnKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ3VuZXhwZWN0ZWQgY2FyZGluYWxpdHkgaW4gcXRpIG11bHRpcGxlJyk7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBjb25zdCB2YWx1ZXMgPSB2YXJpYWJsZXMubWFwKHYgPT4gdi52YWx1ZSk7XG4gICAgLy8gY29uc29sZS5sb2codmFyaWFibGVzKTtcbiAgICAvLyBjb25zdCBmbGF0dGVuZWRBcnJheSA9IHZhbHVlcy5yZWR1Y2UoKGFjYzogc3RyaW5nW10sIHZhbHVlOiBzdHJpbmcgfCBzdHJpbmdbXSkgPT4ge1xuICAgIC8vICAgcmV0dXJuIGFjYy5jb25jYXQoQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyBbLi4udmFsdWVdIDogdmFsdWUpO1xuICAgIC8vIH0sIFtdKTtcbiAgICAvLyByZXR1cm4gZmxhdHRlbmVkQXJyYXk7XG5cbiAgICByZXR1cm4gdmFyaWFibGVzO1xuICB9XG59XG5cbmN1c3RvbUVsZW1lbnRzLmRlZmluZSgncXRpLW11bHRpcGxlJywgUXRpTXVsdGlwbGUpO1xuIiwgImltcG9ydCB7IGh0bWwgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgUXRpRXhwcmVzc2lvbiB9IGZyb20gJy4uL3F0aS1leHByZXNzaW9uJztcblxuZXhwb3J0IGNsYXNzIFF0aU5vdCBleHRlbmRzIFF0aUV4cHJlc3Npb248Ym9vbGVhbj4ge1xuICBvdmVycmlkZSByZW5kZXIoKSB7XG4gICAgcmV0dXJuIGh0bWxgJHtzdXBlci5yZW5kZXIoKX1gO1xuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIGdldFJlc3VsdCgpIHtcbiAgICBjb25zdCBleHByZXNzaW9uID0gdGhpcy5maXJzdEVsZW1lbnRDaGlsZCBhcyBRdGlFeHByZXNzaW9uPGJvb2xlYW4+O1xuICAgIGNvbnN0IHJlc3VsdCA9IGV4cHJlc3Npb24uY2FsY3VsYXRlKCkgYXMgYm9vbGVhbjtcbiAgICByZXR1cm4gIXJlc3VsdDtcbiAgfVxufVxuXG5jdXN0b21FbGVtZW50cy5kZWZpbmUoJ3F0aS1ub3QnLCBRdGlOb3QpO1xuIiwgImltcG9ydCB7IFF0aUNvbmRpdGlvbkV4cHJlc3Npb24gfSBmcm9tICcuLi9xdGktY29uZGl0aW9uLWV4cHJlc3Npb24nO1xuaW1wb3J0IHsgUXRpRXhwcmVzc2lvbiB9IGZyb20gJy4uL3F0aS1leHByZXNzaW9uJztcblxuZXhwb3J0IGNsYXNzIFF0aU9yIGV4dGVuZHMgUXRpQ29uZGl0aW9uRXhwcmVzc2lvbiB7XG4gIHB1YmxpYyBvdmVycmlkZSBnZXRSZXN1bHQoKSB7XG4gICAgLy8gY2hpbGRyZW4gY2FuIGJlIGEgbWl4IG9mIHF0aS1leHByZXNzaW9uIGFuZCBxdGktY29uZGl0aW9uLWV4cHJlc3Npb25cbiAgICBjb25zdCB2YWx1ZXMgPSBBcnJheS5mcm9tKHRoaXMuY2hpbGRyZW4pLm1hcChjID0+IHtcbiAgICAgIGNvbnN0IGNvbmRpdGlvbiA9IGMgYXMgUXRpRXhwcmVzc2lvbjxhbnk+O1xuICAgICAgaWYgKCFjb25kaXRpb24uY2FsY3VsYXRlKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJFbGVtZW50IGRvZXNuJ3QgaW1wbGVtZW50IFF0aUNvbmRpdGlvbkV4cHJlc3Npb25cIik7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgbGV0IHZhbHVlID0gY29uZGl0aW9uLmNhbGN1bGF0ZSgpIGFzIEJvb2xlYW47XG4gICAgICAvLyBjb252ZXJ0IHN0cmluZyB2YWx1ZSB0byBib29sZWFuIGFuZCByZXR1cm4gbnVsbCBpZiBub3QgcG9zc2libGVcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gJ3RydWUnKSB7XG4gICAgICAgICAgdmFsdWUgPSB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKHZhbHVlID09PSAnZmFsc2UnKSB7XG4gICAgICAgICAgdmFsdWUgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCd1bmV4cGVjdGVkIHZhbHVlIGluIHF0aS1vciwgZXhwZWN0ZWQgYm9vbGVhbicpO1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfSk7XG4gICAgcmV0dXJuIHZhbHVlcy5zb21lKGUgPT4ge1xuICAgICAgcmV0dXJuIHR5cGVvZiBlID09PSAnYm9vbGVhbicgJiYgZTtcbiAgICB9KTtcbiAgfVxufVxuXG5jdXN0b21FbGVtZW50cy5kZWZpbmUoJ3F0aS1vcicsIFF0aU9yKTtcbiIsICJpbXBvcnQgeyBSZXNwb25zZVZhcmlhYmxlIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWwvdmFyaWFibGVzJztcbmltcG9ydCB7IFF0aUV4cHJlc3Npb24gfSBmcm9tICcuLi9xdGktZXhwcmVzc2lvbic7XG5leHBvcnQgY2xhc3MgUXRpT3JkZXJlZCBleHRlbmRzIFF0aUV4cHJlc3Npb248UmVzcG9uc2VWYXJpYWJsZVtdPiB7XG4gIHB1YmxpYyBvdmVycmlkZSBnZXRSZXN1bHQoKTogUmVzcG9uc2VWYXJpYWJsZVtdIHtcbiAgICBjb25zdCB2YXJpYWJsZXMgPSB0aGlzLmdldFZhcmlhYmxlcygpIGFzIFJlc3BvbnNlVmFyaWFibGVbXTtcbiAgICBpZiAodmFyaWFibGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgY29uc29sZS5lcnJvcigndW5leHBlY3RlZCBudW1iZXIgb2YgY2hpbGRyZW4gaW4gcXRpIG11bHRpcGxlJyk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZm9yIChjb25zdCB2YXJpYWJsZSBvZiB2YXJpYWJsZXMpIHtcbiAgICAgIGlmICh2YXJpYWJsZS5jYXJkaW5hbGl0eSAhPT0gJ29yZGVyZWQnICYmIHZhcmlhYmxlLmNhcmRpbmFsaXR5ICE9PSAnc2luZ2xlJykge1xuICAgICAgICBjb25zb2xlLmVycm9yKCd1bmV4cGVjdGVkIGNhcmRpbmFsaXR5IGluIHF0aSBvcmRlcmVkJyk7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHZhcmlhYmxlcztcbiAgfVxufVxuXG5jdXN0b21FbGVtZW50cy5kZWZpbmUoJ3F0aS1vcmRlcmVkJywgUXRpT3JkZXJlZCk7XG4iLCAiaW1wb3J0IHsgY29uc3VtZSB9IGZyb20gJ0BsaXQvY29udGV4dCc7XG5pbXBvcnQgeyBMaXRFbGVtZW50LCBodG1sIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IHByb3BlcnR5LCBzdGF0ZSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcblxuaW1wb3J0IHsgUXRpQXNzZXNzbWVudEl0ZW0gfSBmcm9tICcuLi8uLi8uLi9xdGktYXNzZXNzbWVudC1pdGVtL3F0aS1hc3Nlc3NtZW50LWl0ZW0nO1xuaW1wb3J0IHsgSXRlbUNvbnRleHQsIGl0ZW1Db250ZXh0IH0gZnJvbSAnLi4vLi4vLi4vcXRpLWFzc2Vzc21lbnQtaXRlbS9xdGktYXNzZXNzbWVudC1pdGVtLmNvbnRleHQnO1xuXG5leHBvcnQgY2xhc3MgUXRQcmludGVkVmFyaWFibGUgZXh0ZW5kcyBMaXRFbGVtZW50IHtcbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nIH0pXG4gIGlkZW50aWZpZXI6IHN0cmluZztcblxuICBAY29uc3VtZSh7IGNvbnRleHQ6IGl0ZW1Db250ZXh0LCBzdWJzY3JpYmU6IHRydWUgfSlcbiAgQHN0YXRlKClcbiAgcHVibGljIGl0ZW1Db250ZXh0PzogSXRlbUNvbnRleHQ7XG5cbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5pdGVtQ29udGV4dD8udmFyaWFibGVzLmZpbmQodiA9PiB2LmlkZW50aWZpZXIgPT09IHRoaXMuaWRlbnRpZmllcik/LnZhbHVlO1xuICAgIHJldHVybiBodG1sYCR7SlNPTi5zdHJpbmdpZnkodmFsdWUsIG51bGwsIDIpfWA7XG4gIH1cblxuICAvLyBjb25zdHJ1Y3RvcigpIHtcbiAgLy8gICBzdXBlcigpO1xuICAvLyAgIGNvbnN0IGFzc2Vzc21lbnRJdGVtID0gdGhpcy5jbG9zZXN0KCdxdGktYXNzZXNzbWVudC1pdGVtJykgYXMgUXRpQXNzZXNzbWVudEl0ZW07XG4gIC8vICAgYXNzZXNzbWVudEl0ZW0uYWRkRXZlbnRMaXN0ZW5lcigncXRpLXJlc3BvbnNlLXByb2Nlc3NlZCcsICgpID0+IHtcbiAgLy8gICAgIHRoaXMudmFsdWUgPSB0aGlzLmNhbGN1bGF0ZSgpIGFzIHN0cmluZztcbiAgLy8gICB9KTtcbiAgLy8gfVxuXG4gIC8vIHB1YmxpYyBjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgLy8gICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuICAvLyAgIHRoaXMudmFsdWUgPSB0aGlzLmNhbGN1bGF0ZSgpIGFzIHN0cmluZztcbiAgLy8gfVxuXG4gIHB1YmxpYyBjYWxjdWxhdGUoKTogUmVhZG9ubHk8c3RyaW5nIHwgc3RyaW5nW10+IHtcbiAgICBjb25zdCBhc3Nlc3NtZW50SXRlbSA9IHRoaXMuY2xvc2VzdCgncXRpLWFzc2Vzc21lbnQtaXRlbScpIGFzIFF0aUFzc2Vzc21lbnRJdGVtO1xuICAgIGNvbnN0IGlkZW50aWZpZXIgPSB0aGlzLmlkZW50aWZpZXI7XG4gICAgY29uc3QgcmVzdWx0ID0gYXNzZXNzbWVudEl0ZW0uZ2V0VmFyaWFibGUoaWRlbnRpZmllcikudmFsdWU7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufVxuXG5jdXN0b21FbGVtZW50cy5kZWZpbmUoJ3F0aS1wcmludGVkLXZhcmlhYmxlJywgUXRQcmludGVkVmFyaWFibGUpO1xuIiwgImltcG9ydCB7IFJlc3BvbnNlVmFyaWFibGUgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbC92YXJpYWJsZXMnO1xuaW1wb3J0IHsgUXRpRXhwcmVzc2lvbiB9IGZyb20gJy4uL3F0aS1leHByZXNzaW9uJztcblxuZXhwb3J0IGNsYXNzIFF0aVByb2R1Y3QgZXh0ZW5kcyBRdGlFeHByZXNzaW9uPG51bWJlcj4ge1xuICBwdWJsaWMgb3ZlcnJpZGUgZ2V0UmVzdWx0KCkge1xuICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMuZ2V0VmFyaWFibGVzKCkgYXMgUmVzcG9uc2VWYXJpYWJsZVtdO1xuICAgIGNvbnN0IHByb2R1Y3QgPSB2YWx1ZXMucmVkdWNlKChhY2N1bXVsYXRvciwgY3VycmVudFZhbHVlKSA9PiB7XG4gICAgICBpZiAoY3VycmVudFZhbHVlLmJhc2VUeXBlID09ICdmbG9hdCcgfHwgY3VycmVudFZhbHVlLmJhc2VUeXBlID09ICdpbnRlZ2VyJykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiBhY2N1bXVsYXRvciAqIHBhcnNlSW50KGN1cnJlbnRWYWx1ZS52YWx1ZS50b1N0cmluZygpKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oYGNhbiBub3QgY29udmVydCB0byBudW1iZXJgKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS53YXJuKGBoYXMgYW5vdGhlciBiYXNlVHlwZSAke2N1cnJlbnRWYWx1ZS5iYXNlVHlwZX1gKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2N1bXVsYXRvcjtcbiAgICB9LCAxKTtcbiAgICByZXR1cm4gcHJvZHVjdDtcbiAgfVxufVxuXG5jdXN0b21FbGVtZW50cy5kZWZpbmUoJ3F0aS1wcm9kdWN0JywgUXRpUHJvZHVjdCk7XG4iLCAiaW1wb3J0IHsgcHJvcGVydHkgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBSZXNwb25zZVZhcmlhYmxlIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWwvdmFyaWFibGVzJztcbmltcG9ydCB7IFNjb3JpbmdIZWxwZXIgfSBmcm9tICcuLi8uLi91dGlsaXRpZXMvc2NvcmluZy1oZWxwZXInO1xuaW1wb3J0IHsgUXRpRXhwcmVzc2lvbiB9IGZyb20gJy4uL3F0aS1leHByZXNzaW9uJztcblxuZXhwb3J0IGNsYXNzIFF0aVN0cmluZ01hdGNoIGV4dGVuZHMgUXRpRXhwcmVzc2lvbjxib29sZWFuPiB7XG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZywgYXR0cmlidXRlOiAnY2FzZS1zZW5zaXRpdmUnIH0pIGNhc2VTZW5zaXRpdmUgPSAndHJ1ZSc7XG5cbiAgcHVibGljIG92ZXJyaWRlIGdldFJlc3VsdCgpIHtcbiAgICBpZiAodGhpcy5jaGlsZHJlbi5sZW5ndGggPT09IDIpIHtcbiAgICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMuZ2V0VmFyaWFibGVzKCkgYXMgUmVzcG9uc2VWYXJpYWJsZVtdO1xuICAgICAgY29uc3QgdmFsdWUxID0gdmFsdWVzWzBdO1xuICAgICAgY29uc3QgdmFsdWUyID0gdmFsdWVzWzFdO1xuICAgICAgaWYgKFxuICAgICAgICB2YWx1ZTEuY2FyZGluYWxpdHkgIT09ICdzaW5nbGUnIHx8XG4gICAgICAgIHZhbHVlMi5jYXJkaW5hbGl0eSAhPT0gJ3NpbmdsZScgfHxcbiAgICAgICAgQXJyYXkuaXNBcnJheSh2YWx1ZTEudmFsdWUpIHx8XG4gICAgICAgIEFycmF5LmlzQXJyYXkodmFsdWUyLnZhbHVlKVxuICAgICAgKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ3VuZXhwZWN0ZWQgY2FyZGluYWxpdHkgaW4gcXRpIHN0cmluZy1tYXRjaCcpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBjb25zdCB2MSA9IHRoaXMuY2FzZVNlbnNpdGl2ZSA9PT0gJ3RydWUnID8gdmFsdWUxLnZhbHVlIDogKHZhbHVlMS52YWx1ZSBhcyBzdHJpbmcpLnRvTG93ZXJDYXNlKCk7XG4gICAgICBjb25zdCB2MiA9IHRoaXMuY2FzZVNlbnNpdGl2ZSA9PT0gJ3RydWUnID8gdmFsdWUyLnZhbHVlIDogKHZhbHVlMi52YWx1ZSBhcyBzdHJpbmcpLnRvTG93ZXJDYXNlKCk7XG4gICAgICByZXR1cm4gU2NvcmluZ0hlbHBlci5jb21wYXJlU2luZ2xlVmFsdWVzKHYxIGFzIHN0cmluZywgdjIgYXMgc3RyaW5nLCB2YWx1ZTEuYmFzZVR5cGUpO1xuICAgIH1cbiAgICBjb25zb2xlLmVycm9yKCd1bmV4cGVjdGVkIG51bWJlciBvZiBjaGlsZHJlbiBpbiBxdGktc3RyaW5nLW1hdGNoJyk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdxdGktc3RyaW5nLW1hdGNoJywgUXRpU3RyaW5nTWF0Y2gpO1xuIiwgImltcG9ydCB7IFF0aUV4cHJlc3Npb24sIFF0aUV4cHJlc3Npb25CYXNlIH0gZnJvbSAnLi4vcXRpLWV4cHJlc3Npb24nO1xuXG5leHBvcnQgY2xhc3MgUXRpU3VtIGV4dGVuZHMgUXRpRXhwcmVzc2lvbjxudW1iZXI+IHtcbiAgcHJpdmF0ZSBfZXhwcmVzc2lvbjogUXRpU3VtRXhwcmVzc2lvbjtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLl9leHByZXNzaW9uID0gbmV3IFF0aVN1bUV4cHJlc3Npb24oQXJyYXkuZnJvbSh0aGlzLmNoaWxkcmVuIGFzIHVua25vd24gYXMgUXRpRXhwcmVzc2lvbkJhc2U8bnVtYmVyPltdKSk7XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgZ2V0UmVzdWx0KCkge1xuICAgIC8vIGNoaWxkcmVuIGNhbiBiZSBhIG1peCBvZiBxdGktZXhwcmVzc2lvbiBhbmQgcXRpLWNvbmRpdGlvbi1leHByZXNzaW9uXG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLl9leHByZXNzaW9uLmNhbGN1bGF0ZSgpO1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgUXRpU3VtRXhwcmVzc2lvbiBpbXBsZW1lbnRzIFF0aUV4cHJlc3Npb25CYXNlPG51bWJlcj4ge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGV4cHJlc3Npb25zOiBRdGlFeHByZXNzaW9uQmFzZTxudW1iZXI+W10pIHt9XG5cbiAgcHVibGljIGNhbGN1bGF0ZSgpIHtcbiAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLmV4cHJlc3Npb25zLm1hcChjID0+IHtcbiAgICAgIGlmICghYy5jYWxjdWxhdGUpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkVsZW1lbnQgZG9lc24ndCBpbXBsZW1lbnQgUXRpQ29uZGl0aW9uRXhwcmVzc2lvblwiKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBjb25zdCB2YWx1ZSA9IGMuY2FsY3VsYXRlKCk7XG4gICAgICBpZiAoTnVtYmVyLmlzTmFOKHZhbHVlKSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCd1bmV4cGVjdGVkIHZhbHVlIGluIHF0aS1zdW0sIGV4cGVjdGVkIG51bWJlcicpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIE51bWJlcih2YWx1ZSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHZhbHVlcy5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiLCAwKTtcbiAgfVxufVxuXG5jdXN0b21FbGVtZW50cy5kZWZpbmUoJ3F0aS1zdW0nLCBRdGlTdW0pO1xuIiwgImltcG9ydCB7IFF0aUFzc2Vzc21lbnRJdGVtIH0gZnJvbSAnLi4vLi4vLi4vcXRpLWFzc2Vzc21lbnQtaXRlbS9xdGktYXNzZXNzbWVudC1pdGVtJztcbmltcG9ydCB7IFF0aUV4cHJlc3Npb24gfSBmcm9tICcuLi9xdGktZXhwcmVzc2lvbic7XG5cbmV4cG9ydCBjbGFzcyBRdGlWYXJpYWJsZSBleHRlbmRzIFF0aUV4cHJlc3Npb248c3RyaW5nIHwgc3RyaW5nW10+IHtcbiAgcHVibGljIG92ZXJyaWRlIGdldFJlc3VsdCgpIHtcbiAgICBjb25zdCBpZGVudGlmaWVyID0gdGhpcy5nZXRBdHRyaWJ1dGUoJ2lkZW50aWZpZXInKTtcbiAgICBjb25zdCByZXN1bHQgPSAodGhpcy5jbG9zZXN0KCdxdGktYXNzZXNzbWVudC1pdGVtJykgYXMgUXRpQXNzZXNzbWVudEl0ZW0pLmdldFZhcmlhYmxlKGlkZW50aWZpZXIpLnZhbHVlO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn1cblxuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdxdGktdmFyaWFibGUnLCBRdGlWYXJpYWJsZSk7XG4iLCAiaW1wb3J0IHsgaHRtbCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50LCBwcm9wZXJ0eSwgc3RhdGUgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBJbnRlcmFjdGlvbiB9IGZyb20gJy4uL2ludGVybmFsL2ludGVyYWN0aW9uL2ludGVyYWN0aW9uJztcbmltcG9ydCB7IElNU3BjaSwgTW9kdWxlUmVzb2x1dGlvbkNvbmZpZywgUXRpVmFyaWFibGVKU09OIH0gZnJvbSAnLi9pbnRlcmZhY2UnO1xuXG5kZWNsYXJlIGNvbnN0IHJlcXVpcmVqczogYW55O1xuZGVjbGFyZSBjb25zdCBkZWZpbmU6IGFueTtcblxuQGN1c3RvbUVsZW1lbnQoJ3F0aS1wb3J0YWJsZS1jdXN0b20taW50ZXJhY3Rpb24nKVxuZXhwb3J0IGNsYXNzIFF0aVBvcnRhYmxlQ3VzdG9tSW50ZXJhY3Rpb24gZXh0ZW5kcyBJbnRlcmFjdGlvbiB7XG4gIHByaXZhdGUgaW50ZXJ2YWxJZDogYW55O1xuICBwcml2YXRlIHJhd1Jlc3BvbnNlOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSBwY2k6IElNU3BjaTx1bmtub3duPjtcblxuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcsIGF0dHJpYnV0ZTogJ3Jlc3BvbnNlLWlkZW50aWZpZXInIH0pXG4gIHJlc3BvbnNlSWRlbnRpZmllcjogc3RyaW5nO1xuXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZywgYXR0cmlidXRlOiAnbW9kdWxlJyB9KVxuICBtb2R1bGU6IHN0cmluZztcblxuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcsIGF0dHJpYnV0ZTogJ2N1c3RvbS1pbnRlcmFjdGlvbi10eXBlLWlkZW50aWZpZXInIH0pXG4gIGN1c3RvbUludGVyYWN0aW9uVHlwZUlkZW50aWZpZXI6IHN0cmluZztcblxuICBAc3RhdGUoKVxuICBwcml2YXRlIF9lcnJvck1lc3NhZ2U6IHN0cmluZyA9IG51bGw7XG5cbiAgcHJpdmF0ZSBjb252ZXJ0UXRpVmFyaWFibGVKU09OKGlucHV0OiBRdGlWYXJpYWJsZUpTT04pOiBzdHJpbmcgfCBzdHJpbmdbXSB7XG4gICAgZm9yIChjb25zdCB0b3BMZXZlbEtleSBpbiBpbnB1dCkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICAgICAgaWYgKGlucHV0Lmhhc093blByb3BlcnR5KHRvcExldmVsS2V5KSkge1xuICAgICAgICBjb25zdCBuZXN0ZWRPYmplY3QgPSBpbnB1dFt0b3BMZXZlbEtleSBhcyAnbGlzdCcgfCAnYmFzZSddO1xuICAgICAgICBpZiAobmVzdGVkT2JqZWN0KSB7XG4gICAgICAgICAgZm9yIChjb25zdCBuZXN0ZWRLZXkgaW4gbmVzdGVkT2JqZWN0KSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG4gICAgICAgICAgICBpZiAobmVzdGVkT2JqZWN0Lmhhc093blByb3BlcnR5KG5lc3RlZEtleSkpIHtcbiAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBuZXN0ZWRPYmplY3RbbmVzdGVkS2V5IGFzIGtleW9mIHR5cGVvZiBuZXN0ZWRPYmplY3RdO1xuICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUubWFwKFN0cmluZyk7IC8vIENvbnZlcnQgZWFjaCBlbGVtZW50IGluIHRoZSBhcnJheSB0byBzdHJpbmdcbiAgICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7IC8vIENvbnZlcnQgdGhlIHNpbmdsZSB2YWx1ZSB0byBzdHJpbmdcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgc3RhcnRDaGVja2luZygpOiB2b2lkIHtcbiAgICAvLyBiZWNhdXNlIHRoZSBwY2kgZG9lc24ndCBoYXZlIGEgbWV0aG9kIHRvIGNoZWNrIGZvciBjaGFuZ2VzIHdlJ2xsIHVzZSBhbiBpbnRlcnZhbFxuICAgIC8vIHRvIGNoZWNrIGlmIHRoZSByZXNwb25zZSBoYXMgY2hhbmdlZC4gSWYgY2hhbmdlZCB3ZSdsbCBzYXZlIHRoZSByZXNwb25zZVxuICAgIHRoaXMuaW50ZXJ2YWxJZCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gdGhpcy5wY2kuZ2V0UmVzcG9uc2UoKTtcbiAgICAgIGNvbnN0IG5ld1Jlc3BvbnNlID0gdGhpcy5wY2kuZ2V0UmVzcG9uc2UoKTtcbiAgICAgIGNvbnN0IHN0cmluZ2lmaWVkID0gSlNPTi5zdHJpbmdpZnkocmVzcG9uc2UpO1xuICAgICAgaWYgKHN0cmluZ2lmaWVkICE9PSB0aGlzLnJhd1Jlc3BvbnNlKSB7XG4gICAgICAgIHRoaXMucmF3UmVzcG9uc2UgPSBzdHJpbmdpZmllZDtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmNvbnZlcnRRdGlWYXJpYWJsZUpTT04obmV3UmVzcG9uc2UpO1xuICAgICAgICB0aGlzLnJlc3BvbnNlID0gdmFsdWU7XG4gICAgICAgIHRoaXMuc2F2ZVJlc3BvbnNlKHZhbHVlKTtcbiAgICAgIH1cbiAgICB9LCAyMDApO1xuICB9XG5cbiAgcHJpdmF0ZSBzdG9wQ2hlY2tpbmcoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaW50ZXJ2YWxJZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjbGVhckludGVydmFsKHRoaXMuaW50ZXJ2YWxJZCk7XG4gICAgfVxuICB9XG5cbiAgdmFsaWRhdGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7IC8vIEZPUiBOT1dcbiAgfVxuICBzZXQgcmVzcG9uc2UodmFsOiBSZWFkb25seTxzdHJpbmcgfCBzdHJpbmdbXT4pIHtcbiAgICAvLyBPbmx5IHNldCBzdGF0ZSBpcyBzdXBwb3J0ZWQgaW4gYSBQQ0lcbiAgfVxuXG4gIGdldFRBT0NvbmZpZyhub2RlKSB7XG4gICAgY29uc3QgYSA9IG5vZGUucXVlcnlTZWxlY3RvckFsbCgncHJvcGVydGllcycpO1xuICAgIGxldCBjb25maWcgPSB7fTtcblxuICAgIGNvbnN0IGdldFByb3BlcnR5VmFsdWUgPSBlbCA9PiB7XG4gICAgICBjb25zdCBwcm9wZXJ0eSA9IHt9O1xuICAgICAgY29uc3Qga2V5ID0gZWwuZ2V0QXR0cmlidXRlKCdrZXknKTtcbiAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBBcnJheS5mcm9tKGVsLmNoaWxkcmVuKTtcbiAgICAgICAgY29uc3QgYWxsS2V5ID0gY2hpbGRyZW4ubWFwKChjOiBIVE1MRWxlbWVudCkgPT4gYy5nZXRBdHRyaWJ1dGUoJ2tleScpKTtcbiAgICAgICAgY29uc3QgaXNBcnJheSA9IGFsbEtleS5sZW5ndGggPiAwICYmICFhbGxLZXkuZmluZChrID0+ICFOdW1iZXIuaXNJbnRlZ2VyKCtrKSk7XG4gICAgICAgIGlmIChpc0FycmF5KSB7XG4gICAgICAgICAgcHJvcGVydHlba2V5XSA9IGNoaWxkcmVuLm1hcChjID0+IGdldENoaWxkUHJvcGVydGllcyhjKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcHJvcGVydHlba2V5XSA9IGVsLnRleHRDb250ZW50O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcHJvcGVydHk7XG4gICAgfTtcblxuICAgIGNvbnN0IGdldENoaWxkUHJvcGVydGllcyA9IChlbCk6IHt9IHwgdm9pZCA9PiB7XG4gICAgICBpZiAoZWwpIHtcbiAgICAgICAgbGV0IHByb3BlcnRpZXMgPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBlbC5jaGlsZHJlbikge1xuICAgICAgICAgIHByb3BlcnRpZXMgPSB7IC4uLnByb3BlcnRpZXMsIC4uLmdldFByb3BlcnR5VmFsdWUoY2hpbGQpIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHByb3BlcnRpZXM7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGZvciAoY29uc3QgcHJvcGVydGllcyBvZiBhKSB7XG4gICAgICBjb25zdCBrZXkgPSBwcm9wZXJ0aWVzLmdldEF0dHJpYnV0ZSgna2V5Jyk7XG4gICAgICBpZiAoIWtleSkge1xuICAgICAgICBjb25maWcgPSB7IC4uLmNvbmZpZywgLi4uZ2V0Q2hpbGRQcm9wZXJ0aWVzKHByb3BlcnRpZXMpIH07XG4gICAgICB9XG4gICAgICByZXR1cm4gY29uZmlnO1xuICAgIH1cbiAgICBjb25zb2xlLmxvZygnQ2FuIG5vdCBmaW5kIHF0aS1jdXN0b20taW50ZXJhY3Rpb24gY29uZmlnJyk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZWdpc3RlcihwY2k6IElNU3BjaTx1bmtub3duPikge1xuICAgIHRoaXMucGNpID0gcGNpO1xuXG4gICAgY29uc3QgdHlwZSA9IHRoaXMucGFyZW50RWxlbWVudC50YWdOYW1lID09PSAnUVRJLUNVU1RPTS1JTlRFUkFDVElPTicgPyAnVEFPJyA6ICdJTVMnO1xuICAgIGNvbnN0IGRvbTogSFRNTEVsZW1lbnQgPVxuICAgICAgdHlwZSA9PSAnSU1TJyA/IHRoaXMucXVlcnlTZWxlY3RvcigncXRpLWludGVyYWN0aW9uLW1hcmt1cCcpIDogdGhpcy5xdWVyeVNlbGVjdG9yKCdtYXJrdXAnKTtcbiAgICBkb20uY2xhc3NMaXN0LmFkZCgncXRpLWN1c3RvbUludGVyYWN0aW9uJyk7XG5cbiAgICBpZiAodHlwZSA9PSAnVEFPJyAmJiB0aGlzLnF1ZXJ5U2VsZWN0b3IoJ3Byb3BlcnRpZXMnKSkge1xuICAgICAgKHRoaXMucXVlcnlTZWxlY3RvcigncHJvcGVydGllcycpIGFzIEhUTUxFbGVtZW50KS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbmZpZzogYW55ID1cbiAgICAgIHR5cGUgPT0gJ0lNUydcbiAgICAgICAgPyB7XG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiB0aGlzLmRhdGFzZXQsXG4gICAgICAgICAgICBvbnJlYWR5OiAoKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdvbnJlYWR5Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICA6IHRoaXMuZ2V0VEFPQ29uZmlnKHRoaXMpO1xuXG4gICAgdHlwZSA9PSAnSU1TJ1xuICAgICAgPyBwY2kuZ2V0SW5zdGFuY2UoZG9tLCBjb25maWcsIHVuZGVmaW5lZClcbiAgICAgIDogKHBjaSBhcyBhbnkpLmluaXRpYWxpemUodGhpcy5jdXN0b21JbnRlcmFjdGlvblR5cGVJZGVudGlmaWVyLCBkb20uZmlyc3RFbGVtZW50Q2hpbGQsIGNvbmZpZyk7XG5cbiAgICBpZiAodHlwZSA9PSAnVEFPJykge1xuICAgICAgY29uc3QgbGlua3MgPSBBcnJheS5mcm9tKHRoaXMucXVlcnlTZWxlY3RvckFsbCgnbGluaycpKS5tYXAoYWNjID0+IGFjYy5nZXRBdHRyaWJ1dGUoJ2hyZWYnKSk7XG4gICAgICBsaW5rcy5mb3JFYWNoKGxpbmsgPT4ge1xuICAgICAgICBjb25zdCBzdHlsZXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsaW5rJyk7XG4gICAgICAgIHN0eWxlcy5yZWwgPSAnc3R5bGVzaGVldCc7XG4gICAgICAgIHN0eWxlcy50eXBlID0gJ3RleHQvY3NzJztcbiAgICAgICAgc3R5bGVzLm1lZGlhID0gJ3NjcmVlbic7XG4gICAgICAgIHN0eWxlcy5ocmVmID0gbGluaztcbiAgICAgICAgZG9tLmFwcGVuZENoaWxkKHN0eWxlcyk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5zdGFydENoZWNraW5nKCk7XG4gIH1cblxuICBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuXG4gICAgZGVmaW5lKCdxdGlDdXN0b21JbnRlcmFjdGlvbkNvbnRleHQnLCAoKSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICByZWdpc3RlcjogY3R4QSA9PiB7XG4gICAgICAgICAgdGhpcy5yZWdpc3RlcihjdHhBKTtcbiAgICAgICAgfSxcbiAgICAgICAgbm90aWZ5UmVhZHk6ICgpID0+IHtcbiAgICAgICAgICAvKiBvbmx5IHVzZWQgaW4gdGhlIFRBTyB2ZXJzaW9uICovXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICBjb25zdCBjb25maWcgPSB0aGlzLmJ1aWxkUmVxdWlyZUNvbmZpZygpO1xuICAgIGNvbnN0IHJlcXVpcmVQQ0kgPSByZXF1aXJlanMuY29uZmlnKGNvbmZpZyk7XG4gICAgcmVxdWlyZVBDSShbJ3JlcXVpcmUnXSwgcmVxdWlyZSA9PiB7XG4gICAgICByZXF1aXJlKFt0aGlzLm1vZHVsZV0pO1xuICAgIH0pO1xuICB9XG5cbiAgb3ZlcnJpZGUgZGlzY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICByZXF1aXJlanMudW5kZWYodGhpcy5jdXN0b21JbnRlcmFjdGlvblR5cGVJZGVudGlmaWVyKTtcbiAgICAvLyBDbGVhciB0aGUgbW9kdWxlcyBpbiB0aGUgY29udGV4dFxuICAgIGNvbnN0IGNvbnRleHQgPSByZXF1aXJlanMucy5jb250ZXh0cztcbiAgICBkZWxldGUgY29udGV4dFt0aGlzLmN1c3RvbUludGVyYWN0aW9uVHlwZUlkZW50aWZpZXJdO1xuICAgIHRoaXMuc3RvcENoZWNraW5nKCk7XG4gIH1cblxuICBidWlsZFJlcXVpcmVDb25maWcoKSB7XG4gICAgLy8gU2V0IFJlcXVpcmVKUyBwYXRocyBhbmQgc2hpbSBjb25maWd1cmF0aW9uIGlmIGF2YWlsYWJsZVxuICAgIGNvbnN0IGNvbmZpZzogTW9kdWxlUmVzb2x1dGlvbkNvbmZpZyA9IHtcbiAgICAgIGNvbnRleHQ6IHRoaXMuY3VzdG9tSW50ZXJhY3Rpb25UeXBlSWRlbnRpZmllcixcbiAgICAgIGNhdGNoRXJyb3I6IHRydWUsXG4gICAgICBwYXRoczogd2luZG93WydyZXF1aXJlUGF0aHMnXSB8fCB7fSxcbiAgICAgIHNoaW06IHdpbmRvd1sncmVxdWlyZVNoaW0nXSB8fCB7fVxuICAgIH07XG4gICAgLy8gQ2hlY2sgaWYgUmVxdWlyZUpTIGlzIGF2YWlsYWJsZSwgaWYgbm90LCBzZXQgYW4gZXJyb3IgbWVzc2FnZVxuICAgIGlmICghZ2xvYmFsVGhpcy5yZXF1aXJlKSB7XG4gICAgICB0aGlzLl9lcnJvck1lc3NhZ2UgPSBgUmVxdWlyZUpTIG5vdCBmb3VuZC4gUGxlYXNlIGxvYWQgaXQgdmlhIENETjogaHR0cHM6Ly9jZG5qcy5jb20vbGlicmFyaWVzL3JlcXVpcmUuanNgO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IGJhc2VVcmwgPSB0aGlzLmdldEF0dHJpYnV0ZSgnZGF0YS1iYXNlLXVybCcpO1xuICAgIGNvbnN0IGludGVyYWN0aW9uTW9kdWxlcyA9IHRoaXMucXVlcnlTZWxlY3RvcigncXRpLWludGVyYWN0aW9uLW1vZHVsZXMnKTtcblxuICAgIGlmIChpbnRlcmFjdGlvbk1vZHVsZXMpIHtcbiAgICAgIGNvbnN0IG1vZHVsZXMgPSBpbnRlcmFjdGlvbk1vZHVsZXMucXVlcnlTZWxlY3RvckFsbCgncXRpLWludGVyYWN0aW9uLW1vZHVsZScpO1xuICAgICAgZm9yIChjb25zdCBtb2R1bGUgb2YgbW9kdWxlcykge1xuICAgICAgICBjb25zdCBtb2R1bGVJZCA9IG1vZHVsZS5nZXRBdHRyaWJ1dGUoJ2lkJyk7XG4gICAgICAgIGNvbnN0IHByaW1hcnlQYXRoID0gbW9kdWxlLmdldEF0dHJpYnV0ZSgncHJpbWFyeS1wYXRoJyk7XG4gICAgICAgIGNvbnN0IGZhbGxiYWNrUGF0aCA9IG1vZHVsZS5nZXRBdHRyaWJ1dGUoJ2ZhbGxiYWNrLXBhdGgnKTtcblxuICAgICAgICBpZiAobW9kdWxlSWQgJiYgcHJpbWFyeVBhdGgpIHtcbiAgICAgICAgICAvLyBTZXQgdGhlIHBhdGhzIHVzaW5nIFJlcXVpcmVKUydzIGZhbGxiYWNrIGFycmF5XG4gICAgICAgICAgY29uc3QgcGF0aHMgPSBmYWxsYmFja1BhdGhcbiAgICAgICAgICAgID8gdGhpcy5jb21iaW5lUmVxdWlyZVJlc29sdmVQYXRocyhcbiAgICAgICAgICAgICAgICB0aGlzLmdldFJlc29sdmFibGVQYXRoKHByaW1hcnlQYXRoLCBiYXNlVXJsKSxcbiAgICAgICAgICAgICAgICB0aGlzLmdldFJlc29sdmFibGVQYXRoKGZhbGxiYWNrUGF0aCwgYmFzZVVybClcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgOiB0aGlzLmdldFJlc29sdmFibGVQYXRoKHByaW1hcnlQYXRoLCBiYXNlVXJsKTtcbiAgICAgICAgICBjb25zdCBleGlzdGluZ1BhdGggPSBjb25maWcucGF0aHNbbW9kdWxlSWRdIHx8IFtdO1xuICAgICAgICAgIGNvbmZpZy5wYXRoc1ttb2R1bGVJZF0gPSB0aGlzLmNvbWJpbmVSZXF1aXJlUmVzb2x2ZVBhdGhzKGV4aXN0aW5nUGF0aCwgcGF0aHMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjb25maWc7XG4gIH1cblxuICBwcml2YXRlIGNvbWJpbmVSZXF1aXJlUmVzb2x2ZVBhdGhzKHBhdGgxOiBzdHJpbmcgfCBzdHJpbmdbXSwgcGF0aDI6IHN0cmluZyB8IHN0cmluZ1tdKSB7XG4gICAgY29uc3QgcGF0aDFBcnJheSA9IEFycmF5LmlzQXJyYXkocGF0aDEpID8gcGF0aDEgOiBbcGF0aDFdO1xuICAgIGNvbnN0IHBhdGgyQXJyYXkgPSBBcnJheS5pc0FycmF5KHBhdGgyKSA/IHBhdGgyIDogW3BhdGgyXTtcbiAgICByZXR1cm4gcGF0aDFBcnJheS5jb25jYXQocGF0aDJBcnJheSk7XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZURvdWJsZVNsYXNoZXMoc3RyOiBzdHJpbmcpIHtcbiAgICBjb25zdCBzaW5nbGVGb3J3YXJkU2xhc2hlcyA9IHN0clxuICAgICAgLnJlcGxhY2UoLyhbXjpdXFwvKVxcLysvZywgJyQxJylcbiAgICAgIC5yZXBsYWNlKC9cXC9cXC8vZywgJy8nKVxuICAgICAgLnJlcGxhY2UoJ2h0dHA6LycsICdodHRwOi8vJylcbiAgICAgIC5yZXBsYWNlKCdodHRwczovJywgJ2h0dHBzOi8vJyk7XG4gICAgcmV0dXJuIHNpbmdsZUZvcndhcmRTbGFzaGVzO1xuICB9XG5cbiAgbG9hZENvbmZpZyA9IGFzeW5jICh1cmw6IHN0cmluZywgYmFzZVVybD86IHN0cmluZyk6IFByb21pc2U8TW9kdWxlUmVzb2x1dGlvbkNvbmZpZz4gPT4ge1xuICAgIHVybCA9IHRoaXMucmVtb3ZlRG91YmxlU2xhc2hlcyh1cmwpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXF1aXJlQ29uZmlnID0gYXdhaXQgZmV0Y2godXJsKTtcbiAgICAgIGlmIChyZXF1aXJlQ29uZmlnLm9rKSB7XG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IGF3YWl0IHJlcXVpcmVDb25maWcuanNvbigpO1xuICAgICAgICBjb25zdCBtb2R1bGVDb25nID0gY29uZmlnIGFzIE1vZHVsZVJlc29sdXRpb25Db25maWc7XG4gICAgICAgIGZvciAoY29uc3QgbW9kdWxlSWQgaW4gbW9kdWxlQ29uZy5wYXRocykge1xuICAgICAgICAgIGlmIChiYXNlVXJsKSB7XG4gICAgICAgICAgICBtb2R1bGVDb25nLnBhdGhzW21vZHVsZUlkXSA9IHRoaXMuZ2V0UmVzb2x2YWJsZVBhdGgobW9kdWxlQ29uZy5wYXRoc1ttb2R1bGVJZF0sIGJhc2VVcmwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbW9kdWxlQ29uZztcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBkbyBub3RoaW5nXG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9O1xuXG4gIGdldFJlc29sdmFibGVQYXRoU3RyaW5nID0gKHBhdGg6IHN0cmluZywgYmFzZVBhdGg/OiBzdHJpbmcpID0+IHtcbiAgICBwYXRoID0gcGF0aC5yZXBsYWNlKC9cXC5qcyQvLCAnJyk7XG4gICAgcmV0dXJuIHBhdGg/LnRvTG9jYWxlTG93ZXJDYXNlKCkuc3RhcnRzV2l0aCgnaHR0cCcpIHx8ICFiYXNlUGF0aFxuICAgICAgPyBwYXRoXG4gICAgICA6IHRoaXMucmVtb3ZlRG91YmxlU2xhc2hlcyhgJHtiYXNlUGF0aH0vJHtwYXRofWApO1xuICB9O1xuXG4gIGdldFJlc29sdmFibGVQYXRoID0gKHBhdGg6IHN0cmluZyB8IHN0cmluZ1tdLCBiYXNlUGF0aD86IHN0cmluZykgPT4ge1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHBhdGgpXG4gICAgICA/IHBhdGgubWFwKHAgPT4gdGhpcy5nZXRSZXNvbHZhYmxlUGF0aFN0cmluZyhwLCBiYXNlUGF0aCkpXG4gICAgICA6IHRoaXMuZ2V0UmVzb2x2YWJsZVBhdGhTdHJpbmcocGF0aCwgYmFzZVBhdGgpO1xuICB9O1xuXG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICByZXR1cm4gaHRtbGA8c2xvdD48L3Nsb3Q+JHt0aGlzLl9lcnJvck1lc3NhZ2UgJiZcbiAgICAgIGh0bWxgPGRpdiBzdHlsZT1cImNvbG9yOnJlZFwiPlxuICAgICAgICA8aDE+RXJyb3I8L2gxPlxuICAgICAgICAke3RoaXMuX2Vycm9yTWVzc2FnZX1cbiAgICAgIDwvZGl2PmB9YDtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktcG9ydGFibGUtY3VzdG9tLWludGVyYWN0aW9uJzogUXRpUG9ydGFibGVDdXN0b21JbnRlcmFjdGlvbjtcbiAgfVxufVxuIiwgImltcG9ydCB7IExpdEVsZW1lbnQsIGNzcywgaHRtbCB9IGZyb20gJ2xpdCc7XG5cbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQsIHN0YXRlIH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgRHJhZ0Ryb3BJbnRlcmFjdGlvbk1peGluIH0gZnJvbSAnLi4vaW50ZXJuYWwvZHJhZy1kcm9wJztcblxuQGN1c3RvbUVsZW1lbnQoJ3F0aS1hc3NvY2lhdGUtaW50ZXJhY3Rpb24nKVxuZXhwb3J0IGNsYXNzIFF0aUFzc29jaWF0ZUludGVyYWN0aW9uIGV4dGVuZHMgRHJhZ0Ryb3BJbnRlcmFjdGlvbk1peGluKFxuICBMaXRFbGVtZW50LFxuICAncXRpLXNpbXBsZS1hc3NvY2lhYmxlLWNob2ljZScsXG4gIHRydWUsXG4gICcuZGwnXG4pIHtcbiAgQHN0YXRlKCkgcHJpdmF0ZSBfY2hpbGRyZW5NYXA6IEVsZW1lbnRbXTtcblxuICBzdGF0aWMgb3ZlcnJpZGUgc3R5bGVzID0gY3NzYFxuICAgIDpob3N0IHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrOyAvKiBuZWNlc3NhcnkgdG8gY2FsY3VsYXRlIHNjYWxpbmcgcG9zaXRpb24gKi9cbiAgICB9XG4gICAgc2xvdFtuYW1lPSdxdGktc2ltcGxlLWFzc29jaWFibGUtY2hvaWNlJ10ge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICAgIGdhcDogMC41cmVtO1xuICAgIH1cbiAgYDtcblxuICBvdmVycmlkZSByZW5kZXIoKSB7XG4gICAgcmV0dXJuIGh0bWxgIDxzbG90IG5hbWU9XCJwcm9tcHRcIj48L3Nsb3Q+XG4gICAgICA8c2xvdCBuYW1lPVwicXRpLXNpbXBsZS1hc3NvY2lhYmxlLWNob2ljZVwiPjwvc2xvdD5cbiAgICAgICR7dGhpcy5fY2hpbGRyZW5NYXAubGVuZ3RoID4gMCAmJlxuICAgICAgQXJyYXkuZnJvbShBcnJheShNYXRoLmNlaWwodGhpcy5fY2hpbGRyZW5NYXAubGVuZ3RoIC8gMikpLmtleXMoKSkubWFwKFxuICAgICAgICAoXywgaW5kZXgpID0+XG4gICAgICAgICAgaHRtbGA8ZGl2IHBhcnQ9XCJhc3NvY2lhYmxlcy1jb250YWluZXJcIj5cbiAgICAgICAgICAgIDxkaXYgbmFtZT1cImxlZnQke2luZGV4fVwiIHBhcnQ9XCJkcm9wLWxpc3RcIiBjbGFzcz1cImRsXCIgaWRlbnRpZmllcj1cImRyb3BsaXN0JHtpbmRleH1fbGVmdFwiPjwvZGl2PlxuICAgICAgICAgICAgPGRpdiBuYW1lPVwicmlnaHQke2luZGV4fVwiIHBhcnQ9XCJkcm9wLWxpc3RcIiBjbGFzcz1cImRsXCIgaWRlbnRpZmllcj1cImRyb3BsaXN0JHtpbmRleH1fcmlnaHRcIj48L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5gXG4gICAgICApfWA7XG4gIH1cblxuICBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIHRoaXMuX2NoaWxkcmVuTWFwID0gQXJyYXkuZnJvbSh0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwoJ3F0aS1zaW1wbGUtYXNzb2NpYWJsZS1jaG9pY2UnKSk7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLWFzc29jaWF0ZS1pbnRlcmFjdGlvbic6IFF0aUFzc29jaWF0ZUludGVyYWN0aW9uO1xuICB9XG59XG4iLCAiZXhwb3J0IGNsYXNzIFRvdWNoRHJhZ0FuZERyb3Age1xuICBwcml2YXRlIF90b3VjaEJlZ2luID0gMDsgLy8gdGltZXN0YW1wIG9mIGZpcnN0IHRvdWNoXG4gIHByaXZhdGUgX3RvdWNoRG93biA9IG51bGw7IC8vIHBvaW50IG9mIGZpcnN0IHRvdWNoXG4gIHByaXZhdGUgX2xhc3RDbGljayA9IDA7IC8vIHRpbWVzdGFtcCBvZiBwcmV2aW91cyBjbGljayAodG91Y2hzdGFydCArIHRvdWNoZW5kKVxuICBwcml2YXRlIF9jYW5EcmFnID0gZmFsc2U7IC8vIHdoZXRoZXIgdGhlcmUgaXMgYW4gZWxlbWVudCB3aGljaCBjYW4gYmUgZHJhZ2dlZFxuICBwcml2YXRlIF9kcmFnU3JjID0gbnVsbDsgLy8gdGhlIGVsZW1lbnQgd2hpY2ggc2hvdWxkIGJlIGRyYWdnZWRcbiAgcHJpdmF0ZSBfZHJhZ0NvcHkgPSBudWxsOyAvLyBjb3B5IG9mIGRyYWcgc291cmNlIGZvciBkcmFnIGZlZWRiYWNrXG4gIHByaXZhdGUgX3RvdWNoRW5kQ2FsbGVkID0gZmFsc2U7IC8vIHdoZXRoZXIgdG91Y2hFbmQgb2NjdXJlZFxuICBwcml2YXRlIF9kcmFnUnVubmluZyA9IGZhbHNlOyAvLyB3aGV0aGVyIGEgZHJhZyBwcm9jZXNzIGlzIHJ1bm5pbmcgYXQgdGhlIG1vbWVudFxuXG4gIHByaXZhdGUgX2RhdGFUcmFuc2ZlciA9IHtcbiAgICBkYXRhOiB7fSxcbiAgICBzZXREYXRhOiBmdW5jdGlvbiAodHlwZSwgdmFsKSB7XG4gICAgICB0aGlzLmRhdGFbdHlwZV0gPSB2YWw7XG4gICAgfSxcbiAgICBnZXREYXRhOiBmdW5jdGlvbiAodHlwZSkge1xuICAgICAgcmV0dXJuIHRoaXMuZGF0YVt0eXBlXTtcbiAgICB9LFxuICAgIGVmZmVjdEFsbG93ZWQ6ICdtb3ZlJ1xuICB9O1xuICBwcml2YXRlIF9jb3B5T2Zmc2V0ID0geyB4OiAwLCB5OiAwIH07IC8vIE9mZnNldCBmb3IgcG9zaXRpb25pbmcgdGhlIGRyYWcgY29weVxuXG4gIHByaXZhdGUgX2xhc3RUYXJnZXQgPSBudWxsOyAvLyBUaGUgbGFzdCByZWdpc3RlcmVkIHRvdWNoIHRhcmdldFxuICBwcml2YXRlIF9jdXJyZW50RHJvcENvbnRhaW5lciA9IG51bGw7IC8vIFRoZSBjdXJyZW50IGRyb3AgY29udGFpbmVyOyBmYWxzZSBpZiBlbGVtZW50IGlzIG5vdCBkcm9wcGFibGVcbiAgcHJpdmF0ZSBfaGFuZGxlQ2xpY2sgPSB0cnVlOyAvLyBTcGVjaWZpZXNcblxuICBwcml2YXRlIF9EQkxDTElDS0RFTEFZID0gNTAwOyAvLyBtYXhpbXVtIGRlbGF5IGluIHdoaWNoIGEgc2Vjb25kIGNsaWNrIG11c3Qgb2NjdXJcbiAgcHJpdmF0ZSBfQ09OVEVYVE1FTlVERUxBWSA9IDEwMDA7IC8vIGhvbGQgZGVsYXkgYWZ0ZXIgd2hpY2ggY29udGV4dCBtZW51IGlzIHNob3duXG4gIHByaXZhdGUgX0RSQUdERUxUQSA9IDU7IC8vIE1pbmltdW0gb2YgcGl4ZWxzIHdoaWNoIHRoZSBmaW5nZXIgbXVzdCBiZSBtb3ZlZCB0byBzdGFydCBkcmFnXG4gIHByaXZhdGUgX0NPUFlPUEFDSVRZID0gMC43OyAvLyBPcGFjaXR5IG9mIHRoZSBkcmFnIGNvcHkgZWxlbWVudFxuICBwcml2YXRlIHN0YXRpYyBfaW5zdGFuY2U6IFRvdWNoRHJhZ0FuZERyb3A7XG5cbiAgY29weVN0eWxlc0RyYWdDbG9uZTogYm9vbGVhbiA9IHRydWU7XG4gIGRyYWdPbkNsaWNrOiBib29sZWFuID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgLy8gQ2hlY2sgc2luZ2xldG9uXG4gICAgaWYgKFRvdWNoRHJhZ0FuZERyb3AuX2luc3RhbmNlKSB7XG4gICAgICAvLyAgdGhyb3cgbmV3IEVycm9yKFwiVG91Y2hEcmFnQW5kRHJvcCBjYW4ndCBiZSBpbnN0YW50aWF0ZWQgbW9yZSB0aGFuIG9uY2UuXCIpO1xuICAgICAgcmV0dXJuIFRvdWNoRHJhZ0FuZERyb3AuX2luc3RhbmNlO1xuICAgIH1cbiAgICBUb3VjaERyYWdBbmREcm9wLl9pbnN0YW5jZSA9IHRoaXM7XG5cbiAgICAvLyB0aGlzLl9pbml0aWFsaXplRmllbGRzKCk7XG5cbiAgICAvLyBBZGQgZXZlbnQgbGlzdGVuZXJzXG5cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCB0aGlzLl90b3VjaE1vdmUuYmluZCh0aGlzKSwgeyBwYXNzaXZlOiBmYWxzZSwgY2FwdHVyZTogZmFsc2UgfSk7XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5fdG91Y2hNb3ZlLmJpbmQodGhpcyksIHsgcGFzc2l2ZTogZmFsc2UsIGNhcHR1cmU6IGZhbHNlIH0pO1xuXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCB0aGlzLl90b3VjaEVuZC5iaW5kKHRoaXMpLCB7IHBhc3NpdmU6IGZhbHNlLCBjYXB0dXJlOiBmYWxzZSB9KTtcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgdGhpcy5fdG91Y2hFbmQuYmluZCh0aGlzKSwgeyBwYXNzaXZlOiBmYWxzZSwgY2FwdHVyZTogZmFsc2UgfSk7XG5cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaGNhbmNlbCcsIHRoaXMuX3RvdWNoQ2FuY2VsLmJpbmQodGhpcyksIHsgcGFzc2l2ZTogZmFsc2UsIGNhcHR1cmU6IGZhbHNlIH0pO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBhZGREcmFnZ2FibGVzKGRyYWdnYWJsZXM6IEVsZW1lbnRbXSkge1xuICAgIGRyYWdnYWJsZXMuZm9yRWFjaChlbCA9PiB7XG4gICAgICBlbC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgdGhpcy5fdG91Y2hTdGFydC5iaW5kKHRoaXMpLCB7IHBhc3NpdmU6IGZhbHNlLCBjYXB0dXJlOiBmYWxzZSB9KTtcbiAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIHRoaXMuX3RvdWNoU3RhcnQuYmluZCh0aGlzKSwgeyBwYXNzaXZlOiBmYWxzZSwgY2FwdHVyZTogZmFsc2UgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGJhY2sgZm9yIHRvdWNoc3RhcnQgZXZlbnQgbGlzdGVuZXIuXG4gICAqIEBwYXJhbSB7VG91Y2hFdmVudH0gZVxuICAgKi9cbiAgcHJpdmF0ZSBfdG91Y2hTdGFydChlKSB7XG4gICAgLy8gU2F2ZSBjdXJyZW50IHRpbWVzdGFtcFxuICAgIHRoaXMuX3RvdWNoQmVnaW4gPSBEYXRlLm5vdygpO1xuXG4gICAgY29uc3QgeyB4LCB5IH0gPSB0aGlzLl9nZXRQb2ludChlKTtcblxuICAgIHRoaXMuX3RvdWNoRG93biA9IHsgeCwgeSB9O1xuXG4gICAgdGhpcy5fZHJhZ1NyYyA9IGUuY3VycmVudFRhcmdldDtcbiAgICB0aGlzLl9jYW5EcmFnID0gdHJ1ZTtcblxuICAgIGlmICh0aGlzLmRyYWdPbkNsaWNrKSB7XG4gICAgICBjb25zdCBfdG91Y2hlcyA9IHsgY2xpZW50WDogeCwgY2xpZW50WTogeSB9O1xuICAgICAgdGhpcy5fZHJhZ1J1bm5pbmcgPSB0cnVlO1xuICAgICAgdGhpcy5fY3JlYXRlRHJhZ0NvcHkoZSwgX3RvdWNoZXMpO1xuICAgIH1cblxuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmb3IgdG91Y2htb3ZlIGV2ZW50IGxpc3RlbmVyLlxuICAgKiBAcGFyYW0ge1RvdWNoRXZlbnR9IGVcbiAgICovXG4gIHByaXZhdGUgX3RvdWNoTW92ZShlKSB7XG4gICAgaWYgKHRoaXMuX2NhbkRyYWcgJiYgdGhpcy5fZHJhZ1NyYykge1xuICAgICAgLy8gQ3JlYXRlIGNvcHkgb2YgZWxlbWVudCBmb3IgdmlzdWFsIGRyYWcgZmVlZGJhY2tcblxuICAgICAgY29uc3QgeyB4LCB5IH0gPSB0aGlzLl9nZXRQb2ludChlKTtcbiAgICAgIGNvbnN0IF90b3VjaGVzID0geyBjbGllbnRYOiB4LCBjbGllbnRZOiB5IH07XG5cbiAgICAgIGlmICh0aGlzLl9nZXREZWx0YShfdG91Y2hlcykgPj0gdGhpcy5fRFJBR0RFTFRBKSB7XG4gICAgICAgIHRoaXMuX2RyYWdSdW5uaW5nID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fY3JlYXRlRHJhZ0NvcHkoZSwgX3RvdWNoZXMpO1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2NyZWF0ZURyYWdDb3B5ID0gKGU6IGFueSwgX3RvdWNoZXM6IHsgY2xpZW50WDogbnVtYmVyOyBjbGllbnRZOiBudW1iZXIgfSkgPT4ge1xuICAgIGlmICh0aGlzLl9kcmFnQ29weSA9PT0gbnVsbCAmJiB0aGlzLl9kcmFnUnVubmluZykge1xuICAgICAgdGhpcy5fZHJhZ1NyYy5zdHlsZS5vcGFjaXR5ID0gdGhpcy5fQ09QWU9QQUNJVFk7XG4gICAgICB0aGlzLl9kcmFnQ29weSA9IHRoaXMuX2RyYWdTcmMuY2xvbmVOb2RlKHRydWUpO1xuICAgICAgY29uc3QgZWxlbWVudFN0eWxlcyA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMuX2RyYWdTcmMpO1xuXG4gICAgICB0aGlzLl9kcmFnQ29weS5zdHlsZSA9ICcnO1xuICAgICAgdGhpcy5fZHJhZ0NvcHkuc2V0QXR0cmlidXRlKCdkcmFnY2xvbmUnLCAnJyk7XG5cbiAgICAgIGlmICh0aGlzLmNvcHlTdHlsZXNEcmFnQ2xvbmUpIHtcbiAgICAgICAgZm9yIChjb25zdCBzdHlsZSBvZiBlbGVtZW50U3R5bGVzKSB7XG4gICAgICAgICAgdGhpcy5fZHJhZ0NvcHkuc3R5bGVbc3R5bGVdID0gZWxlbWVudFN0eWxlcy5nZXRQcm9wZXJ0eVZhbHVlKHN0eWxlKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLl9jYWxjdWxhdGVEcmFnQ29weVBvc2l0aW9uKF90b3VjaGVzKTtcblxuICAgICAgdGhpcy5fZHJhZ0NvcHkuc3R5bGUudG9wID0gX3RvdWNoZXMuY2xpZW50WSAtIHRoaXMuX2NvcHlPZmZzZXQueSArICdweCc7XG4gICAgICB0aGlzLl9kcmFnQ29weS5zdHlsZS5sZWZ0ID0gX3RvdWNoZXMuY2xpZW50WCAtIHRoaXMuX2NvcHlPZmZzZXQueCArICdweCc7XG4gICAgICB0aGlzLl9kcmFnQ29weS5zdHlsZS5wb3NpdGlvbiA9ICdmaXhlZCc7XG4gICAgICB0aGlzLl9kcmFnQ29weS5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ25vbmUnO1xuICAgICAgdGhpcy5fZHJhZ0NvcHkuc3R5bGUuekluZGV4ID0gJzk5OTk5OSc7XG5cbiAgICAgIHRoaXMuX2RyYWdDb3B5ID0gZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLl9kcmFnQ29weSk7XG4gICAgICB0aGlzLl9kaXNwYXRjaEV2ZW50KHRoaXMuX2RyYWdTcmMsICdkcmFnc3RhcnQnKTtcbiAgICB9XG5cbiAgICAvLyBEcmFnIGlzIHJ1bm5pbmcsIG1vdmUgZHJhZyBjb3B5IGFuZCBmaXJlIGV2ZW50c1xuICAgIGlmICh0aGlzLl9kcmFnUnVubmluZykge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby10aGlzLWFsaWFzXG4gICAgICBjb25zdCBfdGhpcyA9IHRoaXM7XG4gICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoX3RoaXMuX3RvdWNoRW5kQ2FsbGVkIHx8IF90aGlzLl9kcmFnQ29weSA9PT0gbnVsbCkgcmV0dXJuO1xuICAgICAgICBfdGhpcy5fZHJhZ0NvcHkuc3R5bGUudG9wID0gX3RvdWNoZXMuY2xpZW50WSAtIF90aGlzLl9jb3B5T2Zmc2V0LnkgKyAncHgnO1xuICAgICAgICBfdGhpcy5fZHJhZ0NvcHkuc3R5bGUubGVmdCA9IF90b3VjaGVzLmNsaWVudFggLSBfdGhpcy5fY29weU9mZnNldC54ICsgJ3B4JztcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCB0YXJnZXQgPSB0aGlzLl9maW5kRHJvcHBhYmxlKGUpO1xuXG4gICAgICAvLyBGaXJlIGRyYWdsZWF2ZSBhbmQgZHJhZ2VudGVyIGV2ZW50cyB3aGVuIHRhcmdldCBoYXMgY2hhbmdlZCBkdXJpbmcgbW92ZVxuICAgICAgaWYgKHRhcmdldCAhPSB0aGlzLl9sYXN0VGFyZ2V0KSB7XG4gICAgICAgIHRoaXMuX2Rpc3BhdGNoRXZlbnQodGFyZ2V0LCAnZHJhZ2VudGVyJyk7XG4gICAgICAgIHRoaXMuX2Rpc3BhdGNoRXZlbnQodGhpcy5fbGFzdFRhcmdldCwgJ2RyYWdsZWF2ZScpO1xuICAgICAgICB0aGlzLl9sYXN0VGFyZ2V0ID0gdGFyZ2V0O1xuICAgICAgfVxuXG4gICAgICAvLyBNYWtlIGN1cnJlbnQgZHJvcCBjb250YWluZXIgY2xhc3N3aWRlIGF2YWlsYWJsZSBhbmQgZmlyZSBkcmFnb3ZlciBpZiBpdCdzIHJlYWxseSBhIGRyb3AgY29udGFpbmVyLlxuXG4gICAgICB0aGlzLl9jdXJyZW50RHJvcENvbnRhaW5lciA9IHRhcmdldDtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50RHJvcENvbnRhaW5lcikgdGhpcy5fZGlzcGF0Y2hFdmVudCh0YXJnZXQsICdkcmFnb3ZlcicpO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogQ2FsbGJhY2sgZm9yIHRvdWNoZW5kIGV2ZW50IGxpc3RlbmVyLlxuICAgKiBAcGFyYW0ge1RvdWNoRXZlbnR9IGVcbiAgICovXG4gIHByaXZhdGUgX3RvdWNoRW5kKGUpIHtcbiAgICB0aGlzLl90b3VjaEVuZENhbGxlZCA9IHRydWU7XG4gICAgdGhpcy5fY2FuRHJhZyA9IGZhbHNlO1xuXG4gICAgLy8gY29uc29sZS5sb2coMSwgZS50YXJnZXQsIHRoaXMuX2N1cnJlbnREcm9wQ29udGFpbmVyKTtcblxuICAgIC8vIFVzZXIgc2VlbXMgdG8gY2xpY2tcbiAgICAvLyBpZiAoIXRoaXMuX2RyYWdSdW5uaW5nICYmIHRoaXMuX2hhbmRsZUNsaWNrKSB7XG4gICAgLy8gICB0aGlzLl9kaXNwYXRjaEV2ZW50KGUudGFyZ2V0LCAnY2xpY2snKTtcbiAgICAvLyAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAvLyAgIHJldHVybjtcbiAgICAvLyB9XG4gICAgaWYgKHRoaXMuX2N1cnJlbnREcm9wQ29udGFpbmVyKSB7XG4gICAgICB0aGlzLl9kaXNwYXRjaEV2ZW50KHRoaXMuX2N1cnJlbnREcm9wQ29udGFpbmVyLCAnZHJvcCcpO1xuICAgICAgdGhpcy5fZGlzcGF0Y2hFdmVudCh0aGlzLl9kcmFnU3JjLCAnZHJhZ2VuZCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBmaXJlIGRyYWdFdmVudCBldmVuIGlmIHRoZWlyIGlzIG5vIGRyb3BwYWJsZS4gQW5kIGFzc2lnbiBkcm9wRWZmZWN0IG5vbmUuXG4gICAgICAvLyBmb3Igb3VyIHB1cnBvc2UsIHRoaXMgd2lsbCBicmluZyBiYWNrIHRoZSBkcmFnIHRvIGl0cyBzdGFydCBwb3NpdGlvbiwgc2VlbCBkcmFnLWRyb3AtaW50ZXJhY3Rpb24tbWl4aW4udHNcbiAgICAgIGlmICh0aGlzLl9kcmFnUnVubmluZykge1xuICAgICAgICBjb25zdCBldmVudCA9IG5ldyBDdXN0b21FdmVudCgnZHJhZ2VuZCcsIHsgYnViYmxlczogdHJ1ZSwgY2FuY2VsYWJsZTogdHJ1ZSB9KTtcbiAgICAgICAgZXZlbnRbJ2RhdGFUcmFuc2ZlciddID0geyBkcm9wRWZmZWN0OiAnbm9uZScgfTtcbiAgICAgICAgdGhpcy5fZHJhZ1NyYz8uZGlzcGF0Y2hFdmVudChldmVudCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5fcmVzZXQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmb3IgdG91Y2hjYW5jZWwgZXZlbnQgbGlzdGVuZXIsIGluIGNhc2UgYnJvd3NlciBzdXBwb3J0cyB0aGlzLlxuICAgKiBAcGFyYW0ge1RvdWNoRXZlbnR9IGVcbiAgICovXG4gIHByaXZhdGUgX3RvdWNoQ2FuY2VsKGUpIHtcbiAgICB0aGlzLl9yZXNldCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgdGhlIG5leHQgZHJvcHBhYmxlIGVsZW1lbnQgYXQgY3VycmVudCBwb2ludC5cbiAgICogQHBhcmFtIHtPYmplY3R9IHB0XG4gICAqL1xuICBwcml2YXRlIF9maW5kRHJvcHBhYmxlKGV2ZW50KSB7XG4gICAgY29uc3QgcG9pbnRGcm9tVG91Y2hFdmVudCA9IHRoaXMuX2dldFBvaW50KGV2ZW50KTtcbiAgICBjb25zdCB2aXNpdGVkID0gbmV3IFNldDxFbGVtZW50PigpO1xuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmdldEVsZW1lbnRXaXRoRHJvcHpvbmUoZG9jdW1lbnQsIHBvaW50RnJvbVRvdWNoRXZlbnQueCwgcG9pbnRGcm9tVG91Y2hFdmVudC55LCB2aXNpdGVkKTtcbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RWxlbWVudFdpdGhEcm9wem9uZShcbiAgICByb290OiBEb2N1bWVudE9yU2hhZG93Um9vdCxcbiAgICB4OiBudW1iZXIsXG4gICAgeTogbnVtYmVyLFxuICAgIHZpc2l0ZWQ6IFNldDxFbGVtZW50PlxuICApOiBFbGVtZW50IHwgbnVsbCB7XG4gICAgY29uc3QgZWwgPSByb290LmVsZW1lbnRGcm9tUG9pbnQoeCwgeSkgYXMgSFRNTEVsZW1lbnQgfCBudWxsO1xuICAgIGlmIChlbCkge1xuICAgICAgLy8gQ2hlY2sgaWYgd2UndmUgYWxyZWFkeSB2aXNpdGVkIHRoaXMgZWxlbWVudFxuICAgICAgaWYgKHZpc2l0ZWQuaGFzKGVsKSkge1xuICAgICAgICAvLyBQcmV2ZW50IGluZmluaXRlIHJlY3Vyc2lvbiBieSBub3QgcmV2aXNpdGluZyB0aGUgc2FtZSBlbGVtZW50XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgdmlzaXRlZC5hZGQoZWwpO1xuXG4gICAgICBpZiAoZWwuaGFzQXR0cmlidXRlKCdkcm9wem9uZScpKSB7XG4gICAgICAgIC8vIEZvdW5kIGFuIGVsZW1lbnQgd2l0aCAnZHJvcHpvbmUnOyByZXR1cm4gaXQgaW1tZWRpYXRlbHlcbiAgICAgICAgcmV0dXJuIGVsO1xuICAgICAgfVxuICAgICAgaWYgKGVsLnNoYWRvd1Jvb3QpIHtcbiAgICAgICAgLy8gUmVjdXJzaXZlbHkgc2VhcmNoIHdpdGhpbiB0aGUgU2hhZG93IERPTVxuICAgICAgICBjb25zdCBuZXN0ZWRFbCA9IHRoaXMuZ2V0RWxlbWVudFdpdGhEcm9wem9uZShlbC5zaGFkb3dSb290LCB4LCB5LCB2aXNpdGVkKTtcbiAgICAgICAgaWYgKG5lc3RlZEVsKSB7XG4gICAgICAgICAgLy8gSWYgYSBuZXN0ZWQgZWxlbWVudCB3aXRoICdkcm9wem9uZScgaXMgZm91bmQsIHJldHVybiBpdFxuICAgICAgICAgIHJldHVybiBuZXN0ZWRFbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gTm8gJ2Ryb3B6b25lJyBhdHRyaWJ1dGUgZm91bmQgaW4gZGVlcGVyIGxldmVsczsgcmV0dXJuIHRoZSBjdXJyZW50IGVsZW1lbnRcbiAgICAgIHJldHVybiBlbDtcbiAgICB9XG4gICAgLy8gTm8gZWxlbWVudCBmb3VuZCBhdCB0aGUgZ2l2ZW4gY29vcmRpbmF0ZXNcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgX2dldFBvaW50KGV2ZW50LCBwYWdlPykge1xuICAgIGlmIChldmVudCAmJiBldmVudC50b3VjaGVzKSB7XG4gICAgICBldmVudCA9IGV2ZW50LnRvdWNoZXNbMF07XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICB4OiBwYWdlID8gZXZlbnQucGFnZVggOiBldmVudC5jbGllbnRYLFxuICAgICAgeTogcGFnZSA/IGV2ZW50LnBhZ2VZIDogZXZlbnQuY2xpZW50WVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlcyB0aGUgb2Zmc2V0IGZvciBkaXNwbGF5aW5nIHRoZSBkcmFnIGNvcHkgdG8gaGF2ZSBhIHNlYW1sZXNzIGRyYWdnaW5nLlxuICAgKiBAcGFyYW0ge1RvdWNofSB0b3VjaCBUaGUgY3VycmVudCB0b3VjaC5cbiAgICovXG4gIHByaXZhdGUgX2NhbGN1bGF0ZURyYWdDb3B5UG9zaXRpb24odG91Y2gpIHtcbiAgICBjb25zdCBjbGllbnRSZWN0ID0gdGhpcy5fZHJhZ1NyYy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICB0aGlzLl9jb3B5T2Zmc2V0LnggPSB0b3VjaC5jbGllbnRYIC0gY2xpZW50UmVjdC5sZWZ0O1xuICAgIHRoaXMuX2NvcHlPZmZzZXQueSA9IHRvdWNoLmNsaWVudFkgLSBjbGllbnRSZWN0LnRvcDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGVzIHRoZSBwaXhlbCBkZWx0YSBiZXR3ZWVuIGZpcnN0IHRvdWNoIGFuZCB0aGUgY3VycmVudCB0b3VjaCBwb3NpdGlvbi5cbiAgICogQHBhcmFtIHtPYmplY3R9IHRvdWNoXG4gICAqL1xuICBwcml2YXRlIF9nZXREZWx0YSh0b3VjaCkge1xuICAgIGNvbnN0IHggPSBNYXRoLmFicyh0b3VjaC5jbGllbnRYIC0gdGhpcy5fdG91Y2hEb3duLngpO1xuICAgIGNvbnN0IHkgPSBNYXRoLmFicyh0b3VjaC5jbGllbnRZIC0gdGhpcy5fdG91Y2hEb3duLnkpO1xuXG4gICAgcmV0dXJuIHggKyB5O1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gZSBUaGUgZXZlbnQncyB0YXJnZXQgZWxlbWVudC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50VHlwZSBUaGUgdHlwZSBvZiB0aGUgZXZlbnQuXG4gICAqIEBwYXJhbSB7Ym9vbH0gYnViYmxlIFNldHMgd2hldGhlciB0aGUgZXZlbnQgc2hvdWxkIGJ1YmJsZS5cbiAgICovXG4gIHByaXZhdGUgX2Rpc3BhdGNoRXZlbnQoZSwgZXZlbnRUeXBlLCBidWJibGUgPSB0cnVlKSB7XG4gICAgaWYgKCFlKSByZXR1cm4gZmFsc2U7XG5cbiAgICBjb25zdCBldmVudCA9IG5ldyBDdXN0b21FdmVudChldmVudFR5cGUsIHsgYnViYmxlczogYnViYmxlLCBjYW5jZWxhYmxlOiB0cnVlIH0pO1xuICAgIGV2ZW50WydkYXRhVHJhbnNmZXInXSA9IHRoaXMuX2RhdGFUcmFuc2ZlcjtcbiAgICBlLmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xuICAgIHJldHVybiBldmVudC5kZWZhdWx0UHJldmVudGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0cyBhbGwgdmFyaWFibGVzIGFuZCBwcmVwYXJlcyBmb3IgbmV3IERyYWcgYW5kIERyb3AuXG4gICAqL1xuICBwcml2YXRlIF9yZXNldCgpIHtcbiAgICBpZiAodGhpcy5fZHJhZ1J1bm5pbmcpIHtcbiAgICAgIHRoaXMuX2RyYWdTcmMuc3R5bGUub3BhY2l0eSA9ICcxLjAnO1xuICAgICAgdGhpcy5fZHJhZ0NvcHkucGFyZW50RWxlbWVudC5yZW1vdmVDaGlsZCh0aGlzLl9kcmFnQ29weSk7XG4gICAgfVxuXG4gICAgdGhpcy5fZHJhZ1J1bm5pbmcgPSBmYWxzZTtcbiAgICB0aGlzLl9kcmFnU3JjID0gbnVsbDtcbiAgICB0aGlzLl9kcmFnQ29weSA9IG51bGw7XG4gICAgdGhpcy5fY2FuRHJhZyA9IGZhbHNlO1xuXG4gICAgdGhpcy5fdG91Y2hCZWdpbiA9IDA7XG4gICAgdGhpcy5fdG91Y2hEb3duID0gbnVsbDtcbiAgICB0aGlzLl9sYXN0Q2xpY2sgPSAwO1xuICAgIHRoaXMuX3RvdWNoRW5kQ2FsbGVkID0gZmFsc2U7XG4gICAgdGhpcy5fZGF0YVRyYW5zZmVyID0ge1xuICAgICAgZGF0YToge30sXG4gICAgICBzZXREYXRhOiBmdW5jdGlvbiAodHlwZSwgdmFsKSB7XG4gICAgICAgIHRoaXMuZGF0YVt0eXBlXSA9IHZhbDtcbiAgICAgIH0sXG4gICAgICBnZXREYXRhOiBmdW5jdGlvbiAodHlwZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRhW3R5cGVdO1xuICAgICAgfSxcbiAgICAgIGVmZmVjdEFsbG93ZWQ6ICdtb3ZlJ1xuICAgIH07XG4gICAgdGhpcy5fY29weU9mZnNldCA9IHsgeDogMCwgeTogMCB9O1xuXG4gICAgdGhpcy5fbGFzdFRhcmdldCA9IG51bGw7XG4gICAgdGhpcy5fY3VycmVudERyb3BDb250YWluZXIgPSBudWxsO1xuICAgIHRoaXMuX2hhbmRsZUNsaWNrID0gdHJ1ZTtcbiAgfVxuXG4gIC8vIHByaXZhdGUgX2dldFBvc2l0aW9uRnJvbUV2ZW50KGU6IGFueSk6IHtcbiAgLy8gICB4OiBudW1iZXI7XG4gIC8vICAgeTogbnVtYmVyO1xuICAvLyB9IHtcbiAgLy8gICBsZXQgX3RvdWNoTW92ZTtcbiAgLy8gICBpZiAoZS50eXBlID09ICd0b3VjaHN0YXJ0JyB8fCBlLnR5cGUgPT0gJ3RvdWNobW92ZScgfHwgZS50eXBlID09ICd0b3VjaGVuZCcgfHwgZS50eXBlID09ICd0b3VjaGNhbmNlbCcpIHtcbiAgLy8gICAgIGNvbnN0IGV2dCA9IHR5cGVvZiBlLm9yaWdpbmFsRXZlbnQgPT09ICd1bmRlZmluZWQnID8gZSA6IGUub3JpZ2luYWxFdmVudDtcbiAgLy8gICAgIGNvbnN0IHRvdWNoID0gZXZ0LnRvdWNoZXNbMF0gfHwgZXZ0LmNoYW5nZWRUb3VjaGVzWzBdO1xuICAvLyAgICAgX3RvdWNoTW92ZSA9IHtcbiAgLy8gICAgICAgeDogdG91Y2gucGFnZVgsXG4gIC8vICAgICAgIHk6IHRvdWNoLnBhZ2VZXG4gIC8vICAgICB9O1xuICAvLyAgIH0gZWxzZSBpZiAoXG4gIC8vICAgICBlLnR5cGUgPT0gJ21vdXNlZG93bicgfHxcbiAgLy8gICAgIGUudHlwZSA9PSAnbW91c2V1cCcgfHxcbiAgLy8gICAgIGUudHlwZSA9PSAnbW91c2Vtb3ZlJyB8fFxuICAvLyAgICAgZS50eXBlID09ICdtb3VzZW92ZXInIHx8XG4gIC8vICAgICBlLnR5cGUgPT0gJ21vdXNlb3V0JyB8fFxuICAvLyAgICAgZS50eXBlID09ICdtb3VzZWVudGVyJyB8fFxuICAvLyAgICAgZS50eXBlID09ICdtb3VzZWxlYXZlJ1xuICAvLyAgICkge1xuICAvLyAgICAgX3RvdWNoTW92ZSA9IHtcbiAgLy8gICAgICAgeDogZS5jbGllbnRYLFxuICAvLyAgICAgICB5OiBlLmNsaWVudFlcbiAgLy8gICAgIH07XG4gIC8vICAgfVxuICAvLyAgIHJldHVybiBfdG91Y2hNb3ZlO1xuICAvLyB9XG59XG4iLCAiaW1wb3J0IHsgTGl0RWxlbWVudCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBwcm9wZXJ0eSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcblxudHlwZSBDb25zdHJ1Y3RvcjxUPiA9IG5ldyAoLi4uYXJnczogYW55W10pID0+IFQ7XG5cbmRlY2xhcmUgY2xhc3MgRHJvcHBhYmxlc0ludGVyZmFjZSB7fVxuXG4vLyBodHRwczovL25nLXJ1bi5jb20vZWRpdC85TUdyNWRZV0EyMEFpSnRweTVhej9vcGVuPWFwcCUyRmFwcC5jb21wb25lbnQuaHRtbFxuZXhwb3J0IGNvbnN0IERyb3BwYWJsZXNNaXhpbiA9IDxUIGV4dGVuZHMgQ29uc3RydWN0b3I8TGl0RWxlbWVudD4+KFxuICBzdXBlckNsYXNzOiBULFxuICBkcm9wcGFibGVzSW5TaGFkb3dSb290OiBib29sZWFuLFxuICBkcm9wcGFibGVzU2VsZWN0b3I6IHN0cmluZ1xuKSA9PiB7XG4gIGNsYXNzIERyb3BwYWJsZXNFbGVtZW50IGV4dGVuZHMgc3VwZXJDbGFzcyB7XG4gICAgcHJpdmF0ZSBvYnNlcnZlcjogTXV0YXRpb25PYnNlcnZlcjtcblxuICAgIEBwcm9wZXJ0eSh7IHR5cGU6IEJvb2xlYW4sIHJlZmxlY3Q6IHRydWUgfSkgZGlzYWJsZWQgPSBmYWxzZTtcblxuICAgIG92ZXJyaWRlIGZpcnN0VXBkYXRlZChjaGFuZ2VkUHJvcHMpOiB2b2lkIHtcbiAgICAgIC8vIGZvciBxdGktbWF0Y2gtaW50ZXJhY3Rpb24gdGhlIGRyYWcgaW50ZXJhY3Rpb24gY2FuIGJlIHJlcGxhY2Ugd2l0aCBhIHF0aS1tYXRjaC10YWJ1bGFyIGNsYXNzXG4gICAgICAvLyB3aGljaCBzaG93cyB0aGUgZGF0YSBpbiBhIGEgdGFidWxhciB3YXksIHNvIG5vIGRyYWcgZHJvcCBzaG91bGQgYmUgaW52b2x2ZWQgdGhlblxuICAgICAgaWYgKHRoaXMuY2xhc3NMaXN0LmNvbnRhaW5zKCdxdGktbWF0Y2gtdGFidWxhcicpKSByZXR1cm47XG5cbiAgICAgIHN1cGVyLmZpcnN0VXBkYXRlZChjaGFuZ2VkUHJvcHMpO1xuXG4gICAgICBjb25zdCBkcm9wcGFibGVzID0gQXJyYXkuZnJvbShcbiAgICAgICAgZHJvcHBhYmxlc0luU2hhZG93Um9vdFxuICAgICAgICAgID8gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoZHJvcHBhYmxlc1NlbGVjdG9yKVxuICAgICAgICAgIDogdGhpcy5xdWVyeVNlbGVjdG9yQWxsKGRyb3BwYWJsZXNTZWxlY3RvcilcbiAgICAgICk7XG5cbiAgICAgIHRoaXMuZHJhZ292ZXJIYW5kbGVyID0gdGhpcy5kcmFnb3ZlckhhbmRsZXIuYmluZCh0aGlzKTtcbiAgICAgIHRoaXMuZHJhZ2xlYXZlSGFuZGxlciA9IHRoaXMuZHJhZ2xlYXZlSGFuZGxlci5iaW5kKHRoaXMpO1xuICAgICAgdGhpcy5kcmFnZW50ZXJIYW5kbGVyID0gdGhpcy5kcmFnZW50ZXJIYW5kbGVyLmJpbmQodGhpcyk7XG5cbiAgICAgIHRoaXMuZHJvcEhhbmRsZXIgPSB0aGlzLmRyb3BIYW5kbGVyLmJpbmQodGhpcyk7XG5cbiAgICAgIGRyb3BwYWJsZXMuZm9yRWFjaChkID0+IHtcbiAgICAgICAgZC5zZXRBdHRyaWJ1dGUoJ2Ryb3B6b25lJywgJ21vdmUnKTtcbiAgICAgICAgZC5hZGRFdmVudExpc3RlbmVyKCdkcmFnbGVhdmUnLCB0aGlzLmRyYWdsZWF2ZUhhbmRsZXIpO1xuXG4gICAgICAgIHRoaXMuYXR0YWNoSGFuZGxlcihkKTtcbiAgICAgIH0pO1xuICAgICAgZm9yIChjb25zdCBkcm9wcGFibGUgb2YgZHJvcHBhYmxlcykge1xuICAgICAgICB0aGlzLm9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIobXV0YXRpb25zID0+IHtcbiAgICAgICAgICBtdXRhdGlvbnMuZm9yRWFjaChtdXRhdGlvbiA9PiB7XG4gICAgICAgICAgICBpZiAobXV0YXRpb24udHlwZSA9PT0gJ2F0dHJpYnV0ZXMnKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHByb3BOYW1lID0gbXV0YXRpb24uYXR0cmlidXRlTmFtZTtcbiAgICAgICAgICAgICAgc3dpdGNoIChwcm9wTmFtZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ2Rpc2FibGVkJzoge1xuICAgICAgICAgICAgICAgICAgY29uc3QgZGlzYWJsZWQgPSBkcm9wcGFibGUuaGFzQXR0cmlidXRlKCdkaXNhYmxlZCcpO1xuICAgICAgICAgICAgICAgICAgaWYgKCFkaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmF0dGFjaEhhbmRsZXIoZHJvcHBhYmxlKTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlSGFuZGxlcihkcm9wcGFibGUpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm9ic2VydmVyLm9ic2VydmUoZHJvcHBhYmxlLCB7XG4gICAgICAgICAgYXR0cmlidXRlczogdHJ1ZSAvL2NvbmZpZ3VyZSBpdCB0byBsaXN0ZW4gdG8gYXR0cmlidXRlIGNoYW5nZXNcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhdHRhY2hIYW5kbGVyKGRyb3BwYWJsZTogRWxlbWVudCkge1xuICAgICAgZHJvcHBhYmxlLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdvdmVyJywgdGhpcy5kcmFnb3ZlckhhbmRsZXIpO1xuICAgICAgZHJvcHBhYmxlLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdlbnRlcicsIHRoaXMuZHJhZ2VudGVySGFuZGxlcik7XG4gICAgICBkcm9wcGFibGUuYWRkRXZlbnRMaXN0ZW5lcignZHJvcCcsIHRoaXMuZHJvcEhhbmRsZXIpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVtb3ZlSGFuZGxlcihkcm9wcGFibGU6IEVsZW1lbnQpIHtcbiAgICAgIGRyb3BwYWJsZS5yZW1vdmVFdmVudExpc3RlbmVyKCdkcmFnb3ZlcicsIHRoaXMuZHJhZ292ZXJIYW5kbGVyKTtcbiAgICAgIGRyb3BwYWJsZS5yZW1vdmVFdmVudExpc3RlbmVyKCdkcmFnZW50ZXInLCB0aGlzLmRyYWdlbnRlckhhbmRsZXIpO1xuICAgICAgZHJvcHBhYmxlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Ryb3AnLCB0aGlzLmRyb3BIYW5kbGVyKTtcbiAgICB9XG5cbiAgICBvdmVycmlkZSBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICAgIC8vIGZvciBxdGktbWF0Y2gtaW50ZXJhY3Rpb24gdGhlIGRyYWcgaW50ZXJhY3Rpb24gY2FuIGJlIHJlcGxhY2Ugd2l0aCBhIHF0aS1tYXRjaC10YWJ1bGFyIGNsYXNzXG4gICAgICAvLyB3aGljaCBzaG93cyB0aGUgZGF0YSBpbiBhIGEgdGFidWxhciB3YXksIHNvIG5vIGRyYWcgZHJvcCBzaG91bGQgYmUgaW52b2x2ZWQgdGhlblxuICAgICAgaWYgKHRoaXMuY2xhc3NMaXN0LmNvbnRhaW5zKCdxdGktbWF0Y2gtdGFidWxhcicpKSByZXR1cm47XG5cbiAgICAgIHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgICB0aGlzLm9ic2VydmVyPy5kaXNjb25uZWN0KCk7XG4gICAgfVxuXG4gICAgZHJhZ2VudGVySGFuZGxlcihldjogRHJhZ0V2ZW50KSB7XG4gICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIGRyYWdvdmVySGFuZGxlcihldjogRHJhZ0V2ZW50KSB7XG4gICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgY29uc3QgZHJvcHBhYmxlID0gZXYuY3VycmVudFRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICAgIC8vIGRyb3BwYWJsZXNJblNoYWRvd1Jvb3RcbiAgICAgIC8vID8gZHJvcHBhYmxlLnNldEF0dHJpYnV0ZSgncGFydCcsIGRyb3BwYWJsZS5nZXRBdHRyaWJ1dGUoJ3BhcnQnKSArICcgYWN0aXZlJykgOlxuICAgICAgZHJvcHBhYmxlLnNldEF0dHJpYnV0ZSgnYWN0aXZlJywgJycpO1xuXG4gICAgICBldi5kYXRhVHJhbnNmZXIuZHJvcEVmZmVjdCA9ICdtb3ZlJztcblxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGRyb3BIYW5kbGVyKGV2OiBEcmFnRXZlbnQpIHtcbiAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBjb25zdCBkcm9wcGFibGUgPSBldi5jdXJyZW50VGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgICAgLy8gcGs6IGRyYWdnYWJsZXMgaW4gbGlnaHQgZG9tIGNhbiBiZSBkcmFnZ2VkIHRvIHNoYWRvd2RvbSwgdGhpcyBpcyBvbmUgb2YgdGhlIHJ1bGVzIG9mIHdlYmNvbXBvbmVudHMuXG4gICAgICAvLyBUaGV5IG1heSBub3QgY3JlYXRlIG5ldyBlbGVtZW50cyBpbiBsaWdodCBkb20uIFNvbWUgc29tZXRpbWVzcyBkcm9wIHpvbmVzIHNob3VsZCBiZSBnZW5lcmF0ZWRcbiAgICAgIC8vIGJ5IHRoZSB3ZWJjb21wb25lbnQuIFRoZW4gYSBkcmFnZ2FibGUgKCB3aGljaCBpcyBhbHdheXMgYWxyZWFkeSBjcmVhdGVkIGJ5IGEgd2ViY29tcG9uZW50IClcbiAgICAgIC8vIGNhbiBiZSBpbiBsaWdodCBkb20sIGVuIGNhbiBiZSBkcmFnZ2VkIHRvIHNoYWRvdyBkb20uXG4gICAgICAvLyB0aGlua2luZyBvZiBhbm90aGVyIHdheSB3aGVyZSB3ZSBqdXN0IGNoYW5nZSBzbG90cy4gTWF5YmUgdGhhdHMgYmV0dGVyLi5cbiAgICAgIGNvbnN0IGRyYWdnYWJsZUluTGlnaHREb20gPSB0aGlzLnF1ZXJ5U2VsZWN0b3IoYFtpZGVudGlmaWVyPSR7ZXYuZGF0YVRyYW5zZmVyLmdldERhdGEoJ3RleHQnKX1gKTtcbiAgICAgIGNvbnN0IGRyYWdnYWJsZSA9IGRyYWdnYWJsZUluTGlnaHREb21cbiAgICAgICAgPyBkcmFnZ2FibGVJbkxpZ2h0RG9tXG4gICAgICAgIDogdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoYFtpZGVudGlmaWVyPSR7ZXYuZGF0YVRyYW5zZmVyLmdldERhdGEoJ3RleHQnKX1gKTtcblxuICAgICAgaWYgKCFkcm9wcGFibGUpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgY2Fubm90IGZpbmQgZHJvcHBhYmxlLCB0YXJnZXQ6ICR7ZXYudGFyZ2V0ID8gSlNPTi5zdHJpbmdpZnkoZXYudGFyZ2V0KSA6ICdudWxsJ31gKTtcbiAgICAgIH0gZWxzZSBpZiAoZHJhZ2dhYmxlLnBhcmVudEVsZW1lbnQuZ2V0QXR0cmlidXRlKCdpZGVudGlmaWVyJykgIT09IGRyb3BwYWJsZS5nZXRBdHRyaWJ1dGUoJ2lkZW50aWZpZXInKSkge1xuICAgICAgICBkcm9wcGFibGUuYXBwZW5kQ2hpbGQoZHJhZ2dhYmxlKTtcbiAgICAgIH1cbiAgICAgIC8vIGRyb3BwYWJsZXNJblNoYWRvd1Jvb3RcbiAgICAgIC8vID8gZHJvcHBhYmxlLnNldEF0dHJpYnV0ZSgncGFydCcsIGRyb3BwYWJsZS5nZXRBdHRyaWJ1dGUoJ3BhcnQnKS5yZXBsYWNlKCdhY3RpdmUnLCAnJykudHJpbSgpKSA6XG4gICAgICBkcm9wcGFibGUucmVtb3ZlQXR0cmlidXRlKCdhY3RpdmUnKTtcblxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGRyYWdsZWF2ZUhhbmRsZXIoZXY6IERyYWdFdmVudCkge1xuICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgY29uc3QgZHJvcHBhYmxlID0gZXYuY3VycmVudFRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICAgIGRyb3BwYWJsZS5yZW1vdmVBdHRyaWJ1dGUoJ2FjdGl2ZScpO1xuICAgICAgZXYuZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3QgPSAnbm9uZSc7XG5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIERyb3BwYWJsZXNFbGVtZW50IGFzIENvbnN0cnVjdG9yPERyb3BwYWJsZXNJbnRlcmZhY2U+ICYgVDtcbn07XG4iLCAiLy8gVEhJUyBJUyBBIE1JWElOLCBUSElTIElTIEEgTUlYSU5cbi8vIFVTRSBMSUtFIFRISVNcbi8vIGBgYGNsYXNzIERyb3BMaXN0IGV4dGVuZHMgRmxpcHBhYmxlcyhMaXRFbGVtZW50KSB7YGBgXG4vLyBtaXhpbiB3aGljaCBhbmltYXRlcyBjaGlsZHJlbiB3aXRoIEZMSVBcbi8vIGEgY29tYmluYXRpb24gYmV0d2VlbiB0aGlzIGRpcmVjdGl2ZTpcbi8vIGh0dHBzOi8vbmctcnVuLmNvbS9lZGl0LzlNR3I1ZFlXQTIwQWlKdHB5NWF6P29wZW49YXBwJTJGYXBwLmNvbXBvbmVudC5odG1sXG4vLyBhbmQgYSB0dXRvcmlhbCBob3cgdG8gbWFrZSBhIG1peGluXG4vLyBodHRwczovL2xpdC5kZXYvZG9jcy9jb21wb3NpdGlvbi9taXhpbnMvXG5cbmltcG9ydCB7IExpdEVsZW1lbnQgfSBmcm9tICdsaXQnO1xuXG50eXBlIENvbnN0cnVjdG9yPFQ+ID0gbmV3ICguLi5hcmdzOiBhbnlbXSkgPT4gVDtcblxuZXhwb3J0IGRlY2xhcmUgY2xhc3MgRmxpcHBhYmxlc0ludGVyZmFjZSB7XG4gIGNvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQ7XG4gIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQ7XG59XG5cbi8vIGp1c3QgYSBjb252ZXJzaW9uIG9mIGEgYW5ndWxhciBGTElQIGRpcmVjdGl2ZSwgbWFkZSBhcyBhIE1peGluXG4vLyBodHRwczovL25nLXJ1bi5jb20vZWRpdC85TUdyNWRZV0EyMEFpSnRweTVhej9vcGVuPWFwcCUyRmFwcC5jb21wb25lbnQuaHRtbFxuZXhwb3J0IGNvbnN0IEZsaXBwYWJsZXNNaXhpbiA9IDxUIGV4dGVuZHMgQ29uc3RydWN0b3I8TGl0RWxlbWVudD4+KFxuICBzdXBlckNsYXNzOiBULFxuICBkcm9wcGFibGVzU2VsOiBzdHJpbmcsXG4gIGRyYWdnYWJsZXNTZWw6IHN0cmluZ1xuKSA9PiB7XG4gIGNsYXNzIEZsaXBwYWJsZXNFbGVtZW50IGV4dGVuZHMgc3VwZXJDbGFzcyB7XG4gICAgLy8gcHJpdmF0ZSBzdGF0ZSA9IG5ldyBNYXA8RWxlbWVudCwgYW55PigpO1xuICAgIC8vIHByaXZhdGUgb2JzZXJ2ZXI6IE11dGF0aW9uT2JzZXJ2ZXI7XG4gICAgLy8gZmxpcHBhYmxlc1NlbGVjdG9yOiBzdHJpbmc7XG4gICAgLy8gb3ZlcnJpZGUgYXN5bmMgZmlyc3RVcGRhdGVkKGNoYW5nZWRQcm9wcykge1xuICAgIC8vICAgYXdhaXQgdGhpcy51cGRhdGVDb21wbGV0ZTsgLy8gcGs6IHRoaXMgaXMgdGhlIGtleSB0byBjYWxjdWxhdGUgY29ycmVjdCBwcm9wb3J0aW9uc1xuICAgIC8vICAgY29uc3QgZHJhZ2dhYmxlcyA9IEFycmF5LmZyb20odGhpcy5xdWVyeVNlbGVjdG9yQWxsKGRyYWdnYWJsZXNTZWwpKTtcbiAgICAvLyAgIGRyYWdnYWJsZXMuZm9yRWFjaCgoZWxlbSkgPT4ge1xuICAgIC8vICAgICBjb25zdCB7IGxlZnQsIHRvcCwgd2lkdGgsIGhlaWdodCB9ID0gZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAvLyAgICAgdGhpcy5zdGF0ZS5zZXQoZWxlbSwgeyBsZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHQgfSk7XG4gICAgLy8gICB9KTtcbiAgICAvLyAgIHRoaXMub2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcih0aGlzLmFuaW1hdGVNZSk7XG4gICAgLy8gICBjb25zdCBkcm9wcGFibGVzID0gQXJyYXkuZnJvbSh0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwoZHJvcHBhYmxlc1NlbCkpO1xuICAgIC8vICAgZHJvcHBhYmxlcy5mb3JFYWNoKChkcmFnZ2FibGUpID0+IHtcbiAgICAvLyAgICAgdGhpcy5vYnNlcnZlci5vYnNlcnZlKGRyYWdnYWJsZSwgeyBjaGlsZExpc3Q6IHRydWUgfSk7XG4gICAgLy8gICB9KTtcbiAgICAvLyAgIHRoaXMub2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLCB7IGNoaWxkTGlzdDogdHJ1ZSB9KTtcbiAgICAvLyAgIHN1cGVyLmZpcnN0VXBkYXRlZChjaGFuZ2VkUHJvcHMpO1xuICAgIC8vIH1cbiAgICAvLyBwcml2YXRlIGFuaW1hdGVNZSA9ICgpID0+IHtcbiAgICAvLyAgIHRoaXMuc3RhdGUuZm9yRWFjaCgodmFsdWUsIGVsZW0pID0+IHtcbiAgICAvLyAgICAgY29uc3QgeyBsZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHQgfSA9IGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgLy8gICAgIGlmICh0aGlzLnN0YXRlLmdldChlbGVtKSA9PSBudWxsKSB7XG4gICAgLy8gICAgICAgdGhpcy5zdGF0ZS5zZXQoZWxlbSwgeyBsZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHQgfSk7XG4gICAgLy8gICAgIH1cbiAgICAvLyAgICAgY29uc3QgY2FjaGUgPSB0aGlzLnN0YXRlLmdldChlbGVtKTtcbiAgICAvLyAgICAgY29uc3QgZGVsdGFYID0gY2FjaGUubGVmdCAtIGxlZnQ7XG4gICAgLy8gICAgIGNvbnN0IGRlbHRhWSA9IGNhY2hlLnRvcCAtIHRvcDtcbiAgICAvLyAgICAgY29uc3QgZGVsdGFXID0gY2FjaGUud2lkdGggLyB3aWR0aDtcbiAgICAvLyAgICAgY29uc3QgZGVsdGFIID0gY2FjaGUuaGVpZ2h0IC8gaGVpZ2h0O1xuICAgIC8vICAgICB0aGlzLnN0YXRlLnNldChlbGVtLCB7IGxlZnQsIHRvcCwgd2lkdGgsIGhlaWdodCB9KTtcbiAgICAvLyAgICAgY29uc3QgeyBkdXJhdGlvbiwgZWFzaW5nIH0gPSB7IGR1cmF0aW9uOiAzNTAsIGVhc2luZzogJ2N1YmljLWJlemllcigwLjI2LCAwLjg2LCAwLjQ0LCAwLjk4NSknIH07XG4gICAgLy8gICAgIGVsZW0uYW5pbWF0ZShcbiAgICAvLyAgICAgICBbXG4gICAgLy8gICAgICAgICB7XG4gICAgLy8gICAgICAgICAgIHRyYW5zZm9ybU9yaWdpbjogJ3RvcCBsZWZ0JyxcbiAgICAvLyAgICAgICAgICAgdHJhbnNmb3JtOiBgXG4gICAgLy8gdHJhbnNsYXRlKCR7ZGVsdGFYfXB4LCAke2RlbHRhWX1weClcbiAgICAvLyBzY2FsZSgke2RlbHRhV30sICR7ZGVsdGFIfSlcbiAgICAvLyBgLFxuICAgIC8vICAgICAgICAgICAvLyB3aWR0aDogY2FjaGUud2lkdGgsXG4gICAgLy8gICAgICAgICAgIC8vIGhlaWdodDogY2FjaGUuaGVpZ2h0KyAncHgnLFxuICAgIC8vICAgICAgICAgICAvLyBvcGFjaXR5OiBjYWNoZS5vcGFjaXR5LFxuICAgIC8vICAgICAgICAgfSxcbiAgICAvLyAgICAgICAgIHtcbiAgICAvLyAgICAgICAgICAgdHJhbnNmb3JtT3JpZ2luOiAndG9wIGxlZnQnLFxuICAgIC8vICAgICAgICAgICB0cmFuc2Zvcm06ICdub25lJyxcbiAgICAvLyAgICAgICAgIH0sXG4gICAgLy8gICAgICAgXSxcbiAgICAvLyAgICAgICB7XG4gICAgLy8gICAgICAgICBkdXJhdGlvbixcbiAgICAvLyAgICAgICAgIGVhc2luZyxcbiAgICAvLyAgICAgICB9XG4gICAgLy8gICAgICk7XG4gICAgLy8gICB9KTtcbiAgICAvLyB9O1xuICAgIC8vIG92ZXJyaWRlIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xuICAgIC8vICAgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICAvLyAgIHRoaXMub2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgIC8vIH1cbiAgfVxuICByZXR1cm4gRmxpcHBhYmxlc0VsZW1lbnQgYXMgQ29uc3RydWN0b3I8RmxpcHBhYmxlc0ludGVyZmFjZT4gJiBUO1xufTtcbiIsICJpbXBvcnQgeyBMaXRFbGVtZW50IH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IElJbnRlcmFjdGlvbiB9IGZyb20gJy4uL2ludGVyYWN0aW9uL2ludGVyYWN0aW9uLmludGVyZmFjZSc7XG5pbXBvcnQgeyBEcm9wcGFibGVzTWl4aW4gfSBmcm9tICcuL2Ryb3BwYWJsZXMtbWl4aW4nO1xuaW1wb3J0IHsgRmxpcHBhYmxlc01peGluIH0gZnJvbSAnLi9mbGlwcGFibGVzLW1peGluJztcblxuaW1wb3J0IHsgcHJvcGVydHkgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBsaXZlUXVlcnkgfSBmcm9tICcuLi8uLi8uLi8uLi9kZWNvcmF0b3JzL2xpdmUtcXVlcnknO1xuaW1wb3J0IHsgd2F0Y2ggfSBmcm9tICcuLi8uLi8uLi8uLi9kZWNvcmF0b3JzL3dhdGNoJztcbmltcG9ydCB7IFRvdWNoRHJhZ0FuZERyb3AgfSBmcm9tICcuL2RyYWctZHJvcC1hcGknO1xuLy8ga2V5Ym9hcmQgbmF2aWdhdGFibGUgZHJhZyBkcm9wOiBodHRwczovL2NvZGVwZW4uaW8vU2l0ZVBvaW50L3Blbi92RXpYYmpcbi8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzU1MjQyMTk2L3R5cGVzY3JpcHQtYWxsb3dzLXRvLXVzZS1wcm9wZXItbXVsdGlwbGUtaW5oZXJpdGFuY2Utd2l0aC1taXhpbnMtYnV0LWZhaWxzLXRvLWNcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9taWNyb3NvZnQvVHlwZVNjcmlwdC9pc3N1ZXMvMTc3NDQjaXNzdWVjb21tZW50LTU1ODk5MDM4MVxuLy8gaHR0cHM6Ly9uZy1ydW4uY29tL2VkaXQvOU1HcjVkWVdBMjBBaUp0cHk1YXo/b3Blbj1hcHAlMkZhcHAuY29tcG9uZW50Lmh0bWxcblxudHlwZSBDb25zdHJ1Y3RvcjxUPiA9IG5ldyAoLi4uYXJnczogYW55W10pID0+IFQ7XG5cbmludGVyZmFjZSBJbnRlcmFjdGlvbkNvbmZpZ3VyYXRpb24ge1xuICBjb3B5U3R5bGVzRHJhZ0Nsb25lOiBib29sZWFuO1xuICBkcmFnQ2FuQmVQbGFjZWRCYWNrOiBib29sZWFuO1xuICBkcmFnT25DbGljazogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNvbnN0IERyYWdEcm9wSW50ZXJhY3Rpb25NaXhpbiA9IDxUIGV4dGVuZHMgQ29uc3RydWN0b3I8TGl0RWxlbWVudD4+KFxuICBzdXBlckNsYXNzOiBULFxuICBkcmFnZ2FibGVzU2VsZWN0b3I6IHN0cmluZyxcbiAgZHJvcHBhYmxlc0luU2hhZG93Um9vdDogYm9vbGVhbixcbiAgZHJvcHBhYmxlc1NlbGVjdG9yOiBzdHJpbmdcbikgPT4ge1xuICBjbGFzcyBEcmFnRHJvcEludGVyYWN0aW9uRWxlbWVudCBleHRlbmRzIEZsaXBwYWJsZXNNaXhpbihcbiAgICBEcm9wcGFibGVzTWl4aW4oc3VwZXJDbGFzcywgZHJvcHBhYmxlc0luU2hhZG93Um9vdCwgZHJvcHBhYmxlc1NlbGVjdG9yKSxcbiAgICBkcm9wcGFibGVzU2VsZWN0b3IsXG4gICAgZHJhZ2dhYmxlc1NlbGVjdG9yXG4gICkge1xuICAgIHByb3RlY3RlZCBkcmFnZ2FibGVzID0gbmV3IE1hcDxFbGVtZW50LCB7IHBhcmVudDogRWxlbWVudDsgaW5kZXg6IG51bWJlciB9PigpO1xuICAgIHByb3RlY3RlZCBkcm9wcGFibGVzOiBFbGVtZW50W107XG4gICAgZHJhZ0Ryb3BBcGk6IFRvdWNoRHJhZ0FuZERyb3A7XG5cbiAgICBAbGl2ZVF1ZXJ5KGRyYWdnYWJsZXNTZWxlY3RvcilcbiAgICByZUluaXREcmFnQW5kRHJvcChkcmFnc0FkZGVkOiBFbGVtZW50W10sIGRyYWdzUmVtb3ZlZDogRWxlbWVudFtdKSB7XG4gICAgICBpZiAodGhpcy5jbGFzc0xpc3QuY29udGFpbnMoJ3F0aS1tYXRjaC10YWJ1bGFyJykpIHJldHVybjtcblxuICAgICAgLy8gY2hlY2sgaWYgYWRkZWQgZWxlbWVudHMgYXJlIG5vdCBhbHJlYWR5IGluIGxpc3RcbiAgICAgIGNvbnN0IGRyYWdnYWJsZXMgPSBkcmFnc0FkZGVkLmZpbHRlcihkID0+ICF0aGlzLmRyYWdnYWJsZXMgfHwgIXRoaXMuZHJhZ2dhYmxlcy5nZXQoZCkpO1xuXG4gICAgICBpZiAoZHJhZ2dhYmxlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuZHJhZ0Ryb3BBcGkuYWRkRHJhZ2dhYmxlcyhkcmFnc0FkZGVkKTtcblxuICAgICAgICBkcmFnc0FkZGVkLmZvckVhY2goZWxlbSA9PiB7XG4gICAgICAgICAgLy8gc3RvcmUgaW5pdGlhbCBwb3NpdGlvbnMgb2YgZWxlbWVudHMsIGFuZCBvZiBjb3Vyc2UsIGp1c3QgdGhlIGVsZW1lbnRzIGZvciBsb29waW5nIGFuZCBzdWNoXG4gICAgICAgICAgdGhpcy5kcmFnZ2FibGVzLnNldChlbGVtLCB7XG4gICAgICAgICAgICBwYXJlbnQ6IGVsZW0ucGFyZW50RWxlbWVudCxcbiAgICAgICAgICAgIGluZGV4OiBBcnJheS5mcm9tKGVsZW0ucGFyZW50Tm9kZS5jaGlsZHJlbikuaW5kZXhPZihlbGVtKVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGVsZW0uc2V0QXR0cmlidXRlKCdxdGktZHJhZ2dhYmxlJywgJ3RydWUnKTtcbiAgICAgICAgICBlbGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdzdGFydCcsIHRoaXMuaGFuZGxlRHJhZ1N0YXJ0KTtcbiAgICAgICAgICBlbGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdlbmQnLCB0aGlzLmhhbmRsZURyYWdFbmQpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcsIGF0dHJpYnV0ZTogJ3Jlc3BvbnNlLWlkZW50aWZpZXInIH0pIHJlc3BvbnNlSWRlbnRpZmllcjogc3RyaW5nID0gJyc7XG5cbiAgICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6IGZhbHNlLCB0eXBlOiBPYmplY3QgfSkgY29uZmlndXJhdGlvbjogSW50ZXJhY3Rpb25Db25maWd1cmF0aW9uID0ge1xuICAgICAgY29weVN0eWxlc0RyYWdDbG9uZTogdHJ1ZSxcbiAgICAgIGRyYWdDYW5CZVBsYWNlZEJhY2s6IHRydWUsXG4gICAgICBkcmFnT25DbGljazogZmFsc2VcbiAgICB9O1xuICAgIEB3YXRjaCgnY29uZmlndXJhdGlvbicpXG4gICAgaGFuZGxlRHJhZ09wdGlvbnNDaGFuZ2VkKG9sZCwgZHJhZ09wdGlvbnMpIHtcbiAgICAgIHRoaXMuZHJhZ0Ryb3BBcGkuY29weVN0eWxlc0RyYWdDbG9uZSA9IGRyYWdPcHRpb25zLmNvcHlTdHlsZXNEcmFnQ2xvbmU7XG4gICAgICB0aGlzLmRyYWdEcm9wQXBpLmRyYWdPbkNsaWNrID0gZHJhZ09wdGlvbnMuZHJhZ09uQ2xpY2s7XG4gICAgfVxuXG4gICAgQHByb3BlcnR5KHsgdHlwZTogQm9vbGVhbiwgcmVmbGVjdDogdHJ1ZSB9KSBkaXNhYmxlZCA9IGZhbHNlO1xuICAgIEB3YXRjaCgnZGlzYWJsZWQnLCB7IHdhaXRVbnRpbEZpcnN0VXBkYXRlOiB0cnVlIH0pXG4gICAgaGFuZGxlRGlzYWJsZWRDaGFuZ2Uob2xkLCBkaXNhYmxlZDogYm9vbGVhbikge1xuICAgICAgdGhpcy5kcmFnZ2FibGVzLmZvckVhY2goKHMsIGNoKSA9PiB7XG4gICAgICAgIGRpc2FibGVkID8gY2guc2V0QXR0cmlidXRlKCdkaXNhYmxlZCcsICcnKSA6IGNoLnJlbW92ZUF0dHJpYnV0ZSgnZGlzYWJsZWQnKTtcbiAgICAgICAgZGlzYWJsZWQgPyBjaC5yZW1vdmVBdHRyaWJ1dGUoJ3F0aS1kcmFnZ2FibGUnKSA6IGNoLnNldEF0dHJpYnV0ZSgncXRpLWRyYWdnYWJsZScsICd0cnVlJyk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBAcHJvcGVydHkoeyB0eXBlOiBCb29sZWFuLCByZWZsZWN0OiB0cnVlIH0pIHJlYWRvbmx5ID0gZmFsc2U7XG4gICAgQHdhdGNoKCdyZWFkb25seScsIHsgd2FpdFVudGlsRmlyc3RVcGRhdGU6IHRydWUgfSlcbiAgICBoYW5kbGVSZWFkb25seUNoYW5nZShvbGQsIHJlYWRvbmx5OiBib29sZWFuKSB7XG4gICAgICB0aGlzLmRyYWdnYWJsZXMuZm9yRWFjaCgocywgY2gpID0+IHtcbiAgICAgICAgcmVhZG9ubHkgPyBjaC5zZXRBdHRyaWJ1dGUoJ3JlYWRvbmx5JywgJycpIDogY2gucmVtb3ZlQXR0cmlidXRlKCdyZWFkb25seScpO1xuICAgICAgICByZWFkb25seSA/IGNoLnJlbW92ZUF0dHJpYnV0ZSgncXRpLWRyYWdnYWJsZScpIDogY2guc2V0QXR0cmlidXRlKCdxdGktZHJhZ2dhYmxlJywgJ3RydWUnKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIEBwcm9wZXJ0eSh7IHR5cGU6IE51bWJlciwgcmVmbGVjdDogdHJ1ZSwgYXR0cmlidXRlOiAnbWluLWFzc29jaWF0aW9ucycgfSkgbWluQXNzb2NpYXRpb25zID0gMTtcbiAgICBAcHJvcGVydHkoeyB0eXBlOiBOdW1iZXIsIHJlZmxlY3Q6IHRydWUsIGF0dHJpYnV0ZTogJ21heC1hc3NvY2lhdGlvbnMnIH0pIG1heEFzc29jaWF0aW9ucyA9IDE7XG5cbiAgICBvdmVycmlkZSBmaXJzdFVwZGF0ZWQoY2hhbmdlZFByb3BzKTogdm9pZCB7XG4gICAgICBzdXBlci5maXJzdFVwZGF0ZWQoY2hhbmdlZFByb3BzKTtcbiAgICAgIHRoaXMuZHJvcHBhYmxlcyA9IEFycmF5LmZyb20oXG4gICAgICAgIGRyb3BwYWJsZXNJblNoYWRvd1Jvb3RcbiAgICAgICAgICA/IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKGRyb3BwYWJsZXNTZWxlY3RvcilcbiAgICAgICAgICA6IHRoaXMucXVlcnlTZWxlY3RvckFsbChkcm9wcGFibGVzU2VsZWN0b3IpXG4gICAgICApO1xuICAgICAgLy8gUEs6IE1heWJlIGxhdGVyLCBmb3Igbm93IHdlIGFzc3VtZSBkcm9wcGFibGVzIGFyZSBub3QgZHluYW1pY2x5IGFkZGVkIG9yIHJlbW92ZWRcbiAgICAgIC8vIC5maWx0ZXIoKGVsZW0pID0+ICF0aGlzLmRyb3BwYWJsZXMgfHwgIXRoaXMuZHJvcHBhYmxlcy5pbmNsdWRlcyhlbGVtKSk7XG4gICAgICAvLyB0aGlzLmRyb3BwYWJsZXMgPSB0aGlzLmRyb3BwYWJsZXMgPyB0aGlzLmRyb3BwYWJsZXMuY29uY2F0KG5ld0Ryb3BwYWJsZXMpIDogbmV3RHJvcHBhYmxlcztcbiAgICB9XG5cbiAgICBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG5cbiAgICAgIHRoaXMuZHJhZ0Ryb3BBcGkgPSBuZXcgVG91Y2hEcmFnQW5kRHJvcCgpO1xuXG4gICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoXG4gICAgICAgIG5ldyBDdXN0b21FdmVudDxEcmFnRHJvcEludGVyYWN0aW9uRWxlbWVudD4oJ3F0aS1yZWdpc3Rlci1pbnRlcmFjdGlvbicsIHtcbiAgICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICAgIGNvbXBvc2VkOiB0cnVlLFxuICAgICAgICAgIGRldGFpbDogdGhpc1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZURyYWdTdGFydCA9IChldjogYW55KSA9PiB7XG4gICAgICBldi5kYXRhVHJhbnNmZXIuc2V0RGF0YSgndGV4dCcsIGV2LmN1cnJlbnRUYXJnZXQuZ2V0QXR0cmlidXRlKGBpZGVudGlmaWVyYCkpO1xuICAgICAgZXYuY3VycmVudFRhcmdldC5zZXRBdHRyaWJ1dGUoJ2RyYWdnaW5nJywgJycpO1xuXG4gICAgICAvLyBoaWdobGlnaHQgYWxsIGRyb3BwYWJsZXMgd2l0aCBhbiBhY3RpdmUgY2xhc3NcbiAgICAgIHRoaXMuZHJvcHBhYmxlcy5mb3JFYWNoKGQgPT4gZC5zZXRBdHRyaWJ1dGUoJ2VuYWJsZWQnLCAnJykpO1xuICAgIH07XG5cbiAgICBwcml2YXRlIGhhbmRsZURyYWdFbmQgPSAoZXY6IERyYWdFdmVudCkgPT4ge1xuICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHRoaXMuZHJvcHBhYmxlcy5mb3JFYWNoKGQgPT4gZC5yZW1vdmVBdHRyaWJ1dGUoJ2VuYWJsZWQnKSk7XG4gICAgICBjb25zdCBkcmFnZ2FibGUgPSBldi5jdXJyZW50VGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgICAgZHJhZ2dhYmxlLnJlbW92ZUF0dHJpYnV0ZSgnb3ZlcicpO1xuICAgICAgZHJhZ2dhYmxlLnJlbW92ZUF0dHJpYnV0ZSgnZHJhZ2dpbmcnKTtcblxuICAgICAgLy8gcGs6IGlmIG5vdCBkcm9wcGVkIG9uIGEgZHJvcCBsb2NhdGlvbiBwdXQgaXQgYmFjayB3aGVyZSBpdCBiZWxvbmdzXG4gICAgICBpZiAoZXYuZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3QgPT09ICdub25lJyB8fCBldi5kYXRhVHJhbnNmZXIuZHJvcEVmZmVjdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24uZHJhZ0NhbkJlUGxhY2VkQmFjaykge1xuICAgICAgICAgIHRoaXMucGxhY2VEcmFnZ2FibGVCYWNrKGRyYWdnYWJsZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChldi5kYXRhVHJhbnNmZXIuZHJvcEVmZmVjdCA9PT0gJ21vdmUnKSB7XG4gICAgICAgIHRoaXMuc2F2ZVJlc3BvbnNlKCk7XG4gICAgICAgIHRoaXMuY2hlY2tNYXhNYXRjaEFzc29jaWF0aW9ucygpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBwcml2YXRlIHBsYWNlRHJhZ2dhYmxlQmFjayhkcmFnZ2FibGU6IEhUTUxFbGVtZW50KSB7XG4gICAgICBjb25zdCBwb3NpdGlvbiA9IHRoaXMuZHJhZ2dhYmxlcy5nZXQoZHJhZ2dhYmxlKTtcbiAgICAgIGNvbnN0IGluZGV4ID1cbiAgICAgICAgcG9zaXRpb24uaW5kZXggPD0gcG9zaXRpb24ucGFyZW50LmNoaWxkcmVuLmxlbmd0aCA/IHBvc2l0aW9uLmluZGV4IDogcG9zaXRpb24ucGFyZW50LmNoaWxkcmVuLmxlbmd0aCAtIDE7XG4gICAgICBjb25zdCBpbnRlcmFjdGlvbiA9IHBvc2l0aW9uLnBhcmVudDtcbiAgICAgIGNvbnN0IGdhcFRleHQgPSBwb3NpdGlvbi5wYXJlbnQuY2hpbGRyZW5baW5kZXhdO1xuXG4gICAgICBpbnRlcmFjdGlvbi5pbnNlcnRCZWZvcmUoZHJhZ2dhYmxlLCBnYXBUZXh0KTtcbiAgICAgIHRoaXMuc2F2ZVJlc3BvbnNlKCk7XG4gICAgICB0aGlzLmNoZWNrTWF4TWF0Y2hBc3NvY2lhdGlvbnMoKTtcbiAgICB9XG5cbiAgICByZXNldChzYXZlID0gdHJ1ZSk6IHZvaWQge1xuICAgICAgdGhpcy5kcmFnZ2FibGVzLmZvckVhY2goKHBvc2l0aW9uLCBkcmFnZ2FibGUpID0+IHtcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBwb3NpdGlvbi5wYXJlbnQuY2hpbGRyZW47XG4gICAgICAgIGNvbnN0IGluZGV4ID0gcG9zaXRpb24uaW5kZXggPCBjaGlsZHJlbi5sZW5ndGggPyBwb3NpdGlvbi5pbmRleCA6IGNoaWxkcmVuLmxlbmd0aDtcbiAgICAgICAgcG9zaXRpb24ucGFyZW50Lmluc2VydEJlZm9yZShkcmFnZ2FibGUsIGNoaWxkcmVuW2luZGV4XSk7XG4gICAgICB9KTtcbiAgICAgIHNhdmUgJiYgdGhpcy5zYXZlUmVzcG9uc2UoKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgY2hlY2tNYXhNYXRjaEFzc29jaWF0aW9ucygpIHtcbiAgICAgIHRoaXMuZHJvcHBhYmxlcy5mb3JFYWNoKGQgPT4ge1xuICAgICAgICBjb25zdCBtYXhNYXRjaCA9ICsoZC5nZXRBdHRyaWJ1dGUoJ21hdGNoLW1heCcpIHx8IDEpO1xuICAgICAgICAvLyBjb25zdCBtYXhNaW4gPSArKGQuZ2V0QXR0cmlidXRlKCdtYXRjaC1taW4nKSB8fCAwKTtcbiAgICAgICAgLy8gY29uc3QgZGlzYWJsZSA9IG1heE1hdGNoIDw9IChkLmNoaWxkcmVuLmxlbmd0aCB8fCAwKTtcbiAgICAgICAgY29uc3QgZGlzYWJsZSA9IG1heE1hdGNoIDw9IChkLnF1ZXJ5U2VsZWN0b3JBbGwoJ1txdGktZHJhZ2dhYmxlPVwidHJ1ZVwiXScpLmxlbmd0aCB8fCAwKTtcblxuICAgICAgICBkaXNhYmxlID8gZC5zZXRBdHRyaWJ1dGUoJ2Rpc2FibGVkJywgJycpIDogZC5yZW1vdmVBdHRyaWJ1dGUoJ2Rpc2FibGVkJyk7XG4gICAgICAgIGRpc2FibGUgPyBkLnJlbW92ZUF0dHJpYnV0ZSgnZHJvcHpvbmUnKSA6IGQuc2V0QXR0cmlidXRlKCdkcm9wem9uZScsICdtb3ZlJyk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBzZXQgcmVzcG9uc2UocmVzcG9uc2U6IHN0cmluZ1tdKSB7XG4gICAgICAvLyBmb3IgcXRpLW1hdGNoLWludGVyYWN0aW9uIHRoZSBkcmFnIGludGVyYWN0aW9uIGNhbiBiZSByZXBsYWNlIHdpdGggYSBxdGktbWF0Y2gtdGFidWxhciBjbGFzc1xuICAgICAgLy8gd2hpY2ggc2hvd3MgdGhlIGRhdGEgaW4gYSBhIHRhYnVsYXIgd2F5LCBzbyBubyBkcmFnIGRyb3Agc2hvdWxkIGJlIGludm9sdmVkIHRoZW5cbiAgICAgIGlmICh0aGlzLmNsYXNzTGlzdC5jb250YWlucygncXRpLW1hdGNoLXRhYnVsYXInKSkgcmV0dXJuO1xuXG4gICAgICB0aGlzLnJlc2V0KGZhbHNlKTtcbiAgICAgIGlmIChyZXNwb25zZSAhPT0gbnVsbCAmJiBBcnJheS5pc0FycmF5KHJlc3BvbnNlKSlcbiAgICAgICAgcmVzcG9uc2UuZm9yRWFjaChyZXNwb25zZSA9PiB7XG4gICAgICAgICAgY29uc3QgW2Ryb3BJZCwgLi4uZHJhZ0lkc10gPSByZXNwb25zZS5zcGxpdCgnICcpLnJldmVyc2UoKTtcbiAgICAgICAgICBpZiAoZHJvcElkKSB7XG4gICAgICAgICAgICBjb25zdCBkcm9wcGFibGUgPSB0aGlzLmRyb3BwYWJsZXMuZmluZChkcm9wID0+IGRyb3AuZ2V0QXR0cmlidXRlKCdpZGVudGlmaWVyJykgPT09IGRyb3BJZCk7XG4gICAgICAgICAgICBkcmFnSWRzLmZvckVhY2goZHJhZ0lkID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgZHJhZ2dhYmxlID0gdGhpcy5xdWVyeVNlbGVjdG9yKGBbaWRlbnRpZmllcj0ke2RyYWdJZH1dYCk7XG4gICAgICAgICAgICAgIGlmICghZHJvcHBhYmxlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihgY2Fubm90IGZpbmQgZHJvcHBhYmxlIHdpdGggaWRlbnRpZmllcjogJHtkcm9wSWR9YCk7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoIWRyYWdnYWJsZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYGNhbm5vdCBmaW5kIGRyYWdnYWJsZSB3aXRoIGlkZW50aWZpZXI6ICR7ZHJhZ0lkfWApO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRyb3BwYWJsZS5hcHBlbmRDaGlsZChkcmFnZ2FibGUpO1xuICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tNYXhNYXRjaEFzc29jaWF0aW9ucygpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHZhbGlkYXRlKCkge1xuICAgICAgY29uc3QgZHJvcHBhYmxlcyA9IGRyb3BwYWJsZXNJblNoYWRvd1Jvb3RcbiAgICAgICAgPyBBcnJheS5mcm9tKHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKGRyb3BwYWJsZXNTZWxlY3RvcikpXG4gICAgICAgIDogQXJyYXkuZnJvbSh0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwoZHJvcHBhYmxlc1NlbGVjdG9yKSk7XG4gICAgICBjb25zdCBhc3NvY2lhdGlvbnMgPSBkcm9wcGFibGVzLmZpbHRlcihkID0+IGQuY2hpbGRFbGVtZW50Q291bnQgPiAwKS5sZW5ndGg7XG4gICAgICByZXR1cm4gdGhpcy5taW5Bc3NvY2lhdGlvbnMgPD0gMCB8fCB0aGlzLm1pbkFzc29jaWF0aW9ucyA8PSBhc3NvY2lhdGlvbnM7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHNhdmVSZXNwb25zZSgpIHtcbiAgICAgIGxldCByZXNwb25zZTogc3RyaW5nIHwgc3RyaW5nW107XG4gICAgICBpZiAodHlwZW9mICh0aGlzIGFzIGFueSkuZ2V0UmVzcG9uc2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgLy8gb25seSBmb3IgdGhlIHF0aS1vcmRlci1pbnRlcmFjdGlvbiwgYWJzdHJhY3RlZCB0aGlzIGF3YXkgaW4gYSBtZXRob2RcbiAgICAgICAgcmVzcG9uc2UgPSAodGhpcyBhcyBhbnkpLmdldFJlc3BvbnNlKCk7IC8vIENhbGwgdGhlIG1ldGhvZCBmcm9tIHRoZSBpbXBsZW1lbnRpbmcgY2xhc3NcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3BvbnNlID0gdGhpcy5kcm9wcGFibGVzLm1hcChkcm9wcGFibGUgPT4ge1xuICAgICAgICAgIGNvbnN0IGRyYWdzSW5Ecm9wcGFibGUgPSBkcm9wcGFibGUucXVlcnlTZWxlY3RvckFsbCgnW3F0aS1kcmFnZ2FibGU9XCJ0cnVlXCJdJyk7XG4gICAgICAgICAgY29uc3QgaWRlbnRpZmllcnMgPSBBcnJheS5mcm9tKGRyYWdzSW5Ecm9wcGFibGUpLm1hcChkID0+IGQuZ2V0QXR0cmlidXRlKCdpZGVudGlmaWVyJykpO1xuICAgICAgICAgIGNvbnN0IGRyb3BwYWJsZUlkZW50aWZpZXIgPSBkcm9wcGFibGUuZ2V0QXR0cmlidXRlKCdpZGVudGlmaWVyJyk7XG4gICAgICAgICAgcmV0dXJuIFsuLi5pZGVudGlmaWVycywgZHJvcHBhYmxlSWRlbnRpZmllcl0uam9pbignICcpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KFxuICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoJ3F0aS1pbnRlcmFjdGlvbi1yZXNwb25zZScsIHtcbiAgICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICAgIGNvbXBvc2VkOiB0cnVlLFxuICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgcmVzcG9uc2VJZGVudGlmaWVyOiB0aGlzLnJlc3BvbnNlSWRlbnRpZmllcixcbiAgICAgICAgICAgIHJlc3BvbnNlXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIERyYWdEcm9wSW50ZXJhY3Rpb25FbGVtZW50IGFzIENvbnN0cnVjdG9yPElJbnRlcmFjdGlvbj4gJiBUO1xufTtcbiIsICJpbXBvcnQgeyBodG1sIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQsIHByb3BlcnR5LCBzdGF0ZSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IEludGVyYWN0aW9uIH0gZnJvbSAnLi4vaW50ZXJuYWwvaW50ZXJhY3Rpb24vaW50ZXJhY3Rpb24nO1xuaW1wb3J0IHsgcmVtb3ZlRG91YmxlU2xhc2hlcyB9IGZyb20gJy4uLy4uL2ludGVybmFsL3V0aWxzJztcblxuQGN1c3RvbUVsZW1lbnQoJ3F0aS1jdXN0b20taW50ZXJhY3Rpb24nKVxuZXhwb3J0IGNsYXNzIFF0aUN1c3RvbUludGVyYWN0aW9uIGV4dGVuZHMgSW50ZXJhY3Rpb24ge1xuICAvLyBUaGlzIGN1c3RvbS1pbnRlcmFjdGlvbiBzdXBwb3J0IHRoZSBDRVMgQVBJIHdoaWNoIGlzIHVzZSBpbiBGQUNFVFxuICAvL1xuICAvLyBJdCB3b3JrcyBsaWtlIHRoaXM6XG4gIC8vIDEuIFRoZSBDSSBtYW5pZmVzdCBpcyBmZXRjaGVkXG4gIC8vIDIuIEFuIGlmcmFtZSBpcyBjcmVhdGVkIGFuZCB0aGUgZmlyc3Qgc3R5bGUgYW5kIGZpcnN0IHNjcmlwdCBmcm9tIHRoZSBtYW5pZmVzdCBhcmUgbG9hZGVkXG4gIC8vIDMuIFRoZSBmaXJzdCBzY3JpcHQgaXMgYm9vdHN0cmFwLmpzIHdoaWNoIGFsc28gY3JlYXRlcyBhbiBpZnJhbWUgYW5kIGxvYWRzIHRoZSBmaXJzdCBtZWRpYSBmcm9tIHRoZSBtYW5pZmVzdFxuICAvLyA0LiBDb21tdW5pY2F0aW9uIGlzIGRvbmUgdmlhIHRoZSBDRVMgQVBJIGJ1dCBiZWNhdXNlIHRoZSBpZnJhbWUgaXMgbm90IGFsbG93ZWQgdG8gYWNjZXNzIHRoZSBnbG9iYWwgQ0VTIG9iamVjdCB3ZSBuZWVkIHRvIHVzZSB3aW5kb3cucG9zdE1lc3NhZ2VcblxuICAvLyBUbyBhY2hpZXZlIHRoaXMgd2UgY2hhbmdlIHRoZSBwYWNrYWdlIGJ5IHJlcGxhY2luZyB0aGUgYm9vdHN0cmFwLmpzIHdpdGggb3VyIG93biBhbmQgaW5qZWN0IGEgcHJveHkgQ0VTIEFQSSB0aGF0IGNvbW11bmljYXRlcyB2aWEgcG9zdE1lc3NhZ2VcbiAgLy8gQmVjYXVzZSB3ZSBhbHNvIHdhbnQgdG8gcnVuIHRoaXMgaW4gc3Rvcnlib29rLCB3ZSBjYW5ub3QgdXNlIHdpbmRvdy50b3AgYmVjYXVzZSB0byBzZW5kIG1lc3NhZ2VzIHRoZXJlLCBiZWNhdXNlIGluIGNhc2Ugb2Ygc3Rvcnlib29rIHRoYXQgaXMgbm90IHRoZSB0b3Agd2luZG93LlxuICAvLyBTbyB3ZSBzZW5kIG1lc3NhZ2VzIHRvIGFsbCBwYXJlbnQgd2luZG93c1xuICBwcml2YXRlIHJhd1Jlc3BvbnNlOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmhhbmRsZVBvc3RNZXNzYWdlID0gdGhpcy5oYW5kbGVQb3N0TWVzc2FnZS5iaW5kKHRoaXMpO1xuICB9XG5cbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nLCBhdHRyaWJ1dGU6ICdyZXNwb25zZS1pZGVudGlmaWVyJyB9KVxuICByZXNwb25zZUlkZW50aWZpZXI6IHN0cmluZztcblxuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcsIGF0dHJpYnV0ZTogJ2RhdGEnIH0pXG4gIGRhdGE6IHN0cmluZztcblxuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcsIGF0dHJpYnV0ZTogJ2RhdGEtYmFzZS1pdGVtJyB9KVxuICBiYXNlSXRlbVVybDogc3RyaW5nO1xuXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZywgYXR0cmlidXRlOiAnZGF0YS1iYXNlLXJlZicgfSlcbiAgYmFzZVJlZlVybDogc3RyaW5nO1xuXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZywgYXR0cmlidXRlOiAnaWQnIH0pXG4gIGlkOiBzdHJpbmc7XG5cbiAgQHN0YXRlKClcbiAgcHJpdmF0ZSBfZXJyb3JNZXNzYWdlOiBzdHJpbmcgPSBudWxsO1xuICBtYW5pZmVzdDoge1xuICAgIHNjcmlwdDogc3RyaW5nW107XG4gICAgc3R5bGU6IHN0cmluZ1tdO1xuICAgIG1lZGlhOiBzdHJpbmdbXTtcbiAgfTtcblxuICBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuXG4gICAgY29uc3QgdXJpVG9NYW5pZmVzdCA9IHRoaXMuZGF0YS5zdGFydHNXaXRoKCdodHRwJylcbiAgICAgID8gdGhpcy5kYXRhXG4gICAgICA6IHJlbW92ZURvdWJsZVNsYXNoZXModGhpcy5iYXNlSXRlbVVybCArICcvJyArIHRoaXMuZGF0YSk7XG4gICAgLy8gZmV0Y2ggdGhlIGpzb24gZmlsZSBsb2NhdGVkIGF0IHRoZSBkYXRhIGF0dHJpYnV0ZVxuICAgIGZldGNoKHVyaVRvTWFuaWZlc3QpXG4gICAgICAudGhlbihyZXNwb25zZSA9PiByZXNwb25zZS5qc29uKCkpXG4gICAgICAudGhlbihkYXRhID0+IHtcbiAgICAgICAgdGhpcy5tYW5pZmVzdCA9IGRhdGE7XG4gICAgICAgIHRoaXMuc2V0dXBDRVMoKTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgdGhpcy5fZXJyb3JNZXNzYWdlID0gZXJyO1xuICAgICAgfSk7XG4gIH1cblxuICAvLyBNSDogQ2hhbmdlZCB0aGUgZGVmYXVsdCBib290c3RyYXAuanMgdG8gdXNlIHRoZSBuZXcgQ0VTIEFQSVxuICAvLyBCZWNhdXNlIHRoZSBvbGQgb25lIHVzZXMgdGhlIGdsb2JhbCBDRVMgb2JqZWN0IHRoYXQgaXMgbm90IGFsbG93ZWQgdG8gYmUgYWNjZXNzZWQgd2hlbiB0aGUgQ0lcbiAgLy8gaXMgZW1iZWRkZWQgaW4gYW4gaWZyYW1lIGFuZCBjb21pbmcgZnJvbSBhbm90aGVyIGRvbWFpblxuICAvLyBUaGVyZWZvciB3ZSBuZWVkIHRvIHVzZSB0aGUgbmV3IENFUyBBUEkgdG8gY29tbXVuaWNhdGVzIHZpYSB0aGUgYnJvYWRjYXN0IEFQSVxuICBzZXR1cENFUygpIHtcbiAgICBjb25zdCBpZnJhbWUgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcignI3BjaUNvbnRhaW5lcicpIGFzIEhUTUxJRnJhbWVFbGVtZW50LFxuICAgICAgaWZyYW1lV2luID0gaWZyYW1lLmNvbnRlbnRXaW5kb3cgfHwgaWZyYW1lLFxuICAgICAgaWZyYW1lRG9jID0gaWZyYW1lLmNvbnRlbnREb2N1bWVudDtcblxuICAgIC8vIGNvbnN0IGNoYW5uZWwgPSBuZXcgQnJvYWRjYXN0Q2hhbm5lbCgnY2VzX2NoYW5uZWwnKTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIHRoaXMuaGFuZGxlUG9zdE1lc3NhZ2UpO1xuICAgIGlmcmFtZURvYy5vcGVuKCk7XG4gICAgaWZyYW1lRG9jLndyaXRlKGBcbiAgICAgIDxodG1sPlxuICAgICAgICA8aGVhZD5cbiAgICAgICAgICA8bGluayBocmVmPScke3JlbW92ZURvdWJsZVNsYXNoZXMoYCR7dGhpcy5iYXNlUmVmVXJsfS8ke3RoaXMubWFuaWZlc3Quc3R5bGVbMF19YCl9JyByZWw9XCJzdHlsZXNoZWV0XCIgLz5cbiAgICAgICAgICA8c2NyaXB0IHNyYz0nJHtyZW1vdmVEb3VibGVTbGFzaGVzKGAke3RoaXMuYmFzZVJlZlVybH0vJHt0aGlzLm1hbmlmZXN0LnNjcmlwdFswXX1gKX0nPjwvc2NyaXB0PlxuICAgICAgICA8L2hlYWQ+XG4gICAgICAgIDxib2R5PjwvYm9keT5cbiAgICAgIDwvaHRtbD5cbiAgICAgIGApO1xuXG4gICAgaWZyYW1lRG9jLmNsb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIGdldElGcmFtZXMoKSB7XG4gICAgY29uc3QgaWZyYW1lc0luU2hhZG93Um9vdCA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKCdpZnJhbWUnKTtcbiAgICBjb25zdCBpZnJhbWUgPSB0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwoJ2lmcmFtZScpO1xuXG4gICAgY29uc3Qgb3V0ZXJJRnJhbWVzID0gWy4uLmlmcmFtZXNJblNoYWRvd1Jvb3QsIC4uLmlmcmFtZV07XG4gICAgZm9yIChjb25zdCBpZnJhbWUgb2Ygb3V0ZXJJRnJhbWVzKSB7XG4gICAgICBjb25zdCBpZnJhbWVTcmMgPSBpZnJhbWUuc3JjO1xuICAgICAgY29uc3QgaXNTYW1lT3JpZ2luID0gbmV3IFVSTChpZnJhbWVTcmMsIHdpbmRvdy5sb2NhdGlvbi5ocmVmKS5vcmlnaW4gPT09IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW47XG4gICAgICBpZiAoaXNTYW1lT3JpZ2luKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3Qgb3V0ZXJEb2MgPSBpZnJhbWUuY29udGVudERvY3VtZW50IHx8IGlmcmFtZS5jb250ZW50V2luZG93LmRvY3VtZW50O1xuICAgICAgICAgIGlmIChvdXRlckRvYykge1xuICAgICAgICAgICAgdGhpcy5nZXRJbm5lcklGcmFtZXMob3V0ZXJEb2MsIG91dGVySUZyYW1lcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgYWNjZXNzaW5nIG5lc3RlZCBpZnJhbWU6JywgZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgLy8gZ2V0IG9ubHkgdW5pcXVlIGlmcmFtZXNcbiAgICBvdXRlcklGcmFtZXMuZm9yRWFjaCgoaWZyYW1lLCBpbmRleCkgPT4ge1xuICAgICAgaWYgKG91dGVySUZyYW1lcy5pbmRleE9mKGlmcmFtZSkgIT09IGluZGV4KSB7XG4gICAgICAgIG91dGVySUZyYW1lcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBvdXRlcklGcmFtZXM7XG4gIH1cblxuICBwcml2YXRlIGdldElubmVySUZyYW1lcyhpZnJhbWVEb2N1bWVudDogRG9jdW1lbnQsIGlmcmFtZXMgPSBbXSkge1xuICAgIC8vIEdldCBhbGwgaWZyYW1lcyBpbiB0aGUgY3VycmVudCBkb2N1bWVudFxuICAgIGNvbnN0IGN1cnJlbnRJZnJhbWVzID0gaWZyYW1lRG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnaWZyYW1lJyk7XG5cbiAgICBjdXJyZW50SWZyYW1lcy5mb3JFYWNoKGlmcmFtZSA9PiB7XG4gICAgICAvLyBBZGQgdGhlIGN1cnJlbnQgaWZyYW1lIHRvIHRoZSBsaXN0XG4gICAgICBpZnJhbWVzLnB1c2goaWZyYW1lKTtcblxuICAgICAgLy8gUmVjdXJzaXZlbHkgZ2V0IGlmcmFtZXMgd2l0aGluIHRoZSBjdXJyZW50IGlmcmFtZVxuICAgICAgLy8gQ2hlY2sgaWYgdGhlIGlmcmFtZSBzcmMgaXMgZnJvbSB0aGUgc2FtZSBvcmlnaW5cbiAgICAgIGNvbnN0IGlmcmFtZVNyYyA9IGlmcmFtZS5zcmM7XG4gICAgICBjb25zdCBpc1NhbWVPcmlnaW4gPSBuZXcgVVJMKGlmcmFtZVNyYywgd2luZG93LmxvY2F0aW9uLmhyZWYpLm9yaWdpbiA9PT0gd2luZG93LmxvY2F0aW9uLm9yaWdpbjtcblxuICAgICAgaWYgKGlzU2FtZU9yaWdpbikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IG5lc3RlZERvYyA9IGlmcmFtZS5jb250ZW50RG9jdW1lbnQgfHwgaWZyYW1lLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQ7XG4gICAgICAgICAgdGhpcy5nZXRJbm5lcklGcmFtZXMobmVzdGVkRG9jLCBpZnJhbWVzKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGFjY2Vzc2luZyBuZXN0ZWQgaWZyYW1lOicsIGUpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLndhcm4oJ1NraXBwZWQgY3Jvc3Mtb3JpZ2luIGlmcmFtZTonLCBpZnJhbWVTcmMpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGlmcmFtZXM7XG4gIH1cblxuICBwcml2YXRlIHBvc3RUb1dpbmRvd0FuZElmcmFtZXModHlwZTogc3RyaW5nLCBkYXRhOiBhbnkpIHtcbiAgICB3aW5kb3cucG9zdE1lc3NhZ2UoeyB0eXBlLCBkYXRhIH0sICcqJyk7XG4gICAgY29uc3QgaWZyYW1lcyA9IHRoaXMuZ2V0SUZyYW1lcygpO1xuICAgIGZvciAoY29uc3QgaWZyYW1lIG9mIGlmcmFtZXMpIHtcbiAgICAgIGlmIChpZnJhbWUuY29udGVudFdpbmRvdykge1xuICAgICAgICBpZnJhbWUuY29udGVudFdpbmRvdy5wb3N0TWVzc2FnZSh7IHR5cGUsIGRhdGEgfSwgJyonKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBoYW5kbGVQb3N0TWVzc2FnZShldmVudDogTWVzc2FnZUV2ZW50KSB7XG4gICAgY29uc3QgeyB0eXBlLCBkYXRhIH0gPSBldmVudC5kYXRhO1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSAnc2V0UmVzcG9uc2UnOlxuICAgICAgICB0aGlzLnJhd1Jlc3BvbnNlID0gZGF0YTtcbiAgICAgICAgdGhpcy5zYXZlUmVzcG9uc2UoZGF0YSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZ2V0UmVzcG9uc2UnOiB7XG4gICAgICAgIHRoaXMucG9zdFRvV2luZG93QW5kSWZyYW1lcygncmVzcG9uc2VEYXRhJywgdGhpcy5yYXdSZXNwb25zZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnZ2V0TWVkaWEnOiB7XG4gICAgICAgIGNvbnN0IG1lZGlhRGF0YSA9IHRoaXMubWFuaWZlc3QubWVkaWEubWFwKG1lZGlhID0+IHtcbiAgICAgICAgICBjb25zdCB1cmwgPSBtZWRpYS5zdGFydHNXaXRoKCdodHRwJykgPyBtZWRpYSA6IHJlbW92ZURvdWJsZVNsYXNoZXModGhpcy5iYXNlUmVmVXJsICsgJy8nICsgbWVkaWEpO1xuICAgICAgICAgIHJldHVybiB1cmw7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnBvc3RUb1dpbmRvd0FuZElmcmFtZXMoJ21lZGlhRGF0YScsIG1lZGlhRGF0YSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnc2V0U3RhZ2VIZWlnaHQnOlxuICAgICAgICBjb25zb2xlLmxvZygnc2V0U3RhZ2VIZWlnaHQgbm90IGltcGxlbWVudGVkJyk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHZhbGlkYXRlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnJhd1Jlc3BvbnNlICE9PSAnJztcbiAgfVxuXG4gIHNldCByZXNwb25zZSh2YWw6IFJlYWRvbmx5PHN0cmluZyB8IHN0cmluZ1tdPikge1xuICAgIHRoaXMucmF3UmVzcG9uc2UgPSB2YWwgYXMgc3RyaW5nO1xuICB9XG5cbiAgb3ZlcnJpZGUgZGlzY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCB0aGlzLmhhbmRsZVBvc3RNZXNzYWdlKTtcbiAgICBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpO1xuICB9XG5cbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYDxpZnJhbWVcbiAgICAgICAgd2lkdGg9JHt0aGlzLmdldEF0dHJpYnV0ZSgnd2lkdGgnKX1cbiAgICAgICAgaGVpZ2h0PSR7dGhpcy5nZXRBdHRyaWJ1dGUoJ2hlaWdodCcpfVxuICAgICAgICBmcmFtZWJvcmRlcj1cIjBcIlxuICAgICAgICB0aXRsZT1cInBjaUNvbnRhaW5lclwiXG4gICAgICAgIGlkPVwicGNpQ29udGFpbmVyXCJcbiAgICAgID5cbiAgICAgIDwvaWZyYW1lPlxuICAgICAgJHt0aGlzLl9lcnJvck1lc3NhZ2UgJiZcbiAgICAgIGh0bWxgPGRpdiBzdHlsZT1cImNvbG9yOnJlZFwiPlxuICAgICAgICA8aDE+RXJyb3I8L2gxPlxuICAgICAgICAke3RoaXMuX2Vycm9yTWVzc2FnZX1cbiAgICAgIDwvZGl2PmB9YDtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktY3VzdG9tLWludGVyYWN0aW9uJzogUXRpQ3VzdG9tSW50ZXJhY3Rpb247XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBodG1sIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQsIHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgSW50ZXJhY3Rpb24gfSBmcm9tICcuLi9pbnRlcm5hbC9pbnRlcmFjdGlvbi9pbnRlcmFjdGlvbic7XG5AY3VzdG9tRWxlbWVudCgncXRpLWVuZC1hdHRlbXB0LWludGVyYWN0aW9uJylcbmV4cG9ydCBjbGFzcyBRdGlFbmRBdHRlbXB0SW50ZXJhY3Rpb24gZXh0ZW5kcyBJbnRlcmFjdGlvbiB7XG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZywgYXR0cmlidXRlOiAnY291bnQtYXR0ZW1wdCcgfSlcbiAgcHVibGljIGNvdW50QXR0ZW1wdDogc3RyaW5nID0gJ3RydWUnO1xuXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZyB9KVxuICBwdWJsaWMgdGl0bGU6ICdlbmQgYXR0ZW1wdCc7XG5cbiAgdmFsaWRhdGUoKTogYm9vbGVhbiB7XG4gICAgLy8gdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkLicpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHNldCByZXNwb25zZSh2YWw6IHVuZGVmaW5lZCkge1xuICAgIC8vIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcbiAgfVxuXG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICByZXR1cm4gaHRtbGA8YnV0dG9uID9kaXNhYmxlZD0ke3RoaXMuZGlzYWJsZWR9IHBhcnQ9XCJidXR0b25cIiBAY2xpY2s9JHt0aGlzLmVuZEF0dGVtcHR9PiR7dGhpcy50aXRsZX08L2J1dHRvbj5gO1xuICB9XG4gIHB1YmxpYyBlbmRBdHRlbXB0KGU6IEV2ZW50KSB7XG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KFxuICAgICAgbmV3IEN1c3RvbUV2ZW50KCdlbmQtYXR0ZW1wdCcsIHtcbiAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgY29tcG9zZWQ6IHRydWUsXG4gICAgICAgIGRldGFpbDogeyByZXNwb25zZUlkZW50aWZpZXI6IHRoaXMucmVzcG9uc2VJZGVudGlmaWVyLCBjb3VudEF0dGVtcHQ6IHRoaXMuY291bnRBdHRlbXB0ID09PSAndHJ1ZScgfVxuICAgICAgfSlcbiAgICApO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1lbmQtYXR0ZW1wdC1pbnRlcmFjdGlvbic6IFF0aUVuZEF0dGVtcHRJbnRlcmFjdGlvbjtcbiAgfVxufVxuIiwgImltcG9ydCB7IGNzcywgaHRtbCwgTGl0RWxlbWVudCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgRHJhZ0Ryb3BJbnRlcmFjdGlvbk1peGluIH0gZnJvbSAnLi4vaW50ZXJuYWwvZHJhZy1kcm9wL2RyYWctZHJvcC1pbnRlcmFjdGlvbi1taXhpbic7XG5cbkBjdXN0b21FbGVtZW50KCdxdGktZ2FwLW1hdGNoLWludGVyYWN0aW9uJylcbmV4cG9ydCBjbGFzcyBRdGlHYXBNYXRjaEludGVyYWN0aW9uIGV4dGVuZHMgRHJhZ0Ryb3BJbnRlcmFjdGlvbk1peGluKExpdEVsZW1lbnQsICdxdGktZ2FwLXRleHQnLCBmYWxzZSwgJ3F0aS1nYXAnKSB7XG4gIHN0YXRpYyBvdmVycmlkZSBzdHlsZXMgPSBbXG4gICAgY3NzYFxuICAgICAgOmhvc3Qge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgZ2FwOiAwLjVyZW07XG4gICAgICB9XG5cbiAgICAgIDpob3N0KC5xdGktY2hvaWNlcy10b3ApIHtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgIH1cbiAgICAgIDpob3N0KC5xdGktY2hvaWNlcy1ib3R0b20pIHtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlO1xuICAgICAgfVxuICAgICAgOmhvc3QoLnF0aS1jaG9pY2VzLWxlZnQpIHtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICAgIH1cbiAgICAgIDpob3N0KC5xdGktY2hvaWNlcy1yaWdodCkge1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7XG4gICAgICB9XG4gICAgICAvKiBbcGFydD0nZHJvcHMnXSAsICovXG4gICAgICBbcGFydD0nZHJhZ3MnXSB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICAgICAgICBmbGV4OiAxO1xuICAgICAgICBnYXA6IDAuNXJlbTtcbiAgICAgIH1cbiAgICBgXG4gIF07XG5cbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYCA8c2xvdCBwYXJ0PVwiZHJhZ3NcIiBuYW1lPVwicXRpLWdhcC10ZXh0XCI+PC9zbG90PlxuICAgICAgPHNsb3QgcGFydD1cImRyb3BzXCI+PC9zbG90PmA7XG4gIH1cblxuICBzZXQgY29ycmVjdFJlc3BvbnNlKHZhbHVlOiBSZWFkb25seTxzdHJpbmcgfCBzdHJpbmdbXT4pIHtcbiAgICBsZXQgbWF0Y2hlczogeyB0ZXh0OiBzdHJpbmc7IGdhcDogc3RyaW5nIH1bXSA9IFtdO1xuICAgIGNvbnN0IHJlc3BvbnNlID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZSA6IFt2YWx1ZV07XG5cbiAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgIG1hdGNoZXMgPSByZXNwb25zZS5tYXAoeCA9PiB7XG4gICAgICAgIGNvbnN0IHNwbGl0ID0geC5zcGxpdCgnICcpO1xuICAgICAgICByZXR1cm4geyB0ZXh0OiBzcGxpdFswXSwgZ2FwOiBzcGxpdFsxXSB9O1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgZ2FwcyA9IHRoaXMucXVlcnlTZWxlY3RvckFsbCgncXRpLWdhcCcpO1xuICAgIGdhcHMuZm9yRWFjaCgoZ2FwLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgaWRlbnRpZmllciA9IGdhcC5nZXRBdHRyaWJ1dGUoJ2lkZW50aWZpZXInKTtcbiAgICAgIGNvbnN0IHRleHRJZGVudGlmaWVyID0gbWF0Y2hlcy5maW5kKHggPT4geC5nYXAgPT09IGlkZW50aWZpZXIpPy50ZXh0O1xuICAgICAgY29uc3QgdGV4dCA9IHRoaXMucXVlcnlTZWxlY3RvcihgcXRpLWdhcC10ZXh0W2lkZW50aWZpZXI9XCIke3RleHRJZGVudGlmaWVyfVwiXWApPy50ZXh0Q29udGVudC50cmltKCk7XG4gICAgICBpZiAodGV4dElkZW50aWZpZXIgJiYgdGV4dCkge1xuICAgICAgICBpZiAoIWdhcC5uZXh0RWxlbWVudFNpYmxpbmc/LmNsYXNzTGlzdC5jb250YWlucygnY29ycmVjdC1vcHRpb24nKSkge1xuICAgICAgICAgIGNvbnN0IHRleHRTcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuICAgICAgICAgIHRleHRTcGFuLmNsYXNzTGlzdC5hZGQoJ2NvcnJlY3Qtb3B0aW9uJyk7XG4gICAgICAgICAgdGV4dFNwYW4udGV4dENvbnRlbnQgPSB0ZXh0O1xuICAgICAgICAgIGdhcC5pbnNlcnRBZGphY2VudEVsZW1lbnQoJ2FmdGVyZW5kJywgdGV4dFNwYW4pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGdhcC5uZXh0RWxlbWVudFNpYmxpbmc/LmNsYXNzTGlzdC5jb250YWlucygnY29ycmVjdC1vcHRpb24nKSkge1xuICAgICAgICBnYXAubmV4dEVsZW1lbnRTaWJsaW5nLnJlbW92ZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1nYXAtbWF0Y2gtaW50ZXJhY3Rpb24nOiBRdGlHYXBNYXRjaEludGVyYWN0aW9uO1xuICB9XG59XG4iLCAiLyogZXNsaW50LWRpc2FibGUgbGl0L25vLWludmFsaWQtaHRtbCAqL1xuaW1wb3J0IHsgY3NzLCBodG1sLCBzdmcgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCwgcXVlcnksIHF1ZXJ5QXNzaWduZWRFbGVtZW50cywgc3RhdGUgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBpZkRlZmluZWQgfSBmcm9tICdsaXQvZGlyZWN0aXZlcy9pZi1kZWZpbmVkLmpzJztcbmltcG9ydCB7IHJlcGVhdCB9IGZyb20gJ2xpdC9kaXJlY3RpdmVzL3JlcGVhdC5qcyc7XG5pbXBvcnQgeyBwb3NpdGlvbkhvdHNwb3RzIH0gZnJvbSAnLi4vaW50ZXJuYWwvaG90c3BvdHMvaG90c3BvdCc7XG5pbXBvcnQgeyBJbnRlcmFjdGlvbiB9IGZyb20gJy4uL2ludGVybmFsL2ludGVyYWN0aW9uL2ludGVyYWN0aW9uJztcbmltcG9ydCB7IFF0aUhvdHNwb3RDaG9pY2UgfSBmcm9tICcuLi9xdGktaG90c3BvdC1jaG9pY2UnO1xuXG5AY3VzdG9tRWxlbWVudCgncXRpLWdyYXBoaWMtYXNzb2NpYXRlLWludGVyYWN0aW9uJylcbmV4cG9ydCBjbGFzcyBRdGlHcmFwaGljQXNzb2NpYXRlSW50ZXJhY3Rpb24gZXh0ZW5kcyBJbnRlcmFjdGlvbiB7XG4gIGNob2ljZU9yZGVyaW5nOiBib29sZWFuO1xuICBob3RzcG90cztcbiAgc3RhcnRQb2ludCA9IG51bGw7XG4gIGVuZFBvaW50ID0gbnVsbDtcbiAgQHN0YXRlKCkgX2xpbmVzID0gW107XG4gIEBzdGF0ZSgpIHN0YXJ0Q29vcmQ6IHsgeDogYW55OyB5OiBhbnkgfTtcbiAgQHN0YXRlKCkgbW91c2VDb29yZDogeyB4OiBudW1iZXI7IHk6IG51bWJlciB9O1xuICBAcXVlcnkoJ3N2ZycpIHN2Z0NvbnRhaW5lcjtcbiAgQHF1ZXJ5QXNzaWduZWRFbGVtZW50cyh7IHNlbGVjdG9yOiAnaW1nJyB9KSBnckltYWdlO1xuXG4gIC8vIHRhcmdldCB0aGUgbWFpbiBzbG90IG1ha2UgaXQgcmVsYXRpdmUgYW5kIGZpdCB3aXRoIHRoZSBjb250ZW5cbiAgc3RhdGljIG92ZXJyaWRlIHN0eWxlcyA9IFtcbiAgICBjc3NgXG4gICAgICBzbG90Om5vdChbbmFtZT0ncHJvbXB0J10pIHtcbiAgICAgICAgLy8gcG9zaXRpb246IHJlbGF0aXZlOyAvKiBxdGktaG90c3BvdC1jaG9pY2UgcmVsYXRpdmUgdG8gdGhlIHNsb3QgKi9cbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIHdpZHRoOiBmaXQtY29udGVudDsgLyogaG90c3BvdHMgbm90IHN0cmV0Y2hpbmcgZnVydGhlciBpZiBpbWFnZSBpcyBhdCBtYXggc2l6ZSAqL1xuICAgICAgfVxuICAgICAgOjpzbG90dGVkKGltZykge1xuICAgICAgICAvKiBpbWFnZSBub3Qgc2VsZWN0YWJsZSBhbnltb3JlICovXG4gICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgICAgIH1cbiAgICAgIDo6c2xvdHRlZChxdGktYXNzb2NpYWJsZS1ob3RzcG90KSB7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xuICAgICAgfVxuICAgICAgbGluZS1jb250YWluZXIge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgfVxuICAgICAgc3ZnIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB0b3A6IDBweDtcbiAgICAgICAgbGVmdDogMHB4O1xuICAgICAgfVxuICAgIGBcbiAgXTtcbiAgc3ZnOiBTVkdTVkdFbGVtZW50O1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdxdGktcmVnaXN0ZXItaG90c3BvdCcsIHRoaXMucG9zaXRpb25Ib3RzcG90T25SZWdpc3Rlcik7XG4gIH1cblxuICByZXNldCgpOiB2b2lkIHtcbiAgICB0aGlzLl9saW5lcyA9IFtdO1xuICB9XG4gIHZhbGlkYXRlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9saW5lcy5sZW5ndGggPiAwO1xuICB9XG4gIHNldCByZXNwb25zZSh2YWw6IHN0cmluZyB8IHN0cmluZ1tdKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSkge1xuICAgICAgdGhpcy5fbGluZXMgPSB2YWw7XG4gICAgfVxuICB9XG5cbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYDxzbG90IG5hbWU9XCJwcm9tcHRcIj48L3Nsb3Q+XG4gICAgICA8bGluZS1jb250YWluZXI+XG4gICAgICAgIDxzdmdcbiAgICAgICAgICB3aWR0aD0ke2lmRGVmaW5lZCh0aGlzLmdySW1hZ2VbMF0/LndpZHRoKX1cbiAgICAgICAgICBoZWlnaHQ9JHtpZkRlZmluZWQodGhpcy5nckltYWdlWzBdPy5oZWlnaHQpfVxuICAgICAgICAgIHZpZXdib3g9XCIwIDAgJHt0aGlzLmdySW1hZ2VbMF0/LndpZHRofSAke3RoaXMuZ3JJbWFnZVswXT8uaGVpZ2h0fVwiXG4gICAgICAgID5cbiAgICAgICAgICAke3JlcGVhdChcbiAgICAgICAgICAgIHRoaXMuX2xpbmVzLFxuICAgICAgICAgICAgbGluZSA9PiBsaW5lLFxuICAgICAgICAgICAgKGxpbmUsIGluZGV4KSA9PiBzdmdgXG4gICAgICAgICAgICAgIDxsaW5lXG4gICAgICAgICAgICAgICAgcGFydD1cImxpbmVcIlxuICAgICAgICAgICAgICAgIHgxPSR7cGFyc2VJbnQodGhpcy5xdWVyeVNlbGVjdG9yPFNWR0xpbmVFbGVtZW50PignW2lkZW50aWZpZXI9JyArIGxpbmUuc3BsaXQoJyAnKVswXSArICddJykuc3R5bGUubGVmdCl9XG4gICAgICAgICAgICAgICAgeTE9JHtwYXJzZUludCh0aGlzLnF1ZXJ5U2VsZWN0b3I8U1ZHTGluZUVsZW1lbnQ+KCdbaWRlbnRpZmllcj0nICsgbGluZS5zcGxpdCgnICcpWzBdICsgJ10nKS5zdHlsZS50b3ApfVxuICAgICAgICAgICAgICAgIHgyPSR7cGFyc2VJbnQodGhpcy5xdWVyeVNlbGVjdG9yPFNWR0xpbmVFbGVtZW50PignW2lkZW50aWZpZXI9JyArIGxpbmUuc3BsaXQoJyAnKVsxXSArICddJykuc3R5bGUubGVmdCl9XG4gICAgICAgICAgICAgICAgeTI9JHtwYXJzZUludCh0aGlzLnF1ZXJ5U2VsZWN0b3I8U1ZHTGluZUVsZW1lbnQ+KCdbaWRlbnRpZmllcj0nICsgbGluZS5zcGxpdCgnICcpWzFdICsgJ10nKS5zdHlsZS50b3ApfVxuICAgICAgICAgICAgICAgIHN0cm9rZT1cInJlZFwiXG4gICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiM1wiXG4gICAgICAgICAgICAgICAgQGNsaWNrPSR7KGU6IEV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgICAgdGhpcy5fbGluZXMgPSB0aGlzLl9saW5lcy5maWx0ZXIoKF8sIGkpID0+IGkgIT09IGluZGV4KTtcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2F2ZVJlc3BvbnNlKHRoaXMuX2xpbmVzKTtcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgYFxuICAgICAgICAgICl9XG4gICAgICAgICAgJHt0aGlzLnN0YXJ0UG9pbnQgJiZcbiAgICAgICAgICBzdmdgPGxpbmVcbiAgICAgICAgICAgIHBhcnQ9XCJwb2ludFwiXG4gICAgICAgICAgICB4MT0ke3RoaXMuc3RhcnRDb29yZC54fVxuICAgICAgICAgICAgeTE9JHt0aGlzLnN0YXJ0Q29vcmQueX1cbiAgICAgICAgICAgIHgyPSR7dGhpcy5tb3VzZUNvb3JkLnh9XG4gICAgICAgICAgICB5Mj0ke3RoaXMubW91c2VDb29yZC55fVxuICAgICAgICAgICAgc3Ryb2tlPVwicmVkXCJcbiAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjNcIlxuICAgICAgICAgIC8+YH1cbiAgICAgICAgPC9zdmc+XG4gICAgICAgIDxzbG90Pjwvc2xvdD5cbiAgICAgIDwvbGluZS1jb250YWluZXI+YDtcbiAgfVxuXG4gIHByaXZhdGUgcG9zaXRpb25Ib3RzcG90T25SZWdpc3RlcihlOiBDdXN0b21FdmVudDxRdGlIb3RzcG90Q2hvaWNlPik6IHZvaWQge1xuICAgIGNvbnN0IGltZyA9IHRoaXMucXVlcnlTZWxlY3RvcignaW1nJykgYXMgSFRNTEltYWdlRWxlbWVudDtcbiAgICBjb25zdCBob3RzcG90ID0gZS50YXJnZXQgYXMgUXRpSG90c3BvdENob2ljZTtcbiAgICBjb25zdCBjb29yZHMgPSBob3RzcG90LmdldEF0dHJpYnV0ZSgnY29vcmRzJyk7XG4gICAgY29uc3Qgc2hhcGUgPSBob3RzcG90LmdldEF0dHJpYnV0ZSgnc2hhcGUnKTtcbiAgICBjb25zdCBjb29yZHNOdW1iZXIgPSBjb29yZHMuc3BsaXQoJywnKS5tYXAocyA9PiBwYXJzZUludChzKSk7XG4gICAgcG9zaXRpb25Ib3RzcG90cyhzaGFwZSwgY29vcmRzTnVtYmVyLCBpbWcsIGhvdHNwb3QpO1xuICB9XG5cbiAgb3ZlcnJpZGUgZmlyc3RVcGRhdGVkKGUpOiB2b2lkIHtcbiAgICBzdXBlci5maXJzdFVwZGF0ZWQoZSk7XG5cbiAgICB0aGlzLmhvdHNwb3RzID0gdGhpcy5xdWVyeVNlbGVjdG9yQWxsKCdxdGktYXNzb2NpYWJsZS1ob3RzcG90Jyk7XG5cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBldmVudCA9PiB7XG4gICAgICB0aGlzLm1vdXNlQ29vcmQgPSB7XG4gICAgICAgIHg6IGV2ZW50LmNsaWVudFggLSB0aGlzLmdySW1hZ2VbMF0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCxcbiAgICAgICAgeTogZXZlbnQuY2xpZW50WSAtIHRoaXMuZ3JJbWFnZVswXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3BcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICB0aGlzLmhvdHNwb3RzLmZvckVhY2goaG90c3BvdCA9PiB7XG4gICAgICBob3RzcG90LnN0eWxlLmxlZnQgPSBob3RzcG90LmdldEF0dHJpYnV0ZSgnY29vcmRzJykuc3BsaXQoJywnKVswXSArICdweCc7XG4gICAgICBob3RzcG90LnN0eWxlLnRvcCA9IGhvdHNwb3QuZ2V0QXR0cmlidXRlKCdjb29yZHMnKS5zcGxpdCgnLCcpWzFdICsgJ3B4JztcblxuICAgICAgaG90c3BvdC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGV2ZW50ID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLnN0YXJ0UG9pbnQpIHtcbiAgICAgICAgICB0aGlzLnN0YXJ0UG9pbnQgPSBldmVudC50YXJnZXQ7XG5cbiAgICAgICAgICB0aGlzLnN0YXJ0Q29vcmQgPSB7XG4gICAgICAgICAgICB4OiB0aGlzLnN0YXJ0UG9pbnQuZ2V0QXR0cmlidXRlKCdjb29yZHMnKS5zcGxpdCgnLCcpWzBdLFxuICAgICAgICAgICAgeTogdGhpcy5zdGFydFBvaW50LmdldEF0dHJpYnV0ZSgnY29vcmRzJykuc3BsaXQoJywnKVsxXVxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuZW5kUG9pbnQpIHtcbiAgICAgICAgICB0aGlzLmVuZFBvaW50ID0gZXZlbnQudGFyZ2V0O1xuXG4gICAgICAgICAgdGhpcy5fbGluZXMgPSBbXG4gICAgICAgICAgICAuLi50aGlzLl9saW5lcyxcbiAgICAgICAgICAgIHRoaXMuc3RhcnRQb2ludC5nZXRBdHRyaWJ1dGUoJ2lkZW50aWZpZXInKSArICcgJyArIHRoaXMuZW5kUG9pbnQuZ2V0QXR0cmlidXRlKCdpZGVudGlmaWVyJylcbiAgICAgICAgICBdO1xuICAgICAgICAgIHRoaXMuc2F2ZVJlc3BvbnNlKHRoaXMuX2xpbmVzKTtcbiAgICAgICAgICB0aGlzLnN0YXJ0UG9pbnQgPSBudWxsO1xuICAgICAgICAgIHRoaXMuZW5kUG9pbnQgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuICBvdmVycmlkZSBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcigncXRpLXJlZ2lzdGVyLWhvdHNwb3QnLCB0aGlzLnBvc2l0aW9uSG90c3BvdE9uUmVnaXN0ZXIpO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1ncmFwaGljLWFzc29jaWF0ZS1pbnRlcmFjdGlvbic6IFF0aUdyYXBoaWNBc3NvY2lhdGVJbnRlcmFjdGlvbjtcbiAgfVxufVxuIiwgImltcG9ydCB7IFF0aUhvdHNwb3RDaG9pY2UgfSBmcm9tICcuLi8uLi9xdGktaG90c3BvdC1jaG9pY2UnO1xuXG5leHBvcnQgZnVuY3Rpb24gcG9zaXRpb25Ib3RzcG90cyhcbiAgc2hhcGU6IHN0cmluZyxcbiAgY29vcmRzTnVtYmVyOiBudW1iZXJbXSxcbiAgaW1nOiBIVE1MSW1hZ2VFbGVtZW50LFxuICBob3RzcG90OiBRdGlIb3RzcG90Q2hvaWNlXG4pIHtcbiAgc3dpdGNoIChzaGFwZSkge1xuICAgIGNhc2UgJ2NpcmNsZSc6XG4gICAgICB7XG4gICAgICAgIGNvbnN0IFtjZW50ZXJYLCBjZW50ZXJZLCByYWRpdXNdID0gY29vcmRzTnVtYmVyO1xuICAgICAgICBjb25zdCBjZW50ZXJYUGVyID0gKGNlbnRlclggLyBpbWcud2lkdGgpICogMTAwO1xuICAgICAgICBjb25zdCBjZW50ZXJZUGVyID0gKGNlbnRlclkgLyBpbWcuaGVpZ2h0KSAqIDEwMDtcbiAgICAgICAgY29uc3QgcmFkaXVzUGVyID0gKHJhZGl1cyAvIGltZy53aWR0aCkgKiAxMDA7XG4gICAgICAgIGhvdHNwb3Quc3R5bGUubGVmdCA9IGNlbnRlclhQZXIgLSByYWRpdXNQZXIgKyAnJSc7XG4gICAgICAgIGhvdHNwb3Quc3R5bGUudG9wID0gY2VudGVyWVBlciAtIHJhZGl1c1BlciArICclJztcbiAgICAgICAgaG90c3BvdC5zdHlsZS53aWR0aCA9IGhvdHNwb3Quc3R5bGUuaGVpZ2h0ID0gNCAqIHJhZGl1c1BlciArICdweCc7XG4gICAgICAgIGhvdHNwb3Quc3R5bGUuYm9yZGVyUmFkaXVzID0gYDk5OTlweGA7XG4gICAgICB9XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3JlY3QnOlxuICAgICAge1xuICAgICAgICBjb25zdCBbbGVmdFgsIHRvcFksIHJpZ2h0WCwgYm90dG9tWV0gPSBjb29yZHNOdW1iZXI7XG4gICAgICAgIGNvbnN0IGxlZnRYUGVyID0gKGxlZnRYIC8gaW1nLndpZHRoKSAqIDEwMDtcbiAgICAgICAgY29uc3QgdG9wWVBlciA9ICh0b3BZIC8gaW1nLmhlaWdodCkgKiAxMDA7XG4gICAgICAgIGNvbnN0IHJpZ2h0WFBlciA9IChyaWdodFggLyBpbWcud2lkdGgpICogMTAwO1xuICAgICAgICBjb25zdCBib3R0b21ZUGVyID0gKGJvdHRvbVkgLyBpbWcuaGVpZ2h0KSAqIDEwMDtcbiAgICAgICAgaG90c3BvdC5zdHlsZS5sZWZ0ID0gbGVmdFhQZXIgKyAnJSc7XG4gICAgICAgIGhvdHNwb3Quc3R5bGUudG9wID0gdG9wWVBlciArICclJztcbiAgICAgICAgaG90c3BvdC5zdHlsZS53aWR0aCA9IHJpZ2h0WFBlciAtIGxlZnRYUGVyICsgJyUnO1xuICAgICAgICBob3RzcG90LnN0eWxlLmhlaWdodCA9IGJvdHRvbVlQZXIgLSB0b3BZUGVyICsgJyUnO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdwb2x5JzpcbiAgICAgIHtcbiAgICAgICAgLy8gZnJvbSBhLGIsYyxkLGUsZiA9PiBbe3g6YSwgeTpifSx7eDpjLCB5OmR9LHt4OmUsIHk6Zn1dXG4gICAgICAgIGNvbnN0IHBvbHljb29yZHMgPSBjb29yZHNOdW1iZXIucmVkdWNlKChhY2MsIGN1cnJlbnRWYWx1ZSwgY3VycmVudEluZGV4LCBwb2x5QykgPT4ge1xuICAgICAgICAgIGlmIChjdXJyZW50SW5kZXggJSAyID09PSAxKSB7XG4gICAgICAgICAgICBjb25zdCBsYXN0VmFsID0gYWNjLnBvcCgpO1xuICAgICAgICAgICAgYWNjW2FjYy5sZW5ndGhdID0geyB4OiBsYXN0VmFsLCB5OiBwb2x5Q1tjdXJyZW50SW5kZXhdIH07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFjYy5wdXNoKGN1cnJlbnRWYWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgIH0sIFtdKTtcblxuICAgICAgICAvLyBjYWxjdWxhdGUgYm91bmRpbmcgYm94IGJ5IGZpbmRpbmcgdGhlIG1heCBheCBtaW4gY29vcmRpbmF0ZXMgb2YgeCBhbmQgeVxuICAgICAgICBjb25zdCBsZWZ0WCA9IE1hdGgubWluKC4uLnBvbHljb29yZHMubWFwKHBvaW50ID0+IHBvaW50LngpKTtcbiAgICAgICAgY29uc3QgcmlnaHRYID0gTWF0aC5tYXgoLi4ucG9seWNvb3Jkcy5tYXAocG9pbnQgPT4gcG9pbnQueCkpO1xuICAgICAgICBjb25zdCB0b3BZID0gTWF0aC5taW4oLi4ucG9seWNvb3Jkcy5tYXAocG9pbnQgPT4gcG9pbnQueSkpO1xuICAgICAgICBjb25zdCBib3R0b21ZID0gTWF0aC5tYXgoLi4ucG9seWNvb3Jkcy5tYXAocG9pbnQgPT4gcG9pbnQueSkpO1xuXG4gICAgICAgIC8vIGNhbGN1bGF0ZSB0aGUgcmVsYXRpdmUgZGlzdGFuY2UgY2F1c2Ugd2Ugd2FudCB0byB1c2UgcGVyY2VudGFnZXNcbiAgICAgICAgY29uc3QgbGVmdFhQZXIgPSAobGVmdFggLyBpbWcud2lkdGgpICogMTAwO1xuICAgICAgICBjb25zdCB0b3BZUGVyID0gKHRvcFkgLyBpbWcuaGVpZ2h0KSAqIDEwMDtcbiAgICAgICAgY29uc3QgcmlnaHRYUGVyID0gKHJpZ2h0WCAvIGltZy53aWR0aCkgKiAxMDA7XG4gICAgICAgIGNvbnN0IGJvdHRvbVlQZXIgPSAoYm90dG9tWSAvIGltZy5oZWlnaHQpICogMTAwO1xuXG4gICAgICAgIC8vIHNldCB0aGUgaG90c3BvdCBvbiB4LHkgYW5kIHNldCB0aGUgd2lkdGggYW5kIGhlaWdodCBpbiBwZXJjZW50YWdlc1xuICAgICAgICBob3RzcG90LnN0eWxlLmxlZnQgPSAobGVmdFggLyBpbWcud2lkdGgpICogMTAwICsgJyUnO1xuICAgICAgICBob3RzcG90LnN0eWxlLnRvcCA9ICh0b3BZIC8gaW1nLmhlaWdodCkgKiAxMDAgKyAnJSc7XG4gICAgICAgIGhvdHNwb3Quc3R5bGUud2lkdGggPSByaWdodFhQZXIgLSBsZWZ0WFBlciArICclJztcbiAgICAgICAgaG90c3BvdC5zdHlsZS5oZWlnaHQgPSBib3R0b21ZUGVyIC0gdG9wWVBlciArICclJztcblxuICAgICAgICAvLyBhbGwgdGhlIHBvbHlnb24gcG9pbnRzIHNob3VsZCBiZSBjb3JyZWN0ZWQgY2F1c2VkIHRoZXkgYXJlIGZyb21cbiAgICAgICAgLy8gaW1hZ2UgMCwwIHBvaW50LCBhbmQgc2hvdWxkIGJlIGZyb20gdGhlIGhvdHNwb3QgcG9pbnQgd2hpY2ggYWxyZWFkeVxuICAgICAgICAvLyBoYXMgYmVlbiBvZmZzZXR0ZWQgZnJvbSB0aGUgaW1hZ2UgaW4gdGhlIHByZXZpb3VzIGZldyBsaW5lcyBvZiBjb2RlXG4gICAgICAgIC8vIGFsc28gdGhlIHBvaW50cyBoYXZlIGEgcmVsYXRpdmUgZGlzdGFuY2UgdG8gdGhlIGltYWdlLCBidXQgbm93IGhhdmVcbiAgICAgICAgLy8gdG8gaGF2ZSBhIHJlbGF0aXZlIGRpc3RhbmNlIGZyb20gdGhlIHdpZHRoIG9mIHRoZSBob3RzcG90XG4gICAgICAgIGNvbnN0IHBvbHlnb25EYXRhID0gcG9seWNvb3Jkcy5tYXAocG9pbnQgPT4gKHtcbiAgICAgICAgICB4OiAoKHBvaW50LnggLSBsZWZ0WCkgLyAocmlnaHRYIC0gbGVmdFgpKSAqIDEwMCxcbiAgICAgICAgICB5OiAoKHBvaW50LnkgLSB0b3BZKSAvIChib3R0b21ZIC0gdG9wWSkpICogMTAwXG4gICAgICAgIH0pKTtcblxuICAgICAgICAvLyBjcmVhdGUgY2xpcCBwYXRoIGNvb3JkaW5hdGUgc3R5bGUgaW4gcGVyY2VudGFnZXNcbiAgICAgICAgY29uc3QgcG9seUQgPSBwb2x5Z29uRGF0YS5tYXAocCA9PiBNYXRoLnJvdW5kKHAueCkgKyAnJSAnICsgTWF0aC5yb3VuZChwLnkpICsgJyUnKS5qb2luKCcsJyk7XG5cbiAgICAgICAgLy8gNTAlIDAlLCAxMDAlIDUwJSwgNTAlIDEwMCUsIDAlIDUwJVxuICAgICAgICBob3RzcG90LnN0eWxlLmNsaXBQYXRoID0gYHBvbHlnb24oJHtwb2x5RH0pYDtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIGJyZWFrO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgY3NzLCBodG1sLCBMaXRFbGVtZW50IH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBEcmFnRHJvcEludGVyYWN0aW9uTWl4aW4gfSBmcm9tICcuLi9pbnRlcm5hbC9kcmFnLWRyb3AvZHJhZy1kcm9wLWludGVyYWN0aW9uLW1peGluJztcbmltcG9ydCB7IFF0aUhvdHNwb3RDaG9pY2UgfSBmcm9tICcuLi9xdGktaG90c3BvdC1jaG9pY2UnO1xuXG5AY3VzdG9tRWxlbWVudCgncXRpLWdyYXBoaWMtZ2FwLW1hdGNoLWludGVyYWN0aW9uJylcbmV4cG9ydCBjbGFzcyBRdGlHcmFwaGljR2FwTWF0Y2hJbnRlcmFjdGlvbiBleHRlbmRzIERyYWdEcm9wSW50ZXJhY3Rpb25NaXhpbihcbiAgTGl0RWxlbWVudCxcbiAgJ3F0aS1nYXAtaW1nJyxcbiAgZmFsc2UsXG4gICdxdGktYXNzb2NpYWJsZS1ob3RzcG90J1xuKSB7XG4gIHN0YXRpYyBvdmVycmlkZSBzdHlsZXMgPSBjc3NgXG4gICAgOmhvc3Qge1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIH1cbiAgICBzbG90W25hbWU9J3F0aS1nYXAtaW1nJ10ge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGdhcDogMXJlbTtcbiAgICB9XG4gIGA7XG5cbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYCA8c2xvdD48L3Nsb3Q+XG4gICAgICA8c2xvdCBuYW1lPVwicXRpLWdhcC1pbWdcIj48L3Nsb3Q+YDtcbiAgfVxuXG4gIHByaXZhdGUgcG9zaXRpb25Ib3RzcG90T25SZWdpc3RlcihlOiBDdXN0b21FdmVudDxudWxsPik6IHZvaWQge1xuICAgIGNvbnN0IGltZyA9IHRoaXMucXVlcnlTZWxlY3RvcignaW1nJykgYXMgSFRNTEltYWdlRWxlbWVudDtcbiAgICBjb25zdCBob3RzcG90ID0gZS50YXJnZXQgYXMgUXRpSG90c3BvdENob2ljZTtcbiAgICBjb25zdCBjb29yZHMgPSBob3RzcG90LmdldEF0dHJpYnV0ZSgnY29vcmRzJyk7XG4gICAgY29uc3Qgc2hhcGUgPSBob3RzcG90LmdldEF0dHJpYnV0ZSgnc2hhcGUnKTtcbiAgICBjb25zdCBjb29yZHNOdW1iZXIgPSBjb29yZHMuc3BsaXQoJywnKS5tYXAocyA9PiBwYXJzZUludChzKSk7XG5cbiAgICAvLyBwb3NpdGlvbkhvdHNwb3RzKHNoYXBlLCBjb29yZHNOdW1iZXIsIGltZywgaG90c3BvdCk7XG4gICAgc3dpdGNoIChzaGFwZSkge1xuICAgICAgY2FzZSAnY2lyY2xlJzpcbiAgICAgICAge1xuICAgICAgICAgIGNvbnN0IFtjZW50ZXJYLCBjZW50ZXJZLCByYWRpdXNdID0gY29vcmRzTnVtYmVyO1xuICAgICAgICAgIGhvdHNwb3Quc3R5bGUubGVmdCA9IGNlbnRlclggLSByYWRpdXMgKyAncHgnO1xuICAgICAgICAgIGhvdHNwb3Quc3R5bGUudG9wID0gY2VudGVyWSAtIHJhZGl1cyArICdweCc7XG4gICAgICAgICAgaG90c3BvdC5zdHlsZS53aWR0aCA9IGhvdHNwb3Quc3R5bGUuaGVpZ2h0ID0gMiAqIHJhZGl1cyArICdweCc7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ3JlY3QnOlxuICAgICAgICB7XG4gICAgICAgICAgY29uc3QgW2xlZnRYLCB0b3BZLCByaWdodFgsIGJvdHRvbVldID0gY29vcmRzTnVtYmVyO1xuICAgICAgICAgIGhvdHNwb3Quc3R5bGUubGVmdCA9IGxlZnRYICsgJ3B4JztcbiAgICAgICAgICBob3RzcG90LnN0eWxlLnRvcCA9IHRvcFkgKyAncHgnO1xuICAgICAgICAgIGhvdHNwb3Quc3R5bGUud2lkdGggPSByaWdodFggLSBsZWZ0WCArICdweCc7XG4gICAgICAgICAgaG90c3BvdC5zdHlsZS5oZWlnaHQgPSBib3R0b21ZIC0gdG9wWSArICdweCc7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIG92ZXJyaWRlIGNvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xuICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdxdGktcmVnaXN0ZXItaG90c3BvdCcsIHRoaXMucG9zaXRpb25Ib3RzcG90T25SZWdpc3Rlcik7XG4gIH1cbiAgb3ZlcnJpZGUgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3F0aS1yZWdpc3Rlci1ob3RzcG90JywgdGhpcy5wb3NpdGlvbkhvdHNwb3RPblJlZ2lzdGVyKTtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktZ3JhcGhpYy1nYXAtbWF0Y2gtaW50ZXJhY3Rpb24nOiBRdGlHcmFwaGljR2FwTWF0Y2hJbnRlcmFjdGlvbjtcbiAgfVxufVxuIiwgImltcG9ydCB7IGNzcywgaHRtbCwgTGl0RWxlbWVudCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBDaG9pY2VzTWl4aW4gfSBmcm9tICcuLi9pbnRlcm5hbC9jaG9pY2VzL2Nob2ljZXMnO1xuaW1wb3J0IHsgUXRpSG90c3BvdENob2ljZSB9IGZyb20gJy4uL3F0aS1ob3RzcG90LWNob2ljZSc7XG5cbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBwb3NpdGlvbkhvdHNwb3RzIH0gZnJvbSAnLi4vaW50ZXJuYWwvaG90c3BvdHMvaG90c3BvdCc7XG5cbkBjdXN0b21FbGVtZW50KCdxdGktZ3JhcGhpYy1vcmRlci1pbnRlcmFjdGlvbicpXG5leHBvcnQgY2xhc3MgUXRpR3JhcGhpY09yZGVySW50ZXJhY3Rpb24gZXh0ZW5kcyBDaG9pY2VzTWl4aW4oTGl0RWxlbWVudCwgJ3F0aS1ob3RzcG90LWNob2ljZScpIHtcbiAgY2hvaWNlT3JkZXJpbmc6IGJvb2xlYW47XG5cbiAgLy8gZG8gbm90IHNlbGVjdCAoIGhpZ2hsaWdodCBibHVlLCB0aGUgaW1hZ2UpXG4gIC8vIHRhcmdldCB0aGUgbWFpbiBzbG90IG1ha2UgaXQgcmVsYXRpdmUgYW5kIGZpdCB3aXRoIHRoZSBjb250ZW5cbiAgc3RhdGljIG92ZXJyaWRlIHN0eWxlcyA9IFtcbiAgICBjc3NgXG4gICAgICBzbG90Om5vdChbbmFtZT0ncHJvbXB0J10pIHtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOyAvKiBxdGktaG90c3BvdC1jaG9pY2UgcmVsYXRpdmUgdG8gdGhlIHNsb3QgKi9cbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIHdpZHRoOiBmaXQtY29udGVudDsgLyogaG90c3BvdHMgbm90IHN0cmV0Y2hpbmcgZnVydGhlciBpZiBpbWFnZSBpcyBhdCBtYXggc2l6ZSAqL1xuICAgICAgfVxuICAgICAgOjpzbG90dGVkKGltZykge1xuICAgICAgICAvKiBpbWFnZSBub3Qgc2VsZWN0YWJsZSBhbnltb3JlICovXG4gICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgICAgIH1cbiAgICBgXG4gIF07XG5cbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYFxuICAgICAgPHNsb3QgbmFtZT1cInByb21wdFwiPjwvc2xvdD5cbiAgICAgIDwhLS0gc2xvdCBmb3IgdGhlIHByb21wdCAtLT5cbiAgICAgIDxzbG90Pjwvc2xvdD5cbiAgICAgIDwhLS0gc2xvdCBmb3IgdGhlIGltYWdlIGFuZCBob3RzcG90cyAtLT5cbiAgICBgO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRIb3RzcG90T3JkZXIoZTogQ3VzdG9tRXZlbnQ8eyBpZGVudGlmaWVyOiBzdHJpbmc7IGNoZWNrZWQ6IGJvb2xlYW4gfT4pOiB2b2lkIHtcbiAgICBjb25zdCB7IGlkZW50aWZpZXIgfSA9IGUuZGV0YWlsO1xuXG4gICAgY29uc3QgaG90c3BvdCA9IHRoaXMuX2Nob2ljZUVsZW1lbnRzLmZpbmQoZWwgPT4gZWwuZ2V0QXR0cmlidXRlKCdpZGVudGlmaWVyJykgPT09IGlkZW50aWZpZXIpIGFzIFF0aUhvdHNwb3RDaG9pY2U7XG5cbiAgICBjb25zdCBtYXhTZWxlY3Rpb24gPSB0aGlzLl9jaG9pY2VFbGVtZW50cy5sZW5ndGg7XG4gICAgaWYgKCF0aGlzLmNob2ljZU9yZGVyaW5nKSB7XG4gICAgICB0aGlzLmNob2ljZU9yZGVyaW5nID0gdHJ1ZTtcbiAgICAgIGlmIChob3RzcG90Lm9yZGVyID09IG51bGwpIHtcbiAgICAgICAgaWYgKCh0aGlzLl9jaG9pY2VFbGVtZW50cyBhcyBRdGlIb3RzcG90Q2hvaWNlW10pLmZpbHRlcihpID0+IGkub3JkZXIgPiAwKS5sZW5ndGggPj0gbWF4U2VsZWN0aW9uKSB7XG4gICAgICAgICAgdGhpcy5jaG9pY2VPcmRlcmluZyA9IGZhbHNlO1xuICAgICAgICAgIHJldHVybjsgLy8gZG9uJ3QgZG8gYW55dGhpbmcgaWYgdXNlciBhbHJlYWR5IHNlbGVjdGVkIDUgaW1hZ2VzLlxuICAgICAgICB9XG4gICAgICAgIGhvdHNwb3Qub3JkZXIgPSAodGhpcy5fY2hvaWNlRWxlbWVudHMgYXMgUXRpSG90c3BvdENob2ljZVtdKS5maWx0ZXIoaSA9PiAhIWkub3JkZXIpLmxlbmd0aCArIDE7XG4gICAgICAgIHRoaXMuY2hvaWNlT3JkZXJpbmcgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgKHRoaXMuX2Nob2ljZUVsZW1lbnRzIGFzIFF0aUhvdHNwb3RDaG9pY2VbXSkuZm9yRWFjaChob3RzcG90ID0+IHtcbiAgICAgICAgICBpZiAoaG90c3BvdC5vcmRlciA+IGhvdHNwb3Qub3JkZXIpIHtcbiAgICAgICAgICAgIGhvdHNwb3Qub3JkZXItLTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGhvdHNwb3Q7XG4gICAgICAgIH0pO1xuICAgICAgICBob3RzcG90Lm9yZGVyID0gbnVsbDtcbiAgICAgIH1cbiAgICAgIHRoaXMuY2hvaWNlT3JkZXJpbmcgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHBvc2l0aW9uSG90c3BvdE9uUmVnaXN0ZXIoZTogQ3VzdG9tRXZlbnQ8UXRpSG90c3BvdENob2ljZT4pOiB2b2lkIHtcbiAgICBjb25zdCBpbWcgPSB0aGlzLnF1ZXJ5U2VsZWN0b3IoJ2ltZycpIGFzIEhUTUxJbWFnZUVsZW1lbnQ7XG4gICAgY29uc3QgaG90c3BvdCA9IGUudGFyZ2V0IGFzIFF0aUhvdHNwb3RDaG9pY2U7XG4gICAgY29uc3QgY29vcmRzID0gaG90c3BvdC5nZXRBdHRyaWJ1dGUoJ2Nvb3JkcycpO1xuICAgIGNvbnN0IHNoYXBlID0gaG90c3BvdC5nZXRBdHRyaWJ1dGUoJ3NoYXBlJyk7XG4gICAgY29uc3QgY29vcmRzTnVtYmVyID0gY29vcmRzLnNwbGl0KCcsJykubWFwKHMgPT4gcGFyc2VJbnQocykpO1xuXG4gICAgcG9zaXRpb25Ib3RzcG90cyhzaGFwZSwgY29vcmRzTnVtYmVyLCBpbWcsIGhvdHNwb3QpO1xuICB9XG5cbiAgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3F0aS1jaG9pY2UtZWxlbWVudC1zZWxlY3RlZCcsIHRoaXMuc2V0SG90c3BvdE9yZGVyKTtcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3F0aS1yZWdpc3Rlci1jaG9pY2UnLCB0aGlzLnBvc2l0aW9uSG90c3BvdE9uUmVnaXN0ZXIpO1xuICB9XG4gIG92ZXJyaWRlIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdxdGktY2hvaWNlLWVsZW1lbnQtc2VsZWN0ZWQnLCB0aGlzLnNldEhvdHNwb3RPcmRlcik7XG4gICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdxdGktcmVnaXN0ZXItY2hvaWNlJywgdGhpcy5wb3NpdGlvbkhvdHNwb3RPblJlZ2lzdGVyKTtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktZ3JhcGhpYy1vcmRlci1pbnRlcmFjdGlvbic6IFF0aUdyYXBoaWNPcmRlckludGVyYWN0aW9uO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgY3NzLCBodG1sLCBMaXRFbGVtZW50IH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBDaG9pY2VzTWl4aW4gfSBmcm9tICcuLi9pbnRlcm5hbC9jaG9pY2VzL2Nob2ljZXMnO1xuaW1wb3J0IHsgcG9zaXRpb25Ib3RzcG90cyB9IGZyb20gJy4uL2ludGVybmFsL2hvdHNwb3RzL2hvdHNwb3QnO1xuaW1wb3J0IHsgUXRpSG90c3BvdENob2ljZSB9IGZyb20gJy4uL3F0aS1ob3RzcG90LWNob2ljZSc7XG5cbkBjdXN0b21FbGVtZW50KCdxdGktaG90c3BvdC1pbnRlcmFjdGlvbicpXG5leHBvcnQgY2xhc3MgUXRpSG90c3BvdEludGVyYWN0aW9uIGV4dGVuZHMgQ2hvaWNlc01peGluKExpdEVsZW1lbnQsICdxdGktaG90c3BvdC1jaG9pY2UnKSB7XG4gIC8vIGRvIG5vdCBzZWxlY3QgKCBoaWdobGlnaHQgYmx1ZSwgdGhlIGltYWdlKVxuICAvLyB0YXJnZXQgdGhlIG1haW4gc2xvdCBtYWtlIGl0IHJlbGF0aXZlIGFuZCBmaXQgd2l0aCB0aGUgY29udGVuXG4gIHN0YXRpYyBvdmVycmlkZSBzdHlsZXMgPSBbXG4gICAgY3NzYFxuICAgICAgc2xvdDpub3QoW25hbWU9J3Byb21wdCddKSB7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsgLyogcXRpLWhvdHNwb3QtY2hvaWNlIHJlbGF0aXZlIHRvIHRoZSBzbG90ICovXG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICB3aWR0aDogZml0LWNvbnRlbnQ7IC8qIGhvdHNwb3RzIG5vdCBzdHJldGNoaW5nIGZ1cnRoZXIgaWYgaW1hZ2UgaXMgYXQgbWF4IHNpemUgKi9cbiAgICAgIH1cbiAgICAgIDo6c2xvdHRlZChpbWcpIHtcbiAgICAgICAgLyogaW1hZ2Ugbm90IHNlbGVjdGFibGUgYW55bW9yZSAqL1xuICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7XG4gICAgICAgIC8qIHdpZHRoOjEwMCU7ICovXG4gICAgICB9XG4gICAgYFxuICBdO1xuICBvdmVycmlkZSByZW5kZXIoKSB7XG4gICAgcmV0dXJuIGh0bWxgXG4gICAgICA8c2xvdCBuYW1lPVwicHJvbXB0XCI+PC9zbG90PlxuICAgICAgPCEtLSBzbG90IGZvciB0aGUgcHJvbXB0IC0tPlxuICAgICAgPHNsb3Q+PC9zbG90PlxuICAgICAgPCEtLSBzbG90IGZvciB0aGUgaW1hZ2UgYW5kIGhvdHNwb3RzIC0tPlxuICAgIGA7XG4gIH1cblxuICBwcml2YXRlIHBvc2l0aW9uSG90c3BvdE9uUmVnaXN0ZXIoZTogQ3VzdG9tRXZlbnQ8UXRpSG90c3BvdENob2ljZT4pOiB2b2lkIHtcbiAgICBjb25zdCBpbWcgPSB0aGlzLnF1ZXJ5U2VsZWN0b3IoJ2ltZycpIGFzIEhUTUxJbWFnZUVsZW1lbnQ7XG4gICAgY29uc3QgaG90c3BvdCA9IGUudGFyZ2V0IGFzIFF0aUhvdHNwb3RDaG9pY2U7XG4gICAgY29uc3QgY29vcmRzID0gaG90c3BvdC5nZXRBdHRyaWJ1dGUoJ2Nvb3JkcycpO1xuICAgIGNvbnN0IHNoYXBlID0gaG90c3BvdC5nZXRBdHRyaWJ1dGUoJ3NoYXBlJyk7XG4gICAgY29uc3QgY29vcmRzTnVtYmVyID0gY29vcmRzLnNwbGl0KCcsJykubWFwKHMgPT4gcGFyc2VJbnQocykpO1xuXG4gICAgcG9zaXRpb25Ib3RzcG90cyhzaGFwZSwgY29vcmRzTnVtYmVyLCBpbWcsIGhvdHNwb3QpO1xuICB9XG5cbiAgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3F0aS1yZWdpc3Rlci1jaG9pY2UnLCB0aGlzLnBvc2l0aW9uSG90c3BvdE9uUmVnaXN0ZXIpO1xuICB9XG4gIG92ZXJyaWRlIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdxdGktcmVnaXN0ZXItY2hvaWNlJywgdGhpcy5wb3NpdGlvbkhvdHNwb3RPblJlZ2lzdGVyKTtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktaG90c3BvdC1pbnRlcmFjdGlvbic6IFF0aUhvdHNwb3RJbnRlcmFjdGlvbjtcbiAgfVxufVxuIiwgImltcG9ydCB7IGNzcywgaHRtbCwgTGl0RWxlbWVudCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBEcmFnRHJvcEludGVyYWN0aW9uTWl4aW4gfSBmcm9tICcuLi9pbnRlcm5hbC9kcmFnLWRyb3AvZHJhZy1kcm9wLWludGVyYWN0aW9uLW1peGluJztcblxuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCwgcHJvcGVydHksIHN0YXRlIH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgdW5zYWZlSFRNTCB9IGZyb20gJ2xpdC9kaXJlY3RpdmVzL3Vuc2FmZS1odG1sLmpzJztcbmltcG9ydCB7IFJlc3BvbnNlSW50ZXJhY3Rpb24gfSBmcm9tICcuLi8uLi9pbnRlcm5hbC9leHByZXNzaW9uLXJlc3VsdCc7XG5pbXBvcnQgJy4uL3F0aS1zaW1wbGUtYXNzb2NpYWJsZS1jaG9pY2UnO1xuaW1wb3J0IHsgUXRpU2ltcGxlQXNzb2NpYWJsZUNob2ljZSB9IGZyb20gJy4uL3F0aS1zaW1wbGUtYXNzb2NpYWJsZS1jaG9pY2UnO1xuXG5pbnRlcmZhY2UgQ29sdW1uIHtcbiAgaWQ6IG51bWJlcjtcbiAgbmFtZTogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgUm93IHtcbiAgaWQ6IG51bWJlcjtcbiAgbmFtZTogc3RyaW5nO1xuICBpc0NoZWNrZWQ6IGJvb2xlYW47XG59XG5cbkBjdXN0b21FbGVtZW50KCdxdGktbWF0Y2gtaW50ZXJhY3Rpb24nKVxuZXhwb3J0IGNsYXNzIFF0aU1hdGNoSW50ZXJhY3Rpb24gZXh0ZW5kcyBEcmFnRHJvcEludGVyYWN0aW9uTWl4aW4oXG4gIExpdEVsZW1lbnQsXG4gICdxdGktc2ltcGxlLW1hdGNoLXNldDpmaXJzdC1vZi10eXBlIHF0aS1zaW1wbGUtYXNzb2NpYWJsZS1jaG9pY2UnLFxuICBmYWxzZSxcbiAgJ3F0aS1zaW1wbGUtbWF0Y2gtc2V0Omxhc3Qtb2YtdHlwZSBxdGktc2ltcGxlLWFzc29jaWFibGUtY2hvaWNlJ1xuKSB7XG4gIHN0YXRpYyBvdmVycmlkZSBzdHlsZXMgPSBbXG4gICAgY3NzYFxuICAgICAgOmhvc3Qge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICBnYXA6IDAuNXJlbTtcbiAgICAgIH1cblxuICAgICAgLyogOmhvc3QoLnF0aS1jaG9pY2VzLXRvcCkge1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgfSAqL1xuICAgICAgOmhvc3QoLnF0aS1jaG9pY2VzLWJvdHRvbSkge1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uLXJldmVyc2U7XG4gICAgICB9XG4gICAgICA6aG9zdCgucXRpLWNob2ljZXMtbGVmdCkge1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICAgICAgfVxuICAgICAgOmhvc3QoLnF0aS1jaG9pY2VzLXJpZ2h0KSB7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZTtcbiAgICAgIH1cbiAgICBgXG4gIF07XG5cbiAgcm93czogUXRpU2ltcGxlQXNzb2NpYWJsZUNob2ljZVtdO1xuICBjb2xzOiBRdGlTaW1wbGVBc3NvY2lhYmxlQ2hvaWNlW107XG4gIGxhc3RDaGVja2VkUmFkaW86IEhUTUxJbnB1dEVsZW1lbnQgfCBudWxsID0gbnVsbDtcblxuICBAc3RhdGUoKSByZXNwb25zZSA9IFtdO1xuICBAc3RhdGUoKSBjb3JyZWN0T3B0aW9uczogc3RyaW5nW10gPSBbXTtcbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nLCBhdHRyaWJ1dGU6ICdyZXNwb25zZS1pZGVudGlmaWVyJyB9KSByZXNwb25zZUlkZW50aWZpZXI6IHN0cmluZyA9ICcnO1xuXG4gIGNvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xuICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgdGhpcy5yb3dzID0gQXJyYXkuZnJvbTxRdGlTaW1wbGVBc3NvY2lhYmxlQ2hvaWNlPihcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB3Yy9uby1jaGlsZC10cmF2ZXJzYWwtaW4tY29ubmVjdGVkY2FsbGJhY2tcbiAgICAgIHRoaXMucXVlcnlTZWxlY3RvckFsbCgncXRpLXNpbXBsZS1tYXRjaC1zZXQ6Zmlyc3Qtb2YtdHlwZSBxdGktc2ltcGxlLWFzc29jaWFibGUtY2hvaWNlJylcbiAgICApO1xuICAgIHRoaXMuY29scyA9IEFycmF5LmZyb208UXRpU2ltcGxlQXNzb2NpYWJsZUNob2ljZT4oXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgd2Mvbm8tY2hpbGQtdHJhdmVyc2FsLWluLWNvbm5lY3RlZGNhbGxiYWNrXG4gICAgICB0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwoJ3F0aS1zaW1wbGUtbWF0Y2gtc2V0Omxhc3Qtb2YtdHlwZSBxdGktc2ltcGxlLWFzc29jaWFibGUtY2hvaWNlJylcbiAgICApO1xuXG4gICAgdGhpcy5yZXNwb25zZSA9IFtdO1xuICB9XG5cbiAgaGFuZGxlUmFkaW9DbGljayA9IGUgPT4ge1xuICAgIGNvbnN0IHJhZGlvID0gZS50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICBpZiAodGhpcy5sYXN0Q2hlY2tlZFJhZGlvID09PSByYWRpbykge1xuICAgICAgcmFkaW8uY2hlY2tlZCA9IGZhbHNlO1xuICAgICAgdGhpcy5sYXN0Q2hlY2tlZFJhZGlvID0gbnVsbDtcbiAgICAgIHRoaXMuaGFuZGxlUmFkaW9DaGFuZ2UoZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubGFzdENoZWNrZWRSYWRpbyA9IHJhZGlvO1xuICAgIH1cbiAgfTtcblxuICBoYW5kbGVSYWRpb0NoYW5nZSA9IGUgPT4ge1xuICAgIGNvbnN0IGNoZWNrYm94ID0gZS50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICBjb25zdCB2YWx1ZSA9IGNoZWNrYm94LnZhbHVlO1xuICAgIGNvbnN0IG5hbWUgPSBjaGVja2JveC5uYW1lO1xuICAgIGNvbnN0IHR5cGUgPSBjaGVja2JveC50eXBlO1xuXG4gICAgaWYgKGNoZWNrYm94LmNoZWNrZWQpIHtcbiAgICAgIGlmICghdGhpcy5yZXNwb25zZSkge1xuICAgICAgICB0aGlzLnJlc3BvbnNlID0gW3ZhbHVlXTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5yZXNwb25zZS5pbmRleE9mKHZhbHVlKSA9PT0gLTEpIHtcbiAgICAgICAgaWYgKHR5cGUgPT09ICdyYWRpbycpIHtcbiAgICAgICAgICB0aGlzLnJlc3BvbnNlID0gdGhpcy5yZXNwb25zZS5maWx0ZXIodiA9PiB2LmluZGV4T2YobmFtZSkgPT09IC0xKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlc3BvbnNlID0gWy4uLnRoaXMucmVzcG9uc2UsIHZhbHVlXTtcbiAgICAgIH1cbiAgICAgIHRoaXMubGFzdENoZWNrZWRSYWRpbyA9IGNoZWNrYm94O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlc3BvbnNlID0gdGhpcy5yZXNwb25zZS5maWx0ZXIodiA9PiB2ICE9PSB2YWx1ZSk7XG4gICAgICB0aGlzLmxhc3RDaGVja2VkUmFkaW8gPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMucmVxdWVzdFVwZGF0ZSgpO1xuICAgIHRoaXMuZGlzcGF0Y2hFdmVudChcbiAgICAgIG5ldyBDdXN0b21FdmVudDxSZXNwb25zZUludGVyYWN0aW9uPigncXRpLWludGVyYWN0aW9uLXJlc3BvbnNlJywge1xuICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICBjb21wb3NlZDogdHJ1ZSxcbiAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgcmVzcG9uc2VJZGVudGlmaWVyOiB0aGlzLnJlc3BvbnNlSWRlbnRpZmllcixcbiAgICAgICAgICByZXNwb25zZTogQXJyYXkuaXNBcnJheSh0aGlzLnJlc3BvbnNlKSA/IFsuLi50aGlzLnJlc3BvbnNlXSA6IHRoaXMucmVzcG9uc2VcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICB9O1xuXG4gIHNldCBjb3JyZWN0UmVzcG9uc2UocmVzcG9uc2VWYWx1ZTogc3RyaW5nIHwgc3RyaW5nW10pIHtcbiAgICBpZiAocmVzcG9uc2VWYWx1ZSA9PT0gJycpIHtcbiAgICAgIHRoaXMuY29ycmVjdE9wdGlvbnMgPSBbXTtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkocmVzcG9uc2VWYWx1ZSkpIHtcbiAgICAgIHRoaXMuY29ycmVjdE9wdGlvbnMgPSByZXNwb25zZVZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICBpZiAoIXRoaXMuY2xhc3NMaXN0LmNvbnRhaW5zKCdxdGktbWF0Y2gtdGFidWxhcicpKSB7XG4gICAgICByZXR1cm4gaHRtbGA8c2xvdCBuYW1lPVwicHJvbXB0XCI+PC9zbG90PiA8c2xvdD48L3Nsb3Q+YDtcbiAgICB9XG4gICAgcmV0dXJuIGh0bWxgXG4gICAgICA8c2xvdCBuYW1lPVwicHJvbXB0XCI+PC9zbG90PlxuICAgICAgPHRhYmxlPlxuICAgICAgICA8dHI+XG4gICAgICAgICAgPHRkPjwvdGQ+XG4gICAgICAgICAgJHt0aGlzLmNvbHMubWFwKChjb2wsIGkpID0+IGh0bWxgPHRoIHBhcnQ9XCJyLWhlYWRlclwiPiR7dW5zYWZlSFRNTChjb2wuaW5uZXJIVE1MKX08L3RoPmApfVxuICAgICAgICA8L3RyPlxuXG4gICAgICAgICR7dGhpcy5yb3dzLm1hcChcbiAgICAgICAgICAocm93LCBySW5kZXgpID0+XG4gICAgICAgICAgICBodG1sYDx0cj5cbiAgICAgICAgICAgICAgPHRkIHBhcnQ9XCJjLWhlYWRlclwiPiR7dW5zYWZlSFRNTChyb3cuaW5uZXJIVE1MKX08L3RkPlxuICAgICAgICAgICAgICAke3RoaXMuY29scy5tYXAoKGNvbCwgY0luZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgcm93SWQgPSByb3cuZ2V0QXR0cmlidXRlKCdpZGVudGlmaWVyJyk7XG4gICAgICAgICAgICAgICAgY29uc3QgY29sSWQgPSBjb2wuZ2V0QXR0cmlidXRlKCdpZGVudGlmaWVyJyk7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBgJHtyb3dJZH0gJHtjb2xJZH1gO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkSW5Sb3dDb3VudCA9IHRoaXMucmVzcG9uc2UuZmlsdGVyKHYgPT4gdi5zcGxpdCgnICcpWzBdID09PSByb3dJZCkubGVuZ3RoIHx8IDA7XG4gICAgICAgICAgICAgICAgY29uc3QgY2hlY2tlZCA9IHRoaXMucmVzcG9uc2UuaW5jbHVkZXModmFsdWUpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcnQgPSBgcmIgJHtjaGVja2VkID8gJ3JiLWNoZWNrZWQnIDogJyd9ICR7dGhpcy5jb3JyZWN0T3B0aW9ucy5pbmNsdWRlcyh2YWx1ZSkgPyAncmItY29ycmVjdCcgOiAnJ31gO1xuICAgICAgICAgICAgICAgIC8vIGRpc2FibGUgaWYgbWF0Y2ggbWF4IGlzIGdyZWF0ZXIgdGhhbiAxIGFuZCBtYXggaXMgcmVhY2hlZFxuICAgICAgICAgICAgICAgIGNvbnN0IGRpc2FibGUgPVxuICAgICAgICAgICAgICAgICAgdGhpcy5jb3JyZWN0T3B0aW9ucy5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgICAgID8gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICA6IHJvdy5tYXRjaE1heCA9PT0gMVxuICAgICAgICAgICAgICAgICAgICAgID8gZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICA6IHNlbGVjdGVkSW5Sb3dDb3VudCA+PSByb3cubWF0Y2hNYXggJiYgIWNoZWNrZWQ7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGh0bWxgPHRkPlxuICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgIHR5cGU9JHtyb3cubWF0Y2hNYXggPT09IDEgPyAncmFkaW8nIDogYGNoZWNrYm94YH1cbiAgICAgICAgICAgICAgICAgICAgcGFydD0ke3BhcnR9XG4gICAgICAgICAgICAgICAgICAgIG5hbWU9JHtyb3dJZH1cbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9JHt2YWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgLmRpc2FibGVkPSR7ZGlzYWJsZX1cbiAgICAgICAgICAgICAgICAgICAgQGNoYW5nZT0ke2UgPT4gdGhpcy5oYW5kbGVSYWRpb0NoYW5nZShlKX1cbiAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSR7ZSA9PiAocm93Lm1hdGNoTWF4ID09PSAxID8gdGhpcy5oYW5kbGVSYWRpb0NsaWNrKGUpIDogbnVsbCl9XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvdGQ+YDtcbiAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICA8L3RyPmBcbiAgICAgICAgKX1cbiAgICAgIDwvdGFibGU+XG4gICAgYDtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktbWF0Y2gtaW50ZXJhY3Rpb24nOiBRdGlNYXRjaEludGVyYWN0aW9uO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgY3NzLCBodG1sLCBMaXRFbGVtZW50IH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQsIHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuXG4vLyBUSElTIElTIE5PVCBVU0VEIElOIFRBQlVMQVIgTUFUQ0ggSU5URVJBQ1RJT05cbkBjdXN0b21FbGVtZW50KCdxdGktc2ltcGxlLWFzc29jaWFibGUtY2hvaWNlJylcbi8vIHRzbGludDpkaXNhYmxlOiBpbmRlbnRcbmV4cG9ydCBjbGFzcyBRdGlTaW1wbGVBc3NvY2lhYmxlQ2hvaWNlIGV4dGVuZHMgTGl0RWxlbWVudCB7XG4gIHN0YXRpYyBzdHlsZXMgPSBjc3NgXG4gICAgOmhvc3Qge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIHVzZXItc2VsZWN0OiBub25lO1xuICAgIH1cbiAgICBzbG90IHtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgfVxuICAgIHNsb3RbbmFtZT0ncXRpLXNpbXBsZS1hc3NvY2lhYmxlLWNob2ljZSddIHtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgIH1cbiAgYDtcblxuICAvKiogdGhlIG1pbmltYWwgbnVtYmVyIG9mIHNlbGVjdGlvbnMgYSBjYW5kaWRhdGUgbXVzdCBtYWtlICovXG4gIEBwcm9wZXJ0eSh7XG4gICAgdHlwZTogTnVtYmVyLFxuICAgIGF0dHJpYnV0ZTogJ21hdGNoLW1pbidcbiAgfSlcbiAgcHVibGljIG1hdGNoTWluOiBudW1iZXIgPSAwO1xuXG4gIC8qKiB0aGUgbWF4aW11bSBudW1iZXIgb2Ygc2VsZWN0aW9ucyBhIGNhbmRpZGF0ZSBtdXN0IG1ha2UsIHRoZSBvdGhlciBvcHRpb25zIHdpbGwgYmUgZGlzYWJsZWQgd2hlbiBtYXggb3B0aW9ucyBpcyBjaGVja2VkICovXG4gIEBwcm9wZXJ0eSh7XG4gICAgdHlwZTogTnVtYmVyLFxuICAgIGF0dHJpYnV0ZTogJ21hdGNoLW1heCdcbiAgfSlcbiAgcHVibGljIG1hdGNoTWF4OiBudW1iZXIgPSAxO1xuXG4gIEBwcm9wZXJ0eSh7XG4gICAgdHlwZTogQm9vbGVhbixcbiAgICBhdHRyaWJ1dGU6ICdmaXhlZCdcbiAgfSlcbiAgcHVibGljIGZpeGVkID0gZmFsc2U7XG5cbiAgLy8gcGs6IFRoaXMgbmVlZHMgc29tZSBleHBsYW5hdGlvblxuICAvLyBpbiB0aGUgYXNzb2NpYXRlIGludGVyYWN0aW9uIHRoZXJlIGlzIGEgc3BlY2lhbCBzbG90IGZvciB0aGVzZSBxdGktc2ltcGxlLWFzc29jaWFibGUtY2hvaWNlc1xuICBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKCdzbG90JywgJ3F0aS1zaW1wbGUtYXNzb2NpYWJsZS1jaG9pY2UnKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZSgncGFydCcsICdxdGktc2ltcGxlLWFzc29jaWFibGUtY2hvaWNlJyk7XG4gIH1cblxuICAvLyBwazogVGhpcyBuZWVkcyBzb21lIGV4cGxhbmF0aW9uXG4gIC8vIGluIHF0aS1tYXRjaC1pbnRlcmFjdGlvbiwgcXRpLXNpbXBsZS1hc3NvY2lhYmxlLWNob2ljZSBpcyB1c2VkIHRvIGRlbm90ZSB0aGVcbiAgLy8gZHJhZ2dhYmxlLCBidXQgYWxzbyB0aGUgZHJvcHBhYmxlLiBXRUlSRC4uIGJ1dCBsZXRzIGRlYWwgd2l0aCBpdC5cbiAgLy8gU28gd2UgaGF2ZSBhIHNsb3QgZm9yIHdoZW5ldmVyIGFub3RoZXIgcXRpLXNpbXBsZS1hc3NvY2lhYmxlLWNob2ljZSBpcyBkcm9wcGVkIGluIGhlcmUuXG4gIC8vIEFuZCB3ZSBoYXZlIHNsb3QgZm9yIGNvbnRlbnQgbGlrZSBpbiB0aGlzIGFzc29jaWF0ZSBpbnRlcmFjdGlvblxuICBvdmVycmlkZSByZW5kZXIoKSB7XG4gICAgcmV0dXJuIGh0bWxgXG4gICAgICA8c2xvdD48L3Nsb3Q+XG4gICAgICA8c2xvdCBuYW1lPVwicXRpLXNpbXBsZS1hc3NvY2lhYmxlLWNob2ljZVwiPjwvc2xvdD5cbiAgICBgO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1zaW1wbGUtYXNzb2NpYWJsZS1jaG9pY2UnOiBRdGlTaW1wbGVBc3NvY2lhYmxlQ2hvaWNlO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgY3NzLCBodG1sIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBJbnRlcmFjdGlvbiB9IGZyb20gJy4uL2ludGVybmFsL2ludGVyYWN0aW9uL2ludGVyYWN0aW9uJztcblxuQGN1c3RvbUVsZW1lbnQoJ3F0aS1tZWRpYS1pbnRlcmFjdGlvbicpXG5leHBvcnQgY2xhc3MgUXRpTWVkaWFJbnRlcmFjdGlvbiBleHRlbmRzIEludGVyYWN0aW9uIHtcbiAgdmFsdWUgPSAwO1xuICByZXNldCgpIHtcbiAgICAvLyB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQuJyk7XG4gIH1cbiAgdmFsaWRhdGUoKTogYm9vbGVhbiB7XG4gICAgLy8gdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkLicpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHNldCByZXNwb25zZSh2YWw6IHVuZGVmaW5lZCkge1xuICAgIC8vIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcbiAgfVxuXG4gIHN0YXRpYyBvdmVycmlkZSBnZXQgcHJvcGVydGllcygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uSW50ZXJhY3Rpb24ucHJvcGVydGllcyxcbiAgICAgIC4uLntcbiAgICAgICAgc3RlcDoge1xuICAgICAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgICAgICBhdHRyaWJ1dGU6ICdzdGVwJyxcbiAgICAgICAgICBkZWZhdWx0OiAxMFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBvdmVycmlkZSBzdHlsZXMgPSBbY3NzYGBdO1xuXG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICByZXR1cm4gaHRtbGAgPHNsb3QgbmFtZT1cInByb21wdFwiPjwvc2xvdD5cbiAgICAgIDxzbG90Pjwvc2xvdD5gO1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIG92ZXJyaWRlIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgLy8gZ2V0IGF1ZGlvLCB2aWRlbyBvZiBvYmplY3QgdGFnLlxuICAgIGNvbnN0IG1lZGlhT2JqZWN0ID0gdGhpcy5xdWVyeVNlbGVjdG9yKCdhdWRpbycpIHx8IHRoaXMucXVlcnlTZWxlY3RvcigndmlkZW8nKSB8fCB0aGlzLnF1ZXJ5U2VsZWN0b3IoJ29iamVjdCcpO1xuICAgIGlmIChtZWRpYU9iamVjdCkge1xuICAgICAgLy8gbGlzdGVuIHRvIGVuZGVkIGV2ZW50XG4gICAgICBtZWRpYU9iamVjdC5hZGRFdmVudExpc3RlbmVyKCdlbmRlZCcsICgpID0+IHtcbiAgICAgICAgLy8gc2V0IHZhbHVlIHRvIDBcbiAgICAgICAgdGhpcy52YWx1ZSsrO1xuICAgICAgICB0aGlzLnNhdmVSZXNwb25zZSh0aGlzLnZhbHVlLnRvU3RyaW5nKCkpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1tZWRpYS1pbnRlcmFjdGlvbic6IFF0aU1lZGlhSW50ZXJhY3Rpb247XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBjc3MsIGh0bWwsIExpdEVsZW1lbnQgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCwgcHJvcGVydHksIHN0YXRlIH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgdW5zYWZlSFRNTCB9IGZyb20gJ2xpdC9kaXJlY3RpdmVzL3Vuc2FmZS1odG1sLmpzJztcbmltcG9ydCB7IERyYWdEcm9wSW50ZXJhY3Rpb25NaXhpbiB9IGZyb20gJy4uL2ludGVybmFsL2RyYWctZHJvcC9kcmFnLWRyb3AtaW50ZXJhY3Rpb24tbWl4aW4nO1xuaW1wb3J0IHsgU2h1ZmZsZU1peGluIH0gZnJvbSAnLi4vaW50ZXJuYWwvc2h1ZmZsZS9zaHVmZmxlLW1peGluJzsgLy8gSW1wb3J0IHRoZSBtaXhpblxuaW1wb3J0IHsgUXRpU2ltcGxlQ2hvaWNlIH0gZnJvbSAnLi4vcXRpLXNpbXBsZS1jaG9pY2UnO1xuXG5AY3VzdG9tRWxlbWVudCgncXRpLW9yZGVyLWludGVyYWN0aW9uJylcbmV4cG9ydCBjbGFzcyBRdGlPcmRlckludGVyYWN0aW9uIGV4dGVuZHMgU2h1ZmZsZU1peGluKFxuICBEcmFnRHJvcEludGVyYWN0aW9uTWl4aW4oTGl0RWxlbWVudCwgYHF0aS1zaW1wbGUtY2hvaWNlYCwgdHJ1ZSwgJ2Ryb3AtbGlzdCcpLFxuICAncXRpLXNpbXBsZS1jaG9pY2UnXG4pIHtcbiAgY2hpbGRyZW5NYXA6IEVsZW1lbnRbXTtcblxuICBAc3RhdGUoKSBuckNob2ljZXM6IG51bWJlciA9IDA7XG4gIEBzdGF0ZSgpIGNvcnJlY3RSZXNwb25zZXM6IHN0cmluZ1tdID0gW107XG4gIEBzdGF0ZSgpIHNob3dDb3JyZWN0UmVzcG9uc2VzOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqIG9yaWVudGF0aW9uIG9mIGNob2ljZXMgKi9cbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nIH0pXG4gIHB1YmxpYyBvcmllbnRhdGlvbjogJ2hvcml6b250YWwnIHwgJ3ZlcnRpY2FsJztcblxuICBzdGF0aWMgb3ZlcnJpZGUgc3R5bGVzID0gW1xuICAgIGNzc2BcbiAgICAgIFtwYXJ0PSdkcmFncyddIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG4gICAgICAgIGZsZXg6IDE7XG4gICAgICB9XG5cbiAgICAgIFtwYXJ0PSdkcm9wcyddIHtcbiAgICAgICAgZmxleDogMTtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgZ3JpZC1hdXRvLWZsb3c6IGNvbHVtbjtcbiAgICAgICAgZ3JpZC1hdXRvLWNvbHVtbnM6IDFmcjtcbiAgICAgIH1cblxuICAgICAgOmhvc3QoW29yaWVudGF0aW9uPSdob3Jpem9udGFsJ10pIFtwYXJ0PSdkcmFncyddIHtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICAgIH1cbiAgICAgIDpob3N0KFtvcmllbnRhdGlvbj0naG9yaXpvbnRhbCddKSBbcGFydD0nZHJvcHMnXSB7XG4gICAgICAgIGdyaWQtYXV0by1mbG93OiBjb2x1bW47XG4gICAgICB9XG4gICAgICA6aG9zdChbb3JpZW50YXRpb249J3ZlcnRpY2FsJ10pIFtwYXJ0PSdkcmFncyddIHtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgIH1cbiAgICAgIDpob3N0KFtvcmllbnRhdGlvbj0ndmVydGljYWwnXSkgW3BhcnQ9J2Ryb3BzJ10ge1xuICAgICAgICBncmlkLWF1dG8tZmxvdzogcm93O1xuICAgICAgfVxuXG4gICAgICBbcGFydD0nZHJvcC1saXN0J10ge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgZmxleDogMTtcbiAgICAgIH1cblxuICAgICAgW3BhcnQ9J2NvbnRhaW5lciddIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZ2FwOiAwLjVyZW07XG4gICAgICB9XG4gICAgICA6aG9zdCgucXRpLWNob2ljZXMtdG9wKSBbcGFydD0nY29udGFpbmVyJ10ge1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgfVxuICAgICAgOmhvc3QoLnF0aS1jaG9pY2VzLWJvdHRvbSkgW3BhcnQ9J2NvbnRhaW5lciddIHtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlO1xuICAgICAgfVxuICAgICAgOmhvc3QoLnF0aS1jaG9pY2VzLWxlZnQpIFtwYXJ0PSdjb250YWluZXInXSB7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gICAgICB9XG4gICAgICA6aG9zdCgucXRpLWNob2ljZXMtcmlnaHQpIFtwYXJ0PSdjb250YWluZXInXSB7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZTtcbiAgICAgIH1cbiAgICBgXG4gIF07XG5cbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIGNvbnN0IGNob2ljZXMgPSBBcnJheS5mcm9tKHRoaXMucXVlcnlTZWxlY3RvckFsbCgncXRpLXNpbXBsZS1jaG9pY2UnKSk7XG4gICAgaWYgKHRoaXMubnJDaG9pY2VzIDwgY2hvaWNlcy5sZW5ndGgpIHtcbiAgICAgIHRoaXMubnJDaG9pY2VzID0gY2hvaWNlcy5sZW5ndGg7XG4gICAgfVxuXG4gICAgcmV0dXJuIGh0bWxgIDxzbG90IG5hbWU9XCJwcm9tcHRcIj4gPC9zbG90PlxuICAgICAgPGRpdiBwYXJ0PVwiY29udGFpbmVyXCI+XG4gICAgICAgIDxzbG90IHBhcnQ9XCJkcmFnc1wiPiA8L3Nsb3Q+XG4gICAgICAgIDxkaXYgcGFydD1cImRyb3BzXCI+XG4gICAgICAgICAgJHtBcnJheS5mcm9tKEFycmF5KHRoaXMubnJDaG9pY2VzKSkubWFwKFxuICAgICAgICAgICAgKF8sIGkpID0+XG4gICAgICAgICAgICAgIGh0bWxgPGRyb3AtbGlzdCBwYXJ0PVwiZHJvcC1saXN0XCIgaWRlbnRpZmllcj1cImRyb3BsaXN0JHtpfVwiPjwvZHJvcC1saXN0PiR7dGhpcy5zaG93Q29ycmVjdFJlc3BvbnNlcyAmJlxuICAgICAgICAgICAgICAgIHRoaXMuY29ycmVjdFJlc3BvbnNlcy5sZW5ndGggPiBpXG4gICAgICAgICAgICAgICAgICA/IHVuc2FmZUhUTUwoYDxzcGFuIHBhcnQ9J2NvcnJlY3QtcmVzcG9uc2UnPiR7dGhpcy5jb3JyZWN0UmVzcG9uc2VzW2ldfTwvc3Bhbj5gKVxuICAgICAgICAgICAgICAgICAgOiAnJ31gXG4gICAgICAgICAgKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5gO1xuICB9XG5cbiAgc2V0IGNvcnJlY3RSZXNwb25zZSh2YWx1ZTogUmVhZG9ubHk8c3RyaW5nIHwgc3RyaW5nW10+KSB7XG4gICAgaWYgKHZhbHVlID09PSAnJykge1xuICAgICAgdGhpcy5zaG93Q29ycmVjdFJlc3BvbnNlcyA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNvcnJlY3RSZXNwb25zZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICBjb25zdCByZXNwb25zZXMgPSBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW3ZhbHVlXTtcblxuICAgICAgcmVzcG9uc2VzLmZvckVhY2goKHJlc3BvbnNlLCBpbmRleCkgPT4ge1xuICAgICAgICBsZXQgc2ltcGxlQ2hvaWNlID0gdGhpcy5xdWVyeVNlbGVjdG9yKGBxdGktc2ltcGxlLWNob2ljZVtpZGVudGlmaWVyPVwiJHtyZXNwb25zZX1cIl1gKTtcbiAgICAgICAgaWYgKCFzaW1wbGVDaG9pY2UpIHtcbiAgICAgICAgICBzaW1wbGVDaG9pY2UgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcihgcXRpLXNpbXBsZS1jaG9pY2VbaWRlbnRpZmllcj1cIiR7cmVzcG9uc2V9XCJdYCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0ZXh0ID0gc2ltcGxlQ2hvaWNlPy50ZXh0Q29udGVudC50cmltKCk7XG4gICAgICAgIHRoaXMuY29ycmVjdFJlc3BvbnNlcyA9IFsuLi50aGlzLmNvcnJlY3RSZXNwb25zZXMsIHRleHRdO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5zaG93Q29ycmVjdFJlc3BvbnNlcyA9IHRydWU7XG4gIH1cblxuICAvLyBzb21lIGludGVyYWN0aW9ucyBoYXZlIGEgZGlmZmVyZW50IHdheSBvZiBnZXR0aW5nIHRoZSByZXNwb25zZVxuICAvLyB0aGlzIGlzIGNhbGxlZCBmcm9tIHRoZSBkcmFnIGFuZCBkcm9wIG1peGluIGNsYXNzXG4gIC8vIHlvdSBoYXZlIHRvIGltcGxlbWVudCB5b3VyIG93biBnZXRSZXNwb25zZSBtZXRob2QgaW4gdGhlIHN1cGVyY2xhc3NcbiAgLy8gY2F1c2UgdGhleSBhcmUgZGlmZmVyZW50IGZvciBzb21lIGludGVyYWN0aW9ucy5cbiAgcHJvdGVjdGVkIGdldFJlc3BvbnNlKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBkcm9wcGFibGVzID0gQXJyYXkuZnJvbTxRdGlTaW1wbGVDaG9pY2U+KHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKCdkcm9wLWxpc3QnKSk7XG5cbiAgICBjb25zdCByZXNwb25zZSA9IGRyb3BwYWJsZXMubWFwKGRyb3BwYWJsZSA9PiB7XG4gICAgICBjb25zdCBkcmFnc0luRHJvcHBhYmxlID0gZHJvcHBhYmxlLnF1ZXJ5U2VsZWN0b3JBbGwoJ1txdGktZHJhZ2dhYmxlPVwidHJ1ZVwiXScpO1xuICAgICAgY29uc3QgaWRlbnRpZmllcnMgPSBBcnJheS5mcm9tKGRyYWdzSW5Ecm9wcGFibGUpLm1hcChkID0+IGQuZ2V0QXR0cmlidXRlKCdpZGVudGlmaWVyJykpO1xuICAgICAgcmV0dXJuIFsuLi5pZGVudGlmaWVyc10uam9pbignICcpO1xuICAgIH0pO1xuICAgIHJldHVybiByZXNwb25zZTtcbiAgfVxuXG4gIG92ZXJyaWRlIGFzeW5jIGZpcnN0VXBkYXRlZChjaGFuZ2VkUHJvcHMpIHtcbiAgICBzdXBlci5maXJzdFVwZGF0ZWQoY2hhbmdlZFByb3BzKTtcbiAgICB0aGlzLmNoaWxkcmVuTWFwID0gQXJyYXkuZnJvbSh0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwoJ3F0aS1zaW1wbGUtY2hvaWNlJykpO1xuICAgIHRoaXMuY2hpbGRyZW5NYXAuZm9yRWFjaChlbCA9PiBlbC5zZXRBdHRyaWJ1dGUoJ3BhcnQnLCAncXRpLXNpbXBsZS1jaG9pY2UnKSk7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLW9yZGVyLWludGVyYWN0aW9uJzogUXRpT3JkZXJJbnRlcmFjdGlvbjtcbiAgfVxufVxuIiwgImltcG9ydCB7IExpdEVsZW1lbnQsIGNzcywgaHRtbCB9IGZyb20gJ2xpdCc7XG5cbmV4cG9ydCBjbGFzcyBRdGlTUG9zaXRpb25PYmplY3RJbnRlcmFjdGlvbiBleHRlbmRzIExpdEVsZW1lbnQge1xuICBvdmVycmlkZSByZW5kZXIoKSB7XG4gICAgcmV0dXJuIGh0bWxgPHNsb3Q+PC9zbG90PmA7XG4gIH1cblxuICBzdGF0aWMgb3ZlcnJpZGUgc3R5bGVzID0gW1xuICAgIGNzc2BcbiAgICAgIDpob3N0IHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICB9XG4gICAgICA6OnNsb3R0ZWQoaW1nKSB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgY3Vyc29yOiBtb3ZlO1xuICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgICAgICAgbGVmdDogNTAlO1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XG4gICAgICB9XG4gICAgYFxuICBdO1xufVxuXG5jdXN0b21FbGVtZW50cy5kZWZpbmUoJ3F0aS1wb3NpdGlvbi1vYmplY3QtaW50ZXJhY3Rpb24nLCBRdGlTUG9zaXRpb25PYmplY3RJbnRlcmFjdGlvbik7XG4iLCAiaW1wb3J0IHsgTGl0RWxlbWVudCwgY3NzLCBodG1sIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5cbkBjdXN0b21FbGVtZW50KCdxdGktcG9zaXRpb24tb2JqZWN0LXN0YWdlJylcbmV4cG9ydCBjbGFzcyBRdGlQb3NpdGlvbk9iamVjdFN0YWdlIGV4dGVuZHMgTGl0RWxlbWVudCB7XG4gIGNob2ljZU9yZGVyaW5nOiBib29sZWFuO1xuICBzdGFydFg6IGFueTtcbiAgc3RhcnRZOiBhbnk7XG4gIGRyYWdFbGVtZW50OiBhbnk7XG5cbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYDxzbG90Pjwvc2xvdD5gO1xuICB9XG5cbiAgc3RhdGljIG92ZXJyaWRlIHN0eWxlcyA9IFtcbiAgICBjc3NgXG4gICAgICA6aG9zdCB7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgfVxuICAgIGBcbiAgXTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMucmVtb3ZlTW92ZUxpc3RlbmVyID0gdGhpcy5yZW1vdmVNb3ZlTGlzdGVuZXIuYmluZCh0aGlzKTtcbiAgICB0aGlzLmRyYWdFbGVtZW50SGFuZGxlciA9IHRoaXMuZHJhZ0VsZW1lbnRIYW5kbGVyLmJpbmQodGhpcyk7XG4gIH1cblxuICAvLyBEZWZpbmUgYSBmdW5jdGlvbiB0byBoYW5kbGUgdGhlIG1vdXNlbW92ZSBldmVudCBvbiB0aGUgZHJhZ2dhYmxlIGVsZW1lbnRcbiAgZHJhZ0VsZW1lbnRIYW5kbGVyKGV2ZW50KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgIC8vIENhbGN1bGF0ZSB0aGUgZGlzdGFuY2UgdGhlIG1vdXNlIGhhcyBtb3ZlZCBzaW5jZSB0aGUgbGFzdCBldmVudFxuICAgIGNvbnN0IGRlbHRhWCA9IGV2ZW50LmNsaWVudFggLSB0aGlzLnN0YXJ0WDtcbiAgICBjb25zdCBkZWx0YVkgPSBldmVudC5jbGllbnRZIC0gdGhpcy5zdGFydFk7XG5cbiAgICAvLyBVcGRhdGUgdGhlIHBvc2l0aW9uIG9mIHRoZSBkcmFnZ2FibGUgZWxlbWVudFxuICAgIHRoaXMuZHJhZ0VsZW1lbnQuc3R5bGUubGVmdCA9IHRoaXMuZHJhZ0VsZW1lbnQub2Zmc2V0TGVmdCArIGRlbHRhWCArICdweCc7XG4gICAgdGhpcy5kcmFnRWxlbWVudC5zdHlsZS50b3AgPSB0aGlzLmRyYWdFbGVtZW50Lm9mZnNldFRvcCArIGRlbHRhWSArICdweCc7XG5cbiAgICAvLyBVcGRhdGUgdGhlIHN0YXJ0aW5nIHBvc2l0aW9uIG9mIHRoZSBtb3VzZVxuICAgIHRoaXMuc3RhcnRYID0gZXZlbnQuY2xpZW50WDtcbiAgICB0aGlzLnN0YXJ0WSA9IGV2ZW50LmNsaWVudFk7XG4gIH1cblxuICBvdmVycmlkZSBmaXJzdFVwZGF0ZWQoYSk6IHZvaWQge1xuICAgIHN1cGVyLmZpcnN0VXBkYXRlZChhKTtcblxuICAgIC8vIEdldCB0aGUgZHJhZ2dhYmxlIGFuZCBkcm9wIHpvbmUgZWxlbWVudHNcbiAgICB0aGlzLmRyYWdFbGVtZW50ID0gdGhpcy5xdWVyeVNlbGVjdG9yKCdxdGktcG9zaXRpb24tb2JqZWN0LWludGVyYWN0aW9uPmltZycpO1xuICAgIC8vIGNvbnN0IGNhbnZhc0VsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2FudmFzJyk7XG5cbiAgICAvLyBJbml0aWFsaXplIHZhcmlhYmxlcyBmb3IgdGhlIHN0YXJ0aW5nIHBvc2l0aW9uIG9mIHRoZSBkcmFnZ2FibGUgZWxlbWVudFxuICAgIHRoaXMuc3RhcnRYID0gMDtcbiAgICB0aGlzLnN0YXJ0WSA9IDA7XG5cbiAgICAvLyBBZGQgYSBtb3VzZWRvd24gZXZlbnQgbGlzdGVuZXIgdG8gdGhlIGRyYWdnYWJsZSBlbGVtZW50XG4gICAgdGhpcy5kcmFnRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgIC8vIFNhdmUgdGhlIHN0YXJ0aW5nIHBvc2l0aW9uIG9mIHRoZSBtb3VzZVxuICAgICAgdGhpcy5zdGFydFggPSBldmVudC5jbGllbnRYO1xuICAgICAgdGhpcy5zdGFydFkgPSBldmVudC5jbGllbnRZO1xuXG4gICAgICAvLyBBZGQgYSBtb3VzZW1vdmUgZXZlbnQgbGlzdGVuZXIgdG8gdGhlIGRvY3VtZW50XG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLmRyYWdFbGVtZW50SGFuZGxlciwgdHJ1ZSk7XG4gICAgfSk7XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIHRoaXMucmVtb3ZlTW92ZUxpc3RlbmVyKTtcbiAgfVxuXG4gIHJlbW92ZU1vdmVMaXN0ZW5lcihldmVudCkge1xuICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMuZHJhZ0VsZW1lbnRIYW5kbGVyLCB0cnVlKTtcbiAgfVxuXG4gIG92ZXJyaWRlIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5kcmFnRWxlbWVudEhhbmRsZXIpO1xuICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCB0aGlzLnJlbW92ZU1vdmVMaXN0ZW5lcik7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLXBvc2l0aW9uLW9iamVjdC1zdGFnZSc6IFF0aVBvc2l0aW9uT2JqZWN0U3RhZ2U7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBjc3MsIGh0bWwgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCwgcHJvcGVydHksIHN0YXRlIH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgcmVwZWF0IH0gZnJvbSAnbGl0L2RpcmVjdGl2ZXMvcmVwZWF0LmpzJztcbmltcG9ydCB7IHN0eWxlTWFwIH0gZnJvbSAnbGl0L2RpcmVjdGl2ZXMvc3R5bGUtbWFwLmpzJztcbmltcG9ydCB7IEludGVyYWN0aW9uIH0gZnJvbSAnLi4vaW50ZXJuYWwvaW50ZXJhY3Rpb24vaW50ZXJhY3Rpb24nO1xuXG5AY3VzdG9tRWxlbWVudCgncXRpLXNlbGVjdC1wb2ludC1pbnRlcmFjdGlvbicpXG5leHBvcnQgY2xhc3MgUXRpU2VsZWN0UG9pbnRJbnRlcmFjdGlvbiBleHRlbmRzIEludGVyYWN0aW9uIHtcbiAgc3RhdGljIG92ZXJyaWRlIHN0eWxlcyA9IFtcbiAgICBjc3NgXG4gICAgICA6aG9zdCB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgfVxuICAgICAgcG9pbnQtY29udGFpbmVyIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIH1cbiAgICBgXG4gIF07XG5cbiAgQHByb3BlcnR5KHtcbiAgICB0eXBlOiBOdW1iZXIsXG4gICAgYXR0cmlidXRlOiAnbWF4LWNob2ljZXMnXG4gIH0pXG4gIHB1YmxpYyBtYXhDaG9pY2VzOiBudW1iZXIgPSBJbmZpbml0eTtcblxuICBAcHJvcGVydHkoe1xuICAgIHR5cGU6IE51bWJlcixcbiAgICBhdHRyaWJ1dGU6ICdtaW4tY2hvaWNlcydcbiAgfSlcbiAgcHVibGljIG1pbkNob2ljZXM6IG51bWJlciA9IDA7XG5cbiAgQHN0YXRlKClcbiAgcHJpdmF0ZSBfcG9pbnRzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIC8vIFJlZmVyZW5jZSB0byB0aGUgaW1hZ2UgZWxlbWVudFxuICBwcml2YXRlIF9pbWdFbGVtZW50OiBIVE1MSW1hZ2VFbGVtZW50IHwgbnVsbCA9IG51bGw7XG5cbiAgLy8gRXh0cmFjdGVkIGNsaWNrIGhhbmRsZXIgbWV0aG9kXG4gIHByaXZhdGUgX29uSW1hZ2VDbGljayA9IChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgIGlmICh0aGlzLl9wb2ludHMubGVuZ3RoIDwgdGhpcy5tYXhDaG9pY2VzKSB7XG4gICAgICBjb25zdCB4ID0gZXZlbnQub2Zmc2V0WDtcbiAgICAgIGNvbnN0IHkgPSBldmVudC5vZmZzZXRZO1xuXG4gICAgICB0aGlzLl9wb2ludHMgPSBbLi4udGhpcy5fcG9pbnRzLCBgJHt4fSAke3l9YF07XG4gICAgICB0aGlzLnNhdmVSZXNwb25zZSh0aGlzLl9wb2ludHMpO1xuICAgIH1cbiAgfTtcblxuICBvdmVycmlkZSByZW5kZXIoKSB7XG4gICAgcmV0dXJuIGh0bWxgIDxzbG90IG5hbWU9XCJwcm9tcHRcIj48L3Nsb3Q+XG4gICAgICA8cG9pbnQtY29udGFpbmVyPlxuICAgICAgICAke3JlcGVhdChcbiAgICAgICAgICB0aGlzLl9wb2ludHMsXG4gICAgICAgICAgcG9pbnQgPT4gcG9pbnQsXG4gICAgICAgICAgKHBvaW50LCBpbmRleCkgPT4gaHRtbGBcbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgcGFydD1cInBvaW50XCJcbiAgICAgICAgICAgICAgc3R5bGU9JHtzdHlsZU1hcCh7XG4gICAgICAgICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtOiAndHJhbnNsYXRlKC01MCUsIC01MCUpJyxcbiAgICAgICAgICAgICAgICBsZWZ0OiBgJHtwb2ludC5zcGxpdCgnICcpWzBdfXB4YCxcbiAgICAgICAgICAgICAgICB0b3A6IGAke3BvaW50LnNwbGl0KCcgJylbMV19cHhgXG4gICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiUmVtb3ZlIHBvaW50IGF0ICR7cG9pbnR9XCJcbiAgICAgICAgICAgICAgQGNsaWNrPSR7KGU6IEV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9wb2ludHMgPSB0aGlzLl9wb2ludHMuZmlsdGVyKChfLCBpKSA9PiBpICE9PSBpbmRleCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zYXZlUmVzcG9uc2UodGhpcy5fcG9pbnRzKTtcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICBgXG4gICAgICAgICl9XG4gICAgICAgIDxzbG90Pjwvc2xvdD5cbiAgICAgIDwvcG9pbnQtY29udGFpbmVyPmA7XG4gIH1cblxuICByZXNldCgpOiB2b2lkIHtcbiAgICB0aGlzLl9wb2ludHMgPSBbXTtcbiAgfVxuXG4gIHZhbGlkYXRlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9wb2ludHMubGVuZ3RoID49IHRoaXMubWluQ2hvaWNlcyAmJiB0aGlzLl9wb2ludHMubGVuZ3RoIDw9IHRoaXMubWF4Q2hvaWNlcztcbiAgfVxuXG4gIHNldCByZXNwb25zZSh2YWw6IHN0cmluZyB8IHN0cmluZ1tdKSB7XG4gICAgdGhpcy5fcG9pbnRzID0gQXJyYXkuaXNBcnJheSh2YWwpID8gdmFsIDogW3ZhbF07XG4gIH1cblxuICBvdmVycmlkZSBmaXJzdFVwZGF0ZWQoKTogdm9pZCB7XG4gICAgdGhpcy5faW1nRWxlbWVudCA9IHRoaXMucXVlcnlTZWxlY3RvcignaW1nJyk7XG5cbiAgICBpZiAodGhpcy5faW1nRWxlbWVudCkge1xuICAgICAgLy8gQXR0YWNoIHRoZSBjbGljayBldmVudCBsaXN0ZW5lciB0byB0aGUgaW1hZ2UgZWxlbWVudFxuICAgICAgdGhpcy5faW1nRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuX29uSW1hZ2VDbGljayk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUud2FybignTm8gPGltZz4gZWxlbWVudCBmb3VuZCBpbiA8cXRpLXNlbGVjdC1wb2ludC1pbnRlcmFjdGlvbj4nKTtcbiAgICB9XG4gIH1cblxuICBvdmVycmlkZSBkaXNjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpO1xuXG4gICAgaWYgKHRoaXMuX2ltZ0VsZW1lbnQpIHtcbiAgICAgIC8vIFJlbW92ZSB0aGUgY2xpY2sgZXZlbnQgbGlzdGVuZXIgZnJvbSB0aGUgaW1hZ2UgZWxlbWVudFxuICAgICAgdGhpcy5faW1nRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuX29uSW1hZ2VDbGljayk7XG4gICAgfVxuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1zZWxlY3QtcG9pbnQtaW50ZXJhY3Rpb24nOiBRdGlTZWxlY3RQb2ludEludGVyYWN0aW9uO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgY3NzLCBodG1sLCBub3RoaW5nIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQsIHByb3BlcnR5LCBxdWVyeSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcblxuaW1wb3J0IHsgd2F0Y2ggfSBmcm9tICcuLi8uLi8uLi9kZWNvcmF0b3JzL3dhdGNoJztcbmltcG9ydCB7IEludGVyYWN0aW9uIH0gZnJvbSAnLi4vaW50ZXJuYWwvaW50ZXJhY3Rpb24vaW50ZXJhY3Rpb24nO1xuXG4vKipcbiAqIEBzdW1tYXJ5IFRoZSBTbGlkZXJJbnRlcmFjdGlvbi5UeXBlIChxdGktc2xpZGVyLWludGVyYWN0aW9uKSBwcmVzZW50cyB0aGUgY2FuZGlkYXRlIHdpdGggYSBjb250cm9sIGZvciBzZWxlY3RpbmcgYSBudW1lcmljYWwgdmFsdWUgYmV0d2VlbiBhIGxvd2VyIGFuZCB1cHBlciBib3VuZC5cbiAqIEBkb2N1bWVudGF0aW9uIGh0dHBzOi8vd3d3Lmltc2dsb2JhbC5vcmcvc3BlYy9xdGkvdjNwMC9pbXBsI2guczYxeGNyajRxY3lqXG4gKiBAc3RhdHVzIHN0YWJsZVxuICogQHNpbmNlIDYuMFxuICpcbiAqIEBldmVudCBxdGktcmVnaXN0ZXItaW50ZXJhY3Rpb24gLSBlbWl0dGVkIHdoZW4gdGhlIGludGVyYWN0aW9uIHdhbnRzIHRvIHJlZ2lzdGVyIGl0c2VsZlxuICogQGV2ZW50IHF0aS1pbnRlcmFjdGlvbi1yZXNwb25zZSAtIGVtaXR0ZWQgd2hlbiB0aGUgaW50ZXJhY3Rpb24gY2hhbmdlc1xuICpcbiAqIEBjc3Nwcm9wIC0tc2hvdy12YWx1ZSAtIHNob3dzIHRoZSBjdXJyZW50IHZhbHVlIHdoaWxlIHNsaWRpbmdcbiAqIEBjc3Nwcm9wIC0tc2hvdy10aWNrcyAtIHNob3dzIHRoZSB0aWNrcyBhY2NvcmRpbmcgdG8gc3RlcHNcbiAqIEBjc3Nwcm9wIC0tc2hvdy1ib3VuZHMgLSBzaG93cyB2YWx1ZSBmb3IgbG93ZXIgYW5kIHVwcGVyIGJvdW5kYXJ5XG4gKlxuICogQGNzc3BhcnQgc2xpZGVyIC0tIHNsaWRlciBpbmx1ZGluZywgYm91bmRzIGFuZCB0aWNrcyBhbmQgdmFsdWUsIHVzZSBpdCBmb3IgcGFkZGluZ3MgYW5kIG1hcmdpbnNcbiAqIEBjc3NwYXJ0IGJvdW5kcyAtLSBkaXYgZm9yIGJvdW5kcywgY29udGFpbmluZyB0d28gZGl2cyBmb3Igd2l0aCBtaW4sIGFuZCBtYXggYm91bmRzIHZhbHVlXG4gKiBAY3NzcGFydCB0aWNrcyAtLSBkaXYgZm9yIHRpY2tzLCB1c2UgbGluZWFpciBncmFkaWVudCBhbmQgZXhwb3NlZCBjc3MgdmFyaWFibGVzIGZvciBzdHlsaW5nXG4gKiBAY3NzcGFydCByYWlsIC0tIGRpdiBmb3IgcmFpbCwgc3R5bGUgYWNjb3JkaW5nIHRvIG5lZWRzXG4gKiBAY3NzcGFydCBrbm9iIC0tIGRpdiwgc2hvdWxkIGJlIHJlbGF0aXZlIG9yIGFic29sdXRlXG4gKiBAY3NzcGFydCB2YWx1ZSAtLSBkaXYsIGNvbnRhaW5pbmcgdmFsdWVcbiAqXG4gKiBAc2xvdCAtIFRoZSBkZWZhdWx0IHNsb3Qgd2hlcmUgPHF0aS1zaW1wbGUtY2hvaWNlPiBtdXN0IGJlIHBsYWNlZC5cbiAqIEBzbG90IHByb21wdCAtIHNsb3Qgd2hlcmUgdGhlIHByb21wdCBpcyBwbGFjZWQuXG4gKi9cblxuQGN1c3RvbUVsZW1lbnQoJ3F0aS1zbGlkZXItaW50ZXJhY3Rpb24nKVxuZXhwb3J0IGNsYXNzIFF0aVNsaWRlckludGVyYWN0aW9uIGV4dGVuZHMgSW50ZXJhY3Rpb24ge1xuICBjc0xpdmU6IENTU1N0eWxlRGVjbGFyYXRpb247XG5cbiAgQHF1ZXJ5KCcja25vYicpXG4gIHByaXZhdGUgX2tub2I6IEhUTUxFbGVtZW50O1xuXG4gIEBxdWVyeSgnI3JhaWwnKVxuICBwcml2YXRlIF9yYWlsOiBIVE1MRWxlbWVudDtcblxuICBAcHJvcGVydHkoeyB0eXBlOiBOdW1iZXIgfSkgdmFsdWU6IG51bWJlcjtcblxuICBAcHJvcGVydHkoeyB0eXBlOiBCb29sZWFuLCBhdHRyaWJ1dGU6ICdzdGVwLWxhYmVsJyB9KSBzdGVwTGFiZWwgPSBmYWxzZTtcblxuICBAcHJvcGVydHkoeyB0eXBlOiBCb29sZWFuIH0pIHJldmVyc2UgPSBmYWxzZTtcblxuICBwcml2YXRlIF9taW46IG51bWJlcjtcbiAgQHByb3BlcnR5KHsgdHlwZTogTnVtYmVyLCBhdHRyaWJ1dGU6ICdsb3dlci1ib3VuZCcgfSkgc2V0IG1pbih2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fbWluID0gdmFsdWU7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMuc3R5bGUuc2V0UHJvcGVydHkoJy0tbWluJywgYCR7dGhpcy5fbWlufWApO1xuICB9XG4gIGdldCBtaW4oKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fbWluO1xuICB9XG5cbiAgcHJpdmF0ZSBfbWF4OiBudW1iZXI7XG4gIEBwcm9wZXJ0eSh7IHR5cGU6IE51bWJlciwgYXR0cmlidXRlOiAndXBwZXItYm91bmQnIH0pIHNldCBtYXgodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX21heCA9IHZhbHVlO1xuICAgIHRoaXMuc3R5bGUuc2V0UHJvcGVydHkoJy0tbWF4JywgYCR7dGhpcy5fbWF4fWApO1xuICB9XG4gIGdldCBtYXgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fbWF4O1xuICB9XG5cbiAgcHJpdmF0ZSBfc3RlcDogbnVtYmVyO1xuICBAcHJvcGVydHkoeyB0eXBlOiBOdW1iZXIsIGF0dHJpYnV0ZTogJ3N0ZXAnIH0pIHNldCBzdGVwKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLl9zdGVwID0gdmFsdWU7XG4gICAgdGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1zdGVwJywgYCR7dGhpcy5fc3RlcH1gKTtcbiAgfVxuICBnZXQgc3RlcCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9zdGVwO1xuICB9XG5cbiAgQHdhdGNoKCdkaXNhYmxlZCcsIHsgd2FpdFVudGlsRmlyc3RVcGRhdGU6IHRydWUgfSlcbiAgX2hhbmRsZURpc2FibGVkQ2hhbmdlID0gKG9sZCwgZGlzYWJsZWQpID0+IHt9O1xuXG4gIEB3YXRjaCgncmVhZG9ubHknLCB7IHdhaXRVbnRpbEZpcnN0VXBkYXRlOiB0cnVlIH0pXG4gIF9oYW5kbGVSZWFkb25seUNoYW5nZSA9IChvbGQsIHJlYWRvbmx5KSA9PiB7fTtcblxuICByZXNldCgpIHtcbiAgICAvLyB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQuJyk7XG4gIH1cbiAgdmFsaWRhdGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvLyBzdGF0aWMgc2hhZG93Um9vdE9wdGlvbnM6IFNoYWRvd1Jvb3RJbml0ID0geyAuLi5MaXRFbGVtZW50LnNoYWRvd1Jvb3RPcHRpb25zLCBkZWxlZ2F0ZXNGb2N1czogdHJ1ZSwgbW9kZTogJ29wZW4nIH07XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICAvKiB0aGUgY29tcHV0ZWQgc3R5bGUgaXMgYSBsaXZlIHByb3BlcnR5LCB3ZSB1c2UgdGhpcyB0byBnZXQgY3NzIHZhcmlhYmxlc1xuICAgIHNlZSByZW5kZXIgdGVtcGxhdGUgKi9cbiAgICB0aGlzLmNzTGl2ZSA9IGdldENvbXB1dGVkU3R5bGUodGhpcyk7XG4gIH1cblxuICBzZXQgcmVzcG9uc2UobXlSZXNwb25zZTogc3RyaW5nIHwgc3RyaW5nW10pIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShteVJlc3BvbnNlKSkge1xuICAgICAgY29uc29sZS5lcnJvcignUXRpU2xpZGVySW50ZXJhY3Rpb246IHJlc3BvbnNlIGlzIGFuIGFycmF5LCBidXQgc2hvdWxkIGJlIGEgc2luZ2xlIHZhbHVlJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHZhbHVlID0gcGFyc2VJbnQobXlSZXNwb25zZSk7XG4gICAgaWYgKE51bWJlci5pc05hTih2YWx1ZSkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1F0aVNsaWRlckludGVyYWN0aW9uOiByZXNwb25zZSBpcyBub3QgYSBudW1iZXInKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICB9XG5cbiAgc3RhdGljIG92ZXJyaWRlIHN0eWxlcyA9IFtjc3NgYF07XG5cbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIC8vIGNvbnZlcnQgdGhlIHZhbHVlLCB3aGljaCBpcyB0aGUgcmVhbCBzbGlkZXIgdmFsdWUgdG8gYSBwZXJjZW50YWdlIGZvciB0aGUgZG9tLlxuICAgIHRoaXMudmFsdWUgPCB0aGlzLm1pbiAmJiAodGhpcy52YWx1ZSA9IHRoaXMubWluKTtcbiAgICB0aGlzLnZhbHVlID4gdGhpcy5tYXggJiYgKHRoaXMudmFsdWUgPSB0aGlzLm1heCk7XG4gICAgY29uc3QgdmFsdWVQZXJjZW50YWdlID0gKCh0aGlzLnZhbHVlIC0gdGhpcy5taW4pIC8gKHRoaXMubWF4IC0gdGhpcy5taW4pKSAqIDEwMDtcbiAgICB0aGlzLnN0eWxlLnNldFByb3BlcnR5KCctLXZhbHVlLXBlcmNlbnRhZ2UnLCBgJHt2YWx1ZVBlcmNlbnRhZ2V9JWApO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKCdhcmlhLXZhbHVlbm93JywgdGhpcy52YWx1ZS50b1N0cmluZygpKTtcblxuICAgIHJldHVybiBodG1sYDxzbG90IG5hbWU9XCJwcm9tcHRcIj48L3Nsb3Q+XG4gICAgICA8ZGl2IGlkPVwic2xpZGVyXCIgcGFydD1cInNsaWRlclwiPlxuICAgICAgICAke3RoaXMuY3NMaXZlLmdldFByb3BlcnR5VmFsdWUoJy0tc2hvdy1ib3VuZHMnKSA9PSAndHJ1ZSdcbiAgICAgICAgICA/IGh0bWxgPGRpdiBpZD1cImJvdW5kc1wiIHBhcnQ9XCJib3VuZHNcIj5cbiAgICAgICAgICAgICAgPGRpdj4ke3RoaXMuX21pbn08L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdj4ke3RoaXMuX21heH08L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PmBcbiAgICAgICAgICA6IG5vdGhpbmd9XG4gICAgICAgICR7dGhpcy5jc0xpdmUuZ2V0UHJvcGVydHlWYWx1ZSgnLS1zaG93LXRpY2tzJykgPT0gJ3RydWUnID8gaHRtbGA8ZGl2IGlkPVwidGlja3NcIiBwYXJ0PVwidGlja3NcIj48L2Rpdj5gIDogbm90aGluZ31cbiAgICAgICAgPGRpdiBpZD1cInJhaWxcIiBwYXJ0PVwicmFpbFwiIEBtb3VzZWRvd249JHt0aGlzLl9vbk1vdXNlRG93bn0gQHRvdWNoc3RhcnQ9JHt0aGlzLl9vblRvdWNoTW92ZX0+XG4gICAgICAgICAgPGRpdiBpZD1cImtub2JcIiBwYXJ0PVwia25vYlwiPlxuICAgICAgICAgICAgJHt0aGlzLmNzTGl2ZS5nZXRQcm9wZXJ0eVZhbHVlKCctLXNob3ctdmFsdWUnKSA9PSAndHJ1ZSdcbiAgICAgICAgICAgICAgPyBodG1sYDxkaXYgaWQ9XCJ2YWx1ZVwiIHBhcnQ9XCJ2YWx1ZVwiPiR7dGhpcy52YWx1ZX08L2Rpdj5gXG4gICAgICAgICAgICAgIDogbm90aGluZ31cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5gO1xuICB9XG5cbiAgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICB0aGlzLnN0ZXAgPSAxO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKCd0YWJpbmRleCcsICcwJyk7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoJ3JvbGUnLCAnc2xpZGVyJyk7XG4gIH1cblxuICBwcml2YXRlIF9vblRvdWNoTW92ZShldmVudCkge1xuICAgIGNvbnN0IGhhbmRsZVRvdWNoTW92ZSA9IGV2ZW50ID0+IHtcbiAgICAgIGNvbnN0IHsgeCB9ID0gdGhpcy5nZXRQb3NpdGlvbkZyb21FdmVudChldmVudCk7XG4gICAgICBjb25zdCBkaWZmWCA9IHggLSB0aGlzLl9yYWlsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQgLSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdDtcbiAgICAgIHRoaXMuY2FsY3VsYXRlVmFsdWUoZGlmZlgpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfTtcblxuICAgIGNvbnN0IGhhbmRsZVRvdWNoRW5kID0gKCkgPT4ge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgaGFuZGxlVG91Y2hNb3ZlKTtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgaGFuZGxlVG91Y2hFbmQpO1xuXG4gICAgICB0aGlzLnNhdmVSZXNwb25zZSh0aGlzLnZhbHVlLnRvU3RyaW5nKCkpO1xuICAgIH07XG5cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCBoYW5kbGVUb3VjaE1vdmUpO1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgaGFuZGxlVG91Y2hFbmQpO1xuXG4gICAgY29uc3QgeyB4IH0gPSB0aGlzLmdldFBvc2l0aW9uRnJvbUV2ZW50KGV2ZW50KTtcbiAgICBjb25zdCBkaWZmWCA9IHggLSB0aGlzLl9yYWlsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQgLSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdDtcbiAgICB0aGlzLmNhbGN1bGF0ZVZhbHVlKGRpZmZYKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgfVxuXG4gIHByaXZhdGUgX29uTW91c2VEb3duKGV2ZW50KSB7XG4gICAgY29uc3QgaGFuZGxlTW91c2VNb3ZlID0gKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAvLyBpZiB0aGUgcXRpLXNsaWRlci1pbnRlcmFjdGlvbiBoYXMgYW4gYWJzb2x1dGUgbGVmdCBwb3NpdGlvbiBhbmQgYm9keSBpcyBzY3JvbGxlZCBhIGJpdCwgdGFrZSBhY2NvdW50IGZvciB0aGF0XG4gICAgICBjb25zdCBkaWZmWCA9IGV2ZW50LnBhZ2VYIC0gdGhpcy5fcmFpbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0IC0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnQ7XG5cbiAgICAgIHRoaXMuY2FsY3VsYXRlVmFsdWUoZGlmZlgpO1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH07XG5cbiAgICBjb25zdCBoYW5kbGVNb3VzZVVwID0gKCkgPT4ge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgaGFuZGxlTW91c2VNb3ZlKTtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCBoYW5kbGVNb3VzZVVwKTtcblxuICAgICAgdGhpcy5zYXZlUmVzcG9uc2UodGhpcy52YWx1ZS50b1N0cmluZygpKTtcbiAgICB9O1xuXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgaGFuZGxlTW91c2VNb3ZlKTtcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgaGFuZGxlTW91c2VVcCk7XG5cbiAgICAvLyBpZiB0aGUgcXRpLXNsaWRlci1pbnRlcmFjdGlvbiBoYXMgYW4gYWJzb2x1dGUgbGVmdCBwb3NpdGlvbiBhbmQgYm9keSBpcyBzY3JvbGxlZCBhIGJpdCwgdGFrZSBhY2NvdW50IGZvciB0aGF0XG4gICAgY29uc3QgZGlmZlggPSBldmVudC5wYWdlWCAtIHRoaXMuX3JhaWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCAtIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0O1xuXG4gICAgdGhpcy5jYWxjdWxhdGVWYWx1ZShkaWZmWCk7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgfVxuXG4gIC8qKiBjYWxjdWxhdGVWYWx1ZSBnZXRzIHggcG9zaXRpb24gYW5kIGNvbXBhcmVzIHRoaXMgd2l0aCB0aGUgdG90YWwgd2lkdGggaW4gcGl4ZWxzICovXG4gIHByaXZhdGUgY2FsY3VsYXRlVmFsdWUoZGlmZlg6IG51bWJlcikge1xuICAgIGNvbnN0IHZhbHVlTm93ID0gdGhpcy5taW4gKyAoKHRoaXMubWF4IC0gdGhpcy5taW4pICogZGlmZlgpIC8gdGhpcy5fcmFpbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcbiAgICBjb25zdCByb3VuZGVkU3RlcFZhbHVlID0gdGhpcy5taW4gKyBNYXRoLnJvdW5kKCh2YWx1ZU5vdyAtIHRoaXMubWluKSAvIHRoaXMuX3N0ZXApICogdGhpcy5fc3RlcDtcbiAgICB0aGlzLnZhbHVlID0gcm91bmRlZFN0ZXBWYWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UG9zaXRpb25Gcm9tRXZlbnQoZTogYW55KToge1xuICAgIHg6IG51bWJlcjtcbiAgICB5OiBudW1iZXI7XG4gIH0ge1xuICAgIGxldCBfdG91Y2hNb3ZlO1xuICAgIGlmIChlLnR5cGUgPT0gJ3RvdWNoc3RhcnQnIHx8IGUudHlwZSA9PSAndG91Y2htb3ZlJyB8fCBlLnR5cGUgPT0gJ3RvdWNoZW5kJyB8fCBlLnR5cGUgPT0gJ3RvdWNoY2FuY2VsJykge1xuICAgICAgY29uc3QgZXZ0ID0gdHlwZW9mIGUub3JpZ2luYWxFdmVudCA9PT0gJ3VuZGVmaW5lZCcgPyBlIDogZS5vcmlnaW5hbEV2ZW50O1xuICAgICAgY29uc3QgdG91Y2ggPSBldnQudG91Y2hlc1swXSB8fCBldnQuY2hhbmdlZFRvdWNoZXNbMF07XG4gICAgICBfdG91Y2hNb3ZlID0ge1xuICAgICAgICB4OiB0b3VjaC5wYWdlWCxcbiAgICAgICAgeTogdG91Y2gucGFnZVlcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIGUudHlwZSA9PSAnbW91c2Vkb3duJyB8fFxuICAgICAgZS50eXBlID09ICdtb3VzZXVwJyB8fFxuICAgICAgZS50eXBlID09ICdtb3VzZW1vdmUnIHx8XG4gICAgICBlLnR5cGUgPT0gJ21vdXNlb3ZlcicgfHxcbiAgICAgIGUudHlwZSA9PSAnbW91c2VvdXQnIHx8XG4gICAgICBlLnR5cGUgPT0gJ21vdXNlZW50ZXInIHx8XG4gICAgICBlLnR5cGUgPT0gJ21vdXNlbGVhdmUnXG4gICAgKSB7XG4gICAgICBfdG91Y2hNb3ZlID0ge1xuICAgICAgICB4OiBlLmNsaWVudFgsXG4gICAgICAgIHk6IGUuY2xpZW50WVxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIF90b3VjaE1vdmU7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLXNsaWRlci1pbnRlcmFjdGlvbic6IFF0aVNsaWRlckludGVyYWN0aW9uO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgY29uc3VtZSB9IGZyb20gJ0BsaXQvY29udGV4dCc7XG5pbXBvcnQgeyBMaXRFbGVtZW50LCBodG1sIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQsIHN0YXRlIH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgQ2FsY3VsYXRlIH0gZnJvbSAnLi4vaW50ZXJuYWwvZXhwcmVzc2lvbi1yZXN1bHQnO1xuaW1wb3J0IHsgUmVzcG9uc2VWYXJpYWJsZSB9IGZyb20gJy4uL2ludGVybmFsL3ZhcmlhYmxlcyc7XG5pbXBvcnQgeyBJdGVtQ29udGV4dCwgaXRlbUNvbnRleHQgfSBmcm9tICcuLi9xdGktYXNzZXNzbWVudC1pdGVtL3F0aS1hc3Nlc3NtZW50LWl0ZW0uY29udGV4dCc7XG5cbi8qKlxuICogaHR0cHM6Ly93d3cuaW1zZ2xvYmFsLm9yZy9zcGVjL3F0aS92M3AwL2ltcGwjaC5maTI5cThkdWJqZ3dcbiAqIDxxdGktY3VzdG9tLW9wZXJhdG9yIGNsYXNzPVwianMub3JnXCI+XG4gICAgICAgIDxxdGktYmFzZS12YWx1ZSBiYXNlLXR5cGU9XCJzdHJpbmdcIj48IVtDREFUQVtcbiAgICAgICAgICBjb25zb2xlLmxvZyhjb250ZXh0LnZhcmlhYmxlcyk7XG4gICAgICAgICAgcmV0dXJuICdCJ1xuICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ3F0aS1lbmQtYXR0ZW1wdC1pbnRlcmFjdGlvbicpLmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICBdXT48L3F0aS1iYXNlLXZhbHVlPlxuICAgICAgPC9xdGktY3VzdG9tLW9wZXJhdG9yPlxuICAgIDwvcXRpLXNldC1vdXRjb21lLXZhbHVlPlxuICovXG5AY3VzdG9tRWxlbWVudCgncXRpLWN1c3RvbS1vcGVyYXRvcicpXG5leHBvcnQgY2xhc3MgUXRpQ3VzdG9tT3BlcmF0b3IgZXh0ZW5kcyBMaXRFbGVtZW50IGltcGxlbWVudHMgQ2FsY3VsYXRlIHtcbiAgcHJpdmF0ZSBvcGVyYXRvckZ1bmN0aW9uOiBGdW5jdGlvbjtcblxuICBAY29uc3VtZSh7IGNvbnRleHQ6IGl0ZW1Db250ZXh0LCBzdWJzY3JpYmU6IHRydWUgfSlcbiAgQHN0YXRlKClcbiAgcHJpdmF0ZSBfY29udGV4dD86IEl0ZW1Db250ZXh0O1xuXG4gIHJlbmRlcigpIHtcbiAgICByZXR1cm4gaHRtbGA8c2xvdCBAc2xvdGNoYW5nZT0ke3RoaXMuaGFuZGxlU2xvdENoYW5nZX0+PC9zbG90PmA7XG4gIH1cblxuICBoYW5kbGVTbG90Q2hhbmdlKGV2ZW50OiBFdmVudCkge1xuICAgIC8vIGV4cGVjdGluZyA8WyFDREFUQVsgLi4uIF1dPiBpcyBjb252ZXJ0ZWQgaW50byA8IS0tIC4uLiAtLT4gd2l0aCBxdGktdHJhbnNmb3JtOiBjRGF0YVRvQ29tbWVudFxuICAgIGNvbnN0IGNvbW1lbnROb2RlID0gQXJyYXkuZnJvbSh0aGlzLmZpcnN0RWxlbWVudENoaWxkPy5jaGlsZE5vZGVzID8/IFtdKS5maW5kKFxuICAgICAgbm9kZSA9PiBub2RlLm5vZGVUeXBlID09PSBOb2RlLkNPTU1FTlRfTk9ERVxuICAgICk7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMub3BlcmF0b3JGdW5jdGlvbiA9IG5ldyBGdW5jdGlvbignY29udGV4dCcsICdmbicsICdpdGVtJywgY29tbWVudE5vZGUudGV4dENvbnRlbnQgPz8gJycpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ2N1c3RvbS1vcGVyYXRvciBjb250YWlucyBpbnZhbGlkIGphdmFzY3JpcHQgY29kZScsIGUpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBjYWxjdWxhdGUoKSB7XG4gICAgY29uc3QgZm4gPSB7XG4gICAgICB2YXJpYWJsZTogKHJlc3BvbnNlSWRlbnRpZmllcjogc3RyaW5nKSA9PlxuICAgICAgICB0aGlzLl9jb250ZXh0Py52YXJpYWJsZXMuZmluZCh2ID0+IHYuaWRlbnRpZmllciA9PT0gcmVzcG9uc2VJZGVudGlmaWVyKT8udmFsdWUgPz8gJycsXG4gICAgICBjb3JyZWN0OiAocmVzcG9uc2VJZGVudGlmaWVyOiBzdHJpbmcpID0+XG4gICAgICAgICh0aGlzLl9jb250ZXh0Py52YXJpYWJsZXMuZmluZCh2ID0+IHYuaWRlbnRpZmllciA9PT0gcmVzcG9uc2VJZGVudGlmaWVyKSBhcyBSZXNwb25zZVZhcmlhYmxlKVxuICAgICAgICAgID8uY29ycmVjdFJlc3BvbnNlID8/ICcnXG4gICAgfTtcbiAgICBjb25zdCBpdGVtID0ge1xuICAgICAgZ2V0VmFyaWFibGU6ICh2YXJpYWJsZUlkZW50aWZpZXI6IHN0cmluZykgPT5cbiAgICAgICAgdGhpcy5fY29udGV4dD8udmFyaWFibGVzLmZpbmQodiA9PiB2LmlkZW50aWZpZXIgPT09IHZhcmlhYmxlSWRlbnRpZmllciksXG4gICAgICB1cGRhdGVPdXRjb21lVmFyaWFibGU6IChvdXRjb21lSWRlbnRpZmllcjogc3RyaW5nLCB2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10pID0+IHtcbiAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgIG5ldyBDdXN0b21FdmVudDx7IG91dGNvbWVJZGVudGlmaWVyOiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfCBzdHJpbmdbXSB9PigncXRpLXNldC1vdXRjb21lLXZhbHVlJywge1xuICAgICAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgICAgIGNvbXBvc2VkOiB0cnVlLFxuICAgICAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgICAgIG91dGNvbWVJZGVudGlmaWVyLFxuICAgICAgICAgICAgICB2YWx1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgICAgdXBkYXRlUmVzcG9uc2VWYXJpYWJsZTogKHJlc3BvbnNlSWRlbnRpZmllcjogc3RyaW5nLCByZXNwb25zZTogc3RyaW5nIHwgc3RyaW5nW10pID0+IHtcbiAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgIG5ldyBDdXN0b21FdmVudDx7IHJlc3BvbnNlSWRlbnRpZmllcjogc3RyaW5nOyByZXNwb25zZTogc3RyaW5nIHwgc3RyaW5nW10gfT4oJ3F0aS1pbnRlcmFjdGlvbi1yZXNwb25zZScsIHtcbiAgICAgICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgICAgICBjb21wb3NlZDogdHJ1ZSxcbiAgICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgICByZXNwb25zZUlkZW50aWZpZXIsXG4gICAgICAgICAgICAgIHJlc3BvbnNlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIHRoaXMub3BlcmF0b3JGdW5jdGlvbih0aGlzLl9jb250ZXh0LCBmbiwgaXRlbSk7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLWN1c3RvbS1vcGVyYXRvcic6IFF0aUN1c3RvbU9wZXJhdG9yO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgTGl0RWxlbWVudCwgY3NzLCBodG1sIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5cbkBjdXN0b21FbGVtZW50KCdxdGktYXNzb2NpYWJsZS1ob3RzcG90JylcbmV4cG9ydCBjbGFzcyBRdGlBc3NvY2lhYmxlSG90c3BvdCBleHRlbmRzIExpdEVsZW1lbnQge1xuICBzdGF0aWMgc3R5bGVzID0gY3NzYFxuICAgIDpob3N0IHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB9XG4gIGA7XG5cbiAgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcblxuICAgIHRoaXMuZGlzcGF0Y2hFdmVudChcbiAgICAgIG5ldyBDdXN0b21FdmVudCgncXRpLXJlZ2lzdGVyLWhvdHNwb3QnLCB7XG4gICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgIGNhbmNlbGFibGU6IGZhbHNlLFxuICAgICAgICBjb21wb3NlZDogdHJ1ZVxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYCA8c2xvdCBuYW1lPVwicXRpLWdhcC1pbWdcIj48L3Nsb3Q+IGA7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLWFzc29jaWFibGUtaG90c3BvdCc6IFF0aUFzc29jaWFibGVIb3RzcG90O1xuICB9XG59XG4iLCAiaW1wb3J0IHsgY3NzLCBodG1sLCBMaXRFbGVtZW50IH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQsIHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuXG5AY3VzdG9tRWxlbWVudCgncXRpLWdhcCcpXG5leHBvcnQgY2xhc3MgUXRpR2FwIGV4dGVuZHMgTGl0RWxlbWVudCB7XG4gIHN0YXRpYyBzdHlsZXMgPSBjc3NgXG4gICAgOmhvc3Qge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIHVzZXItc2VsZWN0OiBub25lO1xuICAgIH1cbiAgYDtcblxuICBAcHJvcGVydHkoeyB0eXBlOiBOdW1iZXIsIHJlZmxlY3Q6IHRydWUgfSkgdGFiaW5kZXg6IG51bWJlciB8IHVuZGVmaW5lZCA9IDA7XG5cbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYCA8c2xvdCBuYW1lPVwicXRpLWdhcC10ZXh0XCI+PC9zbG90PmA7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLWdhcCc6IFF0aUdhcDtcbiAgfVxufVxuIiwgImltcG9ydCB7IGNzcywgTGl0RWxlbWVudCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50LCBwcm9wZXJ0eSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcblxuQGN1c3RvbUVsZW1lbnQoJ3F0aS1nYXAtaW1nJylcbmV4cG9ydCBjbGFzcyBRdGlHYXBJbWcgZXh0ZW5kcyBMaXRFbGVtZW50IHtcbiAgc3RhdGljIHN0eWxlcyA9IGNzc2BcbiAgICA6aG9zdCB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7XG4gICAgfVxuICBgO1xuXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IE51bWJlciwgcmVmbGVjdDogdHJ1ZSB9KSB0YWJpbmRleDogbnVtYmVyIHwgdW5kZWZpbmVkID0gMDtcblxuICBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZSgnc2xvdCcsICdxdGktZ2FwLWltZycpO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1nYXAtaW1nJzogUXRpR2FwSW1nO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgY3NzLCBodG1sLCBMaXRFbGVtZW50IH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQsIHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuXG5AY3VzdG9tRWxlbWVudCgncXRpLWdhcC10ZXh0JylcbmV4cG9ydCBjbGFzcyBRdGlHYXBUZXh0IGV4dGVuZHMgTGl0RWxlbWVudCB7XG4gIHN0YXRpYyBzdHlsZXMgPSBjc3NgXG4gICAgOmhvc3Qge1xuICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gICAgICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgICB9XG4gIGA7XG5cbiAgQHByb3BlcnR5KHsgdHlwZTogTnVtYmVyLCByZWZsZWN0OiB0cnVlIH0pIHRhYmluZGV4OiBudW1iZXIgfCB1bmRlZmluZWQgPSAwO1xuXG4gIG92ZXJyaWRlIGNvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xuICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoJ3Nsb3QnLCAncXRpLWdhcC10ZXh0Jyk7XG4gIH1cblxuICBvdmVycmlkZSByZW5kZXIoKSB7XG4gICAgcmV0dXJuIGh0bWxgPHNsb3Q+PC9zbG90PmA7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLWdhcC10ZXh0JzogUXRpR2FwVGV4dDtcbiAgfVxufVxuIiwgImltcG9ydCB7IGNzcyB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50LCBwcm9wZXJ0eSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IFF0aUNob2ljZSB9IGZyb20gJy4vaW50ZXJuYWwvY2hvaWNlL3F0aS1jaG9pY2UnO1xuXG4vLyB0eXBlIHNoYXBlID0geyBzaGFwZTogJ3JlY3QnIHwgJ2NpcmNsZScgfCAncG9seSc7IGNvb3JkczogbnVtYmVyW10gfTtcblxuQGN1c3RvbUVsZW1lbnQoJ3F0aS1ob3RzcG90LWNob2ljZScpXG5leHBvcnQgY2xhc3MgUXRpSG90c3BvdENob2ljZSBleHRlbmRzIFF0aUNob2ljZSB7XG4gIHN0YXRpYyBzdHlsZXMgPSBjc3NgXG4gICAgOmhvc3Qge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIHVzZXItc2VsZWN0OiBub25lO1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIH1cbiAgYDtcbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAnYXJpYS1vcmRlcnZhbHVlJywgdHlwZTogTnVtYmVyLCByZWZsZWN0OiB0cnVlIH0pIG9yZGVyOiBudW1iZXI7XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1ob3RzcG90LWNob2ljZSc6IFF0aUhvdHNwb3RDaG9pY2U7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBjc3MsIGh0bWwgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IFF0aUNob2ljZSB9IGZyb20gJy4vaW50ZXJuYWwvY2hvaWNlL3F0aS1jaG9pY2UnO1xuXG5AY3VzdG9tRWxlbWVudCgncXRpLWhvdHRleHQnKVxuZXhwb3J0IGNsYXNzIFF0aUhvdHRleHQgZXh0ZW5kcyBRdGlDaG9pY2Uge1xuICBzdGF0aWMgc3R5bGVzID0gY3NzYFxuICAgIDpob3N0IHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgICB9XG4gIGA7XG5cbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYDxkaXYgcGFydD1cImNoXCI+PGRpdiBwYXJ0PVwiY2hhXCI+PC9kaXY+PC9kaXY+XG4gICAgICA8c2xvdD48L3Nsb3Q+IGA7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLWhvdHRleHQnOiBRdGlIb3R0ZXh0O1xuICB9XG59XG4iLCAiaW1wb3J0IHsgY3NzLCBodG1sLCBMaXRFbGVtZW50IH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQsIHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuXG5AY3VzdG9tRWxlbWVudCgncXRpLWlubGluZS1jaG9pY2UnKVxuZXhwb3J0IGNsYXNzIFF0aUlubGluZUNob2ljZSBleHRlbmRzIExpdEVsZW1lbnQge1xuICBzdGF0aWMgb3ZlcnJpZGUgZ2V0IHN0eWxlcygpIHtcbiAgICByZXR1cm4gW1xuICAgICAgY3NzYFxuICAgICAgICA6aG9zdCB7XG4gICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICB9XG4gICAgICBgXG4gICAgXTtcbiAgfVxuXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZyB9KVxuICBpZGVudGlmaWVyOiBzdHJpbmc7XG5cbiAgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcblxuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLl9vblNlbGVjdElubGluZUNob2ljZSk7XG5cbiAgICB0aGlzLmRpc3BhdGNoRXZlbnQoXG4gICAgICBuZXcgQ3VzdG9tRXZlbnQoJ3F0aS1pbmxpbmUtY2hvaWNlLXJlZ2lzdGVyJywge1xuICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICBjYW5jZWxhYmxlOiBmYWxzZSxcbiAgICAgICAgY29tcG9zZWQ6IHRydWVcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIG92ZXJyaWRlIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLl9vblNlbGVjdElubGluZUNob2ljZSk7XG4gIH1cblxuICBvdmVycmlkZSByZW5kZXIoKSB7XG4gICAgcmV0dXJuIGh0bWxgIDxzbG90Pjwvc2xvdD4gYDtcbiAgfVxuXG4gIHByaXZhdGUgX29uU2VsZWN0SW5saW5lQ2hvaWNlKCkge1xuICAgIC8vIGlmICh0aGlzLmRpc2FibGVkIHx8IHRoaXMucmVhZG9ubHkpIHJldHVybjtcblxuICAgIHRoaXMuZGlzcGF0Y2hFdmVudChcbiAgICAgIG5ldyBDdXN0b21FdmVudCgncXRpLWlubGluZS1jaG9pY2Utc2VsZWN0Jywge1xuICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICBjYW5jZWxhYmxlOiBmYWxzZSxcbiAgICAgICAgY29tcG9zZWQ6IHRydWUsXG4gICAgICAgIGRldGFpbDogeyBpZGVudGlmaWVyOiB0aGlzLmlkZW50aWZpZXIgfVxuICAgICAgfSlcbiAgICApO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1pbmxpbmUtY2hvaWNlJzogUXRpSW5saW5lQ2hvaWNlO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgY3NzLCBodG1sLCBub3RoaW5nIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQsIHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgUXRpQ2hvaWNlIH0gZnJvbSAnLi9pbnRlcm5hbC9jaG9pY2UvcXRpLWNob2ljZSc7XG5cbi8qKlxuICogQHN1bW1hcnkgU2hvcnQgc3VtbWFyeSBvZiB0aGUgY29tcG9uZW50J3MgaW50ZW5kZWQgdXNlLlxuICogQGRvY3VtZW50YXRpb24gaHR0cHM6Ly93d3cuaW1zZ2xvYmFsLm9yZy9zcGVjL3F0aS92M3AwL2ltcGwjaC5qOW51MW9hMXR1M2JcbiAqIEBzdGF0dXMgc3RhYmxlXG4gKiBAc2luY2UgNC4wXG4gKlxuICogQGV2ZW50IHF0aS1jaG9pY2UtZWxlbWVudC1zZWxlY3RlZCAtIEVtaXR0ZWQgd2hlbiBhIGNob2ljZSBpcyBzZWxlY3RlZC5cbiAqIEBldmVudCBxdGktcmVnaXN0ZXItY2hvaWNlIC0gRW1pdHRlZCB3aGVuIGFuIGNob2ljZSBpcyBhZGRlZFxuICogQGV2ZW50IHF0aS1sb29zZS1jaG9pY2UgLSBFbWl0dGVkIHdoZW4gYSBjaG9pY2UgaXMgcmVtb3ZlZFxuICpcbiAqIEBzbG90IC0gVGhlIGRlZmF1bHQgc2xvdC5cbiAqL1xuQGN1c3RvbUVsZW1lbnQoJ3F0aS1zaW1wbGUtY2hvaWNlJylcbmV4cG9ydCBjbGFzcyBRdGlTaW1wbGVDaG9pY2UgZXh0ZW5kcyBRdGlDaG9pY2Uge1xuICBzdGF0aWMgc3R5bGVzID0gY3NzYFxuICAgIDpob3N0IHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgICB9XG4gICAgc2xvdCB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIH1cbiAgICBbcGFydD0nY2gnXSB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleC1zaHJpbms6IDA7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgfVxuICBgO1xuXG4gIC8vIHByb3BlcnR5IGxhYmVsXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZywgYXR0cmlidXRlOiBmYWxzZSB9KVxuICBwdWJsaWMgbWFya2VyOiBzdHJpbmc7XG5cbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYDxkaXYgcGFydD1cImNoXCI+XG4gICAgICAgIDxkaXYgcGFydD1cImNoYVwiPjwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICAke3RoaXMubWFya2VyID8gaHRtbGA8ZGl2IGlkPVwibGFiZWxcIj4ke3RoaXMubWFya2VyfTwvZGl2PmAgOiBub3RoaW5nfVxuICAgICAgPHNsb3QgcGFydD1cInNsb3RcIj48L3Nsb3Q+IGA7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLXNpbXBsZS1jaG9pY2UnOiBRdGlTaW1wbGVDaG9pY2U7XG4gIH1cbn1cbiIsICIvKiBvbmx5IGV4cG9ydGVkIHRvIG92ZXJyaWRlIG9yIGV4dGVuZCBmb3Igc3BlY2lmaWMgcHVycG9zZXMgKi9cbmV4cG9ydCAqIGZyb20gJy4vaW50ZXJuYWwvZXZlbnQtdHlwZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9pbnRlcm5hbC9ldmVudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9pbnRlcm5hbC9leHByZXNzaW9uLXJlc3VsdCc7XG5leHBvcnQgKiBmcm9tICcuL2ludGVybmFsL3ZhcmlhYmxlcyc7XG4vKiBvbmx5IGV4cG9ydGVkIHRvIG92ZXJyaWRlIG9yIGV4dGVuZCBmb3Igc3BlY2lmaWMgcHVycG9zZXMgKi9cbmV4cG9ydCAqIGZyb20gJy4vcXRpLWFzc2Vzc21lbnQtaXRlbS9xdGktYXNzZXNzbWVudC1pdGVtJztcbmV4cG9ydCAqIGZyb20gJy4vcXRpLWFzc2Vzc21lbnQtc3RpbXVsdXMtcmVmL3F0aS1hc3Nlc3NtZW50LXN0aW11bHVzLXJlZic7XG5leHBvcnQgKiBmcm9tICcuL3F0aS1pbnRlcmFjdGlvbi9pbnRlcm5hbC9jaG9pY2UvcXRpLWNob2ljZSc7XG5leHBvcnQgKiBmcm9tICcuL3F0aS1pdGVtLWJvZHkvcXRpLWl0ZW0tYm9keSc7XG5leHBvcnQgKiBmcm9tICcuL3F0aS1wcm9tcHQvcXRpLXByb21wdCc7XG5leHBvcnQgKiBmcm9tICcuL3F0aS1zdHlsZXNoZWV0L3F0aS1zdHlsZXNoZWV0Jztcbi8qIHN0YXJ0IHJlc3BvbnNlIGFuZCBvdXRjb21lICovXG5leHBvcnQgKiBmcm9tICcuL3F0aS12YXJpYWJsZS1kZWNsYXJhdGlvbi9xdGktb3V0Y29tZS1kZWNsYXJhdGlvbi9xdGktb3V0Y29tZS1kZWNsYXJhdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL3F0aS12YXJpYWJsZS1kZWNsYXJhdGlvbi9xdGktcmVzcG9uc2UtZGVjbGFyYXRpb24vcXRpLXJlc3BvbnNlLWRlY2xhcmF0aW9uJztcbi8qIGVuZCByZXNwb25zZSBhbmQgb3V0Y29tZSAqL1xuZXhwb3J0ICogZnJvbSAnLi9xdGktY29tcGFuaW9uLW1hdGVyaWFscy1pbmZvL3F0aS1jb21wYW5pb24tbWF0ZXJpYWxzLWluZm8nO1xuZXhwb3J0ICogZnJvbSAnLi9xdGktcnVicmljLWJsb2NrL3F0aS1jb250ZW50LWJvZHknO1xuZXhwb3J0ICogZnJvbSAnLi9xdGktcnVicmljLWJsb2NrL3F0aS1ydWJyaWMtYmxvY2snO1xuLyogc3RhcnQgZmVlZGJhY2sgKi9cbmV4cG9ydCAqIGZyb20gJy4vcXRpLWZlZWRiYWNrL3F0aS1mZWVkYmFjay1ibG9jay9xdGktZmVlZGJhY2stYmxvY2snO1xuZXhwb3J0ICogZnJvbSAnLi9xdGktZmVlZGJhY2svcXRpLWZlZWRiYWNrLWlubGluZS9xdGktZmVlZGJhY2staW5saW5lJztcbmV4cG9ydCAqIGZyb20gJy4vcXRpLWZlZWRiYWNrL3F0aS1tb2RhbC1mZWVkYmFjay9xdGktbW9kYWwtZmVlZGJhY2snO1xuLyogZW5kIGZlZWRiYWNrICovXG4vKiBzdGFydCB0ZXh0ZW50cnlpbnRlcmFjdGlvbiAqL1xuZXhwb3J0ICogZnJvbSAnLi9xdGktaW50ZXJhY3Rpb24vcXRpLWV4dGVuZGVkLXRleHQtaW50ZXJhY3Rpb24vcXRpLWV4dGVuZGVkLXRleHQtaW50ZXJhY3Rpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9xdGktaW50ZXJhY3Rpb24vcXRpLXRleHQtZW50cnktaW50ZXJhY3Rpb24vcXRpLXRleHQtZW50cnktaW50ZXJhY3Rpb24nO1xuLyogZW5kIHRleHRlbnRyeWludGVyYWN0aW9uICovXG4vKiBzdGFydCBob3R0ZXh0ICovXG5leHBvcnQgKiBmcm9tICcuL3F0aS1pbnRlcmFjdGlvbi9xdGktaG90dGV4dC1pbnRlcmFjdGlvbi9xdGktaG90dGV4dC1pbnRlcmFjdGlvbic7XG4vKiBlbmQgaG90dGV4dCAqL1xuLyogc3RhcnQgaW5saW5lY2hvaWNlICovXG5leHBvcnQgKiBmcm9tICcuL3F0aS1pbnRlcmFjdGlvbi9xdGktaW5saW5lLWNob2ljZS1pbnRlcmFjdGlvbi9xdGktaW5saW5lLWNob2ljZS1pbnRlcmFjdGlvbic7XG4vKiBlbmQgaW5saW5lY2hvaWNlICovXG4vKiBzdGFydCBjaG9pY2VpbnRlcmFjdGlvbiAqL1xuZXhwb3J0ICogZnJvbSAnLi9xdGktaW50ZXJhY3Rpb24vcXRpLWNob2ljZS1pbnRlcmFjdGlvbi9xdGktY2hvaWNlLWludGVyYWN0aW9uJztcbi8qIGVuZCBjaG9pY2VpbnRlcmFjdGlvbiAqL1xuZXhwb3J0ICogZnJvbSAnLi9xdGktb3V0Y29tZS1wcm9jZXNzaW5nL3F0aS1vdXRjb21lLXByb2Nlc3NpbmcnO1xuZXhwb3J0ICogZnJvbSAnLi9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZyc7XG4vKiBzdGFydCBjdXN0b20gaW50ZXJhY3Rpb25zICovXG5leHBvcnQgKiBmcm9tICcuL3F0aS1pbnRlcmFjdGlvbi9xdGktcG9ydGFibGUtY3VzdG9tLWludGVyYWN0aW9uL3F0aS1wb3J0YWJsZS1jdXN0b20taW50ZXJhY3Rpb24nO1xuLyogZW5kIGN1c3RvbSBpbnRlcmFjdGlvbnMgKi9cbi8qIHN0YXJ0IG9ubHkgcHJldmlldyBpdGVtcyAqL1xuZXhwb3J0ICogZnJvbSAnLi9xdGktaW50ZXJhY3Rpb24vcXRpLWFzc29jaWF0ZS1pbnRlcmFjdGlvbi9xdGktYXNzb2NpYXRlLWludGVyYWN0aW9uJztcbmV4cG9ydCAqIGZyb20gJy4vcXRpLWludGVyYWN0aW9uL3F0aS1jdXN0b20taW50ZXJhY3Rpb24vcXRpLWN1c3RvbS1pbnRlcmFjdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL3F0aS1pbnRlcmFjdGlvbi9xdGktZW5kLWF0dGVtcHQtaW50ZXJhY3Rpb24vcXRpLWVuZC1hdHRlbXB0LWludGVyYWN0aW9uJztcbmV4cG9ydCAqIGZyb20gJy4vcXRpLWludGVyYWN0aW9uL3F0aS1nYXAtbWF0Y2gtaW50ZXJhY3Rpb24vcXRpLWdhcC1tYXRjaC1pbnRlcmFjdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL3F0aS1pbnRlcmFjdGlvbi9xdGktZ3JhcGhpYy1hc3NvY2lhdGUtaW50ZXJhY3Rpb24vcXRpLWdyYXBoaWMtYXNzb2NpYXRlLWludGVyYWN0aW9uJztcbmV4cG9ydCAqIGZyb20gJy4vcXRpLWludGVyYWN0aW9uL3F0aS1ncmFwaGljLWdhcC1tYXRjaC1pbnRlcmFjdGlvbi9xdGktZ3JhcGhpYy1nYXAtbWF0Y2gtaW50ZXJhY3Rpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9xdGktaW50ZXJhY3Rpb24vcXRpLWdyYXBoaWMtb3JkZXItaW50ZXJhY3Rpb24vcXRpLWdyYXBoaWMtb3JkZXItaW50ZXJhY3Rpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9xdGktaW50ZXJhY3Rpb24vcXRpLWhvdHNwb3QtaW50ZXJhY3Rpb24vcXRpLWhvdHNwb3QtaW50ZXJhY3Rpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9xdGktaW50ZXJhY3Rpb24vcXRpLW1hdGNoLWludGVyYWN0aW9uL3F0aS1tYXRjaC1pbnRlcmFjdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL3F0aS1pbnRlcmFjdGlvbi9xdGktbWVkaWEtaW50ZXJhY3Rpb24vcXRpLW1lZGlhLWludGVyYWN0aW9uJztcbmV4cG9ydCAqIGZyb20gJy4vcXRpLWludGVyYWN0aW9uL3F0aS1vcmRlci1pbnRlcmFjdGlvbi9xdGktb3JkZXItaW50ZXJhY3Rpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9xdGktaW50ZXJhY3Rpb24vcXRpLXBvc2l0aW9uLW9iamVjdC1pbnRlcmFjdGlvbi9xdGktcG9zaXRpb24tb2JqZWN0LWludGVyYWN0aW9uJztcbmV4cG9ydCAqIGZyb20gJy4vcXRpLWludGVyYWN0aW9uL3F0aS1wb3NpdGlvbi1vYmplY3QtaW50ZXJhY3Rpb24vcXRpLXBvc2l0aW9uLW9iamVjdC1zdGFnZSc7XG5leHBvcnQgKiBmcm9tICcuL3F0aS1pbnRlcmFjdGlvbi9xdGktc2VsZWN0LXBvaW50LWludGVyYWN0aW9uL3F0aS1zZWxlY3QtcG9pbnQtaW50ZXJhY3Rpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9xdGktaW50ZXJhY3Rpb24vcXRpLXNsaWRlci1pbnRlcmFjdGlvbi9xdGktc2xpZGVyLWludGVyYWN0aW9uJztcbi8qIGVuZCBvbmx5IHByZXZpZXcgaXRlbXMgKi9cbmV4cG9ydCAqIGZyb20gJy4vcXRpLWFzc2Vzc21lbnQtaXRlbS9xdGktYXNzZXNzbWVudC1pdGVtLmNvbnRleHQnO1xuZXhwb3J0ICogZnJvbSAnLi9xdGktY3VzdG9tLW9wZXJhdG9yL3F0aS1jdXN0b20tb3BlcmF0b3InO1xuZXhwb3J0ICogZnJvbSAnLi9xdGktaW50ZXJhY3Rpb24vaW50ZXJuYWwvaW50ZXJhY3Rpb24vaW50ZXJhY3Rpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9xdGktaW50ZXJhY3Rpb24vcXRpLWFzc29jaWFibGUtaG90c3BvdCc7XG5leHBvcnQgKiBmcm9tICcuL3F0aS1pbnRlcmFjdGlvbi9xdGktZ2FwJztcbmV4cG9ydCAqIGZyb20gJy4vcXRpLWludGVyYWN0aW9uL3F0aS1nYXAtaW1nJztcbmV4cG9ydCAqIGZyb20gJy4vcXRpLWludGVyYWN0aW9uL3F0aS1nYXAtdGV4dCc7XG5leHBvcnQgKiBmcm9tICcuL3F0aS1pbnRlcmFjdGlvbi9xdGktaG90c3BvdC1jaG9pY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9xdGktaW50ZXJhY3Rpb24vcXRpLWhvdHRleHQnO1xuZXhwb3J0ICogZnJvbSAnLi9xdGktaW50ZXJhY3Rpb24vcXRpLWlubGluZS1jaG9pY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9xdGktaW50ZXJhY3Rpb24vcXRpLXNpbXBsZS1hc3NvY2lhYmxlLWNob2ljZSc7XG5leHBvcnQgKiBmcm9tICcuL3F0aS1pbnRlcmFjdGlvbi9xdGktc2ltcGxlLWNob2ljZSc7XG5cbmNvbnNvbGUubG9nKFxuICAnJWNDXHUwMEJGVE8lY0xhYiVjOiBxdGktY29tcG9uZW50cyBsb2FkZWQnLFxuICAnZm9udC13ZWlnaHQ6Ym9sZDsgY29sb3I6Z3JlZW4nLFxuICAnZm9udC1mYW1pbHk6IFwiUFQgU2Fuc1wiLCBmb250LXdlaWdodDpib2xkOyBjb2xvcjpncmVlbjsgZm9udC1zaXplOiBzbWFsbGVyO3ZlcnRpY2FsLWFsaWduOiBzdWInLFxuICAnZm9udC13ZWlnaHQ6dW5zZXQnXG4pO1xuXG4vLyBjc3MgZm9yIGZvbnQgcHQtc2FucyBhbmQgc3Vic2NyaXB0IGFuZCBncmVlblxuIl0sCiAgIm1hcHBpbmdzIjogIitEQUFBLE9BQVMsV0FBQUEsT0FBZSxlQUN4QixPQUFTLGNBQUFDLEdBQVksUUFBQUMsT0FBWSxNQUNqQyxPQUFTLGlCQUFBQyxHQUFlLFlBQUFDLE1BQWdCLG9CQzJCakMsU0FBU0MsRUFBTUMsRUFBaUNDLEVBQXdCLENBQzdFLElBQU1DLEVBQTBDQyxFQUFBLENBQzlDLHFCQUFzQixJQUNuQkYsR0FFTCxNQUFPLENBQStCRyxFQUFrQkMsSUFBMEQsQ0FFaEgsR0FBTSxDQUFFLE9BQUFDLENBQU8sRUFBSUYsRUFDYkcsRUFBb0IsTUFBTSxRQUFRUCxDQUFZLEVBQUlBLEVBQWUsQ0FBQ0EsQ0FBWSxFQUdwRkksRUFBTSxPQUFTLFNBQTJCSSxFQUFnRSxDQUN4R0QsRUFBa0IsUUFBUUUsR0FBWSxDQUNwQyxJQUFNQyxFQUFNRCxFQUNaLEdBQUlELEVBQWEsSUFBSUUsQ0FBRyxFQUFHLENBQ3pCLElBQU1DLEVBQVdILEVBQWEsSUFBSUUsQ0FBRyxFQUMvQkUsRUFBVyxLQUFLRixDQUFHLEVBRXJCQyxJQUFhQyxJQUNYLENBQUNWLEVBQWdCLHNCQUF3QixLQUFLLGFBQy9DLEtBQUtHLENBQWUsRUFBK0JNLEVBQVVDLENBQVEsQ0FHNUUsQ0FDRixDQUFDLEVBRUROLEVBQU8sS0FBSyxLQUFNRSxDQUFZLENBQ2hDLENBQ0YsQ0FDRixDQzFEQSxPQUFTLGlCQUFBSyxPQUFxQixlQVN2QixJQUFNQyxHQUF1QixDQUNsQyxDQUNFLFdBQVksbUJBQ1os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QUEsaUNBRXhFLENBQ0YsRUE3QmFILEdBQ0osT0FBU0k7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFtQlRDLEVBQUEsQ0FETkMsR0FBUyxDQUFFLEtBQU0sT0FBUSxVQUFXLEVBQU0sQ0FBQyxHQW5CakNOLEdBb0JKLHNCQXBCSUEsR0FBTkssRUFBQSxDQURORSxHQUFjLG1CQUFtQixHQUNyQlAsSUN1RGIsUUFBUSxJQUNOLDBDQUNBLGdDQUNBLGdHQUNBLG1CQUNGIiwKICAibmFtZXMiOiBbInByb3ZpZGUiLCAiTGl0RWxlbWVudCIsICJodG1sIiwgImN1c3RvbUVsZW1lbnQiLCAicHJvcGVydHkiLCAid2F0Y2giLCAicHJvcGVydHlOYW1lIiwgIm9wdGlvbnMiLCAicmVzb2x2ZWRPcHRpb25zIiwgIl9fc3ByZWFkVmFsdWVzIiwgInByb3RvIiwgImRlY29yYXRlZEZuTmFtZSIsICJ1cGRhdGUiLCAid2F0Y2hlZFByb3BlcnRpZXMiLCAiY2hhbmdlZFByb3BzIiwgInByb3BlcnR5IiwgImtleSIsICJvbGRWYWx1ZSIsICJuZXdWYWx1ZSIsICJjcmVhdGVDb250ZXh0IiwgIml0ZW1Db250ZXh0VmFyaWFibGVzIiwgIml0ZW1Db250ZXh0IiwgIlF0aUFzc2Vzc21lbnRJdGVtIiwgIkxpdEVsZW1lbnQiLCAiXyIsICJkaXNhYmxlZCIsICJjaCIsICJyZWFkb25seSIsICJpdGVtQ29udGV4dFZhcmlhYmxlcyIsICJfX3NwcmVhZFByb3BzIiwgIl9fc3ByZWFkVmFsdWVzIiwgImZlZWRiYWNrRWxlbWVudCIsICJyZXNwb25zZUlkZW50aWZpZXIiLCAiY291bnRBdHRlbXB0IiwgIm91dGNvbWVJZGVudGlmaWVyIiwgInZhbHVlIiwgInYiLCAidmFyaWFibGUiLCAibWF0Y2hpbmdWYWx1ZSIsICJpbnRlcmFjdGlvbkVsZW1lbnQiLCAiZWwiLCAiZmUiLCAibXlSZXNwb25zZXMiLCAicmVzcG9uc2UiLCAiaW50ZXJhY3Rpb24iLCAiaSIsICJodG1sIiwgInNob3ciLCAicmVzcG9uc2VzIiwgInZhcmkiLCAiY3IiLCAiY291bnROdW1BdHRlbXB0cyIsICJfYSIsICJyZXNwb25zZVByb2Nlc3NvciIsICJpZGVudGlmaWVyIiwgImV2ZW50IiwgIm91dGNvbWVWYXJpYWJsZSIsICJuYW1lIiwgImRldGFpbCIsICJfX2RlY29yYXRlQ2xhc3MiLCAicHJvcGVydHkiLCAid2F0Y2giLCAicHJvdmlkZSIsICJpdGVtQ29udGV4dCIsICJjdXN0b21FbGVtZW50IiwgIkxpdEVsZW1lbnQiLCAiY3VzdG9tRWxlbWVudCIsICJwcm9wZXJ0eSIsICJRdGlBc3Nlc3NtZW50U3RpbXVsdXNSZWYiLCAiTGl0RWxlbWVudCIsICJldmVudCIsICJzdGltdWx1c1JlZiIsICJfYSIsICJwYXRoIiwgInN0aW11bHVzIiwgInF0aVRyYW5zZm9ybUl0ZW0iLCAiYXBpIiwgImVsZW1lbnRzIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJwcm9wZXJ0eSIsICJjdXN0b21FbGVtZW50IiwgIkxpdEVsZW1lbnQiLCAiaHRtbCIsICJwcm9wZXJ0eSIsICJLRVlDT0RFIiwgIlF0aUNob2ljZSIsICJMaXRFbGVtZW50IiwgIl8iLCAiZGlzYWJsZWQiLCAiZXZlbnQiLCAiaHRtbCIsICJfX2RlY29yYXRlQ2xhc3MiLCAicHJvcGVydHkiLCAidmFsdWUiLCAid2F0Y2giLCAiY3VzdG9tRWxlbWVudCIsICJodG1sIiwgIkxpdEVsZW1lbnQiLCAiY3NzIiwgInF0aV9pdGVtX2JvZHlfc3R5bGVzX2RlZmF1bHQiLCAiUXRpSXRlbUJvZHkiLCAiTGl0RWxlbWVudCIsICJodG1sIiwgInF0aV9pdGVtX2JvZHlfc3R5bGVzX2RlZmF1bHQiLCAiX19kZWNvcmF0ZUNsYXNzIiwgImN1c3RvbUVsZW1lbnQiLCAiaHRtbCIsICJMaXRFbGVtZW50IiwgImN1c3RvbUVsZW1lbnQiLCAiUXRpUHJvbXB0IiwgIkxpdEVsZW1lbnQiLCAiaHRtbCIsICJfX2RlY29yYXRlQ2xhc3MiLCAiY3VzdG9tRWxlbWVudCIsICJMaXRFbGVtZW50IiwgImN1c3RvbUVsZW1lbnQiLCAiUXRpU3R5bGVzaGVldCIsICJMaXRFbGVtZW50IiwgIl9jaGFuZ2VkUHJvcGVydGllcyIsICJpdGVtIiwgImxpbmsiLCAic3R5bGVzIiwgImVycm9yIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJjdXN0b21FbGVtZW50IiwgImNvbnN1bWUiLCAiY3NzIiwgImh0bWwiLCAiY3VzdG9tRWxlbWVudCIsICJwcm9wZXJ0eSIsICJzdGF0ZSIsICJodG1sIiwgIkxpdEVsZW1lbnQiLCAiY3VzdG9tRWxlbWVudCIsICJRdGlWYXJpYWJsZURlY2xhcmF0aW9uIiwgIkxpdEVsZW1lbnQiLCAiaHRtbCIsICJ2YXJpYWJsZSIsICJodG1sVmFsdWVzIiwgImRlZmF1bHRWYWx1ZXMiLCAibiIsICJfX2RlY29yYXRlQ2xhc3MiLCAiY3VzdG9tRWxlbWVudCIsICJRdGlPdXRjb21lRGVjbGFyYXRpb24iLCAiUXRpVmFyaWFibGVEZWNsYXJhdGlvbiIsICJfYSIsICJfYiIsICJ2YWx1ZSIsICJ2IiwgImh0bWwiLCAidGFibGUiLCAiZW50cmllcyIsICJlbnRyeSIsICJzb3VyY2VWYWx1ZSIsICJ0YXJnZXRWYWx1ZSIsICJvdXRjb21lVmFyaWFibGUiLCAiY3NzIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJwcm9wZXJ0eSIsICJjb25zdW1lIiwgIml0ZW1Db250ZXh0IiwgInN0YXRlIiwgImN1c3RvbUVsZW1lbnQiLCAiY29uc3VtZSIsICJjc3MiLCAiaHRtbCIsICJjdXN0b21FbGVtZW50IiwgInByb3BlcnR5IiwgInN0YXRlIiwgIlF0aVJlc3BvbnNlRGVjbGFyYXRpb24iLCAiUXRpVmFyaWFibGVEZWNsYXJhdGlvbiIsICJfYSIsICJfYiIsICJ2YWx1ZSIsICJ2IiwgImh0bWwiLCAicmVzcG9uc2VWYXJpYWJsZSIsICJyZXN1bHQiLCAiY29ycmVjdFJlc3BvbnNlIiwgInZhbHVlcyIsICJpIiwgImNzcyIsICJfX2RlY29yYXRlQ2xhc3MiLCAicHJvcGVydHkiLCAiY29uc3VtZSIsICJpdGVtQ29udGV4dCIsICJzdGF0ZSIsICJjdXN0b21FbGVtZW50IiwgIkxpdEVsZW1lbnQiLCAiY3VzdG9tRWxlbWVudCIsICJRdGlDb21wYW5pb25NYXRlcmlhbHNJbmZvIiwgIkxpdEVsZW1lbnQiLCAiX19kZWNvcmF0ZUNsYXNzIiwgImN1c3RvbUVsZW1lbnQiLCAiTGl0RWxlbWVudCIsICJodG1sIiwgImN1c3RvbUVsZW1lbnQiLCAiUXRpQ29udGVudEJvZHkiLCAiTGl0RWxlbWVudCIsICJodG1sIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJjdXN0b21FbGVtZW50IiwgIkxpdEVsZW1lbnQiLCAiY3NzIiwgImh0bWwiLCAiY3VzdG9tRWxlbWVudCIsICJwcm9wZXJ0eSIsICJRdGlSdWJyaWNCbG9jayIsICJMaXRFbGVtZW50IiwgIm9sZCIsICJkaXNhYmxlZCIsICJjbGFzc05hbWUiLCAiaHRtbCIsICJjc3MiLCAiX19kZWNvcmF0ZUNsYXNzIiwgInByb3BlcnR5IiwgIndhdGNoIiwgImN1c3RvbUVsZW1lbnQiLCAiY3NzIiwgImh0bWwiLCAiY3VzdG9tRWxlbWVudCIsICJMaXRFbGVtZW50IiwgInByb3BlcnR5IiwgImRlY2ltYWxTZXBhcmF0b3IiLCAiY29udmVydE51bWJlclRvVW5pdmVyYWxGb3JtYXQiLCAibnVtYmVyIiwgImRTZXAiLCAiSXNOdWxsT3JVbmRlZmluZWQiLCAidmFsdWUiLCAicmVtb3ZlRG91YmxlU2xhc2hlcyIsICJzdHIiLCAiUXRpRmVlZGJhY2siLCAiTGl0RWxlbWVudCIsICJvdXRjb21lSWRlbnRpZmllciIsICJvdXRjb21lVmFyaWFibGUiLCAiaXNGb3VuZCIsICJJc051bGxPclVuZGVmaW5lZCIsICJ2YWx1ZSIsICJfX2RlY29yYXRlQ2xhc3MiLCAicHJvcGVydHkiLCAiUXRpRmVlZGJhY2tCbG9jayIsICJRdGlGZWVkYmFjayIsICJodG1sIiwgIl9jaGFuZ2VkUHJvcGVydGllcyIsICJjc3MiLCAiX19kZWNvcmF0ZUNsYXNzIiwgImN1c3RvbUVsZW1lbnQiLCAiY3NzIiwgImh0bWwiLCAiY3VzdG9tRWxlbWVudCIsICJRdGlGZWVkYmFja0lubGluZSIsICJRdGlGZWVkYmFjayIsICJodG1sIiwgImNzcyIsICJfX2RlY29yYXRlQ2xhc3MiLCAiY3VzdG9tRWxlbWVudCIsICJjc3MiLCAiaHRtbCIsICJjdXN0b21FbGVtZW50IiwgIlF0aU1vZGFsRmVlZGJhY2siLCAiUXRpRmVlZGJhY2siLCAiaHRtbCIsICJjc3MiLCAiX19kZWNvcmF0ZUNsYXNzIiwgImN1c3RvbUVsZW1lbnQiLCAiY3NzIiwgImh0bWwiLCAiaWZEZWZpbmVkIiwgInByb3BlcnR5IiwgIkxpdEVsZW1lbnQiLCAiSW50ZXJhY3Rpb24iLCAiTGl0RWxlbWVudCIsICJ2YWwiLCAidmFsdWUiLCAiX19kZWNvcmF0ZUNsYXNzIiwgInByb3BlcnR5IiwgInJlZiIsICJjcmVhdGVSZWYiLCAiY3VzdG9tRWxlbWVudCIsICJwcm9wZXJ0eSIsICJzdGF0ZSIsICJRdGlFeHRlbmRlZFRleHRJbnRlcmFjdGlvbiIsICJJbnRlcmFjdGlvbiIsICJjcmVhdGVSZWYiLCAib2xkIiwgImRpc2FibGVkIiwgImNsYXNzTmFtZSIsICJuclJvd3MiLCAidmFsdWUiLCAiY3NzIiwgImh0bWwiLCAicmVmIiwgImV2ZW50IiwgImlucHV0IiwgImlmRGVmaW5lZCIsICJ0ZXh0IiwgIl9fZGVjb3JhdGVDbGFzcyIsICJwcm9wZXJ0eSIsICJzdGF0ZSIsICJ3YXRjaCIsICJjdXN0b21FbGVtZW50IiwgImNzcyIsICJodG1sIiwgImN1c3RvbUVsZW1lbnQiLCAicHJvcGVydHkiLCAic3RhdGUiLCAiaWZEZWZpbmVkIiwgImNyZWF0ZVJlZiIsICJsaXZlUXVlcnkiLCAicXVlcnlTZWxlY3RvciIsICJvcHRpb25zIiwgIm9ic2VydmVyIiwgInJlc29sdmVkT3B0aW9ucyIsICJfX3NwcmVhZFZhbHVlcyIsICJwcm90byIsICJkZWNvcmF0ZWRGbk5hbWUiLCAiY29ubmVjdGVkQ2FsbGJhY2siLCAiZGlzY29ubmVjdGVkQ2FsbGJhY2siLCAiX2EiLCAiY2FsbGJhY2siLCAibXV0YXRpb25MaXN0IiwgImVsZW1lbnRzVG9XYXRjaCIsICJtdXRhdGlvbiIsICJhZGRlZE5vZGVzIiwgImUiLCAicmVtb3ZlZE5vZGVzIiwgIm4iLCAiZWxlbWVudHNBZGRlZCIsICJRdGlUZXh0RW50cnlJbnRlcmFjdGlvbiIsICJJbnRlcmFjdGlvbiIsICJjcmVhdGVSZWYiLCAib2xkIiwgImNsYXNzZXMiLCAiY2xhc3NOYW1lIiwgIm5yUm93cyIsICJ2YWx1ZSIsICJjc3MiLCAiaHRtbCIsICJldmVudCIsICJpbnB1dCIsICJpZkRlZmluZWQiLCAidGV4dCIsICJfX2RlY29yYXRlQ2xhc3MiLCAicHJvcGVydHkiLCAic3RhdGUiLCAid2F0Y2giLCAiY3VzdG9tRWxlbWVudCIsICJodG1sIiwgIkxpdEVsZW1lbnQiLCAiY3VzdG9tRWxlbWVudCIsICJwcm9wZXJ0eSIsICJDaG9pY2VzTWl4aW4iLCAic3VwZXJDbGFzcyIsICJzZWxlY3RvciIsICJDaG9pY2VzTWl4aW5FbGVtZW50IiwgImFyZ3MiLCAiXyIsICJkaXNhYmxlZCIsICJjaCIsICJyZWFkb25seSIsICJhY2MiLCAidmFsIiwgInJlc3BvbnNlVmFsdWUiLCAicmVzcG9uc2VWYWx1ZUFycmF5IiwgImNlIiwgInJ2IiwgImUiLCAiY2hvaWNlRWxlbWVudCIsICJldmVudCIsICJzZWxlY3RlZElkZW50aWZpZXJzIiwgInJlc3VsdCIsICJyZXNwb25zZSIsICJfX2RlY29yYXRlQ2xhc3MiLCAicHJvcGVydHkiLCAid2F0Y2giLCAiUXRpSG90dGV4dEludGVyYWN0aW9uIiwgIkNob2ljZXNNaXhpbiIsICJMaXRFbGVtZW50IiwgImh0bWwiLCAiX19kZWNvcmF0ZUNsYXNzIiwgImN1c3RvbUVsZW1lbnQiLCAiY3NzIiwgImh0bWwiLCAiY3VzdG9tRWxlbWVudCIsICJwcm9wZXJ0eSIsICJzdGF0ZSIsICJ1bnNhZmVIVE1MIiwgIlF0aUlubGluZUNob2ljZUludGVyYWN0aW9uIiwgIkludGVyYWN0aW9uIiwgImNzcyIsICJodG1sIiwgIm9wdGlvbiIsICJ1bnNhZmVIVE1MIiwgImNob2ljZXMiLCAiY2hvaWNlIiwgInNlbGVjdGVkT3B0aW9uIiwgImkiLCAiX19zcHJlYWRQcm9wcyIsICJfX3NwcmVhZFZhbHVlcyIsICJ2YWx1ZSIsICJldmVudCIsICJzZWxlY3RlZE9wdGlvblZhbHVlIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJzdGF0ZSIsICJwcm9wZXJ0eSIsICJjdXN0b21FbGVtZW50IiwgImh0bWwiLCAiTGl0RWxlbWVudCIsICJjdXN0b21FbGVtZW50IiwgInByb3BlcnR5IiwgInByb3BlcnR5IiwgIlNodWZmbGVNaXhpbiIsICJzdXBlckNsYXNzIiwgInNlbGVjdG9yIiwgIlNodWZmbGVFbGVtZW50IiwgInZhbHVlIiwgIm9sZFZhbHVlIiwgImNob2ljZXMiLCAiZml4ZWRFbGVtZW50cyIsICJub25GaXhlZEVsZW1lbnRzIiwgImNob2ljZSIsICJpbmRleCIsICJpc1NodWZmbGVkIiwgIm1heEF0dGVtcHRzIiwgImF0dGVtcHQiLCAiaSIsICJqIiwgIm9yZGVyIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJwcm9wZXJ0eSIsICJzdHJpbmdUb0Jvb2xlYW5Db252ZXJ0ZXIiLCAicHJvcGVydHkiLCAiVm9jYWJ1bGFyeU1peGluIiwgInN1cGVyQ2xhc3MiLCAic2VsZWN0b3IiLCAiVm9jYWJ1bGFyeUVsZW1lbnQiLCAidmFsdWUiLCAiX2EiLCAiX2NoYW5nZWRQcm9wZXJ0aWVzIiwgImNsYXNzQ29udGFpbnNMYWJlbCIsICJjbHMiLCAiaXNOdW1iZXIiLCAiY2hvaWNlcyIsICJjIiwgImNob2ljZSIsICJpbmRleCIsICJhIiwgImIiLCAiaSIsICJsYXN0TGFiZWwiLCAibGFzdExhYmVsU3VmZml4IiwgImxhYmVsIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJwcm9wZXJ0eSIsICJjc3MiLCAicXRpX2Nob2ljZV9pbnRlcmFjdGlvbl9zdHlsZXNfZGVmYXVsdCIsICJRdGlDaG9pY2VJbnRlcmFjdGlvbiIsICJWb2NhYnVsYXJ5TWl4aW4iLCAiU2h1ZmZsZU1peGluIiwgIkNob2ljZXNNaXhpbiIsICJMaXRFbGVtZW50IiwgImh0bWwiLCAicXRpX2Nob2ljZV9pbnRlcmFjdGlvbl9zdHlsZXNfZGVmYXVsdCIsICJfX2RlY29yYXRlQ2xhc3MiLCAicHJvcGVydHkiLCAiY3VzdG9tRWxlbWVudCIsICJjc3MiLCAiaHRtbCIsICJMaXRFbGVtZW50IiwgImN1c3RvbUVsZW1lbnQiLCAiUXRpT3V0Y29tZVByb2Nlc3NpbmciLCAiTGl0RWxlbWVudCIsICJodG1sIiwgImxvZ2ljIiwgIlF0aU91dGNvbWVQcm9jZXNzaW5nUHJvY2Vzc29yIiwgInJ1bGVzIiwgImNzcyIsICJfX2RlY29yYXRlQ2xhc3MiLCAiY3VzdG9tRWxlbWVudCIsICJydWxlIiwgImNzcyIsICJodG1sIiwgIkxpdEVsZW1lbnQiLCAiY3VzdG9tRWxlbWVudCIsICJtYXRjaENvcnJlY3QiLCAibWFwUmVzcG9uc2UiLCAibWFwUmVzcG9uc2VQb2ludCIsICJRdGlSZXNwb25zZVByb2Nlc3NpbmciLCAiTGl0RWxlbWVudCIsICJodG1sIiwgInJ1bGVzIiwgInJ1bGUiLCAiX2NoYW5nZWRQcm9wZXJ0aWVzIiwgInNwbGl0dGVkVGVtcGxhdGVOYW1lIiwgInRlbXBsYXRlTmFtZSIsICJtYXBSZXNwb25zZSIsICJtYXBSZXNwb25zZVBvaW50IiwgIm1hdGNoQ29ycmVjdCIsICJzdHJIVE1MIiwgImNzcyIsICJfX2RlY29yYXRlQ2xhc3MiLCAiY3VzdG9tRWxlbWVudCIsICJwcm9wZXJ0eSIsICJjdXN0b21FbGVtZW50IiwgImh0bWwiLCAiTGl0RWxlbWVudCIsICJRdGlSdWxlIiwgIkxpdEVsZW1lbnQiLCAiaHRtbCIsICJfX2RlY29yYXRlQ2xhc3MiLCAiY3VzdG9tRWxlbWVudCIsICJRdGlMb29rdXBPdXRjb21lVmFsdWUiLCAiUXRpUnVsZSIsICJpZGVudGlmaWVyIiwgIm91dGNvbWVWYXJpYWJsZSIsICJ2YWx1ZSIsICJjb252ZXJ0TnVtYmVyVG9Vbml2ZXJhbEZvcm1hdCIsICJfX2RlY29yYXRlQ2xhc3MiLCAicHJvcGVydHkiLCAiaHRtbCIsICJRdGlSZXNwb25zZUNvbmRpdGlvbiIsICJRdGlSdWxlIiwgImh0bWwiLCAiYnJhbmNoZXMiLCAiaSIsICJicmFuY2giLCAiUXRpU2V0T3V0Y29tZVZhbHVlIiwgIlF0aVJ1bGUiLCAib3V0Y29tZUlkZW50aWZpZXIiLCAiZXhwcmVzc2lvbiIsICJ2YWx1ZSIsICJRdGlTZXRPdXRjb21lVmFsdWVSdWxlIiwgInYiLCAiY29udmVydE51bWJlclRvVW5pdmVyYWxGb3JtYXQiLCAiTGl0RWxlbWVudCIsICJodG1sIiwgIlF0aVJlc3BvbnNlRWxzZSIsICJzdWJSdWxlcyIsICJpIiwgImh0bWwiLCAiUXRpUmVzcG9uc2VJZiIsICJRdGlSZXNwb25zZUVsc2UiLCAicmVzdWx0IiwgImkiLCAiUXRpUmVzcG9uc2VFbHNlSWYiLCAiUXRpUmVzcG9uc2VJZiIsICJodG1sIiwgIkxpdEVsZW1lbnQiLCAiY3NzIiwgImh0bWwiLCAic3RhdGUiLCAiUXRpRXhwcmVzc2lvbiIsICJMaXRFbGVtZW50IiwgImlkZW50aWZpZXIiLCAidmFsdWVzIiwgInYiLCAicmVzcG9uc2VWYXJpYWJsZSIsICJlcnJvciIsICJodG1sIiwgImNzcyIsICJfX2RlY29yYXRlQ2xhc3MiLCAic3RhdGUiLCAiUXRpQ29uZGl0aW9uRXhwcmVzc2lvbiIsICJRdGlFeHByZXNzaW9uIiwgIlF0aUFuZCIsICJxdGlBbmRNaXhpbiIsICJRdGlDb25kaXRpb25FeHByZXNzaW9uIiwgIkJhc2UiLCAiY2hpbGRyZW4iLCAiYyIsICJjb25kaXRpb24iLCAidmFsdWUiLCAiZSIsICJRdGlBbmQiLCAicHJvcGVydHkiLCAiUXRpQmFzZVZhbHVlIiwgIlF0aUV4cHJlc3Npb24iLCAiX19kZWNvcmF0ZUNsYXNzIiwgInByb3BlcnR5IiwgIlF0aUNvbnRhaW5zIiwgIlF0aUNvbmRpdGlvbkV4cHJlc3Npb24iLCAidmFsdWVzIiwgInZhbHVlMSIsICJ2YWx1ZTIiLCAicHJvamVjdGlvbjEiLCAicHJvamVjdGlvbjIiLCAieCIsICJRdGlDb3JyZWN0IiwgIlF0aUV4cHJlc3Npb24iLCAiaWRlbnRpZmllciIsICJyZXNwb25zZVZhcmlhYmxlIiwgInByb3BlcnR5IiwgIlF0aUVxdWFsUm91bmRlZCIsICJRdGlFeHByZXNzaW9uIiwgImZpZ3VyZXMiLCAidmFsdWVzIiwgInZhbHVlMSIsICJ2YWx1ZTIiLCAiZmxvYXQxIiwgImZsb2F0MiIsICJfX2RlY29yYXRlQ2xhc3MiLCAicHJvcGVydHkiLCAicHJvcGVydHkiLCAiU2NvcmluZ0hlbHBlciIsICJ2YWx1ZTEiLCAidmFsdWUyIiwgImJhc2VUeXBlIiwgImludDEiLCAiaW50MiIsICJmbG9hdDEiLCAiZmxvYXQyIiwgInBhaXIxIiwgInBhaXIyIiwgIlF0aUVxdWFsIiwgIlF0aUV4cHJlc3Npb24iLCAidmFsdWVzIiwgInZhbHVlMSIsICJ2YWx1ZTIiLCAiU2NvcmluZ0hlbHBlciIsICJfX2RlY29yYXRlQ2xhc3MiLCAicHJvcGVydHkiLCAiUXRpR3QiLCAiUXRpRXhwcmVzc2lvbiIsICJ2YWx1ZXMiLCAidmFsdWUxIiwgInZhbHVlMiIsICJRdGlHdGUiLCAiUXRpQ29uZGl0aW9uRXhwcmVzc2lvbiIsICJ2YWx1ZXMiLCAidmFsdWUxIiwgInZhbHVlMiIsICJRdGlJc051bGwiLCAiUXRpRXhwcmVzc2lvbiIsICJ2YXJpYWJsZXMiLCAidmFsdWUiLCAiUXRpTHQiLCAiUXRpRXhwcmVzc2lvbiIsICJ2YWx1ZXMiLCAidmFsdWUxIiwgInZhbHVlMiIsICJRdGlMdGUiLCAiUXRpQ29uZGl0aW9uRXhwcmVzc2lvbiIsICJ2YWx1ZXMiLCAidmFsdWUxIiwgInZhbHVlMiIsICJwcm9wZXJ0eSIsICJRdGlNYXBSZXNwb25zZSIsICJRdGlFeHByZXNzaW9uIiwgInJlc3BvbnNlIiwgIm1hcHBpbmciLCAiY2FuZGlkYXRlUmVzcG9uc2VzIiwgInJlc3VsdCIsICJjYW5kaWRhdGVSZXNwb25zZSIsICJtYXBwZWRWYWx1ZSIsICJlbnRyeSIsICJTY29yaW5nSGVscGVyIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJwcm9wZXJ0eSIsICJwcm9wZXJ0eSIsICJMaXRFbGVtZW50IiwgIlF0aU1hcHBpbmciLCAiTGl0RWxlbWVudCIsICJlbCIsICJfX2RlY29yYXRlQ2xhc3MiLCAicHJvcGVydHkiLCAiUXRpTWF0Y2giLCAiX1F0aU1hdGNoIiwgIlF0aUV4cHJlc3Npb24iLCAidmFsdWVzIiwgInZhbHVlVG9NYXAiLCAiY29ycmVjdFZhbHVlSW5mbyIsICJfYSIsICJTY29yaW5nSGVscGVyIiwgImkiLCAiYW5zd2VySW5kZXgiLCAiY29ycmVjdEFuc3dlciIsICJtYXRjaGluZ1ZhbHVlIiwgImFyciIsICJtdiIsICJRdGlNZW1iZXIiLCAiUXRpRXhwcmVzc2lvbiIsICJ2YWx1ZXMiLCAidmFsdWUxIiwgInZhbHVlMiIsICJwcm9qZWN0aW9uMSIsICJRdGlNdWx0aXBsZSIsICJRdGlFeHByZXNzaW9uIiwgInZhcmlhYmxlcyIsICJ2YXJpYWJsZSIsICJodG1sIiwgIlF0aU5vdCIsICJRdGlFeHByZXNzaW9uIiwgImh0bWwiLCAiUXRpT3IiLCAiUXRpQ29uZGl0aW9uRXhwcmVzc2lvbiIsICJjIiwgImNvbmRpdGlvbiIsICJ2YWx1ZSIsICJRdGlPcmRlcmVkIiwgIlF0aUV4cHJlc3Npb24iLCAidmFyaWFibGVzIiwgInZhcmlhYmxlIiwgImNvbnN1bWUiLCAiTGl0RWxlbWVudCIsICJodG1sIiwgInByb3BlcnR5IiwgInN0YXRlIiwgIlF0UHJpbnRlZFZhcmlhYmxlIiwgIkxpdEVsZW1lbnQiLCAiX2EiLCAiX2IiLCAidmFsdWUiLCAidiIsICJodG1sIiwgImFzc2Vzc21lbnRJdGVtIiwgImlkZW50aWZpZXIiLCAiX19kZWNvcmF0ZUNsYXNzIiwgInByb3BlcnR5IiwgImNvbnN1bWUiLCAiaXRlbUNvbnRleHQiLCAic3RhdGUiLCAiUXRpUHJvZHVjdCIsICJRdGlFeHByZXNzaW9uIiwgImFjY3VtdWxhdG9yIiwgImN1cnJlbnRWYWx1ZSIsICJlcnJvciIsICJwcm9wZXJ0eSIsICJRdGlTdHJpbmdNYXRjaCIsICJRdGlFeHByZXNzaW9uIiwgInZhbHVlcyIsICJ2YWx1ZTEiLCAidmFsdWUyIiwgInYxIiwgInYyIiwgIlNjb3JpbmdIZWxwZXIiLCAiX19kZWNvcmF0ZUNsYXNzIiwgInByb3BlcnR5IiwgIlF0aVN1bSIsICJRdGlFeHByZXNzaW9uIiwgIlF0aVN1bUV4cHJlc3Npb24iLCAiZXhwcmVzc2lvbnMiLCAiYyIsICJ2YWx1ZSIsICJhIiwgImIiLCAiUXRpVmFyaWFibGUiLCAiUXRpRXhwcmVzc2lvbiIsICJpZGVudGlmaWVyIiwgImh0bWwiLCAiY3VzdG9tRWxlbWVudCIsICJwcm9wZXJ0eSIsICJzdGF0ZSIsICJRdGlQb3J0YWJsZUN1c3RvbUludGVyYWN0aW9uIiwgIkludGVyYWN0aW9uIiwgInVybCIsICJiYXNlVXJsIiwgInJlcXVpcmVDb25maWciLCAibW9kdWxlQ29uZyIsICJtb2R1bGVJZCIsICJlIiwgInBhdGgiLCAiYmFzZVBhdGgiLCAicCIsICJpbnB1dCIsICJ0b3BMZXZlbEtleSIsICJuZXN0ZWRPYmplY3QiLCAibmVzdGVkS2V5IiwgInZhbHVlIiwgInJlc3BvbnNlIiwgIm5ld1Jlc3BvbnNlIiwgInN0cmluZ2lmaWVkIiwgInZhbCIsICJub2RlIiwgImEiLCAiY29uZmlnIiwgImdldFByb3BlcnR5VmFsdWUiLCAiZWwiLCAicHJvcGVydHkiLCAia2V5IiwgImNoaWxkcmVuIiwgImFsbEtleSIsICJjIiwgImsiLCAiZ2V0Q2hpbGRQcm9wZXJ0aWVzIiwgInByb3BlcnRpZXMiLCAiY2hpbGQiLCAiX19zcHJlYWRWYWx1ZXMiLCAicGNpIiwgInR5cGUiLCAiZG9tIiwgImFjYyIsICJsaW5rIiwgInN0eWxlcyIsICJjdHhBIiwgInJlcXVpcmUiLCAiY29udGV4dCIsICJpbnRlcmFjdGlvbk1vZHVsZXMiLCAibW9kdWxlcyIsICJtb2R1bGUiLCAicHJpbWFyeVBhdGgiLCAiZmFsbGJhY2tQYXRoIiwgInBhdGhzIiwgImV4aXN0aW5nUGF0aCIsICJwYXRoMSIsICJwYXRoMiIsICJwYXRoMUFycmF5IiwgInBhdGgyQXJyYXkiLCAic3RyIiwgImh0bWwiLCAiX19kZWNvcmF0ZUNsYXNzIiwgInN0YXRlIiwgImN1c3RvbUVsZW1lbnQiLCAiTGl0RWxlbWVudCIsICJjc3MiLCAiaHRtbCIsICJjdXN0b21FbGVtZW50IiwgInN0YXRlIiwgIlRvdWNoRHJhZ0FuZERyb3AiLCAiX1RvdWNoRHJhZ0FuZERyb3AiLCAidHlwZSIsICJ2YWwiLCAiZSIsICJfdG91Y2hlcyIsICJlbGVtZW50U3R5bGVzIiwgInN0eWxlIiwgIl90aGlzIiwgInRhcmdldCIsICJkcmFnZ2FibGVzIiwgImVsIiwgIngiLCAieSIsICJfYSIsICJldmVudCIsICJwb2ludEZyb21Ub3VjaEV2ZW50IiwgInZpc2l0ZWQiLCAicm9vdCIsICJuZXN0ZWRFbCIsICJwYWdlIiwgInRvdWNoIiwgImNsaWVudFJlY3QiLCAiZXZlbnRUeXBlIiwgImJ1YmJsZSIsICJwcm9wZXJ0eSIsICJEcm9wcGFibGVzTWl4aW4iLCAic3VwZXJDbGFzcyIsICJkcm9wcGFibGVzSW5TaGFkb3dSb290IiwgImRyb3BwYWJsZXNTZWxlY3RvciIsICJEcm9wcGFibGVzRWxlbWVudCIsICJjaGFuZ2VkUHJvcHMiLCAiZHJvcHBhYmxlcyIsICJkIiwgImRyb3BwYWJsZSIsICJtdXRhdGlvbnMiLCAibXV0YXRpb24iLCAiX2EiLCAiZXYiLCAiZHJhZ2dhYmxlSW5MaWdodERvbSIsICJkcmFnZ2FibGUiLCAiX19kZWNvcmF0ZUNsYXNzIiwgInByb3BlcnR5IiwgIkZsaXBwYWJsZXNNaXhpbiIsICJzdXBlckNsYXNzIiwgImRyb3BwYWJsZXNTZWwiLCAiZHJhZ2dhYmxlc1NlbCIsICJGbGlwcGFibGVzRWxlbWVudCIsICJwcm9wZXJ0eSIsICJEcmFnRHJvcEludGVyYWN0aW9uTWl4aW4iLCAic3VwZXJDbGFzcyIsICJkcmFnZ2FibGVzU2VsZWN0b3IiLCAiZHJvcHBhYmxlc0luU2hhZG93Um9vdCIsICJkcm9wcGFibGVzU2VsZWN0b3IiLCAiRHJhZ0Ryb3BJbnRlcmFjdGlvbkVsZW1lbnQiLCAiRmxpcHBhYmxlc01peGluIiwgIkRyb3BwYWJsZXNNaXhpbiIsICJldiIsICJkIiwgImRyYWdnYWJsZSIsICJkcmFnc0FkZGVkIiwgImRyYWdzUmVtb3ZlZCIsICJlbGVtIiwgIm9sZCIsICJkcmFnT3B0aW9ucyIsICJkaXNhYmxlZCIsICJzIiwgImNoIiwgInJlYWRvbmx5IiwgImNoYW5nZWRQcm9wcyIsICJUb3VjaERyYWdBbmREcm9wIiwgInBvc2l0aW9uIiwgImluZGV4IiwgImludGVyYWN0aW9uIiwgImdhcFRleHQiLCAic2F2ZSIsICJjaGlsZHJlbiIsICJkaXNhYmxlIiwgInJlc3BvbnNlIiwgImRyb3BJZCIsICJkcmFnSWRzIiwgImRyb3BwYWJsZSIsICJkcm9wIiwgImRyYWdJZCIsICJhc3NvY2lhdGlvbnMiLCAiZHJhZ3NJbkRyb3BwYWJsZSIsICJpZGVudGlmaWVycyIsICJkcm9wcGFibGVJZGVudGlmaWVyIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJsaXZlUXVlcnkiLCAicHJvcGVydHkiLCAid2F0Y2giLCAiUXRpQXNzb2NpYXRlSW50ZXJhY3Rpb24iLCAiRHJhZ0Ryb3BJbnRlcmFjdGlvbk1peGluIiwgIkxpdEVsZW1lbnQiLCAiaHRtbCIsICJfIiwgImluZGV4IiwgImNzcyIsICJfX2RlY29yYXRlQ2xhc3MiLCAic3RhdGUiLCAiY3VzdG9tRWxlbWVudCIsICJodG1sIiwgImN1c3RvbUVsZW1lbnQiLCAicHJvcGVydHkiLCAic3RhdGUiLCAiUXRpQ3VzdG9tSW50ZXJhY3Rpb24iLCAiSW50ZXJhY3Rpb24iLCAidXJpVG9NYW5pZmVzdCIsICJyZW1vdmVEb3VibGVTbGFzaGVzIiwgInJlc3BvbnNlIiwgImRhdGEiLCAiZXJyIiwgImlmcmFtZSIsICJpZnJhbWVXaW4iLCAiaWZyYW1lRG9jIiwgImlmcmFtZXNJblNoYWRvd1Jvb3QiLCAib3V0ZXJJRnJhbWVzIiwgImlmcmFtZVNyYyIsICJvdXRlckRvYyIsICJlIiwgImluZGV4IiwgImlmcmFtZURvY3VtZW50IiwgImlmcmFtZXMiLCAibmVzdGVkRG9jIiwgInR5cGUiLCAiZXZlbnQiLCAibWVkaWFEYXRhIiwgIm1lZGlhIiwgInZhbCIsICJodG1sIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJwcm9wZXJ0eSIsICJzdGF0ZSIsICJjdXN0b21FbGVtZW50IiwgImh0bWwiLCAiY3VzdG9tRWxlbWVudCIsICJwcm9wZXJ0eSIsICJRdGlFbmRBdHRlbXB0SW50ZXJhY3Rpb24iLCAiSW50ZXJhY3Rpb24iLCAidmFsIiwgImh0bWwiLCAiX19kZWNvcmF0ZUNsYXNzIiwgInByb3BlcnR5IiwgImN1c3RvbUVsZW1lbnQiLCAiY3NzIiwgImh0bWwiLCAiTGl0RWxlbWVudCIsICJjdXN0b21FbGVtZW50IiwgIlF0aUdhcE1hdGNoSW50ZXJhY3Rpb24iLCAiRHJhZ0Ryb3BJbnRlcmFjdGlvbk1peGluIiwgIkxpdEVsZW1lbnQiLCAiaHRtbCIsICJ2YWx1ZSIsICJtYXRjaGVzIiwgInJlc3BvbnNlIiwgIngiLCAic3BsaXQiLCAiZ2FwIiwgImluZGV4IiwgIl9hIiwgIl9iIiwgIl9jIiwgIl9kIiwgImlkZW50aWZpZXIiLCAidGV4dElkZW50aWZpZXIiLCAidGV4dCIsICJ0ZXh0U3BhbiIsICJjc3MiLCAiX19kZWNvcmF0ZUNsYXNzIiwgImN1c3RvbUVsZW1lbnQiLCAiY3NzIiwgImh0bWwiLCAic3ZnIiwgImN1c3RvbUVsZW1lbnQiLCAicXVlcnkiLCAicXVlcnlBc3NpZ25lZEVsZW1lbnRzIiwgInN0YXRlIiwgImlmRGVmaW5lZCIsICJyZXBlYXQiLCAicG9zaXRpb25Ib3RzcG90cyIsICJzaGFwZSIsICJjb29yZHNOdW1iZXIiLCAiaW1nIiwgImhvdHNwb3QiLCAiY2VudGVyWCIsICJjZW50ZXJZIiwgInJhZGl1cyIsICJjZW50ZXJYUGVyIiwgImNlbnRlcllQZXIiLCAicmFkaXVzUGVyIiwgImxlZnRYIiwgInRvcFkiLCAicmlnaHRYIiwgImJvdHRvbVkiLCAibGVmdFhQZXIiLCAidG9wWVBlciIsICJyaWdodFhQZXIiLCAiYm90dG9tWVBlciIsICJwb2x5Y29vcmRzIiwgImFjYyIsICJjdXJyZW50VmFsdWUiLCAiY3VycmVudEluZGV4IiwgInBvbHlDIiwgImxhc3RWYWwiLCAicG9pbnQiLCAicG9seUQiLCAicCIsICJRdGlHcmFwaGljQXNzb2NpYXRlSW50ZXJhY3Rpb24iLCAiSW50ZXJhY3Rpb24iLCAidmFsIiwgIl9hIiwgIl9iIiwgIl9jIiwgIl9kIiwgImh0bWwiLCAiaWZEZWZpbmVkIiwgInJlcGVhdCIsICJsaW5lIiwgImluZGV4IiwgInN2ZyIsICJlIiwgIl8iLCAiaSIsICJpbWciLCAiaG90c3BvdCIsICJjb29yZHMiLCAic2hhcGUiLCAiY29vcmRzTnVtYmVyIiwgInMiLCAicG9zaXRpb25Ib3RzcG90cyIsICJldmVudCIsICJjc3MiLCAiX19kZWNvcmF0ZUNsYXNzIiwgInN0YXRlIiwgInF1ZXJ5IiwgInF1ZXJ5QXNzaWduZWRFbGVtZW50cyIsICJjdXN0b21FbGVtZW50IiwgImNzcyIsICJodG1sIiwgIkxpdEVsZW1lbnQiLCAiY3VzdG9tRWxlbWVudCIsICJRdGlHcmFwaGljR2FwTWF0Y2hJbnRlcmFjdGlvbiIsICJEcmFnRHJvcEludGVyYWN0aW9uTWl4aW4iLCAiTGl0RWxlbWVudCIsICJodG1sIiwgImUiLCAiaW1nIiwgImhvdHNwb3QiLCAiY29vcmRzIiwgInNoYXBlIiwgImNvb3Jkc051bWJlciIsICJzIiwgImNlbnRlclgiLCAiY2VudGVyWSIsICJyYWRpdXMiLCAibGVmdFgiLCAidG9wWSIsICJyaWdodFgiLCAiYm90dG9tWSIsICJjc3MiLCAiX19kZWNvcmF0ZUNsYXNzIiwgImN1c3RvbUVsZW1lbnQiLCAiY3NzIiwgImh0bWwiLCAiTGl0RWxlbWVudCIsICJjdXN0b21FbGVtZW50IiwgIlF0aUdyYXBoaWNPcmRlckludGVyYWN0aW9uIiwgIkNob2ljZXNNaXhpbiIsICJMaXRFbGVtZW50IiwgImh0bWwiLCAiZSIsICJpZGVudGlmaWVyIiwgImhvdHNwb3QiLCAiZWwiLCAibWF4U2VsZWN0aW9uIiwgImkiLCAiaW1nIiwgImNvb3JkcyIsICJzaGFwZSIsICJjb29yZHNOdW1iZXIiLCAicyIsICJwb3NpdGlvbkhvdHNwb3RzIiwgImNzcyIsICJfX2RlY29yYXRlQ2xhc3MiLCAiY3VzdG9tRWxlbWVudCIsICJjc3MiLCAiaHRtbCIsICJMaXRFbGVtZW50IiwgImN1c3RvbUVsZW1lbnQiLCAiUXRpSG90c3BvdEludGVyYWN0aW9uIiwgIkNob2ljZXNNaXhpbiIsICJMaXRFbGVtZW50IiwgImh0bWwiLCAiZSIsICJpbWciLCAiaG90c3BvdCIsICJjb29yZHMiLCAic2hhcGUiLCAiY29vcmRzTnVtYmVyIiwgInMiLCAicG9zaXRpb25Ib3RzcG90cyIsICJjc3MiLCAiX19kZWNvcmF0ZUNsYXNzIiwgImN1c3RvbUVsZW1lbnQiLCAiY3NzIiwgImh0bWwiLCAiTGl0RWxlbWVudCIsICJjdXN0b21FbGVtZW50IiwgInByb3BlcnR5IiwgInN0YXRlIiwgInVuc2FmZUhUTUwiLCAiY3NzIiwgImh0bWwiLCAiTGl0RWxlbWVudCIsICJjdXN0b21FbGVtZW50IiwgInByb3BlcnR5IiwgIlF0aVNpbXBsZUFzc29jaWFibGVDaG9pY2UiLCAiTGl0RWxlbWVudCIsICJodG1sIiwgImNzcyIsICJfX2RlY29yYXRlQ2xhc3MiLCAicHJvcGVydHkiLCAiY3VzdG9tRWxlbWVudCIsICJRdGlNYXRjaEludGVyYWN0aW9uIiwgIkRyYWdEcm9wSW50ZXJhY3Rpb25NaXhpbiIsICJMaXRFbGVtZW50IiwgInJhZGlvIiwgImNoZWNrYm94IiwgInZhbHVlIiwgIm5hbWUiLCAidHlwZSIsICJ2IiwgInJlc3BvbnNlVmFsdWUiLCAiaHRtbCIsICJjb2wiLCAiaSIsICJ1bnNhZmVIVE1MIiwgInJvdyIsICJySW5kZXgiLCAiY0luZGV4IiwgInJvd0lkIiwgImNvbElkIiwgInNlbGVjdGVkSW5Sb3dDb3VudCIsICJjaGVja2VkIiwgInBhcnQiLCAiZGlzYWJsZSIsICJlIiwgImNzcyIsICJfX2RlY29yYXRlQ2xhc3MiLCAic3RhdGUiLCAicHJvcGVydHkiLCAiY3VzdG9tRWxlbWVudCIsICJjc3MiLCAiaHRtbCIsICJjdXN0b21FbGVtZW50IiwgIlF0aU1lZGlhSW50ZXJhY3Rpb24iLCAiSW50ZXJhY3Rpb24iLCAidmFsIiwgIl9fc3ByZWFkUHJvcHMiLCAiX19zcHJlYWRWYWx1ZXMiLCAiaHRtbCIsICJtZWRpYU9iamVjdCIsICJjc3MiLCAiX19kZWNvcmF0ZUNsYXNzIiwgImN1c3RvbUVsZW1lbnQiLCAiY3NzIiwgImh0bWwiLCAiTGl0RWxlbWVudCIsICJjdXN0b21FbGVtZW50IiwgInByb3BlcnR5IiwgInN0YXRlIiwgInVuc2FmZUhUTUwiLCAiUXRpT3JkZXJJbnRlcmFjdGlvbiIsICJTaHVmZmxlTWl4aW4iLCAiRHJhZ0Ryb3BJbnRlcmFjdGlvbk1peGluIiwgIkxpdEVsZW1lbnQiLCAiY2hvaWNlcyIsICJodG1sIiwgIl8iLCAiaSIsICJ1bnNhZmVIVE1MIiwgInZhbHVlIiwgInJlc3BvbnNlIiwgImluZGV4IiwgInNpbXBsZUNob2ljZSIsICJ0ZXh0IiwgImRyb3BwYWJsZSIsICJkcmFnc0luRHJvcHBhYmxlIiwgImQiLCAiY2hhbmdlZFByb3BzIiwgImVsIiwgImNzcyIsICJfX2RlY29yYXRlQ2xhc3MiLCAic3RhdGUiLCAicHJvcGVydHkiLCAiY3VzdG9tRWxlbWVudCIsICJMaXRFbGVtZW50IiwgImNzcyIsICJodG1sIiwgIlF0aVNQb3NpdGlvbk9iamVjdEludGVyYWN0aW9uIiwgIkxpdEVsZW1lbnQiLCAiY3NzIiwgImh0bWwiLCAiY3VzdG9tRWxlbWVudCIsICJRdGlQb3NpdGlvbk9iamVjdFN0YWdlIiwgIkxpdEVsZW1lbnQiLCAiaHRtbCIsICJldmVudCIsICJkZWx0YVgiLCAiZGVsdGFZIiwgImEiLCAiY3NzIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJjdXN0b21FbGVtZW50IiwgImNzcyIsICJodG1sIiwgImN1c3RvbUVsZW1lbnQiLCAicHJvcGVydHkiLCAic3RhdGUiLCAicmVwZWF0IiwgInN0eWxlTWFwIiwgIlF0aVNlbGVjdFBvaW50SW50ZXJhY3Rpb24iLCAiSW50ZXJhY3Rpb24iLCAiZXZlbnQiLCAieCIsICJ5IiwgImh0bWwiLCAicmVwZWF0IiwgInBvaW50IiwgImluZGV4IiwgInN0eWxlTWFwIiwgImUiLCAiXyIsICJpIiwgInZhbCIsICJjc3MiLCAiX19kZWNvcmF0ZUNsYXNzIiwgInByb3BlcnR5IiwgInN0YXRlIiwgImN1c3RvbUVsZW1lbnQiLCAiY3NzIiwgImh0bWwiLCAibm90aGluZyIsICJjdXN0b21FbGVtZW50IiwgInByb3BlcnR5IiwgInF1ZXJ5IiwgIlF0aVNsaWRlckludGVyYWN0aW9uIiwgIkludGVyYWN0aW9uIiwgIm9sZCIsICJkaXNhYmxlZCIsICJyZWFkb25seSIsICJ2YWx1ZSIsICJteVJlc3BvbnNlIiwgInZhbHVlUGVyY2VudGFnZSIsICJodG1sIiwgIm5vdGhpbmciLCAiZXZlbnQiLCAiaGFuZGxlVG91Y2hNb3ZlIiwgIngiLCAiZGlmZlgiLCAiaGFuZGxlVG91Y2hFbmQiLCAiaGFuZGxlTW91c2VNb3ZlIiwgImhhbmRsZU1vdXNlVXAiLCAidmFsdWVOb3ciLCAicm91bmRlZFN0ZXBWYWx1ZSIsICJfdG91Y2hNb3ZlIiwgImV2dCIsICJ0b3VjaCIsICJjc3MiLCAiX19kZWNvcmF0ZUNsYXNzIiwgInF1ZXJ5IiwgInByb3BlcnR5IiwgIndhdGNoIiwgImN1c3RvbUVsZW1lbnQiLCAiY29uc3VtZSIsICJMaXRFbGVtZW50IiwgImh0bWwiLCAiY3VzdG9tRWxlbWVudCIsICJzdGF0ZSIsICJRdGlDdXN0b21PcGVyYXRvciIsICJMaXRFbGVtZW50IiwgImh0bWwiLCAiZXZlbnQiLCAiX2EiLCAiX2IiLCAiX2MiLCAiY29tbWVudE5vZGUiLCAibm9kZSIsICJlIiwgImZuIiwgInJlc3BvbnNlSWRlbnRpZmllciIsICJ2IiwgIml0ZW0iLCAidmFyaWFibGVJZGVudGlmaWVyIiwgIm91dGNvbWVJZGVudGlmaWVyIiwgInZhbHVlIiwgInJlc3BvbnNlIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJjb25zdW1lIiwgIml0ZW1Db250ZXh0IiwgInN0YXRlIiwgImN1c3RvbUVsZW1lbnQiLCAiTGl0RWxlbWVudCIsICJjc3MiLCAiaHRtbCIsICJjdXN0b21FbGVtZW50IiwgIlF0aUFzc29jaWFibGVIb3RzcG90IiwgIkxpdEVsZW1lbnQiLCAiaHRtbCIsICJjc3MiLCAiX19kZWNvcmF0ZUNsYXNzIiwgImN1c3RvbUVsZW1lbnQiLCAiY3NzIiwgImh0bWwiLCAiTGl0RWxlbWVudCIsICJjdXN0b21FbGVtZW50IiwgInByb3BlcnR5IiwgIlF0aUdhcCIsICJMaXRFbGVtZW50IiwgImh0bWwiLCAiY3NzIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJwcm9wZXJ0eSIsICJjdXN0b21FbGVtZW50IiwgImNzcyIsICJMaXRFbGVtZW50IiwgImN1c3RvbUVsZW1lbnQiLCAicHJvcGVydHkiLCAiUXRpR2FwSW1nIiwgIkxpdEVsZW1lbnQiLCAiY3NzIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJwcm9wZXJ0eSIsICJjdXN0b21FbGVtZW50IiwgImNzcyIsICJodG1sIiwgIkxpdEVsZW1lbnQiLCAiY3VzdG9tRWxlbWVudCIsICJwcm9wZXJ0eSIsICJRdGlHYXBUZXh0IiwgIkxpdEVsZW1lbnQiLCAiaHRtbCIsICJjc3MiLCAiX19kZWNvcmF0ZUNsYXNzIiwgInByb3BlcnR5IiwgImN1c3RvbUVsZW1lbnQiLCAiY3NzIiwgImN1c3RvbUVsZW1lbnQiLCAicHJvcGVydHkiLCAiUXRpSG90c3BvdENob2ljZSIsICJRdGlDaG9pY2UiLCAiY3NzIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJwcm9wZXJ0eSIsICJjdXN0b21FbGVtZW50IiwgImNzcyIsICJodG1sIiwgImN1c3RvbUVsZW1lbnQiLCAiUXRpSG90dGV4dCIsICJRdGlDaG9pY2UiLCAiaHRtbCIsICJjc3MiLCAiX19kZWNvcmF0ZUNsYXNzIiwgImN1c3RvbUVsZW1lbnQiLCAiY3NzIiwgImh0bWwiLCAiTGl0RWxlbWVudCIsICJjdXN0b21FbGVtZW50IiwgInByb3BlcnR5IiwgIlF0aUlubGluZUNob2ljZSIsICJMaXRFbGVtZW50IiwgImNzcyIsICJodG1sIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJwcm9wZXJ0eSIsICJjdXN0b21FbGVtZW50IiwgImNzcyIsICJodG1sIiwgIm5vdGhpbmciLCAiY3VzdG9tRWxlbWVudCIsICJwcm9wZXJ0eSIsICJRdGlTaW1wbGVDaG9pY2UiLCAiUXRpQ2hvaWNlIiwgImh0bWwiLCAibm90aGluZyIsICJjc3MiLCAiX19kZWNvcmF0ZUNsYXNzIiwgInByb3BlcnR5IiwgImN1c3RvbUVsZW1lbnQiXQp9Cg==