@ilamy/calendar 1.8.0 → 1.8.1
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.
- package/dist/index.d.ts +16 -8
- package/dist/index.js +5 -5
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import{RRule as gU}from"rrule";import{AnimatePresence as N4,motion as V4}from"motion/react";import{clsx as L4}from"clsx";import{twMerge as A4}from"tailwind-merge";import Y0 from"dayjs";import Z4 from"dayjs/plugin/isBetween.js";import X4 from"dayjs/plugin/isSameOrAfter.js";import J4 from"dayjs/plugin/isSameOrBefore.js";import Q4 from"dayjs/plugin/localeData.js";import Y4 from"dayjs/plugin/localizedFormat.js";import q4 from"dayjs/plugin/minMax.js";import U4 from"dayjs/plugin/timezone.js";import z4 from"dayjs/plugin/utc.js";import _4 from"dayjs/plugin/weekday.js";import K4 from"dayjs/plugin/weekOfYear.js";var P5,G4=(P,$,Z)=>{let X=$.prototype,J=Z.tz.setDefault;Z.tz.setDefault=(_)=>{return P5=_,J(_)};let{startOf:Y,endOf:Q}=X;function q(_,z){let G=_.$x?.$timezone||P5;if(!G)return z;let K=Z.tz(z.format("YYYY-MM-DDTHH:mm:ss"),G).utcOffset();if(z.utcOffset()!==K)return z.tz(G,!0);return z}X.startOf=function(_,z){let G=Y.call(this,_,z);return q(this,G)},X.endOf=Q};Y0.extend(_4);Y0.extend(K4);Y0.extend(X4);Y0.extend(J4);Y0.extend(Z4);Y0.extend(q4);Y0.extend(U4);Y0.extend(z4);Y0.extend(Q4);Y0.extend(Y4);Y0.extend(G4);var $5=(...P)=>{return Y0.tz(...P)};Object.assign($5,Y0);var T=$5;var h0=1,Z5=24,F0=24,ZP=4,X5="bg-secondary text-muted-foreground pointer-events-none",E0={sunday:0,monday:1,tuesday:2,wednesday:3,thursday:4,friday:5,saturday:6};function A(...P){return A4(L4(P))}var kP=(P)=>{if(!P||P.length===0)return;return new Set(P.map(($)=>E0[$]))};function XP(P){if(P===void 0)return;if(T.isDayjs(P))return P;let $=T(P);return $.isValid()?$:void 0}var J5=(P,$)=>{let Z={...P};for(let X of $)delete Z[X];return Z};function mP(P){if(!P||!P.length)return[];return P.map(($)=>{return{...$,start:T.isDayjs($.start)?$.start:T($.start),end:T.isDayjs($.end)?$.end:T($.end)}})}import{jsx as Q5}from"react/jsx-runtime";var W4={hidden:({direction:P})=>({opacity:0,x:P==="horizontal"?10:0,y:P==="vertical"?-10:0}),visible:({delay:P})=>({opacity:1,x:0,y:0,transition:{duration:0.2,ease:[0.4,0,0.2,1],delay:P}}),exit:({direction:P})=>({opacity:0,x:P==="horizontal"?-10:0,y:P==="vertical"?-10:0,transition:{duration:0.15}})},D=({children:P,transitionKey:$,delay:Z=0,className:X,direction:J="vertical",layout:Y,layoutId:Q,"data-testid":q,ref:_,...z})=>Q5(N4,{mode:"wait",children:Q5(V4.div,{animate:"visible",className:A("inline-block w-full",X),custom:{delay:Z,direction:J},"data-testid":q,exit:"exit",initial:"hidden",layout:Y,layoutId:Q,ref:_,variants:W4,...z,children:P},$)});D.displayName="AnimatedSection";import{DndContext as j4,MouseSensor as x4,pointerWithin as v4,TouchSensor as y4,useSensor as B5,useSensors as c4}from"@dnd-kit/core";import{useRef as O5,useState as i4}from"react";import{Slot as F4}from"@radix-ui/react-slot";import{cva as M4}from"class-variance-authority";import{jsx as O4}from"react/jsx-runtime";var B4=M4("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",{variants:{variant:{default:"bg-primary text-primary-foreground hover:bg-primary/90",destructive:"bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60",outline:"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50",secondary:"bg-secondary text-secondary-foreground hover:bg-secondary/80",ghost:"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-9 px-4 py-2 has-[>svg]:px-3",sm:"h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5",lg:"h-10 rounded-md px-6 has-[>svg]:px-4",icon:"size-9","icon-sm":"size-8","icon-lg":"size-10"}},defaultVariants:{variant:"default",size:"default"}});function g({className:P,variant:$,size:Z,asChild:X=!1,...J}){return O4(X?F4:"button",{className:A(B4({variant:$,size:Z,className:P})),"data-slot":"button",...J})}import*as $0 from"@radix-ui/react-dialog";import{XIcon as f4}from"lucide-react";import{jsx as M0,jsxs as V2}from"react/jsx-runtime";function JP({...P}){return M0($0.Root,{"data-slot":"dialog",...P})}function I4({...P}){return M0($0.Portal,{"data-slot":"dialog-portal",...P})}function R4({className:P,...$}){return M0($0.Overlay,{className:A("data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50",P),"data-slot":"dialog-overlay",...$})}function QP({className:P,children:$,...Z}){return V2(I4,{"data-slot":"dialog-portal",children:[M0(R4,{}),V2($0.Content,{className:A("bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-lg max-h-[90%]",P),"data-slot":"dialog-content",...Z,children:[$,V2($0.Close,{className:"ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",children:[M0(f4,{}),M0("span",{className:"sr-only",children:"Close"})]})]})]})}function YP({className:P,...$}){return M0("div",{className:A("flex flex-col gap-2 text-center sm:text-left",P),"data-slot":"dialog-header",...$})}function gP({className:P,...$}){return M0("div",{className:A("flex flex-col-reverse gap-2 sm:flex-row sm:justify-end",P),"data-slot":"dialog-footer",...$})}function qP({className:P,...$}){return M0($0.Title,{className:A("text-lg leading-none font-semibold",P),"data-slot":"dialog-title",...$})}function CP({className:P,...$}){return M0($0.Description,{className:A("text-muted-foreground text-sm",P),"data-slot":"dialog-description",...$})}import{useContext as V5}from"react";import{createContext as S4}from"react";var hP=S4(void 0);import{createContext as p4}from"react";var EP=p4(void 0);import{useCallback as a0,useMemo as w4}from"react";import{useCallback as t,useEffect as M2,useMemo as L5,useRef as B2,useState as n0}from"react";import{RRule as T4}from"rrule";var DP=(P)=>{return new Date(Date.UTC(P.year(),P.month(),P.date(),P.hour(),P.minute(),P.second(),P.millisecond()))},H4=(P,$)=>{return $.year(P.getUTCFullYear()).month(P.getUTCMonth()).date(P.getUTCDate()).hour(P.getUTCHours()).minute(P.getUTCMinutes()).second(P.getUTCSeconds()).millisecond(P.getUTCMilliseconds())},UP=(P)=>{return Boolean(P.rrule||P.recurrenceId||P.uid)},D0=(P)=>{return P.uid||`${P.id}@ilamy.calendar`},q5=(P,$)=>{let Z=D0($),X=P.findIndex((J)=>D0(J)===Z&&J.rrule&&!J.recurrenceId);if(X===-1)throw Error("Base recurring event not found");return X},U5=(P)=>P.start.subtract(1,"day").endOf("day").toDate(),Y5=(P,$)=>{let Z=$.diff($.startOf("day"),"millisecond");return P.startOf("day").add(Z,"millisecond")},b4=(P,$)=>{let Z=P.start;if($.start)Z=Y5(P.start,$.start);let X=P.end;if($.start&&$.end)X=Z.add($.end.diff($.start),"millisecond");else if($.start)X=Z.add(P.end.diff(P.start),"millisecond");else if($.end)X=Y5(P.end,$.end);let J=$.rrule??P.rrule,Y;if(J)Y={...J,dtstart:Z.toDate()};return{start:Z,end:X,rrule:Y}},W2=({event:P,currentEvents:$,startDate:Z,endDate:X})=>{if(!P.rrule)return[];try{let J=DP(P.start),Y=P.rrule.until?DP(T(P.rrule.until)):void 0,Q={...P.rrule,dtstart:J,until:Y},q=new T4(Q),_=D0(P),z=$.filter((f)=>f.recurrenceId&&D0(f)===_),G=P.end.diff(P.start),K=DP(Z.subtract(G,"millisecond")),V=DP(X);return q.between(K,V,!0).map((f,F)=>{let U=H4(f,P.start),L=z.find((k)=>XP(k.recurrenceId)?.isSame(U));if(L)return{...P,...L};let W=P.end.diff(P.start),I=U.add(W,"millisecond"),R=`${P.id}_${F}`,S=D0(P);return{...P,id:R,start:U,end:I,uid:S,rrule:void 0}}).filter((f)=>{if(P.exdates&&P.exdates.length>0){let L=f.start.toISOString();if(P.exdates?.includes(L))return!1}return f.start.isSameOrBefore(X)&&f.end.isSameOrAfter(Z)})}catch(J){throw Error(`Invalid RRULE options: ${JSON.stringify(P.rrule)}. Error: ${J instanceof Error?J.message:"Unknown error"}`)}},z5=({targetEvent:P,updates:$,currentEvents:Z,scope:X})=>{let J=[...Z],Y=q5(J,P),Q=J[Y];switch(X){case"this":{let q=P.start.toISOString(),z=[...Q.exdates||[],q],G={...Q,exdates:z};J[Y]=G;let K=`${P.id}_modified_${Date.now()}`,V={...J5(P,["width","height","top","left","right"]),...$,id:K,recurrenceId:q,uid:D0(Q),rrule:void 0};J.push(V);break}case"following":{let q=U5(P),_={...Q,rrule:{...Q.rrule,until:q}};J[Y]=_;let z=Q.end.diff(Q.start),G=$.start||P.start,K=$.end||G.add(z),V=`${Q.id}_following`,M=`${V}@ilamy.calendar`,N={...Q,...$,rrule:{...Q.rrule,...$.rrule,dtstart:G.toDate()},id:V,uid:M,start:G,end:K,recurrenceId:void 0};J.push(N);break}case"all":{let q=b4(Q,$);J[Y]={...Q,...$,start:q.start,end:q.end,rrule:q.rrule};break}default:throw Error(`Invalid scope: ${X}. Must be 'this', 'following', or 'all'`)}return J},_5=({targetEvent:P,currentEvents:$,scope:Z})=>{let X=[...$],J=q5(X,P),Y=X[J];switch(Z){case"this":{let Q=P.start.toISOString(),_=[...Y.exdates||[],Q],z={...Y,exdates:_};X[J]=z;break}case"following":{let Q={...Y,rrule:{...Y.rrule,until:U5(P)}};X[J]=Q;break}case"all":{let Q=D0(P);return X.filter((_)=>D0(_)!==Q)}default:throw Error(`Invalid scope: ${Z}. Must be 'this', 'following', or 'all'`)}return X};var F2={today:"Today",create:"Create",new:"New",update:"Update",delete:"Delete",cancel:"Cancel",export:"Export",event:"Event",events:"Events",newEvent:"New Event",title:"Title",description:"Description",location:"Location",allDay:"All day",startDate:"Start Date",endDate:"End Date",startTime:"Start Time",searchTime:"Search time...",endTime:"End Time",color:"Color",createEvent:"Create Event",editEvent:"Edit Event",addNewEvent:"Add a new event to your calendar",editEventDetails:"Edit your event details",eventTitlePlaceholder:"Event title",eventDescriptionPlaceholder:"Event description (optional)",eventLocationPlaceholder:"Event location (optional)",repeat:"Repeat",repeats:"Repeats",customRecurrence:"Custom recurrence",daily:"Daily",weekly:"Weekly",monthly:"Monthly",yearly:"Yearly",interval:"Interval",repeatOn:"Repeat on",never:"Never",count:"Count",every:"Every",ends:"Ends",after:"After",occurrences:"occurrences",on:"On",editRecurringEvent:"Edit recurring event",deleteRecurringEvent:"Delete recurring event",editRecurringEventQuestion:"is a recurring event. How would you like to edit it?",deleteRecurringEventQuestion:"is a recurring event. How would you like to delete it?",thisEvent:"This event",thisEventDescription:"Only change this specific occurrence",thisAndFollowingEvents:"This and following events",thisAndFollowingEventsDescription:"Edit this and all future occurrences",allEvents:"All events",allEventsDescription:"Edit the entire recurring series",onlyChangeThis:"Only change this specific occurrence",changeThisAndFuture:"Change this and all future occurrences",changeEntireSeries:"Change the entire recurring series",onlyDeleteThis:"Only delete this specific occurrence",deleteThisAndFuture:"Delete this and all future occurrences",deleteEntireSeries:"Delete the entire recurring series",month:"Month",week:"Week",day:"Day",year:"Year",more:"more",resources:"Resources",resource:"Resource",time:"Time",date:"Date",noResourcesVisible:"No resources visible",addResourcesOrShowExisting:"Add resources or show existing ones"};function u(P){return P.isSame(T(),"day")}function n(P){return P.format("YYYY-MM-DD")}function r(P,$){let Z=P.startOf("week").day($),X=P.isBefore(Z)?Z.subtract(1,"week"):Z;return Array.from({length:7},(J,Y)=>X.add(Y,"day"))}function zP(P,$){let Z=r(P.startOf("month"),$);return Array.from({length:6},(X,J)=>{let Y=Z[0].add(J,"week");return r(Y,$)})}function K5(P){let $=P.daysInMonth(),Z=P.startOf("month");return Array.from({length:$},(X,J)=>Z.add(J,"day"))}function G5({referenceDate:P=T(),length:$=24}={}){let Z=P.startOf("day");return Array.from({length:$},(X,J)=>Z.hour(J).minute(0).second(0).millisecond(0))}function _P(P,$){let Z=new Set($.map((X)=>String(X.id)));return P.filter((X)=>Z.has(String(X.id)))}function jP(P,$,Z){let X=P.start.isSameOrAfter($)&&P.start.isSameOrBefore(Z),J=P.end.isSameOrAfter($)&&P.end.isSameOrBefore(Z),Y=P.start.isBefore($)&&P.end.isAfter(Z);return X||J||Y}var A5={day:"day",week:"week",month:"month",year:"year"},O2=(P,$,Z)=>{if($==="day"||$==="year")return{start:P.startOf($),end:P.endOf($)};if($==="week"){let J=r(P,Z);return{start:J[0].startOf("day"),end:J[6].endOf("day")}}let X=zP(P,Z);return{start:X[0][0].startOf("day"),end:X[5][6].endOf("day")}},xP=(P)=>{let{events:$=[],firstDayOfWeek:Z=0,initialView:X="month",initialDate:J=T(),businessHours:Y,onEventAdd:Q,onEventUpdate:q,onEventDelete:_,onDateChange:z,onViewChange:G,locale:K,timezone:V,translations:M,translator:N}=P,[f,F]=n0(T.isDayjs(J)?J:T(J)),[U,L]=n0(X),[W,I]=n0($),[R,S]=n0(!1),[w,k]=n0(null),[h,j]=n0(null),[c,e]=n0(K||"en"),E=B2($),m=B2(V),i=B2(void 0),_0=L5(()=>{if(N)return N;let p=M||F2;return(b)=>p[b]||b},[M,N]),G0=t((p,b)=>{let l=[];for(let b0 of W)if(b0.rrule)l.push(...W2({event:b0,currentEvents:W,startDate:p,endDate:b}));else if(jP(b0,p,b))l.push(b0);return l},[W]),W0=t(()=>{return O2(f,U,Z)},[f,U,Z]),S0=L5(()=>{let{start:p,end:b}=W0();return G0(p,b)},[G0,W0]);M2(()=>{if($!==E.current)I($),E.current=$},[$]),M2(()=>{if(K&&K!==i.current)e(K),T.locale(K),F((p)=>p.locale(K)),i.current=K},[K]),M2(()=>{if(V&&V!==m.current)T.tz.setDefault(V),F((p)=>p.tz(V)),I((p)=>p.map((b)=>({...b,start:b.start.tz(V),end:b.end.tz(V)}))),m.current=V},[V]);let J0=t((p)=>{F(p);let b=O2(p,U,Z);z?.(p,b)},[z,U,Z]),L0=J0,d=t((p)=>{let b=p===1?f.add(1,A5[U]):f.subtract(1,A5[U]);J0(b)},[f,U,J0]),p0=t(()=>d(1),[d]),T0=t(()=>d(-1),[d]),H0=t(()=>J0(T()),[J0]),y=t((p)=>{I((b)=>[...b,p]),Q?.(p)},[Q]),X0=t((p,b)=>{let l=W.find((N2)=>N2.id===p);if(!l)return;let b0={...l,...b};I((N2)=>N2.map((e2)=>e2.id===p?b0:e2)),q?.(b0)},[W,q]),e0=t((p,b,l)=>{q?.({...p,...b}),I(z5({targetEvent:p,updates:b,currentEvents:W,scope:l.scope}))},[W,q]),PP=t((p,b)=>{_?.(p),I(_5({targetEvent:p,currentEvents:W,scope:b.scope}))},[W,_]),H=t((p)=>{let b=W.find((l)=>l.id===p);if(!b)return;I((l)=>l.filter((b0)=>b0.id!==p)),_?.(b)},[W,_]),P0=t((p)=>{if(p?.start)j(p.start);let b=p?.start??f;k({title:_0("newEvent"),start:b,end:p?.end??b.add(1,"hour"),resourceId:p?.resourceId,description:"",allDay:p?.allDay??!1}),S(!0)},[f,_0]),Q0=t(()=>{j(null),k(null),S(!1)},[]),A0=t((p)=>{L(p),G?.(p);let b=O2(f,p,Z);z?.(f,b)},[G,z,f,Z]),$P=t((p)=>{let b=p.uid;return W.find((l)=>(l.uid||`${l.id}@ilamy.calendar`)===b&&l.rrule)||null},[W]);return{currentDate:f,view:U,events:S0,rawEvents:W,isEventFormOpen:R,selectedEvent:w,selectedDate:h,firstDayOfWeek:Z,dayMaxEvents:ZP,currentLocale:c,businessHours:Y,setCurrentDate:F,selectDate:L0,setView:A0,nextPeriod:p0,prevPeriod:T0,today:H0,addEvent:y,updateEvent:X0,updateRecurringEvent:e0,deleteEvent:H,deleteRecurringEvent:PP,openEventForm:P0,closeEventForm:Q0,setSelectedEvent:k,setIsEventFormOpen:S,setSelectedDate:j,getEventsForDateRange:G0,findParentRecurringEvent:$P,t:_0}};import{jsx as k4}from"react/jsx-runtime";var f2=(P)=>{if(P.resourceIds)return P.resourceIds;if(P.resourceId!==void 0)return[P.resourceId];return[]},N5=({children:P,events:$=[],resources:Z=[],firstDayOfWeek:X=0,initialView:J="month",initialDate:Y,renderEvent:Q,onEventClick:q,onCellClick:_,onViewChange:z,onEventAdd:G,onEventUpdate:K,onEventDelete:V,onDateChange:M,locale:N,timezone:f,disableCellClick:F,disableEventClick:U,disableDragAndDrop:L,dayMaxEvents:W,eventSpacing:I=1,eventHeight:R=F0,stickyViewHeader:S=!0,viewHeaderClassName:w="",headerComponent:k,headerClassName:h,translations:j,translator:c,renderResource:e,renderEventForm:E,businessHours:m,timeFormat:i="12-hour",classesOverride:_0,orientation:G0="horizontal",renderCurrentTimeIndicator:W0,renderHour:S0,hideNonBusinessHours:J0=!1,hideExportButton:L0=!1,hiddenDays:d,weekViewGranularity:p0="hourly",slotDuration:T0=60,scrollTime:H0})=>{let y=xP({events:$,firstDayOfWeek:X,initialView:J,initialDate:Y,businessHours:m,onEventAdd:G,onEventUpdate:K,onEventDelete:V,onDateChange:M,onViewChange:z,locale:N,timezone:f,translations:j,translator:c}),X0=a0((p)=>y.events.filter((b)=>f2(b).includes(p)),[y.events]),e0=a0((p)=>y.events.filter((b)=>f2(b).some((l)=>p.includes(l))),[y.events]),PP=a0((p)=>{return Z.find((b)=>b.id===p)},[Z]),H=a0((p)=>{return Boolean(p.resourceIds&&p.resourceIds.length>1)},[]),P0=a0((p)=>{y.setSelectedEvent(p),y.setIsEventFormOpen(!0)},[y]),Q0=a0((p)=>{if(U)return;if(q)q(p);else P0(p)},[U,q,P0]),A0=a0((p)=>{if(F)return;if(_)_(p);else{let b={title:y.t("newEvent"),start:p.start,end:p.end,description:"",allDay:!1};if(p.resourceId!==void 0)b.resourceId=p.resourceId;y.setSelectedEvent(b),y.setSelectedDate(p.start),y.setIsEventFormOpen(!0)}},[_,F,y]),$P=w4(()=>({...y,resources:Z,getEventsForResource:X0,getEventsForResources:e0,getResourceById:PP,isEventCrossResource:H,getEventResourceIds:f2,onEventClick:Q0,onCellClick:A0,renderEvent:Q,renderResource:e,renderEventForm:E,headerComponent:k,headerClassName:h,locale:N,timezone:f,disableCellClick:F,disableEventClick:U,disableDragAndDrop:L,dayMaxEvents:W,eventSpacing:I,eventHeight:R,stickyViewHeader:S,viewHeaderClassName:w,businessHours:m,timeFormat:i,classesOverride:_0,orientation:G0,renderCurrentTimeIndicator:W0,renderHour:S0,hideNonBusinessHours:J0,hideExportButton:L0,hiddenDays:d,weekViewGranularity:p0,slotDuration:T0,scrollTime:H0}),[y,Z,X0,e0,PP,H,Q0,A0,Q,e,E,N,f,F,U,L,W,I,R,S,w,k,h,m,i,_0,G0,W0,S0,J0,L0,d,p0,T0,H0]);return k4(EP.Provider,{value:$P,children:P})};function O(P){let $=V5(EP),Z=V5(hP),X=$||Z;if(!X)throw Error("useSmartCalendarContext must be used within a CalendarProvider or ResourceCalendarProvider");return P?P(X):X}function m4(){let P=O();return{currentDate:P.currentDate,view:P.view,events:P.events,isEventFormOpen:P.isEventFormOpen,selectedEvent:P.selectedEvent,selectedDate:P.selectedDate,firstDayOfWeek:P.firstDayOfWeek,resources:P.resources||[],setCurrentDate:P.setCurrentDate,selectDate:P.selectDate,setView:P.setView,nextPeriod:P.nextPeriod,prevPeriod:P.prevPeriod,today:P.today,addEvent:P.addEvent,updateEvent:P.updateEvent,deleteEvent:P.deleteEvent,openEventForm:P.openEventForm,closeEventForm:P.closeEventForm,getEventsForResource:P.getEventsForResource,businessHours:P.businessHours}}import{jsx as j0,jsxs as vP}from"react/jsx-runtime";var g4=[{scope:"this",title:"thisEvent",editKey:"onlyChangeThis",deleteKey:"onlyDeleteThis"},{scope:"following",title:"thisAndFollowingEvents",editKey:"changeThisAndFuture",deleteKey:"deleteThisAndFuture"},{scope:"all",title:"allEvents",editKey:"changeEntireSeries",deleteKey:"deleteEntireSeries"}];function fP({isOpen:P,onClose:$,onConfirm:Z,operationType:X,eventTitle:J}){let{t:Y}=O((_)=>({t:_.t})),Q=(_)=>{Z(_),$()},q=X==="edit";return j0(JP,{onOpenChange:$,open:P,children:vP(QP,{className:"max-w-md",children:[vP(YP,{children:[j0(qP,{children:q?Y("editRecurringEvent"):Y("deleteRecurringEvent")}),vP(CP,{children:['"',J,'"'," ",q?Y("editRecurringEventQuestion"):Y("deleteRecurringEventQuestion")]})]}),j0("div",{className:"space-y-3",children:g4.map(({scope:_,title:z,editKey:G,deleteKey:K})=>j0(g,{className:"w-full justify-start h-auto p-4",onClick:()=>Q(_),variant:"outline",children:vP("div",{className:"text-left",children:[j0("div",{className:"font-medium",children:Y(z)}),j0("div",{className:"text-sm text-muted-foreground",children:Y(q?G:K)})]})},_))}),j0(gP,{children:j0(g,{onClick:$,variant:"outline",children:Y("cancel")})})]})})}var W5=(P,$)=>{let{active:Z,over:X}=P;if(!Z||!X||!$)return null;let J=X.data.current||{},Y=J.type==="time-cell",{resourceId:Q,allDay:q}=J,_;if(Y){let{date:V,hour:M=0,minute:N=0}=J;_=T(V).hour(M).minute(N)}else{let{date:V}=J;_=T(V)}let z=$.end.diff($.start,"second"),G=_.add(z,"second");if(G.isSame(G.startOf("day")))G=G.subtract(1,"day").endOf("day");let K={start:_,end:G,resourceId:Q,allDay:Y?!1:q??$.allDay};return{activeEvent:$,updates:K}};import{DragOverlay as C4}from"@dnd-kit/core";import{snapCenterToCursor as h4}from"@dnd-kit/modifiers";import{useImperativeHandle as E4,useState as D4}from"react";import{jsx as F5}from"react/jsx-runtime";var M5=({ref:P})=>{let[$,Z]=D4(null);return E4(P,()=>({setActiveEvent:Z})),F5(C4,{modifiers:[h4],children:$&&F5("div",{className:A("cursor-grab truncate rounded bg-amber-200 p-2 text-[10px] shadow-lg sm:text-xs w-20",$.backgroundColor||"bg-blue-500",$.color||"text-white"),children:$?.title})})};import{jsx as f5,jsxs as I5,Fragment as l4}from"react/jsx-runtime";var I2={isOpen:!1,event:null,updates:null};function yP({children:P}){let $=O5(null),Z=O5(null),{updateEvent:X,updateRecurringEvent:J,disableDragAndDrop:Y}=O((U)=>({updateEvent:U.updateEvent,updateRecurringEvent:U.updateRecurringEvent,disableDragAndDrop:U.disableDragAndDrop})),[Q,q]=i4({isOpen:!1,event:null,updates:null}),_=B5(x4,{activationConstraint:{distance:2}}),z=B5(y4,{activationConstraint:{delay:100,tolerance:5}}),G=c4(_,z),K=(U,L)=>{if(!U?.id||!L||Object.keys(L).length===0)return;if(UP(U))q({isOpen:!0,event:U,updates:L});else X(U.id,L)},V=(U)=>{if(!Q.event||!Q.updates){q(I2);return}try{J(Q.event,Q.updates,{scope:U,eventDate:Q.event.start})}catch{}finally{q(I2)}},M=()=>{q(I2)},N=(U)=>{let{active:L}=U;if(L.data.current?.type==="calendar-event")Z.current?.setActiveEvent(L.data.current.event),$.current=L.data.current.event},f=(U)=>{let L=W5(U,$.current);if(L){let{activeEvent:W,updates:I}=L;K(W,I)}$.current=null,Z.current?.setActiveEvent(null)},F=(U)=>{$.current=null};if(Y)return P;return I5(l4,{children:[I5(j4,{collisionDetection:v4,onDragCancel:F,onDragEnd:f,onDragStart:N,sensors:G,children:[P,f5(M5,{ref:Z})]}),f5(fP,{eventTitle:Q.event?.title||"",isOpen:Q.isOpen,onClose:M,onConfirm:V,operationType:"edit"})]})}import{useEffect as M$,useState as i0}from"react";import*as cP from"@radix-ui/react-checkbox";import{CheckIcon as u4}from"lucide-react";import{jsx as R2}from"react/jsx-runtime";function KP({className:P,...$}){return R2(cP.Root,{className:A("peer border-input dark:bg-input/30 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground dark:data-[state=checked]:bg-primary data-[state=checked]:border-primary focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive size-4 shrink-0 rounded-[4px] border shadow-xs transition-shadow outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50",P),"data-slot":"checkbox",...$,children:R2(cP.Indicator,{className:"flex items-center justify-center text-current transition-none","data-slot":"checkbox-indicator",children:R2(u4,{className:"size-3.5"})})})}import{PopoverClose as n4}from"@radix-ui/react-popover";import{Calendar as a4}from"lucide-react";import{useEffect as t4,useRef as s4,useState as e4}from"react";import{ChevronLeftIcon as o4,ChevronRightIcon as d4}from"lucide-react";import{useState as r4}from"react";import{jsx as K0,jsxs as S2}from"react/jsx-runtime";function R5({selected:P,defaultMonth:$,onSelect:Z,disabled:X,firstDayOfWeek:J=0,className:Y}){let[Q,q]=r4(()=>T($??P??new Date).startOf("month")),_=zP(Q,J),z=P?T(P).format("YYYY-MM-DD"):void 0,G=r(T(),J).map((K)=>K.format("dd"));return S2("div",{className:A("bg-background p-3 w-[280px]",Y),"data-slot":"calendar",children:[S2("div",{className:"flex items-center justify-between mb-2",children:[K0(g,{"aria-label":"Previous month",onClick:()=>q((K)=>K.subtract(1,"month")),size:"icon",variant:"ghost",children:K0(o4,{className:"size-4"})}),K0("div",{className:"text-sm font-medium select-none",children:Q.format("MMMM YYYY")}),K0(g,{"aria-label":"Next month",onClick:()=>q((K)=>K.add(1,"month")),size:"icon",variant:"ghost",children:K0(d4,{className:"size-4"})})]}),S2("table",{className:"w-full border-collapse",role:"grid",children:[K0("thead",{children:K0("tr",{children:G.map((K,V)=>K0("th",{className:"text-muted-foreground text-xs font-medium select-none py-1",children:K},V))})}),K0("tbody",{children:_.map((K,V)=>K0("tr",{children:K.map((M)=>{let N=!M.isSame(Q,"month"),f=M.format("YYYY-MM-DD")===z,F=X?.(M.toDate())??!1;return K0("td",{className:"p-0 text-center","data-disabled":F,"data-outside":N,"data-selected":f,role:"gridcell",tabIndex:-1,children:K0("button",{"aria-disabled":F,"aria-hidden":N,className:A("w-full aspect-square rounded-md text-sm select-none",!F&&"hover:bg-accent cursor-pointer",N&&"text-muted-foreground/50",u(M)&&!f&&"bg-accent text-accent-foreground",f&&"bg-primary text-primary-foreground font-medium",F&&"opacity-50 cursor-not-allowed"),"data-disabled":F,"data-selected":f,disabled:F||N,onClick:()=>Z?.(M.toDate()),tabIndex:N?-1:0,type:"button",children:M.format("D")})},M.toISOString())})},V))})]})]})}import*as w0 from"@radix-ui/react-popover";import{jsx as iP}from"react/jsx-runtime";function x0({...P}){return iP(w0.Root,{"data-slot":"popover",...P})}function v0({...P}){return iP(w0.Trigger,{"data-slot":"popover-trigger",...P})}function y0({className:P,align:$="center",sideOffset:Z=4,...X}){return iP(w0.Portal,{children:iP(w0.Content,{align:$,className:A("bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-72 origin-(--radix-popover-content-transform-origin) rounded-md border p-4 shadow-md outline-hidden",P),"data-slot":"popover-content",sideOffset:Z,...X})})}import{jsx as GP,jsxs as p2}from"react/jsx-runtime";function lP({date:P,closeOnSelect:$,onChange:Z,label:X="Pick a date",className:J,disabled:Y}){let Q=O((K)=>K.firstDayOfWeek),q=s4(null),[_,z]=e4(P);t4(()=>{z(P)},[P]);let G=(K)=>{if(z(K),$)q.current?.click();Z?.(K)};return GP("div",{className:J,children:p2(x0,{children:[GP(v0,{asChild:!0,children:p2(g,{className:A("data-[empty=true]:text-muted-foreground w-full justify-start text-left font-normal"),"data-empty":!P,variant:"outline",children:[GP(a4,{}),_?T(_).format("ll"):GP("span",{children:X})]})}),p2(y0,{align:"start",className:"w-auto p-0",children:[GP(n4,{ref:q,style:{display:"none"}}),GP(R5,{defaultMonth:_,disabled:Y,firstDayOfWeek:Q,onSelect:G,selected:_})]})]})})}import{jsx as P$}from"react/jsx-runtime";function t0({className:P,type:$,...Z}){return P$("input",{className:A("file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input flex h-9 w-full min-w-0 rounded-md border bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm","focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]","aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",P),"data-slot":"input",type:$,...Z})}import*as S5 from"@radix-ui/react-label";import{jsx as $$}from"react/jsx-runtime";function q0({className:P,...$}){return $$(S5.Root,{className:A("flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50",P),"data-slot":"label",...$})}import*as B0 from"@radix-ui/react-scroll-area";import{jsx as IP,jsxs as Z$}from"react/jsx-runtime";function O0({className:P,children:$,viewPortProps:Z,...X}){return Z$(B0.Root,{className:A("relative",P),"data-slot":"scroll-area",...X,children:[IP(B0.Viewport,{...Z,className:A("focus-visible:ring-ring/50 size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:outline-1",Z?.className),"data-slot":"scroll-area-viewport",children:$}),IP(k0,{}),IP(B0.Corner,{})]})}function k0({className:P,orientation:$="vertical",...Z}){return IP(B0.ScrollAreaScrollbar,{className:A("flex touch-none p-px transition-colors select-none",$==="vertical"&&"h-full w-2.5 border-l border-l-transparent",$==="horizontal"&&"h-2.5 flex-col border-t border-t-transparent",P),"data-slot":"scroll-area-scrollbar",orientation:$,...Z,children:IP(B0.ScrollAreaThumb,{className:"bg-border relative flex-1 rounded-full","data-slot":"scroll-area-thumb"})})}import{Clock as Q$}from"lucide-react";import{useEffect as Y$,useRef as T5,useState as T2}from"react";import{useMemo as X$}from"react";function p5({timeFormat:P="12-hour",minTime:$="00:00",maxTime:Z="23:45"}){return{timeOptions:X$(()=>{let Y=[],[Q,q]=$.split(":").map(Number),[_,z]=Z.split(":").map(Number),G=Q*60+q,K=_*60+z;for(let V=G;V<=K;V+=15){let M=Math.floor(V/60),N=V%60,f=`${M.toString().padStart(2,"0")}:${N.toString().padStart(2,"0")}`;Y.push(f)}return Y},[$,Z]),formatTime:(Y)=>{let[Q,q]=Y.split(":").map(Number),_=Q>=12?"PM":"AM",z=Q===0?12:Q>12?Q-12:Q;if(P==="24-hour")return`${Q.toString().padStart(2,"0")}:${q.toString().padStart(2,"0")}`;return`${z}:${q.toString().padStart(2,"0")} ${_}`}}}var LP=(P)=>String(P).padStart(2,"0"),J$=(P)=>typeof P==="number"?LP(P):P,B={col:{time:"time-col",date:"date-col",day:(P,$)=>{let Z=`day-col-${n(P)}`;return $!=null?`${Z}-resource-${$}`:Z},resource:(P,$)=>`${P}-col-resource-${$}`,allDay:(P,$)=>`all-day-col-${n(P)}-${$}`},cell:{day:(P,$,Z=0)=>{let X=n(P);return $!=null?`day-cell-${X}-${LP($)}-${LP(Z)}`:`day-cell-${X}`},verticalTime:(P)=>`vertical-time-${LP(P)}`,vertical:(P,$,Z,X)=>{let J=`vertical-cell-${n(P)}-${LP($)}-${LP(Z)}`;return X!=null?`${J}-resource-${X}`:J}},container:{vertical:{col:(P)=>`vertical-col-${P}`},horizontal:{row:(P)=>`horizontal-row-${P}`,rowLabel:(P)=>`horizontal-row-label-${P}`,event:(P)=>`horizontal-event-${P}`},eventsLayer:(P,$)=>`${P}-events-${$}`},header:{resource:{weekDay:"resource-week-day-header",timeLabel:(P,$)=>`resource-${P}-time-label-${J$($)}`},weekday:(P,$)=>`${P}-header-weekday-${$.toLowerCase()}`,week:{day:(P)=>`week-header-day-${P.toISOString()}`,hour:(P,$)=>`week-header-hour-${P.toISOString()}-${$}`,resource:(P)=>`week-header-resource-${P}`},year:{month:(P,$)=>$?`year-month-${$}-${P}`:`year-month-${P}`,day:(P,$)=>`year-day-${P}-${$}`}},allDayRow:(P)=>`allday-row-${P??"main"}`,listKey:(...P)=>P.join("-"),dayNumber:(P)=>u(P)?"day-number-today":`day-number-${P.format("D")}`,timePicker:(P)=>`time-picker-${P??""}`,droppable:{dayCell:(P,$)=>{let Z=P.toISOString(),X=$?.allDay?"-allday":"",J=$?.resourceId!=null?`-resource-${$.resourceId}`:"";return`drop-day-cell-${Z}${X}${J}`}}};import{jsx as c0,jsxs as H2}from"react/jsx-runtime";var q$=(P)=>{P.stopPropagation()};function H5({value:P,onChange:$,minTime:Z="00:00",maxTime:X="23:45",timeFormat:J="12-hour",placeholder:Y="Select time...",className:Q,disabled:q=!1,name:_}){let[z,G]=T2(!1),[K,V]=T2(""),M=T5(null),N=T5(null),[f,F]=T2(0),{timeOptions:U,formatTime:L}=p5({timeFormat:J,minTime:Z,maxTime:X}),W=U.filter((S)=>{return L(S).toLowerCase().includes(K.toLowerCase())}),I=(S)=>{$(S),G(!1),V("")};Y$(()=>{if(z){if(N.current)F(N.current.offsetWidth);setTimeout(()=>{M.current?.focus()},0)}},[z]);let R=P?L(P):Y;return H2(x0,{onOpenChange:G,open:z,children:[c0(v0,{asChild:!0,children:H2(g,{"aria-controls":"time-picker-listbox","aria-expanded":z,className:A("w-full justify-start",Q),"data-testid":B.timePicker(_),disabled:q,ref:N,role:"combobox",variant:"outline",children:[c0(Q$,{className:"mr-2 h-4 w-4"}),R]})}),H2(y0,{align:"start",className:"p-0",style:{width:f},children:[c0("div",{className:"p-2 border-b",children:c0(t0,{className:"h-8",onChange:(S)=>V(S.target.value),placeholder:"Search time...",ref:M,value:K})}),c0(O0,{className:"h-[200px]",onWheel:q$,children:c0("div",{className:"p-1",children:W.length===0?c0("div",{className:"py-6 text-center text-sm text-muted-foreground",children:"N/A"}):W.map((S)=>{let w=L(S);return c0("button",{className:A("relative flex w-full cursor-pointer select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none transition-colors hover:bg-accent hover:text-accent-foreground",S===P&&"bg-accent text-accent-foreground"),onClick:()=>I(S),type:"button",children:w},S)})})})]})]})}var b2=(P,$)=>{if(!$)return!0;let Z=!1;return uP($,{date:P,onMatch:()=>{Z=!0}}),Z},b5=({date:P,hour:$,minute:Z=0,businessHours:X})=>{if(!X)return!0;if($===void 0)return b2(P,X);let J=!1,Y=$*60+Z;return uP(X,{date:P,onMatch:(Q)=>{let q=Q.startTime??9,_=Q.endTime??17,z=q*60,G=_*60;if(Y>=z&&Y<G)J=!0}}),J},uP=(P,$)=>{let{date:Z,onMatch:X}=$;if(!P)return;let J=Array.isArray(P)?P:[P];for(let Y of J)if(Z&&Y.daysOfWeek){let Q=Z.day();if(Y.daysOfWeek.some((q)=>E0[q]===Q))X(Y)}else X(Y)},oP=(P)=>{let{allDates:$,businessHours:Z,resourceBusinessHours:X=[],hideNonBusinessHours:J}=P,Y=24,Q=0,q=!1,_=(G)=>{q=!0,Y=Math.min(Y,G.startTime??9),Q=Math.max(Q,G.endTime??17)},z=(G)=>{uP(Z,{date:G,onMatch:_});for(let K of X)uP(K,{date:G,onMatch:_})};for(let G of $)z(G);if(!q&&J){if(z(),!q)Y=9,Q=17,q=!0}return{minStart:Y,maxEnd:Q,hasBusinessHours:q}};var w2=(P,$,Z)=>{let[X,J]=$.split(":").map(Number),Y=T(P).hour(X).minute(J);return Z?Y.hour(0).minute(0):Y},w5=(P,$,Z)=>{let[X,J]=$.split(":").map(Number),Y=T(P).hour(X).minute(J);return Z?Y.hour(23).minute(59):Y},k2=(P,$)=>{if(!$)return{min:"00:00",max:"23:59"};let Z=T(P),{minStart:X,maxEnd:J,hasBusinessHours:Y}=oP({allDates:[Z],businessHours:$,hideNonBusinessHours:!1});if(!Y)return{min:"00:00",max:"23:59"};return{min:`${X.toString().padStart(2,"0")}:00`,max:`${(J-1).toString().padStart(2,"0")}:45`}};import{useEffect as G$,useState as y5}from"react";import{RRule as Z0}from"rrule";import{jsx as dP}from"react/jsx-runtime";function k5({className:P,...$}){return dP("div",{className:A("text-card-foreground flex flex-col gap-6 rounded-xl border shadow-sm",P),"data-slot":"card",...$})}function m5({className:P,...$}){return dP("div",{className:A("@container/card-header grid auto-rows-min grid-rows-[auto_auto] items-start gap-1.5 p-4 pb-0 has-data-[slot=card-action]:grid-cols-[1fr_auto]",P),"data-slot":"card-header",...$})}function g5({className:P,...$}){return dP("div",{className:A("leading-none font-semibold",P),"data-slot":"card-title",...$})}function C5({className:P,...$}){return dP("div",{className:A("p-4 pt-0",P),"data-slot":"card-content",...$})}import*as C from"@radix-ui/react-select";import{CheckIcon as U$,ChevronDownIcon as h5,ChevronUpIcon as z$}from"lucide-react";import{jsx as s,jsxs as m2}from"react/jsx-runtime";function E5({...P}){return s(C.Root,{"data-slot":"select",...P})}function D5({...P}){return s(C.Value,{"data-slot":"select-value",...P})}function j5({className:P,size:$="default",children:Z,...X}){return m2(C.Trigger,{className:A("border-input data-placeholder:text-muted-foreground [&_svg:not([class*='text-'])]:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 dark:hover:bg-input/50 flex w-fit items-center justify-between gap-2 rounded-md border bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",P),"data-size":$,"data-slot":"select-trigger",...X,children:[Z,s(C.Icon,{asChild:!0,children:s(h5,{className:"size-4 opacity-50"})})]})}function x5({className:P,children:$,position:Z="popper",align:X="center",...J}){return s(C.Portal,{children:m2(C.Content,{align:X,className:A("bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 relative z-50 max-h-(--radix-select-content-available-height) min-w-32 origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border shadow-md",Z==="popper"&&"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",P),"data-slot":"select-content",position:Z,...J,children:[s(_$,{}),s(C.Viewport,{className:A("p-1",Z==="popper"&&"h-(--radix-select-trigger-height) w-full min-w-(--radix-select-trigger-width) scroll-my-1"),children:$}),s(K$,{})]})})}function v5({className:P,children:$,...Z}){return m2(C.Item,{className:A("focus:bg-accent focus:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2",P),"data-slot":"select-item",...Z,children:[s("span",{className:"absolute right-2 flex size-3.5 items-center justify-center",children:s(C.ItemIndicator,{children:s(U$,{className:"size-4"})})}),s(C.ItemText,{children:$})]})}function _$({className:P,...$}){return s(C.ScrollUpButton,{className:A("flex cursor-default items-center justify-center py-1",P),"data-slot":"select-scroll-up-button",...$,children:s(z$,{className:"size-4"})})}function K$({className:P,...$}){return s(C.ScrollDownButton,{className:A("flex cursor-default items-center justify-center py-1",P),"data-slot":"select-scroll-down-button",...$,children:s(h5,{className:"size-4"})})}import{jsx as x,jsxs as U0,Fragment as V$}from"react/jsx-runtime";var C2={DAILY:Z0.DAILY,WEEKLY:Z0.WEEKLY,MONTHLY:Z0.MONTHLY,YEARLY:Z0.YEARLY},L$=Object.fromEntries(Object.entries(C2).map(([P,$])=>[$,P])),g2=[Z0.SU,Z0.MO,Z0.TU,Z0.WE,Z0.TH,Z0.FR,Z0.SA],A$=[{type:"never",id:"never",labelKey:"never"},{type:"count",id:"after",labelKey:"after"},{type:"until",id:"on",labelKey:"on"}],c5=(P)=>Math.max(1,Number.parseInt(P,10)||1),N$=(P,$)=>{if(!P)return $("customRecurrence");try{let Z=new Z0(P).toText();return Z&&!Z.toLowerCase().includes("error")?Z.charAt(0).toUpperCase()+Z.slice(1):$("customRecurrence")}catch{return $("customRecurrence")}},i5=({value:P,onChange:$})=>{let{t:Z,firstDayOfWeek:X}=O((U)=>({t:U.t,firstDayOfWeek:U.firstDayOfWeek})),[J,Y]=y5(!!P),[Q,q]=y5(()=>P||null),_=g2.map((U,L)=>({value:U,label:T().day(L).format("ddd")})),z=g2.map((U,L)=>_[(L+X)%7]);G$(()=>{if(Y(!!P),P)q(P)},[P]);let G=(U)=>{if(!Q)return;let L={...Q,...U};q(L),$(J?L:null)},K=(U)=>{if(Y(U),!U){$(null);return}if(Q){$(Q);return}let L={freq:Z0.DAILY,interval:1};q(L),$(L)},V=(U)=>{let L=Q?.byweekday||[],W=g2[U],I=L.includes(W)?L.filter((R)=>R!==W):[...L,W];G({byweekday:I.length?I:void 0})},M=(U)=>{let L={count:void 0,until:void 0};if(U==="count")L.count=Q?.count||1;if(U==="until")L.until=Q?.until||T().add(1,"month").endOf("day").toDate();G(L)},N=Q?.until?"until":Q?.count?"count":"never",f=L$[Q?.freq??Z0.DAILY]||"DAILY",F=Array.isArray(Q?.byweekday)?Q.byweekday:Q?.byweekday?[Q.byweekday]:[];return U0(k5,{"data-testid":"recurrence-editor",children:[U0(m5,{className:"pb-3",children:[U0("div",{className:"flex items-center space-x-2",children:[x(KP,{checked:J,"data-testid":"toggle-recurrence",id:"recurring",onCheckedChange:K}),x(g5,{className:"text-sm",children:Z("repeat")})]}),J&&P&&x("p",{className:"text-xs text-muted-foreground",children:N$(P,Z)})]}),J&&x(C5,{className:"pt-0",children:U0("div",{className:"space-y-4",children:[U0("div",{className:"grid grid-cols-2 gap-4",children:[U0("div",{children:[x(q0,{className:"text-xs",htmlFor:"frequency",children:Z("repeats")}),U0(E5,{onValueChange:(U)=>G({freq:C2[U]}),value:f,children:[x(j5,{className:"h-8","data-testid":"frequency-select",id:"frequency",children:x(D5,{})}),x(x5,{children:Object.keys(C2).map((U)=>x(v5,{value:U,children:Z(U.toLowerCase())},U))})]})]}),U0("div",{children:[x(q0,{className:"text-xs",htmlFor:"interval",children:Z("every")}),x(t0,{className:"h-8",id:"interval",min:"1",onChange:(U)=>G({interval:c5(U.target.value)}),type:"number",value:Q?.interval||1})]})]}),Q?.freq===Z0.WEEKLY&&U0("div",{children:[x(q0,{className:"text-xs",children:Z("repeatOn")}),x("div",{className:"flex flex-wrap gap-1 mt-1",children:z.map((U,L)=>U0("div",{className:"flex items-center space-x-1",children:[x(KP,{checked:F.includes(U.value),id:B.listKey("day",L),onCheckedChange:()=>V(L)}),x(q0,{className:"text-xs cursor-pointer",htmlFor:B.listKey("day",L),children:U.label})]},B.listKey("weekday",L)))})]}),U0("div",{children:[x(q0,{className:"text-xs",children:Z("ends")}),x("div",{className:"space-y-2 mt-1",children:A$.map(({type:U,id:L,labelKey:W})=>U0("div",{className:"flex items-center space-x-2",children:[x(KP,{checked:N===U,id:L,onCheckedChange:()=>M(U)}),x(q0,{className:"text-xs",htmlFor:L,children:Z(W)}),U==="count"&&N==="count"&&U0(V$,{children:[x(t0,{className:"h-6 w-16 text-xs","data-testid":"count-input",min:"1",onChange:(I)=>G({count:c5(I.target.value)}),type:"number",value:Q?.count||1}),x("span",{className:"text-xs",children:Z("occurrences")})]}),U==="until"&&N==="until"&&x(lP,{className:"h-6",date:Q?.until??void 0,onChange:(I)=>G({until:I?T(I).endOf("day").toDate():void 0})})]},U))})]})]})})]})};import{useCallback as rP,useState as W$}from"react";var l5={isOpen:!1,operationType:"edit",event:null};function u5(P){let{updateRecurringEvent:$,deleteRecurringEvent:Z}=O((z)=>({updateRecurringEvent:z.updateRecurringEvent,deleteRecurringEvent:z.deleteRecurringEvent})),[X,J]=W$(l5),Y=rP((z,G)=>{J({isOpen:!0,operationType:"edit",event:z,updates:G,onConfirm:(K)=>{$(z,G,{scope:K,eventDate:z.start})}})},[$]),Q=rP((z)=>{J({isOpen:!0,operationType:"delete",event:z,onConfirm:(G)=>{Z(z,{scope:G,eventDate:z.start})}})},[Z]),q=rP(()=>J(l5),[]),_=rP((z)=>{if(X.onConfirm)X.onConfirm(z);q(),P?.()},[X,q,P]);return{dialogState:X,openEditDialog:Y,openDeleteDialog:Q,closeDialog:q,handleConfirm:_}}import{useMemo as F$}from"react";var nP=(P)=>{let{businessHours:$,getResourceById:Z}=O((X)=>({businessHours:X.businessHours,getResourceById:X.getResourceById}));return F$(()=>{if(P!=null&&Z){let X=Z(P);if(X?.businessHours)return X.businessHours}return $},[P,Z,$])};import{jsx as v,jsxs as f0,Fragment as B$}from"react/jsx-runtime";var o5=[{value:"bg-blue-100 text-blue-800",label:"Blue"},{value:"bg-green-100 text-green-800",label:"Green"},{value:"bg-purple-100 text-purple-800",label:"Purple"},{value:"bg-red-100 text-red-800",label:"Red"},{value:"bg-yellow-100 text-yellow-800",label:"Yellow"},{value:"bg-pink-100 text-pink-800",label:"Pink"},{value:"bg-indigo-100 text-indigo-800",label:"Indigo"},{value:"bg-amber-100 text-amber-800",label:"Amber"},{value:"bg-emerald-100 text-emerald-800",label:"Emerald"},{value:"bg-sky-100 text-sky-800",label:"Sky"},{value:"bg-violet-100 text-violet-800",label:"Violet"},{value:"bg-rose-100 text-rose-800",label:"Rose"},{value:"bg-teal-100 text-teal-800",label:"Teal"},{value:"bg-orange-100 text-orange-800",label:"Orange"}],h2=({name:P,label:$,placeholder:Z,value:X,required:J=!1,onChange:Y})=>f0("div",{className:"grid gap-1 sm:gap-2",children:[v(q0,{className:"text-xs sm:text-sm",htmlFor:P,children:$}),v(t0,{className:"h-8 text-sm sm:h-9",id:P,name:P,onChange:Y,placeholder:Z,required:J,value:X})]}),d5=({selectedEvent:P,onClose:$,onUpdate:Z,onDelete:X,onAdd:J})=>{let{dialogState:Y,openEditDialog:Q,openDeleteDialog:q,closeDialog:_,handleConfirm:z}=u5($),{findParentRecurringEvent:G,t:K,timeFormat:V}=O((H)=>({findParentRecurringEvent:H.findParentRecurringEvent,t:H.t,timeFormat:H.timeFormat})),M=nP(P?.resourceId),N=P?.start??T(),f=P?.end??T().add(1,"hour"),F=P?G(P):null,[U,L]=i0(N.toDate()),[W,I]=i0(f.toDate()),[R,S]=i0(P?.allDay||!1),[w,k]=i0(P?.color||o5[0].value),[h,j]=i0(N.format("HH:mm")),[c,e]=i0(f.format("HH:mm")),[E,m]=i0({title:P?.title||"",description:P?.description||"",location:P?.location||""}),[i,_0]=i0(()=>{return P?.rrule||F?.rrule||null}),G0=(H)=>{if(!H)return;if(L(H),T(H).isAfter(T(W)))I(H)},W0=(H)=>{if(!H)return;if(I(H),H&&T(H).isBefore(T(U)))L(H)},S0=(H)=>{if(j(H),T(U).isSame(T(W),"day")&&H>c)e(H)},J0=(H)=>{if(e(H),T(U).isSame(T(W),"day")&&H<h)j(H)},L0=(H)=>{let{name:P0,value:Q0}=H.target;m((A0)=>({...A0,[P0]:Q0}))};M$(()=>{if(R)e("23:59")},[R]);let d=(H)=>{H.preventDefault();let P0=w2(U,h,R),Q0=w5(W,c,R),A0={id:P?.id||T().format("YYYYMMDDHHmmss"),title:E.title,start:P0,end:Q0,resourceId:P?.resourceId,description:E.description,location:E.location,allDay:R,color:w,rrule:i||void 0};if(P?.id&&UP(P)){Q(P,{title:E.title,start:P0,end:Q0,description:E.description,location:E.location,allDay:R,color:w,rrule:i||void 0});return}if(P?.id)Z?.(A0);else J?.(A0);$()},p0=()=>{if(P?.id){if(UP(P)){q(P);return}X?.(P),$()}},T0=(H)=>{if(!H){_0(null);return}let P0=w2(U,h,R);_0({...H,dtstart:P0.toDate()})},H0=M?(H)=>!b2(T(H),M):void 0,y=k2(U,M),X0=k2(W,M),e0=[["startDate",U,G0],["endDate",W,W0]],PP=[["startTime","start-time",h,S0,y],["endTime","end-time",c,J0,X0]];return f0(B$,{children:[f0("form",{className:"flex flex-col flex-1 min-h-0",onSubmit:d,children:[v(O0,{className:"flex-1 min-h-0",children:f0("div",{className:"grid gap-3 sm:gap-4 p-1",children:[v(h2,{label:K("title"),name:"title",onChange:L0,placeholder:K("eventTitlePlaceholder"),required:!0,value:E.title}),v(h2,{label:K("description"),name:"description",onChange:L0,placeholder:K("eventDescriptionPlaceholder"),value:E.description}),f0("div",{className:"flex items-center space-x-2",children:[v(KP,{checked:R,id:"allDay",onCheckedChange:(H)=>S(H===!0)}),v(q0,{className:"text-xs sm:text-sm",htmlFor:"allDay",children:K("allDay")})]}),v("div",{className:"grid grid-cols-2 gap-2 sm:gap-4",children:e0.map(([H,P0,Q0])=>f0("div",{children:[v(q0,{className:"text-xs sm:text-sm",children:K(H)}),v(lP,{className:"mt-1",closeOnSelect:!0,date:P0,disabled:H0,onChange:Q0})]},H))}),!R&&v("div",{className:"grid grid-cols-2 gap-2 sm:gap-4",children:PP.map(([H,P0,Q0,A0,$P])=>f0("div",{children:[v(q0,{className:"text-xs sm:text-sm",children:K(H)}),v(H5,{className:"mt-1 h-8 text-sm sm:h-9",maxTime:$P.max,minTime:$P.min,name:P0,onChange:A0,placeholder:K("searchTime"),timeFormat:V,value:Q0})]},H))}),f0("div",{className:"grid gap-1 sm:gap-2",children:[v(q0,{className:"text-xs sm:text-sm",children:K("color")}),v("div",{className:"flex flex-wrap gap-2",children:o5.map((H)=>v(g,{"aria-label":H.label,className:A(`${H.value} h-6 w-6 rounded-full sm:h-8 sm:w-8`,w===H.value&&"ring-2 ring-black ring-offset-1 sm:ring-offset-2"),onClick:()=>k(H.value),type:"button",variant:"ghost"},H.value))})]}),v(h2,{label:K("location"),name:"location",onChange:L0,placeholder:K("eventLocationPlaceholder"),value:E.location}),v(i5,{onChange:T0,value:i})]})}),f0(gP,{className:"mt-4 shrink-0 flex flex-col-reverse gap-2 sm:flex-row sm:gap-0",children:[P?.id&&v(g,{className:"w-full sm:mr-auto sm:w-auto",onClick:p0,size:"sm",type:"button",variant:"destructive",children:K("delete")}),f0("div",{className:"flex w-full gap-2 sm:w-auto",children:[v(g,{className:"flex-1 sm:flex-none",onClick:$,size:"sm",type:"button",variant:"outline",children:K("cancel")}),v(g,{className:"flex-1 sm:flex-none",size:"sm",type:"submit",children:P?.id?K("update"):K("create")})]})]})]}),v(fP,{eventTitle:Y.event?.title||"",isOpen:Y.isOpen,onClose:_,onConfirm:z,operationType:Y.operationType})]})};import{jsx as aP,jsxs as r5}from"react/jsx-runtime";var tP=()=>{let{t:P,selectedEvent:$,isEventFormOpen:Z,closeEventForm:X,addEvent:J,updateEvent:Y,deleteEvent:Q,renderEventForm:q}=O((K)=>({t:K.t,selectedEvent:K.selectedEvent,isEventFormOpen:K.isEventFormOpen,closeEventForm:K.closeEventForm,addEvent:K.addEvent,updateEvent:K.updateEvent,deleteEvent:K.deleteEvent,renderEventForm:K.renderEventForm})),G={open:Z,onClose:X,selectedEvent:$,onAdd:J,onUpdate:(K)=>{Y(K.id,K)},onDelete:(K)=>{Q(K.id)}};if(q)return q(G);return aP(JP,{onOpenChange:X,open:Z,children:r5(QP,{className:"flex flex-col h-[90vh] w-[90vw] max-w-[500px] p-4 sm:p-6 overflow-hidden gap-0",children:[r5(YP,{className:"mb-2 sm:mb-4 shrink-0",children:[aP(qP,{className:"text-base sm:text-lg",children:$?.id?P("editEvent"):P("createEvent")}),aP(CP,{className:"text-xs sm:text-sm",children:$?.id?P("editEventDetails"):P("addNewEvent")})]}),aP(d5,{...G})]})})};import{Calendar as h$,Download as E$,Menu as D$,Plus as j$}from"lucide-react";import{useState as x$}from"react";import{RRule as O$}from"rrule";var E2=`\r
|
|
1
|
+
import{RRule as CU}from"rrule";import{AnimatePresence as N4,motion as V4}from"motion/react";import{clsx as L4}from"clsx";import{twMerge as A4}from"tailwind-merge";import Y0 from"dayjs";import Z4 from"dayjs/plugin/isBetween.js";import X4 from"dayjs/plugin/isSameOrAfter.js";import J4 from"dayjs/plugin/isSameOrBefore.js";import Q4 from"dayjs/plugin/localeData.js";import Y4 from"dayjs/plugin/localizedFormat.js";import q4 from"dayjs/plugin/minMax.js";import U4 from"dayjs/plugin/timezone.js";import z4 from"dayjs/plugin/utc.js";import _4 from"dayjs/plugin/weekday.js";import K4 from"dayjs/plugin/weekOfYear.js";var P5,G4=(P,$,Z)=>{let X=$.prototype,J=Z.tz.setDefault;Z.tz.setDefault=(U)=>{return P5=U,J(U)};let{startOf:Y,endOf:Q}=X;function q(U,_){let G=U.$x?.$timezone||P5;if(!G)return _;let K=Z.tz(_.format("YYYY-MM-DDTHH:mm:ss"),G).utcOffset();if(_.utcOffset()!==K)return _.tz(G,!0);return _}X.startOf=function(U,_){let G=Y.call(this,U,_);return q(this,G)},X.endOf=Q};Y0.extend(_4);Y0.extend(K4);Y0.extend(X4);Y0.extend(J4);Y0.extend(Z4);Y0.extend(q4);Y0.extend(U4);Y0.extend(z4);Y0.extend(Q4);Y0.extend(Y4);Y0.extend(G4);var $5=(...P)=>{return Y0.tz(...P)};Object.assign($5,Y0);var p=$5;var j0=1,Z5=24,B0=24,ZP=4,X5="bg-secondary text-muted-foreground pointer-events-none",D0={sunday:0,monday:1,tuesday:2,wednesday:3,thursday:4,friday:5,saturday:6};function A(...P){return A4(L4(P))}var kP=(P)=>{if(!P||P.length===0)return;return new Set(P.map(($)=>D0[$]))};function XP(P){if(P===void 0)return;if(p.isDayjs(P))return P;let $=p(P);return $.isValid()?$:void 0}var J5=(P,$)=>{let Z={...P};for(let X of $)delete Z[X];return Z};function mP(P){if(!P||!P.length)return[];return P.map(($)=>{return{...$,start:p.isDayjs($.start)?$.start:p($.start),end:p.isDayjs($.end)?$.end:p($.end)}})}import{jsx as Q5}from"react/jsx-runtime";var W4={hidden:({direction:P})=>({opacity:0,x:P==="horizontal"?10:0,y:P==="vertical"?-10:0}),visible:({delay:P})=>({opacity:1,x:0,y:0,transition:{duration:0.2,ease:[0.4,0,0.2,1],delay:P}}),exit:({direction:P})=>({opacity:0,x:P==="horizontal"?-10:0,y:P==="vertical"?-10:0,transition:{duration:0.15}})},x=({children:P,transitionKey:$,delay:Z=0,className:X,direction:J="vertical",layout:Y,layoutId:Q,"data-testid":q,ref:U,..._})=>Q5(N4,{mode:"wait",children:Q5(V4.div,{animate:"visible",className:A("inline-block w-full",X),custom:{delay:Z,direction:J},"data-testid":q,exit:"exit",initial:"hidden",layout:Y,layoutId:Q,ref:U,variants:W4,..._,children:P},$)});x.displayName="AnimatedSection";import{DndContext as D4,MouseSensor as x4,pointerWithin as v4,TouchSensor as y4,useSensor as B5,useSensors as c4}from"@dnd-kit/core";import{useRef as O5,useState as i4}from"react";import{Slot as F4}from"@radix-ui/react-slot";import{cva as M4}from"class-variance-authority";import{jsx as O4}from"react/jsx-runtime";var B4=M4("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",{variants:{variant:{default:"bg-primary text-primary-foreground hover:bg-primary/90",destructive:"bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60",outline:"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50",secondary:"bg-secondary text-secondary-foreground hover:bg-secondary/80",ghost:"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-9 px-4 py-2 has-[>svg]:px-3",sm:"h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5",lg:"h-10 rounded-md px-6 has-[>svg]:px-4",icon:"size-9","icon-sm":"size-8","icon-lg":"size-10"}},defaultVariants:{variant:"default",size:"default"}});function g({className:P,variant:$,size:Z,asChild:X=!1,...J}){return O4(X?F4:"button",{className:A(B4({variant:$,size:Z,className:P})),"data-slot":"button",...J})}import*as P0 from"@radix-ui/react-dialog";import{XIcon as f4}from"lucide-react";import{jsx as O0,jsxs as V2}from"react/jsx-runtime";function JP({...P}){return O0(P0.Root,{"data-slot":"dialog",...P})}function R4({...P}){return O0(P0.Portal,{"data-slot":"dialog-portal",...P})}function I4({className:P,...$}){return O0(P0.Overlay,{className:A("data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50",P),"data-slot":"dialog-overlay",...$})}function QP({className:P,children:$,...Z}){return V2(R4,{"data-slot":"dialog-portal",children:[O0(I4,{}),V2(P0.Content,{className:A("bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-lg max-h-[90%]",P),"data-slot":"dialog-content",...Z,children:[$,V2(P0.Close,{className:"ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",children:[O0(f4,{}),O0("span",{className:"sr-only",children:"Close"})]})]})]})}function YP({className:P,...$}){return O0("div",{className:A("flex flex-col gap-2 text-center sm:text-left",P),"data-slot":"dialog-header",...$})}function gP({className:P,...$}){return O0("div",{className:A("flex flex-col-reverse gap-2 sm:flex-row sm:justify-end",P),"data-slot":"dialog-footer",...$})}function qP({className:P,...$}){return O0(P0.Title,{className:A("text-lg leading-none font-semibold",P),"data-slot":"dialog-title",...$})}function CP({className:P,...$}){return O0(P0.Description,{className:A("text-muted-foreground text-sm",P),"data-slot":"dialog-description",...$})}import{useContext as V5}from"react";import{createContext as S4}from"react";var hP=S4(void 0);import{createContext as p4}from"react";var EP=p4(void 0);import{useCallback as s0,useMemo as w4}from"react";import{useCallback as t,useEffect as M2,useMemo as L5,useRef as B2,useState as t0}from"react";import{RRule as T4}from"rrule";var jP=(P)=>{return new Date(Date.UTC(P.year(),P.month(),P.date(),P.hour(),P.minute(),P.second(),P.millisecond()))},H4=(P,$)=>{return $.year(P.getUTCFullYear()).month(P.getUTCMonth()).date(P.getUTCDate()).hour(P.getUTCHours()).minute(P.getUTCMinutes()).second(P.getUTCSeconds()).millisecond(P.getUTCMilliseconds())},UP=(P)=>{return Boolean(P.rrule||P.recurrenceId||P.uid)},f0=(P)=>{return P.uid||`${P.id}@ilamy.calendar`},q5=(P,$)=>{let Z=f0($),X=P.findIndex((J)=>f0(J)===Z&&J.rrule&&!J.recurrenceId);if(X===-1)throw Error("Base recurring event not found");return X},U5=(P)=>P.start.subtract(1,"day").endOf("day").toDate(),Y5=(P,$)=>{let Z=$.diff($.startOf("day"),"millisecond");return P.startOf("day").add(Z,"millisecond")},b4=(P,$)=>{let Z=P.start;if($.start)Z=Y5(P.start,$.start);let X=P.end;if($.start&&$.end)X=Z.add($.end.diff($.start),"millisecond");else if($.start)X=Z.add(P.end.diff(P.start),"millisecond");else if($.end)X=Y5(P.end,$.end);let J=$.rrule??P.rrule,Y;if(J)Y={...J,dtstart:Z.toDate()};return{start:Z,end:X,rrule:Y}},W2=({event:P,currentEvents:$,startDate:Z,endDate:X})=>{if(!P.rrule)return[];try{let J=jP(P.start),Y=P.rrule.until?jP(p(P.rrule.until)):void 0,Q={...P.rrule,dtstart:J,until:Y},q=new T4(Q),U=f0(P),_=$.filter((f)=>f.recurrenceId&&f0(f)===U),G=P.end.diff(P.start),K=jP(Z.subtract(G,"millisecond")),V=jP(X);return q.between(K,V,!0).map((f,F)=>{let z=H4(f,P.start),L=_.find((k)=>XP(k.recurrenceId)?.isSame(z));if(L)return{...P,...L};let W=P.end.diff(P.start),R=z.add(W,"millisecond"),I=`${P.id}_${F}`,S=f0(P);return{...P,id:I,start:z,end:R,uid:S,rrule:void 0}}).filter((f)=>{if(P.exdates&&P.exdates.length>0){let L=f.start.toISOString();if(P.exdates?.includes(L))return!1}return f.start.isSameOrBefore(X)&&f.end.isSameOrAfter(Z)})}catch(J){throw Error(`Invalid RRULE options: ${JSON.stringify(P.rrule)}. Error: ${J instanceof Error?J.message:"Unknown error"}`)}},z5=({targetEvent:P,updates:$,currentEvents:Z,scope:X})=>{let J=[...Z],Y=q5(J,P),Q=J[Y];switch(X){case"this":{let q=P.start.toISOString(),_=[...Q.exdates||[],q],G={...Q,exdates:_};J[Y]=G;let K=`${P.id}_modified_${Date.now()}`,V={...J5(P,["width","height","top","left","right"]),...$,id:K,recurrenceId:q,uid:f0(Q),rrule:void 0};J.push(V);break}case"following":{let q=U5(P),U={...Q,rrule:{...Q.rrule,until:q}};J[Y]=U;let _=Q.end.diff(Q.start),G=$.start||P.start,K=$.end||G.add(_),V=`${Q.id}_following`,O=`${V}@ilamy.calendar`,N={...Q,...$,rrule:{...Q.rrule,...$.rrule,dtstart:G.toDate()},id:V,uid:O,start:G,end:K,recurrenceId:void 0};J.push(N);break}case"all":{let q=f0(Q),U=b4(Q,$);J[Y]={...Q,...$,start:U.start,end:U.end,rrule:U.rrule,exdates:void 0};let _=(G)=>{let K=Boolean(G.recurrenceId)&&!G.rrule,V=f0(G)===q;return K&&V};return J.filter((G)=>!_(G))}default:throw Error(`Invalid scope: ${X}. Must be 'this', 'following', or 'all'`)}return J},_5=({targetEvent:P,currentEvents:$,scope:Z})=>{let X=[...$],J=q5(X,P),Y=X[J];switch(Z){case"this":{let Q=P.start.toISOString(),U=[...Y.exdates||[],Q],_={...Y,exdates:U};X[J]=_;break}case"following":{let Q={...Y,rrule:{...Y.rrule,until:U5(P)}};X[J]=Q;break}case"all":{let Q=f0(P);return X.filter((U)=>f0(U)!==Q)}default:throw Error(`Invalid scope: ${Z}. Must be 'this', 'following', or 'all'`)}return X};var F2={today:"Today",create:"Create",new:"New",update:"Update",delete:"Delete",cancel:"Cancel",export:"Export",event:"Event",events:"Events",newEvent:"New Event",title:"Title",description:"Description",location:"Location",allDay:"All day",startDate:"Start Date",endDate:"End Date",startTime:"Start Time",searchTime:"Search time...",endTime:"End Time",color:"Color",createEvent:"Create Event",editEvent:"Edit Event",addNewEvent:"Add a new event to your calendar",editEventDetails:"Edit your event details",eventTitlePlaceholder:"Event title",eventDescriptionPlaceholder:"Event description (optional)",eventLocationPlaceholder:"Event location (optional)",repeat:"Repeat",repeats:"Repeats",customRecurrence:"Custom recurrence",daily:"Daily",weekly:"Weekly",monthly:"Monthly",yearly:"Yearly",interval:"Interval",repeatOn:"Repeat on",never:"Never",count:"Count",every:"Every",ends:"Ends",after:"After",occurrences:"occurrences",on:"On",editRecurringEvent:"Edit recurring event",deleteRecurringEvent:"Delete recurring event",editRecurringEventQuestion:"is a recurring event. How would you like to edit it?",deleteRecurringEventQuestion:"is a recurring event. How would you like to delete it?",thisEvent:"This event",thisEventDescription:"Only change this specific occurrence",thisAndFollowingEvents:"This and following events",thisAndFollowingEventsDescription:"Edit this and all future occurrences",allEvents:"All events",allEventsDescription:"Edit the entire recurring series",onlyChangeThis:"Only change this specific occurrence",changeThisAndFuture:"Change this and all future occurrences",changeEntireSeries:"Change the entire recurring series",onlyDeleteThis:"Only delete this specific occurrence",deleteThisAndFuture:"Delete this and all future occurrences",deleteEntireSeries:"Delete the entire recurring series",month:"Month",week:"Week",day:"Day",year:"Year",more:"more",resources:"Resources",resource:"Resource",time:"Time",date:"Date",noResourcesVisible:"No resources visible",addResourcesOrShowExisting:"Add resources or show existing ones"};function u(P){return P.isSame(p(),"day")}function r(P){return P.format("YYYY-MM-DD")}function d(P,$){let Z=P.startOf("week").day($),X=P.isBefore(Z)?Z.subtract(1,"week"):Z;return Array.from({length:7},(J,Y)=>X.add(Y,"day"))}function zP(P,$){let Z=d(P.startOf("month"),$);return Array.from({length:6},(X,J)=>{let Y=Z[0].add(J,"week");return d(Y,$)})}function K5(P){let $=P.daysInMonth(),Z=P.startOf("month");return Array.from({length:$},(X,J)=>Z.add(J,"day"))}function G5({referenceDate:P=p(),length:$=24}={}){let Z=P.startOf("day");return Array.from({length:$},(X,J)=>Z.hour(J).minute(0).second(0).millisecond(0))}function _P(P,$){let Z=new Set($.map((X)=>String(X.id)));return P.filter((X)=>Z.has(String(X.id)))}function DP(P,$,Z){let X=P.start.isSameOrAfter($)&&P.start.isSameOrBefore(Z),J=P.end.isSameOrAfter($)&&P.end.isSameOrBefore(Z),Y=P.start.isBefore($)&&P.end.isAfter(Z);return X||J||Y}var A5={day:"day",week:"week",month:"month",year:"year"},O2=(P,$,Z)=>{if($==="day"||$==="year")return{start:P.startOf($),end:P.endOf($)};if($==="week"){let J=d(P,Z);return{start:J[0].startOf("day"),end:J[6].endOf("day")}}let X=zP(P,Z);return{start:X[0][0].startOf("day"),end:X[5][6].endOf("day")}},xP=(P)=>{let{events:$=[],firstDayOfWeek:Z=0,initialView:X="month",initialDate:J=p(),businessHours:Y,onEventAdd:Q,onEventUpdate:q,onEventDelete:U,onDateChange:_,onViewChange:G,locale:K,timezone:V,translations:O,translator:N}=P,[f,F]=t0(p.isDayjs(J)?J:p(J)),[z,L]=t0(X),[W,R]=t0($),[I,S]=t0(!1),[w,k]=t0(null),[C,E]=t0(null),[c,a]=t0(K||"en"),j=B2($),m=B2(V),l=B2(void 0),_0=L5(()=>{if(N)return N;let b=O||F2;return(T)=>b[T]||T},[O,N]),L0=t((b,T)=>{let D=[];for(let V0 of W)if(V0.rrule)D.push(...W2({event:V0,currentEvents:W,startDate:b,endDate:T}));else if(DP(V0,b,T))D.push(V0);return D},[W]),M0=t(()=>{return O2(f,z,Z)},[f,z,Z]),H0=L5(()=>{let{start:b,end:T}=M0();return L0(b,T)},[L0,M0]);M2(()=>{if($!==j.current)R($),j.current=$},[$]),M2(()=>{if(K&&K!==l.current)a(K),p.locale(K),F((b)=>b.locale(K)),l.current=K},[K]),M2(()=>{if(V&&V!==m.current)p.tz.setDefault(V),F((b)=>b.tz(V)),R((b)=>b.map((T)=>({...T,start:T.start.tz(V),end:T.end.tz(V)}))),m.current=V},[V]);let J0=t((b)=>{F(b);let T=O2(b,z,Z);_?.(b,T)},[_,z,Z]),A0=J0,K0=t((b)=>{let T=b===1?f.add(1,A5[z]):f.subtract(1,A5[z]);J0(T)},[f,z,J0]),Z0=t(()=>K0(1),[K0]),b0=t(()=>K0(-1),[K0]),w0=t(()=>J0(p()),[J0]),k0=t((b)=>{R((T)=>[...T,b]),Q?.(b)},[Q]),i=t((b,T)=>{let D=W.find((N2)=>N2.id===b);if(!D)return;let V0={...D,...T};R((N2)=>N2.map((e2)=>e2.id===b?V0:e2)),q?.(V0)},[W,q]),X0=t((b,T,D)=>{q?.({...b,...T}),R(z5({targetEvent:b,updates:T,currentEvents:W,scope:D.scope}))},[W,q]),$P=t((b,T)=>{U?.(b),R(_5({targetEvent:b,currentEvents:W,scope:T.scope}))},[W,U]),H=t((b)=>{let T=W.find((D)=>D.id===b);if(!T)return;R((D)=>D.filter((V0)=>V0.id!==b)),U?.(T)},[W,U]),e=t((b)=>{if(b?.start)E(b.start);let T=b?.start??f;k({title:_0("newEvent"),start:T,end:b?.end??T.add(1,"hour"),resourceId:b?.resourceId,description:"",allDay:b?.allDay??!1}),S(!0)},[f,_0]),Q0=t(()=>{E(null),k(null),S(!1)},[]),N0=t((b)=>{L(b),G?.(b);let T=O2(f,b,Z);_?.(f,T)},[G,_,f,Z]),a0=t((b)=>{let T=b.uid;return W.find((D)=>(D.uid||`${D.id}@ilamy.calendar`)===T&&D.rrule)||null},[W]);return{currentDate:f,view:z,events:H0,rawEvents:W,isEventFormOpen:I,selectedEvent:w,selectedDate:C,firstDayOfWeek:Z,dayMaxEvents:ZP,currentLocale:c,businessHours:Y,setCurrentDate:F,selectDate:A0,setView:N0,nextPeriod:Z0,prevPeriod:b0,today:w0,addEvent:k0,updateEvent:i,updateRecurringEvent:X0,deleteEvent:H,deleteRecurringEvent:$P,openEventForm:e,closeEventForm:Q0,setSelectedEvent:k,setIsEventFormOpen:S,setSelectedDate:E,getEventsForDateRange:L0,findParentRecurringEvent:a0,t:_0}};import{jsx as k4}from"react/jsx-runtime";var f2=(P)=>{if(P.resourceIds)return P.resourceIds;if(P.resourceId!==void 0)return[P.resourceId];return[]},N5=({children:P,events:$=[],resources:Z=[],firstDayOfWeek:X=0,initialView:J="month",initialDate:Y,renderEvent:Q,onEventClick:q,onCellClick:U,isCellDisabled:_,onViewChange:G,onEventAdd:K,onEventUpdate:V,onEventDelete:O,onDateChange:N,locale:f,timezone:F,disableCellClick:z,disableEventClick:L,disableDragAndDrop:W,dayMaxEvents:R,eventSpacing:I=1,eventHeight:S=B0,stickyViewHeader:w=!0,viewHeaderClassName:k="",headerComponent:C,headerClassName:E,translations:c,translator:a,renderResource:j,renderEventForm:m,businessHours:l,timeFormat:_0="12-hour",classesOverride:L0,orientation:M0="horizontal",renderCurrentTimeIndicator:H0,renderHour:J0,hideNonBusinessHours:A0=!1,hideExportButton:K0=!1,hiddenDays:Z0,weekViewGranularity:b0="hourly",slotDuration:w0=60,scrollTime:k0})=>{let i=xP({events:$,firstDayOfWeek:X,initialView:J,initialDate:Y,businessHours:l,onEventAdd:K,onEventUpdate:V,onEventDelete:O,onDateChange:N,onViewChange:G,locale:f,timezone:F,translations:c,translator:a}),X0=s0((T)=>i.events.filter((D)=>f2(D).includes(T)),[i.events]),$P=s0((T)=>i.events.filter((D)=>f2(D).some((V0)=>T.includes(V0))),[i.events]),H=s0((T)=>{if(T===void 0)return;return Z.find((D)=>D.id===T)},[Z]),e=s0((T)=>{return Boolean(T.resourceIds&&T.resourceIds.length>1)},[]),Q0=s0((T)=>{i.setSelectedEvent(T),i.setIsEventFormOpen(!0)},[i]),N0=s0((T)=>{if(L)return;if(q)q(T);else Q0(T)},[L,q,Q0]),a0=s0((T)=>{if(z)return;if(U)U(T);else{let D={title:i.t("newEvent"),start:T.start,end:T.end,description:"",allDay:!1};if(T.resource!==void 0)D.resourceId=T.resource.id;i.setSelectedEvent(D),i.setSelectedDate(T.start),i.setIsEventFormOpen(!0)}},[U,z,i]),b=w4(()=>({...i,resources:Z,getEventsForResource:X0,getEventsForResources:$P,getResourceById:H,isEventCrossResource:e,getEventResourceIds:f2,onEventClick:N0,onCellClick:a0,isCellDisabled:_,renderEvent:Q,renderResource:j,renderEventForm:m,headerComponent:C,headerClassName:E,locale:f,timezone:F,disableCellClick:z,disableEventClick:L,disableDragAndDrop:W,dayMaxEvents:R,eventSpacing:I,eventHeight:S,stickyViewHeader:w,viewHeaderClassName:k,businessHours:l,timeFormat:_0,classesOverride:L0,orientation:M0,renderCurrentTimeIndicator:H0,renderHour:J0,hideNonBusinessHours:A0,hideExportButton:K0,hiddenDays:Z0,weekViewGranularity:b0,slotDuration:w0,scrollTime:k0}),[i,Z,X0,$P,H,e,N0,a0,_,Q,j,m,f,F,z,L,W,R,I,S,w,k,C,E,l,_0,L0,M0,H0,J0,A0,K0,Z0,b0,w0,k0]);return k4(EP.Provider,{value:b,children:P})};function B(P){let $=V5(EP),Z=V5(hP),X=$||Z;if(!X)throw Error("useSmartCalendarContext must be used within a CalendarProvider or ResourceCalendarProvider");return P?P(X):X}function m4(){let P=B();return{currentDate:P.currentDate,view:P.view,events:P.events,isEventFormOpen:P.isEventFormOpen,selectedEvent:P.selectedEvent,selectedDate:P.selectedDate,firstDayOfWeek:P.firstDayOfWeek,resources:P.resources||[],setCurrentDate:P.setCurrentDate,selectDate:P.selectDate,setView:P.setView,nextPeriod:P.nextPeriod,prevPeriod:P.prevPeriod,today:P.today,addEvent:P.addEvent,updateEvent:P.updateEvent,deleteEvent:P.deleteEvent,openEventForm:P.openEventForm,closeEventForm:P.closeEventForm,getEventsForResource:P.getEventsForResource,businessHours:P.businessHours}}import{jsx as x0,jsxs as vP}from"react/jsx-runtime";var g4=[{scope:"this",title:"thisEvent",editKey:"onlyChangeThis",deleteKey:"onlyDeleteThis"},{scope:"following",title:"thisAndFollowingEvents",editKey:"changeThisAndFuture",deleteKey:"deleteThisAndFuture"},{scope:"all",title:"allEvents",editKey:"changeEntireSeries",deleteKey:"deleteEntireSeries"}];function fP({isOpen:P,onClose:$,onConfirm:Z,operationType:X,eventTitle:J}){let{t:Y}=B((U)=>({t:U.t})),Q=(U)=>{Z(U),$()},q=X==="edit";return x0(JP,{onOpenChange:$,open:P,children:vP(QP,{className:"max-w-md",children:[vP(YP,{children:[x0(qP,{children:q?Y("editRecurringEvent"):Y("deleteRecurringEvent")}),vP(CP,{children:['"',J,'"'," ",q?Y("editRecurringEventQuestion"):Y("deleteRecurringEventQuestion")]})]}),x0("div",{className:"space-y-3",children:g4.map(({scope:U,title:_,editKey:G,deleteKey:K})=>x0(g,{className:"w-full justify-start h-auto p-4",onClick:()=>Q(U),variant:"outline",children:vP("div",{className:"text-left",children:[x0("div",{className:"font-medium",children:Y(_)}),x0("div",{className:"text-sm text-muted-foreground",children:Y(q?G:K)})]})},U))}),x0(gP,{children:x0(g,{onClick:$,variant:"outline",children:Y("cancel")})})]})})}var W5=(P,$)=>{let{active:Z,over:X}=P;if(!Z||!X||!$)return null;let J=X.data.current||{},Y=J.type==="time-cell",{resourceId:Q,allDay:q}=J,U;if(Y){let{date:V,hour:O=0,minute:N=0}=J;U=p(V).hour(O).minute(N)}else{let{date:V}=J;U=p(V)}let _=$.end.diff($.start,"second"),G=U.add(_,"second");if(G.isSame(G.startOf("day")))G=G.subtract(1,"day").endOf("day");let K={start:U,end:G,resourceId:Q,allDay:Y?!1:q??$.allDay};return{activeEvent:$,updates:K}};import{DragOverlay as C4}from"@dnd-kit/core";import{snapCenterToCursor as h4}from"@dnd-kit/modifiers";import{useImperativeHandle as E4,useState as j4}from"react";import{jsx as F5}from"react/jsx-runtime";var M5=({ref:P})=>{let[$,Z]=j4(null);return E4(P,()=>({setActiveEvent:Z})),F5(C4,{modifiers:[h4],children:$&&F5("div",{className:A("cursor-grab truncate rounded bg-amber-200 p-2 text-[10px] shadow-lg sm:text-xs w-20",$.backgroundColor||"bg-blue-500",$.color||"text-white"),children:$?.title})})};import{jsx as f5,jsxs as R5,Fragment as l4}from"react/jsx-runtime";var R2={isOpen:!1,event:null,updates:null};function yP({children:P}){let $=O5(null),Z=O5(null),{updateEvent:X,updateRecurringEvent:J,disableDragAndDrop:Y}=B((z)=>({updateEvent:z.updateEvent,updateRecurringEvent:z.updateRecurringEvent,disableDragAndDrop:z.disableDragAndDrop})),[Q,q]=i4({isOpen:!1,event:null,updates:null}),U=B5(x4,{activationConstraint:{distance:2}}),_=B5(y4,{activationConstraint:{delay:100,tolerance:5}}),G=c4(U,_),K=(z,L)=>{if(!z?.id||!L||Object.keys(L).length===0)return;if(UP(z))q({isOpen:!0,event:z,updates:L});else X(z.id,L)},V=(z)=>{if(!Q.event||!Q.updates){q(R2);return}try{J(Q.event,Q.updates,{scope:z,eventDate:Q.event.start})}catch{}finally{q(R2)}},O=()=>{q(R2)},N=(z)=>{let{active:L}=z;if(L.data.current?.type==="calendar-event")Z.current?.setActiveEvent(L.data.current.event),$.current=L.data.current.event},f=(z)=>{let L=W5(z,$.current);if(L){let{activeEvent:W,updates:R}=L;K(W,R)}$.current=null,Z.current?.setActiveEvent(null)},F=(z)=>{$.current=null};if(Y)return P;return R5(l4,{children:[R5(D4,{collisionDetection:v4,onDragCancel:F,onDragEnd:f,onDragStart:N,sensors:G,children:[P,f5(M5,{ref:Z})]}),f5(fP,{eventTitle:Q.event?.title||"",isOpen:Q.isOpen,onClose:O,onConfirm:V,operationType:"edit"})]})}import{useEffect as M$,useState as l0}from"react";import*as cP from"@radix-ui/react-checkbox";import{CheckIcon as u4}from"lucide-react";import{jsx as I2}from"react/jsx-runtime";function KP({className:P,...$}){return I2(cP.Root,{className:A("peer border-input dark:bg-input/30 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground dark:data-[state=checked]:bg-primary data-[state=checked]:border-primary focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive size-4 shrink-0 rounded-[4px] border shadow-xs transition-shadow outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50",P),"data-slot":"checkbox",...$,children:I2(cP.Indicator,{className:"flex items-center justify-center text-current transition-none","data-slot":"checkbox-indicator",children:I2(u4,{className:"size-3.5"})})})}import{PopoverClose as n4}from"@radix-ui/react-popover";import{Calendar as a4}from"lucide-react";import{useEffect as t4,useRef as s4,useState as e4}from"react";import{ChevronLeftIcon as o4,ChevronRightIcon as d4}from"lucide-react";import{useState as r4}from"react";import{jsx as G0,jsxs as S2}from"react/jsx-runtime";function I5({selected:P,defaultMonth:$,onSelect:Z,disabled:X,firstDayOfWeek:J=0,className:Y}){let[Q,q]=r4(()=>p($??P??new Date).startOf("month")),U=zP(Q,J),_=P?p(P).format("YYYY-MM-DD"):void 0,G=d(p(),J).map((K)=>K.format("dd"));return S2("div",{className:A("bg-background p-3 w-[280px]",Y),"data-slot":"calendar",children:[S2("div",{className:"flex items-center justify-between mb-2",children:[G0(g,{"aria-label":"Previous month",onClick:()=>q((K)=>K.subtract(1,"month")),size:"icon",variant:"ghost",children:G0(o4,{className:"size-4"})}),G0("div",{className:"text-sm font-medium select-none",children:Q.format("MMMM YYYY")}),G0(g,{"aria-label":"Next month",onClick:()=>q((K)=>K.add(1,"month")),size:"icon",variant:"ghost",children:G0(d4,{className:"size-4"})})]}),S2("table",{className:"w-full border-collapse",role:"grid",children:[G0("thead",{children:G0("tr",{children:G.map((K,V)=>G0("th",{className:"text-muted-foreground text-xs font-medium select-none py-1",children:K},V))})}),G0("tbody",{children:U.map((K,V)=>G0("tr",{children:K.map((O)=>{let N=!O.isSame(Q,"month"),f=O.format("YYYY-MM-DD")===_,F=X?.(O.toDate())??!1;return G0("td",{className:"p-0 text-center","data-disabled":F,"data-outside":N,"data-selected":f,role:"gridcell",tabIndex:-1,children:G0("button",{"aria-disabled":F,"aria-hidden":N,className:A("w-full aspect-square rounded-md text-sm select-none",!F&&"hover:bg-accent cursor-pointer",N&&"text-muted-foreground/50",u(O)&&!f&&"bg-accent text-accent-foreground",f&&"bg-primary text-primary-foreground font-medium",F&&"opacity-50 cursor-not-allowed"),"data-disabled":F,"data-selected":f,disabled:F||N,onClick:()=>Z?.(O.toDate()),tabIndex:N?-1:0,type:"button",children:O.format("D")})},O.toISOString())})},V))})]})]})}import*as m0 from"@radix-ui/react-popover";import{jsx as iP}from"react/jsx-runtime";function v0({...P}){return iP(m0.Root,{"data-slot":"popover",...P})}function y0({...P}){return iP(m0.Trigger,{"data-slot":"popover-trigger",...P})}function c0({className:P,align:$="center",sideOffset:Z=4,...X}){return iP(m0.Portal,{children:iP(m0.Content,{align:$,className:A("bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-72 origin-(--radix-popover-content-transform-origin) rounded-md border p-4 shadow-md outline-hidden",P),"data-slot":"popover-content",sideOffset:Z,...X})})}import{jsx as GP,jsxs as p2}from"react/jsx-runtime";function lP({date:P,closeOnSelect:$,onChange:Z,label:X="Pick a date",className:J,disabled:Y}){let Q=B((K)=>K.firstDayOfWeek),q=s4(null),[U,_]=e4(P);t4(()=>{_(P)},[P]);let G=(K)=>{if(_(K),$)q.current?.click();Z?.(K)};return GP("div",{className:J,children:p2(v0,{children:[GP(y0,{asChild:!0,children:p2(g,{className:A("data-[empty=true]:text-muted-foreground w-full justify-start text-left font-normal"),"data-empty":!P,variant:"outline",children:[GP(a4,{}),U?p(U).format("ll"):GP("span",{children:X})]})}),p2(c0,{align:"start",className:"w-auto p-0",children:[GP(n4,{ref:q,style:{display:"none"}}),GP(I5,{defaultMonth:U,disabled:Y,firstDayOfWeek:Q,onSelect:G,selected:U})]})]})})}import{jsx as P$}from"react/jsx-runtime";function e0({className:P,type:$,...Z}){return P$("input",{className:A("file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input flex h-9 w-full min-w-0 rounded-md border bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm","focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]","aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",P),"data-slot":"input",type:$,...Z})}import*as S5 from"@radix-ui/react-label";import{jsx as $$}from"react/jsx-runtime";function q0({className:P,...$}){return $$(S5.Root,{className:A("flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50",P),"data-slot":"label",...$})}import*as R0 from"@radix-ui/react-scroll-area";import{jsx as RP,jsxs as Z$}from"react/jsx-runtime";function I0({className:P,children:$,viewPortProps:Z,...X}){return Z$(R0.Root,{className:A("relative",P),"data-slot":"scroll-area",...X,children:[RP(R0.Viewport,{...Z,className:A("focus-visible:ring-ring/50 size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:outline-1",Z?.className),"data-slot":"scroll-area-viewport",children:$}),RP(g0,{}),RP(R0.Corner,{})]})}function g0({className:P,orientation:$="vertical",...Z}){return RP(R0.ScrollAreaScrollbar,{className:A("flex touch-none p-px transition-colors select-none",$==="vertical"&&"h-full w-2.5 border-l border-l-transparent",$==="horizontal"&&"h-2.5 flex-col border-t border-t-transparent",P),"data-slot":"scroll-area-scrollbar",orientation:$,...Z,children:RP(R0.ScrollAreaThumb,{className:"bg-border relative flex-1 rounded-full","data-slot":"scroll-area-thumb"})})}import{Clock as Q$}from"lucide-react";import{useEffect as Y$,useRef as T5,useState as T2}from"react";import{useMemo as X$}from"react";function p5({timeFormat:P="12-hour",minTime:$="00:00",maxTime:Z="23:45"}){return{timeOptions:X$(()=>{let Y=[],[Q,q]=$.split(":").map(Number),[U,_]=Z.split(":").map(Number),G=Q*60+q,K=U*60+_;for(let V=G;V<=K;V+=15){let O=Math.floor(V/60),N=V%60,f=`${O.toString().padStart(2,"0")}:${N.toString().padStart(2,"0")}`;Y.push(f)}return Y},[$,Z]),formatTime:(Y)=>{let[Q,q]=Y.split(":").map(Number),U=Q>=12?"PM":"AM",_=Q===0?12:Q>12?Q-12:Q;if(P==="24-hour")return`${Q.toString().padStart(2,"0")}:${q.toString().padStart(2,"0")}`;return`${_}:${q.toString().padStart(2,"0")} ${U}`}}}var LP=(P)=>String(P).padStart(2,"0"),J$=(P)=>typeof P==="number"?LP(P):P,M={col:{time:"time-col",date:"date-col",day:(P,$)=>{let Z=`day-col-${r(P)}`;return $!=null?`${Z}-resource-${$}`:Z},resource:(P,$)=>`${P}-col-resource-${$}`,allDay:(P,$)=>`all-day-col-${r(P)}-${$}`},cell:{day:(P,$,Z=0)=>{let X=r(P);return $!=null?`day-cell-${X}-${LP($)}-${LP(Z)}`:`day-cell-${X}`},verticalTime:(P)=>`vertical-time-${LP(P)}`,vertical:(P,$,Z,X)=>{let J=`vertical-cell-${r(P)}-${LP($)}-${LP(Z)}`;return X!=null?`${J}-resource-${X}`:J}},container:{vertical:{col:(P)=>`vertical-col-${P}`},horizontal:{row:(P)=>`horizontal-row-${P}`,rowLabel:(P)=>`horizontal-row-label-${P}`,event:(P)=>`horizontal-event-${P}`},eventsLayer:(P,$)=>`${P}-events-${$}`},header:{resource:{weekDay:"resource-week-day-header",timeLabel:(P,$)=>`resource-${P}-time-label-${J$($)}`},weekday:(P,$)=>`${P}-header-weekday-${$.toLowerCase()}`,week:{day:(P)=>`week-header-day-${P.toISOString()}`,hour:(P,$)=>`week-header-hour-${P.toISOString()}-${$}`,resource:(P)=>`week-header-resource-${P}`},year:{month:(P,$)=>$?`year-month-${$}-${P}`:`year-month-${P}`,day:(P,$)=>`year-day-${P}-${$}`}},allDayRow:(P)=>`allday-row-${P??"main"}`,listKey:(...P)=>P.join("-"),dayNumber:(P)=>u(P)?"day-number-today":`day-number-${P.format("D")}`,timePicker:(P)=>`time-picker-${P??""}`,droppable:{dayCell:(P,$)=>{let Z=P.toISOString(),X=$?.allDay?"-allday":"",J=$?.resourceId!=null?`-resource-${$.resourceId}`:"";return`drop-day-cell-${Z}${X}${J}`}}};import{jsx as i0,jsxs as H2}from"react/jsx-runtime";var q$=(P)=>{P.stopPropagation()};function H5({value:P,onChange:$,minTime:Z="00:00",maxTime:X="23:45",timeFormat:J="12-hour",placeholder:Y="Select time...",className:Q,disabled:q=!1,name:U}){let[_,G]=T2(!1),[K,V]=T2(""),O=T5(null),N=T5(null),[f,F]=T2(0),{timeOptions:z,formatTime:L}=p5({timeFormat:J,minTime:Z,maxTime:X}),W=z.filter((S)=>{return L(S).toLowerCase().includes(K.toLowerCase())}),R=(S)=>{$(S),G(!1),V("")};Y$(()=>{if(_){if(N.current)F(N.current.offsetWidth);setTimeout(()=>{O.current?.focus()},0)}},[_]);let I=P?L(P):Y;return H2(v0,{onOpenChange:G,open:_,children:[i0(y0,{asChild:!0,children:H2(g,{"aria-controls":"time-picker-listbox","aria-expanded":_,className:A("w-full justify-start",Q),"data-testid":M.timePicker(U),disabled:q,ref:N,role:"combobox",variant:"outline",children:[i0(Q$,{className:"mr-2 h-4 w-4"}),I]})}),H2(c0,{align:"start",className:"p-0",style:{width:f},children:[i0("div",{className:"p-2 border-b",children:i0(e0,{className:"h-8",onChange:(S)=>V(S.target.value),placeholder:"Search time...",ref:O,value:K})}),i0(I0,{className:"h-[200px]",onWheel:q$,children:i0("div",{className:"p-1",children:W.length===0?i0("div",{className:"py-6 text-center text-sm text-muted-foreground",children:"N/A"}):W.map((S)=>{let w=L(S);return i0("button",{className:A("relative flex w-full cursor-pointer select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none transition-colors hover:bg-accent hover:text-accent-foreground",S===P&&"bg-accent text-accent-foreground"),onClick:()=>R(S),type:"button",children:w},S)})})})]})]})}var b2=(P,$)=>{if(!$)return!0;let Z=!1;return uP($,{date:P,onMatch:()=>{Z=!0}}),Z},b5=({date:P,hour:$,minute:Z=0,businessHours:X})=>{if(!X)return!0;if($===void 0)return b2(P,X);let J=!1,Y=$*60+Z;return uP(X,{date:P,onMatch:(Q)=>{let q=Q.startTime??9,U=Q.endTime??17,_=q*60,G=U*60;if(Y>=_&&Y<G)J=!0}}),J},uP=(P,$)=>{let{date:Z,onMatch:X}=$;if(!P)return;let J=Array.isArray(P)?P:[P];for(let Y of J)if(Z&&Y.daysOfWeek){let Q=Z.day();if(Y.daysOfWeek.some((q)=>D0[q]===Q))X(Y)}else X(Y)},oP=(P)=>{let{allDates:$,businessHours:Z,resourceBusinessHours:X=[],hideNonBusinessHours:J}=P,Y=24,Q=0,q=!1,U=(G)=>{q=!0,Y=Math.min(Y,G.startTime??9),Q=Math.max(Q,G.endTime??17)},_=(G)=>{uP(Z,{date:G,onMatch:U});for(let K of X)uP(K,{date:G,onMatch:U})};for(let G of $)_(G);if(!q&&J){if(_(),!q)Y=9,Q=17,q=!0}return{minStart:Y,maxEnd:Q,hasBusinessHours:q}};var w2=(P,$,Z)=>{let[X,J]=$.split(":").map(Number),Y=p(P).hour(X).minute(J);return Z?Y.hour(0).minute(0):Y},w5=(P,$,Z)=>{let[X,J]=$.split(":").map(Number),Y=p(P).hour(X).minute(J);return Z?Y.hour(23).minute(59):Y},k2=(P,$)=>{if(!$)return{min:"00:00",max:"23:59"};let Z=p(P),{minStart:X,maxEnd:J,hasBusinessHours:Y}=oP({allDates:[Z],businessHours:$,hideNonBusinessHours:!1});if(!Y)return{min:"00:00",max:"23:59"};return{min:`${X.toString().padStart(2,"0")}:00`,max:`${(J-1).toString().padStart(2,"0")}:45`}};import{useEffect as G$,useState as y5}from"react";import{RRule as $0}from"rrule";import{jsx as dP}from"react/jsx-runtime";function k5({className:P,...$}){return dP("div",{className:A("text-card-foreground flex flex-col gap-6 rounded-xl border shadow-sm",P),"data-slot":"card",...$})}function m5({className:P,...$}){return dP("div",{className:A("@container/card-header grid auto-rows-min grid-rows-[auto_auto] items-start gap-1.5 p-4 pb-0 has-data-[slot=card-action]:grid-cols-[1fr_auto]",P),"data-slot":"card-header",...$})}function g5({className:P,...$}){return dP("div",{className:A("leading-none font-semibold",P),"data-slot":"card-title",...$})}function C5({className:P,...$}){return dP("div",{className:A("p-4 pt-0",P),"data-slot":"card-content",...$})}import*as h from"@radix-ui/react-select";import{CheckIcon as U$,ChevronDownIcon as h5,ChevronUpIcon as z$}from"lucide-react";import{jsx as s,jsxs as m2}from"react/jsx-runtime";function E5({...P}){return s(h.Root,{"data-slot":"select",...P})}function j5({...P}){return s(h.Value,{"data-slot":"select-value",...P})}function D5({className:P,size:$="default",children:Z,...X}){return m2(h.Trigger,{className:A("border-input data-placeholder:text-muted-foreground [&_svg:not([class*='text-'])]:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 dark:hover:bg-input/50 flex w-fit items-center justify-between gap-2 rounded-md border bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",P),"data-size":$,"data-slot":"select-trigger",...X,children:[Z,s(h.Icon,{asChild:!0,children:s(h5,{className:"size-4 opacity-50"})})]})}function x5({className:P,children:$,position:Z="popper",align:X="center",...J}){return s(h.Portal,{children:m2(h.Content,{align:X,className:A("bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 relative z-50 max-h-(--radix-select-content-available-height) min-w-32 origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border shadow-md",Z==="popper"&&"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",P),"data-slot":"select-content",position:Z,...J,children:[s(_$,{}),s(h.Viewport,{className:A("p-1",Z==="popper"&&"h-(--radix-select-trigger-height) w-full min-w-(--radix-select-trigger-width) scroll-my-1"),children:$}),s(K$,{})]})})}function v5({className:P,children:$,...Z}){return m2(h.Item,{className:A("focus:bg-accent focus:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2",P),"data-slot":"select-item",...Z,children:[s("span",{className:"absolute right-2 flex size-3.5 items-center justify-center",children:s(h.ItemIndicator,{children:s(U$,{className:"size-4"})})}),s(h.ItemText,{children:$})]})}function _$({className:P,...$}){return s(h.ScrollUpButton,{className:A("flex cursor-default items-center justify-center py-1",P),"data-slot":"select-scroll-up-button",...$,children:s(z$,{className:"size-4"})})}function K$({className:P,...$}){return s(h.ScrollDownButton,{className:A("flex cursor-default items-center justify-center py-1",P),"data-slot":"select-scroll-down-button",...$,children:s(h5,{className:"size-4"})})}import{jsx as v,jsxs as U0,Fragment as V$}from"react/jsx-runtime";var C2={DAILY:$0.DAILY,WEEKLY:$0.WEEKLY,MONTHLY:$0.MONTHLY,YEARLY:$0.YEARLY},L$=Object.fromEntries(Object.entries(C2).map(([P,$])=>[$,P])),g2=[$0.SU,$0.MO,$0.TU,$0.WE,$0.TH,$0.FR,$0.SA],A$=[{type:"never",id:"never",labelKey:"never"},{type:"count",id:"after",labelKey:"after"},{type:"until",id:"on",labelKey:"on"}],c5=(P)=>Math.max(1,Number.parseInt(P,10)||1),N$=(P,$)=>{if(!P)return $("customRecurrence");try{let Z=new $0(P).toText();return Z&&!Z.toLowerCase().includes("error")?Z.charAt(0).toUpperCase()+Z.slice(1):$("customRecurrence")}catch{return $("customRecurrence")}},i5=({value:P,onChange:$})=>{let{t:Z,firstDayOfWeek:X}=B((z)=>({t:z.t,firstDayOfWeek:z.firstDayOfWeek})),[J,Y]=y5(!!P),[Q,q]=y5(()=>P||null),U=g2.map((z,L)=>({value:z,label:p().day(L).format("ddd")})),_=g2.map((z,L)=>U[(L+X)%7]);G$(()=>{if(Y(!!P),P)q(P)},[P]);let G=(z)=>{if(!Q)return;let L={...Q,...z};q(L),$(J?L:null)},K=(z)=>{if(Y(z),!z){$(null);return}if(Q){$(Q);return}let L={freq:$0.DAILY,interval:1};q(L),$(L)},V=(z)=>{let L=Q?.byweekday||[],W=g2[z],R=L.includes(W)?L.filter((I)=>I!==W):[...L,W];G({byweekday:R.length?R:void 0})},O=(z)=>{let L={count:void 0,until:void 0};if(z==="count")L.count=Q?.count||1;if(z==="until")L.until=Q?.until||p().add(1,"month").endOf("day").toDate();G(L)},N=Q?.until?"until":Q?.count?"count":"never",f=L$[Q?.freq??$0.DAILY]||"DAILY",F=Array.isArray(Q?.byweekday)?Q.byweekday:Q?.byweekday?[Q.byweekday]:[];return U0(k5,{"data-testid":"recurrence-editor",children:[U0(m5,{className:"pb-3",children:[U0("div",{className:"flex items-center space-x-2",children:[v(KP,{checked:J,"data-testid":"toggle-recurrence",id:"recurring",onCheckedChange:K}),v(g5,{className:"text-sm",children:Z("repeat")})]}),J&&P&&v("p",{className:"text-xs text-muted-foreground",children:N$(P,Z)})]}),J&&v(C5,{className:"pt-0",children:U0("div",{className:"space-y-4",children:[U0("div",{className:"grid grid-cols-2 gap-4",children:[U0("div",{children:[v(q0,{className:"text-xs",htmlFor:"frequency",children:Z("repeats")}),U0(E5,{onValueChange:(z)=>G({freq:C2[z]}),value:f,children:[v(D5,{className:"h-8","data-testid":"frequency-select",id:"frequency",children:v(j5,{})}),v(x5,{children:Object.keys(C2).map((z)=>v(v5,{value:z,children:Z(z.toLowerCase())},z))})]})]}),U0("div",{children:[v(q0,{className:"text-xs",htmlFor:"interval",children:Z("every")}),v(e0,{className:"h-8",id:"interval",min:"1",onChange:(z)=>G({interval:c5(z.target.value)}),type:"number",value:Q?.interval||1})]})]}),Q?.freq===$0.WEEKLY&&U0("div",{children:[v(q0,{className:"text-xs",children:Z("repeatOn")}),v("div",{className:"flex flex-wrap gap-1 mt-1",children:_.map((z,L)=>U0("div",{className:"flex items-center space-x-1",children:[v(KP,{checked:F.includes(z.value),id:M.listKey("day",L),onCheckedChange:()=>V(L)}),v(q0,{className:"text-xs cursor-pointer",htmlFor:M.listKey("day",L),children:z.label})]},M.listKey("weekday",L)))})]}),U0("div",{children:[v(q0,{className:"text-xs",children:Z("ends")}),v("div",{className:"space-y-2 mt-1",children:A$.map(({type:z,id:L,labelKey:W})=>U0("div",{className:"flex items-center space-x-2",children:[v(KP,{checked:N===z,id:L,onCheckedChange:()=>O(z)}),v(q0,{className:"text-xs",htmlFor:L,children:Z(W)}),z==="count"&&N==="count"&&U0(V$,{children:[v(e0,{className:"h-6 w-16 text-xs","data-testid":"count-input",min:"1",onChange:(R)=>G({count:c5(R.target.value)}),type:"number",value:Q?.count||1}),v("span",{className:"text-xs",children:Z("occurrences")})]}),z==="until"&&N==="until"&&v(lP,{className:"h-6",date:Q?.until??void 0,onChange:(R)=>G({until:R?p(R).endOf("day").toDate():void 0})})]},z))})]})]})})]})};import{useCallback as rP,useState as W$}from"react";var l5={isOpen:!1,operationType:"edit",event:null};function u5(P){let{updateRecurringEvent:$,deleteRecurringEvent:Z}=B((_)=>({updateRecurringEvent:_.updateRecurringEvent,deleteRecurringEvent:_.deleteRecurringEvent})),[X,J]=W$(l5),Y=rP((_,G)=>{J({isOpen:!0,operationType:"edit",event:_,updates:G,onConfirm:(K)=>{$(_,G,{scope:K,eventDate:_.start})}})},[$]),Q=rP((_)=>{J({isOpen:!0,operationType:"delete",event:_,onConfirm:(G)=>{Z(_,{scope:G,eventDate:_.start})}})},[Z]),q=rP(()=>J(l5),[]),U=rP((_)=>{if(X.onConfirm)X.onConfirm(_);q(),P?.()},[X,q,P]);return{dialogState:X,openEditDialog:Y,openDeleteDialog:Q,closeDialog:q,handleConfirm:U}}import{useMemo as F$}from"react";var nP=(P)=>{let{businessHours:$,getResourceById:Z}=B((X)=>({businessHours:X.businessHours,getResourceById:X.getResourceById}));return F$(()=>{if(P!=null&&Z){let X=Z(P);if(X?.businessHours)return X.businessHours}return $},[P,Z,$])};import{jsx as y,jsxs as S0,Fragment as B$}from"react/jsx-runtime";var o5=[{value:"bg-blue-100 text-blue-800",label:"Blue"},{value:"bg-green-100 text-green-800",label:"Green"},{value:"bg-purple-100 text-purple-800",label:"Purple"},{value:"bg-red-100 text-red-800",label:"Red"},{value:"bg-yellow-100 text-yellow-800",label:"Yellow"},{value:"bg-pink-100 text-pink-800",label:"Pink"},{value:"bg-indigo-100 text-indigo-800",label:"Indigo"},{value:"bg-amber-100 text-amber-800",label:"Amber"},{value:"bg-emerald-100 text-emerald-800",label:"Emerald"},{value:"bg-sky-100 text-sky-800",label:"Sky"},{value:"bg-violet-100 text-violet-800",label:"Violet"},{value:"bg-rose-100 text-rose-800",label:"Rose"},{value:"bg-teal-100 text-teal-800",label:"Teal"},{value:"bg-orange-100 text-orange-800",label:"Orange"}],h2=({name:P,label:$,placeholder:Z,value:X,required:J=!1,onChange:Y})=>S0("div",{className:"grid gap-1 sm:gap-2",children:[y(q0,{className:"text-xs sm:text-sm",htmlFor:P,children:$}),y(e0,{className:"h-8 text-sm sm:h-9",id:P,name:P,onChange:Y,placeholder:Z,required:J,value:X})]}),d5=({selectedEvent:P,onClose:$,onUpdate:Z,onDelete:X,onAdd:J})=>{let{dialogState:Y,openEditDialog:Q,openDeleteDialog:q,closeDialog:U,handleConfirm:_}=u5($),{findParentRecurringEvent:G,t:K,timeFormat:V}=B((H)=>({findParentRecurringEvent:H.findParentRecurringEvent,t:H.t,timeFormat:H.timeFormat})),O=nP(P?.resourceId),N=P?.start??p(),f=P?.end??p().add(1,"hour"),F=P?G(P):null,[z,L]=l0(N.toDate()),[W,R]=l0(f.toDate()),[I,S]=l0(P?.allDay||!1),[w,k]=l0(P?.color||o5[0].value),[C,E]=l0(N.format("HH:mm")),[c,a]=l0(f.format("HH:mm")),[j,m]=l0({title:P?.title||"",description:P?.description||"",location:P?.location||""}),[l,_0]=l0(()=>{return P?.rrule||F?.rrule||null}),L0=(H)=>{if(!H)return;if(L(H),p(H).isAfter(p(W)))R(H)},M0=(H)=>{if(!H)return;if(R(H),H&&p(H).isBefore(p(z)))L(H)},H0=(H)=>{if(E(H),p(z).isSame(p(W),"day")&&H>c)a(H)},J0=(H)=>{if(a(H),p(z).isSame(p(W),"day")&&H<C)E(H)},A0=(H)=>{let{name:e,value:Q0}=H.target;m((N0)=>({...N0,[e]:Q0}))};M$(()=>{if(I)a("23:59")},[I]);let K0=(H)=>{H.preventDefault();let e=w2(z,C,I),Q0=w5(W,c,I),N0={id:P?.id||p().format("YYYYMMDDHHmmss"),title:j.title,start:e,end:Q0,resourceId:P?.resourceId,description:j.description,location:j.location,allDay:I,color:w,rrule:l||void 0};if(P?.id&&UP(P)){Q(P,{title:j.title,start:e,end:Q0,description:j.description,location:j.location,allDay:I,color:w,rrule:l||void 0});return}if(P?.id)Z?.(N0);else J?.(N0);$()},Z0=()=>{if(P?.id){if(UP(P)){q(P);return}X?.(P),$()}},b0=(H)=>{if(!H){_0(null);return}let e=w2(z,C,I);_0({...H,dtstart:e.toDate()})},w0=O?(H)=>!b2(p(H),O):void 0,k0=k2(z,O),i=k2(W,O),X0=[["startDate",z,L0],["endDate",W,M0]],$P=[["startTime","start-time",C,H0,k0],["endTime","end-time",c,J0,i]];return S0(B$,{children:[S0("form",{className:"flex flex-col flex-1 min-h-0",onSubmit:K0,children:[y(I0,{className:"flex-1 min-h-0",children:S0("div",{className:"grid gap-3 sm:gap-4 p-1",children:[y(h2,{label:K("title"),name:"title",onChange:A0,placeholder:K("eventTitlePlaceholder"),required:!0,value:j.title}),y(h2,{label:K("description"),name:"description",onChange:A0,placeholder:K("eventDescriptionPlaceholder"),value:j.description}),S0("div",{className:"flex items-center space-x-2",children:[y(KP,{checked:I,id:"allDay",onCheckedChange:(H)=>S(H===!0)}),y(q0,{className:"text-xs sm:text-sm",htmlFor:"allDay",children:K("allDay")})]}),y("div",{className:"grid grid-cols-2 gap-2 sm:gap-4",children:X0.map(([H,e,Q0])=>S0("div",{children:[y(q0,{className:"text-xs sm:text-sm",children:K(H)}),y(lP,{className:"mt-1",closeOnSelect:!0,date:e,disabled:w0,onChange:Q0})]},H))}),!I&&y("div",{className:"grid grid-cols-2 gap-2 sm:gap-4",children:$P.map(([H,e,Q0,N0,a0])=>S0("div",{children:[y(q0,{className:"text-xs sm:text-sm",children:K(H)}),y(H5,{className:"mt-1 h-8 text-sm sm:h-9",maxTime:a0.max,minTime:a0.min,name:e,onChange:N0,placeholder:K("searchTime"),timeFormat:V,value:Q0})]},H))}),S0("div",{className:"grid gap-1 sm:gap-2",children:[y(q0,{className:"text-xs sm:text-sm",children:K("color")}),y("div",{className:"flex flex-wrap gap-2",children:o5.map((H)=>y(g,{"aria-label":H.label,className:A(`${H.value} h-6 w-6 rounded-full sm:h-8 sm:w-8`,w===H.value&&"ring-2 ring-black ring-offset-1 sm:ring-offset-2"),onClick:()=>k(H.value),type:"button",variant:"ghost"},H.value))})]}),y(h2,{label:K("location"),name:"location",onChange:A0,placeholder:K("eventLocationPlaceholder"),value:j.location}),y(i5,{onChange:b0,value:l})]})}),S0(gP,{className:"mt-4 shrink-0 flex flex-col-reverse gap-2 sm:flex-row sm:gap-0",children:[P?.id&&y(g,{className:"w-full sm:mr-auto sm:w-auto",onClick:Z0,size:"sm",type:"button",variant:"destructive",children:K("delete")}),S0("div",{className:"flex w-full gap-2 sm:w-auto",children:[y(g,{className:"flex-1 sm:flex-none",onClick:$,size:"sm",type:"button",variant:"outline",children:K("cancel")}),y(g,{className:"flex-1 sm:flex-none",size:"sm",type:"submit",children:P?.id?K("update"):K("create")})]})]})]}),y(fP,{eventTitle:Y.event?.title||"",isOpen:Y.isOpen,onClose:U,onConfirm:_,operationType:Y.operationType})]})};import{jsx as aP,jsxs as r5}from"react/jsx-runtime";var tP=()=>{let{t:P,selectedEvent:$,isEventFormOpen:Z,closeEventForm:X,addEvent:J,updateEvent:Y,deleteEvent:Q,renderEventForm:q}=B((K)=>({t:K.t,selectedEvent:K.selectedEvent,isEventFormOpen:K.isEventFormOpen,closeEventForm:K.closeEventForm,addEvent:K.addEvent,updateEvent:K.updateEvent,deleteEvent:K.deleteEvent,renderEventForm:K.renderEventForm})),G={open:Z,onClose:X,selectedEvent:$,onAdd:J,onUpdate:(K)=>{Y(K.id,K)},onDelete:(K)=>{Q(K.id)}};if(q)return q(G);return aP(JP,{onOpenChange:X,open:Z,children:r5(QP,{className:"flex flex-col h-[90vh] w-[90vw] max-w-[500px] p-4 sm:p-6 overflow-hidden gap-0",children:[r5(YP,{className:"mb-2 sm:mb-4 shrink-0",children:[aP(qP,{className:"text-base sm:text-lg",children:$?.id?P("editEvent"):P("createEvent")}),aP(CP,{className:"text-xs sm:text-sm",children:$?.id?P("editEventDetails"):P("addNewEvent")})]}),aP(d5,{...G})]})})};import{Calendar as h$,Download as E$,Menu as j$,Plus as D$}from"lucide-react";import{useState as x$}from"react";import{RRule as O$}from"rrule";var E2=`\r
|
|
2
2
|
`,f$=["BEGIN:VTIMEZONE","TZID:UTC","BEGIN:STANDARD","DTSTART:19700101T000000","TZNAME:UTC","TZOFFSETFROM:+0000","TZOFFSETTO:+0000","END:STANDARD","END:VTIMEZONE"].join(E2),eP=(P)=>{return P.replaceAll("\\","\\\\").replaceAll(";","\\;").replaceAll(",","\\,").replaceAll(`
|
|
3
|
-
`,"\\n").replaceAll("\r","")},sP=(P,$=!1)=>{return $?P.format("YYYYMMDD"):P.utc().format("YYYYMMDD[T]HHmmss[Z]")},n5=(P)=>{return P.uid||`${P.id}@ilamy.calendar`},
|
|
4
|
-
`).find((Z)=>Z.startsWith("RRULE:"))||""}catch{return""}},R$=(P)=>{let $=T().utc().format("YYYYMMDD[T]HHmmss[Z]"),Z=P.allDay?";VALUE=DATE":"",X=P.rrule?I$(P.rrule):"",J=P.exdates?.length?P.exdates.map((q)=>sP(T(q),P.allDay)).join(","):null,Y=P.recurrenceId?sP(T(P.recurrenceId),P.allDay):null;return["BEGIN:VEVENT",`UID:${n5(P)}`,`DTSTART${Z}:${sP(P.start,P.allDay)}`,`DTEND${Z}:${sP(P.end,P.allDay)}`,`SUMMARY:${eP(P.title)}`,P.description&&`DESCRIPTION:${eP(P.description)}`,P.location&&`LOCATION:${eP(P.location)}`,X,J&&`EXDATE:${J}`,Y&&`RECURRENCE-ID:${Y}`,`DTSTAMP:${$}`,`CREATED:${$}`,`LAST-MODIFIED:${$}`,"STATUS:CONFIRMED","SEQUENCE:0","TRANSP:OPAQUE","END:VEVENT"].filter(Boolean).join(E2)},S$=(P)=>{let $=new Set;return P.filter((Z)=>{let X=n5(Z),J=Z.rrule&&!Z.recurrenceId,Y=Z.recurrenceId&&!Z.rrule;if(J)return $.add(X),!0;if(Y)return!0;return!Z.rrule&&!Z.recurrenceId&&!$.has(X)})},p$=(P,$="ilamy Calendar")=>{let Z=eP($),X=S$(P).map(R$);return["BEGIN:VCALENDAR","VERSION:2.0","PRODID:-//ilamy//ilamy Calendar//EN","CALSCALE:GREGORIAN","METHOD:PUBLISH",`X-WR-CALNAME:${Z}`,`X-WR-CALDESC:Exported from ${Z}`,f$,...X,"END:VCALENDAR"].join(E2)},a5=(P,$="calendar.ics",Z="ilamy Calendar")=>{let X=new Blob([p$(P,Z)],{type:"text/calendar;charset=utf-8"}),J=URL.createObjectURL(X),Y=$.endsWith(".ics")?$:`${$}.ics`,Q=document.createElement("a");Q.href=J,Q.download=Y,document.body.append(Q),Q.click(),Q.remove(),URL.revokeObjectURL(J)};import{ChevronDown as T$}from"lucide-react";import{useState as H$}from"react";function t5(){let{currentLocale:P,timezone:$}=O((X)=>({currentLocale:X.currentLocale,timezone:X.timezone}));return{formatDateRange:(X,J)=>new Intl.DateTimeFormat(P,{timeZone:$,month:"short",day:"numeric"}).formatRange(X.toDate(),J.toDate())}}import{jsx as a,jsxs as D2,Fragment as P2}from"react/jsx-runtime";var b$=()=>{let{currentDate:P,view:$,selectDate:Z,t:X,firstDayOfWeek:J}=O((L)=>({currentDate:L.currentDate,view:L.view,selectDate:L.selectDate,t:L.t,firstDayOfWeek:L.firstDayOfWeek})),{formatDateRange:Y}=t5(),[Q,q]=H$(null),_=Array.from({length:12},(L,W)=>P.month(W).format("MMMM")),z=P.year(),G=Array.from({length:11},(L,W)=>z-5+W),K=r(P,J),V=(L)=>{Z(L),q(null)},M=()=>a(P2,{children:_.map((L,W)=>a(g,{className:A("justify-start font-normal",P.month()===W&&"bg-primary/10"),onClick:()=>V(P.month(W)),variant:"ghost",children:L},W))}),N=()=>a(P2,{children:G.map((L)=>a(g,{className:A("justify-start font-normal",P.year()===L&&"bg-primary/10"),onClick:()=>V(P.year(L)),variant:"ghost",children:L},L))}),f=()=>a(P2,{children:Array.from({length:7},(L,W)=>{let I=P.subtract(3,"week").add(W,"week"),R=r(I,J),S=R[0],w=R[6],k=I.isSame(P,"week");return a(g,{className:A("justify-start font-normal",k&&"bg-primary/10"),onClick:()=>V(S),variant:"ghost",children:a("div",{className:"flex w-full items-center justify-between",children:a("span",{children:Y(S,w)})})},n(S))})}),F=()=>{let L=P.startOf("month"),W=P.daysInMonth();return a(P2,{children:Array.from({length:W},(I,R)=>{let S=L.date(R+1),w=S.isSame(P,"day"),k=u(S);return a(g,{className:A("justify-start font-normal",w&&"bg-primary/10"),onClick:()=>V(S),variant:"ghost",children:D2("div",{className:"flex w-full items-center justify-between",children:[a("span",{children:S.format("ll")}),k&&a("span",{className:"bg-primary text-primary-foreground rounded-sm px-1! text-xs",children:X("today")})]})},n(S))})})};return[{id:"month",hidden:$==="year",title:P.format("MMMM"),render:M},{id:"year",hidden:!1,title:P.format("YYYY"),render:N},{id:"week",hidden:$!=="week",title:Y(K[0],K[6]),render:f},{id:"day",hidden:$!=="day",title:P.format("dddd, D"),render:F}].filter((L)=>!L.hidden).map((L)=>D2(x0,{onOpenChange:(W)=>q(W?L.id:null),open:Q===L.id,children:[a(v0,{asChild:!0,children:D2(g,{className:"flex items-center gap-1 px-1! font-semibold","data-testid":"calendar-month-button",variant:"ghost",children:[a(D,{className:"flex items-center gap-1 px-1! font-semibold","data-testid":"calendar-month-button",transitionKey:B.listKey(L.id,n(P)),children:L.title}),a(T$,{className:"h-4 w-4"})]})}),a(y0,{className:"w-40 p-0",children:a("div",{className:"flex max-h-60 flex-col overflow-auto",children:L.render()})})]},L.id))},s5=b$;import{ChevronLeft as w$,ChevronRight as k$}from"lucide-react";import{jsx as AP,jsxs as C$}from"react/jsx-runtime";var m$=["day","week","month","year"],g$=({currentView:P,onChange:$,variant:Z="default",size:X="sm",className:J,onToday:Y,onNext:Q,onPrevious:q})=>{let{t:_,resources:z}=O((N)=>({t:N.t,resources:N.resources})),G=Z==="grid",K=z&&z.length>0,V=(N)=>{return A(G?"w-full":"",P===N&&"bg-primary/80")},M=(N)=>{return P===N?"default":"outline"};return C$("div",{className:A(G?"grid grid-cols-2 gap-2":"flex gap-1",J),children:[AP(g,{onClick:q,size:X,variant:"outline",children:AP(w$,{className:"h-4 w-4"})}),AP(g,{onClick:Q,size:X,variant:"outline",children:AP(k$,{className:"h-4 w-4"})}),m$.map((N)=>{if(K&&N==="year")return null;return AP(g,{className:V(N),onClick:()=>$(N),size:X,variant:M(N),children:_(N)},N)}),AP(g,{onClick:Y,size:X,variant:"outline",children:_("today")})]})},j2=g$;import{jsx as o,jsxs as m0}from"react/jsx-runtime";var v$=({className:P=""})=>{let{view:$,setView:Z,nextPeriod:X,prevPeriod:J,today:Y,openEventForm:Q,headerComponent:q,headerClassName:_,rawEvents:z,t:G,hideExportButton:K}=O((W)=>({view:W.view,setView:W.setView,nextPeriod:W.nextPeriod,prevPeriod:W.prevPeriod,today:W.today,openEventForm:W.openEventForm,headerComponent:W.headerComponent,headerClassName:W.headerClassName,rawEvents:W.rawEvents,t:W.t,hideExportButton:W.hideExportButton})),[V,M]=x$(!1),N=()=>M(!1),f=(W)=>(...I)=>{W(...I),N()},F=()=>{let W=`ilamy-calendar-${new Date().toISOString().split("T")[0]}.ics`;a5(z,W,"ilamy Calendar"),N()},U=()=>m0(g,{className:"flex items-center gap-1",onClick:()=>Q(),size:"sm",variant:"default",children:[o(j$,{className:"h-4 w-4"}),o("span",{className:"hidden @4xl:inline",children:G("new")})]}),L=({fullWidth:W=!1})=>m0(g,{className:A("flex items-center gap-1",W&&"w-full gap-2"),onClick:F,size:"sm",variant:"outline",children:[o(E$,{className:"h-4 w-4"}),W?`${G("export")} Calendar (.ics)`:o("span",{className:"hidden @4xl/base-header:inline",children:G("export")})]});if(q)return q;return o("div",{className:"@container/base-header w-full","data-testid":"calendar-header",children:m0("div",{className:A("flex justify-center @2xl/base-header:justify-between flex-wrap items-center gap-2",P,_),children:[m0("div",{className:"flex flex-wrap items-center justify-center gap-1 @2xl/base-header:justify-start",children:[o(h$,{className:"h-5 w-5"}),o(s5,{})]}),m0("div",{className:"flex flex-wrap justify-start @xl/base-header:justify-center gap-1 @4xl/base-header:justify-end overflow-x-auto",children:[m0("div",{className:"hidden @md/base-header:flex items-center justify-start gap-1",children:[o(j2,{className:"justify-end",currentView:$,onChange:Z,onNext:X,onPrevious:J,onToday:Y,variant:"default"}),o(U,{}),!K&&o(L,{})]}),m0("div",{className:"flex items-center justify-end gap-1 @md/base-header:hidden",children:[o(U,{}),m0(x0,{onOpenChange:M,open:V,children:[o(v0,{asChild:!0,children:o(g,{size:"sm",variant:"outline",children:o(D$,{className:"h-4 w-4"})})}),o(y0,{align:"end",className:"w-[240px] p-2",children:m0("div",{className:"space-y-2",children:[o(j2,{currentView:$,onChange:f(Z),onNext:f(X),onPrevious:f(J),onToday:f(Y),variant:"grid"}),!K&&o("div",{className:"pt-2 border-t",children:o(L,{fullWidth:!0})})]})})]})]})]})]})})},RP=v$;import{memo as G9}from"react";import{memo as Y1,useMemo as q9}from"react";import{useMemo as x2}from"react";var e5=({days:P,events:$,dayMaxEvents:Z,dayNumberHeight:X=Z5,gridType:J="day",eventSpacing:Y=h0,eventBarHeight:Q=F0})=>{let q=P.at(0),_=P.at(-1);if(!q||!_)return[];let z=J==="hour"?q.startOf("hour"):q.startOf("day"),G=J==="hour"?_.endOf("hour"):_.endOf("day"),K=P.length,V=$.filter((I)=>I.end.diff(I.start,J)>0),M=$.filter((I)=>I.end.diff(I.start,J)===0),N=[...V].sort((I,R)=>{let S=I.start.diff(R.start);if(S!==0)return S;return R.end.diff(R.start)-I.end.diff(I.start)}),f=[...M].sort((I,R)=>I.start.diff(R.start)),F=Array.from({length:Z},()=>Array.from({length:K},()=>({taken:!1,event:null}))),U=[],L=(I,R)=>{for(let S=0;S<Z;S++){let w=!0;for(let k=I;k<=R;k++)if(F[S][k].taken){w=!1;break}if(w)return S}return-1},W=(I,R,S,w,k,h)=>{for(let c=R;c<=S;c++)F[I][c]={taken:!0,event:w};let j=S-R+1;U.push({left:R/K*100,width:j/K*100,top:X+Y+I*(Q+Y),height:Q,position:I,...w,isTruncatedStart:k,isTruncatedEnd:h})};for(let I of N){let R=T.max(I.start.startOf(J),z),S=J==="hour"?I.end.subtract(1,"minute"):I.end,w=T.min(S.startOf(J),G),k=Math.max(0,R.diff(z,J)),h=Math.min(K-1,w.diff(z,J)),j=I.start.startOf(J).isBefore(z),c=I.end.startOf(J).isAfter(G),e=L(k,h);if(e!==-1){W(e,k,h,I,j,c);continue}for(let E=k+1;E<=h;E++){let m=L(E,h);if(m!==-1){W(m,E,h,I,!0,c);break}}}for(let I of f){let R=T.max(I.start.startOf(J),z),S=Math.max(0,Math.min(K-1,R.diff(z,J))),w=L(S,S);if(w!==-1)W(w,S,S,I,!1,!1)}return U};var v2=({days:P,allDay:$,dayNumberHeight:Z,resourceId:X,gridType:J})=>{let{getEventsForDateRange:Y,dayMaxEvents:Q,eventSpacing:q,eventHeight:_,getEventsForResource:z}=O(),G=P.at(0),K=P.at(-1),V=G?.startOf("day"),M=K?.endOf("day"),N=x2(()=>{if(!V||!M)return[];let U=Y(V,M);if(X)U=_P(U,z(X));if($)U=U.filter((L)=>!!L.allDay===$);return U},[Y,z,V,M,X,$]),f=x2(()=>{let U=new Map;for(let L of P){let W=n(L),I=L.startOf("day"),R=L.endOf("day"),S=N.filter((w)=>jP(w,I,R));U.set(W,S)}return U},[P,N]);return{positionedEvents:x2(()=>{return e5({days:P,events:N,dayMaxEvents:Q,dayNumberHeight:Z,eventSpacing:q,eventBarHeight:_,gridType:J})},[P,Q,Z,q,_,N,J]),dayEventsMap:f}};import t$,{memo as s$,useMemo as e$}from"react";import{jsx as y$}from"react/jsx-runtime";var P1=({date:P,className:$})=>{let Z=u(P);return y$("div",{className:A("flex h-5 w-5 items-center justify-center rounded-full text-xs shrink-0",Z&&"bg-primary text-primary-foreground font-medium",$),"data-testid":B.dayNumber(P),children:P.format("D")})};import{useImperativeHandle as d$,useState as $1}from"react";import{useDraggable as c$}from"@dnd-kit/core";import{memo as i$}from"react";import{jsx as SP,jsxs as o$}from"react/jsx-runtime";var l$=(P,$)=>{if(P&&$)return"rounded-none";if(P)return"rounded-r-md rounded-l-none";if($)return"rounded-l-md rounded-r-none";return"rounded-md"};function u$({elementId:P,event:$,className:Z,style:X,disableDrag:J=!1}){let{onEventClick:Y,renderEvent:Q,disableEventClick:q,disableDragAndDrop:_}=O(),{attributes:z,listeners:G,setNodeRef:K,isDragging:V}=c$({id:P,data:{event:$,type:"calendar-event"},disabled:J||_}),M=()=>{let N=$,f=N.isTruncatedStart,F=N.isTruncatedEnd;return o$("div",{className:A($.backgroundColor||"bg-blue-500",$.color||"text-white","h-full w-full px-1 border-[1.5px] border-card text-left overflow-clip relative",l$(Boolean(f),Boolean(F))),style:{backgroundColor:$.backgroundColor,color:$.color},children:[f&&SP("div",{className:"absolute left-0 top-0 bottom-0 w-0.5 bg-foreground/25"}),SP("p",{className:A("text-[10px] font-semibold sm:text-xs mt-0.5",f&&"pl-1",F&&"pr-1"),children:$.title}),F&&SP("div",{className:"absolute right-0 top-0 bottom-0 w-0.5 bg-foreground/25"})]})};return SP(D,{className:A("truncate h-full w-full",J||_?q?"cursor-default":"cursor-pointer":"cursor-grab",V&&!(J||_)&&"cursor-grabbing shadow-lg",Z),layout:!0,layoutId:P,onClick:(N)=>{N.stopPropagation(),Y($)},ref:K,style:X,transitionKey:P,...z,...G,children:Q?Q($):SP(M,{})})}var NP=i$(u$,(P,$)=>{return P.elementId===$.elementId&&P.disableDrag===$.disableDrag&&P.className===$.className&&P.event===$.event});import{jsx as pP,jsxs as r$}from"react/jsx-runtime";var Z1=({ref:P})=>{let[$,Z]=$1(!1),[X,J]=$1(null),{currentDate:Y,firstDayOfWeek:Q,eventHeight:q}=O();d$(P,()=>({open:()=>Z(!0),close:()=>Z(!1),setSelectedDayEvents:(G)=>J(G)}));let z=Y.startOf("month").clone();while(z.day()!==Q)z=z.subtract(1,"day");return pP(JP,{onOpenChange:Z,open:$,children:r$(QP,{className:"max-h-[80vh] max-w-md overflow-y-auto",children:[pP(YP,{children:pP(qP,{children:X?.day.format("MMMM D, YYYY")})}),pP("div",{className:"mt-4 space-y-3",children:X?.events.map((G)=>{return pP(NP,{className:"relative my-1",elementId:`all-events-dialog-event-$${G.id}`,event:G,style:{height:`${q}px`}},G.id)})})]})})};import{useDroppable as n$}from"@dnd-kit/core";import{jsx as a$}from"react/jsx-runtime";function X1({id:P,type:$,date:Z,hour:X,minute:J,resourceId:Y,allDay:Q,children:q,className:_,style:z,"data-testid":G,disabled:K=!1}){let{onCellClick:V,disableDragAndDrop:M,disableCellClick:N,classesOverride:f,view:F}=O(),{isOver:U,setNodeRef:L}=n$({id:P,data:{type:$,date:Z,hour:X,minute:J,resourceId:Y,allDay:Q},disabled:M||K}),W=(I)=>{if(I.stopPropagation(),N||K)return;let R=Z.hour(X??0).minute(J??0),S=R.clone();if(X!==void 0&&J!==void 0)S=S.hour(X).minute(J+15);else if(X!==void 0)S=S.hour(X+1).minute(0);else S=S.hour(23).minute(59);V({start:R,end:S,resourceId:Y,allDay:Q})};return a$("div",{className:A("droppable-cell",_,U&&!M&&!K&&"bg-accent",N||K?"cursor-default":"cursor-pointer",K&&(f?.disabledCell||X5)),"data-disabled":K.toString(),"data-testid":G,"data-view":F,onClick:W,ref:L,style:z,children:q})}import{jsx as $2,jsxs as Z2,Fragment as J1}from"react/jsx-runtime";var P9=({day:P,hour:$,minute:Z,className:X="",resourceId:J,gridType:Y="day",shouldRenderEvents:Q=!0,allDay:q=!1,precomputedEvents:_,"data-testid":z,showDayNumber:G=!1,children:K})=>{let V=t$.useRef(null),{dayMaxEvents:M=0,getEventsForDateRange:N,currentDate:f,t:F,getEventsForResource:U,currentLocale:L,eventSpacing:W,eventHeight:I}=O(),R=nP(J),S=e$(()=>{if(!Q)return[];if(_)return _;let m=N(P.startOf(Y),P.endOf(Y));if(q)m=m.filter((i)=>i.allDay);if(J)return _P(m,U(J)??[]);return m},[_,P,J,N,U,Y,Q,q]),w=(m,i)=>{V.current?.setSelectedDayEvents({day:m,events:i}),V.current?.open()},k=P.month()===f.month(),h=S.length-M,j=h>0,c=b5({date:P,hour:Y==="hour"?P.hour():void 0,businessHours:R}),e=Y==="hour"?B.cell.day(P,P.format("HH"),P.format("mm")):B.cell.day(P),E=B.droppable.dayCell(P,{allDay:q,resourceId:J});return Z2(J1,{children:[$2(X1,{allDay:q,className:A("cursor-pointer overflow-clip p-1 hover:bg-accent min-h-[60px] relative border-r border-b min-w-0",X),"data-testid":z||e,date:P,disabled:!c||!k,hour:$,id:E,minute:Z,resourceId:J,type:"day-cell",children:Z2("div",{className:"flex flex-col h-full w-full","data-testid":"grid-cell-content",style:{gap:`${W}px`},children:[G&&$2(P1,{date:P,locale:L}),Q&&Z2(J1,{children:[S.slice(0,M).map((m,i)=>$2("div",{className:"w-full shrink-0","data-testid":m?.title,style:{height:`${I}px`}},B.listKey("empty",i,m.id))),j&&Z2("div",{className:"text-muted-foreground hover:text-foreground cursor-pointer text-[10px] whitespace-nowrap sm:text-xs shrink-0 mt-1",onClick:(m)=>{m.stopPropagation(),w(P,S)},onKeyDown:(m)=>{if(m.key==="Enter"||m.key===" ")m.preventDefault(),m.stopPropagation(),w(P,S)},role:"button",tabIndex:0,children:["+",h," ",F("more")]})]}),K]})}),$2(Z1,{ref:V})]})},TP=s$(P9);import{jsx as Q1}from"react/jsx-runtime";var l0=({resource:P,className:$,children:Z,"data-testid":X})=>{let{renderResource:J}=O();return Q1("div",{className:A("flex items-center justify-center p-2 border-r last:border-r-0",$),"data-testid":X,style:{color:P.color,backgroundColor:P.backgroundColor},children:J?J(P):Z??Q1("div",{className:"text-sm font-medium truncate",children:P.title})})};import{memo as J9}from"react";import{memo as $9}from"react";import{jsx as y2,Fragment as X9}from"react/jsx-runtime";var Z9=({rangeStart:P,rangeEnd:$,now:Z,resource:X,axis:J="vertical"})=>{let{renderCurrentTimeIndicator:Y,view:Q}=O((V)=>({renderCurrentTimeIndicator:V.renderCurrentTimeIndicator,view:V.view})),q=Z??T();if(!(q.isSameOrAfter(P)&&q.isBefore($)))return null;let z=$.diff(P,"minute"),K=q.diff(P,"minute")/z*100;if(Y)return y2(X9,{children:Y({currentTime:q,rangeStart:P,rangeEnd:$,progress:K,resource:X,view:Q,axis:J})});if(J==="horizontal")return y2("div",{className:"absolute top-0 bottom-0 w-0.5 bg-red-500 z-50 pointer-events-none","data-testid":"current-time-indicator",style:{left:`${K}%`}});return y2("div",{className:"absolute left-0 right-0 h-0.5 bg-red-500 z-50 pointer-events-none","data-testid":"current-time-indicator",style:{top:`${K}%`}})},X2=$9(Z9);import{jsx as c2,jsxs as Y9}from"react/jsx-runtime";var Q9=({gridType:P="day",days:$,resourceId:Z,resource:X,"data-testid":J,positionedEvents:Y})=>{let{eventHeight:Q}=O(),q=$.at(0)?.startOf("day"),_=$.at(0),z=$.at(-1)?.add(1,P),G=P==="hour"&&Boolean(_&&z);return Y9("div",{className:"absolute inset-0 pointer-events-none z-10 overflow-clip","data-testid":J,children:[G&&_&&z&&c2(X2,{axis:"horizontal",rangeEnd:z,rangeStart:_,resource:X}),Y.map((K)=>{let V=`${K.id}-${K.position}-${q?.toISOString()}-${Z??"no-resource"}`;return c2("div",{className:"absolute z-10 pointer-events-auto overflow-clip","data-left":K.left,"data-testid":B.container.horizontal.event(K.id),"data-top":K.top,"data-width":K.width,style:{left:`calc(${K.left}% + var(--spacing) * 0.25)`,width:`calc(${K.width}% - var(--spacing) * 1)`,top:`${K.top}px`,height:`${Q}px`},children:c2(NP,{className:"h-full w-full shadow",elementId:V,event:K})},B.listKey(V,"wrapper"))})]})},i2=J9(Q9);import{jsx as N0,jsxs as l2}from"react/jsx-runtime";var U9=({id:P,resource:$,gridType:Z="day",variant:X="resource",dayNumberHeight:J,className:Y,columns:Q=[],allDay:q,showDayNumber:_=!1,isLastRow:z=!1})=>{let{renderResource:G}=O(),K=X==="resource",V=Q.some((F)=>F.days),M=q9(()=>{if(V)return[];return Q.map((F)=>F.day).filter((F)=>Boolean(F))},[Q,V]),{positionedEvents:N,dayEventsMap:f}=v2({days:M,gridType:Z,resourceId:$?.id,dayNumberHeight:J,allDay:q});return l2("div",{className:A("flex flex-1 relative min-w-0",Y),"data-testid":B.container.horizontal.row(P),children:[K&&$&&N0(l0,{className:"w-20 sm:w-40 sticky left-0 bg-background z-20 h-full","data-testid":B.container.horizontal.rowLabel($.id),resource:$,children:G?G($):N0("div",{className:"wrap-break-word text-sm",children:$.title})}),l2("div",{className:"relative flex-1 flex min-w-0",children:[N0("div",{className:"flex w-full min-w-0",children:Q.map((F,U)=>{if(F.days)return N0(z9,{allDay:q,col:F,dayNumberHeight:J,gridType:Z,id:P,isLastCol:U===Q.length-1,isLastRow:z,resource:$,resourceId:$?.id,showDayNumber:_},F.id);return F.day?N0(TP,{allDay:q,className:A("flex-1 w-20",z&&"border-b-0",F.className),day:F.day,gridType:Z,hour:Z==="hour"?F.day.hour():void 0,precomputedEvents:f.get(n(F.day)),resourceId:$?.id,showDayNumber:_},F.day.toISOString()):null})}),!V&&N0("div",{className:"absolute inset-0 z-10 pointer-events-none",children:N0(i2,{"data-testid":B.container.eventsLayer("horizontal",P),days:M,gridType:Z,positionedEvents:N,resource:$,resourceId:$?.id})})]})]})},z9=Y1(({col:P,gridType:$="day",allDay:Z,resource:X,resourceId:J,dayNumberHeight:Y,showDayNumber:Q,isLastRow:q,isLastCol:_,id:z})=>{let G=P.days??[],{positionedEvents:K}=v2({days:G,gridType:$,resourceId:J,dayNumberHeight:Y,allDay:Z});return l2("div",{className:"flex relative w-full",children:[N0("div",{className:"flex w-full",children:G.map((V)=>N0(TP,{allDay:Z,className:A("flex-1 w-20",q&&"border-b-0",!_&&"border-r!",P.className),day:V,gridType:$,hour:$==="hour"?V.hour():void 0,resourceId:J,showDayNumber:Q},V.toISOString()))}),N0("div",{className:"absolute inset-0 z-10 pointer-events-none",children:N0(i2,{"data-testid":B.container.eventsLayer("horizontal",z),days:G,gridType:$,positionedEvents:K,resource:X,resourceId:J})})]})}),J2=Y1(U9);import{memo as _9}from"react";import{jsx as q1}from"react/jsx-runtime";var K9=({className:P})=>{let{t:$}=O();return q1("div",{className:A("w-16 border-r shrink-0 sticky left-0 bg-background z-20 flex border-b items-center justify-center px-1 text-xs text-muted-foreground",P),children:q1("span",{className:"truncate",children:$("allDay")})})},VP=_9(K9);import{jsx as U1,jsxs as A9}from"react/jsx-runtime";var L9=({days:P,classes:$,resource:Z,showSpacer:X=!0})=>{let J=P.map((Y,Q)=>({id:B.col.allDay(Y,Q),day:Y,gridType:"day",className:A("h-full min-h-12 border-r last:border-r-0",$?.cell)}));return A9("div",{className:A("flex w-full bg-background",$?.row),"data-testid":"all-day-row",children:[X&&U1(VP,{className:$?.spacer}),U1(J2,{allDay:!0,className:"flex-1 min-h-fit border-b",columns:J,dayNumberHeight:0,gridType:"day",id:B.allDayRow(Z?.id),isLastRow:!0,resource:Z,variant:"regular"})]})},u0=G9(L9);import{jsx as _1,Fragment as z1}from"react/jsx-runtime";var I0=({date:P})=>{let{renderHour:$,timeFormat:Z}=O();if($)return _1(z1,{children:$(P)});return _1(z1,{children:P.format(Z==="12-hour"?"h A":"H")})};import{useRef as k9}from"react";import{useEffect as N9,useRef as V9}from"react";var W9=/^(\d{1,2})(?::\d{1,2})?(?::\d{1,2})?$/,F9="[data-hour]",M9=(P)=>{let $=W9.exec(P);if(!$)return null;let Z=Number.parseInt($[1],10);return Z>=0&&Z<=23?Z:null},u2=(P)=>Number.parseInt(P.getAttribute("data-hour")??"",10),B9=(P,$)=>{let Z=P.at(0),X=P.at(-1);if(!Z||!X)return null;if($<=u2(Z))return Z;if($>=u2(X))return X;return P.find((J)=>u2(J)===$)??null},O9=(P,$,Z,X)=>{let J=$.getBoundingClientRect(),Y=Z.getBoundingClientRect();if(X==="horizontal"){P.scrollTo({left:J.left-Y.left,behavior:"auto"});return}P.scrollTo({top:J.top-Y.top,behavior:"auto"})},Q2=({viewportRef:P,scrollTime:$,enabled:Z,scrollKey:X,axis:J="vertical"})=>{let Y=V9(null);N9(()=>{if(!Z||!$)return;if(Y.current===X)return;let Q=M9($);if(Q===null)return;let q=P.current;if(!q)return;let _=Array.from(q.querySelectorAll(F9)),z=_.at(0),G=B9(_,Q);if(!z||!G)return;O9(q,G,z,J),Y.current=X},[Z,$,X,P,J])};import{memo as S9}from"react";import{memo as f9}from"react";import{useMemo as G1}from"react";var K1=({days:P,gridType:$="hour",events:Z})=>{let X=Z.filter((M)=>!M.allDay).toSorted((M,N)=>M.start.diff(N.start));if(X.length===0)return[];let J=P.at(0)||T(),Y=P.length,Q=$==="day",q=[],_=[],z=null;for(let M of X){if(z&&M.start.isSameOrAfter(z)){if(_.length>0)q.push(_);_=[]}_.push(M),z=z?T.max(z,M.end):M.end}if(_.length>0)q.push(_);let G=(M)=>{let N=M.start.diff(J,$,!0),f=M.end.diff(J,$,!0);if(Q){if(N=Math.floor(N),f=Math.ceil(f),f<=N)f=N+1}if(N<0)N=0;if(f>Y)f=Y;let F=Math.max(0,f-N);if(F===0)return null;return{top:N/Y*100,height:F/Y*100}},K=(M)=>M===2?25:M===3?50:M===4?60:70,V=[];for(let M of q){if(M.length===1){let U=M[0],L=G(U);if(!L)continue;V.push({...U,left:0,width:100,...L});continue}let N=[...M].sort((U,L)=>{let W=L.end.diff(L.start,"minute")-U.end.diff(U.start,"minute");return W!==0?W:U.start.diff(L.start)}),f=N.length,F=f>1?K(f)/(f-1):0;for(let U=0;U<f;U++){let L=N[U],W=G(L);if(!W)continue;let I=U===0?0:F*U;V.push({...L,...W,left:I,width:100-I,zIndex:U+1})}}return V};var L1=({days:P,gridType:$,resourceId:Z})=>{let{getEventsForDateRange:X,getEventsForResource:J}=O(),Y=P.at(0),Q=P.at(-1),q=Y?.startOf("day"),_=Q?.endOf("day"),z=G1(()=>{if(!q||!_)return[];let K=X(q,_);if(Z)K=_P(K,J(Z));return K.filter((V)=>!V.allDay)},[q,_,X,Z,J]);return G1(()=>{return K1({days:P,events:z,gridType:$})},[P,$,z])};import{jsx as o2,jsxs as R9}from"react/jsx-runtime";var I9=({days:P,gridType:$="hour",resourceId:Z,resource:X,"data-testid":J})=>{let Y=L1({days:P,gridType:$,resourceId:Z}),Q=P.at(0),q=P.at(-1)?.add(1,$),_=$==="hour"&&Boolean(Q&&q);return R9("div",{className:"relative w-full h-full pointer-events-none z-10 overflow-clip","data-testid":J,children:[_&&Q&&q&&o2(X2,{rangeEnd:q,rangeStart:Q,resource:X}),Y.map((z,G)=>{let K=`event-${z.id}-${G}-${P.at(0)?.toISOString()}-${Z??"no-resource"}`,V=z.end.diff(z.start,"minute")<=15;return o2("div",{className:"absolute",style:{left:`${z.left}%`,width:`calc(${z.width}% - var(--spacing) * 2)`,top:`${z.top}%`,height:`${z.height}%`},children:o2(NP,{className:A("pointer-events-auto",{"[&_p]:text-[10px] [&_p]:mt-0":V}),elementId:K,event:z})},B.listKey(K,"wrapper"))})]})},A1=f9(I9);import{jsx as WP,jsxs as T9}from"react/jsx-runtime";var p9=({id:P,days:$,resourceId:Z,resource:X,"data-testid":J,gridType:Y,className:Q,renderCell:q,noEvents:_,slotDurationMinutes:z=60,isLastColumn:G})=>{let K=Math.floor(60/z),V=Array.from({length:K},(N,f)=>f*z),M=V.length>1;return WP("div",{className:A("flex flex-col flex-1 items-center min-w-20 justify-center bg-background relative",G?"border-r-0":"border-r",Q),"data-testid":J||B.container.vertical.col(P),children:T9("div",{className:"w-full h-full relative grid",style:{gridTemplateRows:`repeat(${$.length}, minmax(0, 1fr))`},children:[$.map((N,f)=>{let F=N.format("HH");if(q){let U=P===B.col.time,L=U?B.cell.verticalTime(F):B.cell.vertical(N,F,"00",Z);return WP("div",{className:"min-h-[60px] border-b border-r","data-hour":U?F:void 0,"data-testid":L,children:q(N)},B.listKey(P,f,F))}return WP("div",{className:"flex flex-col min-h-[60px]",children:V.map((U)=>{let L=String(U).padStart(2,"0"),W=B.cell.vertical(N,F,L,Z);return WP(TP,{className:A("hover:bg-accent relative z-10 flex-1 min-h-0 cursor-pointer border-b border-r-0",M&&"border-dashed"),"data-testid":W,day:M?N.minute(U):N,gridType:Y,hour:N.hour(),minute:M?U:void 0,resourceId:Z,shouldRenderEvents:!1},B.listKey(P,f,L))})},B.listKey(P,f,F))}),!_&&WP("div",{className:"absolute inset-0 z-10 pointer-events-none",children:WP(A1,{"data-testid":B.container.eventsLayer("vertical",P),days:$,gridType:Y,resource:X,resourceId:Z})})]})})},N1=S9(p9);import{memo as H9}from"react";import{jsx as V1,jsxs as w9}from"react/jsx-runtime";var b9=({children:P,classes:$,allDayRow:Z,expandAllDayRow:X=!1})=>{let{stickyViewHeader:J,viewHeaderClassName:Y}=O((q)=>({stickyViewHeader:q.stickyViewHeader,viewHeaderClassName:q.viewHeaderClassName})),Q="min-w-full w-fit";return w9("div",{className:A(X&&"flex h-full flex-col",J&&"sticky top-0 z-21 bg-background",Y),children:[V1("div",{className:A("h-12 border-b","min-w-full w-fit",$?.header),"data-testid":"vertical-grid-header",children:P}),Z&&V1("div",{className:A("flex min-h-12","min-w-full w-fit",X&&"flex-1 overflow-hidden",$?.allDay),"data-testid":"vertical-grid-all-day",children:Z})]})},W1=H9(b9);import{jsx as FP,jsxs as F1}from"react/jsx-runtime";var R0=({columns:P,children:$,gridType:Z="day",variant:X="resource",classes:J,allDayRow:Y,slotDurationMinutes:Q,style:q})=>{let _=X==="resource",z=!_,G=P.every((U)=>!U.days?.length),{currentDate:K,view:V,scrollTime:M}=O(),N=k9(null);Q2({viewportRef:N,scrollTime:M,enabled:Z==="hour"&&!G,scrollKey:`${V}-${K.format("YYYY-MM-DD")}`});let F=$&&FP(W1,{allDayRow:Y,classes:{header:J?.header,allDay:J?.allDay},expandAllDayRow:G,children:$});if(G&&F)return FP("div",{className:"h-full flex flex-col","data-testid":"vertical-grid-container",style:q,children:F});return F1("div",{className:"h-full flex flex-col","data-testid":"vertical-grid-container",style:q,children:[z&&F,F1(O0,{className:A("h-full",z&&"overflow-auto"),"data-testid":"vertical-grid-scroll",viewPortProps:{className:"*:flex! *:flex-col! *:min-h-full",ref:N},children:[_&&F,FP("div",{className:A("flex flex-1 min-w-full w-fit",J?.body),"data-testid":"vertical-grid-body",children:P.map((U,L)=>FP(N1,{...U,gridType:Z,isLastColumn:L===P.length-1,slotDurationMinutes:Q},B.listKey(U.id,L)))}),FP(k0,{className:"z-30"})," ",FP(k0,{className:"z-30",orientation:"horizontal"})," "]})]})};function z0({referenceDate:P,businessHours:$,hideNonBusinessHours:Z,allDates:X=[P],resourceBusinessHours:J=[]}){let Y=G5({referenceDate:P}),Q=!!$||J.length>0;if(!(Z&&Q))return Y;let{minStart:_,maxEnd:z,hasBusinessHours:G}=oP({allDates:X,businessHours:$,resourceBusinessHours:J,hideNonBusinessHours:Z});if(!G)return Y;if(_>=z)return[];return Y.filter((K)=>{let V=K.hour();return V>=_&&V<z})}import{jsx as MP,jsxs as m9}from"react/jsx-runtime";var M1=()=>{let{currentDate:P,t:$,businessHours:Z,hideNonBusinessHours:X,slotDuration:J}=O(),Y=u(P),Q=z0({referenceDate:P,businessHours:Z,hideNonBusinessHours:X,allDates:[P]}),q={id:B.col.time,day:void 0,days:Q,className:"shrink-0 w-16 min-w-16 max-w-16 sticky left-0 bg-background z-20 border-r-0",gridType:"hour",noEvents:!0,renderCell:(z)=>MP("div",{className:"text-muted-foreground p-2 text-right text-[10px] sm:text-xs flex flex-col items-center",children:MP(I0,{date:z})})},_={id:B.col.day(P),day:P,days:Q,className:"w-[calc(100%-4rem)] flex-1",gridType:"hour"};return MP(R0,{allDayRow:MP(u0,{days:[P]}),classes:{header:"w-full",body:"w-full",allDay:"w-full"},columns:[q,_],gridType:"hour",slotDurationMinutes:J,variant:"regular",children:MP("div",{className:"flex flex-1 justify-center items-center min-h-12","data-testid":"day-view-header",children:m9(D,{className:A("flex justify-center items-center text-center text-sm font-semibold sm:text-xl",Y&&"text-primary"),transitionKey:n(P),children:[P.format("dddd, LL"),Y&&MP("span",{className:"bg-primary text-primary-foreground ml-2 rounded-full px-1 py-0.5 text-xs sm:px-2 sm:text-sm",children:$("today")})]})})})};import{useMemo as D9}from"react";import{useRef as E9}from"react";import{memo as g9}from"react";import{jsx as h9}from"react/jsx-runtime";var C9=({children:P,className:$})=>{let{stickyViewHeader:Z,viewHeaderClassName:X}=O((J)=>({stickyViewHeader:J.stickyViewHeader,viewHeaderClassName:J.viewHeaderClassName}));return h9("div",{className:A("flex h-12 w-fit",Z&&"sticky top-0 z-21 bg-background",$,X),"data-testid":"horizontal-grid-header",children:P})},B1=g9(C9);import{jsx as BP,jsxs as O1}from"react/jsx-runtime";var Y2=({rows:P,children:$,classes:Z,allDay:X,gridType:J,variant:Y="resource",dayNumberHeight:Q})=>{let{currentDate:q,view:_,scrollTime:z}=O(),G=E9(null),K=Y==="resource",V=!K;Q2({viewportRef:G,scrollTime:z,enabled:J==="hour"&&K,scrollKey:`${_}-${q.format("YYYY-MM-DD")}`,axis:"horizontal"});let N=$&&BP(B1,{className:Z?.header,children:$});return O1("div",{className:"h-full flex flex-col","data-testid":"horizontal-grid-container",children:[V&&N,O1(O0,{className:A("h-full",V&&"overflow-auto"),"data-testid":"horizontal-grid-scroll",viewPortProps:{className:"*:flex! *:flex-col! *:min-h-full",ref:G},children:[K&&N,BP("div",{className:A("flex flex-1 w-fit",Z?.body),"data-testid":"horizontal-grid-body",children:BP("div",{className:"relative w-full flex flex-col flex-1",children:P.map((f,F)=>BP(J2,{allDay:f.allDay??X,dayNumberHeight:Q,gridType:J,isLastRow:F===P.length-1,variant:Y,...f},f.id))},q.format("YYYY-MM"))}),BP(k0,{className:"z-30"}),BP(k0,{className:"z-30",orientation:"horizontal"})]})]})};import{jsx as d2}from"react/jsx-runtime";var f1=({className:P})=>{let{firstDayOfWeek:$,stickyViewHeader:Z,viewHeaderClassName:X,currentDate:J}=O(),Y=r(J,$);return d2("div",{className:A("flex w-full",Z&&"sticky top-0 z-20",X,P),"data-testid":"month-header",children:Y.map((Q,q)=>d2(D,{className:"py-2 text-center font-medium border-r last:border-r-0 border-b flex-1 min-w-0","data-testid":B.header.weekday("month",Q.format("ddd")),delay:q*0.05,transitionKey:Q.toISOString(),children:d2("span",{className:"text-sm capitalize truncate w-full block",children:Q.format("ddd")})},Q.toISOString()))})};import{jsx as I1}from"react/jsx-runtime";var R1=()=>{let{currentDate:P,firstDayOfWeek:$}=O(),X=D9(()=>zP(P,$),[P,$]).map((J,Y)=>({id:B.listKey("week",Y),columns:J.map((Q)=>({id:B.col.day(Q),day:Q,className:"w-auto",gridType:"day"})),className:"flex-1",showDayNumber:!0}));return I1(Y2,{classes:{body:"w-full",header:"w-full"},rows:X,variant:"regular",children:I1(f1,{className:"h-12"})})};import{useMemo as q2}from"react";import{jsx as g0,jsxs as r2}from"react/jsx-runtime";var S1="flex-1 min-w-0",p1="w-10 sm:w-16 min-w-10 sm:min-w-16 max-w-10 sm:max-w-16",T1=()=>{let{t:P,currentDate:$,firstDayOfWeek:Z,selectDate:X,openEventForm:J,businessHours:Y,hideNonBusinessHours:Q,hiddenDays:q,slotDuration:_}=O(),z=q2(()=>r($,Z),[$,Z]),G=q2(()=>q?z.filter((F)=>!q.has(F.day())):z,[z,q]),K=q2(()=>z0({referenceDate:$,businessHours:Y,hideNonBusinessHours:Q,allDates:z}),[$,Y,Q,z]),V={id:B.col.time,days:K,day:void 0,className:`shrink-0 ${p1} sticky left-0 bg-background z-20 border-r-0`,gridType:"hour",noEvents:!0,renderCell:(F)=>g0("div",{className:"text-muted-foreground p-2 text-right text-[10px] sm:text-xs flex flex-col items-center",children:g0(I0,{date:F})})},M=q2(()=>{return G.map((F)=>({id:B.col.day(F),day:F,label:F.format("D"),className:S1,days:z0({referenceDate:F,businessHours:Y,hideNonBusinessHours:Q,allDates:z}),value:F}))},[z,Y,Q,G.map]),N={"--visible-days":G.length},f="w-full";return g0(R0,{allDayRow:g0(u0,{classes:{cell:S1,spacer:p1},days:G}),classes:{header:"w-full h-18",allDay:"w-full",body:"w-full"},columns:[V,...M],gridType:"hour",slotDurationMinutes:_,style:N,variant:"regular",children:r2("div",{className:"flex h-full flex-1","data-testid":"week-view-header",children:[g0("div",{className:"w-10 sm:w-16 min-w-10 sm:min-w-16 h-full shrink-0 items-center justify-center border-r p-2 flex",children:r2("div",{className:"flex flex-col items-center justify-center min-w-0 w-full",children:[g0("span",{className:"text-muted-foreground text-xs truncate w-full text-center",children:P("week")}),g0("span",{className:"font-medium truncate w-full text-center",children:$.week()})]})}),G.map((F,U)=>{let L=u(F),W=B.header.week.day(F);return r2(D,{className:A("hover:bg-accent flex-1 min-w-0 flex flex-col justify-center cursor-pointer p-1 text-center sm:p-2 border-r last:border-r-0 w-20 h-full",L&&"bg-primary/10 font-bold"),"data-testid":B.header.weekday("week",F.format("dddd")),delay:U*0.05,onClick:()=>{X(F),J({start:F})},transitionKey:W,children:[g0("div",{className:"text-xs sm:text-sm truncate w-full",children:F.format("ddd")}),g0("div",{className:A("mx-auto mt-1 flex h-6 w-6 items-center justify-center rounded-full text-xs",L&&"bg-primary text-primary-foreground"),children:F.format("D")})]},W)})]})})};import{jsx as o0,jsxs as HP}from"react/jsx-runtime";var j9=["bg-primary","bg-blue-500","bg-green-500"],x9=42,H1=()=>{let{currentDate:P,selectDate:$,events:Z,setView:X,getEventsForDateRange:J,t:Y,firstDayOfWeek:Q}=O(),q=P.year(),_=r(T(),Q).map((U)=>({id:U.day().toString(),label:U.format("dd")})),z=()=>{return Array.from({length:12},(U,L)=>{let W=T().year(q).month(L).startOf("month"),I=Z.filter((R)=>R.start.year()===q&&R.start.month()===L);return{date:W,name:W.format("MMMM"),eventCount:I.length,monthKey:W.format("MM")}})},G=(U)=>{let L=U.startOf("month").startOf("week");return Array.from({length:x9},(W,I)=>{let R=L.add(I,"day"),S=R.startOf("day"),w=R.endOf("day"),k=J(S,w);return{date:R,dayKey:n(R),isInCurrentMonth:R.month()===U.month(),isToday:u(R),isSelected:R.isSame(P,"day"),eventCount:k.length}})},K=(U,L,W)=>{W?.stopPropagation(),$(U),X(L)},V=(U)=>{let L=U===1?Y("event"):Y("events");return`${U} ${L}`},M=(U)=>{let W=U.isInCurrentMonth?"":"text-muted-foreground opacity-50",I=U.isToday?"bg-primary text-primary-foreground rounded-full":"",R=U.isSelected&&!U.isToday?"bg-muted rounded-full font-bold":"",S=U.eventCount>0&&!U.isToday&&!U.isSelected?"font-medium":"";return A("relative flex aspect-square w-full cursor-pointer flex-col items-center justify-center hover:bg-accent rounded-sm transition-colors duration-200",W,I,R,S)},N=(U,L)=>{return A("h-[3px] w-[3px] rounded-full",L?"bg-primary-foreground":U)},f=z(),F=(U)=>{if(U===0)return"";return V(U)};return HP(O0,{className:"h-full","data-testid":"year-view",children:[o0("div",{className:"grid auto-rows-fr grid-cols-1 gap-4 p-4 sm:grid-cols-2 lg:grid-cols-3","data-testid":"year-grid",children:f.map((U,L)=>{let W=G(U.date),I=L*0.05;return HP("div",{className:"hover:border-primary flex flex-col rounded-lg border p-3 text-left transition-all duration-200 hover:shadow-md","data-testid":B.header.year.month(U.monthKey),children:[HP(D,{className:"mb-2 flex items-center justify-between",delay:I,transitionKey:B.listKey("month",U.monthKey),children:[o0("button",{className:"text-lg font-medium hover:underline cursor-pointer","data-testid":B.header.year.month(U.monthKey,"title"),onClick:()=>K(U.date,"month"),type:"button",children:U.name}),U.eventCount>0&&o0("span",{className:"bg-primary text-primary-foreground rounded-full px-2 py-1 text-xs","data-testid":B.header.year.month(U.monthKey,"count"),children:V(U.eventCount)})]},B.listKey("month",U.monthKey)),HP("div",{className:"grid grid-cols-7 gap-px text-[0.6rem]","data-testid":B.header.year.month(U.monthKey,"mini"),children:[_.map((R)=>o0("div",{className:"text-muted-foreground h-3 text-center",children:R.label},B.listKey("header",U.monthKey,R.id))),W.map((R)=>{let S=B.header.year.day(U.date.format("YYYY-MM"),R.dayKey),w=R.eventCount>0,k=Math.min(R.eventCount,3),h=j9.slice(0,k);return HP("button",{className:M(R),"data-testid":S,onClick:(j)=>K(R.date,"day",j),title:F(R.eventCount),type:"button",children:[o0("span",{className:"text-center leading-none",children:R.date.date()}),w&&o0("div",{className:A("absolute bottom-0 flex w-full justify-center space-x-px",R.isToday&&"bottom-px"),children:h.map((j)=>o0("span",{className:N(j,R.isToday)},j))})]},R.dayKey)})]})]},U.monthKey)})}),o0(k0,{className:"z-30"})]})};import{useCallback as n2,useMemo as v9}from"react";import{jsx as y9}from"react/jsx-runtime";var b1=({children:P,events:$=[],firstDayOfWeek:Z=0,initialView:X="month",initialDate:J,renderEvent:Y,onEventClick:Q,onCellClick:q,onViewChange:_,onEventAdd:z,onEventUpdate:G,onEventDelete:K,onDateChange:V,locale:M,timezone:N,disableCellClick:f,disableEventClick:F,disableDragAndDrop:U,dayMaxEvents:L,eventSpacing:W=h0,eventHeight:I=F0,stickyViewHeader:R=!0,viewHeaderClassName:S="",headerComponent:w,headerClassName:k,businessHours:h,renderEventForm:j,translations:c,translator:e,timeFormat:E="12-hour",classesOverride:m,renderCurrentTimeIndicator:i,renderHour:_0,hideNonBusinessHours:G0=!1,hideExportButton:W0=!1,hiddenDays:S0,slotDuration:J0=60,scrollTime:L0})=>{let d=xP({events:$,firstDayOfWeek:Z,initialView:X,initialDate:J,businessHours:h,onEventAdd:z,onEventUpdate:G,onEventDelete:K,onDateChange:V,onViewChange:_,locale:M,timezone:N,translations:c,translator:e}),p0=n2((X0)=>{d.setSelectedEvent(X0),d.setIsEventFormOpen(!0)},[d]),T0=n2((X0)=>{if(F)return;if(Q)Q(X0);else p0(X0)},[F,Q,p0]),H0=n2((X0)=>{if(f)return;if(q)q(X0);else d.openEventForm(X0)},[q,f,d]),y=v9(()=>({...d,renderEvent:Y,onEventClick:T0,onCellClick:H0,locale:M,timezone:N,disableCellClick:f,disableEventClick:F,disableDragAndDrop:U,dayMaxEvents:L,eventSpacing:W,eventHeight:I,stickyViewHeader:R,viewHeaderClassName:S,headerComponent:w,headerClassName:k,businessHours:h,renderEventForm:j,timeFormat:E,classesOverride:m,renderCurrentTimeIndicator:i,renderHour:_0,hideNonBusinessHours:G0,hideExportButton:W0,hiddenDays:S0,slotDuration:J0,scrollTime:L0}),[d,Y,T0,H0,M,N,f,F,U,L,W,I,R,S,w,k,h,j,E,m,i,_0,G0,W0,S0,J0,L0]);return y9(hP.Provider,{value:y,children:P})};import{jsx as V0,jsxs as l9}from"react/jsx-runtime";var c9=()=>{let{view:P,dayMaxEvents:$}=O();return l9("div",{className:"flex flex-col w-full h-full","data-testid":"ilamy-calendar",children:[V0(RP,{className:"p-1 shrink-0"}),V0(yP,{children:V0(D,{className:"w-full min-h-0 flex-1",direction:"horizontal",transitionKey:P,children:V0("div",{className:"border h-full w-full","data-testid":"calendar-body",children:{month:V0(R1,{dayMaxEvents:$},"month"),week:V0(T1,{},"week"),day:V0(M1,{},"day"),year:V0(H1,{},"year")}[P]})})}),V0(tP,{})]})},i9=({events:P,firstDayOfWeek:$="sunday",initialView:Z="month",initialDate:X,dayMaxEvents:J=ZP,eventSpacing:Y=h0,eventHeight:Q=F0,stickyViewHeader:q=!0,viewHeaderClassName:_="",timeFormat:z="12-hour",hideNonBusinessHours:G=!1,hiddenDays:K,...V})=>{return V0(b1,{dayMaxEvents:J,eventHeight:Q,eventSpacing:Y,events:mP(P),firstDayOfWeek:E0[$],hiddenDays:kP(K),hideNonBusinessHours:G,initialDate:XP(X),initialView:Z,stickyViewHeader:q,timeFormat:z,viewHeaderClassName:_,...V,children:V0(c9,{})})};import{jsx as u9}from"react/jsx-runtime";var OP=({days:P,gridType:$="day",children:Z,classes:X})=>{let{resources:J}=O(),Y=P.map((q)=>{let _=Array.isArray(q),z=_?q[0]:q;return{id:z?B.col.day(z):"day-col-unknown",day:_?void 0:q,days:_?q:void 0,className:X?.cell,gridType:$}}),Q=J.map((q)=>({id:q.id,title:q.title,resource:q,columns:Y}));return u9(Y2,{classes:X,dayNumberHeight:0,gridType:$,rows:Q,children:Z})};import{jsx as a2}from"react/jsx-runtime";var U2=({hours:P,view:$,delayStep:Z})=>a2("div",{className:"flex h-12 border-b",children:P.map((X,J)=>{let Y=X.isSame(T(),"hour"),Q=X.format("HH"),q=B.header.week.hour(X,J);return a2(D,{className:A("min-w-20 flex-1 border-r last:border-r-0 flex items-center justify-center text-xs shrink-0",Y&&"bg-blue-50 text-blue-600 font-medium"),"data-hour":Q,"data-testid":B.header.resource.timeLabel($,Q),delay:J*Z,transitionKey:B.listKey(q,"motion"),children:a2(I0,{date:X})},B.listKey(q,"animated"))})});import{jsx as z2,jsxs as o9}from"react/jsx-runtime";var w1=()=>{let{currentDate:P,t:$,businessHours:Z,hideNonBusinessHours:X,resources:J}=O(),Y=z0({referenceDate:P,businessHours:Z,hideNonBusinessHours:X,allDates:[P],resourceBusinessHours:J.map((Q)=>Q.businessHours).filter(Boolean)});return o9(OP,{classes:{header:"min-w-full",body:"min-w-full",cell:"min-w-20 flex-1"},days:Y,gridType:"hour",children:[z2("div",{className:"w-20 sm:w-40 border-b border-r shrink-0 flex justify-center items-center sticky top-0 left-0 bg-background z-20",children:z2("div",{className:"text-sm truncate px-1 min-w-0",children:$("resources")})}),z2("div",{className:"flex-1 flex flex-col",children:z2(U2,{delayStep:0.05,hours:Y,view:"day"})})]})};import{jsx as s0,jsxs as k1}from"react/jsx-runtime";var m1=()=>{let{currentDate:P,resources:$,businessHours:Z,hideNonBusinessHours:X,slotDuration:J}=O(),Y=z0({referenceDate:P,businessHours:Z,hideNonBusinessHours:X,allDates:[P],resourceBusinessHours:$.map((_)=>_.businessHours).filter(Boolean)}),Q={id:B.col.time,day:void 0,days:Y,className:"shrink-0 w-16 min-w-16 max-w-16 sticky left-0 bg-background z-20 border-r-0",gridType:"hour",noEvents:!0,renderCell:(_)=>s0("div",{className:"text-muted-foreground p-2 text-right text-[10px] sm:text-xs flex flex-col items-center",children:s0(I0,{date:_})})},q=$.map((_)=>({id:B.col.day(P,_.id),resourceId:_.id,resource:_,days:Y,day:P,gridType:"hour"}));return s0(R0,{allDayRow:k1("div",{className:"flex w-full",children:[s0(VP,{}),$.map((_)=>s0(u0,{classes:{cell:"min-w-20 border-r!"},days:[P],resource:_,showSpacer:!1},B.allDayRow(_.id)))]}),classes:{body:"w-full",header:"w-full"},columns:[Q,...q],"data-testid":"resource-day",gridType:"hour",slotDurationMinutes:J,children:k1("div",{className:"flex border-b h-12 flex-1","data-testid":"resource-month-header",children:[s0("div",{className:"shrink-0 border-r w-16 sticky top-0 left-0 bg-background z-20"}),$.map((_)=>s0(l0,{className:"min-w-20 flex-1",resource:_},B.listKey("resource-cell",_.id)))]})})};import{jsx as g1}from"react/jsx-runtime";var C1=()=>{let{orientation:P}=O();if(P==="vertical")return g1(m1,{});return g1(w1,{})};import{useMemo as d9}from"react";import{jsx as _2,jsxs as h1}from"react/jsx-runtime";var E1=()=>{let{currentDate:P,t:$}=O(),Z=d9(()=>{return K5(P)},[P]);return h1(OP,{days:Z,children:[_2("div",{className:"w-20 sm:w-40 border-b border-r shrink-0 flex justify-center items-center sticky top-0 left-0 bg-background z-20",children:_2("div",{className:"text-sm truncate px-1 min-w-0",children:$("resources")})}),Z.map((X,J)=>{let Y=`resource-month-header-${X.toISOString()}`;return h1(D,{className:"w-20 border-b border-r shrink-0 flex items-center justify-center flex-col",delay:J*0.05,transitionKey:B.listKey(Y,"motion"),children:[_2("div",{className:"text-xs font-medium",children:X.format("D")}),_2("div",{className:"text-xs text-muted-foreground",children:X.format("ddd")})]},B.listKey(Y,"animated"))})]})};import{jsx as bP,jsxs as D1}from"react/jsx-runtime";var j1=()=>{let{currentDate:P,resources:$}=O(),Z=P.startOf("month"),X=Array.from({length:P.daysInMonth()},(Q,q)=>Z.add(q,"day")),J={id:B.col.date,days:X,day:void 0,className:"shrink-0 w-16 min-w-16 max-w-16 sticky left-0 bg-background z-20 border-r-0",gridType:"day",noEvents:!0,renderCell:(Q)=>D1("div",{className:"text-muted-foreground p-2 text-right text-[10px] sm:text-xs flex flex-col items-center",children:[bP("span",{children:Q.format("D")}),bP("span",{children:Q.format("ddd")})]})},Y=$.map((Q)=>({id:B.col.resource("month",Q.id),day:void 0,resourceId:Q.id,days:X,gridType:"day"}));return bP(R0,{classes:{header:"w-full",body:"w-full"},columns:[J,...Y],"data-testid":"resource-month-vertical-grid",children:D1("div",{className:"flex border-b h-12 flex-1","data-testid":"resource-month-header",children:[bP("div",{className:"shrink-0 border-r w-16 sticky top-0 left-0 bg-background z-20"}),$.map((Q)=>bP(l0,{className:"min-w-20 flex-1",resource:Q},B.listKey("resource-cell",Q.id)))]})})};import{jsx as x1}from"react/jsx-runtime";var v1=()=>{let{orientation:P}=O();if(P==="vertical")return x1(j1,{});return x1(E1,{})};import{useMemo as t2}from"react";function d0(){let{currentDate:P,firstDayOfWeek:$,resources:Z,weekViewGranularity:X,businessHours:J,hideNonBusinessHours:Y,hiddenDays:Q}=O(),q=X==="hourly",_=t2(()=>r(P,$),[P,$]),z=t2(()=>Q?_.filter((K)=>!Q.has(K.day())):_,[_,Q]),G=t2(()=>Z.flatMap((K)=>K.businessHours?[K.businessHours]:[]),[Z]);return{isHourly:q,resources:Z,weekDays:_,visibleDays:z,currentDate:P,businessHours:J,hideNonBusinessHours:Y,resourceBusinessHours:G}}import{jsx as K2,jsxs as r9}from"react/jsx-runtime";var y1=({days:P})=>{let{weekViewGranularity:$}=O(),Z=$==="hourly";return K2("div",{className:"flex h-12",children:P.map((X,J)=>{let Y=u(X),Q=B.header.week.day(X);return K2(D,{className:A("shrink-0 border-r last:border-r-0 border-b flex-1 flex items-center text-center font-medium min-w-20",Y&&"bg-primary/10 font-bold"),"data-testid":B.header.resource.weekDay,delay:J*0.05,transitionKey:B.listKey(Q,"motion"),children:r9("div",{className:A(Z?"sticky left-1/2":"w-full text-center"),children:[K2("div",{className:"text-sm truncate w-full",children:X.format("ddd")}),K2("div",{className:"text-xs text-muted-foreground",children:X.format("D")})]})},B.listKey(Q,"animated"))})})};import{useMemo as n9}from"react";function c1(){let{isHourly:P,weekDays:$,businessHours:Z,hideNonBusinessHours:X,resourceBusinessHours:J}=d0();return{weekHours:n9(()=>{if(!P)return[];return $.map((Q)=>z0({referenceDate:Q,businessHours:Z,hideNonBusinessHours:X,resourceBusinessHours:J}))},[P,$,Z,X,J])}}import{jsx as G2,jsxs as i1}from"react/jsx-runtime";var l1=()=>{let{t:P}=O(),{isHourly:$,weekDays:Z}=d0(),{weekHours:X}=c1();return i1(OP,{classes:{header:A($?"h-24":"h-12","min-w-full"),body:"min-w-full",cell:"min-w-20 flex-1"},days:$?X:Z,gridType:$?"hour":"day",children:[G2("div",{className:"w-20 sm:w-40 border-b border-r shrink-0 flex justify-center items-center sticky top-0 left-0 bg-background z-20",children:G2("div",{className:"text-sm truncate px-1 min-w-0",children:P("resources")})}),i1("div",{className:"flex-1 flex flex-col",children:[G2(y1,{days:Z}),$&&G2(U2,{delayStep:0.005,hours:X.flat(),view:"week"})]})]})};import{useMemo as a1}from"react";import{jsx as L2,jsxs as u1}from"react/jsx-runtime";var o1=({columns:P})=>{let{currentDate:$}=O();return u1("div",{className:"flex h-12",children:[L2("div",{className:"shrink-0 w-16 border-r border-b z-20 bg-background sticky left-0",children:L2("span",{className:"px-2 h-full w-full flex justify-center items-start font-medium",children:$.week()})}),P.map((Z,X)=>{let J=Z.day;if(!J)return null;let Y=u(J),Q=B.header.week.hour(J,Z.resourceId??"");return u1(D,{className:A("min-w-20 flex-1 border-r last:border-r-0 border-b flex flex-col items-center justify-center text-xs shrink-0 bg-background",Y&&"bg-primary/10 font-bold"),"data-testid":B.header.resource.timeLabel("week",J.format("HH")),delay:X*0.05,transitionKey:B.listKey(Q,"motion"),children:[L2("div",{className:"text-sm truncate w-full text-center",children:J.format("ddd")}),L2("div",{className:"text-xs text-muted-foreground",children:J.format("D")})]},B.listKey(Q,"animated"))})]})};import{jsx as wP,jsxs as d1}from"react/jsx-runtime";var r1=({resources:P})=>{let{weekViewGranularity:$,t:Z,currentDate:X}=O(),J=$==="hourly";return d1("div",{className:"flex h-12",children:[wP("div",{className:"shrink-0 w-16 border-r z-20 bg-background sticky left-0",children:d1("span",{className:A("px-2 h-full w-full flex flex-col justify-center text-xs text-muted-foreground text-center min-w-0",J?"justify-end":"justify-center border-b"),children:[wP("span",{className:"truncate w-full",children:Z("week")}),!J&&wP("span",{className:"font-medium text-foreground truncate w-full",children:X.week()})]})}),P.map((Y)=>{return wP(l0,{className:"min-w-20 flex-1 border-b",resource:Y,children:wP("div",{className:A("sticky text-sm font-medium truncate",J?"left-1/4":"left-1"),children:Y.title})},B.listKey("resource-cell",Y.id))})]})};import{useCallback as a9,useMemo as A2}from"react";function n1(){let{isHourly:P,resources:$,weekDays:Z,visibleDays:X,currentDate:J,businessHours:Y,hideNonBusinessHours:Q,resourceBusinessHours:q}=d0(),_=a9((M)=>{return z0({referenceDate:M,businessHours:Y,hideNonBusinessHours:Q,allDates:Z,resourceBusinessHours:q})},[Y,Q,Z,q]),z=A2(()=>_(J),[J,_]),G=A2(()=>$.flatMap((M)=>X.map((N)=>({id:B.col.day(N,M.id),className:"min-w-20 flex-1",resourceId:M.id,resource:M,day:N,days:_(N),gridType:"hour"}))),[$,X,_]),K=A2(()=>$.map((M)=>({id:B.col.resource("week",M.id),className:"min-w-20 flex-1",day:void 0,resourceId:M.id,resource:M,days:Z,gridType:"day"})),[$,Z]),V=A2(()=>{if(P)return G;return K},[P,G,K]);return{hours:z,columns:V}}import{jsx as C0,jsxs as s2,Fragment as t9}from"react/jsx-runtime";var t1=()=>{let{isHourly:P,resources:$,weekDays:Z,visibleDays:X}=d0(),{hours:J,columns:Y}=n1(),{slotDuration:Q}=O(),q=a1(()=>({id:P?B.col.time:B.col.date,days:P?J:Z,day:void 0,className:"shrink-0 w-16 min-w-16 max-w-16 sticky left-0 bg-background z-20 border-r-0",gridType:P?"hour":"day",noEvents:!0,renderCell:(z)=>C0("div",{className:"text-muted-foreground p-2 text-right text-[10px] sm:text-xs flex flex-col items-center",children:P?C0(I0,{date:z}):s2(t9,{children:[C0("span",{children:z.format("ddd")}),C0("span",{children:z.format("D")})]})})}),[J,P,Z]),_=a1(()=>{if(!P)return;return s2("div",{className:"flex w-full",children:[C0(VP,{}),$.map((z)=>C0(u0,{classes:{cell:"min-w-20 flex-1 border-r!"},days:X,resource:z,showSpacer:!1},B.allDayRow(z.id)))]})},[P,$,X]);return C0(R0,{allDayRow:_,classes:{header:P?"h-24":"h-12"},columns:[q,...Y],"data-testid":"resource-week",gridType:P?"hour":"day",slotDurationMinutes:Q,children:s2("div",{className:"flex-1 flex flex-col",children:[C0(r1,{resources:$,visibleDays:X}),P&&C0(o1,{columns:Y})]})})};import{jsx as s1}from"react/jsx-runtime";var e1=()=>{let{orientation:P}=O();if(P==="vertical")return s1(t1,{});return s1(l1,{})};import{jsx as r0,jsxs as s9}from"react/jsx-runtime";var P4=()=>{let{view:P}=O();return s9("div",{className:"flex flex-col w-full h-full","data-testid":"ilamy-resource-calendar",children:[r0(RP,{className:"p-1"}),r0(yP,{children:r0(D,{className:"w-full h-[calc(100%-3.5rem)] @container/calendar-body",direction:"horizontal",transitionKey:P,children:r0("div",{className:"border h-full w-full","data-testid":"calendar-body",children:{month:r0(v1,{},"month"),week:r0(e1,{},"week"),day:r0(C1,{},"day")}[P]})})}),r0(tP,{})]})};import{jsx as $4}from"react/jsx-runtime";var e9=({events:P=[],resources:$=[],firstDayOfWeek:Z="sunday",initialView:X="month",initialDate:J,disableDragAndDrop:Y=!1,dayMaxEvents:Q=ZP,timeFormat:q="12-hour",eventSpacing:_=h0,eventHeight:z=F0,hiddenDays:G,...K})=>{return $4(N5,{dayMaxEvents:Q,disableDragAndDrop:Y,eventHeight:z,eventSpacing:_,events:mP(P),firstDayOfWeek:E0[Z],hiddenDays:kP(G),initialDate:XP(J),initialView:X,resources:$,timeFormat:q,...K,children:$4(P4,{})})};export{m4 as useIlamyCalendarContext,UP as isRecurringEvent,W2 as generateRecurringEvents,F2 as defaultTranslations,gU as RRule,e9 as IlamyResourceCalendar,i9 as IlamyCalendar};
|
|
3
|
+
`,"\\n").replaceAll("\r","")},sP=(P,$=!1)=>{return $?P.format("YYYYMMDD"):P.utc().format("YYYYMMDD[T]HHmmss[Z]")},n5=(P)=>{return P.uid||`${P.id}@ilamy.calendar`},R$=(P)=>{try{return new O$(P).toString().split(`
|
|
4
|
+
`).find((Z)=>Z.startsWith("RRULE:"))||""}catch{return""}},I$=(P)=>{let $=p().utc().format("YYYYMMDD[T]HHmmss[Z]"),Z=P.allDay?";VALUE=DATE":"",X=P.rrule?R$(P.rrule):"",J=P.exdates?.length?P.exdates.map((q)=>sP(p(q),P.allDay)).join(","):null,Y=P.recurrenceId?sP(p(P.recurrenceId),P.allDay):null;return["BEGIN:VEVENT",`UID:${n5(P)}`,`DTSTART${Z}:${sP(P.start,P.allDay)}`,`DTEND${Z}:${sP(P.end,P.allDay)}`,`SUMMARY:${eP(P.title)}`,P.description&&`DESCRIPTION:${eP(P.description)}`,P.location&&`LOCATION:${eP(P.location)}`,X,J&&`EXDATE:${J}`,Y&&`RECURRENCE-ID:${Y}`,`DTSTAMP:${$}`,`CREATED:${$}`,`LAST-MODIFIED:${$}`,"STATUS:CONFIRMED","SEQUENCE:0","TRANSP:OPAQUE","END:VEVENT"].filter(Boolean).join(E2)},S$=(P)=>{let $=new Set;return P.filter((Z)=>{let X=n5(Z),J=Z.rrule&&!Z.recurrenceId,Y=Z.recurrenceId&&!Z.rrule;if(J)return $.add(X),!0;if(Y)return!0;return!Z.rrule&&!Z.recurrenceId&&!$.has(X)})},p$=(P,$="ilamy Calendar")=>{let Z=eP($),X=S$(P).map(I$);return["BEGIN:VCALENDAR","VERSION:2.0","PRODID:-//ilamy//ilamy Calendar//EN","CALSCALE:GREGORIAN","METHOD:PUBLISH",`X-WR-CALNAME:${Z}`,`X-WR-CALDESC:Exported from ${Z}`,f$,...X,"END:VCALENDAR"].join(E2)},a5=(P,$="calendar.ics",Z="ilamy Calendar")=>{let X=new Blob([p$(P,Z)],{type:"text/calendar;charset=utf-8"}),J=URL.createObjectURL(X),Y=$.endsWith(".ics")?$:`${$}.ics`,Q=document.createElement("a");Q.href=J,Q.download=Y,document.body.append(Q),Q.click(),Q.remove(),URL.revokeObjectURL(J)};import{ChevronDown as T$}from"lucide-react";import{useState as H$}from"react";function t5(){let{currentLocale:P,timezone:$}=B((X)=>({currentLocale:X.currentLocale,timezone:X.timezone}));return{formatDateRange:(X,J)=>new Intl.DateTimeFormat(P,{timeZone:$,month:"short",day:"numeric"}).formatRange(X.toDate(),J.toDate())}}import{jsx as n,jsxs as j2,Fragment as P2}from"react/jsx-runtime";var b$=()=>{let{currentDate:P,view:$,selectDate:Z,t:X,firstDayOfWeek:J}=B((L)=>({currentDate:L.currentDate,view:L.view,selectDate:L.selectDate,t:L.t,firstDayOfWeek:L.firstDayOfWeek})),{formatDateRange:Y}=t5(),[Q,q]=H$(null),U=Array.from({length:12},(L,W)=>P.month(W).format("MMMM")),_=P.year(),G=Array.from({length:11},(L,W)=>_-5+W),K=d(P,J),V=(L)=>{Z(L),q(null)},O=()=>n(P2,{children:U.map((L,W)=>n(g,{className:A("justify-start font-normal",P.month()===W&&"bg-primary/10"),onClick:()=>V(P.month(W)),variant:"ghost",children:L},W))}),N=()=>n(P2,{children:G.map((L)=>n(g,{className:A("justify-start font-normal",P.year()===L&&"bg-primary/10"),onClick:()=>V(P.year(L)),variant:"ghost",children:L},L))}),f=()=>n(P2,{children:Array.from({length:7},(L,W)=>{let R=P.subtract(3,"week").add(W,"week"),I=d(R,J),S=I[0],w=I[6],k=R.isSame(P,"week");return n(g,{className:A("justify-start font-normal",k&&"bg-primary/10"),onClick:()=>V(S),variant:"ghost",children:n("div",{className:"flex w-full items-center justify-between",children:n("span",{children:Y(S,w)})})},r(S))})}),F=()=>{let L=P.startOf("month"),W=P.daysInMonth();return n(P2,{children:Array.from({length:W},(R,I)=>{let S=L.date(I+1),w=S.isSame(P,"day"),k=u(S);return n(g,{className:A("justify-start font-normal",w&&"bg-primary/10"),onClick:()=>V(S),variant:"ghost",children:j2("div",{className:"flex w-full items-center justify-between",children:[n("span",{children:S.format("ll")}),k&&n("span",{className:"bg-primary text-primary-foreground rounded-sm px-1! text-xs",children:X("today")})]})},r(S))})})};return[{id:"month",hidden:$==="year",title:P.format("MMMM"),render:O},{id:"year",hidden:!1,title:P.format("YYYY"),render:N},{id:"week",hidden:$!=="week",title:Y(K[0],K[6]),render:f},{id:"day",hidden:$!=="day",title:P.format("dddd, D"),render:F}].filter((L)=>!L.hidden).map((L)=>j2(v0,{onOpenChange:(W)=>q(W?L.id:null),open:Q===L.id,children:[n(y0,{asChild:!0,children:j2(g,{className:"flex items-center gap-1 px-1! font-semibold","data-testid":"calendar-month-button",variant:"ghost",children:[n(x,{className:"flex items-center gap-1 px-1! font-semibold","data-testid":"calendar-month-button",transitionKey:M.listKey(L.id,r(P)),children:L.title}),n(T$,{className:"h-4 w-4"})]})}),n(c0,{className:"w-40 p-0",children:n("div",{className:"flex max-h-60 flex-col overflow-auto",children:L.render()})})]},L.id))},s5=b$;import{ChevronLeft as w$,ChevronRight as k$}from"lucide-react";import{jsx as AP,jsxs as C$}from"react/jsx-runtime";var m$=["day","week","month","year"],g$=({currentView:P,onChange:$,variant:Z="default",size:X="sm",className:J,onToday:Y,onNext:Q,onPrevious:q})=>{let{t:U,resources:_}=B((N)=>({t:N.t,resources:N.resources})),G=Z==="grid",K=_&&_.length>0,V=(N)=>{return A(G?"w-full":"",P===N&&"bg-primary/80")},O=(N)=>{return P===N?"default":"outline"};return C$("div",{className:A(G?"grid grid-cols-2 gap-2":"flex gap-1",J),children:[AP(g,{onClick:q,size:X,variant:"outline",children:AP(w$,{className:"h-4 w-4"})}),AP(g,{onClick:Q,size:X,variant:"outline",children:AP(k$,{className:"h-4 w-4"})}),m$.map((N)=>{if(K&&N==="year")return null;return AP(g,{className:V(N),onClick:()=>$(N),size:X,variant:O(N),children:U(N)},N)}),AP(g,{onClick:Y,size:X,variant:"outline",children:U("today")})]})},D2=g$;import{jsx as o,jsxs as C0}from"react/jsx-runtime";var v$=({className:P=""})=>{let{view:$,setView:Z,nextPeriod:X,prevPeriod:J,today:Y,openEventForm:Q,headerComponent:q,headerClassName:U,rawEvents:_,t:G,hideExportButton:K}=B((W)=>({view:W.view,setView:W.setView,nextPeriod:W.nextPeriod,prevPeriod:W.prevPeriod,today:W.today,openEventForm:W.openEventForm,headerComponent:W.headerComponent,headerClassName:W.headerClassName,rawEvents:W.rawEvents,t:W.t,hideExportButton:W.hideExportButton})),[V,O]=x$(!1),N=()=>O(!1),f=(W)=>(...R)=>{W(...R),N()},F=()=>{let W=`ilamy-calendar-${new Date().toISOString().split("T")[0]}.ics`;a5(_,W,"ilamy Calendar"),N()},z=()=>C0(g,{className:"flex items-center gap-1",onClick:()=>Q(),size:"sm",variant:"default",children:[o(D$,{className:"h-4 w-4"}),o("span",{className:"hidden @4xl:inline",children:G("new")})]}),L=({fullWidth:W=!1})=>C0(g,{className:A("flex items-center gap-1",W&&"w-full gap-2"),onClick:F,size:"sm",variant:"outline",children:[o(E$,{className:"h-4 w-4"}),W?`${G("export")} Calendar (.ics)`:o("span",{className:"hidden @4xl/base-header:inline",children:G("export")})]});if(q)return q;return o("div",{className:"@container/base-header w-full","data-testid":"calendar-header",children:C0("div",{className:A("flex justify-center @2xl/base-header:justify-between flex-wrap items-center gap-2",P,U),children:[C0("div",{className:"flex flex-wrap items-center justify-center gap-1 @2xl/base-header:justify-start",children:[o(h$,{className:"h-5 w-5"}),o(s5,{})]}),C0("div",{className:"flex flex-wrap justify-start @xl/base-header:justify-center gap-1 @4xl/base-header:justify-end overflow-x-auto",children:[C0("div",{className:"hidden @md/base-header:flex items-center justify-start gap-1",children:[o(D2,{className:"justify-end",currentView:$,onChange:Z,onNext:X,onPrevious:J,onToday:Y,variant:"default"}),o(z,{}),!K&&o(L,{})]}),C0("div",{className:"flex items-center justify-end gap-1 @md/base-header:hidden",children:[o(z,{}),C0(v0,{onOpenChange:O,open:V,children:[o(y0,{asChild:!0,children:o(g,{size:"sm",variant:"outline",children:o(j$,{className:"h-4 w-4"})})}),o(c0,{align:"end",className:"w-[240px] p-2",children:C0("div",{className:"space-y-2",children:[o(D2,{currentView:$,onChange:f(Z),onNext:f(X),onPrevious:f(J),onToday:f(Y),variant:"grid"}),!K&&o("div",{className:"pt-2 border-t",children:o(L,{fullWidth:!0})})]})})]})]})]})]})})},IP=v$;import{memo as L9}from"react";import{memo as Y1,useMemo as U9}from"react";import{useMemo as x2}from"react";var e5=({days:P,events:$,dayMaxEvents:Z,dayNumberHeight:X=Z5,gridType:J="day",eventSpacing:Y=j0,eventBarHeight:Q=B0})=>{let q=P.at(0),U=P.at(-1);if(!q||!U)return[];let _=J==="hour"?q.startOf("hour"):q.startOf("day"),G=J==="hour"?U.endOf("hour"):U.endOf("day"),K=P.length,V=$.filter((R)=>R.end.diff(R.start,J)>0),O=$.filter((R)=>R.end.diff(R.start,J)===0),N=[...V].sort((R,I)=>{let S=R.start.diff(I.start);if(S!==0)return S;return I.end.diff(I.start)-R.end.diff(R.start)}),f=[...O].sort((R,I)=>R.start.diff(I.start)),F=Array.from({length:Z},()=>Array.from({length:K},()=>({taken:!1,event:null}))),z=[],L=(R,I)=>{for(let S=0;S<Z;S++){let w=!0;for(let k=R;k<=I;k++)if(F[S][k].taken){w=!1;break}if(w)return S}return-1},W=(R,I,S,w,k,C)=>{for(let c=I;c<=S;c++)F[R][c]={taken:!0,event:w};let E=S-I+1;z.push({left:I/K*100,width:E/K*100,top:X+Y+R*(Q+Y),height:Q,position:R,...w,isTruncatedStart:k,isTruncatedEnd:C})};for(let R of N){let I=p.max(R.start.startOf(J),_),S=J==="hour"?R.end.subtract(1,"minute"):R.end,w=p.min(S.startOf(J),G),k=Math.max(0,I.diff(_,J)),C=Math.min(K-1,w.diff(_,J)),E=R.start.startOf(J).isBefore(_),c=R.end.startOf(J).isAfter(G),a=L(k,C);if(a!==-1){W(a,k,C,R,E,c);continue}for(let j=k+1;j<=C;j++){let m=L(j,C);if(m!==-1){W(m,j,C,R,!0,c);break}}}for(let R of f){let I=p.max(R.start.startOf(J),_),S=Math.max(0,Math.min(K-1,I.diff(_,J))),w=L(S,S);if(w!==-1)W(w,S,S,R,!1,!1)}return z};var v2=({days:P,allDay:$,dayNumberHeight:Z,resourceId:X,gridType:J})=>{let{getEventsForDateRange:Y,dayMaxEvents:Q,eventSpacing:q,eventHeight:U,getEventsForResource:_}=B(),G=P.at(0),K=P.at(-1),V=G?.startOf("day"),O=K?.endOf("day"),N=x2(()=>{if(!V||!O)return[];let z=Y(V,O);if(X)z=_P(z,_(X));if($)z=z.filter((L)=>!!L.allDay===$);return z},[Y,_,V,O,X,$]),f=x2(()=>{let z=new Map;for(let L of P){let W=r(L),R=L.startOf("day"),I=L.endOf("day"),S=N.filter((w)=>DP(w,R,I));z.set(W,S)}return z},[P,N]);return{positionedEvents:x2(()=>{return e5({days:P,events:N,dayMaxEvents:Q,dayNumberHeight:Z,eventSpacing:q,eventBarHeight:U,gridType:J})},[P,Q,Z,q,U,N,J]),dayEventsMap:f}};import s$,{memo as e$,useMemo as P9}from"react";import{jsx as y$}from"react/jsx-runtime";var P1=({date:P,className:$})=>{let Z=u(P);return y$("div",{className:A("flex h-5 w-5 items-center justify-center rounded-full text-xs shrink-0",Z&&"bg-primary text-primary-foreground font-medium",$),"data-testid":M.dayNumber(P),children:P.format("D")})};import{useImperativeHandle as d$,useState as $1}from"react";import{useDraggable as c$}from"@dnd-kit/core";import{memo as i$}from"react";import{jsx as SP,jsxs as o$}from"react/jsx-runtime";var l$=(P,$)=>{if(P&&$)return"rounded-none";if(P)return"rounded-r-md rounded-l-none";if($)return"rounded-l-md rounded-r-none";return"rounded-md"};function u$({elementId:P,event:$,className:Z,style:X,disableDrag:J=!1}){let{onEventClick:Y,renderEvent:Q,disableEventClick:q,disableDragAndDrop:U}=B(),{attributes:_,listeners:G,setNodeRef:K,isDragging:V}=c$({id:P,data:{event:$,type:"calendar-event"},disabled:J||U}),O=()=>{let N=$,f=N.isTruncatedStart,F=N.isTruncatedEnd;return o$("div",{className:A($.backgroundColor||"bg-blue-500",$.color||"text-white","h-full w-full px-1 border-[1.5px] border-card text-left overflow-clip relative",l$(Boolean(f),Boolean(F))),style:{backgroundColor:$.backgroundColor,color:$.color},children:[f&&SP("div",{className:"absolute left-0 top-0 bottom-0 w-0.5 bg-foreground/25"}),SP("p",{className:A("text-[10px] font-semibold sm:text-xs mt-0.5",f&&"pl-1",F&&"pr-1"),children:$.title}),F&&SP("div",{className:"absolute right-0 top-0 bottom-0 w-0.5 bg-foreground/25"})]})};return SP(x,{className:A("truncate h-full w-full",J||U?q?"cursor-default":"cursor-pointer":"cursor-grab",V&&!(J||U)&&"cursor-grabbing shadow-lg",Z),layout:!0,layoutId:P,onClick:(N)=>{N.stopPropagation(),Y($)},ref:K,style:X,transitionKey:P,..._,...G,children:Q?Q($):SP(O,{})})}var NP=i$(u$,(P,$)=>{return P.elementId===$.elementId&&P.disableDrag===$.disableDrag&&P.className===$.className&&P.event===$.event});import{jsx as pP,jsxs as r$}from"react/jsx-runtime";var Z1=({ref:P})=>{let[$,Z]=$1(!1),[X,J]=$1(null),{currentDate:Y,firstDayOfWeek:Q,eventHeight:q}=B();d$(P,()=>({open:()=>Z(!0),close:()=>Z(!1),setSelectedDayEvents:(G)=>J(G)}));let _=Y.startOf("month").clone();while(_.day()!==Q)_=_.subtract(1,"day");return pP(JP,{onOpenChange:Z,open:$,children:r$(QP,{className:"max-h-[80vh] max-w-md overflow-y-auto",children:[pP(YP,{children:pP(qP,{children:X?.day.format("MMMM D, YYYY")})}),pP("div",{className:"mt-4 space-y-3",children:X?.events.map((G)=>{return pP(NP,{className:"relative my-1",elementId:`all-events-dialog-event-$${G.id}`,event:G,style:{height:`${q}px`}},G.id)})})]})})};import{useDroppable as n$}from"@dnd-kit/core";import{jsx as t$}from"react/jsx-runtime";function a$(P,$,Z){let X=P.hour($??0).minute(Z??0);if($!==void 0&&Z!==void 0)return{start:X,end:X.minute(Z+15)};if($!==void 0)return{start:X,end:X.hour($+1).minute(0)};return{start:X,end:X.hour(23).minute(59)}}function X1({id:P,type:$,date:Z,hour:X,minute:J,resourceId:Y,allDay:Q,children:q,className:U,style:_,"data-testid":G,disabled:K=!1}){let{onCellClick:V,isCellDisabled:O,getResourceById:N,disableDragAndDrop:f,disableCellClick:F,classesOverride:z,view:L}=B(),{start:W,end:R}=a$(Z,X,J),I=N?.(Y),S={start:W,end:R,resource:I,allDay:Q},w=K||Boolean(O?.(S)),k=F||w,{isOver:C,setNodeRef:E}=n$({id:P,data:{type:$,date:Z,hour:X,minute:J,resourceId:Y,allDay:Q},disabled:f||w}),c=(m)=>{if(m.stopPropagation(),k)return;V(S)},a=C&&!f&&!w,j=z?.disabledCell||X5;return t$("div",{className:A("droppable-cell",U,a&&"bg-accent",k?"cursor-default":"cursor-pointer",w&&j),"data-disabled":w.toString(),"data-testid":G,"data-view":L,onClick:c,ref:E,style:_,children:q})}import{jsx as $2,jsxs as Z2,Fragment as J1}from"react/jsx-runtime";var $9=({day:P,hour:$,minute:Z,className:X="",resourceId:J,gridType:Y="day",shouldRenderEvents:Q=!0,allDay:q=!1,precomputedEvents:U,"data-testid":_,showDayNumber:G=!1,children:K})=>{let V=s$.useRef(null),{dayMaxEvents:O=0,getEventsForDateRange:N,currentDate:f,t:F,getEventsForResource:z,currentLocale:L,eventSpacing:W,eventHeight:R}=B(),I=nP(J),S=P9(()=>{if(!Q)return[];if(U)return U;let m=N(P.startOf(Y),P.endOf(Y));if(q)m=m.filter((l)=>l.allDay);if(J)return _P(m,z(J)??[]);return m},[U,P,J,N,z,Y,Q,q]),w=(m,l)=>{V.current?.setSelectedDayEvents({day:m,events:l}),V.current?.open()},k=P.month()===f.month(),C=S.length-O,E=C>0,c=b5({date:P,hour:Y==="hour"?P.hour():void 0,businessHours:I}),a=Y==="hour"?M.cell.day(P,P.format("HH"),P.format("mm")):M.cell.day(P),j=M.droppable.dayCell(P,{allDay:q,resourceId:J});return Z2(J1,{children:[$2(X1,{allDay:q,className:A("cursor-pointer overflow-clip p-1 hover:bg-accent min-h-[60px] relative border-r border-b min-w-0",X),"data-testid":_||a,date:P,disabled:!c||!k,hour:$,id:j,minute:Z,resourceId:J,type:"day-cell",children:Z2("div",{className:"flex flex-col h-full w-full","data-testid":"grid-cell-content",style:{gap:`${W}px`},children:[G&&$2(P1,{date:P,locale:L}),Q&&Z2(J1,{children:[S.slice(0,O).map((m,l)=>$2("div",{className:"w-full shrink-0","data-testid":m?.title,style:{height:`${R}px`}},M.listKey("empty",l,m.id))),E&&Z2("div",{className:"text-muted-foreground hover:text-foreground cursor-pointer text-[10px] whitespace-nowrap sm:text-xs shrink-0 mt-1",onClick:(m)=>{m.stopPropagation(),w(P,S)},onKeyDown:(m)=>{if(m.key==="Enter"||m.key===" ")m.preventDefault(),m.stopPropagation(),w(P,S)},role:"button",tabIndex:0,children:["+",C," ",F("more")]})]}),K]})}),$2(Z1,{ref:V})]})},TP=e$($9);import{jsx as Q1}from"react/jsx-runtime";var u0=({resource:P,className:$,children:Z,"data-testid":X})=>{let{renderResource:J}=B();return Q1("div",{className:A("flex items-center justify-center p-2 border-r last:border-r-0",$),"data-testid":X,style:{color:P.color,backgroundColor:P.backgroundColor},children:J?J(P):Z??Q1("div",{className:"text-sm font-medium truncate",children:P.title})})};import{memo as Q9}from"react";import{memo as Z9}from"react";import{jsx as y2,Fragment as J9}from"react/jsx-runtime";var X9=({rangeStart:P,rangeEnd:$,now:Z,resource:X,axis:J="vertical"})=>{let{renderCurrentTimeIndicator:Y,view:Q}=B((V)=>({renderCurrentTimeIndicator:V.renderCurrentTimeIndicator,view:V.view})),q=Z??p();if(!(q.isSameOrAfter(P)&&q.isBefore($)))return null;let _=$.diff(P,"minute"),K=q.diff(P,"minute")/_*100;if(Y)return y2(J9,{children:Y({currentTime:q,rangeStart:P,rangeEnd:$,progress:K,resource:X,view:Q,axis:J})});if(J==="horizontal")return y2("div",{className:"absolute top-0 bottom-0 w-0.5 bg-red-500 z-50 pointer-events-none","data-testid":"current-time-indicator",style:{left:`${K}%`}});return y2("div",{className:"absolute left-0 right-0 h-0.5 bg-red-500 z-50 pointer-events-none","data-testid":"current-time-indicator",style:{top:`${K}%`}})},X2=Z9(X9);import{jsx as c2,jsxs as q9}from"react/jsx-runtime";var Y9=({gridType:P="day",days:$,resourceId:Z,resource:X,"data-testid":J,positionedEvents:Y})=>{let{eventHeight:Q}=B(),q=$.at(0)?.startOf("day"),U=$.at(0),_=$.at(-1)?.add(1,P),G=P==="hour"&&Boolean(U&&_);return q9("div",{className:"absolute inset-0 pointer-events-none z-10 overflow-clip","data-testid":J,children:[G&&U&&_&&c2(X2,{axis:"horizontal",rangeEnd:_,rangeStart:U,resource:X}),Y.map((K)=>{let V=`${K.id}-${K.position}-${q?.toISOString()}-${Z??"no-resource"}`;return c2("div",{className:"absolute z-10 pointer-events-auto overflow-clip","data-left":K.left,"data-testid":M.container.horizontal.event(K.id),"data-top":K.top,"data-width":K.width,style:{left:`calc(${K.left}% + var(--spacing) * 0.25)`,width:`calc(${K.width}% - var(--spacing) * 1)`,top:`${K.top}px`,height:`${Q}px`},children:c2(NP,{className:"h-full w-full shadow",elementId:V,event:K})},M.listKey(V,"wrapper"))})]})},i2=Q9(Y9);import{jsx as W0,jsxs as l2}from"react/jsx-runtime";var z9=({id:P,resource:$,gridType:Z="day",variant:X="resource",dayNumberHeight:J,className:Y,columns:Q=[],allDay:q,showDayNumber:U=!1,isLastRow:_=!1})=>{let{renderResource:G}=B(),K=X==="resource",V=Q.some((F)=>F.days),O=U9(()=>{if(V)return[];return Q.map((F)=>F.day).filter((F)=>Boolean(F))},[Q,V]),{positionedEvents:N,dayEventsMap:f}=v2({days:O,gridType:Z,resourceId:$?.id,dayNumberHeight:J,allDay:q});return l2("div",{className:A("flex flex-1 relative min-w-0",Y),"data-testid":M.container.horizontal.row(P),children:[K&&$&&W0(u0,{className:"w-20 sm:w-40 sticky left-0 bg-background z-20 h-full","data-testid":M.container.horizontal.rowLabel($.id),resource:$,children:G?G($):W0("div",{className:"wrap-break-word text-sm",children:$.title})}),l2("div",{className:"relative flex-1 flex min-w-0",children:[W0("div",{className:"flex w-full min-w-0",children:Q.map((F,z)=>{if(F.days)return W0(_9,{allDay:q,col:F,dayNumberHeight:J,gridType:Z,id:P,isLastCol:z===Q.length-1,isLastRow:_,resource:$,resourceId:$?.id,showDayNumber:U},F.id);return F.day?W0(TP,{allDay:q,className:A("flex-1 w-20",_&&"border-b-0",F.className),day:F.day,gridType:Z,hour:Z==="hour"?F.day.hour():void 0,precomputedEvents:f.get(r(F.day)),resourceId:$?.id,showDayNumber:U},F.day.toISOString()):null})}),!V&&W0("div",{className:"absolute inset-0 z-10 pointer-events-none",children:W0(i2,{"data-testid":M.container.eventsLayer("horizontal",P),days:O,gridType:Z,positionedEvents:N,resource:$,resourceId:$?.id})})]})]})},_9=Y1(({col:P,gridType:$="day",allDay:Z,resource:X,resourceId:J,dayNumberHeight:Y,showDayNumber:Q,isLastRow:q,isLastCol:U,id:_})=>{let G=P.days??[],{positionedEvents:K}=v2({days:G,gridType:$,resourceId:J,dayNumberHeight:Y,allDay:Z});return l2("div",{className:"flex relative w-full",children:[W0("div",{className:"flex w-full",children:G.map((V)=>W0(TP,{allDay:Z,className:A("flex-1 w-20",q&&"border-b-0",!U&&"border-r!",P.className),day:V,gridType:$,hour:$==="hour"?V.hour():void 0,resourceId:J,showDayNumber:Q},V.toISOString()))}),W0("div",{className:"absolute inset-0 z-10 pointer-events-none",children:W0(i2,{"data-testid":M.container.eventsLayer("horizontal",_),days:G,gridType:$,positionedEvents:K,resource:X,resourceId:J})})]})}),J2=Y1(z9);import{memo as K9}from"react";import{jsx as q1}from"react/jsx-runtime";var G9=({className:P})=>{let{t:$}=B();return q1("div",{className:A("w-16 border-r shrink-0 sticky left-0 bg-background z-20 flex border-b items-center justify-center px-1 text-xs text-muted-foreground",P),children:q1("span",{className:"truncate",children:$("allDay")})})},VP=K9(G9);import{jsx as U1,jsxs as N9}from"react/jsx-runtime";var A9=({days:P,classes:$,resource:Z,showSpacer:X=!0})=>{let J=P.map((Y,Q)=>({id:M.col.allDay(Y,Q),day:Y,gridType:"day",className:A("h-full min-h-12 border-r last:border-r-0",$?.cell)}));return N9("div",{className:A("flex w-full bg-background",$?.row),"data-testid":"all-day-row",children:[X&&U1(VP,{className:$?.spacer}),U1(J2,{allDay:!0,className:"flex-1 min-h-fit border-b",columns:J,dayNumberHeight:0,gridType:"day",id:M.allDayRow(Z?.id),isLastRow:!0,resource:Z,variant:"regular"})]})},o0=L9(A9);import{jsx as _1,Fragment as z1}from"react/jsx-runtime";var p0=({date:P})=>{let{renderHour:$,timeFormat:Z}=B();if($)return _1(z1,{children:$(P)});return _1(z1,{children:P.format(Z==="12-hour"?"h A":"H")})};import{useRef as m9}from"react";import{useEffect as V9,useRef as W9}from"react";var F9=/^(\d{1,2})(?::\d{1,2})?(?::\d{1,2})?$/,M9="[data-hour]",B9=(P)=>{let $=F9.exec(P);if(!$)return null;let Z=Number.parseInt($[1],10);return Z>=0&&Z<=23?Z:null},u2=(P)=>Number.parseInt(P.getAttribute("data-hour")??"",10),O9=(P,$)=>{let Z=P.at(0),X=P.at(-1);if(!Z||!X)return null;if($<=u2(Z))return Z;if($>=u2(X))return X;return P.find((J)=>u2(J)===$)??null},f9=(P,$,Z,X)=>{let J=$.getBoundingClientRect(),Y=Z.getBoundingClientRect();if(X==="horizontal"){P.scrollTo({left:J.left-Y.left,behavior:"auto"});return}P.scrollTo({top:J.top-Y.top,behavior:"auto"})},Q2=({viewportRef:P,scrollTime:$,enabled:Z,scrollKey:X,axis:J="vertical"})=>{let Y=W9(null);V9(()=>{if(!Z||!$)return;if(Y.current===X)return;let Q=B9($);if(Q===null)return;let q=P.current;if(!q)return;let U=Array.from(q.querySelectorAll(M9)),_=U.at(0),G=O9(U,Q);if(!_||!G)return;f9(q,G,_,J),Y.current=X},[Z,$,X,P,J])};import{memo as p9}from"react";import{memo as R9}from"react";import{useMemo as G1}from"react";var K1=({days:P,gridType:$="hour",events:Z})=>{let X=Z.filter((O)=>!O.allDay).toSorted((O,N)=>O.start.diff(N.start));if(X.length===0)return[];let J=P.at(0)||p(),Y=P.length,Q=$==="day",q=[],U=[],_=null;for(let O of X){if(_&&O.start.isSameOrAfter(_)){if(U.length>0)q.push(U);U=[]}U.push(O),_=_?p.max(_,O.end):O.end}if(U.length>0)q.push(U);let G=(O)=>{let N=O.start.diff(J,$,!0),f=O.end.diff(J,$,!0);if(Q){if(N=Math.floor(N),f=Math.ceil(f),f<=N)f=N+1}if(N<0)N=0;if(f>Y)f=Y;let F=Math.max(0,f-N);if(F===0)return null;return{top:N/Y*100,height:F/Y*100}},K=(O)=>O===2?25:O===3?50:O===4?60:70,V=[];for(let O of q){if(O.length===1){let z=O[0],L=G(z);if(!L)continue;V.push({...z,left:0,width:100,...L});continue}let N=[...O].sort((z,L)=>{let W=L.end.diff(L.start,"minute")-z.end.diff(z.start,"minute");return W!==0?W:z.start.diff(L.start)}),f=N.length,F=f>1?K(f)/(f-1):0;for(let z=0;z<f;z++){let L=N[z],W=G(L);if(!W)continue;let R=z===0?0:F*z;V.push({...L,...W,left:R,width:100-R,zIndex:z+1})}}return V};var L1=({days:P,gridType:$,resourceId:Z})=>{let{getEventsForDateRange:X,getEventsForResource:J}=B(),Y=P.at(0),Q=P.at(-1),q=Y?.startOf("day"),U=Q?.endOf("day"),_=G1(()=>{if(!q||!U)return[];let K=X(q,U);if(Z)K=_P(K,J(Z));return K.filter((V)=>!V.allDay)},[q,U,X,Z,J]);return G1(()=>{return K1({days:P,events:_,gridType:$})},[P,$,_])};import{jsx as o2,jsxs as S9}from"react/jsx-runtime";var I9=({days:P,gridType:$="hour",resourceId:Z,resource:X,"data-testid":J})=>{let Y=L1({days:P,gridType:$,resourceId:Z}),Q=P.at(0),q=P.at(-1)?.add(1,$),U=$==="hour"&&Boolean(Q&&q);return S9("div",{className:"relative w-full h-full pointer-events-none z-10 overflow-clip","data-testid":J,children:[U&&Q&&q&&o2(X2,{rangeEnd:q,rangeStart:Q,resource:X}),Y.map((_,G)=>{let K=`event-${_.id}-${G}-${P.at(0)?.toISOString()}-${Z??"no-resource"}`,V=_.end.diff(_.start,"minute")<=15;return o2("div",{className:"absolute",style:{left:`${_.left}%`,width:`calc(${_.width}% - var(--spacing) * 2)`,top:`${_.top}%`,height:`${_.height}%`},children:o2(NP,{className:A("pointer-events-auto",{"[&_p]:text-[10px] [&_p]:mt-0":V}),elementId:K,event:_})},M.listKey(K,"wrapper"))})]})},A1=R9(I9);import{jsx as WP,jsxs as H9}from"react/jsx-runtime";var T9=({id:P,days:$,resourceId:Z,resource:X,"data-testid":J,gridType:Y,className:Q,renderCell:q,noEvents:U,slotDurationMinutes:_=60,isLastColumn:G})=>{let K=Math.floor(60/_),V=Array.from({length:K},(N,f)=>f*_),O=V.length>1;return WP("div",{className:A("flex flex-col flex-1 items-center min-w-20 justify-center bg-background relative",G?"border-r-0":"border-r",Q),"data-testid":J||M.container.vertical.col(P),children:H9("div",{className:"w-full h-full relative grid",style:{gridTemplateRows:`repeat(${$.length}, minmax(0, 1fr))`},children:[$.map((N,f)=>{let F=N.format("HH");if(q){let z=P===M.col.time,L=z?M.cell.verticalTime(F):M.cell.vertical(N,F,"00",Z);return WP("div",{className:"min-h-[60px] border-b border-r","data-hour":z?F:void 0,"data-testid":L,children:q(N)},M.listKey(P,f,F))}return WP("div",{className:"flex flex-col min-h-[60px]",children:V.map((z)=>{let L=String(z).padStart(2,"0"),W=M.cell.vertical(N,F,L,Z);return WP(TP,{className:A("hover:bg-accent relative z-10 flex-1 min-h-0 cursor-pointer border-b border-r-0",O&&"border-dashed"),"data-testid":W,day:O?N.minute(z):N,gridType:Y,hour:N.hour(),minute:O?z:void 0,resourceId:Z,shouldRenderEvents:!1},M.listKey(P,f,L))})},M.listKey(P,f,F))}),!U&&WP("div",{className:"absolute inset-0 z-10 pointer-events-none",children:WP(A1,{"data-testid":M.container.eventsLayer("vertical",P),days:$,gridType:Y,resource:X,resourceId:Z})})]})})},N1=p9(T9);import{memo as b9}from"react";import{jsx as V1,jsxs as k9}from"react/jsx-runtime";var w9=({children:P,classes:$,allDayRow:Z,expandAllDayRow:X=!1})=>{let{stickyViewHeader:J,viewHeaderClassName:Y}=B((q)=>({stickyViewHeader:q.stickyViewHeader,viewHeaderClassName:q.viewHeaderClassName})),Q="min-w-full w-fit";return k9("div",{className:A(X&&"flex h-full flex-col",J&&"sticky top-0 z-21 bg-background",Y),children:[V1("div",{className:A("h-12 border-b","min-w-full w-fit",$?.header),"data-testid":"vertical-grid-header",children:P}),Z&&V1("div",{className:A("flex min-h-12","min-w-full w-fit",X&&"flex-1 overflow-hidden",$?.allDay),"data-testid":"vertical-grid-all-day",children:Z})]})},W1=b9(w9);import{jsx as FP,jsxs as F1}from"react/jsx-runtime";var T0=({columns:P,children:$,gridType:Z="day",variant:X="resource",classes:J,allDayRow:Y,slotDurationMinutes:Q,style:q})=>{let U=X==="resource",_=!U,G=P.every((z)=>!z.days?.length),{currentDate:K,view:V,scrollTime:O}=B(),N=m9(null);Q2({viewportRef:N,scrollTime:O,enabled:Z==="hour"&&!G,scrollKey:`${V}-${K.format("YYYY-MM-DD")}`});let F=$&&FP(W1,{allDayRow:Y,classes:{header:J?.header,allDay:J?.allDay},expandAllDayRow:G,children:$});if(G&&F)return FP("div",{className:"h-full flex flex-col","data-testid":"vertical-grid-container",style:q,children:F});return F1("div",{className:"h-full flex flex-col","data-testid":"vertical-grid-container",style:q,children:[_&&F,F1(I0,{className:A("h-full",_&&"overflow-auto"),"data-testid":"vertical-grid-scroll",viewPortProps:{className:"*:flex! *:flex-col! *:min-h-full",ref:N},children:[U&&F,FP("div",{className:A("flex flex-1 min-w-full w-fit",J?.body),"data-testid":"vertical-grid-body",children:P.map((z,L)=>FP(N1,{...z,gridType:Z,isLastColumn:L===P.length-1,slotDurationMinutes:Q},M.listKey(z.id,L)))}),FP(g0,{className:"z-30"})," ",FP(g0,{className:"z-30",orientation:"horizontal"})," "]})]})};function z0({referenceDate:P,businessHours:$,hideNonBusinessHours:Z,allDates:X=[P],resourceBusinessHours:J=[]}){let Y=G5({referenceDate:P}),Q=!!$||J.length>0;if(!(Z&&Q))return Y;let{minStart:U,maxEnd:_,hasBusinessHours:G}=oP({allDates:X,businessHours:$,resourceBusinessHours:J,hideNonBusinessHours:Z});if(!G)return Y;if(U>=_)return[];return Y.filter((K)=>{let V=K.hour();return V>=U&&V<_})}import{jsx as MP,jsxs as g9}from"react/jsx-runtime";var M1=()=>{let{currentDate:P,t:$,businessHours:Z,hideNonBusinessHours:X,slotDuration:J}=B(),Y=u(P),Q=z0({referenceDate:P,businessHours:Z,hideNonBusinessHours:X,allDates:[P]}),q={id:M.col.time,day:void 0,days:Q,className:"shrink-0 w-16 min-w-16 max-w-16 sticky left-0 bg-background z-20 border-r-0",gridType:"hour",noEvents:!0,renderCell:(_)=>MP("div",{className:"text-muted-foreground p-2 text-right text-[10px] sm:text-xs flex flex-col items-center",children:MP(p0,{date:_})})},U={id:M.col.day(P),day:P,days:Q,className:"w-[calc(100%-4rem)] flex-1",gridType:"hour"};return MP(T0,{allDayRow:MP(o0,{days:[P]}),classes:{header:"w-full",body:"w-full",allDay:"w-full"},columns:[q,U],gridType:"hour",slotDurationMinutes:J,variant:"regular",children:MP("div",{className:"flex flex-1 justify-center items-center min-h-12","data-testid":"day-view-header",children:g9(x,{className:A("flex justify-center items-center text-center text-sm font-semibold sm:text-xl",Y&&"text-primary"),transitionKey:r(P),children:[P.format("dddd, LL"),Y&&MP("span",{className:"bg-primary text-primary-foreground ml-2 rounded-full px-1 py-0.5 text-xs sm:px-2 sm:text-sm",children:$("today")})]})})})};import{useMemo as D9}from"react";import{useRef as j9}from"react";import{memo as C9}from"react";import{jsx as E9}from"react/jsx-runtime";var h9=({children:P,className:$})=>{let{stickyViewHeader:Z,viewHeaderClassName:X}=B((J)=>({stickyViewHeader:J.stickyViewHeader,viewHeaderClassName:J.viewHeaderClassName}));return E9("div",{className:A("flex h-12 w-fit",Z&&"sticky top-0 z-21 bg-background",$,X),"data-testid":"horizontal-grid-header",children:P})},B1=C9(h9);import{jsx as BP,jsxs as O1}from"react/jsx-runtime";var Y2=({rows:P,children:$,classes:Z,allDay:X,gridType:J,variant:Y="resource",dayNumberHeight:Q})=>{let{currentDate:q,view:U,scrollTime:_}=B(),G=j9(null),K=Y==="resource",V=!K;Q2({viewportRef:G,scrollTime:_,enabled:J==="hour"&&K,scrollKey:`${U}-${q.format("YYYY-MM-DD")}`,axis:"horizontal"});let N=$&&BP(B1,{className:Z?.header,children:$});return O1("div",{className:"h-full flex flex-col","data-testid":"horizontal-grid-container",children:[V&&N,O1(I0,{className:A("h-full",V&&"overflow-auto"),"data-testid":"horizontal-grid-scroll",viewPortProps:{className:"*:flex! *:flex-col! *:min-h-full",ref:G},children:[K&&N,BP("div",{className:A("flex flex-1 w-fit",Z?.body),"data-testid":"horizontal-grid-body",children:BP("div",{className:"relative w-full flex flex-col flex-1",children:P.map((f,F)=>BP(J2,{allDay:f.allDay??X,dayNumberHeight:Q,gridType:J,isLastRow:F===P.length-1,variant:Y,...f},f.id))},q.format("YYYY-MM"))}),BP(g0,{className:"z-30"}),BP(g0,{className:"z-30",orientation:"horizontal"})]})]})};import{jsx as d2}from"react/jsx-runtime";var f1=({className:P})=>{let{firstDayOfWeek:$,stickyViewHeader:Z,viewHeaderClassName:X,currentDate:J}=B(),Y=d(J,$);return d2("div",{className:A("flex w-full",Z&&"sticky top-0 z-20",X,P),"data-testid":"month-header",children:Y.map((Q,q)=>d2(x,{className:"py-2 text-center font-medium border-r last:border-r-0 border-b flex-1 min-w-0","data-testid":M.header.weekday("month",Q.format("ddd")),delay:q*0.05,transitionKey:Q.toISOString(),children:d2("span",{className:"text-sm capitalize truncate w-full block",children:Q.format("ddd")})},Q.toISOString()))})};import{jsx as R1}from"react/jsx-runtime";var I1=()=>{let{currentDate:P,firstDayOfWeek:$}=B(),X=D9(()=>zP(P,$),[P,$]).map((J,Y)=>({id:M.listKey("week",Y),columns:J.map((Q)=>({id:M.col.day(Q),day:Q,className:"w-auto",gridType:"day"})),className:"flex-1",showDayNumber:!0}));return R1(Y2,{classes:{body:"w-full",header:"w-full"},rows:X,variant:"regular",children:R1(f1,{className:"h-12"})})};import{useMemo as q2}from"react";import{jsx as h0,jsxs as r2}from"react/jsx-runtime";var S1="flex-1 min-w-0",p1="w-10 sm:w-16 min-w-10 sm:min-w-16 max-w-10 sm:max-w-16",T1=()=>{let{t:P,currentDate:$,firstDayOfWeek:Z,selectDate:X,openEventForm:J,businessHours:Y,hideNonBusinessHours:Q,hiddenDays:q,slotDuration:U}=B(),_=q2(()=>d($,Z),[$,Z]),G=q2(()=>q?_.filter((F)=>!q.has(F.day())):_,[_,q]),K=q2(()=>z0({referenceDate:$,businessHours:Y,hideNonBusinessHours:Q,allDates:_}),[$,Y,Q,_]),V={id:M.col.time,days:K,day:void 0,className:`shrink-0 ${p1} sticky left-0 bg-background z-20 border-r-0`,gridType:"hour",noEvents:!0,renderCell:(F)=>h0("div",{className:"text-muted-foreground p-2 text-right text-[10px] sm:text-xs flex flex-col items-center",children:h0(p0,{date:F})})},O=q2(()=>{return G.map((F)=>({id:M.col.day(F),day:F,label:F.format("D"),className:S1,days:z0({referenceDate:F,businessHours:Y,hideNonBusinessHours:Q,allDates:_}),value:F}))},[_,Y,Q,G.map]),N={"--visible-days":G.length},f="w-full";return h0(T0,{allDayRow:h0(o0,{classes:{cell:S1,spacer:p1},days:G}),classes:{header:"w-full h-18",allDay:"w-full",body:"w-full"},columns:[V,...O],gridType:"hour",slotDurationMinutes:U,style:N,variant:"regular",children:r2("div",{className:"flex h-full flex-1","data-testid":"week-view-header",children:[h0("div",{className:"w-10 sm:w-16 min-w-10 sm:min-w-16 h-full shrink-0 items-center justify-center border-r p-2 flex",children:r2("div",{className:"flex flex-col items-center justify-center min-w-0 w-full",children:[h0("span",{className:"text-muted-foreground text-xs truncate w-full text-center",children:P("week")}),h0("span",{className:"font-medium truncate w-full text-center",children:$.week()})]})}),G.map((F,z)=>{let L=u(F),W=M.header.week.day(F);return r2(x,{className:A("hover:bg-accent flex-1 min-w-0 flex flex-col justify-center cursor-pointer p-1 text-center sm:p-2 border-r last:border-r-0 w-20 h-full",L&&"bg-primary/10 font-bold"),"data-testid":M.header.weekday("week",F.format("dddd")),delay:z*0.05,onClick:()=>{X(F),J({start:F})},transitionKey:W,children:[h0("div",{className:"text-xs sm:text-sm truncate w-full",children:F.format("ddd")}),h0("div",{className:A("mx-auto mt-1 flex h-6 w-6 items-center justify-center rounded-full text-xs",L&&"bg-primary text-primary-foreground"),children:F.format("D")})]},W)})]})})};import{jsx as d0,jsxs as HP}from"react/jsx-runtime";var x9=["bg-primary","bg-blue-500","bg-green-500"],v9=42,H1=()=>{let{currentDate:P,selectDate:$,events:Z,setView:X,getEventsForDateRange:J,t:Y,firstDayOfWeek:Q}=B(),q=P.year(),U=d(p(),Q).map((z)=>({id:z.day().toString(),label:z.format("dd")})),_=()=>{return Array.from({length:12},(z,L)=>{let W=p().year(q).month(L).startOf("month"),R=Z.filter((I)=>I.start.year()===q&&I.start.month()===L);return{date:W,name:W.format("MMMM"),eventCount:R.length,monthKey:W.format("MM")}})},G=(z)=>{let L=z.startOf("month").startOf("week");return Array.from({length:v9},(W,R)=>{let I=L.add(R,"day"),S=I.startOf("day"),w=I.endOf("day"),k=J(S,w);return{date:I,dayKey:r(I),isInCurrentMonth:I.month()===z.month(),isToday:u(I),isSelected:I.isSame(P,"day"),eventCount:k.length}})},K=(z,L,W)=>{W?.stopPropagation(),$(z),X(L)},V=(z)=>{let L=z===1?Y("event"):Y("events");return`${z} ${L}`},O=(z)=>{let W=z.isInCurrentMonth?"":"text-muted-foreground opacity-50",R=z.isToday?"bg-primary text-primary-foreground rounded-full":"",I=z.isSelected&&!z.isToday?"bg-muted rounded-full font-bold":"",S=z.eventCount>0&&!z.isToday&&!z.isSelected?"font-medium":"";return A("relative flex aspect-square w-full cursor-pointer flex-col items-center justify-center hover:bg-accent rounded-sm transition-colors duration-200",W,R,I,S)},N=(z,L)=>{return A("h-[3px] w-[3px] rounded-full",L?"bg-primary-foreground":z)},f=_(),F=(z)=>{if(z===0)return"";return V(z)};return HP(I0,{className:"h-full","data-testid":"year-view",children:[d0("div",{className:"grid auto-rows-fr grid-cols-1 gap-4 p-4 sm:grid-cols-2 lg:grid-cols-3","data-testid":"year-grid",children:f.map((z,L)=>{let W=G(z.date),R=L*0.05;return HP("div",{className:"hover:border-primary flex flex-col rounded-lg border p-3 text-left transition-all duration-200 hover:shadow-md","data-testid":M.header.year.month(z.monthKey),children:[HP(x,{className:"mb-2 flex items-center justify-between",delay:R,transitionKey:M.listKey("month",z.monthKey),children:[d0("button",{className:"text-lg font-medium hover:underline cursor-pointer","data-testid":M.header.year.month(z.monthKey,"title"),onClick:()=>K(z.date,"month"),type:"button",children:z.name}),z.eventCount>0&&d0("span",{className:"bg-primary text-primary-foreground rounded-full px-2 py-1 text-xs","data-testid":M.header.year.month(z.monthKey,"count"),children:V(z.eventCount)})]},M.listKey("month",z.monthKey)),HP("div",{className:"grid grid-cols-7 gap-px text-[0.6rem]","data-testid":M.header.year.month(z.monthKey,"mini"),children:[U.map((I)=>d0("div",{className:"text-muted-foreground h-3 text-center",children:I.label},M.listKey("header",z.monthKey,I.id))),W.map((I)=>{let S=M.header.year.day(z.date.format("YYYY-MM"),I.dayKey),w=I.eventCount>0,k=Math.min(I.eventCount,3),C=x9.slice(0,k);return HP("button",{className:O(I),"data-testid":S,onClick:(E)=>K(I.date,"day",E),title:F(I.eventCount),type:"button",children:[d0("span",{className:"text-center leading-none",children:I.date.date()}),w&&d0("div",{className:A("absolute bottom-0 flex w-full justify-center space-x-px",I.isToday&&"bottom-px"),children:C.map((E)=>d0("span",{className:N(E,I.isToday)},E))})]},I.dayKey)})]})]},z.monthKey)})}),d0(g0,{className:"z-30"})]})};import{useCallback as n2,useMemo as y9}from"react";import{jsx as c9}from"react/jsx-runtime";var b1=({children:P,events:$=[],firstDayOfWeek:Z=0,initialView:X="month",initialDate:J,renderEvent:Y,onEventClick:Q,onCellClick:q,isCellDisabled:U,onViewChange:_,onEventAdd:G,onEventUpdate:K,onEventDelete:V,onDateChange:O,locale:N,timezone:f,disableCellClick:F,disableEventClick:z,disableDragAndDrop:L,dayMaxEvents:W,eventSpacing:R=j0,eventHeight:I=B0,stickyViewHeader:S=!0,viewHeaderClassName:w="",headerComponent:k,headerClassName:C,businessHours:E,renderEventForm:c,translations:a,translator:j,timeFormat:m="12-hour",classesOverride:l,renderCurrentTimeIndicator:_0,renderHour:L0,hideNonBusinessHours:M0=!1,hideExportButton:H0=!1,hiddenDays:J0,slotDuration:A0=60,scrollTime:K0})=>{let Z0=xP({events:$,firstDayOfWeek:Z,initialView:X,initialDate:J,businessHours:E,onEventAdd:G,onEventUpdate:K,onEventDelete:V,onDateChange:O,onViewChange:_,locale:N,timezone:f,translations:a,translator:j}),b0=n2((X0)=>{Z0.setSelectedEvent(X0),Z0.setIsEventFormOpen(!0)},[Z0]),w0=n2((X0)=>{if(z)return;if(Q)Q(X0);else b0(X0)},[z,Q,b0]),k0=n2((X0)=>{if(F)return;if(q)q(X0);else Z0.openEventForm(X0)},[q,F,Z0]),i=y9(()=>({...Z0,renderEvent:Y,onEventClick:w0,onCellClick:k0,isCellDisabled:U,locale:N,timezone:f,disableCellClick:F,disableEventClick:z,disableDragAndDrop:L,dayMaxEvents:W,eventSpacing:R,eventHeight:I,stickyViewHeader:S,viewHeaderClassName:w,headerComponent:k,headerClassName:C,businessHours:E,renderEventForm:c,timeFormat:m,classesOverride:l,renderCurrentTimeIndicator:_0,renderHour:L0,hideNonBusinessHours:M0,hideExportButton:H0,hiddenDays:J0,slotDuration:A0,scrollTime:K0}),[Z0,Y,w0,k0,U,N,f,F,z,L,W,R,I,S,w,k,C,E,c,m,l,_0,L0,M0,H0,J0,A0,K0]);return c9(hP.Provider,{value:i,children:P})};import{jsx as F0,jsxs as u9}from"react/jsx-runtime";var i9=()=>{let{view:P,dayMaxEvents:$}=B();return u9("div",{className:"flex flex-col w-full h-full","data-testid":"ilamy-calendar",children:[F0(IP,{className:"p-1 shrink-0"}),F0(yP,{children:F0(x,{className:"w-full min-h-0 flex-1",direction:"horizontal",transitionKey:P,children:F0("div",{className:"border h-full w-full","data-testid":"calendar-body",children:{month:F0(I1,{dayMaxEvents:$},"month"),week:F0(T1,{},"week"),day:F0(M1,{},"day"),year:F0(H1,{},"year")}[P]})})}),F0(tP,{})]})},l9=({events:P,firstDayOfWeek:$="sunday",initialView:Z="month",initialDate:X,dayMaxEvents:J=ZP,eventSpacing:Y=j0,eventHeight:Q=B0,stickyViewHeader:q=!0,viewHeaderClassName:U="",timeFormat:_="12-hour",hideNonBusinessHours:G=!1,hiddenDays:K,...V})=>{return F0(b1,{dayMaxEvents:J,eventHeight:Q,eventSpacing:Y,events:mP(P),firstDayOfWeek:D0[$],hiddenDays:kP(K),hideNonBusinessHours:G,initialDate:XP(X),initialView:Z,stickyViewHeader:q,timeFormat:_,viewHeaderClassName:U,...V,children:F0(i9,{})})};import{jsx as o9}from"react/jsx-runtime";var OP=({days:P,gridType:$="day",children:Z,classes:X})=>{let{resources:J}=B(),Y=P.map((q)=>{let U=Array.isArray(q),_=U?q[0]:q;return{id:_?M.col.day(_):"day-col-unknown",day:U?void 0:q,days:U?q:void 0,className:X?.cell,gridType:$}}),Q=J.map((q)=>({id:q.id,title:q.title,resource:q,columns:Y}));return o9(Y2,{classes:X,dayNumberHeight:0,gridType:$,rows:Q,children:Z})};import{jsx as a2}from"react/jsx-runtime";var U2=({hours:P,view:$,delayStep:Z})=>a2("div",{className:"flex h-12 border-b",children:P.map((X,J)=>{let Y=X.isSame(p(),"hour"),Q=X.format("HH"),q=M.header.week.hour(X,J);return a2(x,{className:A("min-w-20 flex-1 border-r last:border-r-0 flex items-center justify-center text-xs shrink-0",Y&&"bg-blue-50 text-blue-600 font-medium"),"data-hour":Q,"data-testid":M.header.resource.timeLabel($,Q),delay:J*Z,transitionKey:M.listKey(q,"motion"),children:a2(p0,{date:X})},M.listKey(q,"animated"))})});import{jsx as z2,jsxs as d9}from"react/jsx-runtime";var w1=()=>{let{currentDate:P,t:$,businessHours:Z,hideNonBusinessHours:X,resources:J}=B(),Y=z0({referenceDate:P,businessHours:Z,hideNonBusinessHours:X,allDates:[P],resourceBusinessHours:J.map((Q)=>Q.businessHours).filter(Boolean)});return d9(OP,{classes:{header:"min-w-full",body:"min-w-full",cell:"min-w-20 flex-1"},days:Y,gridType:"hour",children:[z2("div",{className:"w-20 sm:w-40 border-b border-r shrink-0 flex justify-center items-center sticky top-0 left-0 bg-background z-20",children:z2("div",{className:"text-sm truncate px-1 min-w-0",children:$("resources")})}),z2("div",{className:"flex-1 flex flex-col",children:z2(U2,{delayStep:0.05,hours:Y,view:"day"})})]})};import{jsx as PP,jsxs as k1}from"react/jsx-runtime";var m1=()=>{let{currentDate:P,resources:$,businessHours:Z,hideNonBusinessHours:X,slotDuration:J}=B(),Y=z0({referenceDate:P,businessHours:Z,hideNonBusinessHours:X,allDates:[P],resourceBusinessHours:$.map((U)=>U.businessHours).filter(Boolean)}),Q={id:M.col.time,day:void 0,days:Y,className:"shrink-0 w-16 min-w-16 max-w-16 sticky left-0 bg-background z-20 border-r-0",gridType:"hour",noEvents:!0,renderCell:(U)=>PP("div",{className:"text-muted-foreground p-2 text-right text-[10px] sm:text-xs flex flex-col items-center",children:PP(p0,{date:U})})},q=$.map((U)=>({id:M.col.day(P,U.id),resourceId:U.id,resource:U,days:Y,day:P,gridType:"hour"}));return PP(T0,{allDayRow:k1("div",{className:"flex w-full",children:[PP(VP,{}),$.map((U)=>PP(o0,{classes:{cell:"min-w-20 border-r!"},days:[P],resource:U,showSpacer:!1},M.allDayRow(U.id)))]}),classes:{body:"w-full",header:"w-full"},columns:[Q,...q],"data-testid":"resource-day",gridType:"hour",slotDurationMinutes:J,children:k1("div",{className:"flex border-b h-12 flex-1","data-testid":"resource-month-header",children:[PP("div",{className:"shrink-0 border-r w-16 sticky top-0 left-0 bg-background z-20"}),$.map((U)=>PP(u0,{className:"min-w-20 flex-1",resource:U},M.listKey("resource-cell",U.id)))]})})};import{jsx as g1}from"react/jsx-runtime";var C1=()=>{let{orientation:P}=B();if(P==="vertical")return g1(m1,{});return g1(w1,{})};import{useMemo as r9}from"react";import{jsx as _2,jsxs as h1}from"react/jsx-runtime";var E1=()=>{let{currentDate:P,t:$}=B(),Z=r9(()=>{return K5(P)},[P]);return h1(OP,{days:Z,children:[_2("div",{className:"w-20 sm:w-40 border-b border-r shrink-0 flex justify-center items-center sticky top-0 left-0 bg-background z-20",children:_2("div",{className:"text-sm truncate px-1 min-w-0",children:$("resources")})}),Z.map((X,J)=>{let Y=`resource-month-header-${X.toISOString()}`;return h1(x,{className:"w-20 border-b border-r shrink-0 flex items-center justify-center flex-col",delay:J*0.05,transitionKey:M.listKey(Y,"motion"),children:[_2("div",{className:"text-xs font-medium",children:X.format("D")}),_2("div",{className:"text-xs text-muted-foreground",children:X.format("ddd")})]},M.listKey(Y,"animated"))})]})};import{jsx as bP,jsxs as j1}from"react/jsx-runtime";var D1=()=>{let{currentDate:P,resources:$}=B(),Z=P.startOf("month"),X=Array.from({length:P.daysInMonth()},(Q,q)=>Z.add(q,"day")),J={id:M.col.date,days:X,day:void 0,className:"shrink-0 w-16 min-w-16 max-w-16 sticky left-0 bg-background z-20 border-r-0",gridType:"day",noEvents:!0,renderCell:(Q)=>j1("div",{className:"text-muted-foreground p-2 text-right text-[10px] sm:text-xs flex flex-col items-center",children:[bP("span",{children:Q.format("D")}),bP("span",{children:Q.format("ddd")})]})},Y=$.map((Q)=>({id:M.col.resource("month",Q.id),day:void 0,resourceId:Q.id,days:X,gridType:"day"}));return bP(T0,{classes:{header:"w-full",body:"w-full"},columns:[J,...Y],"data-testid":"resource-month-vertical-grid",children:j1("div",{className:"flex border-b h-12 flex-1","data-testid":"resource-month-header",children:[bP("div",{className:"shrink-0 border-r w-16 sticky top-0 left-0 bg-background z-20"}),$.map((Q)=>bP(u0,{className:"min-w-20 flex-1",resource:Q},M.listKey("resource-cell",Q.id)))]})})};import{jsx as x1}from"react/jsx-runtime";var v1=()=>{let{orientation:P}=B();if(P==="vertical")return x1(D1,{});return x1(E1,{})};import{useMemo as t2}from"react";function r0(){let{currentDate:P,firstDayOfWeek:$,resources:Z,weekViewGranularity:X,businessHours:J,hideNonBusinessHours:Y,hiddenDays:Q}=B(),q=X==="hourly",U=t2(()=>d(P,$),[P,$]),_=t2(()=>Q?U.filter((K)=>!Q.has(K.day())):U,[U,Q]),G=t2(()=>Z.flatMap((K)=>K.businessHours?[K.businessHours]:[]),[Z]);return{isHourly:q,resources:Z,weekDays:U,visibleDays:_,currentDate:P,businessHours:J,hideNonBusinessHours:Y,resourceBusinessHours:G}}import{jsx as K2,jsxs as n9}from"react/jsx-runtime";var y1=({days:P})=>{let{weekViewGranularity:$}=B(),Z=$==="hourly";return K2("div",{className:"flex h-12",children:P.map((X,J)=>{let Y=u(X),Q=M.header.week.day(X);return K2(x,{className:A("shrink-0 border-r last:border-r-0 border-b flex-1 flex items-center text-center font-medium min-w-20",Y&&"bg-primary/10 font-bold"),"data-testid":M.header.resource.weekDay,delay:J*0.05,transitionKey:M.listKey(Q,"motion"),children:n9("div",{className:A(Z?"sticky left-1/2":"w-full text-center"),children:[K2("div",{className:"text-sm truncate w-full",children:X.format("ddd")}),K2("div",{className:"text-xs text-muted-foreground",children:X.format("D")})]})},M.listKey(Q,"animated"))})})};import{useMemo as a9}from"react";function c1(){let{isHourly:P,weekDays:$,businessHours:Z,hideNonBusinessHours:X,resourceBusinessHours:J}=r0();return{weekHours:a9(()=>{if(!P)return[];return $.map((Q)=>z0({referenceDate:Q,businessHours:Z,hideNonBusinessHours:X,resourceBusinessHours:J}))},[P,$,Z,X,J])}}import{jsx as G2,jsxs as i1}from"react/jsx-runtime";var l1=()=>{let{t:P}=B(),{isHourly:$,weekDays:Z}=r0(),{weekHours:X}=c1();return i1(OP,{classes:{header:A($?"h-24":"h-12","min-w-full"),body:"min-w-full",cell:"min-w-20 flex-1"},days:$?X:Z,gridType:$?"hour":"day",children:[G2("div",{className:"w-20 sm:w-40 border-b border-r shrink-0 flex justify-center items-center sticky top-0 left-0 bg-background z-20",children:G2("div",{className:"text-sm truncate px-1 min-w-0",children:P("resources")})}),i1("div",{className:"flex-1 flex flex-col",children:[G2(y1,{days:Z}),$&&G2(U2,{delayStep:0.005,hours:X.flat(),view:"week"})]})]})};import{useMemo as a1}from"react";import{jsx as L2,jsxs as u1}from"react/jsx-runtime";var o1=({columns:P})=>{let{currentDate:$}=B();return u1("div",{className:"flex h-12",children:[L2("div",{className:"shrink-0 w-16 border-r border-b z-20 bg-background sticky left-0",children:L2("span",{className:"px-2 h-full w-full flex justify-center items-start font-medium",children:$.week()})}),P.map((Z,X)=>{let J=Z.day;if(!J)return null;let Y=u(J),Q=M.header.week.hour(J,Z.resourceId??"");return u1(x,{className:A("min-w-20 flex-1 border-r last:border-r-0 border-b flex flex-col items-center justify-center text-xs shrink-0 bg-background",Y&&"bg-primary/10 font-bold"),"data-testid":M.header.resource.timeLabel("week",J.format("HH")),delay:X*0.05,transitionKey:M.listKey(Q,"motion"),children:[L2("div",{className:"text-sm truncate w-full text-center",children:J.format("ddd")}),L2("div",{className:"text-xs text-muted-foreground",children:J.format("D")})]},M.listKey(Q,"animated"))})]})};import{jsx as wP,jsxs as d1}from"react/jsx-runtime";var r1=({resources:P})=>{let{weekViewGranularity:$,t:Z,currentDate:X}=B(),J=$==="hourly";return d1("div",{className:"flex h-12",children:[wP("div",{className:"shrink-0 w-16 border-r z-20 bg-background sticky left-0",children:d1("span",{className:A("px-2 h-full w-full flex flex-col justify-center text-xs text-muted-foreground text-center min-w-0",J?"justify-end":"justify-center border-b"),children:[wP("span",{className:"truncate w-full",children:Z("week")}),!J&&wP("span",{className:"font-medium text-foreground truncate w-full",children:X.week()})]})}),P.map((Y)=>{return wP(u0,{className:"min-w-20 flex-1 border-b",resource:Y,children:wP("div",{className:A("sticky text-sm font-medium truncate",J?"left-1/4":"left-1"),children:Y.title})},M.listKey("resource-cell",Y.id))})]})};import{useCallback as t9,useMemo as A2}from"react";function n1(){let{isHourly:P,resources:$,weekDays:Z,visibleDays:X,currentDate:J,businessHours:Y,hideNonBusinessHours:Q,resourceBusinessHours:q}=r0(),U=t9((O)=>{return z0({referenceDate:O,businessHours:Y,hideNonBusinessHours:Q,allDates:Z,resourceBusinessHours:q})},[Y,Q,Z,q]),_=A2(()=>U(J),[J,U]),G=A2(()=>$.flatMap((O)=>X.map((N)=>({id:M.col.day(N,O.id),className:"min-w-20 flex-1",resourceId:O.id,resource:O,day:N,days:U(N),gridType:"hour"}))),[$,X,U]),K=A2(()=>$.map((O)=>({id:M.col.resource("week",O.id),className:"min-w-20 flex-1",day:void 0,resourceId:O.id,resource:O,days:Z,gridType:"day"})),[$,Z]),V=A2(()=>{if(P)return G;return K},[P,G,K]);return{hours:_,columns:V}}import{jsx as E0,jsxs as s2,Fragment as s9}from"react/jsx-runtime";var t1=()=>{let{isHourly:P,resources:$,weekDays:Z,visibleDays:X}=r0(),{hours:J,columns:Y}=n1(),{slotDuration:Q}=B(),q=a1(()=>({id:P?M.col.time:M.col.date,days:P?J:Z,day:void 0,className:"shrink-0 w-16 min-w-16 max-w-16 sticky left-0 bg-background z-20 border-r-0",gridType:P?"hour":"day",noEvents:!0,renderCell:(_)=>E0("div",{className:"text-muted-foreground p-2 text-right text-[10px] sm:text-xs flex flex-col items-center",children:P?E0(p0,{date:_}):s2(s9,{children:[E0("span",{children:_.format("ddd")}),E0("span",{children:_.format("D")})]})})}),[J,P,Z]),U=a1(()=>{if(!P)return;return s2("div",{className:"flex w-full",children:[E0(VP,{}),$.map((_)=>E0(o0,{classes:{cell:"min-w-20 flex-1 border-r!"},days:X,resource:_,showSpacer:!1},M.allDayRow(_.id)))]})},[P,$,X]);return E0(T0,{allDayRow:U,classes:{header:P?"h-24":"h-12"},columns:[q,...Y],"data-testid":"resource-week",gridType:P?"hour":"day",slotDurationMinutes:Q,children:s2("div",{className:"flex-1 flex flex-col",children:[E0(r1,{resources:$,visibleDays:X}),P&&E0(o1,{columns:Y})]})})};import{jsx as s1}from"react/jsx-runtime";var e1=()=>{let{orientation:P}=B();if(P==="vertical")return s1(t1,{});return s1(l1,{})};import{jsx as n0,jsxs as e9}from"react/jsx-runtime";var P4=()=>{let{view:P}=B();return e9("div",{className:"flex flex-col w-full h-full","data-testid":"ilamy-resource-calendar",children:[n0(IP,{className:"p-1"}),n0(yP,{children:n0(x,{className:"w-full h-[calc(100%-3.5rem)] @container/calendar-body",direction:"horizontal",transitionKey:P,children:n0("div",{className:"border h-full w-full","data-testid":"calendar-body",children:{month:n0(v1,{},"month"),week:n0(e1,{},"week"),day:n0(C1,{},"day")}[P]})})}),n0(tP,{})]})};import{jsx as $4}from"react/jsx-runtime";var P3=({events:P=[],resources:$=[],firstDayOfWeek:Z="sunday",initialView:X="month",initialDate:J,disableDragAndDrop:Y=!1,dayMaxEvents:Q=ZP,timeFormat:q="12-hour",eventSpacing:U=j0,eventHeight:_=B0,hiddenDays:G,...K})=>{return $4(N5,{dayMaxEvents:Q,disableDragAndDrop:Y,eventHeight:_,eventSpacing:U,events:mP(P),firstDayOfWeek:D0[Z],hiddenDays:kP(G),initialDate:XP(J),initialView:X,resources:$,timeFormat:q,...K,children:$4(P4,{})})};export{m4 as useIlamyCalendarContext,UP as isRecurringEvent,W2 as generateRecurringEvents,F2 as defaultTranslations,CU as RRule,P3 as IlamyResourceCalendar,l9 as IlamyCalendar};
|
|
5
5
|
|
|
6
|
-
//# debugId=
|
|
7
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL2luZGV4LnRzIiwgInNyYy9jb21wb25lbnRzL2FuaW1hdGlvbnMvYW5pbWF0ZWQtc2VjdGlvbi50c3giLCAic3JjL2xpYi91dGlscy9pbmRleC50cyIsICJzcmMvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnLnRzIiwgInNyYy9saWIvY29uc3RhbnRzLnRzIiwgInNyYy9jb21wb25lbnRzL2RyYWctYW5kLWRyb3AvY2FsZW5kYXItZG5kLWNvbnRleHQudHN4IiwgInNyYy9jb21wb25lbnRzL3VpL2J1dHRvbi50c3giLCAic3JjL2NvbXBvbmVudHMvdWkvZGlhbG9nLnRzeCIsICJzcmMvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQudHMiLCAic3JjL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvY29udGV4dC50cyIsICJzcmMvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29udGV4dHMvcmVzb3VyY2UtY2FsZW5kYXItY29udGV4dC9jb250ZXh0LnRzIiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb250ZXh0cy9yZXNvdXJjZS1jYWxlbmRhci1jb250ZXh0L3Byb3ZpZGVyLnRzeCIsICJzcmMvaG9va3MvdXNlLWNhbGVuZGFyLWVuZ2luZS50cyIsICJzcmMvZmVhdHVyZXMvcmVjdXJyZW5jZS91dGlscy9yZWN1cnJlbmNlLWhhbmRsZXIudHMiLCAic3JjL2xpYi90cmFuc2xhdGlvbnMvZGVmYXVsdC50cyIsICJzcmMvbGliL3V0aWxzL2RhdGUtdXRpbHMudHMiLCAic3JjL2xpYi91dGlscy9ldmVudC11dGlscy50cyIsICJzcmMvZmVhdHVyZXMvcmVjdXJyZW5jZS9jb21wb25lbnRzL3JlY3VycmVuY2UtZWRpdC1kaWFsb2cvcmVjdXJyZW5jZS1lZGl0LWRpYWxvZy50c3giLCAic3JjL2NvbXBvbmVudHMvZHJhZy1hbmQtZHJvcC9kbmQtdXRpbHMudHMiLCAic3JjL2NvbXBvbmVudHMvZHJhZy1hbmQtZHJvcC9ldmVudC1kcmFnLW92ZXJsYXkudHN4IiwgInNyYy9jb21wb25lbnRzL2V2ZW50LWZvcm0vZXZlbnQtZm9ybS50c3giLCAic3JjL2NvbXBvbmVudHMvdWkvY2hlY2tib3gudHN4IiwgInNyYy9jb21wb25lbnRzL3VpL2RhdGUtcGlja2VyLnRzeCIsICJzcmMvY29tcG9uZW50cy91aS9jYWxlbmRhci50c3giLCAic3JjL2NvbXBvbmVudHMvdWkvcG9wb3Zlci50c3giLCAic3JjL2NvbXBvbmVudHMvdWkvaW5wdXQudHN4IiwgInNyYy9jb21wb25lbnRzL3VpL2xhYmVsLnRzeCIsICJzcmMvY29tcG9uZW50cy91aS9zY3JvbGwtYXJlYS50c3giLCAic3JjL2NvbXBvbmVudHMvdWkvdGltZS1waWNrZXIudHN4IiwgInNyYy9ob29rcy91c2UtYXV0b2NvbXBsZXRlLXRpbWVwaWNrZXIudHMiLCAic3JjL2xpYi91dGlscy9rZXlzLnRzIiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci91dGlscy9idXNpbmVzcy1ob3Vycy50cyIsICJzcmMvZmVhdHVyZXMvY2FsZW5kYXIvdXRpbHMvZXZlbnQtZm9ybS11dGlscy50cyIsICJzcmMvZmVhdHVyZXMvcmVjdXJyZW5jZS9jb21wb25lbnRzL3JlY3VycmVuY2UtZWRpdG9yL3JlY3VycmVuY2UtZWRpdG9yLnRzeCIsICJzcmMvY29tcG9uZW50cy91aS9jYXJkLnRzeCIsICJzcmMvY29tcG9uZW50cy91aS9zZWxlY3QudHN4IiwgInNyYy9mZWF0dXJlcy9yZWN1cnJlbmNlL2hvb2tzL3VzZVJlY3VycmluZ0V2ZW50QWN0aW9ucy50cyIsICJzcmMvaG9va3MvdXNlLWVmZmVjdGl2ZS1idXNpbmVzcy1ob3Vycy50cyIsICJzcmMvY29tcG9uZW50cy9ldmVudC1mb3JtL2V2ZW50LWZvcm0tZGlhbG9nLnRzeCIsICJzcmMvY29tcG9uZW50cy9oZWFkZXIvYmFzZS1oZWFkZXIudHN4IiwgInNyYy9saWIvdXRpbHMvZXhwb3J0LWljYWwudHMiLCAic3JjL2NvbXBvbmVudHMvaGVhZGVyL3RpdGxlLWNvbnRlbnQudHN4IiwgInNyYy9ob29rcy91c2UtZGF0ZS10aW1lLWZvcm1hdHRlcnMudHMiLCAic3JjL2NvbXBvbmVudHMvaGVhZGVyL3ZpZXctY29udHJvbHMudHN4IiwgInNyYy9jb21wb25lbnRzL2FsbC1kYXktcm93L2FsbC1kYXktcm93LnRzeCIsICJzcmMvY29tcG9uZW50cy9ob3Jpem9udGFsLWdyaWQvaG9yaXpvbnRhbC1ncmlkLXJvdy50c3giLCAic3JjL2ZlYXR1cmVzL2NhbGVuZGFyL2hvb2tzL3VzZVByb2Nlc3NlZFdlZWtFdmVudHMudHMiLCAic3JjL2xpYi91dGlscy9wb3NpdGlvbi13ZWVrLWV2ZW50cy50cyIsICJzcmMvY29tcG9uZW50cy9ncmlkLWNlbGwudHN4IiwgInNyYy9jb21wb25lbnRzL2RheS1udW1iZXIudHN4IiwgInNyYy9jb21wb25lbnRzL2FsbC1ldmVudHMtZGlhbG9nLnRzeCIsICJzcmMvY29tcG9uZW50cy9kcmFnZ2FibGUtZXZlbnQvZHJhZ2dhYmxlLWV2ZW50LnRzeCIsICJzcmMvY29tcG9uZW50cy9kcm9wcGFibGUtY2VsbC50c3giLCAic3JjL2NvbXBvbmVudHMvcmVzb3VyY2UtY2VsbC50c3giLCAic3JjL2NvbXBvbmVudHMvaG9yaXpvbnRhbC1ncmlkL2hvcml6b250YWwtZ3JpZC1ldmVudHMtbGF5ZXIudHN4IiwgInNyYy9jb21wb25lbnRzL2N1cnJlbnQtdGltZS1pbmRpY2F0b3IudHN4IiwgInNyYy9jb21wb25lbnRzL2FsbC1kYXktcm93L2FsbC1kYXktY2VsbC50c3giLCAic3JjL2NvbXBvbmVudHMvaG91ci1sYWJlbC9ob3VyLWxhYmVsLnRzeCIsICJzcmMvY29tcG9uZW50cy92ZXJ0aWNhbC1ncmlkL3ZlcnRpY2FsLWdyaWQudHN4IiwgInNyYy9jb21wb25lbnRzL3ZlcnRpY2FsLWdyaWQvdXNlLXNjcm9sbC10by10aW1lLnRzIiwgInNyYy9jb21wb25lbnRzL3ZlcnRpY2FsLWdyaWQvdmVydGljYWwtZ3JpZC1jb2wudHN4IiwgInNyYy9jb21wb25lbnRzL3ZlcnRpY2FsLWdyaWQvdmVydGljYWwtZ3JpZC1ldmVudHMtbGF5ZXIudHN4IiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci9ob29rcy91c2VQcm9jZXNzZWREYXlFdmVudHMudHMiLCAic3JjL2xpYi91dGlscy9wb3NpdGlvbi1kYXktZXZlbnRzLnRzIiwgInNyYy9jb21wb25lbnRzL3ZlcnRpY2FsLWdyaWQvdmVydGljYWwtZ3JpZC1oZWFkZXItY29udGFpbmVyLnRzeCIsICJzcmMvZmVhdHVyZXMvY2FsZW5kYXIvdXRpbHMvdmlldy1ob3Vycy50cyIsICJzcmMvZmVhdHVyZXMvY2FsZW5kYXIvY29tcG9uZW50cy9kYXktdmlldy9kYXktdmlldy50c3giLCAic3JjL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbXBvbmVudHMvbW9udGgtdmlldy9tb250aC12aWV3LnRzeCIsICJzcmMvY29tcG9uZW50cy9ob3Jpem9udGFsLWdyaWQvaG9yaXpvbnRhbC1ncmlkLnRzeCIsICJzcmMvY29tcG9uZW50cy9ob3Jpem9udGFsLWdyaWQvaG9yaXpvbnRhbC1ncmlkLWhlYWRlci1jb250YWluZXIudHN4IiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci9jb21wb25lbnRzL21vbnRoLXZpZXcvbW9udGgtaGVhZGVyLnRzeCIsICJzcmMvZmVhdHVyZXMvY2FsZW5kYXIvY29tcG9uZW50cy93ZWVrLXZpZXcvd2Vlay12aWV3LnRzeCIsICJzcmMvZmVhdHVyZXMvY2FsZW5kYXIvY29tcG9uZW50cy95ZWFyLXZpZXcveWVhci12aWV3LnRzeCIsICJzcmMvZmVhdHVyZXMvY2FsZW5kYXIvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9wcm92aWRlci50c3giLCAic3JjL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbXBvbmVudHMvaWxhbXktY2FsZW5kYXIudHN4IiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL3Jlc291cmNlLWV2ZW50LWdyaWQudHN4IiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL3RpbWUtaGVhZGVyLXJvdy50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvZGF5LXZpZXcvcmVzb3VyY2UtZGF5LWhvcml6b250YWwudHN4IiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL2RheS12aWV3L3Jlc291cmNlLWRheS12ZXJ0aWNhbC50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvZGF5LXZpZXcvaW5kZXgudHN4IiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL21vbnRoLXZpZXcvcmVzb3VyY2UtbW9udGgtaG9yaXpvbnRhbC50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvbW9udGgtdmlldy9yZXNvdXJjZS1tb250aC12ZXJ0aWNhbC50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvbW9udGgtdmlldy9pbmRleC50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvd2Vlay12aWV3L3VzZS1yZXNvdXJjZS13ZWVrLXZpZXctZGF0YS50cyIsICJzcmMvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy93ZWVrLXZpZXcvaG9yaXpvbnRhbC9yZXNvdXJjZS13ZWVrLWhvcml6b250YWwtZGF5LWhlYWRlci50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvd2Vlay12aWV3L2hvcml6b250YWwvdXNlLXJlc291cmNlLXdlZWstaG9yaXpvbnRhbC1kYXRhLnRzIiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL3dlZWstdmlldy9ob3Jpem9udGFsL3Jlc291cmNlLXdlZWstaG9yaXpvbnRhbC50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvd2Vlay12aWV3L3ZlcnRpY2FsL3Jlc291cmNlLXdlZWstdmVydGljYWwudHN4IiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL3dlZWstdmlldy92ZXJ0aWNhbC9yZXNvdXJjZS13ZWVrLXZlcnRpY2FsLWRheS1oZWFkZXIudHN4IiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL3dlZWstdmlldy92ZXJ0aWNhbC9yZXNvdXJjZS13ZWVrLXZlcnRpY2FsLXJlc291cmNlLWhlYWRlci50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvd2Vlay12aWV3L3ZlcnRpY2FsL3VzZS1yZXNvdXJjZS13ZWVrLXZlcnRpY2FsLWRhdGEudHMiLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvd2Vlay12aWV3L2luZGV4LnRzeCIsICJzcmMvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy9pbGFteS1yZXNvdXJjZS1jYWxlbmRhci9yZXNvdXJjZS1jYWxlbmRhci1ib2R5LnRzeCIsICJzcmMvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy9pbGFteS1yZXNvdXJjZS1jYWxlbmRhci9pbGFteS1yZXNvdXJjZS1jYWxlbmRhci50c3giXSwKICAic291cmNlc0NvbnRlbnQiOiBbCiAgICAiLy8gUmUtZXhwb3J0IHJydWxlLmpzIHR5cGVzIGZvciBjb252ZW5pZW5jZVxuZXhwb3J0IHR5cGUgeyBXZWVrZGF5IH0gZnJvbSAncnJ1bGUnXG5leHBvcnQgeyBSUnVsZSB9IGZyb20gJ3JydWxlJ1xuZXhwb3J0IHR5cGUgeyBFdmVudEZvcm1Qcm9wcyB9IGZyb20gJy4vY29tcG9uZW50cy9ldmVudC1mb3JtL2V2ZW50LWZvcm0nXG5leHBvcnQgdHlwZSB7IEJ1c2luZXNzSG91cnMsIENhbGVuZGFyRXZlbnQsIFdlZWtEYXlzIH0gZnJvbSAnLi9jb21wb25lbnRzL3R5cGVzJ1xuZXhwb3J0IHsgSWxhbXlDYWxlbmRhciB9IGZyb20gJy4vZmVhdHVyZXMvY2FsZW5kYXIvY29tcG9uZW50cy9pbGFteS1jYWxlbmRhcidcbmV4cG9ydCB0eXBlIHtcblx0Q2VsbENsaWNrSW5mbyxcblx0SWxhbXlDYWxlbmRhclByb3BzLFxuXHRSZW5kZXJDdXJyZW50VGltZUluZGljYXRvclByb3BzLFxuXHRTbG90RHVyYXRpb24sXG59IGZyb20gJy4vZmVhdHVyZXMvY2FsZW5kYXIvdHlwZXMnXG4vLyBFeHBvcnQgdHlwZXNcbmV4cG9ydCB0eXBlIHsgUlJ1bGVPcHRpb25zIH0gZnJvbSAnLi9mZWF0dXJlcy9yZWN1cnJlbmNlL3R5cGVzJ1xuLy8gUlJVTEUtYmFzZWQgcmVjdXJyZW5jZSBzeXN0ZW1cbmV4cG9ydCB7XG5cdGdlbmVyYXRlUmVjdXJyaW5nRXZlbnRzLFxuXHRpc1JlY3VycmluZ0V2ZW50LFxufSBmcm9tICcuL2ZlYXR1cmVzL3JlY3VycmVuY2UvdXRpbHMvcmVjdXJyZW5jZS1oYW5kbGVyJ1xuZXhwb3J0IHR5cGUgeyBJbGFteVJlc291cmNlQ2FsZW5kYXJQcm9wcyB9IGZyb20gJy4vZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy9pbGFteS1yZXNvdXJjZS1jYWxlbmRhcidcbmV4cG9ydCB7IElsYW15UmVzb3VyY2VDYWxlbmRhciB9IGZyb20gJy4vZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy9pbGFteS1yZXNvdXJjZS1jYWxlbmRhci9pbGFteS1yZXNvdXJjZS1jYWxlbmRhcidcbi8vIFJlc291cmNlIGNhbGVuZGFyIHR5cGVzXG5leHBvcnQgdHlwZSB7IFJlc291cmNlIH0gZnJvbSAnLi9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci90eXBlcydcbi8vIFB1YmxpYyBjYWxlbmRhciBjb250ZXh0IGhvb2tzXG5leHBvcnQge1xuXHR0eXBlIFVzZUlsYW15Q2FsZW5kYXJDb250ZXh0UmV0dXJuLFxuXHR1c2VJbGFteUNhbGVuZGFyQ29udGV4dCxcbn0gZnJvbSAnLi9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmV4cG9ydCB7IGRlZmF1bHRUcmFuc2xhdGlvbnMgfSBmcm9tICcuL2xpYi90cmFuc2xhdGlvbnMvZGVmYXVsdCdcbi8vIFRyYW5zbGF0aW9uIHN5c3RlbVxuZXhwb3J0IHR5cGUge1xuXHRUcmFuc2xhdGlvbktleSxcblx0VHJhbnNsYXRpb25zLFxuXHRUcmFuc2xhdG9yRnVuY3Rpb24sXG59IGZyb20gJy4vbGliL3RyYW5zbGF0aW9ucy90eXBlcydcbmV4cG9ydCB0eXBlIHsgQ2FsZW5kYXJWaWV3LCBUaW1lRm9ybWF0IH0gZnJvbSAnLi90eXBlcydcbiIsCiAgICAiaW1wb3J0IHtcblx0QW5pbWF0ZVByZXNlbmNlLFxuXHR0eXBlIEhUTUxNb3Rpb25Qcm9wcyxcblx0bW90aW9uLFxuXHR0eXBlIFZhcmlhbnRzLFxufSBmcm9tICdtb3Rpb24vcmVhY3QnXG5pbXBvcnQgdHlwZSAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuaW50ZXJmYWNlIEFuaW1hdGVkU2VjdGlvblByb3BzXG5cdGV4dGVuZHMgT21pdDxIVE1MTW90aW9uUHJvcHM8J2Rpdic+LCAnY2hpbGRyZW4nIHwgJ2xheW91dCcgfCAnbGF5b3V0SWQnPiB7XG5cdGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGVcblx0dHJhbnNpdGlvbktleTogc3RyaW5nXG5cdGRlbGF5PzogbnVtYmVyXG5cdGNsYXNzTmFtZT86IHN0cmluZ1xuXHRkaXJlY3Rpb24/OiAndmVydGljYWwnIHwgJ2hvcml6b250YWwnXG5cdGxheW91dD86IGJvb2xlYW4gfCAncG9zaXRpb24nIHwgJ3NpemUnIHwgJ3ByZXNlcnZlLWFzcGVjdCdcblx0bGF5b3V0SWQ/OiBzdHJpbmdcblx0J2RhdGEtdGVzdGlkJz86IHN0cmluZ1xufVxuXG5jb25zdCB2YXJpYW50czogVmFyaWFudHMgPSB7XG5cdGhpZGRlbjogKHsgZGlyZWN0aW9uIH06IHsgZGlyZWN0aW9uOiAndmVydGljYWwnIHwgJ2hvcml6b250YWwnIH0pID0+ICh7XG5cdFx0b3BhY2l0eTogMCxcblx0XHR4OiBkaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyA/IDEwIDogMCxcblx0XHR5OiBkaXJlY3Rpb24gPT09ICd2ZXJ0aWNhbCcgPyAtMTAgOiAwLFxuXHR9KSxcblx0dmlzaWJsZTogKHsgZGVsYXkgfTogeyBkZWxheTogbnVtYmVyIH0pID0+ICh7XG5cdFx0b3BhY2l0eTogMSxcblx0XHR4OiAwLFxuXHRcdHk6IDAsXG5cdFx0dHJhbnNpdGlvbjogeyBkdXJhdGlvbjogMC4yLCBlYXNlOiBbMC40LCAwLCAwLjIsIDFdLCBkZWxheSB9LFxuXHR9KSxcblx0ZXhpdDogKHsgZGlyZWN0aW9uIH06IHsgZGlyZWN0aW9uOiAndmVydGljYWwnIHwgJ2hvcml6b250YWwnIH0pID0+ICh7XG5cdFx0b3BhY2l0eTogMCxcblx0XHR4OiBkaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyA/IC0xMCA6IDAsXG5cdFx0eTogZGlyZWN0aW9uID09PSAndmVydGljYWwnID8gLTEwIDogMCxcblx0XHR0cmFuc2l0aW9uOiB7IGR1cmF0aW9uOiAwLjE1IH0sXG5cdH0pLFxufVxuXG5leHBvcnQgY29uc3QgQW5pbWF0ZWRTZWN0aW9uOiBSZWFjdC5GQzxBbmltYXRlZFNlY3Rpb25Qcm9wcz4gPSAoe1xuXHRjaGlsZHJlbixcblx0dHJhbnNpdGlvbktleSxcblx0ZGVsYXkgPSAwLFxuXHRjbGFzc05hbWUsXG5cdGRpcmVjdGlvbiA9ICd2ZXJ0aWNhbCcsXG5cdGxheW91dCxcblx0bGF5b3V0SWQsXG5cdCdkYXRhLXRlc3RpZCc6IHRlc3RJZCxcblx0cmVmLFxuXHQuLi5wcm9wc1xufSkgPT4gKFxuXHQ8QW5pbWF0ZVByZXNlbmNlIG1vZGU9XCJ3YWl0XCI+XG5cdFx0PG1vdGlvbi5kaXZcblx0XHRcdGFuaW1hdGU9XCJ2aXNpYmxlXCJcblx0XHRcdGNsYXNzTmFtZT17Y24oJ2lubGluZS1ibG9jayB3LWZ1bGwnLCBjbGFzc05hbWUpfVxuXHRcdFx0Y3VzdG9tPXt7IGRlbGF5LCBkaXJlY3Rpb24gfX1cblx0XHRcdGRhdGEtdGVzdGlkPXt0ZXN0SWR9XG5cdFx0XHRleGl0PVwiZXhpdFwiXG5cdFx0XHRpbml0aWFsPVwiaGlkZGVuXCJcblx0XHRcdGtleT17dHJhbnNpdGlvbktleX1cblx0XHRcdGxheW91dD17bGF5b3V0fVxuXHRcdFx0bGF5b3V0SWQ9e2xheW91dElkfVxuXHRcdFx0cmVmPXtyZWZ9XG5cdFx0XHR2YXJpYW50cz17dmFyaWFudHN9XG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0PlxuXHRcdFx0e2NoaWxkcmVufVxuXHRcdDwvbW90aW9uLmRpdj5cblx0PC9BbmltYXRlUHJlc2VuY2U+XG4pXG5cbkFuaW1hdGVkU2VjdGlvbi5kaXNwbGF5TmFtZSA9ICdBbmltYXRlZFNlY3Rpb24nXG4iLAogICAgImltcG9ydCB0eXBlIHsgQ2xhc3NWYWx1ZSB9IGZyb20gJ2Nsc3gnXG5pbXBvcnQgeyBjbHN4IH0gZnJvbSAnY2xzeCdcbmltcG9ydCB7IHR3TWVyZ2UgfSBmcm9tICd0YWlsd2luZC1tZXJnZSdcbmltcG9ydCB0eXBlIHsgV2Vla0RheXMgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgZGF5anMsIHsgdHlwZSBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgV0VFS19EQVlTX05VTUJFUl9NQVAgfSBmcm9tICdAL2xpYi9jb25zdGFudHMnXG5cbmV4cG9ydCBmdW5jdGlvbiBjbiguLi5pbnB1dHM6IENsYXNzVmFsdWVbXSkge1xuXHRyZXR1cm4gdHdNZXJnZShjbHN4KGlucHV0cykpXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb3B0aW9uYWwgV2Vla0RheXNbXSBsaXN0IGludG8gYSBTZXQ8bnVtYmVyPiBvZiBkYXkgaW5kaWNlc1xuICogKDAgPSBTdW5kYXksIDEgPSBNb25kYXksIC4uLiksIG9yIHVuZGVmaW5lZCBpZiB0aGUgbGlzdCBpcyBlbXB0eS5cbiAqL1xuZXhwb3J0IGNvbnN0IHRvSGlkZGVuRGF5c1NldCA9IChcblx0aGlkZGVuRGF5cz86IFdlZWtEYXlzW11cbik6IFNldDxudW1iZXI+IHwgdW5kZWZpbmVkID0+IHtcblx0aWYgKCFoaWRkZW5EYXlzIHx8IGhpZGRlbkRheXMubGVuZ3RoID09PSAwKSByZXR1cm4gdW5kZWZpbmVkXG5cdHJldHVybiBuZXcgU2V0KGhpZGRlbkRheXMubWFwKChkYXkpID0+IFdFRUtfREFZU19OVU1CRVJfTUFQW2RheV0pKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2FmZURhdGUoXG5cdGRhdGU6IERheWpzIHwgRGF0ZSB8IHN0cmluZyB8IHVuZGVmaW5lZFxuKTogRGF5anMgfCB1bmRlZmluZWQge1xuXHRpZiAoZGF0ZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZFxuXHR9XG5cdGlmIChkYXlqcy5pc0RheWpzKGRhdGUpKSB7XG5cdFx0cmV0dXJuIGRhdGVcblx0fVxuXHRjb25zdCBwYXJzZWREYXRlID0gZGF5anMoZGF0ZSlcblx0cmV0dXJuIHBhcnNlZERhdGUuaXNWYWxpZCgpID8gcGFyc2VkRGF0ZSA6IHVuZGVmaW5lZFxufVxuXG5leHBvcnQgY29uc3Qgb21pdEtleXMgPSA8VCBleHRlbmRzIG9iamVjdCwgSyBleHRlbmRzIGtleW9mIFQ+KFxuXHRvYmo6IFQsXG5cdGtleXM6IEtbXVxuKTogT21pdDxULCBLPiA9PiB7XG5cdGNvbnN0IHJlc3VsdCA9IHsgLi4ub2JqIH1cblx0Zm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuXHRcdGRlbGV0ZSByZXN1bHRba2V5XVxuXHR9XG5cdHJldHVybiByZXN1bHRcbn1cblxuLyoqXG4gKiBOb3JtYWxpemVzIGNhbGVuZGFyIGV2ZW50cyBmcm9tIHB1YmxpYy1mYWNpbmcgZm9ybWF0IHRvIGludGVybmFsIGZvcm1hdC5cbiAqIENvbnZlcnRzIGZsZXhpYmxlIGRhdGUgdHlwZXMgKGRheWpzLCBEYXRlLCBzdHJpbmcpIHRvIHN0cmljdCBkYXlqcyBvYmplY3RzLlxuICpcbiAqIEBwYXJhbSBldmVudHMgLSBBcnJheSBvZiBjYWxlbmRhciBldmVudHMgd2l0aCBmbGV4aWJsZSBkYXRlIHR5cGVzXG4gKiBAcmV0dXJucyBOb3JtYWxpemVkIGFycmF5IG9mIGNhbGVuZGFyIGV2ZW50cyB3aXRoIGRheWpzIGRhdGVzXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFJlZ3VsYXIgY2FsZW5kYXIgZXZlbnRzXG4gKiBjb25zdCBldmVudHMgPSBub3JtYWxpemVFdmVudHM8SWxhbXlDYWxlbmRhclByb3BFdmVudCwgQ2FsZW5kYXJFdmVudD4ocHJvcEV2ZW50cylcbiAqXG4gKiAvLyBSZXNvdXJjZSBjYWxlbmRhciBldmVudHNcbiAqIGNvbnN0IHJlc291cmNlRXZlbnRzID0gbm9ybWFsaXplRXZlbnRzPElsYW15UmVzb3VyY2VDYWxlbmRhclByb3BFdmVudCwgQ2FsZW5kYXJFdmVudD4ocHJvcEV2ZW50cylcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZUV2ZW50czxcblx0VElucHV0IGV4dGVuZHMge1xuXHRcdHN0YXJ0OiBEYXlqcyB8IERhdGUgfCBzdHJpbmdcblx0XHRlbmQ6IERheWpzIHwgRGF0ZSB8IHN0cmluZ1xuXHR9LFxuXHRUT3V0cHV0LFxuPihldmVudHM6IFRJbnB1dFtdIHwgdW5kZWZpbmVkKTogVE91dHB1dFtdIHtcblx0aWYgKCFldmVudHMgfHwgIWV2ZW50cy5sZW5ndGgpIHtcblx0XHRyZXR1cm4gW11cblx0fVxuXG5cdHJldHVybiBldmVudHMubWFwKChldmVudCkgPT4ge1xuXHRcdHJldHVybiB7XG5cdFx0XHQuLi5ldmVudCxcblx0XHRcdHN0YXJ0OiBkYXlqcy5pc0RheWpzKGV2ZW50LnN0YXJ0KSA/IGV2ZW50LnN0YXJ0IDogZGF5anMoZXZlbnQuc3RhcnQpLFxuXHRcdFx0ZW5kOiBkYXlqcy5pc0RheWpzKGV2ZW50LmVuZCkgPyBldmVudC5lbmQgOiBkYXlqcyhldmVudC5lbmQpLFxuXHRcdH0gYXMgVE91dHB1dFxuXHR9KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSB7IE9wVW5pdFR5cGUgYXMgRGF5anNPcFVuaXRUeXBlLCBQbHVnaW5GdW5jIH0gZnJvbSAnZGF5anMnXG5pbXBvcnQgZGF5anMgZnJvbSAnZGF5anMnXG5pbXBvcnQgaXNCZXR3ZWVuIGZyb20gJ2RheWpzL3BsdWdpbi9pc0JldHdlZW4uanMnXG5pbXBvcnQgaXNTYW1lT3JBZnRlciBmcm9tICdkYXlqcy9wbHVnaW4vaXNTYW1lT3JBZnRlci5qcydcbmltcG9ydCBpc1NhbWVPckJlZm9yZSBmcm9tICdkYXlqcy9wbHVnaW4vaXNTYW1lT3JCZWZvcmUuanMnXG5pbXBvcnQgbG9jYWxlRGF0YSBmcm9tICdkYXlqcy9wbHVnaW4vbG9jYWxlRGF0YS5qcydcbmltcG9ydCBsb2NhbGl6ZWRGb3JtYXQgZnJvbSAnZGF5anMvcGx1Z2luL2xvY2FsaXplZEZvcm1hdC5qcydcbmltcG9ydCBtaW5NYXggZnJvbSAnZGF5anMvcGx1Z2luL21pbk1heC5qcydcbmltcG9ydCB0aW1lem9uZSBmcm9tICdkYXlqcy9wbHVnaW4vdGltZXpvbmUuanMnXG5pbXBvcnQgdXRjIGZyb20gJ2RheWpzL3BsdWdpbi91dGMuanMnXG5pbXBvcnQgd2Vla2RheSBmcm9tICdkYXlqcy9wbHVnaW4vd2Vla2RheS5qcydcbmltcG9ydCB3ZWVrT2ZZZWFyIGZyb20gJ2RheWpzL3BsdWdpbi93ZWVrT2ZZZWFyLmpzJ1xuXG4vKipcbiAqIFBsdWdpbiB0aGF0IGZpeGVzIGEgZGF5anMtdGltZXpvbmUgYnVnIHdoZXJlIC5zdGFydE9mKCkgYW5kIC5lbmRPZigpIGRyb3BcbiAqIHRpbWV6b25lIGluZm8gd2hlbiB0aGUgc3lzdGVtJ3MgbG9jYWwgdGltZXpvbmUgaGFzIGEgRFNUIHRyYW5zaXRpb24gbmVhclxuICogdGhlIHRhcmdldCBkYXRlLiBBZnRlciBlYWNoIHN0YXJ0T2YvZW5kT2YgY2FsbCwgaWYgdGhlIFVUQyBvZmZzZXQgaGFzXG4gKiBkcmlmdGVkIGZyb20gd2hhdCB0aGUgdGltZXpvbmUgZXhwZWN0cywgcmUtYXBwbHkgdGhlIHRpbWV6b25lIHdpdGhcbiAqIGtlZXBMb2NhbFRpbWU9dHJ1ZSB0byByZXN0b3JlIHRoZSBjb3JyZWN0IG9mZnNldC5cbiAqL1xuaW50ZXJmYWNlIERheWpzSW50ZXJuYWwgZXh0ZW5kcyBkYXlqcy5EYXlqcyB7XG5cdCR4OiB7ICR0aW1lem9uZT86IHN0cmluZyB9XG59XG5cbmxldCBkZWZhdWx0VGltZXpvbmU6IHN0cmluZyB8IHVuZGVmaW5lZFxuXG5jb25zdCBmaXhUaW1lem9uZU9mZnNldDogUGx1Z2luRnVuYyA9IChfb3B0aW9uLCBkYXlqc0NsYXNzLCBkYXlqc0ZhY3RvcnkpID0+IHtcblx0Y29uc3QgcHJvdG8gPSBkYXlqc0NsYXNzLnByb3RvdHlwZVxuXG5cdC8vIEludGVyY2VwdCBzZXREZWZhdWx0IHRvIHRyYWNrIHRoZSBjb25maWd1cmVkIHRpbWV6b25lXG5cdGNvbnN0IG9yaWdpbmFsU2V0RGVmYXVsdCA9IGRheWpzRmFjdG9yeS50ei5zZXREZWZhdWx0XG5cdGRheWpzRmFjdG9yeS50ei5zZXREZWZhdWx0ID0gKHRpbWV6b25lPzogc3RyaW5nKSA9PiB7XG5cdFx0ZGVmYXVsdFRpbWV6b25lID0gdGltZXpvbmVcblx0XHRyZXR1cm4gb3JpZ2luYWxTZXREZWZhdWx0KHRpbWV6b25lKVxuXHR9XG5cblx0dHlwZSBTdGFydE9mRm4gPSAodW5pdDogRGF5anNPcFVuaXRUeXBlLCBfc3RhcnRPZj86IGJvb2xlYW4pID0+IGRheWpzLkRheWpzXG5cdGNvbnN0IG9yaWdpbmFsU3RhcnRPZiA9IHByb3RvLnN0YXJ0T2YgYXMgU3RhcnRPZkZuXG5cdGNvbnN0IG9yaWdpbmFsRW5kT2YgPSBwcm90by5lbmRPZlxuXG5cdGZ1bmN0aW9uIHJlc3RvcmVUaW1lem9uZShcblx0XHRpbnN0YW5jZTogZGF5anMuRGF5anMsXG5cdFx0cmVzdWx0OiBkYXlqcy5EYXlqc1xuXHQpOiBkYXlqcy5EYXlqcyB7XG5cdFx0Y29uc3QgdHogPSAoaW5zdGFuY2UgYXMgRGF5anNJbnRlcm5hbCkuJHg/LiR0aW1lem9uZSB8fCBkZWZhdWx0VGltZXpvbmVcblx0XHRpZiAoIXR6KSByZXR1cm4gcmVzdWx0XG5cblx0XHRjb25zdCBleHBlY3RlZE9mZnNldCA9IGRheWpzRmFjdG9yeVxuXHRcdFx0LnR6KHJlc3VsdC5mb3JtYXQoJ1lZWVktTU0tRERUSEg6bW06c3MnKSwgdHopXG5cdFx0XHQudXRjT2Zmc2V0KClcblx0XHRpZiAocmVzdWx0LnV0Y09mZnNldCgpICE9PSBleHBlY3RlZE9mZnNldCkge1xuXHRcdFx0cmV0dXJuIHJlc3VsdC50eih0eiwgdHJ1ZSlcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdFxuXHR9XG5cblx0Ly8gZGF5anMncyBlbmRPZiBjYWxscyBzdGFydE9mKHVuaXQsIGZhbHNlKSBpbnRlcm5hbGx5IOKAlCB0aGUgc2Vjb25kIGFyZ1xuXHQvLyAoX3N0YXJ0T2YpIGNvbnRyb2xzIHN0YXJ0LXZzLWVuZCBiZWhhdmlvci4gV2UgbXVzdCBmb3J3YXJkIGl0LlxuXHRwcm90by5zdGFydE9mID0gZnVuY3Rpb24gKHVuaXQ6IERheWpzT3BVbml0VHlwZSwgX3N0YXJ0T2Y/OiBib29sZWFuKSB7XG5cdFx0Y29uc3QgcmVzdWx0ID0gb3JpZ2luYWxTdGFydE9mLmNhbGwodGhpcywgdW5pdCwgX3N0YXJ0T2YpXG5cdFx0cmV0dXJuIHJlc3RvcmVUaW1lem9uZSh0aGlzLCByZXN1bHQpXG5cdH1cblxuXHQvLyBlbmRPZiBkZWxlZ2F0ZXMgdG8gc3RhcnRPZih1bml0LCBmYWxzZSksIHNvIHRoZSBwYXRjaGVkIHN0YXJ0T2YgaGFuZGxlcyBpdFxuXHRwcm90by5lbmRPZiA9IG9yaWdpbmFsRW5kT2Zcbn1cblxuLy8gRXh0ZW5kIGRheWpzIHdpdGggcGx1Z2luc1xuZGF5anMuZXh0ZW5kKHdlZWtkYXkpXG5kYXlqcy5leHRlbmQod2Vla09mWWVhcilcbmRheWpzLmV4dGVuZChpc1NhbWVPckFmdGVyKVxuZGF5anMuZXh0ZW5kKGlzU2FtZU9yQmVmb3JlKVxuZGF5anMuZXh0ZW5kKGlzQmV0d2VlbilcbmRheWpzLmV4dGVuZChtaW5NYXgpXG5kYXlqcy5leHRlbmQodGltZXpvbmUpXG5kYXlqcy5leHRlbmQodXRjKVxuZGF5anMuZXh0ZW5kKGxvY2FsZURhdGEpXG5kYXlqcy5leHRlbmQobG9jYWxpemVkRm9ybWF0KVxuZGF5anMuZXh0ZW5kKGZpeFRpbWV6b25lT2Zmc2V0KVxuXG4vLyBDdXN0b20gZGF5anMgY29uc3RydWN0b3IgdGhhdCBhdXRvbWF0aWNhbGx5IHVzZXMgLnR6KCkgZm9yIGFsbCBpbnN0YW5jZXMuXG4vLyBUaGlzIGVuc3VyZXMgdGhhdCBkYXlqcygpIGNhbGxzIHRocm91Z2hvdXQgdGhlIGNvZGViYXNlIGhvbm9yIHRoZSBkZWZhdWx0XG4vLyB0aW1lem9uZSBzZXQgdmlhIGRheWpzLnR6LnNldERlZmF1bHQoKS5cbmNvbnN0IHRpbWV6b25lQXdhcmVEYXlqcyA9ICguLi5hcmdzOiB1bmtub3duW10pID0+IHtcblx0cmV0dXJuIChkYXlqcyBhcyB1bmtub3duIGFzIHsgdHo6ICguLi5hOiB1bmtub3duW10pID0+IGRheWpzLkRheWpzIH0pLnR6KFxuXHRcdC4uLmFyZ3Ncblx0KVxufVxuXG4vLyBBdHRhY2ggYWxsIHN0YXRpYyBtZXRob2RzIGFuZCBwcm9wZXJ0aWVzIGZyb20gdGhlIG9yaWdpbmFsIGRheWpzIHRvIG91ciB3cmFwcGVyLlxuLy8gVGhpcyBhbGxvd3MgdGhlIHdyYXBwZXIgdG8gYmUgdXNlZCBhcyBhIGRyb3AtaW4gcmVwbGFjZW1lbnQuXG5PYmplY3QuYXNzaWduKHRpbWV6b25lQXdhcmVEYXlqcywgZGF5anMpXG5cbi8vIEV4cG9ydCB0aGUgRGF5anMgdHlwZSBzZXBhcmF0ZWx5IGZvciB1c2UgYXMgYSB0eXBlIGluIG90aGVyIGZpbGVzLlxuLy8gRmlsZXMgc2hvdWxkIHVzZSAnaW1wb3J0IGRheWpzLCB7IHR5cGUgRGF5anMgfSBmcm9tIFwiQC9saWIvY29uZmlncy9kYXlqcy1jb25maWdcIidcbmV4cG9ydCB0eXBlIHsgRGF5anMsIE1hbmlwdWxhdGVUeXBlLCBPcFVuaXRUeXBlIH0gZnJvbSAnZGF5anMnXG5leHBvcnQgZGVmYXVsdCB0aW1lem9uZUF3YXJlRGF5anMgYXMgdHlwZW9mIGRheWpzXG4iLAogICAgImltcG9ydCB0eXBlIHsgV2Vla0RheXMgfSBmcm9tICdAL2NvbXBvbmVudHMnXG5cbmV4cG9ydCBjb25zdCBHQVBfQkVUV0VFTl9FTEVNRU5UUyA9IDEgLy8gcHggKGdhcC0xKVxuZXhwb3J0IGNvbnN0IERBWV9OVU1CRVJfSEVJR0hUID0gMjQgLy8gcHggKGgtNilcbmV4cG9ydCBjb25zdCBFVkVOVF9CQVJfSEVJR0hUID0gMjQgLy8gcHggKGgtWzI0cHhdKVxuZXhwb3J0IGNvbnN0IERBWV9NQVhfRVZFTlRTX0RFRkFVTFQgPSA0IC8vIERlZmF1bHQgbWF4IGV2ZW50cyBwZXIgZGF5XG5leHBvcnQgY29uc3QgRElTQUJMRURfQ0VMTF9DTEFTU05BTUUgPVxuXHQnYmctc2Vjb25kYXJ5IHRleHQtbXV0ZWQtZm9yZWdyb3VuZCBwb2ludGVyLWV2ZW50cy1ub25lJ1xuXG5leHBvcnQgY29uc3QgV0VFS19EQVlTX05VTUJFUl9NQVA6IFJlY29yZDxXZWVrRGF5cywgbnVtYmVyPiA9IHtcblx0c3VuZGF5OiAwLFxuXHRtb25kYXk6IDEsXG5cdHR1ZXNkYXk6IDIsXG5cdHdlZG5lc2RheTogMyxcblx0dGh1cnNkYXk6IDQsXG5cdGZyaWRheTogNSxcblx0c2F0dXJkYXk6IDYsXG59XG5cbmV4cG9ydCBjb25zdCBEQVlfTlVNQkVSX1RPX1dFRUtfREFZUzogUmVjb3JkPG51bWJlciwgV2Vla0RheXM+ID0ge1xuXHQwOiAnc3VuZGF5Jyxcblx0MTogJ21vbmRheScsXG5cdDI6ICd0dWVzZGF5Jyxcblx0MzogJ3dlZG5lc2RheScsXG5cdDQ6ICd0aHVyc2RheScsXG5cdDU6ICdmcmlkYXknLFxuXHQ2OiAnc2F0dXJkYXknLFxufVxuIiwKICAgICJpbXBvcnQgdHlwZSB7XG5cdERyYWdDYW5jZWxFdmVudCxcblx0RHJhZ0VuZEV2ZW50LFxuXHREcmFnU3RhcnRFdmVudCxcbn0gZnJvbSAnQGRuZC1raXQvY29yZSdcbmltcG9ydCB7XG5cdERuZENvbnRleHQsXG5cdE1vdXNlU2Vuc29yLFxuXHRwb2ludGVyV2l0aGluLFxuXHRUb3VjaFNlbnNvcixcblx0dXNlU2Vuc29yLFxuXHR1c2VTZW5zb3JzLFxufSBmcm9tICdAZG5kLWtpdC9jb3JlJ1xuaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgeyBSZWN1cnJlbmNlRWRpdERpYWxvZyB9IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS9jb21wb25lbnRzL3JlY3VycmVuY2UtZWRpdC1kaWFsb2cnXG5pbXBvcnQgdHlwZSB7IFJlY3VycmVuY2VFZGl0U2NvcGUgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvdHlwZXMnXG5pbXBvcnQgeyBpc1JlY3VycmluZ0V2ZW50IH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL3V0aWxzL3JlY3VycmVuY2UtaGFuZGxlcidcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB7IGdldFVwZGF0ZWRFdmVudCB9IGZyb20gJy4vZG5kLXV0aWxzJ1xuaW1wb3J0IHsgRXZlbnREcmFnT3ZlcmxheSB9IGZyb20gJy4vZXZlbnQtZHJhZy1vdmVybGF5J1xuXG5pbnRlcmZhY2UgQ2FsZW5kYXJEbmRDb250ZXh0UHJvcHMge1xuXHRjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlXG59XG5cbmNvbnN0IENMT1NFRF9ESUFMT0cgPSB7XG5cdGlzT3BlbjogZmFsc2UsXG5cdGV2ZW50OiBudWxsLFxuXHR1cGRhdGVzOiBudWxsLFxufSBhcyBjb25zdFxuXG5leHBvcnQgZnVuY3Rpb24gQ2FsZW5kYXJEbmRDb250ZXh0KHsgY2hpbGRyZW4gfTogQ2FsZW5kYXJEbmRDb250ZXh0UHJvcHMpIHtcblx0Y29uc3QgYWN0aXZlRXZlbnRSZWYgPSB1c2VSZWY8Q2FsZW5kYXJFdmVudD4obnVsbClcblx0Y29uc3QgZHJhZ092ZXJsYXlSZWYgPSB1c2VSZWY8e1xuXHRcdHNldEFjdGl2ZUV2ZW50OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQgfCBudWxsKSA9PiB2b2lkXG5cdH0+KG51bGwpXG5cblx0Y29uc3QgeyB1cGRhdGVFdmVudCwgdXBkYXRlUmVjdXJyaW5nRXZlbnQsIGRpc2FibGVEcmFnQW5kRHJvcCB9ID1cblx0XHR1c2VTbWFydENhbGVuZGFyQ29udGV4dCgoY29udGV4dCkgPT4gKHtcblx0XHRcdHVwZGF0ZUV2ZW50OiBjb250ZXh0LnVwZGF0ZUV2ZW50LFxuXHRcdFx0dXBkYXRlUmVjdXJyaW5nRXZlbnQ6IGNvbnRleHQudXBkYXRlUmVjdXJyaW5nRXZlbnQsXG5cdFx0XHRkaXNhYmxlRHJhZ0FuZERyb3A6IGNvbnRleHQuZGlzYWJsZURyYWdBbmREcm9wLFxuXHRcdH0pKVxuXG5cdC8vIFN0YXRlIGZvciByZWN1cnJpbmcgZXZlbnQgZGlhbG9nXG5cdGNvbnN0IFtyZWN1cnJpbmdEaWFsb2csIHNldFJlY3VycmluZ0RpYWxvZ10gPSB1c2VTdGF0ZTx7XG5cdFx0aXNPcGVuOiBib29sZWFuXG5cdFx0ZXZlbnQ6IENhbGVuZGFyRXZlbnQgfCBudWxsXG5cdFx0dXBkYXRlczogUGFydGlhbDxDYWxlbmRhckV2ZW50PiB8IG51bGxcblx0fT4oe1xuXHRcdGlzT3BlbjogZmFsc2UsXG5cdFx0ZXZlbnQ6IG51bGwsXG5cdFx0dXBkYXRlczogbnVsbCxcblx0fSlcblxuXHQvLyBDb25maWd1cmUgc2Vuc29ycyB3aXRoIHJlZHVjZWQgYWN0aXZhdGlvbiBjb25zdHJhaW50cyBmb3IgZWFzaWVyIGRyYWdnaW5nXG5cdGNvbnN0IG1vdXNlU2Vuc29yID0gdXNlU2Vuc29yKE1vdXNlU2Vuc29yLCB7XG5cdFx0Ly8gUmVxdWlyZSBtaW5pbWFsIG1vdmVtZW50IGJlZm9yZSBhY3RpdmF0aW5nXG5cdFx0YWN0aXZhdGlvbkNvbnN0cmFpbnQ6IHtcblx0XHRcdGRpc3RhbmNlOiAyLFxuXHRcdH0sXG5cdH0pXG5cblx0Y29uc3QgdG91Y2hTZW5zb3IgPSB1c2VTZW5zb3IoVG91Y2hTZW5zb3IsIHtcblx0XHQvLyBSZWR1Y2UgZGVsYXkgZm9yIHRvdWNoIGRldmljZXNcblx0XHRhY3RpdmF0aW9uQ29uc3RyYWludDoge1xuXHRcdFx0ZGVsYXk6IDEwMCxcblx0XHRcdHRvbGVyYW5jZTogNSxcblx0XHR9LFxuXHR9KVxuXG5cdGNvbnN0IHNlbnNvcnMgPSB1c2VTZW5zb3JzKG1vdXNlU2Vuc29yLCB0b3VjaFNlbnNvcilcblxuXHQvLyBIZWxwZXIgZnVuY3Rpb24gdG8gcGVyZm9ybSB0aGUgYWN0dWFsIGV2ZW50IHVwZGF0ZVxuXHRjb25zdCBwZXJmb3JtRXZlbnRVcGRhdGUgPSAoXG5cdFx0ZXZlbnQ6IENhbGVuZGFyRXZlbnQsXG5cdFx0dXBkYXRlczogUGFydGlhbDxDYWxlbmRhckV2ZW50PlxuXHQpID0+IHtcblx0XHRpZiAoIWV2ZW50Py5pZCB8fCAhdXBkYXRlcyB8fCBPYmplY3Qua2V5cyh1cGRhdGVzKS5sZW5ndGggPT09IDApIHtcblx0XHRcdHJldHVyblxuXHRcdH1cblxuXHRcdGlmIChpc1JlY3VycmluZ0V2ZW50KGV2ZW50KSkge1xuXHRcdFx0Ly8gUmVjdXJyaW5nIGV2ZW50czogcHJvbXB0IHRoZSB1c2VyIHZpYSBkaWFsb2cgYmVmb3JlIGFwcGx5aW5nLlxuXHRcdFx0c2V0UmVjdXJyaW5nRGlhbG9nKHsgaXNPcGVuOiB0cnVlLCBldmVudCwgdXBkYXRlcyB9KVxuXHRcdH0gZWxzZSB7XG5cdFx0XHR1cGRhdGVFdmVudChldmVudC5pZCwgdXBkYXRlcylcblx0XHR9XG5cdH1cblxuXHQvLyBIYW5kbGUgcmVjdXJyaW5nIGV2ZW50IGRpYWxvZyBjb25maXJtYXRpb25cblx0Y29uc3QgaGFuZGxlUmVjdXJyaW5nRXZlbnRDb25maXJtID0gKHNjb3BlOiBSZWN1cnJlbmNlRWRpdFNjb3BlKSA9PiB7XG5cdFx0aWYgKCFyZWN1cnJpbmdEaWFsb2cuZXZlbnQgfHwgIXJlY3VycmluZ0RpYWxvZy51cGRhdGVzKSB7XG5cdFx0XHRzZXRSZWN1cnJpbmdEaWFsb2coQ0xPU0VEX0RJQUxPRylcblx0XHRcdHJldHVyblxuXHRcdH1cblxuXHRcdHRyeSB7XG5cdFx0XHR1cGRhdGVSZWN1cnJpbmdFdmVudChyZWN1cnJpbmdEaWFsb2cuZXZlbnQsIHJlY3VycmluZ0RpYWxvZy51cGRhdGVzLCB7XG5cdFx0XHRcdHNjb3BlLFxuXHRcdFx0XHRldmVudERhdGU6IHJlY3VycmluZ0RpYWxvZy5ldmVudC5zdGFydCxcblx0XHRcdH0pXG5cdFx0fSBjYXRjaCB7XG5cdFx0XHQvLyBTaWxlbnRseSBoYW5kbGUgZXJyb3IgYW5kIHJlc2V0IGRpYWxvZyBzdGF0ZVxuXHRcdH0gZmluYWxseSB7XG5cdFx0XHRzZXRSZWN1cnJpbmdEaWFsb2coQ0xPU0VEX0RJQUxPRylcblx0XHR9XG5cdH1cblxuXHQvLyBIYW5kbGUgcmVjdXJyaW5nIGV2ZW50IGRpYWxvZyBjbG9zZVxuXHRjb25zdCBoYW5kbGVSZWN1cnJpbmdFdmVudENsb3NlID0gKCkgPT4ge1xuXHRcdHNldFJlY3VycmluZ0RpYWxvZyhDTE9TRURfRElBTE9HKVxuXHR9XG5cblx0Y29uc3QgaGFuZGxlRHJhZ1N0YXJ0ID0gKGV2ZW50OiBEcmFnU3RhcnRFdmVudCkgPT4ge1xuXHRcdGNvbnN0IHsgYWN0aXZlIH0gPSBldmVudFxuXG5cdFx0Ly8gU2V0IHRoZSBhY3RpdmUgZXZlbnQgYmFzZWQgb24gdGhlIGV2ZW50IGRhdGFcblx0XHRpZiAoYWN0aXZlLmRhdGEuY3VycmVudD8udHlwZSA9PT0gJ2NhbGVuZGFyLWV2ZW50Jykge1xuXHRcdFx0ZHJhZ092ZXJsYXlSZWYuY3VycmVudD8uc2V0QWN0aXZlRXZlbnQoYWN0aXZlLmRhdGEuY3VycmVudC5ldmVudClcblx0XHRcdGFjdGl2ZUV2ZW50UmVmLmN1cnJlbnQgPSBhY3RpdmUuZGF0YS5jdXJyZW50LmV2ZW50XG5cdFx0fVxuXHR9XG5cblx0Y29uc3QgaGFuZGxlRHJhZ0VuZCA9IChldmVudDogRHJhZ0VuZEV2ZW50KSA9PiB7XG5cdFx0Y29uc3QgdXBkYXRlZEV2ZW50ID0gZ2V0VXBkYXRlZEV2ZW50KGV2ZW50LCBhY3RpdmVFdmVudFJlZi5jdXJyZW50KVxuXHRcdGlmICh1cGRhdGVkRXZlbnQpIHtcblx0XHRcdGNvbnN0IHsgYWN0aXZlRXZlbnQsIHVwZGF0ZXMgfSA9IHVwZGF0ZWRFdmVudFxuXHRcdFx0cGVyZm9ybUV2ZW50VXBkYXRlKGFjdGl2ZUV2ZW50LCB1cGRhdGVzKVxuXHRcdH1cblxuXHRcdC8vIENsZWFyIHRoZSBhY3RpdmUgZXZlbnQgcmVmZXJlbmNlXG5cdFx0YWN0aXZlRXZlbnRSZWYuY3VycmVudCA9IG51bGxcblx0XHRkcmFnT3ZlcmxheVJlZi5jdXJyZW50Py5zZXRBY3RpdmVFdmVudChudWxsKVxuXHR9XG5cblx0Y29uc3QgaGFuZGxlRHJhZ0NhbmNlbCA9IChfZXZlbnQ6IERyYWdDYW5jZWxFdmVudCkgPT4ge1xuXHRcdGFjdGl2ZUV2ZW50UmVmLmN1cnJlbnQgPSBudWxsXG5cdH1cblxuXHQvLyBJZiBkcmFnIGFuZCBkcm9wIGlzIGRpc2FibGVkLCBqdXN0IHJldHVybiBjaGlsZHJlbiB3aXRob3V0IERuZENvbnRleHRcblx0aWYgKGRpc2FibGVEcmFnQW5kRHJvcCkge1xuXHRcdHJldHVybiBjaGlsZHJlbiBhcyBSZWFjdC5SZWFjdEVsZW1lbnRcblx0fVxuXG5cdHJldHVybiAoXG5cdFx0PD5cblx0XHRcdDxEbmRDb250ZXh0XG5cdFx0XHRcdGNvbGxpc2lvbkRldGVjdGlvbj17cG9pbnRlcldpdGhpbn1cblx0XHRcdFx0b25EcmFnQ2FuY2VsPXtoYW5kbGVEcmFnQ2FuY2VsfVxuXHRcdFx0XHRvbkRyYWdFbmQ9e2hhbmRsZURyYWdFbmR9XG5cdFx0XHRcdG9uRHJhZ1N0YXJ0PXtoYW5kbGVEcmFnU3RhcnR9XG5cdFx0XHRcdHNlbnNvcnM9e3NlbnNvcnN9XG5cdFx0XHQ+XG5cdFx0XHRcdHtjaGlsZHJlbn1cblx0XHRcdFx0PEV2ZW50RHJhZ092ZXJsYXkgcmVmPXtkcmFnT3ZlcmxheVJlZn0gLz5cblx0XHRcdDwvRG5kQ29udGV4dD5cblxuXHRcdFx0ey8qIFJlY3VycmluZyBldmVudCBlZGl0IGRpYWxvZyAqL31cblx0XHRcdDxSZWN1cnJlbmNlRWRpdERpYWxvZ1xuXHRcdFx0XHRldmVudFRpdGxlPXtyZWN1cnJpbmdEaWFsb2cuZXZlbnQ/LnRpdGxlIHx8ICcnfVxuXHRcdFx0XHRpc09wZW49e3JlY3VycmluZ0RpYWxvZy5pc09wZW59XG5cdFx0XHRcdG9uQ2xvc2U9e2hhbmRsZVJlY3VycmluZ0V2ZW50Q2xvc2V9XG5cdFx0XHRcdG9uQ29uZmlybT17aGFuZGxlUmVjdXJyaW5nRXZlbnRDb25maXJtfVxuXHRcdFx0XHRvcGVyYXRpb25UeXBlPVwiZWRpdFwiXG5cdFx0XHQvPlxuXHRcdDwvPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB7IFNsb3QgfSBmcm9tICdAcmFkaXgtdWkvcmVhY3Qtc2xvdCdcbmltcG9ydCB0eXBlIHsgVmFyaWFudFByb3BzIH0gZnJvbSAnY2xhc3MtdmFyaWFuY2UtYXV0aG9yaXR5J1xuaW1wb3J0IHsgY3ZhIH0gZnJvbSAnY2xhc3MtdmFyaWFuY2UtYXV0aG9yaXR5J1xuaW1wb3J0IHR5cGUgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuY29uc3QgYnV0dG9uVmFyaWFudHMgPSBjdmEoXG5cdFwiaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0yIHdoaXRlc3BhY2Utbm93cmFwIHJvdW5kZWQtbWQgdGV4dC1zbSBmb250LW1lZGl1bSB0cmFuc2l0aW9uLWFsbCBkaXNhYmxlZDpwb2ludGVyLWV2ZW50cy1ub25lIGRpc2FibGVkOm9wYWNpdHktNTAgWyZfc3ZnXTpwb2ludGVyLWV2ZW50cy1ub25lIFsmX3N2Zzpub3QoW2NsYXNzKj0nc2l6ZS0nXSldOnNpemUtNCBzaHJpbmstMCBbJl9zdmddOnNocmluay0wIG91dGxpbmUtbm9uZSBmb2N1cy12aXNpYmxlOmJvcmRlci1yaW5nIGZvY3VzLXZpc2libGU6cmluZy1yaW5nLzUwIGZvY3VzLXZpc2libGU6cmluZy1bM3B4XSBhcmlhLWludmFsaWQ6cmluZy1kZXN0cnVjdGl2ZS8yMCBkYXJrOmFyaWEtaW52YWxpZDpyaW5nLWRlc3RydWN0aXZlLzQwIGFyaWEtaW52YWxpZDpib3JkZXItZGVzdHJ1Y3RpdmVcIixcblx0e1xuXHRcdHZhcmlhbnRzOiB7XG5cdFx0XHR2YXJpYW50OiB7XG5cdFx0XHRcdGRlZmF1bHQ6ICdiZy1wcmltYXJ5IHRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIGhvdmVyOmJnLXByaW1hcnkvOTAnLFxuXHRcdFx0XHRkZXN0cnVjdGl2ZTpcblx0XHRcdFx0XHQnYmctZGVzdHJ1Y3RpdmUgdGV4dC13aGl0ZSBob3ZlcjpiZy1kZXN0cnVjdGl2ZS85MCBmb2N1cy12aXNpYmxlOnJpbmctZGVzdHJ1Y3RpdmUvMjAgZGFyazpmb2N1cy12aXNpYmxlOnJpbmctZGVzdHJ1Y3RpdmUvNDAgZGFyazpiZy1kZXN0cnVjdGl2ZS82MCcsXG5cdFx0XHRcdG91dGxpbmU6XG5cdFx0XHRcdFx0J2JvcmRlciBiZy1iYWNrZ3JvdW5kIHNoYWRvdy14cyBob3ZlcjpiZy1hY2NlbnQgaG92ZXI6dGV4dC1hY2NlbnQtZm9yZWdyb3VuZCBkYXJrOmJnLWlucHV0LzMwIGRhcms6Ym9yZGVyLWlucHV0IGRhcms6aG92ZXI6YmctaW5wdXQvNTAnLFxuXHRcdFx0XHRzZWNvbmRhcnk6XG5cdFx0XHRcdFx0J2JnLXNlY29uZGFyeSB0ZXh0LXNlY29uZGFyeS1mb3JlZ3JvdW5kIGhvdmVyOmJnLXNlY29uZGFyeS84MCcsXG5cdFx0XHRcdGdob3N0OlxuXHRcdFx0XHRcdCdob3ZlcjpiZy1hY2NlbnQgaG92ZXI6dGV4dC1hY2NlbnQtZm9yZWdyb3VuZCBkYXJrOmhvdmVyOmJnLWFjY2VudC81MCcsXG5cdFx0XHRcdGxpbms6ICd0ZXh0LXByaW1hcnkgdW5kZXJsaW5lLW9mZnNldC00IGhvdmVyOnVuZGVybGluZScsXG5cdFx0XHR9LFxuXHRcdFx0c2l6ZToge1xuXHRcdFx0XHRkZWZhdWx0OiAnaC05IHB4LTQgcHktMiBoYXMtWz5zdmddOnB4LTMnLFxuXHRcdFx0XHRzbTogJ2gtOCByb3VuZGVkLW1kIGdhcC0xLjUgcHgtMyBoYXMtWz5zdmddOnB4LTIuNScsXG5cdFx0XHRcdGxnOiAnaC0xMCByb3VuZGVkLW1kIHB4LTYgaGFzLVs+c3ZnXTpweC00Jyxcblx0XHRcdFx0aWNvbjogJ3NpemUtOScsXG5cdFx0XHRcdCdpY29uLXNtJzogJ3NpemUtOCcsXG5cdFx0XHRcdCdpY29uLWxnJzogJ3NpemUtMTAnLFxuXHRcdFx0fSxcblx0XHR9LFxuXHRcdGRlZmF1bHRWYXJpYW50czoge1xuXHRcdFx0dmFyaWFudDogJ2RlZmF1bHQnLFxuXHRcdFx0c2l6ZTogJ2RlZmF1bHQnLFxuXHRcdH0sXG5cdH1cbilcblxuZnVuY3Rpb24gQnV0dG9uKHtcblx0Y2xhc3NOYW1lLFxuXHR2YXJpYW50LFxuXHRzaXplLFxuXHRhc0NoaWxkID0gZmFsc2UsXG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczwnYnV0dG9uJz4gJlxuXHRWYXJpYW50UHJvcHM8dHlwZW9mIGJ1dHRvblZhcmlhbnRzPiAmIHtcblx0XHRhc0NoaWxkPzogYm9vbGVhblxuXHR9KSB7XG5cdGNvbnN0IENvbXAgPSBhc0NoaWxkID8gU2xvdCA6ICdidXR0b24nXG5cblx0cmV0dXJuIChcblx0XHQ8Q29tcFxuXHRcdFx0Y2xhc3NOYW1lPXtjbihidXR0b25WYXJpYW50cyh7IHZhcmlhbnQsIHNpemUsIGNsYXNzTmFtZSB9KSl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJidXR0b25cIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdC8+XG5cdClcbn1cblxuZXhwb3J0IHsgQnV0dG9uLCBidXR0b25WYXJpYW50cyB9XG4iLAogICAgImltcG9ydCAqIGFzIERpYWxvZ1ByaW1pdGl2ZSBmcm9tICdAcmFkaXgtdWkvcmVhY3QtZGlhbG9nJ1xuaW1wb3J0IHsgWEljb24gfSBmcm9tICdsdWNpZGUtcmVhY3QnXG5pbXBvcnQgdHlwZSAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5mdW5jdGlvbiBEaWFsb2coe1xuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIERpYWxvZ1ByaW1pdGl2ZS5Sb290Pikge1xuXHRyZXR1cm4gPERpYWxvZ1ByaW1pdGl2ZS5Sb290IGRhdGEtc2xvdD1cImRpYWxvZ1wiIHsuLi5wcm9wc30gLz5cbn1cblxuZnVuY3Rpb24gRGlhbG9nVHJpZ2dlcih7XG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgRGlhbG9nUHJpbWl0aXZlLlRyaWdnZXI+KSB7XG5cdHJldHVybiA8RGlhbG9nUHJpbWl0aXZlLlRyaWdnZXIgZGF0YS1zbG90PVwiZGlhbG9nLXRyaWdnZXJcIiB7Li4ucHJvcHN9IC8+XG59XG5cbmZ1bmN0aW9uIERpYWxvZ1BvcnRhbCh7XG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgRGlhbG9nUHJpbWl0aXZlLlBvcnRhbD4pIHtcblx0cmV0dXJuIDxEaWFsb2dQcmltaXRpdmUuUG9ydGFsIGRhdGEtc2xvdD1cImRpYWxvZy1wb3J0YWxcIiB7Li4ucHJvcHN9IC8+XG59XG5cbmZ1bmN0aW9uIERpYWxvZ0Nsb3NlKHtcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBEaWFsb2dQcmltaXRpdmUuQ2xvc2U+KSB7XG5cdHJldHVybiA8RGlhbG9nUHJpbWl0aXZlLkNsb3NlIGRhdGEtc2xvdD1cImRpYWxvZy1jbG9zZVwiIHsuLi5wcm9wc30gLz5cbn1cblxuZnVuY3Rpb24gRGlhbG9nT3ZlcmxheSh7XG5cdGNsYXNzTmFtZSxcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBEaWFsb2dQcmltaXRpdmUuT3ZlcmxheT4pIHtcblx0cmV0dXJuIChcblx0XHQ8RGlhbG9nUHJpbWl0aXZlLk92ZXJsYXlcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCdkYXRhLVtzdGF0ZT1vcGVuXTphbmltYXRlLWluIGRhdGEtW3N0YXRlPWNsb3NlZF06YW5pbWF0ZS1vdXQgZGF0YS1bc3RhdGU9Y2xvc2VkXTpmYWRlLW91dC0wIGRhdGEtW3N0YXRlPW9wZW5dOmZhZGUtaW4tMCBmaXhlZCBpbnNldC0wIHotNTAgYmctYmxhY2svNTAnLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJkaWFsb2ctb3ZlcmxheVwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0Lz5cblx0KVxufVxuXG5mdW5jdGlvbiBEaWFsb2dDb250ZW50KHtcblx0Y2xhc3NOYW1lLFxuXHRjaGlsZHJlbixcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBEaWFsb2dQcmltaXRpdmUuQ29udGVudD4pIHtcblx0cmV0dXJuIChcblx0XHQ8RGlhbG9nUG9ydGFsIGRhdGEtc2xvdD1cImRpYWxvZy1wb3J0YWxcIj5cblx0XHRcdDxEaWFsb2dPdmVybGF5IC8+XG5cdFx0XHQ8RGlhbG9nUHJpbWl0aXZlLkNvbnRlbnRcblx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHQnYmctYmFja2dyb3VuZCBkYXRhLVtzdGF0ZT1vcGVuXTphbmltYXRlLWluIGRhdGEtW3N0YXRlPWNsb3NlZF06YW5pbWF0ZS1vdXQgZGF0YS1bc3RhdGU9Y2xvc2VkXTpmYWRlLW91dC0wIGRhdGEtW3N0YXRlPW9wZW5dOmZhZGUtaW4tMCBkYXRhLVtzdGF0ZT1jbG9zZWRdOnpvb20tb3V0LTk1IGRhdGEtW3N0YXRlPW9wZW5dOnpvb20taW4tOTUgZml4ZWQgdG9wLVs1MCVdIGxlZnQtWzUwJV0gei01MCBncmlkIHctZnVsbCBtYXgtdy1bY2FsYygxMDAlLTJyZW0pXSB0cmFuc2xhdGUteC1bLTUwJV0gdHJhbnNsYXRlLXktWy01MCVdIGdhcC00IHJvdW5kZWQtbGcgYm9yZGVyIHAtNiBzaGFkb3ctbGcgZHVyYXRpb24tMjAwIHNtOm1heC13LWxnIG1heC1oLVs5MCVdJyxcblx0XHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdFx0KX1cblx0XHRcdFx0ZGF0YS1zbG90PVwiZGlhbG9nLWNvbnRlbnRcIlxuXHRcdFx0XHR7Li4ucHJvcHN9XG5cdFx0XHQ+XG5cdFx0XHRcdHtjaGlsZHJlbn1cblx0XHRcdFx0PERpYWxvZ1ByaW1pdGl2ZS5DbG9zZSBjbGFzc05hbWU9XCJyaW5nLW9mZnNldC1iYWNrZ3JvdW5kIGZvY3VzOnJpbmctcmluZyBkYXRhLVtzdGF0ZT1vcGVuXTpiZy1hY2NlbnQgZGF0YS1bc3RhdGU9b3Blbl06dGV4dC1tdXRlZC1mb3JlZ3JvdW5kIGFic29sdXRlIHRvcC00IHJpZ2h0LTQgcm91bmRlZC14cyBvcGFjaXR5LTcwIHRyYW5zaXRpb24tb3BhY2l0eSBob3ZlcjpvcGFjaXR5LTEwMCBmb2N1czpyaW5nLTIgZm9jdXM6cmluZy1vZmZzZXQtMiBmb2N1czpvdXRsaW5lLWhpZGRlbiBkaXNhYmxlZDpwb2ludGVyLWV2ZW50cy1ub25lIFsmX3N2Z106cG9pbnRlci1ldmVudHMtbm9uZSBbJl9zdmddOnNocmluay0wIFsmX3N2Zzpub3QoW2NsYXNzKj0nc2l6ZS0nXSldOnNpemUtNFwiPlxuXHRcdFx0XHRcdDxYSWNvbiAvPlxuXHRcdFx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cInNyLW9ubHlcIj5DbG9zZTwvc3Bhbj5cblx0XHRcdFx0PC9EaWFsb2dQcmltaXRpdmUuQ2xvc2U+XG5cdFx0XHQ8L0RpYWxvZ1ByaW1pdGl2ZS5Db250ZW50PlxuXHRcdDwvRGlhbG9nUG9ydGFsPlxuXHQpXG59XG5cbmZ1bmN0aW9uIERpYWxvZ0hlYWRlcih7IGNsYXNzTmFtZSwgLi4ucHJvcHMgfTogUmVhY3QuQ29tcG9uZW50UHJvcHM8J2Rpdic+KSB7XG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbignZmxleCBmbGV4LWNvbCBnYXAtMiB0ZXh0LWNlbnRlciBzbTp0ZXh0LWxlZnQnLCBjbGFzc05hbWUpfVxuXHRcdFx0ZGF0YS1zbG90PVwiZGlhbG9nLWhlYWRlclwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0Lz5cblx0KVxufVxuXG5mdW5jdGlvbiBEaWFsb2dGb290ZXIoeyBjbGFzc05hbWUsIC4uLnByb3BzIH06IFJlYWN0LkNvbXBvbmVudFByb3BzPCdkaXYnPikge1xuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCdmbGV4IGZsZXgtY29sLXJldmVyc2UgZ2FwLTIgc206ZmxleC1yb3cgc206anVzdGlmeS1lbmQnLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJkaWFsb2ctZm9vdGVyXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmZ1bmN0aW9uIERpYWxvZ1RpdGxlKHtcblx0Y2xhc3NOYW1lLFxuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIERpYWxvZ1ByaW1pdGl2ZS5UaXRsZT4pIHtcblx0cmV0dXJuIChcblx0XHQ8RGlhbG9nUHJpbWl0aXZlLlRpdGxlXG5cdFx0XHRjbGFzc05hbWU9e2NuKCd0ZXh0LWxnIGxlYWRpbmctbm9uZSBmb250LXNlbWlib2xkJywgY2xhc3NOYW1lKX1cblx0XHRcdGRhdGEtc2xvdD1cImRpYWxvZy10aXRsZVwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0Lz5cblx0KVxufVxuXG5mdW5jdGlvbiBEaWFsb2dEZXNjcmlwdGlvbih7XG5cdGNsYXNzTmFtZSxcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBEaWFsb2dQcmltaXRpdmUuRGVzY3JpcHRpb24+KSB7XG5cdHJldHVybiAoXG5cdFx0PERpYWxvZ1ByaW1pdGl2ZS5EZXNjcmlwdGlvblxuXHRcdFx0Y2xhc3NOYW1lPXtjbigndGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHRleHQtc20nLCBjbGFzc05hbWUpfVxuXHRcdFx0ZGF0YS1zbG90PVwiZGlhbG9nLWRlc2NyaXB0aW9uXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmV4cG9ydCB7XG5cdERpYWxvZyxcblx0RGlhbG9nQ2xvc2UsXG5cdERpYWxvZ0NvbnRlbnQsXG5cdERpYWxvZ0Rlc2NyaXB0aW9uLFxuXHREaWFsb2dGb290ZXIsXG5cdERpYWxvZ0hlYWRlcixcblx0RGlhbG9nT3ZlcmxheSxcblx0RGlhbG9nUG9ydGFsLFxuXHREaWFsb2dUaXRsZSxcblx0RGlhbG9nVHJpZ2dlcixcbn1cbiIsCiAgICAiaW1wb3J0IHsgdXNlQ29udGV4dCB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBCdXNpbmVzc0hvdXJzLCBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHsgQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5pbXBvcnQgeyBSZXNvdXJjZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29udGV4dHMvcmVzb3VyY2UtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB0eXBlIHsgUmVzb3VyY2VDYWxlbmRhckNvbnRleHRUeXBlIH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb250ZXh0cy9yZXNvdXJjZS1jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5pbXBvcnQgdHlwZSB7IFJlc291cmNlIH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci90eXBlcydcbmltcG9ydCB0eXBlIHsgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJWaWV3IH0gZnJvbSAnQC90eXBlcydcblxuLyoqXG4gKiBGdWxsIGludGVybmFsIGNvbnRleHQgdHlwZSB1c2VkIGJ5IGxpYnJhcnkgY29tcG9uZW50cy5cbiAqL1xuZXhwb3J0IHR5cGUgU21hcnRDYWxlbmRhckNvbnRleHRUeXBlID0gUmVzb3VyY2VDYWxlbmRhckNvbnRleHRUeXBlXG5cbi8qKlxuICogUHVibGljbHkgZXhwb3NlZCBjYWxlbmRhciBjb250ZXh0IHByb3BlcnRpZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlSWxhbXlDYWxlbmRhckNvbnRleHRSZXR1cm4ge1xuXHRyZWFkb25seSBjdXJyZW50RGF0ZTogRGF5anNcblx0cmVhZG9ubHkgdmlldzogQ2FsZW5kYXJWaWV3XG5cdHJlYWRvbmx5IGV2ZW50czogQ2FsZW5kYXJFdmVudFtdXG5cdHJlYWRvbmx5IGlzRXZlbnRGb3JtT3BlbjogYm9vbGVhblxuXHRyZWFkb25seSBzZWxlY3RlZEV2ZW50OiBDYWxlbmRhckV2ZW50IHwgbnVsbFxuXHRyZWFkb25seSBzZWxlY3RlZERhdGU6IERheWpzIHwgbnVsbFxuXHRyZWFkb25seSBmaXJzdERheU9mV2VlazogbnVtYmVyXG5cdHJlYWRvbmx5IHJlc291cmNlczogUmVzb3VyY2VbXVxuXHRyZWFkb25seSBzZXRDdXJyZW50RGF0ZTogKGRhdGU6IERheWpzKSA9PiB2b2lkXG5cdHJlYWRvbmx5IHNlbGVjdERhdGU6IChkYXRlOiBEYXlqcykgPT4gdm9pZFxuXHRyZWFkb25seSBzZXRWaWV3OiAodmlldzogQ2FsZW5kYXJWaWV3KSA9PiB2b2lkXG5cdHJlYWRvbmx5IG5leHRQZXJpb2Q6ICgpID0+IHZvaWRcblx0cmVhZG9ubHkgcHJldlBlcmlvZDogKCkgPT4gdm9pZFxuXHRyZWFkb25seSB0b2RheTogKCkgPT4gdm9pZFxuXHRyZWFkb25seSBhZGRFdmVudDogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG5cdHJlYWRvbmx5IHVwZGF0ZUV2ZW50OiAoXG5cdFx0ZXZlbnRJZDogc3RyaW5nIHwgbnVtYmVyLFxuXHRcdGV2ZW50OiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+XG5cdCkgPT4gdm9pZFxuXHRyZWFkb25seSBkZWxldGVFdmVudDogKGV2ZW50SWQ6IHN0cmluZyB8IG51bWJlcikgPT4gdm9pZFxuXHRyZWFkb25seSBvcGVuRXZlbnRGb3JtOiAoZXZlbnREYXRhPzogUGFydGlhbDxDYWxlbmRhckV2ZW50PikgPT4gdm9pZFxuXHRyZWFkb25seSBjbG9zZUV2ZW50Rm9ybTogKCkgPT4gdm9pZFxuXHRyZWFkb25seSBnZXRFdmVudHNGb3JSZXNvdXJjZTogKFxuXHRcdHJlc291cmNlSWQ6IHN0cmluZyB8IG51bWJlclxuXHQpID0+IENhbGVuZGFyRXZlbnRbXVxuXHRyZWFkb25seSBidXNpbmVzc0hvdXJzPzogQnVzaW5lc3NIb3VycyB8IEJ1c2luZXNzSG91cnNbXVxufVxuXG4vKipcbiAqIEludGVybmFsIGhvb2sgdGhhdCByZXR1cm5zIHRoZSBmdWxsIGNvbnRleHQuXG4gKiBVc2VkIGJ5IGludGVybmFsIHZpZXdzLCBoZWFkZXJzLCBhbmQgZ3JpZCBjb21wb25lbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKTogU21hcnRDYWxlbmRhckNvbnRleHRUeXBlXG5leHBvcnQgZnVuY3Rpb24gdXNlU21hcnRDYWxlbmRhckNvbnRleHQ8VD4oXG5cdHNlbGVjdG9yOiAoY29udGV4dDogU21hcnRDYWxlbmRhckNvbnRleHRUeXBlKSA9PiBUXG4pOiBUXG5leHBvcnQgZnVuY3Rpb24gdXNlU21hcnRDYWxlbmRhckNvbnRleHQ8VD4oXG5cdHNlbGVjdG9yPzogKGNvbnRleHQ6IFNtYXJ0Q2FsZW5kYXJDb250ZXh0VHlwZSkgPT4gVFxuKTogVCB8IFNtYXJ0Q2FsZW5kYXJDb250ZXh0VHlwZSB7XG5cdGNvbnN0IHJlc291cmNlQ29udGV4dCA9IHVzZUNvbnRleHQoUmVzb3VyY2VDYWxlbmRhckNvbnRleHQpXG5cdGNvbnN0IHJlZ3VsYXJDb250ZXh0ID0gdXNlQ29udGV4dChDYWxlbmRhckNvbnRleHQpXG5cblx0Ly8gSW4gcmVndWxhciBjYWxlbmRhcnMsIHJlc291cmNlLXNwZWNpZmljIGZpZWxkcyB3aWxsIGJlIHVuZGVmaW5lZC5cblx0Y29uc3QgY29udGV4dCA9IChyZXNvdXJjZUNvbnRleHQgfHxcblx0XHRyZWd1bGFyQ29udGV4dCkgYXMgU21hcnRDYWxlbmRhckNvbnRleHRUeXBlXG5cblx0aWYgKCFjb250ZXh0KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0J3VzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IG11c3QgYmUgdXNlZCB3aXRoaW4gYSBDYWxlbmRhclByb3ZpZGVyIG9yIFJlc291cmNlQ2FsZW5kYXJQcm92aWRlcidcblx0XHQpXG5cdH1cblxuXHRyZXR1cm4gc2VsZWN0b3IgPyBzZWxlY3Rvcihjb250ZXh0KSA6IGNvbnRleHRcbn1cblxuLyoqXG4gKiBQdWJsaWMgaG9vayBleHBvcnRlZCBmb3IgbGlicmFyeSB1c2Vycy5cbiAqIFJldHVybnMgYSBsaW1pdGVkIHNldCBvZiBjb21tb25seSB1c2VkIHByb3BlcnRpZXMgYW5kIG1ldGhvZHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VJbGFteUNhbGVuZGFyQ29udGV4dCgpOiBVc2VJbGFteUNhbGVuZGFyQ29udGV4dFJldHVybiB7XG5cdGNvbnN0IGNvbnRleHQgPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cblx0cmV0dXJuIHtcblx0XHRjdXJyZW50RGF0ZTogY29udGV4dC5jdXJyZW50RGF0ZSxcblx0XHR2aWV3OiBjb250ZXh0LnZpZXcsXG5cdFx0ZXZlbnRzOiBjb250ZXh0LmV2ZW50cyxcblx0XHRpc0V2ZW50Rm9ybU9wZW46IGNvbnRleHQuaXNFdmVudEZvcm1PcGVuLFxuXHRcdHNlbGVjdGVkRXZlbnQ6IGNvbnRleHQuc2VsZWN0ZWRFdmVudCxcblx0XHRzZWxlY3RlZERhdGU6IGNvbnRleHQuc2VsZWN0ZWREYXRlLFxuXHRcdGZpcnN0RGF5T2ZXZWVrOiBjb250ZXh0LmZpcnN0RGF5T2ZXZWVrLFxuXHRcdHJlc291cmNlczogY29udGV4dC5yZXNvdXJjZXMgfHwgW10sXG5cdFx0c2V0Q3VycmVudERhdGU6IGNvbnRleHQuc2V0Q3VycmVudERhdGUsXG5cdFx0c2VsZWN0RGF0ZTogY29udGV4dC5zZWxlY3REYXRlLFxuXHRcdHNldFZpZXc6IGNvbnRleHQuc2V0Vmlldyxcblx0XHRuZXh0UGVyaW9kOiBjb250ZXh0Lm5leHRQZXJpb2QsXG5cdFx0cHJldlBlcmlvZDogY29udGV4dC5wcmV2UGVyaW9kLFxuXHRcdHRvZGF5OiBjb250ZXh0LnRvZGF5LFxuXHRcdGFkZEV2ZW50OiBjb250ZXh0LmFkZEV2ZW50LFxuXHRcdHVwZGF0ZUV2ZW50OiBjb250ZXh0LnVwZGF0ZUV2ZW50LFxuXHRcdGRlbGV0ZUV2ZW50OiBjb250ZXh0LmRlbGV0ZUV2ZW50LFxuXHRcdG9wZW5FdmVudEZvcm06IGNvbnRleHQub3BlbkV2ZW50Rm9ybSxcblx0XHRjbG9zZUV2ZW50Rm9ybTogY29udGV4dC5jbG9zZUV2ZW50Rm9ybSxcblx0XHRnZXRFdmVudHNGb3JSZXNvdXJjZTogY29udGV4dC5nZXRFdmVudHNGb3JSZXNvdXJjZSxcblx0XHRidXNpbmVzc0hvdXJzOiBjb250ZXh0LmJ1c2luZXNzSG91cnMsXG5cdH1cbn1cbiIsCiAgICAiaW1wb3J0IHsgY3JlYXRlQ29udGV4dCB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBFdmVudEZvcm1Qcm9wcyB9IGZyb20gJ0AvY29tcG9uZW50cy9ldmVudC1mb3JtL2V2ZW50LWZvcm0nXG5pbXBvcnQgdHlwZSB7IEJ1c2luZXNzSG91cnMsIENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgdHlwZSB7XG5cdENhbGVuZGFyQ2xhc3Nlc092ZXJyaWRlLFxuXHRDZWxsQ2xpY2tJbmZvLFxuXHRSZW5kZXJDdXJyZW50VGltZUluZGljYXRvclByb3BzLFxuXHRTbG90RHVyYXRpb24sXG59IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IFJlY3VycmVuY2VFZGl0T3B0aW9ucyB9IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS90eXBlcydcbmltcG9ydCB0eXBlIHsgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB0eXBlIHsgVHJhbnNsYXRvckZ1bmN0aW9uIH0gZnJvbSAnQC9saWIvdHJhbnNsYXRpb25zL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhclZpZXcsIFRpbWVGb3JtYXQgfSBmcm9tICdAL3R5cGVzJ1xuXG5leHBvcnQgaW50ZXJmYWNlIENhbGVuZGFyQ29udGV4dFR5cGUge1xuXHRjdXJyZW50RGF0ZTogRGF5anNcblx0dmlldzogQ2FsZW5kYXJWaWV3XG5cdGV2ZW50czogQ2FsZW5kYXJFdmVudFtdXG5cdHJhd0V2ZW50czogQ2FsZW5kYXJFdmVudFtdIC8vIFVucHJvY2Vzc2VkIGV2ZW50cyBmb3IgZXhwb3J0XG5cdGlzRXZlbnRGb3JtT3BlbjogYm9vbGVhblxuXHRzZWxlY3RlZEV2ZW50OiBDYWxlbmRhckV2ZW50IHwgbnVsbFxuXHRzZWxlY3RlZERhdGU6IERheWpzIHwgbnVsbFxuXHRmaXJzdERheU9mV2VlazogbnVtYmVyIC8vIDAgZm9yIFN1bmRheSwgMSBmb3IgTW9uZGF5LCBldGMuXG5cdHNldEN1cnJlbnREYXRlOiAoZGF0ZTogRGF5anMpID0+IHZvaWRcblx0c2VsZWN0RGF0ZTogKGRhdGU6IERheWpzKSA9PiB2b2lkXG5cdHNldFZpZXc6ICh2aWV3OiBDYWxlbmRhclZpZXcpID0+IHZvaWRcblx0bmV4dFBlcmlvZDogKCkgPT4gdm9pZFxuXHRwcmV2UGVyaW9kOiAoKSA9PiB2b2lkXG5cdHRvZGF5OiAoKSA9PiB2b2lkXG5cdGFkZEV2ZW50OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0dXBkYXRlRXZlbnQ6IChldmVudElkOiBzdHJpbmcgfCBudW1iZXIsIGV2ZW50OiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+KSA9PiB2b2lkXG5cdHVwZGF0ZVJlY3VycmluZ0V2ZW50OiAoXG5cdFx0ZXZlbnQ6IENhbGVuZGFyRXZlbnQsXG5cdFx0dXBkYXRlczogUGFydGlhbDxDYWxlbmRhckV2ZW50Pixcblx0XHRvcHRpb25zOiBSZWN1cnJlbmNlRWRpdE9wdGlvbnNcblx0KSA9PiB2b2lkXG5cdGRlbGV0ZUV2ZW50OiAoZXZlbnRJZDogc3RyaW5nIHwgbnVtYmVyKSA9PiB2b2lkXG5cdGRlbGV0ZVJlY3VycmluZ0V2ZW50OiAoXG5cdFx0ZXZlbnQ6IENhbGVuZGFyRXZlbnQsXG5cdFx0b3B0aW9uczogUmVjdXJyZW5jZUVkaXRPcHRpb25zXG5cdCkgPT4gdm9pZFxuXHRvcGVuRXZlbnRGb3JtOiAoZXZlbnREYXRhPzogUGFydGlhbDxDYWxlbmRhckV2ZW50PikgPT4gdm9pZFxuXHRjbG9zZUV2ZW50Rm9ybTogKCkgPT4gdm9pZFxuXHRnZXRFdmVudHNGb3JEYXRlUmFuZ2U6IChzdGFydERhdGU6IERheWpzLCBlbmREYXRlOiBEYXlqcykgPT4gQ2FsZW5kYXJFdmVudFtdXG5cdGZpbmRQYXJlbnRSZWN1cnJpbmdFdmVudDogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiBDYWxlbmRhckV2ZW50IHwgbnVsbFxuXHRyZW5kZXJFdmVudD86IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gUmVhY3QuUmVhY3ROb2RlXG5cdG9uRXZlbnRDbGljazogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG5cdG9uQ2VsbENsaWNrOiAoaW5mbzogQ2VsbENsaWNrSW5mbykgPT4gdm9pZFxuXHRjdXJyZW50TG9jYWxlPzogc3RyaW5nXG5cdHRpbWV6b25lPzogc3RyaW5nXG5cdGRpc2FibGVDZWxsQ2xpY2s/OiBib29sZWFuXG5cdGRpc2FibGVFdmVudENsaWNrPzogYm9vbGVhblxuXHRkaXNhYmxlRHJhZ0FuZERyb3A/OiBib29sZWFuXG5cdGRheU1heEV2ZW50czogbnVtYmVyXG5cdGV2ZW50U3BhY2luZzogbnVtYmVyXG5cdGV2ZW50SGVpZ2h0OiBudW1iZXJcblx0c3RpY2t5Vmlld0hlYWRlcjogYm9vbGVhblxuXHR2aWV3SGVhZGVyQ2xhc3NOYW1lOiBzdHJpbmdcblx0aGVhZGVyQ29tcG9uZW50PzogUmVhY3QuUmVhY3ROb2RlIC8vIE9wdGlvbmFsIGN1c3RvbSBoZWFkZXIgY29tcG9uZW50XG5cdGhlYWRlckNsYXNzTmFtZT86IHN0cmluZyAvLyBPcHRpb25hbCBjdXN0b20gaGVhZGVyIGNsYXNzXG5cdGJ1c2luZXNzSG91cnM/OiBCdXNpbmVzc0hvdXJzIHwgQnVzaW5lc3NIb3Vyc1tdXG5cdHJlbmRlckV2ZW50Rm9ybT86IChwcm9wczogRXZlbnRGb3JtUHJvcHMpID0+IFJlYWN0LlJlYWN0Tm9kZVxuXHQvLyBUcmFuc2xhdGlvbiBmdW5jdGlvblxuXHR0OiBUcmFuc2xhdG9yRnVuY3Rpb25cblx0dGltZUZvcm1hdDogVGltZUZvcm1hdFxuXHRjbGFzc2VzT3ZlcnJpZGU/OiBDYWxlbmRhckNsYXNzZXNPdmVycmlkZVxuXHRyZW5kZXJDdXJyZW50VGltZUluZGljYXRvcj86IChcblx0XHRwcm9wczogUmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3JQcm9wc1xuXHQpID0+IFJlYWN0LlJlYWN0Tm9kZVxuXHRyZW5kZXJIb3VyPzogKGRhdGU6IERheWpzKSA9PiBSZWFjdC5SZWFjdE5vZGVcblx0aGlkZU5vbkJ1c2luZXNzSG91cnM/OiBib29sZWFuXG5cdGhpZGVFeHBvcnRCdXR0b24/OiBib29sZWFuXG5cdGhpZGRlbkRheXM/OiBTZXQ8bnVtYmVyPlxuXHRzbG90RHVyYXRpb246IFNsb3REdXJhdGlvblxuXHRzY3JvbGxUaW1lPzogc3RyaW5nXG59XG5cbi8vIENhbGVuZGFyQ29udGV4dCBpcyBrZXB0IGZvciBpbnRlcm5hbCBQcm92aWRlciB1c2FnZVxuZXhwb3J0IGNvbnN0IENhbGVuZGFyQ29udGV4dDogUmVhY3QuQ29udGV4dDxDYWxlbmRhckNvbnRleHRUeXBlIHwgdW5kZWZpbmVkPiA9XG5cdGNyZWF0ZUNvbnRleHQ8Q2FsZW5kYXJDb250ZXh0VHlwZSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKVxuIiwKICAgICJpbXBvcnQgeyBjcmVhdGVDb250ZXh0IH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyQ29udGV4dFR5cGUgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcbmltcG9ydCB0eXBlIHsgQ2VsbENsaWNrSW5mbyB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IFJlc291cmNlIH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci90eXBlcydcblxuZXhwb3J0IGludGVyZmFjZSBSZXNvdXJjZUNhbGVuZGFyQ29udGV4dFR5cGUgZXh0ZW5kcyBDYWxlbmRhckNvbnRleHRUeXBlIHtcblx0Ly8gUmVzb3VyY2Utc3BlY2lmaWMgc3RhdGVcblx0cmVzb3VyY2VzOiBSZXNvdXJjZVtdXG5cblx0Ly8gUmVzb3VyY2UgdXRpbGl0aWVzXG5cdGdldEV2ZW50c0ZvclJlc291cmNlOiAocmVzb3VyY2VJZDogc3RyaW5nIHwgbnVtYmVyKSA9PiBDYWxlbmRhckV2ZW50W11cblx0Z2V0RXZlbnRzRm9yUmVzb3VyY2VzOiAocmVzb3VyY2VJZHM6IChzdHJpbmcgfCBudW1iZXIpW10pID0+IENhbGVuZGFyRXZlbnRbXVxuXHRnZXRSZXNvdXJjZUJ5SWQ6IChyZXNvdXJjZUlkOiBzdHJpbmcgfCBudW1iZXIpID0+IFJlc291cmNlIHwgdW5kZWZpbmVkXG5cblx0Ly8gQ3Jvc3MtcmVzb3VyY2UgZXZlbnQgdXRpbGl0aWVzXG5cdGlzRXZlbnRDcm9zc1Jlc291cmNlOiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IGJvb2xlYW5cblx0Z2V0RXZlbnRSZXNvdXJjZUlkczogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiAoc3RyaW5nIHwgbnVtYmVyKVtdXG5cblx0Ly8gQWRkaXRpb25hbCBwcm9wZXJ0aWVzIGZyb20gY2FsZW5kYXIgY29udGV4dFxuXHRvbkV2ZW50Q2xpY2s6IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuXHRvbkNlbGxDbGljazogKGluZm86IENlbGxDbGlja0luZm8pID0+IHZvaWRcblx0cmVuZGVyUmVzb3VyY2U/OiAocmVzb3VyY2U6IFJlc291cmNlKSA9PiBSZWFjdC5SZWFjdE5vZGVcblx0b3JpZW50YXRpb246ICdob3Jpem9udGFsJyB8ICd2ZXJ0aWNhbCdcblx0d2Vla1ZpZXdHcmFudWxhcml0eTogJ2hvdXJseScgfCAnZGFpbHknXG59XG5cbi8vIFJlc291cmNlQ2FsZW5kYXJDb250ZXh0IGlzIGtlcHQgZm9yIGludGVybmFsIFByb3ZpZGVyIHVzYWdlXG5leHBvcnQgY29uc3QgUmVzb3VyY2VDYWxlbmRhckNvbnRleHQ6IFJlYWN0LkNvbnRleHQ8XG5cdFJlc291cmNlQ2FsZW5kYXJDb250ZXh0VHlwZSB8IHVuZGVmaW5lZFxuPiA9IGNyZWF0ZUNvbnRleHQ8UmVzb3VyY2VDYWxlbmRhckNvbnRleHRUeXBlIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpXG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJQcm92aWRlclByb3BzIH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L3Byb3ZpZGVyJ1xuaW1wb3J0IHR5cGUge1xuXHRDYWxlbmRhckNsYXNzZXNPdmVycmlkZSxcblx0Q2VsbENsaWNrSW5mbyxcblx0UmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3JQcm9wcyxcblx0U2xvdER1cmF0aW9uLFxufSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBSZXNvdXJjZSB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvdHlwZXMnXG5pbXBvcnQgeyB1c2VDYWxlbmRhckVuZ2luZSB9IGZyb20gJ0AvaG9va3MvdXNlLWNhbGVuZGFyLWVuZ2luZSdcbmltcG9ydCB0eXBlIHsgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IEVWRU5UX0JBUl9IRUlHSFQgfSBmcm9tICdAL2xpYi9jb25zdGFudHMnXG5pbXBvcnQgeyBSZXNvdXJjZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJy4vY29udGV4dCdcblxuY29uc3QgZ2V0RXZlbnRSZXNvdXJjZUlkcyA9IChldmVudDogQ2FsZW5kYXJFdmVudCk6IChzdHJpbmcgfCBudW1iZXIpW10gPT4ge1xuXHRpZiAoZXZlbnQucmVzb3VyY2VJZHMpIHtcblx0XHRyZXR1cm4gZXZlbnQucmVzb3VyY2VJZHNcblx0fVxuXHRpZiAoZXZlbnQucmVzb3VyY2VJZCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIFtldmVudC5yZXNvdXJjZUlkXVxuXHR9XG5cdHJldHVybiBbXVxufVxuXG5pbnRlcmZhY2UgUmVzb3VyY2VDYWxlbmRhclByb3ZpZGVyUHJvcHMgZXh0ZW5kcyBDYWxlbmRhclByb3ZpZGVyUHJvcHMge1xuXHRldmVudHM/OiBDYWxlbmRhckV2ZW50W11cblx0cmVzb3VyY2VzPzogUmVzb3VyY2VbXVxuXHRyZW5kZXJSZXNvdXJjZT86IChyZXNvdXJjZTogUmVzb3VyY2UpID0+IFJlYWN0LlJlYWN0Tm9kZVxuXHRjbGFzc2VzT3ZlcnJpZGU/OiBDYWxlbmRhckNsYXNzZXNPdmVycmlkZVxuXHRvcmllbnRhdGlvbj86ICdob3Jpem9udGFsJyB8ICd2ZXJ0aWNhbCdcblx0d2Vla1ZpZXdHcmFudWxhcml0eT86ICdob3VybHknIHwgJ2RhaWx5J1xuXHRyZW5kZXJDdXJyZW50VGltZUluZGljYXRvcj86IChcblx0XHRwcm9wczogUmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3JQcm9wc1xuXHQpID0+IFJlYWN0LlJlYWN0Tm9kZVxuXHRyZW5kZXJIb3VyPzogKGRhdGU6IERheWpzKSA9PiBSZWFjdC5SZWFjdE5vZGVcblx0aGlkZU5vbkJ1c2luZXNzSG91cnM/OiBib29sZWFuXG5cdHNsb3REdXJhdGlvbj86IFNsb3REdXJhdGlvblxuXHRzY3JvbGxUaW1lPzogc3RyaW5nXG59XG5cbmV4cG9ydCBjb25zdCBSZXNvdXJjZUNhbGVuZGFyUHJvdmlkZXI6IFJlYWN0LkZDPFxuXHRSZXNvdXJjZUNhbGVuZGFyUHJvdmlkZXJQcm9wc1xuPiA9ICh7XG5cdGNoaWxkcmVuLFxuXHRldmVudHMgPSBbXSxcblx0cmVzb3VyY2VzID0gW10sXG5cdGZpcnN0RGF5T2ZXZWVrID0gMCxcblx0aW5pdGlhbFZpZXcgPSAnbW9udGgnLFxuXHRpbml0aWFsRGF0ZSxcblx0cmVuZGVyRXZlbnQsXG5cdG9uRXZlbnRDbGljayxcblx0b25DZWxsQ2xpY2ssXG5cdG9uVmlld0NoYW5nZSxcblx0b25FdmVudEFkZCxcblx0b25FdmVudFVwZGF0ZSxcblx0b25FdmVudERlbGV0ZSxcblx0b25EYXRlQ2hhbmdlLFxuXHRsb2NhbGUsXG5cdHRpbWV6b25lLFxuXHRkaXNhYmxlQ2VsbENsaWNrLFxuXHRkaXNhYmxlRXZlbnRDbGljayxcblx0ZGlzYWJsZURyYWdBbmREcm9wLFxuXHRkYXlNYXhFdmVudHMsXG5cdGV2ZW50U3BhY2luZyA9IDEsXG5cdGV2ZW50SGVpZ2h0ID0gRVZFTlRfQkFSX0hFSUdIVCxcblx0c3RpY2t5Vmlld0hlYWRlciA9IHRydWUsXG5cdHZpZXdIZWFkZXJDbGFzc05hbWUgPSAnJyxcblx0aGVhZGVyQ29tcG9uZW50LFxuXHRoZWFkZXJDbGFzc05hbWUsXG5cdHRyYW5zbGF0aW9ucyxcblx0dHJhbnNsYXRvcixcblx0cmVuZGVyUmVzb3VyY2UsXG5cdHJlbmRlckV2ZW50Rm9ybSxcblx0YnVzaW5lc3NIb3Vycyxcblx0dGltZUZvcm1hdCA9ICcxMi1ob3VyJyxcblx0Y2xhc3Nlc092ZXJyaWRlLFxuXHRvcmllbnRhdGlvbiA9ICdob3Jpem9udGFsJyxcblx0cmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3IsXG5cdHJlbmRlckhvdXIsXG5cdGhpZGVOb25CdXNpbmVzc0hvdXJzID0gZmFsc2UsXG5cdGhpZGVFeHBvcnRCdXR0b24gPSBmYWxzZSxcblx0aGlkZGVuRGF5cyxcblx0d2Vla1ZpZXdHcmFudWxhcml0eSA9ICdob3VybHknLFxuXHRzbG90RHVyYXRpb24gPSA2MCxcblx0c2Nyb2xsVGltZSxcbn0pID0+IHtcblx0Ly8gVXNlIHRoZSBjYWxlbmRhciBlbmdpbmVcblx0Y29uc3QgY2FsZW5kYXJFbmdpbmUgPSB1c2VDYWxlbmRhckVuZ2luZSh7XG5cdFx0ZXZlbnRzLFxuXHRcdGZpcnN0RGF5T2ZXZWVrLFxuXHRcdGluaXRpYWxWaWV3LFxuXHRcdGluaXRpYWxEYXRlLFxuXHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0b25FdmVudEFkZCxcblx0XHRvbkV2ZW50VXBkYXRlLFxuXHRcdG9uRXZlbnREZWxldGUsXG5cdFx0b25EYXRlQ2hhbmdlLFxuXHRcdG9uVmlld0NoYW5nZTogb25WaWV3Q2hhbmdlLFxuXHRcdGxvY2FsZSxcblx0XHR0aW1lem9uZSxcblx0XHR0cmFuc2xhdGlvbnMsXG5cdFx0dHJhbnNsYXRvcixcblx0fSlcblxuXHQvLyBFdmVudCB1dGlsaXRpZXMg4oCUIGJvdGggZmlsdGVycyBnbyB0aHJvdWdoIGdldEV2ZW50UmVzb3VyY2VJZHMgc28gc2luZ2xlXG5cdC8vIGFuZCBtdWx0aS1yZXNvdXJjZSBldmVudHMgYXJlIGhhbmRsZWQgdW5pZm9ybWx5LlxuXHRjb25zdCBnZXRFdmVudHNGb3JSZXNvdXJjZSA9IHVzZUNhbGxiYWNrKFxuXHRcdChyZXNvdXJjZUlkOiBzdHJpbmcgfCBudW1iZXIpOiBDYWxlbmRhckV2ZW50W10gPT5cblx0XHRcdGNhbGVuZGFyRW5naW5lLmV2ZW50cy5maWx0ZXIoKGUpID0+XG5cdFx0XHRcdGdldEV2ZW50UmVzb3VyY2VJZHMoZSkuaW5jbHVkZXMocmVzb3VyY2VJZClcblx0XHRcdCksXG5cdFx0W2NhbGVuZGFyRW5naW5lLmV2ZW50c11cblx0KVxuXG5cdGNvbnN0IGdldEV2ZW50c0ZvclJlc291cmNlcyA9IHVzZUNhbGxiYWNrKFxuXHRcdChyZXNvdXJjZUlkczogKHN0cmluZyB8IG51bWJlcilbXSk6IENhbGVuZGFyRXZlbnRbXSA9PlxuXHRcdFx0Y2FsZW5kYXJFbmdpbmUuZXZlbnRzLmZpbHRlcigoZSkgPT5cblx0XHRcdFx0Z2V0RXZlbnRSZXNvdXJjZUlkcyhlKS5zb21lKChpZCkgPT4gcmVzb3VyY2VJZHMuaW5jbHVkZXMoaWQpKVxuXHRcdFx0KSxcblx0XHRbY2FsZW5kYXJFbmdpbmUuZXZlbnRzXVxuXHQpXG5cblx0Y29uc3QgZ2V0UmVzb3VyY2VCeUlkID0gdXNlQ2FsbGJhY2soXG5cdFx0KHJlc291cmNlSWQ6IHN0cmluZyB8IG51bWJlcik6IFJlc291cmNlIHwgdW5kZWZpbmVkID0+IHtcblx0XHRcdHJldHVybiByZXNvdXJjZXMuZmluZCgocmVzb3VyY2UpID0+IHJlc291cmNlLmlkID09PSByZXNvdXJjZUlkKVxuXHRcdH0sXG5cdFx0W3Jlc291cmNlc11cblx0KVxuXG5cdC8vIENyb3NzLXJlc291cmNlIGV2ZW50IHV0aWxpdGllc1xuXHRjb25zdCBpc0V2ZW50Q3Jvc3NSZXNvdXJjZSA9IHVzZUNhbGxiYWNrKChldmVudDogQ2FsZW5kYXJFdmVudCk6IGJvb2xlYW4gPT4ge1xuXHRcdHJldHVybiBCb29sZWFuKGV2ZW50LnJlc291cmNlSWRzICYmIGV2ZW50LnJlc291cmNlSWRzLmxlbmd0aCA+IDEpXG5cdH0sIFtdKVxuXG5cdC8vIEN1c3RvbSBoYW5kbGVyc1xuXHRjb25zdCBlZGl0RXZlbnQgPSB1c2VDYWxsYmFjayhcblx0XHQoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHtcblx0XHRcdGNhbGVuZGFyRW5naW5lLnNldFNlbGVjdGVkRXZlbnQoZXZlbnQpXG5cdFx0XHRjYWxlbmRhckVuZ2luZS5zZXRJc0V2ZW50Rm9ybU9wZW4odHJ1ZSlcblx0XHR9LFxuXHRcdFtjYWxlbmRhckVuZ2luZV1cblx0KVxuXG5cdGNvbnN0IGhhbmRsZUV2ZW50Q2xpY2sgPSB1c2VDYWxsYmFjayhcblx0XHQoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHtcblx0XHRcdGlmIChkaXNhYmxlRXZlbnRDbGljaykge1xuXHRcdFx0XHRyZXR1cm5cblx0XHRcdH1cblx0XHRcdGlmIChvbkV2ZW50Q2xpY2spIHtcblx0XHRcdFx0b25FdmVudENsaWNrKGV2ZW50KVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZWRpdEV2ZW50KGV2ZW50KVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0W2Rpc2FibGVFdmVudENsaWNrLCBvbkV2ZW50Q2xpY2ssIGVkaXRFdmVudF1cblx0KVxuXG5cdGNvbnN0IGhhbmRsZURhdGVDbGljayA9IHVzZUNhbGxiYWNrKFxuXHRcdChpbmZvOiBDZWxsQ2xpY2tJbmZvKSA9PiB7XG5cdFx0XHRpZiAoZGlzYWJsZUNlbGxDbGljaykge1xuXHRcdFx0XHRyZXR1cm5cblx0XHRcdH1cblxuXHRcdFx0aWYgKG9uQ2VsbENsaWNrKSB7XG5cdFx0XHRcdG9uQ2VsbENsaWNrKGluZm8pXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBuZXdFdmVudDogQ2FsZW5kYXJFdmVudCA9IHtcblx0XHRcdFx0XHR0aXRsZTogY2FsZW5kYXJFbmdpbmUudCgnbmV3RXZlbnQnKSxcblx0XHRcdFx0XHRzdGFydDogaW5mby5zdGFydCxcblx0XHRcdFx0XHRlbmQ6IGluZm8uZW5kLFxuXHRcdFx0XHRcdGRlc2NyaXB0aW9uOiAnJyxcblx0XHRcdFx0XHRhbGxEYXk6IGZhbHNlLFxuXHRcdFx0XHR9IGFzIENhbGVuZGFyRXZlbnRcblxuXHRcdFx0XHRpZiAoaW5mby5yZXNvdXJjZUlkICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRuZXdFdmVudC5yZXNvdXJjZUlkID0gaW5mby5yZXNvdXJjZUlkXG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjYWxlbmRhckVuZ2luZS5zZXRTZWxlY3RlZEV2ZW50KG5ld0V2ZW50KVxuXHRcdFx0XHRjYWxlbmRhckVuZ2luZS5zZXRTZWxlY3RlZERhdGUoaW5mby5zdGFydClcblx0XHRcdFx0Y2FsZW5kYXJFbmdpbmUuc2V0SXNFdmVudEZvcm1PcGVuKHRydWUpXG5cdFx0XHR9XG5cdFx0fSxcblx0XHRbb25DZWxsQ2xpY2ssIGRpc2FibGVDZWxsQ2xpY2ssIGNhbGVuZGFyRW5naW5lXVxuXHQpXG5cblx0Ly8gQ3JlYXRlIHRoZSBjb250ZXh0IHZhbHVlXG5cdGNvbnN0IGNvbnRleHRWYWx1ZSA9IHVzZU1lbW8oXG5cdFx0KCkgPT4gKHtcblx0XHRcdC4uLmNhbGVuZGFyRW5naW5lLFxuXHRcdFx0Ly8gUmVzb3VyY2Utc3BlY2lmaWMgc3RhdGVcblx0XHRcdHJlc291cmNlcyxcblx0XHRcdC8vIFJlc291cmNlIHV0aWxpdGllc1xuXHRcdFx0Z2V0RXZlbnRzRm9yUmVzb3VyY2UsXG5cdFx0XHRnZXRFdmVudHNGb3JSZXNvdXJjZXMsXG5cdFx0XHRnZXRSZXNvdXJjZUJ5SWQsXG5cdFx0XHRpc0V2ZW50Q3Jvc3NSZXNvdXJjZSxcblx0XHRcdGdldEV2ZW50UmVzb3VyY2VJZHMsXG5cdFx0XHQvLyBPdmVycmlkZSBoYW5kbGVyc1xuXHRcdFx0b25FdmVudENsaWNrOiBoYW5kbGVFdmVudENsaWNrLFxuXHRcdFx0b25DZWxsQ2xpY2s6IGhhbmRsZURhdGVDbGljayxcblx0XHRcdC8vIFBhc3MtdGhyb3VnaCBwcm9wc1xuXHRcdFx0cmVuZGVyRXZlbnQsXG5cdFx0XHRyZW5kZXJSZXNvdXJjZSxcblx0XHRcdHJlbmRlckV2ZW50Rm9ybSxcblx0XHRcdGhlYWRlckNvbXBvbmVudCxcblx0XHRcdGhlYWRlckNsYXNzTmFtZSxcblx0XHRcdGxvY2FsZSxcblx0XHRcdHRpbWV6b25lLFxuXHRcdFx0ZGlzYWJsZUNlbGxDbGljayxcblx0XHRcdGRpc2FibGVFdmVudENsaWNrLFxuXHRcdFx0ZGlzYWJsZURyYWdBbmREcm9wLFxuXHRcdFx0ZGF5TWF4RXZlbnRzLFxuXHRcdFx0ZXZlbnRTcGFjaW5nLFxuXHRcdFx0ZXZlbnRIZWlnaHQsXG5cdFx0XHRzdGlja3lWaWV3SGVhZGVyLFxuXHRcdFx0dmlld0hlYWRlckNsYXNzTmFtZSxcblx0XHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0XHR0aW1lRm9ybWF0LFxuXHRcdFx0Y2xhc3Nlc092ZXJyaWRlLFxuXHRcdFx0b3JpZW50YXRpb24sXG5cdFx0XHRyZW5kZXJDdXJyZW50VGltZUluZGljYXRvcixcblx0XHRcdHJlbmRlckhvdXIsXG5cdFx0XHRoaWRlTm9uQnVzaW5lc3NIb3Vycyxcblx0XHRcdGhpZGVFeHBvcnRCdXR0b24sXG5cdFx0XHRoaWRkZW5EYXlzLFxuXHRcdFx0d2Vla1ZpZXdHcmFudWxhcml0eSxcblx0XHRcdHNsb3REdXJhdGlvbixcblx0XHRcdHNjcm9sbFRpbWUsXG5cdFx0fSksXG5cdFx0W1xuXHRcdFx0Y2FsZW5kYXJFbmdpbmUsXG5cdFx0XHRyZXNvdXJjZXMsXG5cdFx0XHRnZXRFdmVudHNGb3JSZXNvdXJjZSxcblx0XHRcdGdldEV2ZW50c0ZvclJlc291cmNlcyxcblx0XHRcdGdldFJlc291cmNlQnlJZCxcblx0XHRcdGlzRXZlbnRDcm9zc1Jlc291cmNlLFxuXHRcdFx0aGFuZGxlRXZlbnRDbGljayxcblx0XHRcdGhhbmRsZURhdGVDbGljayxcblx0XHRcdHJlbmRlckV2ZW50LFxuXHRcdFx0cmVuZGVyUmVzb3VyY2UsXG5cdFx0XHRyZW5kZXJFdmVudEZvcm0sXG5cdFx0XHRsb2NhbGUsXG5cdFx0XHR0aW1lem9uZSxcblx0XHRcdGRpc2FibGVDZWxsQ2xpY2ssXG5cdFx0XHRkaXNhYmxlRXZlbnRDbGljayxcblx0XHRcdGRpc2FibGVEcmFnQW5kRHJvcCxcblx0XHRcdGRheU1heEV2ZW50cyxcblx0XHRcdGV2ZW50U3BhY2luZyxcblx0XHRcdGV2ZW50SGVpZ2h0LFxuXHRcdFx0c3RpY2t5Vmlld0hlYWRlcixcblx0XHRcdHZpZXdIZWFkZXJDbGFzc05hbWUsXG5cdFx0XHRoZWFkZXJDb21wb25lbnQsXG5cdFx0XHRoZWFkZXJDbGFzc05hbWUsXG5cdFx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdFx0dGltZUZvcm1hdCxcblx0XHRcdGNsYXNzZXNPdmVycmlkZSxcblx0XHRcdG9yaWVudGF0aW9uLFxuXHRcdFx0cmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3IsXG5cdFx0XHRyZW5kZXJIb3VyLFxuXHRcdFx0aGlkZU5vbkJ1c2luZXNzSG91cnMsXG5cdFx0XHRoaWRlRXhwb3J0QnV0dG9uLFxuXHRcdFx0aGlkZGVuRGF5cyxcblx0XHRcdHdlZWtWaWV3R3JhbnVsYXJpdHksXG5cdFx0XHRzbG90RHVyYXRpb24sXG5cdFx0XHRzY3JvbGxUaW1lLFxuXHRcdF1cblx0KVxuXG5cdHJldHVybiAoXG5cdFx0PFJlc291cmNlQ2FsZW5kYXJDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXtjb250ZXh0VmFsdWV9PlxuXHRcdFx0e2NoaWxkcmVufVxuXHRcdDwvUmVzb3VyY2VDYWxlbmRhckNvbnRleHQuUHJvdmlkZXI+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBCdXNpbmVzc0hvdXJzLCBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBSZWN1cnJlbmNlRWRpdE9wdGlvbnMgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvdHlwZXMnXG5pbXBvcnQge1xuXHRkZWxldGVSZWN1cnJpbmdFdmVudCBhcyBkZWxldGVSZWN1cnJpbmdFdmVudEltcGwsXG5cdGdlbmVyYXRlUmVjdXJyaW5nRXZlbnRzLFxuXHR1cGRhdGVSZWN1cnJpbmdFdmVudCBhcyB1cGRhdGVSZWN1cnJpbmdFdmVudEltcGwsXG59IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS91dGlscy9yZWN1cnJlbmNlLWhhbmRsZXInXG5pbXBvcnQgZGF5anMsIHtcblx0dHlwZSBEYXlqcyxcblx0dHlwZSBNYW5pcHVsYXRlVHlwZSxcbn0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBkZWZhdWx0VHJhbnNsYXRpb25zIH0gZnJvbSAnQC9saWIvdHJhbnNsYXRpb25zL2RlZmF1bHQnXG5pbXBvcnQgdHlwZSB7IFRyYW5zbGF0aW9ucywgVHJhbnNsYXRvckZ1bmN0aW9uIH0gZnJvbSAnQC9saWIvdHJhbnNsYXRpb25zL3R5cGVzJ1xuaW1wb3J0IHsgZ2V0TW9udGhXZWVrcywgZ2V0V2Vla0RheXMgfSBmcm9tICdAL2xpYi91dGlscy9kYXRlLXV0aWxzJ1xuaW1wb3J0IHsgZXZlbnRPdmVybGFwc1JhbmdlIH0gZnJvbSAnQC9saWIvdXRpbHMvZXZlbnQtdXRpbHMnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyVmlldyB9IGZyb20gJ0AvdHlwZXMnXG5pbXBvcnQgeyBEQVlfTUFYX0VWRU5UU19ERUZBVUxUIH0gZnJvbSAnLi4vbGliL2NvbnN0YW50cydcblxuZXhwb3J0IGludGVyZmFjZSBDYWxlbmRhckVuZ2luZUNvbmZpZyB7XG5cdGV2ZW50czogQ2FsZW5kYXJFdmVudFtdXG5cdGZpcnN0RGF5T2ZXZWVrOiBudW1iZXJcblx0aW5pdGlhbFZpZXc/OiBDYWxlbmRhclZpZXdcblx0aW5pdGlhbERhdGU/OiBEYXlqc1xuXHRidXNpbmVzc0hvdXJzPzogQnVzaW5lc3NIb3VycyB8IEJ1c2luZXNzSG91cnNbXVxuXHRvbkV2ZW50QWRkPzogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG5cdG9uRXZlbnRVcGRhdGU/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0b25FdmVudERlbGV0ZT86IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuXHRvbkRhdGVDaGFuZ2U/OiAoZGF0ZTogRGF5anMsIHJhbmdlOiB7IHN0YXJ0OiBEYXlqczsgZW5kOiBEYXlqcyB9KSA9PiB2b2lkXG5cdG9uVmlld0NoYW5nZT86ICh2aWV3OiBDYWxlbmRhclZpZXcpID0+IHZvaWRcblx0bG9jYWxlPzogc3RyaW5nXG5cdHRpbWV6b25lPzogc3RyaW5nXG5cdHRyYW5zbGF0aW9ucz86IFRyYW5zbGF0aW9uc1xuXHR0cmFuc2xhdG9yPzogVHJhbnNsYXRvckZ1bmN0aW9uXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2FsZW5kYXJFbmdpbmVSZXR1cm4ge1xuXHRjdXJyZW50RGF0ZTogRGF5anNcblx0dmlldzogQ2FsZW5kYXJWaWV3XG5cdGV2ZW50czogQ2FsZW5kYXJFdmVudFtdXG5cdHJhd0V2ZW50czogQ2FsZW5kYXJFdmVudFtdXG5cdGlzRXZlbnRGb3JtT3BlbjogYm9vbGVhblxuXHRzZWxlY3RlZEV2ZW50OiBDYWxlbmRhckV2ZW50IHwgbnVsbFxuXHRzZWxlY3RlZERhdGU6IERheWpzIHwgbnVsbFxuXHRmaXJzdERheU9mV2VlazogbnVtYmVyXG5cdGRheU1heEV2ZW50czogbnVtYmVyXG5cdGN1cnJlbnRMb2NhbGU6IHN0cmluZ1xuXHRidXNpbmVzc0hvdXJzPzogQnVzaW5lc3NIb3VycyB8IEJ1c2luZXNzSG91cnNbXVxuXHRzZXRDdXJyZW50RGF0ZTogKGRhdGU6IERheWpzKSA9PiB2b2lkXG5cdHNlbGVjdERhdGU6IChkYXRlOiBEYXlqcykgPT4gdm9pZFxuXHRzZXRWaWV3OiAodmlldzogQ2FsZW5kYXJWaWV3KSA9PiB2b2lkXG5cdG5leHRQZXJpb2Q6ICgpID0+IHZvaWRcblx0cHJldlBlcmlvZDogKCkgPT4gdm9pZFxuXHR0b2RheTogKCkgPT4gdm9pZFxuXHRhZGRFdmVudDogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG5cdHVwZGF0ZUV2ZW50OiAoZXZlbnRJZDogc3RyaW5nIHwgbnVtYmVyLCBldmVudDogUGFydGlhbDxDYWxlbmRhckV2ZW50PikgPT4gdm9pZFxuXHR1cGRhdGVSZWN1cnJpbmdFdmVudDogKFxuXHRcdGV2ZW50OiBDYWxlbmRhckV2ZW50LFxuXHRcdHVwZGF0ZXM6IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD4sXG5cdFx0b3B0aW9uczogUmVjdXJyZW5jZUVkaXRPcHRpb25zXG5cdCkgPT4gdm9pZFxuXHRkZWxldGVFdmVudDogKGV2ZW50SWQ6IHN0cmluZyB8IG51bWJlcikgPT4gdm9pZFxuXHRkZWxldGVSZWN1cnJpbmdFdmVudDogKFxuXHRcdGV2ZW50OiBDYWxlbmRhckV2ZW50LFxuXHRcdG9wdGlvbnM6IFJlY3VycmVuY2VFZGl0T3B0aW9uc1xuXHQpID0+IHZvaWRcblx0b3BlbkV2ZW50Rm9ybTogKGV2ZW50RGF0YT86IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD4pID0+IHZvaWRcblx0Y2xvc2VFdmVudEZvcm06ICgpID0+IHZvaWRcblx0c2V0U2VsZWN0ZWRFdmVudDogUmVhY3QuRGlzcGF0Y2g8UmVhY3QuU2V0U3RhdGVBY3Rpb248Q2FsZW5kYXJFdmVudCB8IG51bGw+PlxuXHRzZXRJc0V2ZW50Rm9ybU9wZW46IFJlYWN0LkRpc3BhdGNoPFJlYWN0LlNldFN0YXRlQWN0aW9uPGJvb2xlYW4+PlxuXHRzZXRTZWxlY3RlZERhdGU6IFJlYWN0LkRpc3BhdGNoPFJlYWN0LlNldFN0YXRlQWN0aW9uPERheWpzIHwgbnVsbD4+XG5cdGdldEV2ZW50c0ZvckRhdGVSYW5nZTogKHN0YXJ0RGF0ZTogRGF5anMsIGVuZERhdGU6IERheWpzKSA9PiBDYWxlbmRhckV2ZW50W11cblx0ZmluZFBhcmVudFJlY3VycmluZ0V2ZW50OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IENhbGVuZGFyRXZlbnQgfCBudWxsXG5cdHQ6IFRyYW5zbGF0b3JGdW5jdGlvblxufVxuXG5jb25zdCBWSUVXX1VOSVRTOiBSZWNvcmQ8Q2FsZW5kYXJWaWV3LCBNYW5pcHVsYXRlVHlwZT4gPSB7XG5cdGRheTogJ2RheScsXG5cdHdlZWs6ICd3ZWVrJyxcblx0bW9udGg6ICdtb250aCcsXG5cdHllYXI6ICd5ZWFyJyxcbn1cblxuZXhwb3J0IGNvbnN0IGNhbGN1bGF0ZVZpZXdSYW5nZSA9IChcblx0ZGF0ZTogRGF5anMsXG5cdHZpZXc6IENhbGVuZGFyVmlldyxcblx0Zmlyc3REYXlPZldlZWs6IG51bWJlclxuKTogeyBzdGFydDogRGF5anM7IGVuZDogRGF5anMgfSA9PiB7XG5cdGlmICh2aWV3ID09PSAnZGF5JyB8fCB2aWV3ID09PSAneWVhcicpIHtcblx0XHRyZXR1cm4geyBzdGFydDogZGF0ZS5zdGFydE9mKHZpZXcpLCBlbmQ6IGRhdGUuZW5kT2YodmlldykgfVxuXHR9XG5cdGlmICh2aWV3ID09PSAnd2VlaycpIHtcblx0XHRjb25zdCBkYXlzID0gZ2V0V2Vla0RheXMoZGF0ZSwgZmlyc3REYXlPZldlZWspXG5cdFx0cmV0dXJuIHsgc3RhcnQ6IGRheXNbMF0uc3RhcnRPZignZGF5JyksIGVuZDogZGF5c1s2XS5lbmRPZignZGF5JykgfVxuXHR9XG5cdC8vIG1vbnRoIHZpZXc6IDYgd2Vla3Mgw5cgNyBkYXlzXG5cdGNvbnN0IHdlZWtzID0gZ2V0TW9udGhXZWVrcyhkYXRlLCBmaXJzdERheU9mV2Vlaylcblx0cmV0dXJuIHsgc3RhcnQ6IHdlZWtzWzBdWzBdLnN0YXJ0T2YoJ2RheScpLCBlbmQ6IHdlZWtzWzVdWzZdLmVuZE9mKCdkYXknKSB9XG59XG5cbmV4cG9ydCBjb25zdCB1c2VDYWxlbmRhckVuZ2luZSA9IChcblx0Y29uZmlnOiBDYWxlbmRhckVuZ2luZUNvbmZpZ1xuKTogQ2FsZW5kYXJFbmdpbmVSZXR1cm4gPT4ge1xuXHRjb25zdCB7XG5cdFx0ZXZlbnRzID0gW10sXG5cdFx0Zmlyc3REYXlPZldlZWsgPSAwLFxuXHRcdGluaXRpYWxWaWV3ID0gJ21vbnRoJyxcblx0XHRpbml0aWFsRGF0ZSA9IGRheWpzKCksXG5cdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRvbkV2ZW50QWRkLFxuXHRcdG9uRXZlbnRVcGRhdGUsXG5cdFx0b25FdmVudERlbGV0ZSxcblx0XHRvbkRhdGVDaGFuZ2UsXG5cdFx0b25WaWV3Q2hhbmdlLFxuXHRcdGxvY2FsZSxcblx0XHR0aW1lem9uZSxcblx0XHR0cmFuc2xhdGlvbnMsXG5cdFx0dHJhbnNsYXRvcixcblx0fSA9IGNvbmZpZ1xuXG5cdGNvbnN0IFtjdXJyZW50RGF0ZSwgc2V0Q3VycmVudERhdGVdID0gdXNlU3RhdGU8RGF5anM+KFxuXHRcdGRheWpzLmlzRGF5anMoaW5pdGlhbERhdGUpID8gaW5pdGlhbERhdGUgOiBkYXlqcyhpbml0aWFsRGF0ZSlcblx0KVxuXHRjb25zdCBbdmlldywgc2V0Vmlld10gPSB1c2VTdGF0ZTxDYWxlbmRhclZpZXc+KGluaXRpYWxWaWV3KVxuXHRjb25zdCBbY3VycmVudEV2ZW50cywgc2V0Q3VycmVudEV2ZW50c10gPSB1c2VTdGF0ZTxDYWxlbmRhckV2ZW50W10+KGV2ZW50cylcblx0Y29uc3QgW2lzRXZlbnRGb3JtT3Blbiwgc2V0SXNFdmVudEZvcm1PcGVuXSA9IHVzZVN0YXRlKGZhbHNlKVxuXHRjb25zdCBbc2VsZWN0ZWRFdmVudCwgc2V0U2VsZWN0ZWRFdmVudF0gPSB1c2VTdGF0ZTxDYWxlbmRhckV2ZW50IHwgbnVsbD4obnVsbClcblx0Y29uc3QgW3NlbGVjdGVkRGF0ZSwgc2V0U2VsZWN0ZWREYXRlXSA9IHVzZVN0YXRlPERheWpzIHwgbnVsbD4obnVsbClcblx0Y29uc3QgW2N1cnJlbnRMb2NhbGUsIHNldEN1cnJlbnRMb2NhbGVdID0gdXNlU3RhdGUobG9jYWxlIHx8ICdlbicpXG5cdGNvbnN0IGxhc3RFdmVudHNQcm9wID0gdXNlUmVmKGV2ZW50cylcblx0Y29uc3QgbGFzdFRpbWV6b25lUHJvcCA9IHVzZVJlZih0aW1lem9uZSlcblx0Y29uc3QgbGFzdExvY2FsZVByb3AgPSB1c2VSZWY8c3RyaW5nIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpXG5cblx0Y29uc3QgdDogVHJhbnNsYXRvckZ1bmN0aW9uID0gdXNlTWVtbygoKSA9PiB7XG5cdFx0aWYgKHRyYW5zbGF0b3IpIHJldHVybiB0cmFuc2xhdG9yXG5cdFx0Y29uc3QgZGljdCA9IHRyYW5zbGF0aW9ucyB8fCBkZWZhdWx0VHJhbnNsYXRpb25zXG5cdFx0cmV0dXJuIChrZXk6IHN0cmluZykgPT4gZGljdFtrZXkgYXMga2V5b2YgVHJhbnNsYXRpb25zXSB8fCBrZXlcblx0fSwgW3RyYW5zbGF0aW9ucywgdHJhbnNsYXRvcl0pXG5cblx0Y29uc3QgZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlID0gdXNlQ2FsbGJhY2soXG5cdFx0KHN0YXJ0RGF0ZTogRGF5anMsIGVuZERhdGU6IERheWpzKTogQ2FsZW5kYXJFdmVudFtdID0+IHtcblx0XHRcdGNvbnN0IGFsbEV2ZW50czogQ2FsZW5kYXJFdmVudFtdID0gW11cblxuXHRcdFx0Zm9yIChjb25zdCBldmVudCBvZiBjdXJyZW50RXZlbnRzKSB7XG5cdFx0XHRcdGlmIChldmVudC5ycnVsZSkge1xuXHRcdFx0XHRcdGFsbEV2ZW50cy5wdXNoKFxuXHRcdFx0XHRcdFx0Li4uZ2VuZXJhdGVSZWN1cnJpbmdFdmVudHMoe1xuXHRcdFx0XHRcdFx0XHRldmVudCxcblx0XHRcdFx0XHRcdFx0Y3VycmVudEV2ZW50cyxcblx0XHRcdFx0XHRcdFx0c3RhcnREYXRlLFxuXHRcdFx0XHRcdFx0XHRlbmREYXRlLFxuXHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQpXG5cdFx0XHRcdH0gZWxzZSBpZiAoZXZlbnRPdmVybGFwc1JhbmdlKGV2ZW50LCBzdGFydERhdGUsIGVuZERhdGUpKSB7XG5cdFx0XHRcdFx0YWxsRXZlbnRzLnB1c2goZXZlbnQpXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBhbGxFdmVudHNcblx0XHR9LFxuXHRcdFtjdXJyZW50RXZlbnRzXVxuXHQpXG5cblx0Y29uc3QgZ2V0Q3VycmVudFZpZXdSYW5nZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcblx0XHRyZXR1cm4gY2FsY3VsYXRlVmlld1JhbmdlKGN1cnJlbnREYXRlLCB2aWV3LCBmaXJzdERheU9mV2Vlaylcblx0fSwgW2N1cnJlbnREYXRlLCB2aWV3LCBmaXJzdERheU9mV2Vla10pXG5cblx0Y29uc3QgcHJvY2Vzc2VkRXZlbnRzID0gdXNlTWVtbygoKSA9PiB7XG5cdFx0Y29uc3QgeyBzdGFydCwgZW5kIH0gPSBnZXRDdXJyZW50Vmlld1JhbmdlKClcblx0XHRyZXR1cm4gZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlKHN0YXJ0LCBlbmQpXG5cdH0sIFtnZXRFdmVudHNGb3JEYXRlUmFuZ2UsIGdldEN1cnJlbnRWaWV3UmFuZ2VdKVxuXG5cdHVzZUVmZmVjdCgoKSA9PiB7XG5cdFx0aWYgKGV2ZW50cyAhPT0gbGFzdEV2ZW50c1Byb3AuY3VycmVudCkge1xuXHRcdFx0c2V0Q3VycmVudEV2ZW50cyhldmVudHMpXG5cdFx0XHRsYXN0RXZlbnRzUHJvcC5jdXJyZW50ID0gZXZlbnRzXG5cdFx0fVxuXHR9LCBbZXZlbnRzXSlcblxuXHR1c2VFZmZlY3QoKCkgPT4ge1xuXHRcdGlmIChsb2NhbGUgJiYgbG9jYWxlICE9PSBsYXN0TG9jYWxlUHJvcC5jdXJyZW50KSB7XG5cdFx0XHRzZXRDdXJyZW50TG9jYWxlKGxvY2FsZSlcblx0XHRcdGRheWpzLmxvY2FsZShsb2NhbGUpXG5cdFx0XHRzZXRDdXJyZW50RGF0ZSgocHJldkRhdGUpID0+IHByZXZEYXRlLmxvY2FsZShsb2NhbGUpKVxuXHRcdFx0bGFzdExvY2FsZVByb3AuY3VycmVudCA9IGxvY2FsZVxuXHRcdH1cblx0fSwgW2xvY2FsZV0pXG5cblx0dXNlRWZmZWN0KCgpID0+IHtcblx0XHRpZiAodGltZXpvbmUgJiYgdGltZXpvbmUgIT09IGxhc3RUaW1lem9uZVByb3AuY3VycmVudCkge1xuXHRcdFx0ZGF5anMudHouc2V0RGVmYXVsdCh0aW1lem9uZSlcblx0XHRcdHNldEN1cnJlbnREYXRlKChwcmV2KSA9PiBwcmV2LnR6KHRpbWV6b25lKSlcblx0XHRcdHNldEN1cnJlbnRFdmVudHMoKHByZXYpID0+XG5cdFx0XHRcdHByZXYubWFwKChlKSA9PiAoe1xuXHRcdFx0XHRcdC4uLmUsXG5cdFx0XHRcdFx0c3RhcnQ6IGUuc3RhcnQudHoodGltZXpvbmUpLFxuXHRcdFx0XHRcdGVuZDogZS5lbmQudHoodGltZXpvbmUpLFxuXHRcdFx0XHR9KSlcblx0XHRcdClcblx0XHRcdGxhc3RUaW1lem9uZVByb3AuY3VycmVudCA9IHRpbWV6b25lXG5cdFx0fVxuXHR9LCBbdGltZXpvbmVdKVxuXG5cdGNvbnN0IHVwZGF0ZURhdGVBbmROb3RpZnkgPSB1c2VDYWxsYmFjayhcblx0XHQobmV3RGF0ZTogRGF5anMpID0+IHtcblx0XHRcdHNldEN1cnJlbnREYXRlKG5ld0RhdGUpXG5cdFx0XHRjb25zdCByYW5nZSA9IGNhbGN1bGF0ZVZpZXdSYW5nZShuZXdEYXRlLCB2aWV3LCBmaXJzdERheU9mV2Vlaylcblx0XHRcdG9uRGF0ZUNoYW5nZT8uKG5ld0RhdGUsIHJhbmdlKVxuXHRcdH0sXG5cdFx0W29uRGF0ZUNoYW5nZSwgdmlldywgZmlyc3REYXlPZldlZWtdXG5cdClcblxuXHRjb25zdCBzZWxlY3REYXRlID0gdXBkYXRlRGF0ZUFuZE5vdGlmeVxuXG5cdGNvbnN0IG5hdmlnYXRlUGVyaW9kID0gdXNlQ2FsbGJhY2soXG5cdFx0KGRpcmVjdGlvbjogMSB8IC0xKSA9PiB7XG5cdFx0XHRjb25zdCBuZXdEYXRlID1cblx0XHRcdFx0ZGlyZWN0aW9uID09PSAxXG5cdFx0XHRcdFx0PyBjdXJyZW50RGF0ZS5hZGQoMSwgVklFV19VTklUU1t2aWV3XSlcblx0XHRcdFx0XHQ6IGN1cnJlbnREYXRlLnN1YnRyYWN0KDEsIFZJRVdfVU5JVFNbdmlld10pXG5cdFx0XHR1cGRhdGVEYXRlQW5kTm90aWZ5KG5ld0RhdGUpXG5cdFx0fSxcblx0XHRbY3VycmVudERhdGUsIHZpZXcsIHVwZGF0ZURhdGVBbmROb3RpZnldXG5cdClcblxuXHRjb25zdCBuZXh0UGVyaW9kID0gdXNlQ2FsbGJhY2soKCkgPT4gbmF2aWdhdGVQZXJpb2QoMSksIFtuYXZpZ2F0ZVBlcmlvZF0pXG5cdGNvbnN0IHByZXZQZXJpb2QgPSB1c2VDYWxsYmFjaygoKSA9PiBuYXZpZ2F0ZVBlcmlvZCgtMSksIFtuYXZpZ2F0ZVBlcmlvZF0pXG5cblx0Y29uc3QgdG9kYXkgPSB1c2VDYWxsYmFjayhcblx0XHQoKSA9PiB1cGRhdGVEYXRlQW5kTm90aWZ5KGRheWpzKCkpLFxuXHRcdFt1cGRhdGVEYXRlQW5kTm90aWZ5XVxuXHQpXG5cblx0Y29uc3QgYWRkRXZlbnQgPSB1c2VDYWxsYmFjayhcblx0XHQoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHtcblx0XHRcdHNldEN1cnJlbnRFdmVudHMoKHByZXYpID0+IFsuLi5wcmV2LCBldmVudF0pXG5cdFx0XHRvbkV2ZW50QWRkPy4oZXZlbnQpXG5cdFx0fSxcblx0XHRbb25FdmVudEFkZF1cblx0KVxuXG5cdGNvbnN0IHVwZGF0ZUV2ZW50ID0gdXNlQ2FsbGJhY2soXG5cdFx0KGV2ZW50SWQ6IHN0cmluZyB8IG51bWJlciwgdXBkYXRlczogUGFydGlhbDxDYWxlbmRhckV2ZW50PikgPT4ge1xuXHRcdFx0Y29uc3QgZXZlbnRUb1VwZGF0ZSA9IGN1cnJlbnRFdmVudHMuZmluZCgoZXZlbnQpID0+IGV2ZW50LmlkID09PSBldmVudElkKVxuXHRcdFx0aWYgKCFldmVudFRvVXBkYXRlKSB7XG5cdFx0XHRcdHJldHVyblxuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBuZXdFdmVudCA9IHsgLi4uZXZlbnRUb1VwZGF0ZSwgLi4udXBkYXRlcyB9XG5cdFx0XHRzZXRDdXJyZW50RXZlbnRzKChwcmV2KSA9PlxuXHRcdFx0XHRwcmV2Lm1hcCgoZXZlbnQpID0+IChldmVudC5pZCA9PT0gZXZlbnRJZCA/IG5ld0V2ZW50IDogZXZlbnQpKVxuXHRcdFx0KVxuXHRcdFx0b25FdmVudFVwZGF0ZT8uKG5ld0V2ZW50KVxuXHRcdH0sXG5cdFx0W2N1cnJlbnRFdmVudHMsIG9uRXZlbnRVcGRhdGVdXG5cdClcblxuXHRjb25zdCB1cGRhdGVSZWN1cnJpbmdFdmVudCA9IHVzZUNhbGxiYWNrKFxuXHRcdChcblx0XHRcdGV2ZW50OiBDYWxlbmRhckV2ZW50LFxuXHRcdFx0dXBkYXRlczogUGFydGlhbDxDYWxlbmRhckV2ZW50Pixcblx0XHRcdG9wdGlvbnM6IFJlY3VycmVuY2VFZGl0T3B0aW9uc1xuXHRcdCkgPT4ge1xuXHRcdFx0b25FdmVudFVwZGF0ZT8uKHsgLi4uZXZlbnQsIC4uLnVwZGF0ZXMgfSlcblx0XHRcdHNldEN1cnJlbnRFdmVudHMoXG5cdFx0XHRcdHVwZGF0ZVJlY3VycmluZ0V2ZW50SW1wbCh7XG5cdFx0XHRcdFx0dGFyZ2V0RXZlbnQ6IGV2ZW50LFxuXHRcdFx0XHRcdHVwZGF0ZXMsXG5cdFx0XHRcdFx0Y3VycmVudEV2ZW50cyxcblx0XHRcdFx0XHRzY29wZTogb3B0aW9ucy5zY29wZSxcblx0XHRcdFx0fSlcblx0XHRcdClcblx0XHR9LFxuXHRcdFtjdXJyZW50RXZlbnRzLCBvbkV2ZW50VXBkYXRlXVxuXHQpXG5cblx0Y29uc3QgZGVsZXRlUmVjdXJyaW5nRXZlbnQgPSB1c2VDYWxsYmFjayhcblx0XHQoZXZlbnQ6IENhbGVuZGFyRXZlbnQsIG9wdGlvbnM6IFJlY3VycmVuY2VFZGl0T3B0aW9ucykgPT4ge1xuXHRcdFx0b25FdmVudERlbGV0ZT8uKGV2ZW50KVxuXHRcdFx0c2V0Q3VycmVudEV2ZW50cyhcblx0XHRcdFx0ZGVsZXRlUmVjdXJyaW5nRXZlbnRJbXBsKHtcblx0XHRcdFx0XHR0YXJnZXRFdmVudDogZXZlbnQsXG5cdFx0XHRcdFx0Y3VycmVudEV2ZW50cyxcblx0XHRcdFx0XHRzY29wZTogb3B0aW9ucy5zY29wZSxcblx0XHRcdFx0fSlcblx0XHRcdClcblx0XHR9LFxuXHRcdFtjdXJyZW50RXZlbnRzLCBvbkV2ZW50RGVsZXRlXVxuXHQpXG5cblx0Y29uc3QgZGVsZXRlRXZlbnQgPSB1c2VDYWxsYmFjayhcblx0XHQoZXZlbnRJZDogc3RyaW5nIHwgbnVtYmVyKSA9PiB7XG5cdFx0XHRjb25zdCBldmVudFRvRGVsZXRlID0gY3VycmVudEV2ZW50cy5maW5kKChlKSA9PiBlLmlkID09PSBldmVudElkKVxuXHRcdFx0aWYgKCFldmVudFRvRGVsZXRlKSB7XG5cdFx0XHRcdHJldHVyblxuXHRcdFx0fVxuXG5cdFx0XHRzZXRDdXJyZW50RXZlbnRzKChwcmV2KSA9PiBwcmV2LmZpbHRlcigoZSkgPT4gZS5pZCAhPT0gZXZlbnRJZCkpXG5cdFx0XHRvbkV2ZW50RGVsZXRlPy4oZXZlbnRUb0RlbGV0ZSlcblx0XHR9LFxuXHRcdFtjdXJyZW50RXZlbnRzLCBvbkV2ZW50RGVsZXRlXVxuXHQpXG5cblx0Y29uc3Qgb3BlbkV2ZW50Rm9ybSA9IHVzZUNhbGxiYWNrKFxuXHRcdChldmVudERhdGE/OiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+KSA9PiB7XG5cdFx0XHRpZiAoZXZlbnREYXRhPy5zdGFydCkge1xuXHRcdFx0XHRzZXRTZWxlY3RlZERhdGUoZXZlbnREYXRhLnN0YXJ0KVxuXHRcdFx0fVxuXHRcdFx0Y29uc3Qgc3RhcnQgPSBldmVudERhdGE/LnN0YXJ0ID8/IGN1cnJlbnREYXRlXG5cdFx0XHRzZXRTZWxlY3RlZEV2ZW50KHtcblx0XHRcdFx0dGl0bGU6IHQoJ25ld0V2ZW50JyksXG5cdFx0XHRcdHN0YXJ0LFxuXHRcdFx0XHRlbmQ6IGV2ZW50RGF0YT8uZW5kID8/IHN0YXJ0LmFkZCgxLCAnaG91cicpLFxuXHRcdFx0XHRyZXNvdXJjZUlkOiBldmVudERhdGE/LnJlc291cmNlSWQsXG5cdFx0XHRcdGRlc2NyaXB0aW9uOiAnJyxcblx0XHRcdFx0YWxsRGF5OiBldmVudERhdGE/LmFsbERheSA/PyBmYWxzZSxcblx0XHRcdH0gYXMgQ2FsZW5kYXJFdmVudClcblx0XHRcdHNldElzRXZlbnRGb3JtT3Blbih0cnVlKVxuXHRcdH0sXG5cdFx0W2N1cnJlbnREYXRlLCB0XVxuXHQpXG5cblx0Y29uc3QgY2xvc2VFdmVudEZvcm0gPSB1c2VDYWxsYmFjaygoKSA9PiB7XG5cdFx0c2V0U2VsZWN0ZWREYXRlKG51bGwpXG5cdFx0c2V0U2VsZWN0ZWRFdmVudChudWxsKVxuXHRcdHNldElzRXZlbnRGb3JtT3BlbihmYWxzZSlcblx0fSwgW10pXG5cblx0Y29uc3QgaGFuZGxlVmlld0NoYW5nZSA9IHVzZUNhbGxiYWNrKFxuXHRcdChuZXdWaWV3OiBDYWxlbmRhclZpZXcpID0+IHtcblx0XHRcdHNldFZpZXcobmV3Vmlldylcblx0XHRcdG9uVmlld0NoYW5nZT8uKG5ld1ZpZXcpXG5cdFx0XHQvLyBWaWV3IGNoYW5nZSBhZmZlY3RzIHZpc2libGUgcmFuZ2Ug4oCUIG5vdGlmeSBjb25zdW1lcnNcblx0XHRcdGNvbnN0IHJhbmdlID0gY2FsY3VsYXRlVmlld1JhbmdlKGN1cnJlbnREYXRlLCBuZXdWaWV3LCBmaXJzdERheU9mV2Vlaylcblx0XHRcdG9uRGF0ZUNoYW5nZT8uKGN1cnJlbnREYXRlLCByYW5nZSlcblx0XHR9LFxuXHRcdFtvblZpZXdDaGFuZ2UsIG9uRGF0ZUNoYW5nZSwgY3VycmVudERhdGUsIGZpcnN0RGF5T2ZXZWVrXVxuXHQpXG5cblx0Y29uc3QgZmluZFBhcmVudFJlY3VycmluZ0V2ZW50ID0gdXNlQ2FsbGJhY2soXG5cdFx0KGV2ZW50OiBDYWxlbmRhckV2ZW50KTogQ2FsZW5kYXJFdmVudCB8IG51bGwgPT4ge1xuXHRcdFx0Y29uc3QgdGFyZ2V0VUlEID0gZXZlbnQudWlkXG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRjdXJyZW50RXZlbnRzLmZpbmQoXG5cdFx0XHRcdFx0KGUpID0+IChlLnVpZCB8fCBgJHtlLmlkfUBpbGFteS5jYWxlbmRhcmApID09PSB0YXJnZXRVSUQgJiYgZS5ycnVsZVxuXHRcdFx0XHQpIHx8IG51bGxcblx0XHRcdClcblx0XHR9LFxuXHRcdFtjdXJyZW50RXZlbnRzXVxuXHQpXG5cblx0cmV0dXJuIHtcblx0XHRjdXJyZW50RGF0ZSxcblx0XHR2aWV3LFxuXHRcdGV2ZW50czogcHJvY2Vzc2VkRXZlbnRzLFxuXHRcdHJhd0V2ZW50czogY3VycmVudEV2ZW50cyxcblx0XHRpc0V2ZW50Rm9ybU9wZW4sXG5cdFx0c2VsZWN0ZWRFdmVudCxcblx0XHRzZWxlY3RlZERhdGUsXG5cdFx0Zmlyc3REYXlPZldlZWssXG5cdFx0ZGF5TWF4RXZlbnRzOiBEQVlfTUFYX0VWRU5UU19ERUZBVUxULFxuXHRcdGN1cnJlbnRMb2NhbGUsXG5cdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRzZXRDdXJyZW50RGF0ZSxcblx0XHRzZWxlY3REYXRlLFxuXHRcdHNldFZpZXc6IGhhbmRsZVZpZXdDaGFuZ2UsXG5cdFx0bmV4dFBlcmlvZCxcblx0XHRwcmV2UGVyaW9kLFxuXHRcdHRvZGF5LFxuXHRcdGFkZEV2ZW50LFxuXHRcdHVwZGF0ZUV2ZW50LFxuXHRcdHVwZGF0ZVJlY3VycmluZ0V2ZW50LFxuXHRcdGRlbGV0ZUV2ZW50LFxuXHRcdGRlbGV0ZVJlY3VycmluZ0V2ZW50LFxuXHRcdG9wZW5FdmVudEZvcm0sXG5cdFx0Y2xvc2VFdmVudEZvcm0sXG5cdFx0c2V0U2VsZWN0ZWRFdmVudCxcblx0XHRzZXRJc0V2ZW50Rm9ybU9wZW4sXG5cdFx0c2V0U2VsZWN0ZWREYXRlLFxuXHRcdGdldEV2ZW50c0ZvckRhdGVSYW5nZSxcblx0XHRmaW5kUGFyZW50UmVjdXJyaW5nRXZlbnQsXG5cdFx0dCxcblx0fVxufVxuIiwKICAgICJpbXBvcnQgeyBSUnVsZSB9IGZyb20gJ3JydWxlJ1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzJ1xuaW1wb3J0IHR5cGUgeyBSUnVsZU9wdGlvbnMgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvdHlwZXMnXG5pbXBvcnQgZGF5anMsIHsgdHlwZSBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgb21pdEtleXMsIHNhZmVEYXRlIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbi8qKlxuICogQ29udmVydHMgYSBEYXlqcyBvYmplY3QgdG8gYSBcIkZsb2F0aW5nIFRpbWVcIiBEYXRlIHJlcHJlc2VudGF0aW9uLlxuICogSW4gRmxvYXRpbmcgVGltZSwgd2UgdXNlIGEgVVRDIERhdGUgb2JqZWN0IGJ1dCBzZXQgaXRzIFVUQyBjb21wb25lbnRzXG4gKiB0byBtYXRjaCB0aGUgbG9jYWwgY29tcG9uZW50cyBvZiB0aGUgdXNlcidzIGRhdGUuXG4gKlxuICogVGhpcyBpcyBlc3NlbnRpYWwgZm9yIFJSdWxlIGV2YWx1YXRpb24gYmVjYXVzZSBpdCBlbnN1cmVzIHRoYXQgYSBydWxlXG4gKiBsaWtlIFwiRXZlcnkgV2VkbmVzZGF5XCIgcmVmZXJzIHRvIHRoZSB1c2VyJ3MgbG9jYWwgV2VkbmVzZGF5LCBldmVuIGlmXG4gKiB0aGF0IHRpbWUgZmFsbHMgb24gYSBUaHVyc2RheSBpbiBhY3R1YWwgVVRDLlxuICovXG5jb25zdCB0b0Zsb2F0aW5nRGF0ZSA9IChkOiBEYXlqcyk6IERhdGUgPT4ge1xuXHRyZXR1cm4gbmV3IERhdGUoXG5cdFx0RGF0ZS5VVEMoXG5cdFx0XHRkLnllYXIoKSxcblx0XHRcdGQubW9udGgoKSxcblx0XHRcdGQuZGF0ZSgpLFxuXHRcdFx0ZC5ob3VyKCksXG5cdFx0XHRkLm1pbnV0ZSgpLFxuXHRcdFx0ZC5zZWNvbmQoKSxcblx0XHRcdGQubWlsbGlzZWNvbmQoKVxuXHRcdClcblx0KVxufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgXCJGbG9hdGluZyBUaW1lXCIgRGF0ZSBiYWNrIHRvIGEgRGF5anMgb2JqZWN0IGluIHRoZSBvcmlnaW5hbCBjb250ZXh0LlxuICogSXQgdGFrZXMgdGhlIFlNREhNUyBjb21wb25lbnRzIGZyb20gdGhlIFVUQyBEYXRlIGFuZCBhcHBsaWVzIHRoZW0gdG8gdGhlXG4gKiByZWZlcmVuY2UgRGF5anMgb2JqZWN0IChwcmVzZXJ2aW5nIGl0cyB0aW1lem9uZS9sb2NhbGUpLlxuICovXG5jb25zdCBmcm9tRmxvYXRpbmdEYXRlID0gKGRhdGU6IERhdGUsIHJlZmVyZW5jZTogRGF5anMpOiBEYXlqcyA9PiB7XG5cdHJldHVybiByZWZlcmVuY2Vcblx0XHQueWVhcihkYXRlLmdldFVUQ0Z1bGxZZWFyKCkpXG5cdFx0Lm1vbnRoKGRhdGUuZ2V0VVRDTW9udGgoKSlcblx0XHQuZGF0ZShkYXRlLmdldFVUQ0RhdGUoKSlcblx0XHQuaG91cihkYXRlLmdldFVUQ0hvdXJzKCkpXG5cdFx0Lm1pbnV0ZShkYXRlLmdldFVUQ01pbnV0ZXMoKSlcblx0XHQuc2Vjb25kKGRhdGUuZ2V0VVRDU2Vjb25kcygpKVxuXHRcdC5taWxsaXNlY29uZChkYXRlLmdldFVUQ01pbGxpc2Vjb25kcygpKVxufVxuXG5leHBvcnQgY29uc3QgaXNSZWN1cnJpbmdFdmVudCA9IChldmVudDogQ2FsZW5kYXJFdmVudCk6IGJvb2xlYW4gPT4ge1xuXHRyZXR1cm4gQm9vbGVhbihldmVudC5ycnVsZSB8fCBldmVudC5yZWN1cnJlbmNlSWQgfHwgZXZlbnQudWlkKVxufVxuXG4vKipcbiAqIENvbnNpc3RlbnRseSBkZXJpdmVzIGEgcGFyZW50IFVJRCBmcm9tIGFuIGV2ZW50LlxuICogVXNlcyB0aGUgZXhwbGljaXQgYHVpZGAgaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgZmFsbHMgYmFjayB0byBgJHtpZH1AaWxhbXkuY2FsZW5kYXJgLlxuICovXG5jb25zdCBnZXRFdmVudFBhcmVudFVJRCA9IChldmVudDogQ2FsZW5kYXJFdmVudCk6IHN0cmluZyA9PiB7XG5cdHJldHVybiBldmVudC51aWQgfHwgYCR7ZXZlbnQuaWR9QGlsYW15LmNhbGVuZGFyYFxufVxuXG4vKipcbiAqIEZpbmRzIHRoZSBiYXNlIHJlY3VycmluZyBldmVudCAodGhlIG9uZSB3aXRoIHJydWxlIGFuZCBubyByZWN1cnJlbmNlSWQpXG4gKiB0aGF0IHNoYXJlcyB0aGUgc2FtZSBwYXJlbnQgVUlEIGFzIHRoZSB0YXJnZXQgZXZlbnQuXG4gKiBUaHJvd3MgaWYgbm90IGZvdW5kIOKAlCBjYWxsZXJzIGFzc3VtZSB0aGUgc2VyaWVzIGV4aXN0cy5cbiAqL1xuY29uc3QgZmluZEJhc2VFdmVudEluZGV4ID0gKFxuXHRldmVudHM6IENhbGVuZGFyRXZlbnRbXSxcblx0dGFyZ2V0RXZlbnQ6IENhbGVuZGFyRXZlbnRcbik6IG51bWJlciA9PiB7XG5cdGNvbnN0IHRhcmdldFVpZCA9IGdldEV2ZW50UGFyZW50VUlEKHRhcmdldEV2ZW50KVxuXHRjb25zdCBpbmRleCA9IGV2ZW50cy5maW5kSW5kZXgoXG5cdFx0KGUpID0+IGdldEV2ZW50UGFyZW50VUlEKGUpID09PSB0YXJnZXRVaWQgJiYgZS5ycnVsZSAmJiAhZS5yZWN1cnJlbmNlSWRcblx0KVxuXHRpZiAoaW5kZXggPT09IC0xKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdCYXNlIHJlY3VycmluZyBldmVudCBub3QgZm91bmQnKVxuXHR9XG5cdHJldHVybiBpbmRleFxufVxuXG4vKipcbiAqIEZvciB0aGUgXCJmb2xsb3dpbmdcIiBzY29wZTogdGhlIFVOVElMIGRhdGUgdGhhdCB0ZXJtaW5hdGVzIHRoZSBvcmlnaW5hbFxuICogc2VyaWVzIGlzIHRoZSBlbmQgb2YgdGhlIGRheSBCRUZPUkUgdGhlIHRhcmdldCBldmVudCdzIHN0YXJ0LiBUaGlzIGtlZXBzXG4gKiB0aGUgbGFzdCBwcmUtdGFyZ2V0IG9jY3VycmVuY2UgaW4gdGhlIHRlcm1pbmF0ZWQgc2VyaWVzLlxuICovXG5jb25zdCBnZXRTZXJpZXNUZXJtaW5hdGlvbkRhdGUgPSAodGFyZ2V0RXZlbnQ6IENhbGVuZGFyRXZlbnQpOiBEYXRlID0+XG5cdHRhcmdldEV2ZW50LnN0YXJ0LnN1YnRyYWN0KDEsICdkYXknKS5lbmRPZignZGF5JykudG9EYXRlKClcblxuLyoqXG4gKiBLZWVwcyB0aGUgY2FsZW5kYXIgZGF5IGZyb20gYHRhcmdldGAgd2hpbGUgYXBwbHlpbmcgdGhlIHRpbWUtb2YtZGF5IGZyb20gYHNvdXJjZWAuXG4gKiBVc2VkIHRvIGVkaXQgcmVjdXJyaW5nIHNlcmllcyBhbmNob3JzIHdpdGhvdXQgc2hpZnRpbmcgdGhlIHNlcmllcyB0byBhbiBpbnN0YW5jZSBkYXkuXG4gKi9cbmNvbnN0IHdpdGhUaW1lT2ZEYXkgPSAodGFyZ2V0OiBEYXlqcywgc291cmNlOiBEYXlqcyk6IERheWpzID0+IHtcblx0Y29uc3QgdGltZU9mRGF5TXMgPSBzb3VyY2UuZGlmZihzb3VyY2Uuc3RhcnRPZignZGF5JyksICdtaWxsaXNlY29uZCcpXG5cdHJldHVybiB0YXJnZXQuc3RhcnRPZignZGF5JykuYWRkKHRpbWVPZkRheU1zLCAnbWlsbGlzZWNvbmQnKVxufVxuXG4vKipcbiAqIEZvciBzY29wZSBcImFsbFwiOiBhcHBseSB0aGUgZGVsdGEgYmV0d2VlbiB0aGUgZWRpdGVkIGluc3RhbmNlIGFuZCB0aGUgc3VibWl0dGVkXG4gKiBzdGFydC9lbmQgdG8gdGhlIGJhc2UgZXZlbnQgYW5jaG9yIOKAlCBhdm9pZHMgc2hpZnRpbmcgdGhlIHdob2xlIHNlcmllcyB0byB0aGVcbiAqIGluc3RhbmNlJ3MgY2FsZW5kYXIgZGF5IHdoZW4gdGhlIGZvcm0gaXMgb3BlbmVkIG9uIGUuZy4gRnJpZGF5IG9mIGEgTW9u4oCTRnJpIHJ1bGUuXG4gKi9cbmNvbnN0IGFwcGx5QWxsU2NvcGVVcGRhdGVzID0gKFxuXHRiYXNlRXZlbnQ6IENhbGVuZGFyRXZlbnQsXG5cdHVwZGF0ZXM6IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD5cbik6IHsgc3RhcnQ6IERheWpzOyBlbmQ6IERheWpzOyBycnVsZTogUlJ1bGVPcHRpb25zIHwgdW5kZWZpbmVkIH0gPT4ge1xuXHRsZXQgbmV3U3RhcnQgPSBiYXNlRXZlbnQuc3RhcnRcblx0Ly8gaWYgdGhlIHN0YXJ0IGhhcyBjaGFuZ2VkIGtlZXAgdGhlIHNhbWUgY2FsZW5kYXIgZGF5IGJ1dCB3aXRoIHRoZSBuZXcgdGltZVxuXHRpZiAodXBkYXRlcy5zdGFydCkge1xuXHRcdG5ld1N0YXJ0ID0gd2l0aFRpbWVPZkRheShiYXNlRXZlbnQuc3RhcnQsIHVwZGF0ZXMuc3RhcnQpXG5cdH1cblxuXHRsZXQgbmV3RW5kID0gYmFzZUV2ZW50LmVuZFxuXHQvLyBlbnN1cmUgdGhlIG5ldyBlbmQgaXMgY29tcHV0ZSBzbyB0aGUgZHVyYXRpb24gaXMgcHJlc2VydmVkXG5cdGlmICh1cGRhdGVzLnN0YXJ0ICYmIHVwZGF0ZXMuZW5kKSB7XG5cdFx0bmV3RW5kID0gbmV3U3RhcnQuYWRkKHVwZGF0ZXMuZW5kLmRpZmYodXBkYXRlcy5zdGFydCksICdtaWxsaXNlY29uZCcpXG5cdH0gZWxzZSBpZiAodXBkYXRlcy5zdGFydCkge1xuXHRcdG5ld0VuZCA9IG5ld1N0YXJ0LmFkZChiYXNlRXZlbnQuZW5kLmRpZmYoYmFzZUV2ZW50LnN0YXJ0KSwgJ21pbGxpc2Vjb25kJylcblx0fSBlbHNlIGlmICh1cGRhdGVzLmVuZCkge1xuXHRcdG5ld0VuZCA9IHdpdGhUaW1lT2ZEYXkoYmFzZUV2ZW50LmVuZCwgdXBkYXRlcy5lbmQpXG5cdH1cblxuXHRjb25zdCBtZXJnZWRScnVsZSA9IHVwZGF0ZXMucnJ1bGUgPz8gYmFzZUV2ZW50LnJydWxlXG5cdGxldCBuZXdScnVsZTogUlJ1bGVPcHRpb25zIHwgdW5kZWZpbmVkXG5cdGlmIChtZXJnZWRScnVsZSkge1xuXHRcdG5ld1JydWxlID0geyAuLi5tZXJnZWRScnVsZSwgZHRzdGFydDogbmV3U3RhcnQudG9EYXRlKCkgfVxuXHR9XG5cblx0cmV0dXJuIHsgc3RhcnQ6IG5ld1N0YXJ0LCBlbmQ6IG5ld0VuZCwgcnJ1bGU6IG5ld1JydWxlIH1cbn1cblxuaW50ZXJmYWNlIEdlbmVyYXRlUmVjdXJyaW5nRXZlbnRzUHJvcHMge1xuXHRldmVudDogQ2FsZW5kYXJFdmVudFxuXHRjdXJyZW50RXZlbnRzOiBDYWxlbmRhckV2ZW50W11cblx0c3RhcnREYXRlOiBEYXlqc1xuXHRlbmREYXRlOiBEYXlqc1xufVxuXG5leHBvcnQgY29uc3QgZ2VuZXJhdGVSZWN1cnJpbmdFdmVudHMgPSAoe1xuXHRldmVudCxcblx0Y3VycmVudEV2ZW50cyxcblx0c3RhcnREYXRlLFxuXHRlbmREYXRlLFxufTogR2VuZXJhdGVSZWN1cnJpbmdFdmVudHNQcm9wcyk6IENhbGVuZGFyRXZlbnRbXSA9PiB7XG5cdC8vIElmIG5vdCBhIHJlY3VycmluZyBldmVudCwgcmV0dXJuIGVtcHR5IGFycmF5XG5cdGlmICghZXZlbnQucnJ1bGUpIHtcblx0XHRyZXR1cm4gW11cblx0fVxuXG5cdHRyeSB7XG5cdFx0Ly8gRFRTVEFSVCBhbmQgU0VBUkNIIFdJTkRPVyBUUkFOU0ZPUk1BVElPTlxuXHRcdC8vIFRyYW5zZm9ybSBhbGwgZGF0ZXMgdG8gXCJmbG9hdGluZyB0aW1lXCIgKFVUQyB3aXRoIGxvY2FsIGNvbXBvbmVudHMpXG5cdFx0Ly8gVGhpcyBlbnN1cmVzIFJSdWxlIGV2YWx1YXRlcyBcIldlZG5lc2RheVwiIGFzIHRoZSB1c2VyJ3MgbG9jYWwgV2VkbmVzZGF5XG5cdFx0Y29uc3QgZmxvYXRpbmdTdGFydCA9IHRvRmxvYXRpbmdEYXRlKGV2ZW50LnN0YXJ0KVxuXHRcdGNvbnN0IGZsb2F0aW5nVW50aWwgPSBldmVudC5ycnVsZS51bnRpbFxuXHRcdFx0PyB0b0Zsb2F0aW5nRGF0ZShkYXlqcyhldmVudC5ycnVsZS51bnRpbCkpXG5cdFx0XHQ6IHVuZGVmaW5lZFxuXG5cdFx0Y29uc3QgcnVsZU9wdGlvbnM6IFJSdWxlT3B0aW9ucyA9IHtcblx0XHRcdC4uLmV2ZW50LnJydWxlLFxuXHRcdFx0ZHRzdGFydDogZmxvYXRpbmdTdGFydCxcblx0XHRcdHVudGlsOiBmbG9hdGluZ1VudGlsLFxuXHRcdH1cblx0XHRjb25zdCBydWxlID0gbmV3IFJSdWxlKHJ1bGVPcHRpb25zKVxuXG5cdFx0Y29uc3QgcGFyZW50VWlkID0gZ2V0RXZlbnRQYXJlbnRVSUQoZXZlbnQpXG5cdFx0Y29uc3Qgb3ZlcnJpZGVzID0gY3VycmVudEV2ZW50cy5maWx0ZXIoXG5cdFx0XHQoZSkgPT4gZS5yZWN1cnJlbmNlSWQgJiYgZ2V0RXZlbnRQYXJlbnRVSUQoZSkgPT09IHBhcmVudFVpZFxuXHRcdClcblxuXHRcdC8vIENhbGN1bGF0ZSBldmVudCBkdXJhdGlvbiB0byBleHBhbmQgc2VhcmNoIHdpbmRvdyBmb3IgZXZlbnRzIHRoYXQgc3BhbiB0aGUgcmFuZ2Vcblx0XHRjb25zdCBldmVudER1cmF0aW9uID0gZXZlbnQuZW5kLmRpZmYoZXZlbnQuc3RhcnQpXG5cblx0XHQvLyBFeHBhbmQgc2VhcmNoIHdpbmRvdyBiYWNrd2FyZCBieSBldmVudCBkdXJhdGlvbiB0byBjYXRjaCBldmVudHMgdGhhdCBzdGFydCBiZWZvcmVcblx0XHQvLyB0aGUgcmFuZ2UgYnV0IHNwYW4gaW50byBpdFxuXHRcdGNvbnN0IGV4cGFuZGVkU3RhcnREYXRlVGltZSA9IHRvRmxvYXRpbmdEYXRlKFxuXHRcdFx0c3RhcnREYXRlLnN1YnRyYWN0KGV2ZW50RHVyYXRpb24sICdtaWxsaXNlY29uZCcpXG5cdFx0KVxuXHRcdGNvbnN0IGVuZERhdGVUaW1lID0gdG9GbG9hdGluZ0RhdGUoZW5kRGF0ZSlcblxuXHRcdC8vIEdldCBhbGwgb2NjdXJyZW5jZXMgaW4gdGhlIGV4cGFuZGVkIHJhbmdlXG5cdFx0Y29uc3Qgb2NjdXJyZW5jZXMgPSBydWxlLmJldHdlZW4oZXhwYW5kZWRTdGFydERhdGVUaW1lLCBlbmREYXRlVGltZSwgdHJ1ZSlcblxuXHRcdC8vIENvbnZlcnQgb2NjdXJyZW5jZXMgdG8gQ2FsZW5kYXJFdmVudCBpbnN0YW5jZXNcblx0XHRjb25zdCByZWN1cnJpbmdFdmVudHM6IENhbGVuZGFyRXZlbnRbXSA9IG9jY3VycmVuY2VzXG5cdFx0XHQubWFwKChvY2N1cnJlbmNlLCBpbmRleCkgPT4ge1xuXHRcdFx0XHRjb25zdCBvY2N1cnJlbmNlRGF0ZSA9IGZyb21GbG9hdGluZ0RhdGUob2NjdXJyZW5jZSwgZXZlbnQuc3RhcnQpXG5cdFx0XHRcdGNvbnN0IGV4aXN0aW5nT3ZlcnJpZGUgPSBvdmVycmlkZXMuZmluZCgoZSkgPT5cblx0XHRcdFx0XHRzYWZlRGF0ZShlLnJlY3VycmVuY2VJZCk/LmlzU2FtZShvY2N1cnJlbmNlRGF0ZSlcblx0XHRcdFx0KVxuXG5cdFx0XHRcdC8vIElmIHRoZXJlJ3MgYW4gb3ZlcnJpZGUsIHVzZSBpdFxuXHRcdFx0XHRpZiAoZXhpc3RpbmdPdmVycmlkZSkge1xuXHRcdFx0XHRcdHJldHVybiB7IC4uLmV2ZW50LCAuLi5leGlzdGluZ092ZXJyaWRlIH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIENhbGN1bGF0ZSB0aGUgZHVyYXRpb24gZnJvbSB0aGUgb3JpZ2luYWwgZXZlbnRcblx0XHRcdFx0Y29uc3Qgb3JpZ2luYWxEdXJhdGlvbiA9IGV2ZW50LmVuZC5kaWZmKGV2ZW50LnN0YXJ0KVxuXHRcdFx0XHRjb25zdCBuZXdFbmRUaW1lID0gb2NjdXJyZW5jZURhdGUuYWRkKG9yaWdpbmFsRHVyYXRpb24sICdtaWxsaXNlY29uZCcpXG5cdFx0XHRcdGNvbnN0IHJlY3VycmluZ0V2ZW50SWQgPSBgJHtldmVudC5pZH1fJHtpbmRleH1gXG5cdFx0XHRcdGNvbnN0IHBhcmVudFVJRCA9IGdldEV2ZW50UGFyZW50VUlEKGV2ZW50KVxuXG5cdFx0XHRcdC8vIENyZWF0ZSB0aGUgcmVjdXJyaW5nIGV2ZW50IGluc3RhbmNlXG5cdFx0XHRcdGNvbnN0IHJlY3VycmluZ0V2ZW50OiBDYWxlbmRhckV2ZW50ID0ge1xuXHRcdFx0XHRcdC4uLmV2ZW50LFxuXHRcdFx0XHRcdGlkOiByZWN1cnJpbmdFdmVudElkLFxuXHRcdFx0XHRcdHN0YXJ0OiBvY2N1cnJlbmNlRGF0ZSxcblx0XHRcdFx0XHRlbmQ6IG5ld0VuZFRpbWUsXG5cdFx0XHRcdFx0dWlkOiBwYXJlbnRVSUQsIC8vIFNhbWUgVUlEIGFzIHBhcmVudCBmb3IgcHJvcGVyIGdyb3VwaW5nXG5cdFx0XHRcdFx0cnJ1bGU6IHVuZGVmaW5lZCwgLy8gSW5zdGFuY2UgZXZlbnRzIGRvbid0IGhhdmUgUlJVTEVcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiByZWN1cnJpbmdFdmVudFxuXHRcdFx0fSlcblx0XHRcdC5maWx0ZXIoKHJlY3VycmluZ0V2ZW50KSA9PiB7XG5cdFx0XHRcdC8vIEZpbHRlciBvdXQgRVhEQVRFIGV4Y2x1c2lvbnNcblx0XHRcdFx0Y29uc3QgaGFzRXhkYXRlcyA9IGV2ZW50LmV4ZGF0ZXMgJiYgZXZlbnQuZXhkYXRlcy5sZW5ndGggPiAwXG5cdFx0XHRcdGlmIChoYXNFeGRhdGVzKSB7XG5cdFx0XHRcdFx0Y29uc3QgZXZlbnRTdGFydElTTyA9IHJlY3VycmluZ0V2ZW50LnN0YXJ0LnRvSVNPU3RyaW5nKClcblx0XHRcdFx0XHRjb25zdCBpc0V4Y2x1ZGVkID0gZXZlbnQuZXhkYXRlcz8uaW5jbHVkZXMoZXZlbnRTdGFydElTTylcblx0XHRcdFx0XHRpZiAoaXNFeGNsdWRlZCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gRmlsdGVyIHRvIG9ubHkgaW5jbHVkZSBldmVudHMgdGhhdCBzcGFuIHRocm91Z2ggdGhlIG9yaWdpbmFsIHJlcXVlc3RlZCBkYXRlIHJhbmdlXG5cdFx0XHRcdC8vIEFuIGV2ZW50IHNwYW5zIHRoZSByYW5nZSBpZjogZXZlbnRfc3RhcnQgPCByYW5nZV9lbmQgQU5EIGV2ZW50X2VuZCA+IHJhbmdlX3N0YXJ0XG5cdFx0XHRcdC8vIFVzZSBpc1NhbWVPckJlZm9yZS9pc1NhbWVPckFmdGVyIHRvIGluY2x1ZGUgYm91bmRhcnkgY2FzZXNcblx0XHRcdFx0Y29uc3QgZXZlbnRTcGFuc1JhbmdlID1cblx0XHRcdFx0XHRyZWN1cnJpbmdFdmVudC5zdGFydC5pc1NhbWVPckJlZm9yZShlbmREYXRlKSAmJlxuXHRcdFx0XHRcdHJlY3VycmluZ0V2ZW50LmVuZC5pc1NhbWVPckFmdGVyKHN0YXJ0RGF0ZSlcblxuXHRcdFx0XHRyZXR1cm4gZXZlbnRTcGFuc1JhbmdlXG5cdFx0XHR9KVxuXG5cdFx0cmV0dXJuIHJlY3VycmluZ0V2ZW50c1xuXHR9IGNhdGNoIChlcnJvcikge1xuXHRcdC8vIEhhbmRsZSBpbnZhbGlkIFJSVUxFIG9wdGlvbnNcblx0XHR0aHJvdyBuZXcgRXJyb3IoXG5cdFx0XHRgSW52YWxpZCBSUlVMRSBvcHRpb25zOiAke0pTT04uc3RyaW5naWZ5KGV2ZW50LnJydWxlKX0uIEVycm9yOiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InfWBcblx0XHQpXG5cdH1cbn1cblxuaW50ZXJmYWNlIFVwZGF0ZVJlY3VycmluZ0V2ZW50UHJvcHMge1xuXHR0YXJnZXRFdmVudDogQ2FsZW5kYXJFdmVudFxuXHR1cGRhdGVzOiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+XG5cdGN1cnJlbnRFdmVudHM6IENhbGVuZGFyRXZlbnRbXVxuXHRzY29wZTogJ3RoaXMnIHwgJ2ZvbGxvd2luZycgfCAnYWxsJ1xufVxuXG5leHBvcnQgY29uc3QgdXBkYXRlUmVjdXJyaW5nRXZlbnQgPSAoe1xuXHR0YXJnZXRFdmVudCxcblx0dXBkYXRlcyxcblx0Y3VycmVudEV2ZW50cyxcblx0c2NvcGUsXG59OiBVcGRhdGVSZWN1cnJpbmdFdmVudFByb3BzKTogQ2FsZW5kYXJFdmVudFtdID0+IHtcblx0Y29uc3QgdXBkYXRlZEV2ZW50cyA9IFsuLi5jdXJyZW50RXZlbnRzXVxuXHRjb25zdCBiYXNlRXZlbnRJbmRleCA9IGZpbmRCYXNlRXZlbnRJbmRleCh1cGRhdGVkRXZlbnRzLCB0YXJnZXRFdmVudClcblx0Y29uc3QgYmFzZUV2ZW50ID0gdXBkYXRlZEV2ZW50c1tiYXNlRXZlbnRJbmRleF1cblxuXHRzd2l0Y2ggKHNjb3BlKSB7XG5cdFx0Y2FzZSAndGhpcyc6IHtcblx0XHRcdC8vIFwiVGhpcyBldmVudCBvbmx5XCIgLSBBZGQgRVhEQVRFIHRvIGJhc2UgZXZlbnQgYW5kIGNyZWF0ZSBzdGFuZGFsb25lIG1vZGlmaWVkIGV2ZW50XG5cdFx0XHRjb25zdCB0YXJnZXRFdmVudFN0YXJ0SVNPID0gdGFyZ2V0RXZlbnQuc3RhcnQudG9JU09TdHJpbmcoKVxuXHRcdFx0Y29uc3QgZXhpc3RpbmdFeGRhdGVzID0gYmFzZUV2ZW50LmV4ZGF0ZXMgfHwgW11cblx0XHRcdGNvbnN0IHVwZGF0ZWRFeGRhdGVzID0gWy4uLmV4aXN0aW5nRXhkYXRlcywgdGFyZ2V0RXZlbnRTdGFydElTT11cblxuXHRcdFx0Y29uc3QgdXBkYXRlZEJhc2VFdmVudCA9IHtcblx0XHRcdFx0Li4uYmFzZUV2ZW50LFxuXHRcdFx0XHRleGRhdGVzOiB1cGRhdGVkRXhkYXRlcyxcblx0XHRcdH1cblx0XHRcdHVwZGF0ZWRFdmVudHNbYmFzZUV2ZW50SW5kZXhdID0gdXBkYXRlZEJhc2VFdmVudFxuXG5cdFx0XHQvLyBDcmVhdGUgc3RhbmRhbG9uZSBtb2RpZmllZCBldmVudCB3aXRoIHJlY3VycmVuY2VJZFxuXHRcdFx0Y29uc3QgbW9kaWZpZWRFdmVudElkID0gYCR7dGFyZ2V0RXZlbnQuaWR9X21vZGlmaWVkXyR7RGF0ZS5ub3coKX1gXG5cdFx0XHRjb25zdCBtb2RpZmllZEV2ZW50OiBDYWxlbmRhckV2ZW50ID0ge1xuXHRcdFx0XHQvLyBAdHMtZXhwZWN0LWVycm9yIFRPRE86IGZpeCB0aGUgdHlwZXNcblx0XHRcdFx0Li4ub21pdEtleXModGFyZ2V0RXZlbnQsIFsnd2lkdGgnLCAnaGVpZ2h0JywgJ3RvcCcsICdsZWZ0JywgJ3JpZ2h0J10pLFxuXHRcdFx0XHQuLi51cGRhdGVzLFxuXHRcdFx0XHRpZDogbW9kaWZpZWRFdmVudElkLFxuXHRcdFx0XHRyZWN1cnJlbmNlSWQ6IHRhcmdldEV2ZW50U3RhcnRJU08sIC8vIFRoaXMgbWFya3MgaXQgYXMgYSBtb2RpZmllZCBpbnN0YW5jZVxuXHRcdFx0XHR1aWQ6IGdldEV2ZW50UGFyZW50VUlEKGJhc2VFdmVudCksIC8vIEtlZXAgc2FtZSBVSUQgYXMgYmFzZSBldmVudCAoaUNhbGVuZGFyIHN0YW5kYXJkKVxuXHRcdFx0XHRycnVsZTogdW5kZWZpbmVkLCAvLyBTdGFuZGFsb25lIGV2ZW50cyBkb24ndCBoYXZlIFJSVUxFXG5cdFx0XHR9IGFzIENhbGVuZGFyRXZlbnRcblx0XHRcdHVwZGF0ZWRFdmVudHMucHVzaChtb2RpZmllZEV2ZW50KVxuXHRcdFx0YnJlYWtcblx0XHR9XG5cblx0XHRjYXNlICdmb2xsb3dpbmcnOiB7XG5cdFx0XHQvLyBcIlRoaXMgYW5kIGZvbGxvd2luZ1wiIC0gVGVybWluYXRlIG9yaWdpbmFsIHNlcmllcyBhbmQgY3JlYXRlIG5ldyBzZXJpZXNcblx0XHRcdGNvbnN0IHRlcm1pbmF0aW9uRGF0ZSA9IGdldFNlcmllc1Rlcm1pbmF0aW9uRGF0ZSh0YXJnZXRFdmVudClcblxuXHRcdFx0Ly8gVXBkYXRlIG9yaWdpbmFsIHNlcmllcyB3aXRoIFVOVElMIHRvIGVuZCBiZWZvcmUgdGFyZ2V0IGRhdGVcblx0XHRcdGNvbnN0IHRlcm1pbmF0ZWRFdmVudCA9IHtcblx0XHRcdFx0Li4uYmFzZUV2ZW50LFxuXHRcdFx0XHRycnVsZToge1xuXHRcdFx0XHRcdC4uLmJhc2VFdmVudC5ycnVsZSxcblx0XHRcdFx0XHR1bnRpbDogdGVybWluYXRpb25EYXRlLFxuXHRcdFx0XHR9IGFzIFJSdWxlT3B0aW9ucyxcblx0XHRcdH1cblx0XHRcdHVwZGF0ZWRFdmVudHNbYmFzZUV2ZW50SW5kZXhdID0gdGVybWluYXRlZEV2ZW50XG5cblx0XHRcdC8vIENyZWF0ZSBuZXcgc2VyaWVzIHN0YXJ0aW5nIGZyb20gdGFyZ2V0IGRhdGVcblx0XHRcdGNvbnN0IG9yaWdpbmFsRHVyYXRpb24gPSBiYXNlRXZlbnQuZW5kLmRpZmYoYmFzZUV2ZW50LnN0YXJ0KVxuXHRcdFx0Y29uc3QgbmV3U2VyaWVzU3RhcnRUaW1lID0gdXBkYXRlcy5zdGFydCB8fCB0YXJnZXRFdmVudC5zdGFydFxuXHRcdFx0Y29uc3QgbmV3U2VyaWVzRW5kVGltZSA9XG5cdFx0XHRcdHVwZGF0ZXMuZW5kIHx8IG5ld1Nlcmllc1N0YXJ0VGltZS5hZGQob3JpZ2luYWxEdXJhdGlvbilcblx0XHRcdGNvbnN0IG5ld1Nlcmllc0lkID0gYCR7YmFzZUV2ZW50LmlkfV9mb2xsb3dpbmdgXG5cdFx0XHRjb25zdCBuZXdTZXJpZXNVSUQgPSBgJHtuZXdTZXJpZXNJZH1AaWxhbXkuY2FsZW5kYXJgXG5cblx0XHRcdGNvbnN0IG5ld1Nlcmllc0V2ZW50OiBDYWxlbmRhckV2ZW50ID0ge1xuXHRcdFx0XHQuLi5iYXNlRXZlbnQsXG5cdFx0XHRcdC4uLnVwZGF0ZXMsXG5cdFx0XHRcdHJydWxlOiB7XG5cdFx0XHRcdFx0Li4uYmFzZUV2ZW50LnJydWxlLFxuXHRcdFx0XHRcdC4uLnVwZGF0ZXMucnJ1bGUsXG5cdFx0XHRcdFx0ZHRzdGFydDogbmV3U2VyaWVzU3RhcnRUaW1lLnRvRGF0ZSgpLFxuXHRcdFx0XHR9IGFzIFJSdWxlT3B0aW9ucyxcblx0XHRcdFx0aWQ6IG5ld1Nlcmllc0lkLFxuXHRcdFx0XHR1aWQ6IG5ld1Nlcmllc1VJRCwgLy8gTmV3IFVJRCBmb3IgbmV3IHNlcmllc1xuXHRcdFx0XHRzdGFydDogbmV3U2VyaWVzU3RhcnRUaW1lLFxuXHRcdFx0XHRlbmQ6IG5ld1Nlcmllc0VuZFRpbWUsXG5cdFx0XHRcdHJlY3VycmVuY2VJZDogdW5kZWZpbmVkLCAvLyBUaGlzIGlzIGEgbmV3IGJhc2UgZXZlbnQsIG5vdCBhbiBpbnN0YW5jZVxuXHRcdFx0fVxuXHRcdFx0dXBkYXRlZEV2ZW50cy5wdXNoKG5ld1Nlcmllc0V2ZW50KVxuXHRcdFx0YnJlYWtcblx0XHR9XG5cblx0XHRjYXNlICdhbGwnOiB7XG5cdFx0XHQvLyBcIkFsbCBldmVudHNcIiAtIFVwZGF0ZSB0aGUgYmFzZSByZWN1cnJpbmcgZXZlbnQgKGFuY2hvciBkYXRlcywgbm90IGluc3RhbmNlIGRheSlcblx0XHRcdGNvbnN0IGFuY2hvcmVkID0gYXBwbHlBbGxTY29wZVVwZGF0ZXMoYmFzZUV2ZW50LCB1cGRhdGVzKVxuXHRcdFx0dXBkYXRlZEV2ZW50c1tiYXNlRXZlbnRJbmRleF0gPSB7XG5cdFx0XHRcdC4uLmJhc2VFdmVudCxcblx0XHRcdFx0Li4udXBkYXRlcyxcblx0XHRcdFx0c3RhcnQ6IGFuY2hvcmVkLnN0YXJ0LFxuXHRcdFx0XHRlbmQ6IGFuY2hvcmVkLmVuZCxcblx0XHRcdFx0cnJ1bGU6IGFuY2hvcmVkLnJydWxlLFxuXHRcdFx0fVxuXHRcdFx0YnJlYWtcblx0XHR9XG5cblx0XHRkZWZhdWx0OlxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0XHRgSW52YWxpZCBzY29wZTogJHtzY29wZX0uIE11c3QgYmUgJ3RoaXMnLCAnZm9sbG93aW5nJywgb3IgJ2FsbCdgXG5cdFx0XHQpXG5cdH1cblxuXHRyZXR1cm4gdXBkYXRlZEV2ZW50c1xufVxuXG5pbnRlcmZhY2UgRGVsZXRlUmVjdXJyaW5nRXZlbnRQcm9wcyB7XG5cdHRhcmdldEV2ZW50OiBDYWxlbmRhckV2ZW50XG5cdGN1cnJlbnRFdmVudHM6IENhbGVuZGFyRXZlbnRbXVxuXHRzY29wZTogJ3RoaXMnIHwgJ2ZvbGxvd2luZycgfCAnYWxsJ1xufVxuXG5leHBvcnQgY29uc3QgZGVsZXRlUmVjdXJyaW5nRXZlbnQgPSAoe1xuXHR0YXJnZXRFdmVudCxcblx0Y3VycmVudEV2ZW50cyxcblx0c2NvcGUsXG59OiBEZWxldGVSZWN1cnJpbmdFdmVudFByb3BzKTogQ2FsZW5kYXJFdmVudFtdID0+IHtcblx0Y29uc3QgdXBkYXRlZEV2ZW50cyA9IFsuLi5jdXJyZW50RXZlbnRzXVxuXHRjb25zdCBiYXNlRXZlbnRJbmRleCA9IGZpbmRCYXNlRXZlbnRJbmRleCh1cGRhdGVkRXZlbnRzLCB0YXJnZXRFdmVudClcblx0Y29uc3QgYmFzZUV2ZW50ID0gdXBkYXRlZEV2ZW50c1tiYXNlRXZlbnRJbmRleF1cblxuXHRzd2l0Y2ggKHNjb3BlKSB7XG5cdFx0Y2FzZSAndGhpcyc6IHtcblx0XHRcdC8vIFwiVGhpcyBldmVudCBvbmx5XCIgLSBBZGQgRVhEQVRFIHRvIGV4Y2x1ZGUgdGhpcyBvY2N1cnJlbmNlXG5cdFx0XHRjb25zdCB0YXJnZXRFdmVudFN0YXJ0SVNPID0gdGFyZ2V0RXZlbnQuc3RhcnQudG9JU09TdHJpbmcoKVxuXHRcdFx0Y29uc3QgZXhpc3RpbmdFeGRhdGVzID0gYmFzZUV2ZW50LmV4ZGF0ZXMgfHwgW11cblx0XHRcdGNvbnN0IHVwZGF0ZWRFeGRhdGVzID0gWy4uLmV4aXN0aW5nRXhkYXRlcywgdGFyZ2V0RXZlbnRTdGFydElTT11cblxuXHRcdFx0Y29uc3QgdXBkYXRlZEJhc2VFdmVudCA9IHsgLi4uYmFzZUV2ZW50LCBleGRhdGVzOiB1cGRhdGVkRXhkYXRlcyB9XG5cdFx0XHR1cGRhdGVkRXZlbnRzW2Jhc2VFdmVudEluZGV4XSA9IHVwZGF0ZWRCYXNlRXZlbnRcblx0XHRcdGJyZWFrXG5cdFx0fVxuXG5cdFx0Y2FzZSAnZm9sbG93aW5nJzoge1xuXHRcdFx0Ly8gXCJUaGlzIGFuZCBmb2xsb3dpbmdcIiAtIFRlcm1pbmF0ZSBzZXJpZXMgd2l0aCBVTlRJTCBiZWZvcmUgdGFyZ2V0IGRhdGVcblx0XHRcdGNvbnN0IHRlcm1pbmF0ZWRFdmVudCA9IHtcblx0XHRcdFx0Li4uYmFzZUV2ZW50LFxuXHRcdFx0XHRycnVsZToge1xuXHRcdFx0XHRcdC4uLmJhc2VFdmVudC5ycnVsZSxcblx0XHRcdFx0XHR1bnRpbDogZ2V0U2VyaWVzVGVybWluYXRpb25EYXRlKHRhcmdldEV2ZW50KSxcblx0XHRcdFx0fSBhcyBSUnVsZU9wdGlvbnMsXG5cdFx0XHR9XG5cdFx0XHR1cGRhdGVkRXZlbnRzW2Jhc2VFdmVudEluZGV4XSA9IHRlcm1pbmF0ZWRFdmVudFxuXHRcdFx0YnJlYWtcblx0XHR9XG5cblx0XHRjYXNlICdhbGwnOiB7XG5cdFx0XHQvLyBcIkFsbCBldmVudHNcIiAtIFJlbW92ZSB0aGUgZW50aXJlIHJlY3VycmluZyBzZXJpZXNcblx0XHRcdGNvbnN0IHRhcmdldFVpZCA9IGdldEV2ZW50UGFyZW50VUlEKHRhcmdldEV2ZW50KVxuXHRcdFx0Y29uc3QgZXZlbnRzV2l0aG91dFRhcmdldFNlcmllcyA9IHVwZGF0ZWRFdmVudHMuZmlsdGVyKFxuXHRcdFx0XHQoZSkgPT4gZ2V0RXZlbnRQYXJlbnRVSUQoZSkgIT09IHRhcmdldFVpZFxuXHRcdFx0KVxuXHRcdFx0cmV0dXJuIGV2ZW50c1dpdGhvdXRUYXJnZXRTZXJpZXNcblx0XHR9XG5cblx0XHRkZWZhdWx0OlxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0XHRgSW52YWxpZCBzY29wZTogJHtzY29wZX0uIE11c3QgYmUgJ3RoaXMnLCAnZm9sbG93aW5nJywgb3IgJ2FsbCdgXG5cdFx0XHQpXG5cdH1cblxuXHRyZXR1cm4gdXBkYXRlZEV2ZW50c1xufVxuIiwKICAgICJpbXBvcnQgdHlwZSB7IFRyYW5zbGF0aW9ucyB9IGZyb20gJy4vdHlwZXMnXG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0VHJhbnNsYXRpb25zOiBUcmFuc2xhdGlvbnMgPSB7XG5cdC8vIENvbW1vbiBhY3Rpb25zXG5cdHRvZGF5OiAnVG9kYXknLFxuXHRjcmVhdGU6ICdDcmVhdGUnLFxuXHRuZXc6ICdOZXcnLFxuXHR1cGRhdGU6ICdVcGRhdGUnLFxuXHRkZWxldGU6ICdEZWxldGUnLFxuXHRjYW5jZWw6ICdDYW5jZWwnLFxuXHRleHBvcnQ6ICdFeHBvcnQnLFxuXG5cdC8vIEV2ZW50IHJlbGF0ZWRcblx0ZXZlbnQ6ICdFdmVudCcsXG5cdGV2ZW50czogJ0V2ZW50cycsXG5cdG5ld0V2ZW50OiAnTmV3IEV2ZW50Jyxcblx0dGl0bGU6ICdUaXRsZScsXG5cdGRlc2NyaXB0aW9uOiAnRGVzY3JpcHRpb24nLFxuXHRsb2NhdGlvbjogJ0xvY2F0aW9uJyxcblx0YWxsRGF5OiAnQWxsIGRheScsXG5cdHN0YXJ0RGF0ZTogJ1N0YXJ0IERhdGUnLFxuXHRlbmREYXRlOiAnRW5kIERhdGUnLFxuXHRzdGFydFRpbWU6ICdTdGFydCBUaW1lJyxcblx0c2VhcmNoVGltZTogJ1NlYXJjaCB0aW1lLi4uJyxcblx0ZW5kVGltZTogJ0VuZCBUaW1lJyxcblx0Y29sb3I6ICdDb2xvcicsXG5cblx0Ly8gRXZlbnQgZm9ybVxuXHRjcmVhdGVFdmVudDogJ0NyZWF0ZSBFdmVudCcsXG5cdGVkaXRFdmVudDogJ0VkaXQgRXZlbnQnLFxuXHRhZGROZXdFdmVudDogJ0FkZCBhIG5ldyBldmVudCB0byB5b3VyIGNhbGVuZGFyJyxcblx0ZWRpdEV2ZW50RGV0YWlsczogJ0VkaXQgeW91ciBldmVudCBkZXRhaWxzJyxcblx0ZXZlbnRUaXRsZVBsYWNlaG9sZGVyOiAnRXZlbnQgdGl0bGUnLFxuXHRldmVudERlc2NyaXB0aW9uUGxhY2Vob2xkZXI6ICdFdmVudCBkZXNjcmlwdGlvbiAob3B0aW9uYWwpJyxcblx0ZXZlbnRMb2NhdGlvblBsYWNlaG9sZGVyOiAnRXZlbnQgbG9jYXRpb24gKG9wdGlvbmFsKScsXG5cblx0Ly8gUmVjdXJyZW5jZVxuXHRyZXBlYXQ6ICdSZXBlYXQnLFxuXHRyZXBlYXRzOiAnUmVwZWF0cycsXG5cdGN1c3RvbVJlY3VycmVuY2U6ICdDdXN0b20gcmVjdXJyZW5jZScsXG5cdGRhaWx5OiAnRGFpbHknLFxuXHR3ZWVrbHk6ICdXZWVrbHknLFxuXHRtb250aGx5OiAnTW9udGhseScsXG5cdHllYXJseTogJ1llYXJseScsXG5cdGludGVydmFsOiAnSW50ZXJ2YWwnLFxuXHRyZXBlYXRPbjogJ1JlcGVhdCBvbicsXG5cdG5ldmVyOiAnTmV2ZXInLFxuXHRjb3VudDogJ0NvdW50Jyxcblx0ZXZlcnk6ICdFdmVyeScsXG5cdGVuZHM6ICdFbmRzJyxcblx0YWZ0ZXI6ICdBZnRlcicsXG5cdG9jY3VycmVuY2VzOiAnb2NjdXJyZW5jZXMnLFxuXHRvbjogJ09uJyxcblxuXHQvLyBSZWN1cnJlbmNlIGVkaXQgZGlhbG9nXG5cdGVkaXRSZWN1cnJpbmdFdmVudDogJ0VkaXQgcmVjdXJyaW5nIGV2ZW50Jyxcblx0ZGVsZXRlUmVjdXJyaW5nRXZlbnQ6ICdEZWxldGUgcmVjdXJyaW5nIGV2ZW50Jyxcblx0ZWRpdFJlY3VycmluZ0V2ZW50UXVlc3Rpb246XG5cdFx0J2lzIGEgcmVjdXJyaW5nIGV2ZW50LiBIb3cgd291bGQgeW91IGxpa2UgdG8gZWRpdCBpdD8nLFxuXHRkZWxldGVSZWN1cnJpbmdFdmVudFF1ZXN0aW9uOlxuXHRcdCdpcyBhIHJlY3VycmluZyBldmVudC4gSG93IHdvdWxkIHlvdSBsaWtlIHRvIGRlbGV0ZSBpdD8nLFxuXHR0aGlzRXZlbnQ6ICdUaGlzIGV2ZW50Jyxcblx0dGhpc0V2ZW50RGVzY3JpcHRpb246ICdPbmx5IGNoYW5nZSB0aGlzIHNwZWNpZmljIG9jY3VycmVuY2UnLFxuXHR0aGlzQW5kRm9sbG93aW5nRXZlbnRzOiAnVGhpcyBhbmQgZm9sbG93aW5nIGV2ZW50cycsXG5cdHRoaXNBbmRGb2xsb3dpbmdFdmVudHNEZXNjcmlwdGlvbjogJ0VkaXQgdGhpcyBhbmQgYWxsIGZ1dHVyZSBvY2N1cnJlbmNlcycsXG5cdGFsbEV2ZW50czogJ0FsbCBldmVudHMnLFxuXHRhbGxFdmVudHNEZXNjcmlwdGlvbjogJ0VkaXQgdGhlIGVudGlyZSByZWN1cnJpbmcgc2VyaWVzJyxcblx0b25seUNoYW5nZVRoaXM6ICdPbmx5IGNoYW5nZSB0aGlzIHNwZWNpZmljIG9jY3VycmVuY2UnLFxuXHRjaGFuZ2VUaGlzQW5kRnV0dXJlOiAnQ2hhbmdlIHRoaXMgYW5kIGFsbCBmdXR1cmUgb2NjdXJyZW5jZXMnLFxuXHRjaGFuZ2VFbnRpcmVTZXJpZXM6ICdDaGFuZ2UgdGhlIGVudGlyZSByZWN1cnJpbmcgc2VyaWVzJyxcblx0b25seURlbGV0ZVRoaXM6ICdPbmx5IGRlbGV0ZSB0aGlzIHNwZWNpZmljIG9jY3VycmVuY2UnLFxuXHRkZWxldGVUaGlzQW5kRnV0dXJlOiAnRGVsZXRlIHRoaXMgYW5kIGFsbCBmdXR1cmUgb2NjdXJyZW5jZXMnLFxuXHRkZWxldGVFbnRpcmVTZXJpZXM6ICdEZWxldGUgdGhlIGVudGlyZSByZWN1cnJpbmcgc2VyaWVzJyxcblxuXHQvLyBWaWV3IHR5cGVzXG5cdG1vbnRoOiAnTW9udGgnLFxuXHR3ZWVrOiAnV2VlaycsXG5cdGRheTogJ0RheScsXG5cdHllYXI6ICdZZWFyJyxcblx0bW9yZTogJ21vcmUnLFxuXG5cdC8vIFJlc291cmNlIGNhbGVuZGFyXG5cdHJlc291cmNlczogJ1Jlc291cmNlcycsXG5cdHJlc291cmNlOiAnUmVzb3VyY2UnLFxuXHR0aW1lOiAnVGltZScsXG5cdGRhdGU6ICdEYXRlJyxcblx0bm9SZXNvdXJjZXNWaXNpYmxlOiAnTm8gcmVzb3VyY2VzIHZpc2libGUnLFxuXHRhZGRSZXNvdXJjZXNPclNob3dFeGlzdGluZzogJ0FkZCByZXNvdXJjZXMgb3Igc2hvdyBleGlzdGluZyBvbmVzJyxcbn1cbiIsCiAgICAiaW1wb3J0IGRheWpzLCB7IHR5cGUgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcblxuLyoqIFdoZXRoZXIgdGhlIGdpdmVuIGRhdGUgZmFsbHMgb24gdG9kYXkgKGNhbGVuZGFyIGRheSwgcmVzcGVjdGluZyB0aW1lem9uZSkuICovXG5leHBvcnQgZnVuY3Rpb24gaXNUb2RheShkYXRlOiBEYXlqcyk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gZGF0ZS5pc1NhbWUoZGF5anMoKSwgJ2RheScpXG59XG5cbi8qKiBgWVlZWS1NTS1ERGAgc3RyaW5nIHVzZWQgYXMgYSBzdGFibGUgcGVyLWRheSBrZXkgYWNyb3NzIHRoZSBjb2RlYmFzZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREYXlLZXkoZGF0ZTogRGF5anMpOiBzdHJpbmcge1xuXHRyZXR1cm4gZGF0ZS5mb3JtYXQoJ1lZWVktTU0tREQnKVxufVxuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIHdlZWsgZGF5cyBmb3IgYSBnaXZlbiBkYXRlIGFuZCBmaXJzdCBkYXkgb2Ygd2VlayBzZXR0aW5nLlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gZW5zdXJlcyB0aGF0IHRoZSBjdXJyZW50IGRhdGUgaXMgYWx3YXlzIGluY2x1ZGVkIGluIHRoZSByZXR1cm5lZCB3ZWVrLFxuICogZXZlbiB3aGVuIHRoZSBmaXJzdCBkYXkgb2Ygd2VlayBpcyBzZXQgdG8gYSBkYXkgYWZ0ZXIgdGhlIGN1cnJlbnQgZGF0ZS5cbiAqXG4gKiBAcGFyYW0gY3VycmVudERhdGUgLSBUaGUgcmVmZXJlbmNlIGRhdGUgZm9yIGNhbGN1bGF0aW5nIHRoZSB3ZWVrXG4gKiBAcGFyYW0gZmlyc3REYXlPZldlZWsgLSBUaGUgZGF5IG51bWJlciAoMC02KSByZXByZXNlbnRpbmcgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2VlayAoMCA9IFN1bmRheSwgMSA9IE1vbmRheSwgZXRjLilcbiAqIEByZXR1cm5zIEFuIGFycmF5IG9mIDcgZGF5anMgb2JqZWN0cyByZXByZXNlbnRpbmcgdGhlIHdlZWsgZGF5cywgc3RhcnRpbmcgZnJvbSBmaXJzdERheU9mV2Vla1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBHZXQgd2VlayBzdGFydGluZyBmcm9tIE1vbmRheSBmb3IgY3VycmVudCBkYXRlXG4gKiBjb25zdCB3ZWVrRGF5cyA9IGdldFdlZWtEYXlzKGRheWpzKCcyMDI1LTEwLTEzJyksIDEpXG4gKiAvLyBSZXR1cm5zOiBbTW9uIE9jdCAxMywgVHVlIE9jdCAxNCwgLi4uLCBTdW4gT2N0IDE5XVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBHZXQgd2VlayBzdGFydGluZyBmcm9tIFdlZG5lc2RheSB3aGVuIGN1cnJlbnQgZGF0ZSBpcyBNb25kYXlcbiAqIGNvbnN0IHdlZWtEYXlzID0gZ2V0V2Vla0RheXMoZGF5anMoJzIwMjUtMTAtMTMnKSwgMylcbiAqIC8vIFJldHVybnM6IFtXZWQgT2N0IDgsIFRodSBPY3QgOSwgLi4uLCBUdWUgT2N0IDE0XSAoaW5jbHVkZXMgTW9uZGF5IE9jdCAxMylcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFdlZWtEYXlzKFxuXHRjdXJyZW50RGF0ZTogRGF5anMsXG5cdGZpcnN0RGF5T2ZXZWVrOiBudW1iZXJcbik6IERheWpzW10ge1xuXHRjb25zdCBzdGFydE9mV2Vla0Zyb21DdXJyZW50RGF0ZSA9IGN1cnJlbnREYXRlXG5cdFx0LnN0YXJ0T2YoJ3dlZWsnKVxuXHRcdC5kYXkoZmlyc3REYXlPZldlZWspXG5cblx0Y29uc3QgYWRqdXN0ZWRTdGFydE9mV2VlayA9IGN1cnJlbnREYXRlLmlzQmVmb3JlKHN0YXJ0T2ZXZWVrRnJvbUN1cnJlbnREYXRlKVxuXHRcdD8gc3RhcnRPZldlZWtGcm9tQ3VycmVudERhdGUuc3VidHJhY3QoMSwgJ3dlZWsnKVxuXHRcdDogc3RhcnRPZldlZWtGcm9tQ3VycmVudERhdGVcblxuXHRyZXR1cm4gQXJyYXkuZnJvbSh7IGxlbmd0aDogNyB9LCAoXywgZGF5SW5kZXgpID0+XG5cdFx0YWRqdXN0ZWRTdGFydE9mV2Vlay5hZGQoZGF5SW5kZXgsICdkYXknKVxuXHQpXG59XG5cbi8qKlxuICogR2VuZXJhdGVzIDYgd2Vla3Mgb2YgZGF5cyBmb3IgYSBtb250aCBjYWxlbmRhciB2aWV3LlxuICogQWx3YXlzIHJldHVybnMgNDIgZGF5cyAoNiB3ZWVrcyDDlyA3IGRheXMpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TW9udGhXZWVrcyhcblx0bW9udGhEYXRlOiBEYXlqcyxcblx0Zmlyc3REYXlPZldlZWs6IG51bWJlclxuKTogRGF5anNbXVtdIHtcblx0Y29uc3QgZmlyc3RXZWVrID0gZ2V0V2Vla0RheXMobW9udGhEYXRlLnN0YXJ0T2YoJ21vbnRoJyksIGZpcnN0RGF5T2ZXZWVrKVxuXG5cdHJldHVybiBBcnJheS5mcm9tKHsgbGVuZ3RoOiA2IH0sIChfLCB3ZWVrSW5kZXgpID0+IHtcblx0XHRjb25zdCB3ZWVrU3RhcnQgPSBmaXJzdFdlZWtbMF0uYWRkKHdlZWtJbmRleCwgJ3dlZWsnKVxuXHRcdHJldHVybiBnZXRXZWVrRGF5cyh3ZWVrU3RhcnQsIGZpcnN0RGF5T2ZXZWVrKVxuXHR9KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TW9udGhEYXlzKG1vbnRoRGF0ZTogRGF5anMpOiBEYXlqc1tdIHtcblx0Y29uc3QgZGF5c0luTW9udGggPSBtb250aERhdGUuZGF5c0luTW9udGgoKVxuXHRjb25zdCBzdGFydE9mTW9udGggPSBtb250aERhdGUuc3RhcnRPZignbW9udGgnKVxuXHRyZXR1cm4gQXJyYXkuZnJvbSh7IGxlbmd0aDogZGF5c0luTW9udGggfSwgKF8sIGkpID0+XG5cdFx0c3RhcnRPZk1vbnRoLmFkZChpLCAnZGF5Jylcblx0KVxufVxuXG5pbnRlcmZhY2UgR2V0RGF5SG91cnNPcHRpb25zIHtcblx0cmVmZXJlbmNlRGF0ZT86IERheWpzXG5cdGxlbmd0aD86IG51bWJlclxufVxuXG4vKipcbiAqIEdlbmVyYXRlcyBhbiBhcnJheSBvZiAyNCBkYXlqcyBvYmplY3RzIHJlcHJlc2VudGluZyBob3VybHkgc2xvdHMgZm9yIGEgZGF5LlxuICogVXNlcyAuaG91cihpKSBzbyBlYWNoIHJvdyBtYXBzIHRvIFwidGhlIGhvdXIgbGFiZWxlZCBpXCIg4oCUIGtlZXBpbmcgZ3JpZCByb3dzXG4gKiBhbGlnbmVkIGFjcm9zcyBjb2x1bW5zIGluIHdlZWsgdmlld3MuIE9uIERTVCBzcHJpbmctZm9yd2FyZCwgLmhvdXIoMikgcmV0dXJuc1xuICogMyBBTSAodGhlIG5vbi1leGlzdGVudCBob3VyIGlzIGNvbGxhcHNlZCksIGJ1dCB0aGUgZ3JpZCBrZXkgZml4IChkYXlJbmRleClcbiAqIGFuZCBwZXItZGF5IGdlbmVyYXRpb24gaW4gdmlld3MgaGFuZGxlIHRoaXMgY29ycmVjdGx5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGF5SG91cnMoe1xuXHRyZWZlcmVuY2VEYXRlID0gZGF5anMoKSxcblx0bGVuZ3RoID0gMjQsXG59OiBHZXREYXlIb3Vyc09wdGlvbnMgPSB7fSk6IERheWpzW10ge1xuXHRjb25zdCBzdGFydE9mRGF5ID0gcmVmZXJlbmNlRGF0ZS5zdGFydE9mKCdkYXknKVxuXHRyZXR1cm4gQXJyYXkuZnJvbSh7IGxlbmd0aCB9LCAoXywgaSkgPT5cblx0XHRzdGFydE9mRGF5LmhvdXIoaSkubWludXRlKDApLnNlY29uZCgwKS5taWxsaXNlY29uZCgwKVxuXHQpXG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB0eXBlIHsgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcblxuLyoqXG4gKiBLZWVwIG9ubHkgZXZlbnRzIHdob3NlIGlkIGFwcGVhcnMgaW4gYHJlc291cmNlRXZlbnRzYC4gSWRzIGFyZSBjb21wYXJlZCBhc1xuICogc3RyaW5ncyBzbyBudW1lcmljL3N0cmluZyBtaXNtYXRjaGVzIGJldHdlZW4gc291cmNlcyBkb24ndCBjYXVzZSBmYWxzZVxuICogbmVnYXRpdmVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyRXZlbnRzQnlSZXNvdXJjZShcblx0ZXZlbnRzOiBDYWxlbmRhckV2ZW50W10sXG5cdHJlc291cmNlRXZlbnRzOiBDYWxlbmRhckV2ZW50W11cbik6IENhbGVuZGFyRXZlbnRbXSB7XG5cdGNvbnN0IGlkcyA9IG5ldyBTZXQocmVzb3VyY2VFdmVudHMubWFwKChlKSA9PiBTdHJpbmcoZS5pZCkpKVxuXHRyZXR1cm4gZXZlbnRzLmZpbHRlcigoZXZlbnQpID0+IGlkcy5oYXMoU3RyaW5nKGV2ZW50LmlkKSkpXG59XG5cbi8qKlxuICogV2hldGhlciBhbiBldmVudCdzIGludGVydmFsIG92ZXJsYXBzIHdpdGggdGhlIGBbc3RhcnQsIGVuZF1gIHJhbmdlXG4gKiAoaW5jbHVzaXZlKS4gQ292ZXJzIHRoZSB0aHJlZSBjYXNlczogc3RhcnRzIGluc2lkZSB0aGUgcmFuZ2UsIGVuZHMgaW5zaWRlXG4gKiB0aGUgcmFuZ2UsIG9yIGZ1bGx5IHNwYW5zIHRoZSByYW5nZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV2ZW50T3ZlcmxhcHNSYW5nZShcblx0ZXZlbnQ6IENhbGVuZGFyRXZlbnQsXG5cdHN0YXJ0OiBEYXlqcyxcblx0ZW5kOiBEYXlqc1xuKTogYm9vbGVhbiB7XG5cdGNvbnN0IHN0YXJ0c0luUmFuZ2UgPVxuXHRcdGV2ZW50LnN0YXJ0LmlzU2FtZU9yQWZ0ZXIoc3RhcnQpICYmIGV2ZW50LnN0YXJ0LmlzU2FtZU9yQmVmb3JlKGVuZClcblx0Y29uc3QgZW5kc0luUmFuZ2UgPVxuXHRcdGV2ZW50LmVuZC5pc1NhbWVPckFmdGVyKHN0YXJ0KSAmJiBldmVudC5lbmQuaXNTYW1lT3JCZWZvcmUoZW5kKVxuXHRjb25zdCBzcGFuc1JhbmdlID0gZXZlbnQuc3RhcnQuaXNCZWZvcmUoc3RhcnQpICYmIGV2ZW50LmVuZC5pc0FmdGVyKGVuZClcblx0cmV0dXJuIHN0YXJ0c0luUmFuZ2UgfHwgZW5kc0luUmFuZ2UgfHwgc3BhbnNSYW5nZVxufVxuIiwKICAgICJpbXBvcnQgeyBCdXR0b24gfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvYnV0dG9uJ1xuaW1wb3J0IHtcblx0RGlhbG9nLFxuXHREaWFsb2dDb250ZW50LFxuXHREaWFsb2dEZXNjcmlwdGlvbixcblx0RGlhbG9nRm9vdGVyLFxuXHREaWFsb2dIZWFkZXIsXG5cdERpYWxvZ1RpdGxlLFxufSBmcm9tICdAL2NvbXBvbmVudHMvdWkvZGlhbG9nJ1xuaW1wb3J0IHR5cGUgeyBSZWN1cnJlbmNlRWRpdFNjb3BlIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL3R5cGVzJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuXG5jb25zdCBTQ09QRVMgPSBbXG5cdHtcblx0XHRzY29wZTogJ3RoaXMnLFxuXHRcdHRpdGxlOiAndGhpc0V2ZW50Jyxcblx0XHRlZGl0S2V5OiAnb25seUNoYW5nZVRoaXMnLFxuXHRcdGRlbGV0ZUtleTogJ29ubHlEZWxldGVUaGlzJyxcblx0fSxcblx0e1xuXHRcdHNjb3BlOiAnZm9sbG93aW5nJyxcblx0XHR0aXRsZTogJ3RoaXNBbmRGb2xsb3dpbmdFdmVudHMnLFxuXHRcdGVkaXRLZXk6ICdjaGFuZ2VUaGlzQW5kRnV0dXJlJyxcblx0XHRkZWxldGVLZXk6ICdkZWxldGVUaGlzQW5kRnV0dXJlJyxcblx0fSxcblx0e1xuXHRcdHNjb3BlOiAnYWxsJyxcblx0XHR0aXRsZTogJ2FsbEV2ZW50cycsXG5cdFx0ZWRpdEtleTogJ2NoYW5nZUVudGlyZVNlcmllcycsXG5cdFx0ZGVsZXRlS2V5OiAnZGVsZXRlRW50aXJlU2VyaWVzJyxcblx0fSxcbl0gYXMgY29uc3RcblxuaW50ZXJmYWNlIFJlY3VycmVuY2VFZGl0RGlhbG9nUHJvcHMge1xuXHRpc09wZW46IGJvb2xlYW5cblx0b25DbG9zZTogKCkgPT4gdm9pZFxuXHRvbkNvbmZpcm06IChzY29wZTogUmVjdXJyZW5jZUVkaXRTY29wZSkgPT4gdm9pZFxuXHRvcGVyYXRpb25UeXBlOiAnZWRpdCcgfCAnZGVsZXRlJ1xuXHRldmVudFRpdGxlOiBzdHJpbmdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFJlY3VycmVuY2VFZGl0RGlhbG9nKHtcblx0aXNPcGVuLFxuXHRvbkNsb3NlLFxuXHRvbkNvbmZpcm0sXG5cdG9wZXJhdGlvblR5cGUsXG5cdGV2ZW50VGl0bGUsXG59OiBSZWN1cnJlbmNlRWRpdERpYWxvZ1Byb3BzKSB7XG5cdGNvbnN0IHsgdCB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKGNvbnRleHQpID0+ICh7IHQ6IGNvbnRleHQudCB9KSlcblxuXHRjb25zdCBoYW5kbGVTY29wZVNlbGVjdCA9IChzY29wZTogUmVjdXJyZW5jZUVkaXRTY29wZSkgPT4ge1xuXHRcdG9uQ29uZmlybShzY29wZSlcblx0XHRvbkNsb3NlKClcblx0fVxuXG5cdGNvbnN0IGlzRWRpdCA9IG9wZXJhdGlvblR5cGUgPT09ICdlZGl0J1xuXG5cdHJldHVybiAoXG5cdFx0PERpYWxvZyBvbk9wZW5DaGFuZ2U9e29uQ2xvc2V9IG9wZW49e2lzT3Blbn0+XG5cdFx0XHQ8RGlhbG9nQ29udGVudCBjbGFzc05hbWU9XCJtYXgtdy1tZFwiPlxuXHRcdFx0XHQ8RGlhbG9nSGVhZGVyPlxuXHRcdFx0XHRcdDxEaWFsb2dUaXRsZT5cblx0XHRcdFx0XHRcdHtpc0VkaXQgPyB0KCdlZGl0UmVjdXJyaW5nRXZlbnQnKSA6IHQoJ2RlbGV0ZVJlY3VycmluZ0V2ZW50Jyl9XG5cdFx0XHRcdFx0PC9EaWFsb2dUaXRsZT5cblx0XHRcdFx0XHQ8RGlhbG9nRGVzY3JpcHRpb24+XG5cdFx0XHRcdFx0XHRcIntldmVudFRpdGxlfVwieycgJ31cblx0XHRcdFx0XHRcdHtpc0VkaXRcblx0XHRcdFx0XHRcdFx0PyB0KCdlZGl0UmVjdXJyaW5nRXZlbnRRdWVzdGlvbicpXG5cdFx0XHRcdFx0XHRcdDogdCgnZGVsZXRlUmVjdXJyaW5nRXZlbnRRdWVzdGlvbicpfVxuXHRcdFx0XHRcdDwvRGlhbG9nRGVzY3JpcHRpb24+XG5cdFx0XHRcdDwvRGlhbG9nSGVhZGVyPlxuXG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwic3BhY2UteS0zXCI+XG5cdFx0XHRcdFx0e1NDT1BFUy5tYXAoKHsgc2NvcGUsIHRpdGxlLCBlZGl0S2V5LCBkZWxldGVLZXkgfSkgPT4gKFxuXHRcdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJ3LWZ1bGwganVzdGlmeS1zdGFydCBoLWF1dG8gcC00XCJcblx0XHRcdFx0XHRcdFx0a2V5PXtzY29wZX1cblx0XHRcdFx0XHRcdFx0b25DbGljaz17KCkgPT4gaGFuZGxlU2NvcGVTZWxlY3Qoc2NvcGUpfVxuXHRcdFx0XHRcdFx0XHR2YXJpYW50PVwib3V0bGluZVwiXG5cdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidGV4dC1sZWZ0XCI+XG5cdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmb250LW1lZGl1bVwiPnt0KHRpdGxlKX08L2Rpdj5cblx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHR7dChpc0VkaXQgPyBlZGl0S2V5IDogZGVsZXRlS2V5KX1cblx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdFx0XHQpKX1cblx0XHRcdFx0PC9kaXY+XG5cblx0XHRcdFx0PERpYWxvZ0Zvb3Rlcj5cblx0XHRcdFx0XHQ8QnV0dG9uIG9uQ2xpY2s9e29uQ2xvc2V9IHZhcmlhbnQ9XCJvdXRsaW5lXCI+XG5cdFx0XHRcdFx0XHR7dCgnY2FuY2VsJyl9XG5cdFx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHRcdDwvRGlhbG9nRm9vdGVyPlxuXHRcdFx0PC9EaWFsb2dDb250ZW50PlxuXHRcdDwvRGlhbG9nPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgRHJhZ0VuZEV2ZW50IH0gZnJvbSAnQGRuZC1raXQvY29yZSdcbmltcG9ydCBkYXlqcywgeyB0eXBlIERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICcuLi90eXBlcydcblxuaW50ZXJmYWNlIERyb3BDZWxsRGF0YSB7XG5cdHR5cGU/OiBzdHJpbmdcblx0ZGF0ZT86IHN0cmluZ1xuXHRob3VyPzogbnVtYmVyXG5cdG1pbnV0ZT86IG51bWJlclxuXHRyZXNvdXJjZUlkPzogc3RyaW5nXG5cdGFsbERheT86IGJvb2xlYW5cbn1cblxuZXhwb3J0IGNvbnN0IGdldFVwZGF0ZWRFdmVudCA9IChcblx0ZXZlbnQ6IERyYWdFbmRFdmVudCxcblx0YWN0aXZlRXZlbnQ6IENhbGVuZGFyRXZlbnQgfCBudWxsXG4pID0+IHtcblx0Y29uc3QgeyBhY3RpdmUsIG92ZXIgfSA9IGV2ZW50XG5cblx0aWYgKCFhY3RpdmUgfHwgIW92ZXIgfHwgIWFjdGl2ZUV2ZW50KSB7XG5cdFx0cmV0dXJuIG51bGxcblx0fVxuXG5cdGNvbnN0IGRhdGEgPSAob3Zlci5kYXRhLmN1cnJlbnQgfHwge30pIGFzIERyb3BDZWxsRGF0YVxuXHRjb25zdCBpc1RpbWVDZWxsID0gZGF0YS50eXBlID09PSAndGltZS1jZWxsJ1xuXHRjb25zdCB7IHJlc291cmNlSWQsIGFsbERheSB9ID0gZGF0YVxuXHRsZXQgbmV3U3RhcnQ6IERheWpzXG5cblx0aWYgKGlzVGltZUNlbGwpIHtcblx0XHRjb25zdCB7IGRhdGUsIGhvdXIgPSAwLCBtaW51dGUgPSAwIH0gPSBkYXRhXG5cblx0XHQvLyBDcmVhdGUgbmV3IHN0YXJ0IHRpbWUgYmFzZWQgb24gdGhlIGRyb3AgdGFyZ2V0XG5cdFx0bmV3U3RhcnQgPSBkYXlqcyhkYXRlKS5ob3VyKGhvdXIpLm1pbnV0ZShtaW51dGUpXG5cdH0gZWxzZSB7XG5cdFx0Y29uc3QgeyBkYXRlIH0gPSBkYXRhXG5cblx0XHRuZXdTdGFydCA9IGRheWpzKGRhdGUpXG5cdH1cblxuXHRjb25zdCBldmVudER1cmF0aW9uID0gYWN0aXZlRXZlbnQuZW5kLmRpZmYoYWN0aXZlRXZlbnQuc3RhcnQsICdzZWNvbmQnKVxuXG5cdC8vIENyZWF0ZSBuZXcgZW5kIHRpbWUgYnkgYWRkaW5nIHRoZSBvcmlnaW5hbCBkdXJhdGlvblxuXHRsZXQgbmV3RW5kID0gbmV3U3RhcnQuYWRkKGV2ZW50RHVyYXRpb24sICdzZWNvbmQnKVxuXG5cdGlmIChuZXdFbmQuaXNTYW1lKG5ld0VuZC5zdGFydE9mKCdkYXknKSkpIHtcblx0XHQvLyBJZiB0aGUgbmV3IGVuZCB0aW1lIGlzIGF0IG1pZG5pZ2h0LCBzZXQgaXQgdG8gMjQgaG91cnMgb2YgcGFydGlhbCBkYXlcblx0XHRuZXdFbmQgPSBuZXdFbmQuc3VidHJhY3QoMSwgJ2RheScpLmVuZE9mKCdkYXknKVxuXHR9XG5cblx0Ly8gVXBkYXRlIHRoZSBldmVudCB3aXRoIG5ldyB0aW1lcyBhbmQgcmVzb3VyY2UgaWYgY2hhbmdlZFxuXHRjb25zdCB1cGRhdGVzID0ge1xuXHRcdHN0YXJ0OiBuZXdTdGFydCxcblx0XHRlbmQ6IG5ld0VuZCxcblx0XHRyZXNvdXJjZUlkLFxuXHRcdGFsbERheTogaXNUaW1lQ2VsbCA/IGZhbHNlIDogKGFsbERheSA/PyBhY3RpdmVFdmVudC5hbGxEYXkpLFxuXHR9XG5cdHJldHVybiB7IGFjdGl2ZUV2ZW50LCB1cGRhdGVzIH1cbn1cbiIsCiAgICAiaW1wb3J0IHsgRHJhZ092ZXJsYXkgfSBmcm9tICdAZG5kLWtpdC9jb3JlJ1xuaW1wb3J0IHsgc25hcENlbnRlclRvQ3Vyc29yIH0gZnJvbSAnQGRuZC1raXQvbW9kaWZpZXJzJ1xuaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VJbXBlcmF0aXZlSGFuZGxlLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJy4uL3R5cGVzJ1xuXG5pbnRlcmZhY2UgRXZlbnREcmFnT3ZlcmxheVByb3BzIHtcblx0cmVmOiBSZWFjdC5SZWY8eyBzZXRBY3RpdmVFdmVudDogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkIH0+XG59XG5cbmV4cG9ydCBjb25zdCBFdmVudERyYWdPdmVybGF5OiBSZWFjdC5GQzxFdmVudERyYWdPdmVybGF5UHJvcHM+ID0gKHsgcmVmIH0pID0+IHtcblx0Y29uc3QgW2FjdGl2ZUV2ZW50LCBzZXRBY3RpdmVFdmVudF0gPSB1c2VTdGF0ZTxDYWxlbmRhckV2ZW50IHwgbnVsbD4obnVsbClcblxuXHR1c2VJbXBlcmF0aXZlSGFuZGxlKHJlZiwgKCkgPT4gKHtcblx0XHRzZXRBY3RpdmVFdmVudCxcblx0fSkpXG5cblx0cmV0dXJuIChcblx0XHQ8RHJhZ092ZXJsYXkgbW9kaWZpZXJzPXtbc25hcENlbnRlclRvQ3Vyc29yXX0+XG5cdFx0XHR7YWN0aXZlRXZlbnQgJiYgKFxuXHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdCdjdXJzb3ItZ3JhYiB0cnVuY2F0ZSByb3VuZGVkIGJnLWFtYmVyLTIwMCBwLTIgdGV4dC1bMTBweF0gc2hhZG93LWxnIHNtOnRleHQteHMgdy0yMCcsXG5cdFx0XHRcdFx0XHRhY3RpdmVFdmVudC5iYWNrZ3JvdW5kQ29sb3IgfHwgJ2JnLWJsdWUtNTAwJyxcblx0XHRcdFx0XHRcdGFjdGl2ZUV2ZW50LmNvbG9yIHx8ICd0ZXh0LXdoaXRlJ1xuXHRcdFx0XHRcdCl9XG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7YWN0aXZlRXZlbnQ/LnRpdGxlfVxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdCl9XG5cdFx0PC9EcmFnT3ZlcmxheT5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9idXR0b24nXG5pbXBvcnQgeyBDaGVja2JveCB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9jaGVja2JveCdcbmltcG9ydCB7IERhdGVQaWNrZXIgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvZGF0ZS1waWNrZXInXG5pbXBvcnQgeyBEaWFsb2dGb290ZXIgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvZGlhbG9nJ1xuaW1wb3J0IHsgSW5wdXQgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvaW5wdXQnXG5pbXBvcnQgeyBMYWJlbCB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9sYWJlbCdcbmltcG9ydCB7IFNjcm9sbEFyZWEgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvc2Nyb2xsLWFyZWEnXG5pbXBvcnQgeyBUaW1lUGlja2VyIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL3RpbWUtcGlja2VyJ1xuaW1wb3J0IHsgaXNCdXNpbmVzc0RheSB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvdXRpbHMvYnVzaW5lc3MtaG91cnMnXG5pbXBvcnQge1xuXHRidWlsZERhdGVUaW1lLFxuXHRidWlsZEVuZERhdGVUaW1lLFxuXHRnZXRUaW1lQ29uc3RyYWludHMsXG59IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvdXRpbHMvZXZlbnQtZm9ybS11dGlscydcbmltcG9ydCB7IFJlY3VycmVuY2VFZGl0RGlhbG9nIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL2NvbXBvbmVudHMvcmVjdXJyZW5jZS1lZGl0LWRpYWxvZydcbmltcG9ydCB7IFJlY3VycmVuY2VFZGl0b3IgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvY29tcG9uZW50cy9yZWN1cnJlbmNlLWVkaXRvci9yZWN1cnJlbmNlLWVkaXRvcidcbmltcG9ydCB7IHVzZVJlY3VycmluZ0V2ZW50QWN0aW9ucyB9IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS9ob29rcy91c2VSZWN1cnJpbmdFdmVudEFjdGlvbnMnXG5pbXBvcnQgdHlwZSB7IFJSdWxlT3B0aW9ucyB9IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS90eXBlcydcbmltcG9ydCB7IGlzUmVjdXJyaW5nRXZlbnQgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvdXRpbHMvcmVjdXJyZW5jZS1oYW5kbGVyJ1xuaW1wb3J0IHsgdXNlRWZmZWN0aXZlQnVzaW5lc3NIb3VycyB9IGZyb20gJ0AvaG9va3MvdXNlLWVmZmVjdGl2ZS1idXNpbmVzcy1ob3VycydcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmNvbnN0IENPTE9SX09QVElPTlMgPSBbXG5cdHsgdmFsdWU6ICdiZy1ibHVlLTEwMCB0ZXh0LWJsdWUtODAwJywgbGFiZWw6ICdCbHVlJyB9LFxuXHR7IHZhbHVlOiAnYmctZ3JlZW4tMTAwIHRleHQtZ3JlZW4tODAwJywgbGFiZWw6ICdHcmVlbicgfSxcblx0eyB2YWx1ZTogJ2JnLXB1cnBsZS0xMDAgdGV4dC1wdXJwbGUtODAwJywgbGFiZWw6ICdQdXJwbGUnIH0sXG5cdHsgdmFsdWU6ICdiZy1yZWQtMTAwIHRleHQtcmVkLTgwMCcsIGxhYmVsOiAnUmVkJyB9LFxuXHR7IHZhbHVlOiAnYmcteWVsbG93LTEwMCB0ZXh0LXllbGxvdy04MDAnLCBsYWJlbDogJ1llbGxvdycgfSxcblx0eyB2YWx1ZTogJ2JnLXBpbmstMTAwIHRleHQtcGluay04MDAnLCBsYWJlbDogJ1BpbmsnIH0sXG5cdHsgdmFsdWU6ICdiZy1pbmRpZ28tMTAwIHRleHQtaW5kaWdvLTgwMCcsIGxhYmVsOiAnSW5kaWdvJyB9LFxuXHR7IHZhbHVlOiAnYmctYW1iZXItMTAwIHRleHQtYW1iZXItODAwJywgbGFiZWw6ICdBbWJlcicgfSxcblx0eyB2YWx1ZTogJ2JnLWVtZXJhbGQtMTAwIHRleHQtZW1lcmFsZC04MDAnLCBsYWJlbDogJ0VtZXJhbGQnIH0sXG5cdHsgdmFsdWU6ICdiZy1za3ktMTAwIHRleHQtc2t5LTgwMCcsIGxhYmVsOiAnU2t5JyB9LFxuXHR7IHZhbHVlOiAnYmctdmlvbGV0LTEwMCB0ZXh0LXZpb2xldC04MDAnLCBsYWJlbDogJ1Zpb2xldCcgfSxcblx0eyB2YWx1ZTogJ2JnLXJvc2UtMTAwIHRleHQtcm9zZS04MDAnLCBsYWJlbDogJ1Jvc2UnIH0sXG5cdHsgdmFsdWU6ICdiZy10ZWFsLTEwMCB0ZXh0LXRlYWwtODAwJywgbGFiZWw6ICdUZWFsJyB9LFxuXHR7IHZhbHVlOiAnYmctb3JhbmdlLTEwMCB0ZXh0LW9yYW5nZS04MDAnLCBsYWJlbDogJ09yYW5nZScgfSxcbl1cblxudHlwZSBUZXh0RmllbGROYW1lID0gJ3RpdGxlJyB8ICdkZXNjcmlwdGlvbicgfCAnbG9jYXRpb24nXG5cbmludGVyZmFjZSBFdmVudEZvcm1UZXh0RmllbGRQcm9wcyB7XG5cdG5hbWU6IFRleHRGaWVsZE5hbWVcblx0bGFiZWw6IHN0cmluZ1xuXHRwbGFjZWhvbGRlcjogc3RyaW5nXG5cdHZhbHVlOiBzdHJpbmdcblx0cmVxdWlyZWQ/OiBib29sZWFuXG5cdG9uQ2hhbmdlOiAoXG5cdFx0ZTogUmVhY3QuQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudCB8IEhUTUxUZXh0QXJlYUVsZW1lbnQ+XG5cdCkgPT4gdm9pZFxufVxuXG4vLyBTaGFyZWQgdGl0bGUgLyBkZXNjcmlwdGlvbiAvIGxvY2F0aW9uIGlucHV0cyAobXVzdCBsaXZlIG91dHNpZGUgRXZlbnRGb3JtIHRvIGtlZXAgZm9jdXMpLlxuY29uc3QgRXZlbnRGb3JtVGV4dEZpZWxkID0gKHtcblx0bmFtZSxcblx0bGFiZWwsXG5cdHBsYWNlaG9sZGVyLFxuXHR2YWx1ZSxcblx0cmVxdWlyZWQgPSBmYWxzZSxcblx0b25DaGFuZ2UsXG59OiBFdmVudEZvcm1UZXh0RmllbGRQcm9wcykgPT4gKFxuXHQ8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ2FwLTEgc206Z2FwLTJcIj5cblx0XHQ8TGFiZWwgY2xhc3NOYW1lPVwidGV4dC14cyBzbTp0ZXh0LXNtXCIgaHRtbEZvcj17bmFtZX0+XG5cdFx0XHR7bGFiZWx9XG5cdFx0PC9MYWJlbD5cblx0XHQ8SW5wdXRcblx0XHRcdGNsYXNzTmFtZT1cImgtOCB0ZXh0LXNtIHNtOmgtOVwiXG5cdFx0XHRpZD17bmFtZX1cblx0XHRcdG5hbWU9e25hbWV9XG5cdFx0XHRvbkNoYW5nZT17b25DaGFuZ2V9XG5cdFx0XHRwbGFjZWhvbGRlcj17cGxhY2Vob2xkZXJ9XG5cdFx0XHRyZXF1aXJlZD17cmVxdWlyZWR9XG5cdFx0XHR2YWx1ZT17dmFsdWV9XG5cdFx0Lz5cblx0PC9kaXY+XG4pXG5cbmV4cG9ydCBpbnRlcmZhY2UgRXZlbnRGb3JtUHJvcHMge1xuXHRvcGVuPzogYm9vbGVhblxuXHRzZWxlY3RlZEV2ZW50PzogQ2FsZW5kYXJFdmVudCB8IG51bGxcblx0b25BZGQ/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0b25VcGRhdGU/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0b25EZWxldGU/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0b25DbG9zZTogKCkgPT4gdm9pZFxufVxuXG5leHBvcnQgY29uc3QgRXZlbnRGb3JtOiBSZWFjdC5GQzxFdmVudEZvcm1Qcm9wcz4gPSAoe1xuXHRzZWxlY3RlZEV2ZW50LFxuXHRvbkNsb3NlLFxuXHRvblVwZGF0ZSxcblx0b25EZWxldGUsXG5cdG9uQWRkLFxufSkgPT4ge1xuXHRjb25zdCB7XG5cdFx0ZGlhbG9nU3RhdGUsXG5cdFx0b3BlbkVkaXREaWFsb2csXG5cdFx0b3BlbkRlbGV0ZURpYWxvZyxcblx0XHRjbG9zZURpYWxvZyxcblx0XHRoYW5kbGVDb25maXJtLFxuXHR9ID0gdXNlUmVjdXJyaW5nRXZlbnRBY3Rpb25zKG9uQ2xvc2UpXG5cblx0Y29uc3QgeyBmaW5kUGFyZW50UmVjdXJyaW5nRXZlbnQsIHQsIHRpbWVGb3JtYXQgfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KFxuXHRcdChjb250ZXh0KSA9PiAoe1xuXHRcdFx0ZmluZFBhcmVudFJlY3VycmluZ0V2ZW50OiBjb250ZXh0LmZpbmRQYXJlbnRSZWN1cnJpbmdFdmVudCxcblx0XHRcdHQ6IGNvbnRleHQudCxcblx0XHRcdHRpbWVGb3JtYXQ6IGNvbnRleHQudGltZUZvcm1hdCxcblx0XHR9KVxuXHQpXG5cdGNvbnN0IGVmZmVjdGl2ZUJ1c2luZXNzSG91cnMgPSB1c2VFZmZlY3RpdmVCdXNpbmVzc0hvdXJzKFxuXHRcdHNlbGVjdGVkRXZlbnQ/LnJlc291cmNlSWRcblx0KVxuXG5cdGNvbnN0IHN0YXJ0ID0gc2VsZWN0ZWRFdmVudD8uc3RhcnQgPz8gZGF5anMoKVxuXHRjb25zdCBlbmQgPSBzZWxlY3RlZEV2ZW50Py5lbmQgPz8gZGF5anMoKS5hZGQoMSwgJ2hvdXInKVxuXG5cdC8vIEZpbmQgcGFyZW50IGV2ZW50IGlmIHRoaXMgaXMgYSByZWN1cnJpbmcgZXZlbnQgaW5zdGFuY2Vcblx0Y29uc3QgcGFyZW50RXZlbnQgPSBzZWxlY3RlZEV2ZW50XG5cdFx0PyBmaW5kUGFyZW50UmVjdXJyaW5nRXZlbnQoc2VsZWN0ZWRFdmVudClcblx0XHQ6IG51bGxcblxuXHQvLyBGb3JtIHN0YXRlXG5cdGNvbnN0IFtzdGFydERhdGUsIHNldFN0YXJ0RGF0ZV0gPSB1c2VTdGF0ZShzdGFydC50b0RhdGUoKSlcblx0Y29uc3QgW2VuZERhdGUsIHNldEVuZERhdGVdID0gdXNlU3RhdGUoZW5kLnRvRGF0ZSgpKVxuXHRjb25zdCBbaXNBbGxEYXksIHNldElzQWxsRGF5XSA9IHVzZVN0YXRlKHNlbGVjdGVkRXZlbnQ/LmFsbERheSB8fCBmYWxzZSlcblx0Y29uc3QgW3NlbGVjdGVkQ29sb3IsIHNldFNlbGVjdGVkQ29sb3JdID0gdXNlU3RhdGUoXG5cdFx0c2VsZWN0ZWRFdmVudD8uY29sb3IgfHwgQ09MT1JfT1BUSU9OU1swXS52YWx1ZVxuXHQpXG5cblx0Ly8gVGltZSBzdGF0ZVxuXHRjb25zdCBbc3RhcnRUaW1lLCBzZXRTdGFydFRpbWVdID0gdXNlU3RhdGUoc3RhcnQuZm9ybWF0KCdISDptbScpKVxuXHRjb25zdCBbZW5kVGltZSwgc2V0RW5kVGltZV0gPSB1c2VTdGF0ZShlbmQuZm9ybWF0KCdISDptbScpKVxuXG5cdC8vIEluaXRpYWxpemUgZm9ybSB2YWx1ZXMgZnJvbSBzZWxlY3RlZCBldmVudCBvciBkZWZhdWx0c1xuXHRjb25zdCBbZm9ybVZhbHVlcywgc2V0Rm9ybVZhbHVlc10gPSB1c2VTdGF0ZSh7XG5cdFx0dGl0bGU6IHNlbGVjdGVkRXZlbnQ/LnRpdGxlIHx8ICcnLFxuXHRcdGRlc2NyaXB0aW9uOiBzZWxlY3RlZEV2ZW50Py5kZXNjcmlwdGlvbiB8fCAnJyxcblx0XHRsb2NhdGlvbjogc2VsZWN0ZWRFdmVudD8ubG9jYXRpb24gfHwgJycsXG5cdH0pXG5cblx0Ly8gUmVjdXJyZW5jZSBzdGF0ZSAtIHB1bGwgUlJVTEUgZnJvbSBwYXJlbnQgaWYgdGhpcyBpcyBhbiBpbnN0YW5jZVxuXHRjb25zdCBbcnJ1bGUsIHNldFJydWxlXSA9IHVzZVN0YXRlPFJSdWxlT3B0aW9ucyB8IG51bGw+KCgpID0+IHtcblx0XHRjb25zdCBldmVudFJydWxlID0gc2VsZWN0ZWRFdmVudD8ucnJ1bGUgfHwgcGFyZW50RXZlbnQ/LnJydWxlXG5cdFx0cmV0dXJuIGV2ZW50UnJ1bGUgfHwgbnVsbFxuXHR9KVxuXG5cdC8vIENyZWF0ZSB3cmFwcGVyIGZ1bmN0aW9ucyB0byBmaXggVHlwZVNjcmlwdCBlcnJvcnMgd2l0aCBEYXRlUGlja2VyXG5cdGNvbnN0IGhhbmRsZVN0YXJ0RGF0ZUNoYW5nZSA9IChkYXRlOiBEYXRlIHwgdW5kZWZpbmVkKSA9PiB7XG5cdFx0aWYgKCFkYXRlKSByZXR1cm5cblx0XHRzZXRTdGFydERhdGUoZGF0ZSlcblx0XHRpZiAoZGF5anMoZGF0ZSkuaXNBZnRlcihkYXlqcyhlbmREYXRlKSkpIHtcblx0XHRcdHNldEVuZERhdGUoZGF0ZSlcblx0XHR9XG5cdH1cblxuXHRjb25zdCBoYW5kbGVFbmREYXRlQ2hhbmdlID0gKGRhdGU6IERhdGUgfCB1bmRlZmluZWQpID0+IHtcblx0XHRpZiAoIWRhdGUpIHJldHVyblxuXHRcdHNldEVuZERhdGUoZGF0ZSlcblx0XHRpZiAoZGF0ZSAmJiBkYXlqcyhkYXRlKS5pc0JlZm9yZShkYXlqcyhzdGFydERhdGUpKSkge1xuXHRcdFx0c2V0U3RhcnREYXRlKGRhdGUpXG5cdFx0fVxuXHR9XG5cblx0Ly8gVGltZSB2YWxpZGF0aW9uIGhhbmRsZXJzIC0gb25seSB2YWxpZGF0ZSB3aGVuIGRhdGVzIGFyZSB0aGUgc2FtZVxuXHRjb25zdCBoYW5kbGVTdGFydFRpbWVDaGFuZ2UgPSAodGltZTogc3RyaW5nKSA9PiB7XG5cdFx0c2V0U3RhcnRUaW1lKHRpbWUpXG5cdFx0Ly8gT25seSB2YWxpZGF0ZSBpZiBzYW1lIGRheVxuXHRcdGlmIChkYXlqcyhzdGFydERhdGUpLmlzU2FtZShkYXlqcyhlbmREYXRlKSwgJ2RheScpICYmIHRpbWUgPiBlbmRUaW1lKSB7XG5cdFx0XHRzZXRFbmRUaW1lKHRpbWUpXG5cdFx0fVxuXHR9XG5cblx0Y29uc3QgaGFuZGxlRW5kVGltZUNoYW5nZSA9ICh0aW1lOiBzdHJpbmcpID0+IHtcblx0XHRzZXRFbmRUaW1lKHRpbWUpXG5cdFx0Ly8gT25seSB2YWxpZGF0ZSBpZiBzYW1lIGRheVxuXHRcdGlmIChkYXlqcyhzdGFydERhdGUpLmlzU2FtZShkYXlqcyhlbmREYXRlKSwgJ2RheScpICYmIHRpbWUgPCBzdGFydFRpbWUpIHtcblx0XHRcdHNldFN0YXJ0VGltZSh0aW1lKVxuXHRcdH1cblx0fVxuXG5cdC8vIFVwZGF0ZSBmb3JtIHZhbHVlcyB3aGVuIGlucHV0IGNoYW5nZXNcblx0Y29uc3QgaGFuZGxlSW5wdXRDaGFuZ2UgPSAoXG5cdFx0ZTogUmVhY3QuQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudCB8IEhUTUxUZXh0QXJlYUVsZW1lbnQ+XG5cdCkgPT4ge1xuXHRcdGNvbnN0IHsgbmFtZSwgdmFsdWUgfSA9IGUudGFyZ2V0XG5cdFx0c2V0Rm9ybVZhbHVlcygocHJldikgPT4gKHsgLi4ucHJldiwgW25hbWVdOiB2YWx1ZSB9KSlcblx0fVxuXG5cdHVzZUVmZmVjdCgoKSA9PiB7XG5cdFx0Ly8gUmVzZXQgZW5kIHRpbWUgd2hlbiBhbGwgZGF5IGlzIHRvZ2dsZWQgdG8gb25cblx0XHRpZiAoaXNBbGxEYXkpIHtcblx0XHRcdHNldEVuZFRpbWUoJzIzOjU5Jylcblx0XHR9XG5cdH0sIFtpc0FsbERheV0pXG5cblx0Y29uc3QgaGFuZGxlU3VibWl0ID0gKGU6IFJlYWN0LkZvcm1FdmVudCkgPT4ge1xuXHRcdGUucHJldmVudERlZmF1bHQoKVxuXG5cdFx0Y29uc3Qgc3RhcnREYXRlVGltZSA9IGJ1aWxkRGF0ZVRpbWUoc3RhcnREYXRlLCBzdGFydFRpbWUsIGlzQWxsRGF5KVxuXHRcdGNvbnN0IGVuZERhdGVUaW1lID0gYnVpbGRFbmREYXRlVGltZShlbmREYXRlLCBlbmRUaW1lLCBpc0FsbERheSlcblxuXHRcdGNvbnN0IGV2ZW50RGF0YTogQ2FsZW5kYXJFdmVudCA9IHtcblx0XHRcdGlkOiBzZWxlY3RlZEV2ZW50Py5pZCB8fCBkYXlqcygpLmZvcm1hdCgnWVlZWU1NRERISG1tc3MnKSxcblx0XHRcdHRpdGxlOiBmb3JtVmFsdWVzLnRpdGxlLFxuXHRcdFx0c3RhcnQ6IHN0YXJ0RGF0ZVRpbWUsXG5cdFx0XHRlbmQ6IGVuZERhdGVUaW1lLFxuXHRcdFx0cmVzb3VyY2VJZDogc2VsZWN0ZWRFdmVudD8ucmVzb3VyY2VJZCxcblx0XHRcdGRlc2NyaXB0aW9uOiBmb3JtVmFsdWVzLmRlc2NyaXB0aW9uLFxuXHRcdFx0bG9jYXRpb246IGZvcm1WYWx1ZXMubG9jYXRpb24sXG5cdFx0XHRhbGxEYXk6IGlzQWxsRGF5LFxuXHRcdFx0Y29sb3I6IHNlbGVjdGVkQ29sb3IsXG5cdFx0XHRycnVsZTogcnJ1bGUgfHwgdW5kZWZpbmVkLFxuXHRcdH1cblxuXHRcdGlmIChzZWxlY3RlZEV2ZW50Py5pZCAmJiBpc1JlY3VycmluZ0V2ZW50KHNlbGVjdGVkRXZlbnQpKSB7XG5cdFx0XHRvcGVuRWRpdERpYWxvZyhzZWxlY3RlZEV2ZW50LCB7XG5cdFx0XHRcdHRpdGxlOiBmb3JtVmFsdWVzLnRpdGxlLFxuXHRcdFx0XHRzdGFydDogc3RhcnREYXRlVGltZSxcblx0XHRcdFx0ZW5kOiBlbmREYXRlVGltZSxcblx0XHRcdFx0ZGVzY3JpcHRpb246IGZvcm1WYWx1ZXMuZGVzY3JpcHRpb24sXG5cdFx0XHRcdGxvY2F0aW9uOiBmb3JtVmFsdWVzLmxvY2F0aW9uLFxuXHRcdFx0XHRhbGxEYXk6IGlzQWxsRGF5LFxuXHRcdFx0XHRjb2xvcjogc2VsZWN0ZWRDb2xvcixcblx0XHRcdFx0cnJ1bGU6IHJydWxlIHx8IHVuZGVmaW5lZCxcblx0XHRcdH0pXG5cdFx0XHRyZXR1cm5cblx0XHR9XG5cblx0XHRpZiAoc2VsZWN0ZWRFdmVudD8uaWQpIHtcblx0XHRcdG9uVXBkYXRlPy4oZXZlbnREYXRhKVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRvbkFkZD8uKGV2ZW50RGF0YSlcblx0XHR9XG5cdFx0b25DbG9zZSgpXG5cdH1cblxuXHRjb25zdCBoYW5kbGVEZWxldGUgPSAoKSA9PiB7XG5cdFx0aWYgKHNlbGVjdGVkRXZlbnQ/LmlkKSB7XG5cdFx0XHQvLyBDaGVjayBpZiB0aGlzIGlzIGEgcmVjdXJyaW5nIGV2ZW50XG5cdFx0XHRpZiAoaXNSZWN1cnJpbmdFdmVudChzZWxlY3RlZEV2ZW50KSkge1xuXHRcdFx0XHQvLyBTaG93IHJlY3VycmluZyBldmVudCBkZWxldGUgZGlhbG9nXG5cdFx0XHRcdG9wZW5EZWxldGVEaWFsb2coc2VsZWN0ZWRFdmVudClcblx0XHRcdFx0cmV0dXJuIC8vIERvbid0IGNsb3NlIHRoZSBmb3JtIHlldCwgbGV0IHRoZSBkaWFsb2cgaGFuZGxlIGl0XG5cdFx0XHR9XG5cdFx0XHRvbkRlbGV0ZT8uKHNlbGVjdGVkRXZlbnQpXG5cdFx0XHRvbkNsb3NlKClcblx0XHR9XG5cdH1cblxuXHRjb25zdCBoYW5kbGVSUnVsZUNoYW5nZSA9IChuZXdSUnVsZTogUlJ1bGVPcHRpb25zIHwgbnVsbCkgPT4ge1xuXHRcdGlmICghbmV3UlJ1bGUpIHtcblx0XHRcdHNldFJydWxlKG51bGwpXG5cdFx0XHRyZXR1cm5cblx0XHR9XG5cdFx0Y29uc3Qgc3RhcnREYXRlVGltZSA9IGJ1aWxkRGF0ZVRpbWUoc3RhcnREYXRlLCBzdGFydFRpbWUsIGlzQWxsRGF5KVxuXHRcdHNldFJydWxlKHsgLi4ubmV3UlJ1bGUsIGR0c3RhcnQ6IHN0YXJ0RGF0ZVRpbWUudG9EYXRlKCkgfSlcblx0fVxuXG5cdGNvbnN0IGRpc2FibGVkRGF0ZU1hdGNoZXIgPSBlZmZlY3RpdmVCdXNpbmVzc0hvdXJzXG5cdFx0PyAoZGF0ZTogRGF0ZSkgPT4gIWlzQnVzaW5lc3NEYXkoZGF5anMoZGF0ZSksIGVmZmVjdGl2ZUJ1c2luZXNzSG91cnMpXG5cdFx0OiB1bmRlZmluZWRcblxuXHRjb25zdCBzdGFydENvbnN0cmFpbnRzID0gZ2V0VGltZUNvbnN0cmFpbnRzKHN0YXJ0RGF0ZSwgZWZmZWN0aXZlQnVzaW5lc3NIb3Vycylcblx0Y29uc3QgZW5kQ29uc3RyYWludHMgPSBnZXRUaW1lQ29uc3RyYWludHMoZW5kRGF0ZSwgZWZmZWN0aXZlQnVzaW5lc3NIb3VycylcblxuXHRjb25zdCBkYXRlRmllbGRzID0gW1xuXHRcdFsnc3RhcnREYXRlJywgc3RhcnREYXRlLCBoYW5kbGVTdGFydERhdGVDaGFuZ2VdLFxuXHRcdFsnZW5kRGF0ZScsIGVuZERhdGUsIGhhbmRsZUVuZERhdGVDaGFuZ2VdLFxuXHRdIGFzIGNvbnN0XG5cblx0Y29uc3QgdGltZUZpZWxkcyA9IFtcblx0XHRbXG5cdFx0XHQnc3RhcnRUaW1lJyxcblx0XHRcdCdzdGFydC10aW1lJyxcblx0XHRcdHN0YXJ0VGltZSxcblx0XHRcdGhhbmRsZVN0YXJ0VGltZUNoYW5nZSxcblx0XHRcdHN0YXJ0Q29uc3RyYWludHMsXG5cdFx0XSxcblx0XHRbJ2VuZFRpbWUnLCAnZW5kLXRpbWUnLCBlbmRUaW1lLCBoYW5kbGVFbmRUaW1lQ2hhbmdlLCBlbmRDb25zdHJhaW50c10sXG5cdF0gYXMgY29uc3RcblxuXHRyZXR1cm4gKFxuXHRcdDw+XG5cdFx0XHQ8Zm9ybSBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIGZsZXgtMSBtaW4taC0wXCIgb25TdWJtaXQ9e2hhbmRsZVN1Ym1pdH0+XG5cdFx0XHRcdDxTY3JvbGxBcmVhIGNsYXNzTmFtZT1cImZsZXgtMSBtaW4taC0wXCI+XG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJncmlkIGdhcC0zIHNtOmdhcC00IHAtMVwiPlxuXHRcdFx0XHRcdFx0PEV2ZW50Rm9ybVRleHRGaWVsZFxuXHRcdFx0XHRcdFx0XHRsYWJlbD17dCgndGl0bGUnKX1cblx0XHRcdFx0XHRcdFx0bmFtZT1cInRpdGxlXCJcblx0XHRcdFx0XHRcdFx0b25DaGFuZ2U9e2hhbmRsZUlucHV0Q2hhbmdlfVxuXHRcdFx0XHRcdFx0XHRwbGFjZWhvbGRlcj17dCgnZXZlbnRUaXRsZVBsYWNlaG9sZGVyJyl9XG5cdFx0XHRcdFx0XHRcdHJlcXVpcmVkXG5cdFx0XHRcdFx0XHRcdHZhbHVlPXtmb3JtVmFsdWVzLnRpdGxlfVxuXHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdDxFdmVudEZvcm1UZXh0RmllbGRcblx0XHRcdFx0XHRcdFx0bGFiZWw9e3QoJ2Rlc2NyaXB0aW9uJyl9XG5cdFx0XHRcdFx0XHRcdG5hbWU9XCJkZXNjcmlwdGlvblwiXG5cdFx0XHRcdFx0XHRcdG9uQ2hhbmdlPXtoYW5kbGVJbnB1dENoYW5nZX1cblx0XHRcdFx0XHRcdFx0cGxhY2Vob2xkZXI9e3QoJ2V2ZW50RGVzY3JpcHRpb25QbGFjZWhvbGRlcicpfVxuXHRcdFx0XHRcdFx0XHR2YWx1ZT17Zm9ybVZhbHVlcy5kZXNjcmlwdGlvbn1cblx0XHRcdFx0XHRcdC8+XG5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0yXCI+XG5cdFx0XHRcdFx0XHRcdDxDaGVja2JveFxuXHRcdFx0XHRcdFx0XHRcdGNoZWNrZWQ9e2lzQWxsRGF5fVxuXHRcdFx0XHRcdFx0XHRcdGlkPVwiYWxsRGF5XCJcblx0XHRcdFx0XHRcdFx0XHRvbkNoZWNrZWRDaGFuZ2U9eyhjaGVja2VkKSA9PiBzZXRJc0FsbERheShjaGVja2VkID09PSB0cnVlKX1cblx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0PExhYmVsIGNsYXNzTmFtZT1cInRleHQteHMgc206dGV4dC1zbVwiIGh0bWxGb3I9XCJhbGxEYXlcIj5cblx0XHRcdFx0XHRcdFx0XHR7dCgnYWxsRGF5Jyl9XG5cdFx0XHRcdFx0XHRcdDwvTGFiZWw+XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJncmlkIGdyaWQtY29scy0yIGdhcC0yIHNtOmdhcC00XCI+XG5cdFx0XHRcdFx0XHRcdHtkYXRlRmllbGRzLm1hcCgoW2xhYmVsLCBkYXRlLCBvbkNoYW5nZV0pID0+IChcblx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGtleT17bGFiZWx9PlxuXHRcdFx0XHRcdFx0XHRcdFx0PExhYmVsIGNsYXNzTmFtZT1cInRleHQteHMgc206dGV4dC1zbVwiPnt0KGxhYmVsKX08L0xhYmVsPlxuXHRcdFx0XHRcdFx0XHRcdFx0PERhdGVQaWNrZXJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwibXQtMVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNsb3NlT25TZWxlY3Rcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF0ZT17ZGF0ZX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0ZGlzYWJsZWQ9e2Rpc2FibGVkRGF0ZU1hdGNoZXJ9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9uQ2hhbmdlPXtvbkNoYW5nZX1cblx0XHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdCkpfVxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cblx0XHRcdFx0XHRcdHshaXNBbGxEYXkgJiYgKFxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ3JpZC1jb2xzLTIgZ2FwLTIgc206Z2FwLTRcIj5cblx0XHRcdFx0XHRcdFx0XHR7dGltZUZpZWxkcy5tYXAoKFtsYWJlbCwgbmFtZSwgdmFsdWUsIG9uQ2hhbmdlLCBjXSkgPT4gKFxuXHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBrZXk9e2xhYmVsfT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0PExhYmVsIGNsYXNzTmFtZT1cInRleHQteHMgc206dGV4dC1zbVwiPnt0KGxhYmVsKX08L0xhYmVsPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8VGltZVBpY2tlclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cIm10LTEgaC04IHRleHQtc20gc206aC05XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtYXhUaW1lPXtjLm1heH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtaW5UaW1lPXtjLm1pbn1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRuYW1lPXtuYW1lfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9uQ2hhbmdlPXtvbkNoYW5nZX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRwbGFjZWhvbGRlcj17dCgnc2VhcmNoVGltZScpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRpbWVGb3JtYXQ9e3RpbWVGb3JtYXR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFsdWU9e3ZhbHVlfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdFx0KSl9XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0KX1cblxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJncmlkIGdhcC0xIHNtOmdhcC0yXCI+XG5cdFx0XHRcdFx0XHRcdDxMYWJlbCBjbGFzc05hbWU9XCJ0ZXh0LXhzIHNtOnRleHQtc21cIj57dCgnY29sb3InKX08L0xhYmVsPlxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC13cmFwIGdhcC0yXCI+XG5cdFx0XHRcdFx0XHRcdFx0e0NPTE9SX09QVElPTlMubWFwKChjb2xvcikgPT4gKFxuXHRcdFx0XHRcdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRhcmlhLWxhYmVsPXtjb2xvci5sYWJlbH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRgJHtjb2xvci52YWx1ZX0gaC02IHctNiByb3VuZGVkLWZ1bGwgc206aC04IHNtOnctOGAsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0c2VsZWN0ZWRDb2xvciA9PT0gY29sb3IudmFsdWUgJiZcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdyaW5nLTIgcmluZy1ibGFjayByaW5nLW9mZnNldC0xIHNtOnJpbmctb2Zmc2V0LTInXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGtleT17Y29sb3IudmFsdWV9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9uQ2xpY2s9eygpID0+IHNldFNlbGVjdGVkQ29sb3IoY29sb3IudmFsdWUpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyaWFudD1cImdob3N0XCJcblx0XHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdFx0KSl9XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cblx0XHRcdFx0XHRcdDxFdmVudEZvcm1UZXh0RmllbGRcblx0XHRcdFx0XHRcdFx0bGFiZWw9e3QoJ2xvY2F0aW9uJyl9XG5cdFx0XHRcdFx0XHRcdG5hbWU9XCJsb2NhdGlvblwiXG5cdFx0XHRcdFx0XHRcdG9uQ2hhbmdlPXtoYW5kbGVJbnB1dENoYW5nZX1cblx0XHRcdFx0XHRcdFx0cGxhY2Vob2xkZXI9e3QoJ2V2ZW50TG9jYXRpb25QbGFjZWhvbGRlcicpfVxuXHRcdFx0XHRcdFx0XHR2YWx1ZT17Zm9ybVZhbHVlcy5sb2NhdGlvbn1cblx0XHRcdFx0XHRcdC8+XG5cblx0XHRcdFx0XHRcdHsvKiBSZWN1cnJlbmNlIFNlY3Rpb24gKi99XG5cdFx0XHRcdFx0XHQ8UmVjdXJyZW5jZUVkaXRvciBvbkNoYW5nZT17aGFuZGxlUlJ1bGVDaGFuZ2V9IHZhbHVlPXtycnVsZX0gLz5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PC9TY3JvbGxBcmVhPlxuXG5cdFx0XHRcdDxEaWFsb2dGb290ZXIgY2xhc3NOYW1lPVwibXQtNCBzaHJpbmstMCBmbGV4IGZsZXgtY29sLXJldmVyc2UgZ2FwLTIgc206ZmxleC1yb3cgc206Z2FwLTBcIj5cblx0XHRcdFx0XHR7c2VsZWN0ZWRFdmVudD8uaWQgJiYgKFxuXHRcdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJ3LWZ1bGwgc206bXItYXV0byBzbTp3LWF1dG9cIlxuXHRcdFx0XHRcdFx0XHRvbkNsaWNrPXtoYW5kbGVEZWxldGV9XG5cdFx0XHRcdFx0XHRcdHNpemU9XCJzbVwiXG5cdFx0XHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIlxuXHRcdFx0XHRcdFx0XHR2YXJpYW50PVwiZGVzdHJ1Y3RpdmVcIlxuXHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHR7dCgnZGVsZXRlJyl9XG5cdFx0XHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCB3LWZ1bGwgZ2FwLTIgc206dy1hdXRvXCI+XG5cdFx0XHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImZsZXgtMSBzbTpmbGV4LW5vbmVcIlxuXHRcdFx0XHRcdFx0XHRvbkNsaWNrPXtvbkNsb3NlfVxuXHRcdFx0XHRcdFx0XHRzaXplPVwic21cIlxuXHRcdFx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCJcblx0XHRcdFx0XHRcdFx0dmFyaWFudD1cIm91dGxpbmVcIlxuXHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHR7dCgnY2FuY2VsJyl9XG5cdFx0XHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdFx0XHRcdDxCdXR0b24gY2xhc3NOYW1lPVwiZmxleC0xIHNtOmZsZXgtbm9uZVwiIHNpemU9XCJzbVwiIHR5cGU9XCJzdWJtaXRcIj5cblx0XHRcdFx0XHRcdFx0e3NlbGVjdGVkRXZlbnQ/LmlkID8gdCgndXBkYXRlJykgOiB0KCdjcmVhdGUnKX1cblx0XHRcdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8L0RpYWxvZ0Zvb3Rlcj5cblx0XHRcdDwvZm9ybT5cblxuXHRcdFx0ey8qIFJlY3VycmluZyBFdmVudCBFZGl0IERpYWxvZyAqL31cblx0XHRcdDxSZWN1cnJlbmNlRWRpdERpYWxvZ1xuXHRcdFx0XHRldmVudFRpdGxlPXtkaWFsb2dTdGF0ZS5ldmVudD8udGl0bGUgfHwgJyd9XG5cdFx0XHRcdGlzT3Blbj17ZGlhbG9nU3RhdGUuaXNPcGVufVxuXHRcdFx0XHRvbkNsb3NlPXtjbG9zZURpYWxvZ31cblx0XHRcdFx0b25Db25maXJtPXtoYW5kbGVDb25maXJtfVxuXHRcdFx0XHRvcGVyYXRpb25UeXBlPXtkaWFsb2dTdGF0ZS5vcGVyYXRpb25UeXBlfVxuXHRcdFx0Lz5cblx0XHQ8Lz5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgKiBhcyBDaGVja2JveFByaW1pdGl2ZSBmcm9tICdAcmFkaXgtdWkvcmVhY3QtY2hlY2tib3gnXG5pbXBvcnQgeyBDaGVja0ljb24gfSBmcm9tICdsdWNpZGUtcmVhY3QnXG5pbXBvcnQgdHlwZSAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5mdW5jdGlvbiBDaGVja2JveCh7XG5cdGNsYXNzTmFtZSxcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBDaGVja2JveFByaW1pdGl2ZS5Sb290Pikge1xuXHRyZXR1cm4gKFxuXHRcdDxDaGVja2JveFByaW1pdGl2ZS5Sb290XG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQncGVlciBib3JkZXItaW5wdXQgZGFyazpiZy1pbnB1dC8zMCBkYXRhLVtzdGF0ZT1jaGVja2VkXTpiZy1wcmltYXJ5IGRhdGEtW3N0YXRlPWNoZWNrZWRdOnRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIGRhcms6ZGF0YS1bc3RhdGU9Y2hlY2tlZF06YmctcHJpbWFyeSBkYXRhLVtzdGF0ZT1jaGVja2VkXTpib3JkZXItcHJpbWFyeSBmb2N1cy12aXNpYmxlOmJvcmRlci1yaW5nIGZvY3VzLXZpc2libGU6cmluZy1yaW5nLzUwIGFyaWEtaW52YWxpZDpyaW5nLWRlc3RydWN0aXZlLzIwIGRhcms6YXJpYS1pbnZhbGlkOnJpbmctZGVzdHJ1Y3RpdmUvNDAgYXJpYS1pbnZhbGlkOmJvcmRlci1kZXN0cnVjdGl2ZSBzaXplLTQgc2hyaW5rLTAgcm91bmRlZC1bNHB4XSBib3JkZXIgc2hhZG93LXhzIHRyYW5zaXRpb24tc2hhZG93IG91dGxpbmUtbm9uZSBmb2N1cy12aXNpYmxlOnJpbmctWzNweF0gZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIGRpc2FibGVkOm9wYWNpdHktNTAnLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJjaGVja2JveFwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0PlxuXHRcdFx0PENoZWNrYm94UHJpbWl0aXZlLkluZGljYXRvclxuXHRcdFx0XHRjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB0ZXh0LWN1cnJlbnQgdHJhbnNpdGlvbi1ub25lXCJcblx0XHRcdFx0ZGF0YS1zbG90PVwiY2hlY2tib3gtaW5kaWNhdG9yXCJcblx0XHRcdD5cblx0XHRcdFx0PENoZWNrSWNvbiBjbGFzc05hbWU9XCJzaXplLTMuNVwiIC8+XG5cdFx0XHQ8L0NoZWNrYm94UHJpbWl0aXZlLkluZGljYXRvcj5cblx0XHQ8L0NoZWNrYm94UHJpbWl0aXZlLlJvb3Q+XG5cdClcbn1cblxuZXhwb3J0IHsgQ2hlY2tib3ggfVxuIiwKICAgICJpbXBvcnQgeyBQb3BvdmVyQ2xvc2UgfSBmcm9tICdAcmFkaXgtdWkvcmVhY3QtcG9wb3ZlcidcbmltcG9ydCB7IENhbGVuZGFyIGFzIENhbGVuZGFySWNvbiB9IGZyb20gJ2x1Y2lkZS1yZWFjdCdcbmltcG9ydCB7IHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2J1dHRvbidcbmltcG9ydCB7IENhbGVuZGFyIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2NhbGVuZGFyJ1xuaW1wb3J0IHtcblx0UG9wb3Zlcixcblx0UG9wb3ZlckNvbnRlbnQsXG5cdFBvcG92ZXJUcmlnZ2VyLFxufSBmcm9tICdAL2NvbXBvbmVudHMvdWkvcG9wb3ZlcidcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmludGVyZmFjZSBEYXRlUGlja2VyUHJvcHMge1xuXHRkYXRlOiBEYXRlIHwgdW5kZWZpbmVkXG5cdG9uQ2hhbmdlPzogKGRhdGU6IERhdGUgfCB1bmRlZmluZWQpID0+IHZvaWRcblx0bGFiZWw/OiBzdHJpbmdcblx0Y2xhc3NOYW1lPzogc3RyaW5nXG5cdGNsb3NlT25TZWxlY3Q/OiBib29sZWFuXG5cdGRpc2FibGVkPzogKGRhdGU6IERhdGUpID0+IGJvb2xlYW5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIERhdGVQaWNrZXIoe1xuXHRkYXRlLFxuXHRjbG9zZU9uU2VsZWN0LFxuXHRvbkNoYW5nZSxcblx0bGFiZWwgPSAnUGljayBhIGRhdGUnLFxuXHRjbGFzc05hbWUsXG5cdGRpc2FibGVkLFxufTogRGF0ZVBpY2tlclByb3BzKSB7XG5cdGNvbnN0IGZpcnN0RGF5T2ZXZWVrID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoXG5cdFx0KGNvbnRleHQpID0+IGNvbnRleHQuZmlyc3REYXlPZldlZWtcblx0KVxuXHRjb25zdCBwb3BPdmVyUmVmID0gdXNlUmVmPEhUTUxCdXR0b25FbGVtZW50IHwgbnVsbD4obnVsbClcblx0Y29uc3QgW3NlbGVjdGVkRGF0ZSwgc2V0U2VsZWN0ZWREYXRlXSA9IHVzZVN0YXRlPERhdGUgfCB1bmRlZmluZWQ+KGRhdGUpXG5cblx0dXNlRWZmZWN0KCgpID0+IHtcblx0XHRzZXRTZWxlY3RlZERhdGUoZGF0ZSlcblx0fSwgW2RhdGVdKVxuXG5cdGNvbnN0IGhhbmRsZURhdGVTZWxlY3QgPSAoZGF0ZTogRGF0ZSB8IHVuZGVmaW5lZCkgPT4ge1xuXHRcdHNldFNlbGVjdGVkRGF0ZShkYXRlKVxuXHRcdGlmIChjbG9zZU9uU2VsZWN0KSB7XG5cdFx0XHRwb3BPdmVyUmVmLmN1cnJlbnQ/LmNsaWNrKClcblx0XHR9XG5cdFx0b25DaGFuZ2U/LihkYXRlKVxuXHR9XG5cblx0cmV0dXJuIChcblx0XHQ8ZGl2IGNsYXNzTmFtZT17Y2xhc3NOYW1lfT5cblx0XHRcdDxQb3BvdmVyPlxuXHRcdFx0XHQ8UG9wb3ZlclRyaWdnZXIgYXNDaGlsZD5cblx0XHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0XHQnZGF0YS1bZW1wdHk9dHJ1ZV06dGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHctZnVsbCBqdXN0aWZ5LXN0YXJ0IHRleHQtbGVmdCBmb250LW5vcm1hbCdcblx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRkYXRhLWVtcHR5PXshZGF0ZX1cblx0XHRcdFx0XHRcdHZhcmlhbnQ9XCJvdXRsaW5lXCJcblx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHQ8Q2FsZW5kYXJJY29uIC8+XG5cdFx0XHRcdFx0XHR7c2VsZWN0ZWREYXRlID8gKFxuXHRcdFx0XHRcdFx0XHRkYXlqcyhzZWxlY3RlZERhdGUpLmZvcm1hdCgnbGwnKVxuXHRcdFx0XHRcdFx0KSA6IChcblx0XHRcdFx0XHRcdFx0PHNwYW4+e2xhYmVsfTwvc3Bhbj5cblx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHRcdDwvUG9wb3ZlclRyaWdnZXI+XG5cdFx0XHRcdDxQb3BvdmVyQ29udGVudCBhbGlnbj1cInN0YXJ0XCIgY2xhc3NOYW1lPVwidy1hdXRvIHAtMFwiPlxuXHRcdFx0XHRcdDxQb3BvdmVyQ2xvc2UgcmVmPXtwb3BPdmVyUmVmfSBzdHlsZT17eyBkaXNwbGF5OiAnbm9uZScgfX0gLz5cblx0XHRcdFx0XHQ8Q2FsZW5kYXJcblx0XHRcdFx0XHRcdGRlZmF1bHRNb250aD17c2VsZWN0ZWREYXRlfVxuXHRcdFx0XHRcdFx0ZGlzYWJsZWQ9e2Rpc2FibGVkfVxuXHRcdFx0XHRcdFx0Zmlyc3REYXlPZldlZWs9e2ZpcnN0RGF5T2ZXZWVrfVxuXHRcdFx0XHRcdFx0b25TZWxlY3Q9e2hhbmRsZURhdGVTZWxlY3R9XG5cdFx0XHRcdFx0XHRzZWxlY3RlZD17c2VsZWN0ZWREYXRlfVxuXHRcdFx0XHRcdC8+XG5cdFx0XHRcdDwvUG9wb3ZlckNvbnRlbnQ+XG5cdFx0XHQ8L1BvcG92ZXI+XG5cdFx0PC9kaXY+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHsgQ2hldnJvbkxlZnRJY29uLCBDaGV2cm9uUmlnaHRJY29uIH0gZnJvbSAnbHVjaWRlLXJlYWN0J1xuaW1wb3J0IHsgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9idXR0b24nXG5pbXBvcnQgZGF5anMsIHsgdHlwZSBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IGdldE1vbnRoV2Vla3MsIGdldFdlZWtEYXlzLCBpc1RvZGF5IH0gZnJvbSAnQC9saWIvdXRpbHMvZGF0ZS11dGlscydcblxuaW50ZXJmYWNlIENhbGVuZGFyUHJvcHMge1xuXHRzZWxlY3RlZD86IERhdGVcblx0ZGVmYXVsdE1vbnRoPzogRGF0ZVxuXHRvblNlbGVjdD86IChkYXRlOiBEYXRlIHwgdW5kZWZpbmVkKSA9PiB2b2lkXG5cdGRpc2FibGVkPzogKGRhdGU6IERhdGUpID0+IGJvb2xlYW5cblx0Zmlyc3REYXlPZldlZWs/OiBudW1iZXJcblx0Y2xhc3NOYW1lPzogc3RyaW5nXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBDYWxlbmRhcih7XG5cdHNlbGVjdGVkLFxuXHRkZWZhdWx0TW9udGgsXG5cdG9uU2VsZWN0LFxuXHRkaXNhYmxlZCxcblx0Zmlyc3REYXlPZldlZWsgPSAwLFxuXHRjbGFzc05hbWUsXG59OiBDYWxlbmRhclByb3BzKSB7XG5cdGNvbnN0IFt2aWV3TW9udGgsIHNldFZpZXdNb250aF0gPSB1c2VTdGF0ZTxEYXlqcz4oKCkgPT5cblx0XHRkYXlqcyhkZWZhdWx0TW9udGggPz8gc2VsZWN0ZWQgPz8gbmV3IERhdGUoKSkuc3RhcnRPZignbW9udGgnKVxuXHQpXG5cblx0Y29uc3Qgd2Vla3MgPSBnZXRNb250aFdlZWtzKHZpZXdNb250aCwgZmlyc3REYXlPZldlZWspXG5cdGNvbnN0IHNlbGVjdGVkS2V5ID0gc2VsZWN0ZWRcblx0XHQ/IGRheWpzKHNlbGVjdGVkKS5mb3JtYXQoJ1lZWVktTU0tREQnKVxuXHRcdDogdW5kZWZpbmVkXG5cblx0Y29uc3Qgd2Vla2RheUhlYWRlcnMgPSBnZXRXZWVrRGF5cyhkYXlqcygpLCBmaXJzdERheU9mV2VlaykubWFwKChkKSA9PlxuXHRcdGQuZm9ybWF0KCdkZCcpXG5cdClcblxuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oJ2JnLWJhY2tncm91bmQgcC0zIHctWzI4MHB4XScsIGNsYXNzTmFtZSl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJjYWxlbmRhclwiXG5cdFx0PlxuXHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gbWItMlwiPlxuXHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0YXJpYS1sYWJlbD1cIlByZXZpb3VzIG1vbnRoXCJcblx0XHRcdFx0XHRvbkNsaWNrPXsoKSA9PiBzZXRWaWV3TW9udGgoKG0pID0+IG0uc3VidHJhY3QoMSwgJ21vbnRoJykpfVxuXHRcdFx0XHRcdHNpemU9XCJpY29uXCJcblx0XHRcdFx0XHR2YXJpYW50PVwiZ2hvc3RcIlxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0PENoZXZyb25MZWZ0SWNvbiBjbGFzc05hbWU9XCJzaXplLTRcIiAvPlxuXHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIGZvbnQtbWVkaXVtIHNlbGVjdC1ub25lXCI+XG5cdFx0XHRcdFx0e3ZpZXdNb250aC5mb3JtYXQoJ01NTU0gWVlZWScpfVxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdGFyaWEtbGFiZWw9XCJOZXh0IG1vbnRoXCJcblx0XHRcdFx0XHRvbkNsaWNrPXsoKSA9PiBzZXRWaWV3TW9udGgoKG0pID0+IG0uYWRkKDEsICdtb250aCcpKX1cblx0XHRcdFx0XHRzaXplPVwiaWNvblwiXG5cdFx0XHRcdFx0dmFyaWFudD1cImdob3N0XCJcblx0XHRcdFx0PlxuXHRcdFx0XHRcdDxDaGV2cm9uUmlnaHRJY29uIGNsYXNzTmFtZT1cInNpemUtNFwiIC8+XG5cdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0PC9kaXY+XG5cblx0XHRcdDx0YWJsZVxuXHRcdFx0XHRjbGFzc05hbWU9XCJ3LWZ1bGwgYm9yZGVyLWNvbGxhcHNlXCJcblx0XHRcdFx0Ly8gYmlvbWUtaWdub3JlIGxpbnQvYTExeS9ub05vbmludGVyYWN0aXZlRWxlbWVudFRvSW50ZXJhY3RpdmVSb2xlOiBkYXRlLXBpY2tlciBwYXR0ZXJuIOKAlCBXQUktQVJJQSBncmlkIHJvbGUgb24gYSB0YWJsZSBpcyBjYW5vbmljYWwgZm9yIGNhbGVuZGFyc1xuXHRcdFx0XHRyb2xlPVwiZ3JpZFwiXG5cdFx0XHQ+XG5cdFx0XHRcdDx0aGVhZD5cblx0XHRcdFx0XHQ8dHI+XG5cdFx0XHRcdFx0XHR7d2Vla2RheUhlYWRlcnMubWFwKChsYWJlbCwgaSkgPT4gKFxuXHRcdFx0XHRcdFx0XHQ8dGhcblx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJ0ZXh0LW11dGVkLWZvcmVncm91bmQgdGV4dC14cyBmb250LW1lZGl1bSBzZWxlY3Qtbm9uZSBweS0xXCJcblx0XHRcdFx0XHRcdFx0XHQvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vQXJyYXlJbmRleEtleTogd2Vla2RheSBoZWFkZXIgb3JkZXIgaXMgc3RhYmxlXG5cdFx0XHRcdFx0XHRcdFx0a2V5PXtpfVxuXHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0e2xhYmVsfVxuXHRcdFx0XHRcdFx0XHQ8L3RoPlxuXHRcdFx0XHRcdFx0KSl9XG5cdFx0XHRcdFx0PC90cj5cblx0XHRcdFx0PC90aGVhZD5cblx0XHRcdFx0PHRib2R5PlxuXHRcdFx0XHRcdHt3ZWVrcy5tYXAoKHdlZWssIHdlZWtJZHgpID0+IChcblx0XHRcdFx0XHRcdC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9BcnJheUluZGV4S2V5OiB3ZWVrIHJvdyBvcmRlciBpcyBzdGFibGUgd2l0aGluIGEgbW9udGhcblx0XHRcdFx0XHRcdDx0ciBrZXk9e3dlZWtJZHh9PlxuXHRcdFx0XHRcdFx0XHR7d2Vlay5tYXAoKGRheSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IGlzT3V0c2lkZSA9ICFkYXkuaXNTYW1lKHZpZXdNb250aCwgJ21vbnRoJylcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBpc1NlbGVjdGVkID0gZGF5LmZvcm1hdCgnWVlZWS1NTS1ERCcpID09PSBzZWxlY3RlZEtleVxuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IGlzRGlzYWJsZWQgPSBkaXNhYmxlZD8uKGRheS50b0RhdGUoKSkgPz8gZmFsc2Vcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHRcdFx0PHRkXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cInAtMCB0ZXh0LWNlbnRlclwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGRhdGEtZGlzYWJsZWQ9e2lzRGlzYWJsZWR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGRhdGEtb3V0c2lkZT17aXNPdXRzaWRlfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRkYXRhLXNlbGVjdGVkPXtpc1NlbGVjdGVkfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRrZXk9e2RheS50b0lTT1N0cmluZygpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBiaW9tZS1pZ25vcmUgbGludC9hMTF5L25vTm9uaW50ZXJhY3RpdmVFbGVtZW50VG9JbnRlcmFjdGl2ZVJvbGU6IGRhdGUtcGlja2VyIHBhdHRlcm4g4oCUIFdBSS1BUklBIGdyaWRjZWxsIG9uIHRkIGlzIGNhbm9uaWNhbDsga2V5Ym9hcmQgbmF2IGxpdmVzIG9uIHRoZSBjaGlsZCBidXR0b25cblx0XHRcdFx0XHRcdFx0XHRcdFx0cm9sZT1cImdyaWRjZWxsXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGFiSW5kZXg9ey0xfVxuXHRcdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8YnV0dG9uXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXJpYS1kaXNhYmxlZD17aXNEaXNhYmxlZH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhcmlhLWhpZGRlbj17aXNPdXRzaWRlfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQndy1mdWxsIGFzcGVjdC1zcXVhcmUgcm91bmRlZC1tZCB0ZXh0LXNtIHNlbGVjdC1ub25lJyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCFpc0Rpc2FibGVkICYmICdob3ZlcjpiZy1hY2NlbnQgY3Vyc29yLXBvaW50ZXInLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aXNPdXRzaWRlICYmICd0ZXh0LW11dGVkLWZvcmVncm91bmQvNTAnLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aXNUb2RheShkYXkpICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCFpc1NlbGVjdGVkICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdiZy1hY2NlbnQgdGV4dC1hY2NlbnQtZm9yZWdyb3VuZCcsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpc1NlbGVjdGVkICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdiZy1wcmltYXJ5IHRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIGZvbnQtbWVkaXVtJyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlzRGlzYWJsZWQgJiYgJ29wYWNpdHktNTAgY3Vyc29yLW5vdC1hbGxvd2VkJ1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF0YS1kaXNhYmxlZD17aXNEaXNhYmxlZH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkYXRhLXNlbGVjdGVkPXtpc1NlbGVjdGVkfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRpc2FibGVkPXtpc0Rpc2FibGVkIHx8IGlzT3V0c2lkZX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvbkNsaWNrPXsoKSA9PiBvblNlbGVjdD8uKGRheS50b0RhdGUoKSl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGFiSW5kZXg9e2lzT3V0c2lkZSA/IC0xIDogMH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHtkYXkuZm9ybWF0KCdEJyl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdDwvYnV0dG9uPlxuXHRcdFx0XHRcdFx0XHRcdFx0PC90ZD5cblx0XHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHRcdH0pfVxuXHRcdFx0XHRcdFx0PC90cj5cblx0XHRcdFx0XHQpKX1cblx0XHRcdFx0PC90Ym9keT5cblx0XHRcdDwvdGFibGU+XG5cdFx0PC9kaXY+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0ICogYXMgUG9wb3ZlclByaW1pdGl2ZSBmcm9tICdAcmFkaXgtdWkvcmVhY3QtcG9wb3ZlcidcbmltcG9ydCB0eXBlICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmZ1bmN0aW9uIFBvcG92ZXIoe1xuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFBvcG92ZXJQcmltaXRpdmUuUm9vdD4pIHtcblx0cmV0dXJuIDxQb3BvdmVyUHJpbWl0aXZlLlJvb3QgZGF0YS1zbG90PVwicG9wb3ZlclwiIHsuLi5wcm9wc30gLz5cbn1cblxuZnVuY3Rpb24gUG9wb3ZlclRyaWdnZXIoe1xuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFBvcG92ZXJQcmltaXRpdmUuVHJpZ2dlcj4pIHtcblx0cmV0dXJuIDxQb3BvdmVyUHJpbWl0aXZlLlRyaWdnZXIgZGF0YS1zbG90PVwicG9wb3Zlci10cmlnZ2VyXCIgey4uLnByb3BzfSAvPlxufVxuXG5mdW5jdGlvbiBQb3BvdmVyQ29udGVudCh7XG5cdGNsYXNzTmFtZSxcblx0YWxpZ24gPSAnY2VudGVyJyxcblx0c2lkZU9mZnNldCA9IDQsXG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgUG9wb3ZlclByaW1pdGl2ZS5Db250ZW50Pikge1xuXHRyZXR1cm4gKFxuXHRcdDxQb3BvdmVyUHJpbWl0aXZlLlBvcnRhbD5cblx0XHRcdDxQb3BvdmVyUHJpbWl0aXZlLkNvbnRlbnRcblx0XHRcdFx0YWxpZ249e2FsaWdufVxuXHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdCdiZy1wb3BvdmVyIHRleHQtcG9wb3Zlci1mb3JlZ3JvdW5kIGRhdGEtW3N0YXRlPW9wZW5dOmFuaW1hdGUtaW4gZGF0YS1bc3RhdGU9Y2xvc2VkXTphbmltYXRlLW91dCBkYXRhLVtzdGF0ZT1jbG9zZWRdOmZhZGUtb3V0LTAgZGF0YS1bc3RhdGU9b3Blbl06ZmFkZS1pbi0wIGRhdGEtW3N0YXRlPWNsb3NlZF06em9vbS1vdXQtOTUgZGF0YS1bc3RhdGU9b3Blbl06em9vbS1pbi05NSBkYXRhLVtzaWRlPWJvdHRvbV06c2xpZGUtaW4tZnJvbS10b3AtMiBkYXRhLVtzaWRlPWxlZnRdOnNsaWRlLWluLWZyb20tcmlnaHQtMiBkYXRhLVtzaWRlPXJpZ2h0XTpzbGlkZS1pbi1mcm9tLWxlZnQtMiBkYXRhLVtzaWRlPXRvcF06c2xpZGUtaW4tZnJvbS1ib3R0b20tMiB6LTUwIHctNzIgb3JpZ2luLSgtLXJhZGl4LXBvcG92ZXItY29udGVudC10cmFuc2Zvcm0tb3JpZ2luKSByb3VuZGVkLW1kIGJvcmRlciBwLTQgc2hhZG93LW1kIG91dGxpbmUtaGlkZGVuJyxcblx0XHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdFx0KX1cblx0XHRcdFx0ZGF0YS1zbG90PVwicG9wb3Zlci1jb250ZW50XCJcblx0XHRcdFx0c2lkZU9mZnNldD17c2lkZU9mZnNldH1cblx0XHRcdFx0ey4uLnByb3BzfVxuXHRcdFx0Lz5cblx0XHQ8L1BvcG92ZXJQcmltaXRpdmUuUG9ydGFsPlxuXHQpXG59XG5cbmZ1bmN0aW9uIFBvcG92ZXJBbmNob3Ioe1xuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFBvcG92ZXJQcmltaXRpdmUuQW5jaG9yPikge1xuXHRyZXR1cm4gPFBvcG92ZXJQcmltaXRpdmUuQW5jaG9yIGRhdGEtc2xvdD1cInBvcG92ZXItYW5jaG9yXCIgey4uLnByb3BzfSAvPlxufVxuXG5leHBvcnQgeyBQb3BvdmVyLCBQb3BvdmVyQW5jaG9yLCBQb3BvdmVyQ29udGVudCwgUG9wb3ZlclRyaWdnZXIgfVxuIiwKICAgICJpbXBvcnQgdHlwZSAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5mdW5jdGlvbiBJbnB1dCh7IGNsYXNzTmFtZSwgdHlwZSwgLi4ucHJvcHMgfTogUmVhY3QuQ29tcG9uZW50UHJvcHM8J2lucHV0Jz4pIHtcblx0cmV0dXJuIChcblx0XHQ8aW5wdXRcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCdmaWxlOnRleHQtZm9yZWdyb3VuZCBwbGFjZWhvbGRlcjp0ZXh0LW11dGVkLWZvcmVncm91bmQgc2VsZWN0aW9uOmJnLXByaW1hcnkgc2VsZWN0aW9uOnRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIGRhcms6YmctaW5wdXQvMzAgYm9yZGVyLWlucHV0IGZsZXggaC05IHctZnVsbCBtaW4tdy0wIHJvdW5kZWQtbWQgYm9yZGVyIGJnLXRyYW5zcGFyZW50IHB4LTMgcHktMSB0ZXh0LWJhc2Ugc2hhZG93LXhzIHRyYW5zaXRpb24tW2NvbG9yLGJveC1zaGFkb3ddIG91dGxpbmUtbm9uZSBmaWxlOmlubGluZS1mbGV4IGZpbGU6aC03IGZpbGU6Ym9yZGVyLTAgZmlsZTpiZy10cmFuc3BhcmVudCBmaWxlOnRleHQtc20gZmlsZTpmb250LW1lZGl1bSBkaXNhYmxlZDpwb2ludGVyLWV2ZW50cy1ub25lIGRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZCBkaXNhYmxlZDpvcGFjaXR5LTUwIG1kOnRleHQtc20nLFxuXHRcdFx0XHQnZm9jdXMtdmlzaWJsZTpib3JkZXItcmluZyBmb2N1cy12aXNpYmxlOnJpbmctcmluZy81MCBmb2N1cy12aXNpYmxlOnJpbmctWzNweF0nLFxuXHRcdFx0XHQnYXJpYS1pbnZhbGlkOnJpbmctZGVzdHJ1Y3RpdmUvMjAgZGFyazphcmlhLWludmFsaWQ6cmluZy1kZXN0cnVjdGl2ZS80MCBhcmlhLWludmFsaWQ6Ym9yZGVyLWRlc3RydWN0aXZlJyxcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0ZGF0YS1zbG90PVwiaW5wdXRcIlxuXHRcdFx0dHlwZT17dHlwZX1cblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmV4cG9ydCB7IElucHV0IH1cbiIsCiAgICAiaW1wb3J0ICogYXMgTGFiZWxQcmltaXRpdmUgZnJvbSAnQHJhZGl4LXVpL3JlYWN0LWxhYmVsJ1xuaW1wb3J0IHR5cGUgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuZnVuY3Rpb24gTGFiZWwoe1xuXHRjbGFzc05hbWUsXG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgTGFiZWxQcmltaXRpdmUuUm9vdD4pIHtcblx0cmV0dXJuIChcblx0XHQ8TGFiZWxQcmltaXRpdmUuUm9vdFxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0J2ZsZXggaXRlbXMtY2VudGVyIGdhcC0yIHRleHQtc20gbGVhZGluZy1ub25lIGZvbnQtbWVkaXVtIHNlbGVjdC1ub25lIGdyb3VwLWRhdGEtW2Rpc2FibGVkPXRydWVdOnBvaW50ZXItZXZlbnRzLW5vbmUgZ3JvdXAtZGF0YS1bZGlzYWJsZWQ9dHJ1ZV06b3BhY2l0eS01MCBwZWVyLWRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZCBwZWVyLWRpc2FibGVkOm9wYWNpdHktNTAnLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJsYWJlbFwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0Lz5cblx0KVxufVxuXG5leHBvcnQgeyBMYWJlbCB9XG4iLAogICAgImltcG9ydCAqIGFzIFNjcm9sbEFyZWFQcmltaXRpdmUgZnJvbSAnQHJhZGl4LXVpL3JlYWN0LXNjcm9sbC1hcmVhJ1xuaW1wb3J0IHR5cGUgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuaW50ZXJmYWNlIFNjcm9sbEFyZWFQcm9wc1xuXHRleHRlbmRzIFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTY3JvbGxBcmVhUHJpbWl0aXZlLlJvb3Q+IHtcblx0dmlld1BvcnRQcm9wcz86IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTY3JvbGxBcmVhUHJpbWl0aXZlLlZpZXdwb3J0PlxufVxuXG5mdW5jdGlvbiBTY3JvbGxBcmVhKHtcblx0Y2xhc3NOYW1lLFxuXHRjaGlsZHJlbixcblx0dmlld1BvcnRQcm9wcyxcblx0Li4ucHJvcHNcbn06IFNjcm9sbEFyZWFQcm9wcykge1xuXHRyZXR1cm4gKFxuXHRcdDxTY3JvbGxBcmVhUHJpbWl0aXZlLlJvb3Rcblx0XHRcdGNsYXNzTmFtZT17Y24oJ3JlbGF0aXZlJywgY2xhc3NOYW1lKX1cblx0XHRcdGRhdGEtc2xvdD1cInNjcm9sbC1hcmVhXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQ+XG5cdFx0XHQ8U2Nyb2xsQXJlYVByaW1pdGl2ZS5WaWV3cG9ydFxuXHRcdFx0XHR7Li4udmlld1BvcnRQcm9wc31cblx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHQnZm9jdXMtdmlzaWJsZTpyaW5nLXJpbmcvNTAgc2l6ZS1mdWxsIHJvdW5kZWQtW2luaGVyaXRdIHRyYW5zaXRpb24tW2NvbG9yLGJveC1zaGFkb3ddIG91dGxpbmUtbm9uZSBmb2N1cy12aXNpYmxlOnJpbmctWzNweF0gZm9jdXMtdmlzaWJsZTpvdXRsaW5lLTEnLFxuXHRcdFx0XHRcdHZpZXdQb3J0UHJvcHM/LmNsYXNzTmFtZVxuXHRcdFx0XHQpfVxuXHRcdFx0XHRkYXRhLXNsb3Q9XCJzY3JvbGwtYXJlYS12aWV3cG9ydFwiXG5cdFx0XHQ+XG5cdFx0XHRcdHtjaGlsZHJlbn1cblx0XHRcdDwvU2Nyb2xsQXJlYVByaW1pdGl2ZS5WaWV3cG9ydD5cblx0XHRcdDxTY3JvbGxCYXIgLz5cblx0XHRcdDxTY3JvbGxBcmVhUHJpbWl0aXZlLkNvcm5lciAvPlxuXHRcdDwvU2Nyb2xsQXJlYVByaW1pdGl2ZS5Sb290PlxuXHQpXG59XG5cbmZ1bmN0aW9uIFNjcm9sbEJhcih7XG5cdGNsYXNzTmFtZSxcblx0b3JpZW50YXRpb24gPSAndmVydGljYWwnLFxuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNjcm9sbEFyZWFQcmltaXRpdmUuU2Nyb2xsQXJlYVNjcm9sbGJhcj4pIHtcblx0cmV0dXJuIChcblx0XHQ8U2Nyb2xsQXJlYVByaW1pdGl2ZS5TY3JvbGxBcmVhU2Nyb2xsYmFyXG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQnZmxleCB0b3VjaC1ub25lIHAtcHggdHJhbnNpdGlvbi1jb2xvcnMgc2VsZWN0LW5vbmUnLFxuXHRcdFx0XHRvcmllbnRhdGlvbiA9PT0gJ3ZlcnRpY2FsJyAmJlxuXHRcdFx0XHRcdCdoLWZ1bGwgdy0yLjUgYm9yZGVyLWwgYm9yZGVyLWwtdHJhbnNwYXJlbnQnLFxuXHRcdFx0XHRvcmllbnRhdGlvbiA9PT0gJ2hvcml6b250YWwnICYmXG5cdFx0XHRcdFx0J2gtMi41IGZsZXgtY29sIGJvcmRlci10IGJvcmRlci10LXRyYW5zcGFyZW50Jyxcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0ZGF0YS1zbG90PVwic2Nyb2xsLWFyZWEtc2Nyb2xsYmFyXCJcblx0XHRcdG9yaWVudGF0aW9uPXtvcmllbnRhdGlvbn1cblx0XHRcdHsuLi5wcm9wc31cblx0XHQ+XG5cdFx0XHQ8U2Nyb2xsQXJlYVByaW1pdGl2ZS5TY3JvbGxBcmVhVGh1bWJcblx0XHRcdFx0Y2xhc3NOYW1lPVwiYmctYm9yZGVyIHJlbGF0aXZlIGZsZXgtMSByb3VuZGVkLWZ1bGxcIlxuXHRcdFx0XHRkYXRhLXNsb3Q9XCJzY3JvbGwtYXJlYS10aHVtYlwiXG5cdFx0XHQvPlxuXHRcdDwvU2Nyb2xsQXJlYVByaW1pdGl2ZS5TY3JvbGxBcmVhU2Nyb2xsYmFyPlxuXHQpXG59XG5cbmV4cG9ydCB7IFNjcm9sbEFyZWEsIFNjcm9sbEJhciB9XG4iLAogICAgImltcG9ydCB7IENsb2NrIH0gZnJvbSAnbHVjaWRlLXJlYWN0J1xuaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvYnV0dG9uJ1xuaW1wb3J0IHsgSW5wdXQgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvaW5wdXQnXG5pbXBvcnQge1xuXHRQb3BvdmVyLFxuXHRQb3BvdmVyQ29udGVudCxcblx0UG9wb3ZlclRyaWdnZXIsXG59IGZyb20gJ0AvY29tcG9uZW50cy91aS9wb3BvdmVyJ1xuaW1wb3J0IHsgU2Nyb2xsQXJlYSB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9zY3JvbGwtYXJlYSdcbmltcG9ydCB7IHVzZUF1dG9jb21wbGV0ZVRpbWVwaWNrZXIgfSBmcm9tICdAL2hvb2tzL3VzZS1hdXRvY29tcGxldGUtdGltZXBpY2tlcidcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgeyBrZXlzIH0gZnJvbSAnQC9saWIvdXRpbHMva2V5cydcbmltcG9ydCB0eXBlIHsgVGltZUZvcm1hdCB9IGZyb20gJ0AvdHlwZXMnXG5cbmNvbnN0IGhhbmRsZVdoZWVsID0gKGU6IFJlYWN0LldoZWVsRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KSA9PiB7XG5cdC8vIFByZXZlbnQgZXZlbnQgZnJvbSBidWJibGluZyB0byBwcmV2ZW50IFBvcG92ZXIgZnJvbSBjbG9zaW5nXG5cdGUuc3RvcFByb3BhZ2F0aW9uKClcbn1cblxuaW50ZXJmYWNlIFRpbWVQaWNrZXJQcm9wcyB7XG5cdHZhbHVlOiBzdHJpbmdcblx0b25DaGFuZ2U6ICh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkXG5cdG1pblRpbWU/OiBzdHJpbmdcblx0bWF4VGltZT86IHN0cmluZ1xuXHR0aW1lRm9ybWF0PzogVGltZUZvcm1hdFxuXHRwbGFjZWhvbGRlcj86IHN0cmluZ1xuXHRjbGFzc05hbWU/OiBzdHJpbmdcblx0ZGlzYWJsZWQ/OiBib29sZWFuXG5cdG5hbWU/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFRpbWVQaWNrZXIoe1xuXHR2YWx1ZSxcblx0b25DaGFuZ2UsXG5cdG1pblRpbWUgPSAnMDA6MDAnLFxuXHRtYXhUaW1lID0gJzIzOjQ1Jyxcblx0dGltZUZvcm1hdCA9ICcxMi1ob3VyJyxcblx0cGxhY2Vob2xkZXIgPSAnU2VsZWN0IHRpbWUuLi4nLFxuXHRjbGFzc05hbWUsXG5cdGRpc2FibGVkID0gZmFsc2UsXG5cdG5hbWUsXG59OiBUaW1lUGlja2VyUHJvcHMpIHtcblx0Y29uc3QgW29wZW4sIHNldE9wZW5dID0gdXNlU3RhdGUoZmFsc2UpXG5cdGNvbnN0IFtzZWFyY2gsIHNldFNlYXJjaF0gPSB1c2VTdGF0ZSgnJylcblx0Y29uc3QgaW5wdXRSZWYgPSB1c2VSZWY8SFRNTElucHV0RWxlbWVudD4obnVsbClcblx0Y29uc3QgdHJpZ2dlclJlZiA9IHVzZVJlZjxIVE1MQnV0dG9uRWxlbWVudD4obnVsbClcblx0Y29uc3QgW3RyaWdnZXJXaWR0aCwgc2V0VHJpZ2dlcldpZHRoXSA9IHVzZVN0YXRlPG51bWJlcj4oMClcblxuXHRjb25zdCB7IHRpbWVPcHRpb25zLCBmb3JtYXRUaW1lIH0gPSB1c2VBdXRvY29tcGxldGVUaW1lcGlja2VyKHtcblx0XHR0aW1lRm9ybWF0LFxuXHRcdG1pblRpbWUsXG5cdFx0bWF4VGltZSxcblx0fSlcblxuXHQvLyBGaWx0ZXIgdGltZSBvcHRpb25zIGJhc2VkIG9uIHNlYXJjaFxuXHRjb25zdCBmaWx0ZXJlZE9wdGlvbnMgPSB0aW1lT3B0aW9ucy5maWx0ZXIoKHRpbWUpID0+IHtcblx0XHRjb25zdCBmb3JtYXR0ZWRUaW1lID0gZm9ybWF0VGltZSh0aW1lKVxuXHRcdHJldHVybiBmb3JtYXR0ZWRUaW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoLnRvTG93ZXJDYXNlKCkpXG5cdH0pXG5cblx0Y29uc3QgaGFuZGxlU2VsZWN0ID0gKHRpbWU6IHN0cmluZykgPT4ge1xuXHRcdG9uQ2hhbmdlKHRpbWUpXG5cdFx0c2V0T3BlbihmYWxzZSlcblx0XHRzZXRTZWFyY2goJycpXG5cdH1cblxuXHQvLyBNZWFzdXJlIHRyaWdnZXIgd2lkdGggYW5kIGZvY3VzIGlucHV0IHdoZW4gcG9wb3ZlciBvcGVuc1xuXHR1c2VFZmZlY3QoKCkgPT4ge1xuXHRcdGlmIChvcGVuKSB7XG5cdFx0XHRpZiAodHJpZ2dlclJlZi5jdXJyZW50KSB7XG5cdFx0XHRcdHNldFRyaWdnZXJXaWR0aCh0cmlnZ2VyUmVmLmN1cnJlbnQub2Zmc2V0V2lkdGgpXG5cdFx0XHR9XG5cdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0aW5wdXRSZWYuY3VycmVudD8uZm9jdXMoKVxuXHRcdFx0fSwgMClcblx0XHR9XG5cdH0sIFtvcGVuXSlcblxuXHRjb25zdCBjdXJyZW50VGltZVN0cmluZyA9IHZhbHVlID8gZm9ybWF0VGltZSh2YWx1ZSkgOiBwbGFjZWhvbGRlclxuXG5cdHJldHVybiAoXG5cdFx0PFBvcG92ZXIgb25PcGVuQ2hhbmdlPXtzZXRPcGVufSBvcGVuPXtvcGVufT5cblx0XHRcdDxQb3BvdmVyVHJpZ2dlciBhc0NoaWxkPlxuXHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0YXJpYS1jb250cm9scz1cInRpbWUtcGlja2VyLWxpc3Rib3hcIlxuXHRcdFx0XHRcdGFyaWEtZXhwYW5kZWQ9e29wZW59XG5cdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbigndy1mdWxsIGp1c3RpZnktc3RhcnQnLCBjbGFzc05hbWUpfVxuXHRcdFx0XHRcdGRhdGEtdGVzdGlkPXtrZXlzLnRpbWVQaWNrZXIobmFtZSl9XG5cdFx0XHRcdFx0ZGlzYWJsZWQ9e2Rpc2FibGVkfVxuXHRcdFx0XHRcdHJlZj17dHJpZ2dlclJlZn1cblx0XHRcdFx0XHRyb2xlPVwiY29tYm9ib3hcIlxuXHRcdFx0XHRcdHZhcmlhbnQ9XCJvdXRsaW5lXCJcblx0XHRcdFx0PlxuXHRcdFx0XHRcdDxDbG9jayBjbGFzc05hbWU9XCJtci0yIGgtNCB3LTRcIiAvPlxuXHRcdFx0XHRcdHtjdXJyZW50VGltZVN0cmluZ31cblx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHQ8L1BvcG92ZXJUcmlnZ2VyPlxuXHRcdFx0PFBvcG92ZXJDb250ZW50XG5cdFx0XHRcdGFsaWduPVwic3RhcnRcIlxuXHRcdFx0XHRjbGFzc05hbWU9XCJwLTBcIlxuXHRcdFx0XHRzdHlsZT17eyB3aWR0aDogdHJpZ2dlcldpZHRoIH19XG5cdFx0XHQ+XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwicC0yIGJvcmRlci1iXCI+XG5cdFx0XHRcdFx0PElucHV0XG5cdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJoLThcIlxuXHRcdFx0XHRcdFx0b25DaGFuZ2U9eyhlKSA9PiBzZXRTZWFyY2goZS50YXJnZXQudmFsdWUpfVxuXHRcdFx0XHRcdFx0cGxhY2Vob2xkZXI9XCJTZWFyY2ggdGltZS4uLlwiXG5cdFx0XHRcdFx0XHRyZWY9e2lucHV0UmVmfVxuXHRcdFx0XHRcdFx0dmFsdWU9e3NlYXJjaH1cblx0XHRcdFx0XHQvPlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PFNjcm9sbEFyZWEgY2xhc3NOYW1lPVwiaC1bMjAwcHhdXCIgb25XaGVlbD17aGFuZGxlV2hlZWx9PlxuXHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwicC0xXCI+XG5cdFx0XHRcdFx0XHR7ZmlsdGVyZWRPcHRpb25zLmxlbmd0aCA9PT0gMCA/IChcblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJweS02IHRleHQtY2VudGVyIHRleHQtc20gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCI+XG5cdFx0XHRcdFx0XHRcdFx0Ti9BXG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0KSA6IChcblx0XHRcdFx0XHRcdFx0ZmlsdGVyZWRPcHRpb25zLm1hcCgodGltZSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IHRpbWVTdHJpbmcgPSBmb3JtYXRUaW1lKHRpbWUpXG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgaXNTZWxlY3RlZCA9IHRpbWUgPT09IHZhbHVlXG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0XHRcdDxidXR0b25cblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQncmVsYXRpdmUgZmxleCB3LWZ1bGwgY3Vyc29yLXBvaW50ZXIgc2VsZWN0LW5vbmUgaXRlbXMtY2VudGVyIHJvdW5kZWQtc20gcHgtMiBweS0xLjUgdGV4dC1zbSBvdXRsaW5lLW5vbmUgdHJhbnNpdGlvbi1jb2xvcnMgaG92ZXI6YmctYWNjZW50IGhvdmVyOnRleHQtYWNjZW50LWZvcmVncm91bmQnLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlzU2VsZWN0ZWQgJiYgJ2JnLWFjY2VudCB0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kJ1xuXHRcdFx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRrZXk9e3RpbWV9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9uQ2xpY2s9eygpID0+IGhhbmRsZVNlbGVjdCh0aW1lKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZT1cImJ1dHRvblwiXG5cdFx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHt0aW1lU3RyaW5nfVxuXHRcdFx0XHRcdFx0XHRcdFx0PC9idXR0b24+XG5cdFx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PC9TY3JvbGxBcmVhPlxuXHRcdFx0PC9Qb3BvdmVyQ29udGVudD5cblx0XHQ8L1BvcG92ZXI+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBUaW1lRm9ybWF0IH0gZnJvbSAnQC90eXBlcydcblxuaW50ZXJmYWNlIFVzZUF1dG9jb21wbGV0ZVRpbWVwaWNrZXJQcm9wcyB7XG5cdHRpbWVGb3JtYXQ/OiBUaW1lRm9ybWF0XG5cdG1pblRpbWU/OiBzdHJpbmdcblx0bWF4VGltZT86IHN0cmluZ1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlQXV0b2NvbXBsZXRlVGltZXBpY2tlcih7XG5cdHRpbWVGb3JtYXQgPSAnMTItaG91cicsXG5cdG1pblRpbWUgPSAnMDA6MDAnLFxuXHRtYXhUaW1lID0gJzIzOjQ1Jyxcbn06IFVzZUF1dG9jb21wbGV0ZVRpbWVwaWNrZXJQcm9wcykge1xuXHQvLyBHZW5lcmF0ZSB0aW1lIG9wdGlvbnMgKDE1LW1pbnV0ZSBpbnRlcnZhbHMpIHdpdGhpbiBtaW4vbWF4IHJhbmdlXG5cdGNvbnN0IHRpbWVPcHRpb25zID0gdXNlTWVtbygoKSA9PiB7XG5cdFx0Y29uc3QgdGltZXM6IHN0cmluZ1tdID0gW11cblx0XHRjb25zdCBbbWluSG91ciwgbWluTWludXRlXSA9IG1pblRpbWUuc3BsaXQoJzonKS5tYXAoTnVtYmVyKVxuXHRcdGNvbnN0IFttYXhIb3VyLCBtYXhNaW51dGVdID0gbWF4VGltZS5zcGxpdCgnOicpLm1hcChOdW1iZXIpXG5cblx0XHRjb25zdCBtaW5Ub3RhbE1pbnV0ZXMgPSBtaW5Ib3VyICogNjAgKyBtaW5NaW51dGVcblx0XHRjb25zdCBtYXhUb3RhbE1pbnV0ZXMgPSBtYXhIb3VyICogNjAgKyBtYXhNaW51dGVcblxuXHRcdGZvciAoXG5cdFx0XHRsZXQgdG90YWxNaW51dGVzID0gbWluVG90YWxNaW51dGVzO1xuXHRcdFx0dG90YWxNaW51dGVzIDw9IG1heFRvdGFsTWludXRlcztcblx0XHRcdHRvdGFsTWludXRlcyArPSAxNVxuXHRcdCkge1xuXHRcdFx0Y29uc3QgaG91cnMgPSBNYXRoLmZsb29yKHRvdGFsTWludXRlcyAvIDYwKVxuXHRcdFx0Y29uc3QgbWludXRlcyA9IHRvdGFsTWludXRlcyAlIDYwXG5cblx0XHRcdGNvbnN0IHRpbWVTdHJpbmcgPSBgJHtob3Vycy50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyl9OiR7bWludXRlcy50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyl9YFxuXHRcdFx0dGltZXMucHVzaCh0aW1lU3RyaW5nKVxuXHRcdH1cblxuXHRcdHJldHVybiB0aW1lc1xuXHR9LCBbbWluVGltZSwgbWF4VGltZV0pXG5cblx0Y29uc3QgZm9ybWF0VGltZSA9ICh0aW1lOiBzdHJpbmcpID0+IHtcblx0XHRjb25zdCBbaG91cnMsIG1pbnV0ZXNdID0gdGltZS5zcGxpdCgnOicpLm1hcChOdW1iZXIpXG5cdFx0Y29uc3QgcGVyaW9kID0gaG91cnMgPj0gMTIgPyAnUE0nIDogJ0FNJ1xuXHRcdGNvbnN0IGRpc3BsYXlIb3VycyA9IGhvdXJzID09PSAwID8gMTIgOiBob3VycyA+IDEyID8gaG91cnMgLSAxMiA6IGhvdXJzXG5cblx0XHRpZiAodGltZUZvcm1hdCA9PT0gJzI0LWhvdXInKSB7XG5cdFx0XHRyZXR1cm4gYCR7aG91cnMudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpfToke21pbnV0ZXMudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpfWBcblx0XHR9XG5cblx0XHRyZXR1cm4gYCR7ZGlzcGxheUhvdXJzfToke21pbnV0ZXMudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpfSAke3BlcmlvZH1gXG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdHRpbWVPcHRpb25zLFxuXHRcdGZvcm1hdFRpbWUsXG5cdH1cbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgZ2V0RGF5S2V5LCBpc1RvZGF5IH0gZnJvbSAnLi9kYXRlLXV0aWxzJ1xuXG50eXBlIElkID0gc3RyaW5nIHwgbnVtYmVyXG5cbmNvbnN0IHBhZDIgPSAobjogbnVtYmVyIHwgc3RyaW5nKTogc3RyaW5nID0+IFN0cmluZyhuKS5wYWRTdGFydCgyLCAnMCcpXG5jb25zdCBwYWRIb3VySWZOdW1iZXIgPSAoaG91cjogbnVtYmVyIHwgc3RyaW5nKTogc3RyaW5nID0+XG5cdHR5cGVvZiBob3VyID09PSAnbnVtYmVyJyA/IHBhZDIoaG91cikgOiBob3VyXG5cbi8qKlxuICogQ2VudHJhbGl6ZWQgZmFjdG9yeSBmb3Iga2V5cywgaWRzLCBhbmQgZGF0YS10ZXN0aWRzLiBFYWNoIGVudHJ5IHJldHVybnMgYVxuICogc2VtYW50aWMgc3RyaW5nIGlkZW50aWZpZWQgYnkgaXRzIGNvbmNlcHQgcHJlZml4IChlLmcuIGBkYXktY29sLWAsXG4gKiBgZGF5LWNlbGwtYCwgYHdlZWstaGVhZGVyLWRheS1gKS4gVGhlIGNhbGwgc2l0ZSBjaG9vc2VzIHRoZSByb2xlIOKAlCB0aGVcbiAqIHNhbWUgc3RyaW5nIGNhbiBzZXJ2ZSBhcyBhIFJlYWN0IGBrZXk9YCwgYW4gYGlkYCwgb3IgYSBgZGF0YS10ZXN0aWRgLlxuICpcbiAqIEluc3BpcmVkIGJ5IGh0dHBzOi8vdGtkb2RvLmV1L2Jsb2cvZWZmZWN0aXZlLXJlYWN0LXF1ZXJ5LWtleXMjdXNlLXF1ZXJ5LWtleS1mYWN0b3JpZXMuXG4gKiBQcmV2ZW50cyBhZC1ob2Mgc3RyaW5nIGNvbmNhdGVuYXRpb24gc28gY3Jvc3MtY3V0dGluZyBjaGFuZ2VzIChwcmVmaXgsXG4gKiBzZXBhcmF0b3IsIGZvcm1hdCkgYXJlIG9uZS1wb2ludC5cbiAqL1xuZXhwb3J0IGNvbnN0IGtleXMgPSB7XG5cdC8vIEdyaWQgY29sdW1uIGNvbmZpZ3VyYXRpb24gaWRzXG5cdGNvbDoge1xuXHRcdHRpbWU6ICd0aW1lLWNvbCcsXG5cdFx0ZGF0ZTogJ2RhdGUtY29sJyxcblx0XHRkYXk6IChkYXk6IERheWpzLCByZXNvdXJjZUlkPzogSWQpID0+IHtcblx0XHRcdGNvbnN0IGJhc2UgPSBgZGF5LWNvbC0ke2dldERheUtleShkYXkpfWBcblx0XHRcdHJldHVybiByZXNvdXJjZUlkICE9IG51bGwgPyBgJHtiYXNlfS1yZXNvdXJjZS0ke3Jlc291cmNlSWR9YCA6IGJhc2Vcblx0XHR9LFxuXHRcdHJlc291cmNlOiAoc2NvcGU6ICd3ZWVrJyB8ICdtb250aCcsIHJlc291cmNlSWQ6IElkKSA9PlxuXHRcdFx0YCR7c2NvcGV9LWNvbC1yZXNvdXJjZS0ke3Jlc291cmNlSWR9YCxcblx0XHRhbGxEYXk6IChkYXk6IERheWpzLCBpbmRleDogbnVtYmVyKSA9PlxuXHRcdFx0YGFsbC1kYXktY29sLSR7Z2V0RGF5S2V5KGRheSl9LSR7aW5kZXh9YCxcblx0fSxcblxuXHQvLyBHcmlkIGNlbGwgaWRlbnRpZmllcnNcblx0Y2VsbDoge1xuXHRcdGRheTogKGRheTogRGF5anMsIGhvdXI/OiBudW1iZXIgfCBzdHJpbmcsIG1pbnV0ZTogbnVtYmVyIHwgc3RyaW5nID0gMCkgPT4ge1xuXHRcdFx0Y29uc3QgayA9IGdldERheUtleShkYXkpXG5cdFx0XHRyZXR1cm4gaG91ciAhPSBudWxsXG5cdFx0XHRcdD8gYGRheS1jZWxsLSR7a30tJHtwYWQyKGhvdXIpfS0ke3BhZDIobWludXRlKX1gXG5cdFx0XHRcdDogYGRheS1jZWxsLSR7a31gXG5cdFx0fSxcblx0XHR2ZXJ0aWNhbFRpbWU6IChob3VyOiBudW1iZXIgfCBzdHJpbmcpID0+IGB2ZXJ0aWNhbC10aW1lLSR7cGFkMihob3VyKX1gLFxuXHRcdHZlcnRpY2FsOiAoXG5cdFx0XHRkYXk6IERheWpzLFxuXHRcdFx0aG91cjogbnVtYmVyIHwgc3RyaW5nLFxuXHRcdFx0bWludXRlOiBudW1iZXIgfCBzdHJpbmcsXG5cdFx0XHRyZXNvdXJjZUlkPzogSWRcblx0XHQpID0+IHtcblx0XHRcdGNvbnN0IGJhc2UgPSBgdmVydGljYWwtY2VsbC0ke2dldERheUtleShkYXkpfS0ke3BhZDIoaG91cil9LSR7cGFkMihtaW51dGUpfWBcblx0XHRcdHJldHVybiByZXNvdXJjZUlkICE9IG51bGwgPyBgJHtiYXNlfS1yZXNvdXJjZS0ke3Jlc291cmNlSWR9YCA6IGJhc2Vcblx0XHR9LFxuXHR9LFxuXG5cdC8vIENvbnRhaW5lciAod3JhcHBlcikgaWRlbnRpZmllcnNcblx0Y29udGFpbmVyOiB7XG5cdFx0dmVydGljYWw6IHtcblx0XHRcdGNvbDogKGlkOiBJZCkgPT4gYHZlcnRpY2FsLWNvbC0ke2lkfWAsXG5cdFx0fSxcblx0XHRob3Jpem9udGFsOiB7XG5cdFx0XHRyb3c6IChpZDogSWQpID0+IGBob3Jpem9udGFsLXJvdy0ke2lkfWAsXG5cdFx0XHRyb3dMYWJlbDogKHJlc291cmNlSWQ6IElkKSA9PiBgaG9yaXpvbnRhbC1yb3ctbGFiZWwtJHtyZXNvdXJjZUlkfWAsXG5cdFx0XHRldmVudDogKGV2ZW50SWQ6IElkKSA9PiBgaG9yaXpvbnRhbC1ldmVudC0ke2V2ZW50SWR9YCxcblx0XHR9LFxuXHRcdGV2ZW50c0xheWVyOiAob3JpZW50YXRpb246ICd2ZXJ0aWNhbCcgfCAnaG9yaXpvbnRhbCcsIGlkOiBJZCkgPT5cblx0XHRcdGAke29yaWVudGF0aW9ufS1ldmVudHMtJHtpZH1gLFxuXHR9LFxuXG5cdC8vIEhlYWRlciBpZGVudGlmaWVyc1xuXHRoZWFkZXI6IHtcblx0XHRyZXNvdXJjZToge1xuXHRcdFx0d2Vla0RheTogJ3Jlc291cmNlLXdlZWstZGF5LWhlYWRlcicsXG5cdFx0XHR0aW1lTGFiZWw6ICh2aWV3OiAnd2VlaycgfCAnZGF5JywgaG91cjogbnVtYmVyIHwgc3RyaW5nKSA9PlxuXHRcdFx0XHRgcmVzb3VyY2UtJHt2aWV3fS10aW1lLWxhYmVsLSR7cGFkSG91cklmTnVtYmVyKGhvdXIpfWAsXG5cdFx0fSxcblx0XHR3ZWVrZGF5OiAodmlldzogJ3dlZWsnIHwgJ21vbnRoJywgbmFtZTogc3RyaW5nKSA9PlxuXHRcdFx0YCR7dmlld30taGVhZGVyLXdlZWtkYXktJHtuYW1lLnRvTG93ZXJDYXNlKCl9YCxcblx0XHR3ZWVrOiB7XG5cdFx0XHRkYXk6IChkYXk6IERheWpzKSA9PiBgd2Vlay1oZWFkZXItZGF5LSR7ZGF5LnRvSVNPU3RyaW5nKCl9YCxcblx0XHRcdGhvdXI6IChkYXk6IERheWpzLCByZWY6IElkKSA9PlxuXHRcdFx0XHRgd2Vlay1oZWFkZXItaG91ci0ke2RheS50b0lTT1N0cmluZygpfS0ke3JlZn1gLFxuXHRcdFx0cmVzb3VyY2U6IChyZXNvdXJjZUlkOiBJZCkgPT4gYHdlZWstaGVhZGVyLXJlc291cmNlLSR7cmVzb3VyY2VJZH1gLFxuXHRcdH0sXG5cdFx0eWVhcjoge1xuXHRcdFx0bW9udGg6IChtb250aEtleTogc3RyaW5nLCBwYXJ0PzogJ3RpdGxlJyB8ICdjb3VudCcgfCAnbWluaScpID0+XG5cdFx0XHRcdHBhcnQgPyBgeWVhci1tb250aC0ke3BhcnR9LSR7bW9udGhLZXl9YCA6IGB5ZWFyLW1vbnRoLSR7bW9udGhLZXl9YCxcblx0XHRcdGRheTogKG1vbnRoS2V5OiBzdHJpbmcsIGRheUtleTogc3RyaW5nKSA9PlxuXHRcdFx0XHRgeWVhci1kYXktJHttb250aEtleX0tJHtkYXlLZXl9YCxcblx0XHR9LFxuXHR9LFxuXG5cdC8vIFJlc291cmNlLXNjb3BlZCBhbGwtZGF5IHJvdyBpZCAoZmFsbHMgYmFjayB0byAnbWFpbicgd2hlbiB1bnNjb3BlZCkuXG5cdGFsbERheVJvdzogKHJlc291cmNlSWQ/OiBJZCkgPT4gYGFsbGRheS1yb3ctJHtyZXNvdXJjZUlkID8/ICdtYWluJ31gLFxuXG5cdC8vIEdlbmVyaWMgaXRlcmF0aW9uIGtleSBjb21wb3NlciBmb3IgUmVhY3QgYGtleT1gIHByb3BzLCBsaXN0IG1hcmtlcnMsXG5cdC8vIGFuZCBzdWZmaXhlZCB3cmFwcGVyIGtleXMgKGUuZy4gYGxpc3RLZXkoYmFzZSwgJ2FuaW1hdGVkJylgKS5cblx0bGlzdEtleTogKC4uLnBhcnRzOiBBcnJheTxzdHJpbmcgfCBudW1iZXI+KSA9PiBwYXJ0cy5qb2luKCctJyksXG5cblx0Ly8gRGF5TnVtYmVyIGNvbXBvbmVudCB0ZXN0aWQg4oCUIGBkYXktbnVtYmVyLXRvZGF5YCB3aGVuIHRoZSBkYXRlIGlzIHRvZGF5LFxuXHQvLyBvdGhlcndpc2UgYGRheS1udW1iZXIte0R9YC5cblx0ZGF5TnVtYmVyOiAoZGF0ZTogRGF5anMpID0+XG5cdFx0aXNUb2RheShkYXRlKSA/ICdkYXktbnVtYmVyLXRvZGF5JyA6IGBkYXktbnVtYmVyLSR7ZGF0ZS5mb3JtYXQoJ0QnKX1gLFxuXG5cdC8vIEZvcm0gZWxlbWVudCB0ZXN0aWQgZm9yIHRpbWUgcGlja2VycyAobmFtZSA9ICdzdGFydCcgLyAnZW5kJyBldGMuKVxuXHR0aW1lUGlja2VyOiAobmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkKSA9PiBgdGltZS1waWNrZXItJHtuYW1lID8/ICcnfWAsXG5cblx0Ly8gRHJvcHBhYmxlIGlkcyAoZG5kLWtpdCByZWdpc3RyeSDigJQgSVNPIGZvciBwZXItc2xvdCB1bmlxdWVuZXNzKS5cblx0Ly8gYGRyb3AtYCBwcmVmaXggYXZvaWRzIGNvbGxpZGluZyB3aXRoIGBjZWxsLmRheWAgdGVzdGlkcy5cblx0ZHJvcHBhYmxlOiB7XG5cdFx0ZGF5Q2VsbDogKGRheTogRGF5anMsIG9wdGlvbnM/OiB7IGFsbERheT86IGJvb2xlYW47IHJlc291cmNlSWQ/OiBJZCB9KSA9PiB7XG5cdFx0XHRjb25zdCBpc28gPSBkYXkudG9JU09TdHJpbmcoKVxuXHRcdFx0Y29uc3QgYWxsRGF5UGFydCA9IG9wdGlvbnM/LmFsbERheSA/ICctYWxsZGF5JyA6ICcnXG5cdFx0XHRjb25zdCByZXNvdXJjZVBhcnQgPVxuXHRcdFx0XHRvcHRpb25zPy5yZXNvdXJjZUlkICE9IG51bGwgPyBgLXJlc291cmNlLSR7b3B0aW9ucy5yZXNvdXJjZUlkfWAgOiAnJ1xuXHRcdFx0cmV0dXJuIGBkcm9wLWRheS1jZWxsLSR7aXNvfSR7YWxsRGF5UGFydH0ke3Jlc291cmNlUGFydH1gXG5cdFx0fSxcblx0fSxcbn0gYXMgY29uc3RcbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBCdXNpbmVzc0hvdXJzIH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgV0VFS19EQVlTX05VTUJFUl9NQVAgfSBmcm9tICdAL2xpYi9jb25zdGFudHMnXG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgc3BlY2lmaWMgZGF0ZSBpcyBhIGJ1c2luZXNzIGRheS5cbiAqXG4gKiBAcGFyYW0gZGF0ZSBUaGUgZGF0ZSB0byBjaGVja1xuICogQHBhcmFtIGJ1c2luZXNzSG91cnMgVGhlIGJ1c2luZXNzIGhvdXJzIGNvbmZpZ3VyYXRpb24gKHNpbmdsZSBvciBhcnJheSlcbiAqIEByZXR1cm5zIHRydWUgaWYgdGhlIGRhdGUgaXMgYSBidXNpbmVzcyBkYXksIGZhbHNlIG90aGVyd2lzZVxuICovXG5leHBvcnQgY29uc3QgaXNCdXNpbmVzc0RheSA9IChcblx0ZGF0ZTogRGF5anMsXG5cdGJ1c2luZXNzSG91cnM/OiBCdXNpbmVzc0hvdXJzIHwgQnVzaW5lc3NIb3Vyc1tdXG4pOiBib29sZWFuID0+IHtcblx0aWYgKCFidXNpbmVzc0hvdXJzKSB7XG5cdFx0cmV0dXJuIHRydWVcblx0fVxuXG5cdGxldCBoYXNNYXRjaCA9IGZhbHNlXG5cdHByb2Nlc3NCdXNpbmVzc0hvdXJzKGJ1c2luZXNzSG91cnMsIHtcblx0XHRkYXRlLFxuXHRcdG9uTWF0Y2g6ICgpID0+IHtcblx0XHRcdGhhc01hdGNoID0gdHJ1ZVxuXHRcdH0sXG5cdH0pXG5cblx0cmV0dXJuIGhhc01hdGNoXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSXNCdXNpbmVzc0hvdXJPcHRpb25zIHtcblx0ZGF0ZTogRGF5anNcblx0aG91cj86IG51bWJlclxuXHRtaW51dGU/OiBudW1iZXJcblx0YnVzaW5lc3NIb3Vycz86IEJ1c2luZXNzSG91cnMgfCBCdXNpbmVzc0hvdXJzW11cbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYSBzcGVjaWZpYyBob3VyIG9uIGEgc3BlY2lmaWMgZGF0ZSBpcyB3aXRoaW4gYnVzaW5lc3MgaG91cnMuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgZm9yIGNoZWNraW5nIGJ1c2luZXNzIGhvdXJzXG4gKiBAcmV0dXJucyB0cnVlIGlmIHRoZSB0aW1lIGlzIHdpdGhpbiBidXNpbmVzcyBob3VycywgZmFsc2Ugb3RoZXJ3aXNlXG4gKi9cbmV4cG9ydCBjb25zdCBpc0J1c2luZXNzSG91ciA9ICh7XG5cdGRhdGUsXG5cdGhvdXIsXG5cdG1pbnV0ZSA9IDAsXG5cdGJ1c2luZXNzSG91cnMsXG59OiBJc0J1c2luZXNzSG91ck9wdGlvbnMpOiBib29sZWFuID0+IHtcblx0Ly8gSWYgYnVzaW5lc3MgaG91cnMgYXJlIG5vdCBjb25maWd1cmVkLCBjb25zaWRlciBldmVyeXRoaW5nIGFzIFwiYnVzaW5lc3MgaG91cnNcIlxuXHRpZiAoIWJ1c2luZXNzSG91cnMpIHtcblx0XHRyZXR1cm4gdHJ1ZVxuXHR9XG5cblx0Ly8gSWYgaG91ciBpcyBub3QgcHJvdmlkZWQsIHdlIGFzc3VtZSB0aGUgdXNlciBvbmx5IGNhcmVzIGFib3V0IHRoZSBkYXlcblx0aWYgKGhvdXIgPT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBpc0J1c2luZXNzRGF5KGRhdGUsIGJ1c2luZXNzSG91cnMpXG5cdH1cblxuXHRsZXQgaXNJbkJ1c2luZXNzSG91ciA9IGZhbHNlXG5cdGNvbnN0IGN1cnJlbnRNaW51dGVzID0gaG91ciAqIDYwICsgbWludXRlXG5cblx0cHJvY2Vzc0J1c2luZXNzSG91cnMoYnVzaW5lc3NIb3Vycywge1xuXHRcdGRhdGUsXG5cdFx0b25NYXRjaDogKGNvbmZpZykgPT4ge1xuXHRcdFx0Ly8gQ2hlY2sgdGltZSBhZ2FpbnN0IHRoaXMgc3BlY2lmaWMgY29uZmlnXG5cdFx0XHQvLyBzdGFydFRpbWUgYW5kIGVuZFRpbWUgYXJlIG51bWJlcnMgKDAtMjQpXG5cdFx0XHRjb25zdCBzdGFydEggPSBjb25maWcuc3RhcnRUaW1lID8/IDlcblx0XHRcdGNvbnN0IGVuZEggPSBjb25maWcuZW5kVGltZSA/PyAxN1xuXG5cdFx0XHRjb25zdCBzdGFydE1pbnV0ZXMgPSBzdGFydEggKiA2MFxuXHRcdFx0Y29uc3QgZW5kTWludXRlcyA9IGVuZEggKiA2MFxuXG5cdFx0XHRpZiAoY3VycmVudE1pbnV0ZXMgPj0gc3RhcnRNaW51dGVzICYmIGN1cnJlbnRNaW51dGVzIDwgZW5kTWludXRlcykge1xuXHRcdFx0XHRpc0luQnVzaW5lc3NIb3VyID0gdHJ1ZVxuXHRcdFx0fVxuXHRcdH0sXG5cdH0pXG5cblx0cmV0dXJuIGlzSW5CdXNpbmVzc0hvdXJcbn1cblxuLyoqXG4gKiBIZWxwZXIgdG8gcHJvY2VzcyBhIGJ1c2luZXNzIGhvdXJzIGNvbmZpZ3VyYXRpb24gYW5kIHVwZGF0ZSB0aGUgcmFuZ2UuXG4gKi9cbmV4cG9ydCBjb25zdCBwcm9jZXNzQnVzaW5lc3NIb3VycyA9IChcblx0Ymg6IEJ1c2luZXNzSG91cnMgfCBCdXNpbmVzc0hvdXJzW10gfCB1bmRlZmluZWQsXG5cdG9wdGlvbnM6IHtcblx0XHRkYXRlPzogRGF5anNcblx0XHRvbk1hdGNoOiAoY29uZmlnOiBCdXNpbmVzc0hvdXJzKSA9PiB2b2lkXG5cdH1cbikgPT4ge1xuXHRjb25zdCB7IGRhdGUsIG9uTWF0Y2ggfSA9IG9wdGlvbnNcblx0aWYgKCFiaCkgcmV0dXJuXG5cblx0Y29uc3QgY29uZmlncyA9IEFycmF5LmlzQXJyYXkoYmgpID8gYmggOiBbYmhdXG5cblx0Zm9yIChjb25zdCBjb25maWcgb2YgY29uZmlncykge1xuXHRcdGlmIChkYXRlICYmIGNvbmZpZy5kYXlzT2ZXZWVrKSB7XG5cdFx0XHRjb25zdCBkYXlPZldlZWsgPSBkYXRlLmRheSgpXG5cdFx0XHRpZiAoXG5cdFx0XHRcdGNvbmZpZy5kYXlzT2ZXZWVrLnNvbWUoKGQpID0+IFdFRUtfREFZU19OVU1CRVJfTUFQW2RdID09PSBkYXlPZldlZWspXG5cdFx0XHQpIHtcblx0XHRcdFx0b25NYXRjaChjb25maWcpXG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdG9uTWF0Y2goY29uZmlnKVxuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJ1c2luZXNzSG91cnNSYW5nZSB7XG5cdG1pblN0YXJ0OiBudW1iZXJcblx0bWF4RW5kOiBudW1iZXJcblx0aGFzQnVzaW5lc3NIb3VyczogYm9vbGVhblxufVxuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIHVuaW9uIG9mIGJ1c2luZXNzIGhvdXJzIHJhbmdlcyBhY3Jvc3MgbXVsdGlwbGUgZGF0ZXMgYW5kL29yIHJlc291cmNlIGNvbmZpZ3VyYXRpb25zLlxuICovXG5leHBvcnQgY29uc3QgY2FsY3VsYXRlQnVzaW5lc3NIb3Vyc1JhbmdlID0gKG9wdGlvbnM6IHtcblx0YWxsRGF0ZXM6IERheWpzW11cblx0YnVzaW5lc3NIb3Vycz86IEJ1c2luZXNzSG91cnMgfCBCdXNpbmVzc0hvdXJzW11cblx0cmVzb3VyY2VCdXNpbmVzc0hvdXJzPzogKEJ1c2luZXNzSG91cnMgfCBCdXNpbmVzc0hvdXJzW10pW11cblx0aGlkZU5vbkJ1c2luZXNzSG91cnM/OiBib29sZWFuXG59KTogQnVzaW5lc3NIb3Vyc1JhbmdlID0+IHtcblx0Y29uc3Qge1xuXHRcdGFsbERhdGVzLFxuXHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0cmVzb3VyY2VCdXNpbmVzc0hvdXJzID0gW10sXG5cdFx0aGlkZU5vbkJ1c2luZXNzSG91cnMsXG5cdH0gPSBvcHRpb25zXG5cblx0bGV0IG1pblN0YXJ0ID0gMjRcblx0bGV0IG1heEVuZCA9IDBcblx0bGV0IGhhc0J1c2luZXNzSG91cnMgPSBmYWxzZVxuXG5cdGNvbnN0IG9uTWF0Y2ggPSAoY29uZmlnOiBCdXNpbmVzc0hvdXJzKSA9PiB7XG5cdFx0aGFzQnVzaW5lc3NIb3VycyA9IHRydWVcblx0XHRtaW5TdGFydCA9IE1hdGgubWluKG1pblN0YXJ0LCBjb25maWcuc3RhcnRUaW1lID8/IDkpXG5cdFx0bWF4RW5kID0gTWF0aC5tYXgobWF4RW5kLCBjb25maWcuZW5kVGltZSA/PyAxNylcblx0fVxuXG5cdC8vIEludm9rZSBwcm9jZXNzQnVzaW5lc3NIb3VycyBmb3IgdGhlIGdsb2JhbCBjb25maWcgYW5kIGV2ZXJ5IHJlc291cmNlXG5cdC8vIGNvbmZpZywgb3B0aW9uYWxseSBzY29wZWQgdG8gYSBzcGVjaWZpYyBkYXRlLlxuXHRjb25zdCBwcm9jZXNzQWxsID0gKGRhdGU/OiBEYXlqcykgPT4ge1xuXHRcdHByb2Nlc3NCdXNpbmVzc0hvdXJzKGJ1c2luZXNzSG91cnMsIHsgZGF0ZSwgb25NYXRjaCB9KVxuXHRcdGZvciAoY29uc3QgcmJoIG9mIHJlc291cmNlQnVzaW5lc3NIb3Vycykge1xuXHRcdFx0cHJvY2Vzc0J1c2luZXNzSG91cnMocmJoLCB7IGRhdGUsIG9uTWF0Y2ggfSlcblx0XHR9XG5cdH1cblxuXHRmb3IgKGNvbnN0IGRhdGUgb2YgYWxsRGF0ZXMpIHByb2Nlc3NBbGwoZGF0ZSlcblxuXHQvLyBGYWxsYmFjazogcmV0cnkgd2l0aG91dCBkYXRlIHNjb3BpbmcsIHRoZW4gZGVmYXVsdCB0byA5LTE3IGlmIHN0aWxsIGVtcHR5LlxuXHRpZiAoIWhhc0J1c2luZXNzSG91cnMgJiYgaGlkZU5vbkJ1c2luZXNzSG91cnMpIHtcblx0XHRwcm9jZXNzQWxsKClcblx0XHRpZiAoIWhhc0J1c2luZXNzSG91cnMpIHtcblx0XHRcdG1pblN0YXJ0ID0gOVxuXHRcdFx0bWF4RW5kID0gMTdcblx0XHRcdGhhc0J1c2luZXNzSG91cnMgPSB0cnVlXG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHsgbWluU3RhcnQsIG1heEVuZCwgaGFzQnVzaW5lc3NIb3VycyB9XG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgQnVzaW5lc3NIb3VycyB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB7IGNhbGN1bGF0ZUJ1c2luZXNzSG91cnNSYW5nZSB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvdXRpbHMvYnVzaW5lc3MtaG91cnMnXG5pbXBvcnQgZGF5anMsIHsgdHlwZSBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuXG5leHBvcnQgY29uc3QgYnVpbGREYXRlVGltZSA9IChcblx0ZGF0ZTogRGF0ZSxcblx0dGltZTogc3RyaW5nLFxuXHRpc0FsbERheTogYm9vbGVhblxuKTogRGF5anMgPT4ge1xuXHRjb25zdCBbaG91cnMsIG1pbnV0ZXNdID0gdGltZS5zcGxpdCgnOicpLm1hcChOdW1iZXIpXG5cdGNvbnN0IGJhc2UgPSBkYXlqcyhkYXRlKS5ob3VyKGhvdXJzKS5taW51dGUobWludXRlcylcblx0cmV0dXJuIGlzQWxsRGF5ID8gYmFzZS5ob3VyKDApLm1pbnV0ZSgwKSA6IGJhc2Vcbn1cblxuZXhwb3J0IGNvbnN0IGJ1aWxkRW5kRGF0ZVRpbWUgPSAoXG5cdGRhdGU6IERhdGUsXG5cdHRpbWU6IHN0cmluZyxcblx0aXNBbGxEYXk6IGJvb2xlYW5cbik6IERheWpzID0+IHtcblx0Y29uc3QgW2hvdXJzLCBtaW51dGVzXSA9IHRpbWUuc3BsaXQoJzonKS5tYXAoTnVtYmVyKVxuXHRjb25zdCBiYXNlID0gZGF5anMoZGF0ZSkuaG91cihob3VycykubWludXRlKG1pbnV0ZXMpXG5cdHJldHVybiBpc0FsbERheSA/IGJhc2UuaG91cigyMykubWludXRlKDU5KSA6IGJhc2Vcbn1cblxuZXhwb3J0IGNvbnN0IGdldFRpbWVDb25zdHJhaW50cyA9IChcblx0ZGF0ZTogRGF0ZSxcblx0YnVzaW5lc3NIb3Vycz86IEJ1c2luZXNzSG91cnMgfCBCdXNpbmVzc0hvdXJzW11cbikgPT4ge1xuXHRpZiAoIWJ1c2luZXNzSG91cnMpIHJldHVybiB7IG1pbjogJzAwOjAwJywgbWF4OiAnMjM6NTknIH1cblxuXHRjb25zdCBkYXlqc0RhdGUgPSBkYXlqcyhkYXRlKVxuXG5cdGNvbnN0IHsgbWluU3RhcnQsIG1heEVuZCwgaGFzQnVzaW5lc3NIb3VycyB9ID0gY2FsY3VsYXRlQnVzaW5lc3NIb3Vyc1JhbmdlKHtcblx0XHRhbGxEYXRlczogW2RheWpzRGF0ZV0sXG5cdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRoaWRlTm9uQnVzaW5lc3NIb3VyczogZmFsc2UsXG5cdH0pXG5cblx0aWYgKCFoYXNCdXNpbmVzc0hvdXJzKSB7XG5cdFx0cmV0dXJuIHsgbWluOiAnMDA6MDAnLCBtYXg6ICcyMzo1OScgfVxuXHR9XG5cblx0cmV0dXJuIHtcblx0XHRtaW46IGAke21pblN0YXJ0LnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKX06MDBgLFxuXHRcdG1heDogYCR7KG1heEVuZCAtIDEpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKX06NDVgLFxuXHR9XG59XG4iLAogICAgImltcG9ydCB7IHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgV2Vla2RheSB9IGZyb20gJ3JydWxlJ1xuaW1wb3J0IHsgUlJ1bGUgfSBmcm9tICdycnVsZSdcbmltcG9ydCB7IENhcmQsIENhcmRDb250ZW50LCBDYXJkSGVhZGVyLCBDYXJkVGl0bGUgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvY2FyZCdcbmltcG9ydCB7IENoZWNrYm94IH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2NoZWNrYm94J1xuaW1wb3J0IHsgRGF0ZVBpY2tlciB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9kYXRlLXBpY2tlcidcbmltcG9ydCB7IElucHV0IH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2lucHV0J1xuaW1wb3J0IHsgTGFiZWwgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvbGFiZWwnXG5pbXBvcnQge1xuXHRTZWxlY3QsXG5cdFNlbGVjdENvbnRlbnQsXG5cdFNlbGVjdEl0ZW0sXG5cdFNlbGVjdFRyaWdnZXIsXG5cdFNlbGVjdFZhbHVlLFxufSBmcm9tICdAL2NvbXBvbmVudHMvdWkvc2VsZWN0J1xuaW1wb3J0IHR5cGUgeyBSUnVsZU9wdGlvbnMgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvdHlwZXMnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBrZXlzIH0gZnJvbSAnQC9saWIvdXRpbHMva2V5cydcblxuY29uc3QgRlJFUV9NQVAgPSB7XG5cdERBSUxZOiBSUnVsZS5EQUlMWSxcblx0V0VFS0xZOiBSUnVsZS5XRUVLTFksXG5cdE1PTlRITFk6IFJSdWxlLk1PTlRITFksXG5cdFlFQVJMWTogUlJ1bGUuWUVBUkxZLFxufSBhcyBjb25zdFxuY29uc3QgRlJFUV9UT19TVFIgPSBPYmplY3QuZnJvbUVudHJpZXMoXG5cdE9iamVjdC5lbnRyaWVzKEZSRVFfTUFQKS5tYXAoKFtrLCB2XSkgPT4gW3YsIGtdKVxuKSBhcyBSZWNvcmQ8bnVtYmVyLCBzdHJpbmc+XG5jb25zdCBXRUVLREFZUyA9IFtcblx0UlJ1bGUuU1UsXG5cdFJSdWxlLk1PLFxuXHRSUnVsZS5UVSxcblx0UlJ1bGUuV0UsXG5cdFJSdWxlLlRILFxuXHRSUnVsZS5GUixcblx0UlJ1bGUuU0EsXG5dXG5cbmNvbnN0IEVORF9UWVBFUyA9IFtcblx0eyB0eXBlOiAnbmV2ZXInLCBpZDogJ25ldmVyJywgbGFiZWxLZXk6ICduZXZlcicgfSxcblx0eyB0eXBlOiAnY291bnQnLCBpZDogJ2FmdGVyJywgbGFiZWxLZXk6ICdhZnRlcicgfSxcblx0eyB0eXBlOiAndW50aWwnLCBpZDogJ29uJywgbGFiZWxLZXk6ICdvbicgfSxcbl0gYXMgY29uc3RcbmNvbnN0IHBhcnNlTnVtID0gKHY6IHN0cmluZykgPT4gTWF0aC5tYXgoMSwgTnVtYmVyLnBhcnNlSW50KHYsIDEwKSB8fCAxKVxuXG5jb25zdCBnZXREZXNjcmlwdGlvbiA9IChcblx0b3B0czogUlJ1bGVPcHRpb25zIHwgbnVsbCxcblx0dDogKGs6IHN0cmluZykgPT4gc3RyaW5nXG4pID0+IHtcblx0aWYgKCFvcHRzKSB7XG5cdFx0cmV0dXJuIHQoJ2N1c3RvbVJlY3VycmVuY2UnKVxuXHR9XG5cdHRyeSB7XG5cdFx0Y29uc3QgdGV4dCA9IG5ldyBSUnVsZShvcHRzKS50b1RleHQoKVxuXHRcdHJldHVybiB0ZXh0ICYmICF0ZXh0LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ2Vycm9yJylcblx0XHRcdD8gdGV4dC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHRleHQuc2xpY2UoMSlcblx0XHRcdDogdCgnY3VzdG9tUmVjdXJyZW5jZScpXG5cdH0gY2F0Y2gge1xuXHRcdHJldHVybiB0KCdjdXN0b21SZWN1cnJlbmNlJylcblx0fVxufVxuXG5pbnRlcmZhY2UgUHJvcHMge1xuXHR2YWx1ZT86IFJSdWxlT3B0aW9ucyB8IG51bGxcblx0b25DaGFuZ2U6ICh2OiBSUnVsZU9wdGlvbnMgfCBudWxsKSA9PiB2b2lkXG59XG5cbmV4cG9ydCBjb25zdCBSZWN1cnJlbmNlRWRpdG9yOiBSZWFjdC5GQzxQcm9wcz4gPSAoeyB2YWx1ZSwgb25DaGFuZ2UgfSkgPT4ge1xuXHRjb25zdCB7IHQsIGZpcnN0RGF5T2ZXZWVrIH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgoY3R4KSA9PiAoe1xuXHRcdHQ6IGN0eC50LFxuXHRcdGZpcnN0RGF5T2ZXZWVrOiBjdHguZmlyc3REYXlPZldlZWssXG5cdH0pKVxuXHRjb25zdCBbc2hvdywgc2V0U2hvd10gPSB1c2VTdGF0ZSghIXZhbHVlKVxuXHRjb25zdCBbb3B0cywgc2V0T3B0c10gPSB1c2VTdGF0ZTxSUnVsZU9wdGlvbnMgfCBudWxsPigoKSA9PiB2YWx1ZSB8fCBudWxsKVxuXG5cdGNvbnN0IFdFRUtEQVlfT1BUSU9OUyA9IFdFRUtEQVlTLm1hcCgodmFsdWUsIGluZGV4KSA9PiAoe1xuXHRcdHZhbHVlLFxuXHRcdGxhYmVsOiBkYXlqcygpLmRheShpbmRleCkuZm9ybWF0KCdkZGQnKSxcblx0fSkpXG5cdGNvbnN0IHdlZWtEYXlzID0gV0VFS0RBWVMubWFwKFxuXHRcdChkLCBpKSA9PiBXRUVLREFZX09QVElPTlNbKGkgKyBmaXJzdERheU9mV2VlaykgJSA3XVxuXHQpXG5cblx0dXNlRWZmZWN0KCgpID0+IHtcblx0XHRzZXRTaG93KCEhdmFsdWUpXG5cdFx0aWYgKHZhbHVlKSB7XG5cdFx0XHRzZXRPcHRzKHZhbHVlKVxuXHRcdH1cblx0fSwgW3ZhbHVlXSlcblxuXHRjb25zdCB1cGRhdGUgPSAodTogUGFydGlhbDxSUnVsZU9wdGlvbnM+KSA9PiB7XG5cdFx0aWYgKCFvcHRzKSB7XG5cdFx0XHRyZXR1cm5cblx0XHR9XG5cdFx0Y29uc3QgbmV4dCA9IHsgLi4ub3B0cywgLi4udSB9XG5cdFx0c2V0T3B0cyhuZXh0KVxuXHRcdG9uQ2hhbmdlKHNob3cgPyBuZXh0IDogbnVsbClcblx0fVxuXG5cdGNvbnN0IHRvZ2dsZSA9IChjaGVja2VkOiBib29sZWFuKSA9PiB7XG5cdFx0c2V0U2hvdyhjaGVja2VkKVxuXHRcdGlmICghY2hlY2tlZCkge1xuXHRcdFx0b25DaGFuZ2UobnVsbClcblx0XHRcdHJldHVyblxuXHRcdH1cblx0XHRpZiAob3B0cykge1xuXHRcdFx0b25DaGFuZ2Uob3B0cylcblx0XHRcdHJldHVyblxuXHRcdH1cblx0XHRjb25zdCBkZWYgPSB7IGZyZXE6IFJSdWxlLkRBSUxZLCBpbnRlcnZhbDogMSB9IGFzIFJSdWxlT3B0aW9uc1xuXHRcdHNldE9wdHMoZGVmKVxuXHRcdG9uQ2hhbmdlKGRlZilcblx0fVxuXG5cdGNvbnN0IHRvZ2dsZURheSA9IChpOiBudW1iZXIpID0+IHtcblx0XHRjb25zdCBjdXJyID0gKG9wdHM/LmJ5d2Vla2RheSBhcyBXZWVrZGF5W10pIHx8IFtdXG5cdFx0Y29uc3QgZGF5ID0gV0VFS0RBWVNbaV1cblx0XHRjb25zdCBuZXh0ID0gY3Vyci5pbmNsdWRlcyhkYXkpXG5cdFx0XHQ/IGN1cnIuZmlsdGVyKChkKSA9PiBkICE9PSBkYXkpXG5cdFx0XHQ6IFsuLi5jdXJyLCBkYXldXG5cdFx0dXBkYXRlKHsgYnl3ZWVrZGF5OiBuZXh0Lmxlbmd0aCA/IG5leHQgOiB1bmRlZmluZWQgfSlcblx0fVxuXG5cdGNvbnN0IHNldEVuZFR5cGUgPSAodHlwZTogJ25ldmVyJyB8ICdjb3VudCcgfCAndW50aWwnKSA9PiB7XG5cdFx0Y29uc3QgdTogUGFydGlhbDxSUnVsZU9wdGlvbnM+ID0geyBjb3VudDogdW5kZWZpbmVkLCB1bnRpbDogdW5kZWZpbmVkIH1cblx0XHRpZiAodHlwZSA9PT0gJ2NvdW50Jykge1xuXHRcdFx0dS5jb3VudCA9IG9wdHM/LmNvdW50IHx8IDFcblx0XHR9XG5cdFx0aWYgKHR5cGUgPT09ICd1bnRpbCcpIHtcblx0XHRcdHUudW50aWwgPSBvcHRzPy51bnRpbCB8fCBkYXlqcygpLmFkZCgxLCAnbW9udGgnKS5lbmRPZignZGF5JykudG9EYXRlKClcblx0XHR9XG5cdFx0dXBkYXRlKHUpXG5cdH1cblxuXHRjb25zdCBlbmRUeXBlID0gb3B0cz8udW50aWwgPyAndW50aWwnIDogb3B0cz8uY291bnQgPyAnY291bnQnIDogJ25ldmVyJ1xuXHRjb25zdCBmcmVxID0gRlJFUV9UT19TVFJbb3B0cz8uZnJlcSA/PyBSUnVsZS5EQUlMWV0gfHwgJ0RBSUxZJ1xuXHRjb25zdCBieXdlZWtkYXkgPSBBcnJheS5pc0FycmF5KG9wdHM/LmJ5d2Vla2RheSlcblx0XHQ/IG9wdHMuYnl3ZWVrZGF5XG5cdFx0OiBvcHRzPy5ieXdlZWtkYXlcblx0XHRcdD8gW29wdHMuYnl3ZWVrZGF5XVxuXHRcdFx0OiBbXVxuXG5cdHJldHVybiAoXG5cdFx0PENhcmQgZGF0YS10ZXN0aWQ9XCJyZWN1cnJlbmNlLWVkaXRvclwiPlxuXHRcdFx0PENhcmRIZWFkZXIgY2xhc3NOYW1lPVwicGItM1wiPlxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMlwiPlxuXHRcdFx0XHRcdDxDaGVja2JveFxuXHRcdFx0XHRcdFx0Y2hlY2tlZD17c2hvd31cblx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPVwidG9nZ2xlLXJlY3VycmVuY2VcIlxuXHRcdFx0XHRcdFx0aWQ9XCJyZWN1cnJpbmdcIlxuXHRcdFx0XHRcdFx0b25DaGVja2VkQ2hhbmdlPXt0b2dnbGV9XG5cdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHQ8Q2FyZFRpdGxlIGNsYXNzTmFtZT1cInRleHQtc21cIj57dCgncmVwZWF0Jyl9PC9DYXJkVGl0bGU+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHR7c2hvdyAmJiB2YWx1ZSAmJiAoXG5cdFx0XHRcdFx0PHAgY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LW11dGVkLWZvcmVncm91bmRcIj5cblx0XHRcdFx0XHRcdHtnZXREZXNjcmlwdGlvbih2YWx1ZSwgdCl9XG5cdFx0XHRcdFx0PC9wPlxuXHRcdFx0XHQpfVxuXHRcdFx0PC9DYXJkSGVhZGVyPlxuXG5cdFx0XHR7c2hvdyAmJiAoXG5cdFx0XHRcdDxDYXJkQ29udGVudCBjbGFzc05hbWU9XCJwdC0wXCI+XG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTRcIj5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBncmlkLWNvbHMtMiBnYXAtNFwiPlxuXHRcdFx0XHRcdFx0XHQ8ZGl2PlxuXHRcdFx0XHRcdFx0XHRcdDxMYWJlbCBjbGFzc05hbWU9XCJ0ZXh0LXhzXCIgaHRtbEZvcj1cImZyZXF1ZW5jeVwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0e3QoJ3JlcGVhdHMnKX1cblx0XHRcdFx0XHRcdFx0XHQ8L0xhYmVsPlxuXHRcdFx0XHRcdFx0XHRcdDxTZWxlY3Rcblx0XHRcdFx0XHRcdFx0XHRcdG9uVmFsdWVDaGFuZ2U9eyhmKSA9PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR1cGRhdGUoeyBmcmVxOiBGUkVRX01BUFtmIGFzIGtleW9mIHR5cGVvZiBGUkVRX01BUF0gfSlcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlPXtmcmVxfVxuXHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdDxTZWxlY3RUcmlnZ2VyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImgtOFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPVwiZnJlcXVlbmN5LXNlbGVjdFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlkPVwiZnJlcXVlbmN5XCJcblx0XHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0PFNlbGVjdFZhbHVlIC8+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8L1NlbGVjdFRyaWdnZXI+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8U2VsZWN0Q29udGVudD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0e09iamVjdC5rZXlzKEZSRVFfTUFQKS5tYXAoKGYpID0+IChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8U2VsZWN0SXRlbSBrZXk9e2Z9IHZhbHVlPXtmfT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHt0KGYudG9Mb3dlckNhc2UoKSl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9TZWxlY3RJdGVtPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQpKX1cblx0XHRcdFx0XHRcdFx0XHRcdDwvU2VsZWN0Q29udGVudD5cblx0XHRcdFx0XHRcdFx0XHQ8L1NlbGVjdD5cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdDxkaXY+XG5cdFx0XHRcdFx0XHRcdFx0PExhYmVsIGNsYXNzTmFtZT1cInRleHQteHNcIiBodG1sRm9yPVwiaW50ZXJ2YWxcIj5cblx0XHRcdFx0XHRcdFx0XHRcdHt0KCdldmVyeScpfVxuXHRcdFx0XHRcdFx0XHRcdDwvTGFiZWw+XG5cdFx0XHRcdFx0XHRcdFx0PElucHV0XG5cdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJoLThcIlxuXHRcdFx0XHRcdFx0XHRcdFx0aWQ9XCJpbnRlcnZhbFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRtaW49XCIxXCJcblx0XHRcdFx0XHRcdFx0XHRcdG9uQ2hhbmdlPXsoZSkgPT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0dXBkYXRlKHsgaW50ZXJ2YWw6IHBhcnNlTnVtKGUudGFyZ2V0LnZhbHVlKSB9KVxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0dHlwZT1cIm51bWJlclwiXG5cdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZT17b3B0cz8uaW50ZXJ2YWwgfHwgMX1cblx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdFx0XHR7b3B0cz8uZnJlcSA9PT0gUlJ1bGUuV0VFS0xZICYmIChcblx0XHRcdFx0XHRcdFx0PGRpdj5cblx0XHRcdFx0XHRcdFx0XHQ8TGFiZWwgY2xhc3NOYW1lPVwidGV4dC14c1wiPnt0KCdyZXBlYXRPbicpfTwvTGFiZWw+XG5cdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtd3JhcCBnYXAtMSBtdC0xXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHR7d2Vla0RheXMubWFwKChkLCBpKSA9PiAoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTFcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGtleT17a2V5cy5saXN0S2V5KCd3ZWVrZGF5JywgaSl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8Q2hlY2tib3hcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNoZWNrZWQ9e2J5d2Vla2RheS5pbmNsdWRlcyhkLnZhbHVlKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlkPXtrZXlzLmxpc3RLZXkoJ2RheScsIGkpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0b25DaGVja2VkQ2hhbmdlPXsoKSA9PiB0b2dnbGVEYXkoaSl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8TGFiZWxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cInRleHQteHMgY3Vyc29yLXBvaW50ZXJcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aHRtbEZvcj17a2V5cy5saXN0S2V5KCdkYXknLCBpKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR7ZC5sYWJlbH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L0xhYmVsPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0XHRcdCkpfVxuXHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdCl9XG5cblx0XHRcdFx0XHRcdDxkaXY+XG5cdFx0XHRcdFx0XHRcdDxMYWJlbCBjbGFzc05hbWU9XCJ0ZXh0LXhzXCI+e3QoJ2VuZHMnKX08L0xhYmVsPlxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInNwYWNlLXktMiBtdC0xXCI+XG5cdFx0XHRcdFx0XHRcdFx0e0VORF9UWVBFUy5tYXAoKHsgdHlwZSwgaWQsIGxhYmVsS2V5IH0pID0+IChcblx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0yXCIga2V5PXt0eXBlfT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0PENoZWNrYm94XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2hlY2tlZD17ZW5kVHlwZSA9PT0gdHlwZX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZD17aWR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0b25DaGVja2VkQ2hhbmdlPXsoKSA9PiBzZXRFbmRUeXBlKHR5cGUpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8TGFiZWwgY2xhc3NOYW1lPVwidGV4dC14c1wiIGh0bWxGb3I9e2lkfT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR7dChsYWJlbEtleSl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdDwvTGFiZWw+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHt0eXBlID09PSAnY291bnQnICYmIGVuZFR5cGUgPT09ICdjb3VudCcgJiYgKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDw+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8SW5wdXRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiaC02IHctMTYgdGV4dC14c1wiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPVwiY291bnQtaW5wdXRcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtaW49XCIxXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0b25DaGFuZ2U9eyhlKSA9PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHVwZGF0ZSh7IGNvdW50OiBwYXJzZU51bShlLnRhcmdldC52YWx1ZSkgfSlcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlPVwibnVtYmVyXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFsdWU9e29wdHM/LmNvdW50IHx8IDF9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwidGV4dC14c1wiPnt0KCdvY2N1cnJlbmNlcycpfTwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8Lz5cblx0XHRcdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0e3R5cGUgPT09ICd1bnRpbCcgJiYgZW5kVHlwZSA9PT0gJ3VudGlsJyAmJiAoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PERhdGVQaWNrZXJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImgtNlwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkYXRlPXtvcHRzPy51bnRpbCA/PyB1bmRlZmluZWR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvbkNoYW5nZT17KGQpID0+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHVwZGF0ZSh7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dW50aWw6IGRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdD8gZGF5anMoZCkuZW5kT2YoJ2RheScpLnRvRGF0ZSgpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ6IHVuZGVmaW5lZCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdFx0KSl9XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDwvQ2FyZENvbnRlbnQ+XG5cdFx0XHQpfVxuXHRcdDwvQ2FyZD5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5mdW5jdGlvbiBDYXJkKHsgY2xhc3NOYW1lLCAuLi5wcm9wcyB9OiBSZWFjdC5Db21wb25lbnRQcm9wczwnZGl2Jz4pIHtcblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQndGV4dC1jYXJkLWZvcmVncm91bmQgZmxleCBmbGV4LWNvbCBnYXAtNiByb3VuZGVkLXhsIGJvcmRlciBzaGFkb3ctc20nLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJjYXJkXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmZ1bmN0aW9uIENhcmRIZWFkZXIoeyBjbGFzc05hbWUsIC4uLnByb3BzIH06IFJlYWN0LkNvbXBvbmVudFByb3BzPCdkaXYnPikge1xuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCdAY29udGFpbmVyL2NhcmQtaGVhZGVyIGdyaWQgYXV0by1yb3dzLW1pbiBncmlkLXJvd3MtW2F1dG9fYXV0b10gaXRlbXMtc3RhcnQgZ2FwLTEuNSBwLTQgcGItMCBoYXMtZGF0YS1bc2xvdD1jYXJkLWFjdGlvbl06Z3JpZC1jb2xzLVsxZnJfYXV0b10nLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJjYXJkLWhlYWRlclwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0Lz5cblx0KVxufVxuXG5mdW5jdGlvbiBDYXJkVGl0bGUoeyBjbGFzc05hbWUsIC4uLnByb3BzIH06IFJlYWN0LkNvbXBvbmVudFByb3BzPCdkaXYnPikge1xuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oJ2xlYWRpbmctbm9uZSBmb250LXNlbWlib2xkJywgY2xhc3NOYW1lKX1cblx0XHRcdGRhdGEtc2xvdD1cImNhcmQtdGl0bGVcIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdC8+XG5cdClcbn1cblxuZnVuY3Rpb24gQ2FyZERlc2NyaXB0aW9uKHsgY2xhc3NOYW1lLCAuLi5wcm9wcyB9OiBSZWFjdC5Db21wb25lbnRQcm9wczwnZGl2Jz4pIHtcblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9e2NuKCd0ZXh0LW11dGVkLWZvcmVncm91bmQgdGV4dC1zbScsIGNsYXNzTmFtZSl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJjYXJkLWRlc2NyaXB0aW9uXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmZ1bmN0aW9uIENhcmRBY3Rpb24oeyBjbGFzc05hbWUsIC4uLnByb3BzIH06IFJlYWN0LkNvbXBvbmVudFByb3BzPCdkaXYnPikge1xuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCdjb2wtc3RhcnQtMiByb3ctc3Bhbi0yIHJvdy1zdGFydC0xIHNlbGYtc3RhcnQganVzdGlmeS1zZWxmLWVuZCcsXG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHRcdGRhdGEtc2xvdD1cImNhcmQtYWN0aW9uXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmZ1bmN0aW9uIENhcmRDb250ZW50KHsgY2xhc3NOYW1lLCAuLi5wcm9wcyB9OiBSZWFjdC5Db21wb25lbnRQcm9wczwnZGl2Jz4pIHtcblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9e2NuKCdwLTQgcHQtMCcsIGNsYXNzTmFtZSl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJjYXJkLWNvbnRlbnRcIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdC8+XG5cdClcbn1cblxuZnVuY3Rpb24gQ2FyZEZvb3Rlcih7IGNsYXNzTmFtZSwgLi4ucHJvcHMgfTogUmVhY3QuQ29tcG9uZW50UHJvcHM8J2Rpdic+KSB7XG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbignZmxleCBpdGVtcy1jZW50ZXIgcHgtNiBbLmJvcmRlci10XTpwdC02JywgY2xhc3NOYW1lKX1cblx0XHRcdGRhdGEtc2xvdD1cImNhcmQtZm9vdGVyXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmV4cG9ydCB7XG5cdENhcmQsXG5cdENhcmRBY3Rpb24sXG5cdENhcmRDb250ZW50LFxuXHRDYXJkRGVzY3JpcHRpb24sXG5cdENhcmRGb290ZXIsXG5cdENhcmRIZWFkZXIsXG5cdENhcmRUaXRsZSxcbn1cbiIsCiAgICAiaW1wb3J0ICogYXMgU2VsZWN0UHJpbWl0aXZlIGZyb20gJ0ByYWRpeC11aS9yZWFjdC1zZWxlY3QnXG5pbXBvcnQgeyBDaGVja0ljb24sIENoZXZyb25Eb3duSWNvbiwgQ2hldnJvblVwSWNvbiB9IGZyb20gJ2x1Y2lkZS1yZWFjdCdcbmltcG9ydCB0eXBlICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmZ1bmN0aW9uIFNlbGVjdCh7XG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgU2VsZWN0UHJpbWl0aXZlLlJvb3Q+KSB7XG5cdHJldHVybiA8U2VsZWN0UHJpbWl0aXZlLlJvb3QgZGF0YS1zbG90PVwic2VsZWN0XCIgey4uLnByb3BzfSAvPlxufVxuXG5mdW5jdGlvbiBTZWxlY3RHcm91cCh7XG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgU2VsZWN0UHJpbWl0aXZlLkdyb3VwPikge1xuXHRyZXR1cm4gPFNlbGVjdFByaW1pdGl2ZS5Hcm91cCBkYXRhLXNsb3Q9XCJzZWxlY3QtZ3JvdXBcIiB7Li4ucHJvcHN9IC8+XG59XG5cbmZ1bmN0aW9uIFNlbGVjdFZhbHVlKHtcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTZWxlY3RQcmltaXRpdmUuVmFsdWU+KSB7XG5cdHJldHVybiA8U2VsZWN0UHJpbWl0aXZlLlZhbHVlIGRhdGEtc2xvdD1cInNlbGVjdC12YWx1ZVwiIHsuLi5wcm9wc30gLz5cbn1cblxuZnVuY3Rpb24gU2VsZWN0VHJpZ2dlcih7XG5cdGNsYXNzTmFtZSxcblx0c2l6ZSA9ICdkZWZhdWx0Jyxcblx0Y2hpbGRyZW4sXG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgU2VsZWN0UHJpbWl0aXZlLlRyaWdnZXI+ICYge1xuXHRzaXplPzogJ3NtJyB8ICdkZWZhdWx0J1xufSkge1xuXHRyZXR1cm4gKFxuXHRcdDxTZWxlY3RQcmltaXRpdmUuVHJpZ2dlclxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XCJib3JkZXItaW5wdXQgZGF0YS1wbGFjZWhvbGRlcjp0ZXh0LW11dGVkLWZvcmVncm91bmQgWyZfc3ZnOm5vdChbY2xhc3MqPSd0ZXh0LSddKV06dGV4dC1tdXRlZC1mb3JlZ3JvdW5kIGZvY3VzLXZpc2libGU6Ym9yZGVyLXJpbmcgZm9jdXMtdmlzaWJsZTpyaW5nLXJpbmcvNTAgYXJpYS1pbnZhbGlkOnJpbmctZGVzdHJ1Y3RpdmUvMjAgZGFyazphcmlhLWludmFsaWQ6cmluZy1kZXN0cnVjdGl2ZS80MCBhcmlhLWludmFsaWQ6Ym9yZGVyLWRlc3RydWN0aXZlIGRhcms6YmctaW5wdXQvMzAgZGFyazpob3ZlcjpiZy1pbnB1dC81MCBmbGV4IHctZml0IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ2FwLTIgcm91bmRlZC1tZCBib3JkZXIgYmctdHJhbnNwYXJlbnQgcHgtMyBweS0yIHRleHQtc20gd2hpdGVzcGFjZS1ub3dyYXAgc2hhZG93LXhzIHRyYW5zaXRpb24tW2NvbG9yLGJveC1zaGFkb3ddIG91dGxpbmUtbm9uZSBmb2N1cy12aXNpYmxlOnJpbmctWzNweF0gZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIGRpc2FibGVkOm9wYWNpdHktNTAgZGF0YS1bc2l6ZT1kZWZhdWx0XTpoLTkgZGF0YS1bc2l6ZT1zbV06aC04ICo6ZGF0YS1bc2xvdD1zZWxlY3QtdmFsdWVdOmxpbmUtY2xhbXAtMSAqOmRhdGEtW3Nsb3Q9c2VsZWN0LXZhbHVlXTpmbGV4ICo6ZGF0YS1bc2xvdD1zZWxlY3QtdmFsdWVdOml0ZW1zLWNlbnRlciAqOmRhdGEtW3Nsb3Q9c2VsZWN0LXZhbHVlXTpnYXAtMiBbJl9zdmddOnBvaW50ZXItZXZlbnRzLW5vbmUgWyZfc3ZnXTpzaHJpbmstMCBbJl9zdmc6bm90KFtjbGFzcyo9J3NpemUtJ10pXTpzaXplLTRcIixcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0ZGF0YS1zaXplPXtzaXplfVxuXHRcdFx0ZGF0YS1zbG90PVwic2VsZWN0LXRyaWdnZXJcIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdD5cblx0XHRcdHtjaGlsZHJlbn1cblx0XHRcdDxTZWxlY3RQcmltaXRpdmUuSWNvbiBhc0NoaWxkPlxuXHRcdFx0XHQ8Q2hldnJvbkRvd25JY29uIGNsYXNzTmFtZT1cInNpemUtNCBvcGFjaXR5LTUwXCIgLz5cblx0XHRcdDwvU2VsZWN0UHJpbWl0aXZlLkljb24+XG5cdFx0PC9TZWxlY3RQcmltaXRpdmUuVHJpZ2dlcj5cblx0KVxufVxuXG5mdW5jdGlvbiBTZWxlY3RDb250ZW50KHtcblx0Y2xhc3NOYW1lLFxuXHRjaGlsZHJlbixcblx0cG9zaXRpb24gPSAncG9wcGVyJyxcblx0YWxpZ24gPSAnY2VudGVyJyxcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTZWxlY3RQcmltaXRpdmUuQ29udGVudD4pIHtcblx0cmV0dXJuIChcblx0XHQ8U2VsZWN0UHJpbWl0aXZlLlBvcnRhbD5cblx0XHRcdDxTZWxlY3RQcmltaXRpdmUuQ29udGVudFxuXHRcdFx0XHRhbGlnbj17YWxpZ259XG5cdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0J2JnLXBvcG92ZXIgdGV4dC1wb3BvdmVyLWZvcmVncm91bmQgZGF0YS1bc3RhdGU9b3Blbl06YW5pbWF0ZS1pbiBkYXRhLVtzdGF0ZT1jbG9zZWRdOmFuaW1hdGUtb3V0IGRhdGEtW3N0YXRlPWNsb3NlZF06ZmFkZS1vdXQtMCBkYXRhLVtzdGF0ZT1vcGVuXTpmYWRlLWluLTAgZGF0YS1bc3RhdGU9Y2xvc2VkXTp6b29tLW91dC05NSBkYXRhLVtzdGF0ZT1vcGVuXTp6b29tLWluLTk1IGRhdGEtW3NpZGU9Ym90dG9tXTpzbGlkZS1pbi1mcm9tLXRvcC0yIGRhdGEtW3NpZGU9bGVmdF06c2xpZGUtaW4tZnJvbS1yaWdodC0yIGRhdGEtW3NpZGU9cmlnaHRdOnNsaWRlLWluLWZyb20tbGVmdC0yIGRhdGEtW3NpZGU9dG9wXTpzbGlkZS1pbi1mcm9tLWJvdHRvbS0yIHJlbGF0aXZlIHotNTAgbWF4LWgtKC0tcmFkaXgtc2VsZWN0LWNvbnRlbnQtYXZhaWxhYmxlLWhlaWdodCkgbWluLXctMzIgb3JpZ2luLSgtLXJhZGl4LXNlbGVjdC1jb250ZW50LXRyYW5zZm9ybS1vcmlnaW4pIG92ZXJmbG93LXgtaGlkZGVuIG92ZXJmbG93LXktYXV0byByb3VuZGVkLW1kIGJvcmRlciBzaGFkb3ctbWQnLFxuXHRcdFx0XHRcdHBvc2l0aW9uID09PSAncG9wcGVyJyAmJlxuXHRcdFx0XHRcdFx0J2RhdGEtW3NpZGU9Ym90dG9tXTp0cmFuc2xhdGUteS0xIGRhdGEtW3NpZGU9bGVmdF06LXRyYW5zbGF0ZS14LTEgZGF0YS1bc2lkZT1yaWdodF06dHJhbnNsYXRlLXgtMSBkYXRhLVtzaWRlPXRvcF06LXRyYW5zbGF0ZS15LTEnLFxuXHRcdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0XHQpfVxuXHRcdFx0XHRkYXRhLXNsb3Q9XCJzZWxlY3QtY29udGVudFwiXG5cdFx0XHRcdHBvc2l0aW9uPXtwb3NpdGlvbn1cblx0XHRcdFx0ey4uLnByb3BzfVxuXHRcdFx0PlxuXHRcdFx0XHQ8U2VsZWN0U2Nyb2xsVXBCdXR0b24gLz5cblx0XHRcdFx0PFNlbGVjdFByaW1pdGl2ZS5WaWV3cG9ydFxuXHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHQncC0xJyxcblx0XHRcdFx0XHRcdHBvc2l0aW9uID09PSAncG9wcGVyJyAmJlxuXHRcdFx0XHRcdFx0XHQnaC0oLS1yYWRpeC1zZWxlY3QtdHJpZ2dlci1oZWlnaHQpIHctZnVsbCBtaW4tdy0oLS1yYWRpeC1zZWxlY3QtdHJpZ2dlci13aWR0aCkgc2Nyb2xsLW15LTEnXG5cdFx0XHRcdFx0KX1cblx0XHRcdFx0PlxuXHRcdFx0XHRcdHtjaGlsZHJlbn1cblx0XHRcdFx0PC9TZWxlY3RQcmltaXRpdmUuVmlld3BvcnQ+XG5cdFx0XHRcdDxTZWxlY3RTY3JvbGxEb3duQnV0dG9uIC8+XG5cdFx0XHQ8L1NlbGVjdFByaW1pdGl2ZS5Db250ZW50PlxuXHRcdDwvU2VsZWN0UHJpbWl0aXZlLlBvcnRhbD5cblx0KVxufVxuXG5mdW5jdGlvbiBTZWxlY3RMYWJlbCh7XG5cdGNsYXNzTmFtZSxcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTZWxlY3RQcmltaXRpdmUuTGFiZWw+KSB7XG5cdHJldHVybiAoXG5cdFx0PFNlbGVjdFByaW1pdGl2ZS5MYWJlbFxuXHRcdFx0Y2xhc3NOYW1lPXtjbigndGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHB4LTIgcHktMS41IHRleHQteHMnLCBjbGFzc05hbWUpfVxuXHRcdFx0ZGF0YS1zbG90PVwic2VsZWN0LWxhYmVsXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmZ1bmN0aW9uIFNlbGVjdEl0ZW0oe1xuXHRjbGFzc05hbWUsXG5cdGNoaWxkcmVuLFxuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNlbGVjdFByaW1pdGl2ZS5JdGVtPikge1xuXHRyZXR1cm4gKFxuXHRcdDxTZWxlY3RQcmltaXRpdmUuSXRlbVxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XCJmb2N1czpiZy1hY2NlbnQgZm9jdXM6dGV4dC1hY2NlbnQtZm9yZWdyb3VuZCBbJl9zdmc6bm90KFtjbGFzcyo9J3RleHQtJ10pXTp0ZXh0LW11dGVkLWZvcmVncm91bmQgcmVsYXRpdmUgZmxleCB3LWZ1bGwgY3Vyc29yLWRlZmF1bHQgaXRlbXMtY2VudGVyIGdhcC0yIHJvdW5kZWQtc20gcHktMS41IHByLTggcGwtMiB0ZXh0LXNtIG91dGxpbmUtaGlkZGVuIHNlbGVjdC1ub25lIGRhdGEtZGlzYWJsZWQ6cG9pbnRlci1ldmVudHMtbm9uZSBkYXRhLWRpc2FibGVkOm9wYWNpdHktNTAgWyZfc3ZnXTpwb2ludGVyLWV2ZW50cy1ub25lIFsmX3N2Z106c2hyaW5rLTAgWyZfc3ZnOm5vdChbY2xhc3MqPSdzaXplLSddKV06c2l6ZS00ICo6W3NwYW5dOmxhc3Q6ZmxleCAqOltzcGFuXTpsYXN0Oml0ZW1zLWNlbnRlciAqOltzcGFuXTpsYXN0OmdhcC0yXCIsXG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHRcdGRhdGEtc2xvdD1cInNlbGVjdC1pdGVtXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQ+XG5cdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJhYnNvbHV0ZSByaWdodC0yIGZsZXggc2l6ZS0zLjUgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyXCI+XG5cdFx0XHRcdDxTZWxlY3RQcmltaXRpdmUuSXRlbUluZGljYXRvcj5cblx0XHRcdFx0XHQ8Q2hlY2tJY29uIGNsYXNzTmFtZT1cInNpemUtNFwiIC8+XG5cdFx0XHRcdDwvU2VsZWN0UHJpbWl0aXZlLkl0ZW1JbmRpY2F0b3I+XG5cdFx0XHQ8L3NwYW4+XG5cdFx0XHQ8U2VsZWN0UHJpbWl0aXZlLkl0ZW1UZXh0PntjaGlsZHJlbn08L1NlbGVjdFByaW1pdGl2ZS5JdGVtVGV4dD5cblx0XHQ8L1NlbGVjdFByaW1pdGl2ZS5JdGVtPlxuXHQpXG59XG5cbmZ1bmN0aW9uIFNlbGVjdFNlcGFyYXRvcih7XG5cdGNsYXNzTmFtZSxcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTZWxlY3RQcmltaXRpdmUuU2VwYXJhdG9yPikge1xuXHRyZXR1cm4gKFxuXHRcdDxTZWxlY3RQcmltaXRpdmUuU2VwYXJhdG9yXG5cdFx0XHRjbGFzc05hbWU9e2NuKCdiZy1ib3JkZXIgcG9pbnRlci1ldmVudHMtbm9uZSAtbXgtMSBteS0xIGgtcHgnLCBjbGFzc05hbWUpfVxuXHRcdFx0ZGF0YS1zbG90PVwic2VsZWN0LXNlcGFyYXRvclwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0Lz5cblx0KVxufVxuXG5mdW5jdGlvbiBTZWxlY3RTY3JvbGxVcEJ1dHRvbih7XG5cdGNsYXNzTmFtZSxcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTZWxlY3RQcmltaXRpdmUuU2Nyb2xsVXBCdXR0b24+KSB7XG5cdHJldHVybiAoXG5cdFx0PFNlbGVjdFByaW1pdGl2ZS5TY3JvbGxVcEJ1dHRvblxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0J2ZsZXggY3Vyc29yLWRlZmF1bHQgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHB5LTEnLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJzZWxlY3Qtc2Nyb2xsLXVwLWJ1dHRvblwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0PlxuXHRcdFx0PENoZXZyb25VcEljb24gY2xhc3NOYW1lPVwic2l6ZS00XCIgLz5cblx0XHQ8L1NlbGVjdFByaW1pdGl2ZS5TY3JvbGxVcEJ1dHRvbj5cblx0KVxufVxuXG5mdW5jdGlvbiBTZWxlY3RTY3JvbGxEb3duQnV0dG9uKHtcblx0Y2xhc3NOYW1lLFxuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNlbGVjdFByaW1pdGl2ZS5TY3JvbGxEb3duQnV0dG9uPikge1xuXHRyZXR1cm4gKFxuXHRcdDxTZWxlY3RQcmltaXRpdmUuU2Nyb2xsRG93bkJ1dHRvblxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0J2ZsZXggY3Vyc29yLWRlZmF1bHQgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHB5LTEnLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJzZWxlY3Qtc2Nyb2xsLWRvd24tYnV0dG9uXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQ+XG5cdFx0XHQ8Q2hldnJvbkRvd25JY29uIGNsYXNzTmFtZT1cInNpemUtNFwiIC8+XG5cdFx0PC9TZWxlY3RQcmltaXRpdmUuU2Nyb2xsRG93bkJ1dHRvbj5cblx0KVxufVxuXG5leHBvcnQge1xuXHRTZWxlY3QsXG5cdFNlbGVjdENvbnRlbnQsXG5cdFNlbGVjdEdyb3VwLFxuXHRTZWxlY3RJdGVtLFxuXHRTZWxlY3RMYWJlbCxcblx0U2VsZWN0U2Nyb2xsRG93bkJ1dHRvbixcblx0U2VsZWN0U2Nyb2xsVXBCdXR0b24sXG5cdFNlbGVjdFNlcGFyYXRvcixcblx0U2VsZWN0VHJpZ2dlcixcblx0U2VsZWN0VmFsdWUsXG59XG4iLAogICAgImltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBSZWN1cnJlbmNlRWRpdFNjb3BlIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL3R5cGVzJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuXG5pbnRlcmZhY2UgRGlhbG9nU3RhdGUge1xuXHRpc09wZW46IGJvb2xlYW5cblx0b3BlcmF0aW9uVHlwZTogJ2VkaXQnIHwgJ2RlbGV0ZSdcblx0ZXZlbnQ6IENhbGVuZGFyRXZlbnQgfCBudWxsXG5cdHVwZGF0ZXM/OiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+XG5cdG9uQ29uZmlybT86IChzY29wZTogUmVjdXJyZW5jZUVkaXRTY29wZSkgPT4gdm9pZFxufVxuXG5jb25zdCBDTE9TRURfU1RBVEU6IERpYWxvZ1N0YXRlID0ge1xuXHRpc09wZW46IGZhbHNlLFxuXHRvcGVyYXRpb25UeXBlOiAnZWRpdCcsXG5cdGV2ZW50OiBudWxsLFxufVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlUmVjdXJyaW5nRXZlbnRBY3Rpb25zKG9uQ29tcGxldGU/OiAoKSA9PiB2b2lkKSB7XG5cdGNvbnN0IHsgdXBkYXRlUmVjdXJyaW5nRXZlbnQsIGRlbGV0ZVJlY3VycmluZ0V2ZW50IH0gPVxuXHRcdHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KChjb250ZXh0KSA9PiAoe1xuXHRcdFx0dXBkYXRlUmVjdXJyaW5nRXZlbnQ6IGNvbnRleHQudXBkYXRlUmVjdXJyaW5nRXZlbnQsXG5cdFx0XHRkZWxldGVSZWN1cnJpbmdFdmVudDogY29udGV4dC5kZWxldGVSZWN1cnJpbmdFdmVudCxcblx0XHR9KSlcblxuXHRjb25zdCBbZGlhbG9nU3RhdGUsIHNldERpYWxvZ1N0YXRlXSA9IHVzZVN0YXRlPERpYWxvZ1N0YXRlPihDTE9TRURfU1RBVEUpXG5cblx0Y29uc3Qgb3BlbkVkaXREaWFsb2cgPSB1c2VDYWxsYmFjayhcblx0XHQoZXZlbnQ6IENhbGVuZGFyRXZlbnQsIHVwZGF0ZXM6IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD4pID0+IHtcblx0XHRcdHNldERpYWxvZ1N0YXRlKHtcblx0XHRcdFx0aXNPcGVuOiB0cnVlLFxuXHRcdFx0XHRvcGVyYXRpb25UeXBlOiAnZWRpdCcsXG5cdFx0XHRcdGV2ZW50LFxuXHRcdFx0XHR1cGRhdGVzLFxuXHRcdFx0XHRvbkNvbmZpcm06IChzY29wZTogUmVjdXJyZW5jZUVkaXRTY29wZSkgPT4ge1xuXHRcdFx0XHRcdHVwZGF0ZVJlY3VycmluZ0V2ZW50KGV2ZW50LCB1cGRhdGVzLCB7XG5cdFx0XHRcdFx0XHRzY29wZSxcblx0XHRcdFx0XHRcdGV2ZW50RGF0ZTogZXZlbnQuc3RhcnQsXG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0fSxcblx0XHRcdH0pXG5cdFx0fSxcblx0XHRbdXBkYXRlUmVjdXJyaW5nRXZlbnRdXG5cdClcblxuXHRjb25zdCBvcGVuRGVsZXRlRGlhbG9nID0gdXNlQ2FsbGJhY2soXG5cdFx0KGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB7XG5cdFx0XHRzZXREaWFsb2dTdGF0ZSh7XG5cdFx0XHRcdGlzT3BlbjogdHJ1ZSxcblx0XHRcdFx0b3BlcmF0aW9uVHlwZTogJ2RlbGV0ZScsXG5cdFx0XHRcdGV2ZW50LFxuXHRcdFx0XHRvbkNvbmZpcm06IChzY29wZTogUmVjdXJyZW5jZUVkaXRTY29wZSkgPT4ge1xuXHRcdFx0XHRcdGRlbGV0ZVJlY3VycmluZ0V2ZW50KGV2ZW50LCB7XG5cdFx0XHRcdFx0XHRzY29wZSxcblx0XHRcdFx0XHRcdGV2ZW50RGF0ZTogZXZlbnQuc3RhcnQsXG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0fSxcblx0XHRcdH0pXG5cdFx0fSxcblx0XHRbZGVsZXRlUmVjdXJyaW5nRXZlbnRdXG5cdClcblxuXHRjb25zdCBjbG9zZURpYWxvZyA9IHVzZUNhbGxiYWNrKCgpID0+IHNldERpYWxvZ1N0YXRlKENMT1NFRF9TVEFURSksIFtdKVxuXG5cdGNvbnN0IGhhbmRsZUNvbmZpcm0gPSB1c2VDYWxsYmFjayhcblx0XHQoc2NvcGU6IFJlY3VycmVuY2VFZGl0U2NvcGUpID0+IHtcblx0XHRcdGlmIChkaWFsb2dTdGF0ZS5vbkNvbmZpcm0pIHtcblx0XHRcdFx0ZGlhbG9nU3RhdGUub25Db25maXJtKHNjb3BlKVxuXHRcdFx0fVxuXHRcdFx0Y2xvc2VEaWFsb2coKVxuXHRcdFx0Ly8gQ2FsbCBvbkNvbXBsZXRlIHRvIGNsb3NlIHRoZSBwYXJlbnQgZm9ybVxuXHRcdFx0b25Db21wbGV0ZT8uKClcblx0XHR9LFxuXHRcdFtkaWFsb2dTdGF0ZSwgY2xvc2VEaWFsb2csIG9uQ29tcGxldGVdXG5cdClcblxuXHRyZXR1cm4ge1xuXHRcdGRpYWxvZ1N0YXRlLFxuXHRcdG9wZW5FZGl0RGlhbG9nLFxuXHRcdG9wZW5EZWxldGVEaWFsb2csXG5cdFx0Y2xvc2VEaWFsb2csXG5cdFx0aGFuZGxlQ29uZmlybSxcblx0fVxufVxuIiwKICAgICJpbXBvcnQgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IEJ1c2luZXNzSG91cnMgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5cbi8qKlxuICogUmV0dXJucyB0aGUgcmVzb3VyY2Utc3BlY2lmaWMgYnVzaW5lc3MgaG91cnMgd2hlbiBhdmFpbGFibGUsIG90aGVyd2lzZVxuICogZmFsbHMgYmFjayB0byB0aGUgY2FsZW5kYXItd2lkZSBgYnVzaW5lc3NIb3Vyc2AuIFNoYXJlZCBieSBjb21wb25lbnRzXG4gKiB0aGF0IG5lZWQgcGVyLXJlc291cmNlIHdvcmtpbmctaG91cnMgc2VtYW50aWNzIChncmlkIGNlbGxzLCBldmVudCBmb3JtKS5cbiAqL1xuZXhwb3J0IGNvbnN0IHVzZUVmZmVjdGl2ZUJ1c2luZXNzSG91cnMgPSAoXG5cdHJlc291cmNlSWQ6IHN0cmluZyB8IG51bWJlciB8IHVuZGVmaW5lZFxuKTogQnVzaW5lc3NIb3VycyB8IEJ1c2luZXNzSG91cnNbXSB8IHVuZGVmaW5lZCA9PiB7XG5cdGNvbnN0IHsgYnVzaW5lc3NIb3VycywgZ2V0UmVzb3VyY2VCeUlkIH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgoY3R4KSA9PiAoe1xuXHRcdGJ1c2luZXNzSG91cnM6IGN0eC5idXNpbmVzc0hvdXJzLFxuXHRcdGdldFJlc291cmNlQnlJZDogY3R4LmdldFJlc291cmNlQnlJZCxcblx0fSkpXG5cblx0cmV0dXJuIHVzZU1lbW8oKCkgPT4ge1xuXHRcdGlmIChyZXNvdXJjZUlkICE9IG51bGwgJiYgZ2V0UmVzb3VyY2VCeUlkKSB7XG5cdFx0XHRjb25zdCByZXNvdXJjZSA9IGdldFJlc291cmNlQnlJZChyZXNvdXJjZUlkKVxuXHRcdFx0aWYgKHJlc291cmNlPy5idXNpbmVzc0hvdXJzKSB7XG5cdFx0XHRcdHJldHVybiByZXNvdXJjZS5idXNpbmVzc0hvdXJzXG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBidXNpbmVzc0hvdXJzXG5cdH0sIFtyZXNvdXJjZUlkLCBnZXRSZXNvdXJjZUJ5SWQsIGJ1c2luZXNzSG91cnNdKVxufVxuIiwKICAgICJpbXBvcnQge1xuXHREaWFsb2csXG5cdERpYWxvZ0NvbnRlbnQsXG5cdERpYWxvZ0Rlc2NyaXB0aW9uLFxuXHREaWFsb2dIZWFkZXIsXG5cdERpYWxvZ1RpdGxlLFxufSBmcm9tICdAL2NvbXBvbmVudHMvdWkvZGlhbG9nJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnLi4vdHlwZXMnXG5pbXBvcnQgeyBFdmVudEZvcm0gfSBmcm9tICcuL2V2ZW50LWZvcm0nXG5cbmV4cG9ydCBjb25zdCBFdmVudEZvcm1EaWFsb2cgPSAoKSA9PiB7XG5cdGNvbnN0IHtcblx0XHR0LFxuXHRcdHNlbGVjdGVkRXZlbnQsXG5cdFx0aXNFdmVudEZvcm1PcGVuLFxuXHRcdGNsb3NlRXZlbnRGb3JtLFxuXHRcdGFkZEV2ZW50LFxuXHRcdHVwZGF0ZUV2ZW50LFxuXHRcdGRlbGV0ZUV2ZW50LFxuXHRcdHJlbmRlckV2ZW50Rm9ybSxcblx0fSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KChjb250ZXh0KSA9PiAoe1xuXHRcdHQ6IGNvbnRleHQudCxcblx0XHRzZWxlY3RlZEV2ZW50OiBjb250ZXh0LnNlbGVjdGVkRXZlbnQsXG5cdFx0aXNFdmVudEZvcm1PcGVuOiBjb250ZXh0LmlzRXZlbnRGb3JtT3Blbixcblx0XHRjbG9zZUV2ZW50Rm9ybTogY29udGV4dC5jbG9zZUV2ZW50Rm9ybSxcblx0XHRhZGRFdmVudDogY29udGV4dC5hZGRFdmVudCxcblx0XHR1cGRhdGVFdmVudDogY29udGV4dC51cGRhdGVFdmVudCxcblx0XHRkZWxldGVFdmVudDogY29udGV4dC5kZWxldGVFdmVudCxcblx0XHRyZW5kZXJFdmVudEZvcm06IGNvbnRleHQucmVuZGVyRXZlbnRGb3JtLFxuXHR9KSlcblxuXHRjb25zdCBoYW5kbGVPblVwZGF0ZSA9IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4ge1xuXHRcdHVwZGF0ZUV2ZW50KGV2ZW50LmlkLCBldmVudClcblx0fVxuXG5cdGNvbnN0IGhhbmRsZU9uRGVsZXRlID0gKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB7XG5cdFx0ZGVsZXRlRXZlbnQoZXZlbnQuaWQpXG5cdH1cblxuXHRjb25zdCBldmVudEZvcm1Qcm9wcyA9IHtcblx0XHRvcGVuOiBpc0V2ZW50Rm9ybU9wZW4sXG5cdFx0b25DbG9zZTogY2xvc2VFdmVudEZvcm0sXG5cdFx0c2VsZWN0ZWRFdmVudCxcblx0XHRvbkFkZDogYWRkRXZlbnQsXG5cdFx0b25VcGRhdGU6IGhhbmRsZU9uVXBkYXRlLFxuXHRcdG9uRGVsZXRlOiBoYW5kbGVPbkRlbGV0ZSxcblx0fVxuXG5cdGlmIChyZW5kZXJFdmVudEZvcm0pIHtcblx0XHRyZXR1cm4gcmVuZGVyRXZlbnRGb3JtKGV2ZW50Rm9ybVByb3BzKVxuXHR9XG5cblx0cmV0dXJuIChcblx0XHQ8RGlhbG9nIG9uT3BlbkNoYW5nZT17Y2xvc2VFdmVudEZvcm19IG9wZW49e2lzRXZlbnRGb3JtT3Blbn0+XG5cdFx0XHQ8RGlhbG9nQ29udGVudCBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIGgtWzkwdmhdIHctWzkwdnddIG1heC13LVs1MDBweF0gcC00IHNtOnAtNiBvdmVyZmxvdy1oaWRkZW4gZ2FwLTBcIj5cblx0XHRcdFx0PERpYWxvZ0hlYWRlciBjbGFzc05hbWU9XCJtYi0yIHNtOm1iLTQgc2hyaW5rLTBcIj5cblx0XHRcdFx0XHQ8RGlhbG9nVGl0bGUgY2xhc3NOYW1lPVwidGV4dC1iYXNlIHNtOnRleHQtbGdcIj5cblx0XHRcdFx0XHRcdHtzZWxlY3RlZEV2ZW50Py5pZCA/IHQoJ2VkaXRFdmVudCcpIDogdCgnY3JlYXRlRXZlbnQnKX1cblx0XHRcdFx0XHQ8L0RpYWxvZ1RpdGxlPlxuXHRcdFx0XHRcdDxEaWFsb2dEZXNjcmlwdGlvbiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHNtOnRleHQtc21cIj5cblx0XHRcdFx0XHRcdHtzZWxlY3RlZEV2ZW50Py5pZCA/IHQoJ2VkaXRFdmVudERldGFpbHMnKSA6IHQoJ2FkZE5ld0V2ZW50Jyl9XG5cdFx0XHRcdFx0PC9EaWFsb2dEZXNjcmlwdGlvbj5cblx0XHRcdFx0PC9EaWFsb2dIZWFkZXI+XG5cblx0XHRcdFx0PEV2ZW50Rm9ybSB7Li4uZXZlbnRGb3JtUHJvcHN9IC8+XG5cdFx0XHQ8L0RpYWxvZ0NvbnRlbnQ+XG5cdFx0PC9EaWFsb2c+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHsgQ2FsZW5kYXIgYXMgQ2FsZW5kYXJJY29uLCBEb3dubG9hZCwgTWVudSwgUGx1cyB9IGZyb20gJ2x1Y2lkZS1yZWFjdCdcbmltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9idXR0b24nXG5pbXBvcnQge1xuXHRQb3BvdmVyLFxuXHRQb3BvdmVyQ29udGVudCxcblx0UG9wb3ZlclRyaWdnZXIsXG59IGZyb20gJ0AvY29tcG9uZW50cy91aS9wb3BvdmVyJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IGRvd25sb2FkSUNhbGVuZGFyIH0gZnJvbSAnQC9saWIvdXRpbHMvZXhwb3J0LWljYWwnXG5pbXBvcnQgVGl0bGVDb250ZW50IGZyb20gJy4vdGl0bGUtY29udGVudCdcbmltcG9ydCBWaWV3Q29udHJvbHMgZnJvbSAnLi92aWV3LWNvbnRyb2xzJ1xuXG5pbnRlcmZhY2UgSGVhZGVyUHJvcHMge1xuXHRjbGFzc05hbWU/OiBzdHJpbmdcbn1cblxuY29uc3QgSGVhZGVyOiBSZWFjdC5GQzxIZWFkZXJQcm9wcz4gPSAoeyBjbGFzc05hbWUgPSAnJyB9KSA9PiB7XG5cdGNvbnN0IHtcblx0XHR2aWV3LFxuXHRcdHNldFZpZXcsXG5cdFx0bmV4dFBlcmlvZCxcblx0XHRwcmV2UGVyaW9kLFxuXHRcdHRvZGF5LFxuXHRcdG9wZW5FdmVudEZvcm0sXG5cdFx0aGVhZGVyQ29tcG9uZW50LFxuXHRcdGhlYWRlckNsYXNzTmFtZSxcblx0XHRyYXdFdmVudHMsXG5cdFx0dCxcblx0XHRoaWRlRXhwb3J0QnV0dG9uLFxuXHR9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKGN0eCkgPT4gKHtcblx0XHR2aWV3OiBjdHgudmlldyxcblx0XHRzZXRWaWV3OiBjdHguc2V0Vmlldyxcblx0XHRuZXh0UGVyaW9kOiBjdHgubmV4dFBlcmlvZCxcblx0XHRwcmV2UGVyaW9kOiBjdHgucHJldlBlcmlvZCxcblx0XHR0b2RheTogY3R4LnRvZGF5LFxuXHRcdG9wZW5FdmVudEZvcm06IGN0eC5vcGVuRXZlbnRGb3JtLFxuXHRcdGhlYWRlckNvbXBvbmVudDogY3R4LmhlYWRlckNvbXBvbmVudCxcblx0XHRoZWFkZXJDbGFzc05hbWU6IGN0eC5oZWFkZXJDbGFzc05hbWUsXG5cdFx0cmF3RXZlbnRzOiBjdHgucmF3RXZlbnRzLFxuXHRcdHQ6IGN0eC50LFxuXHRcdGhpZGVFeHBvcnRCdXR0b246IGN0eC5oaWRlRXhwb3J0QnV0dG9uLFxuXHR9KSlcblxuXHRjb25zdCBbbW9iaWxlTWVudU9wZW4sIHNldE1vYmlsZU1lbnVPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKVxuXG5cdGNvbnN0IGNsb3NlTW9iaWxlTWVudSA9ICgpID0+IHNldE1vYmlsZU1lbnVPcGVuKGZhbHNlKVxuXG5cdC8vIFdyYXAgYW55IGhhbmRsZXIgc28gaXQgYWxzbyBjbG9zZXMgdGhlIG1vYmlsZSBtZW51IGFmdGVyIGZpcmluZy5cblx0Y29uc3Qgd2l0aENsb3NlID1cblx0XHQ8QXJncyBleHRlbmRzIHVua25vd25bXT4oZm46ICguLi5hcmdzOiBBcmdzKSA9PiB2b2lkKSA9PlxuXHRcdCguLi5hcmdzOiBBcmdzKSA9PiB7XG5cdFx0XHRmbiguLi5hcmdzKVxuXHRcdFx0Y2xvc2VNb2JpbGVNZW51KClcblx0XHR9XG5cblx0Y29uc3QgaGFuZGxlRXhwb3J0ID0gKCkgPT4ge1xuXHRcdGNvbnN0IGZpbGVuYW1lID0gYGlsYW15LWNhbGVuZGFyLSR7bmV3IERhdGUoKS50b0lTT1N0cmluZygpLnNwbGl0KCdUJylbMF19Lmljc2Bcblx0XHRkb3dubG9hZElDYWxlbmRhcihyYXdFdmVudHMsIGZpbGVuYW1lLCAnaWxhbXkgQ2FsZW5kYXInKVxuXHRcdGNsb3NlTW9iaWxlTWVudSgpXG5cdH1cblxuXHRjb25zdCBOZXdFdmVudEJ1dHRvbiA9ICgpID0+IChcblx0XHQ8QnV0dG9uXG5cdFx0XHRjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMVwiXG5cdFx0XHRvbkNsaWNrPXsoKSA9PiBvcGVuRXZlbnRGb3JtKCl9XG5cdFx0XHRzaXplPVwic21cIlxuXHRcdFx0dmFyaWFudD1cImRlZmF1bHRcIlxuXHRcdD5cblx0XHRcdDxQbHVzIGNsYXNzTmFtZT1cImgtNCB3LTRcIiAvPlxuXHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwiaGlkZGVuIEA0eGw6aW5saW5lXCI+e3QoJ25ldycpfTwvc3Bhbj5cblx0XHQ8L0J1dHRvbj5cblx0KVxuXG5cdGNvbnN0IEV4cG9ydEJ1dHRvbiA9ICh7IGZ1bGxXaWR0aCA9IGZhbHNlIH06IHsgZnVsbFdpZHRoPzogYm9vbGVhbiB9KSA9PiAoXG5cdFx0PEJ1dHRvblxuXHRcdFx0Y2xhc3NOYW1lPXtjbignZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEnLCBmdWxsV2lkdGggJiYgJ3ctZnVsbCBnYXAtMicpfVxuXHRcdFx0b25DbGljaz17aGFuZGxlRXhwb3J0fVxuXHRcdFx0c2l6ZT1cInNtXCJcblx0XHRcdHZhcmlhbnQ9XCJvdXRsaW5lXCJcblx0XHQ+XG5cdFx0XHQ8RG93bmxvYWQgY2xhc3NOYW1lPVwiaC00IHctNFwiIC8+XG5cdFx0XHR7ZnVsbFdpZHRoID8gKFxuXHRcdFx0XHRgJHt0KCdleHBvcnQnKX0gQ2FsZW5kYXIgKC5pY3MpYFxuXHRcdFx0KSA6IChcblx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwiaGlkZGVuIEA0eGwvYmFzZS1oZWFkZXI6aW5saW5lXCI+e3QoJ2V4cG9ydCcpfTwvc3Bhbj5cblx0XHRcdCl9XG5cdFx0PC9CdXR0b24+XG5cdClcblxuXHRpZiAoaGVhZGVyQ29tcG9uZW50KSB7XG5cdFx0cmV0dXJuIGhlYWRlckNvbXBvbmVudFxuXHR9XG5cblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9XCJAY29udGFpbmVyL2Jhc2UtaGVhZGVyIHctZnVsbFwiXG5cdFx0XHRkYXRhLXRlc3RpZD1cImNhbGVuZGFyLWhlYWRlclwiXG5cdFx0PlxuXHRcdFx0PGRpdlxuXHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdCdmbGV4IGp1c3RpZnktY2VudGVyIEAyeGwvYmFzZS1oZWFkZXI6anVzdGlmeS1iZXR3ZWVuIGZsZXgtd3JhcCBpdGVtcy1jZW50ZXIgZ2FwLTInLFxuXHRcdFx0XHRcdGNsYXNzTmFtZSxcblx0XHRcdFx0XHRoZWFkZXJDbGFzc05hbWVcblx0XHRcdFx0KX1cblx0XHRcdD5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtd3JhcCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTEgQDJ4bC9iYXNlLWhlYWRlcjpqdXN0aWZ5LXN0YXJ0XCI+XG5cdFx0XHRcdFx0PENhbGVuZGFySWNvbiBjbGFzc05hbWU9XCJoLTUgdy01XCIgLz5cblx0XHRcdFx0XHQ8VGl0bGVDb250ZW50IC8+XG5cdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LXdyYXAganVzdGlmeS1zdGFydCBAeGwvYmFzZS1oZWFkZXI6anVzdGlmeS1jZW50ZXIgZ2FwLTEgQDR4bC9iYXNlLWhlYWRlcjpqdXN0aWZ5LWVuZCBvdmVyZmxvdy14LWF1dG9cIj5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImhpZGRlbiBAbWQvYmFzZS1oZWFkZXI6ZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1zdGFydCBnYXAtMVwiPlxuXHRcdFx0XHRcdFx0PFZpZXdDb250cm9sc1xuXHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJqdXN0aWZ5LWVuZFwiXG5cdFx0XHRcdFx0XHRcdGN1cnJlbnRWaWV3PXt2aWV3fVxuXHRcdFx0XHRcdFx0XHRvbkNoYW5nZT17c2V0Vmlld31cblx0XHRcdFx0XHRcdFx0b25OZXh0PXtuZXh0UGVyaW9kfVxuXHRcdFx0XHRcdFx0XHRvblByZXZpb3VzPXtwcmV2UGVyaW9kfVxuXHRcdFx0XHRcdFx0XHRvblRvZGF5PXt0b2RheX1cblx0XHRcdFx0XHRcdFx0dmFyaWFudD1cImRlZmF1bHRcIlxuXHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdDxOZXdFdmVudEJ1dHRvbiAvPlxuXHRcdFx0XHRcdFx0eyFoaWRlRXhwb3J0QnV0dG9uICYmIDxFeHBvcnRCdXR0b24gLz59XG5cdFx0XHRcdFx0PC9kaXY+XG5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktZW5kIGdhcC0xIEBtZC9iYXNlLWhlYWRlcjpoaWRkZW5cIj5cblx0XHRcdFx0XHRcdDxOZXdFdmVudEJ1dHRvbiAvPlxuXHRcdFx0XHRcdFx0PFBvcG92ZXIgb25PcGVuQ2hhbmdlPXtzZXRNb2JpbGVNZW51T3Blbn0gb3Blbj17bW9iaWxlTWVudU9wZW59PlxuXHRcdFx0XHRcdFx0XHQ8UG9wb3ZlclRyaWdnZXIgYXNDaGlsZD5cblx0XHRcdFx0XHRcdFx0XHQ8QnV0dG9uIHNpemU9XCJzbVwiIHZhcmlhbnQ9XCJvdXRsaW5lXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8TWVudSBjbGFzc05hbWU9XCJoLTQgdy00XCIgLz5cblx0XHRcdFx0XHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdFx0XHRcdFx0PC9Qb3BvdmVyVHJpZ2dlcj5cblx0XHRcdFx0XHRcdFx0PFBvcG92ZXJDb250ZW50IGFsaWduPVwiZW5kXCIgY2xhc3NOYW1lPVwidy1bMjQwcHhdIHAtMlwiPlxuXHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwic3BhY2UteS0yXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8Vmlld0NvbnRyb2xzXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGN1cnJlbnRWaWV3PXt2aWV3fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvbkNoYW5nZT17d2l0aENsb3NlKHNldFZpZXcpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvbk5leHQ9e3dpdGhDbG9zZShuZXh0UGVyaW9kKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0b25QcmV2aW91cz17d2l0aENsb3NlKHByZXZQZXJpb2QpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvblRvZGF5PXt3aXRoQ2xvc2UodG9kYXkpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YXJpYW50PVwiZ3JpZFwiXG5cdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdFx0eyFoaWRlRXhwb3J0QnV0dG9uICYmIChcblx0XHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJwdC0yIGJvcmRlci10XCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PEV4cG9ydEJ1dHRvbiBmdWxsV2lkdGggLz5cblx0XHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHQ8L1BvcG92ZXJDb250ZW50PlxuXHRcdFx0XHRcdFx0PC9Qb3BvdmVyPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdDwvZGl2PlxuXHRcdDwvZGl2PlxuXHQpXG59XG5cbmV4cG9ydCBkZWZhdWx0IEhlYWRlclxuIiwKICAgICJpbXBvcnQgeyBSUnVsZSB9IGZyb20gJ3JydWxlJ1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IGRheWpzLCB7IHR5cGUgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcblxuY29uc3QgQ1JMRiA9ICdcXHJcXG4nXG5cbmNvbnN0IFVUQ19WVElNRVpPTkUgPSBbXG5cdCdCRUdJTjpWVElNRVpPTkUnLFxuXHQnVFpJRDpVVEMnLFxuXHQnQkVHSU46U1RBTkRBUkQnLFxuXHQnRFRTVEFSVDoxOTcwMDEwMVQwMDAwMDAnLFxuXHQnVFpOQU1FOlVUQycsXG5cdCdUWk9GRlNFVEZST006KzAwMDAnLFxuXHQnVFpPRkZTRVRUTzorMDAwMCcsXG5cdCdFTkQ6U1RBTkRBUkQnLFxuXHQnRU5EOlZUSU1FWk9ORScsXG5dLmpvaW4oQ1JMRilcblxuY29uc3QgZXNjYXBlVGV4dCA9ICh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuXHRyZXR1cm4gdGV4dFxuXHRcdC5yZXBsYWNlQWxsKCdcXFxcJywgJ1xcXFxcXFxcJylcblx0XHQucmVwbGFjZUFsbCgnOycsICdcXFxcOycpXG5cdFx0LnJlcGxhY2VBbGwoJywnLCAnXFxcXCwnKVxuXHRcdC5yZXBsYWNlQWxsKCdcXG4nLCAnXFxcXG4nKVxuXHRcdC5yZXBsYWNlQWxsKCdcXHInLCAnJylcbn1cblxuY29uc3QgZm9ybWF0RGF0ZSA9IChkYXRlOiBEYXlqcywgaXNBbGxEYXkgPSBmYWxzZSk6IHN0cmluZyA9PiB7XG5cdHJldHVybiBpc0FsbERheVxuXHRcdD8gZGF0ZS5mb3JtYXQoJ1lZWVlNTUREJylcblx0XHQ6IGRhdGUudXRjKCkuZm9ybWF0KCdZWVlZTU1ERFtUXUhIbW1zc1taXScpXG59XG5cbmNvbnN0IGdldFVJRCA9IChldmVudDogQ2FsZW5kYXJFdmVudCk6IHN0cmluZyA9PiB7XG5cdHJldHVybiBldmVudC51aWQgfHwgYCR7ZXZlbnQuaWR9QGlsYW15LmNhbGVuZGFyYFxufVxuXG5jb25zdCBmb3JtYXRSUnVsZSA9IChycnVsZU9wdGlvbnM6IHVua25vd24pOiBzdHJpbmcgPT4ge1xuXHR0cnkge1xuXHRcdGNvbnN0IHJydWxlU3RyaW5nID0gbmV3IFJSdWxlKFxuXHRcdFx0cnJ1bGVPcHRpb25zIGFzIENvbnN0cnVjdG9yUGFyYW1ldGVyczx0eXBlb2YgUlJ1bGU+WzBdXG5cdFx0KS50b1N0cmluZygpXG5cdFx0cmV0dXJuIChcblx0XHRcdHJydWxlU3RyaW5nLnNwbGl0KCdcXG4nKS5maW5kKChsaW5lKSA9PiBsaW5lLnN0YXJ0c1dpdGgoJ1JSVUxFOicpKSB8fCAnJ1xuXHRcdClcblx0fSBjYXRjaCB7XG5cdFx0cmV0dXJuICcnXG5cdH1cbn1cblxuY29uc3QgY29udmVydEV2ZW50VG9WRXZlbnQgPSAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpOiBzdHJpbmcgPT4ge1xuXHRjb25zdCB0aW1lc3RhbXAgPSBkYXlqcygpLnV0YygpLmZvcm1hdCgnWVlZWU1NRERbVF1ISG1tc3NbWl0nKVxuXHRjb25zdCBkYXRlUGFyYW0gPSBldmVudC5hbGxEYXkgPyAnO1ZBTFVFPURBVEUnIDogJydcblx0Y29uc3QgcnJ1bGUgPSBldmVudC5ycnVsZSA/IGZvcm1hdFJSdWxlKGV2ZW50LnJydWxlKSA6ICcnXG5cblx0Y29uc3QgZXhkYXRlcyA9IGV2ZW50LmV4ZGF0ZXM/Lmxlbmd0aFxuXHRcdD8gZXZlbnQuZXhkYXRlcy5tYXAoKGQpID0+IGZvcm1hdERhdGUoZGF5anMoZCksIGV2ZW50LmFsbERheSkpLmpvaW4oJywnKVxuXHRcdDogbnVsbFxuXG5cdGNvbnN0IHJlY3VycmVuY2VJZCA9IGV2ZW50LnJlY3VycmVuY2VJZFxuXHRcdD8gZm9ybWF0RGF0ZShkYXlqcyhldmVudC5yZWN1cnJlbmNlSWQpLCBldmVudC5hbGxEYXkpXG5cdFx0OiBudWxsXG5cblx0Y29uc3QgbGluZXMgPSBbXG5cdFx0J0JFR0lOOlZFVkVOVCcsXG5cdFx0YFVJRDoke2dldFVJRChldmVudCl9YCxcblx0XHRgRFRTVEFSVCR7ZGF0ZVBhcmFtfToke2Zvcm1hdERhdGUoZXZlbnQuc3RhcnQsIGV2ZW50LmFsbERheSl9YCxcblx0XHRgRFRFTkQke2RhdGVQYXJhbX06JHtmb3JtYXREYXRlKGV2ZW50LmVuZCwgZXZlbnQuYWxsRGF5KX1gLFxuXHRcdGBTVU1NQVJZOiR7ZXNjYXBlVGV4dChldmVudC50aXRsZSl9YCxcblx0XHRldmVudC5kZXNjcmlwdGlvbiAmJiBgREVTQ1JJUFRJT046JHtlc2NhcGVUZXh0KGV2ZW50LmRlc2NyaXB0aW9uKX1gLFxuXHRcdGV2ZW50LmxvY2F0aW9uICYmIGBMT0NBVElPTjoke2VzY2FwZVRleHQoZXZlbnQubG9jYXRpb24pfWAsXG5cdFx0cnJ1bGUsXG5cdFx0ZXhkYXRlcyAmJiBgRVhEQVRFOiR7ZXhkYXRlc31gLFxuXHRcdHJlY3VycmVuY2VJZCAmJiBgUkVDVVJSRU5DRS1JRDoke3JlY3VycmVuY2VJZH1gLFxuXHRcdGBEVFNUQU1QOiR7dGltZXN0YW1wfWAsXG5cdFx0YENSRUFURUQ6JHt0aW1lc3RhbXB9YCxcblx0XHRgTEFTVC1NT0RJRklFRDoke3RpbWVzdGFtcH1gLFxuXHRcdCdTVEFUVVM6Q09ORklSTUVEJyxcblx0XHQnU0VRVUVOQ0U6MCcsXG5cdFx0J1RSQU5TUDpPUEFRVUUnLFxuXHRcdCdFTkQ6VkVWRU5UJyxcblx0XVxuXG5cdHJldHVybiBsaW5lcy5maWx0ZXIoQm9vbGVhbikuam9pbihDUkxGKVxufVxuXG5jb25zdCBmaWx0ZXJFdmVudHMgPSAoZXZlbnRzOiBDYWxlbmRhckV2ZW50W10pOiBDYWxlbmRhckV2ZW50W10gPT4ge1xuXHRjb25zdCBzZWVuVUlEcyA9IG5ldyBTZXQ8c3RyaW5nPigpXG5cblx0cmV0dXJuIGV2ZW50cy5maWx0ZXIoKGV2ZW50KSA9PiB7XG5cdFx0Y29uc3QgdWlkID0gZ2V0VUlEKGV2ZW50KVxuXHRcdGNvbnN0IGlzQmFzZVJlY3VycmluZyA9IGV2ZW50LnJydWxlICYmICFldmVudC5yZWN1cnJlbmNlSWRcblx0XHRjb25zdCBpc01vZGlmaWVkSW5zdGFuY2UgPSBldmVudC5yZWN1cnJlbmNlSWQgJiYgIWV2ZW50LnJydWxlXG5cblx0XHRpZiAoaXNCYXNlUmVjdXJyaW5nKSB7XG5cdFx0XHRzZWVuVUlEcy5hZGQodWlkKVxuXHRcdFx0cmV0dXJuIHRydWVcblx0XHR9XG5cdFx0aWYgKGlzTW9kaWZpZWRJbnN0YW5jZSkge1xuXHRcdFx0cmV0dXJuIHRydWVcblx0XHR9XG5cdFx0cmV0dXJuICFldmVudC5ycnVsZSAmJiAhZXZlbnQucmVjdXJyZW5jZUlkICYmICFzZWVuVUlEcy5oYXModWlkKVxuXHR9KVxufVxuXG5leHBvcnQgY29uc3QgZXhwb3J0VG9JQ2FsZW5kYXIgPSAoXG5cdGV2ZW50czogQ2FsZW5kYXJFdmVudFtdLFxuXHRjYWxlbmRhck5hbWUgPSAnaWxhbXkgQ2FsZW5kYXInXG4pOiBzdHJpbmcgPT4ge1xuXHRjb25zdCBuYW1lID0gZXNjYXBlVGV4dChjYWxlbmRhck5hbWUpXG5cdGNvbnN0IHZldmVudFN0cmluZ3MgPSBmaWx0ZXJFdmVudHMoZXZlbnRzKS5tYXAoY29udmVydEV2ZW50VG9WRXZlbnQpXG5cblx0cmV0dXJuIFtcblx0XHQnQkVHSU46VkNBTEVOREFSJyxcblx0XHQnVkVSU0lPTjoyLjAnLFxuXHRcdCdQUk9ESUQ6LS8vaWxhbXkvL2lsYW15IENhbGVuZGFyLy9FTicsXG5cdFx0J0NBTFNDQUxFOkdSRUdPUklBTicsXG5cdFx0J01FVEhPRDpQVUJMSVNIJyxcblx0XHRgWC1XUi1DQUxOQU1FOiR7bmFtZX1gLFxuXHRcdGBYLVdSLUNBTERFU0M6RXhwb3J0ZWQgZnJvbSAke25hbWV9YCxcblx0XHRVVENfVlRJTUVaT05FLFxuXHRcdC4uLnZldmVudFN0cmluZ3MsXG5cdFx0J0VORDpWQ0FMRU5EQVInLFxuXHRdLmpvaW4oQ1JMRilcbn1cblxuZXhwb3J0IGNvbnN0IGRvd25sb2FkSUNhbGVuZGFyID0gKFxuXHRldmVudHM6IENhbGVuZGFyRXZlbnRbXSxcblx0ZmlsZW5hbWUgPSAnY2FsZW5kYXIuaWNzJyxcblx0Y2FsZW5kYXJOYW1lID0gJ2lsYW15IENhbGVuZGFyJ1xuKTogdm9pZCA9PiB7XG5cdGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbZXhwb3J0VG9JQ2FsZW5kYXIoZXZlbnRzLCBjYWxlbmRhck5hbWUpXSwge1xuXHRcdHR5cGU6ICd0ZXh0L2NhbGVuZGFyO2NoYXJzZXQ9dXRmLTgnLFxuXHR9KVxuXHRjb25zdCB1cmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpXG5cdGNvbnN0IG5vcm1hbGl6ZWRGaWxlbmFtZSA9IGZpbGVuYW1lLmVuZHNXaXRoKCcuaWNzJylcblx0XHQ/IGZpbGVuYW1lXG5cdFx0OiBgJHtmaWxlbmFtZX0uaWNzYFxuXG5cdGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJylcblx0bGluay5ocmVmID0gdXJsXG5cdGxpbmsuZG93bmxvYWQgPSBub3JtYWxpemVkRmlsZW5hbWVcblxuXHRkb2N1bWVudC5ib2R5LmFwcGVuZChsaW5rKVxuXHRsaW5rLmNsaWNrKClcblx0bGluay5yZW1vdmUoKVxuXHRVUkwucmV2b2tlT2JqZWN0VVJMKHVybClcbn1cbiIsCiAgICAiaW1wb3J0IHsgQ2hldnJvbkRvd24gfSBmcm9tICdsdWNpZGUtcmVhY3QnXG5pbXBvcnQgeyB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQW5pbWF0ZWRTZWN0aW9uIH0gZnJvbSAnQC9jb21wb25lbnRzL2FuaW1hdGlvbnMvYW5pbWF0ZWQtc2VjdGlvbidcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9idXR0b24nXG5pbXBvcnQge1xuXHRQb3BvdmVyLFxuXHRQb3BvdmVyQ29udGVudCxcblx0UG9wb3ZlclRyaWdnZXIsXG59IGZyb20gJ0AvY29tcG9uZW50cy91aS9wb3BvdmVyJ1xuaW1wb3J0IHsgdXNlRGF0ZVRpbWVGb3JtYXR0ZXJzIH0gZnJvbSAnQC9ob29rcy91c2UtZGF0ZS10aW1lLWZvcm1hdHRlcnMnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSB7IERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgZ2V0RGF5S2V5LCBnZXRXZWVrRGF5cywgaXNUb2RheSB9IGZyb20gJ0AvbGliL3V0aWxzL2RhdGUtdXRpbHMnXG5pbXBvcnQgeyBrZXlzIH0gZnJvbSAnQC9saWIvdXRpbHMva2V5cydcblxuY29uc3QgVGl0bGVDb250ZW50ID0gKCkgPT4ge1xuXHRjb25zdCB7IGN1cnJlbnREYXRlLCB2aWV3LCBzZWxlY3REYXRlLCB0LCBmaXJzdERheU9mV2VlayB9ID1cblx0XHR1c2VTbWFydENhbGVuZGFyQ29udGV4dCgoY3R4KSA9PiAoe1xuXHRcdFx0Y3VycmVudERhdGU6IGN0eC5jdXJyZW50RGF0ZSxcblx0XHRcdHZpZXc6IGN0eC52aWV3LFxuXHRcdFx0c2VsZWN0RGF0ZTogY3R4LnNlbGVjdERhdGUsXG5cdFx0XHR0OiBjdHgudCxcblx0XHRcdGZpcnN0RGF5T2ZXZWVrOiBjdHguZmlyc3REYXlPZldlZWssXG5cdFx0fSkpXG5cblx0Y29uc3QgeyBmb3JtYXREYXRlUmFuZ2UgfSA9IHVzZURhdGVUaW1lRm9ybWF0dGVycygpXG5cblx0Y29uc3QgW29wZW5Qb3BvdmVyLCBzZXRPcGVuUG9wb3Zlcl0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKVxuXG5cdGNvbnN0IG1vbnRocyA9IEFycmF5LmZyb20oeyBsZW5ndGg6IDEyIH0sIChfLCBpbmRleCkgPT5cblx0XHRjdXJyZW50RGF0ZS5tb250aChpbmRleCkuZm9ybWF0KCdNTU1NJylcblx0KVxuXG5cdGNvbnN0IGN1cnJlbnRZZWFyID0gY3VycmVudERhdGUueWVhcigpXG5cdGNvbnN0IHllYXJzID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogMTEgfSwgKF8sIGkpID0+IGN1cnJlbnRZZWFyIC0gNSArIGkpXG5cdGNvbnN0IHdlZWtEYXlzID0gZ2V0V2Vla0RheXMoY3VycmVudERhdGUsIGZpcnN0RGF5T2ZXZWVrKVxuXG5cdGNvbnN0IGhhbmRsZVNlbGVjdERhdGUgPSAoZGF0ZTogRGF5anMpID0+IHtcblx0XHRzZWxlY3REYXRlKGRhdGUpXG5cdFx0c2V0T3BlblBvcG92ZXIobnVsbClcblx0fVxuXG5cdGNvbnN0IHJlbmRlck1vbnRoQ29udGVudCA9ICgpID0+IChcblx0XHQ8PlxuXHRcdFx0e21vbnRocy5tYXAoKG1vbnRoLCBpbmRleCkgPT4gKFxuXHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdCdqdXN0aWZ5LXN0YXJ0IGZvbnQtbm9ybWFsJyxcblx0XHRcdFx0XHRcdGN1cnJlbnREYXRlLm1vbnRoKCkgPT09IGluZGV4ICYmICdiZy1wcmltYXJ5LzEwJ1xuXHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0a2V5PXtpbmRleH1cblx0XHRcdFx0XHRvbkNsaWNrPXsoKSA9PiBoYW5kbGVTZWxlY3REYXRlKGN1cnJlbnREYXRlLm1vbnRoKGluZGV4KSl9XG5cdFx0XHRcdFx0dmFyaWFudD1cImdob3N0XCJcblx0XHRcdFx0PlxuXHRcdFx0XHRcdHttb250aH1cblx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHQpKX1cblx0XHQ8Lz5cblx0KVxuXG5cdGNvbnN0IHJlbmRlclllYXJDb250ZW50ID0gKCkgPT4gKFxuXHRcdDw+XG5cdFx0XHR7eWVhcnMubWFwKCh5ZWFyKSA9PiAoXG5cdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0J2p1c3RpZnktc3RhcnQgZm9udC1ub3JtYWwnLFxuXHRcdFx0XHRcdFx0Y3VycmVudERhdGUueWVhcigpID09PSB5ZWFyICYmICdiZy1wcmltYXJ5LzEwJ1xuXHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0a2V5PXt5ZWFyfVxuXHRcdFx0XHRcdG9uQ2xpY2s9eygpID0+IGhhbmRsZVNlbGVjdERhdGUoY3VycmVudERhdGUueWVhcih5ZWFyKSl9XG5cdFx0XHRcdFx0dmFyaWFudD1cImdob3N0XCJcblx0XHRcdFx0PlxuXHRcdFx0XHRcdHt5ZWFyfVxuXHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdCkpfVxuXHRcdDwvPlxuXHQpXG5cblx0Y29uc3QgcmVuZGVyV2Vla0NvbnRlbnQgPSAoKSA9PiAoXG5cdFx0PD5cblx0XHRcdHtBcnJheS5mcm9tKHsgbGVuZ3RoOiA3IH0sIChfLCBpKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHdlZWtEYXRlID0gY3VycmVudERhdGUuc3VidHJhY3QoMywgJ3dlZWsnKS5hZGQoaSwgJ3dlZWsnKVxuXHRcdFx0XHRjb25zdCBkYXlzID0gZ2V0V2Vla0RheXMod2Vla0RhdGUsIGZpcnN0RGF5T2ZXZWVrKVxuXHRcdFx0XHRjb25zdCBzdGFydCA9IGRheXNbMF1cblx0XHRcdFx0Y29uc3QgZW5kID0gZGF5c1s2XVxuXHRcdFx0XHRjb25zdCBpc0N1cnJlbnRXZWVrID0gd2Vla0RhdGUuaXNTYW1lKGN1cnJlbnREYXRlLCAnd2VlaycpXG5cblx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0XHQnanVzdGlmeS1zdGFydCBmb250LW5vcm1hbCcsXG5cdFx0XHRcdFx0XHRcdGlzQ3VycmVudFdlZWsgJiYgJ2JnLXByaW1hcnkvMTAnXG5cdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0a2V5PXtnZXREYXlLZXkoc3RhcnQpfVxuXHRcdFx0XHRcdFx0b25DbGljaz17KCkgPT4gaGFuZGxlU2VsZWN0RGF0ZShzdGFydCl9XG5cdFx0XHRcdFx0XHR2YXJpYW50PVwiZ2hvc3RcIlxuXHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCB3LWZ1bGwgaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlblwiPlxuXHRcdFx0XHRcdFx0XHQ8c3Bhbj57Zm9ybWF0RGF0ZVJhbmdlKHN0YXJ0LCBlbmQpfTwvc3Bhbj5cblx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0XHQpXG5cdFx0XHR9KX1cblx0XHQ8Lz5cblx0KVxuXG5cdGNvbnN0IHJlbmRlckRheUNvbnRlbnQgPSAoKSA9PiB7XG5cdFx0Y29uc3QgZmlyc3REYXkgPSBjdXJyZW50RGF0ZS5zdGFydE9mKCdtb250aCcpXG5cdFx0Y29uc3QgZGF5c0luTW9udGggPSBjdXJyZW50RGF0ZS5kYXlzSW5Nb250aCgpXG5cblx0XHRyZXR1cm4gKFxuXHRcdFx0PD5cblx0XHRcdFx0e0FycmF5LmZyb20oeyBsZW5ndGg6IGRheXNJbk1vbnRoIH0sIChfLCBpKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgZGF5ID0gZmlyc3REYXkuZGF0ZShpICsgMSlcblx0XHRcdFx0XHRjb25zdCBpc0N1cnJlbnREYXkgPSBkYXkuaXNTYW1lKGN1cnJlbnREYXRlLCAnZGF5Jylcblx0XHRcdFx0XHRjb25zdCB0b2RheSA9IGlzVG9kYXkoZGF5KVxuXG5cdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdFx0XHQnanVzdGlmeS1zdGFydCBmb250LW5vcm1hbCcsXG5cdFx0XHRcdFx0XHRcdFx0aXNDdXJyZW50RGF5ICYmICdiZy1wcmltYXJ5LzEwJ1xuXHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRrZXk9e2dldERheUtleShkYXkpfVxuXHRcdFx0XHRcdFx0XHRvbkNsaWNrPXsoKSA9PiBoYW5kbGVTZWxlY3REYXRlKGRheSl9XG5cdFx0XHRcdFx0XHRcdHZhcmlhbnQ9XCJnaG9zdFwiXG5cdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCB3LWZ1bGwgaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlblwiPlxuXHRcdFx0XHRcdFx0XHRcdDxzcGFuPntkYXkuZm9ybWF0KCdsbCcpfTwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0XHR7dG9kYXkgJiYgKFxuXHRcdFx0XHRcdFx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwiYmctcHJpbWFyeSB0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCByb3VuZGVkLXNtIHB4LTEhIHRleHQteHNcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0e3QoJ3RvZGF5Jyl9XG5cdFx0XHRcdFx0XHRcdFx0XHQ8L3NwYW4+XG5cdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdFx0XHQpXG5cdFx0XHRcdH0pfVxuXHRcdFx0PC8+XG5cdFx0KVxuXHR9XG5cblx0Y29uc3QgcG9wb3ZlcnMgPSBbXG5cdFx0e1xuXHRcdFx0aWQ6ICdtb250aCcsXG5cdFx0XHRoaWRkZW46IHZpZXcgPT09ICd5ZWFyJyxcblx0XHRcdHRpdGxlOiBjdXJyZW50RGF0ZS5mb3JtYXQoJ01NTU0nKSxcblx0XHRcdHJlbmRlcjogcmVuZGVyTW9udGhDb250ZW50LFxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0aWQ6ICd5ZWFyJyxcblx0XHRcdGhpZGRlbjogZmFsc2UsXG5cdFx0XHR0aXRsZTogY3VycmVudERhdGUuZm9ybWF0KCdZWVlZJyksXG5cdFx0XHRyZW5kZXI6IHJlbmRlclllYXJDb250ZW50LFxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0aWQ6ICd3ZWVrJyxcblx0XHRcdGhpZGRlbjogdmlldyAhPT0gJ3dlZWsnLFxuXHRcdFx0dGl0bGU6IGZvcm1hdERhdGVSYW5nZSh3ZWVrRGF5c1swXSwgd2Vla0RheXNbNl0pLFxuXHRcdFx0cmVuZGVyOiByZW5kZXJXZWVrQ29udGVudCxcblx0XHR9LFxuXHRcdHtcblx0XHRcdGlkOiAnZGF5Jyxcblx0XHRcdGhpZGRlbjogdmlldyAhPT0gJ2RheScsXG5cdFx0XHR0aXRsZTogY3VycmVudERhdGUuZm9ybWF0KCdkZGRkLCBEJyksXG5cdFx0XHRyZW5kZXI6IHJlbmRlckRheUNvbnRlbnQsXG5cdFx0fSxcblx0XVxuXG5cdHJldHVybiBwb3BvdmVyc1xuXHRcdC5maWx0ZXIoKHApID0+ICFwLmhpZGRlbilcblx0XHQubWFwKChwb3BvdmVyKSA9PiAoXG5cdFx0XHQ8UG9wb3ZlclxuXHRcdFx0XHRrZXk9e3BvcG92ZXIuaWR9XG5cdFx0XHRcdG9uT3BlbkNoYW5nZT17KG9wZW4pID0+IHNldE9wZW5Qb3BvdmVyKG9wZW4gPyBwb3BvdmVyLmlkIDogbnVsbCl9XG5cdFx0XHRcdG9wZW49e29wZW5Qb3BvdmVyID09PSBwb3BvdmVyLmlkfVxuXHRcdFx0PlxuXHRcdFx0XHQ8UG9wb3ZlclRyaWdnZXIgYXNDaGlsZD5cblx0XHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMSBweC0xISBmb250LXNlbWlib2xkXCJcblx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPVwiY2FsZW5kYXItbW9udGgtYnV0dG9uXCJcblx0XHRcdFx0XHRcdHZhcmlhbnQ9XCJnaG9zdFwiXG5cdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0PEFuaW1hdGVkU2VjdGlvblxuXHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMSBweC0xISBmb250LXNlbWlib2xkXCJcblx0XHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9XCJjYWxlbmRhci1tb250aC1idXR0b25cIlxuXHRcdFx0XHRcdFx0XHR0cmFuc2l0aW9uS2V5PXtrZXlzLmxpc3RLZXkocG9wb3Zlci5pZCwgZ2V0RGF5S2V5KGN1cnJlbnREYXRlKSl9XG5cdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdHtwb3BvdmVyLnRpdGxlfVxuXHRcdFx0XHRcdFx0PC9BbmltYXRlZFNlY3Rpb24+XG5cdFx0XHRcdFx0XHQ8Q2hldnJvbkRvd24gY2xhc3NOYW1lPVwiaC00IHctNFwiIC8+XG5cdFx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHRcdDwvUG9wb3ZlclRyaWdnZXI+XG5cdFx0XHRcdDxQb3BvdmVyQ29udGVudCBjbGFzc05hbWU9XCJ3LTQwIHAtMFwiPlxuXHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBtYXgtaC02MCBmbGV4LWNvbCBvdmVyZmxvdy1hdXRvXCI+XG5cdFx0XHRcdFx0XHR7cG9wb3Zlci5yZW5kZXIoKX1cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PC9Qb3BvdmVyQ29udGVudD5cblx0XHRcdDwvUG9wb3Zlcj5cblx0XHQpKVxufVxuXG5leHBvcnQgZGVmYXVsdCBUaXRsZUNvbnRlbnRcbiIsCiAgICAiaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUgeyBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuXG5leHBvcnQgZnVuY3Rpb24gdXNlRGF0ZVRpbWVGb3JtYXR0ZXJzKCkge1xuXHRjb25zdCB7IGN1cnJlbnRMb2NhbGUsIHRpbWV6b25lIH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgoY3R4KSA9PiAoe1xuXHRcdGN1cnJlbnRMb2NhbGU6IGN0eC5jdXJyZW50TG9jYWxlLFxuXHRcdHRpbWV6b25lOiBjdHgudGltZXpvbmUsXG5cdH0pKVxuXG5cdGNvbnN0IGZvcm1hdERhdGVSYW5nZSA9IChzdGFydDogRGF5anMsIGVuZDogRGF5anMpID0+XG5cdFx0bmV3IEludGwuRGF0ZVRpbWVGb3JtYXQoY3VycmVudExvY2FsZSwge1xuXHRcdFx0dGltZVpvbmU6IHRpbWV6b25lLFxuXHRcdFx0bW9udGg6ICdzaG9ydCcsXG5cdFx0XHRkYXk6ICdudW1lcmljJyxcblx0XHR9KS5mb3JtYXRSYW5nZShzdGFydC50b0RhdGUoKSwgZW5kLnRvRGF0ZSgpKVxuXG5cdHJldHVybiB7IGZvcm1hdERhdGVSYW5nZSB9XG59XG4iLAogICAgImltcG9ydCB7IENoZXZyb25MZWZ0LCBDaGV2cm9uUmlnaHQgfSBmcm9tICdsdWNpZGUtcmVhY3QnXG5pbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9idXR0b24nXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG50eXBlIFZpZXdUeXBlID0gJ2RheScgfCAnd2VlaycgfCAnbW9udGgnIHwgJ3llYXInXG5jb25zdCBBVkFJTEFCTEVfVklFV1M6IFZpZXdUeXBlW10gPSBbJ2RheScsICd3ZWVrJywgJ21vbnRoJywgJ3llYXInXVxuXG5pbnRlcmZhY2UgVmlld0NvbnRyb2xzUHJvcHMge1xuXHRjdXJyZW50VmlldzogVmlld1R5cGVcblx0b25DaGFuZ2U6ICh2aWV3OiBWaWV3VHlwZSkgPT4gdm9pZFxuXHRvblRvZGF5PzogKCkgPT4gdm9pZFxuXHRvbk5leHQ/OiAoKSA9PiB2b2lkXG5cdG9uUHJldmlvdXM/OiAoKSA9PiB2b2lkXG5cdHZhcmlhbnQ/OiAnZGVmYXVsdCcgfCAnZ3JpZCdcblx0c2l6ZT86ICdzbScgfCAnZGVmYXVsdCdcblx0Y2xhc3NOYW1lPzogc3RyaW5nXG59XG5cbmNvbnN0IFZpZXdDb250cm9sczogUmVhY3QuRkM8Vmlld0NvbnRyb2xzUHJvcHM+ID0gKHtcblx0Y3VycmVudFZpZXcsXG5cdG9uQ2hhbmdlLFxuXHR2YXJpYW50ID0gJ2RlZmF1bHQnLFxuXHRzaXplID0gJ3NtJyxcblx0Y2xhc3NOYW1lLFxuXHRvblRvZGF5LFxuXHRvbk5leHQsXG5cdG9uUHJldmlvdXMsXG59KSA9PiB7XG5cdGNvbnN0IHsgdCwgcmVzb3VyY2VzIH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgoY29udGV4dCkgPT4gKHtcblx0XHR0OiBjb250ZXh0LnQsXG5cdFx0cmVzb3VyY2VzOiBjb250ZXh0LnJlc291cmNlcyxcblx0fSkpXG5cdGNvbnN0IGlzR3JpZCA9IHZhcmlhbnQgPT09ICdncmlkJ1xuXHRjb25zdCBpc1Jlc291cmNlQ2FsZW5kYXIgPSByZXNvdXJjZXMgJiYgcmVzb3VyY2VzLmxlbmd0aCA+IDBcblxuXHQvLyBFeHRyYWN0IGNvbW1vbiBidXR0b24gY2xhc3NOYW1lIGxvZ2ljIHRvIGEgZnVuY3Rpb25cblx0Y29uc3QgZ2V0QnV0dG9uQ2xhc3NOYW1lID0gKHZpZXdUeXBlOiBWaWV3VHlwZSkgPT4ge1xuXHRcdHJldHVybiBjbihcblx0XHRcdC8vIEJhc2Ugd2lkdGggZm9yIGdyaWQgbGF5b3V0XG5cdFx0XHRpc0dyaWQgPyAndy1mdWxsJyA6ICcnLFxuXHRcdFx0Ly8gQWN0aXZlIHZpZXcgc3R5bGluZ1xuXHRcdFx0Y3VycmVudFZpZXcgPT09IHZpZXdUeXBlICYmICdiZy1wcmltYXJ5LzgwJ1xuXHRcdClcblx0fVxuXG5cdGNvbnN0IGdldEJ0blZhcmlhbnQgPSAodmlld1R5cGU6IFZpZXdUeXBlKSA9PiB7XG5cdFx0cmV0dXJuIGN1cnJlbnRWaWV3ID09PSB2aWV3VHlwZSA/ICdkZWZhdWx0JyA6ICdvdXRsaW5lJ1xuXHR9XG5cblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRpc0dyaWQgPyAnZ3JpZCBncmlkLWNvbHMtMiBnYXAtMicgOiAnZmxleCBnYXAtMScsXG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHQ+XG5cdFx0XHQ8QnV0dG9uIG9uQ2xpY2s9e29uUHJldmlvdXN9IHNpemU9e3NpemV9IHZhcmlhbnQ9XCJvdXRsaW5lXCI+XG5cdFx0XHRcdDxDaGV2cm9uTGVmdCBjbGFzc05hbWU9XCJoLTQgdy00XCIgLz5cblx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0PEJ1dHRvbiBvbkNsaWNrPXtvbk5leHR9IHNpemU9e3NpemV9IHZhcmlhbnQ9XCJvdXRsaW5lXCI+XG5cdFx0XHRcdDxDaGV2cm9uUmlnaHQgY2xhc3NOYW1lPVwiaC00IHctNFwiIC8+XG5cdFx0XHQ8L0J1dHRvbj5cblxuXHRcdFx0e0FWQUlMQUJMRV9WSUVXUy5tYXAoKHR5cGU6IFZpZXdUeXBlKSA9PiB7XG5cdFx0XHRcdGlmIChpc1Jlc291cmNlQ2FsZW5kYXIgJiYgdHlwZSA9PT0gJ3llYXInKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG51bGxcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtnZXRCdXR0b25DbGFzc05hbWUodHlwZSl9XG5cdFx0XHRcdFx0XHRrZXk9e3R5cGV9XG5cdFx0XHRcdFx0XHRvbkNsaWNrPXsoKSA9PiBvbkNoYW5nZSh0eXBlKX1cblx0XHRcdFx0XHRcdHNpemU9e3NpemV9XG5cdFx0XHRcdFx0XHR2YXJpYW50PXtnZXRCdG5WYXJpYW50KHR5cGUpfVxuXHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdHt0KHR5cGUpfVxuXHRcdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0XHQpXG5cdFx0XHR9KX1cblxuXHRcdFx0PEJ1dHRvbiBvbkNsaWNrPXtvblRvZGF5fSBzaXplPXtzaXplfSB2YXJpYW50PVwib3V0bGluZVwiPlxuXHRcdFx0XHR7dCgndG9kYXknKX1cblx0XHRcdDwvQnV0dG9uPlxuXHRcdDwvZGl2PlxuXHQpXG59XG5cbmV4cG9ydCBkZWZhdWx0IFZpZXdDb250cm9sc1xuIiwKICAgICJpbXBvcnQgeyBtZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBIb3Jpem9udGFsR3JpZFJvdyB9IGZyb20gJ0AvY29tcG9uZW50cy9ob3Jpem9udGFsLWdyaWQvaG9yaXpvbnRhbC1ncmlkLXJvdydcbmltcG9ydCB0eXBlIHsgUmVzb3VyY2UgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IGtleXMgfSBmcm9tICdAL2xpYi91dGlscy9rZXlzJ1xuaW1wb3J0IHsgQWxsRGF5Q2VsbCB9IGZyb20gJy4vYWxsLWRheS1jZWxsJ1xuXG5pbnRlcmZhY2UgQWxsRGF5Um93UHJvcHMge1xuXHRkYXlzOiBEYXlqc1tdXG5cdGNsYXNzZXM/OiB7IHJvdz86IHN0cmluZzsgY2VsbD86IHN0cmluZzsgc3BhY2VyPzogc3RyaW5nIH1cblx0cmVzb3VyY2U/OiBSZXNvdXJjZVxuXHRzaG93U3BhY2VyPzogYm9vbGVhblxufVxuXG5jb25zdCBOb01lbW9BbGxEYXlSb3c6IFJlYWN0LkZDPEFsbERheVJvd1Byb3BzPiA9ICh7XG5cdGRheXMsXG5cdGNsYXNzZXMsXG5cdHJlc291cmNlLFxuXHRzaG93U3BhY2VyID0gdHJ1ZSxcbn0pID0+IHtcblx0Y29uc3QgY29sdW1ucyA9IGRheXMubWFwKChkYXksIGluZGV4KSA9PiAoe1xuXHRcdGlkOiBrZXlzLmNvbC5hbGxEYXkoZGF5LCBpbmRleCksXG5cdFx0ZGF5LFxuXHRcdGdyaWRUeXBlOiAnZGF5JyBhcyBjb25zdCxcblx0XHRjbGFzc05hbWU6IGNuKCdoLWZ1bGwgbWluLWgtMTIgYm9yZGVyLXIgbGFzdDpib3JkZXItci0wJywgY2xhc3Nlcz8uY2VsbCksXG5cdH0pKVxuXG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbignZmxleCB3LWZ1bGwgYmctYmFja2dyb3VuZCcsIGNsYXNzZXM/LnJvdyl9XG5cdFx0XHRkYXRhLXRlc3RpZD1cImFsbC1kYXktcm93XCJcblx0XHQ+XG5cdFx0XHR7LyogVGltZSBjb2wgc3BhY2VyICovfVxuXHRcdFx0e3Nob3dTcGFjZXIgJiYgPEFsbERheUNlbGwgY2xhc3NOYW1lPXtjbGFzc2VzPy5zcGFjZXJ9IC8+fVxuXG5cdFx0XHR7LyogRGF5IGFsbCBkYXkgY2VsbCAqL31cblx0XHRcdDxIb3Jpem9udGFsR3JpZFJvd1xuXHRcdFx0XHRhbGxEYXlcblx0XHRcdFx0Y2xhc3NOYW1lPVwiZmxleC0xIG1pbi1oLWZpdCBib3JkZXItYlwiXG5cdFx0XHRcdGNvbHVtbnM9e2NvbHVtbnN9XG5cdFx0XHRcdGRheU51bWJlckhlaWdodD17MH1cblx0XHRcdFx0Z3JpZFR5cGU9XCJkYXlcIlxuXHRcdFx0XHRpZD17a2V5cy5hbGxEYXlSb3cocmVzb3VyY2U/LmlkKX1cblx0XHRcdFx0aXNMYXN0Um93XG5cdFx0XHRcdHJlc291cmNlPXtyZXNvdXJjZX1cblx0XHRcdFx0dmFyaWFudD1cInJlZ3VsYXJcIlxuXHRcdFx0Lz5cblx0XHQ8L2Rpdj5cblx0KVxufVxuXG5leHBvcnQgY29uc3QgQWxsRGF5Um93ID0gbWVtbyhOb01lbW9BbGxEYXlSb3cpXG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgbWVtbywgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlUHJvY2Vzc2VkV2Vla0V2ZW50cyB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvaG9va3MvdXNlUHJvY2Vzc2VkV2Vla0V2ZW50cydcbmltcG9ydCB0eXBlIHsgUmVzb3VyY2UgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL3R5cGVzJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUgeyBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IGdldERheUtleSB9IGZyb20gJ0AvbGliL3V0aWxzL2RhdGUtdXRpbHMnXG5pbXBvcnQgeyBrZXlzIH0gZnJvbSAnQC9saWIvdXRpbHMva2V5cydcbmltcG9ydCB7IEdyaWRDZWxsIH0gZnJvbSAnLi4vZ3JpZC1jZWxsJ1xuaW1wb3J0IHsgUmVzb3VyY2VDZWxsIH0gZnJvbSAnLi4vcmVzb3VyY2UtY2VsbCdcbmltcG9ydCB7IEhvcml6b250YWxHcmlkRXZlbnRzTGF5ZXIgfSBmcm9tICcuL2hvcml6b250YWwtZ3JpZC1ldmVudHMtbGF5ZXInXG5cbmludGVyZmFjZSBIb3Jpem9udGFsR3JpZENvbHVtbiB7XG5cdGlkOiBzdHJpbmdcblx0ZGF5PzogRGF5anNcblx0ZGF5cz86IERheWpzW11cblx0Z3JpZFR5cGU6ICdkYXknIHwgJ2hvdXInXG5cdGNsYXNzTmFtZT86IHN0cmluZ1xuXHRyZW5kZXJDZWxsPzogKHJvdzogSG9yaXpvbnRhbEdyaWRSb3dQcm9wcykgPT4gUmVhY3QuUmVhY3ROb2RlXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSG9yaXpvbnRhbEdyaWRSb3dQcm9wcyB7XG5cdGlkOiBzdHJpbmcgfCBudW1iZXJcblx0cmVzb3VyY2U/OiBSZXNvdXJjZVxuXHRncmlkVHlwZT86ICdkYXknIHwgJ2hvdXInXG5cdHZhcmlhbnQ/OiAncmVndWxhcicgfCAncmVzb3VyY2UnXG5cdGRheU51bWJlckhlaWdodD86IG51bWJlclxuXHRjbGFzc05hbWU/OiBzdHJpbmdcblx0Y29sdW1ucz86IEhvcml6b250YWxHcmlkQ29sdW1uW11cblx0YWxsRGF5PzogYm9vbGVhblxuXHRzaG93RGF5TnVtYmVyPzogYm9vbGVhblxuXHRpc0xhc3RSb3c/OiBib29sZWFuXG59XG5cbmNvbnN0IE5vTWVtb0hvcml6b250YWxHcmlkUm93OiBSZWFjdC5GQzxIb3Jpem9udGFsR3JpZFJvd1Byb3BzPiA9ICh7XG5cdGlkLFxuXHRyZXNvdXJjZSxcblx0Z3JpZFR5cGUgPSAnZGF5Jyxcblx0dmFyaWFudCA9ICdyZXNvdXJjZScsXG5cdGRheU51bWJlckhlaWdodCxcblx0Y2xhc3NOYW1lLFxuXHRjb2x1bW5zID0gW10sXG5cdGFsbERheSxcblx0c2hvd0RheU51bWJlciA9IGZhbHNlLFxuXHRpc0xhc3RSb3cgPSBmYWxzZSxcbn0pID0+IHtcblx0Y29uc3QgeyByZW5kZXJSZXNvdXJjZSB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXG5cdGNvbnN0IGlzUmVzb3VyY2VDYWxlbmRhciA9IHZhcmlhbnQgPT09ICdyZXNvdXJjZSdcblx0Ly8gRmxhdCBjb2x1bW5zOiBlYWNoIGNvbHVtbiBoYXMgY29sLmRheSAocmVndWxhciBtb250aCwgcmVzb3VyY2UgbW9udGgpXG5cdC8vIEdyb3VwZWQgY29sdW1uczogZWFjaCBjb2x1bW4gaGFzIGNvbC5kYXlzW10gKHJlc291cmNlIHdlZWsgaG9yaXpvbnRhbClcblx0Y29uc3QgaXNHcm91cGVkID0gY29sdW1ucy5zb21lKChjb2wpID0+IGNvbC5kYXlzKVxuXG5cdC8vIENvbGxlY3QgYWxsIGRheXMgZm9yIGZsYXQgcm93c1xuXHRjb25zdCBmbGF0RGF5cyA9IHVzZU1lbW8oKCkgPT4ge1xuXHRcdGlmIChpc0dyb3VwZWQpIHJldHVybiBbXVxuXHRcdHJldHVybiBjb2x1bW5zLm1hcCgoY29sKSA9PiBjb2wuZGF5KS5maWx0ZXIoKGQpOiBkIGlzIERheWpzID0+IEJvb2xlYW4oZCkpXG5cdH0sIFtjb2x1bW5zLCBpc0dyb3VwZWRdKVxuXG5cdC8vIENvbXB1dGUgZXZlbnRzIG9uY2UgYXQgdGhlIHJvdyBsZXZlbCDigJQgc2hhcmVkIGJldHdlZW4gR3JpZENlbGxzIGFuZCBldmVudHMgbGF5ZXJcblx0Y29uc3QgeyBwb3NpdGlvbmVkRXZlbnRzLCBkYXlFdmVudHNNYXAgfSA9IHVzZVByb2Nlc3NlZFdlZWtFdmVudHMoe1xuXHRcdGRheXM6IGZsYXREYXlzLFxuXHRcdGdyaWRUeXBlLFxuXHRcdHJlc291cmNlSWQ6IHJlc291cmNlPy5pZCxcblx0XHRkYXlOdW1iZXJIZWlnaHQsXG5cdFx0YWxsRGF5LFxuXHR9KVxuXG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbignZmxleCBmbGV4LTEgcmVsYXRpdmUgbWluLXctMCcsIGNsYXNzTmFtZSl9XG5cdFx0XHRkYXRhLXRlc3RpZD17a2V5cy5jb250YWluZXIuaG9yaXpvbnRhbC5yb3coaWQpfVxuXHRcdD5cblx0XHRcdHtpc1Jlc291cmNlQ2FsZW5kYXIgJiYgcmVzb3VyY2UgJiYgKFxuXHRcdFx0XHQ8UmVzb3VyY2VDZWxsXG5cdFx0XHRcdFx0Y2xhc3NOYW1lPVwidy0yMCBzbTp3LTQwIHN0aWNreSBsZWZ0LTAgYmctYmFja2dyb3VuZCB6LTIwIGgtZnVsbFwiXG5cdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e2tleXMuY29udGFpbmVyLmhvcml6b250YWwucm93TGFiZWwocmVzb3VyY2UuaWQpfVxuXHRcdFx0XHRcdHJlc291cmNlPXtyZXNvdXJjZX1cblx0XHRcdFx0PlxuXHRcdFx0XHRcdHtyZW5kZXJSZXNvdXJjZSA/IChcblx0XHRcdFx0XHRcdHJlbmRlclJlc291cmNlKHJlc291cmNlKVxuXHRcdFx0XHRcdCkgOiAoXG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cIndyYXAtYnJlYWstd29yZCB0ZXh0LXNtXCI+e3Jlc291cmNlLnRpdGxlfTwvZGl2PlxuXHRcdFx0XHRcdCl9XG5cdFx0XHRcdDwvUmVzb3VyY2VDZWxsPlxuXHRcdFx0KX1cblx0XHRcdDxkaXYgY2xhc3NOYW1lPVwicmVsYXRpdmUgZmxleC0xIGZsZXggbWluLXctMFwiPlxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggdy1mdWxsIG1pbi13LTBcIj5cblx0XHRcdFx0XHR7Y29sdW1ucy5tYXAoKGNvbCwgaW5kZXgpID0+IHtcblx0XHRcdFx0XHRcdGlmIChjb2wuZGF5cykge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHRcdDxHcm91cGVkQ29sdW1uXG5cdFx0XHRcdFx0XHRcdFx0XHRhbGxEYXk9e2FsbERheX1cblx0XHRcdFx0XHRcdFx0XHRcdGNvbD17Y29sfVxuXHRcdFx0XHRcdFx0XHRcdFx0ZGF5TnVtYmVySGVpZ2h0PXtkYXlOdW1iZXJIZWlnaHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRncmlkVHlwZT17Z3JpZFR5cGV9XG5cdFx0XHRcdFx0XHRcdFx0XHRpZD17aWR9XG5cdFx0XHRcdFx0XHRcdFx0XHRpc0xhc3RDb2w9e2luZGV4ID09PSBjb2x1bW5zLmxlbmd0aCAtIDF9XG5cdFx0XHRcdFx0XHRcdFx0XHRpc0xhc3RSb3c9e2lzTGFzdFJvd31cblx0XHRcdFx0XHRcdFx0XHRcdGtleT17Y29sLmlkfVxuXHRcdFx0XHRcdFx0XHRcdFx0cmVzb3VyY2U9e3Jlc291cmNlfVxuXHRcdFx0XHRcdFx0XHRcdFx0cmVzb3VyY2VJZD17cmVzb3VyY2U/LmlkfVxuXHRcdFx0XHRcdFx0XHRcdFx0c2hvd0RheU51bWJlcj17c2hvd0RheU51bWJlcn1cblx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdHJldHVybiBjb2wuZGF5ID8gKFxuXHRcdFx0XHRcdFx0XHQ8R3JpZENlbGxcblx0XHRcdFx0XHRcdFx0XHRhbGxEYXk9e2FsbERheX1cblx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0XHRcdFx0J2ZsZXgtMSB3LTIwJyxcblx0XHRcdFx0XHRcdFx0XHRcdGlzTGFzdFJvdyAmJiAnYm9yZGVyLWItMCcsXG5cdFx0XHRcdFx0XHRcdFx0XHRjb2wuY2xhc3NOYW1lXG5cdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0XHRkYXk9e2NvbC5kYXl9XG5cdFx0XHRcdFx0XHRcdFx0Z3JpZFR5cGU9e2dyaWRUeXBlfVxuXHRcdFx0XHRcdFx0XHRcdGhvdXI9e2dyaWRUeXBlID09PSAnaG91cicgPyBjb2wuZGF5LmhvdXIoKSA6IHVuZGVmaW5lZH1cblx0XHRcdFx0XHRcdFx0XHRrZXk9e2NvbC5kYXkudG9JU09TdHJpbmcoKX1cblx0XHRcdFx0XHRcdFx0XHRwcmVjb21wdXRlZEV2ZW50cz17ZGF5RXZlbnRzTWFwLmdldChnZXREYXlLZXkoY29sLmRheSkpfVxuXHRcdFx0XHRcdFx0XHRcdHJlc291cmNlSWQ9e3Jlc291cmNlPy5pZH1cblx0XHRcdFx0XHRcdFx0XHRzaG93RGF5TnVtYmVyPXtzaG93RGF5TnVtYmVyfVxuXHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0KSA6IG51bGxcblx0XHRcdFx0XHR9KX1cblx0XHRcdFx0PC9kaXY+XG5cblx0XHRcdFx0ey8qIEV2ZW50cyBsYXllciBwb3NpdGlvbmVkIGFic29sdXRlbHkgb3ZlciB0aGUgcm93ICovfVxuXHRcdFx0XHR7IWlzR3JvdXBlZCAmJiAoXG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJhYnNvbHV0ZSBpbnNldC0wIHotMTAgcG9pbnRlci1ldmVudHMtbm9uZVwiPlxuXHRcdFx0XHRcdFx0PEhvcml6b250YWxHcmlkRXZlbnRzTGF5ZXJcblx0XHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e2tleXMuY29udGFpbmVyLmV2ZW50c0xheWVyKCdob3Jpem9udGFsJywgaWQpfVxuXHRcdFx0XHRcdFx0XHRkYXlzPXtmbGF0RGF5c31cblx0XHRcdFx0XHRcdFx0Z3JpZFR5cGU9e2dyaWRUeXBlfVxuXHRcdFx0XHRcdFx0XHRwb3NpdGlvbmVkRXZlbnRzPXtwb3NpdGlvbmVkRXZlbnRzfVxuXHRcdFx0XHRcdFx0XHRyZXNvdXJjZT17cmVzb3VyY2V9XG5cdFx0XHRcdFx0XHRcdHJlc291cmNlSWQ9e3Jlc291cmNlPy5pZH1cblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdCl9XG5cdFx0XHQ8L2Rpdj5cblx0XHQ8L2Rpdj5cblx0KVxufVxuXG4vKipcbiAqIEEgY29sdW1uIGNvbnRhaW5pbmcgbXVsdGlwbGUgZGF5cyAoZS5nLiwgb25lIGRheSdzIGhvdXJseSBzbG90cyBpbiByZXNvdXJjZSB3ZWVrIHZpZXcpLlxuICogTmVlZHMgaXRzIG93biB1c2VQcm9jZXNzZWRXZWVrRXZlbnRzIGNhbGwgc2luY2UgZXZlbnRzIGFyZSBzY29wZWQgdG8gdGhpcyBkYXkgZ3JvdXAuXG4gKi9cbmNvbnN0IEdyb3VwZWRDb2x1bW4gPSBtZW1vKFxuXHQoe1xuXHRcdGNvbCxcblx0XHRncmlkVHlwZSA9ICdkYXknLFxuXHRcdGFsbERheSxcblx0XHRyZXNvdXJjZSxcblx0XHRyZXNvdXJjZUlkLFxuXHRcdGRheU51bWJlckhlaWdodCxcblx0XHRzaG93RGF5TnVtYmVyLFxuXHRcdGlzTGFzdFJvdyxcblx0XHRpc0xhc3RDb2wsXG5cdFx0aWQsXG5cdH06IHtcblx0XHRjb2w6IEhvcml6b250YWxHcmlkQ29sdW1uXG5cdFx0Z3JpZFR5cGU/OiAnZGF5JyB8ICdob3VyJ1xuXHRcdGFsbERheT86IGJvb2xlYW5cblx0XHRyZXNvdXJjZT86IFJlc291cmNlXG5cdFx0cmVzb3VyY2VJZD86IHN0cmluZyB8IG51bWJlclxuXHRcdGRheU51bWJlckhlaWdodD86IG51bWJlclxuXHRcdHNob3dEYXlOdW1iZXI6IGJvb2xlYW5cblx0XHRpc0xhc3RSb3c6IGJvb2xlYW5cblx0XHRpc0xhc3RDb2w6IGJvb2xlYW5cblx0XHRpZDogc3RyaW5nIHwgbnVtYmVyXG5cdH0pID0+IHtcblx0XHRjb25zdCBkYXlzID0gY29sLmRheXMgPz8gW11cblx0XHRjb25zdCB7IHBvc2l0aW9uZWRFdmVudHMgfSA9IHVzZVByb2Nlc3NlZFdlZWtFdmVudHMoe1xuXHRcdFx0ZGF5cyxcblx0XHRcdGdyaWRUeXBlLFxuXHRcdFx0cmVzb3VyY2VJZCxcblx0XHRcdGRheU51bWJlckhlaWdodCxcblx0XHRcdGFsbERheSxcblx0XHR9KVxuXG5cdFx0cmV0dXJuIChcblx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCByZWxhdGl2ZSB3LWZ1bGxcIj5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IHctZnVsbFwiPlxuXHRcdFx0XHRcdHtkYXlzLm1hcCgoZGF5KSA9PiAoXG5cdFx0XHRcdFx0XHQ8R3JpZENlbGxcblx0XHRcdFx0XHRcdFx0YWxsRGF5PXthbGxEYXl9XG5cdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHRcdFx0J2ZsZXgtMSB3LTIwJyxcblx0XHRcdFx0XHRcdFx0XHRpc0xhc3RSb3cgJiYgJ2JvcmRlci1iLTAnLFxuXHRcdFx0XHRcdFx0XHRcdCFpc0xhc3RDb2wgJiYgJ2JvcmRlci1yIScsXG5cdFx0XHRcdFx0XHRcdFx0Y29sLmNsYXNzTmFtZVxuXHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRkYXk9e2RheX1cblx0XHRcdFx0XHRcdFx0Z3JpZFR5cGU9e2dyaWRUeXBlfVxuXHRcdFx0XHRcdFx0XHRob3VyPXtncmlkVHlwZSA9PT0gJ2hvdXInID8gZGF5LmhvdXIoKSA6IHVuZGVmaW5lZH1cblx0XHRcdFx0XHRcdFx0a2V5PXtkYXkudG9JU09TdHJpbmcoKX1cblx0XHRcdFx0XHRcdFx0cmVzb3VyY2VJZD17cmVzb3VyY2VJZH1cblx0XHRcdFx0XHRcdFx0c2hvd0RheU51bWJlcj17c2hvd0RheU51bWJlcn1cblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0KSl9XG5cdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiYWJzb2x1dGUgaW5zZXQtMCB6LTEwIHBvaW50ZXItZXZlbnRzLW5vbmVcIj5cblx0XHRcdFx0XHQ8SG9yaXpvbnRhbEdyaWRFdmVudHNMYXllclxuXHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e2tleXMuY29udGFpbmVyLmV2ZW50c0xheWVyKCdob3Jpem9udGFsJywgaWQpfVxuXHRcdFx0XHRcdFx0ZGF5cz17ZGF5c31cblx0XHRcdFx0XHRcdGdyaWRUeXBlPXtncmlkVHlwZX1cblx0XHRcdFx0XHRcdHBvc2l0aW9uZWRFdmVudHM9e3Bvc2l0aW9uZWRFdmVudHN9XG5cdFx0XHRcdFx0XHRyZXNvdXJjZT17cmVzb3VyY2V9XG5cdFx0XHRcdFx0XHRyZXNvdXJjZUlkPXtyZXNvdXJjZUlkfVxuXHRcdFx0XHRcdC8+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0PC9kaXY+XG5cdFx0KVxuXHR9XG4pXG5cbmV4cG9ydCBjb25zdCBIb3Jpem9udGFsR3JpZFJvdyA9IG1lbW8oTm9NZW1vSG9yaXpvbnRhbEdyaWRSb3cpXG4iLAogICAgImltcG9ydCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB0eXBlIHsgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGdldERheUtleSB9IGZyb20gJ0AvbGliL3V0aWxzL2RhdGUtdXRpbHMnXG5pbXBvcnQge1xuXHRldmVudE92ZXJsYXBzUmFuZ2UsXG5cdGZpbHRlckV2ZW50c0J5UmVzb3VyY2UsXG59IGZyb20gJ0AvbGliL3V0aWxzL2V2ZW50LXV0aWxzJ1xuaW1wb3J0IHtcblx0Z2V0UG9zaXRpb25lZEV2ZW50cyxcblx0dHlwZSBQb3NpdGlvbmVkRXZlbnQsXG59IGZyb20gJ0AvbGliL3V0aWxzL3Bvc2l0aW9uLXdlZWstZXZlbnRzJ1xuXG5pbnRlcmZhY2UgVXNlUHJvY2Vzc2VkV2Vla0V2ZW50c1Byb3BzIHtcblx0ZGF5czogRGF5anNbXVxuXHRhbGxEYXk/OiBib29sZWFuXG5cdGRheU51bWJlckhlaWdodD86IG51bWJlclxuXHRyZXNvdXJjZUlkPzogc3RyaW5nIHwgbnVtYmVyXG5cdGdyaWRUeXBlPzogJ2RheScgfCAnaG91cidcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQcm9jZXNzZWRXZWVrRXZlbnRzUmVzdWx0IHtcblx0cG9zaXRpb25lZEV2ZW50czogUG9zaXRpb25lZEV2ZW50W11cblx0ZGF5RXZlbnRzTWFwOiBNYXA8c3RyaW5nLCBDYWxlbmRhckV2ZW50W10+XG59XG5cbmV4cG9ydCBjb25zdCB1c2VQcm9jZXNzZWRXZWVrRXZlbnRzID0gKHtcblx0ZGF5cyxcblx0YWxsRGF5LFxuXHRkYXlOdW1iZXJIZWlnaHQsXG5cdHJlc291cmNlSWQsXG5cdGdyaWRUeXBlLFxufTogVXNlUHJvY2Vzc2VkV2Vla0V2ZW50c1Byb3BzKTogUHJvY2Vzc2VkV2Vla0V2ZW50c1Jlc3VsdCA9PiB7XG5cdGNvbnN0IHtcblx0XHRnZXRFdmVudHNGb3JEYXRlUmFuZ2UsXG5cdFx0ZGF5TWF4RXZlbnRzLFxuXHRcdGV2ZW50U3BhY2luZyxcblx0XHRldmVudEhlaWdodCxcblx0XHRnZXRFdmVudHNGb3JSZXNvdXJjZSxcblx0fSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblxuXHRjb25zdCBmaXJzdCA9IGRheXMuYXQoMClcblx0Y29uc3QgbGFzdCA9IGRheXMuYXQoLTEpXG5cdGNvbnN0IHdlZWtTdGFydCA9IGZpcnN0Py5zdGFydE9mKCdkYXknKVxuXHRjb25zdCB3ZWVrRW5kID0gbGFzdD8uZW5kT2YoJ2RheScpXG5cblx0Y29uc3QgZXZlbnRzID0gdXNlTWVtbygoKSA9PiB7XG5cdFx0aWYgKCF3ZWVrU3RhcnQgfHwgIXdlZWtFbmQpIHJldHVybiBbXVxuXG5cdFx0bGV0IHdlZWtFdmVudHMgPSBnZXRFdmVudHNGb3JEYXRlUmFuZ2Uod2Vla1N0YXJ0LCB3ZWVrRW5kKVxuXHRcdGlmIChyZXNvdXJjZUlkKSB7XG5cdFx0XHR3ZWVrRXZlbnRzID0gZmlsdGVyRXZlbnRzQnlSZXNvdXJjZShcblx0XHRcdFx0d2Vla0V2ZW50cyxcblx0XHRcdFx0Z2V0RXZlbnRzRm9yUmVzb3VyY2UocmVzb3VyY2VJZClcblx0XHRcdClcblx0XHR9XG5cblx0XHRpZiAoYWxsRGF5KSB7XG5cdFx0XHR3ZWVrRXZlbnRzID0gd2Vla0V2ZW50cy5maWx0ZXIoKGUpID0+ICEhZS5hbGxEYXkgPT09IGFsbERheSlcblx0XHR9XG5cblx0XHRyZXR1cm4gd2Vla0V2ZW50c1xuXHR9LCBbXG5cdFx0Z2V0RXZlbnRzRm9yRGF0ZVJhbmdlLFxuXHRcdGdldEV2ZW50c0ZvclJlc291cmNlLFxuXHRcdHdlZWtTdGFydCxcblx0XHR3ZWVrRW5kLFxuXHRcdHJlc291cmNlSWQsXG5cdFx0YWxsRGF5LFxuXHRdKVxuXG5cdGNvbnN0IGRheUV2ZW50c01hcCA9IHVzZU1lbW8oKCkgPT4ge1xuXHRcdGNvbnN0IG1hcCA9IG5ldyBNYXA8c3RyaW5nLCBDYWxlbmRhckV2ZW50W10+KClcblx0XHRmb3IgKGNvbnN0IGRheSBvZiBkYXlzKSB7XG5cdFx0XHRjb25zdCBrZXkgPSBnZXREYXlLZXkoZGF5KVxuXHRcdFx0Y29uc3QgZGF5U3RhcnQgPSBkYXkuc3RhcnRPZignZGF5Jylcblx0XHRcdGNvbnN0IGRheUVuZCA9IGRheS5lbmRPZignZGF5Jylcblx0XHRcdGNvbnN0IGRheUV2ZW50cyA9IGV2ZW50cy5maWx0ZXIoKGUpID0+XG5cdFx0XHRcdGV2ZW50T3ZlcmxhcHNSYW5nZShlLCBkYXlTdGFydCwgZGF5RW5kKVxuXHRcdFx0KVxuXHRcdFx0bWFwLnNldChrZXksIGRheUV2ZW50cylcblx0XHR9XG5cdFx0cmV0dXJuIG1hcFxuXHR9LCBbZGF5cywgZXZlbnRzXSlcblxuXHRjb25zdCBwb3NpdGlvbmVkRXZlbnRzID0gdXNlTWVtbygoKSA9PiB7XG5cdFx0cmV0dXJuIGdldFBvc2l0aW9uZWRFdmVudHMoe1xuXHRcdFx0ZGF5cyxcblx0XHRcdGV2ZW50cyxcblx0XHRcdGRheU1heEV2ZW50cyxcblx0XHRcdGRheU51bWJlckhlaWdodCxcblx0XHRcdGV2ZW50U3BhY2luZyxcblx0XHRcdGV2ZW50QmFySGVpZ2h0OiBldmVudEhlaWdodCxcblx0XHRcdGdyaWRUeXBlLFxuXHRcdH0pXG5cdH0sIFtcblx0XHRkYXlzLFxuXHRcdGRheU1heEV2ZW50cyxcblx0XHRkYXlOdW1iZXJIZWlnaHQsXG5cdFx0ZXZlbnRTcGFjaW5nLFxuXHRcdGV2ZW50SGVpZ2h0LFxuXHRcdGV2ZW50cyxcblx0XHRncmlkVHlwZSxcblx0XSlcblxuXHRyZXR1cm4geyBwb3NpdGlvbmVkRXZlbnRzLCBkYXlFdmVudHNNYXAgfVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgZGF5anMsIHsgdHlwZSBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHtcblx0REFZX05VTUJFUl9IRUlHSFQsXG5cdEVWRU5UX0JBUl9IRUlHSFQsXG5cdEdBUF9CRVRXRUVOX0VMRU1FTlRTLFxufSBmcm9tICdAL2xpYi9jb25zdGFudHMnXG5cbmV4cG9ydCBpbnRlcmZhY2UgUG9zaXRpb25lZEV2ZW50IGV4dGVuZHMgQ2FsZW5kYXJFdmVudCB7XG5cdGxlZnQ6IG51bWJlciAvLyBMZWZ0IHBvc2l0aW9uIGluIHBlcmNlbnRhZ2Vcblx0d2lkdGg6IG51bWJlciAvLyBXaWR0aCBpbiBwZXJjZW50YWdlXG5cdHRvcDogbnVtYmVyIC8vIFRvcCBwb3NpdGlvbiBpbiBwZXJjZW50YWdlXG5cdGhlaWdodDogbnVtYmVyIC8vIEhlaWdodCBpbiBwZXJjZW50YWdlXG5cdHBvc2l0aW9uOiBudW1iZXIgLy8gUG9zaXRpb24gaW4gdGhlIHJvdyAoMCBmb3IgZmlyc3QsIDEgZm9yIHNlY29uZCwgZXRjLilcblx0aXNUcnVuY2F0ZWRTdGFydDogYm9vbGVhbiAvLyBXaGV0aGVyIHRoZSBldmVudCBpcyB0cnVuY2F0ZWQgYXQgdGhlIHN0YXJ0XG5cdGlzVHJ1bmNhdGVkRW5kOiBib29sZWFuIC8vIFdoZXRoZXIgdGhlIGV2ZW50IGlzIHRydW5jYXRlZCBhdCB0aGUgZW5kXG59XG5cbmludGVyZmFjZSBHZXRQb3NpdGlvbmVkRXZlbnRzUHJvcHMge1xuXHRkYXlzOiBEYXlqc1tdXG5cdGV2ZW50czogQ2FsZW5kYXJFdmVudFtdXG5cdGRheU1heEV2ZW50czogbnVtYmVyXG5cdGRheU51bWJlckhlaWdodD86IG51bWJlclxuXHRncmlkVHlwZT86ICdkYXknIHwgJ2hvdXInIC8vIEZ1dHVyZSB1c2UgZm9yIGRpZmZlcmVudCBncmlkIHR5cGVzXG5cdGV2ZW50U3BhY2luZz86IG51bWJlciAvLyBDdXN0b20gdmVydGljYWwgc3BhY2luZyBiZXR3ZWVuIGV2ZW50cyAoZGVmYXVsdHMgdG8gR0FQX0JFVFdFRU5fRUxFTUVOVFMpXG5cdGV2ZW50QmFySGVpZ2h0PzogbnVtYmVyIC8vIEN1c3RvbSBoZWlnaHQgZm9yIGV2ZW50IGJhcnMgaW4gcGl4ZWxzIChkZWZhdWx0cyB0byBFVkVOVF9CQVJfSEVJR0hUKVxufVxuXG5leHBvcnQgY29uc3QgZ2V0UG9zaXRpb25lZEV2ZW50cyA9ICh7XG5cdGRheXMsXG5cdGV2ZW50cyxcblx0ZGF5TWF4RXZlbnRzLFxuXHRkYXlOdW1iZXJIZWlnaHQgPSBEQVlfTlVNQkVSX0hFSUdIVCxcblx0Z3JpZFR5cGUgPSAnZGF5Jyxcblx0ZXZlbnRTcGFjaW5nID0gR0FQX0JFVFdFRU5fRUxFTUVOVFMsXG5cdGV2ZW50QmFySGVpZ2h0ID0gRVZFTlRfQkFSX0hFSUdIVCxcbn06IEdldFBvc2l0aW9uZWRFdmVudHNQcm9wcykgPT4ge1xuXHQvLyBGb3IgaG91ci1iYXNlZCBncmlkcywgdXNlIGFjdHVhbCBmaXJzdC9sYXN0IGhvdXJzIGZyb20gZGF5cyBhcnJheVxuXHQvLyBGb3IgZGF5LWJhc2VkIGdyaWRzLCB1c2Ugc3RhcnQvZW5kIG9mIGRheSB0byBjYXB0dXJlIGFsbCBldmVudHNcblx0Y29uc3QgZmlyc3QgPSBkYXlzLmF0KDApXG5cdGNvbnN0IGxhc3QgPSBkYXlzLmF0KC0xKVxuXHRpZiAoIWZpcnN0IHx8ICFsYXN0KSByZXR1cm4gW11cblxuXHRjb25zdCBmaXJzdERheSA9XG5cdFx0Z3JpZFR5cGUgPT09ICdob3VyJyA/IGZpcnN0LnN0YXJ0T2YoJ2hvdXInKSA6IGZpcnN0LnN0YXJ0T2YoJ2RheScpXG5cdGNvbnN0IGxhc3REYXkgPSBncmlkVHlwZSA9PT0gJ2hvdXInID8gbGFzdC5lbmRPZignaG91cicpIDogbGFzdC5lbmRPZignZGF5Jylcblx0Y29uc3QgZGF5Q291bnQgPSBkYXlzLmxlbmd0aFxuXG5cdC8vIFNlcGFyYXRlIG11bHRpLWRheSBhbmQgc2luZ2xlLWRheSBldmVudHNcblx0Y29uc3QgbXVsdGlEYXlFdmVudHMgPSBldmVudHMuZmlsdGVyKChlKSA9PiBlLmVuZC5kaWZmKGUuc3RhcnQsIGdyaWRUeXBlKSA+IDApXG5cdGNvbnN0IHNpbmdsZURheUV2ZW50cyA9IGV2ZW50cy5maWx0ZXIoXG5cdFx0KGUpID0+IGUuZW5kLmRpZmYoZS5zdGFydCwgZ3JpZFR5cGUpID09PSAwXG5cdClcblxuXHQvLyBTb3J0IG11bHRpLWRheSBldmVudHMgYnkgc3RhcnQgZGF0ZSwgdGhlbiBieSBkdXJhdGlvblxuXHRjb25zdCBzb3J0ZWRNdWx0aURheSA9IFsuLi5tdWx0aURheUV2ZW50c10uc29ydCgoYSwgYikgPT4ge1xuXHRcdGNvbnN0IHN0YXJ0RGlmZiA9IGEuc3RhcnQuZGlmZihiLnN0YXJ0KVxuXHRcdGlmIChzdGFydERpZmYgIT09IDApIHtcblx0XHRcdHJldHVybiBzdGFydERpZmZcblx0XHR9XG5cdFx0cmV0dXJuIGIuZW5kLmRpZmYoYi5zdGFydCkgLSBhLmVuZC5kaWZmKGEuc3RhcnQpIC8vIExvbmdlciBldmVudHMgZmlyc3Rcblx0fSlcblxuXHQvLyBTb3J0IHNpbmdsZS1kYXkgZXZlbnRzIGJ5IHN0YXJ0IHRpbWVcblx0Y29uc3Qgc29ydGVkU2luZ2xlRGF5ID0gWy4uLnNpbmdsZURheUV2ZW50c10uc29ydCgoYSwgYikgPT5cblx0XHRhLnN0YXJ0LmRpZmYoYi5zdGFydClcblx0KVxuXG5cdC8vIENyZWF0ZSBkYXlDb3VudCB4IGRheU1heEV2ZW50cyBncmlkIHdpdGggZmxhZ3Ncblx0Y29uc3QgZ3JpZDogeyB0YWtlbjogYm9vbGVhbjsgZXZlbnQ6IENhbGVuZGFyRXZlbnQgfCBudWxsIH1bXVtdID0gQXJyYXkuZnJvbShcblx0XHR7IGxlbmd0aDogZGF5TWF4RXZlbnRzIH0sXG5cdFx0KCkgPT5cblx0XHRcdEFycmF5LmZyb20oeyBsZW5ndGg6IGRheUNvdW50IH0sICgpID0+ICh7IHRha2VuOiBmYWxzZSwgZXZlbnQ6IG51bGwgfSkpXG5cdClcblxuXHRjb25zdCBwcm9jZXNzZWRFdmVudHM6IFBvc2l0aW9uZWRFdmVudFtdID0gW11cblxuXHQvLyBGaW5kIHRoZSBmaXJzdCByb3cgd2hlcmUgZXZlcnkgY29sdW1uIGZyb20gc3RhcnRDb2wuLmVuZENvbCBpcyBmcmVlOyAtMSBpZiBub25lLlxuXHRjb25zdCBmaW5kQXZhaWxhYmxlUm93ID0gKHN0YXJ0Q29sOiBudW1iZXIsIGVuZENvbDogbnVtYmVyKTogbnVtYmVyID0+IHtcblx0XHRmb3IgKGxldCByb3cgPSAwOyByb3cgPCBkYXlNYXhFdmVudHM7IHJvdysrKSB7XG5cdFx0XHRsZXQgY2FuUGxhY2UgPSB0cnVlXG5cdFx0XHRmb3IgKGxldCBjb2wgPSBzdGFydENvbDsgY29sIDw9IGVuZENvbDsgY29sKyspIHtcblx0XHRcdFx0aWYgKGdyaWRbcm93XVtjb2xdLnRha2VuKSB7XG5cdFx0XHRcdFx0Y2FuUGxhY2UgPSBmYWxzZVxuXHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChjYW5QbGFjZSkgcmV0dXJuIHJvd1xuXHRcdH1cblx0XHRyZXR1cm4gLTFcblx0fVxuXG5cdGNvbnN0IHBsYWNlID0gKFxuXHRcdHJvdzogbnVtYmVyLFxuXHRcdHN0YXJ0Q29sOiBudW1iZXIsXG5cdFx0ZW5kQ29sOiBudW1iZXIsXG5cdFx0ZXZlbnQ6IENhbGVuZGFyRXZlbnQsXG5cdFx0aXNUcnVuY2F0ZWRTdGFydDogYm9vbGVhbixcblx0XHRpc1RydW5jYXRlZEVuZDogYm9vbGVhblxuXHQpID0+IHtcblx0XHRmb3IgKGxldCBjb2wgPSBzdGFydENvbDsgY29sIDw9IGVuZENvbDsgY29sKyspIHtcblx0XHRcdGdyaWRbcm93XVtjb2xdID0geyB0YWtlbjogdHJ1ZSwgZXZlbnQgfVxuXHRcdH1cblx0XHRjb25zdCBzcGFuRGF5cyA9IGVuZENvbCAtIHN0YXJ0Q29sICsgMVxuXHRcdHByb2Nlc3NlZEV2ZW50cy5wdXNoKHtcblx0XHRcdGxlZnQ6IChzdGFydENvbCAvIGRheUNvdW50KSAqIDEwMCxcblx0XHRcdHdpZHRoOiAoc3BhbkRheXMgLyBkYXlDb3VudCkgKiAxMDAsXG5cdFx0XHR0b3A6XG5cdFx0XHRcdGRheU51bWJlckhlaWdodCArIGV2ZW50U3BhY2luZyArIHJvdyAqIChldmVudEJhckhlaWdodCArIGV2ZW50U3BhY2luZyksXG5cdFx0XHRoZWlnaHQ6IGV2ZW50QmFySGVpZ2h0LFxuXHRcdFx0cG9zaXRpb246IHJvdyxcblx0XHRcdC4uLmV2ZW50LFxuXHRcdFx0aXNUcnVuY2F0ZWRTdGFydCxcblx0XHRcdGlzVHJ1bmNhdGVkRW5kLFxuXHRcdH0gYXMgUG9zaXRpb25lZEV2ZW50KVxuXHR9XG5cblx0Ly8gU3RlcCAxOiBBc3NpZ24gcG9zaXRpb25zIHRvIG11bHRpLWRheSBldmVudHMgZmlyc3Rcblx0Zm9yIChjb25zdCBldmVudCBvZiBzb3J0ZWRNdWx0aURheSkge1xuXHRcdGNvbnN0IGV2ZW50U3RhcnQgPSBkYXlqcy5tYXgoZXZlbnQuc3RhcnQuc3RhcnRPZihncmlkVHlwZSksIGZpcnN0RGF5KVxuXHRcdGNvbnN0IGFkanVzdGVkRW5kID1cblx0XHRcdGdyaWRUeXBlID09PSAnaG91cicgPyBldmVudC5lbmQuc3VidHJhY3QoMSwgJ21pbnV0ZScpIDogZXZlbnQuZW5kXG5cdFx0Y29uc3QgZXZlbnRFbmQgPSBkYXlqcy5taW4oYWRqdXN0ZWRFbmQuc3RhcnRPZihncmlkVHlwZSksIGxhc3REYXkpXG5cdFx0Y29uc3Qgc3RhcnRDb2wgPSBNYXRoLm1heCgwLCBldmVudFN0YXJ0LmRpZmYoZmlyc3REYXksIGdyaWRUeXBlKSlcblx0XHRjb25zdCBlbmRDb2wgPSBNYXRoLm1pbihkYXlDb3VudCAtIDEsIGV2ZW50RW5kLmRpZmYoZmlyc3REYXksIGdyaWRUeXBlKSlcblxuXHRcdGNvbnN0IGlzVHJ1bmNhdGVkU3RhcnQgPSBldmVudC5zdGFydC5zdGFydE9mKGdyaWRUeXBlKS5pc0JlZm9yZShmaXJzdERheSlcblx0XHRjb25zdCBpc1RydW5jYXRlZEVuZCA9IGV2ZW50LmVuZC5zdGFydE9mKGdyaWRUeXBlKS5pc0FmdGVyKGxhc3REYXkpXG5cblx0XHQvLyBGaXJzdCB0cnk6IHBsYWNlIGZyb20gb3JpZ2luYWwgc3RhcnQgcG9zaXRpb25cblx0XHRjb25zdCByb3cgPSBmaW5kQXZhaWxhYmxlUm93KHN0YXJ0Q29sLCBlbmRDb2wpXG5cdFx0aWYgKHJvdyAhPT0gLTEpIHtcblx0XHRcdHBsYWNlKHJvdywgc3RhcnRDb2wsIGVuZENvbCwgZXZlbnQsIGlzVHJ1bmNhdGVkU3RhcnQsIGlzVHJ1bmNhdGVkRW5kKVxuXHRcdFx0Y29udGludWVcblx0XHR9XG5cblx0XHQvLyBGYWxsYmFjazogdHJ5IHRydW5jYXRlZCB2ZXJzaW9ucyBzdGFydGluZyBmcm9tIGxhdGVyIGRheXNcblx0XHRmb3IgKGxldCB0cnlTdGFydCA9IHN0YXJ0Q29sICsgMTsgdHJ5U3RhcnQgPD0gZW5kQ29sOyB0cnlTdGFydCsrKSB7XG5cdFx0XHRjb25zdCB0cnVuY1JvdyA9IGZpbmRBdmFpbGFibGVSb3codHJ5U3RhcnQsIGVuZENvbClcblx0XHRcdGlmICh0cnVuY1JvdyAhPT0gLTEpIHtcblx0XHRcdFx0cGxhY2UodHJ1bmNSb3csIHRyeVN0YXJ0LCBlbmRDb2wsIGV2ZW50LCB0cnVlLCBpc1RydW5jYXRlZEVuZClcblx0XHRcdFx0YnJlYWtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBTdGVwIDI6IEZpbGwgZ2FwcyB3aXRoIHNpbmdsZS1kYXkgZXZlbnRzXG5cdGZvciAoY29uc3QgZXZlbnQgb2Ygc29ydGVkU2luZ2xlRGF5KSB7XG5cdFx0Y29uc3QgZXZlbnRTdGFydCA9IGRheWpzLm1heChldmVudC5zdGFydC5zdGFydE9mKGdyaWRUeXBlKSwgZmlyc3REYXkpXG5cdFx0Y29uc3QgY29sID0gTWF0aC5tYXgoXG5cdFx0XHQwLFxuXHRcdFx0TWF0aC5taW4oZGF5Q291bnQgLSAxLCBldmVudFN0YXJ0LmRpZmYoZmlyc3REYXksIGdyaWRUeXBlKSlcblx0XHQpXG5cdFx0Y29uc3Qgcm93ID0gZmluZEF2YWlsYWJsZVJvdyhjb2wsIGNvbClcblx0XHRpZiAocm93ICE9PSAtMSkge1xuXHRcdFx0cGxhY2Uocm93LCBjb2wsIGNvbCwgZXZlbnQsIGZhbHNlLCBmYWxzZSlcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gcHJvY2Vzc2VkRXZlbnRzXG59XG4iLAogICAgImltcG9ydCBSZWFjdCwgeyBtZW1vLCB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBEYXlOdW1iZXIgfSBmcm9tICdAL2NvbXBvbmVudHMvZGF5LW51bWJlcidcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB7IGlzQnVzaW5lc3NIb3VyIH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci91dGlscy9idXNpbmVzcy1ob3VycydcbmltcG9ydCB7IHVzZUVmZmVjdGl2ZUJ1c2luZXNzSG91cnMgfSBmcm9tICdAL2hvb2tzL3VzZS1lZmZlY3RpdmUtYnVzaW5lc3MtaG91cnMnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSB7IERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgZmlsdGVyRXZlbnRzQnlSZXNvdXJjZSB9IGZyb20gJ0AvbGliL3V0aWxzL2V2ZW50LXV0aWxzJ1xuaW1wb3J0IHsga2V5cyB9IGZyb20gJ0AvbGliL3V0aWxzL2tleXMnXG5pbXBvcnQgdHlwZSB7IFNlbGVjdGVkRGF5RXZlbnRzIH0gZnJvbSAnLi9hbGwtZXZlbnRzLWRpYWxvZydcbmltcG9ydCB7IEFsbEV2ZW50RGlhbG9nIH0gZnJvbSAnLi9hbGwtZXZlbnRzLWRpYWxvZydcbmltcG9ydCB7IERyb3BwYWJsZUNlbGwgfSBmcm9tICcuL2Ryb3BwYWJsZS1jZWxsJ1xuXG5pbnRlcmZhY2UgR3JpZFByb3BzIHtcblx0ZGF5OiBEYXlqc1xuXHRob3VyPzogbnVtYmVyIC8vIE9wdGlvbmFsIGhvdXIgZm9yIGhvdXItYmFzZWQgZ3JpZHNcblx0bWludXRlPzogbnVtYmVyIC8vIE9wdGlvbmFsIG1pbnV0ZSBmb3IgbW9yZSBncmFudWxhciB0aW1lIHNsb3RzXG5cdGRheU1heEV2ZW50cz86IG51bWJlclxuXHRjbGFzc05hbWU/OiBzdHJpbmcgLy8gT3B0aW9uYWwgY2xhc3NOYW1lIGZvciBjdXN0b20gc3R5bGluZ1xuXHRyZXNvdXJjZUlkPzogc3RyaW5nIHwgbnVtYmVyIC8vIE9wdGlvbmFsIHJlc291cmNlIElEIGZvciByZXNvdXJjZS1zcGVjaWZpYyBkYXkgY2VsbHNcblx0Z3JpZFR5cGU/OiAnZGF5JyB8ICdob3VyJyAvLyBGdXR1cmUgdXNlIGZvciBkaWZmZXJlbnQgZ3JpZCB0eXBlc1xuXHRzaG91bGRSZW5kZXJFdmVudHM/OiBib29sZWFuIC8vIEZsYWcgdG8gZGV0ZXJtaW5lIGlmIGV2ZW50cyBzaG91bGQgYmUgcmVuZGVyZWRcblx0YWxsRGF5PzogYm9vbGVhbiAvLyBGbGFnIHRvIGluZGljYXRlIGlmIHRoaXMgaXMgYW4gYWxsLWRheSBjZWxsXG5cdHNob3dEYXlOdW1iZXI/OiBib29sZWFuIC8vIEZsYWcgdG8gc2hvdyBvciBoaWRlIHRoZSBkYXkgbnVtYmVyXG5cdGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlXG5cdCdkYXRhLXRlc3RpZCc/OiBzdHJpbmdcblx0cHJlY29tcHV0ZWRFdmVudHM/OiBDYWxlbmRhckV2ZW50W11cbn1cblxuY29uc3QgTm9NZW1vR3JpZENlbGw6IFJlYWN0LkZDPEdyaWRQcm9wcz4gPSAoe1xuXHRkYXksXG5cdGhvdXIsXG5cdG1pbnV0ZSxcblx0Y2xhc3NOYW1lID0gJycsXG5cdHJlc291cmNlSWQsXG5cdGdyaWRUeXBlID0gJ2RheScsXG5cdHNob3VsZFJlbmRlckV2ZW50cyA9IHRydWUsXG5cdGFsbERheSA9IGZhbHNlLFxuXHRwcmVjb21wdXRlZEV2ZW50cyxcblx0J2RhdGEtdGVzdGlkJzogZGF0YVRlc3RJZCxcblx0c2hvd0RheU51bWJlciA9IGZhbHNlLFxuXHRjaGlsZHJlbixcbn0pID0+IHtcblx0Y29uc3QgYWxsRXZlbnRzRGlhbG9nUmVmID0gUmVhY3QudXNlUmVmPHtcblx0XHRvcGVuOiAoKSA9PiB2b2lkXG5cdFx0Y2xvc2U6ICgpID0+IHZvaWRcblx0XHRzZXRTZWxlY3RlZERheUV2ZW50czogKGRheUV2ZW50czogU2VsZWN0ZWREYXlFdmVudHMpID0+IHZvaWRcblx0fT4obnVsbClcblx0Y29uc3Qge1xuXHRcdGRheU1heEV2ZW50cyA9IDAsXG5cdFx0Z2V0RXZlbnRzRm9yRGF0ZVJhbmdlLFxuXHRcdGN1cnJlbnREYXRlLFxuXHRcdHQsXG5cdFx0Z2V0RXZlbnRzRm9yUmVzb3VyY2UsXG5cdFx0Y3VycmVudExvY2FsZSxcblx0XHRldmVudFNwYWNpbmcsXG5cdFx0ZXZlbnRIZWlnaHQsXG5cdH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cdGNvbnN0IGVmZmVjdGl2ZUJ1c2luZXNzSG91cnMgPSB1c2VFZmZlY3RpdmVCdXNpbmVzc0hvdXJzKHJlc291cmNlSWQpXG5cblx0Y29uc3QgdG9kYXlFdmVudHMgPSB1c2VNZW1vKCgpID0+IHtcblx0XHRpZiAoIXNob3VsZFJlbmRlckV2ZW50cykge1xuXHRcdFx0cmV0dXJuIFtdXG5cdFx0fVxuXG5cdFx0Ly8gVXNlIHByZS1jb21wdXRlZCBldmVudHMgZnJvbSB0aGUgcm93IGxldmVsIHdoZW4gYXZhaWxhYmxlXG5cdFx0aWYgKHByZWNvbXB1dGVkRXZlbnRzKSB7XG5cdFx0XHRyZXR1cm4gcHJlY29tcHV0ZWRFdmVudHNcblx0XHR9XG5cblx0XHRsZXQgdG9kYXlFdmVudHMgPSBnZXRFdmVudHNGb3JEYXRlUmFuZ2UoXG5cdFx0XHRkYXkuc3RhcnRPZihncmlkVHlwZSksXG5cdFx0XHRkYXkuZW5kT2YoZ3JpZFR5cGUpXG5cdFx0KVxuXG5cdFx0aWYgKGFsbERheSkge1xuXHRcdFx0dG9kYXlFdmVudHMgPSB0b2RheUV2ZW50cy5maWx0ZXIoKGUpID0+IGUuYWxsRGF5KVxuXHRcdH1cblxuXHRcdGlmIChyZXNvdXJjZUlkKSB7XG5cdFx0XHRyZXR1cm4gZmlsdGVyRXZlbnRzQnlSZXNvdXJjZShcblx0XHRcdFx0dG9kYXlFdmVudHMsXG5cdFx0XHRcdGdldEV2ZW50c0ZvclJlc291cmNlKHJlc291cmNlSWQpID8/IFtdXG5cdFx0XHQpXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRvZGF5RXZlbnRzXG5cdH0sIFtcblx0XHRwcmVjb21wdXRlZEV2ZW50cyxcblx0XHRkYXksXG5cdFx0cmVzb3VyY2VJZCxcblx0XHRnZXRFdmVudHNGb3JEYXRlUmFuZ2UsXG5cdFx0Z2V0RXZlbnRzRm9yUmVzb3VyY2UsXG5cdFx0Z3JpZFR5cGUsXG5cdFx0c2hvdWxkUmVuZGVyRXZlbnRzLFxuXHRcdGFsbERheSxcblx0XSlcblxuXHQvLyBIYW5kbGVyIGZvciBzaG93aW5nIGFsbCBldmVudHMgaW4gYSBkaWFsb2dcblx0Y29uc3Qgc2hvd0FsbEV2ZW50cyA9IChkYXk6IERheWpzLCBldmVudHM6IENhbGVuZGFyRXZlbnRbXSkgPT4ge1xuXHRcdGFsbEV2ZW50c0RpYWxvZ1JlZi5jdXJyZW50Py5zZXRTZWxlY3RlZERheUV2ZW50cyh7XG5cdFx0XHRkYXksXG5cdFx0XHRldmVudHMsXG5cdFx0fSlcblx0XHRhbGxFdmVudHNEaWFsb2dSZWYuY3VycmVudD8ub3BlbigpXG5cdH1cblxuXHRjb25zdCBpc0N1cnJlbnRNb250aCA9IGRheS5tb250aCgpID09PSBjdXJyZW50RGF0ZS5tb250aCgpXG5cblx0Y29uc3QgaGlkZGVuRXZlbnRzQ291bnQgPSB0b2RheUV2ZW50cy5sZW5ndGggLSBkYXlNYXhFdmVudHNcblx0Y29uc3QgaGFzSGlkZGVuRXZlbnRzID0gaGlkZGVuRXZlbnRzQ291bnQgPiAwXG5cblx0Y29uc3QgaXNCdXNpbmVzcyA9IGlzQnVzaW5lc3NIb3VyKHtcblx0XHRkYXRlOiBkYXksXG5cdFx0aG91cjogZ3JpZFR5cGUgPT09ICdob3VyJyA/IGRheS5ob3VyKCkgOiB1bmRlZmluZWQsXG5cdFx0YnVzaW5lc3NIb3VyczogZWZmZWN0aXZlQnVzaW5lc3NIb3Vycyxcblx0fSlcblxuXHRjb25zdCB0ZXN0SWQgPVxuXHRcdGdyaWRUeXBlID09PSAnaG91cidcblx0XHRcdD8ga2V5cy5jZWxsLmRheShkYXksIGRheS5mb3JtYXQoJ0hIJyksIGRheS5mb3JtYXQoJ21tJykpXG5cdFx0XHQ6IGtleXMuY2VsbC5kYXkoZGF5KVxuXHRjb25zdCBkcm9wcGFibGVJZCA9IGtleXMuZHJvcHBhYmxlLmRheUNlbGwoZGF5LCB7IGFsbERheSwgcmVzb3VyY2VJZCB9KVxuXG5cdHJldHVybiAoXG5cdFx0PD5cblx0XHRcdDxEcm9wcGFibGVDZWxsXG5cdFx0XHRcdGFsbERheT17YWxsRGF5fVxuXHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdCdjdXJzb3ItcG9pbnRlciBvdmVyZmxvdy1jbGlwIHAtMSBob3ZlcjpiZy1hY2NlbnQgbWluLWgtWzYwcHhdIHJlbGF0aXZlIGJvcmRlci1yIGJvcmRlci1iIG1pbi13LTAnLFxuXHRcdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0XHQpfVxuXHRcdFx0XHRkYXRhLXRlc3RpZD17ZGF0YVRlc3RJZCB8fCB0ZXN0SWR9XG5cdFx0XHRcdGRhdGU9e2RheX1cblx0XHRcdFx0ZGlzYWJsZWQ9eyFpc0J1c2luZXNzIHx8ICFpc0N1cnJlbnRNb250aH1cblx0XHRcdFx0aG91cj17aG91cn1cblx0XHRcdFx0aWQ9e2Ryb3BwYWJsZUlkfVxuXHRcdFx0XHRtaW51dGU9e21pbnV0ZX1cblx0XHRcdFx0cmVzb3VyY2VJZD17cmVzb3VyY2VJZH1cblx0XHRcdFx0dHlwZT1cImRheS1jZWxsXCJcblx0XHRcdD5cblx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgaC1mdWxsIHctZnVsbFwiXG5cdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9XCJncmlkLWNlbGwtY29udGVudFwiXG5cdFx0XHRcdFx0c3R5bGU9e3sgZ2FwOiBgJHtldmVudFNwYWNpbmd9cHhgIH19XG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7c2hvd0RheU51bWJlciAmJiA8RGF5TnVtYmVyIGRhdGU9e2RheX0gbG9jYWxlPXtjdXJyZW50TG9jYWxlfSAvPn1cblxuXHRcdFx0XHRcdHtzaG91bGRSZW5kZXJFdmVudHMgJiYgKFxuXHRcdFx0XHRcdFx0PD5cblx0XHRcdFx0XHRcdFx0ey8qIFJlbmRlciBwbGFjZWhvbGRlcnMgZm9yIGV2ZW50cyB0aGF0IG9jY3VyIHRvZGF5IHNvIHRoYXQgdGhlIGNlbGwgaGVpZ2h0IGlzIGFjY29yZGluZyB0byBkYXlNYXhFdmVudHMuICovfVxuXHRcdFx0XHRcdFx0XHR7dG9kYXlFdmVudHMuc2xpY2UoMCwgZGF5TWF4RXZlbnRzKS5tYXAoKGV2ZW50LCByb3dJbmRleCkgPT4gKFxuXHRcdFx0XHRcdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cInctZnVsbCBzaHJpbmstMFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD17ZXZlbnQ/LnRpdGxlfVxuXHRcdFx0XHRcdFx0XHRcdFx0a2V5PXtrZXlzLmxpc3RLZXkoJ2VtcHR5Jywgcm93SW5kZXgsIGV2ZW50LmlkKX1cblx0XHRcdFx0XHRcdFx0XHRcdHN0eWxlPXt7IGhlaWdodDogYCR7ZXZlbnRIZWlnaHR9cHhgIH19XG5cdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0KSl9XG5cblx0XHRcdFx0XHRcdFx0ey8qIFNob3cgbW9yZSBldmVudHMgYnV0dG9uIHdpdGggYWNjdXJhdGUgY291bnQgKi99XG5cdFx0XHRcdFx0XHRcdHtoYXNIaWRkZW5FdmVudHMgJiYgKFxuXHRcdFx0XHRcdFx0XHRcdC8vIGJpb21lLWlnbm9yZSBsaW50L2ExMXkvdXNlU2VtYW50aWNFbGVtZW50czogVXNpbmcgZGl2IGFzIGJ1dHRvblxuXHRcdFx0XHRcdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cInRleHQtbXV0ZWQtZm9yZWdyb3VuZCBob3Zlcjp0ZXh0LWZvcmVncm91bmQgY3Vyc29yLXBvaW50ZXIgdGV4dC1bMTBweF0gd2hpdGVzcGFjZS1ub3dyYXAgc206dGV4dC14cyBzaHJpbmstMCBtdC0xXCJcblx0XHRcdFx0XHRcdFx0XHRcdG9uQ2xpY2s9eyhlKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGUuc3RvcFByb3BhZ2F0aW9uKClcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRzaG93QWxsRXZlbnRzKGRheSwgdG9kYXlFdmVudHMpXG5cdFx0XHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHRcdFx0b25LZXlEb3duPXsoZSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoZS5rZXkgPT09ICdFbnRlcicgfHwgZS5rZXkgPT09ICcgJykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGUucHJldmVudERlZmF1bHQoKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGUuc3RvcFByb3BhZ2F0aW9uKClcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzaG93QWxsRXZlbnRzKGRheSwgdG9kYXlFdmVudHMpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHRcdFx0XHRyb2xlPVwiYnV0dG9uXCJcblx0XHRcdFx0XHRcdFx0XHRcdHRhYkluZGV4PXswfVxuXHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdCt7aGlkZGVuRXZlbnRzQ291bnR9IHt0KCdtb3JlJyl9XG5cdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHQ8Lz5cblx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdHtjaGlsZHJlbn1cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQ8L0Ryb3BwYWJsZUNlbGw+XG5cblx0XHRcdHsvKiBEaWFsb2cgZm9yIHNob3dpbmcgYWxsIGV2ZW50cyAqL31cblx0XHRcdDxBbGxFdmVudERpYWxvZyByZWY9e2FsbEV2ZW50c0RpYWxvZ1JlZn0gLz5cblx0XHQ8Lz5cblx0KVxufVxuXG5leHBvcnQgY29uc3QgR3JpZENlbGwgPSBtZW1vKE5vTWVtb0dyaWRDZWxsKSBhcyB0eXBlb2YgTm9NZW1vR3JpZENlbGxcbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgaXNUb2RheSB9IGZyb20gJ0AvbGliL3V0aWxzL2RhdGUtdXRpbHMnXG5pbXBvcnQgeyBrZXlzIH0gZnJvbSAnQC9saWIvdXRpbHMva2V5cydcblxuaW50ZXJmYWNlIERheU51bWJlclByb3BzIHtcblx0ZGF0ZTogRGF5anNcblx0bG9jYWxlPzogc3RyaW5nXG5cdGNsYXNzTmFtZT86IHN0cmluZ1xufVxuXG4vKipcbiAqIFJlbmRlcnMgdGhlIGRheSBudW1iZXIgZm9yIGEgY2FsZW5kYXIgY2VsbCwgaGlnaGxpZ2h0aW5nICd0b2RheScgd2l0aCBhIHByaW1hcnkgYmFja2dyb3VuZC5cbiAqL1xuZXhwb3J0IGNvbnN0IERheU51bWJlcjogUmVhY3QuRkM8RGF5TnVtYmVyUHJvcHM+ID0gKHsgZGF0ZSwgY2xhc3NOYW1lIH0pID0+IHtcblx0Y29uc3QgdG9kYXkgPSBpc1RvZGF5KGRhdGUpXG5cblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQnZmxleCBoLTUgdy01IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLWZ1bGwgdGV4dC14cyBzaHJpbmstMCcsXG5cdFx0XHRcdHRvZGF5ICYmICdiZy1wcmltYXJ5IHRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIGZvbnQtbWVkaXVtJyxcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0ZGF0YS10ZXN0aWQ9e2tleXMuZGF5TnVtYmVyKGRhdGUpfVxuXHRcdD5cblx0XHRcdHtkYXRlLmZvcm1hdCgnRCcpfVxuXHRcdDwvZGl2PlxuXHQpXG59XG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlSW1wZXJhdGl2ZUhhbmRsZSwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cydcbmltcG9ydCB7IERyYWdnYWJsZUV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL2RyYWdnYWJsZS1ldmVudC9kcmFnZ2FibGUtZXZlbnQnXG5pbXBvcnQge1xuXHREaWFsb2csXG5cdERpYWxvZ0NvbnRlbnQsXG5cdERpYWxvZ0hlYWRlcixcblx0RGlhbG9nVGl0bGUsXG59IGZyb20gJ0AvY29tcG9uZW50cy91aS9kaWFsb2cnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSB7IERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5leHBvcnQgaW50ZXJmYWNlIFNlbGVjdGVkRGF5RXZlbnRzIHtcblx0ZGF5OiBEYXlqc1xuXHRldmVudHM6IENhbGVuZGFyRXZlbnRbXVxufVxuXG5pbnRlcmZhY2UgQWxsRXZlbnREaWFsb2dQcm9wcyB7XG5cdHJlZjogUmVhY3QuUmVmPHtcblx0XHRvcGVuOiAoKSA9PiB2b2lkXG5cdFx0Y2xvc2U6ICgpID0+IHZvaWRcblx0XHRzZXRTZWxlY3RlZERheUV2ZW50czogKGRheUV2ZW50czogU2VsZWN0ZWREYXlFdmVudHMpID0+IHZvaWRcblx0fT5cbn1cblxuZXhwb3J0IGNvbnN0IEFsbEV2ZW50RGlhbG9nOiBSZWFjdC5GQzxBbGxFdmVudERpYWxvZ1Byb3BzPiA9ICh7IHJlZiB9KSA9PiB7XG5cdGNvbnN0IFtkaWFsb2dPcGVuLCBzZXREaWFsb2dPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKVxuXHRjb25zdCBbc2VsZWN0ZWREYXlFdmVudHMsIHNldFNlbGVjdGVkRGF5RXZlbnRzXSA9XG5cdFx0dXNlU3RhdGU8U2VsZWN0ZWREYXlFdmVudHMgfCBudWxsPihudWxsKVxuXHRjb25zdCB7IGN1cnJlbnREYXRlLCBmaXJzdERheU9mV2VlaywgZXZlbnRIZWlnaHQgfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblxuXHR1c2VJbXBlcmF0aXZlSGFuZGxlKHJlZiwgKCkgPT4gKHtcblx0XHRvcGVuOiAoKSA9PiBzZXREaWFsb2dPcGVuKHRydWUpLFxuXHRcdGNsb3NlOiAoKSA9PiBzZXREaWFsb2dPcGVuKGZhbHNlKSxcblx0XHRzZXRTZWxlY3RlZERheUV2ZW50czogKGRheUV2ZW50czogU2VsZWN0ZWREYXlFdmVudHMpID0+XG5cdFx0XHRzZXRTZWxlY3RlZERheUV2ZW50cyhkYXlFdmVudHMpLFxuXHR9KSlcblxuXHQvLyBHZXQgc3RhcnQgZGF0ZSBmb3IgdGhlIGN1cnJlbnQgbW9udGggdmlldyBiYXNlZCBvbiBmaXJzdERheU9mV2Vla1xuXHRjb25zdCBmaXJzdERheU9mTW9udGggPSBjdXJyZW50RGF0ZS5zdGFydE9mKCdtb250aCcpXG5cblx0Ly8gQ2FsY3VsYXRlIHRoZSBmaXJzdCBkYXkgb2YgdGhlIGNhbGVuZGFyIGdyaWQgY29ycmVjdGx5XG5cdC8vIEZpbmQgdGhlIGZpcnN0IGRheSBvZiB3ZWVrIChlLmcuIFN1bmRheSBvciBNb25kYXkpIHRoYXQgY29tZXMgYmVmb3JlIG9yIG9uIHRoZSBmaXJzdCBkYXkgb2YgdGhlIG1vbnRoXG5cdGxldCBhZGp1c3RlZEZpcnN0RGF5T2ZDYWxlbmRhciA9IGZpcnN0RGF5T2ZNb250aC5jbG9uZSgpXG5cdHdoaWxlIChhZGp1c3RlZEZpcnN0RGF5T2ZDYWxlbmRhci5kYXkoKSAhPT0gZmlyc3REYXlPZldlZWspIHtcblx0XHRhZGp1c3RlZEZpcnN0RGF5T2ZDYWxlbmRhciA9IGFkanVzdGVkRmlyc3REYXlPZkNhbGVuZGFyLnN1YnRyYWN0KDEsICdkYXknKVxuXHR9XG5cblx0cmV0dXJuIChcblx0XHQ8RGlhbG9nIG9uT3BlbkNoYW5nZT17c2V0RGlhbG9nT3Blbn0gb3Blbj17ZGlhbG9nT3Blbn0+XG5cdFx0XHQ8RGlhbG9nQ29udGVudCBjbGFzc05hbWU9XCJtYXgtaC1bODB2aF0gbWF4LXctbWQgb3ZlcmZsb3cteS1hdXRvXCI+XG5cdFx0XHRcdDxEaWFsb2dIZWFkZXI+XG5cdFx0XHRcdFx0PERpYWxvZ1RpdGxlPlxuXHRcdFx0XHRcdFx0e3NlbGVjdGVkRGF5RXZlbnRzPy5kYXkuZm9ybWF0KCdNTU1NIEQsIFlZWVknKX1cblx0XHRcdFx0XHQ8L0RpYWxvZ1RpdGxlPlxuXHRcdFx0XHQ8L0RpYWxvZ0hlYWRlcj5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJtdC00IHNwYWNlLXktM1wiPlxuXHRcdFx0XHRcdHtzZWxlY3RlZERheUV2ZW50cz8uZXZlbnRzLm1hcCgoZXZlbnQpID0+IHtcblx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdDxEcmFnZ2FibGVFdmVudFxuXHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cInJlbGF0aXZlIG15LTFcIiAvLyBVc2UgZXZlbnQgSUQgZm9yIHVuaXF1ZSBpZGVudGlmaWNhdGlvblxuXHRcdFx0XHRcdFx0XHRcdGVsZW1lbnRJZD17YGFsbC1ldmVudHMtZGlhbG9nLWV2ZW50LSQke2V2ZW50LmlkfWB9XG5cdFx0XHRcdFx0XHRcdFx0ZXZlbnQ9e2V2ZW50fVxuXHRcdFx0XHRcdFx0XHRcdGtleT17ZXZlbnQuaWR9XG5cdFx0XHRcdFx0XHRcdFx0c3R5bGU9e3sgaGVpZ2h0OiBgJHtldmVudEhlaWdodH1weGAgfX1cblx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHR9KX1cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQ8L0RpYWxvZ0NvbnRlbnQ+XG5cdFx0PC9EaWFsb2c+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHsgdXNlRHJhZ2dhYmxlIH0gZnJvbSAnQGRuZC1raXQvY29yZSdcbmltcG9ydCB0eXBlIHsgQ1NTUHJvcGVydGllcyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgbWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQW5pbWF0ZWRTZWN0aW9uIH0gZnJvbSAnQC9jb21wb25lbnRzL2FuaW1hdGlvbnMvYW5pbWF0ZWQtc2VjdGlvbidcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmNvbnN0IGdldEJvcmRlclJhZGl1c0NsYXNzID0gKFxuXHRpc1RydW5jYXRlZFN0YXJ0OiBib29sZWFuLFxuXHRpc1RydW5jYXRlZEVuZDogYm9vbGVhblxuKSA9PiB7XG5cdGlmIChpc1RydW5jYXRlZFN0YXJ0ICYmIGlzVHJ1bmNhdGVkRW5kKSB7XG5cdFx0cmV0dXJuICdyb3VuZGVkLW5vbmUnXG5cdH1cblx0aWYgKGlzVHJ1bmNhdGVkU3RhcnQpIHtcblx0XHRyZXR1cm4gJ3JvdW5kZWQtci1tZCByb3VuZGVkLWwtbm9uZSdcblx0fVxuXHRpZiAoaXNUcnVuY2F0ZWRFbmQpIHtcblx0XHRyZXR1cm4gJ3JvdW5kZWQtbC1tZCByb3VuZGVkLXItbm9uZSdcblx0fVxuXHRyZXR1cm4gJ3JvdW5kZWQtbWQnXG59XG5cbmZ1bmN0aW9uIERyYWdnYWJsZUV2ZW50VW5tZW1vaXplZCh7XG5cdGVsZW1lbnRJZCxcblx0ZXZlbnQsXG5cdGNsYXNzTmFtZSxcblx0c3R5bGUsXG5cdGRpc2FibGVEcmFnID0gZmFsc2UsXG59OiB7XG5cdGVsZW1lbnRJZDogc3RyaW5nXG5cdGNsYXNzTmFtZT86IHN0cmluZ1xuXHRzdHlsZT86IENTU1Byb3BlcnRpZXNcblx0ZXZlbnQ6IENhbGVuZGFyRXZlbnRcblx0ZGlzYWJsZURyYWc/OiBib29sZWFuXG59KSB7XG5cdGNvbnN0IHsgb25FdmVudENsaWNrLCByZW5kZXJFdmVudCwgZGlzYWJsZUV2ZW50Q2xpY2ssIGRpc2FibGVEcmFnQW5kRHJvcCB9ID1cblx0XHR1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cblx0Y29uc3QgeyBhdHRyaWJ1dGVzLCBsaXN0ZW5lcnMsIHNldE5vZGVSZWYsIGlzRHJhZ2dpbmcgfSA9IHVzZURyYWdnYWJsZSh7XG5cdFx0aWQ6IGVsZW1lbnRJZCxcblx0XHRkYXRhOiB7XG5cdFx0XHRldmVudCxcblx0XHRcdHR5cGU6ICdjYWxlbmRhci1ldmVudCcsXG5cdFx0fSxcblx0XHRkaXNhYmxlZDogZGlzYWJsZURyYWcgfHwgZGlzYWJsZURyYWdBbmREcm9wLFxuXHR9KVxuXG5cdC8vIERlZmF1bHQgZXZlbnQgY29udGVudCB0byByZW5kZXIgaWYgY3VzdG9tIHJlbmRlckV2ZW50IGlzIG5vdCBwcm92aWRlZFxuXHRjb25zdCBEZWZhdWx0RXZlbnRDb250ZW50ID0gKCkgPT4ge1xuXHRcdC8vIENoZWNrIGlmIHRoaXMgZXZlbnQgaGFzIHRydW5jYXRpb24gaW5mb3JtYXRpb25cblx0XHRjb25zdCBlbmhhbmNlZEV2ZW50ID0gZXZlbnQgYXMgdW5rbm93biBhcyB7XG5cdFx0XHRpc1RydW5jYXRlZFN0YXJ0PzogYm9vbGVhblxuXHRcdFx0aXNUcnVuY2F0ZWRFbmQ/OiBib29sZWFuXG5cdFx0fVxuXHRcdGNvbnN0IGlzVHJ1bmNhdGVkU3RhcnQgPSBlbmhhbmNlZEV2ZW50LmlzVHJ1bmNhdGVkU3RhcnRcblx0XHRjb25zdCBpc1RydW5jYXRlZEVuZCA9IGVuaGFuY2VkRXZlbnQuaXNUcnVuY2F0ZWRFbmRcblxuXHRcdHJldHVybiAoXG5cdFx0XHQ8ZGl2XG5cdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0ZXZlbnQuYmFja2dyb3VuZENvbG9yIHx8ICdiZy1ibHVlLTUwMCcsXG5cdFx0XHRcdFx0ZXZlbnQuY29sb3IgfHwgJ3RleHQtd2hpdGUnLFxuXHRcdFx0XHRcdCdoLWZ1bGwgdy1mdWxsIHB4LTEgYm9yZGVyLVsxLjVweF0gYm9yZGVyLWNhcmQgdGV4dC1sZWZ0IG92ZXJmbG93LWNsaXAgcmVsYXRpdmUnLFxuXHRcdFx0XHRcdGdldEJvcmRlclJhZGl1c0NsYXNzKFxuXHRcdFx0XHRcdFx0Qm9vbGVhbihpc1RydW5jYXRlZFN0YXJ0KSxcblx0XHRcdFx0XHRcdEJvb2xlYW4oaXNUcnVuY2F0ZWRFbmQpXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHQpfVxuXHRcdFx0XHRzdHlsZT17eyBiYWNrZ3JvdW5kQ29sb3I6IGV2ZW50LmJhY2tncm91bmRDb2xvciwgY29sb3I6IGV2ZW50LmNvbG9yIH19XG5cdFx0XHQ+XG5cdFx0XHRcdHsvKiBMZWZ0IGNvbnRpbnVhdGlvbiBpbmRpY2F0b3IgKi99XG5cdFx0XHRcdHtpc1RydW5jYXRlZFN0YXJ0ICYmIChcblx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImFic29sdXRlIGxlZnQtMCB0b3AtMCBib3R0b20tMCB3LTAuNSBiZy1mb3JlZ3JvdW5kLzI1XCI+PC9kaXY+XG5cdFx0XHRcdCl9XG5cblx0XHRcdFx0ey8qIEV2ZW50IHRpdGxlICovfVxuXHRcdFx0XHQ8cFxuXHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHQndGV4dC1bMTBweF0gZm9udC1zZW1pYm9sZCBzbTp0ZXh0LXhzIG10LTAuNScsXG5cdFx0XHRcdFx0XHQvLyBBZGQgc2xpZ2h0IHBhZGRpbmcgdG8gYXZvaWQgb3ZlcmxhcCB3aXRoIGluZGljYXRvcnNcblx0XHRcdFx0XHRcdGlzVHJ1bmNhdGVkU3RhcnQgJiYgJ3BsLTEnLFxuXHRcdFx0XHRcdFx0aXNUcnVuY2F0ZWRFbmQgJiYgJ3ByLTEnXG5cdFx0XHRcdFx0KX1cblx0XHRcdFx0PlxuXHRcdFx0XHRcdHtldmVudC50aXRsZX1cblx0XHRcdFx0PC9wPlxuXG5cdFx0XHRcdHsvKiBSaWdodCBjb250aW51YXRpb24gaW5kaWNhdG9yICovfVxuXHRcdFx0XHR7aXNUcnVuY2F0ZWRFbmQgJiYgKFxuXHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiYWJzb2x1dGUgcmlnaHQtMCB0b3AtMCBib3R0b20tMCB3LTAuNSBiZy1mb3JlZ3JvdW5kLzI1XCI+PC9kaXY+XG5cdFx0XHRcdCl9XG5cdFx0XHQ8L2Rpdj5cblx0XHQpXG5cdH1cblxuXHRyZXR1cm4gKFxuXHRcdDxBbmltYXRlZFNlY3Rpb25cblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCd0cnVuY2F0ZSBoLWZ1bGwgdy1mdWxsJyxcblx0XHRcdFx0ZGlzYWJsZURyYWcgfHwgZGlzYWJsZURyYWdBbmREcm9wXG5cdFx0XHRcdFx0PyBkaXNhYmxlRXZlbnRDbGlja1xuXHRcdFx0XHRcdFx0PyAnY3Vyc29yLWRlZmF1bHQnXG5cdFx0XHRcdFx0XHQ6ICdjdXJzb3ItcG9pbnRlcidcblx0XHRcdFx0XHQ6ICdjdXJzb3ItZ3JhYicsXG5cdFx0XHRcdGlzRHJhZ2dpbmcgJiZcblx0XHRcdFx0XHQhKGRpc2FibGVEcmFnIHx8IGRpc2FibGVEcmFnQW5kRHJvcCkgJiZcblx0XHRcdFx0XHQnY3Vyc29yLWdyYWJiaW5nIHNoYWRvdy1sZycsXG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHRcdGxheW91dD17dHJ1ZX1cblx0XHRcdGxheW91dElkPXtlbGVtZW50SWR9XG5cdFx0XHRvbkNsaWNrPXsoZSkgPT4ge1xuXHRcdFx0XHRlLnN0b3BQcm9wYWdhdGlvbigpXG5cdFx0XHRcdG9uRXZlbnRDbGljayhldmVudClcblx0XHRcdH19XG5cdFx0XHRyZWY9e3NldE5vZGVSZWZ9XG5cdFx0XHRzdHlsZT17c3R5bGV9XG5cdFx0XHR0cmFuc2l0aW9uS2V5PXtlbGVtZW50SWR9XG5cdFx0XHR7Li4uYXR0cmlidXRlc31cblx0XHRcdHsuLi5saXN0ZW5lcnN9XG5cdFx0PlxuXHRcdFx0ey8qIFVzZSBjdXN0b20gcmVuZGVyRXZlbnQgZnJvbSBjb250ZXh0IGlmIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIHVzZSBkZWZhdWx0ICovfVxuXHRcdFx0e3JlbmRlckV2ZW50ID8gcmVuZGVyRXZlbnQoZXZlbnQpIDogPERlZmF1bHRFdmVudENvbnRlbnQgLz59XG5cdFx0PC9BbmltYXRlZFNlY3Rpb24+XG5cdClcbn1cblxuZXhwb3J0IGNvbnN0IERyYWdnYWJsZUV2ZW50ID0gbWVtbyhcblx0RHJhZ2dhYmxlRXZlbnRVbm1lbW9pemVkLFxuXHQocHJldlByb3BzLCBuZXh0UHJvcHMpID0+IHtcblx0XHQvLyBDb21wYXJlIHRoZSBlc3NlbnRpYWwgcHJvcHMgdG8gcHJldmVudCB1bm5lY2Vzc2FyeSByZS1yZW5kZXJzXG5cdFx0cmV0dXJuIChcblx0XHRcdHByZXZQcm9wcy5lbGVtZW50SWQgPT09IG5leHRQcm9wcy5lbGVtZW50SWQgJiZcblx0XHRcdHByZXZQcm9wcy5kaXNhYmxlRHJhZyA9PT0gbmV4dFByb3BzLmRpc2FibGVEcmFnICYmXG5cdFx0XHRwcmV2UHJvcHMuY2xhc3NOYW1lID09PSBuZXh0UHJvcHMuY2xhc3NOYW1lICYmXG5cdFx0XHRwcmV2UHJvcHMuZXZlbnQgPT09IG5leHRQcm9wcy5ldmVudFxuXHRcdClcblx0fVxuKVxuIiwKICAgICIvLyBveGxpbnQtZGlzYWJsZSBuby1uZWdhdGVkLWNvbmRpdGlvblxuXG5pbXBvcnQgeyB1c2VEcm9wcGFibGUgfSBmcm9tICdAZG5kLWtpdC9jb3JlJ1xuaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSB7IERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBESVNBQkxFRF9DRUxMX0NMQVNTTkFNRSB9IGZyb20gJ0AvbGliL2NvbnN0YW50cydcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmludGVyZmFjZSBEcm9wcGFibGVDZWxsUHJvcHMge1xuXHRpZDogc3RyaW5nXG5cdHR5cGU6ICdkYXktY2VsbCcgfCAndGltZS1jZWxsJ1xuXHRkYXRlOiBEYXlqc1xuXHRob3VyPzogbnVtYmVyXG5cdG1pbnV0ZT86IG51bWJlclxuXHRyZXNvdXJjZUlkPzogc3RyaW5nIHwgbnVtYmVyXG5cdGFsbERheT86IGJvb2xlYW5cblx0Y2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGVcblx0Y2xhc3NOYW1lPzogc3RyaW5nXG5cdHN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllc1xuXHQnZGF0YS10ZXN0aWQnPzogc3RyaW5nXG5cdGRpc2FibGVkPzogYm9vbGVhblxufVxuXG5leHBvcnQgZnVuY3Rpb24gRHJvcHBhYmxlQ2VsbCh7XG5cdGlkLFxuXHR0eXBlLFxuXHRkYXRlLFxuXHRob3VyLFxuXHRtaW51dGUsXG5cdHJlc291cmNlSWQsXG5cdGFsbERheSxcblx0Y2hpbGRyZW4sXG5cdGNsYXNzTmFtZSxcblx0c3R5bGUsXG5cdCdkYXRhLXRlc3RpZCc6IGRhdGFUZXN0SWQsXG5cdGRpc2FibGVkID0gZmFsc2UsXG59OiBEcm9wcGFibGVDZWxsUHJvcHMpIHtcblx0Y29uc3Qge1xuXHRcdG9uQ2VsbENsaWNrLFxuXHRcdGRpc2FibGVEcmFnQW5kRHJvcCxcblx0XHRkaXNhYmxlQ2VsbENsaWNrLFxuXHRcdGNsYXNzZXNPdmVycmlkZSxcblx0XHR2aWV3LFxuXHR9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXG5cdGNvbnN0IHsgaXNPdmVyLCBzZXROb2RlUmVmIH0gPSB1c2VEcm9wcGFibGUoe1xuXHRcdGlkLFxuXHRcdGRhdGE6IHtcblx0XHRcdHR5cGUsXG5cdFx0XHRkYXRlLFxuXHRcdFx0aG91cixcblx0XHRcdG1pbnV0ZSxcblx0XHRcdHJlc291cmNlSWQsXG5cdFx0XHRhbGxEYXksXG5cdFx0fSxcblx0XHRkaXNhYmxlZDogZGlzYWJsZURyYWdBbmREcm9wIHx8IGRpc2FibGVkLFxuXHR9KVxuXG5cdGNvbnN0IGhhbmRsZUNlbGxDbGljayA9IChlOiBSZWFjdC5Nb3VzZUV2ZW50KSA9PiB7XG5cdFx0ZS5zdG9wUHJvcGFnYXRpb24oKVxuXG5cdFx0aWYgKGRpc2FibGVDZWxsQ2xpY2sgfHwgZGlzYWJsZWQpIHtcblx0XHRcdHJldHVyblxuXHRcdH1cblxuXHRcdGNvbnN0IHN0YXJ0ID0gZGF0ZS5ob3VyKGhvdXIgPz8gMCkubWludXRlKG1pbnV0ZSA/PyAwKVxuXHRcdGxldCBlbmQgPSBzdGFydC5jbG9uZSgpXG5cdFx0aWYgKGhvdXIgIT09IHVuZGVmaW5lZCAmJiBtaW51dGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0ZW5kID0gZW5kLmhvdXIoaG91cikubWludXRlKG1pbnV0ZSArIDE1KSAvLyBkYXkgdmlldyB0aW1lIHNsb3RzIGFyZSAxNSBtaW51dGVzXG5cdFx0fSBlbHNlIGlmIChob3VyICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGVuZCA9IGVuZC5ob3VyKGhvdXIgKyAxKS5taW51dGUoMCkgLy8gd2VlayB2aWV3IHRpbWUgc2xvdHMgYXJlIDEgaG91clxuXHRcdH0gZWxzZSB7XG5cdFx0XHRlbmQgPSBlbmQuaG91cigyMykubWludXRlKDU5KSAvLyBtb250aCB2aWV3IGZ1bGwgZGF5XG5cdFx0fVxuXG5cdFx0b25DZWxsQ2xpY2soeyBzdGFydCwgZW5kLCByZXNvdXJjZUlkLCBhbGxEYXkgfSlcblx0fVxuXG5cdHJldHVybiAoXG5cdFx0Ly8gYmlvbWUtaWdub3JlIGxpbnQvYTExeS9ub1N0YXRpY0VsZW1lbnRJbnRlcmFjdGlvbnM6IFRoZSBjZWxsIGlzIGludGVyYWN0aXZlIGZvciBldmVudCBjcmVhdGlvblxuXHRcdC8vIGJpb21lLWlnbm9yZSBsaW50L2ExMXkvdXNlS2V5V2l0aENsaWNrRXZlbnRzOiBLZXkgZXZlbnRzIGFyZSBoYW5kbGVkIGJ5IHBhcmVudCBjb21wb25lbnRzXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0J2Ryb3BwYWJsZS1jZWxsJyxcblx0XHRcdFx0Y2xhc3NOYW1lLFxuXHRcdFx0XHRpc092ZXIgJiYgIWRpc2FibGVEcmFnQW5kRHJvcCAmJiAhZGlzYWJsZWQgJiYgJ2JnLWFjY2VudCcsXG5cdFx0XHRcdGRpc2FibGVDZWxsQ2xpY2sgfHwgZGlzYWJsZWQgPyAnY3Vyc29yLWRlZmF1bHQnIDogJ2N1cnNvci1wb2ludGVyJyxcblx0XHRcdFx0ZGlzYWJsZWQgJiYgKGNsYXNzZXNPdmVycmlkZT8uZGlzYWJsZWRDZWxsIHx8IERJU0FCTEVEX0NFTExfQ0xBU1NOQU1FKVxuXHRcdFx0KX1cblx0XHRcdGRhdGEtZGlzYWJsZWQ9e2Rpc2FibGVkLnRvU3RyaW5nKCl9XG5cdFx0XHRkYXRhLXRlc3RpZD17ZGF0YVRlc3RJZH1cblx0XHRcdGRhdGEtdmlldz17dmlld31cblx0XHRcdG9uQ2xpY2s9e2hhbmRsZUNlbGxDbGlja31cblx0XHRcdHJlZj17c2V0Tm9kZVJlZn1cblx0XHRcdHN0eWxlPXtzdHlsZX1cblx0XHQ+XG5cdFx0XHR7Y2hpbGRyZW59XG5cdFx0PC9kaXY+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBSZXNvdXJjZSB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvdHlwZXMnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5pbnRlcmZhY2UgUmVzb3VyY2VDZWxsUHJvcHMge1xuXHRyZXNvdXJjZTogUmVzb3VyY2Vcblx0Y2xhc3NOYW1lPzogc3RyaW5nXG5cdGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlXG5cdCdkYXRhLXRlc3RpZCc/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGNvbnN0IFJlc291cmNlQ2VsbDogUmVhY3QuRkM8UmVzb3VyY2VDZWxsUHJvcHM+ID0gKHtcblx0cmVzb3VyY2UsXG5cdGNsYXNzTmFtZSxcblx0Y2hpbGRyZW4sXG5cdCdkYXRhLXRlc3RpZCc6IGRhdGFUZXN0SWQsXG59KSA9PiB7XG5cdGNvbnN0IHsgcmVuZGVyUmVzb3VyY2UgfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblxuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCdmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBwLTIgYm9yZGVyLXIgbGFzdDpib3JkZXItci0wJyxcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0ZGF0YS10ZXN0aWQ9e2RhdGFUZXN0SWR9XG5cdFx0XHRzdHlsZT17e1xuXHRcdFx0XHRjb2xvcjogcmVzb3VyY2UuY29sb3IsXG5cdFx0XHRcdGJhY2tncm91bmRDb2xvcjogcmVzb3VyY2UuYmFja2dyb3VuZENvbG9yLFxuXHRcdFx0fX1cblx0XHQ+XG5cdFx0XHR7cmVuZGVyUmVzb3VyY2Vcblx0XHRcdFx0PyByZW5kZXJSZXNvdXJjZShyZXNvdXJjZSlcblx0XHRcdFx0OiAoY2hpbGRyZW4gPz8gKFxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIGZvbnQtbWVkaXVtIHRydW5jYXRlXCI+e3Jlc291cmNlLnRpdGxlfTwvZGl2PlxuXHRcdFx0XHRcdCkpfVxuXHRcdDwvZGl2PlxuXHQpXG59XG4iLAogICAgImltcG9ydCB7IG1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEN1cnJlbnRUaW1lSW5kaWNhdG9yIH0gZnJvbSAnQC9jb21wb25lbnRzL2N1cnJlbnQtdGltZS1pbmRpY2F0b3InXG5pbXBvcnQgeyBEcmFnZ2FibGVFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy9kcmFnZ2FibGUtZXZlbnQvZHJhZ2dhYmxlLWV2ZW50J1xuaW1wb3J0IHR5cGUgeyBSZXNvdXJjZSB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvdHlwZXMnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSB7IERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBrZXlzIH0gZnJvbSAnQC9saWIvdXRpbHMva2V5cydcbmltcG9ydCB0eXBlIHsgUG9zaXRpb25lZEV2ZW50IH0gZnJvbSAnQC9saWIvdXRpbHMvcG9zaXRpb24td2Vlay1ldmVudHMnXG5cbmV4cG9ydCBpbnRlcmZhY2UgSG9yaXpvbnRhbEdyaWRFdmVudHNMYXllclByb3BzIHtcblx0Z3JpZFR5cGU/OiAnZGF5JyB8ICdob3VyJ1xuXHRkYXlzOiBEYXlqc1tdXG5cdHJlc291cmNlSWQ/OiBzdHJpbmcgfCBudW1iZXJcblx0cmVzb3VyY2U/OiBSZXNvdXJjZVxuXHQnZGF0YS10ZXN0aWQnPzogc3RyaW5nXG5cdHBvc2l0aW9uZWRFdmVudHM6IFBvc2l0aW9uZWRFdmVudFtdXG59XG5cbmNvbnN0IE5vTWVtb0hvcml6b250YWxHcmlkRXZlbnRzTGF5ZXI6IFJlYWN0LkZDPFxuXHRIb3Jpem9udGFsR3JpZEV2ZW50c0xheWVyUHJvcHNcbj4gPSAoe1xuXHRncmlkVHlwZSA9ICdkYXknLFxuXHRkYXlzLFxuXHRyZXNvdXJjZUlkLFxuXHRyZXNvdXJjZSxcblx0J2RhdGEtdGVzdGlkJzogZGF0YVRlc3RJZCxcblx0cG9zaXRpb25lZEV2ZW50cyxcbn0pID0+IHtcblx0Y29uc3QgeyBldmVudEhlaWdodCB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXHRjb25zdCB3ZWVrU3RhcnQgPSBkYXlzLmF0KDApPy5zdGFydE9mKCdkYXknKVxuXG5cdC8vIE5vdy1saW5lIGlzIGdhdGVkIHRvIGhvdXItcmVzb2x1dGlvbiBob3Jpem9udGFsIGdyaWRzIChyZXNvdXJjZSBkYXkgaG9yaXpvbnRhbCxcblx0Ly8gcmVzb3VyY2Ugd2VlayBob3Jpem9udGFsIGhvdXJseSkuIERheS1yZXNvbHV0aW9uIGdyaWRzIOKAlCByZWd1bGFyIE1vbnRoVmlldyBhbmRcblx0Ly8gcmVzb3VyY2UgTW9udGhWaWV3IOKAlCBza2lwIGl0OyBhIDI0aC1wZXJjZW50YWdlIGxpbmUgcGVyIGNlbGwgd291bGQgYmUgYVxuXHQvLyBtZWFuaW5nbGVzcyAxcHggc2xpdmVyLlxuXHRjb25zdCByYW5nZVN0YXJ0ID0gZGF5cy5hdCgwKVxuXHRjb25zdCByYW5nZUVuZCA9IGRheXMuYXQoLTEpPy5hZGQoMSwgZ3JpZFR5cGUpXG5cdGNvbnN0IHNob3dOb3dMaW5lID0gZ3JpZFR5cGUgPT09ICdob3VyJyAmJiBCb29sZWFuKHJhbmdlU3RhcnQgJiYgcmFuZ2VFbmQpXG5cblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9XCJhYnNvbHV0ZSBpbnNldC0wIHBvaW50ZXItZXZlbnRzLW5vbmUgei0xMCBvdmVyZmxvdy1jbGlwXCJcblx0XHRcdGRhdGEtdGVzdGlkPXtkYXRhVGVzdElkfVxuXHRcdD5cblx0XHRcdHtzaG93Tm93TGluZSAmJiByYW5nZVN0YXJ0ICYmIHJhbmdlRW5kICYmIChcblx0XHRcdFx0PEN1cnJlbnRUaW1lSW5kaWNhdG9yXG5cdFx0XHRcdFx0YXhpcz1cImhvcml6b250YWxcIlxuXHRcdFx0XHRcdHJhbmdlRW5kPXtyYW5nZUVuZH1cblx0XHRcdFx0XHRyYW5nZVN0YXJ0PXtyYW5nZVN0YXJ0fVxuXHRcdFx0XHRcdHJlc291cmNlPXtyZXNvdXJjZX1cblx0XHRcdFx0Lz5cblx0XHRcdCl9XG5cdFx0XHR7cG9zaXRpb25lZEV2ZW50cy5tYXAoKGV2ZW50KSA9PiB7XG5cdFx0XHRcdGNvbnN0IGV2ZW50S2V5ID0gYCR7ZXZlbnQuaWR9LSR7ZXZlbnQucG9zaXRpb259LSR7d2Vla1N0YXJ0Py50b0lTT1N0cmluZygpfS0ke3Jlc291cmNlSWQgPz8gJ25vLXJlc291cmNlJ31gXG5cblx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJhYnNvbHV0ZSB6LTEwIHBvaW50ZXItZXZlbnRzLWF1dG8gb3ZlcmZsb3ctY2xpcFwiXG5cdFx0XHRcdFx0XHRkYXRhLWxlZnQ9e2V2ZW50LmxlZnR9XG5cdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD17a2V5cy5jb250YWluZXIuaG9yaXpvbnRhbC5ldmVudChldmVudC5pZCl9XG5cdFx0XHRcdFx0XHRkYXRhLXRvcD17ZXZlbnQudG9wfVxuXHRcdFx0XHRcdFx0ZGF0YS13aWR0aD17ZXZlbnQud2lkdGh9XG5cdFx0XHRcdFx0XHRrZXk9e2tleXMubGlzdEtleShldmVudEtleSwgJ3dyYXBwZXInKX1cblx0XHRcdFx0XHRcdHN0eWxlPXt7XG5cdFx0XHRcdFx0XHRcdGxlZnQ6IGBjYWxjKCR7ZXZlbnQubGVmdH0lICsgdmFyKC0tc3BhY2luZykgKiAwLjI1KWAsXG5cdFx0XHRcdFx0XHRcdHdpZHRoOiBgY2FsYygke2V2ZW50LndpZHRofSUgLSB2YXIoLS1zcGFjaW5nKSAqIDEpYCxcblx0XHRcdFx0XHRcdFx0dG9wOiBgJHtldmVudC50b3B9cHhgLFxuXHRcdFx0XHRcdFx0XHRoZWlnaHQ6IGAke2V2ZW50SGVpZ2h0fXB4YCxcblx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0PERyYWdnYWJsZUV2ZW50XG5cdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImgtZnVsbCB3LWZ1bGwgc2hhZG93XCJcblx0XHRcdFx0XHRcdFx0ZWxlbWVudElkPXtldmVudEtleX1cblx0XHRcdFx0XHRcdFx0ZXZlbnQ9e2V2ZW50fVxuXHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0KVxuXHRcdFx0fSl9XG5cdFx0PC9kaXY+XG5cdClcbn1cblxuZXhwb3J0IGNvbnN0IEhvcml6b250YWxHcmlkRXZlbnRzTGF5ZXIgPSBtZW1vKE5vTWVtb0hvcml6b250YWxHcmlkRXZlbnRzTGF5ZXIpXG4iLAogICAgImltcG9ydCB7IG1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgUmVzb3VyY2UgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL3R5cGVzJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUgeyBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuXG5pbnRlcmZhY2UgQ3VycmVudFRpbWVJbmRpY2F0b3JQcm9wcyB7XG5cdC8qKiBUaGUgc3RhcnQgZGF0ZS90aW1lIG9mIHRoZSBjb250YWluZXIncyB0aW1lbGluZSAoZS5nLiwgdG9wIG9mIHRoZSBjb2x1bW4pICovXG5cdHJhbmdlU3RhcnQ6IERheWpzXG5cdC8qKiBUaGUgZW5kIGRhdGUvdGltZSBvZiB0aGUgY29udGFpbmVyJ3MgdGltZWxpbmUgKGUuZy4sIGJvdHRvbSBvZiB0aGUgY29sdW1uKSAqL1xuXHRyYW5nZUVuZDogRGF5anNcblx0LyoqIE9wdGlvbmFsIHJlZmVyZW5jZSB0aW1lIGZvciBcIm5vd1wiICh1c2VmdWwgZm9yIHRlc3RpbmcpICovXG5cdG5vdz86IERheWpzXG5cdC8qKiBUaGUgcmVzb3VyY2UgYXNzb2NpYXRlZCB3aXRoIHRoaXMgY29sdW1uIChvcHRpb25hbCkgKi9cblx0cmVzb3VyY2U/OiBSZXNvdXJjZVxuXHQvKipcblx0ICogTGF5b3V0IGF4aXMgdGhlIGluZGljYXRvciBpcyByZW5kZXJlZCBhbG9uZy4gRGVmYXVsdHMgdG8gYCd2ZXJ0aWNhbCdgLlxuXHQgKiAtIGAndmVydGljYWwnYDogaG9yaXpvbnRhbCBsaW5lIHBvc2l0aW9uZWQgYnkgYHRvcDoge3Byb2dyZXNzfSVgIChkYXkvd2VlayB2ZXJ0aWNhbCBncmlkcykuXG5cdCAqIC0gYCdob3Jpem9udGFsJ2A6IHZlcnRpY2FsIGxpbmUgcG9zaXRpb25lZCBieSBgbGVmdDoge3Byb2dyZXNzfSVgIChob3Jpem9udGFsIHJlc291cmNlIGhvdXIgZ3JpZHMpLlxuXHQgKi9cblx0YXhpcz86ICd2ZXJ0aWNhbCcgfCAnaG9yaXpvbnRhbCdcbn1cblxuLyoqXG4gKiBSZW5kZXJzIGEgcmVkIG1hcmtlciBpbmRpY2F0aW5nIHRoZSBjdXJyZW50IHRpbWUgcmVsYXRpdmUgdG8gYSBjb250YWluZXIncyB0aW1lbGluZS5cbiAqIEhpZGVzIGl0c2VsZiB3aGVuIGBub3dgIGlzIG91dHNpZGUgdGhlIHJhbmdlLiBTd2l0Y2hlcyBvcmllbnRhdGlvbiB2aWEgdGhlIGBheGlzYCBwcm9wIOKAlFxuICogdmVydGljYWwgKGRlZmF1bHQpIGRyYXdzIGEgaG9yaXpvbnRhbCBsaW5lIGZvciB2ZXJ0aWNhbCBncmlkczsgaG9yaXpvbnRhbCBkcmF3cyBhIHZlcnRpY2FsXG4gKiBsaW5lIGZvciBob3Jpem9udGFsIHJlc291cmNlIGhvdXIgZ3JpZHMuIFN1cHBvcnRzIGN1c3RvbSByZW5kZXJpbmcgdmlhXG4gKiBgcmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3JgIGZyb20gY29udGV4dC5cbiAqL1xuY29uc3QgTm9NZW1vQ3VycmVudFRpbWVJbmRpY2F0b3IgPSAoe1xuXHRyYW5nZVN0YXJ0LFxuXHRyYW5nZUVuZCxcblx0bm93OiBwcm9wTm93LFxuXHRyZXNvdXJjZSxcblx0YXhpcyA9ICd2ZXJ0aWNhbCcsXG59OiBDdXJyZW50VGltZUluZGljYXRvclByb3BzKSA9PiB7XG5cdC8vIEdldCByZW5kZXIgZnVuY3Rpb24gYW5kIGN1cnJlbnQgdmlldyBmcm9tIGNvbnRleHRcblx0Y29uc3QgeyByZW5kZXJDdXJyZW50VGltZUluZGljYXRvciwgdmlldyB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoXG5cdFx0KHN0YXRlKSA9PiAoe1xuXHRcdFx0cmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3I6IHN0YXRlLnJlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yLFxuXHRcdFx0dmlldzogc3RhdGUudmlldyxcblx0XHR9KVxuXHQpXG5cblx0Y29uc3Qgbm93ID0gcHJvcE5vdyA/PyBkYXlqcygpXG5cblx0Ly8gQ2hlY2sgaWYgY3VycmVudCB0aW1lIGZhbGxzIHdpdGhpbiB0aGlzIHJhbmdlXG5cdGNvbnN0IGlzV2l0aGluUmFuZ2UgPSBub3cuaXNTYW1lT3JBZnRlcihyYW5nZVN0YXJ0KSAmJiBub3cuaXNCZWZvcmUocmFuZ2VFbmQpXG5cblx0aWYgKCFpc1dpdGhpblJhbmdlKSB7XG5cdFx0cmV0dXJuIG51bGxcblx0fVxuXG5cdGNvbnN0IHRvdGFsRHVyYXRpb24gPSByYW5nZUVuZC5kaWZmKHJhbmdlU3RhcnQsICdtaW51dGUnKVxuXHRjb25zdCBtaW51dGVzRnJvbVN0YXJ0ID0gbm93LmRpZmYocmFuZ2VTdGFydCwgJ21pbnV0ZScpXG5cdGNvbnN0IHByb2dyZXNzID0gKG1pbnV0ZXNGcm9tU3RhcnQgLyB0b3RhbER1cmF0aW9uKSAqIDEwMFxuXG5cdC8vIElmIGN1c3RvbSByZW5kZXIgZnVuY3Rpb24gaXMgcHJvdmlkZWQgdmlhIGNvbnRleHQsIHVzZSBpdFxuXHRpZiAocmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3IpIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PD5cblx0XHRcdFx0e3JlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yKHtcblx0XHRcdFx0XHRjdXJyZW50VGltZTogbm93LFxuXHRcdFx0XHRcdHJhbmdlU3RhcnQsXG5cdFx0XHRcdFx0cmFuZ2VFbmQsXG5cdFx0XHRcdFx0cHJvZ3Jlc3MsXG5cdFx0XHRcdFx0cmVzb3VyY2UsXG5cdFx0XHRcdFx0dmlldyxcblx0XHRcdFx0XHRheGlzLFxuXHRcdFx0XHR9KX1cblx0XHRcdDwvPlxuXHRcdClcblx0fVxuXG5cdC8vIERlZmF1bHQgaW5kaWNhdG9yIHJlbmRlcmluZ1xuXHRpZiAoYXhpcyA9PT0gJ2hvcml6b250YWwnKSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxkaXZcblx0XHRcdFx0Y2xhc3NOYW1lPVwiYWJzb2x1dGUgdG9wLTAgYm90dG9tLTAgdy0wLjUgYmctcmVkLTUwMCB6LTUwIHBvaW50ZXItZXZlbnRzLW5vbmVcIlxuXHRcdFx0XHRkYXRhLXRlc3RpZD1cImN1cnJlbnQtdGltZS1pbmRpY2F0b3JcIlxuXHRcdFx0XHRzdHlsZT17e1xuXHRcdFx0XHRcdGxlZnQ6IGAke3Byb2dyZXNzfSVgLFxuXHRcdFx0XHR9fVxuXHRcdFx0Lz5cblx0XHQpXG5cdH1cblxuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT1cImFic29sdXRlIGxlZnQtMCByaWdodC0wIGgtMC41IGJnLXJlZC01MDAgei01MCBwb2ludGVyLWV2ZW50cy1ub25lXCJcblx0XHRcdGRhdGEtdGVzdGlkPVwiY3VycmVudC10aW1lLWluZGljYXRvclwiXG5cdFx0XHRzdHlsZT17e1xuXHRcdFx0XHR0b3A6IGAke3Byb2dyZXNzfSVgLFxuXHRcdFx0fX1cblx0XHQvPlxuXHQpXG59XG5cbmV4cG9ydCBjb25zdCBDdXJyZW50VGltZUluZGljYXRvciA9IG1lbW8oTm9NZW1vQ3VycmVudFRpbWVJbmRpY2F0b3IpXG4iLAogICAgImltcG9ydCB7IG1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmludGVyZmFjZSBBbGxEYXlDZWxsUHJvcHMge1xuXHRjbGFzc05hbWU/OiBzdHJpbmdcbn1cblxuY29uc3QgTm9NZW1vQWxsRGF5Q2VsbDogUmVhY3QuRkM8QWxsRGF5Q2VsbFByb3BzPiA9ICh7IGNsYXNzTmFtZSB9KSA9PiB7XG5cdGNvbnN0IHsgdCB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCd3LTE2IGJvcmRlci1yIHNocmluay0wIHN0aWNreSBsZWZ0LTAgYmctYmFja2dyb3VuZCB6LTIwIGZsZXggYm9yZGVyLWIgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHB4LTEgdGV4dC14cyB0ZXh0LW11dGVkLWZvcmVncm91bmQnLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0PlxuXHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwidHJ1bmNhdGVcIj57dCgnYWxsRGF5Jyl9PC9zcGFuPlxuXHRcdDwvZGl2PlxuXHQpXG59XG5cbmV4cG9ydCBjb25zdCBBbGxEYXlDZWxsID0gbWVtbyhOb01lbW9BbGxEYXlDZWxsKVxuIiwKICAgICJpbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSB7IERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5cbmludGVyZmFjZSBIb3VyTGFiZWxQcm9wcyB7XG5cdGRhdGU6IERheWpzXG59XG5cbmV4cG9ydCBjb25zdCBIb3VyTGFiZWw6IFJlYWN0LkZDPEhvdXJMYWJlbFByb3BzPiA9ICh7IGRhdGUgfSkgPT4ge1xuXHRjb25zdCB7IHJlbmRlckhvdXIsIHRpbWVGb3JtYXQgfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblxuXHRpZiAocmVuZGVySG91cikge1xuXHRcdHJldHVybiA8PntyZW5kZXJIb3VyKGRhdGUpfTwvPlxuXHR9XG5cblx0cmV0dXJuIDw+e2RhdGUuZm9ybWF0KHRpbWVGb3JtYXQgPT09ICcxMi1ob3VyJyA/ICdoIEEnIDogJ0gnKX08Lz5cbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VSZWYgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IFNjcm9sbEFyZWEsIFNjcm9sbEJhciB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9zY3JvbGwtYXJlYSdcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgeyBrZXlzIH0gZnJvbSAnQC9saWIvdXRpbHMva2V5cydcbmltcG9ydCB7IHVzZVNjcm9sbFRvVGltZSB9IGZyb20gJy4vdXNlLXNjcm9sbC10by10aW1lJ1xuaW1wb3J0IHsgVmVydGljYWxHcmlkQ29sLCB0eXBlIFZlcnRpY2FsR3JpZENvbFByb3BzIH0gZnJvbSAnLi92ZXJ0aWNhbC1ncmlkLWNvbCdcbmltcG9ydCB7IFZlcnRpY2FsR3JpZEhlYWRlckNvbnRhaW5lciB9IGZyb20gJy4vdmVydGljYWwtZ3JpZC1oZWFkZXItY29udGFpbmVyJ1xuXG5pbnRlcmZhY2UgVmVydGljYWxHcmlkUHJvcHMge1xuXHRjb2x1bW5zOiBWZXJ0aWNhbEdyaWRDb2xQcm9wc1tdXG5cdGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlXG5cdGdyaWRUeXBlPzogJ2RheScgfCAnaG91cidcblx0dmFyaWFudD86ICdyZWd1bGFyJyB8ICdyZXNvdXJjZSdcblx0Y2xhc3Nlcz86IHsgaGVhZGVyPzogc3RyaW5nOyBib2R5Pzogc3RyaW5nOyBhbGxEYXk/OiBzdHJpbmcgfVxuXHRhbGxEYXlSb3c/OiBSZWFjdC5SZWFjdE5vZGVcblx0LyoqXG5cdCAqIEdyYW51bGFyaXR5IG9mIGVhY2ggaG91ciByb3cgaW4gbWludXRlcy4gRm9yd2FyZGVkIHRvIFZlcnRpY2FsR3JpZENvbC5cblx0ICovXG5cdHNsb3REdXJhdGlvbk1pbnV0ZXM/OiBudW1iZXJcblx0c3R5bGU/OiBSZWFjdC5DU1NQcm9wZXJ0aWVzXG59XG5cbmV4cG9ydCBjb25zdCBWZXJ0aWNhbEdyaWQ6IFJlYWN0LkZDPFZlcnRpY2FsR3JpZFByb3BzPiA9ICh7XG5cdGNvbHVtbnMsXG5cdGNoaWxkcmVuLFxuXHRncmlkVHlwZSA9ICdkYXknLFxuXHR2YXJpYW50ID0gJ3Jlc291cmNlJyxcblx0Y2xhc3Nlcyxcblx0YWxsRGF5Um93LFxuXHRzbG90RHVyYXRpb25NaW51dGVzLFxuXHRzdHlsZSxcbn0pID0+IHtcblx0Y29uc3QgaXNSZXNvdXJjZUNhbGVuZGFyID0gdmFyaWFudCA9PT0gJ3Jlc291cmNlJ1xuXHRjb25zdCBpc1JlZ3VsYXJDYWxlbmRhciA9ICFpc1Jlc291cmNlQ2FsZW5kYXJcblx0Ly8gVHJpZ2dlcmVkIHdoZW4gYGhpZGVOb25CdXNpbmVzc0hvdXJzYCBmaWx0ZXJzIGV2ZXJ5IGNvbHVtbiB0byB6ZXJvIGhvdXJzXG5cdC8vIChlLmcuIGJ1c2luZXNzIGhvdXJzIGBzdGFydFRpbWU6IDAsIGVuZFRpbWU6IDBgKS4gVGhlIGFsbC1kYXkgcm93IHRha2VzXG5cdC8vIHRoZSBmcmVlZCB2ZXJ0aWNhbCBzcGFjZSBzbyB0aGUgdmlldyBkb2Vzbid0IHJlbmRlciBhbiBlbXB0eSB0aW1lIGdyaWQuXG5cdGNvbnN0IGV4cGFuZEFsbERheVJvdyA9IGNvbHVtbnMuZXZlcnkoKGMpID0+ICFjLmRheXM/Lmxlbmd0aClcblxuXHRjb25zdCB7IGN1cnJlbnREYXRlLCB2aWV3LCBzY3JvbGxUaW1lIH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cdGNvbnN0IHZpZXdwb3J0UmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50IHwgbnVsbD4obnVsbClcblxuXHRjb25zdCBoYXNIb3Vyc1RvU2Nyb2xsID0gZ3JpZFR5cGUgPT09ICdob3VyJyAmJiAhZXhwYW5kQWxsRGF5Um93XG5cblx0dXNlU2Nyb2xsVG9UaW1lKHtcblx0XHR2aWV3cG9ydFJlZixcblx0XHRzY3JvbGxUaW1lLFxuXHRcdGVuYWJsZWQ6IGhhc0hvdXJzVG9TY3JvbGwsXG5cdFx0c2Nyb2xsS2V5OiBgJHt2aWV3fS0ke2N1cnJlbnREYXRlLmZvcm1hdCgnWVlZWS1NTS1ERCcpfWAsXG5cdH0pXG5cblx0Y29uc3QgaGVhZGVyID0gY2hpbGRyZW4gJiYgKFxuXHRcdDxWZXJ0aWNhbEdyaWRIZWFkZXJDb250YWluZXJcblx0XHRcdGFsbERheVJvdz17YWxsRGF5Um93fVxuXHRcdFx0Y2xhc3Nlcz17eyBoZWFkZXI6IGNsYXNzZXM/LmhlYWRlciwgYWxsRGF5OiBjbGFzc2VzPy5hbGxEYXkgfX1cblx0XHRcdGV4cGFuZEFsbERheVJvdz17ZXhwYW5kQWxsRGF5Um93fVxuXHRcdD5cblx0XHRcdHtjaGlsZHJlbn1cblx0XHQ8L1ZlcnRpY2FsR3JpZEhlYWRlckNvbnRhaW5lcj5cblx0KVxuXG5cdC8vIFdoZW4gYWxsIGNvbHVtbnMgYXJlIGVtcHR5IChubyBob3VycyB0byBkaXNwbGF5KSwgc2tpcCB0aGUgU2Nyb2xsQXJlYVxuXHQvLyBlbnRpcmVseSBzbyB0aGUgaGVhZGVyICh3aXRoIHRoZSBleHBhbmRlZCBhbGwtZGF5IHJvdykgdGFrZXMgdGhlIGZ1bGxcblx0Ly8gY29udGFpbmVyIGhlaWdodC4gaC1mdWxsIG9uIGEgZmxleCBjaGlsZCBvbmx5IHJlc29sdmVzIGNvcnJlY3RseSBhZ2FpbnN0XG5cdC8vIGEgcGFyZW50IHdpdGggYSBkZWZpbml0ZSBoZWlnaHQsIGFuZCBSYWRpeCdzIFZpZXdwb3J0IHdyYXBwZXIgaGFzIG9ubHlcblx0Ly8gbWluLWhlaWdodCAobm90IGV4cGxpY2l0IGhlaWdodCksIHdoaWNoIGlzIHdoeSB0aGUgYWxsLWRheSByb3cnc1xuXHQvLyBmbGV4LTEgd291bGRuJ3QgZ3JvdyB3aGVuIG5lc3RlZCBpbnNpZGUgdGhlIFNjcm9sbEFyZWEuXG5cdGlmIChleHBhbmRBbGxEYXlSb3cgJiYgaGVhZGVyKSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxkaXZcblx0XHRcdFx0Y2xhc3NOYW1lPVwiaC1mdWxsIGZsZXggZmxleC1jb2xcIlxuXHRcdFx0XHRkYXRhLXRlc3RpZD1cInZlcnRpY2FsLWdyaWQtY29udGFpbmVyXCJcblx0XHRcdFx0c3R5bGU9e3N0eWxlfVxuXHRcdFx0PlxuXHRcdFx0XHR7aGVhZGVyfVxuXHRcdFx0PC9kaXY+XG5cdFx0KVxuXHR9XG5cblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9XCJoLWZ1bGwgZmxleCBmbGV4LWNvbFwiXG5cdFx0XHRkYXRhLXRlc3RpZD1cInZlcnRpY2FsLWdyaWQtY29udGFpbmVyXCJcblx0XHRcdHN0eWxlPXtzdHlsZX1cblx0XHQ+XG5cdFx0XHR7LyogaGVhZGVyIHJvdyAqL31cblx0XHRcdHtpc1JlZ3VsYXJDYWxlbmRhciAmJiBoZWFkZXJ9XG5cblx0XHRcdDxTY3JvbGxBcmVhXG5cdFx0XHRcdGNsYXNzTmFtZT17Y24oJ2gtZnVsbCcsIGlzUmVndWxhckNhbGVuZGFyICYmICdvdmVyZmxvdy1hdXRvJyl9XG5cdFx0XHRcdGRhdGEtdGVzdGlkPVwidmVydGljYWwtZ3JpZC1zY3JvbGxcIlxuXHRcdFx0XHR2aWV3UG9ydFByb3BzPXt7XG5cdFx0XHRcdFx0Y2xhc3NOYW1lOiAnKjpmbGV4ISAqOmZsZXgtY29sISAqOm1pbi1oLWZ1bGwnLFxuXHRcdFx0XHRcdHJlZjogdmlld3BvcnRSZWYsXG5cdFx0XHRcdH19XG5cdFx0XHQ+XG5cdFx0XHRcdHsvKiBoZWFkZXIgcm93IGZvciByZXNvdXJjZSBjYWxlbmRhciBpbnNpZGUgc2Nyb2xsIGFyZWEgKi99XG5cdFx0XHRcdHtpc1Jlc291cmNlQ2FsZW5kYXIgJiYgaGVhZGVyfVxuXHRcdFx0XHR7LyogQ2FsZW5kYXIgYXJlYSB3aXRoIHNjcm9sbCAqL31cblx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oJ2ZsZXggZmxleC0xIG1pbi13LWZ1bGwgdy1maXQnLCBjbGFzc2VzPy5ib2R5KX1cblx0XHRcdFx0XHRkYXRhLXRlc3RpZD1cInZlcnRpY2FsLWdyaWQtYm9keVwiXG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7LyogRGF5IGNvbHVtbnMgd2l0aCB0aW1lIHNsb3RzICovfVxuXHRcdFx0XHRcdHtjb2x1bW5zLm1hcCgoY29sdW1uLCBpbmRleCkgPT4gKFxuXHRcdFx0XHRcdFx0PFZlcnRpY2FsR3JpZENvbFxuXHRcdFx0XHRcdFx0XHRrZXk9e2tleXMubGlzdEtleShjb2x1bW4uaWQsIGluZGV4KX1cblx0XHRcdFx0XHRcdFx0ey4uLmNvbHVtbn1cblx0XHRcdFx0XHRcdFx0Z3JpZFR5cGU9e2dyaWRUeXBlfVxuXHRcdFx0XHRcdFx0XHRpc0xhc3RDb2x1bW49e2luZGV4ID09PSBjb2x1bW5zLmxlbmd0aCAtIDF9XG5cdFx0XHRcdFx0XHRcdHNsb3REdXJhdGlvbk1pbnV0ZXM9e3Nsb3REdXJhdGlvbk1pbnV0ZXN9XG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdCkpfVxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PFNjcm9sbEJhciBjbGFzc05hbWU9XCJ6LTMwXCIgLz4gey8qIHZlcnRpY2FsIHNjcm9sbGJhciAqL31cblx0XHRcdFx0PFNjcm9sbEJhciBjbGFzc05hbWU9XCJ6LTMwXCIgb3JpZW50YXRpb249XCJob3Jpem9udGFsXCIgLz57JyAnfVxuXHRcdFx0XHR7LyogaG9yaXpvbnRhbCBzY3JvbGxiYXIgKi99XG5cdFx0XHQ8L1Njcm9sbEFyZWE+XG5cdFx0PC9kaXY+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHsgdHlwZSBSZWZPYmplY3QsIHVzZUVmZmVjdCwgdXNlUmVmIH0gZnJvbSAncmVhY3QnXG5cbmV4cG9ydCB0eXBlIFNjcm9sbFRvVGltZUF4aXMgPSAndmVydGljYWwnIHwgJ2hvcml6b250YWwnXG5cbmV4cG9ydCBpbnRlcmZhY2UgVXNlU2Nyb2xsVG9UaW1lT3B0aW9ucyB7XG5cdC8qKlxuXHQgKiBSZWYgdG8gdGhlIGFjdHVhbCBzY3JvbGxpbmcgZWxlbWVudCAoZS5nLiB0aGUgUmFkaXggU2Nyb2xsQXJlYSB2aWV3cG9ydCkuXG5cdCAqIFRoZSBob29rIHNjcm9sbHMgdGhpcyBlbGVtZW50IGRpcmVjdGx5IHNvIHRoZSBwYXJlbnQgcGFnZSBpcyBub3QgYWZmZWN0ZWQuXG5cdCAqL1xuXHR2aWV3cG9ydFJlZjogUmVmT2JqZWN0PEhUTUxFbGVtZW50IHwgbnVsbD5cblx0c2Nyb2xsVGltZT86IHN0cmluZ1xuXHRlbmFibGVkOiBib29sZWFuXG5cdHNjcm9sbEtleTogc3RyaW5nXG5cdC8qKlxuXHQgKiBWZXJ0aWNhbCBzY3JvbGxzIGFsb25nIHRoZSBZIGF4aXMgKGBzY3JvbGxUb3BgKSwgaG9yaXpvbnRhbCBhbG9uZyB0aGUgWFxuXHQgKiBheGlzIChgc2Nyb2xsTGVmdGApLlxuXHQgKlxuXHQgKiBAZGVmYXVsdCAndmVydGljYWwnXG5cdCAqL1xuXHRheGlzPzogU2Nyb2xsVG9UaW1lQXhpc1xufVxuXG5jb25zdCBIT1VSX1BBVFRFUk4gPSAvXihcXGR7MSwyfSkoPzo6XFxkezEsMn0pPyg/OjpcXGR7MSwyfSk/JC9cbmNvbnN0IEhPVVJfU0VMRUNUT1IgPSAnW2RhdGEtaG91cl0nXG5cbmNvbnN0IHBhcnNlSG91ciA9ICh0aW1lOiBzdHJpbmcpOiBudW1iZXIgfCBudWxsID0+IHtcblx0Y29uc3QgbWF0Y2ggPSBIT1VSX1BBVFRFUk4uZXhlYyh0aW1lKVxuXHRpZiAoIW1hdGNoKSB7XG5cdFx0cmV0dXJuIG51bGxcblx0fVxuXHRjb25zdCBob3VyID0gTnVtYmVyLnBhcnNlSW50KG1hdGNoWzFdLCAxMClcblx0Y29uc3QgaXNJblJhbmdlID0gaG91ciA+PSAwICYmIGhvdXIgPD0gMjNcblx0cmV0dXJuIGlzSW5SYW5nZSA/IGhvdXIgOiBudWxsXG59XG5cbmNvbnN0IHJlYWRSb3dIb3VyID0gKHJvdzogSFRNTEVsZW1lbnQpOiBudW1iZXIgPT5cblx0TnVtYmVyLnBhcnNlSW50KHJvdy5nZXRBdHRyaWJ1dGUoJ2RhdGEtaG91cicpID8/ICcnLCAxMClcblxuY29uc3QgZmluZFRhcmdldFJvdyA9IChcblx0cm93czogSFRNTEVsZW1lbnRbXSxcblx0dGFyZ2V0SG91cjogbnVtYmVyXG4pOiBIVE1MRWxlbWVudCB8IG51bGwgPT4ge1xuXHRjb25zdCBmaXJzdFJvdyA9IHJvd3MuYXQoMClcblx0Y29uc3QgbGFzdFJvdyA9IHJvd3MuYXQoLTEpXG5cdGlmICghZmlyc3RSb3cgfHwgIWxhc3RSb3cpIHtcblx0XHRyZXR1cm4gbnVsbFxuXHR9XG5cblx0aWYgKHRhcmdldEhvdXIgPD0gcmVhZFJvd0hvdXIoZmlyc3RSb3cpKSB7XG5cdFx0cmV0dXJuIGZpcnN0Um93XG5cdH1cblx0aWYgKHRhcmdldEhvdXIgPj0gcmVhZFJvd0hvdXIobGFzdFJvdykpIHtcblx0XHRyZXR1cm4gbGFzdFJvd1xuXHR9XG5cdHJldHVybiByb3dzLmZpbmQoKHJvdykgPT4gcmVhZFJvd0hvdXIocm93KSA9PT0gdGFyZ2V0SG91cikgPz8gbnVsbFxufVxuXG5jb25zdCBzY3JvbGxWaWV3cG9ydFRvUm93ID0gKFxuXHR2aWV3cG9ydDogSFRNTEVsZW1lbnQsXG5cdHRhcmdldFJvdzogSFRNTEVsZW1lbnQsXG5cdGZpcnN0Um93OiBIVE1MRWxlbWVudCxcblx0YXhpczogU2Nyb2xsVG9UaW1lQXhpc1xuKSA9PiB7XG5cdC8vIFVzZSB0aGUgZmlyc3Qgcm93IGFzIHRoZSByZWZlcmVuY2UgZm9yIFwic3RhcnRpbmcgcG9zaXRpb24gb2YgdGhlIHRpbWVcblx0Ly8gYXJlYS5cIiBJdCBuYXR1cmFsbHkgc2l0cyBwYXN0IGFueSBzdGlja3ktbGVmdCAob3Igc3RpY2t5LXRvcCkgaGVhZGVyXG5cdC8vIGxpa2UgdGhlIFJlc291cmNlcyBjb2x1bW4uIFNldHRpbmcgc2Nyb2xsTGVmdC9zY3JvbGxUb3AgdG8gdGhlIG9mZnNldFxuXHQvLyBmcm9tIGZpcnN0IHJvdyB0byB0YXJnZXQgcm93IGxhbmRzIHRoZSB0YXJnZXQgd2hlcmUgdGhlIGZpcnN0IHJvdyBzYXQsXG5cdC8vIGkuZS4gcmlnaHQgYXQgdGhlIHN0YXJ0IG9mIHRoZSB2aXNpYmxlIHRpbWUgYXJlYSBpbnN0ZWFkIG9mIGJlaGluZCB0aGVcblx0Ly8gc3RpY2t5IGNvbHVtbi5cblx0Y29uc3QgdGFyZ2V0UmVjdCA9IHRhcmdldFJvdy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuXHRjb25zdCBmaXJzdFJlY3QgPSBmaXJzdFJvdy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuXG5cdGlmIChheGlzID09PSAnaG9yaXpvbnRhbCcpIHtcblx0XHR2aWV3cG9ydC5zY3JvbGxUbyh7XG5cdFx0XHRsZWZ0OiB0YXJnZXRSZWN0LmxlZnQgLSBmaXJzdFJlY3QubGVmdCxcblx0XHRcdGJlaGF2aW9yOiAnYXV0bycsXG5cdFx0fSlcblx0XHRyZXR1cm5cblx0fVxuXG5cdHZpZXdwb3J0LnNjcm9sbFRvKHtcblx0XHR0b3A6IHRhcmdldFJlY3QudG9wIC0gZmlyc3RSZWN0LnRvcCxcblx0XHRiZWhhdmlvcjogJ2F1dG8nLFxuXHR9KVxufVxuXG5leHBvcnQgY29uc3QgdXNlU2Nyb2xsVG9UaW1lID0gKHtcblx0dmlld3BvcnRSZWYsXG5cdHNjcm9sbFRpbWUsXG5cdGVuYWJsZWQsXG5cdHNjcm9sbEtleSxcblx0YXhpcyA9ICd2ZXJ0aWNhbCcsXG59OiBVc2VTY3JvbGxUb1RpbWVPcHRpb25zKSA9PiB7XG5cdGNvbnN0IGxhc3RTY3JvbGxlZEtleVJlZiA9IHVzZVJlZjxzdHJpbmcgfCBudWxsPihudWxsKVxuXG5cdHVzZUVmZmVjdCgoKSA9PiB7XG5cdFx0aWYgKCFlbmFibGVkIHx8ICFzY3JvbGxUaW1lKSB7XG5cdFx0XHRyZXR1cm5cblx0XHR9XG5cdFx0aWYgKGxhc3RTY3JvbGxlZEtleVJlZi5jdXJyZW50ID09PSBzY3JvbGxLZXkpIHtcblx0XHRcdHJldHVyblxuXHRcdH1cblxuXHRcdGNvbnN0IHRhcmdldEhvdXIgPSBwYXJzZUhvdXIoc2Nyb2xsVGltZSlcblx0XHRpZiAodGFyZ2V0SG91ciA9PT0gbnVsbCkge1xuXHRcdFx0cmV0dXJuXG5cdFx0fVxuXG5cdFx0Y29uc3Qgdmlld3BvcnQgPSB2aWV3cG9ydFJlZi5jdXJyZW50XG5cdFx0aWYgKCF2aWV3cG9ydCkge1xuXHRcdFx0cmV0dXJuXG5cdFx0fVxuXHRcdGNvbnN0IHJvd3MgPSBBcnJheS5mcm9tKFxuXHRcdFx0dmlld3BvcnQucXVlcnlTZWxlY3RvckFsbDxIVE1MRWxlbWVudD4oSE9VUl9TRUxFQ1RPUilcblx0XHQpXG5cdFx0Y29uc3QgZmlyc3RSb3cgPSByb3dzLmF0KDApXG5cdFx0Y29uc3QgdGFyZ2V0Um93ID0gZmluZFRhcmdldFJvdyhyb3dzLCB0YXJnZXRIb3VyKVxuXHRcdGlmICghZmlyc3RSb3cgfHwgIXRhcmdldFJvdykge1xuXHRcdFx0cmV0dXJuXG5cdFx0fVxuXHRcdHNjcm9sbFZpZXdwb3J0VG9Sb3codmlld3BvcnQsIHRhcmdldFJvdywgZmlyc3RSb3csIGF4aXMpXG5cdFx0bGFzdFNjcm9sbGVkS2V5UmVmLmN1cnJlbnQgPSBzY3JvbGxLZXlcblx0fSwgW2VuYWJsZWQsIHNjcm9sbFRpbWUsIHNjcm9sbEtleSwgdmlld3BvcnRSZWYsIGF4aXNdKVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IG1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgUmVzb3VyY2UgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IGtleXMgfSBmcm9tICdAL2xpYi91dGlscy9rZXlzJ1xuaW1wb3J0IHsgR3JpZENlbGwgfSBmcm9tICcuLi9ncmlkLWNlbGwnXG5pbXBvcnQgeyBWZXJ0aWNhbEdyaWRFdmVudHNMYXllciB9IGZyb20gJy4vdmVydGljYWwtZ3JpZC1ldmVudHMtbGF5ZXInXG5cbmV4cG9ydCBpbnRlcmZhY2UgVmVydGljYWxHcmlkQ29sUHJvcHMge1xuXHRpZDogc3RyaW5nXG5cdGRheT86IERheWpzXG5cdHJlc291cmNlSWQ/OiBzdHJpbmcgfCBudW1iZXJcblx0cmVzb3VyY2U/OiBSZXNvdXJjZVxuXHRkYXlzOiBEYXlqc1tdIC8vIFRoZSBzcGVjaWZpYyBkYXkgdGhpcyBjb2x1bW4gcmVwcmVzZW50c1xuXHRjbGFzc05hbWU/OiBzdHJpbmdcblx0J2RhdGEtdGVzdGlkJz86IHN0cmluZ1xuXHRncmlkVHlwZT86ICdkYXknIHwgJ2hvdXInXG5cdHJlbmRlckhlYWRlcj86ICgpID0+IFJlYWN0LlJlYWN0Tm9kZVxuXHRyZW5kZXJDZWxsPzogKGRhdGU6IERheWpzKSA9PiBSZWFjdC5SZWFjdE5vZGVcblx0bm9FdmVudHM/OiBib29sZWFuXG5cdC8qKlxuXHQgKiBHcmFudWxhcml0eSBvZiBlYWNoIGhvdXIgcm93IGluIG1pbnV0ZXMuIGA2MGAgcmVuZGVycyBvbmUgY2VsbCBwZXIgaG91ciB3aXRoXG5cdCAqIG5vIHN1Yi1ob3VyIGxpbmVzLiBgMzBgIHJlbmRlcnMgdHdvLiBgMTVgIHJlbmRlcnMgZm91ciB3aXRoIGRhc2hlZCBzZXBhcmF0b3JzLlxuXHQgKi9cblx0c2xvdER1cmF0aW9uTWludXRlcz86IG51bWJlclxuXHQvKiogV2hldGhlciB0aGlzIGlzIHRoZSBsYXN0IGNvbHVtbiBpbiB0aGUgZ3JpZCAqL1xuXHRpc0xhc3RDb2x1bW4/OiBib29sZWFuXG59XG5cbmNvbnN0IE5vTWVtb1ZlcnRpY2FsR3JpZENvbDogUmVhY3QuRkM8VmVydGljYWxHcmlkQ29sUHJvcHM+ID0gKHtcblx0aWQsXG5cdGRheXMsXG5cdHJlc291cmNlSWQsXG5cdHJlc291cmNlLFxuXHQnZGF0YS10ZXN0aWQnOiBkYXRhVGVzdElkLFxuXHRncmlkVHlwZSxcblx0Y2xhc3NOYW1lLFxuXHRyZW5kZXJDZWxsLFxuXHRub0V2ZW50cyxcblx0c2xvdER1cmF0aW9uTWludXRlcyA9IDYwLFxuXHRpc0xhc3RDb2x1bW4sXG59KSA9PiB7XG5cdGNvbnN0IHNsb3RDb3VudCA9IE1hdGguZmxvb3IoNjAgLyBzbG90RHVyYXRpb25NaW51dGVzKVxuXHRjb25zdCBjZWxsT2Zmc2V0cyA9IEFycmF5LmZyb20oXG5cdFx0eyBsZW5ndGg6IHNsb3RDb3VudCB9LFxuXHRcdChfLCBpKSA9PiBpICogc2xvdER1cmF0aW9uTWludXRlc1xuXHQpXG5cdGNvbnN0IGhhc1N1YkhvdXJTbG90cyA9IGNlbGxPZmZzZXRzLmxlbmd0aCA+IDFcblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQnZmxleCBmbGV4LWNvbCBmbGV4LTEgaXRlbXMtY2VudGVyIG1pbi13LTIwIGp1c3RpZnktY2VudGVyIGJnLWJhY2tncm91bmQgcmVsYXRpdmUnLFxuXHRcdFx0XHRpc0xhc3RDb2x1bW4gPyAnYm9yZGVyLXItMCcgOiAnYm9yZGVyLXInLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXRlc3RpZD17ZGF0YVRlc3RJZCB8fCBrZXlzLmNvbnRhaW5lci52ZXJ0aWNhbC5jb2woaWQpfVxuXHRcdD5cblx0XHRcdHsvKiBUaW1lIHNsb3RzICovfVxuXHRcdFx0PGRpdlxuXHRcdFx0XHRjbGFzc05hbWU9XCJ3LWZ1bGwgaC1mdWxsIHJlbGF0aXZlIGdyaWRcIlxuXHRcdFx0XHRzdHlsZT17e1xuXHRcdFx0XHRcdGdyaWRUZW1wbGF0ZVJvd3M6IGByZXBlYXQoJHtkYXlzLmxlbmd0aH0sIG1pbm1heCgwLCAxZnIpKWAsXG5cdFx0XHRcdH19XG5cdFx0XHQ+XG5cdFx0XHRcdHtkYXlzLm1hcCgoZGF5LCBkYXlJbmRleCkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IGhvdXJTdHIgPSBkYXkuZm9ybWF0KCdISCcpXG5cblx0XHRcdFx0XHRpZiAocmVuZGVyQ2VsbCkge1xuXHRcdFx0XHRcdFx0Y29uc3QgaXNUaW1lR3V0dGVyID0gaWQgPT09IGtleXMuY29sLnRpbWVcblx0XHRcdFx0XHRcdGNvbnN0IHRlc3RJZCA9IGlzVGltZUd1dHRlclxuXHRcdFx0XHRcdFx0XHQ/IGtleXMuY2VsbC52ZXJ0aWNhbFRpbWUoaG91clN0cilcblx0XHRcdFx0XHRcdFx0OiBrZXlzLmNlbGwudmVydGljYWwoZGF5LCBob3VyU3RyLCAnMDAnLCByZXNvdXJjZUlkKVxuXHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cIm1pbi1oLVs2MHB4XSBib3JkZXItYiBib3JkZXItclwiXG5cdFx0XHRcdFx0XHRcdFx0ZGF0YS1ob3VyPXtpc1RpbWVHdXR0ZXIgPyBob3VyU3RyIDogdW5kZWZpbmVkfVxuXHRcdFx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPXt0ZXN0SWR9XG5cdFx0XHRcdFx0XHRcdFx0a2V5PXtrZXlzLmxpc3RLZXkoaWQsIGRheUluZGV4LCBob3VyU3RyKX1cblx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdHtyZW5kZXJDZWxsKGRheSl9XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgbWluLWgtWzYwcHhdXCJcblx0XHRcdFx0XHRcdFx0a2V5PXtrZXlzLmxpc3RLZXkoaWQsIGRheUluZGV4LCBob3VyU3RyKX1cblx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0e2NlbGxPZmZzZXRzLm1hcCgobWludXRlKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgbW0gPSBTdHJpbmcobWludXRlKS5wYWRTdGFydCgyLCAnMCcpXG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgdGVzdElkID0ga2V5cy5jZWxsLnZlcnRpY2FsKGRheSwgaG91clN0ciwgbW0sIHJlc291cmNlSWQpXG5cblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHRcdFx0PEdyaWRDZWxsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0J2hvdmVyOmJnLWFjY2VudCByZWxhdGl2ZSB6LTEwIGZsZXgtMSBtaW4taC0wIGN1cnNvci1wb2ludGVyIGJvcmRlci1iIGJvcmRlci1yLTAnLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGhhc1N1YkhvdXJTbG90cyAmJiAnYm9yZGVyLWRhc2hlZCdcblx0XHRcdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e3Rlc3RJZH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF5PXtoYXNTdWJIb3VyU2xvdHMgPyBkYXkubWludXRlKG1pbnV0ZSkgOiBkYXl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGdyaWRUeXBlPXtncmlkVHlwZX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0aG91cj17ZGF5LmhvdXIoKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0a2V5PXtrZXlzLmxpc3RLZXkoaWQsIGRheUluZGV4LCBtbSl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG1pbnV0ZT17aGFzU3ViSG91clNsb3RzID8gbWludXRlIDogdW5kZWZpbmVkfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNvdXJjZUlkPXtyZXNvdXJjZUlkfSAvLyBFdmVudHMgYXJlIHJlbmRlcmVkIGluIGEgc2VwYXJhdGUgbGF5ZXJcblx0XHRcdFx0XHRcdFx0XHRcdFx0c2hvdWxkUmVuZGVyRXZlbnRzPXtmYWxzZX1cblx0XHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0XHR9KX1cblx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdClcblx0XHRcdFx0fSl9XG5cblx0XHRcdFx0ey8qIEV2ZW50IGJsb2NrcyBsYXllciAqL31cblx0XHRcdFx0eyFub0V2ZW50cyAmJiAoXG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJhYnNvbHV0ZSBpbnNldC0wIHotMTAgcG9pbnRlci1ldmVudHMtbm9uZVwiPlxuXHRcdFx0XHRcdFx0PFZlcnRpY2FsR3JpZEV2ZW50c0xheWVyXG5cdFx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPXtrZXlzLmNvbnRhaW5lci5ldmVudHNMYXllcigndmVydGljYWwnLCBpZCl9XG5cdFx0XHRcdFx0XHRcdGRheXM9e2RheXN9XG5cdFx0XHRcdFx0XHRcdGdyaWRUeXBlPXtncmlkVHlwZX1cblx0XHRcdFx0XHRcdFx0cmVzb3VyY2U9e3Jlc291cmNlfVxuXHRcdFx0XHRcdFx0XHRyZXNvdXJjZUlkPXtyZXNvdXJjZUlkfVxuXHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0KX1cblx0XHRcdDwvZGl2PlxuXHRcdDwvZGl2PlxuXHQpXG59XG5cbmV4cG9ydCBjb25zdCBWZXJ0aWNhbEdyaWRDb2wgPSBtZW1vKFxuXHROb01lbW9WZXJ0aWNhbEdyaWRDb2xcbikgYXMgdHlwZW9mIE5vTWVtb1ZlcnRpY2FsR3JpZENvbFxuIiwKICAgICJpbXBvcnQgeyBtZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBDdXJyZW50VGltZUluZGljYXRvciB9IGZyb20gJ0AvY29tcG9uZW50cy9jdXJyZW50LXRpbWUtaW5kaWNhdG9yJ1xuaW1wb3J0IHsgRHJhZ2dhYmxlRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvZHJhZ2dhYmxlLWV2ZW50L2RyYWdnYWJsZS1ldmVudCdcbmltcG9ydCB7IHVzZVByb2Nlc3NlZERheUV2ZW50cyB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvaG9va3MvdXNlUHJvY2Vzc2VkRGF5RXZlbnRzJ1xuaW1wb3J0IHR5cGUgeyBSZXNvdXJjZSB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsga2V5cyB9IGZyb20gJ0AvbGliL3V0aWxzL2tleXMnXG5cbmludGVyZmFjZSBWZXJ0aWNhbEdyaWRFdmVudHNMYXllclByb3BzIHtcblx0Z3JpZFR5cGU/OiAnZGF5JyB8ICdob3VyJ1xuXHRkYXlzOiBEYXlqc1tdIC8vIFRoZSBzcGVjaWZpYyBkYXkgdGhpcyBsYXllciByZXByZXNlbnRzXG5cdHJlc291cmNlSWQ/OiBzdHJpbmcgfCBudW1iZXJcblx0cmVzb3VyY2U/OiBSZXNvdXJjZVxuXHQnZGF0YS10ZXN0aWQnPzogc3RyaW5nXG59XG5cbmNvbnN0IE5vTWVtb1ZlcnRpY2FsR3JpZEV2ZW50c0xheWVyOiBSZWFjdC5GQzxWZXJ0aWNhbEdyaWRFdmVudHNMYXllclByb3BzPiA9ICh7XG5cdGRheXMsXG5cdGdyaWRUeXBlID0gJ2hvdXInLFxuXHRyZXNvdXJjZUlkLFxuXHRyZXNvdXJjZSxcblx0J2RhdGEtdGVzdGlkJzogZGF0YVRlc3RJZCxcbn0pID0+IHtcblx0Y29uc3QgdG9kYXlFdmVudHMgPSB1c2VQcm9jZXNzZWREYXlFdmVudHMoeyBkYXlzLCBncmlkVHlwZSwgcmVzb3VyY2VJZCB9KVxuXHRjb25zdCByYW5nZVN0YXJ0ID0gZGF5cy5hdCgwKVxuXHRjb25zdCByYW5nZUVuZCA9IGRheXMuYXQoLTEpPy5hZGQoMSwgZ3JpZFR5cGUpXG5cdC8vIE9ubHkgc2hvdyB0aGUgXCJub3dcIiBsaW5lIGluIGhvdXItcmVzb2x1dGlvbiBncmlkcy4gSW4gZGF5LXJlc29sdXRpb25cblx0Ly8gdmVydGljYWwgdmlld3MgKHJlc291cmNlIG1vbnRoLCByZXNvdXJjZSB3ZWVrIGRhaWx5KSBhIHN1Yi1kYXkgcGVyY2VudGFnZVxuXHQvLyBsaW5lIGlzIG1lYW5pbmdsZXNzLCBzbyBzdXBwcmVzcyBpdCDigJQgbWlycm9ycyB0aGUgaG9yaXpvbnRhbCBldmVudHMgbGF5ZXIuXG5cdGNvbnN0IHNob3dOb3dMaW5lID0gZ3JpZFR5cGUgPT09ICdob3VyJyAmJiBCb29sZWFuKHJhbmdlU3RhcnQgJiYgcmFuZ2VFbmQpXG5cblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9XCJyZWxhdGl2ZSB3LWZ1bGwgaC1mdWxsIHBvaW50ZXItZXZlbnRzLW5vbmUgei0xMCBvdmVyZmxvdy1jbGlwXCJcblx0XHRcdGRhdGEtdGVzdGlkPXtkYXRhVGVzdElkfVxuXHRcdD5cblx0XHRcdHtzaG93Tm93TGluZSAmJiByYW5nZVN0YXJ0ICYmIHJhbmdlRW5kICYmIChcblx0XHRcdFx0PEN1cnJlbnRUaW1lSW5kaWNhdG9yXG5cdFx0XHRcdFx0cmFuZ2VFbmQ9e3JhbmdlRW5kfVxuXHRcdFx0XHRcdHJhbmdlU3RhcnQ9e3JhbmdlU3RhcnR9XG5cdFx0XHRcdFx0cmVzb3VyY2U9e3Jlc291cmNlfVxuXHRcdFx0XHQvPlxuXHRcdFx0KX1cblx0XHRcdHt0b2RheUV2ZW50cy5tYXAoKGV2ZW50LCBpbmRleCkgPT4ge1xuXHRcdFx0XHRjb25zdCBldmVudEtleSA9IGBldmVudC0ke2V2ZW50LmlkfS0ke2luZGV4fS0ke2RheXMuYXQoMCk/LnRvSVNPU3RyaW5nKCl9LSR7cmVzb3VyY2VJZCA/PyAnbm8tcmVzb3VyY2UnfWBcblx0XHRcdFx0Y29uc3QgaXNTaG9ydEV2ZW50ID0gZXZlbnQuZW5kLmRpZmYoZXZlbnQuc3RhcnQsICdtaW51dGUnKSA8PSAxNVxuXG5cdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiYWJzb2x1dGVcIlxuXHRcdFx0XHRcdFx0a2V5PXtrZXlzLmxpc3RLZXkoZXZlbnRLZXksICd3cmFwcGVyJyl9XG5cdFx0XHRcdFx0XHRzdHlsZT17e1xuXHRcdFx0XHRcdFx0XHRsZWZ0OiBgJHtldmVudC5sZWZ0fSVgLFxuXHRcdFx0XHRcdFx0XHR3aWR0aDogYGNhbGMoJHtldmVudC53aWR0aH0lIC0gdmFyKC0tc3BhY2luZykgKiAyKWAsXG5cdFx0XHRcdFx0XHRcdHRvcDogYCR7ZXZlbnQudG9wfSVgLFxuXHRcdFx0XHRcdFx0XHRoZWlnaHQ6IGAke2V2ZW50LmhlaWdodH0lYCxcblx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0PERyYWdnYWJsZUV2ZW50XG5cdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oJ3BvaW50ZXItZXZlbnRzLWF1dG8nLCB7XG5cdFx0XHRcdFx0XHRcdFx0J1smX3BdOnRleHQtWzEwcHhdIFsmX3BdOm10LTAnOiBpc1Nob3J0RXZlbnQsXG5cdFx0XHRcdFx0XHRcdH0pfVxuXHRcdFx0XHRcdFx0XHRlbGVtZW50SWQ9e2V2ZW50S2V5fVxuXHRcdFx0XHRcdFx0XHRldmVudD17ZXZlbnR9XG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQpXG5cdFx0XHR9KX1cblx0XHQ8L2Rpdj5cblx0KVxufVxuXG5leHBvcnQgY29uc3QgVmVydGljYWxHcmlkRXZlbnRzTGF5ZXIgPSBtZW1vKE5vTWVtb1ZlcnRpY2FsR3JpZEV2ZW50c0xheWVyKVxuIiwKICAgICJpbXBvcnQgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSB7IERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBmaWx0ZXJFdmVudHNCeVJlc291cmNlIH0gZnJvbSAnQC9saWIvdXRpbHMvZXZlbnQtdXRpbHMnXG5pbXBvcnQge1xuXHRnZXRQb3NpdGlvbmVkRGF5RXZlbnRzLFxuXHR0eXBlIFBvc2l0aW9uZWRFdmVudCxcbn0gZnJvbSAnQC9saWIvdXRpbHMvcG9zaXRpb24tZGF5LWV2ZW50cydcblxuaW50ZXJmYWNlIFVzZVByb2Nlc3NlZERheUV2ZW50c1Byb3BzIHtcblx0ZGF5czogRGF5anNbXSAvLyBUaGUgc3BlY2lmaWMgZGF5IHRoaXMgY29sdW1uIHJlcHJlc2VudHNcblx0Z3JpZFR5cGU/OiAnZGF5JyB8ICdob3VyJ1xuXHRyZXNvdXJjZUlkPzogc3RyaW5nIHwgbnVtYmVyXG59XG5cbmV4cG9ydCBjb25zdCB1c2VQcm9jZXNzZWREYXlFdmVudHMgPSAoe1xuXHRkYXlzLFxuXHRncmlkVHlwZSxcblx0cmVzb3VyY2VJZCxcbn06IFVzZVByb2Nlc3NlZERheUV2ZW50c1Byb3BzKSA9PiB7XG5cdGNvbnN0IHsgZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlLCBnZXRFdmVudHNGb3JSZXNvdXJjZSB9ID1cblx0XHR1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cdGNvbnN0IGZpcnN0ID0gZGF5cy5hdCgwKVxuXHRjb25zdCBsYXN0ID0gZGF5cy5hdCgtMSlcblx0Y29uc3QgZGF5U3RhcnQgPSBmaXJzdD8uc3RhcnRPZignZGF5Jylcblx0Y29uc3QgZGF5RW5kID0gbGFzdD8uZW5kT2YoJ2RheScpXG5cblx0Y29uc3QgZXZlbnRzID0gdXNlTWVtbygoKSA9PiB7XG5cdFx0aWYgKCFkYXlTdGFydCB8fCAhZGF5RW5kKSByZXR1cm4gW11cblxuXHRcdGxldCBkYXlFdmVudHMgPSBnZXRFdmVudHNGb3JEYXRlUmFuZ2UoZGF5U3RhcnQsIGRheUVuZClcblx0XHRpZiAocmVzb3VyY2VJZCkge1xuXHRcdFx0ZGF5RXZlbnRzID0gZmlsdGVyRXZlbnRzQnlSZXNvdXJjZShcblx0XHRcdFx0ZGF5RXZlbnRzLFxuXHRcdFx0XHRnZXRFdmVudHNGb3JSZXNvdXJjZShyZXNvdXJjZUlkKVxuXHRcdFx0KVxuXHRcdH1cblxuXHRcdC8vIFZlcnRpY2FsIGdyaWRzIChEYXkvV2Vlay9SZXNvdXJjZSBWZXJ0aWNhbCkgbmV2ZXIgcmVuZGVyIGFsbC1kYXkgZXZlbnRzXG5cdFx0Ly8gYXMgdGhvc2UgYXJlIGhhbmRsZWQgYnkgdGhlIGFsbC1kYXktcm93IG9yIGFyZSBub3QgYXBwcm9wcmlhdGUgZm9yIHRoZSB0aW1lIGdyaWQuXG5cdFx0cmV0dXJuIGRheUV2ZW50cy5maWx0ZXIoKGUpID0+ICFlLmFsbERheSlcblx0fSwgW1xuXHRcdGRheVN0YXJ0LFxuXHRcdGRheUVuZCxcblx0XHRnZXRFdmVudHNGb3JEYXRlUmFuZ2UsXG5cdFx0cmVzb3VyY2VJZCxcblx0XHRnZXRFdmVudHNGb3JSZXNvdXJjZSxcblx0XSlcblxuXHRjb25zdCB0b2RheUV2ZW50cyA9IHVzZU1lbW88UG9zaXRpb25lZEV2ZW50W10+KCgpID0+IHtcblx0XHRyZXR1cm4gZ2V0UG9zaXRpb25lZERheUV2ZW50cyh7XG5cdFx0XHRkYXlzLFxuXHRcdFx0ZXZlbnRzLFxuXHRcdFx0Z3JpZFR5cGUsXG5cdFx0fSlcblx0fSwgW2RheXMsIGdyaWRUeXBlLCBldmVudHNdKVxuXG5cdHJldHVybiB0b2RheUV2ZW50c1xufVxuIiwKICAgICJpbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgZGF5anMsIHsgdHlwZSBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuXG5leHBvcnQgaW50ZXJmYWNlIFBvc2l0aW9uZWRFdmVudCBleHRlbmRzIENhbGVuZGFyRXZlbnQge1xuXHRsZWZ0OiBudW1iZXIgLy8gTGVmdCBwb3NpdGlvbiBpbiBwZXJjZW50YWdlXG5cdHdpZHRoOiBudW1iZXIgLy8gV2lkdGggaW4gcGVyY2VudGFnZVxuXHR0b3A6IG51bWJlciAvLyBUb3AgcG9zaXRpb24gaW4gcGVyY2VudGFnZVxuXHRoZWlnaHQ6IG51bWJlciAvLyBIZWlnaHQgaW4gcGVyY2VudGFnZVxuXHR6SW5kZXg/OiBudW1iZXIgLy8gWi1pbmRleCBmb3IgbGF5ZXJpbmcgb3ZlcmxhcHBpbmcgZXZlbnRzXG59XG5cbmludGVyZmFjZSBHZXRQb3NpdGlvbmVkRGF5RXZlbnRzUGFyYW1zIHtcblx0ZGF5czogRGF5anNbXVxuXHRncmlkVHlwZT86ICdkYXknIHwgJ2hvdXInIHwgJ21pbnV0ZSdcblx0ZXZlbnRzOiBDYWxlbmRhckV2ZW50W11cbn1cblxuZXhwb3J0IGNvbnN0IGdldFBvc2l0aW9uZWREYXlFdmVudHMgPSAoe1xuXHRkYXlzLFxuXHRncmlkVHlwZSA9ICdob3VyJyxcblx0ZXZlbnRzLFxufTogR2V0UG9zaXRpb25lZERheUV2ZW50c1BhcmFtcyk6IFBvc2l0aW9uZWRFdmVudFtdID0+IHtcblx0Ly8gRmlsdGVyIG91dCBhbGwtZGF5IGV2ZW50cyBhbmQgc29ydCBieSBzdGFydCB0aW1lXG5cdGNvbnN0IHNvcnRlZEV2ZW50cyA9IGV2ZW50c1xuXHRcdC5maWx0ZXIoKGUpID0+ICFlLmFsbERheSlcblx0XHQudG9Tb3J0ZWQoKGEsIGIpID0+IGEuc3RhcnQuZGlmZihiLnN0YXJ0KSlcblxuXHRpZiAoc29ydGVkRXZlbnRzLmxlbmd0aCA9PT0gMCkge1xuXHRcdHJldHVybiBbXVxuXHR9XG5cblx0Ly8gRGV0ZXJtaW5lIGdyaWQgYm91bmRhcmllcyBhbmQgbWV0cmljc1xuXHQvLyBVc2UgZXhwbGljaXQgc3RhcnRPZiB0byBlbnN1cmUgd2UgYXJlIGFuY2hvcmVkIHRvIHRoZSBncmlkIHVuaXQgYm91bmRhcmllc1xuXHQvLyBUaGlzIHByZXZlbnRzIG9mZnNldHMgaWYgdGhlIGdyaWQgZGF5cyBhcmUgbm90IG5vcm1hbGl6ZWRcblx0Y29uc3QgZ3JpZFN0YXJ0ID0gZGF5cy5hdCgwKSB8fCBkYXlqcygpXG5cdGNvbnN0IHRvdGFsVW5pdHMgPSBkYXlzLmxlbmd0aFxuXHRjb25zdCBpc0Rpc2NyZXRlID0gZ3JpZFR5cGUgPT09ICdkYXknXG5cblx0Ly8gU3RlcCAxOiBHcm91cCBldmVudHMgaW50byBjbHVzdGVycyBvZiBvdmVybGFwcGluZyBldmVudHNcblx0Y29uc3QgY2x1c3RlcnM6IENhbGVuZGFyRXZlbnRbXVtdID0gW11cblx0bGV0IGN1cnJlbnRDbHVzdGVyOiBDYWxlbmRhckV2ZW50W10gPSBbXVxuXHRsZXQgbGFzdEV2ZW50RW5kOiBEYXlqcyB8IG51bGwgPSBudWxsXG5cdGZvciAoY29uc3QgZXZlbnQgb2Ygc29ydGVkRXZlbnRzKSB7XG5cdFx0aWYgKGxhc3RFdmVudEVuZCAmJiBldmVudC5zdGFydC5pc1NhbWVPckFmdGVyKGxhc3RFdmVudEVuZCkpIHtcblx0XHRcdGlmIChjdXJyZW50Q2x1c3Rlci5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGNsdXN0ZXJzLnB1c2goY3VycmVudENsdXN0ZXIpXG5cdFx0XHR9XG5cdFx0XHRjdXJyZW50Q2x1c3RlciA9IFtdXG5cdFx0fVxuXHRcdGN1cnJlbnRDbHVzdGVyLnB1c2goZXZlbnQpXG5cdFx0bGFzdEV2ZW50RW5kID0gbGFzdEV2ZW50RW5kID8gZGF5anMubWF4KGxhc3RFdmVudEVuZCwgZXZlbnQuZW5kKSA6IGV2ZW50LmVuZFxuXHR9XG5cdGlmIChjdXJyZW50Q2x1c3Rlci5sZW5ndGggPiAwKSB7XG5cdFx0Y2x1c3RlcnMucHVzaChjdXJyZW50Q2x1c3Rlcilcblx0fVxuXG5cdC8vIENvbXB1dGUgdG9wL2hlaWdodCBwZXJjZW50YWdlcyBmb3IgYW4gZXZlbnQsIGNsYW1wZWQgdG8gZ3JpZDsgbnVsbCBpZiBvdXRzaWRlLlxuXHRjb25zdCBjb21wdXRlVG9wSGVpZ2h0ID0gKFxuXHRcdGV2ZW50OiBDYWxlbmRhckV2ZW50XG5cdCk6IHsgdG9wOiBudW1iZXI7IGhlaWdodDogbnVtYmVyIH0gfCBudWxsID0+IHtcblx0XHRsZXQgc3RhcnRUaW1lID0gZXZlbnQuc3RhcnQuZGlmZihncmlkU3RhcnQsIGdyaWRUeXBlLCB0cnVlKVxuXHRcdGxldCBlbmRUaW1lID0gZXZlbnQuZW5kLmRpZmYoZ3JpZFN0YXJ0LCBncmlkVHlwZSwgdHJ1ZSlcblx0XHRpZiAoaXNEaXNjcmV0ZSkge1xuXHRcdFx0c3RhcnRUaW1lID0gTWF0aC5mbG9vcihzdGFydFRpbWUpXG5cdFx0XHRlbmRUaW1lID0gTWF0aC5jZWlsKGVuZFRpbWUpXG5cdFx0XHRpZiAoZW5kVGltZSA8PSBzdGFydFRpbWUpIGVuZFRpbWUgPSBzdGFydFRpbWUgKyAxXG5cdFx0fVxuXHRcdGlmIChzdGFydFRpbWUgPCAwKSBzdGFydFRpbWUgPSAwXG5cdFx0aWYgKGVuZFRpbWUgPiB0b3RhbFVuaXRzKSBlbmRUaW1lID0gdG90YWxVbml0c1xuXHRcdGNvbnN0IGR1cmF0aW9uID0gTWF0aC5tYXgoMCwgZW5kVGltZSAtIHN0YXJ0VGltZSlcblx0XHRpZiAoZHVyYXRpb24gPT09IDApIHJldHVybiBudWxsXG5cdFx0cmV0dXJuIHtcblx0XHRcdHRvcDogKHN0YXJ0VGltZSAvIHRvdGFsVW5pdHMpICogMTAwLFxuXHRcdFx0aGVpZ2h0OiAoZHVyYXRpb24gLyB0b3RhbFVuaXRzKSAqIDEwMCxcblx0XHR9XG5cdH1cblxuXHQvLyBNYXggY2x1c3RlciBvZmZzZXQgYnkgZXZlbnQgY291bnQgKDIgZXZlbnRzIOKGkiAyNSUsIGV0Yy4pXG5cdGNvbnN0IG1heE9mZnNldEJ5Q291bnQgPSAobjogbnVtYmVyKSA9PlxuXHRcdG4gPT09IDIgPyAyNSA6IG4gPT09IDMgPyA1MCA6IG4gPT09IDQgPyA2MCA6IDcwXG5cblx0Ly8gU3RlcCAyOiBGb3IgZWFjaCBjbHVzdGVyLCBjb21wdXRlIHBvc2l0aW9uc1xuXHRjb25zdCBwcm9jZXNzZWRFdmVudHM6IFBvc2l0aW9uZWRFdmVudFtdID0gW11cblx0Zm9yIChjb25zdCBjbHVzdGVyIG9mIGNsdXN0ZXJzKSB7XG5cdFx0aWYgKGNsdXN0ZXIubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRjb25zdCBldmVudCA9IGNsdXN0ZXJbMF1cblx0XHRcdGNvbnN0IHBvcyA9IGNvbXB1dGVUb3BIZWlnaHQoZXZlbnQpXG5cdFx0XHRpZiAoIXBvcykgY29udGludWVcblx0XHRcdHByb2Nlc3NlZEV2ZW50cy5wdXNoKHsgLi4uZXZlbnQsIGxlZnQ6IDAsIHdpZHRoOiAxMDAsIC4uLnBvcyB9KVxuXHRcdFx0Y29udGludWVcblx0XHR9XG5cblx0XHQvLyBNdWx0aXBsZSBldmVudHMg4oCUIGxheWVyZWQgcG9zaXRpb25pbmcuIExvbmdlc3QgZHVyYXRpb24gZmlyc3QsIHRpZS1icmVha1xuXHRcdC8vIGJ5IGVhcmxpZXN0IHN0YXJ0LlxuXHRcdGNvbnN0IHNvcnRlZENsdXN0ZXIgPSBbLi4uY2x1c3Rlcl0uc29ydCgoYSwgYikgPT4ge1xuXHRcdFx0Y29uc3QgZHVyRGlmZiA9XG5cdFx0XHRcdGIuZW5kLmRpZmYoYi5zdGFydCwgJ21pbnV0ZScpIC0gYS5lbmQuZGlmZihhLnN0YXJ0LCAnbWludXRlJylcblx0XHRcdHJldHVybiBkdXJEaWZmICE9PSAwID8gZHVyRGlmZiA6IGEuc3RhcnQuZGlmZihiLnN0YXJ0KVxuXHRcdH0pXG5cblx0XHRjb25zdCBuID0gc29ydGVkQ2x1c3Rlci5sZW5ndGhcblx0XHRjb25zdCBvZmZzZXRQZXJFdmVudCA9IG4gPiAxID8gbWF4T2Zmc2V0QnlDb3VudChuKSAvIChuIC0gMSkgOiAwXG5cblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IG47IGkrKykge1xuXHRcdFx0Y29uc3QgZXZlbnQgPSBzb3J0ZWRDbHVzdGVyW2ldXG5cdFx0XHRjb25zdCBwb3MgPSBjb21wdXRlVG9wSGVpZ2h0KGV2ZW50KVxuXHRcdFx0aWYgKCFwb3MpIGNvbnRpbnVlXG5cdFx0XHQvLyBGaXJzdCBldmVudCAobG9uZ2VzdCkgdGFrZXMgZnVsbCB3aWR0aDsgbGF0ZXIgZXZlbnRzIGFyZSBvZmZzZXQuXG5cdFx0XHRjb25zdCBsZWZ0ID0gaSA9PT0gMCA/IDAgOiBvZmZzZXRQZXJFdmVudCAqIGlcblx0XHRcdHByb2Nlc3NlZEV2ZW50cy5wdXNoKHtcblx0XHRcdFx0Li4uZXZlbnQsXG5cdFx0XHRcdC4uLnBvcyxcblx0XHRcdFx0bGVmdCxcblx0XHRcdFx0d2lkdGg6IDEwMCAtIGxlZnQsXG5cdFx0XHRcdHpJbmRleDogaSArIDEsXG5cdFx0XHR9KVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBwcm9jZXNzZWRFdmVudHNcbn1cbiIsCiAgICAiaW1wb3J0IHsgbWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5pbnRlcmZhY2UgVmVydGljYWxHcmlkSGVhZGVyQ29udGFpbmVyUHJvcHMge1xuXHRjaGlsZHJlbj86IFJlYWN0LlJlYWN0Tm9kZVxuXHRjbGFzc2VzPzogeyBoZWFkZXI/OiBzdHJpbmc7IGFsbERheT86IHN0cmluZyB9XG5cdGFsbERheVJvdz86IFJlYWN0LlJlYWN0Tm9kZVxuXHRleHBhbmRBbGxEYXlSb3c/OiBib29sZWFuXG59XG5cbmNvbnN0IE5vTWVtb1ZlcnRpY2FsR3JpZEhlYWRlckNvbnRhaW5lcjogUmVhY3QuRkM8XG5cdFZlcnRpY2FsR3JpZEhlYWRlckNvbnRhaW5lclByb3BzXG4+ID0gKHsgY2hpbGRyZW4sIGNsYXNzZXMsIGFsbERheVJvdywgZXhwYW5kQWxsRGF5Um93ID0gZmFsc2UgfSkgPT4ge1xuXHRjb25zdCB7IHN0aWNreVZpZXdIZWFkZXIsIHZpZXdIZWFkZXJDbGFzc05hbWUgfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KFxuXHRcdChzdGF0ZSkgPT4gKHtcblx0XHRcdHN0aWNreVZpZXdIZWFkZXI6IHN0YXRlLnN0aWNreVZpZXdIZWFkZXIsXG5cdFx0XHR2aWV3SGVhZGVyQ2xhc3NOYW1lOiBzdGF0ZS52aWV3SGVhZGVyQ2xhc3NOYW1lLFxuXHRcdH0pXG5cdClcblx0Y29uc3QgVG90YWxXaWR0aENsYXNzID0gJ21pbi13LWZ1bGwgdy1maXQnXG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0ZXhwYW5kQWxsRGF5Um93ICYmICdmbGV4IGgtZnVsbCBmbGV4LWNvbCcsXG5cdFx0XHRcdHN0aWNreVZpZXdIZWFkZXIgJiYgJ3N0aWNreSB0b3AtMCB6LTIxIGJnLWJhY2tncm91bmQnLCAvLyBaLWluZGV4IGFib3ZlIHRoZSBsZWZ0IHN0aWNreSByZXNvdXJjZSBjb2x1bW5cblx0XHRcdFx0dmlld0hlYWRlckNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHQ+XG5cdFx0XHQ8ZGl2XG5cdFx0XHRcdGNsYXNzTmFtZT17Y24oJ2gtMTIgYm9yZGVyLWInLCBUb3RhbFdpZHRoQ2xhc3MsIGNsYXNzZXM/LmhlYWRlcil9XG5cdFx0XHRcdGRhdGEtdGVzdGlkPVwidmVydGljYWwtZ3JpZC1oZWFkZXJcIlxuXHRcdFx0PlxuXHRcdFx0XHR7Y2hpbGRyZW59XG5cdFx0XHQ8L2Rpdj5cblx0XHRcdHsvKiBBbGwtZGF5IHJvdyAqL31cblx0XHRcdHthbGxEYXlSb3cgJiYgKFxuXHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdCdmbGV4IG1pbi1oLTEyJyxcblx0XHRcdFx0XHRcdFRvdGFsV2lkdGhDbGFzcyxcblx0XHRcdFx0XHRcdGV4cGFuZEFsbERheVJvdyAmJiAnZmxleC0xIG92ZXJmbG93LWhpZGRlbicsXG5cdFx0XHRcdFx0XHRjbGFzc2VzPy5hbGxEYXlcblx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdGRhdGEtdGVzdGlkPVwidmVydGljYWwtZ3JpZC1hbGwtZGF5XCJcblx0XHRcdFx0PlxuXHRcdFx0XHRcdHthbGxEYXlSb3d9XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0KX1cblx0XHQ8L2Rpdj5cblx0KVxufVxuXG5leHBvcnQgY29uc3QgVmVydGljYWxHcmlkSGVhZGVyQ29udGFpbmVyID0gbWVtbyhcblx0Tm9NZW1vVmVydGljYWxHcmlkSGVhZGVyQ29udGFpbmVyXG4pXG4iLAogICAgImltcG9ydCB0eXBlIHsgQnVzaW5lc3NIb3VycyB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB0eXBlIHsgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGdldERheUhvdXJzIH0gZnJvbSAnQC9saWIvdXRpbHMvZGF0ZS11dGlscydcbmltcG9ydCB7IGNhbGN1bGF0ZUJ1c2luZXNzSG91cnNSYW5nZSB9IGZyb20gJy4vYnVzaW5lc3MtaG91cnMnXG5cbmludGVyZmFjZSBHZXRWaWV3SG91cnNPcHRpb25zIHtcblx0cmVmZXJlbmNlRGF0ZTogRGF5anNcblx0YnVzaW5lc3NIb3Vycz86IEJ1c2luZXNzSG91cnMgfCBCdXNpbmVzc0hvdXJzW11cblx0aGlkZU5vbkJ1c2luZXNzSG91cnM/OiBib29sZWFuXG5cdC8qKlxuXHQgKiBGb3Igdmlld3Mgd2l0aCBtdWx0aXBsZSBkYXlzIChsaWtlIFdlZWtWaWV3KSwgd2UgbWlnaHQgd2FudCB0byBzaG93XG5cdCAqIHRoZSB1bmlvbiBvZiBhbGwgYnVzaW5lc3MgaG91cnMgYWNyb3NzIHRob3NlIGRheXMuXG5cdCAqL1xuXHRhbGxEYXRlcz86IERheWpzW11cblx0LyoqXG5cdCAqIE9wdGlvbmFsIGFkZGl0aW9uYWwgYnVzaW5lc3MgaG91cnMgY29uZmlndXJhdGlvbnMgKGUuZy4sIGZyb20gcmVzb3VyY2VzKS5cblx0ICogVGhlc2Ugd2lsbCBiZSBtZXJnZWQgd2l0aCB0aGUgZ2xvYmFsIGJ1c2luZXNzSG91cnMgd2hlbiBjYWxjdWxhdGluZyB0aGUgdmlzaWJsZSByYW5nZS5cblx0ICovXG5cdHJlc291cmNlQnVzaW5lc3NIb3Vycz86IChCdXNpbmVzc0hvdXJzIHwgQnVzaW5lc3NIb3Vyc1tdKVtdXG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSBsaXN0IG9mIGhvdXJzIHRvIGRpc3BsYXkgaW4gdGhlIGNhbGVuZGFyIHZpZXcuXG4gKiBJZiBoaWRlTm9uQnVzaW5lc3NIb3VycyBpcyB0cnVlLCBpdCBmaWx0ZXJzIHRoZSBob3VycyBiYXNlZCBvbiBidXNpbmVzc0hvdXJzIGNvbmZpZ3VyYXRpb24uXG4gKiBGb3IgbXVsdGlwbGUgZGF0ZXMsIGl0IHRha2VzIHRoZSBlYXJsaWVzdCBzdGFydCBhbmQgbGF0ZXN0IGVuZCBhY3Jvc3MgYWxsIGRhdGVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Vmlld0hvdXJzKHtcblx0cmVmZXJlbmNlRGF0ZSxcblx0YnVzaW5lc3NIb3Vycyxcblx0aGlkZU5vbkJ1c2luZXNzSG91cnMsXG5cdGFsbERhdGVzID0gW3JlZmVyZW5jZURhdGVdLFxuXHRyZXNvdXJjZUJ1c2luZXNzSG91cnMgPSBbXSxcbn06IEdldFZpZXdIb3Vyc09wdGlvbnMpOiBEYXlqc1tdIHtcblx0Y29uc3QgaG91cnMgPSBnZXREYXlIb3Vycyh7IHJlZmVyZW5jZURhdGUgfSlcblxuXHRjb25zdCBoYXNCdXNpbmVzc0hvdXJzQ29uZmlnID1cblx0XHQhIWJ1c2luZXNzSG91cnMgfHwgcmVzb3VyY2VCdXNpbmVzc0hvdXJzLmxlbmd0aCA+IDBcblx0Y29uc3Qgc2hvdWxkRmlsdGVyQnlCdXNpbmVzc0hvdXJzID1cblx0XHRoaWRlTm9uQnVzaW5lc3NIb3VycyAmJiBoYXNCdXNpbmVzc0hvdXJzQ29uZmlnXG5cblx0aWYgKCFzaG91bGRGaWx0ZXJCeUJ1c2luZXNzSG91cnMpIHJldHVybiBob3Vyc1xuXG5cdGNvbnN0IHsgbWluU3RhcnQsIG1heEVuZCwgaGFzQnVzaW5lc3NIb3VycyB9ID0gY2FsY3VsYXRlQnVzaW5lc3NIb3Vyc1JhbmdlKHtcblx0XHRhbGxEYXRlcyxcblx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdHJlc291cmNlQnVzaW5lc3NIb3Vycyxcblx0XHRoaWRlTm9uQnVzaW5lc3NIb3Vycyxcblx0fSlcblxuXHRpZiAoIWhhc0J1c2luZXNzSG91cnMpIHJldHVybiBob3Vyc1xuXG5cdGlmIChtaW5TdGFydCA+PSBtYXhFbmQpIHJldHVybiBbXVxuXG5cdHJldHVybiBob3Vycy5maWx0ZXIoKGgpID0+IHtcblx0XHRjb25zdCBob3VyID0gaC5ob3VyKClcblx0XHRyZXR1cm4gaG91ciA+PSBtaW5TdGFydCAmJiBob3VyIDwgbWF4RW5kXG5cdH0pXG59XG4iLAogICAgImltcG9ydCB7IEFsbERheVJvdyB9IGZyb20gJ0AvY29tcG9uZW50cy9hbGwtZGF5LXJvdy9hbGwtZGF5LXJvdydcbmltcG9ydCB7IEFuaW1hdGVkU2VjdGlvbiB9IGZyb20gJ0AvY29tcG9uZW50cy9hbmltYXRpb25zL2FuaW1hdGVkLXNlY3Rpb24nXG5pbXBvcnQgeyBIb3VyTGFiZWwgfSBmcm9tICdAL2NvbXBvbmVudHMvaG91ci1sYWJlbC9ob3VyLWxhYmVsJ1xuaW1wb3J0IHsgVmVydGljYWxHcmlkIH0gZnJvbSAnQC9jb21wb25lbnRzL3ZlcnRpY2FsLWdyaWQvdmVydGljYWwtZ3JpZCdcbmltcG9ydCB7IGdldFZpZXdIb3VycyB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvdXRpbHMvdmlldy1ob3VycydcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB0eXBlIHsgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgeyBnZXREYXlLZXksIGlzVG9kYXkgfSBmcm9tICdAL2xpYi91dGlscy9kYXRlLXV0aWxzJ1xuaW1wb3J0IHsga2V5cyB9IGZyb20gJ0AvbGliL3V0aWxzL2tleXMnXG5cbmV4cG9ydCBjb25zdCBEYXlWaWV3ID0gKCkgPT4ge1xuXHRjb25zdCB7IGN1cnJlbnREYXRlLCB0LCBidXNpbmVzc0hvdXJzLCBoaWRlTm9uQnVzaW5lc3NIb3Vycywgc2xvdER1cmF0aW9uIH0gPVxuXHRcdHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblx0Y29uc3QgdG9kYXkgPSBpc1RvZGF5KGN1cnJlbnREYXRlKVxuXHRjb25zdCBob3VycyA9IGdldFZpZXdIb3Vycyh7XG5cdFx0cmVmZXJlbmNlRGF0ZTogY3VycmVudERhdGUsXG5cdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRoaWRlTm9uQnVzaW5lc3NIb3Vycyxcblx0XHRhbGxEYXRlczogW2N1cnJlbnREYXRlXSxcblx0fSlcblxuXHRjb25zdCBmaXJzdENvbCA9IHtcblx0XHRpZDoga2V5cy5jb2wudGltZSxcblx0XHRkYXk6IHVuZGVmaW5lZCxcblx0XHRkYXlzOiBob3Vycyxcblx0XHRjbGFzc05hbWU6XG5cdFx0XHQnc2hyaW5rLTAgdy0xNiBtaW4tdy0xNiBtYXgtdy0xNiBzdGlja3kgbGVmdC0wIGJnLWJhY2tncm91bmQgei0yMCBib3JkZXItci0wJyxcblx0XHRncmlkVHlwZTogJ2hvdXInIGFzIGNvbnN0LFxuXHRcdG5vRXZlbnRzOiB0cnVlLFxuXHRcdHJlbmRlckNlbGw6IChkYXRlOiBEYXlqcykgPT4gKFxuXHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LW11dGVkLWZvcmVncm91bmQgcC0yIHRleHQtcmlnaHQgdGV4dC1bMTBweF0gc206dGV4dC14cyBmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlclwiPlxuXHRcdFx0XHQ8SG91ckxhYmVsIGRhdGU9e2RhdGV9IC8+XG5cdFx0XHQ8L2Rpdj5cblx0XHQpLFxuXHR9XG5cblx0Y29uc3QgY29sdW1ucyA9IHtcblx0XHRpZDoga2V5cy5jb2wuZGF5KGN1cnJlbnREYXRlKSxcblx0XHRkYXk6IGN1cnJlbnREYXRlLFxuXHRcdGRheXM6IGhvdXJzLFxuXHRcdGNsYXNzTmFtZTogJ3ctW2NhbGMoMTAwJS00cmVtKV0gZmxleC0xJyxcblx0XHRncmlkVHlwZTogJ2hvdXInIGFzIGNvbnN0LFxuXHR9XG5cblx0cmV0dXJuIChcblx0XHQ8VmVydGljYWxHcmlkXG5cdFx0XHRhbGxEYXlSb3c9ezxBbGxEYXlSb3cgZGF5cz17W2N1cnJlbnREYXRlXX0gLz59XG5cdFx0XHRjbGFzc2VzPXt7XG5cdFx0XHRcdGhlYWRlcjogJ3ctZnVsbCcsXG5cdFx0XHRcdGJvZHk6ICd3LWZ1bGwnLFxuXHRcdFx0XHRhbGxEYXk6ICd3LWZ1bGwnLFxuXHRcdFx0fX1cblx0XHRcdGNvbHVtbnM9e1tmaXJzdENvbCwgY29sdW1uc119XG5cdFx0XHRncmlkVHlwZT1cImhvdXJcIlxuXHRcdFx0c2xvdER1cmF0aW9uTWludXRlcz17c2xvdER1cmF0aW9ufVxuXHRcdFx0dmFyaWFudD1cInJlZ3VsYXJcIlxuXHRcdD5cblx0XHRcdHsvKiBIZWFkZXIgKi99XG5cdFx0XHQ8ZGl2XG5cdFx0XHRcdGNsYXNzTmFtZT17J2ZsZXggZmxleC0xIGp1c3RpZnktY2VudGVyIGl0ZW1zLWNlbnRlciBtaW4taC0xMid9XG5cdFx0XHRcdGRhdGEtdGVzdGlkPVwiZGF5LXZpZXctaGVhZGVyXCJcblx0XHRcdD5cblx0XHRcdFx0PEFuaW1hdGVkU2VjdGlvblxuXHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHQnZmxleCBqdXN0aWZ5LWNlbnRlciBpdGVtcy1jZW50ZXIgdGV4dC1jZW50ZXIgdGV4dC1zbSBmb250LXNlbWlib2xkIHNtOnRleHQteGwnLFxuXHRcdFx0XHRcdFx0dG9kYXkgJiYgJ3RleHQtcHJpbWFyeSdcblx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdHRyYW5zaXRpb25LZXk9e2dldERheUtleShjdXJyZW50RGF0ZSl9XG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7Y3VycmVudERhdGUuZm9ybWF0KCdkZGRkLCBMTCcpfVxuXHRcdFx0XHRcdHt0b2RheSAmJiAoXG5cdFx0XHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJiZy1wcmltYXJ5IHRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIG1sLTIgcm91bmRlZC1mdWxsIHB4LTEgcHktMC41IHRleHQteHMgc206cHgtMiBzbTp0ZXh0LXNtXCI+XG5cdFx0XHRcdFx0XHRcdHt0KCd0b2RheScpfVxuXHRcdFx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0XHRcdCl9XG5cdFx0XHRcdDwvQW5pbWF0ZWRTZWN0aW9uPlxuXHRcdFx0PC9kaXY+XG5cdFx0PC9WZXJ0aWNhbEdyaWQ+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBIb3Jpem9udGFsR3JpZCB9IGZyb20gJ0AvY29tcG9uZW50cy9ob3Jpem9udGFsLWdyaWQvaG9yaXpvbnRhbC1ncmlkJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHsgZ2V0TW9udGhXZWVrcyB9IGZyb20gJ0AvbGliL3V0aWxzL2RhdGUtdXRpbHMnXG5pbXBvcnQgeyBrZXlzIH0gZnJvbSAnQC9saWIvdXRpbHMva2V5cydcbmltcG9ydCB7IE1vbnRoSGVhZGVyIH0gZnJvbSAnLi9tb250aC1oZWFkZXInXG5pbXBvcnQgdHlwZSB7IE1vbnRoVmlld1Byb3BzIH0gZnJvbSAnLi90eXBlcydcblxuZXhwb3J0IGNvbnN0IE1vbnRoVmlldzogUmVhY3QuRkM8TW9udGhWaWV3UHJvcHM+ID0gKCkgPT4ge1xuXHRjb25zdCB7IGN1cnJlbnREYXRlLCBmaXJzdERheU9mV2VlayB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXG5cdGNvbnN0IHdlZWtzID0gdXNlTWVtbyhcblx0XHQoKSA9PiBnZXRNb250aFdlZWtzKGN1cnJlbnREYXRlLCBmaXJzdERheU9mV2VlayksXG5cdFx0W2N1cnJlbnREYXRlLCBmaXJzdERheU9mV2Vla11cblx0KVxuXG5cdGNvbnN0IHJvd3MgPSB3ZWVrcy5tYXAoKGRheXMsIHdlZWtJbmRleCkgPT4gKHtcblx0XHRpZDoga2V5cy5saXN0S2V5KCd3ZWVrJywgd2Vla0luZGV4KSxcblx0XHRjb2x1bW5zOiBkYXlzLm1hcCgoZGF5KSA9PiAoe1xuXHRcdFx0aWQ6IGtleXMuY29sLmRheShkYXkpLFxuXHRcdFx0ZGF5LFxuXHRcdFx0Y2xhc3NOYW1lOiAndy1hdXRvJyxcblx0XHRcdGdyaWRUeXBlOiAnZGF5JyBhcyBjb25zdCxcblx0XHR9KSksXG5cdFx0Y2xhc3NOYW1lOiAnZmxleC0xJyxcblx0XHRzaG93RGF5TnVtYmVyOiB0cnVlLFxuXHR9KSlcblxuXHRyZXR1cm4gKFxuXHRcdDxIb3Jpem9udGFsR3JpZFxuXHRcdFx0Y2xhc3Nlcz17eyBib2R5OiAndy1mdWxsJywgaGVhZGVyOiAndy1mdWxsJyB9fVxuXHRcdFx0cm93cz17cm93c31cblx0XHRcdHZhcmlhbnQ9XCJyZWd1bGFyXCJcblx0XHQ+XG5cdFx0XHQ8TW9udGhIZWFkZXIgY2xhc3NOYW1lPVwiaC0xMlwiIC8+XG5cdFx0PC9Ib3Jpem9udGFsR3JpZD5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZVJlZiB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgU2Nyb2xsQXJlYSwgU2Nyb2xsQmFyIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL3Njcm9sbC1hcmVhJ1xuaW1wb3J0IHsgdXNlU2Nyb2xsVG9UaW1lIH0gZnJvbSAnQC9jb21wb25lbnRzL3ZlcnRpY2FsLWdyaWQvdXNlLXNjcm9sbC10by10aW1lJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IEhvcml6b250YWxHcmlkSGVhZGVyQ29udGFpbmVyIH0gZnJvbSAnLi9ob3Jpem9udGFsLWdyaWQtaGVhZGVyLWNvbnRhaW5lcidcbmltcG9ydCB7XG5cdEhvcml6b250YWxHcmlkUm93LFxuXHR0eXBlIEhvcml6b250YWxHcmlkUm93UHJvcHMsXG59IGZyb20gJy4vaG9yaXpvbnRhbC1ncmlkLXJvdydcblxuaW50ZXJmYWNlIEhvcml6b250YWxHcmlkUHJvcHMge1xuXHRyb3dzOiBIb3Jpem9udGFsR3JpZFJvd1Byb3BzW11cblx0Y2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGVcblx0Y2xhc3Nlcz86IHsgaGVhZGVyPzogc3RyaW5nOyBib2R5Pzogc3RyaW5nIH1cblx0YWxsRGF5PzogYm9vbGVhblxuXHRncmlkVHlwZT86ICdkYXknIHwgJ2hvdXInXG5cdHZhcmlhbnQ/OiAncmVndWxhcicgfCAncmVzb3VyY2UnXG5cdGRheU51bWJlckhlaWdodD86IG51bWJlclxufVxuXG5leHBvcnQgY29uc3QgSG9yaXpvbnRhbEdyaWQ6IFJlYWN0LkZDPEhvcml6b250YWxHcmlkUHJvcHM+ID0gKHtcblx0cm93cyxcblx0Y2hpbGRyZW4sXG5cdGNsYXNzZXMsXG5cdGFsbERheTogdG9wTGV2ZWxBbGxEYXksXG5cdGdyaWRUeXBlLFxuXHR2YXJpYW50ID0gJ3Jlc291cmNlJyxcblx0ZGF5TnVtYmVySGVpZ2h0LFxufSkgPT4ge1xuXHRjb25zdCB7IGN1cnJlbnREYXRlLCB2aWV3LCBzY3JvbGxUaW1lIH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cdGNvbnN0IHZpZXdwb3J0UmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50IHwgbnVsbD4obnVsbClcblxuXHRjb25zdCBpc1Jlc291cmNlQ2FsZW5kYXIgPSB2YXJpYW50ID09PSAncmVzb3VyY2UnXG5cdGNvbnN0IGlzUmVndWxhckNhbGVuZGFyID0gIWlzUmVzb3VyY2VDYWxlbmRhclxuXHRjb25zdCBjYW5Ib3Jpem9udGFsU2Nyb2xsVG9Ib3VyID0gZ3JpZFR5cGUgPT09ICdob3VyJyAmJiBpc1Jlc291cmNlQ2FsZW5kYXJcblxuXHR1c2VTY3JvbGxUb1RpbWUoe1xuXHRcdHZpZXdwb3J0UmVmLFxuXHRcdHNjcm9sbFRpbWUsXG5cdFx0ZW5hYmxlZDogY2FuSG9yaXpvbnRhbFNjcm9sbFRvSG91cixcblx0XHRzY3JvbGxLZXk6IGAke3ZpZXd9LSR7Y3VycmVudERhdGUuZm9ybWF0KCdZWVlZLU1NLUREJyl9YCxcblx0XHRheGlzOiAnaG9yaXpvbnRhbCcsXG5cdH0pXG5cblx0Y29uc3QgaGVhZGVyID0gY2hpbGRyZW4gJiYgKFxuXHRcdDxIb3Jpem9udGFsR3JpZEhlYWRlckNvbnRhaW5lciBjbGFzc05hbWU9e2NsYXNzZXM/LmhlYWRlcn0+XG5cdFx0XHR7Y2hpbGRyZW59XG5cdFx0PC9Ib3Jpem9udGFsR3JpZEhlYWRlckNvbnRhaW5lcj5cblx0KVxuXG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPVwiaC1mdWxsIGZsZXggZmxleC1jb2xcIlxuXHRcdFx0ZGF0YS10ZXN0aWQ9XCJob3Jpem9udGFsLWdyaWQtY29udGFpbmVyXCJcblx0XHQ+XG5cdFx0XHR7LyoqXG5cdFx0XHQgKiBoZWFkZXIgcm93IGlzIHJlbmRlcmVkIG91dHNpZGUgc2Nyb2xsIGFyZWEgZm9yIHJlZ3VsYXIgY2FsZW5kYXJcblx0XHRcdCAqL31cblx0XHRcdHtpc1JlZ3VsYXJDYWxlbmRhciAmJiBoZWFkZXJ9XG5cblx0XHRcdDxTY3JvbGxBcmVhXG5cdFx0XHRcdGNsYXNzTmFtZT17Y24oJ2gtZnVsbCcsIGlzUmVndWxhckNhbGVuZGFyICYmICdvdmVyZmxvdy1hdXRvJyl9XG5cdFx0XHRcdGRhdGEtdGVzdGlkPVwiaG9yaXpvbnRhbC1ncmlkLXNjcm9sbFwiXG5cdFx0XHRcdHZpZXdQb3J0UHJvcHM9e3tcblx0XHRcdFx0XHRjbGFzc05hbWU6ICcqOmZsZXghICo6ZmxleC1jb2whICo6bWluLWgtZnVsbCcsXG5cdFx0XHRcdFx0cmVmOiB2aWV3cG9ydFJlZixcblx0XHRcdFx0fX1cblx0XHRcdD5cblx0XHRcdFx0ey8qKlxuXHRcdFx0XHQgKiBoZWFkZXIgcm93IGZvciByZXNvdXJjZSBjYWxlbmRhciBpbnNpZGUgc2Nyb2xsIGFyZWFcblx0XHRcdFx0ICogKi99XG5cdFx0XHRcdHtpc1Jlc291cmNlQ2FsZW5kYXIgJiYgaGVhZGVyfVxuXG5cdFx0XHRcdHsvKiBDYWxlbmRhciBhcmVhIHdpdGggc2Nyb2xsICovfVxuXHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbignZmxleCBmbGV4LTEgdy1maXQnLCBjbGFzc2VzPy5ib2R5KX1cblx0XHRcdFx0XHRkYXRhLXRlc3RpZD1cImhvcml6b250YWwtZ3JpZC1ib2R5XCJcblx0XHRcdFx0PlxuXHRcdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cInJlbGF0aXZlIHctZnVsbCBmbGV4IGZsZXgtY29sIGZsZXgtMVwiXG5cdFx0XHRcdFx0XHRrZXk9e2N1cnJlbnREYXRlLmZvcm1hdCgnWVlZWS1NTScpfVxuXHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdHtyb3dzLm1hcCgocm93LCBpbmRleCkgPT4gKFxuXHRcdFx0XHRcdFx0XHQ8SG9yaXpvbnRhbEdyaWRSb3dcblx0XHRcdFx0XHRcdFx0XHRhbGxEYXk9e3Jvdy5hbGxEYXkgPz8gdG9wTGV2ZWxBbGxEYXl9XG5cdFx0XHRcdFx0XHRcdFx0ZGF5TnVtYmVySGVpZ2h0PXtkYXlOdW1iZXJIZWlnaHR9XG5cdFx0XHRcdFx0XHRcdFx0Z3JpZFR5cGU9e2dyaWRUeXBlfVxuXHRcdFx0XHRcdFx0XHRcdGlzTGFzdFJvdz17aW5kZXggPT09IHJvd3MubGVuZ3RoIC0gMX1cblx0XHRcdFx0XHRcdFx0XHRrZXk9e3Jvdy5pZH1cblx0XHRcdFx0XHRcdFx0XHR2YXJpYW50PXt2YXJpYW50fVxuXHRcdFx0XHRcdFx0XHRcdHsuLi5yb3d9XG5cdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHQpKX1cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PC9kaXY+XG5cblx0XHRcdFx0PFNjcm9sbEJhciBjbGFzc05hbWU9XCJ6LTMwXCIgLz5cblx0XHRcdFx0PFNjcm9sbEJhciBjbGFzc05hbWU9XCJ6LTMwXCIgb3JpZW50YXRpb249XCJob3Jpem9udGFsXCIgLz5cblx0XHRcdDwvU2Nyb2xsQXJlYT5cblx0XHQ8L2Rpdj5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgeyBtZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5pbnRlcmZhY2UgSG9yaXpvbnRhbEdyaWRIZWFkZXJDb250YWluZXJQcm9wcyB7XG5cdGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlXG5cdGNsYXNzTmFtZT86IHN0cmluZ1xufVxuXG5jb25zdCBOb01lbW9Ib3Jpem9udGFsR3JpZEhlYWRlckNvbnRhaW5lciA9ICh7XG5cdGNoaWxkcmVuLFxuXHRjbGFzc05hbWUsXG59OiBIb3Jpem9udGFsR3JpZEhlYWRlckNvbnRhaW5lclByb3BzKSA9PiB7XG5cdGNvbnN0IHsgc3RpY2t5Vmlld0hlYWRlciwgdmlld0hlYWRlckNsYXNzTmFtZSB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoXG5cdFx0KHN0YXRlKSA9PiAoe1xuXHRcdFx0c3RpY2t5Vmlld0hlYWRlcjogc3RhdGUuc3RpY2t5Vmlld0hlYWRlcixcblx0XHRcdHZpZXdIZWFkZXJDbGFzc05hbWU6IHN0YXRlLnZpZXdIZWFkZXJDbGFzc05hbWUsXG5cdFx0fSlcblx0KVxuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCdmbGV4IGgtMTIgdy1maXQnLFxuXHRcdFx0XHRzdGlja3lWaWV3SGVhZGVyICYmICdzdGlja3kgdG9wLTAgei0yMSBiZy1iYWNrZ3JvdW5kJyxcblx0XHRcdFx0Y2xhc3NOYW1lLFxuXHRcdFx0XHR2aWV3SGVhZGVyQ2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0ZGF0YS10ZXN0aWQ9XCJob3Jpem9udGFsLWdyaWQtaGVhZGVyXCJcblx0XHQ+XG5cdFx0XHR7Y2hpbGRyZW59XG5cdFx0PC9kaXY+XG5cdClcbn1cblxuZXhwb3J0IGNvbnN0IEhvcml6b250YWxHcmlkSGVhZGVyQ29udGFpbmVyID0gbWVtbyhcblx0Tm9NZW1vSG9yaXpvbnRhbEdyaWRIZWFkZXJDb250YWluZXJcbilcbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBBbmltYXRlZFNlY3Rpb24gfSBmcm9tICdAL2NvbXBvbmVudHMvYW5pbWF0aW9ucy9hbmltYXRlZC1zZWN0aW9uJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IGdldFdlZWtEYXlzIH0gZnJvbSAnQC9saWIvdXRpbHMvZGF0ZS11dGlscydcbmltcG9ydCB7IGtleXMgfSBmcm9tICdAL2xpYi91dGlscy9rZXlzJ1xuXG5pbnRlcmZhY2UgTW9udGhIZWFkZXJQcm9wcyB7XG5cdGNsYXNzTmFtZT86IHN0cmluZ1xufVxuXG5leHBvcnQgY29uc3QgTW9udGhIZWFkZXI6IFJlYWN0LkZDPE1vbnRoSGVhZGVyUHJvcHM+ID0gKHsgY2xhc3NOYW1lIH0pID0+IHtcblx0Y29uc3QgeyBmaXJzdERheU9mV2Vlaywgc3RpY2t5Vmlld0hlYWRlciwgdmlld0hlYWRlckNsYXNzTmFtZSwgY3VycmVudERhdGUgfSA9XG5cdFx0dXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXG5cdC8vIFJlb3JkZXIgd2VlayBkYXlzIGJhc2VkIG9uIGZpcnN0RGF5T2ZXZWVrXG5cdGNvbnN0IHdlZWtEYXlzID0gZ2V0V2Vla0RheXMoY3VycmVudERhdGUsIGZpcnN0RGF5T2ZXZWVrKVxuXG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0J2ZsZXggdy1mdWxsJyxcblx0XHRcdFx0c3RpY2t5Vmlld0hlYWRlciAmJiAnc3RpY2t5IHRvcC0wIHotMjAnLFxuXHRcdFx0XHR2aWV3SGVhZGVyQ2xhc3NOYW1lLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXRlc3RpZD1cIm1vbnRoLWhlYWRlclwiXG5cdFx0PlxuXHRcdFx0e3dlZWtEYXlzLm1hcCgod2Vla0RheSwgaW5kZXgpID0+IChcblx0XHRcdFx0PEFuaW1hdGVkU2VjdGlvblxuXHRcdFx0XHRcdGNsYXNzTmFtZT1cInB5LTIgdGV4dC1jZW50ZXIgZm9udC1tZWRpdW0gYm9yZGVyLXIgbGFzdDpib3JkZXItci0wIGJvcmRlci1iIGZsZXgtMSBtaW4tdy0wXCJcblx0XHRcdFx0XHRkYXRhLXRlc3RpZD17a2V5cy5oZWFkZXIud2Vla2RheSgnbW9udGgnLCB3ZWVrRGF5LmZvcm1hdCgnZGRkJykpfVxuXHRcdFx0XHRcdGRlbGF5PXtpbmRleCAqIDAuMDV9XG5cdFx0XHRcdFx0a2V5PXt3ZWVrRGF5LnRvSVNPU3RyaW5nKCl9XG5cdFx0XHRcdFx0dHJhbnNpdGlvbktleT17d2Vla0RheS50b0lTT1N0cmluZygpfVxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwidGV4dC1zbSBjYXBpdGFsaXplIHRydW5jYXRlIHctZnVsbCBibG9ja1wiPlxuXHRcdFx0XHRcdFx0e3dlZWtEYXkuZm9ybWF0KCdkZGQnKX1cblx0XHRcdFx0XHQ8L3NwYW4+XG5cdFx0XHRcdDwvQW5pbWF0ZWRTZWN0aW9uPlxuXHRcdFx0KSl9XG5cdFx0PC9kaXY+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBBbGxEYXlSb3cgfSBmcm9tICdAL2NvbXBvbmVudHMvYWxsLWRheS1yb3cvYWxsLWRheS1yb3cnXG5pbXBvcnQgeyBBbmltYXRlZFNlY3Rpb24gfSBmcm9tICdAL2NvbXBvbmVudHMvYW5pbWF0aW9ucy9hbmltYXRlZC1zZWN0aW9uJ1xuaW1wb3J0IHsgSG91ckxhYmVsIH0gZnJvbSAnQC9jb21wb25lbnRzL2hvdXItbGFiZWwvaG91ci1sYWJlbCdcbmltcG9ydCB7IFZlcnRpY2FsR3JpZCB9IGZyb20gJ0AvY29tcG9uZW50cy92ZXJ0aWNhbC1ncmlkL3ZlcnRpY2FsLWdyaWQnXG5pbXBvcnQgeyBnZXRWaWV3SG91cnMgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL3V0aWxzL3ZpZXctaG91cnMnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSB7IERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgZ2V0V2Vla0RheXMsIGlzVG9kYXkgfSBmcm9tICdAL2xpYi91dGlscy9kYXRlLXV0aWxzJ1xuaW1wb3J0IHsga2V5cyB9IGZyb20gJ0AvbGliL3V0aWxzL2tleXMnXG5cbmNvbnN0IENFTExfQ0xBU1MgPSAnZmxleC0xIG1pbi13LTAnXG5jb25zdCBMRUZUX0NPTF9XSURUSCA9ICd3LTEwIHNtOnctMTYgbWluLXctMTAgc206bWluLXctMTYgbWF4LXctMTAgc206bWF4LXctMTYnXG5cbmV4cG9ydCBjb25zdCBXZWVrVmlldzogUmVhY3QuRkMgPSAoKSA9PiB7XG5cdGNvbnN0IHtcblx0XHR0LFxuXHRcdGN1cnJlbnREYXRlLFxuXHRcdGZpcnN0RGF5T2ZXZWVrLFxuXHRcdHNlbGVjdERhdGUsXG5cdFx0b3BlbkV2ZW50Rm9ybSxcblx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzLFxuXHRcdGhpZGRlbkRheXMsXG5cdFx0c2xvdER1cmF0aW9uLFxuXHR9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXG5cdGNvbnN0IHdlZWtEYXlzID0gdXNlTWVtbyhcblx0XHQoKSA9PiBnZXRXZWVrRGF5cyhjdXJyZW50RGF0ZSwgZmlyc3REYXlPZldlZWspLFxuXHRcdFtjdXJyZW50RGF0ZSwgZmlyc3REYXlPZldlZWtdXG5cdClcblxuXHRjb25zdCB2aXNpYmxlRGF5cyA9IHVzZU1lbW8oXG5cdFx0KCkgPT5cblx0XHRcdGhpZGRlbkRheXNcblx0XHRcdFx0PyB3ZWVrRGF5cy5maWx0ZXIoKGRheSkgPT4gIWhpZGRlbkRheXMuaGFzKGRheS5kYXkoKSkpXG5cdFx0XHRcdDogd2Vla0RheXMsXG5cdFx0W3dlZWtEYXlzLCBoaWRkZW5EYXlzXVxuXHQpXG5cblx0Y29uc3QgaG91cnMgPSB1c2VNZW1vKFxuXHRcdCgpID0+XG5cdFx0XHRnZXRWaWV3SG91cnMoe1xuXHRcdFx0XHRyZWZlcmVuY2VEYXRlOiBjdXJyZW50RGF0ZSxcblx0XHRcdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRcdFx0aGlkZU5vbkJ1c2luZXNzSG91cnMsXG5cdFx0XHRcdGFsbERhdGVzOiB3ZWVrRGF5cyxcblx0XHRcdH0pLFxuXHRcdFtjdXJyZW50RGF0ZSwgYnVzaW5lc3NIb3VycywgaGlkZU5vbkJ1c2luZXNzSG91cnMsIHdlZWtEYXlzXVxuXHQpXG5cblx0Y29uc3QgZmlyc3RDb2wgPSB7XG5cdFx0aWQ6IGtleXMuY29sLnRpbWUsXG5cdFx0ZGF5czogaG91cnMsXG5cdFx0ZGF5OiB1bmRlZmluZWQsXG5cdFx0Y2xhc3NOYW1lOiBgc2hyaW5rLTAgJHtMRUZUX0NPTF9XSURUSH0gc3RpY2t5IGxlZnQtMCBiZy1iYWNrZ3JvdW5kIHotMjAgYm9yZGVyLXItMGAsXG5cdFx0Z3JpZFR5cGU6ICdob3VyJyBhcyBjb25zdCxcblx0XHRub0V2ZW50czogdHJ1ZSxcblx0XHRyZW5kZXJDZWxsOiAoZGF0ZTogRGF5anMpID0+IChcblx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHAtMiB0ZXh0LXJpZ2h0IHRleHQtWzEwcHhdIHNtOnRleHQteHMgZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXJcIj5cblx0XHRcdFx0PEhvdXJMYWJlbCBkYXRlPXtkYXRlfSAvPlxuXHRcdFx0PC9kaXY+XG5cdFx0KSxcblx0fVxuXG5cdC8vIEdlbmVyYXRlIHdlZWsgZGF5cyDigJQgZWFjaCBjb2x1bW4gZ2V0cyBpdHMgb3duIGhvdXJzIG9uIHRoZSBjb3JyZWN0IGRhdGVcblx0Y29uc3QgY29sdW1ucyA9IHVzZU1lbW8oKCkgPT4ge1xuXHRcdHJldHVybiB2aXNpYmxlRGF5cy5tYXAoKGRheSkgPT4gKHtcblx0XHRcdGlkOiBrZXlzLmNvbC5kYXkoZGF5KSxcblx0XHRcdGRheSxcblx0XHRcdGxhYmVsOiBkYXkuZm9ybWF0KCdEJyksXG5cdFx0XHRjbGFzc05hbWU6IENFTExfQ0xBU1MsXG5cdFx0XHRkYXlzOiBnZXRWaWV3SG91cnMoe1xuXHRcdFx0XHRyZWZlcmVuY2VEYXRlOiBkYXksXG5cdFx0XHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0XHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzLFxuXHRcdFx0XHRhbGxEYXRlczogd2Vla0RheXMsXG5cdFx0XHR9KSxcblx0XHRcdHZhbHVlOiBkYXksXG5cdFx0fSkpXG5cdH0sIFt3ZWVrRGF5cywgYnVzaW5lc3NIb3VycywgaGlkZU5vbkJ1c2luZXNzSG91cnMsIHZpc2libGVEYXlzLm1hcF0pXG5cblx0Y29uc3QgY3NzVmFycyA9IHtcblx0XHQnLS12aXNpYmxlLWRheXMnOiB2aXNpYmxlRGF5cy5sZW5ndGgsXG5cdH0gYXMgUmVhY3QuQ1NTUHJvcGVydGllc1xuXG5cdGNvbnN0IFdpZHRoQ2xhc3MgPSAndy1mdWxsJ1xuXHRyZXR1cm4gKFxuXHRcdDxWZXJ0aWNhbEdyaWRcblx0XHRcdGFsbERheVJvdz17XG5cdFx0XHRcdDxBbGxEYXlSb3dcblx0XHRcdFx0XHRjbGFzc2VzPXt7IGNlbGw6IENFTExfQ0xBU1MsIHNwYWNlcjogTEVGVF9DT0xfV0lEVEggfX1cblx0XHRcdFx0XHRkYXlzPXt2aXNpYmxlRGF5c31cblx0XHRcdFx0Lz5cblx0XHRcdH1cblx0XHRcdGNsYXNzZXM9e3tcblx0XHRcdFx0aGVhZGVyOiBgJHtXaWR0aENsYXNzfSBoLTE4YCxcblx0XHRcdFx0YWxsRGF5OiBXaWR0aENsYXNzLFxuXHRcdFx0XHRib2R5OiBXaWR0aENsYXNzLFxuXHRcdFx0fX1cblx0XHRcdGNvbHVtbnM9e1tmaXJzdENvbCwgLi4uY29sdW1uc119XG5cdFx0XHRncmlkVHlwZT1cImhvdXJcIlxuXHRcdFx0c2xvdER1cmF0aW9uTWludXRlcz17c2xvdER1cmF0aW9ufVxuXHRcdFx0c3R5bGU9e2Nzc1ZhcnN9XG5cdFx0XHR2YXJpYW50PVwicmVndWxhclwiXG5cdFx0PlxuXHRcdFx0PGRpdiBjbGFzc05hbWU9eydmbGV4IGgtZnVsbCBmbGV4LTEnfSBkYXRhLXRlc3RpZD1cIndlZWstdmlldy1oZWFkZXJcIj5cblx0XHRcdFx0ey8qIENvcm5lciBjZWxsIHdpdGggd2VlayBudW1iZXIgKi99XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidy0xMCBzbTp3LTE2IG1pbi13LTEwIHNtOm1pbi13LTE2IGgtZnVsbCBzaHJpbmstMCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgYm9yZGVyLXIgcC0yIGZsZXhcIj5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIG1pbi13LTAgdy1mdWxsXCI+XG5cdFx0XHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LW11dGVkLWZvcmVncm91bmQgdGV4dC14cyB0cnVuY2F0ZSB3LWZ1bGwgdGV4dC1jZW50ZXJcIj5cblx0XHRcdFx0XHRcdFx0e3QoJ3dlZWsnKX1cblx0XHRcdFx0XHRcdDwvc3Bhbj5cblx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cImZvbnQtbWVkaXVtIHRydW5jYXRlIHctZnVsbCB0ZXh0LWNlbnRlclwiPlxuXHRcdFx0XHRcdFx0XHR7Y3VycmVudERhdGUud2VlaygpfVxuXHRcdFx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8L2Rpdj5cblxuXHRcdFx0XHR7LyogRGF5IGhlYWRlciBjZWxscyAqL31cblx0XHRcdFx0e3Zpc2libGVEYXlzLm1hcCgoZGF5LCBpbmRleCkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IHRvZGF5ID0gaXNUb2RheShkYXkpXG5cdFx0XHRcdFx0Y29uc3Qga2V5ID0ga2V5cy5oZWFkZXIud2Vlay5kYXkoZGF5KVxuXG5cdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdDxBbmltYXRlZFNlY3Rpb25cblx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdFx0XHQnaG92ZXI6YmctYWNjZW50IGZsZXgtMSBtaW4tdy0wIGZsZXggZmxleC1jb2wganVzdGlmeS1jZW50ZXIgY3Vyc29yLXBvaW50ZXIgcC0xIHRleHQtY2VudGVyIHNtOnAtMiBib3JkZXItciBsYXN0OmJvcmRlci1yLTAgdy0yMCBoLWZ1bGwnLFxuXHRcdFx0XHRcdFx0XHRcdHRvZGF5ICYmICdiZy1wcmltYXJ5LzEwIGZvbnQtYm9sZCdcblx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e2tleXMuaGVhZGVyLndlZWtkYXkoJ3dlZWsnLCBkYXkuZm9ybWF0KCdkZGRkJykpfVxuXHRcdFx0XHRcdFx0XHRkZWxheT17aW5kZXggKiAwLjA1fVxuXHRcdFx0XHRcdFx0XHRrZXk9e2tleX1cblx0XHRcdFx0XHRcdFx0b25DbGljaz17KCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdHNlbGVjdERhdGUoZGF5KVxuXHRcdFx0XHRcdFx0XHRcdG9wZW5FdmVudEZvcm0oeyBzdGFydDogZGF5IH0pXG5cdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHRcdHRyYW5zaXRpb25LZXk9e2tleX1cblx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHNtOnRleHQtc20gdHJ1bmNhdGUgdy1mdWxsXCI+XG5cdFx0XHRcdFx0XHRcdFx0e2RheS5mb3JtYXQoJ2RkZCcpfVxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHRcdFx0XHQnbXgtYXV0byBtdC0xIGZsZXggaC02IHctNiBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZC1mdWxsIHRleHQteHMnLFxuXHRcdFx0XHRcdFx0XHRcdFx0dG9kYXkgJiYgJ2JnLXByaW1hcnkgdGV4dC1wcmltYXJ5LWZvcmVncm91bmQnXG5cdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdHtkYXkuZm9ybWF0KCdEJyl9XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0PC9BbmltYXRlZFNlY3Rpb24+XG5cdFx0XHRcdFx0KVxuXHRcdFx0XHR9KX1cblx0XHRcdDwvZGl2PlxuXHRcdDwvVmVydGljYWxHcmlkPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB7IEFuaW1hdGVkU2VjdGlvbiB9IGZyb20gJ0AvY29tcG9uZW50cy9hbmltYXRpb25zL2FuaW1hdGVkLXNlY3Rpb24nXG5pbXBvcnQgeyBTY3JvbGxBcmVhLCBTY3JvbGxCYXIgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvc2Nyb2xsLWFyZWEnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgZGF5anMsIHsgdHlwZSBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IGdldERheUtleSwgZ2V0V2Vla0RheXMsIGlzVG9kYXkgfSBmcm9tICdAL2xpYi91dGlscy9kYXRlLXV0aWxzJ1xuaW1wb3J0IHsga2V5cyB9IGZyb20gJ0AvbGliL3V0aWxzL2tleXMnXG5cbmNvbnN0IEVWRU5UX0RPVF9DT0xPUlMgPSBbJ2JnLXByaW1hcnknLCAnYmctYmx1ZS01MDAnLCAnYmctZ3JlZW4tNTAwJ11cbmNvbnN0IERBWVNfSU5fTUlOSV9DQUxFTkRBUiA9IDQyXG5cbmludGVyZmFjZSBNb250aERhdGEge1xuXHRkYXRlOiBEYXlqc1xuXHRuYW1lOiBzdHJpbmdcblx0ZXZlbnRDb3VudDogbnVtYmVyXG5cdG1vbnRoS2V5OiBzdHJpbmdcbn1cblxuaW50ZXJmYWNlIERheURhdGEge1xuXHRkYXRlOiBEYXlqc1xuXHRkYXlLZXk6IHN0cmluZ1xuXHRpc0luQ3VycmVudE1vbnRoOiBib29sZWFuXG5cdGlzVG9kYXk6IGJvb2xlYW5cblx0aXNTZWxlY3RlZDogYm9vbGVhblxuXHRldmVudENvdW50OiBudW1iZXJcbn1cblxuZXhwb3J0IGNvbnN0IFllYXJWaWV3ID0gKCkgPT4ge1xuXHRjb25zdCB7XG5cdFx0Y3VycmVudERhdGUsXG5cdFx0c2VsZWN0RGF0ZSxcblx0XHRldmVudHMsXG5cdFx0c2V0Vmlldyxcblx0XHRnZXRFdmVudHNGb3JEYXRlUmFuZ2UsXG5cdFx0dCxcblx0XHRmaXJzdERheU9mV2Vlayxcblx0fSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblx0Y29uc3QgY3VycmVudFllYXIgPSBjdXJyZW50RGF0ZS55ZWFyKClcblxuXHRjb25zdCB3ZWVrZGF5SGVhZGVycyA9IGdldFdlZWtEYXlzKGRheWpzKCksIGZpcnN0RGF5T2ZXZWVrKS5tYXAoKGQpID0+ICh7XG5cdFx0aWQ6IGQuZGF5KCkudG9TdHJpbmcoKSxcblx0XHRsYWJlbDogZC5mb3JtYXQoJ2RkJyksXG5cdH0pKVxuXG5cdGNvbnN0IGdlbmVyYXRlTW9udGhzRGF0YSA9ICgpOiBNb250aERhdGFbXSA9PiB7XG5cdFx0cmV0dXJuIEFycmF5LmZyb20oeyBsZW5ndGg6IDEyIH0sIChfLCBtb250aEluZGV4KSA9PiB7XG5cdFx0XHRjb25zdCBtb250aERhdGUgPSBkYXlqcygpXG5cdFx0XHRcdC55ZWFyKGN1cnJlbnRZZWFyKVxuXHRcdFx0XHQubW9udGgobW9udGhJbmRleClcblx0XHRcdFx0LnN0YXJ0T2YoJ21vbnRoJylcblx0XHRcdGNvbnN0IGV2ZW50c0luTW9udGggPSBldmVudHMuZmlsdGVyKFxuXHRcdFx0XHQoZXZlbnQpID0+XG5cdFx0XHRcdFx0ZXZlbnQuc3RhcnQueWVhcigpID09PSBjdXJyZW50WWVhciAmJlxuXHRcdFx0XHRcdGV2ZW50LnN0YXJ0Lm1vbnRoKCkgPT09IG1vbnRoSW5kZXhcblx0XHRcdClcblxuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0ZGF0ZTogbW9udGhEYXRlLFxuXHRcdFx0XHRuYW1lOiBtb250aERhdGUuZm9ybWF0KCdNTU1NJyksXG5cdFx0XHRcdGV2ZW50Q291bnQ6IGV2ZW50c0luTW9udGgubGVuZ3RoLFxuXHRcdFx0XHRtb250aEtleTogbW9udGhEYXRlLmZvcm1hdCgnTU0nKSxcblx0XHRcdH1cblx0XHR9KVxuXHR9XG5cblx0Y29uc3QgZ2VuZXJhdGVEYXlzRm9yTW9udGggPSAobW9udGhEYXRlOiBEYXlqcyk6IERheURhdGFbXSA9PiB7XG5cdFx0Y29uc3QgZmlyc3REYXlPZkNhbGVuZGFyID0gbW9udGhEYXRlLnN0YXJ0T2YoJ21vbnRoJykuc3RhcnRPZignd2VlaycpXG5cblx0XHRyZXR1cm4gQXJyYXkuZnJvbSh7IGxlbmd0aDogREFZU19JTl9NSU5JX0NBTEVOREFSIH0sIChfLCBkYXlJbmRleCkgPT4ge1xuXHRcdFx0Y29uc3QgZGF5RGF0ZSA9IGZpcnN0RGF5T2ZDYWxlbmRhci5hZGQoZGF5SW5kZXgsICdkYXknKVxuXHRcdFx0Y29uc3QgZGF5U3RhcnQgPSBkYXlEYXRlLnN0YXJ0T2YoJ2RheScpXG5cdFx0XHRjb25zdCBkYXlFbmQgPSBkYXlEYXRlLmVuZE9mKCdkYXknKVxuXHRcdFx0Y29uc3QgZXZlbnRzT25EYXkgPSBnZXRFdmVudHNGb3JEYXRlUmFuZ2UoZGF5U3RhcnQsIGRheUVuZClcblxuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0ZGF0ZTogZGF5RGF0ZSxcblx0XHRcdFx0ZGF5S2V5OiBnZXREYXlLZXkoZGF5RGF0ZSksXG5cdFx0XHRcdGlzSW5DdXJyZW50TW9udGg6IGRheURhdGUubW9udGgoKSA9PT0gbW9udGhEYXRlLm1vbnRoKCksXG5cdFx0XHRcdGlzVG9kYXk6IGlzVG9kYXkoZGF5RGF0ZSksXG5cdFx0XHRcdGlzU2VsZWN0ZWQ6IGRheURhdGUuaXNTYW1lKGN1cnJlbnREYXRlLCAnZGF5JyksXG5cdFx0XHRcdGV2ZW50Q291bnQ6IGV2ZW50c09uRGF5Lmxlbmd0aCxcblx0XHRcdH1cblx0XHR9KVxuXHR9XG5cblx0Y29uc3QgbmF2aWdhdGVUb0RhdGUgPSAoXG5cdFx0ZGF0ZTogRGF5anMsXG5cdFx0dmlldzogJ21vbnRoJyB8ICdkYXknLFxuXHRcdGV2ZW50PzogUmVhY3QuTW91c2VFdmVudFxuXHQpID0+IHtcblx0XHRldmVudD8uc3RvcFByb3BhZ2F0aW9uKClcblx0XHRzZWxlY3REYXRlKGRhdGUpXG5cdFx0c2V0Vmlldyh2aWV3KVxuXHR9XG5cblx0Y29uc3QgZ2V0RXZlbnRDb3VudExhYmVsID0gKGNvdW50OiBudW1iZXIpOiBzdHJpbmcgPT4ge1xuXHRcdGNvbnN0IGV2ZW50V29yZCA9IGNvdW50ID09PSAxID8gdCgnZXZlbnQnKSA6IHQoJ2V2ZW50cycpXG5cdFx0cmV0dXJuIGAke2NvdW50fSAke2V2ZW50V29yZH1gXG5cdH1cblxuXHRjb25zdCBnZXREYXlDbGFzc05hbWUgPSAoZGF5OiBEYXlEYXRhKTogc3RyaW5nID0+IHtcblx0XHRjb25zdCBiYXNlQ2xhc3MgPVxuXHRcdFx0J3JlbGF0aXZlIGZsZXggYXNwZWN0LXNxdWFyZSB3LWZ1bGwgY3Vyc29yLXBvaW50ZXIgZmxleC1jb2wgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGhvdmVyOmJnLWFjY2VudCByb3VuZGVkLXNtIHRyYW5zaXRpb24tY29sb3JzIGR1cmF0aW9uLTIwMCdcblx0XHRjb25zdCBvdXRzaWRlTW9udGhDbGFzcyA9IGRheS5pc0luQ3VycmVudE1vbnRoXG5cdFx0XHQ/ICcnXG5cdFx0XHQ6ICd0ZXh0LW11dGVkLWZvcmVncm91bmQgb3BhY2l0eS01MCdcblx0XHRjb25zdCB0b2RheUNsYXNzID0gZGF5LmlzVG9kYXlcblx0XHRcdD8gJ2JnLXByaW1hcnkgdGV4dC1wcmltYXJ5LWZvcmVncm91bmQgcm91bmRlZC1mdWxsJ1xuXHRcdFx0OiAnJ1xuXHRcdGNvbnN0IHNlbGVjdGVkQ2xhc3MgPVxuXHRcdFx0ZGF5LmlzU2VsZWN0ZWQgJiYgIWRheS5pc1RvZGF5ID8gJ2JnLW11dGVkIHJvdW5kZWQtZnVsbCBmb250LWJvbGQnIDogJydcblx0XHRjb25zdCBoYXNFdmVudHNDbGFzcyA9XG5cdFx0XHRkYXkuZXZlbnRDb3VudCA+IDAgJiYgIWRheS5pc1RvZGF5ICYmICFkYXkuaXNTZWxlY3RlZCA/ICdmb250LW1lZGl1bScgOiAnJ1xuXG5cdFx0cmV0dXJuIGNuKFxuXHRcdFx0YmFzZUNsYXNzLFxuXHRcdFx0b3V0c2lkZU1vbnRoQ2xhc3MsXG5cdFx0XHR0b2RheUNsYXNzLFxuXHRcdFx0c2VsZWN0ZWRDbGFzcyxcblx0XHRcdGhhc0V2ZW50c0NsYXNzXG5cdFx0KVxuXHR9XG5cblx0Y29uc3QgZ2V0RXZlbnREb3RDbGFzc05hbWUgPSAoY29sb3I6IHN0cmluZywgaXNUb2RheTogYm9vbGVhbik6IHN0cmluZyA9PiB7XG5cdFx0Y29uc3QgZG90Q29sb3IgPSBpc1RvZGF5ID8gJ2JnLXByaW1hcnktZm9yZWdyb3VuZCcgOiBjb2xvclxuXHRcdHJldHVybiBjbignaC1bM3B4XSB3LVszcHhdIHJvdW5kZWQtZnVsbCcsIGRvdENvbG9yKVxuXHR9XG5cblx0Y29uc3QgbW9udGhzRGF0YSA9IGdlbmVyYXRlTW9udGhzRGF0YSgpXG5cblx0Y29uc3QgZ2V0RGF5VG9vbHRpcCA9IChldmVudENvdW50OiBudW1iZXIpOiBzdHJpbmcgPT4ge1xuXHRcdGlmIChldmVudENvdW50ID09PSAwKSB7XG5cdFx0XHRyZXR1cm4gJydcblx0XHR9XG5cdFx0cmV0dXJuIGdldEV2ZW50Q291bnRMYWJlbChldmVudENvdW50KVxuXHR9XG5cblx0cmV0dXJuIChcblx0XHQ8U2Nyb2xsQXJlYSBjbGFzc05hbWU9XCJoLWZ1bGxcIiBkYXRhLXRlc3RpZD1cInllYXItdmlld1wiPlxuXHRcdFx0PGRpdlxuXHRcdFx0XHRjbGFzc05hbWU9XCJncmlkIGF1dG8tcm93cy1mciBncmlkLWNvbHMtMSBnYXAtNCBwLTQgc206Z3JpZC1jb2xzLTIgbGc6Z3JpZC1jb2xzLTNcIlxuXHRcdFx0XHRkYXRhLXRlc3RpZD1cInllYXItZ3JpZFwiXG5cdFx0XHQ+XG5cdFx0XHRcdHttb250aHNEYXRhLm1hcCgobW9udGgsIG1vbnRoSW5kZXgpID0+IHtcblx0XHRcdFx0XHRjb25zdCBkYXlzSW5Nb250aCA9IGdlbmVyYXRlRGF5c0Zvck1vbnRoKG1vbnRoLmRhdGUpXG5cdFx0XHRcdFx0Y29uc3QgYW5pbWF0aW9uRGVsYXkgPSBtb250aEluZGV4ICogMC4wNVxuXG5cdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiaG92ZXI6Ym9yZGVyLXByaW1hcnkgZmxleCBmbGV4LWNvbCByb3VuZGVkLWxnIGJvcmRlciBwLTMgdGV4dC1sZWZ0IHRyYW5zaXRpb24tYWxsIGR1cmF0aW9uLTIwMCBob3ZlcjpzaGFkb3ctbWRcIlxuXHRcdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD17a2V5cy5oZWFkZXIueWVhci5tb250aChtb250aC5tb250aEtleSl9XG5cdFx0XHRcdFx0XHRcdGtleT17bW9udGgubW9udGhLZXl9XG5cdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdDxBbmltYXRlZFNlY3Rpb25cblx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJtYi0yIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlblwiXG5cdFx0XHRcdFx0XHRcdFx0ZGVsYXk9e2FuaW1hdGlvbkRlbGF5fVxuXHRcdFx0XHRcdFx0XHRcdGtleT17a2V5cy5saXN0S2V5KCdtb250aCcsIG1vbnRoLm1vbnRoS2V5KX1cblx0XHRcdFx0XHRcdFx0XHR0cmFuc2l0aW9uS2V5PXtrZXlzLmxpc3RLZXkoJ21vbnRoJywgbW9udGgubW9udGhLZXkpfVxuXHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0PGJ1dHRvblxuXHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwidGV4dC1sZyBmb250LW1lZGl1bSBob3Zlcjp1bmRlcmxpbmUgY3Vyc29yLXBvaW50ZXJcIlxuXHRcdFx0XHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e2tleXMuaGVhZGVyLnllYXIubW9udGgobW9udGgubW9udGhLZXksICd0aXRsZScpfVxuXHRcdFx0XHRcdFx0XHRcdFx0b25DbGljaz17KCkgPT4gbmF2aWdhdGVUb0RhdGUobW9udGguZGF0ZSwgJ21vbnRoJyl9XG5cdFx0XHRcdFx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCJcblx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHR7bW9udGgubmFtZX1cblx0XHRcdFx0XHRcdFx0XHQ8L2J1dHRvbj5cblxuXHRcdFx0XHRcdFx0XHRcdHttb250aC5ldmVudENvdW50ID4gMCAmJiAoXG5cdFx0XHRcdFx0XHRcdFx0XHQ8c3BhblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJiZy1wcmltYXJ5IHRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIHJvdW5kZWQtZnVsbCBweC0yIHB5LTEgdGV4dC14c1wiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPXtrZXlzLmhlYWRlci55ZWFyLm1vbnRoKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG1vbnRoLm1vbnRoS2V5LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdjb3VudCdcblx0XHRcdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0e2dldEV2ZW50Q291bnRMYWJlbChtb250aC5ldmVudENvdW50KX1cblx0XHRcdFx0XHRcdFx0XHRcdDwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHQ8L0FuaW1hdGVkU2VjdGlvbj5cblxuXHRcdFx0XHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiZ3JpZCBncmlkLWNvbHMtNyBnYXAtcHggdGV4dC1bMC42cmVtXVwiXG5cdFx0XHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e2tleXMuaGVhZGVyLnllYXIubW9udGgobW9udGgubW9udGhLZXksICdtaW5pJyl9XG5cdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHR7d2Vla2RheUhlYWRlcnMubWFwKChkYXkpID0+IChcblx0XHRcdFx0XHRcdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwidGV4dC1tdXRlZC1mb3JlZ3JvdW5kIGgtMyB0ZXh0LWNlbnRlclwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGtleT17a2V5cy5saXN0S2V5KCdoZWFkZXInLCBtb250aC5tb250aEtleSwgZGF5LmlkKX1cblx0XHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0e2RheS5sYWJlbH1cblx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdCkpfVxuXG5cdFx0XHRcdFx0XHRcdFx0e2RheXNJbk1vbnRoLm1hcCgoZGF5KSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBkYXlUZXN0SWQgPSBrZXlzLmhlYWRlci55ZWFyLmRheShcblx0XHRcdFx0XHRcdFx0XHRcdFx0bW9udGguZGF0ZS5mb3JtYXQoJ1lZWVktTU0nKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF5LmRheUtleVxuXHRcdFx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgaGFzRXZlbnRzID0gZGF5LmV2ZW50Q291bnQgPiAwXG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zdCB2aXNpYmxlRG90Q291bnQgPSBNYXRoLm1pbihkYXkuZXZlbnRDb3VudCwgMylcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IHZpc2libGVEb3RDb2xvcnMgPSBFVkVOVF9ET1RfQ09MT1JTLnNsaWNlKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQwLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2aXNpYmxlRG90Q291bnRcblx0XHRcdFx0XHRcdFx0XHRcdClcblxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0XHRcdFx0PGJ1dHRvblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Z2V0RGF5Q2xhc3NOYW1lKGRheSl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e2RheVRlc3RJZH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRrZXk9e2RheS5kYXlLZXl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0b25DbGljaz17KGUpID0+IG5hdmlnYXRlVG9EYXRlKGRheS5kYXRlLCAnZGF5JywgZSl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGl0bGU9e2dldERheVRvb2x0aXAoZGF5LmV2ZW50Q291bnQpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwidGV4dC1jZW50ZXIgbGVhZGluZy1ub25lXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR7ZGF5LmRhdGUuZGF0ZSgpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvc3Bhbj5cblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHtoYXNFdmVudHMgJiYgKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdhYnNvbHV0ZSBib3R0b20tMCBmbGV4IHctZnVsbCBqdXN0aWZ5LWNlbnRlciBzcGFjZS14LXB4Jyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkYXkuaXNUb2RheSAmJiAnYm90dG9tLXB4J1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR7dmlzaWJsZURvdENvbG9ycy5tYXAoKGRvdENvbG9yKSA9PiAoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHNwYW5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Z2V0RXZlbnREb3RDbGFzc05hbWUoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRvdENvbG9yLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkYXkuaXNUb2RheVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGtleT17ZG90Q29sb3J9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KSl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2J1dHRvbj5cblx0XHRcdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdFx0XHR9KX1cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQpXG5cdFx0XHRcdH0pfVxuXHRcdFx0PC9kaXY+XG5cdFx0XHQ8U2Nyb2xsQmFyIGNsYXNzTmFtZT1cInotMzBcIiAvPlxuXHRcdDwvU2Nyb2xsQXJlYT5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgUmVhY3ROb2RlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBFdmVudEZvcm1Qcm9wcyB9IGZyb20gJ0AvY29tcG9uZW50cy9ldmVudC1mb3JtL2V2ZW50LWZvcm0nXG5pbXBvcnQgdHlwZSB7IEJ1c2luZXNzSG91cnMsIENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgdHlwZSB7XG5cdENhbGVuZGFyQ2xhc3Nlc092ZXJyaWRlLFxuXHRDZWxsQ2xpY2tJbmZvLFxuXHREYXRlUmFuZ2UsXG5cdFJlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yUHJvcHMsXG5cdFNsb3REdXJhdGlvbixcbn0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci90eXBlcydcbmltcG9ydCB7IHVzZUNhbGVuZGFyRW5naW5lIH0gZnJvbSAnQC9ob29rcy91c2UtY2FsZW5kYXItZW5naW5lJ1xuaW1wb3J0IHR5cGUgeyBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgRVZFTlRfQkFSX0hFSUdIVCwgR0FQX0JFVFdFRU5fRUxFTUVOVFMgfSBmcm9tICdAL2xpYi9jb25zdGFudHMnXG5pbXBvcnQgdHlwZSB7IFRyYW5zbGF0aW9ucywgVHJhbnNsYXRvckZ1bmN0aW9uIH0gZnJvbSAnQC9saWIvdHJhbnNsYXRpb25zL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhclZpZXcsIFRpbWVGb3JtYXQgfSBmcm9tICdAL3R5cGVzJ1xuaW1wb3J0IHsgQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnLi9jb250ZXh0J1xuXG5leHBvcnQgaW50ZXJmYWNlIENhbGVuZGFyUHJvdmlkZXJQcm9wcyB7XG5cdGNoaWxkcmVuOiBSZWFjdE5vZGVcblx0ZXZlbnRzPzogQ2FsZW5kYXJFdmVudFtdXG5cdGZpcnN0RGF5T2ZXZWVrPzogbnVtYmVyIC8vIDAgZm9yIFN1bmRheSwgMSBmb3IgTW9uZGF5LCBldGMuXG5cdGluaXRpYWxWaWV3PzogQ2FsZW5kYXJWaWV3XG5cdGluaXRpYWxEYXRlPzogRGF5anNcblx0cmVuZGVyRXZlbnQ/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IFJlYWN0Tm9kZVxuXHRvbkV2ZW50Q2xpY2s/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0b25DZWxsQ2xpY2s/OiAoaW5mbzogQ2VsbENsaWNrSW5mbykgPT4gdm9pZFxuXHRvblZpZXdDaGFuZ2U/OiAodmlldzogQ2FsZW5kYXJWaWV3KSA9PiB2b2lkXG5cdG9uRXZlbnRBZGQ/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0b25FdmVudFVwZGF0ZT86IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuXHRvbkV2ZW50RGVsZXRlPzogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG5cdG9uRGF0ZUNoYW5nZT86IChkYXRlOiBEYXlqcywgcmFuZ2U6IERhdGVSYW5nZSkgPT4gdm9pZFxuXHRsb2NhbGU/OiBzdHJpbmdcblx0dGltZXpvbmU/OiBzdHJpbmdcblx0ZGlzYWJsZUNlbGxDbGljaz86IGJvb2xlYW5cblx0ZGlzYWJsZUV2ZW50Q2xpY2s/OiBib29sZWFuXG5cdGRpc2FibGVEcmFnQW5kRHJvcD86IGJvb2xlYW5cblx0ZGF5TWF4RXZlbnRzOiBudW1iZXJcblx0ZXZlbnRTcGFjaW5nPzogbnVtYmVyXG5cdGV2ZW50SGVpZ2h0PzogbnVtYmVyXG5cdHN0aWNreVZpZXdIZWFkZXI/OiBib29sZWFuXG5cdHZpZXdIZWFkZXJDbGFzc05hbWU/OiBzdHJpbmdcblx0aGVhZGVyQ29tcG9uZW50PzogUmVhY3ROb2RlIC8vIE9wdGlvbmFsIGN1c3RvbSBoZWFkZXIgY29tcG9uZW50XG5cdGhlYWRlckNsYXNzTmFtZT86IHN0cmluZyAvLyBPcHRpb25hbCBjdXN0b20gaGVhZGVyIGNsYXNzXG5cdGJ1c2luZXNzSG91cnM/OiBCdXNpbmVzc0hvdXJzIHwgQnVzaW5lc3NIb3Vyc1tdXG5cdHJlbmRlckV2ZW50Rm9ybT86IChwcm9wczogRXZlbnRGb3JtUHJvcHMpID0+IFJlYWN0Tm9kZVxuXHQvLyBUcmFuc2xhdGlvbiBvcHRpb25zIC0gcHJvdmlkZSBlaXRoZXIgdHJhbnNsYXRpb25zIG9iamVjdCBPUiB0cmFuc2xhdG9yIGZ1bmN0aW9uXG5cdHRyYW5zbGF0aW9ucz86IFRyYW5zbGF0aW9uc1xuXHR0cmFuc2xhdG9yPzogVHJhbnNsYXRvckZ1bmN0aW9uXG5cdHRpbWVGb3JtYXQ/OiBUaW1lRm9ybWF0XG5cdGNsYXNzZXNPdmVycmlkZT86IENhbGVuZGFyQ2xhc3Nlc092ZXJyaWRlXG5cdHJlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yPzogKFxuXHRcdHByb3BzOiBSZW5kZXJDdXJyZW50VGltZUluZGljYXRvclByb3BzXG5cdCkgPT4gUmVhY3ROb2RlXG5cdHJlbmRlckhvdXI/OiAoZGF0ZTogRGF5anMpID0+IFJlYWN0Tm9kZVxuXHRoaWRlTm9uQnVzaW5lc3NIb3Vycz86IGJvb2xlYW5cblx0aGlkZUV4cG9ydEJ1dHRvbj86IGJvb2xlYW5cblx0aGlkZGVuRGF5cz86IFNldDxudW1iZXI+XG5cdHNsb3REdXJhdGlvbj86IFNsb3REdXJhdGlvblxuXHRzY3JvbGxUaW1lPzogc3RyaW5nXG59XG5cbmV4cG9ydCBjb25zdCBDYWxlbmRhclByb3ZpZGVyOiBSZWFjdC5GQzxDYWxlbmRhclByb3ZpZGVyUHJvcHM+ID0gKHtcblx0Y2hpbGRyZW4sXG5cdGV2ZW50cyA9IFtdLFxuXHRmaXJzdERheU9mV2VlayA9IDAsXG5cdGluaXRpYWxWaWV3ID0gJ21vbnRoJyxcblx0aW5pdGlhbERhdGUsXG5cdHJlbmRlckV2ZW50LFxuXHRvbkV2ZW50Q2xpY2ssXG5cdG9uQ2VsbENsaWNrLFxuXHRvblZpZXdDaGFuZ2UsXG5cdG9uRXZlbnRBZGQsXG5cdG9uRXZlbnRVcGRhdGUsXG5cdG9uRXZlbnREZWxldGUsXG5cdG9uRGF0ZUNoYW5nZSxcblx0bG9jYWxlLFxuXHR0aW1lem9uZSxcblx0ZGlzYWJsZUNlbGxDbGljayxcblx0ZGlzYWJsZUV2ZW50Q2xpY2ssXG5cdGRpc2FibGVEcmFnQW5kRHJvcCxcblx0ZGF5TWF4RXZlbnRzLFxuXHRldmVudFNwYWNpbmcgPSBHQVBfQkVUV0VFTl9FTEVNRU5UUyxcblx0ZXZlbnRIZWlnaHQgPSBFVkVOVF9CQVJfSEVJR0hULFxuXHRzdGlja3lWaWV3SGVhZGVyID0gdHJ1ZSxcblx0dmlld0hlYWRlckNsYXNzTmFtZSA9ICcnLFxuXHRoZWFkZXJDb21wb25lbnQsXG5cdGhlYWRlckNsYXNzTmFtZSxcblx0YnVzaW5lc3NIb3Vycyxcblx0cmVuZGVyRXZlbnRGb3JtLFxuXHR0cmFuc2xhdGlvbnMsXG5cdHRyYW5zbGF0b3IsXG5cdHRpbWVGb3JtYXQgPSAnMTItaG91cicsXG5cdGNsYXNzZXNPdmVycmlkZSxcblx0cmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3IsXG5cdHJlbmRlckhvdXIsXG5cdGhpZGVOb25CdXNpbmVzc0hvdXJzID0gZmFsc2UsXG5cdGhpZGVFeHBvcnRCdXR0b24gPSBmYWxzZSxcblx0aGlkZGVuRGF5cyxcblx0c2xvdER1cmF0aW9uID0gNjAsXG5cdHNjcm9sbFRpbWUsXG59KSA9PiB7XG5cdC8vIFVzZSB0aGUgY2FsZW5kYXIgZW5naW5lXG5cdGNvbnN0IGNhbGVuZGFyRW5naW5lID0gdXNlQ2FsZW5kYXJFbmdpbmUoe1xuXHRcdGV2ZW50cyxcblx0XHRmaXJzdERheU9mV2Vlayxcblx0XHRpbml0aWFsVmlldyxcblx0XHRpbml0aWFsRGF0ZSxcblx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdG9uRXZlbnRBZGQsXG5cdFx0b25FdmVudFVwZGF0ZSxcblx0XHRvbkV2ZW50RGVsZXRlLFxuXHRcdG9uRGF0ZUNoYW5nZSxcblx0XHRvblZpZXdDaGFuZ2UsXG5cdFx0bG9jYWxlLFxuXHRcdHRpbWV6b25lLFxuXHRcdHRyYW5zbGF0aW9ucyxcblx0XHR0cmFuc2xhdG9yLFxuXHR9KVxuXG5cdGNvbnN0IGVkaXRFdmVudCA9IHVzZUNhbGxiYWNrKFxuXHRcdChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4ge1xuXHRcdFx0Y2FsZW5kYXJFbmdpbmUuc2V0U2VsZWN0ZWRFdmVudChldmVudClcblx0XHRcdGNhbGVuZGFyRW5naW5lLnNldElzRXZlbnRGb3JtT3Blbih0cnVlKVxuXHRcdH0sXG5cdFx0W2NhbGVuZGFyRW5naW5lXVxuXHQpXG5cblx0Ly8gQ3VzdG9tIGhhbmRsZXJzIHRoYXQgY2FsbCBleHRlcm5hbCBjYWxsYmFja3Ncblx0Y29uc3QgaGFuZGxlRXZlbnRDbGljayA9IHVzZUNhbGxiYWNrKFxuXHRcdChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4ge1xuXHRcdFx0aWYgKGRpc2FibGVFdmVudENsaWNrKSB7XG5cdFx0XHRcdHJldHVyblxuXHRcdFx0fVxuXHRcdFx0aWYgKG9uRXZlbnRDbGljaykge1xuXHRcdFx0XHRvbkV2ZW50Q2xpY2soZXZlbnQpXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRlZGl0RXZlbnQoZXZlbnQpXG5cdFx0XHR9XG5cdFx0fSxcblx0XHRbZGlzYWJsZUV2ZW50Q2xpY2ssIG9uRXZlbnRDbGljaywgZWRpdEV2ZW50XVxuXHQpXG5cblx0Y29uc3QgaGFuZGxlRGF0ZUNsaWNrID0gdXNlQ2FsbGJhY2soXG5cdFx0KGluZm86IENlbGxDbGlja0luZm8pID0+IHtcblx0XHRcdGlmIChkaXNhYmxlQ2VsbENsaWNrKSB7XG5cdFx0XHRcdHJldHVyblxuXHRcdFx0fVxuXG5cdFx0XHRpZiAob25DZWxsQ2xpY2spIHtcblx0XHRcdFx0b25DZWxsQ2xpY2soaW5mbylcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNhbGVuZGFyRW5naW5lLm9wZW5FdmVudEZvcm0oaW5mbylcblx0XHRcdH1cblx0XHR9LFxuXHRcdFtvbkNlbGxDbGljaywgZGlzYWJsZUNlbGxDbGljaywgY2FsZW5kYXJFbmdpbmVdXG5cdClcblxuXHQvLyBDcmVhdGUgdGhlIGNvbnRleHQgdmFsdWVcblx0Y29uc3QgY29udGV4dFZhbHVlID0gdXNlTWVtbyhcblx0XHQoKSA9PiAoe1xuXHRcdFx0Li4uY2FsZW5kYXJFbmdpbmUsXG5cdFx0XHRyZW5kZXJFdmVudCxcblx0XHRcdG9uRXZlbnRDbGljazogaGFuZGxlRXZlbnRDbGljayxcblx0XHRcdG9uQ2VsbENsaWNrOiBoYW5kbGVEYXRlQ2xpY2ssXG5cdFx0XHRsb2NhbGUsXG5cdFx0XHR0aW1lem9uZSxcblx0XHRcdGRpc2FibGVDZWxsQ2xpY2ssXG5cdFx0XHRkaXNhYmxlRXZlbnRDbGljayxcblx0XHRcdGRpc2FibGVEcmFnQW5kRHJvcCxcblx0XHRcdGRheU1heEV2ZW50cyxcblx0XHRcdGV2ZW50U3BhY2luZyxcblx0XHRcdGV2ZW50SGVpZ2h0LFxuXHRcdFx0c3RpY2t5Vmlld0hlYWRlcixcblx0XHRcdHZpZXdIZWFkZXJDbGFzc05hbWUsXG5cdFx0XHRoZWFkZXJDb21wb25lbnQsXG5cdFx0XHRoZWFkZXJDbGFzc05hbWUsXG5cdFx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdFx0cmVuZGVyRXZlbnRGb3JtLFxuXHRcdFx0dGltZUZvcm1hdCxcblx0XHRcdGNsYXNzZXNPdmVycmlkZSxcblx0XHRcdHJlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yLFxuXHRcdFx0cmVuZGVySG91cixcblx0XHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzLFxuXHRcdFx0aGlkZUV4cG9ydEJ1dHRvbixcblx0XHRcdGhpZGRlbkRheXMsXG5cdFx0XHRzbG90RHVyYXRpb24sXG5cdFx0XHRzY3JvbGxUaW1lLFxuXHRcdH0pLFxuXHRcdFtcblx0XHRcdGNhbGVuZGFyRW5naW5lLFxuXHRcdFx0cmVuZGVyRXZlbnQsXG5cdFx0XHRoYW5kbGVFdmVudENsaWNrLFxuXHRcdFx0aGFuZGxlRGF0ZUNsaWNrLFxuXHRcdFx0bG9jYWxlLFxuXHRcdFx0dGltZXpvbmUsXG5cdFx0XHRkaXNhYmxlQ2VsbENsaWNrLFxuXHRcdFx0ZGlzYWJsZUV2ZW50Q2xpY2ssXG5cdFx0XHRkaXNhYmxlRHJhZ0FuZERyb3AsXG5cdFx0XHRkYXlNYXhFdmVudHMsXG5cdFx0XHRldmVudFNwYWNpbmcsXG5cdFx0XHRldmVudEhlaWdodCxcblx0XHRcdHN0aWNreVZpZXdIZWFkZXIsXG5cdFx0XHR2aWV3SGVhZGVyQ2xhc3NOYW1lLFxuXHRcdFx0aGVhZGVyQ29tcG9uZW50LFxuXHRcdFx0aGVhZGVyQ2xhc3NOYW1lLFxuXHRcdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRcdHJlbmRlckV2ZW50Rm9ybSxcblx0XHRcdHRpbWVGb3JtYXQsXG5cdFx0XHRjbGFzc2VzT3ZlcnJpZGUsXG5cdFx0XHRyZW5kZXJDdXJyZW50VGltZUluZGljYXRvcixcblx0XHRcdHJlbmRlckhvdXIsXG5cdFx0XHRoaWRlTm9uQnVzaW5lc3NIb3Vycyxcblx0XHRcdGhpZGVFeHBvcnRCdXR0b24sXG5cdFx0XHRoaWRkZW5EYXlzLFxuXHRcdFx0c2xvdER1cmF0aW9uLFxuXHRcdFx0c2Nyb2xsVGltZSxcblx0XHRdXG5cdClcblxuXHRyZXR1cm4gKFxuXHRcdDxDYWxlbmRhckNvbnRleHQuUHJvdmlkZXIgdmFsdWU9e2NvbnRleHRWYWx1ZX0+XG5cdFx0XHR7Y2hpbGRyZW59XG5cdFx0PC9DYWxlbmRhckNvbnRleHQuUHJvdmlkZXI+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBBbmltYXRlZFNlY3Rpb24gfSBmcm9tICdAL2NvbXBvbmVudHMvYW5pbWF0aW9ucy9hbmltYXRlZC1zZWN0aW9uJ1xuaW1wb3J0IHsgQ2FsZW5kYXJEbmRDb250ZXh0IH0gZnJvbSAnQC9jb21wb25lbnRzL2RyYWctYW5kLWRyb3AvY2FsZW5kYXItZG5kLWNvbnRleHQnXG5pbXBvcnQgeyBFdmVudEZvcm1EaWFsb2cgfSBmcm9tICdAL2NvbXBvbmVudHMvZXZlbnQtZm9ybS9ldmVudC1mb3JtLWRpYWxvZydcbmltcG9ydCB7IEhlYWRlciB9IGZyb20gJ0AvY29tcG9uZW50cy9oZWFkZXInXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgeyBEYXlWaWV3IH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci9jb21wb25lbnRzL2RheS12aWV3L2RheS12aWV3J1xuaW1wb3J0IHsgTW9udGhWaWV3IH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci9jb21wb25lbnRzL21vbnRoLXZpZXcvbW9udGgtdmlldydcbmltcG9ydCB7IFdlZWtWaWV3IH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci9jb21wb25lbnRzL3dlZWstdmlldy93ZWVrLXZpZXcnXG5pbXBvcnQgeyBZZWFyVmlldyB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvY29tcG9uZW50cy95ZWFyLXZpZXcveWVhci12aWV3J1xuaW1wb3J0IHsgQ2FsZW5kYXJQcm92aWRlciB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9wcm92aWRlcidcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbi8vIG94bGludC1kaXNhYmxlLW5leHQtbGluZSBuby1kdXBsaWNhdGVzXG5pbXBvcnQgJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHR5cGUge1xuXHRJbGFteUNhbGVuZGFyUHJvcEV2ZW50LFxuXHRJbGFteUNhbGVuZGFyUHJvcHMsXG59IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvdHlwZXMnXG5pbXBvcnQge1xuXHREQVlfTUFYX0VWRU5UU19ERUZBVUxULFxuXHRFVkVOVF9CQVJfSEVJR0hULFxuXHRHQVBfQkVUV0VFTl9FTEVNRU5UUyxcblx0V0VFS19EQVlTX05VTUJFUl9NQVAsXG59IGZyb20gJ0AvbGliL2NvbnN0YW50cydcbmltcG9ydCB7IG5vcm1hbGl6ZUV2ZW50cywgc2FmZURhdGUsIHRvSGlkZGVuRGF5c1NldCB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5jb25zdCBDYWxlbmRhckNvbnRlbnQ6IFJlYWN0LkZDID0gKCkgPT4ge1xuXHRjb25zdCB7IHZpZXcsIGRheU1heEV2ZW50cyB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXG5cdGNvbnN0IHZpZXdNYXAgPSB7XG5cdFx0bW9udGg6IDxNb250aFZpZXcgZGF5TWF4RXZlbnRzPXtkYXlNYXhFdmVudHN9IGtleT1cIm1vbnRoXCIgLz4sXG5cdFx0d2VlazogPFdlZWtWaWV3IGtleT1cIndlZWtcIiAvPixcblx0XHRkYXk6IDxEYXlWaWV3IGtleT1cImRheVwiIC8+LFxuXHRcdHllYXI6IDxZZWFyVmlldyBrZXk9XCJ5ZWFyXCIgLz4sXG5cdH1cblxuXHRyZXR1cm4gKFxuXHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCB3LWZ1bGwgaC1mdWxsXCIgZGF0YS10ZXN0aWQ9XCJpbGFteS1jYWxlbmRhclwiPlxuXHRcdFx0PEhlYWRlciBjbGFzc05hbWU9XCJwLTEgc2hyaW5rLTBcIiAvPlxuXHRcdFx0ey8qIENhbGVuZGFyIEJvZHkgd2l0aCBBbmltYXRlUHJlc2VuY2UgZm9yIHZpZXcgdHJhbnNpdGlvbnMgKi99XG5cdFx0XHQ8Q2FsZW5kYXJEbmRDb250ZXh0PlxuXHRcdFx0XHQ8QW5pbWF0ZWRTZWN0aW9uXG5cdFx0XHRcdFx0Y2xhc3NOYW1lPVwidy1mdWxsIG1pbi1oLTAgZmxleC0xXCJcblx0XHRcdFx0XHRkaXJlY3Rpb249XCJob3Jpem9udGFsXCJcblx0XHRcdFx0XHR0cmFuc2l0aW9uS2V5PXt2aWV3fVxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJib3JkZXIgaC1mdWxsIHctZnVsbFwiIGRhdGEtdGVzdGlkPVwiY2FsZW5kYXItYm9keVwiPlxuXHRcdFx0XHRcdFx0e3ZpZXdNYXBbdmlld119XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDwvQW5pbWF0ZWRTZWN0aW9uPlxuXHRcdFx0PC9DYWxlbmRhckRuZENvbnRleHQ+XG5cdFx0XHQ8RXZlbnRGb3JtRGlhbG9nIC8+XG5cdFx0PC9kaXY+XG5cdClcbn1cblxuZXhwb3J0IGNvbnN0IElsYW15Q2FsZW5kYXI6IFJlYWN0LkZDPElsYW15Q2FsZW5kYXJQcm9wcz4gPSAoe1xuXHRldmVudHMsXG5cdGZpcnN0RGF5T2ZXZWVrID0gJ3N1bmRheScsXG5cdGluaXRpYWxWaWV3ID0gJ21vbnRoJyxcblx0aW5pdGlhbERhdGUsXG5cdGRheU1heEV2ZW50cyA9IERBWV9NQVhfRVZFTlRTX0RFRkFVTFQsXG5cdGV2ZW50U3BhY2luZyA9IEdBUF9CRVRXRUVOX0VMRU1FTlRTLFxuXHRldmVudEhlaWdodCA9IEVWRU5UX0JBUl9IRUlHSFQsXG5cdHN0aWNreVZpZXdIZWFkZXIgPSB0cnVlLFxuXHR2aWV3SGVhZGVyQ2xhc3NOYW1lID0gJycsXG5cdHRpbWVGb3JtYXQgPSAnMTItaG91cicsXG5cdGhpZGVOb25CdXNpbmVzc0hvdXJzID0gZmFsc2UsXG5cdGhpZGRlbkRheXMsXG5cdC4uLnByb3BzXG59KSA9PiB7XG5cdHJldHVybiAoXG5cdFx0PENhbGVuZGFyUHJvdmlkZXJcblx0XHRcdGRheU1heEV2ZW50cz17ZGF5TWF4RXZlbnRzfVxuXHRcdFx0ZXZlbnRIZWlnaHQ9e2V2ZW50SGVpZ2h0fVxuXHRcdFx0ZXZlbnRTcGFjaW5nPXtldmVudFNwYWNpbmd9XG5cdFx0XHRldmVudHM9e25vcm1hbGl6ZUV2ZW50czxJbGFteUNhbGVuZGFyUHJvcEV2ZW50LCBDYWxlbmRhckV2ZW50PihldmVudHMpfVxuXHRcdFx0Zmlyc3REYXlPZldlZWs9e1dFRUtfREFZU19OVU1CRVJfTUFQW2ZpcnN0RGF5T2ZXZWVrXX1cblx0XHRcdGhpZGRlbkRheXM9e3RvSGlkZGVuRGF5c1NldChoaWRkZW5EYXlzKX1cblx0XHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzPXtoaWRlTm9uQnVzaW5lc3NIb3Vyc31cblx0XHRcdGluaXRpYWxEYXRlPXtzYWZlRGF0ZShpbml0aWFsRGF0ZSl9XG5cdFx0XHRpbml0aWFsVmlldz17aW5pdGlhbFZpZXd9XG5cdFx0XHRzdGlja3lWaWV3SGVhZGVyPXtzdGlja3lWaWV3SGVhZGVyfVxuXHRcdFx0dGltZUZvcm1hdD17dGltZUZvcm1hdH1cblx0XHRcdHZpZXdIZWFkZXJDbGFzc05hbWU9e3ZpZXdIZWFkZXJDbGFzc05hbWV9XG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0PlxuXHRcdFx0PENhbGVuZGFyQ29udGVudCAvPlxuXHRcdDwvQ2FsZW5kYXJQcm92aWRlcj5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEhvcml6b250YWxHcmlkIH0gZnJvbSAnQC9jb21wb25lbnRzL2hvcml6b250YWwtZ3JpZC9ob3Jpem9udGFsLWdyaWQnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSB7IERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBrZXlzIH0gZnJvbSAnQC9saWIvdXRpbHMva2V5cydcblxuaW50ZXJmYWNlIFJlc291cmNlRXZlbnRHcmlkUHJvcHMge1xuXHQvKipcblx0ICogQXJyYXkgb2YgZGF5cyB0byBkaXNwbGF5IGluIHRoZSBncmlkXG5cdCAqL1xuXHRkYXlzOiBEYXlqc1tdIHwgRGF5anNbXVtdXG5cdC8qKiBUaGUgdHlwZSBvZiBncmlkIHRvIGRpc3BsYXkgLSAnZGF5JyBmb3IgZGF5IHZpZXcsICdob3VyJyBmb3Igd2VlayB2aWV3XG5cdCAqIChhZmZlY3RzIGV2ZW50IHBvc2l0aW9uaW5nIGxvZ2ljKVxuXHQgKi9cblx0Z3JpZFR5cGU/OiAnZGF5JyB8ICdob3VyJ1xuXHQvKipcblx0ICogQ2hpbGRyZW4gd2lsbCBiZSByZW5kZXJlZCBhcyBoZWFkZXJzIGFib3ZlIHRoZSBncmlkXG5cdCAqIChlLmcuLCBmb3IgZGF5IG5hbWVzIGluIG1vbnRoIHZpZXcpXG5cdCAqL1xuXHRjaGlsZHJlbj86IFJlYWN0LlJlYWN0Tm9kZVxuXHRjbGFzc2VzPzogeyBoZWFkZXI/OiBzdHJpbmc7IGJvZHk/OiBzdHJpbmc7IHNjcm9sbD86IHN0cmluZzsgY2VsbD86IHN0cmluZyB9XG59XG5cbmV4cG9ydCBjb25zdCBSZXNvdXJjZUV2ZW50R3JpZDogUmVhY3QuRkM8UmVzb3VyY2VFdmVudEdyaWRQcm9wcz4gPSAoe1xuXHRkYXlzLFxuXHRncmlkVHlwZSA9ICdkYXknLFxuXHRjaGlsZHJlbixcblx0Y2xhc3Nlcyxcbn0pID0+IHtcblx0Y29uc3QgeyByZXNvdXJjZXMgfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblxuXHRjb25zdCBjb2x1bW5zID0gZGF5cy5tYXAoKGRheSkgPT4ge1xuXHRcdGNvbnN0IGlzQXJyYXkgPSBBcnJheS5pc0FycmF5KGRheSlcblx0XHRjb25zdCByZWZEYXkgPSBpc0FycmF5ID8gZGF5WzBdIDogZGF5XG5cdFx0cmV0dXJuIHtcblx0XHRcdGlkOiByZWZEYXkgPyBrZXlzLmNvbC5kYXkocmVmRGF5KSA6ICdkYXktY29sLXVua25vd24nLFxuXHRcdFx0ZGF5OiBpc0FycmF5ID8gdW5kZWZpbmVkIDogZGF5LFxuXHRcdFx0ZGF5czogaXNBcnJheSA/IGRheSA6IHVuZGVmaW5lZCxcblx0XHRcdGNsYXNzTmFtZTogY2xhc3Nlcz8uY2VsbCxcblx0XHRcdGdyaWRUeXBlLFxuXHRcdH1cblx0fSlcblxuXHRjb25zdCByb3dzID0gcmVzb3VyY2VzLm1hcCgocmVzb3VyY2UpID0+ICh7XG5cdFx0aWQ6IHJlc291cmNlLmlkLFxuXHRcdHRpdGxlOiByZXNvdXJjZS50aXRsZSxcblx0XHRyZXNvdXJjZTogcmVzb3VyY2UsXG5cdFx0Y29sdW1ucyxcblx0fSkpXG5cblx0cmV0dXJuIChcblx0XHQ8SG9yaXpvbnRhbEdyaWRcblx0XHRcdGNsYXNzZXM9e2NsYXNzZXN9XG5cdFx0XHRkYXlOdW1iZXJIZWlnaHQ9ezB9XG5cdFx0XHRncmlkVHlwZT17Z3JpZFR5cGV9XG5cdFx0XHRyb3dzPXtyb3dzfVxuXHRcdD5cblx0XHRcdHtjaGlsZHJlbn1cblx0XHQ8L0hvcml6b250YWxHcmlkPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQW5pbWF0ZWRTZWN0aW9uIH0gZnJvbSAnQC9jb21wb25lbnRzL2FuaW1hdGlvbnMvYW5pbWF0ZWQtc2VjdGlvbidcbmltcG9ydCB7IEhvdXJMYWJlbCB9IGZyb20gJ0AvY29tcG9uZW50cy9ob3VyLWxhYmVsL2hvdXItbGFiZWwnXG5pbXBvcnQgZGF5anMsIHsgdHlwZSBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IGtleXMgfSBmcm9tICdAL2xpYi91dGlscy9rZXlzJ1xuXG5pbnRlcmZhY2UgVGltZUhlYWRlclJvd1Byb3BzIHtcblx0aG91cnM6IERheWpzW11cblx0dmlldzogJ3dlZWsnIHwgJ2RheSdcblx0Ly8gUGVyLWl0ZW0gYW5pbWF0aW9uIGRlbGF5LiBDYWxsZXJzIHBhc3MgZGlmZmVyZW50IHN0ZXAgdmFsdWVzIGRlcGVuZGluZyBvblxuXHQvLyB0aGUgbGlzdCBsZW5ndGggKGUuZy4gMC4wMDUgZm9yIGEgd2VlayBvZiBob3VycywgMC4wNSBmb3IgYSBzaW5nbGUgZGF5KS5cblx0ZGVsYXlTdGVwOiBudW1iZXJcbn1cblxuZXhwb3J0IGNvbnN0IFRpbWVIZWFkZXJSb3c6IFJlYWN0LkZDPFRpbWVIZWFkZXJSb3dQcm9wcz4gPSAoe1xuXHRob3Vycyxcblx0dmlldyxcblx0ZGVsYXlTdGVwLFxufSkgPT4gKFxuXHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggaC0xMiBib3JkZXItYlwiPlxuXHRcdHtob3Vycy5tYXAoKGNvbCwgaW5kZXgpID0+IHtcblx0XHRcdGNvbnN0IGlzTm93SG91ciA9IGNvbC5pc1NhbWUoZGF5anMoKSwgJ2hvdXInKVxuXHRcdFx0Y29uc3QgaG91clN0ciA9IGNvbC5mb3JtYXQoJ0hIJylcblx0XHRcdGNvbnN0IGtleSA9IGtleXMuaGVhZGVyLndlZWsuaG91cihjb2wsIGluZGV4KVxuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0PEFuaW1hdGVkU2VjdGlvblxuXHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHQnbWluLXctMjAgZmxleC0xIGJvcmRlci1yIGxhc3Q6Ym9yZGVyLXItMCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB0ZXh0LXhzIHNocmluay0wJyxcblx0XHRcdFx0XHRcdGlzTm93SG91ciAmJiAnYmctYmx1ZS01MCB0ZXh0LWJsdWUtNjAwIGZvbnQtbWVkaXVtJ1xuXHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0ZGF0YS1ob3VyPXtob3VyU3RyfVxuXHRcdFx0XHRcdGRhdGEtdGVzdGlkPXtrZXlzLmhlYWRlci5yZXNvdXJjZS50aW1lTGFiZWwodmlldywgaG91clN0cil9XG5cdFx0XHRcdFx0ZGVsYXk9e2luZGV4ICogZGVsYXlTdGVwfVxuXHRcdFx0XHRcdGtleT17a2V5cy5saXN0S2V5KGtleSwgJ2FuaW1hdGVkJyl9XG5cdFx0XHRcdFx0dHJhbnNpdGlvbktleT17a2V5cy5saXN0S2V5KGtleSwgJ21vdGlvbicpfVxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0PEhvdXJMYWJlbCBkYXRlPXtjb2x9IC8+XG5cdFx0XHRcdDwvQW5pbWF0ZWRTZWN0aW9uPlxuXHRcdFx0KVxuXHRcdH0pfVxuXHQ8L2Rpdj5cbilcbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IEJ1c2luZXNzSG91cnMgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgeyBnZXRWaWV3SG91cnMgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL3V0aWxzL3ZpZXctaG91cnMnXG5pbXBvcnQgeyBSZXNvdXJjZUV2ZW50R3JpZCB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy9yZXNvdXJjZS1ldmVudC1ncmlkJ1xuaW1wb3J0IHsgVGltZUhlYWRlclJvdyB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy90aW1lLWhlYWRlci1yb3cnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5cbmV4cG9ydCBjb25zdCBSZXNvdXJjZURheUhvcml6b250YWw6IFJlYWN0LkZDID0gKCkgPT4ge1xuXHRjb25zdCB7IGN1cnJlbnREYXRlLCB0LCBidXNpbmVzc0hvdXJzLCBoaWRlTm9uQnVzaW5lc3NIb3VycywgcmVzb3VyY2VzIH0gPVxuXHRcdHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblx0Y29uc3QgZGF5SG91cnMgPSBnZXRWaWV3SG91cnMoe1xuXHRcdHJlZmVyZW5jZURhdGU6IGN1cnJlbnREYXRlLFxuXHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0aGlkZU5vbkJ1c2luZXNzSG91cnMsXG5cdFx0YWxsRGF0ZXM6IFtjdXJyZW50RGF0ZV0sXG5cdFx0cmVzb3VyY2VCdXNpbmVzc0hvdXJzOiByZXNvdXJjZXNcblx0XHRcdC5tYXAoKHIpID0+IHIuYnVzaW5lc3NIb3Vycylcblx0XHRcdC5maWx0ZXIoQm9vbGVhbikgYXMgKEJ1c2luZXNzSG91cnMgfCBCdXNpbmVzc0hvdXJzW10pW10sXG5cdH0pXG5cblx0cmV0dXJuIChcblx0XHQ8UmVzb3VyY2VFdmVudEdyaWRcblx0XHRcdGNsYXNzZXM9e3tcblx0XHRcdFx0aGVhZGVyOiAnbWluLXctZnVsbCcsXG5cdFx0XHRcdGJvZHk6ICdtaW4tdy1mdWxsJyxcblx0XHRcdFx0Y2VsbDogJ21pbi13LTIwIGZsZXgtMScsXG5cdFx0XHR9fVxuXHRcdFx0ZGF5cz17ZGF5SG91cnN9XG5cdFx0XHRncmlkVHlwZT1cImhvdXJcIlxuXHRcdD5cblx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidy0yMCBzbTp3LTQwIGJvcmRlci1iIGJvcmRlci1yIHNocmluay0wIGZsZXgganVzdGlmeS1jZW50ZXIgaXRlbXMtY2VudGVyIHN0aWNreSB0b3AtMCBsZWZ0LTAgYmctYmFja2dyb3VuZCB6LTIwXCI+XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSB0cnVuY2F0ZSBweC0xIG1pbi13LTBcIj57dCgncmVzb3VyY2VzJyl9PC9kaXY+XG5cdFx0XHQ8L2Rpdj5cblxuXHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4LTEgZmxleCBmbGV4LWNvbFwiPlxuXHRcdFx0XHQ8VGltZUhlYWRlclJvdyBkZWxheVN0ZXA9ezAuMDV9IGhvdXJzPXtkYXlIb3Vyc30gdmlldz1cImRheVwiIC8+XG5cdFx0XHQ8L2Rpdj5cblx0XHQ8L1Jlc291cmNlRXZlbnRHcmlkPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB7IEFsbERheUNlbGwgfSBmcm9tICdAL2NvbXBvbmVudHMvYWxsLWRheS1yb3cvYWxsLWRheS1jZWxsJ1xuaW1wb3J0IHsgQWxsRGF5Um93IH0gZnJvbSAnQC9jb21wb25lbnRzL2FsbC1kYXktcm93L2FsbC1kYXktcm93J1xuaW1wb3J0IHsgSG91ckxhYmVsIH0gZnJvbSAnQC9jb21wb25lbnRzL2hvdXItbGFiZWwvaG91ci1sYWJlbCdcbmltcG9ydCB7IFJlc291cmNlQ2VsbCB9IGZyb20gJ0AvY29tcG9uZW50cy9yZXNvdXJjZS1jZWxsJ1xuaW1wb3J0IHR5cGUgeyBCdXNpbmVzc0hvdXJzIH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHsgVmVydGljYWxHcmlkIH0gZnJvbSAnQC9jb21wb25lbnRzL3ZlcnRpY2FsLWdyaWQvdmVydGljYWwtZ3JpZCdcbmltcG9ydCB7IGdldFZpZXdIb3VycyB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvdXRpbHMvdmlldy1ob3VycydcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB0eXBlIHsgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGtleXMgfSBmcm9tICdAL2xpYi91dGlscy9rZXlzJ1xuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VEYXlWZXJ0aWNhbDogUmVhY3QuRkMgPSAoKSA9PiB7XG5cdGNvbnN0IHtcblx0XHRjdXJyZW50RGF0ZSxcblx0XHRyZXNvdXJjZXMsXG5cdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRoaWRlTm9uQnVzaW5lc3NIb3Vycyxcblx0XHRzbG90RHVyYXRpb24sXG5cdH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cdGNvbnN0IGhvdXJzID0gZ2V0Vmlld0hvdXJzKHtcblx0XHRyZWZlcmVuY2VEYXRlOiBjdXJyZW50RGF0ZSxcblx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzLFxuXHRcdGFsbERhdGVzOiBbY3VycmVudERhdGVdLFxuXHRcdHJlc291cmNlQnVzaW5lc3NIb3VyczogcmVzb3VyY2VzXG5cdFx0XHQubWFwKChyKSA9PiByLmJ1c2luZXNzSG91cnMpXG5cdFx0XHQuZmlsdGVyKEJvb2xlYW4pIGFzIChCdXNpbmVzc0hvdXJzIHwgQnVzaW5lc3NIb3Vyc1tdKVtdLFxuXHR9KVxuXG5cdGNvbnN0IGZpcnN0Q29sID0ge1xuXHRcdGlkOiBrZXlzLmNvbC50aW1lLFxuXHRcdGRheTogdW5kZWZpbmVkLFxuXHRcdGRheXM6IGhvdXJzLFxuXHRcdGNsYXNzTmFtZTpcblx0XHRcdCdzaHJpbmstMCB3LTE2IG1pbi13LTE2IG1heC13LTE2IHN0aWNreSBsZWZ0LTAgYmctYmFja2dyb3VuZCB6LTIwIGJvcmRlci1yLTAnLFxuXHRcdGdyaWRUeXBlOiAnaG91cicgYXMgY29uc3QsXG5cdFx0bm9FdmVudHM6IHRydWUsXG5cdFx0cmVuZGVyQ2VsbDogKGRhdGU6IERheWpzKSA9PiAoXG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQtbXV0ZWQtZm9yZWdyb3VuZCBwLTIgdGV4dC1yaWdodCB0ZXh0LVsxMHB4XSBzbTp0ZXh0LXhzIGZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyXCI+XG5cdFx0XHRcdDxIb3VyTGFiZWwgZGF0ZT17ZGF0ZX0gLz5cblx0XHRcdDwvZGl2PlxuXHRcdCksXG5cdH1cblxuXHRjb25zdCBjb2x1bW5zID0gcmVzb3VyY2VzLm1hcCgocmVzb3VyY2UpID0+ICh7XG5cdFx0aWQ6IGtleXMuY29sLmRheShjdXJyZW50RGF0ZSwgcmVzb3VyY2UuaWQpLFxuXHRcdHJlc291cmNlSWQ6IHJlc291cmNlLmlkLFxuXHRcdHJlc291cmNlLFxuXHRcdGRheXM6IGhvdXJzLFxuXHRcdGRheTogY3VycmVudERhdGUsXG5cdFx0Z3JpZFR5cGU6ICdob3VyJyBhcyBjb25zdCxcblx0fSkpXG5cblx0cmV0dXJuIChcblx0XHQ8VmVydGljYWxHcmlkXG5cdFx0XHRhbGxEYXlSb3c9e1xuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggdy1mdWxsXCI+XG5cdFx0XHRcdFx0PEFsbERheUNlbGwgLz5cblx0XHRcdFx0XHR7cmVzb3VyY2VzLm1hcCgocmVzb3VyY2UpID0+IChcblx0XHRcdFx0XHRcdDxBbGxEYXlSb3dcblx0XHRcdFx0XHRcdFx0Y2xhc3Nlcz17eyBjZWxsOiAnbWluLXctMjAgYm9yZGVyLXIhJyB9fVxuXHRcdFx0XHRcdFx0XHRkYXlzPXtbY3VycmVudERhdGVdfVxuXHRcdFx0XHRcdFx0XHRrZXk9e2tleXMuYWxsRGF5Um93KHJlc291cmNlLmlkKX1cblx0XHRcdFx0XHRcdFx0cmVzb3VyY2U9e3Jlc291cmNlfVxuXHRcdFx0XHRcdFx0XHRzaG93U3BhY2VyPXtmYWxzZX1cblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0KSl9XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0fVxuXHRcdFx0Y2xhc3Nlcz17eyBib2R5OiAndy1mdWxsJywgaGVhZGVyOiAndy1mdWxsJyB9fVxuXHRcdFx0Y29sdW1ucz17W2ZpcnN0Q29sLCAuLi5jb2x1bW5zXX1cblx0XHRcdGRhdGEtdGVzdGlkPVwicmVzb3VyY2UtZGF5XCJcblx0XHRcdGdyaWRUeXBlPVwiaG91clwiXG5cdFx0XHRzbG90RHVyYXRpb25NaW51dGVzPXtzbG90RHVyYXRpb259XG5cdFx0PlxuXHRcdFx0ey8qIEhlYWRlciAqL31cblx0XHRcdDxkaXZcblx0XHRcdFx0Y2xhc3NOYW1lPXsnZmxleCBib3JkZXItYiBoLTEyIGZsZXgtMSd9XG5cdFx0XHRcdGRhdGEtdGVzdGlkPVwicmVzb3VyY2UtbW9udGgtaGVhZGVyXCJcblx0XHRcdD5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJzaHJpbmstMCBib3JkZXItciB3LTE2IHN0aWNreSB0b3AtMCBsZWZ0LTAgYmctYmFja2dyb3VuZCB6LTIwXCIgLz5cblx0XHRcdFx0e3Jlc291cmNlcy5tYXAoKHJlc291cmNlKSA9PiAoXG5cdFx0XHRcdFx0PFJlc291cmNlQ2VsbFxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwibWluLXctMjAgZmxleC0xXCJcblx0XHRcdFx0XHRcdGtleT17a2V5cy5saXN0S2V5KCdyZXNvdXJjZS1jZWxsJywgcmVzb3VyY2UuaWQpfVxuXHRcdFx0XHRcdFx0cmVzb3VyY2U9e3Jlc291cmNlfVxuXHRcdFx0XHRcdC8+XG5cdFx0XHRcdCkpfVxuXHRcdFx0PC9kaXY+XG5cdFx0PC9WZXJ0aWNhbEdyaWQ+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgeyBSZXNvdXJjZURheUhvcml6b250YWwgfSBmcm9tICcuL3Jlc291cmNlLWRheS1ob3Jpem9udGFsJ1xuaW1wb3J0IHsgUmVzb3VyY2VEYXlWZXJ0aWNhbCB9IGZyb20gJy4vcmVzb3VyY2UtZGF5LXZlcnRpY2FsJ1xuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VEYXlWaWV3OiBSZWFjdC5GQyA9ICgpID0+IHtcblx0Y29uc3QgeyBvcmllbnRhdGlvbiB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXG5cdGlmIChvcmllbnRhdGlvbiA9PT0gJ3ZlcnRpY2FsJykge1xuXHRcdHJldHVybiA8UmVzb3VyY2VEYXlWZXJ0aWNhbCAvPlxuXHR9XG5cblx0cmV0dXJuIDxSZXNvdXJjZURheUhvcml6b250YWwgLz5cbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBBbmltYXRlZFNlY3Rpb24gfSBmcm9tICdAL2NvbXBvbmVudHMvYW5pbWF0aW9ucy9hbmltYXRlZC1zZWN0aW9uJ1xuaW1wb3J0IHsgUmVzb3VyY2VFdmVudEdyaWQgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvcmVzb3VyY2UtZXZlbnQtZ3JpZCdcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB0eXBlIHsgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGdldE1vbnRoRGF5cyB9IGZyb20gJ0AvbGliL3V0aWxzL2RhdGUtdXRpbHMnXG5pbXBvcnQgeyBrZXlzIH0gZnJvbSAnQC9saWIvdXRpbHMva2V5cydcblxuZXhwb3J0IGNvbnN0IFJlc291cmNlTW9udGhIb3Jpem9udGFsOiBSZWFjdC5GQyA9ICgpID0+IHtcblx0Y29uc3QgeyBjdXJyZW50RGF0ZSwgdCB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXG5cdC8vIEdlbmVyYXRlIGNhbGVuZGFyIGdyaWQgLSBkYXlzIG9mIHRoZSBtb250aFxuXHRjb25zdCBtb250aERheXMgPSB1c2VNZW1vPERheWpzW10+KCgpID0+IHtcblx0XHRyZXR1cm4gZ2V0TW9udGhEYXlzKGN1cnJlbnREYXRlKVxuXHR9LCBbY3VycmVudERhdGVdKVxuXG5cdHJldHVybiAoXG5cdFx0PFJlc291cmNlRXZlbnRHcmlkIGRheXM9e21vbnRoRGF5c30+XG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInctMjAgc206dy00MCBib3JkZXItYiBib3JkZXItciBzaHJpbmstMCBmbGV4IGp1c3RpZnktY2VudGVyIGl0ZW1zLWNlbnRlciBzdGlja3kgdG9wLTAgbGVmdC0wIGJnLWJhY2tncm91bmQgei0yMFwiPlxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gdHJ1bmNhdGUgcHgtMSBtaW4tdy0wXCI+e3QoJ3Jlc291cmNlcycpfTwvZGl2PlxuXHRcdFx0PC9kaXY+XG5cblx0XHRcdHttb250aERheXMubWFwKChkYXksIGluZGV4KSA9PiB7XG5cdFx0XHRcdGNvbnN0IGtleSA9IGByZXNvdXJjZS1tb250aC1oZWFkZXItJHtkYXkudG9JU09TdHJpbmcoKX1gXG5cblx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHQ8QW5pbWF0ZWRTZWN0aW9uXG5cdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJ3LTIwIGJvcmRlci1iIGJvcmRlci1yIHNocmluay0wIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGZsZXgtY29sXCJcblx0XHRcdFx0XHRcdGRlbGF5PXtpbmRleCAqIDAuMDV9XG5cdFx0XHRcdFx0XHRrZXk9e2tleXMubGlzdEtleShrZXksICdhbmltYXRlZCcpfVxuXHRcdFx0XHRcdFx0dHJhbnNpdGlvbktleT17a2V5cy5saXN0S2V5KGtleSwgJ21vdGlvbicpfVxuXHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidGV4dC14cyBmb250LW1lZGl1bVwiPntkYXkuZm9ybWF0KCdEJyl9PC9kaXY+XG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCI+XG5cdFx0XHRcdFx0XHRcdHtkYXkuZm9ybWF0KCdkZGQnKX1cblx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdDwvQW5pbWF0ZWRTZWN0aW9uPlxuXHRcdFx0XHQpXG5cdFx0XHR9KX1cblx0XHQ8L1Jlc291cmNlRXZlbnRHcmlkPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgUmVzb3VyY2VDZWxsIH0gZnJvbSAnQC9jb21wb25lbnRzL3Jlc291cmNlLWNlbGwnXG5pbXBvcnQgeyBWZXJ0aWNhbEdyaWQgfSBmcm9tICdAL2NvbXBvbmVudHMvdmVydGljYWwtZ3JpZC92ZXJ0aWNhbC1ncmlkJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUgeyBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsga2V5cyB9IGZyb20gJ0AvbGliL3V0aWxzL2tleXMnXG5cbmV4cG9ydCBjb25zdCBSZXNvdXJjZU1vbnRoVmVydGljYWw6IFJlYWN0LkZDID0gKCkgPT4ge1xuXHRjb25zdCB7IGN1cnJlbnREYXRlLCByZXNvdXJjZXMgfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblx0Y29uc3Qgc3RhcnRPZk1vbnRoID0gY3VycmVudERhdGUuc3RhcnRPZignbW9udGgnKVxuXHRjb25zdCBkYXlzSW5Nb250aCA9IEFycmF5LmZyb20oXG5cdFx0eyBsZW5ndGg6IGN1cnJlbnREYXRlLmRheXNJbk1vbnRoKCkgfSxcblx0XHQoXywgaSkgPT4gc3RhcnRPZk1vbnRoLmFkZChpLCAnZGF5Jylcblx0KVxuXG5cdGNvbnN0IGZpcnN0Q29sID0ge1xuXHRcdGlkOiBrZXlzLmNvbC5kYXRlLFxuXHRcdGRheXM6IGRheXNJbk1vbnRoLFxuXHRcdGRheTogdW5kZWZpbmVkLFxuXHRcdGNsYXNzTmFtZTpcblx0XHRcdCdzaHJpbmstMCB3LTE2IG1pbi13LTE2IG1heC13LTE2IHN0aWNreSBsZWZ0LTAgYmctYmFja2dyb3VuZCB6LTIwIGJvcmRlci1yLTAnLFxuXHRcdGdyaWRUeXBlOiAnZGF5JyBhcyBjb25zdCxcblx0XHRub0V2ZW50czogdHJ1ZSxcblx0XHRyZW5kZXJDZWxsOiAoZGF0ZTogRGF5anMpID0+IChcblx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHAtMiB0ZXh0LXJpZ2h0IHRleHQtWzEwcHhdIHNtOnRleHQteHMgZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXJcIj5cblx0XHRcdFx0PHNwYW4+e2RhdGUuZm9ybWF0KCdEJyl9PC9zcGFuPlxuXHRcdFx0XHQ8c3Bhbj57ZGF0ZS5mb3JtYXQoJ2RkZCcpfTwvc3Bhbj5cblx0XHRcdDwvZGl2PlxuXHRcdCksXG5cdH1cblxuXHRjb25zdCBjb2x1bW5zID0gcmVzb3VyY2VzLm1hcCgocmVzb3VyY2UpID0+ICh7XG5cdFx0aWQ6IGtleXMuY29sLnJlc291cmNlKCdtb250aCcsIHJlc291cmNlLmlkKSxcblx0XHRkYXk6IHVuZGVmaW5lZCxcblx0XHRyZXNvdXJjZUlkOiByZXNvdXJjZS5pZCxcblx0XHRkYXlzOiBkYXlzSW5Nb250aCxcblx0XHRncmlkVHlwZTogJ2RheScgYXMgY29uc3QsXG5cdH0pKVxuXG5cdHJldHVybiAoXG5cdFx0PFZlcnRpY2FsR3JpZFxuXHRcdFx0Y2xhc3Nlcz17eyBoZWFkZXI6ICd3LWZ1bGwnLCBib2R5OiAndy1mdWxsJyB9fVxuXHRcdFx0Y29sdW1ucz17W2ZpcnN0Q29sLCAuLi5jb2x1bW5zXX1cblx0XHRcdGRhdGEtdGVzdGlkPVwicmVzb3VyY2UtbW9udGgtdmVydGljYWwtZ3JpZFwiXG5cdFx0PlxuXHRcdFx0ey8qIEhlYWRlciAqL31cblx0XHRcdDxkaXZcblx0XHRcdFx0Y2xhc3NOYW1lPXsnZmxleCBib3JkZXItYiBoLTEyIGZsZXgtMSd9XG5cdFx0XHRcdGRhdGEtdGVzdGlkPVwicmVzb3VyY2UtbW9udGgtaGVhZGVyXCJcblx0XHRcdD5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJzaHJpbmstMCBib3JkZXItciB3LTE2IHN0aWNreSB0b3AtMCBsZWZ0LTAgYmctYmFja2dyb3VuZCB6LTIwXCIgLz5cblx0XHRcdFx0e3Jlc291cmNlcy5tYXAoKHJlc291cmNlKSA9PiAoXG5cdFx0XHRcdFx0PFJlc291cmNlQ2VsbFxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwibWluLXctMjAgZmxleC0xXCJcblx0XHRcdFx0XHRcdGtleT17a2V5cy5saXN0S2V5KCdyZXNvdXJjZS1jZWxsJywgcmVzb3VyY2UuaWQpfVxuXHRcdFx0XHRcdFx0cmVzb3VyY2U9e3Jlc291cmNlfVxuXHRcdFx0XHRcdC8+XG5cdFx0XHRcdCkpfVxuXHRcdFx0PC9kaXY+XG5cdFx0PC9WZXJ0aWNhbEdyaWQ+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgeyBSZXNvdXJjZU1vbnRoSG9yaXpvbnRhbCB9IGZyb20gJy4vcmVzb3VyY2UtbW9udGgtaG9yaXpvbnRhbCdcbmltcG9ydCB7IFJlc291cmNlTW9udGhWZXJ0aWNhbCB9IGZyb20gJy4vcmVzb3VyY2UtbW9udGgtdmVydGljYWwnXG5cbmV4cG9ydCBjb25zdCBSZXNvdXJjZU1vbnRoVmlldzogUmVhY3QuRkMgPSAoKSA9PiB7XG5cdGNvbnN0IHsgb3JpZW50YXRpb24gfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblxuXHRpZiAob3JpZW50YXRpb24gPT09ICd2ZXJ0aWNhbCcpIHtcblx0XHRyZXR1cm4gPFJlc291cmNlTW9udGhWZXJ0aWNhbCAvPlxuXHR9XG5cblx0cmV0dXJuIDxSZXNvdXJjZU1vbnRoSG9yaXpvbnRhbCAvPlxufVxuIiwKICAgICJpbXBvcnQgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgeyBnZXRXZWVrRGF5cyB9IGZyb20gJ0AvbGliL3V0aWxzL2RhdGUtdXRpbHMnXG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VSZXNvdXJjZVdlZWtWaWV3RGF0YSgpIHtcblx0Y29uc3Qge1xuXHRcdGN1cnJlbnREYXRlLFxuXHRcdGZpcnN0RGF5T2ZXZWVrLFxuXHRcdHJlc291cmNlcyxcblx0XHR3ZWVrVmlld0dyYW51bGFyaXR5LFxuXHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0aGlkZU5vbkJ1c2luZXNzSG91cnMsXG5cdFx0aGlkZGVuRGF5cyxcblx0fSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblxuXHRjb25zdCBpc0hvdXJseSA9IHdlZWtWaWV3R3JhbnVsYXJpdHkgPT09ICdob3VybHknXG5cblx0Y29uc3Qgd2Vla0RheXMgPSB1c2VNZW1vKFxuXHRcdCgpID0+IGdldFdlZWtEYXlzKGN1cnJlbnREYXRlLCBmaXJzdERheU9mV2VlayksXG5cdFx0W2N1cnJlbnREYXRlLCBmaXJzdERheU9mV2Vla11cblx0KVxuXG5cdGNvbnN0IHZpc2libGVEYXlzID0gdXNlTWVtbyhcblx0XHQoKSA9PlxuXHRcdFx0aGlkZGVuRGF5c1xuXHRcdFx0XHQ/IHdlZWtEYXlzLmZpbHRlcigoZGF5KSA9PiAhaGlkZGVuRGF5cy5oYXMoZGF5LmRheSgpKSlcblx0XHRcdFx0OiB3ZWVrRGF5cyxcblx0XHRbd2Vla0RheXMsIGhpZGRlbkRheXNdXG5cdClcblxuXHRjb25zdCByZXNvdXJjZUJ1c2luZXNzSG91cnMgPSB1c2VNZW1vKFxuXHRcdCgpID0+IHJlc291cmNlcy5mbGF0TWFwKChyKSA9PiAoci5idXNpbmVzc0hvdXJzID8gW3IuYnVzaW5lc3NIb3Vyc10gOiBbXSkpLFxuXHRcdFtyZXNvdXJjZXNdXG5cdClcblxuXHRyZXR1cm4ge1xuXHRcdGlzSG91cmx5LFxuXHRcdHJlc291cmNlcyxcblx0XHR3ZWVrRGF5cyxcblx0XHR2aXNpYmxlRGF5cyxcblx0XHRjdXJyZW50RGF0ZSxcblx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzLFxuXHRcdHJlc291cmNlQnVzaW5lc3NIb3Vycyxcblx0fVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEFuaW1hdGVkU2VjdGlvbiB9IGZyb20gJ0AvY29tcG9uZW50cy9hbmltYXRpb25zL2FuaW1hdGVkLXNlY3Rpb24nXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSB7IERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgaXNUb2RheSB9IGZyb20gJ0AvbGliL3V0aWxzL2RhdGUtdXRpbHMnXG5pbXBvcnQgeyBrZXlzIH0gZnJvbSAnQC9saWIvdXRpbHMva2V5cydcblxuaW50ZXJmYWNlIFJlc291cmNlV2Vla0hvcml6b250YWxEYXlIZWFkZXJQcm9wcyB7XG5cdGRheXM6IERheWpzW11cbn1cblxuZXhwb3J0IGNvbnN0IFJlc291cmNlV2Vla0hvcml6b250YWxEYXlIZWFkZXI6IFJlYWN0LkZDPFxuXHRSZXNvdXJjZVdlZWtIb3Jpem9udGFsRGF5SGVhZGVyUHJvcHNcbj4gPSAoeyBkYXlzIH0pID0+IHtcblx0Y29uc3QgeyB3ZWVrVmlld0dyYW51bGFyaXR5IH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cdGNvbnN0IGlzSG91cmx5ID0gd2Vla1ZpZXdHcmFudWxhcml0eSA9PT0gJ2hvdXJseSdcblxuXHRyZXR1cm4gKFxuXHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBoLTEyXCI+XG5cdFx0XHR7ZGF5cy5tYXAoKGRheSwgaW5kZXgpID0+IHtcblx0XHRcdFx0Y29uc3QgdG9kYXkgPSBpc1RvZGF5KGRheSlcblx0XHRcdFx0Y29uc3Qga2V5ID0ga2V5cy5oZWFkZXIud2Vlay5kYXkoZGF5KVxuXG5cdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0PEFuaW1hdGVkU2VjdGlvblxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdFx0J3Nocmluay0wIGJvcmRlci1yIGxhc3Q6Ym9yZGVyLXItMCBib3JkZXItYiBmbGV4LTEgZmxleCBpdGVtcy1jZW50ZXIgdGV4dC1jZW50ZXIgZm9udC1tZWRpdW0gbWluLXctMjAnLFxuXHRcdFx0XHRcdFx0XHR0b2RheSAmJiAnYmctcHJpbWFyeS8xMCBmb250LWJvbGQnXG5cdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e2tleXMuaGVhZGVyLnJlc291cmNlLndlZWtEYXl9XG5cdFx0XHRcdFx0XHRkZWxheT17aW5kZXggKiAwLjA1fVxuXHRcdFx0XHRcdFx0a2V5PXtrZXlzLmxpc3RLZXkoa2V5LCAnYW5pbWF0ZWQnKX1cblx0XHRcdFx0XHRcdHRyYW5zaXRpb25LZXk9e2tleXMubGlzdEtleShrZXksICdtb3Rpb24nKX1cblx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHRcdFx0aXNIb3VybHkgPyAnc3RpY2t5IGxlZnQtMS8yJyA6ICd3LWZ1bGwgdGV4dC1jZW50ZXInXG5cdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSB0cnVuY2F0ZSB3LWZ1bGxcIj57ZGF5LmZvcm1hdCgnZGRkJyl9PC9kaXY+XG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LW11dGVkLWZvcmVncm91bmRcIj5cblx0XHRcdFx0XHRcdFx0XHR7ZGF5LmZvcm1hdCgnRCcpfVxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdDwvQW5pbWF0ZWRTZWN0aW9uPlxuXHRcdFx0XHQpXG5cdFx0XHR9KX1cblx0XHQ8L2Rpdj5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBnZXRWaWV3SG91cnMgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL3V0aWxzL3ZpZXctaG91cnMnXG5pbXBvcnQgeyB1c2VSZXNvdXJjZVdlZWtWaWV3RGF0YSB9IGZyb20gJy4uL3VzZS1yZXNvdXJjZS13ZWVrLXZpZXctZGF0YSdcblxuZXhwb3J0IGZ1bmN0aW9uIHVzZVJlc291cmNlV2Vla0hvcml6b250YWxEYXRhKCkge1xuXHRjb25zdCB7XG5cdFx0aXNIb3VybHksXG5cdFx0d2Vla0RheXMsXG5cdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRoaWRlTm9uQnVzaW5lc3NIb3Vycyxcblx0XHRyZXNvdXJjZUJ1c2luZXNzSG91cnMsXG5cdH0gPSB1c2VSZXNvdXJjZVdlZWtWaWV3RGF0YSgpXG5cblx0Y29uc3Qgd2Vla0hvdXJzID0gdXNlTWVtbygoKSA9PiB7XG5cdFx0aWYgKCFpc0hvdXJseSkgcmV0dXJuIFtdXG5cdFx0cmV0dXJuIHdlZWtEYXlzLm1hcCgoZGF5KSA9PlxuXHRcdFx0Z2V0Vmlld0hvdXJzKHtcblx0XHRcdFx0cmVmZXJlbmNlRGF0ZTogZGF5LFxuXHRcdFx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdFx0XHRoaWRlTm9uQnVzaW5lc3NIb3Vycyxcblx0XHRcdFx0cmVzb3VyY2VCdXNpbmVzc0hvdXJzLFxuXHRcdFx0fSlcblx0XHQpXG5cdH0sIFtcblx0XHRpc0hvdXJseSxcblx0XHR3ZWVrRGF5cyxcblx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzLFxuXHRcdHJlc291cmNlQnVzaW5lc3NIb3Vycyxcblx0XSlcblxuXHRyZXR1cm4geyB3ZWVrSG91cnMgfVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IFJlc291cmNlRXZlbnRHcmlkIH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL3Jlc291cmNlLWV2ZW50LWdyaWQnXG5pbXBvcnQgeyBUaW1lSGVhZGVyUm93IH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL3RpbWUtaGVhZGVyLXJvdydcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgeyB1c2VSZXNvdXJjZVdlZWtWaWV3RGF0YSB9IGZyb20gJy4uL3VzZS1yZXNvdXJjZS13ZWVrLXZpZXctZGF0YSdcbmltcG9ydCB7IFJlc291cmNlV2Vla0hvcml6b250YWxEYXlIZWFkZXIgfSBmcm9tICcuL3Jlc291cmNlLXdlZWstaG9yaXpvbnRhbC1kYXktaGVhZGVyJ1xuaW1wb3J0IHsgdXNlUmVzb3VyY2VXZWVrSG9yaXpvbnRhbERhdGEgfSBmcm9tICcuL3VzZS1yZXNvdXJjZS13ZWVrLWhvcml6b250YWwtZGF0YSdcblxuZXhwb3J0IGNvbnN0IFJlc291cmNlV2Vla0hvcml6b250YWw6IFJlYWN0LkZDID0gKCkgPT4ge1xuXHRjb25zdCB7IHQgfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblx0Y29uc3QgeyBpc0hvdXJseSwgd2Vla0RheXMgfSA9IHVzZVJlc291cmNlV2Vla1ZpZXdEYXRhKClcblx0Y29uc3QgeyB3ZWVrSG91cnMgfSA9IHVzZVJlc291cmNlV2Vla0hvcml6b250YWxEYXRhKClcblxuXHRyZXR1cm4gKFxuXHRcdDxSZXNvdXJjZUV2ZW50R3JpZFxuXHRcdFx0Y2xhc3Nlcz17e1xuXHRcdFx0XHRoZWFkZXI6IGNuKGlzSG91cmx5ID8gJ2gtMjQnIDogJ2gtMTInLCAnbWluLXctZnVsbCcpLFxuXHRcdFx0XHRib2R5OiAnbWluLXctZnVsbCcsXG5cdFx0XHRcdGNlbGw6ICdtaW4tdy0yMCBmbGV4LTEnLFxuXHRcdFx0fX1cblx0XHRcdGRheXM9e2lzSG91cmx5ID8gd2Vla0hvdXJzIDogd2Vla0RheXN9XG5cdFx0XHRncmlkVHlwZT17aXNIb3VybHkgPyAnaG91cicgOiAnZGF5J31cblx0XHQ+XG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInctMjAgc206dy00MCBib3JkZXItYiBib3JkZXItciBzaHJpbmstMCBmbGV4IGp1c3RpZnktY2VudGVyIGl0ZW1zLWNlbnRlciBzdGlja3kgdG9wLTAgbGVmdC0wIGJnLWJhY2tncm91bmQgei0yMFwiPlxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gdHJ1bmNhdGUgcHgtMSBtaW4tdy0wXCI+e3QoJ3Jlc291cmNlcycpfTwvZGl2PlxuXHRcdFx0PC9kaXY+XG5cblx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIGZsZXggZmxleC1jb2xcIj5cblx0XHRcdFx0PFJlc291cmNlV2Vla0hvcml6b250YWxEYXlIZWFkZXIgZGF5cz17d2Vla0RheXN9IC8+XG5cdFx0XHRcdHtpc0hvdXJseSAmJiAoXG5cdFx0XHRcdFx0PFRpbWVIZWFkZXJSb3dcblx0XHRcdFx0XHRcdGRlbGF5U3RlcD17MC4wMDV9XG5cdFx0XHRcdFx0XHRob3Vycz17d2Vla0hvdXJzLmZsYXQoKX1cblx0XHRcdFx0XHRcdHZpZXc9XCJ3ZWVrXCJcblx0XHRcdFx0XHQvPlxuXHRcdFx0XHQpfVxuXHRcdFx0PC9kaXY+XG5cdFx0PC9SZXNvdXJjZUV2ZW50R3JpZD5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEFsbERheUNlbGwgfSBmcm9tICdAL2NvbXBvbmVudHMvYWxsLWRheS1yb3cvYWxsLWRheS1jZWxsJ1xuaW1wb3J0IHsgQWxsRGF5Um93IH0gZnJvbSAnQC9jb21wb25lbnRzL2FsbC1kYXktcm93L2FsbC1kYXktcm93J1xuaW1wb3J0IHsgSG91ckxhYmVsIH0gZnJvbSAnQC9jb21wb25lbnRzL2hvdXItbGFiZWwvaG91ci1sYWJlbCdcbmltcG9ydCB7IFZlcnRpY2FsR3JpZCB9IGZyb20gJ0AvY29tcG9uZW50cy92ZXJ0aWNhbC1ncmlkL3ZlcnRpY2FsLWdyaWQnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSB7IERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBrZXlzIH0gZnJvbSAnQC9saWIvdXRpbHMva2V5cydcbmltcG9ydCB7IHVzZVJlc291cmNlV2Vla1ZpZXdEYXRhIH0gZnJvbSAnLi4vdXNlLXJlc291cmNlLXdlZWstdmlldy1kYXRhJ1xuaW1wb3J0IHsgUmVzb3VyY2VXZWVrVmVydGljYWxEYXlIZWFkZXIgfSBmcm9tICcuL3Jlc291cmNlLXdlZWstdmVydGljYWwtZGF5LWhlYWRlcidcbmltcG9ydCB7IFJlc291cmNlV2Vla1ZlcnRpY2FsUmVzb3VyY2VIZWFkZXIgfSBmcm9tICcuL3Jlc291cmNlLXdlZWstdmVydGljYWwtcmVzb3VyY2UtaGVhZGVyJ1xuaW1wb3J0IHsgdXNlUmVzb3VyY2VXZWVrVmVydGljYWxEYXRhIH0gZnJvbSAnLi91c2UtcmVzb3VyY2Utd2Vlay12ZXJ0aWNhbC1kYXRhJ1xuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VXZWVrVmVydGljYWw6IFJlYWN0LkZDID0gKCkgPT4ge1xuXHRjb25zdCB7IGlzSG91cmx5LCByZXNvdXJjZXMsIHdlZWtEYXlzLCB2aXNpYmxlRGF5cyB9ID1cblx0XHR1c2VSZXNvdXJjZVdlZWtWaWV3RGF0YSgpXG5cdGNvbnN0IHsgaG91cnMsIGNvbHVtbnMgfSA9IHVzZVJlc291cmNlV2Vla1ZlcnRpY2FsRGF0YSgpXG5cdGNvbnN0IHsgc2xvdER1cmF0aW9uIH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cblx0Y29uc3QgZmlyc3RDb2wgPSB1c2VNZW1vKFxuXHRcdCgpID0+ICh7XG5cdFx0XHRpZDogaXNIb3VybHkgPyBrZXlzLmNvbC50aW1lIDoga2V5cy5jb2wuZGF0ZSxcblx0XHRcdGRheXM6IGlzSG91cmx5ID8gaG91cnMgOiB3ZWVrRGF5cyxcblx0XHRcdGRheTogdW5kZWZpbmVkLFxuXHRcdFx0Y2xhc3NOYW1lOlxuXHRcdFx0XHQnc2hyaW5rLTAgdy0xNiBtaW4tdy0xNiBtYXgtdy0xNiBzdGlja3kgbGVmdC0wIGJnLWJhY2tncm91bmQgei0yMCBib3JkZXItci0wJyxcblx0XHRcdGdyaWRUeXBlOiBpc0hvdXJseSA/ICgnaG91cicgYXMgY29uc3QpIDogKCdkYXknIGFzIGNvbnN0KSxcblx0XHRcdG5vRXZlbnRzOiB0cnVlLFxuXHRcdFx0cmVuZGVyQ2VsbDogKGRhdGU6IERheWpzKSA9PiAoXG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHAtMiB0ZXh0LXJpZ2h0IHRleHQtWzEwcHhdIHNtOnRleHQteHMgZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXJcIj5cblx0XHRcdFx0XHR7aXNIb3VybHkgPyAoXG5cdFx0XHRcdFx0XHQ8SG91ckxhYmVsIGRhdGU9e2RhdGV9IC8+XG5cdFx0XHRcdFx0KSA6IChcblx0XHRcdFx0XHRcdDw+XG5cdFx0XHRcdFx0XHRcdDxzcGFuPntkYXRlLmZvcm1hdCgnZGRkJyl9PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHQ8c3Bhbj57ZGF0ZS5mb3JtYXQoJ0QnKX08L3NwYW4+XG5cdFx0XHRcdFx0XHQ8Lz5cblx0XHRcdFx0XHQpfVxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdCksXG5cdFx0fSksXG5cdFx0W2hvdXJzLCBpc0hvdXJseSwgd2Vla0RheXNdXG5cdClcblxuXHRjb25zdCBhbGxEYXlSb3cgPSB1c2VNZW1vKCgpID0+IHtcblx0XHRpZiAoIWlzSG91cmx5KSByZXR1cm4gdW5kZWZpbmVkXG5cdFx0cmV0dXJuIChcblx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCB3LWZ1bGxcIj5cblx0XHRcdFx0PEFsbERheUNlbGwgLz5cblx0XHRcdFx0e3Jlc291cmNlcy5tYXAoKHJlc291cmNlKSA9PiAoXG5cdFx0XHRcdFx0PEFsbERheVJvd1xuXHRcdFx0XHRcdFx0Y2xhc3Nlcz17eyBjZWxsOiAnbWluLXctMjAgZmxleC0xIGJvcmRlci1yIScgfX1cblx0XHRcdFx0XHRcdGRheXM9e3Zpc2libGVEYXlzfVxuXHRcdFx0XHRcdFx0a2V5PXtrZXlzLmFsbERheVJvdyhyZXNvdXJjZS5pZCl9XG5cdFx0XHRcdFx0XHRyZXNvdXJjZT17cmVzb3VyY2V9XG5cdFx0XHRcdFx0XHRzaG93U3BhY2VyPXtmYWxzZX1cblx0XHRcdFx0XHQvPlxuXHRcdFx0XHQpKX1cblx0XHRcdDwvZGl2PlxuXHRcdClcblx0fSwgW2lzSG91cmx5LCByZXNvdXJjZXMsIHZpc2libGVEYXlzXSlcblxuXHRyZXR1cm4gKFxuXHRcdDxWZXJ0aWNhbEdyaWRcblx0XHRcdGFsbERheVJvdz17YWxsRGF5Um93fVxuXHRcdFx0Y2xhc3Nlcz17eyBoZWFkZXI6IGlzSG91cmx5ID8gJ2gtMjQnIDogJ2gtMTInIH19XG5cdFx0XHRjb2x1bW5zPXtbZmlyc3RDb2wsIC4uLmNvbHVtbnNdfVxuXHRcdFx0ZGF0YS10ZXN0aWQ9XCJyZXNvdXJjZS13ZWVrXCJcblx0XHRcdGdyaWRUeXBlPXtpc0hvdXJseSA/ICdob3VyJyA6ICdkYXknfVxuXHRcdFx0c2xvdER1cmF0aW9uTWludXRlcz17c2xvdER1cmF0aW9ufVxuXHRcdD5cblx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIGZsZXggZmxleC1jb2xcIj5cblx0XHRcdFx0PFJlc291cmNlV2Vla1ZlcnRpY2FsUmVzb3VyY2VIZWFkZXJcblx0XHRcdFx0XHRyZXNvdXJjZXM9e3Jlc291cmNlc31cblx0XHRcdFx0XHR2aXNpYmxlRGF5cz17dmlzaWJsZURheXN9XG5cdFx0XHRcdC8+XG5cdFx0XHRcdHtpc0hvdXJseSAmJiA8UmVzb3VyY2VXZWVrVmVydGljYWxEYXlIZWFkZXIgY29sdW1ucz17Y29sdW1uc30gLz59XG5cdFx0XHQ8L2Rpdj5cblx0XHQ8L1ZlcnRpY2FsR3JpZD5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEFuaW1hdGVkU2VjdGlvbiB9IGZyb20gJ0AvY29tcG9uZW50cy9hbmltYXRpb25zL2FuaW1hdGVkLXNlY3Rpb24nXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSB7IERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgaXNUb2RheSB9IGZyb20gJ0AvbGliL3V0aWxzL2RhdGUtdXRpbHMnXG5pbXBvcnQgeyBrZXlzIH0gZnJvbSAnQC9saWIvdXRpbHMva2V5cydcblxuaW50ZXJmYWNlIFJlc291cmNlV2Vla1ZlcnRpY2FsRGF5SGVhZGVyUHJvcHMge1xuXHRjb2x1bW5zOiBBcnJheTx7IGRheT86IERheWpzOyByZXNvdXJjZUlkPzogc3RyaW5nIHwgbnVtYmVyIH0+XG59XG5cbmV4cG9ydCBjb25zdCBSZXNvdXJjZVdlZWtWZXJ0aWNhbERheUhlYWRlcjogUmVhY3QuRkM8XG5cdFJlc291cmNlV2Vla1ZlcnRpY2FsRGF5SGVhZGVyUHJvcHNcbj4gPSAoeyBjb2x1bW5zIH0pID0+IHtcblx0Y29uc3QgeyBjdXJyZW50RGF0ZSB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXG5cdHJldHVybiAoXG5cdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IGgtMTJcIj5cblx0XHRcdDxkaXYgY2xhc3NOYW1lPVwic2hyaW5rLTAgdy0xNiBib3JkZXItciBib3JkZXItYiB6LTIwIGJnLWJhY2tncm91bmQgc3RpY2t5IGxlZnQtMFwiPlxuXHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJweC0yIGgtZnVsbCB3LWZ1bGwgZmxleCBqdXN0aWZ5LWNlbnRlciBpdGVtcy1zdGFydCBmb250LW1lZGl1bVwiPlxuXHRcdFx0XHRcdHtjdXJyZW50RGF0ZS53ZWVrKCl9XG5cdFx0XHRcdDwvc3Bhbj5cblx0XHRcdDwvZGl2PlxuXHRcdFx0e2NvbHVtbnMubWFwKChjb2wsIGluZGV4KSA9PiB7XG5cdFx0XHRcdGNvbnN0IGRheSA9IGNvbC5kYXlcblx0XHRcdFx0aWYgKCFkYXkpIHJldHVybiBudWxsXG5cdFx0XHRcdGNvbnN0IHRvZGF5ID0gaXNUb2RheShkYXkpXG5cdFx0XHRcdGNvbnN0IGtleSA9IGtleXMuaGVhZGVyLndlZWsuaG91cihkYXksIGNvbC5yZXNvdXJjZUlkID8/ICcnKVxuXG5cdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0PEFuaW1hdGVkU2VjdGlvblxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdFx0J21pbi13LTIwIGZsZXgtMSBib3JkZXItciBsYXN0OmJvcmRlci1yLTAgYm9yZGVyLWIgZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC14cyBzaHJpbmstMCBiZy1iYWNrZ3JvdW5kJyxcblx0XHRcdFx0XHRcdFx0dG9kYXkgJiYgJ2JnLXByaW1hcnkvMTAgZm9udC1ib2xkJ1xuXHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPXtrZXlzLmhlYWRlci5yZXNvdXJjZS50aW1lTGFiZWwoXG5cdFx0XHRcdFx0XHRcdCd3ZWVrJyxcblx0XHRcdFx0XHRcdFx0ZGF5LmZvcm1hdCgnSEgnKVxuXHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdGRlbGF5PXtpbmRleCAqIDAuMDV9XG5cdFx0XHRcdFx0XHRrZXk9e2tleXMubGlzdEtleShrZXksICdhbmltYXRlZCcpfVxuXHRcdFx0XHRcdFx0dHJhbnNpdGlvbktleT17a2V5cy5saXN0S2V5KGtleSwgJ21vdGlvbicpfVxuXHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSB0cnVuY2F0ZSB3LWZ1bGwgdGV4dC1jZW50ZXJcIj5cblx0XHRcdFx0XHRcdFx0e2RheS5mb3JtYXQoJ2RkZCcpfVxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCI+XG5cdFx0XHRcdFx0XHRcdHtkYXkuZm9ybWF0KCdEJyl9XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8L0FuaW1hdGVkU2VjdGlvbj5cblx0XHRcdFx0KVxuXHRcdFx0fSl9XG5cdFx0PC9kaXY+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBSZXNvdXJjZUNlbGwgfSBmcm9tICdAL2NvbXBvbmVudHMvcmVzb3VyY2UtY2VsbCdcbmltcG9ydCB0eXBlIHsgUmVzb3VyY2UgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL3R5cGVzJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUgeyBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IGtleXMgfSBmcm9tICdAL2xpYi91dGlscy9rZXlzJ1xuXG5pbnRlcmZhY2UgUmVzb3VyY2VXZWVrVmVydGljYWxSZXNvdXJjZUhlYWRlclByb3BzIHtcblx0cmVzb3VyY2VzOiBSZXNvdXJjZVtdXG5cdHZpc2libGVEYXlzOiBEYXlqc1tdXG59XG5cbmV4cG9ydCBjb25zdCBSZXNvdXJjZVdlZWtWZXJ0aWNhbFJlc291cmNlSGVhZGVyOiBSZWFjdC5GQzxcblx0UmVzb3VyY2VXZWVrVmVydGljYWxSZXNvdXJjZUhlYWRlclByb3BzXG4+ID0gKHsgcmVzb3VyY2VzIH0pID0+IHtcblx0Y29uc3QgeyB3ZWVrVmlld0dyYW51bGFyaXR5LCB0LCBjdXJyZW50RGF0ZSB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXHRjb25zdCBpc0hvdXJseSA9IHdlZWtWaWV3R3JhbnVsYXJpdHkgPT09ICdob3VybHknXG5cblx0cmV0dXJuIChcblx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggaC0xMlwiPlxuXHRcdFx0PGRpdiBjbGFzc05hbWU9XCJzaHJpbmstMCB3LTE2IGJvcmRlci1yIHotMjAgYmctYmFja2dyb3VuZCBzdGlja3kgbGVmdC0wXCI+XG5cdFx0XHRcdDxzcGFuXG5cdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdCdweC0yIGgtZnVsbCB3LWZ1bGwgZmxleCBmbGV4LWNvbCBqdXN0aWZ5LWNlbnRlciB0ZXh0LXhzIHRleHQtbXV0ZWQtZm9yZWdyb3VuZCB0ZXh0LWNlbnRlciBtaW4tdy0wJyxcblx0XHRcdFx0XHRcdGlzSG91cmx5ID8gJ2p1c3RpZnktZW5kJyA6ICdqdXN0aWZ5LWNlbnRlciBib3JkZXItYidcblx0XHRcdFx0XHQpfVxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwidHJ1bmNhdGUgdy1mdWxsXCI+e3QoJ3dlZWsnKX08L3NwYW4+XG5cdFx0XHRcdFx0eyFpc0hvdXJseSAmJiAoXG5cdFx0XHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJmb250LW1lZGl1bSB0ZXh0LWZvcmVncm91bmQgdHJ1bmNhdGUgdy1mdWxsXCI+XG5cdFx0XHRcdFx0XHRcdHtjdXJyZW50RGF0ZS53ZWVrKCl9XG5cdFx0XHRcdFx0XHQ8L3NwYW4+XG5cdFx0XHRcdFx0KX1cblx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0PC9kaXY+XG5cblx0XHRcdHtyZXNvdXJjZXMubWFwKChyZXNvdXJjZSkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdDxSZXNvdXJjZUNlbGxcblx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cIm1pbi13LTIwIGZsZXgtMSBib3JkZXItYlwiXG5cdFx0XHRcdFx0XHRrZXk9e2tleXMubGlzdEtleSgncmVzb3VyY2UtY2VsbCcsIHJlc291cmNlLmlkKX1cblx0XHRcdFx0XHRcdHJlc291cmNlPXtyZXNvdXJjZX1cblx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHRcdFx0J3N0aWNreSB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRydW5jYXRlJyxcblx0XHRcdFx0XHRcdFx0XHRpc0hvdXJseSA/ICdsZWZ0LTEvNCcgOiAnbGVmdC0xJ1xuXHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHR7cmVzb3VyY2UudGl0bGV9XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8L1Jlc291cmNlQ2VsbD5cblx0XHRcdFx0KVxuXHRcdFx0fSl9XG5cdFx0PC9kaXY+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IGdldFZpZXdIb3VycyB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvdXRpbHMvdmlldy1ob3VycydcbmltcG9ydCB0eXBlIHsgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGtleXMgfSBmcm9tICdAL2xpYi91dGlscy9rZXlzJ1xuaW1wb3J0IHsgdXNlUmVzb3VyY2VXZWVrVmlld0RhdGEgfSBmcm9tICcuLi91c2UtcmVzb3VyY2Utd2Vlay12aWV3LWRhdGEnXG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VSZXNvdXJjZVdlZWtWZXJ0aWNhbERhdGEoKSB7XG5cdGNvbnN0IHtcblx0XHRpc0hvdXJseSxcblx0XHRyZXNvdXJjZXMsXG5cdFx0d2Vla0RheXMsXG5cdFx0dmlzaWJsZURheXMsXG5cdFx0Y3VycmVudERhdGUsXG5cdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRoaWRlTm9uQnVzaW5lc3NIb3Vycyxcblx0XHRyZXNvdXJjZUJ1c2luZXNzSG91cnMsXG5cdH0gPSB1c2VSZXNvdXJjZVdlZWtWaWV3RGF0YSgpXG5cblx0Y29uc3QgZ2V0SG91cnMgPSB1c2VDYWxsYmFjayhcblx0XHQoZGF0ZTogRGF5anMpID0+IHtcblx0XHRcdHJldHVybiBnZXRWaWV3SG91cnMoe1xuXHRcdFx0XHRyZWZlcmVuY2VEYXRlOiBkYXRlLFxuXHRcdFx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdFx0XHRoaWRlTm9uQnVzaW5lc3NIb3Vycyxcblx0XHRcdFx0YWxsRGF0ZXM6IHdlZWtEYXlzLFxuXHRcdFx0XHRyZXNvdXJjZUJ1c2luZXNzSG91cnMsXG5cdFx0XHR9KVxuXHRcdH0sXG5cdFx0W2J1c2luZXNzSG91cnMsIGhpZGVOb25CdXNpbmVzc0hvdXJzLCB3ZWVrRGF5cywgcmVzb3VyY2VCdXNpbmVzc0hvdXJzXVxuXHQpXG5cblx0Y29uc3QgaG91cnMgPSB1c2VNZW1vKCgpID0+IGdldEhvdXJzKGN1cnJlbnREYXRlKSwgW2N1cnJlbnREYXRlLCBnZXRIb3Vyc10pXG5cdGNvbnN0IGhvdXJseUNvbHVtbnMgPSB1c2VNZW1vKFxuXHRcdCgpID0+XG5cdFx0XHRyZXNvdXJjZXMuZmxhdE1hcCgocmVzb3VyY2UpID0+XG5cdFx0XHRcdHZpc2libGVEYXlzLm1hcCgoZGF5KSA9PiAoe1xuXHRcdFx0XHRcdGlkOiBrZXlzLmNvbC5kYXkoZGF5LCByZXNvdXJjZS5pZCksXG5cdFx0XHRcdFx0Y2xhc3NOYW1lOiAnbWluLXctMjAgZmxleC0xJyxcblx0XHRcdFx0XHRyZXNvdXJjZUlkOiByZXNvdXJjZS5pZCxcblx0XHRcdFx0XHRyZXNvdXJjZSxcblx0XHRcdFx0XHRkYXksXG5cdFx0XHRcdFx0ZGF5czogZ2V0SG91cnMoZGF5KSxcblx0XHRcdFx0XHRncmlkVHlwZTogJ2hvdXInIGFzIGNvbnN0LFxuXHRcdFx0XHR9KSlcblx0XHRcdCksXG5cdFx0W3Jlc291cmNlcywgdmlzaWJsZURheXMsIGdldEhvdXJzXVxuXHQpXG5cblx0Ly8gVXNlcyBgd2Vla0RheXNgIChhbGwgNykgaW50ZW50aW9uYWxseSwgbm90IGB2aXNpYmxlRGF5c2AuIE5vbi1jb250aWd1b3VzXG5cdC8vIHZpc2libGUgZGF5cyB3b3VsZCBicmVhayBtdWx0aS1kYXkgZXZlbnQgcG9zaXRpb25pbmcsIHNvIGBoaWRkZW5EYXlzYCBpc1xuXHQvLyBub3Qgc3VwcG9ydGVkIGluIGRhaWx5IGdyYW51bGFyaXR5LlxuXHRjb25zdCBkYWlseUNvbHVtbnMgPSB1c2VNZW1vKFxuXHRcdCgpID0+XG5cdFx0XHRyZXNvdXJjZXMubWFwKChyZXNvdXJjZSkgPT4gKHtcblx0XHRcdFx0aWQ6IGtleXMuY29sLnJlc291cmNlKCd3ZWVrJywgcmVzb3VyY2UuaWQpLFxuXHRcdFx0XHRjbGFzc05hbWU6ICdtaW4tdy0yMCBmbGV4LTEnLFxuXHRcdFx0XHRkYXk6IHVuZGVmaW5lZCxcblx0XHRcdFx0cmVzb3VyY2VJZDogcmVzb3VyY2UuaWQsXG5cdFx0XHRcdHJlc291cmNlLFxuXHRcdFx0XHRkYXlzOiB3ZWVrRGF5cyxcblx0XHRcdFx0Z3JpZFR5cGU6ICdkYXknIGFzIGNvbnN0LFxuXHRcdFx0fSkpLFxuXHRcdFtyZXNvdXJjZXMsIHdlZWtEYXlzXVxuXHQpXG5cblx0Y29uc3QgY29sdW1ucyA9IHVzZU1lbW8oKCkgPT4ge1xuXHRcdGlmIChpc0hvdXJseSkgcmV0dXJuIGhvdXJseUNvbHVtbnNcblx0XHRyZXR1cm4gZGFpbHlDb2x1bW5zXG5cdH0sIFtpc0hvdXJseSwgaG91cmx5Q29sdW1ucywgZGFpbHlDb2x1bW5zXSlcblxuXHRyZXR1cm4geyBob3VycywgY29sdW1ucyB9XG59XG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHsgUmVzb3VyY2VXZWVrSG9yaXpvbnRhbCB9IGZyb20gJy4vaG9yaXpvbnRhbC9yZXNvdXJjZS13ZWVrLWhvcml6b250YWwnXG5pbXBvcnQgeyBSZXNvdXJjZVdlZWtWZXJ0aWNhbCB9IGZyb20gJy4vdmVydGljYWwvcmVzb3VyY2Utd2Vlay12ZXJ0aWNhbCdcblxuZXhwb3J0IGNvbnN0IFJlc291cmNlV2Vla1ZpZXc6IFJlYWN0LkZDID0gKCkgPT4ge1xuXHRjb25zdCB7IG9yaWVudGF0aW9uIH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cblx0aWYgKG9yaWVudGF0aW9uID09PSAndmVydGljYWwnKSB7XG5cdFx0cmV0dXJuIDxSZXNvdXJjZVdlZWtWZXJ0aWNhbCAvPlxuXHR9XG5cblx0cmV0dXJuIDxSZXNvdXJjZVdlZWtIb3Jpem9udGFsIC8+XG59XG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQW5pbWF0ZWRTZWN0aW9uIH0gZnJvbSAnQC9jb21wb25lbnRzL2FuaW1hdGlvbnMvYW5pbWF0ZWQtc2VjdGlvbidcbmltcG9ydCB7IENhbGVuZGFyRG5kQ29udGV4dCB9IGZyb20gJ0AvY29tcG9uZW50cy9kcmFnLWFuZC1kcm9wL2NhbGVuZGFyLWRuZC1jb250ZXh0J1xuaW1wb3J0IHsgRXZlbnRGb3JtRGlhbG9nIH0gZnJvbSAnQC9jb21wb25lbnRzL2V2ZW50LWZvcm0vZXZlbnQtZm9ybS1kaWFsb2cnXG5pbXBvcnQgeyBIZWFkZXIgfSBmcm9tICdAL2NvbXBvbmVudHMvaGVhZGVyJ1xuaW1wb3J0IHsgUmVzb3VyY2VEYXlWaWV3IH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL2RheS12aWV3J1xuaW1wb3J0IHsgUmVzb3VyY2VNb250aFZpZXcgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvbW9udGgtdmlldydcbmltcG9ydCB7IFJlc291cmNlV2Vla1ZpZXcgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvd2Vlay12aWV3J1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VDYWxlbmRhckJvZHk6IFJlYWN0LkZDID0gKCkgPT4ge1xuXHRjb25zdCB7IHZpZXcgfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblxuXHRjb25zdCB2aWV3TWFwOiBSZWNvcmQ8c3RyaW5nLCBSZWFjdC5SZWFjdE5vZGU+ID0ge1xuXHRcdG1vbnRoOiA8UmVzb3VyY2VNb250aFZpZXcga2V5PVwibW9udGhcIiAvPixcblx0XHR3ZWVrOiA8UmVzb3VyY2VXZWVrVmlldyBrZXk9XCJ3ZWVrXCIgLz4sXG5cdFx0ZGF5OiA8UmVzb3VyY2VEYXlWaWV3IGtleT1cImRheVwiIC8+LFxuXHR9XG5cblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIHctZnVsbCBoLWZ1bGxcIlxuXHRcdFx0ZGF0YS10ZXN0aWQ9XCJpbGFteS1yZXNvdXJjZS1jYWxlbmRhclwiXG5cdFx0PlxuXHRcdFx0PEhlYWRlciBjbGFzc05hbWU9XCJwLTFcIiAvPlxuXG5cdFx0XHR7LyogQ2FsZW5kYXIgQm9keSB3aXRoIEFuaW1hdGVkU2VjdGlvbiBmb3IgdmlldyB0cmFuc2l0aW9ucyAqL31cblx0XHRcdDxDYWxlbmRhckRuZENvbnRleHQ+XG5cdFx0XHRcdDxBbmltYXRlZFNlY3Rpb25cblx0XHRcdFx0XHRjbGFzc05hbWU9XCJ3LWZ1bGwgaC1bY2FsYygxMDAlLTMuNXJlbSldIEBjb250YWluZXIvY2FsZW5kYXItYm9keVwiXG5cdFx0XHRcdFx0ZGlyZWN0aW9uPVwiaG9yaXpvbnRhbFwiXG5cdFx0XHRcdFx0dHJhbnNpdGlvbktleT17dmlld31cblx0XHRcdFx0PlxuXHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiYm9yZGVyIGgtZnVsbCB3LWZ1bGxcIiBkYXRhLXRlc3RpZD1cImNhbGVuZGFyLWJvZHlcIj5cblx0XHRcdFx0XHRcdHt2aWV3TWFwW3ZpZXddfVxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8L0FuaW1hdGVkU2VjdGlvbj5cblx0XHRcdDwvQ2FsZW5kYXJEbmRDb250ZXh0PlxuXG5cdFx0XHR7LyogRXZlbnQgRm9ybSBEaWFsb2cgKi99XG5cdFx0XHQ8RXZlbnRGb3JtRGlhbG9nIC8+XG5cdFx0PC9kaXY+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgeyBSZXNvdXJjZUNhbGVuZGFyUHJvdmlkZXIgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbnRleHRzL3Jlc291cmNlLWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSB7XG5cdElsYW15UmVzb3VyY2VDYWxlbmRhclByb3BFdmVudCxcblx0SWxhbXlSZXNvdXJjZUNhbGVuZGFyUHJvcHMsXG59IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvdHlwZXMnXG5pbXBvcnQge1xuXHREQVlfTUFYX0VWRU5UU19ERUZBVUxULFxuXHRFVkVOVF9CQVJfSEVJR0hULFxuXHRHQVBfQkVUV0VFTl9FTEVNRU5UUyxcblx0V0VFS19EQVlTX05VTUJFUl9NQVAsXG59IGZyb20gJ0AvbGliL2NvbnN0YW50cydcbmltcG9ydCB7IG5vcm1hbGl6ZUV2ZW50cywgc2FmZURhdGUsIHRvSGlkZGVuRGF5c1NldCB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgUmVzb3VyY2VDYWxlbmRhckJvZHkgfSBmcm9tICcuL3Jlc291cmNlLWNhbGVuZGFyLWJvZHknXG5cbmV4cG9ydCBjb25zdCBJbGFteVJlc291cmNlQ2FsZW5kYXI6IFJlYWN0LkZDPElsYW15UmVzb3VyY2VDYWxlbmRhclByb3BzPiA9ICh7XG5cdGV2ZW50cyA9IFtdLFxuXHRyZXNvdXJjZXMgPSBbXSxcblx0Zmlyc3REYXlPZldlZWsgPSAnc3VuZGF5Jyxcblx0aW5pdGlhbFZpZXcgPSAnbW9udGgnLFxuXHRpbml0aWFsRGF0ZSxcblx0ZGlzYWJsZURyYWdBbmREcm9wID0gZmFsc2UsXG5cdGRheU1heEV2ZW50cyA9IERBWV9NQVhfRVZFTlRTX0RFRkFVTFQsXG5cdHRpbWVGb3JtYXQgPSAnMTItaG91cicsXG5cdGV2ZW50U3BhY2luZyA9IEdBUF9CRVRXRUVOX0VMRU1FTlRTLFxuXHRldmVudEhlaWdodCA9IEVWRU5UX0JBUl9IRUlHSFQsXG5cdGhpZGRlbkRheXMsXG5cdC4uLnByb3BzXG59KSA9PiB7XG5cdHJldHVybiAoXG5cdFx0PFJlc291cmNlQ2FsZW5kYXJQcm92aWRlclxuXHRcdFx0ZGF5TWF4RXZlbnRzPXtkYXlNYXhFdmVudHN9XG5cdFx0XHRkaXNhYmxlRHJhZ0FuZERyb3A9e2Rpc2FibGVEcmFnQW5kRHJvcH1cblx0XHRcdGV2ZW50SGVpZ2h0PXtldmVudEhlaWdodH1cblx0XHRcdGV2ZW50U3BhY2luZz17ZXZlbnRTcGFjaW5nfVxuXHRcdFx0ZXZlbnRzPXtub3JtYWxpemVFdmVudHM8SWxhbXlSZXNvdXJjZUNhbGVuZGFyUHJvcEV2ZW50LCBDYWxlbmRhckV2ZW50Pihcblx0XHRcdFx0ZXZlbnRzXG5cdFx0XHQpfVxuXHRcdFx0Zmlyc3REYXlPZldlZWs9e1dFRUtfREFZU19OVU1CRVJfTUFQW2ZpcnN0RGF5T2ZXZWVrXX1cblx0XHRcdGhpZGRlbkRheXM9e3RvSGlkZGVuRGF5c1NldChoaWRkZW5EYXlzKX1cblx0XHRcdGluaXRpYWxEYXRlPXtzYWZlRGF0ZShpbml0aWFsRGF0ZSl9XG5cdFx0XHRpbml0aWFsVmlldz17aW5pdGlhbFZpZXd9XG5cdFx0XHRyZXNvdXJjZXM9e3Jlc291cmNlc31cblx0XHRcdHRpbWVGb3JtYXQ9e3RpbWVGb3JtYXR9XG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0PlxuXHRcdFx0PFJlc291cmNlQ2FsZW5kYXJCb2R5IC8+XG5cdFx0PC9SZXNvdXJjZUNhbGVuZGFyUHJvdmlkZXI+XG5cdClcbn1cbiIKICBdLAogICJtYXBwaW5ncyI6ICJBQUVBLGdCQUFTLGVDRlQsMEJBQ0MsYUFFQSxzQkNGRCxlQUFTLGNBQ1Qsa0JBQVMsd0JDRFQsc0JBQ0EsMENBQ0EsOENBQ0EsK0NBQ0EsMkNBQ0EsZ0RBQ0EsdUNBQ0EseUNBQ0Esb0NBQ0Esd0NBQ0EsMkNBYUEsSUFBSSxHQUVFLEdBQWdDLENBQUMsRUFBUyxFQUFZLElBQWlCLENBQzVFLElBQU0sRUFBUSxFQUFXLFVBR25CLEVBQXFCLEVBQWEsR0FBRyxXQUMzQyxFQUFhLEdBQUcsV0FBYSxDQUFDLElBQXNCLENBRW5ELE9BREEsR0FBa0IsRUFDWCxFQUFtQixDQUFRLEdBSW5DLElBQThCLFFBQXhCLEVBQ3NCLE1BQXRCLEdBQWdCLEVBRXRCLFNBQVMsQ0FBZSxDQUN2QixFQUNBLEVBQ2MsQ0FDZCxJQUFNLEVBQU0sRUFBMkIsSUFBSSxXQUFhLEdBQ3hELEdBQUksQ0FBQyxFQUFJLE9BQU8sRUFFaEIsSUFBTSxFQUFpQixFQUNyQixHQUFHLEVBQU8sT0FBTyxxQkFBcUIsRUFBRyxDQUFFLEVBQzNDLFVBQVUsRUFDWixHQUFJLEVBQU8sVUFBVSxJQUFNLEVBQzFCLE9BQU8sRUFBTyxHQUFHLEVBQUksRUFBSSxFQUUxQixPQUFPLEVBS1IsRUFBTSxRQUFVLFFBQVMsQ0FBQyxFQUF1QixFQUFvQixDQUNwRSxJQUFNLEVBQVMsRUFBZ0IsS0FBSyxLQUFNLEVBQU0sQ0FBUSxFQUN4RCxPQUFPLEVBQWdCLEtBQU0sQ0FBTSxHQUlwQyxFQUFNLE1BQVEsR0FJZixHQUFNLE9BQU8sRUFBTyxFQUNwQixHQUFNLE9BQU8sRUFBVSxFQUN2QixHQUFNLE9BQU8sRUFBYSxFQUMxQixHQUFNLE9BQU8sRUFBYyxFQUMzQixHQUFNLE9BQU8sRUFBUyxFQUN0QixHQUFN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LE9BQVMsTUFBTyxFQUM5QyxRQUFTLENBQUMsRUFBVSxHQUFHLENBQU8sRUFDOUIsY0FBWSxnQkFDWixTQUFVLEVBQVcsT0FBUyxNQUM5QixvQkFBcUIsRUFOdEIsU0FRQyxHQU1FLE1BTkYsQ0FBSyxVQUFVLHVCQUFmLFNBTUUsQ0FMRCxHQUFDLEdBQUQsQ0FDQyxVQUFXLEVBQ1gsWUFBYSxFQUNkLEVBQ0MsR0FBWSxHQUFDLEdBQUQsQ0FBK0IsUUFBUyxFQUFTLEdBQzdELEVBQ0QsNENJMUVHLElBQU0sR0FBNkIsSUFBTSxDQUMvQyxJQUFRLGVBQWdCLEVBQXdCLEVBRWhELEdBQUksSUFBZ0IsV0FDbkIsT0FBTyxHQUFDLEdBQUQsRUFBc0IsRUFHOUIsT0FBTyxHQUFDLEdBQUQsRUFBd0IsdURDRnpCLElBQU0sR0FBaUMsSUFBTSxDQUNuRCxJQUFRLFFBQVMsRUFBd0IsRUFRekMsT0FDQyxHQXFCRSxNQXJCRixDQUNDLFVBQVUsOEJBQ1YsY0FBWSwwQkFGYixTQXFCRSxDQWpCRCxHQUFDLEdBQUQsQ0FBUSxVQUFVLE1BQU0sRUFHeEIsR0FVRSxHQVZGLFVBQ0MsR0FRRSxFQVJGLENBQ0MsVUFBVSx3REFDVixVQUFVLGFBQ1YsY0FBZSxFQUhoQixTQUtDLEdBRUUsTUFGRixDQUFLLFVBQVUsdUJBQXVCLGNBQVksZ0JBQWxELFNBcEI2QyxDQUNoRCxNQUFPLEdBQUMsR0FBRCxHQUF1QixPQUFRLEVBQ3RDLEtBQU0sR0FBQyxHQUFELEdBQXNCLE1BQU8sRUFDbkMsSUFBSyxHQUFDLEdBQUQsR0FBcUIsS0FBTSxDQUNqQyxFQWlCYyxHQUNSLEVBQ0QsRUFDRCxFQUdGLEdBQUMsR0FBRCxFQUFpQixHQUNoQiw0Q0N6QkcsSUFBTSxHQUE4RCxFQUMxRSxTQUFTLENBQUMsRUFDVixZQUFZLENBQUMsRUFDYixpQkFBaUIsU0FDakIsY0FBYyxRQUNkLGNBQ0EscUJBQXFCLEdBQ3JCLGVBQWUsR0FDZixhQUFhLFVBQ2IsZUFBZSxHQUNmLGNBQWMsR0FDZCxnQkFDRyxLQUNFLENBQ0wsT0FDQyxHQWlCRSxHQWpCRixDQUNDLGFBQWMsRUFDZCxtQkFBb0IsRUFDcEIsWUFBYSxFQUNiLGFBQWMsRUFDZCxPQUFRLEdBQ1AsQ0FDRCxFQUNBLGVBQWdCLEdBQXFCLEdBQ3JDLFdBQVksR0FBZ0IsQ0FBVSxFQUN0QyxZQUFhLEdBQVMsQ0FBVyxFQUNqQyxZQUFhLEVBQ2IsVUFBVyxFQUNYLFdBQVksS0FDUixFQWRMLFNBZ0JDLEdBQUMsR0FBRCxFQUFzQixFQUNyQiIsCiAgImRlYnVnSWQiOiAiODJCRjcyNEY3RDIwNUVGRTY0NzU2RTIxNjQ3NTZFMjEiLAogICJuYW1lcyI6IFtdCn0=
|
|
6
|
+
//# debugId=E3405ED10124047A64756E2164756E21
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL2luZGV4LnRzIiwgInNyYy9jb21wb25lbnRzL2FuaW1hdGlvbnMvYW5pbWF0ZWQtc2VjdGlvbi50c3giLCAic3JjL2xpYi91dGlscy9pbmRleC50cyIsICJzcmMvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnLnRzIiwgInNyYy9saWIvY29uc3RhbnRzLnRzIiwgInNyYy9jb21wb25lbnRzL2RyYWctYW5kLWRyb3AvY2FsZW5kYXItZG5kLWNvbnRleHQudHN4IiwgInNyYy9jb21wb25lbnRzL3VpL2J1dHRvbi50c3giLCAic3JjL2NvbXBvbmVudHMvdWkvZGlhbG9nLnRzeCIsICJzcmMvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQudHMiLCAic3JjL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvY29udGV4dC50cyIsICJzcmMvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29udGV4dHMvcmVzb3VyY2UtY2FsZW5kYXItY29udGV4dC9jb250ZXh0LnRzIiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb250ZXh0cy9yZXNvdXJjZS1jYWxlbmRhci1jb250ZXh0L3Byb3ZpZGVyLnRzeCIsICJzcmMvaG9va3MvdXNlLWNhbGVuZGFyLWVuZ2luZS50cyIsICJzcmMvZmVhdHVyZXMvcmVjdXJyZW5jZS91dGlscy9yZWN1cnJlbmNlLWhhbmRsZXIudHMiLCAic3JjL2xpYi90cmFuc2xhdGlvbnMvZGVmYXVsdC50cyIsICJzcmMvbGliL3V0aWxzL2RhdGUtdXRpbHMudHMiLCAic3JjL2xpYi91dGlscy9ldmVudC11dGlscy50cyIsICJzcmMvZmVhdHVyZXMvcmVjdXJyZW5jZS9jb21wb25lbnRzL3JlY3VycmVuY2UtZWRpdC1kaWFsb2cvcmVjdXJyZW5jZS1lZGl0LWRpYWxvZy50c3giLCAic3JjL2NvbXBvbmVudHMvZHJhZy1hbmQtZHJvcC9kbmQtdXRpbHMudHMiLCAic3JjL2NvbXBvbmVudHMvZHJhZy1hbmQtZHJvcC9ldmVudC1kcmFnLW92ZXJsYXkudHN4IiwgInNyYy9jb21wb25lbnRzL2V2ZW50LWZvcm0vZXZlbnQtZm9ybS50c3giLCAic3JjL2NvbXBvbmVudHMvdWkvY2hlY2tib3gudHN4IiwgInNyYy9jb21wb25lbnRzL3VpL2RhdGUtcGlja2VyLnRzeCIsICJzcmMvY29tcG9uZW50cy91aS9jYWxlbmRhci50c3giLCAic3JjL2NvbXBvbmVudHMvdWkvcG9wb3Zlci50c3giLCAic3JjL2NvbXBvbmVudHMvdWkvaW5wdXQudHN4IiwgInNyYy9jb21wb25lbnRzL3VpL2xhYmVsLnRzeCIsICJzcmMvY29tcG9uZW50cy91aS9zY3JvbGwtYXJlYS50c3giLCAic3JjL2NvbXBvbmVudHMvdWkvdGltZS1waWNrZXIudHN4IiwgInNyYy9ob29rcy91c2UtYXV0b2NvbXBsZXRlLXRpbWVwaWNrZXIudHMiLCAic3JjL2xpYi91dGlscy9rZXlzLnRzIiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci91dGlscy9idXNpbmVzcy1ob3Vycy50cyIsICJzcmMvZmVhdHVyZXMvY2FsZW5kYXIvdXRpbHMvZXZlbnQtZm9ybS11dGlscy50cyIsICJzcmMvZmVhdHVyZXMvcmVjdXJyZW5jZS9jb21wb25lbnRzL3JlY3VycmVuY2UtZWRpdG9yL3JlY3VycmVuY2UtZWRpdG9yLnRzeCIsICJzcmMvY29tcG9uZW50cy91aS9jYXJkLnRzeCIsICJzcmMvY29tcG9uZW50cy91aS9zZWxlY3QudHN4IiwgInNyYy9mZWF0dXJlcy9yZWN1cnJlbmNlL2hvb2tzL3VzZVJlY3VycmluZ0V2ZW50QWN0aW9ucy50cyIsICJzcmMvaG9va3MvdXNlLWVmZmVjdGl2ZS1idXNpbmVzcy1ob3Vycy50cyIsICJzcmMvY29tcG9uZW50cy9ldmVudC1mb3JtL2V2ZW50LWZvcm0tZGlhbG9nLnRzeCIsICJzcmMvY29tcG9uZW50cy9oZWFkZXIvYmFzZS1oZWFkZXIudHN4IiwgInNyYy9saWIvdXRpbHMvZXhwb3J0LWljYWwudHMiLCAic3JjL2NvbXBvbmVudHMvaGVhZGVyL3RpdGxlLWNvbnRlbnQudHN4IiwgInNyYy9ob29rcy91c2UtZGF0ZS10aW1lLWZvcm1hdHRlcnMudHMiLCAic3JjL2NvbXBvbmVudHMvaGVhZGVyL3ZpZXctY29udHJvbHMudHN4IiwgInNyYy9jb21wb25lbnRzL2FsbC1kYXktcm93L2FsbC1kYXktcm93LnRzeCIsICJzcmMvY29tcG9uZW50cy9ob3Jpem9udGFsLWdyaWQvaG9yaXpvbnRhbC1ncmlkLXJvdy50c3giLCAic3JjL2ZlYXR1cmVzL2NhbGVuZGFyL2hvb2tzL3VzZVByb2Nlc3NlZFdlZWtFdmVudHMudHMiLCAic3JjL2xpYi91dGlscy9wb3NpdGlvbi13ZWVrLWV2ZW50cy50cyIsICJzcmMvY29tcG9uZW50cy9ncmlkLWNlbGwudHN4IiwgInNyYy9jb21wb25lbnRzL2RheS1udW1iZXIudHN4IiwgInNyYy9jb21wb25lbnRzL2FsbC1ldmVudHMtZGlhbG9nLnRzeCIsICJzcmMvY29tcG9uZW50cy9kcmFnZ2FibGUtZXZlbnQvZHJhZ2dhYmxlLWV2ZW50LnRzeCIsICJzcmMvY29tcG9uZW50cy9kcm9wcGFibGUtY2VsbC50c3giLCAic3JjL2NvbXBvbmVudHMvcmVzb3VyY2UtY2VsbC50c3giLCAic3JjL2NvbXBvbmVudHMvaG9yaXpvbnRhbC1ncmlkL2hvcml6b250YWwtZ3JpZC1ldmVudHMtbGF5ZXIudHN4IiwgInNyYy9jb21wb25lbnRzL2N1cnJlbnQtdGltZS1pbmRpY2F0b3IudHN4IiwgInNyYy9jb21wb25lbnRzL2FsbC1kYXktcm93L2FsbC1kYXktY2VsbC50c3giLCAic3JjL2NvbXBvbmVudHMvaG91ci1sYWJlbC9ob3VyLWxhYmVsLnRzeCIsICJzcmMvY29tcG9uZW50cy92ZXJ0aWNhbC1ncmlkL3ZlcnRpY2FsLWdyaWQudHN4IiwgInNyYy9jb21wb25lbnRzL3ZlcnRpY2FsLWdyaWQvdXNlLXNjcm9sbC10by10aW1lLnRzIiwgInNyYy9jb21wb25lbnRzL3ZlcnRpY2FsLWdyaWQvdmVydGljYWwtZ3JpZC1jb2wudHN4IiwgInNyYy9jb21wb25lbnRzL3ZlcnRpY2FsLWdyaWQvdmVydGljYWwtZ3JpZC1ldmVudHMtbGF5ZXIudHN4IiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci9ob29rcy91c2VQcm9jZXNzZWREYXlFdmVudHMudHMiLCAic3JjL2xpYi91dGlscy9wb3NpdGlvbi1kYXktZXZlbnRzLnRzIiwgInNyYy9jb21wb25lbnRzL3ZlcnRpY2FsLWdyaWQvdmVydGljYWwtZ3JpZC1oZWFkZXItY29udGFpbmVyLnRzeCIsICJzcmMvZmVhdHVyZXMvY2FsZW5kYXIvdXRpbHMvdmlldy1ob3Vycy50cyIsICJzcmMvZmVhdHVyZXMvY2FsZW5kYXIvY29tcG9uZW50cy9kYXktdmlldy9kYXktdmlldy50c3giLCAic3JjL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbXBvbmVudHMvbW9udGgtdmlldy9tb250aC12aWV3LnRzeCIsICJzcmMvY29tcG9uZW50cy9ob3Jpem9udGFsLWdyaWQvaG9yaXpvbnRhbC1ncmlkLnRzeCIsICJzcmMvY29tcG9uZW50cy9ob3Jpem9udGFsLWdyaWQvaG9yaXpvbnRhbC1ncmlkLWhlYWRlci1jb250YWluZXIudHN4IiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci9jb21wb25lbnRzL21vbnRoLXZpZXcvbW9udGgtaGVhZGVyLnRzeCIsICJzcmMvZmVhdHVyZXMvY2FsZW5kYXIvY29tcG9uZW50cy93ZWVrLXZpZXcvd2Vlay12aWV3LnRzeCIsICJzcmMvZmVhdHVyZXMvY2FsZW5kYXIvY29tcG9uZW50cy95ZWFyLXZpZXcveWVhci12aWV3LnRzeCIsICJzcmMvZmVhdHVyZXMvY2FsZW5kYXIvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9wcm92aWRlci50c3giLCAic3JjL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbXBvbmVudHMvaWxhbXktY2FsZW5kYXIudHN4IiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL3Jlc291cmNlLWV2ZW50LWdyaWQudHN4IiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL3RpbWUtaGVhZGVyLXJvdy50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvZGF5LXZpZXcvcmVzb3VyY2UtZGF5LWhvcml6b250YWwudHN4IiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL2RheS12aWV3L3Jlc291cmNlLWRheS12ZXJ0aWNhbC50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvZGF5LXZpZXcvaW5kZXgudHN4IiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL21vbnRoLXZpZXcvcmVzb3VyY2UtbW9udGgtaG9yaXpvbnRhbC50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvbW9udGgtdmlldy9yZXNvdXJjZS1tb250aC12ZXJ0aWNhbC50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvbW9udGgtdmlldy9pbmRleC50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvd2Vlay12aWV3L3VzZS1yZXNvdXJjZS13ZWVrLXZpZXctZGF0YS50cyIsICJzcmMvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy93ZWVrLXZpZXcvaG9yaXpvbnRhbC9yZXNvdXJjZS13ZWVrLWhvcml6b250YWwtZGF5LWhlYWRlci50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvd2Vlay12aWV3L2hvcml6b250YWwvdXNlLXJlc291cmNlLXdlZWstaG9yaXpvbnRhbC1kYXRhLnRzIiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL3dlZWstdmlldy9ob3Jpem9udGFsL3Jlc291cmNlLXdlZWstaG9yaXpvbnRhbC50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvd2Vlay12aWV3L3ZlcnRpY2FsL3Jlc291cmNlLXdlZWstdmVydGljYWwudHN4IiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL3dlZWstdmlldy92ZXJ0aWNhbC9yZXNvdXJjZS13ZWVrLXZlcnRpY2FsLWRheS1oZWFkZXIudHN4IiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL3dlZWstdmlldy92ZXJ0aWNhbC9yZXNvdXJjZS13ZWVrLXZlcnRpY2FsLXJlc291cmNlLWhlYWRlci50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvd2Vlay12aWV3L3ZlcnRpY2FsL3VzZS1yZXNvdXJjZS13ZWVrLXZlcnRpY2FsLWRhdGEudHMiLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvd2Vlay12aWV3L2luZGV4LnRzeCIsICJzcmMvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy9pbGFteS1yZXNvdXJjZS1jYWxlbmRhci9yZXNvdXJjZS1jYWxlbmRhci1ib2R5LnRzeCIsICJzcmMvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy9pbGFteS1yZXNvdXJjZS1jYWxlbmRhci9pbGFteS1yZXNvdXJjZS1jYWxlbmRhci50c3giXSwKICAic291cmNlc0NvbnRlbnQiOiBbCiAgICAiLy8gUmUtZXhwb3J0IHJydWxlLmpzIHR5cGVzIGZvciBjb252ZW5pZW5jZVxuZXhwb3J0IHR5cGUgeyBXZWVrZGF5IH0gZnJvbSAncnJ1bGUnXG5leHBvcnQgeyBSUnVsZSB9IGZyb20gJ3JydWxlJ1xuZXhwb3J0IHR5cGUgeyBFdmVudEZvcm1Qcm9wcyB9IGZyb20gJy4vY29tcG9uZW50cy9ldmVudC1mb3JtL2V2ZW50LWZvcm0nXG5leHBvcnQgdHlwZSB7IEJ1c2luZXNzSG91cnMsIENhbGVuZGFyRXZlbnQsIFdlZWtEYXlzIH0gZnJvbSAnLi9jb21wb25lbnRzL3R5cGVzJ1xuZXhwb3J0IHsgSWxhbXlDYWxlbmRhciB9IGZyb20gJy4vZmVhdHVyZXMvY2FsZW5kYXIvY29tcG9uZW50cy9pbGFteS1jYWxlbmRhcidcbmV4cG9ydCB0eXBlIHtcblx0Q2VsbEluZm8sXG5cdElsYW15Q2FsZW5kYXJQcm9wcyxcblx0UmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3JQcm9wcyxcblx0U2xvdER1cmF0aW9uLFxufSBmcm9tICcuL2ZlYXR1cmVzL2NhbGVuZGFyL3R5cGVzJ1xuLy8gRXhwb3J0IHR5cGVzXG5leHBvcnQgdHlwZSB7IFJSdWxlT3B0aW9ucyB9IGZyb20gJy4vZmVhdHVyZXMvcmVjdXJyZW5jZS90eXBlcydcbi8vIFJSVUxFLWJhc2VkIHJlY3VycmVuY2Ugc3lzdGVtXG5leHBvcnQge1xuXHRnZW5lcmF0ZVJlY3VycmluZ0V2ZW50cyxcblx0aXNSZWN1cnJpbmdFdmVudCxcbn0gZnJvbSAnLi9mZWF0dXJlcy9yZWN1cnJlbmNlL3V0aWxzL3JlY3VycmVuY2UtaGFuZGxlcidcbmV4cG9ydCB0eXBlIHsgSWxhbXlSZXNvdXJjZUNhbGVuZGFyUHJvcHMgfSBmcm9tICcuL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvaWxhbXktcmVzb3VyY2UtY2FsZW5kYXInXG5leHBvcnQgeyBJbGFteVJlc291cmNlQ2FsZW5kYXIgfSBmcm9tICcuL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvaWxhbXktcmVzb3VyY2UtY2FsZW5kYXIvaWxhbXktcmVzb3VyY2UtY2FsZW5kYXInXG4vLyBSZXNvdXJjZSBjYWxlbmRhciB0eXBlc1xuZXhwb3J0IHR5cGUgeyBSZXNvdXJjZSB9IGZyb20gJy4vZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvdHlwZXMnXG4vLyBQdWJsaWMgY2FsZW5kYXIgY29udGV4dCBob29rc1xuZXhwb3J0IHtcblx0dHlwZSBVc2VJbGFteUNhbGVuZGFyQ29udGV4dFJldHVybixcblx0dXNlSWxhbXlDYWxlbmRhckNvbnRleHQsXG59IGZyb20gJy4vaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5leHBvcnQgeyBkZWZhdWx0VHJhbnNsYXRpb25zIH0gZnJvbSAnLi9saWIvdHJhbnNsYXRpb25zL2RlZmF1bHQnXG4vLyBUcmFuc2xhdGlvbiBzeXN0ZW1cbmV4cG9ydCB0eXBlIHtcblx0VHJhbnNsYXRpb25LZXksXG5cdFRyYW5zbGF0aW9ucyxcblx0VHJhbnNsYXRvckZ1bmN0aW9uLFxufSBmcm9tICcuL2xpYi90cmFuc2xhdGlvbnMvdHlwZXMnXG5leHBvcnQgdHlwZSB7IENhbGVuZGFyVmlldywgVGltZUZvcm1hdCB9IGZyb20gJy4vdHlwZXMnXG4iLAogICAgImltcG9ydCB7XG5cdEFuaW1hdGVQcmVzZW5jZSxcblx0dHlwZSBIVE1MTW90aW9uUHJvcHMsXG5cdG1vdGlvbixcblx0dHlwZSBWYXJpYW50cyxcbn0gZnJvbSAnbW90aW9uL3JlYWN0J1xuaW1wb3J0IHR5cGUgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmludGVyZmFjZSBBbmltYXRlZFNlY3Rpb25Qcm9wc1xuXHRleHRlbmRzIE9taXQ8SFRNTE1vdGlvblByb3BzPCdkaXYnPiwgJ2NoaWxkcmVuJyB8ICdsYXlvdXQnIHwgJ2xheW91dElkJz4ge1xuXHRjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlXG5cdHRyYW5zaXRpb25LZXk6IHN0cmluZ1xuXHRkZWxheT86IG51bWJlclxuXHRjbGFzc05hbWU/OiBzdHJpbmdcblx0ZGlyZWN0aW9uPzogJ3ZlcnRpY2FsJyB8ICdob3Jpem9udGFsJ1xuXHRsYXlvdXQ/OiBib29sZWFuIHwgJ3Bvc2l0aW9uJyB8ICdzaXplJyB8ICdwcmVzZXJ2ZS1hc3BlY3QnXG5cdGxheW91dElkPzogc3RyaW5nXG5cdCdkYXRhLXRlc3RpZCc/OiBzdHJpbmdcbn1cblxuY29uc3QgdmFyaWFudHM6IFZhcmlhbnRzID0ge1xuXHRoaWRkZW46ICh7IGRpcmVjdGlvbiB9OiB7IGRpcmVjdGlvbjogJ3ZlcnRpY2FsJyB8ICdob3Jpem9udGFsJyB9KSA9PiAoe1xuXHRcdG9wYWNpdHk6IDAsXG5cdFx0eDogZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgPyAxMCA6IDAsXG5cdFx0eTogZGlyZWN0aW9uID09PSAndmVydGljYWwnID8gLTEwIDogMCxcblx0fSksXG5cdHZpc2libGU6ICh7IGRlbGF5IH06IHsgZGVsYXk6IG51bWJlciB9KSA9PiAoe1xuXHRcdG9wYWNpdHk6IDEsXG5cdFx0eDogMCxcblx0XHR5OiAwLFxuXHRcdHRyYW5zaXRpb246IHsgZHVyYXRpb246IDAuMiwgZWFzZTogWzAuNCwgMCwgMC4yLCAxXSwgZGVsYXkgfSxcblx0fSksXG5cdGV4aXQ6ICh7IGRpcmVjdGlvbiB9OiB7IGRpcmVjdGlvbjogJ3ZlcnRpY2FsJyB8ICdob3Jpem9udGFsJyB9KSA9PiAoe1xuXHRcdG9wYWNpdHk6IDAsXG5cdFx0eDogZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgPyAtMTAgOiAwLFxuXHRcdHk6IGRpcmVjdGlvbiA9PT0gJ3ZlcnRpY2FsJyA/IC0xMCA6IDAsXG5cdFx0dHJhbnNpdGlvbjogeyBkdXJhdGlvbjogMC4xNSB9LFxuXHR9KSxcbn1cblxuZXhwb3J0IGNvbnN0IEFuaW1hdGVkU2VjdGlvbjogUmVhY3QuRkM8QW5pbWF0ZWRTZWN0aW9uUHJvcHM+ID0gKHtcblx0Y2hpbGRyZW4sXG5cdHRyYW5zaXRpb25LZXksXG5cdGRlbGF5ID0gMCxcblx0Y2xhc3NOYW1lLFxuXHRkaXJlY3Rpb24gPSAndmVydGljYWwnLFxuXHRsYXlvdXQsXG5cdGxheW91dElkLFxuXHQnZGF0YS10ZXN0aWQnOiB0ZXN0SWQsXG5cdHJlZixcblx0Li4ucHJvcHNcbn0pID0+IChcblx0PEFuaW1hdGVQcmVzZW5jZSBtb2RlPVwid2FpdFwiPlxuXHRcdDxtb3Rpb24uZGl2XG5cdFx0XHRhbmltYXRlPVwidmlzaWJsZVwiXG5cdFx0XHRjbGFzc05hbWU9e2NuKCdpbmxpbmUtYmxvY2sgdy1mdWxsJywgY2xhc3NOYW1lKX1cblx0XHRcdGN1c3RvbT17eyBkZWxheSwgZGlyZWN0aW9uIH19XG5cdFx0XHRkYXRhLXRlc3RpZD17dGVzdElkfVxuXHRcdFx0ZXhpdD1cImV4aXRcIlxuXHRcdFx0aW5pdGlhbD1cImhpZGRlblwiXG5cdFx0XHRrZXk9e3RyYW5zaXRpb25LZXl9XG5cdFx0XHRsYXlvdXQ9e2xheW91dH1cblx0XHRcdGxheW91dElkPXtsYXlvdXRJZH1cblx0XHRcdHJlZj17cmVmfVxuXHRcdFx0dmFyaWFudHM9e3ZhcmlhbnRzfVxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdD5cblx0XHRcdHtjaGlsZHJlbn1cblx0XHQ8L21vdGlvbi5kaXY+XG5cdDwvQW5pbWF0ZVByZXNlbmNlPlxuKVxuXG5BbmltYXRlZFNlY3Rpb24uZGlzcGxheU5hbWUgPSAnQW5pbWF0ZWRTZWN0aW9uJ1xuIiwKICAgICJpbXBvcnQgdHlwZSB7IENsYXNzVmFsdWUgfSBmcm9tICdjbHN4J1xuaW1wb3J0IHsgY2xzeCB9IGZyb20gJ2Nsc3gnXG5pbXBvcnQgeyB0d01lcmdlIH0gZnJvbSAndGFpbHdpbmQtbWVyZ2UnXG5pbXBvcnQgdHlwZSB7IFdlZWtEYXlzIH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IGRheWpzLCB7IHR5cGUgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IFdFRUtfREFZU19OVU1CRVJfTUFQIH0gZnJvbSAnQC9saWIvY29uc3RhbnRzJ1xuXG5leHBvcnQgZnVuY3Rpb24gY24oLi4uaW5wdXRzOiBDbGFzc1ZhbHVlW10pIHtcblx0cmV0dXJuIHR3TWVyZ2UoY2xzeChpbnB1dHMpKVxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9wdGlvbmFsIFdlZWtEYXlzW10gbGlzdCBpbnRvIGEgU2V0PG51bWJlcj4gb2YgZGF5IGluZGljZXNcbiAqICgwID0gU3VuZGF5LCAxID0gTW9uZGF5LCAuLi4pLCBvciB1bmRlZmluZWQgaWYgdGhlIGxpc3QgaXMgZW1wdHkuXG4gKi9cbmV4cG9ydCBjb25zdCB0b0hpZGRlbkRheXNTZXQgPSAoXG5cdGhpZGRlbkRheXM/OiBXZWVrRGF5c1tdXG4pOiBTZXQ8bnVtYmVyPiB8IHVuZGVmaW5lZCA9PiB7XG5cdGlmICghaGlkZGVuRGF5cyB8fCBoaWRkZW5EYXlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHVuZGVmaW5lZFxuXHRyZXR1cm4gbmV3IFNldChoaWRkZW5EYXlzLm1hcCgoZGF5KSA9PiBXRUVLX0RBWVNfTlVNQkVSX01BUFtkYXldKSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNhZmVEYXRlKFxuXHRkYXRlOiBEYXlqcyB8IERhdGUgfCBzdHJpbmcgfCB1bmRlZmluZWRcbik6IERheWpzIHwgdW5kZWZpbmVkIHtcblx0aWYgKGRhdGUgPT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiB1bmRlZmluZWRcblx0fVxuXHRpZiAoZGF5anMuaXNEYXlqcyhkYXRlKSkge1xuXHRcdHJldHVybiBkYXRlXG5cdH1cblx0Y29uc3QgcGFyc2VkRGF0ZSA9IGRheWpzKGRhdGUpXG5cdHJldHVybiBwYXJzZWREYXRlLmlzVmFsaWQoKSA/IHBhcnNlZERhdGUgOiB1bmRlZmluZWRcbn1cblxuZXhwb3J0IGNvbnN0IG9taXRLZXlzID0gPFQgZXh0ZW5kcyBvYmplY3QsIEsgZXh0ZW5kcyBrZXlvZiBUPihcblx0b2JqOiBULFxuXHRrZXlzOiBLW11cbik6IE9taXQ8VCwgSz4gPT4ge1xuXHRjb25zdCByZXN1bHQgPSB7IC4uLm9iaiB9XG5cdGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcblx0XHRkZWxldGUgcmVzdWx0W2tleV1cblx0fVxuXHRyZXR1cm4gcmVzdWx0XG59XG5cbi8qKlxuICogTm9ybWFsaXplcyBjYWxlbmRhciBldmVudHMgZnJvbSBwdWJsaWMtZmFjaW5nIGZvcm1hdCB0byBpbnRlcm5hbCBmb3JtYXQuXG4gKiBDb252ZXJ0cyBmbGV4aWJsZSBkYXRlIHR5cGVzIChkYXlqcywgRGF0ZSwgc3RyaW5nKSB0byBzdHJpY3QgZGF5anMgb2JqZWN0cy5cbiAqXG4gKiBAcGFyYW0gZXZlbnRzIC0gQXJyYXkgb2YgY2FsZW5kYXIgZXZlbnRzIHdpdGggZmxleGlibGUgZGF0ZSB0eXBlc1xuICogQHJldHVybnMgTm9ybWFsaXplZCBhcnJheSBvZiBjYWxlbmRhciBldmVudHMgd2l0aCBkYXlqcyBkYXRlc1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBSZWd1bGFyIGNhbGVuZGFyIGV2ZW50c1xuICogY29uc3QgZXZlbnRzID0gbm9ybWFsaXplRXZlbnRzPElsYW15Q2FsZW5kYXJQcm9wRXZlbnQsIENhbGVuZGFyRXZlbnQ+KHByb3BFdmVudHMpXG4gKlxuICogLy8gUmVzb3VyY2UgY2FsZW5kYXIgZXZlbnRzXG4gKiBjb25zdCByZXNvdXJjZUV2ZW50cyA9IG5vcm1hbGl6ZUV2ZW50czxJbGFteVJlc291cmNlQ2FsZW5kYXJQcm9wRXZlbnQsIENhbGVuZGFyRXZlbnQ+KHByb3BFdmVudHMpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVFdmVudHM8XG5cdFRJbnB1dCBleHRlbmRzIHtcblx0XHRzdGFydDogRGF5anMgfCBEYXRlIHwgc3RyaW5nXG5cdFx0ZW5kOiBEYXlqcyB8IERhdGUgfCBzdHJpbmdcblx0fSxcblx0VE91dHB1dCxcbj4oZXZlbnRzOiBUSW5wdXRbXSB8IHVuZGVmaW5lZCk6IFRPdXRwdXRbXSB7XG5cdGlmICghZXZlbnRzIHx8ICFldmVudHMubGVuZ3RoKSB7XG5cdFx0cmV0dXJuIFtdXG5cdH1cblxuXHRyZXR1cm4gZXZlbnRzLm1hcCgoZXZlbnQpID0+IHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0Li4uZXZlbnQsXG5cdFx0XHRzdGFydDogZGF5anMuaXNEYXlqcyhldmVudC5zdGFydCkgPyBldmVudC5zdGFydCA6IGRheWpzKGV2ZW50LnN0YXJ0KSxcblx0XHRcdGVuZDogZGF5anMuaXNEYXlqcyhldmVudC5lbmQpID8gZXZlbnQuZW5kIDogZGF5anMoZXZlbnQuZW5kKSxcblx0XHR9IGFzIFRPdXRwdXRcblx0fSlcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBPcFVuaXRUeXBlIGFzIERheWpzT3BVbml0VHlwZSwgUGx1Z2luRnVuYyB9IGZyb20gJ2RheWpzJ1xuaW1wb3J0IGRheWpzIGZyb20gJ2RheWpzJ1xuaW1wb3J0IGlzQmV0d2VlbiBmcm9tICdkYXlqcy9wbHVnaW4vaXNCZXR3ZWVuLmpzJ1xuaW1wb3J0IGlzU2FtZU9yQWZ0ZXIgZnJvbSAnZGF5anMvcGx1Z2luL2lzU2FtZU9yQWZ0ZXIuanMnXG5pbXBvcnQgaXNTYW1lT3JCZWZvcmUgZnJvbSAnZGF5anMvcGx1Z2luL2lzU2FtZU9yQmVmb3JlLmpzJ1xuaW1wb3J0IGxvY2FsZURhdGEgZnJvbSAnZGF5anMvcGx1Z2luL2xvY2FsZURhdGEuanMnXG5pbXBvcnQgbG9jYWxpemVkRm9ybWF0IGZyb20gJ2RheWpzL3BsdWdpbi9sb2NhbGl6ZWRGb3JtYXQuanMnXG5pbXBvcnQgbWluTWF4IGZyb20gJ2RheWpzL3BsdWdpbi9taW5NYXguanMnXG5pbXBvcnQgdGltZXpvbmUgZnJvbSAnZGF5anMvcGx1Z2luL3RpbWV6b25lLmpzJ1xuaW1wb3J0IHV0YyBmcm9tICdkYXlqcy9wbHVnaW4vdXRjLmpzJ1xuaW1wb3J0IHdlZWtkYXkgZnJvbSAnZGF5anMvcGx1Z2luL3dlZWtkYXkuanMnXG5pbXBvcnQgd2Vla09mWWVhciBmcm9tICdkYXlqcy9wbHVnaW4vd2Vla09mWWVhci5qcydcblxuLyoqXG4gKiBQbHVnaW4gdGhhdCBmaXhlcyBhIGRheWpzLXRpbWV6b25lIGJ1ZyB3aGVyZSAuc3RhcnRPZigpIGFuZCAuZW5kT2YoKSBkcm9wXG4gKiB0aW1lem9uZSBpbmZvIHdoZW4gdGhlIHN5c3RlbSdzIGxvY2FsIHRpbWV6b25lIGhhcyBhIERTVCB0cmFuc2l0aW9uIG5lYXJcbiAqIHRoZSB0YXJnZXQgZGF0ZS4gQWZ0ZXIgZWFjaCBzdGFydE9mL2VuZE9mIGNhbGwsIGlmIHRoZSBVVEMgb2Zmc2V0IGhhc1xuICogZHJpZnRlZCBmcm9tIHdoYXQgdGhlIHRpbWV6b25lIGV4cGVjdHMsIHJlLWFwcGx5IHRoZSB0aW1lem9uZSB3aXRoXG4gKiBrZWVwTG9jYWxUaW1lPXRydWUgdG8gcmVzdG9yZSB0aGUgY29ycmVjdCBvZmZzZXQuXG4gKi9cbmludGVyZmFjZSBEYXlqc0ludGVybmFsIGV4dGVuZHMgZGF5anMuRGF5anMge1xuXHQkeDogeyAkdGltZXpvbmU/OiBzdHJpbmcgfVxufVxuXG5sZXQgZGVmYXVsdFRpbWV6b25lOiBzdHJpbmcgfCB1bmRlZmluZWRcblxuY29uc3QgZml4VGltZXpvbmVPZmZzZXQ6IFBsdWdpbkZ1bmMgPSAoX29wdGlvbiwgZGF5anNDbGFzcywgZGF5anNGYWN0b3J5KSA9PiB7XG5cdGNvbnN0IHByb3RvID0gZGF5anNDbGFzcy5wcm90b3R5cGVcblxuXHQvLyBJbnRlcmNlcHQgc2V0RGVmYXVsdCB0byB0cmFjayB0aGUgY29uZmlndXJlZCB0aW1lem9uZVxuXHRjb25zdCBvcmlnaW5hbFNldERlZmF1bHQgPSBkYXlqc0ZhY3RvcnkudHouc2V0RGVmYXVsdFxuXHRkYXlqc0ZhY3RvcnkudHouc2V0RGVmYXVsdCA9ICh0aW1lem9uZT86IHN0cmluZykgPT4ge1xuXHRcdGRlZmF1bHRUaW1lem9uZSA9IHRpbWV6b25lXG5cdFx0cmV0dXJuIG9yaWdpbmFsU2V0RGVmYXVsdCh0aW1lem9uZSlcblx0fVxuXG5cdHR5cGUgU3RhcnRPZkZuID0gKHVuaXQ6IERheWpzT3BVbml0VHlwZSwgX3N0YXJ0T2Y/OiBib29sZWFuKSA9PiBkYXlqcy5EYXlqc1xuXHRjb25zdCBvcmlnaW5hbFN0YXJ0T2YgPSBwcm90by5zdGFydE9mIGFzIFN0YXJ0T2ZGblxuXHRjb25zdCBvcmlnaW5hbEVuZE9mID0gcHJvdG8uZW5kT2ZcblxuXHRmdW5jdGlvbiByZXN0b3JlVGltZXpvbmUoXG5cdFx0aW5zdGFuY2U6IGRheWpzLkRheWpzLFxuXHRcdHJlc3VsdDogZGF5anMuRGF5anNcblx0KTogZGF5anMuRGF5anMge1xuXHRcdGNvbnN0IHR6ID0gKGluc3RhbmNlIGFzIERheWpzSW50ZXJuYWwpLiR4Py4kdGltZXpvbmUgfHwgZGVmYXVsdFRpbWV6b25lXG5cdFx0aWYgKCF0eikgcmV0dXJuIHJlc3VsdFxuXG5cdFx0Y29uc3QgZXhwZWN0ZWRPZmZzZXQgPSBkYXlqc0ZhY3Rvcnlcblx0XHRcdC50eihyZXN1bHQuZm9ybWF0KCdZWVlZLU1NLUREVEhIOm1tOnNzJyksIHR6KVxuXHRcdFx0LnV0Y09mZnNldCgpXG5cdFx0aWYgKHJlc3VsdC51dGNPZmZzZXQoKSAhPT0gZXhwZWN0ZWRPZmZzZXQpIHtcblx0XHRcdHJldHVybiByZXN1bHQudHoodHosIHRydWUpXG5cdFx0fVxuXHRcdHJldHVybiByZXN1bHRcblx0fVxuXG5cdC8vIGRheWpzJ3MgZW5kT2YgY2FsbHMgc3RhcnRPZih1bml0LCBmYWxzZSkgaW50ZXJuYWxseSDigJQgdGhlIHNlY29uZCBhcmdcblx0Ly8gKF9zdGFydE9mKSBjb250cm9scyBzdGFydC12cy1lbmQgYmVoYXZpb3IuIFdlIG11c3QgZm9yd2FyZCBpdC5cblx0cHJvdG8uc3RhcnRPZiA9IGZ1bmN0aW9uICh1bml0OiBEYXlqc09wVW5pdFR5cGUsIF9zdGFydE9mPzogYm9vbGVhbikge1xuXHRcdGNvbnN0IHJlc3VsdCA9IG9yaWdpbmFsU3RhcnRPZi5jYWxsKHRoaXMsIHVuaXQsIF9zdGFydE9mKVxuXHRcdHJldHVybiByZXN0b3JlVGltZXpvbmUodGhpcywgcmVzdWx0KVxuXHR9XG5cblx0Ly8gZW5kT2YgZGVsZWdhdGVzIHRvIHN0YXJ0T2YodW5pdCwgZmFsc2UpLCBzbyB0aGUgcGF0Y2hlZCBzdGFydE9mIGhhbmRsZXMgaXRcblx0cHJvdG8uZW5kT2YgPSBvcmlnaW5hbEVuZE9mXG59XG5cbi8vIEV4dGVuZCBkYXlqcyB3aXRoIHBsdWdpbnNcbmRheWpzLmV4dGVuZCh3ZWVrZGF5KVxuZGF5anMuZXh0ZW5kKHdlZWtPZlllYXIpXG5kYXlqcy5leHRlbmQoaXNTYW1lT3JBZnRlcilcbmRheWpzLmV4dGVuZChpc1NhbWVPckJlZm9yZSlcbmRheWpzLmV4dGVuZChpc0JldHdlZW4pXG5kYXlqcy5leHRlbmQobWluTWF4KVxuZGF5anMuZXh0ZW5kKHRpbWV6b25lKVxuZGF5anMuZXh0ZW5kKHV0YylcbmRheWpzLmV4dGVuZChsb2NhbGVEYXRhKVxuZGF5anMuZXh0ZW5kKGxvY2FsaXplZEZvcm1hdClcbmRheWpzLmV4dGVuZChmaXhUaW1lem9uZU9mZnNldClcblxuLy8gQ3VzdG9tIGRheWpzIGNvbnN0cnVjdG9yIHRoYXQgYXV0b21hdGljYWxseSB1c2VzIC50eigpIGZvciBhbGwgaW5zdGFuY2VzLlxuLy8gVGhpcyBlbnN1cmVzIHRoYXQgZGF5anMoKSBjYWxscyB0aHJvdWdob3V0IHRoZSBjb2RlYmFzZSBob25vciB0aGUgZGVmYXVsdFxuLy8gdGltZXpvbmUgc2V0IHZpYSBkYXlqcy50ei5zZXREZWZhdWx0KCkuXG5jb25zdCB0aW1lem9uZUF3YXJlRGF5anMgPSAoLi4uYXJnczogdW5rbm93bltdKSA9PiB7XG5cdHJldHVybiAoZGF5anMgYXMgdW5rbm93biBhcyB7IHR6OiAoLi4uYTogdW5rbm93bltdKSA9PiBkYXlqcy5EYXlqcyB9KS50eihcblx0XHQuLi5hcmdzXG5cdClcbn1cblxuLy8gQXR0YWNoIGFsbCBzdGF0aWMgbWV0aG9kcyBhbmQgcHJvcGVydGllcyBmcm9tIHRoZSBvcmlnaW5hbCBkYXlqcyB0byBvdXIgd3JhcHBlci5cbi8vIFRoaXMgYWxsb3dzIHRoZSB3cmFwcGVyIHRvIGJlIHVzZWQgYXMgYSBkcm9wLWluIHJlcGxhY2VtZW50LlxuT2JqZWN0LmFzc2lnbih0aW1lem9uZUF3YXJlRGF5anMsIGRheWpzKVxuXG4vLyBFeHBvcnQgdGhlIERheWpzIHR5cGUgc2VwYXJhdGVseSBmb3IgdXNlIGFzIGEgdHlwZSBpbiBvdGhlciBmaWxlcy5cbi8vIEZpbGVzIHNob3VsZCB1c2UgJ2ltcG9ydCBkYXlqcywgeyB0eXBlIERheWpzIH0gZnJvbSBcIkAvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnXCInXG5leHBvcnQgdHlwZSB7IERheWpzLCBNYW5pcHVsYXRlVHlwZSwgT3BVbml0VHlwZSB9IGZyb20gJ2RheWpzJ1xuZXhwb3J0IGRlZmF1bHQgdGltZXpvbmVBd2FyZURheWpzIGFzIHR5cGVvZiBkYXlqc1xuIiwKICAgICJpbXBvcnQgdHlwZSB7IFdlZWtEYXlzIH0gZnJvbSAnQC9jb21wb25lbnRzJ1xuXG5leHBvcnQgY29uc3QgR0FQX0JFVFdFRU5fRUxFTUVOVFMgPSAxIC8vIHB4IChnYXAtMSlcbmV4cG9ydCBjb25zdCBEQVlfTlVNQkVSX0hFSUdIVCA9IDI0IC8vIHB4IChoLTYpXG5leHBvcnQgY29uc3QgRVZFTlRfQkFSX0hFSUdIVCA9IDI0IC8vIHB4IChoLVsyNHB4XSlcbmV4cG9ydCBjb25zdCBEQVlfTUFYX0VWRU5UU19ERUZBVUxUID0gNCAvLyBEZWZhdWx0IG1heCBldmVudHMgcGVyIGRheVxuZXhwb3J0IGNvbnN0IERJU0FCTEVEX0NFTExfQ0xBU1NOQU1FID1cblx0J2JnLXNlY29uZGFyeSB0ZXh0LW11dGVkLWZvcmVncm91bmQgcG9pbnRlci1ldmVudHMtbm9uZSdcblxuZXhwb3J0IGNvbnN0IFdFRUtfREFZU19OVU1CRVJfTUFQOiBSZWNvcmQ8V2Vla0RheXMsIG51bWJlcj4gPSB7XG5cdHN1bmRheTogMCxcblx0bW9uZGF5OiAxLFxuXHR0dWVzZGF5OiAyLFxuXHR3ZWRuZXNkYXk6IDMsXG5cdHRodXJzZGF5OiA0LFxuXHRmcmlkYXk6IDUsXG5cdHNhdHVyZGF5OiA2LFxufVxuXG5leHBvcnQgY29uc3QgREFZX05VTUJFUl9UT19XRUVLX0RBWVM6IFJlY29yZDxudW1iZXIsIFdlZWtEYXlzPiA9IHtcblx0MDogJ3N1bmRheScsXG5cdDE6ICdtb25kYXknLFxuXHQyOiAndHVlc2RheScsXG5cdDM6ICd3ZWRuZXNkYXknLFxuXHQ0OiAndGh1cnNkYXknLFxuXHQ1OiAnZnJpZGF5Jyxcblx0NjogJ3NhdHVyZGF5Jyxcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUge1xuXHREcmFnQ2FuY2VsRXZlbnQsXG5cdERyYWdFbmRFdmVudCxcblx0RHJhZ1N0YXJ0RXZlbnQsXG59IGZyb20gJ0BkbmQta2l0L2NvcmUnXG5pbXBvcnQge1xuXHREbmRDb250ZXh0LFxuXHRNb3VzZVNlbnNvcixcblx0cG9pbnRlcldpdGhpbixcblx0VG91Y2hTZW5zb3IsXG5cdHVzZVNlbnNvcixcblx0dXNlU2Vuc29ycyxcbn0gZnJvbSAnQGRuZC1raXQvY29yZSdcbmltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHsgUmVjdXJyZW5jZUVkaXREaWFsb2cgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvY29tcG9uZW50cy9yZWN1cnJlbmNlLWVkaXQtZGlhbG9nJ1xuaW1wb3J0IHR5cGUgeyBSZWN1cnJlbmNlRWRpdFNjb3BlIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL3R5cGVzJ1xuaW1wb3J0IHsgaXNSZWN1cnJpbmdFdmVudCB9IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS91dGlscy9yZWN1cnJlbmNlLWhhbmRsZXInXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgeyBnZXRVcGRhdGVkRXZlbnQgfSBmcm9tICcuL2RuZC11dGlscydcbmltcG9ydCB7IEV2ZW50RHJhZ092ZXJsYXkgfSBmcm9tICcuL2V2ZW50LWRyYWctb3ZlcmxheSdcblxuaW50ZXJmYWNlIENhbGVuZGFyRG5kQ29udGV4dFByb3BzIHtcblx0Y2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZVxufVxuXG5jb25zdCBDTE9TRURfRElBTE9HID0ge1xuXHRpc09wZW46IGZhbHNlLFxuXHRldmVudDogbnVsbCxcblx0dXBkYXRlczogbnVsbCxcbn0gYXMgY29uc3RcblxuZXhwb3J0IGZ1bmN0aW9uIENhbGVuZGFyRG5kQ29udGV4dCh7IGNoaWxkcmVuIH06IENhbGVuZGFyRG5kQ29udGV4dFByb3BzKSB7XG5cdGNvbnN0IGFjdGl2ZUV2ZW50UmVmID0gdXNlUmVmPENhbGVuZGFyRXZlbnQ+KG51bGwpXG5cdGNvbnN0IGRyYWdPdmVybGF5UmVmID0gdXNlUmVmPHtcblx0XHRzZXRBY3RpdmVFdmVudDogKGV2ZW50OiBDYWxlbmRhckV2ZW50IHwgbnVsbCkgPT4gdm9pZFxuXHR9PihudWxsKVxuXG5cdGNvbnN0IHsgdXBkYXRlRXZlbnQsIHVwZGF0ZVJlY3VycmluZ0V2ZW50LCBkaXNhYmxlRHJhZ0FuZERyb3AgfSA9XG5cdFx0dXNlU21hcnRDYWxlbmRhckNvbnRleHQoKGNvbnRleHQpID0+ICh7XG5cdFx0XHR1cGRhdGVFdmVudDogY29udGV4dC51cGRhdGVFdmVudCxcblx0XHRcdHVwZGF0ZVJlY3VycmluZ0V2ZW50OiBjb250ZXh0LnVwZGF0ZVJlY3VycmluZ0V2ZW50LFxuXHRcdFx0ZGlzYWJsZURyYWdBbmREcm9wOiBjb250ZXh0LmRpc2FibGVEcmFnQW5kRHJvcCxcblx0XHR9KSlcblxuXHQvLyBTdGF0ZSBmb3IgcmVjdXJyaW5nIGV2ZW50IGRpYWxvZ1xuXHRjb25zdCBbcmVjdXJyaW5nRGlhbG9nLCBzZXRSZWN1cnJpbmdEaWFsb2ddID0gdXNlU3RhdGU8e1xuXHRcdGlzT3BlbjogYm9vbGVhblxuXHRcdGV2ZW50OiBDYWxlbmRhckV2ZW50IHwgbnVsbFxuXHRcdHVwZGF0ZXM6IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD4gfCBudWxsXG5cdH0+KHtcblx0XHRpc09wZW46IGZhbHNlLFxuXHRcdGV2ZW50OiBudWxsLFxuXHRcdHVwZGF0ZXM6IG51bGwsXG5cdH0pXG5cblx0Ly8gQ29uZmlndXJlIHNlbnNvcnMgd2l0aCByZWR1Y2VkIGFjdGl2YXRpb24gY29uc3RyYWludHMgZm9yIGVhc2llciBkcmFnZ2luZ1xuXHRjb25zdCBtb3VzZVNlbnNvciA9IHVzZVNlbnNvcihNb3VzZVNlbnNvciwge1xuXHRcdC8vIFJlcXVpcmUgbWluaW1hbCBtb3ZlbWVudCBiZWZvcmUgYWN0aXZhdGluZ1xuXHRcdGFjdGl2YXRpb25Db25zdHJhaW50OiB7XG5cdFx0XHRkaXN0YW5jZTogMixcblx0XHR9LFxuXHR9KVxuXG5cdGNvbnN0IHRvdWNoU2Vuc29yID0gdXNlU2Vuc29yKFRvdWNoU2Vuc29yLCB7XG5cdFx0Ly8gUmVkdWNlIGRlbGF5IGZvciB0b3VjaCBkZXZpY2VzXG5cdFx0YWN0aXZhdGlvbkNvbnN0cmFpbnQ6IHtcblx0XHRcdGRlbGF5OiAxMDAsXG5cdFx0XHR0b2xlcmFuY2U6IDUsXG5cdFx0fSxcblx0fSlcblxuXHRjb25zdCBzZW5zb3JzID0gdXNlU2Vuc29ycyhtb3VzZVNlbnNvciwgdG91Y2hTZW5zb3IpXG5cblx0Ly8gSGVscGVyIGZ1bmN0aW9uIHRvIHBlcmZvcm0gdGhlIGFjdHVhbCBldmVudCB1cGRhdGVcblx0Y29uc3QgcGVyZm9ybUV2ZW50VXBkYXRlID0gKFxuXHRcdGV2ZW50OiBDYWxlbmRhckV2ZW50LFxuXHRcdHVwZGF0ZXM6IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD5cblx0KSA9PiB7XG5cdFx0aWYgKCFldmVudD8uaWQgfHwgIXVwZGF0ZXMgfHwgT2JqZWN0LmtleXModXBkYXRlcykubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRyZXR1cm5cblx0XHR9XG5cblx0XHRpZiAoaXNSZWN1cnJpbmdFdmVudChldmVudCkpIHtcblx0XHRcdC8vIFJlY3VycmluZyBldmVudHM6IHByb21wdCB0aGUgdXNlciB2aWEgZGlhbG9nIGJlZm9yZSBhcHBseWluZy5cblx0XHRcdHNldFJlY3VycmluZ0RpYWxvZyh7IGlzT3BlbjogdHJ1ZSwgZXZlbnQsIHVwZGF0ZXMgfSlcblx0XHR9IGVsc2Uge1xuXHRcdFx0dXBkYXRlRXZlbnQoZXZlbnQuaWQsIHVwZGF0ZXMpXG5cdFx0fVxuXHR9XG5cblx0Ly8gSGFuZGxlIHJlY3VycmluZyBldmVudCBkaWFsb2cgY29uZmlybWF0aW9uXG5cdGNvbnN0IGhhbmRsZVJlY3VycmluZ0V2ZW50Q29uZmlybSA9IChzY29wZTogUmVjdXJyZW5jZUVkaXRTY29wZSkgPT4ge1xuXHRcdGlmICghcmVjdXJyaW5nRGlhbG9nLmV2ZW50IHx8ICFyZWN1cnJpbmdEaWFsb2cudXBkYXRlcykge1xuXHRcdFx0c2V0UmVjdXJyaW5nRGlhbG9nKENMT1NFRF9ESUFMT0cpXG5cdFx0XHRyZXR1cm5cblx0XHR9XG5cblx0XHR0cnkge1xuXHRcdFx0dXBkYXRlUmVjdXJyaW5nRXZlbnQocmVjdXJyaW5nRGlhbG9nLmV2ZW50LCByZWN1cnJpbmdEaWFsb2cudXBkYXRlcywge1xuXHRcdFx0XHRzY29wZSxcblx0XHRcdFx0ZXZlbnREYXRlOiByZWN1cnJpbmdEaWFsb2cuZXZlbnQuc3RhcnQsXG5cdFx0XHR9KVxuXHRcdH0gY2F0Y2gge1xuXHRcdFx0Ly8gU2lsZW50bHkgaGFuZGxlIGVycm9yIGFuZCByZXNldCBkaWFsb2cgc3RhdGVcblx0XHR9IGZpbmFsbHkge1xuXHRcdFx0c2V0UmVjdXJyaW5nRGlhbG9nKENMT1NFRF9ESUFMT0cpXG5cdFx0fVxuXHR9XG5cblx0Ly8gSGFuZGxlIHJlY3VycmluZyBldmVudCBkaWFsb2cgY2xvc2Vcblx0Y29uc3QgaGFuZGxlUmVjdXJyaW5nRXZlbnRDbG9zZSA9ICgpID0+IHtcblx0XHRzZXRSZWN1cnJpbmdEaWFsb2coQ0xPU0VEX0RJQUxPRylcblx0fVxuXG5cdGNvbnN0IGhhbmRsZURyYWdTdGFydCA9IChldmVudDogRHJhZ1N0YXJ0RXZlbnQpID0+IHtcblx0XHRjb25zdCB7IGFjdGl2ZSB9ID0gZXZlbnRcblxuXHRcdC8vIFNldCB0aGUgYWN0aXZlIGV2ZW50IGJhc2VkIG9uIHRoZSBldmVudCBkYXRhXG5cdFx0aWYgKGFjdGl2ZS5kYXRhLmN1cnJlbnQ/LnR5cGUgPT09ICdjYWxlbmRhci1ldmVudCcpIHtcblx0XHRcdGRyYWdPdmVybGF5UmVmLmN1cnJlbnQ/LnNldEFjdGl2ZUV2ZW50KGFjdGl2ZS5kYXRhLmN1cnJlbnQuZXZlbnQpXG5cdFx0XHRhY3RpdmVFdmVudFJlZi5jdXJyZW50ID0gYWN0aXZlLmRhdGEuY3VycmVudC5ldmVudFxuXHRcdH1cblx0fVxuXG5cdGNvbnN0IGhhbmRsZURyYWdFbmQgPSAoZXZlbnQ6IERyYWdFbmRFdmVudCkgPT4ge1xuXHRcdGNvbnN0IHVwZGF0ZWRFdmVudCA9IGdldFVwZGF0ZWRFdmVudChldmVudCwgYWN0aXZlRXZlbnRSZWYuY3VycmVudClcblx0XHRpZiAodXBkYXRlZEV2ZW50KSB7XG5cdFx0XHRjb25zdCB7IGFjdGl2ZUV2ZW50LCB1cGRhdGVzIH0gPSB1cGRhdGVkRXZlbnRcblx0XHRcdHBlcmZvcm1FdmVudFVwZGF0ZShhY3RpdmVFdmVudCwgdXBkYXRlcylcblx0XHR9XG5cblx0XHQvLyBDbGVhciB0aGUgYWN0aXZlIGV2ZW50IHJlZmVyZW5jZVxuXHRcdGFjdGl2ZUV2ZW50UmVmLmN1cnJlbnQgPSBudWxsXG5cdFx0ZHJhZ092ZXJsYXlSZWYuY3VycmVudD8uc2V0QWN0aXZlRXZlbnQobnVsbClcblx0fVxuXG5cdGNvbnN0IGhhbmRsZURyYWdDYW5jZWwgPSAoX2V2ZW50OiBEcmFnQ2FuY2VsRXZlbnQpID0+IHtcblx0XHRhY3RpdmVFdmVudFJlZi5jdXJyZW50ID0gbnVsbFxuXHR9XG5cblx0Ly8gSWYgZHJhZyBhbmQgZHJvcCBpcyBkaXNhYmxlZCwganVzdCByZXR1cm4gY2hpbGRyZW4gd2l0aG91dCBEbmRDb250ZXh0XG5cdGlmIChkaXNhYmxlRHJhZ0FuZERyb3ApIHtcblx0XHRyZXR1cm4gY2hpbGRyZW4gYXMgUmVhY3QuUmVhY3RFbGVtZW50XG5cdH1cblxuXHRyZXR1cm4gKFxuXHRcdDw+XG5cdFx0XHQ8RG5kQ29udGV4dFxuXHRcdFx0XHRjb2xsaXNpb25EZXRlY3Rpb249e3BvaW50ZXJXaXRoaW59XG5cdFx0XHRcdG9uRHJhZ0NhbmNlbD17aGFuZGxlRHJhZ0NhbmNlbH1cblx0XHRcdFx0b25EcmFnRW5kPXtoYW5kbGVEcmFnRW5kfVxuXHRcdFx0XHRvbkRyYWdTdGFydD17aGFuZGxlRHJhZ1N0YXJ0fVxuXHRcdFx0XHRzZW5zb3JzPXtzZW5zb3JzfVxuXHRcdFx0PlxuXHRcdFx0XHR7Y2hpbGRyZW59XG5cdFx0XHRcdDxFdmVudERyYWdPdmVybGF5IHJlZj17ZHJhZ092ZXJsYXlSZWZ9IC8+XG5cdFx0XHQ8L0RuZENvbnRleHQ+XG5cblx0XHRcdHsvKiBSZWN1cnJpbmcgZXZlbnQgZWRpdCBkaWFsb2cgKi99XG5cdFx0XHQ8UmVjdXJyZW5jZUVkaXREaWFsb2dcblx0XHRcdFx0ZXZlbnRUaXRsZT17cmVjdXJyaW5nRGlhbG9nLmV2ZW50Py50aXRsZSB8fCAnJ31cblx0XHRcdFx0aXNPcGVuPXtyZWN1cnJpbmdEaWFsb2cuaXNPcGVufVxuXHRcdFx0XHRvbkNsb3NlPXtoYW5kbGVSZWN1cnJpbmdFdmVudENsb3NlfVxuXHRcdFx0XHRvbkNvbmZpcm09e2hhbmRsZVJlY3VycmluZ0V2ZW50Q29uZmlybX1cblx0XHRcdFx0b3BlcmF0aW9uVHlwZT1cImVkaXRcIlxuXHRcdFx0Lz5cblx0XHQ8Lz5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgeyBTbG90IH0gZnJvbSAnQHJhZGl4LXVpL3JlYWN0LXNsb3QnXG5pbXBvcnQgdHlwZSB7IFZhcmlhbnRQcm9wcyB9IGZyb20gJ2NsYXNzLXZhcmlhbmNlLWF1dGhvcml0eSdcbmltcG9ydCB7IGN2YSB9IGZyb20gJ2NsYXNzLXZhcmlhbmNlLWF1dGhvcml0eSdcbmltcG9ydCB0eXBlICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmNvbnN0IGJ1dHRvblZhcmlhbnRzID0gY3ZhKFxuXHRcImlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMiB3aGl0ZXNwYWNlLW5vd3JhcCByb3VuZGVkLW1kIHRleHQtc20gZm9udC1tZWRpdW0gdHJhbnNpdGlvbi1hbGwgZGlzYWJsZWQ6cG9pbnRlci1ldmVudHMtbm9uZSBkaXNhYmxlZDpvcGFjaXR5LTUwIFsmX3N2Z106cG9pbnRlci1ldmVudHMtbm9uZSBbJl9zdmc6bm90KFtjbGFzcyo9J3NpemUtJ10pXTpzaXplLTQgc2hyaW5rLTAgWyZfc3ZnXTpzaHJpbmstMCBvdXRsaW5lLW5vbmUgZm9jdXMtdmlzaWJsZTpib3JkZXItcmluZyBmb2N1cy12aXNpYmxlOnJpbmctcmluZy81MCBmb2N1cy12aXNpYmxlOnJpbmctWzNweF0gYXJpYS1pbnZhbGlkOnJpbmctZGVzdHJ1Y3RpdmUvMjAgZGFyazphcmlhLWludmFsaWQ6cmluZy1kZXN0cnVjdGl2ZS80MCBhcmlhLWludmFsaWQ6Ym9yZGVyLWRlc3RydWN0aXZlXCIsXG5cdHtcblx0XHR2YXJpYW50czoge1xuXHRcdFx0dmFyaWFudDoge1xuXHRcdFx0XHRkZWZhdWx0OiAnYmctcHJpbWFyeSB0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCBob3ZlcjpiZy1wcmltYXJ5LzkwJyxcblx0XHRcdFx0ZGVzdHJ1Y3RpdmU6XG5cdFx0XHRcdFx0J2JnLWRlc3RydWN0aXZlIHRleHQtd2hpdGUgaG92ZXI6YmctZGVzdHJ1Y3RpdmUvOTAgZm9jdXMtdmlzaWJsZTpyaW5nLWRlc3RydWN0aXZlLzIwIGRhcms6Zm9jdXMtdmlzaWJsZTpyaW5nLWRlc3RydWN0aXZlLzQwIGRhcms6YmctZGVzdHJ1Y3RpdmUvNjAnLFxuXHRcdFx0XHRvdXRsaW5lOlxuXHRcdFx0XHRcdCdib3JkZXIgYmctYmFja2dyb3VuZCBzaGFkb3cteHMgaG92ZXI6YmctYWNjZW50IGhvdmVyOnRleHQtYWNjZW50LWZvcmVncm91bmQgZGFyazpiZy1pbnB1dC8zMCBkYXJrOmJvcmRlci1pbnB1dCBkYXJrOmhvdmVyOmJnLWlucHV0LzUwJyxcblx0XHRcdFx0c2Vjb25kYXJ5OlxuXHRcdFx0XHRcdCdiZy1zZWNvbmRhcnkgdGV4dC1zZWNvbmRhcnktZm9yZWdyb3VuZCBob3ZlcjpiZy1zZWNvbmRhcnkvODAnLFxuXHRcdFx0XHRnaG9zdDpcblx0XHRcdFx0XHQnaG92ZXI6YmctYWNjZW50IGhvdmVyOnRleHQtYWNjZW50LWZvcmVncm91bmQgZGFyazpob3ZlcjpiZy1hY2NlbnQvNTAnLFxuXHRcdFx0XHRsaW5rOiAndGV4dC1wcmltYXJ5IHVuZGVybGluZS1vZmZzZXQtNCBob3Zlcjp1bmRlcmxpbmUnLFxuXHRcdFx0fSxcblx0XHRcdHNpemU6IHtcblx0XHRcdFx0ZGVmYXVsdDogJ2gtOSBweC00IHB5LTIgaGFzLVs+c3ZnXTpweC0zJyxcblx0XHRcdFx0c206ICdoLTggcm91bmRlZC1tZCBnYXAtMS41IHB4LTMgaGFzLVs+c3ZnXTpweC0yLjUnLFxuXHRcdFx0XHRsZzogJ2gtMTAgcm91bmRlZC1tZCBweC02IGhhcy1bPnN2Z106cHgtNCcsXG5cdFx0XHRcdGljb246ICdzaXplLTknLFxuXHRcdFx0XHQnaWNvbi1zbSc6ICdzaXplLTgnLFxuXHRcdFx0XHQnaWNvbi1sZyc6ICdzaXplLTEwJyxcblx0XHRcdH0sXG5cdFx0fSxcblx0XHRkZWZhdWx0VmFyaWFudHM6IHtcblx0XHRcdHZhcmlhbnQ6ICdkZWZhdWx0Jyxcblx0XHRcdHNpemU6ICdkZWZhdWx0Jyxcblx0XHR9LFxuXHR9XG4pXG5cbmZ1bmN0aW9uIEJ1dHRvbih7XG5cdGNsYXNzTmFtZSxcblx0dmFyaWFudCxcblx0c2l6ZSxcblx0YXNDaGlsZCA9IGZhbHNlLFxuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8J2J1dHRvbic+ICZcblx0VmFyaWFudFByb3BzPHR5cGVvZiBidXR0b25WYXJpYW50cz4gJiB7XG5cdFx0YXNDaGlsZD86IGJvb2xlYW5cblx0fSkge1xuXHRjb25zdCBDb21wID0gYXNDaGlsZCA/IFNsb3QgOiAnYnV0dG9uJ1xuXG5cdHJldHVybiAoXG5cdFx0PENvbXBcblx0XHRcdGNsYXNzTmFtZT17Y24oYnV0dG9uVmFyaWFudHMoeyB2YXJpYW50LCBzaXplLCBjbGFzc05hbWUgfSkpfVxuXHRcdFx0ZGF0YS1zbG90PVwiYnV0dG9uXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmV4cG9ydCB7IEJ1dHRvbiwgYnV0dG9uVmFyaWFudHMgfVxuIiwKICAgICJpbXBvcnQgKiBhcyBEaWFsb2dQcmltaXRpdmUgZnJvbSAnQHJhZGl4LXVpL3JlYWN0LWRpYWxvZydcbmltcG9ydCB7IFhJY29uIH0gZnJvbSAnbHVjaWRlLXJlYWN0J1xuaW1wb3J0IHR5cGUgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuZnVuY3Rpb24gRGlhbG9nKHtcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBEaWFsb2dQcmltaXRpdmUuUm9vdD4pIHtcblx0cmV0dXJuIDxEaWFsb2dQcmltaXRpdmUuUm9vdCBkYXRhLXNsb3Q9XCJkaWFsb2dcIiB7Li4ucHJvcHN9IC8+XG59XG5cbmZ1bmN0aW9uIERpYWxvZ1RyaWdnZXIoe1xuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIERpYWxvZ1ByaW1pdGl2ZS5UcmlnZ2VyPikge1xuXHRyZXR1cm4gPERpYWxvZ1ByaW1pdGl2ZS5UcmlnZ2VyIGRhdGEtc2xvdD1cImRpYWxvZy10cmlnZ2VyXCIgey4uLnByb3BzfSAvPlxufVxuXG5mdW5jdGlvbiBEaWFsb2dQb3J0YWwoe1xuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIERpYWxvZ1ByaW1pdGl2ZS5Qb3J0YWw+KSB7XG5cdHJldHVybiA8RGlhbG9nUHJpbWl0aXZlLlBvcnRhbCBkYXRhLXNsb3Q9XCJkaWFsb2ctcG9ydGFsXCIgey4uLnByb3BzfSAvPlxufVxuXG5mdW5jdGlvbiBEaWFsb2dDbG9zZSh7XG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgRGlhbG9nUHJpbWl0aXZlLkNsb3NlPikge1xuXHRyZXR1cm4gPERpYWxvZ1ByaW1pdGl2ZS5DbG9zZSBkYXRhLXNsb3Q9XCJkaWFsb2ctY2xvc2VcIiB7Li4ucHJvcHN9IC8+XG59XG5cbmZ1bmN0aW9uIERpYWxvZ092ZXJsYXkoe1xuXHRjbGFzc05hbWUsXG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgRGlhbG9nUHJpbWl0aXZlLk92ZXJsYXk+KSB7XG5cdHJldHVybiAoXG5cdFx0PERpYWxvZ1ByaW1pdGl2ZS5PdmVybGF5XG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQnZGF0YS1bc3RhdGU9b3Blbl06YW5pbWF0ZS1pbiBkYXRhLVtzdGF0ZT1jbG9zZWRdOmFuaW1hdGUtb3V0IGRhdGEtW3N0YXRlPWNsb3NlZF06ZmFkZS1vdXQtMCBkYXRhLVtzdGF0ZT1vcGVuXTpmYWRlLWluLTAgZml4ZWQgaW5zZXQtMCB6LTUwIGJnLWJsYWNrLzUwJyxcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0ZGF0YS1zbG90PVwiZGlhbG9nLW92ZXJsYXlcIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdC8+XG5cdClcbn1cblxuZnVuY3Rpb24gRGlhbG9nQ29udGVudCh7XG5cdGNsYXNzTmFtZSxcblx0Y2hpbGRyZW4sXG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgRGlhbG9nUHJpbWl0aXZlLkNvbnRlbnQ+KSB7XG5cdHJldHVybiAoXG5cdFx0PERpYWxvZ1BvcnRhbCBkYXRhLXNsb3Q9XCJkaWFsb2ctcG9ydGFsXCI+XG5cdFx0XHQ8RGlhbG9nT3ZlcmxheSAvPlxuXHRcdFx0PERpYWxvZ1ByaW1pdGl2ZS5Db250ZW50XG5cdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0J2JnLWJhY2tncm91bmQgZGF0YS1bc3RhdGU9b3Blbl06YW5pbWF0ZS1pbiBkYXRhLVtzdGF0ZT1jbG9zZWRdOmFuaW1hdGUtb3V0IGRhdGEtW3N0YXRlPWNsb3NlZF06ZmFkZS1vdXQtMCBkYXRhLVtzdGF0ZT1vcGVuXTpmYWRlLWluLTAgZGF0YS1bc3RhdGU9Y2xvc2VkXTp6b29tLW91dC05NSBkYXRhLVtzdGF0ZT1vcGVuXTp6b29tLWluLTk1IGZpeGVkIHRvcC1bNTAlXSBsZWZ0LVs1MCVdIHotNTAgZ3JpZCB3LWZ1bGwgbWF4LXctW2NhbGMoMTAwJS0ycmVtKV0gdHJhbnNsYXRlLXgtWy01MCVdIHRyYW5zbGF0ZS15LVstNTAlXSBnYXAtNCByb3VuZGVkLWxnIGJvcmRlciBwLTYgc2hhZG93LWxnIGR1cmF0aW9uLTIwMCBzbTptYXgtdy1sZyBtYXgtaC1bOTAlXScsXG5cdFx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHRcdCl9XG5cdFx0XHRcdGRhdGEtc2xvdD1cImRpYWxvZy1jb250ZW50XCJcblx0XHRcdFx0ey4uLnByb3BzfVxuXHRcdFx0PlxuXHRcdFx0XHR7Y2hpbGRyZW59XG5cdFx0XHRcdDxEaWFsb2dQcmltaXRpdmUuQ2xvc2UgY2xhc3NOYW1lPVwicmluZy1vZmZzZXQtYmFja2dyb3VuZCBmb2N1czpyaW5nLXJpbmcgZGF0YS1bc3RhdGU9b3Blbl06YmctYWNjZW50IGRhdGEtW3N0YXRlPW9wZW5dOnRleHQtbXV0ZWQtZm9yZWdyb3VuZCBhYnNvbHV0ZSB0b3AtNCByaWdodC00IHJvdW5kZWQteHMgb3BhY2l0eS03MCB0cmFuc2l0aW9uLW9wYWNpdHkgaG92ZXI6b3BhY2l0eS0xMDAgZm9jdXM6cmluZy0yIGZvY3VzOnJpbmctb2Zmc2V0LTIgZm9jdXM6b3V0bGluZS1oaWRkZW4gZGlzYWJsZWQ6cG9pbnRlci1ldmVudHMtbm9uZSBbJl9zdmddOnBvaW50ZXItZXZlbnRzLW5vbmUgWyZfc3ZnXTpzaHJpbmstMCBbJl9zdmc6bm90KFtjbGFzcyo9J3NpemUtJ10pXTpzaXplLTRcIj5cblx0XHRcdFx0XHQ8WEljb24gLz5cblx0XHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJzci1vbmx5XCI+Q2xvc2U8L3NwYW4+XG5cdFx0XHRcdDwvRGlhbG9nUHJpbWl0aXZlLkNsb3NlPlxuXHRcdFx0PC9EaWFsb2dQcmltaXRpdmUuQ29udGVudD5cblx0XHQ8L0RpYWxvZ1BvcnRhbD5cblx0KVxufVxuXG5mdW5jdGlvbiBEaWFsb2dIZWFkZXIoeyBjbGFzc05hbWUsIC4uLnByb3BzIH06IFJlYWN0LkNvbXBvbmVudFByb3BzPCdkaXYnPikge1xuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oJ2ZsZXggZmxleC1jb2wgZ2FwLTIgdGV4dC1jZW50ZXIgc206dGV4dC1sZWZ0JywgY2xhc3NOYW1lKX1cblx0XHRcdGRhdGEtc2xvdD1cImRpYWxvZy1oZWFkZXJcIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdC8+XG5cdClcbn1cblxuZnVuY3Rpb24gRGlhbG9nRm9vdGVyKHsgY2xhc3NOYW1lLCAuLi5wcm9wcyB9OiBSZWFjdC5Db21wb25lbnRQcm9wczwnZGl2Jz4pIHtcblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQnZmxleCBmbGV4LWNvbC1yZXZlcnNlIGdhcC0yIHNtOmZsZXgtcm93IHNtOmp1c3RpZnktZW5kJyxcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0ZGF0YS1zbG90PVwiZGlhbG9nLWZvb3RlclwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0Lz5cblx0KVxufVxuXG5mdW5jdGlvbiBEaWFsb2dUaXRsZSh7XG5cdGNsYXNzTmFtZSxcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBEaWFsb2dQcmltaXRpdmUuVGl0bGU+KSB7XG5cdHJldHVybiAoXG5cdFx0PERpYWxvZ1ByaW1pdGl2ZS5UaXRsZVxuXHRcdFx0Y2xhc3NOYW1lPXtjbigndGV4dC1sZyBsZWFkaW5nLW5vbmUgZm9udC1zZW1pYm9sZCcsIGNsYXNzTmFtZSl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJkaWFsb2ctdGl0bGVcIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdC8+XG5cdClcbn1cblxuZnVuY3Rpb24gRGlhbG9nRGVzY3JpcHRpb24oe1xuXHRjbGFzc05hbWUsXG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgRGlhbG9nUHJpbWl0aXZlLkRlc2NyaXB0aW9uPikge1xuXHRyZXR1cm4gKFxuXHRcdDxEaWFsb2dQcmltaXRpdmUuRGVzY3JpcHRpb25cblx0XHRcdGNsYXNzTmFtZT17Y24oJ3RleHQtbXV0ZWQtZm9yZWdyb3VuZCB0ZXh0LXNtJywgY2xhc3NOYW1lKX1cblx0XHRcdGRhdGEtc2xvdD1cImRpYWxvZy1kZXNjcmlwdGlvblwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0Lz5cblx0KVxufVxuXG5leHBvcnQge1xuXHREaWFsb2csXG5cdERpYWxvZ0Nsb3NlLFxuXHREaWFsb2dDb250ZW50LFxuXHREaWFsb2dEZXNjcmlwdGlvbixcblx0RGlhbG9nRm9vdGVyLFxuXHREaWFsb2dIZWFkZXIsXG5cdERpYWxvZ092ZXJsYXksXG5cdERpYWxvZ1BvcnRhbCxcblx0RGlhbG9nVGl0bGUsXG5cdERpYWxvZ1RyaWdnZXIsXG59XG4iLAogICAgImltcG9ydCB7IHVzZUNvbnRleHQgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgQnVzaW5lc3NIb3VycywgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB7IENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9jb250ZXh0J1xuaW1wb3J0IHsgUmVzb3VyY2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbnRleHRzL3Jlc291cmNlLWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSB7IFJlc291cmNlQ2FsZW5kYXJDb250ZXh0VHlwZSB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29udGV4dHMvcmVzb3VyY2UtY2FsZW5kYXItY29udGV4dC9jb250ZXh0J1xuaW1wb3J0IHR5cGUgeyBSZXNvdXJjZSB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyVmlldyB9IGZyb20gJ0AvdHlwZXMnXG5cbi8qKlxuICogRnVsbCBpbnRlcm5hbCBjb250ZXh0IHR5cGUgdXNlZCBieSBsaWJyYXJ5IGNvbXBvbmVudHMuXG4gKi9cbmV4cG9ydCB0eXBlIFNtYXJ0Q2FsZW5kYXJDb250ZXh0VHlwZSA9IFJlc291cmNlQ2FsZW5kYXJDb250ZXh0VHlwZVxuXG4vKipcbiAqIFB1YmxpY2x5IGV4cG9zZWQgY2FsZW5kYXIgY29udGV4dCBwcm9wZXJ0aWVzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZUlsYW15Q2FsZW5kYXJDb250ZXh0UmV0dXJuIHtcblx0cmVhZG9ubHkgY3VycmVudERhdGU6IERheWpzXG5cdHJlYWRvbmx5IHZpZXc6IENhbGVuZGFyVmlld1xuXHRyZWFkb25seSBldmVudHM6IENhbGVuZGFyRXZlbnRbXVxuXHRyZWFkb25seSBpc0V2ZW50Rm9ybU9wZW46IGJvb2xlYW5cblx0cmVhZG9ubHkgc2VsZWN0ZWRFdmVudDogQ2FsZW5kYXJFdmVudCB8IG51bGxcblx0cmVhZG9ubHkgc2VsZWN0ZWREYXRlOiBEYXlqcyB8IG51bGxcblx0cmVhZG9ubHkgZmlyc3REYXlPZldlZWs6IG51bWJlclxuXHRyZWFkb25seSByZXNvdXJjZXM6IFJlc291cmNlW11cblx0cmVhZG9ubHkgc2V0Q3VycmVudERhdGU6IChkYXRlOiBEYXlqcykgPT4gdm9pZFxuXHRyZWFkb25seSBzZWxlY3REYXRlOiAoZGF0ZTogRGF5anMpID0+IHZvaWRcblx0cmVhZG9ubHkgc2V0VmlldzogKHZpZXc6IENhbGVuZGFyVmlldykgPT4gdm9pZFxuXHRyZWFkb25seSBuZXh0UGVyaW9kOiAoKSA9PiB2b2lkXG5cdHJlYWRvbmx5IHByZXZQZXJpb2Q6ICgpID0+IHZvaWRcblx0cmVhZG9ubHkgdG9kYXk6ICgpID0+IHZvaWRcblx0cmVhZG9ubHkgYWRkRXZlbnQ6IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuXHRyZWFkb25seSB1cGRhdGVFdmVudDogKFxuXHRcdGV2ZW50SWQ6IHN0cmluZyB8IG51bWJlcixcblx0XHRldmVudDogUGFydGlhbDxDYWxlbmRhckV2ZW50PlxuXHQpID0+IHZvaWRcblx0cmVhZG9ubHkgZGVsZXRlRXZlbnQ6IChldmVudElkOiBzdHJpbmcgfCBudW1iZXIpID0+IHZvaWRcblx0cmVhZG9ubHkgb3BlbkV2ZW50Rm9ybTogKGV2ZW50RGF0YT86IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD4pID0+IHZvaWRcblx0cmVhZG9ubHkgY2xvc2VFdmVudEZvcm06ICgpID0+IHZvaWRcblx0cmVhZG9ubHkgZ2V0RXZlbnRzRm9yUmVzb3VyY2U6IChcblx0XHRyZXNvdXJjZUlkOiBzdHJpbmcgfCBudW1iZXJcblx0KSA9PiBDYWxlbmRhckV2ZW50W11cblx0cmVhZG9ubHkgYnVzaW5lc3NIb3Vycz86IEJ1c2luZXNzSG91cnMgfCBCdXNpbmVzc0hvdXJzW11cbn1cblxuLyoqXG4gKiBJbnRlcm5hbCBob29rIHRoYXQgcmV0dXJucyB0aGUgZnVsbCBjb250ZXh0LlxuICogVXNlZCBieSBpbnRlcm5hbCB2aWV3cywgaGVhZGVycywgYW5kIGdyaWQgY29tcG9uZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KCk6IFNtYXJ0Q2FsZW5kYXJDb250ZXh0VHlwZVxuZXhwb3J0IGZ1bmN0aW9uIHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0PFQ+KFxuXHRzZWxlY3RvcjogKGNvbnRleHQ6IFNtYXJ0Q2FsZW5kYXJDb250ZXh0VHlwZSkgPT4gVFxuKTogVFxuZXhwb3J0IGZ1bmN0aW9uIHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0PFQ+KFxuXHRzZWxlY3Rvcj86IChjb250ZXh0OiBTbWFydENhbGVuZGFyQ29udGV4dFR5cGUpID0+IFRcbik6IFQgfCBTbWFydENhbGVuZGFyQ29udGV4dFR5cGUge1xuXHRjb25zdCByZXNvdXJjZUNvbnRleHQgPSB1c2VDb250ZXh0KFJlc291cmNlQ2FsZW5kYXJDb250ZXh0KVxuXHRjb25zdCByZWd1bGFyQ29udGV4dCA9IHVzZUNvbnRleHQoQ2FsZW5kYXJDb250ZXh0KVxuXG5cdC8vIEluIHJlZ3VsYXIgY2FsZW5kYXJzLCByZXNvdXJjZS1zcGVjaWZpYyBmaWVsZHMgd2lsbCBiZSB1bmRlZmluZWQuXG5cdGNvbnN0IGNvbnRleHQgPSAocmVzb3VyY2VDb250ZXh0IHx8XG5cdFx0cmVndWxhckNvbnRleHQpIGFzIFNtYXJ0Q2FsZW5kYXJDb250ZXh0VHlwZVxuXG5cdGlmICghY29udGV4dCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcblx0XHRcdCd1c2VTbWFydENhbGVuZGFyQ29udGV4dCBtdXN0IGJlIHVzZWQgd2l0aGluIGEgQ2FsZW5kYXJQcm92aWRlciBvciBSZXNvdXJjZUNhbGVuZGFyUHJvdmlkZXInXG5cdFx0KVxuXHR9XG5cblx0cmV0dXJuIHNlbGVjdG9yID8gc2VsZWN0b3IoY29udGV4dCkgOiBjb250ZXh0XG59XG5cbi8qKlxuICogUHVibGljIGhvb2sgZXhwb3J0ZWQgZm9yIGxpYnJhcnkgdXNlcnMuXG4gKiBSZXR1cm5zIGEgbGltaXRlZCBzZXQgb2YgY29tbW9ubHkgdXNlZCBwcm9wZXJ0aWVzIGFuZCBtZXRob2RzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlSWxhbXlDYWxlbmRhckNvbnRleHQoKTogVXNlSWxhbXlDYWxlbmRhckNvbnRleHRSZXR1cm4ge1xuXHRjb25zdCBjb250ZXh0ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXG5cdHJldHVybiB7XG5cdFx0Y3VycmVudERhdGU6IGNvbnRleHQuY3VycmVudERhdGUsXG5cdFx0dmlldzogY29udGV4dC52aWV3LFxuXHRcdGV2ZW50czogY29udGV4dC5ldmVudHMsXG5cdFx0aXNFdmVudEZvcm1PcGVuOiBjb250ZXh0LmlzRXZlbnRGb3JtT3Blbixcblx0XHRzZWxlY3RlZEV2ZW50OiBjb250ZXh0LnNlbGVjdGVkRXZlbnQsXG5cdFx0c2VsZWN0ZWREYXRlOiBjb250ZXh0LnNlbGVjdGVkRGF0ZSxcblx0XHRmaXJzdERheU9mV2VlazogY29udGV4dC5maXJzdERheU9mV2Vlayxcblx0XHRyZXNvdXJjZXM6IGNvbnRleHQucmVzb3VyY2VzIHx8IFtdLFxuXHRcdHNldEN1cnJlbnREYXRlOiBjb250ZXh0LnNldEN1cnJlbnREYXRlLFxuXHRcdHNlbGVjdERhdGU6IGNvbnRleHQuc2VsZWN0RGF0ZSxcblx0XHRzZXRWaWV3OiBjb250ZXh0LnNldFZpZXcsXG5cdFx0bmV4dFBlcmlvZDogY29udGV4dC5uZXh0UGVyaW9kLFxuXHRcdHByZXZQZXJpb2Q6IGNvbnRleHQucHJldlBlcmlvZCxcblx0XHR0b2RheTogY29udGV4dC50b2RheSxcblx0XHRhZGRFdmVudDogY29udGV4dC5hZGRFdmVudCxcblx0XHR1cGRhdGVFdmVudDogY29udGV4dC51cGRhdGVFdmVudCxcblx0XHRkZWxldGVFdmVudDogY29udGV4dC5kZWxldGVFdmVudCxcblx0XHRvcGVuRXZlbnRGb3JtOiBjb250ZXh0Lm9wZW5FdmVudEZvcm0sXG5cdFx0Y2xvc2VFdmVudEZvcm06IGNvbnRleHQuY2xvc2VFdmVudEZvcm0sXG5cdFx0Z2V0RXZlbnRzRm9yUmVzb3VyY2U6IGNvbnRleHQuZ2V0RXZlbnRzRm9yUmVzb3VyY2UsXG5cdFx0YnVzaW5lc3NIb3VyczogY29udGV4dC5idXNpbmVzc0hvdXJzLFxuXHR9XG59XG4iLAogICAgImltcG9ydCB7IGNyZWF0ZUNvbnRleHQgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgRXZlbnRGb3JtUHJvcHMgfSBmcm9tICdAL2NvbXBvbmVudHMvZXZlbnQtZm9ybS9ldmVudC1mb3JtJ1xuaW1wb3J0IHR5cGUgeyBCdXNpbmVzc0hvdXJzLCBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHR5cGUge1xuXHRDYWxlbmRhckNsYXNzZXNPdmVycmlkZSxcblx0Q2VsbEluZm8sXG5cdFJlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yUHJvcHMsXG5cdFNsb3REdXJhdGlvbixcbn0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci90eXBlcydcbmltcG9ydCB0eXBlIHsgUmVjdXJyZW5jZUVkaXRPcHRpb25zIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHR5cGUgeyBUcmFuc2xhdG9yRnVuY3Rpb24gfSBmcm9tICdAL2xpYi90cmFuc2xhdGlvbnMvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyVmlldywgVGltZUZvcm1hdCB9IGZyb20gJ0AvdHlwZXMnXG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2FsZW5kYXJDb250ZXh0VHlwZSB7XG5cdGN1cnJlbnREYXRlOiBEYXlqc1xuXHR2aWV3OiBDYWxlbmRhclZpZXdcblx0ZXZlbnRzOiBDYWxlbmRhckV2ZW50W11cblx0cmF3RXZlbnRzOiBDYWxlbmRhckV2ZW50W10gLy8gVW5wcm9jZXNzZWQgZXZlbnRzIGZvciBleHBvcnRcblx0aXNFdmVudEZvcm1PcGVuOiBib29sZWFuXG5cdHNlbGVjdGVkRXZlbnQ6IENhbGVuZGFyRXZlbnQgfCBudWxsXG5cdHNlbGVjdGVkRGF0ZTogRGF5anMgfCBudWxsXG5cdGZpcnN0RGF5T2ZXZWVrOiBudW1iZXIgLy8gMCBmb3IgU3VuZGF5LCAxIGZvciBNb25kYXksIGV0Yy5cblx0c2V0Q3VycmVudERhdGU6IChkYXRlOiBEYXlqcykgPT4gdm9pZFxuXHRzZWxlY3REYXRlOiAoZGF0ZTogRGF5anMpID0+IHZvaWRcblx0c2V0VmlldzogKHZpZXc6IENhbGVuZGFyVmlldykgPT4gdm9pZFxuXHRuZXh0UGVyaW9kOiAoKSA9PiB2b2lkXG5cdHByZXZQZXJpb2Q6ICgpID0+IHZvaWRcblx0dG9kYXk6ICgpID0+IHZvaWRcblx0YWRkRXZlbnQ6IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuXHR1cGRhdGVFdmVudDogKGV2ZW50SWQ6IHN0cmluZyB8IG51bWJlciwgZXZlbnQ6IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD4pID0+IHZvaWRcblx0dXBkYXRlUmVjdXJyaW5nRXZlbnQ6IChcblx0XHRldmVudDogQ2FsZW5kYXJFdmVudCxcblx0XHR1cGRhdGVzOiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+LFxuXHRcdG9wdGlvbnM6IFJlY3VycmVuY2VFZGl0T3B0aW9uc1xuXHQpID0+IHZvaWRcblx0ZGVsZXRlRXZlbnQ6IChldmVudElkOiBzdHJpbmcgfCBudW1iZXIpID0+IHZvaWRcblx0ZGVsZXRlUmVjdXJyaW5nRXZlbnQ6IChcblx0XHRldmVudDogQ2FsZW5kYXJFdmVudCxcblx0XHRvcHRpb25zOiBSZWN1cnJlbmNlRWRpdE9wdGlvbnNcblx0KSA9PiB2b2lkXG5cdG9wZW5FdmVudEZvcm06IChldmVudERhdGE/OiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+KSA9PiB2b2lkXG5cdGNsb3NlRXZlbnRGb3JtOiAoKSA9PiB2b2lkXG5cdGdldEV2ZW50c0ZvckRhdGVSYW5nZTogKHN0YXJ0RGF0ZTogRGF5anMsIGVuZERhdGU6IERheWpzKSA9PiBDYWxlbmRhckV2ZW50W11cblx0ZmluZFBhcmVudFJlY3VycmluZ0V2ZW50OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IENhbGVuZGFyRXZlbnQgfCBudWxsXG5cdHJlbmRlckV2ZW50PzogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiBSZWFjdC5SZWFjdE5vZGVcblx0b25FdmVudENsaWNrOiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0b25DZWxsQ2xpY2s6IChpbmZvOiBDZWxsSW5mbykgPT4gdm9pZFxuXHRpc0NlbGxEaXNhYmxlZD86IChpbmZvOiBDZWxsSW5mbykgPT4gYm9vbGVhblxuXHRjdXJyZW50TG9jYWxlPzogc3RyaW5nXG5cdHRpbWV6b25lPzogc3RyaW5nXG5cdGRpc2FibGVDZWxsQ2xpY2s/OiBib29sZWFuXG5cdGRpc2FibGVFdmVudENsaWNrPzogYm9vbGVhblxuXHRkaXNhYmxlRHJhZ0FuZERyb3A/OiBib29sZWFuXG5cdGRheU1heEV2ZW50czogbnVtYmVyXG5cdGV2ZW50U3BhY2luZzogbnVtYmVyXG5cdGV2ZW50SGVpZ2h0OiBudW1iZXJcblx0c3RpY2t5Vmlld0hlYWRlcjogYm9vbGVhblxuXHR2aWV3SGVhZGVyQ2xhc3NOYW1lOiBzdHJpbmdcblx0aGVhZGVyQ29tcG9uZW50PzogUmVhY3QuUmVhY3ROb2RlIC8vIE9wdGlvbmFsIGN1c3RvbSBoZWFkZXIgY29tcG9uZW50XG5cdGhlYWRlckNsYXNzTmFtZT86IHN0cmluZyAvLyBPcHRpb25hbCBjdXN0b20gaGVhZGVyIGNsYXNzXG5cdGJ1c2luZXNzSG91cnM/OiBCdXNpbmVzc0hvdXJzIHwgQnVzaW5lc3NIb3Vyc1tdXG5cdHJlbmRlckV2ZW50Rm9ybT86IChwcm9wczogRXZlbnRGb3JtUHJvcHMpID0+IFJlYWN0LlJlYWN0Tm9kZVxuXHQvLyBUcmFuc2xhdGlvbiBmdW5jdGlvblxuXHR0OiBUcmFuc2xhdG9yRnVuY3Rpb25cblx0dGltZUZvcm1hdDogVGltZUZvcm1hdFxuXHRjbGFzc2VzT3ZlcnJpZGU/OiBDYWxlbmRhckNsYXNzZXNPdmVycmlkZVxuXHRyZW5kZXJDdXJyZW50VGltZUluZGljYXRvcj86IChcblx0XHRwcm9wczogUmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3JQcm9wc1xuXHQpID0+IFJlYWN0LlJlYWN0Tm9kZVxuXHRyZW5kZXJIb3VyPzogKGRhdGU6IERheWpzKSA9PiBSZWFjdC5SZWFjdE5vZGVcblx0aGlkZU5vbkJ1c2luZXNzSG91cnM/OiBib29sZWFuXG5cdGhpZGVFeHBvcnRCdXR0b24/OiBib29sZWFuXG5cdGhpZGRlbkRheXM/OiBTZXQ8bnVtYmVyPlxuXHRzbG90RHVyYXRpb246IFNsb3REdXJhdGlvblxuXHRzY3JvbGxUaW1lPzogc3RyaW5nXG59XG5cbi8vIENhbGVuZGFyQ29udGV4dCBpcyBrZXB0IGZvciBpbnRlcm5hbCBQcm92aWRlciB1c2FnZVxuZXhwb3J0IGNvbnN0IENhbGVuZGFyQ29udGV4dDogUmVhY3QuQ29udGV4dDxDYWxlbmRhckNvbnRleHRUeXBlIHwgdW5kZWZpbmVkPiA9XG5cdGNyZWF0ZUNvbnRleHQ8Q2FsZW5kYXJDb250ZXh0VHlwZSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKVxuIiwKICAgICJpbXBvcnQgeyBjcmVhdGVDb250ZXh0IH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyQ29udGV4dFR5cGUgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcbmltcG9ydCB0eXBlIHsgQ2VsbEluZm8gfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBSZXNvdXJjZSB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvdHlwZXMnXG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb3VyY2VDYWxlbmRhckNvbnRleHRUeXBlIGV4dGVuZHMgQ2FsZW5kYXJDb250ZXh0VHlwZSB7XG5cdC8vIFJlc291cmNlLXNwZWNpZmljIHN0YXRlXG5cdHJlc291cmNlczogUmVzb3VyY2VbXVxuXG5cdC8vIFJlc291cmNlIHV0aWxpdGllc1xuXHRnZXRFdmVudHNGb3JSZXNvdXJjZTogKHJlc291cmNlSWQ6IHN0cmluZyB8IG51bWJlcikgPT4gQ2FsZW5kYXJFdmVudFtdXG5cdGdldEV2ZW50c0ZvclJlc291cmNlczogKHJlc291cmNlSWRzOiAoc3RyaW5nIHwgbnVtYmVyKVtdKSA9PiBDYWxlbmRhckV2ZW50W11cblx0Z2V0UmVzb3VyY2VCeUlkOiAoXG5cdFx0cmVzb3VyY2VJZDogc3RyaW5nIHwgbnVtYmVyIHwgdW5kZWZpbmVkXG5cdCkgPT4gUmVzb3VyY2UgfCB1bmRlZmluZWRcblxuXHQvLyBDcm9zcy1yZXNvdXJjZSBldmVudCB1dGlsaXRpZXNcblx0aXNFdmVudENyb3NzUmVzb3VyY2U6IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gYm9vbGVhblxuXHRnZXRFdmVudFJlc291cmNlSWRzOiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IChzdHJpbmcgfCBudW1iZXIpW11cblxuXHQvLyBBZGRpdGlvbmFsIHByb3BlcnRpZXMgZnJvbSBjYWxlbmRhciBjb250ZXh0XG5cdG9uRXZlbnRDbGljazogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG5cdG9uQ2VsbENsaWNrOiAoaW5mbzogQ2VsbEluZm8pID0+IHZvaWRcblx0cmVuZGVyUmVzb3VyY2U/OiAocmVzb3VyY2U6IFJlc291cmNlKSA9PiBSZWFjdC5SZWFjdE5vZGVcblx0b3JpZW50YXRpb246ICdob3Jpem9udGFsJyB8ICd2ZXJ0aWNhbCdcblx0d2Vla1ZpZXdHcmFudWxhcml0eTogJ2hvdXJseScgfCAnZGFpbHknXG59XG5cbi8vIFJlc291cmNlQ2FsZW5kYXJDb250ZXh0IGlzIGtlcHQgZm9yIGludGVybmFsIFByb3ZpZGVyIHVzYWdlXG5leHBvcnQgY29uc3QgUmVzb3VyY2VDYWxlbmRhckNvbnRleHQ6IFJlYWN0LkNvbnRleHQ8XG5cdFJlc291cmNlQ2FsZW5kYXJDb250ZXh0VHlwZSB8IHVuZGVmaW5lZFxuPiA9IGNyZWF0ZUNvbnRleHQ8UmVzb3VyY2VDYWxlbmRhckNvbnRleHRUeXBlIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpXG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJQcm92aWRlclByb3BzIH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L3Byb3ZpZGVyJ1xuaW1wb3J0IHR5cGUge1xuXHRDYWxlbmRhckNsYXNzZXNPdmVycmlkZSxcblx0Q2VsbEluZm8sXG5cdFJlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yUHJvcHMsXG5cdFNsb3REdXJhdGlvbixcbn0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci90eXBlcydcbmltcG9ydCB0eXBlIHsgUmVzb3VyY2UgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL3R5cGVzJ1xuaW1wb3J0IHsgdXNlQ2FsZW5kYXJFbmdpbmUgfSBmcm9tICdAL2hvb2tzL3VzZS1jYWxlbmRhci1lbmdpbmUnXG5pbXBvcnQgdHlwZSB7IERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBFVkVOVF9CQVJfSEVJR0hUIH0gZnJvbSAnQC9saWIvY29uc3RhbnRzJ1xuaW1wb3J0IHsgUmVzb3VyY2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICcuL2NvbnRleHQnXG5cbmNvbnN0IGdldEV2ZW50UmVzb3VyY2VJZHMgPSAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpOiAoc3RyaW5nIHwgbnVtYmVyKVtdID0+IHtcblx0aWYgKGV2ZW50LnJlc291cmNlSWRzKSB7XG5cdFx0cmV0dXJuIGV2ZW50LnJlc291cmNlSWRzXG5cdH1cblx0aWYgKGV2ZW50LnJlc291cmNlSWQgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBbZXZlbnQucmVzb3VyY2VJZF1cblx0fVxuXHRyZXR1cm4gW11cbn1cblxuaW50ZXJmYWNlIFJlc291cmNlQ2FsZW5kYXJQcm92aWRlclByb3BzIGV4dGVuZHMgQ2FsZW5kYXJQcm92aWRlclByb3BzIHtcblx0ZXZlbnRzPzogQ2FsZW5kYXJFdmVudFtdXG5cdHJlc291cmNlcz86IFJlc291cmNlW11cblx0cmVuZGVyUmVzb3VyY2U/OiAocmVzb3VyY2U6IFJlc291cmNlKSA9PiBSZWFjdC5SZWFjdE5vZGVcblx0Y2xhc3Nlc092ZXJyaWRlPzogQ2FsZW5kYXJDbGFzc2VzT3ZlcnJpZGVcblx0b3JpZW50YXRpb24/OiAnaG9yaXpvbnRhbCcgfCAndmVydGljYWwnXG5cdHdlZWtWaWV3R3JhbnVsYXJpdHk/OiAnaG91cmx5JyB8ICdkYWlseSdcblx0cmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3I/OiAoXG5cdFx0cHJvcHM6IFJlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yUHJvcHNcblx0KSA9PiBSZWFjdC5SZWFjdE5vZGVcblx0cmVuZGVySG91cj86IChkYXRlOiBEYXlqcykgPT4gUmVhY3QuUmVhY3ROb2RlXG5cdGhpZGVOb25CdXNpbmVzc0hvdXJzPzogYm9vbGVhblxuXHRzbG90RHVyYXRpb24/OiBTbG90RHVyYXRpb25cblx0c2Nyb2xsVGltZT86IHN0cmluZ1xufVxuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VDYWxlbmRhclByb3ZpZGVyOiBSZWFjdC5GQzxcblx0UmVzb3VyY2VDYWxlbmRhclByb3ZpZGVyUHJvcHNcbj4gPSAoe1xuXHRjaGlsZHJlbixcblx0ZXZlbnRzID0gW10sXG5cdHJlc291cmNlcyA9IFtdLFxuXHRmaXJzdERheU9mV2VlayA9IDAsXG5cdGluaXRpYWxWaWV3ID0gJ21vbnRoJyxcblx0aW5pdGlhbERhdGUsXG5cdHJlbmRlckV2ZW50LFxuXHRvbkV2ZW50Q2xpY2ssXG5cdG9uQ2VsbENsaWNrLFxuXHRpc0NlbGxEaXNhYmxlZCxcblx0b25WaWV3Q2hhbmdlLFxuXHRvbkV2ZW50QWRkLFxuXHRvbkV2ZW50VXBkYXRlLFxuXHRvbkV2ZW50RGVsZXRlLFxuXHRvbkRhdGVDaGFuZ2UsXG5cdGxvY2FsZSxcblx0dGltZXpvbmUsXG5cdGRpc2FibGVDZWxsQ2xpY2ssXG5cdGRpc2FibGVFdmVudENsaWNrLFxuXHRkaXNhYmxlRHJhZ0FuZERyb3AsXG5cdGRheU1heEV2ZW50cyxcblx0ZXZlbnRTcGFjaW5nID0gMSxcblx0ZXZlbnRIZWlnaHQgPSBFVkVOVF9CQVJfSEVJR0hULFxuXHRzdGlja3lWaWV3SGVhZGVyID0gdHJ1ZSxcblx0dmlld0hlYWRlckNsYXNzTmFtZSA9ICcnLFxuXHRoZWFkZXJDb21wb25lbnQsXG5cdGhlYWRlckNsYXNzTmFtZSxcblx0dHJhbnNsYXRpb25zLFxuXHR0cmFuc2xhdG9yLFxuXHRyZW5kZXJSZXNvdXJjZSxcblx0cmVuZGVyRXZlbnRGb3JtLFxuXHRidXNpbmVzc0hvdXJzLFxuXHR0aW1lRm9ybWF0ID0gJzEyLWhvdXInLFxuXHRjbGFzc2VzT3ZlcnJpZGUsXG5cdG9yaWVudGF0aW9uID0gJ2hvcml6b250YWwnLFxuXHRyZW5kZXJDdXJyZW50VGltZUluZGljYXRvcixcblx0cmVuZGVySG91cixcblx0aGlkZU5vbkJ1c2luZXNzSG91cnMgPSBmYWxzZSxcblx0aGlkZUV4cG9ydEJ1dHRvbiA9IGZhbHNlLFxuXHRoaWRkZW5EYXlzLFxuXHR3ZWVrVmlld0dyYW51bGFyaXR5ID0gJ2hvdXJseScsXG5cdHNsb3REdXJhdGlvbiA9IDYwLFxuXHRzY3JvbGxUaW1lLFxufSkgPT4ge1xuXHQvLyBVc2UgdGhlIGNhbGVuZGFyIGVuZ2luZVxuXHRjb25zdCBjYWxlbmRhckVuZ2luZSA9IHVzZUNhbGVuZGFyRW5naW5lKHtcblx0XHRldmVudHMsXG5cdFx0Zmlyc3REYXlPZldlZWssXG5cdFx0aW5pdGlhbFZpZXcsXG5cdFx0aW5pdGlhbERhdGUsXG5cdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRvbkV2ZW50QWRkLFxuXHRcdG9uRXZlbnRVcGRhdGUsXG5cdFx0b25FdmVudERlbGV0ZSxcblx0XHRvbkRhdGVDaGFuZ2UsXG5cdFx0b25WaWV3Q2hhbmdlOiBvblZpZXdDaGFuZ2UsXG5cdFx0bG9jYWxlLFxuXHRcdHRpbWV6b25lLFxuXHRcdHRyYW5zbGF0aW9ucyxcblx0XHR0cmFuc2xhdG9yLFxuXHR9KVxuXG5cdC8vIEV2ZW50IHV0aWxpdGllcyDigJQgYm90aCBmaWx0ZXJzIGdvIHRocm91Z2ggZ2V0RXZlbnRSZXNvdXJjZUlkcyBzbyBzaW5nbGVcblx0Ly8gYW5kIG11bHRpLXJlc291cmNlIGV2ZW50cyBhcmUgaGFuZGxlZCB1bmlmb3JtbHkuXG5cdGNvbnN0IGdldEV2ZW50c0ZvclJlc291cmNlID0gdXNlQ2FsbGJhY2soXG5cdFx0KHJlc291cmNlSWQ6IHN0cmluZyB8IG51bWJlcik6IENhbGVuZGFyRXZlbnRbXSA9PlxuXHRcdFx0Y2FsZW5kYXJFbmdpbmUuZXZlbnRzLmZpbHRlcigoZSkgPT5cblx0XHRcdFx0Z2V0RXZlbnRSZXNvdXJjZUlkcyhlKS5pbmNsdWRlcyhyZXNvdXJjZUlkKVxuXHRcdFx0KSxcblx0XHRbY2FsZW5kYXJFbmdpbmUuZXZlbnRzXVxuXHQpXG5cblx0Y29uc3QgZ2V0RXZlbnRzRm9yUmVzb3VyY2VzID0gdXNlQ2FsbGJhY2soXG5cdFx0KHJlc291cmNlSWRzOiAoc3RyaW5nIHwgbnVtYmVyKVtdKTogQ2FsZW5kYXJFdmVudFtdID0+XG5cdFx0XHRjYWxlbmRhckVuZ2luZS5ldmVudHMuZmlsdGVyKChlKSA9PlxuXHRcdFx0XHRnZXRFdmVudFJlc291cmNlSWRzKGUpLnNvbWUoKGlkKSA9PiByZXNvdXJjZUlkcy5pbmNsdWRlcyhpZCkpXG5cdFx0XHQpLFxuXHRcdFtjYWxlbmRhckVuZ2luZS5ldmVudHNdXG5cdClcblxuXHRjb25zdCBnZXRSZXNvdXJjZUJ5SWQgPSB1c2VDYWxsYmFjayhcblx0XHQocmVzb3VyY2VJZDogc3RyaW5nIHwgbnVtYmVyIHwgdW5kZWZpbmVkKTogUmVzb3VyY2UgfCB1bmRlZmluZWQgPT4ge1xuXHRcdFx0aWYgKHJlc291cmNlSWQgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRyZXR1cm4gdW5kZWZpbmVkXG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcmVzb3VyY2VzLmZpbmQoKHJlc291cmNlKSA9PiByZXNvdXJjZS5pZCA9PT0gcmVzb3VyY2VJZClcblx0XHR9LFxuXHRcdFtyZXNvdXJjZXNdXG5cdClcblxuXHQvLyBDcm9zcy1yZXNvdXJjZSBldmVudCB1dGlsaXRpZXNcblx0Y29uc3QgaXNFdmVudENyb3NzUmVzb3VyY2UgPSB1c2VDYWxsYmFjaygoZXZlbnQ6IENhbGVuZGFyRXZlbnQpOiBib29sZWFuID0+IHtcblx0XHRyZXR1cm4gQm9vbGVhbihldmVudC5yZXNvdXJjZUlkcyAmJiBldmVudC5yZXNvdXJjZUlkcy5sZW5ndGggPiAxKVxuXHR9LCBbXSlcblxuXHQvLyBDdXN0b20gaGFuZGxlcnNcblx0Y29uc3QgZWRpdEV2ZW50ID0gdXNlQ2FsbGJhY2soXG5cdFx0KGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB7XG5cdFx0XHRjYWxlbmRhckVuZ2luZS5zZXRTZWxlY3RlZEV2ZW50KGV2ZW50KVxuXHRcdFx0Y2FsZW5kYXJFbmdpbmUuc2V0SXNFdmVudEZvcm1PcGVuKHRydWUpXG5cdFx0fSxcblx0XHRbY2FsZW5kYXJFbmdpbmVdXG5cdClcblxuXHRjb25zdCBoYW5kbGVFdmVudENsaWNrID0gdXNlQ2FsbGJhY2soXG5cdFx0KGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB7XG5cdFx0XHRpZiAoZGlzYWJsZUV2ZW50Q2xpY2spIHtcblx0XHRcdFx0cmV0dXJuXG5cdFx0XHR9XG5cdFx0XHRpZiAob25FdmVudENsaWNrKSB7XG5cdFx0XHRcdG9uRXZlbnRDbGljayhldmVudClcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGVkaXRFdmVudChldmVudClcblx0XHRcdH1cblx0XHR9LFxuXHRcdFtkaXNhYmxlRXZlbnRDbGljaywgb25FdmVudENsaWNrLCBlZGl0RXZlbnRdXG5cdClcblxuXHRjb25zdCBoYW5kbGVEYXRlQ2xpY2sgPSB1c2VDYWxsYmFjayhcblx0XHQoaW5mbzogQ2VsbEluZm8pID0+IHtcblx0XHRcdGlmIChkaXNhYmxlQ2VsbENsaWNrKSB7XG5cdFx0XHRcdHJldHVyblxuXHRcdFx0fVxuXG5cdFx0XHRpZiAob25DZWxsQ2xpY2spIHtcblx0XHRcdFx0b25DZWxsQ2xpY2soaW5mbylcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IG5ld0V2ZW50OiBDYWxlbmRhckV2ZW50ID0ge1xuXHRcdFx0XHRcdHRpdGxlOiBjYWxlbmRhckVuZ2luZS50KCduZXdFdmVudCcpLFxuXHRcdFx0XHRcdHN0YXJ0OiBpbmZvLnN0YXJ0LFxuXHRcdFx0XHRcdGVuZDogaW5mby5lbmQsXG5cdFx0XHRcdFx0ZGVzY3JpcHRpb246ICcnLFxuXHRcdFx0XHRcdGFsbERheTogZmFsc2UsXG5cdFx0XHRcdH0gYXMgQ2FsZW5kYXJFdmVudFxuXG5cdFx0XHRcdGlmIChpbmZvLnJlc291cmNlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRuZXdFdmVudC5yZXNvdXJjZUlkID0gaW5mby5yZXNvdXJjZS5pZFxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y2FsZW5kYXJFbmdpbmUuc2V0U2VsZWN0ZWRFdmVudChuZXdFdmVudClcblx0XHRcdFx0Y2FsZW5kYXJFbmdpbmUuc2V0U2VsZWN0ZWREYXRlKGluZm8uc3RhcnQpXG5cdFx0XHRcdGNhbGVuZGFyRW5naW5lLnNldElzRXZlbnRGb3JtT3Blbih0cnVlKVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0W29uQ2VsbENsaWNrLCBkaXNhYmxlQ2VsbENsaWNrLCBjYWxlbmRhckVuZ2luZV1cblx0KVxuXG5cdC8vIENyZWF0ZSB0aGUgY29udGV4dCB2YWx1ZVxuXHRjb25zdCBjb250ZXh0VmFsdWUgPSB1c2VNZW1vKFxuXHRcdCgpID0+ICh7XG5cdFx0XHQuLi5jYWxlbmRhckVuZ2luZSxcblx0XHRcdC8vIFJlc291cmNlLXNwZWNpZmljIHN0YXRlXG5cdFx0XHRyZXNvdXJjZXMsXG5cdFx0XHQvLyBSZXNvdXJjZSB1dGlsaXRpZXNcblx0XHRcdGdldEV2ZW50c0ZvclJlc291cmNlLFxuXHRcdFx0Z2V0RXZlbnRzRm9yUmVzb3VyY2VzLFxuXHRcdFx0Z2V0UmVzb3VyY2VCeUlkLFxuXHRcdFx0aXNFdmVudENyb3NzUmVzb3VyY2UsXG5cdFx0XHRnZXRFdmVudFJlc291cmNlSWRzLFxuXHRcdFx0Ly8gT3ZlcnJpZGUgaGFuZGxlcnNcblx0XHRcdG9uRXZlbnRDbGljazogaGFuZGxlRXZlbnRDbGljayxcblx0XHRcdG9uQ2VsbENsaWNrOiBoYW5kbGVEYXRlQ2xpY2ssXG5cdFx0XHQvLyBQYXNzLXRocm91Z2ggcHJvcHNcblx0XHRcdGlzQ2VsbERpc2FibGVkLFxuXHRcdFx0cmVuZGVyRXZlbnQsXG5cdFx0XHRyZW5kZXJSZXNvdXJjZSxcblx0XHRcdHJlbmRlckV2ZW50Rm9ybSxcblx0XHRcdGhlYWRlckNvbXBvbmVudCxcblx0XHRcdGhlYWRlckNsYXNzTmFtZSxcblx0XHRcdGxvY2FsZSxcblx0XHRcdHRpbWV6b25lLFxuXHRcdFx0ZGlzYWJsZUNlbGxDbGljayxcblx0XHRcdGRpc2FibGVFdmVudENsaWNrLFxuXHRcdFx0ZGlzYWJsZURyYWdBbmREcm9wLFxuXHRcdFx0ZGF5TWF4RXZlbnRzLFxuXHRcdFx0ZXZlbnRTcGFjaW5nLFxuXHRcdFx0ZXZlbnRIZWlnaHQsXG5cdFx0XHRzdGlja3lWaWV3SGVhZGVyLFxuXHRcdFx0dmlld0hlYWRlckNsYXNzTmFtZSxcblx0XHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0XHR0aW1lRm9ybWF0LFxuXHRcdFx0Y2xhc3Nlc092ZXJyaWRlLFxuXHRcdFx0b3JpZW50YXRpb24sXG5cdFx0XHRyZW5kZXJDdXJyZW50VGltZUluZGljYXRvcixcblx0XHRcdHJlbmRlckhvdXIsXG5cdFx0XHRoaWRlTm9uQnVzaW5lc3NIb3Vycyxcblx0XHRcdGhpZGVFeHBvcnRCdXR0b24sXG5cdFx0XHRoaWRkZW5EYXlzLFxuXHRcdFx0d2Vla1ZpZXdHcmFudWxhcml0eSxcblx0XHRcdHNsb3REdXJhdGlvbixcblx0XHRcdHNjcm9sbFRpbWUsXG5cdFx0fSksXG5cdFx0W1xuXHRcdFx0Y2FsZW5kYXJFbmdpbmUsXG5cdFx0XHRyZXNvdXJjZXMsXG5cdFx0XHRnZXRFdmVudHNGb3JSZXNvdXJjZSxcblx0XHRcdGdldEV2ZW50c0ZvclJlc291cmNlcyxcblx0XHRcdGdldFJlc291cmNlQnlJZCxcblx0XHRcdGlzRXZlbnRDcm9zc1Jlc291cmNlLFxuXHRcdFx0aGFuZGxlRXZlbnRDbGljayxcblx0XHRcdGhhbmRsZURhdGVDbGljayxcblx0XHRcdGlzQ2VsbERpc2FibGVkLFxuXHRcdFx0cmVuZGVyRXZlbnQsXG5cdFx0XHRyZW5kZXJSZXNvdXJjZSxcblx0XHRcdHJlbmRlckV2ZW50Rm9ybSxcblx0XHRcdGxvY2FsZSxcblx0XHRcdHRpbWV6b25lLFxuXHRcdFx0ZGlzYWJsZUNlbGxDbGljayxcblx0XHRcdGRpc2FibGVFdmVudENsaWNrLFxuXHRcdFx0ZGlzYWJsZURyYWdBbmREcm9wLFxuXHRcdFx0ZGF5TWF4RXZlbnRzLFxuXHRcdFx0ZXZlbnRTcGFjaW5nLFxuXHRcdFx0ZXZlbnRIZWlnaHQsXG5cdFx0XHRzdGlja3lWaWV3SGVhZGVyLFxuXHRcdFx0dmlld0hlYWRlckNsYXNzTmFtZSxcblx0XHRcdGhlYWRlckNvbXBvbmVudCxcblx0XHRcdGhlYWRlckNsYXNzTmFtZSxcblx0XHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0XHR0aW1lRm9ybWF0LFxuXHRcdFx0Y2xhc3Nlc092ZXJyaWRlLFxuXHRcdFx0b3JpZW50YXRpb24sXG5cdFx0XHRyZW5kZXJDdXJyZW50VGltZUluZGljYXRvcixcblx0XHRcdHJlbmRlckhvdXIsXG5cdFx0XHRoaWRlTm9uQnVzaW5lc3NIb3Vycyxcblx0XHRcdGhpZGVFeHBvcnRCdXR0b24sXG5cdFx0XHRoaWRkZW5EYXlzLFxuXHRcdFx0d2Vla1ZpZXdHcmFudWxhcml0eSxcblx0XHRcdHNsb3REdXJhdGlvbixcblx0XHRcdHNjcm9sbFRpbWUsXG5cdFx0XVxuXHQpXG5cblx0cmV0dXJuIChcblx0XHQ8UmVzb3VyY2VDYWxlbmRhckNvbnRleHQuUHJvdmlkZXIgdmFsdWU9e2NvbnRleHRWYWx1ZX0+XG5cdFx0XHR7Y2hpbGRyZW59XG5cdFx0PC9SZXNvdXJjZUNhbGVuZGFyQ29udGV4dC5Qcm92aWRlcj5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VNZW1vLCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IEJ1c2luZXNzSG91cnMsIENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IFJlY3VycmVuY2VFZGl0T3B0aW9ucyB9IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS90eXBlcydcbmltcG9ydCB7XG5cdGRlbGV0ZVJlY3VycmluZ0V2ZW50IGFzIGRlbGV0ZVJlY3VycmluZ0V2ZW50SW1wbCxcblx0Z2VuZXJhdGVSZWN1cnJpbmdFdmVudHMsXG5cdHVwZGF0ZVJlY3VycmluZ0V2ZW50IGFzIHVwZGF0ZVJlY3VycmluZ0V2ZW50SW1wbCxcbn0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL3V0aWxzL3JlY3VycmVuY2UtaGFuZGxlcidcbmltcG9ydCBkYXlqcywge1xuXHR0eXBlIERheWpzLFxuXHR0eXBlIE1hbmlwdWxhdGVUeXBlLFxufSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGRlZmF1bHRUcmFuc2xhdGlvbnMgfSBmcm9tICdAL2xpYi90cmFuc2xhdGlvbnMvZGVmYXVsdCdcbmltcG9ydCB0eXBlIHsgVHJhbnNsYXRpb25zLCBUcmFuc2xhdG9yRnVuY3Rpb24gfSBmcm9tICdAL2xpYi90cmFuc2xhdGlvbnMvdHlwZXMnXG5pbXBvcnQgeyBnZXRNb250aFdlZWtzLCBnZXRXZWVrRGF5cyB9IGZyb20gJ0AvbGliL3V0aWxzL2RhdGUtdXRpbHMnXG5pbXBvcnQgeyBldmVudE92ZXJsYXBzUmFuZ2UgfSBmcm9tICdAL2xpYi91dGlscy9ldmVudC11dGlscydcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJWaWV3IH0gZnJvbSAnQC90eXBlcydcbmltcG9ydCB7IERBWV9NQVhfRVZFTlRTX0RFRkFVTFQgfSBmcm9tICcuLi9saWIvY29uc3RhbnRzJ1xuXG5leHBvcnQgaW50ZXJmYWNlIENhbGVuZGFyRW5naW5lQ29uZmlnIHtcblx0ZXZlbnRzOiBDYWxlbmRhckV2ZW50W11cblx0Zmlyc3REYXlPZldlZWs6IG51bWJlclxuXHRpbml0aWFsVmlldz86IENhbGVuZGFyVmlld1xuXHRpbml0aWFsRGF0ZT86IERheWpzXG5cdGJ1c2luZXNzSG91cnM/OiBCdXNpbmVzc0hvdXJzIHwgQnVzaW5lc3NIb3Vyc1tdXG5cdG9uRXZlbnRBZGQ/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0b25FdmVudFVwZGF0ZT86IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuXHRvbkV2ZW50RGVsZXRlPzogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG5cdG9uRGF0ZUNoYW5nZT86IChkYXRlOiBEYXlqcywgcmFuZ2U6IHsgc3RhcnQ6IERheWpzOyBlbmQ6IERheWpzIH0pID0+IHZvaWRcblx0b25WaWV3Q2hhbmdlPzogKHZpZXc6IENhbGVuZGFyVmlldykgPT4gdm9pZFxuXHRsb2NhbGU/OiBzdHJpbmdcblx0dGltZXpvbmU/OiBzdHJpbmdcblx0dHJhbnNsYXRpb25zPzogVHJhbnNsYXRpb25zXG5cdHRyYW5zbGF0b3I/OiBUcmFuc2xhdG9yRnVuY3Rpb25cbn1cblxuZXhwb3J0IGludGVyZmFjZSBDYWxlbmRhckVuZ2luZVJldHVybiB7XG5cdGN1cnJlbnREYXRlOiBEYXlqc1xuXHR2aWV3OiBDYWxlbmRhclZpZXdcblx0ZXZlbnRzOiBDYWxlbmRhckV2ZW50W11cblx0cmF3RXZlbnRzOiBDYWxlbmRhckV2ZW50W11cblx0aXNFdmVudEZvcm1PcGVuOiBib29sZWFuXG5cdHNlbGVjdGVkRXZlbnQ6IENhbGVuZGFyRXZlbnQgfCBudWxsXG5cdHNlbGVjdGVkRGF0ZTogRGF5anMgfCBudWxsXG5cdGZpcnN0RGF5T2ZXZWVrOiBudW1iZXJcblx0ZGF5TWF4RXZlbnRzOiBudW1iZXJcblx0Y3VycmVudExvY2FsZTogc3RyaW5nXG5cdGJ1c2luZXNzSG91cnM/OiBCdXNpbmVzc0hvdXJzIHwgQnVzaW5lc3NIb3Vyc1tdXG5cdHNldEN1cnJlbnREYXRlOiAoZGF0ZTogRGF5anMpID0+IHZvaWRcblx0c2VsZWN0RGF0ZTogKGRhdGU6IERheWpzKSA9PiB2b2lkXG5cdHNldFZpZXc6ICh2aWV3OiBDYWxlbmRhclZpZXcpID0+IHZvaWRcblx0bmV4dFBlcmlvZDogKCkgPT4gdm9pZFxuXHRwcmV2UGVyaW9kOiAoKSA9PiB2b2lkXG5cdHRvZGF5OiAoKSA9PiB2b2lkXG5cdGFkZEV2ZW50OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0dXBkYXRlRXZlbnQ6IChldmVudElkOiBzdHJpbmcgfCBudW1iZXIsIGV2ZW50OiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+KSA9PiB2b2lkXG5cdHVwZGF0ZVJlY3VycmluZ0V2ZW50OiAoXG5cdFx0ZXZlbnQ6IENhbGVuZGFyRXZlbnQsXG5cdFx0dXBkYXRlczogUGFydGlhbDxDYWxlbmRhckV2ZW50Pixcblx0XHRvcHRpb25zOiBSZWN1cnJlbmNlRWRpdE9wdGlvbnNcblx0KSA9PiB2b2lkXG5cdGRlbGV0ZUV2ZW50OiAoZXZlbnRJZDogc3RyaW5nIHwgbnVtYmVyKSA9PiB2b2lkXG5cdGRlbGV0ZVJlY3VycmluZ0V2ZW50OiAoXG5cdFx0ZXZlbnQ6IENhbGVuZGFyRXZlbnQsXG5cdFx0b3B0aW9uczogUmVjdXJyZW5jZUVkaXRPcHRpb25zXG5cdCkgPT4gdm9pZFxuXHRvcGVuRXZlbnRGb3JtOiAoZXZlbnREYXRhPzogUGFydGlhbDxDYWxlbmRhckV2ZW50PikgPT4gdm9pZFxuXHRjbG9zZUV2ZW50Rm9ybTogKCkgPT4gdm9pZFxuXHRzZXRTZWxlY3RlZEV2ZW50OiBSZWFjdC5EaXNwYXRjaDxSZWFjdC5TZXRTdGF0ZUFjdGlvbjxDYWxlbmRhckV2ZW50IHwgbnVsbD4+XG5cdHNldElzRXZlbnRGb3JtT3BlbjogUmVhY3QuRGlzcGF0Y2g8UmVhY3QuU2V0U3RhdGVBY3Rpb248Ym9vbGVhbj4+XG5cdHNldFNlbGVjdGVkRGF0ZTogUmVhY3QuRGlzcGF0Y2g8UmVhY3QuU2V0U3RhdGVBY3Rpb248RGF5anMgfCBudWxsPj5cblx0Z2V0RXZlbnRzRm9yRGF0ZVJhbmdlOiAoc3RhcnREYXRlOiBEYXlqcywgZW5kRGF0ZTogRGF5anMpID0+IENhbGVuZGFyRXZlbnRbXVxuXHRmaW5kUGFyZW50UmVjdXJyaW5nRXZlbnQ6IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gQ2FsZW5kYXJFdmVudCB8IG51bGxcblx0dDogVHJhbnNsYXRvckZ1bmN0aW9uXG59XG5cbmNvbnN0IFZJRVdfVU5JVFM6IFJlY29yZDxDYWxlbmRhclZpZXcsIE1hbmlwdWxhdGVUeXBlPiA9IHtcblx0ZGF5OiAnZGF5Jyxcblx0d2VlazogJ3dlZWsnLFxuXHRtb250aDogJ21vbnRoJyxcblx0eWVhcjogJ3llYXInLFxufVxuXG5leHBvcnQgY29uc3QgY2FsY3VsYXRlVmlld1JhbmdlID0gKFxuXHRkYXRlOiBEYXlqcyxcblx0dmlldzogQ2FsZW5kYXJWaWV3LFxuXHRmaXJzdERheU9mV2VlazogbnVtYmVyXG4pOiB7IHN0YXJ0OiBEYXlqczsgZW5kOiBEYXlqcyB9ID0+IHtcblx0aWYgKHZpZXcgPT09ICdkYXknIHx8IHZpZXcgPT09ICd5ZWFyJykge1xuXHRcdHJldHVybiB7IHN0YXJ0OiBkYXRlLnN0YXJ0T2YodmlldyksIGVuZDogZGF0ZS5lbmRPZih2aWV3KSB9XG5cdH1cblx0aWYgKHZpZXcgPT09ICd3ZWVrJykge1xuXHRcdGNvbnN0IGRheXMgPSBnZXRXZWVrRGF5cyhkYXRlLCBmaXJzdERheU9mV2Vlaylcblx0XHRyZXR1cm4geyBzdGFydDogZGF5c1swXS5zdGFydE9mKCdkYXknKSwgZW5kOiBkYXlzWzZdLmVuZE9mKCdkYXknKSB9XG5cdH1cblx0Ly8gbW9udGggdmlldzogNiB3ZWVrcyDDlyA3IGRheXNcblx0Y29uc3Qgd2Vla3MgPSBnZXRNb250aFdlZWtzKGRhdGUsIGZpcnN0RGF5T2ZXZWVrKVxuXHRyZXR1cm4geyBzdGFydDogd2Vla3NbMF1bMF0uc3RhcnRPZignZGF5JyksIGVuZDogd2Vla3NbNV1bNl0uZW5kT2YoJ2RheScpIH1cbn1cblxuZXhwb3J0IGNvbnN0IHVzZUNhbGVuZGFyRW5naW5lID0gKFxuXHRjb25maWc6IENhbGVuZGFyRW5naW5lQ29uZmlnXG4pOiBDYWxlbmRhckVuZ2luZVJldHVybiA9PiB7XG5cdGNvbnN0IHtcblx0XHRldmVudHMgPSBbXSxcblx0XHRmaXJzdERheU9mV2VlayA9IDAsXG5cdFx0aW5pdGlhbFZpZXcgPSAnbW9udGgnLFxuXHRcdGluaXRpYWxEYXRlID0gZGF5anMoKSxcblx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdG9uRXZlbnRBZGQsXG5cdFx0b25FdmVudFVwZGF0ZSxcblx0XHRvbkV2ZW50RGVsZXRlLFxuXHRcdG9uRGF0ZUNoYW5nZSxcblx0XHRvblZpZXdDaGFuZ2UsXG5cdFx0bG9jYWxlLFxuXHRcdHRpbWV6b25lLFxuXHRcdHRyYW5zbGF0aW9ucyxcblx0XHR0cmFuc2xhdG9yLFxuXHR9ID0gY29uZmlnXG5cblx0Y29uc3QgW2N1cnJlbnREYXRlLCBzZXRDdXJyZW50RGF0ZV0gPSB1c2VTdGF0ZTxEYXlqcz4oXG5cdFx0ZGF5anMuaXNEYXlqcyhpbml0aWFsRGF0ZSkgPyBpbml0aWFsRGF0ZSA6IGRheWpzKGluaXRpYWxEYXRlKVxuXHQpXG5cdGNvbnN0IFt2aWV3LCBzZXRWaWV3XSA9IHVzZVN0YXRlPENhbGVuZGFyVmlldz4oaW5pdGlhbFZpZXcpXG5cdGNvbnN0IFtjdXJyZW50RXZlbnRzLCBzZXRDdXJyZW50RXZlbnRzXSA9IHVzZVN0YXRlPENhbGVuZGFyRXZlbnRbXT4oZXZlbnRzKVxuXHRjb25zdCBbaXNFdmVudEZvcm1PcGVuLCBzZXRJc0V2ZW50Rm9ybU9wZW5dID0gdXNlU3RhdGUoZmFsc2UpXG5cdGNvbnN0IFtzZWxlY3RlZEV2ZW50LCBzZXRTZWxlY3RlZEV2ZW50XSA9IHVzZVN0YXRlPENhbGVuZGFyRXZlbnQgfCBudWxsPihudWxsKVxuXHRjb25zdCBbc2VsZWN0ZWREYXRlLCBzZXRTZWxlY3RlZERhdGVdID0gdXNlU3RhdGU8RGF5anMgfCBudWxsPihudWxsKVxuXHRjb25zdCBbY3VycmVudExvY2FsZSwgc2V0Q3VycmVudExvY2FsZV0gPSB1c2VTdGF0ZShsb2NhbGUgfHwgJ2VuJylcblx0Y29uc3QgbGFzdEV2ZW50c1Byb3AgPSB1c2VSZWYoZXZlbnRzKVxuXHRjb25zdCBsYXN0VGltZXpvbmVQcm9wID0gdXNlUmVmKHRpbWV6b25lKVxuXHRjb25zdCBsYXN0TG9jYWxlUHJvcCA9IHVzZVJlZjxzdHJpbmcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZClcblxuXHRjb25zdCB0OiBUcmFuc2xhdG9yRnVuY3Rpb24gPSB1c2VNZW1vKCgpID0+IHtcblx0XHRpZiAodHJhbnNsYXRvcikgcmV0dXJuIHRyYW5zbGF0b3Jcblx0XHRjb25zdCBkaWN0ID0gdHJhbnNsYXRpb25zIHx8IGRlZmF1bHRUcmFuc2xhdGlvbnNcblx0XHRyZXR1cm4gKGtleTogc3RyaW5nKSA9PiBkaWN0W2tleSBhcyBrZXlvZiBUcmFuc2xhdGlvbnNdIHx8IGtleVxuXHR9LCBbdHJhbnNsYXRpb25zLCB0cmFuc2xhdG9yXSlcblxuXHRjb25zdCBnZXRFdmVudHNGb3JEYXRlUmFuZ2UgPSB1c2VDYWxsYmFjayhcblx0XHQoc3RhcnREYXRlOiBEYXlqcywgZW5kRGF0ZTogRGF5anMpOiBDYWxlbmRhckV2ZW50W10gPT4ge1xuXHRcdFx0Y29uc3QgYWxsRXZlbnRzOiBDYWxlbmRhckV2ZW50W10gPSBbXVxuXG5cdFx0XHRmb3IgKGNvbnN0IGV2ZW50IG9mIGN1cnJlbnRFdmVudHMpIHtcblx0XHRcdFx0aWYgKGV2ZW50LnJydWxlKSB7XG5cdFx0XHRcdFx0YWxsRXZlbnRzLnB1c2goXG5cdFx0XHRcdFx0XHQuLi5nZW5lcmF0ZVJlY3VycmluZ0V2ZW50cyh7XG5cdFx0XHRcdFx0XHRcdGV2ZW50LFxuXHRcdFx0XHRcdFx0XHRjdXJyZW50RXZlbnRzLFxuXHRcdFx0XHRcdFx0XHRzdGFydERhdGUsXG5cdFx0XHRcdFx0XHRcdGVuZERhdGUsXG5cdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdClcblx0XHRcdFx0fSBlbHNlIGlmIChldmVudE92ZXJsYXBzUmFuZ2UoZXZlbnQsIHN0YXJ0RGF0ZSwgZW5kRGF0ZSkpIHtcblx0XHRcdFx0XHRhbGxFdmVudHMucHVzaChldmVudClcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGFsbEV2ZW50c1xuXHRcdH0sXG5cdFx0W2N1cnJlbnRFdmVudHNdXG5cdClcblxuXHRjb25zdCBnZXRDdXJyZW50Vmlld1JhbmdlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuXHRcdHJldHVybiBjYWxjdWxhdGVWaWV3UmFuZ2UoY3VycmVudERhdGUsIHZpZXcsIGZpcnN0RGF5T2ZXZWVrKVxuXHR9LCBbY3VycmVudERhdGUsIHZpZXcsIGZpcnN0RGF5T2ZXZWVrXSlcblxuXHRjb25zdCBwcm9jZXNzZWRFdmVudHMgPSB1c2VNZW1vKCgpID0+IHtcblx0XHRjb25zdCB7IHN0YXJ0LCBlbmQgfSA9IGdldEN1cnJlbnRWaWV3UmFuZ2UoKVxuXHRcdHJldHVybiBnZXRFdmVudHNGb3JEYXRlUmFuZ2Uoc3RhcnQsIGVuZClcblx0fSwgW2dldEV2ZW50c0ZvckRhdGVSYW5nZSwgZ2V0Q3VycmVudFZpZXdSYW5nZV0pXG5cblx0dXNlRWZmZWN0KCgpID0+IHtcblx0XHRpZiAoZXZlbnRzICE9PSBsYXN0RXZlbnRzUHJvcC5jdXJyZW50KSB7XG5cdFx0XHRzZXRDdXJyZW50RXZlbnRzKGV2ZW50cylcblx0XHRcdGxhc3RFdmVudHNQcm9wLmN1cnJlbnQgPSBldmVudHNcblx0XHR9XG5cdH0sIFtldmVudHNdKVxuXG5cdHVzZUVmZmVjdCgoKSA9PiB7XG5cdFx0aWYgKGxvY2FsZSAmJiBsb2NhbGUgIT09IGxhc3RMb2NhbGVQcm9wLmN1cnJlbnQpIHtcblx0XHRcdHNldEN1cnJlbnRMb2NhbGUobG9jYWxlKVxuXHRcdFx0ZGF5anMubG9jYWxlKGxvY2FsZSlcblx0XHRcdHNldEN1cnJlbnREYXRlKChwcmV2RGF0ZSkgPT4gcHJldkRhdGUubG9jYWxlKGxvY2FsZSkpXG5cdFx0XHRsYXN0TG9jYWxlUHJvcC5jdXJyZW50ID0gbG9jYWxlXG5cdFx0fVxuXHR9LCBbbG9jYWxlXSlcblxuXHR1c2VFZmZlY3QoKCkgPT4ge1xuXHRcdGlmICh0aW1lem9uZSAmJiB0aW1lem9uZSAhPT0gbGFzdFRpbWV6b25lUHJvcC5jdXJyZW50KSB7XG5cdFx0XHRkYXlqcy50ei5zZXREZWZhdWx0KHRpbWV6b25lKVxuXHRcdFx0c2V0Q3VycmVudERhdGUoKHByZXYpID0+IHByZXYudHoodGltZXpvbmUpKVxuXHRcdFx0c2V0Q3VycmVudEV2ZW50cygocHJldikgPT5cblx0XHRcdFx0cHJldi5tYXAoKGUpID0+ICh7XG5cdFx0XHRcdFx0Li4uZSxcblx0XHRcdFx0XHRzdGFydDogZS5zdGFydC50eih0aW1lem9uZSksXG5cdFx0XHRcdFx0ZW5kOiBlLmVuZC50eih0aW1lem9uZSksXG5cdFx0XHRcdH0pKVxuXHRcdFx0KVxuXHRcdFx0bGFzdFRpbWV6b25lUHJvcC5jdXJyZW50ID0gdGltZXpvbmVcblx0XHR9XG5cdH0sIFt0aW1lem9uZV0pXG5cblx0Y29uc3QgdXBkYXRlRGF0ZUFuZE5vdGlmeSA9IHVzZUNhbGxiYWNrKFxuXHRcdChuZXdEYXRlOiBEYXlqcykgPT4ge1xuXHRcdFx0c2V0Q3VycmVudERhdGUobmV3RGF0ZSlcblx0XHRcdGNvbnN0IHJhbmdlID0gY2FsY3VsYXRlVmlld1JhbmdlKG5ld0RhdGUsIHZpZXcsIGZpcnN0RGF5T2ZXZWVrKVxuXHRcdFx0b25EYXRlQ2hhbmdlPy4obmV3RGF0ZSwgcmFuZ2UpXG5cdFx0fSxcblx0XHRbb25EYXRlQ2hhbmdlLCB2aWV3LCBmaXJzdERheU9mV2Vla11cblx0KVxuXG5cdGNvbnN0IHNlbGVjdERhdGUgPSB1cGRhdGVEYXRlQW5kTm90aWZ5XG5cblx0Y29uc3QgbmF2aWdhdGVQZXJpb2QgPSB1c2VDYWxsYmFjayhcblx0XHQoZGlyZWN0aW9uOiAxIHwgLTEpID0+IHtcblx0XHRcdGNvbnN0IG5ld0RhdGUgPVxuXHRcdFx0XHRkaXJlY3Rpb24gPT09IDFcblx0XHRcdFx0XHQ/IGN1cnJlbnREYXRlLmFkZCgxLCBWSUVXX1VOSVRTW3ZpZXddKVxuXHRcdFx0XHRcdDogY3VycmVudERhdGUuc3VidHJhY3QoMSwgVklFV19VTklUU1t2aWV3XSlcblx0XHRcdHVwZGF0ZURhdGVBbmROb3RpZnkobmV3RGF0ZSlcblx0XHR9LFxuXHRcdFtjdXJyZW50RGF0ZSwgdmlldywgdXBkYXRlRGF0ZUFuZE5vdGlmeV1cblx0KVxuXG5cdGNvbnN0IG5leHRQZXJpb2QgPSB1c2VDYWxsYmFjaygoKSA9PiBuYXZpZ2F0ZVBlcmlvZCgxKSwgW25hdmlnYXRlUGVyaW9kXSlcblx0Y29uc3QgcHJldlBlcmlvZCA9IHVzZUNhbGxiYWNrKCgpID0+IG5hdmlnYXRlUGVyaW9kKC0xKSwgW25hdmlnYXRlUGVyaW9kXSlcblxuXHRjb25zdCB0b2RheSA9IHVzZUNhbGxiYWNrKFxuXHRcdCgpID0+IHVwZGF0ZURhdGVBbmROb3RpZnkoZGF5anMoKSksXG5cdFx0W3VwZGF0ZURhdGVBbmROb3RpZnldXG5cdClcblxuXHRjb25zdCBhZGRFdmVudCA9IHVzZUNhbGxiYWNrKFxuXHRcdChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4ge1xuXHRcdFx0c2V0Q3VycmVudEV2ZW50cygocHJldikgPT4gWy4uLnByZXYsIGV2ZW50XSlcblx0XHRcdG9uRXZlbnRBZGQ/LihldmVudClcblx0XHR9LFxuXHRcdFtvbkV2ZW50QWRkXVxuXHQpXG5cblx0Y29uc3QgdXBkYXRlRXZlbnQgPSB1c2VDYWxsYmFjayhcblx0XHQoZXZlbnRJZDogc3RyaW5nIHwgbnVtYmVyLCB1cGRhdGVzOiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+KSA9PiB7XG5cdFx0XHRjb25zdCBldmVudFRvVXBkYXRlID0gY3VycmVudEV2ZW50cy5maW5kKChldmVudCkgPT4gZXZlbnQuaWQgPT09IGV2ZW50SWQpXG5cdFx0XHRpZiAoIWV2ZW50VG9VcGRhdGUpIHtcblx0XHRcdFx0cmV0dXJuXG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IG5ld0V2ZW50ID0geyAuLi5ldmVudFRvVXBkYXRlLCAuLi51cGRhdGVzIH1cblx0XHRcdHNldEN1cnJlbnRFdmVudHMoKHByZXYpID0+XG5cdFx0XHRcdHByZXYubWFwKChldmVudCkgPT4gKGV2ZW50LmlkID09PSBldmVudElkID8gbmV3RXZlbnQgOiBldmVudCkpXG5cdFx0XHQpXG5cdFx0XHRvbkV2ZW50VXBkYXRlPy4obmV3RXZlbnQpXG5cdFx0fSxcblx0XHRbY3VycmVudEV2ZW50cywgb25FdmVudFVwZGF0ZV1cblx0KVxuXG5cdGNvbnN0IHVwZGF0ZVJlY3VycmluZ0V2ZW50ID0gdXNlQ2FsbGJhY2soXG5cdFx0KFxuXHRcdFx0ZXZlbnQ6IENhbGVuZGFyRXZlbnQsXG5cdFx0XHR1cGRhdGVzOiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+LFxuXHRcdFx0b3B0aW9uczogUmVjdXJyZW5jZUVkaXRPcHRpb25zXG5cdFx0KSA9PiB7XG5cdFx0XHRvbkV2ZW50VXBkYXRlPy4oeyAuLi5ldmVudCwgLi4udXBkYXRlcyB9KVxuXHRcdFx0c2V0Q3VycmVudEV2ZW50cyhcblx0XHRcdFx0dXBkYXRlUmVjdXJyaW5nRXZlbnRJbXBsKHtcblx0XHRcdFx0XHR0YXJnZXRFdmVudDogZXZlbnQsXG5cdFx0XHRcdFx0dXBkYXRlcyxcblx0XHRcdFx0XHRjdXJyZW50RXZlbnRzLFxuXHRcdFx0XHRcdHNjb3BlOiBvcHRpb25zLnNjb3BlLFxuXHRcdFx0XHR9KVxuXHRcdFx0KVxuXHRcdH0sXG5cdFx0W2N1cnJlbnRFdmVudHMsIG9uRXZlbnRVcGRhdGVdXG5cdClcblxuXHRjb25zdCBkZWxldGVSZWN1cnJpbmdFdmVudCA9IHVzZUNhbGxiYWNrKFxuXHRcdChldmVudDogQ2FsZW5kYXJFdmVudCwgb3B0aW9uczogUmVjdXJyZW5jZUVkaXRPcHRpb25zKSA9PiB7XG5cdFx0XHRvbkV2ZW50RGVsZXRlPy4oZXZlbnQpXG5cdFx0XHRzZXRDdXJyZW50RXZlbnRzKFxuXHRcdFx0XHRkZWxldGVSZWN1cnJpbmdFdmVudEltcGwoe1xuXHRcdFx0XHRcdHRhcmdldEV2ZW50OiBldmVudCxcblx0XHRcdFx0XHRjdXJyZW50RXZlbnRzLFxuXHRcdFx0XHRcdHNjb3BlOiBvcHRpb25zLnNjb3BlLFxuXHRcdFx0XHR9KVxuXHRcdFx0KVxuXHRcdH0sXG5cdFx0W2N1cnJlbnRFdmVudHMsIG9uRXZlbnREZWxldGVdXG5cdClcblxuXHRjb25zdCBkZWxldGVFdmVudCA9IHVzZUNhbGxiYWNrKFxuXHRcdChldmVudElkOiBzdHJpbmcgfCBudW1iZXIpID0+IHtcblx0XHRcdGNvbnN0IGV2ZW50VG9EZWxldGUgPSBjdXJyZW50RXZlbnRzLmZpbmQoKGUpID0+IGUuaWQgPT09IGV2ZW50SWQpXG5cdFx0XHRpZiAoIWV2ZW50VG9EZWxldGUpIHtcblx0XHRcdFx0cmV0dXJuXG5cdFx0XHR9XG5cblx0XHRcdHNldEN1cnJlbnRFdmVudHMoKHByZXYpID0+IHByZXYuZmlsdGVyKChlKSA9PiBlLmlkICE9PSBldmVudElkKSlcblx0XHRcdG9uRXZlbnREZWxldGU/LihldmVudFRvRGVsZXRlKVxuXHRcdH0sXG5cdFx0W2N1cnJlbnRFdmVudHMsIG9uRXZlbnREZWxldGVdXG5cdClcblxuXHRjb25zdCBvcGVuRXZlbnRGb3JtID0gdXNlQ2FsbGJhY2soXG5cdFx0KGV2ZW50RGF0YT86IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD4pID0+IHtcblx0XHRcdGlmIChldmVudERhdGE/LnN0YXJ0KSB7XG5cdFx0XHRcdHNldFNlbGVjdGVkRGF0ZShldmVudERhdGEuc3RhcnQpXG5cdFx0XHR9XG5cdFx0XHRjb25zdCBzdGFydCA9IGV2ZW50RGF0YT8uc3RhcnQgPz8gY3VycmVudERhdGVcblx0XHRcdHNldFNlbGVjdGVkRXZlbnQoe1xuXHRcdFx0XHR0aXRsZTogdCgnbmV3RXZlbnQnKSxcblx0XHRcdFx0c3RhcnQsXG5cdFx0XHRcdGVuZDogZXZlbnREYXRhPy5lbmQgPz8gc3RhcnQuYWRkKDEsICdob3VyJyksXG5cdFx0XHRcdHJlc291cmNlSWQ6IGV2ZW50RGF0YT8ucmVzb3VyY2VJZCxcblx0XHRcdFx0ZGVzY3JpcHRpb246ICcnLFxuXHRcdFx0XHRhbGxEYXk6IGV2ZW50RGF0YT8uYWxsRGF5ID8/IGZhbHNlLFxuXHRcdFx0fSBhcyBDYWxlbmRhckV2ZW50KVxuXHRcdFx0c2V0SXNFdmVudEZvcm1PcGVuKHRydWUpXG5cdFx0fSxcblx0XHRbY3VycmVudERhdGUsIHRdXG5cdClcblxuXHRjb25zdCBjbG9zZUV2ZW50Rm9ybSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcblx0XHRzZXRTZWxlY3RlZERhdGUobnVsbClcblx0XHRzZXRTZWxlY3RlZEV2ZW50KG51bGwpXG5cdFx0c2V0SXNFdmVudEZvcm1PcGVuKGZhbHNlKVxuXHR9LCBbXSlcblxuXHRjb25zdCBoYW5kbGVWaWV3Q2hhbmdlID0gdXNlQ2FsbGJhY2soXG5cdFx0KG5ld1ZpZXc6IENhbGVuZGFyVmlldykgPT4ge1xuXHRcdFx0c2V0VmlldyhuZXdWaWV3KVxuXHRcdFx0b25WaWV3Q2hhbmdlPy4obmV3Vmlldylcblx0XHRcdC8vIFZpZXcgY2hhbmdlIGFmZmVjdHMgdmlzaWJsZSByYW5nZSDigJQgbm90aWZ5IGNvbnN1bWVyc1xuXHRcdFx0Y29uc3QgcmFuZ2UgPSBjYWxjdWxhdGVWaWV3UmFuZ2UoY3VycmVudERhdGUsIG5ld1ZpZXcsIGZpcnN0RGF5T2ZXZWVrKVxuXHRcdFx0b25EYXRlQ2hhbmdlPy4oY3VycmVudERhdGUsIHJhbmdlKVxuXHRcdH0sXG5cdFx0W29uVmlld0NoYW5nZSwgb25EYXRlQ2hhbmdlLCBjdXJyZW50RGF0ZSwgZmlyc3REYXlPZldlZWtdXG5cdClcblxuXHRjb25zdCBmaW5kUGFyZW50UmVjdXJyaW5nRXZlbnQgPSB1c2VDYWxsYmFjayhcblx0XHQoZXZlbnQ6IENhbGVuZGFyRXZlbnQpOiBDYWxlbmRhckV2ZW50IHwgbnVsbCA9PiB7XG5cdFx0XHRjb25zdCB0YXJnZXRVSUQgPSBldmVudC51aWRcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdGN1cnJlbnRFdmVudHMuZmluZChcblx0XHRcdFx0XHQoZSkgPT4gKGUudWlkIHx8IGAke2UuaWR9QGlsYW15LmNhbGVuZGFyYCkgPT09IHRhcmdldFVJRCAmJiBlLnJydWxlXG5cdFx0XHRcdCkgfHwgbnVsbFxuXHRcdFx0KVxuXHRcdH0sXG5cdFx0W2N1cnJlbnRFdmVudHNdXG5cdClcblxuXHRyZXR1cm4ge1xuXHRcdGN1cnJlbnREYXRlLFxuXHRcdHZpZXcsXG5cdFx0ZXZlbnRzOiBwcm9jZXNzZWRFdmVudHMsXG5cdFx0cmF3RXZlbnRzOiBjdXJyZW50RXZlbnRzLFxuXHRcdGlzRXZlbnRGb3JtT3Blbixcblx0XHRzZWxlY3RlZEV2ZW50LFxuXHRcdHNlbGVjdGVkRGF0ZSxcblx0XHRmaXJzdERheU9mV2Vlayxcblx0XHRkYXlNYXhFdmVudHM6IERBWV9NQVhfRVZFTlRTX0RFRkFVTFQsXG5cdFx0Y3VycmVudExvY2FsZSxcblx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdHNldEN1cnJlbnREYXRlLFxuXHRcdHNlbGVjdERhdGUsXG5cdFx0c2V0VmlldzogaGFuZGxlVmlld0NoYW5nZSxcblx0XHRuZXh0UGVyaW9kLFxuXHRcdHByZXZQZXJpb2QsXG5cdFx0dG9kYXksXG5cdFx0YWRkRXZlbnQsXG5cdFx0dXBkYXRlRXZlbnQsXG5cdFx0dXBkYXRlUmVjdXJyaW5nRXZlbnQsXG5cdFx0ZGVsZXRlRXZlbnQsXG5cdFx0ZGVsZXRlUmVjdXJyaW5nRXZlbnQsXG5cdFx0b3BlbkV2ZW50Rm9ybSxcblx0XHRjbG9zZUV2ZW50Rm9ybSxcblx0XHRzZXRTZWxlY3RlZEV2ZW50LFxuXHRcdHNldElzRXZlbnRGb3JtT3Blbixcblx0XHRzZXRTZWxlY3RlZERhdGUsXG5cdFx0Z2V0RXZlbnRzRm9yRGF0ZVJhbmdlLFxuXHRcdGZpbmRQYXJlbnRSZWN1cnJpbmdFdmVudCxcblx0XHR0LFxuXHR9XG59XG4iLAogICAgImltcG9ydCB7IFJSdWxlIH0gZnJvbSAncnJ1bGUnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMnXG5pbXBvcnQgdHlwZSB7IFJSdWxlT3B0aW9ucyB9IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS90eXBlcydcbmltcG9ydCBkYXlqcywgeyB0eXBlIERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBvbWl0S2V5cywgc2FmZURhdGUgfSBmcm9tICdAL2xpYi91dGlscydcblxuLyoqXG4gKiBDb252ZXJ0cyBhIERheWpzIG9iamVjdCB0byBhIFwiRmxvYXRpbmcgVGltZVwiIERhdGUgcmVwcmVzZW50YXRpb24uXG4gKiBJbiBGbG9hdGluZyBUaW1lLCB3ZSB1c2UgYSBVVEMgRGF0ZSBvYmplY3QgYnV0IHNldCBpdHMgVVRDIGNvbXBvbmVudHNcbiAqIHRvIG1hdGNoIHRoZSBsb2NhbCBjb21wb25lbnRzIG9mIHRoZSB1c2VyJ3MgZGF0ZS5cbiAqXG4gKiBUaGlzIGlzIGVzc2VudGlhbCBmb3IgUlJ1bGUgZXZhbHVhdGlvbiBiZWNhdXNlIGl0IGVuc3VyZXMgdGhhdCBhIHJ1bGVcbiAqIGxpa2UgXCJFdmVyeSBXZWRuZXNkYXlcIiByZWZlcnMgdG8gdGhlIHVzZXIncyBsb2NhbCBXZWRuZXNkYXksIGV2ZW4gaWZcbiAqIHRoYXQgdGltZSBmYWxscyBvbiBhIFRodXJzZGF5IGluIGFjdHVhbCBVVEMuXG4gKi9cbmNvbnN0IHRvRmxvYXRpbmdEYXRlID0gKGQ6IERheWpzKTogRGF0ZSA9PiB7XG5cdHJldHVybiBuZXcgRGF0ZShcblx0XHREYXRlLlVUQyhcblx0XHRcdGQueWVhcigpLFxuXHRcdFx0ZC5tb250aCgpLFxuXHRcdFx0ZC5kYXRlKCksXG5cdFx0XHRkLmhvdXIoKSxcblx0XHRcdGQubWludXRlKCksXG5cdFx0XHRkLnNlY29uZCgpLFxuXHRcdFx0ZC5taWxsaXNlY29uZCgpXG5cdFx0KVxuXHQpXG59XG5cbi8qKlxuICogQ29udmVydHMgYSBcIkZsb2F0aW5nIFRpbWVcIiBEYXRlIGJhY2sgdG8gYSBEYXlqcyBvYmplY3QgaW4gdGhlIG9yaWdpbmFsIGNvbnRleHQuXG4gKiBJdCB0YWtlcyB0aGUgWU1ESE1TIGNvbXBvbmVudHMgZnJvbSB0aGUgVVRDIERhdGUgYW5kIGFwcGxpZXMgdGhlbSB0byB0aGVcbiAqIHJlZmVyZW5jZSBEYXlqcyBvYmplY3QgKHByZXNlcnZpbmcgaXRzIHRpbWV6b25lL2xvY2FsZSkuXG4gKi9cbmNvbnN0IGZyb21GbG9hdGluZ0RhdGUgPSAoZGF0ZTogRGF0ZSwgcmVmZXJlbmNlOiBEYXlqcyk6IERheWpzID0+IHtcblx0cmV0dXJuIHJlZmVyZW5jZVxuXHRcdC55ZWFyKGRhdGUuZ2V0VVRDRnVsbFllYXIoKSlcblx0XHQubW9udGgoZGF0ZS5nZXRVVENNb250aCgpKVxuXHRcdC5kYXRlKGRhdGUuZ2V0VVRDRGF0ZSgpKVxuXHRcdC5ob3VyKGRhdGUuZ2V0VVRDSG91cnMoKSlcblx0XHQubWludXRlKGRhdGUuZ2V0VVRDTWludXRlcygpKVxuXHRcdC5zZWNvbmQoZGF0ZS5nZXRVVENTZWNvbmRzKCkpXG5cdFx0Lm1pbGxpc2Vjb25kKGRhdGUuZ2V0VVRDTWlsbGlzZWNvbmRzKCkpXG59XG5cbmV4cG9ydCBjb25zdCBpc1JlY3VycmluZ0V2ZW50ID0gKGV2ZW50OiBDYWxlbmRhckV2ZW50KTogYm9vbGVhbiA9PiB7XG5cdHJldHVybiBCb29sZWFuKGV2ZW50LnJydWxlIHx8IGV2ZW50LnJlY3VycmVuY2VJZCB8fCBldmVudC51aWQpXG59XG5cbi8qKlxuICogQ29uc2lzdGVudGx5IGRlcml2ZXMgYSBwYXJlbnQgVUlEIGZyb20gYW4gZXZlbnQuXG4gKiBVc2VzIHRoZSBleHBsaWNpdCBgdWlkYCBpZiBhdmFpbGFibGUsIG90aGVyd2lzZSBmYWxscyBiYWNrIHRvIGAke2lkfUBpbGFteS5jYWxlbmRhcmAuXG4gKi9cbmNvbnN0IGdldEV2ZW50UGFyZW50VUlEID0gKGV2ZW50OiBDYWxlbmRhckV2ZW50KTogc3RyaW5nID0+IHtcblx0cmV0dXJuIGV2ZW50LnVpZCB8fCBgJHtldmVudC5pZH1AaWxhbXkuY2FsZW5kYXJgXG59XG5cbi8qKlxuICogRmluZHMgdGhlIGJhc2UgcmVjdXJyaW5nIGV2ZW50ICh0aGUgb25lIHdpdGggcnJ1bGUgYW5kIG5vIHJlY3VycmVuY2VJZClcbiAqIHRoYXQgc2hhcmVzIHRoZSBzYW1lIHBhcmVudCBVSUQgYXMgdGhlIHRhcmdldCBldmVudC5cbiAqIFRocm93cyBpZiBub3QgZm91bmQg4oCUIGNhbGxlcnMgYXNzdW1lIHRoZSBzZXJpZXMgZXhpc3RzLlxuICovXG5jb25zdCBmaW5kQmFzZUV2ZW50SW5kZXggPSAoXG5cdGV2ZW50czogQ2FsZW5kYXJFdmVudFtdLFxuXHR0YXJnZXRFdmVudDogQ2FsZW5kYXJFdmVudFxuKTogbnVtYmVyID0+IHtcblx0Y29uc3QgdGFyZ2V0VWlkID0gZ2V0RXZlbnRQYXJlbnRVSUQodGFyZ2V0RXZlbnQpXG5cdGNvbnN0IGluZGV4ID0gZXZlbnRzLmZpbmRJbmRleChcblx0XHQoZSkgPT4gZ2V0RXZlbnRQYXJlbnRVSUQoZSkgPT09IHRhcmdldFVpZCAmJiBlLnJydWxlICYmICFlLnJlY3VycmVuY2VJZFxuXHQpXG5cdGlmIChpbmRleCA9PT0gLTEpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ0Jhc2UgcmVjdXJyaW5nIGV2ZW50IG5vdCBmb3VuZCcpXG5cdH1cblx0cmV0dXJuIGluZGV4XG59XG5cbi8qKlxuICogRm9yIHRoZSBcImZvbGxvd2luZ1wiIHNjb3BlOiB0aGUgVU5USUwgZGF0ZSB0aGF0IHRlcm1pbmF0ZXMgdGhlIG9yaWdpbmFsXG4gKiBzZXJpZXMgaXMgdGhlIGVuZCBvZiB0aGUgZGF5IEJFRk9SRSB0aGUgdGFyZ2V0IGV2ZW50J3Mgc3RhcnQuIFRoaXMga2VlcHNcbiAqIHRoZSBsYXN0IHByZS10YXJnZXQgb2NjdXJyZW5jZSBpbiB0aGUgdGVybWluYXRlZCBzZXJpZXMuXG4gKi9cbmNvbnN0IGdldFNlcmllc1Rlcm1pbmF0aW9uRGF0ZSA9ICh0YXJnZXRFdmVudDogQ2FsZW5kYXJFdmVudCk6IERhdGUgPT5cblx0dGFyZ2V0RXZlbnQuc3RhcnQuc3VidHJhY3QoMSwgJ2RheScpLmVuZE9mKCdkYXknKS50b0RhdGUoKVxuXG4vKipcbiAqIEtlZXBzIHRoZSBjYWxlbmRhciBkYXkgZnJvbSBgdGFyZ2V0YCB3aGlsZSBhcHBseWluZyB0aGUgdGltZS1vZi1kYXkgZnJvbSBgc291cmNlYC5cbiAqIFVzZWQgdG8gZWRpdCByZWN1cnJpbmcgc2VyaWVzIGFuY2hvcnMgd2l0aG91dCBzaGlmdGluZyB0aGUgc2VyaWVzIHRvIGFuIGluc3RhbmNlIGRheS5cbiAqL1xuY29uc3Qgd2l0aFRpbWVPZkRheSA9ICh0YXJnZXQ6IERheWpzLCBzb3VyY2U6IERheWpzKTogRGF5anMgPT4ge1xuXHRjb25zdCB0aW1lT2ZEYXlNcyA9IHNvdXJjZS5kaWZmKHNvdXJjZS5zdGFydE9mKCdkYXknKSwgJ21pbGxpc2Vjb25kJylcblx0cmV0dXJuIHRhcmdldC5zdGFydE9mKCdkYXknKS5hZGQodGltZU9mRGF5TXMsICdtaWxsaXNlY29uZCcpXG59XG5cbi8qKlxuICogRm9yIHNjb3BlIFwiYWxsXCI6IGFwcGx5IHRoZSBzdWJtaXR0ZWQgd2FsbC1jbG9jayB0aW1lIHRvIHRoZSBiYXNlIGV2ZW50IGFuY2hvci5cbiAqIFRoaXMga2VlcHMgdGhlIHNlcmllcyBhbmNob3JlZCB0byBpdHMgb3JpZ2luYWwgZGF0ZSB3aGlsZSBjaGFuZ2luZyBpdHMgdGltZS5cbiAqL1xuY29uc3QgYXBwbHlBbGxTY29wZVVwZGF0ZXMgPSAoXG5cdGJhc2VFdmVudDogQ2FsZW5kYXJFdmVudCxcblx0dXBkYXRlczogUGFydGlhbDxDYWxlbmRhckV2ZW50PlxuKTogeyBzdGFydDogRGF5anM7IGVuZDogRGF5anM7IHJydWxlOiBSUnVsZU9wdGlvbnMgfCB1bmRlZmluZWQgfSA9PiB7XG5cdGxldCBuZXdTdGFydCA9IGJhc2VFdmVudC5zdGFydFxuXHQvLyBpZiB0aGUgc3RhcnQgaGFzIGNoYW5nZWQga2VlcCB0aGUgc2FtZSBjYWxlbmRhciBkYXkgYnV0IHdpdGggdGhlIG5ldyB0aW1lXG5cdGlmICh1cGRhdGVzLnN0YXJ0KSB7XG5cdFx0bmV3U3RhcnQgPSB3aXRoVGltZU9mRGF5KGJhc2VFdmVudC5zdGFydCwgdXBkYXRlcy5zdGFydClcblx0fVxuXG5cdGxldCBuZXdFbmQgPSBiYXNlRXZlbnQuZW5kXG5cdC8vIGVuc3VyZSB0aGUgbmV3IGVuZCBpcyBjb21wdXRlIHNvIHRoZSBkdXJhdGlvbiBpcyBwcmVzZXJ2ZWRcblx0aWYgKHVwZGF0ZXMuc3RhcnQgJiYgdXBkYXRlcy5lbmQpIHtcblx0XHRuZXdFbmQgPSBuZXdTdGFydC5hZGQodXBkYXRlcy5lbmQuZGlmZih1cGRhdGVzLnN0YXJ0KSwgJ21pbGxpc2Vjb25kJylcblx0fSBlbHNlIGlmICh1cGRhdGVzLnN0YXJ0KSB7XG5cdFx0bmV3RW5kID0gbmV3U3RhcnQuYWRkKGJhc2VFdmVudC5lbmQuZGlmZihiYXNlRXZlbnQuc3RhcnQpLCAnbWlsbGlzZWNvbmQnKVxuXHR9IGVsc2UgaWYgKHVwZGF0ZXMuZW5kKSB7XG5cdFx0bmV3RW5kID0gd2l0aFRpbWVPZkRheShiYXNlRXZlbnQuZW5kLCB1cGRhdGVzLmVuZClcblx0fVxuXG5cdGNvbnN0IG1lcmdlZFJydWxlID0gdXBkYXRlcy5ycnVsZSA/PyBiYXNlRXZlbnQucnJ1bGVcblx0bGV0IG5ld1JydWxlOiBSUnVsZU9wdGlvbnMgfCB1bmRlZmluZWRcblx0aWYgKG1lcmdlZFJydWxlKSB7XG5cdFx0bmV3UnJ1bGUgPSB7IC4uLm1lcmdlZFJydWxlLCBkdHN0YXJ0OiBuZXdTdGFydC50b0RhdGUoKSB9XG5cdH1cblxuXHRyZXR1cm4geyBzdGFydDogbmV3U3RhcnQsIGVuZDogbmV3RW5kLCBycnVsZTogbmV3UnJ1bGUgfVxufVxuXG5pbnRlcmZhY2UgR2VuZXJhdGVSZWN1cnJpbmdFdmVudHNQcm9wcyB7XG5cdGV2ZW50OiBDYWxlbmRhckV2ZW50XG5cdGN1cnJlbnRFdmVudHM6IENhbGVuZGFyRXZlbnRbXVxuXHRzdGFydERhdGU6IERheWpzXG5cdGVuZERhdGU6IERheWpzXG59XG5cbmV4cG9ydCBjb25zdCBnZW5lcmF0ZVJlY3VycmluZ0V2ZW50cyA9ICh7XG5cdGV2ZW50LFxuXHRjdXJyZW50RXZlbnRzLFxuXHRzdGFydERhdGUsXG5cdGVuZERhdGUsXG59OiBHZW5lcmF0ZVJlY3VycmluZ0V2ZW50c1Byb3BzKTogQ2FsZW5kYXJFdmVudFtdID0+IHtcblx0Ly8gSWYgbm90IGEgcmVjdXJyaW5nIGV2ZW50LCByZXR1cm4gZW1wdHkgYXJyYXlcblx0aWYgKCFldmVudC5ycnVsZSkge1xuXHRcdHJldHVybiBbXVxuXHR9XG5cblx0dHJ5IHtcblx0XHQvLyBEVFNUQVJUIGFuZCBTRUFSQ0ggV0lORE9XIFRSQU5TRk9STUFUSU9OXG5cdFx0Ly8gVHJhbnNmb3JtIGFsbCBkYXRlcyB0byBcImZsb2F0aW5nIHRpbWVcIiAoVVRDIHdpdGggbG9jYWwgY29tcG9uZW50cylcblx0XHQvLyBUaGlzIGVuc3VyZXMgUlJ1bGUgZXZhbHVhdGVzIFwiV2VkbmVzZGF5XCIgYXMgdGhlIHVzZXIncyBsb2NhbCBXZWRuZXNkYXlcblx0XHRjb25zdCBmbG9hdGluZ1N0YXJ0ID0gdG9GbG9hdGluZ0RhdGUoZXZlbnQuc3RhcnQpXG5cdFx0Y29uc3QgZmxvYXRpbmdVbnRpbCA9IGV2ZW50LnJydWxlLnVudGlsXG5cdFx0XHQ/IHRvRmxvYXRpbmdEYXRlKGRheWpzKGV2ZW50LnJydWxlLnVudGlsKSlcblx0XHRcdDogdW5kZWZpbmVkXG5cblx0XHRjb25zdCBydWxlT3B0aW9uczogUlJ1bGVPcHRpb25zID0ge1xuXHRcdFx0Li4uZXZlbnQucnJ1bGUsXG5cdFx0XHRkdHN0YXJ0OiBmbG9hdGluZ1N0YXJ0LFxuXHRcdFx0dW50aWw6IGZsb2F0aW5nVW50aWwsXG5cdFx0fVxuXHRcdGNvbnN0IHJ1bGUgPSBuZXcgUlJ1bGUocnVsZU9wdGlvbnMpXG5cblx0XHRjb25zdCBwYXJlbnRVaWQgPSBnZXRFdmVudFBhcmVudFVJRChldmVudClcblx0XHRjb25zdCBvdmVycmlkZXMgPSBjdXJyZW50RXZlbnRzLmZpbHRlcihcblx0XHRcdChlKSA9PiBlLnJlY3VycmVuY2VJZCAmJiBnZXRFdmVudFBhcmVudFVJRChlKSA9PT0gcGFyZW50VWlkXG5cdFx0KVxuXG5cdFx0Ly8gQ2FsY3VsYXRlIGV2ZW50IGR1cmF0aW9uIHRvIGV4cGFuZCBzZWFyY2ggd2luZG93IGZvciBldmVudHMgdGhhdCBzcGFuIHRoZSByYW5nZVxuXHRcdGNvbnN0IGV2ZW50RHVyYXRpb24gPSBldmVudC5lbmQuZGlmZihldmVudC5zdGFydClcblxuXHRcdC8vIEV4cGFuZCBzZWFyY2ggd2luZG93IGJhY2t3YXJkIGJ5IGV2ZW50IGR1cmF0aW9uIHRvIGNhdGNoIGV2ZW50cyB0aGF0IHN0YXJ0IGJlZm9yZVxuXHRcdC8vIHRoZSByYW5nZSBidXQgc3BhbiBpbnRvIGl0XG5cdFx0Y29uc3QgZXhwYW5kZWRTdGFydERhdGVUaW1lID0gdG9GbG9hdGluZ0RhdGUoXG5cdFx0XHRzdGFydERhdGUuc3VidHJhY3QoZXZlbnREdXJhdGlvbiwgJ21pbGxpc2Vjb25kJylcblx0XHQpXG5cdFx0Y29uc3QgZW5kRGF0ZVRpbWUgPSB0b0Zsb2F0aW5nRGF0ZShlbmREYXRlKVxuXG5cdFx0Ly8gR2V0IGFsbCBvY2N1cnJlbmNlcyBpbiB0aGUgZXhwYW5kZWQgcmFuZ2Vcblx0XHRjb25zdCBvY2N1cnJlbmNlcyA9IHJ1bGUuYmV0d2VlbihleHBhbmRlZFN0YXJ0RGF0ZVRpbWUsIGVuZERhdGVUaW1lLCB0cnVlKVxuXG5cdFx0Ly8gQ29udmVydCBvY2N1cnJlbmNlcyB0byBDYWxlbmRhckV2ZW50IGluc3RhbmNlc1xuXHRcdGNvbnN0IHJlY3VycmluZ0V2ZW50czogQ2FsZW5kYXJFdmVudFtdID0gb2NjdXJyZW5jZXNcblx0XHRcdC5tYXAoKG9jY3VycmVuY2UsIGluZGV4KSA9PiB7XG5cdFx0XHRcdGNvbnN0IG9jY3VycmVuY2VEYXRlID0gZnJvbUZsb2F0aW5nRGF0ZShvY2N1cnJlbmNlLCBldmVudC5zdGFydClcblx0XHRcdFx0Y29uc3QgZXhpc3RpbmdPdmVycmlkZSA9IG92ZXJyaWRlcy5maW5kKChlKSA9PlxuXHRcdFx0XHRcdHNhZmVEYXRlKGUucmVjdXJyZW5jZUlkKT8uaXNTYW1lKG9jY3VycmVuY2VEYXRlKVxuXHRcdFx0XHQpXG5cblx0XHRcdFx0Ly8gSWYgdGhlcmUncyBhbiBvdmVycmlkZSwgdXNlIGl0XG5cdFx0XHRcdGlmIChleGlzdGluZ092ZXJyaWRlKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHsgLi4uZXZlbnQsIC4uLmV4aXN0aW5nT3ZlcnJpZGUgfVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQ2FsY3VsYXRlIHRoZSBkdXJhdGlvbiBmcm9tIHRoZSBvcmlnaW5hbCBldmVudFxuXHRcdFx0XHRjb25zdCBvcmlnaW5hbER1cmF0aW9uID0gZXZlbnQuZW5kLmRpZmYoZXZlbnQuc3RhcnQpXG5cdFx0XHRcdGNvbnN0IG5ld0VuZFRpbWUgPSBvY2N1cnJlbmNlRGF0ZS5hZGQob3JpZ2luYWxEdXJhdGlvbiwgJ21pbGxpc2Vjb25kJylcblx0XHRcdFx0Y29uc3QgcmVjdXJyaW5nRXZlbnRJZCA9IGAke2V2ZW50LmlkfV8ke2luZGV4fWBcblx0XHRcdFx0Y29uc3QgcGFyZW50VUlEID0gZ2V0RXZlbnRQYXJlbnRVSUQoZXZlbnQpXG5cblx0XHRcdFx0Ly8gQ3JlYXRlIHRoZSByZWN1cnJpbmcgZXZlbnQgaW5zdGFuY2Vcblx0XHRcdFx0Y29uc3QgcmVjdXJyaW5nRXZlbnQ6IENhbGVuZGFyRXZlbnQgPSB7XG5cdFx0XHRcdFx0Li4uZXZlbnQsXG5cdFx0XHRcdFx0aWQ6IHJlY3VycmluZ0V2ZW50SWQsXG5cdFx0XHRcdFx0c3RhcnQ6IG9jY3VycmVuY2VEYXRlLFxuXHRcdFx0XHRcdGVuZDogbmV3RW5kVGltZSxcblx0XHRcdFx0XHR1aWQ6IHBhcmVudFVJRCwgLy8gU2FtZSBVSUQgYXMgcGFyZW50IGZvciBwcm9wZXIgZ3JvdXBpbmdcblx0XHRcdFx0XHRycnVsZTogdW5kZWZpbmVkLCAvLyBJbnN0YW5jZSBldmVudHMgZG9uJ3QgaGF2ZSBSUlVMRVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHJlY3VycmluZ0V2ZW50XG5cdFx0XHR9KVxuXHRcdFx0LmZpbHRlcigocmVjdXJyaW5nRXZlbnQpID0+IHtcblx0XHRcdFx0Ly8gRmlsdGVyIG91dCBFWERBVEUgZXhjbHVzaW9uc1xuXHRcdFx0XHRjb25zdCBoYXNFeGRhdGVzID0gZXZlbnQuZXhkYXRlcyAmJiBldmVudC5leGRhdGVzLmxlbmd0aCA+IDBcblx0XHRcdFx0aWYgKGhhc0V4ZGF0ZXMpIHtcblx0XHRcdFx0XHRjb25zdCBldmVudFN0YXJ0SVNPID0gcmVjdXJyaW5nRXZlbnQuc3RhcnQudG9JU09TdHJpbmcoKVxuXHRcdFx0XHRcdGNvbnN0IGlzRXhjbHVkZWQgPSBldmVudC5leGRhdGVzPy5pbmNsdWRlcyhldmVudFN0YXJ0SVNPKVxuXHRcdFx0XHRcdGlmIChpc0V4Y2x1ZGVkKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2Vcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBGaWx0ZXIgdG8gb25seSBpbmNsdWRlIGV2ZW50cyB0aGF0IHNwYW4gdGhyb3VnaCB0aGUgb3JpZ2luYWwgcmVxdWVzdGVkIGRhdGUgcmFuZ2Vcblx0XHRcdFx0Ly8gQW4gZXZlbnQgc3BhbnMgdGhlIHJhbmdlIGlmOiBldmVudF9zdGFydCA8IHJhbmdlX2VuZCBBTkQgZXZlbnRfZW5kID4gcmFuZ2Vfc3RhcnRcblx0XHRcdFx0Ly8gVXNlIGlzU2FtZU9yQmVmb3JlL2lzU2FtZU9yQWZ0ZXIgdG8gaW5jbHVkZSBib3VuZGFyeSBjYXNlc1xuXHRcdFx0XHRjb25zdCBldmVudFNwYW5zUmFuZ2UgPVxuXHRcdFx0XHRcdHJlY3VycmluZ0V2ZW50LnN0YXJ0LmlzU2FtZU9yQmVmb3JlKGVuZERhdGUpICYmXG5cdFx0XHRcdFx0cmVjdXJyaW5nRXZlbnQuZW5kLmlzU2FtZU9yQWZ0ZXIoc3RhcnREYXRlKVxuXG5cdFx0XHRcdHJldHVybiBldmVudFNwYW5zUmFuZ2Vcblx0XHRcdH0pXG5cblx0XHRyZXR1cm4gcmVjdXJyaW5nRXZlbnRzXG5cdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0Ly8gSGFuZGxlIGludmFsaWQgUlJVTEUgb3B0aW9uc1xuXHRcdHRocm93IG5ldyBFcnJvcihcblx0XHRcdGBJbnZhbGlkIFJSVUxFIG9wdGlvbnM6ICR7SlNPTi5zdHJpbmdpZnkoZXZlbnQucnJ1bGUpfS4gRXJyb3I6ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcid9YFxuXHRcdClcblx0fVxufVxuXG5pbnRlcmZhY2UgVXBkYXRlUmVjdXJyaW5nRXZlbnRQcm9wcyB7XG5cdHRhcmdldEV2ZW50OiBDYWxlbmRhckV2ZW50XG5cdHVwZGF0ZXM6IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD5cblx0Y3VycmVudEV2ZW50czogQ2FsZW5kYXJFdmVudFtdXG5cdHNjb3BlOiAndGhpcycgfCAnZm9sbG93aW5nJyB8ICdhbGwnXG59XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVSZWN1cnJpbmdFdmVudCA9ICh7XG5cdHRhcmdldEV2ZW50LFxuXHR1cGRhdGVzLFxuXHRjdXJyZW50RXZlbnRzLFxuXHRzY29wZSxcbn06IFVwZGF0ZVJlY3VycmluZ0V2ZW50UHJvcHMpOiBDYWxlbmRhckV2ZW50W10gPT4ge1xuXHRjb25zdCB1cGRhdGVkRXZlbnRzID0gWy4uLmN1cnJlbnRFdmVudHNdXG5cdGNvbnN0IGJhc2VFdmVudEluZGV4ID0gZmluZEJhc2VFdmVudEluZGV4KHVwZGF0ZWRFdmVudHMsIHRhcmdldEV2ZW50KVxuXHRjb25zdCBiYXNlRXZlbnQgPSB1cGRhdGVkRXZlbnRzW2Jhc2VFdmVudEluZGV4XVxuXG5cdHN3aXRjaCAoc2NvcGUpIHtcblx0XHRjYXNlICd0aGlzJzoge1xuXHRcdFx0Ly8gXCJUaGlzIGV2ZW50IG9ubHlcIiAtIEFkZCBFWERBVEUgdG8gYmFzZSBldmVudCBhbmQgY3JlYXRlIHN0YW5kYWxvbmUgbW9kaWZpZWQgZXZlbnRcblx0XHRcdGNvbnN0IHRhcmdldEV2ZW50U3RhcnRJU08gPSB0YXJnZXRFdmVudC5zdGFydC50b0lTT1N0cmluZygpXG5cdFx0XHRjb25zdCBleGlzdGluZ0V4ZGF0ZXMgPSBiYXNlRXZlbnQuZXhkYXRlcyB8fCBbXVxuXHRcdFx0Y29uc3QgdXBkYXRlZEV4ZGF0ZXMgPSBbLi4uZXhpc3RpbmdFeGRhdGVzLCB0YXJnZXRFdmVudFN0YXJ0SVNPXVxuXG5cdFx0XHRjb25zdCB1cGRhdGVkQmFzZUV2ZW50ID0ge1xuXHRcdFx0XHQuLi5iYXNlRXZlbnQsXG5cdFx0XHRcdGV4ZGF0ZXM6IHVwZGF0ZWRFeGRhdGVzLFxuXHRcdFx0fVxuXHRcdFx0dXBkYXRlZEV2ZW50c1tiYXNlRXZlbnRJbmRleF0gPSB1cGRhdGVkQmFzZUV2ZW50XG5cblx0XHRcdC8vIENyZWF0ZSBzdGFuZGFsb25lIG1vZGlmaWVkIGV2ZW50IHdpdGggcmVjdXJyZW5jZUlkXG5cdFx0XHRjb25zdCBtb2RpZmllZEV2ZW50SWQgPSBgJHt0YXJnZXRFdmVudC5pZH1fbW9kaWZpZWRfJHtEYXRlLm5vdygpfWBcblx0XHRcdGNvbnN0IG1vZGlmaWVkRXZlbnQ6IENhbGVuZGFyRXZlbnQgPSB7XG5cdFx0XHRcdC8vIEB0cy1leHBlY3QtZXJyb3IgVE9ETzogZml4IHRoZSB0eXBlc1xuXHRcdFx0XHQuLi5vbWl0S2V5cyh0YXJnZXRFdmVudCwgWyd3aWR0aCcsICdoZWlnaHQnLCAndG9wJywgJ2xlZnQnLCAncmlnaHQnXSksXG5cdFx0XHRcdC4uLnVwZGF0ZXMsXG5cdFx0XHRcdGlkOiBtb2RpZmllZEV2ZW50SWQsXG5cdFx0XHRcdHJlY3VycmVuY2VJZDogdGFyZ2V0RXZlbnRTdGFydElTTywgLy8gVGhpcyBtYXJrcyBpdCBhcyBhIG1vZGlmaWVkIGluc3RhbmNlXG5cdFx0XHRcdHVpZDogZ2V0RXZlbnRQYXJlbnRVSUQoYmFzZUV2ZW50KSwgLy8gS2VlcCBzYW1lIFVJRCBhcyBiYXNlIGV2ZW50IChpQ2FsZW5kYXIgc3RhbmRhcmQpXG5cdFx0XHRcdHJydWxlOiB1bmRlZmluZWQsIC8vIFN0YW5kYWxvbmUgZXZlbnRzIGRvbid0IGhhdmUgUlJVTEVcblx0XHRcdH0gYXMgQ2FsZW5kYXJFdmVudFxuXHRcdFx0dXBkYXRlZEV2ZW50cy5wdXNoKG1vZGlmaWVkRXZlbnQpXG5cdFx0XHRicmVha1xuXHRcdH1cblxuXHRcdGNhc2UgJ2ZvbGxvd2luZyc6IHtcblx0XHRcdC8vIFwiVGhpcyBhbmQgZm9sbG93aW5nXCIgLSBUZXJtaW5hdGUgb3JpZ2luYWwgc2VyaWVzIGFuZCBjcmVhdGUgbmV3IHNlcmllc1xuXHRcdFx0Y29uc3QgdGVybWluYXRpb25EYXRlID0gZ2V0U2VyaWVzVGVybWluYXRpb25EYXRlKHRhcmdldEV2ZW50KVxuXG5cdFx0XHQvLyBVcGRhdGUgb3JpZ2luYWwgc2VyaWVzIHdpdGggVU5USUwgdG8gZW5kIGJlZm9yZSB0YXJnZXQgZGF0ZVxuXHRcdFx0Y29uc3QgdGVybWluYXRlZEV2ZW50ID0ge1xuXHRcdFx0XHQuLi5iYXNlRXZlbnQsXG5cdFx0XHRcdHJydWxlOiB7XG5cdFx0XHRcdFx0Li4uYmFzZUV2ZW50LnJydWxlLFxuXHRcdFx0XHRcdHVudGlsOiB0ZXJtaW5hdGlvbkRhdGUsXG5cdFx0XHRcdH0gYXMgUlJ1bGVPcHRpb25zLFxuXHRcdFx0fVxuXHRcdFx0dXBkYXRlZEV2ZW50c1tiYXNlRXZlbnRJbmRleF0gPSB0ZXJtaW5hdGVkRXZlbnRcblxuXHRcdFx0Ly8gQ3JlYXRlIG5ldyBzZXJpZXMgc3RhcnRpbmcgZnJvbSB0YXJnZXQgZGF0ZVxuXHRcdFx0Y29uc3Qgb3JpZ2luYWxEdXJhdGlvbiA9IGJhc2VFdmVudC5lbmQuZGlmZihiYXNlRXZlbnQuc3RhcnQpXG5cdFx0XHRjb25zdCBuZXdTZXJpZXNTdGFydFRpbWUgPSB1cGRhdGVzLnN0YXJ0IHx8IHRhcmdldEV2ZW50LnN0YXJ0XG5cdFx0XHRjb25zdCBuZXdTZXJpZXNFbmRUaW1lID1cblx0XHRcdFx0dXBkYXRlcy5lbmQgfHwgbmV3U2VyaWVzU3RhcnRUaW1lLmFkZChvcmlnaW5hbER1cmF0aW9uKVxuXHRcdFx0Y29uc3QgbmV3U2VyaWVzSWQgPSBgJHtiYXNlRXZlbnQuaWR9X2ZvbGxvd2luZ2Bcblx0XHRcdGNvbnN0IG5ld1Nlcmllc1VJRCA9IGAke25ld1Nlcmllc0lkfUBpbGFteS5jYWxlbmRhcmBcblxuXHRcdFx0Y29uc3QgbmV3U2VyaWVzRXZlbnQ6IENhbGVuZGFyRXZlbnQgPSB7XG5cdFx0XHRcdC4uLmJhc2VFdmVudCxcblx0XHRcdFx0Li4udXBkYXRlcyxcblx0XHRcdFx0cnJ1bGU6IHtcblx0XHRcdFx0XHQuLi5iYXNlRXZlbnQucnJ1bGUsXG5cdFx0XHRcdFx0Li4udXBkYXRlcy5ycnVsZSxcblx0XHRcdFx0XHRkdHN0YXJ0OiBuZXdTZXJpZXNTdGFydFRpbWUudG9EYXRlKCksXG5cdFx0XHRcdH0gYXMgUlJ1bGVPcHRpb25zLFxuXHRcdFx0XHRpZDogbmV3U2VyaWVzSWQsXG5cdFx0XHRcdHVpZDogbmV3U2VyaWVzVUlELCAvLyBOZXcgVUlEIGZvciBuZXcgc2VyaWVzXG5cdFx0XHRcdHN0YXJ0OiBuZXdTZXJpZXNTdGFydFRpbWUsXG5cdFx0XHRcdGVuZDogbmV3U2VyaWVzRW5kVGltZSxcblx0XHRcdFx0cmVjdXJyZW5jZUlkOiB1bmRlZmluZWQsIC8vIFRoaXMgaXMgYSBuZXcgYmFzZSBldmVudCwgbm90IGFuIGluc3RhbmNlXG5cdFx0XHR9XG5cdFx0XHR1cGRhdGVkRXZlbnRzLnB1c2gobmV3U2VyaWVzRXZlbnQpXG5cdFx0XHRicmVha1xuXHRcdH1cblxuXHRcdGNhc2UgJ2FsbCc6IHtcblx0XHRcdC8vIFwiQWxsIGV2ZW50c1wiIC0gVXBkYXRlIHRoZSBiYXNlIHJlY3VycmluZyBldmVudCAoYW5jaG9yIGRhdGVzLCBub3QgaW5zdGFuY2UgZGF5KVxuXHRcdFx0Y29uc3QgcGFyZW50VWlkID0gZ2V0RXZlbnRQYXJlbnRVSUQoYmFzZUV2ZW50KVxuXHRcdFx0Y29uc3QgYW5jaG9yZWQgPSBhcHBseUFsbFNjb3BlVXBkYXRlcyhiYXNlRXZlbnQsIHVwZGF0ZXMpXG5cdFx0XHR1cGRhdGVkRXZlbnRzW2Jhc2VFdmVudEluZGV4XSA9IHtcblx0XHRcdFx0Li4uYmFzZUV2ZW50LFxuXHRcdFx0XHQuLi51cGRhdGVzLFxuXHRcdFx0XHRzdGFydDogYW5jaG9yZWQuc3RhcnQsXG5cdFx0XHRcdGVuZDogYW5jaG9yZWQuZW5kLFxuXHRcdFx0XHRycnVsZTogYW5jaG9yZWQucnJ1bGUsXG5cdFx0XHRcdGV4ZGF0ZXM6IHVuZGVmaW5lZCxcblx0XHRcdH1cblx0XHRcdGNvbnN0IGlzRGV0YWNoZWRPdmVycmlkZU9mU2VyaWVzID0gKGU6IENhbGVuZGFyRXZlbnQpOiBib29sZWFuID0+IHtcblx0XHRcdFx0Y29uc3QgaXNEZXRhY2hlZE92ZXJyaWRlID0gQm9vbGVhbihlLnJlY3VycmVuY2VJZCkgJiYgIWUucnJ1bGVcblx0XHRcdFx0Y29uc3QgYmVsb25nc1RvU2VyaWVzID0gZ2V0RXZlbnRQYXJlbnRVSUQoZSkgPT09IHBhcmVudFVpZFxuXHRcdFx0XHRyZXR1cm4gaXNEZXRhY2hlZE92ZXJyaWRlICYmIGJlbG9uZ3NUb1Nlcmllc1xuXHRcdFx0fVxuXHRcdFx0Ly8gR29vZ2xlLUNhbGVuZGFyIGJlaGF2aW9yOiBhbiBcImFsbFwiIGVkaXQgcmVzZXRzIHRoZSBzZXJpZXMg4oCUIGRyb3AgZGV0YWNoZWRcblx0XHRcdC8vIG92ZXJyaWRlcyBhbmQgY2xlYXIgZXhjZXB0aW9ucyAocHJldmlvdXNseSBzcGxpdC9kZWxldGVkIG9jY3VycmVuY2VzIHJldHVybikuXG5cdFx0XHRyZXR1cm4gdXBkYXRlZEV2ZW50cy5maWx0ZXIoKGUpID0+ICFpc0RldGFjaGVkT3ZlcnJpZGVPZlNlcmllcyhlKSlcblx0XHR9XG5cblx0XHRkZWZhdWx0OlxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0XHRgSW52YWxpZCBzY29wZTogJHtzY29wZX0uIE11c3QgYmUgJ3RoaXMnLCAnZm9sbG93aW5nJywgb3IgJ2FsbCdgXG5cdFx0XHQpXG5cdH1cblxuXHRyZXR1cm4gdXBkYXRlZEV2ZW50c1xufVxuXG5pbnRlcmZhY2UgRGVsZXRlUmVjdXJyaW5nRXZlbnRQcm9wcyB7XG5cdHRhcmdldEV2ZW50OiBDYWxlbmRhckV2ZW50XG5cdGN1cnJlbnRFdmVudHM6IENhbGVuZGFyRXZlbnRbXVxuXHRzY29wZTogJ3RoaXMnIHwgJ2ZvbGxvd2luZycgfCAnYWxsJ1xufVxuXG5leHBvcnQgY29uc3QgZGVsZXRlUmVjdXJyaW5nRXZlbnQgPSAoe1xuXHR0YXJnZXRFdmVudCxcblx0Y3VycmVudEV2ZW50cyxcblx0c2NvcGUsXG59OiBEZWxldGVSZWN1cnJpbmdFdmVudFByb3BzKTogQ2FsZW5kYXJFdmVudFtdID0+IHtcblx0Y29uc3QgdXBkYXRlZEV2ZW50cyA9IFsuLi5jdXJyZW50RXZlbnRzXVxuXHRjb25zdCBiYXNlRXZlbnRJbmRleCA9IGZpbmRCYXNlRXZlbnRJbmRleCh1cGRhdGVkRXZlbnRzLCB0YXJnZXRFdmVudClcblx0Y29uc3QgYmFzZUV2ZW50ID0gdXBkYXRlZEV2ZW50c1tiYXNlRXZlbnRJbmRleF1cblxuXHRzd2l0Y2ggKHNjb3BlKSB7XG5cdFx0Y2FzZSAndGhpcyc6IHtcblx0XHRcdC8vIFwiVGhpcyBldmVudCBvbmx5XCIgLSBBZGQgRVhEQVRFIHRvIGV4Y2x1ZGUgdGhpcyBvY2N1cnJlbmNlXG5cdFx0XHRjb25zdCB0YXJnZXRFdmVudFN0YXJ0SVNPID0gdGFyZ2V0RXZlbnQuc3RhcnQudG9JU09TdHJpbmcoKVxuXHRcdFx0Y29uc3QgZXhpc3RpbmdFeGRhdGVzID0gYmFzZUV2ZW50LmV4ZGF0ZXMgfHwgW11cblx0XHRcdGNvbnN0IHVwZGF0ZWRFeGRhdGVzID0gWy4uLmV4aXN0aW5nRXhkYXRlcywgdGFyZ2V0RXZlbnRTdGFydElTT11cblxuXHRcdFx0Y29uc3QgdXBkYXRlZEJhc2VFdmVudCA9IHsgLi4uYmFzZUV2ZW50LCBleGRhdGVzOiB1cGRhdGVkRXhkYXRlcyB9XG5cdFx0XHR1cGRhdGVkRXZlbnRzW2Jhc2VFdmVudEluZGV4XSA9IHVwZGF0ZWRCYXNlRXZlbnRcblx0XHRcdGJyZWFrXG5cdFx0fVxuXG5cdFx0Y2FzZSAnZm9sbG93aW5nJzoge1xuXHRcdFx0Ly8gXCJUaGlzIGFuZCBmb2xsb3dpbmdcIiAtIFRlcm1pbmF0ZSBzZXJpZXMgd2l0aCBVTlRJTCBiZWZvcmUgdGFyZ2V0IGRhdGVcblx0XHRcdGNvbnN0IHRlcm1pbmF0ZWRFdmVudCA9IHtcblx0XHRcdFx0Li4uYmFzZUV2ZW50LFxuXHRcdFx0XHRycnVsZToge1xuXHRcdFx0XHRcdC4uLmJhc2VFdmVudC5ycnVsZSxcblx0XHRcdFx0XHR1bnRpbDogZ2V0U2VyaWVzVGVybWluYXRpb25EYXRlKHRhcmdldEV2ZW50KSxcblx0XHRcdFx0fSBhcyBSUnVsZU9wdGlvbnMsXG5cdFx0XHR9XG5cdFx0XHR1cGRhdGVkRXZlbnRzW2Jhc2VFdmVudEluZGV4XSA9IHRlcm1pbmF0ZWRFdmVudFxuXHRcdFx0YnJlYWtcblx0XHR9XG5cblx0XHRjYXNlICdhbGwnOiB7XG5cdFx0XHQvLyBcIkFsbCBldmVudHNcIiAtIFJlbW92ZSB0aGUgZW50aXJlIHJlY3VycmluZyBzZXJpZXNcblx0XHRcdGNvbnN0IHRhcmdldFVpZCA9IGdldEV2ZW50UGFyZW50VUlEKHRhcmdldEV2ZW50KVxuXHRcdFx0Y29uc3QgZXZlbnRzV2l0aG91dFRhcmdldFNlcmllcyA9IHVwZGF0ZWRFdmVudHMuZmlsdGVyKFxuXHRcdFx0XHQoZSkgPT4gZ2V0RXZlbnRQYXJlbnRVSUQoZSkgIT09IHRhcmdldFVpZFxuXHRcdFx0KVxuXHRcdFx0cmV0dXJuIGV2ZW50c1dpdGhvdXRUYXJnZXRTZXJpZXNcblx0XHR9XG5cblx0XHRkZWZhdWx0OlxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0XHRgSW52YWxpZCBzY29wZTogJHtzY29wZX0uIE11c3QgYmUgJ3RoaXMnLCAnZm9sbG93aW5nJywgb3IgJ2FsbCdgXG5cdFx0XHQpXG5cdH1cblxuXHRyZXR1cm4gdXBkYXRlZEV2ZW50c1xufVxuIiwKICAgICJpbXBvcnQgdHlwZSB7IFRyYW5zbGF0aW9ucyB9IGZyb20gJy4vdHlwZXMnXG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0VHJhbnNsYXRpb25zOiBUcmFuc2xhdGlvbnMgPSB7XG5cdC8vIENvbW1vbiBhY3Rpb25zXG5cdHRvZGF5OiAnVG9kYXknLFxuXHRjcmVhdGU6ICdDcmVhdGUnLFxuXHRuZXc6ICdOZXcnLFxuXHR1cGRhdGU6ICdVcGRhdGUnLFxuXHRkZWxldGU6ICdEZWxldGUnLFxuXHRjYW5jZWw6ICdDYW5jZWwnLFxuXHRleHBvcnQ6ICdFeHBvcnQnLFxuXG5cdC8vIEV2ZW50IHJlbGF0ZWRcblx0ZXZlbnQ6ICdFdmVudCcsXG5cdGV2ZW50czogJ0V2ZW50cycsXG5cdG5ld0V2ZW50OiAnTmV3IEV2ZW50Jyxcblx0dGl0bGU6ICdUaXRsZScsXG5cdGRlc2NyaXB0aW9uOiAnRGVzY3JpcHRpb24nLFxuXHRsb2NhdGlvbjogJ0xvY2F0aW9uJyxcblx0YWxsRGF5OiAnQWxsIGRheScsXG5cdHN0YXJ0RGF0ZTogJ1N0YXJ0IERhdGUnLFxuXHRlbmREYXRlOiAnRW5kIERhdGUnLFxuXHRzdGFydFRpbWU6ICdTdGFydCBUaW1lJyxcblx0c2VhcmNoVGltZTogJ1NlYXJjaCB0aW1lLi4uJyxcblx0ZW5kVGltZTogJ0VuZCBUaW1lJyxcblx0Y29sb3I6ICdDb2xvcicsXG5cblx0Ly8gRXZlbnQgZm9ybVxuXHRjcmVhdGVFdmVudDogJ0NyZWF0ZSBFdmVudCcsXG5cdGVkaXRFdmVudDogJ0VkaXQgRXZlbnQnLFxuXHRhZGROZXdFdmVudDogJ0FkZCBhIG5ldyBldmVudCB0byB5b3VyIGNhbGVuZGFyJyxcblx0ZWRpdEV2ZW50RGV0YWlsczogJ0VkaXQgeW91ciBldmVudCBkZXRhaWxzJyxcblx0ZXZlbnRUaXRsZVBsYWNlaG9sZGVyOiAnRXZlbnQgdGl0bGUnLFxuXHRldmVudERlc2NyaXB0aW9uUGxhY2Vob2xkZXI6ICdFdmVudCBkZXNjcmlwdGlvbiAob3B0aW9uYWwpJyxcblx0ZXZlbnRMb2NhdGlvblBsYWNlaG9sZGVyOiAnRXZlbnQgbG9jYXRpb24gKG9wdGlvbmFsKScsXG5cblx0Ly8gUmVjdXJyZW5jZVxuXHRyZXBlYXQ6ICdSZXBlYXQnLFxuXHRyZXBlYXRzOiAnUmVwZWF0cycsXG5cdGN1c3RvbVJlY3VycmVuY2U6ICdDdXN0b20gcmVjdXJyZW5jZScsXG5cdGRhaWx5OiAnRGFpbHknLFxuXHR3ZWVrbHk6ICdXZWVrbHknLFxuXHRtb250aGx5OiAnTW9udGhseScsXG5cdHllYXJseTogJ1llYXJseScsXG5cdGludGVydmFsOiAnSW50ZXJ2YWwnLFxuXHRyZXBlYXRPbjogJ1JlcGVhdCBvbicsXG5cdG5ldmVyOiAnTmV2ZXInLFxuXHRjb3VudDogJ0NvdW50Jyxcblx0ZXZlcnk6ICdFdmVyeScsXG5cdGVuZHM6ICdFbmRzJyxcblx0YWZ0ZXI6ICdBZnRlcicsXG5cdG9jY3VycmVuY2VzOiAnb2NjdXJyZW5jZXMnLFxuXHRvbjogJ09uJyxcblxuXHQvLyBSZWN1cnJlbmNlIGVkaXQgZGlhbG9nXG5cdGVkaXRSZWN1cnJpbmdFdmVudDogJ0VkaXQgcmVjdXJyaW5nIGV2ZW50Jyxcblx0ZGVsZXRlUmVjdXJyaW5nRXZlbnQ6ICdEZWxldGUgcmVjdXJyaW5nIGV2ZW50Jyxcblx0ZWRpdFJlY3VycmluZ0V2ZW50UXVlc3Rpb246XG5cdFx0J2lzIGEgcmVjdXJyaW5nIGV2ZW50LiBIb3cgd291bGQgeW91IGxpa2UgdG8gZWRpdCBpdD8nLFxuXHRkZWxldGVSZWN1cnJpbmdFdmVudFF1ZXN0aW9uOlxuXHRcdCdpcyBhIHJlY3VycmluZyBldmVudC4gSG93IHdvdWxkIHlvdSBsaWtlIHRvIGRlbGV0ZSBpdD8nLFxuXHR0aGlzRXZlbnQ6ICdUaGlzIGV2ZW50Jyxcblx0dGhpc0V2ZW50RGVzY3JpcHRpb246ICdPbmx5IGNoYW5nZSB0aGlzIHNwZWNpZmljIG9jY3VycmVuY2UnLFxuXHR0aGlzQW5kRm9sbG93aW5nRXZlbnRzOiAnVGhpcyBhbmQgZm9sbG93aW5nIGV2ZW50cycsXG5cdHRoaXNBbmRGb2xsb3dpbmdFdmVudHNEZXNjcmlwdGlvbjogJ0VkaXQgdGhpcyBhbmQgYWxsIGZ1dHVyZSBvY2N1cnJlbmNlcycsXG5cdGFsbEV2ZW50czogJ0FsbCBldmVudHMnLFxuXHRhbGxFdmVudHNEZXNjcmlwdGlvbjogJ0VkaXQgdGhlIGVudGlyZSByZWN1cnJpbmcgc2VyaWVzJyxcblx0b25seUNoYW5nZVRoaXM6ICdPbmx5IGNoYW5nZSB0aGlzIHNwZWNpZmljIG9jY3VycmVuY2UnLFxuXHRjaGFuZ2VUaGlzQW5kRnV0dXJlOiAnQ2hhbmdlIHRoaXMgYW5kIGFsbCBmdXR1cmUgb2NjdXJyZW5jZXMnLFxuXHRjaGFuZ2VFbnRpcmVTZXJpZXM6ICdDaGFuZ2UgdGhlIGVudGlyZSByZWN1cnJpbmcgc2VyaWVzJyxcblx0b25seURlbGV0ZVRoaXM6ICdPbmx5IGRlbGV0ZSB0aGlzIHNwZWNpZmljIG9jY3VycmVuY2UnLFxuXHRkZWxldGVUaGlzQW5kRnV0dXJlOiAnRGVsZXRlIHRoaXMgYW5kIGFsbCBmdXR1cmUgb2NjdXJyZW5jZXMnLFxuXHRkZWxldGVFbnRpcmVTZXJpZXM6ICdEZWxldGUgdGhlIGVudGlyZSByZWN1cnJpbmcgc2VyaWVzJyxcblxuXHQvLyBWaWV3IHR5cGVzXG5cdG1vbnRoOiAnTW9udGgnLFxuXHR3ZWVrOiAnV2VlaycsXG5cdGRheTogJ0RheScsXG5cdHllYXI6ICdZZWFyJyxcblx0bW9yZTogJ21vcmUnLFxuXG5cdC8vIFJlc291cmNlIGNhbGVuZGFyXG5cdHJlc291cmNlczogJ1Jlc291cmNlcycsXG5cdHJlc291cmNlOiAnUmVzb3VyY2UnLFxuXHR0aW1lOiAnVGltZScsXG5cdGRhdGU6ICdEYXRlJyxcblx0bm9SZXNvdXJjZXNWaXNpYmxlOiAnTm8gcmVzb3VyY2VzIHZpc2libGUnLFxuXHRhZGRSZXNvdXJjZXNPclNob3dFeGlzdGluZzogJ0FkZCByZXNvdXJjZXMgb3Igc2hvdyBleGlzdGluZyBvbmVzJyxcbn1cbiIsCiAgICAiaW1wb3J0IGRheWpzLCB7IHR5cGUgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcblxuLyoqIFdoZXRoZXIgdGhlIGdpdmVuIGRhdGUgZmFsbHMgb24gdG9kYXkgKGNhbGVuZGFyIGRheSwgcmVzcGVjdGluZyB0aW1lem9uZSkuICovXG5leHBvcnQgZnVuY3Rpb24gaXNUb2RheShkYXRlOiBEYXlqcyk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gZGF0ZS5pc1NhbWUoZGF5anMoKSwgJ2RheScpXG59XG5cbi8qKiBgWVlZWS1NTS1ERGAgc3RyaW5nIHVzZWQgYXMgYSBzdGFibGUgcGVyLWRheSBrZXkgYWNyb3NzIHRoZSBjb2RlYmFzZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREYXlLZXkoZGF0ZTogRGF5anMpOiBzdHJpbmcge1xuXHRyZXR1cm4gZGF0ZS5mb3JtYXQoJ1lZWVktTU0tREQnKVxufVxuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIHdlZWsgZGF5cyBmb3IgYSBnaXZlbiBkYXRlIGFuZCBmaXJzdCBkYXkgb2Ygd2VlayBzZXR0aW5nLlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gZW5zdXJlcyB0aGF0IHRoZSBjdXJyZW50IGRhdGUgaXMgYWx3YXlzIGluY2x1ZGVkIGluIHRoZSByZXR1cm5lZCB3ZWVrLFxuICogZXZlbiB3aGVuIHRoZSBmaXJzdCBkYXkgb2Ygd2VlayBpcyBzZXQgdG8gYSBkYXkgYWZ0ZXIgdGhlIGN1cnJlbnQgZGF0ZS5cbiAqXG4gKiBAcGFyYW0gY3VycmVudERhdGUgLSBUaGUgcmVmZXJlbmNlIGRhdGUgZm9yIGNhbGN1bGF0aW5nIHRoZSB3ZWVrXG4gKiBAcGFyYW0gZmlyc3REYXlPZldlZWsgLSBUaGUgZGF5IG51bWJlciAoMC02KSByZXByZXNlbnRpbmcgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2VlayAoMCA9IFN1bmRheSwgMSA9IE1vbmRheSwgZXRjLilcbiAqIEByZXR1cm5zIEFuIGFycmF5IG9mIDcgZGF5anMgb2JqZWN0cyByZXByZXNlbnRpbmcgdGhlIHdlZWsgZGF5cywgc3RhcnRpbmcgZnJvbSBmaXJzdERheU9mV2Vla1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBHZXQgd2VlayBzdGFydGluZyBmcm9tIE1vbmRheSBmb3IgY3VycmVudCBkYXRlXG4gKiBjb25zdCB3ZWVrRGF5cyA9IGdldFdlZWtEYXlzKGRheWpzKCcyMDI1LTEwLTEzJyksIDEpXG4gKiAvLyBSZXR1cm5zOiBbTW9uIE9jdCAxMywgVHVlIE9jdCAxNCwgLi4uLCBTdW4gT2N0IDE5XVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBHZXQgd2VlayBzdGFydGluZyBmcm9tIFdlZG5lc2RheSB3aGVuIGN1cnJlbnQgZGF0ZSBpcyBNb25kYXlcbiAqIGNvbnN0IHdlZWtEYXlzID0gZ2V0V2Vla0RheXMoZGF5anMoJzIwMjUtMTAtMTMnKSwgMylcbiAqIC8vIFJldHVybnM6IFtXZWQgT2N0IDgsIFRodSBPY3QgOSwgLi4uLCBUdWUgT2N0IDE0XSAoaW5jbHVkZXMgTW9uZGF5IE9jdCAxMylcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFdlZWtEYXlzKFxuXHRjdXJyZW50RGF0ZTogRGF5anMsXG5cdGZpcnN0RGF5T2ZXZWVrOiBudW1iZXJcbik6IERheWpzW10ge1xuXHRjb25zdCBzdGFydE9mV2Vla0Zyb21DdXJyZW50RGF0ZSA9IGN1cnJlbnREYXRlXG5cdFx0LnN0YXJ0T2YoJ3dlZWsnKVxuXHRcdC5kYXkoZmlyc3REYXlPZldlZWspXG5cblx0Y29uc3QgYWRqdXN0ZWRTdGFydE9mV2VlayA9IGN1cnJlbnREYXRlLmlzQmVmb3JlKHN0YXJ0T2ZXZWVrRnJvbUN1cnJlbnREYXRlKVxuXHRcdD8gc3RhcnRPZldlZWtGcm9tQ3VycmVudERhdGUuc3VidHJhY3QoMSwgJ3dlZWsnKVxuXHRcdDogc3RhcnRPZldlZWtGcm9tQ3VycmVudERhdGVcblxuXHRyZXR1cm4gQXJyYXkuZnJvbSh7IGxlbmd0aDogNyB9LCAoXywgZGF5SW5kZXgpID0+XG5cdFx0YWRqdXN0ZWRTdGFydE9mV2Vlay5hZGQoZGF5SW5kZXgsICdkYXknKVxuXHQpXG59XG5cbi8qKlxuICogR2VuZXJhdGVzIDYgd2Vla3Mgb2YgZGF5cyBmb3IgYSBtb250aCBjYWxlbmRhciB2aWV3LlxuICogQWx3YXlzIHJldHVybnMgNDIgZGF5cyAoNiB3ZWVrcyDDlyA3IGRheXMpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TW9udGhXZWVrcyhcblx0bW9udGhEYXRlOiBEYXlqcyxcblx0Zmlyc3REYXlPZldlZWs6IG51bWJlclxuKTogRGF5anNbXVtdIHtcblx0Y29uc3QgZmlyc3RXZWVrID0gZ2V0V2Vla0RheXMobW9udGhEYXRlLnN0YXJ0T2YoJ21vbnRoJyksIGZpcnN0RGF5T2ZXZWVrKVxuXG5cdHJldHVybiBBcnJheS5mcm9tKHsgbGVuZ3RoOiA2IH0sIChfLCB3ZWVrSW5kZXgpID0+IHtcblx0XHRjb25zdCB3ZWVrU3RhcnQgPSBmaXJzdFdlZWtbMF0uYWRkKHdlZWtJbmRleCwgJ3dlZWsnKVxuXHRcdHJldHVybiBnZXRXZWVrRGF5cyh3ZWVrU3RhcnQsIGZpcnN0RGF5T2ZXZWVrKVxuXHR9KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TW9udGhEYXlzKG1vbnRoRGF0ZTogRGF5anMpOiBEYXlqc1tdIHtcblx0Y29uc3QgZGF5c0luTW9udGggPSBtb250aERhdGUuZGF5c0luTW9udGgoKVxuXHRjb25zdCBzdGFydE9mTW9udGggPSBtb250aERhdGUuc3RhcnRPZignbW9udGgnKVxuXHRyZXR1cm4gQXJyYXkuZnJvbSh7IGxlbmd0aDogZGF5c0luTW9udGggfSwgKF8sIGkpID0+XG5cdFx0c3RhcnRPZk1vbnRoLmFkZChpLCAnZGF5Jylcblx0KVxufVxuXG5pbnRlcmZhY2UgR2V0RGF5SG91cnNPcHRpb25zIHtcblx0cmVmZXJlbmNlRGF0ZT86IERheWpzXG5cdGxlbmd0aD86IG51bWJlclxufVxuXG4vKipcbiAqIEdlbmVyYXRlcyBhbiBhcnJheSBvZiAyNCBkYXlqcyBvYmplY3RzIHJlcHJlc2VudGluZyBob3VybHkgc2xvdHMgZm9yIGEgZGF5LlxuICogVXNlcyAuaG91cihpKSBzbyBlYWNoIHJvdyBtYXBzIHRvIFwidGhlIGhvdXIgbGFiZWxlZCBpXCIg4oCUIGtlZXBpbmcgZ3JpZCByb3dzXG4gKiBhbGlnbmVkIGFjcm9zcyBjb2x1bW5zIGluIHdlZWsgdmlld3MuIE9uIERTVCBzcHJpbmctZm9yd2FyZCwgLmhvdXIoMikgcmV0dXJuc1xuICogMyBBTSAodGhlIG5vbi1leGlzdGVudCBob3VyIGlzIGNvbGxhcHNlZCksIGJ1dCB0aGUgZ3JpZCBrZXkgZml4IChkYXlJbmRleClcbiAqIGFuZCBwZXItZGF5IGdlbmVyYXRpb24gaW4gdmlld3MgaGFuZGxlIHRoaXMgY29ycmVjdGx5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGF5SG91cnMoe1xuXHRyZWZlcmVuY2VEYXRlID0gZGF5anMoKSxcblx0bGVuZ3RoID0gMjQsXG59OiBHZXREYXlIb3Vyc09wdGlvbnMgPSB7fSk6IERheWpzW10ge1xuXHRjb25zdCBzdGFydE9mRGF5ID0gcmVmZXJlbmNlRGF0ZS5zdGFydE9mKCdkYXknKVxuXHRyZXR1cm4gQXJyYXkuZnJvbSh7IGxlbmd0aCB9LCAoXywgaSkgPT5cblx0XHRzdGFydE9mRGF5LmhvdXIoaSkubWludXRlKDApLnNlY29uZCgwKS5taWxsaXNlY29uZCgwKVxuXHQpXG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB0eXBlIHsgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcblxuLyoqXG4gKiBLZWVwIG9ubHkgZXZlbnRzIHdob3NlIGlkIGFwcGVhcnMgaW4gYHJlc291cmNlRXZlbnRzYC4gSWRzIGFyZSBjb21wYXJlZCBhc1xuICogc3RyaW5ncyBzbyBudW1lcmljL3N0cmluZyBtaXNtYXRjaGVzIGJldHdlZW4gc291cmNlcyBkb24ndCBjYXVzZSBmYWxzZVxuICogbmVnYXRpdmVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyRXZlbnRzQnlSZXNvdXJjZShcblx0ZXZlbnRzOiBDYWxlbmRhckV2ZW50W10sXG5cdHJlc291cmNlRXZlbnRzOiBDYWxlbmRhckV2ZW50W11cbik6IENhbGVuZGFyRXZlbnRbXSB7XG5cdGNvbnN0IGlkcyA9IG5ldyBTZXQocmVzb3VyY2VFdmVudHMubWFwKChlKSA9PiBTdHJpbmcoZS5pZCkpKVxuXHRyZXR1cm4gZXZlbnRzLmZpbHRlcigoZXZlbnQpID0+IGlkcy5oYXMoU3RyaW5nKGV2ZW50LmlkKSkpXG59XG5cbi8qKlxuICogV2hldGhlciBhbiBldmVudCdzIGludGVydmFsIG92ZXJsYXBzIHdpdGggdGhlIGBbc3RhcnQsIGVuZF1gIHJhbmdlXG4gKiAoaW5jbHVzaXZlKS4gQ292ZXJzIHRoZSB0aHJlZSBjYXNlczogc3RhcnRzIGluc2lkZSB0aGUgcmFuZ2UsIGVuZHMgaW5zaWRlXG4gKiB0aGUgcmFuZ2UsIG9yIGZ1bGx5IHNwYW5zIHRoZSByYW5nZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV2ZW50T3ZlcmxhcHNSYW5nZShcblx0ZXZlbnQ6IENhbGVuZGFyRXZlbnQsXG5cdHN0YXJ0OiBEYXlqcyxcblx0ZW5kOiBEYXlqc1xuKTogYm9vbGVhbiB7XG5cdGNvbnN0IHN0YXJ0c0luUmFuZ2UgPVxuXHRcdGV2ZW50LnN0YXJ0LmlzU2FtZU9yQWZ0ZXIoc3RhcnQpICYmIGV2ZW50LnN0YXJ0LmlzU2FtZU9yQmVmb3JlKGVuZClcblx0Y29uc3QgZW5kc0luUmFuZ2UgPVxuXHRcdGV2ZW50LmVuZC5pc1NhbWVPckFmdGVyKHN0YXJ0KSAmJiBldmVudC5lbmQuaXNTYW1lT3JCZWZvcmUoZW5kKVxuXHRjb25zdCBzcGFuc1JhbmdlID0gZXZlbnQuc3RhcnQuaXNCZWZvcmUoc3RhcnQpICYmIGV2ZW50LmVuZC5pc0FmdGVyKGVuZClcblx0cmV0dXJuIHN0YXJ0c0luUmFuZ2UgfHwgZW5kc0luUmFuZ2UgfHwgc3BhbnNSYW5nZVxufVxuIiwKICAgICJpbXBvcnQgeyBCdXR0b24gfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvYnV0dG9uJ1xuaW1wb3J0IHtcblx0RGlhbG9nLFxuXHREaWFsb2dDb250ZW50LFxuXHREaWFsb2dEZXNjcmlwdGlvbixcblx0RGlhbG9nRm9vdGVyLFxuXHREaWFsb2dIZWFkZXIsXG5cdERpYWxvZ1RpdGxlLFxufSBmcm9tICdAL2NvbXBvbmVudHMvdWkvZGlhbG9nJ1xuaW1wb3J0IHR5cGUgeyBSZWN1cnJlbmNlRWRpdFNjb3BlIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL3R5cGVzJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuXG5jb25zdCBTQ09QRVMgPSBbXG5cdHtcblx0XHRzY29wZTogJ3RoaXMnLFxuXHRcdHRpdGxlOiAndGhpc0V2ZW50Jyxcblx0XHRlZGl0S2V5OiAnb25seUNoYW5nZVRoaXMnLFxuXHRcdGRlbGV0ZUtleTogJ29ubHlEZWxldGVUaGlzJyxcblx0fSxcblx0e1xuXHRcdHNjb3BlOiAnZm9sbG93aW5nJyxcblx0XHR0aXRsZTogJ3RoaXNBbmRGb2xsb3dpbmdFdmVudHMnLFxuXHRcdGVkaXRLZXk6ICdjaGFuZ2VUaGlzQW5kRnV0dXJlJyxcblx0XHRkZWxldGVLZXk6ICdkZWxldGVUaGlzQW5kRnV0dXJlJyxcblx0fSxcblx0e1xuXHRcdHNjb3BlOiAnYWxsJyxcblx0XHR0aXRsZTogJ2FsbEV2ZW50cycsXG5cdFx0ZWRpdEtleTogJ2NoYW5nZUVudGlyZVNlcmllcycsXG5cdFx0ZGVsZXRlS2V5OiAnZGVsZXRlRW50aXJlU2VyaWVzJyxcblx0fSxcbl0gYXMgY29uc3RcblxuaW50ZXJmYWNlIFJlY3VycmVuY2VFZGl0RGlhbG9nUHJvcHMge1xuXHRpc09wZW46IGJvb2xlYW5cblx0b25DbG9zZTogKCkgPT4gdm9pZFxuXHRvbkNvbmZpcm06IChzY29wZTogUmVjdXJyZW5jZUVkaXRTY29wZSkgPT4gdm9pZFxuXHRvcGVyYXRpb25UeXBlOiAnZWRpdCcgfCAnZGVsZXRlJ1xuXHRldmVudFRpdGxlOiBzdHJpbmdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFJlY3VycmVuY2VFZGl0RGlhbG9nKHtcblx0aXNPcGVuLFxuXHRvbkNsb3NlLFxuXHRvbkNvbmZpcm0sXG5cdG9wZXJhdGlvblR5cGUsXG5cdGV2ZW50VGl0bGUsXG59OiBSZWN1cnJlbmNlRWRpdERpYWxvZ1Byb3BzKSB7XG5cdGNvbnN0IHsgdCB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKGNvbnRleHQpID0+ICh7IHQ6IGNvbnRleHQudCB9KSlcblxuXHRjb25zdCBoYW5kbGVTY29wZVNlbGVjdCA9IChzY29wZTogUmVjdXJyZW5jZUVkaXRTY29wZSkgPT4ge1xuXHRcdG9uQ29uZmlybShzY29wZSlcblx0XHRvbkNsb3NlKClcblx0fVxuXG5cdGNvbnN0IGlzRWRpdCA9IG9wZXJhdGlvblR5cGUgPT09ICdlZGl0J1xuXG5cdHJldHVybiAoXG5cdFx0PERpYWxvZyBvbk9wZW5DaGFuZ2U9e29uQ2xvc2V9IG9wZW49e2lzT3Blbn0+XG5cdFx0XHQ8RGlhbG9nQ29udGVudCBjbGFzc05hbWU9XCJtYXgtdy1tZFwiPlxuXHRcdFx0XHQ8RGlhbG9nSGVhZGVyPlxuXHRcdFx0XHRcdDxEaWFsb2dUaXRsZT5cblx0XHRcdFx0XHRcdHtpc0VkaXQgPyB0KCdlZGl0UmVjdXJyaW5nRXZlbnQnKSA6IHQoJ2RlbGV0ZVJlY3VycmluZ0V2ZW50Jyl9XG5cdFx0XHRcdFx0PC9EaWFsb2dUaXRsZT5cblx0XHRcdFx0XHQ8RGlhbG9nRGVzY3JpcHRpb24+XG5cdFx0XHRcdFx0XHRcIntldmVudFRpdGxlfVwieycgJ31cblx0XHRcdFx0XHRcdHtpc0VkaXRcblx0XHRcdFx0XHRcdFx0PyB0KCdlZGl0UmVjdXJyaW5nRXZlbnRRdWVzdGlvbicpXG5cdFx0XHRcdFx0XHRcdDogdCgnZGVsZXRlUmVjdXJyaW5nRXZlbnRRdWVzdGlvbicpfVxuXHRcdFx0XHRcdDwvRGlhbG9nRGVzY3JpcHRpb24+XG5cdFx0XHRcdDwvRGlhbG9nSGVhZGVyPlxuXG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwic3BhY2UteS0zXCI+XG5cdFx0XHRcdFx0e1NDT1BFUy5tYXAoKHsgc2NvcGUsIHRpdGxlLCBlZGl0S2V5LCBkZWxldGVLZXkgfSkgPT4gKFxuXHRcdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJ3LWZ1bGwganVzdGlmeS1zdGFydCBoLWF1dG8gcC00XCJcblx0XHRcdFx0XHRcdFx0a2V5PXtzY29wZX1cblx0XHRcdFx0XHRcdFx0b25DbGljaz17KCkgPT4gaGFuZGxlU2NvcGVTZWxlY3Qoc2NvcGUpfVxuXHRcdFx0XHRcdFx0XHR2YXJpYW50PVwib3V0bGluZVwiXG5cdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidGV4dC1sZWZ0XCI+XG5cdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmb250LW1lZGl1bVwiPnt0KHRpdGxlKX08L2Rpdj5cblx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHR7dChpc0VkaXQgPyBlZGl0S2V5IDogZGVsZXRlS2V5KX1cblx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdFx0XHQpKX1cblx0XHRcdFx0PC9kaXY+XG5cblx0XHRcdFx0PERpYWxvZ0Zvb3Rlcj5cblx0XHRcdFx0XHQ8QnV0dG9uIG9uQ2xpY2s9e29uQ2xvc2V9IHZhcmlhbnQ9XCJvdXRsaW5lXCI+XG5cdFx0XHRcdFx0XHR7dCgnY2FuY2VsJyl9XG5cdFx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHRcdDwvRGlhbG9nRm9vdGVyPlxuXHRcdFx0PC9EaWFsb2dDb250ZW50PlxuXHRcdDwvRGlhbG9nPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgRHJhZ0VuZEV2ZW50IH0gZnJvbSAnQGRuZC1raXQvY29yZSdcbmltcG9ydCBkYXlqcywgeyB0eXBlIERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICcuLi90eXBlcydcblxuaW50ZXJmYWNlIERyb3BDZWxsRGF0YSB7XG5cdHR5cGU/OiBzdHJpbmdcblx0ZGF0ZT86IHN0cmluZ1xuXHRob3VyPzogbnVtYmVyXG5cdG1pbnV0ZT86IG51bWJlclxuXHRyZXNvdXJjZUlkPzogc3RyaW5nXG5cdGFsbERheT86IGJvb2xlYW5cbn1cblxuZXhwb3J0IGNvbnN0IGdldFVwZGF0ZWRFdmVudCA9IChcblx0ZXZlbnQ6IERyYWdFbmRFdmVudCxcblx0YWN0aXZlRXZlbnQ6IENhbGVuZGFyRXZlbnQgfCBudWxsXG4pID0+IHtcblx0Y29uc3QgeyBhY3RpdmUsIG92ZXIgfSA9IGV2ZW50XG5cblx0aWYgKCFhY3RpdmUgfHwgIW92ZXIgfHwgIWFjdGl2ZUV2ZW50KSB7XG5cdFx0cmV0dXJuIG51bGxcblx0fVxuXG5cdGNvbnN0IGRhdGEgPSAob3Zlci5kYXRhLmN1cnJlbnQgfHwge30pIGFzIERyb3BDZWxsRGF0YVxuXHRjb25zdCBpc1RpbWVDZWxsID0gZGF0YS50eXBlID09PSAndGltZS1jZWxsJ1xuXHRjb25zdCB7IHJlc291cmNlSWQsIGFsbERheSB9ID0gZGF0YVxuXHRsZXQgbmV3U3RhcnQ6IERheWpzXG5cblx0aWYgKGlzVGltZUNlbGwpIHtcblx0XHRjb25zdCB7IGRhdGUsIGhvdXIgPSAwLCBtaW51dGUgPSAwIH0gPSBkYXRhXG5cblx0XHQvLyBDcmVhdGUgbmV3IHN0YXJ0IHRpbWUgYmFzZWQgb24gdGhlIGRyb3AgdGFyZ2V0XG5cdFx0bmV3U3RhcnQgPSBkYXlqcyhkYXRlKS5ob3VyKGhvdXIpLm1pbnV0ZShtaW51dGUpXG5cdH0gZWxzZSB7XG5cdFx0Y29uc3QgeyBkYXRlIH0gPSBkYXRhXG5cblx0XHRuZXdTdGFydCA9IGRheWpzKGRhdGUpXG5cdH1cblxuXHRjb25zdCBldmVudER1cmF0aW9uID0gYWN0aXZlRXZlbnQuZW5kLmRpZmYoYWN0aXZlRXZlbnQuc3RhcnQsICdzZWNvbmQnKVxuXG5cdC8vIENyZWF0ZSBuZXcgZW5kIHRpbWUgYnkgYWRkaW5nIHRoZSBvcmlnaW5hbCBkdXJhdGlvblxuXHRsZXQgbmV3RW5kID0gbmV3U3RhcnQuYWRkKGV2ZW50RHVyYXRpb24sICdzZWNvbmQnKVxuXG5cdGlmIChuZXdFbmQuaXNTYW1lKG5ld0VuZC5zdGFydE9mKCdkYXknKSkpIHtcblx0XHQvLyBJZiB0aGUgbmV3IGVuZCB0aW1lIGlzIGF0IG1pZG5pZ2h0LCBzZXQgaXQgdG8gMjQgaG91cnMgb2YgcGFydGlhbCBkYXlcblx0XHRuZXdFbmQgPSBuZXdFbmQuc3VidHJhY3QoMSwgJ2RheScpLmVuZE9mKCdkYXknKVxuXHR9XG5cblx0Ly8gVXBkYXRlIHRoZSBldmVudCB3aXRoIG5ldyB0aW1lcyBhbmQgcmVzb3VyY2UgaWYgY2hhbmdlZFxuXHRjb25zdCB1cGRhdGVzID0ge1xuXHRcdHN0YXJ0OiBuZXdTdGFydCxcblx0XHRlbmQ6IG5ld0VuZCxcblx0XHRyZXNvdXJjZUlkLFxuXHRcdGFsbERheTogaXNUaW1lQ2VsbCA/IGZhbHNlIDogKGFsbERheSA/PyBhY3RpdmVFdmVudC5hbGxEYXkpLFxuXHR9XG5cdHJldHVybiB7IGFjdGl2ZUV2ZW50LCB1cGRhdGVzIH1cbn1cbiIsCiAgICAiaW1wb3J0IHsgRHJhZ092ZXJsYXkgfSBmcm9tICdAZG5kLWtpdC9jb3JlJ1xuaW1wb3J0IHsgc25hcENlbnRlclRvQ3Vyc29yIH0gZnJvbSAnQGRuZC1raXQvbW9kaWZpZXJzJ1xuaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VJbXBlcmF0aXZlSGFuZGxlLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJy4uL3R5cGVzJ1xuXG5pbnRlcmZhY2UgRXZlbnREcmFnT3ZlcmxheVByb3BzIHtcblx0cmVmOiBSZWFjdC5SZWY8eyBzZXRBY3RpdmVFdmVudDogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkIH0+XG59XG5cbmV4cG9ydCBjb25zdCBFdmVudERyYWdPdmVybGF5OiBSZWFjdC5GQzxFdmVudERyYWdPdmVybGF5UHJvcHM+ID0gKHsgcmVmIH0pID0+IHtcblx0Y29uc3QgW2FjdGl2ZUV2ZW50LCBzZXRBY3RpdmVFdmVudF0gPSB1c2VTdGF0ZTxDYWxlbmRhckV2ZW50IHwgbnVsbD4obnVsbClcblxuXHR1c2VJbXBlcmF0aXZlSGFuZGxlKHJlZiwgKCkgPT4gKHtcblx0XHRzZXRBY3RpdmVFdmVudCxcblx0fSkpXG5cblx0cmV0dXJuIChcblx0XHQ8RHJhZ092ZXJsYXkgbW9kaWZpZXJzPXtbc25hcENlbnRlclRvQ3Vyc29yXX0+XG5cdFx0XHR7YWN0aXZlRXZlbnQgJiYgKFxuXHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdCdjdXJzb3ItZ3JhYiB0cnVuY2F0ZSByb3VuZGVkIGJnLWFtYmVyLTIwMCBwLTIgdGV4dC1bMTBweF0gc2hhZG93LWxnIHNtOnRleHQteHMgdy0yMCcsXG5cdFx0XHRcdFx0XHRhY3RpdmVFdmVudC5iYWNrZ3JvdW5kQ29sb3IgfHwgJ2JnLWJsdWUtNTAwJyxcblx0XHRcdFx0XHRcdGFjdGl2ZUV2ZW50LmNvbG9yIHx8ICd0ZXh0LXdoaXRlJ1xuXHRcdFx0XHRcdCl9XG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7YWN0aXZlRXZlbnQ/LnRpdGxlfVxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdCl9XG5cdFx0PC9EcmFnT3ZlcmxheT5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9idXR0b24nXG5pbXBvcnQgeyBDaGVja2JveCB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9jaGVja2JveCdcbmltcG9ydCB7IERhdGVQaWNrZXIgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvZGF0ZS1waWNrZXInXG5pbXBvcnQgeyBEaWFsb2dGb290ZXIgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvZGlhbG9nJ1xuaW1wb3J0IHsgSW5wdXQgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvaW5wdXQnXG5pbXBvcnQgeyBMYWJlbCB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9sYWJlbCdcbmltcG9ydCB7IFNjcm9sbEFyZWEgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvc2Nyb2xsLWFyZWEnXG5pbXBvcnQgeyBUaW1lUGlja2VyIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL3RpbWUtcGlja2VyJ1xuaW1wb3J0IHsgaXNCdXNpbmVzc0RheSB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvdXRpbHMvYnVzaW5lc3MtaG91cnMnXG5pbXBvcnQge1xuXHRidWlsZERhdGVUaW1lLFxuXHRidWlsZEVuZERhdGVUaW1lLFxuXHRnZXRUaW1lQ29uc3RyYWludHMsXG59IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvdXRpbHMvZXZlbnQtZm9ybS11dGlscydcbmltcG9ydCB7IFJlY3VycmVuY2VFZGl0RGlhbG9nIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL2NvbXBvbmVudHMvcmVjdXJyZW5jZS1lZGl0LWRpYWxvZydcbmltcG9ydCB7IFJlY3VycmVuY2VFZGl0b3IgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvY29tcG9uZW50cy9yZWN1cnJlbmNlLWVkaXRvci9yZWN1cnJlbmNlLWVkaXRvcidcbmltcG9ydCB7IHVzZVJlY3VycmluZ0V2ZW50QWN0aW9ucyB9IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS9ob29rcy91c2VSZWN1cnJpbmdFdmVudEFjdGlvbnMnXG5pbXBvcnQgdHlwZSB7IFJSdWxlT3B0aW9ucyB9IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS90eXBlcydcbmltcG9ydCB7IGlzUmVjdXJyaW5nRXZlbnQgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvdXRpbHMvcmVjdXJyZW5jZS1oYW5kbGVyJ1xuaW1wb3J0IHsgdXNlRWZmZWN0aXZlQnVzaW5lc3NIb3VycyB9IGZyb20gJ0AvaG9va3MvdXNlLWVmZmVjdGl2ZS1idXNpbmVzcy1ob3VycydcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmNvbnN0IENPTE9SX09QVElPTlMgPSBbXG5cdHsgdmFsdWU6ICdiZy1ibHVlLTEwMCB0ZXh0LWJsdWUtODAwJywgbGFiZWw6ICdCbHVlJyB9LFxuXHR7IHZhbHVlOiAnYmctZ3JlZW4tMTAwIHRleHQtZ3JlZW4tODAwJywgbGFiZWw6ICdHcmVlbicgfSxcblx0eyB2YWx1ZTogJ2JnLXB1cnBsZS0xMDAgdGV4dC1wdXJwbGUtODAwJywgbGFiZWw6ICdQdXJwbGUnIH0sXG5cdHsgdmFsdWU6ICdiZy1yZWQtMTAwIHRleHQtcmVkLTgwMCcsIGxhYmVsOiAnUmVkJyB9LFxuXHR7IHZhbHVlOiAnYmcteWVsbG93LTEwMCB0ZXh0LXllbGxvdy04MDAnLCBsYWJlbDogJ1llbGxvdycgfSxcblx0eyB2YWx1ZTogJ2JnLXBpbmstMTAwIHRleHQtcGluay04MDAnLCBsYWJlbDogJ1BpbmsnIH0sXG5cdHsgdmFsdWU6ICdiZy1pbmRpZ28tMTAwIHRleHQtaW5kaWdvLTgwMCcsIGxhYmVsOiAnSW5kaWdvJyB9LFxuXHR7IHZhbHVlOiAnYmctYW1iZXItMTAwIHRleHQtYW1iZXItODAwJywgbGFiZWw6ICdBbWJlcicgfSxcblx0eyB2YWx1ZTogJ2JnLWVtZXJhbGQtMTAwIHRleHQtZW1lcmFsZC04MDAnLCBsYWJlbDogJ0VtZXJhbGQnIH0sXG5cdHsgdmFsdWU6ICdiZy1za3ktMTAwIHRleHQtc2t5LTgwMCcsIGxhYmVsOiAnU2t5JyB9LFxuXHR7IHZhbHVlOiAnYmctdmlvbGV0LTEwMCB0ZXh0LXZpb2xldC04MDAnLCBsYWJlbDogJ1Zpb2xldCcgfSxcblx0eyB2YWx1ZTogJ2JnLXJvc2UtMTAwIHRleHQtcm9zZS04MDAnLCBsYWJlbDogJ1Jvc2UnIH0sXG5cdHsgdmFsdWU6ICdiZy10ZWFsLTEwMCB0ZXh0LXRlYWwtODAwJywgbGFiZWw6ICdUZWFsJyB9LFxuXHR7IHZhbHVlOiAnYmctb3JhbmdlLTEwMCB0ZXh0LW9yYW5nZS04MDAnLCBsYWJlbDogJ09yYW5nZScgfSxcbl1cblxudHlwZSBUZXh0RmllbGROYW1lID0gJ3RpdGxlJyB8ICdkZXNjcmlwdGlvbicgfCAnbG9jYXRpb24nXG5cbmludGVyZmFjZSBFdmVudEZvcm1UZXh0RmllbGRQcm9wcyB7XG5cdG5hbWU6IFRleHRGaWVsZE5hbWVcblx0bGFiZWw6IHN0cmluZ1xuXHRwbGFjZWhvbGRlcjogc3RyaW5nXG5cdHZhbHVlOiBzdHJpbmdcblx0cmVxdWlyZWQ/OiBib29sZWFuXG5cdG9uQ2hhbmdlOiAoXG5cdFx0ZTogUmVhY3QuQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudCB8IEhUTUxUZXh0QXJlYUVsZW1lbnQ+XG5cdCkgPT4gdm9pZFxufVxuXG4vLyBTaGFyZWQgdGl0bGUgLyBkZXNjcmlwdGlvbiAvIGxvY2F0aW9uIGlucHV0cyAobXVzdCBsaXZlIG91dHNpZGUgRXZlbnRGb3JtIHRvIGtlZXAgZm9jdXMpLlxuY29uc3QgRXZlbnRGb3JtVGV4dEZpZWxkID0gKHtcblx0bmFtZSxcblx0bGFiZWwsXG5cdHBsYWNlaG9sZGVyLFxuXHR2YWx1ZSxcblx0cmVxdWlyZWQgPSBmYWxzZSxcblx0b25DaGFuZ2UsXG59OiBFdmVudEZvcm1UZXh0RmllbGRQcm9wcykgPT4gKFxuXHQ8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ2FwLTEgc206Z2FwLTJcIj5cblx0XHQ8TGFiZWwgY2xhc3NOYW1lPVwidGV4dC14cyBzbTp0ZXh0LXNtXCIgaHRtbEZvcj17bmFtZX0+XG5cdFx0XHR7bGFiZWx9XG5cdFx0PC9MYWJlbD5cblx0XHQ8SW5wdXRcblx0XHRcdGNsYXNzTmFtZT1cImgtOCB0ZXh0LXNtIHNtOmgtOVwiXG5cdFx0XHRpZD17bmFtZX1cblx0XHRcdG5hbWU9e25hbWV9XG5cdFx0XHRvbkNoYW5nZT17b25DaGFuZ2V9XG5cdFx0XHRwbGFjZWhvbGRlcj17cGxhY2Vob2xkZXJ9XG5cdFx0XHRyZXF1aXJlZD17cmVxdWlyZWR9XG5cdFx0XHR2YWx1ZT17dmFsdWV9XG5cdFx0Lz5cblx0PC9kaXY+XG4pXG5cbmV4cG9ydCBpbnRlcmZhY2UgRXZlbnRGb3JtUHJvcHMge1xuXHRvcGVuPzogYm9vbGVhblxuXHRzZWxlY3RlZEV2ZW50PzogQ2FsZW5kYXJFdmVudCB8IG51bGxcblx0b25BZGQ/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0b25VcGRhdGU/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0b25EZWxldGU/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0b25DbG9zZTogKCkgPT4gdm9pZFxufVxuXG5leHBvcnQgY29uc3QgRXZlbnRGb3JtOiBSZWFjdC5GQzxFdmVudEZvcm1Qcm9wcz4gPSAoe1xuXHRzZWxlY3RlZEV2ZW50LFxuXHRvbkNsb3NlLFxuXHRvblVwZGF0ZSxcblx0b25EZWxldGUsXG5cdG9uQWRkLFxufSkgPT4ge1xuXHRjb25zdCB7XG5cdFx0ZGlhbG9nU3RhdGUsXG5cdFx0b3BlbkVkaXREaWFsb2csXG5cdFx0b3BlbkRlbGV0ZURpYWxvZyxcblx0XHRjbG9zZURpYWxvZyxcblx0XHRoYW5kbGVDb25maXJtLFxuXHR9ID0gdXNlUmVjdXJyaW5nRXZlbnRBY3Rpb25zKG9uQ2xvc2UpXG5cblx0Y29uc3QgeyBmaW5kUGFyZW50UmVjdXJyaW5nRXZlbnQsIHQsIHRpbWVGb3JtYXQgfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KFxuXHRcdChjb250ZXh0KSA9PiAoe1xuXHRcdFx0ZmluZFBhcmVudFJlY3VycmluZ0V2ZW50OiBjb250ZXh0LmZpbmRQYXJlbnRSZWN1cnJpbmdFdmVudCxcblx0XHRcdHQ6IGNvbnRleHQudCxcblx0XHRcdHRpbWVGb3JtYXQ6IGNvbnRleHQudGltZUZvcm1hdCxcblx0XHR9KVxuXHQpXG5cdGNvbnN0IGVmZmVjdGl2ZUJ1c2luZXNzSG91cnMgPSB1c2VFZmZlY3RpdmVCdXNpbmVzc0hvdXJzKFxuXHRcdHNlbGVjdGVkRXZlbnQ/LnJlc291cmNlSWRcblx0KVxuXG5cdGNvbnN0IHN0YXJ0ID0gc2VsZWN0ZWRFdmVudD8uc3RhcnQgPz8gZGF5anMoKVxuXHRjb25zdCBlbmQgPSBzZWxlY3RlZEV2ZW50Py5lbmQgPz8gZGF5anMoKS5hZGQoMSwgJ2hvdXInKVxuXG5cdC8vIEZpbmQgcGFyZW50IGV2ZW50IGlmIHRoaXMgaXMgYSByZWN1cnJpbmcgZXZlbnQgaW5zdGFuY2Vcblx0Y29uc3QgcGFyZW50RXZlbnQgPSBzZWxlY3RlZEV2ZW50XG5cdFx0PyBmaW5kUGFyZW50UmVjdXJyaW5nRXZlbnQoc2VsZWN0ZWRFdmVudClcblx0XHQ6IG51bGxcblxuXHQvLyBGb3JtIHN0YXRlXG5cdGNvbnN0IFtzdGFydERhdGUsIHNldFN0YXJ0RGF0ZV0gPSB1c2VTdGF0ZShzdGFydC50b0RhdGUoKSlcblx0Y29uc3QgW2VuZERhdGUsIHNldEVuZERhdGVdID0gdXNlU3RhdGUoZW5kLnRvRGF0ZSgpKVxuXHRjb25zdCBbaXNBbGxEYXksIHNldElzQWxsRGF5XSA9IHVzZVN0YXRlKHNlbGVjdGVkRXZlbnQ/LmFsbERheSB8fCBmYWxzZSlcblx0Y29uc3QgW3NlbGVjdGVkQ29sb3IsIHNldFNlbGVjdGVkQ29sb3JdID0gdXNlU3RhdGUoXG5cdFx0c2VsZWN0ZWRFdmVudD8uY29sb3IgfHwgQ09MT1JfT1BUSU9OU1swXS52YWx1ZVxuXHQpXG5cblx0Ly8gVGltZSBzdGF0ZVxuXHRjb25zdCBbc3RhcnRUaW1lLCBzZXRTdGFydFRpbWVdID0gdXNlU3RhdGUoc3RhcnQuZm9ybWF0KCdISDptbScpKVxuXHRjb25zdCBbZW5kVGltZSwgc2V0RW5kVGltZV0gPSB1c2VTdGF0ZShlbmQuZm9ybWF0KCdISDptbScpKVxuXG5cdC8vIEluaXRpYWxpemUgZm9ybSB2YWx1ZXMgZnJvbSBzZWxlY3RlZCBldmVudCBvciBkZWZhdWx0c1xuXHRjb25zdCBbZm9ybVZhbHVlcywgc2V0Rm9ybVZhbHVlc10gPSB1c2VTdGF0ZSh7XG5cdFx0dGl0bGU6IHNlbGVjdGVkRXZlbnQ/LnRpdGxlIHx8ICcnLFxuXHRcdGRlc2NyaXB0aW9uOiBzZWxlY3RlZEV2ZW50Py5kZXNjcmlwdGlvbiB8fCAnJyxcblx0XHRsb2NhdGlvbjogc2VsZWN0ZWRFdmVudD8ubG9jYXRpb24gfHwgJycsXG5cdH0pXG5cblx0Ly8gUmVjdXJyZW5jZSBzdGF0ZSAtIHB1bGwgUlJVTEUgZnJvbSBwYXJlbnQgaWYgdGhpcyBpcyBhbiBpbnN0YW5jZVxuXHRjb25zdCBbcnJ1bGUsIHNldFJydWxlXSA9IHVzZVN0YXRlPFJSdWxlT3B0aW9ucyB8IG51bGw+KCgpID0+IHtcblx0XHRjb25zdCBldmVudFJydWxlID0gc2VsZWN0ZWRFdmVudD8ucnJ1bGUgfHwgcGFyZW50RXZlbnQ/LnJydWxlXG5cdFx0cmV0dXJuIGV2ZW50UnJ1bGUgfHwgbnVsbFxuXHR9KVxuXG5cdC8vIENyZWF0ZSB3cmFwcGVyIGZ1bmN0aW9ucyB0byBmaXggVHlwZVNjcmlwdCBlcnJvcnMgd2l0aCBEYXRlUGlja2VyXG5cdGNvbnN0IGhhbmRsZVN0YXJ0RGF0ZUNoYW5nZSA9IChkYXRlOiBEYXRlIHwgdW5kZWZpbmVkKSA9PiB7XG5cdFx0aWYgKCFkYXRlKSByZXR1cm5cblx0XHRzZXRTdGFydERhdGUoZGF0ZSlcblx0XHRpZiAoZGF5anMoZGF0ZSkuaXNBZnRlcihkYXlqcyhlbmREYXRlKSkpIHtcblx0XHRcdHNldEVuZERhdGUoZGF0ZSlcblx0XHR9XG5cdH1cblxuXHRjb25zdCBoYW5kbGVFbmREYXRlQ2hhbmdlID0gKGRhdGU6IERhdGUgfCB1bmRlZmluZWQpID0+IHtcblx0XHRpZiAoIWRhdGUpIHJldHVyblxuXHRcdHNldEVuZERhdGUoZGF0ZSlcblx0XHRpZiAoZGF0ZSAmJiBkYXlqcyhkYXRlKS5pc0JlZm9yZShkYXlqcyhzdGFydERhdGUpKSkge1xuXHRcdFx0c2V0U3RhcnREYXRlKGRhdGUpXG5cdFx0fVxuXHR9XG5cblx0Ly8gVGltZSB2YWxpZGF0aW9uIGhhbmRsZXJzIC0gb25seSB2YWxpZGF0ZSB3aGVuIGRhdGVzIGFyZSB0aGUgc2FtZVxuXHRjb25zdCBoYW5kbGVTdGFydFRpbWVDaGFuZ2UgPSAodGltZTogc3RyaW5nKSA9PiB7XG5cdFx0c2V0U3RhcnRUaW1lKHRpbWUpXG5cdFx0Ly8gT25seSB2YWxpZGF0ZSBpZiBzYW1lIGRheVxuXHRcdGlmIChkYXlqcyhzdGFydERhdGUpLmlzU2FtZShkYXlqcyhlbmREYXRlKSwgJ2RheScpICYmIHRpbWUgPiBlbmRUaW1lKSB7XG5cdFx0XHRzZXRFbmRUaW1lKHRpbWUpXG5cdFx0fVxuXHR9XG5cblx0Y29uc3QgaGFuZGxlRW5kVGltZUNoYW5nZSA9ICh0aW1lOiBzdHJpbmcpID0+IHtcblx0XHRzZXRFbmRUaW1lKHRpbWUpXG5cdFx0Ly8gT25seSB2YWxpZGF0ZSBpZiBzYW1lIGRheVxuXHRcdGlmIChkYXlqcyhzdGFydERhdGUpLmlzU2FtZShkYXlqcyhlbmREYXRlKSwgJ2RheScpICYmIHRpbWUgPCBzdGFydFRpbWUpIHtcblx0XHRcdHNldFN0YXJ0VGltZSh0aW1lKVxuXHRcdH1cblx0fVxuXG5cdC8vIFVwZGF0ZSBmb3JtIHZhbHVlcyB3aGVuIGlucHV0IGNoYW5nZXNcblx0Y29uc3QgaGFuZGxlSW5wdXRDaGFuZ2UgPSAoXG5cdFx0ZTogUmVhY3QuQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudCB8IEhUTUxUZXh0QXJlYUVsZW1lbnQ+XG5cdCkgPT4ge1xuXHRcdGNvbnN0IHsgbmFtZSwgdmFsdWUgfSA9IGUudGFyZ2V0XG5cdFx0c2V0Rm9ybVZhbHVlcygocHJldikgPT4gKHsgLi4ucHJldiwgW25hbWVdOiB2YWx1ZSB9KSlcblx0fVxuXG5cdHVzZUVmZmVjdCgoKSA9PiB7XG5cdFx0Ly8gUmVzZXQgZW5kIHRpbWUgd2hlbiBhbGwgZGF5IGlzIHRvZ2dsZWQgdG8gb25cblx0XHRpZiAoaXNBbGxEYXkpIHtcblx0XHRcdHNldEVuZFRpbWUoJzIzOjU5Jylcblx0XHR9XG5cdH0sIFtpc0FsbERheV0pXG5cblx0Y29uc3QgaGFuZGxlU3VibWl0ID0gKGU6IFJlYWN0LkZvcm1FdmVudCkgPT4ge1xuXHRcdGUucHJldmVudERlZmF1bHQoKVxuXG5cdFx0Y29uc3Qgc3RhcnREYXRlVGltZSA9IGJ1aWxkRGF0ZVRpbWUoc3RhcnREYXRlLCBzdGFydFRpbWUsIGlzQWxsRGF5KVxuXHRcdGNvbnN0IGVuZERhdGVUaW1lID0gYnVpbGRFbmREYXRlVGltZShlbmREYXRlLCBlbmRUaW1lLCBpc0FsbERheSlcblxuXHRcdGNvbnN0IGV2ZW50RGF0YTogQ2FsZW5kYXJFdmVudCA9IHtcblx0XHRcdGlkOiBzZWxlY3RlZEV2ZW50Py5pZCB8fCBkYXlqcygpLmZvcm1hdCgnWVlZWU1NRERISG1tc3MnKSxcblx0XHRcdHRpdGxlOiBmb3JtVmFsdWVzLnRpdGxlLFxuXHRcdFx0c3RhcnQ6IHN0YXJ0RGF0ZVRpbWUsXG5cdFx0XHRlbmQ6IGVuZERhdGVUaW1lLFxuXHRcdFx0cmVzb3VyY2VJZDogc2VsZWN0ZWRFdmVudD8ucmVzb3VyY2VJZCxcblx0XHRcdGRlc2NyaXB0aW9uOiBmb3JtVmFsdWVzLmRlc2NyaXB0aW9uLFxuXHRcdFx0bG9jYXRpb246IGZvcm1WYWx1ZXMubG9jYXRpb24sXG5cdFx0XHRhbGxEYXk6IGlzQWxsRGF5LFxuXHRcdFx0Y29sb3I6IHNlbGVjdGVkQ29sb3IsXG5cdFx0XHRycnVsZTogcnJ1bGUgfHwgdW5kZWZpbmVkLFxuXHRcdH1cblxuXHRcdGlmIChzZWxlY3RlZEV2ZW50Py5pZCAmJiBpc1JlY3VycmluZ0V2ZW50KHNlbGVjdGVkRXZlbnQpKSB7XG5cdFx0XHRvcGVuRWRpdERpYWxvZyhzZWxlY3RlZEV2ZW50LCB7XG5cdFx0XHRcdHRpdGxlOiBmb3JtVmFsdWVzLnRpdGxlLFxuXHRcdFx0XHRzdGFydDogc3RhcnREYXRlVGltZSxcblx0XHRcdFx0ZW5kOiBlbmREYXRlVGltZSxcblx0XHRcdFx0ZGVzY3JpcHRpb246IGZvcm1WYWx1ZXMuZGVzY3JpcHRpb24sXG5cdFx0XHRcdGxvY2F0aW9uOiBmb3JtVmFsdWVzLmxvY2F0aW9uLFxuXHRcdFx0XHRhbGxEYXk6IGlzQWxsRGF5LFxuXHRcdFx0XHRjb2xvcjogc2VsZWN0ZWRDb2xvcixcblx0XHRcdFx0cnJ1bGU6IHJydWxlIHx8IHVuZGVmaW5lZCxcblx0XHRcdH0pXG5cdFx0XHRyZXR1cm5cblx0XHR9XG5cblx0XHRpZiAoc2VsZWN0ZWRFdmVudD8uaWQpIHtcblx0XHRcdG9uVXBkYXRlPy4oZXZlbnREYXRhKVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRvbkFkZD8uKGV2ZW50RGF0YSlcblx0XHR9XG5cdFx0b25DbG9zZSgpXG5cdH1cblxuXHRjb25zdCBoYW5kbGVEZWxldGUgPSAoKSA9PiB7XG5cdFx0aWYgKHNlbGVjdGVkRXZlbnQ/LmlkKSB7XG5cdFx0XHQvLyBDaGVjayBpZiB0aGlzIGlzIGEgcmVjdXJyaW5nIGV2ZW50XG5cdFx0XHRpZiAoaXNSZWN1cnJpbmdFdmVudChzZWxlY3RlZEV2ZW50KSkge1xuXHRcdFx0XHQvLyBTaG93IHJlY3VycmluZyBldmVudCBkZWxldGUgZGlhbG9nXG5cdFx0XHRcdG9wZW5EZWxldGVEaWFsb2coc2VsZWN0ZWRFdmVudClcblx0XHRcdFx0cmV0dXJuIC8vIERvbid0IGNsb3NlIHRoZSBmb3JtIHlldCwgbGV0IHRoZSBkaWFsb2cgaGFuZGxlIGl0XG5cdFx0XHR9XG5cdFx0XHRvbkRlbGV0ZT8uKHNlbGVjdGVkRXZlbnQpXG5cdFx0XHRvbkNsb3NlKClcblx0XHR9XG5cdH1cblxuXHRjb25zdCBoYW5kbGVSUnVsZUNoYW5nZSA9IChuZXdSUnVsZTogUlJ1bGVPcHRpb25zIHwgbnVsbCkgPT4ge1xuXHRcdGlmICghbmV3UlJ1bGUpIHtcblx0XHRcdHNldFJydWxlKG51bGwpXG5cdFx0XHRyZXR1cm5cblx0XHR9XG5cdFx0Y29uc3Qgc3RhcnREYXRlVGltZSA9IGJ1aWxkRGF0ZVRpbWUoc3RhcnREYXRlLCBzdGFydFRpbWUsIGlzQWxsRGF5KVxuXHRcdHNldFJydWxlKHsgLi4ubmV3UlJ1bGUsIGR0c3RhcnQ6IHN0YXJ0RGF0ZVRpbWUudG9EYXRlKCkgfSlcblx0fVxuXG5cdGNvbnN0IGRpc2FibGVkRGF0ZU1hdGNoZXIgPSBlZmZlY3RpdmVCdXNpbmVzc0hvdXJzXG5cdFx0PyAoZGF0ZTogRGF0ZSkgPT4gIWlzQnVzaW5lc3NEYXkoZGF5anMoZGF0ZSksIGVmZmVjdGl2ZUJ1c2luZXNzSG91cnMpXG5cdFx0OiB1bmRlZmluZWRcblxuXHRjb25zdCBzdGFydENvbnN0cmFpbnRzID0gZ2V0VGltZUNvbnN0cmFpbnRzKHN0YXJ0RGF0ZSwgZWZmZWN0aXZlQnVzaW5lc3NIb3Vycylcblx0Y29uc3QgZW5kQ29uc3RyYWludHMgPSBnZXRUaW1lQ29uc3RyYWludHMoZW5kRGF0ZSwgZWZmZWN0aXZlQnVzaW5lc3NIb3VycylcblxuXHRjb25zdCBkYXRlRmllbGRzID0gW1xuXHRcdFsnc3RhcnREYXRlJywgc3RhcnREYXRlLCBoYW5kbGVTdGFydERhdGVDaGFuZ2VdLFxuXHRcdFsnZW5kRGF0ZScsIGVuZERhdGUsIGhhbmRsZUVuZERhdGVDaGFuZ2VdLFxuXHRdIGFzIGNvbnN0XG5cblx0Y29uc3QgdGltZUZpZWxkcyA9IFtcblx0XHRbXG5cdFx0XHQnc3RhcnRUaW1lJyxcblx0XHRcdCdzdGFydC10aW1lJyxcblx0XHRcdHN0YXJ0VGltZSxcblx0XHRcdGhhbmRsZVN0YXJ0VGltZUNoYW5nZSxcblx0XHRcdHN0YXJ0Q29uc3RyYWludHMsXG5cdFx0XSxcblx0XHRbJ2VuZFRpbWUnLCAnZW5kLXRpbWUnLCBlbmRUaW1lLCBoYW5kbGVFbmRUaW1lQ2hhbmdlLCBlbmRDb25zdHJhaW50c10sXG5cdF0gYXMgY29uc3RcblxuXHRyZXR1cm4gKFxuXHRcdDw+XG5cdFx0XHQ8Zm9ybSBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIGZsZXgtMSBtaW4taC0wXCIgb25TdWJtaXQ9e2hhbmRsZVN1Ym1pdH0+XG5cdFx0XHRcdDxTY3JvbGxBcmVhIGNsYXNzTmFtZT1cImZsZXgtMSBtaW4taC0wXCI+XG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJncmlkIGdhcC0zIHNtOmdhcC00IHAtMVwiPlxuXHRcdFx0XHRcdFx0PEV2ZW50Rm9ybVRleHRGaWVsZFxuXHRcdFx0XHRcdFx0XHRsYWJlbD17dCgndGl0bGUnKX1cblx0XHRcdFx0XHRcdFx0bmFtZT1cInRpdGxlXCJcblx0XHRcdFx0XHRcdFx0b25DaGFuZ2U9e2hhbmRsZUlucHV0Q2hhbmdlfVxuXHRcdFx0XHRcdFx0XHRwbGFjZWhvbGRlcj17dCgnZXZlbnRUaXRsZVBsYWNlaG9sZGVyJyl9XG5cdFx0XHRcdFx0XHRcdHJlcXVpcmVkXG5cdFx0XHRcdFx0XHRcdHZhbHVlPXtmb3JtVmFsdWVzLnRpdGxlfVxuXHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdDxFdmVudEZvcm1UZXh0RmllbGRcblx0XHRcdFx0XHRcdFx0bGFiZWw9e3QoJ2Rlc2NyaXB0aW9uJyl9XG5cdFx0XHRcdFx0XHRcdG5hbWU9XCJkZXNjcmlwdGlvblwiXG5cdFx0XHRcdFx0XHRcdG9uQ2hhbmdlPXtoYW5kbGVJbnB1dENoYW5nZX1cblx0XHRcdFx0XHRcdFx0cGxhY2Vob2xkZXI9e3QoJ2V2ZW50RGVzY3JpcHRpb25QbGFjZWhvbGRlcicpfVxuXHRcdFx0XHRcdFx0XHR2YWx1ZT17Zm9ybVZhbHVlcy5kZXNjcmlwdGlvbn1cblx0XHRcdFx0XHRcdC8+XG5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0yXCI+XG5cdFx0XHRcdFx0XHRcdDxDaGVja2JveFxuXHRcdFx0XHRcdFx0XHRcdGNoZWNrZWQ9e2lzQWxsRGF5fVxuXHRcdFx0XHRcdFx0XHRcdGlkPVwiYWxsRGF5XCJcblx0XHRcdFx0XHRcdFx0XHRvbkNoZWNrZWRDaGFuZ2U9eyhjaGVja2VkKSA9PiBzZXRJc0FsbERheShjaGVja2VkID09PSB0cnVlKX1cblx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0PExhYmVsIGNsYXNzTmFtZT1cInRleHQteHMgc206dGV4dC1zbVwiIGh0bWxGb3I9XCJhbGxEYXlcIj5cblx0XHRcdFx0XHRcdFx0XHR7dCgnYWxsRGF5Jyl9XG5cdFx0XHRcdFx0XHRcdDwvTGFiZWw+XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJncmlkIGdyaWQtY29scy0yIGdhcC0yIHNtOmdhcC00XCI+XG5cdFx0XHRcdFx0XHRcdHtkYXRlRmllbGRzLm1hcCgoW2xhYmVsLCBkYXRlLCBvbkNoYW5nZV0pID0+IChcblx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGtleT17bGFiZWx9PlxuXHRcdFx0XHRcdFx0XHRcdFx0PExhYmVsIGNsYXNzTmFtZT1cInRleHQteHMgc206dGV4dC1zbVwiPnt0KGxhYmVsKX08L0xhYmVsPlxuXHRcdFx0XHRcdFx0XHRcdFx0PERhdGVQaWNrZXJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwibXQtMVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNsb3NlT25TZWxlY3Rcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF0ZT17ZGF0ZX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0ZGlzYWJsZWQ9e2Rpc2FibGVkRGF0ZU1hdGNoZXJ9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9uQ2hhbmdlPXtvbkNoYW5nZX1cblx0XHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdCkpfVxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cblx0XHRcdFx0XHRcdHshaXNBbGxEYXkgJiYgKFxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ3JpZC1jb2xzLTIgZ2FwLTIgc206Z2FwLTRcIj5cblx0XHRcdFx0XHRcdFx0XHR7dGltZUZpZWxkcy5tYXAoKFtsYWJlbCwgbmFtZSwgdmFsdWUsIG9uQ2hhbmdlLCBjXSkgPT4gKFxuXHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBrZXk9e2xhYmVsfT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0PExhYmVsIGNsYXNzTmFtZT1cInRleHQteHMgc206dGV4dC1zbVwiPnt0KGxhYmVsKX08L0xhYmVsPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8VGltZVBpY2tlclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cIm10LTEgaC04IHRleHQtc20gc206aC05XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtYXhUaW1lPXtjLm1heH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtaW5UaW1lPXtjLm1pbn1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRuYW1lPXtuYW1lfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9uQ2hhbmdlPXtvbkNoYW5nZX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRwbGFjZWhvbGRlcj17dCgnc2VhcmNoVGltZScpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRpbWVGb3JtYXQ9e3RpbWVGb3JtYXR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFsdWU9e3ZhbHVlfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdFx0KSl9XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0KX1cblxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJncmlkIGdhcC0xIHNtOmdhcC0yXCI+XG5cdFx0XHRcdFx0XHRcdDxMYWJlbCBjbGFzc05hbWU9XCJ0ZXh0LXhzIHNtOnRleHQtc21cIj57dCgnY29sb3InKX08L0xhYmVsPlxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC13cmFwIGdhcC0yXCI+XG5cdFx0XHRcdFx0XHRcdFx0e0NPTE9SX09QVElPTlMubWFwKChjb2xvcikgPT4gKFxuXHRcdFx0XHRcdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRhcmlhLWxhYmVsPXtjb2xvci5sYWJlbH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRgJHtjb2xvci52YWx1ZX0gaC02IHctNiByb3VuZGVkLWZ1bGwgc206aC04IHNtOnctOGAsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0c2VsZWN0ZWRDb2xvciA9PT0gY29sb3IudmFsdWUgJiZcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdyaW5nLTIgcmluZy1ibGFjayByaW5nLW9mZnNldC0xIHNtOnJpbmctb2Zmc2V0LTInXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGtleT17Y29sb3IudmFsdWV9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9uQ2xpY2s9eygpID0+IHNldFNlbGVjdGVkQ29sb3IoY29sb3IudmFsdWUpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyaWFudD1cImdob3N0XCJcblx0XHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdFx0KSl9XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cblx0XHRcdFx0XHRcdDxFdmVudEZvcm1UZXh0RmllbGRcblx0XHRcdFx0XHRcdFx0bGFiZWw9e3QoJ2xvY2F0aW9uJyl9XG5cdFx0XHRcdFx0XHRcdG5hbWU9XCJsb2NhdGlvblwiXG5cdFx0XHRcdFx0XHRcdG9uQ2hhbmdlPXtoYW5kbGVJbnB1dENoYW5nZX1cblx0XHRcdFx0XHRcdFx0cGxhY2Vob2xkZXI9e3QoJ2V2ZW50TG9jYXRpb25QbGFjZWhvbGRlcicpfVxuXHRcdFx0XHRcdFx0XHR2YWx1ZT17Zm9ybVZhbHVlcy5sb2NhdGlvbn1cblx0XHRcdFx0XHRcdC8+XG5cblx0XHRcdFx0XHRcdHsvKiBSZWN1cnJlbmNlIFNlY3Rpb24gKi99XG5cdFx0XHRcdFx0XHQ8UmVjdXJyZW5jZUVkaXRvciBvbkNoYW5nZT17aGFuZGxlUlJ1bGVDaGFuZ2V9IHZhbHVlPXtycnVsZX0gLz5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PC9TY3JvbGxBcmVhPlxuXG5cdFx0XHRcdDxEaWFsb2dGb290ZXIgY2xhc3NOYW1lPVwibXQtNCBzaHJpbmstMCBmbGV4IGZsZXgtY29sLXJldmVyc2UgZ2FwLTIgc206ZmxleC1yb3cgc206Z2FwLTBcIj5cblx0XHRcdFx0XHR7c2VsZWN0ZWRFdmVudD8uaWQgJiYgKFxuXHRcdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJ3LWZ1bGwgc206bXItYXV0byBzbTp3LWF1dG9cIlxuXHRcdFx0XHRcdFx0XHRvbkNsaWNrPXtoYW5kbGVEZWxldGV9XG5cdFx0XHRcdFx0XHRcdHNpemU9XCJzbVwiXG5cdFx0XHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIlxuXHRcdFx0XHRcdFx0XHR2YXJpYW50PVwiZGVzdHJ1Y3RpdmVcIlxuXHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHR7dCgnZGVsZXRlJyl9XG5cdFx0XHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCB3LWZ1bGwgZ2FwLTIgc206dy1hdXRvXCI+XG5cdFx0XHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImZsZXgtMSBzbTpmbGV4LW5vbmVcIlxuXHRcdFx0XHRcdFx0XHRvbkNsaWNrPXtvbkNsb3NlfVxuXHRcdFx0XHRcdFx0XHRzaXplPVwic21cIlxuXHRcdFx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCJcblx0XHRcdFx0XHRcdFx0dmFyaWFudD1cIm91dGxpbmVcIlxuXHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHR7dCgnY2FuY2VsJyl9XG5cdFx0XHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdFx0XHRcdDxCdXR0b24gY2xhc3NOYW1lPVwiZmxleC0xIHNtOmZsZXgtbm9uZVwiIHNpemU9XCJzbVwiIHR5cGU9XCJzdWJtaXRcIj5cblx0XHRcdFx0XHRcdFx0e3NlbGVjdGVkRXZlbnQ/LmlkID8gdCgndXBkYXRlJykgOiB0KCdjcmVhdGUnKX1cblx0XHRcdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8L0RpYWxvZ0Zvb3Rlcj5cblx0XHRcdDwvZm9ybT5cblxuXHRcdFx0ey8qIFJlY3VycmluZyBFdmVudCBFZGl0IERpYWxvZyAqL31cblx0XHRcdDxSZWN1cnJlbmNlRWRpdERpYWxvZ1xuXHRcdFx0XHRldmVudFRpdGxlPXtkaWFsb2dTdGF0ZS5ldmVudD8udGl0bGUgfHwgJyd9XG5cdFx0XHRcdGlzT3Blbj17ZGlhbG9nU3RhdGUuaXNPcGVufVxuXHRcdFx0XHRvbkNsb3NlPXtjbG9zZURpYWxvZ31cblx0XHRcdFx0b25Db25maXJtPXtoYW5kbGVDb25maXJtfVxuXHRcdFx0XHRvcGVyYXRpb25UeXBlPXtkaWFsb2dTdGF0ZS5vcGVyYXRpb25UeXBlfVxuXHRcdFx0Lz5cblx0XHQ8Lz5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgKiBhcyBDaGVja2JveFByaW1pdGl2ZSBmcm9tICdAcmFkaXgtdWkvcmVhY3QtY2hlY2tib3gnXG5pbXBvcnQgeyBDaGVja0ljb24gfSBmcm9tICdsdWNpZGUtcmVhY3QnXG5pbXBvcnQgdHlwZSAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5mdW5jdGlvbiBDaGVja2JveCh7XG5cdGNsYXNzTmFtZSxcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBDaGVja2JveFByaW1pdGl2ZS5Sb290Pikge1xuXHRyZXR1cm4gKFxuXHRcdDxDaGVja2JveFByaW1pdGl2ZS5Sb290XG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQncGVlciBib3JkZXItaW5wdXQgZGFyazpiZy1pbnB1dC8zMCBkYXRhLVtzdGF0ZT1jaGVja2VkXTpiZy1wcmltYXJ5IGRhdGEtW3N0YXRlPWNoZWNrZWRdOnRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIGRhcms6ZGF0YS1bc3RhdGU9Y2hlY2tlZF06YmctcHJpbWFyeSBkYXRhLVtzdGF0ZT1jaGVja2VkXTpib3JkZXItcHJpbWFyeSBmb2N1cy12aXNpYmxlOmJvcmRlci1yaW5nIGZvY3VzLXZpc2libGU6cmluZy1yaW5nLzUwIGFyaWEtaW52YWxpZDpyaW5nLWRlc3RydWN0aXZlLzIwIGRhcms6YXJpYS1pbnZhbGlkOnJpbmctZGVzdHJ1Y3RpdmUvNDAgYXJpYS1pbnZhbGlkOmJvcmRlci1kZXN0cnVjdGl2ZSBzaXplLTQgc2hyaW5rLTAgcm91bmRlZC1bNHB4XSBib3JkZXIgc2hhZG93LXhzIHRyYW5zaXRpb24tc2hhZG93IG91dGxpbmUtbm9uZSBmb2N1cy12aXNpYmxlOnJpbmctWzNweF0gZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIGRpc2FibGVkOm9wYWNpdHktNTAnLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJjaGVja2JveFwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0PlxuXHRcdFx0PENoZWNrYm94UHJpbWl0aXZlLkluZGljYXRvclxuXHRcdFx0XHRjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB0ZXh0LWN1cnJlbnQgdHJhbnNpdGlvbi1ub25lXCJcblx0XHRcdFx0ZGF0YS1zbG90PVwiY2hlY2tib3gtaW5kaWNhdG9yXCJcblx0XHRcdD5cblx0XHRcdFx0PENoZWNrSWNvbiBjbGFzc05hbWU9XCJzaXplLTMuNVwiIC8+XG5cdFx0XHQ8L0NoZWNrYm94UHJpbWl0aXZlLkluZGljYXRvcj5cblx0XHQ8L0NoZWNrYm94UHJpbWl0aXZlLlJvb3Q+XG5cdClcbn1cblxuZXhwb3J0IHsgQ2hlY2tib3ggfVxuIiwKICAgICJpbXBvcnQgeyBQb3BvdmVyQ2xvc2UgfSBmcm9tICdAcmFkaXgtdWkvcmVhY3QtcG9wb3ZlcidcbmltcG9ydCB7IENhbGVuZGFyIGFzIENhbGVuZGFySWNvbiB9IGZyb20gJ2x1Y2lkZS1yZWFjdCdcbmltcG9ydCB7IHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2J1dHRvbidcbmltcG9ydCB7IENhbGVuZGFyIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2NhbGVuZGFyJ1xuaW1wb3J0IHtcblx0UG9wb3Zlcixcblx0UG9wb3ZlckNvbnRlbnQsXG5cdFBvcG92ZXJUcmlnZ2VyLFxufSBmcm9tICdAL2NvbXBvbmVudHMvdWkvcG9wb3ZlcidcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmludGVyZmFjZSBEYXRlUGlja2VyUHJvcHMge1xuXHRkYXRlOiBEYXRlIHwgdW5kZWZpbmVkXG5cdG9uQ2hhbmdlPzogKGRhdGU6IERhdGUgfCB1bmRlZmluZWQpID0+IHZvaWRcblx0bGFiZWw/OiBzdHJpbmdcblx0Y2xhc3NOYW1lPzogc3RyaW5nXG5cdGNsb3NlT25TZWxlY3Q/OiBib29sZWFuXG5cdGRpc2FibGVkPzogKGRhdGU6IERhdGUpID0+IGJvb2xlYW5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIERhdGVQaWNrZXIoe1xuXHRkYXRlLFxuXHRjbG9zZU9uU2VsZWN0LFxuXHRvbkNoYW5nZSxcblx0bGFiZWwgPSAnUGljayBhIGRhdGUnLFxuXHRjbGFzc05hbWUsXG5cdGRpc2FibGVkLFxufTogRGF0ZVBpY2tlclByb3BzKSB7XG5cdGNvbnN0IGZpcnN0RGF5T2ZXZWVrID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoXG5cdFx0KGNvbnRleHQpID0+IGNvbnRleHQuZmlyc3REYXlPZldlZWtcblx0KVxuXHRjb25zdCBwb3BPdmVyUmVmID0gdXNlUmVmPEhUTUxCdXR0b25FbGVtZW50IHwgbnVsbD4obnVsbClcblx0Y29uc3QgW3NlbGVjdGVkRGF0ZSwgc2V0U2VsZWN0ZWREYXRlXSA9IHVzZVN0YXRlPERhdGUgfCB1bmRlZmluZWQ+KGRhdGUpXG5cblx0dXNlRWZmZWN0KCgpID0+IHtcblx0XHRzZXRTZWxlY3RlZERhdGUoZGF0ZSlcblx0fSwgW2RhdGVdKVxuXG5cdGNvbnN0IGhhbmRsZURhdGVTZWxlY3QgPSAoZGF0ZTogRGF0ZSB8IHVuZGVmaW5lZCkgPT4ge1xuXHRcdHNldFNlbGVjdGVkRGF0ZShkYXRlKVxuXHRcdGlmIChjbG9zZU9uU2VsZWN0KSB7XG5cdFx0XHRwb3BPdmVyUmVmLmN1cnJlbnQ/LmNsaWNrKClcblx0XHR9XG5cdFx0b25DaGFuZ2U/LihkYXRlKVxuXHR9XG5cblx0cmV0dXJuIChcblx0XHQ8ZGl2IGNsYXNzTmFtZT17Y2xhc3NOYW1lfT5cblx0XHRcdDxQb3BvdmVyPlxuXHRcdFx0XHQ8UG9wb3ZlclRyaWdnZXIgYXNDaGlsZD5cblx0XHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0XHQnZGF0YS1bZW1wdHk9dHJ1ZV06dGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHctZnVsbCBqdXN0aWZ5LXN0YXJ0IHRleHQtbGVmdCBmb250LW5vcm1hbCdcblx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRkYXRhLWVtcHR5PXshZGF0ZX1cblx0XHRcdFx0XHRcdHZhcmlhbnQ9XCJvdXRsaW5lXCJcblx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHQ8Q2FsZW5kYXJJY29uIC8+XG5cdFx0XHRcdFx0XHR7c2VsZWN0ZWREYXRlID8gKFxuXHRcdFx0XHRcdFx0XHRkYXlqcyhzZWxlY3RlZERhdGUpLmZvcm1hdCgnbGwnKVxuXHRcdFx0XHRcdFx0KSA6IChcblx0XHRcdFx0XHRcdFx0PHNwYW4+e2xhYmVsfTwvc3Bhbj5cblx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHRcdDwvUG9wb3ZlclRyaWdnZXI+XG5cdFx0XHRcdDxQb3BvdmVyQ29udGVudCBhbGlnbj1cInN0YXJ0XCIgY2xhc3NOYW1lPVwidy1hdXRvIHAtMFwiPlxuXHRcdFx0XHRcdDxQb3BvdmVyQ2xvc2UgcmVmPXtwb3BPdmVyUmVmfSBzdHlsZT17eyBkaXNwbGF5OiAnbm9uZScgfX0gLz5cblx0XHRcdFx0XHQ8Q2FsZW5kYXJcblx0XHRcdFx0XHRcdGRlZmF1bHRNb250aD17c2VsZWN0ZWREYXRlfVxuXHRcdFx0XHRcdFx0ZGlzYWJsZWQ9e2Rpc2FibGVkfVxuXHRcdFx0XHRcdFx0Zmlyc3REYXlPZldlZWs9e2ZpcnN0RGF5T2ZXZWVrfVxuXHRcdFx0XHRcdFx0b25TZWxlY3Q9e2hhbmRsZURhdGVTZWxlY3R9XG5cdFx0XHRcdFx0XHRzZWxlY3RlZD17c2VsZWN0ZWREYXRlfVxuXHRcdFx0XHRcdC8+XG5cdFx0XHRcdDwvUG9wb3ZlckNvbnRlbnQ+XG5cdFx0XHQ8L1BvcG92ZXI+XG5cdFx0PC9kaXY+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHsgQ2hldnJvbkxlZnRJY29uLCBDaGV2cm9uUmlnaHRJY29uIH0gZnJvbSAnbHVjaWRlLXJlYWN0J1xuaW1wb3J0IHsgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9idXR0b24nXG5pbXBvcnQgZGF5anMsIHsgdHlwZSBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IGdldE1vbnRoV2Vla3MsIGdldFdlZWtEYXlzLCBpc1RvZGF5IH0gZnJvbSAnQC9saWIvdXRpbHMvZGF0ZS11dGlscydcblxuaW50ZXJmYWNlIENhbGVuZGFyUHJvcHMge1xuXHRzZWxlY3RlZD86IERhdGVcblx0ZGVmYXVsdE1vbnRoPzogRGF0ZVxuXHRvblNlbGVjdD86IChkYXRlOiBEYXRlIHwgdW5kZWZpbmVkKSA9PiB2b2lkXG5cdGRpc2FibGVkPzogKGRhdGU6IERhdGUpID0+IGJvb2xlYW5cblx0Zmlyc3REYXlPZldlZWs/OiBudW1iZXJcblx0Y2xhc3NOYW1lPzogc3RyaW5nXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBDYWxlbmRhcih7XG5cdHNlbGVjdGVkLFxuXHRkZWZhdWx0TW9udGgsXG5cdG9uU2VsZWN0LFxuXHRkaXNhYmxlZCxcblx0Zmlyc3REYXlPZldlZWsgPSAwLFxuXHRjbGFzc05hbWUsXG59OiBDYWxlbmRhclByb3BzKSB7XG5cdGNvbnN0IFt2aWV3TW9udGgsIHNldFZpZXdNb250aF0gPSB1c2VTdGF0ZTxEYXlqcz4oKCkgPT5cblx0XHRkYXlqcyhkZWZhdWx0TW9udGggPz8gc2VsZWN0ZWQgPz8gbmV3IERhdGUoKSkuc3RhcnRPZignbW9udGgnKVxuXHQpXG5cblx0Y29uc3Qgd2Vla3MgPSBnZXRNb250aFdlZWtzKHZpZXdNb250aCwgZmlyc3REYXlPZldlZWspXG5cdGNvbnN0IHNlbGVjdGVkS2V5ID0gc2VsZWN0ZWRcblx0XHQ/IGRheWpzKHNlbGVjdGVkKS5mb3JtYXQoJ1lZWVktTU0tREQnKVxuXHRcdDogdW5kZWZpbmVkXG5cblx0Y29uc3Qgd2Vla2RheUhlYWRlcnMgPSBnZXRXZWVrRGF5cyhkYXlqcygpLCBmaXJzdERheU9mV2VlaykubWFwKChkKSA9PlxuXHRcdGQuZm9ybWF0KCdkZCcpXG5cdClcblxuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oJ2JnLWJhY2tncm91bmQgcC0zIHctWzI4MHB4XScsIGNsYXNzTmFtZSl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJjYWxlbmRhclwiXG5cdFx0PlxuXHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gbWItMlwiPlxuXHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0YXJpYS1sYWJlbD1cIlByZXZpb3VzIG1vbnRoXCJcblx0XHRcdFx0XHRvbkNsaWNrPXsoKSA9PiBzZXRWaWV3TW9udGgoKG0pID0+IG0uc3VidHJhY3QoMSwgJ21vbnRoJykpfVxuXHRcdFx0XHRcdHNpemU9XCJpY29uXCJcblx0XHRcdFx0XHR2YXJpYW50PVwiZ2hvc3RcIlxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0PENoZXZyb25MZWZ0SWNvbiBjbGFzc05hbWU9XCJzaXplLTRcIiAvPlxuXHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIGZvbnQtbWVkaXVtIHNlbGVjdC1ub25lXCI+XG5cdFx0XHRcdFx0e3ZpZXdNb250aC5mb3JtYXQoJ01NTU0gWVlZWScpfVxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdGFyaWEtbGFiZWw9XCJOZXh0IG1vbnRoXCJcblx0XHRcdFx0XHRvbkNsaWNrPXsoKSA9PiBzZXRWaWV3TW9udGgoKG0pID0+IG0uYWRkKDEsICdtb250aCcpKX1cblx0XHRcdFx0XHRzaXplPVwiaWNvblwiXG5cdFx0XHRcdFx0dmFyaWFudD1cImdob3N0XCJcblx0XHRcdFx0PlxuXHRcdFx0XHRcdDxDaGV2cm9uUmlnaHRJY29uIGNsYXNzTmFtZT1cInNpemUtNFwiIC8+XG5cdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0PC9kaXY+XG5cblx0XHRcdDx0YWJsZVxuXHRcdFx0XHRjbGFzc05hbWU9XCJ3LWZ1bGwgYm9yZGVyLWNvbGxhcHNlXCJcblx0XHRcdFx0Ly8gYmlvbWUtaWdub3JlIGxpbnQvYTExeS9ub05vbmludGVyYWN0aXZlRWxlbWVudFRvSW50ZXJhY3RpdmVSb2xlOiBkYXRlLXBpY2tlciBwYXR0ZXJuIOKAlCBXQUktQVJJQSBncmlkIHJvbGUgb24gYSB0YWJsZSBpcyBjYW5vbmljYWwgZm9yIGNhbGVuZGFyc1xuXHRcdFx0XHRyb2xlPVwiZ3JpZFwiXG5cdFx0XHQ+XG5cdFx0XHRcdDx0aGVhZD5cblx0XHRcdFx0XHQ8dHI+XG5cdFx0XHRcdFx0XHR7d2Vla2RheUhlYWRlcnMubWFwKChsYWJlbCwgaSkgPT4gKFxuXHRcdFx0XHRcdFx0XHQ8dGhcblx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJ0ZXh0LW11dGVkLWZvcmVncm91bmQgdGV4dC14cyBmb250LW1lZGl1bSBzZWxlY3Qtbm9uZSBweS0xXCJcblx0XHRcdFx0XHRcdFx0XHQvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vQXJyYXlJbmRleEtleTogd2Vla2RheSBoZWFkZXIgb3JkZXIgaXMgc3RhYmxlXG5cdFx0XHRcdFx0XHRcdFx0a2V5PXtpfVxuXHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0e2xhYmVsfVxuXHRcdFx0XHRcdFx0XHQ8L3RoPlxuXHRcdFx0XHRcdFx0KSl9XG5cdFx0XHRcdFx0PC90cj5cblx0XHRcdFx0PC90aGVhZD5cblx0XHRcdFx0PHRib2R5PlxuXHRcdFx0XHRcdHt3ZWVrcy5tYXAoKHdlZWssIHdlZWtJZHgpID0+IChcblx0XHRcdFx0XHRcdC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9BcnJheUluZGV4S2V5OiB3ZWVrIHJvdyBvcmRlciBpcyBzdGFibGUgd2l0aGluIGEgbW9udGhcblx0XHRcdFx0XHRcdDx0ciBrZXk9e3dlZWtJZHh9PlxuXHRcdFx0XHRcdFx0XHR7d2Vlay5tYXAoKGRheSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IGlzT3V0c2lkZSA9ICFkYXkuaXNTYW1lKHZpZXdNb250aCwgJ21vbnRoJylcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBpc1NlbGVjdGVkID0gZGF5LmZvcm1hdCgnWVlZWS1NTS1ERCcpID09PSBzZWxlY3RlZEtleVxuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IGlzRGlzYWJsZWQgPSBkaXNhYmxlZD8uKGRheS50b0RhdGUoKSkgPz8gZmFsc2Vcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHRcdFx0PHRkXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cInAtMCB0ZXh0LWNlbnRlclwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGRhdGEtZGlzYWJsZWQ9e2lzRGlzYWJsZWR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGRhdGEtb3V0c2lkZT17aXNPdXRzaWRlfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRkYXRhLXNlbGVjdGVkPXtpc1NlbGVjdGVkfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRrZXk9e2RheS50b0lTT1N0cmluZygpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBiaW9tZS1pZ25vcmUgbGludC9hMTF5L25vTm9uaW50ZXJhY3RpdmVFbGVtZW50VG9JbnRlcmFjdGl2ZVJvbGU6IGRhdGUtcGlja2VyIHBhdHRlcm4g4oCUIFdBSS1BUklBIGdyaWRjZWxsIG9uIHRkIGlzIGNhbm9uaWNhbDsga2V5Ym9hcmQgbmF2IGxpdmVzIG9uIHRoZSBjaGlsZCBidXR0b25cblx0XHRcdFx0XHRcdFx0XHRcdFx0cm9sZT1cImdyaWRjZWxsXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGFiSW5kZXg9ey0xfVxuXHRcdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8YnV0dG9uXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXJpYS1kaXNhYmxlZD17aXNEaXNhYmxlZH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhcmlhLWhpZGRlbj17aXNPdXRzaWRlfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQndy1mdWxsIGFzcGVjdC1zcXVhcmUgcm91bmRlZC1tZCB0ZXh0LXNtIHNlbGVjdC1ub25lJyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCFpc0Rpc2FibGVkICYmICdob3ZlcjpiZy1hY2NlbnQgY3Vyc29yLXBvaW50ZXInLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aXNPdXRzaWRlICYmICd0ZXh0LW11dGVkLWZvcmVncm91bmQvNTAnLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aXNUb2RheShkYXkpICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCFpc1NlbGVjdGVkICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdiZy1hY2NlbnQgdGV4dC1hY2NlbnQtZm9yZWdyb3VuZCcsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpc1NlbGVjdGVkICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdiZy1wcmltYXJ5IHRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIGZvbnQtbWVkaXVtJyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlzRGlzYWJsZWQgJiYgJ29wYWNpdHktNTAgY3Vyc29yLW5vdC1hbGxvd2VkJ1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF0YS1kaXNhYmxlZD17aXNEaXNhYmxlZH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkYXRhLXNlbGVjdGVkPXtpc1NlbGVjdGVkfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRpc2FibGVkPXtpc0Rpc2FibGVkIHx8IGlzT3V0c2lkZX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvbkNsaWNrPXsoKSA9PiBvblNlbGVjdD8uKGRheS50b0RhdGUoKSl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGFiSW5kZXg9e2lzT3V0c2lkZSA/IC0xIDogMH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHtkYXkuZm9ybWF0KCdEJyl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdDwvYnV0dG9uPlxuXHRcdFx0XHRcdFx0XHRcdFx0PC90ZD5cblx0XHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHRcdH0pfVxuXHRcdFx0XHRcdFx0PC90cj5cblx0XHRcdFx0XHQpKX1cblx0XHRcdFx0PC90Ym9keT5cblx0XHRcdDwvdGFibGU+XG5cdFx0PC9kaXY+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0ICogYXMgUG9wb3ZlclByaW1pdGl2ZSBmcm9tICdAcmFkaXgtdWkvcmVhY3QtcG9wb3ZlcidcbmltcG9ydCB0eXBlICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmZ1bmN0aW9uIFBvcG92ZXIoe1xuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFBvcG92ZXJQcmltaXRpdmUuUm9vdD4pIHtcblx0cmV0dXJuIDxQb3BvdmVyUHJpbWl0aXZlLlJvb3QgZGF0YS1zbG90PVwicG9wb3ZlclwiIHsuLi5wcm9wc30gLz5cbn1cblxuZnVuY3Rpb24gUG9wb3ZlclRyaWdnZXIoe1xuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFBvcG92ZXJQcmltaXRpdmUuVHJpZ2dlcj4pIHtcblx0cmV0dXJuIDxQb3BvdmVyUHJpbWl0aXZlLlRyaWdnZXIgZGF0YS1zbG90PVwicG9wb3Zlci10cmlnZ2VyXCIgey4uLnByb3BzfSAvPlxufVxuXG5mdW5jdGlvbiBQb3BvdmVyQ29udGVudCh7XG5cdGNsYXNzTmFtZSxcblx0YWxpZ24gPSAnY2VudGVyJyxcblx0c2lkZU9mZnNldCA9IDQsXG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgUG9wb3ZlclByaW1pdGl2ZS5Db250ZW50Pikge1xuXHRyZXR1cm4gKFxuXHRcdDxQb3BvdmVyUHJpbWl0aXZlLlBvcnRhbD5cblx0XHRcdDxQb3BvdmVyUHJpbWl0aXZlLkNvbnRlbnRcblx0XHRcdFx0YWxpZ249e2FsaWdufVxuXHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdCdiZy1wb3BvdmVyIHRleHQtcG9wb3Zlci1mb3JlZ3JvdW5kIGRhdGEtW3N0YXRlPW9wZW5dOmFuaW1hdGUtaW4gZGF0YS1bc3RhdGU9Y2xvc2VkXTphbmltYXRlLW91dCBkYXRhLVtzdGF0ZT1jbG9zZWRdOmZhZGUtb3V0LTAgZGF0YS1bc3RhdGU9b3Blbl06ZmFkZS1pbi0wIGRhdGEtW3N0YXRlPWNsb3NlZF06em9vbS1vdXQtOTUgZGF0YS1bc3RhdGU9b3Blbl06em9vbS1pbi05NSBkYXRhLVtzaWRlPWJvdHRvbV06c2xpZGUtaW4tZnJvbS10b3AtMiBkYXRhLVtzaWRlPWxlZnRdOnNsaWRlLWluLWZyb20tcmlnaHQtMiBkYXRhLVtzaWRlPXJpZ2h0XTpzbGlkZS1pbi1mcm9tLWxlZnQtMiBkYXRhLVtzaWRlPXRvcF06c2xpZGUtaW4tZnJvbS1ib3R0b20tMiB6LTUwIHctNzIgb3JpZ2luLSgtLXJhZGl4LXBvcG92ZXItY29udGVudC10cmFuc2Zvcm0tb3JpZ2luKSByb3VuZGVkLW1kIGJvcmRlciBwLTQgc2hhZG93LW1kIG91dGxpbmUtaGlkZGVuJyxcblx0XHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdFx0KX1cblx0XHRcdFx0ZGF0YS1zbG90PVwicG9wb3Zlci1jb250ZW50XCJcblx0XHRcdFx0c2lkZU9mZnNldD17c2lkZU9mZnNldH1cblx0XHRcdFx0ey4uLnByb3BzfVxuXHRcdFx0Lz5cblx0XHQ8L1BvcG92ZXJQcmltaXRpdmUuUG9ydGFsPlxuXHQpXG59XG5cbmZ1bmN0aW9uIFBvcG92ZXJBbmNob3Ioe1xuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFBvcG92ZXJQcmltaXRpdmUuQW5jaG9yPikge1xuXHRyZXR1cm4gPFBvcG92ZXJQcmltaXRpdmUuQW5jaG9yIGRhdGEtc2xvdD1cInBvcG92ZXItYW5jaG9yXCIgey4uLnByb3BzfSAvPlxufVxuXG5leHBvcnQgeyBQb3BvdmVyLCBQb3BvdmVyQW5jaG9yLCBQb3BvdmVyQ29udGVudCwgUG9wb3ZlclRyaWdnZXIgfVxuIiwKICAgICJpbXBvcnQgdHlwZSAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5mdW5jdGlvbiBJbnB1dCh7IGNsYXNzTmFtZSwgdHlwZSwgLi4ucHJvcHMgfTogUmVhY3QuQ29tcG9uZW50UHJvcHM8J2lucHV0Jz4pIHtcblx0cmV0dXJuIChcblx0XHQ8aW5wdXRcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCdmaWxlOnRleHQtZm9yZWdyb3VuZCBwbGFjZWhvbGRlcjp0ZXh0LW11dGVkLWZvcmVncm91bmQgc2VsZWN0aW9uOmJnLXByaW1hcnkgc2VsZWN0aW9uOnRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIGRhcms6YmctaW5wdXQvMzAgYm9yZGVyLWlucHV0IGZsZXggaC05IHctZnVsbCBtaW4tdy0wIHJvdW5kZWQtbWQgYm9yZGVyIGJnLXRyYW5zcGFyZW50IHB4LTMgcHktMSB0ZXh0LWJhc2Ugc2hhZG93LXhzIHRyYW5zaXRpb24tW2NvbG9yLGJveC1zaGFkb3ddIG91dGxpbmUtbm9uZSBmaWxlOmlubGluZS1mbGV4IGZpbGU6aC03IGZpbGU6Ym9yZGVyLTAgZmlsZTpiZy10cmFuc3BhcmVudCBmaWxlOnRleHQtc20gZmlsZTpmb250LW1lZGl1bSBkaXNhYmxlZDpwb2ludGVyLWV2ZW50cy1ub25lIGRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZCBkaXNhYmxlZDpvcGFjaXR5LTUwIG1kOnRleHQtc20nLFxuXHRcdFx0XHQnZm9jdXMtdmlzaWJsZTpib3JkZXItcmluZyBmb2N1cy12aXNpYmxlOnJpbmctcmluZy81MCBmb2N1cy12aXNpYmxlOnJpbmctWzNweF0nLFxuXHRcdFx0XHQnYXJpYS1pbnZhbGlkOnJpbmctZGVzdHJ1Y3RpdmUvMjAgZGFyazphcmlhLWludmFsaWQ6cmluZy1kZXN0cnVjdGl2ZS80MCBhcmlhLWludmFsaWQ6Ym9yZGVyLWRlc3RydWN0aXZlJyxcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0ZGF0YS1zbG90PVwiaW5wdXRcIlxuXHRcdFx0dHlwZT17dHlwZX1cblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmV4cG9ydCB7IElucHV0IH1cbiIsCiAgICAiaW1wb3J0ICogYXMgTGFiZWxQcmltaXRpdmUgZnJvbSAnQHJhZGl4LXVpL3JlYWN0LWxhYmVsJ1xuaW1wb3J0IHR5cGUgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuZnVuY3Rpb24gTGFiZWwoe1xuXHRjbGFzc05hbWUsXG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgTGFiZWxQcmltaXRpdmUuUm9vdD4pIHtcblx0cmV0dXJuIChcblx0XHQ8TGFiZWxQcmltaXRpdmUuUm9vdFxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0J2ZsZXggaXRlbXMtY2VudGVyIGdhcC0yIHRleHQtc20gbGVhZGluZy1ub25lIGZvbnQtbWVkaXVtIHNlbGVjdC1ub25lIGdyb3VwLWRhdGEtW2Rpc2FibGVkPXRydWVdOnBvaW50ZXItZXZlbnRzLW5vbmUgZ3JvdXAtZGF0YS1bZGlzYWJsZWQ9dHJ1ZV06b3BhY2l0eS01MCBwZWVyLWRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZCBwZWVyLWRpc2FibGVkOm9wYWNpdHktNTAnLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJsYWJlbFwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0Lz5cblx0KVxufVxuXG5leHBvcnQgeyBMYWJlbCB9XG4iLAogICAgImltcG9ydCAqIGFzIFNjcm9sbEFyZWFQcmltaXRpdmUgZnJvbSAnQHJhZGl4LXVpL3JlYWN0LXNjcm9sbC1hcmVhJ1xuaW1wb3J0IHR5cGUgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuaW50ZXJmYWNlIFNjcm9sbEFyZWFQcm9wc1xuXHRleHRlbmRzIFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTY3JvbGxBcmVhUHJpbWl0aXZlLlJvb3Q+IHtcblx0dmlld1BvcnRQcm9wcz86IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTY3JvbGxBcmVhUHJpbWl0aXZlLlZpZXdwb3J0PlxufVxuXG5mdW5jdGlvbiBTY3JvbGxBcmVhKHtcblx0Y2xhc3NOYW1lLFxuXHRjaGlsZHJlbixcblx0dmlld1BvcnRQcm9wcyxcblx0Li4ucHJvcHNcbn06IFNjcm9sbEFyZWFQcm9wcykge1xuXHRyZXR1cm4gKFxuXHRcdDxTY3JvbGxBcmVhUHJpbWl0aXZlLlJvb3Rcblx0XHRcdGNsYXNzTmFtZT17Y24oJ3JlbGF0aXZlJywgY2xhc3NOYW1lKX1cblx0XHRcdGRhdGEtc2xvdD1cInNjcm9sbC1hcmVhXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQ+XG5cdFx0XHQ8U2Nyb2xsQXJlYVByaW1pdGl2ZS5WaWV3cG9ydFxuXHRcdFx0XHR7Li4udmlld1BvcnRQcm9wc31cblx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHQnZm9jdXMtdmlzaWJsZTpyaW5nLXJpbmcvNTAgc2l6ZS1mdWxsIHJvdW5kZWQtW2luaGVyaXRdIHRyYW5zaXRpb24tW2NvbG9yLGJveC1zaGFkb3ddIG91dGxpbmUtbm9uZSBmb2N1cy12aXNpYmxlOnJpbmctWzNweF0gZm9jdXMtdmlzaWJsZTpvdXRsaW5lLTEnLFxuXHRcdFx0XHRcdHZpZXdQb3J0UHJvcHM/LmNsYXNzTmFtZVxuXHRcdFx0XHQpfVxuXHRcdFx0XHRkYXRhLXNsb3Q9XCJzY3JvbGwtYXJlYS12aWV3cG9ydFwiXG5cdFx0XHQ+XG5cdFx0XHRcdHtjaGlsZHJlbn1cblx0XHRcdDwvU2Nyb2xsQXJlYVByaW1pdGl2ZS5WaWV3cG9ydD5cblx0XHRcdDxTY3JvbGxCYXIgLz5cblx0XHRcdDxTY3JvbGxBcmVhUHJpbWl0aXZlLkNvcm5lciAvPlxuXHRcdDwvU2Nyb2xsQXJlYVByaW1pdGl2ZS5Sb290PlxuXHQpXG59XG5cbmZ1bmN0aW9uIFNjcm9sbEJhcih7XG5cdGNsYXNzTmFtZSxcblx0b3JpZW50YXRpb24gPSAndmVydGljYWwnLFxuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNjcm9sbEFyZWFQcmltaXRpdmUuU2Nyb2xsQXJlYVNjcm9sbGJhcj4pIHtcblx0cmV0dXJuIChcblx0XHQ8U2Nyb2xsQXJlYVByaW1pdGl2ZS5TY3JvbGxBcmVhU2Nyb2xsYmFyXG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQnZmxleCB0b3VjaC1ub25lIHAtcHggdHJhbnNpdGlvbi1jb2xvcnMgc2VsZWN0LW5vbmUnLFxuXHRcdFx0XHRvcmllbnRhdGlvbiA9PT0gJ3ZlcnRpY2FsJyAmJlxuXHRcdFx0XHRcdCdoLWZ1bGwgdy0yLjUgYm9yZGVyLWwgYm9yZGVyLWwtdHJhbnNwYXJlbnQnLFxuXHRcdFx0XHRvcmllbnRhdGlvbiA9PT0gJ2hvcml6b250YWwnICYmXG5cdFx0XHRcdFx0J2gtMi41IGZsZXgtY29sIGJvcmRlci10IGJvcmRlci10LXRyYW5zcGFyZW50Jyxcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0ZGF0YS1zbG90PVwic2Nyb2xsLWFyZWEtc2Nyb2xsYmFyXCJcblx0XHRcdG9yaWVudGF0aW9uPXtvcmllbnRhdGlvbn1cblx0XHRcdHsuLi5wcm9wc31cblx0XHQ+XG5cdFx0XHQ8U2Nyb2xsQXJlYVByaW1pdGl2ZS5TY3JvbGxBcmVhVGh1bWJcblx0XHRcdFx0Y2xhc3NOYW1lPVwiYmctYm9yZGVyIHJlbGF0aXZlIGZsZXgtMSByb3VuZGVkLWZ1bGxcIlxuXHRcdFx0XHRkYXRhLXNsb3Q9XCJzY3JvbGwtYXJlYS10aHVtYlwiXG5cdFx0XHQvPlxuXHRcdDwvU2Nyb2xsQXJlYVByaW1pdGl2ZS5TY3JvbGxBcmVhU2Nyb2xsYmFyPlxuXHQpXG59XG5cbmV4cG9ydCB7IFNjcm9sbEFyZWEsIFNjcm9sbEJhciB9XG4iLAogICAgImltcG9ydCB7IENsb2NrIH0gZnJvbSAnbHVjaWRlLXJlYWN0J1xuaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvYnV0dG9uJ1xuaW1wb3J0IHsgSW5wdXQgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvaW5wdXQnXG5pbXBvcnQge1xuXHRQb3BvdmVyLFxuXHRQb3BvdmVyQ29udGVudCxcblx0UG9wb3ZlclRyaWdnZXIsXG59IGZyb20gJ0AvY29tcG9uZW50cy91aS9wb3BvdmVyJ1xuaW1wb3J0IHsgU2Nyb2xsQXJlYSB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9zY3JvbGwtYXJlYSdcbmltcG9ydCB7IHVzZUF1dG9jb21wbGV0ZVRpbWVwaWNrZXIgfSBmcm9tICdAL2hvb2tzL3VzZS1hdXRvY29tcGxldGUtdGltZXBpY2tlcidcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgeyBrZXlzIH0gZnJvbSAnQC9saWIvdXRpbHMva2V5cydcbmltcG9ydCB0eXBlIHsgVGltZUZvcm1hdCB9IGZyb20gJ0AvdHlwZXMnXG5cbmNvbnN0IGhhbmRsZVdoZWVsID0gKGU6IFJlYWN0LldoZWVsRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KSA9PiB7XG5cdC8vIFByZXZlbnQgZXZlbnQgZnJvbSBidWJibGluZyB0byBwcmV2ZW50IFBvcG92ZXIgZnJvbSBjbG9zaW5nXG5cdGUuc3RvcFByb3BhZ2F0aW9uKClcbn1cblxuaW50ZXJmYWNlIFRpbWVQaWNrZXJQcm9wcyB7XG5cdHZhbHVlOiBzdHJpbmdcblx0b25DaGFuZ2U6ICh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkXG5cdG1pblRpbWU/OiBzdHJpbmdcblx0bWF4VGltZT86IHN0cmluZ1xuXHR0aW1lRm9ybWF0PzogVGltZUZvcm1hdFxuXHRwbGFjZWhvbGRlcj86IHN0cmluZ1xuXHRjbGFzc05hbWU/OiBzdHJpbmdcblx0ZGlzYWJsZWQ/OiBib29sZWFuXG5cdG5hbWU/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFRpbWVQaWNrZXIoe1xuXHR2YWx1ZSxcblx0b25DaGFuZ2UsXG5cdG1pblRpbWUgPSAnMDA6MDAnLFxuXHRtYXhUaW1lID0gJzIzOjQ1Jyxcblx0dGltZUZvcm1hdCA9ICcxMi1ob3VyJyxcblx0cGxhY2Vob2xkZXIgPSAnU2VsZWN0IHRpbWUuLi4nLFxuXHRjbGFzc05hbWUsXG5cdGRpc2FibGVkID0gZmFsc2UsXG5cdG5hbWUsXG59OiBUaW1lUGlja2VyUHJvcHMpIHtcblx0Y29uc3QgW29wZW4sIHNldE9wZW5dID0gdXNlU3RhdGUoZmFsc2UpXG5cdGNvbnN0IFtzZWFyY2gsIHNldFNlYXJjaF0gPSB1c2VTdGF0ZSgnJylcblx0Y29uc3QgaW5wdXRSZWYgPSB1c2VSZWY8SFRNTElucHV0RWxlbWVudD4obnVsbClcblx0Y29uc3QgdHJpZ2dlclJlZiA9IHVzZVJlZjxIVE1MQnV0dG9uRWxlbWVudD4obnVsbClcblx0Y29uc3QgW3RyaWdnZXJXaWR0aCwgc2V0VHJpZ2dlcldpZHRoXSA9IHVzZVN0YXRlPG51bWJlcj4oMClcblxuXHRjb25zdCB7IHRpbWVPcHRpb25zLCBmb3JtYXRUaW1lIH0gPSB1c2VBdXRvY29tcGxldGVUaW1lcGlja2VyKHtcblx0XHR0aW1lRm9ybWF0LFxuXHRcdG1pblRpbWUsXG5cdFx0bWF4VGltZSxcblx0fSlcblxuXHQvLyBGaWx0ZXIgdGltZSBvcHRpb25zIGJhc2VkIG9uIHNlYXJjaFxuXHRjb25zdCBmaWx0ZXJlZE9wdGlvbnMgPSB0aW1lT3B0aW9ucy5maWx0ZXIoKHRpbWUpID0+IHtcblx0XHRjb25zdCBmb3JtYXR0ZWRUaW1lID0gZm9ybWF0VGltZSh0aW1lKVxuXHRcdHJldHVybiBmb3JtYXR0ZWRUaW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoLnRvTG93ZXJDYXNlKCkpXG5cdH0pXG5cblx0Y29uc3QgaGFuZGxlU2VsZWN0ID0gKHRpbWU6IHN0cmluZykgPT4ge1xuXHRcdG9uQ2hhbmdlKHRpbWUpXG5cdFx0c2V0T3BlbihmYWxzZSlcblx0XHRzZXRTZWFyY2goJycpXG5cdH1cblxuXHQvLyBNZWFzdXJlIHRyaWdnZXIgd2lkdGggYW5kIGZvY3VzIGlucHV0IHdoZW4gcG9wb3ZlciBvcGVuc1xuXHR1c2VFZmZlY3QoKCkgPT4ge1xuXHRcdGlmIChvcGVuKSB7XG5cdFx0XHRpZiAodHJpZ2dlclJlZi5jdXJyZW50KSB7XG5cdFx0XHRcdHNldFRyaWdnZXJXaWR0aCh0cmlnZ2VyUmVmLmN1cnJlbnQub2Zmc2V0V2lkdGgpXG5cdFx0XHR9XG5cdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0aW5wdXRSZWYuY3VycmVudD8uZm9jdXMoKVxuXHRcdFx0fSwgMClcblx0XHR9XG5cdH0sIFtvcGVuXSlcblxuXHRjb25zdCBjdXJyZW50VGltZVN0cmluZyA9IHZhbHVlID8gZm9ybWF0VGltZSh2YWx1ZSkgOiBwbGFjZWhvbGRlclxuXG5cdHJldHVybiAoXG5cdFx0PFBvcG92ZXIgb25PcGVuQ2hhbmdlPXtzZXRPcGVufSBvcGVuPXtvcGVufT5cblx0XHRcdDxQb3BvdmVyVHJpZ2dlciBhc0NoaWxkPlxuXHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0YXJpYS1jb250cm9scz1cInRpbWUtcGlja2VyLWxpc3Rib3hcIlxuXHRcdFx0XHRcdGFyaWEtZXhwYW5kZWQ9e29wZW59XG5cdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbigndy1mdWxsIGp1c3RpZnktc3RhcnQnLCBjbGFzc05hbWUpfVxuXHRcdFx0XHRcdGRhdGEtdGVzdGlkPXtrZXlzLnRpbWVQaWNrZXIobmFtZSl9XG5cdFx0XHRcdFx0ZGlzYWJsZWQ9e2Rpc2FibGVkfVxuXHRcdFx0XHRcdHJlZj17dHJpZ2dlclJlZn1cblx0XHRcdFx0XHRyb2xlPVwiY29tYm9ib3hcIlxuXHRcdFx0XHRcdHZhcmlhbnQ9XCJvdXRsaW5lXCJcblx0XHRcdFx0PlxuXHRcdFx0XHRcdDxDbG9jayBjbGFzc05hbWU9XCJtci0yIGgtNCB3LTRcIiAvPlxuXHRcdFx0XHRcdHtjdXJyZW50VGltZVN0cmluZ31cblx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHQ8L1BvcG92ZXJUcmlnZ2VyPlxuXHRcdFx0PFBvcG92ZXJDb250ZW50XG5cdFx0XHRcdGFsaWduPVwic3RhcnRcIlxuXHRcdFx0XHRjbGFzc05hbWU9XCJwLTBcIlxuXHRcdFx0XHRzdHlsZT17eyB3aWR0aDogdHJpZ2dlcldpZHRoIH19XG5cdFx0XHQ+XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwicC0yIGJvcmRlci1iXCI+XG5cdFx0XHRcdFx0PElucHV0XG5cdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJoLThcIlxuXHRcdFx0XHRcdFx0b25DaGFuZ2U9eyhlKSA9PiBzZXRTZWFyY2goZS50YXJnZXQudmFsdWUpfVxuXHRcdFx0XHRcdFx0cGxhY2Vob2xkZXI9XCJTZWFyY2ggdGltZS4uLlwiXG5cdFx0XHRcdFx0XHRyZWY9e2lucHV0UmVmfVxuXHRcdFx0XHRcdFx0dmFsdWU9e3NlYXJjaH1cblx0XHRcdFx0XHQvPlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PFNjcm9sbEFyZWEgY2xhc3NOYW1lPVwiaC1bMjAwcHhdXCIgb25XaGVlbD17aGFuZGxlV2hlZWx9PlxuXHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwicC0xXCI+XG5cdFx0XHRcdFx0XHR7ZmlsdGVyZWRPcHRpb25zLmxlbmd0aCA9PT0gMCA/IChcblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJweS02IHRleHQtY2VudGVyIHRleHQtc20gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCI+XG5cdFx0XHRcdFx0XHRcdFx0Ti9BXG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0KSA6IChcblx0XHRcdFx0XHRcdFx0ZmlsdGVyZWRPcHRpb25zLm1hcCgodGltZSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IHRpbWVTdHJpbmcgPSBmb3JtYXRUaW1lKHRpbWUpXG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgaXNTZWxlY3RlZCA9IHRpbWUgPT09IHZhbHVlXG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0XHRcdDxidXR0b25cblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQncmVsYXRpdmUgZmxleCB3LWZ1bGwgY3Vyc29yLXBvaW50ZXIgc2VsZWN0LW5vbmUgaXRlbXMtY2VudGVyIHJvdW5kZWQtc20gcHgtMiBweS0xLjUgdGV4dC1zbSBvdXRsaW5lLW5vbmUgdHJhbnNpdGlvbi1jb2xvcnMgaG92ZXI6YmctYWNjZW50IGhvdmVyOnRleHQtYWNjZW50LWZvcmVncm91bmQnLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlzU2VsZWN0ZWQgJiYgJ2JnLWFjY2VudCB0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kJ1xuXHRcdFx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRrZXk9e3RpbWV9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9uQ2xpY2s9eygpID0+IGhhbmRsZVNlbGVjdCh0aW1lKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZT1cImJ1dHRvblwiXG5cdFx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHt0aW1lU3RyaW5nfVxuXHRcdFx0XHRcdFx0XHRcdFx0PC9idXR0b24+XG5cdFx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PC9TY3JvbGxBcmVhPlxuXHRcdFx0PC9Qb3BvdmVyQ29udGVudD5cblx0XHQ8L1BvcG92ZXI+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBUaW1lRm9ybWF0IH0gZnJvbSAnQC90eXBlcydcblxuaW50ZXJmYWNlIFVzZUF1dG9jb21wbGV0ZVRpbWVwaWNrZXJQcm9wcyB7XG5cdHRpbWVGb3JtYXQ/OiBUaW1lRm9ybWF0XG5cdG1pblRpbWU/OiBzdHJpbmdcblx0bWF4VGltZT86IHN0cmluZ1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlQXV0b2NvbXBsZXRlVGltZXBpY2tlcih7XG5cdHRpbWVGb3JtYXQgPSAnMTItaG91cicsXG5cdG1pblRpbWUgPSAnMDA6MDAnLFxuXHRtYXhUaW1lID0gJzIzOjQ1Jyxcbn06IFVzZUF1dG9jb21wbGV0ZVRpbWVwaWNrZXJQcm9wcykge1xuXHQvLyBHZW5lcmF0ZSB0aW1lIG9wdGlvbnMgKDE1LW1pbnV0ZSBpbnRlcnZhbHMpIHdpdGhpbiBtaW4vbWF4IHJhbmdlXG5cdGNvbnN0IHRpbWVPcHRpb25zID0gdXNlTWVtbygoKSA9PiB7XG5cdFx0Y29uc3QgdGltZXM6IHN0cmluZ1tdID0gW11cblx0XHRjb25zdCBbbWluSG91ciwgbWluTWludXRlXSA9IG1pblRpbWUuc3BsaXQoJzonKS5tYXAoTnVtYmVyKVxuXHRcdGNvbnN0IFttYXhIb3VyLCBtYXhNaW51dGVdID0gbWF4VGltZS5zcGxpdCgnOicpLm1hcChOdW1iZXIpXG5cblx0XHRjb25zdCBtaW5Ub3RhbE1pbnV0ZXMgPSBtaW5Ib3VyICogNjAgKyBtaW5NaW51dGVcblx0XHRjb25zdCBtYXhUb3RhbE1pbnV0ZXMgPSBtYXhIb3VyICogNjAgKyBtYXhNaW51dGVcblxuXHRcdGZvciAoXG5cdFx0XHRsZXQgdG90YWxNaW51dGVzID0gbWluVG90YWxNaW51dGVzO1xuXHRcdFx0dG90YWxNaW51dGVzIDw9IG1heFRvdGFsTWludXRlcztcblx0XHRcdHRvdGFsTWludXRlcyArPSAxNVxuXHRcdCkge1xuXHRcdFx0Y29uc3QgaG91cnMgPSBNYXRoLmZsb29yKHRvdGFsTWludXRlcyAvIDYwKVxuXHRcdFx0Y29uc3QgbWludXRlcyA9IHRvdGFsTWludXRlcyAlIDYwXG5cblx0XHRcdGNvbnN0IHRpbWVTdHJpbmcgPSBgJHtob3Vycy50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyl9OiR7bWludXRlcy50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyl9YFxuXHRcdFx0dGltZXMucHVzaCh0aW1lU3RyaW5nKVxuXHRcdH1cblxuXHRcdHJldHVybiB0aW1lc1xuXHR9LCBbbWluVGltZSwgbWF4VGltZV0pXG5cblx0Y29uc3QgZm9ybWF0VGltZSA9ICh0aW1lOiBzdHJpbmcpID0+IHtcblx0XHRjb25zdCBbaG91cnMsIG1pbnV0ZXNdID0gdGltZS5zcGxpdCgnOicpLm1hcChOdW1iZXIpXG5cdFx0Y29uc3QgcGVyaW9kID0gaG91cnMgPj0gMTIgPyAnUE0nIDogJ0FNJ1xuXHRcdGNvbnN0IGRpc3BsYXlIb3VycyA9IGhvdXJzID09PSAwID8gMTIgOiBob3VycyA+IDEyID8gaG91cnMgLSAxMiA6IGhvdXJzXG5cblx0XHRpZiAodGltZUZvcm1hdCA9PT0gJzI0LWhvdXInKSB7XG5cdFx0XHRyZXR1cm4gYCR7aG91cnMudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpfToke21pbnV0ZXMudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpfWBcblx0XHR9XG5cblx0XHRyZXR1cm4gYCR7ZGlzcGxheUhvdXJzfToke21pbnV0ZXMudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpfSAke3BlcmlvZH1gXG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdHRpbWVPcHRpb25zLFxuXHRcdGZvcm1hdFRpbWUsXG5cdH1cbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgZ2V0RGF5S2V5LCBpc1RvZGF5IH0gZnJvbSAnLi9kYXRlLXV0aWxzJ1xuXG50eXBlIElkID0gc3RyaW5nIHwgbnVtYmVyXG5cbmNvbnN0IHBhZDIgPSAobjogbnVtYmVyIHwgc3RyaW5nKTogc3RyaW5nID0+IFN0cmluZyhuKS5wYWRTdGFydCgyLCAnMCcpXG5jb25zdCBwYWRIb3VySWZOdW1iZXIgPSAoaG91cjogbnVtYmVyIHwgc3RyaW5nKTogc3RyaW5nID0+XG5cdHR5cGVvZiBob3VyID09PSAnbnVtYmVyJyA/IHBhZDIoaG91cikgOiBob3VyXG5cbi8qKlxuICogQ2VudHJhbGl6ZWQgZmFjdG9yeSBmb3Iga2V5cywgaWRzLCBhbmQgZGF0YS10ZXN0aWRzLiBFYWNoIGVudHJ5IHJldHVybnMgYVxuICogc2VtYW50aWMgc3RyaW5nIGlkZW50aWZpZWQgYnkgaXRzIGNvbmNlcHQgcHJlZml4IChlLmcuIGBkYXktY29sLWAsXG4gKiBgZGF5LWNlbGwtYCwgYHdlZWstaGVhZGVyLWRheS1gKS4gVGhlIGNhbGwgc2l0ZSBjaG9vc2VzIHRoZSByb2xlIOKAlCB0aGVcbiAqIHNhbWUgc3RyaW5nIGNhbiBzZXJ2ZSBhcyBhIFJlYWN0IGBrZXk9YCwgYW4gYGlkYCwgb3IgYSBgZGF0YS10ZXN0aWRgLlxuICpcbiAqIEluc3BpcmVkIGJ5IGh0dHBzOi8vdGtkb2RvLmV1L2Jsb2cvZWZmZWN0aXZlLXJlYWN0LXF1ZXJ5LWtleXMjdXNlLXF1ZXJ5LWtleS1mYWN0b3JpZXMuXG4gKiBQcmV2ZW50cyBhZC1ob2Mgc3RyaW5nIGNvbmNhdGVuYXRpb24gc28gY3Jvc3MtY3V0dGluZyBjaGFuZ2VzIChwcmVmaXgsXG4gKiBzZXBhcmF0b3IsIGZvcm1hdCkgYXJlIG9uZS1wb2ludC5cbiAqL1xuZXhwb3J0IGNvbnN0IGtleXMgPSB7XG5cdC8vIEdyaWQgY29sdW1uIGNvbmZpZ3VyYXRpb24gaWRzXG5cdGNvbDoge1xuXHRcdHRpbWU6ICd0aW1lLWNvbCcsXG5cdFx0ZGF0ZTogJ2RhdGUtY29sJyxcblx0XHRkYXk6IChkYXk6IERheWpzLCByZXNvdXJjZUlkPzogSWQpID0+IHtcblx0XHRcdGNvbnN0IGJhc2UgPSBgZGF5LWNvbC0ke2dldERheUtleShkYXkpfWBcblx0XHRcdHJldHVybiByZXNvdXJjZUlkICE9IG51bGwgPyBgJHtiYXNlfS1yZXNvdXJjZS0ke3Jlc291cmNlSWR9YCA6IGJhc2Vcblx0XHR9LFxuXHRcdHJlc291cmNlOiAoc2NvcGU6ICd3ZWVrJyB8ICdtb250aCcsIHJlc291cmNlSWQ6IElkKSA9PlxuXHRcdFx0YCR7c2NvcGV9LWNvbC1yZXNvdXJjZS0ke3Jlc291cmNlSWR9YCxcblx0XHRhbGxEYXk6IChkYXk6IERheWpzLCBpbmRleDogbnVtYmVyKSA9PlxuXHRcdFx0YGFsbC1kYXktY29sLSR7Z2V0RGF5S2V5KGRheSl9LSR7aW5kZXh9YCxcblx0fSxcblxuXHQvLyBHcmlkIGNlbGwgaWRlbnRpZmllcnNcblx0Y2VsbDoge1xuXHRcdGRheTogKGRheTogRGF5anMsIGhvdXI/OiBudW1iZXIgfCBzdHJpbmcsIG1pbnV0ZTogbnVtYmVyIHwgc3RyaW5nID0gMCkgPT4ge1xuXHRcdFx0Y29uc3QgayA9IGdldERheUtleShkYXkpXG5cdFx0XHRyZXR1cm4gaG91ciAhPSBudWxsXG5cdFx0XHRcdD8gYGRheS1jZWxsLSR7a30tJHtwYWQyKGhvdXIpfS0ke3BhZDIobWludXRlKX1gXG5cdFx0XHRcdDogYGRheS1jZWxsLSR7a31gXG5cdFx0fSxcblx0XHR2ZXJ0aWNhbFRpbWU6IChob3VyOiBudW1iZXIgfCBzdHJpbmcpID0+IGB2ZXJ0aWNhbC10aW1lLSR7cGFkMihob3VyKX1gLFxuXHRcdHZlcnRpY2FsOiAoXG5cdFx0XHRkYXk6IERheWpzLFxuXHRcdFx0aG91cjogbnVtYmVyIHwgc3RyaW5nLFxuXHRcdFx0bWludXRlOiBudW1iZXIgfCBzdHJpbmcsXG5cdFx0XHRyZXNvdXJjZUlkPzogSWRcblx0XHQpID0+IHtcblx0XHRcdGNvbnN0IGJhc2UgPSBgdmVydGljYWwtY2VsbC0ke2dldERheUtleShkYXkpfS0ke3BhZDIoaG91cil9LSR7cGFkMihtaW51dGUpfWBcblx0XHRcdHJldHVybiByZXNvdXJjZUlkICE9IG51bGwgPyBgJHtiYXNlfS1yZXNvdXJjZS0ke3Jlc291cmNlSWR9YCA6IGJhc2Vcblx0XHR9LFxuXHR9LFxuXG5cdC8vIENvbnRhaW5lciAod3JhcHBlcikgaWRlbnRpZmllcnNcblx0Y29udGFpbmVyOiB7XG5cdFx0dmVydGljYWw6IHtcblx0XHRcdGNvbDogKGlkOiBJZCkgPT4gYHZlcnRpY2FsLWNvbC0ke2lkfWAsXG5cdFx0fSxcblx0XHRob3Jpem9udGFsOiB7XG5cdFx0XHRyb3c6IChpZDogSWQpID0+IGBob3Jpem9udGFsLXJvdy0ke2lkfWAsXG5cdFx0XHRyb3dMYWJlbDogKHJlc291cmNlSWQ6IElkKSA9PiBgaG9yaXpvbnRhbC1yb3ctbGFiZWwtJHtyZXNvdXJjZUlkfWAsXG5cdFx0XHRldmVudDogKGV2ZW50SWQ6IElkKSA9PiBgaG9yaXpvbnRhbC1ldmVudC0ke2V2ZW50SWR9YCxcblx0XHR9LFxuXHRcdGV2ZW50c0xheWVyOiAob3JpZW50YXRpb246ICd2ZXJ0aWNhbCcgfCAnaG9yaXpvbnRhbCcsIGlkOiBJZCkgPT5cblx0XHRcdGAke29yaWVudGF0aW9ufS1ldmVudHMtJHtpZH1gLFxuXHR9LFxuXG5cdC8vIEhlYWRlciBpZGVudGlmaWVyc1xuXHRoZWFkZXI6IHtcblx0XHRyZXNvdXJjZToge1xuXHRcdFx0d2Vla0RheTogJ3Jlc291cmNlLXdlZWstZGF5LWhlYWRlcicsXG5cdFx0XHR0aW1lTGFiZWw6ICh2aWV3OiAnd2VlaycgfCAnZGF5JywgaG91cjogbnVtYmVyIHwgc3RyaW5nKSA9PlxuXHRcdFx0XHRgcmVzb3VyY2UtJHt2aWV3fS10aW1lLWxhYmVsLSR7cGFkSG91cklmTnVtYmVyKGhvdXIpfWAsXG5cdFx0fSxcblx0XHR3ZWVrZGF5OiAodmlldzogJ3dlZWsnIHwgJ21vbnRoJywgbmFtZTogc3RyaW5nKSA9PlxuXHRcdFx0YCR7dmlld30taGVhZGVyLXdlZWtkYXktJHtuYW1lLnRvTG93ZXJDYXNlKCl9YCxcblx0XHR3ZWVrOiB7XG5cdFx0XHRkYXk6IChkYXk6IERheWpzKSA9PiBgd2Vlay1oZWFkZXItZGF5LSR7ZGF5LnRvSVNPU3RyaW5nKCl9YCxcblx0XHRcdGhvdXI6IChkYXk6IERheWpzLCByZWY6IElkKSA9PlxuXHRcdFx0XHRgd2Vlay1oZWFkZXItaG91ci0ke2RheS50b0lTT1N0cmluZygpfS0ke3JlZn1gLFxuXHRcdFx0cmVzb3VyY2U6IChyZXNvdXJjZUlkOiBJZCkgPT4gYHdlZWstaGVhZGVyLXJlc291cmNlLSR7cmVzb3VyY2VJZH1gLFxuXHRcdH0sXG5cdFx0eWVhcjoge1xuXHRcdFx0bW9udGg6IChtb250aEtleTogc3RyaW5nLCBwYXJ0PzogJ3RpdGxlJyB8ICdjb3VudCcgfCAnbWluaScpID0+XG5cdFx0XHRcdHBhcnQgPyBgeWVhci1tb250aC0ke3BhcnR9LSR7bW9udGhLZXl9YCA6IGB5ZWFyLW1vbnRoLSR7bW9udGhLZXl9YCxcblx0XHRcdGRheTogKG1vbnRoS2V5OiBzdHJpbmcsIGRheUtleTogc3RyaW5nKSA9PlxuXHRcdFx0XHRgeWVhci1kYXktJHttb250aEtleX0tJHtkYXlLZXl9YCxcblx0XHR9LFxuXHR9LFxuXG5cdC8vIFJlc291cmNlLXNjb3BlZCBhbGwtZGF5IHJvdyBpZCAoZmFsbHMgYmFjayB0byAnbWFpbicgd2hlbiB1bnNjb3BlZCkuXG5cdGFsbERheVJvdzogKHJlc291cmNlSWQ/OiBJZCkgPT4gYGFsbGRheS1yb3ctJHtyZXNvdXJjZUlkID8/ICdtYWluJ31gLFxuXG5cdC8vIEdlbmVyaWMgaXRlcmF0aW9uIGtleSBjb21wb3NlciBmb3IgUmVhY3QgYGtleT1gIHByb3BzLCBsaXN0IG1hcmtlcnMsXG5cdC8vIGFuZCBzdWZmaXhlZCB3cmFwcGVyIGtleXMgKGUuZy4gYGxpc3RLZXkoYmFzZSwgJ2FuaW1hdGVkJylgKS5cblx0bGlzdEtleTogKC4uLnBhcnRzOiBBcnJheTxzdHJpbmcgfCBudW1iZXI+KSA9PiBwYXJ0cy5qb2luKCctJyksXG5cblx0Ly8gRGF5TnVtYmVyIGNvbXBvbmVudCB0ZXN0aWQg4oCUIGBkYXktbnVtYmVyLXRvZGF5YCB3aGVuIHRoZSBkYXRlIGlzIHRvZGF5LFxuXHQvLyBvdGhlcndpc2UgYGRheS1udW1iZXIte0R9YC5cblx0ZGF5TnVtYmVyOiAoZGF0ZTogRGF5anMpID0+XG5cdFx0aXNUb2RheShkYXRlKSA/ICdkYXktbnVtYmVyLXRvZGF5JyA6IGBkYXktbnVtYmVyLSR7ZGF0ZS5mb3JtYXQoJ0QnKX1gLFxuXG5cdC8vIEZvcm0gZWxlbWVudCB0ZXN0aWQgZm9yIHRpbWUgcGlja2VycyAobmFtZSA9ICdzdGFydCcgLyAnZW5kJyBldGMuKVxuXHR0aW1lUGlja2VyOiAobmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkKSA9PiBgdGltZS1waWNrZXItJHtuYW1lID8/ICcnfWAsXG5cblx0Ly8gRHJvcHBhYmxlIGlkcyAoZG5kLWtpdCByZWdpc3RyeSDigJQgSVNPIGZvciBwZXItc2xvdCB1bmlxdWVuZXNzKS5cblx0Ly8gYGRyb3AtYCBwcmVmaXggYXZvaWRzIGNvbGxpZGluZyB3aXRoIGBjZWxsLmRheWAgdGVzdGlkcy5cblx0ZHJvcHBhYmxlOiB7XG5cdFx0ZGF5Q2VsbDogKGRheTogRGF5anMsIG9wdGlvbnM/OiB7IGFsbERheT86IGJvb2xlYW47IHJlc291cmNlSWQ/OiBJZCB9KSA9PiB7XG5cdFx0XHRjb25zdCBpc28gPSBkYXkudG9JU09TdHJpbmcoKVxuXHRcdFx0Y29uc3QgYWxsRGF5UGFydCA9IG9wdGlvbnM/LmFsbERheSA/ICctYWxsZGF5JyA6ICcnXG5cdFx0XHRjb25zdCByZXNvdXJjZVBhcnQgPVxuXHRcdFx0XHRvcHRpb25zPy5yZXNvdXJjZUlkICE9IG51bGwgPyBgLXJlc291cmNlLSR7b3B0aW9ucy5yZXNvdXJjZUlkfWAgOiAnJ1xuXHRcdFx0cmV0dXJuIGBkcm9wLWRheS1jZWxsLSR7aXNvfSR7YWxsRGF5UGFydH0ke3Jlc291cmNlUGFydH1gXG5cdFx0fSxcblx0fSxcbn0gYXMgY29uc3RcbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBCdXNpbmVzc0hvdXJzIH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgV0VFS19EQVlTX05VTUJFUl9NQVAgfSBmcm9tICdAL2xpYi9jb25zdGFudHMnXG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgc3BlY2lmaWMgZGF0ZSBpcyBhIGJ1c2luZXNzIGRheS5cbiAqXG4gKiBAcGFyYW0gZGF0ZSBUaGUgZGF0ZSB0byBjaGVja1xuICogQHBhcmFtIGJ1c2luZXNzSG91cnMgVGhlIGJ1c2luZXNzIGhvdXJzIGNvbmZpZ3VyYXRpb24gKHNpbmdsZSBvciBhcnJheSlcbiAqIEByZXR1cm5zIHRydWUgaWYgdGhlIGRhdGUgaXMgYSBidXNpbmVzcyBkYXksIGZhbHNlIG90aGVyd2lzZVxuICovXG5leHBvcnQgY29uc3QgaXNCdXNpbmVzc0RheSA9IChcblx0ZGF0ZTogRGF5anMsXG5cdGJ1c2luZXNzSG91cnM/OiBCdXNpbmVzc0hvdXJzIHwgQnVzaW5lc3NIb3Vyc1tdXG4pOiBib29sZWFuID0+IHtcblx0aWYgKCFidXNpbmVzc0hvdXJzKSB7XG5cdFx0cmV0dXJuIHRydWVcblx0fVxuXG5cdGxldCBoYXNNYXRjaCA9IGZhbHNlXG5cdHByb2Nlc3NCdXNpbmVzc0hvdXJzKGJ1c2luZXNzSG91cnMsIHtcblx0XHRkYXRlLFxuXHRcdG9uTWF0Y2g6ICgpID0+IHtcblx0XHRcdGhhc01hdGNoID0gdHJ1ZVxuXHRcdH0sXG5cdH0pXG5cblx0cmV0dXJuIGhhc01hdGNoXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSXNCdXNpbmVzc0hvdXJPcHRpb25zIHtcblx0ZGF0ZTogRGF5anNcblx0aG91cj86IG51bWJlclxuXHRtaW51dGU/OiBudW1iZXJcblx0YnVzaW5lc3NIb3Vycz86IEJ1c2luZXNzSG91cnMgfCBCdXNpbmVzc0hvdXJzW11cbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYSBzcGVjaWZpYyBob3VyIG9uIGEgc3BlY2lmaWMgZGF0ZSBpcyB3aXRoaW4gYnVzaW5lc3MgaG91cnMuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgZm9yIGNoZWNraW5nIGJ1c2luZXNzIGhvdXJzXG4gKiBAcmV0dXJucyB0cnVlIGlmIHRoZSB0aW1lIGlzIHdpdGhpbiBidXNpbmVzcyBob3VycywgZmFsc2Ugb3RoZXJ3aXNlXG4gKi9cbmV4cG9ydCBjb25zdCBpc0J1c2luZXNzSG91ciA9ICh7XG5cdGRhdGUsXG5cdGhvdXIsXG5cdG1pbnV0ZSA9IDAsXG5cdGJ1c2luZXNzSG91cnMsXG59OiBJc0J1c2luZXNzSG91ck9wdGlvbnMpOiBib29sZWFuID0+IHtcblx0Ly8gSWYgYnVzaW5lc3MgaG91cnMgYXJlIG5vdCBjb25maWd1cmVkLCBjb25zaWRlciBldmVyeXRoaW5nIGFzIFwiYnVzaW5lc3MgaG91cnNcIlxuXHRpZiAoIWJ1c2luZXNzSG91cnMpIHtcblx0XHRyZXR1cm4gdHJ1ZVxuXHR9XG5cblx0Ly8gSWYgaG91ciBpcyBub3QgcHJvdmlkZWQsIHdlIGFzc3VtZSB0aGUgdXNlciBvbmx5IGNhcmVzIGFib3V0IHRoZSBkYXlcblx0aWYgKGhvdXIgPT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBpc0J1c2luZXNzRGF5KGRhdGUsIGJ1c2luZXNzSG91cnMpXG5cdH1cblxuXHRsZXQgaXNJbkJ1c2luZXNzSG91ciA9IGZhbHNlXG5cdGNvbnN0IGN1cnJlbnRNaW51dGVzID0gaG91ciAqIDYwICsgbWludXRlXG5cblx0cHJvY2Vzc0J1c2luZXNzSG91cnMoYnVzaW5lc3NIb3Vycywge1xuXHRcdGRhdGUsXG5cdFx0b25NYXRjaDogKGNvbmZpZykgPT4ge1xuXHRcdFx0Ly8gQ2hlY2sgdGltZSBhZ2FpbnN0IHRoaXMgc3BlY2lmaWMgY29uZmlnXG5cdFx0XHQvLyBzdGFydFRpbWUgYW5kIGVuZFRpbWUgYXJlIG51bWJlcnMgKDAtMjQpXG5cdFx0XHRjb25zdCBzdGFydEggPSBjb25maWcuc3RhcnRUaW1lID8/IDlcblx0XHRcdGNvbnN0IGVuZEggPSBjb25maWcuZW5kVGltZSA/PyAxN1xuXG5cdFx0XHRjb25zdCBzdGFydE1pbnV0ZXMgPSBzdGFydEggKiA2MFxuXHRcdFx0Y29uc3QgZW5kTWludXRlcyA9IGVuZEggKiA2MFxuXG5cdFx0XHRpZiAoY3VycmVudE1pbnV0ZXMgPj0gc3RhcnRNaW51dGVzICYmIGN1cnJlbnRNaW51dGVzIDwgZW5kTWludXRlcykge1xuXHRcdFx0XHRpc0luQnVzaW5lc3NIb3VyID0gdHJ1ZVxuXHRcdFx0fVxuXHRcdH0sXG5cdH0pXG5cblx0cmV0dXJuIGlzSW5CdXNpbmVzc0hvdXJcbn1cblxuLyoqXG4gKiBIZWxwZXIgdG8gcHJvY2VzcyBhIGJ1c2luZXNzIGhvdXJzIGNvbmZpZ3VyYXRpb24gYW5kIHVwZGF0ZSB0aGUgcmFuZ2UuXG4gKi9cbmV4cG9ydCBjb25zdCBwcm9jZXNzQnVzaW5lc3NIb3VycyA9IChcblx0Ymg6IEJ1c2luZXNzSG91cnMgfCBCdXNpbmVzc0hvdXJzW10gfCB1bmRlZmluZWQsXG5cdG9wdGlvbnM6IHtcblx0XHRkYXRlPzogRGF5anNcblx0XHRvbk1hdGNoOiAoY29uZmlnOiBCdXNpbmVzc0hvdXJzKSA9PiB2b2lkXG5cdH1cbikgPT4ge1xuXHRjb25zdCB7IGRhdGUsIG9uTWF0Y2ggfSA9IG9wdGlvbnNcblx0aWYgKCFiaCkgcmV0dXJuXG5cblx0Y29uc3QgY29uZmlncyA9IEFycmF5LmlzQXJyYXkoYmgpID8gYmggOiBbYmhdXG5cblx0Zm9yIChjb25zdCBjb25maWcgb2YgY29uZmlncykge1xuXHRcdGlmIChkYXRlICYmIGNvbmZpZy5kYXlzT2ZXZWVrKSB7XG5cdFx0XHRjb25zdCBkYXlPZldlZWsgPSBkYXRlLmRheSgpXG5cdFx0XHRpZiAoXG5cdFx0XHRcdGNvbmZpZy5kYXlzT2ZXZWVrLnNvbWUoKGQpID0+IFdFRUtfREFZU19OVU1CRVJfTUFQW2RdID09PSBkYXlPZldlZWspXG5cdFx0XHQpIHtcblx0XHRcdFx0b25NYXRjaChjb25maWcpXG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdG9uTWF0Y2goY29uZmlnKVxuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJ1c2luZXNzSG91cnNSYW5nZSB7XG5cdG1pblN0YXJ0OiBudW1iZXJcblx0bWF4RW5kOiBudW1iZXJcblx0aGFzQnVzaW5lc3NIb3VyczogYm9vbGVhblxufVxuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIHVuaW9uIG9mIGJ1c2luZXNzIGhvdXJzIHJhbmdlcyBhY3Jvc3MgbXVsdGlwbGUgZGF0ZXMgYW5kL29yIHJlc291cmNlIGNvbmZpZ3VyYXRpb25zLlxuICovXG5leHBvcnQgY29uc3QgY2FsY3VsYXRlQnVzaW5lc3NIb3Vyc1JhbmdlID0gKG9wdGlvbnM6IHtcblx0YWxsRGF0ZXM6IERheWpzW11cblx0YnVzaW5lc3NIb3Vycz86IEJ1c2luZXNzSG91cnMgfCBCdXNpbmVzc0hvdXJzW11cblx0cmVzb3VyY2VCdXNpbmVzc0hvdXJzPzogKEJ1c2luZXNzSG91cnMgfCBCdXNpbmVzc0hvdXJzW10pW11cblx0aGlkZU5vbkJ1c2luZXNzSG91cnM/OiBib29sZWFuXG59KTogQnVzaW5lc3NIb3Vyc1JhbmdlID0+IHtcblx0Y29uc3Qge1xuXHRcdGFsbERhdGVzLFxuXHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0cmVzb3VyY2VCdXNpbmVzc0hvdXJzID0gW10sXG5cdFx0aGlkZU5vbkJ1c2luZXNzSG91cnMsXG5cdH0gPSBvcHRpb25zXG5cblx0bGV0IG1pblN0YXJ0ID0gMjRcblx0bGV0IG1heEVuZCA9IDBcblx0bGV0IGhhc0J1c2luZXNzSG91cnMgPSBmYWxzZVxuXG5cdGNvbnN0IG9uTWF0Y2ggPSAoY29uZmlnOiBCdXNpbmVzc0hvdXJzKSA9PiB7XG5cdFx0aGFzQnVzaW5lc3NIb3VycyA9IHRydWVcblx0XHRtaW5TdGFydCA9IE1hdGgubWluKG1pblN0YXJ0LCBjb25maWcuc3RhcnRUaW1lID8/IDkpXG5cdFx0bWF4RW5kID0gTWF0aC5tYXgobWF4RW5kLCBjb25maWcuZW5kVGltZSA/PyAxNylcblx0fVxuXG5cdC8vIEludm9rZSBwcm9jZXNzQnVzaW5lc3NIb3VycyBmb3IgdGhlIGdsb2JhbCBjb25maWcgYW5kIGV2ZXJ5IHJlc291cmNlXG5cdC8vIGNvbmZpZywgb3B0aW9uYWxseSBzY29wZWQgdG8gYSBzcGVjaWZpYyBkYXRlLlxuXHRjb25zdCBwcm9jZXNzQWxsID0gKGRhdGU/OiBEYXlqcykgPT4ge1xuXHRcdHByb2Nlc3NCdXNpbmVzc0hvdXJzKGJ1c2luZXNzSG91cnMsIHsgZGF0ZSwgb25NYXRjaCB9KVxuXHRcdGZvciAoY29uc3QgcmJoIG9mIHJlc291cmNlQnVzaW5lc3NIb3Vycykge1xuXHRcdFx0cHJvY2Vzc0J1c2luZXNzSG91cnMocmJoLCB7IGRhdGUsIG9uTWF0Y2ggfSlcblx0XHR9XG5cdH1cblxuXHRmb3IgKGNvbnN0IGRhdGUgb2YgYWxsRGF0ZXMpIHByb2Nlc3NBbGwoZGF0ZSlcblxuXHQvLyBGYWxsYmFjazogcmV0cnkgd2l0aG91dCBkYXRlIHNjb3BpbmcsIHRoZW4gZGVmYXVsdCB0byA5LTE3IGlmIHN0aWxsIGVtcHR5LlxuXHRpZiAoIWhhc0J1c2luZXNzSG91cnMgJiYgaGlkZU5vbkJ1c2luZXNzSG91cnMpIHtcblx0XHRwcm9jZXNzQWxsKClcblx0XHRpZiAoIWhhc0J1c2luZXNzSG91cnMpIHtcblx0XHRcdG1pblN0YXJ0ID0gOVxuXHRcdFx0bWF4RW5kID0gMTdcblx0XHRcdGhhc0J1c2luZXNzSG91cnMgPSB0cnVlXG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHsgbWluU3RhcnQsIG1heEVuZCwgaGFzQnVzaW5lc3NIb3VycyB9XG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgQnVzaW5lc3NIb3VycyB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB7IGNhbGN1bGF0ZUJ1c2luZXNzSG91cnNSYW5nZSB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvdXRpbHMvYnVzaW5lc3MtaG91cnMnXG5pbXBvcnQgZGF5anMsIHsgdHlwZSBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuXG5leHBvcnQgY29uc3QgYnVpbGREYXRlVGltZSA9IChcblx0ZGF0ZTogRGF0ZSxcblx0dGltZTogc3RyaW5nLFxuXHRpc0FsbERheTogYm9vbGVhblxuKTogRGF5anMgPT4ge1xuXHRjb25zdCBbaG91cnMsIG1pbnV0ZXNdID0gdGltZS5zcGxpdCgnOicpLm1hcChOdW1iZXIpXG5cdGNvbnN0IGJhc2UgPSBkYXlqcyhkYXRlKS5ob3VyKGhvdXJzKS5taW51dGUobWludXRlcylcblx0cmV0dXJuIGlzQWxsRGF5ID8gYmFzZS5ob3VyKDApLm1pbnV0ZSgwKSA6IGJhc2Vcbn1cblxuZXhwb3J0IGNvbnN0IGJ1aWxkRW5kRGF0ZVRpbWUgPSAoXG5cdGRhdGU6IERhdGUsXG5cdHRpbWU6IHN0cmluZyxcblx0aXNBbGxEYXk6IGJvb2xlYW5cbik6IERheWpzID0+IHtcblx0Y29uc3QgW2hvdXJzLCBtaW51dGVzXSA9IHRpbWUuc3BsaXQoJzonKS5tYXAoTnVtYmVyKVxuXHRjb25zdCBiYXNlID0gZGF5anMoZGF0ZSkuaG91cihob3VycykubWludXRlKG1pbnV0ZXMpXG5cdHJldHVybiBpc0FsbERheSA/IGJhc2UuaG91cigyMykubWludXRlKDU5KSA6IGJhc2Vcbn1cblxuZXhwb3J0IGNvbnN0IGdldFRpbWVDb25zdHJhaW50cyA9IChcblx0ZGF0ZTogRGF0ZSxcblx0YnVzaW5lc3NIb3Vycz86IEJ1c2luZXNzSG91cnMgfCBCdXNpbmVzc0hvdXJzW11cbikgPT4ge1xuXHRpZiAoIWJ1c2luZXNzSG91cnMpIHJldHVybiB7IG1pbjogJzAwOjAwJywgbWF4OiAnMjM6NTknIH1cblxuXHRjb25zdCBkYXlqc0RhdGUgPSBkYXlqcyhkYXRlKVxuXG5cdGNvbnN0IHsgbWluU3RhcnQsIG1heEVuZCwgaGFzQnVzaW5lc3NIb3VycyB9ID0gY2FsY3VsYXRlQnVzaW5lc3NIb3Vyc1JhbmdlKHtcblx0XHRhbGxEYXRlczogW2RheWpzRGF0ZV0sXG5cdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRoaWRlTm9uQnVzaW5lc3NIb3VyczogZmFsc2UsXG5cdH0pXG5cblx0aWYgKCFoYXNCdXNpbmVzc0hvdXJzKSB7XG5cdFx0cmV0dXJuIHsgbWluOiAnMDA6MDAnLCBtYXg6ICcyMzo1OScgfVxuXHR9XG5cblx0cmV0dXJuIHtcblx0XHRtaW46IGAke21pblN0YXJ0LnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKX06MDBgLFxuXHRcdG1heDogYCR7KG1heEVuZCAtIDEpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKX06NDVgLFxuXHR9XG59XG4iLAogICAgImltcG9ydCB7IHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgV2Vla2RheSB9IGZyb20gJ3JydWxlJ1xuaW1wb3J0IHsgUlJ1bGUgfSBmcm9tICdycnVsZSdcbmltcG9ydCB7IENhcmQsIENhcmRDb250ZW50LCBDYXJkSGVhZGVyLCBDYXJkVGl0bGUgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvY2FyZCdcbmltcG9ydCB7IENoZWNrYm94IH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2NoZWNrYm94J1xuaW1wb3J0IHsgRGF0ZVBpY2tlciB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9kYXRlLXBpY2tlcidcbmltcG9ydCB7IElucHV0IH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2lucHV0J1xuaW1wb3J0IHsgTGFiZWwgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvbGFiZWwnXG5pbXBvcnQge1xuXHRTZWxlY3QsXG5cdFNlbGVjdENvbnRlbnQsXG5cdFNlbGVjdEl0ZW0sXG5cdFNlbGVjdFRyaWdnZXIsXG5cdFNlbGVjdFZhbHVlLFxufSBmcm9tICdAL2NvbXBvbmVudHMvdWkvc2VsZWN0J1xuaW1wb3J0IHR5cGUgeyBSUnVsZU9wdGlvbnMgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvdHlwZXMnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBrZXlzIH0gZnJvbSAnQC9saWIvdXRpbHMva2V5cydcblxuY29uc3QgRlJFUV9NQVAgPSB7XG5cdERBSUxZOiBSUnVsZS5EQUlMWSxcblx0V0VFS0xZOiBSUnVsZS5XRUVLTFksXG5cdE1PTlRITFk6IFJSdWxlLk1PTlRITFksXG5cdFlFQVJMWTogUlJ1bGUuWUVBUkxZLFxufSBhcyBjb25zdFxuY29uc3QgRlJFUV9UT19TVFIgPSBPYmplY3QuZnJvbUVudHJpZXMoXG5cdE9iamVjdC5lbnRyaWVzKEZSRVFfTUFQKS5tYXAoKFtrLCB2XSkgPT4gW3YsIGtdKVxuKSBhcyBSZWNvcmQ8bnVtYmVyLCBzdHJpbmc+XG5jb25zdCBXRUVLREFZUyA9IFtcblx0UlJ1bGUuU1UsXG5cdFJSdWxlLk1PLFxuXHRSUnVsZS5UVSxcblx0UlJ1bGUuV0UsXG5cdFJSdWxlLlRILFxuXHRSUnVsZS5GUixcblx0UlJ1bGUuU0EsXG5dXG5cbmNvbnN0IEVORF9UWVBFUyA9IFtcblx0eyB0eXBlOiAnbmV2ZXInLCBpZDogJ25ldmVyJywgbGFiZWxLZXk6ICduZXZlcicgfSxcblx0eyB0eXBlOiAnY291bnQnLCBpZDogJ2FmdGVyJywgbGFiZWxLZXk6ICdhZnRlcicgfSxcblx0eyB0eXBlOiAndW50aWwnLCBpZDogJ29uJywgbGFiZWxLZXk6ICdvbicgfSxcbl0gYXMgY29uc3RcbmNvbnN0IHBhcnNlTnVtID0gKHY6IHN0cmluZykgPT4gTWF0aC5tYXgoMSwgTnVtYmVyLnBhcnNlSW50KHYsIDEwKSB8fCAxKVxuXG5jb25zdCBnZXREZXNjcmlwdGlvbiA9IChcblx0b3B0czogUlJ1bGVPcHRpb25zIHwgbnVsbCxcblx0dDogKGs6IHN0cmluZykgPT4gc3RyaW5nXG4pID0+IHtcblx0aWYgKCFvcHRzKSB7XG5cdFx0cmV0dXJuIHQoJ2N1c3RvbVJlY3VycmVuY2UnKVxuXHR9XG5cdHRyeSB7XG5cdFx0Y29uc3QgdGV4dCA9IG5ldyBSUnVsZShvcHRzKS50b1RleHQoKVxuXHRcdHJldHVybiB0ZXh0ICYmICF0ZXh0LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ2Vycm9yJylcblx0XHRcdD8gdGV4dC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHRleHQuc2xpY2UoMSlcblx0XHRcdDogdCgnY3VzdG9tUmVjdXJyZW5jZScpXG5cdH0gY2F0Y2gge1xuXHRcdHJldHVybiB0KCdjdXN0b21SZWN1cnJlbmNlJylcblx0fVxufVxuXG5pbnRlcmZhY2UgUHJvcHMge1xuXHR2YWx1ZT86IFJSdWxlT3B0aW9ucyB8IG51bGxcblx0b25DaGFuZ2U6ICh2OiBSUnVsZU9wdGlvbnMgfCBudWxsKSA9PiB2b2lkXG59XG5cbmV4cG9ydCBjb25zdCBSZWN1cnJlbmNlRWRpdG9yOiBSZWFjdC5GQzxQcm9wcz4gPSAoeyB2YWx1ZSwgb25DaGFuZ2UgfSkgPT4ge1xuXHRjb25zdCB7IHQsIGZpcnN0RGF5T2ZXZWVrIH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgoY3R4KSA9PiAoe1xuXHRcdHQ6IGN0eC50LFxuXHRcdGZpcnN0RGF5T2ZXZWVrOiBjdHguZmlyc3REYXlPZldlZWssXG5cdH0pKVxuXHRjb25zdCBbc2hvdywgc2V0U2hvd10gPSB1c2VTdGF0ZSghIXZhbHVlKVxuXHRjb25zdCBbb3B0cywgc2V0T3B0c10gPSB1c2VTdGF0ZTxSUnVsZU9wdGlvbnMgfCBudWxsPigoKSA9PiB2YWx1ZSB8fCBudWxsKVxuXG5cdGNvbnN0IFdFRUtEQVlfT1BUSU9OUyA9IFdFRUtEQVlTLm1hcCgodmFsdWUsIGluZGV4KSA9PiAoe1xuXHRcdHZhbHVlLFxuXHRcdGxhYmVsOiBkYXlqcygpLmRheShpbmRleCkuZm9ybWF0KCdkZGQnKSxcblx0fSkpXG5cdGNvbnN0IHdlZWtEYXlzID0gV0VFS0RBWVMubWFwKFxuXHRcdChkLCBpKSA9PiBXRUVLREFZX09QVElPTlNbKGkgKyBmaXJzdERheU9mV2VlaykgJSA3XVxuXHQpXG5cblx0dXNlRWZmZWN0KCgpID0+IHtcblx0XHRzZXRTaG93KCEhdmFsdWUpXG5cdFx0aWYgKHZhbHVlKSB7XG5cdFx0XHRzZXRPcHRzKHZhbHVlKVxuXHRcdH1cblx0fSwgW3ZhbHVlXSlcblxuXHRjb25zdCB1cGRhdGUgPSAodTogUGFydGlhbDxSUnVsZU9wdGlvbnM+KSA9PiB7XG5cdFx0aWYgKCFvcHRzKSB7XG5cdFx0XHRyZXR1cm5cblx0XHR9XG5cdFx0Y29uc3QgbmV4dCA9IHsgLi4ub3B0cywgLi4udSB9XG5cdFx0c2V0T3B0cyhuZXh0KVxuXHRcdG9uQ2hhbmdlKHNob3cgPyBuZXh0IDogbnVsbClcblx0fVxuXG5cdGNvbnN0IHRvZ2dsZSA9IChjaGVja2VkOiBib29sZWFuKSA9PiB7XG5cdFx0c2V0U2hvdyhjaGVja2VkKVxuXHRcdGlmICghY2hlY2tlZCkge1xuXHRcdFx0b25DaGFuZ2UobnVsbClcblx0XHRcdHJldHVyblxuXHRcdH1cblx0XHRpZiAob3B0cykge1xuXHRcdFx0b25DaGFuZ2Uob3B0cylcblx0XHRcdHJldHVyblxuXHRcdH1cblx0XHRjb25zdCBkZWYgPSB7IGZyZXE6IFJSdWxlLkRBSUxZLCBpbnRlcnZhbDogMSB9IGFzIFJSdWxlT3B0aW9uc1xuXHRcdHNldE9wdHMoZGVmKVxuXHRcdG9uQ2hhbmdlKGRlZilcblx0fVxuXG5cdGNvbnN0IHRvZ2dsZURheSA9IChpOiBudW1iZXIpID0+IHtcblx0XHRjb25zdCBjdXJyID0gKG9wdHM/LmJ5d2Vla2RheSBhcyBXZWVrZGF5W10pIHx8IFtdXG5cdFx0Y29uc3QgZGF5ID0gV0VFS0RBWVNbaV1cblx0XHRjb25zdCBuZXh0ID0gY3Vyci5pbmNsdWRlcyhkYXkpXG5cdFx0XHQ/IGN1cnIuZmlsdGVyKChkKSA9PiBkICE9PSBkYXkpXG5cdFx0XHQ6IFsuLi5jdXJyLCBkYXldXG5cdFx0dXBkYXRlKHsgYnl3ZWVrZGF5OiBuZXh0Lmxlbmd0aCA/IG5leHQgOiB1bmRlZmluZWQgfSlcblx0fVxuXG5cdGNvbnN0IHNldEVuZFR5cGUgPSAodHlwZTogJ25ldmVyJyB8ICdjb3VudCcgfCAndW50aWwnKSA9PiB7XG5cdFx0Y29uc3QgdTogUGFydGlhbDxSUnVsZU9wdGlvbnM+ID0geyBjb3VudDogdW5kZWZpbmVkLCB1bnRpbDogdW5kZWZpbmVkIH1cblx0XHRpZiAodHlwZSA9PT0gJ2NvdW50Jykge1xuXHRcdFx0dS5jb3VudCA9IG9wdHM/LmNvdW50IHx8IDFcblx0XHR9XG5cdFx0aWYgKHR5cGUgPT09ICd1bnRpbCcpIHtcblx0XHRcdHUudW50aWwgPSBvcHRzPy51bnRpbCB8fCBkYXlqcygpLmFkZCgxLCAnbW9udGgnKS5lbmRPZignZGF5JykudG9EYXRlKClcblx0XHR9XG5cdFx0dXBkYXRlKHUpXG5cdH1cblxuXHRjb25zdCBlbmRUeXBlID0gb3B0cz8udW50aWwgPyAndW50aWwnIDogb3B0cz8uY291bnQgPyAnY291bnQnIDogJ25ldmVyJ1xuXHRjb25zdCBmcmVxID0gRlJFUV9UT19TVFJbb3B0cz8uZnJlcSA/PyBSUnVsZS5EQUlMWV0gfHwgJ0RBSUxZJ1xuXHRjb25zdCBieXdlZWtkYXkgPSBBcnJheS5pc0FycmF5KG9wdHM/LmJ5d2Vla2RheSlcblx0XHQ/IG9wdHMuYnl3ZWVrZGF5XG5cdFx0OiBvcHRzPy5ieXdlZWtkYXlcblx0XHRcdD8gW29wdHMuYnl3ZWVrZGF5XVxuXHRcdFx0OiBbXVxuXG5cdHJldHVybiAoXG5cdFx0PENhcmQgZGF0YS10ZXN0aWQ9XCJyZWN1cnJlbmNlLWVkaXRvclwiPlxuXHRcdFx0PENhcmRIZWFkZXIgY2xhc3NOYW1lPVwicGItM1wiPlxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMlwiPlxuXHRcdFx0XHRcdDxDaGVja2JveFxuXHRcdFx0XHRcdFx0Y2hlY2tlZD17c2hvd31cblx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPVwidG9nZ2xlLXJlY3VycmVuY2VcIlxuXHRcdFx0XHRcdFx0aWQ9XCJyZWN1cnJpbmdcIlxuXHRcdFx0XHRcdFx0b25DaGVja2VkQ2hhbmdlPXt0b2dnbGV9XG5cdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHQ8Q2FyZFRpdGxlIGNsYXNzTmFtZT1cInRleHQtc21cIj57dCgncmVwZWF0Jyl9PC9DYXJkVGl0bGU+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHR7c2hvdyAmJiB2YWx1ZSAmJiAoXG5cdFx0XHRcdFx0PHAgY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LW11dGVkLWZvcmVncm91bmRcIj5cblx0XHRcdFx0XHRcdHtnZXREZXNjcmlwdGlvbih2YWx1ZSwgdCl9XG5cdFx0XHRcdFx0PC9wPlxuXHRcdFx0XHQpfVxuXHRcdFx0PC9DYXJkSGVhZGVyPlxuXG5cdFx0XHR7c2hvdyAmJiAoXG5cdFx0XHRcdDxDYXJkQ29udGVudCBjbGFzc05hbWU9XCJwdC0wXCI+XG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTRcIj5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBncmlkLWNvbHMtMiBnYXAtNFwiPlxuXHRcdFx0XHRcdFx0XHQ8ZGl2PlxuXHRcdFx0XHRcdFx0XHRcdDxMYWJlbCBjbGFzc05hbWU9XCJ0ZXh0LXhzXCIgaHRtbEZvcj1cImZyZXF1ZW5jeVwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0e3QoJ3JlcGVhdHMnKX1cblx0XHRcdFx0XHRcdFx0XHQ8L0xhYmVsPlxuXHRcdFx0XHRcdFx0XHRcdDxTZWxlY3Rcblx0XHRcdFx0XHRcdFx0XHRcdG9uVmFsdWVDaGFuZ2U9eyhmKSA9PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR1cGRhdGUoeyBmcmVxOiBGUkVRX01BUFtmIGFzIGtleW9mIHR5cGVvZiBGUkVRX01BUF0gfSlcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlPXtmcmVxfVxuXHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdDxTZWxlY3RUcmlnZ2VyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImgtOFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPVwiZnJlcXVlbmN5LXNlbGVjdFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlkPVwiZnJlcXVlbmN5XCJcblx0XHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0PFNlbGVjdFZhbHVlIC8+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8L1NlbGVjdFRyaWdnZXI+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8U2VsZWN0Q29udGVudD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0e09iamVjdC5rZXlzKEZSRVFfTUFQKS5tYXAoKGYpID0+IChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8U2VsZWN0SXRlbSBrZXk9e2Z9IHZhbHVlPXtmfT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHt0KGYudG9Mb3dlckNhc2UoKSl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9TZWxlY3RJdGVtPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQpKX1cblx0XHRcdFx0XHRcdFx0XHRcdDwvU2VsZWN0Q29udGVudD5cblx0XHRcdFx0XHRcdFx0XHQ8L1NlbGVjdD5cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdDxkaXY+XG5cdFx0XHRcdFx0XHRcdFx0PExhYmVsIGNsYXNzTmFtZT1cInRleHQteHNcIiBodG1sRm9yPVwiaW50ZXJ2YWxcIj5cblx0XHRcdFx0XHRcdFx0XHRcdHt0KCdldmVyeScpfVxuXHRcdFx0XHRcdFx0XHRcdDwvTGFiZWw+XG5cdFx0XHRcdFx0XHRcdFx0PElucHV0XG5cdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJoLThcIlxuXHRcdFx0XHRcdFx0XHRcdFx0aWQ9XCJpbnRlcnZhbFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRtaW49XCIxXCJcblx0XHRcdFx0XHRcdFx0XHRcdG9uQ2hhbmdlPXsoZSkgPT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0dXBkYXRlKHsgaW50ZXJ2YWw6IHBhcnNlTnVtKGUudGFyZ2V0LnZhbHVlKSB9KVxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0dHlwZT1cIm51bWJlclwiXG5cdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZT17b3B0cz8uaW50ZXJ2YWwgfHwgMX1cblx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdFx0XHR7b3B0cz8uZnJlcSA9PT0gUlJ1bGUuV0VFS0xZICYmIChcblx0XHRcdFx0XHRcdFx0PGRpdj5cblx0XHRcdFx0XHRcdFx0XHQ8TGFiZWwgY2xhc3NOYW1lPVwidGV4dC14c1wiPnt0KCdyZXBlYXRPbicpfTwvTGFiZWw+XG5cdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtd3JhcCBnYXAtMSBtdC0xXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHR7d2Vla0RheXMubWFwKChkLCBpKSA9PiAoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTFcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGtleT17a2V5cy5saXN0S2V5KCd3ZWVrZGF5JywgaSl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8Q2hlY2tib3hcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNoZWNrZWQ9e2J5d2Vla2RheS5pbmNsdWRlcyhkLnZhbHVlKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlkPXtrZXlzLmxpc3RLZXkoJ2RheScsIGkpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0b25DaGVja2VkQ2hhbmdlPXsoKSA9PiB0b2dnbGVEYXkoaSl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8TGFiZWxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cInRleHQteHMgY3Vyc29yLXBvaW50ZXJcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aHRtbEZvcj17a2V5cy5saXN0S2V5KCdkYXknLCBpKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR7ZC5sYWJlbH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L0xhYmVsPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0XHRcdCkpfVxuXHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdCl9XG5cblx0XHRcdFx0XHRcdDxkaXY+XG5cdFx0XHRcdFx0XHRcdDxMYWJlbCBjbGFzc05hbWU9XCJ0ZXh0LXhzXCI+e3QoJ2VuZHMnKX08L0xhYmVsPlxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInNwYWNlLXktMiBtdC0xXCI+XG5cdFx0XHRcdFx0XHRcdFx0e0VORF9UWVBFUy5tYXAoKHsgdHlwZSwgaWQsIGxhYmVsS2V5IH0pID0+IChcblx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0yXCIga2V5PXt0eXBlfT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0PENoZWNrYm94XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2hlY2tlZD17ZW5kVHlwZSA9PT0gdHlwZX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZD17aWR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0b25DaGVja2VkQ2hhbmdlPXsoKSA9PiBzZXRFbmRUeXBlKHR5cGUpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8TGFiZWwgY2xhc3NOYW1lPVwidGV4dC14c1wiIGh0bWxGb3I9e2lkfT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR7dChsYWJlbEtleSl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdDwvTGFiZWw+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHt0eXBlID09PSAnY291bnQnICYmIGVuZFR5cGUgPT09ICdjb3VudCcgJiYgKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDw+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8SW5wdXRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiaC02IHctMTYgdGV4dC14c1wiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPVwiY291bnQtaW5wdXRcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtaW49XCIxXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0b25DaGFuZ2U9eyhlKSA9PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHVwZGF0ZSh7IGNvdW50OiBwYXJzZU51bShlLnRhcmdldC52YWx1ZSkgfSlcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlPVwibnVtYmVyXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFsdWU9e29wdHM/LmNvdW50IHx8IDF9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwidGV4dC14c1wiPnt0KCdvY2N1cnJlbmNlcycpfTwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8Lz5cblx0XHRcdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0e3R5cGUgPT09ICd1bnRpbCcgJiYgZW5kVHlwZSA9PT0gJ3VudGlsJyAmJiAoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PERhdGVQaWNrZXJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImgtNlwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkYXRlPXtvcHRzPy51bnRpbCA/PyB1bmRlZmluZWR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvbkNoYW5nZT17KGQpID0+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHVwZGF0ZSh7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dW50aWw6IGRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdD8gZGF5anMoZCkuZW5kT2YoJ2RheScpLnRvRGF0ZSgpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ6IHVuZGVmaW5lZCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdFx0KSl9XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDwvQ2FyZENvbnRlbnQ+XG5cdFx0XHQpfVxuXHRcdDwvQ2FyZD5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5mdW5jdGlvbiBDYXJkKHsgY2xhc3NOYW1lLCAuLi5wcm9wcyB9OiBSZWFjdC5Db21wb25lbnRQcm9wczwnZGl2Jz4pIHtcblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQndGV4dC1jYXJkLWZvcmVncm91bmQgZmxleCBmbGV4LWNvbCBnYXAtNiByb3VuZGVkLXhsIGJvcmRlciBzaGFkb3ctc20nLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJjYXJkXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmZ1bmN0aW9uIENhcmRIZWFkZXIoeyBjbGFzc05hbWUsIC4uLnByb3BzIH06IFJlYWN0LkNvbXBvbmVudFByb3BzPCdkaXYnPikge1xuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCdAY29udGFpbmVyL2NhcmQtaGVhZGVyIGdyaWQgYXV0by1yb3dzLW1pbiBncmlkLXJvd3MtW2F1dG9fYXV0b10gaXRlbXMtc3RhcnQgZ2FwLTEuNSBwLTQgcGItMCBoYXMtZGF0YS1bc2xvdD1jYXJkLWFjdGlvbl06Z3JpZC1jb2xzLVsxZnJfYXV0b10nLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJjYXJkLWhlYWRlclwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0Lz5cblx0KVxufVxuXG5mdW5jdGlvbiBDYXJkVGl0bGUoeyBjbGFzc05hbWUsIC4uLnByb3BzIH06IFJlYWN0LkNvbXBvbmVudFByb3BzPCdkaXYnPikge1xuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oJ2xlYWRpbmctbm9uZSBmb250LXNlbWlib2xkJywgY2xhc3NOYW1lKX1cblx0XHRcdGRhdGEtc2xvdD1cImNhcmQtdGl0bGVcIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdC8+XG5cdClcbn1cblxuZnVuY3Rpb24gQ2FyZERlc2NyaXB0aW9uKHsgY2xhc3NOYW1lLCAuLi5wcm9wcyB9OiBSZWFjdC5Db21wb25lbnRQcm9wczwnZGl2Jz4pIHtcblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9e2NuKCd0ZXh0LW11dGVkLWZvcmVncm91bmQgdGV4dC1zbScsIGNsYXNzTmFtZSl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJjYXJkLWRlc2NyaXB0aW9uXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmZ1bmN0aW9uIENhcmRBY3Rpb24oeyBjbGFzc05hbWUsIC4uLnByb3BzIH06IFJlYWN0LkNvbXBvbmVudFByb3BzPCdkaXYnPikge1xuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCdjb2wtc3RhcnQtMiByb3ctc3Bhbi0yIHJvdy1zdGFydC0xIHNlbGYtc3RhcnQganVzdGlmeS1zZWxmLWVuZCcsXG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHRcdGRhdGEtc2xvdD1cImNhcmQtYWN0aW9uXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmZ1bmN0aW9uIENhcmRDb250ZW50KHsgY2xhc3NOYW1lLCAuLi5wcm9wcyB9OiBSZWFjdC5Db21wb25lbnRQcm9wczwnZGl2Jz4pIHtcblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9e2NuKCdwLTQgcHQtMCcsIGNsYXNzTmFtZSl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJjYXJkLWNvbnRlbnRcIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdC8+XG5cdClcbn1cblxuZnVuY3Rpb24gQ2FyZEZvb3Rlcih7IGNsYXNzTmFtZSwgLi4ucHJvcHMgfTogUmVhY3QuQ29tcG9uZW50UHJvcHM8J2Rpdic+KSB7XG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbignZmxleCBpdGVtcy1jZW50ZXIgcHgtNiBbLmJvcmRlci10XTpwdC02JywgY2xhc3NOYW1lKX1cblx0XHRcdGRhdGEtc2xvdD1cImNhcmQtZm9vdGVyXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmV4cG9ydCB7XG5cdENhcmQsXG5cdENhcmRBY3Rpb24sXG5cdENhcmRDb250ZW50LFxuXHRDYXJkRGVzY3JpcHRpb24sXG5cdENhcmRGb290ZXIsXG5cdENhcmRIZWFkZXIsXG5cdENhcmRUaXRsZSxcbn1cbiIsCiAgICAiaW1wb3J0ICogYXMgU2VsZWN0UHJpbWl0aXZlIGZyb20gJ0ByYWRpeC11aS9yZWFjdC1zZWxlY3QnXG5pbXBvcnQgeyBDaGVja0ljb24sIENoZXZyb25Eb3duSWNvbiwgQ2hldnJvblVwSWNvbiB9IGZyb20gJ2x1Y2lkZS1yZWFjdCdcbmltcG9ydCB0eXBlICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmZ1bmN0aW9uIFNlbGVjdCh7XG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgU2VsZWN0UHJpbWl0aXZlLlJvb3Q+KSB7XG5cdHJldHVybiA8U2VsZWN0UHJpbWl0aXZlLlJvb3QgZGF0YS1zbG90PVwic2VsZWN0XCIgey4uLnByb3BzfSAvPlxufVxuXG5mdW5jdGlvbiBTZWxlY3RHcm91cCh7XG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgU2VsZWN0UHJpbWl0aXZlLkdyb3VwPikge1xuXHRyZXR1cm4gPFNlbGVjdFByaW1pdGl2ZS5Hcm91cCBkYXRhLXNsb3Q9XCJzZWxlY3QtZ3JvdXBcIiB7Li4ucHJvcHN9IC8+XG59XG5cbmZ1bmN0aW9uIFNlbGVjdFZhbHVlKHtcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTZWxlY3RQcmltaXRpdmUuVmFsdWU+KSB7XG5cdHJldHVybiA8U2VsZWN0UHJpbWl0aXZlLlZhbHVlIGRhdGEtc2xvdD1cInNlbGVjdC12YWx1ZVwiIHsuLi5wcm9wc30gLz5cbn1cblxuZnVuY3Rpb24gU2VsZWN0VHJpZ2dlcih7XG5cdGNsYXNzTmFtZSxcblx0c2l6ZSA9ICdkZWZhdWx0Jyxcblx0Y2hpbGRyZW4sXG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgU2VsZWN0UHJpbWl0aXZlLlRyaWdnZXI+ICYge1xuXHRzaXplPzogJ3NtJyB8ICdkZWZhdWx0J1xufSkge1xuXHRyZXR1cm4gKFxuXHRcdDxTZWxlY3RQcmltaXRpdmUuVHJpZ2dlclxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XCJib3JkZXItaW5wdXQgZGF0YS1wbGFjZWhvbGRlcjp0ZXh0LW11dGVkLWZvcmVncm91bmQgWyZfc3ZnOm5vdChbY2xhc3MqPSd0ZXh0LSddKV06dGV4dC1tdXRlZC1mb3JlZ3JvdW5kIGZvY3VzLXZpc2libGU6Ym9yZGVyLXJpbmcgZm9jdXMtdmlzaWJsZTpyaW5nLXJpbmcvNTAgYXJpYS1pbnZhbGlkOnJpbmctZGVzdHJ1Y3RpdmUvMjAgZGFyazphcmlhLWludmFsaWQ6cmluZy1kZXN0cnVjdGl2ZS80MCBhcmlhLWludmFsaWQ6Ym9yZGVyLWRlc3RydWN0aXZlIGRhcms6YmctaW5wdXQvMzAgZGFyazpob3ZlcjpiZy1pbnB1dC81MCBmbGV4IHctZml0IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ2FwLTIgcm91bmRlZC1tZCBib3JkZXIgYmctdHJhbnNwYXJlbnQgcHgtMyBweS0yIHRleHQtc20gd2hpdGVzcGFjZS1ub3dyYXAgc2hhZG93LXhzIHRyYW5zaXRpb24tW2NvbG9yLGJveC1zaGFkb3ddIG91dGxpbmUtbm9uZSBmb2N1cy12aXNpYmxlOnJpbmctWzNweF0gZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIGRpc2FibGVkOm9wYWNpdHktNTAgZGF0YS1bc2l6ZT1kZWZhdWx0XTpoLTkgZGF0YS1bc2l6ZT1zbV06aC04ICo6ZGF0YS1bc2xvdD1zZWxlY3QtdmFsdWVdOmxpbmUtY2xhbXAtMSAqOmRhdGEtW3Nsb3Q9c2VsZWN0LXZhbHVlXTpmbGV4ICo6ZGF0YS1bc2xvdD1zZWxlY3QtdmFsdWVdOml0ZW1zLWNlbnRlciAqOmRhdGEtW3Nsb3Q9c2VsZWN0LXZhbHVlXTpnYXAtMiBbJl9zdmddOnBvaW50ZXItZXZlbnRzLW5vbmUgWyZfc3ZnXTpzaHJpbmstMCBbJl9zdmc6bm90KFtjbGFzcyo9J3NpemUtJ10pXTpzaXplLTRcIixcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0ZGF0YS1zaXplPXtzaXplfVxuXHRcdFx0ZGF0YS1zbG90PVwic2VsZWN0LXRyaWdnZXJcIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdD5cblx0XHRcdHtjaGlsZHJlbn1cblx0XHRcdDxTZWxlY3RQcmltaXRpdmUuSWNvbiBhc0NoaWxkPlxuXHRcdFx0XHQ8Q2hldnJvbkRvd25JY29uIGNsYXNzTmFtZT1cInNpemUtNCBvcGFjaXR5LTUwXCIgLz5cblx0XHRcdDwvU2VsZWN0UHJpbWl0aXZlLkljb24+XG5cdFx0PC9TZWxlY3RQcmltaXRpdmUuVHJpZ2dlcj5cblx0KVxufVxuXG5mdW5jdGlvbiBTZWxlY3RDb250ZW50KHtcblx0Y2xhc3NOYW1lLFxuXHRjaGlsZHJlbixcblx0cG9zaXRpb24gPSAncG9wcGVyJyxcblx0YWxpZ24gPSAnY2VudGVyJyxcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTZWxlY3RQcmltaXRpdmUuQ29udGVudD4pIHtcblx0cmV0dXJuIChcblx0XHQ8U2VsZWN0UHJpbWl0aXZlLlBvcnRhbD5cblx0XHRcdDxTZWxlY3RQcmltaXRpdmUuQ29udGVudFxuXHRcdFx0XHRhbGlnbj17YWxpZ259XG5cdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0J2JnLXBvcG92ZXIgdGV4dC1wb3BvdmVyLWZvcmVncm91bmQgZGF0YS1bc3RhdGU9b3Blbl06YW5pbWF0ZS1pbiBkYXRhLVtzdGF0ZT1jbG9zZWRdOmFuaW1hdGUtb3V0IGRhdGEtW3N0YXRlPWNsb3NlZF06ZmFkZS1vdXQtMCBkYXRhLVtzdGF0ZT1vcGVuXTpmYWRlLWluLTAgZGF0YS1bc3RhdGU9Y2xvc2VkXTp6b29tLW91dC05NSBkYXRhLVtzdGF0ZT1vcGVuXTp6b29tLWluLTk1IGRhdGEtW3NpZGU9Ym90dG9tXTpzbGlkZS1pbi1mcm9tLXRvcC0yIGRhdGEtW3NpZGU9bGVmdF06c2xpZGUtaW4tZnJvbS1yaWdodC0yIGRhdGEtW3NpZGU9cmlnaHRdOnNsaWRlLWluLWZyb20tbGVmdC0yIGRhdGEtW3NpZGU9dG9wXTpzbGlkZS1pbi1mcm9tLWJvdHRvbS0yIHJlbGF0aXZlIHotNTAgbWF4LWgtKC0tcmFkaXgtc2VsZWN0LWNvbnRlbnQtYXZhaWxhYmxlLWhlaWdodCkgbWluLXctMzIgb3JpZ2luLSgtLXJhZGl4LXNlbGVjdC1jb250ZW50LXRyYW5zZm9ybS1vcmlnaW4pIG92ZXJmbG93LXgtaGlkZGVuIG92ZXJmbG93LXktYXV0byByb3VuZGVkLW1kIGJvcmRlciBzaGFkb3ctbWQnLFxuXHRcdFx0XHRcdHBvc2l0aW9uID09PSAncG9wcGVyJyAmJlxuXHRcdFx0XHRcdFx0J2RhdGEtW3NpZGU9Ym90dG9tXTp0cmFuc2xhdGUteS0xIGRhdGEtW3NpZGU9bGVmdF06LXRyYW5zbGF0ZS14LTEgZGF0YS1bc2lkZT1yaWdodF06dHJhbnNsYXRlLXgtMSBkYXRhLVtzaWRlPXRvcF06LXRyYW5zbGF0ZS15LTEnLFxuXHRcdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0XHQpfVxuXHRcdFx0XHRkYXRhLXNsb3Q9XCJzZWxlY3QtY29udGVudFwiXG5cdFx0XHRcdHBvc2l0aW9uPXtwb3NpdGlvbn1cblx0XHRcdFx0ey4uLnByb3BzfVxuXHRcdFx0PlxuXHRcdFx0XHQ8U2VsZWN0U2Nyb2xsVXBCdXR0b24gLz5cblx0XHRcdFx0PFNlbGVjdFByaW1pdGl2ZS5WaWV3cG9ydFxuXHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHQncC0xJyxcblx0XHRcdFx0XHRcdHBvc2l0aW9uID09PSAncG9wcGVyJyAmJlxuXHRcdFx0XHRcdFx0XHQnaC0oLS1yYWRpeC1zZWxlY3QtdHJpZ2dlci1oZWlnaHQpIHctZnVsbCBtaW4tdy0oLS1yYWRpeC1zZWxlY3QtdHJpZ2dlci13aWR0aCkgc2Nyb2xsLW15LTEnXG5cdFx0XHRcdFx0KX1cblx0XHRcdFx0PlxuXHRcdFx0XHRcdHtjaGlsZHJlbn1cblx0XHRcdFx0PC9TZWxlY3RQcmltaXRpdmUuVmlld3BvcnQ+XG5cdFx0XHRcdDxTZWxlY3RTY3JvbGxEb3duQnV0dG9uIC8+XG5cdFx0XHQ8L1NlbGVjdFByaW1pdGl2ZS5Db250ZW50PlxuXHRcdDwvU2VsZWN0UHJpbWl0aXZlLlBvcnRhbD5cblx0KVxufVxuXG5mdW5jdGlvbiBTZWxlY3RMYWJlbCh7XG5cdGNsYXNzTmFtZSxcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTZWxlY3RQcmltaXRpdmUuTGFiZWw+KSB7XG5cdHJldHVybiAoXG5cdFx0PFNlbGVjdFByaW1pdGl2ZS5MYWJlbFxuXHRcdFx0Y2xhc3NOYW1lPXtjbigndGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHB4LTIgcHktMS41IHRleHQteHMnLCBjbGFzc05hbWUpfVxuXHRcdFx0ZGF0YS1zbG90PVwic2VsZWN0LWxhYmVsXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmZ1bmN0aW9uIFNlbGVjdEl0ZW0oe1xuXHRjbGFzc05hbWUsXG5cdGNoaWxkcmVuLFxuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNlbGVjdFByaW1pdGl2ZS5JdGVtPikge1xuXHRyZXR1cm4gKFxuXHRcdDxTZWxlY3RQcmltaXRpdmUuSXRlbVxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XCJmb2N1czpiZy1hY2NlbnQgZm9jdXM6dGV4dC1hY2NlbnQtZm9yZWdyb3VuZCBbJl9zdmc6bm90KFtjbGFzcyo9J3RleHQtJ10pXTp0ZXh0LW11dGVkLWZvcmVncm91bmQgcmVsYXRpdmUgZmxleCB3LWZ1bGwgY3Vyc29yLWRlZmF1bHQgaXRlbXMtY2VudGVyIGdhcC0yIHJvdW5kZWQtc20gcHktMS41IHByLTggcGwtMiB0ZXh0LXNtIG91dGxpbmUtaGlkZGVuIHNlbGVjdC1ub25lIGRhdGEtZGlzYWJsZWQ6cG9pbnRlci1ldmVudHMtbm9uZSBkYXRhLWRpc2FibGVkOm9wYWNpdHktNTAgWyZfc3ZnXTpwb2ludGVyLWV2ZW50cy1ub25lIFsmX3N2Z106c2hyaW5rLTAgWyZfc3ZnOm5vdChbY2xhc3MqPSdzaXplLSddKV06c2l6ZS00ICo6W3NwYW5dOmxhc3Q6ZmxleCAqOltzcGFuXTpsYXN0Oml0ZW1zLWNlbnRlciAqOltzcGFuXTpsYXN0OmdhcC0yXCIsXG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHRcdGRhdGEtc2xvdD1cInNlbGVjdC1pdGVtXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQ+XG5cdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJhYnNvbHV0ZSByaWdodC0yIGZsZXggc2l6ZS0zLjUgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyXCI+XG5cdFx0XHRcdDxTZWxlY3RQcmltaXRpdmUuSXRlbUluZGljYXRvcj5cblx0XHRcdFx0XHQ8Q2hlY2tJY29uIGNsYXNzTmFtZT1cInNpemUtNFwiIC8+XG5cdFx0XHRcdDwvU2VsZWN0UHJpbWl0aXZlLkl0ZW1JbmRpY2F0b3I+XG5cdFx0XHQ8L3NwYW4+XG5cdFx0XHQ8U2VsZWN0UHJpbWl0aXZlLkl0ZW1UZXh0PntjaGlsZHJlbn08L1NlbGVjdFByaW1pdGl2ZS5JdGVtVGV4dD5cblx0XHQ8L1NlbGVjdFByaW1pdGl2ZS5JdGVtPlxuXHQpXG59XG5cbmZ1bmN0aW9uIFNlbGVjdFNlcGFyYXRvcih7XG5cdGNsYXNzTmFtZSxcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTZWxlY3RQcmltaXRpdmUuU2VwYXJhdG9yPikge1xuXHRyZXR1cm4gKFxuXHRcdDxTZWxlY3RQcmltaXRpdmUuU2VwYXJhdG9yXG5cdFx0XHRjbGFzc05hbWU9e2NuKCdiZy1ib3JkZXIgcG9pbnRlci1ldmVudHMtbm9uZSAtbXgtMSBteS0xIGgtcHgnLCBjbGFzc05hbWUpfVxuXHRcdFx0ZGF0YS1zbG90PVwic2VsZWN0LXNlcGFyYXRvclwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0Lz5cblx0KVxufVxuXG5mdW5jdGlvbiBTZWxlY3RTY3JvbGxVcEJ1dHRvbih7XG5cdGNsYXNzTmFtZSxcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTZWxlY3RQcmltaXRpdmUuU2Nyb2xsVXBCdXR0b24+KSB7XG5cdHJldHVybiAoXG5cdFx0PFNlbGVjdFByaW1pdGl2ZS5TY3JvbGxVcEJ1dHRvblxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0J2ZsZXggY3Vyc29yLWRlZmF1bHQgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHB5LTEnLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJzZWxlY3Qtc2Nyb2xsLXVwLWJ1dHRvblwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0PlxuXHRcdFx0PENoZXZyb25VcEljb24gY2xhc3NOYW1lPVwic2l6ZS00XCIgLz5cblx0XHQ8L1NlbGVjdFByaW1pdGl2ZS5TY3JvbGxVcEJ1dHRvbj5cblx0KVxufVxuXG5mdW5jdGlvbiBTZWxlY3RTY3JvbGxEb3duQnV0dG9uKHtcblx0Y2xhc3NOYW1lLFxuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNlbGVjdFByaW1pdGl2ZS5TY3JvbGxEb3duQnV0dG9uPikge1xuXHRyZXR1cm4gKFxuXHRcdDxTZWxlY3RQcmltaXRpdmUuU2Nyb2xsRG93bkJ1dHRvblxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0J2ZsZXggY3Vyc29yLWRlZmF1bHQgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHB5LTEnLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJzZWxlY3Qtc2Nyb2xsLWRvd24tYnV0dG9uXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQ+XG5cdFx0XHQ8Q2hldnJvbkRvd25JY29uIGNsYXNzTmFtZT1cInNpemUtNFwiIC8+XG5cdFx0PC9TZWxlY3RQcmltaXRpdmUuU2Nyb2xsRG93bkJ1dHRvbj5cblx0KVxufVxuXG5leHBvcnQge1xuXHRTZWxlY3QsXG5cdFNlbGVjdENvbnRlbnQsXG5cdFNlbGVjdEdyb3VwLFxuXHRTZWxlY3RJdGVtLFxuXHRTZWxlY3RMYWJlbCxcblx0U2VsZWN0U2Nyb2xsRG93bkJ1dHRvbixcblx0U2VsZWN0U2Nyb2xsVXBCdXR0b24sXG5cdFNlbGVjdFNlcGFyYXRvcixcblx0U2VsZWN0VHJpZ2dlcixcblx0U2VsZWN0VmFsdWUsXG59XG4iLAogICAgImltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBSZWN1cnJlbmNlRWRpdFNjb3BlIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL3R5cGVzJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuXG5pbnRlcmZhY2UgRGlhbG9nU3RhdGUge1xuXHRpc09wZW46IGJvb2xlYW5cblx0b3BlcmF0aW9uVHlwZTogJ2VkaXQnIHwgJ2RlbGV0ZSdcblx0ZXZlbnQ6IENhbGVuZGFyRXZlbnQgfCBudWxsXG5cdHVwZGF0ZXM/OiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+XG5cdG9uQ29uZmlybT86IChzY29wZTogUmVjdXJyZW5jZUVkaXRTY29wZSkgPT4gdm9pZFxufVxuXG5jb25zdCBDTE9TRURfU1RBVEU6IERpYWxvZ1N0YXRlID0ge1xuXHRpc09wZW46IGZhbHNlLFxuXHRvcGVyYXRpb25UeXBlOiAnZWRpdCcsXG5cdGV2ZW50OiBudWxsLFxufVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlUmVjdXJyaW5nRXZlbnRBY3Rpb25zKG9uQ29tcGxldGU/OiAoKSA9PiB2b2lkKSB7XG5cdGNvbnN0IHsgdXBkYXRlUmVjdXJyaW5nRXZlbnQsIGRlbGV0ZVJlY3VycmluZ0V2ZW50IH0gPVxuXHRcdHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KChjb250ZXh0KSA9PiAoe1xuXHRcdFx0dXBkYXRlUmVjdXJyaW5nRXZlbnQ6IGNvbnRleHQudXBkYXRlUmVjdXJyaW5nRXZlbnQsXG5cdFx0XHRkZWxldGVSZWN1cnJpbmdFdmVudDogY29udGV4dC5kZWxldGVSZWN1cnJpbmdFdmVudCxcblx0XHR9KSlcblxuXHRjb25zdCBbZGlhbG9nU3RhdGUsIHNldERpYWxvZ1N0YXRlXSA9IHVzZVN0YXRlPERpYWxvZ1N0YXRlPihDTE9TRURfU1RBVEUpXG5cblx0Y29uc3Qgb3BlbkVkaXREaWFsb2cgPSB1c2VDYWxsYmFjayhcblx0XHQoZXZlbnQ6IENhbGVuZGFyRXZlbnQsIHVwZGF0ZXM6IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD4pID0+IHtcblx0XHRcdHNldERpYWxvZ1N0YXRlKHtcblx0XHRcdFx0aXNPcGVuOiB0cnVlLFxuXHRcdFx0XHRvcGVyYXRpb25UeXBlOiAnZWRpdCcsXG5cdFx0XHRcdGV2ZW50LFxuXHRcdFx0XHR1cGRhdGVzLFxuXHRcdFx0XHRvbkNvbmZpcm06IChzY29wZTogUmVjdXJyZW5jZUVkaXRTY29wZSkgPT4ge1xuXHRcdFx0XHRcdHVwZGF0ZVJlY3VycmluZ0V2ZW50KGV2ZW50LCB1cGRhdGVzLCB7XG5cdFx0XHRcdFx0XHRzY29wZSxcblx0XHRcdFx0XHRcdGV2ZW50RGF0ZTogZXZlbnQuc3RhcnQsXG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0fSxcblx0XHRcdH0pXG5cdFx0fSxcblx0XHRbdXBkYXRlUmVjdXJyaW5nRXZlbnRdXG5cdClcblxuXHRjb25zdCBvcGVuRGVsZXRlRGlhbG9nID0gdXNlQ2FsbGJhY2soXG5cdFx0KGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB7XG5cdFx0XHRzZXREaWFsb2dTdGF0ZSh7XG5cdFx0XHRcdGlzT3BlbjogdHJ1ZSxcblx0XHRcdFx0b3BlcmF0aW9uVHlwZTogJ2RlbGV0ZScsXG5cdFx0XHRcdGV2ZW50LFxuXHRcdFx0XHRvbkNvbmZpcm06IChzY29wZTogUmVjdXJyZW5jZUVkaXRTY29wZSkgPT4ge1xuXHRcdFx0XHRcdGRlbGV0ZVJlY3VycmluZ0V2ZW50KGV2ZW50LCB7XG5cdFx0XHRcdFx0XHRzY29wZSxcblx0XHRcdFx0XHRcdGV2ZW50RGF0ZTogZXZlbnQuc3RhcnQsXG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0fSxcblx0XHRcdH0pXG5cdFx0fSxcblx0XHRbZGVsZXRlUmVjdXJyaW5nRXZlbnRdXG5cdClcblxuXHRjb25zdCBjbG9zZURpYWxvZyA9IHVzZUNhbGxiYWNrKCgpID0+IHNldERpYWxvZ1N0YXRlKENMT1NFRF9TVEFURSksIFtdKVxuXG5cdGNvbnN0IGhhbmRsZUNvbmZpcm0gPSB1c2VDYWxsYmFjayhcblx0XHQoc2NvcGU6IFJlY3VycmVuY2VFZGl0U2NvcGUpID0+IHtcblx0XHRcdGlmIChkaWFsb2dTdGF0ZS5vbkNvbmZpcm0pIHtcblx0XHRcdFx0ZGlhbG9nU3RhdGUub25Db25maXJtKHNjb3BlKVxuXHRcdFx0fVxuXHRcdFx0Y2xvc2VEaWFsb2coKVxuXHRcdFx0Ly8gQ2FsbCBvbkNvbXBsZXRlIHRvIGNsb3NlIHRoZSBwYXJlbnQgZm9ybVxuXHRcdFx0b25Db21wbGV0ZT8uKClcblx0XHR9LFxuXHRcdFtkaWFsb2dTdGF0ZSwgY2xvc2VEaWFsb2csIG9uQ29tcGxldGVdXG5cdClcblxuXHRyZXR1cm4ge1xuXHRcdGRpYWxvZ1N0YXRlLFxuXHRcdG9wZW5FZGl0RGlhbG9nLFxuXHRcdG9wZW5EZWxldGVEaWFsb2csXG5cdFx0Y2xvc2VEaWFsb2csXG5cdFx0aGFuZGxlQ29uZmlybSxcblx0fVxufVxuIiwKICAgICJpbXBvcnQgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IEJ1c2luZXNzSG91cnMgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5cbi8qKlxuICogUmV0dXJucyB0aGUgcmVzb3VyY2Utc3BlY2lmaWMgYnVzaW5lc3MgaG91cnMgd2hlbiBhdmFpbGFibGUsIG90aGVyd2lzZVxuICogZmFsbHMgYmFjayB0byB0aGUgY2FsZW5kYXItd2lkZSBgYnVzaW5lc3NIb3Vyc2AuIFNoYXJlZCBieSBjb21wb25lbnRzXG4gKiB0aGF0IG5lZWQgcGVyLXJlc291cmNlIHdvcmtpbmctaG91cnMgc2VtYW50aWNzIChncmlkIGNlbGxzLCBldmVudCBmb3JtKS5cbiAqL1xuZXhwb3J0IGNvbnN0IHVzZUVmZmVjdGl2ZUJ1c2luZXNzSG91cnMgPSAoXG5cdHJlc291cmNlSWQ6IHN0cmluZyB8IG51bWJlciB8IHVuZGVmaW5lZFxuKTogQnVzaW5lc3NIb3VycyB8IEJ1c2luZXNzSG91cnNbXSB8IHVuZGVmaW5lZCA9PiB7XG5cdGNvbnN0IHsgYnVzaW5lc3NIb3VycywgZ2V0UmVzb3VyY2VCeUlkIH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgoY3R4KSA9PiAoe1xuXHRcdGJ1c2luZXNzSG91cnM6IGN0eC5idXNpbmVzc0hvdXJzLFxuXHRcdGdldFJlc291cmNlQnlJZDogY3R4LmdldFJlc291cmNlQnlJZCxcblx0fSkpXG5cblx0cmV0dXJuIHVzZU1lbW8oKCkgPT4ge1xuXHRcdGlmIChyZXNvdXJjZUlkICE9IG51bGwgJiYgZ2V0UmVzb3VyY2VCeUlkKSB7XG5cdFx0XHRjb25zdCByZXNvdXJjZSA9IGdldFJlc291cmNlQnlJZChyZXNvdXJjZUlkKVxuXHRcdFx0aWYgKHJlc291cmNlPy5idXNpbmVzc0hvdXJzKSB7XG5cdFx0XHRcdHJldHVybiByZXNvdXJjZS5idXNpbmVzc0hvdXJzXG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBidXNpbmVzc0hvdXJzXG5cdH0sIFtyZXNvdXJjZUlkLCBnZXRSZXNvdXJjZUJ5SWQsIGJ1c2luZXNzSG91cnNdKVxufVxuIiwKICAgICJpbXBvcnQge1xuXHREaWFsb2csXG5cdERpYWxvZ0NvbnRlbnQsXG5cdERpYWxvZ0Rlc2NyaXB0aW9uLFxuXHREaWFsb2dIZWFkZXIsXG5cdERpYWxvZ1RpdGxlLFxufSBmcm9tICdAL2NvbXBvbmVudHMvdWkvZGlhbG9nJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnLi4vdHlwZXMnXG5pbXBvcnQgeyBFdmVudEZvcm0gfSBmcm9tICcuL2V2ZW50LWZvcm0nXG5cbmV4cG9ydCBjb25zdCBFdmVudEZvcm1EaWFsb2cgPSAoKSA9PiB7XG5cdGNvbnN0IHtcblx0XHR0LFxuXHRcdHNlbGVjdGVkRXZlbnQsXG5cdFx0aXNFdmVudEZvcm1PcGVuLFxuXHRcdGNsb3NlRXZlbnRGb3JtLFxuXHRcdGFkZEV2ZW50LFxuXHRcdHVwZGF0ZUV2ZW50LFxuXHRcdGRlbGV0ZUV2ZW50LFxuXHRcdHJlbmRlckV2ZW50Rm9ybSxcblx0fSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KChjb250ZXh0KSA9PiAoe1xuXHRcdHQ6IGNvbnRleHQudCxcblx0XHRzZWxlY3RlZEV2ZW50OiBjb250ZXh0LnNlbGVjdGVkRXZlbnQsXG5cdFx0aXNFdmVudEZvcm1PcGVuOiBjb250ZXh0LmlzRXZlbnRGb3JtT3Blbixcblx0XHRjbG9zZUV2ZW50Rm9ybTogY29udGV4dC5jbG9zZUV2ZW50Rm9ybSxcblx0XHRhZGRFdmVudDogY29udGV4dC5hZGRFdmVudCxcblx0XHR1cGRhdGVFdmVudDogY29udGV4dC51cGRhdGVFdmVudCxcblx0XHRkZWxldGVFdmVudDogY29udGV4dC5kZWxldGVFdmVudCxcblx0XHRyZW5kZXJFdmVudEZvcm06IGNvbnRleHQucmVuZGVyRXZlbnRGb3JtLFxuXHR9KSlcblxuXHRjb25zdCBoYW5kbGVPblVwZGF0ZSA9IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4ge1xuXHRcdHVwZGF0ZUV2ZW50KGV2ZW50LmlkLCBldmVudClcblx0fVxuXG5cdGNvbnN0IGhhbmRsZU9uRGVsZXRlID0gKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB7XG5cdFx0ZGVsZXRlRXZlbnQoZXZlbnQuaWQpXG5cdH1cblxuXHRjb25zdCBldmVudEZvcm1Qcm9wcyA9IHtcblx0XHRvcGVuOiBpc0V2ZW50Rm9ybU9wZW4sXG5cdFx0b25DbG9zZTogY2xvc2VFdmVudEZvcm0sXG5cdFx0c2VsZWN0ZWRFdmVudCxcblx0XHRvbkFkZDogYWRkRXZlbnQsXG5cdFx0b25VcGRhdGU6IGhhbmRsZU9uVXBkYXRlLFxuXHRcdG9uRGVsZXRlOiBoYW5kbGVPbkRlbGV0ZSxcblx0fVxuXG5cdGlmIChyZW5kZXJFdmVudEZvcm0pIHtcblx0XHRyZXR1cm4gcmVuZGVyRXZlbnRGb3JtKGV2ZW50Rm9ybVByb3BzKVxuXHR9XG5cblx0cmV0dXJuIChcblx0XHQ8RGlhbG9nIG9uT3BlbkNoYW5nZT17Y2xvc2VFdmVudEZvcm19IG9wZW49e2lzRXZlbnRGb3JtT3Blbn0+XG5cdFx0XHQ8RGlhbG9nQ29udGVudCBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIGgtWzkwdmhdIHctWzkwdnddIG1heC13LVs1MDBweF0gcC00IHNtOnAtNiBvdmVyZmxvdy1oaWRkZW4gZ2FwLTBcIj5cblx0XHRcdFx0PERpYWxvZ0hlYWRlciBjbGFzc05hbWU9XCJtYi0yIHNtOm1iLTQgc2hyaW5rLTBcIj5cblx0XHRcdFx0XHQ8RGlhbG9nVGl0bGUgY2xhc3NOYW1lPVwidGV4dC1iYXNlIHNtOnRleHQtbGdcIj5cblx0XHRcdFx0XHRcdHtzZWxlY3RlZEV2ZW50Py5pZCA/IHQoJ2VkaXRFdmVudCcpIDogdCgnY3JlYXRlRXZlbnQnKX1cblx0XHRcdFx0XHQ8L0RpYWxvZ1RpdGxlPlxuXHRcdFx0XHRcdDxEaWFsb2dEZXNjcmlwdGlvbiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHNtOnRleHQtc21cIj5cblx0XHRcdFx0XHRcdHtzZWxlY3RlZEV2ZW50Py5pZCA/IHQoJ2VkaXRFdmVudERldGFpbHMnKSA6IHQoJ2FkZE5ld0V2ZW50Jyl9XG5cdFx0XHRcdFx0PC9EaWFsb2dEZXNjcmlwdGlvbj5cblx0XHRcdFx0PC9EaWFsb2dIZWFkZXI+XG5cblx0XHRcdFx0PEV2ZW50Rm9ybSB7Li4uZXZlbnRGb3JtUHJvcHN9IC8+XG5cdFx0XHQ8L0RpYWxvZ0NvbnRlbnQ+XG5cdFx0PC9EaWFsb2c+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHsgQ2FsZW5kYXIgYXMgQ2FsZW5kYXJJY29uLCBEb3dubG9hZCwgTWVudSwgUGx1cyB9IGZyb20gJ2x1Y2lkZS1yZWFjdCdcbmltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9idXR0b24nXG5pbXBvcnQge1xuXHRQb3BvdmVyLFxuXHRQb3BvdmVyQ29udGVudCxcblx0UG9wb3ZlclRyaWdnZXIsXG59IGZyb20gJ0AvY29tcG9uZW50cy91aS9wb3BvdmVyJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IGRvd25sb2FkSUNhbGVuZGFyIH0gZnJvbSAnQC9saWIvdXRpbHMvZXhwb3J0LWljYWwnXG5pbXBvcnQgVGl0bGVDb250ZW50IGZyb20gJy4vdGl0bGUtY29udGVudCdcbmltcG9ydCBWaWV3Q29udHJvbHMgZnJvbSAnLi92aWV3LWNvbnRyb2xzJ1xuXG5pbnRlcmZhY2UgSGVhZGVyUHJvcHMge1xuXHRjbGFzc05hbWU/OiBzdHJpbmdcbn1cblxuY29uc3QgSGVhZGVyOiBSZWFjdC5GQzxIZWFkZXJQcm9wcz4gPSAoeyBjbGFzc05hbWUgPSAnJyB9KSA9PiB7XG5cdGNvbnN0IHtcblx0XHR2aWV3LFxuXHRcdHNldFZpZXcsXG5cdFx0bmV4dFBlcmlvZCxcblx0XHRwcmV2UGVyaW9kLFxuXHRcdHRvZGF5LFxuXHRcdG9wZW5FdmVudEZvcm0sXG5cdFx0aGVhZGVyQ29tcG9uZW50LFxuXHRcdGhlYWRlckNsYXNzTmFtZSxcblx0XHRyYXdFdmVudHMsXG5cdFx0dCxcblx0XHRoaWRlRXhwb3J0QnV0dG9uLFxuXHR9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKGN0eCkgPT4gKHtcblx0XHR2aWV3OiBjdHgudmlldyxcblx0XHRzZXRWaWV3OiBjdHguc2V0Vmlldyxcblx0XHRuZXh0UGVyaW9kOiBjdHgubmV4dFBlcmlvZCxcblx0XHRwcmV2UGVyaW9kOiBjdHgucHJldlBlcmlvZCxcblx0XHR0b2RheTogY3R4LnRvZGF5LFxuXHRcdG9wZW5FdmVudEZvcm06IGN0eC5vcGVuRXZlbnRGb3JtLFxuXHRcdGhlYWRlckNvbXBvbmVudDogY3R4LmhlYWRlckNvbXBvbmVudCxcblx0XHRoZWFkZXJDbGFzc05hbWU6IGN0eC5oZWFkZXJDbGFzc05hbWUsXG5cdFx0cmF3RXZlbnRzOiBjdHgucmF3RXZlbnRzLFxuXHRcdHQ6IGN0eC50LFxuXHRcdGhpZGVFeHBvcnRCdXR0b246IGN0eC5oaWRlRXhwb3J0QnV0dG9uLFxuXHR9KSlcblxuXHRjb25zdCBbbW9iaWxlTWVudU9wZW4sIHNldE1vYmlsZU1lbnVPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKVxuXG5cdGNvbnN0IGNsb3NlTW9iaWxlTWVudSA9ICgpID0+IHNldE1vYmlsZU1lbnVPcGVuKGZhbHNlKVxuXG5cdC8vIFdyYXAgYW55IGhhbmRsZXIgc28gaXQgYWxzbyBjbG9zZXMgdGhlIG1vYmlsZSBtZW51IGFmdGVyIGZpcmluZy5cblx0Y29uc3Qgd2l0aENsb3NlID1cblx0XHQ8QXJncyBleHRlbmRzIHVua25vd25bXT4oZm46ICguLi5hcmdzOiBBcmdzKSA9PiB2b2lkKSA9PlxuXHRcdCguLi5hcmdzOiBBcmdzKSA9PiB7XG5cdFx0XHRmbiguLi5hcmdzKVxuXHRcdFx0Y2xvc2VNb2JpbGVNZW51KClcblx0XHR9XG5cblx0Y29uc3QgaGFuZGxlRXhwb3J0ID0gKCkgPT4ge1xuXHRcdGNvbnN0IGZpbGVuYW1lID0gYGlsYW15LWNhbGVuZGFyLSR7bmV3IERhdGUoKS50b0lTT1N0cmluZygpLnNwbGl0KCdUJylbMF19Lmljc2Bcblx0XHRkb3dubG9hZElDYWxlbmRhcihyYXdFdmVudHMsIGZpbGVuYW1lLCAnaWxhbXkgQ2FsZW5kYXInKVxuXHRcdGNsb3NlTW9iaWxlTWVudSgpXG5cdH1cblxuXHRjb25zdCBOZXdFdmVudEJ1dHRvbiA9ICgpID0+IChcblx0XHQ8QnV0dG9uXG5cdFx0XHRjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMVwiXG5cdFx0XHRvbkNsaWNrPXsoKSA9PiBvcGVuRXZlbnRGb3JtKCl9XG5cdFx0XHRzaXplPVwic21cIlxuXHRcdFx0dmFyaWFudD1cImRlZmF1bHRcIlxuXHRcdD5cblx0XHRcdDxQbHVzIGNsYXNzTmFtZT1cImgtNCB3LTRcIiAvPlxuXHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwiaGlkZGVuIEA0eGw6aW5saW5lXCI+e3QoJ25ldycpfTwvc3Bhbj5cblx0XHQ8L0J1dHRvbj5cblx0KVxuXG5cdGNvbnN0IEV4cG9ydEJ1dHRvbiA9ICh7IGZ1bGxXaWR0aCA9IGZhbHNlIH06IHsgZnVsbFdpZHRoPzogYm9vbGVhbiB9KSA9PiAoXG5cdFx0PEJ1dHRvblxuXHRcdFx0Y2xhc3NOYW1lPXtjbignZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEnLCBmdWxsV2lkdGggJiYgJ3ctZnVsbCBnYXAtMicpfVxuXHRcdFx0b25DbGljaz17aGFuZGxlRXhwb3J0fVxuXHRcdFx0c2l6ZT1cInNtXCJcblx0XHRcdHZhcmlhbnQ9XCJvdXRsaW5lXCJcblx0XHQ+XG5cdFx0XHQ8RG93bmxvYWQgY2xhc3NOYW1lPVwiaC00IHctNFwiIC8+XG5cdFx0XHR7ZnVsbFdpZHRoID8gKFxuXHRcdFx0XHRgJHt0KCdleHBvcnQnKX0gQ2FsZW5kYXIgKC5pY3MpYFxuXHRcdFx0KSA6IChcblx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwiaGlkZGVuIEA0eGwvYmFzZS1oZWFkZXI6aW5saW5lXCI+e3QoJ2V4cG9ydCcpfTwvc3Bhbj5cblx0XHRcdCl9XG5cdFx0PC9CdXR0b24+XG5cdClcblxuXHRpZiAoaGVhZGVyQ29tcG9uZW50KSB7XG5cdFx0cmV0dXJuIGhlYWRlckNvbXBvbmVudFxuXHR9XG5cblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9XCJAY29udGFpbmVyL2Jhc2UtaGVhZGVyIHctZnVsbFwiXG5cdFx0XHRkYXRhLXRlc3RpZD1cImNhbGVuZGFyLWhlYWRlclwiXG5cdFx0PlxuXHRcdFx0PGRpdlxuXHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdCdmbGV4IGp1c3RpZnktY2VudGVyIEAyeGwvYmFzZS1oZWFkZXI6anVzdGlmeS1iZXR3ZWVuIGZsZXgtd3JhcCBpdGVtcy1jZW50ZXIgZ2FwLTInLFxuXHRcdFx0XHRcdGNsYXNzTmFtZSxcblx0XHRcdFx0XHRoZWFkZXJDbGFzc05hbWVcblx0XHRcdFx0KX1cblx0XHRcdD5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtd3JhcCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTEgQDJ4bC9iYXNlLWhlYWRlcjpqdXN0aWZ5LXN0YXJ0XCI+XG5cdFx0XHRcdFx0PENhbGVuZGFySWNvbiBjbGFzc05hbWU9XCJoLTUgdy01XCIgLz5cblx0XHRcdFx0XHQ8VGl0bGVDb250ZW50IC8+XG5cdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LXdyYXAganVzdGlmeS1zdGFydCBAeGwvYmFzZS1oZWFkZXI6anVzdGlmeS1jZW50ZXIgZ2FwLTEgQDR4bC9iYXNlLWhlYWRlcjpqdXN0aWZ5LWVuZCBvdmVyZmxvdy14LWF1dG9cIj5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImhpZGRlbiBAbWQvYmFzZS1oZWFkZXI6ZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1zdGFydCBnYXAtMVwiPlxuXHRcdFx0XHRcdFx0PFZpZXdDb250cm9sc1xuXHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJqdXN0aWZ5LWVuZFwiXG5cdFx0XHRcdFx0XHRcdGN1cnJlbnRWaWV3PXt2aWV3fVxuXHRcdFx0XHRcdFx0XHRvbkNoYW5nZT17c2V0Vmlld31cblx0XHRcdFx0XHRcdFx0b25OZXh0PXtuZXh0UGVyaW9kfVxuXHRcdFx0XHRcdFx0XHRvblByZXZpb3VzPXtwcmV2UGVyaW9kfVxuXHRcdFx0XHRcdFx0XHRvblRvZGF5PXt0b2RheX1cblx0XHRcdFx0XHRcdFx0dmFyaWFudD1cImRlZmF1bHRcIlxuXHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdDxOZXdFdmVudEJ1dHRvbiAvPlxuXHRcdFx0XHRcdFx0eyFoaWRlRXhwb3J0QnV0dG9uICYmIDxFeHBvcnRCdXR0b24gLz59XG5cdFx0XHRcdFx0PC9kaXY+XG5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktZW5kIGdhcC0xIEBtZC9iYXNlLWhlYWRlcjpoaWRkZW5cIj5cblx0XHRcdFx0XHRcdDxOZXdFdmVudEJ1dHRvbiAvPlxuXHRcdFx0XHRcdFx0PFBvcG92ZXIgb25PcGVuQ2hhbmdlPXtzZXRNb2JpbGVNZW51T3Blbn0gb3Blbj17bW9iaWxlTWVudU9wZW59PlxuXHRcdFx0XHRcdFx0XHQ8UG9wb3ZlclRyaWdnZXIgYXNDaGlsZD5cblx0XHRcdFx0XHRcdFx0XHQ8QnV0dG9uIHNpemU9XCJzbVwiIHZhcmlhbnQ9XCJvdXRsaW5lXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8TWVudSBjbGFzc05hbWU9XCJoLTQgdy00XCIgLz5cblx0XHRcdFx0XHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdFx0XHRcdFx0PC9Qb3BvdmVyVHJpZ2dlcj5cblx0XHRcdFx0XHRcdFx0PFBvcG92ZXJDb250ZW50IGFsaWduPVwiZW5kXCIgY2xhc3NOYW1lPVwidy1bMjQwcHhdIHAtMlwiPlxuXHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwic3BhY2UteS0yXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8Vmlld0NvbnRyb2xzXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGN1cnJlbnRWaWV3PXt2aWV3fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvbkNoYW5nZT17d2l0aENsb3NlKHNldFZpZXcpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvbk5leHQ9e3dpdGhDbG9zZShuZXh0UGVyaW9kKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0b25QcmV2aW91cz17d2l0aENsb3NlKHByZXZQZXJpb2QpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvblRvZGF5PXt3aXRoQ2xvc2UodG9kYXkpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YXJpYW50PVwiZ3JpZFwiXG5cdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdFx0eyFoaWRlRXhwb3J0QnV0dG9uICYmIChcblx0XHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJwdC0yIGJvcmRlci10XCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PEV4cG9ydEJ1dHRvbiBmdWxsV2lkdGggLz5cblx0XHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHQ8L1BvcG92ZXJDb250ZW50PlxuXHRcdFx0XHRcdFx0PC9Qb3BvdmVyPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdDwvZGl2PlxuXHRcdDwvZGl2PlxuXHQpXG59XG5cbmV4cG9ydCBkZWZhdWx0IEhlYWRlclxuIiwKICAgICJpbXBvcnQgeyBSUnVsZSB9IGZyb20gJ3JydWxlJ1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IGRheWpzLCB7IHR5cGUgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcblxuY29uc3QgQ1JMRiA9ICdcXHJcXG4nXG5cbmNvbnN0IFVUQ19WVElNRVpPTkUgPSBbXG5cdCdCRUdJTjpWVElNRVpPTkUnLFxuXHQnVFpJRDpVVEMnLFxuXHQnQkVHSU46U1RBTkRBUkQnLFxuXHQnRFRTVEFSVDoxOTcwMDEwMVQwMDAwMDAnLFxuXHQnVFpOQU1FOlVUQycsXG5cdCdUWk9GRlNFVEZST006KzAwMDAnLFxuXHQnVFpPRkZTRVRUTzorMDAwMCcsXG5cdCdFTkQ6U1RBTkRBUkQnLFxuXHQnRU5EOlZUSU1FWk9ORScsXG5dLmpvaW4oQ1JMRilcblxuY29uc3QgZXNjYXBlVGV4dCA9ICh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuXHRyZXR1cm4gdGV4dFxuXHRcdC5yZXBsYWNlQWxsKCdcXFxcJywgJ1xcXFxcXFxcJylcblx0XHQucmVwbGFjZUFsbCgnOycsICdcXFxcOycpXG5cdFx0LnJlcGxhY2VBbGwoJywnLCAnXFxcXCwnKVxuXHRcdC5yZXBsYWNlQWxsKCdcXG4nLCAnXFxcXG4nKVxuXHRcdC5yZXBsYWNlQWxsKCdcXHInLCAnJylcbn1cblxuY29uc3QgZm9ybWF0RGF0ZSA9IChkYXRlOiBEYXlqcywgaXNBbGxEYXkgPSBmYWxzZSk6IHN0cmluZyA9PiB7XG5cdHJldHVybiBpc0FsbERheVxuXHRcdD8gZGF0ZS5mb3JtYXQoJ1lZWVlNTUREJylcblx0XHQ6IGRhdGUudXRjKCkuZm9ybWF0KCdZWVlZTU1ERFtUXUhIbW1zc1taXScpXG59XG5cbmNvbnN0IGdldFVJRCA9IChldmVudDogQ2FsZW5kYXJFdmVudCk6IHN0cmluZyA9PiB7XG5cdHJldHVybiBldmVudC51aWQgfHwgYCR7ZXZlbnQuaWR9QGlsYW15LmNhbGVuZGFyYFxufVxuXG5jb25zdCBmb3JtYXRSUnVsZSA9IChycnVsZU9wdGlvbnM6IHVua25vd24pOiBzdHJpbmcgPT4ge1xuXHR0cnkge1xuXHRcdGNvbnN0IHJydWxlU3RyaW5nID0gbmV3IFJSdWxlKFxuXHRcdFx0cnJ1bGVPcHRpb25zIGFzIENvbnN0cnVjdG9yUGFyYW1ldGVyczx0eXBlb2YgUlJ1bGU+WzBdXG5cdFx0KS50b1N0cmluZygpXG5cdFx0cmV0dXJuIChcblx0XHRcdHJydWxlU3RyaW5nLnNwbGl0KCdcXG4nKS5maW5kKChsaW5lKSA9PiBsaW5lLnN0YXJ0c1dpdGgoJ1JSVUxFOicpKSB8fCAnJ1xuXHRcdClcblx0fSBjYXRjaCB7XG5cdFx0cmV0dXJuICcnXG5cdH1cbn1cblxuY29uc3QgY29udmVydEV2ZW50VG9WRXZlbnQgPSAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpOiBzdHJpbmcgPT4ge1xuXHRjb25zdCB0aW1lc3RhbXAgPSBkYXlqcygpLnV0YygpLmZvcm1hdCgnWVlZWU1NRERbVF1ISG1tc3NbWl0nKVxuXHRjb25zdCBkYXRlUGFyYW0gPSBldmVudC5hbGxEYXkgPyAnO1ZBTFVFPURBVEUnIDogJydcblx0Y29uc3QgcnJ1bGUgPSBldmVudC5ycnVsZSA/IGZvcm1hdFJSdWxlKGV2ZW50LnJydWxlKSA6ICcnXG5cblx0Y29uc3QgZXhkYXRlcyA9IGV2ZW50LmV4ZGF0ZXM/Lmxlbmd0aFxuXHRcdD8gZXZlbnQuZXhkYXRlcy5tYXAoKGQpID0+IGZvcm1hdERhdGUoZGF5anMoZCksIGV2ZW50LmFsbERheSkpLmpvaW4oJywnKVxuXHRcdDogbnVsbFxuXG5cdGNvbnN0IHJlY3VycmVuY2VJZCA9IGV2ZW50LnJlY3VycmVuY2VJZFxuXHRcdD8gZm9ybWF0RGF0ZShkYXlqcyhldmVudC5yZWN1cnJlbmNlSWQpLCBldmVudC5hbGxEYXkpXG5cdFx0OiBudWxsXG5cblx0Y29uc3QgbGluZXMgPSBbXG5cdFx0J0JFR0lOOlZFVkVOVCcsXG5cdFx0YFVJRDoke2dldFVJRChldmVudCl9YCxcblx0XHRgRFRTVEFSVCR7ZGF0ZVBhcmFtfToke2Zvcm1hdERhdGUoZXZlbnQuc3RhcnQsIGV2ZW50LmFsbERheSl9YCxcblx0XHRgRFRFTkQke2RhdGVQYXJhbX06JHtmb3JtYXREYXRlKGV2ZW50LmVuZCwgZXZlbnQuYWxsRGF5KX1gLFxuXHRcdGBTVU1NQVJZOiR7ZXNjYXBlVGV4dChldmVudC50aXRsZSl9YCxcblx0XHRldmVudC5kZXNjcmlwdGlvbiAmJiBgREVTQ1JJUFRJT046JHtlc2NhcGVUZXh0KGV2ZW50LmRlc2NyaXB0aW9uKX1gLFxuXHRcdGV2ZW50LmxvY2F0aW9uICYmIGBMT0NBVElPTjoke2VzY2FwZVRleHQoZXZlbnQubG9jYXRpb24pfWAsXG5cdFx0cnJ1bGUsXG5cdFx0ZXhkYXRlcyAmJiBgRVhEQVRFOiR7ZXhkYXRlc31gLFxuXHRcdHJlY3VycmVuY2VJZCAmJiBgUkVDVVJSRU5DRS1JRDoke3JlY3VycmVuY2VJZH1gLFxuXHRcdGBEVFNUQU1QOiR7dGltZXN0YW1wfWAsXG5cdFx0YENSRUFURUQ6JHt0aW1lc3RhbXB9YCxcblx0XHRgTEFTVC1NT0RJRklFRDoke3RpbWVzdGFtcH1gLFxuXHRcdCdTVEFUVVM6Q09ORklSTUVEJyxcblx0XHQnU0VRVUVOQ0U6MCcsXG5cdFx0J1RSQU5TUDpPUEFRVUUnLFxuXHRcdCdFTkQ6VkVWRU5UJyxcblx0XVxuXG5cdHJldHVybiBsaW5lcy5maWx0ZXIoQm9vbGVhbikuam9pbihDUkxGKVxufVxuXG5jb25zdCBmaWx0ZXJFdmVudHMgPSAoZXZlbnRzOiBDYWxlbmRhckV2ZW50W10pOiBDYWxlbmRhckV2ZW50W10gPT4ge1xuXHRjb25zdCBzZWVuVUlEcyA9IG5ldyBTZXQ8c3RyaW5nPigpXG5cblx0cmV0dXJuIGV2ZW50cy5maWx0ZXIoKGV2ZW50KSA9PiB7XG5cdFx0Y29uc3QgdWlkID0gZ2V0VUlEKGV2ZW50KVxuXHRcdGNvbnN0IGlzQmFzZVJlY3VycmluZyA9IGV2ZW50LnJydWxlICYmICFldmVudC5yZWN1cnJlbmNlSWRcblx0XHRjb25zdCBpc01vZGlmaWVkSW5zdGFuY2UgPSBldmVudC5yZWN1cnJlbmNlSWQgJiYgIWV2ZW50LnJydWxlXG5cblx0XHRpZiAoaXNCYXNlUmVjdXJyaW5nKSB7XG5cdFx0XHRzZWVuVUlEcy5hZGQodWlkKVxuXHRcdFx0cmV0dXJuIHRydWVcblx0XHR9XG5cdFx0aWYgKGlzTW9kaWZpZWRJbnN0YW5jZSkge1xuXHRcdFx0cmV0dXJuIHRydWVcblx0XHR9XG5cdFx0cmV0dXJuICFldmVudC5ycnVsZSAmJiAhZXZlbnQucmVjdXJyZW5jZUlkICYmICFzZWVuVUlEcy5oYXModWlkKVxuXHR9KVxufVxuXG5leHBvcnQgY29uc3QgZXhwb3J0VG9JQ2FsZW5kYXIgPSAoXG5cdGV2ZW50czogQ2FsZW5kYXJFdmVudFtdLFxuXHRjYWxlbmRhck5hbWUgPSAnaWxhbXkgQ2FsZW5kYXInXG4pOiBzdHJpbmcgPT4ge1xuXHRjb25zdCBuYW1lID0gZXNjYXBlVGV4dChjYWxlbmRhck5hbWUpXG5cdGNvbnN0IHZldmVudFN0cmluZ3MgPSBmaWx0ZXJFdmVudHMoZXZlbnRzKS5tYXAoY29udmVydEV2ZW50VG9WRXZlbnQpXG5cblx0cmV0dXJuIFtcblx0XHQnQkVHSU46VkNBTEVOREFSJyxcblx0XHQnVkVSU0lPTjoyLjAnLFxuXHRcdCdQUk9ESUQ6LS8vaWxhbXkvL2lsYW15IENhbGVuZGFyLy9FTicsXG5cdFx0J0NBTFNDQUxFOkdSRUdPUklBTicsXG5cdFx0J01FVEhPRDpQVUJMSVNIJyxcblx0XHRgWC1XUi1DQUxOQU1FOiR7bmFtZX1gLFxuXHRcdGBYLVdSLUNBTERFU0M6RXhwb3J0ZWQgZnJvbSAke25hbWV9YCxcblx0XHRVVENfVlRJTUVaT05FLFxuXHRcdC4uLnZldmVudFN0cmluZ3MsXG5cdFx0J0VORDpWQ0FMRU5EQVInLFxuXHRdLmpvaW4oQ1JMRilcbn1cblxuZXhwb3J0IGNvbnN0IGRvd25sb2FkSUNhbGVuZGFyID0gKFxuXHRldmVudHM6IENhbGVuZGFyRXZlbnRbXSxcblx0ZmlsZW5hbWUgPSAnY2FsZW5kYXIuaWNzJyxcblx0Y2FsZW5kYXJOYW1lID0gJ2lsYW15IENhbGVuZGFyJ1xuKTogdm9pZCA9PiB7XG5cdGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbZXhwb3J0VG9JQ2FsZW5kYXIoZXZlbnRzLCBjYWxlbmRhck5hbWUpXSwge1xuXHRcdHR5cGU6ICd0ZXh0L2NhbGVuZGFyO2NoYXJzZXQ9dXRmLTgnLFxuXHR9KVxuXHRjb25zdCB1cmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpXG5cdGNvbnN0IG5vcm1hbGl6ZWRGaWxlbmFtZSA9IGZpbGVuYW1lLmVuZHNXaXRoKCcuaWNzJylcblx0XHQ/IGZpbGVuYW1lXG5cdFx0OiBgJHtmaWxlbmFtZX0uaWNzYFxuXG5cdGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJylcblx0bGluay5ocmVmID0gdXJsXG5cdGxpbmsuZG93bmxvYWQgPSBub3JtYWxpemVkRmlsZW5hbWVcblxuXHRkb2N1bWVudC5ib2R5LmFwcGVuZChsaW5rKVxuXHRsaW5rLmNsaWNrKClcblx0bGluay5yZW1vdmUoKVxuXHRVUkwucmV2b2tlT2JqZWN0VVJMKHVybClcbn1cbiIsCiAgICAiaW1wb3J0IHsgQ2hldnJvbkRvd24gfSBmcm9tICdsdWNpZGUtcmVhY3QnXG5pbXBvcnQgeyB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQW5pbWF0ZWRTZWN0aW9uIH0gZnJvbSAnQC9jb21wb25lbnRzL2FuaW1hdGlvbnMvYW5pbWF0ZWQtc2VjdGlvbidcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9idXR0b24nXG5pbXBvcnQge1xuXHRQb3BvdmVyLFxuXHRQb3BvdmVyQ29udGVudCxcblx0UG9wb3ZlclRyaWdnZXIsXG59IGZyb20gJ0AvY29tcG9uZW50cy91aS9wb3BvdmVyJ1xuaW1wb3J0IHsgdXNlRGF0ZVRpbWVGb3JtYXR0ZXJzIH0gZnJvbSAnQC9ob29rcy91c2UtZGF0ZS10aW1lLWZvcm1hdHRlcnMnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSB7IERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgZ2V0RGF5S2V5LCBnZXRXZWVrRGF5cywgaXNUb2RheSB9IGZyb20gJ0AvbGliL3V0aWxzL2RhdGUtdXRpbHMnXG5pbXBvcnQgeyBrZXlzIH0gZnJvbSAnQC9saWIvdXRpbHMva2V5cydcblxuY29uc3QgVGl0bGVDb250ZW50ID0gKCkgPT4ge1xuXHRjb25zdCB7IGN1cnJlbnREYXRlLCB2aWV3LCBzZWxlY3REYXRlLCB0LCBmaXJzdERheU9mV2VlayB9ID1cblx0XHR1c2VTbWFydENhbGVuZGFyQ29udGV4dCgoY3R4KSA9PiAoe1xuXHRcdFx0Y3VycmVudERhdGU6IGN0eC5jdXJyZW50RGF0ZSxcblx0XHRcdHZpZXc6IGN0eC52aWV3LFxuXHRcdFx0c2VsZWN0RGF0ZTogY3R4LnNlbGVjdERhdGUsXG5cdFx0XHR0OiBjdHgudCxcblx0XHRcdGZpcnN0RGF5T2ZXZWVrOiBjdHguZmlyc3REYXlPZldlZWssXG5cdFx0fSkpXG5cblx0Y29uc3QgeyBmb3JtYXREYXRlUmFuZ2UgfSA9IHVzZURhdGVUaW1lRm9ybWF0dGVycygpXG5cblx0Y29uc3QgW29wZW5Qb3BvdmVyLCBzZXRPcGVuUG9wb3Zlcl0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKVxuXG5cdGNvbnN0IG1vbnRocyA9IEFycmF5LmZyb20oeyBsZW5ndGg6IDEyIH0sIChfLCBpbmRleCkgPT5cblx0XHRjdXJyZW50RGF0ZS5tb250aChpbmRleCkuZm9ybWF0KCdNTU1NJylcblx0KVxuXG5cdGNvbnN0IGN1cnJlbnRZZWFyID0gY3VycmVudERhdGUueWVhcigpXG5cdGNvbnN0IHllYXJzID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogMTEgfSwgKF8sIGkpID0+IGN1cnJlbnRZZWFyIC0gNSArIGkpXG5cdGNvbnN0IHdlZWtEYXlzID0gZ2V0V2Vla0RheXMoY3VycmVudERhdGUsIGZpcnN0RGF5T2ZXZWVrKVxuXG5cdGNvbnN0IGhhbmRsZVNlbGVjdERhdGUgPSAoZGF0ZTogRGF5anMpID0+IHtcblx0XHRzZWxlY3REYXRlKGRhdGUpXG5cdFx0c2V0T3BlblBvcG92ZXIobnVsbClcblx0fVxuXG5cdGNvbnN0IHJlbmRlck1vbnRoQ29udGVudCA9ICgpID0+IChcblx0XHQ8PlxuXHRcdFx0e21vbnRocy5tYXAoKG1vbnRoLCBpbmRleCkgPT4gKFxuXHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdCdqdXN0aWZ5LXN0YXJ0IGZvbnQtbm9ybWFsJyxcblx0XHRcdFx0XHRcdGN1cnJlbnREYXRlLm1vbnRoKCkgPT09IGluZGV4ICYmICdiZy1wcmltYXJ5LzEwJ1xuXHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0a2V5PXtpbmRleH1cblx0XHRcdFx0XHRvbkNsaWNrPXsoKSA9PiBoYW5kbGVTZWxlY3REYXRlKGN1cnJlbnREYXRlLm1vbnRoKGluZGV4KSl9XG5cdFx0XHRcdFx0dmFyaWFudD1cImdob3N0XCJcblx0XHRcdFx0PlxuXHRcdFx0XHRcdHttb250aH1cblx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHQpKX1cblx0XHQ8Lz5cblx0KVxuXG5cdGNvbnN0IHJlbmRlclllYXJDb250ZW50ID0gKCkgPT4gKFxuXHRcdDw+XG5cdFx0XHR7eWVhcnMubWFwKCh5ZWFyKSA9PiAoXG5cdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0J2p1c3RpZnktc3RhcnQgZm9udC1ub3JtYWwnLFxuXHRcdFx0XHRcdFx0Y3VycmVudERhdGUueWVhcigpID09PSB5ZWFyICYmICdiZy1wcmltYXJ5LzEwJ1xuXHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0a2V5PXt5ZWFyfVxuXHRcdFx0XHRcdG9uQ2xpY2s9eygpID0+IGhhbmRsZVNlbGVjdERhdGUoY3VycmVudERhdGUueWVhcih5ZWFyKSl9XG5cdFx0XHRcdFx0dmFyaWFudD1cImdob3N0XCJcblx0XHRcdFx0PlxuXHRcdFx0XHRcdHt5ZWFyfVxuXHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdCkpfVxuXHRcdDwvPlxuXHQpXG5cblx0Y29uc3QgcmVuZGVyV2Vla0NvbnRlbnQgPSAoKSA9PiAoXG5cdFx0PD5cblx0XHRcdHtBcnJheS5mcm9tKHsgbGVuZ3RoOiA3IH0sIChfLCBpKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHdlZWtEYXRlID0gY3VycmVudERhdGUuc3VidHJhY3QoMywgJ3dlZWsnKS5hZGQoaSwgJ3dlZWsnKVxuXHRcdFx0XHRjb25zdCBkYXlzID0gZ2V0V2Vla0RheXMod2Vla0RhdGUsIGZpcnN0RGF5T2ZXZWVrKVxuXHRcdFx0XHRjb25zdCBzdGFydCA9IGRheXNbMF1cblx0XHRcdFx0Y29uc3QgZW5kID0gZGF5c1s2XVxuXHRcdFx0XHRjb25zdCBpc0N1cnJlbnRXZWVrID0gd2Vla0RhdGUuaXNTYW1lKGN1cnJlbnREYXRlLCAnd2VlaycpXG5cblx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0XHQnanVzdGlmeS1zdGFydCBmb250LW5vcm1hbCcsXG5cdFx0XHRcdFx0XHRcdGlzQ3VycmVudFdlZWsgJiYgJ2JnLXByaW1hcnkvMTAnXG5cdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0a2V5PXtnZXREYXlLZXkoc3RhcnQpfVxuXHRcdFx0XHRcdFx0b25DbGljaz17KCkgPT4gaGFuZGxlU2VsZWN0RGF0ZShzdGFydCl9XG5cdFx0XHRcdFx0XHR2YXJpYW50PVwiZ2hvc3RcIlxuXHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCB3LWZ1bGwgaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlblwiPlxuXHRcdFx0XHRcdFx0XHQ8c3Bhbj57Zm9ybWF0RGF0ZVJhbmdlKHN0YXJ0LCBlbmQpfTwvc3Bhbj5cblx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0XHQpXG5cdFx0XHR9KX1cblx0XHQ8Lz5cblx0KVxuXG5cdGNvbnN0IHJlbmRlckRheUNvbnRlbnQgPSAoKSA9PiB7XG5cdFx0Y29uc3QgZmlyc3REYXkgPSBjdXJyZW50RGF0ZS5zdGFydE9mKCdtb250aCcpXG5cdFx0Y29uc3QgZGF5c0luTW9udGggPSBjdXJyZW50RGF0ZS5kYXlzSW5Nb250aCgpXG5cblx0XHRyZXR1cm4gKFxuXHRcdFx0PD5cblx0XHRcdFx0e0FycmF5LmZyb20oeyBsZW5ndGg6IGRheXNJbk1vbnRoIH0sIChfLCBpKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgZGF5ID0gZmlyc3REYXkuZGF0ZShpICsgMSlcblx0XHRcdFx0XHRjb25zdCBpc0N1cnJlbnREYXkgPSBkYXkuaXNTYW1lKGN1cnJlbnREYXRlLCAnZGF5Jylcblx0XHRcdFx0XHRjb25zdCB0b2RheSA9IGlzVG9kYXkoZGF5KVxuXG5cdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdFx0XHQnanVzdGlmeS1zdGFydCBmb250LW5vcm1hbCcsXG5cdFx0XHRcdFx0XHRcdFx0aXNDdXJyZW50RGF5ICYmICdiZy1wcmltYXJ5LzEwJ1xuXHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRrZXk9e2dldERheUtleShkYXkpfVxuXHRcdFx0XHRcdFx0XHRvbkNsaWNrPXsoKSA9PiBoYW5kbGVTZWxlY3REYXRlKGRheSl9XG5cdFx0XHRcdFx0XHRcdHZhcmlhbnQ9XCJnaG9zdFwiXG5cdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCB3LWZ1bGwgaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlblwiPlxuXHRcdFx0XHRcdFx0XHRcdDxzcGFuPntkYXkuZm9ybWF0KCdsbCcpfTwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0XHR7dG9kYXkgJiYgKFxuXHRcdFx0XHRcdFx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwiYmctcHJpbWFyeSB0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCByb3VuZGVkLXNtIHB4LTEhIHRleHQteHNcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0e3QoJ3RvZGF5Jyl9XG5cdFx0XHRcdFx0XHRcdFx0XHQ8L3NwYW4+XG5cdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdFx0XHQpXG5cdFx0XHRcdH0pfVxuXHRcdFx0PC8+XG5cdFx0KVxuXHR9XG5cblx0Y29uc3QgcG9wb3ZlcnMgPSBbXG5cdFx0e1xuXHRcdFx0aWQ6ICdtb250aCcsXG5cdFx0XHRoaWRkZW46IHZpZXcgPT09ICd5ZWFyJyxcblx0XHRcdHRpdGxlOiBjdXJyZW50RGF0ZS5mb3JtYXQoJ01NTU0nKSxcblx0XHRcdHJlbmRlcjogcmVuZGVyTW9udGhDb250ZW50LFxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0aWQ6ICd5ZWFyJyxcblx0XHRcdGhpZGRlbjogZmFsc2UsXG5cdFx0XHR0aXRsZTogY3VycmVudERhdGUuZm9ybWF0KCdZWVlZJyksXG5cdFx0XHRyZW5kZXI6IHJlbmRlclllYXJDb250ZW50LFxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0aWQ6ICd3ZWVrJyxcblx0XHRcdGhpZGRlbjogdmlldyAhPT0gJ3dlZWsnLFxuXHRcdFx0dGl0bGU6IGZvcm1hdERhdGVSYW5nZSh3ZWVrRGF5c1swXSwgd2Vla0RheXNbNl0pLFxuXHRcdFx0cmVuZGVyOiByZW5kZXJXZWVrQ29udGVudCxcblx0XHR9LFxuXHRcdHtcblx0XHRcdGlkOiAnZGF5Jyxcblx0XHRcdGhpZGRlbjogdmlldyAhPT0gJ2RheScsXG5cdFx0XHR0aXRsZTogY3VycmVudERhdGUuZm9ybWF0KCdkZGRkLCBEJyksXG5cdFx0XHRyZW5kZXI6IHJlbmRlckRheUNvbnRlbnQsXG5cdFx0fSxcblx0XVxuXG5cdHJldHVybiBwb3BvdmVyc1xuXHRcdC5maWx0ZXIoKHApID0+ICFwLmhpZGRlbilcblx0XHQubWFwKChwb3BvdmVyKSA9PiAoXG5cdFx0XHQ8UG9wb3ZlclxuXHRcdFx0XHRrZXk9e3BvcG92ZXIuaWR9XG5cdFx0XHRcdG9uT3BlbkNoYW5nZT17KG9wZW4pID0+IHNldE9wZW5Qb3BvdmVyKG9wZW4gPyBwb3BvdmVyLmlkIDogbnVsbCl9XG5cdFx0XHRcdG9wZW49e29wZW5Qb3BvdmVyID09PSBwb3BvdmVyLmlkfVxuXHRcdFx0PlxuXHRcdFx0XHQ8UG9wb3ZlclRyaWdnZXIgYXNDaGlsZD5cblx0XHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMSBweC0xISBmb250LXNlbWlib2xkXCJcblx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPVwiY2FsZW5kYXItbW9udGgtYnV0dG9uXCJcblx0XHRcdFx0XHRcdHZhcmlhbnQ9XCJnaG9zdFwiXG5cdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0PEFuaW1hdGVkU2VjdGlvblxuXHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMSBweC0xISBmb250LXNlbWlib2xkXCJcblx0XHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9XCJjYWxlbmRhci1tb250aC1idXR0b25cIlxuXHRcdFx0XHRcdFx0XHR0cmFuc2l0aW9uS2V5PXtrZXlzLmxpc3RLZXkocG9wb3Zlci5pZCwgZ2V0RGF5S2V5KGN1cnJlbnREYXRlKSl9XG5cdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdHtwb3BvdmVyLnRpdGxlfVxuXHRcdFx0XHRcdFx0PC9BbmltYXRlZFNlY3Rpb24+XG5cdFx0XHRcdFx0XHQ8Q2hldnJvbkRvd24gY2xhc3NOYW1lPVwiaC00IHctNFwiIC8+XG5cdFx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHRcdDwvUG9wb3ZlclRyaWdnZXI+XG5cdFx0XHRcdDxQb3BvdmVyQ29udGVudCBjbGFzc05hbWU9XCJ3LTQwIHAtMFwiPlxuXHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBtYXgtaC02MCBmbGV4LWNvbCBvdmVyZmxvdy1hdXRvXCI+XG5cdFx0XHRcdFx0XHR7cG9wb3Zlci5yZW5kZXIoKX1cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PC9Qb3BvdmVyQ29udGVudD5cblx0XHRcdDwvUG9wb3Zlcj5cblx0XHQpKVxufVxuXG5leHBvcnQgZGVmYXVsdCBUaXRsZUNvbnRlbnRcbiIsCiAgICAiaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUgeyBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuXG5leHBvcnQgZnVuY3Rpb24gdXNlRGF0ZVRpbWVGb3JtYXR0ZXJzKCkge1xuXHRjb25zdCB7IGN1cnJlbnRMb2NhbGUsIHRpbWV6b25lIH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgoY3R4KSA9PiAoe1xuXHRcdGN1cnJlbnRMb2NhbGU6IGN0eC5jdXJyZW50TG9jYWxlLFxuXHRcdHRpbWV6b25lOiBjdHgudGltZXpvbmUsXG5cdH0pKVxuXG5cdGNvbnN0IGZvcm1hdERhdGVSYW5nZSA9IChzdGFydDogRGF5anMsIGVuZDogRGF5anMpID0+XG5cdFx0bmV3IEludGwuRGF0ZVRpbWVGb3JtYXQoY3VycmVudExvY2FsZSwge1xuXHRcdFx0dGltZVpvbmU6IHRpbWV6b25lLFxuXHRcdFx0bW9udGg6ICdzaG9ydCcsXG5cdFx0XHRkYXk6ICdudW1lcmljJyxcblx0XHR9KS5mb3JtYXRSYW5nZShzdGFydC50b0RhdGUoKSwgZW5kLnRvRGF0ZSgpKVxuXG5cdHJldHVybiB7IGZvcm1hdERhdGVSYW5nZSB9XG59XG4iLAogICAgImltcG9ydCB7IENoZXZyb25MZWZ0LCBDaGV2cm9uUmlnaHQgfSBmcm9tICdsdWNpZGUtcmVhY3QnXG5pbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9idXR0b24nXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG50eXBlIFZpZXdUeXBlID0gJ2RheScgfCAnd2VlaycgfCAnbW9udGgnIHwgJ3llYXInXG5jb25zdCBBVkFJTEFCTEVfVklFV1M6IFZpZXdUeXBlW10gPSBbJ2RheScsICd3ZWVrJywgJ21vbnRoJywgJ3llYXInXVxuXG5pbnRlcmZhY2UgVmlld0NvbnRyb2xzUHJvcHMge1xuXHRjdXJyZW50VmlldzogVmlld1R5cGVcblx0b25DaGFuZ2U6ICh2aWV3OiBWaWV3VHlwZSkgPT4gdm9pZFxuXHRvblRvZGF5PzogKCkgPT4gdm9pZFxuXHRvbk5leHQ/OiAoKSA9PiB2b2lkXG5cdG9uUHJldmlvdXM/OiAoKSA9PiB2b2lkXG5cdHZhcmlhbnQ/OiAnZGVmYXVsdCcgfCAnZ3JpZCdcblx0c2l6ZT86ICdzbScgfCAnZGVmYXVsdCdcblx0Y2xhc3NOYW1lPzogc3RyaW5nXG59XG5cbmNvbnN0IFZpZXdDb250cm9sczogUmVhY3QuRkM8Vmlld0NvbnRyb2xzUHJvcHM+ID0gKHtcblx0Y3VycmVudFZpZXcsXG5cdG9uQ2hhbmdlLFxuXHR2YXJpYW50ID0gJ2RlZmF1bHQnLFxuXHRzaXplID0gJ3NtJyxcblx0Y2xhc3NOYW1lLFxuXHRvblRvZGF5LFxuXHRvbk5leHQsXG5cdG9uUHJldmlvdXMsXG59KSA9PiB7XG5cdGNvbnN0IHsgdCwgcmVzb3VyY2VzIH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgoY29udGV4dCkgPT4gKHtcblx0XHR0OiBjb250ZXh0LnQsXG5cdFx0cmVzb3VyY2VzOiBjb250ZXh0LnJlc291cmNlcyxcblx0fSkpXG5cdGNvbnN0IGlzR3JpZCA9IHZhcmlhbnQgPT09ICdncmlkJ1xuXHRjb25zdCBpc1Jlc291cmNlQ2FsZW5kYXIgPSByZXNvdXJjZXMgJiYgcmVzb3VyY2VzLmxlbmd0aCA+IDBcblxuXHQvLyBFeHRyYWN0IGNvbW1vbiBidXR0b24gY2xhc3NOYW1lIGxvZ2ljIHRvIGEgZnVuY3Rpb25cblx0Y29uc3QgZ2V0QnV0dG9uQ2xhc3NOYW1lID0gKHZpZXdUeXBlOiBWaWV3VHlwZSkgPT4ge1xuXHRcdHJldHVybiBjbihcblx0XHRcdC8vIEJhc2Ugd2lkdGggZm9yIGdyaWQgbGF5b3V0XG5cdFx0XHRpc0dyaWQgPyAndy1mdWxsJyA6ICcnLFxuXHRcdFx0Ly8gQWN0aXZlIHZpZXcgc3R5bGluZ1xuXHRcdFx0Y3VycmVudFZpZXcgPT09IHZpZXdUeXBlICYmICdiZy1wcmltYXJ5LzgwJ1xuXHRcdClcblx0fVxuXG5cdGNvbnN0IGdldEJ0blZhcmlhbnQgPSAodmlld1R5cGU6IFZpZXdUeXBlKSA9PiB7XG5cdFx0cmV0dXJuIGN1cnJlbnRWaWV3ID09PSB2aWV3VHlwZSA/ICdkZWZhdWx0JyA6ICdvdXRsaW5lJ1xuXHR9XG5cblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRpc0dyaWQgPyAnZ3JpZCBncmlkLWNvbHMtMiBnYXAtMicgOiAnZmxleCBnYXAtMScsXG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHQ+XG5cdFx0XHQ8QnV0dG9uIG9uQ2xpY2s9e29uUHJldmlvdXN9IHNpemU9e3NpemV9IHZhcmlhbnQ9XCJvdXRsaW5lXCI+XG5cdFx0XHRcdDxDaGV2cm9uTGVmdCBjbGFzc05hbWU9XCJoLTQgdy00XCIgLz5cblx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0PEJ1dHRvbiBvbkNsaWNrPXtvbk5leHR9IHNpemU9e3NpemV9IHZhcmlhbnQ9XCJvdXRsaW5lXCI+XG5cdFx0XHRcdDxDaGV2cm9uUmlnaHQgY2xhc3NOYW1lPVwiaC00IHctNFwiIC8+XG5cdFx0XHQ8L0J1dHRvbj5cblxuXHRcdFx0e0FWQUlMQUJMRV9WSUVXUy5tYXAoKHR5cGU6IFZpZXdUeXBlKSA9PiB7XG5cdFx0XHRcdGlmIChpc1Jlc291cmNlQ2FsZW5kYXIgJiYgdHlwZSA9PT0gJ3llYXInKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG51bGxcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtnZXRCdXR0b25DbGFzc05hbWUodHlwZSl9XG5cdFx0XHRcdFx0XHRrZXk9e3R5cGV9XG5cdFx0XHRcdFx0XHRvbkNsaWNrPXsoKSA9PiBvbkNoYW5nZSh0eXBlKX1cblx0XHRcdFx0XHRcdHNpemU9e3NpemV9XG5cdFx0XHRcdFx0XHR2YXJpYW50PXtnZXRCdG5WYXJpYW50KHR5cGUpfVxuXHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdHt0KHR5cGUpfVxuXHRcdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0XHQpXG5cdFx0XHR9KX1cblxuXHRcdFx0PEJ1dHRvbiBvbkNsaWNrPXtvblRvZGF5fSBzaXplPXtzaXplfSB2YXJpYW50PVwib3V0bGluZVwiPlxuXHRcdFx0XHR7dCgndG9kYXknKX1cblx0XHRcdDwvQnV0dG9uPlxuXHRcdDwvZGl2PlxuXHQpXG59XG5cbmV4cG9ydCBkZWZhdWx0IFZpZXdDb250cm9sc1xuIiwKICAgICJpbXBvcnQgeyBtZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBIb3Jpem9udGFsR3JpZFJvdyB9IGZyb20gJ0AvY29tcG9uZW50cy9ob3Jpem9udGFsLWdyaWQvaG9yaXpvbnRhbC1ncmlkLXJvdydcbmltcG9ydCB0eXBlIHsgUmVzb3VyY2UgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IGtleXMgfSBmcm9tICdAL2xpYi91dGlscy9rZXlzJ1xuaW1wb3J0IHsgQWxsRGF5Q2VsbCB9IGZyb20gJy4vYWxsLWRheS1jZWxsJ1xuXG5pbnRlcmZhY2UgQWxsRGF5Um93UHJvcHMge1xuXHRkYXlzOiBEYXlqc1tdXG5cdGNsYXNzZXM/OiB7IHJvdz86IHN0cmluZzsgY2VsbD86IHN0cmluZzsgc3BhY2VyPzogc3RyaW5nIH1cblx0cmVzb3VyY2U/OiBSZXNvdXJjZVxuXHRzaG93U3BhY2VyPzogYm9vbGVhblxufVxuXG5jb25zdCBOb01lbW9BbGxEYXlSb3c6IFJlYWN0LkZDPEFsbERheVJvd1Byb3BzPiA9ICh7XG5cdGRheXMsXG5cdGNsYXNzZXMsXG5cdHJlc291cmNlLFxuXHRzaG93U3BhY2VyID0gdHJ1ZSxcbn0pID0+IHtcblx0Y29uc3QgY29sdW1ucyA9IGRheXMubWFwKChkYXksIGluZGV4KSA9PiAoe1xuXHRcdGlkOiBrZXlzLmNvbC5hbGxEYXkoZGF5LCBpbmRleCksXG5cdFx0ZGF5LFxuXHRcdGdyaWRUeXBlOiAnZGF5JyBhcyBjb25zdCxcblx0XHRjbGFzc05hbWU6IGNuKCdoLWZ1bGwgbWluLWgtMTIgYm9yZGVyLXIgbGFzdDpib3JkZXItci0wJywgY2xhc3Nlcz8uY2VsbCksXG5cdH0pKVxuXG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbignZmxleCB3LWZ1bGwgYmctYmFja2dyb3VuZCcsIGNsYXNzZXM/LnJvdyl9XG5cdFx0XHRkYXRhLXRlc3RpZD1cImFsbC1kYXktcm93XCJcblx0XHQ+XG5cdFx0XHR7LyogVGltZSBjb2wgc3BhY2VyICovfVxuXHRcdFx0e3Nob3dTcGFjZXIgJiYgPEFsbERheUNlbGwgY2xhc3NOYW1lPXtjbGFzc2VzPy5zcGFjZXJ9IC8+fVxuXG5cdFx0XHR7LyogRGF5IGFsbCBkYXkgY2VsbCAqL31cblx0XHRcdDxIb3Jpem9udGFsR3JpZFJvd1xuXHRcdFx0XHRhbGxEYXlcblx0XHRcdFx0Y2xhc3NOYW1lPVwiZmxleC0xIG1pbi1oLWZpdCBib3JkZXItYlwiXG5cdFx0XHRcdGNvbHVtbnM9e2NvbHVtbnN9XG5cdFx0XHRcdGRheU51bWJlckhlaWdodD17MH1cblx0XHRcdFx0Z3JpZFR5cGU9XCJkYXlcIlxuXHRcdFx0XHRpZD17a2V5cy5hbGxEYXlSb3cocmVzb3VyY2U/LmlkKX1cblx0XHRcdFx0aXNMYXN0Um93XG5cdFx0XHRcdHJlc291cmNlPXtyZXNvdXJjZX1cblx0XHRcdFx0dmFyaWFudD1cInJlZ3VsYXJcIlxuXHRcdFx0Lz5cblx0XHQ8L2Rpdj5cblx0KVxufVxuXG5leHBvcnQgY29uc3QgQWxsRGF5Um93ID0gbWVtbyhOb01lbW9BbGxEYXlSb3cpXG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgbWVtbywgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlUHJvY2Vzc2VkV2Vla0V2ZW50cyB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvaG9va3MvdXNlUHJvY2Vzc2VkV2Vla0V2ZW50cydcbmltcG9ydCB0eXBlIHsgUmVzb3VyY2UgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL3R5cGVzJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUgeyBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IGdldERheUtleSB9IGZyb20gJ0AvbGliL3V0aWxzL2RhdGUtdXRpbHMnXG5pbXBvcnQgeyBrZXlzIH0gZnJvbSAnQC9saWIvdXRpbHMva2V5cydcbmltcG9ydCB7IEdyaWRDZWxsIH0gZnJvbSAnLi4vZ3JpZC1jZWxsJ1xuaW1wb3J0IHsgUmVzb3VyY2VDZWxsIH0gZnJvbSAnLi4vcmVzb3VyY2UtY2VsbCdcbmltcG9ydCB7IEhvcml6b250YWxHcmlkRXZlbnRzTGF5ZXIgfSBmcm9tICcuL2hvcml6b250YWwtZ3JpZC1ldmVudHMtbGF5ZXInXG5cbmludGVyZmFjZSBIb3Jpem9udGFsR3JpZENvbHVtbiB7XG5cdGlkOiBzdHJpbmdcblx0ZGF5PzogRGF5anNcblx0ZGF5cz86IERheWpzW11cblx0Z3JpZFR5cGU6ICdkYXknIHwgJ2hvdXInXG5cdGNsYXNzTmFtZT86IHN0cmluZ1xuXHRyZW5kZXJDZWxsPzogKHJvdzogSG9yaXpvbnRhbEdyaWRSb3dQcm9wcykgPT4gUmVhY3QuUmVhY3ROb2RlXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSG9yaXpvbnRhbEdyaWRSb3dQcm9wcyB7XG5cdGlkOiBzdHJpbmcgfCBudW1iZXJcblx0cmVzb3VyY2U/OiBSZXNvdXJjZVxuXHRncmlkVHlwZT86ICdkYXknIHwgJ2hvdXInXG5cdHZhcmlhbnQ/OiAncmVndWxhcicgfCAncmVzb3VyY2UnXG5cdGRheU51bWJlckhlaWdodD86IG51bWJlclxuXHRjbGFzc05hbWU/OiBzdHJpbmdcblx0Y29sdW1ucz86IEhvcml6b250YWxHcmlkQ29sdW1uW11cblx0YWxsRGF5PzogYm9vbGVhblxuXHRzaG93RGF5TnVtYmVyPzogYm9vbGVhblxuXHRpc0xhc3RSb3c/OiBib29sZWFuXG59XG5cbmNvbnN0IE5vTWVtb0hvcml6b250YWxHcmlkUm93OiBSZWFjdC5GQzxIb3Jpem9udGFsR3JpZFJvd1Byb3BzPiA9ICh7XG5cdGlkLFxuXHRyZXNvdXJjZSxcblx0Z3JpZFR5cGUgPSAnZGF5Jyxcblx0dmFyaWFudCA9ICdyZXNvdXJjZScsXG5cdGRheU51bWJlckhlaWdodCxcblx0Y2xhc3NOYW1lLFxuXHRjb2x1bW5zID0gW10sXG5cdGFsbERheSxcblx0c2hvd0RheU51bWJlciA9IGZhbHNlLFxuXHRpc0xhc3RSb3cgPSBmYWxzZSxcbn0pID0+IHtcblx0Y29uc3QgeyByZW5kZXJSZXNvdXJjZSB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXG5cdGNvbnN0IGlzUmVzb3VyY2VDYWxlbmRhciA9IHZhcmlhbnQgPT09ICdyZXNvdXJjZSdcblx0Ly8gRmxhdCBjb2x1bW5zOiBlYWNoIGNvbHVtbiBoYXMgY29sLmRheSAocmVndWxhciBtb250aCwgcmVzb3VyY2UgbW9udGgpXG5cdC8vIEdyb3VwZWQgY29sdW1uczogZWFjaCBjb2x1bW4gaGFzIGNvbC5kYXlzW10gKHJlc291cmNlIHdlZWsgaG9yaXpvbnRhbClcblx0Y29uc3QgaXNHcm91cGVkID0gY29sdW1ucy5zb21lKChjb2wpID0+IGNvbC5kYXlzKVxuXG5cdC8vIENvbGxlY3QgYWxsIGRheXMgZm9yIGZsYXQgcm93c1xuXHRjb25zdCBmbGF0RGF5cyA9IHVzZU1lbW8oKCkgPT4ge1xuXHRcdGlmIChpc0dyb3VwZWQpIHJldHVybiBbXVxuXHRcdHJldHVybiBjb2x1bW5zLm1hcCgoY29sKSA9PiBjb2wuZGF5KS5maWx0ZXIoKGQpOiBkIGlzIERheWpzID0+IEJvb2xlYW4oZCkpXG5cdH0sIFtjb2x1bW5zLCBpc0dyb3VwZWRdKVxuXG5cdC8vIENvbXB1dGUgZXZlbnRzIG9uY2UgYXQgdGhlIHJvdyBsZXZlbCDigJQgc2hhcmVkIGJldHdlZW4gR3JpZENlbGxzIGFuZCBldmVudHMgbGF5ZXJcblx0Y29uc3QgeyBwb3NpdGlvbmVkRXZlbnRzLCBkYXlFdmVudHNNYXAgfSA9IHVzZVByb2Nlc3NlZFdlZWtFdmVudHMoe1xuXHRcdGRheXM6IGZsYXREYXlzLFxuXHRcdGdyaWRUeXBlLFxuXHRcdHJlc291cmNlSWQ6IHJlc291cmNlPy5pZCxcblx0XHRkYXlOdW1iZXJIZWlnaHQsXG5cdFx0YWxsRGF5LFxuXHR9KVxuXG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbignZmxleCBmbGV4LTEgcmVsYXRpdmUgbWluLXctMCcsIGNsYXNzTmFtZSl9XG5cdFx0XHRkYXRhLXRlc3RpZD17a2V5cy5jb250YWluZXIuaG9yaXpvbnRhbC5yb3coaWQpfVxuXHRcdD5cblx0XHRcdHtpc1Jlc291cmNlQ2FsZW5kYXIgJiYgcmVzb3VyY2UgJiYgKFxuXHRcdFx0XHQ8UmVzb3VyY2VDZWxsXG5cdFx0XHRcdFx0Y2xhc3NOYW1lPVwidy0yMCBzbTp3LTQwIHN0aWNreSBsZWZ0LTAgYmctYmFja2dyb3VuZCB6LTIwIGgtZnVsbFwiXG5cdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e2tleXMuY29udGFpbmVyLmhvcml6b250YWwucm93TGFiZWwocmVzb3VyY2UuaWQpfVxuXHRcdFx0XHRcdHJlc291cmNlPXtyZXNvdXJjZX1cblx0XHRcdFx0PlxuXHRcdFx0XHRcdHtyZW5kZXJSZXNvdXJjZSA/IChcblx0XHRcdFx0XHRcdHJlbmRlclJlc291cmNlKHJlc291cmNlKVxuXHRcdFx0XHRcdCkgOiAoXG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cIndyYXAtYnJlYWstd29yZCB0ZXh0LXNtXCI+e3Jlc291cmNlLnRpdGxlfTwvZGl2PlxuXHRcdFx0XHRcdCl9XG5cdFx0XHRcdDwvUmVzb3VyY2VDZWxsPlxuXHRcdFx0KX1cblx0XHRcdDxkaXYgY2xhc3NOYW1lPVwicmVsYXRpdmUgZmxleC0xIGZsZXggbWluLXctMFwiPlxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggdy1mdWxsIG1pbi13LTBcIj5cblx0XHRcdFx0XHR7Y29sdW1ucy5tYXAoKGNvbCwgaW5kZXgpID0+IHtcblx0XHRcdFx0XHRcdGlmIChjb2wuZGF5cykge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHRcdDxHcm91cGVkQ29sdW1uXG5cdFx0XHRcdFx0XHRcdFx0XHRhbGxEYXk9e2FsbERheX1cblx0XHRcdFx0XHRcdFx0XHRcdGNvbD17Y29sfVxuXHRcdFx0XHRcdFx0XHRcdFx0ZGF5TnVtYmVySGVpZ2h0PXtkYXlOdW1iZXJIZWlnaHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRncmlkVHlwZT17Z3JpZFR5cGV9XG5cdFx0XHRcdFx0XHRcdFx0XHRpZD17aWR9XG5cdFx0XHRcdFx0XHRcdFx0XHRpc0xhc3RDb2w9e2luZGV4ID09PSBjb2x1bW5zLmxlbmd0aCAtIDF9XG5cdFx0XHRcdFx0XHRcdFx0XHRpc0xhc3RSb3c9e2lzTGFzdFJvd31cblx0XHRcdFx0XHRcdFx0XHRcdGtleT17Y29sLmlkfVxuXHRcdFx0XHRcdFx0XHRcdFx0cmVzb3VyY2U9e3Jlc291cmNlfVxuXHRcdFx0XHRcdFx0XHRcdFx0cmVzb3VyY2VJZD17cmVzb3VyY2U/LmlkfVxuXHRcdFx0XHRcdFx0XHRcdFx0c2hvd0RheU51bWJlcj17c2hvd0RheU51bWJlcn1cblx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdHJldHVybiBjb2wuZGF5ID8gKFxuXHRcdFx0XHRcdFx0XHQ8R3JpZENlbGxcblx0XHRcdFx0XHRcdFx0XHRhbGxEYXk9e2FsbERheX1cblx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0XHRcdFx0J2ZsZXgtMSB3LTIwJyxcblx0XHRcdFx0XHRcdFx0XHRcdGlzTGFzdFJvdyAmJiAnYm9yZGVyLWItMCcsXG5cdFx0XHRcdFx0XHRcdFx0XHRjb2wuY2xhc3NOYW1lXG5cdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0XHRkYXk9e2NvbC5kYXl9XG5cdFx0XHRcdFx0XHRcdFx0Z3JpZFR5cGU9e2dyaWRUeXBlfVxuXHRcdFx0XHRcdFx0XHRcdGhvdXI9e2dyaWRUeXBlID09PSAnaG91cicgPyBjb2wuZGF5LmhvdXIoKSA6IHVuZGVmaW5lZH1cblx0XHRcdFx0XHRcdFx0XHRrZXk9e2NvbC5kYXkudG9JU09TdHJpbmcoKX1cblx0XHRcdFx0XHRcdFx0XHRwcmVjb21wdXRlZEV2ZW50cz17ZGF5RXZlbnRzTWFwLmdldChnZXREYXlLZXkoY29sLmRheSkpfVxuXHRcdFx0XHRcdFx0XHRcdHJlc291cmNlSWQ9e3Jlc291cmNlPy5pZH1cblx0XHRcdFx0XHRcdFx0XHRzaG93RGF5TnVtYmVyPXtzaG93RGF5TnVtYmVyfVxuXHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0KSA6IG51bGxcblx0XHRcdFx0XHR9KX1cblx0XHRcdFx0PC9kaXY+XG5cblx0XHRcdFx0ey8qIEV2ZW50cyBsYXllciBwb3NpdGlvbmVkIGFic29sdXRlbHkgb3ZlciB0aGUgcm93ICovfVxuXHRcdFx0XHR7IWlzR3JvdXBlZCAmJiAoXG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJhYnNvbHV0ZSBpbnNldC0wIHotMTAgcG9pbnRlci1ldmVudHMtbm9uZVwiPlxuXHRcdFx0XHRcdFx0PEhvcml6b250YWxHcmlkRXZlbnRzTGF5ZXJcblx0XHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e2tleXMuY29udGFpbmVyLmV2ZW50c0xheWVyKCdob3Jpem9udGFsJywgaWQpfVxuXHRcdFx0XHRcdFx0XHRkYXlzPXtmbGF0RGF5c31cblx0XHRcdFx0XHRcdFx0Z3JpZFR5cGU9e2dyaWRUeXBlfVxuXHRcdFx0XHRcdFx0XHRwb3NpdGlvbmVkRXZlbnRzPXtwb3NpdGlvbmVkRXZlbnRzfVxuXHRcdFx0XHRcdFx0XHRyZXNvdXJjZT17cmVzb3VyY2V9XG5cdFx0XHRcdFx0XHRcdHJlc291cmNlSWQ9e3Jlc291cmNlPy5pZH1cblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdCl9XG5cdFx0XHQ8L2Rpdj5cblx0XHQ8L2Rpdj5cblx0KVxufVxuXG4vKipcbiAqIEEgY29sdW1uIGNvbnRhaW5pbmcgbXVsdGlwbGUgZGF5cyAoZS5nLiwgb25lIGRheSdzIGhvdXJseSBzbG90cyBpbiByZXNvdXJjZSB3ZWVrIHZpZXcpLlxuICogTmVlZHMgaXRzIG93biB1c2VQcm9jZXNzZWRXZWVrRXZlbnRzIGNhbGwgc2luY2UgZXZlbnRzIGFyZSBzY29wZWQgdG8gdGhpcyBkYXkgZ3JvdXAuXG4gKi9cbmNvbnN0IEdyb3VwZWRDb2x1bW4gPSBtZW1vKFxuXHQoe1xuXHRcdGNvbCxcblx0XHRncmlkVHlwZSA9ICdkYXknLFxuXHRcdGFsbERheSxcblx0XHRyZXNvdXJjZSxcblx0XHRyZXNvdXJjZUlkLFxuXHRcdGRheU51bWJlckhlaWdodCxcblx0XHRzaG93RGF5TnVtYmVyLFxuXHRcdGlzTGFzdFJvdyxcblx0XHRpc0xhc3RDb2wsXG5cdFx0aWQsXG5cdH06IHtcblx0XHRjb2w6IEhvcml6b250YWxHcmlkQ29sdW1uXG5cdFx0Z3JpZFR5cGU/OiAnZGF5JyB8ICdob3VyJ1xuXHRcdGFsbERheT86IGJvb2xlYW5cblx0XHRyZXNvdXJjZT86IFJlc291cmNlXG5cdFx0cmVzb3VyY2VJZD86IHN0cmluZyB8IG51bWJlclxuXHRcdGRheU51bWJlckhlaWdodD86IG51bWJlclxuXHRcdHNob3dEYXlOdW1iZXI6IGJvb2xlYW5cblx0XHRpc0xhc3RSb3c6IGJvb2xlYW5cblx0XHRpc0xhc3RDb2w6IGJvb2xlYW5cblx0XHRpZDogc3RyaW5nIHwgbnVtYmVyXG5cdH0pID0+IHtcblx0XHRjb25zdCBkYXlzID0gY29sLmRheXMgPz8gW11cblx0XHRjb25zdCB7IHBvc2l0aW9uZWRFdmVudHMgfSA9IHVzZVByb2Nlc3NlZFdlZWtFdmVudHMoe1xuXHRcdFx0ZGF5cyxcblx0XHRcdGdyaWRUeXBlLFxuXHRcdFx0cmVzb3VyY2VJZCxcblx0XHRcdGRheU51bWJlckhlaWdodCxcblx0XHRcdGFsbERheSxcblx0XHR9KVxuXG5cdFx0cmV0dXJuIChcblx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCByZWxhdGl2ZSB3LWZ1bGxcIj5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IHctZnVsbFwiPlxuXHRcdFx0XHRcdHtkYXlzLm1hcCgoZGF5KSA9PiAoXG5cdFx0XHRcdFx0XHQ8R3JpZENlbGxcblx0XHRcdFx0XHRcdFx0YWxsRGF5PXthbGxEYXl9XG5cdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHRcdFx0J2ZsZXgtMSB3LTIwJyxcblx0XHRcdFx0XHRcdFx0XHRpc0xhc3RSb3cgJiYgJ2JvcmRlci1iLTAnLFxuXHRcdFx0XHRcdFx0XHRcdCFpc0xhc3RDb2wgJiYgJ2JvcmRlci1yIScsXG5cdFx0XHRcdFx0XHRcdFx0Y29sLmNsYXNzTmFtZVxuXHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRkYXk9e2RheX1cblx0XHRcdFx0XHRcdFx0Z3JpZFR5cGU9e2dyaWRUeXBlfVxuXHRcdFx0XHRcdFx0XHRob3VyPXtncmlkVHlwZSA9PT0gJ2hvdXInID8gZGF5LmhvdXIoKSA6IHVuZGVmaW5lZH1cblx0XHRcdFx0XHRcdFx0a2V5PXtkYXkudG9JU09TdHJpbmcoKX1cblx0XHRcdFx0XHRcdFx0cmVzb3VyY2VJZD17cmVzb3VyY2VJZH1cblx0XHRcdFx0XHRcdFx0c2hvd0RheU51bWJlcj17c2hvd0RheU51bWJlcn1cblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0KSl9XG5cdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiYWJzb2x1dGUgaW5zZXQtMCB6LTEwIHBvaW50ZXItZXZlbnRzLW5vbmVcIj5cblx0XHRcdFx0XHQ8SG9yaXpvbnRhbEdyaWRFdmVudHNMYXllclxuXHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e2tleXMuY29udGFpbmVyLmV2ZW50c0xheWVyKCdob3Jpem9udGFsJywgaWQpfVxuXHRcdFx0XHRcdFx0ZGF5cz17ZGF5c31cblx0XHRcdFx0XHRcdGdyaWRUeXBlPXtncmlkVHlwZX1cblx0XHRcdFx0XHRcdHBvc2l0aW9uZWRFdmVudHM9e3Bvc2l0aW9uZWRFdmVudHN9XG5cdFx0XHRcdFx0XHRyZXNvdXJjZT17cmVzb3VyY2V9XG5cdFx0XHRcdFx0XHRyZXNvdXJjZUlkPXtyZXNvdXJjZUlkfVxuXHRcdFx0XHRcdC8+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0PC9kaXY+XG5cdFx0KVxuXHR9XG4pXG5cbmV4cG9ydCBjb25zdCBIb3Jpem9udGFsR3JpZFJvdyA9IG1lbW8oTm9NZW1vSG9yaXpvbnRhbEdyaWRSb3cpXG4iLAogICAgImltcG9ydCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB0eXBlIHsgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGdldERheUtleSB9IGZyb20gJ0AvbGliL3V0aWxzL2RhdGUtdXRpbHMnXG5pbXBvcnQge1xuXHRldmVudE92ZXJsYXBzUmFuZ2UsXG5cdGZpbHRlckV2ZW50c0J5UmVzb3VyY2UsXG59IGZyb20gJ0AvbGliL3V0aWxzL2V2ZW50LXV0aWxzJ1xuaW1wb3J0IHtcblx0Z2V0UG9zaXRpb25lZEV2ZW50cyxcblx0dHlwZSBQb3NpdGlvbmVkRXZlbnQsXG59IGZyb20gJ0AvbGliL3V0aWxzL3Bvc2l0aW9uLXdlZWstZXZlbnRzJ1xuXG5pbnRlcmZhY2UgVXNlUHJvY2Vzc2VkV2Vla0V2ZW50c1Byb3BzIHtcblx0ZGF5czogRGF5anNbXVxuXHRhbGxEYXk/OiBib29sZWFuXG5cdGRheU51bWJlckhlaWdodD86IG51bWJlclxuXHRyZXNvdXJjZUlkPzogc3RyaW5nIHwgbnVtYmVyXG5cdGdyaWRUeXBlPzogJ2RheScgfCAnaG91cidcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQcm9jZXNzZWRXZWVrRXZlbnRzUmVzdWx0IHtcblx0cG9zaXRpb25lZEV2ZW50czogUG9zaXRpb25lZEV2ZW50W11cblx0ZGF5RXZlbnRzTWFwOiBNYXA8c3RyaW5nLCBDYWxlbmRhckV2ZW50W10+XG59XG5cbmV4cG9ydCBjb25zdCB1c2VQcm9jZXNzZWRXZWVrRXZlbnRzID0gKHtcblx0ZGF5cyxcblx0YWxsRGF5LFxuXHRkYXlOdW1iZXJIZWlnaHQsXG5cdHJlc291cmNlSWQsXG5cdGdyaWRUeXBlLFxufTogVXNlUHJvY2Vzc2VkV2Vla0V2ZW50c1Byb3BzKTogUHJvY2Vzc2VkV2Vla0V2ZW50c1Jlc3VsdCA9PiB7XG5cdGNvbnN0IHtcblx0XHRnZXRFdmVudHNGb3JEYXRlUmFuZ2UsXG5cdFx0ZGF5TWF4RXZlbnRzLFxuXHRcdGV2ZW50U3BhY2luZyxcblx0XHRldmVudEhlaWdodCxcblx0XHRnZXRFdmVudHNGb3JSZXNvdXJjZSxcblx0fSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblxuXHRjb25zdCBmaXJzdCA9IGRheXMuYXQoMClcblx0Y29uc3QgbGFzdCA9IGRheXMuYXQoLTEpXG5cdGNvbnN0IHdlZWtTdGFydCA9IGZpcnN0Py5zdGFydE9mKCdkYXknKVxuXHRjb25zdCB3ZWVrRW5kID0gbGFzdD8uZW5kT2YoJ2RheScpXG5cblx0Y29uc3QgZXZlbnRzID0gdXNlTWVtbygoKSA9PiB7XG5cdFx0aWYgKCF3ZWVrU3RhcnQgfHwgIXdlZWtFbmQpIHJldHVybiBbXVxuXG5cdFx0bGV0IHdlZWtFdmVudHMgPSBnZXRFdmVudHNGb3JEYXRlUmFuZ2Uod2Vla1N0YXJ0LCB3ZWVrRW5kKVxuXHRcdGlmIChyZXNvdXJjZUlkKSB7XG5cdFx0XHR3ZWVrRXZlbnRzID0gZmlsdGVyRXZlbnRzQnlSZXNvdXJjZShcblx0XHRcdFx0d2Vla0V2ZW50cyxcblx0XHRcdFx0Z2V0RXZlbnRzRm9yUmVzb3VyY2UocmVzb3VyY2VJZClcblx0XHRcdClcblx0XHR9XG5cblx0XHRpZiAoYWxsRGF5KSB7XG5cdFx0XHR3ZWVrRXZlbnRzID0gd2Vla0V2ZW50cy5maWx0ZXIoKGUpID0+ICEhZS5hbGxEYXkgPT09IGFsbERheSlcblx0XHR9XG5cblx0XHRyZXR1cm4gd2Vla0V2ZW50c1xuXHR9LCBbXG5cdFx0Z2V0RXZlbnRzRm9yRGF0ZVJhbmdlLFxuXHRcdGdldEV2ZW50c0ZvclJlc291cmNlLFxuXHRcdHdlZWtTdGFydCxcblx0XHR3ZWVrRW5kLFxuXHRcdHJlc291cmNlSWQsXG5cdFx0YWxsRGF5LFxuXHRdKVxuXG5cdGNvbnN0IGRheUV2ZW50c01hcCA9IHVzZU1lbW8oKCkgPT4ge1xuXHRcdGNvbnN0IG1hcCA9IG5ldyBNYXA8c3RyaW5nLCBDYWxlbmRhckV2ZW50W10+KClcblx0XHRmb3IgKGNvbnN0IGRheSBvZiBkYXlzKSB7XG5cdFx0XHRjb25zdCBrZXkgPSBnZXREYXlLZXkoZGF5KVxuXHRcdFx0Y29uc3QgZGF5U3RhcnQgPSBkYXkuc3RhcnRPZignZGF5Jylcblx0XHRcdGNvbnN0IGRheUVuZCA9IGRheS5lbmRPZignZGF5Jylcblx0XHRcdGNvbnN0IGRheUV2ZW50cyA9IGV2ZW50cy5maWx0ZXIoKGUpID0+XG5cdFx0XHRcdGV2ZW50T3ZlcmxhcHNSYW5nZShlLCBkYXlTdGFydCwgZGF5RW5kKVxuXHRcdFx0KVxuXHRcdFx0bWFwLnNldChrZXksIGRheUV2ZW50cylcblx0XHR9XG5cdFx0cmV0dXJuIG1hcFxuXHR9LCBbZGF5cywgZXZlbnRzXSlcblxuXHRjb25zdCBwb3NpdGlvbmVkRXZlbnRzID0gdXNlTWVtbygoKSA9PiB7XG5cdFx0cmV0dXJuIGdldFBvc2l0aW9uZWRFdmVudHMoe1xuXHRcdFx0ZGF5cyxcblx0XHRcdGV2ZW50cyxcblx0XHRcdGRheU1heEV2ZW50cyxcblx0XHRcdGRheU51bWJlckhlaWdodCxcblx0XHRcdGV2ZW50U3BhY2luZyxcblx0XHRcdGV2ZW50QmFySGVpZ2h0OiBldmVudEhlaWdodCxcblx0XHRcdGdyaWRUeXBlLFxuXHRcdH0pXG5cdH0sIFtcblx0XHRkYXlzLFxuXHRcdGRheU1heEV2ZW50cyxcblx0XHRkYXlOdW1iZXJIZWlnaHQsXG5cdFx0ZXZlbnRTcGFjaW5nLFxuXHRcdGV2ZW50SGVpZ2h0LFxuXHRcdGV2ZW50cyxcblx0XHRncmlkVHlwZSxcblx0XSlcblxuXHRyZXR1cm4geyBwb3NpdGlvbmVkRXZlbnRzLCBkYXlFdmVudHNNYXAgfVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgZGF5anMsIHsgdHlwZSBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHtcblx0REFZX05VTUJFUl9IRUlHSFQsXG5cdEVWRU5UX0JBUl9IRUlHSFQsXG5cdEdBUF9CRVRXRUVOX0VMRU1FTlRTLFxufSBmcm9tICdAL2xpYi9jb25zdGFudHMnXG5cbmV4cG9ydCBpbnRlcmZhY2UgUG9zaXRpb25lZEV2ZW50IGV4dGVuZHMgQ2FsZW5kYXJFdmVudCB7XG5cdGxlZnQ6IG51bWJlciAvLyBMZWZ0IHBvc2l0aW9uIGluIHBlcmNlbnRhZ2Vcblx0d2lkdGg6IG51bWJlciAvLyBXaWR0aCBpbiBwZXJjZW50YWdlXG5cdHRvcDogbnVtYmVyIC8vIFRvcCBwb3NpdGlvbiBpbiBwZXJjZW50YWdlXG5cdGhlaWdodDogbnVtYmVyIC8vIEhlaWdodCBpbiBwZXJjZW50YWdlXG5cdHBvc2l0aW9uOiBudW1iZXIgLy8gUG9zaXRpb24gaW4gdGhlIHJvdyAoMCBmb3IgZmlyc3QsIDEgZm9yIHNlY29uZCwgZXRjLilcblx0aXNUcnVuY2F0ZWRTdGFydDogYm9vbGVhbiAvLyBXaGV0aGVyIHRoZSBldmVudCBpcyB0cnVuY2F0ZWQgYXQgdGhlIHN0YXJ0XG5cdGlzVHJ1bmNhdGVkRW5kOiBib29sZWFuIC8vIFdoZXRoZXIgdGhlIGV2ZW50IGlzIHRydW5jYXRlZCBhdCB0aGUgZW5kXG59XG5cbmludGVyZmFjZSBHZXRQb3NpdGlvbmVkRXZlbnRzUHJvcHMge1xuXHRkYXlzOiBEYXlqc1tdXG5cdGV2ZW50czogQ2FsZW5kYXJFdmVudFtdXG5cdGRheU1heEV2ZW50czogbnVtYmVyXG5cdGRheU51bWJlckhlaWdodD86IG51bWJlclxuXHRncmlkVHlwZT86ICdkYXknIHwgJ2hvdXInIC8vIEZ1dHVyZSB1c2UgZm9yIGRpZmZlcmVudCBncmlkIHR5cGVzXG5cdGV2ZW50U3BhY2luZz86IG51bWJlciAvLyBDdXN0b20gdmVydGljYWwgc3BhY2luZyBiZXR3ZWVuIGV2ZW50cyAoZGVmYXVsdHMgdG8gR0FQX0JFVFdFRU5fRUxFTUVOVFMpXG5cdGV2ZW50QmFySGVpZ2h0PzogbnVtYmVyIC8vIEN1c3RvbSBoZWlnaHQgZm9yIGV2ZW50IGJhcnMgaW4gcGl4ZWxzIChkZWZhdWx0cyB0byBFVkVOVF9CQVJfSEVJR0hUKVxufVxuXG5leHBvcnQgY29uc3QgZ2V0UG9zaXRpb25lZEV2ZW50cyA9ICh7XG5cdGRheXMsXG5cdGV2ZW50cyxcblx0ZGF5TWF4RXZlbnRzLFxuXHRkYXlOdW1iZXJIZWlnaHQgPSBEQVlfTlVNQkVSX0hFSUdIVCxcblx0Z3JpZFR5cGUgPSAnZGF5Jyxcblx0ZXZlbnRTcGFjaW5nID0gR0FQX0JFVFdFRU5fRUxFTUVOVFMsXG5cdGV2ZW50QmFySGVpZ2h0ID0gRVZFTlRfQkFSX0hFSUdIVCxcbn06IEdldFBvc2l0aW9uZWRFdmVudHNQcm9wcykgPT4ge1xuXHQvLyBGb3IgaG91ci1iYXNlZCBncmlkcywgdXNlIGFjdHVhbCBmaXJzdC9sYXN0IGhvdXJzIGZyb20gZGF5cyBhcnJheVxuXHQvLyBGb3IgZGF5LWJhc2VkIGdyaWRzLCB1c2Ugc3RhcnQvZW5kIG9mIGRheSB0byBjYXB0dXJlIGFsbCBldmVudHNcblx0Y29uc3QgZmlyc3QgPSBkYXlzLmF0KDApXG5cdGNvbnN0IGxhc3QgPSBkYXlzLmF0KC0xKVxuXHRpZiAoIWZpcnN0IHx8ICFsYXN0KSByZXR1cm4gW11cblxuXHRjb25zdCBmaXJzdERheSA9XG5cdFx0Z3JpZFR5cGUgPT09ICdob3VyJyA/IGZpcnN0LnN0YXJ0T2YoJ2hvdXInKSA6IGZpcnN0LnN0YXJ0T2YoJ2RheScpXG5cdGNvbnN0IGxhc3REYXkgPSBncmlkVHlwZSA9PT0gJ2hvdXInID8gbGFzdC5lbmRPZignaG91cicpIDogbGFzdC5lbmRPZignZGF5Jylcblx0Y29uc3QgZGF5Q291bnQgPSBkYXlzLmxlbmd0aFxuXG5cdC8vIFNlcGFyYXRlIG11bHRpLWRheSBhbmQgc2luZ2xlLWRheSBldmVudHNcblx0Y29uc3QgbXVsdGlEYXlFdmVudHMgPSBldmVudHMuZmlsdGVyKChlKSA9PiBlLmVuZC5kaWZmKGUuc3RhcnQsIGdyaWRUeXBlKSA+IDApXG5cdGNvbnN0IHNpbmdsZURheUV2ZW50cyA9IGV2ZW50cy5maWx0ZXIoXG5cdFx0KGUpID0+IGUuZW5kLmRpZmYoZS5zdGFydCwgZ3JpZFR5cGUpID09PSAwXG5cdClcblxuXHQvLyBTb3J0IG11bHRpLWRheSBldmVudHMgYnkgc3RhcnQgZGF0ZSwgdGhlbiBieSBkdXJhdGlvblxuXHRjb25zdCBzb3J0ZWRNdWx0aURheSA9IFsuLi5tdWx0aURheUV2ZW50c10uc29ydCgoYSwgYikgPT4ge1xuXHRcdGNvbnN0IHN0YXJ0RGlmZiA9IGEuc3RhcnQuZGlmZihiLnN0YXJ0KVxuXHRcdGlmIChzdGFydERpZmYgIT09IDApIHtcblx0XHRcdHJldHVybiBzdGFydERpZmZcblx0XHR9XG5cdFx0cmV0dXJuIGIuZW5kLmRpZmYoYi5zdGFydCkgLSBhLmVuZC5kaWZmKGEuc3RhcnQpIC8vIExvbmdlciBldmVudHMgZmlyc3Rcblx0fSlcblxuXHQvLyBTb3J0IHNpbmdsZS1kYXkgZXZlbnRzIGJ5IHN0YXJ0IHRpbWVcblx0Y29uc3Qgc29ydGVkU2luZ2xlRGF5ID0gWy4uLnNpbmdsZURheUV2ZW50c10uc29ydCgoYSwgYikgPT5cblx0XHRhLnN0YXJ0LmRpZmYoYi5zdGFydClcblx0KVxuXG5cdC8vIENyZWF0ZSBkYXlDb3VudCB4IGRheU1heEV2ZW50cyBncmlkIHdpdGggZmxhZ3Ncblx0Y29uc3QgZ3JpZDogeyB0YWtlbjogYm9vbGVhbjsgZXZlbnQ6IENhbGVuZGFyRXZlbnQgfCBudWxsIH1bXVtdID0gQXJyYXkuZnJvbShcblx0XHR7IGxlbmd0aDogZGF5TWF4RXZlbnRzIH0sXG5cdFx0KCkgPT5cblx0XHRcdEFycmF5LmZyb20oeyBsZW5ndGg6IGRheUNvdW50IH0sICgpID0+ICh7IHRha2VuOiBmYWxzZSwgZXZlbnQ6IG51bGwgfSkpXG5cdClcblxuXHRjb25zdCBwcm9jZXNzZWRFdmVudHM6IFBvc2l0aW9uZWRFdmVudFtdID0gW11cblxuXHQvLyBGaW5kIHRoZSBmaXJzdCByb3cgd2hlcmUgZXZlcnkgY29sdW1uIGZyb20gc3RhcnRDb2wuLmVuZENvbCBpcyBmcmVlOyAtMSBpZiBub25lLlxuXHRjb25zdCBmaW5kQXZhaWxhYmxlUm93ID0gKHN0YXJ0Q29sOiBudW1iZXIsIGVuZENvbDogbnVtYmVyKTogbnVtYmVyID0+IHtcblx0XHRmb3IgKGxldCByb3cgPSAwOyByb3cgPCBkYXlNYXhFdmVudHM7IHJvdysrKSB7XG5cdFx0XHRsZXQgY2FuUGxhY2UgPSB0cnVlXG5cdFx0XHRmb3IgKGxldCBjb2wgPSBzdGFydENvbDsgY29sIDw9IGVuZENvbDsgY29sKyspIHtcblx0XHRcdFx0aWYgKGdyaWRbcm93XVtjb2xdLnRha2VuKSB7XG5cdFx0XHRcdFx0Y2FuUGxhY2UgPSBmYWxzZVxuXHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChjYW5QbGFjZSkgcmV0dXJuIHJvd1xuXHRcdH1cblx0XHRyZXR1cm4gLTFcblx0fVxuXG5cdGNvbnN0IHBsYWNlID0gKFxuXHRcdHJvdzogbnVtYmVyLFxuXHRcdHN0YXJ0Q29sOiBudW1iZXIsXG5cdFx0ZW5kQ29sOiBudW1iZXIsXG5cdFx0ZXZlbnQ6IENhbGVuZGFyRXZlbnQsXG5cdFx0aXNUcnVuY2F0ZWRTdGFydDogYm9vbGVhbixcblx0XHRpc1RydW5jYXRlZEVuZDogYm9vbGVhblxuXHQpID0+IHtcblx0XHRmb3IgKGxldCBjb2wgPSBzdGFydENvbDsgY29sIDw9IGVuZENvbDsgY29sKyspIHtcblx0XHRcdGdyaWRbcm93XVtjb2xdID0geyB0YWtlbjogdHJ1ZSwgZXZlbnQgfVxuXHRcdH1cblx0XHRjb25zdCBzcGFuRGF5cyA9IGVuZENvbCAtIHN0YXJ0Q29sICsgMVxuXHRcdHByb2Nlc3NlZEV2ZW50cy5wdXNoKHtcblx0XHRcdGxlZnQ6IChzdGFydENvbCAvIGRheUNvdW50KSAqIDEwMCxcblx0XHRcdHdpZHRoOiAoc3BhbkRheXMgLyBkYXlDb3VudCkgKiAxMDAsXG5cdFx0XHR0b3A6XG5cdFx0XHRcdGRheU51bWJlckhlaWdodCArIGV2ZW50U3BhY2luZyArIHJvdyAqIChldmVudEJhckhlaWdodCArIGV2ZW50U3BhY2luZyksXG5cdFx0XHRoZWlnaHQ6IGV2ZW50QmFySGVpZ2h0LFxuXHRcdFx0cG9zaXRpb246IHJvdyxcblx0XHRcdC4uLmV2ZW50LFxuXHRcdFx0aXNUcnVuY2F0ZWRTdGFydCxcblx0XHRcdGlzVHJ1bmNhdGVkRW5kLFxuXHRcdH0gYXMgUG9zaXRpb25lZEV2ZW50KVxuXHR9XG5cblx0Ly8gU3RlcCAxOiBBc3NpZ24gcG9zaXRpb25zIHRvIG11bHRpLWRheSBldmVudHMgZmlyc3Rcblx0Zm9yIChjb25zdCBldmVudCBvZiBzb3J0ZWRNdWx0aURheSkge1xuXHRcdGNvbnN0IGV2ZW50U3RhcnQgPSBkYXlqcy5tYXgoZXZlbnQuc3RhcnQuc3RhcnRPZihncmlkVHlwZSksIGZpcnN0RGF5KVxuXHRcdGNvbnN0IGFkanVzdGVkRW5kID1cblx0XHRcdGdyaWRUeXBlID09PSAnaG91cicgPyBldmVudC5lbmQuc3VidHJhY3QoMSwgJ21pbnV0ZScpIDogZXZlbnQuZW5kXG5cdFx0Y29uc3QgZXZlbnRFbmQgPSBkYXlqcy5taW4oYWRqdXN0ZWRFbmQuc3RhcnRPZihncmlkVHlwZSksIGxhc3REYXkpXG5cdFx0Y29uc3Qgc3RhcnRDb2wgPSBNYXRoLm1heCgwLCBldmVudFN0YXJ0LmRpZmYoZmlyc3REYXksIGdyaWRUeXBlKSlcblx0XHRjb25zdCBlbmRDb2wgPSBNYXRoLm1pbihkYXlDb3VudCAtIDEsIGV2ZW50RW5kLmRpZmYoZmlyc3REYXksIGdyaWRUeXBlKSlcblxuXHRcdGNvbnN0IGlzVHJ1bmNhdGVkU3RhcnQgPSBldmVudC5zdGFydC5zdGFydE9mKGdyaWRUeXBlKS5pc0JlZm9yZShmaXJzdERheSlcblx0XHRjb25zdCBpc1RydW5jYXRlZEVuZCA9IGV2ZW50LmVuZC5zdGFydE9mKGdyaWRUeXBlKS5pc0FmdGVyKGxhc3REYXkpXG5cblx0XHQvLyBGaXJzdCB0cnk6IHBsYWNlIGZyb20gb3JpZ2luYWwgc3RhcnQgcG9zaXRpb25cblx0XHRjb25zdCByb3cgPSBmaW5kQXZhaWxhYmxlUm93KHN0YXJ0Q29sLCBlbmRDb2wpXG5cdFx0aWYgKHJvdyAhPT0gLTEpIHtcblx0XHRcdHBsYWNlKHJvdywgc3RhcnRDb2wsIGVuZENvbCwgZXZlbnQsIGlzVHJ1bmNhdGVkU3RhcnQsIGlzVHJ1bmNhdGVkRW5kKVxuXHRcdFx0Y29udGludWVcblx0XHR9XG5cblx0XHQvLyBGYWxsYmFjazogdHJ5IHRydW5jYXRlZCB2ZXJzaW9ucyBzdGFydGluZyBmcm9tIGxhdGVyIGRheXNcblx0XHRmb3IgKGxldCB0cnlTdGFydCA9IHN0YXJ0Q29sICsgMTsgdHJ5U3RhcnQgPD0gZW5kQ29sOyB0cnlTdGFydCsrKSB7XG5cdFx0XHRjb25zdCB0cnVuY1JvdyA9IGZpbmRBdmFpbGFibGVSb3codHJ5U3RhcnQsIGVuZENvbClcblx0XHRcdGlmICh0cnVuY1JvdyAhPT0gLTEpIHtcblx0XHRcdFx0cGxhY2UodHJ1bmNSb3csIHRyeVN0YXJ0LCBlbmRDb2wsIGV2ZW50LCB0cnVlLCBpc1RydW5jYXRlZEVuZClcblx0XHRcdFx0YnJlYWtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBTdGVwIDI6IEZpbGwgZ2FwcyB3aXRoIHNpbmdsZS1kYXkgZXZlbnRzXG5cdGZvciAoY29uc3QgZXZlbnQgb2Ygc29ydGVkU2luZ2xlRGF5KSB7XG5cdFx0Y29uc3QgZXZlbnRTdGFydCA9IGRheWpzLm1heChldmVudC5zdGFydC5zdGFydE9mKGdyaWRUeXBlKSwgZmlyc3REYXkpXG5cdFx0Y29uc3QgY29sID0gTWF0aC5tYXgoXG5cdFx0XHQwLFxuXHRcdFx0TWF0aC5taW4oZGF5Q291bnQgLSAxLCBldmVudFN0YXJ0LmRpZmYoZmlyc3REYXksIGdyaWRUeXBlKSlcblx0XHQpXG5cdFx0Y29uc3Qgcm93ID0gZmluZEF2YWlsYWJsZVJvdyhjb2wsIGNvbClcblx0XHRpZiAocm93ICE9PSAtMSkge1xuXHRcdFx0cGxhY2Uocm93LCBjb2wsIGNvbCwgZXZlbnQsIGZhbHNlLCBmYWxzZSlcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gcHJvY2Vzc2VkRXZlbnRzXG59XG4iLAogICAgImltcG9ydCBSZWFjdCwgeyBtZW1vLCB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBEYXlOdW1iZXIgfSBmcm9tICdAL2NvbXBvbmVudHMvZGF5LW51bWJlcidcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB7IGlzQnVzaW5lc3NIb3VyIH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci91dGlscy9idXNpbmVzcy1ob3VycydcbmltcG9ydCB7IHVzZUVmZmVjdGl2ZUJ1c2luZXNzSG91cnMgfSBmcm9tICdAL2hvb2tzL3VzZS1lZmZlY3RpdmUtYnVzaW5lc3MtaG91cnMnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSB7IERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgZmlsdGVyRXZlbnRzQnlSZXNvdXJjZSB9IGZyb20gJ0AvbGliL3V0aWxzL2V2ZW50LXV0aWxzJ1xuaW1wb3J0IHsga2V5cyB9IGZyb20gJ0AvbGliL3V0aWxzL2tleXMnXG5pbXBvcnQgdHlwZSB7IFNlbGVjdGVkRGF5RXZlbnRzIH0gZnJvbSAnLi9hbGwtZXZlbnRzLWRpYWxvZydcbmltcG9ydCB7IEFsbEV2ZW50RGlhbG9nIH0gZnJvbSAnLi9hbGwtZXZlbnRzLWRpYWxvZydcbmltcG9ydCB7IERyb3BwYWJsZUNlbGwgfSBmcm9tICcuL2Ryb3BwYWJsZS1jZWxsJ1xuXG5pbnRlcmZhY2UgR3JpZFByb3BzIHtcblx0ZGF5OiBEYXlqc1xuXHRob3VyPzogbnVtYmVyIC8vIE9wdGlvbmFsIGhvdXIgZm9yIGhvdXItYmFzZWQgZ3JpZHNcblx0bWludXRlPzogbnVtYmVyIC8vIE9wdGlvbmFsIG1pbnV0ZSBmb3IgbW9yZSBncmFudWxhciB0aW1lIHNsb3RzXG5cdGRheU1heEV2ZW50cz86IG51bWJlclxuXHRjbGFzc05hbWU/OiBzdHJpbmcgLy8gT3B0aW9uYWwgY2xhc3NOYW1lIGZvciBjdXN0b20gc3R5bGluZ1xuXHRyZXNvdXJjZUlkPzogc3RyaW5nIHwgbnVtYmVyIC8vIE9wdGlvbmFsIHJlc291cmNlIElEIGZvciByZXNvdXJjZS1zcGVjaWZpYyBkYXkgY2VsbHNcblx0Z3JpZFR5cGU/OiAnZGF5JyB8ICdob3VyJyAvLyBGdXR1cmUgdXNlIGZvciBkaWZmZXJlbnQgZ3JpZCB0eXBlc1xuXHRzaG91bGRSZW5kZXJFdmVudHM/OiBib29sZWFuIC8vIEZsYWcgdG8gZGV0ZXJtaW5lIGlmIGV2ZW50cyBzaG91bGQgYmUgcmVuZGVyZWRcblx0YWxsRGF5PzogYm9vbGVhbiAvLyBGbGFnIHRvIGluZGljYXRlIGlmIHRoaXMgaXMgYW4gYWxsLWRheSBjZWxsXG5cdHNob3dEYXlOdW1iZXI/OiBib29sZWFuIC8vIEZsYWcgdG8gc2hvdyBvciBoaWRlIHRoZSBkYXkgbnVtYmVyXG5cdGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlXG5cdCdkYXRhLXRlc3RpZCc/OiBzdHJpbmdcblx0cHJlY29tcHV0ZWRFdmVudHM/OiBDYWxlbmRhckV2ZW50W11cbn1cblxuY29uc3QgTm9NZW1vR3JpZENlbGw6IFJlYWN0LkZDPEdyaWRQcm9wcz4gPSAoe1xuXHRkYXksXG5cdGhvdXIsXG5cdG1pbnV0ZSxcblx0Y2xhc3NOYW1lID0gJycsXG5cdHJlc291cmNlSWQsXG5cdGdyaWRUeXBlID0gJ2RheScsXG5cdHNob3VsZFJlbmRlckV2ZW50cyA9IHRydWUsXG5cdGFsbERheSA9IGZhbHNlLFxuXHRwcmVjb21wdXRlZEV2ZW50cyxcblx0J2RhdGEtdGVzdGlkJzogZGF0YVRlc3RJZCxcblx0c2hvd0RheU51bWJlciA9IGZhbHNlLFxuXHRjaGlsZHJlbixcbn0pID0+IHtcblx0Y29uc3QgYWxsRXZlbnRzRGlhbG9nUmVmID0gUmVhY3QudXNlUmVmPHtcblx0XHRvcGVuOiAoKSA9PiB2b2lkXG5cdFx0Y2xvc2U6ICgpID0+IHZvaWRcblx0XHRzZXRTZWxlY3RlZERheUV2ZW50czogKGRheUV2ZW50czogU2VsZWN0ZWREYXlFdmVudHMpID0+IHZvaWRcblx0fT4obnVsbClcblx0Y29uc3Qge1xuXHRcdGRheU1heEV2ZW50cyA9IDAsXG5cdFx0Z2V0RXZlbnRzRm9yRGF0ZVJhbmdlLFxuXHRcdGN1cnJlbnREYXRlLFxuXHRcdHQsXG5cdFx0Z2V0RXZlbnRzRm9yUmVzb3VyY2UsXG5cdFx0Y3VycmVudExvY2FsZSxcblx0XHRldmVudFNwYWNpbmcsXG5cdFx0ZXZlbnRIZWlnaHQsXG5cdH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cdGNvbnN0IGVmZmVjdGl2ZUJ1c2luZXNzSG91cnMgPSB1c2VFZmZlY3RpdmVCdXNpbmVzc0hvdXJzKHJlc291cmNlSWQpXG5cblx0Y29uc3QgdG9kYXlFdmVudHMgPSB1c2VNZW1vKCgpID0+IHtcblx0XHRpZiAoIXNob3VsZFJlbmRlckV2ZW50cykge1xuXHRcdFx0cmV0dXJuIFtdXG5cdFx0fVxuXG5cdFx0Ly8gVXNlIHByZS1jb21wdXRlZCBldmVudHMgZnJvbSB0aGUgcm93IGxldmVsIHdoZW4gYXZhaWxhYmxlXG5cdFx0aWYgKHByZWNvbXB1dGVkRXZlbnRzKSB7XG5cdFx0XHRyZXR1cm4gcHJlY29tcHV0ZWRFdmVudHNcblx0XHR9XG5cblx0XHRsZXQgdG9kYXlFdmVudHMgPSBnZXRFdmVudHNGb3JEYXRlUmFuZ2UoXG5cdFx0XHRkYXkuc3RhcnRPZihncmlkVHlwZSksXG5cdFx0XHRkYXkuZW5kT2YoZ3JpZFR5cGUpXG5cdFx0KVxuXG5cdFx0aWYgKGFsbERheSkge1xuXHRcdFx0dG9kYXlFdmVudHMgPSB0b2RheUV2ZW50cy5maWx0ZXIoKGUpID0+IGUuYWxsRGF5KVxuXHRcdH1cblxuXHRcdGlmIChyZXNvdXJjZUlkKSB7XG5cdFx0XHRyZXR1cm4gZmlsdGVyRXZlbnRzQnlSZXNvdXJjZShcblx0XHRcdFx0dG9kYXlFdmVudHMsXG5cdFx0XHRcdGdldEV2ZW50c0ZvclJlc291cmNlKHJlc291cmNlSWQpID8/IFtdXG5cdFx0XHQpXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRvZGF5RXZlbnRzXG5cdH0sIFtcblx0XHRwcmVjb21wdXRlZEV2ZW50cyxcblx0XHRkYXksXG5cdFx0cmVzb3VyY2VJZCxcblx0XHRnZXRFdmVudHNGb3JEYXRlUmFuZ2UsXG5cdFx0Z2V0RXZlbnRzRm9yUmVzb3VyY2UsXG5cdFx0Z3JpZFR5cGUsXG5cdFx0c2hvdWxkUmVuZGVyRXZlbnRzLFxuXHRcdGFsbERheSxcblx0XSlcblxuXHQvLyBIYW5kbGVyIGZvciBzaG93aW5nIGFsbCBldmVudHMgaW4gYSBkaWFsb2dcblx0Y29uc3Qgc2hvd0FsbEV2ZW50cyA9IChkYXk6IERheWpzLCBldmVudHM6IENhbGVuZGFyRXZlbnRbXSkgPT4ge1xuXHRcdGFsbEV2ZW50c0RpYWxvZ1JlZi5jdXJyZW50Py5zZXRTZWxlY3RlZERheUV2ZW50cyh7XG5cdFx0XHRkYXksXG5cdFx0XHRldmVudHMsXG5cdFx0fSlcblx0XHRhbGxFdmVudHNEaWFsb2dSZWYuY3VycmVudD8ub3BlbigpXG5cdH1cblxuXHRjb25zdCBpc0N1cnJlbnRNb250aCA9IGRheS5tb250aCgpID09PSBjdXJyZW50RGF0ZS5tb250aCgpXG5cblx0Y29uc3QgaGlkZGVuRXZlbnRzQ291bnQgPSB0b2RheUV2ZW50cy5sZW5ndGggLSBkYXlNYXhFdmVudHNcblx0Y29uc3QgaGFzSGlkZGVuRXZlbnRzID0gaGlkZGVuRXZlbnRzQ291bnQgPiAwXG5cblx0Y29uc3QgaXNCdXNpbmVzcyA9IGlzQnVzaW5lc3NIb3VyKHtcblx0XHRkYXRlOiBkYXksXG5cdFx0aG91cjogZ3JpZFR5cGUgPT09ICdob3VyJyA/IGRheS5ob3VyKCkgOiB1bmRlZmluZWQsXG5cdFx0YnVzaW5lc3NIb3VyczogZWZmZWN0aXZlQnVzaW5lc3NIb3Vycyxcblx0fSlcblxuXHRjb25zdCB0ZXN0SWQgPVxuXHRcdGdyaWRUeXBlID09PSAnaG91cidcblx0XHRcdD8ga2V5cy5jZWxsLmRheShkYXksIGRheS5mb3JtYXQoJ0hIJyksIGRheS5mb3JtYXQoJ21tJykpXG5cdFx0XHQ6IGtleXMuY2VsbC5kYXkoZGF5KVxuXHRjb25zdCBkcm9wcGFibGVJZCA9IGtleXMuZHJvcHBhYmxlLmRheUNlbGwoZGF5LCB7IGFsbERheSwgcmVzb3VyY2VJZCB9KVxuXG5cdHJldHVybiAoXG5cdFx0PD5cblx0XHRcdDxEcm9wcGFibGVDZWxsXG5cdFx0XHRcdGFsbERheT17YWxsRGF5fVxuXHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdCdjdXJzb3ItcG9pbnRlciBvdmVyZmxvdy1jbGlwIHAtMSBob3ZlcjpiZy1hY2NlbnQgbWluLWgtWzYwcHhdIHJlbGF0aXZlIGJvcmRlci1yIGJvcmRlci1iIG1pbi13LTAnLFxuXHRcdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0XHQpfVxuXHRcdFx0XHRkYXRhLXRlc3RpZD17ZGF0YVRlc3RJZCB8fCB0ZXN0SWR9XG5cdFx0XHRcdGRhdGU9e2RheX1cblx0XHRcdFx0ZGlzYWJsZWQ9eyFpc0J1c2luZXNzIHx8ICFpc0N1cnJlbnRNb250aH1cblx0XHRcdFx0aG91cj17aG91cn1cblx0XHRcdFx0aWQ9e2Ryb3BwYWJsZUlkfVxuXHRcdFx0XHRtaW51dGU9e21pbnV0ZX1cblx0XHRcdFx0cmVzb3VyY2VJZD17cmVzb3VyY2VJZH1cblx0XHRcdFx0dHlwZT1cImRheS1jZWxsXCJcblx0XHRcdD5cblx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgaC1mdWxsIHctZnVsbFwiXG5cdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9XCJncmlkLWNlbGwtY29udGVudFwiXG5cdFx0XHRcdFx0c3R5bGU9e3sgZ2FwOiBgJHtldmVudFNwYWNpbmd9cHhgIH19XG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7c2hvd0RheU51bWJlciAmJiA8RGF5TnVtYmVyIGRhdGU9e2RheX0gbG9jYWxlPXtjdXJyZW50TG9jYWxlfSAvPn1cblxuXHRcdFx0XHRcdHtzaG91bGRSZW5kZXJFdmVudHMgJiYgKFxuXHRcdFx0XHRcdFx0PD5cblx0XHRcdFx0XHRcdFx0ey8qIFJlbmRlciBwbGFjZWhvbGRlcnMgZm9yIGV2ZW50cyB0aGF0IG9jY3VyIHRvZGF5IHNvIHRoYXQgdGhlIGNlbGwgaGVpZ2h0IGlzIGFjY29yZGluZyB0byBkYXlNYXhFdmVudHMuICovfVxuXHRcdFx0XHRcdFx0XHR7dG9kYXlFdmVudHMuc2xpY2UoMCwgZGF5TWF4RXZlbnRzKS5tYXAoKGV2ZW50LCByb3dJbmRleCkgPT4gKFxuXHRcdFx0XHRcdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cInctZnVsbCBzaHJpbmstMFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD17ZXZlbnQ/LnRpdGxlfVxuXHRcdFx0XHRcdFx0XHRcdFx0a2V5PXtrZXlzLmxpc3RLZXkoJ2VtcHR5Jywgcm93SW5kZXgsIGV2ZW50LmlkKX1cblx0XHRcdFx0XHRcdFx0XHRcdHN0eWxlPXt7IGhlaWdodDogYCR7ZXZlbnRIZWlnaHR9cHhgIH19XG5cdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0KSl9XG5cblx0XHRcdFx0XHRcdFx0ey8qIFNob3cgbW9yZSBldmVudHMgYnV0dG9uIHdpdGggYWNjdXJhdGUgY291bnQgKi99XG5cdFx0XHRcdFx0XHRcdHtoYXNIaWRkZW5FdmVudHMgJiYgKFxuXHRcdFx0XHRcdFx0XHRcdC8vIGJpb21lLWlnbm9yZSBsaW50L2ExMXkvdXNlU2VtYW50aWNFbGVtZW50czogVXNpbmcgZGl2IGFzIGJ1dHRvblxuXHRcdFx0XHRcdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cInRleHQtbXV0ZWQtZm9yZWdyb3VuZCBob3Zlcjp0ZXh0LWZvcmVncm91bmQgY3Vyc29yLXBvaW50ZXIgdGV4dC1bMTBweF0gd2hpdGVzcGFjZS1ub3dyYXAgc206dGV4dC14cyBzaHJpbmstMCBtdC0xXCJcblx0XHRcdFx0XHRcdFx0XHRcdG9uQ2xpY2s9eyhlKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGUuc3RvcFByb3BhZ2F0aW9uKClcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRzaG93QWxsRXZlbnRzKGRheSwgdG9kYXlFdmVudHMpXG5cdFx0XHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHRcdFx0b25LZXlEb3duPXsoZSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoZS5rZXkgPT09ICdFbnRlcicgfHwgZS5rZXkgPT09ICcgJykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGUucHJldmVudERlZmF1bHQoKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGUuc3RvcFByb3BhZ2F0aW9uKClcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzaG93QWxsRXZlbnRzKGRheSwgdG9kYXlFdmVudHMpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHRcdFx0XHRyb2xlPVwiYnV0dG9uXCJcblx0XHRcdFx0XHRcdFx0XHRcdHRhYkluZGV4PXswfVxuXHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdCt7aGlkZGVuRXZlbnRzQ291bnR9IHt0KCdtb3JlJyl9XG5cdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHQ8Lz5cblx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdHtjaGlsZHJlbn1cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQ8L0Ryb3BwYWJsZUNlbGw+XG5cblx0XHRcdHsvKiBEaWFsb2cgZm9yIHNob3dpbmcgYWxsIGV2ZW50cyAqL31cblx0XHRcdDxBbGxFdmVudERpYWxvZyByZWY9e2FsbEV2ZW50c0RpYWxvZ1JlZn0gLz5cblx0XHQ8Lz5cblx0KVxufVxuXG5leHBvcnQgY29uc3QgR3JpZENlbGwgPSBtZW1vKE5vTWVtb0dyaWRDZWxsKSBhcyB0eXBlb2YgTm9NZW1vR3JpZENlbGxcbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgaXNUb2RheSB9IGZyb20gJ0AvbGliL3V0aWxzL2RhdGUtdXRpbHMnXG5pbXBvcnQgeyBrZXlzIH0gZnJvbSAnQC9saWIvdXRpbHMva2V5cydcblxuaW50ZXJmYWNlIERheU51bWJlclByb3BzIHtcblx0ZGF0ZTogRGF5anNcblx0bG9jYWxlPzogc3RyaW5nXG5cdGNsYXNzTmFtZT86IHN0cmluZ1xufVxuXG4vKipcbiAqIFJlbmRlcnMgdGhlIGRheSBudW1iZXIgZm9yIGEgY2FsZW5kYXIgY2VsbCwgaGlnaGxpZ2h0aW5nICd0b2RheScgd2l0aCBhIHByaW1hcnkgYmFja2dyb3VuZC5cbiAqL1xuZXhwb3J0IGNvbnN0IERheU51bWJlcjogUmVhY3QuRkM8RGF5TnVtYmVyUHJvcHM+ID0gKHsgZGF0ZSwgY2xhc3NOYW1lIH0pID0+IHtcblx0Y29uc3QgdG9kYXkgPSBpc1RvZGF5KGRhdGUpXG5cblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQnZmxleCBoLTUgdy01IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLWZ1bGwgdGV4dC14cyBzaHJpbmstMCcsXG5cdFx0XHRcdHRvZGF5ICYmICdiZy1wcmltYXJ5IHRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIGZvbnQtbWVkaXVtJyxcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0ZGF0YS10ZXN0aWQ9e2tleXMuZGF5TnVtYmVyKGRhdGUpfVxuXHRcdD5cblx0XHRcdHtkYXRlLmZvcm1hdCgnRCcpfVxuXHRcdDwvZGl2PlxuXHQpXG59XG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlSW1wZXJhdGl2ZUhhbmRsZSwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cydcbmltcG9ydCB7IERyYWdnYWJsZUV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL2RyYWdnYWJsZS1ldmVudC9kcmFnZ2FibGUtZXZlbnQnXG5pbXBvcnQge1xuXHREaWFsb2csXG5cdERpYWxvZ0NvbnRlbnQsXG5cdERpYWxvZ0hlYWRlcixcblx0RGlhbG9nVGl0bGUsXG59IGZyb20gJ0AvY29tcG9uZW50cy91aS9kaWFsb2cnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSB7IERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5leHBvcnQgaW50ZXJmYWNlIFNlbGVjdGVkRGF5RXZlbnRzIHtcblx0ZGF5OiBEYXlqc1xuXHRldmVudHM6IENhbGVuZGFyRXZlbnRbXVxufVxuXG5pbnRlcmZhY2UgQWxsRXZlbnREaWFsb2dQcm9wcyB7XG5cdHJlZjogUmVhY3QuUmVmPHtcblx0XHRvcGVuOiAoKSA9PiB2b2lkXG5cdFx0Y2xvc2U6ICgpID0+IHZvaWRcblx0XHRzZXRTZWxlY3RlZERheUV2ZW50czogKGRheUV2ZW50czogU2VsZWN0ZWREYXlFdmVudHMpID0+IHZvaWRcblx0fT5cbn1cblxuZXhwb3J0IGNvbnN0IEFsbEV2ZW50RGlhbG9nOiBSZWFjdC5GQzxBbGxFdmVudERpYWxvZ1Byb3BzPiA9ICh7IHJlZiB9KSA9PiB7XG5cdGNvbnN0IFtkaWFsb2dPcGVuLCBzZXREaWFsb2dPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKVxuXHRjb25zdCBbc2VsZWN0ZWREYXlFdmVudHMsIHNldFNlbGVjdGVkRGF5RXZlbnRzXSA9XG5cdFx0dXNlU3RhdGU8U2VsZWN0ZWREYXlFdmVudHMgfCBudWxsPihudWxsKVxuXHRjb25zdCB7IGN1cnJlbnREYXRlLCBmaXJzdERheU9mV2VlaywgZXZlbnRIZWlnaHQgfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblxuXHR1c2VJbXBlcmF0aXZlSGFuZGxlKHJlZiwgKCkgPT4gKHtcblx0XHRvcGVuOiAoKSA9PiBzZXREaWFsb2dPcGVuKHRydWUpLFxuXHRcdGNsb3NlOiAoKSA9PiBzZXREaWFsb2dPcGVuKGZhbHNlKSxcblx0XHRzZXRTZWxlY3RlZERheUV2ZW50czogKGRheUV2ZW50czogU2VsZWN0ZWREYXlFdmVudHMpID0+XG5cdFx0XHRzZXRTZWxlY3RlZERheUV2ZW50cyhkYXlFdmVudHMpLFxuXHR9KSlcblxuXHQvLyBHZXQgc3RhcnQgZGF0ZSBmb3IgdGhlIGN1cnJlbnQgbW9udGggdmlldyBiYXNlZCBvbiBmaXJzdERheU9mV2Vla1xuXHRjb25zdCBmaXJzdERheU9mTW9udGggPSBjdXJyZW50RGF0ZS5zdGFydE9mKCdtb250aCcpXG5cblx0Ly8gQ2FsY3VsYXRlIHRoZSBmaXJzdCBkYXkgb2YgdGhlIGNhbGVuZGFyIGdyaWQgY29ycmVjdGx5XG5cdC8vIEZpbmQgdGhlIGZpcnN0IGRheSBvZiB3ZWVrIChlLmcuIFN1bmRheSBvciBNb25kYXkpIHRoYXQgY29tZXMgYmVmb3JlIG9yIG9uIHRoZSBmaXJzdCBkYXkgb2YgdGhlIG1vbnRoXG5cdGxldCBhZGp1c3RlZEZpcnN0RGF5T2ZDYWxlbmRhciA9IGZpcnN0RGF5T2ZNb250aC5jbG9uZSgpXG5cdHdoaWxlIChhZGp1c3RlZEZpcnN0RGF5T2ZDYWxlbmRhci5kYXkoKSAhPT0gZmlyc3REYXlPZldlZWspIHtcblx0XHRhZGp1c3RlZEZpcnN0RGF5T2ZDYWxlbmRhciA9IGFkanVzdGVkRmlyc3REYXlPZkNhbGVuZGFyLnN1YnRyYWN0KDEsICdkYXknKVxuXHR9XG5cblx0cmV0dXJuIChcblx0XHQ8RGlhbG9nIG9uT3BlbkNoYW5nZT17c2V0RGlhbG9nT3Blbn0gb3Blbj17ZGlhbG9nT3Blbn0+XG5cdFx0XHQ8RGlhbG9nQ29udGVudCBjbGFzc05hbWU9XCJtYXgtaC1bODB2aF0gbWF4LXctbWQgb3ZlcmZsb3cteS1hdXRvXCI+XG5cdFx0XHRcdDxEaWFsb2dIZWFkZXI+XG5cdFx0XHRcdFx0PERpYWxvZ1RpdGxlPlxuXHRcdFx0XHRcdFx0e3NlbGVjdGVkRGF5RXZlbnRzPy5kYXkuZm9ybWF0KCdNTU1NIEQsIFlZWVknKX1cblx0XHRcdFx0XHQ8L0RpYWxvZ1RpdGxlPlxuXHRcdFx0XHQ8L0RpYWxvZ0hlYWRlcj5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJtdC00IHNwYWNlLXktM1wiPlxuXHRcdFx0XHRcdHtzZWxlY3RlZERheUV2ZW50cz8uZXZlbnRzLm1hcCgoZXZlbnQpID0+IHtcblx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdDxEcmFnZ2FibGVFdmVudFxuXHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cInJlbGF0aXZlIG15LTFcIiAvLyBVc2UgZXZlbnQgSUQgZm9yIHVuaXF1ZSBpZGVudGlmaWNhdGlvblxuXHRcdFx0XHRcdFx0XHRcdGVsZW1lbnRJZD17YGFsbC1ldmVudHMtZGlhbG9nLWV2ZW50LSQke2V2ZW50LmlkfWB9XG5cdFx0XHRcdFx0XHRcdFx0ZXZlbnQ9e2V2ZW50fVxuXHRcdFx0XHRcdFx0XHRcdGtleT17ZXZlbnQuaWR9XG5cdFx0XHRcdFx0XHRcdFx0c3R5bGU9e3sgaGVpZ2h0OiBgJHtldmVudEhlaWdodH1weGAgfX1cblx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHR9KX1cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQ8L0RpYWxvZ0NvbnRlbnQ+XG5cdFx0PC9EaWFsb2c+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHsgdXNlRHJhZ2dhYmxlIH0gZnJvbSAnQGRuZC1raXQvY29yZSdcbmltcG9ydCB0eXBlIHsgQ1NTUHJvcGVydGllcyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgbWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQW5pbWF0ZWRTZWN0aW9uIH0gZnJvbSAnQC9jb21wb25lbnRzL2FuaW1hdGlvbnMvYW5pbWF0ZWQtc2VjdGlvbidcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmNvbnN0IGdldEJvcmRlclJhZGl1c0NsYXNzID0gKFxuXHRpc1RydW5jYXRlZFN0YXJ0OiBib29sZWFuLFxuXHRpc1RydW5jYXRlZEVuZDogYm9vbGVhblxuKSA9PiB7XG5cdGlmIChpc1RydW5jYXRlZFN0YXJ0ICYmIGlzVHJ1bmNhdGVkRW5kKSB7XG5cdFx0cmV0dXJuICdyb3VuZGVkLW5vbmUnXG5cdH1cblx0aWYgKGlzVHJ1bmNhdGVkU3RhcnQpIHtcblx0XHRyZXR1cm4gJ3JvdW5kZWQtci1tZCByb3VuZGVkLWwtbm9uZSdcblx0fVxuXHRpZiAoaXNUcnVuY2F0ZWRFbmQpIHtcblx0XHRyZXR1cm4gJ3JvdW5kZWQtbC1tZCByb3VuZGVkLXItbm9uZSdcblx0fVxuXHRyZXR1cm4gJ3JvdW5kZWQtbWQnXG59XG5cbmZ1bmN0aW9uIERyYWdnYWJsZUV2ZW50VW5tZW1vaXplZCh7XG5cdGVsZW1lbnRJZCxcblx0ZXZlbnQsXG5cdGNsYXNzTmFtZSxcblx0c3R5bGUsXG5cdGRpc2FibGVEcmFnID0gZmFsc2UsXG59OiB7XG5cdGVsZW1lbnRJZDogc3RyaW5nXG5cdGNsYXNzTmFtZT86IHN0cmluZ1xuXHRzdHlsZT86IENTU1Byb3BlcnRpZXNcblx0ZXZlbnQ6IENhbGVuZGFyRXZlbnRcblx0ZGlzYWJsZURyYWc/OiBib29sZWFuXG59KSB7XG5cdGNvbnN0IHsgb25FdmVudENsaWNrLCByZW5kZXJFdmVudCwgZGlzYWJsZUV2ZW50Q2xpY2ssIGRpc2FibGVEcmFnQW5kRHJvcCB9ID1cblx0XHR1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cblx0Y29uc3QgeyBhdHRyaWJ1dGVzLCBsaXN0ZW5lcnMsIHNldE5vZGVSZWYsIGlzRHJhZ2dpbmcgfSA9IHVzZURyYWdnYWJsZSh7XG5cdFx0aWQ6IGVsZW1lbnRJZCxcblx0XHRkYXRhOiB7XG5cdFx0XHRldmVudCxcblx0XHRcdHR5cGU6ICdjYWxlbmRhci1ldmVudCcsXG5cdFx0fSxcblx0XHRkaXNhYmxlZDogZGlzYWJsZURyYWcgfHwgZGlzYWJsZURyYWdBbmREcm9wLFxuXHR9KVxuXG5cdC8vIERlZmF1bHQgZXZlbnQgY29udGVudCB0byByZW5kZXIgaWYgY3VzdG9tIHJlbmRlckV2ZW50IGlzIG5vdCBwcm92aWRlZFxuXHRjb25zdCBEZWZhdWx0RXZlbnRDb250ZW50ID0gKCkgPT4ge1xuXHRcdC8vIENoZWNrIGlmIHRoaXMgZXZlbnQgaGFzIHRydW5jYXRpb24gaW5mb3JtYXRpb25cblx0XHRjb25zdCBlbmhhbmNlZEV2ZW50ID0gZXZlbnQgYXMgdW5rbm93biBhcyB7XG5cdFx0XHRpc1RydW5jYXRlZFN0YXJ0PzogYm9vbGVhblxuXHRcdFx0aXNUcnVuY2F0ZWRFbmQ/OiBib29sZWFuXG5cdFx0fVxuXHRcdGNvbnN0IGlzVHJ1bmNhdGVkU3RhcnQgPSBlbmhhbmNlZEV2ZW50LmlzVHJ1bmNhdGVkU3RhcnRcblx0XHRjb25zdCBpc1RydW5jYXRlZEVuZCA9IGVuaGFuY2VkRXZlbnQuaXNUcnVuY2F0ZWRFbmRcblxuXHRcdHJldHVybiAoXG5cdFx0XHQ8ZGl2XG5cdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0ZXZlbnQuYmFja2dyb3VuZENvbG9yIHx8ICdiZy1ibHVlLTUwMCcsXG5cdFx0XHRcdFx0ZXZlbnQuY29sb3IgfHwgJ3RleHQtd2hpdGUnLFxuXHRcdFx0XHRcdCdoLWZ1bGwgdy1mdWxsIHB4LTEgYm9yZGVyLVsxLjVweF0gYm9yZGVyLWNhcmQgdGV4dC1sZWZ0IG92ZXJmbG93LWNsaXAgcmVsYXRpdmUnLFxuXHRcdFx0XHRcdGdldEJvcmRlclJhZGl1c0NsYXNzKFxuXHRcdFx0XHRcdFx0Qm9vbGVhbihpc1RydW5jYXRlZFN0YXJ0KSxcblx0XHRcdFx0XHRcdEJvb2xlYW4oaXNUcnVuY2F0ZWRFbmQpXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHQpfVxuXHRcdFx0XHRzdHlsZT17eyBiYWNrZ3JvdW5kQ29sb3I6IGV2ZW50LmJhY2tncm91bmRDb2xvciwgY29sb3I6IGV2ZW50LmNvbG9yIH19XG5cdFx0XHQ+XG5cdFx0XHRcdHsvKiBMZWZ0IGNvbnRpbnVhdGlvbiBpbmRpY2F0b3IgKi99XG5cdFx0XHRcdHtpc1RydW5jYXRlZFN0YXJ0ICYmIChcblx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImFic29sdXRlIGxlZnQtMCB0b3AtMCBib3R0b20tMCB3LTAuNSBiZy1mb3JlZ3JvdW5kLzI1XCI+PC9kaXY+XG5cdFx0XHRcdCl9XG5cblx0XHRcdFx0ey8qIEV2ZW50IHRpdGxlICovfVxuXHRcdFx0XHQ8cFxuXHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHQndGV4dC1bMTBweF0gZm9udC1zZW1pYm9sZCBzbTp0ZXh0LXhzIG10LTAuNScsXG5cdFx0XHRcdFx0XHQvLyBBZGQgc2xpZ2h0IHBhZGRpbmcgdG8gYXZvaWQgb3ZlcmxhcCB3aXRoIGluZGljYXRvcnNcblx0XHRcdFx0XHRcdGlzVHJ1bmNhdGVkU3RhcnQgJiYgJ3BsLTEnLFxuXHRcdFx0XHRcdFx0aXNUcnVuY2F0ZWRFbmQgJiYgJ3ByLTEnXG5cdFx0XHRcdFx0KX1cblx0XHRcdFx0PlxuXHRcdFx0XHRcdHtldmVudC50aXRsZX1cblx0XHRcdFx0PC9wPlxuXG5cdFx0XHRcdHsvKiBSaWdodCBjb250aW51YXRpb24gaW5kaWNhdG9yICovfVxuXHRcdFx0XHR7aXNUcnVuY2F0ZWRFbmQgJiYgKFxuXHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiYWJzb2x1dGUgcmlnaHQtMCB0b3AtMCBib3R0b20tMCB3LTAuNSBiZy1mb3JlZ3JvdW5kLzI1XCI+PC9kaXY+XG5cdFx0XHRcdCl9XG5cdFx0XHQ8L2Rpdj5cblx0XHQpXG5cdH1cblxuXHRyZXR1cm4gKFxuXHRcdDxBbmltYXRlZFNlY3Rpb25cblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCd0cnVuY2F0ZSBoLWZ1bGwgdy1mdWxsJyxcblx0XHRcdFx0ZGlzYWJsZURyYWcgfHwgZGlzYWJsZURyYWdBbmREcm9wXG5cdFx0XHRcdFx0PyBkaXNhYmxlRXZlbnRDbGlja1xuXHRcdFx0XHRcdFx0PyAnY3Vyc29yLWRlZmF1bHQnXG5cdFx0XHRcdFx0XHQ6ICdjdXJzb3ItcG9pbnRlcidcblx0XHRcdFx0XHQ6ICdjdXJzb3ItZ3JhYicsXG5cdFx0XHRcdGlzRHJhZ2dpbmcgJiZcblx0XHRcdFx0XHQhKGRpc2FibGVEcmFnIHx8IGRpc2FibGVEcmFnQW5kRHJvcCkgJiZcblx0XHRcdFx0XHQnY3Vyc29yLWdyYWJiaW5nIHNoYWRvdy1sZycsXG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHRcdGxheW91dD17dHJ1ZX1cblx0XHRcdGxheW91dElkPXtlbGVtZW50SWR9XG5cdFx0XHRvbkNsaWNrPXsoZSkgPT4ge1xuXHRcdFx0XHRlLnN0b3BQcm9wYWdhdGlvbigpXG5cdFx0XHRcdG9uRXZlbnRDbGljayhldmVudClcblx0XHRcdH19XG5cdFx0XHRyZWY9e3NldE5vZGVSZWZ9XG5cdFx0XHRzdHlsZT17c3R5bGV9XG5cdFx0XHR0cmFuc2l0aW9uS2V5PXtlbGVtZW50SWR9XG5cdFx0XHR7Li4uYXR0cmlidXRlc31cblx0XHRcdHsuLi5saXN0ZW5lcnN9XG5cdFx0PlxuXHRcdFx0ey8qIFVzZSBjdXN0b20gcmVuZGVyRXZlbnQgZnJvbSBjb250ZXh0IGlmIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIHVzZSBkZWZhdWx0ICovfVxuXHRcdFx0e3JlbmRlckV2ZW50ID8gcmVuZGVyRXZlbnQoZXZlbnQpIDogPERlZmF1bHRFdmVudENvbnRlbnQgLz59XG5cdFx0PC9BbmltYXRlZFNlY3Rpb24+XG5cdClcbn1cblxuZXhwb3J0IGNvbnN0IERyYWdnYWJsZUV2ZW50ID0gbWVtbyhcblx0RHJhZ2dhYmxlRXZlbnRVbm1lbW9pemVkLFxuXHQocHJldlByb3BzLCBuZXh0UHJvcHMpID0+IHtcblx0XHQvLyBDb21wYXJlIHRoZSBlc3NlbnRpYWwgcHJvcHMgdG8gcHJldmVudCB1bm5lY2Vzc2FyeSByZS1yZW5kZXJzXG5cdFx0cmV0dXJuIChcblx0XHRcdHByZXZQcm9wcy5lbGVtZW50SWQgPT09IG5leHRQcm9wcy5lbGVtZW50SWQgJiZcblx0XHRcdHByZXZQcm9wcy5kaXNhYmxlRHJhZyA9PT0gbmV4dFByb3BzLmRpc2FibGVEcmFnICYmXG5cdFx0XHRwcmV2UHJvcHMuY2xhc3NOYW1lID09PSBuZXh0UHJvcHMuY2xhc3NOYW1lICYmXG5cdFx0XHRwcmV2UHJvcHMuZXZlbnQgPT09IG5leHRQcm9wcy5ldmVudFxuXHRcdClcblx0fVxuKVxuIiwKICAgICJpbXBvcnQgeyB1c2VEcm9wcGFibGUgfSBmcm9tICdAZG5kLWtpdC9jb3JlJ1xuaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IENlbGxJbmZvIH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci90eXBlcydcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB0eXBlIHsgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IERJU0FCTEVEX0NFTExfQ0xBU1NOQU1FIH0gZnJvbSAnQC9saWIvY29uc3RhbnRzJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuaW50ZXJmYWNlIERyb3BwYWJsZUNlbGxQcm9wcyB7XG5cdGlkOiBzdHJpbmdcblx0dHlwZTogJ2RheS1jZWxsJyB8ICd0aW1lLWNlbGwnXG5cdGRhdGU6IERheWpzXG5cdGhvdXI/OiBudW1iZXJcblx0bWludXRlPzogbnVtYmVyXG5cdHJlc291cmNlSWQ/OiBzdHJpbmcgfCBudW1iZXJcblx0YWxsRGF5PzogYm9vbGVhblxuXHRjaGlsZHJlbj86IFJlYWN0LlJlYWN0Tm9kZVxuXHRjbGFzc05hbWU/OiBzdHJpbmdcblx0c3R5bGU/OiBSZWFjdC5DU1NQcm9wZXJ0aWVzXG5cdCdkYXRhLXRlc3RpZCc/OiBzdHJpbmdcblx0ZGlzYWJsZWQ/OiBib29sZWFuXG59XG5cbi8qKlxuICogVGhlIHRpbWUgc3BhbiBhIGNlbGwgcmVwcmVzZW50cy4gR3JhbnVsYXJpdHkgZm9sbG93cyB0aGUgdmlldzogYSAxNS1taW51dGVcbiAqIHNsb3QgKGRheSksIGEgb25lLWhvdXIgc2xvdCAod2VlayksIG9yIHRoZSB3aG9sZSBkYXkgKG1vbnRoKS5cbiAqL1xuZnVuY3Rpb24gZ2V0Q2VsbFJhbmdlKFxuXHRkYXRlOiBEYXlqcyxcblx0aG91cj86IG51bWJlcixcblx0bWludXRlPzogbnVtYmVyXG4pOiB7IHN0YXJ0OiBEYXlqczsgZW5kOiBEYXlqcyB9IHtcblx0Y29uc3Qgc3RhcnQgPSBkYXRlLmhvdXIoaG91ciA/PyAwKS5taW51dGUobWludXRlID8/IDApXG5cblx0aWYgKGhvdXIgIT09IHVuZGVmaW5lZCAmJiBtaW51dGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiB7IHN0YXJ0LCBlbmQ6IHN0YXJ0Lm1pbnV0ZShtaW51dGUgKyAxNSkgfVxuXHR9XG5cdGlmIChob3VyICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4geyBzdGFydCwgZW5kOiBzdGFydC5ob3VyKGhvdXIgKyAxKS5taW51dGUoMCkgfVxuXHR9XG5cdHJldHVybiB7IHN0YXJ0LCBlbmQ6IHN0YXJ0LmhvdXIoMjMpLm1pbnV0ZSg1OSkgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gRHJvcHBhYmxlQ2VsbCh7XG5cdGlkLFxuXHR0eXBlLFxuXHRkYXRlLFxuXHRob3VyLFxuXHRtaW51dGUsXG5cdHJlc291cmNlSWQsXG5cdGFsbERheSxcblx0Y2hpbGRyZW4sXG5cdGNsYXNzTmFtZSxcblx0c3R5bGUsXG5cdCdkYXRhLXRlc3RpZCc6IGRhdGFUZXN0SWQsXG5cdGRpc2FibGVkID0gZmFsc2UsXG59OiBEcm9wcGFibGVDZWxsUHJvcHMpIHtcblx0Y29uc3Qge1xuXHRcdG9uQ2VsbENsaWNrLFxuXHRcdGlzQ2VsbERpc2FibGVkLFxuXHRcdGdldFJlc291cmNlQnlJZCxcblx0XHRkaXNhYmxlRHJhZ0FuZERyb3AsXG5cdFx0ZGlzYWJsZUNlbGxDbGljayxcblx0XHRjbGFzc2VzT3ZlcnJpZGUsXG5cdFx0dmlldyxcblx0fSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblxuXHRjb25zdCB7IHN0YXJ0LCBlbmQgfSA9IGdldENlbGxSYW5nZShkYXRlLCBob3VyLCBtaW51dGUpXG5cdC8vIGBnZXRSZXNvdXJjZUJ5SWRgIGlzIG9ubHkgcHJlc2VudCBvbiByZXNvdXJjZSBjYWxlbmRhcnM7IHJlZ3VsYXIgY2FsZW5kYXJzIHJlc29sdmUgdG8gdW5kZWZpbmVkLlxuXHRjb25zdCByZXNvdXJjZSA9IGdldFJlc291cmNlQnlJZD8uKHJlc291cmNlSWQpXG5cdGNvbnN0IGNlbGxJbmZvOiBDZWxsSW5mbyA9IHsgc3RhcnQsIGVuZCwgcmVzb3VyY2UsIGFsbERheSB9XG5cblx0Ly8gRGlzYWJsZWQgYnkgYnVzaW5lc3MgaG91cnMgKGBkaXNhYmxlZGAgcHJvcCkgb3IgdGhlIGNvbnN1bWVyJ3MgcHJlZGljYXRlLlxuXHRjb25zdCBjZWxsRGlzYWJsZWQgPSBkaXNhYmxlZCB8fCBCb29sZWFuKGlzQ2VsbERpc2FibGVkPy4oY2VsbEluZm8pKVxuXHRjb25zdCBjbGlja0Jsb2NrZWQgPSBkaXNhYmxlQ2VsbENsaWNrIHx8IGNlbGxEaXNhYmxlZFxuXG5cdGNvbnN0IHsgaXNPdmVyLCBzZXROb2RlUmVmIH0gPSB1c2VEcm9wcGFibGUoe1xuXHRcdGlkLFxuXHRcdGRhdGE6IHsgdHlwZSwgZGF0ZSwgaG91ciwgbWludXRlLCByZXNvdXJjZUlkLCBhbGxEYXkgfSxcblx0XHRkaXNhYmxlZDogZGlzYWJsZURyYWdBbmREcm9wIHx8IGNlbGxEaXNhYmxlZCxcblx0fSlcblxuXHRjb25zdCBoYW5kbGVDZWxsQ2xpY2sgPSAoZTogUmVhY3QuTW91c2VFdmVudCkgPT4ge1xuXHRcdGUuc3RvcFByb3BhZ2F0aW9uKClcblx0XHRpZiAoY2xpY2tCbG9ja2VkKSB7XG5cdFx0XHRyZXR1cm5cblx0XHR9XG5cdFx0b25DZWxsQ2xpY2soY2VsbEluZm8pXG5cdH1cblxuXHRjb25zdCBzaG93RHJvcEhpZ2hsaWdodCA9IGlzT3ZlciAmJiAhZGlzYWJsZURyYWdBbmREcm9wICYmICFjZWxsRGlzYWJsZWRcblx0Y29uc3QgZGlzYWJsZWRDbGFzcyA9IGNsYXNzZXNPdmVycmlkZT8uZGlzYWJsZWRDZWxsIHx8IERJU0FCTEVEX0NFTExfQ0xBU1NOQU1FXG5cblx0cmV0dXJuIChcblx0XHQvLyBiaW9tZS1pZ25vcmUgbGludC9hMTF5L25vU3RhdGljRWxlbWVudEludGVyYWN0aW9uczogVGhlIGNlbGwgaXMgaW50ZXJhY3RpdmUgZm9yIGV2ZW50IGNyZWF0aW9uXG5cdFx0Ly8gYmlvbWUtaWdub3JlIGxpbnQvYTExeS91c2VLZXlXaXRoQ2xpY2tFdmVudHM6IEtleSBldmVudHMgYXJlIGhhbmRsZWQgYnkgcGFyZW50IGNvbXBvbmVudHNcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQnZHJvcHBhYmxlLWNlbGwnLFxuXHRcdFx0XHRjbGFzc05hbWUsXG5cdFx0XHRcdHNob3dEcm9wSGlnaGxpZ2h0ICYmICdiZy1hY2NlbnQnLFxuXHRcdFx0XHRjbGlja0Jsb2NrZWQgPyAnY3Vyc29yLWRlZmF1bHQnIDogJ2N1cnNvci1wb2ludGVyJyxcblx0XHRcdFx0Y2VsbERpc2FibGVkICYmIGRpc2FibGVkQ2xhc3Ncblx0XHRcdCl9XG5cdFx0XHRkYXRhLWRpc2FibGVkPXtjZWxsRGlzYWJsZWQudG9TdHJpbmcoKX1cblx0XHRcdGRhdGEtdGVzdGlkPXtkYXRhVGVzdElkfVxuXHRcdFx0ZGF0YS12aWV3PXt2aWV3fVxuXHRcdFx0b25DbGljaz17aGFuZGxlQ2VsbENsaWNrfVxuXHRcdFx0cmVmPXtzZXROb2RlUmVmfVxuXHRcdFx0c3R5bGU9e3N0eWxlfVxuXHRcdD5cblx0XHRcdHtjaGlsZHJlbn1cblx0XHQ8L2Rpdj5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSB7IFJlc291cmNlIH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci90eXBlcydcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmludGVyZmFjZSBSZXNvdXJjZUNlbGxQcm9wcyB7XG5cdHJlc291cmNlOiBSZXNvdXJjZVxuXHRjbGFzc05hbWU/OiBzdHJpbmdcblx0Y2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGVcblx0J2RhdGEtdGVzdGlkJz86IHN0cmluZ1xufVxuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VDZWxsOiBSZWFjdC5GQzxSZXNvdXJjZUNlbGxQcm9wcz4gPSAoe1xuXHRyZXNvdXJjZSxcblx0Y2xhc3NOYW1lLFxuXHRjaGlsZHJlbixcblx0J2RhdGEtdGVzdGlkJzogZGF0YVRlc3RJZCxcbn0pID0+IHtcblx0Y29uc3QgeyByZW5kZXJSZXNvdXJjZSB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0J2ZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHAtMiBib3JkZXItciBsYXN0OmJvcmRlci1yLTAnLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXRlc3RpZD17ZGF0YVRlc3RJZH1cblx0XHRcdHN0eWxlPXt7XG5cdFx0XHRcdGNvbG9yOiByZXNvdXJjZS5jb2xvcixcblx0XHRcdFx0YmFja2dyb3VuZENvbG9yOiByZXNvdXJjZS5iYWNrZ3JvdW5kQ29sb3IsXG5cdFx0XHR9fVxuXHRcdD5cblx0XHRcdHtyZW5kZXJSZXNvdXJjZVxuXHRcdFx0XHQ/IHJlbmRlclJlc291cmNlKHJlc291cmNlKVxuXHRcdFx0XHQ6IChjaGlsZHJlbiA/PyAoXG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gZm9udC1tZWRpdW0gdHJ1bmNhdGVcIj57cmVzb3VyY2UudGl0bGV9PC9kaXY+XG5cdFx0XHRcdFx0KSl9XG5cdFx0PC9kaXY+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHsgbWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQ3VycmVudFRpbWVJbmRpY2F0b3IgfSBmcm9tICdAL2NvbXBvbmVudHMvY3VycmVudC10aW1lLWluZGljYXRvcidcbmltcG9ydCB7IERyYWdnYWJsZUV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL2RyYWdnYWJsZS1ldmVudC9kcmFnZ2FibGUtZXZlbnQnXG5pbXBvcnQgdHlwZSB7IFJlc291cmNlIH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci90eXBlcydcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB0eXBlIHsgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGtleXMgfSBmcm9tICdAL2xpYi91dGlscy9rZXlzJ1xuaW1wb3J0IHR5cGUgeyBQb3NpdGlvbmVkRXZlbnQgfSBmcm9tICdAL2xpYi91dGlscy9wb3NpdGlvbi13ZWVrLWV2ZW50cydcblxuZXhwb3J0IGludGVyZmFjZSBIb3Jpem9udGFsR3JpZEV2ZW50c0xheWVyUHJvcHMge1xuXHRncmlkVHlwZT86ICdkYXknIHwgJ2hvdXInXG5cdGRheXM6IERheWpzW11cblx0cmVzb3VyY2VJZD86IHN0cmluZyB8IG51bWJlclxuXHRyZXNvdXJjZT86IFJlc291cmNlXG5cdCdkYXRhLXRlc3RpZCc/OiBzdHJpbmdcblx0cG9zaXRpb25lZEV2ZW50czogUG9zaXRpb25lZEV2ZW50W11cbn1cblxuY29uc3QgTm9NZW1vSG9yaXpvbnRhbEdyaWRFdmVudHNMYXllcjogUmVhY3QuRkM8XG5cdEhvcml6b250YWxHcmlkRXZlbnRzTGF5ZXJQcm9wc1xuPiA9ICh7XG5cdGdyaWRUeXBlID0gJ2RheScsXG5cdGRheXMsXG5cdHJlc291cmNlSWQsXG5cdHJlc291cmNlLFxuXHQnZGF0YS10ZXN0aWQnOiBkYXRhVGVzdElkLFxuXHRwb3NpdGlvbmVkRXZlbnRzLFxufSkgPT4ge1xuXHRjb25zdCB7IGV2ZW50SGVpZ2h0IH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cdGNvbnN0IHdlZWtTdGFydCA9IGRheXMuYXQoMCk/LnN0YXJ0T2YoJ2RheScpXG5cblx0Ly8gTm93LWxpbmUgaXMgZ2F0ZWQgdG8gaG91ci1yZXNvbHV0aW9uIGhvcml6b250YWwgZ3JpZHMgKHJlc291cmNlIGRheSBob3Jpem9udGFsLFxuXHQvLyByZXNvdXJjZSB3ZWVrIGhvcml6b250YWwgaG91cmx5KS4gRGF5LXJlc29sdXRpb24gZ3JpZHMg4oCUIHJlZ3VsYXIgTW9udGhWaWV3IGFuZFxuXHQvLyByZXNvdXJjZSBNb250aFZpZXcg4oCUIHNraXAgaXQ7IGEgMjRoLXBlcmNlbnRhZ2UgbGluZSBwZXIgY2VsbCB3b3VsZCBiZSBhXG5cdC8vIG1lYW5pbmdsZXNzIDFweCBzbGl2ZXIuXG5cdGNvbnN0IHJhbmdlU3RhcnQgPSBkYXlzLmF0KDApXG5cdGNvbnN0IHJhbmdlRW5kID0gZGF5cy5hdCgtMSk/LmFkZCgxLCBncmlkVHlwZSlcblx0Y29uc3Qgc2hvd05vd0xpbmUgPSBncmlkVHlwZSA9PT0gJ2hvdXInICYmIEJvb2xlYW4ocmFuZ2VTdGFydCAmJiByYW5nZUVuZClcblxuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT1cImFic29sdXRlIGluc2V0LTAgcG9pbnRlci1ldmVudHMtbm9uZSB6LTEwIG92ZXJmbG93LWNsaXBcIlxuXHRcdFx0ZGF0YS10ZXN0aWQ9e2RhdGFUZXN0SWR9XG5cdFx0PlxuXHRcdFx0e3Nob3dOb3dMaW5lICYmIHJhbmdlU3RhcnQgJiYgcmFuZ2VFbmQgJiYgKFxuXHRcdFx0XHQ8Q3VycmVudFRpbWVJbmRpY2F0b3Jcblx0XHRcdFx0XHRheGlzPVwiaG9yaXpvbnRhbFwiXG5cdFx0XHRcdFx0cmFuZ2VFbmQ9e3JhbmdlRW5kfVxuXHRcdFx0XHRcdHJhbmdlU3RhcnQ9e3JhbmdlU3RhcnR9XG5cdFx0XHRcdFx0cmVzb3VyY2U9e3Jlc291cmNlfVxuXHRcdFx0XHQvPlxuXHRcdFx0KX1cblx0XHRcdHtwb3NpdGlvbmVkRXZlbnRzLm1hcCgoZXZlbnQpID0+IHtcblx0XHRcdFx0Y29uc3QgZXZlbnRLZXkgPSBgJHtldmVudC5pZH0tJHtldmVudC5wb3NpdGlvbn0tJHt3ZWVrU3RhcnQ/LnRvSVNPU3RyaW5nKCl9LSR7cmVzb3VyY2VJZCA/PyAnbm8tcmVzb3VyY2UnfWBcblxuXHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImFic29sdXRlIHotMTAgcG9pbnRlci1ldmVudHMtYXV0byBvdmVyZmxvdy1jbGlwXCJcblx0XHRcdFx0XHRcdGRhdGEtbGVmdD17ZXZlbnQubGVmdH1cblx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPXtrZXlzLmNvbnRhaW5lci5ob3Jpem9udGFsLmV2ZW50KGV2ZW50LmlkKX1cblx0XHRcdFx0XHRcdGRhdGEtdG9wPXtldmVudC50b3B9XG5cdFx0XHRcdFx0XHRkYXRhLXdpZHRoPXtldmVudC53aWR0aH1cblx0XHRcdFx0XHRcdGtleT17a2V5cy5saXN0S2V5KGV2ZW50S2V5LCAnd3JhcHBlcicpfVxuXHRcdFx0XHRcdFx0c3R5bGU9e3tcblx0XHRcdFx0XHRcdFx0bGVmdDogYGNhbGMoJHtldmVudC5sZWZ0fSUgKyB2YXIoLS1zcGFjaW5nKSAqIDAuMjUpYCxcblx0XHRcdFx0XHRcdFx0d2lkdGg6IGBjYWxjKCR7ZXZlbnQud2lkdGh9JSAtIHZhcigtLXNwYWNpbmcpICogMSlgLFxuXHRcdFx0XHRcdFx0XHR0b3A6IGAke2V2ZW50LnRvcH1weGAsXG5cdFx0XHRcdFx0XHRcdGhlaWdodDogYCR7ZXZlbnRIZWlnaHR9cHhgLFxuXHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHQ8RHJhZ2dhYmxlRXZlbnRcblx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiaC1mdWxsIHctZnVsbCBzaGFkb3dcIlxuXHRcdFx0XHRcdFx0XHRlbGVtZW50SWQ9e2V2ZW50S2V5fVxuXHRcdFx0XHRcdFx0XHRldmVudD17ZXZlbnR9XG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQpXG5cdFx0XHR9KX1cblx0XHQ8L2Rpdj5cblx0KVxufVxuXG5leHBvcnQgY29uc3QgSG9yaXpvbnRhbEdyaWRFdmVudHNMYXllciA9IG1lbW8oTm9NZW1vSG9yaXpvbnRhbEdyaWRFdmVudHNMYXllcilcbiIsCiAgICAiaW1wb3J0IHsgbWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBSZXNvdXJjZSB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvdHlwZXMnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSB7IERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5cbmludGVyZmFjZSBDdXJyZW50VGltZUluZGljYXRvclByb3BzIHtcblx0LyoqIFRoZSBzdGFydCBkYXRlL3RpbWUgb2YgdGhlIGNvbnRhaW5lcidzIHRpbWVsaW5lIChlLmcuLCB0b3Agb2YgdGhlIGNvbHVtbikgKi9cblx0cmFuZ2VTdGFydDogRGF5anNcblx0LyoqIFRoZSBlbmQgZGF0ZS90aW1lIG9mIHRoZSBjb250YWluZXIncyB0aW1lbGluZSAoZS5nLiwgYm90dG9tIG9mIHRoZSBjb2x1bW4pICovXG5cdHJhbmdlRW5kOiBEYXlqc1xuXHQvKiogT3B0aW9uYWwgcmVmZXJlbmNlIHRpbWUgZm9yIFwibm93XCIgKHVzZWZ1bCBmb3IgdGVzdGluZykgKi9cblx0bm93PzogRGF5anNcblx0LyoqIFRoZSByZXNvdXJjZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBjb2x1bW4gKG9wdGlvbmFsKSAqL1xuXHRyZXNvdXJjZT86IFJlc291cmNlXG5cdC8qKlxuXHQgKiBMYXlvdXQgYXhpcyB0aGUgaW5kaWNhdG9yIGlzIHJlbmRlcmVkIGFsb25nLiBEZWZhdWx0cyB0byBgJ3ZlcnRpY2FsJ2AuXG5cdCAqIC0gYCd2ZXJ0aWNhbCdgOiBob3Jpem9udGFsIGxpbmUgcG9zaXRpb25lZCBieSBgdG9wOiB7cHJvZ3Jlc3N9JWAgKGRheS93ZWVrIHZlcnRpY2FsIGdyaWRzKS5cblx0ICogLSBgJ2hvcml6b250YWwnYDogdmVydGljYWwgbGluZSBwb3NpdGlvbmVkIGJ5IGBsZWZ0OiB7cHJvZ3Jlc3N9JWAgKGhvcml6b250YWwgcmVzb3VyY2UgaG91ciBncmlkcykuXG5cdCAqL1xuXHRheGlzPzogJ3ZlcnRpY2FsJyB8ICdob3Jpem9udGFsJ1xufVxuXG4vKipcbiAqIFJlbmRlcnMgYSByZWQgbWFya2VyIGluZGljYXRpbmcgdGhlIGN1cnJlbnQgdGltZSByZWxhdGl2ZSB0byBhIGNvbnRhaW5lcidzIHRpbWVsaW5lLlxuICogSGlkZXMgaXRzZWxmIHdoZW4gYG5vd2AgaXMgb3V0c2lkZSB0aGUgcmFuZ2UuIFN3aXRjaGVzIG9yaWVudGF0aW9uIHZpYSB0aGUgYGF4aXNgIHByb3Ag4oCUXG4gKiB2ZXJ0aWNhbCAoZGVmYXVsdCkgZHJhd3MgYSBob3Jpem9udGFsIGxpbmUgZm9yIHZlcnRpY2FsIGdyaWRzOyBob3Jpem9udGFsIGRyYXdzIGEgdmVydGljYWxcbiAqIGxpbmUgZm9yIGhvcml6b250YWwgcmVzb3VyY2UgaG91ciBncmlkcy4gU3VwcG9ydHMgY3VzdG9tIHJlbmRlcmluZyB2aWFcbiAqIGByZW5kZXJDdXJyZW50VGltZUluZGljYXRvcmAgZnJvbSBjb250ZXh0LlxuICovXG5jb25zdCBOb01lbW9DdXJyZW50VGltZUluZGljYXRvciA9ICh7XG5cdHJhbmdlU3RhcnQsXG5cdHJhbmdlRW5kLFxuXHRub3c6IHByb3BOb3csXG5cdHJlc291cmNlLFxuXHRheGlzID0gJ3ZlcnRpY2FsJyxcbn06IEN1cnJlbnRUaW1lSW5kaWNhdG9yUHJvcHMpID0+IHtcblx0Ly8gR2V0IHJlbmRlciBmdW5jdGlvbiBhbmQgY3VycmVudCB2aWV3IGZyb20gY29udGV4dFxuXHRjb25zdCB7IHJlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yLCB2aWV3IH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dChcblx0XHQoc3RhdGUpID0+ICh7XG5cdFx0XHRyZW5kZXJDdXJyZW50VGltZUluZGljYXRvcjogc3RhdGUucmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3IsXG5cdFx0XHR2aWV3OiBzdGF0ZS52aWV3LFxuXHRcdH0pXG5cdClcblxuXHRjb25zdCBub3cgPSBwcm9wTm93ID8/IGRheWpzKClcblxuXHQvLyBDaGVjayBpZiBjdXJyZW50IHRpbWUgZmFsbHMgd2l0aGluIHRoaXMgcmFuZ2Vcblx0Y29uc3QgaXNXaXRoaW5SYW5nZSA9IG5vdy5pc1NhbWVPckFmdGVyKHJhbmdlU3RhcnQpICYmIG5vdy5pc0JlZm9yZShyYW5nZUVuZClcblxuXHRpZiAoIWlzV2l0aGluUmFuZ2UpIHtcblx0XHRyZXR1cm4gbnVsbFxuXHR9XG5cblx0Y29uc3QgdG90YWxEdXJhdGlvbiA9IHJhbmdlRW5kLmRpZmYocmFuZ2VTdGFydCwgJ21pbnV0ZScpXG5cdGNvbnN0IG1pbnV0ZXNGcm9tU3RhcnQgPSBub3cuZGlmZihyYW5nZVN0YXJ0LCAnbWludXRlJylcblx0Y29uc3QgcHJvZ3Jlc3MgPSAobWludXRlc0Zyb21TdGFydCAvIHRvdGFsRHVyYXRpb24pICogMTAwXG5cblx0Ly8gSWYgY3VzdG9tIHJlbmRlciBmdW5jdGlvbiBpcyBwcm92aWRlZCB2aWEgY29udGV4dCwgdXNlIGl0XG5cdGlmIChyZW5kZXJDdXJyZW50VGltZUluZGljYXRvcikge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8PlxuXHRcdFx0XHR7cmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3Ioe1xuXHRcdFx0XHRcdGN1cnJlbnRUaW1lOiBub3csXG5cdFx0XHRcdFx0cmFuZ2VTdGFydCxcblx0XHRcdFx0XHRyYW5nZUVuZCxcblx0XHRcdFx0XHRwcm9ncmVzcyxcblx0XHRcdFx0XHRyZXNvdXJjZSxcblx0XHRcdFx0XHR2aWV3LFxuXHRcdFx0XHRcdGF4aXMsXG5cdFx0XHRcdH0pfVxuXHRcdFx0PC8+XG5cdFx0KVxuXHR9XG5cblx0Ly8gRGVmYXVsdCBpbmRpY2F0b3IgcmVuZGVyaW5nXG5cdGlmIChheGlzID09PSAnaG9yaXpvbnRhbCcpIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PGRpdlxuXHRcdFx0XHRjbGFzc05hbWU9XCJhYnNvbHV0ZSB0b3AtMCBib3R0b20tMCB3LTAuNSBiZy1yZWQtNTAwIHotNTAgcG9pbnRlci1ldmVudHMtbm9uZVwiXG5cdFx0XHRcdGRhdGEtdGVzdGlkPVwiY3VycmVudC10aW1lLWluZGljYXRvclwiXG5cdFx0XHRcdHN0eWxlPXt7XG5cdFx0XHRcdFx0bGVmdDogYCR7cHJvZ3Jlc3N9JWAsXG5cdFx0XHRcdH19XG5cdFx0XHQvPlxuXHRcdClcblx0fVxuXG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPVwiYWJzb2x1dGUgbGVmdC0wIHJpZ2h0LTAgaC0wLjUgYmctcmVkLTUwMCB6LTUwIHBvaW50ZXItZXZlbnRzLW5vbmVcIlxuXHRcdFx0ZGF0YS10ZXN0aWQ9XCJjdXJyZW50LXRpbWUtaW5kaWNhdG9yXCJcblx0XHRcdHN0eWxlPXt7XG5cdFx0XHRcdHRvcDogYCR7cHJvZ3Jlc3N9JWAsXG5cdFx0XHR9fVxuXHRcdC8+XG5cdClcbn1cblxuZXhwb3J0IGNvbnN0IEN1cnJlbnRUaW1lSW5kaWNhdG9yID0gbWVtbyhOb01lbW9DdXJyZW50VGltZUluZGljYXRvcilcbiIsCiAgICAiaW1wb3J0IHsgbWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuaW50ZXJmYWNlIEFsbERheUNlbGxQcm9wcyB7XG5cdGNsYXNzTmFtZT86IHN0cmluZ1xufVxuXG5jb25zdCBOb01lbW9BbGxEYXlDZWxsOiBSZWFjdC5GQzxBbGxEYXlDZWxsUHJvcHM+ID0gKHsgY2xhc3NOYW1lIH0pID0+IHtcblx0Y29uc3QgeyB0IH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0J3ctMTYgYm9yZGVyLXIgc2hyaW5rLTAgc3RpY2t5IGxlZnQtMCBiZy1iYWNrZ3JvdW5kIHotMjAgZmxleCBib3JkZXItYiBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcHgtMSB0ZXh0LXhzIHRleHQtbXV0ZWQtZm9yZWdyb3VuZCcsXG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHQ+XG5cdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJ0cnVuY2F0ZVwiPnt0KCdhbGxEYXknKX08L3NwYW4+XG5cdFx0PC9kaXY+XG5cdClcbn1cblxuZXhwb3J0IGNvbnN0IEFsbERheUNlbGwgPSBtZW1vKE5vTWVtb0FsbERheUNlbGwpXG4iLAogICAgImltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB0eXBlIHsgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcblxuaW50ZXJmYWNlIEhvdXJMYWJlbFByb3BzIHtcblx0ZGF0ZTogRGF5anNcbn1cblxuZXhwb3J0IGNvbnN0IEhvdXJMYWJlbDogUmVhY3QuRkM8SG91ckxhYmVsUHJvcHM+ID0gKHsgZGF0ZSB9KSA9PiB7XG5cdGNvbnN0IHsgcmVuZGVySG91ciwgdGltZUZvcm1hdCB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXG5cdGlmIChyZW5kZXJIb3VyKSB7XG5cdFx0cmV0dXJuIDw+e3JlbmRlckhvdXIoZGF0ZSl9PC8+XG5cdH1cblxuXHRyZXR1cm4gPD57ZGF0ZS5mb3JtYXQodGltZUZvcm1hdCA9PT0gJzEyLWhvdXInID8gJ2ggQScgOiAnSCcpfTwvPlxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZVJlZiB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgU2Nyb2xsQXJlYSwgU2Nyb2xsQmFyIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL3Njcm9sbC1hcmVhJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IGtleXMgfSBmcm9tICdAL2xpYi91dGlscy9rZXlzJ1xuaW1wb3J0IHsgdXNlU2Nyb2xsVG9UaW1lIH0gZnJvbSAnLi91c2Utc2Nyb2xsLXRvLXRpbWUnXG5pbXBvcnQgeyBWZXJ0aWNhbEdyaWRDb2wsIHR5cGUgVmVydGljYWxHcmlkQ29sUHJvcHMgfSBmcm9tICcuL3ZlcnRpY2FsLWdyaWQtY29sJ1xuaW1wb3J0IHsgVmVydGljYWxHcmlkSGVhZGVyQ29udGFpbmVyIH0gZnJvbSAnLi92ZXJ0aWNhbC1ncmlkLWhlYWRlci1jb250YWluZXInXG5cbmludGVyZmFjZSBWZXJ0aWNhbEdyaWRQcm9wcyB7XG5cdGNvbHVtbnM6IFZlcnRpY2FsR3JpZENvbFByb3BzW11cblx0Y2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGVcblx0Z3JpZFR5cGU/OiAnZGF5JyB8ICdob3VyJ1xuXHR2YXJpYW50PzogJ3JlZ3VsYXInIHwgJ3Jlc291cmNlJ1xuXHRjbGFzc2VzPzogeyBoZWFkZXI/OiBzdHJpbmc7IGJvZHk/OiBzdHJpbmc7IGFsbERheT86IHN0cmluZyB9XG5cdGFsbERheVJvdz86IFJlYWN0LlJlYWN0Tm9kZVxuXHQvKipcblx0ICogR3JhbnVsYXJpdHkgb2YgZWFjaCBob3VyIHJvdyBpbiBtaW51dGVzLiBGb3J3YXJkZWQgdG8gVmVydGljYWxHcmlkQ29sLlxuXHQgKi9cblx0c2xvdER1cmF0aW9uTWludXRlcz86IG51bWJlclxuXHRzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXNcbn1cblxuZXhwb3J0IGNvbnN0IFZlcnRpY2FsR3JpZDogUmVhY3QuRkM8VmVydGljYWxHcmlkUHJvcHM+ID0gKHtcblx0Y29sdW1ucyxcblx0Y2hpbGRyZW4sXG5cdGdyaWRUeXBlID0gJ2RheScsXG5cdHZhcmlhbnQgPSAncmVzb3VyY2UnLFxuXHRjbGFzc2VzLFxuXHRhbGxEYXlSb3csXG5cdHNsb3REdXJhdGlvbk1pbnV0ZXMsXG5cdHN0eWxlLFxufSkgPT4ge1xuXHRjb25zdCBpc1Jlc291cmNlQ2FsZW5kYXIgPSB2YXJpYW50ID09PSAncmVzb3VyY2UnXG5cdGNvbnN0IGlzUmVndWxhckNhbGVuZGFyID0gIWlzUmVzb3VyY2VDYWxlbmRhclxuXHQvLyBUcmlnZ2VyZWQgd2hlbiBgaGlkZU5vbkJ1c2luZXNzSG91cnNgIGZpbHRlcnMgZXZlcnkgY29sdW1uIHRvIHplcm8gaG91cnNcblx0Ly8gKGUuZy4gYnVzaW5lc3MgaG91cnMgYHN0YXJ0VGltZTogMCwgZW5kVGltZTogMGApLiBUaGUgYWxsLWRheSByb3cgdGFrZXNcblx0Ly8gdGhlIGZyZWVkIHZlcnRpY2FsIHNwYWNlIHNvIHRoZSB2aWV3IGRvZXNuJ3QgcmVuZGVyIGFuIGVtcHR5IHRpbWUgZ3JpZC5cblx0Y29uc3QgZXhwYW5kQWxsRGF5Um93ID0gY29sdW1ucy5ldmVyeSgoYykgPT4gIWMuZGF5cz8ubGVuZ3RoKVxuXG5cdGNvbnN0IHsgY3VycmVudERhdGUsIHZpZXcsIHNjcm9sbFRpbWUgfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblx0Y29uc3Qgdmlld3BvcnRSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQgfCBudWxsPihudWxsKVxuXG5cdGNvbnN0IGhhc0hvdXJzVG9TY3JvbGwgPSBncmlkVHlwZSA9PT0gJ2hvdXInICYmICFleHBhbmRBbGxEYXlSb3dcblxuXHR1c2VTY3JvbGxUb1RpbWUoe1xuXHRcdHZpZXdwb3J0UmVmLFxuXHRcdHNjcm9sbFRpbWUsXG5cdFx0ZW5hYmxlZDogaGFzSG91cnNUb1Njcm9sbCxcblx0XHRzY3JvbGxLZXk6IGAke3ZpZXd9LSR7Y3VycmVudERhdGUuZm9ybWF0KCdZWVlZLU1NLUREJyl9YCxcblx0fSlcblxuXHRjb25zdCBoZWFkZXIgPSBjaGlsZHJlbiAmJiAoXG5cdFx0PFZlcnRpY2FsR3JpZEhlYWRlckNvbnRhaW5lclxuXHRcdFx0YWxsRGF5Um93PXthbGxEYXlSb3d9XG5cdFx0XHRjbGFzc2VzPXt7IGhlYWRlcjogY2xhc3Nlcz8uaGVhZGVyLCBhbGxEYXk6IGNsYXNzZXM/LmFsbERheSB9fVxuXHRcdFx0ZXhwYW5kQWxsRGF5Um93PXtleHBhbmRBbGxEYXlSb3d9XG5cdFx0PlxuXHRcdFx0e2NoaWxkcmVufVxuXHRcdDwvVmVydGljYWxHcmlkSGVhZGVyQ29udGFpbmVyPlxuXHQpXG5cblx0Ly8gV2hlbiBhbGwgY29sdW1ucyBhcmUgZW1wdHkgKG5vIGhvdXJzIHRvIGRpc3BsYXkpLCBza2lwIHRoZSBTY3JvbGxBcmVhXG5cdC8vIGVudGlyZWx5IHNvIHRoZSBoZWFkZXIgKHdpdGggdGhlIGV4cGFuZGVkIGFsbC1kYXkgcm93KSB0YWtlcyB0aGUgZnVsbFxuXHQvLyBjb250YWluZXIgaGVpZ2h0LiBoLWZ1bGwgb24gYSBmbGV4IGNoaWxkIG9ubHkgcmVzb2x2ZXMgY29ycmVjdGx5IGFnYWluc3Rcblx0Ly8gYSBwYXJlbnQgd2l0aCBhIGRlZmluaXRlIGhlaWdodCwgYW5kIFJhZGl4J3MgVmlld3BvcnQgd3JhcHBlciBoYXMgb25seVxuXHQvLyBtaW4taGVpZ2h0IChub3QgZXhwbGljaXQgaGVpZ2h0KSwgd2hpY2ggaXMgd2h5IHRoZSBhbGwtZGF5IHJvdydzXG5cdC8vIGZsZXgtMSB3b3VsZG4ndCBncm93IHdoZW4gbmVzdGVkIGluc2lkZSB0aGUgU2Nyb2xsQXJlYS5cblx0aWYgKGV4cGFuZEFsbERheVJvdyAmJiBoZWFkZXIpIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PGRpdlxuXHRcdFx0XHRjbGFzc05hbWU9XCJoLWZ1bGwgZmxleCBmbGV4LWNvbFwiXG5cdFx0XHRcdGRhdGEtdGVzdGlkPVwidmVydGljYWwtZ3JpZC1jb250YWluZXJcIlxuXHRcdFx0XHRzdHlsZT17c3R5bGV9XG5cdFx0XHQ+XG5cdFx0XHRcdHtoZWFkZXJ9XG5cdFx0XHQ8L2Rpdj5cblx0XHQpXG5cdH1cblxuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT1cImgtZnVsbCBmbGV4IGZsZXgtY29sXCJcblx0XHRcdGRhdGEtdGVzdGlkPVwidmVydGljYWwtZ3JpZC1jb250YWluZXJcIlxuXHRcdFx0c3R5bGU9e3N0eWxlfVxuXHRcdD5cblx0XHRcdHsvKiBoZWFkZXIgcm93ICovfVxuXHRcdFx0e2lzUmVndWxhckNhbGVuZGFyICYmIGhlYWRlcn1cblxuXHRcdFx0PFNjcm9sbEFyZWFcblx0XHRcdFx0Y2xhc3NOYW1lPXtjbignaC1mdWxsJywgaXNSZWd1bGFyQ2FsZW5kYXIgJiYgJ292ZXJmbG93LWF1dG8nKX1cblx0XHRcdFx0ZGF0YS10ZXN0aWQ9XCJ2ZXJ0aWNhbC1ncmlkLXNjcm9sbFwiXG5cdFx0XHRcdHZpZXdQb3J0UHJvcHM9e3tcblx0XHRcdFx0XHRjbGFzc05hbWU6ICcqOmZsZXghICo6ZmxleC1jb2whICo6bWluLWgtZnVsbCcsXG5cdFx0XHRcdFx0cmVmOiB2aWV3cG9ydFJlZixcblx0XHRcdFx0fX1cblx0XHRcdD5cblx0XHRcdFx0ey8qIGhlYWRlciByb3cgZm9yIHJlc291cmNlIGNhbGVuZGFyIGluc2lkZSBzY3JvbGwgYXJlYSAqL31cblx0XHRcdFx0e2lzUmVzb3VyY2VDYWxlbmRhciAmJiBoZWFkZXJ9XG5cdFx0XHRcdHsvKiBDYWxlbmRhciBhcmVhIHdpdGggc2Nyb2xsICovfVxuXHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbignZmxleCBmbGV4LTEgbWluLXctZnVsbCB3LWZpdCcsIGNsYXNzZXM/LmJvZHkpfVxuXHRcdFx0XHRcdGRhdGEtdGVzdGlkPVwidmVydGljYWwtZ3JpZC1ib2R5XCJcblx0XHRcdFx0PlxuXHRcdFx0XHRcdHsvKiBEYXkgY29sdW1ucyB3aXRoIHRpbWUgc2xvdHMgKi99XG5cdFx0XHRcdFx0e2NvbHVtbnMubWFwKChjb2x1bW4sIGluZGV4KSA9PiAoXG5cdFx0XHRcdFx0XHQ8VmVydGljYWxHcmlkQ29sXG5cdFx0XHRcdFx0XHRcdGtleT17a2V5cy5saXN0S2V5KGNvbHVtbi5pZCwgaW5kZXgpfVxuXHRcdFx0XHRcdFx0XHR7Li4uY29sdW1ufVxuXHRcdFx0XHRcdFx0XHRncmlkVHlwZT17Z3JpZFR5cGV9XG5cdFx0XHRcdFx0XHRcdGlzTGFzdENvbHVtbj17aW5kZXggPT09IGNvbHVtbnMubGVuZ3RoIC0gMX1cblx0XHRcdFx0XHRcdFx0c2xvdER1cmF0aW9uTWludXRlcz17c2xvdER1cmF0aW9uTWludXRlc31cblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0KSl9XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8U2Nyb2xsQmFyIGNsYXNzTmFtZT1cInotMzBcIiAvPiB7LyogdmVydGljYWwgc2Nyb2xsYmFyICovfVxuXHRcdFx0XHQ8U2Nyb2xsQmFyIGNsYXNzTmFtZT1cInotMzBcIiBvcmllbnRhdGlvbj1cImhvcml6b250YWxcIiAvPnsnICd9XG5cdFx0XHRcdHsvKiBob3Jpem9udGFsIHNjcm9sbGJhciAqL31cblx0XHRcdDwvU2Nyb2xsQXJlYT5cblx0XHQ8L2Rpdj5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgeyB0eXBlIFJlZk9iamVjdCwgdXNlRWZmZWN0LCB1c2VSZWYgfSBmcm9tICdyZWFjdCdcblxuZXhwb3J0IHR5cGUgU2Nyb2xsVG9UaW1lQXhpcyA9ICd2ZXJ0aWNhbCcgfCAnaG9yaXpvbnRhbCdcblxuZXhwb3J0IGludGVyZmFjZSBVc2VTY3JvbGxUb1RpbWVPcHRpb25zIHtcblx0LyoqXG5cdCAqIFJlZiB0byB0aGUgYWN0dWFsIHNjcm9sbGluZyBlbGVtZW50IChlLmcuIHRoZSBSYWRpeCBTY3JvbGxBcmVhIHZpZXdwb3J0KS5cblx0ICogVGhlIGhvb2sgc2Nyb2xscyB0aGlzIGVsZW1lbnQgZGlyZWN0bHkgc28gdGhlIHBhcmVudCBwYWdlIGlzIG5vdCBhZmZlY3RlZC5cblx0ICovXG5cdHZpZXdwb3J0UmVmOiBSZWZPYmplY3Q8SFRNTEVsZW1lbnQgfCBudWxsPlxuXHRzY3JvbGxUaW1lPzogc3RyaW5nXG5cdGVuYWJsZWQ6IGJvb2xlYW5cblx0c2Nyb2xsS2V5OiBzdHJpbmdcblx0LyoqXG5cdCAqIFZlcnRpY2FsIHNjcm9sbHMgYWxvbmcgdGhlIFkgYXhpcyAoYHNjcm9sbFRvcGApLCBob3Jpem9udGFsIGFsb25nIHRoZSBYXG5cdCAqIGF4aXMgKGBzY3JvbGxMZWZ0YCkuXG5cdCAqXG5cdCAqIEBkZWZhdWx0ICd2ZXJ0aWNhbCdcblx0ICovXG5cdGF4aXM/OiBTY3JvbGxUb1RpbWVBeGlzXG59XG5cbmNvbnN0IEhPVVJfUEFUVEVSTiA9IC9eKFxcZHsxLDJ9KSg/OjpcXGR7MSwyfSk/KD86OlxcZHsxLDJ9KT8kL1xuY29uc3QgSE9VUl9TRUxFQ1RPUiA9ICdbZGF0YS1ob3VyXSdcblxuY29uc3QgcGFyc2VIb3VyID0gKHRpbWU6IHN0cmluZyk6IG51bWJlciB8IG51bGwgPT4ge1xuXHRjb25zdCBtYXRjaCA9IEhPVVJfUEFUVEVSTi5leGVjKHRpbWUpXG5cdGlmICghbWF0Y2gpIHtcblx0XHRyZXR1cm4gbnVsbFxuXHR9XG5cdGNvbnN0IGhvdXIgPSBOdW1iZXIucGFyc2VJbnQobWF0Y2hbMV0sIDEwKVxuXHRjb25zdCBpc0luUmFuZ2UgPSBob3VyID49IDAgJiYgaG91ciA8PSAyM1xuXHRyZXR1cm4gaXNJblJhbmdlID8gaG91ciA6IG51bGxcbn1cblxuY29uc3QgcmVhZFJvd0hvdXIgPSAocm93OiBIVE1MRWxlbWVudCk6IG51bWJlciA9PlxuXHROdW1iZXIucGFyc2VJbnQocm93LmdldEF0dHJpYnV0ZSgnZGF0YS1ob3VyJykgPz8gJycsIDEwKVxuXG5jb25zdCBmaW5kVGFyZ2V0Um93ID0gKFxuXHRyb3dzOiBIVE1MRWxlbWVudFtdLFxuXHR0YXJnZXRIb3VyOiBudW1iZXJcbik6IEhUTUxFbGVtZW50IHwgbnVsbCA9PiB7XG5cdGNvbnN0IGZpcnN0Um93ID0gcm93cy5hdCgwKVxuXHRjb25zdCBsYXN0Um93ID0gcm93cy5hdCgtMSlcblx0aWYgKCFmaXJzdFJvdyB8fCAhbGFzdFJvdykge1xuXHRcdHJldHVybiBudWxsXG5cdH1cblxuXHRpZiAodGFyZ2V0SG91ciA8PSByZWFkUm93SG91cihmaXJzdFJvdykpIHtcblx0XHRyZXR1cm4gZmlyc3RSb3dcblx0fVxuXHRpZiAodGFyZ2V0SG91ciA+PSByZWFkUm93SG91cihsYXN0Um93KSkge1xuXHRcdHJldHVybiBsYXN0Um93XG5cdH1cblx0cmV0dXJuIHJvd3MuZmluZCgocm93KSA9PiByZWFkUm93SG91cihyb3cpID09PSB0YXJnZXRIb3VyKSA/PyBudWxsXG59XG5cbmNvbnN0IHNjcm9sbFZpZXdwb3J0VG9Sb3cgPSAoXG5cdHZpZXdwb3J0OiBIVE1MRWxlbWVudCxcblx0dGFyZ2V0Um93OiBIVE1MRWxlbWVudCxcblx0Zmlyc3RSb3c6IEhUTUxFbGVtZW50LFxuXHRheGlzOiBTY3JvbGxUb1RpbWVBeGlzXG4pID0+IHtcblx0Ly8gVXNlIHRoZSBmaXJzdCByb3cgYXMgdGhlIHJlZmVyZW5jZSBmb3IgXCJzdGFydGluZyBwb3NpdGlvbiBvZiB0aGUgdGltZVxuXHQvLyBhcmVhLlwiIEl0IG5hdHVyYWxseSBzaXRzIHBhc3QgYW55IHN0aWNreS1sZWZ0IChvciBzdGlja3ktdG9wKSBoZWFkZXJcblx0Ly8gbGlrZSB0aGUgUmVzb3VyY2VzIGNvbHVtbi4gU2V0dGluZyBzY3JvbGxMZWZ0L3Njcm9sbFRvcCB0byB0aGUgb2Zmc2V0XG5cdC8vIGZyb20gZmlyc3Qgcm93IHRvIHRhcmdldCByb3cgbGFuZHMgdGhlIHRhcmdldCB3aGVyZSB0aGUgZmlyc3Qgcm93IHNhdCxcblx0Ly8gaS5lLiByaWdodCBhdCB0aGUgc3RhcnQgb2YgdGhlIHZpc2libGUgdGltZSBhcmVhIGluc3RlYWQgb2YgYmVoaW5kIHRoZVxuXHQvLyBzdGlja3kgY29sdW1uLlxuXHRjb25zdCB0YXJnZXRSZWN0ID0gdGFyZ2V0Um93LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG5cdGNvbnN0IGZpcnN0UmVjdCA9IGZpcnN0Um93LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG5cblx0aWYgKGF4aXMgPT09ICdob3Jpem9udGFsJykge1xuXHRcdHZpZXdwb3J0LnNjcm9sbFRvKHtcblx0XHRcdGxlZnQ6IHRhcmdldFJlY3QubGVmdCAtIGZpcnN0UmVjdC5sZWZ0LFxuXHRcdFx0YmVoYXZpb3I6ICdhdXRvJyxcblx0XHR9KVxuXHRcdHJldHVyblxuXHR9XG5cblx0dmlld3BvcnQuc2Nyb2xsVG8oe1xuXHRcdHRvcDogdGFyZ2V0UmVjdC50b3AgLSBmaXJzdFJlY3QudG9wLFxuXHRcdGJlaGF2aW9yOiAnYXV0bycsXG5cdH0pXG59XG5cbmV4cG9ydCBjb25zdCB1c2VTY3JvbGxUb1RpbWUgPSAoe1xuXHR2aWV3cG9ydFJlZixcblx0c2Nyb2xsVGltZSxcblx0ZW5hYmxlZCxcblx0c2Nyb2xsS2V5LFxuXHRheGlzID0gJ3ZlcnRpY2FsJyxcbn06IFVzZVNjcm9sbFRvVGltZU9wdGlvbnMpID0+IHtcblx0Y29uc3QgbGFzdFNjcm9sbGVkS2V5UmVmID0gdXNlUmVmPHN0cmluZyB8IG51bGw+KG51bGwpXG5cblx0dXNlRWZmZWN0KCgpID0+IHtcblx0XHRpZiAoIWVuYWJsZWQgfHwgIXNjcm9sbFRpbWUpIHtcblx0XHRcdHJldHVyblxuXHRcdH1cblx0XHRpZiAobGFzdFNjcm9sbGVkS2V5UmVmLmN1cnJlbnQgPT09IHNjcm9sbEtleSkge1xuXHRcdFx0cmV0dXJuXG5cdFx0fVxuXG5cdFx0Y29uc3QgdGFyZ2V0SG91ciA9IHBhcnNlSG91cihzY3JvbGxUaW1lKVxuXHRcdGlmICh0YXJnZXRIb3VyID09PSBudWxsKSB7XG5cdFx0XHRyZXR1cm5cblx0XHR9XG5cblx0XHRjb25zdCB2aWV3cG9ydCA9IHZpZXdwb3J0UmVmLmN1cnJlbnRcblx0XHRpZiAoIXZpZXdwb3J0KSB7XG5cdFx0XHRyZXR1cm5cblx0XHR9XG5cdFx0Y29uc3Qgcm93cyA9IEFycmF5LmZyb20oXG5cdFx0XHR2aWV3cG9ydC5xdWVyeVNlbGVjdG9yQWxsPEhUTUxFbGVtZW50PihIT1VSX1NFTEVDVE9SKVxuXHRcdClcblx0XHRjb25zdCBmaXJzdFJvdyA9IHJvd3MuYXQoMClcblx0XHRjb25zdCB0YXJnZXRSb3cgPSBmaW5kVGFyZ2V0Um93KHJvd3MsIHRhcmdldEhvdXIpXG5cdFx0aWYgKCFmaXJzdFJvdyB8fCAhdGFyZ2V0Um93KSB7XG5cdFx0XHRyZXR1cm5cblx0XHR9XG5cdFx0c2Nyb2xsVmlld3BvcnRUb1Jvdyh2aWV3cG9ydCwgdGFyZ2V0Um93LCBmaXJzdFJvdywgYXhpcylcblx0XHRsYXN0U2Nyb2xsZWRLZXlSZWYuY3VycmVudCA9IHNjcm9sbEtleVxuXHR9LCBbZW5hYmxlZCwgc2Nyb2xsVGltZSwgc2Nyb2xsS2V5LCB2aWV3cG9ydFJlZiwgYXhpc10pXG59XG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgbWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBSZXNvdXJjZSB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsga2V5cyB9IGZyb20gJ0AvbGliL3V0aWxzL2tleXMnXG5pbXBvcnQgeyBHcmlkQ2VsbCB9IGZyb20gJy4uL2dyaWQtY2VsbCdcbmltcG9ydCB7IFZlcnRpY2FsR3JpZEV2ZW50c0xheWVyIH0gZnJvbSAnLi92ZXJ0aWNhbC1ncmlkLWV2ZW50cy1sYXllcidcblxuZXhwb3J0IGludGVyZmFjZSBWZXJ0aWNhbEdyaWRDb2xQcm9wcyB7XG5cdGlkOiBzdHJpbmdcblx0ZGF5PzogRGF5anNcblx0cmVzb3VyY2VJZD86IHN0cmluZyB8IG51bWJlclxuXHRyZXNvdXJjZT86IFJlc291cmNlXG5cdGRheXM6IERheWpzW10gLy8gVGhlIHNwZWNpZmljIGRheSB0aGlzIGNvbHVtbiByZXByZXNlbnRzXG5cdGNsYXNzTmFtZT86IHN0cmluZ1xuXHQnZGF0YS10ZXN0aWQnPzogc3RyaW5nXG5cdGdyaWRUeXBlPzogJ2RheScgfCAnaG91cidcblx0cmVuZGVySGVhZGVyPzogKCkgPT4gUmVhY3QuUmVhY3ROb2RlXG5cdHJlbmRlckNlbGw/OiAoZGF0ZTogRGF5anMpID0+IFJlYWN0LlJlYWN0Tm9kZVxuXHRub0V2ZW50cz86IGJvb2xlYW5cblx0LyoqXG5cdCAqIEdyYW51bGFyaXR5IG9mIGVhY2ggaG91ciByb3cgaW4gbWludXRlcy4gYDYwYCByZW5kZXJzIG9uZSBjZWxsIHBlciBob3VyIHdpdGhcblx0ICogbm8gc3ViLWhvdXIgbGluZXMuIGAzMGAgcmVuZGVycyB0d28uIGAxNWAgcmVuZGVycyBmb3VyIHdpdGggZGFzaGVkIHNlcGFyYXRvcnMuXG5cdCAqL1xuXHRzbG90RHVyYXRpb25NaW51dGVzPzogbnVtYmVyXG5cdC8qKiBXaGV0aGVyIHRoaXMgaXMgdGhlIGxhc3QgY29sdW1uIGluIHRoZSBncmlkICovXG5cdGlzTGFzdENvbHVtbj86IGJvb2xlYW5cbn1cblxuY29uc3QgTm9NZW1vVmVydGljYWxHcmlkQ29sOiBSZWFjdC5GQzxWZXJ0aWNhbEdyaWRDb2xQcm9wcz4gPSAoe1xuXHRpZCxcblx0ZGF5cyxcblx0cmVzb3VyY2VJZCxcblx0cmVzb3VyY2UsXG5cdCdkYXRhLXRlc3RpZCc6IGRhdGFUZXN0SWQsXG5cdGdyaWRUeXBlLFxuXHRjbGFzc05hbWUsXG5cdHJlbmRlckNlbGwsXG5cdG5vRXZlbnRzLFxuXHRzbG90RHVyYXRpb25NaW51dGVzID0gNjAsXG5cdGlzTGFzdENvbHVtbixcbn0pID0+IHtcblx0Y29uc3Qgc2xvdENvdW50ID0gTWF0aC5mbG9vcig2MCAvIHNsb3REdXJhdGlvbk1pbnV0ZXMpXG5cdGNvbnN0IGNlbGxPZmZzZXRzID0gQXJyYXkuZnJvbShcblx0XHR7IGxlbmd0aDogc2xvdENvdW50IH0sXG5cdFx0KF8sIGkpID0+IGkgKiBzbG90RHVyYXRpb25NaW51dGVzXG5cdClcblx0Y29uc3QgaGFzU3ViSG91clNsb3RzID0gY2VsbE9mZnNldHMubGVuZ3RoID4gMVxuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCdmbGV4IGZsZXgtY29sIGZsZXgtMSBpdGVtcy1jZW50ZXIgbWluLXctMjAganVzdGlmeS1jZW50ZXIgYmctYmFja2dyb3VuZCByZWxhdGl2ZScsXG5cdFx0XHRcdGlzTGFzdENvbHVtbiA/ICdib3JkZXItci0wJyA6ICdib3JkZXItcicsXG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHRcdGRhdGEtdGVzdGlkPXtkYXRhVGVzdElkIHx8IGtleXMuY29udGFpbmVyLnZlcnRpY2FsLmNvbChpZCl9XG5cdFx0PlxuXHRcdFx0ey8qIFRpbWUgc2xvdHMgKi99XG5cdFx0XHQ8ZGl2XG5cdFx0XHRcdGNsYXNzTmFtZT1cInctZnVsbCBoLWZ1bGwgcmVsYXRpdmUgZ3JpZFwiXG5cdFx0XHRcdHN0eWxlPXt7XG5cdFx0XHRcdFx0Z3JpZFRlbXBsYXRlUm93czogYHJlcGVhdCgke2RheXMubGVuZ3RofSwgbWlubWF4KDAsIDFmcikpYCxcblx0XHRcdFx0fX1cblx0XHRcdD5cblx0XHRcdFx0e2RheXMubWFwKChkYXksIGRheUluZGV4KSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgaG91clN0ciA9IGRheS5mb3JtYXQoJ0hIJylcblxuXHRcdFx0XHRcdGlmIChyZW5kZXJDZWxsKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBpc1RpbWVHdXR0ZXIgPSBpZCA9PT0ga2V5cy5jb2wudGltZVxuXHRcdFx0XHRcdFx0Y29uc3QgdGVzdElkID0gaXNUaW1lR3V0dGVyXG5cdFx0XHRcdFx0XHRcdD8ga2V5cy5jZWxsLnZlcnRpY2FsVGltZShob3VyU3RyKVxuXHRcdFx0XHRcdFx0XHQ6IGtleXMuY2VsbC52ZXJ0aWNhbChkYXksIGhvdXJTdHIsICcwMCcsIHJlc291cmNlSWQpXG5cdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwibWluLWgtWzYwcHhdIGJvcmRlci1iIGJvcmRlci1yXCJcblx0XHRcdFx0XHRcdFx0XHRkYXRhLWhvdXI9e2lzVGltZUd1dHRlciA/IGhvdXJTdHIgOiB1bmRlZmluZWR9XG5cdFx0XHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e3Rlc3RJZH1cblx0XHRcdFx0XHRcdFx0XHRrZXk9e2tleXMubGlzdEtleShpZCwgZGF5SW5kZXgsIGhvdXJTdHIpfVxuXHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0e3JlbmRlckNlbGwoZGF5KX1cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCBtaW4taC1bNjBweF1cIlxuXHRcdFx0XHRcdFx0XHRrZXk9e2tleXMubGlzdEtleShpZCwgZGF5SW5kZXgsIGhvdXJTdHIpfVxuXHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHR7Y2VsbE9mZnNldHMubWFwKChtaW51dGUpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBtbSA9IFN0cmluZyhtaW51dGUpLnBhZFN0YXJ0KDIsICcwJylcblx0XHRcdFx0XHRcdFx0XHRjb25zdCB0ZXN0SWQgPSBrZXlzLmNlbGwudmVydGljYWwoZGF5LCBob3VyU3RyLCBtbSwgcmVzb3VyY2VJZClcblxuXHRcdFx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdFx0XHQ8R3JpZENlbGxcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnaG92ZXI6YmctYWNjZW50IHJlbGF0aXZlIHotMTAgZmxleC0xIG1pbi1oLTAgY3Vyc29yLXBvaW50ZXIgYm9yZGVyLWIgYm9yZGVyLXItMCcsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aGFzU3ViSG91clNsb3RzICYmICdib3JkZXItZGFzaGVkJ1xuXHRcdFx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD17dGVzdElkfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRkYXk9e2hhc1N1YkhvdXJTbG90cyA/IGRheS5taW51dGUobWludXRlKSA6IGRheX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0Z3JpZFR5cGU9e2dyaWRUeXBlfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRob3VyPXtkYXkuaG91cigpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRrZXk9e2tleXMubGlzdEtleShpZCwgZGF5SW5kZXgsIG1tKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0bWludXRlPXtoYXNTdWJIb3VyU2xvdHMgPyBtaW51dGUgOiB1bmRlZmluZWR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJlc291cmNlSWQ9e3Jlc291cmNlSWR9IC8vIEV2ZW50cyBhcmUgcmVuZGVyZWQgaW4gYSBzZXBhcmF0ZSBsYXllclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRzaG91bGRSZW5kZXJFdmVudHM9e2ZhbHNlfVxuXHRcdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHRcdH0pfVxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0KVxuXHRcdFx0XHR9KX1cblxuXHRcdFx0XHR7LyogRXZlbnQgYmxvY2tzIGxheWVyICovfVxuXHRcdFx0XHR7IW5vRXZlbnRzICYmIChcblx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImFic29sdXRlIGluc2V0LTAgei0xMCBwb2ludGVyLWV2ZW50cy1ub25lXCI+XG5cdFx0XHRcdFx0XHQ8VmVydGljYWxHcmlkRXZlbnRzTGF5ZXJcblx0XHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e2tleXMuY29udGFpbmVyLmV2ZW50c0xheWVyKCd2ZXJ0aWNhbCcsIGlkKX1cblx0XHRcdFx0XHRcdFx0ZGF5cz17ZGF5c31cblx0XHRcdFx0XHRcdFx0Z3JpZFR5cGU9e2dyaWRUeXBlfVxuXHRcdFx0XHRcdFx0XHRyZXNvdXJjZT17cmVzb3VyY2V9XG5cdFx0XHRcdFx0XHRcdHJlc291cmNlSWQ9e3Jlc291cmNlSWR9XG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQpfVxuXHRcdFx0PC9kaXY+XG5cdFx0PC9kaXY+XG5cdClcbn1cblxuZXhwb3J0IGNvbnN0IFZlcnRpY2FsR3JpZENvbCA9IG1lbW8oXG5cdE5vTWVtb1ZlcnRpY2FsR3JpZENvbFxuKSBhcyB0eXBlb2YgTm9NZW1vVmVydGljYWxHcmlkQ29sXG4iLAogICAgImltcG9ydCB7IG1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEN1cnJlbnRUaW1lSW5kaWNhdG9yIH0gZnJvbSAnQC9jb21wb25lbnRzL2N1cnJlbnQtdGltZS1pbmRpY2F0b3InXG5pbXBvcnQgeyBEcmFnZ2FibGVFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy9kcmFnZ2FibGUtZXZlbnQvZHJhZ2dhYmxlLWV2ZW50J1xuaW1wb3J0IHsgdXNlUHJvY2Vzc2VkRGF5RXZlbnRzIH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci9ob29rcy91c2VQcm9jZXNzZWREYXlFdmVudHMnXG5pbXBvcnQgdHlwZSB7IFJlc291cmNlIH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci90eXBlcydcbmltcG9ydCB0eXBlIHsgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgeyBrZXlzIH0gZnJvbSAnQC9saWIvdXRpbHMva2V5cydcblxuaW50ZXJmYWNlIFZlcnRpY2FsR3JpZEV2ZW50c0xheWVyUHJvcHMge1xuXHRncmlkVHlwZT86ICdkYXknIHwgJ2hvdXInXG5cdGRheXM6IERheWpzW10gLy8gVGhlIHNwZWNpZmljIGRheSB0aGlzIGxheWVyIHJlcHJlc2VudHNcblx0cmVzb3VyY2VJZD86IHN0cmluZyB8IG51bWJlclxuXHRyZXNvdXJjZT86IFJlc291cmNlXG5cdCdkYXRhLXRlc3RpZCc/OiBzdHJpbmdcbn1cblxuY29uc3QgTm9NZW1vVmVydGljYWxHcmlkRXZlbnRzTGF5ZXI6IFJlYWN0LkZDPFZlcnRpY2FsR3JpZEV2ZW50c0xheWVyUHJvcHM+ID0gKHtcblx0ZGF5cyxcblx0Z3JpZFR5cGUgPSAnaG91cicsXG5cdHJlc291cmNlSWQsXG5cdHJlc291cmNlLFxuXHQnZGF0YS10ZXN0aWQnOiBkYXRhVGVzdElkLFxufSkgPT4ge1xuXHRjb25zdCB0b2RheUV2ZW50cyA9IHVzZVByb2Nlc3NlZERheUV2ZW50cyh7IGRheXMsIGdyaWRUeXBlLCByZXNvdXJjZUlkIH0pXG5cdGNvbnN0IHJhbmdlU3RhcnQgPSBkYXlzLmF0KDApXG5cdGNvbnN0IHJhbmdlRW5kID0gZGF5cy5hdCgtMSk/LmFkZCgxLCBncmlkVHlwZSlcblx0Ly8gT25seSBzaG93IHRoZSBcIm5vd1wiIGxpbmUgaW4gaG91ci1yZXNvbHV0aW9uIGdyaWRzLiBJbiBkYXktcmVzb2x1dGlvblxuXHQvLyB2ZXJ0aWNhbCB2aWV3cyAocmVzb3VyY2UgbW9udGgsIHJlc291cmNlIHdlZWsgZGFpbHkpIGEgc3ViLWRheSBwZXJjZW50YWdlXG5cdC8vIGxpbmUgaXMgbWVhbmluZ2xlc3MsIHNvIHN1cHByZXNzIGl0IOKAlCBtaXJyb3JzIHRoZSBob3Jpem9udGFsIGV2ZW50cyBsYXllci5cblx0Y29uc3Qgc2hvd05vd0xpbmUgPSBncmlkVHlwZSA9PT0gJ2hvdXInICYmIEJvb2xlYW4ocmFuZ2VTdGFydCAmJiByYW5nZUVuZClcblxuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT1cInJlbGF0aXZlIHctZnVsbCBoLWZ1bGwgcG9pbnRlci1ldmVudHMtbm9uZSB6LTEwIG92ZXJmbG93LWNsaXBcIlxuXHRcdFx0ZGF0YS10ZXN0aWQ9e2RhdGFUZXN0SWR9XG5cdFx0PlxuXHRcdFx0e3Nob3dOb3dMaW5lICYmIHJhbmdlU3RhcnQgJiYgcmFuZ2VFbmQgJiYgKFxuXHRcdFx0XHQ8Q3VycmVudFRpbWVJbmRpY2F0b3Jcblx0XHRcdFx0XHRyYW5nZUVuZD17cmFuZ2VFbmR9XG5cdFx0XHRcdFx0cmFuZ2VTdGFydD17cmFuZ2VTdGFydH1cblx0XHRcdFx0XHRyZXNvdXJjZT17cmVzb3VyY2V9XG5cdFx0XHRcdC8+XG5cdFx0XHQpfVxuXHRcdFx0e3RvZGF5RXZlbnRzLm1hcCgoZXZlbnQsIGluZGV4KSA9PiB7XG5cdFx0XHRcdGNvbnN0IGV2ZW50S2V5ID0gYGV2ZW50LSR7ZXZlbnQuaWR9LSR7aW5kZXh9LSR7ZGF5cy5hdCgwKT8udG9JU09TdHJpbmcoKX0tJHtyZXNvdXJjZUlkID8/ICduby1yZXNvdXJjZSd9YFxuXHRcdFx0XHRjb25zdCBpc1Nob3J0RXZlbnQgPSBldmVudC5lbmQuZGlmZihldmVudC5zdGFydCwgJ21pbnV0ZScpIDw9IDE1XG5cblx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJhYnNvbHV0ZVwiXG5cdFx0XHRcdFx0XHRrZXk9e2tleXMubGlzdEtleShldmVudEtleSwgJ3dyYXBwZXInKX1cblx0XHRcdFx0XHRcdHN0eWxlPXt7XG5cdFx0XHRcdFx0XHRcdGxlZnQ6IGAke2V2ZW50LmxlZnR9JWAsXG5cdFx0XHRcdFx0XHRcdHdpZHRoOiBgY2FsYygke2V2ZW50LndpZHRofSUgLSB2YXIoLS1zcGFjaW5nKSAqIDIpYCxcblx0XHRcdFx0XHRcdFx0dG9wOiBgJHtldmVudC50b3B9JWAsXG5cdFx0XHRcdFx0XHRcdGhlaWdodDogYCR7ZXZlbnQuaGVpZ2h0fSVgLFxuXHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHQ8RHJhZ2dhYmxlRXZlbnRcblx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbigncG9pbnRlci1ldmVudHMtYXV0bycsIHtcblx0XHRcdFx0XHRcdFx0XHQnWyZfcF06dGV4dC1bMTBweF0gWyZfcF06bXQtMCc6IGlzU2hvcnRFdmVudCxcblx0XHRcdFx0XHRcdFx0fSl9XG5cdFx0XHRcdFx0XHRcdGVsZW1lbnRJZD17ZXZlbnRLZXl9XG5cdFx0XHRcdFx0XHRcdGV2ZW50PXtldmVudH1cblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdClcblx0XHRcdH0pfVxuXHRcdDwvZGl2PlxuXHQpXG59XG5cbmV4cG9ydCBjb25zdCBWZXJ0aWNhbEdyaWRFdmVudHNMYXllciA9IG1lbW8oTm9NZW1vVmVydGljYWxHcmlkRXZlbnRzTGF5ZXIpXG4iLAogICAgImltcG9ydCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB0eXBlIHsgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGZpbHRlckV2ZW50c0J5UmVzb3VyY2UgfSBmcm9tICdAL2xpYi91dGlscy9ldmVudC11dGlscydcbmltcG9ydCB7XG5cdGdldFBvc2l0aW9uZWREYXlFdmVudHMsXG5cdHR5cGUgUG9zaXRpb25lZEV2ZW50LFxufSBmcm9tICdAL2xpYi91dGlscy9wb3NpdGlvbi1kYXktZXZlbnRzJ1xuXG5pbnRlcmZhY2UgVXNlUHJvY2Vzc2VkRGF5RXZlbnRzUHJvcHMge1xuXHRkYXlzOiBEYXlqc1tdIC8vIFRoZSBzcGVjaWZpYyBkYXkgdGhpcyBjb2x1bW4gcmVwcmVzZW50c1xuXHRncmlkVHlwZT86ICdkYXknIHwgJ2hvdXInXG5cdHJlc291cmNlSWQ/OiBzdHJpbmcgfCBudW1iZXJcbn1cblxuZXhwb3J0IGNvbnN0IHVzZVByb2Nlc3NlZERheUV2ZW50cyA9ICh7XG5cdGRheXMsXG5cdGdyaWRUeXBlLFxuXHRyZXNvdXJjZUlkLFxufTogVXNlUHJvY2Vzc2VkRGF5RXZlbnRzUHJvcHMpID0+IHtcblx0Y29uc3QgeyBnZXRFdmVudHNGb3JEYXRlUmFuZ2UsIGdldEV2ZW50c0ZvclJlc291cmNlIH0gPVxuXHRcdHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblx0Y29uc3QgZmlyc3QgPSBkYXlzLmF0KDApXG5cdGNvbnN0IGxhc3QgPSBkYXlzLmF0KC0xKVxuXHRjb25zdCBkYXlTdGFydCA9IGZpcnN0Py5zdGFydE9mKCdkYXknKVxuXHRjb25zdCBkYXlFbmQgPSBsYXN0Py5lbmRPZignZGF5JylcblxuXHRjb25zdCBldmVudHMgPSB1c2VNZW1vKCgpID0+IHtcblx0XHRpZiAoIWRheVN0YXJ0IHx8ICFkYXlFbmQpIHJldHVybiBbXVxuXG5cdFx0bGV0IGRheUV2ZW50cyA9IGdldEV2ZW50c0ZvckRhdGVSYW5nZShkYXlTdGFydCwgZGF5RW5kKVxuXHRcdGlmIChyZXNvdXJjZUlkKSB7XG5cdFx0XHRkYXlFdmVudHMgPSBmaWx0ZXJFdmVudHNCeVJlc291cmNlKFxuXHRcdFx0XHRkYXlFdmVudHMsXG5cdFx0XHRcdGdldEV2ZW50c0ZvclJlc291cmNlKHJlc291cmNlSWQpXG5cdFx0XHQpXG5cdFx0fVxuXG5cdFx0Ly8gVmVydGljYWwgZ3JpZHMgKERheS9XZWVrL1Jlc291cmNlIFZlcnRpY2FsKSBuZXZlciByZW5kZXIgYWxsLWRheSBldmVudHNcblx0XHQvLyBhcyB0aG9zZSBhcmUgaGFuZGxlZCBieSB0aGUgYWxsLWRheS1yb3cgb3IgYXJlIG5vdCBhcHByb3ByaWF0ZSBmb3IgdGhlIHRpbWUgZ3JpZC5cblx0XHRyZXR1cm4gZGF5RXZlbnRzLmZpbHRlcigoZSkgPT4gIWUuYWxsRGF5KVxuXHR9LCBbXG5cdFx0ZGF5U3RhcnQsXG5cdFx0ZGF5RW5kLFxuXHRcdGdldEV2ZW50c0ZvckRhdGVSYW5nZSxcblx0XHRyZXNvdXJjZUlkLFxuXHRcdGdldEV2ZW50c0ZvclJlc291cmNlLFxuXHRdKVxuXG5cdGNvbnN0IHRvZGF5RXZlbnRzID0gdXNlTWVtbzxQb3NpdGlvbmVkRXZlbnRbXT4oKCkgPT4ge1xuXHRcdHJldHVybiBnZXRQb3NpdGlvbmVkRGF5RXZlbnRzKHtcblx0XHRcdGRheXMsXG5cdFx0XHRldmVudHMsXG5cdFx0XHRncmlkVHlwZSxcblx0XHR9KVxuXHR9LCBbZGF5cywgZ3JpZFR5cGUsIGV2ZW50c10pXG5cblx0cmV0dXJuIHRvZGF5RXZlbnRzXG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCBkYXlqcywgeyB0eXBlIERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5cbmV4cG9ydCBpbnRlcmZhY2UgUG9zaXRpb25lZEV2ZW50IGV4dGVuZHMgQ2FsZW5kYXJFdmVudCB7XG5cdGxlZnQ6IG51bWJlciAvLyBMZWZ0IHBvc2l0aW9uIGluIHBlcmNlbnRhZ2Vcblx0d2lkdGg6IG51bWJlciAvLyBXaWR0aCBpbiBwZXJjZW50YWdlXG5cdHRvcDogbnVtYmVyIC8vIFRvcCBwb3NpdGlvbiBpbiBwZXJjZW50YWdlXG5cdGhlaWdodDogbnVtYmVyIC8vIEhlaWdodCBpbiBwZXJjZW50YWdlXG5cdHpJbmRleD86IG51bWJlciAvLyBaLWluZGV4IGZvciBsYXllcmluZyBvdmVybGFwcGluZyBldmVudHNcbn1cblxuaW50ZXJmYWNlIEdldFBvc2l0aW9uZWREYXlFdmVudHNQYXJhbXMge1xuXHRkYXlzOiBEYXlqc1tdXG5cdGdyaWRUeXBlPzogJ2RheScgfCAnaG91cicgfCAnbWludXRlJ1xuXHRldmVudHM6IENhbGVuZGFyRXZlbnRbXVxufVxuXG5leHBvcnQgY29uc3QgZ2V0UG9zaXRpb25lZERheUV2ZW50cyA9ICh7XG5cdGRheXMsXG5cdGdyaWRUeXBlID0gJ2hvdXInLFxuXHRldmVudHMsXG59OiBHZXRQb3NpdGlvbmVkRGF5RXZlbnRzUGFyYW1zKTogUG9zaXRpb25lZEV2ZW50W10gPT4ge1xuXHQvLyBGaWx0ZXIgb3V0IGFsbC1kYXkgZXZlbnRzIGFuZCBzb3J0IGJ5IHN0YXJ0IHRpbWVcblx0Y29uc3Qgc29ydGVkRXZlbnRzID0gZXZlbnRzXG5cdFx0LmZpbHRlcigoZSkgPT4gIWUuYWxsRGF5KVxuXHRcdC50b1NvcnRlZCgoYSwgYikgPT4gYS5zdGFydC5kaWZmKGIuc3RhcnQpKVxuXG5cdGlmIChzb3J0ZWRFdmVudHMubGVuZ3RoID09PSAwKSB7XG5cdFx0cmV0dXJuIFtdXG5cdH1cblxuXHQvLyBEZXRlcm1pbmUgZ3JpZCBib3VuZGFyaWVzIGFuZCBtZXRyaWNzXG5cdC8vIFVzZSBleHBsaWNpdCBzdGFydE9mIHRvIGVuc3VyZSB3ZSBhcmUgYW5jaG9yZWQgdG8gdGhlIGdyaWQgdW5pdCBib3VuZGFyaWVzXG5cdC8vIFRoaXMgcHJldmVudHMgb2Zmc2V0cyBpZiB0aGUgZ3JpZCBkYXlzIGFyZSBub3Qgbm9ybWFsaXplZFxuXHRjb25zdCBncmlkU3RhcnQgPSBkYXlzLmF0KDApIHx8IGRheWpzKClcblx0Y29uc3QgdG90YWxVbml0cyA9IGRheXMubGVuZ3RoXG5cdGNvbnN0IGlzRGlzY3JldGUgPSBncmlkVHlwZSA9PT0gJ2RheSdcblxuXHQvLyBTdGVwIDE6IEdyb3VwIGV2ZW50cyBpbnRvIGNsdXN0ZXJzIG9mIG92ZXJsYXBwaW5nIGV2ZW50c1xuXHRjb25zdCBjbHVzdGVyczogQ2FsZW5kYXJFdmVudFtdW10gPSBbXVxuXHRsZXQgY3VycmVudENsdXN0ZXI6IENhbGVuZGFyRXZlbnRbXSA9IFtdXG5cdGxldCBsYXN0RXZlbnRFbmQ6IERheWpzIHwgbnVsbCA9IG51bGxcblx0Zm9yIChjb25zdCBldmVudCBvZiBzb3J0ZWRFdmVudHMpIHtcblx0XHRpZiAobGFzdEV2ZW50RW5kICYmIGV2ZW50LnN0YXJ0LmlzU2FtZU9yQWZ0ZXIobGFzdEV2ZW50RW5kKSkge1xuXHRcdFx0aWYgKGN1cnJlbnRDbHVzdGVyLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0Y2x1c3RlcnMucHVzaChjdXJyZW50Q2x1c3Rlcilcblx0XHRcdH1cblx0XHRcdGN1cnJlbnRDbHVzdGVyID0gW11cblx0XHR9XG5cdFx0Y3VycmVudENsdXN0ZXIucHVzaChldmVudClcblx0XHRsYXN0RXZlbnRFbmQgPSBsYXN0RXZlbnRFbmQgPyBkYXlqcy5tYXgobGFzdEV2ZW50RW5kLCBldmVudC5lbmQpIDogZXZlbnQuZW5kXG5cdH1cblx0aWYgKGN1cnJlbnRDbHVzdGVyLmxlbmd0aCA+IDApIHtcblx0XHRjbHVzdGVycy5wdXNoKGN1cnJlbnRDbHVzdGVyKVxuXHR9XG5cblx0Ly8gQ29tcHV0ZSB0b3AvaGVpZ2h0IHBlcmNlbnRhZ2VzIGZvciBhbiBldmVudCwgY2xhbXBlZCB0byBncmlkOyBudWxsIGlmIG91dHNpZGUuXG5cdGNvbnN0IGNvbXB1dGVUb3BIZWlnaHQgPSAoXG5cdFx0ZXZlbnQ6IENhbGVuZGFyRXZlbnRcblx0KTogeyB0b3A6IG51bWJlcjsgaGVpZ2h0OiBudW1iZXIgfSB8IG51bGwgPT4ge1xuXHRcdGxldCBzdGFydFRpbWUgPSBldmVudC5zdGFydC5kaWZmKGdyaWRTdGFydCwgZ3JpZFR5cGUsIHRydWUpXG5cdFx0bGV0IGVuZFRpbWUgPSBldmVudC5lbmQuZGlmZihncmlkU3RhcnQsIGdyaWRUeXBlLCB0cnVlKVxuXHRcdGlmIChpc0Rpc2NyZXRlKSB7XG5cdFx0XHRzdGFydFRpbWUgPSBNYXRoLmZsb29yKHN0YXJ0VGltZSlcblx0XHRcdGVuZFRpbWUgPSBNYXRoLmNlaWwoZW5kVGltZSlcblx0XHRcdGlmIChlbmRUaW1lIDw9IHN0YXJ0VGltZSkgZW5kVGltZSA9IHN0YXJ0VGltZSArIDFcblx0XHR9XG5cdFx0aWYgKHN0YXJ0VGltZSA8IDApIHN0YXJ0VGltZSA9IDBcblx0XHRpZiAoZW5kVGltZSA+IHRvdGFsVW5pdHMpIGVuZFRpbWUgPSB0b3RhbFVuaXRzXG5cdFx0Y29uc3QgZHVyYXRpb24gPSBNYXRoLm1heCgwLCBlbmRUaW1lIC0gc3RhcnRUaW1lKVxuXHRcdGlmIChkdXJhdGlvbiA9PT0gMCkgcmV0dXJuIG51bGxcblx0XHRyZXR1cm4ge1xuXHRcdFx0dG9wOiAoc3RhcnRUaW1lIC8gdG90YWxVbml0cykgKiAxMDAsXG5cdFx0XHRoZWlnaHQ6IChkdXJhdGlvbiAvIHRvdGFsVW5pdHMpICogMTAwLFxuXHRcdH1cblx0fVxuXG5cdC8vIE1heCBjbHVzdGVyIG9mZnNldCBieSBldmVudCBjb3VudCAoMiBldmVudHMg4oaSIDI1JSwgZXRjLilcblx0Y29uc3QgbWF4T2Zmc2V0QnlDb3VudCA9IChuOiBudW1iZXIpID0+XG5cdFx0biA9PT0gMiA/IDI1IDogbiA9PT0gMyA/IDUwIDogbiA9PT0gNCA/IDYwIDogNzBcblxuXHQvLyBTdGVwIDI6IEZvciBlYWNoIGNsdXN0ZXIsIGNvbXB1dGUgcG9zaXRpb25zXG5cdGNvbnN0IHByb2Nlc3NlZEV2ZW50czogUG9zaXRpb25lZEV2ZW50W10gPSBbXVxuXHRmb3IgKGNvbnN0IGNsdXN0ZXIgb2YgY2x1c3RlcnMpIHtcblx0XHRpZiAoY2x1c3Rlci5sZW5ndGggPT09IDEpIHtcblx0XHRcdGNvbnN0IGV2ZW50ID0gY2x1c3RlclswXVxuXHRcdFx0Y29uc3QgcG9zID0gY29tcHV0ZVRvcEhlaWdodChldmVudClcblx0XHRcdGlmICghcG9zKSBjb250aW51ZVxuXHRcdFx0cHJvY2Vzc2VkRXZlbnRzLnB1c2goeyAuLi5ldmVudCwgbGVmdDogMCwgd2lkdGg6IDEwMCwgLi4ucG9zIH0pXG5cdFx0XHRjb250aW51ZVxuXHRcdH1cblxuXHRcdC8vIE11bHRpcGxlIGV2ZW50cyDigJQgbGF5ZXJlZCBwb3NpdGlvbmluZy4gTG9uZ2VzdCBkdXJhdGlvbiBmaXJzdCwgdGllLWJyZWFrXG5cdFx0Ly8gYnkgZWFybGllc3Qgc3RhcnQuXG5cdFx0Y29uc3Qgc29ydGVkQ2x1c3RlciA9IFsuLi5jbHVzdGVyXS5zb3J0KChhLCBiKSA9PiB7XG5cdFx0XHRjb25zdCBkdXJEaWZmID1cblx0XHRcdFx0Yi5lbmQuZGlmZihiLnN0YXJ0LCAnbWludXRlJykgLSBhLmVuZC5kaWZmKGEuc3RhcnQsICdtaW51dGUnKVxuXHRcdFx0cmV0dXJuIGR1ckRpZmYgIT09IDAgPyBkdXJEaWZmIDogYS5zdGFydC5kaWZmKGIuc3RhcnQpXG5cdFx0fSlcblxuXHRcdGNvbnN0IG4gPSBzb3J0ZWRDbHVzdGVyLmxlbmd0aFxuXHRcdGNvbnN0IG9mZnNldFBlckV2ZW50ID0gbiA+IDEgPyBtYXhPZmZzZXRCeUNvdW50KG4pIC8gKG4gLSAxKSA6IDBcblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbjsgaSsrKSB7XG5cdFx0XHRjb25zdCBldmVudCA9IHNvcnRlZENsdXN0ZXJbaV1cblx0XHRcdGNvbnN0IHBvcyA9IGNvbXB1dGVUb3BIZWlnaHQoZXZlbnQpXG5cdFx0XHRpZiAoIXBvcykgY29udGludWVcblx0XHRcdC8vIEZpcnN0IGV2ZW50IChsb25nZXN0KSB0YWtlcyBmdWxsIHdpZHRoOyBsYXRlciBldmVudHMgYXJlIG9mZnNldC5cblx0XHRcdGNvbnN0IGxlZnQgPSBpID09PSAwID8gMCA6IG9mZnNldFBlckV2ZW50ICogaVxuXHRcdFx0cHJvY2Vzc2VkRXZlbnRzLnB1c2goe1xuXHRcdFx0XHQuLi5ldmVudCxcblx0XHRcdFx0Li4ucG9zLFxuXHRcdFx0XHRsZWZ0LFxuXHRcdFx0XHR3aWR0aDogMTAwIC0gbGVmdCxcblx0XHRcdFx0ekluZGV4OiBpICsgMSxcblx0XHRcdH0pXG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHByb2Nlc3NlZEV2ZW50c1xufVxuIiwKICAgICJpbXBvcnQgeyBtZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5cbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmludGVyZmFjZSBWZXJ0aWNhbEdyaWRIZWFkZXJDb250YWluZXJQcm9wcyB7XG5cdGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlXG5cdGNsYXNzZXM/OiB7IGhlYWRlcj86IHN0cmluZzsgYWxsRGF5Pzogc3RyaW5nIH1cblx0YWxsRGF5Um93PzogUmVhY3QuUmVhY3ROb2RlXG5cdGV4cGFuZEFsbERheVJvdz86IGJvb2xlYW5cbn1cblxuY29uc3QgTm9NZW1vVmVydGljYWxHcmlkSGVhZGVyQ29udGFpbmVyOiBSZWFjdC5GQzxcblx0VmVydGljYWxHcmlkSGVhZGVyQ29udGFpbmVyUHJvcHNcbj4gPSAoeyBjaGlsZHJlbiwgY2xhc3NlcywgYWxsRGF5Um93LCBleHBhbmRBbGxEYXlSb3cgPSBmYWxzZSB9KSA9PiB7XG5cdGNvbnN0IHsgc3RpY2t5Vmlld0hlYWRlciwgdmlld0hlYWRlckNsYXNzTmFtZSB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoXG5cdFx0KHN0YXRlKSA9PiAoe1xuXHRcdFx0c3RpY2t5Vmlld0hlYWRlcjogc3RhdGUuc3RpY2t5Vmlld0hlYWRlcixcblx0XHRcdHZpZXdIZWFkZXJDbGFzc05hbWU6IHN0YXRlLnZpZXdIZWFkZXJDbGFzc05hbWUsXG5cdFx0fSlcblx0KVxuXHRjb25zdCBUb3RhbFdpZHRoQ2xhc3MgPSAnbWluLXctZnVsbCB3LWZpdCdcblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRleHBhbmRBbGxEYXlSb3cgJiYgJ2ZsZXggaC1mdWxsIGZsZXgtY29sJyxcblx0XHRcdFx0c3RpY2t5Vmlld0hlYWRlciAmJiAnc3RpY2t5IHRvcC0wIHotMjEgYmctYmFja2dyb3VuZCcsIC8vIFotaW5kZXggYWJvdmUgdGhlIGxlZnQgc3RpY2t5IHJlc291cmNlIGNvbHVtblxuXHRcdFx0XHR2aWV3SGVhZGVyQ2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdD5cblx0XHRcdDxkaXZcblx0XHRcdFx0Y2xhc3NOYW1lPXtjbignaC0xMiBib3JkZXItYicsIFRvdGFsV2lkdGhDbGFzcywgY2xhc3Nlcz8uaGVhZGVyKX1cblx0XHRcdFx0ZGF0YS10ZXN0aWQ9XCJ2ZXJ0aWNhbC1ncmlkLWhlYWRlclwiXG5cdFx0XHQ+XG5cdFx0XHRcdHtjaGlsZHJlbn1cblx0XHRcdDwvZGl2PlxuXHRcdFx0ey8qIEFsbC1kYXkgcm93ICovfVxuXHRcdFx0e2FsbERheVJvdyAmJiAoXG5cdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0J2ZsZXggbWluLWgtMTInLFxuXHRcdFx0XHRcdFx0VG90YWxXaWR0aENsYXNzLFxuXHRcdFx0XHRcdFx0ZXhwYW5kQWxsRGF5Um93ICYmICdmbGV4LTEgb3ZlcmZsb3ctaGlkZGVuJyxcblx0XHRcdFx0XHRcdGNsYXNzZXM/LmFsbERheVxuXHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9XCJ2ZXJ0aWNhbC1ncmlkLWFsbC1kYXlcIlxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0e2FsbERheVJvd31cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQpfVxuXHRcdDwvZGl2PlxuXHQpXG59XG5cbmV4cG9ydCBjb25zdCBWZXJ0aWNhbEdyaWRIZWFkZXJDb250YWluZXIgPSBtZW1vKFxuXHROb01lbW9WZXJ0aWNhbEdyaWRIZWFkZXJDb250YWluZXJcbilcbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBCdXNpbmVzc0hvdXJzIH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgZ2V0RGF5SG91cnMgfSBmcm9tICdAL2xpYi91dGlscy9kYXRlLXV0aWxzJ1xuaW1wb3J0IHsgY2FsY3VsYXRlQnVzaW5lc3NIb3Vyc1JhbmdlIH0gZnJvbSAnLi9idXNpbmVzcy1ob3VycydcblxuaW50ZXJmYWNlIEdldFZpZXdIb3Vyc09wdGlvbnMge1xuXHRyZWZlcmVuY2VEYXRlOiBEYXlqc1xuXHRidXNpbmVzc0hvdXJzPzogQnVzaW5lc3NIb3VycyB8IEJ1c2luZXNzSG91cnNbXVxuXHRoaWRlTm9uQnVzaW5lc3NIb3Vycz86IGJvb2xlYW5cblx0LyoqXG5cdCAqIEZvciB2aWV3cyB3aXRoIG11bHRpcGxlIGRheXMgKGxpa2UgV2Vla1ZpZXcpLCB3ZSBtaWdodCB3YW50IHRvIHNob3dcblx0ICogdGhlIHVuaW9uIG9mIGFsbCBidXNpbmVzcyBob3VycyBhY3Jvc3MgdGhvc2UgZGF5cy5cblx0ICovXG5cdGFsbERhdGVzPzogRGF5anNbXVxuXHQvKipcblx0ICogT3B0aW9uYWwgYWRkaXRpb25hbCBidXNpbmVzcyBob3VycyBjb25maWd1cmF0aW9ucyAoZS5nLiwgZnJvbSByZXNvdXJjZXMpLlxuXHQgKiBUaGVzZSB3aWxsIGJlIG1lcmdlZCB3aXRoIHRoZSBnbG9iYWwgYnVzaW5lc3NIb3VycyB3aGVuIGNhbGN1bGF0aW5nIHRoZSB2aXNpYmxlIHJhbmdlLlxuXHQgKi9cblx0cmVzb3VyY2VCdXNpbmVzc0hvdXJzPzogKEJ1c2luZXNzSG91cnMgfCBCdXNpbmVzc0hvdXJzW10pW11cbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIGxpc3Qgb2YgaG91cnMgdG8gZGlzcGxheSBpbiB0aGUgY2FsZW5kYXIgdmlldy5cbiAqIElmIGhpZGVOb25CdXNpbmVzc0hvdXJzIGlzIHRydWUsIGl0IGZpbHRlcnMgdGhlIGhvdXJzIGJhc2VkIG9uIGJ1c2luZXNzSG91cnMgY29uZmlndXJhdGlvbi5cbiAqIEZvciBtdWx0aXBsZSBkYXRlcywgaXQgdGFrZXMgdGhlIGVhcmxpZXN0IHN0YXJ0IGFuZCBsYXRlc3QgZW5kIGFjcm9zcyBhbGwgZGF0ZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRWaWV3SG91cnMoe1xuXHRyZWZlcmVuY2VEYXRlLFxuXHRidXNpbmVzc0hvdXJzLFxuXHRoaWRlTm9uQnVzaW5lc3NIb3Vycyxcblx0YWxsRGF0ZXMgPSBbcmVmZXJlbmNlRGF0ZV0sXG5cdHJlc291cmNlQnVzaW5lc3NIb3VycyA9IFtdLFxufTogR2V0Vmlld0hvdXJzT3B0aW9ucyk6IERheWpzW10ge1xuXHRjb25zdCBob3VycyA9IGdldERheUhvdXJzKHsgcmVmZXJlbmNlRGF0ZSB9KVxuXG5cdGNvbnN0IGhhc0J1c2luZXNzSG91cnNDb25maWcgPVxuXHRcdCEhYnVzaW5lc3NIb3VycyB8fCByZXNvdXJjZUJ1c2luZXNzSG91cnMubGVuZ3RoID4gMFxuXHRjb25zdCBzaG91bGRGaWx0ZXJCeUJ1c2luZXNzSG91cnMgPVxuXHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzICYmIGhhc0J1c2luZXNzSG91cnNDb25maWdcblxuXHRpZiAoIXNob3VsZEZpbHRlckJ5QnVzaW5lc3NIb3VycykgcmV0dXJuIGhvdXJzXG5cblx0Y29uc3QgeyBtaW5TdGFydCwgbWF4RW5kLCBoYXNCdXNpbmVzc0hvdXJzIH0gPSBjYWxjdWxhdGVCdXNpbmVzc0hvdXJzUmFuZ2Uoe1xuXHRcdGFsbERhdGVzLFxuXHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0cmVzb3VyY2VCdXNpbmVzc0hvdXJzLFxuXHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzLFxuXHR9KVxuXG5cdGlmICghaGFzQnVzaW5lc3NIb3VycykgcmV0dXJuIGhvdXJzXG5cblx0aWYgKG1pblN0YXJ0ID49IG1heEVuZCkgcmV0dXJuIFtdXG5cblx0cmV0dXJuIGhvdXJzLmZpbHRlcigoaCkgPT4ge1xuXHRcdGNvbnN0IGhvdXIgPSBoLmhvdXIoKVxuXHRcdHJldHVybiBob3VyID49IG1pblN0YXJ0ICYmIGhvdXIgPCBtYXhFbmRcblx0fSlcbn1cbiIsCiAgICAiaW1wb3J0IHsgQWxsRGF5Um93IH0gZnJvbSAnQC9jb21wb25lbnRzL2FsbC1kYXktcm93L2FsbC1kYXktcm93J1xuaW1wb3J0IHsgQW5pbWF0ZWRTZWN0aW9uIH0gZnJvbSAnQC9jb21wb25lbnRzL2FuaW1hdGlvbnMvYW5pbWF0ZWQtc2VjdGlvbidcbmltcG9ydCB7IEhvdXJMYWJlbCB9IGZyb20gJ0AvY29tcG9uZW50cy9ob3VyLWxhYmVsL2hvdXItbGFiZWwnXG5pbXBvcnQgeyBWZXJ0aWNhbEdyaWQgfSBmcm9tICdAL2NvbXBvbmVudHMvdmVydGljYWwtZ3JpZC92ZXJ0aWNhbC1ncmlkJ1xuaW1wb3J0IHsgZ2V0Vmlld0hvdXJzIH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci91dGlscy92aWV3LWhvdXJzJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUgeyBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IGdldERheUtleSwgaXNUb2RheSB9IGZyb20gJ0AvbGliL3V0aWxzL2RhdGUtdXRpbHMnXG5pbXBvcnQgeyBrZXlzIH0gZnJvbSAnQC9saWIvdXRpbHMva2V5cydcblxuZXhwb3J0IGNvbnN0IERheVZpZXcgPSAoKSA9PiB7XG5cdGNvbnN0IHsgY3VycmVudERhdGUsIHQsIGJ1c2luZXNzSG91cnMsIGhpZGVOb25CdXNpbmVzc0hvdXJzLCBzbG90RHVyYXRpb24gfSA9XG5cdFx0dXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXHRjb25zdCB0b2RheSA9IGlzVG9kYXkoY3VycmVudERhdGUpXG5cdGNvbnN0IGhvdXJzID0gZ2V0Vmlld0hvdXJzKHtcblx0XHRyZWZlcmVuY2VEYXRlOiBjdXJyZW50RGF0ZSxcblx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzLFxuXHRcdGFsbERhdGVzOiBbY3VycmVudERhdGVdLFxuXHR9KVxuXG5cdGNvbnN0IGZpcnN0Q29sID0ge1xuXHRcdGlkOiBrZXlzLmNvbC50aW1lLFxuXHRcdGRheTogdW5kZWZpbmVkLFxuXHRcdGRheXM6IGhvdXJzLFxuXHRcdGNsYXNzTmFtZTpcblx0XHRcdCdzaHJpbmstMCB3LTE2IG1pbi13LTE2IG1heC13LTE2IHN0aWNreSBsZWZ0LTAgYmctYmFja2dyb3VuZCB6LTIwIGJvcmRlci1yLTAnLFxuXHRcdGdyaWRUeXBlOiAnaG91cicgYXMgY29uc3QsXG5cdFx0bm9FdmVudHM6IHRydWUsXG5cdFx0cmVuZGVyQ2VsbDogKGRhdGU6IERheWpzKSA9PiAoXG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQtbXV0ZWQtZm9yZWdyb3VuZCBwLTIgdGV4dC1yaWdodCB0ZXh0LVsxMHB4XSBzbTp0ZXh0LXhzIGZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyXCI+XG5cdFx0XHRcdDxIb3VyTGFiZWwgZGF0ZT17ZGF0ZX0gLz5cblx0XHRcdDwvZGl2PlxuXHRcdCksXG5cdH1cblxuXHRjb25zdCBjb2x1bW5zID0ge1xuXHRcdGlkOiBrZXlzLmNvbC5kYXkoY3VycmVudERhdGUpLFxuXHRcdGRheTogY3VycmVudERhdGUsXG5cdFx0ZGF5czogaG91cnMsXG5cdFx0Y2xhc3NOYW1lOiAndy1bY2FsYygxMDAlLTRyZW0pXSBmbGV4LTEnLFxuXHRcdGdyaWRUeXBlOiAnaG91cicgYXMgY29uc3QsXG5cdH1cblxuXHRyZXR1cm4gKFxuXHRcdDxWZXJ0aWNhbEdyaWRcblx0XHRcdGFsbERheVJvdz17PEFsbERheVJvdyBkYXlzPXtbY3VycmVudERhdGVdfSAvPn1cblx0XHRcdGNsYXNzZXM9e3tcblx0XHRcdFx0aGVhZGVyOiAndy1mdWxsJyxcblx0XHRcdFx0Ym9keTogJ3ctZnVsbCcsXG5cdFx0XHRcdGFsbERheTogJ3ctZnVsbCcsXG5cdFx0XHR9fVxuXHRcdFx0Y29sdW1ucz17W2ZpcnN0Q29sLCBjb2x1bW5zXX1cblx0XHRcdGdyaWRUeXBlPVwiaG91clwiXG5cdFx0XHRzbG90RHVyYXRpb25NaW51dGVzPXtzbG90RHVyYXRpb259XG5cdFx0XHR2YXJpYW50PVwicmVndWxhclwiXG5cdFx0PlxuXHRcdFx0ey8qIEhlYWRlciAqL31cblx0XHRcdDxkaXZcblx0XHRcdFx0Y2xhc3NOYW1lPXsnZmxleCBmbGV4LTEganVzdGlmeS1jZW50ZXIgaXRlbXMtY2VudGVyIG1pbi1oLTEyJ31cblx0XHRcdFx0ZGF0YS10ZXN0aWQ9XCJkYXktdmlldy1oZWFkZXJcIlxuXHRcdFx0PlxuXHRcdFx0XHQ8QW5pbWF0ZWRTZWN0aW9uXG5cdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdCdmbGV4IGp1c3RpZnktY2VudGVyIGl0ZW1zLWNlbnRlciB0ZXh0LWNlbnRlciB0ZXh0LXNtIGZvbnQtc2VtaWJvbGQgc206dGV4dC14bCcsXG5cdFx0XHRcdFx0XHR0b2RheSAmJiAndGV4dC1wcmltYXJ5J1xuXHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0dHJhbnNpdGlvbktleT17Z2V0RGF5S2V5KGN1cnJlbnREYXRlKX1cblx0XHRcdFx0PlxuXHRcdFx0XHRcdHtjdXJyZW50RGF0ZS5mb3JtYXQoJ2RkZGQsIExMJyl9XG5cdFx0XHRcdFx0e3RvZGF5ICYmIChcblx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cImJnLXByaW1hcnkgdGV4dC1wcmltYXJ5LWZvcmVncm91bmQgbWwtMiByb3VuZGVkLWZ1bGwgcHgtMSBweS0wLjUgdGV4dC14cyBzbTpweC0yIHNtOnRleHQtc21cIj5cblx0XHRcdFx0XHRcdFx0e3QoJ3RvZGF5Jyl9XG5cdFx0XHRcdFx0XHQ8L3NwYW4+XG5cdFx0XHRcdFx0KX1cblx0XHRcdFx0PC9BbmltYXRlZFNlY3Rpb24+XG5cdFx0XHQ8L2Rpdj5cblx0XHQ8L1ZlcnRpY2FsR3JpZD5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEhvcml6b250YWxHcmlkIH0gZnJvbSAnQC9jb21wb25lbnRzL2hvcml6b250YWwtZ3JpZC9ob3Jpem9udGFsLWdyaWQnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgeyBnZXRNb250aFdlZWtzIH0gZnJvbSAnQC9saWIvdXRpbHMvZGF0ZS11dGlscydcbmltcG9ydCB7IGtleXMgfSBmcm9tICdAL2xpYi91dGlscy9rZXlzJ1xuaW1wb3J0IHsgTW9udGhIZWFkZXIgfSBmcm9tICcuL21vbnRoLWhlYWRlcidcbmltcG9ydCB0eXBlIHsgTW9udGhWaWV3UHJvcHMgfSBmcm9tICcuL3R5cGVzJ1xuXG5leHBvcnQgY29uc3QgTW9udGhWaWV3OiBSZWFjdC5GQzxNb250aFZpZXdQcm9wcz4gPSAoKSA9PiB7XG5cdGNvbnN0IHsgY3VycmVudERhdGUsIGZpcnN0RGF5T2ZXZWVrIH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cblx0Y29uc3Qgd2Vla3MgPSB1c2VNZW1vKFxuXHRcdCgpID0+IGdldE1vbnRoV2Vla3MoY3VycmVudERhdGUsIGZpcnN0RGF5T2ZXZWVrKSxcblx0XHRbY3VycmVudERhdGUsIGZpcnN0RGF5T2ZXZWVrXVxuXHQpXG5cblx0Y29uc3Qgcm93cyA9IHdlZWtzLm1hcCgoZGF5cywgd2Vla0luZGV4KSA9PiAoe1xuXHRcdGlkOiBrZXlzLmxpc3RLZXkoJ3dlZWsnLCB3ZWVrSW5kZXgpLFxuXHRcdGNvbHVtbnM6IGRheXMubWFwKChkYXkpID0+ICh7XG5cdFx0XHRpZDoga2V5cy5jb2wuZGF5KGRheSksXG5cdFx0XHRkYXksXG5cdFx0XHRjbGFzc05hbWU6ICd3LWF1dG8nLFxuXHRcdFx0Z3JpZFR5cGU6ICdkYXknIGFzIGNvbnN0LFxuXHRcdH0pKSxcblx0XHRjbGFzc05hbWU6ICdmbGV4LTEnLFxuXHRcdHNob3dEYXlOdW1iZXI6IHRydWUsXG5cdH0pKVxuXG5cdHJldHVybiAoXG5cdFx0PEhvcml6b250YWxHcmlkXG5cdFx0XHRjbGFzc2VzPXt7IGJvZHk6ICd3LWZ1bGwnLCBoZWFkZXI6ICd3LWZ1bGwnIH19XG5cdFx0XHRyb3dzPXtyb3dzfVxuXHRcdFx0dmFyaWFudD1cInJlZ3VsYXJcIlxuXHRcdD5cblx0XHRcdDxNb250aEhlYWRlciBjbGFzc05hbWU9XCJoLTEyXCIgLz5cblx0XHQ8L0hvcml6b250YWxHcmlkPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlUmVmIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBTY3JvbGxBcmVhLCBTY3JvbGxCYXIgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvc2Nyb2xsLWFyZWEnXG5pbXBvcnQgeyB1c2VTY3JvbGxUb1RpbWUgfSBmcm9tICdAL2NvbXBvbmVudHMvdmVydGljYWwtZ3JpZC91c2Utc2Nyb2xsLXRvLXRpbWUnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgSG9yaXpvbnRhbEdyaWRIZWFkZXJDb250YWluZXIgfSBmcm9tICcuL2hvcml6b250YWwtZ3JpZC1oZWFkZXItY29udGFpbmVyJ1xuaW1wb3J0IHtcblx0SG9yaXpvbnRhbEdyaWRSb3csXG5cdHR5cGUgSG9yaXpvbnRhbEdyaWRSb3dQcm9wcyxcbn0gZnJvbSAnLi9ob3Jpem9udGFsLWdyaWQtcm93J1xuXG5pbnRlcmZhY2UgSG9yaXpvbnRhbEdyaWRQcm9wcyB7XG5cdHJvd3M6IEhvcml6b250YWxHcmlkUm93UHJvcHNbXVxuXHRjaGlsZHJlbj86IFJlYWN0LlJlYWN0Tm9kZVxuXHRjbGFzc2VzPzogeyBoZWFkZXI/OiBzdHJpbmc7IGJvZHk/OiBzdHJpbmcgfVxuXHRhbGxEYXk/OiBib29sZWFuXG5cdGdyaWRUeXBlPzogJ2RheScgfCAnaG91cidcblx0dmFyaWFudD86ICdyZWd1bGFyJyB8ICdyZXNvdXJjZSdcblx0ZGF5TnVtYmVySGVpZ2h0PzogbnVtYmVyXG59XG5cbmV4cG9ydCBjb25zdCBIb3Jpem9udGFsR3JpZDogUmVhY3QuRkM8SG9yaXpvbnRhbEdyaWRQcm9wcz4gPSAoe1xuXHRyb3dzLFxuXHRjaGlsZHJlbixcblx0Y2xhc3Nlcyxcblx0YWxsRGF5OiB0b3BMZXZlbEFsbERheSxcblx0Z3JpZFR5cGUsXG5cdHZhcmlhbnQgPSAncmVzb3VyY2UnLFxuXHRkYXlOdW1iZXJIZWlnaHQsXG59KSA9PiB7XG5cdGNvbnN0IHsgY3VycmVudERhdGUsIHZpZXcsIHNjcm9sbFRpbWUgfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblx0Y29uc3Qgdmlld3BvcnRSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQgfCBudWxsPihudWxsKVxuXG5cdGNvbnN0IGlzUmVzb3VyY2VDYWxlbmRhciA9IHZhcmlhbnQgPT09ICdyZXNvdXJjZSdcblx0Y29uc3QgaXNSZWd1bGFyQ2FsZW5kYXIgPSAhaXNSZXNvdXJjZUNhbGVuZGFyXG5cdGNvbnN0IGNhbkhvcml6b250YWxTY3JvbGxUb0hvdXIgPSBncmlkVHlwZSA9PT0gJ2hvdXInICYmIGlzUmVzb3VyY2VDYWxlbmRhclxuXG5cdHVzZVNjcm9sbFRvVGltZSh7XG5cdFx0dmlld3BvcnRSZWYsXG5cdFx0c2Nyb2xsVGltZSxcblx0XHRlbmFibGVkOiBjYW5Ib3Jpem9udGFsU2Nyb2xsVG9Ib3VyLFxuXHRcdHNjcm9sbEtleTogYCR7dmlld30tJHtjdXJyZW50RGF0ZS5mb3JtYXQoJ1lZWVktTU0tREQnKX1gLFxuXHRcdGF4aXM6ICdob3Jpem9udGFsJyxcblx0fSlcblxuXHRjb25zdCBoZWFkZXIgPSBjaGlsZHJlbiAmJiAoXG5cdFx0PEhvcml6b250YWxHcmlkSGVhZGVyQ29udGFpbmVyIGNsYXNzTmFtZT17Y2xhc3Nlcz8uaGVhZGVyfT5cblx0XHRcdHtjaGlsZHJlbn1cblx0XHQ8L0hvcml6b250YWxHcmlkSGVhZGVyQ29udGFpbmVyPlxuXHQpXG5cblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9XCJoLWZ1bGwgZmxleCBmbGV4LWNvbFwiXG5cdFx0XHRkYXRhLXRlc3RpZD1cImhvcml6b250YWwtZ3JpZC1jb250YWluZXJcIlxuXHRcdD5cblx0XHRcdHsvKipcblx0XHRcdCAqIGhlYWRlciByb3cgaXMgcmVuZGVyZWQgb3V0c2lkZSBzY3JvbGwgYXJlYSBmb3IgcmVndWxhciBjYWxlbmRhclxuXHRcdFx0ICovfVxuXHRcdFx0e2lzUmVndWxhckNhbGVuZGFyICYmIGhlYWRlcn1cblxuXHRcdFx0PFNjcm9sbEFyZWFcblx0XHRcdFx0Y2xhc3NOYW1lPXtjbignaC1mdWxsJywgaXNSZWd1bGFyQ2FsZW5kYXIgJiYgJ292ZXJmbG93LWF1dG8nKX1cblx0XHRcdFx0ZGF0YS10ZXN0aWQ9XCJob3Jpem9udGFsLWdyaWQtc2Nyb2xsXCJcblx0XHRcdFx0dmlld1BvcnRQcm9wcz17e1xuXHRcdFx0XHRcdGNsYXNzTmFtZTogJyo6ZmxleCEgKjpmbGV4LWNvbCEgKjptaW4taC1mdWxsJyxcblx0XHRcdFx0XHRyZWY6IHZpZXdwb3J0UmVmLFxuXHRcdFx0XHR9fVxuXHRcdFx0PlxuXHRcdFx0XHR7LyoqXG5cdFx0XHRcdCAqIGhlYWRlciByb3cgZm9yIHJlc291cmNlIGNhbGVuZGFyIGluc2lkZSBzY3JvbGwgYXJlYVxuXHRcdFx0XHQgKiAqL31cblx0XHRcdFx0e2lzUmVzb3VyY2VDYWxlbmRhciAmJiBoZWFkZXJ9XG5cblx0XHRcdFx0ey8qIENhbGVuZGFyIGFyZWEgd2l0aCBzY3JvbGwgKi99XG5cdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKCdmbGV4IGZsZXgtMSB3LWZpdCcsIGNsYXNzZXM/LmJvZHkpfVxuXHRcdFx0XHRcdGRhdGEtdGVzdGlkPVwiaG9yaXpvbnRhbC1ncmlkLWJvZHlcIlxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwicmVsYXRpdmUgdy1mdWxsIGZsZXggZmxleC1jb2wgZmxleC0xXCJcblx0XHRcdFx0XHRcdGtleT17Y3VycmVudERhdGUuZm9ybWF0KCdZWVlZLU1NJyl9XG5cdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0e3Jvd3MubWFwKChyb3csIGluZGV4KSA9PiAoXG5cdFx0XHRcdFx0XHRcdDxIb3Jpem9udGFsR3JpZFJvd1xuXHRcdFx0XHRcdFx0XHRcdGFsbERheT17cm93LmFsbERheSA/PyB0b3BMZXZlbEFsbERheX1cblx0XHRcdFx0XHRcdFx0XHRkYXlOdW1iZXJIZWlnaHQ9e2RheU51bWJlckhlaWdodH1cblx0XHRcdFx0XHRcdFx0XHRncmlkVHlwZT17Z3JpZFR5cGV9XG5cdFx0XHRcdFx0XHRcdFx0aXNMYXN0Um93PXtpbmRleCA9PT0gcm93cy5sZW5ndGggLSAxfVxuXHRcdFx0XHRcdFx0XHRcdGtleT17cm93LmlkfVxuXHRcdFx0XHRcdFx0XHRcdHZhcmlhbnQ9e3ZhcmlhbnR9XG5cdFx0XHRcdFx0XHRcdFx0ey4uLnJvd31cblx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdCkpfVxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8L2Rpdj5cblxuXHRcdFx0XHQ8U2Nyb2xsQmFyIGNsYXNzTmFtZT1cInotMzBcIiAvPlxuXHRcdFx0XHQ8U2Nyb2xsQmFyIGNsYXNzTmFtZT1cInotMzBcIiBvcmllbnRhdGlvbj1cImhvcml6b250YWxcIiAvPlxuXHRcdFx0PC9TY3JvbGxBcmVhPlxuXHRcdDwvZGl2PlxuXHQpXG59XG4iLAogICAgImltcG9ydCB7IG1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmludGVyZmFjZSBIb3Jpem9udGFsR3JpZEhlYWRlckNvbnRhaW5lclByb3BzIHtcblx0Y2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGVcblx0Y2xhc3NOYW1lPzogc3RyaW5nXG59XG5cbmNvbnN0IE5vTWVtb0hvcml6b250YWxHcmlkSGVhZGVyQ29udGFpbmVyID0gKHtcblx0Y2hpbGRyZW4sXG5cdGNsYXNzTmFtZSxcbn06IEhvcml6b250YWxHcmlkSGVhZGVyQ29udGFpbmVyUHJvcHMpID0+IHtcblx0Y29uc3QgeyBzdGlja3lWaWV3SGVhZGVyLCB2aWV3SGVhZGVyQ2xhc3NOYW1lIH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dChcblx0XHQoc3RhdGUpID0+ICh7XG5cdFx0XHRzdGlja3lWaWV3SGVhZGVyOiBzdGF0ZS5zdGlja3lWaWV3SGVhZGVyLFxuXHRcdFx0dmlld0hlYWRlckNsYXNzTmFtZTogc3RhdGUudmlld0hlYWRlckNsYXNzTmFtZSxcblx0XHR9KVxuXHQpXG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0J2ZsZXggaC0xMiB3LWZpdCcsXG5cdFx0XHRcdHN0aWNreVZpZXdIZWFkZXIgJiYgJ3N0aWNreSB0b3AtMCB6LTIxIGJnLWJhY2tncm91bmQnLFxuXHRcdFx0XHRjbGFzc05hbWUsXG5cdFx0XHRcdHZpZXdIZWFkZXJDbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXRlc3RpZD1cImhvcml6b250YWwtZ3JpZC1oZWFkZXJcIlxuXHRcdD5cblx0XHRcdHtjaGlsZHJlbn1cblx0XHQ8L2Rpdj5cblx0KVxufVxuXG5leHBvcnQgY29uc3QgSG9yaXpvbnRhbEdyaWRIZWFkZXJDb250YWluZXIgPSBtZW1vKFxuXHROb01lbW9Ib3Jpem9udGFsR3JpZEhlYWRlckNvbnRhaW5lclxuKVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEFuaW1hdGVkU2VjdGlvbiB9IGZyb20gJ0AvY29tcG9uZW50cy9hbmltYXRpb25zL2FuaW1hdGVkLXNlY3Rpb24nXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgZ2V0V2Vla0RheXMgfSBmcm9tICdAL2xpYi91dGlscy9kYXRlLXV0aWxzJ1xuaW1wb3J0IHsga2V5cyB9IGZyb20gJ0AvbGliL3V0aWxzL2tleXMnXG5cbmludGVyZmFjZSBNb250aEhlYWRlclByb3BzIHtcblx0Y2xhc3NOYW1lPzogc3RyaW5nXG59XG5cbmV4cG9ydCBjb25zdCBNb250aEhlYWRlcjogUmVhY3QuRkM8TW9udGhIZWFkZXJQcm9wcz4gPSAoeyBjbGFzc05hbWUgfSkgPT4ge1xuXHRjb25zdCB7IGZpcnN0RGF5T2ZXZWVrLCBzdGlja3lWaWV3SGVhZGVyLCB2aWV3SGVhZGVyQ2xhc3NOYW1lLCBjdXJyZW50RGF0ZSB9ID1cblx0XHR1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cblx0Ly8gUmVvcmRlciB3ZWVrIGRheXMgYmFzZWQgb24gZmlyc3REYXlPZldlZWtcblx0Y29uc3Qgd2Vla0RheXMgPSBnZXRXZWVrRGF5cyhjdXJyZW50RGF0ZSwgZmlyc3REYXlPZldlZWspXG5cblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQnZmxleCB3LWZ1bGwnLFxuXHRcdFx0XHRzdGlja3lWaWV3SGVhZGVyICYmICdzdGlja3kgdG9wLTAgei0yMCcsXG5cdFx0XHRcdHZpZXdIZWFkZXJDbGFzc05hbWUsXG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHRcdGRhdGEtdGVzdGlkPVwibW9udGgtaGVhZGVyXCJcblx0XHQ+XG5cdFx0XHR7d2Vla0RheXMubWFwKCh3ZWVrRGF5LCBpbmRleCkgPT4gKFxuXHRcdFx0XHQ8QW5pbWF0ZWRTZWN0aW9uXG5cdFx0XHRcdFx0Y2xhc3NOYW1lPVwicHktMiB0ZXh0LWNlbnRlciBmb250LW1lZGl1bSBib3JkZXItciBsYXN0OmJvcmRlci1yLTAgYm9yZGVyLWIgZmxleC0xIG1pbi13LTBcIlxuXHRcdFx0XHRcdGRhdGEtdGVzdGlkPXtrZXlzLmhlYWRlci53ZWVrZGF5KCdtb250aCcsIHdlZWtEYXkuZm9ybWF0KCdkZGQnKSl9XG5cdFx0XHRcdFx0ZGVsYXk9e2luZGV4ICogMC4wNX1cblx0XHRcdFx0XHRrZXk9e3dlZWtEYXkudG9JU09TdHJpbmcoKX1cblx0XHRcdFx0XHR0cmFuc2l0aW9uS2V5PXt3ZWVrRGF5LnRvSVNPU3RyaW5nKCl9XG5cdFx0XHRcdD5cblx0XHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXNtIGNhcGl0YWxpemUgdHJ1bmNhdGUgdy1mdWxsIGJsb2NrXCI+XG5cdFx0XHRcdFx0XHR7d2Vla0RheS5mb3JtYXQoJ2RkZCcpfVxuXHRcdFx0XHRcdDwvc3Bhbj5cblx0XHRcdFx0PC9BbmltYXRlZFNlY3Rpb24+XG5cdFx0XHQpKX1cblx0XHQ8L2Rpdj5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEFsbERheVJvdyB9IGZyb20gJ0AvY29tcG9uZW50cy9hbGwtZGF5LXJvdy9hbGwtZGF5LXJvdydcbmltcG9ydCB7IEFuaW1hdGVkU2VjdGlvbiB9IGZyb20gJ0AvY29tcG9uZW50cy9hbmltYXRpb25zL2FuaW1hdGVkLXNlY3Rpb24nXG5pbXBvcnQgeyBIb3VyTGFiZWwgfSBmcm9tICdAL2NvbXBvbmVudHMvaG91ci1sYWJlbC9ob3VyLWxhYmVsJ1xuaW1wb3J0IHsgVmVydGljYWxHcmlkIH0gZnJvbSAnQC9jb21wb25lbnRzL3ZlcnRpY2FsLWdyaWQvdmVydGljYWwtZ3JpZCdcbmltcG9ydCB7IGdldFZpZXdIb3VycyB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvdXRpbHMvdmlldy1ob3VycydcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB0eXBlIHsgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgeyBnZXRXZWVrRGF5cywgaXNUb2RheSB9IGZyb20gJ0AvbGliL3V0aWxzL2RhdGUtdXRpbHMnXG5pbXBvcnQgeyBrZXlzIH0gZnJvbSAnQC9saWIvdXRpbHMva2V5cydcblxuY29uc3QgQ0VMTF9DTEFTUyA9ICdmbGV4LTEgbWluLXctMCdcbmNvbnN0IExFRlRfQ09MX1dJRFRIID0gJ3ctMTAgc206dy0xNiBtaW4tdy0xMCBzbTptaW4tdy0xNiBtYXgtdy0xMCBzbTptYXgtdy0xNidcblxuZXhwb3J0IGNvbnN0IFdlZWtWaWV3OiBSZWFjdC5GQyA9ICgpID0+IHtcblx0Y29uc3Qge1xuXHRcdHQsXG5cdFx0Y3VycmVudERhdGUsXG5cdFx0Zmlyc3REYXlPZldlZWssXG5cdFx0c2VsZWN0RGF0ZSxcblx0XHRvcGVuRXZlbnRGb3JtLFxuXHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0aGlkZU5vbkJ1c2luZXNzSG91cnMsXG5cdFx0aGlkZGVuRGF5cyxcblx0XHRzbG90RHVyYXRpb24sXG5cdH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cblx0Y29uc3Qgd2Vla0RheXMgPSB1c2VNZW1vKFxuXHRcdCgpID0+IGdldFdlZWtEYXlzKGN1cnJlbnREYXRlLCBmaXJzdERheU9mV2VlayksXG5cdFx0W2N1cnJlbnREYXRlLCBmaXJzdERheU9mV2Vla11cblx0KVxuXG5cdGNvbnN0IHZpc2libGVEYXlzID0gdXNlTWVtbyhcblx0XHQoKSA9PlxuXHRcdFx0aGlkZGVuRGF5c1xuXHRcdFx0XHQ/IHdlZWtEYXlzLmZpbHRlcigoZGF5KSA9PiAhaGlkZGVuRGF5cy5oYXMoZGF5LmRheSgpKSlcblx0XHRcdFx0OiB3ZWVrRGF5cyxcblx0XHRbd2Vla0RheXMsIGhpZGRlbkRheXNdXG5cdClcblxuXHRjb25zdCBob3VycyA9IHVzZU1lbW8oXG5cdFx0KCkgPT5cblx0XHRcdGdldFZpZXdIb3Vycyh7XG5cdFx0XHRcdHJlZmVyZW5jZURhdGU6IGN1cnJlbnREYXRlLFxuXHRcdFx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdFx0XHRoaWRlTm9uQnVzaW5lc3NIb3Vycyxcblx0XHRcdFx0YWxsRGF0ZXM6IHdlZWtEYXlzLFxuXHRcdFx0fSksXG5cdFx0W2N1cnJlbnREYXRlLCBidXNpbmVzc0hvdXJzLCBoaWRlTm9uQnVzaW5lc3NIb3Vycywgd2Vla0RheXNdXG5cdClcblxuXHRjb25zdCBmaXJzdENvbCA9IHtcblx0XHRpZDoga2V5cy5jb2wudGltZSxcblx0XHRkYXlzOiBob3Vycyxcblx0XHRkYXk6IHVuZGVmaW5lZCxcblx0XHRjbGFzc05hbWU6IGBzaHJpbmstMCAke0xFRlRfQ09MX1dJRFRIfSBzdGlja3kgbGVmdC0wIGJnLWJhY2tncm91bmQgei0yMCBib3JkZXItci0wYCxcblx0XHRncmlkVHlwZTogJ2hvdXInIGFzIGNvbnN0LFxuXHRcdG5vRXZlbnRzOiB0cnVlLFxuXHRcdHJlbmRlckNlbGw6IChkYXRlOiBEYXlqcykgPT4gKFxuXHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LW11dGVkLWZvcmVncm91bmQgcC0yIHRleHQtcmlnaHQgdGV4dC1bMTBweF0gc206dGV4dC14cyBmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlclwiPlxuXHRcdFx0XHQ8SG91ckxhYmVsIGRhdGU9e2RhdGV9IC8+XG5cdFx0XHQ8L2Rpdj5cblx0XHQpLFxuXHR9XG5cblx0Ly8gR2VuZXJhdGUgd2VlayBkYXlzIOKAlCBlYWNoIGNvbHVtbiBnZXRzIGl0cyBvd24gaG91cnMgb24gdGhlIGNvcnJlY3QgZGF0ZVxuXHRjb25zdCBjb2x1bW5zID0gdXNlTWVtbygoKSA9PiB7XG5cdFx0cmV0dXJuIHZpc2libGVEYXlzLm1hcCgoZGF5KSA9PiAoe1xuXHRcdFx0aWQ6IGtleXMuY29sLmRheShkYXkpLFxuXHRcdFx0ZGF5LFxuXHRcdFx0bGFiZWw6IGRheS5mb3JtYXQoJ0QnKSxcblx0XHRcdGNsYXNzTmFtZTogQ0VMTF9DTEFTUyxcblx0XHRcdGRheXM6IGdldFZpZXdIb3Vycyh7XG5cdFx0XHRcdHJlZmVyZW5jZURhdGU6IGRheSxcblx0XHRcdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRcdFx0aGlkZU5vbkJ1c2luZXNzSG91cnMsXG5cdFx0XHRcdGFsbERhdGVzOiB3ZWVrRGF5cyxcblx0XHRcdH0pLFxuXHRcdFx0dmFsdWU6IGRheSxcblx0XHR9KSlcblx0fSwgW3dlZWtEYXlzLCBidXNpbmVzc0hvdXJzLCBoaWRlTm9uQnVzaW5lc3NIb3VycywgdmlzaWJsZURheXMubWFwXSlcblxuXHRjb25zdCBjc3NWYXJzID0ge1xuXHRcdCctLXZpc2libGUtZGF5cyc6IHZpc2libGVEYXlzLmxlbmd0aCxcblx0fSBhcyBSZWFjdC5DU1NQcm9wZXJ0aWVzXG5cblx0Y29uc3QgV2lkdGhDbGFzcyA9ICd3LWZ1bGwnXG5cdHJldHVybiAoXG5cdFx0PFZlcnRpY2FsR3JpZFxuXHRcdFx0YWxsRGF5Um93PXtcblx0XHRcdFx0PEFsbERheVJvd1xuXHRcdFx0XHRcdGNsYXNzZXM9e3sgY2VsbDogQ0VMTF9DTEFTUywgc3BhY2VyOiBMRUZUX0NPTF9XSURUSCB9fVxuXHRcdFx0XHRcdGRheXM9e3Zpc2libGVEYXlzfVxuXHRcdFx0XHQvPlxuXHRcdFx0fVxuXHRcdFx0Y2xhc3Nlcz17e1xuXHRcdFx0XHRoZWFkZXI6IGAke1dpZHRoQ2xhc3N9IGgtMThgLFxuXHRcdFx0XHRhbGxEYXk6IFdpZHRoQ2xhc3MsXG5cdFx0XHRcdGJvZHk6IFdpZHRoQ2xhc3MsXG5cdFx0XHR9fVxuXHRcdFx0Y29sdW1ucz17W2ZpcnN0Q29sLCAuLi5jb2x1bW5zXX1cblx0XHRcdGdyaWRUeXBlPVwiaG91clwiXG5cdFx0XHRzbG90RHVyYXRpb25NaW51dGVzPXtzbG90RHVyYXRpb259XG5cdFx0XHRzdHlsZT17Y3NzVmFyc31cblx0XHRcdHZhcmlhbnQ9XCJyZWd1bGFyXCJcblx0XHQ+XG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT17J2ZsZXggaC1mdWxsIGZsZXgtMSd9IGRhdGEtdGVzdGlkPVwid2Vlay12aWV3LWhlYWRlclwiPlxuXHRcdFx0XHR7LyogQ29ybmVyIGNlbGwgd2l0aCB3ZWVrIG51bWJlciAqL31cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ3LTEwIHNtOnctMTYgbWluLXctMTAgc206bWluLXctMTYgaC1mdWxsIHNocmluay0wIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBib3JkZXItciBwLTIgZmxleFwiPlxuXHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgbWluLXctMCB3LWZ1bGxcIj5cblx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cInRleHQtbXV0ZWQtZm9yZWdyb3VuZCB0ZXh0LXhzIHRydW5jYXRlIHctZnVsbCB0ZXh0LWNlbnRlclwiPlxuXHRcdFx0XHRcdFx0XHR7dCgnd2VlaycpfVxuXHRcdFx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwiZm9udC1tZWRpdW0gdHJ1bmNhdGUgdy1mdWxsIHRleHQtY2VudGVyXCI+XG5cdFx0XHRcdFx0XHRcdHtjdXJyZW50RGF0ZS53ZWVrKCl9XG5cdFx0XHRcdFx0XHQ8L3NwYW4+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdHsvKiBEYXkgaGVhZGVyIGNlbGxzICovfVxuXHRcdFx0XHR7dmlzaWJsZURheXMubWFwKChkYXksIGluZGV4KSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgdG9kYXkgPSBpc1RvZGF5KGRheSlcblx0XHRcdFx0XHRjb25zdCBrZXkgPSBrZXlzLmhlYWRlci53ZWVrLmRheShkYXkpXG5cblx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0PEFuaW1hdGVkU2VjdGlvblxuXHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0XHRcdCdob3ZlcjpiZy1hY2NlbnQgZmxleC0xIG1pbi13LTAgZmxleCBmbGV4LWNvbCBqdXN0aWZ5LWNlbnRlciBjdXJzb3ItcG9pbnRlciBwLTEgdGV4dC1jZW50ZXIgc206cC0yIGJvcmRlci1yIGxhc3Q6Ym9yZGVyLXItMCB3LTIwIGgtZnVsbCcsXG5cdFx0XHRcdFx0XHRcdFx0dG9kYXkgJiYgJ2JnLXByaW1hcnkvMTAgZm9udC1ib2xkJ1xuXHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD17a2V5cy5oZWFkZXIud2Vla2RheSgnd2VlaycsIGRheS5mb3JtYXQoJ2RkZGQnKSl9XG5cdFx0XHRcdFx0XHRcdGRlbGF5PXtpbmRleCAqIDAuMDV9XG5cdFx0XHRcdFx0XHRcdGtleT17a2V5fVxuXHRcdFx0XHRcdFx0XHRvbkNsaWNrPXsoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0c2VsZWN0RGF0ZShkYXkpXG5cdFx0XHRcdFx0XHRcdFx0b3BlbkV2ZW50Rm9ybSh7IHN0YXJ0OiBkYXkgfSlcblx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdFx0dHJhbnNpdGlvbktleT17a2V5fVxuXHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQteHMgc206dGV4dC1zbSB0cnVuY2F0ZSB3LWZ1bGxcIj5cblx0XHRcdFx0XHRcdFx0XHR7ZGF5LmZvcm1hdCgnZGRkJyl9XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdFx0XHRcdCdteC1hdXRvIG10LTEgZmxleCBoLTYgdy02IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLWZ1bGwgdGV4dC14cycsXG5cdFx0XHRcdFx0XHRcdFx0XHR0b2RheSAmJiAnYmctcHJpbWFyeSB0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCdcblx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0e2RheS5mb3JtYXQoJ0QnKX1cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQ8L0FuaW1hdGVkU2VjdGlvbj5cblx0XHRcdFx0XHQpXG5cdFx0XHRcdH0pfVxuXHRcdFx0PC9kaXY+XG5cdFx0PC9WZXJ0aWNhbEdyaWQ+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHsgQW5pbWF0ZWRTZWN0aW9uIH0gZnJvbSAnQC9jb21wb25lbnRzL2FuaW1hdGlvbnMvYW5pbWF0ZWQtc2VjdGlvbidcbmltcG9ydCB7IFNjcm9sbEFyZWEsIFNjcm9sbEJhciB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9zY3JvbGwtYXJlYSdcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCBkYXlqcywgeyB0eXBlIERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgZ2V0RGF5S2V5LCBnZXRXZWVrRGF5cywgaXNUb2RheSB9IGZyb20gJ0AvbGliL3V0aWxzL2RhdGUtdXRpbHMnXG5pbXBvcnQgeyBrZXlzIH0gZnJvbSAnQC9saWIvdXRpbHMva2V5cydcblxuY29uc3QgRVZFTlRfRE9UX0NPTE9SUyA9IFsnYmctcHJpbWFyeScsICdiZy1ibHVlLTUwMCcsICdiZy1ncmVlbi01MDAnXVxuY29uc3QgREFZU19JTl9NSU5JX0NBTEVOREFSID0gNDJcblxuaW50ZXJmYWNlIE1vbnRoRGF0YSB7XG5cdGRhdGU6IERheWpzXG5cdG5hbWU6IHN0cmluZ1xuXHRldmVudENvdW50OiBudW1iZXJcblx0bW9udGhLZXk6IHN0cmluZ1xufVxuXG5pbnRlcmZhY2UgRGF5RGF0YSB7XG5cdGRhdGU6IERheWpzXG5cdGRheUtleTogc3RyaW5nXG5cdGlzSW5DdXJyZW50TW9udGg6IGJvb2xlYW5cblx0aXNUb2RheTogYm9vbGVhblxuXHRpc1NlbGVjdGVkOiBib29sZWFuXG5cdGV2ZW50Q291bnQ6IG51bWJlclxufVxuXG5leHBvcnQgY29uc3QgWWVhclZpZXcgPSAoKSA9PiB7XG5cdGNvbnN0IHtcblx0XHRjdXJyZW50RGF0ZSxcblx0XHRzZWxlY3REYXRlLFxuXHRcdGV2ZW50cyxcblx0XHRzZXRWaWV3LFxuXHRcdGdldEV2ZW50c0ZvckRhdGVSYW5nZSxcblx0XHR0LFxuXHRcdGZpcnN0RGF5T2ZXZWVrLFxuXHR9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXHRjb25zdCBjdXJyZW50WWVhciA9IGN1cnJlbnREYXRlLnllYXIoKVxuXG5cdGNvbnN0IHdlZWtkYXlIZWFkZXJzID0gZ2V0V2Vla0RheXMoZGF5anMoKSwgZmlyc3REYXlPZldlZWspLm1hcCgoZCkgPT4gKHtcblx0XHRpZDogZC5kYXkoKS50b1N0cmluZygpLFxuXHRcdGxhYmVsOiBkLmZvcm1hdCgnZGQnKSxcblx0fSkpXG5cblx0Y29uc3QgZ2VuZXJhdGVNb250aHNEYXRhID0gKCk6IE1vbnRoRGF0YVtdID0+IHtcblx0XHRyZXR1cm4gQXJyYXkuZnJvbSh7IGxlbmd0aDogMTIgfSwgKF8sIG1vbnRoSW5kZXgpID0+IHtcblx0XHRcdGNvbnN0IG1vbnRoRGF0ZSA9IGRheWpzKClcblx0XHRcdFx0LnllYXIoY3VycmVudFllYXIpXG5cdFx0XHRcdC5tb250aChtb250aEluZGV4KVxuXHRcdFx0XHQuc3RhcnRPZignbW9udGgnKVxuXHRcdFx0Y29uc3QgZXZlbnRzSW5Nb250aCA9IGV2ZW50cy5maWx0ZXIoXG5cdFx0XHRcdChldmVudCkgPT5cblx0XHRcdFx0XHRldmVudC5zdGFydC55ZWFyKCkgPT09IGN1cnJlbnRZZWFyICYmXG5cdFx0XHRcdFx0ZXZlbnQuc3RhcnQubW9udGgoKSA9PT0gbW9udGhJbmRleFxuXHRcdFx0KVxuXG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRkYXRlOiBtb250aERhdGUsXG5cdFx0XHRcdG5hbWU6IG1vbnRoRGF0ZS5mb3JtYXQoJ01NTU0nKSxcblx0XHRcdFx0ZXZlbnRDb3VudDogZXZlbnRzSW5Nb250aC5sZW5ndGgsXG5cdFx0XHRcdG1vbnRoS2V5OiBtb250aERhdGUuZm9ybWF0KCdNTScpLFxuXHRcdFx0fVxuXHRcdH0pXG5cdH1cblxuXHRjb25zdCBnZW5lcmF0ZURheXNGb3JNb250aCA9IChtb250aERhdGU6IERheWpzKTogRGF5RGF0YVtdID0+IHtcblx0XHRjb25zdCBmaXJzdERheU9mQ2FsZW5kYXIgPSBtb250aERhdGUuc3RhcnRPZignbW9udGgnKS5zdGFydE9mKCd3ZWVrJylcblxuXHRcdHJldHVybiBBcnJheS5mcm9tKHsgbGVuZ3RoOiBEQVlTX0lOX01JTklfQ0FMRU5EQVIgfSwgKF8sIGRheUluZGV4KSA9PiB7XG5cdFx0XHRjb25zdCBkYXlEYXRlID0gZmlyc3REYXlPZkNhbGVuZGFyLmFkZChkYXlJbmRleCwgJ2RheScpXG5cdFx0XHRjb25zdCBkYXlTdGFydCA9IGRheURhdGUuc3RhcnRPZignZGF5Jylcblx0XHRcdGNvbnN0IGRheUVuZCA9IGRheURhdGUuZW5kT2YoJ2RheScpXG5cdFx0XHRjb25zdCBldmVudHNPbkRheSA9IGdldEV2ZW50c0ZvckRhdGVSYW5nZShkYXlTdGFydCwgZGF5RW5kKVxuXG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRkYXRlOiBkYXlEYXRlLFxuXHRcdFx0XHRkYXlLZXk6IGdldERheUtleShkYXlEYXRlKSxcblx0XHRcdFx0aXNJbkN1cnJlbnRNb250aDogZGF5RGF0ZS5tb250aCgpID09PSBtb250aERhdGUubW9udGgoKSxcblx0XHRcdFx0aXNUb2RheTogaXNUb2RheShkYXlEYXRlKSxcblx0XHRcdFx0aXNTZWxlY3RlZDogZGF5RGF0ZS5pc1NhbWUoY3VycmVudERhdGUsICdkYXknKSxcblx0XHRcdFx0ZXZlbnRDb3VudDogZXZlbnRzT25EYXkubGVuZ3RoLFxuXHRcdFx0fVxuXHRcdH0pXG5cdH1cblxuXHRjb25zdCBuYXZpZ2F0ZVRvRGF0ZSA9IChcblx0XHRkYXRlOiBEYXlqcyxcblx0XHR2aWV3OiAnbW9udGgnIHwgJ2RheScsXG5cdFx0ZXZlbnQ/OiBSZWFjdC5Nb3VzZUV2ZW50XG5cdCkgPT4ge1xuXHRcdGV2ZW50Py5zdG9wUHJvcGFnYXRpb24oKVxuXHRcdHNlbGVjdERhdGUoZGF0ZSlcblx0XHRzZXRWaWV3KHZpZXcpXG5cdH1cblxuXHRjb25zdCBnZXRFdmVudENvdW50TGFiZWwgPSAoY291bnQ6IG51bWJlcik6IHN0cmluZyA9PiB7XG5cdFx0Y29uc3QgZXZlbnRXb3JkID0gY291bnQgPT09IDEgPyB0KCdldmVudCcpIDogdCgnZXZlbnRzJylcblx0XHRyZXR1cm4gYCR7Y291bnR9ICR7ZXZlbnRXb3JkfWBcblx0fVxuXG5cdGNvbnN0IGdldERheUNsYXNzTmFtZSA9IChkYXk6IERheURhdGEpOiBzdHJpbmcgPT4ge1xuXHRcdGNvbnN0IGJhc2VDbGFzcyA9XG5cdFx0XHQncmVsYXRpdmUgZmxleCBhc3BlY3Qtc3F1YXJlIHctZnVsbCBjdXJzb3ItcG9pbnRlciBmbGV4LWNvbCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgaG92ZXI6YmctYWNjZW50IHJvdW5kZWQtc20gdHJhbnNpdGlvbi1jb2xvcnMgZHVyYXRpb24tMjAwJ1xuXHRcdGNvbnN0IG91dHNpZGVNb250aENsYXNzID0gZGF5LmlzSW5DdXJyZW50TW9udGhcblx0XHRcdD8gJydcblx0XHRcdDogJ3RleHQtbXV0ZWQtZm9yZWdyb3VuZCBvcGFjaXR5LTUwJ1xuXHRcdGNvbnN0IHRvZGF5Q2xhc3MgPSBkYXkuaXNUb2RheVxuXHRcdFx0PyAnYmctcHJpbWFyeSB0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCByb3VuZGVkLWZ1bGwnXG5cdFx0XHQ6ICcnXG5cdFx0Y29uc3Qgc2VsZWN0ZWRDbGFzcyA9XG5cdFx0XHRkYXkuaXNTZWxlY3RlZCAmJiAhZGF5LmlzVG9kYXkgPyAnYmctbXV0ZWQgcm91bmRlZC1mdWxsIGZvbnQtYm9sZCcgOiAnJ1xuXHRcdGNvbnN0IGhhc0V2ZW50c0NsYXNzID1cblx0XHRcdGRheS5ldmVudENvdW50ID4gMCAmJiAhZGF5LmlzVG9kYXkgJiYgIWRheS5pc1NlbGVjdGVkID8gJ2ZvbnQtbWVkaXVtJyA6ICcnXG5cblx0XHRyZXR1cm4gY24oXG5cdFx0XHRiYXNlQ2xhc3MsXG5cdFx0XHRvdXRzaWRlTW9udGhDbGFzcyxcblx0XHRcdHRvZGF5Q2xhc3MsXG5cdFx0XHRzZWxlY3RlZENsYXNzLFxuXHRcdFx0aGFzRXZlbnRzQ2xhc3Ncblx0XHQpXG5cdH1cblxuXHRjb25zdCBnZXRFdmVudERvdENsYXNzTmFtZSA9IChjb2xvcjogc3RyaW5nLCBpc1RvZGF5OiBib29sZWFuKTogc3RyaW5nID0+IHtcblx0XHRjb25zdCBkb3RDb2xvciA9IGlzVG9kYXkgPyAnYmctcHJpbWFyeS1mb3JlZ3JvdW5kJyA6IGNvbG9yXG5cdFx0cmV0dXJuIGNuKCdoLVszcHhdIHctWzNweF0gcm91bmRlZC1mdWxsJywgZG90Q29sb3IpXG5cdH1cblxuXHRjb25zdCBtb250aHNEYXRhID0gZ2VuZXJhdGVNb250aHNEYXRhKClcblxuXHRjb25zdCBnZXREYXlUb29sdGlwID0gKGV2ZW50Q291bnQ6IG51bWJlcik6IHN0cmluZyA9PiB7XG5cdFx0aWYgKGV2ZW50Q291bnQgPT09IDApIHtcblx0XHRcdHJldHVybiAnJ1xuXHRcdH1cblx0XHRyZXR1cm4gZ2V0RXZlbnRDb3VudExhYmVsKGV2ZW50Q291bnQpXG5cdH1cblxuXHRyZXR1cm4gKFxuXHRcdDxTY3JvbGxBcmVhIGNsYXNzTmFtZT1cImgtZnVsbFwiIGRhdGEtdGVzdGlkPVwieWVhci12aWV3XCI+XG5cdFx0XHQ8ZGl2XG5cdFx0XHRcdGNsYXNzTmFtZT1cImdyaWQgYXV0by1yb3dzLWZyIGdyaWQtY29scy0xIGdhcC00IHAtNCBzbTpncmlkLWNvbHMtMiBsZzpncmlkLWNvbHMtM1wiXG5cdFx0XHRcdGRhdGEtdGVzdGlkPVwieWVhci1ncmlkXCJcblx0XHRcdD5cblx0XHRcdFx0e21vbnRoc0RhdGEubWFwKChtb250aCwgbW9udGhJbmRleCkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IGRheXNJbk1vbnRoID0gZ2VuZXJhdGVEYXlzRm9yTW9udGgobW9udGguZGF0ZSlcblx0XHRcdFx0XHRjb25zdCBhbmltYXRpb25EZWxheSA9IG1vbnRoSW5kZXggKiAwLjA1XG5cblx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJob3Zlcjpib3JkZXItcHJpbWFyeSBmbGV4IGZsZXgtY29sIHJvdW5kZWQtbGcgYm9yZGVyIHAtMyB0ZXh0LWxlZnQgdHJhbnNpdGlvbi1hbGwgZHVyYXRpb24tMjAwIGhvdmVyOnNoYWRvdy1tZFwiXG5cdFx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPXtrZXlzLmhlYWRlci55ZWFyLm1vbnRoKG1vbnRoLm1vbnRoS2V5KX1cblx0XHRcdFx0XHRcdFx0a2V5PXttb250aC5tb250aEtleX1cblx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0PEFuaW1hdGVkU2VjdGlvblxuXHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cIm1iLTIgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuXCJcblx0XHRcdFx0XHRcdFx0XHRkZWxheT17YW5pbWF0aW9uRGVsYXl9XG5cdFx0XHRcdFx0XHRcdFx0a2V5PXtrZXlzLmxpc3RLZXkoJ21vbnRoJywgbW9udGgubW9udGhLZXkpfVxuXHRcdFx0XHRcdFx0XHRcdHRyYW5zaXRpb25LZXk9e2tleXMubGlzdEtleSgnbW9udGgnLCBtb250aC5tb250aEtleSl9XG5cdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHQ8YnV0dG9uXG5cdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJ0ZXh0LWxnIGZvbnQtbWVkaXVtIGhvdmVyOnVuZGVybGluZSBjdXJzb3ItcG9pbnRlclwiXG5cdFx0XHRcdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD17a2V5cy5oZWFkZXIueWVhci5tb250aChtb250aC5tb250aEtleSwgJ3RpdGxlJyl9XG5cdFx0XHRcdFx0XHRcdFx0XHRvbkNsaWNrPXsoKSA9PiBuYXZpZ2F0ZVRvRGF0ZShtb250aC5kYXRlLCAnbW9udGgnKX1cblx0XHRcdFx0XHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIlxuXHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdHttb250aC5uYW1lfVxuXHRcdFx0XHRcdFx0XHRcdDwvYnV0dG9uPlxuXG5cdFx0XHRcdFx0XHRcdFx0e21vbnRoLmV2ZW50Q291bnQgPiAwICYmIChcblx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImJnLXByaW1hcnkgdGV4dC1wcmltYXJ5LWZvcmVncm91bmQgcm91bmRlZC1mdWxsIHB4LTIgcHktMSB0ZXh0LXhzXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e2tleXMuaGVhZGVyLnllYXIubW9udGgoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bW9udGgubW9udGhLZXksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0J2NvdW50J1xuXHRcdFx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7Z2V0RXZlbnRDb3VudExhYmVsKG1vbnRoLmV2ZW50Q291bnQpfVxuXHRcdFx0XHRcdFx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdDwvQW5pbWF0ZWRTZWN0aW9uPlxuXG5cdFx0XHRcdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJncmlkIGdyaWQtY29scy03IGdhcC1weCB0ZXh0LVswLjZyZW1dXCJcblx0XHRcdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD17a2V5cy5oZWFkZXIueWVhci5tb250aChtb250aC5tb250aEtleSwgJ21pbmknKX1cblx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdHt3ZWVrZGF5SGVhZGVycy5tYXAoKGRheSkgPT4gKFxuXHRcdFx0XHRcdFx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJ0ZXh0LW11dGVkLWZvcmVncm91bmQgaC0zIHRleHQtY2VudGVyXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0a2V5PXtrZXlzLmxpc3RLZXkoJ2hlYWRlcicsIG1vbnRoLm1vbnRoS2V5LCBkYXkuaWQpfVxuXHRcdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7ZGF5LmxhYmVsfVxuXHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdFx0KSl9XG5cblx0XHRcdFx0XHRcdFx0XHR7ZGF5c0luTW9udGgubWFwKChkYXkpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IGRheVRlc3RJZCA9IGtleXMuaGVhZGVyLnllYXIuZGF5KFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRtb250aC5kYXRlLmZvcm1hdCgnWVlZWS1NTScpLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRkYXkuZGF5S2V5XG5cdFx0XHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBoYXNFdmVudHMgPSBkYXkuZXZlbnRDb3VudCA+IDBcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IHZpc2libGVEb3RDb3VudCA9IE1hdGgubWluKGRheS5ldmVudENvdW50LCAzKVxuXHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgdmlzaWJsZURvdENvbG9ycyA9IEVWRU5UX0RPVF9DT0xPUlMuc2xpY2UoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDAsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZpc2libGVEb3RDb3VudFxuXHRcdFx0XHRcdFx0XHRcdFx0KVxuXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8YnV0dG9uXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtnZXREYXlDbGFzc05hbWUoZGF5KX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD17ZGF5VGVzdElkfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGtleT17ZGF5LmRheUtleX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvbkNsaWNrPXsoZSkgPT4gbmF2aWdhdGVUb0RhdGUoZGF5LmRhdGUsICdkYXknLCBlKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aXRsZT17Z2V0RGF5VG9vbHRpcChkYXkuZXZlbnRDb3VudCl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZT1cImJ1dHRvblwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LWNlbnRlciBsZWFkaW5nLW5vbmVcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHtkYXkuZGF0ZS5kYXRlKCl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9zcGFuPlxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0e2hhc0V2ZW50cyAmJiAoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0J2Fic29sdXRlIGJvdHRvbS0wIGZsZXggdy1mdWxsIGp1c3RpZnktY2VudGVyIHNwYWNlLXgtcHgnLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRheS5pc1RvZGF5ICYmICdib3R0b20tcHgnXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHt2aXNpYmxlRG90Q29sb3JzLm1hcCgoZG90Q29sb3IpID0+IChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8c3BhblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtnZXRFdmVudERvdENsYXNzTmFtZShcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZG90Q29sb3IsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRheS5pc1RvZGF5XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0a2V5PXtkb3RDb2xvcn1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdDwvYnV0dG9uPlxuXHRcdFx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0XHRcdH0pfVxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdClcblx0XHRcdFx0fSl9XG5cdFx0XHQ8L2Rpdj5cblx0XHRcdDxTY3JvbGxCYXIgY2xhc3NOYW1lPVwiei0zMFwiIC8+XG5cdFx0PC9TY3JvbGxBcmVhPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBSZWFjdE5vZGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IEV2ZW50Rm9ybVByb3BzIH0gZnJvbSAnQC9jb21wb25lbnRzL2V2ZW50LWZvcm0vZXZlbnQtZm9ybSdcbmltcG9ydCB0eXBlIHsgQnVzaW5lc3NIb3VycywgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB0eXBlIHtcblx0Q2FsZW5kYXJDbGFzc2VzT3ZlcnJpZGUsXG5cdENlbGxJbmZvLFxuXHREYXRlUmFuZ2UsXG5cdFJlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yUHJvcHMsXG5cdFNsb3REdXJhdGlvbixcbn0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci90eXBlcydcbmltcG9ydCB7IHVzZUNhbGVuZGFyRW5naW5lIH0gZnJvbSAnQC9ob29rcy91c2UtY2FsZW5kYXItZW5naW5lJ1xuaW1wb3J0IHR5cGUgeyBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgRVZFTlRfQkFSX0hFSUdIVCwgR0FQX0JFVFdFRU5fRUxFTUVOVFMgfSBmcm9tICdAL2xpYi9jb25zdGFudHMnXG5pbXBvcnQgdHlwZSB7IFRyYW5zbGF0aW9ucywgVHJhbnNsYXRvckZ1bmN0aW9uIH0gZnJvbSAnQC9saWIvdHJhbnNsYXRpb25zL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhclZpZXcsIFRpbWVGb3JtYXQgfSBmcm9tICdAL3R5cGVzJ1xuaW1wb3J0IHsgQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnLi9jb250ZXh0J1xuXG5leHBvcnQgaW50ZXJmYWNlIENhbGVuZGFyUHJvdmlkZXJQcm9wcyB7XG5cdGNoaWxkcmVuOiBSZWFjdE5vZGVcblx0ZXZlbnRzPzogQ2FsZW5kYXJFdmVudFtdXG5cdGZpcnN0RGF5T2ZXZWVrPzogbnVtYmVyIC8vIDAgZm9yIFN1bmRheSwgMSBmb3IgTW9uZGF5LCBldGMuXG5cdGluaXRpYWxWaWV3PzogQ2FsZW5kYXJWaWV3XG5cdGluaXRpYWxEYXRlPzogRGF5anNcblx0cmVuZGVyRXZlbnQ/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IFJlYWN0Tm9kZVxuXHRvbkV2ZW50Q2xpY2s/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0b25DZWxsQ2xpY2s/OiAoaW5mbzogQ2VsbEluZm8pID0+IHZvaWRcblx0aXNDZWxsRGlzYWJsZWQ/OiAoaW5mbzogQ2VsbEluZm8pID0+IGJvb2xlYW5cblx0b25WaWV3Q2hhbmdlPzogKHZpZXc6IENhbGVuZGFyVmlldykgPT4gdm9pZFxuXHRvbkV2ZW50QWRkPzogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG5cdG9uRXZlbnRVcGRhdGU/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0b25FdmVudERlbGV0ZT86IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuXHRvbkRhdGVDaGFuZ2U/OiAoZGF0ZTogRGF5anMsIHJhbmdlOiBEYXRlUmFuZ2UpID0+IHZvaWRcblx0bG9jYWxlPzogc3RyaW5nXG5cdHRpbWV6b25lPzogc3RyaW5nXG5cdGRpc2FibGVDZWxsQ2xpY2s/OiBib29sZWFuXG5cdGRpc2FibGVFdmVudENsaWNrPzogYm9vbGVhblxuXHRkaXNhYmxlRHJhZ0FuZERyb3A/OiBib29sZWFuXG5cdGRheU1heEV2ZW50czogbnVtYmVyXG5cdGV2ZW50U3BhY2luZz86IG51bWJlclxuXHRldmVudEhlaWdodD86IG51bWJlclxuXHRzdGlja3lWaWV3SGVhZGVyPzogYm9vbGVhblxuXHR2aWV3SGVhZGVyQ2xhc3NOYW1lPzogc3RyaW5nXG5cdGhlYWRlckNvbXBvbmVudD86IFJlYWN0Tm9kZSAvLyBPcHRpb25hbCBjdXN0b20gaGVhZGVyIGNvbXBvbmVudFxuXHRoZWFkZXJDbGFzc05hbWU/OiBzdHJpbmcgLy8gT3B0aW9uYWwgY3VzdG9tIGhlYWRlciBjbGFzc1xuXHRidXNpbmVzc0hvdXJzPzogQnVzaW5lc3NIb3VycyB8IEJ1c2luZXNzSG91cnNbXVxuXHRyZW5kZXJFdmVudEZvcm0/OiAocHJvcHM6IEV2ZW50Rm9ybVByb3BzKSA9PiBSZWFjdE5vZGVcblx0Ly8gVHJhbnNsYXRpb24gb3B0aW9ucyAtIHByb3ZpZGUgZWl0aGVyIHRyYW5zbGF0aW9ucyBvYmplY3QgT1IgdHJhbnNsYXRvciBmdW5jdGlvblxuXHR0cmFuc2xhdGlvbnM/OiBUcmFuc2xhdGlvbnNcblx0dHJhbnNsYXRvcj86IFRyYW5zbGF0b3JGdW5jdGlvblxuXHR0aW1lRm9ybWF0PzogVGltZUZvcm1hdFxuXHRjbGFzc2VzT3ZlcnJpZGU/OiBDYWxlbmRhckNsYXNzZXNPdmVycmlkZVxuXHRyZW5kZXJDdXJyZW50VGltZUluZGljYXRvcj86IChcblx0XHRwcm9wczogUmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3JQcm9wc1xuXHQpID0+IFJlYWN0Tm9kZVxuXHRyZW5kZXJIb3VyPzogKGRhdGU6IERheWpzKSA9PiBSZWFjdE5vZGVcblx0aGlkZU5vbkJ1c2luZXNzSG91cnM/OiBib29sZWFuXG5cdGhpZGVFeHBvcnRCdXR0b24/OiBib29sZWFuXG5cdGhpZGRlbkRheXM/OiBTZXQ8bnVtYmVyPlxuXHRzbG90RHVyYXRpb24/OiBTbG90RHVyYXRpb25cblx0c2Nyb2xsVGltZT86IHN0cmluZ1xufVxuXG5leHBvcnQgY29uc3QgQ2FsZW5kYXJQcm92aWRlcjogUmVhY3QuRkM8Q2FsZW5kYXJQcm92aWRlclByb3BzPiA9ICh7XG5cdGNoaWxkcmVuLFxuXHRldmVudHMgPSBbXSxcblx0Zmlyc3REYXlPZldlZWsgPSAwLFxuXHRpbml0aWFsVmlldyA9ICdtb250aCcsXG5cdGluaXRpYWxEYXRlLFxuXHRyZW5kZXJFdmVudCxcblx0b25FdmVudENsaWNrLFxuXHRvbkNlbGxDbGljayxcblx0aXNDZWxsRGlzYWJsZWQsXG5cdG9uVmlld0NoYW5nZSxcblx0b25FdmVudEFkZCxcblx0b25FdmVudFVwZGF0ZSxcblx0b25FdmVudERlbGV0ZSxcblx0b25EYXRlQ2hhbmdlLFxuXHRsb2NhbGUsXG5cdHRpbWV6b25lLFxuXHRkaXNhYmxlQ2VsbENsaWNrLFxuXHRkaXNhYmxlRXZlbnRDbGljayxcblx0ZGlzYWJsZURyYWdBbmREcm9wLFxuXHRkYXlNYXhFdmVudHMsXG5cdGV2ZW50U3BhY2luZyA9IEdBUF9CRVRXRUVOX0VMRU1FTlRTLFxuXHRldmVudEhlaWdodCA9IEVWRU5UX0JBUl9IRUlHSFQsXG5cdHN0aWNreVZpZXdIZWFkZXIgPSB0cnVlLFxuXHR2aWV3SGVhZGVyQ2xhc3NOYW1lID0gJycsXG5cdGhlYWRlckNvbXBvbmVudCxcblx0aGVhZGVyQ2xhc3NOYW1lLFxuXHRidXNpbmVzc0hvdXJzLFxuXHRyZW5kZXJFdmVudEZvcm0sXG5cdHRyYW5zbGF0aW9ucyxcblx0dHJhbnNsYXRvcixcblx0dGltZUZvcm1hdCA9ICcxMi1ob3VyJyxcblx0Y2xhc3Nlc092ZXJyaWRlLFxuXHRyZW5kZXJDdXJyZW50VGltZUluZGljYXRvcixcblx0cmVuZGVySG91cixcblx0aGlkZU5vbkJ1c2luZXNzSG91cnMgPSBmYWxzZSxcblx0aGlkZUV4cG9ydEJ1dHRvbiA9IGZhbHNlLFxuXHRoaWRkZW5EYXlzLFxuXHRzbG90RHVyYXRpb24gPSA2MCxcblx0c2Nyb2xsVGltZSxcbn0pID0+IHtcblx0Ly8gVXNlIHRoZSBjYWxlbmRhciBlbmdpbmVcblx0Y29uc3QgY2FsZW5kYXJFbmdpbmUgPSB1c2VDYWxlbmRhckVuZ2luZSh7XG5cdFx0ZXZlbnRzLFxuXHRcdGZpcnN0RGF5T2ZXZWVrLFxuXHRcdGluaXRpYWxWaWV3LFxuXHRcdGluaXRpYWxEYXRlLFxuXHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0b25FdmVudEFkZCxcblx0XHRvbkV2ZW50VXBkYXRlLFxuXHRcdG9uRXZlbnREZWxldGUsXG5cdFx0b25EYXRlQ2hhbmdlLFxuXHRcdG9uVmlld0NoYW5nZSxcblx0XHRsb2NhbGUsXG5cdFx0dGltZXpvbmUsXG5cdFx0dHJhbnNsYXRpb25zLFxuXHRcdHRyYW5zbGF0b3IsXG5cdH0pXG5cblx0Y29uc3QgZWRpdEV2ZW50ID0gdXNlQ2FsbGJhY2soXG5cdFx0KGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB7XG5cdFx0XHRjYWxlbmRhckVuZ2luZS5zZXRTZWxlY3RlZEV2ZW50KGV2ZW50KVxuXHRcdFx0Y2FsZW5kYXJFbmdpbmUuc2V0SXNFdmVudEZvcm1PcGVuKHRydWUpXG5cdFx0fSxcblx0XHRbY2FsZW5kYXJFbmdpbmVdXG5cdClcblxuXHQvLyBDdXN0b20gaGFuZGxlcnMgdGhhdCBjYWxsIGV4dGVybmFsIGNhbGxiYWNrc1xuXHRjb25zdCBoYW5kbGVFdmVudENsaWNrID0gdXNlQ2FsbGJhY2soXG5cdFx0KGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB7XG5cdFx0XHRpZiAoZGlzYWJsZUV2ZW50Q2xpY2spIHtcblx0XHRcdFx0cmV0dXJuXG5cdFx0XHR9XG5cdFx0XHRpZiAob25FdmVudENsaWNrKSB7XG5cdFx0XHRcdG9uRXZlbnRDbGljayhldmVudClcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGVkaXRFdmVudChldmVudClcblx0XHRcdH1cblx0XHR9LFxuXHRcdFtkaXNhYmxlRXZlbnRDbGljaywgb25FdmVudENsaWNrLCBlZGl0RXZlbnRdXG5cdClcblxuXHRjb25zdCBoYW5kbGVEYXRlQ2xpY2sgPSB1c2VDYWxsYmFjayhcblx0XHQoaW5mbzogQ2VsbEluZm8pID0+IHtcblx0XHRcdGlmIChkaXNhYmxlQ2VsbENsaWNrKSB7XG5cdFx0XHRcdHJldHVyblxuXHRcdFx0fVxuXG5cdFx0XHRpZiAob25DZWxsQ2xpY2spIHtcblx0XHRcdFx0b25DZWxsQ2xpY2soaW5mbylcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNhbGVuZGFyRW5naW5lLm9wZW5FdmVudEZvcm0oaW5mbylcblx0XHRcdH1cblx0XHR9LFxuXHRcdFtvbkNlbGxDbGljaywgZGlzYWJsZUNlbGxDbGljaywgY2FsZW5kYXJFbmdpbmVdXG5cdClcblxuXHQvLyBDcmVhdGUgdGhlIGNvbnRleHQgdmFsdWVcblx0Y29uc3QgY29udGV4dFZhbHVlID0gdXNlTWVtbyhcblx0XHQoKSA9PiAoe1xuXHRcdFx0Li4uY2FsZW5kYXJFbmdpbmUsXG5cdFx0XHRyZW5kZXJFdmVudCxcblx0XHRcdG9uRXZlbnRDbGljazogaGFuZGxlRXZlbnRDbGljayxcblx0XHRcdG9uQ2VsbENsaWNrOiBoYW5kbGVEYXRlQ2xpY2ssXG5cdFx0XHRpc0NlbGxEaXNhYmxlZCxcblx0XHRcdGxvY2FsZSxcblx0XHRcdHRpbWV6b25lLFxuXHRcdFx0ZGlzYWJsZUNlbGxDbGljayxcblx0XHRcdGRpc2FibGVFdmVudENsaWNrLFxuXHRcdFx0ZGlzYWJsZURyYWdBbmREcm9wLFxuXHRcdFx0ZGF5TWF4RXZlbnRzLFxuXHRcdFx0ZXZlbnRTcGFjaW5nLFxuXHRcdFx0ZXZlbnRIZWlnaHQsXG5cdFx0XHRzdGlja3lWaWV3SGVhZGVyLFxuXHRcdFx0dmlld0hlYWRlckNsYXNzTmFtZSxcblx0XHRcdGhlYWRlckNvbXBvbmVudCxcblx0XHRcdGhlYWRlckNsYXNzTmFtZSxcblx0XHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0XHRyZW5kZXJFdmVudEZvcm0sXG5cdFx0XHR0aW1lRm9ybWF0LFxuXHRcdFx0Y2xhc3Nlc092ZXJyaWRlLFxuXHRcdFx0cmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3IsXG5cdFx0XHRyZW5kZXJIb3VyLFxuXHRcdFx0aGlkZU5vbkJ1c2luZXNzSG91cnMsXG5cdFx0XHRoaWRlRXhwb3J0QnV0dG9uLFxuXHRcdFx0aGlkZGVuRGF5cyxcblx0XHRcdHNsb3REdXJhdGlvbixcblx0XHRcdHNjcm9sbFRpbWUsXG5cdFx0fSksXG5cdFx0W1xuXHRcdFx0Y2FsZW5kYXJFbmdpbmUsXG5cdFx0XHRyZW5kZXJFdmVudCxcblx0XHRcdGhhbmRsZUV2ZW50Q2xpY2ssXG5cdFx0XHRoYW5kbGVEYXRlQ2xpY2ssXG5cdFx0XHRpc0NlbGxEaXNhYmxlZCxcblx0XHRcdGxvY2FsZSxcblx0XHRcdHRpbWV6b25lLFxuXHRcdFx0ZGlzYWJsZUNlbGxDbGljayxcblx0XHRcdGRpc2FibGVFdmVudENsaWNrLFxuXHRcdFx0ZGlzYWJsZURyYWdBbmREcm9wLFxuXHRcdFx0ZGF5TWF4RXZlbnRzLFxuXHRcdFx0ZXZlbnRTcGFjaW5nLFxuXHRcdFx0ZXZlbnRIZWlnaHQsXG5cdFx0XHRzdGlja3lWaWV3SGVhZGVyLFxuXHRcdFx0dmlld0hlYWRlckNsYXNzTmFtZSxcblx0XHRcdGhlYWRlckNvbXBvbmVudCxcblx0XHRcdGhlYWRlckNsYXNzTmFtZSxcblx0XHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0XHRyZW5kZXJFdmVudEZvcm0sXG5cdFx0XHR0aW1lRm9ybWF0LFxuXHRcdFx0Y2xhc3Nlc092ZXJyaWRlLFxuXHRcdFx0cmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3IsXG5cdFx0XHRyZW5kZXJIb3VyLFxuXHRcdFx0aGlkZU5vbkJ1c2luZXNzSG91cnMsXG5cdFx0XHRoaWRlRXhwb3J0QnV0dG9uLFxuXHRcdFx0aGlkZGVuRGF5cyxcblx0XHRcdHNsb3REdXJhdGlvbixcblx0XHRcdHNjcm9sbFRpbWUsXG5cdFx0XVxuXHQpXG5cblx0cmV0dXJuIChcblx0XHQ8Q2FsZW5kYXJDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXtjb250ZXh0VmFsdWV9PlxuXHRcdFx0e2NoaWxkcmVufVxuXHRcdDwvQ2FsZW5kYXJDb250ZXh0LlByb3ZpZGVyPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQW5pbWF0ZWRTZWN0aW9uIH0gZnJvbSAnQC9jb21wb25lbnRzL2FuaW1hdGlvbnMvYW5pbWF0ZWQtc2VjdGlvbidcbmltcG9ydCB7IENhbGVuZGFyRG5kQ29udGV4dCB9IGZyb20gJ0AvY29tcG9uZW50cy9kcmFnLWFuZC1kcm9wL2NhbGVuZGFyLWRuZC1jb250ZXh0J1xuaW1wb3J0IHsgRXZlbnRGb3JtRGlhbG9nIH0gZnJvbSAnQC9jb21wb25lbnRzL2V2ZW50LWZvcm0vZXZlbnQtZm9ybS1kaWFsb2cnXG5pbXBvcnQgeyBIZWFkZXIgfSBmcm9tICdAL2NvbXBvbmVudHMvaGVhZGVyJ1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHsgRGF5VmlldyB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvY29tcG9uZW50cy9kYXktdmlldy9kYXktdmlldydcbmltcG9ydCB7IE1vbnRoVmlldyB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvY29tcG9uZW50cy9tb250aC12aWV3L21vbnRoLXZpZXcnXG5pbXBvcnQgeyBXZWVrVmlldyB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvY29tcG9uZW50cy93ZWVrLXZpZXcvd2Vlay12aWV3J1xuaW1wb3J0IHsgWWVhclZpZXcgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbXBvbmVudHMveWVhci12aWV3L3llYXItdmlldydcbmltcG9ydCB7IENhbGVuZGFyUHJvdmlkZXIgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvcHJvdmlkZXInXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG4vLyBveGxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZHVwbGljYXRlc1xuaW1wb3J0ICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB0eXBlIHtcblx0SWxhbXlDYWxlbmRhclByb3BFdmVudCxcblx0SWxhbXlDYWxlbmRhclByb3BzLFxufSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL3R5cGVzJ1xuaW1wb3J0IHtcblx0REFZX01BWF9FVkVOVFNfREVGQVVMVCxcblx0RVZFTlRfQkFSX0hFSUdIVCxcblx0R0FQX0JFVFdFRU5fRUxFTUVOVFMsXG5cdFdFRUtfREFZU19OVU1CRVJfTUFQLFxufSBmcm9tICdAL2xpYi9jb25zdGFudHMnXG5pbXBvcnQgeyBub3JtYWxpemVFdmVudHMsIHNhZmVEYXRlLCB0b0hpZGRlbkRheXNTZXQgfSBmcm9tICdAL2xpYi91dGlscydcblxuY29uc3QgQ2FsZW5kYXJDb250ZW50OiBSZWFjdC5GQyA9ICgpID0+IHtcblx0Y29uc3QgeyB2aWV3LCBkYXlNYXhFdmVudHMgfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblxuXHRjb25zdCB2aWV3TWFwID0ge1xuXHRcdG1vbnRoOiA8TW9udGhWaWV3IGRheU1heEV2ZW50cz17ZGF5TWF4RXZlbnRzfSBrZXk9XCJtb250aFwiIC8+LFxuXHRcdHdlZWs6IDxXZWVrVmlldyBrZXk9XCJ3ZWVrXCIgLz4sXG5cdFx0ZGF5OiA8RGF5VmlldyBrZXk9XCJkYXlcIiAvPixcblx0XHR5ZWFyOiA8WWVhclZpZXcga2V5PVwieWVhclwiIC8+LFxuXHR9XG5cblx0cmV0dXJuIChcblx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgdy1mdWxsIGgtZnVsbFwiIGRhdGEtdGVzdGlkPVwiaWxhbXktY2FsZW5kYXJcIj5cblx0XHRcdDxIZWFkZXIgY2xhc3NOYW1lPVwicC0xIHNocmluay0wXCIgLz5cblx0XHRcdHsvKiBDYWxlbmRhciBCb2R5IHdpdGggQW5pbWF0ZVByZXNlbmNlIGZvciB2aWV3IHRyYW5zaXRpb25zICovfVxuXHRcdFx0PENhbGVuZGFyRG5kQ29udGV4dD5cblx0XHRcdFx0PEFuaW1hdGVkU2VjdGlvblxuXHRcdFx0XHRcdGNsYXNzTmFtZT1cInctZnVsbCBtaW4taC0wIGZsZXgtMVwiXG5cdFx0XHRcdFx0ZGlyZWN0aW9uPVwiaG9yaXpvbnRhbFwiXG5cdFx0XHRcdFx0dHJhbnNpdGlvbktleT17dmlld31cblx0XHRcdFx0PlxuXHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiYm9yZGVyIGgtZnVsbCB3LWZ1bGxcIiBkYXRhLXRlc3RpZD1cImNhbGVuZGFyLWJvZHlcIj5cblx0XHRcdFx0XHRcdHt2aWV3TWFwW3ZpZXddfVxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8L0FuaW1hdGVkU2VjdGlvbj5cblx0XHRcdDwvQ2FsZW5kYXJEbmRDb250ZXh0PlxuXHRcdFx0PEV2ZW50Rm9ybURpYWxvZyAvPlxuXHRcdDwvZGl2PlxuXHQpXG59XG5cbmV4cG9ydCBjb25zdCBJbGFteUNhbGVuZGFyOiBSZWFjdC5GQzxJbGFteUNhbGVuZGFyUHJvcHM+ID0gKHtcblx0ZXZlbnRzLFxuXHRmaXJzdERheU9mV2VlayA9ICdzdW5kYXknLFxuXHRpbml0aWFsVmlldyA9ICdtb250aCcsXG5cdGluaXRpYWxEYXRlLFxuXHRkYXlNYXhFdmVudHMgPSBEQVlfTUFYX0VWRU5UU19ERUZBVUxULFxuXHRldmVudFNwYWNpbmcgPSBHQVBfQkVUV0VFTl9FTEVNRU5UUyxcblx0ZXZlbnRIZWlnaHQgPSBFVkVOVF9CQVJfSEVJR0hULFxuXHRzdGlja3lWaWV3SGVhZGVyID0gdHJ1ZSxcblx0dmlld0hlYWRlckNsYXNzTmFtZSA9ICcnLFxuXHR0aW1lRm9ybWF0ID0gJzEyLWhvdXInLFxuXHRoaWRlTm9uQnVzaW5lc3NIb3VycyA9IGZhbHNlLFxuXHRoaWRkZW5EYXlzLFxuXHQuLi5wcm9wc1xufSkgPT4ge1xuXHRyZXR1cm4gKFxuXHRcdDxDYWxlbmRhclByb3ZpZGVyXG5cdFx0XHRkYXlNYXhFdmVudHM9e2RheU1heEV2ZW50c31cblx0XHRcdGV2ZW50SGVpZ2h0PXtldmVudEhlaWdodH1cblx0XHRcdGV2ZW50U3BhY2luZz17ZXZlbnRTcGFjaW5nfVxuXHRcdFx0ZXZlbnRzPXtub3JtYWxpemVFdmVudHM8SWxhbXlDYWxlbmRhclByb3BFdmVudCwgQ2FsZW5kYXJFdmVudD4oZXZlbnRzKX1cblx0XHRcdGZpcnN0RGF5T2ZXZWVrPXtXRUVLX0RBWVNfTlVNQkVSX01BUFtmaXJzdERheU9mV2Vla119XG5cdFx0XHRoaWRkZW5EYXlzPXt0b0hpZGRlbkRheXNTZXQoaGlkZGVuRGF5cyl9XG5cdFx0XHRoaWRlTm9uQnVzaW5lc3NIb3Vycz17aGlkZU5vbkJ1c2luZXNzSG91cnN9XG5cdFx0XHRpbml0aWFsRGF0ZT17c2FmZURhdGUoaW5pdGlhbERhdGUpfVxuXHRcdFx0aW5pdGlhbFZpZXc9e2luaXRpYWxWaWV3fVxuXHRcdFx0c3RpY2t5Vmlld0hlYWRlcj17c3RpY2t5Vmlld0hlYWRlcn1cblx0XHRcdHRpbWVGb3JtYXQ9e3RpbWVGb3JtYXR9XG5cdFx0XHR2aWV3SGVhZGVyQ2xhc3NOYW1lPXt2aWV3SGVhZGVyQ2xhc3NOYW1lfVxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdD5cblx0XHRcdDxDYWxlbmRhckNvbnRlbnQgLz5cblx0XHQ8L0NhbGVuZGFyUHJvdmlkZXI+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBIb3Jpem9udGFsR3JpZCB9IGZyb20gJ0AvY29tcG9uZW50cy9ob3Jpem9udGFsLWdyaWQvaG9yaXpvbnRhbC1ncmlkJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUgeyBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsga2V5cyB9IGZyb20gJ0AvbGliL3V0aWxzL2tleXMnXG5cbmludGVyZmFjZSBSZXNvdXJjZUV2ZW50R3JpZFByb3BzIHtcblx0LyoqXG5cdCAqIEFycmF5IG9mIGRheXMgdG8gZGlzcGxheSBpbiB0aGUgZ3JpZFxuXHQgKi9cblx0ZGF5czogRGF5anNbXSB8IERheWpzW11bXVxuXHQvKiogVGhlIHR5cGUgb2YgZ3JpZCB0byBkaXNwbGF5IC0gJ2RheScgZm9yIGRheSB2aWV3LCAnaG91cicgZm9yIHdlZWsgdmlld1xuXHQgKiAoYWZmZWN0cyBldmVudCBwb3NpdGlvbmluZyBsb2dpYylcblx0ICovXG5cdGdyaWRUeXBlPzogJ2RheScgfCAnaG91cidcblx0LyoqXG5cdCAqIENoaWxkcmVuIHdpbGwgYmUgcmVuZGVyZWQgYXMgaGVhZGVycyBhYm92ZSB0aGUgZ3JpZFxuXHQgKiAoZS5nLiwgZm9yIGRheSBuYW1lcyBpbiBtb250aCB2aWV3KVxuXHQgKi9cblx0Y2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGVcblx0Y2xhc3Nlcz86IHsgaGVhZGVyPzogc3RyaW5nOyBib2R5Pzogc3RyaW5nOyBzY3JvbGw/OiBzdHJpbmc7IGNlbGw/OiBzdHJpbmcgfVxufVxuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VFdmVudEdyaWQ6IFJlYWN0LkZDPFJlc291cmNlRXZlbnRHcmlkUHJvcHM+ID0gKHtcblx0ZGF5cyxcblx0Z3JpZFR5cGUgPSAnZGF5Jyxcblx0Y2hpbGRyZW4sXG5cdGNsYXNzZXMsXG59KSA9PiB7XG5cdGNvbnN0IHsgcmVzb3VyY2VzIH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cblx0Y29uc3QgY29sdW1ucyA9IGRheXMubWFwKChkYXkpID0+IHtcblx0XHRjb25zdCBpc0FycmF5ID0gQXJyYXkuaXNBcnJheShkYXkpXG5cdFx0Y29uc3QgcmVmRGF5ID0gaXNBcnJheSA/IGRheVswXSA6IGRheVxuXHRcdHJldHVybiB7XG5cdFx0XHRpZDogcmVmRGF5ID8ga2V5cy5jb2wuZGF5KHJlZkRheSkgOiAnZGF5LWNvbC11bmtub3duJyxcblx0XHRcdGRheTogaXNBcnJheSA/IHVuZGVmaW5lZCA6IGRheSxcblx0XHRcdGRheXM6IGlzQXJyYXkgPyBkYXkgOiB1bmRlZmluZWQsXG5cdFx0XHRjbGFzc05hbWU6IGNsYXNzZXM/LmNlbGwsXG5cdFx0XHRncmlkVHlwZSxcblx0XHR9XG5cdH0pXG5cblx0Y29uc3Qgcm93cyA9IHJlc291cmNlcy5tYXAoKHJlc291cmNlKSA9PiAoe1xuXHRcdGlkOiByZXNvdXJjZS5pZCxcblx0XHR0aXRsZTogcmVzb3VyY2UudGl0bGUsXG5cdFx0cmVzb3VyY2U6IHJlc291cmNlLFxuXHRcdGNvbHVtbnMsXG5cdH0pKVxuXG5cdHJldHVybiAoXG5cdFx0PEhvcml6b250YWxHcmlkXG5cdFx0XHRjbGFzc2VzPXtjbGFzc2VzfVxuXHRcdFx0ZGF5TnVtYmVySGVpZ2h0PXswfVxuXHRcdFx0Z3JpZFR5cGU9e2dyaWRUeXBlfVxuXHRcdFx0cm93cz17cm93c31cblx0XHQ+XG5cdFx0XHR7Y2hpbGRyZW59XG5cdFx0PC9Ib3Jpem9udGFsR3JpZD5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEFuaW1hdGVkU2VjdGlvbiB9IGZyb20gJ0AvY29tcG9uZW50cy9hbmltYXRpb25zL2FuaW1hdGVkLXNlY3Rpb24nXG5pbXBvcnQgeyBIb3VyTGFiZWwgfSBmcm9tICdAL2NvbXBvbmVudHMvaG91ci1sYWJlbC9ob3VyLWxhYmVsJ1xuaW1wb3J0IGRheWpzLCB7IHR5cGUgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgeyBrZXlzIH0gZnJvbSAnQC9saWIvdXRpbHMva2V5cydcblxuaW50ZXJmYWNlIFRpbWVIZWFkZXJSb3dQcm9wcyB7XG5cdGhvdXJzOiBEYXlqc1tdXG5cdHZpZXc6ICd3ZWVrJyB8ICdkYXknXG5cdC8vIFBlci1pdGVtIGFuaW1hdGlvbiBkZWxheS4gQ2FsbGVycyBwYXNzIGRpZmZlcmVudCBzdGVwIHZhbHVlcyBkZXBlbmRpbmcgb25cblx0Ly8gdGhlIGxpc3QgbGVuZ3RoIChlLmcuIDAuMDA1IGZvciBhIHdlZWsgb2YgaG91cnMsIDAuMDUgZm9yIGEgc2luZ2xlIGRheSkuXG5cdGRlbGF5U3RlcDogbnVtYmVyXG59XG5cbmV4cG9ydCBjb25zdCBUaW1lSGVhZGVyUm93OiBSZWFjdC5GQzxUaW1lSGVhZGVyUm93UHJvcHM+ID0gKHtcblx0aG91cnMsXG5cdHZpZXcsXG5cdGRlbGF5U3RlcCxcbn0pID0+IChcblx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IGgtMTIgYm9yZGVyLWJcIj5cblx0XHR7aG91cnMubWFwKChjb2wsIGluZGV4KSA9PiB7XG5cdFx0XHRjb25zdCBpc05vd0hvdXIgPSBjb2wuaXNTYW1lKGRheWpzKCksICdob3VyJylcblx0XHRcdGNvbnN0IGhvdXJTdHIgPSBjb2wuZm9ybWF0KCdISCcpXG5cdFx0XHRjb25zdCBrZXkgPSBrZXlzLmhlYWRlci53ZWVrLmhvdXIoY29sLCBpbmRleClcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdDxBbmltYXRlZFNlY3Rpb25cblx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0J21pbi13LTIwIGZsZXgtMSBib3JkZXItciBsYXN0OmJvcmRlci1yLTAgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC14cyBzaHJpbmstMCcsXG5cdFx0XHRcdFx0XHRpc05vd0hvdXIgJiYgJ2JnLWJsdWUtNTAgdGV4dC1ibHVlLTYwMCBmb250LW1lZGl1bSdcblx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdGRhdGEtaG91cj17aG91clN0cn1cblx0XHRcdFx0XHRkYXRhLXRlc3RpZD17a2V5cy5oZWFkZXIucmVzb3VyY2UudGltZUxhYmVsKHZpZXcsIGhvdXJTdHIpfVxuXHRcdFx0XHRcdGRlbGF5PXtpbmRleCAqIGRlbGF5U3RlcH1cblx0XHRcdFx0XHRrZXk9e2tleXMubGlzdEtleShrZXksICdhbmltYXRlZCcpfVxuXHRcdFx0XHRcdHRyYW5zaXRpb25LZXk9e2tleXMubGlzdEtleShrZXksICdtb3Rpb24nKX1cblx0XHRcdFx0PlxuXHRcdFx0XHRcdDxIb3VyTGFiZWwgZGF0ZT17Y29sfSAvPlxuXHRcdFx0XHQ8L0FuaW1hdGVkU2VjdGlvbj5cblx0XHRcdClcblx0XHR9KX1cblx0PC9kaXY+XG4pXG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBCdXNpbmVzc0hvdXJzIH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHsgZ2V0Vmlld0hvdXJzIH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci91dGlscy92aWV3LWhvdXJzJ1xuaW1wb3J0IHsgUmVzb3VyY2VFdmVudEdyaWQgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvcmVzb3VyY2UtZXZlbnQtZ3JpZCdcbmltcG9ydCB7IFRpbWVIZWFkZXJSb3cgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvdGltZS1oZWFkZXItcm93J1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VEYXlIb3Jpem9udGFsOiBSZWFjdC5GQyA9ICgpID0+IHtcblx0Y29uc3QgeyBjdXJyZW50RGF0ZSwgdCwgYnVzaW5lc3NIb3VycywgaGlkZU5vbkJ1c2luZXNzSG91cnMsIHJlc291cmNlcyB9ID1cblx0XHR1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cdGNvbnN0IGRheUhvdXJzID0gZ2V0Vmlld0hvdXJzKHtcblx0XHRyZWZlcmVuY2VEYXRlOiBjdXJyZW50RGF0ZSxcblx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzLFxuXHRcdGFsbERhdGVzOiBbY3VycmVudERhdGVdLFxuXHRcdHJlc291cmNlQnVzaW5lc3NIb3VyczogcmVzb3VyY2VzXG5cdFx0XHQubWFwKChyKSA9PiByLmJ1c2luZXNzSG91cnMpXG5cdFx0XHQuZmlsdGVyKEJvb2xlYW4pIGFzIChCdXNpbmVzc0hvdXJzIHwgQnVzaW5lc3NIb3Vyc1tdKVtdLFxuXHR9KVxuXG5cdHJldHVybiAoXG5cdFx0PFJlc291cmNlRXZlbnRHcmlkXG5cdFx0XHRjbGFzc2VzPXt7XG5cdFx0XHRcdGhlYWRlcjogJ21pbi13LWZ1bGwnLFxuXHRcdFx0XHRib2R5OiAnbWluLXctZnVsbCcsXG5cdFx0XHRcdGNlbGw6ICdtaW4tdy0yMCBmbGV4LTEnLFxuXHRcdFx0fX1cblx0XHRcdGRheXM9e2RheUhvdXJzfVxuXHRcdFx0Z3JpZFR5cGU9XCJob3VyXCJcblx0XHQ+XG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInctMjAgc206dy00MCBib3JkZXItYiBib3JkZXItciBzaHJpbmstMCBmbGV4IGp1c3RpZnktY2VudGVyIGl0ZW1zLWNlbnRlciBzdGlja3kgdG9wLTAgbGVmdC0wIGJnLWJhY2tncm91bmQgei0yMFwiPlxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gdHJ1bmNhdGUgcHgtMSBtaW4tdy0wXCI+e3QoJ3Jlc291cmNlcycpfTwvZGl2PlxuXHRcdFx0PC9kaXY+XG5cblx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIGZsZXggZmxleC1jb2xcIj5cblx0XHRcdFx0PFRpbWVIZWFkZXJSb3cgZGVsYXlTdGVwPXswLjA1fSBob3Vycz17ZGF5SG91cnN9IHZpZXc9XCJkYXlcIiAvPlxuXHRcdFx0PC9kaXY+XG5cdFx0PC9SZXNvdXJjZUV2ZW50R3JpZD5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgeyBBbGxEYXlDZWxsIH0gZnJvbSAnQC9jb21wb25lbnRzL2FsbC1kYXktcm93L2FsbC1kYXktY2VsbCdcbmltcG9ydCB7IEFsbERheVJvdyB9IGZyb20gJ0AvY29tcG9uZW50cy9hbGwtZGF5LXJvdy9hbGwtZGF5LXJvdydcbmltcG9ydCB7IEhvdXJMYWJlbCB9IGZyb20gJ0AvY29tcG9uZW50cy9ob3VyLWxhYmVsL2hvdXItbGFiZWwnXG5pbXBvcnQgeyBSZXNvdXJjZUNlbGwgfSBmcm9tICdAL2NvbXBvbmVudHMvcmVzb3VyY2UtY2VsbCdcbmltcG9ydCB0eXBlIHsgQnVzaW5lc3NIb3VycyB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB7IFZlcnRpY2FsR3JpZCB9IGZyb20gJ0AvY29tcG9uZW50cy92ZXJ0aWNhbC1ncmlkL3ZlcnRpY2FsLWdyaWQnXG5pbXBvcnQgeyBnZXRWaWV3SG91cnMgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL3V0aWxzL3ZpZXctaG91cnMnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSB7IERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBrZXlzIH0gZnJvbSAnQC9saWIvdXRpbHMva2V5cydcblxuZXhwb3J0IGNvbnN0IFJlc291cmNlRGF5VmVydGljYWw6IFJlYWN0LkZDID0gKCkgPT4ge1xuXHRjb25zdCB7XG5cdFx0Y3VycmVudERhdGUsXG5cdFx0cmVzb3VyY2VzLFxuXHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0aGlkZU5vbkJ1c2luZXNzSG91cnMsXG5cdFx0c2xvdER1cmF0aW9uLFxuXHR9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXHRjb25zdCBob3VycyA9IGdldFZpZXdIb3Vycyh7XG5cdFx0cmVmZXJlbmNlRGF0ZTogY3VycmVudERhdGUsXG5cdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRoaWRlTm9uQnVzaW5lc3NIb3Vycyxcblx0XHRhbGxEYXRlczogW2N1cnJlbnREYXRlXSxcblx0XHRyZXNvdXJjZUJ1c2luZXNzSG91cnM6IHJlc291cmNlc1xuXHRcdFx0Lm1hcCgocikgPT4gci5idXNpbmVzc0hvdXJzKVxuXHRcdFx0LmZpbHRlcihCb29sZWFuKSBhcyAoQnVzaW5lc3NIb3VycyB8IEJ1c2luZXNzSG91cnNbXSlbXSxcblx0fSlcblxuXHRjb25zdCBmaXJzdENvbCA9IHtcblx0XHRpZDoga2V5cy5jb2wudGltZSxcblx0XHRkYXk6IHVuZGVmaW5lZCxcblx0XHRkYXlzOiBob3Vycyxcblx0XHRjbGFzc05hbWU6XG5cdFx0XHQnc2hyaW5rLTAgdy0xNiBtaW4tdy0xNiBtYXgtdy0xNiBzdGlja3kgbGVmdC0wIGJnLWJhY2tncm91bmQgei0yMCBib3JkZXItci0wJyxcblx0XHRncmlkVHlwZTogJ2hvdXInIGFzIGNvbnN0LFxuXHRcdG5vRXZlbnRzOiB0cnVlLFxuXHRcdHJlbmRlckNlbGw6IChkYXRlOiBEYXlqcykgPT4gKFxuXHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LW11dGVkLWZvcmVncm91bmQgcC0yIHRleHQtcmlnaHQgdGV4dC1bMTBweF0gc206dGV4dC14cyBmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlclwiPlxuXHRcdFx0XHQ8SG91ckxhYmVsIGRhdGU9e2RhdGV9IC8+XG5cdFx0XHQ8L2Rpdj5cblx0XHQpLFxuXHR9XG5cblx0Y29uc3QgY29sdW1ucyA9IHJlc291cmNlcy5tYXAoKHJlc291cmNlKSA9PiAoe1xuXHRcdGlkOiBrZXlzLmNvbC5kYXkoY3VycmVudERhdGUsIHJlc291cmNlLmlkKSxcblx0XHRyZXNvdXJjZUlkOiByZXNvdXJjZS5pZCxcblx0XHRyZXNvdXJjZSxcblx0XHRkYXlzOiBob3Vycyxcblx0XHRkYXk6IGN1cnJlbnREYXRlLFxuXHRcdGdyaWRUeXBlOiAnaG91cicgYXMgY29uc3QsXG5cdH0pKVxuXG5cdHJldHVybiAoXG5cdFx0PFZlcnRpY2FsR3JpZFxuXHRcdFx0YWxsRGF5Um93PXtcblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IHctZnVsbFwiPlxuXHRcdFx0XHRcdDxBbGxEYXlDZWxsIC8+XG5cdFx0XHRcdFx0e3Jlc291cmNlcy5tYXAoKHJlc291cmNlKSA9PiAoXG5cdFx0XHRcdFx0XHQ8QWxsRGF5Um93XG5cdFx0XHRcdFx0XHRcdGNsYXNzZXM9e3sgY2VsbDogJ21pbi13LTIwIGJvcmRlci1yIScgfX1cblx0XHRcdFx0XHRcdFx0ZGF5cz17W2N1cnJlbnREYXRlXX1cblx0XHRcdFx0XHRcdFx0a2V5PXtrZXlzLmFsbERheVJvdyhyZXNvdXJjZS5pZCl9XG5cdFx0XHRcdFx0XHRcdHJlc291cmNlPXtyZXNvdXJjZX1cblx0XHRcdFx0XHRcdFx0c2hvd1NwYWNlcj17ZmFsc2V9XG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdCkpfVxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdH1cblx0XHRcdGNsYXNzZXM9e3sgYm9keTogJ3ctZnVsbCcsIGhlYWRlcjogJ3ctZnVsbCcgfX1cblx0XHRcdGNvbHVtbnM9e1tmaXJzdENvbCwgLi4uY29sdW1uc119XG5cdFx0XHRkYXRhLXRlc3RpZD1cInJlc291cmNlLWRheVwiXG5cdFx0XHRncmlkVHlwZT1cImhvdXJcIlxuXHRcdFx0c2xvdER1cmF0aW9uTWludXRlcz17c2xvdER1cmF0aW9ufVxuXHRcdD5cblx0XHRcdHsvKiBIZWFkZXIgKi99XG5cdFx0XHQ8ZGl2XG5cdFx0XHRcdGNsYXNzTmFtZT17J2ZsZXggYm9yZGVyLWIgaC0xMiBmbGV4LTEnfVxuXHRcdFx0XHRkYXRhLXRlc3RpZD1cInJlc291cmNlLW1vbnRoLWhlYWRlclwiXG5cdFx0XHQ+XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwic2hyaW5rLTAgYm9yZGVyLXIgdy0xNiBzdGlja3kgdG9wLTAgbGVmdC0wIGJnLWJhY2tncm91bmQgei0yMFwiIC8+XG5cdFx0XHRcdHtyZXNvdXJjZXMubWFwKChyZXNvdXJjZSkgPT4gKFxuXHRcdFx0XHRcdDxSZXNvdXJjZUNlbGxcblx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cIm1pbi13LTIwIGZsZXgtMVwiXG5cdFx0XHRcdFx0XHRrZXk9e2tleXMubGlzdEtleSgncmVzb3VyY2UtY2VsbCcsIHJlc291cmNlLmlkKX1cblx0XHRcdFx0XHRcdHJlc291cmNlPXtyZXNvdXJjZX1cblx0XHRcdFx0XHQvPlxuXHRcdFx0XHQpKX1cblx0XHRcdDwvZGl2PlxuXHRcdDwvVmVydGljYWxHcmlkPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHsgUmVzb3VyY2VEYXlIb3Jpem9udGFsIH0gZnJvbSAnLi9yZXNvdXJjZS1kYXktaG9yaXpvbnRhbCdcbmltcG9ydCB7IFJlc291cmNlRGF5VmVydGljYWwgfSBmcm9tICcuL3Jlc291cmNlLWRheS12ZXJ0aWNhbCdcblxuZXhwb3J0IGNvbnN0IFJlc291cmNlRGF5VmlldzogUmVhY3QuRkMgPSAoKSA9PiB7XG5cdGNvbnN0IHsgb3JpZW50YXRpb24gfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblxuXHRpZiAob3JpZW50YXRpb24gPT09ICd2ZXJ0aWNhbCcpIHtcblx0XHRyZXR1cm4gPFJlc291cmNlRGF5VmVydGljYWwgLz5cblx0fVxuXG5cdHJldHVybiA8UmVzb3VyY2VEYXlIb3Jpem9udGFsIC8+XG59XG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQW5pbWF0ZWRTZWN0aW9uIH0gZnJvbSAnQC9jb21wb25lbnRzL2FuaW1hdGlvbnMvYW5pbWF0ZWQtc2VjdGlvbidcbmltcG9ydCB7IFJlc291cmNlRXZlbnRHcmlkIH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL3Jlc291cmNlLWV2ZW50LWdyaWQnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSB7IERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBnZXRNb250aERheXMgfSBmcm9tICdAL2xpYi91dGlscy9kYXRlLXV0aWxzJ1xuaW1wb3J0IHsga2V5cyB9IGZyb20gJ0AvbGliL3V0aWxzL2tleXMnXG5cbmV4cG9ydCBjb25zdCBSZXNvdXJjZU1vbnRoSG9yaXpvbnRhbDogUmVhY3QuRkMgPSAoKSA9PiB7XG5cdGNvbnN0IHsgY3VycmVudERhdGUsIHQgfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblxuXHQvLyBHZW5lcmF0ZSBjYWxlbmRhciBncmlkIC0gZGF5cyBvZiB0aGUgbW9udGhcblx0Y29uc3QgbW9udGhEYXlzID0gdXNlTWVtbzxEYXlqc1tdPigoKSA9PiB7XG5cdFx0cmV0dXJuIGdldE1vbnRoRGF5cyhjdXJyZW50RGF0ZSlcblx0fSwgW2N1cnJlbnREYXRlXSlcblxuXHRyZXR1cm4gKFxuXHRcdDxSZXNvdXJjZUV2ZW50R3JpZCBkYXlzPXttb250aERheXN9PlxuXHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ3LTIwIHNtOnctNDAgYm9yZGVyLWIgYm9yZGVyLXIgc2hyaW5rLTAgZmxleCBqdXN0aWZ5LWNlbnRlciBpdGVtcy1jZW50ZXIgc3RpY2t5IHRvcC0wIGxlZnQtMCBiZy1iYWNrZ3JvdW5kIHotMjBcIj5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRydW5jYXRlIHB4LTEgbWluLXctMFwiPnt0KCdyZXNvdXJjZXMnKX08L2Rpdj5cblx0XHRcdDwvZGl2PlxuXG5cdFx0XHR7bW9udGhEYXlzLm1hcCgoZGF5LCBpbmRleCkgPT4ge1xuXHRcdFx0XHRjb25zdCBrZXkgPSBgcmVzb3VyY2UtbW9udGgtaGVhZGVyLSR7ZGF5LnRvSVNPU3RyaW5nKCl9YFxuXG5cdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0PEFuaW1hdGVkU2VjdGlvblxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwidy0yMCBib3JkZXItYiBib3JkZXItciBzaHJpbmstMCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBmbGV4LWNvbFwiXG5cdFx0XHRcdFx0XHRkZWxheT17aW5kZXggKiAwLjA1fVxuXHRcdFx0XHRcdFx0a2V5PXtrZXlzLmxpc3RLZXkoa2V5LCAnYW5pbWF0ZWQnKX1cblx0XHRcdFx0XHRcdHRyYW5zaXRpb25LZXk9e2tleXMubGlzdEtleShrZXksICdtb3Rpb24nKX1cblx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQteHMgZm9udC1tZWRpdW1cIj57ZGF5LmZvcm1hdCgnRCcpfTwvZGl2PlxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtbXV0ZWQtZm9yZWdyb3VuZFwiPlxuXHRcdFx0XHRcdFx0XHR7ZGF5LmZvcm1hdCgnZGRkJyl9XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8L0FuaW1hdGVkU2VjdGlvbj5cblx0XHRcdFx0KVxuXHRcdFx0fSl9XG5cdFx0PC9SZXNvdXJjZUV2ZW50R3JpZD5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IFJlc291cmNlQ2VsbCB9IGZyb20gJ0AvY29tcG9uZW50cy9yZXNvdXJjZS1jZWxsJ1xuaW1wb3J0IHsgVmVydGljYWxHcmlkIH0gZnJvbSAnQC9jb21wb25lbnRzL3ZlcnRpY2FsLWdyaWQvdmVydGljYWwtZ3JpZCdcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB0eXBlIHsgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGtleXMgfSBmcm9tICdAL2xpYi91dGlscy9rZXlzJ1xuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VNb250aFZlcnRpY2FsOiBSZWFjdC5GQyA9ICgpID0+IHtcblx0Y29uc3QgeyBjdXJyZW50RGF0ZSwgcmVzb3VyY2VzIH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cdGNvbnN0IHN0YXJ0T2ZNb250aCA9IGN1cnJlbnREYXRlLnN0YXJ0T2YoJ21vbnRoJylcblx0Y29uc3QgZGF5c0luTW9udGggPSBBcnJheS5mcm9tKFxuXHRcdHsgbGVuZ3RoOiBjdXJyZW50RGF0ZS5kYXlzSW5Nb250aCgpIH0sXG5cdFx0KF8sIGkpID0+IHN0YXJ0T2ZNb250aC5hZGQoaSwgJ2RheScpXG5cdClcblxuXHRjb25zdCBmaXJzdENvbCA9IHtcblx0XHRpZDoga2V5cy5jb2wuZGF0ZSxcblx0XHRkYXlzOiBkYXlzSW5Nb250aCxcblx0XHRkYXk6IHVuZGVmaW5lZCxcblx0XHRjbGFzc05hbWU6XG5cdFx0XHQnc2hyaW5rLTAgdy0xNiBtaW4tdy0xNiBtYXgtdy0xNiBzdGlja3kgbGVmdC0wIGJnLWJhY2tncm91bmQgei0yMCBib3JkZXItci0wJyxcblx0XHRncmlkVHlwZTogJ2RheScgYXMgY29uc3QsXG5cdFx0bm9FdmVudHM6IHRydWUsXG5cdFx0cmVuZGVyQ2VsbDogKGRhdGU6IERheWpzKSA9PiAoXG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQtbXV0ZWQtZm9yZWdyb3VuZCBwLTIgdGV4dC1yaWdodCB0ZXh0LVsxMHB4XSBzbTp0ZXh0LXhzIGZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyXCI+XG5cdFx0XHRcdDxzcGFuPntkYXRlLmZvcm1hdCgnRCcpfTwvc3Bhbj5cblx0XHRcdFx0PHNwYW4+e2RhdGUuZm9ybWF0KCdkZGQnKX08L3NwYW4+XG5cdFx0XHQ8L2Rpdj5cblx0XHQpLFxuXHR9XG5cblx0Y29uc3QgY29sdW1ucyA9IHJlc291cmNlcy5tYXAoKHJlc291cmNlKSA9PiAoe1xuXHRcdGlkOiBrZXlzLmNvbC5yZXNvdXJjZSgnbW9udGgnLCByZXNvdXJjZS5pZCksXG5cdFx0ZGF5OiB1bmRlZmluZWQsXG5cdFx0cmVzb3VyY2VJZDogcmVzb3VyY2UuaWQsXG5cdFx0ZGF5czogZGF5c0luTW9udGgsXG5cdFx0Z3JpZFR5cGU6ICdkYXknIGFzIGNvbnN0LFxuXHR9KSlcblxuXHRyZXR1cm4gKFxuXHRcdDxWZXJ0aWNhbEdyaWRcblx0XHRcdGNsYXNzZXM9e3sgaGVhZGVyOiAndy1mdWxsJywgYm9keTogJ3ctZnVsbCcgfX1cblx0XHRcdGNvbHVtbnM9e1tmaXJzdENvbCwgLi4uY29sdW1uc119XG5cdFx0XHRkYXRhLXRlc3RpZD1cInJlc291cmNlLW1vbnRoLXZlcnRpY2FsLWdyaWRcIlxuXHRcdD5cblx0XHRcdHsvKiBIZWFkZXIgKi99XG5cdFx0XHQ8ZGl2XG5cdFx0XHRcdGNsYXNzTmFtZT17J2ZsZXggYm9yZGVyLWIgaC0xMiBmbGV4LTEnfVxuXHRcdFx0XHRkYXRhLXRlc3RpZD1cInJlc291cmNlLW1vbnRoLWhlYWRlclwiXG5cdFx0XHQ+XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwic2hyaW5rLTAgYm9yZGVyLXIgdy0xNiBzdGlja3kgdG9wLTAgbGVmdC0wIGJnLWJhY2tncm91bmQgei0yMFwiIC8+XG5cdFx0XHRcdHtyZXNvdXJjZXMubWFwKChyZXNvdXJjZSkgPT4gKFxuXHRcdFx0XHRcdDxSZXNvdXJjZUNlbGxcblx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cIm1pbi13LTIwIGZsZXgtMVwiXG5cdFx0XHRcdFx0XHRrZXk9e2tleXMubGlzdEtleSgncmVzb3VyY2UtY2VsbCcsIHJlc291cmNlLmlkKX1cblx0XHRcdFx0XHRcdHJlc291cmNlPXtyZXNvdXJjZX1cblx0XHRcdFx0XHQvPlxuXHRcdFx0XHQpKX1cblx0XHRcdDwvZGl2PlxuXHRcdDwvVmVydGljYWxHcmlkPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHsgUmVzb3VyY2VNb250aEhvcml6b250YWwgfSBmcm9tICcuL3Jlc291cmNlLW1vbnRoLWhvcml6b250YWwnXG5pbXBvcnQgeyBSZXNvdXJjZU1vbnRoVmVydGljYWwgfSBmcm9tICcuL3Jlc291cmNlLW1vbnRoLXZlcnRpY2FsJ1xuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VNb250aFZpZXc6IFJlYWN0LkZDID0gKCkgPT4ge1xuXHRjb25zdCB7IG9yaWVudGF0aW9uIH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cblx0aWYgKG9yaWVudGF0aW9uID09PSAndmVydGljYWwnKSB7XG5cdFx0cmV0dXJuIDxSZXNvdXJjZU1vbnRoVmVydGljYWwgLz5cblx0fVxuXG5cdHJldHVybiA8UmVzb3VyY2VNb250aEhvcml6b250YWwgLz5cbn1cbiIsCiAgICAiaW1wb3J0IHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHsgZ2V0V2Vla0RheXMgfSBmcm9tICdAL2xpYi91dGlscy9kYXRlLXV0aWxzJ1xuXG5leHBvcnQgZnVuY3Rpb24gdXNlUmVzb3VyY2VXZWVrVmlld0RhdGEoKSB7XG5cdGNvbnN0IHtcblx0XHRjdXJyZW50RGF0ZSxcblx0XHRmaXJzdERheU9mV2Vlayxcblx0XHRyZXNvdXJjZXMsXG5cdFx0d2Vla1ZpZXdHcmFudWxhcml0eSxcblx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzLFxuXHRcdGhpZGRlbkRheXMsXG5cdH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cblx0Y29uc3QgaXNIb3VybHkgPSB3ZWVrVmlld0dyYW51bGFyaXR5ID09PSAnaG91cmx5J1xuXG5cdGNvbnN0IHdlZWtEYXlzID0gdXNlTWVtbyhcblx0XHQoKSA9PiBnZXRXZWVrRGF5cyhjdXJyZW50RGF0ZSwgZmlyc3REYXlPZldlZWspLFxuXHRcdFtjdXJyZW50RGF0ZSwgZmlyc3REYXlPZldlZWtdXG5cdClcblxuXHRjb25zdCB2aXNpYmxlRGF5cyA9IHVzZU1lbW8oXG5cdFx0KCkgPT5cblx0XHRcdGhpZGRlbkRheXNcblx0XHRcdFx0PyB3ZWVrRGF5cy5maWx0ZXIoKGRheSkgPT4gIWhpZGRlbkRheXMuaGFzKGRheS5kYXkoKSkpXG5cdFx0XHRcdDogd2Vla0RheXMsXG5cdFx0W3dlZWtEYXlzLCBoaWRkZW5EYXlzXVxuXHQpXG5cblx0Y29uc3QgcmVzb3VyY2VCdXNpbmVzc0hvdXJzID0gdXNlTWVtbyhcblx0XHQoKSA9PiByZXNvdXJjZXMuZmxhdE1hcCgocikgPT4gKHIuYnVzaW5lc3NIb3VycyA/IFtyLmJ1c2luZXNzSG91cnNdIDogW10pKSxcblx0XHRbcmVzb3VyY2VzXVxuXHQpXG5cblx0cmV0dXJuIHtcblx0XHRpc0hvdXJseSxcblx0XHRyZXNvdXJjZXMsXG5cdFx0d2Vla0RheXMsXG5cdFx0dmlzaWJsZURheXMsXG5cdFx0Y3VycmVudERhdGUsXG5cdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRoaWRlTm9uQnVzaW5lc3NIb3Vycyxcblx0XHRyZXNvdXJjZUJ1c2luZXNzSG91cnMsXG5cdH1cbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBBbmltYXRlZFNlY3Rpb24gfSBmcm9tICdAL2NvbXBvbmVudHMvYW5pbWF0aW9ucy9hbmltYXRlZC1zZWN0aW9uJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUgeyBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IGlzVG9kYXkgfSBmcm9tICdAL2xpYi91dGlscy9kYXRlLXV0aWxzJ1xuaW1wb3J0IHsga2V5cyB9IGZyb20gJ0AvbGliL3V0aWxzL2tleXMnXG5cbmludGVyZmFjZSBSZXNvdXJjZVdlZWtIb3Jpem9udGFsRGF5SGVhZGVyUHJvcHMge1xuXHRkYXlzOiBEYXlqc1tdXG59XG5cbmV4cG9ydCBjb25zdCBSZXNvdXJjZVdlZWtIb3Jpem9udGFsRGF5SGVhZGVyOiBSZWFjdC5GQzxcblx0UmVzb3VyY2VXZWVrSG9yaXpvbnRhbERheUhlYWRlclByb3BzXG4+ID0gKHsgZGF5cyB9KSA9PiB7XG5cdGNvbnN0IHsgd2Vla1ZpZXdHcmFudWxhcml0eSB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXHRjb25zdCBpc0hvdXJseSA9IHdlZWtWaWV3R3JhbnVsYXJpdHkgPT09ICdob3VybHknXG5cblx0cmV0dXJuIChcblx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggaC0xMlwiPlxuXHRcdFx0e2RheXMubWFwKChkYXksIGluZGV4KSA9PiB7XG5cdFx0XHRcdGNvbnN0IHRvZGF5ID0gaXNUb2RheShkYXkpXG5cdFx0XHRcdGNvbnN0IGtleSA9IGtleXMuaGVhZGVyLndlZWsuZGF5KGRheSlcblxuXHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdDxBbmltYXRlZFNlY3Rpb25cblx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHRcdCdzaHJpbmstMCBib3JkZXItciBsYXN0OmJvcmRlci1yLTAgYm9yZGVyLWIgZmxleC0xIGZsZXggaXRlbXMtY2VudGVyIHRleHQtY2VudGVyIGZvbnQtbWVkaXVtIG1pbi13LTIwJyxcblx0XHRcdFx0XHRcdFx0dG9kYXkgJiYgJ2JnLXByaW1hcnkvMTAgZm9udC1ib2xkJ1xuXHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPXtrZXlzLmhlYWRlci5yZXNvdXJjZS53ZWVrRGF5fVxuXHRcdFx0XHRcdFx0ZGVsYXk9e2luZGV4ICogMC4wNX1cblx0XHRcdFx0XHRcdGtleT17a2V5cy5saXN0S2V5KGtleSwgJ2FuaW1hdGVkJyl9XG5cdFx0XHRcdFx0XHR0cmFuc2l0aW9uS2V5PXtrZXlzLmxpc3RLZXkoa2V5LCAnbW90aW9uJyl9XG5cdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0XHRcdGlzSG91cmx5ID8gJ3N0aWNreSBsZWZ0LTEvMicgOiAndy1mdWxsIHRleHQtY2VudGVyJ1xuXHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gdHJ1bmNhdGUgdy1mdWxsXCI+e2RheS5mb3JtYXQoJ2RkZCcpfTwvZGl2PlxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCI+XG5cdFx0XHRcdFx0XHRcdFx0e2RheS5mb3JtYXQoJ0QnKX1cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8L0FuaW1hdGVkU2VjdGlvbj5cblx0XHRcdFx0KVxuXHRcdFx0fSl9XG5cdFx0PC9kaXY+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgZ2V0Vmlld0hvdXJzIH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci91dGlscy92aWV3LWhvdXJzJ1xuaW1wb3J0IHsgdXNlUmVzb3VyY2VXZWVrVmlld0RhdGEgfSBmcm9tICcuLi91c2UtcmVzb3VyY2Utd2Vlay12aWV3LWRhdGEnXG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VSZXNvdXJjZVdlZWtIb3Jpem9udGFsRGF0YSgpIHtcblx0Y29uc3Qge1xuXHRcdGlzSG91cmx5LFxuXHRcdHdlZWtEYXlzLFxuXHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0aGlkZU5vbkJ1c2luZXNzSG91cnMsXG5cdFx0cmVzb3VyY2VCdXNpbmVzc0hvdXJzLFxuXHR9ID0gdXNlUmVzb3VyY2VXZWVrVmlld0RhdGEoKVxuXG5cdGNvbnN0IHdlZWtIb3VycyA9IHVzZU1lbW8oKCkgPT4ge1xuXHRcdGlmICghaXNIb3VybHkpIHJldHVybiBbXVxuXHRcdHJldHVybiB3ZWVrRGF5cy5tYXAoKGRheSkgPT5cblx0XHRcdGdldFZpZXdIb3Vycyh7XG5cdFx0XHRcdHJlZmVyZW5jZURhdGU6IGRheSxcblx0XHRcdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRcdFx0aGlkZU5vbkJ1c2luZXNzSG91cnMsXG5cdFx0XHRcdHJlc291cmNlQnVzaW5lc3NIb3Vycyxcblx0XHRcdH0pXG5cdFx0KVxuXHR9LCBbXG5cdFx0aXNIb3VybHksXG5cdFx0d2Vla0RheXMsXG5cdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRoaWRlTm9uQnVzaW5lc3NIb3Vycyxcblx0XHRyZXNvdXJjZUJ1c2luZXNzSG91cnMsXG5cdF0pXG5cblx0cmV0dXJuIHsgd2Vla0hvdXJzIH1cbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBSZXNvdXJjZUV2ZW50R3JpZCB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy9yZXNvdXJjZS1ldmVudC1ncmlkJ1xuaW1wb3J0IHsgVGltZUhlYWRlclJvdyB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy90aW1lLWhlYWRlci1yb3cnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgdXNlUmVzb3VyY2VXZWVrVmlld0RhdGEgfSBmcm9tICcuLi91c2UtcmVzb3VyY2Utd2Vlay12aWV3LWRhdGEnXG5pbXBvcnQgeyBSZXNvdXJjZVdlZWtIb3Jpem9udGFsRGF5SGVhZGVyIH0gZnJvbSAnLi9yZXNvdXJjZS13ZWVrLWhvcml6b250YWwtZGF5LWhlYWRlcidcbmltcG9ydCB7IHVzZVJlc291cmNlV2Vla0hvcml6b250YWxEYXRhIH0gZnJvbSAnLi91c2UtcmVzb3VyY2Utd2Vlay1ob3Jpem9udGFsLWRhdGEnXG5cbmV4cG9ydCBjb25zdCBSZXNvdXJjZVdlZWtIb3Jpem9udGFsOiBSZWFjdC5GQyA9ICgpID0+IHtcblx0Y29uc3QgeyB0IH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cdGNvbnN0IHsgaXNIb3VybHksIHdlZWtEYXlzIH0gPSB1c2VSZXNvdXJjZVdlZWtWaWV3RGF0YSgpXG5cdGNvbnN0IHsgd2Vla0hvdXJzIH0gPSB1c2VSZXNvdXJjZVdlZWtIb3Jpem9udGFsRGF0YSgpXG5cblx0cmV0dXJuIChcblx0XHQ8UmVzb3VyY2VFdmVudEdyaWRcblx0XHRcdGNsYXNzZXM9e3tcblx0XHRcdFx0aGVhZGVyOiBjbihpc0hvdXJseSA/ICdoLTI0JyA6ICdoLTEyJywgJ21pbi13LWZ1bGwnKSxcblx0XHRcdFx0Ym9keTogJ21pbi13LWZ1bGwnLFxuXHRcdFx0XHRjZWxsOiAnbWluLXctMjAgZmxleC0xJyxcblx0XHRcdH19XG5cdFx0XHRkYXlzPXtpc0hvdXJseSA/IHdlZWtIb3VycyA6IHdlZWtEYXlzfVxuXHRcdFx0Z3JpZFR5cGU9e2lzSG91cmx5ID8gJ2hvdXInIDogJ2RheSd9XG5cdFx0PlxuXHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ3LTIwIHNtOnctNDAgYm9yZGVyLWIgYm9yZGVyLXIgc2hyaW5rLTAgZmxleCBqdXN0aWZ5LWNlbnRlciBpdGVtcy1jZW50ZXIgc3RpY2t5IHRvcC0wIGxlZnQtMCBiZy1iYWNrZ3JvdW5kIHotMjBcIj5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRydW5jYXRlIHB4LTEgbWluLXctMFwiPnt0KCdyZXNvdXJjZXMnKX08L2Rpdj5cblx0XHRcdDwvZGl2PlxuXG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXgtMSBmbGV4IGZsZXgtY29sXCI+XG5cdFx0XHRcdDxSZXNvdXJjZVdlZWtIb3Jpem9udGFsRGF5SGVhZGVyIGRheXM9e3dlZWtEYXlzfSAvPlxuXHRcdFx0XHR7aXNIb3VybHkgJiYgKFxuXHRcdFx0XHRcdDxUaW1lSGVhZGVyUm93XG5cdFx0XHRcdFx0XHRkZWxheVN0ZXA9ezAuMDA1fVxuXHRcdFx0XHRcdFx0aG91cnM9e3dlZWtIb3Vycy5mbGF0KCl9XG5cdFx0XHRcdFx0XHR2aWV3PVwid2Vla1wiXG5cdFx0XHRcdFx0Lz5cblx0XHRcdFx0KX1cblx0XHRcdDwvZGl2PlxuXHRcdDwvUmVzb3VyY2VFdmVudEdyaWQ+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBBbGxEYXlDZWxsIH0gZnJvbSAnQC9jb21wb25lbnRzL2FsbC1kYXktcm93L2FsbC1kYXktY2VsbCdcbmltcG9ydCB7IEFsbERheVJvdyB9IGZyb20gJ0AvY29tcG9uZW50cy9hbGwtZGF5LXJvdy9hbGwtZGF5LXJvdydcbmltcG9ydCB7IEhvdXJMYWJlbCB9IGZyb20gJ0AvY29tcG9uZW50cy9ob3VyLWxhYmVsL2hvdXItbGFiZWwnXG5pbXBvcnQgeyBWZXJ0aWNhbEdyaWQgfSBmcm9tICdAL2NvbXBvbmVudHMvdmVydGljYWwtZ3JpZC92ZXJ0aWNhbC1ncmlkJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUgeyBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsga2V5cyB9IGZyb20gJ0AvbGliL3V0aWxzL2tleXMnXG5pbXBvcnQgeyB1c2VSZXNvdXJjZVdlZWtWaWV3RGF0YSB9IGZyb20gJy4uL3VzZS1yZXNvdXJjZS13ZWVrLXZpZXctZGF0YSdcbmltcG9ydCB7IFJlc291cmNlV2Vla1ZlcnRpY2FsRGF5SGVhZGVyIH0gZnJvbSAnLi9yZXNvdXJjZS13ZWVrLXZlcnRpY2FsLWRheS1oZWFkZXInXG5pbXBvcnQgeyBSZXNvdXJjZVdlZWtWZXJ0aWNhbFJlc291cmNlSGVhZGVyIH0gZnJvbSAnLi9yZXNvdXJjZS13ZWVrLXZlcnRpY2FsLXJlc291cmNlLWhlYWRlcidcbmltcG9ydCB7IHVzZVJlc291cmNlV2Vla1ZlcnRpY2FsRGF0YSB9IGZyb20gJy4vdXNlLXJlc291cmNlLXdlZWstdmVydGljYWwtZGF0YSdcblxuZXhwb3J0IGNvbnN0IFJlc291cmNlV2Vla1ZlcnRpY2FsOiBSZWFjdC5GQyA9ICgpID0+IHtcblx0Y29uc3QgeyBpc0hvdXJseSwgcmVzb3VyY2VzLCB3ZWVrRGF5cywgdmlzaWJsZURheXMgfSA9XG5cdFx0dXNlUmVzb3VyY2VXZWVrVmlld0RhdGEoKVxuXHRjb25zdCB7IGhvdXJzLCBjb2x1bW5zIH0gPSB1c2VSZXNvdXJjZVdlZWtWZXJ0aWNhbERhdGEoKVxuXHRjb25zdCB7IHNsb3REdXJhdGlvbiB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXG5cdGNvbnN0IGZpcnN0Q29sID0gdXNlTWVtbyhcblx0XHQoKSA9PiAoe1xuXHRcdFx0aWQ6IGlzSG91cmx5ID8ga2V5cy5jb2wudGltZSA6IGtleXMuY29sLmRhdGUsXG5cdFx0XHRkYXlzOiBpc0hvdXJseSA/IGhvdXJzIDogd2Vla0RheXMsXG5cdFx0XHRkYXk6IHVuZGVmaW5lZCxcblx0XHRcdGNsYXNzTmFtZTpcblx0XHRcdFx0J3Nocmluay0wIHctMTYgbWluLXctMTYgbWF4LXctMTYgc3RpY2t5IGxlZnQtMCBiZy1iYWNrZ3JvdW5kIHotMjAgYm9yZGVyLXItMCcsXG5cdFx0XHRncmlkVHlwZTogaXNIb3VybHkgPyAoJ2hvdXInIGFzIGNvbnN0KSA6ICgnZGF5JyBhcyBjb25zdCksXG5cdFx0XHRub0V2ZW50czogdHJ1ZSxcblx0XHRcdHJlbmRlckNlbGw6IChkYXRlOiBEYXlqcykgPT4gKFxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQtbXV0ZWQtZm9yZWdyb3VuZCBwLTIgdGV4dC1yaWdodCB0ZXh0LVsxMHB4XSBzbTp0ZXh0LXhzIGZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyXCI+XG5cdFx0XHRcdFx0e2lzSG91cmx5ID8gKFxuXHRcdFx0XHRcdFx0PEhvdXJMYWJlbCBkYXRlPXtkYXRlfSAvPlxuXHRcdFx0XHRcdCkgOiAoXG5cdFx0XHRcdFx0XHQ8PlxuXHRcdFx0XHRcdFx0XHQ8c3Bhbj57ZGF0ZS5mb3JtYXQoJ2RkZCcpfTwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0PHNwYW4+e2RhdGUuZm9ybWF0KCdEJyl9PC9zcGFuPlxuXHRcdFx0XHRcdFx0PC8+XG5cdFx0XHRcdFx0KX1cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQpLFxuXHRcdH0pLFxuXHRcdFtob3VycywgaXNIb3VybHksIHdlZWtEYXlzXVxuXHQpXG5cblx0Y29uc3QgYWxsRGF5Um93ID0gdXNlTWVtbygoKSA9PiB7XG5cdFx0aWYgKCFpc0hvdXJseSkgcmV0dXJuIHVuZGVmaW5lZFxuXHRcdHJldHVybiAoXG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggdy1mdWxsXCI+XG5cdFx0XHRcdDxBbGxEYXlDZWxsIC8+XG5cdFx0XHRcdHtyZXNvdXJjZXMubWFwKChyZXNvdXJjZSkgPT4gKFxuXHRcdFx0XHRcdDxBbGxEYXlSb3dcblx0XHRcdFx0XHRcdGNsYXNzZXM9e3sgY2VsbDogJ21pbi13LTIwIGZsZXgtMSBib3JkZXItciEnIH19XG5cdFx0XHRcdFx0XHRkYXlzPXt2aXNpYmxlRGF5c31cblx0XHRcdFx0XHRcdGtleT17a2V5cy5hbGxEYXlSb3cocmVzb3VyY2UuaWQpfVxuXHRcdFx0XHRcdFx0cmVzb3VyY2U9e3Jlc291cmNlfVxuXHRcdFx0XHRcdFx0c2hvd1NwYWNlcj17ZmFsc2V9XG5cdFx0XHRcdFx0Lz5cblx0XHRcdFx0KSl9XG5cdFx0XHQ8L2Rpdj5cblx0XHQpXG5cdH0sIFtpc0hvdXJseSwgcmVzb3VyY2VzLCB2aXNpYmxlRGF5c10pXG5cblx0cmV0dXJuIChcblx0XHQ8VmVydGljYWxHcmlkXG5cdFx0XHRhbGxEYXlSb3c9e2FsbERheVJvd31cblx0XHRcdGNsYXNzZXM9e3sgaGVhZGVyOiBpc0hvdXJseSA/ICdoLTI0JyA6ICdoLTEyJyB9fVxuXHRcdFx0Y29sdW1ucz17W2ZpcnN0Q29sLCAuLi5jb2x1bW5zXX1cblx0XHRcdGRhdGEtdGVzdGlkPVwicmVzb3VyY2Utd2Vla1wiXG5cdFx0XHRncmlkVHlwZT17aXNIb3VybHkgPyAnaG91cicgOiAnZGF5J31cblx0XHRcdHNsb3REdXJhdGlvbk1pbnV0ZXM9e3Nsb3REdXJhdGlvbn1cblx0XHQ+XG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXgtMSBmbGV4IGZsZXgtY29sXCI+XG5cdFx0XHRcdDxSZXNvdXJjZVdlZWtWZXJ0aWNhbFJlc291cmNlSGVhZGVyXG5cdFx0XHRcdFx0cmVzb3VyY2VzPXtyZXNvdXJjZXN9XG5cdFx0XHRcdFx0dmlzaWJsZURheXM9e3Zpc2libGVEYXlzfVxuXHRcdFx0XHQvPlxuXHRcdFx0XHR7aXNIb3VybHkgJiYgPFJlc291cmNlV2Vla1ZlcnRpY2FsRGF5SGVhZGVyIGNvbHVtbnM9e2NvbHVtbnN9IC8+fVxuXHRcdFx0PC9kaXY+XG5cdFx0PC9WZXJ0aWNhbEdyaWQ+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBBbmltYXRlZFNlY3Rpb24gfSBmcm9tICdAL2NvbXBvbmVudHMvYW5pbWF0aW9ucy9hbmltYXRlZC1zZWN0aW9uJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUgeyBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IGlzVG9kYXkgfSBmcm9tICdAL2xpYi91dGlscy9kYXRlLXV0aWxzJ1xuaW1wb3J0IHsga2V5cyB9IGZyb20gJ0AvbGliL3V0aWxzL2tleXMnXG5cbmludGVyZmFjZSBSZXNvdXJjZVdlZWtWZXJ0aWNhbERheUhlYWRlclByb3BzIHtcblx0Y29sdW1uczogQXJyYXk8eyBkYXk/OiBEYXlqczsgcmVzb3VyY2VJZD86IHN0cmluZyB8IG51bWJlciB9PlxufVxuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VXZWVrVmVydGljYWxEYXlIZWFkZXI6IFJlYWN0LkZDPFxuXHRSZXNvdXJjZVdlZWtWZXJ0aWNhbERheUhlYWRlclByb3BzXG4+ID0gKHsgY29sdW1ucyB9KSA9PiB7XG5cdGNvbnN0IHsgY3VycmVudERhdGUgfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblxuXHRyZXR1cm4gKFxuXHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBoLTEyXCI+XG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInNocmluay0wIHctMTYgYm9yZGVyLXIgYm9yZGVyLWIgei0yMCBiZy1iYWNrZ3JvdW5kIHN0aWNreSBsZWZ0LTBcIj5cblx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwicHgtMiBoLWZ1bGwgdy1mdWxsIGZsZXgganVzdGlmeS1jZW50ZXIgaXRlbXMtc3RhcnQgZm9udC1tZWRpdW1cIj5cblx0XHRcdFx0XHR7Y3VycmVudERhdGUud2VlaygpfVxuXHRcdFx0XHQ8L3NwYW4+XG5cdFx0XHQ8L2Rpdj5cblx0XHRcdHtjb2x1bW5zLm1hcCgoY29sLCBpbmRleCkgPT4ge1xuXHRcdFx0XHRjb25zdCBkYXkgPSBjb2wuZGF5XG5cdFx0XHRcdGlmICghZGF5KSByZXR1cm4gbnVsbFxuXHRcdFx0XHRjb25zdCB0b2RheSA9IGlzVG9kYXkoZGF5KVxuXHRcdFx0XHRjb25zdCBrZXkgPSBrZXlzLmhlYWRlci53ZWVrLmhvdXIoZGF5LCBjb2wucmVzb3VyY2VJZCA/PyAnJylcblxuXHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdDxBbmltYXRlZFNlY3Rpb25cblx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHRcdCdtaW4tdy0yMCBmbGV4LTEgYm9yZGVyLXIgbGFzdDpib3JkZXItci0wIGJvcmRlci1iIGZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRleHQteHMgc2hyaW5rLTAgYmctYmFja2dyb3VuZCcsXG5cdFx0XHRcdFx0XHRcdHRvZGF5ICYmICdiZy1wcmltYXJ5LzEwIGZvbnQtYm9sZCdcblx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD17a2V5cy5oZWFkZXIucmVzb3VyY2UudGltZUxhYmVsKFxuXHRcdFx0XHRcdFx0XHQnd2VlaycsXG5cdFx0XHRcdFx0XHRcdGRheS5mb3JtYXQoJ0hIJylcblx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRkZWxheT17aW5kZXggKiAwLjA1fVxuXHRcdFx0XHRcdFx0a2V5PXtrZXlzLmxpc3RLZXkoa2V5LCAnYW5pbWF0ZWQnKX1cblx0XHRcdFx0XHRcdHRyYW5zaXRpb25LZXk9e2tleXMubGlzdEtleShrZXksICdtb3Rpb24nKX1cblx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gdHJ1bmNhdGUgdy1mdWxsIHRleHQtY2VudGVyXCI+XG5cdFx0XHRcdFx0XHRcdHtkYXkuZm9ybWF0KCdkZGQnKX1cblx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtbXV0ZWQtZm9yZWdyb3VuZFwiPlxuXHRcdFx0XHRcdFx0XHR7ZGF5LmZvcm1hdCgnRCcpfVxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0PC9BbmltYXRlZFNlY3Rpb24+XG5cdFx0XHRcdClcblx0XHRcdH0pfVxuXHRcdDwvZGl2PlxuXHQpXG59XG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgUmVzb3VyY2VDZWxsIH0gZnJvbSAnQC9jb21wb25lbnRzL3Jlc291cmNlLWNlbGwnXG5pbXBvcnQgdHlwZSB7IFJlc291cmNlIH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci90eXBlcydcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB0eXBlIHsgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgeyBrZXlzIH0gZnJvbSAnQC9saWIvdXRpbHMva2V5cydcblxuaW50ZXJmYWNlIFJlc291cmNlV2Vla1ZlcnRpY2FsUmVzb3VyY2VIZWFkZXJQcm9wcyB7XG5cdHJlc291cmNlczogUmVzb3VyY2VbXVxuXHR2aXNpYmxlRGF5czogRGF5anNbXVxufVxuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VXZWVrVmVydGljYWxSZXNvdXJjZUhlYWRlcjogUmVhY3QuRkM8XG5cdFJlc291cmNlV2Vla1ZlcnRpY2FsUmVzb3VyY2VIZWFkZXJQcm9wc1xuPiA9ICh7IHJlc291cmNlcyB9KSA9PiB7XG5cdGNvbnN0IHsgd2Vla1ZpZXdHcmFudWxhcml0eSwgdCwgY3VycmVudERhdGUgfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblx0Y29uc3QgaXNIb3VybHkgPSB3ZWVrVmlld0dyYW51bGFyaXR5ID09PSAnaG91cmx5J1xuXG5cdHJldHVybiAoXG5cdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IGgtMTJcIj5cblx0XHRcdDxkaXYgY2xhc3NOYW1lPVwic2hyaW5rLTAgdy0xNiBib3JkZXItciB6LTIwIGJnLWJhY2tncm91bmQgc3RpY2t5IGxlZnQtMFwiPlxuXHRcdFx0XHQ8c3BhblxuXHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHQncHgtMiBoLWZ1bGwgdy1mdWxsIGZsZXggZmxleC1jb2wganVzdGlmeS1jZW50ZXIgdGV4dC14cyB0ZXh0LW11dGVkLWZvcmVncm91bmQgdGV4dC1jZW50ZXIgbWluLXctMCcsXG5cdFx0XHRcdFx0XHRpc0hvdXJseSA/ICdqdXN0aWZ5LWVuZCcgOiAnanVzdGlmeS1jZW50ZXIgYm9yZGVyLWInXG5cdFx0XHRcdFx0KX1cblx0XHRcdFx0PlxuXHRcdFx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cInRydW5jYXRlIHctZnVsbFwiPnt0KCd3ZWVrJyl9PC9zcGFuPlxuXHRcdFx0XHRcdHshaXNIb3VybHkgJiYgKFxuXHRcdFx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwiZm9udC1tZWRpdW0gdGV4dC1mb3JlZ3JvdW5kIHRydW5jYXRlIHctZnVsbFwiPlxuXHRcdFx0XHRcdFx0XHR7Y3VycmVudERhdGUud2VlaygpfVxuXHRcdFx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0XHRcdCl9XG5cdFx0XHRcdDwvc3Bhbj5cblx0XHRcdDwvZGl2PlxuXG5cdFx0XHR7cmVzb3VyY2VzLm1hcCgocmVzb3VyY2UpID0+IHtcblx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHQ8UmVzb3VyY2VDZWxsXG5cdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJtaW4tdy0yMCBmbGV4LTEgYm9yZGVyLWJcIlxuXHRcdFx0XHRcdFx0a2V5PXtrZXlzLmxpc3RLZXkoJ3Jlc291cmNlLWNlbGwnLCByZXNvdXJjZS5pZCl9XG5cdFx0XHRcdFx0XHRyZXNvdXJjZT17cmVzb3VyY2V9XG5cdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0XHRcdCdzdGlja3kgdGV4dC1zbSBmb250LW1lZGl1bSB0cnVuY2F0ZScsXG5cdFx0XHRcdFx0XHRcdFx0aXNIb3VybHkgPyAnbGVmdC0xLzQnIDogJ2xlZnQtMSdcblx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0e3Jlc291cmNlLnRpdGxlfVxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0PC9SZXNvdXJjZUNlbGw+XG5cdFx0XHRcdClcblx0XHRcdH0pfVxuXHRcdDwvZGl2PlxuXHQpXG59XG4iLAogICAgImltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBnZXRWaWV3SG91cnMgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL3V0aWxzL3ZpZXctaG91cnMnXG5pbXBvcnQgdHlwZSB7IERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBrZXlzIH0gZnJvbSAnQC9saWIvdXRpbHMva2V5cydcbmltcG9ydCB7IHVzZVJlc291cmNlV2Vla1ZpZXdEYXRhIH0gZnJvbSAnLi4vdXNlLXJlc291cmNlLXdlZWstdmlldy1kYXRhJ1xuXG5leHBvcnQgZnVuY3Rpb24gdXNlUmVzb3VyY2VXZWVrVmVydGljYWxEYXRhKCkge1xuXHRjb25zdCB7XG5cdFx0aXNIb3VybHksXG5cdFx0cmVzb3VyY2VzLFxuXHRcdHdlZWtEYXlzLFxuXHRcdHZpc2libGVEYXlzLFxuXHRcdGN1cnJlbnREYXRlLFxuXHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0aGlkZU5vbkJ1c2luZXNzSG91cnMsXG5cdFx0cmVzb3VyY2VCdXNpbmVzc0hvdXJzLFxuXHR9ID0gdXNlUmVzb3VyY2VXZWVrVmlld0RhdGEoKVxuXG5cdGNvbnN0IGdldEhvdXJzID0gdXNlQ2FsbGJhY2soXG5cdFx0KGRhdGU6IERheWpzKSA9PiB7XG5cdFx0XHRyZXR1cm4gZ2V0Vmlld0hvdXJzKHtcblx0XHRcdFx0cmVmZXJlbmNlRGF0ZTogZGF0ZSxcblx0XHRcdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRcdFx0aGlkZU5vbkJ1c2luZXNzSG91cnMsXG5cdFx0XHRcdGFsbERhdGVzOiB3ZWVrRGF5cyxcblx0XHRcdFx0cmVzb3VyY2VCdXNpbmVzc0hvdXJzLFxuXHRcdFx0fSlcblx0XHR9LFxuXHRcdFtidXNpbmVzc0hvdXJzLCBoaWRlTm9uQnVzaW5lc3NIb3Vycywgd2Vla0RheXMsIHJlc291cmNlQnVzaW5lc3NIb3Vyc11cblx0KVxuXG5cdGNvbnN0IGhvdXJzID0gdXNlTWVtbygoKSA9PiBnZXRIb3VycyhjdXJyZW50RGF0ZSksIFtjdXJyZW50RGF0ZSwgZ2V0SG91cnNdKVxuXHRjb25zdCBob3VybHlDb2x1bW5zID0gdXNlTWVtbyhcblx0XHQoKSA9PlxuXHRcdFx0cmVzb3VyY2VzLmZsYXRNYXAoKHJlc291cmNlKSA9PlxuXHRcdFx0XHR2aXNpYmxlRGF5cy5tYXAoKGRheSkgPT4gKHtcblx0XHRcdFx0XHRpZDoga2V5cy5jb2wuZGF5KGRheSwgcmVzb3VyY2UuaWQpLFxuXHRcdFx0XHRcdGNsYXNzTmFtZTogJ21pbi13LTIwIGZsZXgtMScsXG5cdFx0XHRcdFx0cmVzb3VyY2VJZDogcmVzb3VyY2UuaWQsXG5cdFx0XHRcdFx0cmVzb3VyY2UsXG5cdFx0XHRcdFx0ZGF5LFxuXHRcdFx0XHRcdGRheXM6IGdldEhvdXJzKGRheSksXG5cdFx0XHRcdFx0Z3JpZFR5cGU6ICdob3VyJyBhcyBjb25zdCxcblx0XHRcdFx0fSkpXG5cdFx0XHQpLFxuXHRcdFtyZXNvdXJjZXMsIHZpc2libGVEYXlzLCBnZXRIb3Vyc11cblx0KVxuXG5cdC8vIFVzZXMgYHdlZWtEYXlzYCAoYWxsIDcpIGludGVudGlvbmFsbHksIG5vdCBgdmlzaWJsZURheXNgLiBOb24tY29udGlndW91c1xuXHQvLyB2aXNpYmxlIGRheXMgd291bGQgYnJlYWsgbXVsdGktZGF5IGV2ZW50IHBvc2l0aW9uaW5nLCBzbyBgaGlkZGVuRGF5c2AgaXNcblx0Ly8gbm90IHN1cHBvcnRlZCBpbiBkYWlseSBncmFudWxhcml0eS5cblx0Y29uc3QgZGFpbHlDb2x1bW5zID0gdXNlTWVtbyhcblx0XHQoKSA9PlxuXHRcdFx0cmVzb3VyY2VzLm1hcCgocmVzb3VyY2UpID0+ICh7XG5cdFx0XHRcdGlkOiBrZXlzLmNvbC5yZXNvdXJjZSgnd2VlaycsIHJlc291cmNlLmlkKSxcblx0XHRcdFx0Y2xhc3NOYW1lOiAnbWluLXctMjAgZmxleC0xJyxcblx0XHRcdFx0ZGF5OiB1bmRlZmluZWQsXG5cdFx0XHRcdHJlc291cmNlSWQ6IHJlc291cmNlLmlkLFxuXHRcdFx0XHRyZXNvdXJjZSxcblx0XHRcdFx0ZGF5czogd2Vla0RheXMsXG5cdFx0XHRcdGdyaWRUeXBlOiAnZGF5JyBhcyBjb25zdCxcblx0XHRcdH0pKSxcblx0XHRbcmVzb3VyY2VzLCB3ZWVrRGF5c11cblx0KVxuXG5cdGNvbnN0IGNvbHVtbnMgPSB1c2VNZW1vKCgpID0+IHtcblx0XHRpZiAoaXNIb3VybHkpIHJldHVybiBob3VybHlDb2x1bW5zXG5cdFx0cmV0dXJuIGRhaWx5Q29sdW1uc1xuXHR9LCBbaXNIb3VybHksIGhvdXJseUNvbHVtbnMsIGRhaWx5Q29sdW1uc10pXG5cblx0cmV0dXJuIHsgaG91cnMsIGNvbHVtbnMgfVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB7IFJlc291cmNlV2Vla0hvcml6b250YWwgfSBmcm9tICcuL2hvcml6b250YWwvcmVzb3VyY2Utd2Vlay1ob3Jpem9udGFsJ1xuaW1wb3J0IHsgUmVzb3VyY2VXZWVrVmVydGljYWwgfSBmcm9tICcuL3ZlcnRpY2FsL3Jlc291cmNlLXdlZWstdmVydGljYWwnXG5cbmV4cG9ydCBjb25zdCBSZXNvdXJjZVdlZWtWaWV3OiBSZWFjdC5GQyA9ICgpID0+IHtcblx0Y29uc3QgeyBvcmllbnRhdGlvbiB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXG5cdGlmIChvcmllbnRhdGlvbiA9PT0gJ3ZlcnRpY2FsJykge1xuXHRcdHJldHVybiA8UmVzb3VyY2VXZWVrVmVydGljYWwgLz5cblx0fVxuXG5cdHJldHVybiA8UmVzb3VyY2VXZWVrSG9yaXpvbnRhbCAvPlxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEFuaW1hdGVkU2VjdGlvbiB9IGZyb20gJ0AvY29tcG9uZW50cy9hbmltYXRpb25zL2FuaW1hdGVkLXNlY3Rpb24nXG5pbXBvcnQgeyBDYWxlbmRhckRuZENvbnRleHQgfSBmcm9tICdAL2NvbXBvbmVudHMvZHJhZy1hbmQtZHJvcC9jYWxlbmRhci1kbmQtY29udGV4dCdcbmltcG9ydCB7IEV2ZW50Rm9ybURpYWxvZyB9IGZyb20gJ0AvY29tcG9uZW50cy9ldmVudC1mb3JtL2V2ZW50LWZvcm0tZGlhbG9nJ1xuaW1wb3J0IHsgSGVhZGVyIH0gZnJvbSAnQC9jb21wb25lbnRzL2hlYWRlcidcbmltcG9ydCB7IFJlc291cmNlRGF5VmlldyB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy9kYXktdmlldydcbmltcG9ydCB7IFJlc291cmNlTW9udGhWaWV3IH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL21vbnRoLXZpZXcnXG5pbXBvcnQgeyBSZXNvdXJjZVdlZWtWaWV3IH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL3dlZWstdmlldydcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcblxuZXhwb3J0IGNvbnN0IFJlc291cmNlQ2FsZW5kYXJCb2R5OiBSZWFjdC5GQyA9ICgpID0+IHtcblx0Y29uc3QgeyB2aWV3IH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cblx0Y29uc3Qgdmlld01hcDogUmVjb3JkPHN0cmluZywgUmVhY3QuUmVhY3ROb2RlPiA9IHtcblx0XHRtb250aDogPFJlc291cmNlTW9udGhWaWV3IGtleT1cIm1vbnRoXCIgLz4sXG5cdFx0d2VlazogPFJlc291cmNlV2Vla1ZpZXcga2V5PVwid2Vla1wiIC8+LFxuXHRcdGRheTogPFJlc291cmNlRGF5VmlldyBrZXk9XCJkYXlcIiAvPixcblx0fVxuXG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCB3LWZ1bGwgaC1mdWxsXCJcblx0XHRcdGRhdGEtdGVzdGlkPVwiaWxhbXktcmVzb3VyY2UtY2FsZW5kYXJcIlxuXHRcdD5cblx0XHRcdDxIZWFkZXIgY2xhc3NOYW1lPVwicC0xXCIgLz5cblxuXHRcdFx0ey8qIENhbGVuZGFyIEJvZHkgd2l0aCBBbmltYXRlZFNlY3Rpb24gZm9yIHZpZXcgdHJhbnNpdGlvbnMgKi99XG5cdFx0XHQ8Q2FsZW5kYXJEbmRDb250ZXh0PlxuXHRcdFx0XHQ8QW5pbWF0ZWRTZWN0aW9uXG5cdFx0XHRcdFx0Y2xhc3NOYW1lPVwidy1mdWxsIGgtW2NhbGMoMTAwJS0zLjVyZW0pXSBAY29udGFpbmVyL2NhbGVuZGFyLWJvZHlcIlxuXHRcdFx0XHRcdGRpcmVjdGlvbj1cImhvcml6b250YWxcIlxuXHRcdFx0XHRcdHRyYW5zaXRpb25LZXk9e3ZpZXd9XG5cdFx0XHRcdD5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImJvcmRlciBoLWZ1bGwgdy1mdWxsXCIgZGF0YS10ZXN0aWQ9XCJjYWxlbmRhci1ib2R5XCI+XG5cdFx0XHRcdFx0XHR7dmlld01hcFt2aWV3XX1cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PC9BbmltYXRlZFNlY3Rpb24+XG5cdFx0XHQ8L0NhbGVuZGFyRG5kQ29udGV4dD5cblxuXHRcdFx0ey8qIEV2ZW50IEZvcm0gRGlhbG9nICovfVxuXHRcdFx0PEV2ZW50Rm9ybURpYWxvZyAvPlxuXHRcdDwvZGl2PlxuXHQpXG59XG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHsgUmVzb3VyY2VDYWxlbmRhclByb3ZpZGVyIH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb250ZXh0cy9yZXNvdXJjZS1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUge1xuXHRJbGFteVJlc291cmNlQ2FsZW5kYXJQcm9wRXZlbnQsXG5cdElsYW15UmVzb3VyY2VDYWxlbmRhclByb3BzLFxufSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL3R5cGVzJ1xuaW1wb3J0IHtcblx0REFZX01BWF9FVkVOVFNfREVGQVVMVCxcblx0RVZFTlRfQkFSX0hFSUdIVCxcblx0R0FQX0JFVFdFRU5fRUxFTUVOVFMsXG5cdFdFRUtfREFZU19OVU1CRVJfTUFQLFxufSBmcm9tICdAL2xpYi9jb25zdGFudHMnXG5pbXBvcnQgeyBub3JtYWxpemVFdmVudHMsIHNhZmVEYXRlLCB0b0hpZGRlbkRheXNTZXQgfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IFJlc291cmNlQ2FsZW5kYXJCb2R5IH0gZnJvbSAnLi9yZXNvdXJjZS1jYWxlbmRhci1ib2R5J1xuXG5leHBvcnQgY29uc3QgSWxhbXlSZXNvdXJjZUNhbGVuZGFyOiBSZWFjdC5GQzxJbGFteVJlc291cmNlQ2FsZW5kYXJQcm9wcz4gPSAoe1xuXHRldmVudHMgPSBbXSxcblx0cmVzb3VyY2VzID0gW10sXG5cdGZpcnN0RGF5T2ZXZWVrID0gJ3N1bmRheScsXG5cdGluaXRpYWxWaWV3ID0gJ21vbnRoJyxcblx0aW5pdGlhbERhdGUsXG5cdGRpc2FibGVEcmFnQW5kRHJvcCA9IGZhbHNlLFxuXHRkYXlNYXhFdmVudHMgPSBEQVlfTUFYX0VWRU5UU19ERUZBVUxULFxuXHR0aW1lRm9ybWF0ID0gJzEyLWhvdXInLFxuXHRldmVudFNwYWNpbmcgPSBHQVBfQkVUV0VFTl9FTEVNRU5UUyxcblx0ZXZlbnRIZWlnaHQgPSBFVkVOVF9CQVJfSEVJR0hULFxuXHRoaWRkZW5EYXlzLFxuXHQuLi5wcm9wc1xufSkgPT4ge1xuXHRyZXR1cm4gKFxuXHRcdDxSZXNvdXJjZUNhbGVuZGFyUHJvdmlkZXJcblx0XHRcdGRheU1heEV2ZW50cz17ZGF5TWF4RXZlbnRzfVxuXHRcdFx0ZGlzYWJsZURyYWdBbmREcm9wPXtkaXNhYmxlRHJhZ0FuZERyb3B9XG5cdFx0XHRldmVudEhlaWdodD17ZXZlbnRIZWlnaHR9XG5cdFx0XHRldmVudFNwYWNpbmc9e2V2ZW50U3BhY2luZ31cblx0XHRcdGV2ZW50cz17bm9ybWFsaXplRXZlbnRzPElsYW15UmVzb3VyY2VDYWxlbmRhclByb3BFdmVudCwgQ2FsZW5kYXJFdmVudD4oXG5cdFx0XHRcdGV2ZW50c1xuXHRcdFx0KX1cblx0XHRcdGZpcnN0RGF5T2ZXZWVrPXtXRUVLX0RBWVNfTlVNQkVSX01BUFtmaXJzdERheU9mV2Vla119XG5cdFx0XHRoaWRkZW5EYXlzPXt0b0hpZGRlbkRheXNTZXQoaGlkZGVuRGF5cyl9XG5cdFx0XHRpbml0aWFsRGF0ZT17c2FmZURhdGUoaW5pdGlhbERhdGUpfVxuXHRcdFx0aW5pdGlhbFZpZXc9e2luaXRpYWxWaWV3fVxuXHRcdFx0cmVzb3VyY2VzPXtyZXNvdXJjZXN9XG5cdFx0XHR0aW1lRm9ybWF0PXt0aW1lRm9ybWF0fVxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdD5cblx0XHRcdDxSZXNvdXJjZUNhbGVuZGFyQm9keSAvPlxuXHRcdDwvUmVzb3VyY2VDYWxlbmRhclByb3ZpZGVyPlxuXHQpXG59XG4iCiAgXSwKICAibWFwcGluZ3MiOiAiQUFFQSxnQkFBUyxlQ0ZULDBCQUNDLGFBRUEsc0JDRkQsZUFBUyxjQUNULGtCQUFTLHdCQ0RULHNCQUNBLDBDQUNBLDhDQUNBLCtDQUNBLDJDQUNBLGdEQUNBLHVDQUNBLHlDQUNBLG9DQUNBLHdDQUNBLDJDQWFBLElBQUksR0FFRSxHQUFnQyxDQUFDLEVBQVMsRUFBWSxJQUFpQixDQUM1RSxJQUFN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QTRCLEVBQzdDLEtBQU0sRUFFTixTQUFVLEVBQ1YsV0FBWSxJQUZQLEVBQUssVUFBVSxFQUFTLEVBQUUsQ0FHaEMsQ0FDQSxHQUNBLEdBRUQsQ0FBQyxFQUFVLEVBQVcsQ0FBVyxDQUFDLEVBRXJDLE9BQ0MsR0FlRSxHQWZGLENBQ0MsVUFBVyxFQUNYLFFBQVMsQ0FBRSxPQUFRLEVBQVcsT0FBUyxNQUFPLEVBQzlDLFFBQVMsQ0FBQyxFQUFVLEdBQUcsQ0FBTyxFQUM5QixjQUFZLGdCQUNaLFNBQVUsRUFBVyxPQUFTLE1BQzlCLG9CQUFxQixFQU50QixTQVFDLEdBTUUsTUFORixDQUFLLFVBQVUsdUJBQWYsU0FNRSxDQUxELEdBQUMsR0FBRCxDQUNDLFVBQVcsRUFDWCxZQUFhLEVBQ2QsRUFDQyxHQUFZLEdBQUMsR0FBRCxDQUErQixRQUFTLEVBQVMsR0FDN0QsRUFDRCw0Q0kxRUcsSUFBTSxHQUE2QixJQUFNLENBQy9DLElBQVEsZUFBZ0IsRUFBd0IsRUFFaEQsR0FBSSxJQUFnQixXQUNuQixPQUFPLEdBQUMsR0FBRCxFQUFzQixFQUc5QixPQUFPLEdBQUMsR0FBRCxFQUF3Qix1RENGekIsSUFBTSxHQUFpQyxJQUFNLENBQ25ELElBQVEsUUFBUyxFQUF3QixFQVF6QyxPQUNDLEdBcUJFLE1BckJGLENBQ0MsVUFBVSw4QkFDVixjQUFZLDBCQUZiLFNBcUJFLENBakJELEdBQUMsR0FBRCxDQUFRLFVBQVUsTUFBTSxFQUd4QixHQVVFLEdBVkYsVUFDQyxHQVFFLEVBUkYsQ0FDQyxVQUFVLHdEQUNWLFVBQVUsYUFDVixjQUFlLEVBSGhCLFNBS0MsR0FFRSxNQUZGLENBQUssVUFBVSx1QkFBdUIsY0FBWSxnQkFBbEQsU0FwQjZDLENBQ2hELE1BQU8sR0FBQyxHQUFELEdBQXVCLE9BQVEsRUFDdEMsS0FBTSxHQUFDLEdBQUQsR0FBc0IsTUFBTyxFQUNuQyxJQUFLLEdBQUMsR0FBRCxHQUFxQixLQUFNLENBQ2pDLEVBaUJjLEdBQ1IsRUFDRCxFQUNELEVBR0YsR0FBQyxHQUFELEVBQWlCLEdBQ2hCLDRDQ3pCRyxJQUFNLEdBQThELEVBQzFFLFNBQVMsQ0FBQyxFQUNWLFlBQVksQ0FBQyxFQUNiLGlCQUFpQixTQUNqQixjQUFjLFFBQ2QsY0FDQSxxQkFBcUIsR0FDckIsZUFBZSxHQUNmLGFBQWEsVUFDYixlQUFlLEdBQ2YsY0FBYyxHQUNkLGdCQUNHLEtBQ0UsQ0FDTCxPQUNDLEdBaUJFLEdBakJGLENBQ0MsYUFBYyxFQUNkLG1CQUFvQixFQUNwQixZQUFhLEVBQ2IsYUFBYyxFQUNkLE9BQVEsR0FDUCxDQUNELEVBQ0EsZUFBZ0IsR0FBcUIsR0FDckMsV0FBWSxHQUFnQixDQUFVLEVBQ3RDLFlBQWEsR0FBUyxDQUFXLEVBQ2pDLFlBQWEsRUFDYixVQUFXLEVBQ1gsV0FBWSxLQUNSLEVBZEwsU0FnQkMsR0FBQyxHQUFELEVBQXNCLEVBQ3JCIiwKICAiZGVidWdJZCI6ICJFMzQwNUVEMTAxMjQwNDdBNjQ3NTZFMjE2NDc1NkUyMSIsCiAgIm5hbWVzIjogW10KfQ==
|