@ilamy/calendar 1.3.3 → 1.5.0

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.js CHANGED
@@ -1,7 +1,7 @@
1
- import{RRule as YX}from"rrule";import{RRule as E2}from"rrule";import W0 from"dayjs";import b2 from"dayjs/plugin/isBetween.js";import I2 from"dayjs/plugin/isSameOrAfter.js";import w2 from"dayjs/plugin/isSameOrBefore.js";import H2 from"dayjs/plugin/localeData.js";import T2 from"dayjs/plugin/minMax.js";import k2 from"dayjs/plugin/timezone.js";import h2 from"dayjs/plugin/utc.js";import g2 from"dayjs/plugin/weekday.js";import C2 from"dayjs/plugin/weekOfYear.js";W0.extend(g2);W0.extend(C2);W0.extend(I2);W0.extend(w2);W0.extend(b2);W0.extend(T2);W0.extend(k2);W0.extend(h2);W0.extend(H2);var F=W0;import{clsx as D2}from"clsx";import{twMerge as y2}from"tailwind-merge";function U(...P){return y2(D2(P))}function PP(P){if(P===void 0)return;if(F.isDayjs(P))return P;let f=F(P);return f.isValid()?f:void 0}var Hf=(P,f)=>{let $={...P};for(let J of f)delete $[J];return $};function kP(P){if(!P||!P.length)return[];return P.map((f)=>{return{...f,start:F.isDayjs(f.start)?f.start:F(f.start),end:F.isDayjs(f.end)?f.end:F(f.end)}})}var hP=(P)=>{return new Date(Date.UTC(P.year(),P.month(),P.date(),P.hour(),P.minute(),P.second(),P.millisecond()))},j2=(P,f)=>{return f.year(P.getUTCFullYear()).month(P.getUTCMonth()).date(P.getUTCDate()).hour(P.getUTCHours()).minute(P.getUTCMinutes()).second(P.getUTCSeconds()).millisecond(P.getUTCMilliseconds())},fP=(P)=>{return Boolean(P.rrule||P.recurrenceId||P.uid)},O0=(P)=>{return P.uid||`${P.id}@ilamy.calendar`},Jf=({event:P,currentEvents:f,startDate:$,endDate:J})=>{if(!P.rrule)return[];try{let X=hP(P.start),z=P.rrule.until?hP(F(P.rrule.until)):void 0,Q={...P.rrule,dtstart:X,until:z},Y=new E2(Q),Z=O0(P),q=f.filter((_)=>_.recurrenceId&&O0(_)===Z),G=P.end.diff(P.start),p=hP($.subtract(G,"millisecond")),O=hP(J);return Y.between(p,O,!0).map((_,N)=>{let L=j2(_,P.start),W=q.find((h)=>PP(h.recurrenceId)?.isSame(L));if(W)return{...P,...W};let V=P.end.diff(P.start),B=L.add(V,"millisecond"),R=`${P.id}_${N}`,S=O0(P);return{...P,id:R,start:L,end:B,uid:S,rrule:void 0}}).filter((_)=>{if(P.exdates&&P.exdates.length>0){let W=_.start.toISOString();if(P.exdates.includes(W))return!1}return _.start.isSameOrBefore(J)&&_.end.isSameOrAfter($)})}catch(X){throw Error(`Invalid RRULE options: ${JSON.stringify(P.rrule)}. Error: ${X instanceof Error?X.message:"Unknown error"}`)}},Tf=({targetEvent:P,updates:f,currentEvents:$,scope:J})=>{let X=[...$],z=O0(P),Q=X.findIndex((Z)=>{return O0(Z)===z&&Z.rrule&&!Z.recurrenceId});if(Q===-1)throw Error("Base recurring event not found");let Y=X[Q];switch(J){case"this":{let Z=P.start.toISOString(),G=[...Y.exdates||[],Z],p={...Y,exdates:G};X[Q]=p;let O=`${P.id}_modified_${Date.now()}`,A={...Hf(P,["width","height","top","left","right"]),...f,id:O,recurrenceId:Z,uid:O0(Y),rrule:void 0};X.push(A);break}case"following":{let q=P.start.subtract(1,"day").endOf("day").toDate(),G={...Y,rrule:{...Y.rrule,until:q}};X[Q]=G;let p=Y.end.diff(Y.start),O=f.start||P.start,A=f.end||O.add(p),K=`${Y.id}_following`,_=`${K}@ilamy.calendar`,N={...Y,...f,rrule:{...Y.rrule,...f.rrule,dtstart:O.toDate()},id:K,uid:_,start:O,end:A,recurrenceId:void 0};X.push(N);break}case"all":{let Z={...Y,...f};X[Q]=Z;break}default:throw Error(`Invalid scope: ${J}. Must be 'this', 'following', or 'all'`)}return X},kf=({targetEvent:P,currentEvents:f,scope:$})=>{let J=[...f],X=O0(P),z=J.findIndex((Y)=>{return O0(Y)===X&&Y.rrule&&!Y.recurrenceId});if(z===-1)throw Error("Base recurring event not found");let Q=J[z];switch($){case"this":{let Y=P.start.toISOString(),q=[...Q.exdates||[],Y],G={...Q,exdates:q};J[z]=G;break}case"following":{let Z=P.start.subtract(1,"day").endOf("day").toDate(),q={...Q,rrule:{...Q.rrule,until:Z}};J[z]=q;break}case"all":{let Y=O0(P);return J.filter((q)=>O0(q)!==Y)}default:throw Error(`Invalid scope: ${$}. Must be 'this', 'following', or 'all'`)}return J};import{AnimatePresence as x2,motion as v2}from"motion/react";import{jsx as hf}from"react/jsx-runtime";var i2={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}})},y=({children:P,transitionKey:f,delay:$=0,className:J,direction:X="vertical",layout:z,layoutId:Q,"data-testid":Y,ref:Z,...q})=>hf(x2,{mode:"wait",children:hf(v2.div,{animate:"visible",className:U("inline-block w-full",J),custom:{delay:$,direction:X},"data-testid":Y,exit:"exit",initial:"hidden",layout:z,layoutId:Q,ref:Z,variants:i2,...q,children:P},f)});y.displayName="AnimatedSection";import{DndContext as J1,MouseSensor as X1,pointerWithin as q1,TouchSensor as Q1,useSensor as nf,useSensors as Y1}from"@dnd-kit/core";import{useRef as tf,useState as _1}from"react";import{Slot as o2}from"@radix-ui/react-slot";import{cva as l2}from"class-variance-authority";import{jsx as c2}from"react/jsx-runtime";var gP=l2("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:f,size:$,asChild:J=!1,...X}){return c2(J?o2:"button",{className:U(gP({variant:f,size:$,className:P})),"data-slot":"button",...X})}import*as Z0 from"@radix-ui/react-dialog";import{XIcon as u2}from"lucide-react";import{jsx as F0,jsxs as Xf}from"react/jsx-runtime";function $P({...P}){return F0(Z0.Root,{"data-slot":"dialog",...P})}function d2({...P}){return F0(Z0.Portal,{"data-slot":"dialog-portal",...P})}function r2({className:P,...f}){return F0(Z0.Overlay,{className:U("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",...f})}function zP({className:P,children:f,...$}){return Xf(d2,{"data-slot":"dialog-portal",children:[F0(r2,{}),Xf(Z0.Content,{className:U("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",...$,children:[f,Xf(Z0.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:[F0(u2,{}),F0("span",{className:"sr-only",children:"Close"})]})]})]})}function ZP({className:P,...f}){return F0("div",{className:U("flex flex-col gap-2 text-center sm:text-left",P),"data-slot":"dialog-header",...f})}function CP({className:P,...f}){return F0("div",{className:U("flex flex-col-reverse gap-2 sm:flex-row sm:justify-end",P),"data-slot":"dialog-footer",...f})}function JP({className:P,...f}){return F0(Z0.Title,{className:U("text-lg leading-none font-semibold",P),"data-slot":"dialog-title",...f})}function DP({className:P,...f}){return F0(Z0.Description,{className:U("text-muted-foreground text-sm",P),"data-slot":"dialog-description",...f})}import{useContext as uf}from"react";import{createContext as a2,useContext as gf}from"react";var XP=a2(void 0),U0=()=>{let P=gf(XP);if(P===void 0)throw Error("useCalendarContext must be used within a CalendarProvider");return P},n2=()=>{let P=gf(XP);if(P===void 0)throw Error("useIlamyCalendarContext must be used within a CalendarProvider");return{currentDate:P.currentDate,view:P.view,events:P.events,isEventFormOpen:P.isEventFormOpen,selectedEvent:P.selectedEvent,selectedDate:P.selectedDate,firstDayOfWeek:P.firstDayOfWeek,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,businessHours:P.businessHours}};import{createContext as t2,useContext as Cf}from"react";var qP=t2(void 0),o=()=>{let P=Cf(qP);if(P===void 0)throw Error("useResourceCalendarContext must be used within a ResourceCalendarProvider");return P},s2=()=>{let P=Cf(qP);if(P===void 0)throw Error("useIlamyResourceCalendarContext must be used within a ResourceCalendarProvider");return{currentDate:P.currentDate,view:P.view,events:P.events,resources:P.resources,isEventFormOpen:P.isEventFormOpen,selectedEvent:P.selectedEvent,selectedDate:P.selectedDate,firstDayOfWeek:P.firstDayOfWeek,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{useCallback as Y0,useMemo as e2,useState as of}from"react";import{useCallback as P0,useEffect as Qf,useMemo as xf,useState as a0}from"react";var qf={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",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",sunday:"Sunday",monday:"Monday",tuesday:"Tuesday",wednesday:"Wednesday",thursday:"Thursday",friday:"Friday",saturday:"Saturday",sun:"Sun",mon:"Mon",tue:"Tue",wed:"Wed",thu:"Thu",fri:"Fri",sat:"Sat",january:"January",february:"February",march:"March",april:"April",may:"May",june:"June",july:"July",august:"August",september:"September",october:"October",november:"November",december:"December"};function J0(P,f){let $=P.startOf("week").day(f),J=P.isBefore($)?$.subtract(1,"week"):$;return Array.from({length:7},(X,z)=>J.add(z,"day"))}function yP(P,f){let $=J0(P.startOf("month"),f);return Array.from({length:6},(J,X)=>{let z=$[0].add(X,"week");return J0(z,f)})}function Df(P){let f=P.daysInMonth();return Array.from({length:f},($,J)=>P.startOf("month").add(J,"day"))}function yf({referenceDate:P=F(),length:f=24}={}){return Array.from({length:f},($,J)=>P.hour(J).minute(0).second(0).millisecond(0))}var H0=1,Ef=24,G0=24,QP=4,jf="bg-secondary text-muted-foreground pointer-events-none",YP={sunday:0,monday:1,tuesday:2,wednesday:3,thursday:4,friday:5,saturday:6};var vf={day:"day",week:"week",month:"month",year:"year"},EP=(P)=>{let{events:f=[],firstDayOfWeek:$=0,initialView:J="month",initialDate:X=F(),businessHours:z,onEventAdd:Q,onEventUpdate:Y,onEventDelete:Z,onDateChange:q,onViewChange:G,locale:p,timezone:O,translations:A,translator:K}=P,[_,N]=a0(X),[L,W]=a0(J),[V,B]=a0(f),[R,S]=a0(!1),[k,h]=a0(null),[C,D]=a0(null),[l,u]=a0(p||"en"),d=xf(()=>{if(K)return K;if(A)return(M)=>A[M]||M;return(M)=>qf[M]||M},[A,K]),c=P0((M,H)=>{let j=[];for(let r of V)if(r.rrule)j.push(...Jf({event:r,currentEvents:V,startDate:M,endDate:H}));else{let r0=r.start.isSameOrAfter(M)&&r.start.isSameOrBefore(H),Zf=r.end.isSameOrAfter(M)&&r.end.isSameOrBefore(H),T=r.start.isBefore(M)&&r.end.isAfter(H);if(r0||Zf||T)j.push(r)}return j},[V]),w=P0(()=>{if(L==="day")return{start:_.startOf("day"),end:_.endOf("day")};if(L==="year")return{start:_.startOf("year"),end:_.endOf("year")};if(L==="week"){let H=J0(_,$);return{start:H[0].startOf("day"),end:H[6].endOf("day")}}let M=yP(_,$);return{start:M[0][0].startOf("day"),end:M[5][6].endOf("day")}},[_,L,$]),b=xf(()=>{let{start:M,end:H}=w();return c(M,H)},[c,w]);Qf(()=>{if(f)B(f)},[f]),Qf(()=>{if(p)u(p),F.locale(p),N((M)=>M.locale(p))},[p]),Qf(()=>{if(O)F.tz.setDefault(O)},[O]);let p0=P0((M)=>{N(M),q?.(M)},[q]),Q0=P0((M)=>{N((H)=>{let j=M===1?H.add(1,vf[L]):H.subtract(1,vf[L]);return q?.(j),j})},[L,q]),z0=P0(()=>Q0(1),[Q0]),N0=P0(()=>Q0(-1),[Q0]),t=P0(()=>{let M=F();N(M),q?.(M)},[q]),i=P0((M)=>{B((H)=>[...H,M]),Q?.(M)},[Q]),t0=P0((M,H)=>{B((j)=>j.map((r)=>{if(r.id!==M)return r;let r0={...r,...H};return Y?.(r0),r0}))},[Y]),s0=P0((M,H,j)=>{Y?.({...M,...H}),B(Tf({targetEvent:M,updates:H,currentEvents:V,scope:j.scope}))},[V,Y]),e0=P0((M,H)=>{Z?.(M),B(kf({targetEvent:M,currentEvents:V,scope:H.scope}))},[V,Z]),S0=P0((M)=>{B((H)=>{let j=H.find((r)=>r.id===M);if(j)Z?.(j);return H.filter((r)=>r.id!==M)})},[Z]),c0=P0((M)=>{if(M?.start)D(M.start);let H=M?.start??_;h({title:d("newEvent"),start:H,end:M?.end??H.add(1,"hour"),resourceId:M?.resourceId,description:"",allDay:M?.allDay??!1}),S(!0)},[_,d]),u0=P0(()=>{D(null),h(null),S(!1)},[]),d0=P0((M)=>{W(M),G?.(M)},[G]),m=P0((M)=>{let H=M.uid;return V.find((j)=>(j.uid||`${j.id}@ilamy.calendar`)===H&&j.rrule)||null},[V]);return{currentDate:_,view:L,events:b,rawEvents:V,isEventFormOpen:R,selectedEvent:k,selectedDate:C,firstDayOfWeek:$,dayMaxEvents:QP,currentLocale:l,businessHours:z,setCurrentDate:N,selectDate:p0,setView:d0,nextPeriod:z0,prevPeriod:N0,today:t,addEvent:i,updateEvent:t0,updateRecurringEvent:s0,deleteEvent:S0,deleteRecurringEvent:e0,openEventForm:c0,closeEventForm:u0,setSelectedEvent:h,setIsEventFormOpen:S,setSelectedDate:D,getEventsForDateRange:c,findParentRecurringEvent:m,t:d}};import{jsx as P1}from"react/jsx-runtime";var lf=(P)=>{if(P.resourceIds)return P.resourceIds;if(P.resourceId!==void 0)return[P.resourceId];return[]},cf=({children:P,events:f=[],resources:$=[],firstDayOfWeek:J=0,initialView:X="month",initialDate:z,renderEvent:Q,onEventClick:Y,onCellClick:Z,onViewChange:q,onEventAdd:G,onEventUpdate:p,onEventDelete:O,onDateChange:A,locale:K,timezone:_,disableCellClick:N,disableEventClick:L,disableDragAndDrop:W,dayMaxEvents:V,eventSpacing:B,stickyViewHeader:R=!0,viewHeaderClassName:S="",headerComponent:k,headerClassName:h,translations:C,translator:D,renderResource:l,renderEventForm:u,businessHours:d,timeFormat:c="12-hour",classesOverride:w,orientation:b="horizontal",renderCurrentTimeIndicator:p0,hideNonBusinessHours:Q0=!1})=>{let[z0]=of($),[N0,t]=of(new Set($.map((T)=>T.id))),i=EP({events:f,firstDayOfWeek:J,initialView:X,initialDate:z,businessHours:d,onEventAdd:G,onEventUpdate:p,onEventDelete:O,onDateChange:A,onViewChange:q,locale:K,timezone:_,translations:C,translator:D}),t0=Y0((T)=>{t((e)=>{let w0=new Set(e);if(w0.has(T))w0.delete(T);else w0.add(T);return w0})},[]),s0=Y0((T)=>{t((e)=>new Set(e).add(T))},[]),e0=Y0((T)=>{t((e)=>{let w0=new Set(e);return w0.delete(T),w0})},[]),S0=Y0(()=>{t(new Set(z0.map((T)=>T.id)))},[z0]),c0=Y0(()=>{t(new Set)},[]),u0=Y0((T)=>{return i.events.filter((e)=>{if(e.resourceIds)return e.resourceIds.includes(T);return e.resourceId===T})},[i.events]),d0=Y0((T)=>{return i.events.filter((e)=>{return lf(e).some((m2)=>T.includes(m2))})},[i.events]),m=Y0((T)=>{return z0.find((e)=>e.id===T)},[z0]),M=Y0(()=>{return z0.filter((T)=>N0.has(T.id))},[z0,N0]),H=Y0((T)=>{return Boolean(T.resourceIds&&T.resourceIds.length>1)},[]),j=Y0((T)=>{i.setSelectedEvent(T),i.setIsEventFormOpen(!0)},[i]),r=Y0((T)=>{if(L)return;if(Y)Y(T);else j(T)},[L,Y,j]),r0=Y0((T)=>{if(N)return;if(Z)Z(T);else{let e={title:i.t("newEvent"),start:T.start,end:T.end,description:"",allDay:!1};if(T.resourceId!==void 0)e.resourceId=T.resourceId;i.setSelectedEvent(e),i.setSelectedDate(T.start),i.setIsEventFormOpen(!0)}},[Z,N,i]),Zf=e2(()=>({...i,view:i.view,setView:i.setView,events:i.events,rawEvents:i.rawEvents,resources:z0,visibleResources:N0,toggleResourceVisibility:t0,showResource:s0,hideResource:e0,showAllResources:S0,hideAllResources:c0,getEventsForResource:u0,getEventsForResources:d0,getResourceById:m,getVisibleResources:M,isEventCrossResource:H,getEventResourceIds:lf,onEventClick:r,onCellClick:r0,headerComponent:k,headerClassName:h,renderEvent:Q,renderResource:l,renderEventForm:u,locale:K,timezone:_,disableCellClick:N,disableEventClick:L,disableDragAndDrop:W,dayMaxEvents:V,eventSpacing:B,stickyViewHeader:R,viewHeaderClassName:S,businessHours:d,timeFormat:c,classesOverride:w,orientation:b,renderCurrentTimeIndicator:p0,hideNonBusinessHours:Q0}),[i,z0,N0,t0,s0,e0,S0,c0,u0,d0,m,M,H,r,r0,Q,l,u,K,_,N,L,W,V,B,R,S,k,h,d,c,w,b,p0,Q0]);return P1(qP.Provider,{value:Zf,children:P})};function I(P){let f=uf(qP),$=uf(XP);if(f)return P(f);if($)return P($);throw Error("useSmartCalendarContext must be used within a CalendarProvider or ResourceCalendarProvider")}import{jsx as _0,jsxs as n0}from"react/jsx-runtime";function OP({isOpen:P,onClose:f,onConfirm:$,operationType:J,eventTitle:X}){let{t:z}=I((Z)=>({t:Z.t})),Q=(Z)=>{$(Z),f()},Y=J==="edit";return _0($P,{onOpenChange:f,open:P,children:n0(zP,{className:"max-w-md",children:[n0(ZP,{children:[_0(JP,{children:Y?z("editRecurringEvent"):z("deleteRecurringEvent")}),n0(DP,{children:['"',X,'"'," ",Y?z("editRecurringEventQuestion"):z("deleteRecurringEventQuestion")]})]}),n0("div",{className:"space-y-3",children:[_0(g,{className:"w-full justify-start h-auto p-4",onClick:()=>Q("this"),variant:"outline",children:n0("div",{className:"text-left",children:[_0("div",{className:"font-medium",children:z("thisEvent")}),_0("div",{className:"text-sm text-muted-foreground",children:Y?z("onlyChangeThis"):z("onlyDeleteThis")})]})}),_0(g,{className:"w-full justify-start h-auto p-4",onClick:()=>Q("following"),variant:"outline",children:n0("div",{className:"text-left",children:[_0("div",{className:"font-medium",children:z("thisAndFollowingEvents")}),_0("div",{className:"text-sm text-muted-foreground",children:Y?z("changeThisAndFuture"):z("deleteThisAndFuture")})]})}),_0(g,{className:"w-full justify-start h-auto p-4",onClick:()=>Q("all"),variant:"outline",children:n0("div",{className:"text-left",children:[_0("div",{className:"font-medium",children:z("allEvents")}),_0("div",{className:"text-sm text-muted-foreground",children:Y?z("changeEntireSeries"):z("deleteEntireSeries")})]})})]}),_0(CP,{children:_0(g,{onClick:f,variant:"outline",children:z("cancel")})})]})})}var df=(P,f)=>{let{active:$,over:J}=P;if(!$||!J||!f)return null;let X=J.data.current?.type==="time-cell",{resourceId:z,allDay:Q}=J.data.current||{},Y;if(X){let{date:p,hour:O=0,minute:A=0}=J.data.current;Y=F(p).hour(O).minute(A)}else{let{date:p}=J.data.current;Y=F(p)}let Z=f.end.diff(f.start,"second"),q=Y.add(Z,"second");if(q.isSame(q.startOf("day")))q=q.subtract(1,"day").endOf("day");let G={start:Y,end:q,resourceId:z,allDay:X?!1:Q??f.allDay};return{activeEvent:f,updates:G}};import{DragOverlay as f1}from"@dnd-kit/core";import{snapCenterToCursor as $1}from"@dnd-kit/modifiers";import{useImperativeHandle as z1,useState as Z1}from"react";import{jsx as rf}from"react/jsx-runtime";var af=({ref:P})=>{let[f,$]=Z1(null);return z1(P,()=>({setActiveEvent:$})),rf(f1,{modifiers:[$1],children:f&&rf("div",{className:U("cursor-grab truncate rounded bg-amber-200 p-2 text-[10px] shadow-lg sm:text-xs w-20",f.backgroundColor||"bg-blue-500",f.color||"text-white"),children:f?.title})})};import{jsx as sf,jsxs as ef,Fragment as K1}from"react/jsx-runtime";function jP({children:P}){let f=tf(null),$=tf(null),{updateEvent:J,updateRecurringEvent:X,disableDragAndDrop:z}=I((L)=>({updateEvent:L.updateEvent,updateRecurringEvent:L.updateRecurringEvent,disableDragAndDrop:L.disableDragAndDrop})),[Q,Y]=_1({isOpen:!1,event:null,updates:null}),Z=nf(X1,{activationConstraint:{distance:2}}),q=nf(Q1,{activationConstraint:{delay:100,tolerance:5}}),G=Y1(Z,q),p=(L,W)=>{if(!L||!L.id)return;if(!W||Object.keys(W).length===0)return;if(fP(L))Y({isOpen:!0,event:L,updates:W});else J(L.id,W)},O=(L)=>{if(!Q.event||!Q.updates){Y({isOpen:!1,event:null,updates:null});return}try{X(Q.event,Q.updates,{scope:L,eventDate:Q.event.start})}catch{}finally{Y({isOpen:!1,event:null,updates:null})}},A=()=>{Y({isOpen:!1,event:null,updates:null})},K=(L)=>{let{active:W}=L;if(W.data.current?.type==="calendar-event")$.current?.setActiveEvent(W.data.current.event),f.current=W.data.current.event},_=(L)=>{let W=df(L,f.current);if(W){let{activeEvent:V,updates:B}=W;p(V,B)}f.current=null,$.current?.setActiveEvent(null)},N=(L)=>{f.current=null};if(z)return P;return ef(K1,{children:[ef(J1,{collisionDetection:q1,onDragCancel:N,onDragEnd:_,onDragStart:K,sensors:G,children:[P,sf(af,{ref:$})]}),sf(OP,{eventTitle:Q.event?.title||"",isOpen:Q.isOpen,onClose:A,onConfirm:O,operationType:"edit"})]})}import{useEffect as x1,useMemo as v1,useState as y0}from"react";import*as xP from"@radix-ui/react-checkbox";import{CheckIcon as p1}from"lucide-react";import{jsx as Yf}from"react/jsx-runtime";function T0({className:P,...f}){return Yf(xP.Root,{className:U("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",...f,children:Yf(xP.Indicator,{className:"flex items-center justify-center text-current transition-none","data-slot":"checkbox-indicator",children:Yf(p1,{className:"size-3.5"})})})}import{PopoverClose as W1}from"@radix-ui/react-popover";import{Calendar as O1}from"lucide-react";import{useEffect as F1,useRef as V1,useState as B1}from"react";import{ChevronDownIcon as U1,ChevronLeftIcon as L1,ChevronRightIcon as G1}from"lucide-react";import*as vP from"react";import{DayPicker as A1,getDefaultClassNames as P5}from"react-day-picker";import{jsx as k0}from"react/jsx-runtime";function f5({className:P,classNames:f,showOutsideDays:$=!0,captionLayout:J="label",buttonVariant:X="ghost",formatters:z,components:Q,...Y}){let Z=P5();return k0(A1,{captionLayout:J,className:U("bg-background group/calendar p-3 [--cell-size:--spacing(8)] [[data-slot=card-content]_&]:bg-transparent [[data-slot=popover-content]_&]:bg-transparent",String.raw`rtl:**:[.rdp-button\_next>svg]:rotate-180`,String.raw`rtl:**:[.rdp-button\_previous>svg]:rotate-180`,P),classNames:{root:U("w-fit",Z.root),months:U("flex gap-4 flex-col md:flex-row relative",Z.months),month:U("flex flex-col w-full gap-4",Z.month),nav:U("flex items-center gap-1 w-full absolute top-0 inset-x-0 justify-between",Z.nav),button_previous:U(gP({variant:X}),"size-(--cell-size) aria-disabled:opacity-50 p-0 select-none",Z.button_previous),button_next:U(gP({variant:X}),"size-(--cell-size) aria-disabled:opacity-50 p-0 select-none",Z.button_next),month_caption:U("flex items-center justify-center h-(--cell-size) w-full px-(--cell-size)",Z.month_caption),dropdowns:U("w-full flex items-center text-sm font-medium justify-center h-(--cell-size) gap-1.5",Z.dropdowns),dropdown_root:U("relative has-focus:border-ring border border-input shadow-xs has-focus:ring-ring/50 has-focus:ring-[3px] rounded-md",Z.dropdown_root),dropdown:U("absolute bg-popover inset-0 opacity-0",Z.dropdown),caption_label:U("select-none font-medium",J==="label"?"text-sm":"rounded-md pl-2 pr-1 flex items-center gap-1 text-sm h-8 [&>svg]:text-muted-foreground [&>svg]:size-3.5",Z.caption_label),table:"w-full border-collapse",weekdays:U("flex",Z.weekdays),weekday:U("text-muted-foreground rounded-md flex-1 font-normal text-[0.8rem] select-none",Z.weekday),week:U("flex w-full mt-2",Z.week),week_number_header:U("select-none w-(--cell-size)",Z.week_number_header),week_number:U("text-[0.8rem] select-none text-muted-foreground",Z.week_number),day:U("relative w-full h-full p-0 text-center [&:last-child[data-selected=true]_button]:rounded-r-md group/day aspect-square select-none",Y.showWeekNumber?"[&:nth-child(2)[data-selected=true]_button]:rounded-l-md":"[&:first-child[data-selected=true]_button]:rounded-l-md",Z.day),range_start:U("rounded-l-md bg-accent",Z.range_start),range_middle:U("rounded-none",Z.range_middle),range_end:U("rounded-r-md bg-accent",Z.range_end),today:U("bg-accent text-accent-foreground rounded-md data-[selected=true]:rounded-none",Z.today),outside:U("text-muted-foreground aria-selected:text-muted-foreground",Z.outside),disabled:U("text-muted-foreground opacity-50",Z.disabled),hidden:U("invisible",Z.hidden),...f},components:{Root:({className:q,rootRef:G,...p})=>{return k0("div",{className:U(q),"data-slot":"calendar",ref:G,...p})},Chevron:({className:q,orientation:G,...p})=>{if(G==="left")return k0(L1,{className:U("size-4",q),...p});if(G==="right")return k0(G1,{className:U("size-4",q),...p});return k0(U1,{className:U("size-4",q),...p})},DayButton:N1,WeekNumber:({children:q,...G})=>{return k0("td",{...G,children:k0("div",{className:"flex size-(--cell-size) items-center justify-center text-center",children:q})})},...Q},formatters:{formatMonthDropdown:(q)=>q.toLocaleString("default",{month:"short"}),...z},showOutsideDays:$,...Y})}function N1({className:P,day:f,modifiers:$,...J}){let X=P5(),z=vP.useRef(null);return vP.useEffect(()=>{if($.focused)z.current?.focus()},[$.focused]),k0(g,{className:U("data-[selected-single=true]:bg-primary data-[selected-single=true]:text-primary-foreground data-[range-middle=true]:bg-accent data-[range-middle=true]:text-accent-foreground data-[range-start=true]:bg-primary data-[range-start=true]:text-primary-foreground data-[range-end=true]:bg-primary data-[range-end=true]:text-primary-foreground group-data-[focused=true]/day:border-ring group-data-[focused=true]/day:ring-ring/50 dark:hover:text-accent-foreground flex aspect-square size-auto w-full min-w-(--cell-size) flex-col gap-1 leading-none font-normal group-data-[focused=true]/day:relative group-data-[focused=true]/day:z-10 group-data-[focused=true]/day:ring-[3px] data-[range-end=true]:rounded-md data-[range-end=true]:rounded-r-md data-[range-middle=true]:rounded-none data-[range-start=true]:rounded-md data-[range-start=true]:rounded-l-md [&>span]:text-xs [&>span]:opacity-70",X.day,P),"data-day":f.date.toLocaleDateString(),"data-range-end":$.range_end,"data-range-middle":$.range_middle,"data-range-start":$.range_start,"data-selected-single":$.selected&&!$.range_start&&!$.range_end&&!$.range_middle,ref:z,size:"icon",variant:"ghost",...J})}import*as R0 from"@radix-ui/react-popover";import{jsx as iP}from"react/jsx-runtime";function h0({...P}){return iP(R0.Root,{"data-slot":"popover",...P})}function g0({...P}){return iP(R0.Trigger,{"data-slot":"popover-trigger",...P})}function C0({className:P,align:f="center",sideOffset:$=4,...J}){return iP(R0.Portal,{children:iP(R0.Content,{align:f,className:U("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:$,...J})})}import{jsx as _P,jsxs as _f}from"react/jsx-runtime";function FP({date:P,closeOnSelect:f,onChange:$,label:J="Pick a date",className:X,disabled:z}){let Q=V1(null),[Y,Z]=B1(P);F1(()=>{Z(P)},[P]);let q=(G)=>{if(Z(G),f)Q.current?.click();$?.(G)};return _P("div",{className:X,children:_f(h0,{children:[_P(g0,{asChild:!0,children:_f(g,{className:U("data-[empty=true]:text-muted-foreground w-full justify-start text-left font-normal"),"data-empty":!P,variant:"outline",children:[_P(O1,{}),Y?F(Y).format("MMM D, YYYY"):_P("span",{children:J})]})}),_f(C0,{align:"start",className:"w-auto p-0",children:[_P(W1,{ref:Q}),_P(f5,{captionLayout:"dropdown",defaultMonth:Y,disabled:z,mode:"single",onSelect:q,selected:Y})]})]})})}import{jsx as M1}from"react/jsx-runtime";function m0({className:P,type:f,...$}){return M1("input",{className:U("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:f,...$})}import*as $5 from"@radix-ui/react-label";import{jsx as S1}from"react/jsx-runtime";function a({className:P,...f}){return S1($5.Root,{className:U("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",...f})}import*as V0 from"@radix-ui/react-scroll-area";import{jsx as VP,jsxs as R1}from"react/jsx-runtime";function B0({className:P,children:f,viewPortProps:$,...J}){return R1(V0.Root,{className:U("relative",P),"data-slot":"scroll-area",...J,children:[VP(V0.Viewport,{...$,className:U("focus-visible:ring-ring/50 size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:outline-1",$?.className),"data-slot":"scroll-area-viewport",children:f}),VP(b0,{}),VP(V0.Corner,{})]})}function b0({className:P,orientation:f="vertical",...$}){return VP(V0.ScrollAreaScrollbar,{className:U("flex touch-none p-px transition-colors select-none",f==="vertical"&&"h-full w-2.5 border-l border-l-transparent",f==="horizontal"&&"h-2.5 flex-col border-t border-t-transparent",P),"data-slot":"scroll-area-scrollbar",orientation:f,...$,children:VP(V0.ScrollAreaThumb,{className:"bg-border relative flex-1 rounded-full","data-slot":"scroll-area-thumb"})})}import{Clock as b1}from"lucide-react";import{useEffect as I1,useRef as Z5,useState as Kf}from"react";import{useMemo as m1}from"react";function z5({timeFormat:P="12-hour",minTime:f="00:00",maxTime:$="23:45"}){return{timeOptions:m1(()=>{let z=[],[Q,Y]=f.split(":").map(Number),[Z,q]=$.split(":").map(Number),G=Q*60+Y,p=Z*60+q;for(let O=G;O<=p;O+=15){let A=Math.floor(O/60),K=O%60,_=`${A.toString().padStart(2,"0")}:${K.toString().padStart(2,"0")}`;z.push(_)}return z},[f,$]),formatTime:(z)=>{let[Q,Y]=z.split(":").map(Number),Z=Q>=12?"PM":"AM",q=Q===0?12:Q>12?Q-12:Q;if(P==="24-hour")return`${Q.toString().padStart(2,"0")}:${Y.toString().padStart(2,"0")}`;return`${q}:${Y.toString().padStart(2,"0")} ${Z}`}}}import{jsx as D0,jsxs as pf}from"react/jsx-runtime";var w1=(P)=>{P.stopPropagation()};function Uf({value:P,onChange:f,minTime:$="00:00",maxTime:J="23:45",timeFormat:X="12-hour",placeholder:z="Select time...",className:Q,disabled:Y=!1,name:Z}){let[q,G]=Kf(!1),[p,O]=Kf(""),A=Z5(null),K=Z5(null),[_,N]=Kf(0),{timeOptions:L,formatTime:W}=z5({timeFormat:X,minTime:$,maxTime:J}),V=L.filter((S)=>{return W(S).toLowerCase().includes(p.toLowerCase())}),B=(S)=>{f(S),G(!1),O("")};I1(()=>{if(q){if(K.current)N(K.current.offsetWidth);setTimeout(()=>{A.current?.focus()},0)}},[q]);let R=P?W(P):z;return pf(h0,{onOpenChange:G,open:q,children:[D0(g0,{asChild:!0,children:pf(g,{"aria-controls":"time-picker-listbox","aria-expanded":q,className:U("w-full justify-start",Q),"data-testid":`time-picker-${Z}`,disabled:Y,ref:K,role:"combobox",variant:"outline",children:[D0(b1,{className:"mr-2 h-4 w-4"}),R]})}),pf(C0,{align:"start",className:"p-0",style:{width:_},children:[D0("div",{className:"p-2 border-b",children:D0(m0,{className:"h-8",onChange:(S)=>O(S.target.value),placeholder:"Search time...",ref:A,value:p})}),D0(B0,{className:"h-[200px]",onWheel:w1,children:D0("div",{className:"p-1",children:V.length===0?D0("div",{className:"py-6 text-center text-sm text-muted-foreground",children:"N/A"}):V.map((S)=>{let k=W(S);return D0("button",{className:U("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:()=>B(S),type:"button",children:k},S)})})})]})]})}var Lf=(P,f)=>{if(!f)return!0;let $=!1;return KP(f,{date:P,onMatch:()=>{$=!0}}),$},J5=({date:P,hour:f,minute:$=0,businessHours:J})=>{if(!J)return!0;if(f===void 0)return Lf(P,J);let X=!1,z=f*60+$;return KP(J,{date:P,onMatch:(Q)=>{let Y=Q.startTime??9,Z=Q.endTime??17,q=Y*60,G=Z*60;if(z>=q&&z<G)X=!0}}),X},KP=(P,f)=>{let{date:$,onMatch:J}=f;if(!P)return;let X=Array.isArray(P)?P:[P];for(let z of X)if($&&z.daysOfWeek){let Q=$.day();if(z.daysOfWeek.some((Y)=>YP[Y]===Q))J(z)}else J(z)},oP=(P)=>{let{allDates:f,businessHours:$,resourceBusinessHours:J=[],hideNonBusinessHours:X}=P,z=24,Q=0,Y=!1,Z=(q)=>{Y=!0,z=Math.min(z,q.startTime??9),Q=Math.max(Q,q.endTime??17)};for(let q of f){KP($,{date:q,onMatch:Z});for(let G of J)KP(G,{date:q,onMatch:Z})}if(!Y&&X){KP($,{onMatch:Z});for(let q of J)KP(q,{onMatch:Z});if(!Y)z=9,Q=17,Y=!0}return{minStart:z,maxEnd:Q,hasBusinessHours:Y}};var Gf=(P,f,$)=>{let[J,X]=f.split(":").map(Number),z=F(P).hour(J).minute(X);return $?z.hour(0).minute(0):z},X5=(P,f,$)=>{let[J,X]=f.split(":").map(Number),z=F(P).hour(J).minute(X);return $?z.hour(23).minute(59):z},Af=(P,f)=>{if(!f)return{min:"00:00",max:"23:59"};let $=F(P),{minStart:J,maxEnd:X,hasBusinessHours:z}=oP({allDates:[$],businessHours:f,hideNonBusinessHours:!1});if(!z)return{min:"00:00",max:"23:59"};return{min:`${J.toString().padStart(2,"0")}:00`,max:`${(X-1).toString().padStart(2,"0")}:45`}};import{useEffect as g1,useMemo as C1,useState as N5}from"react";import{RRule as q0}from"rrule";import{jsx as lP}from"react/jsx-runtime";function q5({className:P,...f}){return lP("div",{className:U("text-card-foreground flex flex-col gap-6 rounded-xl border shadow-sm",P),"data-slot":"card",...f})}function Q5({className:P,...f}){return lP("div",{className:U("@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",...f})}function Y5({className:P,...f}){return lP("div",{className:U("leading-none font-semibold",P),"data-slot":"card-title",...f})}function _5({className:P,...f}){return lP("div",{className:U("p-4 pt-0",P),"data-slot":"card-content",...f})}import*as E from"@radix-ui/react-select";import{CheckIcon as H1,ChevronDownIcon as K5,ChevronUpIcon as T1}from"lucide-react";import{jsx as f0,jsxs as Nf}from"react/jsx-runtime";function p5({...P}){return f0(E.Root,{"data-slot":"select",...P})}function U5({...P}){return f0(E.Value,{"data-slot":"select-value",...P})}function L5({className:P,size:f="default",children:$,...J}){return Nf(E.Trigger,{className:U("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":f,"data-slot":"select-trigger",...J,children:[$,f0(E.Icon,{asChild:!0,children:f0(K5,{className:"size-4 opacity-50"})})]})}function G5({className:P,children:f,position:$="popper",align:J="center",...X}){return f0(E.Portal,{children:Nf(E.Content,{align:J,className:U("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-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border shadow-md",$==="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:$,...X,children:[f0(k1,{}),f0(E.Viewport,{className:U("p-1",$==="popper"&&"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1"),children:f}),f0(h1,{})]})})}function A5({className:P,children:f,...$}){return Nf(E.Item,{className:U("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",...$,children:[f0("span",{className:"absolute right-2 flex size-3.5 items-center justify-center",children:f0(E.ItemIndicator,{children:f0(H1,{className:"size-4"})})}),f0(E.ItemText,{children:f})]})}function k1({className:P,...f}){return f0(E.ScrollUpButton,{className:U("flex cursor-default items-center justify-center py-1",P),"data-slot":"select-scroll-up-button",...f,children:f0(T1,{className:"size-4"})})}function h1({className:P,...f}){return f0(E.ScrollDownButton,{className:U("flex cursor-default items-center justify-center py-1",P),"data-slot":"select-scroll-down-button",...f,children:f0(K5,{className:"size-4"})})}import{jsx as x,jsxs as X0}from"react/jsx-runtime";var Wf={DAILY:q0.DAILY,WEEKLY:q0.WEEKLY,MONTHLY:q0.MONTHLY,YEARLY:q0.YEARLY},D1=Object.fromEntries(Object.entries(Wf).map(([P,f])=>[f,P])),W5=[q0.SU,q0.MO,q0.TU,q0.WE,q0.TH,q0.FR,q0.SA],y1=["sun","mon","tue","wed","thu","fri","sat"],O5=(P)=>Math.max(1,Number.parseInt(P,10)||1),E1=(P,f)=>{if(!P)return f("customRecurrence");try{let $=new q0(P).toText();return $&&!$.toLowerCase().includes("error")?$.charAt(0).toUpperCase()+$.slice(1):f("customRecurrence")}catch{return f("customRecurrence")}},F5=({value:P,onChange:f})=>{let{t:$}=I((_)=>({t:_.t})),[J,X]=N5(!!P),[z,Q]=N5(()=>P||null),Y=C1(()=>y1.map((_,N)=>({value:W5[N],label:$(_)})),[$]);g1(()=>{if(X(!!P),P)Q(P)},[P]);let Z=(_)=>{if(!z)return;let N={...z,..._};Q(N),f(J?N:null)},q=(_)=>{if(X(_),!_){f(null);return}if(z){f(z);return}let N={freq:q0.DAILY,interval:1};Q(N),f(N)},G=(_)=>{let N=z?.byweekday||[],L=W5[_],W=N.includes(L)?N.filter((V)=>V!==L):[...N,L];Z({byweekday:W.length?W:void 0})},p=(_)=>{let N={count:void 0,until:void 0};if(_==="count")N.count=z?.count||1;if(_==="until")N.until=z?.until||F().add(1,"month").endOf("day").toDate();Z(N)},O=z?.until?"until":z?.count?"count":"never",A=D1[z?.freq??q0.DAILY]||"DAILY",K=Array.isArray(z?.byweekday)?z.byweekday:z?.byweekday?[z.byweekday]:[];return X0(q5,{"data-testid":"recurrence-editor",children:[X0(Q5,{className:"pb-3",children:[X0("div",{className:"flex items-center space-x-2",children:[x(T0,{checked:J,"data-testid":"toggle-recurrence",id:"recurring",onCheckedChange:q}),x(Y5,{className:"text-sm",children:$("repeat")})]}),J&&P&&x("p",{className:"text-xs text-muted-foreground",children:E1(P,$)})]}),J&&x(_5,{className:"pt-0",children:X0("div",{className:"space-y-4",children:[X0("div",{className:"grid grid-cols-2 gap-4",children:[X0("div",{children:[x(a,{className:"text-xs",htmlFor:"frequency",children:$("repeats")}),X0(p5,{onValueChange:(_)=>Z({freq:Wf[_]}),value:A,children:[x(L5,{className:"h-8","data-testid":"frequency-select",id:"frequency",children:x(U5,{})}),x(G5,{children:Object.keys(Wf).map((_)=>x(A5,{value:_,children:$(_.toLowerCase())},_))})]})]}),X0("div",{children:[x(a,{className:"text-xs",htmlFor:"interval",children:$("every")}),x(m0,{className:"h-8",id:"interval",min:"1",onChange:(_)=>Z({interval:O5(_.target.value)}),type:"number",value:z?.interval||1})]})]}),z?.freq===q0.WEEKLY&&X0("div",{children:[x(a,{className:"text-xs",children:$("repeatOn")}),x("div",{className:"flex flex-wrap gap-1 mt-1",children:Y.map((_,N)=>X0("div",{className:"flex items-center space-x-1",children:[x(T0,{checked:K.includes(_.value),id:`day-${N}`,onCheckedChange:()=>G(N)}),x(a,{className:"text-xs cursor-pointer",htmlFor:`day-${N}`,children:_.label})]},_.label))})]}),X0("div",{children:[x(a,{className:"text-xs",children:$("ends")}),X0("div",{className:"space-y-2 mt-1",children:[X0("div",{className:"flex items-center space-x-2",children:[x(T0,{checked:O==="never",id:"never",onCheckedChange:()=>p("never")}),x(a,{className:"text-xs",htmlFor:"never",children:$("never")})]}),X0("div",{className:"flex items-center space-x-2",children:[x(T0,{checked:O==="count",id:"after",onCheckedChange:()=>p("count")}),x(a,{className:"text-xs",htmlFor:"after",children:$("after")}),O==="count"&&x(m0,{className:"h-6 w-16 text-xs","data-testid":"count-input",min:"1",onChange:(_)=>Z({count:O5(_.target.value)}),type:"number",value:z?.count||1}),x("span",{className:"text-xs",children:$("occurrences")})]}),X0("div",{className:"flex items-center space-x-2",children:[x(T0,{checked:O==="until",id:"on",onCheckedChange:()=>p("until")}),x(a,{className:"text-xs",htmlFor:"on",children:$("on")}),O==="until"&&x(FP,{className:"h-6",date:z?.until,onChange:(_)=>Z({until:_?F(_).endOf("day").toDate():void 0})})]})]})]})]})})]})};import{useCallback as cP,useState as j1}from"react";function V5(P){let{updateRecurringEvent:f,deleteRecurringEvent:$}=I((q)=>({updateRecurringEvent:q.updateRecurringEvent,deleteRecurringEvent:q.deleteRecurringEvent})),[J,X]=j1({isOpen:!1,operationType:"edit",event:null}),z=cP((q,G)=>{X({isOpen:!0,operationType:"edit",event:q,updates:G,onConfirm:(p)=>{f(q,G,{scope:p,eventDate:q.start})}})},[f]),Q=cP((q)=>{X({isOpen:!0,operationType:"delete",event:q,onConfirm:(G)=>{$(q,{scope:G,eventDate:q.start})}})},[$]),Y=cP(()=>{X({isOpen:!1,operationType:"edit",event:null})},[]),Z=cP((q)=>{if(J.onConfirm)J.onConfirm(q);Y(),P?.()},[J,Y,P]);return{dialogState:J,openEditDialog:z,openDeleteDialog:Q,closeDialog:Y,handleConfirm:Z}}import{jsx as v,jsxs as $0,Fragment as i1}from"react/jsx-runtime";var B5=[{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"}],M5=({selectedEvent:P,onClose:f,onUpdate:$,onDelete:J,onAdd:X})=>{let{dialogState:z,openEditDialog:Q,openDeleteDialog:Y,closeDialog:Z,handleConfirm:q}=V5(f),{findParentRecurringEvent:G,t:p,businessHours:O,timeFormat:A,getResourceById:K}=I((m)=>({findParentRecurringEvent:m.findParentRecurringEvent,t:m.t,businessHours:m.businessHours,timeFormat:m.timeFormat,getResourceById:m.getResourceById})),_=P?.start??F(),N=P?.end??F().add(1,"hour"),L=P?G(P):null,[W,V]=y0(_.toDate()),[B,R]=y0(N.toDate()),[S,k]=y0(P?.allDay||!1),[h,C]=y0(P?.color||B5[0].value),[D,l]=y0(_.format("HH:mm")),[u,d]=y0(N.format("HH:mm")),[c,w]=y0({title:P?.title||"",description:P?.description||"",location:P?.location||""}),[b,p0]=y0(()=>{return P?.rrule||L?.rrule||null}),Q0=(m)=>{if(V(m),m&&F(m).isAfter(F(B)))R(m)},z0=(m)=>{if(R(m),m&&F(m).isBefore(F(W)))V(m)},N0=(m)=>{if(l(m),F(W).isSame(F(B),"day")&&m>u)d(m)},t=(m)=>{if(d(m),F(W).isSame(F(B),"day")&&m<D)l(m)},i=(m)=>{let{name:M,value:H}=m.target;w((j)=>({...j,[M]:H}))};x1(()=>{if(S)d("23:59")},[S]);let t0=(m)=>{m.preventDefault();let M=Gf(W,D,S),H=X5(B,u,S),j={id:P?.id||F().format("YYYYMMDDHHmmss"),title:c.title,start:M,end:H,resourceId:P?.resourceId,description:c.description,location:c.location,allDay:S,color:h,rrule:b||void 0};if(P?.id&&fP(P)){Q(P,{title:c.title,start:M,end:H,description:c.description,location:c.location,allDay:S,color:h,rrule:b||void 0});return}if(P?.id)$?.(j);else X?.(j);f()},s0=()=>{if(P?.id){if(fP(P)){Y(P);return}J?.(P),f()}},e0=(m)=>{if(!m){p0(null);return}let M=Gf(W,D,S);p0({...m,dtstart:M.toDate()})},S0=v1(()=>{let m=P?.resourceId;if(m&&K){let M=K(m);if(M?.businessHours)return M.businessHours}return O},[P?.resourceId,K,O]),c0=S0?(m)=>!Lf(F(m),S0):void 0,u0=Af(W,S0),d0=Af(B,S0);return $0(i1,{children:[$0("form",{className:"flex flex-col flex-1 min-h-0",onSubmit:t0,children:[v(B0,{className:"flex-1 min-h-0",children:$0("div",{className:"grid gap-3 sm:gap-4 p-1",children:[$0("div",{className:"grid gap-2",children:[v(a,{className:"text-xs sm:text-sm",htmlFor:"title",children:p("title")}),v(m0,{className:"h-8 text-sm sm:h-9",id:"title",name:"title",onChange:i,placeholder:p("eventTitlePlaceholder"),required:!0,value:c.title})]}),$0("div",{className:"grid gap-1 sm:gap-2",children:[v(a,{className:"text-xs sm:text-sm",htmlFor:"description",children:p("description")}),v(m0,{className:"h-8 text-sm sm:h-9",id:"description",name:"description",onChange:i,placeholder:p("eventDescriptionPlaceholder"),value:c.description})]}),$0("div",{className:"flex items-center space-x-2",children:[v(T0,{checked:S,id:"allDay",onCheckedChange:(m)=>k(m===!0)}),v(a,{className:"text-xs sm:text-sm",htmlFor:"allDay",children:p("allDay")})]}),$0("div",{className:"grid grid-cols-2 gap-2 sm:gap-4",children:[$0("div",{children:[v(a,{className:"text-xs sm:text-sm",children:p("startDate")}),v(FP,{className:"mt-1",closeOnSelect:!0,date:W,disabled:c0,onChange:Q0})]}),$0("div",{children:[v(a,{className:"text-xs sm:text-sm",children:p("endDate")}),v(FP,{className:"mt-1",closeOnSelect:!0,date:B,disabled:c0,onChange:z0})]})]}),!S&&$0("div",{className:"grid grid-cols-2 gap-2 sm:gap-4",children:[$0("div",{children:[v(a,{className:"text-xs sm:text-sm",children:p("startTime")}),v(Uf,{className:"mt-1 h-8 text-sm sm:h-9",maxTime:u0.max,minTime:u0.min,name:"start-time",onChange:N0,timeFormat:A,value:D})]}),$0("div",{children:[v(a,{className:"text-xs sm:text-sm",children:p("endTime")}),v(Uf,{className:"mt-1 h-8 text-sm sm:h-9",maxTime:d0.max,minTime:d0.min,name:"end-time",onChange:t,timeFormat:A,value:u})]})]}),$0("div",{className:"grid gap-1 sm:gap-2",children:[v(a,{className:"text-xs sm:text-sm",children:p("color")}),v("div",{className:"flex flex-wrap gap-2",children:B5.map((m)=>v(g,{"aria-label":m.label,className:U(`${m.value} h-6 w-6 rounded-full sm:h-8 sm:w-8`,h===m.value&&"ring-2 ring-black ring-offset-1 sm:ring-offset-2"),onClick:()=>C(m.value),type:"button",variant:"ghost"},m.value))})]}),$0("div",{className:"grid gap-1 sm:gap-2",children:[v(a,{className:"text-xs sm:text-sm",htmlFor:"location",children:p("location")}),v(m0,{className:"h-8 text-sm sm:h-9",id:"location",name:"location",onChange:i,placeholder:p("eventLocationPlaceholder"),value:c.location})]}),v(F5,{onChange:e0,value:b})]})}),$0(CP,{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:s0,size:"sm",type:"button",variant:"destructive",children:p("delete")}),$0("div",{className:"flex w-full gap-2 sm:w-auto",children:[v(g,{className:"flex-1 sm:flex-none",onClick:f,size:"sm",type:"button",variant:"outline",children:p("cancel")}),v(g,{className:"flex-1 sm:flex-none",size:"sm",type:"submit",children:P?.id?p("update"):p("create")})]})]})]}),v(OP,{eventTitle:z.event?.title||"",isOpen:z.isOpen,onClose:Z,onConfirm:q,operationType:z.operationType})]})};import{jsx as uP,jsxs as S5}from"react/jsx-runtime";var dP=()=>{let{t:P,selectedEvent:f,isEventFormOpen:$,closeEventForm:J,addEvent:X,updateEvent:z,deleteEvent:Q,renderEventForm:Y}=I((p)=>({t:p.t,selectedEvent:p.selectedEvent,isEventFormOpen:p.isEventFormOpen,closeEventForm:p.closeEventForm,addEvent:p.addEvent,updateEvent:p.updateEvent,deleteEvent:p.deleteEvent,renderEventForm:p.renderEventForm})),G={open:$,onClose:J,selectedEvent:f,onAdd:X,onUpdate:(p)=>{z(p.id,p)},onDelete:(p)=>{Q(p.id)}};if(Y)return Y(G);return uP($P,{onOpenChange:J,open:$,children:S5(zP,{className:"flex flex-col h-[90vh] w-[90vw] max-w-[500px] p-4 sm:p-6 overflow-hidden gap-0",children:[S5(ZP,{className:"mb-2 sm:mb-4 shrink-0",children:[uP(JP,{className:"text-base sm:text-lg",children:f?.id?P("editEvent"):P("createEvent")}),uP(DP,{className:"text-xs sm:text-sm",children:f?.id?P("editEventDetails"):P("addNewEvent")})]}),uP(M5,{...G})]})})};import{Calendar as J4,Download as X4,Menu as q4,Plus as Q4}from"lucide-react";import{useState as Y4}from"react";import{RRule as o1}from"rrule";var Of=`\r
2
- `,l1=["BEGIN:VTIMEZONE","TZID:UTC","BEGIN:STANDARD","DTSTART:19700101T000000","TZNAME:UTC","TZOFFSETFROM:+0000","TZOFFSETTO:+0000","END:STANDARD","END:VTIMEZONE"].join(Of),aP=(P)=>{return P.replaceAll("\\","\\\\").replaceAll(";","\\;").replaceAll(",","\\,").replaceAll(`
3
- `,"\\n").replaceAll("\r","")},rP=(P,f=!1)=>{return f?P.format("YYYYMMDD"):P.utc().format("YYYYMMDD[T]HHmmss[Z]")},R5=(P)=>{return P.uid||`${P.id}@ilamy.calendar`},c1=(P)=>{try{return new o1(P).toString().split(`
4
- `).find(($)=>$.startsWith("RRULE:"))||""}catch{return""}},u1=(P)=>{let f=F().utc().format("YYYYMMDD[T]HHmmss[Z]"),$=P.allDay?";VALUE=DATE":"",J=P.rrule?c1(P.rrule):"",X=P.exdates?.length?P.exdates.map((Y)=>rP(F(Y),P.allDay)).join(","):null,z=P.recurrenceId?rP(F(P.recurrenceId),P.allDay):null;return["BEGIN:VEVENT",`UID:${R5(P)}`,`DTSTART${$}:${rP(P.start,P.allDay)}`,`DTEND${$}:${rP(P.end,P.allDay)}`,`SUMMARY:${aP(P.title)}`,P.description&&`DESCRIPTION:${aP(P.description)}`,P.location&&`LOCATION:${aP(P.location)}`,J,X&&`EXDATE:${X}`,z&&`RECURRENCE-ID:${z}`,`DTSTAMP:${f}`,`CREATED:${f}`,`LAST-MODIFIED:${f}`,"STATUS:CONFIRMED","SEQUENCE:0","TRANSP:OPAQUE","END:VEVENT"].filter(Boolean).join(Of)},d1=(P)=>{let f=new Set;return P.filter(($)=>{let J=R5($),X=$.rrule&&!$.recurrenceId,z=$.recurrenceId&&!$.rrule;if(X)return f.add(J),!0;if(z)return!0;return!$.rrule&&!$.recurrenceId&&!f.has(J)})},r1=(P,f="ilamy Calendar")=>{let $=aP(f),J=d1(P).map(u1);return["BEGIN:VCALENDAR","VERSION:2.0","PRODID:-//ilamy//ilamy Calendar//EN","CALSCALE:GREGORIAN","METHOD:PUBLISH",`X-WR-CALNAME:${$}`,`X-WR-CALDESC:Exported from ${$}`,l1,...J,"END:VCALENDAR"].join(Of)},m5=(P,f="calendar.ics",$="ilamy Calendar")=>{let J=new Blob([r1(P,$)],{type:"text/calendar;charset=utf-8"}),X=URL.createObjectURL(J),z=f.endsWith(".ics")?f:`${f}.ics`,Q=document.createElement("a");Q.href=X,Q.download=z,document.body.append(Q),Q.click(),Q.remove(),URL.revokeObjectURL(X)};import{ChevronDown as a1}from"lucide-react";import{useMemo as n1,useState as t1}from"react";import{jsx as s,jsxs as tP,Fragment as nP}from"react/jsx-runtime";var s1=["january","february","march","april","may","june","july","august","september","october","november","december"],e1=()=>{let{currentDate:P,view:f,setCurrentDate:$,t:J,firstDayOfWeek:X}=I((L)=>({currentDate:L.currentDate,view:L.view,setCurrentDate:L.setCurrentDate,t:L.t,firstDayOfWeek:L.firstDayOfWeek})),[z,Q]=t1(null),Y=n1(()=>s1.map((L)=>J(L)),[J]),Z=P.year(),q=Array.from({length:11},(L,W)=>Z-5+W),G=J0(P,X),p=(L)=>{$(L),Q(null)},O=()=>s(nP,{children:Y.map((L,W)=>s(g,{className:U("justify-start font-normal",P.month()===W&&"bg-primary/10"),onClick:()=>p(P.month(W)),variant:"ghost",children:L},L))}),A=()=>s(nP,{children:q.map((L)=>s(g,{className:U("justify-start font-normal",P.year()===L&&"bg-primary/10"),onClick:()=>p(P.year(L)),variant:"ghost",children:L},L))}),K=()=>s(nP,{children:Array.from({length:7},(L,W)=>{let V=P.subtract(3,"week").add(W,"week"),B=J0(V,X),R=B[0],S=B[6],k=V.isSame(P,"week"),h=R.month()!==S.month();return s(g,{className:U("justify-start font-normal",k&&"bg-primary/10"),onClick:()=>p(R),variant:"ghost",children:tP("div",{className:"flex w-full items-center justify-between",children:[s("span",{children:`${R.format("MMM D")} - ${S.format("D")}`}),h&&s("span",{className:"ml-0.5 text-xs opacity-70",children:`${R.format("MMM")}-${S.format("MMM")}`})]})},R.format("YYYY-MM-DD"))})}),_=()=>{let L=P.startOf("month"),W=P.daysInMonth();return s(nP,{children:Array.from({length:W},(V,B)=>{let R=L.date(B+1),S=R.isSame(P,"day"),k=R.isSame(F(),"day");return s(g,{className:U("justify-start font-normal",S&&"bg-primary/10"),onClick:()=>p(R),variant:"ghost",children:tP("div",{className:"flex w-full items-center justify-between",children:[s("span",{children:R.format("dddd, MMM D")}),k&&s("span",{className:"bg-primary text-primary-foreground rounded-sm px-1! text-xs",children:J("today")})]})},R.format("YYYY-MM-DD"))})})};return[{id:"month",hidden:f==="year",title:P.format("MMMM"),render:O},{id:"year",hidden:!1,title:P.format("YYYY"),render:A},{id:"week",hidden:f!=="week",title:`${G[0].format("MMM D")} - ${G[6].format("MMM D")}`,render:K},{id:"day",hidden:f!=="day",title:P.format("dddd, D"),render:_}].filter((L)=>!L.hidden).map((L)=>tP(h0,{onOpenChange:(W)=>Q(W?L.id:null),open:z===L.id,children:[s(g0,{asChild:!0,children:tP(g,{className:"flex items-center gap-1 px-1! font-semibold","data-testid":"calendar-month-button",variant:"ghost",children:[s(y,{className:"flex items-center gap-1 px-1! font-semibold","data-testid":"calendar-month-button",transitionKey:`${L.id}-${P.format("YYYY-MM-DD")}`,children:L.title}),s(a1,{className:"h-4 w-4"})]})}),s(C0,{className:"w-40 p-0",children:s("div",{className:"flex max-h-60 flex-col overflow-auto",children:L.render()})})]},L.id))},b5=e1;import{ChevronLeft as P4,ChevronRight as f4}from"lucide-react";import{jsx as pP,jsxs as Z4}from"react/jsx-runtime";var $4=["day","week","month","year"],z4=({currentView:P,onChange:f,variant:$="default",size:J="sm",className:X,onToday:z,onNext:Q,onPrevious:Y})=>{let{t:Z,resources:q}=I((K)=>({t:K.t,resources:K.resources})),G=$==="grid",p=q&&q.length>0,O=(K)=>{return U(G?"w-full":"",P===K&&"bg-primary/80")},A=(K)=>{return P===K?"default":"outline"};return Z4("div",{className:U(G?"grid grid-cols-2 gap-2":"flex gap-1",X),children:[pP(g,{onClick:Y,size:J,variant:"outline",children:pP(P4,{className:"h-4 w-4"})}),pP(g,{onClick:Q,size:J,variant:"outline",children:pP(f4,{className:"h-4 w-4"})}),$4.map((K)=>{if(p&&K==="year")return null;return pP(g,{className:O(K),onClick:()=>f(K),size:J,variant:A(K),children:Z(K)},K)}),pP(g,{onClick:z,size:J,variant:"outline",children:Z("today")})]})},Ff=z4;import{jsx as n,jsxs as I0}from"react/jsx-runtime";var _4=({className:P=""})=>{let{view:f,setView:$,nextPeriod:J,prevPeriod:X,today:z,openEventForm:Q,headerComponent:Y,headerClassName:Z,rawEvents:q,t:G}=I((L)=>({view:L.view,setView:L.setView,nextPeriod:L.nextPeriod,prevPeriod:L.prevPeriod,today:L.today,openEventForm:L.openEventForm,headerComponent:L.headerComponent,headerClassName:L.headerClassName,rawEvents:L.rawEvents,t:L.t})),[p,O]=Y4(!1),A=()=>O(!1),K=()=>{let L=`ilamy-calendar-${new Date().toISOString().split("T")[0]}.ics`;m5(q,L,"ilamy Calendar"),A()},_=()=>I0(g,{className:"flex items-center gap-1",onClick:()=>Q(),size:"sm",variant:"default",children:[n(Q4,{className:"h-4 w-4"}),n("span",{className:"hidden @4xl:inline",children:G("new")})]}),N=({fullWidth:L=!1})=>I0(g,{className:U("flex items-center gap-1",L&&"w-full gap-2"),onClick:K,size:"sm",variant:"outline",children:[n(X4,{className:"h-4 w-4"}),L?`${G("export")} Calendar (.ics)`:n("span",{className:"hidden @4xl/base-header:inline",children:G("export")})]});if(Y)return Y;return n("div",{className:"@container/base-header w-full","data-testid":"calendar-header",children:I0("div",{className:U("flex justify-center @2xl/base-header:justify-between flex-wrap items-center gap-2",P,Z),children:[I0("div",{className:"flex flex-wrap items-center justify-center gap-1 @2xl/base-header:justify-start",children:[n(J4,{className:"h-5 w-5"}),n(b5,{})]}),I0("div",{className:"flex flex-wrap justify-start @xl/base-header:justify-center gap-1 @4xl/base-header:justify-end overflow-x-auto",children:[I0("div",{className:"hidden @md/base-header:flex items-center justify-start gap-1",children:[n(Ff,{className:"justify-end",currentView:f,onChange:$,onNext:J,onPrevious:X,onToday:z,variant:"default"}),n(_,{}),n(N,{})]}),I0("div",{className:"flex items-center justify-end gap-1 @md/base-header:hidden",children:[n(_,{}),I0(h0,{onOpenChange:O,open:p,children:[n(g0,{asChild:!0,children:n(g,{size:"sm",variant:"outline",children:n(q4,{className:"h-4 w-4"})})}),n(C0,{align:"end",className:"w-[240px] p-2",children:I0("div",{className:"space-y-2",children:[n(Ff,{currentView:f,onChange:(L)=>{$(L),A()},onNext:()=>{J(),A()},onPrevious:()=>{X(),A()},onToday:()=>{z(),A()},variant:"grid"}),n("div",{className:"pt-2 border-t",children:n(N,{fullWidth:!0})})]})})]})]})]})]})})},BP=_4;import{memo as k4}from"react";import{memo as m4,useCallback as b4}from"react";import V4,{memo as B4,useMemo as k5}from"react";import{jsx as K4}from"react/jsx-runtime";var I5=({date:P,locale:f="en",className:$})=>{let J=P.isSame(F(),"day");return K4("div",{className:U("flex h-5 w-5 items-center justify-center rounded-full text-xs shrink-0",J&&"bg-primary text-primary-foreground font-medium",$),"data-testid":J?"day-number-today":`day-number-${P.format("D")}`,children:Intl.DateTimeFormat(f,{day:"numeric"}).format(P.toDate())})};import{useImperativeHandle as N4,useState as w5}from"react";import{useDraggable as p4}from"@dnd-kit/core";import{memo as U4}from"react";import{jsx as MP,jsxs as A4}from"react/jsx-runtime";var L4=(P,f)=>{if(P&&f)return"rounded-none";if(P)return"rounded-r-md rounded-l-none";if(f)return"rounded-l-md rounded-r-none";return"rounded-md"};function G4({elementId:P,event:f,className:$,style:J,disableDrag:X=!1}){let{onEventClick:z,renderEvent:Q,disableEventClick:Y,disableDragAndDrop:Z}=I((K)=>({onEventClick:K.onEventClick,renderEvent:K.renderEvent,disableEventClick:K.disableEventClick,disableDragAndDrop:K.disableDragAndDrop})),{attributes:q,listeners:G,setNodeRef:p,isDragging:O}=p4({id:P,data:{event:f,type:"calendar-event"},disabled:X||Z}),A=()=>{let K=f,_=K.isTruncatedStart,N=K.isTruncatedEnd;return A4("div",{className:U(f.backgroundColor||"bg-blue-500",f.color||"text-white","h-full w-full px-1 border-[1.5px] border-card text-left overflow-clip relative",L4(_,N)),style:{backgroundColor:f.backgroundColor,color:f.color},children:[_&&MP("div",{className:"absolute left-0 top-0 bottom-0 w-0.5 bg-foreground/25"}),MP("p",{className:U("text-[10px] font-semibold sm:text-xs mt-0.5",_&&"pl-1",N&&"pr-1"),children:f.title}),N&&MP("div",{className:"absolute right-0 top-0 bottom-0 w-0.5 bg-foreground/25"})]})};return MP(y,{className:U("truncate h-full w-full",X||Z?Y?"cursor-default":"cursor-pointer":"cursor-grab",O&&!(X||Z)&&"cursor-grabbing shadow-lg",$),layout:!0,layoutId:P,onClick:(K)=>{K.stopPropagation(),z(f)},ref:p,style:J,transitionKey:P,...q,...G,children:Q?Q(f):MP(A,{})})}var UP=U4(G4,(P,f)=>{return P.elementId===f.elementId&&P.disableDrag===f.disableDrag&&P.className===f.className&&P.event===f.event});import{jsx as SP,jsxs as W4}from"react/jsx-runtime";var H5=({ref:P})=>{let[f,$]=w5(!1),[J,X]=w5(null),{currentDate:z,firstDayOfWeek:Q}=I((q)=>({currentDate:q.currentDate,firstDayOfWeek:q.firstDayOfWeek}));N4(P,()=>({open:()=>$(!0),close:()=>$(!1),setSelectedDayEvents:(q)=>X(q)}));let Z=z.startOf("month").clone();while(Z.day()!==Q)Z=Z.subtract(1,"day");return SP($P,{onOpenChange:$,open:f,children:W4(zP,{className:"max-h-[80vh] max-w-md overflow-y-auto",children:[SP(ZP,{children:SP(JP,{children:J?.day.format("MMMM D, YYYY")})}),SP("div",{className:"mt-4 space-y-3",children:J?.events.map((q)=>{return SP(UP,{className:"relative my-1 h-[30px]",elementId:`all-events-dialog-event-$${q.id}`,event:q},q.id)})})]})})};import{useDroppable as O4}from"@dnd-kit/core";import{jsx as F4}from"react/jsx-runtime";function T5({id:P,type:f,date:$,hour:J,minute:X,resourceId:z,allDay:Q,children:Y,className:Z,style:q,"data-testid":G,disabled:p=!1}){let{onCellClick:O,disableDragAndDrop:A,disableCellClick:K,classesOverride:_,view:N}=I((B)=>({onCellClick:B.onCellClick,disableDragAndDrop:B.disableDragAndDrop,disableCellClick:B.disableCellClick,classesOverride:B.classesOverride,view:B.view})),{isOver:L,setNodeRef:W}=O4({id:P,data:{type:f,date:$,hour:J,minute:X,resourceId:z,allDay:Q},disabled:A||p}),V=(B)=>{if(B.stopPropagation(),K||p)return;let R=$.hour(J??0).minute(X??0),S=R.clone();if(J!==void 0&&X!==void 0)S=S.hour(J).minute(X+15);else if(J!==void 0)S=S.hour(J+1).minute(0);else S=S.hour(23).minute(59);O({start:R,end:S,resourceId:z,allDay:Q})};return F4("div",{className:U("droppable-cell",Z,L&&!A&&!p&&"bg-accent",K||p?"cursor-default":"cursor-pointer",p&&(_?.disabledCell||jf)),"data-disabled":p.toString(),"data-testid":G,"data-view":N,onClick:V,ref:W,style:q,children:Y})}import{jsx as sP,jsxs as eP,Fragment as h5}from"react/jsx-runtime";var M4=({day:P,hour:f,minute:$,className:J="",resourceId:X,gridType:z="day",shouldRenderEvents:Q=!0,allDay:Y=!1,"data-testid":Z,showDayNumber:q=!1,children:G})=>{let p=V4.useRef(null),{dayMaxEvents:O=0,getEventsForDateRange:A,currentDate:K,t:_,getEventsForResource:N,businessHours:L,currentLocale:W,eventSpacing:V,getResourceById:B}=I((w)=>({dayMaxEvents:w.dayMaxEvents,getEventsForDateRange:w.getEventsForDateRange,currentDate:w.currentDate,firstDayOfWeek:w.firstDayOfWeek,t:w.t,getEventsForResource:w.getEventsForResource,businessHours:w.businessHours,currentLocale:w.currentLocale,eventSpacing:w.eventSpacing,getResourceById:w.getResourceById})),R=k5(()=>{if(!Q)return[];let w=A(P.startOf(z),P.endOf(z));if(Y)w=w.filter((b)=>b.allDay);if(X){let b=N(X)??[];return w.filter((p0)=>b.some((Q0)=>String(Q0.id)===String(p0.id)))}return w},[P,X,A,N,z,Q,Y]),S=(w,b)=>{p.current?.setSelectedDayEvents({day:w,events:b}),p.current?.open()},k=P.month()===K.month(),h=R.length-O,C=h>0,D=k5(()=>{if(X&&B){let w=B(X);if(w?.businessHours)return w.businessHours}return L},[X,B,L]),l=J5({date:P,hour:z==="hour"?P.hour():void 0,businessHours:D}),u=P.format("HH"),d=P.format("mm"),c=z==="hour"?`day-cell-${P.format("YYYY-MM-DD")}-${u}-${d}`:`day-cell-${P.format("YYYY-MM-DD")}`;return eP(h5,{children:[sP(T5,{allDay:Y,className:U("cursor-pointer overflow-clip p-1 hover:bg-accent min-h-[60px] relative border-r last:border-r-0 only:border-r border-b",J),"data-testid":Z||c,date:P,disabled:!l||!k,hour:f,id:`day-cell-${P.toISOString()}${X?`-resource-${X}`:""}`,minute:$,resourceId:X,type:"day-cell",children:eP("div",{className:"flex flex-col h-full w-full","data-testid":"grid-cell-content",style:{gap:`${V}px`},children:[q&&sP(I5,{date:P,locale:W}),Q&&eP(h5,{children:[R.slice(0,O).map((w,b)=>sP("div",{className:"w-full shrink-0","data-testid":w?.title,style:{height:`${G0}px`}},`empty-${b}-${w.id}`)),C&&eP("div",{className:"text-muted-foreground hover:text-foreground cursor-pointer text-[10px] whitespace-nowrap sm:text-xs shrink-0 mt-1",onClick:(w)=>{w.stopPropagation(),S(P,R)},onKeyDown:(w)=>{if(w.key==="Enter"||w.key===" ")w.preventDefault(),w.stopPropagation(),S(P,R)},role:"button",tabIndex:0,children:["+",h," ",_("more")]})]}),G]})}),sP(H5,{ref:p})]})},RP=B4(M4);import{jsx as g5}from"react/jsx-runtime";var E0=({resource:P,className:f,children:$,"data-testid":J})=>{let{renderResource:X}=o();return g5("div",{className:U("flex items-center justify-center p-2 border-r last:border-r-0",f),"data-testid":J,style:{color:P.color,backgroundColor:P.backgroundColor},children:X?X(P):$??g5("div",{className:"text-sm font-medium truncate",children:P.title})})};import{memo as S4}from"react";import{useMemo as D5}from"react";var C5=({days:P,events:f,dayMaxEvents:$,dayNumberHeight:J=Ef,gridType:X="day",eventSpacing:z=H0})=>{let Q=X==="hour"?P.at(0).startOf("hour"):P.at(0).startOf("day"),Y=X==="hour"?P.at(-1).endOf("hour"):P.at(-1).endOf("day"),Z=P.length,q=f.filter((_)=>_.end.diff(_.start,X)>0),G=f.filter((_)=>_.end.diff(_.start,X)===0),p=[...q].sort((_,N)=>{let L=_.start.diff(N.start);if(L!==0)return L;return N.end.diff(N.start)-_.end.diff(_.start)}),O=[...G].sort((_,N)=>_.start.diff(N.start)),A=[];for(let _=0;_<$;_++){A[_]=[];for(let N=0;N<Z;N++)A[_][N]={taken:!1,event:null}}let K=[];for(let _ of p){let N=F.max(_.start.startOf(X),Q),L=X==="hour"?_.end.subtract(1,"minute"):_.end,W=F.min(L.startOf(X),Y),V=Math.max(0,N.diff(Q,X)),B=Math.min(Z-1,W.diff(Q,X)),R=_.start.startOf(X).isBefore(Q),S=_.end.startOf(X).isAfter(Y),k=!1,h=-1;for(let C=0;C<$;C++){let D=!0;for(let l=V;l<=B;l++)if(A[C][l].taken){D=!1;break}if(D){h=C;break}}if(h!==-1){for(let D=V;D<=B;D++)A[h][D]={taken:!0,event:_};let C=B-V+1;K.push({left:V/Z*100,width:C/Z*100,top:J+z+h*(G0+z),height:G0,position:h,..._,isTruncatedStart:R,isTruncatedEnd:S}),k=!0}if(!k)for(let C=V+1;C<=B;C++){let D=-1;for(let l=0;l<$;l++){let u=!0;for(let d=C;d<=B;d++)if(A[l][d].taken){u=!1;break}if(u){D=l;break}}if(D!==-1){for(let u=C;u<=B;u++)A[D][u]={taken:!0,event:_};let l=B-C+1;K.push({left:C/Z*100,width:l/Z*100,top:J+z+D*(G0+z),height:G0,position:D,..._,isTruncatedStart:!0,isTruncatedEnd:S}),k=!0;break}}}for(let _ of O){let N=F.max(_.start.startOf(X),Q),L=Math.max(0,Math.min(Z-1,N.diff(Q,X))),W=!1,V=!1,B=-1;for(let R=0;R<$;R++)if(!A[R][L].taken){B=R;break}if(B!==-1)A[B][L]={taken:!0,event:_},K.push({left:L/Z*100,width:1/Z*100,top:J+z+B*(G0+z),height:G0,position:B,..._,isTruncatedStart:!1,isTruncatedEnd:!1})}return K};var y5=({days:P,allDay:f,dayNumberHeight:$,resourceId:J,gridType:X})=>{let{getEventsForDateRange:z,dayMaxEvents:Q,eventSpacing:Y,getEventsForResource:Z}=I((A)=>({getEventsForDateRange:A.getEventsForDateRange,dayMaxEvents:A.dayMaxEvents,eventSpacing:A.eventSpacing,getEventsForResource:A.getEventsForResource})),q=P.at(0).startOf("day"),G=P.at(-1).endOf("day"),p=D5(()=>{let A=z(q,G);if(J){let K=Z(J);A=A.filter((_)=>K.some((N)=>String(N.id)===String(_.id)))}if(f)A=A.filter((K)=>!!K.allDay===f);return A},[z,Z,q,G,J,f]);return D5(()=>{return C5({days:P,events:p,dayMaxEvents:Q,dayNumberHeight:$,eventSpacing:Y,gridType:X})},[P,Q,$,Y,p,X])};import{jsx as Vf}from"react/jsx-runtime";var R4=({days:P,gridType:f="day",resourceId:$,dayNumberHeight:J,"data-testid":X,allDay:z})=>{let Q=P.at(0).startOf("day"),Y=y5({days:P,gridType:f,resourceId:$,dayNumberHeight:J,allDay:z});return Vf("div",{className:"relative w-full h-full pointer-events-none z-10 overflow-clip","data-testid":X,children:Y.map((Z)=>{let q=`${Z.id}-${Z.position}-${Q.toISOString()}-${$??"no-resource"}`;return Vf("div",{className:"absolute z-10 pointer-events-auto overflow-clip","data-left":Z.left,"data-testid":`horizontal-event-${Z.id}`,"data-top":Z.top,"data-width":Z.width,style:{left:`calc(${Z.left}% + var(--spacing) * 0.25)`,width:`calc(${Z.width}% - var(--spacing) * 1)`,top:`${Z.top}px`,height:`${G0}px`},children:Vf(UP,{className:"h-full w-full shadow",elementId:q,event:Z})},`${q}-wrapper`)})})},E5=S4(R4);import{jsx as j0,jsxs as Bf}from"react/jsx-runtime";var I4=({id:P,resource:f,gridType:$="day",variant:J="resource",dayNumberHeight:X,className:z,columns:Q=[],allDay:Y,showDayNumber:Z=!1,isLastRow:q=!1})=>{let{renderResource:G}=I((K)=>({renderResource:K.renderResource})),p=J==="resource",O=Q.some((K)=>K.days),A=b4((K)=>{return j0("div",{className:"absolute inset-0 z-10 pointer-events-none",children:j0(E5,{allDay:Y,"data-testid":`horizontal-events-${P}`,dayNumberHeight:X,days:K,gridType:$,resourceId:f?.id})})},[Y,X,$,P,f?.id]);return Bf("div",{className:U("flex flex-1 relative",z),"data-testid":`horizontal-row-${P}`,children:[p&&j0(E0,{className:"w-20 sm:w-40 sticky left-0 bg-background z-20 h-full","data-testid":`horizontal-row-label-${f?.id}`,resource:f,children:G?G(f):j0("div",{className:"wrap-break-word text-sm",children:f?.title})}),Bf("div",{className:"relative flex-1 flex",children:[j0("div",{className:"flex w-full",children:Q.map((K,_)=>{if(K.day)return j0(RP,{allDay:Y,className:U("flex-1 w-20",q&&"border-b-0",K.className),day:K.day,gridType:$,hour:$==="hour"?K.day.hour():void 0,resourceId:f?.id,showDayNumber:Z},K.day.toISOString());let N=_===Q.length-1;return Bf("div",{className:"flex relative w-full",children:[j0("div",{className:"flex w-full",children:K.days?.map((L)=>j0(RP,{allDay:Y,className:U("flex-1 w-20",q&&"border-b-0",!N&&"border-r!",K.className),day:L,gridType:$,hour:$==="hour"?L.hour():void 0,resourceId:f?.id,showDayNumber:Z},L.toISOString()))}),A(K.days)]},K.id)})}),!O&&A(Q.map((K)=>K.day).filter(Boolean))]})]})},Pf=m4(I4);import{memo as w4}from"react";import{jsx as T4}from"react/jsx-runtime";var H4=({className:P})=>{let{t:f}=I(($)=>({t:$.t}));return T4("div",{className:U("w-16 border-r shrink-0 sticky left-0 bg-background z-20 flex items-center justify-center sm:text-xs text-muted-foreground",P),children:f("allDay")})},LP=w4(H4);import{jsx as j5,jsxs as g4}from"react/jsx-runtime";var h4=({days:P,classes:f,resource:$,showSpacer:J=!0})=>{let X=P.map((z,Q)=>({id:`allday-col-${z.toISOString()}-${Q}`,day:z,gridType:"day",className:U("h-full min-h-12 border-r last:border-r-0",f?.cell)}));return g4("div",{className:U("flex w-full",f?.row),"data-testid":"all-day-row",children:[J&&j5(LP,{className:f?.spacer}),j5(Pf,{allDay:!0,className:"flex-1 min-h-fit",columns:X,dayNumberHeight:0,gridType:"day",id:`all-day-row-${$?.id??"main"}`,isLastRow:!0,resource:$,variant:"regular"})]})},x0=k4(h4);import{memo as i4}from"react";import{memo as j4}from"react";import C4 from"dayjs";import{memo as D4}from"react";import{jsx as x5,Fragment as E4}from"react/jsx-runtime";var y4=({rangeStart:P,rangeEnd:f,now:$,resource:J})=>{let{renderCurrentTimeIndicator:X,view:z}=I((p)=>({renderCurrentTimeIndicator:p.renderCurrentTimeIndicator,view:p.view})),Q=$??C4();if(!(Q.isSameOrAfter(P)&&Q.isBefore(f)))return null;let Z=f.diff(P,"minute"),G=Q.diff(P,"minute")/Z*100;if(X)return x5(E4,{children:X({currentTime:Q,rangeStart:P,rangeEnd:f,progress:G,resource:J,view:z})});return x5("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:`${G}%`}})},v5=D4(y4);import{useMemo as o5}from"react";var i5=({days:P,gridType:f="hour",events:$})=>{let J=$.filter((p)=>!p.allDay).toSorted((p,O)=>p.start.diff(O.start));if(J.length===0)return[];let X=P.at(0)||F(),z=P.length,Q=f==="day",Y=[],Z=[],q=null;for(let p of J){if(q&&p.start.isSameOrAfter(q)){if(Z.length>0)Y.push(Z);Z=[]}Z.push(p),q=q?F.max(q,p.end):p.end}if(Z.length>0)Y.push(Z);let G=[];for(let p of Y){if(p.length===1){let N=p[0],L=N.start.diff(X,f,!0),W=N.end.diff(X,f,!0);if(Q){if(L=Math.floor(L),W=Math.ceil(W),W<=L)W=L+1}if(L<0)L=0;if(W>z)W=z;let V=Math.max(0,W-L);if(V===0)continue;let B=L/z*100,R=V/z*100;G.push({...N,left:0,width:100,top:B,height:R});continue}let O=[...p].sort((N,L)=>{let W=N.end.diff(N.start,"minute"),V=L.end.diff(L.start,"minute");if(W!==V)return V-W;return N.start.diff(L.start)}),A=O.length,K;if(A===2)K=25;else if(A===3)K=50;else if(A===4)K=60;else K=70;let _=A>1?K/(A-1):0;for(let N=0;N<O.length;N++){let L=O[N],W=L.start.diff(X,f,!0),V=L.end.diff(X,f,!0);if(Q){if(W=Math.floor(W),V=Math.ceil(V),V<=W)V=W+1}if(W<0)W=0;if(V>z)V=z;let B=Math.max(0,V-W);if(B===0)continue;let R=W/z*100,S=B/z*100,k,h,C;if(N===0)k=0,h=100,C=1;else k=_*N,h=100-k,C=N+1;G.push({...L,left:k,width:h,top:R,height:S,zIndex:C})}}return G};var l5=({days:P,gridType:f,resourceId:$})=>{let{getEventsForDateRange:J,getEventsForResource:X}=I((q)=>({getEventsForDateRange:q.getEventsForDateRange,getEventsForResource:q.getEventsForResource})),z=P.at(0).startOf("day"),Q=P.at(-1).endOf("day"),Y=o5(()=>{let q=J(z,Q);if($){let G=X($);q=q.filter((p)=>G.some((O)=>String(O.id)===String(p.id)))}return q.filter((G)=>!G.allDay)},[z,Q,J,$,X]);return o5(()=>{return i5({days:P,events:Y,gridType:f})},[P,f,Y])};import{jsx as Mf,jsxs as v4}from"react/jsx-runtime";var x4=({days:P,gridType:f="hour",resourceId:$,resource:J,"data-testid":X})=>{let z=l5({days:P,gridType:f,resourceId:$}),Q=P.at(0),Y=P.at(-1)?.add(1,f);return v4("div",{className:"relative w-full h-full pointer-events-none z-10 overflow-clip","data-testid":X,children:[Q&&Y&&Mf(v5,{rangeEnd:Y,rangeStart:Q,resource:J}),z.map((Z,q)=>{let G=`event-${Z.id}-${q}-${P.at(0).toISOString()}-${$??"no-resource"}`,p=Z.end.diff(Z.start,"minute")<=15;return Mf("div",{className:"absolute",style:{left:`${Z.left}%`,width:`calc(${Z.width}% - var(--spacing) * 2)`,top:`${Z.top}%`,height:`${Z.height}%`},children:Mf(UP,{className:U("pointer-events-auto absolute",{"[&_p]:text-[10px] [&_p]:mt-0":p}),elementId:G,event:Z})},`${G}-wrapper`)})]})},c5=j4(x4);import{jsx as mP,jsxs as l4}from"react/jsx-runtime";var o4=({id:P,days:f,resourceId:$,resource:J,"data-testid":X,gridType:z,className:Q,renderCell:Y,noEvents:Z,cellSlots:q=[60],isLastColumn:G})=>{return mP("div",{className:U("flex flex-col flex-1 items-center justify-center min-w-50 bg-background relative",Q),"data-testid":X||`vertical-col-${P}`,children:l4("div",{className:"w-full relative grid",style:{gridTemplateRows:`repeat(${f.length}, minmax(0, 1fr))`},children:[f.map((p)=>{let O=p.format("HH"),A=p.format("YYYY-MM-DD");if(Y){let K=P==="time-col"?`vertical-time-${O}`:`vertical-cell-${A}-${O}-00${$?`-${$}`:""}`;return mP("div",{className:"h-[60px] border-b border-r","data-testid":K,children:Y(p)},`${A}-${O}`)}return q.map((K)=>{let _=K===60?void 0:K,N=_===void 0?"00":String(_).padStart(2,"0"),L=`vertical-cell-${A}-${O}-${N}${$?`-${$}`:""}`;return mP(RP,{className:U("hover:bg-accent relative z-10 h-[60px] cursor-pointer border-b",K===60?"":"border-dashed h-[15px] min-h-[15px]",G?"border-r-0":"border-r"),"data-testid":L,day:_?p.minute(_):p,gridType:z,hour:p.hour(),minute:_,resourceId:$,shouldRenderEvents:!1},`${A}-${O}-${N}-${$||"no-resource"}`)})}),!Z&&mP("div",{className:"absolute inset-0 z-10 pointer-events-none",children:mP(c5,{"data-testid":`vertical-events-${P}`,days:f,gridType:z,resource:J,resourceId:$})})]})})},u5=i4(o4);import{memo as c4}from"react";import{jsx as d5,jsxs as d4}from"react/jsx-runtime";var u4=({children:P,classes:f,allDayRow:$})=>{let{stickyViewHeader:J,viewHeaderClassName:X}=I((z)=>({stickyViewHeader:z.stickyViewHeader,viewHeaderClassName:z.viewHeaderClassName}));return d4("div",{className:U(J&&"sticky top-0 z-21 bg-background",X),children:[d5("div",{className:U("h-12 border-b w-fit",f?.header),"data-testid":"vertical-grid-header",children:P}),$&&d5("div",{className:U("flex w-full border-b min-h-12 h-full",f?.allDay),"data-testid":"vertical-grid-all-day",children:$})]})},r5=c4(u4);import{jsx as bP,jsxs as n5}from"react/jsx-runtime";var a5="h-[calc(100%-3rem)]",M0=({columns:P,children:f,gridType:$="day",variant:J="resource",classes:X,allDayRow:z,cellSlots:Q})=>{let Y=J==="resource",Z=!Y,q=f&&bP(r5,{allDayRow:z,classes:{header:X?.header,allDay:X?.allDay},children:f});return n5("div",{className:"h-full","data-testid":"vertical-grid-container",children:[Z&&q,n5(B0,{className:U("h-full",Z&&"overflow-auto",Z&&a5),"data-testid":"vertical-grid-scroll",viewPortProps:{className:"*:flex! *:flex-col! *:min-h-full"},children:[Y&&q,bP("div",{className:U("flex flex-1 w-fit",Y&&a5,X?.body),"data-testid":"vertical-grid-body",children:P.map((G,p)=>bP(u5,{...G,cellSlots:Q,gridType:$,isLastColumn:p===P.length-1},`${G.id}-${p}`))}),bP(b0,{className:"z-30"})," ",bP(b0,{className:"z-30",orientation:"horizontal"})," "]})]})};function L0({referenceDate:P,businessHours:f,hideNonBusinessHours:$,allDates:J=[P],resourceBusinessHours:X=[]}){let z=yf({referenceDate:P});if(!$||!f&&X.length===0)return z;let{minStart:Q,maxEnd:Y,hasBusinessHours:Z}=oP({allDates:J,businessHours:f,resourceBusinessHours:X,hideNonBusinessHours:$});if(!Z)return z;return z.filter((q)=>{let G=q.hour();return G>=Q&&G<Y})}import{jsx as GP,jsxs as a4}from"react/jsx-runtime";var r4=()=>{let{currentDate:P,currentLocale:f,timeFormat:$,t:J,businessHours:X,hideNonBusinessHours:z}=U0(),Q=P.isSame(F(),"day"),Y=L0({referenceDate:P,businessHours:X,hideNonBusinessHours:z,allDates:[P]}),Z={id:"time-col",day:void 0,days:Y,className:"shrink-0 w-16 min-w-16 max-w-16 sticky left-0 bg-background z-20",gridType:"hour",noEvents:!0,renderCell:(G)=>GP("div",{className:"text-muted-foreground p-2 text-right text-[10px] sm:text-xs flex flex-col items-center",children:Intl.DateTimeFormat(f,{hour:"numeric",hour12:$==="12-hour"}).format(G.toDate())})},q={id:`day-col-${P.format("YYYY-MM-DD")}`,day:P,days:Y,className:"w-[calc(100%-4rem)] flex-1",gridType:"hour"};return GP(M0,{allDayRow:GP(x0,{days:[P]}),cellSlots:[0,15,30,45],classes:{header:"w-full",body:"w-full",allDay:"w-full"},columns:[Z,q],gridType:"hour",variant:"regular",children:GP("div",{className:"flex h-full flex-1 justify-center items-center","data-testid":"day-view-header",children:a4(y,{className:U("flex justify-center items-center text-center text-base font-semibold sm:text-xl",Q&&"text-primary"),transitionKey:P.format("YYYY-MM-DD"),children:[GP("span",{className:"xs:inline hidden",children:P.format("dddd, ")}),P.format("MMMM D, YYYY"),Q&&GP("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:J("today")})]})})})},t5=r4;import{useMemo as e4}from"react";import{memo as n4}from"react";import{jsx as s4}from"react/jsx-runtime";var t4=({children:P,className:f})=>{let{stickyViewHeader:$,viewHeaderClassName:J}=I((X)=>({stickyViewHeader:X.stickyViewHeader,viewHeaderClassName:X.viewHeaderClassName}));return s4("div",{className:U("flex h-12 w-fit",$&&"sticky top-0 z-21 bg-background",f,J),"data-testid":"horizontal-grid-header",children:P})},s5=n4(t4);import{jsx as AP,jsxs as P2}from"react/jsx-runtime";var e5="h-[calc(100%-3rem)]",ff=({rows:P,children:f,classes:$,allDay:J,gridType:X,variant:z="resource",dayNumberHeight:Q})=>{let{currentDate:Y}=I((p)=>({currentDate:p.currentDate})),Z=z==="resource",q=!Z,G=f&&AP(s5,{className:$?.header,children:f});return P2("div",{className:"h-full","data-testid":"horizontal-grid-container",children:[q&&G,P2(B0,{className:U("h-full",q&&"overflow-auto",q&&e5),"data-testid":"horizontal-grid-scroll",viewPortProps:{className:"*:flex! *:flex-col! *:min-h-full"},children:[Z&&G,AP("div",{className:U("flex flex-1 w-fit",Z&&e5,$?.body),"data-testid":"horizontal-grid-body",children:AP("div",{className:"relative w-full flex flex-col flex-1",children:P.map((p,O)=>AP(Pf,{allDay:p.allDay??J,dayNumberHeight:Q,gridType:X,isLastRow:O===P.length-1,variant:z,...p},p.id))},Y.format("YYYY-MM"))}),AP(b0,{className:"z-30"}),AP(b0,{className:"z-30",orientation:"horizontal"})]})]})};import{jsx as Sf}from"react/jsx-runtime";var f2=({className:P})=>{let{firstDayOfWeek:f,stickyViewHeader:$,viewHeaderClassName:J,currentDate:X}=U0(),z=J0(X,f);return Sf("div",{className:U("flex w-full",$&&"sticky top-0 z-20",J,P),"data-testid":"month-header",children:z.map((Q,Y)=>Sf(y,{className:"py-2 text-center font-medium border-r last:border-r-0 border-b flex-1","data-testid":`weekday-header-${Q.format("ddd").toLowerCase()}`,delay:Y*0.05,transitionKey:Q.toISOString(),children:Sf("span",{className:"text-sm capitalize",children:Q.format("ddd")})},Q.toISOString()))})};import{jsx as $2}from"react/jsx-runtime";var z2=()=>{let{currentDate:P,firstDayOfWeek:f}=U0(),J=e4(()=>yP(P,f),[P,f]).map((X,z)=>({id:`week-${z}`,columns:X.map((Q)=>({id:`col-${Q.toISOString()}`,day:Q,className:"w-auto",gridType:"day"})),className:"flex-1",showDayNumber:!0}));return $2(ff,{classes:{body:"w-full",header:"w-full"},rows:J,variant:"regular",children:$2(f2,{className:"h-12"})})};import{useMemo as Rf}from"react";import{jsx as v0,jsxs as mf}from"react/jsx-runtime";var Z2="w-[calc((100%-4rem)/7)] min-w-[calc((100%-4rem)/7)] flex-1",J2="w-10 sm:w-16 min-w-10 sm:min-w-16 max-w-10 sm:max-w-16",P3=()=>{let{t:P,currentDate:f,firstDayOfWeek:$,selectDate:J,openEventForm:X,currentLocale:z,timeFormat:Q,businessHours:Y,hideNonBusinessHours:Z}=U0(),q=Rf(()=>J0(f,$),[f,$]),G=Rf(()=>L0({referenceDate:f,businessHours:Y,hideNonBusinessHours:Z,allDates:q}),[f,Y,Z,q]),p={id:"time-col",days:G,day:void 0,className:`shrink-0 ${J2} sticky left-0 bg-background z-20`,gridType:"hour",noEvents:!0,renderCell:(A)=>v0("div",{className:"text-muted-foreground p-2 text-right text-[10px] sm:text-xs flex flex-col items-center",children:Intl.DateTimeFormat(z,{hour:"numeric",hour12:Q==="12-hour"}).format(A.toDate())})},O=Rf(()=>{return q.map((A)=>({id:`day-col-${A.format("YYYY-MM-DD")}`,day:A,label:A.format("D"),className:Z2,days:G.map((K)=>A.hour(K.hour()).minute(0).second(0).millisecond(0)),value:A}))},[q,G]);return v0(M0,{allDayRow:v0(x0,{classes:{cell:Z2,spacer:J2},days:q}),classes:{header:"w-full h-18",body:"h-[calc(100%-4.5rem)] w-full"},columns:[p,...O],gridType:"hour",variant:"regular",children:mf("div",{className:"flex h-full flex-1","data-testid":"week-view-header",children:[v0("div",{className:"w-10 sm:w-16 h-full shrink-0 items-center justify-center border-r p-2 flex",children:mf("div",{className:"flex flex-col items-center justify-center",children:[v0("span",{className:"text-muted-foreground text-xs",children:P("week")}),v0("span",{className:"font-medium",children:f.week()})]})}),q.map((A,K)=>{let _=A.isSame(F(),"day"),N=`week-day-header-${A.toISOString()}`;return mf(y,{className:U("hover:bg-accent flex-1 flex flex-col justify-center cursor-pointer p-1 text-center sm:p-2 border-r last:border-r-0 w-50 h-full",_&&"bg-primary/10 font-bold"),"data-testid":`week-day-header-${A.format("dddd").toLowerCase()}`,delay:K*0.05,onClick:()=>{J(A),X({start:A})},transitionKey:N,children:[v0("div",{className:"text-xs sm:text-sm",children:A.format("ddd")}),v0("div",{className:U("mx-auto mt-1 flex h-5 w-5 items-center justify-center rounded-full text-xs",_&&"bg-primary text-primary-foreground"),children:Intl.DateTimeFormat(z,{day:"numeric"}).format(A.toDate())})]},N)})]})})},X2=P3;import{jsx as i0,jsxs as IP}from"react/jsx-runtime";var f3=["S","M","T","W","T","F","S"],$3=["bg-primary","bg-blue-500","bg-green-500"],z3=42,Z3=(P)=>{if(P===0)return"";let f=P>1?"s":"";return`${P} event${f}`},J3=()=>{let{currentDate:P,selectDate:f,events:$,setView:J,getEventsForDateRange:X,t:z}=U0(),Q=P.year(),Y=()=>{return Array.from({length:12},(K,_)=>{let N=F().year(Q).month(_).startOf("month"),L=$.filter((W)=>W.start.year()===Q&&W.start.month()===_);return{date:N,name:N.format("MMMM"),eventCount:L.length,monthKey:N.format("MM")}})},Z=(K)=>{let _=K.startOf("month").startOf("week");return Array.from({length:z3},(N,L)=>{let W=_.add(L,"day"),V=W.startOf("day"),B=W.endOf("day"),R=X(V,B);return{date:W,dayKey:W.format("YYYY-MM-DD"),isInCurrentMonth:W.month()===K.month(),isToday:W.isSame(F(),"day"),isSelected:W.isSame(P,"day"),eventCount:R.length}})},q=(K,_,N)=>{N?.stopPropagation(),f(K),J(_)},G=(K)=>{let _=K===1?z("event"):z("events");return`${K} ${_}`},p=(K)=>{let N=K.isInCurrentMonth?"":"text-muted-foreground opacity-50",L=K.isToday?"bg-primary text-primary-foreground rounded-full":"",W=K.isSelected&&!K.isToday?"bg-muted rounded-full font-bold":"",V=K.eventCount>0&&!K.isToday&&!K.isSelected?"font-medium":"";return U("relative flex aspect-square w-full cursor-pointer flex-col items-center justify-center hover:bg-accent rounded-sm transition-colors duration-200",N,L,W,V)},O=(K,_)=>{return U("h-[3px] w-[3px] rounded-full",_?"bg-primary-foreground":K)},A=Y();return IP(B0,{className:"h-full","data-testid":"year-view",children:[i0("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:A.map((K,_)=>{let N=Z(K.date),L=_*0.05;return IP("div",{className:"hover:border-primary flex flex-col rounded-lg border p-3 text-left transition-all duration-200 hover:shadow-md","data-testid":`year-month-${K.monthKey}`,children:[IP(y,{className:"mb-2 flex items-center justify-between",delay:L,transitionKey:`month-${_}`,children:[i0("button",{className:"text-lg font-medium hover:underline cursor-pointer","data-testid":`year-month-title-${K.monthKey}`,onClick:()=>q(K.date,"month"),type:"button",children:K.name}),K.eventCount>0&&i0("span",{className:"bg-primary text-primary-foreground rounded-full px-2 py-1 text-xs","data-testid":`year-month-event-count-${K.monthKey}`,children:G(K.eventCount)})]},`month-${_}`),IP("div",{className:"grid grid-cols-7 gap-[1px] text-[0.6rem]","data-testid":`year-mini-calendar-${K.monthKey}`,children:[f3.map((W,V)=>i0("div",{className:"text-muted-foreground h-3 text-center",children:W},`header-${V}`)),N.map((W)=>{let V=`year-day-${K.date.format("YYYY-MM")}-${W.dayKey}`,B=W.eventCount>0,R=Math.min(W.eventCount,3),S=$3.slice(0,R);return IP("button",{className:p(W),"data-testid":V,onClick:(k)=>q(W.date,"day",k),title:Z3(W.eventCount),type:"button",children:[i0("span",{className:"text-center leading-none",children:W.date.date()}),B&&i0("div",{className:U("absolute bottom-0 flex w-full justify-center space-x-[1px]",W.isToday&&"bottom-[1px]"),children:S.map((k)=>i0("span",{className:O(k,W.isToday)},k))})]},W.dayKey)})]})]},K.monthKey)})}),i0(b0,{className:"z-30"})]})},q2=J3;import{useCallback as bf,useMemo as X3}from"react";import{jsx as q3}from"react/jsx-runtime";var Q2=({children:P,events:f=[],firstDayOfWeek:$=0,initialView:J="month",initialDate:X,renderEvent:z,onEventClick:Q,onCellClick:Y,onViewChange:Z,onEventAdd:q,onEventUpdate:G,onEventDelete:p,onDateChange:O,locale:A,timezone:K,disableCellClick:_,disableEventClick:N,disableDragAndDrop:L,dayMaxEvents:W,eventSpacing:V=H0,stickyViewHeader:B=!0,viewHeaderClassName:R="",headerComponent:S,headerClassName:k,businessHours:h,renderEventForm:C,translations:D,translator:l,timeFormat:u="12-hour",classesOverride:d,renderCurrentTimeIndicator:c,hideNonBusinessHours:w=!1})=>{let b=EP({events:f,firstDayOfWeek:$,initialView:J,initialDate:X,businessHours:h,onEventAdd:q,onEventUpdate:G,onEventDelete:p,onDateChange:O,onViewChange:Z,locale:A,timezone:K,translations:D,translator:l}),p0=bf((t)=>{b.setSelectedEvent(t),b.setIsEventFormOpen(!0)},[b]),Q0=bf((t)=>{if(N)return;if(Q)Q(t);else p0(t)},[N,Q,p0]),z0=bf((t)=>{if(_)return;if(Y)Y(t);else b.openEventForm(t)},[Y,_,b]),N0=X3(()=>({currentDate:b.currentDate,view:b.view,events:b.events,rawEvents:b.rawEvents,currentLocale:b.currentLocale,isEventFormOpen:b.isEventFormOpen,selectedEvent:b.selectedEvent,selectedDate:b.selectedDate,firstDayOfWeek:b.firstDayOfWeek,setCurrentDate:b.setCurrentDate,selectDate:b.selectDate,setView:b.setView,nextPeriod:b.nextPeriod,prevPeriod:b.prevPeriod,today:b.today,addEvent:b.addEvent,updateEvent:b.updateEvent,updateRecurringEvent:b.updateRecurringEvent,deleteEvent:b.deleteEvent,deleteRecurringEvent:b.deleteRecurringEvent,openEventForm:b.openEventForm,closeEventForm:b.closeEventForm,getEventsForDateRange:b.getEventsForDateRange,findParentRecurringEvent:b.findParentRecurringEvent,renderEvent:z,onEventClick:Q0,onCellClick:z0,locale:A,timezone:K,disableCellClick:_,disableEventClick:N,disableDragAndDrop:L,dayMaxEvents:W,eventSpacing:V,stickyViewHeader:B,viewHeaderClassName:R,headerComponent:S,headerClassName:k,businessHours:h,renderEventForm:C,t:b.t,timeFormat:u,classesOverride:d,renderCurrentTimeIndicator:c,hideNonBusinessHours:w}),[b,z,Q0,z0,A,K,_,N,L,W,V,B,R,S,k,h,C,u,d,c,w]);return q3(XP.Provider,{value:N0,children:P})};import{jsx as A0,jsxs as _3}from"react/jsx-runtime";var Q3=()=>{let{view:P,dayMaxEvents:f}=U0();return _3("div",{className:"flex flex-col w-full h-full","data-testid":"ilamy-calendar",children:[A0(BP,{className:"p-1"}),A0(jP,{children:A0(y,{className:"w-full h-[calc(100%-3.5rem)]",direction:"horizontal",transitionKey:P,children:A0("div",{className:"border h-full w-full","data-testid":"calendar-body",children:{month:A0(z2,{dayMaxEvents:f},"month"),week:A0(X2,{},"week"),day:A0(t5,{},"day"),year:A0(q2,{},"year")}[P]})})}),A0(dP,{})]})},Y3=({events:P,firstDayOfWeek:f="sunday",initialView:$="month",initialDate:J,dayMaxEvents:X=QP,eventSpacing:z=H0,stickyViewHeader:Q=!0,viewHeaderClassName:Y="",timeFormat:Z="12-hour",hideNonBusinessHours:q=!1,...G})=>{return A0(Q2,{dayMaxEvents:X,eventSpacing:z,events:kP(P),firstDayOfWeek:YP[f],hideNonBusinessHours:q,initialDate:PP(J),initialView:$,stickyViewHeader:Q,timeFormat:Z,viewHeaderClassName:Y,...G,children:A0(Q3,{})})};import{jsx as K3}from"react/jsx-runtime";var NP=({days:P,gridType:f="day",children:$,classes:J})=>{let{getVisibleResources:X}=o(),z=X(),Q=P.map((Z)=>{let q=Array.isArray(Z);return{id:`col-${q?Z[0]?.format("YYYY-MM-DD"):Z.toISOString()}`,day:q?void 0:Z,days:q?Z:void 0,className:J?.cell,gridType:f}}),Y=z.map((Z)=>({id:Z.id,title:Z.title,resource:Z,columns:Q}));return K3(ff,{classes:J,dayNumberHeight:0,gridType:f,rows:Y,children:$})};import{jsx as wP,jsxs as p3}from"react/jsx-runtime";var Y2=()=>{let{currentDate:P,t:f,currentLocale:$,timeFormat:J,businessHours:X,hideNonBusinessHours:z,getVisibleResources:Q}=o(),Y=Q(),Z=L0({referenceDate:P,businessHours:X,hideNonBusinessHours:z,allDates:[P],resourceBusinessHours:Y.map((q)=>q.businessHours).filter(Boolean)});return p3(NP,{classes:{header:"min-w-full",body:"min-w-full",cell:"min-w-20 flex-1"},days:Z,gridType:"hour",children:[wP("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:wP("div",{className:"text-sm",children:f("resources")})}),wP("div",{className:"flex-1 flex flex-col",children:wP("div",{className:"flex h-12",children:Z.map((q,G)=>{let p=q.isSame(F(),"hour"),O=`resource-day-header-${q.toISOString()}`;return wP(y,{className:U("min-w-20 flex-1 border-b border-r last:border-r-0 flex items-center justify-center text-xs shrink-0",p&&"bg-blue-50 text-blue-600 font-medium"),"data-testid":`resource-day-time-label-${q.format("HH")}`,delay:G*0.05,transitionKey:`${O}-motion`,children:Intl.DateTimeFormat($,{hour:"numeric",hour12:J==="12-hour"}).format(q.toDate())},`${O}-animated`)})})})]})};import{jsx as WP,jsxs as _2}from"react/jsx-runtime";var K2=()=>{let{currentDate:P,getVisibleResources:f,currentLocale:$,timeFormat:J,businessHours:X,hideNonBusinessHours:z}=o(),Q=f(),Y=L0({referenceDate:P,businessHours:X,hideNonBusinessHours:z,allDates:[P],resourceBusinessHours:Q.map((G)=>G.businessHours).filter(Boolean)}),Z={id:"time-col",day:void 0,days:Y,className:"shrink-0 w-16 min-w-16 max-w-16 sticky left-0 bg-background z-20",gridType:"hour",noEvents:!0,renderCell:(G)=>WP("div",{className:"text-muted-foreground p-2 text-right text-[10px] sm:text-xs flex flex-col items-center",children:Intl.DateTimeFormat($,{hour:"numeric",hour12:J==="12-hour"}).format(G.toDate())})},q=Q.map((G)=>({id:`day-col-${P.format("YYYY-MM-DD")}-resource-${G.id}`,resourceId:G.id,resource:G,days:Y,day:P,gridType:"hour"}));return WP(M0,{allDayRow:_2("div",{className:"flex w-full",children:[WP(LP,{}),Q.map((G)=>WP(x0,{classes:{cell:"min-w-50"},days:[P],resource:G,showSpacer:!1},`resource-allday-row-${G.id}`))]}),cellSlots:[0,15,30,45],classes:{body:"w-full",header:"w-full"},columns:[Z,...q],"data-testid":"resource-day",gridType:"hour",children:_2("div",{className:"flex border-b h-12 flex-1","data-testid":"resource-month-header",children:[WP("div",{className:"shrink-0 border-r w-16 sticky top-0 left-0 bg-background z-20"}),Q.map((G)=>WP(E0,{className:"min-w-50 flex-1",resource:G},`resource-cell-${G.id}`))]})})};import{jsx as p2}from"react/jsx-runtime";var U2=()=>{let{orientation:P}=o();if(P==="vertical")return p2(K2,{});return p2(Y2,{})};import{useMemo as U3}from"react";import{jsx as $f,jsxs as L2}from"react/jsx-runtime";var G2=()=>{let{currentDate:P,t:f}=o(),$=U3(()=>{return Df(P)},[P]);return L2(NP,{days:$,children:[$f("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:$f("div",{className:"text-sm",children:f("resources")})}),$.map((J,X)=>{let z=`resource-month-header-${J.toISOString()}`;return L2(y,{className:"w-20 border-b border-r shrink-0 flex items-center justify-center flex-col",delay:X*0.05,transitionKey:`${z}-motion`,children:[$f("div",{className:"text-xs font-medium",children:J.format("D")}),$f("div",{className:"text-xs text-muted-foreground",children:J.format("ddd")})]},`${z}-animated`)})]})};import{jsx as HP,jsxs as A2}from"react/jsx-runtime";var N2=()=>{let{currentDate:P,getVisibleResources:f}=o(),$=f(),J=P.startOf("month"),X=Array.from({length:P.daysInMonth()},(Y,Z)=>J.add(Z,"day")),z={id:"date-col",days:X,day:void 0,className:"shrink-0 w-16 min-w-16 max-w-16 sticky left-0 bg-background z-20",gridType:"day",noEvents:!0,renderCell:(Y)=>A2("div",{className:"text-muted-foreground p-2 text-right text-[10px] sm:text-xs flex flex-col items-center",children:[HP("span",{children:Y.format("D")}),HP("span",{children:Y.format("ddd")})]})},Q=$.map((Y)=>({id:`month-col-resource-${Y.id}`,day:void 0,resourceId:Y.id,days:X,gridType:"day"}));return HP(M0,{classes:{header:"w-full",body:"w-full"},columns:[z,...Q],"data-testid":"resource-month-vertical-grid",children:A2("div",{className:"flex border-b h-12 flex-1","data-testid":"resource-month-header",children:[HP("div",{className:"shrink-0 border-r w-16 sticky top-0 left-0 bg-background z-20"}),$.map((Y)=>HP(E0,{className:"min-w-50 flex-1",resource:Y},`resource-cell-${Y.id}`))]})})};import{jsx as W2}from"react/jsx-runtime";var O2=()=>{let{orientation:P}=o();if(P==="vertical")return W2(N2,{});return W2(G2,{})};import{useMemo as If}from"react";import{jsx as o0,jsxs as wf}from"react/jsx-runtime";var F2=()=>{let{currentDate:P,firstDayOfWeek:f,t:$,currentLocale:J,timeFormat:X,businessHours:z,hideNonBusinessHours:Q,getVisibleResources:Y}=o(),Z=Y(),q=If(()=>J0(P,f),[P,f]),G=If(()=>Z.map((O)=>O.businessHours).filter(Boolean),[Z]),p=If(()=>{return q.map((O)=>L0({referenceDate:O,businessHours:z,hideNonBusinessHours:Q,resourceBusinessHours:G}))},[q,z,Q,G]);return wf(NP,{classes:{header:"h-24 min-w-full",body:"min-w-full",cell:"min-w-20 flex-1"},days:p,gridType:"hour",children:[o0("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:o0("div",{className:"text-sm",children:$("resources")})}),wf("div",{className:"flex-1 flex flex-col",children:[o0("div",{className:"flex h-12",children:q.map((O,A)=>{let K=O.isSame(F(),"day"),_=`resource-week-header-${O.toISOString()}-day`;return o0(y,{className:U("shrink-0 border-r last:border-r-0 border-b flex-1 flex items-center text-center font-medium",K&&"bg-blue-50 text-blue-600"),"data-testid":"resource-week-day-header",delay:A*0.05,transitionKey:`${_}-motion`,children:wf("div",{className:"sticky left-1/2",children:[o0("div",{className:"text-sm",children:O.format("ddd")}),o0("div",{className:"text-xs text-muted-foreground",children:O.format("M/D")})]})},`${_}-animated`)})}),o0("div",{className:"flex h-12 border-b",children:p.flat().map((O,A)=>{let K=O.isSame(F(),"hour"),_=`resource-week-header-${O.toISOString()}-hour`;return o0(y,{className:U("min-w-20 flex-1 border-r flex items-center justify-center text-xs shrink-0",K&&"bg-blue-50 text-blue-600 font-medium"),"data-testid":`resource-week-time-label-${O.format("HH")}`,delay:A*0.005,transitionKey:`${_}-motion`,children:Intl.DateTimeFormat(J,{hour:"numeric",hour12:X==="12-hour"}).format(O.toDate())},`${_}-animated`)})})]})]})};import{useMemo as zf}from"react";import{jsx as K0,jsxs as TP}from"react/jsx-runtime";var V2=()=>{let{currentDate:P,getVisibleResources:f,firstDayOfWeek:$,currentLocale:J,timeFormat:X,t:z,businessHours:Q,hideNonBusinessHours:Y}=o(),Z=f(),q=zf(()=>J0(P,$),[P,$]),G=zf(()=>L0({referenceDate:P,businessHours:Q,hideNonBusinessHours:Y,allDates:q,resourceBusinessHours:Z.map((A)=>A.businessHours).filter(Boolean)}),[P,Q,Y,q,Z]),p=zf(()=>({id:"time-col",days:G,day:void 0,className:"shrink-0 w-16 min-w-16 max-w-16 sticky left-0 bg-background z-20",gridType:"hour",noEvents:!0,renderCell:(A)=>K0("div",{className:"text-muted-foreground p-2 text-right text-[10px] sm:text-xs flex flex-col items-center",children:Intl.DateTimeFormat(J,{hour:"numeric",hour12:X==="12-hour"}).format(A.toDate())})}),[G,J,X]),O=zf(()=>Z.flatMap((A)=>q.map((K)=>({id:`day-col-${K.format("YYYY-MM-DD")}-resource-${A.id}`,resourceId:A.id,resource:A,day:K,days:G.map((_)=>K.hour(_.hour()).minute(0).second(0).millisecond(0)),gridType:"hour"}))),[Z,q,G]);return K0(M0,{allDayRow:TP("div",{className:"flex",children:[K0(LP,{}),Z.map((A)=>K0(x0,{classes:{cell:"min-w-50"},days:q,resource:A,showSpacer:!1},`resource-week-allday-row-${A.id}`))]}),classes:{header:"h-24"},columns:[p,...O],"data-testid":"resource-week",gridType:"hour",children:TP("div",{className:"flex-1 flex flex-col",children:[TP("div",{className:"flex h-12",children:[K0("div",{className:"shrink-0 w-16 border-r z-20 bg-background sticky left-0",children:K0("span",{className:"px-2 h-full w-full flex justify-center items-end text-xs text-muted-foreground",children:z("week")})}),Z.map((A,K)=>{let _=`resource-week-header-${A.id}-day`;return K0(y,{className:U("shrink-0 border-r last:border-r-0 border-b flex items-center text-center font-medium w-[calc(7*var(--spacing)*50)]"),delay:K*0.05,transitionKey:`${_}-motion`,children:K0(E0,{className:"h-full w-full flex-1",resource:A,children:K0("div",{className:"sticky left-1/2 text-sm font-medium truncate",children:A.title})})},`${_}-animated`)})]}),TP("div",{className:"flex h-12",children:[K0("div",{className:"shrink-0 w-16 border-r border-b z-20 bg-background sticky left-0",children:K0("span",{className:"px-2 h-full w-full flex justify-center items-start font-medium",children:P.week()})}),O.map((A,K)=>{let _=A.day,N=`resource-week-header-${_.toISOString()}-hour-${A.resourceId}`;return TP(y,{className:U("w-50 border-r last:border-r-0 border-b flex flex-col items-center justify-center text-xs shrink-0 bg-background"),"data-testid":`resource-week-time-label-${_.format("HH")}`,delay:K*0.05,transitionKey:`${N}-motion`,children:[K0("div",{className:"text-sm",children:_.format("ddd")}),K0("div",{className:"text-xs text-muted-foreground",children:_.format("M/D")})]},`${N}-animated`)})]})]})})};import{jsx as B2}from"react/jsx-runtime";var M2=()=>{let{orientation:P}=o();if(P==="vertical")return B2(V2,{});return B2(F2,{})};import{jsx as l0,jsxs as L3}from"react/jsx-runtime";var S2=()=>{let{view:P}=o();return L3("div",{className:"flex flex-col w-full h-full","data-testid":"ilamy-resource-calendar",children:[l0(BP,{className:"p-1"}),l0(jP,{children:l0(y,{className:"w-full h-[calc(100%-3.5rem)] @container/calendar-body",direction:"horizontal",transitionKey:P,children:l0("div",{className:"border h-full w-full","data-testid":"calendar-body",children:{month:l0(O2,{},"month"),week:l0(M2,{},"week"),day:l0(U2,{},"day")}[P]})})}),l0(dP,{})]})};import{jsx as R2}from"react/jsx-runtime";var G3=({events:P=[],resources:f=[],firstDayOfWeek:$="sunday",initialView:J="month",initialDate:X,disableDragAndDrop:z=!1,dayMaxEvents:Q=QP,timeFormat:Y="12-hour",eventSpacing:Z=H0,...q})=>{return R2(cf,{dayMaxEvents:Q,disableDragAndDrop:z,eventSpacing:Z,events:kP(P),firstDayOfWeek:YP[$],initialDate:PP(X),initialView:J,resources:f,timeFormat:Y,...q,children:R2(S2,{})})};export{s2 as useIlamyResourceCalendarContext,n2 as useIlamyCalendarContext,fP as isRecurringEvent,Jf as generateRecurringEvents,qf as defaultTranslations,YX as RRule,G3 as IlamyResourceCalendar,Y3 as IlamyCalendar};
1
+ import{RRule as Qq}from"rrule";import{AnimatePresence as j1,motion as x1}from"motion/react";import{clsx as D1}from"clsx";import{twMerge as E1}from"tailwind-merge";import N0 from"dayjs";import S1 from"dayjs/plugin/isBetween.js";import b1 from"dayjs/plugin/isSameOrAfter.js";import H1 from"dayjs/plugin/isSameOrBefore.js";import T1 from"dayjs/plugin/localeData.js";import w1 from"dayjs/plugin/minMax.js";import m1 from"dayjs/plugin/timezone.js";import k1 from"dayjs/plugin/utc.js";import h1 from"dayjs/plugin/weekday.js";import g1 from"dayjs/plugin/weekOfYear.js";var g5,C1=(P,$,Z)=>{let X=$.prototype,q=Z.tz.setDefault;Z.tz.setDefault=(J)=>{return g5=J,q(J)};let{startOf:f,endOf:Y}=X;function _(J,Q){let A=J.$x?.$timezone||g5;if(!A)return Q;let z=Z.tz(Q.format("YYYY-MM-DDTHH:mm:ss"),A).utcOffset();if(Q.utcOffset()!==z)return Q.tz(A,!0);return Q}X.startOf=function(J,Q){let A=f.call(this,J,Q);return _(this,A)},X.endOf=Y};N0.extend(h1);N0.extend(g1);N0.extend(b1);N0.extend(H1);N0.extend(S1);N0.extend(w1);N0.extend(m1);N0.extend(k1);N0.extend(T1);N0.extend(C1);var C5=(...P)=>{return N0.tz(...P)};Object.assign(C5,N0);var M=C5;function U(...P){return E1(D1(P))}function $P(P){if(P===void 0)return;if(M.isDayjs(P))return P;let $=M(P);return $.isValid()?$:void 0}var D5=(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:M.isDayjs($.start)?$.start:M($.start),end:M.isDayjs($.end)?$.end:M($.end)}})}import{jsx as E5}from"react/jsx-runtime";var y1={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:q="vertical",layout:f,layoutId:Y,"data-testid":_,ref:J,...Q})=>E5(j1,{mode:"wait",children:E5(x1.div,{animate:"visible",className:U("inline-block w-full",X),custom:{delay:Z,direction:q},"data-testid":_,exit:"exit",initial:"hidden",layout:f,layoutId:Y,ref:J,variants:y1,...Q,children:P},$)});D.displayName="AnimatedSection";import{DndContext as J4,MouseSensor as X4,pointerWithin as q4,TouchSensor as Q4,useSensor as e5,useSensors as Y4}from"@dnd-kit/core";import{useRef as P2,useState as _4}from"react";import{Slot as v1}from"@radix-ui/react-slot";import{cva as c1}from"class-variance-authority";import{jsx as o1}from"react/jsx-runtime";var kP=c1("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 k({className:P,variant:$,size:Z,asChild:X=!1,...q}){return o1(X?v1:"button",{className:U(kP({variant:$,size:Z,className:P})),"data-slot":"button",...q})}import*as Q0 from"@radix-ui/react-dialog";import{XIcon as l1}from"lucide-react";import{jsx as O0,jsxs as q5}from"react/jsx-runtime";function ZP({...P}){return O0(Q0.Root,{"data-slot":"dialog",...P})}function i1({...P}){return O0(Q0.Portal,{"data-slot":"dialog-portal",...P})}function u1({className:P,...$}){return O0(Q0.Overlay,{className:U("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 fP({className:P,children:$,...Z}){return q5(i1,{"data-slot":"dialog-portal",children:[O0(u1,{}),q5(Q0.Content,{className:U("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:[$,q5(Q0.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(l1,{}),O0("span",{className:"sr-only",children:"Close"})]})]})]})}function JP({className:P,...$}){return O0("div",{className:U("flex flex-col gap-2 text-center sm:text-left",P),"data-slot":"dialog-header",...$})}function hP({className:P,...$}){return O0("div",{className:U("flex flex-col-reverse gap-2 sm:flex-row sm:justify-end",P),"data-slot":"dialog-footer",...$})}function XP({className:P,...$}){return O0(Q0.Title,{className:U("text-lg leading-none font-semibold",P),"data-slot":"dialog-title",...$})}function gP({className:P,...$}){return O0(Q0.Description,{className:U("text-muted-foreground text-sm",P),"data-slot":"dialog-description",...$})}import{useContext as a5}from"react";import{createContext as d1}from"react";var CP=d1(void 0);import{createContext as r1}from"react";var DP=r1(void 0);import{useCallback as L0,useMemo as t1,useState as u5}from"react";import{useCallback as Z0,useEffect as _5,useMemo as l5,useRef as K5,useState as t0}from"react";import{RRule as a1}from"rrule";var EP=(P)=>{return new Date(Date.UTC(P.year(),P.month(),P.date(),P.hour(),P.minute(),P.second(),P.millisecond()))},n1=(P,$)=>{return $.year(P.getUTCFullYear()).month(P.getUTCMonth()).date(P.getUTCDate()).hour(P.getUTCHours()).minute(P.getUTCMinutes()).second(P.getUTCSeconds()).millisecond(P.getUTCMilliseconds())},qP=(P)=>{return Boolean(P.rrule||P.recurrenceId||P.uid)},B0=(P)=>{return P.uid||`${P.id}@ilamy.calendar`},Q5=({event:P,currentEvents:$,startDate:Z,endDate:X})=>{if(!P.rrule)return[];try{let q=EP(P.start),f=P.rrule.until?EP(M(P.rrule.until)):void 0,Y={...P.rrule,dtstart:q,until:f},_=new a1(Y),J=B0(P),Q=$.filter((G)=>G.recurrenceId&&B0(G)===J),A=P.end.diff(P.start),z=EP(Z.subtract(A,"millisecond")),p=EP(X);return _.between(z,p,!0).map((G,N)=>{let K=n1(G,P.start),W=Q.find((h)=>$P(h.recurrenceId)?.isSame(K));if(W)return{...P,...W};let B=P.end.diff(P.start),I=K.add(B,"millisecond"),S=`${P.id}_${N}`,O=B0(P);return{...P,id:S,start:K,end:I,uid:O,rrule:void 0}}).filter((G)=>{if(P.exdates&&P.exdates.length>0){let W=G.start.toISOString();if(P.exdates?.includes(W))return!1}return G.start.isSameOrBefore(X)&&G.end.isSameOrAfter(Z)})}catch(q){throw Error(`Invalid RRULE options: ${JSON.stringify(P.rrule)}. Error: ${q instanceof Error?q.message:"Unknown error"}`)}},j5=({targetEvent:P,updates:$,currentEvents:Z,scope:X})=>{let q=[...Z],f=B0(P),Y=q.findIndex((J)=>{return B0(J)===f&&J.rrule&&!J.recurrenceId});if(Y===-1)throw Error("Base recurring event not found");let _=q[Y];switch(X){case"this":{let J=P.start.toISOString(),A=[..._.exdates||[],J],z={..._,exdates:A};q[Y]=z;let p=`${P.id}_modified_${Date.now()}`,F={...D5(P,["width","height","top","left","right"]),...$,id:p,recurrenceId:J,uid:B0(_),rrule:void 0};q.push(F);break}case"following":{let Q=P.start.subtract(1,"day").endOf("day").toDate(),A={..._,rrule:{..._.rrule,until:Q}};q[Y]=A;let z=_.end.diff(_.start),p=$.start||P.start,F=$.end||p.add(z),L=`${_.id}_following`,G=`${L}@ilamy.calendar`,N={..._,...$,rrule:{..._.rrule,...$.rrule,dtstart:p.toDate()},id:L,uid:G,start:p,end:F,recurrenceId:void 0};q.push(N);break}case"all":{let J={..._,...$};q[Y]=J;break}default:throw Error(`Invalid scope: ${X}. Must be 'this', 'following', or 'all'`)}return q},x5=({targetEvent:P,currentEvents:$,scope:Z})=>{let X=[...$],q=B0(P),f=X.findIndex((_)=>{return B0(_)===q&&_.rrule&&!_.recurrenceId});if(f===-1)throw Error("Base recurring event not found");let Y=X[f];switch(Z){case"this":{let _=P.start.toISOString(),Q=[...Y.exdates||[],_],A={...Y,exdates:Q};X[f]=A;break}case"following":{let J=P.start.subtract(1,"day").endOf("day").toDate(),Q={...Y,rrule:{...Y.rrule,until:J}};X[f]=Q;break}case"all":{let _=B0(P);return X.filter((Q)=>B0(Q)!==_)}default:throw Error(`Invalid scope: ${Z}. Must be 'this', 'following', or 'all'`)}return X};var Y5={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",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",sunday:"Sunday",monday:"Monday",tuesday:"Tuesday",wednesday:"Wednesday",thursday:"Thursday",friday:"Friday",saturday:"Saturday",sun:"Sun",mon:"Mon",tue:"Tue",wed:"Wed",thu:"Thu",fri:"Fri",sat:"Sat",january:"January",february:"February",march:"March",april:"April",may:"May",june:"June",july:"July",august:"August",september:"September",october:"October",november:"November",december:"December"};function Y0(P,$){let Z=P.startOf("week").day($),X=P.isBefore(Z)?Z.subtract(1,"week"):Z;return Array.from({length:7},(q,f)=>X.add(f,"day"))}function jP(P,$){let Z=Y0(P.startOf("month"),$);return Array.from({length:6},(X,q)=>{let f=Z[0].add(q,"week");return Y0(f,$)})}function y5(P){let $=P.daysInMonth(),Z=P.startOf("month");return Array.from({length:$},(X,q)=>Z.add(q,"day"))}function v5({referenceDate:P=M(),length:$=24}={}){let Z=P.startOf("day");return Array.from({length:$},(X,q)=>Z.hour(q).minute(0).second(0).millisecond(0))}var h0=1,c5=24,W0=24,QP=4,o5="bg-secondary text-muted-foreground pointer-events-none",g0={sunday:0,monday:1,tuesday:2,wednesday:3,thursday:4,friday:5,saturday:6};var i5={day:"day",week:"week",month:"month",year:"year"},xP=(P,$,Z)=>{if($==="day")return{start:P.startOf("day"),end:P.endOf("day")};if($==="year")return{start:P.startOf("year"),end:P.endOf("year")};if($==="week"){let q=Y0(P,Z);return{start:q[0].startOf("day"),end:q[6].endOf("day")}}let X=jP(P,Z);return{start:X[0][0].startOf("day"),end:X[5][6].endOf("day")}},yP=(P)=>{let{events:$=[],firstDayOfWeek:Z=0,initialView:X="month",initialDate:q=M(),businessHours:f,onEventAdd:Y,onEventUpdate:_,onEventDelete:J,onDateChange:Q,onViewChange:A,locale:z,timezone:p,translations:F,translator:L}=P,[G,N]=t0(M.isDayjs(q)?q:M(q)),[K,W]=t0(X),[B,I]=t0($),[S,O]=t0(!1),[w,h]=t0(null),[l,d]=t0(null),[y,j]=t0(z||"en"),x=K5($),C=K5(p),s=K5(z),X0=l5(()=>{if(L)return L;if(F)return(R)=>F[R]||R;return(R)=>Y5[R]||R},[F,L]),H=Z0((R,m)=>{let i=[];for(let u of B)if(u.rrule)i.push(...Q5({event:u,currentEvents:B,startDate:R,endDate:m}));else{let T=u.start.isSameOrAfter(R)&&u.start.isSameOrBefore(m),n=u.end.isSameOrAfter(R)&&u.end.isSameOrBefore(m),V0=u.start.isBefore(R)&&u.end.isAfter(m);if(T||n||V0)i.push(u)}return i},[B]),g=Z0(()=>{return xP(G,K,Z)},[G,K,Z]),e=l5(()=>{let{start:R,end:m}=g();return H(R,m)},[H,g]);_5(()=>{if($!==x.current)I($),x.current=$},[$]),_5(()=>{if(z&&z!==s.current)j(z),M.locale(z),N((R)=>R.locale(z)),s.current=z},[z]),_5(()=>{if(p&&p!==C.current)M.tz.setDefault(p),N((R)=>R.tz(p)),I((R)=>R.map((m)=>({...m,start:m.start.tz(p),end:m.end.tz(p)}))),C.current=p},[p]);let P0=Z0((R)=>{N(R);let m=xP(R,K,Z);Q?.(R,m)},[Q,K,Z]),q0=Z0((R)=>{N((m)=>{let i=R===1?m.add(1,i5[K]):m.subtract(1,i5[K]),u=xP(i,K,Z);return Q?.(i,u),i})},[K,Q,Z]),r=Z0(()=>q0(1),[q0]),o=Z0(()=>q0(-1),[q0]),e0=Z0(()=>{let R=M();N(R);let m=xP(R,K,Z);Q?.(R,m)},[Q,K,Z]),PP=Z0((R)=>{I((m)=>[...m,R]),Y?.(R)},[Y]),S0=Z0((R,m)=>{I((i)=>i.map((u)=>{if(u.id!==R)return u;let T={...u,...m};return _?.(T),T}))},[_]),r0=Z0((R,m,i)=>{_?.({...R,...m}),I(j5({targetEvent:R,updates:m,currentEvents:B,scope:i.scope}))},[B,_]),a0=Z0((R,m)=>{J?.(R),I(x5({targetEvent:R,currentEvents:B,scope:m.scope}))},[B,J]),n0=Z0((R)=>{I((m)=>{let i=m.find((u)=>u.id===R);if(i)J?.(i);return m.filter((u)=>u.id!==R)})},[J]),b=Z0((R)=>{if(R?.start)d(R.start);let m=R?.start??G;h({title:X0("newEvent"),start:m,end:R?.end??m.add(1,"hour"),resourceId:R?.resourceId,description:"",allDay:R?.allDay??!1}),O(!0)},[G,X0]),z0=Z0(()=>{d(null),h(null),O(!1)},[]),b0=Z0((R)=>{W(R),A?.(R)},[A]),H0=Z0((R)=>{let m=R.uid;return B.find((i)=>(i.uid||`${i.id}@ilamy.calendar`)===m&&i.rrule)||null},[B]);return{currentDate:G,view:K,events:e,rawEvents:B,isEventFormOpen:S,selectedEvent:w,selectedDate:l,firstDayOfWeek:Z,dayMaxEvents:QP,currentLocale:y,businessHours:f,setCurrentDate:N,selectDate:P0,setView:b0,nextPeriod:r,prevPeriod:o,today:e0,addEvent:PP,updateEvent:S0,updateRecurringEvent:r0,deleteEvent:n0,deleteRecurringEvent:a0,openEventForm:b,closeEventForm:z0,setSelectedEvent:h,setIsEventFormOpen:O,setSelectedDate:d,getEventsForDateRange:H,findParentRecurringEvent:H0,t:X0}};import{jsx as s1}from"react/jsx-runtime";var d5=(P)=>{if(P.resourceIds)return P.resourceIds;if(P.resourceId!==void 0)return[P.resourceId];return[]},r5=({children:P,events:$=[],resources:Z=[],firstDayOfWeek:X=0,initialView:q="month",initialDate:f,renderEvent:Y,onEventClick:_,onCellClick:J,onViewChange:Q,onEventAdd:A,onEventUpdate:z,onEventDelete:p,onDateChange:F,locale:L,timezone:G,disableCellClick:N,disableEventClick:K,disableDragAndDrop:W,dayMaxEvents:B,eventSpacing:I=1,stickyViewHeader:S=!0,viewHeaderClassName:O="",headerComponent:w,headerClassName:h,translations:l,translator:d,renderResource:y,renderEventForm:j,businessHours:x,timeFormat:C="12-hour",classesOverride:s,orientation:X0="horizontal",renderCurrentTimeIndicator:H,hideNonBusinessHours:g=!1,hiddenDays:e})=>{let[P0]=u5(Z),[q0,r]=u5(new Set(Z.map((T)=>T.id))),o=yP({events:$,firstDayOfWeek:X,initialView:q,initialDate:f,businessHours:x,onEventAdd:A,onEventUpdate:z,onEventDelete:p,onDateChange:F,onViewChange:Q,locale:L,timezone:G,translations:l,translator:d}),e0=L0((T)=>{r((n)=>{let V0=new Set(n);if(V0.has(T))V0.delete(T);else V0.add(T);return V0})},[]),PP=L0((T)=>{r((n)=>new Set(n).add(T))},[]),S0=L0((T)=>{r((n)=>{let V0=new Set(n);return V0.delete(T),V0})},[]),r0=L0(()=>{r(new Set(P0.map((T)=>T.id)))},[P0]),a0=L0(()=>{r(new Set)},[]),n0=L0((T)=>{return o.events.filter((n)=>{if(n.resourceIds)return n.resourceIds.includes(T);return n.resourceId===T})},[o.events]),b=L0((T)=>{return o.events.filter((n)=>{return d5(n).some((I1)=>T.includes(I1))})},[o.events]),z0=L0((T)=>{return P0.find((n)=>n.id===T)},[P0]),b0=L0(()=>{return P0.filter((T)=>q0.has(T.id))},[P0,q0]),H0=L0((T)=>{return Boolean(T.resourceIds&&T.resourceIds.length>1)},[]),R=L0((T)=>{o.setSelectedEvent(T),o.setIsEventFormOpen(!0)},[o]),m=L0((T)=>{if(K)return;if(_)_(T);else R(T)},[K,_,R]),i=L0((T)=>{if(N)return;if(J)J(T);else{let n={title:o.t("newEvent"),start:T.start,end:T.end,description:"",allDay:!1};if(T.resourceId!==void 0)n.resourceId=T.resourceId;o.setSelectedEvent(n),o.setSelectedDate(T.start),o.setIsEventFormOpen(!0)}},[J,N,o]),u=t1(()=>({...o,view:o.view,setView:o.setView,events:o.events,rawEvents:o.rawEvents,resources:P0,visibleResources:q0,toggleResourceVisibility:e0,showResource:PP,hideResource:S0,showAllResources:r0,hideAllResources:a0,getEventsForResource:n0,getEventsForResources:b,getResourceById:z0,getVisibleResources:b0,isEventCrossResource:H0,getEventResourceIds:d5,onEventClick:m,onCellClick:i,headerComponent:w,headerClassName:h,renderEvent:Y,renderResource:y,renderEventForm:j,locale:L,timezone:G,disableCellClick:N,disableEventClick:K,disableDragAndDrop:W,dayMaxEvents:B,eventSpacing:I,stickyViewHeader:S,viewHeaderClassName:O,businessHours:x,timeFormat:C,classesOverride:s,orientation:X0,renderCurrentTimeIndicator:H,hideNonBusinessHours:g,hiddenDays:e}),[o,P0,q0,e0,PP,S0,r0,a0,n0,b,z0,b0,H0,m,i,Y,y,j,L,G,N,K,W,B,I,S,O,w,h,x,C,s,X0,H,g,e]);return s1(DP.Provider,{value:u,children:P})};function V(P){let $=a5(DP),Z=a5(CP),X=$||Z;if(!X)throw Error("useSmartCalendarContext must be used within a CalendarProvider or ResourceCalendarProvider");return P?P(X):X}function e1(){let P=V();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 G0,jsxs as s0}from"react/jsx-runtime";function WP({isOpen:P,onClose:$,onConfirm:Z,operationType:X,eventTitle:q}){let{t:f}=V((J)=>({t:J.t})),Y=(J)=>{Z(J),$()},_=X==="edit";return G0(ZP,{onOpenChange:$,open:P,children:s0(fP,{className:"max-w-md",children:[s0(JP,{children:[G0(XP,{children:_?f("editRecurringEvent"):f("deleteRecurringEvent")}),s0(gP,{children:['"',q,'"'," ",_?f("editRecurringEventQuestion"):f("deleteRecurringEventQuestion")]})]}),s0("div",{className:"space-y-3",children:[G0(k,{className:"w-full justify-start h-auto p-4",onClick:()=>Y("this"),variant:"outline",children:s0("div",{className:"text-left",children:[G0("div",{className:"font-medium",children:f("thisEvent")}),G0("div",{className:"text-sm text-muted-foreground",children:_?f("onlyChangeThis"):f("onlyDeleteThis")})]})}),G0(k,{className:"w-full justify-start h-auto p-4",onClick:()=>Y("following"),variant:"outline",children:s0("div",{className:"text-left",children:[G0("div",{className:"font-medium",children:f("thisAndFollowingEvents")}),G0("div",{className:"text-sm text-muted-foreground",children:_?f("changeThisAndFuture"):f("deleteThisAndFuture")})]})}),G0(k,{className:"w-full justify-start h-auto p-4",onClick:()=>Y("all"),variant:"outline",children:s0("div",{className:"text-left",children:[G0("div",{className:"font-medium",children:f("allEvents")}),G0("div",{className:"text-sm text-muted-foreground",children:_?f("changeEntireSeries"):f("deleteEntireSeries")})]})})]}),G0(hP,{children:G0(k,{onClick:$,variant:"outline",children:f("cancel")})})]})})}var n5=(P,$)=>{let{active:Z,over:X}=P;if(!Z||!X||!$)return null;let q=X.data.current||{},f=q.type==="time-cell",{resourceId:Y,allDay:_}=q,J;if(f){let{date:p,hour:F=0,minute:L=0}=q;J=M(p).hour(F).minute(L)}else{let{date:p}=q;J=M(p)}let Q=$.end.diff($.start,"second"),A=J.add(Q,"second");if(A.isSame(A.startOf("day")))A=A.subtract(1,"day").endOf("day");let z={start:J,end:A,resourceId:Y,allDay:f?!1:_??$.allDay};return{activeEvent:$,updates:z}};import{DragOverlay as P4}from"@dnd-kit/core";import{snapCenterToCursor as $4}from"@dnd-kit/modifiers";import{useImperativeHandle as Z4,useState as f4}from"react";import{jsx as t5}from"react/jsx-runtime";var s5=({ref:P})=>{let[$,Z]=f4(null);return Z4(P,()=>({setActiveEvent:Z})),t5(P4,{modifiers:[$4],children:$&&t5("div",{className:U("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 $2,jsxs as Z2,Fragment as K4}from"react/jsx-runtime";function vP({children:P}){let $=P2(null),Z=P2(null),{updateEvent:X,updateRecurringEvent:q,disableDragAndDrop:f}=V((K)=>({updateEvent:K.updateEvent,updateRecurringEvent:K.updateRecurringEvent,disableDragAndDrop:K.disableDragAndDrop})),[Y,_]=_4({isOpen:!1,event:null,updates:null}),J=e5(X4,{activationConstraint:{distance:2}}),Q=e5(Q4,{activationConstraint:{delay:100,tolerance:5}}),A=Y4(J,Q),z=(K,W)=>{if(!K||!K.id)return;if(!W||Object.keys(W).length===0)return;if(qP(K))_({isOpen:!0,event:K,updates:W});else X(K.id,W)},p=(K)=>{if(!Y.event||!Y.updates){_({isOpen:!1,event:null,updates:null});return}try{q(Y.event,Y.updates,{scope:K,eventDate:Y.event.start})}catch{}finally{_({isOpen:!1,event:null,updates:null})}},F=()=>{_({isOpen:!1,event:null,updates:null})},L=(K)=>{let{active:W}=K;if(W.data.current?.type==="calendar-event")Z.current?.setActiveEvent(W.data.current.event),$.current=W.data.current.event},G=(K)=>{let W=n5(K,$.current);if(W){let{activeEvent:B,updates:I}=W;z(B,I)}$.current=null,Z.current?.setActiveEvent(null)},N=(K)=>{$.current=null};if(f)return P;return Z2(K4,{children:[Z2(J4,{collisionDetection:q4,onDragCancel:N,onDragEnd:G,onDragStart:L,sensors:A,children:[P,$2(s5,{ref:Z})]}),$2(WP,{eventTitle:Y.event?.title||"",isOpen:Y.isOpen,onClose:F,onConfirm:p,operationType:"edit"})]})}import{useEffect as x4,useMemo as y4,useState as v0}from"react";import*as cP from"@radix-ui/react-checkbox";import{CheckIcon as z4}from"lucide-react";import{jsx as z5}from"react/jsx-runtime";function C0({className:P,...$}){return z5(cP.Root,{className:U("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:z5(cP.Indicator,{className:"flex items-center justify-center text-current transition-none","data-slot":"checkbox-indicator",children:z5(z4,{className:"size-3.5"})})})}import{PopoverClose as W4}from"@radix-ui/react-popover";import{Calendar as p4}from"lucide-react";import{useEffect as F4,useRef as V4,useState as O4}from"react";import{ChevronDownIcon as U4,ChevronLeftIcon as L4,ChevronRightIcon as G4}from"lucide-react";import*as oP from"react";import{DayPicker as A4,getDefaultClassNames as f2}from"react-day-picker";import{jsx as D0}from"react/jsx-runtime";function J2({className:P,classNames:$,showOutsideDays:Z=!0,captionLayout:X="label",buttonVariant:q="ghost",formatters:f,components:Y,..._}){let J=f2();return D0(A4,{captionLayout:X,className:U("bg-background group/calendar p-3 [--cell-size:--spacing(8)] [[data-slot=card-content]_&]:bg-transparent [[data-slot=popover-content]_&]:bg-transparent",String.raw`rtl:**:[.rdp-button\_next>svg]:rotate-180`,String.raw`rtl:**:[.rdp-button\_previous>svg]:rotate-180`,P),classNames:{root:U("w-fit",J.root),months:U("flex gap-4 flex-col md:flex-row relative",J.months),month:U("flex flex-col w-full gap-4",J.month),nav:U("flex items-center gap-1 w-full absolute top-0 inset-x-0 justify-between",J.nav),button_previous:U(kP({variant:q}),"size-(--cell-size) aria-disabled:opacity-50 p-0 select-none",J.button_previous),button_next:U(kP({variant:q}),"size-(--cell-size) aria-disabled:opacity-50 p-0 select-none",J.button_next),month_caption:U("flex items-center justify-center h-(--cell-size) w-full px-(--cell-size)",J.month_caption),dropdowns:U("w-full flex items-center text-sm font-medium justify-center h-(--cell-size) gap-1.5",J.dropdowns),dropdown_root:U("relative has-focus:border-ring border border-input shadow-xs has-focus:ring-ring/50 has-focus:ring-[3px] rounded-md",J.dropdown_root),dropdown:U("absolute bg-popover inset-0 opacity-0",J.dropdown),caption_label:U("select-none font-medium",X==="label"?"text-sm":"rounded-md pl-2 pr-1 flex items-center gap-1 text-sm h-8 [&>svg]:text-muted-foreground [&>svg]:size-3.5",J.caption_label),table:"w-full border-collapse",weekdays:U("flex",J.weekdays),weekday:U("text-muted-foreground rounded-md flex-1 font-normal text-[0.8rem] select-none",J.weekday),week:U("flex w-full mt-2",J.week),week_number_header:U("select-none w-(--cell-size)",J.week_number_header),week_number:U("text-[0.8rem] select-none text-muted-foreground",J.week_number),day:U("relative w-full h-full p-0 text-center [&:last-child[data-selected=true]_button]:rounded-r-md group/day aspect-square select-none",_.showWeekNumber?"[&:nth-child(2)[data-selected=true]_button]:rounded-l-md":"[&:first-child[data-selected=true]_button]:rounded-l-md",J.day),range_start:U("rounded-l-md bg-accent",J.range_start),range_middle:U("rounded-none",J.range_middle),range_end:U("rounded-r-md bg-accent",J.range_end),today:U("bg-accent text-accent-foreground rounded-md data-[selected=true]:rounded-none",J.today),outside:U("text-muted-foreground aria-selected:text-muted-foreground",J.outside),disabled:U("text-muted-foreground opacity-50",J.disabled),hidden:U("invisible",J.hidden),...$},components:{Root:({className:Q,rootRef:A,...z})=>{return D0("div",{className:U(Q),"data-slot":"calendar",ref:A,...z})},Chevron:({className:Q,orientation:A,...z})=>{if(A==="left")return D0(L4,{className:U("size-4",Q),...z});if(A==="right")return D0(G4,{className:U("size-4",Q),...z});return D0(U4,{className:U("size-4",Q),...z})},DayButton:N4,WeekNumber:({children:Q,...A})=>{return D0("td",{...A,children:D0("div",{className:"flex size-(--cell-size) items-center justify-center text-center",children:Q})})},...Y},formatters:{formatMonthDropdown:(Q)=>Q.toLocaleString("default",{month:"short"}),...f},showOutsideDays:Z,..._})}function N4({className:P,day:$,modifiers:Z,...X}){let q=f2(),f=oP.useRef(null);return oP.useEffect(()=>{if(Z.focused)f.current?.focus()},[Z.focused]),D0(k,{className:U("data-[selected-single=true]:bg-primary data-[selected-single=true]:text-primary-foreground data-[range-middle=true]:bg-accent data-[range-middle=true]:text-accent-foreground data-[range-start=true]:bg-primary data-[range-start=true]:text-primary-foreground data-[range-end=true]:bg-primary data-[range-end=true]:text-primary-foreground group-data-[focused=true]/day:border-ring group-data-[focused=true]/day:ring-ring/50 dark:hover:text-accent-foreground flex aspect-square size-auto w-full min-w-(--cell-size) flex-col gap-1 leading-none font-normal group-data-[focused=true]/day:relative group-data-[focused=true]/day:z-10 group-data-[focused=true]/day:ring-[3px] data-[range-end=true]:rounded-md data-[range-end=true]:rounded-r-md data-[range-middle=true]:rounded-none data-[range-start=true]:rounded-md data-[range-start=true]:rounded-l-md [&>span]:text-xs [&>span]:opacity-70",q.day,P),"data-day":$.date.toLocaleDateString(),"data-range-end":Z.range_end,"data-range-middle":Z.range_middle,"data-range-start":Z.range_start,"data-selected-single":Z.selected&&!Z.range_start&&!Z.range_end&&!Z.range_middle,ref:f,size:"icon",variant:"ghost",...X})}import*as T0 from"@radix-ui/react-popover";import{jsx as lP}from"react/jsx-runtime";function E0({...P}){return lP(T0.Root,{"data-slot":"popover",...P})}function j0({...P}){return lP(T0.Trigger,{"data-slot":"popover-trigger",...P})}function x0({className:P,align:$="center",sideOffset:Z=4,...X}){return lP(T0.Portal,{children:lP(T0.Content,{align:$,className:U("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 YP,jsxs as U5}from"react/jsx-runtime";function pP({date:P,closeOnSelect:$,onChange:Z,label:X="Pick a date",className:q,disabled:f}){let Y=V4(null),[_,J]=O4(P);F4(()=>{J(P)},[P]);let Q=(A)=>{if(J(A),$)Y.current?.click();Z?.(A)};return YP("div",{className:q,children:U5(E0,{children:[YP(j0,{asChild:!0,children:U5(k,{className:U("data-[empty=true]:text-muted-foreground w-full justify-start text-left font-normal"),"data-empty":!P,variant:"outline",children:[YP(p4,{}),_?M(_).format("MMM D, YYYY"):YP("span",{children:X})]})}),U5(x0,{align:"start",className:"w-auto p-0",children:[YP(W4,{ref:Y}),YP(J2,{captionLayout:"dropdown",defaultMonth:_,disabled:f,mode:"single",onSelect:Q,selected:_})]})]})})}import{jsx as B4}from"react/jsx-runtime";function w0({className:P,type:$,...Z}){return B4("input",{className:U("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 X2 from"@radix-ui/react-label";import{jsx as M4}from"react/jsx-runtime";function a({className:P,...$}){return M4(X2.Root,{className:U("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 M0 from"@radix-ui/react-scroll-area";import{jsx as FP,jsxs as R4}from"react/jsx-runtime";function R0({className:P,children:$,viewPortProps:Z,...X}){return R4(M0.Root,{className:U("relative",P),"data-slot":"scroll-area",...X,children:[FP(M0.Viewport,{...Z,className:U("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:$}),FP(m0,{}),FP(M0.Corner,{})]})}function m0({className:P,orientation:$="vertical",...Z}){return FP(M0.ScrollAreaScrollbar,{className:U("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:FP(M0.ScrollAreaThumb,{className:"bg-border relative flex-1 rounded-full","data-slot":"scroll-area-thumb"})})}import{Clock as S4}from"lucide-react";import{useEffect as b4,useRef as Q2,useState as L5}from"react";import{useMemo as I4}from"react";function q2({timeFormat:P="12-hour",minTime:$="00:00",maxTime:Z="23:45"}){return{timeOptions:I4(()=>{let f=[],[Y,_]=$.split(":").map(Number),[J,Q]=Z.split(":").map(Number),A=Y*60+_,z=J*60+Q;for(let p=A;p<=z;p+=15){let F=Math.floor(p/60),L=p%60,G=`${F.toString().padStart(2,"0")}:${L.toString().padStart(2,"0")}`;f.push(G)}return f},[$,Z]),formatTime:(f)=>{let[Y,_]=f.split(":").map(Number),J=Y>=12?"PM":"AM",Q=Y===0?12:Y>12?Y-12:Y;if(P==="24-hour")return`${Y.toString().padStart(2,"0")}:${_.toString().padStart(2,"0")}`;return`${Q}:${_.toString().padStart(2,"0")} ${J}`}}}import{jsx as y0,jsxs as G5}from"react/jsx-runtime";var H4=(P)=>{P.stopPropagation()};function A5({value:P,onChange:$,minTime:Z="00:00",maxTime:X="23:45",timeFormat:q="12-hour",placeholder:f="Select time...",className:Y,disabled:_=!1,name:J}){let[Q,A]=L5(!1),[z,p]=L5(""),F=Q2(null),L=Q2(null),[G,N]=L5(0),{timeOptions:K,formatTime:W}=q2({timeFormat:q,minTime:Z,maxTime:X}),B=K.filter((O)=>{return W(O).toLowerCase().includes(z.toLowerCase())}),I=(O)=>{$(O),A(!1),p("")};b4(()=>{if(Q){if(L.current)N(L.current.offsetWidth);setTimeout(()=>{F.current?.focus()},0)}},[Q]);let S=P?W(P):f;return G5(E0,{onOpenChange:A,open:Q,children:[y0(j0,{asChild:!0,children:G5(k,{"aria-controls":"time-picker-listbox","aria-expanded":Q,className:U("w-full justify-start",Y),"data-testid":`time-picker-${J}`,disabled:_,ref:L,role:"combobox",variant:"outline",children:[y0(S4,{className:"mr-2 h-4 w-4"}),S]})}),G5(x0,{align:"start",className:"p-0",style:{width:G},children:[y0("div",{className:"p-2 border-b",children:y0(w0,{className:"h-8",onChange:(O)=>p(O.target.value),placeholder:"Search time...",ref:F,value:z})}),y0(R0,{className:"h-[200px]",onWheel:H4,children:y0("div",{className:"p-1",children:B.length===0?y0("div",{className:"py-6 text-center text-sm text-muted-foreground",children:"N/A"}):B.map((O)=>{let w=W(O);return y0("button",{className:U("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",O===P&&"bg-accent text-accent-foreground"),onClick:()=>I(O),type:"button",children:w},O)})})})]})]})}var N5=(P,$)=>{if(!$)return!0;let Z=!1;return _P($,{date:P,onMatch:()=>{Z=!0}}),Z},Y2=({date:P,hour:$,minute:Z=0,businessHours:X})=>{if(!X)return!0;if($===void 0)return N5(P,X);let q=!1,f=$*60+Z;return _P(X,{date:P,onMatch:(Y)=>{let _=Y.startTime??9,J=Y.endTime??17,Q=_*60,A=J*60;if(f>=Q&&f<A)q=!0}}),q},_P=(P,$)=>{let{date:Z,onMatch:X}=$;if(!P)return;let q=Array.isArray(P)?P:[P];for(let f of q)if(Z&&f.daysOfWeek){let Y=Z.day();if(f.daysOfWeek.some((_)=>g0[_]===Y))X(f)}else X(f)},iP=(P)=>{let{allDates:$,businessHours:Z,resourceBusinessHours:X=[],hideNonBusinessHours:q}=P,f=24,Y=0,_=!1,J=(Q)=>{_=!0,f=Math.min(f,Q.startTime??9),Y=Math.max(Y,Q.endTime??17)};for(let Q of $){_P(Z,{date:Q,onMatch:J});for(let A of X)_P(A,{date:Q,onMatch:J})}if(!_&&q){_P(Z,{onMatch:J});for(let Q of X)_P(Q,{onMatch:J});if(!_)f=9,Y=17,_=!0}return{minStart:f,maxEnd:Y,hasBusinessHours:_}};var W5=(P,$,Z)=>{let[X,q]=$.split(":").map(Number),f=M(P).hour(X).minute(q);return Z?f.hour(0).minute(0):f},_2=(P,$,Z)=>{let[X,q]=$.split(":").map(Number),f=M(P).hour(X).minute(q);return Z?f.hour(23).minute(59):f},p5=(P,$)=>{if(!$)return{min:"00:00",max:"23:59"};let Z=M(P),{minStart:X,maxEnd:q,hasBusinessHours:f}=iP({allDates:[Z],businessHours:$,hideNonBusinessHours:!1});if(!f)return{min:"00:00",max:"23:59"};return{min:`${X.toString().padStart(2,"0")}:00`,max:`${(q-1).toString().padStart(2,"0")}:45`}};import{useEffect as h4,useMemo as g4,useState as V2}from"react";import{RRule as K0}from"rrule";import{jsx as uP}from"react/jsx-runtime";function K2({className:P,...$}){return uP("div",{className:U("text-card-foreground flex flex-col gap-6 rounded-xl border shadow-sm",P),"data-slot":"card",...$})}function z2({className:P,...$}){return uP("div",{className:U("@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 U2({className:P,...$}){return uP("div",{className:U("leading-none font-semibold",P),"data-slot":"card-title",...$})}function L2({className:P,...$}){return uP("div",{className:U("p-4 pt-0",P),"data-slot":"card-content",...$})}import*as E from"@radix-ui/react-select";import{CheckIcon as T4,ChevronDownIcon as G2,ChevronUpIcon as w4}from"lucide-react";import{jsx as f0,jsxs as F5}from"react/jsx-runtime";function A2({...P}){return f0(E.Root,{"data-slot":"select",...P})}function N2({...P}){return f0(E.Value,{"data-slot":"select-value",...P})}function W2({className:P,size:$="default",children:Z,...X}){return F5(E.Trigger,{className:U("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,f0(E.Icon,{asChild:!0,children:f0(G2,{className:"size-4 opacity-50"})})]})}function p2({className:P,children:$,position:Z="popper",align:X="center",...q}){return f0(E.Portal,{children:F5(E.Content,{align:X,className:U("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-[8rem] 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,...q,children:[f0(m4,{}),f0(E.Viewport,{className:U("p-1",Z==="popper"&&"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1"),children:$}),f0(k4,{})]})})}function F2({className:P,children:$,...Z}){return F5(E.Item,{className:U("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:[f0("span",{className:"absolute right-2 flex size-3.5 items-center justify-center",children:f0(E.ItemIndicator,{children:f0(T4,{className:"size-4"})})}),f0(E.ItemText,{children:$})]})}function m4({className:P,...$}){return f0(E.ScrollUpButton,{className:U("flex cursor-default items-center justify-center py-1",P),"data-slot":"select-scroll-up-button",...$,children:f0(w4,{className:"size-4"})})}function k4({className:P,...$}){return f0(E.ScrollDownButton,{className:U("flex cursor-default items-center justify-center py-1",P),"data-slot":"select-scroll-down-button",...$,children:f0(G2,{className:"size-4"})})}import{jsx as v,jsxs as _0}from"react/jsx-runtime";var V5={DAILY:K0.DAILY,WEEKLY:K0.WEEKLY,MONTHLY:K0.MONTHLY,YEARLY:K0.YEARLY},C4=Object.fromEntries(Object.entries(V5).map(([P,$])=>[$,P])),O2=[K0.SU,K0.MO,K0.TU,K0.WE,K0.TH,K0.FR,K0.SA],D4=["sun","mon","tue","wed","thu","fri","sat"],B2=(P)=>Math.max(1,Number.parseInt(P,10)||1),E4=(P,$)=>{if(!P)return $("customRecurrence");try{let Z=new K0(P).toText();return Z&&!Z.toLowerCase().includes("error")?Z.charAt(0).toUpperCase()+Z.slice(1):$("customRecurrence")}catch{return $("customRecurrence")}},M2=({value:P,onChange:$})=>{let{t:Z}=V((G)=>({t:G.t})),[X,q]=V2(!!P),[f,Y]=V2(()=>P||null),_=g4(()=>D4.map((G,N)=>({value:O2[N],label:Z(G)})),[Z]);h4(()=>{if(q(!!P),P)Y(P)},[P]);let J=(G)=>{if(!f)return;let N={...f,...G};Y(N),$(X?N:null)},Q=(G)=>{if(q(G),!G){$(null);return}if(f){$(f);return}let N={freq:K0.DAILY,interval:1};Y(N),$(N)},A=(G)=>{let N=f?.byweekday||[],K=O2[G],W=N.includes(K)?N.filter((B)=>B!==K):[...N,K];J({byweekday:W.length?W:void 0})},z=(G)=>{let N={count:void 0,until:void 0};if(G==="count")N.count=f?.count||1;if(G==="until")N.until=f?.until||M().add(1,"month").endOf("day").toDate();J(N)},p=f?.until?"until":f?.count?"count":"never",F=C4[f?.freq??K0.DAILY]||"DAILY",L=Array.isArray(f?.byweekday)?f.byweekday:f?.byweekday?[f.byweekday]:[];return _0(K2,{"data-testid":"recurrence-editor",children:[_0(z2,{className:"pb-3",children:[_0("div",{className:"flex items-center space-x-2",children:[v(C0,{checked:X,"data-testid":"toggle-recurrence",id:"recurring",onCheckedChange:Q}),v(U2,{className:"text-sm",children:Z("repeat")})]}),X&&P&&v("p",{className:"text-xs text-muted-foreground",children:E4(P,Z)})]}),X&&v(L2,{className:"pt-0",children:_0("div",{className:"space-y-4",children:[_0("div",{className:"grid grid-cols-2 gap-4",children:[_0("div",{children:[v(a,{className:"text-xs",htmlFor:"frequency",children:Z("repeats")}),_0(A2,{onValueChange:(G)=>J({freq:V5[G]}),value:F,children:[v(W2,{className:"h-8","data-testid":"frequency-select",id:"frequency",children:v(N2,{})}),v(p2,{children:Object.keys(V5).map((G)=>v(F2,{value:G,children:Z(G.toLowerCase())},G))})]})]}),_0("div",{children:[v(a,{className:"text-xs",htmlFor:"interval",children:Z("every")}),v(w0,{className:"h-8",id:"interval",min:"1",onChange:(G)=>J({interval:B2(G.target.value)}),type:"number",value:f?.interval||1})]})]}),f?.freq===K0.WEEKLY&&_0("div",{children:[v(a,{className:"text-xs",children:Z("repeatOn")}),v("div",{className:"flex flex-wrap gap-1 mt-1",children:_.map((G,N)=>_0("div",{className:"flex items-center space-x-1",children:[v(C0,{checked:L.includes(G.value),id:`day-${N}`,onCheckedChange:()=>A(N)}),v(a,{className:"text-xs cursor-pointer",htmlFor:`day-${N}`,children:G.label})]},G.label))})]}),_0("div",{children:[v(a,{className:"text-xs",children:Z("ends")}),_0("div",{className:"space-y-2 mt-1",children:[_0("div",{className:"flex items-center space-x-2",children:[v(C0,{checked:p==="never",id:"never",onCheckedChange:()=>z("never")}),v(a,{className:"text-xs",htmlFor:"never",children:Z("never")})]}),_0("div",{className:"flex items-center space-x-2",children:[v(C0,{checked:p==="count",id:"after",onCheckedChange:()=>z("count")}),v(a,{className:"text-xs",htmlFor:"after",children:Z("after")}),p==="count"&&v(w0,{className:"h-6 w-16 text-xs","data-testid":"count-input",min:"1",onChange:(G)=>J({count:B2(G.target.value)}),type:"number",value:f?.count||1}),v("span",{className:"text-xs",children:Z("occurrences")})]}),_0("div",{className:"flex items-center space-x-2",children:[v(C0,{checked:p==="until",id:"on",onCheckedChange:()=>z("until")}),v(a,{className:"text-xs",htmlFor:"on",children:Z("on")}),p==="until"&&v(pP,{className:"h-6",date:f?.until??void 0,onChange:(G)=>J({until:G?M(G).endOf("day").toDate():void 0})})]})]})]})]})})]})};import{useCallback as dP,useState as j4}from"react";function R2(P){let{updateRecurringEvent:$,deleteRecurringEvent:Z}=V((Q)=>({updateRecurringEvent:Q.updateRecurringEvent,deleteRecurringEvent:Q.deleteRecurringEvent})),[X,q]=j4({isOpen:!1,operationType:"edit",event:null}),f=dP((Q,A)=>{q({isOpen:!0,operationType:"edit",event:Q,updates:A,onConfirm:(z)=>{$(Q,A,{scope:z,eventDate:Q.start})}})},[$]),Y=dP((Q)=>{q({isOpen:!0,operationType:"delete",event:Q,onConfirm:(A)=>{Z(Q,{scope:A,eventDate:Q.start})}})},[Z]),_=dP(()=>{q({isOpen:!1,operationType:"edit",event:null})},[]),J=dP((Q)=>{if(X.onConfirm)X.onConfirm(Q);_(),P?.()},[X,_,P]);return{dialogState:X,openEditDialog:f,openDeleteDialog:Y,closeDialog:_,handleConfirm:J}}import{jsx as c,jsxs as J0,Fragment as v4}from"react/jsx-runtime";var I2=[{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"}],S2=({selectedEvent:P,onClose:$,onUpdate:Z,onDelete:X,onAdd:q})=>{let{dialogState:f,openEditDialog:Y,openDeleteDialog:_,closeDialog:J,handleConfirm:Q}=R2($),{findParentRecurringEvent:A,t:z,businessHours:p,timeFormat:F,getResourceById:L}=V((b)=>({findParentRecurringEvent:b.findParentRecurringEvent,t:b.t,businessHours:b.businessHours,timeFormat:b.timeFormat,getResourceById:b.getResourceById})),G=P?.start??M(),N=P?.end??M().add(1,"hour"),K=P?A(P):null,[W,B]=v0(G.toDate()),[I,S]=v0(N.toDate()),[O,w]=v0(P?.allDay||!1),[h,l]=v0(P?.color||I2[0].value),[d,y]=v0(G.format("HH:mm")),[j,x]=v0(N.format("HH:mm")),[C,s]=v0({title:P?.title||"",description:P?.description||"",location:P?.location||""}),[X0,H]=v0(()=>{return P?.rrule||K?.rrule||null}),g=(b)=>{if(!b)return;if(B(b),M(b).isAfter(M(I)))S(b)},e=(b)=>{if(!b)return;if(S(b),b&&M(b).isBefore(M(W)))B(b)},P0=(b)=>{if(y(b),M(W).isSame(M(I),"day")&&b>j)x(b)},q0=(b)=>{if(x(b),M(W).isSame(M(I),"day")&&b<d)y(b)},r=(b)=>{let{name:z0,value:b0}=b.target;s((H0)=>({...H0,[z0]:b0}))};x4(()=>{if(O)x("23:59")},[O]);let o=(b)=>{b.preventDefault();let z0=W5(W,d,O),b0=_2(I,j,O),H0={id:P?.id||M().format("YYYYMMDDHHmmss"),title:C.title,start:z0,end:b0,resourceId:P?.resourceId,description:C.description,location:C.location,allDay:O,color:h,rrule:X0||void 0};if(P?.id&&qP(P)){Y(P,{title:C.title,start:z0,end:b0,description:C.description,location:C.location,allDay:O,color:h,rrule:X0||void 0});return}if(P?.id)Z?.(H0);else q?.(H0);$()},e0=()=>{if(P?.id){if(qP(P)){_(P);return}X?.(P),$()}},PP=(b)=>{if(!b){H(null);return}let z0=W5(W,d,O);H({...b,dtstart:z0.toDate()})},S0=y4(()=>{let b=P?.resourceId;if(b&&L){let z0=L(b);if(z0?.businessHours)return z0.businessHours}return p},[P?.resourceId,L,p]),r0=S0?(b)=>!N5(M(b),S0):void 0,a0=p5(W,S0),n0=p5(I,S0);return J0(v4,{children:[J0("form",{className:"flex flex-col flex-1 min-h-0",onSubmit:o,children:[c(R0,{className:"flex-1 min-h-0",children:J0("div",{className:"grid gap-3 sm:gap-4 p-1",children:[J0("div",{className:"grid gap-2",children:[c(a,{className:"text-xs sm:text-sm",htmlFor:"title",children:z("title")}),c(w0,{className:"h-8 text-sm sm:h-9",id:"title",name:"title",onChange:r,placeholder:z("eventTitlePlaceholder"),required:!0,value:C.title})]}),J0("div",{className:"grid gap-1 sm:gap-2",children:[c(a,{className:"text-xs sm:text-sm",htmlFor:"description",children:z("description")}),c(w0,{className:"h-8 text-sm sm:h-9",id:"description",name:"description",onChange:r,placeholder:z("eventDescriptionPlaceholder"),value:C.description})]}),J0("div",{className:"flex items-center space-x-2",children:[c(C0,{checked:O,id:"allDay",onCheckedChange:(b)=>w(b===!0)}),c(a,{className:"text-xs sm:text-sm",htmlFor:"allDay",children:z("allDay")})]}),J0("div",{className:"grid grid-cols-2 gap-2 sm:gap-4",children:[J0("div",{children:[c(a,{className:"text-xs sm:text-sm",children:z("startDate")}),c(pP,{className:"mt-1",closeOnSelect:!0,date:W,disabled:r0,onChange:g})]}),J0("div",{children:[c(a,{className:"text-xs sm:text-sm",children:z("endDate")}),c(pP,{className:"mt-1",closeOnSelect:!0,date:I,disabled:r0,onChange:e})]})]}),!O&&J0("div",{className:"grid grid-cols-2 gap-2 sm:gap-4",children:[J0("div",{children:[c(a,{className:"text-xs sm:text-sm",children:z("startTime")}),c(A5,{className:"mt-1 h-8 text-sm sm:h-9",maxTime:a0.max,minTime:a0.min,name:"start-time",onChange:P0,timeFormat:F,value:d})]}),J0("div",{children:[c(a,{className:"text-xs sm:text-sm",children:z("endTime")}),c(A5,{className:"mt-1 h-8 text-sm sm:h-9",maxTime:n0.max,minTime:n0.min,name:"end-time",onChange:q0,timeFormat:F,value:j})]})]}),J0("div",{className:"grid gap-1 sm:gap-2",children:[c(a,{className:"text-xs sm:text-sm",children:z("color")}),c("div",{className:"flex flex-wrap gap-2",children:I2.map((b)=>c(k,{"aria-label":b.label,className:U(`${b.value} h-6 w-6 rounded-full sm:h-8 sm:w-8`,h===b.value&&"ring-2 ring-black ring-offset-1 sm:ring-offset-2"),onClick:()=>l(b.value),type:"button",variant:"ghost"},b.value))})]}),J0("div",{className:"grid gap-1 sm:gap-2",children:[c(a,{className:"text-xs sm:text-sm",htmlFor:"location",children:z("location")}),c(w0,{className:"h-8 text-sm sm:h-9",id:"location",name:"location",onChange:r,placeholder:z("eventLocationPlaceholder"),value:C.location})]}),c(M2,{onChange:PP,value:X0})]})}),J0(hP,{className:"mt-4 shrink-0 flex flex-col-reverse gap-2 sm:flex-row sm:gap-0",children:[P?.id&&c(k,{className:"w-full sm:mr-auto sm:w-auto",onClick:e0,size:"sm",type:"button",variant:"destructive",children:z("delete")}),J0("div",{className:"flex w-full gap-2 sm:w-auto",children:[c(k,{className:"flex-1 sm:flex-none",onClick:$,size:"sm",type:"button",variant:"outline",children:z("cancel")}),c(k,{className:"flex-1 sm:flex-none",size:"sm",type:"submit",children:P?.id?z("update"):z("create")})]})]})]}),c(WP,{eventTitle:f.event?.title||"",isOpen:f.isOpen,onClose:J,onConfirm:Q,operationType:f.operationType})]})};import{jsx as rP,jsxs as b2}from"react/jsx-runtime";var aP=()=>{let{t:P,selectedEvent:$,isEventFormOpen:Z,closeEventForm:X,addEvent:q,updateEvent:f,deleteEvent:Y,renderEventForm:_}=V((z)=>({t:z.t,selectedEvent:z.selectedEvent,isEventFormOpen:z.isEventFormOpen,closeEventForm:z.closeEventForm,addEvent:z.addEvent,updateEvent:z.updateEvent,deleteEvent:z.deleteEvent,renderEventForm:z.renderEventForm})),A={open:Z,onClose:X,selectedEvent:$,onAdd:q,onUpdate:(z)=>{f(z.id,z)},onDelete:(z)=>{Y(z.id)}};if(_)return _(A);return rP(ZP,{onOpenChange:X,open:Z,children:b2(fP,{className:"flex flex-col h-[90vh] w-[90vw] max-w-[500px] p-4 sm:p-6 overflow-hidden gap-0",children:[b2(JP,{className:"mb-2 sm:mb-4 shrink-0",children:[rP(XP,{className:"text-base sm:text-lg",children:$?.id?P("editEvent"):P("createEvent")}),rP(gP,{className:"text-xs sm:text-sm",children:$?.id?P("editEventDetails"):P("addNewEvent")})]}),rP(S2,{...A})]})})};import{Calendar as J3,Download as X3,Menu as q3,Plus as Q3}from"lucide-react";import{useState as Y3}from"react";import{RRule as c4}from"rrule";var O5=`\r
2
+ `,o4=["BEGIN:VTIMEZONE","TZID:UTC","BEGIN:STANDARD","DTSTART:19700101T000000","TZNAME:UTC","TZOFFSETFROM:+0000","TZOFFSETTO:+0000","END:STANDARD","END:VTIMEZONE"].join(O5),tP=(P)=>{return P.replaceAll("\\","\\\\").replaceAll(";","\\;").replaceAll(",","\\,").replaceAll(`
3
+ `,"\\n").replaceAll("\r","")},nP=(P,$=!1)=>{return $?P.format("YYYYMMDD"):P.utc().format("YYYYMMDD[T]HHmmss[Z]")},H2=(P)=>{return P.uid||`${P.id}@ilamy.calendar`},l4=(P)=>{try{return new c4(P).toString().split(`
4
+ `).find((Z)=>Z.startsWith("RRULE:"))||""}catch{return""}},i4=(P)=>{let $=M().utc().format("YYYYMMDD[T]HHmmss[Z]"),Z=P.allDay?";VALUE=DATE":"",X=P.rrule?l4(P.rrule):"",q=P.exdates?.length?P.exdates.map((_)=>nP(M(_),P.allDay)).join(","):null,f=P.recurrenceId?nP(M(P.recurrenceId),P.allDay):null;return["BEGIN:VEVENT",`UID:${H2(P)}`,`DTSTART${Z}:${nP(P.start,P.allDay)}`,`DTEND${Z}:${nP(P.end,P.allDay)}`,`SUMMARY:${tP(P.title)}`,P.description&&`DESCRIPTION:${tP(P.description)}`,P.location&&`LOCATION:${tP(P.location)}`,X,q&&`EXDATE:${q}`,f&&`RECURRENCE-ID:${f}`,`DTSTAMP:${$}`,`CREATED:${$}`,`LAST-MODIFIED:${$}`,"STATUS:CONFIRMED","SEQUENCE:0","TRANSP:OPAQUE","END:VEVENT"].filter(Boolean).join(O5)},u4=(P)=>{let $=new Set;return P.filter((Z)=>{let X=H2(Z),q=Z.rrule&&!Z.recurrenceId,f=Z.recurrenceId&&!Z.rrule;if(q)return $.add(X),!0;if(f)return!0;return!Z.rrule&&!Z.recurrenceId&&!$.has(X)})},d4=(P,$="ilamy Calendar")=>{let Z=tP($),X=u4(P).map(i4);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}`,o4,...X,"END:VCALENDAR"].join(O5)},T2=(P,$="calendar.ics",Z="ilamy Calendar")=>{let X=new Blob([d4(P,Z)],{type:"text/calendar;charset=utf-8"}),q=URL.createObjectURL(X),f=$.endsWith(".ics")?$:`${$}.ics`,Y=document.createElement("a");Y.href=q,Y.download=f,document.body.append(Y),Y.click(),Y.remove(),URL.revokeObjectURL(q)};import{ChevronDown as r4}from"lucide-react";import{useMemo as a4,useState as n4}from"react";import{jsx as $0,jsxs as eP,Fragment as sP}from"react/jsx-runtime";var t4=["january","february","march","april","may","june","july","august","september","october","november","december"],s4=()=>{let{currentDate:P,view:$,selectDate:Z,t:X,firstDayOfWeek:q}=V((K)=>({currentDate:K.currentDate,view:K.view,selectDate:K.selectDate,t:K.t,firstDayOfWeek:K.firstDayOfWeek})),[f,Y]=n4(null),_=a4(()=>t4.map((K)=>X(K)),[X]),J=P.year(),Q=Array.from({length:11},(K,W)=>J-5+W),A=Y0(P,q),z=(K)=>{Z(K),Y(null)},p=()=>$0(sP,{children:_.map((K,W)=>$0(k,{className:U("justify-start font-normal",P.month()===W&&"bg-primary/10"),onClick:()=>z(P.month(W)),variant:"ghost",children:K},K))}),F=()=>$0(sP,{children:Q.map((K)=>$0(k,{className:U("justify-start font-normal",P.year()===K&&"bg-primary/10"),onClick:()=>z(P.year(K)),variant:"ghost",children:K},K))}),L=()=>$0(sP,{children:Array.from({length:7},(K,W)=>{let B=P.subtract(3,"week").add(W,"week"),I=Y0(B,q),S=I[0],O=I[6],w=B.isSame(P,"week"),h=S.month()!==O.month();return $0(k,{className:U("justify-start font-normal",w&&"bg-primary/10"),onClick:()=>z(S),variant:"ghost",children:eP("div",{className:"flex w-full items-center justify-between",children:[$0("span",{children:`${S.format("MMM D")} - ${O.format("D")}`}),h&&$0("span",{className:"ml-0.5 text-xs opacity-70",children:`${S.format("MMM")}-${O.format("MMM")}`})]})},S.format("YYYY-MM-DD"))})}),G=()=>{let K=P.startOf("month"),W=P.daysInMonth();return $0(sP,{children:Array.from({length:W},(B,I)=>{let S=K.date(I+1),O=S.isSame(P,"day"),w=S.isSame(M(),"day");return $0(k,{className:U("justify-start font-normal",O&&"bg-primary/10"),onClick:()=>z(S),variant:"ghost",children:eP("div",{className:"flex w-full items-center justify-between",children:[$0("span",{children:S.format("dddd, MMM D")}),w&&$0("span",{className:"bg-primary text-primary-foreground rounded-sm px-1! text-xs",children:X("today")})]})},S.format("YYYY-MM-DD"))})})};return[{id:"month",hidden:$==="year",title:P.format("MMMM"),render:p},{id:"year",hidden:!1,title:P.format("YYYY"),render:F},{id:"week",hidden:$!=="week",title:`${A[0].format("MMM D")} - ${A[6].format("MMM D")}`,render:L},{id:"day",hidden:$!=="day",title:P.format("dddd, D"),render:G}].filter((K)=>!K.hidden).map((K)=>eP(E0,{onOpenChange:(W)=>Y(W?K.id:null),open:f===K.id,children:[$0(j0,{asChild:!0,children:eP(k,{className:"flex items-center gap-1 px-1! font-semibold","data-testid":"calendar-month-button",variant:"ghost",children:[$0(D,{className:"flex items-center gap-1 px-1! font-semibold","data-testid":"calendar-month-button",transitionKey:`${K.id}-${P.format("YYYY-MM-DD")}`,children:K.title}),$0(r4,{className:"h-4 w-4"})]})}),$0(x0,{className:"w-40 p-0",children:$0("div",{className:"flex max-h-60 flex-col overflow-auto",children:K.render()})})]},K.id))},w2=s4;import{ChevronLeft as e4,ChevronRight as P3}from"lucide-react";import{jsx as KP,jsxs as f3}from"react/jsx-runtime";var $3=["day","week","month","year"],Z3=({currentView:P,onChange:$,variant:Z="default",size:X="sm",className:q,onToday:f,onNext:Y,onPrevious:_})=>{let{t:J,resources:Q}=V((L)=>({t:L.t,resources:L.resources})),A=Z==="grid",z=Q&&Q.length>0,p=(L)=>{return U(A?"w-full":"",P===L&&"bg-primary/80")},F=(L)=>{return P===L?"default":"outline"};return f3("div",{className:U(A?"grid grid-cols-2 gap-2":"flex gap-1",q),children:[KP(k,{onClick:_,size:X,variant:"outline",children:KP(e4,{className:"h-4 w-4"})}),KP(k,{onClick:Y,size:X,variant:"outline",children:KP(P3,{className:"h-4 w-4"})}),$3.map((L)=>{if(z&&L==="year")return null;return KP(k,{className:p(L),onClick:()=>$(L),size:X,variant:F(L),children:J(L)},L)}),KP(k,{onClick:f,size:X,variant:"outline",children:J("today")})]})},B5=Z3;import{jsx as t,jsxs as k0}from"react/jsx-runtime";var _3=({className:P=""})=>{let{view:$,setView:Z,nextPeriod:X,prevPeriod:q,today:f,openEventForm:Y,headerComponent:_,headerClassName:J,rawEvents:Q,t:A}=V((K)=>({view:K.view,setView:K.setView,nextPeriod:K.nextPeriod,prevPeriod:K.prevPeriod,today:K.today,openEventForm:K.openEventForm,headerComponent:K.headerComponent,headerClassName:K.headerClassName,rawEvents:K.rawEvents,t:K.t})),[z,p]=Y3(!1),F=()=>p(!1),L=()=>{let K=`ilamy-calendar-${new Date().toISOString().split("T")[0]}.ics`;T2(Q,K,"ilamy Calendar"),F()},G=()=>k0(k,{className:"flex items-center gap-1",onClick:()=>Y(),size:"sm",variant:"default",children:[t(Q3,{className:"h-4 w-4"}),t("span",{className:"hidden @4xl:inline",children:A("new")})]}),N=({fullWidth:K=!1})=>k0(k,{className:U("flex items-center gap-1",K&&"w-full gap-2"),onClick:L,size:"sm",variant:"outline",children:[t(X3,{className:"h-4 w-4"}),K?`${A("export")} Calendar (.ics)`:t("span",{className:"hidden @4xl/base-header:inline",children:A("export")})]});if(_)return _;return t("div",{className:"@container/base-header w-full","data-testid":"calendar-header",children:k0("div",{className:U("flex justify-center @2xl/base-header:justify-between flex-wrap items-center gap-2",P,J),children:[k0("div",{className:"flex flex-wrap items-center justify-center gap-1 @2xl/base-header:justify-start",children:[t(J3,{className:"h-5 w-5"}),t(w2,{})]}),k0("div",{className:"flex flex-wrap justify-start @xl/base-header:justify-center gap-1 @4xl/base-header:justify-end overflow-x-auto",children:[k0("div",{className:"hidden @md/base-header:flex items-center justify-start gap-1",children:[t(B5,{className:"justify-end",currentView:$,onChange:Z,onNext:X,onPrevious:q,onToday:f,variant:"default"}),t(G,{}),t(N,{})]}),k0("div",{className:"flex items-center justify-end gap-1 @md/base-header:hidden",children:[t(G,{}),k0(E0,{onOpenChange:p,open:z,children:[t(j0,{asChild:!0,children:t(k,{size:"sm",variant:"outline",children:t(q3,{className:"h-4 w-4"})})}),t(x0,{align:"end",className:"w-[240px] p-2",children:k0("div",{className:"space-y-2",children:[t(B5,{currentView:$,onChange:(K)=>{Z(K),F()},onNext:()=>{X(),F()},onPrevious:()=>{q(),F()},onToday:()=>{f(),F()},variant:"grid"}),t("div",{className:"pt-2 border-t",children:t(N,{fullWidth:!0})})]})})]})]})]})]})})},VP=_3;import{memo as m3}from"react";import{memo as x2,useMemo as I3}from"react";import{useMemo as M5}from"react";var m2=({days:P,events:$,dayMaxEvents:Z,dayNumberHeight:X=c5,gridType:q="day",eventSpacing:f=h0})=>{let Y=P.at(0),_=P.at(-1);if(!Y||!_)return[];let J=q==="hour"?Y.startOf("hour"):Y.startOf("day"),Q=q==="hour"?_.endOf("hour"):_.endOf("day"),A=P.length,z=$.filter((K)=>K.end.diff(K.start,q)>0),p=$.filter((K)=>K.end.diff(K.start,q)===0),F=[...z].sort((K,W)=>{let B=K.start.diff(W.start);if(B!==0)return B;return W.end.diff(W.start)-K.end.diff(K.start)}),L=[...p].sort((K,W)=>K.start.diff(W.start)),G=[];for(let K=0;K<Z;K++){G[K]=[];for(let W=0;W<A;W++)G[K][W]={taken:!1,event:null}}let N=[];for(let K of F){let W=M.max(K.start.startOf(q),J),B=q==="hour"?K.end.subtract(1,"minute"):K.end,I=M.min(B.startOf(q),Q),S=Math.max(0,W.diff(J,q)),O=Math.min(A-1,I.diff(J,q)),w=K.start.startOf(q).isBefore(J),h=K.end.startOf(q).isAfter(Q),l=!1,d=-1;for(let y=0;y<Z;y++){let j=!0;for(let x=S;x<=O;x++)if(G[y][x].taken){j=!1;break}if(j){d=y;break}}if(d!==-1){for(let j=S;j<=O;j++)G[d][j]={taken:!0,event:K};let y=O-S+1;N.push({left:S/A*100,width:y/A*100,top:X+f+d*(W0+f),height:W0,position:d,...K,isTruncatedStart:w,isTruncatedEnd:h}),l=!0}if(!l)for(let y=S+1;y<=O;y++){let j=-1;for(let x=0;x<Z;x++){let C=!0;for(let s=y;s<=O;s++)if(G[x][s].taken){C=!1;break}if(C){j=x;break}}if(j!==-1){for(let C=y;C<=O;C++)G[j][C]={taken:!0,event:K};let x=O-y+1;N.push({left:y/A*100,width:x/A*100,top:X+f+j*(W0+f),height:W0,position:j,...K,isTruncatedStart:!0,isTruncatedEnd:h}),l=!0;break}}}for(let K of L){let W=M.max(K.start.startOf(q),J),B=Math.max(0,Math.min(A-1,W.diff(J,q))),I=!1,S=!1,O=-1;for(let w=0;w<Z;w++)if(!G[w][B].taken){O=w;break}if(O!==-1)G[O][B]={taken:!0,event:K},N.push({left:B/A*100,width:1/A*100,top:X+f+O*(W0+f),height:W0,position:O,...K,isTruncatedStart:!1,isTruncatedEnd:!1})}return N};var R5=({days:P,allDay:$,dayNumberHeight:Z,resourceId:X,gridType:q})=>{let{getEventsForDateRange:f,dayMaxEvents:Y,eventSpacing:_,getEventsForResource:J}=V(),Q=P.at(0),A=P.at(-1),z=Q?.startOf("day"),p=A?.endOf("day"),F=M5(()=>{if(!z||!p)return[];let N=f(z,p);if(X){let K=J(X);N=N.filter((W)=>K.some((B)=>String(B.id)===String(W.id)))}if($)N=N.filter((K)=>!!K.allDay===$);return N},[f,J,z,p,X,$]),L=M5(()=>{let N=new Map;for(let K of P){let W=K.format("YYYY-MM-DD"),B=K.startOf("day"),I=K.endOf("day"),S=F.filter((O)=>{let w=O.start.isSameOrAfter(B)&&O.start.isSameOrBefore(I),h=O.end.isSameOrAfter(B)&&O.end.isSameOrBefore(I),l=O.start.isBefore(B)&&O.end.isAfter(I);return w||h||l});N.set(W,S)}return N},[P,F]);return{positionedEvents:M5(()=>{return m2({days:P,events:F,dayMaxEvents:Y,dayNumberHeight:Z,eventSpacing:_,gridType:q})},[P,Y,Z,_,F,q]),dayEventsMap:L}};import V3,{memo as O3,useMemo as D2}from"react";import{jsx as K3}from"react/jsx-runtime";var k2=({date:P,locale:$="en",className:Z})=>{let X=P.isSame(M(),"day");return K3("div",{className:U("flex h-5 w-5 items-center justify-center rounded-full text-xs shrink-0",X&&"bg-primary text-primary-foreground font-medium",Z),"data-testid":X?"day-number-today":`day-number-${P.format("D")}`,children:P.format("D")})};import{useImperativeHandle as N3,useState as h2}from"react";import{useDraggable as z3}from"@dnd-kit/core";import{memo as U3}from"react";import{jsx as OP,jsxs as A3}from"react/jsx-runtime";var L3=(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 G3({elementId:P,event:$,className:Z,style:X,disableDrag:q=!1}){let{onEventClick:f,renderEvent:Y,disableEventClick:_,disableDragAndDrop:J}=V(),{attributes:Q,listeners:A,setNodeRef:z,isDragging:p}=z3({id:P,data:{event:$,type:"calendar-event"},disabled:q||J}),F=()=>{let L=$,G=L.isTruncatedStart,N=L.isTruncatedEnd;return A3("div",{className:U($.backgroundColor||"bg-blue-500",$.color||"text-white","h-full w-full px-1 border-[1.5px] border-card text-left overflow-clip relative",L3(Boolean(G),Boolean(N))),style:{backgroundColor:$.backgroundColor,color:$.color},children:[G&&OP("div",{className:"absolute left-0 top-0 bottom-0 w-0.5 bg-foreground/25"}),OP("p",{className:U("text-[10px] font-semibold sm:text-xs mt-0.5",G&&"pl-1",N&&"pr-1"),children:$.title}),N&&OP("div",{className:"absolute right-0 top-0 bottom-0 w-0.5 bg-foreground/25"})]})};return OP(D,{className:U("truncate h-full w-full",q||J?_?"cursor-default":"cursor-pointer":"cursor-grab",p&&!(q||J)&&"cursor-grabbing shadow-lg",Z),layout:!0,layoutId:P,onClick:(L)=>{L.stopPropagation(),f($)},ref:z,style:X,transitionKey:P,...Q,...A,children:Y?Y($):OP(F,{})})}var zP=U3(G3,(P,$)=>{return P.elementId===$.elementId&&P.disableDrag===$.disableDrag&&P.className===$.className&&P.event===$.event});import{jsx as BP,jsxs as W3}from"react/jsx-runtime";var g2=({ref:P})=>{let[$,Z]=h2(!1),[X,q]=h2(null),{currentDate:f,firstDayOfWeek:Y}=V();N3(P,()=>({open:()=>Z(!0),close:()=>Z(!1),setSelectedDayEvents:(Q)=>q(Q)}));let J=f.startOf("month").clone();while(J.day()!==Y)J=J.subtract(1,"day");return BP(ZP,{onOpenChange:Z,open:$,children:W3(fP,{className:"max-h-[80vh] max-w-md overflow-y-auto",children:[BP(JP,{children:BP(XP,{children:X?.day.format("MMMM D, YYYY")})}),BP("div",{className:"mt-4 space-y-3",children:X?.events.map((Q)=>{return BP(zP,{className:"relative my-1 h-[30px]",elementId:`all-events-dialog-event-$${Q.id}`,event:Q},Q.id)})})]})})};import{useDroppable as p3}from"@dnd-kit/core";import{jsx as F3}from"react/jsx-runtime";function C2({id:P,type:$,date:Z,hour:X,minute:q,resourceId:f,allDay:Y,children:_,className:J,style:Q,"data-testid":A,disabled:z=!1}){let{onCellClick:p,disableDragAndDrop:F,disableCellClick:L,classesOverride:G,view:N}=V(),{isOver:K,setNodeRef:W}=p3({id:P,data:{type:$,date:Z,hour:X,minute:q,resourceId:f,allDay:Y},disabled:F||z}),B=(I)=>{if(I.stopPropagation(),L||z)return;let S=Z.hour(X??0).minute(q??0),O=S.clone();if(X!==void 0&&q!==void 0)O=O.hour(X).minute(q+15);else if(X!==void 0)O=O.hour(X+1).minute(0);else O=O.hour(23).minute(59);p({start:S,end:O,resourceId:f,allDay:Y})};return F3("div",{className:U("droppable-cell",J,K&&!F&&!z&&"bg-accent",L||z?"cursor-default":"cursor-pointer",z&&(G?.disabledCell||o5)),"data-disabled":z.toString(),"data-testid":A,"data-view":N,onClick:B,ref:W,style:Q,children:_})}import{jsx as P5,jsxs as $5,Fragment as E2}from"react/jsx-runtime";var B3=({day:P,hour:$,minute:Z,className:X="",resourceId:q,gridType:f="day",shouldRenderEvents:Y=!0,allDay:_=!1,precomputedEvents:J,"data-testid":Q,showDayNumber:A=!1,children:z})=>{let p=V3.useRef(null),{dayMaxEvents:F=0,getEventsForDateRange:L,currentDate:G,t:N,getEventsForResource:K,businessHours:W,currentLocale:B,eventSpacing:I,getResourceById:S}=V(),O=D2(()=>{if(!Y)return[];if(J)return J;let g=L(P.startOf(f),P.endOf(f));if(_)g=g.filter((e)=>e.allDay);if(q){let e=K(q)??[];return g.filter((P0)=>e.some((q0)=>String(q0.id)===String(P0.id)))}return g},[J,P,q,L,K,f,Y,_]),w=(g,e)=>{p.current?.setSelectedDayEvents({day:g,events:e}),p.current?.open()},h=P.month()===G.month(),l=O.length-F,d=l>0,y=D2(()=>{if(q&&S){let g=S(q);if(g?.businessHours)return g.businessHours}return W},[q,S,W]),j=Y2({date:P,hour:f==="hour"?P.hour():void 0,businessHours:y}),x=P.format("HH"),C=P.format("mm"),s=`day-cell-${P.format("YYYY-MM-DD")}`,X0=f==="hour"?`${s}-${x}-${C}`:s,H=`day-cell-${P.toISOString()}${_?"-allday":""}${q?`-resource-${q}`:""}`;return $5(E2,{children:[P5(C2,{allDay:_,className:U("cursor-pointer overflow-clip p-1 hover:bg-accent min-h-[60px] relative border-r last:border-r-0 only:border-r border-b",X),"data-testid":Q||X0,date:P,disabled:!j||!h,hour:$,id:H,minute:Z,resourceId:q,type:"day-cell",children:$5("div",{className:"flex flex-col h-full w-full","data-testid":"grid-cell-content",style:{gap:`${I}px`},children:[A&&P5(k2,{date:P,locale:B}),Y&&$5(E2,{children:[O.slice(0,F).map((g,e)=>P5("div",{className:"w-full shrink-0","data-testid":g?.title,style:{height:`${W0}px`}},`empty-${e}-${g.id}`)),d&&$5("div",{className:"text-muted-foreground hover:text-foreground cursor-pointer text-[10px] whitespace-nowrap sm:text-xs shrink-0 mt-1",onClick:(g)=>{g.stopPropagation(),w(P,O)},onKeyDown:(g)=>{if(g.key==="Enter"||g.key===" ")g.preventDefault(),g.stopPropagation(),w(P,O)},role:"button",tabIndex:0,children:["+",l," ",N("more")]})]}),z]})}),P5(g2,{ref:p})]})},MP=O3(B3);import{jsx as j2}from"react/jsx-runtime";var c0=({resource:P,className:$,children:Z,"data-testid":X})=>{let{renderResource:q}=V();return j2("div",{className:U("flex items-center justify-center p-2 border-r last:border-r-0",$),"data-testid":X,style:{color:P.color,backgroundColor:P.backgroundColor},children:q?q(P):Z??j2("div",{className:"text-sm font-medium truncate",children:P.title})})};import{memo as M3}from"react";import{jsx as I5}from"react/jsx-runtime";var R3=({days:P,resourceId:$,"data-testid":Z,positionedEvents:X})=>{let q=P.at(0)?.startOf("day");return I5("div",{className:"absolute inset-0 pointer-events-none z-10 overflow-clip","data-testid":Z,children:X.map((f)=>{let Y=`${f.id}-${f.position}-${q?.toISOString()}-${$??"no-resource"}`;return I5("div",{className:"absolute z-10 pointer-events-auto overflow-clip","data-left":f.left,"data-testid":`horizontal-event-${f.id}`,"data-top":f.top,"data-width":f.width,style:{left:`calc(${f.left}% + var(--spacing) * 0.25)`,width:`calc(${f.width}% - var(--spacing) * 1)`,top:`${f.top}px`,height:`${W0}px`},children:I5(zP,{className:"h-full w-full shadow",elementId:Y,event:f})},`${Y}-wrapper`)})})},S5=M3(R3);import{jsx as p0,jsxs as b5}from"react/jsx-runtime";var S3=({id:P,resource:$,gridType:Z="day",variant:X="resource",dayNumberHeight:q,className:f,columns:Y=[],allDay:_,showDayNumber:J=!1,isLastRow:Q=!1})=>{let{renderResource:A}=V(),z=X==="resource",p=Y.some((N)=>N.days),F=I3(()=>{if(p)return[];return Y.map((N)=>N.day).filter((N)=>Boolean(N))},[Y,p]),{positionedEvents:L,dayEventsMap:G}=R5({days:F,gridType:Z,resourceId:$?.id,dayNumberHeight:q,allDay:_});return b5("div",{className:U("flex flex-1 relative",f),"data-testid":`horizontal-row-${P}`,children:[z&&$&&p0(c0,{className:"w-20 sm:w-40 sticky left-0 bg-background z-20 h-full","data-testid":`horizontal-row-label-${$.id}`,resource:$,children:A?A($):p0("div",{className:"wrap-break-word text-sm",children:$.title})}),b5("div",{className:"relative flex-1 flex",children:[p0("div",{className:"flex w-full",children:Y.map((N,K)=>{if(N.days)return p0(b3,{allDay:_,col:N,dayNumberHeight:q,gridType:Z,id:P,isLastCol:K===Y.length-1,isLastRow:Q,resourceId:$?.id,showDayNumber:J},N.id);return N.day?p0(MP,{allDay:_,className:U("flex-1 w-20",Q&&"border-b-0",N.className),day:N.day,gridType:Z,hour:Z==="hour"?N.day.hour():void 0,precomputedEvents:G.get(N.day.format("YYYY-MM-DD")),resourceId:$?.id,showDayNumber:J},N.day.toISOString()):null})}),!p&&p0("div",{className:"absolute inset-0 z-10 pointer-events-none",children:p0(S5,{"data-testid":`horizontal-events-${P}`,days:F,positionedEvents:L,resourceId:$?.id})})]})]})},b3=x2(({col:P,gridType:$="day",allDay:Z,resourceId:X,dayNumberHeight:q,showDayNumber:f,isLastRow:Y,isLastCol:_,id:J})=>{let Q=P.days??[],{positionedEvents:A}=R5({days:Q,gridType:$,resourceId:X,dayNumberHeight:q,allDay:Z});return b5("div",{className:"flex relative w-full",children:[p0("div",{className:"flex w-full",children:Q.map((z)=>p0(MP,{allDay:Z,className:U("flex-1 w-20",Y&&"border-b-0",!_&&"border-r!",P.className),day:z,gridType:$,hour:$==="hour"?z.hour():void 0,resourceId:X,showDayNumber:f},z.toISOString()))}),p0("div",{className:"absolute inset-0 z-10 pointer-events-none",children:p0(S5,{"data-testid":`horizontal-events-${J}`,days:Q,positionedEvents:A,resourceId:X})})]})}),Z5=x2(S3);import{memo as H3}from"react";import{jsx as w3}from"react/jsx-runtime";var T3=({className:P})=>{let{t:$}=V();return w3("div",{className:U("w-16 border-r shrink-0 sticky left-0 bg-background z-20 flex items-center justify-center sm:text-xs text-muted-foreground",P),children:$("allDay")})},UP=H3(T3);import{jsx as y2,jsxs as h3}from"react/jsx-runtime";var k3=({days:P,classes:$,resource:Z,showSpacer:X=!0})=>{let q=P.map((f,Y)=>({id:`allday-col-${f.toISOString()}-${Y}`,day:f,gridType:"day",className:U("h-full min-h-12 border-r last:border-r-0",$?.cell)}));return h3("div",{className:U("flex w-full",$?.row),"data-testid":"all-day-row",children:[X&&y2(UP,{className:$?.spacer}),y2(Z5,{allDay:!0,className:"flex-1 min-h-fit",columns:q,dayNumberHeight:0,gridType:"day",id:`all-day-row-${Z?.id??"main"}`,isLastRow:!0,resource:Z,variant:"regular"})]})},o0=m3(k3);import{memo as y3}from"react";import{memo as E3}from"react";import{memo as g3}from"react";import{jsx as v2,Fragment as D3}from"react/jsx-runtime";var C3=({rangeStart:P,rangeEnd:$,now:Z,resource:X})=>{let{renderCurrentTimeIndicator:q,view:f}=V((z)=>({renderCurrentTimeIndicator:z.renderCurrentTimeIndicator,view:z.view})),Y=Z??M();if(!(Y.isSameOrAfter(P)&&Y.isBefore($)))return null;let J=$.diff(P,"minute"),A=Y.diff(P,"minute")/J*100;if(q)return v2(D3,{children:q({currentTime:Y,rangeStart:P,rangeEnd:$,progress:A,resource:X,view:f})});return v2("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:`${A}%`}})},c2=g3(C3);import{useMemo as l2}from"react";var o2=({days:P,gridType:$="hour",events:Z})=>{let X=Z.filter((z)=>!z.allDay).toSorted((z,p)=>z.start.diff(p.start));if(X.length===0)return[];let q=P.at(0)||M(),f=P.length,Y=$==="day",_=[],J=[],Q=null;for(let z of X){if(Q&&z.start.isSameOrAfter(Q)){if(J.length>0)_.push(J);J=[]}J.push(z),Q=Q?M.max(Q,z.end):z.end}if(J.length>0)_.push(J);let A=[];for(let z of _){if(z.length===1){let N=z[0],K=N.start.diff(q,$,!0),W=N.end.diff(q,$,!0);if(Y){if(K=Math.floor(K),W=Math.ceil(W),W<=K)W=K+1}if(K<0)K=0;if(W>f)W=f;let B=Math.max(0,W-K);if(B===0)continue;let I=K/f*100,S=B/f*100;A.push({...N,left:0,width:100,top:I,height:S});continue}let p=[...z].sort((N,K)=>{let W=N.end.diff(N.start,"minute"),B=K.end.diff(K.start,"minute");if(W!==B)return B-W;return N.start.diff(K.start)}),F=p.length,L;if(F===2)L=25;else if(F===3)L=50;else if(F===4)L=60;else L=70;let G=F>1?L/(F-1):0;for(let N=0;N<p.length;N++){let K=p[N],W=K.start.diff(q,$,!0),B=K.end.diff(q,$,!0);if(Y){if(W=Math.floor(W),B=Math.ceil(B),B<=W)B=W+1}if(W<0)W=0;if(B>f)B=f;let I=Math.max(0,B-W);if(I===0)continue;let S=W/f*100,O=I/f*100,w,h,l;if(N===0)w=0,h=100,l=1;else w=G*N,h=100-w,l=N+1;A.push({...K,left:w,width:h,top:S,height:O,zIndex:l})}}return A};var i2=({days:P,gridType:$,resourceId:Z})=>{let{getEventsForDateRange:X,getEventsForResource:q}=V(),f=P.at(0),Y=P.at(-1),_=f?.startOf("day"),J=Y?.endOf("day"),Q=l2(()=>{if(!_||!J)return[];let z=X(_,J);if(Z){let p=q(Z);z=z.filter((F)=>p.some((L)=>String(L.id)===String(F.id)))}return z.filter((p)=>!p.allDay)},[_,J,X,Z,q]);return l2(()=>{return o2({days:P,events:Q,gridType:$})},[P,$,Q])};import{jsx as H5,jsxs as x3}from"react/jsx-runtime";var j3=({days:P,gridType:$="hour",resourceId:Z,resource:X,"data-testid":q})=>{let f=i2({days:P,gridType:$,resourceId:Z}),Y=P.at(0),_=P.at(-1)?.add(1,$);return x3("div",{className:"relative w-full h-full pointer-events-none z-10 overflow-clip","data-testid":q,children:[Y&&_&&H5(c2,{rangeEnd:_,rangeStart:Y,resource:X}),f.map((J,Q)=>{let A=`event-${J.id}-${Q}-${P.at(0)?.toISOString()}-${Z??"no-resource"}`,z=J.end.diff(J.start,"minute")<=15;return H5("div",{className:"absolute",style:{left:`${J.left}%`,width:`calc(${J.width}% - var(--spacing) * 2)`,top:`${J.top}%`,height:`${J.height}%`},children:H5(zP,{className:U("pointer-events-auto",{"[&_p]:text-[10px] [&_p]:mt-0":z}),elementId:A,event:J})},`${A}-wrapper`)})]})},u2=E3(j3);import{jsx as RP,jsxs as c3}from"react/jsx-runtime";var v3=({id:P,days:$,resourceId:Z,resource:X,"data-testid":q,gridType:f,className:Y,renderCell:_,noEvents:J,cellSlots:Q=[60],isLastColumn:A})=>{return RP("div",{className:U("flex flex-col flex-1 items-center justify-center min-w-50 bg-background relative",Y),"data-testid":q||`vertical-col-${P}`,children:c3("div",{className:"w-full relative grid",style:{gridTemplateRows:`repeat(${$.length}, minmax(0, 1fr))`},children:[$.map((z,p)=>{let F=z.format("HH"),L=z.format("YYYY-MM-DD");if(_){let G=P==="time-col"?`vertical-time-${F}`:`vertical-cell-${L}-${F}-00${Z?`-${Z}`:""}`;return RP("div",{className:"h-[60px] border-b border-r","data-testid":G,children:_(z)},`${P}-${p}-${F}`)}return Q.map((G)=>{let N=G===60?void 0:G,K=N===void 0?"00":String(N).padStart(2,"0"),W=`vertical-cell-${L}-${F}-${K}${Z?`-${Z}`:""}`;return RP(MP,{className:U("hover:bg-accent relative z-10 h-[60px] cursor-pointer border-b",G===60?"":"border-dashed h-[15px] min-h-[15px]",A?"border-r-0":"border-r"),"data-testid":W,day:N?z.minute(N):z,gridType:f,hour:z.hour(),minute:N,resourceId:Z,shouldRenderEvents:!1},`${P}-${p}-${K}`)})}),!J&&RP("div",{className:"absolute inset-0 z-10 pointer-events-none",children:RP(u2,{"data-testid":`vertical-events-${P}`,days:$,gridType:f,resource:X,resourceId:Z})})]})})},d2=y3(v3);import{memo as o3}from"react";import{jsx as r2,jsxs as i3}from"react/jsx-runtime";var l3=({children:P,classes:$,allDayRow:Z})=>{let{stickyViewHeader:X,viewHeaderClassName:q}=V((f)=>({stickyViewHeader:f.stickyViewHeader,viewHeaderClassName:f.viewHeaderClassName}));return i3("div",{className:U(X&&"sticky top-0 z-21 bg-background",q),children:[r2("div",{className:U("h-12 border-b w-fit",$?.header),"data-testid":"vertical-grid-header",children:P}),Z&&r2("div",{className:U("flex w-full border-b min-h-12",$?.allDay),"data-testid":"vertical-grid-all-day",children:Z})]})},a2=o3(l3);import{jsx as IP,jsxs as n2}from"react/jsx-runtime";var I0=({columns:P,children:$,gridType:Z="day",variant:X="resource",classes:q,allDayRow:f,cellSlots:Y,style:_})=>{let J=X==="resource",Q=!J,A=$&&IP(a2,{allDayRow:f,classes:{header:q?.header,allDay:q?.allDay},children:$});return n2("div",{className:"h-full flex flex-col","data-testid":"vertical-grid-container",style:_,children:[Q&&A,n2(R0,{className:U("h-full",Q&&"overflow-auto"),"data-testid":"vertical-grid-scroll",viewPortProps:{className:"*:flex! *:flex-col! *:min-h-full"},children:[J&&A,IP("div",{className:U("flex flex-1 w-fit",q?.body),"data-testid":"vertical-grid-body",children:P.map((z,p)=>IP(d2,{...z,cellSlots:Y,gridType:Z,isLastColumn:p===P.length-1},`${z.id}-${p}`))}),IP(m0,{className:"z-30"})," ",IP(m0,{className:"z-30",orientation:"horizontal"})," "]})]})};function U0({referenceDate:P,businessHours:$,hideNonBusinessHours:Z,allDates:X=[P],resourceBusinessHours:q=[]}){let f=v5({referenceDate:P}),Y=!!$||q.length>0;if(!(Z&&Y))return f;let{minStart:J,maxEnd:Q,hasBusinessHours:A}=iP({allDates:X,businessHours:$,resourceBusinessHours:q,hideNonBusinessHours:Z});if(!A)return f;return f.filter((z)=>{let p=z.hour();return p>=J&&p<Q})}import{jsx as LP,jsxs as u3}from"react/jsx-runtime";var t2=()=>{let{currentDate:P,timeFormat:$,t:Z,businessHours:X,hideNonBusinessHours:q}=V(),f=P.isSame(M(),"day"),Y=U0({referenceDate:P,businessHours:X,hideNonBusinessHours:q,allDates:[P]}),_={id:"time-col",day:void 0,days:Y,className:"shrink-0 w-16 min-w-16 max-w-16 sticky left-0 bg-background z-20",gridType:"hour",noEvents:!0,renderCell:(Q)=>LP("div",{className:"text-muted-foreground p-2 text-right text-[10px] sm:text-xs flex flex-col items-center",children:Q.format($==="12-hour"?"h A":"H")})},J={id:`day-col-${P.format("YYYY-MM-DD")}`,day:P,days:Y,className:"w-[calc(100%-4rem)] flex-1",gridType:"hour"};return LP(I0,{allDayRow:LP(o0,{days:[P]}),cellSlots:[0,15,30,45],classes:{header:"w-full",body:"w-full",allDay:"w-full"},columns:[_,J],gridType:"hour",variant:"regular",children:LP("div",{className:"flex flex-1 justify-center items-center min-h-12","data-testid":"day-view-header",children:u3(D,{className:U("flex justify-center items-center text-center text-base font-semibold sm:text-xl",f&&"text-primary"),transitionKey:P.format("YYYY-MM-DD"),children:[LP("span",{className:"xs:inline hidden",children:P.format("dddd, ")}),P.format("MMMM D, YYYY"),f&&LP("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:Z("today")})]})})})};import{useMemo as n3}from"react";import{memo as d3}from"react";import{jsx as a3}from"react/jsx-runtime";var r3=({children:P,className:$})=>{let{stickyViewHeader:Z,viewHeaderClassName:X}=V((q)=>({stickyViewHeader:q.stickyViewHeader,viewHeaderClassName:q.viewHeaderClassName}));return a3("div",{className:U("flex h-12 w-fit",Z&&"sticky top-0 z-21 bg-background",$,X),"data-testid":"horizontal-grid-header",children:P})},s2=d3(r3);import{jsx as GP,jsxs as e2}from"react/jsx-runtime";var f5=({rows:P,children:$,classes:Z,allDay:X,gridType:q,variant:f="resource",dayNumberHeight:Y})=>{let{currentDate:_}=V(),J=f==="resource",Q=!J,A=$&&GP(s2,{className:Z?.header,children:$});return e2("div",{className:"h-full flex flex-col","data-testid":"horizontal-grid-container",children:[Q&&A,e2(R0,{className:U("h-full",Q&&"overflow-auto"),"data-testid":"horizontal-grid-scroll",viewPortProps:{className:"*:flex! *:flex-col! *:min-h-full"},children:[J&&A,GP("div",{className:U("flex flex-1 w-fit",Z?.body),"data-testid":"horizontal-grid-body",children:GP("div",{className:"relative w-full flex flex-col flex-1",children:P.map((z,p)=>GP(Z5,{allDay:z.allDay??X,dayNumberHeight:Y,gridType:q,isLastRow:p===P.length-1,variant:f,...z},z.id))},_.format("YYYY-MM"))}),GP(m0,{className:"z-30"}),GP(m0,{className:"z-30",orientation:"horizontal"})]})]})};import{jsx as T5}from"react/jsx-runtime";var P1=({className:P})=>{let{firstDayOfWeek:$,stickyViewHeader:Z,viewHeaderClassName:X,currentDate:q}=V(),f=Y0(q,$);return T5("div",{className:U("flex w-full",Z&&"sticky top-0 z-20",X,P),"data-testid":"month-header",children:f.map((Y,_)=>T5(D,{className:"py-2 text-center font-medium border-r last:border-r-0 border-b flex-1","data-testid":`weekday-header-${Y.format("ddd").toLowerCase()}`,delay:_*0.05,transitionKey:Y.toISOString(),children:T5("span",{className:"text-sm capitalize",children:Y.format("ddd")})},Y.toISOString()))})};import{jsx as $1}from"react/jsx-runtime";var Z1=()=>{let{currentDate:P,firstDayOfWeek:$}=V(),X=n3(()=>jP(P,$),[P,$]).map((q,f)=>({id:`week-${f}`,columns:q.map((Y)=>({id:`col-${Y.toISOString()}`,day:Y,className:"w-auto",gridType:"day"})),className:"flex-1",showDayNumber:!0}));return $1(f5,{classes:{body:"w-full",header:"w-full"},rows:X,variant:"regular",children:$1(P1,{className:"h-12"})})};import{useMemo as J5}from"react";import{jsx as l0,jsxs as w5}from"react/jsx-runtime";var f1="w-[calc((100%-4rem)/var(--visible-days))] min-w-[calc((100%-4rem)/var(--visible-days))] flex-1",J1="w-10 sm:w-16 min-w-10 sm:min-w-16 max-w-10 sm:max-w-16",X1=()=>{let{t:P,currentDate:$,firstDayOfWeek:Z,selectDate:X,openEventForm:q,timeFormat:f,businessHours:Y,hideNonBusinessHours:_,hiddenDays:J}=V(),Q=J5(()=>Y0($,Z),[$,Z]),A=J5(()=>J?Q.filter((G)=>!J.has(G.day())):Q,[Q,J]),p={id:"time-col",days:J5(()=>U0({referenceDate:$,businessHours:Y,hideNonBusinessHours:_,allDates:Q}),[$,Y,_,Q]),day:void 0,className:`shrink-0 ${J1} sticky left-0 bg-background z-20`,gridType:"hour",noEvents:!0,renderCell:(G)=>l0("div",{className:"text-muted-foreground p-2 text-right text-[10px] sm:text-xs flex flex-col items-center",children:G.format(f==="12-hour"?"h A":"H")})},F=J5(()=>{return A.map((G)=>({id:`day-col-${G.format("YYYY-MM-DD")}`,day:G,label:G.format("D"),className:f1,days:U0({referenceDate:G,businessHours:Y,hideNonBusinessHours:_,allDates:Q}),value:G}))},[Q,Y,_,A.map]),L={"--visible-days":A.length};return l0(I0,{allDayRow:l0(o0,{classes:{cell:f1,spacer:J1},days:A}),classes:{header:"w-full h-18",body:"w-full"},columns:[p,...F],gridType:"hour",style:L,variant:"regular",children:w5("div",{className:"flex h-full flex-1","data-testid":"week-view-header",children:[l0("div",{className:"w-10 sm:w-16 h-full shrink-0 items-center justify-center border-r p-2 flex",children:w5("div",{className:"flex flex-col items-center justify-center",children:[l0("span",{className:"text-muted-foreground text-xs",children:P("week")}),l0("span",{className:"font-medium",children:$.week()})]})}),A.map((G,N)=>{let K=G.isSame(M(),"day"),W=`week-day-header-${G.toISOString()}`;return w5(D,{className:U("hover:bg-accent flex-1 flex flex-col justify-center cursor-pointer p-1 text-center sm:p-2 border-r last:border-r-0 w-50 h-full",K&&"bg-primary/10 font-bold"),"data-testid":`week-day-header-${G.format("dddd").toLowerCase()}`,delay:N*0.05,onClick:()=>{X(G),q({start:G})},transitionKey:W,children:[l0("div",{className:"text-xs sm:text-sm",children:G.format("ddd")}),l0("div",{className:U("mx-auto mt-1 flex h-5 w-5 items-center justify-center rounded-full text-xs",K&&"bg-primary text-primary-foreground"),children:G.format("D")})]},W)})]})})};import{jsx as i0,jsxs as SP}from"react/jsx-runtime";var t3=[{id:"sun",label:"S"},{id:"mon",label:"M"},{id:"tue",label:"T"},{id:"wed",label:"W"},{id:"thu",label:"T"},{id:"fri",label:"F"},{id:"sat",label:"S"}],s3=["bg-primary","bg-blue-500","bg-green-500"],e3=42,P$=(P)=>{if(P===0)return"";let $=P>1?"s":"";return`${P} event${$}`},q1=()=>{let{currentDate:P,selectDate:$,events:Z,setView:X,getEventsForDateRange:q,t:f}=V(),Y=P.year(),_=()=>{return Array.from({length:12},(L,G)=>{let N=M().year(Y).month(G).startOf("month"),K=Z.filter((W)=>W.start.year()===Y&&W.start.month()===G);return{date:N,name:N.format("MMMM"),eventCount:K.length,monthKey:N.format("MM")}})},J=(L)=>{let G=L.startOf("month").startOf("week");return Array.from({length:e3},(N,K)=>{let W=G.add(K,"day"),B=W.startOf("day"),I=W.endOf("day"),S=q(B,I);return{date:W,dayKey:W.format("YYYY-MM-DD"),isInCurrentMonth:W.month()===L.month(),isToday:W.isSame(M(),"day"),isSelected:W.isSame(P,"day"),eventCount:S.length}})},Q=(L,G,N)=>{N?.stopPropagation(),$(L),X(G)},A=(L)=>{let G=L===1?f("event"):f("events");return`${L} ${G}`},z=(L)=>{let N=L.isInCurrentMonth?"":"text-muted-foreground opacity-50",K=L.isToday?"bg-primary text-primary-foreground rounded-full":"",W=L.isSelected&&!L.isToday?"bg-muted rounded-full font-bold":"",B=L.eventCount>0&&!L.isToday&&!L.isSelected?"font-medium":"";return U("relative flex aspect-square w-full cursor-pointer flex-col items-center justify-center hover:bg-accent rounded-sm transition-colors duration-200",N,K,W,B)},p=(L,G)=>{return U("h-[3px] w-[3px] rounded-full",G?"bg-primary-foreground":L)},F=_();return SP(R0,{className:"h-full","data-testid":"year-view",children:[i0("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((L,G)=>{let N=J(L.date),K=G*0.05;return SP("div",{className:"hover:border-primary flex flex-col rounded-lg border p-3 text-left transition-all duration-200 hover:shadow-md","data-testid":`year-month-${L.monthKey}`,children:[SP(D,{className:"mb-2 flex items-center justify-between",delay:K,transitionKey:`month-${L.monthKey}`,children:[i0("button",{className:"text-lg font-medium hover:underline cursor-pointer","data-testid":`year-month-title-${L.monthKey}`,onClick:()=>Q(L.date,"month"),type:"button",children:L.name}),L.eventCount>0&&i0("span",{className:"bg-primary text-primary-foreground rounded-full px-2 py-1 text-xs","data-testid":`year-month-event-count-${L.monthKey}`,children:A(L.eventCount)})]},`month-${L.monthKey}`),SP("div",{className:"grid grid-cols-7 gap-[1px] text-[0.6rem]","data-testid":`year-mini-calendar-${L.monthKey}`,children:[t3.map((W)=>i0("div",{className:"text-muted-foreground h-3 text-center",children:W.label},`header-${L.monthKey}-${W.id}`)),N.map((W)=>{let B=`year-day-${L.date.format("YYYY-MM")}-${W.dayKey}`,I=W.eventCount>0,S=Math.min(W.eventCount,3),O=s3.slice(0,S);return SP("button",{className:z(W),"data-testid":B,onClick:(w)=>Q(W.date,"day",w),title:P$(W.eventCount),type:"button",children:[i0("span",{className:"text-center leading-none",children:W.date.date()}),I&&i0("div",{className:U("absolute bottom-0 flex w-full justify-center space-x-[1px]",W.isToday&&"bottom-[1px]"),children:O.map((w)=>i0("span",{className:p(w,W.isToday)},w))})]},W.dayKey)})]})]},L.monthKey)})}),i0(m0,{className:"z-30"})]})};import{useCallback as m5,useMemo as $$}from"react";import{jsx as Z$}from"react/jsx-runtime";var Q1=({children:P,events:$=[],firstDayOfWeek:Z=0,initialView:X="month",initialDate:q,renderEvent:f,onEventClick:Y,onCellClick:_,onViewChange:J,onEventAdd:Q,onEventUpdate:A,onEventDelete:z,onDateChange:p,locale:F,timezone:L,disableCellClick:G,disableEventClick:N,disableDragAndDrop:K,dayMaxEvents:W,eventSpacing:B=h0,stickyViewHeader:I=!0,viewHeaderClassName:S="",headerComponent:O,headerClassName:w,businessHours:h,renderEventForm:l,translations:d,translator:y,timeFormat:j="12-hour",classesOverride:x,renderCurrentTimeIndicator:C,hideNonBusinessHours:s=!1,hiddenDays:X0})=>{let H=yP({events:$,firstDayOfWeek:Z,initialView:X,initialDate:q,businessHours:h,onEventAdd:Q,onEventUpdate:A,onEventDelete:z,onDateChange:p,onViewChange:J,locale:F,timezone:L,translations:d,translator:y}),g=m5((r)=>{H.setSelectedEvent(r),H.setIsEventFormOpen(!0)},[H]),e=m5((r)=>{if(N)return;if(Y)Y(r);else g(r)},[N,Y,g]),P0=m5((r)=>{if(G)return;if(_)_(r);else H.openEventForm(r)},[_,G,H]),q0=$$(()=>({currentDate:H.currentDate,view:H.view,events:H.events,rawEvents:H.rawEvents,currentLocale:H.currentLocale,isEventFormOpen:H.isEventFormOpen,selectedEvent:H.selectedEvent,selectedDate:H.selectedDate,firstDayOfWeek:H.firstDayOfWeek,setCurrentDate:H.setCurrentDate,selectDate:H.selectDate,setView:H.setView,nextPeriod:H.nextPeriod,prevPeriod:H.prevPeriod,today:H.today,addEvent:H.addEvent,updateEvent:H.updateEvent,updateRecurringEvent:H.updateRecurringEvent,deleteEvent:H.deleteEvent,deleteRecurringEvent:H.deleteRecurringEvent,openEventForm:H.openEventForm,closeEventForm:H.closeEventForm,getEventsForDateRange:H.getEventsForDateRange,findParentRecurringEvent:H.findParentRecurringEvent,renderEvent:f,onEventClick:e,onCellClick:P0,locale:F,timezone:L,disableCellClick:G,disableEventClick:N,disableDragAndDrop:K,dayMaxEvents:W,eventSpacing:B,stickyViewHeader:I,viewHeaderClassName:S,headerComponent:O,headerClassName:w,businessHours:h,renderEventForm:l,t:H.t,timeFormat:j,classesOverride:x,renderCurrentTimeIndicator:C,hideNonBusinessHours:s,hiddenDays:X0}),[H,f,e,P0,F,L,G,N,K,W,B,I,S,O,w,h,l,j,x,C,s,X0]);return Z$(CP.Provider,{value:q0,children:P})};import{jsx as F0,jsxs as q$}from"react/jsx-runtime";var f$=()=>{let{view:P,dayMaxEvents:$}=V();return q$("div",{className:"flex flex-col w-full h-full","data-testid":"ilamy-calendar",children:[F0(VP,{className:"p-1"}),F0(vP,{children:F0(D,{className:"w-full h-[calc(100%-3.5rem)]",direction:"horizontal",transitionKey:P,children:F0("div",{className:"border h-full w-full","data-testid":"calendar-body",children:{month:F0(Z1,{dayMaxEvents:$},"month"),week:F0(X1,{},"week"),day:F0(t2,{},"day"),year:F0(q1,{},"year")}[P]})})}),F0(aP,{})]})},J$=(P)=>{if(!P||P.length===0)return;return new Set(P.map(($)=>g0[$]))},X$=({events:P,firstDayOfWeek:$="sunday",initialView:Z="month",initialDate:X,dayMaxEvents:q=QP,eventSpacing:f=h0,stickyViewHeader:Y=!0,viewHeaderClassName:_="",timeFormat:J="12-hour",hideNonBusinessHours:Q=!1,hiddenDays:A,...z})=>{return F0(Q1,{dayMaxEvents:q,eventSpacing:f,events:mP(P),firstDayOfWeek:g0[$],hiddenDays:J$(A),hideNonBusinessHours:Q,initialDate:$P(X),initialView:Z,stickyViewHeader:Y,timeFormat:J,viewHeaderClassName:_,...z,children:F0(f$,{})})};import{jsx as Q$}from"react/jsx-runtime";var AP=({days:P,gridType:$="day",children:Z,classes:X})=>{let{getVisibleResources:q}=V(),f=q(),Y=P.map((J)=>{let Q=Array.isArray(J);return{id:`col-${Q?J[0]?.format("YYYY-MM-DD"):J.toISOString()}`,day:Q?void 0:J,days:Q?J:void 0,className:X?.cell,gridType:$}}),_=f.map((J)=>({id:J.id,title:J.title,resource:J,columns:Y}));return Q$(f5,{classes:X,dayNumberHeight:0,gridType:$,rows:_,children:Z})};import{jsx as bP,jsxs as Y$}from"react/jsx-runtime";var Y1=()=>{let{currentDate:P,t:$,timeFormat:Z,businessHours:X,hideNonBusinessHours:q,getVisibleResources:f}=V(),Y=f(),_=U0({referenceDate:P,businessHours:X,hideNonBusinessHours:q,allDates:[P],resourceBusinessHours:Y.map((J)=>J.businessHours).filter(Boolean)});return Y$(AP,{classes:{header:"min-w-full",body:"min-w-full",cell:"min-w-20 flex-1"},days:_,gridType:"hour",children:[bP("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:bP("div",{className:"text-sm",children:$("resources")})}),bP("div",{className:"flex-1 flex flex-col",children:bP("div",{className:"flex h-12",children:_.map((J,Q)=>{let A=J.isSame(M(),"hour"),z=`resource-day-header-${J.toISOString()}`;return bP(D,{className:U("min-w-20 flex-1 border-b border-r last:border-r-0 flex items-center justify-center text-xs shrink-0",A&&"bg-blue-50 text-blue-600 font-medium"),"data-testid":`resource-day-time-label-${J.format("HH")}`,delay:Q*0.05,transitionKey:`${z}-motion`,children:J.format(Z==="12-hour"?"h A":"H")},`${z}-animated`)})})})]})};import{jsx as NP,jsxs as _1}from"react/jsx-runtime";var K1=()=>{let{currentDate:P,getVisibleResources:$,timeFormat:Z,businessHours:X,hideNonBusinessHours:q}=V(),f=$(),Y=U0({referenceDate:P,businessHours:X,hideNonBusinessHours:q,allDates:[P],resourceBusinessHours:f.map((Q)=>Q.businessHours).filter(Boolean)}),_={id:"time-col",day:void 0,days:Y,className:"shrink-0 w-16 min-w-16 max-w-16 sticky left-0 bg-background z-20",gridType:"hour",noEvents:!0,renderCell:(Q)=>NP("div",{className:"text-muted-foreground p-2 text-right text-[10px] sm:text-xs flex flex-col items-center",children:Q.format(Z==="12-hour"?"h A":"H")})},J=f.map((Q)=>({id:`day-col-${P.format("YYYY-MM-DD")}-resource-${Q.id}`,resourceId:Q.id,resource:Q,days:Y,day:P,gridType:"hour"}));return NP(I0,{allDayRow:_1("div",{className:"flex w-full",children:[NP(UP,{}),f.map((Q)=>NP(o0,{classes:{cell:"min-w-50"},days:[P],resource:Q,showSpacer:!1},`resource-allday-row-${Q.id}`))]}),cellSlots:[0,15,30,45],classes:{body:"w-full",header:"w-full"},columns:[_,...J],"data-testid":"resource-day",gridType:"hour",children:_1("div",{className:"flex border-b h-12 flex-1","data-testid":"resource-month-header",children:[NP("div",{className:"shrink-0 border-r w-16 sticky top-0 left-0 bg-background z-20"}),f.map((Q)=>NP(c0,{className:"min-w-50 flex-1",resource:Q},`resource-cell-${Q.id}`))]})})};import{jsx as z1}from"react/jsx-runtime";var U1=()=>{let{orientation:P}=V();if(P==="vertical")return z1(K1,{});return z1(Y1,{})};import{useMemo as _$}from"react";import{jsx as X5,jsxs as L1}from"react/jsx-runtime";var G1=()=>{let{currentDate:P,t:$}=V(),Z=_$(()=>{return y5(P)},[P]);return L1(AP,{days:Z,children:[X5("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:X5("div",{className:"text-sm",children:$("resources")})}),Z.map((X,q)=>{let f=`resource-month-header-${X.toISOString()}`;return L1(D,{className:"w-20 border-b border-r shrink-0 flex items-center justify-center flex-col",delay:q*0.05,transitionKey:`${f}-motion`,children:[X5("div",{className:"text-xs font-medium",children:X.format("D")}),X5("div",{className:"text-xs text-muted-foreground",children:X.format("ddd")})]},`${f}-animated`)})]})};import{jsx as HP,jsxs as A1}from"react/jsx-runtime";var N1=()=>{let{currentDate:P,getVisibleResources:$}=V(),Z=$(),X=P.startOf("month"),q=Array.from({length:P.daysInMonth()},(_,J)=>X.add(J,"day")),f={id:"date-col",days:q,day:void 0,className:"shrink-0 w-16 min-w-16 max-w-16 sticky left-0 bg-background z-20",gridType:"day",noEvents:!0,renderCell:(_)=>A1("div",{className:"text-muted-foreground p-2 text-right text-[10px] sm:text-xs flex flex-col items-center",children:[HP("span",{children:_.format("D")}),HP("span",{children:_.format("ddd")})]})},Y=Z.map((_)=>({id:`month-col-resource-${_.id}`,day:void 0,resourceId:_.id,days:q,gridType:"day"}));return HP(I0,{classes:{header:"w-full",body:"w-full"},columns:[f,...Y],"data-testid":"resource-month-vertical-grid",children:A1("div",{className:"flex border-b h-12 flex-1","data-testid":"resource-month-header",children:[HP("div",{className:"shrink-0 border-r w-16 sticky top-0 left-0 bg-background z-20"}),Z.map((_)=>HP(c0,{className:"min-w-50 flex-1",resource:_},`resource-cell-${_.id}`))]})})};import{jsx as W1}from"react/jsx-runtime";var p1=()=>{let{orientation:P}=V();if(P==="vertical")return W1(N1,{});return W1(G1,{})};import{useMemo as k5}from"react";import{jsx as u0,jsxs as h5}from"react/jsx-runtime";var F1=()=>{let{currentDate:P,firstDayOfWeek:$,t:Z,timeFormat:X,businessHours:q,hideNonBusinessHours:f,getVisibleResources:Y}=V(),_=Y(),J=k5(()=>Y0(P,$),[P,$]),Q=k5(()=>_.map((z)=>z.businessHours).filter(Boolean),[_]),A=k5(()=>{return J.map((z)=>U0({referenceDate:z,businessHours:q,hideNonBusinessHours:f,resourceBusinessHours:Q}))},[J,q,f,Q]);return h5(AP,{classes:{header:"h-24 min-w-full",body:"min-w-full",cell:"min-w-20 flex-1"},days:A,gridType:"hour",children:[u0("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:u0("div",{className:"text-sm",children:Z("resources")})}),h5("div",{className:"flex-1 flex flex-col",children:[u0("div",{className:"flex h-12",children:J.map((z,p)=>{let F=z.isSame(M(),"day"),L=`resource-week-header-${z.toISOString()}-day`;return u0(D,{className:U("shrink-0 border-r last:border-r-0 border-b flex-1 flex items-center text-center font-medium",F&&"bg-blue-50 text-blue-600"),"data-testid":"resource-week-day-header",delay:p*0.05,transitionKey:`${L}-motion`,children:h5("div",{className:"sticky left-1/2",children:[u0("div",{className:"text-sm",children:z.format("ddd")}),u0("div",{className:"text-xs text-muted-foreground",children:z.format("M/D")})]})},`${L}-animated`)})}),u0("div",{className:"flex h-12 border-b",children:A.flat().map((z,p)=>{let F=z.isSame(M(),"hour"),L=`resource-week-header-${z.toISOString()}-hour-${p}`;return u0(D,{className:U("min-w-20 flex-1 border-r flex items-center justify-center text-xs shrink-0",F&&"bg-blue-50 text-blue-600 font-medium"),"data-testid":`resource-week-time-label-${z.format("HH")}`,delay:p*0.005,transitionKey:`${L}-motion`,children:z.format(X==="12-hour"?"h A":"H")},`${L}-animated`)})})]})]})};import{useMemo as TP}from"react";import{jsx as A0,jsxs as wP}from"react/jsx-runtime";var V1=()=>{let{currentDate:P,getVisibleResources:$,firstDayOfWeek:Z,timeFormat:X,t:q,businessHours:f,hideNonBusinessHours:Y,hiddenDays:_}=V(),J=$(),Q=TP(()=>Y0(P,Z),[P,Z]),A=TP(()=>_?Q.filter((L)=>!_.has(L.day())):Q,[Q,_]),z=TP(()=>U0({referenceDate:P,businessHours:f,hideNonBusinessHours:Y,allDates:Q,resourceBusinessHours:J.map((L)=>L.businessHours).filter(Boolean)}),[P,f,Y,Q,J]),p=TP(()=>({id:"time-col",days:z,day:void 0,className:"shrink-0 w-16 min-w-16 max-w-16 sticky left-0 bg-background z-20",gridType:"hour",noEvents:!0,renderCell:(L)=>A0("div",{className:"text-muted-foreground p-2 text-right text-[10px] sm:text-xs flex flex-col items-center",children:L.format(X==="12-hour"?"h A":"H")})}),[z,X]),F=TP(()=>J.flatMap((L)=>A.map((G)=>({id:`day-col-${G.format("YYYY-MM-DD")}-resource-${L.id}`,resourceId:L.id,resource:L,day:G,days:U0({referenceDate:G,businessHours:f,hideNonBusinessHours:Y,allDates:Q,resourceBusinessHours:J.map((N)=>N.businessHours).filter(Boolean)}),gridType:"hour"}))),[J,Q,f,Y,A.map]);return A0(I0,{allDayRow:wP("div",{className:"flex",children:[A0(UP,{}),J.map((L)=>A0(o0,{classes:{cell:"min-w-50"},days:A,resource:L,showSpacer:!1},`resource-week-allday-row-${L.id}`))]}),classes:{header:"h-24"},columns:[p,...F],"data-testid":"resource-week",gridType:"hour",children:wP("div",{className:"flex-1 flex flex-col",children:[wP("div",{className:"flex h-12",children:[A0("div",{className:"shrink-0 w-16 border-r z-20 bg-background sticky left-0",children:A0("span",{className:"px-2 h-full w-full flex justify-center items-end text-xs text-muted-foreground",children:q("week")})}),J.map((L,G)=>{let N=`resource-week-header-${L.id}-day`;return A0(D,{className:U("shrink-0 border-r last:border-r-0 border-b flex items-center text-center font-medium"),delay:G*0.05,style:{width:`calc(${A.length} * var(--spacing) * 50)`},transitionKey:`${N}-motion`,children:A0(c0,{className:"h-full w-full flex-1",resource:L,children:A0("div",{className:"sticky left-1/2 text-sm font-medium truncate",children:L.title})})},`${N}-animated`)})]}),wP("div",{className:"flex h-12",children:[A0("div",{className:"shrink-0 w-16 border-r border-b z-20 bg-background sticky left-0",children:A0("span",{className:"px-2 h-full w-full flex justify-center items-start font-medium",children:P.week()})}),F.map((L,G)=>{let N=L.day,K=`resource-week-header-${N.toISOString()}-hour-${L.resourceId}`;return wP(D,{className:U("w-50 border-r last:border-r-0 border-b flex flex-col items-center justify-center text-xs shrink-0 bg-background"),"data-testid":`resource-week-time-label-${N.format("HH")}`,delay:G*0.05,transitionKey:`${K}-motion`,children:[A0("div",{className:"text-sm",children:N.format("ddd")}),A0("div",{className:"text-xs text-muted-foreground",children:N.format("M/D")})]},`${K}-animated`)})]})]})})};import{jsx as O1}from"react/jsx-runtime";var B1=()=>{let{orientation:P}=V();if(P==="vertical")return O1(V1,{});return O1(F1,{})};import{jsx as d0,jsxs as K$}from"react/jsx-runtime";var M1=()=>{let{view:P}=V();return K$("div",{className:"flex flex-col w-full h-full","data-testid":"ilamy-resource-calendar",children:[d0(VP,{className:"p-1"}),d0(vP,{children:d0(D,{className:"w-full h-[calc(100%-3.5rem)] @container/calendar-body",direction:"horizontal",transitionKey:P,children:d0("div",{className:"border h-full w-full","data-testid":"calendar-body",children:{month:d0(p1,{},"month"),week:d0(B1,{},"week"),day:d0(U1,{},"day")}[P]})})}),d0(aP,{})]})};import{jsx as R1}from"react/jsx-runtime";var z$=(P)=>{if(!P||P.length===0)return;return new Set(P.map(($)=>g0[$]))},U$=({events:P=[],resources:$=[],firstDayOfWeek:Z="sunday",initialView:X="month",initialDate:q,disableDragAndDrop:f=!1,dayMaxEvents:Y=QP,timeFormat:_="12-hour",eventSpacing:J=h0,hiddenDays:Q,...A})=>{return R1(r5,{dayMaxEvents:Y,disableDragAndDrop:f,eventSpacing:J,events:mP(P),firstDayOfWeek:g0[Z],hiddenDays:z$(Q),initialDate:$P(q),initialView:X,resources:$,timeFormat:_,...A,children:R1(M1,{})})};export{e1 as useIlamyCalendarContext,qP as isRecurringEvent,Q5 as generateRecurringEvents,Y5 as defaultTranslations,Qq as RRule,U$ as IlamyResourceCalendar,X$ as IlamyCalendar};
5
5
 
6
- //# debugId=64847D6D159C210E64756E2164756E21
7
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL2luZGV4LnRzIiwgInNyYy9mZWF0dXJlcy9yZWN1cnJlbmNlL3V0aWxzL3JlY3VycmVuY2UtaGFuZGxlci50cyIsICJzcmMvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnLnRzIiwgInNyYy9saWIvdXRpbHMvaW5kZXgudHMiLCAic3JjL2NvbXBvbmVudHMvYW5pbWF0aW9ucy9hbmltYXRlZC1zZWN0aW9uLnRzeCIsICJzcmMvY29tcG9uZW50cy9kcmFnLWFuZC1kcm9wL2NhbGVuZGFyLWRuZC1jb250ZXh0LnRzeCIsICJzcmMvY29tcG9uZW50cy91aS9idXR0b24udHN4IiwgInNyYy9jb21wb25lbnRzL3VpL2RpYWxvZy50c3giLCAic3JjL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0LnRzIiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQudHMiLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbnRleHRzL3Jlc291cmNlLWNhbGVuZGFyLWNvbnRleHQvY29udGV4dC50cyIsICJzcmMvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29udGV4dHMvcmVzb3VyY2UtY2FsZW5kYXItY29udGV4dC9wcm92aWRlci50c3giLCAic3JjL2hvb2tzL3VzZS1jYWxlbmRhci1lbmdpbmUudHMiLCAic3JjL2xpYi90cmFuc2xhdGlvbnMvZGVmYXVsdC50cyIsICJzcmMvbGliL3V0aWxzL2RhdGUtdXRpbHMudHMiLCAic3JjL2xpYi9jb25zdGFudHMudHMiLCAic3JjL2ZlYXR1cmVzL3JlY3VycmVuY2UvY29tcG9uZW50cy9yZWN1cnJlbmNlLWVkaXQtZGlhbG9nL3JlY3VycmVuY2UtZWRpdC1kaWFsb2cudHN4IiwgInNyYy9jb21wb25lbnRzL2RyYWctYW5kLWRyb3AvZG5kLXV0aWxzLnRzIiwgInNyYy9jb21wb25lbnRzL2RyYWctYW5kLWRyb3AvZXZlbnQtZHJhZy1vdmVybGF5LnRzeCIsICJzcmMvY29tcG9uZW50cy9ldmVudC1mb3JtL2V2ZW50LWZvcm0udHN4IiwgInNyYy9jb21wb25lbnRzL3VpL2NoZWNrYm94LnRzeCIsICJzcmMvY29tcG9uZW50cy91aS9kYXRlLXBpY2tlci50c3giLCAic3JjL2NvbXBvbmVudHMvdWkvY2FsZW5kYXIudHN4IiwgInNyYy9jb21wb25lbnRzL3VpL3BvcG92ZXIudHN4IiwgInNyYy9jb21wb25lbnRzL3VpL2lucHV0LnRzeCIsICJzcmMvY29tcG9uZW50cy91aS9sYWJlbC50c3giLCAic3JjL2NvbXBvbmVudHMvdWkvc2Nyb2xsLWFyZWEudHN4IiwgInNyYy9jb21wb25lbnRzL3VpL3RpbWUtcGlja2VyLnRzeCIsICJzcmMvaG9va3MvdXNlLWF1dG9jb21wbGV0ZS10aW1lcGlja2VyLnRzIiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci91dGlscy9idXNpbmVzcy1ob3Vycy50cyIsICJzcmMvZmVhdHVyZXMvY2FsZW5kYXIvdXRpbHMvZXZlbnQtZm9ybS11dGlscy50cyIsICJzcmMvZmVhdHVyZXMvcmVjdXJyZW5jZS9jb21wb25lbnRzL3JlY3VycmVuY2UtZWRpdG9yL3JlY3VycmVuY2UtZWRpdG9yLnRzeCIsICJzcmMvY29tcG9uZW50cy91aS9jYXJkLnRzeCIsICJzcmMvY29tcG9uZW50cy91aS9zZWxlY3QudHN4IiwgInNyYy9mZWF0dXJlcy9yZWN1cnJlbmNlL2hvb2tzL3VzZVJlY3VycmluZ0V2ZW50QWN0aW9ucy50cyIsICJzcmMvY29tcG9uZW50cy9ldmVudC1mb3JtL2V2ZW50LWZvcm0tZGlhbG9nLnRzeCIsICJzcmMvY29tcG9uZW50cy9oZWFkZXIvYmFzZS1oZWFkZXIudHN4IiwgInNyYy9saWIvdXRpbHMvZXhwb3J0LWljYWwudHMiLCAic3JjL2NvbXBvbmVudHMvaGVhZGVyL3RpdGxlLWNvbnRlbnQudHN4IiwgInNyYy9jb21wb25lbnRzL2hlYWRlci92aWV3LWNvbnRyb2xzLnRzeCIsICJzcmMvY29tcG9uZW50cy9hbGwtZGF5LXJvdy9hbGwtZGF5LXJvdy50c3giLCAic3JjL2NvbXBvbmVudHMvaG9yaXpvbnRhbC1ncmlkL2hvcml6b250YWwtZ3JpZC1yb3cudHN4IiwgInNyYy9jb21wb25lbnRzL2dyaWQtY2VsbC50c3giLCAic3JjL2NvbXBvbmVudHMvZGF5LW51bWJlci50c3giLCAic3JjL2NvbXBvbmVudHMvYWxsLWV2ZW50cy1kaWFsb2cudHN4IiwgInNyYy9jb21wb25lbnRzL2RyYWdnYWJsZS1ldmVudC9kcmFnZ2FibGUtZXZlbnQudHN4IiwgInNyYy9jb21wb25lbnRzL2Ryb3BwYWJsZS1jZWxsLnRzeCIsICJzcmMvY29tcG9uZW50cy9yZXNvdXJjZS1jZWxsLnRzeCIsICJzcmMvY29tcG9uZW50cy9ob3Jpem9udGFsLWdyaWQvaG9yaXpvbnRhbC1ncmlkLWV2ZW50cy1sYXllci50c3giLCAic3JjL2ZlYXR1cmVzL2NhbGVuZGFyL2hvb2tzL3VzZVByb2Nlc3NlZFdlZWtFdmVudHMudHMiLCAic3JjL2xpYi91dGlscy9wb3NpdGlvbi13ZWVrLWV2ZW50cy50cyIsICJzcmMvY29tcG9uZW50cy9hbGwtZGF5LXJvdy9hbGwtZGF5LWNlbGwudHN4IiwgInNyYy9jb21wb25lbnRzL3ZlcnRpY2FsLWdyaWQvdmVydGljYWwtZ3JpZC1jb2wudHN4IiwgInNyYy9jb21wb25lbnRzL3ZlcnRpY2FsLWdyaWQvdmVydGljYWwtZ3JpZC1ldmVudHMtbGF5ZXIudHN4IiwgInNyYy9jb21wb25lbnRzL2N1cnJlbnQtdGltZS1pbmRpY2F0b3IudHN4IiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci9ob29rcy91c2VQcm9jZXNzZWREYXlFdmVudHMudHMiLCAic3JjL2xpYi91dGlscy9wb3NpdGlvbi1kYXktZXZlbnRzLnRzIiwgInNyYy9jb21wb25lbnRzL3ZlcnRpY2FsLWdyaWQvdmVydGljYWwtZ3JpZC1oZWFkZXItY29udGFpbmVyLnRzeCIsICJzcmMvY29tcG9uZW50cy92ZXJ0aWNhbC1ncmlkL3ZlcnRpY2FsLWdyaWQudHN4IiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci91dGlscy92aWV3LWhvdXJzLnRzIiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci9jb21wb25lbnRzL2RheS12aWV3L2RheS12aWV3LnRzeCIsICJzcmMvZmVhdHVyZXMvY2FsZW5kYXIvY29tcG9uZW50cy9tb250aC12aWV3L21vbnRoLXZpZXcudHN4IiwgInNyYy9jb21wb25lbnRzL2hvcml6b250YWwtZ3JpZC9ob3Jpem9udGFsLWdyaWQtaGVhZGVyLWNvbnRhaW5lci50c3giLCAic3JjL2NvbXBvbmVudHMvaG9yaXpvbnRhbC1ncmlkL2hvcml6b250YWwtZ3JpZC50c3giLCAic3JjL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbXBvbmVudHMvbW9udGgtdmlldy9tb250aC1oZWFkZXIudHN4IiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci9jb21wb25lbnRzL3dlZWstdmlldy93ZWVrLXZpZXcudHN4IiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci9jb21wb25lbnRzL3llYXItdmlldy95ZWFyLXZpZXcudHN4IiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L3Byb3ZpZGVyLnRzeCIsICJzcmMvZmVhdHVyZXMvY2FsZW5kYXIvY29tcG9uZW50cy9pbGFteS1jYWxlbmRhci50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvcmVzb3VyY2UtZXZlbnQtZ3JpZC50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvZGF5LXZpZXcvcmVzb3VyY2UtZGF5LWhvcml6b250YWwudHN4IiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL2RheS12aWV3L3Jlc291cmNlLWRheS12ZXJ0aWNhbC50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvZGF5LXZpZXcvaW5kZXgudHN4IiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL21vbnRoLXZpZXcvcmVzb3VyY2UtbW9udGgtaG9yaXpvbnRhbC50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvbW9udGgtdmlldy9yZXNvdXJjZS1tb250aC12ZXJ0aWNhbC50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvbW9udGgtdmlldy9pbmRleC50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvd2Vlay12aWV3L3Jlc291cmNlLXdlZWstaG9yaXpvbnRhbC50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvd2Vlay12aWV3L3Jlc291cmNlLXdlZWstdmVydGljYWwudHN4IiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL3dlZWstdmlldy9pbmRleC50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvaWxhbXktcmVzb3VyY2UtY2FsZW5kYXIvcmVzb3VyY2UtY2FsZW5kYXItYm9keS50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvaWxhbXktcmVzb3VyY2UtY2FsZW5kYXIvaWxhbXktcmVzb3VyY2UtY2FsZW5kYXIudHN4Il0sCiAgInNvdXJjZXNDb250ZW50IjogWwogICAgIi8vIE1haW4gY2FsZW5kYXIgY29tcG9uZW50c1xuXG4vLyBSZS1leHBvcnQgcnJ1bGUuanMgdHlwZXMgZm9yIGNvbnZlbmllbmNlXG5leHBvcnQgdHlwZSB7IEZyZXF1ZW5jeSwgV2Vla2RheSB9IGZyb20gJ3JydWxlJ1xuZXhwb3J0IHsgUlJ1bGUgfSBmcm9tICdycnVsZSdcbi8vIEV4cG9ydCB0eXBlc1xuZXhwb3J0IHR5cGUgeyBSUnVsZU9wdGlvbnMgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvdHlwZXMnXG4vLyBSUlVMRS1iYXNlZCByZWN1cnJlbmNlIHN5c3RlbVxuZXhwb3J0IHtcblx0Z2VuZXJhdGVSZWN1cnJpbmdFdmVudHMsXG5cdGlzUmVjdXJyaW5nRXZlbnQsXG59IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS91dGlscy9yZWN1cnJlbmNlLWhhbmRsZXInXG5leHBvcnQgdHlwZSB7IEV2ZW50Rm9ybVByb3BzIH0gZnJvbSAnLi9jb21wb25lbnRzL2V2ZW50LWZvcm0vZXZlbnQtZm9ybSdcbmV4cG9ydCB0eXBlIHsgQnVzaW5lc3NIb3VycywgQ2FsZW5kYXJFdmVudCwgV2Vla0RheXMgfSBmcm9tICcuL2NvbXBvbmVudHMvdHlwZXMnXG5leHBvcnQgeyBJbGFteUNhbGVuZGFyIH0gZnJvbSAnLi9mZWF0dXJlcy9jYWxlbmRhci9jb21wb25lbnRzL2lsYW15LWNhbGVuZGFyJ1xuZXhwb3J0IHR5cGUgeyBVc2VJbGFteUNhbGVuZGFyQ29udGV4dFJldHVybiB9IGZyb20gJy4vZmVhdHVyZXMvY2FsZW5kYXIvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9jb250ZXh0J1xuLy8gUHVibGljIGNhbGVuZGFyIGNvbnRleHQgaG9va3NcbmV4cG9ydCB7IHVzZUlsYW15Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnLi9mZWF0dXJlcy9jYWxlbmRhci9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5leHBvcnQgdHlwZSB7XG5cdENlbGxDbGlja0luZm8sXG5cdElsYW15Q2FsZW5kYXJQcm9wcyxcblx0UmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3JQcm9wcyxcbn0gZnJvbSAnLi9mZWF0dXJlcy9jYWxlbmRhci90eXBlcydcbmV4cG9ydCB0eXBlIHsgSWxhbXlSZXNvdXJjZUNhbGVuZGFyUHJvcHMgfSBmcm9tICcuL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvaWxhbXktcmVzb3VyY2UtY2FsZW5kYXInXG5leHBvcnQgeyBJbGFteVJlc291cmNlQ2FsZW5kYXIgfSBmcm9tICcuL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvaWxhbXktcmVzb3VyY2UtY2FsZW5kYXIvaWxhbXktcmVzb3VyY2UtY2FsZW5kYXInXG5leHBvcnQgdHlwZSB7IFVzZUlsYW15UmVzb3VyY2VDYWxlbmRhckNvbnRleHRSZXR1cm4gfSBmcm9tICcuL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbnRleHRzL3Jlc291cmNlLWNhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcbmV4cG9ydCB7IHVzZUlsYW15UmVzb3VyY2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICcuL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbnRleHRzL3Jlc291cmNlLWNhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcbi8vIFJlc291cmNlIGNhbGVuZGFyIHR5cGVzXG5leHBvcnQgdHlwZSB7IFJlc291cmNlIH0gZnJvbSAnLi9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci90eXBlcydcbmV4cG9ydCB7IGRlZmF1bHRUcmFuc2xhdGlvbnMgfSBmcm9tICcuL2xpYi90cmFuc2xhdGlvbnMvZGVmYXVsdCdcbi8vIFRyYW5zbGF0aW9uIHN5c3RlbVxuZXhwb3J0IHR5cGUge1xuXHRUcmFuc2xhdGlvbktleSxcblx0VHJhbnNsYXRpb25zLFxuXHRUcmFuc2xhdG9yRnVuY3Rpb24sXG59IGZyb20gJy4vbGliL3RyYW5zbGF0aW9ucy90eXBlcydcbmV4cG9ydCB0eXBlIHsgQ2FsZW5kYXJWaWV3LCBUaW1lRm9ybWF0IH0gZnJvbSAnLi90eXBlcydcbiIsCiAgICAiaW1wb3J0IHsgUlJ1bGUgfSBmcm9tICdycnVsZSdcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cydcbmltcG9ydCB0eXBlIHsgUlJ1bGVPcHRpb25zIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL3R5cGVzJ1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgb21pdEtleXMsIHNhZmVEYXRlIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbi8qKlxuICogQ29udmVydHMgYSBEYXlqcyBvYmplY3QgdG8gYSBcIkZsb2F0aW5nIFRpbWVcIiBEYXRlIHJlcHJlc2VudGF0aW9uLlxuICogSW4gRmxvYXRpbmcgVGltZSwgd2UgdXNlIGEgVVRDIERhdGUgb2JqZWN0IGJ1dCBzZXQgaXRzIFVUQyBjb21wb25lbnRzXG4gKiB0byBtYXRjaCB0aGUgbG9jYWwgY29tcG9uZW50cyBvZiB0aGUgdXNlcidzIGRhdGUuXG4gKlxuICogVGhpcyBpcyBlc3NlbnRpYWwgZm9yIFJSdWxlIGV2YWx1YXRpb24gYmVjYXVzZSBpdCBlbnN1cmVzIHRoYXQgYSBydWxlXG4gKiBsaWtlIFwiRXZlcnkgV2VkbmVzZGF5XCIgcmVmZXJzIHRvIHRoZSB1c2VyJ3MgbG9jYWwgV2VkbmVzZGF5LCBldmVuIGlmXG4gKiB0aGF0IHRpbWUgZmFsbHMgb24gYSBUaHVyc2RheSBpbiBhY3R1YWwgVVRDLlxuICovXG5jb25zdCB0b0Zsb2F0aW5nRGF0ZSA9IChkOiBkYXlqcy5EYXlqcyk6IERhdGUgPT4ge1xuXHRyZXR1cm4gbmV3IERhdGUoXG5cdFx0RGF0ZS5VVEMoXG5cdFx0XHRkLnllYXIoKSxcblx0XHRcdGQubW9udGgoKSxcblx0XHRcdGQuZGF0ZSgpLFxuXHRcdFx0ZC5ob3VyKCksXG5cdFx0XHRkLm1pbnV0ZSgpLFxuXHRcdFx0ZC5zZWNvbmQoKSxcblx0XHRcdGQubWlsbGlzZWNvbmQoKVxuXHRcdClcblx0KVxufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgXCJGbG9hdGluZyBUaW1lXCIgRGF0ZSBiYWNrIHRvIGEgRGF5anMgb2JqZWN0IGluIHRoZSBvcmlnaW5hbCBjb250ZXh0LlxuICogSXQgdGFrZXMgdGhlIFlNREhNUyBjb21wb25lbnRzIGZyb20gdGhlIFVUQyBEYXRlIGFuZCBhcHBsaWVzIHRoZW0gdG8gdGhlXG4gKiByZWZlcmVuY2UgRGF5anMgb2JqZWN0IChwcmVzZXJ2aW5nIGl0cyB0aW1lem9uZS9sb2NhbGUpLlxuICovXG5jb25zdCBmcm9tRmxvYXRpbmdEYXRlID0gKGRhdGU6IERhdGUsIHJlZmVyZW5jZTogZGF5anMuRGF5anMpOiBkYXlqcy5EYXlqcyA9PiB7XG5cdHJldHVybiByZWZlcmVuY2Vcblx0XHQueWVhcihkYXRlLmdldFVUQ0Z1bGxZZWFyKCkpXG5cdFx0Lm1vbnRoKGRhdGUuZ2V0VVRDTW9udGgoKSlcblx0XHQuZGF0ZShkYXRlLmdldFVUQ0RhdGUoKSlcblx0XHQuaG91cihkYXRlLmdldFVUQ0hvdXJzKCkpXG5cdFx0Lm1pbnV0ZShkYXRlLmdldFVUQ01pbnV0ZXMoKSlcblx0XHQuc2Vjb25kKGRhdGUuZ2V0VVRDU2Vjb25kcygpKVxuXHRcdC5taWxsaXNlY29uZChkYXRlLmdldFVUQ01pbGxpc2Vjb25kcygpKVxufVxuXG5leHBvcnQgY29uc3QgaXNSZWN1cnJpbmdFdmVudCA9IChldmVudDogQ2FsZW5kYXJFdmVudCk6IGJvb2xlYW4gPT4ge1xuXHRyZXR1cm4gQm9vbGVhbihldmVudC5ycnVsZSB8fCBldmVudC5yZWN1cnJlbmNlSWQgfHwgZXZlbnQudWlkKVxufVxuXG4vKipcbiAqIENvbnNpc3RlbnRseSBkZXJpdmVzIGEgcGFyZW50IFVJRCBmcm9tIGFuIGV2ZW50LlxuICogVXNlcyB0aGUgZXhwbGljaXQgYHVpZGAgaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgZmFsbHMgYmFjayB0byBgJHtpZH1AaWxhbXkuY2FsZW5kYXJgLlxuICovXG5jb25zdCBnZXRFdmVudFBhcmVudFVJRCA9IChldmVudDogQ2FsZW5kYXJFdmVudCk6IHN0cmluZyA9PiB7XG5cdHJldHVybiBldmVudC51aWQgfHwgYCR7ZXZlbnQuaWR9QGlsYW15LmNhbGVuZGFyYFxufVxuXG5pbnRlcmZhY2UgR2VuZXJhdGVSZWN1cnJpbmdFdmVudHNQcm9wcyB7XG5cdGV2ZW50OiBDYWxlbmRhckV2ZW50XG5cdGN1cnJlbnRFdmVudHM6IENhbGVuZGFyRXZlbnRbXVxuXHRzdGFydERhdGU6IGRheWpzLkRheWpzXG5cdGVuZERhdGU6IGRheWpzLkRheWpzXG59XG5cbmV4cG9ydCBjb25zdCBnZW5lcmF0ZVJlY3VycmluZ0V2ZW50cyA9ICh7XG5cdGV2ZW50LFxuXHRjdXJyZW50RXZlbnRzLFxuXHRzdGFydERhdGUsXG5cdGVuZERhdGUsXG59OiBHZW5lcmF0ZVJlY3VycmluZ0V2ZW50c1Byb3BzKTogQ2FsZW5kYXJFdmVudFtdID0+IHtcblx0Ly8gSWYgbm90IGEgcmVjdXJyaW5nIGV2ZW50LCByZXR1cm4gZW1wdHkgYXJyYXlcblx0aWYgKCFldmVudC5ycnVsZSkge1xuXHRcdHJldHVybiBbXVxuXHR9XG5cblx0dHJ5IHtcblx0XHQvLyBEVFNUQVJUIGFuZCBTRUFSQ0ggV0lORE9XIFRSQU5TRk9STUFUSU9OXG5cdFx0Ly8gVHJhbnNmb3JtIGFsbCBkYXRlcyB0byBcImZsb2F0aW5nIHRpbWVcIiAoVVRDIHdpdGggbG9jYWwgY29tcG9uZW50cylcblx0XHQvLyBUaGlzIGVuc3VyZXMgUlJ1bGUgZXZhbHVhdGVzIFwiV2VkbmVzZGF5XCIgYXMgdGhlIHVzZXIncyBsb2NhbCBXZWRuZXNkYXlcblx0XHRjb25zdCBmbG9hdGluZ1N0YXJ0ID0gdG9GbG9hdGluZ0RhdGUoZXZlbnQuc3RhcnQpXG5cdFx0Y29uc3QgZmxvYXRpbmdVbnRpbCA9IGV2ZW50LnJydWxlLnVudGlsXG5cdFx0XHQ/IHRvRmxvYXRpbmdEYXRlKGRheWpzKGV2ZW50LnJydWxlLnVudGlsKSlcblx0XHRcdDogdW5kZWZpbmVkXG5cblx0XHRjb25zdCBydWxlT3B0aW9uczogUlJ1bGVPcHRpb25zID0ge1xuXHRcdFx0Li4uZXZlbnQucnJ1bGUsXG5cdFx0XHRkdHN0YXJ0OiBmbG9hdGluZ1N0YXJ0LFxuXHRcdFx0dW50aWw6IGZsb2F0aW5nVW50aWwsXG5cdFx0fVxuXHRcdGNvbnN0IHJ1bGUgPSBuZXcgUlJ1bGUocnVsZU9wdGlvbnMpXG5cblx0XHRjb25zdCBwYXJlbnRVaWQgPSBnZXRFdmVudFBhcmVudFVJRChldmVudClcblx0XHRjb25zdCBvdmVycmlkZXMgPSBjdXJyZW50RXZlbnRzLmZpbHRlcihcblx0XHRcdChlKSA9PiBlLnJlY3VycmVuY2VJZCAmJiBnZXRFdmVudFBhcmVudFVJRChlKSA9PT0gcGFyZW50VWlkXG5cdFx0KVxuXG5cdFx0Ly8gQ2FsY3VsYXRlIGV2ZW50IGR1cmF0aW9uIHRvIGV4cGFuZCBzZWFyY2ggd2luZG93IGZvciBldmVudHMgdGhhdCBzcGFuIHRoZSByYW5nZVxuXHRcdGNvbnN0IGV2ZW50RHVyYXRpb24gPSBldmVudC5lbmQuZGlmZihldmVudC5zdGFydClcblxuXHRcdC8vIEV4cGFuZCBzZWFyY2ggd2luZG93IGJhY2t3YXJkIGJ5IGV2ZW50IGR1cmF0aW9uIHRvIGNhdGNoIGV2ZW50cyB0aGF0IHN0YXJ0IGJlZm9yZVxuXHRcdC8vIHRoZSByYW5nZSBidXQgc3BhbiBpbnRvIGl0XG5cdFx0Y29uc3QgZXhwYW5kZWRTdGFydERhdGVUaW1lID0gdG9GbG9hdGluZ0RhdGUoXG5cdFx0XHRzdGFydERhdGUuc3VidHJhY3QoZXZlbnREdXJhdGlvbiwgJ21pbGxpc2Vjb25kJylcblx0XHQpXG5cdFx0Y29uc3QgZW5kRGF0ZVRpbWUgPSB0b0Zsb2F0aW5nRGF0ZShlbmREYXRlKVxuXG5cdFx0Ly8gR2V0IGFsbCBvY2N1cnJlbmNlcyBpbiB0aGUgZXhwYW5kZWQgcmFuZ2Vcblx0XHRjb25zdCBvY2N1cnJlbmNlcyA9IHJ1bGUuYmV0d2VlbihleHBhbmRlZFN0YXJ0RGF0ZVRpbWUsIGVuZERhdGVUaW1lLCB0cnVlKVxuXG5cdFx0Ly8gQ29udmVydCBvY2N1cnJlbmNlcyB0byBDYWxlbmRhckV2ZW50IGluc3RhbmNlc1xuXHRcdGNvbnN0IHJlY3VycmluZ0V2ZW50czogQ2FsZW5kYXJFdmVudFtdID0gb2NjdXJyZW5jZXNcblx0XHRcdC5tYXAoKG9jY3VycmVuY2UsIGluZGV4KSA9PiB7XG5cdFx0XHRcdGNvbnN0IG9jY3VycmVuY2VEYXRlID0gZnJvbUZsb2F0aW5nRGF0ZShvY2N1cnJlbmNlLCBldmVudC5zdGFydClcblx0XHRcdFx0Y29uc3QgZXhpc3RpbmdPdmVycmlkZSA9IG92ZXJyaWRlcy5maW5kKChlKSA9PlxuXHRcdFx0XHRcdHNhZmVEYXRlKGUucmVjdXJyZW5jZUlkKT8uaXNTYW1lKG9jY3VycmVuY2VEYXRlKVxuXHRcdFx0XHQpXG5cblx0XHRcdFx0Ly8gSWYgdGhlcmUncyBhbiBvdmVycmlkZSwgdXNlIGl0XG5cdFx0XHRcdGlmIChleGlzdGluZ092ZXJyaWRlKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHsgLi4uZXZlbnQsIC4uLmV4aXN0aW5nT3ZlcnJpZGUgfVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQ2FsY3VsYXRlIHRoZSBkdXJhdGlvbiBmcm9tIHRoZSBvcmlnaW5hbCBldmVudFxuXHRcdFx0XHRjb25zdCBvcmlnaW5hbER1cmF0aW9uID0gZXZlbnQuZW5kLmRpZmYoZXZlbnQuc3RhcnQpXG5cdFx0XHRcdGNvbnN0IG5ld0VuZFRpbWUgPSBvY2N1cnJlbmNlRGF0ZS5hZGQob3JpZ2luYWxEdXJhdGlvbiwgJ21pbGxpc2Vjb25kJylcblx0XHRcdFx0Y29uc3QgcmVjdXJyaW5nRXZlbnRJZCA9IGAke2V2ZW50LmlkfV8ke2luZGV4fWBcblx0XHRcdFx0Y29uc3QgcGFyZW50VUlEID0gZ2V0RXZlbnRQYXJlbnRVSUQoZXZlbnQpXG5cblx0XHRcdFx0Ly8gQ3JlYXRlIHRoZSByZWN1cnJpbmcgZXZlbnQgaW5zdGFuY2Vcblx0XHRcdFx0Y29uc3QgcmVjdXJyaW5nRXZlbnQ6IENhbGVuZGFyRXZlbnQgPSB7XG5cdFx0XHRcdFx0Li4uZXZlbnQsXG5cdFx0XHRcdFx0aWQ6IHJlY3VycmluZ0V2ZW50SWQsXG5cdFx0XHRcdFx0c3RhcnQ6IG9jY3VycmVuY2VEYXRlLFxuXHRcdFx0XHRcdGVuZDogbmV3RW5kVGltZSxcblx0XHRcdFx0XHR1aWQ6IHBhcmVudFVJRCwgLy8gU2FtZSBVSUQgYXMgcGFyZW50IGZvciBwcm9wZXIgZ3JvdXBpbmdcblx0XHRcdFx0XHRycnVsZTogdW5kZWZpbmVkLCAvLyBJbnN0YW5jZSBldmVudHMgZG9uJ3QgaGF2ZSBSUlVMRVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHJlY3VycmluZ0V2ZW50XG5cdFx0XHR9KVxuXHRcdFx0LmZpbHRlcigocmVjdXJyaW5nRXZlbnQpID0+IHtcblx0XHRcdFx0Ly8gRmlsdGVyIG91dCBFWERBVEUgZXhjbHVzaW9uc1xuXHRcdFx0XHRjb25zdCBoYXNFeGRhdGVzID0gZXZlbnQuZXhkYXRlcyAmJiBldmVudC5leGRhdGVzLmxlbmd0aCA+IDBcblx0XHRcdFx0aWYgKGhhc0V4ZGF0ZXMpIHtcblx0XHRcdFx0XHRjb25zdCBldmVudFN0YXJ0SVNPID0gcmVjdXJyaW5nRXZlbnQuc3RhcnQudG9JU09TdHJpbmcoKVxuXHRcdFx0XHRcdGNvbnN0IGlzRXhjbHVkZWQgPSBldmVudC5leGRhdGVzLmluY2x1ZGVzKGV2ZW50U3RhcnRJU08pXG5cdFx0XHRcdFx0aWYgKGlzRXhjbHVkZWQpIHtcblx0XHRcdFx0XHRcdHJldHVybiBmYWxzZVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIEZpbHRlciB0byBvbmx5IGluY2x1ZGUgZXZlbnRzIHRoYXQgc3BhbiB0aHJvdWdoIHRoZSBvcmlnaW5hbCByZXF1ZXN0ZWQgZGF0ZSByYW5nZVxuXHRcdFx0XHQvLyBBbiBldmVudCBzcGFucyB0aGUgcmFuZ2UgaWY6IGV2ZW50X3N0YXJ0IDwgcmFuZ2VfZW5kIEFORCBldmVudF9lbmQgPiByYW5nZV9zdGFydFxuXHRcdFx0XHQvLyBVc2UgaXNTYW1lT3JCZWZvcmUvaXNTYW1lT3JBZnRlciB0byBpbmNsdWRlIGJvdW5kYXJ5IGNhc2VzXG5cdFx0XHRcdGNvbnN0IGV2ZW50U3BhbnNSYW5nZSA9XG5cdFx0XHRcdFx0cmVjdXJyaW5nRXZlbnQuc3RhcnQuaXNTYW1lT3JCZWZvcmUoZW5kRGF0ZSkgJiZcblx0XHRcdFx0XHRyZWN1cnJpbmdFdmVudC5lbmQuaXNTYW1lT3JBZnRlcihzdGFydERhdGUpXG5cblx0XHRcdFx0cmV0dXJuIGV2ZW50U3BhbnNSYW5nZVxuXHRcdFx0fSlcblxuXHRcdHJldHVybiByZWN1cnJpbmdFdmVudHNcblx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHQvLyBIYW5kbGUgaW52YWxpZCBSUlVMRSBvcHRpb25zXG5cdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0YEludmFsaWQgUlJVTEUgb3B0aW9uczogJHtKU09OLnN0cmluZ2lmeShldmVudC5ycnVsZSl9LiBFcnJvcjogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJ31gXG5cdFx0KVxuXHR9XG59XG5cbmludGVyZmFjZSBVcGRhdGVSZWN1cnJpbmdFdmVudFByb3BzIHtcblx0dGFyZ2V0RXZlbnQ6IENhbGVuZGFyRXZlbnRcblx0dXBkYXRlczogUGFydGlhbDxDYWxlbmRhckV2ZW50PlxuXHRjdXJyZW50RXZlbnRzOiBDYWxlbmRhckV2ZW50W11cblx0c2NvcGU6ICd0aGlzJyB8ICdmb2xsb3dpbmcnIHwgJ2FsbCdcbn1cblxuZXhwb3J0IGNvbnN0IHVwZGF0ZVJlY3VycmluZ0V2ZW50ID0gKHtcblx0dGFyZ2V0RXZlbnQsXG5cdHVwZGF0ZXMsXG5cdGN1cnJlbnRFdmVudHMsXG5cdHNjb3BlLFxufTogVXBkYXRlUmVjdXJyaW5nRXZlbnRQcm9wcyk6IENhbGVuZGFyRXZlbnRbXSA9PiB7XG5cdGNvbnN0IHVwZGF0ZWRFdmVudHMgPSBbLi4uY3VycmVudEV2ZW50c11cblxuXHQvLyBGaW5kIHRoZSBiYXNlIHJlY3VycmluZyBldmVudFxuXHRjb25zdCB0YXJnZXRVaWQgPSBnZXRFdmVudFBhcmVudFVJRCh0YXJnZXRFdmVudClcblx0Y29uc3QgYmFzZUV2ZW50SW5kZXggPSB1cGRhdGVkRXZlbnRzLmZpbmRJbmRleCgoZSkgPT4ge1xuXHRcdHJldHVybiBnZXRFdmVudFBhcmVudFVJRChlKSA9PT0gdGFyZ2V0VWlkICYmIGUucnJ1bGUgJiYgIWUucmVjdXJyZW5jZUlkXG5cdH0pXG5cblx0aWYgKGJhc2VFdmVudEluZGV4ID09PSAtMSkge1xuXHRcdHRocm93IG5ldyBFcnJvcignQmFzZSByZWN1cnJpbmcgZXZlbnQgbm90IGZvdW5kJylcblx0fVxuXG5cdGNvbnN0IGJhc2VFdmVudCA9IHVwZGF0ZWRFdmVudHNbYmFzZUV2ZW50SW5kZXhdXG5cblx0c3dpdGNoIChzY29wZSkge1xuXHRcdGNhc2UgJ3RoaXMnOiB7XG5cdFx0XHQvLyBcIlRoaXMgZXZlbnQgb25seVwiIC0gQWRkIEVYREFURSB0byBiYXNlIGV2ZW50IGFuZCBjcmVhdGUgc3RhbmRhbG9uZSBtb2RpZmllZCBldmVudFxuXHRcdFx0Y29uc3QgdGFyZ2V0RXZlbnRTdGFydElTTyA9IHRhcmdldEV2ZW50LnN0YXJ0LnRvSVNPU3RyaW5nKClcblx0XHRcdGNvbnN0IGV4aXN0aW5nRXhkYXRlcyA9IGJhc2VFdmVudC5leGRhdGVzIHx8IFtdXG5cdFx0XHRjb25zdCB1cGRhdGVkRXhkYXRlcyA9IFsuLi5leGlzdGluZ0V4ZGF0ZXMsIHRhcmdldEV2ZW50U3RhcnRJU09dXG5cblx0XHRcdGNvbnN0IHVwZGF0ZWRCYXNlRXZlbnQgPSB7XG5cdFx0XHRcdC4uLmJhc2VFdmVudCxcblx0XHRcdFx0ZXhkYXRlczogdXBkYXRlZEV4ZGF0ZXMsXG5cdFx0XHR9XG5cdFx0XHR1cGRhdGVkRXZlbnRzW2Jhc2VFdmVudEluZGV4XSA9IHVwZGF0ZWRCYXNlRXZlbnRcblxuXHRcdFx0Ly8gQ3JlYXRlIHN0YW5kYWxvbmUgbW9kaWZpZWQgZXZlbnQgd2l0aCByZWN1cnJlbmNlSWRcblx0XHRcdGNvbnN0IG1vZGlmaWVkRXZlbnRJZCA9IGAke3RhcmdldEV2ZW50LmlkfV9tb2RpZmllZF8ke0RhdGUubm93KCl9YFxuXHRcdFx0Y29uc3QgbW9kaWZpZWRFdmVudDogQ2FsZW5kYXJFdmVudCA9IHtcblx0XHRcdFx0Ly8gQHRzLWV4cGVjdC1lcnJvciBUT0RPOiBmaXggdGhlIHR5cGVzXG5cdFx0XHRcdC4uLm9taXRLZXlzKHRhcmdldEV2ZW50LCBbJ3dpZHRoJywgJ2hlaWdodCcsICd0b3AnLCAnbGVmdCcsICdyaWdodCddKSxcblx0XHRcdFx0Li4udXBkYXRlcyxcblx0XHRcdFx0aWQ6IG1vZGlmaWVkRXZlbnRJZCxcblx0XHRcdFx0cmVjdXJyZW5jZUlkOiB0YXJnZXRFdmVudFN0YXJ0SVNPLCAvLyBUaGlzIG1hcmtzIGl0IGFzIGEgbW9kaWZpZWQgaW5zdGFuY2Vcblx0XHRcdFx0dWlkOiBnZXRFdmVudFBhcmVudFVJRChiYXNlRXZlbnQpLCAvLyBLZWVwIHNhbWUgVUlEIGFzIGJhc2UgZXZlbnQgKGlDYWxlbmRhciBzdGFuZGFyZClcblx0XHRcdFx0cnJ1bGU6IHVuZGVmaW5lZCwgLy8gU3RhbmRhbG9uZSBldmVudHMgZG9uJ3QgaGF2ZSBSUlVMRVxuXHRcdFx0fSBhcyBDYWxlbmRhckV2ZW50XG5cdFx0XHR1cGRhdGVkRXZlbnRzLnB1c2gobW9kaWZpZWRFdmVudClcblx0XHRcdGJyZWFrXG5cdFx0fVxuXG5cdFx0Y2FzZSAnZm9sbG93aW5nJzoge1xuXHRcdFx0Ly8gXCJUaGlzIGFuZCBmb2xsb3dpbmdcIiAtIFRlcm1pbmF0ZSBvcmlnaW5hbCBzZXJpZXMgYW5kIGNyZWF0ZSBuZXcgc2VyaWVzXG5cblx0XHRcdC8vIENhbGN1bGF0ZSB0aGUgdGVybWluYXRpb24gZGF0ZTogZGF5IGJlZm9yZSB0YXJnZXQgd2l0aCBlbmQgb2YgZGF5IHRpbWVcblx0XHRcdC8vIFRoaXMgZW5zdXJlcyB0aGUgbGFzdCBvY2N1cnJlbmNlIGJlZm9yZSB0YXJnZXQgaXMgaW5jbHVkZWQgaW4gdGhlIHRlcm1pbmF0ZWQgc2VyaWVzXG5cdFx0XHRjb25zdCBkYXlCZWZvcmVUYXJnZXQgPSB0YXJnZXRFdmVudC5zdGFydC5zdWJ0cmFjdCgxLCAnZGF5Jylcblx0XHRcdGNvbnN0IHRlcm1pbmF0aW9uRGF0ZSA9IGRheUJlZm9yZVRhcmdldC5lbmRPZignZGF5JykudG9EYXRlKClcblxuXHRcdFx0Ly8gVXBkYXRlIG9yaWdpbmFsIHNlcmllcyB3aXRoIFVOVElMIHRvIGVuZCBiZWZvcmUgdGFyZ2V0IGRhdGVcblx0XHRcdGNvbnN0IHRlcm1pbmF0ZWRFdmVudCA9IHtcblx0XHRcdFx0Li4uYmFzZUV2ZW50LFxuXHRcdFx0XHRycnVsZToge1xuXHRcdFx0XHRcdC4uLmJhc2VFdmVudC5ycnVsZSxcblx0XHRcdFx0XHR1bnRpbDogdGVybWluYXRpb25EYXRlLFxuXHRcdFx0XHR9LFxuXHRcdFx0fVxuXHRcdFx0dXBkYXRlZEV2ZW50c1tiYXNlRXZlbnRJbmRleF0gPSB0ZXJtaW5hdGVkRXZlbnRcblxuXHRcdFx0Ly8gQ3JlYXRlIG5ldyBzZXJpZXMgc3RhcnRpbmcgZnJvbSB0YXJnZXQgZGF0ZVxuXHRcdFx0Y29uc3Qgb3JpZ2luYWxEdXJhdGlvbiA9IGJhc2VFdmVudC5lbmQuZGlmZihiYXNlRXZlbnQuc3RhcnQpXG5cdFx0XHRjb25zdCBuZXdTZXJpZXNTdGFydFRpbWUgPSB1cGRhdGVzLnN0YXJ0IHx8IHRhcmdldEV2ZW50LnN0YXJ0XG5cdFx0XHRjb25zdCBuZXdTZXJpZXNFbmRUaW1lID1cblx0XHRcdFx0dXBkYXRlcy5lbmQgfHwgbmV3U2VyaWVzU3RhcnRUaW1lLmFkZChvcmlnaW5hbER1cmF0aW9uKVxuXHRcdFx0Y29uc3QgbmV3U2VyaWVzSWQgPSBgJHtiYXNlRXZlbnQuaWR9X2ZvbGxvd2luZ2Bcblx0XHRcdGNvbnN0IG5ld1Nlcmllc1VJRCA9IGAke25ld1Nlcmllc0lkfUBpbGFteS5jYWxlbmRhcmBcblxuXHRcdFx0Y29uc3QgbmV3U2VyaWVzRXZlbnQ6IENhbGVuZGFyRXZlbnQgPSB7XG5cdFx0XHRcdC4uLmJhc2VFdmVudCxcblx0XHRcdFx0Li4udXBkYXRlcyxcblx0XHRcdFx0cnJ1bGU6IHtcblx0XHRcdFx0XHQuLi5iYXNlRXZlbnQucnJ1bGUsXG5cdFx0XHRcdFx0Li4udXBkYXRlcy5ycnVsZSxcblx0XHRcdFx0XHRkdHN0YXJ0OiBuZXdTZXJpZXNTdGFydFRpbWUudG9EYXRlKCksXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGlkOiBuZXdTZXJpZXNJZCxcblx0XHRcdFx0dWlkOiBuZXdTZXJpZXNVSUQsIC8vIE5ldyBVSUQgZm9yIG5ldyBzZXJpZXNcblx0XHRcdFx0c3RhcnQ6IG5ld1Nlcmllc1N0YXJ0VGltZSxcblx0XHRcdFx0ZW5kOiBuZXdTZXJpZXNFbmRUaW1lLFxuXHRcdFx0XHRyZWN1cnJlbmNlSWQ6IHVuZGVmaW5lZCwgLy8gVGhpcyBpcyBhIG5ldyBiYXNlIGV2ZW50LCBub3QgYW4gaW5zdGFuY2Vcblx0XHRcdH1cblx0XHRcdHVwZGF0ZWRFdmVudHMucHVzaChuZXdTZXJpZXNFdmVudClcblx0XHRcdGJyZWFrXG5cdFx0fVxuXG5cdFx0Y2FzZSAnYWxsJzoge1xuXHRcdFx0Ly8gXCJBbGwgZXZlbnRzXCIgLSBVcGRhdGUgdGhlIGJhc2UgcmVjdXJyaW5nIGV2ZW50XG5cdFx0XHRjb25zdCB1cGRhdGVkQmFzZUV2ZW50ID0ge1xuXHRcdFx0XHQuLi5iYXNlRXZlbnQsXG5cdFx0XHRcdC4uLnVwZGF0ZXMsXG5cdFx0XHR9XG5cdFx0XHR1cGRhdGVkRXZlbnRzW2Jhc2VFdmVudEluZGV4XSA9IHVwZGF0ZWRCYXNlRXZlbnRcblx0XHRcdGJyZWFrXG5cdFx0fVxuXG5cdFx0ZGVmYXVsdDpcblx0XHRcdHRocm93IG5ldyBFcnJvcihcblx0XHRcdFx0YEludmFsaWQgc2NvcGU6ICR7c2NvcGV9LiBNdXN0IGJlICd0aGlzJywgJ2ZvbGxvd2luZycsIG9yICdhbGwnYFxuXHRcdFx0KVxuXHR9XG5cblx0cmV0dXJuIHVwZGF0ZWRFdmVudHNcbn1cblxuaW50ZXJmYWNlIERlbGV0ZVJlY3VycmluZ0V2ZW50UHJvcHMge1xuXHR0YXJnZXRFdmVudDogQ2FsZW5kYXJFdmVudFxuXHRjdXJyZW50RXZlbnRzOiBDYWxlbmRhckV2ZW50W11cblx0c2NvcGU6ICd0aGlzJyB8ICdmb2xsb3dpbmcnIHwgJ2FsbCdcbn1cblxuZXhwb3J0IGNvbnN0IGRlbGV0ZVJlY3VycmluZ0V2ZW50ID0gKHtcblx0dGFyZ2V0RXZlbnQsXG5cdGN1cnJlbnRFdmVudHMsXG5cdHNjb3BlLFxufTogRGVsZXRlUmVjdXJyaW5nRXZlbnRQcm9wcyk6IENhbGVuZGFyRXZlbnRbXSA9PiB7XG5cdGNvbnN0IHVwZGF0ZWRFdmVudHMgPSBbLi4uY3VycmVudEV2ZW50c11cblxuXHQvLyBGaW5kIHRoZSBiYXNlIHJlY3VycmluZyBldmVudFxuXHRjb25zdCB0YXJnZXRVaWQgPSBnZXRFdmVudFBhcmVudFVJRCh0YXJnZXRFdmVudClcblx0Y29uc3QgYmFzZUV2ZW50SW5kZXggPSB1cGRhdGVkRXZlbnRzLmZpbmRJbmRleCgoZSkgPT4ge1xuXHRcdHJldHVybiBnZXRFdmVudFBhcmVudFVJRChlKSA9PT0gdGFyZ2V0VWlkICYmIGUucnJ1bGUgJiYgIWUucmVjdXJyZW5jZUlkXG5cdH0pXG5cblx0aWYgKGJhc2VFdmVudEluZGV4ID09PSAtMSkge1xuXHRcdHRocm93IG5ldyBFcnJvcignQmFzZSByZWN1cnJpbmcgZXZlbnQgbm90IGZvdW5kJylcblx0fVxuXG5cdGNvbnN0IGJhc2VFdmVudCA9IHVwZGF0ZWRFdmVudHNbYmFzZUV2ZW50SW5kZXhdXG5cblx0c3dpdGNoIChzY29wZSkge1xuXHRcdGNhc2UgJ3RoaXMnOiB7XG5cdFx0XHQvLyBcIlRoaXMgZXZlbnQgb25seVwiIC0gQWRkIEVYREFURSB0byBleGNsdWRlIHRoaXMgb2NjdXJyZW5jZVxuXHRcdFx0Y29uc3QgdGFyZ2V0RXZlbnRTdGFydElTTyA9IHRhcmdldEV2ZW50LnN0YXJ0LnRvSVNPU3RyaW5nKClcblx0XHRcdGNvbnN0IGV4aXN0aW5nRXhkYXRlcyA9IGJhc2VFdmVudC5leGRhdGVzIHx8IFtdXG5cdFx0XHRjb25zdCB1cGRhdGVkRXhkYXRlcyA9IFsuLi5leGlzdGluZ0V4ZGF0ZXMsIHRhcmdldEV2ZW50U3RhcnRJU09dXG5cblx0XHRcdGNvbnN0IHVwZGF0ZWRCYXNlRXZlbnQgPSB7IC4uLmJhc2VFdmVudCwgZXhkYXRlczogdXBkYXRlZEV4ZGF0ZXMgfVxuXHRcdFx0dXBkYXRlZEV2ZW50c1tiYXNlRXZlbnRJbmRleF0gPSB1cGRhdGVkQmFzZUV2ZW50XG5cdFx0XHRicmVha1xuXHRcdH1cblxuXHRcdGNhc2UgJ2ZvbGxvd2luZyc6IHtcblx0XHRcdC8vIFwiVGhpcyBhbmQgZm9sbG93aW5nXCIgLSBUZXJtaW5hdGUgc2VyaWVzIHdpdGggVU5USUwgYmVmb3JlIHRhcmdldCBkYXRlXG5cblx0XHRcdC8vIENhbGN1bGF0ZSB0aGUgdGVybWluYXRpb24gZGF0ZTogZGF5IGJlZm9yZSB0YXJnZXQgd2l0aCBlbmQgb2YgZGF5IHRpbWVcblx0XHRcdC8vIFRoaXMgZW5zdXJlcyB0aGUgbGFzdCBvY2N1cnJlbmNlIGJlZm9yZSB0YXJnZXQgaXMgaW5jbHVkZWQgaW4gdGhlIHRlcm1pbmF0ZWQgc2VyaWVzXG5cdFx0XHRjb25zdCBkYXlCZWZvcmVUYXJnZXQgPSB0YXJnZXRFdmVudC5zdGFydC5zdWJ0cmFjdCgxLCAnZGF5Jylcblx0XHRcdGNvbnN0IHRlcm1pbmF0aW9uRGF0ZSA9IGRheUJlZm9yZVRhcmdldC5lbmRPZignZGF5JykudG9EYXRlKClcblxuXHRcdFx0Y29uc3QgdGVybWluYXRlZEV2ZW50ID0ge1xuXHRcdFx0XHQuLi5iYXNlRXZlbnQsXG5cdFx0XHRcdHJydWxlOiB7XG5cdFx0XHRcdFx0Li4uYmFzZUV2ZW50LnJydWxlLFxuXHRcdFx0XHRcdHVudGlsOiB0ZXJtaW5hdGlvbkRhdGUsXG5cdFx0XHRcdH0sXG5cdFx0XHR9XG5cdFx0XHR1cGRhdGVkRXZlbnRzW2Jhc2VFdmVudEluZGV4XSA9IHRlcm1pbmF0ZWRFdmVudFxuXHRcdFx0YnJlYWtcblx0XHR9XG5cblx0XHRjYXNlICdhbGwnOiB7XG5cdFx0XHQvLyBcIkFsbCBldmVudHNcIiAtIFJlbW92ZSB0aGUgZW50aXJlIHJlY3VycmluZyBzZXJpZXNcblx0XHRcdGNvbnN0IHRhcmdldFVpZCA9IGdldEV2ZW50UGFyZW50VUlEKHRhcmdldEV2ZW50KVxuXHRcdFx0Y29uc3QgZXZlbnRzV2l0aG91dFRhcmdldFNlcmllcyA9IHVwZGF0ZWRFdmVudHMuZmlsdGVyKFxuXHRcdFx0XHQoZSkgPT4gZ2V0RXZlbnRQYXJlbnRVSUQoZSkgIT09IHRhcmdldFVpZFxuXHRcdFx0KVxuXHRcdFx0cmV0dXJuIGV2ZW50c1dpdGhvdXRUYXJnZXRTZXJpZXNcblx0XHR9XG5cblx0XHRkZWZhdWx0OlxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0XHRgSW52YWxpZCBzY29wZTogJHtzY29wZX0uIE11c3QgYmUgJ3RoaXMnLCAnZm9sbG93aW5nJywgb3IgJ2FsbCdgXG5cdFx0XHQpXG5cdH1cblxuXHRyZXR1cm4gdXBkYXRlZEV2ZW50c1xufVxuIiwKICAgICJpbXBvcnQgZGF5anMgZnJvbSAnZGF5anMnXG5pbXBvcnQgaXNCZXR3ZWVuIGZyb20gJ2RheWpzL3BsdWdpbi9pc0JldHdlZW4uanMnXG5pbXBvcnQgaXNTYW1lT3JBZnRlciBmcm9tICdkYXlqcy9wbHVnaW4vaXNTYW1lT3JBZnRlci5qcydcbmltcG9ydCBpc1NhbWVPckJlZm9yZSBmcm9tICdkYXlqcy9wbHVnaW4vaXNTYW1lT3JCZWZvcmUuanMnXG5pbXBvcnQgbG9jYWxlRGF0YSBmcm9tICdkYXlqcy9wbHVnaW4vbG9jYWxlRGF0YS5qcydcbmltcG9ydCBtaW5NYXggZnJvbSAnZGF5anMvcGx1Z2luL21pbk1heC5qcydcbmltcG9ydCB0aW1lem9uZSBmcm9tICdkYXlqcy9wbHVnaW4vdGltZXpvbmUuanMnXG5pbXBvcnQgdXRjIGZyb20gJ2RheWpzL3BsdWdpbi91dGMuanMnXG5pbXBvcnQgd2Vla2RheSBmcm9tICdkYXlqcy9wbHVnaW4vd2Vla2RheS5qcydcbmltcG9ydCB3ZWVrT2ZZZWFyIGZyb20gJ2RheWpzL3BsdWdpbi93ZWVrT2ZZZWFyLmpzJ1xuXG4vLyBFeHRlbmQgZGF5anMgd2l0aCBwbHVnaW5zXG5kYXlqcy5leHRlbmQod2Vla2RheSlcbmRheWpzLmV4dGVuZCh3ZWVrT2ZZZWFyKVxuZGF5anMuZXh0ZW5kKGlzU2FtZU9yQWZ0ZXIpXG5kYXlqcy5leHRlbmQoaXNTYW1lT3JCZWZvcmUpXG5kYXlqcy5leHRlbmQoaXNCZXR3ZWVuKVxuZGF5anMuZXh0ZW5kKG1pbk1heClcbmRheWpzLmV4dGVuZCh0aW1lem9uZSlcbmRheWpzLmV4dGVuZCh1dGMpXG5kYXlqcy5leHRlbmQobG9jYWxlRGF0YSlcblxuZXhwb3J0IGRlZmF1bHQgZGF5anNcbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBDbGFzc1ZhbHVlIH0gZnJvbSAnY2xzeCdcbmltcG9ydCB7IGNsc3ggfSBmcm9tICdjbHN4J1xuaW1wb3J0IHsgdHdNZXJnZSB9IGZyb20gJ3RhaWx3aW5kLW1lcmdlJ1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuXG5leHBvcnQgZnVuY3Rpb24gY24oLi4uaW5wdXRzOiBDbGFzc1ZhbHVlW10pIHtcblx0cmV0dXJuIHR3TWVyZ2UoY2xzeChpbnB1dHMpKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2FmZURhdGUoXG5cdGRhdGU6IGRheWpzLkRheWpzIHwgRGF0ZSB8IHN0cmluZyB8IHVuZGVmaW5lZFxuKTogZGF5anMuRGF5anMgfCB1bmRlZmluZWQge1xuXHRpZiAoZGF0ZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZFxuXHR9XG5cdGlmIChkYXlqcy5pc0RheWpzKGRhdGUpKSB7XG5cdFx0cmV0dXJuIGRhdGVcblx0fVxuXHRjb25zdCBwYXJzZWREYXRlID0gZGF5anMoZGF0ZSlcblx0cmV0dXJuIHBhcnNlZERhdGUuaXNWYWxpZCgpID8gcGFyc2VkRGF0ZSA6IHVuZGVmaW5lZFxufVxuXG5leHBvcnQgY29uc3Qgb21pdEtleXMgPSA8VCBleHRlbmRzIG9iamVjdCwgSyBleHRlbmRzIGtleW9mIFQ+KFxuXHRvYmo6IFQsXG5cdGtleXM6IEtbXVxuKTogT21pdDxULCBLPiA9PiB7XG5cdGNvbnN0IHJlc3VsdCA9IHsgLi4ub2JqIH1cblx0Zm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuXHRcdGRlbGV0ZSByZXN1bHRba2V5XVxuXHR9XG5cdHJldHVybiByZXN1bHRcbn1cblxuLyoqXG4gKiBOb3JtYWxpemVzIGNhbGVuZGFyIGV2ZW50cyBmcm9tIHB1YmxpYy1mYWNpbmcgZm9ybWF0IHRvIGludGVybmFsIGZvcm1hdC5cbiAqIENvbnZlcnRzIGZsZXhpYmxlIGRhdGUgdHlwZXMgKGRheWpzLCBEYXRlLCBzdHJpbmcpIHRvIHN0cmljdCBkYXlqcyBvYmplY3RzLlxuICpcbiAqIEBwYXJhbSBldmVudHMgLSBBcnJheSBvZiBjYWxlbmRhciBldmVudHMgd2l0aCBmbGV4aWJsZSBkYXRlIHR5cGVzXG4gKiBAcmV0dXJucyBOb3JtYWxpemVkIGFycmF5IG9mIGNhbGVuZGFyIGV2ZW50cyB3aXRoIGRheWpzIGRhdGVzXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFJlZ3VsYXIgY2FsZW5kYXIgZXZlbnRzXG4gKiBjb25zdCBldmVudHMgPSBub3JtYWxpemVFdmVudHM8SWxhbXlDYWxlbmRhclByb3BFdmVudCwgQ2FsZW5kYXJFdmVudD4ocHJvcEV2ZW50cylcbiAqXG4gKiAvLyBSZXNvdXJjZSBjYWxlbmRhciBldmVudHNcbiAqIGNvbnN0IHJlc291cmNlRXZlbnRzID0gbm9ybWFsaXplRXZlbnRzPElsYW15UmVzb3VyY2VDYWxlbmRhclByb3BFdmVudCwgQ2FsZW5kYXJFdmVudD4ocHJvcEV2ZW50cylcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZUV2ZW50czxcblx0VElucHV0IGV4dGVuZHMge1xuXHRcdHN0YXJ0OiBkYXlqcy5EYXlqcyB8IERhdGUgfCBzdHJpbmdcblx0XHRlbmQ6IGRheWpzLkRheWpzIHwgRGF0ZSB8IHN0cmluZ1xuXHR9LFxuXHRUT3V0cHV0LFxuPihldmVudHM6IFRJbnB1dFtdIHwgdW5kZWZpbmVkKTogVE91dHB1dFtdIHtcblx0aWYgKCFldmVudHMgfHwgIWV2ZW50cy5sZW5ndGgpIHtcblx0XHRyZXR1cm4gW11cblx0fVxuXG5cdHJldHVybiBldmVudHMubWFwKChldmVudCkgPT4ge1xuXHRcdHJldHVybiB7XG5cdFx0XHQuLi5ldmVudCxcblx0XHRcdHN0YXJ0OiBkYXlqcy5pc0RheWpzKGV2ZW50LnN0YXJ0KSA/IGV2ZW50LnN0YXJ0IDogZGF5anMoZXZlbnQuc3RhcnQpLFxuXHRcdFx0ZW5kOiBkYXlqcy5pc0RheWpzKGV2ZW50LmVuZCkgPyBldmVudC5lbmQgOiBkYXlqcyhldmVudC5lbmQpLFxuXHRcdH0gYXMgVE91dHB1dFxuXHR9KVxufVxuIiwKICAgICJpbXBvcnQge1xuXHRBbmltYXRlUHJlc2VuY2UsXG5cdHR5cGUgSFRNTE1vdGlvblByb3BzLFxuXHRtb3Rpb24sXG5cdHR5cGUgVmFyaWFudHMsXG59IGZyb20gJ21vdGlvbi9yZWFjdCdcbmltcG9ydCB0eXBlICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5pbnRlcmZhY2UgQW5pbWF0ZWRTZWN0aW9uUHJvcHNcblx0ZXh0ZW5kcyBPbWl0PEhUTUxNb3Rpb25Qcm9wczwnZGl2Jz4sICdjaGlsZHJlbicgfCAnbGF5b3V0JyB8ICdsYXlvdXRJZCc+IHtcblx0Y2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZVxuXHR0cmFuc2l0aW9uS2V5OiBzdHJpbmdcblx0ZGVsYXk/OiBudW1iZXJcblx0Y2xhc3NOYW1lPzogc3RyaW5nXG5cdGRpcmVjdGlvbj86ICd2ZXJ0aWNhbCcgfCAnaG9yaXpvbnRhbCdcblx0bGF5b3V0PzogYm9vbGVhbiB8ICdwb3NpdGlvbicgfCAnc2l6ZScgfCAncHJlc2VydmUtYXNwZWN0J1xuXHRsYXlvdXRJZD86IHN0cmluZ1xuXHQnZGF0YS10ZXN0aWQnPzogc3RyaW5nXG59XG5cbmNvbnN0IHZhcmlhbnRzOiBWYXJpYW50cyA9IHtcblx0aGlkZGVuOiAoeyBkaXJlY3Rpb24gfTogeyBkaXJlY3Rpb246ICd2ZXJ0aWNhbCcgfCAnaG9yaXpvbnRhbCcgfSkgPT4gKHtcblx0XHRvcGFjaXR5OiAwLFxuXHRcdHg6IGRpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnID8gMTAgOiAwLFxuXHRcdHk6IGRpcmVjdGlvbiA9PT0gJ3ZlcnRpY2FsJyA/IC0xMCA6IDAsXG5cdH0pLFxuXHR2aXNpYmxlOiAoeyBkZWxheSB9OiB7IGRlbGF5OiBudW1iZXIgfSkgPT4gKHtcblx0XHRvcGFjaXR5OiAxLFxuXHRcdHg6IDAsXG5cdFx0eTogMCxcblx0XHR0cmFuc2l0aW9uOiB7IGR1cmF0aW9uOiAwLjIsIGVhc2U6IFswLjQsIDAsIDAuMiwgMV0sIGRlbGF5IH0sXG5cdH0pLFxuXHRleGl0OiAoeyBkaXJlY3Rpb24gfTogeyBkaXJlY3Rpb246ICd2ZXJ0aWNhbCcgfCAnaG9yaXpvbnRhbCcgfSkgPT4gKHtcblx0XHRvcGFjaXR5OiAwLFxuXHRcdHg6IGRpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnID8gLTEwIDogMCxcblx0XHR5OiBkaXJlY3Rpb24gPT09ICd2ZXJ0aWNhbCcgPyAtMTAgOiAwLFxuXHRcdHRyYW5zaXRpb246IHsgZHVyYXRpb246IDAuMTUgfSxcblx0fSksXG59XG5cbmV4cG9ydCBjb25zdCBBbmltYXRlZFNlY3Rpb246IFJlYWN0LkZDPEFuaW1hdGVkU2VjdGlvblByb3BzPiA9ICh7XG5cdGNoaWxkcmVuLFxuXHR0cmFuc2l0aW9uS2V5LFxuXHRkZWxheSA9IDAsXG5cdGNsYXNzTmFtZSxcblx0ZGlyZWN0aW9uID0gJ3ZlcnRpY2FsJyxcblx0bGF5b3V0LFxuXHRsYXlvdXRJZCxcblx0J2RhdGEtdGVzdGlkJzogdGVzdElkLFxuXHRyZWYsXG5cdC4uLnByb3BzXG59KSA9PiAoXG5cdDxBbmltYXRlUHJlc2VuY2UgbW9kZT1cIndhaXRcIj5cblx0XHQ8bW90aW9uLmRpdlxuXHRcdFx0YW5pbWF0ZT1cInZpc2libGVcIlxuXHRcdFx0Y2xhc3NOYW1lPXtjbignaW5saW5lLWJsb2NrIHctZnVsbCcsIGNsYXNzTmFtZSl9XG5cdFx0XHRjdXN0b209e3sgZGVsYXksIGRpcmVjdGlvbiB9fVxuXHRcdFx0ZGF0YS10ZXN0aWQ9e3Rlc3RJZH1cblx0XHRcdGV4aXQ9XCJleGl0XCJcblx0XHRcdGluaXRpYWw9XCJoaWRkZW5cIlxuXHRcdFx0a2V5PXt0cmFuc2l0aW9uS2V5fVxuXHRcdFx0bGF5b3V0PXtsYXlvdXR9XG5cdFx0XHRsYXlvdXRJZD17bGF5b3V0SWR9XG5cdFx0XHRyZWY9e3JlZn1cblx0XHRcdHZhcmlhbnRzPXt2YXJpYW50c31cblx0XHRcdHsuLi5wcm9wc31cblx0XHQ+XG5cdFx0XHR7Y2hpbGRyZW59XG5cdFx0PC9tb3Rpb24uZGl2PlxuXHQ8L0FuaW1hdGVQcmVzZW5jZT5cbilcblxuQW5pbWF0ZWRTZWN0aW9uLmRpc3BsYXlOYW1lID0gJ0FuaW1hdGVkU2VjdGlvbidcbiIsCiAgICAiaW1wb3J0IHR5cGUge1xuXHREcmFnQ2FuY2VsRXZlbnQsXG5cdERyYWdFbmRFdmVudCxcblx0RHJhZ1N0YXJ0RXZlbnQsXG59IGZyb20gJ0BkbmQta2l0L2NvcmUnXG5pbXBvcnQge1xuXHREbmRDb250ZXh0LFxuXHRNb3VzZVNlbnNvcixcblx0cG9pbnRlcldpdGhpbixcblx0VG91Y2hTZW5zb3IsXG5cdHVzZVNlbnNvcixcblx0dXNlU2Vuc29ycyxcbn0gZnJvbSAnQGRuZC1raXQvY29yZSdcbmltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHsgUmVjdXJyZW5jZUVkaXREaWFsb2cgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvY29tcG9uZW50cy9yZWN1cnJlbmNlLWVkaXQtZGlhbG9nJ1xuaW1wb3J0IHR5cGUgeyBSZWN1cnJlbmNlRWRpdFNjb3BlIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL3R5cGVzJ1xuaW1wb3J0IHsgaXNSZWN1cnJpbmdFdmVudCB9IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS91dGlscy9yZWN1cnJlbmNlLWhhbmRsZXInXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgeyBnZXRVcGRhdGVkRXZlbnQgfSBmcm9tICcuL2RuZC11dGlscydcbmltcG9ydCB7IEV2ZW50RHJhZ092ZXJsYXkgfSBmcm9tICcuL2V2ZW50LWRyYWctb3ZlcmxheSdcblxuaW50ZXJmYWNlIENhbGVuZGFyRG5kQ29udGV4dFByb3BzIHtcblx0Y2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gQ2FsZW5kYXJEbmRDb250ZXh0KHsgY2hpbGRyZW4gfTogQ2FsZW5kYXJEbmRDb250ZXh0UHJvcHMpIHtcblx0Y29uc3QgYWN0aXZlRXZlbnRSZWYgPSB1c2VSZWY8Q2FsZW5kYXJFdmVudD4obnVsbClcblx0Y29uc3QgZHJhZ092ZXJsYXlSZWYgPSB1c2VSZWY8e1xuXHRcdHNldEFjdGl2ZUV2ZW50OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0fT4obnVsbClcblxuXHRjb25zdCB7IHVwZGF0ZUV2ZW50LCB1cGRhdGVSZWN1cnJpbmdFdmVudCwgZGlzYWJsZURyYWdBbmREcm9wIH0gPVxuXHRcdHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KChjb250ZXh0KSA9PiAoe1xuXHRcdFx0dXBkYXRlRXZlbnQ6IGNvbnRleHQudXBkYXRlRXZlbnQsXG5cdFx0XHR1cGRhdGVSZWN1cnJpbmdFdmVudDogY29udGV4dC51cGRhdGVSZWN1cnJpbmdFdmVudCxcblx0XHRcdGRpc2FibGVEcmFnQW5kRHJvcDogY29udGV4dC5kaXNhYmxlRHJhZ0FuZERyb3AsXG5cdFx0fSkpXG5cblx0Ly8gU3RhdGUgZm9yIHJlY3VycmluZyBldmVudCBkaWFsb2dcblx0Y29uc3QgW3JlY3VycmluZ0RpYWxvZywgc2V0UmVjdXJyaW5nRGlhbG9nXSA9IHVzZVN0YXRlPHtcblx0XHRpc09wZW46IGJvb2xlYW5cblx0XHRldmVudDogQ2FsZW5kYXJFdmVudCB8IG51bGxcblx0XHR1cGRhdGVzOiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+IHwgbnVsbFxuXHR9Pih7XG5cdFx0aXNPcGVuOiBmYWxzZSxcblx0XHRldmVudDogbnVsbCxcblx0XHR1cGRhdGVzOiBudWxsLFxuXHR9KVxuXG5cdC8vIENvbmZpZ3VyZSBzZW5zb3JzIHdpdGggcmVkdWNlZCBhY3RpdmF0aW9uIGNvbnN0cmFpbnRzIGZvciBlYXNpZXIgZHJhZ2dpbmdcblx0Y29uc3QgbW91c2VTZW5zb3IgPSB1c2VTZW5zb3IoTW91c2VTZW5zb3IsIHtcblx0XHQvLyBSZXF1aXJlIG1pbmltYWwgbW92ZW1lbnQgYmVmb3JlIGFjdGl2YXRpbmdcblx0XHRhY3RpdmF0aW9uQ29uc3RyYWludDoge1xuXHRcdFx0ZGlzdGFuY2U6IDIsXG5cdFx0fSxcblx0fSlcblxuXHRjb25zdCB0b3VjaFNlbnNvciA9IHVzZVNlbnNvcihUb3VjaFNlbnNvciwge1xuXHRcdC8vIFJlZHVjZSBkZWxheSBmb3IgdG91Y2ggZGV2aWNlc1xuXHRcdGFjdGl2YXRpb25Db25zdHJhaW50OiB7XG5cdFx0XHRkZWxheTogMTAwLFxuXHRcdFx0dG9sZXJhbmNlOiA1LFxuXHRcdH0sXG5cdH0pXG5cblx0Y29uc3Qgc2Vuc29ycyA9IHVzZVNlbnNvcnMobW91c2VTZW5zb3IsIHRvdWNoU2Vuc29yKVxuXG5cdC8vIEhlbHBlciBmdW5jdGlvbiB0byBwZXJmb3JtIHRoZSBhY3R1YWwgZXZlbnQgdXBkYXRlXG5cdGNvbnN0IHBlcmZvcm1FdmVudFVwZGF0ZSA9IChcblx0XHRldmVudDogQ2FsZW5kYXJFdmVudCxcblx0XHR1cGRhdGVzOiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+XG5cdCkgPT4ge1xuXHRcdC8vIFZhbGlkYXRlIGlucHV0c1xuXHRcdGlmICghZXZlbnQgfHwgIWV2ZW50LmlkKSB7XG5cdFx0XHRyZXR1cm5cblx0XHR9XG5cblx0XHRpZiAoIXVwZGF0ZXMgfHwgT2JqZWN0LmtleXModXBkYXRlcykubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRyZXR1cm5cblx0XHR9XG5cblx0XHRpZiAoaXNSZWN1cnJpbmdFdmVudChldmVudCkpIHtcblx0XHRcdC8vIFNob3cgZGlhbG9nIGZvciByZWN1cnJpbmcgZXZlbnRzXG5cdFx0XHRzZXRSZWN1cnJpbmdEaWFsb2coe1xuXHRcdFx0XHRpc09wZW46IHRydWUsXG5cdFx0XHRcdGV2ZW50LFxuXHRcdFx0XHR1cGRhdGVzLFxuXHRcdFx0fSlcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gRGlyZWN0bHkgdXBkYXRlIHJlZ3VsYXIgZXZlbnRzXG5cdFx0XHR1cGRhdGVFdmVudChldmVudC5pZCwgdXBkYXRlcylcblx0XHR9XG5cdH1cblxuXHQvLyBIYW5kbGUgcmVjdXJyaW5nIGV2ZW50IGRpYWxvZyBjb25maXJtYXRpb25cblx0Y29uc3QgaGFuZGxlUmVjdXJyaW5nRXZlbnRDb25maXJtID0gKHNjb3BlOiBSZWN1cnJlbmNlRWRpdFNjb3BlKSA9PiB7XG5cdFx0aWYgKCFyZWN1cnJpbmdEaWFsb2cuZXZlbnQgfHwgIXJlY3VycmluZ0RpYWxvZy51cGRhdGVzKSB7XG5cdFx0XHRzZXRSZWN1cnJpbmdEaWFsb2coeyBpc09wZW46IGZhbHNlLCBldmVudDogbnVsbCwgdXBkYXRlczogbnVsbCB9KVxuXHRcdFx0cmV0dXJuXG5cdFx0fVxuXG5cdFx0dHJ5IHtcblx0XHRcdHVwZGF0ZVJlY3VycmluZ0V2ZW50KHJlY3VycmluZ0RpYWxvZy5ldmVudCwgcmVjdXJyaW5nRGlhbG9nLnVwZGF0ZXMsIHtcblx0XHRcdFx0c2NvcGUsXG5cdFx0XHRcdGV2ZW50RGF0ZTogcmVjdXJyaW5nRGlhbG9nLmV2ZW50LnN0YXJ0LFxuXHRcdFx0fSlcblx0XHR9IGNhdGNoIHtcblx0XHRcdC8vIFNpbGVudGx5IGhhbmRsZSBlcnJvciBhbmQgcmVzZXQgZGlhbG9nIHN0YXRlXG5cdFx0fSBmaW5hbGx5IHtcblx0XHRcdHNldFJlY3VycmluZ0RpYWxvZyh7IGlzT3BlbjogZmFsc2UsIGV2ZW50OiBudWxsLCB1cGRhdGVzOiBudWxsIH0pXG5cdFx0fVxuXHR9XG5cblx0Ly8gSGFuZGxlIHJlY3VycmluZyBldmVudCBkaWFsb2cgY2xvc2Vcblx0Y29uc3QgaGFuZGxlUmVjdXJyaW5nRXZlbnRDbG9zZSA9ICgpID0+IHtcblx0XHRzZXRSZWN1cnJpbmdEaWFsb2coeyBpc09wZW46IGZhbHNlLCBldmVudDogbnVsbCwgdXBkYXRlczogbnVsbCB9KVxuXHR9XG5cblx0Y29uc3QgaGFuZGxlRHJhZ1N0YXJ0ID0gKGV2ZW50OiBEcmFnU3RhcnRFdmVudCkgPT4ge1xuXHRcdGNvbnN0IHsgYWN0aXZlIH0gPSBldmVudFxuXG5cdFx0Ly8gU2V0IHRoZSBhY3RpdmUgZXZlbnQgYmFzZWQgb24gdGhlIGV2ZW50IGRhdGFcblx0XHRpZiAoYWN0aXZlLmRhdGEuY3VycmVudD8udHlwZSA9PT0gJ2NhbGVuZGFyLWV2ZW50Jykge1xuXHRcdFx0ZHJhZ092ZXJsYXlSZWYuY3VycmVudD8uc2V0QWN0aXZlRXZlbnQoYWN0aXZlLmRhdGEuY3VycmVudC5ldmVudClcblx0XHRcdGFjdGl2ZUV2ZW50UmVmLmN1cnJlbnQgPSBhY3RpdmUuZGF0YS5jdXJyZW50LmV2ZW50XG5cdFx0fVxuXHR9XG5cblx0Y29uc3QgaGFuZGxlRHJhZ0VuZCA9IChldmVudDogRHJhZ0VuZEV2ZW50KSA9PiB7XG5cdFx0Y29uc3QgdXBkYXRlZEV2ZW50ID0gZ2V0VXBkYXRlZEV2ZW50KGV2ZW50LCBhY3RpdmVFdmVudFJlZi5jdXJyZW50KVxuXHRcdGlmICh1cGRhdGVkRXZlbnQpIHtcblx0XHRcdGNvbnN0IHsgYWN0aXZlRXZlbnQsIHVwZGF0ZXMgfSA9IHVwZGF0ZWRFdmVudFxuXHRcdFx0cGVyZm9ybUV2ZW50VXBkYXRlKGFjdGl2ZUV2ZW50LCB1cGRhdGVzKVxuXHRcdH1cblxuXHRcdC8vIENsZWFyIHRoZSBhY3RpdmUgZXZlbnQgcmVmZXJlbmNlXG5cdFx0YWN0aXZlRXZlbnRSZWYuY3VycmVudCA9IG51bGxcblx0XHRkcmFnT3ZlcmxheVJlZi5jdXJyZW50Py5zZXRBY3RpdmVFdmVudChudWxsKVxuXHR9XG5cblx0Y29uc3QgaGFuZGxlRHJhZ0NhbmNlbCA9IChfZXZlbnQ6IERyYWdDYW5jZWxFdmVudCkgPT4ge1xuXHRcdGFjdGl2ZUV2ZW50UmVmLmN1cnJlbnQgPSBudWxsXG5cdH1cblxuXHQvLyBJZiBkcmFnIGFuZCBkcm9wIGlzIGRpc2FibGVkLCBqdXN0IHJldHVybiBjaGlsZHJlbiB3aXRob3V0IERuZENvbnRleHRcblx0aWYgKGRpc2FibGVEcmFnQW5kRHJvcCkge1xuXHRcdHJldHVybiBjaGlsZHJlbiBhcyBSZWFjdC5SZWFjdEVsZW1lbnRcblx0fVxuXG5cdHJldHVybiAoXG5cdFx0PD5cblx0XHRcdDxEbmRDb250ZXh0XG5cdFx0XHRcdGNvbGxpc2lvbkRldGVjdGlvbj17cG9pbnRlcldpdGhpbn1cblx0XHRcdFx0b25EcmFnQ2FuY2VsPXtoYW5kbGVEcmFnQ2FuY2VsfVxuXHRcdFx0XHRvbkRyYWdFbmQ9e2hhbmRsZURyYWdFbmR9XG5cdFx0XHRcdG9uRHJhZ1N0YXJ0PXtoYW5kbGVEcmFnU3RhcnR9XG5cdFx0XHRcdHNlbnNvcnM9e3NlbnNvcnN9XG5cdFx0XHQ+XG5cdFx0XHRcdHtjaGlsZHJlbn1cblx0XHRcdFx0PEV2ZW50RHJhZ092ZXJsYXkgcmVmPXtkcmFnT3ZlcmxheVJlZn0gLz5cblx0XHRcdDwvRG5kQ29udGV4dD5cblxuXHRcdFx0ey8qIFJlY3VycmluZyBldmVudCBlZGl0IGRpYWxvZyAqL31cblx0XHRcdDxSZWN1cnJlbmNlRWRpdERpYWxvZ1xuXHRcdFx0XHRldmVudFRpdGxlPXtyZWN1cnJpbmdEaWFsb2cuZXZlbnQ/LnRpdGxlIHx8ICcnfVxuXHRcdFx0XHRpc09wZW49e3JlY3VycmluZ0RpYWxvZy5pc09wZW59XG5cdFx0XHRcdG9uQ2xvc2U9e2hhbmRsZVJlY3VycmluZ0V2ZW50Q2xvc2V9XG5cdFx0XHRcdG9uQ29uZmlybT17aGFuZGxlUmVjdXJyaW5nRXZlbnRDb25maXJtfVxuXHRcdFx0XHRvcGVyYXRpb25UeXBlPVwiZWRpdFwiXG5cdFx0XHQvPlxuXHRcdDwvPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB7IFNsb3QgfSBmcm9tICdAcmFkaXgtdWkvcmVhY3Qtc2xvdCdcbmltcG9ydCB0eXBlIHsgVmFyaWFudFByb3BzIH0gZnJvbSAnY2xhc3MtdmFyaWFuY2UtYXV0aG9yaXR5J1xuaW1wb3J0IHsgY3ZhIH0gZnJvbSAnY2xhc3MtdmFyaWFuY2UtYXV0aG9yaXR5J1xuaW1wb3J0IHR5cGUgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuY29uc3QgYnV0dG9uVmFyaWFudHMgPSBjdmEoXG5cdFwiaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0yIHdoaXRlc3BhY2Utbm93cmFwIHJvdW5kZWQtbWQgdGV4dC1zbSBmb250LW1lZGl1bSB0cmFuc2l0aW9uLWFsbCBkaXNhYmxlZDpwb2ludGVyLWV2ZW50cy1ub25lIGRpc2FibGVkOm9wYWNpdHktNTAgWyZfc3ZnXTpwb2ludGVyLWV2ZW50cy1ub25lIFsmX3N2Zzpub3QoW2NsYXNzKj0nc2l6ZS0nXSldOnNpemUtNCBzaHJpbmstMCBbJl9zdmddOnNocmluay0wIG91dGxpbmUtbm9uZSBmb2N1cy12aXNpYmxlOmJvcmRlci1yaW5nIGZvY3VzLXZpc2libGU6cmluZy1yaW5nLzUwIGZvY3VzLXZpc2libGU6cmluZy1bM3B4XSBhcmlhLWludmFsaWQ6cmluZy1kZXN0cnVjdGl2ZS8yMCBkYXJrOmFyaWEtaW52YWxpZDpyaW5nLWRlc3RydWN0aXZlLzQwIGFyaWEtaW52YWxpZDpib3JkZXItZGVzdHJ1Y3RpdmVcIixcblx0e1xuXHRcdHZhcmlhbnRzOiB7XG5cdFx0XHR2YXJpYW50OiB7XG5cdFx0XHRcdGRlZmF1bHQ6ICdiZy1wcmltYXJ5IHRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIGhvdmVyOmJnLXByaW1hcnkvOTAnLFxuXHRcdFx0XHRkZXN0cnVjdGl2ZTpcblx0XHRcdFx0XHQnYmctZGVzdHJ1Y3RpdmUgdGV4dC13aGl0ZSBob3ZlcjpiZy1kZXN0cnVjdGl2ZS85MCBmb2N1cy12aXNpYmxlOnJpbmctZGVzdHJ1Y3RpdmUvMjAgZGFyazpmb2N1cy12aXNpYmxlOnJpbmctZGVzdHJ1Y3RpdmUvNDAgZGFyazpiZy1kZXN0cnVjdGl2ZS82MCcsXG5cdFx0XHRcdG91dGxpbmU6XG5cdFx0XHRcdFx0J2JvcmRlciBiZy1iYWNrZ3JvdW5kIHNoYWRvdy14cyBob3ZlcjpiZy1hY2NlbnQgaG92ZXI6dGV4dC1hY2NlbnQtZm9yZWdyb3VuZCBkYXJrOmJnLWlucHV0LzMwIGRhcms6Ym9yZGVyLWlucHV0IGRhcms6aG92ZXI6YmctaW5wdXQvNTAnLFxuXHRcdFx0XHRzZWNvbmRhcnk6XG5cdFx0XHRcdFx0J2JnLXNlY29uZGFyeSB0ZXh0LXNlY29uZGFyeS1mb3JlZ3JvdW5kIGhvdmVyOmJnLXNlY29uZGFyeS84MCcsXG5cdFx0XHRcdGdob3N0OlxuXHRcdFx0XHRcdCdob3ZlcjpiZy1hY2NlbnQgaG92ZXI6dGV4dC1hY2NlbnQtZm9yZWdyb3VuZCBkYXJrOmhvdmVyOmJnLWFjY2VudC81MCcsXG5cdFx0XHRcdGxpbms6ICd0ZXh0LXByaW1hcnkgdW5kZXJsaW5lLW9mZnNldC00IGhvdmVyOnVuZGVybGluZScsXG5cdFx0XHR9LFxuXHRcdFx0c2l6ZToge1xuXHRcdFx0XHRkZWZhdWx0OiAnaC05IHB4LTQgcHktMiBoYXMtWz5zdmddOnB4LTMnLFxuXHRcdFx0XHRzbTogJ2gtOCByb3VuZGVkLW1kIGdhcC0xLjUgcHgtMyBoYXMtWz5zdmddOnB4LTIuNScsXG5cdFx0XHRcdGxnOiAnaC0xMCByb3VuZGVkLW1kIHB4LTYgaGFzLVs+c3ZnXTpweC00Jyxcblx0XHRcdFx0aWNvbjogJ3NpemUtOScsXG5cdFx0XHRcdCdpY29uLXNtJzogJ3NpemUtOCcsXG5cdFx0XHRcdCdpY29uLWxnJzogJ3NpemUtMTAnLFxuXHRcdFx0fSxcblx0XHR9LFxuXHRcdGRlZmF1bHRWYXJpYW50czoge1xuXHRcdFx0dmFyaWFudDogJ2RlZmF1bHQnLFxuXHRcdFx0c2l6ZTogJ2RlZmF1bHQnLFxuXHRcdH0sXG5cdH1cbilcblxuZnVuY3Rpb24gQnV0dG9uKHtcblx0Y2xhc3NOYW1lLFxuXHR2YXJpYW50LFxuXHRzaXplLFxuXHRhc0NoaWxkID0gZmFsc2UsXG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczwnYnV0dG9uJz4gJlxuXHRWYXJpYW50UHJvcHM8dHlwZW9mIGJ1dHRvblZhcmlhbnRzPiAmIHtcblx0XHRhc0NoaWxkPzogYm9vbGVhblxuXHR9KSB7XG5cdGNvbnN0IENvbXAgPSBhc0NoaWxkID8gU2xvdCA6ICdidXR0b24nXG5cblx0cmV0dXJuIChcblx0XHQ8Q29tcFxuXHRcdFx0Y2xhc3NOYW1lPXtjbihidXR0b25WYXJpYW50cyh7IHZhcmlhbnQsIHNpemUsIGNsYXNzTmFtZSB9KSl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJidXR0b25cIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdC8+XG5cdClcbn1cblxuZXhwb3J0IHsgQnV0dG9uLCBidXR0b25WYXJpYW50cyB9XG4iLAogICAgImltcG9ydCAqIGFzIERpYWxvZ1ByaW1pdGl2ZSBmcm9tICdAcmFkaXgtdWkvcmVhY3QtZGlhbG9nJ1xuaW1wb3J0IHsgWEljb24gfSBmcm9tICdsdWNpZGUtcmVhY3QnXG5pbXBvcnQgdHlwZSAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5mdW5jdGlvbiBEaWFsb2coe1xuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIERpYWxvZ1ByaW1pdGl2ZS5Sb290Pikge1xuXHRyZXR1cm4gPERpYWxvZ1ByaW1pdGl2ZS5Sb290IGRhdGEtc2xvdD1cImRpYWxvZ1wiIHsuLi5wcm9wc30gLz5cbn1cblxuZnVuY3Rpb24gRGlhbG9nVHJpZ2dlcih7XG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgRGlhbG9nUHJpbWl0aXZlLlRyaWdnZXI+KSB7XG5cdHJldHVybiA8RGlhbG9nUHJpbWl0aXZlLlRyaWdnZXIgZGF0YS1zbG90PVwiZGlhbG9nLXRyaWdnZXJcIiB7Li4ucHJvcHN9IC8+XG59XG5cbmZ1bmN0aW9uIERpYWxvZ1BvcnRhbCh7XG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgRGlhbG9nUHJpbWl0aXZlLlBvcnRhbD4pIHtcblx0cmV0dXJuIDxEaWFsb2dQcmltaXRpdmUuUG9ydGFsIGRhdGEtc2xvdD1cImRpYWxvZy1wb3J0YWxcIiB7Li4ucHJvcHN9IC8+XG59XG5cbmZ1bmN0aW9uIERpYWxvZ0Nsb3NlKHtcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBEaWFsb2dQcmltaXRpdmUuQ2xvc2U+KSB7XG5cdHJldHVybiA8RGlhbG9nUHJpbWl0aXZlLkNsb3NlIGRhdGEtc2xvdD1cImRpYWxvZy1jbG9zZVwiIHsuLi5wcm9wc30gLz5cbn1cblxuZnVuY3Rpb24gRGlhbG9nT3ZlcmxheSh7XG5cdGNsYXNzTmFtZSxcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBEaWFsb2dQcmltaXRpdmUuT3ZlcmxheT4pIHtcblx0cmV0dXJuIChcblx0XHQ8RGlhbG9nUHJpbWl0aXZlLk92ZXJsYXlcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCdkYXRhLVtzdGF0ZT1vcGVuXTphbmltYXRlLWluIGRhdGEtW3N0YXRlPWNsb3NlZF06YW5pbWF0ZS1vdXQgZGF0YS1bc3RhdGU9Y2xvc2VkXTpmYWRlLW91dC0wIGRhdGEtW3N0YXRlPW9wZW5dOmZhZGUtaW4tMCBmaXhlZCBpbnNldC0wIHotNTAgYmctYmxhY2svNTAnLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJkaWFsb2ctb3ZlcmxheVwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0Lz5cblx0KVxufVxuXG5mdW5jdGlvbiBEaWFsb2dDb250ZW50KHtcblx0Y2xhc3NOYW1lLFxuXHRjaGlsZHJlbixcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBEaWFsb2dQcmltaXRpdmUuQ29udGVudD4pIHtcblx0cmV0dXJuIChcblx0XHQ8RGlhbG9nUG9ydGFsIGRhdGEtc2xvdD1cImRpYWxvZy1wb3J0YWxcIj5cblx0XHRcdDxEaWFsb2dPdmVybGF5IC8+XG5cdFx0XHQ8RGlhbG9nUHJpbWl0aXZlLkNvbnRlbnRcblx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHQnYmctYmFja2dyb3VuZCBkYXRhLVtzdGF0ZT1vcGVuXTphbmltYXRlLWluIGRhdGEtW3N0YXRlPWNsb3NlZF06YW5pbWF0ZS1vdXQgZGF0YS1bc3RhdGU9Y2xvc2VkXTpmYWRlLW91dC0wIGRhdGEtW3N0YXRlPW9wZW5dOmZhZGUtaW4tMCBkYXRhLVtzdGF0ZT1jbG9zZWRdOnpvb20tb3V0LTk1IGRhdGEtW3N0YXRlPW9wZW5dOnpvb20taW4tOTUgZml4ZWQgdG9wLVs1MCVdIGxlZnQtWzUwJV0gei01MCBncmlkIHctZnVsbCBtYXgtdy1bY2FsYygxMDAlLTJyZW0pXSB0cmFuc2xhdGUteC1bLTUwJV0gdHJhbnNsYXRlLXktWy01MCVdIGdhcC00IHJvdW5kZWQtbGcgYm9yZGVyIHAtNiBzaGFkb3ctbGcgZHVyYXRpb24tMjAwIHNtOm1heC13LWxnIG1heC1oLVs5MCVdJyxcblx0XHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdFx0KX1cblx0XHRcdFx0ZGF0YS1zbG90PVwiZGlhbG9nLWNvbnRlbnRcIlxuXHRcdFx0XHR7Li4ucHJvcHN9XG5cdFx0XHQ+XG5cdFx0XHRcdHtjaGlsZHJlbn1cblx0XHRcdFx0PERpYWxvZ1ByaW1pdGl2ZS5DbG9zZSBjbGFzc05hbWU9XCJyaW5nLW9mZnNldC1iYWNrZ3JvdW5kIGZvY3VzOnJpbmctcmluZyBkYXRhLVtzdGF0ZT1vcGVuXTpiZy1hY2NlbnQgZGF0YS1bc3RhdGU9b3Blbl06dGV4dC1tdXRlZC1mb3JlZ3JvdW5kIGFic29sdXRlIHRvcC00IHJpZ2h0LTQgcm91bmRlZC14cyBvcGFjaXR5LTcwIHRyYW5zaXRpb24tb3BhY2l0eSBob3ZlcjpvcGFjaXR5LTEwMCBmb2N1czpyaW5nLTIgZm9jdXM6cmluZy1vZmZzZXQtMiBmb2N1czpvdXRsaW5lLWhpZGRlbiBkaXNhYmxlZDpwb2ludGVyLWV2ZW50cy1ub25lIFsmX3N2Z106cG9pbnRlci1ldmVudHMtbm9uZSBbJl9zdmddOnNocmluay0wIFsmX3N2Zzpub3QoW2NsYXNzKj0nc2l6ZS0nXSldOnNpemUtNFwiPlxuXHRcdFx0XHRcdDxYSWNvbiAvPlxuXHRcdFx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cInNyLW9ubHlcIj5DbG9zZTwvc3Bhbj5cblx0XHRcdFx0PC9EaWFsb2dQcmltaXRpdmUuQ2xvc2U+XG5cdFx0XHQ8L0RpYWxvZ1ByaW1pdGl2ZS5Db250ZW50PlxuXHRcdDwvRGlhbG9nUG9ydGFsPlxuXHQpXG59XG5cbmZ1bmN0aW9uIERpYWxvZ0hlYWRlcih7IGNsYXNzTmFtZSwgLi4ucHJvcHMgfTogUmVhY3QuQ29tcG9uZW50UHJvcHM8J2Rpdic+KSB7XG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbignZmxleCBmbGV4LWNvbCBnYXAtMiB0ZXh0LWNlbnRlciBzbTp0ZXh0LWxlZnQnLCBjbGFzc05hbWUpfVxuXHRcdFx0ZGF0YS1zbG90PVwiZGlhbG9nLWhlYWRlclwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0Lz5cblx0KVxufVxuXG5mdW5jdGlvbiBEaWFsb2dGb290ZXIoeyBjbGFzc05hbWUsIC4uLnByb3BzIH06IFJlYWN0LkNvbXBvbmVudFByb3BzPCdkaXYnPikge1xuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCdmbGV4IGZsZXgtY29sLXJldmVyc2UgZ2FwLTIgc206ZmxleC1yb3cgc206anVzdGlmeS1lbmQnLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJkaWFsb2ctZm9vdGVyXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmZ1bmN0aW9uIERpYWxvZ1RpdGxlKHtcblx0Y2xhc3NOYW1lLFxuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIERpYWxvZ1ByaW1pdGl2ZS5UaXRsZT4pIHtcblx0cmV0dXJuIChcblx0XHQ8RGlhbG9nUHJpbWl0aXZlLlRpdGxlXG5cdFx0XHRjbGFzc05hbWU9e2NuKCd0ZXh0LWxnIGxlYWRpbmctbm9uZSBmb250LXNlbWlib2xkJywgY2xhc3NOYW1lKX1cblx0XHRcdGRhdGEtc2xvdD1cImRpYWxvZy10aXRsZVwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0Lz5cblx0KVxufVxuXG5mdW5jdGlvbiBEaWFsb2dEZXNjcmlwdGlvbih7XG5cdGNsYXNzTmFtZSxcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBEaWFsb2dQcmltaXRpdmUuRGVzY3JpcHRpb24+KSB7XG5cdHJldHVybiAoXG5cdFx0PERpYWxvZ1ByaW1pdGl2ZS5EZXNjcmlwdGlvblxuXHRcdFx0Y2xhc3NOYW1lPXtjbigndGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHRleHQtc20nLCBjbGFzc05hbWUpfVxuXHRcdFx0ZGF0YS1zbG90PVwiZGlhbG9nLWRlc2NyaXB0aW9uXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmV4cG9ydCB7XG5cdERpYWxvZyxcblx0RGlhbG9nQ2xvc2UsXG5cdERpYWxvZ0NvbnRlbnQsXG5cdERpYWxvZ0Rlc2NyaXB0aW9uLFxuXHREaWFsb2dGb290ZXIsXG5cdERpYWxvZ0hlYWRlcixcblx0RGlhbG9nT3ZlcmxheSxcblx0RGlhbG9nUG9ydGFsLFxuXHREaWFsb2dUaXRsZSxcblx0RGlhbG9nVHJpZ2dlcixcbn1cbiIsCiAgICAiaW1wb3J0IHsgdXNlQ29udGV4dCB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5pbXBvcnQgeyBSZXNvdXJjZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29udGV4dHMvcmVzb3VyY2UtY2FsZW5kYXItY29udGV4dCdcblxuLyoqXG4gKiBHZW5lcmljIGhvb2sgdGhhdCBkZXRlY3RzIHdoaWNoIGNhbGVuZGFyIGNvbnRleHQgaXMgYXZhaWxhYmxlIGFuZCByZXR1cm5zIHNlbGVjdGVkIHByb3BlcnRpZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0PFQ+KHNlbGVjdG9yOiAoY29udGV4dCkgPT4gVCk6IFQge1xuXHQvLyBDaGVjayBib3RoIGNvbnRleHRzIHVzaW5nIHVzZUNvbnRleHQgZGlyZWN0bHkgKG5vIGhvb2tzKVxuXHRjb25zdCByZXNvdXJjZUNvbnRleHQgPSB1c2VDb250ZXh0KFJlc291cmNlQ2FsZW5kYXJDb250ZXh0KVxuXHRjb25zdCByZWd1bGFyQ29udGV4dCA9IHVzZUNvbnRleHQoQ2FsZW5kYXJDb250ZXh0KVxuXG5cdGlmIChyZXNvdXJjZUNvbnRleHQpIHtcblx0XHRyZXR1cm4gc2VsZWN0b3IocmVzb3VyY2VDb250ZXh0KVxuXHR9XG5cblx0aWYgKHJlZ3VsYXJDb250ZXh0KSB7XG5cdFx0cmV0dXJuIHNlbGVjdG9yKHJlZ3VsYXJDb250ZXh0KVxuXHR9XG5cblx0Ly8gSWYgbmVpdGhlciBjb250ZXh0IGlzIGF2YWlsYWJsZSwgdGhyb3cgYW4gZXJyb3Jcblx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdCd1c2VTbWFydENhbGVuZGFyQ29udGV4dCBtdXN0IGJlIHVzZWQgd2l0aGluIGEgQ2FsZW5kYXJQcm92aWRlciBvciBSZXNvdXJjZUNhbGVuZGFyUHJvdmlkZXInXG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHsgY3JlYXRlQ29udGV4dCwgdXNlQ29udGV4dCB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBFdmVudEZvcm1Qcm9wcyB9IGZyb20gJ0AvY29tcG9uZW50cy9ldmVudC1mb3JtL2V2ZW50LWZvcm0nXG5pbXBvcnQgdHlwZSB7IEJ1c2luZXNzSG91cnMsIENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgdHlwZSB7XG5cdENhbGVuZGFyQ2xhc3Nlc092ZXJyaWRlLFxuXHRDZWxsQ2xpY2tJbmZvLFxuXHRSZW5kZXJDdXJyZW50VGltZUluZGljYXRvclByb3BzLFxufSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBSZWN1cnJlbmNlRWRpdE9wdGlvbnMgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvdHlwZXMnXG5pbXBvcnQgdHlwZSBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB0eXBlIHsgVHJhbnNsYXRpb25LZXkgfSBmcm9tICdAL2xpYi90cmFuc2xhdGlvbnMvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyVmlldywgVGltZUZvcm1hdCB9IGZyb20gJ0AvdHlwZXMnXG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2FsZW5kYXJDb250ZXh0VHlwZSB7XG5cdGN1cnJlbnREYXRlOiBkYXlqcy5EYXlqc1xuXHR2aWV3OiBDYWxlbmRhclZpZXdcblx0ZXZlbnRzOiBDYWxlbmRhckV2ZW50W11cblx0cmF3RXZlbnRzOiBDYWxlbmRhckV2ZW50W10gLy8gVW5wcm9jZXNzZWQgZXZlbnRzIGZvciBleHBvcnRcblx0aXNFdmVudEZvcm1PcGVuOiBib29sZWFuXG5cdHNlbGVjdGVkRXZlbnQ6IENhbGVuZGFyRXZlbnQgfCBudWxsXG5cdHNlbGVjdGVkRGF0ZTogZGF5anMuRGF5anMgfCBudWxsXG5cdGZpcnN0RGF5T2ZXZWVrOiBudW1iZXIgLy8gMCBmb3IgU3VuZGF5LCAxIGZvciBNb25kYXksIGV0Yy5cblx0c2V0Q3VycmVudERhdGU6IChkYXRlOiBkYXlqcy5EYXlqcykgPT4gdm9pZFxuXHRzZWxlY3REYXRlOiAoZGF0ZTogZGF5anMuRGF5anMpID0+IHZvaWRcblx0c2V0VmlldzogKHZpZXc6IENhbGVuZGFyVmlldykgPT4gdm9pZFxuXHRuZXh0UGVyaW9kOiAoKSA9PiB2b2lkXG5cdHByZXZQZXJpb2Q6ICgpID0+IHZvaWRcblx0dG9kYXk6ICgpID0+IHZvaWRcblx0YWRkRXZlbnQ6IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuXHR1cGRhdGVFdmVudDogKGV2ZW50SWQ6IHN0cmluZyB8IG51bWJlciwgZXZlbnQ6IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD4pID0+IHZvaWRcblx0dXBkYXRlUmVjdXJyaW5nRXZlbnQ6IChcblx0XHRldmVudDogQ2FsZW5kYXJFdmVudCxcblx0XHR1cGRhdGVzOiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+LFxuXHRcdG9wdGlvbnM6IFJlY3VycmVuY2VFZGl0T3B0aW9uc1xuXHQpID0+IHZvaWRcblx0ZGVsZXRlRXZlbnQ6IChldmVudElkOiBzdHJpbmcgfCBudW1iZXIpID0+IHZvaWRcblx0ZGVsZXRlUmVjdXJyaW5nRXZlbnQ6IChcblx0XHRldmVudDogQ2FsZW5kYXJFdmVudCxcblx0XHRvcHRpb25zOiBSZWN1cnJlbmNlRWRpdE9wdGlvbnNcblx0KSA9PiB2b2lkXG5cdG9wZW5FdmVudEZvcm06IChldmVudERhdGE/OiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+KSA9PiB2b2lkXG5cdGNsb3NlRXZlbnRGb3JtOiAoKSA9PiB2b2lkXG5cdGdldEV2ZW50c0ZvckRhdGVSYW5nZTogKFxuXHRcdHN0YXJ0RGF0ZTogZGF5anMuRGF5anMsXG5cdFx0ZW5kRGF0ZTogZGF5anMuRGF5anNcblx0KSA9PiBDYWxlbmRhckV2ZW50W11cblx0ZmluZFBhcmVudFJlY3VycmluZ0V2ZW50OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IENhbGVuZGFyRXZlbnQgfCBudWxsXG5cdHJlbmRlckV2ZW50PzogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiBSZWFjdC5SZWFjdE5vZGVcblx0b25FdmVudENsaWNrOiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0b25DZWxsQ2xpY2s6IChpbmZvOiBDZWxsQ2xpY2tJbmZvKSA9PiB2b2lkXG5cdGN1cnJlbnRMb2NhbGU/OiBzdHJpbmdcblx0ZGlzYWJsZUNlbGxDbGljaz86IGJvb2xlYW5cblx0ZGlzYWJsZUV2ZW50Q2xpY2s/OiBib29sZWFuXG5cdGRpc2FibGVEcmFnQW5kRHJvcD86IGJvb2xlYW5cblx0ZGF5TWF4RXZlbnRzOiBudW1iZXJcblx0ZXZlbnRTcGFjaW5nOiBudW1iZXJcblx0c3RpY2t5Vmlld0hlYWRlcjogYm9vbGVhblxuXHR2aWV3SGVhZGVyQ2xhc3NOYW1lOiBzdHJpbmdcblx0aGVhZGVyQ29tcG9uZW50PzogUmVhY3QuUmVhY3ROb2RlIC8vIE9wdGlvbmFsIGN1c3RvbSBoZWFkZXIgY29tcG9uZW50XG5cdGhlYWRlckNsYXNzTmFtZT86IHN0cmluZyAvLyBPcHRpb25hbCBjdXN0b20gaGVhZGVyIGNsYXNzXG5cdGJ1c2luZXNzSG91cnM/OiBCdXNpbmVzc0hvdXJzIHwgQnVzaW5lc3NIb3Vyc1tdXG5cdHJlbmRlckV2ZW50Rm9ybT86IChwcm9wczogRXZlbnRGb3JtUHJvcHMpID0+IFJlYWN0LlJlYWN0Tm9kZVxuXHQvLyBUcmFuc2xhdGlvbiBmdW5jdGlvblxuXHR0OiAoa2V5OiBUcmFuc2xhdGlvbktleSkgPT4gc3RyaW5nXG5cdHRpbWVGb3JtYXQ6IFRpbWVGb3JtYXRcblx0Y2xhc3Nlc092ZXJyaWRlPzogQ2FsZW5kYXJDbGFzc2VzT3ZlcnJpZGVcblx0cmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3I/OiAoXG5cdFx0cHJvcHM6IFJlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yUHJvcHNcblx0KSA9PiBSZWFjdC5SZWFjdE5vZGVcblx0aGlkZU5vbkJ1c2luZXNzSG91cnM/OiBib29sZWFuXG59XG5cbmV4cG9ydCBjb25zdCBDYWxlbmRhckNvbnRleHQ6IFJlYWN0LkNvbnRleHQ8Q2FsZW5kYXJDb250ZXh0VHlwZSB8IHVuZGVmaW5lZD4gPVxuXHRjcmVhdGVDb250ZXh0PENhbGVuZGFyQ29udGV4dFR5cGUgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZClcblxuZXhwb3J0IGNvbnN0IHVzZUNhbGVuZGFyQ29udGV4dCA9ICgpOiBDYWxlbmRhckNvbnRleHRUeXBlID0+IHtcblx0Y29uc3QgY29udGV4dCA9IHVzZUNvbnRleHQoQ2FsZW5kYXJDb250ZXh0KVxuXHRpZiAoY29udGV4dCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCd1c2VDYWxlbmRhckNvbnRleHQgbXVzdCBiZSB1c2VkIHdpdGhpbiBhIENhbGVuZGFyUHJvdmlkZXInKVxuXHR9XG5cdHJldHVybiBjb250ZXh0XG59XG5cbi8qKlxuICogU2ltcGxpZmllZCBjYWxlbmRhciBjb250ZXh0IHR5cGUgZm9yIGV4dGVybmFsIHVzZVxuICogQ29udGFpbnMgb25seSB0aGUgbW9zdCBjb21tb25seSB1c2VkIGNhbGVuZGFyIG9wZXJhdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VJbGFteUNhbGVuZGFyQ29udGV4dFJldHVybiB7XG5cdHJlYWRvbmx5IGN1cnJlbnREYXRlOiBkYXlqcy5EYXlqc1xuXHRyZWFkb25seSB2aWV3OiBDYWxlbmRhclZpZXdcblx0cmVhZG9ubHkgZXZlbnRzOiBDYWxlbmRhckV2ZW50W11cblx0cmVhZG9ubHkgaXNFdmVudEZvcm1PcGVuOiBib29sZWFuXG5cdHJlYWRvbmx5IHNlbGVjdGVkRXZlbnQ6IENhbGVuZGFyRXZlbnQgfCBudWxsXG5cdHJlYWRvbmx5IHNlbGVjdGVkRGF0ZTogZGF5anMuRGF5anMgfCBudWxsXG5cdHJlYWRvbmx5IGZpcnN0RGF5T2ZXZWVrOiBudW1iZXJcblx0cmVhZG9ubHkgc2V0Q3VycmVudERhdGU6IChkYXRlOiBkYXlqcy5EYXlqcykgPT4gdm9pZFxuXHRyZWFkb25seSBzZWxlY3REYXRlOiAoZGF0ZTogZGF5anMuRGF5anMpID0+IHZvaWRcblx0cmVhZG9ubHkgc2V0VmlldzogKHZpZXc6IENhbGVuZGFyVmlldykgPT4gdm9pZFxuXHRyZWFkb25seSBuZXh0UGVyaW9kOiAoKSA9PiB2b2lkXG5cdHJlYWRvbmx5IHByZXZQZXJpb2Q6ICgpID0+IHZvaWRcblx0cmVhZG9ubHkgdG9kYXk6ICgpID0+IHZvaWRcblx0cmVhZG9ubHkgYWRkRXZlbnQ6IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuXHRyZWFkb25seSB1cGRhdGVFdmVudDogKFxuXHRcdGV2ZW50SWQ6IHN0cmluZyB8IG51bWJlcixcblx0XHRldmVudDogUGFydGlhbDxDYWxlbmRhckV2ZW50PlxuXHQpID0+IHZvaWRcblx0cmVhZG9ubHkgZGVsZXRlRXZlbnQ6IChldmVudElkOiBzdHJpbmcgfCBudW1iZXIpID0+IHZvaWRcblx0cmVhZG9ubHkgb3BlbkV2ZW50Rm9ybTogKGV2ZW50RGF0YT86IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD4pID0+IHZvaWRcblx0cmVhZG9ubHkgY2xvc2VFdmVudEZvcm06ICgpID0+IHZvaWRcblx0cmVhZG9ubHkgYnVzaW5lc3NIb3Vycz86IEJ1c2luZXNzSG91cnMgfCBCdXNpbmVzc0hvdXJzW11cbn1cblxuZXhwb3J0IGNvbnN0IHVzZUlsYW15Q2FsZW5kYXJDb250ZXh0ID0gKCk6IFVzZUlsYW15Q2FsZW5kYXJDb250ZXh0UmV0dXJuID0+IHtcblx0Y29uc3QgY29udGV4dCA9IHVzZUNvbnRleHQoQ2FsZW5kYXJDb250ZXh0KVxuXHRpZiAoY29udGV4dCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0J3VzZUlsYW15Q2FsZW5kYXJDb250ZXh0IG11c3QgYmUgdXNlZCB3aXRoaW4gYSBDYWxlbmRhclByb3ZpZGVyJ1xuXHRcdClcblx0fVxuXHRyZXR1cm4ge1xuXHRcdGN1cnJlbnREYXRlOiBjb250ZXh0LmN1cnJlbnREYXRlLFxuXHRcdHZpZXc6IGNvbnRleHQudmlldyxcblx0XHRldmVudHM6IGNvbnRleHQuZXZlbnRzLFxuXHRcdGlzRXZlbnRGb3JtT3BlbjogY29udGV4dC5pc0V2ZW50Rm9ybU9wZW4sXG5cdFx0c2VsZWN0ZWRFdmVudDogY29udGV4dC5zZWxlY3RlZEV2ZW50LFxuXHRcdHNlbGVjdGVkRGF0ZTogY29udGV4dC5zZWxlY3RlZERhdGUsXG5cdFx0Zmlyc3REYXlPZldlZWs6IGNvbnRleHQuZmlyc3REYXlPZldlZWssXG5cdFx0c2V0Q3VycmVudERhdGU6IGNvbnRleHQuc2V0Q3VycmVudERhdGUsXG5cdFx0c2VsZWN0RGF0ZTogY29udGV4dC5zZWxlY3REYXRlLFxuXHRcdHNldFZpZXc6IGNvbnRleHQuc2V0Vmlldyxcblx0XHRuZXh0UGVyaW9kOiBjb250ZXh0Lm5leHRQZXJpb2QsXG5cdFx0cHJldlBlcmlvZDogY29udGV4dC5wcmV2UGVyaW9kLFxuXHRcdHRvZGF5OiBjb250ZXh0LnRvZGF5LFxuXHRcdGFkZEV2ZW50OiBjb250ZXh0LmFkZEV2ZW50LFxuXHRcdHVwZGF0ZUV2ZW50OiBjb250ZXh0LnVwZGF0ZUV2ZW50LFxuXHRcdGRlbGV0ZUV2ZW50OiBjb250ZXh0LmRlbGV0ZUV2ZW50LFxuXHRcdG9wZW5FdmVudEZvcm06IGNvbnRleHQub3BlbkV2ZW50Rm9ybSxcblx0XHRjbG9zZUV2ZW50Rm9ybTogY29udGV4dC5jbG9zZUV2ZW50Rm9ybSxcblx0XHRidXNpbmVzc0hvdXJzOiBjb250ZXh0LmJ1c2luZXNzSG91cnMsXG5cdH0gYXMgY29uc3Rcbn1cbiIsCiAgICAiaW1wb3J0IHsgY3JlYXRlQ29udGV4dCwgdXNlQ29udGV4dCB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHR5cGUge1xuXHRDYWxlbmRhckNvbnRleHRUeXBlLFxuXHRVc2VJbGFteUNhbGVuZGFyQ29udGV4dFJldHVybixcbn0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5pbXBvcnQgdHlwZSB7IENlbGxDbGlja0luZm8gfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBSZXNvdXJjZSB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvdHlwZXMnXG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb3VyY2VDYWxlbmRhckNvbnRleHRUeXBlIGV4dGVuZHMgQ2FsZW5kYXJDb250ZXh0VHlwZSB7XG5cdC8vIFJlc291cmNlLXNwZWNpZmljIHN0YXRlXG5cdHJlc291cmNlczogUmVzb3VyY2VbXVxuXHR2aXNpYmxlUmVzb3VyY2VzOiBTZXQ8c3RyaW5nIHwgbnVtYmVyPlxuXG5cdC8vIFJlc291cmNlIHV0aWxpdGllc1xuXHRnZXRFdmVudHNGb3JSZXNvdXJjZTogKHJlc291cmNlSWQ6IHN0cmluZyB8IG51bWJlcikgPT4gQ2FsZW5kYXJFdmVudFtdXG5cdGdldEV2ZW50c0ZvclJlc291cmNlczogKHJlc291cmNlSWRzOiAoc3RyaW5nIHwgbnVtYmVyKVtdKSA9PiBDYWxlbmRhckV2ZW50W11cblx0Z2V0UmVzb3VyY2VCeUlkOiAocmVzb3VyY2VJZDogc3RyaW5nIHwgbnVtYmVyKSA9PiBSZXNvdXJjZSB8IHVuZGVmaW5lZFxuXHRnZXRWaXNpYmxlUmVzb3VyY2VzOiAoKSA9PiBSZXNvdXJjZVtdXG5cblx0Ly8gQ3Jvc3MtcmVzb3VyY2UgZXZlbnQgdXRpbGl0aWVzXG5cdGlzRXZlbnRDcm9zc1Jlc291cmNlOiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IGJvb2xlYW5cblx0Z2V0RXZlbnRSZXNvdXJjZUlkczogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiAoc3RyaW5nIHwgbnVtYmVyKVtdXG5cblx0Ly8gQWRkaXRpb25hbCBwcm9wZXJ0aWVzIGZyb20gY2FsZW5kYXIgY29udGV4dFxuXHRvbkV2ZW50Q2xpY2s6IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuXHRvbkNlbGxDbGljazogKGluZm86IENlbGxDbGlja0luZm8pID0+IHZvaWRcblx0cmVuZGVyUmVzb3VyY2U/OiAocmVzb3VyY2U6IFJlc291cmNlKSA9PiBSZWFjdC5SZWFjdE5vZGVcblx0b3JpZW50YXRpb246ICdob3Jpem9udGFsJyB8ICd2ZXJ0aWNhbCdcbn1cblxuZXhwb3J0IGNvbnN0IFJlc291cmNlQ2FsZW5kYXJDb250ZXh0OiBSZWFjdC5Db250ZXh0PFxuXHRSZXNvdXJjZUNhbGVuZGFyQ29udGV4dFR5cGUgfCB1bmRlZmluZWRcbj4gPSBjcmVhdGVDb250ZXh0PFJlc291cmNlQ2FsZW5kYXJDb250ZXh0VHlwZSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKVxuXG5leHBvcnQgY29uc3QgdXNlUmVzb3VyY2VDYWxlbmRhckNvbnRleHQgPSAoKTogUmVzb3VyY2VDYWxlbmRhckNvbnRleHRUeXBlID0+IHtcblx0Y29uc3QgY29udGV4dCA9IHVzZUNvbnRleHQoUmVzb3VyY2VDYWxlbmRhckNvbnRleHQpXG5cdGlmIChjb250ZXh0ID09PSB1bmRlZmluZWQpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXG5cdFx0XHQndXNlUmVzb3VyY2VDYWxlbmRhckNvbnRleHQgbXVzdCBiZSB1c2VkIHdpdGhpbiBhIFJlc291cmNlQ2FsZW5kYXJQcm92aWRlcidcblx0XHQpXG5cdH1cblx0cmV0dXJuIGNvbnRleHRcbn1cblxuLyoqXG4gKiBTaW1wbGlmaWVkIHJlc291cmNlIGNhbGVuZGFyIGNvbnRleHQgdHlwZSBmb3IgZXh0ZXJuYWwgdXNlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlSWxhbXlSZXNvdXJjZUNhbGVuZGFyQ29udGV4dFJldHVyblxuXHRleHRlbmRzIFVzZUlsYW15Q2FsZW5kYXJDb250ZXh0UmV0dXJuIHtcblx0cmVhZG9ubHkgZXZlbnRzOiBDYWxlbmRhckV2ZW50W11cblx0cmVhZG9ubHkgcmVzb3VyY2VzOiBSZXNvdXJjZVtdXG5cdHJlYWRvbmx5IGdldEV2ZW50c0ZvclJlc291cmNlOiAoXG5cdFx0cmVzb3VyY2VJZDogc3RyaW5nIHwgbnVtYmVyXG5cdCkgPT4gQ2FsZW5kYXJFdmVudFtdXG59XG5cbmV4cG9ydCBjb25zdCB1c2VJbGFteVJlc291cmNlQ2FsZW5kYXJDb250ZXh0ID1cblx0KCk6IFVzZUlsYW15UmVzb3VyY2VDYWxlbmRhckNvbnRleHRSZXR1cm4gPT4ge1xuXHRcdGNvbnN0IGNvbnRleHQgPSB1c2VDb250ZXh0KFJlc291cmNlQ2FsZW5kYXJDb250ZXh0KVxuXHRcdGlmIChjb250ZXh0ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcblx0XHRcdFx0J3VzZUlsYW15UmVzb3VyY2VDYWxlbmRhckNvbnRleHQgbXVzdCBiZSB1c2VkIHdpdGhpbiBhIFJlc291cmNlQ2FsZW5kYXJQcm92aWRlcidcblx0XHRcdClcblx0XHR9XG5cdFx0cmV0dXJuIHtcblx0XHRcdGN1cnJlbnREYXRlOiBjb250ZXh0LmN1cnJlbnREYXRlLFxuXHRcdFx0dmlldzogY29udGV4dC52aWV3LFxuXHRcdFx0ZXZlbnRzOiBjb250ZXh0LmV2ZW50cyxcblx0XHRcdHJlc291cmNlczogY29udGV4dC5yZXNvdXJjZXMsXG5cdFx0XHRpc0V2ZW50Rm9ybU9wZW46IGNvbnRleHQuaXNFdmVudEZvcm1PcGVuLFxuXHRcdFx0c2VsZWN0ZWRFdmVudDogY29udGV4dC5zZWxlY3RlZEV2ZW50LFxuXHRcdFx0c2VsZWN0ZWREYXRlOiBjb250ZXh0LnNlbGVjdGVkRGF0ZSxcblx0XHRcdGZpcnN0RGF5T2ZXZWVrOiBjb250ZXh0LmZpcnN0RGF5T2ZXZWVrLFxuXHRcdFx0c2V0Q3VycmVudERhdGU6IGNvbnRleHQuc2V0Q3VycmVudERhdGUsXG5cdFx0XHRzZWxlY3REYXRlOiBjb250ZXh0LnNlbGVjdERhdGUsXG5cdFx0XHRzZXRWaWV3OiBjb250ZXh0LnNldFZpZXcsXG5cdFx0XHRuZXh0UGVyaW9kOiBjb250ZXh0Lm5leHRQZXJpb2QsXG5cdFx0XHRwcmV2UGVyaW9kOiBjb250ZXh0LnByZXZQZXJpb2QsXG5cdFx0XHR0b2RheTogY29udGV4dC50b2RheSxcblx0XHRcdGFkZEV2ZW50OiBjb250ZXh0LmFkZEV2ZW50LFxuXHRcdFx0dXBkYXRlRXZlbnQ6IGNvbnRleHQudXBkYXRlRXZlbnQsXG5cdFx0XHRkZWxldGVFdmVudDogY29udGV4dC5kZWxldGVFdmVudCxcblx0XHRcdG9wZW5FdmVudEZvcm06IGNvbnRleHQub3BlbkV2ZW50Rm9ybSxcblx0XHRcdGNsb3NlRXZlbnRGb3JtOiBjb250ZXh0LmNsb3NlRXZlbnRGb3JtLFxuXHRcdFx0Z2V0RXZlbnRzRm9yUmVzb3VyY2U6IGNvbnRleHQuZ2V0RXZlbnRzRm9yUmVzb3VyY2UsXG5cdFx0XHRidXNpbmVzc0hvdXJzOiBjb250ZXh0LmJ1c2luZXNzSG91cnMsXG5cdFx0fSBhcyBjb25zdFxuXHR9XG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZU1lbW8sIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyUHJvdmlkZXJQcm9wcyB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9wcm92aWRlcidcbmltcG9ydCB0eXBlIHtcblx0Q2FsZW5kYXJDbGFzc2VzT3ZlcnJpZGUsXG5cdENlbGxDbGlja0luZm8sXG5cdFJlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yUHJvcHMsXG59IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IFJlc291cmNlIH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci90eXBlcydcbmltcG9ydCB7IHVzZUNhbGVuZGFyRW5naW5lIH0gZnJvbSAnQC9ob29rcy91c2UtY2FsZW5kYXItZW5naW5lJ1xuaW1wb3J0IHsgUmVzb3VyY2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICcuL2NvbnRleHQnXG5cbmNvbnN0IGdldEV2ZW50UmVzb3VyY2VJZHMgPSAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpOiAoc3RyaW5nIHwgbnVtYmVyKVtdID0+IHtcblx0aWYgKGV2ZW50LnJlc291cmNlSWRzKSB7XG5cdFx0cmV0dXJuIGV2ZW50LnJlc291cmNlSWRzXG5cdH1cblx0aWYgKGV2ZW50LnJlc291cmNlSWQgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBbZXZlbnQucmVzb3VyY2VJZF1cblx0fVxuXHRyZXR1cm4gW11cbn1cblxuaW50ZXJmYWNlIFJlc291cmNlQ2FsZW5kYXJQcm92aWRlclByb3BzIGV4dGVuZHMgQ2FsZW5kYXJQcm92aWRlclByb3BzIHtcblx0ZXZlbnRzPzogQ2FsZW5kYXJFdmVudFtdXG5cdHJlc291cmNlcz86IFJlc291cmNlW11cblx0cmVuZGVyUmVzb3VyY2U/OiAocmVzb3VyY2U6IFJlc291cmNlKSA9PiBSZWFjdC5SZWFjdE5vZGVcblx0Y2xhc3Nlc092ZXJyaWRlPzogQ2FsZW5kYXJDbGFzc2VzT3ZlcnJpZGVcblx0b3JpZW50YXRpb24/OiAnaG9yaXpvbnRhbCcgfCAndmVydGljYWwnXG5cdHJlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yPzogKFxuXHRcdHByb3BzOiBSZW5kZXJDdXJyZW50VGltZUluZGljYXRvclByb3BzXG5cdCkgPT4gUmVhY3QuUmVhY3ROb2RlXG5cdGhpZGVOb25CdXNpbmVzc0hvdXJzPzogYm9vbGVhblxufVxuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VDYWxlbmRhclByb3ZpZGVyOiBSZWFjdC5GQzxcblx0UmVzb3VyY2VDYWxlbmRhclByb3ZpZGVyUHJvcHNcbj4gPSAoe1xuXHRjaGlsZHJlbixcblx0ZXZlbnRzID0gW10sXG5cdHJlc291cmNlcyA9IFtdLFxuXHRmaXJzdERheU9mV2VlayA9IDAsXG5cdGluaXRpYWxWaWV3ID0gJ21vbnRoJyxcblx0aW5pdGlhbERhdGUsXG5cdHJlbmRlckV2ZW50LFxuXHRvbkV2ZW50Q2xpY2ssXG5cdG9uQ2VsbENsaWNrLFxuXHRvblZpZXdDaGFuZ2UsXG5cdG9uRXZlbnRBZGQsXG5cdG9uRXZlbnRVcGRhdGUsXG5cdG9uRXZlbnREZWxldGUsXG5cdG9uRGF0ZUNoYW5nZSxcblx0bG9jYWxlLFxuXHR0aW1lem9uZSxcblx0ZGlzYWJsZUNlbGxDbGljayxcblx0ZGlzYWJsZUV2ZW50Q2xpY2ssXG5cdGRpc2FibGVEcmFnQW5kRHJvcCxcblx0ZGF5TWF4RXZlbnRzLFxuXHRldmVudFNwYWNpbmcsXG5cdHN0aWNreVZpZXdIZWFkZXIgPSB0cnVlLFxuXHR2aWV3SGVhZGVyQ2xhc3NOYW1lID0gJycsXG5cdGhlYWRlckNvbXBvbmVudCxcblx0aGVhZGVyQ2xhc3NOYW1lLFxuXHR0cmFuc2xhdGlvbnMsXG5cdHRyYW5zbGF0b3IsXG5cdHJlbmRlclJlc291cmNlLFxuXHRyZW5kZXJFdmVudEZvcm0sXG5cdGJ1c2luZXNzSG91cnMsXG5cdHRpbWVGb3JtYXQgPSAnMTItaG91cicsXG5cdGNsYXNzZXNPdmVycmlkZSxcblx0b3JpZW50YXRpb24gPSAnaG9yaXpvbnRhbCcsXG5cdHJlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yLFxuXHRoaWRlTm9uQnVzaW5lc3NIb3VycyA9IGZhbHNlLFxufSkgPT4ge1xuXHQvLyBSZXNvdXJjZS1zcGVjaWZpYyBzdGF0ZVxuXHRjb25zdCBbY3VycmVudFJlc291cmNlc10gPSB1c2VTdGF0ZTxSZXNvdXJjZVtdPihyZXNvdXJjZXMpXG5cdGNvbnN0IFt2aXNpYmxlUmVzb3VyY2VzLCBzZXRWaXNpYmxlUmVzb3VyY2VzXSA9IHVzZVN0YXRlPFxuXHRcdFNldDxzdHJpbmcgfCBudW1iZXI+XG5cdD4obmV3IFNldChyZXNvdXJjZXMubWFwKChyKSA9PiByLmlkKSkpXG5cblx0Ly8gVXNlIHRoZSBjYWxlbmRhciBlbmdpbmVcblx0Y29uc3QgY2FsZW5kYXJFbmdpbmUgPSB1c2VDYWxlbmRhckVuZ2luZSh7XG5cdFx0ZXZlbnRzLFxuXHRcdGZpcnN0RGF5T2ZXZWVrLFxuXHRcdGluaXRpYWxWaWV3LFxuXHRcdGluaXRpYWxEYXRlLFxuXHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0b25FdmVudEFkZCxcblx0XHRvbkV2ZW50VXBkYXRlLFxuXHRcdG9uRXZlbnREZWxldGUsXG5cdFx0b25EYXRlQ2hhbmdlLFxuXHRcdG9uVmlld0NoYW5nZTogb25WaWV3Q2hhbmdlLFxuXHRcdGxvY2FsZSxcblx0XHR0aW1lem9uZSxcblx0XHR0cmFuc2xhdGlvbnMsXG5cdFx0dHJhbnNsYXRvcixcblx0fSlcblxuXHQvLyBSZXNvdXJjZSB2aXNpYmlsaXR5XG5cdGNvbnN0IHRvZ2dsZVJlc291cmNlVmlzaWJpbGl0eSA9IHVzZUNhbGxiYWNrKFxuXHRcdChyZXNvdXJjZUlkOiBzdHJpbmcgfCBudW1iZXIpID0+IHtcblx0XHRcdHNldFZpc2libGVSZXNvdXJjZXMoKHByZXYpID0+IHtcblx0XHRcdFx0Y29uc3QgbmV3U2V0ID0gbmV3IFNldChwcmV2KVxuXHRcdFx0XHRpZiAobmV3U2V0LmhhcyhyZXNvdXJjZUlkKSkge1xuXHRcdFx0XHRcdG5ld1NldC5kZWxldGUocmVzb3VyY2VJZClcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRuZXdTZXQuYWRkKHJlc291cmNlSWQpXG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIG5ld1NldFxuXHRcdFx0fSlcblx0XHR9LFxuXHRcdFtdXG5cdClcblxuXHRjb25zdCBzaG93UmVzb3VyY2UgPSB1c2VDYWxsYmFjaygocmVzb3VyY2VJZDogc3RyaW5nIHwgbnVtYmVyKSA9PiB7XG5cdFx0c2V0VmlzaWJsZVJlc291cmNlcygocHJldikgPT4gbmV3IFNldChwcmV2KS5hZGQocmVzb3VyY2VJZCkpXG5cdH0sIFtdKVxuXG5cdGNvbnN0IGhpZGVSZXNvdXJjZSA9IHVzZUNhbGxiYWNrKChyZXNvdXJjZUlkOiBzdHJpbmcgfCBudW1iZXIpID0+IHtcblx0XHRzZXRWaXNpYmxlUmVzb3VyY2VzKChwcmV2KSA9PiB7XG5cdFx0XHRjb25zdCBuZXdTZXQgPSBuZXcgU2V0KHByZXYpXG5cdFx0XHRuZXdTZXQuZGVsZXRlKHJlc291cmNlSWQpXG5cdFx0XHRyZXR1cm4gbmV3U2V0XG5cdFx0fSlcblx0fSwgW10pXG5cblx0Y29uc3Qgc2hvd0FsbFJlc291cmNlcyA9IHVzZUNhbGxiYWNrKCgpID0+IHtcblx0XHRzZXRWaXNpYmxlUmVzb3VyY2VzKG5ldyBTZXQoY3VycmVudFJlc291cmNlcy5tYXAoKHIpID0+IHIuaWQpKSlcblx0fSwgW2N1cnJlbnRSZXNvdXJjZXNdKVxuXG5cdGNvbnN0IGhpZGVBbGxSZXNvdXJjZXMgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG5cdFx0c2V0VmlzaWJsZVJlc291cmNlcyhuZXcgU2V0KCkpXG5cdH0sIFtdKVxuXG5cdC8vIEV2ZW50IHV0aWxpdGllc1xuXHRjb25zdCBnZXRFdmVudHNGb3JSZXNvdXJjZSA9IHVzZUNhbGxiYWNrKFxuXHRcdChyZXNvdXJjZUlkOiBzdHJpbmcgfCBudW1iZXIpOiBDYWxlbmRhckV2ZW50W10gPT4ge1xuXHRcdFx0cmV0dXJuIGNhbGVuZGFyRW5naW5lLmV2ZW50cy5maWx0ZXIoKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB7XG5cdFx0XHRcdGlmIChldmVudC5yZXNvdXJjZUlkcykge1xuXHRcdFx0XHRcdHJldHVybiBldmVudC5yZXNvdXJjZUlkcy5pbmNsdWRlcyhyZXNvdXJjZUlkKVxuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBldmVudC5yZXNvdXJjZUlkID09PSByZXNvdXJjZUlkXG5cdFx0XHR9KVxuXHRcdH0sXG5cdFx0W2NhbGVuZGFyRW5naW5lLmV2ZW50c11cblx0KVxuXG5cdGNvbnN0IGdldEV2ZW50c0ZvclJlc291cmNlcyA9IHVzZUNhbGxiYWNrKFxuXHRcdChyZXNvdXJjZUlkczogKHN0cmluZyB8IG51bWJlcilbXSk6IENhbGVuZGFyRXZlbnRbXSA9PiB7XG5cdFx0XHRyZXR1cm4gY2FsZW5kYXJFbmdpbmUuZXZlbnRzLmZpbHRlcigoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHtcblx0XHRcdFx0Y29uc3QgZXZlbnRSZXNvdXJjZUlkcyA9IGdldEV2ZW50UmVzb3VyY2VJZHMoZXZlbnQpXG5cdFx0XHRcdHJldHVybiBldmVudFJlc291cmNlSWRzLnNvbWUoKGlkKSA9PiByZXNvdXJjZUlkcy5pbmNsdWRlcyhpZCkpXG5cdFx0XHR9KVxuXHRcdH0sXG5cdFx0W2NhbGVuZGFyRW5naW5lLmV2ZW50c11cblx0KVxuXG5cdGNvbnN0IGdldFJlc291cmNlQnlJZCA9IHVzZUNhbGxiYWNrKFxuXHRcdChyZXNvdXJjZUlkOiBzdHJpbmcgfCBudW1iZXIpOiBSZXNvdXJjZSB8IHVuZGVmaW5lZCA9PiB7XG5cdFx0XHRyZXR1cm4gY3VycmVudFJlc291cmNlcy5maW5kKChyZXNvdXJjZSkgPT4gcmVzb3VyY2UuaWQgPT09IHJlc291cmNlSWQpXG5cdFx0fSxcblx0XHRbY3VycmVudFJlc291cmNlc11cblx0KVxuXG5cdGNvbnN0IGdldFZpc2libGVSZXNvdXJjZXMgPSB1c2VDYWxsYmFjaygoKTogUmVzb3VyY2VbXSA9PiB7XG5cdFx0cmV0dXJuIGN1cnJlbnRSZXNvdXJjZXMuZmlsdGVyKChyZXNvdXJjZSkgPT5cblx0XHRcdHZpc2libGVSZXNvdXJjZXMuaGFzKHJlc291cmNlLmlkKVxuXHRcdClcblx0fSwgW2N1cnJlbnRSZXNvdXJjZXMsIHZpc2libGVSZXNvdXJjZXNdKVxuXG5cdC8vIENyb3NzLXJlc291cmNlIGV2ZW50IHV0aWxpdGllc1xuXHRjb25zdCBpc0V2ZW50Q3Jvc3NSZXNvdXJjZSA9IHVzZUNhbGxiYWNrKChldmVudDogQ2FsZW5kYXJFdmVudCk6IGJvb2xlYW4gPT4ge1xuXHRcdHJldHVybiBCb29sZWFuKGV2ZW50LnJlc291cmNlSWRzICYmIGV2ZW50LnJlc291cmNlSWRzLmxlbmd0aCA+IDEpXG5cdH0sIFtdKVxuXG5cdC8vIEN1c3RvbSBoYW5kbGVyc1xuXHRjb25zdCBlZGl0RXZlbnQgPSB1c2VDYWxsYmFjayhcblx0XHQoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHtcblx0XHRcdGNhbGVuZGFyRW5naW5lLnNldFNlbGVjdGVkRXZlbnQoZXZlbnQpXG5cdFx0XHRjYWxlbmRhckVuZ2luZS5zZXRJc0V2ZW50Rm9ybU9wZW4odHJ1ZSlcblx0XHR9LFxuXHRcdFtjYWxlbmRhckVuZ2luZV1cblx0KVxuXG5cdGNvbnN0IGhhbmRsZUV2ZW50Q2xpY2sgPSB1c2VDYWxsYmFjayhcblx0XHQoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHtcblx0XHRcdGlmIChkaXNhYmxlRXZlbnRDbGljaykge1xuXHRcdFx0XHRyZXR1cm5cblx0XHRcdH1cblx0XHRcdGlmIChvbkV2ZW50Q2xpY2spIHtcblx0XHRcdFx0b25FdmVudENsaWNrKGV2ZW50KVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZWRpdEV2ZW50KGV2ZW50KVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0W2Rpc2FibGVFdmVudENsaWNrLCBvbkV2ZW50Q2xpY2ssIGVkaXRFdmVudF1cblx0KVxuXG5cdGNvbnN0IGhhbmRsZURhdGVDbGljayA9IHVzZUNhbGxiYWNrKFxuXHRcdChpbmZvOiBDZWxsQ2xpY2tJbmZvKSA9PiB7XG5cdFx0XHRpZiAoZGlzYWJsZUNlbGxDbGljaykge1xuXHRcdFx0XHRyZXR1cm5cblx0XHRcdH1cblxuXHRcdFx0aWYgKG9uQ2VsbENsaWNrKSB7XG5cdFx0XHRcdG9uQ2VsbENsaWNrKGluZm8pXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBuZXdFdmVudDogQ2FsZW5kYXJFdmVudCA9IHtcblx0XHRcdFx0XHR0aXRsZTogY2FsZW5kYXJFbmdpbmUudCgnbmV3RXZlbnQnKSxcblx0XHRcdFx0XHRzdGFydDogaW5mby5zdGFydCxcblx0XHRcdFx0XHRlbmQ6IGluZm8uZW5kLFxuXHRcdFx0XHRcdGRlc2NyaXB0aW9uOiAnJyxcblx0XHRcdFx0XHRhbGxEYXk6IGZhbHNlLFxuXHRcdFx0XHR9IGFzIENhbGVuZGFyRXZlbnRcblxuXHRcdFx0XHRpZiAoaW5mby5yZXNvdXJjZUlkICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRuZXdFdmVudC5yZXNvdXJjZUlkID0gaW5mby5yZXNvdXJjZUlkXG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjYWxlbmRhckVuZ2luZS5zZXRTZWxlY3RlZEV2ZW50KG5ld0V2ZW50KVxuXHRcdFx0XHRjYWxlbmRhckVuZ2luZS5zZXRTZWxlY3RlZERhdGUoaW5mby5zdGFydClcblx0XHRcdFx0Y2FsZW5kYXJFbmdpbmUuc2V0SXNFdmVudEZvcm1PcGVuKHRydWUpXG5cdFx0XHR9XG5cdFx0fSxcblx0XHRbb25DZWxsQ2xpY2ssIGRpc2FibGVDZWxsQ2xpY2ssIGNhbGVuZGFyRW5naW5lXVxuXHQpXG5cblx0Ly8gQ3JlYXRlIHRoZSBjb250ZXh0IHZhbHVlXG5cdGNvbnN0IGNvbnRleHRWYWx1ZSA9IHVzZU1lbW8oXG5cdFx0KCkgPT4gKHtcblx0XHRcdC4uLmNhbGVuZGFyRW5naW5lLFxuXHRcdFx0dmlldzogY2FsZW5kYXJFbmdpbmUudmlldyxcblx0XHRcdHNldFZpZXc6IGNhbGVuZGFyRW5naW5lLnNldFZpZXcsXG5cdFx0XHRldmVudHM6IGNhbGVuZGFyRW5naW5lLmV2ZW50cyxcblx0XHRcdHJhd0V2ZW50czogY2FsZW5kYXJFbmdpbmUucmF3RXZlbnRzLFxuXG5cdFx0XHQvLyBSZXNvdXJjZS1zcGVjaWZpYyBzdGF0ZVxuXHRcdFx0cmVzb3VyY2VzOiBjdXJyZW50UmVzb3VyY2VzLFxuXHRcdFx0dmlzaWJsZVJlc291cmNlcyxcblx0XHRcdHRvZ2dsZVJlc291cmNlVmlzaWJpbGl0eSxcblx0XHRcdHNob3dSZXNvdXJjZSxcblx0XHRcdGhpZGVSZXNvdXJjZSxcblx0XHRcdHNob3dBbGxSZXNvdXJjZXMsXG5cdFx0XHRoaWRlQWxsUmVzb3VyY2VzLFxuXG5cdFx0XHQvLyBSZXNvdXJjZSB1dGlsaXRpZXNcblx0XHRcdGdldEV2ZW50c0ZvclJlc291cmNlLFxuXHRcdFx0Z2V0RXZlbnRzRm9yUmVzb3VyY2VzLFxuXHRcdFx0Z2V0UmVzb3VyY2VCeUlkLFxuXHRcdFx0Z2V0VmlzaWJsZVJlc291cmNlcyxcblxuXHRcdFx0Ly8gQ3Jvc3MtcmVzb3VyY2UgZXZlbnQgdXRpbGl0aWVzXG5cdFx0XHRpc0V2ZW50Q3Jvc3NSZXNvdXJjZSxcblx0XHRcdGdldEV2ZW50UmVzb3VyY2VJZHMsXG5cblx0XHRcdC8vIE92ZXJyaWRlIGhhbmRsZXJzXG5cdFx0XHRvbkV2ZW50Q2xpY2s6IGhhbmRsZUV2ZW50Q2xpY2ssXG5cdFx0XHRvbkNlbGxDbGljazogaGFuZGxlRGF0ZUNsaWNrLFxuXG5cdFx0XHQvLyBQYXNzIHRocm91Z2ggaGVhZGVyIHByb3BzXG5cdFx0XHRoZWFkZXJDb21wb25lbnQsXG5cdFx0XHRoZWFkZXJDbGFzc05hbWUsXG5cblx0XHRcdC8vIFBhc3MgdGhyb3VnaCBvdGhlciBwcm9wc1xuXHRcdFx0cmVuZGVyRXZlbnQsXG5cdFx0XHRyZW5kZXJSZXNvdXJjZSxcblx0XHRcdHJlbmRlckV2ZW50Rm9ybSxcblx0XHRcdGxvY2FsZSxcblx0XHRcdHRpbWV6b25lLFxuXHRcdFx0ZGlzYWJsZUNlbGxDbGljayxcblx0XHRcdGRpc2FibGVFdmVudENsaWNrLFxuXHRcdFx0ZGlzYWJsZURyYWdBbmREcm9wLFxuXHRcdFx0ZGF5TWF4RXZlbnRzLFxuXHRcdFx0ZXZlbnRTcGFjaW5nLFxuXHRcdFx0c3RpY2t5Vmlld0hlYWRlcixcblx0XHRcdHZpZXdIZWFkZXJDbGFzc05hbWUsXG5cdFx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdFx0dGltZUZvcm1hdCxcblx0XHRcdGNsYXNzZXNPdmVycmlkZSxcblx0XHRcdG9yaWVudGF0aW9uLFxuXHRcdFx0cmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3IsXG5cdFx0XHRoaWRlTm9uQnVzaW5lc3NIb3Vycyxcblx0XHR9KSxcblx0XHRbXG5cdFx0XHRjYWxlbmRhckVuZ2luZSxcblx0XHRcdGN1cnJlbnRSZXNvdXJjZXMsXG5cdFx0XHR2aXNpYmxlUmVzb3VyY2VzLFxuXHRcdFx0dG9nZ2xlUmVzb3VyY2VWaXNpYmlsaXR5LFxuXHRcdFx0c2hvd1Jlc291cmNlLFxuXHRcdFx0aGlkZVJlc291cmNlLFxuXHRcdFx0c2hvd0FsbFJlc291cmNlcyxcblx0XHRcdGhpZGVBbGxSZXNvdXJjZXMsXG5cdFx0XHRnZXRFdmVudHNGb3JSZXNvdXJjZSxcblx0XHRcdGdldEV2ZW50c0ZvclJlc291cmNlcyxcblx0XHRcdGdldFJlc291cmNlQnlJZCxcblx0XHRcdGdldFZpc2libGVSZXNvdXJjZXMsXG5cdFx0XHRpc0V2ZW50Q3Jvc3NSZXNvdXJjZSxcblx0XHRcdGhhbmRsZUV2ZW50Q2xpY2ssXG5cdFx0XHRoYW5kbGVEYXRlQ2xpY2ssXG5cdFx0XHRyZW5kZXJFdmVudCxcblx0XHRcdHJlbmRlclJlc291cmNlLFxuXHRcdFx0cmVuZGVyRXZlbnRGb3JtLFxuXHRcdFx0bG9jYWxlLFxuXHRcdFx0dGltZXpvbmUsXG5cdFx0XHRkaXNhYmxlQ2VsbENsaWNrLFxuXHRcdFx0ZGlzYWJsZUV2ZW50Q2xpY2ssXG5cdFx0XHRkaXNhYmxlRHJhZ0FuZERyb3AsXG5cdFx0XHRkYXlNYXhFdmVudHMsXG5cdFx0XHRldmVudFNwYWNpbmcsXG5cdFx0XHRzdGlja3lWaWV3SGVhZGVyLFxuXHRcdFx0dmlld0hlYWRlckNsYXNzTmFtZSxcblx0XHRcdGhlYWRlckNvbXBvbmVudCxcblx0XHRcdGhlYWRlckNsYXNzTmFtZSxcblx0XHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0XHR0aW1lRm9ybWF0LFxuXHRcdFx0Y2xhc3Nlc092ZXJyaWRlLFxuXHRcdFx0b3JpZW50YXRpb24sXG5cdFx0XHRyZW5kZXJDdXJyZW50VGltZUluZGljYXRvcixcblx0XHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzLFxuXHRcdF1cblx0KVxuXG5cdHJldHVybiAoXG5cdFx0PFJlc291cmNlQ2FsZW5kYXJDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXtjb250ZXh0VmFsdWV9PlxuXHRcdFx0e2NoaWxkcmVufVxuXHRcdDwvUmVzb3VyY2VDYWxlbmRhckNvbnRleHQuUHJvdmlkZXI+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgQnVzaW5lc3NIb3VycywgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB0eXBlIHsgUmVjdXJyZW5jZUVkaXRPcHRpb25zIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL3R5cGVzJ1xuaW1wb3J0IHtcblx0ZGVsZXRlUmVjdXJyaW5nRXZlbnQgYXMgZGVsZXRlUmVjdXJyaW5nRXZlbnRJbXBsLFxuXHRnZW5lcmF0ZVJlY3VycmluZ0V2ZW50cyxcblx0dXBkYXRlUmVjdXJyaW5nRXZlbnQgYXMgdXBkYXRlUmVjdXJyaW5nRXZlbnRJbXBsLFxufSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvdXRpbHMvcmVjdXJyZW5jZS1oYW5kbGVyJ1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgZGVmYXVsdFRyYW5zbGF0aW9ucyB9IGZyb20gJ0AvbGliL3RyYW5zbGF0aW9ucy9kZWZhdWx0J1xuaW1wb3J0IHR5cGUgeyBUcmFuc2xhdGlvbnMsIFRyYW5zbGF0b3JGdW5jdGlvbiB9IGZyb20gJ0AvbGliL3RyYW5zbGF0aW9ucy90eXBlcydcbmltcG9ydCB7IGdldE1vbnRoV2Vla3MsIGdldFdlZWtEYXlzIH0gZnJvbSAnQC9saWIvdXRpbHMvZGF0ZS11dGlscydcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJWaWV3IH0gZnJvbSAnQC90eXBlcydcbmltcG9ydCB7IERBWV9NQVhfRVZFTlRTX0RFRkFVTFQgfSBmcm9tICcuLi9saWIvY29uc3RhbnRzJ1xuXG5leHBvcnQgaW50ZXJmYWNlIENhbGVuZGFyRW5naW5lQ29uZmlnIHtcblx0ZXZlbnRzOiBDYWxlbmRhckV2ZW50W11cblx0Zmlyc3REYXlPZldlZWs6IG51bWJlclxuXHRpbml0aWFsVmlldz86IENhbGVuZGFyVmlld1xuXHRpbml0aWFsRGF0ZT86IGRheWpzLkRheWpzXG5cdGJ1c2luZXNzSG91cnM/OiBCdXNpbmVzc0hvdXJzIHwgQnVzaW5lc3NIb3Vyc1tdXG5cdG9uRXZlbnRBZGQ/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0b25FdmVudFVwZGF0ZT86IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuXHRvbkV2ZW50RGVsZXRlPzogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG5cdG9uRGF0ZUNoYW5nZT86IChkYXRlOiBkYXlqcy5EYXlqcykgPT4gdm9pZFxuXHRvblZpZXdDaGFuZ2U/OiAodmlldzogQ2FsZW5kYXJWaWV3KSA9PiB2b2lkXG5cdGxvY2FsZT86IHN0cmluZ1xuXHR0aW1lem9uZT86IHN0cmluZ1xuXHR0cmFuc2xhdGlvbnM/OiBUcmFuc2xhdGlvbnNcblx0dHJhbnNsYXRvcj86IFRyYW5zbGF0b3JGdW5jdGlvblxufVxuXG5leHBvcnQgaW50ZXJmYWNlIENhbGVuZGFyRW5naW5lUmV0dXJuIHtcblx0Y3VycmVudERhdGU6IGRheWpzLkRheWpzXG5cdHZpZXc6IENhbGVuZGFyVmlld1xuXHRldmVudHM6IENhbGVuZGFyRXZlbnRbXVxuXHRyYXdFdmVudHM6IENhbGVuZGFyRXZlbnRbXVxuXHRpc0V2ZW50Rm9ybU9wZW46IGJvb2xlYW5cblx0c2VsZWN0ZWRFdmVudDogQ2FsZW5kYXJFdmVudCB8IG51bGxcblx0c2VsZWN0ZWREYXRlOiBkYXlqcy5EYXlqcyB8IG51bGxcblx0Zmlyc3REYXlPZldlZWs6IG51bWJlclxuXHRkYXlNYXhFdmVudHM6IG51bWJlclxuXHRjdXJyZW50TG9jYWxlOiBzdHJpbmdcblx0YnVzaW5lc3NIb3Vycz86IEJ1c2luZXNzSG91cnMgfCBCdXNpbmVzc0hvdXJzW11cblx0c2V0Q3VycmVudERhdGU6IChkYXRlOiBkYXlqcy5EYXlqcykgPT4gdm9pZFxuXHRzZWxlY3REYXRlOiAoZGF0ZTogZGF5anMuRGF5anMpID0+IHZvaWRcblx0c2V0VmlldzogKHZpZXc6IENhbGVuZGFyVmlldykgPT4gdm9pZFxuXHRuZXh0UGVyaW9kOiAoKSA9PiB2b2lkXG5cdHByZXZQZXJpb2Q6ICgpID0+IHZvaWRcblx0dG9kYXk6ICgpID0+IHZvaWRcblx0YWRkRXZlbnQ6IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuXHR1cGRhdGVFdmVudDogKGV2ZW50SWQ6IHN0cmluZyB8IG51bWJlciwgZXZlbnQ6IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD4pID0+IHZvaWRcblx0dXBkYXRlUmVjdXJyaW5nRXZlbnQ6IChcblx0XHRldmVudDogQ2FsZW5kYXJFdmVudCxcblx0XHR1cGRhdGVzOiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+LFxuXHRcdG9wdGlvbnM6IFJlY3VycmVuY2VFZGl0T3B0aW9uc1xuXHQpID0+IHZvaWRcblx0ZGVsZXRlRXZlbnQ6IChldmVudElkOiBzdHJpbmcgfCBudW1iZXIpID0+IHZvaWRcblx0ZGVsZXRlUmVjdXJyaW5nRXZlbnQ6IChcblx0XHRldmVudDogQ2FsZW5kYXJFdmVudCxcblx0XHRvcHRpb25zOiBSZWN1cnJlbmNlRWRpdE9wdGlvbnNcblx0KSA9PiB2b2lkXG5cdG9wZW5FdmVudEZvcm06IChldmVudERhdGE/OiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+KSA9PiB2b2lkXG5cdGNsb3NlRXZlbnRGb3JtOiAoKSA9PiB2b2lkXG5cdHNldFNlbGVjdGVkRXZlbnQ6IFJlYWN0LkRpc3BhdGNoPFJlYWN0LlNldFN0YXRlQWN0aW9uPENhbGVuZGFyRXZlbnQgfCBudWxsPj5cblx0c2V0SXNFdmVudEZvcm1PcGVuOiBSZWFjdC5EaXNwYXRjaDxSZWFjdC5TZXRTdGF0ZUFjdGlvbjxib29sZWFuPj5cblx0c2V0U2VsZWN0ZWREYXRlOiBSZWFjdC5EaXNwYXRjaDxSZWFjdC5TZXRTdGF0ZUFjdGlvbjxkYXlqcy5EYXlqcyB8IG51bGw+PlxuXHRnZXRFdmVudHNGb3JEYXRlUmFuZ2U6IChcblx0XHRzdGFydERhdGU6IGRheWpzLkRheWpzLFxuXHRcdGVuZERhdGU6IGRheWpzLkRheWpzXG5cdCkgPT4gQ2FsZW5kYXJFdmVudFtdXG5cdGZpbmRQYXJlbnRSZWN1cnJpbmdFdmVudDogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiBDYWxlbmRhckV2ZW50IHwgbnVsbFxuXHR0OiAoa2V5OiBrZXlvZiBUcmFuc2xhdGlvbnMpID0+IHN0cmluZ1xufVxuXG5jb25zdCBWSUVXX1VOSVRTOiBSZWNvcmQ8Q2FsZW5kYXJWaWV3LCBkYXlqcy5NYW5pcHVsYXRlVHlwZT4gPSB7XG5cdGRheTogJ2RheScsXG5cdHdlZWs6ICd3ZWVrJyxcblx0bW9udGg6ICdtb250aCcsXG5cdHllYXI6ICd5ZWFyJyxcbn1cblxuZXhwb3J0IGNvbnN0IHVzZUNhbGVuZGFyRW5naW5lID0gKFxuXHRjb25maWc6IENhbGVuZGFyRW5naW5lQ29uZmlnXG4pOiBDYWxlbmRhckVuZ2luZVJldHVybiA9PiB7XG5cdGNvbnN0IHtcblx0XHRldmVudHMgPSBbXSxcblx0XHRmaXJzdERheU9mV2VlayA9IDAsXG5cdFx0aW5pdGlhbFZpZXcgPSAnbW9udGgnLFxuXHRcdGluaXRpYWxEYXRlID0gZGF5anMoKSxcblx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdG9uRXZlbnRBZGQsXG5cdFx0b25FdmVudFVwZGF0ZSxcblx0XHRvbkV2ZW50RGVsZXRlLFxuXHRcdG9uRGF0ZUNoYW5nZSxcblx0XHRvblZpZXdDaGFuZ2UsXG5cdFx0bG9jYWxlLFxuXHRcdHRpbWV6b25lLFxuXHRcdHRyYW5zbGF0aW9ucyxcblx0XHR0cmFuc2xhdG9yLFxuXHR9ID0gY29uZmlnXG5cblx0Y29uc3QgW2N1cnJlbnREYXRlLCBzZXRDdXJyZW50RGF0ZV0gPSB1c2VTdGF0ZTxkYXlqcy5EYXlqcz4oaW5pdGlhbERhdGUpXG5cdGNvbnN0IFt2aWV3LCBzZXRWaWV3XSA9IHVzZVN0YXRlPENhbGVuZGFyVmlldz4oaW5pdGlhbFZpZXcpXG5cdGNvbnN0IFtjdXJyZW50RXZlbnRzLCBzZXRDdXJyZW50RXZlbnRzXSA9IHVzZVN0YXRlPENhbGVuZGFyRXZlbnRbXT4oZXZlbnRzKVxuXHRjb25zdCBbaXNFdmVudEZvcm1PcGVuLCBzZXRJc0V2ZW50Rm9ybU9wZW5dID0gdXNlU3RhdGUoZmFsc2UpXG5cdGNvbnN0IFtzZWxlY3RlZEV2ZW50LCBzZXRTZWxlY3RlZEV2ZW50XSA9IHVzZVN0YXRlPENhbGVuZGFyRXZlbnQgfCBudWxsPihudWxsKVxuXHRjb25zdCBbc2VsZWN0ZWREYXRlLCBzZXRTZWxlY3RlZERhdGVdID0gdXNlU3RhdGU8ZGF5anMuRGF5anMgfCBudWxsPihudWxsKVxuXHRjb25zdCBbY3VycmVudExvY2FsZSwgc2V0Q3VycmVudExvY2FsZV0gPSB1c2VTdGF0ZShsb2NhbGUgfHwgJ2VuJylcblxuXHRjb25zdCB0ID0gdXNlTWVtbygoKSA9PiB7XG5cdFx0aWYgKHRyYW5zbGF0b3IpIHtcblx0XHRcdHJldHVybiB0cmFuc2xhdG9yXG5cdFx0fVxuXHRcdGlmICh0cmFuc2xhdGlvbnMpIHtcblx0XHRcdHJldHVybiAoa2V5OiBrZXlvZiBUcmFuc2xhdGlvbnMpID0+IHRyYW5zbGF0aW9uc1trZXldIHx8IGtleVxuXHRcdH1cblx0XHRyZXR1cm4gKGtleToga2V5b2YgVHJhbnNsYXRpb25zKSA9PiBkZWZhdWx0VHJhbnNsYXRpb25zW2tleV0gfHwga2V5XG5cdH0sIFt0cmFuc2xhdGlvbnMsIHRyYW5zbGF0b3JdKVxuXG5cdGNvbnN0IGdldEV2ZW50c0ZvckRhdGVSYW5nZSA9IHVzZUNhbGxiYWNrKFxuXHRcdChzdGFydERhdGU6IGRheWpzLkRheWpzLCBlbmREYXRlOiBkYXlqcy5EYXlqcyk6IENhbGVuZGFyRXZlbnRbXSA9PiB7XG5cdFx0XHRjb25zdCBhbGxFdmVudHM6IENhbGVuZGFyRXZlbnRbXSA9IFtdXG5cblx0XHRcdGZvciAoY29uc3QgZXZlbnQgb2YgY3VycmVudEV2ZW50cykge1xuXHRcdFx0XHRpZiAoZXZlbnQucnJ1bGUpIHtcblx0XHRcdFx0XHRhbGxFdmVudHMucHVzaChcblx0XHRcdFx0XHRcdC4uLmdlbmVyYXRlUmVjdXJyaW5nRXZlbnRzKHtcblx0XHRcdFx0XHRcdFx0ZXZlbnQsXG5cdFx0XHRcdFx0XHRcdGN1cnJlbnRFdmVudHMsXG5cdFx0XHRcdFx0XHRcdHN0YXJ0RGF0ZSxcblx0XHRcdFx0XHRcdFx0ZW5kRGF0ZSxcblx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNvbnN0IHN0YXJ0c0luUmFuZ2UgPVxuXHRcdFx0XHRcdFx0ZXZlbnQuc3RhcnQuaXNTYW1lT3JBZnRlcihzdGFydERhdGUpICYmXG5cdFx0XHRcdFx0XHRldmVudC5zdGFydC5pc1NhbWVPckJlZm9yZShlbmREYXRlKVxuXHRcdFx0XHRcdGNvbnN0IGVuZHNJblJhbmdlID1cblx0XHRcdFx0XHRcdGV2ZW50LmVuZC5pc1NhbWVPckFmdGVyKHN0YXJ0RGF0ZSkgJiZcblx0XHRcdFx0XHRcdGV2ZW50LmVuZC5pc1NhbWVPckJlZm9yZShlbmREYXRlKVxuXHRcdFx0XHRcdGNvbnN0IHNwYW5zUmFuZ2UgPVxuXHRcdFx0XHRcdFx0ZXZlbnQuc3RhcnQuaXNCZWZvcmUoc3RhcnREYXRlKSAmJiBldmVudC5lbmQuaXNBZnRlcihlbmREYXRlKVxuXHRcdFx0XHRcdGlmIChzdGFydHNJblJhbmdlIHx8IGVuZHNJblJhbmdlIHx8IHNwYW5zUmFuZ2UpIHtcblx0XHRcdFx0XHRcdGFsbEV2ZW50cy5wdXNoKGV2ZW50KVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGFsbEV2ZW50c1xuXHRcdH0sXG5cdFx0W2N1cnJlbnRFdmVudHNdXG5cdClcblxuXHRjb25zdCBnZXRDdXJyZW50Vmlld1JhbmdlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuXHRcdGlmICh2aWV3ID09PSAnZGF5Jykge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0c3RhcnQ6IGN1cnJlbnREYXRlLnN0YXJ0T2YoJ2RheScpLFxuXHRcdFx0XHRlbmQ6IGN1cnJlbnREYXRlLmVuZE9mKCdkYXknKSxcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKHZpZXcgPT09ICd5ZWFyJykge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0c3RhcnQ6IGN1cnJlbnREYXRlLnN0YXJ0T2YoJ3llYXInKSxcblx0XHRcdFx0ZW5kOiBjdXJyZW50RGF0ZS5lbmRPZigneWVhcicpLFxuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAodmlldyA9PT0gJ3dlZWsnKSB7XG5cdFx0XHRjb25zdCB3ZWVrRGF5cyA9IGdldFdlZWtEYXlzKGN1cnJlbnREYXRlLCBmaXJzdERheU9mV2Vlaylcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHN0YXJ0OiB3ZWVrRGF5c1swXS5zdGFydE9mKCdkYXknKSxcblx0XHRcdFx0ZW5kOiB3ZWVrRGF5c1s2XS5lbmRPZignZGF5JyksXG5cdFx0XHR9XG5cdFx0fVxuXHRcdC8vIG1vbnRoIHZpZXdcblx0XHRjb25zdCB3ZWVrcyA9IGdldE1vbnRoV2Vla3MoY3VycmVudERhdGUsIGZpcnN0RGF5T2ZXZWVrKVxuXHRcdHJldHVybiB7IHN0YXJ0OiB3ZWVrc1swXVswXS5zdGFydE9mKCdkYXknKSwgZW5kOiB3ZWVrc1s1XVs2XS5lbmRPZignZGF5JykgfVxuXHR9LCBbY3VycmVudERhdGUsIHZpZXcsIGZpcnN0RGF5T2ZXZWVrXSlcblxuXHRjb25zdCBwcm9jZXNzZWRFdmVudHMgPSB1c2VNZW1vKCgpID0+IHtcblx0XHRjb25zdCB7IHN0YXJ0LCBlbmQgfSA9IGdldEN1cnJlbnRWaWV3UmFuZ2UoKVxuXHRcdHJldHVybiBnZXRFdmVudHNGb3JEYXRlUmFuZ2Uoc3RhcnQsIGVuZClcblx0fSwgW2dldEV2ZW50c0ZvckRhdGVSYW5nZSwgZ2V0Q3VycmVudFZpZXdSYW5nZV0pXG5cblx0dXNlRWZmZWN0KCgpID0+IHtcblx0XHRpZiAoZXZlbnRzKSB7XG5cdFx0XHRzZXRDdXJyZW50RXZlbnRzKGV2ZW50cylcblx0XHR9XG5cdH0sIFtldmVudHNdKVxuXHR1c2VFZmZlY3QoKCkgPT4ge1xuXHRcdGlmIChsb2NhbGUpIHtcblx0XHRcdHNldEN1cnJlbnRMb2NhbGUobG9jYWxlKVxuXHRcdFx0ZGF5anMubG9jYWxlKGxvY2FsZSlcblx0XHRcdHNldEN1cnJlbnREYXRlKChwcmV2RGF0ZSkgPT4gcHJldkRhdGUubG9jYWxlKGxvY2FsZSkpXG5cdFx0fVxuXHR9LCBbbG9jYWxlXSlcblx0dXNlRWZmZWN0KCgpID0+IHtcblx0XHRpZiAodGltZXpvbmUpIHtcblx0XHRcdGRheWpzLnR6LnNldERlZmF1bHQodGltZXpvbmUpXG5cdFx0fVxuXHR9LCBbdGltZXpvbmVdKVxuXG5cdGNvbnN0IHNlbGVjdERhdGUgPSB1c2VDYWxsYmFjayhcblx0XHQoZGF0ZTogZGF5anMuRGF5anMpID0+IHtcblx0XHRcdHNldEN1cnJlbnREYXRlKGRhdGUpXG5cdFx0XHRvbkRhdGVDaGFuZ2U/LihkYXRlKVxuXHRcdH0sXG5cdFx0W29uRGF0ZUNoYW5nZV1cblx0KVxuXG5cdGNvbnN0IG5hdmlnYXRlUGVyaW9kID0gdXNlQ2FsbGJhY2soXG5cdFx0KGRpcmVjdGlvbjogMSB8IC0xKSA9PiB7XG5cdFx0XHRzZXRDdXJyZW50RGF0ZSgocHJldikgPT4ge1xuXHRcdFx0XHRjb25zdCBuZXdEYXRlID1cblx0XHRcdFx0XHRkaXJlY3Rpb24gPT09IDFcblx0XHRcdFx0XHRcdD8gcHJldi5hZGQoMSwgVklFV19VTklUU1t2aWV3XSlcblx0XHRcdFx0XHRcdDogcHJldi5zdWJ0cmFjdCgxLCBWSUVXX1VOSVRTW3ZpZXddKVxuXHRcdFx0XHRvbkRhdGVDaGFuZ2U/LihuZXdEYXRlKVxuXHRcdFx0XHRyZXR1cm4gbmV3RGF0ZVxuXHRcdFx0fSlcblx0XHR9LFxuXHRcdFt2aWV3LCBvbkRhdGVDaGFuZ2VdXG5cdClcblxuXHRjb25zdCBuZXh0UGVyaW9kID0gdXNlQ2FsbGJhY2soKCkgPT4gbmF2aWdhdGVQZXJpb2QoMSksIFtuYXZpZ2F0ZVBlcmlvZF0pXG5cdGNvbnN0IHByZXZQZXJpb2QgPSB1c2VDYWxsYmFjaygoKSA9PiBuYXZpZ2F0ZVBlcmlvZCgtMSksIFtuYXZpZ2F0ZVBlcmlvZF0pXG5cblx0Y29uc3QgdG9kYXkgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG5cdFx0Y29uc3QgbmV3RGF0ZSA9IGRheWpzKClcblx0XHRzZXRDdXJyZW50RGF0ZShuZXdEYXRlKVxuXHRcdG9uRGF0ZUNoYW5nZT8uKG5ld0RhdGUpXG5cdH0sIFtvbkRhdGVDaGFuZ2VdKVxuXG5cdGNvbnN0IGFkZEV2ZW50ID0gdXNlQ2FsbGJhY2soXG5cdFx0KGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB7XG5cdFx0XHRzZXRDdXJyZW50RXZlbnRzKChwcmV2KSA9PiBbLi4ucHJldiwgZXZlbnRdKVxuXHRcdFx0b25FdmVudEFkZD8uKGV2ZW50KVxuXHRcdH0sXG5cdFx0W29uRXZlbnRBZGRdXG5cdClcblxuXHRjb25zdCB1cGRhdGVFdmVudCA9IHVzZUNhbGxiYWNrKFxuXHRcdChldmVudElkOiBzdHJpbmcgfCBudW1iZXIsIHVwZGF0ZXM6IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD4pID0+IHtcblx0XHRcdHNldEN1cnJlbnRFdmVudHMoKHByZXYpID0+XG5cdFx0XHRcdHByZXYubWFwKChldmVudCkgPT4ge1xuXHRcdFx0XHRcdGlmIChldmVudC5pZCAhPT0gZXZlbnRJZCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGV2ZW50XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNvbnN0IG5ld0V2ZW50ID0geyAuLi5ldmVudCwgLi4udXBkYXRlcyB9XG5cdFx0XHRcdFx0b25FdmVudFVwZGF0ZT8uKG5ld0V2ZW50KVxuXHRcdFx0XHRcdHJldHVybiBuZXdFdmVudFxuXHRcdFx0XHR9KVxuXHRcdFx0KVxuXHRcdH0sXG5cdFx0W29uRXZlbnRVcGRhdGVdXG5cdClcblxuXHRjb25zdCB1cGRhdGVSZWN1cnJpbmdFdmVudCA9IHVzZUNhbGxiYWNrKFxuXHRcdChcblx0XHRcdGV2ZW50OiBDYWxlbmRhckV2ZW50LFxuXHRcdFx0dXBkYXRlczogUGFydGlhbDxDYWxlbmRhckV2ZW50Pixcblx0XHRcdG9wdGlvbnM6IFJlY3VycmVuY2VFZGl0T3B0aW9uc1xuXHRcdCkgPT4ge1xuXHRcdFx0b25FdmVudFVwZGF0ZT8uKHsgLi4uZXZlbnQsIC4uLnVwZGF0ZXMgfSlcblx0XHRcdHNldEN1cnJlbnRFdmVudHMoXG5cdFx0XHRcdHVwZGF0ZVJlY3VycmluZ0V2ZW50SW1wbCh7XG5cdFx0XHRcdFx0dGFyZ2V0RXZlbnQ6IGV2ZW50LFxuXHRcdFx0XHRcdHVwZGF0ZXMsXG5cdFx0XHRcdFx0Y3VycmVudEV2ZW50cyxcblx0XHRcdFx0XHRzY29wZTogb3B0aW9ucy5zY29wZSxcblx0XHRcdFx0fSlcblx0XHRcdClcblx0XHR9LFxuXHRcdFtjdXJyZW50RXZlbnRzLCBvbkV2ZW50VXBkYXRlXVxuXHQpXG5cblx0Y29uc3QgZGVsZXRlUmVjdXJyaW5nRXZlbnQgPSB1c2VDYWxsYmFjayhcblx0XHQoZXZlbnQ6IENhbGVuZGFyRXZlbnQsIG9wdGlvbnM6IFJlY3VycmVuY2VFZGl0T3B0aW9ucykgPT4ge1xuXHRcdFx0b25FdmVudERlbGV0ZT8uKGV2ZW50KVxuXHRcdFx0c2V0Q3VycmVudEV2ZW50cyhcblx0XHRcdFx0ZGVsZXRlUmVjdXJyaW5nRXZlbnRJbXBsKHtcblx0XHRcdFx0XHR0YXJnZXRFdmVudDogZXZlbnQsXG5cdFx0XHRcdFx0Y3VycmVudEV2ZW50cyxcblx0XHRcdFx0XHRzY29wZTogb3B0aW9ucy5zY29wZSxcblx0XHRcdFx0fSlcblx0XHRcdClcblx0XHR9LFxuXHRcdFtjdXJyZW50RXZlbnRzLCBvbkV2ZW50RGVsZXRlXVxuXHQpXG5cblx0Y29uc3QgZGVsZXRlRXZlbnQgPSB1c2VDYWxsYmFjayhcblx0XHQoZXZlbnRJZDogc3RyaW5nIHwgbnVtYmVyKSA9PiB7XG5cdFx0XHRzZXRDdXJyZW50RXZlbnRzKChwcmV2KSA9PiB7XG5cdFx0XHRcdGNvbnN0IGV2ZW50VG9EZWxldGUgPSBwcmV2LmZpbmQoKGUpID0+IGUuaWQgPT09IGV2ZW50SWQpXG5cdFx0XHRcdGlmIChldmVudFRvRGVsZXRlKSB7XG5cdFx0XHRcdFx0b25FdmVudERlbGV0ZT8uKGV2ZW50VG9EZWxldGUpXG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHByZXYuZmlsdGVyKChlKSA9PiBlLmlkICE9PSBldmVudElkKVxuXHRcdFx0fSlcblx0XHR9LFxuXHRcdFtvbkV2ZW50RGVsZXRlXVxuXHQpXG5cblx0Y29uc3Qgb3BlbkV2ZW50Rm9ybSA9IHVzZUNhbGxiYWNrKFxuXHRcdChldmVudERhdGE/OiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+KSA9PiB7XG5cdFx0XHRpZiAoZXZlbnREYXRhPy5zdGFydCkge1xuXHRcdFx0XHRzZXRTZWxlY3RlZERhdGUoZXZlbnREYXRhLnN0YXJ0KVxuXHRcdFx0fVxuXHRcdFx0Y29uc3Qgc3RhcnQgPSBldmVudERhdGE/LnN0YXJ0ID8/IGN1cnJlbnREYXRlXG5cdFx0XHRzZXRTZWxlY3RlZEV2ZW50KHtcblx0XHRcdFx0dGl0bGU6IHQoJ25ld0V2ZW50JyksXG5cdFx0XHRcdHN0YXJ0LFxuXHRcdFx0XHRlbmQ6IGV2ZW50RGF0YT8uZW5kID8/IHN0YXJ0LmFkZCgxLCAnaG91cicpLFxuXHRcdFx0XHRyZXNvdXJjZUlkOiBldmVudERhdGE/LnJlc291cmNlSWQsXG5cdFx0XHRcdGRlc2NyaXB0aW9uOiAnJyxcblx0XHRcdFx0YWxsRGF5OiBldmVudERhdGE/LmFsbERheSA/PyBmYWxzZSxcblx0XHRcdH0gYXMgQ2FsZW5kYXJFdmVudClcblx0XHRcdHNldElzRXZlbnRGb3JtT3Blbih0cnVlKVxuXHRcdH0sXG5cdFx0W2N1cnJlbnREYXRlLCB0XVxuXHQpXG5cblx0Y29uc3QgY2xvc2VFdmVudEZvcm0gPSB1c2VDYWxsYmFjaygoKSA9PiB7XG5cdFx0c2V0U2VsZWN0ZWREYXRlKG51bGwpXG5cdFx0c2V0U2VsZWN0ZWRFdmVudChudWxsKVxuXHRcdHNldElzRXZlbnRGb3JtT3BlbihmYWxzZSlcblx0fSwgW10pXG5cblx0Y29uc3QgaGFuZGxlVmlld0NoYW5nZSA9IHVzZUNhbGxiYWNrKFxuXHRcdChuZXdWaWV3OiBDYWxlbmRhclZpZXcpID0+IHtcblx0XHRcdHNldFZpZXcobmV3Vmlldylcblx0XHRcdG9uVmlld0NoYW5nZT8uKG5ld1ZpZXcpXG5cdFx0fSxcblx0XHRbb25WaWV3Q2hhbmdlXVxuXHQpXG5cblx0Y29uc3QgZmluZFBhcmVudFJlY3VycmluZ0V2ZW50ID0gdXNlQ2FsbGJhY2soXG5cdFx0KGV2ZW50OiBDYWxlbmRhckV2ZW50KTogQ2FsZW5kYXJFdmVudCB8IG51bGwgPT4ge1xuXHRcdFx0Y29uc3QgdGFyZ2V0VUlEID0gZXZlbnQudWlkXG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRjdXJyZW50RXZlbnRzLmZpbmQoXG5cdFx0XHRcdFx0KGUpID0+IChlLnVpZCB8fCBgJHtlLmlkfUBpbGFteS5jYWxlbmRhcmApID09PSB0YXJnZXRVSUQgJiYgZS5ycnVsZVxuXHRcdFx0XHQpIHx8IG51bGxcblx0XHRcdClcblx0XHR9LFxuXHRcdFtjdXJyZW50RXZlbnRzXVxuXHQpXG5cblx0cmV0dXJuIHtcblx0XHRjdXJyZW50RGF0ZSxcblx0XHR2aWV3LFxuXHRcdGV2ZW50czogcHJvY2Vzc2VkRXZlbnRzLFxuXHRcdHJhd0V2ZW50czogY3VycmVudEV2ZW50cyxcblx0XHRpc0V2ZW50Rm9ybU9wZW4sXG5cdFx0c2VsZWN0ZWRFdmVudCxcblx0XHRzZWxlY3RlZERhdGUsXG5cdFx0Zmlyc3REYXlPZldlZWssXG5cdFx0ZGF5TWF4RXZlbnRzOiBEQVlfTUFYX0VWRU5UU19ERUZBVUxULFxuXHRcdGN1cnJlbnRMb2NhbGUsXG5cdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRzZXRDdXJyZW50RGF0ZSxcblx0XHRzZWxlY3REYXRlLFxuXHRcdHNldFZpZXc6IGhhbmRsZVZpZXdDaGFuZ2UsXG5cdFx0bmV4dFBlcmlvZCxcblx0XHRwcmV2UGVyaW9kLFxuXHRcdHRvZGF5LFxuXHRcdGFkZEV2ZW50LFxuXHRcdHVwZGF0ZUV2ZW50LFxuXHRcdHVwZGF0ZVJlY3VycmluZ0V2ZW50LFxuXHRcdGRlbGV0ZUV2ZW50LFxuXHRcdGRlbGV0ZVJlY3VycmluZ0V2ZW50LFxuXHRcdG9wZW5FdmVudEZvcm0sXG5cdFx0Y2xvc2VFdmVudEZvcm0sXG5cdFx0c2V0U2VsZWN0ZWRFdmVudCxcblx0XHRzZXRJc0V2ZW50Rm9ybU9wZW4sXG5cdFx0c2V0U2VsZWN0ZWREYXRlLFxuXHRcdGdldEV2ZW50c0ZvckRhdGVSYW5nZSxcblx0XHRmaW5kUGFyZW50UmVjdXJyaW5nRXZlbnQsXG5cdFx0dCxcblx0fVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSB7IFRyYW5zbGF0aW9ucyB9IGZyb20gJy4vdHlwZXMnXG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0VHJhbnNsYXRpb25zOiBUcmFuc2xhdGlvbnMgPSB7XG5cdC8vIENvbW1vbiBhY3Rpb25zXG5cdHRvZGF5OiAnVG9kYXknLFxuXHRjcmVhdGU6ICdDcmVhdGUnLFxuXHRuZXc6ICdOZXcnLFxuXHR1cGRhdGU6ICdVcGRhdGUnLFxuXHRkZWxldGU6ICdEZWxldGUnLFxuXHRjYW5jZWw6ICdDYW5jZWwnLFxuXHRleHBvcnQ6ICdFeHBvcnQnLFxuXG5cdC8vIEV2ZW50IHJlbGF0ZWRcblx0ZXZlbnQ6ICdFdmVudCcsXG5cdGV2ZW50czogJ0V2ZW50cycsXG5cdG5ld0V2ZW50OiAnTmV3IEV2ZW50Jyxcblx0dGl0bGU6ICdUaXRsZScsXG5cdGRlc2NyaXB0aW9uOiAnRGVzY3JpcHRpb24nLFxuXHRsb2NhdGlvbjogJ0xvY2F0aW9uJyxcblx0YWxsRGF5OiAnQWxsIGRheScsXG5cdHN0YXJ0RGF0ZTogJ1N0YXJ0IERhdGUnLFxuXHRlbmREYXRlOiAnRW5kIERhdGUnLFxuXHRzdGFydFRpbWU6ICdTdGFydCBUaW1lJyxcblx0ZW5kVGltZTogJ0VuZCBUaW1lJyxcblx0Y29sb3I6ICdDb2xvcicsXG5cblx0Ly8gRXZlbnQgZm9ybVxuXHRjcmVhdGVFdmVudDogJ0NyZWF0ZSBFdmVudCcsXG5cdGVkaXRFdmVudDogJ0VkaXQgRXZlbnQnLFxuXHRhZGROZXdFdmVudDogJ0FkZCBhIG5ldyBldmVudCB0byB5b3VyIGNhbGVuZGFyJyxcblx0ZWRpdEV2ZW50RGV0YWlsczogJ0VkaXQgeW91ciBldmVudCBkZXRhaWxzJyxcblx0ZXZlbnRUaXRsZVBsYWNlaG9sZGVyOiAnRXZlbnQgdGl0bGUnLFxuXHRldmVudERlc2NyaXB0aW9uUGxhY2Vob2xkZXI6ICdFdmVudCBkZXNjcmlwdGlvbiAob3B0aW9uYWwpJyxcblx0ZXZlbnRMb2NhdGlvblBsYWNlaG9sZGVyOiAnRXZlbnQgbG9jYXRpb24gKG9wdGlvbmFsKScsXG5cblx0Ly8gUmVjdXJyZW5jZVxuXHRyZXBlYXQ6ICdSZXBlYXQnLFxuXHRyZXBlYXRzOiAnUmVwZWF0cycsXG5cdGN1c3RvbVJlY3VycmVuY2U6ICdDdXN0b20gcmVjdXJyZW5jZScsXG5cdGRhaWx5OiAnRGFpbHknLFxuXHR3ZWVrbHk6ICdXZWVrbHknLFxuXHRtb250aGx5OiAnTW9udGhseScsXG5cdHllYXJseTogJ1llYXJseScsXG5cdGludGVydmFsOiAnSW50ZXJ2YWwnLFxuXHRyZXBlYXRPbjogJ1JlcGVhdCBvbicsXG5cdG5ldmVyOiAnTmV2ZXInLFxuXHRjb3VudDogJ0NvdW50Jyxcblx0ZXZlcnk6ICdFdmVyeScsXG5cdGVuZHM6ICdFbmRzJyxcblx0YWZ0ZXI6ICdBZnRlcicsXG5cdG9jY3VycmVuY2VzOiAnb2NjdXJyZW5jZXMnLFxuXHRvbjogJ09uJyxcblxuXHQvLyBSZWN1cnJlbmNlIGVkaXQgZGlhbG9nXG5cdGVkaXRSZWN1cnJpbmdFdmVudDogJ0VkaXQgcmVjdXJyaW5nIGV2ZW50Jyxcblx0ZGVsZXRlUmVjdXJyaW5nRXZlbnQ6ICdEZWxldGUgcmVjdXJyaW5nIGV2ZW50Jyxcblx0ZWRpdFJlY3VycmluZ0V2ZW50UXVlc3Rpb246XG5cdFx0J2lzIGEgcmVjdXJyaW5nIGV2ZW50LiBIb3cgd291bGQgeW91IGxpa2UgdG8gZWRpdCBpdD8nLFxuXHRkZWxldGVSZWN1cnJpbmdFdmVudFF1ZXN0aW9uOlxuXHRcdCdpcyBhIHJlY3VycmluZyBldmVudC4gSG93IHdvdWxkIHlvdSBsaWtlIHRvIGRlbGV0ZSBpdD8nLFxuXHR0aGlzRXZlbnQ6ICdUaGlzIGV2ZW50Jyxcblx0dGhpc0V2ZW50RGVzY3JpcHRpb246ICdPbmx5IGNoYW5nZSB0aGlzIHNwZWNpZmljIG9jY3VycmVuY2UnLFxuXHR0aGlzQW5kRm9sbG93aW5nRXZlbnRzOiAnVGhpcyBhbmQgZm9sbG93aW5nIGV2ZW50cycsXG5cdHRoaXNBbmRGb2xsb3dpbmdFdmVudHNEZXNjcmlwdGlvbjogJ0VkaXQgdGhpcyBhbmQgYWxsIGZ1dHVyZSBvY2N1cnJlbmNlcycsXG5cdGFsbEV2ZW50czogJ0FsbCBldmVudHMnLFxuXHRhbGxFdmVudHNEZXNjcmlwdGlvbjogJ0VkaXQgdGhlIGVudGlyZSByZWN1cnJpbmcgc2VyaWVzJyxcblx0b25seUNoYW5nZVRoaXM6ICdPbmx5IGNoYW5nZSB0aGlzIHNwZWNpZmljIG9jY3VycmVuY2UnLFxuXHRjaGFuZ2VUaGlzQW5kRnV0dXJlOiAnQ2hhbmdlIHRoaXMgYW5kIGFsbCBmdXR1cmUgb2NjdXJyZW5jZXMnLFxuXHRjaGFuZ2VFbnRpcmVTZXJpZXM6ICdDaGFuZ2UgdGhlIGVudGlyZSByZWN1cnJpbmcgc2VyaWVzJyxcblx0b25seURlbGV0ZVRoaXM6ICdPbmx5IGRlbGV0ZSB0aGlzIHNwZWNpZmljIG9jY3VycmVuY2UnLFxuXHRkZWxldGVUaGlzQW5kRnV0dXJlOiAnRGVsZXRlIHRoaXMgYW5kIGFsbCBmdXR1cmUgb2NjdXJyZW5jZXMnLFxuXHRkZWxldGVFbnRpcmVTZXJpZXM6ICdEZWxldGUgdGhlIGVudGlyZSByZWN1cnJpbmcgc2VyaWVzJyxcblxuXHQvLyBWaWV3IHR5cGVzXG5cdG1vbnRoOiAnTW9udGgnLFxuXHR3ZWVrOiAnV2VlaycsXG5cdGRheTogJ0RheScsXG5cdHllYXI6ICdZZWFyJyxcblx0bW9yZTogJ21vcmUnLFxuXG5cdC8vIFJlc291cmNlIGNhbGVuZGFyXG5cdHJlc291cmNlczogJ1Jlc291cmNlcycsXG5cdHJlc291cmNlOiAnUmVzb3VyY2UnLFxuXHR0aW1lOiAnVGltZScsXG5cdGRhdGU6ICdEYXRlJyxcblx0bm9SZXNvdXJjZXNWaXNpYmxlOiAnTm8gcmVzb3VyY2VzIHZpc2libGUnLFxuXHRhZGRSZXNvdXJjZXNPclNob3dFeGlzdGluZzogJ0FkZCByZXNvdXJjZXMgb3Igc2hvdyBleGlzdGluZyBvbmVzJyxcblxuXHQvLyBEYXlzIG9mIHdlZWtcblx0c3VuZGF5OiAnU3VuZGF5Jyxcblx0bW9uZGF5OiAnTW9uZGF5Jyxcblx0dHVlc2RheTogJ1R1ZXNkYXknLFxuXHR3ZWRuZXNkYXk6ICdXZWRuZXNkYXknLFxuXHR0aHVyc2RheTogJ1RodXJzZGF5Jyxcblx0ZnJpZGF5OiAnRnJpZGF5Jyxcblx0c2F0dXJkYXk6ICdTYXR1cmRheScsXG5cblx0Ly8gRGF5cyBzaG9ydFxuXHRzdW46ICdTdW4nLFxuXHRtb246ICdNb24nLFxuXHR0dWU6ICdUdWUnLFxuXHR3ZWQ6ICdXZWQnLFxuXHR0aHU6ICdUaHUnLFxuXHRmcmk6ICdGcmknLFxuXHRzYXQ6ICdTYXQnLFxuXG5cdC8vIE1vbnRoc1xuXHRqYW51YXJ5OiAnSmFudWFyeScsXG5cdGZlYnJ1YXJ5OiAnRmVicnVhcnknLFxuXHRtYXJjaDogJ01hcmNoJyxcblx0YXByaWw6ICdBcHJpbCcsXG5cdG1heTogJ01heScsXG5cdGp1bmU6ICdKdW5lJyxcblx0anVseTogJ0p1bHknLFxuXHRhdWd1c3Q6ICdBdWd1c3QnLFxuXHRzZXB0ZW1iZXI6ICdTZXB0ZW1iZXInLFxuXHRvY3RvYmVyOiAnT2N0b2JlcicsXG5cdG5vdmVtYmVyOiAnTm92ZW1iZXInLFxuXHRkZWNlbWJlcjogJ0RlY2VtYmVyJyxcbn1cbiIsCiAgICAiaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIHdlZWsgZGF5cyBmb3IgYSBnaXZlbiBkYXRlIGFuZCBmaXJzdCBkYXkgb2Ygd2VlayBzZXR0aW5nLlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gZW5zdXJlcyB0aGF0IHRoZSBjdXJyZW50IGRhdGUgaXMgYWx3YXlzIGluY2x1ZGVkIGluIHRoZSByZXR1cm5lZCB3ZWVrLFxuICogZXZlbiB3aGVuIHRoZSBmaXJzdCBkYXkgb2Ygd2VlayBpcyBzZXQgdG8gYSBkYXkgYWZ0ZXIgdGhlIGN1cnJlbnQgZGF0ZS5cbiAqXG4gKiBAcGFyYW0gY3VycmVudERhdGUgLSBUaGUgcmVmZXJlbmNlIGRhdGUgZm9yIGNhbGN1bGF0aW5nIHRoZSB3ZWVrXG4gKiBAcGFyYW0gZmlyc3REYXlPZldlZWsgLSBUaGUgZGF5IG51bWJlciAoMC02KSByZXByZXNlbnRpbmcgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2VlayAoMCA9IFN1bmRheSwgMSA9IE1vbmRheSwgZXRjLilcbiAqIEByZXR1cm5zIEFuIGFycmF5IG9mIDcgZGF5anMgb2JqZWN0cyByZXByZXNlbnRpbmcgdGhlIHdlZWsgZGF5cywgc3RhcnRpbmcgZnJvbSBmaXJzdERheU9mV2Vla1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBHZXQgd2VlayBzdGFydGluZyBmcm9tIE1vbmRheSBmb3IgY3VycmVudCBkYXRlXG4gKiBjb25zdCB3ZWVrRGF5cyA9IGdldFdlZWtEYXlzKGRheWpzKCcyMDI1LTEwLTEzJyksIDEpXG4gKiAvLyBSZXR1cm5zOiBbTW9uIE9jdCAxMywgVHVlIE9jdCAxNCwgLi4uLCBTdW4gT2N0IDE5XVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBHZXQgd2VlayBzdGFydGluZyBmcm9tIFdlZG5lc2RheSB3aGVuIGN1cnJlbnQgZGF0ZSBpcyBNb25kYXlcbiAqIGNvbnN0IHdlZWtEYXlzID0gZ2V0V2Vla0RheXMoZGF5anMoJzIwMjUtMTAtMTMnKSwgMylcbiAqIC8vIFJldHVybnM6IFtXZWQgT2N0IDgsIFRodSBPY3QgOSwgLi4uLCBUdWUgT2N0IDE0XSAoaW5jbHVkZXMgTW9uZGF5IE9jdCAxMylcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFdlZWtEYXlzKFxuXHRjdXJyZW50RGF0ZTogZGF5anMuRGF5anMsXG5cdGZpcnN0RGF5T2ZXZWVrOiBudW1iZXJcbik6IGRheWpzLkRheWpzW10ge1xuXHRjb25zdCBzdGFydE9mV2Vla0Zyb21DdXJyZW50RGF0ZSA9IGN1cnJlbnREYXRlXG5cdFx0LnN0YXJ0T2YoJ3dlZWsnKVxuXHRcdC5kYXkoZmlyc3REYXlPZldlZWspXG5cblx0Y29uc3QgYWRqdXN0ZWRTdGFydE9mV2VlayA9IGN1cnJlbnREYXRlLmlzQmVmb3JlKHN0YXJ0T2ZXZWVrRnJvbUN1cnJlbnREYXRlKVxuXHRcdD8gc3RhcnRPZldlZWtGcm9tQ3VycmVudERhdGUuc3VidHJhY3QoMSwgJ3dlZWsnKVxuXHRcdDogc3RhcnRPZldlZWtGcm9tQ3VycmVudERhdGVcblxuXHRyZXR1cm4gQXJyYXkuZnJvbSh7IGxlbmd0aDogNyB9LCAoXywgZGF5SW5kZXgpID0+XG5cdFx0YWRqdXN0ZWRTdGFydE9mV2Vlay5hZGQoZGF5SW5kZXgsICdkYXknKVxuXHQpXG59XG5cbi8qKlxuICogR2VuZXJhdGVzIDYgd2Vla3Mgb2YgZGF5cyBmb3IgYSBtb250aCBjYWxlbmRhciB2aWV3LlxuICogQWx3YXlzIHJldHVybnMgNDIgZGF5cyAoNiB3ZWVrcyDDlyA3IGRheXMpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TW9udGhXZWVrcyhcblx0bW9udGhEYXRlOiBkYXlqcy5EYXlqcyxcblx0Zmlyc3REYXlPZldlZWs6IG51bWJlclxuKTogZGF5anMuRGF5anNbXVtdIHtcblx0Y29uc3QgZmlyc3RXZWVrID0gZ2V0V2Vla0RheXMobW9udGhEYXRlLnN0YXJ0T2YoJ21vbnRoJyksIGZpcnN0RGF5T2ZXZWVrKVxuXG5cdHJldHVybiBBcnJheS5mcm9tKHsgbGVuZ3RoOiA2IH0sIChfLCB3ZWVrSW5kZXgpID0+IHtcblx0XHRjb25zdCB3ZWVrU3RhcnQgPSBmaXJzdFdlZWtbMF0uYWRkKHdlZWtJbmRleCwgJ3dlZWsnKVxuXHRcdHJldHVybiBnZXRXZWVrRGF5cyh3ZWVrU3RhcnQsIGZpcnN0RGF5T2ZXZWVrKVxuXHR9KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TW9udGhEYXlzKG1vbnRoRGF0ZTogZGF5anMuRGF5anMpOiBkYXlqcy5EYXlqc1tdIHtcblx0Y29uc3QgZGF5c0luTW9udGggPSBtb250aERhdGUuZGF5c0luTW9udGgoKVxuXHRyZXR1cm4gQXJyYXkuZnJvbSh7IGxlbmd0aDogZGF5c0luTW9udGggfSwgKF8sIGkpID0+XG5cdFx0bW9udGhEYXRlLnN0YXJ0T2YoJ21vbnRoJykuYWRkKGksICdkYXknKVxuXHQpXG59XG5cbmludGVyZmFjZSBHZXREYXlIb3Vyc09wdGlvbnMge1xuXHRyZWZlcmVuY2VEYXRlPzogZGF5anMuRGF5anMgLy8gUmVmZXJlbmNlIGRhdGUgdG8gc2V0IHRoZSBob3VycyBvbiAoZGVmYXVsdCBpcyB0b2RheSlcblx0bGVuZ3RoPzogbnVtYmVyIC8vIE51bWJlciBvZiBob3VycyBpbiB0aGUgZGF5IChkZWZhdWx0IGlzIDI0KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGF5SG91cnMoe1xuXHRyZWZlcmVuY2VEYXRlID0gZGF5anMoKSxcblx0bGVuZ3RoID0gMjQsXG59OiBHZXREYXlIb3Vyc09wdGlvbnMgPSB7fSk6IGRheWpzLkRheWpzW10ge1xuXHRyZXR1cm4gQXJyYXkuZnJvbSh7IGxlbmd0aCB9LCAoXywgaSkgPT5cblx0XHRyZWZlcmVuY2VEYXRlLmhvdXIoaSkubWludXRlKDApLnNlY29uZCgwKS5taWxsaXNlY29uZCgwKVxuXHQpXG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgV2Vla0RheXMgfSBmcm9tICdAL2NvbXBvbmVudHMnXG5cbmV4cG9ydCBjb25zdCBHQVBfQkVUV0VFTl9FTEVNRU5UUyA9IDEgLy8gcHggKGdhcC0xKVxuZXhwb3J0IGNvbnN0IERBWV9OVU1CRVJfSEVJR0hUID0gMjQgLy8gcHggKGgtNilcbmV4cG9ydCBjb25zdCBFVkVOVF9CQVJfSEVJR0hUID0gMjQgLy8gcHggKGgtWzI0cHhdKVxuZXhwb3J0IGNvbnN0IERBWV9NQVhfRVZFTlRTX0RFRkFVTFQgPSA0IC8vIERlZmF1bHQgbWF4IGV2ZW50cyBwZXIgZGF5XG5leHBvcnQgY29uc3QgRElTQUJMRURfQ0VMTF9DTEFTU05BTUUgPVxuXHQnYmctc2Vjb25kYXJ5IHRleHQtbXV0ZWQtZm9yZWdyb3VuZCBwb2ludGVyLWV2ZW50cy1ub25lJ1xuXG5leHBvcnQgY29uc3QgV0VFS19EQVlTX05VTUJFUl9NQVA6IFJlY29yZDxXZWVrRGF5cywgbnVtYmVyPiA9IHtcblx0c3VuZGF5OiAwLFxuXHRtb25kYXk6IDEsXG5cdHR1ZXNkYXk6IDIsXG5cdHdlZG5lc2RheTogMyxcblx0dGh1cnNkYXk6IDQsXG5cdGZyaWRheTogNSxcblx0c2F0dXJkYXk6IDYsXG59XG5cbmV4cG9ydCBjb25zdCBEQVlfTlVNQkVSX1RPX1dFRUtfREFZUzogUmVjb3JkPG51bWJlciwgV2Vla0RheXM+ID0ge1xuXHQwOiAnc3VuZGF5Jyxcblx0MTogJ21vbmRheScsXG5cdDI6ICd0dWVzZGF5Jyxcblx0MzogJ3dlZG5lc2RheScsXG5cdDQ6ICd0aHVyc2RheScsXG5cdDU6ICdmcmlkYXknLFxuXHQ2OiAnc2F0dXJkYXknLFxufVxuIiwKICAgICJpbXBvcnQgeyBCdXR0b24gfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvYnV0dG9uJ1xuaW1wb3J0IHtcblx0RGlhbG9nLFxuXHREaWFsb2dDb250ZW50LFxuXHREaWFsb2dEZXNjcmlwdGlvbixcblx0RGlhbG9nRm9vdGVyLFxuXHREaWFsb2dIZWFkZXIsXG5cdERpYWxvZ1RpdGxlLFxufSBmcm9tICdAL2NvbXBvbmVudHMvdWkvZGlhbG9nJ1xuaW1wb3J0IHR5cGUgeyBSZWN1cnJlbmNlRWRpdFNjb3BlIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL3R5cGVzJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuXG5pbnRlcmZhY2UgUmVjdXJyZW5jZUVkaXREaWFsb2dQcm9wcyB7XG5cdGlzT3BlbjogYm9vbGVhblxuXHRvbkNsb3NlOiAoKSA9PiB2b2lkXG5cdG9uQ29uZmlybTogKHNjb3BlOiBSZWN1cnJlbmNlRWRpdFNjb3BlKSA9PiB2b2lkXG5cdG9wZXJhdGlvblR5cGU6ICdlZGl0JyB8ICdkZWxldGUnXG5cdGV2ZW50VGl0bGU6IHN0cmluZ1xufVxuXG5leHBvcnQgZnVuY3Rpb24gUmVjdXJyZW5jZUVkaXREaWFsb2coe1xuXHRpc09wZW4sXG5cdG9uQ2xvc2UsXG5cdG9uQ29uZmlybSxcblx0b3BlcmF0aW9uVHlwZSxcblx0ZXZlbnRUaXRsZSxcbn06IFJlY3VycmVuY2VFZGl0RGlhbG9nUHJvcHMpIHtcblx0Y29uc3QgeyB0IH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgoY29udGV4dCkgPT4gKHsgdDogY29udGV4dC50IH0pKVxuXG5cdGNvbnN0IGhhbmRsZVNjb3BlU2VsZWN0ID0gKHNjb3BlOiBSZWN1cnJlbmNlRWRpdFNjb3BlKSA9PiB7XG5cdFx0b25Db25maXJtKHNjb3BlKVxuXHRcdG9uQ2xvc2UoKVxuXHR9XG5cblx0Y29uc3QgaXNFZGl0ID0gb3BlcmF0aW9uVHlwZSA9PT0gJ2VkaXQnXG5cblx0cmV0dXJuIChcblx0XHQ8RGlhbG9nIG9uT3BlbkNoYW5nZT17b25DbG9zZX0gb3Blbj17aXNPcGVufT5cblx0XHRcdDxEaWFsb2dDb250ZW50IGNsYXNzTmFtZT1cIm1heC13LW1kXCI+XG5cdFx0XHRcdDxEaWFsb2dIZWFkZXI+XG5cdFx0XHRcdFx0PERpYWxvZ1RpdGxlPlxuXHRcdFx0XHRcdFx0e2lzRWRpdCA/IHQoJ2VkaXRSZWN1cnJpbmdFdmVudCcpIDogdCgnZGVsZXRlUmVjdXJyaW5nRXZlbnQnKX1cblx0XHRcdFx0XHQ8L0RpYWxvZ1RpdGxlPlxuXHRcdFx0XHRcdDxEaWFsb2dEZXNjcmlwdGlvbj5cblx0XHRcdFx0XHRcdFwie2V2ZW50VGl0bGV9XCJ7JyAnfVxuXHRcdFx0XHRcdFx0e2lzRWRpdFxuXHRcdFx0XHRcdFx0XHQ/IHQoJ2VkaXRSZWN1cnJpbmdFdmVudFF1ZXN0aW9uJylcblx0XHRcdFx0XHRcdFx0OiB0KCdkZWxldGVSZWN1cnJpbmdFdmVudFF1ZXN0aW9uJyl9XG5cdFx0XHRcdFx0PC9EaWFsb2dEZXNjcmlwdGlvbj5cblx0XHRcdFx0PC9EaWFsb2dIZWFkZXI+XG5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTNcIj5cblx0XHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJ3LWZ1bGwganVzdGlmeS1zdGFydCBoLWF1dG8gcC00XCJcblx0XHRcdFx0XHRcdG9uQ2xpY2s9eygpID0+IGhhbmRsZVNjb3BlU2VsZWN0KCd0aGlzJyl9XG5cdFx0XHRcdFx0XHR2YXJpYW50PVwib3V0bGluZVwiXG5cdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWxlZnRcIj5cblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmb250LW1lZGl1bVwiPnt0KCd0aGlzRXZlbnQnKX08L2Rpdj5cblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtbXV0ZWQtZm9yZWdyb3VuZFwiPlxuXHRcdFx0XHRcdFx0XHRcdHtpc0VkaXQgPyB0KCdvbmx5Q2hhbmdlVGhpcycpIDogdCgnb25seURlbGV0ZVRoaXMnKX1cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8L0J1dHRvbj5cblxuXHRcdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cInctZnVsbCBqdXN0aWZ5LXN0YXJ0IGgtYXV0byBwLTRcIlxuXHRcdFx0XHRcdFx0b25DbGljaz17KCkgPT4gaGFuZGxlU2NvcGVTZWxlY3QoJ2ZvbGxvd2luZycpfVxuXHRcdFx0XHRcdFx0dmFyaWFudD1cIm91dGxpbmVcIlxuXHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidGV4dC1sZWZ0XCI+XG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZm9udC1tZWRpdW1cIj57dCgndGhpc0FuZEZvbGxvd2luZ0V2ZW50cycpfTwvZGl2PlxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCI+XG5cdFx0XHRcdFx0XHRcdFx0e2lzRWRpdCA/IHQoJ2NoYW5nZVRoaXNBbmRGdXR1cmUnKSA6IHQoJ2RlbGV0ZVRoaXNBbmRGdXR1cmUnKX1cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8L0J1dHRvbj5cblxuXHRcdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cInctZnVsbCBqdXN0aWZ5LXN0YXJ0IGgtYXV0byBwLTRcIlxuXHRcdFx0XHRcdFx0b25DbGljaz17KCkgPT4gaGFuZGxlU2NvcGVTZWxlY3QoJ2FsbCcpfVxuXHRcdFx0XHRcdFx0dmFyaWFudD1cIm91dGxpbmVcIlxuXHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidGV4dC1sZWZ0XCI+XG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZm9udC1tZWRpdW1cIj57dCgnYWxsRXZlbnRzJyl9PC9kaXY+XG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LW11dGVkLWZvcmVncm91bmRcIj5cblx0XHRcdFx0XHRcdFx0XHR7aXNFZGl0ID8gdCgnY2hhbmdlRW50aXJlU2VyaWVzJykgOiB0KCdkZWxldGVFbnRpcmVTZXJpZXMnKX1cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdFx0PC9kaXY+XG5cblx0XHRcdFx0PERpYWxvZ0Zvb3Rlcj5cblx0XHRcdFx0XHQ8QnV0dG9uIG9uQ2xpY2s9e29uQ2xvc2V9IHZhcmlhbnQ9XCJvdXRsaW5lXCI+XG5cdFx0XHRcdFx0XHR7dCgnY2FuY2VsJyl9XG5cdFx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHRcdDwvRGlhbG9nRm9vdGVyPlxuXHRcdFx0PC9EaWFsb2dDb250ZW50PlxuXHRcdDwvRGlhbG9nPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgRHJhZ0VuZEV2ZW50IH0gZnJvbSAnQGRuZC1raXQvY29yZSdcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJy4uL3R5cGVzJ1xuXG5leHBvcnQgY29uc3QgZ2V0VXBkYXRlZEV2ZW50ID0gKFxuXHRldmVudDogRHJhZ0VuZEV2ZW50LFxuXHRhY3RpdmVFdmVudDogQ2FsZW5kYXJFdmVudCB8IG51bGxcbikgPT4ge1xuXHRjb25zdCB7IGFjdGl2ZSwgb3ZlciB9ID0gZXZlbnRcblxuXHRpZiAoIWFjdGl2ZSB8fCAhb3ZlciB8fCAhYWN0aXZlRXZlbnQpIHtcblx0XHRyZXR1cm4gbnVsbFxuXHR9XG5cblx0Y29uc3QgaXNUaW1lQ2VsbCA9IG92ZXIuZGF0YS5jdXJyZW50Py50eXBlID09PSAndGltZS1jZWxsJ1xuXHRjb25zdCB7IHJlc291cmNlSWQsIGFsbERheSB9ID0gb3Zlci5kYXRhLmN1cnJlbnQgfHwge31cblx0bGV0IG5ld1N0YXJ0XG5cblx0aWYgKGlzVGltZUNlbGwpIHtcblx0XHRjb25zdCB7IGRhdGUsIGhvdXIgPSAwLCBtaW51dGUgPSAwIH0gPSBvdmVyLmRhdGEuY3VycmVudFxuXG5cdFx0Ly8gQ3JlYXRlIG5ldyBzdGFydCB0aW1lIGJhc2VkIG9uIHRoZSBkcm9wIHRhcmdldFxuXHRcdG5ld1N0YXJ0ID0gZGF5anMoZGF0ZSkuaG91cihob3VyKS5taW51dGUobWludXRlKVxuXHR9IGVsc2Uge1xuXHRcdGNvbnN0IHsgZGF0ZSB9ID0gb3Zlci5kYXRhLmN1cnJlbnRcblxuXHRcdG5ld1N0YXJ0ID0gZGF5anMoZGF0ZSlcblx0fVxuXG5cdGNvbnN0IGV2ZW50RHVyYXRpb24gPSBhY3RpdmVFdmVudC5lbmQuZGlmZihhY3RpdmVFdmVudC5zdGFydCwgJ3NlY29uZCcpXG5cblx0Ly8gQ3JlYXRlIG5ldyBlbmQgdGltZSBieSBhZGRpbmcgdGhlIG9yaWdpbmFsIGR1cmF0aW9uXG5cdGxldCBuZXdFbmQgPSBuZXdTdGFydC5hZGQoZXZlbnREdXJhdGlvbiwgJ3NlY29uZCcpXG5cblx0aWYgKG5ld0VuZC5pc1NhbWUobmV3RW5kLnN0YXJ0T2YoJ2RheScpKSkge1xuXHRcdC8vIElmIHRoZSBuZXcgZW5kIHRpbWUgaXMgYXQgbWlkbmlnaHQsIHNldCBpdCB0byAyNCBob3VycyBvZiBwYXJ0aWFsIGRheVxuXHRcdG5ld0VuZCA9IG5ld0VuZC5zdWJ0cmFjdCgxLCAnZGF5JykuZW5kT2YoJ2RheScpXG5cdH1cblxuXHQvLyBVcGRhdGUgdGhlIGV2ZW50IHdpdGggbmV3IHRpbWVzIGFuZCByZXNvdXJjZSBpZiBjaGFuZ2VkXG5cdGNvbnN0IHVwZGF0ZXMgPSB7XG5cdFx0c3RhcnQ6IG5ld1N0YXJ0LFxuXHRcdGVuZDogbmV3RW5kLFxuXHRcdHJlc291cmNlSWQsXG5cdFx0YWxsRGF5OiBpc1RpbWVDZWxsID8gZmFsc2UgOiAoYWxsRGF5ID8/IGFjdGl2ZUV2ZW50LmFsbERheSksXG5cdH1cblx0cmV0dXJuIHsgYWN0aXZlRXZlbnQsIHVwZGF0ZXMgfVxufVxuIiwKICAgICJpbXBvcnQgeyBEcmFnT3ZlcmxheSB9IGZyb20gJ0BkbmQta2l0L2NvcmUnXG5pbXBvcnQgeyBzbmFwQ2VudGVyVG9DdXJzb3IgfSBmcm9tICdAZG5kLWtpdC9tb2RpZmllcnMnXG5pbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZUltcGVyYXRpdmVIYW5kbGUsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnLi4vdHlwZXMnXG5cbmludGVyZmFjZSBFdmVudERyYWdPdmVybGF5UHJvcHMge1xuXHRyZWY6IFJlYWN0LlJlZjx7IHNldEFjdGl2ZUV2ZW50OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWQgfT5cbn1cblxuZXhwb3J0IGNvbnN0IEV2ZW50RHJhZ092ZXJsYXk6IFJlYWN0LkZDPEV2ZW50RHJhZ092ZXJsYXlQcm9wcz4gPSAoeyByZWYgfSkgPT4ge1xuXHRjb25zdCBbYWN0aXZlRXZlbnQsIHNldEFjdGl2ZUV2ZW50XSA9IHVzZVN0YXRlPENhbGVuZGFyRXZlbnQ+KG51bGwpXG5cblx0dXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsICgpID0+ICh7XG5cdFx0c2V0QWN0aXZlRXZlbnQsXG5cdH0pKVxuXG5cdHJldHVybiAoXG5cdFx0PERyYWdPdmVybGF5IG1vZGlmaWVycz17W3NuYXBDZW50ZXJUb0N1cnNvcl19PlxuXHRcdFx0e2FjdGl2ZUV2ZW50ICYmIChcblx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHQnY3Vyc29yLWdyYWIgdHJ1bmNhdGUgcm91bmRlZCBiZy1hbWJlci0yMDAgcC0yIHRleHQtWzEwcHhdIHNoYWRvdy1sZyBzbTp0ZXh0LXhzIHctMjAnLFxuXHRcdFx0XHRcdFx0YWN0aXZlRXZlbnQuYmFja2dyb3VuZENvbG9yIHx8ICdiZy1ibHVlLTUwMCcsXG5cdFx0XHRcdFx0XHRhY3RpdmVFdmVudC5jb2xvciB8fCAndGV4dC13aGl0ZSdcblx0XHRcdFx0XHQpfVxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0e2FjdGl2ZUV2ZW50Py50aXRsZX1cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQpfVxuXHRcdDwvRHJhZ092ZXJsYXk+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvYnV0dG9uJ1xuaW1wb3J0IHsgQ2hlY2tib3ggfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvY2hlY2tib3gnXG5pbXBvcnQgeyBEYXRlUGlja2VyIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2RhdGUtcGlja2VyJ1xuaW1wb3J0IHsgRGlhbG9nRm9vdGVyIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2RpYWxvZydcbmltcG9ydCB7IElucHV0IH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2lucHV0J1xuaW1wb3J0IHsgTGFiZWwgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvbGFiZWwnXG5pbXBvcnQgeyBTY3JvbGxBcmVhIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL3Njcm9sbC1hcmVhJ1xuaW1wb3J0IHsgVGltZVBpY2tlciB9IGZyb20gJ0AvY29tcG9uZW50cy91aS90aW1lLXBpY2tlcidcbmltcG9ydCB7IGlzQnVzaW5lc3NEYXkgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL3V0aWxzL2J1c2luZXNzLWhvdXJzJ1xuaW1wb3J0IHtcblx0YnVpbGREYXRlVGltZSxcblx0YnVpbGRFbmREYXRlVGltZSxcblx0Z2V0VGltZUNvbnN0cmFpbnRzLFxufSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL3V0aWxzL2V2ZW50LWZvcm0tdXRpbHMnXG5pbXBvcnQgeyBSZWN1cnJlbmNlRWRpdERpYWxvZyB9IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS9jb21wb25lbnRzL3JlY3VycmVuY2UtZWRpdC1kaWFsb2cnXG5pbXBvcnQgeyBSZWN1cnJlbmNlRWRpdG9yIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL2NvbXBvbmVudHMvcmVjdXJyZW5jZS1lZGl0b3IvcmVjdXJyZW5jZS1lZGl0b3InXG5pbXBvcnQgeyB1c2VSZWN1cnJpbmdFdmVudEFjdGlvbnMgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvaG9va3MvdXNlUmVjdXJyaW5nRXZlbnRBY3Rpb25zJ1xuaW1wb3J0IHR5cGUgeyBSUnVsZU9wdGlvbnMgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvdHlwZXMnXG5pbXBvcnQgeyBpc1JlY3VycmluZ0V2ZW50IH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL3V0aWxzL3JlY3VycmVuY2UtaGFuZGxlcidcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmNvbnN0IENPTE9SX09QVElPTlMgPSBbXG5cdHtcblx0XHR2YWx1ZTogYGJnLWJsdWUtMTAwIHRleHQtYmx1ZS04MDBgLFxuXHRcdGxhYmVsOiAnQmx1ZScsXG5cdH0sXG5cdHtcblx0XHR2YWx1ZTogYGJnLWdyZWVuLTEwMCB0ZXh0LWdyZWVuLTgwMGAsXG5cdFx0bGFiZWw6ICdHcmVlbicsXG5cdH0sXG5cdHtcblx0XHR2YWx1ZTogYGJnLXB1cnBsZS0xMDAgdGV4dC1wdXJwbGUtODAwYCxcblx0XHRsYWJlbDogJ1B1cnBsZScsXG5cdH0sXG5cdHtcblx0XHR2YWx1ZTogYGJnLXJlZC0xMDAgdGV4dC1yZWQtODAwYCxcblx0XHRsYWJlbDogJ1JlZCcsXG5cdH0sXG5cdHtcblx0XHR2YWx1ZTogYGJnLXllbGxvdy0xMDAgdGV4dC15ZWxsb3ctODAwYCxcblx0XHRsYWJlbDogJ1llbGxvdycsXG5cdH0sXG5cdHtcblx0XHR2YWx1ZTogYGJnLXBpbmstMTAwIHRleHQtcGluay04MDBgLFxuXHRcdGxhYmVsOiAnUGluaycsXG5cdH0sXG5cdHtcblx0XHR2YWx1ZTogYGJnLWluZGlnby0xMDAgdGV4dC1pbmRpZ28tODAwYCxcblx0XHRsYWJlbDogJ0luZGlnbycsXG5cdH0sXG5cdHtcblx0XHR2YWx1ZTogYGJnLWFtYmVyLTEwMCB0ZXh0LWFtYmVyLTgwMGAsXG5cdFx0bGFiZWw6ICdBbWJlcicsXG5cdH0sXG5cdHtcblx0XHR2YWx1ZTogYGJnLWVtZXJhbGQtMTAwIHRleHQtZW1lcmFsZC04MDBgLFxuXHRcdGxhYmVsOiAnRW1lcmFsZCcsXG5cdH0sXG5cdHtcblx0XHR2YWx1ZTogYGJnLXNreS0xMDAgdGV4dC1za3ktODAwYCxcblx0XHRsYWJlbDogJ1NreScsXG5cdH0sXG5cdHtcblx0XHR2YWx1ZTogYGJnLXZpb2xldC0xMDAgdGV4dC12aW9sZXQtODAwYCxcblx0XHRsYWJlbDogJ1Zpb2xldCcsXG5cdH0sXG5cdHtcblx0XHR2YWx1ZTogYGJnLXJvc2UtMTAwIHRleHQtcm9zZS04MDBgLFxuXHRcdGxhYmVsOiAnUm9zZScsXG5cdH0sXG5cdHtcblx0XHR2YWx1ZTogYGJnLXRlYWwtMTAwIHRleHQtdGVhbC04MDBgLFxuXHRcdGxhYmVsOiAnVGVhbCcsXG5cdH0sXG5cdHtcblx0XHR2YWx1ZTogYGJnLW9yYW5nZS0xMDAgdGV4dC1vcmFuZ2UtODAwYCxcblx0XHRsYWJlbDogJ09yYW5nZScsXG5cdH0sXG5dXG5cbmV4cG9ydCBpbnRlcmZhY2UgRXZlbnRGb3JtUHJvcHMge1xuXHRvcGVuPzogYm9vbGVhblxuXHRzZWxlY3RlZEV2ZW50PzogQ2FsZW5kYXJFdmVudCB8IG51bGxcblx0b25BZGQ/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0b25VcGRhdGU/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0b25EZWxldGU/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0b25DbG9zZTogKCkgPT4gdm9pZFxufVxuXG5leHBvcnQgY29uc3QgRXZlbnRGb3JtOiBSZWFjdC5GQzxFdmVudEZvcm1Qcm9wcz4gPSAoe1xuXHRzZWxlY3RlZEV2ZW50LFxuXHRvbkNsb3NlLFxuXHRvblVwZGF0ZSxcblx0b25EZWxldGUsXG5cdG9uQWRkLFxufSkgPT4ge1xuXHRjb25zdCB7XG5cdFx0ZGlhbG9nU3RhdGUsXG5cdFx0b3BlbkVkaXREaWFsb2csXG5cdFx0b3BlbkRlbGV0ZURpYWxvZyxcblx0XHRjbG9zZURpYWxvZyxcblx0XHRoYW5kbGVDb25maXJtLFxuXHR9ID0gdXNlUmVjdXJyaW5nRXZlbnRBY3Rpb25zKG9uQ2xvc2UpXG5cblx0Y29uc3Qge1xuXHRcdGZpbmRQYXJlbnRSZWN1cnJpbmdFdmVudCxcblx0XHR0LFxuXHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0dGltZUZvcm1hdCxcblx0XHRnZXRSZXNvdXJjZUJ5SWQsXG5cdH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgoY29udGV4dCkgPT4gKHtcblx0XHRmaW5kUGFyZW50UmVjdXJyaW5nRXZlbnQ6IGNvbnRleHQuZmluZFBhcmVudFJlY3VycmluZ0V2ZW50LFxuXHRcdHQ6IGNvbnRleHQudCxcblx0XHRidXNpbmVzc0hvdXJzOiBjb250ZXh0LmJ1c2luZXNzSG91cnMsXG5cdFx0dGltZUZvcm1hdDogY29udGV4dC50aW1lRm9ybWF0LFxuXHRcdGdldFJlc291cmNlQnlJZDogY29udGV4dC5nZXRSZXNvdXJjZUJ5SWQsXG5cdH0pKVxuXG5cdGNvbnN0IHN0YXJ0ID0gc2VsZWN0ZWRFdmVudD8uc3RhcnQgPz8gZGF5anMoKVxuXHRjb25zdCBlbmQgPSBzZWxlY3RlZEV2ZW50Py5lbmQgPz8gZGF5anMoKS5hZGQoMSwgJ2hvdXInKVxuXG5cdC8vIEZpbmQgcGFyZW50IGV2ZW50IGlmIHRoaXMgaXMgYSByZWN1cnJpbmcgZXZlbnQgaW5zdGFuY2Vcblx0Y29uc3QgcGFyZW50RXZlbnQgPSBzZWxlY3RlZEV2ZW50XG5cdFx0PyBmaW5kUGFyZW50UmVjdXJyaW5nRXZlbnQoc2VsZWN0ZWRFdmVudClcblx0XHQ6IG51bGxcblxuXHQvLyBGb3JtIHN0YXRlXG5cdGNvbnN0IFtzdGFydERhdGUsIHNldFN0YXJ0RGF0ZV0gPSB1c2VTdGF0ZShzdGFydC50b0RhdGUoKSlcblx0Y29uc3QgW2VuZERhdGUsIHNldEVuZERhdGVdID0gdXNlU3RhdGUoZW5kLnRvRGF0ZSgpKVxuXHRjb25zdCBbaXNBbGxEYXksIHNldElzQWxsRGF5XSA9IHVzZVN0YXRlKHNlbGVjdGVkRXZlbnQ/LmFsbERheSB8fCBmYWxzZSlcblx0Y29uc3QgW3NlbGVjdGVkQ29sb3IsIHNldFNlbGVjdGVkQ29sb3JdID0gdXNlU3RhdGUoXG5cdFx0c2VsZWN0ZWRFdmVudD8uY29sb3IgfHwgQ09MT1JfT1BUSU9OU1swXS52YWx1ZVxuXHQpXG5cblx0Ly8gVGltZSBzdGF0ZVxuXHRjb25zdCBbc3RhcnRUaW1lLCBzZXRTdGFydFRpbWVdID0gdXNlU3RhdGUoc3RhcnQuZm9ybWF0KCdISDptbScpKVxuXHRjb25zdCBbZW5kVGltZSwgc2V0RW5kVGltZV0gPSB1c2VTdGF0ZShlbmQuZm9ybWF0KCdISDptbScpKVxuXG5cdC8vIEluaXRpYWxpemUgZm9ybSB2YWx1ZXMgZnJvbSBzZWxlY3RlZCBldmVudCBvciBkZWZhdWx0c1xuXHRjb25zdCBbZm9ybVZhbHVlcywgc2V0Rm9ybVZhbHVlc10gPSB1c2VTdGF0ZSh7XG5cdFx0dGl0bGU6IHNlbGVjdGVkRXZlbnQ/LnRpdGxlIHx8ICcnLFxuXHRcdGRlc2NyaXB0aW9uOiBzZWxlY3RlZEV2ZW50Py5kZXNjcmlwdGlvbiB8fCAnJyxcblx0XHRsb2NhdGlvbjogc2VsZWN0ZWRFdmVudD8ubG9jYXRpb24gfHwgJycsXG5cdH0pXG5cblx0Ly8gUmVjdXJyZW5jZSBzdGF0ZSAtIHB1bGwgUlJVTEUgZnJvbSBwYXJlbnQgaWYgdGhpcyBpcyBhbiBpbnN0YW5jZVxuXHRjb25zdCBbcnJ1bGUsIHNldFJydWxlXSA9IHVzZVN0YXRlPFJSdWxlT3B0aW9ucyB8IG51bGw+KCgpID0+IHtcblx0XHRjb25zdCBldmVudFJydWxlID0gc2VsZWN0ZWRFdmVudD8ucnJ1bGUgfHwgcGFyZW50RXZlbnQ/LnJydWxlXG5cdFx0cmV0dXJuIGV2ZW50UnJ1bGUgfHwgbnVsbFxuXHR9KVxuXG5cdC8vIENyZWF0ZSB3cmFwcGVyIGZ1bmN0aW9ucyB0byBmaXggVHlwZVNjcmlwdCBlcnJvcnMgd2l0aCBEYXRlUGlja2VyXG5cdGNvbnN0IGhhbmRsZVN0YXJ0RGF0ZUNoYW5nZSA9IChkYXRlOiBEYXRlIHwgdW5kZWZpbmVkKSA9PiB7XG5cdFx0c2V0U3RhcnREYXRlKGRhdGUpXG5cdFx0aWYgKGRhdGUgJiYgZGF5anMoZGF0ZSkuaXNBZnRlcihkYXlqcyhlbmREYXRlKSkpIHtcblx0XHRcdHNldEVuZERhdGUoZGF0ZSlcblx0XHR9XG5cdH1cblxuXHRjb25zdCBoYW5kbGVFbmREYXRlQ2hhbmdlID0gKGRhdGU6IERhdGUgfCB1bmRlZmluZWQpID0+IHtcblx0XHRzZXRFbmREYXRlKGRhdGUpXG5cdFx0aWYgKGRhdGUgJiYgZGF5anMoZGF0ZSkuaXNCZWZvcmUoZGF5anMoc3RhcnREYXRlKSkpIHtcblx0XHRcdHNldFN0YXJ0RGF0ZShkYXRlKVxuXHRcdH1cblx0fVxuXG5cdC8vIFRpbWUgdmFsaWRhdGlvbiBoYW5kbGVycyAtIG9ubHkgdmFsaWRhdGUgd2hlbiBkYXRlcyBhcmUgdGhlIHNhbWVcblx0Y29uc3QgaGFuZGxlU3RhcnRUaW1lQ2hhbmdlID0gKHRpbWU6IHN0cmluZykgPT4ge1xuXHRcdHNldFN0YXJ0VGltZSh0aW1lKVxuXHRcdC8vIE9ubHkgdmFsaWRhdGUgaWYgc2FtZSBkYXlcblx0XHRpZiAoZGF5anMoc3RhcnREYXRlKS5pc1NhbWUoZGF5anMoZW5kRGF0ZSksICdkYXknKSAmJiB0aW1lID4gZW5kVGltZSkge1xuXHRcdFx0c2V0RW5kVGltZSh0aW1lKVxuXHRcdH1cblx0fVxuXG5cdGNvbnN0IGhhbmRsZUVuZFRpbWVDaGFuZ2UgPSAodGltZTogc3RyaW5nKSA9PiB7XG5cdFx0c2V0RW5kVGltZSh0aW1lKVxuXHRcdC8vIE9ubHkgdmFsaWRhdGUgaWYgc2FtZSBkYXlcblx0XHRpZiAoZGF5anMoc3RhcnREYXRlKS5pc1NhbWUoZGF5anMoZW5kRGF0ZSksICdkYXknKSAmJiB0aW1lIDwgc3RhcnRUaW1lKSB7XG5cdFx0XHRzZXRTdGFydFRpbWUodGltZSlcblx0XHR9XG5cdH1cblxuXHQvLyBVcGRhdGUgZm9ybSB2YWx1ZXMgd2hlbiBpbnB1dCBjaGFuZ2VzXG5cdGNvbnN0IGhhbmRsZUlucHV0Q2hhbmdlID0gKFxuXHRcdGU6IFJlYWN0LkNoYW5nZUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQgfCBIVE1MVGV4dEFyZWFFbGVtZW50PlxuXHQpID0+IHtcblx0XHRjb25zdCB7IG5hbWUsIHZhbHVlIH0gPSBlLnRhcmdldFxuXHRcdHNldEZvcm1WYWx1ZXMoKHByZXYpID0+ICh7IC4uLnByZXYsIFtuYW1lXTogdmFsdWUgfSkpXG5cdH1cblxuXHR1c2VFZmZlY3QoKCkgPT4ge1xuXHRcdC8vIFJlc2V0IGVuZCB0aW1lIHdoZW4gYWxsIGRheSBpcyB0b2dnbGVkIHRvIG9uXG5cdFx0aWYgKGlzQWxsRGF5KSB7XG5cdFx0XHRzZXRFbmRUaW1lKCcyMzo1OScpXG5cdFx0fVxuXHR9LCBbaXNBbGxEYXldKVxuXG5cdGNvbnN0IGhhbmRsZVN1Ym1pdCA9IChlOiBSZWFjdC5Gb3JtRXZlbnQpID0+IHtcblx0XHRlLnByZXZlbnREZWZhdWx0KClcblxuXHRcdGNvbnN0IHN0YXJ0RGF0ZVRpbWUgPSBidWlsZERhdGVUaW1lKHN0YXJ0RGF0ZSwgc3RhcnRUaW1lLCBpc0FsbERheSlcblx0XHRjb25zdCBlbmREYXRlVGltZSA9IGJ1aWxkRW5kRGF0ZVRpbWUoZW5kRGF0ZSwgZW5kVGltZSwgaXNBbGxEYXkpXG5cblx0XHRjb25zdCBldmVudERhdGE6IENhbGVuZGFyRXZlbnQgPSB7XG5cdFx0XHRpZDogc2VsZWN0ZWRFdmVudD8uaWQgfHwgZGF5anMoKS5mb3JtYXQoJ1lZWVlNTURESEhtbXNzJyksXG5cdFx0XHR0aXRsZTogZm9ybVZhbHVlcy50aXRsZSxcblx0XHRcdHN0YXJ0OiBzdGFydERhdGVUaW1lLFxuXHRcdFx0ZW5kOiBlbmREYXRlVGltZSxcblx0XHRcdHJlc291cmNlSWQ6IHNlbGVjdGVkRXZlbnQ/LnJlc291cmNlSWQsXG5cdFx0XHRkZXNjcmlwdGlvbjogZm9ybVZhbHVlcy5kZXNjcmlwdGlvbixcblx0XHRcdGxvY2F0aW9uOiBmb3JtVmFsdWVzLmxvY2F0aW9uLFxuXHRcdFx0YWxsRGF5OiBpc0FsbERheSxcblx0XHRcdGNvbG9yOiBzZWxlY3RlZENvbG9yLFxuXHRcdFx0cnJ1bGU6IHJydWxlIHx8IHVuZGVmaW5lZCxcblx0XHR9XG5cblx0XHRpZiAoc2VsZWN0ZWRFdmVudD8uaWQgJiYgaXNSZWN1cnJpbmdFdmVudChzZWxlY3RlZEV2ZW50KSkge1xuXHRcdFx0b3BlbkVkaXREaWFsb2coc2VsZWN0ZWRFdmVudCwge1xuXHRcdFx0XHR0aXRsZTogZm9ybVZhbHVlcy50aXRsZSxcblx0XHRcdFx0c3RhcnQ6IHN0YXJ0RGF0ZVRpbWUsXG5cdFx0XHRcdGVuZDogZW5kRGF0ZVRpbWUsXG5cdFx0XHRcdGRlc2NyaXB0aW9uOiBmb3JtVmFsdWVzLmRlc2NyaXB0aW9uLFxuXHRcdFx0XHRsb2NhdGlvbjogZm9ybVZhbHVlcy5sb2NhdGlvbixcblx0XHRcdFx0YWxsRGF5OiBpc0FsbERheSxcblx0XHRcdFx0Y29sb3I6IHNlbGVjdGVkQ29sb3IsXG5cdFx0XHRcdHJydWxlOiBycnVsZSB8fCB1bmRlZmluZWQsXG5cdFx0XHR9KVxuXHRcdFx0cmV0dXJuXG5cdFx0fVxuXG5cdFx0aWYgKHNlbGVjdGVkRXZlbnQ/LmlkKSB7XG5cdFx0XHRvblVwZGF0ZT8uKGV2ZW50RGF0YSlcblx0XHR9IGVsc2Uge1xuXHRcdFx0b25BZGQ/LihldmVudERhdGEpXG5cdFx0fVxuXHRcdG9uQ2xvc2UoKVxuXHR9XG5cblx0Y29uc3QgaGFuZGxlRGVsZXRlID0gKCkgPT4ge1xuXHRcdGlmIChzZWxlY3RlZEV2ZW50Py5pZCkge1xuXHRcdFx0Ly8gQ2hlY2sgaWYgdGhpcyBpcyBhIHJlY3VycmluZyBldmVudFxuXHRcdFx0aWYgKGlzUmVjdXJyaW5nRXZlbnQoc2VsZWN0ZWRFdmVudCkpIHtcblx0XHRcdFx0Ly8gU2hvdyByZWN1cnJpbmcgZXZlbnQgZGVsZXRlIGRpYWxvZ1xuXHRcdFx0XHRvcGVuRGVsZXRlRGlhbG9nKHNlbGVjdGVkRXZlbnQpXG5cdFx0XHRcdHJldHVybiAvLyBEb24ndCBjbG9zZSB0aGUgZm9ybSB5ZXQsIGxldCB0aGUgZGlhbG9nIGhhbmRsZSBpdFxuXHRcdFx0fVxuXHRcdFx0b25EZWxldGU/LihzZWxlY3RlZEV2ZW50KVxuXHRcdFx0b25DbG9zZSgpXG5cdFx0fVxuXHR9XG5cblx0Y29uc3QgaGFuZGxlUlJ1bGVDaGFuZ2UgPSAobmV3UlJ1bGU6IFJSdWxlT3B0aW9ucyB8IG51bGwpID0+IHtcblx0XHRpZiAoIW5ld1JSdWxlKSB7XG5cdFx0XHRzZXRScnVsZShudWxsKVxuXHRcdFx0cmV0dXJuXG5cdFx0fVxuXHRcdGNvbnN0IHN0YXJ0RGF0ZVRpbWUgPSBidWlsZERhdGVUaW1lKHN0YXJ0RGF0ZSwgc3RhcnRUaW1lLCBpc0FsbERheSlcblx0XHRzZXRScnVsZSh7IC4uLm5ld1JSdWxlLCBkdHN0YXJ0OiBzdGFydERhdGVUaW1lLnRvRGF0ZSgpIH0pXG5cdH1cblxuXHQvLyBVc2UgcmVzb3VyY2Utc3BlY2lmaWMgYnVzaW5lc3MgaG91cnMgaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgZmFsbGJhY2sgdG8gZ2xvYmFsXG5cdGNvbnN0IGVmZmVjdGl2ZUJ1c2luZXNzSG91cnMgPSB1c2VNZW1vKCgpID0+IHtcblx0XHRjb25zdCByZXNvdXJjZUlkID0gc2VsZWN0ZWRFdmVudD8ucmVzb3VyY2VJZFxuXHRcdGlmIChyZXNvdXJjZUlkICYmIGdldFJlc291cmNlQnlJZCkge1xuXHRcdFx0Y29uc3QgcmVzb3VyY2UgPSBnZXRSZXNvdXJjZUJ5SWQocmVzb3VyY2VJZClcblx0XHRcdGlmIChyZXNvdXJjZT8uYnVzaW5lc3NIb3Vycykge1xuXHRcdFx0XHRyZXR1cm4gcmVzb3VyY2UuYnVzaW5lc3NIb3Vyc1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gYnVzaW5lc3NIb3Vyc1xuXHR9LCBbc2VsZWN0ZWRFdmVudD8ucmVzb3VyY2VJZCwgZ2V0UmVzb3VyY2VCeUlkLCBidXNpbmVzc0hvdXJzXSlcblxuXHRjb25zdCBkaXNhYmxlZERhdGVNYXRjaGVyID0gZWZmZWN0aXZlQnVzaW5lc3NIb3Vyc1xuXHRcdD8gKGRhdGU6IERhdGUpID0+ICFpc0J1c2luZXNzRGF5KGRheWpzKGRhdGUpLCBlZmZlY3RpdmVCdXNpbmVzc0hvdXJzKVxuXHRcdDogdW5kZWZpbmVkXG5cblx0Y29uc3Qgc3RhcnRDb25zdHJhaW50cyA9IGdldFRpbWVDb25zdHJhaW50cyhzdGFydERhdGUsIGVmZmVjdGl2ZUJ1c2luZXNzSG91cnMpXG5cdGNvbnN0IGVuZENvbnN0cmFpbnRzID0gZ2V0VGltZUNvbnN0cmFpbnRzKGVuZERhdGUsIGVmZmVjdGl2ZUJ1c2luZXNzSG91cnMpXG5cblx0cmV0dXJuIChcblx0XHQ8PlxuXHRcdFx0PGZvcm0gY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCBmbGV4LTEgbWluLWgtMFwiIG9uU3VibWl0PXtoYW5kbGVTdWJtaXR9PlxuXHRcdFx0XHQ8U2Nyb2xsQXJlYSBjbGFzc05hbWU9XCJmbGV4LTEgbWluLWgtMFwiPlxuXHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBnYXAtMyBzbTpnYXAtNCBwLTFcIj5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBnYXAtMlwiPlxuXHRcdFx0XHRcdFx0XHQ8TGFiZWwgY2xhc3NOYW1lPVwidGV4dC14cyBzbTp0ZXh0LXNtXCIgaHRtbEZvcj1cInRpdGxlXCI+XG5cdFx0XHRcdFx0XHRcdFx0e3QoJ3RpdGxlJyl9XG5cdFx0XHRcdFx0XHRcdDwvTGFiZWw+XG5cdFx0XHRcdFx0XHRcdDxJbnB1dFxuXHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImgtOCB0ZXh0LXNtIHNtOmgtOVwiXG5cdFx0XHRcdFx0XHRcdFx0aWQ9XCJ0aXRsZVwiXG5cdFx0XHRcdFx0XHRcdFx0bmFtZT1cInRpdGxlXCJcblx0XHRcdFx0XHRcdFx0XHRvbkNoYW5nZT17aGFuZGxlSW5wdXRDaGFuZ2V9XG5cdFx0XHRcdFx0XHRcdFx0cGxhY2Vob2xkZXI9e3QoJ2V2ZW50VGl0bGVQbGFjZWhvbGRlcicpfVxuXHRcdFx0XHRcdFx0XHRcdHJlcXVpcmVkXG5cdFx0XHRcdFx0XHRcdFx0dmFsdWU9e2Zvcm1WYWx1ZXMudGl0bGV9XG5cdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJncmlkIGdhcC0xIHNtOmdhcC0yXCI+XG5cdFx0XHRcdFx0XHRcdDxMYWJlbCBjbGFzc05hbWU9XCJ0ZXh0LXhzIHNtOnRleHQtc21cIiBodG1sRm9yPVwiZGVzY3JpcHRpb25cIj5cblx0XHRcdFx0XHRcdFx0XHR7dCgnZGVzY3JpcHRpb24nKX1cblx0XHRcdFx0XHRcdFx0PC9MYWJlbD5cblx0XHRcdFx0XHRcdFx0PElucHV0XG5cdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiaC04IHRleHQtc20gc206aC05XCJcblx0XHRcdFx0XHRcdFx0XHRpZD1cImRlc2NyaXB0aW9uXCJcblx0XHRcdFx0XHRcdFx0XHRuYW1lPVwiZGVzY3JpcHRpb25cIlxuXHRcdFx0XHRcdFx0XHRcdG9uQ2hhbmdlPXtoYW5kbGVJbnB1dENoYW5nZX1cblx0XHRcdFx0XHRcdFx0XHRwbGFjZWhvbGRlcj17dCgnZXZlbnREZXNjcmlwdGlvblBsYWNlaG9sZGVyJyl9XG5cdFx0XHRcdFx0XHRcdFx0dmFsdWU9e2Zvcm1WYWx1ZXMuZGVzY3JpcHRpb259XG5cdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTJcIj5cblx0XHRcdFx0XHRcdFx0PENoZWNrYm94XG5cdFx0XHRcdFx0XHRcdFx0Y2hlY2tlZD17aXNBbGxEYXl9XG5cdFx0XHRcdFx0XHRcdFx0aWQ9XCJhbGxEYXlcIlxuXHRcdFx0XHRcdFx0XHRcdG9uQ2hlY2tlZENoYW5nZT17KGNoZWNrZWQpID0+IHNldElzQWxsRGF5KGNoZWNrZWQgPT09IHRydWUpfVxuXHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHQ8TGFiZWwgY2xhc3NOYW1lPVwidGV4dC14cyBzbTp0ZXh0LXNtXCIgaHRtbEZvcj1cImFsbERheVwiPlxuXHRcdFx0XHRcdFx0XHRcdHt0KCdhbGxEYXknKX1cblx0XHRcdFx0XHRcdFx0PC9MYWJlbD5cblx0XHRcdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ3JpZC1jb2xzLTIgZ2FwLTIgc206Z2FwLTRcIj5cblx0XHRcdFx0XHRcdFx0PGRpdj5cblx0XHRcdFx0XHRcdFx0XHQ8TGFiZWwgY2xhc3NOYW1lPVwidGV4dC14cyBzbTp0ZXh0LXNtXCI+e3QoJ3N0YXJ0RGF0ZScpfTwvTGFiZWw+XG5cdFx0XHRcdFx0XHRcdFx0PERhdGVQaWNrZXJcblx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cIm10LTFcIlxuXHRcdFx0XHRcdFx0XHRcdFx0Y2xvc2VPblNlbGVjdFxuXHRcdFx0XHRcdFx0XHRcdFx0ZGF0ZT17c3RhcnREYXRlfVxuXHRcdFx0XHRcdFx0XHRcdFx0ZGlzYWJsZWQ9e2Rpc2FibGVkRGF0ZU1hdGNoZXJ9XG5cdFx0XHRcdFx0XHRcdFx0XHRvbkNoYW5nZT17aGFuZGxlU3RhcnREYXRlQ2hhbmdlfVxuXHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHQ8ZGl2PlxuXHRcdFx0XHRcdFx0XHRcdDxMYWJlbCBjbGFzc05hbWU9XCJ0ZXh0LXhzIHNtOnRleHQtc21cIj57dCgnZW5kRGF0ZScpfTwvTGFiZWw+XG5cdFx0XHRcdFx0XHRcdFx0PERhdGVQaWNrZXJcblx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cIm10LTFcIlxuXHRcdFx0XHRcdFx0XHRcdFx0Y2xvc2VPblNlbGVjdFxuXHRcdFx0XHRcdFx0XHRcdFx0ZGF0ZT17ZW5kRGF0ZX1cblx0XHRcdFx0XHRcdFx0XHRcdGRpc2FibGVkPXtkaXNhYmxlZERhdGVNYXRjaGVyfVxuXHRcdFx0XHRcdFx0XHRcdFx0b25DaGFuZ2U9e2hhbmRsZUVuZERhdGVDaGFuZ2V9XG5cdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblxuXHRcdFx0XHRcdFx0eyFpc0FsbERheSAmJiAoXG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBncmlkLWNvbHMtMiBnYXAtMiBzbTpnYXAtNFwiPlxuXHRcdFx0XHRcdFx0XHRcdDxkaXY+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8TGFiZWwgY2xhc3NOYW1lPVwidGV4dC14cyBzbTp0ZXh0LXNtXCI+e3QoJ3N0YXJ0VGltZScpfTwvTGFiZWw+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8VGltZVBpY2tlclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJtdC0xIGgtOCB0ZXh0LXNtIHNtOmgtOVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG1heFRpbWU9e3N0YXJ0Q29uc3RyYWludHMubWF4fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRtaW5UaW1lPXtzdGFydENvbnN0cmFpbnRzLm1pbn1cblx0XHRcdFx0XHRcdFx0XHRcdFx0bmFtZT1cInN0YXJ0LXRpbWVcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvbkNoYW5nZT17aGFuZGxlU3RhcnRUaW1lQ2hhbmdlfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aW1lRm9ybWF0PXt0aW1lRm9ybWF0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZT17c3RhcnRUaW1lfVxuXHRcdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0XHQ8ZGl2PlxuXHRcdFx0XHRcdFx0XHRcdFx0PExhYmVsIGNsYXNzTmFtZT1cInRleHQteHMgc206dGV4dC1zbVwiPnt0KCdlbmRUaW1lJyl9PC9MYWJlbD5cblx0XHRcdFx0XHRcdFx0XHRcdDxUaW1lUGlja2VyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cIm10LTEgaC04IHRleHQtc20gc206aC05XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0bWF4VGltZT17ZW5kQ29uc3RyYWludHMubWF4fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRtaW5UaW1lPXtlbmRDb25zdHJhaW50cy5taW59XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG5hbWU9XCJlbmQtdGltZVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9uQ2hhbmdlPXtoYW5kbGVFbmRUaW1lQ2hhbmdlfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aW1lRm9ybWF0PXt0aW1lRm9ybWF0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZT17ZW5kVGltZX1cblx0XHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0KX1cblxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJncmlkIGdhcC0xIHNtOmdhcC0yXCI+XG5cdFx0XHRcdFx0XHRcdDxMYWJlbCBjbGFzc05hbWU9XCJ0ZXh0LXhzIHNtOnRleHQtc21cIj57dCgnY29sb3InKX08L0xhYmVsPlxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC13cmFwIGdhcC0yXCI+XG5cdFx0XHRcdFx0XHRcdFx0e0NPTE9SX09QVElPTlMubWFwKChjb2xvcikgPT4gKFxuXHRcdFx0XHRcdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRhcmlhLWxhYmVsPXtjb2xvci5sYWJlbH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRgJHtjb2xvci52YWx1ZX0gaC02IHctNiByb3VuZGVkLWZ1bGwgc206aC04IHNtOnctOGAsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0c2VsZWN0ZWRDb2xvciA9PT0gY29sb3IudmFsdWUgJiZcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdyaW5nLTIgcmluZy1ibGFjayByaW5nLW9mZnNldC0xIHNtOnJpbmctb2Zmc2V0LTInXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGtleT17Y29sb3IudmFsdWV9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9uQ2xpY2s9eygpID0+IHNldFNlbGVjdGVkQ29sb3IoY29sb3IudmFsdWUpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyaWFudD1cImdob3N0XCJcblx0XHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdFx0KSl9XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBnYXAtMSBzbTpnYXAtMlwiPlxuXHRcdFx0XHRcdFx0XHQ8TGFiZWwgY2xhc3NOYW1lPVwidGV4dC14cyBzbTp0ZXh0LXNtXCIgaHRtbEZvcj1cImxvY2F0aW9uXCI+XG5cdFx0XHRcdFx0XHRcdFx0e3QoJ2xvY2F0aW9uJyl9XG5cdFx0XHRcdFx0XHRcdDwvTGFiZWw+XG5cdFx0XHRcdFx0XHRcdDxJbnB1dFxuXHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImgtOCB0ZXh0LXNtIHNtOmgtOVwiXG5cdFx0XHRcdFx0XHRcdFx0aWQ9XCJsb2NhdGlvblwiXG5cdFx0XHRcdFx0XHRcdFx0bmFtZT1cImxvY2F0aW9uXCJcblx0XHRcdFx0XHRcdFx0XHRvbkNoYW5nZT17aGFuZGxlSW5wdXRDaGFuZ2V9XG5cdFx0XHRcdFx0XHRcdFx0cGxhY2Vob2xkZXI9e3QoJ2V2ZW50TG9jYXRpb25QbGFjZWhvbGRlcicpfVxuXHRcdFx0XHRcdFx0XHRcdHZhbHVlPXtmb3JtVmFsdWVzLmxvY2F0aW9ufVxuXHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cblx0XHRcdFx0XHRcdHsvKiBSZWN1cnJlbmNlIFNlY3Rpb24gKi99XG5cdFx0XHRcdFx0XHQ8UmVjdXJyZW5jZUVkaXRvciBvbkNoYW5nZT17aGFuZGxlUlJ1bGVDaGFuZ2V9IHZhbHVlPXtycnVsZX0gLz5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PC9TY3JvbGxBcmVhPlxuXG5cdFx0XHRcdDxEaWFsb2dGb290ZXIgY2xhc3NOYW1lPVwibXQtNCBzaHJpbmstMCBmbGV4IGZsZXgtY29sLXJldmVyc2UgZ2FwLTIgc206ZmxleC1yb3cgc206Z2FwLTBcIj5cblx0XHRcdFx0XHR7c2VsZWN0ZWRFdmVudD8uaWQgJiYgKFxuXHRcdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJ3LWZ1bGwgc206bXItYXV0byBzbTp3LWF1dG9cIlxuXHRcdFx0XHRcdFx0XHRvbkNsaWNrPXtoYW5kbGVEZWxldGV9XG5cdFx0XHRcdFx0XHRcdHNpemU9XCJzbVwiXG5cdFx0XHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIlxuXHRcdFx0XHRcdFx0XHR2YXJpYW50PVwiZGVzdHJ1Y3RpdmVcIlxuXHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHR7dCgnZGVsZXRlJyl9XG5cdFx0XHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCB3LWZ1bGwgZ2FwLTIgc206dy1hdXRvXCI+XG5cdFx0XHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImZsZXgtMSBzbTpmbGV4LW5vbmVcIlxuXHRcdFx0XHRcdFx0XHRvbkNsaWNrPXtvbkNsb3NlfVxuXHRcdFx0XHRcdFx0XHRzaXplPVwic21cIlxuXHRcdFx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCJcblx0XHRcdFx0XHRcdFx0dmFyaWFudD1cIm91dGxpbmVcIlxuXHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHR7dCgnY2FuY2VsJyl9XG5cdFx0XHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdFx0XHRcdDxCdXR0b24gY2xhc3NOYW1lPVwiZmxleC0xIHNtOmZsZXgtbm9uZVwiIHNpemU9XCJzbVwiIHR5cGU9XCJzdWJtaXRcIj5cblx0XHRcdFx0XHRcdFx0e3NlbGVjdGVkRXZlbnQ/LmlkID8gdCgndXBkYXRlJykgOiB0KCdjcmVhdGUnKX1cblx0XHRcdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8L0RpYWxvZ0Zvb3Rlcj5cblx0XHRcdDwvZm9ybT5cblxuXHRcdFx0ey8qIFJlY3VycmluZyBFdmVudCBFZGl0IERpYWxvZyAqL31cblx0XHRcdDxSZWN1cnJlbmNlRWRpdERpYWxvZ1xuXHRcdFx0XHRldmVudFRpdGxlPXtkaWFsb2dTdGF0ZS5ldmVudD8udGl0bGUgfHwgJyd9XG5cdFx0XHRcdGlzT3Blbj17ZGlhbG9nU3RhdGUuaXNPcGVufVxuXHRcdFx0XHRvbkNsb3NlPXtjbG9zZURpYWxvZ31cblx0XHRcdFx0b25Db25maXJtPXtoYW5kbGVDb25maXJtfVxuXHRcdFx0XHRvcGVyYXRpb25UeXBlPXtkaWFsb2dTdGF0ZS5vcGVyYXRpb25UeXBlfVxuXHRcdFx0Lz5cblx0XHQ8Lz5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgKiBhcyBDaGVja2JveFByaW1pdGl2ZSBmcm9tICdAcmFkaXgtdWkvcmVhY3QtY2hlY2tib3gnXG5pbXBvcnQgeyBDaGVja0ljb24gfSBmcm9tICdsdWNpZGUtcmVhY3QnXG5pbXBvcnQgdHlwZSAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5mdW5jdGlvbiBDaGVja2JveCh7XG5cdGNsYXNzTmFtZSxcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBDaGVja2JveFByaW1pdGl2ZS5Sb290Pikge1xuXHRyZXR1cm4gKFxuXHRcdDxDaGVja2JveFByaW1pdGl2ZS5Sb290XG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQncGVlciBib3JkZXItaW5wdXQgZGFyazpiZy1pbnB1dC8zMCBkYXRhLVtzdGF0ZT1jaGVja2VkXTpiZy1wcmltYXJ5IGRhdGEtW3N0YXRlPWNoZWNrZWRdOnRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIGRhcms6ZGF0YS1bc3RhdGU9Y2hlY2tlZF06YmctcHJpbWFyeSBkYXRhLVtzdGF0ZT1jaGVja2VkXTpib3JkZXItcHJpbWFyeSBmb2N1cy12aXNpYmxlOmJvcmRlci1yaW5nIGZvY3VzLXZpc2libGU6cmluZy1yaW5nLzUwIGFyaWEtaW52YWxpZDpyaW5nLWRlc3RydWN0aXZlLzIwIGRhcms6YXJpYS1pbnZhbGlkOnJpbmctZGVzdHJ1Y3RpdmUvNDAgYXJpYS1pbnZhbGlkOmJvcmRlci1kZXN0cnVjdGl2ZSBzaXplLTQgc2hyaW5rLTAgcm91bmRlZC1bNHB4XSBib3JkZXIgc2hhZG93LXhzIHRyYW5zaXRpb24tc2hhZG93IG91dGxpbmUtbm9uZSBmb2N1cy12aXNpYmxlOnJpbmctWzNweF0gZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIGRpc2FibGVkOm9wYWNpdHktNTAnLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJjaGVja2JveFwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0PlxuXHRcdFx0PENoZWNrYm94UHJpbWl0aXZlLkluZGljYXRvclxuXHRcdFx0XHRjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB0ZXh0LWN1cnJlbnQgdHJhbnNpdGlvbi1ub25lXCJcblx0XHRcdFx0ZGF0YS1zbG90PVwiY2hlY2tib3gtaW5kaWNhdG9yXCJcblx0XHRcdD5cblx0XHRcdFx0PENoZWNrSWNvbiBjbGFzc05hbWU9XCJzaXplLTMuNVwiIC8+XG5cdFx0XHQ8L0NoZWNrYm94UHJpbWl0aXZlLkluZGljYXRvcj5cblx0XHQ8L0NoZWNrYm94UHJpbWl0aXZlLlJvb3Q+XG5cdClcbn1cblxuZXhwb3J0IHsgQ2hlY2tib3ggfVxuIiwKICAgICJpbXBvcnQgeyBQb3BvdmVyQ2xvc2UgfSBmcm9tICdAcmFkaXgtdWkvcmVhY3QtcG9wb3ZlcidcbmltcG9ydCB7IENhbGVuZGFyIGFzIENhbGVuZGFySWNvbiB9IGZyb20gJ2x1Y2lkZS1yZWFjdCdcbmltcG9ydCB7IHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBNYXRjaGVyIH0gZnJvbSAncmVhY3QtZGF5LXBpY2tlcidcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9idXR0b24nXG5pbXBvcnQgeyBDYWxlbmRhciB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9jYWxlbmRhcidcbmltcG9ydCB7XG5cdFBvcG92ZXIsXG5cdFBvcG92ZXJDb250ZW50LFxuXHRQb3BvdmVyVHJpZ2dlcixcbn0gZnJvbSAnQC9jb21wb25lbnRzL3VpL3BvcG92ZXInXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5pbnRlcmZhY2UgRGF0ZVBpY2tlclByb3BzIHtcblx0ZGF0ZTogRGF0ZSB8IHVuZGVmaW5lZFxuXHRvbkNoYW5nZT86IChkYXRlOiBEYXRlIHwgdW5kZWZpbmVkKSA9PiB2b2lkXG5cdGxhYmVsPzogc3RyaW5nXG5cdGNsYXNzTmFtZT86IHN0cmluZ1xuXHRjbG9zZU9uU2VsZWN0PzogYm9vbGVhblxuXHRkaXNhYmxlZD86IE1hdGNoZXIgfCBNYXRjaGVyW11cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIERhdGVQaWNrZXIoe1xuXHRkYXRlLFxuXHRjbG9zZU9uU2VsZWN0LFxuXHRvbkNoYW5nZSxcblx0bGFiZWwgPSAnUGljayBhIGRhdGUnLFxuXHRjbGFzc05hbWUsXG5cdGRpc2FibGVkLFxufTogRGF0ZVBpY2tlclByb3BzKSB7XG5cdGNvbnN0IHBvcE92ZXJSZWYgPSB1c2VSZWY8SFRNTEJ1dHRvbkVsZW1lbnQgfCBudWxsPihudWxsKVxuXHRjb25zdCBbc2VsZWN0ZWREYXRlLCBzZXRTZWxlY3RlZERhdGVdID0gdXNlU3RhdGU8RGF0ZSB8IHVuZGVmaW5lZD4oZGF0ZSlcblxuXHQvLyBTeW5jIGRhdGUgc3RhdGUgd2l0aCBkYXRlIHByb3Bcblx0dXNlRWZmZWN0KCgpID0+IHtcblx0XHRzZXRTZWxlY3RlZERhdGUoZGF0ZSlcblx0fSwgW2RhdGVdKVxuXG5cdGNvbnN0IGhhbmRsZURhdGVTZWxlY3QgPSAoZGF0ZTogRGF0ZSB8IHVuZGVmaW5lZCkgPT4ge1xuXHRcdHNldFNlbGVjdGVkRGF0ZShkYXRlKVxuXHRcdGlmIChjbG9zZU9uU2VsZWN0KSB7XG5cdFx0XHRwb3BPdmVyUmVmLmN1cnJlbnQ/LmNsaWNrKClcblx0XHR9XG5cdFx0b25DaGFuZ2U/LihkYXRlKVxuXHR9XG5cblx0cmV0dXJuIChcblx0XHQ8ZGl2IGNsYXNzTmFtZT17Y2xhc3NOYW1lfT5cblx0XHRcdDxQb3BvdmVyPlxuXHRcdFx0XHQ8UG9wb3ZlclRyaWdnZXIgYXNDaGlsZD5cblx0XHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0XHQnZGF0YS1bZW1wdHk9dHJ1ZV06dGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHctZnVsbCBqdXN0aWZ5LXN0YXJ0IHRleHQtbGVmdCBmb250LW5vcm1hbCdcblx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRkYXRhLWVtcHR5PXshZGF0ZX1cblx0XHRcdFx0XHRcdHZhcmlhbnQ9XCJvdXRsaW5lXCJcblx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHQ8Q2FsZW5kYXJJY29uIC8+XG5cdFx0XHRcdFx0XHR7c2VsZWN0ZWREYXRlID8gKFxuXHRcdFx0XHRcdFx0XHRkYXlqcyhzZWxlY3RlZERhdGUpLmZvcm1hdCgnTU1NIEQsIFlZWVknKVxuXHRcdFx0XHRcdFx0KSA6IChcblx0XHRcdFx0XHRcdFx0PHNwYW4+e2xhYmVsfTwvc3Bhbj5cblx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHRcdDwvUG9wb3ZlclRyaWdnZXI+XG5cdFx0XHRcdDxQb3BvdmVyQ29udGVudCBhbGlnbj1cInN0YXJ0XCIgY2xhc3NOYW1lPVwidy1hdXRvIHAtMFwiPlxuXHRcdFx0XHRcdDxQb3BvdmVyQ2xvc2UgcmVmPXtwb3BPdmVyUmVmfSAvPlxuXHRcdFx0XHRcdDxDYWxlbmRhclxuXHRcdFx0XHRcdFx0Y2FwdGlvbkxheW91dD1cImRyb3Bkb3duXCJcblx0XHRcdFx0XHRcdGRlZmF1bHRNb250aD17c2VsZWN0ZWREYXRlfVxuXHRcdFx0XHRcdFx0ZGlzYWJsZWQ9e2Rpc2FibGVkfVxuXHRcdFx0XHRcdFx0bW9kZT1cInNpbmdsZVwiXG5cdFx0XHRcdFx0XHRvblNlbGVjdD17aGFuZGxlRGF0ZVNlbGVjdH1cblx0XHRcdFx0XHRcdHNlbGVjdGVkPXtzZWxlY3RlZERhdGV9XG5cdFx0XHRcdFx0Lz5cblx0XHRcdFx0PC9Qb3BvdmVyQ29udGVudD5cblx0XHRcdDwvUG9wb3Zlcj5cblx0XHQ8L2Rpdj5cblx0KVxufVxuIiwKICAgICJpbXBvcnQge1xuXHRDaGV2cm9uRG93bkljb24sXG5cdENoZXZyb25MZWZ0SWNvbixcblx0Q2hldnJvblJpZ2h0SWNvbixcbn0gZnJvbSAnbHVjaWRlLXJlYWN0J1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IERheUJ1dHRvbiB9IGZyb20gJ3JlYWN0LWRheS1waWNrZXInXG5pbXBvcnQgeyBEYXlQaWNrZXIsIGdldERlZmF1bHRDbGFzc05hbWVzIH0gZnJvbSAncmVhY3QtZGF5LXBpY2tlcidcbmltcG9ydCB7IEJ1dHRvbiwgYnV0dG9uVmFyaWFudHMgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvYnV0dG9uJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuZnVuY3Rpb24gQ2FsZW5kYXIoe1xuXHRjbGFzc05hbWUsXG5cdGNsYXNzTmFtZXMsXG5cdHNob3dPdXRzaWRlRGF5cyA9IHRydWUsXG5cdGNhcHRpb25MYXlvdXQgPSAnbGFiZWwnLFxuXHRidXR0b25WYXJpYW50ID0gJ2dob3N0Jyxcblx0Zm9ybWF0dGVycyxcblx0Y29tcG9uZW50cyxcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBEYXlQaWNrZXI+ICYge1xuXHRidXR0b25WYXJpYW50PzogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIEJ1dHRvbj5bJ3ZhcmlhbnQnXVxufSkge1xuXHRjb25zdCBkZWZhdWx0Q2xhc3NOYW1lcyA9IGdldERlZmF1bHRDbGFzc05hbWVzKClcblxuXHRyZXR1cm4gKFxuXHRcdDxEYXlQaWNrZXJcblx0XHRcdGNhcHRpb25MYXlvdXQ9e2NhcHRpb25MYXlvdXR9XG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQnYmctYmFja2dyb3VuZCBncm91cC9jYWxlbmRhciBwLTMgWy0tY2VsbC1zaXplOi0tc3BhY2luZyg4KV0gW1tkYXRhLXNsb3Q9Y2FyZC1jb250ZW50XV8mXTpiZy10cmFuc3BhcmVudCBbW2RhdGEtc2xvdD1wb3BvdmVyLWNvbnRlbnRdXyZdOmJnLXRyYW5zcGFyZW50Jyxcblx0XHRcdFx0U3RyaW5nLnJhd2BydGw6Kio6Wy5yZHAtYnV0dG9uXFxfbmV4dD5zdmddOnJvdGF0ZS0xODBgLFxuXHRcdFx0XHRTdHJpbmcucmF3YHJ0bDoqKjpbLnJkcC1idXR0b25cXF9wcmV2aW91cz5zdmddOnJvdGF0ZS0xODBgLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRjbGFzc05hbWVzPXt7XG5cdFx0XHRcdHJvb3Q6IGNuKCd3LWZpdCcsIGRlZmF1bHRDbGFzc05hbWVzLnJvb3QpLFxuXHRcdFx0XHRtb250aHM6IGNuKFxuXHRcdFx0XHRcdCdmbGV4IGdhcC00IGZsZXgtY29sIG1kOmZsZXgtcm93IHJlbGF0aXZlJyxcblx0XHRcdFx0XHRkZWZhdWx0Q2xhc3NOYW1lcy5tb250aHNcblx0XHRcdFx0KSxcblx0XHRcdFx0bW9udGg6IGNuKCdmbGV4IGZsZXgtY29sIHctZnVsbCBnYXAtNCcsIGRlZmF1bHRDbGFzc05hbWVzLm1vbnRoKSxcblx0XHRcdFx0bmF2OiBjbihcblx0XHRcdFx0XHQnZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEgdy1mdWxsIGFic29sdXRlIHRvcC0wIGluc2V0LXgtMCBqdXN0aWZ5LWJldHdlZW4nLFxuXHRcdFx0XHRcdGRlZmF1bHRDbGFzc05hbWVzLm5hdlxuXHRcdFx0XHQpLFxuXHRcdFx0XHRidXR0b25fcHJldmlvdXM6IGNuKFxuXHRcdFx0XHRcdGJ1dHRvblZhcmlhbnRzKHsgdmFyaWFudDogYnV0dG9uVmFyaWFudCB9KSxcblx0XHRcdFx0XHQnc2l6ZS0oLS1jZWxsLXNpemUpIGFyaWEtZGlzYWJsZWQ6b3BhY2l0eS01MCBwLTAgc2VsZWN0LW5vbmUnLFxuXHRcdFx0XHRcdGRlZmF1bHRDbGFzc05hbWVzLmJ1dHRvbl9wcmV2aW91c1xuXHRcdFx0XHQpLFxuXHRcdFx0XHRidXR0b25fbmV4dDogY24oXG5cdFx0XHRcdFx0YnV0dG9uVmFyaWFudHMoeyB2YXJpYW50OiBidXR0b25WYXJpYW50IH0pLFxuXHRcdFx0XHRcdCdzaXplLSgtLWNlbGwtc2l6ZSkgYXJpYS1kaXNhYmxlZDpvcGFjaXR5LTUwIHAtMCBzZWxlY3Qtbm9uZScsXG5cdFx0XHRcdFx0ZGVmYXVsdENsYXNzTmFtZXMuYnV0dG9uX25leHRcblx0XHRcdFx0KSxcblx0XHRcdFx0bW9udGhfY2FwdGlvbjogY24oXG5cdFx0XHRcdFx0J2ZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGgtKC0tY2VsbC1zaXplKSB3LWZ1bGwgcHgtKC0tY2VsbC1zaXplKScsXG5cdFx0XHRcdFx0ZGVmYXVsdENsYXNzTmFtZXMubW9udGhfY2FwdGlvblxuXHRcdFx0XHQpLFxuXHRcdFx0XHRkcm9wZG93bnM6IGNuKFxuXHRcdFx0XHRcdCd3LWZ1bGwgZmxleCBpdGVtcy1jZW50ZXIgdGV4dC1zbSBmb250LW1lZGl1bSBqdXN0aWZ5LWNlbnRlciBoLSgtLWNlbGwtc2l6ZSkgZ2FwLTEuNScsXG5cdFx0XHRcdFx0ZGVmYXVsdENsYXNzTmFtZXMuZHJvcGRvd25zXG5cdFx0XHRcdCksXG5cdFx0XHRcdGRyb3Bkb3duX3Jvb3Q6IGNuKFxuXHRcdFx0XHRcdCdyZWxhdGl2ZSBoYXMtZm9jdXM6Ym9yZGVyLXJpbmcgYm9yZGVyIGJvcmRlci1pbnB1dCBzaGFkb3cteHMgaGFzLWZvY3VzOnJpbmctcmluZy81MCBoYXMtZm9jdXM6cmluZy1bM3B4XSByb3VuZGVkLW1kJyxcblx0XHRcdFx0XHRkZWZhdWx0Q2xhc3NOYW1lcy5kcm9wZG93bl9yb290XG5cdFx0XHRcdCksXG5cdFx0XHRcdGRyb3Bkb3duOiBjbihcblx0XHRcdFx0XHQnYWJzb2x1dGUgYmctcG9wb3ZlciBpbnNldC0wIG9wYWNpdHktMCcsXG5cdFx0XHRcdFx0ZGVmYXVsdENsYXNzTmFtZXMuZHJvcGRvd25cblx0XHRcdFx0KSxcblx0XHRcdFx0Y2FwdGlvbl9sYWJlbDogY24oXG5cdFx0XHRcdFx0J3NlbGVjdC1ub25lIGZvbnQtbWVkaXVtJyxcblx0XHRcdFx0XHRjYXB0aW9uTGF5b3V0ID09PSAnbGFiZWwnXG5cdFx0XHRcdFx0XHQ/ICd0ZXh0LXNtJ1xuXHRcdFx0XHRcdFx0OiAncm91bmRlZC1tZCBwbC0yIHByLTEgZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEgdGV4dC1zbSBoLTggWyY+c3ZnXTp0ZXh0LW11dGVkLWZvcmVncm91bmQgWyY+c3ZnXTpzaXplLTMuNScsXG5cdFx0XHRcdFx0ZGVmYXVsdENsYXNzTmFtZXMuY2FwdGlvbl9sYWJlbFxuXHRcdFx0XHQpLFxuXHRcdFx0XHR0YWJsZTogJ3ctZnVsbCBib3JkZXItY29sbGFwc2UnLFxuXHRcdFx0XHR3ZWVrZGF5czogY24oJ2ZsZXgnLCBkZWZhdWx0Q2xhc3NOYW1lcy53ZWVrZGF5cyksXG5cdFx0XHRcdHdlZWtkYXk6IGNuKFxuXHRcdFx0XHRcdCd0ZXh0LW11dGVkLWZvcmVncm91bmQgcm91bmRlZC1tZCBmbGV4LTEgZm9udC1ub3JtYWwgdGV4dC1bMC44cmVtXSBzZWxlY3Qtbm9uZScsXG5cdFx0XHRcdFx0ZGVmYXVsdENsYXNzTmFtZXMud2Vla2RheVxuXHRcdFx0XHQpLFxuXHRcdFx0XHR3ZWVrOiBjbignZmxleCB3LWZ1bGwgbXQtMicsIGRlZmF1bHRDbGFzc05hbWVzLndlZWspLFxuXHRcdFx0XHR3ZWVrX251bWJlcl9oZWFkZXI6IGNuKFxuXHRcdFx0XHRcdCdzZWxlY3Qtbm9uZSB3LSgtLWNlbGwtc2l6ZSknLFxuXHRcdFx0XHRcdGRlZmF1bHRDbGFzc05hbWVzLndlZWtfbnVtYmVyX2hlYWRlclxuXHRcdFx0XHQpLFxuXHRcdFx0XHR3ZWVrX251bWJlcjogY24oXG5cdFx0XHRcdFx0J3RleHQtWzAuOHJlbV0gc2VsZWN0LW5vbmUgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kJyxcblx0XHRcdFx0XHRkZWZhdWx0Q2xhc3NOYW1lcy53ZWVrX251bWJlclxuXHRcdFx0XHQpLFxuXHRcdFx0XHRkYXk6IGNuKFxuXHRcdFx0XHRcdCdyZWxhdGl2ZSB3LWZ1bGwgaC1mdWxsIHAtMCB0ZXh0LWNlbnRlciBbJjpsYXN0LWNoaWxkW2RhdGEtc2VsZWN0ZWQ9dHJ1ZV1fYnV0dG9uXTpyb3VuZGVkLXItbWQgZ3JvdXAvZGF5IGFzcGVjdC1zcXVhcmUgc2VsZWN0LW5vbmUnLFxuXHRcdFx0XHRcdHByb3BzLnNob3dXZWVrTnVtYmVyXG5cdFx0XHRcdFx0XHQ/ICdbJjpudGgtY2hpbGQoMilbZGF0YS1zZWxlY3RlZD10cnVlXV9idXR0b25dOnJvdW5kZWQtbC1tZCdcblx0XHRcdFx0XHRcdDogJ1smOmZpcnN0LWNoaWxkW2RhdGEtc2VsZWN0ZWQ9dHJ1ZV1fYnV0dG9uXTpyb3VuZGVkLWwtbWQnLFxuXHRcdFx0XHRcdGRlZmF1bHRDbGFzc05hbWVzLmRheVxuXHRcdFx0XHQpLFxuXHRcdFx0XHRyYW5nZV9zdGFydDogY24oXG5cdFx0XHRcdFx0J3JvdW5kZWQtbC1tZCBiZy1hY2NlbnQnLFxuXHRcdFx0XHRcdGRlZmF1bHRDbGFzc05hbWVzLnJhbmdlX3N0YXJ0XG5cdFx0XHRcdCksXG5cdFx0XHRcdHJhbmdlX21pZGRsZTogY24oJ3JvdW5kZWQtbm9uZScsIGRlZmF1bHRDbGFzc05hbWVzLnJhbmdlX21pZGRsZSksXG5cdFx0XHRcdHJhbmdlX2VuZDogY24oJ3JvdW5kZWQtci1tZCBiZy1hY2NlbnQnLCBkZWZhdWx0Q2xhc3NOYW1lcy5yYW5nZV9lbmQpLFxuXHRcdFx0XHR0b2RheTogY24oXG5cdFx0XHRcdFx0J2JnLWFjY2VudCB0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kIHJvdW5kZWQtbWQgZGF0YS1bc2VsZWN0ZWQ9dHJ1ZV06cm91bmRlZC1ub25lJyxcblx0XHRcdFx0XHRkZWZhdWx0Q2xhc3NOYW1lcy50b2RheVxuXHRcdFx0XHQpLFxuXHRcdFx0XHRvdXRzaWRlOiBjbihcblx0XHRcdFx0XHQndGV4dC1tdXRlZC1mb3JlZ3JvdW5kIGFyaWEtc2VsZWN0ZWQ6dGV4dC1tdXRlZC1mb3JlZ3JvdW5kJyxcblx0XHRcdFx0XHRkZWZhdWx0Q2xhc3NOYW1lcy5vdXRzaWRlXG5cdFx0XHRcdCksXG5cdFx0XHRcdGRpc2FibGVkOiBjbihcblx0XHRcdFx0XHQndGV4dC1tdXRlZC1mb3JlZ3JvdW5kIG9wYWNpdHktNTAnLFxuXHRcdFx0XHRcdGRlZmF1bHRDbGFzc05hbWVzLmRpc2FibGVkXG5cdFx0XHRcdCksXG5cdFx0XHRcdGhpZGRlbjogY24oJ2ludmlzaWJsZScsIGRlZmF1bHRDbGFzc05hbWVzLmhpZGRlbiksXG5cdFx0XHRcdC4uLmNsYXNzTmFtZXMsXG5cdFx0XHR9fVxuXHRcdFx0Y29tcG9uZW50cz17e1xuXHRcdFx0XHRSb290OiAoeyBjbGFzc05hbWUsIHJvb3RSZWYsIC4uLnByb3BzIH0pID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKGNsYXNzTmFtZSl9XG5cdFx0XHRcdFx0XHRcdGRhdGEtc2xvdD1cImNhbGVuZGFyXCJcblx0XHRcdFx0XHRcdFx0cmVmPXtyb290UmVmfVxuXHRcdFx0XHRcdFx0XHR7Li4ucHJvcHN9XG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdClcblx0XHRcdFx0fSxcblx0XHRcdFx0Q2hldnJvbjogKHsgY2xhc3NOYW1lLCBvcmllbnRhdGlvbiwgLi4ucHJvcHMgfSkgPT4ge1xuXHRcdFx0XHRcdGlmIChvcmllbnRhdGlvbiA9PT0gJ2xlZnQnKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHQ8Q2hldnJvbkxlZnRJY29uIGNsYXNzTmFtZT17Y24oJ3NpemUtNCcsIGNsYXNzTmFtZSl9IHsuLi5wcm9wc30gLz5cblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAob3JpZW50YXRpb24gPT09ICdyaWdodCcpIHtcblx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdDxDaGV2cm9uUmlnaHRJY29uXG5cdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbignc2l6ZS00JywgY2xhc3NOYW1lKX1cblx0XHRcdFx0XHRcdFx0XHR7Li4ucHJvcHN9XG5cdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdDxDaGV2cm9uRG93bkljb24gY2xhc3NOYW1lPXtjbignc2l6ZS00JywgY2xhc3NOYW1lKX0gey4uLnByb3BzfSAvPlxuXHRcdFx0XHRcdClcblx0XHRcdFx0fSxcblx0XHRcdFx0RGF5QnV0dG9uOiBDYWxlbmRhckRheUJ1dHRvbixcblx0XHRcdFx0V2Vla051bWJlcjogKHsgY2hpbGRyZW4sIC4uLnByb3BzIH0pID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0PHRkIHsuLi5wcm9wc30+XG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBzaXplLSgtLWNlbGwtc2l6ZSkgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRleHQtY2VudGVyXCI+XG5cdFx0XHRcdFx0XHRcdFx0e2NoaWxkcmVufVxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdDwvdGQ+XG5cdFx0XHRcdFx0KVxuXHRcdFx0XHR9LFxuXHRcdFx0XHQuLi5jb21wb25lbnRzLFxuXHRcdFx0fX1cblx0XHRcdGZvcm1hdHRlcnM9e3tcblx0XHRcdFx0Zm9ybWF0TW9udGhEcm9wZG93bjogKGRhdGUpID0+XG5cdFx0XHRcdFx0ZGF0ZS50b0xvY2FsZVN0cmluZygnZGVmYXVsdCcsIHsgbW9udGg6ICdzaG9ydCcgfSksXG5cdFx0XHRcdC4uLmZvcm1hdHRlcnMsXG5cdFx0XHR9fVxuXHRcdFx0c2hvd091dHNpZGVEYXlzPXtzaG93T3V0c2lkZURheXN9XG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0Lz5cblx0KVxufVxuXG5mdW5jdGlvbiBDYWxlbmRhckRheUJ1dHRvbih7XG5cdGNsYXNzTmFtZSxcblx0ZGF5LFxuXHRtb2RpZmllcnMsXG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgRGF5QnV0dG9uPikge1xuXHRjb25zdCBkZWZhdWx0Q2xhc3NOYW1lcyA9IGdldERlZmF1bHRDbGFzc05hbWVzKClcblxuXHRjb25zdCByZWYgPSBSZWFjdC51c2VSZWY8SFRNTEJ1dHRvbkVsZW1lbnQ+KG51bGwpXG5cdFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG5cdFx0aWYgKG1vZGlmaWVycy5mb2N1c2VkKSB7XG5cdFx0XHRyZWYuY3VycmVudD8uZm9jdXMoKVxuXHRcdH1cblx0fSwgW21vZGlmaWVycy5mb2N1c2VkXSlcblxuXHRyZXR1cm4gKFxuXHRcdDxCdXR0b25cblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCdkYXRhLVtzZWxlY3RlZC1zaW5nbGU9dHJ1ZV06YmctcHJpbWFyeSBkYXRhLVtzZWxlY3RlZC1zaW5nbGU9dHJ1ZV06dGV4dC1wcmltYXJ5LWZvcmVncm91bmQgZGF0YS1bcmFuZ2UtbWlkZGxlPXRydWVdOmJnLWFjY2VudCBkYXRhLVtyYW5nZS1taWRkbGU9dHJ1ZV06dGV4dC1hY2NlbnQtZm9yZWdyb3VuZCBkYXRhLVtyYW5nZS1zdGFydD10cnVlXTpiZy1wcmltYXJ5IGRhdGEtW3JhbmdlLXN0YXJ0PXRydWVdOnRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIGRhdGEtW3JhbmdlLWVuZD10cnVlXTpiZy1wcmltYXJ5IGRhdGEtW3JhbmdlLWVuZD10cnVlXTp0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCBncm91cC1kYXRhLVtmb2N1c2VkPXRydWVdL2RheTpib3JkZXItcmluZyBncm91cC1kYXRhLVtmb2N1c2VkPXRydWVdL2RheTpyaW5nLXJpbmcvNTAgZGFyazpob3Zlcjp0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kIGZsZXggYXNwZWN0LXNxdWFyZSBzaXplLWF1dG8gdy1mdWxsIG1pbi13LSgtLWNlbGwtc2l6ZSkgZmxleC1jb2wgZ2FwLTEgbGVhZGluZy1ub25lIGZvbnQtbm9ybWFsIGdyb3VwLWRhdGEtW2ZvY3VzZWQ9dHJ1ZV0vZGF5OnJlbGF0aXZlIGdyb3VwLWRhdGEtW2ZvY3VzZWQ9dHJ1ZV0vZGF5OnotMTAgZ3JvdXAtZGF0YS1bZm9jdXNlZD10cnVlXS9kYXk6cmluZy1bM3B4XSBkYXRhLVtyYW5nZS1lbmQ9dHJ1ZV06cm91bmRlZC1tZCBkYXRhLVtyYW5nZS1lbmQ9dHJ1ZV06cm91bmRlZC1yLW1kIGRhdGEtW3JhbmdlLW1pZGRsZT10cnVlXTpyb3VuZGVkLW5vbmUgZGF0YS1bcmFuZ2Utc3RhcnQ9dHJ1ZV06cm91bmRlZC1tZCBkYXRhLVtyYW5nZS1zdGFydD10cnVlXTpyb3VuZGVkLWwtbWQgWyY+c3Bhbl06dGV4dC14cyBbJj5zcGFuXTpvcGFjaXR5LTcwJyxcblx0XHRcdFx0ZGVmYXVsdENsYXNzTmFtZXMuZGF5LFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLWRheT17ZGF5LmRhdGUudG9Mb2NhbGVEYXRlU3RyaW5nKCl9XG5cdFx0XHRkYXRhLXJhbmdlLWVuZD17bW9kaWZpZXJzLnJhbmdlX2VuZH1cblx0XHRcdGRhdGEtcmFuZ2UtbWlkZGxlPXttb2RpZmllcnMucmFuZ2VfbWlkZGxlfVxuXHRcdFx0ZGF0YS1yYW5nZS1zdGFydD17bW9kaWZpZXJzLnJhbmdlX3N0YXJ0fVxuXHRcdFx0ZGF0YS1zZWxlY3RlZC1zaW5nbGU9e1xuXHRcdFx0XHRtb2RpZmllcnMuc2VsZWN0ZWQgJiZcblx0XHRcdFx0IW1vZGlmaWVycy5yYW5nZV9zdGFydCAmJlxuXHRcdFx0XHQhbW9kaWZpZXJzLnJhbmdlX2VuZCAmJlxuXHRcdFx0XHQhbW9kaWZpZXJzLnJhbmdlX21pZGRsZVxuXHRcdFx0fVxuXHRcdFx0cmVmPXtyZWZ9XG5cdFx0XHRzaXplPVwiaWNvblwiXG5cdFx0XHR2YXJpYW50PVwiZ2hvc3RcIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdC8+XG5cdClcbn1cblxuZXhwb3J0IHsgQ2FsZW5kYXIsIENhbGVuZGFyRGF5QnV0dG9uIH1cbiIsCiAgICAiaW1wb3J0ICogYXMgUG9wb3ZlclByaW1pdGl2ZSBmcm9tICdAcmFkaXgtdWkvcmVhY3QtcG9wb3ZlcidcbmltcG9ydCB0eXBlICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmZ1bmN0aW9uIFBvcG92ZXIoe1xuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFBvcG92ZXJQcmltaXRpdmUuUm9vdD4pIHtcblx0cmV0dXJuIDxQb3BvdmVyUHJpbWl0aXZlLlJvb3QgZGF0YS1zbG90PVwicG9wb3ZlclwiIHsuLi5wcm9wc30gLz5cbn1cblxuZnVuY3Rpb24gUG9wb3ZlclRyaWdnZXIoe1xuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFBvcG92ZXJQcmltaXRpdmUuVHJpZ2dlcj4pIHtcblx0cmV0dXJuIDxQb3BvdmVyUHJpbWl0aXZlLlRyaWdnZXIgZGF0YS1zbG90PVwicG9wb3Zlci10cmlnZ2VyXCIgey4uLnByb3BzfSAvPlxufVxuXG5mdW5jdGlvbiBQb3BvdmVyQ29udGVudCh7XG5cdGNsYXNzTmFtZSxcblx0YWxpZ24gPSAnY2VudGVyJyxcblx0c2lkZU9mZnNldCA9IDQsXG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgUG9wb3ZlclByaW1pdGl2ZS5Db250ZW50Pikge1xuXHRyZXR1cm4gKFxuXHRcdDxQb3BvdmVyUHJpbWl0aXZlLlBvcnRhbD5cblx0XHRcdDxQb3BvdmVyUHJpbWl0aXZlLkNvbnRlbnRcblx0XHRcdFx0YWxpZ249e2FsaWdufVxuXHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdCdiZy1wb3BvdmVyIHRleHQtcG9wb3Zlci1mb3JlZ3JvdW5kIGRhdGEtW3N0YXRlPW9wZW5dOmFuaW1hdGUtaW4gZGF0YS1bc3RhdGU9Y2xvc2VkXTphbmltYXRlLW91dCBkYXRhLVtzdGF0ZT1jbG9zZWRdOmZhZGUtb3V0LTAgZGF0YS1bc3RhdGU9b3Blbl06ZmFkZS1pbi0wIGRhdGEtW3N0YXRlPWNsb3NlZF06em9vbS1vdXQtOTUgZGF0YS1bc3RhdGU9b3Blbl06em9vbS1pbi05NSBkYXRhLVtzaWRlPWJvdHRvbV06c2xpZGUtaW4tZnJvbS10b3AtMiBkYXRhLVtzaWRlPWxlZnRdOnNsaWRlLWluLWZyb20tcmlnaHQtMiBkYXRhLVtzaWRlPXJpZ2h0XTpzbGlkZS1pbi1mcm9tLWxlZnQtMiBkYXRhLVtzaWRlPXRvcF06c2xpZGUtaW4tZnJvbS1ib3R0b20tMiB6LTUwIHctNzIgb3JpZ2luLSgtLXJhZGl4LXBvcG92ZXItY29udGVudC10cmFuc2Zvcm0tb3JpZ2luKSByb3VuZGVkLW1kIGJvcmRlciBwLTQgc2hhZG93LW1kIG91dGxpbmUtaGlkZGVuJyxcblx0XHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdFx0KX1cblx0XHRcdFx0ZGF0YS1zbG90PVwicG9wb3Zlci1jb250ZW50XCJcblx0XHRcdFx0c2lkZU9mZnNldD17c2lkZU9mZnNldH1cblx0XHRcdFx0ey4uLnByb3BzfVxuXHRcdFx0Lz5cblx0XHQ8L1BvcG92ZXJQcmltaXRpdmUuUG9ydGFsPlxuXHQpXG59XG5cbmZ1bmN0aW9uIFBvcG92ZXJBbmNob3Ioe1xuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFBvcG92ZXJQcmltaXRpdmUuQW5jaG9yPikge1xuXHRyZXR1cm4gPFBvcG92ZXJQcmltaXRpdmUuQW5jaG9yIGRhdGEtc2xvdD1cInBvcG92ZXItYW5jaG9yXCIgey4uLnByb3BzfSAvPlxufVxuXG5leHBvcnQgeyBQb3BvdmVyLCBQb3BvdmVyVHJpZ2dlciwgUG9wb3ZlckNvbnRlbnQsIFBvcG92ZXJBbmNob3IgfVxuIiwKICAgICJpbXBvcnQgdHlwZSAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5mdW5jdGlvbiBJbnB1dCh7IGNsYXNzTmFtZSwgdHlwZSwgLi4ucHJvcHMgfTogUmVhY3QuQ29tcG9uZW50UHJvcHM8J2lucHV0Jz4pIHtcblx0cmV0dXJuIChcblx0XHQ8aW5wdXRcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCdmaWxlOnRleHQtZm9yZWdyb3VuZCBwbGFjZWhvbGRlcjp0ZXh0LW11dGVkLWZvcmVncm91bmQgc2VsZWN0aW9uOmJnLXByaW1hcnkgc2VsZWN0aW9uOnRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIGRhcms6YmctaW5wdXQvMzAgYm9yZGVyLWlucHV0IGZsZXggaC05IHctZnVsbCBtaW4tdy0wIHJvdW5kZWQtbWQgYm9yZGVyIGJnLXRyYW5zcGFyZW50IHB4LTMgcHktMSB0ZXh0LWJhc2Ugc2hhZG93LXhzIHRyYW5zaXRpb24tW2NvbG9yLGJveC1zaGFkb3ddIG91dGxpbmUtbm9uZSBmaWxlOmlubGluZS1mbGV4IGZpbGU6aC03IGZpbGU6Ym9yZGVyLTAgZmlsZTpiZy10cmFuc3BhcmVudCBmaWxlOnRleHQtc20gZmlsZTpmb250LW1lZGl1bSBkaXNhYmxlZDpwb2ludGVyLWV2ZW50cy1ub25lIGRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZCBkaXNhYmxlZDpvcGFjaXR5LTUwIG1kOnRleHQtc20nLFxuXHRcdFx0XHQnZm9jdXMtdmlzaWJsZTpib3JkZXItcmluZyBmb2N1cy12aXNpYmxlOnJpbmctcmluZy81MCBmb2N1cy12aXNpYmxlOnJpbmctWzNweF0nLFxuXHRcdFx0XHQnYXJpYS1pbnZhbGlkOnJpbmctZGVzdHJ1Y3RpdmUvMjAgZGFyazphcmlhLWludmFsaWQ6cmluZy1kZXN0cnVjdGl2ZS80MCBhcmlhLWludmFsaWQ6Ym9yZGVyLWRlc3RydWN0aXZlJyxcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0ZGF0YS1zbG90PVwiaW5wdXRcIlxuXHRcdFx0dHlwZT17dHlwZX1cblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmV4cG9ydCB7IElucHV0IH1cbiIsCiAgICAiaW1wb3J0ICogYXMgTGFiZWxQcmltaXRpdmUgZnJvbSAnQHJhZGl4LXVpL3JlYWN0LWxhYmVsJ1xuaW1wb3J0IHR5cGUgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuZnVuY3Rpb24gTGFiZWwoe1xuXHRjbGFzc05hbWUsXG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgTGFiZWxQcmltaXRpdmUuUm9vdD4pIHtcblx0cmV0dXJuIChcblx0XHQ8TGFiZWxQcmltaXRpdmUuUm9vdFxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0J2ZsZXggaXRlbXMtY2VudGVyIGdhcC0yIHRleHQtc20gbGVhZGluZy1ub25lIGZvbnQtbWVkaXVtIHNlbGVjdC1ub25lIGdyb3VwLWRhdGEtW2Rpc2FibGVkPXRydWVdOnBvaW50ZXItZXZlbnRzLW5vbmUgZ3JvdXAtZGF0YS1bZGlzYWJsZWQ9dHJ1ZV06b3BhY2l0eS01MCBwZWVyLWRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZCBwZWVyLWRpc2FibGVkOm9wYWNpdHktNTAnLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJsYWJlbFwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0Lz5cblx0KVxufVxuXG5leHBvcnQgeyBMYWJlbCB9XG4iLAogICAgImltcG9ydCAqIGFzIFNjcm9sbEFyZWFQcmltaXRpdmUgZnJvbSAnQHJhZGl4LXVpL3JlYWN0LXNjcm9sbC1hcmVhJ1xuaW1wb3J0IHR5cGUgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuaW50ZXJmYWNlIFNjcm9sbEFyZWFQcm9wc1xuXHRleHRlbmRzIFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTY3JvbGxBcmVhUHJpbWl0aXZlLlJvb3Q+IHtcblx0dmlld1BvcnRQcm9wcz86IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTY3JvbGxBcmVhUHJpbWl0aXZlLlZpZXdwb3J0PlxufVxuXG5mdW5jdGlvbiBTY3JvbGxBcmVhKHtcblx0Y2xhc3NOYW1lLFxuXHRjaGlsZHJlbixcblx0dmlld1BvcnRQcm9wcyxcblx0Li4ucHJvcHNcbn06IFNjcm9sbEFyZWFQcm9wcykge1xuXHRyZXR1cm4gKFxuXHRcdDxTY3JvbGxBcmVhUHJpbWl0aXZlLlJvb3Rcblx0XHRcdGNsYXNzTmFtZT17Y24oJ3JlbGF0aXZlJywgY2xhc3NOYW1lKX1cblx0XHRcdGRhdGEtc2xvdD1cInNjcm9sbC1hcmVhXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQ+XG5cdFx0XHQ8U2Nyb2xsQXJlYVByaW1pdGl2ZS5WaWV3cG9ydFxuXHRcdFx0XHR7Li4udmlld1BvcnRQcm9wc31cblx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHQnZm9jdXMtdmlzaWJsZTpyaW5nLXJpbmcvNTAgc2l6ZS1mdWxsIHJvdW5kZWQtW2luaGVyaXRdIHRyYW5zaXRpb24tW2NvbG9yLGJveC1zaGFkb3ddIG91dGxpbmUtbm9uZSBmb2N1cy12aXNpYmxlOnJpbmctWzNweF0gZm9jdXMtdmlzaWJsZTpvdXRsaW5lLTEnLFxuXHRcdFx0XHRcdHZpZXdQb3J0UHJvcHM/LmNsYXNzTmFtZVxuXHRcdFx0XHQpfVxuXHRcdFx0XHRkYXRhLXNsb3Q9XCJzY3JvbGwtYXJlYS12aWV3cG9ydFwiXG5cdFx0XHQ+XG5cdFx0XHRcdHtjaGlsZHJlbn1cblx0XHRcdDwvU2Nyb2xsQXJlYVByaW1pdGl2ZS5WaWV3cG9ydD5cblx0XHRcdDxTY3JvbGxCYXIgLz5cblx0XHRcdDxTY3JvbGxBcmVhUHJpbWl0aXZlLkNvcm5lciAvPlxuXHRcdDwvU2Nyb2xsQXJlYVByaW1pdGl2ZS5Sb290PlxuXHQpXG59XG5cbmZ1bmN0aW9uIFNjcm9sbEJhcih7XG5cdGNsYXNzTmFtZSxcblx0b3JpZW50YXRpb24gPSAndmVydGljYWwnLFxuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNjcm9sbEFyZWFQcmltaXRpdmUuU2Nyb2xsQXJlYVNjcm9sbGJhcj4pIHtcblx0cmV0dXJuIChcblx0XHQ8U2Nyb2xsQXJlYVByaW1pdGl2ZS5TY3JvbGxBcmVhU2Nyb2xsYmFyXG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQnZmxleCB0b3VjaC1ub25lIHAtcHggdHJhbnNpdGlvbi1jb2xvcnMgc2VsZWN0LW5vbmUnLFxuXHRcdFx0XHRvcmllbnRhdGlvbiA9PT0gJ3ZlcnRpY2FsJyAmJlxuXHRcdFx0XHRcdCdoLWZ1bGwgdy0yLjUgYm9yZGVyLWwgYm9yZGVyLWwtdHJhbnNwYXJlbnQnLFxuXHRcdFx0XHRvcmllbnRhdGlvbiA9PT0gJ2hvcml6b250YWwnICYmXG5cdFx0XHRcdFx0J2gtMi41IGZsZXgtY29sIGJvcmRlci10IGJvcmRlci10LXRyYW5zcGFyZW50Jyxcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0ZGF0YS1zbG90PVwic2Nyb2xsLWFyZWEtc2Nyb2xsYmFyXCJcblx0XHRcdG9yaWVudGF0aW9uPXtvcmllbnRhdGlvbn1cblx0XHRcdHsuLi5wcm9wc31cblx0XHQ+XG5cdFx0XHQ8U2Nyb2xsQXJlYVByaW1pdGl2ZS5TY3JvbGxBcmVhVGh1bWJcblx0XHRcdFx0Y2xhc3NOYW1lPVwiYmctYm9yZGVyIHJlbGF0aXZlIGZsZXgtMSByb3VuZGVkLWZ1bGxcIlxuXHRcdFx0XHRkYXRhLXNsb3Q9XCJzY3JvbGwtYXJlYS10aHVtYlwiXG5cdFx0XHQvPlxuXHRcdDwvU2Nyb2xsQXJlYVByaW1pdGl2ZS5TY3JvbGxBcmVhU2Nyb2xsYmFyPlxuXHQpXG59XG5cbmV4cG9ydCB7IFNjcm9sbEFyZWEsIFNjcm9sbEJhciB9XG4iLAogICAgImltcG9ydCB7IENsb2NrIH0gZnJvbSAnbHVjaWRlLXJlYWN0J1xuaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvYnV0dG9uJ1xuaW1wb3J0IHsgSW5wdXQgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvaW5wdXQnXG5pbXBvcnQge1xuXHRQb3BvdmVyLFxuXHRQb3BvdmVyQ29udGVudCxcblx0UG9wb3ZlclRyaWdnZXIsXG59IGZyb20gJ0AvY29tcG9uZW50cy91aS9wb3BvdmVyJ1xuaW1wb3J0IHsgU2Nyb2xsQXJlYSB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9zY3JvbGwtYXJlYSdcbmltcG9ydCB7IHVzZUF1dG9jb21wbGV0ZVRpbWVwaWNrZXIgfSBmcm9tICdAL2hvb2tzL3VzZS1hdXRvY29tcGxldGUtdGltZXBpY2tlcidcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgdHlwZSB7IFRpbWVGb3JtYXQgfSBmcm9tICdAL3R5cGVzJ1xuXG5jb25zdCBoYW5kbGVXaGVlbCA9IChlOiBSZWFjdC5XaGVlbEV2ZW50PEhUTUxEaXZFbGVtZW50PikgPT4ge1xuXHQvLyBQcmV2ZW50IGV2ZW50IGZyb20gYnViYmxpbmcgdG8gcHJldmVudCBQb3BvdmVyIGZyb20gY2xvc2luZ1xuXHRlLnN0b3BQcm9wYWdhdGlvbigpXG59XG5cbmludGVyZmFjZSBUaW1lUGlja2VyUHJvcHMge1xuXHR2YWx1ZTogc3RyaW5nXG5cdG9uQ2hhbmdlOiAodmFsdWU6IHN0cmluZykgPT4gdm9pZFxuXHRtaW5UaW1lPzogc3RyaW5nXG5cdG1heFRpbWU/OiBzdHJpbmdcblx0dGltZUZvcm1hdD86IFRpbWVGb3JtYXRcblx0cGxhY2Vob2xkZXI/OiBzdHJpbmdcblx0Y2xhc3NOYW1lPzogc3RyaW5nXG5cdGRpc2FibGVkPzogYm9vbGVhblxuXHRuYW1lPzogc3RyaW5nXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBUaW1lUGlja2VyKHtcblx0dmFsdWUsXG5cdG9uQ2hhbmdlLFxuXHRtaW5UaW1lID0gJzAwOjAwJyxcblx0bWF4VGltZSA9ICcyMzo0NScsXG5cdHRpbWVGb3JtYXQgPSAnMTItaG91cicsXG5cdHBsYWNlaG9sZGVyID0gJ1NlbGVjdCB0aW1lLi4uJyxcblx0Y2xhc3NOYW1lLFxuXHRkaXNhYmxlZCA9IGZhbHNlLFxuXHRuYW1lLFxufTogVGltZVBpY2tlclByb3BzKSB7XG5cdGNvbnN0IFtvcGVuLCBzZXRPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKVxuXHRjb25zdCBbc2VhcmNoLCBzZXRTZWFyY2hdID0gdXNlU3RhdGUoJycpXG5cdGNvbnN0IGlucHV0UmVmID0gdXNlUmVmPEhUTUxJbnB1dEVsZW1lbnQ+KG51bGwpXG5cdGNvbnN0IHRyaWdnZXJSZWYgPSB1c2VSZWY8SFRNTEJ1dHRvbkVsZW1lbnQ+KG51bGwpXG5cdGNvbnN0IFt0cmlnZ2VyV2lkdGgsIHNldFRyaWdnZXJXaWR0aF0gPSB1c2VTdGF0ZTxudW1iZXI+KDApXG5cblx0Y29uc3QgeyB0aW1lT3B0aW9ucywgZm9ybWF0VGltZSB9ID0gdXNlQXV0b2NvbXBsZXRlVGltZXBpY2tlcih7XG5cdFx0dGltZUZvcm1hdCxcblx0XHRtaW5UaW1lLFxuXHRcdG1heFRpbWUsXG5cdH0pXG5cblx0Ly8gRmlsdGVyIHRpbWUgb3B0aW9ucyBiYXNlZCBvbiBzZWFyY2hcblx0Y29uc3QgZmlsdGVyZWRPcHRpb25zID0gdGltZU9wdGlvbnMuZmlsdGVyKCh0aW1lKSA9PiB7XG5cdFx0Y29uc3QgZm9ybWF0dGVkVGltZSA9IGZvcm1hdFRpbWUodGltZSlcblx0XHRyZXR1cm4gZm9ybWF0dGVkVGltZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaC50b0xvd2VyQ2FzZSgpKVxuXHR9KVxuXG5cdGNvbnN0IGhhbmRsZVNlbGVjdCA9ICh0aW1lOiBzdHJpbmcpID0+IHtcblx0XHRvbkNoYW5nZSh0aW1lKVxuXHRcdHNldE9wZW4oZmFsc2UpXG5cdFx0c2V0U2VhcmNoKCcnKVxuXHR9XG5cblx0Ly8gTWVhc3VyZSB0cmlnZ2VyIHdpZHRoIGFuZCBmb2N1cyBpbnB1dCB3aGVuIHBvcG92ZXIgb3BlbnNcblx0dXNlRWZmZWN0KCgpID0+IHtcblx0XHRpZiAob3Blbikge1xuXHRcdFx0aWYgKHRyaWdnZXJSZWYuY3VycmVudCkge1xuXHRcdFx0XHRzZXRUcmlnZ2VyV2lkdGgodHJpZ2dlclJlZi5jdXJyZW50Lm9mZnNldFdpZHRoKVxuXHRcdFx0fVxuXHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdGlucHV0UmVmLmN1cnJlbnQ/LmZvY3VzKClcblx0XHRcdH0sIDApXG5cdFx0fVxuXHR9LCBbb3Blbl0pXG5cblx0Y29uc3QgY3VycmVudFRpbWVTdHJpbmcgPSB2YWx1ZSA/IGZvcm1hdFRpbWUodmFsdWUpIDogcGxhY2Vob2xkZXJcblxuXHRyZXR1cm4gKFxuXHRcdDxQb3BvdmVyIG9uT3BlbkNoYW5nZT17c2V0T3Blbn0gb3Blbj17b3Blbn0+XG5cdFx0XHQ8UG9wb3ZlclRyaWdnZXIgYXNDaGlsZD5cblx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdGFyaWEtY29udHJvbHM9XCJ0aW1lLXBpY2tlci1saXN0Ym94XCJcblx0XHRcdFx0XHRhcmlhLWV4cGFuZGVkPXtvcGVufVxuXHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oJ3ctZnVsbCBqdXN0aWZ5LXN0YXJ0JywgY2xhc3NOYW1lKX1cblx0XHRcdFx0XHRkYXRhLXRlc3RpZD17YHRpbWUtcGlja2VyLSR7bmFtZX1gfVxuXHRcdFx0XHRcdGRpc2FibGVkPXtkaXNhYmxlZH1cblx0XHRcdFx0XHRyZWY9e3RyaWdnZXJSZWZ9XG5cdFx0XHRcdFx0cm9sZT1cImNvbWJvYm94XCJcblx0XHRcdFx0XHR2YXJpYW50PVwib3V0bGluZVwiXG5cdFx0XHRcdD5cblx0XHRcdFx0XHQ8Q2xvY2sgY2xhc3NOYW1lPVwibXItMiBoLTQgdy00XCIgLz5cblx0XHRcdFx0XHR7Y3VycmVudFRpbWVTdHJpbmd9XG5cdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0PC9Qb3BvdmVyVHJpZ2dlcj5cblx0XHRcdDxQb3BvdmVyQ29udGVudFxuXHRcdFx0XHRhbGlnbj1cInN0YXJ0XCJcblx0XHRcdFx0Y2xhc3NOYW1lPVwicC0wXCJcblx0XHRcdFx0c3R5bGU9e3sgd2lkdGg6IHRyaWdnZXJXaWR0aCB9fVxuXHRcdFx0PlxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInAtMiBib3JkZXItYlwiPlxuXHRcdFx0XHRcdDxJbnB1dFxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiaC04XCJcblx0XHRcdFx0XHRcdG9uQ2hhbmdlPXsoZSkgPT4gc2V0U2VhcmNoKGUudGFyZ2V0LnZhbHVlKX1cblx0XHRcdFx0XHRcdHBsYWNlaG9sZGVyPVwiU2VhcmNoIHRpbWUuLi5cIlxuXHRcdFx0XHRcdFx0cmVmPXtpbnB1dFJlZn1cblx0XHRcdFx0XHRcdHZhbHVlPXtzZWFyY2h9XG5cdFx0XHRcdFx0Lz5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDxTY3JvbGxBcmVhIGNsYXNzTmFtZT1cImgtWzIwMHB4XVwiIG9uV2hlZWw9e2hhbmRsZVdoZWVsfT5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInAtMVwiPlxuXHRcdFx0XHRcdFx0e2ZpbHRlcmVkT3B0aW9ucy5sZW5ndGggPT09IDAgPyAoXG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwicHktNiB0ZXh0LWNlbnRlciB0ZXh0LXNtIHRleHQtbXV0ZWQtZm9yZWdyb3VuZFwiPlxuXHRcdFx0XHRcdFx0XHRcdE4vQVxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdCkgOiAoXG5cdFx0XHRcdFx0XHRcdGZpbHRlcmVkT3B0aW9ucy5tYXAoKHRpbWUpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCB0aW1lU3RyaW5nID0gZm9ybWF0VGltZSh0aW1lKVxuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IGlzU2VsZWN0ZWQgPSB0aW1lID09PSB2YWx1ZVxuXHRcdFx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdFx0XHQ8YnV0dG9uXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0J3JlbGF0aXZlIGZsZXggdy1mdWxsIGN1cnNvci1wb2ludGVyIHNlbGVjdC1ub25lIGl0ZW1zLWNlbnRlciByb3VuZGVkLXNtIHB4LTIgcHktMS41IHRleHQtc20gb3V0bGluZS1ub25lIHRyYW5zaXRpb24tY29sb3JzIGhvdmVyOmJnLWFjY2VudCBob3Zlcjp0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kJyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpc1NlbGVjdGVkICYmICdiZy1hY2NlbnQgdGV4dC1hY2NlbnQtZm9yZWdyb3VuZCdcblx0XHRcdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0a2V5PXt0aW1lfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvbkNsaWNrPXsoKSA9PiBoYW5kbGVTZWxlY3QodGltZSl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIlxuXHRcdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7dGltZVN0cmluZ31cblx0XHRcdFx0XHRcdFx0XHRcdDwvYnV0dG9uPlxuXHRcdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDwvU2Nyb2xsQXJlYT5cblx0XHRcdDwvUG9wb3ZlckNvbnRlbnQ+XG5cdFx0PC9Qb3BvdmVyPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgVGltZUZvcm1hdCB9IGZyb20gJ0AvdHlwZXMnXG5cbmludGVyZmFjZSBVc2VBdXRvY29tcGxldGVUaW1lcGlja2VyUHJvcHMge1xuXHR0aW1lRm9ybWF0PzogVGltZUZvcm1hdFxuXHRtaW5UaW1lPzogc3RyaW5nXG5cdG1heFRpbWU/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZUF1dG9jb21wbGV0ZVRpbWVwaWNrZXIoe1xuXHR0aW1lRm9ybWF0ID0gJzEyLWhvdXInLFxuXHRtaW5UaW1lID0gJzAwOjAwJyxcblx0bWF4VGltZSA9ICcyMzo0NScsXG59OiBVc2VBdXRvY29tcGxldGVUaW1lcGlja2VyUHJvcHMpIHtcblx0Ly8gR2VuZXJhdGUgdGltZSBvcHRpb25zICgxNS1taW51dGUgaW50ZXJ2YWxzKSB3aXRoaW4gbWluL21heCByYW5nZVxuXHRjb25zdCB0aW1lT3B0aW9ucyA9IHVzZU1lbW8oKCkgPT4ge1xuXHRcdGNvbnN0IHRpbWVzOiBzdHJpbmdbXSA9IFtdXG5cdFx0Y29uc3QgW21pbkhvdXIsIG1pbk1pbnV0ZV0gPSBtaW5UaW1lLnNwbGl0KCc6JykubWFwKE51bWJlcilcblx0XHRjb25zdCBbbWF4SG91ciwgbWF4TWludXRlXSA9IG1heFRpbWUuc3BsaXQoJzonKS5tYXAoTnVtYmVyKVxuXG5cdFx0Y29uc3QgbWluVG90YWxNaW51dGVzID0gbWluSG91ciAqIDYwICsgbWluTWludXRlXG5cdFx0Y29uc3QgbWF4VG90YWxNaW51dGVzID0gbWF4SG91ciAqIDYwICsgbWF4TWludXRlXG5cblx0XHRmb3IgKFxuXHRcdFx0bGV0IHRvdGFsTWludXRlcyA9IG1pblRvdGFsTWludXRlcztcblx0XHRcdHRvdGFsTWludXRlcyA8PSBtYXhUb3RhbE1pbnV0ZXM7XG5cdFx0XHR0b3RhbE1pbnV0ZXMgKz0gMTVcblx0XHQpIHtcblx0XHRcdGNvbnN0IGhvdXJzID0gTWF0aC5mbG9vcih0b3RhbE1pbnV0ZXMgLyA2MClcblx0XHRcdGNvbnN0IG1pbnV0ZXMgPSB0b3RhbE1pbnV0ZXMgJSA2MFxuXG5cdFx0XHRjb25zdCB0aW1lU3RyaW5nID0gYCR7aG91cnMudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpfToke21pbnV0ZXMudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpfWBcblx0XHRcdHRpbWVzLnB1c2godGltZVN0cmluZylcblx0XHR9XG5cblx0XHRyZXR1cm4gdGltZXNcblx0fSwgW21pblRpbWUsIG1heFRpbWVdKVxuXG5cdGNvbnN0IGZvcm1hdFRpbWUgPSAodGltZTogc3RyaW5nKSA9PiB7XG5cdFx0Y29uc3QgW2hvdXJzLCBtaW51dGVzXSA9IHRpbWUuc3BsaXQoJzonKS5tYXAoTnVtYmVyKVxuXHRcdGNvbnN0IHBlcmlvZCA9IGhvdXJzID49IDEyID8gJ1BNJyA6ICdBTSdcblx0XHRjb25zdCBkaXNwbGF5SG91cnMgPSBob3VycyA9PT0gMCA/IDEyIDogaG91cnMgPiAxMiA/IGhvdXJzIC0gMTIgOiBob3Vyc1xuXG5cdFx0aWYgKHRpbWVGb3JtYXQgPT09ICcyNC1ob3VyJykge1xuXHRcdFx0cmV0dXJuIGAke2hvdXJzLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKX06JHttaW51dGVzLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKX1gXG5cdFx0fVxuXG5cdFx0cmV0dXJuIGAke2Rpc3BsYXlIb3Vyc306JHttaW51dGVzLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKX0gJHtwZXJpb2R9YFxuXHR9XG5cblx0cmV0dXJuIHtcblx0XHR0aW1lT3B0aW9ucyxcblx0XHRmb3JtYXRUaW1lLFxuXHR9XG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgQnVzaW5lc3NIb3VycyB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB0eXBlIGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgV0VFS19EQVlTX05VTUJFUl9NQVAgfSBmcm9tICdAL2xpYi9jb25zdGFudHMnXG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgc3BlY2lmaWMgZGF0ZSBpcyBhIGJ1c2luZXNzIGRheS5cbiAqXG4gKiBAcGFyYW0gZGF0ZSBUaGUgZGF0ZSB0byBjaGVja1xuICogQHBhcmFtIGJ1c2luZXNzSG91cnMgVGhlIGJ1c2luZXNzIGhvdXJzIGNvbmZpZ3VyYXRpb24gKHNpbmdsZSBvciBhcnJheSlcbiAqIEByZXR1cm5zIHRydWUgaWYgdGhlIGRhdGUgaXMgYSBidXNpbmVzcyBkYXksIGZhbHNlIG90aGVyd2lzZVxuICovXG5leHBvcnQgY29uc3QgaXNCdXNpbmVzc0RheSA9IChcblx0ZGF0ZTogZGF5anMuRGF5anMsXG5cdGJ1c2luZXNzSG91cnM/OiBCdXNpbmVzc0hvdXJzIHwgQnVzaW5lc3NIb3Vyc1tdXG4pOiBib29sZWFuID0+IHtcblx0aWYgKCFidXNpbmVzc0hvdXJzKSB7XG5cdFx0cmV0dXJuIHRydWVcblx0fVxuXG5cdGxldCBoYXNNYXRjaCA9IGZhbHNlXG5cdHByb2Nlc3NCdXNpbmVzc0hvdXJzKGJ1c2luZXNzSG91cnMsIHtcblx0XHRkYXRlLFxuXHRcdG9uTWF0Y2g6ICgpID0+IHtcblx0XHRcdGhhc01hdGNoID0gdHJ1ZVxuXHRcdH0sXG5cdH0pXG5cblx0cmV0dXJuIGhhc01hdGNoXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSXNCdXNpbmVzc0hvdXJPcHRpb25zIHtcblx0ZGF0ZTogZGF5anMuRGF5anNcblx0aG91cj86IG51bWJlclxuXHRtaW51dGU/OiBudW1iZXJcblx0YnVzaW5lc3NIb3Vycz86IEJ1c2luZXNzSG91cnMgfCBCdXNpbmVzc0hvdXJzW11cbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYSBzcGVjaWZpYyBob3VyIG9uIGEgc3BlY2lmaWMgZGF0ZSBpcyB3aXRoaW4gYnVzaW5lc3MgaG91cnMuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgZm9yIGNoZWNraW5nIGJ1c2luZXNzIGhvdXJzXG4gKiBAcmV0dXJucyB0cnVlIGlmIHRoZSB0aW1lIGlzIHdpdGhpbiBidXNpbmVzcyBob3VycywgZmFsc2Ugb3RoZXJ3aXNlXG4gKi9cbmV4cG9ydCBjb25zdCBpc0J1c2luZXNzSG91ciA9ICh7XG5cdGRhdGUsXG5cdGhvdXIsXG5cdG1pbnV0ZSA9IDAsXG5cdGJ1c2luZXNzSG91cnMsXG59OiBJc0J1c2luZXNzSG91ck9wdGlvbnMpOiBib29sZWFuID0+IHtcblx0Ly8gSWYgYnVzaW5lc3MgaG91cnMgYXJlIG5vdCBjb25maWd1cmVkLCBjb25zaWRlciBldmVyeXRoaW5nIGFzIFwiYnVzaW5lc3MgaG91cnNcIlxuXHRpZiAoIWJ1c2luZXNzSG91cnMpIHtcblx0XHRyZXR1cm4gdHJ1ZVxuXHR9XG5cblx0Ly8gSWYgaG91ciBpcyBub3QgcHJvdmlkZWQsIHdlIGFzc3VtZSB0aGUgdXNlciBvbmx5IGNhcmVzIGFib3V0IHRoZSBkYXlcblx0aWYgKGhvdXIgPT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBpc0J1c2luZXNzRGF5KGRhdGUsIGJ1c2luZXNzSG91cnMpXG5cdH1cblxuXHRsZXQgaXNJbkJ1c2luZXNzSG91ciA9IGZhbHNlXG5cdGNvbnN0IGN1cnJlbnRNaW51dGVzID0gaG91ciAqIDYwICsgbWludXRlXG5cblx0cHJvY2Vzc0J1c2luZXNzSG91cnMoYnVzaW5lc3NIb3Vycywge1xuXHRcdGRhdGUsXG5cdFx0b25NYXRjaDogKGNvbmZpZykgPT4ge1xuXHRcdFx0Ly8gQ2hlY2sgdGltZSBhZ2FpbnN0IHRoaXMgc3BlY2lmaWMgY29uZmlnXG5cdFx0XHQvLyBzdGFydFRpbWUgYW5kIGVuZFRpbWUgYXJlIG51bWJlcnMgKDAtMjQpXG5cdFx0XHRjb25zdCBzdGFydEggPSBjb25maWcuc3RhcnRUaW1lID8/IDlcblx0XHRcdGNvbnN0IGVuZEggPSBjb25maWcuZW5kVGltZSA/PyAxN1xuXG5cdFx0XHRjb25zdCBzdGFydE1pbnV0ZXMgPSBzdGFydEggKiA2MFxuXHRcdFx0Y29uc3QgZW5kTWludXRlcyA9IGVuZEggKiA2MFxuXG5cdFx0XHRpZiAoY3VycmVudE1pbnV0ZXMgPj0gc3RhcnRNaW51dGVzICYmIGN1cnJlbnRNaW51dGVzIDwgZW5kTWludXRlcykge1xuXHRcdFx0XHRpc0luQnVzaW5lc3NIb3VyID0gdHJ1ZVxuXHRcdFx0fVxuXHRcdH0sXG5cdH0pXG5cblx0cmV0dXJuIGlzSW5CdXNpbmVzc0hvdXJcbn1cblxuLyoqXG4gKiBIZWxwZXIgdG8gcHJvY2VzcyBhIGJ1c2luZXNzIGhvdXJzIGNvbmZpZ3VyYXRpb24gYW5kIHVwZGF0ZSB0aGUgcmFuZ2UuXG4gKi9cbmV4cG9ydCBjb25zdCBwcm9jZXNzQnVzaW5lc3NIb3VycyA9IChcblx0Ymg6IEJ1c2luZXNzSG91cnMgfCBCdXNpbmVzc0hvdXJzW10gfCB1bmRlZmluZWQsXG5cdG9wdGlvbnM6IHtcblx0XHRkYXRlPzogZGF5anMuRGF5anNcblx0XHRvbk1hdGNoOiAoY29uZmlnOiBCdXNpbmVzc0hvdXJzKSA9PiB2b2lkXG5cdH1cbikgPT4ge1xuXHRjb25zdCB7IGRhdGUsIG9uTWF0Y2ggfSA9IG9wdGlvbnNcblx0aWYgKCFiaCkgcmV0dXJuXG5cblx0Y29uc3QgY29uZmlncyA9IEFycmF5LmlzQXJyYXkoYmgpID8gYmggOiBbYmhdXG5cblx0Zm9yIChjb25zdCBjb25maWcgb2YgY29uZmlncykge1xuXHRcdGlmIChkYXRlICYmIGNvbmZpZy5kYXlzT2ZXZWVrKSB7XG5cdFx0XHRjb25zdCBkYXlPZldlZWsgPSBkYXRlLmRheSgpXG5cdFx0XHRpZiAoXG5cdFx0XHRcdGNvbmZpZy5kYXlzT2ZXZWVrLnNvbWUoKGQpID0+IFdFRUtfREFZU19OVU1CRVJfTUFQW2RdID09PSBkYXlPZldlZWspXG5cdFx0XHQpIHtcblx0XHRcdFx0b25NYXRjaChjb25maWcpXG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdG9uTWF0Y2goY29uZmlnKVxuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJ1c2luZXNzSG91cnNSYW5nZSB7XG5cdG1pblN0YXJ0OiBudW1iZXJcblx0bWF4RW5kOiBudW1iZXJcblx0aGFzQnVzaW5lc3NIb3VyczogYm9vbGVhblxufVxuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIHVuaW9uIG9mIGJ1c2luZXNzIGhvdXJzIHJhbmdlcyBhY3Jvc3MgbXVsdGlwbGUgZGF0ZXMgYW5kL29yIHJlc291cmNlIGNvbmZpZ3VyYXRpb25zLlxuICovXG5leHBvcnQgY29uc3QgY2FsY3VsYXRlQnVzaW5lc3NIb3Vyc1JhbmdlID0gKG9wdGlvbnM6IHtcblx0YWxsRGF0ZXM6IGRheWpzLkRheWpzW11cblx0YnVzaW5lc3NIb3Vycz86IEJ1c2luZXNzSG91cnMgfCBCdXNpbmVzc0hvdXJzW11cblx0cmVzb3VyY2VCdXNpbmVzc0hvdXJzPzogKEJ1c2luZXNzSG91cnMgfCBCdXNpbmVzc0hvdXJzW10pW11cblx0aGlkZU5vbkJ1c2luZXNzSG91cnM/OiBib29sZWFuXG59KTogQnVzaW5lc3NIb3Vyc1JhbmdlID0+IHtcblx0Y29uc3Qge1xuXHRcdGFsbERhdGVzLFxuXHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0cmVzb3VyY2VCdXNpbmVzc0hvdXJzID0gW10sXG5cdFx0aGlkZU5vbkJ1c2luZXNzSG91cnMsXG5cdH0gPSBvcHRpb25zXG5cblx0bGV0IG1pblN0YXJ0ID0gMjRcblx0bGV0IG1heEVuZCA9IDBcblx0bGV0IGhhc0J1c2luZXNzSG91cnMgPSBmYWxzZVxuXG5cdGNvbnN0IG9uTWF0Y2ggPSAoY29uZmlnOiBCdXNpbmVzc0hvdXJzKSA9PiB7XG5cdFx0aGFzQnVzaW5lc3NIb3VycyA9IHRydWVcblx0XHRtaW5TdGFydCA9IE1hdGgubWluKG1pblN0YXJ0LCBjb25maWcuc3RhcnRUaW1lID8/IDkpXG5cdFx0bWF4RW5kID0gTWF0aC5tYXgobWF4RW5kLCBjb25maWcuZW5kVGltZSA/PyAxNylcblx0fVxuXG5cdC8vIFByb2Nlc3MgZ2xvYmFsIGFuZCByZXNvdXJjZSBidXNpbmVzcyBob3VycyBmb3IgZWFjaCBkYXRlXG5cdGZvciAoY29uc3QgZGF0ZSBvZiBhbGxEYXRlcykge1xuXHRcdHByb2Nlc3NCdXNpbmVzc0hvdXJzKGJ1c2luZXNzSG91cnMsIHsgZGF0ZSwgb25NYXRjaCB9KVxuXHRcdGZvciAoY29uc3QgcmJoIG9mIHJlc291cmNlQnVzaW5lc3NIb3Vycykge1xuXHRcdFx0cHJvY2Vzc0J1c2luZXNzSG91cnMocmJoLCB7IGRhdGUsIG9uTWF0Y2ggfSlcblx0XHR9XG5cdH1cblxuXHQvLyBGYWxsYmFjayBsb2dpYyBpZiBubyBidXNpbmVzcyBob3VycyBmb3VuZCBmb3Igc3BlY2lmaWMgZGF0ZXNcblx0aWYgKCFoYXNCdXNpbmVzc0hvdXJzICYmIGhpZGVOb25CdXNpbmVzc0hvdXJzKSB7XG5cdFx0cHJvY2Vzc0J1c2luZXNzSG91cnMoYnVzaW5lc3NIb3VycywgeyBvbk1hdGNoIH0pXG5cdFx0Zm9yIChjb25zdCByYmggb2YgcmVzb3VyY2VCdXNpbmVzc0hvdXJzKSB7XG5cdFx0XHRwcm9jZXNzQnVzaW5lc3NIb3VycyhyYmgsIHsgb25NYXRjaCB9KVxuXHRcdH1cblxuXHRcdC8vIEZpbmFsIGZhbGxiYWNrIHRvIGRlZmF1bHQgOS0xNyBpZiBzdGlsbCBub3RoaW5nXG5cdFx0aWYgKCFoYXNCdXNpbmVzc0hvdXJzKSB7XG5cdFx0XHRtaW5TdGFydCA9IDlcblx0XHRcdG1heEVuZCA9IDE3XG5cdFx0XHRoYXNCdXNpbmVzc0hvdXJzID0gdHJ1ZVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiB7IG1pblN0YXJ0LCBtYXhFbmQsIGhhc0J1c2luZXNzSG91cnMgfVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSB7IEJ1c2luZXNzSG91cnMgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgeyBjYWxjdWxhdGVCdXNpbmVzc0hvdXJzUmFuZ2UgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL3V0aWxzL2J1c2luZXNzLWhvdXJzJ1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuXG5leHBvcnQgY29uc3QgYnVpbGREYXRlVGltZSA9IChcblx0ZGF0ZTogRGF0ZSxcblx0dGltZTogc3RyaW5nLFxuXHRpc0FsbERheTogYm9vbGVhblxuKTogZGF5anMuRGF5anMgPT4ge1xuXHRjb25zdCBbaG91cnMsIG1pbnV0ZXNdID0gdGltZS5zcGxpdCgnOicpLm1hcChOdW1iZXIpXG5cdGNvbnN0IGJhc2UgPSBkYXlqcyhkYXRlKS5ob3VyKGhvdXJzKS5taW51dGUobWludXRlcylcblx0cmV0dXJuIGlzQWxsRGF5ID8gYmFzZS5ob3VyKDApLm1pbnV0ZSgwKSA6IGJhc2Vcbn1cblxuZXhwb3J0IGNvbnN0IGJ1aWxkRW5kRGF0ZVRpbWUgPSAoXG5cdGRhdGU6IERhdGUsXG5cdHRpbWU6IHN0cmluZyxcblx0aXNBbGxEYXk6IGJvb2xlYW5cbik6IGRheWpzLkRheWpzID0+IHtcblx0Y29uc3QgW2hvdXJzLCBtaW51dGVzXSA9IHRpbWUuc3BsaXQoJzonKS5tYXAoTnVtYmVyKVxuXHRjb25zdCBiYXNlID0gZGF5anMoZGF0ZSkuaG91cihob3VycykubWludXRlKG1pbnV0ZXMpXG5cdHJldHVybiBpc0FsbERheSA/IGJhc2UuaG91cigyMykubWludXRlKDU5KSA6IGJhc2Vcbn1cblxuZXhwb3J0IGNvbnN0IGdldFRpbWVDb25zdHJhaW50cyA9IChcblx0ZGF0ZTogRGF0ZSxcblx0YnVzaW5lc3NIb3Vycz86IEJ1c2luZXNzSG91cnMgfCBCdXNpbmVzc0hvdXJzW11cbikgPT4ge1xuXHRpZiAoIWJ1c2luZXNzSG91cnMpIHJldHVybiB7IG1pbjogJzAwOjAwJywgbWF4OiAnMjM6NTknIH1cblxuXHRjb25zdCBkYXlqc0RhdGUgPSBkYXlqcyhkYXRlKVxuXG5cdGNvbnN0IHsgbWluU3RhcnQsIG1heEVuZCwgaGFzQnVzaW5lc3NIb3VycyB9ID0gY2FsY3VsYXRlQnVzaW5lc3NIb3Vyc1JhbmdlKHtcblx0XHRhbGxEYXRlczogW2RheWpzRGF0ZV0sXG5cdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRoaWRlTm9uQnVzaW5lc3NIb3VyczogZmFsc2UsXG5cdH0pXG5cblx0aWYgKCFoYXNCdXNpbmVzc0hvdXJzKSB7XG5cdFx0cmV0dXJuIHsgbWluOiAnMDA6MDAnLCBtYXg6ICcyMzo1OScgfVxuXHR9XG5cblx0cmV0dXJuIHtcblx0XHRtaW46IGAke21pblN0YXJ0LnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKX06MDBgLFxuXHRcdG1heDogYCR7KG1heEVuZCAtIDEpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKX06NDVgLFxuXHR9XG59XG4iLAogICAgImltcG9ydCB7IHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgV2Vla2RheSB9IGZyb20gJ3JydWxlJ1xuaW1wb3J0IHsgUlJ1bGUgfSBmcm9tICdycnVsZSdcbmltcG9ydCB7IENhcmQsIENhcmRDb250ZW50LCBDYXJkSGVhZGVyLCBDYXJkVGl0bGUgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvY2FyZCdcbmltcG9ydCB7IENoZWNrYm94IH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2NoZWNrYm94J1xuaW1wb3J0IHsgRGF0ZVBpY2tlciB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9kYXRlLXBpY2tlcidcbmltcG9ydCB7IElucHV0IH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2lucHV0J1xuaW1wb3J0IHsgTGFiZWwgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvbGFiZWwnXG5pbXBvcnQge1xuXHRTZWxlY3QsXG5cdFNlbGVjdENvbnRlbnQsXG5cdFNlbGVjdEl0ZW0sXG5cdFNlbGVjdFRyaWdnZXIsXG5cdFNlbGVjdFZhbHVlLFxufSBmcm9tICdAL2NvbXBvbmVudHMvdWkvc2VsZWN0J1xuaW1wb3J0IHR5cGUgeyBSUnVsZU9wdGlvbnMgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvdHlwZXMnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5cbmNvbnN0IEZSRVFfTUFQID0ge1xuXHREQUlMWTogUlJ1bGUuREFJTFksXG5cdFdFRUtMWTogUlJ1bGUuV0VFS0xZLFxuXHRNT05USExZOiBSUnVsZS5NT05USExZLFxuXHRZRUFSTFk6IFJSdWxlLllFQVJMWSxcbn0gYXMgY29uc3RcbmNvbnN0IEZSRVFfVE9fU1RSID0gT2JqZWN0LmZyb21FbnRyaWVzKFxuXHRPYmplY3QuZW50cmllcyhGUkVRX01BUCkubWFwKChbaywgdl0pID0+IFt2LCBrXSlcbikgYXMgUmVjb3JkPG51bWJlciwgc3RyaW5nPlxuY29uc3QgV0VFS0RBWVMgPSBbXG5cdFJSdWxlLlNVLFxuXHRSUnVsZS5NTyxcblx0UlJ1bGUuVFUsXG5cdFJSdWxlLldFLFxuXHRSUnVsZS5USCxcblx0UlJ1bGUuRlIsXG5cdFJSdWxlLlNBLFxuXVxuY29uc3QgREFZX0tFWVMgPSBbJ3N1bicsICdtb24nLCAndHVlJywgJ3dlZCcsICd0aHUnLCAnZnJpJywgJ3NhdCddXG5jb25zdCBwYXJzZU51bSA9ICh2OiBzdHJpbmcpID0+IE1hdGgubWF4KDEsIE51bWJlci5wYXJzZUludCh2LCAxMCkgfHwgMSlcblxuY29uc3QgZ2V0RGVzY3JpcHRpb24gPSAoXG5cdG9wdHM6IFJSdWxlT3B0aW9ucyB8IG51bGwsXG5cdHQ6IChrOiBzdHJpbmcpID0+IHN0cmluZ1xuKSA9PiB7XG5cdGlmICghb3B0cykge1xuXHRcdHJldHVybiB0KCdjdXN0b21SZWN1cnJlbmNlJylcblx0fVxuXHR0cnkge1xuXHRcdGNvbnN0IHRleHQgPSBuZXcgUlJ1bGUob3B0cykudG9UZXh0KClcblx0XHRyZXR1cm4gdGV4dCAmJiAhdGV4dC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdlcnJvcicpXG5cdFx0XHQ/IHRleHQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB0ZXh0LnNsaWNlKDEpXG5cdFx0XHQ6IHQoJ2N1c3RvbVJlY3VycmVuY2UnKVxuXHR9IGNhdGNoIHtcblx0XHRyZXR1cm4gdCgnY3VzdG9tUmVjdXJyZW5jZScpXG5cdH1cbn1cblxuaW50ZXJmYWNlIFByb3BzIHtcblx0dmFsdWU/OiBSUnVsZU9wdGlvbnMgfCBudWxsXG5cdG9uQ2hhbmdlOiAodjogUlJ1bGVPcHRpb25zIHwgbnVsbCkgPT4gdm9pZFxufVxuXG5leHBvcnQgY29uc3QgUmVjdXJyZW5jZUVkaXRvcjogUmVhY3QuRkM8UHJvcHM+ID0gKHsgdmFsdWUsIG9uQ2hhbmdlIH0pID0+IHtcblx0Y29uc3QgeyB0IH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgoY3R4KSA9PiAoeyB0OiBjdHgudCB9KSlcblx0Y29uc3QgW3Nob3csIHNldFNob3ddID0gdXNlU3RhdGUoISF2YWx1ZSlcblx0Y29uc3QgW29wdHMsIHNldE9wdHNdID0gdXNlU3RhdGU8UlJ1bGVPcHRpb25zIHwgbnVsbD4oKCkgPT4gdmFsdWUgfHwgbnVsbClcblxuXHRjb25zdCB3ZWVrRGF5cyA9IHVzZU1lbW8oXG5cdFx0KCkgPT4gREFZX0tFWVMubWFwKChrLCBpKSA9PiAoeyB2YWx1ZTogV0VFS0RBWVNbaV0sIGxhYmVsOiB0KGspIH0pKSxcblx0XHRbdF1cblx0KVxuXG5cdHVzZUVmZmVjdCgoKSA9PiB7XG5cdFx0c2V0U2hvdyghIXZhbHVlKVxuXHRcdGlmICh2YWx1ZSkge1xuXHRcdFx0c2V0T3B0cyh2YWx1ZSlcblx0XHR9XG5cdH0sIFt2YWx1ZV0pXG5cblx0Y29uc3QgdXBkYXRlID0gKHU6IFBhcnRpYWw8UlJ1bGVPcHRpb25zPikgPT4ge1xuXHRcdGlmICghb3B0cykge1xuXHRcdFx0cmV0dXJuXG5cdFx0fVxuXHRcdGNvbnN0IG5leHQgPSB7IC4uLm9wdHMsIC4uLnUgfVxuXHRcdHNldE9wdHMobmV4dClcblx0XHRvbkNoYW5nZShzaG93ID8gbmV4dCA6IG51bGwpXG5cdH1cblxuXHRjb25zdCB0b2dnbGUgPSAoY2hlY2tlZDogYm9vbGVhbikgPT4ge1xuXHRcdHNldFNob3coY2hlY2tlZClcblx0XHRpZiAoIWNoZWNrZWQpIHtcblx0XHRcdG9uQ2hhbmdlKG51bGwpXG5cdFx0XHRyZXR1cm5cblx0XHR9XG5cdFx0aWYgKG9wdHMpIHtcblx0XHRcdG9uQ2hhbmdlKG9wdHMpXG5cdFx0XHRyZXR1cm5cblx0XHR9XG5cdFx0Y29uc3QgZGVmID0geyBmcmVxOiBSUnVsZS5EQUlMWSwgaW50ZXJ2YWw6IDEgfSBhcyBSUnVsZU9wdGlvbnNcblx0XHRzZXRPcHRzKGRlZilcblx0XHRvbkNoYW5nZShkZWYpXG5cdH1cblxuXHRjb25zdCB0b2dnbGVEYXkgPSAoaTogbnVtYmVyKSA9PiB7XG5cdFx0Y29uc3QgY3VyciA9IChvcHRzPy5ieXdlZWtkYXkgYXMgV2Vla2RheVtdKSB8fCBbXVxuXHRcdGNvbnN0IGRheSA9IFdFRUtEQVlTW2ldXG5cdFx0Y29uc3QgbmV4dCA9IGN1cnIuaW5jbHVkZXMoZGF5KVxuXHRcdFx0PyBjdXJyLmZpbHRlcigoZCkgPT4gZCAhPT0gZGF5KVxuXHRcdFx0OiBbLi4uY3VyciwgZGF5XVxuXHRcdHVwZGF0ZSh7IGJ5d2Vla2RheTogbmV4dC5sZW5ndGggPyBuZXh0IDogdW5kZWZpbmVkIH0pXG5cdH1cblxuXHRjb25zdCBzZXRFbmRUeXBlID0gKHR5cGU6ICduZXZlcicgfCAnY291bnQnIHwgJ3VudGlsJykgPT4ge1xuXHRcdGNvbnN0IHU6IFBhcnRpYWw8UlJ1bGVPcHRpb25zPiA9IHsgY291bnQ6IHVuZGVmaW5lZCwgdW50aWw6IHVuZGVmaW5lZCB9XG5cdFx0aWYgKHR5cGUgPT09ICdjb3VudCcpIHtcblx0XHRcdHUuY291bnQgPSBvcHRzPy5jb3VudCB8fCAxXG5cdFx0fVxuXHRcdGlmICh0eXBlID09PSAndW50aWwnKSB7XG5cdFx0XHR1LnVudGlsID0gb3B0cz8udW50aWwgfHwgZGF5anMoKS5hZGQoMSwgJ21vbnRoJykuZW5kT2YoJ2RheScpLnRvRGF0ZSgpXG5cdFx0fVxuXHRcdHVwZGF0ZSh1KVxuXHR9XG5cblx0Y29uc3QgZW5kVHlwZSA9IG9wdHM/LnVudGlsID8gJ3VudGlsJyA6IG9wdHM/LmNvdW50ID8gJ2NvdW50JyA6ICduZXZlcidcblx0Y29uc3QgZnJlcSA9IEZSRVFfVE9fU1RSW29wdHM/LmZyZXEgPz8gUlJ1bGUuREFJTFldIHx8ICdEQUlMWSdcblx0Y29uc3QgYnl3ZWVrZGF5ID0gQXJyYXkuaXNBcnJheShvcHRzPy5ieXdlZWtkYXkpXG5cdFx0PyBvcHRzLmJ5d2Vla2RheVxuXHRcdDogb3B0cz8uYnl3ZWVrZGF5XG5cdFx0XHQ/IFtvcHRzLmJ5d2Vla2RheV1cblx0XHRcdDogW11cblxuXHRyZXR1cm4gKFxuXHRcdDxDYXJkIGRhdGEtdGVzdGlkPVwicmVjdXJyZW5jZS1lZGl0b3JcIj5cblx0XHRcdDxDYXJkSGVhZGVyIGNsYXNzTmFtZT1cInBiLTNcIj5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTJcIj5cblx0XHRcdFx0XHQ8Q2hlY2tib3hcblx0XHRcdFx0XHRcdGNoZWNrZWQ9e3Nob3d9XG5cdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD1cInRvZ2dsZS1yZWN1cnJlbmNlXCJcblx0XHRcdFx0XHRcdGlkPVwicmVjdXJyaW5nXCJcblx0XHRcdFx0XHRcdG9uQ2hlY2tlZENoYW5nZT17dG9nZ2xlfVxuXHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0PENhcmRUaXRsZSBjbGFzc05hbWU9XCJ0ZXh0LXNtXCI+e3QoJ3JlcGVhdCcpfTwvQ2FyZFRpdGxlPlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0e3Nob3cgJiYgdmFsdWUgJiYgKFxuXHRcdFx0XHRcdDxwIGNsYXNzTmFtZT1cInRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCI+XG5cdFx0XHRcdFx0XHR7Z2V0RGVzY3JpcHRpb24odmFsdWUsIHQpfVxuXHRcdFx0XHRcdDwvcD5cblx0XHRcdFx0KX1cblx0XHRcdDwvQ2FyZEhlYWRlcj5cblxuXHRcdFx0e3Nob3cgJiYgKFxuXHRcdFx0XHQ8Q2FyZENvbnRlbnQgY2xhc3NOYW1lPVwicHQtMFwiPlxuXHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwic3BhY2UteS00XCI+XG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ3JpZC1jb2xzLTIgZ2FwLTRcIj5cblx0XHRcdFx0XHRcdFx0PGRpdj5cblx0XHRcdFx0XHRcdFx0XHQ8TGFiZWwgY2xhc3NOYW1lPVwidGV4dC14c1wiIGh0bWxGb3I9XCJmcmVxdWVuY3lcIj5cblx0XHRcdFx0XHRcdFx0XHRcdHt0KCdyZXBlYXRzJyl9XG5cdFx0XHRcdFx0XHRcdFx0PC9MYWJlbD5cblx0XHRcdFx0XHRcdFx0XHQ8U2VsZWN0XG5cdFx0XHRcdFx0XHRcdFx0XHRvblZhbHVlQ2hhbmdlPXsoZikgPT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0dXBkYXRlKHsgZnJlcTogRlJFUV9NQVBbZiBhcyBrZXlvZiB0eXBlb2YgRlJFUV9NQVBdIH0pXG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZT17ZnJlcX1cblx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8U2VsZWN0VHJpZ2dlclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJoLThcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD1cImZyZXF1ZW5jeS1zZWxlY3RcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZD1cImZyZXF1ZW5jeVwiXG5cdFx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxTZWxlY3RWYWx1ZSAvPlxuXHRcdFx0XHRcdFx0XHRcdFx0PC9TZWxlY3RUcmlnZ2VyPlxuXHRcdFx0XHRcdFx0XHRcdFx0PFNlbGVjdENvbnRlbnQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHtPYmplY3Qua2V5cyhGUkVRX01BUCkubWFwKChmKSA9PiAoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PFNlbGVjdEl0ZW0ga2V5PXtmfSB2YWx1ZT17Zn0+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR7dChmLnRvTG93ZXJDYXNlKCkpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvU2VsZWN0SXRlbT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0KSl9XG5cdFx0XHRcdFx0XHRcdFx0XHQ8L1NlbGVjdENvbnRlbnQ+XG5cdFx0XHRcdFx0XHRcdFx0PC9TZWxlY3Q+XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHQ8ZGl2PlxuXHRcdFx0XHRcdFx0XHRcdDxMYWJlbCBjbGFzc05hbWU9XCJ0ZXh0LXhzXCIgaHRtbEZvcj1cImludGVydmFsXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHR7dCgnZXZlcnknKX1cblx0XHRcdFx0XHRcdFx0XHQ8L0xhYmVsPlxuXHRcdFx0XHRcdFx0XHRcdDxJbnB1dFxuXHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiaC04XCJcblx0XHRcdFx0XHRcdFx0XHRcdGlkPVwiaW50ZXJ2YWxcIlxuXHRcdFx0XHRcdFx0XHRcdFx0bWluPVwiMVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRvbkNoYW5nZT17KGUpID0+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHVwZGF0ZSh7IGludGVydmFsOiBwYXJzZU51bShlLnRhcmdldC52YWx1ZSkgfSlcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdHR5cGU9XCJudW1iZXJcIlxuXHRcdFx0XHRcdFx0XHRcdFx0dmFsdWU9e29wdHM/LmludGVydmFsIHx8IDF9XG5cdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblxuXHRcdFx0XHRcdFx0e29wdHM/LmZyZXEgPT09IFJSdWxlLldFRUtMWSAmJiAoXG5cdFx0XHRcdFx0XHRcdDxkaXY+XG5cdFx0XHRcdFx0XHRcdFx0PExhYmVsIGNsYXNzTmFtZT1cInRleHQteHNcIj57dCgncmVwZWF0T24nKX08L0xhYmVsPlxuXHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LXdyYXAgZ2FwLTEgbXQtMVwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0e3dlZWtEYXlzLm1hcCgoZCwgaSkgPT4gKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMVwiIGtleT17ZC5sYWJlbH0+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PENoZWNrYm94XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjaGVja2VkPXtieXdlZWtkYXkuaW5jbHVkZXMoZC52YWx1ZSl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZD17YGRheS0ke2l9YH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9uQ2hlY2tlZENoYW5nZT17KCkgPT4gdG9nZ2xlRGF5KGkpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PExhYmVsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJ0ZXh0LXhzIGN1cnNvci1wb2ludGVyXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGh0bWxGb3I9e2BkYXktJHtpfWB9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0e2QubGFiZWx9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9MYWJlbD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdFx0XHQpKX1cblx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQpfVxuXG5cdFx0XHRcdFx0XHQ8ZGl2PlxuXHRcdFx0XHRcdFx0XHQ8TGFiZWwgY2xhc3NOYW1lPVwidGV4dC14c1wiPnt0KCdlbmRzJyl9PC9MYWJlbD5cblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTIgbXQtMVwiPlxuXHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0yXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8Q2hlY2tib3hcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2hlY2tlZD17ZW5kVHlwZSA9PT0gJ25ldmVyJ31cblx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ9XCJuZXZlclwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9uQ2hlY2tlZENoYW5nZT17KCkgPT4gc2V0RW5kVHlwZSgnbmV2ZXInKX1cblx0XHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8TGFiZWwgY2xhc3NOYW1lPVwidGV4dC14c1wiIGh0bWxGb3I9XCJuZXZlclwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7dCgnbmV2ZXInKX1cblx0XHRcdFx0XHRcdFx0XHRcdDwvTGFiZWw+XG5cdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTJcIj5cblx0XHRcdFx0XHRcdFx0XHRcdDxDaGVja2JveFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjaGVja2VkPXtlbmRUeXBlID09PSAnY291bnQnfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZD1cImFmdGVyXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0b25DaGVja2VkQ2hhbmdlPXsoKSA9PiBzZXRFbmRUeXBlKCdjb3VudCcpfVxuXHRcdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0XHRcdDxMYWJlbCBjbGFzc05hbWU9XCJ0ZXh0LXhzXCIgaHRtbEZvcj1cImFmdGVyXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHt0KCdhZnRlcicpfVxuXHRcdFx0XHRcdFx0XHRcdFx0PC9MYWJlbD5cblx0XHRcdFx0XHRcdFx0XHRcdHtlbmRUeXBlID09PSAnY291bnQnICYmIChcblx0XHRcdFx0XHRcdFx0XHRcdFx0PElucHV0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiaC02IHctMTYgdGV4dC14c1wiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9XCJjb3VudC1pbnB1dFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bWluPVwiMVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0b25DaGFuZ2U9eyhlKSA9PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dXBkYXRlKHsgY291bnQ6IHBhcnNlTnVtKGUudGFyZ2V0LnZhbHVlKSB9KVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlPVwibnVtYmVyXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZT17b3B0cz8uY291bnQgfHwgMX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXhzXCI+e3QoJ29jY3VycmVuY2VzJyl9PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0yXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8Q2hlY2tib3hcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2hlY2tlZD17ZW5kVHlwZSA9PT0gJ3VudGlsJ31cblx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ9XCJvblwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9uQ2hlY2tlZENoYW5nZT17KCkgPT4gc2V0RW5kVHlwZSgndW50aWwnKX1cblx0XHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8TGFiZWwgY2xhc3NOYW1lPVwidGV4dC14c1wiIGh0bWxGb3I9XCJvblwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7dCgnb24nKX1cblx0XHRcdFx0XHRcdFx0XHRcdDwvTGFiZWw+XG5cdFx0XHRcdFx0XHRcdFx0XHR7ZW5kVHlwZSA9PT0gJ3VudGlsJyAmJiAoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxEYXRlUGlja2VyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiaC02XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkYXRlPXtvcHRzPy51bnRpbH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvbkNoYW5nZT17KGQpID0+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR1cGRhdGUoe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR1bnRpbDogZCA/IGRheWpzKGQpLmVuZE9mKCdkYXknKS50b0RhdGUoKSA6IHVuZGVmaW5lZCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PC9DYXJkQ29udGVudD5cblx0XHRcdCl9XG5cdFx0PC9DYXJkPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB0eXBlICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmZ1bmN0aW9uIENhcmQoeyBjbGFzc05hbWUsIC4uLnByb3BzIH06IFJlYWN0LkNvbXBvbmVudFByb3BzPCdkaXYnPikge1xuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCd0ZXh0LWNhcmQtZm9yZWdyb3VuZCBmbGV4IGZsZXgtY29sIGdhcC02IHJvdW5kZWQteGwgYm9yZGVyIHNoYWRvdy1zbScsXG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHRcdGRhdGEtc2xvdD1cImNhcmRcIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdC8+XG5cdClcbn1cblxuZnVuY3Rpb24gQ2FyZEhlYWRlcih7IGNsYXNzTmFtZSwgLi4ucHJvcHMgfTogUmVhY3QuQ29tcG9uZW50UHJvcHM8J2Rpdic+KSB7XG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0J0Bjb250YWluZXIvY2FyZC1oZWFkZXIgZ3JpZCBhdXRvLXJvd3MtbWluIGdyaWQtcm93cy1bYXV0b19hdXRvXSBpdGVtcy1zdGFydCBnYXAtMS41IHAtNCBwYi0wIGhhcy1kYXRhLVtzbG90PWNhcmQtYWN0aW9uXTpncmlkLWNvbHMtWzFmcl9hdXRvXScsXG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHRcdGRhdGEtc2xvdD1cImNhcmQtaGVhZGVyXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmZ1bmN0aW9uIENhcmRUaXRsZSh7IGNsYXNzTmFtZSwgLi4ucHJvcHMgfTogUmVhY3QuQ29tcG9uZW50UHJvcHM8J2Rpdic+KSB7XG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbignbGVhZGluZy1ub25lIGZvbnQtc2VtaWJvbGQnLCBjbGFzc05hbWUpfVxuXHRcdFx0ZGF0YS1zbG90PVwiY2FyZC10aXRsZVwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0Lz5cblx0KVxufVxuXG5mdW5jdGlvbiBDYXJkRGVzY3JpcHRpb24oeyBjbGFzc05hbWUsIC4uLnByb3BzIH06IFJlYWN0LkNvbXBvbmVudFByb3BzPCdkaXYnPikge1xuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oJ3RleHQtbXV0ZWQtZm9yZWdyb3VuZCB0ZXh0LXNtJywgY2xhc3NOYW1lKX1cblx0XHRcdGRhdGEtc2xvdD1cImNhcmQtZGVzY3JpcHRpb25cIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdC8+XG5cdClcbn1cblxuZnVuY3Rpb24gQ2FyZEFjdGlvbih7IGNsYXNzTmFtZSwgLi4ucHJvcHMgfTogUmVhY3QuQ29tcG9uZW50UHJvcHM8J2Rpdic+KSB7XG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0J2NvbC1zdGFydC0yIHJvdy1zcGFuLTIgcm93LXN0YXJ0LTEgc2VsZi1zdGFydCBqdXN0aWZ5LXNlbGYtZW5kJyxcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0ZGF0YS1zbG90PVwiY2FyZC1hY3Rpb25cIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdC8+XG5cdClcbn1cblxuZnVuY3Rpb24gQ2FyZENvbnRlbnQoeyBjbGFzc05hbWUsIC4uLnByb3BzIH06IFJlYWN0LkNvbXBvbmVudFByb3BzPCdkaXYnPikge1xuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oJ3AtNCBwdC0wJywgY2xhc3NOYW1lKX1cblx0XHRcdGRhdGEtc2xvdD1cImNhcmQtY29udGVudFwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0Lz5cblx0KVxufVxuXG5mdW5jdGlvbiBDYXJkRm9vdGVyKHsgY2xhc3NOYW1lLCAuLi5wcm9wcyB9OiBSZWFjdC5Db21wb25lbnRQcm9wczwnZGl2Jz4pIHtcblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9e2NuKCdmbGV4IGl0ZW1zLWNlbnRlciBweC02IFsuYm9yZGVyLXRdOnB0LTYnLCBjbGFzc05hbWUpfVxuXHRcdFx0ZGF0YS1zbG90PVwiY2FyZC1mb290ZXJcIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdC8+XG5cdClcbn1cblxuZXhwb3J0IHtcblx0Q2FyZCxcblx0Q2FyZEhlYWRlcixcblx0Q2FyZEZvb3Rlcixcblx0Q2FyZFRpdGxlLFxuXHRDYXJkQWN0aW9uLFxuXHRDYXJkRGVzY3JpcHRpb24sXG5cdENhcmRDb250ZW50LFxufVxuIiwKICAgICJpbXBvcnQgKiBhcyBTZWxlY3RQcmltaXRpdmUgZnJvbSAnQHJhZGl4LXVpL3JlYWN0LXNlbGVjdCdcbmltcG9ydCB7IENoZWNrSWNvbiwgQ2hldnJvbkRvd25JY29uLCBDaGV2cm9uVXBJY29uIH0gZnJvbSAnbHVjaWRlLXJlYWN0J1xuaW1wb3J0IHR5cGUgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuZnVuY3Rpb24gU2VsZWN0KHtcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTZWxlY3RQcmltaXRpdmUuUm9vdD4pIHtcblx0cmV0dXJuIDxTZWxlY3RQcmltaXRpdmUuUm9vdCBkYXRhLXNsb3Q9XCJzZWxlY3RcIiB7Li4ucHJvcHN9IC8+XG59XG5cbmZ1bmN0aW9uIFNlbGVjdEdyb3VwKHtcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTZWxlY3RQcmltaXRpdmUuR3JvdXA+KSB7XG5cdHJldHVybiA8U2VsZWN0UHJpbWl0aXZlLkdyb3VwIGRhdGEtc2xvdD1cInNlbGVjdC1ncm91cFwiIHsuLi5wcm9wc30gLz5cbn1cblxuZnVuY3Rpb24gU2VsZWN0VmFsdWUoe1xuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNlbGVjdFByaW1pdGl2ZS5WYWx1ZT4pIHtcblx0cmV0dXJuIDxTZWxlY3RQcmltaXRpdmUuVmFsdWUgZGF0YS1zbG90PVwic2VsZWN0LXZhbHVlXCIgey4uLnByb3BzfSAvPlxufVxuXG5mdW5jdGlvbiBTZWxlY3RUcmlnZ2VyKHtcblx0Y2xhc3NOYW1lLFxuXHRzaXplID0gJ2RlZmF1bHQnLFxuXHRjaGlsZHJlbixcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTZWxlY3RQcmltaXRpdmUuVHJpZ2dlcj4gJiB7XG5cdHNpemU/OiAnc20nIHwgJ2RlZmF1bHQnXG59KSB7XG5cdHJldHVybiAoXG5cdFx0PFNlbGVjdFByaW1pdGl2ZS5UcmlnZ2VyXG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcImJvcmRlci1pbnB1dCBkYXRhLVtwbGFjZWhvbGRlcl06dGV4dC1tdXRlZC1mb3JlZ3JvdW5kIFsmX3N2Zzpub3QoW2NsYXNzKj0ndGV4dC0nXSldOnRleHQtbXV0ZWQtZm9yZWdyb3VuZCBmb2N1cy12aXNpYmxlOmJvcmRlci1yaW5nIGZvY3VzLXZpc2libGU6cmluZy1yaW5nLzUwIGFyaWEtaW52YWxpZDpyaW5nLWRlc3RydWN0aXZlLzIwIGRhcms6YXJpYS1pbnZhbGlkOnJpbmctZGVzdHJ1Y3RpdmUvNDAgYXJpYS1pbnZhbGlkOmJvcmRlci1kZXN0cnVjdGl2ZSBkYXJrOmJnLWlucHV0LzMwIGRhcms6aG92ZXI6YmctaW5wdXQvNTAgZmxleCB3LWZpdCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGdhcC0yIHJvdW5kZWQtbWQgYm9yZGVyIGJnLXRyYW5zcGFyZW50IHB4LTMgcHktMiB0ZXh0LXNtIHdoaXRlc3BhY2Utbm93cmFwIHNoYWRvdy14cyB0cmFuc2l0aW9uLVtjb2xvcixib3gtc2hhZG93XSBvdXRsaW5lLW5vbmUgZm9jdXMtdmlzaWJsZTpyaW5nLVszcHhdIGRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZCBkaXNhYmxlZDpvcGFjaXR5LTUwIGRhdGEtW3NpemU9ZGVmYXVsdF06aC05IGRhdGEtW3NpemU9c21dOmgtOCAqOmRhdGEtW3Nsb3Q9c2VsZWN0LXZhbHVlXTpsaW5lLWNsYW1wLTEgKjpkYXRhLVtzbG90PXNlbGVjdC12YWx1ZV06ZmxleCAqOmRhdGEtW3Nsb3Q9c2VsZWN0LXZhbHVlXTppdGVtcy1jZW50ZXIgKjpkYXRhLVtzbG90PXNlbGVjdC12YWx1ZV06Z2FwLTIgWyZfc3ZnXTpwb2ludGVyLWV2ZW50cy1ub25lIFsmX3N2Z106c2hyaW5rLTAgWyZfc3ZnOm5vdChbY2xhc3MqPSdzaXplLSddKV06c2l6ZS00XCIsXG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHRcdGRhdGEtc2l6ZT17c2l6ZX1cblx0XHRcdGRhdGEtc2xvdD1cInNlbGVjdC10cmlnZ2VyXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQ+XG5cdFx0XHR7Y2hpbGRyZW59XG5cdFx0XHQ8U2VsZWN0UHJpbWl0aXZlLkljb24gYXNDaGlsZD5cblx0XHRcdFx0PENoZXZyb25Eb3duSWNvbiBjbGFzc05hbWU9XCJzaXplLTQgb3BhY2l0eS01MFwiIC8+XG5cdFx0XHQ8L1NlbGVjdFByaW1pdGl2ZS5JY29uPlxuXHRcdDwvU2VsZWN0UHJpbWl0aXZlLlRyaWdnZXI+XG5cdClcbn1cblxuZnVuY3Rpb24gU2VsZWN0Q29udGVudCh7XG5cdGNsYXNzTmFtZSxcblx0Y2hpbGRyZW4sXG5cdHBvc2l0aW9uID0gJ3BvcHBlcicsXG5cdGFsaWduID0gJ2NlbnRlcicsXG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgU2VsZWN0UHJpbWl0aXZlLkNvbnRlbnQ+KSB7XG5cdHJldHVybiAoXG5cdFx0PFNlbGVjdFByaW1pdGl2ZS5Qb3J0YWw+XG5cdFx0XHQ8U2VsZWN0UHJpbWl0aXZlLkNvbnRlbnRcblx0XHRcdFx0YWxpZ249e2FsaWdufVxuXHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdCdiZy1wb3BvdmVyIHRleHQtcG9wb3Zlci1mb3JlZ3JvdW5kIGRhdGEtW3N0YXRlPW9wZW5dOmFuaW1hdGUtaW4gZGF0YS1bc3RhdGU9Y2xvc2VkXTphbmltYXRlLW91dCBkYXRhLVtzdGF0ZT1jbG9zZWRdOmZhZGUtb3V0LTAgZGF0YS1bc3RhdGU9b3Blbl06ZmFkZS1pbi0wIGRhdGEtW3N0YXRlPWNsb3NlZF06em9vbS1vdXQtOTUgZGF0YS1bc3RhdGU9b3Blbl06em9vbS1pbi05NSBkYXRhLVtzaWRlPWJvdHRvbV06c2xpZGUtaW4tZnJvbS10b3AtMiBkYXRhLVtzaWRlPWxlZnRdOnNsaWRlLWluLWZyb20tcmlnaHQtMiBkYXRhLVtzaWRlPXJpZ2h0XTpzbGlkZS1pbi1mcm9tLWxlZnQtMiBkYXRhLVtzaWRlPXRvcF06c2xpZGUtaW4tZnJvbS1ib3R0b20tMiByZWxhdGl2ZSB6LTUwIG1heC1oLSgtLXJhZGl4LXNlbGVjdC1jb250ZW50LWF2YWlsYWJsZS1oZWlnaHQpIG1pbi13LVs4cmVtXSBvcmlnaW4tKC0tcmFkaXgtc2VsZWN0LWNvbnRlbnQtdHJhbnNmb3JtLW9yaWdpbikgb3ZlcmZsb3cteC1oaWRkZW4gb3ZlcmZsb3cteS1hdXRvIHJvdW5kZWQtbWQgYm9yZGVyIHNoYWRvdy1tZCcsXG5cdFx0XHRcdFx0cG9zaXRpb24gPT09ICdwb3BwZXInICYmXG5cdFx0XHRcdFx0XHQnZGF0YS1bc2lkZT1ib3R0b21dOnRyYW5zbGF0ZS15LTEgZGF0YS1bc2lkZT1sZWZ0XTotdHJhbnNsYXRlLXgtMSBkYXRhLVtzaWRlPXJpZ2h0XTp0cmFuc2xhdGUteC0xIGRhdGEtW3NpZGU9dG9wXTotdHJhbnNsYXRlLXktMScsXG5cdFx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHRcdCl9XG5cdFx0XHRcdGRhdGEtc2xvdD1cInNlbGVjdC1jb250ZW50XCJcblx0XHRcdFx0cG9zaXRpb249e3Bvc2l0aW9ufVxuXHRcdFx0XHR7Li4ucHJvcHN9XG5cdFx0XHQ+XG5cdFx0XHRcdDxTZWxlY3RTY3JvbGxVcEJ1dHRvbiAvPlxuXHRcdFx0XHQ8U2VsZWN0UHJpbWl0aXZlLlZpZXdwb3J0XG5cdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdCdwLTEnLFxuXHRcdFx0XHRcdFx0cG9zaXRpb24gPT09ICdwb3BwZXInICYmXG5cdFx0XHRcdFx0XHRcdCdoLVt2YXIoLS1yYWRpeC1zZWxlY3QtdHJpZ2dlci1oZWlnaHQpXSB3LWZ1bGwgbWluLXctW3ZhcigtLXJhZGl4LXNlbGVjdC10cmlnZ2VyLXdpZHRoKV0gc2Nyb2xsLW15LTEnXG5cdFx0XHRcdFx0KX1cblx0XHRcdFx0PlxuXHRcdFx0XHRcdHtjaGlsZHJlbn1cblx0XHRcdFx0PC9TZWxlY3RQcmltaXRpdmUuVmlld3BvcnQ+XG5cdFx0XHRcdDxTZWxlY3RTY3JvbGxEb3duQnV0dG9uIC8+XG5cdFx0XHQ8L1NlbGVjdFByaW1pdGl2ZS5Db250ZW50PlxuXHRcdDwvU2VsZWN0UHJpbWl0aXZlLlBvcnRhbD5cblx0KVxufVxuXG5mdW5jdGlvbiBTZWxlY3RMYWJlbCh7XG5cdGNsYXNzTmFtZSxcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTZWxlY3RQcmltaXRpdmUuTGFiZWw+KSB7XG5cdHJldHVybiAoXG5cdFx0PFNlbGVjdFByaW1pdGl2ZS5MYWJlbFxuXHRcdFx0Y2xhc3NOYW1lPXtjbigndGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHB4LTIgcHktMS41IHRleHQteHMnLCBjbGFzc05hbWUpfVxuXHRcdFx0ZGF0YS1zbG90PVwic2VsZWN0LWxhYmVsXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmZ1bmN0aW9uIFNlbGVjdEl0ZW0oe1xuXHRjbGFzc05hbWUsXG5cdGNoaWxkcmVuLFxuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNlbGVjdFByaW1pdGl2ZS5JdGVtPikge1xuXHRyZXR1cm4gKFxuXHRcdDxTZWxlY3RQcmltaXRpdmUuSXRlbVxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XCJmb2N1czpiZy1hY2NlbnQgZm9jdXM6dGV4dC1hY2NlbnQtZm9yZWdyb3VuZCBbJl9zdmc6bm90KFtjbGFzcyo9J3RleHQtJ10pXTp0ZXh0LW11dGVkLWZvcmVncm91bmQgcmVsYXRpdmUgZmxleCB3LWZ1bGwgY3Vyc29yLWRlZmF1bHQgaXRlbXMtY2VudGVyIGdhcC0yIHJvdW5kZWQtc20gcHktMS41IHByLTggcGwtMiB0ZXh0LXNtIG91dGxpbmUtaGlkZGVuIHNlbGVjdC1ub25lIGRhdGEtW2Rpc2FibGVkXTpwb2ludGVyLWV2ZW50cy1ub25lIGRhdGEtW2Rpc2FibGVkXTpvcGFjaXR5LTUwIFsmX3N2Z106cG9pbnRlci1ldmVudHMtbm9uZSBbJl9zdmddOnNocmluay0wIFsmX3N2Zzpub3QoW2NsYXNzKj0nc2l6ZS0nXSldOnNpemUtNCAqOltzcGFuXTpsYXN0OmZsZXggKjpbc3Bhbl06bGFzdDppdGVtcy1jZW50ZXIgKjpbc3Bhbl06bGFzdDpnYXAtMlwiLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJzZWxlY3QtaXRlbVwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0PlxuXHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwiYWJzb2x1dGUgcmlnaHQtMiBmbGV4IHNpemUtMy41IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlclwiPlxuXHRcdFx0XHQ8U2VsZWN0UHJpbWl0aXZlLkl0ZW1JbmRpY2F0b3I+XG5cdFx0XHRcdFx0PENoZWNrSWNvbiBjbGFzc05hbWU9XCJzaXplLTRcIiAvPlxuXHRcdFx0XHQ8L1NlbGVjdFByaW1pdGl2ZS5JdGVtSW5kaWNhdG9yPlxuXHRcdFx0PC9zcGFuPlxuXHRcdFx0PFNlbGVjdFByaW1pdGl2ZS5JdGVtVGV4dD57Y2hpbGRyZW59PC9TZWxlY3RQcmltaXRpdmUuSXRlbVRleHQ+XG5cdFx0PC9TZWxlY3RQcmltaXRpdmUuSXRlbT5cblx0KVxufVxuXG5mdW5jdGlvbiBTZWxlY3RTZXBhcmF0b3Ioe1xuXHRjbGFzc05hbWUsXG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgU2VsZWN0UHJpbWl0aXZlLlNlcGFyYXRvcj4pIHtcblx0cmV0dXJuIChcblx0XHQ8U2VsZWN0UHJpbWl0aXZlLlNlcGFyYXRvclxuXHRcdFx0Y2xhc3NOYW1lPXtjbignYmctYm9yZGVyIHBvaW50ZXItZXZlbnRzLW5vbmUgLW14LTEgbXktMSBoLXB4JywgY2xhc3NOYW1lKX1cblx0XHRcdGRhdGEtc2xvdD1cInNlbGVjdC1zZXBhcmF0b3JcIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdC8+XG5cdClcbn1cblxuZnVuY3Rpb24gU2VsZWN0U2Nyb2xsVXBCdXR0b24oe1xuXHRjbGFzc05hbWUsXG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgU2VsZWN0UHJpbWl0aXZlLlNjcm9sbFVwQnV0dG9uPikge1xuXHRyZXR1cm4gKFxuXHRcdDxTZWxlY3RQcmltaXRpdmUuU2Nyb2xsVXBCdXR0b25cblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCdmbGV4IGN1cnNvci1kZWZhdWx0IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBweS0xJyxcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0ZGF0YS1zbG90PVwic2VsZWN0LXNjcm9sbC11cC1idXR0b25cIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdD5cblx0XHRcdDxDaGV2cm9uVXBJY29uIGNsYXNzTmFtZT1cInNpemUtNFwiIC8+XG5cdFx0PC9TZWxlY3RQcmltaXRpdmUuU2Nyb2xsVXBCdXR0b24+XG5cdClcbn1cblxuZnVuY3Rpb24gU2VsZWN0U2Nyb2xsRG93bkJ1dHRvbih7XG5cdGNsYXNzTmFtZSxcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTZWxlY3RQcmltaXRpdmUuU2Nyb2xsRG93bkJ1dHRvbj4pIHtcblx0cmV0dXJuIChcblx0XHQ8U2VsZWN0UHJpbWl0aXZlLlNjcm9sbERvd25CdXR0b25cblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCdmbGV4IGN1cnNvci1kZWZhdWx0IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBweS0xJyxcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0ZGF0YS1zbG90PVwic2VsZWN0LXNjcm9sbC1kb3duLWJ1dHRvblwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0PlxuXHRcdFx0PENoZXZyb25Eb3duSWNvbiBjbGFzc05hbWU9XCJzaXplLTRcIiAvPlxuXHRcdDwvU2VsZWN0UHJpbWl0aXZlLlNjcm9sbERvd25CdXR0b24+XG5cdClcbn1cblxuZXhwb3J0IHtcblx0U2VsZWN0LFxuXHRTZWxlY3RDb250ZW50LFxuXHRTZWxlY3RHcm91cCxcblx0U2VsZWN0SXRlbSxcblx0U2VsZWN0TGFiZWwsXG5cdFNlbGVjdFNjcm9sbERvd25CdXR0b24sXG5cdFNlbGVjdFNjcm9sbFVwQnV0dG9uLFxuXHRTZWxlY3RTZXBhcmF0b3IsXG5cdFNlbGVjdFRyaWdnZXIsXG5cdFNlbGVjdFZhbHVlLFxufVxuIiwKICAgICJpbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB0eXBlIHsgUmVjdXJyZW5jZUVkaXRTY29wZSB9IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS90eXBlcydcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcblxuZXhwb3J0IGZ1bmN0aW9uIHVzZVJlY3VycmluZ0V2ZW50QWN0aW9ucyhvbkNvbXBsZXRlPzogKCkgPT4gdm9pZCkge1xuXHRjb25zdCB7IHVwZGF0ZVJlY3VycmluZ0V2ZW50LCBkZWxldGVSZWN1cnJpbmdFdmVudCB9ID1cblx0XHR1c2VTbWFydENhbGVuZGFyQ29udGV4dCgoY29udGV4dCkgPT4gKHtcblx0XHRcdHVwZGF0ZVJlY3VycmluZ0V2ZW50OiBjb250ZXh0LnVwZGF0ZVJlY3VycmluZ0V2ZW50LFxuXHRcdFx0ZGVsZXRlUmVjdXJyaW5nRXZlbnQ6IGNvbnRleHQuZGVsZXRlUmVjdXJyaW5nRXZlbnQsXG5cdFx0fSkpXG5cblx0Y29uc3QgW2RpYWxvZ1N0YXRlLCBzZXREaWFsb2dTdGF0ZV0gPSB1c2VTdGF0ZTx7XG5cdFx0aXNPcGVuOiBib29sZWFuXG5cdFx0b3BlcmF0aW9uVHlwZTogJ2VkaXQnIHwgJ2RlbGV0ZSdcblx0XHRldmVudDogQ2FsZW5kYXJFdmVudCB8IG51bGxcblx0XHR1cGRhdGVzPzogUGFydGlhbDxDYWxlbmRhckV2ZW50PlxuXHRcdG9uQ29uZmlybT86IChzY29wZTogUmVjdXJyZW5jZUVkaXRTY29wZSkgPT4gdm9pZFxuXHR9Pih7XG5cdFx0aXNPcGVuOiBmYWxzZSxcblx0XHRvcGVyYXRpb25UeXBlOiAnZWRpdCcsXG5cdFx0ZXZlbnQ6IG51bGwsXG5cdH0pXG5cblx0Y29uc3Qgb3BlbkVkaXREaWFsb2cgPSB1c2VDYWxsYmFjayhcblx0XHQoZXZlbnQ6IENhbGVuZGFyRXZlbnQsIHVwZGF0ZXM6IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD4pID0+IHtcblx0XHRcdHNldERpYWxvZ1N0YXRlKHtcblx0XHRcdFx0aXNPcGVuOiB0cnVlLFxuXHRcdFx0XHRvcGVyYXRpb25UeXBlOiAnZWRpdCcsXG5cdFx0XHRcdGV2ZW50LFxuXHRcdFx0XHR1cGRhdGVzLFxuXHRcdFx0XHRvbkNvbmZpcm06IChzY29wZTogUmVjdXJyZW5jZUVkaXRTY29wZSkgPT4ge1xuXHRcdFx0XHRcdHVwZGF0ZVJlY3VycmluZ0V2ZW50KGV2ZW50LCB1cGRhdGVzLCB7XG5cdFx0XHRcdFx0XHRzY29wZSxcblx0XHRcdFx0XHRcdGV2ZW50RGF0ZTogZXZlbnQuc3RhcnQsXG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0fSxcblx0XHRcdH0pXG5cdFx0fSxcblx0XHRbdXBkYXRlUmVjdXJyaW5nRXZlbnRdXG5cdClcblxuXHRjb25zdCBvcGVuRGVsZXRlRGlhbG9nID0gdXNlQ2FsbGJhY2soXG5cdFx0KGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB7XG5cdFx0XHRzZXREaWFsb2dTdGF0ZSh7XG5cdFx0XHRcdGlzT3BlbjogdHJ1ZSxcblx0XHRcdFx0b3BlcmF0aW9uVHlwZTogJ2RlbGV0ZScsXG5cdFx0XHRcdGV2ZW50LFxuXHRcdFx0XHRvbkNvbmZpcm06IChzY29wZTogUmVjdXJyZW5jZUVkaXRTY29wZSkgPT4ge1xuXHRcdFx0XHRcdGRlbGV0ZVJlY3VycmluZ0V2ZW50KGV2ZW50LCB7XG5cdFx0XHRcdFx0XHRzY29wZSxcblx0XHRcdFx0XHRcdGV2ZW50RGF0ZTogZXZlbnQuc3RhcnQsXG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0fSxcblx0XHRcdH0pXG5cdFx0fSxcblx0XHRbZGVsZXRlUmVjdXJyaW5nRXZlbnRdXG5cdClcblxuXHRjb25zdCBjbG9zZURpYWxvZyA9IHVzZUNhbGxiYWNrKCgpID0+IHtcblx0XHRzZXREaWFsb2dTdGF0ZSh7XG5cdFx0XHRpc09wZW46IGZhbHNlLFxuXHRcdFx0b3BlcmF0aW9uVHlwZTogJ2VkaXQnLFxuXHRcdFx0ZXZlbnQ6IG51bGwsXG5cdFx0fSlcblx0fSwgW10pXG5cblx0Y29uc3QgaGFuZGxlQ29uZmlybSA9IHVzZUNhbGxiYWNrKFxuXHRcdChzY29wZTogUmVjdXJyZW5jZUVkaXRTY29wZSkgPT4ge1xuXHRcdFx0aWYgKGRpYWxvZ1N0YXRlLm9uQ29uZmlybSkge1xuXHRcdFx0XHRkaWFsb2dTdGF0ZS5vbkNvbmZpcm0oc2NvcGUpXG5cdFx0XHR9XG5cdFx0XHRjbG9zZURpYWxvZygpXG5cdFx0XHQvLyBDYWxsIG9uQ29tcGxldGUgdG8gY2xvc2UgdGhlIHBhcmVudCBmb3JtXG5cdFx0XHRvbkNvbXBsZXRlPy4oKVxuXHRcdH0sXG5cdFx0W2RpYWxvZ1N0YXRlLCBjbG9zZURpYWxvZywgb25Db21wbGV0ZV1cblx0KVxuXG5cdHJldHVybiB7XG5cdFx0ZGlhbG9nU3RhdGUsXG5cdFx0b3BlbkVkaXREaWFsb2csXG5cdFx0b3BlbkRlbGV0ZURpYWxvZyxcblx0XHRjbG9zZURpYWxvZyxcblx0XHRoYW5kbGVDb25maXJtLFxuXHR9XG59XG4iLAogICAgImltcG9ydCB7XG5cdERpYWxvZyxcblx0RGlhbG9nQ29udGVudCxcblx0RGlhbG9nRGVzY3JpcHRpb24sXG5cdERpYWxvZ0hlYWRlcixcblx0RGlhbG9nVGl0bGUsXG59IGZyb20gJ0AvY29tcG9uZW50cy91aS9kaWFsb2cnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICcuLi90eXBlcydcbmltcG9ydCB7IEV2ZW50Rm9ybSB9IGZyb20gJy4vZXZlbnQtZm9ybSdcblxuZXhwb3J0IGNvbnN0IEV2ZW50Rm9ybURpYWxvZyA9ICgpID0+IHtcblx0Y29uc3Qge1xuXHRcdHQsXG5cdFx0c2VsZWN0ZWRFdmVudCxcblx0XHRpc0V2ZW50Rm9ybU9wZW4sXG5cdFx0Y2xvc2VFdmVudEZvcm0sXG5cdFx0YWRkRXZlbnQsXG5cdFx0dXBkYXRlRXZlbnQsXG5cdFx0ZGVsZXRlRXZlbnQsXG5cdFx0cmVuZGVyRXZlbnRGb3JtLFxuXHR9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKGNvbnRleHQpID0+ICh7XG5cdFx0dDogY29udGV4dC50LFxuXHRcdHNlbGVjdGVkRXZlbnQ6IGNvbnRleHQuc2VsZWN0ZWRFdmVudCxcblx0XHRpc0V2ZW50Rm9ybU9wZW46IGNvbnRleHQuaXNFdmVudEZvcm1PcGVuLFxuXHRcdGNsb3NlRXZlbnRGb3JtOiBjb250ZXh0LmNsb3NlRXZlbnRGb3JtLFxuXHRcdGFkZEV2ZW50OiBjb250ZXh0LmFkZEV2ZW50LFxuXHRcdHVwZGF0ZUV2ZW50OiBjb250ZXh0LnVwZGF0ZUV2ZW50LFxuXHRcdGRlbGV0ZUV2ZW50OiBjb250ZXh0LmRlbGV0ZUV2ZW50LFxuXHRcdHJlbmRlckV2ZW50Rm9ybTogY29udGV4dC5yZW5kZXJFdmVudEZvcm0sXG5cdH0pKVxuXG5cdGNvbnN0IGhhbmRsZU9uVXBkYXRlID0gKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB7XG5cdFx0dXBkYXRlRXZlbnQoZXZlbnQuaWQsIGV2ZW50KVxuXHR9XG5cblx0Y29uc3QgaGFuZGxlT25EZWxldGUgPSAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHtcblx0XHRkZWxldGVFdmVudChldmVudC5pZClcblx0fVxuXG5cdGNvbnN0IGV2ZW50Rm9ybVByb3BzID0ge1xuXHRcdG9wZW46IGlzRXZlbnRGb3JtT3Blbixcblx0XHRvbkNsb3NlOiBjbG9zZUV2ZW50Rm9ybSxcblx0XHRzZWxlY3RlZEV2ZW50LFxuXHRcdG9uQWRkOiBhZGRFdmVudCxcblx0XHRvblVwZGF0ZTogaGFuZGxlT25VcGRhdGUsXG5cdFx0b25EZWxldGU6IGhhbmRsZU9uRGVsZXRlLFxuXHR9XG5cblx0aWYgKHJlbmRlckV2ZW50Rm9ybSkge1xuXHRcdHJldHVybiByZW5kZXJFdmVudEZvcm0oZXZlbnRGb3JtUHJvcHMpXG5cdH1cblxuXHRyZXR1cm4gKFxuXHRcdDxEaWFsb2cgb25PcGVuQ2hhbmdlPXtjbG9zZUV2ZW50Rm9ybX0gb3Blbj17aXNFdmVudEZvcm1PcGVufT5cblx0XHRcdDxEaWFsb2dDb250ZW50IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgaC1bOTB2aF0gdy1bOTB2d10gbWF4LXctWzUwMHB4XSBwLTQgc206cC02IG92ZXJmbG93LWhpZGRlbiBnYXAtMFwiPlxuXHRcdFx0XHQ8RGlhbG9nSGVhZGVyIGNsYXNzTmFtZT1cIm1iLTIgc206bWItNCBzaHJpbmstMFwiPlxuXHRcdFx0XHRcdDxEaWFsb2dUaXRsZSBjbGFzc05hbWU9XCJ0ZXh0LWJhc2Ugc206dGV4dC1sZ1wiPlxuXHRcdFx0XHRcdFx0e3NlbGVjdGVkRXZlbnQ/LmlkID8gdCgnZWRpdEV2ZW50JykgOiB0KCdjcmVhdGVFdmVudCcpfVxuXHRcdFx0XHRcdDwvRGlhbG9nVGl0bGU+XG5cdFx0XHRcdFx0PERpYWxvZ0Rlc2NyaXB0aW9uIGNsYXNzTmFtZT1cInRleHQteHMgc206dGV4dC1zbVwiPlxuXHRcdFx0XHRcdFx0e3NlbGVjdGVkRXZlbnQ/LmlkID8gdCgnZWRpdEV2ZW50RGV0YWlscycpIDogdCgnYWRkTmV3RXZlbnQnKX1cblx0XHRcdFx0XHQ8L0RpYWxvZ0Rlc2NyaXB0aW9uPlxuXHRcdFx0XHQ8L0RpYWxvZ0hlYWRlcj5cblxuXHRcdFx0XHQ8RXZlbnRGb3JtIHsuLi5ldmVudEZvcm1Qcm9wc30gLz5cblx0XHRcdDwvRGlhbG9nQ29udGVudD5cblx0XHQ8L0RpYWxvZz5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgeyBDYWxlbmRhciBhcyBDYWxlbmRhckljb24sIERvd25sb2FkLCBNZW51LCBQbHVzIH0gZnJvbSAnbHVjaWRlLXJlYWN0J1xuaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2J1dHRvbidcbmltcG9ydCB7XG5cdFBvcG92ZXIsXG5cdFBvcG92ZXJDb250ZW50LFxuXHRQb3BvdmVyVHJpZ2dlcixcbn0gZnJvbSAnQC9jb21wb25lbnRzL3VpL3BvcG92ZXInXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgZG93bmxvYWRJQ2FsZW5kYXIgfSBmcm9tICdAL2xpYi91dGlscy9leHBvcnQtaWNhbCdcbmltcG9ydCBUaXRsZUNvbnRlbnQgZnJvbSAnLi90aXRsZS1jb250ZW50J1xuaW1wb3J0IFZpZXdDb250cm9scyBmcm9tICcuL3ZpZXctY29udHJvbHMnXG5cbmludGVyZmFjZSBIZWFkZXJQcm9wcyB7XG5cdGNsYXNzTmFtZT86IHN0cmluZ1xufVxuXG5jb25zdCBIZWFkZXI6IFJlYWN0LkZDPEhlYWRlclByb3BzPiA9ICh7IGNsYXNzTmFtZSA9ICcnIH0pID0+IHtcblx0Y29uc3Qge1xuXHRcdHZpZXcsXG5cdFx0c2V0Vmlldyxcblx0XHRuZXh0UGVyaW9kLFxuXHRcdHByZXZQZXJpb2QsXG5cdFx0dG9kYXksXG5cdFx0b3BlbkV2ZW50Rm9ybSxcblx0XHRoZWFkZXJDb21wb25lbnQsXG5cdFx0aGVhZGVyQ2xhc3NOYW1lLFxuXHRcdHJhd0V2ZW50cyxcblx0XHR0LFxuXHR9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKGN0eCkgPT4gKHtcblx0XHR2aWV3OiBjdHgudmlldyxcblx0XHRzZXRWaWV3OiBjdHguc2V0Vmlldyxcblx0XHRuZXh0UGVyaW9kOiBjdHgubmV4dFBlcmlvZCxcblx0XHRwcmV2UGVyaW9kOiBjdHgucHJldlBlcmlvZCxcblx0XHR0b2RheTogY3R4LnRvZGF5LFxuXHRcdG9wZW5FdmVudEZvcm06IGN0eC5vcGVuRXZlbnRGb3JtLFxuXHRcdGhlYWRlckNvbXBvbmVudDogY3R4LmhlYWRlckNvbXBvbmVudCxcblx0XHRoZWFkZXJDbGFzc05hbWU6IGN0eC5oZWFkZXJDbGFzc05hbWUsXG5cdFx0cmF3RXZlbnRzOiBjdHgucmF3RXZlbnRzLFxuXHRcdHQ6IGN0eC50LFxuXHR9KSlcblxuXHRjb25zdCBbbW9iaWxlTWVudU9wZW4sIHNldE1vYmlsZU1lbnVPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKVxuXG5cdGNvbnN0IGNsb3NlTW9iaWxlTWVudSA9ICgpID0+IHNldE1vYmlsZU1lbnVPcGVuKGZhbHNlKVxuXG5cdGNvbnN0IGhhbmRsZUV4cG9ydCA9ICgpID0+IHtcblx0XHRjb25zdCBmaWxlbmFtZSA9IGBpbGFteS1jYWxlbmRhci0ke25ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zcGxpdCgnVCcpWzBdfS5pY3NgXG5cdFx0ZG93bmxvYWRJQ2FsZW5kYXIocmF3RXZlbnRzLCBmaWxlbmFtZSwgJ2lsYW15IENhbGVuZGFyJylcblx0XHRjbG9zZU1vYmlsZU1lbnUoKVxuXHR9XG5cblx0Y29uc3QgTmV3RXZlbnRCdXR0b24gPSAoKSA9PiAoXG5cdFx0PEJ1dHRvblxuXHRcdFx0Y2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTFcIlxuXHRcdFx0b25DbGljaz17KCkgPT4gb3BlbkV2ZW50Rm9ybSgpfVxuXHRcdFx0c2l6ZT1cInNtXCJcblx0XHRcdHZhcmlhbnQ9XCJkZWZhdWx0XCJcblx0XHQ+XG5cdFx0XHQ8UGx1cyBjbGFzc05hbWU9XCJoLTQgdy00XCIgLz5cblx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cImhpZGRlbiBANHhsOmlubGluZVwiPnt0KCduZXcnKX08L3NwYW4+XG5cdFx0PC9CdXR0b24+XG5cdClcblxuXHRjb25zdCBFeHBvcnRCdXR0b24gPSAoeyBmdWxsV2lkdGggPSBmYWxzZSB9OiB7IGZ1bGxXaWR0aD86IGJvb2xlYW4gfSkgPT4gKFxuXHRcdDxCdXR0b25cblx0XHRcdGNsYXNzTmFtZT17Y24oJ2ZsZXggaXRlbXMtY2VudGVyIGdhcC0xJywgZnVsbFdpZHRoICYmICd3LWZ1bGwgZ2FwLTInKX1cblx0XHRcdG9uQ2xpY2s9e2hhbmRsZUV4cG9ydH1cblx0XHRcdHNpemU9XCJzbVwiXG5cdFx0XHR2YXJpYW50PVwib3V0bGluZVwiXG5cdFx0PlxuXHRcdFx0PERvd25sb2FkIGNsYXNzTmFtZT1cImgtNCB3LTRcIiAvPlxuXHRcdFx0e2Z1bGxXaWR0aCA/IChcblx0XHRcdFx0YCR7dCgnZXhwb3J0Jyl9IENhbGVuZGFyICguaWNzKWBcblx0XHRcdCkgOiAoXG5cdFx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cImhpZGRlbiBANHhsL2Jhc2UtaGVhZGVyOmlubGluZVwiPnt0KCdleHBvcnQnKX08L3NwYW4+XG5cdFx0XHQpfVxuXHRcdDwvQnV0dG9uPlxuXHQpXG5cblx0aWYgKGhlYWRlckNvbXBvbmVudCkge1xuXHRcdHJldHVybiBoZWFkZXJDb21wb25lbnRcblx0fVxuXG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPVwiQGNvbnRhaW5lci9iYXNlLWhlYWRlciB3LWZ1bGxcIlxuXHRcdFx0ZGF0YS10ZXN0aWQ9XCJjYWxlbmRhci1oZWFkZXJcIlxuXHRcdD5cblx0XHRcdDxkaXZcblx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHQnZmxleCBqdXN0aWZ5LWNlbnRlciBAMnhsL2Jhc2UtaGVhZGVyOmp1c3RpZnktYmV0d2VlbiBmbGV4LXdyYXAgaXRlbXMtY2VudGVyIGdhcC0yJyxcblx0XHRcdFx0XHRjbGFzc05hbWUsXG5cdFx0XHRcdFx0aGVhZGVyQ2xhc3NOYW1lXG5cdFx0XHRcdCl9XG5cdFx0XHQ+XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LXdyYXAgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0xIEAyeGwvYmFzZS1oZWFkZXI6anVzdGlmeS1zdGFydFwiPlxuXHRcdFx0XHRcdDxDYWxlbmRhckljb24gY2xhc3NOYW1lPVwiaC01IHctNVwiIC8+XG5cdFx0XHRcdFx0PFRpdGxlQ29udGVudCAvPlxuXHRcdFx0XHQ8L2Rpdj5cblxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC13cmFwIGp1c3RpZnktc3RhcnQgQHhsL2Jhc2UtaGVhZGVyOmp1c3RpZnktY2VudGVyIGdhcC0xIEA0eGwvYmFzZS1oZWFkZXI6anVzdGlmeS1lbmQgb3ZlcmZsb3cteC1hdXRvXCI+XG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJoaWRkZW4gQG1kL2Jhc2UtaGVhZGVyOmZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktc3RhcnQgZ2FwLTFcIj5cblx0XHRcdFx0XHRcdDxWaWV3Q29udHJvbHNcblx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwianVzdGlmeS1lbmRcIlxuXHRcdFx0XHRcdFx0XHRjdXJyZW50Vmlldz17dmlld31cblx0XHRcdFx0XHRcdFx0b25DaGFuZ2U9e3NldFZpZXd9XG5cdFx0XHRcdFx0XHRcdG9uTmV4dD17bmV4dFBlcmlvZH1cblx0XHRcdFx0XHRcdFx0b25QcmV2aW91cz17cHJldlBlcmlvZH1cblx0XHRcdFx0XHRcdFx0b25Ub2RheT17dG9kYXl9XG5cdFx0XHRcdFx0XHRcdHZhcmlhbnQ9XCJkZWZhdWx0XCJcblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHQ8TmV3RXZlbnRCdXR0b24gLz5cblx0XHRcdFx0XHRcdDxFeHBvcnRCdXR0b24gLz5cblx0XHRcdFx0XHQ8L2Rpdj5cblxuXHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1lbmQgZ2FwLTEgQG1kL2Jhc2UtaGVhZGVyOmhpZGRlblwiPlxuXHRcdFx0XHRcdFx0PE5ld0V2ZW50QnV0dG9uIC8+XG5cdFx0XHRcdFx0XHQ8UG9wb3ZlciBvbk9wZW5DaGFuZ2U9e3NldE1vYmlsZU1lbnVPcGVufSBvcGVuPXttb2JpbGVNZW51T3Blbn0+XG5cdFx0XHRcdFx0XHRcdDxQb3BvdmVyVHJpZ2dlciBhc0NoaWxkPlxuXHRcdFx0XHRcdFx0XHRcdDxCdXR0b24gc2l6ZT1cInNtXCIgdmFyaWFudD1cIm91dGxpbmVcIj5cblx0XHRcdFx0XHRcdFx0XHRcdDxNZW51IGNsYXNzTmFtZT1cImgtNCB3LTRcIiAvPlxuXHRcdFx0XHRcdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0XHRcdFx0XHQ8L1BvcG92ZXJUcmlnZ2VyPlxuXHRcdFx0XHRcdFx0XHQ8UG9wb3ZlckNvbnRlbnQgYWxpZ249XCJlbmRcIiBjbGFzc05hbWU9XCJ3LVsyNDBweF0gcC0yXCI+XG5cdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTJcIj5cblx0XHRcdFx0XHRcdFx0XHRcdDxWaWV3Q29udHJvbHNcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y3VycmVudFZpZXc9e3ZpZXd9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9uQ2hhbmdlPXsodikgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHNldFZpZXcodilcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbG9zZU1vYmlsZU1lbnUoKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvbk5leHQ9eygpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRuZXh0UGVyaW9kKClcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbG9zZU1vYmlsZU1lbnUoKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvblByZXZpb3VzPXsoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0cHJldlBlcmlvZCgpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xvc2VNb2JpbGVNZW51KClcblx0XHRcdFx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0b25Ub2RheT17KCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRvZGF5KClcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbG9zZU1vYmlsZU1lbnUoKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YXJpYW50PVwiZ3JpZFwiXG5cdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJwdC0yIGJvcmRlci10XCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxFeHBvcnRCdXR0b24gZnVsbFdpZHRoIC8+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0PC9Qb3BvdmVyQ29udGVudD5cblx0XHRcdFx0XHRcdDwvUG9wb3Zlcj5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQ8L2Rpdj5cblx0XHQ8L2Rpdj5cblx0KVxufVxuXG5leHBvcnQgZGVmYXVsdCBIZWFkZXJcbiIsCiAgICAiaW1wb3J0IHsgUlJ1bGUgfSBmcm9tICdycnVsZSdcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcblxuY29uc3QgQ1JMRiA9ICdcXHJcXG4nXG5cbmNvbnN0IFVUQ19WVElNRVpPTkUgPSBbXG5cdCdCRUdJTjpWVElNRVpPTkUnLFxuXHQnVFpJRDpVVEMnLFxuXHQnQkVHSU46U1RBTkRBUkQnLFxuXHQnRFRTVEFSVDoxOTcwMDEwMVQwMDAwMDAnLFxuXHQnVFpOQU1FOlVUQycsXG5cdCdUWk9GRlNFVEZST006KzAwMDAnLFxuXHQnVFpPRkZTRVRUTzorMDAwMCcsXG5cdCdFTkQ6U1RBTkRBUkQnLFxuXHQnRU5EOlZUSU1FWk9ORScsXG5dLmpvaW4oQ1JMRilcblxuY29uc3QgZXNjYXBlVGV4dCA9ICh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuXHRyZXR1cm4gdGV4dFxuXHRcdC5yZXBsYWNlQWxsKCdcXFxcJywgJ1xcXFxcXFxcJylcblx0XHQucmVwbGFjZUFsbCgnOycsICdcXFxcOycpXG5cdFx0LnJlcGxhY2VBbGwoJywnLCAnXFxcXCwnKVxuXHRcdC5yZXBsYWNlQWxsKCdcXG4nLCAnXFxcXG4nKVxuXHRcdC5yZXBsYWNlQWxsKCdcXHInLCAnJylcbn1cblxuY29uc3QgZm9ybWF0RGF0ZSA9IChkYXRlOiBkYXlqcy5EYXlqcywgaXNBbGxEYXkgPSBmYWxzZSk6IHN0cmluZyA9PiB7XG5cdHJldHVybiBpc0FsbERheVxuXHRcdD8gZGF0ZS5mb3JtYXQoJ1lZWVlNTUREJylcblx0XHQ6IGRhdGUudXRjKCkuZm9ybWF0KCdZWVlZTU1ERFtUXUhIbW1zc1taXScpXG59XG5cbmNvbnN0IGdldFVJRCA9IChldmVudDogQ2FsZW5kYXJFdmVudCk6IHN0cmluZyA9PiB7XG5cdHJldHVybiBldmVudC51aWQgfHwgYCR7ZXZlbnQuaWR9QGlsYW15LmNhbGVuZGFyYFxufVxuXG5jb25zdCBmb3JtYXRSUnVsZSA9IChycnVsZU9wdGlvbnM6IHVua25vd24pOiBzdHJpbmcgPT4ge1xuXHR0cnkge1xuXHRcdGNvbnN0IHJydWxlU3RyaW5nID0gbmV3IFJSdWxlKFxuXHRcdFx0cnJ1bGVPcHRpb25zIGFzIENvbnN0cnVjdG9yUGFyYW1ldGVyczx0eXBlb2YgUlJ1bGU+WzBdXG5cdFx0KS50b1N0cmluZygpXG5cdFx0cmV0dXJuIChcblx0XHRcdHJydWxlU3RyaW5nLnNwbGl0KCdcXG4nKS5maW5kKChsaW5lKSA9PiBsaW5lLnN0YXJ0c1dpdGgoJ1JSVUxFOicpKSB8fCAnJ1xuXHRcdClcblx0fSBjYXRjaCB7XG5cdFx0cmV0dXJuICcnXG5cdH1cbn1cblxuY29uc3QgY29udmVydEV2ZW50VG9WRXZlbnQgPSAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpOiBzdHJpbmcgPT4ge1xuXHRjb25zdCB0aW1lc3RhbXAgPSBkYXlqcygpLnV0YygpLmZvcm1hdCgnWVlZWU1NRERbVF1ISG1tc3NbWl0nKVxuXHRjb25zdCBkYXRlUGFyYW0gPSBldmVudC5hbGxEYXkgPyAnO1ZBTFVFPURBVEUnIDogJydcblx0Y29uc3QgcnJ1bGUgPSBldmVudC5ycnVsZSA/IGZvcm1hdFJSdWxlKGV2ZW50LnJydWxlKSA6ICcnXG5cblx0Y29uc3QgZXhkYXRlcyA9IGV2ZW50LmV4ZGF0ZXM/Lmxlbmd0aFxuXHRcdD8gZXZlbnQuZXhkYXRlcy5tYXAoKGQpID0+IGZvcm1hdERhdGUoZGF5anMoZCksIGV2ZW50LmFsbERheSkpLmpvaW4oJywnKVxuXHRcdDogbnVsbFxuXG5cdGNvbnN0IHJlY3VycmVuY2VJZCA9IGV2ZW50LnJlY3VycmVuY2VJZFxuXHRcdD8gZm9ybWF0RGF0ZShkYXlqcyhldmVudC5yZWN1cnJlbmNlSWQpLCBldmVudC5hbGxEYXkpXG5cdFx0OiBudWxsXG5cblx0Y29uc3QgbGluZXMgPSBbXG5cdFx0J0JFR0lOOlZFVkVOVCcsXG5cdFx0YFVJRDoke2dldFVJRChldmVudCl9YCxcblx0XHRgRFRTVEFSVCR7ZGF0ZVBhcmFtfToke2Zvcm1hdERhdGUoZXZlbnQuc3RhcnQsIGV2ZW50LmFsbERheSl9YCxcblx0XHRgRFRFTkQke2RhdGVQYXJhbX06JHtmb3JtYXREYXRlKGV2ZW50LmVuZCwgZXZlbnQuYWxsRGF5KX1gLFxuXHRcdGBTVU1NQVJZOiR7ZXNjYXBlVGV4dChldmVudC50aXRsZSl9YCxcblx0XHRldmVudC5kZXNjcmlwdGlvbiAmJiBgREVTQ1JJUFRJT046JHtlc2NhcGVUZXh0KGV2ZW50LmRlc2NyaXB0aW9uKX1gLFxuXHRcdGV2ZW50LmxvY2F0aW9uICYmIGBMT0NBVElPTjoke2VzY2FwZVRleHQoZXZlbnQubG9jYXRpb24pfWAsXG5cdFx0cnJ1bGUsXG5cdFx0ZXhkYXRlcyAmJiBgRVhEQVRFOiR7ZXhkYXRlc31gLFxuXHRcdHJlY3VycmVuY2VJZCAmJiBgUkVDVVJSRU5DRS1JRDoke3JlY3VycmVuY2VJZH1gLFxuXHRcdGBEVFNUQU1QOiR7dGltZXN0YW1wfWAsXG5cdFx0YENSRUFURUQ6JHt0aW1lc3RhbXB9YCxcblx0XHRgTEFTVC1NT0RJRklFRDoke3RpbWVzdGFtcH1gLFxuXHRcdCdTVEFUVVM6Q09ORklSTUVEJyxcblx0XHQnU0VRVUVOQ0U6MCcsXG5cdFx0J1RSQU5TUDpPUEFRVUUnLFxuXHRcdCdFTkQ6VkVWRU5UJyxcblx0XVxuXG5cdHJldHVybiBsaW5lcy5maWx0ZXIoQm9vbGVhbikuam9pbihDUkxGKVxufVxuXG5jb25zdCBmaWx0ZXJFdmVudHMgPSAoZXZlbnRzOiBDYWxlbmRhckV2ZW50W10pOiBDYWxlbmRhckV2ZW50W10gPT4ge1xuXHRjb25zdCBzZWVuVUlEcyA9IG5ldyBTZXQ8c3RyaW5nPigpXG5cblx0cmV0dXJuIGV2ZW50cy5maWx0ZXIoKGV2ZW50KSA9PiB7XG5cdFx0Y29uc3QgdWlkID0gZ2V0VUlEKGV2ZW50KVxuXHRcdGNvbnN0IGlzQmFzZVJlY3VycmluZyA9IGV2ZW50LnJydWxlICYmICFldmVudC5yZWN1cnJlbmNlSWRcblx0XHRjb25zdCBpc01vZGlmaWVkSW5zdGFuY2UgPSBldmVudC5yZWN1cnJlbmNlSWQgJiYgIWV2ZW50LnJydWxlXG5cblx0XHRpZiAoaXNCYXNlUmVjdXJyaW5nKSB7XG5cdFx0XHRzZWVuVUlEcy5hZGQodWlkKVxuXHRcdFx0cmV0dXJuIHRydWVcblx0XHR9XG5cdFx0aWYgKGlzTW9kaWZpZWRJbnN0YW5jZSkge1xuXHRcdFx0cmV0dXJuIHRydWVcblx0XHR9XG5cdFx0cmV0dXJuICFldmVudC5ycnVsZSAmJiAhZXZlbnQucmVjdXJyZW5jZUlkICYmICFzZWVuVUlEcy5oYXModWlkKVxuXHR9KVxufVxuXG5leHBvcnQgY29uc3QgZXhwb3J0VG9JQ2FsZW5kYXIgPSAoXG5cdGV2ZW50czogQ2FsZW5kYXJFdmVudFtdLFxuXHRjYWxlbmRhck5hbWUgPSAnaWxhbXkgQ2FsZW5kYXInXG4pOiBzdHJpbmcgPT4ge1xuXHRjb25zdCBuYW1lID0gZXNjYXBlVGV4dChjYWxlbmRhck5hbWUpXG5cdGNvbnN0IHZldmVudFN0cmluZ3MgPSBmaWx0ZXJFdmVudHMoZXZlbnRzKS5tYXAoY29udmVydEV2ZW50VG9WRXZlbnQpXG5cblx0cmV0dXJuIFtcblx0XHQnQkVHSU46VkNBTEVOREFSJyxcblx0XHQnVkVSU0lPTjoyLjAnLFxuXHRcdCdQUk9ESUQ6LS8vaWxhbXkvL2lsYW15IENhbGVuZGFyLy9FTicsXG5cdFx0J0NBTFNDQUxFOkdSRUdPUklBTicsXG5cdFx0J01FVEhPRDpQVUJMSVNIJyxcblx0XHRgWC1XUi1DQUxOQU1FOiR7bmFtZX1gLFxuXHRcdGBYLVdSLUNBTERFU0M6RXhwb3J0ZWQgZnJvbSAke25hbWV9YCxcblx0XHRVVENfVlRJTUVaT05FLFxuXHRcdC4uLnZldmVudFN0cmluZ3MsXG5cdFx0J0VORDpWQ0FMRU5EQVInLFxuXHRdLmpvaW4oQ1JMRilcbn1cblxuZXhwb3J0IGNvbnN0IGRvd25sb2FkSUNhbGVuZGFyID0gKFxuXHRldmVudHM6IENhbGVuZGFyRXZlbnRbXSxcblx0ZmlsZW5hbWUgPSAnY2FsZW5kYXIuaWNzJyxcblx0Y2FsZW5kYXJOYW1lID0gJ2lsYW15IENhbGVuZGFyJ1xuKTogdm9pZCA9PiB7XG5cdGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbZXhwb3J0VG9JQ2FsZW5kYXIoZXZlbnRzLCBjYWxlbmRhck5hbWUpXSwge1xuXHRcdHR5cGU6ICd0ZXh0L2NhbGVuZGFyO2NoYXJzZXQ9dXRmLTgnLFxuXHR9KVxuXHRjb25zdCB1cmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpXG5cdGNvbnN0IG5vcm1hbGl6ZWRGaWxlbmFtZSA9IGZpbGVuYW1lLmVuZHNXaXRoKCcuaWNzJylcblx0XHQ/IGZpbGVuYW1lXG5cdFx0OiBgJHtmaWxlbmFtZX0uaWNzYFxuXG5cdGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJylcblx0bGluay5ocmVmID0gdXJsXG5cdGxpbmsuZG93bmxvYWQgPSBub3JtYWxpemVkRmlsZW5hbWVcblxuXHRkb2N1bWVudC5ib2R5LmFwcGVuZChsaW5rKVxuXHRsaW5rLmNsaWNrKClcblx0bGluay5yZW1vdmUoKVxuXHRVUkwucmV2b2tlT2JqZWN0VVJMKHVybClcbn1cbiIsCiAgICAiaW1wb3J0IHsgQ2hldnJvbkRvd24gfSBmcm9tICdsdWNpZGUtcmVhY3QnXG5pbXBvcnQgeyB1c2VNZW1vLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQW5pbWF0ZWRTZWN0aW9uIH0gZnJvbSAnQC9jb21wb25lbnRzL2FuaW1hdGlvbnMvYW5pbWF0ZWQtc2VjdGlvbidcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9idXR0b24nXG5pbXBvcnQge1xuXHRQb3BvdmVyLFxuXHRQb3BvdmVyQ29udGVudCxcblx0UG9wb3ZlclRyaWdnZXIsXG59IGZyb20gJ0AvY29tcG9uZW50cy91aS9wb3BvdmVyJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IGdldFdlZWtEYXlzIH0gZnJvbSAnQC9saWIvdXRpbHMvZGF0ZS11dGlscydcblxuY29uc3QgTU9OVEhfS0VZUyA9IFtcblx0J2phbnVhcnknLFxuXHQnZmVicnVhcnknLFxuXHQnbWFyY2gnLFxuXHQnYXByaWwnLFxuXHQnbWF5Jyxcblx0J2p1bmUnLFxuXHQnanVseScsXG5cdCdhdWd1c3QnLFxuXHQnc2VwdGVtYmVyJyxcblx0J29jdG9iZXInLFxuXHQnbm92ZW1iZXInLFxuXHQnZGVjZW1iZXInLFxuXSBhcyBjb25zdFxuXG5jb25zdCBUaXRsZUNvbnRlbnQgPSAoKSA9PiB7XG5cdGNvbnN0IHsgY3VycmVudERhdGUsIHZpZXcsIHNldEN1cnJlbnREYXRlLCB0LCBmaXJzdERheU9mV2VlayB9ID1cblx0XHR1c2VTbWFydENhbGVuZGFyQ29udGV4dCgoY3R4KSA9PiAoe1xuXHRcdFx0Y3VycmVudERhdGU6IGN0eC5jdXJyZW50RGF0ZSxcblx0XHRcdHZpZXc6IGN0eC52aWV3LFxuXHRcdFx0c2V0Q3VycmVudERhdGU6IGN0eC5zZXRDdXJyZW50RGF0ZSxcblx0XHRcdHQ6IGN0eC50LFxuXHRcdFx0Zmlyc3REYXlPZldlZWs6IGN0eC5maXJzdERheU9mV2Vlayxcblx0XHR9KSlcblxuXHRjb25zdCBbb3BlblBvcG92ZXIsIHNldE9wZW5Qb3BvdmVyXSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpXG5cblx0Y29uc3QgbW9udGhzID0gdXNlTWVtbygoKSA9PiBNT05USF9LRVlTLm1hcCgoa2V5KSA9PiB0KGtleSkpLCBbdF0pXG5cdGNvbnN0IGN1cnJlbnRZZWFyID0gY3VycmVudERhdGUueWVhcigpXG5cdGNvbnN0IHllYXJzID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogMTEgfSwgKF8sIGkpID0+IGN1cnJlbnRZZWFyIC0gNSArIGkpXG5cdGNvbnN0IHdlZWtEYXlzID0gZ2V0V2Vla0RheXMoY3VycmVudERhdGUsIGZpcnN0RGF5T2ZXZWVrKVxuXG5cdGNvbnN0IHNlbGVjdERhdGUgPSAoZGF0ZTogZGF5anMuRGF5anMpID0+IHtcblx0XHRzZXRDdXJyZW50RGF0ZShkYXRlKVxuXHRcdHNldE9wZW5Qb3BvdmVyKG51bGwpXG5cdH1cblxuXHRjb25zdCByZW5kZXJNb250aENvbnRlbnQgPSAoKSA9PiAoXG5cdFx0PD5cblx0XHRcdHttb250aHMubWFwKChtb250aCwgaW5kZXgpID0+IChcblx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHQnanVzdGlmeS1zdGFydCBmb250LW5vcm1hbCcsXG5cdFx0XHRcdFx0XHRjdXJyZW50RGF0ZS5tb250aCgpID09PSBpbmRleCAmJiAnYmctcHJpbWFyeS8xMCdcblx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdGtleT17bW9udGh9XG5cdFx0XHRcdFx0b25DbGljaz17KCkgPT4gc2VsZWN0RGF0ZShjdXJyZW50RGF0ZS5tb250aChpbmRleCkpfVxuXHRcdFx0XHRcdHZhcmlhbnQ9XCJnaG9zdFwiXG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7bW9udGh9XG5cdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0KSl9XG5cdFx0PC8+XG5cdClcblxuXHRjb25zdCByZW5kZXJZZWFyQ29udGVudCA9ICgpID0+IChcblx0XHQ8PlxuXHRcdFx0e3llYXJzLm1hcCgoeWVhcikgPT4gKFxuXHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdCdqdXN0aWZ5LXN0YXJ0IGZvbnQtbm9ybWFsJyxcblx0XHRcdFx0XHRcdGN1cnJlbnREYXRlLnllYXIoKSA9PT0geWVhciAmJiAnYmctcHJpbWFyeS8xMCdcblx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdGtleT17eWVhcn1cblx0XHRcdFx0XHRvbkNsaWNrPXsoKSA9PiBzZWxlY3REYXRlKGN1cnJlbnREYXRlLnllYXIoeWVhcikpfVxuXHRcdFx0XHRcdHZhcmlhbnQ9XCJnaG9zdFwiXG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7eWVhcn1cblx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHQpKX1cblx0XHQ8Lz5cblx0KVxuXG5cdGNvbnN0IHJlbmRlcldlZWtDb250ZW50ID0gKCkgPT4gKFxuXHRcdDw+XG5cdFx0XHR7QXJyYXkuZnJvbSh7IGxlbmd0aDogNyB9LCAoXywgaSkgPT4ge1xuXHRcdFx0XHRjb25zdCB3ZWVrRGF0ZSA9IGN1cnJlbnREYXRlLnN1YnRyYWN0KDMsICd3ZWVrJykuYWRkKGksICd3ZWVrJylcblx0XHRcdFx0Y29uc3QgZGF5cyA9IGdldFdlZWtEYXlzKHdlZWtEYXRlLCBmaXJzdERheU9mV2Vlaylcblx0XHRcdFx0Y29uc3Qgc3RhcnQgPSBkYXlzWzBdXG5cdFx0XHRcdGNvbnN0IGVuZCA9IGRheXNbNl1cblx0XHRcdFx0Y29uc3QgaXNDdXJyZW50V2VlayA9IHdlZWtEYXRlLmlzU2FtZShjdXJyZW50RGF0ZSwgJ3dlZWsnKVxuXHRcdFx0XHRjb25zdCBjcm9zc2VzTW9udGggPSBzdGFydC5tb250aCgpICE9PSBlbmQubW9udGgoKVxuXG5cdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdFx0J2p1c3RpZnktc3RhcnQgZm9udC1ub3JtYWwnLFxuXHRcdFx0XHRcdFx0XHRpc0N1cnJlbnRXZWVrICYmICdiZy1wcmltYXJ5LzEwJ1xuXHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdGtleT17c3RhcnQuZm9ybWF0KCdZWVlZLU1NLUREJyl9XG5cdFx0XHRcdFx0XHRvbkNsaWNrPXsoKSA9PiBzZWxlY3REYXRlKHN0YXJ0KX1cblx0XHRcdFx0XHRcdHZhcmlhbnQ9XCJnaG9zdFwiXG5cdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IHctZnVsbCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuXCI+XG5cdFx0XHRcdFx0XHRcdDxzcGFuPntgJHtzdGFydC5mb3JtYXQoJ01NTSBEJyl9IC0gJHtlbmQuZm9ybWF0KCdEJyl9YH08L3NwYW4+XG5cdFx0XHRcdFx0XHRcdHtjcm9zc2VzTW9udGggJiYgKFxuXHRcdFx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cIm1sLTAuNSB0ZXh0LXhzIG9wYWNpdHktNzBcIj57YCR7c3RhcnQuZm9ybWF0KCdNTU0nKX0tJHtlbmQuZm9ybWF0KCdNTU0nKX1gfTwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0XHQpXG5cdFx0XHR9KX1cblx0XHQ8Lz5cblx0KVxuXG5cdGNvbnN0IHJlbmRlckRheUNvbnRlbnQgPSAoKSA9PiB7XG5cdFx0Y29uc3QgZmlyc3REYXkgPSBjdXJyZW50RGF0ZS5zdGFydE9mKCdtb250aCcpXG5cdFx0Y29uc3QgZGF5c0luTW9udGggPSBjdXJyZW50RGF0ZS5kYXlzSW5Nb250aCgpXG5cblx0XHRyZXR1cm4gKFxuXHRcdFx0PD5cblx0XHRcdFx0e0FycmF5LmZyb20oeyBsZW5ndGg6IGRheXNJbk1vbnRoIH0sIChfLCBpKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgZGF5ID0gZmlyc3REYXkuZGF0ZShpICsgMSlcblx0XHRcdFx0XHRjb25zdCBpc0N1cnJlbnREYXkgPSBkYXkuaXNTYW1lKGN1cnJlbnREYXRlLCAnZGF5Jylcblx0XHRcdFx0XHRjb25zdCBpc1RvZGF5ID0gZGF5LmlzU2FtZShkYXlqcygpLCAnZGF5JylcblxuXHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHRcdFx0J2p1c3RpZnktc3RhcnQgZm9udC1ub3JtYWwnLFxuXHRcdFx0XHRcdFx0XHRcdGlzQ3VycmVudERheSAmJiAnYmctcHJpbWFyeS8xMCdcblx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0a2V5PXtkYXkuZm9ybWF0KCdZWVlZLU1NLUREJyl9XG5cdFx0XHRcdFx0XHRcdG9uQ2xpY2s9eygpID0+IHNlbGVjdERhdGUoZGF5KX1cblx0XHRcdFx0XHRcdFx0dmFyaWFudD1cImdob3N0XCJcblx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IHctZnVsbCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuXCI+XG5cdFx0XHRcdFx0XHRcdFx0PHNwYW4+e2RheS5mb3JtYXQoJ2RkZGQsIE1NTSBEJyl9PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHRcdHtpc1RvZGF5ICYmIChcblx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cImJnLXByaW1hcnkgdGV4dC1wcmltYXJ5LWZvcmVncm91bmQgcm91bmRlZC1zbSBweC0xISB0ZXh0LXhzXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHt0KCd0b2RheScpfVxuXHRcdFx0XHRcdFx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHRcdFx0KVxuXHRcdFx0XHR9KX1cblx0XHRcdDwvPlxuXHRcdClcblx0fVxuXG5cdGNvbnN0IHBvcG92ZXJzID0gW1xuXHRcdHtcblx0XHRcdGlkOiAnbW9udGgnLFxuXHRcdFx0aGlkZGVuOiB2aWV3ID09PSAneWVhcicsXG5cdFx0XHR0aXRsZTogY3VycmVudERhdGUuZm9ybWF0KCdNTU1NJyksXG5cdFx0XHRyZW5kZXI6IHJlbmRlck1vbnRoQ29udGVudCxcblx0XHR9LFxuXHRcdHtcblx0XHRcdGlkOiAneWVhcicsXG5cdFx0XHRoaWRkZW46IGZhbHNlLFxuXHRcdFx0dGl0bGU6IGN1cnJlbnREYXRlLmZvcm1hdCgnWVlZWScpLFxuXHRcdFx0cmVuZGVyOiByZW5kZXJZZWFyQ29udGVudCxcblx0XHR9LFxuXHRcdHtcblx0XHRcdGlkOiAnd2VlaycsXG5cdFx0XHRoaWRkZW46IHZpZXcgIT09ICd3ZWVrJyxcblx0XHRcdHRpdGxlOiBgJHt3ZWVrRGF5c1swXS5mb3JtYXQoJ01NTSBEJyl9IC0gJHt3ZWVrRGF5c1s2XS5mb3JtYXQoJ01NTSBEJyl9YCxcblx0XHRcdHJlbmRlcjogcmVuZGVyV2Vla0NvbnRlbnQsXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRpZDogJ2RheScsXG5cdFx0XHRoaWRkZW46IHZpZXcgIT09ICdkYXknLFxuXHRcdFx0dGl0bGU6IGN1cnJlbnREYXRlLmZvcm1hdCgnZGRkZCwgRCcpLFxuXHRcdFx0cmVuZGVyOiByZW5kZXJEYXlDb250ZW50LFxuXHRcdH0sXG5cdF1cblxuXHRyZXR1cm4gcG9wb3ZlcnNcblx0XHQuZmlsdGVyKChwKSA9PiAhcC5oaWRkZW4pXG5cdFx0Lm1hcCgocG9wb3ZlcikgPT4gKFxuXHRcdFx0PFBvcG92ZXJcblx0XHRcdFx0a2V5PXtwb3BvdmVyLmlkfVxuXHRcdFx0XHRvbk9wZW5DaGFuZ2U9eyhvcGVuKSA9PiBzZXRPcGVuUG9wb3ZlcihvcGVuID8gcG9wb3Zlci5pZCA6IG51bGwpfVxuXHRcdFx0XHRvcGVuPXtvcGVuUG9wb3ZlciA9PT0gcG9wb3Zlci5pZH1cblx0XHRcdD5cblx0XHRcdFx0PFBvcG92ZXJUcmlnZ2VyIGFzQ2hpbGQ+XG5cdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEgcHgtMSEgZm9udC1zZW1pYm9sZFwiXG5cdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD1cImNhbGVuZGFyLW1vbnRoLWJ1dHRvblwiXG5cdFx0XHRcdFx0XHR2YXJpYW50PVwiZ2hvc3RcIlxuXHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdDxBbmltYXRlZFNlY3Rpb25cblx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEgcHgtMSEgZm9udC1zZW1pYm9sZFwiXG5cdFx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPVwiY2FsZW5kYXItbW9udGgtYnV0dG9uXCJcblx0XHRcdFx0XHRcdFx0dHJhbnNpdGlvbktleT17YCR7cG9wb3Zlci5pZH0tJHtjdXJyZW50RGF0ZS5mb3JtYXQoJ1lZWVktTU0tREQnKX1gfVxuXHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHR7cG9wb3Zlci50aXRsZX1cblx0XHRcdFx0XHRcdDwvQW5pbWF0ZWRTZWN0aW9uPlxuXHRcdFx0XHRcdFx0PENoZXZyb25Eb3duIGNsYXNzTmFtZT1cImgtNCB3LTRcIiAvPlxuXHRcdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0XHQ8L1BvcG92ZXJUcmlnZ2VyPlxuXHRcdFx0XHQ8UG9wb3ZlckNvbnRlbnQgY2xhc3NOYW1lPVwidy00MCBwLTBcIj5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggbWF4LWgtNjAgZmxleC1jb2wgb3ZlcmZsb3ctYXV0b1wiPlxuXHRcdFx0XHRcdFx0e3BvcG92ZXIucmVuZGVyKCl9XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDwvUG9wb3ZlckNvbnRlbnQ+XG5cdFx0XHQ8L1BvcG92ZXI+XG5cdFx0KSlcbn1cblxuZXhwb3J0IGRlZmF1bHQgVGl0bGVDb250ZW50XG4iLAogICAgImltcG9ydCB7IENoZXZyb25MZWZ0LCBDaGV2cm9uUmlnaHQgfSBmcm9tICdsdWNpZGUtcmVhY3QnXG5pbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9idXR0b24nXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG50eXBlIFZpZXdUeXBlID0gJ2RheScgfCAnd2VlaycgfCAnbW9udGgnIHwgJ3llYXInXG5jb25zdCBBVkFJTEFCTEVfVklFV1M6IFZpZXdUeXBlW10gPSBbJ2RheScsICd3ZWVrJywgJ21vbnRoJywgJ3llYXInXVxuXG5pbnRlcmZhY2UgVmlld0NvbnRyb2xzUHJvcHMge1xuXHRjdXJyZW50VmlldzogVmlld1R5cGVcblx0b25DaGFuZ2U6ICh2aWV3OiBWaWV3VHlwZSkgPT4gdm9pZFxuXHRvblRvZGF5PzogKCkgPT4gdm9pZFxuXHRvbk5leHQ/OiAoKSA9PiB2b2lkXG5cdG9uUHJldmlvdXM/OiAoKSA9PiB2b2lkXG5cdHZhcmlhbnQ/OiAnZGVmYXVsdCcgfCAnZ3JpZCdcblx0c2l6ZT86ICdzbScgfCAnZGVmYXVsdCdcblx0Y2xhc3NOYW1lPzogc3RyaW5nXG59XG5cbmNvbnN0IFZpZXdDb250cm9sczogUmVhY3QuRkM8Vmlld0NvbnRyb2xzUHJvcHM+ID0gKHtcblx0Y3VycmVudFZpZXcsXG5cdG9uQ2hhbmdlLFxuXHR2YXJpYW50ID0gJ2RlZmF1bHQnLFxuXHRzaXplID0gJ3NtJyxcblx0Y2xhc3NOYW1lLFxuXHRvblRvZGF5LFxuXHRvbk5leHQsXG5cdG9uUHJldmlvdXMsXG59KSA9PiB7XG5cdGNvbnN0IHsgdCwgcmVzb3VyY2VzIH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgoY29udGV4dCkgPT4gKHtcblx0XHR0OiBjb250ZXh0LnQsXG5cdFx0cmVzb3VyY2VzOiBjb250ZXh0LnJlc291cmNlcyxcblx0fSkpXG5cdGNvbnN0IGlzR3JpZCA9IHZhcmlhbnQgPT09ICdncmlkJ1xuXHRjb25zdCBpc1Jlc291cmNlQ2FsZW5kYXIgPSByZXNvdXJjZXMgJiYgcmVzb3VyY2VzLmxlbmd0aCA+IDBcblxuXHQvLyBFeHRyYWN0IGNvbW1vbiBidXR0b24gY2xhc3NOYW1lIGxvZ2ljIHRvIGEgZnVuY3Rpb25cblx0Y29uc3QgZ2V0QnV0dG9uQ2xhc3NOYW1lID0gKHZpZXdUeXBlOiBWaWV3VHlwZSkgPT4ge1xuXHRcdHJldHVybiBjbihcblx0XHRcdC8vIEJhc2Ugd2lkdGggZm9yIGdyaWQgbGF5b3V0XG5cdFx0XHRpc0dyaWQgPyAndy1mdWxsJyA6ICcnLFxuXHRcdFx0Ly8gQWN0aXZlIHZpZXcgc3R5bGluZ1xuXHRcdFx0Y3VycmVudFZpZXcgPT09IHZpZXdUeXBlICYmICdiZy1wcmltYXJ5LzgwJ1xuXHRcdClcblx0fVxuXG5cdGNvbnN0IGdldEJ0blZhcmlhbnQgPSAodmlld1R5cGU6IFZpZXdUeXBlKSA9PiB7XG5cdFx0cmV0dXJuIGN1cnJlbnRWaWV3ID09PSB2aWV3VHlwZSA/ICdkZWZhdWx0JyA6ICdvdXRsaW5lJ1xuXHR9XG5cblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRpc0dyaWQgPyAnZ3JpZCBncmlkLWNvbHMtMiBnYXAtMicgOiAnZmxleCBnYXAtMScsXG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHQ+XG5cdFx0XHQ8QnV0dG9uIG9uQ2xpY2s9e29uUHJldmlvdXN9IHNpemU9e3NpemV9IHZhcmlhbnQ9XCJvdXRsaW5lXCI+XG5cdFx0XHRcdDxDaGV2cm9uTGVmdCBjbGFzc05hbWU9XCJoLTQgdy00XCIgLz5cblx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0PEJ1dHRvbiBvbkNsaWNrPXtvbk5leHR9IHNpemU9e3NpemV9IHZhcmlhbnQ9XCJvdXRsaW5lXCI+XG5cdFx0XHRcdDxDaGV2cm9uUmlnaHQgY2xhc3NOYW1lPVwiaC00IHctNFwiIC8+XG5cdFx0XHQ8L0J1dHRvbj5cblxuXHRcdFx0e0FWQUlMQUJMRV9WSUVXUy5tYXAoKHR5cGU6IFZpZXdUeXBlKSA9PiB7XG5cdFx0XHRcdGlmIChpc1Jlc291cmNlQ2FsZW5kYXIgJiYgdHlwZSA9PT0gJ3llYXInKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG51bGxcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtnZXRCdXR0b25DbGFzc05hbWUodHlwZSl9XG5cdFx0XHRcdFx0XHRrZXk9e3R5cGV9XG5cdFx0XHRcdFx0XHRvbkNsaWNrPXsoKSA9PiBvbkNoYW5nZSh0eXBlKX1cblx0XHRcdFx0XHRcdHNpemU9e3NpemV9XG5cdFx0XHRcdFx0XHR2YXJpYW50PXtnZXRCdG5WYXJpYW50KHR5cGUpfVxuXHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdHt0KHR5cGUpfVxuXHRcdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0XHQpXG5cdFx0XHR9KX1cblxuXHRcdFx0PEJ1dHRvbiBvbkNsaWNrPXtvblRvZGF5fSBzaXplPXtzaXplfSB2YXJpYW50PVwib3V0bGluZVwiPlxuXHRcdFx0XHR7dCgndG9kYXknKX1cblx0XHRcdDwvQnV0dG9uPlxuXHRcdDwvZGl2PlxuXHQpXG59XG5cbmV4cG9ydCBkZWZhdWx0IFZpZXdDb250cm9sc1xuIiwKICAgICJpbXBvcnQgdHlwZSBkYXlqcyBmcm9tICdkYXlqcydcbmltcG9ydCB7IG1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEhvcml6b250YWxHcmlkUm93IH0gZnJvbSAnQC9jb21wb25lbnRzL2hvcml6b250YWwtZ3JpZC9ob3Jpem9udGFsLWdyaWQtcm93J1xuaW1wb3J0IHR5cGUgeyBSZXNvdXJjZSB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvdHlwZXMnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgQWxsRGF5Q2VsbCB9IGZyb20gJy4vYWxsLWRheS1jZWxsJ1xuXG5pbnRlcmZhY2UgQWxsRGF5Um93UHJvcHMge1xuXHRkYXlzOiBkYXlqcy5EYXlqc1tdXG5cdGNsYXNzZXM/OiB7IHJvdz86IHN0cmluZzsgY2VsbD86IHN0cmluZzsgc3BhY2VyPzogc3RyaW5nIH1cblx0cmVzb3VyY2U/OiBSZXNvdXJjZVxuXHRzaG93U3BhY2VyPzogYm9vbGVhblxufVxuXG5jb25zdCBOb01lbW9BbGxEYXlSb3c6IFJlYWN0LkZDPEFsbERheVJvd1Byb3BzPiA9ICh7XG5cdGRheXMsXG5cdGNsYXNzZXMsXG5cdHJlc291cmNlLFxuXHRzaG93U3BhY2VyID0gdHJ1ZSxcbn0pID0+IHtcblx0Y29uc3QgY29sdW1ucyA9IGRheXMubWFwKChkYXksIGluZGV4KSA9PiAoe1xuXHRcdGlkOiBgYWxsZGF5LWNvbC0ke2RheS50b0lTT1N0cmluZygpfS0ke2luZGV4fWAsXG5cdFx0ZGF5LFxuXHRcdGdyaWRUeXBlOiAnZGF5JyBhcyBjb25zdCxcblx0XHRjbGFzc05hbWU6IGNuKCdoLWZ1bGwgbWluLWgtMTIgYm9yZGVyLXIgbGFzdDpib3JkZXItci0wJywgY2xhc3Nlcz8uY2VsbCksXG5cdH0pKVxuXG5cdHJldHVybiAoXG5cdFx0PGRpdiBjbGFzc05hbWU9e2NuKCdmbGV4IHctZnVsbCcsIGNsYXNzZXM/LnJvdyl9IGRhdGEtdGVzdGlkPVwiYWxsLWRheS1yb3dcIj5cblx0XHRcdHsvKiBUaW1lIGNvbCBzcGFjZXIgKi99XG5cdFx0XHR7c2hvd1NwYWNlciAmJiA8QWxsRGF5Q2VsbCBjbGFzc05hbWU9e2NsYXNzZXM/LnNwYWNlcn0gLz59XG5cblx0XHRcdHsvKiBEYXkgYWxsIGRheSBjZWxsICovfVxuXHRcdFx0PEhvcml6b250YWxHcmlkUm93XG5cdFx0XHRcdGFsbERheVxuXHRcdFx0XHRjbGFzc05hbWU9XCJmbGV4LTEgbWluLWgtZml0XCJcblx0XHRcdFx0Y29sdW1ucz17Y29sdW1uc31cblx0XHRcdFx0ZGF5TnVtYmVySGVpZ2h0PXswfVxuXHRcdFx0XHRncmlkVHlwZT1cImRheVwiXG5cdFx0XHRcdGlkPXtgYWxsLWRheS1yb3ctJHtyZXNvdXJjZT8uaWQgPz8gJ21haW4nfWB9XG5cdFx0XHRcdGlzTGFzdFJvd1xuXHRcdFx0XHRyZXNvdXJjZT17cmVzb3VyY2V9XG5cdFx0XHRcdHZhcmlhbnQ9XCJyZWd1bGFyXCJcblx0XHRcdC8+XG5cdFx0PC9kaXY+XG5cdClcbn1cblxuZXhwb3J0IGNvbnN0IEFsbERheVJvdyA9IG1lbW8oTm9NZW1vQWxsRGF5Um93KVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IG1lbW8sIHVzZUNhbGxiYWNrIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IFJlc291cmNlIH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci90eXBlcydcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB0eXBlIGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IEdyaWRDZWxsIH0gZnJvbSAnLi4vZ3JpZC1jZWxsJ1xuaW1wb3J0IHsgUmVzb3VyY2VDZWxsIH0gZnJvbSAnLi4vcmVzb3VyY2UtY2VsbCdcbmltcG9ydCB7IEhvcml6b250YWxHcmlkRXZlbnRzTGF5ZXIgfSBmcm9tICcuL2hvcml6b250YWwtZ3JpZC1ldmVudHMtbGF5ZXInXG5cbmludGVyZmFjZSBIb3Jpem9udGFsR3JpZENvbHVtbiB7XG5cdGlkOiBzdHJpbmdcblx0ZGF5PzogZGF5anMuRGF5anNcblx0ZGF5cz86IGRheWpzLkRheWpzW11cblx0Z3JpZFR5cGU6ICdkYXknIHwgJ2hvdXInXG5cdGNsYXNzTmFtZT86IHN0cmluZ1xuXHRyZW5kZXJDZWxsPzogKHJvdzogSG9yaXpvbnRhbEdyaWRSb3dQcm9wcykgPT4gUmVhY3QuUmVhY3ROb2RlXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSG9yaXpvbnRhbEdyaWRSb3dQcm9wcyB7XG5cdGlkOiBzdHJpbmcgfCBudW1iZXJcblx0cmVzb3VyY2U/OiBSZXNvdXJjZVxuXHRncmlkVHlwZT86ICdkYXknIHwgJ2hvdXInXG5cdHZhcmlhbnQ/OiAncmVndWxhcicgfCAncmVzb3VyY2UnXG5cdGRheU51bWJlckhlaWdodD86IG51bWJlclxuXHRjbGFzc05hbWU/OiBzdHJpbmdcblx0Y29sdW1ucz86IEhvcml6b250YWxHcmlkQ29sdW1uW11cblx0YWxsRGF5PzogYm9vbGVhblxuXHRzaG93RGF5TnVtYmVyPzogYm9vbGVhblxuXHRpc0xhc3RSb3c/OiBib29sZWFuXG59XG5cbmNvbnN0IE5vTWVtb0hvcml6b250YWxHcmlkUm93OiBSZWFjdC5GQzxIb3Jpem9udGFsR3JpZFJvd1Byb3BzPiA9ICh7XG5cdGlkLFxuXHRyZXNvdXJjZSxcblx0Z3JpZFR5cGUgPSAnZGF5Jyxcblx0dmFyaWFudCA9ICdyZXNvdXJjZScsXG5cdGRheU51bWJlckhlaWdodCxcblx0Y2xhc3NOYW1lLFxuXHRjb2x1bW5zID0gW10sXG5cdGFsbERheSxcblx0c2hvd0RheU51bWJlciA9IGZhbHNlLFxuXHRpc0xhc3RSb3cgPSBmYWxzZSxcbn0pID0+IHtcblx0Y29uc3QgeyByZW5kZXJSZXNvdXJjZSB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKHN0YXRlKSA9PiAoe1xuXHRcdHJlbmRlclJlc291cmNlOiBzdGF0ZS5yZW5kZXJSZXNvdXJjZSxcblx0fSkpXG5cblx0Y29uc3QgaXNSZXNvdXJjZUNhbGVuZGFyID0gdmFyaWFudCA9PT0gJ3Jlc291cmNlJ1xuXHRjb25zdCBpc0dyb3VwZWQgPSBjb2x1bW5zLnNvbWUoKGNvbCkgPT4gY29sLmRheXMpXG5cblx0Y29uc3QgcmVuZGVyRXZlbnRzTGF5ZXIgPSB1c2VDYWxsYmFjayhcblx0XHQoZGF5czogZGF5anMuRGF5anNbXSkgPT4ge1xuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJhYnNvbHV0ZSBpbnNldC0wIHotMTAgcG9pbnRlci1ldmVudHMtbm9uZVwiPlxuXHRcdFx0XHRcdDxIb3Jpem9udGFsR3JpZEV2ZW50c0xheWVyXG5cdFx0XHRcdFx0XHRhbGxEYXk9e2FsbERheX1cblx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPXtgaG9yaXpvbnRhbC1ldmVudHMtJHtpZH1gfVxuXHRcdFx0XHRcdFx0ZGF5TnVtYmVySGVpZ2h0PXtkYXlOdW1iZXJIZWlnaHR9XG5cdFx0XHRcdFx0XHRkYXlzPXtkYXlzfVxuXHRcdFx0XHRcdFx0Z3JpZFR5cGU9e2dyaWRUeXBlfVxuXHRcdFx0XHRcdFx0cmVzb3VyY2VJZD17cmVzb3VyY2U/LmlkfVxuXHRcdFx0XHRcdC8+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0KVxuXHRcdH0sXG5cdFx0W2FsbERheSwgZGF5TnVtYmVySGVpZ2h0LCBncmlkVHlwZSwgaWQsIHJlc291cmNlPy5pZF1cblx0KVxuXG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbignZmxleCBmbGV4LTEgcmVsYXRpdmUnLCBjbGFzc05hbWUpfVxuXHRcdFx0ZGF0YS10ZXN0aWQ9e2Bob3Jpem9udGFsLXJvdy0ke2lkfWB9XG5cdFx0PlxuXHRcdFx0e2lzUmVzb3VyY2VDYWxlbmRhciAmJiAoXG5cdFx0XHRcdDxSZXNvdXJjZUNlbGxcblx0XHRcdFx0XHRjbGFzc05hbWU9XCJ3LTIwIHNtOnctNDAgc3RpY2t5IGxlZnQtMCBiZy1iYWNrZ3JvdW5kIHotMjAgaC1mdWxsXCJcblx0XHRcdFx0XHRkYXRhLXRlc3RpZD17YGhvcml6b250YWwtcm93LWxhYmVsLSR7cmVzb3VyY2U/LmlkfWB9XG5cdFx0XHRcdFx0cmVzb3VyY2U9e3Jlc291cmNlfVxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0e3JlbmRlclJlc291cmNlID8gKFxuXHRcdFx0XHRcdFx0cmVuZGVyUmVzb3VyY2UocmVzb3VyY2UpXG5cdFx0XHRcdFx0KSA6IChcblx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwid3JhcC1icmVhay13b3JkIHRleHQtc21cIj57cmVzb3VyY2U/LnRpdGxlfTwvZGl2PlxuXHRcdFx0XHRcdCl9XG5cdFx0XHRcdDwvUmVzb3VyY2VDZWxsPlxuXHRcdFx0KX1cblx0XHRcdDxkaXYgY2xhc3NOYW1lPVwicmVsYXRpdmUgZmxleC0xIGZsZXhcIj5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IHctZnVsbFwiPlxuXHRcdFx0XHRcdHtjb2x1bW5zLm1hcCgoY29sLCBpbmRleCkgPT4ge1xuXHRcdFx0XHRcdFx0aWYgKGNvbC5kYXkpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0XHQ8R3JpZENlbGxcblx0XHRcdFx0XHRcdFx0XHRcdGFsbERheT17YWxsRGF5fVxuXHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdFx0XHRcdFx0J2ZsZXgtMSB3LTIwJyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0aXNMYXN0Um93ICYmICdib3JkZXItYi0wJyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29sLmNsYXNzTmFtZVxuXHRcdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0XHRcdGRheT17Y29sLmRheX1cblx0XHRcdFx0XHRcdFx0XHRcdGdyaWRUeXBlPXtncmlkVHlwZX1cblx0XHRcdFx0XHRcdFx0XHRcdGhvdXI9e2dyaWRUeXBlID09PSAnaG91cicgPyBjb2wuZGF5LmhvdXIoKSA6IHVuZGVmaW5lZH1cblx0XHRcdFx0XHRcdFx0XHRcdGtleT17Y29sLmRheS50b0lTT1N0cmluZygpfVxuXHRcdFx0XHRcdFx0XHRcdFx0cmVzb3VyY2VJZD17cmVzb3VyY2U/LmlkfVxuXHRcdFx0XHRcdFx0XHRcdFx0c2hvd0RheU51bWJlcj17c2hvd0RheU51bWJlcn1cblx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGNvbnN0IGlzTGFzdENvbCA9IGluZGV4ID09PSBjb2x1bW5zLmxlbmd0aCAtIDFcblxuXHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IHJlbGF0aXZlIHctZnVsbFwiIGtleT17Y29sLmlkfT5cblx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggdy1mdWxsXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHR7Y29sLmRheXM/Lm1hcCgoZGF5KSA9PiAoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxHcmlkQ2VsbFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFsbERheT17YWxsRGF5fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnZmxleC0xIHctMjAnLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aXNMYXN0Um93ICYmICdib3JkZXItYi0wJyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCFpc0xhc3RDb2wgJiYgJ2JvcmRlci1yIScsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb2wuY2xhc3NOYW1lXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkYXk9e2RheX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRncmlkVHlwZT17Z3JpZFR5cGV9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aG91cj17Z3JpZFR5cGUgPT09ICdob3VyJyA/IGRheS5ob3VyKCkgOiB1bmRlZmluZWR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0a2V5PXtkYXkudG9JU09TdHJpbmcoKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNvdXJjZUlkPXtyZXNvdXJjZT8uaWR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0c2hvd0RheU51bWJlcj17c2hvd0RheU51bWJlcn1cblx0XHRcdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0XHRcdCkpfVxuXHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdFx0XHRcdFx0e3JlbmRlckV2ZW50c0xheWVyKGNvbC5kYXlzKX1cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0fSl9XG5cdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdHsvKiBFdmVudHMgbGF5ZXIgcG9zaXRpb25lZCBhYnNvbHV0ZWx5IG92ZXIgdGhlIHJvdyAqL31cblx0XHRcdFx0eyFpc0dyb3VwZWQgJiZcblx0XHRcdFx0XHRyZW5kZXJFdmVudHNMYXllcihjb2x1bW5zLm1hcCgoY29sKSA9PiBjb2wuZGF5KS5maWx0ZXIoQm9vbGVhbikpfVxuXHRcdFx0PC9kaXY+XG5cdFx0PC9kaXY+XG5cdClcbn1cblxuZXhwb3J0IGNvbnN0IEhvcml6b250YWxHcmlkUm93ID0gbWVtbyhOb01lbW9Ib3Jpem9udGFsR3JpZFJvdylcbiIsCiAgICAiaW1wb3J0IFJlYWN0LCB7IG1lbW8sIHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IERheU51bWJlciB9IGZyb20gJ0AvY29tcG9uZW50cy9kYXktbnVtYmVyJ1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHsgaXNCdXNpbmVzc0hvdXIgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL3V0aWxzL2J1c2luZXNzLWhvdXJzJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBFVkVOVF9CQVJfSEVJR0hUIH0gZnJvbSAnQC9saWIvY29uc3RhbnRzJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB0eXBlIHsgU2VsZWN0ZWREYXlFdmVudHMgfSBmcm9tICcuL2FsbC1ldmVudHMtZGlhbG9nJ1xuaW1wb3J0IHsgQWxsRXZlbnREaWFsb2cgfSBmcm9tICcuL2FsbC1ldmVudHMtZGlhbG9nJ1xuaW1wb3J0IHsgRHJvcHBhYmxlQ2VsbCB9IGZyb20gJy4vZHJvcHBhYmxlLWNlbGwnXG5cbmludGVyZmFjZSBHcmlkUHJvcHMge1xuXHRkYXk6IGRheWpzLkRheWpzXG5cdGhvdXI/OiBudW1iZXIgLy8gT3B0aW9uYWwgaG91ciBmb3IgaG91ci1iYXNlZCBncmlkc1xuXHRtaW51dGU/OiBudW1iZXIgLy8gT3B0aW9uYWwgbWludXRlIGZvciBtb3JlIGdyYW51bGFyIHRpbWUgc2xvdHNcblx0ZGF5TWF4RXZlbnRzPzogbnVtYmVyXG5cdGNsYXNzTmFtZT86IHN0cmluZyAvLyBPcHRpb25hbCBjbGFzc05hbWUgZm9yIGN1c3RvbSBzdHlsaW5nXG5cdHJlc291cmNlSWQ/OiBzdHJpbmcgfCBudW1iZXIgLy8gT3B0aW9uYWwgcmVzb3VyY2UgSUQgZm9yIHJlc291cmNlLXNwZWNpZmljIGRheSBjZWxsc1xuXHRncmlkVHlwZT86ICdkYXknIHwgJ2hvdXInIC8vIEZ1dHVyZSB1c2UgZm9yIGRpZmZlcmVudCBncmlkIHR5cGVzXG5cdHNob3VsZFJlbmRlckV2ZW50cz86IGJvb2xlYW4gLy8gRmxhZyB0byBkZXRlcm1pbmUgaWYgZXZlbnRzIHNob3VsZCBiZSByZW5kZXJlZFxuXHRhbGxEYXk/OiBib29sZWFuIC8vIEZsYWcgdG8gaW5kaWNhdGUgaWYgdGhpcyBpcyBhbiBhbGwtZGF5IGNlbGxcblx0c2hvd0RheU51bWJlcj86IGJvb2xlYW4gLy8gRmxhZyB0byBzaG93IG9yIGhpZGUgdGhlIGRheSBudW1iZXJcblx0Y2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGVcblx0J2RhdGEtdGVzdGlkJz86IHN0cmluZ1xufVxuXG5jb25zdCBOb01lbW9HcmlkQ2VsbDogUmVhY3QuRkM8R3JpZFByb3BzPiA9ICh7XG5cdGRheSxcblx0aG91cixcblx0bWludXRlLFxuXHRjbGFzc05hbWUgPSAnJyxcblx0cmVzb3VyY2VJZCxcblx0Z3JpZFR5cGUgPSAnZGF5Jyxcblx0c2hvdWxkUmVuZGVyRXZlbnRzID0gdHJ1ZSxcblx0YWxsRGF5ID0gZmFsc2UsXG5cdCdkYXRhLXRlc3RpZCc6IGRhdGFUZXN0SWQsXG5cdHNob3dEYXlOdW1iZXIgPSBmYWxzZSxcblx0Y2hpbGRyZW4sXG59KSA9PiB7XG5cdGNvbnN0IGFsbEV2ZW50c0RpYWxvZ1JlZiA9IFJlYWN0LnVzZVJlZjx7XG5cdFx0b3BlbjogKCkgPT4gdm9pZFxuXHRcdGNsb3NlOiAoKSA9PiB2b2lkXG5cdFx0c2V0U2VsZWN0ZWREYXlFdmVudHM6IChkYXlFdmVudHM6IFNlbGVjdGVkRGF5RXZlbnRzKSA9PiB2b2lkXG5cdH0+KG51bGwpXG5cdGNvbnN0IHtcblx0XHRkYXlNYXhFdmVudHMgPSAwLFxuXHRcdGdldEV2ZW50c0ZvckRhdGVSYW5nZSxcblx0XHRjdXJyZW50RGF0ZSxcblx0XHR0LFxuXHRcdGdldEV2ZW50c0ZvclJlc291cmNlLFxuXHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0Y3VycmVudExvY2FsZSxcblx0XHRldmVudFNwYWNpbmcsXG5cdFx0Z2V0UmVzb3VyY2VCeUlkLFxuXHR9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKHN0YXRlKSA9PiAoe1xuXHRcdGRheU1heEV2ZW50czogc3RhdGUuZGF5TWF4RXZlbnRzLFxuXHRcdGdldEV2ZW50c0ZvckRhdGVSYW5nZTogc3RhdGUuZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlLFxuXHRcdGN1cnJlbnREYXRlOiBzdGF0ZS5jdXJyZW50RGF0ZSxcblx0XHRmaXJzdERheU9mV2Vlazogc3RhdGUuZmlyc3REYXlPZldlZWssXG5cdFx0dDogc3RhdGUudCxcblx0XHRnZXRFdmVudHNGb3JSZXNvdXJjZTogc3RhdGUuZ2V0RXZlbnRzRm9yUmVzb3VyY2UsXG5cdFx0YnVzaW5lc3NIb3Vyczogc3RhdGUuYnVzaW5lc3NIb3Vycyxcblx0XHRjdXJyZW50TG9jYWxlOiBzdGF0ZS5jdXJyZW50TG9jYWxlLFxuXHRcdGV2ZW50U3BhY2luZzogc3RhdGUuZXZlbnRTcGFjaW5nLFxuXHRcdGdldFJlc291cmNlQnlJZDogc3RhdGUuZ2V0UmVzb3VyY2VCeUlkLFxuXHR9KSlcblxuXHRjb25zdCB0b2RheUV2ZW50cyA9IHVzZU1lbW8oKCkgPT4ge1xuXHRcdGlmICghc2hvdWxkUmVuZGVyRXZlbnRzKSB7XG5cdFx0XHRyZXR1cm4gW11cblx0XHR9XG5cblx0XHRsZXQgdG9kYXlFdmVudHMgPSBnZXRFdmVudHNGb3JEYXRlUmFuZ2UoXG5cdFx0XHRkYXkuc3RhcnRPZihncmlkVHlwZSksXG5cdFx0XHRkYXkuZW5kT2YoZ3JpZFR5cGUpXG5cdFx0KVxuXG5cdFx0aWYgKGFsbERheSkge1xuXHRcdFx0dG9kYXlFdmVudHMgPSB0b2RheUV2ZW50cy5maWx0ZXIoKGUpID0+IGUuYWxsRGF5KVxuXHRcdH1cblxuXHRcdGlmIChyZXNvdXJjZUlkKSB7XG5cdFx0XHRjb25zdCByZXNvdXJjZUV2ZW50cyA9IGdldEV2ZW50c0ZvclJlc291cmNlKHJlc291cmNlSWQpID8/IFtdXG5cblx0XHRcdHJldHVybiB0b2RheUV2ZW50cy5maWx0ZXIoKGV2ZW50KSA9PlxuXHRcdFx0XHRyZXNvdXJjZUV2ZW50cy5zb21lKChyZSkgPT4gU3RyaW5nKHJlLmlkKSA9PT0gU3RyaW5nKGV2ZW50LmlkKSlcblx0XHRcdClcblx0XHR9XG5cblx0XHRyZXR1cm4gdG9kYXlFdmVudHNcblx0fSwgW1xuXHRcdGRheSxcblx0XHRyZXNvdXJjZUlkLFxuXHRcdGdldEV2ZW50c0ZvckRhdGVSYW5nZSxcblx0XHRnZXRFdmVudHNGb3JSZXNvdXJjZSxcblx0XHRncmlkVHlwZSxcblx0XHRzaG91bGRSZW5kZXJFdmVudHMsXG5cdFx0YWxsRGF5LFxuXHRdKVxuXG5cdC8vIEhhbmRsZXIgZm9yIHNob3dpbmcgYWxsIGV2ZW50cyBpbiBhIGRpYWxvZ1xuXHRjb25zdCBzaG93QWxsRXZlbnRzID0gKGRheTogZGF5anMuRGF5anMsIGV2ZW50czogQ2FsZW5kYXJFdmVudFtdKSA9PiB7XG5cdFx0YWxsRXZlbnRzRGlhbG9nUmVmLmN1cnJlbnQ/LnNldFNlbGVjdGVkRGF5RXZlbnRzKHtcblx0XHRcdGRheSxcblx0XHRcdGV2ZW50cyxcblx0XHR9KVxuXHRcdGFsbEV2ZW50c0RpYWxvZ1JlZi5jdXJyZW50Py5vcGVuKClcblx0fVxuXG5cdGNvbnN0IGlzQ3VycmVudE1vbnRoID0gZGF5Lm1vbnRoKCkgPT09IGN1cnJlbnREYXRlLm1vbnRoKClcblxuXHRjb25zdCBoaWRkZW5FdmVudHNDb3VudCA9IHRvZGF5RXZlbnRzLmxlbmd0aCAtIGRheU1heEV2ZW50c1xuXHRjb25zdCBoYXNIaWRkZW5FdmVudHMgPSBoaWRkZW5FdmVudHNDb3VudCA+IDBcblxuXHQvLyBVc2UgcmVzb3VyY2Utc3BlY2lmaWMgYnVzaW5lc3MgaG91cnMgaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgZmFsbGJhY2sgdG8gZ2xvYmFsXG5cdGNvbnN0IGVmZmVjdGl2ZUJ1c2luZXNzSG91cnMgPSB1c2VNZW1vKCgpID0+IHtcblx0XHRpZiAocmVzb3VyY2VJZCAmJiBnZXRSZXNvdXJjZUJ5SWQpIHtcblx0XHRcdGNvbnN0IHJlc291cmNlID0gZ2V0UmVzb3VyY2VCeUlkKHJlc291cmNlSWQpXG5cdFx0XHRpZiAocmVzb3VyY2U/LmJ1c2luZXNzSG91cnMpIHtcblx0XHRcdFx0cmV0dXJuIHJlc291cmNlLmJ1c2luZXNzSG91cnNcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGJ1c2luZXNzSG91cnNcblx0fSwgW3Jlc291cmNlSWQsIGdldFJlc291cmNlQnlJZCwgYnVzaW5lc3NIb3Vyc10pXG5cblx0Y29uc3QgaXNCdXNpbmVzcyA9IGlzQnVzaW5lc3NIb3VyKHtcblx0XHRkYXRlOiBkYXksXG5cdFx0aG91cjogZ3JpZFR5cGUgPT09ICdob3VyJyA/IGRheS5ob3VyKCkgOiB1bmRlZmluZWQsXG5cdFx0YnVzaW5lc3NIb3VyczogZWZmZWN0aXZlQnVzaW5lc3NIb3Vycyxcblx0fSlcblxuXHRjb25zdCBob3VyU3RyID0gZGF5LmZvcm1hdCgnSEgnKVxuXHRjb25zdCBtbSA9IGRheS5mb3JtYXQoJ21tJylcblx0Y29uc3QgZGF0ZVRlc3RJZEJhc2UgPVxuXHRcdGdyaWRUeXBlID09PSAnaG91cidcblx0XHRcdD8gYGRheS1jZWxsLSR7ZGF5LmZvcm1hdCgnWVlZWS1NTS1ERCcpfS0ke2hvdXJTdHJ9LSR7bW19YFxuXHRcdFx0OiBgZGF5LWNlbGwtJHtkYXkuZm9ybWF0KCdZWVlZLU1NLUREJyl9YFxuXG5cdHJldHVybiAoXG5cdFx0PD5cblx0XHRcdDxEcm9wcGFibGVDZWxsXG5cdFx0XHRcdGFsbERheT17YWxsRGF5fVxuXHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdCdjdXJzb3ItcG9pbnRlciBvdmVyZmxvdy1jbGlwIHAtMSBob3ZlcjpiZy1hY2NlbnQgbWluLWgtWzYwcHhdIHJlbGF0aXZlIGJvcmRlci1yIGxhc3Q6Ym9yZGVyLXItMCBvbmx5OmJvcmRlci1yIGJvcmRlci1iJyxcblx0XHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdFx0KX1cblx0XHRcdFx0ZGF0YS10ZXN0aWQ9e2RhdGFUZXN0SWQgfHwgZGF0ZVRlc3RJZEJhc2V9XG5cdFx0XHRcdGRhdGU9e2RheX1cblx0XHRcdFx0ZGlzYWJsZWQ9eyFpc0J1c2luZXNzIHx8ICFpc0N1cnJlbnRNb250aH1cblx0XHRcdFx0aG91cj17aG91cn1cblx0XHRcdFx0aWQ9e2BkYXktY2VsbC0ke2RheS50b0lTT1N0cmluZygpfSR7cmVzb3VyY2VJZCA/IGAtcmVzb3VyY2UtJHtyZXNvdXJjZUlkfWAgOiAnJ31gfVxuXHRcdFx0XHRtaW51dGU9e21pbnV0ZX1cblx0XHRcdFx0cmVzb3VyY2VJZD17cmVzb3VyY2VJZH1cblx0XHRcdFx0dHlwZT1cImRheS1jZWxsXCJcblx0XHRcdD5cblx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgaC1mdWxsIHctZnVsbFwiXG5cdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9XCJncmlkLWNlbGwtY29udGVudFwiXG5cdFx0XHRcdFx0c3R5bGU9e3sgZ2FwOiBgJHtldmVudFNwYWNpbmd9cHhgIH19XG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7c2hvd0RheU51bWJlciAmJiA8RGF5TnVtYmVyIGRhdGU9e2RheX0gbG9jYWxlPXtjdXJyZW50TG9jYWxlfSAvPn1cblxuXHRcdFx0XHRcdHtzaG91bGRSZW5kZXJFdmVudHMgJiYgKFxuXHRcdFx0XHRcdFx0PD5cblx0XHRcdFx0XHRcdFx0ey8qIFJlbmRlciBwbGFjZWhvbGRlcnMgZm9yIGV2ZW50cyB0aGF0IG9jY3VyIHRvZGF5IHNvIHRoYXQgdGhlIGNlbGwgaGVpZ2h0IGlzIGFjY29yZGluZyB0byBkYXlNYXhFdmVudHMuICovfVxuXHRcdFx0XHRcdFx0XHR7dG9kYXlFdmVudHMuc2xpY2UoMCwgZGF5TWF4RXZlbnRzKS5tYXAoKGV2ZW50LCByb3dJbmRleCkgPT4gKFxuXHRcdFx0XHRcdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cInctZnVsbCBzaHJpbmstMFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD17ZXZlbnQ/LnRpdGxlfVxuXHRcdFx0XHRcdFx0XHRcdFx0a2V5PXtgZW1wdHktJHtyb3dJbmRleH0tJHtldmVudC5pZH1gfVxuXHRcdFx0XHRcdFx0XHRcdFx0c3R5bGU9e3sgaGVpZ2h0OiBgJHtFVkVOVF9CQVJfSEVJR0hUfXB4YCB9fVxuXHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdCkpfVxuXG5cdFx0XHRcdFx0XHRcdHsvKiBTaG93IG1vcmUgZXZlbnRzIGJ1dHRvbiB3aXRoIGFjY3VyYXRlIGNvdW50ICovfVxuXHRcdFx0XHRcdFx0XHR7aGFzSGlkZGVuRXZlbnRzICYmIChcblx0XHRcdFx0XHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJ0ZXh0LW11dGVkLWZvcmVncm91bmQgaG92ZXI6dGV4dC1mb3JlZ3JvdW5kIGN1cnNvci1wb2ludGVyIHRleHQtWzEwcHhdIHdoaXRlc3BhY2Utbm93cmFwIHNtOnRleHQteHMgc2hyaW5rLTAgbXQtMVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRvbkNsaWNrPXsoZSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRlLnN0b3BQcm9wYWdhdGlvbigpXG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0c2hvd0FsbEV2ZW50cyhkYXksIHRvZGF5RXZlbnRzKVxuXHRcdFx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdFx0XHRcdG9uS2V5RG93bj17KGUpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGUua2V5ID09PSAnRW50ZXInIHx8IGUua2V5ID09PSAnICcpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRlLnByZXZlbnREZWZhdWx0KClcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRlLnN0b3BQcm9wYWdhdGlvbigpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0c2hvd0FsbEV2ZW50cyhkYXksIHRvZGF5RXZlbnRzKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHRcdFx0cm9sZT1cImJ1dHRvblwiXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBveGxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLXRhZy1vdmVyLXJvbGVcblx0XHRcdFx0XHRcdFx0XHRcdHRhYkluZGV4PXswfVxuXHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdCt7aGlkZGVuRXZlbnRzQ291bnR9IHt0KCdtb3JlJyl9XG5cdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHQ8Lz5cblx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdHtjaGlsZHJlbn1cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQ8L0Ryb3BwYWJsZUNlbGw+XG5cblx0XHRcdHsvKiBEaWFsb2cgZm9yIHNob3dpbmcgYWxsIGV2ZW50cyAqL31cblx0XHRcdDxBbGxFdmVudERpYWxvZyByZWY9e2FsbEV2ZW50c0RpYWxvZ1JlZn0gLz5cblx0XHQ8Lz5cblx0KVxufVxuXG5leHBvcnQgY29uc3QgR3JpZENlbGwgPSBtZW1vKE5vTWVtb0dyaWRDZWxsKSBhcyB0eXBlb2YgTm9NZW1vR3JpZENlbGxcbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5pbnRlcmZhY2UgRGF5TnVtYmVyUHJvcHMge1xuXHRkYXRlOiBkYXlqcy5EYXlqc1xuXHRsb2NhbGU/OiBzdHJpbmdcblx0Y2xhc3NOYW1lPzogc3RyaW5nXG59XG5cbi8qKlxuICogUmVuZGVycyB0aGUgZGF5IG51bWJlciBmb3IgYSBjYWxlbmRhciBjZWxsLCBoaWdobGlnaHRpbmcgJ3RvZGF5JyB3aXRoIGEgcHJpbWFyeSBiYWNrZ3JvdW5kLlxuICovXG5leHBvcnQgY29uc3QgRGF5TnVtYmVyOiBSZWFjdC5GQzxEYXlOdW1iZXJQcm9wcz4gPSAoe1xuXHRkYXRlLFxuXHRsb2NhbGUgPSAnZW4nLFxuXHRjbGFzc05hbWUsXG59KSA9PiB7XG5cdGNvbnN0IGlzVG9kYXkgPSBkYXRlLmlzU2FtZShkYXlqcygpLCAnZGF5JylcblxuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCdmbGV4IGgtNSB3LTUgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHJvdW5kZWQtZnVsbCB0ZXh0LXhzIHNocmluay0wJyxcblx0XHRcdFx0aXNUb2RheSAmJiAnYmctcHJpbWFyeSB0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCBmb250LW1lZGl1bScsXG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHRcdGRhdGEtdGVzdGlkPXtcblx0XHRcdFx0aXNUb2RheSA/ICdkYXktbnVtYmVyLXRvZGF5JyA6IGBkYXktbnVtYmVyLSR7ZGF0ZS5mb3JtYXQoJ0QnKX1gXG5cdFx0XHR9XG5cdFx0PlxuXHRcdFx0e0ludGwuRGF0ZVRpbWVGb3JtYXQobG9jYWxlLCB7IGRheTogJ251bWVyaWMnIH0pLmZvcm1hdChkYXRlLnRvRGF0ZSgpKX1cblx0XHQ8L2Rpdj5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZUltcGVyYXRpdmVIYW5kbGUsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMnXG5pbXBvcnQgeyBEcmFnZ2FibGVFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy9kcmFnZ2FibGUtZXZlbnQvZHJhZ2dhYmxlLWV2ZW50J1xuaW1wb3J0IHtcblx0RGlhbG9nLFxuXHREaWFsb2dDb250ZW50LFxuXHREaWFsb2dIZWFkZXIsXG5cdERpYWxvZ1RpdGxlLFxufSBmcm9tICdAL2NvbXBvbmVudHMvdWkvZGlhbG9nJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5leHBvcnQgaW50ZXJmYWNlIFNlbGVjdGVkRGF5RXZlbnRzIHtcblx0ZGF5OiBkYXlqcy5EYXlqc1xuXHRldmVudHM6IENhbGVuZGFyRXZlbnRbXVxufVxuXG5pbnRlcmZhY2UgQWxsRXZlbnREaWFsb2dQcm9wcyB7XG5cdHJlZjogUmVhY3QuUmVmPHtcblx0XHRvcGVuOiAoKSA9PiB2b2lkXG5cdFx0Y2xvc2U6ICgpID0+IHZvaWRcblx0XHRzZXRTZWxlY3RlZERheUV2ZW50czogKGRheUV2ZW50czogU2VsZWN0ZWREYXlFdmVudHMpID0+IHZvaWRcblx0fT5cbn1cblxuZXhwb3J0IGNvbnN0IEFsbEV2ZW50RGlhbG9nOiBSZWFjdC5GQzxBbGxFdmVudERpYWxvZ1Byb3BzPiA9ICh7IHJlZiB9KSA9PiB7XG5cdGNvbnN0IFtkaWFsb2dPcGVuLCBzZXREaWFsb2dPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKVxuXHRjb25zdCBbc2VsZWN0ZWREYXlFdmVudHMsIHNldFNlbGVjdGVkRGF5RXZlbnRzXSA9XG5cdFx0dXNlU3RhdGU8U2VsZWN0ZWREYXlFdmVudHMgfCBudWxsPihudWxsKVxuXHRjb25zdCB7IGN1cnJlbnREYXRlLCBmaXJzdERheU9mV2VlayB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKHN0YXRlKSA9PiAoe1xuXHRcdGN1cnJlbnREYXRlOiBzdGF0ZS5jdXJyZW50RGF0ZSxcblx0XHRmaXJzdERheU9mV2Vlazogc3RhdGUuZmlyc3REYXlPZldlZWssXG5cdH0pKVxuXG5cdHVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCAoKSA9PiAoe1xuXHRcdG9wZW46ICgpID0+IHNldERpYWxvZ09wZW4odHJ1ZSksXG5cdFx0Y2xvc2U6ICgpID0+IHNldERpYWxvZ09wZW4oZmFsc2UpLFxuXHRcdHNldFNlbGVjdGVkRGF5RXZlbnRzOiAoZGF5RXZlbnRzOiBTZWxlY3RlZERheUV2ZW50cykgPT5cblx0XHRcdHNldFNlbGVjdGVkRGF5RXZlbnRzKGRheUV2ZW50cyksXG5cdH0pKVxuXG5cdC8vIEdldCBzdGFydCBkYXRlIGZvciB0aGUgY3VycmVudCBtb250aCB2aWV3IGJhc2VkIG9uIGZpcnN0RGF5T2ZXZWVrXG5cdGNvbnN0IGZpcnN0RGF5T2ZNb250aCA9IGN1cnJlbnREYXRlLnN0YXJ0T2YoJ21vbnRoJylcblxuXHQvLyBDYWxjdWxhdGUgdGhlIGZpcnN0IGRheSBvZiB0aGUgY2FsZW5kYXIgZ3JpZCBjb3JyZWN0bHlcblx0Ly8gRmluZCB0aGUgZmlyc3QgZGF5IG9mIHdlZWsgKGUuZy4gU3VuZGF5IG9yIE1vbmRheSkgdGhhdCBjb21lcyBiZWZvcmUgb3Igb24gdGhlIGZpcnN0IGRheSBvZiB0aGUgbW9udGhcblx0bGV0IGFkanVzdGVkRmlyc3REYXlPZkNhbGVuZGFyID0gZmlyc3REYXlPZk1vbnRoLmNsb25lKClcblx0d2hpbGUgKGFkanVzdGVkRmlyc3REYXlPZkNhbGVuZGFyLmRheSgpICE9PSBmaXJzdERheU9mV2Vlaykge1xuXHRcdGFkanVzdGVkRmlyc3REYXlPZkNhbGVuZGFyID0gYWRqdXN0ZWRGaXJzdERheU9mQ2FsZW5kYXIuc3VidHJhY3QoMSwgJ2RheScpXG5cdH1cblxuXHRyZXR1cm4gKFxuXHRcdDxEaWFsb2cgb25PcGVuQ2hhbmdlPXtzZXREaWFsb2dPcGVufSBvcGVuPXtkaWFsb2dPcGVufT5cblx0XHRcdDxEaWFsb2dDb250ZW50IGNsYXNzTmFtZT1cIm1heC1oLVs4MHZoXSBtYXgtdy1tZCBvdmVyZmxvdy15LWF1dG9cIj5cblx0XHRcdFx0PERpYWxvZ0hlYWRlcj5cblx0XHRcdFx0XHQ8RGlhbG9nVGl0bGU+XG5cdFx0XHRcdFx0XHR7c2VsZWN0ZWREYXlFdmVudHM/LmRheS5mb3JtYXQoJ01NTU0gRCwgWVlZWScpfVxuXHRcdFx0XHRcdDwvRGlhbG9nVGl0bGU+XG5cdFx0XHRcdDwvRGlhbG9nSGVhZGVyPlxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cIm10LTQgc3BhY2UteS0zXCI+XG5cdFx0XHRcdFx0e3NlbGVjdGVkRGF5RXZlbnRzPy5ldmVudHMubWFwKChldmVudCkgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0PERyYWdnYWJsZUV2ZW50XG5cdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwicmVsYXRpdmUgbXktMSBoLVszMHB4XVwiIC8vIFVzZSBldmVudCBJRCBmb3IgdW5pcXVlIGlkZW50aWZpY2F0aW9uXG5cdFx0XHRcdFx0XHRcdFx0ZWxlbWVudElkPXtgYWxsLWV2ZW50cy1kaWFsb2ctZXZlbnQtJCR7ZXZlbnQuaWR9YH1cblx0XHRcdFx0XHRcdFx0XHRldmVudD17ZXZlbnR9XG5cdFx0XHRcdFx0XHRcdFx0a2V5PXtldmVudC5pZH1cblx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHR9KX1cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQ8L0RpYWxvZ0NvbnRlbnQ+XG5cdFx0PC9EaWFsb2c+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHsgdXNlRHJhZ2dhYmxlIH0gZnJvbSAnQGRuZC1raXQvY29yZSdcbmltcG9ydCB0eXBlIHsgQ1NTUHJvcGVydGllcyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgbWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQW5pbWF0ZWRTZWN0aW9uIH0gZnJvbSAnQC9jb21wb25lbnRzL2FuaW1hdGlvbnMvYW5pbWF0ZWQtc2VjdGlvbidcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmNvbnN0IGdldEJvcmRlclJhZGl1c0NsYXNzID0gKFxuXHRpc1RydW5jYXRlZFN0YXJ0OiBib29sZWFuLFxuXHRpc1RydW5jYXRlZEVuZDogYm9vbGVhblxuKSA9PiB7XG5cdGlmIChpc1RydW5jYXRlZFN0YXJ0ICYmIGlzVHJ1bmNhdGVkRW5kKSB7XG5cdFx0cmV0dXJuICdyb3VuZGVkLW5vbmUnXG5cdH1cblx0aWYgKGlzVHJ1bmNhdGVkU3RhcnQpIHtcblx0XHRyZXR1cm4gJ3JvdW5kZWQtci1tZCByb3VuZGVkLWwtbm9uZSdcblx0fVxuXHRpZiAoaXNUcnVuY2F0ZWRFbmQpIHtcblx0XHRyZXR1cm4gJ3JvdW5kZWQtbC1tZCByb3VuZGVkLXItbm9uZSdcblx0fVxuXHRyZXR1cm4gJ3JvdW5kZWQtbWQnXG59XG5cbmZ1bmN0aW9uIERyYWdnYWJsZUV2ZW50VW5tZW1vaXplZCh7XG5cdGVsZW1lbnRJZCxcblx0ZXZlbnQsXG5cdGNsYXNzTmFtZSxcblx0c3R5bGUsXG5cdGRpc2FibGVEcmFnID0gZmFsc2UsXG59OiB7XG5cdGVsZW1lbnRJZDogc3RyaW5nXG5cdGNsYXNzTmFtZT86IHN0cmluZ1xuXHRzdHlsZT86IENTU1Byb3BlcnRpZXNcblx0ZXZlbnQ6IENhbGVuZGFyRXZlbnRcblx0ZGlzYWJsZURyYWc/OiBib29sZWFuXG59KSB7XG5cdGNvbnN0IHsgb25FdmVudENsaWNrLCByZW5kZXJFdmVudCwgZGlzYWJsZUV2ZW50Q2xpY2ssIGRpc2FibGVEcmFnQW5kRHJvcCB9ID1cblx0XHR1c2VTbWFydENhbGVuZGFyQ29udGV4dCgoc3RhdGUpID0+ICh7XG5cdFx0XHRvbkV2ZW50Q2xpY2s6IHN0YXRlLm9uRXZlbnRDbGljayxcblx0XHRcdHJlbmRlckV2ZW50OiBzdGF0ZS5yZW5kZXJFdmVudCxcblx0XHRcdGRpc2FibGVFdmVudENsaWNrOiBzdGF0ZS5kaXNhYmxlRXZlbnRDbGljayxcblx0XHRcdGRpc2FibGVEcmFnQW5kRHJvcDogc3RhdGUuZGlzYWJsZURyYWdBbmREcm9wLFxuXHRcdH0pKVxuXG5cdGNvbnN0IHsgYXR0cmlidXRlcywgbGlzdGVuZXJzLCBzZXROb2RlUmVmLCBpc0RyYWdnaW5nIH0gPSB1c2VEcmFnZ2FibGUoe1xuXHRcdGlkOiBlbGVtZW50SWQsXG5cdFx0ZGF0YToge1xuXHRcdFx0ZXZlbnQsXG5cdFx0XHR0eXBlOiAnY2FsZW5kYXItZXZlbnQnLFxuXHRcdH0sXG5cdFx0ZGlzYWJsZWQ6IGRpc2FibGVEcmFnIHx8IGRpc2FibGVEcmFnQW5kRHJvcCxcblx0fSlcblxuXHQvLyBEZWZhdWx0IGV2ZW50IGNvbnRlbnQgdG8gcmVuZGVyIGlmIGN1c3RvbSByZW5kZXJFdmVudCBpcyBub3QgcHJvdmlkZWRcblx0Y29uc3QgRGVmYXVsdEV2ZW50Q29udGVudCA9ICgpID0+IHtcblx0XHQvLyBDaGVjayBpZiB0aGlzIGV2ZW50IGhhcyB0cnVuY2F0aW9uIGluZm9ybWF0aW9uXG5cdFx0Y29uc3QgZW5oYW5jZWRFdmVudCA9IGV2ZW50IGFzIHVua25vd24gYXMge1xuXHRcdFx0aXNUcnVuY2F0ZWRTdGFydD86IGJvb2xlYW5cblx0XHRcdGlzVHJ1bmNhdGVkRW5kPzogYm9vbGVhblxuXHRcdH1cblx0XHRjb25zdCBpc1RydW5jYXRlZFN0YXJ0ID0gZW5oYW5jZWRFdmVudC5pc1RydW5jYXRlZFN0YXJ0XG5cdFx0Y29uc3QgaXNUcnVuY2F0ZWRFbmQgPSBlbmhhbmNlZEV2ZW50LmlzVHJ1bmNhdGVkRW5kXG5cblx0XHRyZXR1cm4gKFxuXHRcdFx0PGRpdlxuXHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdGV2ZW50LmJhY2tncm91bmRDb2xvciB8fCAnYmctYmx1ZS01MDAnLFxuXHRcdFx0XHRcdGV2ZW50LmNvbG9yIHx8ICd0ZXh0LXdoaXRlJyxcblx0XHRcdFx0XHQnaC1mdWxsIHctZnVsbCBweC0xIGJvcmRlci1bMS41cHhdIGJvcmRlci1jYXJkIHRleHQtbGVmdCBvdmVyZmxvdy1jbGlwIHJlbGF0aXZlJyxcblx0XHRcdFx0XHRnZXRCb3JkZXJSYWRpdXNDbGFzcyhpc1RydW5jYXRlZFN0YXJ0LCBpc1RydW5jYXRlZEVuZClcblx0XHRcdFx0KX1cblx0XHRcdFx0c3R5bGU9e3sgYmFja2dyb3VuZENvbG9yOiBldmVudC5iYWNrZ3JvdW5kQ29sb3IsIGNvbG9yOiBldmVudC5jb2xvciB9fVxuXHRcdFx0PlxuXHRcdFx0XHR7LyogTGVmdCBjb250aW51YXRpb24gaW5kaWNhdG9yICovfVxuXHRcdFx0XHR7aXNUcnVuY2F0ZWRTdGFydCAmJiAoXG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJhYnNvbHV0ZSBsZWZ0LTAgdG9wLTAgYm90dG9tLTAgdy0wLjUgYmctZm9yZWdyb3VuZC8yNVwiPjwvZGl2PlxuXHRcdFx0XHQpfVxuXG5cdFx0XHRcdHsvKiBFdmVudCB0aXRsZSAqL31cblx0XHRcdFx0PHBcblx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0J3RleHQtWzEwcHhdIGZvbnQtc2VtaWJvbGQgc206dGV4dC14cyBtdC0wLjUnLFxuXHRcdFx0XHRcdFx0Ly8gQWRkIHNsaWdodCBwYWRkaW5nIHRvIGF2b2lkIG92ZXJsYXAgd2l0aCBpbmRpY2F0b3JzXG5cdFx0XHRcdFx0XHRpc1RydW5jYXRlZFN0YXJ0ICYmICdwbC0xJyxcblx0XHRcdFx0XHRcdGlzVHJ1bmNhdGVkRW5kICYmICdwci0xJ1xuXHRcdFx0XHRcdCl9XG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7ZXZlbnQudGl0bGV9XG5cdFx0XHRcdDwvcD5cblxuXHRcdFx0XHR7LyogUmlnaHQgY29udGludWF0aW9uIGluZGljYXRvciAqL31cblx0XHRcdFx0e2lzVHJ1bmNhdGVkRW5kICYmIChcblx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImFic29sdXRlIHJpZ2h0LTAgdG9wLTAgYm90dG9tLTAgdy0wLjUgYmctZm9yZWdyb3VuZC8yNVwiPjwvZGl2PlxuXHRcdFx0XHQpfVxuXHRcdFx0PC9kaXY+XG5cdFx0KVxuXHR9XG5cblx0cmV0dXJuIChcblx0XHQ8QW5pbWF0ZWRTZWN0aW9uXG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQndHJ1bmNhdGUgaC1mdWxsIHctZnVsbCcsXG5cdFx0XHRcdGRpc2FibGVEcmFnIHx8IGRpc2FibGVEcmFnQW5kRHJvcFxuXHRcdFx0XHRcdD8gZGlzYWJsZUV2ZW50Q2xpY2tcblx0XHRcdFx0XHRcdD8gJ2N1cnNvci1kZWZhdWx0J1xuXHRcdFx0XHRcdFx0OiAnY3Vyc29yLXBvaW50ZXInXG5cdFx0XHRcdFx0OiAnY3Vyc29yLWdyYWInLFxuXHRcdFx0XHRpc0RyYWdnaW5nICYmXG5cdFx0XHRcdFx0IShkaXNhYmxlRHJhZyB8fCBkaXNhYmxlRHJhZ0FuZERyb3ApICYmXG5cdFx0XHRcdFx0J2N1cnNvci1ncmFiYmluZyBzaGFkb3ctbGcnLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRsYXlvdXQ9e3RydWV9XG5cdFx0XHRsYXlvdXRJZD17ZWxlbWVudElkfVxuXHRcdFx0b25DbGljaz17KGUpID0+IHtcblx0XHRcdFx0ZS5zdG9wUHJvcGFnYXRpb24oKVxuXHRcdFx0XHRvbkV2ZW50Q2xpY2soZXZlbnQpXG5cdFx0XHR9fVxuXHRcdFx0cmVmPXtzZXROb2RlUmVmfVxuXHRcdFx0c3R5bGU9e3N0eWxlfVxuXHRcdFx0dHJhbnNpdGlvbktleT17ZWxlbWVudElkfVxuXHRcdFx0ey4uLmF0dHJpYnV0ZXN9XG5cdFx0XHR7Li4ubGlzdGVuZXJzfVxuXHRcdD5cblx0XHRcdHsvKiBVc2UgY3VzdG9tIHJlbmRlckV2ZW50IGZyb20gY29udGV4dCBpZiBhdmFpbGFibGUsIG90aGVyd2lzZSB1c2UgZGVmYXVsdCAqL31cblx0XHRcdHtyZW5kZXJFdmVudCA/IHJlbmRlckV2ZW50KGV2ZW50KSA6IDxEZWZhdWx0RXZlbnRDb250ZW50IC8+fVxuXHRcdDwvQW5pbWF0ZWRTZWN0aW9uPlxuXHQpXG59XG5cbmV4cG9ydCBjb25zdCBEcmFnZ2FibGVFdmVudCA9IG1lbW8oXG5cdERyYWdnYWJsZUV2ZW50VW5tZW1vaXplZCxcblx0KHByZXZQcm9wcywgbmV4dFByb3BzKSA9PiB7XG5cdFx0Ly8gQ29tcGFyZSB0aGUgZXNzZW50aWFsIHByb3BzIHRvIHByZXZlbnQgdW5uZWNlc3NhcnkgcmUtcmVuZGVyc1xuXHRcdHJldHVybiAoXG5cdFx0XHRwcmV2UHJvcHMuZWxlbWVudElkID09PSBuZXh0UHJvcHMuZWxlbWVudElkICYmXG5cdFx0XHRwcmV2UHJvcHMuZGlzYWJsZURyYWcgPT09IG5leHRQcm9wcy5kaXNhYmxlRHJhZyAmJlxuXHRcdFx0cHJldlByb3BzLmNsYXNzTmFtZSA9PT0gbmV4dFByb3BzLmNsYXNzTmFtZSAmJlxuXHRcdFx0cHJldlByb3BzLmV2ZW50ID09PSBuZXh0UHJvcHMuZXZlbnRcblx0XHQpXG5cdH1cbilcbiIsCiAgICAiLy8gb3hsaW50LWRpc2FibGUgbm8tbmVnYXRlZC1jb25kaXRpb25cblxuaW1wb3J0IHsgdXNlRHJvcHBhYmxlIH0gZnJvbSAnQGRuZC1raXQvY29yZSdcbmltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBESVNBQkxFRF9DRUxMX0NMQVNTTkFNRSB9IGZyb20gJ0AvbGliL2NvbnN0YW50cydcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmludGVyZmFjZSBEcm9wcGFibGVDZWxsUHJvcHMge1xuXHRpZDogc3RyaW5nXG5cdHR5cGU6ICdkYXktY2VsbCcgfCAndGltZS1jZWxsJ1xuXHRkYXRlOiBkYXlqcy5EYXlqc1xuXHRob3VyPzogbnVtYmVyXG5cdG1pbnV0ZT86IG51bWJlclxuXHRyZXNvdXJjZUlkPzogc3RyaW5nIHwgbnVtYmVyXG5cdGFsbERheT86IGJvb2xlYW5cblx0Y2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGVcblx0Y2xhc3NOYW1lPzogc3RyaW5nXG5cdHN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllc1xuXHQnZGF0YS10ZXN0aWQnPzogc3RyaW5nXG5cdGRpc2FibGVkPzogYm9vbGVhblxufVxuXG5leHBvcnQgZnVuY3Rpb24gRHJvcHBhYmxlQ2VsbCh7XG5cdGlkLFxuXHR0eXBlLFxuXHRkYXRlLFxuXHRob3VyLFxuXHRtaW51dGUsXG5cdHJlc291cmNlSWQsXG5cdGFsbERheSxcblx0Y2hpbGRyZW4sXG5cdGNsYXNzTmFtZSxcblx0c3R5bGUsXG5cdCdkYXRhLXRlc3RpZCc6IGRhdGFUZXN0SWQsXG5cdGRpc2FibGVkID0gZmFsc2UsXG59OiBEcm9wcGFibGVDZWxsUHJvcHMpIHtcblx0Y29uc3Qge1xuXHRcdG9uQ2VsbENsaWNrLFxuXHRcdGRpc2FibGVEcmFnQW5kRHJvcCxcblx0XHRkaXNhYmxlQ2VsbENsaWNrLFxuXHRcdGNsYXNzZXNPdmVycmlkZSxcblx0XHR2aWV3LFxuXHR9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKHN0YXRlKSA9PiAoe1xuXHRcdG9uQ2VsbENsaWNrOiBzdGF0ZS5vbkNlbGxDbGljayxcblx0XHRkaXNhYmxlRHJhZ0FuZERyb3A6IHN0YXRlLmRpc2FibGVEcmFnQW5kRHJvcCxcblx0XHRkaXNhYmxlQ2VsbENsaWNrOiBzdGF0ZS5kaXNhYmxlQ2VsbENsaWNrLFxuXHRcdGNsYXNzZXNPdmVycmlkZTogc3RhdGUuY2xhc3Nlc092ZXJyaWRlLFxuXHRcdHZpZXc6IHN0YXRlLnZpZXcsXG5cdH0pKVxuXG5cdGNvbnN0IHsgaXNPdmVyLCBzZXROb2RlUmVmIH0gPSB1c2VEcm9wcGFibGUoe1xuXHRcdGlkLFxuXHRcdGRhdGE6IHtcblx0XHRcdHR5cGUsXG5cdFx0XHRkYXRlLFxuXHRcdFx0aG91cixcblx0XHRcdG1pbnV0ZSxcblx0XHRcdHJlc291cmNlSWQsXG5cdFx0XHRhbGxEYXksXG5cdFx0fSxcblx0XHRkaXNhYmxlZDogZGlzYWJsZURyYWdBbmREcm9wIHx8IGRpc2FibGVkLFxuXHR9KVxuXG5cdGNvbnN0IGhhbmRsZUNlbGxDbGljayA9IChlOiBSZWFjdC5Nb3VzZUV2ZW50KSA9PiB7XG5cdFx0ZS5zdG9wUHJvcGFnYXRpb24oKVxuXG5cdFx0aWYgKGRpc2FibGVDZWxsQ2xpY2sgfHwgZGlzYWJsZWQpIHtcblx0XHRcdHJldHVyblxuXHRcdH1cblxuXHRcdGNvbnN0IHN0YXJ0ID0gZGF0ZS5ob3VyKGhvdXIgPz8gMCkubWludXRlKG1pbnV0ZSA/PyAwKVxuXHRcdGxldCBlbmQgPSBzdGFydC5jbG9uZSgpXG5cdFx0aWYgKGhvdXIgIT09IHVuZGVmaW5lZCAmJiBtaW51dGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0ZW5kID0gZW5kLmhvdXIoaG91cikubWludXRlKG1pbnV0ZSArIDE1KSAvLyBkYXkgdmlldyB0aW1lIHNsb3RzIGFyZSAxNSBtaW51dGVzXG5cdFx0fSBlbHNlIGlmIChob3VyICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGVuZCA9IGVuZC5ob3VyKGhvdXIgKyAxKS5taW51dGUoMCkgLy8gd2VlayB2aWV3IHRpbWUgc2xvdHMgYXJlIDEgaG91clxuXHRcdH0gZWxzZSB7XG5cdFx0XHRlbmQgPSBlbmQuaG91cigyMykubWludXRlKDU5KSAvLyBtb250aCB2aWV3IGZ1bGwgZGF5XG5cdFx0fVxuXG5cdFx0b25DZWxsQ2xpY2soeyBzdGFydCwgZW5kLCByZXNvdXJjZUlkLCBhbGxEYXkgfSlcblx0fVxuXG5cdHJldHVybiAoXG5cdFx0Ly8gYmlvbWUtaWdub3JlIGxpbnQvYTExeS9ub1N0YXRpY0VsZW1lbnRJbnRlcmFjdGlvbnM6IFRoZSBjZWxsIGlzIGludGVyYWN0aXZlIGZvciBldmVudCBjcmVhdGlvblxuXHRcdC8vIGJpb21lLWlnbm9yZSBsaW50L2ExMXkvdXNlS2V5V2l0aENsaWNrRXZlbnRzOiBLZXkgZXZlbnRzIGFyZSBoYW5kbGVkIGJ5IHBhcmVudCBjb21wb25lbnRzXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0J2Ryb3BwYWJsZS1jZWxsJyxcblx0XHRcdFx0Y2xhc3NOYW1lLFxuXHRcdFx0XHRpc092ZXIgJiYgIWRpc2FibGVEcmFnQW5kRHJvcCAmJiAhZGlzYWJsZWQgJiYgJ2JnLWFjY2VudCcsXG5cdFx0XHRcdGRpc2FibGVDZWxsQ2xpY2sgfHwgZGlzYWJsZWQgPyAnY3Vyc29yLWRlZmF1bHQnIDogJ2N1cnNvci1wb2ludGVyJyxcblx0XHRcdFx0ZGlzYWJsZWQgJiYgKGNsYXNzZXNPdmVycmlkZT8uZGlzYWJsZWRDZWxsIHx8IERJU0FCTEVEX0NFTExfQ0xBU1NOQU1FKVxuXHRcdFx0KX1cblx0XHRcdGRhdGEtZGlzYWJsZWQ9e2Rpc2FibGVkLnRvU3RyaW5nKCl9XG5cdFx0XHRkYXRhLXRlc3RpZD17ZGF0YVRlc3RJZH1cblx0XHRcdGRhdGEtdmlldz17dmlld31cblx0XHRcdG9uQ2xpY2s9e2hhbmRsZUNlbGxDbGlja31cblx0XHRcdHJlZj17c2V0Tm9kZVJlZn1cblx0XHRcdHN0eWxlPXtzdHlsZX1cblx0XHQ+XG5cdFx0XHR7Y2hpbGRyZW59XG5cdFx0PC9kaXY+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHsgdXNlUmVzb3VyY2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbnRleHRzL3Jlc291cmNlLWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSB7IFJlc291cmNlIH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci90eXBlcydcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmludGVyZmFjZSBSZXNvdXJjZUNlbGxQcm9wcyB7XG5cdHJlc291cmNlOiBSZXNvdXJjZVxuXHRjbGFzc05hbWU/OiBzdHJpbmdcblx0Y2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGVcblx0J2RhdGEtdGVzdGlkJz86IHN0cmluZ1xufVxuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VDZWxsOiBSZWFjdC5GQzxSZXNvdXJjZUNlbGxQcm9wcz4gPSAoe1xuXHRyZXNvdXJjZSxcblx0Y2xhc3NOYW1lLFxuXHRjaGlsZHJlbixcblx0J2RhdGEtdGVzdGlkJzogZGF0YVRlc3RJZCxcbn0pID0+IHtcblx0Y29uc3QgeyByZW5kZXJSZXNvdXJjZSB9ID0gdXNlUmVzb3VyY2VDYWxlbmRhckNvbnRleHQoKVxuXG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0J2ZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHAtMiBib3JkZXItciBsYXN0OmJvcmRlci1yLTAnLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXRlc3RpZD17ZGF0YVRlc3RJZH1cblx0XHRcdHN0eWxlPXt7XG5cdFx0XHRcdGNvbG9yOiByZXNvdXJjZS5jb2xvcixcblx0XHRcdFx0YmFja2dyb3VuZENvbG9yOiByZXNvdXJjZS5iYWNrZ3JvdW5kQ29sb3IsXG5cdFx0XHR9fVxuXHRcdD5cblx0XHRcdHtyZW5kZXJSZXNvdXJjZVxuXHRcdFx0XHQ/IHJlbmRlclJlc291cmNlKHJlc291cmNlKVxuXHRcdFx0XHQ6IChjaGlsZHJlbiA/PyAoXG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gZm9udC1tZWRpdW0gdHJ1bmNhdGVcIj57cmVzb3VyY2UudGl0bGV9PC9kaXY+XG5cdFx0XHRcdFx0KSl9XG5cdFx0PC9kaXY+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHsgbWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgRHJhZ2dhYmxlRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvZHJhZ2dhYmxlLWV2ZW50L2RyYWdnYWJsZS1ldmVudCdcbmltcG9ydCB7IHVzZVByb2Nlc3NlZFdlZWtFdmVudHMgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL2hvb2tzL3VzZVByb2Nlc3NlZFdlZWtFdmVudHMnXG5pbXBvcnQgdHlwZSBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IEVWRU5UX0JBUl9IRUlHSFQgfSBmcm9tICdAL2xpYi9jb25zdGFudHMnXG5cbmV4cG9ydCBpbnRlcmZhY2UgSG9yaXpvbnRhbEdyaWRFdmVudHNMYXllclByb3BzIHtcblx0ZGF5czogZGF5anMuRGF5anNbXVxuXHRncmlkVHlwZT86ICdkYXknIHwgJ2hvdXInXG5cdHJlc291cmNlSWQ/OiBzdHJpbmcgfCBudW1iZXJcblx0ZGF5TnVtYmVySGVpZ2h0PzogbnVtYmVyXG5cdCdkYXRhLXRlc3RpZCc/OiBzdHJpbmdcblx0YWxsRGF5PzogYm9vbGVhblxufVxuXG5jb25zdCBOb01lbW9Ib3Jpem9udGFsR3JpZEV2ZW50c0xheWVyOiBSZWFjdC5GQzxcblx0SG9yaXpvbnRhbEdyaWRFdmVudHNMYXllclByb3BzXG4+ID0gKHtcblx0ZGF5cyxcblx0Z3JpZFR5cGUgPSAnZGF5Jyxcblx0cmVzb3VyY2VJZCxcblx0ZGF5TnVtYmVySGVpZ2h0LFxuXHQnZGF0YS10ZXN0aWQnOiBkYXRhVGVzdElkLFxuXHRhbGxEYXksXG59KSA9PiB7XG5cdGNvbnN0IHdlZWtTdGFydCA9IGRheXMuYXQoMCkuc3RhcnRPZignZGF5JylcblxuXHRjb25zdCBwcm9jZXNzZWRXZWVrRXZlbnRzID0gdXNlUHJvY2Vzc2VkV2Vla0V2ZW50cyh7XG5cdFx0ZGF5cyxcblx0XHRncmlkVHlwZSxcblx0XHRyZXNvdXJjZUlkLFxuXHRcdGRheU51bWJlckhlaWdodCxcblx0XHRhbGxEYXksXG5cdH0pXG5cblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9XCJyZWxhdGl2ZSB3LWZ1bGwgaC1mdWxsIHBvaW50ZXItZXZlbnRzLW5vbmUgei0xMCBvdmVyZmxvdy1jbGlwXCJcblx0XHRcdGRhdGEtdGVzdGlkPXtkYXRhVGVzdElkfVxuXHRcdD5cblx0XHRcdHtwcm9jZXNzZWRXZWVrRXZlbnRzLm1hcCgoZXZlbnQpID0+IHtcblx0XHRcdFx0Y29uc3QgZXZlbnRLZXkgPSBgJHtldmVudC5pZH0tJHtldmVudC5wb3NpdGlvbn0tJHt3ZWVrU3RhcnQudG9JU09TdHJpbmcoKX0tJHtyZXNvdXJjZUlkID8/ICduby1yZXNvdXJjZSd9YFxuXG5cdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiYWJzb2x1dGUgei0xMCBwb2ludGVyLWV2ZW50cy1hdXRvIG92ZXJmbG93LWNsaXBcIlxuXHRcdFx0XHRcdFx0ZGF0YS1sZWZ0PXtldmVudC5sZWZ0fVxuXHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e2Bob3Jpem9udGFsLWV2ZW50LSR7ZXZlbnQuaWR9YH1cblx0XHRcdFx0XHRcdGRhdGEtdG9wPXtldmVudC50b3B9XG5cdFx0XHRcdFx0XHRkYXRhLXdpZHRoPXtldmVudC53aWR0aH1cblx0XHRcdFx0XHRcdGtleT17YCR7ZXZlbnRLZXl9LXdyYXBwZXJgfVxuXHRcdFx0XHRcdFx0c3R5bGU9e3tcblx0XHRcdFx0XHRcdFx0bGVmdDogYGNhbGMoJHtldmVudC5sZWZ0fSUgKyB2YXIoLS1zcGFjaW5nKSAqIDAuMjUpYCxcblx0XHRcdFx0XHRcdFx0d2lkdGg6IGBjYWxjKCR7ZXZlbnQud2lkdGh9JSAtIHZhcigtLXNwYWNpbmcpICogMSlgLFxuXHRcdFx0XHRcdFx0XHR0b3A6IGAke2V2ZW50LnRvcH1weGAsXG5cdFx0XHRcdFx0XHRcdGhlaWdodDogYCR7RVZFTlRfQkFSX0hFSUdIVH1weGAsXG5cdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdDxEcmFnZ2FibGVFdmVudFxuXHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJoLWZ1bGwgdy1mdWxsIHNoYWRvd1wiXG5cdFx0XHRcdFx0XHRcdGVsZW1lbnRJZD17ZXZlbnRLZXl9XG5cdFx0XHRcdFx0XHRcdGV2ZW50PXtldmVudH1cblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdClcblx0XHRcdH0pfVxuXHRcdDwvZGl2PlxuXHQpXG59XG5cbmV4cG9ydCBjb25zdCBIb3Jpem9udGFsR3JpZEV2ZW50c0xheWVyID0gbWVtbyhOb01lbW9Ib3Jpem9udGFsR3JpZEV2ZW50c0xheWVyKVxuIiwKICAgICJpbXBvcnQgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGdldFBvc2l0aW9uZWRFdmVudHMgfSBmcm9tICdAL2xpYi91dGlscy9wb3NpdGlvbi13ZWVrLWV2ZW50cydcblxuaW50ZXJmYWNlIFVzZVByb2Nlc3NlZFdlZWtFdmVudHNQcm9wcyB7XG5cdGRheXM6IGRheWpzLkRheWpzW11cblx0YWxsRGF5PzogYm9vbGVhblxuXHRkYXlOdW1iZXJIZWlnaHQ/OiBudW1iZXJcblx0cmVzb3VyY2VJZD86IHN0cmluZyB8IG51bWJlclxuXHRncmlkVHlwZT86ICdkYXknIHwgJ2hvdXInXG59XG5cbmV4cG9ydCBjb25zdCB1c2VQcm9jZXNzZWRXZWVrRXZlbnRzID0gKHtcblx0ZGF5cyxcblx0YWxsRGF5LFxuXHRkYXlOdW1iZXJIZWlnaHQsXG5cdHJlc291cmNlSWQsXG5cdGdyaWRUeXBlLFxufTogVXNlUHJvY2Vzc2VkV2Vla0V2ZW50c1Byb3BzKSA9PiB7XG5cdGNvbnN0IHtcblx0XHRnZXRFdmVudHNGb3JEYXRlUmFuZ2UsXG5cdFx0ZGF5TWF4RXZlbnRzLFxuXHRcdGV2ZW50U3BhY2luZyxcblx0XHRnZXRFdmVudHNGb3JSZXNvdXJjZSxcblx0fSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KChzdGF0ZSkgPT4gKHtcblx0XHRnZXRFdmVudHNGb3JEYXRlUmFuZ2U6IHN0YXRlLmdldEV2ZW50c0ZvckRhdGVSYW5nZSxcblx0XHRkYXlNYXhFdmVudHM6IHN0YXRlLmRheU1heEV2ZW50cyxcblx0XHRldmVudFNwYWNpbmc6IHN0YXRlLmV2ZW50U3BhY2luZyxcblx0XHRnZXRFdmVudHNGb3JSZXNvdXJjZTogc3RhdGUuZ2V0RXZlbnRzRm9yUmVzb3VyY2UsXG5cdH0pKVxuXG5cdGNvbnN0IHdlZWtTdGFydCA9IGRheXMuYXQoMCkuc3RhcnRPZignZGF5Jylcblx0Y29uc3Qgd2Vla0VuZCA9IGRheXMuYXQoLTEpLmVuZE9mKCdkYXknKVxuXG5cdGNvbnN0IGV2ZW50cyA9IHVzZU1lbW8oKCkgPT4ge1xuXHRcdGxldCB3ZWVrRXZlbnRzID0gZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlKHdlZWtTdGFydCwgd2Vla0VuZClcblx0XHRpZiAocmVzb3VyY2VJZCkge1xuXHRcdFx0Y29uc3QgcmVzb3VyY2VFdmVudHMgPSBnZXRFdmVudHNGb3JSZXNvdXJjZShyZXNvdXJjZUlkKVxuXHRcdFx0d2Vla0V2ZW50cyA9IHdlZWtFdmVudHMuZmlsdGVyKChldmVudCkgPT5cblx0XHRcdFx0cmVzb3VyY2VFdmVudHMuc29tZSgoZSkgPT4gU3RyaW5nKGUuaWQpID09PSBTdHJpbmcoZXZlbnQuaWQpKVxuXHRcdFx0KVxuXHRcdH1cblxuXHRcdGlmIChhbGxEYXkpIHtcblx0XHRcdHdlZWtFdmVudHMgPSB3ZWVrRXZlbnRzLmZpbHRlcigoZSkgPT4gISFlLmFsbERheSA9PT0gYWxsRGF5KVxuXHRcdH1cblxuXHRcdHJldHVybiB3ZWVrRXZlbnRzXG5cdH0sIFtcblx0XHRnZXRFdmVudHNGb3JEYXRlUmFuZ2UsXG5cdFx0Z2V0RXZlbnRzRm9yUmVzb3VyY2UsXG5cdFx0d2Vla1N0YXJ0LFxuXHRcdHdlZWtFbmQsXG5cdFx0cmVzb3VyY2VJZCxcblx0XHRhbGxEYXksXG5cdF0pXG5cblx0Ly8gR2V0IGFsbCBldmVudHMgdGhhdCBpbnRlcnNlY3Qgd2l0aCB0aGlzIHdlZWtcblx0Y29uc3QgcG9zaXRpb25lZEV2ZW50cyA9IHVzZU1lbW8oKCkgPT4ge1xuXHRcdHJldHVybiBnZXRQb3NpdGlvbmVkRXZlbnRzKHtcblx0XHRcdGRheXMsXG5cdFx0XHRldmVudHMsXG5cdFx0XHRkYXlNYXhFdmVudHMsXG5cdFx0XHRkYXlOdW1iZXJIZWlnaHQsXG5cdFx0XHRldmVudFNwYWNpbmcsXG5cdFx0XHRncmlkVHlwZSxcblx0XHR9KVxuXHR9LCBbZGF5cywgZGF5TWF4RXZlbnRzLCBkYXlOdW1iZXJIZWlnaHQsIGV2ZW50U3BhY2luZywgZXZlbnRzLCBncmlkVHlwZV0pXG5cblx0cmV0dXJuIHBvc2l0aW9uZWRFdmVudHNcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHtcblx0REFZX05VTUJFUl9IRUlHSFQsXG5cdEVWRU5UX0JBUl9IRUlHSFQsXG5cdEdBUF9CRVRXRUVOX0VMRU1FTlRTLFxufSBmcm9tICdAL2xpYi9jb25zdGFudHMnXG5cbmludGVyZmFjZSBQb3NpdGlvbmVkRXZlbnQgZXh0ZW5kcyBDYWxlbmRhckV2ZW50IHtcblx0bGVmdDogbnVtYmVyIC8vIExlZnQgcG9zaXRpb24gaW4gcGVyY2VudGFnZVxuXHR3aWR0aDogbnVtYmVyIC8vIFdpZHRoIGluIHBlcmNlbnRhZ2Vcblx0dG9wOiBudW1iZXIgLy8gVG9wIHBvc2l0aW9uIGluIHBlcmNlbnRhZ2Vcblx0aGVpZ2h0OiBudW1iZXIgLy8gSGVpZ2h0IGluIHBlcmNlbnRhZ2Vcblx0cG9zaXRpb246IG51bWJlciAvLyBQb3NpdGlvbiBpbiB0aGUgcm93ICgwIGZvciBmaXJzdCwgMSBmb3Igc2Vjb25kLCBldGMuKVxuXHRpc1RydW5jYXRlZFN0YXJ0OiBib29sZWFuIC8vIFdoZXRoZXIgdGhlIGV2ZW50IGlzIHRydW5jYXRlZCBhdCB0aGUgc3RhcnRcblx0aXNUcnVuY2F0ZWRFbmQ6IGJvb2xlYW4gLy8gV2hldGhlciB0aGUgZXZlbnQgaXMgdHJ1bmNhdGVkIGF0IHRoZSBlbmRcbn1cblxuaW50ZXJmYWNlIEdldFBvc2l0aW9uZWRFdmVudHNQcm9wcyB7XG5cdGRheXM6IGRheWpzLkRheWpzW11cblx0ZXZlbnRzOiBDYWxlbmRhckV2ZW50W11cblx0ZGF5TWF4RXZlbnRzOiBudW1iZXJcblx0ZGF5TnVtYmVySGVpZ2h0PzogbnVtYmVyXG5cdGdyaWRUeXBlPzogJ2RheScgfCAnaG91cicgLy8gRnV0dXJlIHVzZSBmb3IgZGlmZmVyZW50IGdyaWQgdHlwZXNcblx0ZXZlbnRTcGFjaW5nPzogbnVtYmVyIC8vIEN1c3RvbSB2ZXJ0aWNhbCBzcGFjaW5nIGJldHdlZW4gZXZlbnRzIChkZWZhdWx0cyB0byBHQVBfQkVUV0VFTl9FTEVNRU5UUylcbn1cblxuZXhwb3J0IGNvbnN0IGdldFBvc2l0aW9uZWRFdmVudHMgPSAoe1xuXHRkYXlzLFxuXHRldmVudHMsXG5cdGRheU1heEV2ZW50cyxcblx0ZGF5TnVtYmVySGVpZ2h0ID0gREFZX05VTUJFUl9IRUlHSFQsXG5cdGdyaWRUeXBlID0gJ2RheScsXG5cdGV2ZW50U3BhY2luZyA9IEdBUF9CRVRXRUVOX0VMRU1FTlRTLFxufTogR2V0UG9zaXRpb25lZEV2ZW50c1Byb3BzKSA9PiB7XG5cdC8vIEZvciBob3VyLWJhc2VkIGdyaWRzLCB1c2UgYWN0dWFsIGZpcnN0L2xhc3QgaG91cnMgZnJvbSBkYXlzIGFycmF5XG5cdC8vIEZvciBkYXktYmFzZWQgZ3JpZHMsIHVzZSBzdGFydC9lbmQgb2YgZGF5IHRvIGNhcHR1cmUgYWxsIGV2ZW50c1xuXHRjb25zdCBmaXJzdERheSA9XG5cdFx0Z3JpZFR5cGUgPT09ICdob3VyJyA/IGRheXMuYXQoMCkuc3RhcnRPZignaG91cicpIDogZGF5cy5hdCgwKS5zdGFydE9mKCdkYXknKVxuXHRjb25zdCBsYXN0RGF5ID1cblx0XHRncmlkVHlwZSA9PT0gJ2hvdXInID8gZGF5cy5hdCgtMSkuZW5kT2YoJ2hvdXInKSA6IGRheXMuYXQoLTEpLmVuZE9mKCdkYXknKVxuXHRjb25zdCBkYXlDb3VudCA9IGRheXMubGVuZ3RoXG5cblx0Ly8gU2VwYXJhdGUgbXVsdGktZGF5IGFuZCBzaW5nbGUtZGF5IGV2ZW50c1xuXHRjb25zdCBtdWx0aURheUV2ZW50cyA9IGV2ZW50cy5maWx0ZXIoKGUpID0+IGUuZW5kLmRpZmYoZS5zdGFydCwgZ3JpZFR5cGUpID4gMClcblx0Y29uc3Qgc2luZ2xlRGF5RXZlbnRzID0gZXZlbnRzLmZpbHRlcihcblx0XHQoZSkgPT4gZS5lbmQuZGlmZihlLnN0YXJ0LCBncmlkVHlwZSkgPT09IDBcblx0KVxuXG5cdC8vIFNvcnQgbXVsdGktZGF5IGV2ZW50cyBieSBzdGFydCBkYXRlLCB0aGVuIGJ5IGR1cmF0aW9uXG5cdGNvbnN0IHNvcnRlZE11bHRpRGF5ID0gWy4uLm11bHRpRGF5RXZlbnRzXS5zb3J0KChhLCBiKSA9PiB7XG5cdFx0Y29uc3Qgc3RhcnREaWZmID0gYS5zdGFydC5kaWZmKGIuc3RhcnQpXG5cdFx0aWYgKHN0YXJ0RGlmZiAhPT0gMCkge1xuXHRcdFx0cmV0dXJuIHN0YXJ0RGlmZlxuXHRcdH1cblx0XHRyZXR1cm4gYi5lbmQuZGlmZihiLnN0YXJ0KSAtIGEuZW5kLmRpZmYoYS5zdGFydCkgLy8gTG9uZ2VyIGV2ZW50cyBmaXJzdFxuXHR9KVxuXG5cdC8vIFNvcnQgc2luZ2xlLWRheSBldmVudHMgYnkgc3RhcnQgdGltZVxuXHRjb25zdCBzb3J0ZWRTaW5nbGVEYXkgPSBbLi4uc2luZ2xlRGF5RXZlbnRzXS5zb3J0KChhLCBiKSA9PlxuXHRcdGEuc3RhcnQuZGlmZihiLnN0YXJ0KVxuXHQpXG5cblx0Ly8gQ3JlYXRlIGRheUNvdW50IHggZGF5TWF4RXZlbnRzIGdyaWQgd2l0aCBmbGFnc1xuXHRjb25zdCBncmlkOiB7IHRha2VuOiBib29sZWFuOyBldmVudDogQ2FsZW5kYXJFdmVudCB8IG51bGwgfVtdW10gPSBbXVxuXHRmb3IgKGxldCByb3cgPSAwOyByb3cgPCBkYXlNYXhFdmVudHM7IHJvdysrKSB7XG5cdFx0Z3JpZFtyb3ddID0gW11cblx0XHRmb3IgKGxldCBjb2wgPSAwOyBjb2wgPCBkYXlDb3VudDsgY29sKyspIHtcblx0XHRcdGdyaWRbcm93XVtjb2xdID0geyB0YWtlbjogZmFsc2UsIGV2ZW50OiBudWxsIH1cblx0XHR9XG5cdH1cblxuXHRjb25zdCBwcm9jZXNzZWRFdmVudHM6IFBvc2l0aW9uZWRFdmVudFtdID0gW11cblxuXHQvLyBTdGVwIDE6IEFzc2lnbiBwb3NpdGlvbnMgdG8gbXVsdGktZGF5IGV2ZW50cyBmaXJzdFxuXHRmb3IgKGNvbnN0IGV2ZW50IG9mIHNvcnRlZE11bHRpRGF5KSB7XG5cdFx0Y29uc3QgZXZlbnRTdGFydCA9IGRheWpzLm1heChldmVudC5zdGFydC5zdGFydE9mKGdyaWRUeXBlKSwgZmlyc3REYXkpXG5cdFx0Y29uc3QgYWRqdXN0ZWRFbmQgPVxuXHRcdFx0Z3JpZFR5cGUgPT09ICdob3VyJyA/IGV2ZW50LmVuZC5zdWJ0cmFjdCgxLCAnbWludXRlJykgOiBldmVudC5lbmRcblx0XHRjb25zdCBldmVudEVuZCA9IGRheWpzLm1pbihhZGp1c3RlZEVuZC5zdGFydE9mKGdyaWRUeXBlKSwgbGFzdERheSlcblx0XHRjb25zdCBzdGFydENvbCA9IE1hdGgubWF4KDAsIGV2ZW50U3RhcnQuZGlmZihmaXJzdERheSwgZ3JpZFR5cGUpKVxuXHRcdGNvbnN0IGVuZENvbCA9IE1hdGgubWluKGRheUNvdW50IC0gMSwgZXZlbnRFbmQuZGlmZihmaXJzdERheSwgZ3JpZFR5cGUpKVxuXG5cdFx0Ly8gRGV0ZWN0IGlmIGV2ZW50IGlzIHRydW5jYXRlZCBhdCB0aGUgYm91bmRhcmllc1xuXHRcdGNvbnN0IGlzVHJ1bmNhdGVkU3RhcnQgPSBldmVudC5zdGFydC5zdGFydE9mKGdyaWRUeXBlKS5pc0JlZm9yZShmaXJzdERheSlcblx0XHRjb25zdCBpc1RydW5jYXRlZEVuZCA9IGV2ZW50LmVuZC5zdGFydE9mKGdyaWRUeXBlKS5pc0FmdGVyKGxhc3REYXkpXG5cblx0XHQvLyBUcnkgdG8gcGxhY2UgdGhlIGV2ZW50IHN0YXJ0aW5nIGZyb20gaXRzIG9yaWdpbmFsIHN0YXJ0IGNvbHVtblxuXHRcdGxldCBwbGFjZWRTdWNjZXNzZnVsbHkgPSBmYWxzZVxuXG5cdFx0Ly8gRmlyc3QgdHJ5OiBwbGFjZSBmcm9tIG9yaWdpbmFsIHN0YXJ0IHBvc2l0aW9uXG5cdFx0bGV0IGFzc2lnbmVkUm93ID0gLTFcblx0XHRmb3IgKGxldCByb3cgPSAwOyByb3cgPCBkYXlNYXhFdmVudHM7IHJvdysrKSB7XG5cdFx0XHRsZXQgY2FuUGxhY2UgPSB0cnVlXG5cdFx0XHRmb3IgKGxldCBjb2wgPSBzdGFydENvbDsgY29sIDw9IGVuZENvbDsgY29sKyspIHtcblx0XHRcdFx0aWYgKGdyaWRbcm93XVtjb2xdLnRha2VuKSB7XG5cdFx0XHRcdFx0Y2FuUGxhY2UgPSBmYWxzZVxuXHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChjYW5QbGFjZSkge1xuXHRcdFx0XHRhc3NpZ25lZFJvdyA9IHJvd1xuXHRcdFx0XHRicmVha1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIElmIHdlIGZvdW5kIGEgcm93LCBhc3NpZ24gdGhlIGV2ZW50IHRvIGFsbCBpdHMgY29sdW1uc1xuXHRcdGlmIChhc3NpZ25lZFJvdyAhPT0gLTEpIHtcblx0XHRcdGZvciAobGV0IGNvbCA9IHN0YXJ0Q29sOyBjb2wgPD0gZW5kQ29sOyBjb2wrKykge1xuXHRcdFx0XHRncmlkW2Fzc2lnbmVkUm93XVtjb2xdID0geyB0YWtlbjogdHJ1ZSwgZXZlbnQgfVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBDcmVhdGUgcG9zaXRpb24gZGF0YSBmb3IgcmVuZGVyaW5nXG5cdFx0XHRjb25zdCBzcGFuRGF5cyA9IGVuZENvbCAtIHN0YXJ0Q29sICsgMVxuXHRcdFx0cHJvY2Vzc2VkRXZlbnRzLnB1c2goe1xuXHRcdFx0XHRsZWZ0OiAoc3RhcnRDb2wgLyBkYXlDb3VudCkgKiAxMDAsXG5cdFx0XHRcdHdpZHRoOiAoc3BhbkRheXMgLyBkYXlDb3VudCkgKiAxMDAsXG5cdFx0XHRcdHRvcDpcblx0XHRcdFx0XHRkYXlOdW1iZXJIZWlnaHQgK1xuXHRcdFx0XHRcdGV2ZW50U3BhY2luZyArXG5cdFx0XHRcdFx0YXNzaWduZWRSb3cgKiAoRVZFTlRfQkFSX0hFSUdIVCArIGV2ZW50U3BhY2luZyksXG5cdFx0XHRcdGhlaWdodDogRVZFTlRfQkFSX0hFSUdIVCxcblx0XHRcdFx0cG9zaXRpb246IGFzc2lnbmVkUm93LFxuXHRcdFx0XHQuLi5ldmVudCxcblx0XHRcdFx0aXNUcnVuY2F0ZWRTdGFydCxcblx0XHRcdFx0aXNUcnVuY2F0ZWRFbmQsXG5cdFx0XHR9IGFzIFBvc2l0aW9uZWRFdmVudClcblx0XHRcdHBsYWNlZFN1Y2Nlc3NmdWxseSA9IHRydWVcblx0XHR9XG5cblx0XHQvLyBJZiBjb3VsZG4ndCBwbGFjZSBhdCBvcmlnaW5hbCBwb3NpdGlvbiwgdHJ5IHRydW5jYXRlZCB2ZXJzaW9ucyBzdGFydGluZyBmcm9tIGxhdGVyIGRheXNcblx0XHRpZiAoIXBsYWNlZFN1Y2Nlc3NmdWxseSkge1xuXHRcdFx0Zm9yIChcblx0XHRcdFx0bGV0IHRyeVN0YXJ0Q29sID0gc3RhcnRDb2wgKyAxO1xuXHRcdFx0XHR0cnlTdGFydENvbCA8PSBlbmRDb2w7XG5cdFx0XHRcdHRyeVN0YXJ0Q29sKytcblx0XHRcdCkge1xuXHRcdFx0XHQvLyBUcnkgdG8gcGxhY2UgdGhlIHRydW5jYXRlZCBldmVudCBzdGFydGluZyBmcm9tIHRoaXMgY29sdW1uXG5cdFx0XHRcdGxldCB0cnVuY2F0ZWRBc3NpZ25lZFJvdyA9IC0xXG5cdFx0XHRcdGZvciAobGV0IHJvdyA9IDA7IHJvdyA8IGRheU1heEV2ZW50czsgcm93KyspIHtcblx0XHRcdFx0XHRsZXQgY2FuUGxhY2UgPSB0cnVlXG5cdFx0XHRcdFx0Zm9yIChsZXQgY29sID0gdHJ5U3RhcnRDb2w7IGNvbCA8PSBlbmRDb2w7IGNvbCsrKSB7XG5cdFx0XHRcdFx0XHRpZiAoZ3JpZFtyb3ddW2NvbF0udGFrZW4pIHtcblx0XHRcdFx0XHRcdFx0Y2FuUGxhY2UgPSBmYWxzZVxuXHRcdFx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoY2FuUGxhY2UpIHtcblx0XHRcdFx0XHRcdHRydW5jYXRlZEFzc2lnbmVkUm93ID0gcm93XG5cdFx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIElmIHdlIGZvdW5kIGEgcm93IGZvciB0aGUgdHJ1bmNhdGVkIHZlcnNpb24sIHBsYWNlIGl0XG5cdFx0XHRcdGlmICh0cnVuY2F0ZWRBc3NpZ25lZFJvdyAhPT0gLTEpIHtcblx0XHRcdFx0XHRmb3IgKGxldCBjb2wgPSB0cnlTdGFydENvbDsgY29sIDw9IGVuZENvbDsgY29sKyspIHtcblx0XHRcdFx0XHRcdGdyaWRbdHJ1bmNhdGVkQXNzaWduZWRSb3ddW2NvbF0gPSB7IHRha2VuOiB0cnVlLCBldmVudCB9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gQ3JlYXRlIHBvc2l0aW9uIGRhdGEgZm9yIHRoZSB0cnVuY2F0ZWQgcmVuZGVyaW5nXG5cdFx0XHRcdFx0Y29uc3QgdHJ1bmNhdGVkU3BhbkRheXMgPSBlbmRDb2wgLSB0cnlTdGFydENvbCArIDFcblx0XHRcdFx0XHRwcm9jZXNzZWRFdmVudHMucHVzaCh7XG5cdFx0XHRcdFx0XHRsZWZ0OiAodHJ5U3RhcnRDb2wgLyBkYXlDb3VudCkgKiAxMDAsXG5cdFx0XHRcdFx0XHR3aWR0aDogKHRydW5jYXRlZFNwYW5EYXlzIC8gZGF5Q291bnQpICogMTAwLFxuXHRcdFx0XHRcdFx0dG9wOlxuXHRcdFx0XHRcdFx0XHRkYXlOdW1iZXJIZWlnaHQgK1xuXHRcdFx0XHRcdFx0XHRldmVudFNwYWNpbmcgK1xuXHRcdFx0XHRcdFx0XHR0cnVuY2F0ZWRBc3NpZ25lZFJvdyAqIChFVkVOVF9CQVJfSEVJR0hUICsgZXZlbnRTcGFjaW5nKSxcblx0XHRcdFx0XHRcdGhlaWdodDogRVZFTlRfQkFSX0hFSUdIVCxcblx0XHRcdFx0XHRcdHBvc2l0aW9uOiB0cnVuY2F0ZWRBc3NpZ25lZFJvdyxcblx0XHRcdFx0XHRcdC4uLmV2ZW50LFxuXHRcdFx0XHRcdFx0aXNUcnVuY2F0ZWRTdGFydDogdHJ1ZSwgLy8gQWx3YXlzIHRydW5jYXRlZCBhdCBzdGFydCB3aGVuIHVzaW5nIHRoaXMgZmFsbGJhY2sgbG9naWNcblx0XHRcdFx0XHRcdGlzVHJ1bmNhdGVkRW5kLFxuXHRcdFx0XHRcdH0gYXMgUG9zaXRpb25lZEV2ZW50KVxuXHRcdFx0XHRcdHBsYWNlZFN1Y2Nlc3NmdWxseSA9IHRydWVcblx0XHRcdFx0XHRicmVhayAvLyBTdWNjZXNzZnVsbHkgcGxhY2VkLCBzdG9wIHRyeWluZyBvdGhlciBzdGFydCBwb3NpdGlvbnNcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIFN0ZXAgMjogRmlsbCBnYXBzIHdpdGggc2luZ2xlLWRheSBldmVudHNcblx0Zm9yIChjb25zdCBldmVudCBvZiBzb3J0ZWRTaW5nbGVEYXkpIHtcblx0XHRjb25zdCBldmVudFN0YXJ0ID0gZGF5anMubWF4KGV2ZW50LnN0YXJ0LnN0YXJ0T2YoZ3JpZFR5cGUpLCBmaXJzdERheSlcblx0XHQvLyBDbGFtcCBjb2wgdG8gdmFsaWQgZ3JpZCBib3VuZHMgdG8gcHJldmVudCBhY2Nlc3NpbmcgdW5kZWZpbmVkIGdyaWQgcG9zaXRpb25zXG5cdFx0Y29uc3QgY29sID0gTWF0aC5tYXgoXG5cdFx0XHQwLFxuXHRcdFx0TWF0aC5taW4oZGF5Q291bnQgLSAxLCBldmVudFN0YXJ0LmRpZmYoZmlyc3REYXksIGdyaWRUeXBlKSlcblx0XHQpXG5cblx0XHQvLyBTaW5nbGUtZGF5IGV2ZW50cyBhcmUgbm90IHRydW5jYXRlZCBieSBkZWZpbml0aW9uXG5cdFx0Y29uc3QgaXNUcnVuY2F0ZWRTdGFydCA9IGZhbHNlXG5cdFx0Y29uc3QgaXNUcnVuY2F0ZWRFbmQgPSBmYWxzZVxuXG5cdFx0Ly8gRmluZCB0aGUgZmlyc3QgYXZhaWxhYmxlIHJvdyBpbiB0aGlzIGNvbHVtblxuXHRcdGxldCBhc3NpZ25lZFJvdyA9IC0xXG5cdFx0Zm9yIChsZXQgcm93ID0gMDsgcm93IDwgZGF5TWF4RXZlbnRzOyByb3crKykge1xuXHRcdFx0aWYgKCFncmlkW3Jvd11bY29sXS50YWtlbikge1xuXHRcdFx0XHRhc3NpZ25lZFJvdyA9IHJvd1xuXHRcdFx0XHRicmVha1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIElmIHdlIGZvdW5kIGEgcm93LCBhc3NpZ24gdGhlIGV2ZW50XG5cdFx0aWYgKGFzc2lnbmVkUm93ICE9PSAtMSkge1xuXHRcdFx0Z3JpZFthc3NpZ25lZFJvd11bY29sXSA9IHsgdGFrZW46IHRydWUsIGV2ZW50IH1cblxuXHRcdFx0Ly8gQ3JlYXRlIHBvc2l0aW9uIGRhdGEgZm9yIHJlbmRlcmluZ1xuXHRcdFx0cHJvY2Vzc2VkRXZlbnRzLnB1c2goe1xuXHRcdFx0XHRsZWZ0OiAoY29sIC8gZGF5Q291bnQpICogMTAwLFxuXHRcdFx0XHR3aWR0aDogKDEgLyBkYXlDb3VudCkgKiAxMDAsXG5cdFx0XHRcdHRvcDpcblx0XHRcdFx0XHRkYXlOdW1iZXJIZWlnaHQgK1xuXHRcdFx0XHRcdGV2ZW50U3BhY2luZyArXG5cdFx0XHRcdFx0YXNzaWduZWRSb3cgKiAoRVZFTlRfQkFSX0hFSUdIVCArIGV2ZW50U3BhY2luZyksXG5cdFx0XHRcdGhlaWdodDogRVZFTlRfQkFSX0hFSUdIVCxcblx0XHRcdFx0cG9zaXRpb246IGFzc2lnbmVkUm93LFxuXHRcdFx0XHQuLi5ldmVudCxcblx0XHRcdFx0aXNUcnVuY2F0ZWRTdGFydCxcblx0XHRcdFx0aXNUcnVuY2F0ZWRFbmQsXG5cdFx0XHR9IGFzIFBvc2l0aW9uZWRFdmVudClcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gcHJvY2Vzc2VkRXZlbnRzXG59XG4iLAogICAgImltcG9ydCB7IG1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmludGVyZmFjZSBBbGxEYXlDZWxsUHJvcHMge1xuXHRjbGFzc05hbWU/OiBzdHJpbmdcbn1cblxuY29uc3QgTm9NZW1vQWxsRGF5Q2VsbDogUmVhY3QuRkM8QWxsRGF5Q2VsbFByb3BzPiA9ICh7IGNsYXNzTmFtZSB9KSA9PiB7XG5cdGNvbnN0IHsgdCB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKHN0YXRlKSA9PiAoeyB0OiBzdGF0ZS50IH0pKVxuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCd3LTE2IGJvcmRlci1yIHNocmluay0wIHN0aWNreSBsZWZ0LTAgYmctYmFja2dyb3VuZCB6LTIwIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHNtOnRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kJyxcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdD5cblx0XHRcdHt0KCdhbGxEYXknKX1cblx0XHQ8L2Rpdj5cblx0KVxufVxuXG5leHBvcnQgY29uc3QgQWxsRGF5Q2VsbCA9IG1lbW8oTm9NZW1vQWxsRGF5Q2VsbClcbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBtZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IFJlc291cmNlIH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci90eXBlcydcbmltcG9ydCB0eXBlIGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IEdyaWRDZWxsIH0gZnJvbSAnLi4vZ3JpZC1jZWxsJ1xuaW1wb3J0IHsgVmVydGljYWxHcmlkRXZlbnRzTGF5ZXIgfSBmcm9tICcuL3ZlcnRpY2FsLWdyaWQtZXZlbnRzLWxheWVyJ1xuXG5leHBvcnQgaW50ZXJmYWNlIFZlcnRpY2FsR3JpZENvbFByb3BzIHtcblx0aWQ6IHN0cmluZ1xuXHRkYXk6IGRheWpzLkRheWpzXG5cdHJlc291cmNlSWQ/OiBzdHJpbmcgfCBudW1iZXJcblx0cmVzb3VyY2U/OiBSZXNvdXJjZVxuXHRkYXlzOiBkYXlqcy5EYXlqc1tdIC8vIFRoZSBzcGVjaWZpYyBkYXkgdGhpcyBjb2x1bW4gcmVwcmVzZW50c1xuXHRjbGFzc05hbWU/OiBzdHJpbmdcblx0J2RhdGEtdGVzdGlkJz86IHN0cmluZ1xuXHRncmlkVHlwZT86ICdkYXknIHwgJ2hvdXInXG5cdHJlbmRlckhlYWRlcj86ICgpID0+IFJlYWN0LlJlYWN0Tm9kZVxuXHRyZW5kZXJDZWxsPzogKGRhdGU6IGRheWpzLkRheWpzKSA9PiBSZWFjdC5SZWFjdE5vZGVcblx0bm9FdmVudHM/OiBib29sZWFuXG5cdC8qKiBPcHRpb25hbCBhcnJheSBvZiBtaW51dGUgc2xvdHMgYnkgd2hpY2ggdGhlIGhvdXIgaXMgZGl2aWRlZFxuXHQgKiBlLmcuLCBbMCwgMTUsIDMwLCA0NV0gZm9yIHF1YXJ0ZXItaG91ciBzbG90c1xuXHQgKi9cblx0Y2VsbFNsb3RzPzogbnVtYmVyW11cblx0LyoqIFdoZXRoZXIgdGhpcyBpcyB0aGUgbGFzdCBjb2x1bW4gaW4gdGhlIGdyaWQgKi9cblx0aXNMYXN0Q29sdW1uPzogYm9vbGVhblxufVxuXG5jb25zdCBOb01lbW9WZXJ0aWNhbEdyaWRDb2w6IFJlYWN0LkZDPFZlcnRpY2FsR3JpZENvbFByb3BzPiA9ICh7XG5cdGlkLFxuXHRkYXlzLFxuXHRyZXNvdXJjZUlkLFxuXHRyZXNvdXJjZSxcblx0J2RhdGEtdGVzdGlkJzogZGF0YVRlc3RJZCxcblx0Z3JpZFR5cGUsXG5cdGNsYXNzTmFtZSxcblx0cmVuZGVyQ2VsbCxcblx0bm9FdmVudHMsXG5cdGNlbGxTbG90cyA9IFs2MF0sIC8vIERlZmF1bHQgdG8gZnVsbCBob3VyIHNsb3RzXG5cdGlzTGFzdENvbHVtbixcbn0pID0+IHtcblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQnZmxleCBmbGV4LWNvbCBmbGV4LTEgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIG1pbi13LTUwIGJnLWJhY2tncm91bmQgcmVsYXRpdmUnLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXRlc3RpZD17ZGF0YVRlc3RJZCB8fCBgdmVydGljYWwtY29sLSR7aWR9YH1cblx0XHQ+XG5cdFx0XHR7LyogVGltZSBzbG90cyAqL31cblx0XHRcdDxkaXZcblx0XHRcdFx0Y2xhc3NOYW1lPVwidy1mdWxsIHJlbGF0aXZlIGdyaWRcIlxuXHRcdFx0XHRzdHlsZT17e1xuXHRcdFx0XHRcdGdyaWRUZW1wbGF0ZVJvd3M6IGByZXBlYXQoJHtkYXlzLmxlbmd0aH0sIG1pbm1heCgwLCAxZnIpKWAsXG5cdFx0XHRcdH19XG5cdFx0XHQ+XG5cdFx0XHRcdHtkYXlzLm1hcCgoZGF5KSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgaG91clN0ciA9IGRheS5mb3JtYXQoJ0hIJylcblx0XHRcdFx0XHRjb25zdCBkYXRlU3RyID0gZGF5LmZvcm1hdCgnWVlZWS1NTS1ERCcpXG5cblx0XHRcdFx0XHRpZiAocmVuZGVyQ2VsbCkge1xuXHRcdFx0XHRcdFx0Y29uc3QgdGVzdElkID1cblx0XHRcdFx0XHRcdFx0aWQgPT09ICd0aW1lLWNvbCdcblx0XHRcdFx0XHRcdFx0XHQ/IGB2ZXJ0aWNhbC10aW1lLSR7aG91clN0cn1gXG5cdFx0XHRcdFx0XHRcdFx0OiBgdmVydGljYWwtY2VsbC0ke2RhdGVTdHJ9LSR7aG91clN0cn0tMDAke3Jlc291cmNlSWQgPyBgLSR7cmVzb3VyY2VJZH1gIDogJyd9YFxuXHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImgtWzYwcHhdIGJvcmRlci1iIGJvcmRlci1yXCJcblx0XHRcdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD17dGVzdElkfVxuXHRcdFx0XHRcdFx0XHRcdGtleT17YCR7ZGF0ZVN0cn0tJHtob3VyU3RyfWB9XG5cdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHR7cmVuZGVyQ2VsbChkYXkpfVxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRyZXR1cm4gY2VsbFNsb3RzLm1hcCgobWludXRlKSA9PiB7XG5cdFx0XHRcdFx0XHRjb25zdCBtID0gbWludXRlID09PSA2MCA/IHVuZGVmaW5lZCA6IG1pbnV0ZVxuXHRcdFx0XHRcdFx0Y29uc3QgbW0gPSBtID09PSB1bmRlZmluZWQgPyAnMDAnIDogU3RyaW5nKG0pLnBhZFN0YXJ0KDIsICcwJylcblx0XHRcdFx0XHRcdGNvbnN0IHRlc3RJZCA9IGB2ZXJ0aWNhbC1jZWxsLSR7ZGF0ZVN0cn0tJHtob3VyU3RyfS0ke21tfSR7cmVzb3VyY2VJZCA/IGAtJHtyZXNvdXJjZUlkfWAgOiAnJ31gXG5cblx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdDxHcmlkQ2VsbFxuXHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHRcdFx0XHQnaG92ZXI6YmctYWNjZW50IHJlbGF0aXZlIHotMTAgaC1bNjBweF0gY3Vyc29yLXBvaW50ZXIgYm9yZGVyLWInLFxuXHRcdFx0XHRcdFx0XHRcdFx0bWludXRlID09PSA2MCA/ICcnIDogJ2JvcmRlci1kYXNoZWQgaC1bMTVweF0gbWluLWgtWzE1cHhdJyxcblx0XHRcdFx0XHRcdFx0XHRcdGlzTGFzdENvbHVtbiA/ICdib3JkZXItci0wJyA6ICdib3JkZXItcidcblx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPXt0ZXN0SWR9XG5cdFx0XHRcdFx0XHRcdFx0ZGF5PXttID8gZGF5Lm1pbnV0ZShtKSA6IGRheX1cblx0XHRcdFx0XHRcdFx0XHRncmlkVHlwZT17Z3JpZFR5cGV9XG5cdFx0XHRcdFx0XHRcdFx0aG91cj17ZGF5LmhvdXIoKX1cblx0XHRcdFx0XHRcdFx0XHRrZXk9e2Ake2RhdGVTdHJ9LSR7aG91clN0cn0tJHttbX0tJHtyZXNvdXJjZUlkIHx8ICduby1yZXNvdXJjZSd9YH1cblx0XHRcdFx0XHRcdFx0XHRtaW51dGU9e219XG5cdFx0XHRcdFx0XHRcdFx0cmVzb3VyY2VJZD17cmVzb3VyY2VJZH0gLy8gRXZlbnRzIGFyZSByZW5kZXJlZCBpbiBhIHNlcGFyYXRlIGxheWVyXG5cdFx0XHRcdFx0XHRcdFx0c2hvdWxkUmVuZGVyRXZlbnRzPXtmYWxzZX1cblx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHR9KX1cblxuXHRcdFx0XHR7LyogRXZlbnQgYmxvY2tzIGxheWVyICovfVxuXHRcdFx0XHR7IW5vRXZlbnRzICYmIChcblx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImFic29sdXRlIGluc2V0LTAgei0xMCBwb2ludGVyLWV2ZW50cy1ub25lXCI+XG5cdFx0XHRcdFx0XHQ8VmVydGljYWxHcmlkRXZlbnRzTGF5ZXJcblx0XHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e2B2ZXJ0aWNhbC1ldmVudHMtJHtpZH1gfVxuXHRcdFx0XHRcdFx0XHRkYXlzPXtkYXlzfVxuXHRcdFx0XHRcdFx0XHRncmlkVHlwZT17Z3JpZFR5cGV9XG5cdFx0XHRcdFx0XHRcdHJlc291cmNlPXtyZXNvdXJjZX1cblx0XHRcdFx0XHRcdFx0cmVzb3VyY2VJZD17cmVzb3VyY2VJZH1cblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdCl9XG5cdFx0XHQ8L2Rpdj5cblx0XHQ8L2Rpdj5cblx0KVxufVxuXG5leHBvcnQgY29uc3QgVmVydGljYWxHcmlkQ29sID0gbWVtbyhcblx0Tm9NZW1vVmVydGljYWxHcmlkQ29sXG4pIGFzIHR5cGVvZiBOb01lbW9WZXJ0aWNhbEdyaWRDb2xcbiIsCiAgICAiaW1wb3J0IHsgbWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQ3VycmVudFRpbWVJbmRpY2F0b3IgfSBmcm9tICdAL2NvbXBvbmVudHMvY3VycmVudC10aW1lLWluZGljYXRvcidcbmltcG9ydCB7IERyYWdnYWJsZUV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL2RyYWdnYWJsZS1ldmVudC9kcmFnZ2FibGUtZXZlbnQnXG5pbXBvcnQgeyB1c2VQcm9jZXNzZWREYXlFdmVudHMgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL2hvb2tzL3VzZVByb2Nlc3NlZERheUV2ZW50cydcbmltcG9ydCB0eXBlIHsgUmVzb3VyY2UgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL3R5cGVzJ1xuaW1wb3J0IHR5cGUgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5pbnRlcmZhY2UgVmVydGljYWxHcmlkRXZlbnRzTGF5ZXJQcm9wcyB7XG5cdGdyaWRUeXBlPzogJ2RheScgfCAnaG91cidcblx0ZGF5czogZGF5anMuRGF5anNbXSAvLyBUaGUgc3BlY2lmaWMgZGF5IHRoaXMgbGF5ZXIgcmVwcmVzZW50c1xuXHRyZXNvdXJjZUlkPzogc3RyaW5nIHwgbnVtYmVyXG5cdHJlc291cmNlPzogUmVzb3VyY2Vcblx0J2RhdGEtdGVzdGlkJz86IHN0cmluZ1xufVxuXG5jb25zdCBOb01lbW9WZXJ0aWNhbEdyaWRFdmVudHNMYXllcjogUmVhY3QuRkM8VmVydGljYWxHcmlkRXZlbnRzTGF5ZXJQcm9wcz4gPSAoe1xuXHRkYXlzLFxuXHRncmlkVHlwZSA9ICdob3VyJyxcblx0cmVzb3VyY2VJZCxcblx0cmVzb3VyY2UsXG5cdCdkYXRhLXRlc3RpZCc6IGRhdGFUZXN0SWQsXG59KSA9PiB7XG5cdGNvbnN0IHRvZGF5RXZlbnRzID0gdXNlUHJvY2Vzc2VkRGF5RXZlbnRzKHsgZGF5cywgZ3JpZFR5cGUsIHJlc291cmNlSWQgfSlcblx0Y29uc3QgcmFuZ2VTdGFydCA9IGRheXMuYXQoMClcblx0Y29uc3QgcmFuZ2VFbmQgPSBkYXlzLmF0KC0xKT8uYWRkKDEsIGdyaWRUeXBlKVxuXG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPVwicmVsYXRpdmUgdy1mdWxsIGgtZnVsbCBwb2ludGVyLWV2ZW50cy1ub25lIHotMTAgb3ZlcmZsb3ctY2xpcFwiXG5cdFx0XHRkYXRhLXRlc3RpZD17ZGF0YVRlc3RJZH1cblx0XHQ+XG5cdFx0XHR7cmFuZ2VTdGFydCAmJiByYW5nZUVuZCAmJiAoXG5cdFx0XHRcdDxDdXJyZW50VGltZUluZGljYXRvclxuXHRcdFx0XHRcdHJhbmdlRW5kPXtyYW5nZUVuZH1cblx0XHRcdFx0XHRyYW5nZVN0YXJ0PXtyYW5nZVN0YXJ0fVxuXHRcdFx0XHRcdHJlc291cmNlPXtyZXNvdXJjZX1cblx0XHRcdFx0Lz5cblx0XHRcdCl9XG5cdFx0XHR7dG9kYXlFdmVudHMubWFwKChldmVudCwgaW5kZXgpID0+IHtcblx0XHRcdFx0Y29uc3QgZXZlbnRLZXkgPSBgZXZlbnQtJHtldmVudC5pZH0tJHtpbmRleH0tJHtkYXlzLmF0KDApLnRvSVNPU3RyaW5nKCl9LSR7cmVzb3VyY2VJZCA/PyAnbm8tcmVzb3VyY2UnfWBcblx0XHRcdFx0Y29uc3QgaXNTaG9ydEV2ZW50ID0gZXZlbnQuZW5kLmRpZmYoZXZlbnQuc3RhcnQsICdtaW51dGUnKSA8PSAxNVxuXG5cdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiYWJzb2x1dGVcIlxuXHRcdFx0XHRcdFx0a2V5PXtgJHtldmVudEtleX0td3JhcHBlcmB9XG5cdFx0XHRcdFx0XHRzdHlsZT17e1xuXHRcdFx0XHRcdFx0XHRsZWZ0OiBgJHtldmVudC5sZWZ0fSVgLFxuXHRcdFx0XHRcdFx0XHR3aWR0aDogYGNhbGMoJHtldmVudC53aWR0aH0lIC0gdmFyKC0tc3BhY2luZykgKiAyKWAsXG5cdFx0XHRcdFx0XHRcdHRvcDogYCR7ZXZlbnQudG9wfSVgLFxuXHRcdFx0XHRcdFx0XHRoZWlnaHQ6IGAke2V2ZW50LmhlaWdodH0lYCxcblx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0PERyYWdnYWJsZUV2ZW50XG5cdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oJ3BvaW50ZXItZXZlbnRzLWF1dG8gYWJzb2x1dGUnLCB7XG5cdFx0XHRcdFx0XHRcdFx0J1smX3BdOnRleHQtWzEwcHhdIFsmX3BdOm10LTAnOiBpc1Nob3J0RXZlbnQsXG5cdFx0XHRcdFx0XHRcdH0pfVxuXHRcdFx0XHRcdFx0XHRlbGVtZW50SWQ9e2V2ZW50S2V5fVxuXHRcdFx0XHRcdFx0XHRldmVudD17ZXZlbnR9XG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQpXG5cdFx0XHR9KX1cblx0XHQ8L2Rpdj5cblx0KVxufVxuXG5leHBvcnQgY29uc3QgVmVydGljYWxHcmlkRXZlbnRzTGF5ZXIgPSBtZW1vKE5vTWVtb1ZlcnRpY2FsR3JpZEV2ZW50c0xheWVyKVxuIiwKICAgICJpbXBvcnQgZGF5anMgZnJvbSAnZGF5anMnXG5pbXBvcnQgeyBtZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IFJlc291cmNlIH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci90eXBlcydcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcblxuaW50ZXJmYWNlIEN1cnJlbnRUaW1lSW5kaWNhdG9yUHJvcHMge1xuXHQvKiogVGhlIHN0YXJ0IGRhdGUvdGltZSBvZiB0aGUgY29udGFpbmVyJ3MgdGltZWxpbmUgKGUuZy4sIHRvcCBvZiB0aGUgY29sdW1uKSAqL1xuXHRyYW5nZVN0YXJ0OiBkYXlqcy5EYXlqc1xuXHQvKiogVGhlIGVuZCBkYXRlL3RpbWUgb2YgdGhlIGNvbnRhaW5lcidzIHRpbWVsaW5lIChlLmcuLCBib3R0b20gb2YgdGhlIGNvbHVtbikgKi9cblx0cmFuZ2VFbmQ6IGRheWpzLkRheWpzXG5cdC8qKiBPcHRpb25hbCByZWZlcmVuY2UgdGltZSBmb3IgXCJub3dcIiAodXNlZnVsIGZvciB0ZXN0aW5nKSAqL1xuXHRub3c/OiBkYXlqcy5EYXlqc1xuXHQvKiogVGhlIHJlc291cmNlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNvbHVtbiAob3B0aW9uYWwpICovXG5cdHJlc291cmNlPzogUmVzb3VyY2Vcbn1cblxuLyoqXG4gKiBSZW5kZXJzIGEgaG9yaXpvbnRhbCByZWQgbGluZSBpbmRpY2F0aW5nIHRoZSBjdXJyZW50IHRpbWUgcmVsYXRpdmUgdG8gYSB2ZXJ0aWNhbCBjb250YWluZXIncyB0aW1lbGluZS5cbiAqIFRoZSBpbmRpY2F0b3IgaGFuZGxlcyBpdHMgb3duIHZpc2liaWxpdHkgYmFzZWQgb24gd2hldGhlciAnbm93JyBmYWxscyB3aXRoaW4gdGhlIHByb3ZpZGVkIHJhbmdlLlxuICogU3VwcG9ydHMgY3VzdG9tIHJlbmRlcmluZyB2aWEgcmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3IgZnJvbSBjb250ZXh0LlxuICovXG5jb25zdCBOb01lbW9DdXJyZW50VGltZUluZGljYXRvciA9ICh7XG5cdHJhbmdlU3RhcnQsXG5cdHJhbmdlRW5kLFxuXHRub3c6IHByb3BOb3csXG5cdHJlc291cmNlLFxufTogQ3VycmVudFRpbWVJbmRpY2F0b3JQcm9wcykgPT4ge1xuXHQvLyBHZXQgcmVuZGVyIGZ1bmN0aW9uIGFuZCBjdXJyZW50IHZpZXcgZnJvbSBjb250ZXh0XG5cdGNvbnN0IHsgcmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3IsIHZpZXcgfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KFxuXHRcdChzdGF0ZSkgPT4gKHtcblx0XHRcdHJlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yOiBzdGF0ZS5yZW5kZXJDdXJyZW50VGltZUluZGljYXRvcixcblx0XHRcdHZpZXc6IHN0YXRlLnZpZXcsXG5cdFx0fSlcblx0KVxuXG5cdGNvbnN0IG5vdyA9IHByb3BOb3cgPz8gZGF5anMoKVxuXG5cdC8vIENoZWNrIGlmIGN1cnJlbnQgdGltZSBmYWxscyB3aXRoaW4gdGhpcyByYW5nZVxuXHRjb25zdCBpc1dpdGhpblJhbmdlID0gbm93LmlzU2FtZU9yQWZ0ZXIocmFuZ2VTdGFydCkgJiYgbm93LmlzQmVmb3JlKHJhbmdlRW5kKVxuXG5cdGlmICghaXNXaXRoaW5SYW5nZSkge1xuXHRcdHJldHVybiBudWxsXG5cdH1cblxuXHRjb25zdCB0b3RhbER1cmF0aW9uID0gcmFuZ2VFbmQuZGlmZihyYW5nZVN0YXJ0LCAnbWludXRlJylcblx0Y29uc3QgbWludXRlc0Zyb21TdGFydCA9IG5vdy5kaWZmKHJhbmdlU3RhcnQsICdtaW51dGUnKVxuXHRjb25zdCBwcm9ncmVzcyA9IChtaW51dGVzRnJvbVN0YXJ0IC8gdG90YWxEdXJhdGlvbikgKiAxMDBcblxuXHQvLyBJZiBjdXN0b20gcmVuZGVyIGZ1bmN0aW9uIGlzIHByb3ZpZGVkIHZpYSBjb250ZXh0LCB1c2UgaXRcblx0aWYgKHJlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yKSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDw+XG5cdFx0XHRcdHtyZW5kZXJDdXJyZW50VGltZUluZGljYXRvcih7XG5cdFx0XHRcdFx0Y3VycmVudFRpbWU6IG5vdyxcblx0XHRcdFx0XHRyYW5nZVN0YXJ0LFxuXHRcdFx0XHRcdHJhbmdlRW5kLFxuXHRcdFx0XHRcdHByb2dyZXNzLFxuXHRcdFx0XHRcdHJlc291cmNlLFxuXHRcdFx0XHRcdHZpZXcsXG5cdFx0XHRcdH0pfVxuXHRcdFx0PC8+XG5cdFx0KVxuXHR9XG5cblx0Ly8gRGVmYXVsdCBpbmRpY2F0b3IgcmVuZGVyaW5nXG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPVwiYWJzb2x1dGUgbGVmdC0wIHJpZ2h0LTAgaC0wLjUgYmctcmVkLTUwMCB6LTUwIHBvaW50ZXItZXZlbnRzLW5vbmVcIlxuXHRcdFx0ZGF0YS10ZXN0aWQ9XCJjdXJyZW50LXRpbWUtaW5kaWNhdG9yXCJcblx0XHRcdHN0eWxlPXt7XG5cdFx0XHRcdHRvcDogYCR7cHJvZ3Jlc3N9JWAsXG5cdFx0XHR9fVxuXHRcdC8+XG5cdClcbn1cblxuZXhwb3J0IGNvbnN0IEN1cnJlbnRUaW1lSW5kaWNhdG9yID0gbWVtbyhOb01lbW9DdXJyZW50VGltZUluZGljYXRvcilcbiIsCiAgICAiaW1wb3J0IHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQge1xuXHRnZXRQb3NpdGlvbmVkRGF5RXZlbnRzLFxuXHR0eXBlIFBvc2l0aW9uZWRFdmVudCxcbn0gZnJvbSAnQC9saWIvdXRpbHMvcG9zaXRpb24tZGF5LWV2ZW50cydcblxuaW50ZXJmYWNlIFVzZVByb2Nlc3NlZERheUV2ZW50c1Byb3BzIHtcblx0ZGF5czogZGF5anMuRGF5anNbXSAvLyBUaGUgc3BlY2lmaWMgZGF5IHRoaXMgY29sdW1uIHJlcHJlc2VudHNcblx0Z3JpZFR5cGU/OiAnZGF5JyB8ICdob3VyJ1xuXHRyZXNvdXJjZUlkPzogc3RyaW5nIHwgbnVtYmVyXG59XG5cbmV4cG9ydCBjb25zdCB1c2VQcm9jZXNzZWREYXlFdmVudHMgPSAoe1xuXHRkYXlzLFxuXHRncmlkVHlwZSxcblx0cmVzb3VyY2VJZCxcbn06IFVzZVByb2Nlc3NlZERheUV2ZW50c1Byb3BzKSA9PiB7XG5cdGNvbnN0IHsgZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlLCBnZXRFdmVudHNGb3JSZXNvdXJjZSB9ID1cblx0XHR1c2VTbWFydENhbGVuZGFyQ29udGV4dCgoc3RhdGUpID0+ICh7XG5cdFx0XHRnZXRFdmVudHNGb3JEYXRlUmFuZ2U6IHN0YXRlLmdldEV2ZW50c0ZvckRhdGVSYW5nZSxcblx0XHRcdGdldEV2ZW50c0ZvclJlc291cmNlOiBzdGF0ZS5nZXRFdmVudHNGb3JSZXNvdXJjZSxcblx0XHR9KSlcblx0Y29uc3QgZGF5U3RhcnQgPSBkYXlzLmF0KDApLnN0YXJ0T2YoJ2RheScpXG5cdGNvbnN0IGRheUVuZCA9IGRheXMuYXQoLTEpLmVuZE9mKCdkYXknKVxuXG5cdGNvbnN0IGV2ZW50cyA9IHVzZU1lbW8oKCkgPT4ge1xuXHRcdGxldCBkYXlFdmVudHMgPSBnZXRFdmVudHNGb3JEYXRlUmFuZ2UoZGF5U3RhcnQsIGRheUVuZClcblx0XHRpZiAocmVzb3VyY2VJZCkge1xuXHRcdFx0Y29uc3QgcmVzb3VyY2VFdmVudHMgPSBnZXRFdmVudHNGb3JSZXNvdXJjZShyZXNvdXJjZUlkKVxuXHRcdFx0ZGF5RXZlbnRzID0gZGF5RXZlbnRzLmZpbHRlcigoZXZlbnQpID0+XG5cdFx0XHRcdHJlc291cmNlRXZlbnRzLnNvbWUoKHJlKSA9PiBTdHJpbmcocmUuaWQpID09PSBTdHJpbmcoZXZlbnQuaWQpKVxuXHRcdFx0KVxuXHRcdH1cblxuXHRcdC8vIFZlcnRpY2FsIGdyaWRzIChEYXkvV2Vlay9SZXNvdXJjZSBWZXJ0aWNhbCkgbmV2ZXIgcmVuZGVyIGFsbC1kYXkgZXZlbnRzXG5cdFx0Ly8gYXMgdGhvc2UgYXJlIGhhbmRsZWQgYnkgdGhlIGFsbC1kYXktcm93IG9yIGFyZSBub3QgYXBwcm9wcmlhdGUgZm9yIHRoZSB0aW1lIGdyaWQuXG5cdFx0cmV0dXJuIGRheUV2ZW50cy5maWx0ZXIoKGUpID0+ICFlLmFsbERheSlcblx0fSwgW1xuXHRcdGRheVN0YXJ0LFxuXHRcdGRheUVuZCxcblx0XHRnZXRFdmVudHNGb3JEYXRlUmFuZ2UsXG5cdFx0cmVzb3VyY2VJZCxcblx0XHRnZXRFdmVudHNGb3JSZXNvdXJjZSxcblx0XSlcblxuXHRjb25zdCB0b2RheUV2ZW50cyA9IHVzZU1lbW88UG9zaXRpb25lZEV2ZW50W10+KCgpID0+IHtcblx0XHRyZXR1cm4gZ2V0UG9zaXRpb25lZERheUV2ZW50cyh7XG5cdFx0XHRkYXlzLFxuXHRcdFx0ZXZlbnRzLFxuXHRcdFx0Z3JpZFR5cGUsXG5cdFx0fSlcblx0fSwgW2RheXMsIGdyaWRUeXBlLCBldmVudHNdKVxuXG5cdHJldHVybiB0b2RheUV2ZW50c1xufVxuIiwKICAgICJpbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5cbmV4cG9ydCBpbnRlcmZhY2UgUG9zaXRpb25lZEV2ZW50IGV4dGVuZHMgQ2FsZW5kYXJFdmVudCB7XG5cdGxlZnQ6IG51bWJlciAvLyBMZWZ0IHBvc2l0aW9uIGluIHBlcmNlbnRhZ2Vcblx0d2lkdGg6IG51bWJlciAvLyBXaWR0aCBpbiBwZXJjZW50YWdlXG5cdHRvcDogbnVtYmVyIC8vIFRvcCBwb3NpdGlvbiBpbiBwZXJjZW50YWdlXG5cdGhlaWdodDogbnVtYmVyIC8vIEhlaWdodCBpbiBwZXJjZW50YWdlXG5cdHpJbmRleD86IG51bWJlciAvLyBaLWluZGV4IGZvciBsYXllcmluZyBvdmVybGFwcGluZyBldmVudHNcbn1cblxuaW50ZXJmYWNlIEdldFBvc2l0aW9uZWREYXlFdmVudHNQYXJhbXMge1xuXHRkYXlzOiBkYXlqcy5EYXlqc1tdXG5cdGdyaWRUeXBlPzogJ2RheScgfCAnaG91cicgfCAnbWludXRlJ1xuXHRldmVudHM6IENhbGVuZGFyRXZlbnRbXVxufVxuXG5leHBvcnQgY29uc3QgZ2V0UG9zaXRpb25lZERheUV2ZW50cyA9ICh7XG5cdGRheXMsXG5cdGdyaWRUeXBlID0gJ2hvdXInLFxuXHRldmVudHMsXG59OiBHZXRQb3NpdGlvbmVkRGF5RXZlbnRzUGFyYW1zKTogUG9zaXRpb25lZEV2ZW50W10gPT4ge1xuXHQvLyBGaWx0ZXIgb3V0IGFsbC1kYXkgZXZlbnRzIGFuZCBzb3J0IGJ5IHN0YXJ0IHRpbWVcblx0Y29uc3Qgc29ydGVkRXZlbnRzID0gZXZlbnRzXG5cdFx0LmZpbHRlcigoZSkgPT4gIWUuYWxsRGF5KVxuXHRcdC50b1NvcnRlZCgoYSwgYikgPT4gYS5zdGFydC5kaWZmKGIuc3RhcnQpKVxuXG5cdGlmIChzb3J0ZWRFdmVudHMubGVuZ3RoID09PSAwKSB7XG5cdFx0cmV0dXJuIFtdXG5cdH1cblxuXHQvLyBEZXRlcm1pbmUgZ3JpZCBib3VuZGFyaWVzIGFuZCBtZXRyaWNzXG5cdC8vIFVzZSBleHBsaWNpdCBzdGFydE9mIHRvIGVuc3VyZSB3ZSBhcmUgYW5jaG9yZWQgdG8gdGhlIGdyaWQgdW5pdCBib3VuZGFyaWVzXG5cdC8vIFRoaXMgcHJldmVudHMgb2Zmc2V0cyBpZiB0aGUgZ3JpZCBkYXlzIGFyZSBub3Qgbm9ybWFsaXplZFxuXHRjb25zdCBncmlkU3RhcnQgPSBkYXlzLmF0KDApIHx8IGRheWpzKClcblx0Y29uc3QgdG90YWxVbml0cyA9IGRheXMubGVuZ3RoXG5cdGNvbnN0IGlzRGlzY3JldGUgPSBncmlkVHlwZSA9PT0gJ2RheSdcblxuXHQvLyBTdGVwIDE6IEdyb3VwIGV2ZW50cyBpbnRvIGNsdXN0ZXJzIG9mIG92ZXJsYXBwaW5nIGV2ZW50c1xuXHRjb25zdCBjbHVzdGVyczogQ2FsZW5kYXJFdmVudFtdW10gPSBbXVxuXHRsZXQgY3VycmVudENsdXN0ZXI6IENhbGVuZGFyRXZlbnRbXSA9IFtdXG5cdGxldCBsYXN0RXZlbnRFbmQ6IGRheWpzLkRheWpzIHwgbnVsbCA9IG51bGxcblx0Zm9yIChjb25zdCBldmVudCBvZiBzb3J0ZWRFdmVudHMpIHtcblx0XHRpZiAobGFzdEV2ZW50RW5kICYmIGV2ZW50LnN0YXJ0LmlzU2FtZU9yQWZ0ZXIobGFzdEV2ZW50RW5kKSkge1xuXHRcdFx0aWYgKGN1cnJlbnRDbHVzdGVyLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0Y2x1c3RlcnMucHVzaChjdXJyZW50Q2x1c3Rlcilcblx0XHRcdH1cblx0XHRcdGN1cnJlbnRDbHVzdGVyID0gW11cblx0XHR9XG5cdFx0Y3VycmVudENsdXN0ZXIucHVzaChldmVudClcblx0XHRsYXN0RXZlbnRFbmQgPSBsYXN0RXZlbnRFbmQgPyBkYXlqcy5tYXgobGFzdEV2ZW50RW5kLCBldmVudC5lbmQpIDogZXZlbnQuZW5kXG5cdH1cblx0aWYgKGN1cnJlbnRDbHVzdGVyLmxlbmd0aCA+IDApIHtcblx0XHRjbHVzdGVycy5wdXNoKGN1cnJlbnRDbHVzdGVyKVxuXHR9XG5cblx0Ly8gU3RlcCAyOiBGb3IgZWFjaCBjbHVzdGVyLCB1c2UgYSBtb3JlIGludGVsbGlnZW50IGNvbHVtbiBhc3NpZ25tZW50XG5cdGNvbnN0IHByb2Nlc3NlZEV2ZW50czogUG9zaXRpb25lZEV2ZW50W10gPSBbXVxuXHRmb3IgKGNvbnN0IGNsdXN0ZXIgb2YgY2x1c3RlcnMpIHtcblx0XHRpZiAoY2x1c3Rlci5sZW5ndGggPT09IDEpIHtcblx0XHRcdC8vIFNpbmdsZSBldmVudCB0YWtlcyBmdWxsIHdpZHRoXG5cdFx0XHRjb25zdCBldmVudCA9IGNsdXN0ZXJbMF1cblxuXHRcdFx0bGV0IHN0YXJ0VGltZSA9IGV2ZW50LnN0YXJ0LmRpZmYoZ3JpZFN0YXJ0LCBncmlkVHlwZSwgdHJ1ZSlcblx0XHRcdGxldCBlbmRUaW1lID0gZXZlbnQuZW5kLmRpZmYoZ3JpZFN0YXJ0LCBncmlkVHlwZSwgdHJ1ZSlcblxuXHRcdFx0aWYgKGlzRGlzY3JldGUpIHtcblx0XHRcdFx0c3RhcnRUaW1lID0gTWF0aC5mbG9vcihzdGFydFRpbWUpXG5cdFx0XHRcdGVuZFRpbWUgPSBNYXRoLmNlaWwoZW5kVGltZSlcblx0XHRcdFx0Ly8gRW5zdXJlIGF0IGxlYXN0IDEgdW5pdCBkdXJhdGlvbiBmb3IgZGlzY3JldGUgZXZlbnRzXG5cdFx0XHRcdGlmIChlbmRUaW1lIDw9IHN0YXJ0VGltZSkge1xuXHRcdFx0XHRcdGVuZFRpbWUgPSBzdGFydFRpbWUgKyAxXG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gQ2xhbXAgdG8gZ3JpZCBib3VuZGFyaWVzXG5cdFx0XHRpZiAoc3RhcnRUaW1lIDwgMCkgc3RhcnRUaW1lID0gMFxuXHRcdFx0aWYgKGVuZFRpbWUgPiB0b3RhbFVuaXRzKSBlbmRUaW1lID0gdG90YWxVbml0c1xuXG5cdFx0XHRjb25zdCB0b3RhbER1cmF0aW9uID0gTWF0aC5tYXgoMCwgZW5kVGltZSAtIHN0YXJ0VGltZSlcblxuXHRcdFx0Ly8gU2tpcCBldmVudHMgdGhhdCBhcmUgY29tcGxldGVseSBvdXRzaWRlIHRoZSBncmlkXG5cdFx0XHRpZiAodG90YWxEdXJhdGlvbiA9PT0gMCkgY29udGludWVcblxuXHRcdFx0Y29uc3QgdG9wID0gKHN0YXJ0VGltZSAvIHRvdGFsVW5pdHMpICogMTAwXG5cdFx0XHRjb25zdCBoZWlnaHQgPSAodG90YWxEdXJhdGlvbiAvIHRvdGFsVW5pdHMpICogMTAwXG5cblx0XHRcdHByb2Nlc3NlZEV2ZW50cy5wdXNoKHsgLi4uZXZlbnQsIGxlZnQ6IDAsIHdpZHRoOiAxMDAsIHRvcCwgaGVpZ2h0IH0pXG5cdFx0XHRjb250aW51ZVxuXHRcdH1cblxuXHRcdC8vIE11bHRpcGxlIGV2ZW50cyAtIHVzZSBsYXllcmVkIHBvc2l0aW9uaW5nIGFwcHJvYWNoXG5cdFx0Ly8gU29ydCBieSBkdXJhdGlvbiAobG9uZ2VzdCBmaXJzdCksIHRoZW4gYnkgc3RhcnQgdGltZVxuXHRcdGNvbnN0IHNvcnRlZENsdXN0ZXIgPSBbLi4uY2x1c3Rlcl0uc29ydCgoYSwgYikgPT4ge1xuXHRcdFx0Y29uc3QgYUR1cmF0aW9uID0gYS5lbmQuZGlmZihhLnN0YXJ0LCAnbWludXRlJylcblx0XHRcdGNvbnN0IGJEdXJhdGlvbiA9IGIuZW5kLmRpZmYoYi5zdGFydCwgJ21pbnV0ZScpXG5cblx0XHRcdC8vIExvbmdlciBldmVudHMgZmlyc3Rcblx0XHRcdGlmIChhRHVyYXRpb24gIT09IGJEdXJhdGlvbikge1xuXHRcdFx0XHRyZXR1cm4gYkR1cmF0aW9uIC0gYUR1cmF0aW9uXG5cdFx0XHR9XG5cblx0XHRcdC8vIElmIHNhbWUgZHVyYXRpb24sIGVhcmxpZXIgc3RhcnQgdGltZSBmaXJzdFxuXHRcdFx0cmV0dXJuIGEuc3RhcnQuZGlmZihiLnN0YXJ0KVxuXHRcdH0pXG5cblx0XHQvLyBQcm9jZXNzIGV2ZW50cyB3aXRoIGxheWVyZWQgcG9zaXRpb25pbmdcblx0XHRjb25zdCB0b3RhbEV2ZW50cyA9IHNvcnRlZENsdXN0ZXIubGVuZ3RoXG5cblx0XHQvLyBDYWxjdWxhdGUgZHluYW1pYyBvZmZzZXQgYmFzZWQgb24gbnVtYmVyIG9mIG92ZXJsYXBwaW5nIGV2ZW50c1xuXHRcdC8vIEZld2VyIGV2ZW50cyA9IGxhcmdlciBpbmRpdmlkdWFsIG9mZnNldHMsIG1vcmUgZXZlbnRzID0gc21hbGxlciBvZmZzZXRzXG5cdFx0bGV0IG1heE9mZnNldDogbnVtYmVyXG5cdFx0aWYgKHRvdGFsRXZlbnRzID09PSAyKSB7XG5cdFx0XHRtYXhPZmZzZXQgPSAyNSAvLyAyNSUgb2Zmc2V0IGZvciAyIGV2ZW50c1xuXHRcdH0gZWxzZSBpZiAodG90YWxFdmVudHMgPT09IDMpIHtcblx0XHRcdG1heE9mZnNldCA9IDUwIC8vIDUwJSB0b3RhbCBmb3IgMyBldmVudHMgKDI1JSBlYWNoKVxuXHRcdH0gZWxzZSBpZiAodG90YWxFdmVudHMgPT09IDQpIHtcblx0XHRcdG1heE9mZnNldCA9IDYwIC8vIDYwJSB0b3RhbCBmb3IgNCBldmVudHMgKDIwJSBlYWNoKVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRtYXhPZmZzZXQgPSA3MCAvLyA3MCUgdG90YWwgZm9yIDUrIGV2ZW50c1xuXHRcdH1cblxuXHRcdGNvbnN0IG9mZnNldFBlckV2ZW50ID0gdG90YWxFdmVudHMgPiAxID8gbWF4T2Zmc2V0IC8gKHRvdGFsRXZlbnRzIC0gMSkgOiAwXG5cblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHNvcnRlZENsdXN0ZXIubGVuZ3RoOyBpKyspIHtcblx0XHRcdGNvbnN0IGV2ZW50ID0gc29ydGVkQ2x1c3RlcltpXVxuXG5cdFx0XHRsZXQgc3RhcnRUaW1lID0gZXZlbnQuc3RhcnQuZGlmZihncmlkU3RhcnQsIGdyaWRUeXBlLCB0cnVlKVxuXHRcdFx0bGV0IGVuZFRpbWUgPSBldmVudC5lbmQuZGlmZihncmlkU3RhcnQsIGdyaWRUeXBlLCB0cnVlKVxuXG5cdFx0XHRpZiAoaXNEaXNjcmV0ZSkge1xuXHRcdFx0XHRzdGFydFRpbWUgPSBNYXRoLmZsb29yKHN0YXJ0VGltZSlcblx0XHRcdFx0ZW5kVGltZSA9IE1hdGguY2VpbChlbmRUaW1lKVxuXHRcdFx0XHRpZiAoZW5kVGltZSA8PSBzdGFydFRpbWUpIHtcblx0XHRcdFx0XHRlbmRUaW1lID0gc3RhcnRUaW1lICsgMVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIENsYW1wIHRvIGdyaWQgYm91bmRhcmllc1xuXHRcdFx0aWYgKHN0YXJ0VGltZSA8IDApIHN0YXJ0VGltZSA9IDBcblx0XHRcdGlmIChlbmRUaW1lID4gdG90YWxVbml0cykgZW5kVGltZSA9IHRvdGFsVW5pdHNcblxuXHRcdFx0Y29uc3QgdG90YWxEdXJhdGlvbiA9IE1hdGgubWF4KDAsIGVuZFRpbWUgLSBzdGFydFRpbWUpXG5cblx0XHRcdGlmICh0b3RhbER1cmF0aW9uID09PSAwKSBjb250aW51ZVxuXG5cdFx0XHRjb25zdCB0b3AgPSAoc3RhcnRUaW1lIC8gdG90YWxVbml0cykgKiAxMDBcblx0XHRcdGNvbnN0IGhlaWdodCA9ICh0b3RhbER1cmF0aW9uIC8gdG90YWxVbml0cykgKiAxMDBcblxuXHRcdFx0Ly8gQ2FsY3VsYXRlIHBvc2l0aW9uaW5nIGJhc2VkIG9uIGxheWVyIGFuZCB0b3RhbCBldmVudHNcblx0XHRcdGxldCBsZWZ0OiBudW1iZXJcblx0XHRcdGxldCB3aWR0aDogbnVtYmVyXG5cdFx0XHRsZXQgekluZGV4OiBudW1iZXJcblxuXHRcdFx0aWYgKGkgPT09IDApIHtcblx0XHRcdFx0Ly8gRmlyc3QgZXZlbnQgKGxvbmdlc3QpIHRha2VzIGZ1bGwgd2lkdGggYXQgYm90dG9tXG5cdFx0XHRcdGxlZnQgPSAwXG5cdFx0XHRcdHdpZHRoID0gMTAwXG5cdFx0XHRcdHpJbmRleCA9IDFcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIFN1YnNlcXVlbnQgZXZlbnRzIGFyZSBvZmZzZXQgZHluYW1pY2FsbHkgYmFzZWQgb24gdG90YWwgZXZlbnQgY291bnRcblx0XHRcdFx0bGVmdCA9IG9mZnNldFBlckV2ZW50ICogaVxuXHRcdFx0XHR3aWR0aCA9IDEwMCAtIGxlZnQgLy8gUmVtYWluaW5nIHdpZHRoXG5cdFx0XHRcdHpJbmRleCA9IGkgKyAxIC8vIEhpZ2hlciB6LWluZGV4IGZvciBldmVudHMgb24gdG9wXG5cdFx0XHR9XG5cblx0XHRcdHByb2Nlc3NlZEV2ZW50cy5wdXNoKHtcblx0XHRcdFx0Li4uZXZlbnQsXG5cdFx0XHRcdGxlZnQsXG5cdFx0XHRcdHdpZHRoLFxuXHRcdFx0XHR0b3AsXG5cdFx0XHRcdGhlaWdodCxcblx0XHRcdFx0ekluZGV4LFxuXHRcdFx0fSlcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gcHJvY2Vzc2VkRXZlbnRzXG59XG4iLAogICAgImltcG9ydCB7IG1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcblxuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuaW50ZXJmYWNlIFZlcnRpY2FsR3JpZEhlYWRlckNvbnRhaW5lclByb3BzIHtcblx0Y2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGVcblx0Y2xhc3Nlcz86IHsgaGVhZGVyPzogc3RyaW5nOyBhbGxEYXk/OiBzdHJpbmcgfVxuXHRhbGxEYXlSb3c/OiBSZWFjdC5SZWFjdE5vZGVcbn1cblxuY29uc3QgTm9NZW1vVmVydGljYWxHcmlkSGVhZGVyQ29udGFpbmVyOiBSZWFjdC5GQzxcblx0VmVydGljYWxHcmlkSGVhZGVyQ29udGFpbmVyUHJvcHNcbj4gPSAoeyBjaGlsZHJlbiwgY2xhc3NlcywgYWxsRGF5Um93IH0pID0+IHtcblx0Y29uc3QgeyBzdGlja3lWaWV3SGVhZGVyLCB2aWV3SGVhZGVyQ2xhc3NOYW1lIH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dChcblx0XHQoc3RhdGUpID0+ICh7XG5cdFx0XHRzdGlja3lWaWV3SGVhZGVyOiBzdGF0ZS5zdGlja3lWaWV3SGVhZGVyLFxuXHRcdFx0dmlld0hlYWRlckNsYXNzTmFtZTogc3RhdGUudmlld0hlYWRlckNsYXNzTmFtZSxcblx0XHR9KVxuXHQpXG5cblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRzdGlja3lWaWV3SGVhZGVyICYmICdzdGlja3kgdG9wLTAgei0yMSBiZy1iYWNrZ3JvdW5kJywgLy8gWi1pbmRleCBhYm92ZSB0aGUgbGVmdCBzdGlja3kgcmVzb3VyY2UgY29sdW1uXG5cdFx0XHRcdHZpZXdIZWFkZXJDbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0PlxuXHRcdFx0PGRpdlxuXHRcdFx0XHRjbGFzc05hbWU9e2NuKCdoLTEyIGJvcmRlci1iIHctZml0JywgY2xhc3Nlcz8uaGVhZGVyKX1cblx0XHRcdFx0ZGF0YS10ZXN0aWQ9XCJ2ZXJ0aWNhbC1ncmlkLWhlYWRlclwiXG5cdFx0XHQ+XG5cdFx0XHRcdHtjaGlsZHJlbn1cblx0XHRcdDwvZGl2PlxuXHRcdFx0ey8qIEFsbC1kYXkgcm93ICovfVxuXHRcdFx0e2FsbERheVJvdyAmJiAoXG5cdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0J2ZsZXggdy1mdWxsIGJvcmRlci1iIG1pbi1oLTEyIGgtZnVsbCcsXG5cdFx0XHRcdFx0XHRjbGFzc2VzPy5hbGxEYXlcblx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdGRhdGEtdGVzdGlkPVwidmVydGljYWwtZ3JpZC1hbGwtZGF5XCJcblx0XHRcdFx0PlxuXHRcdFx0XHRcdHthbGxEYXlSb3d9XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0KX1cblx0XHQ8L2Rpdj5cblx0KVxufVxuXG5leHBvcnQgY29uc3QgVmVydGljYWxHcmlkSGVhZGVyQ29udGFpbmVyID0gbWVtbyhcblx0Tm9NZW1vVmVydGljYWxHcmlkSGVhZGVyQ29udGFpbmVyXG4pXG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgU2Nyb2xsQXJlYSwgU2Nyb2xsQmFyIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL3Njcm9sbC1hcmVhJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IFZlcnRpY2FsR3JpZENvbCwgdHlwZSBWZXJ0aWNhbEdyaWRDb2xQcm9wcyB9IGZyb20gJy4vdmVydGljYWwtZ3JpZC1jb2wnXG5pbXBvcnQgeyBWZXJ0aWNhbEdyaWRIZWFkZXJDb250YWluZXIgfSBmcm9tICcuL3ZlcnRpY2FsLWdyaWQtaGVhZGVyLWNvbnRhaW5lcidcblxuY29uc3QgQk9EWV9IRUlHSFQgPSAnaC1bY2FsYygxMDAlLTNyZW0pXSdcblxuaW50ZXJmYWNlIFZlcnRpY2FsR3JpZFByb3BzIHtcblx0Y29sdW1uczogVmVydGljYWxHcmlkQ29sUHJvcHNbXVxuXHRjaGlsZHJlbj86IFJlYWN0LlJlYWN0Tm9kZVxuXHRncmlkVHlwZT86ICdkYXknIHwgJ2hvdXInXG5cdHZhcmlhbnQ/OiAncmVndWxhcicgfCAncmVzb3VyY2UnXG5cdGNsYXNzZXM/OiB7IGhlYWRlcj86IHN0cmluZzsgYm9keT86IHN0cmluZzsgYWxsRGF5Pzogc3RyaW5nIH1cblx0YWxsRGF5Um93PzogUmVhY3QuUmVhY3ROb2RlXG5cdC8qKlxuXHQgKiBPcHRpb25hbCBhcnJheSBvZiBtaW51dGUgc2xvdHMgYnkgd2hpY2ggdGhlIGhvdXIgaXMgZGl2aWRlZFxuXHQgKiBlLmcuLCBbMCwgMTUsIDMwLCA0NV0gZm9yIHF1YXJ0ZXItaG91ciBzbG90c1xuXHQgKi9cblx0Y2VsbFNsb3RzPzogbnVtYmVyW11cbn1cblxuZXhwb3J0IGNvbnN0IFZlcnRpY2FsR3JpZDogUmVhY3QuRkM8VmVydGljYWxHcmlkUHJvcHM+ID0gKHtcblx0Y29sdW1ucyxcblx0Y2hpbGRyZW4sXG5cdGdyaWRUeXBlID0gJ2RheScsXG5cdHZhcmlhbnQgPSAncmVzb3VyY2UnLFxuXHRjbGFzc2VzLFxuXHRhbGxEYXlSb3csXG5cdGNlbGxTbG90cyxcbn0pID0+IHtcblx0Y29uc3QgaXNSZXNvdXJjZUNhbGVuZGFyID0gdmFyaWFudCA9PT0gJ3Jlc291cmNlJ1xuXHRjb25zdCBpc1JlZ3VsYXJDYWxlbmRhciA9ICFpc1Jlc291cmNlQ2FsZW5kYXJcblxuXHRjb25zdCBoZWFkZXIgPSBjaGlsZHJlbiAmJiAoXG5cdFx0PFZlcnRpY2FsR3JpZEhlYWRlckNvbnRhaW5lclxuXHRcdFx0YWxsRGF5Um93PXthbGxEYXlSb3d9XG5cdFx0XHRjbGFzc2VzPXt7IGhlYWRlcjogY2xhc3Nlcz8uaGVhZGVyLCBhbGxEYXk6IGNsYXNzZXM/LmFsbERheSB9fVxuXHRcdD5cblx0XHRcdHtjaGlsZHJlbn1cblx0XHQ8L1ZlcnRpY2FsR3JpZEhlYWRlckNvbnRhaW5lcj5cblx0KVxuXG5cdHJldHVybiAoXG5cdFx0PGRpdiBjbGFzc05hbWU9XCJoLWZ1bGxcIiBkYXRhLXRlc3RpZD1cInZlcnRpY2FsLWdyaWQtY29udGFpbmVyXCI+XG5cdFx0XHR7LyogaGVhZGVyIHJvdyAqL31cblx0XHRcdHtpc1JlZ3VsYXJDYWxlbmRhciAmJiBoZWFkZXJ9XG5cblx0XHRcdDxTY3JvbGxBcmVhXG5cdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0J2gtZnVsbCcsXG5cdFx0XHRcdFx0aXNSZWd1bGFyQ2FsZW5kYXIgJiYgJ292ZXJmbG93LWF1dG8nLFxuXHRcdFx0XHRcdGlzUmVndWxhckNhbGVuZGFyICYmIEJPRFlfSEVJR0hUIC8vIHNjcm9sbCBhcmVhIGJlY29tZXMgYm9keSBpbiByZWd1bGFyIGNhbGVuZGFyXG5cdFx0XHRcdCl9XG5cdFx0XHRcdGRhdGEtdGVzdGlkPVwidmVydGljYWwtZ3JpZC1zY3JvbGxcIlxuXHRcdFx0XHR2aWV3UG9ydFByb3BzPXt7IGNsYXNzTmFtZTogJyo6ZmxleCEgKjpmbGV4LWNvbCEgKjptaW4taC1mdWxsJyB9fVxuXHRcdFx0PlxuXHRcdFx0XHR7LyogaGVhZGVyIHJvdyBmb3IgcmVzb3VyY2UgY2FsZW5kYXIgaW5zaWRlIHNjcm9sbCBhcmVhICovfVxuXHRcdFx0XHR7aXNSZXNvdXJjZUNhbGVuZGFyICYmIGhlYWRlcn1cblx0XHRcdFx0ey8qIENhbGVuZGFyIGFyZWEgd2l0aCBzY3JvbGwgKi99XG5cdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0J2ZsZXggZmxleC0xIHctZml0Jyxcblx0XHRcdFx0XHRcdGlzUmVzb3VyY2VDYWxlbmRhciAmJiBCT0RZX0hFSUdIVCxcblx0XHRcdFx0XHRcdGNsYXNzZXM/LmJvZHlcblx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdGRhdGEtdGVzdGlkPVwidmVydGljYWwtZ3JpZC1ib2R5XCJcblx0XHRcdFx0PlxuXHRcdFx0XHRcdHsvKiBEYXkgY29sdW1ucyB3aXRoIHRpbWUgc2xvdHMgKi99XG5cdFx0XHRcdFx0e2NvbHVtbnMubWFwKChjb2x1bW4sIGluZGV4KSA9PiAoXG5cdFx0XHRcdFx0XHQ8VmVydGljYWxHcmlkQ29sXG5cdFx0XHRcdFx0XHRcdGtleT17YCR7Y29sdW1uLmlkfS0ke2luZGV4fWB9XG5cdFx0XHRcdFx0XHRcdHsuLi5jb2x1bW59XG5cdFx0XHRcdFx0XHRcdGNlbGxTbG90cz17Y2VsbFNsb3RzfVxuXHRcdFx0XHRcdFx0XHRncmlkVHlwZT17Z3JpZFR5cGV9XG5cdFx0XHRcdFx0XHRcdGlzTGFzdENvbHVtbj17aW5kZXggPT09IGNvbHVtbnMubGVuZ3RoIC0gMX1cblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0KSl9XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8U2Nyb2xsQmFyIGNsYXNzTmFtZT1cInotMzBcIiAvPiB7LyogdmVydGljYWwgc2Nyb2xsYmFyICovfVxuXHRcdFx0XHQ8U2Nyb2xsQmFyIGNsYXNzTmFtZT1cInotMzBcIiBvcmllbnRhdGlvbj1cImhvcml6b250YWxcIiAvPnsnICd9XG5cdFx0XHRcdHsvKiBob3Jpem9udGFsIHNjcm9sbGJhciAqL31cblx0XHRcdDwvU2Nyb2xsQXJlYT5cblx0XHQ8L2Rpdj5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSB7IEJ1c2luZXNzSG91cnMgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgdHlwZSBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGdldERheUhvdXJzIH0gZnJvbSAnQC9saWIvdXRpbHMvZGF0ZS11dGlscydcbmltcG9ydCB7IGNhbGN1bGF0ZUJ1c2luZXNzSG91cnNSYW5nZSB9IGZyb20gJy4vYnVzaW5lc3MtaG91cnMnXG5cbmludGVyZmFjZSBHZXRWaWV3SG91cnNPcHRpb25zIHtcblx0cmVmZXJlbmNlRGF0ZTogZGF5anMuRGF5anNcblx0YnVzaW5lc3NIb3Vycz86IEJ1c2luZXNzSG91cnMgfCBCdXNpbmVzc0hvdXJzW11cblx0aGlkZU5vbkJ1c2luZXNzSG91cnM/OiBib29sZWFuXG5cdC8qKlxuXHQgKiBGb3Igdmlld3Mgd2l0aCBtdWx0aXBsZSBkYXlzIChsaWtlIFdlZWtWaWV3KSwgd2UgbWlnaHQgd2FudCB0byBzaG93XG5cdCAqIHRoZSB1bmlvbiBvZiBhbGwgYnVzaW5lc3MgaG91cnMgYWNyb3NzIHRob3NlIGRheXMuXG5cdCAqL1xuXHRhbGxEYXRlcz86IGRheWpzLkRheWpzW11cblx0LyoqXG5cdCAqIE9wdGlvbmFsIGFkZGl0aW9uYWwgYnVzaW5lc3MgaG91cnMgY29uZmlndXJhdGlvbnMgKGUuZy4sIGZyb20gcmVzb3VyY2VzKS5cblx0ICogVGhlc2Ugd2lsbCBiZSBtZXJnZWQgd2l0aCB0aGUgZ2xvYmFsIGJ1c2luZXNzSG91cnMgd2hlbiBjYWxjdWxhdGluZyB0aGUgdmlzaWJsZSByYW5nZS5cblx0ICovXG5cdHJlc291cmNlQnVzaW5lc3NIb3Vycz86IChCdXNpbmVzc0hvdXJzIHwgQnVzaW5lc3NIb3Vyc1tdKVtdXG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSBsaXN0IG9mIGhvdXJzIHRvIGRpc3BsYXkgaW4gdGhlIGNhbGVuZGFyIHZpZXcuXG4gKiBJZiBoaWRlTm9uQnVzaW5lc3NIb3VycyBpcyB0cnVlLCBpdCBmaWx0ZXJzIHRoZSBob3VycyBiYXNlZCBvbiBidXNpbmVzc0hvdXJzIGNvbmZpZ3VyYXRpb24uXG4gKiBGb3IgbXVsdGlwbGUgZGF0ZXMsIGl0IHRha2VzIHRoZSBlYXJsaWVzdCBzdGFydCBhbmQgbGF0ZXN0IGVuZCBhY3Jvc3MgYWxsIGRhdGVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Vmlld0hvdXJzKHtcblx0cmVmZXJlbmNlRGF0ZSxcblx0YnVzaW5lc3NIb3Vycyxcblx0aGlkZU5vbkJ1c2luZXNzSG91cnMsXG5cdGFsbERhdGVzID0gW3JlZmVyZW5jZURhdGVdLFxuXHRyZXNvdXJjZUJ1c2luZXNzSG91cnMgPSBbXSxcbn06IEdldFZpZXdIb3Vyc09wdGlvbnMpOiBkYXlqcy5EYXlqc1tdIHtcblx0Y29uc3QgYWxsSG91cnMgPSBnZXREYXlIb3Vycyh7IHJlZmVyZW5jZURhdGUgfSlcblxuXHRpZiAoXG5cdFx0IWhpZGVOb25CdXNpbmVzc0hvdXJzIHx8XG5cdFx0KCFidXNpbmVzc0hvdXJzICYmIHJlc291cmNlQnVzaW5lc3NIb3Vycy5sZW5ndGggPT09IDApXG5cdCkge1xuXHRcdHJldHVybiBhbGxIb3Vyc1xuXHR9XG5cblx0Y29uc3QgeyBtaW5TdGFydCwgbWF4RW5kLCBoYXNCdXNpbmVzc0hvdXJzIH0gPSBjYWxjdWxhdGVCdXNpbmVzc0hvdXJzUmFuZ2Uoe1xuXHRcdGFsbERhdGVzLFxuXHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0cmVzb3VyY2VCdXNpbmVzc0hvdXJzLFxuXHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzLFxuXHR9KVxuXG5cdGlmICghaGFzQnVzaW5lc3NIb3Vycykge1xuXHRcdHJldHVybiBhbGxIb3Vyc1xuXHR9XG5cblx0Ly8gUmV0dXJuIGhvdXJzIHdpdGhpbiB0aGUgcmFuZ2UgW21pblN0YXJ0LCBtYXhFbmQpXG5cdHJldHVybiBhbGxIb3Vycy5maWx0ZXIoKGgpID0+IHtcblx0XHRjb25zdCBob3VyID0gaC5ob3VyKClcblx0XHRyZXR1cm4gaG91ciA+PSBtaW5TdGFydCAmJiBob3VyIDwgbWF4RW5kXG5cdH0pXG59XG4iLAogICAgImltcG9ydCB7IEFsbERheVJvdyB9IGZyb20gJ0AvY29tcG9uZW50cy9hbGwtZGF5LXJvdy9hbGwtZGF5LXJvdydcbmltcG9ydCB7IEFuaW1hdGVkU2VjdGlvbiB9IGZyb20gJ0AvY29tcG9uZW50cy9hbmltYXRpb25zL2FuaW1hdGVkLXNlY3Rpb24nXG5pbXBvcnQgeyBWZXJ0aWNhbEdyaWQgfSBmcm9tICdAL2NvbXBvbmVudHMvdmVydGljYWwtZ3JpZC92ZXJ0aWNhbC1ncmlkJ1xuaW1wb3J0IHsgdXNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5pbXBvcnQgeyBnZXRWaWV3SG91cnMgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL3V0aWxzL3ZpZXctaG91cnMnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5jb25zdCBEYXlWaWV3ID0gKCkgPT4ge1xuXHRjb25zdCB7XG5cdFx0Y3VycmVudERhdGUsXG5cdFx0Y3VycmVudExvY2FsZSxcblx0XHR0aW1lRm9ybWF0LFxuXHRcdHQsXG5cdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRoaWRlTm9uQnVzaW5lc3NIb3Vycyxcblx0fSA9IHVzZUNhbGVuZGFyQ29udGV4dCgpXG5cdGNvbnN0IGlzVG9kYXkgPSBjdXJyZW50RGF0ZS5pc1NhbWUoZGF5anMoKSwgJ2RheScpXG5cdGNvbnN0IGhvdXJzID0gZ2V0Vmlld0hvdXJzKHtcblx0XHRyZWZlcmVuY2VEYXRlOiBjdXJyZW50RGF0ZSxcblx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzLFxuXHRcdGFsbERhdGVzOiBbY3VycmVudERhdGVdLFxuXHR9KVxuXG5cdGNvbnN0IGZpcnN0Q29sID0ge1xuXHRcdGlkOiAndGltZS1jb2wnLFxuXHRcdGRheTogdW5kZWZpbmVkLFxuXHRcdGRheXM6IGhvdXJzLFxuXHRcdGNsYXNzTmFtZTpcblx0XHRcdCdzaHJpbmstMCB3LTE2IG1pbi13LTE2IG1heC13LTE2IHN0aWNreSBsZWZ0LTAgYmctYmFja2dyb3VuZCB6LTIwJyxcblx0XHRncmlkVHlwZTogJ2hvdXInIGFzIGNvbnN0LFxuXHRcdG5vRXZlbnRzOiB0cnVlLFxuXHRcdHJlbmRlckNlbGw6IChkYXRlOiBkYXlqcy5EYXlqcykgPT4gKFxuXHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LW11dGVkLWZvcmVncm91bmQgcC0yIHRleHQtcmlnaHQgdGV4dC1bMTBweF0gc206dGV4dC14cyBmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlclwiPlxuXHRcdFx0XHR7SW50bC5EYXRlVGltZUZvcm1hdChjdXJyZW50TG9jYWxlLCB7XG5cdFx0XHRcdFx0aG91cjogJ251bWVyaWMnLFxuXHRcdFx0XHRcdGhvdXIxMjogdGltZUZvcm1hdCA9PT0gJzEyLWhvdXInLFxuXHRcdFx0XHR9KS5mb3JtYXQoZGF0ZS50b0RhdGUoKSl9XG5cdFx0XHQ8L2Rpdj5cblx0XHQpLFxuXHR9XG5cblx0Y29uc3QgY29sdW1ucyA9IHtcblx0XHRpZDogYGRheS1jb2wtJHtjdXJyZW50RGF0ZS5mb3JtYXQoJ1lZWVktTU0tREQnKX1gLFxuXHRcdGRheTogY3VycmVudERhdGUsXG5cdFx0ZGF5czogaG91cnMsXG5cdFx0Y2xhc3NOYW1lOiAndy1bY2FsYygxMDAlLTRyZW0pXSBmbGV4LTEnLFxuXHRcdGdyaWRUeXBlOiAnaG91cicgYXMgY29uc3QsXG5cdH1cblxuXHRyZXR1cm4gKFxuXHRcdDxWZXJ0aWNhbEdyaWRcblx0XHRcdGFsbERheVJvdz17PEFsbERheVJvdyBkYXlzPXtbY3VycmVudERhdGVdfSAvPn1cblx0XHRcdGNlbGxTbG90cz17WzAsIDE1LCAzMCwgNDVdfVxuXHRcdFx0Y2xhc3Nlcz17eyBoZWFkZXI6ICd3LWZ1bGwnLCBib2R5OiAndy1mdWxsJywgYWxsRGF5OiAndy1mdWxsJyB9fVxuXHRcdFx0Y29sdW1ucz17W2ZpcnN0Q29sLCBjb2x1bW5zXX1cblx0XHRcdGdyaWRUeXBlPVwiaG91clwiXG5cdFx0XHR2YXJpYW50PVwicmVndWxhclwiXG5cdFx0PlxuXHRcdFx0ey8qIEhlYWRlciAqL31cblx0XHRcdDxkaXZcblx0XHRcdFx0Y2xhc3NOYW1lPXsnZmxleCBoLWZ1bGwgZmxleC0xIGp1c3RpZnktY2VudGVyIGl0ZW1zLWNlbnRlcid9XG5cdFx0XHRcdGRhdGEtdGVzdGlkPVwiZGF5LXZpZXctaGVhZGVyXCJcblx0XHRcdD5cblx0XHRcdFx0PEFuaW1hdGVkU2VjdGlvblxuXHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHQnZmxleCBqdXN0aWZ5LWNlbnRlciBpdGVtcy1jZW50ZXIgdGV4dC1jZW50ZXIgdGV4dC1iYXNlIGZvbnQtc2VtaWJvbGQgc206dGV4dC14bCcsXG5cdFx0XHRcdFx0XHRpc1RvZGF5ICYmICd0ZXh0LXByaW1hcnknXG5cdFx0XHRcdFx0KX1cblx0XHRcdFx0XHR0cmFuc2l0aW9uS2V5PXtjdXJyZW50RGF0ZS5mb3JtYXQoJ1lZWVktTU0tREQnKX1cblx0XHRcdFx0PlxuXHRcdFx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cInhzOmlubGluZSBoaWRkZW5cIj5cblx0XHRcdFx0XHRcdHtjdXJyZW50RGF0ZS5mb3JtYXQoJ2RkZGQsICcpfVxuXHRcdFx0XHRcdDwvc3Bhbj5cblx0XHRcdFx0XHR7Y3VycmVudERhdGUuZm9ybWF0KCdNTU1NIEQsIFlZWVknKX1cblx0XHRcdFx0XHR7aXNUb2RheSAmJiAoXG5cdFx0XHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJiZy1wcmltYXJ5IHRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIG1sLTIgcm91bmRlZC1mdWxsIHB4LTEgcHktMC41IHRleHQteHMgc206cHgtMiBzbTp0ZXh0LXNtXCI+XG5cdFx0XHRcdFx0XHRcdHt0KCd0b2RheScpfVxuXHRcdFx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0XHRcdCl9XG5cdFx0XHRcdDwvQW5pbWF0ZWRTZWN0aW9uPlxuXHRcdFx0PC9kaXY+XG5cdFx0PC9WZXJ0aWNhbEdyaWQ+XG5cdClcbn1cblxuZXhwb3J0IGRlZmF1bHQgRGF5Vmlld1xuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEhvcml6b250YWxHcmlkIH0gZnJvbSAnQC9jb21wb25lbnRzL2hvcml6b250YWwtZ3JpZC9ob3Jpem9udGFsLWdyaWQnXG5pbXBvcnQgeyB1c2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcbmltcG9ydCB7IGdldE1vbnRoV2Vla3MgfSBmcm9tICdAL2xpYi91dGlscy9kYXRlLXV0aWxzJ1xuaW1wb3J0IHsgTW9udGhIZWFkZXIgfSBmcm9tICcuL21vbnRoLWhlYWRlcidcbmltcG9ydCB0eXBlIHsgTW9udGhWaWV3UHJvcHMgfSBmcm9tICcuL3R5cGVzJ1xuXG5leHBvcnQgY29uc3QgTW9udGhWaWV3OiBSZWFjdC5GQzxNb250aFZpZXdQcm9wcz4gPSAoKSA9PiB7XG5cdGNvbnN0IHsgY3VycmVudERhdGUsIGZpcnN0RGF5T2ZXZWVrIH0gPSB1c2VDYWxlbmRhckNvbnRleHQoKVxuXG5cdGNvbnN0IHdlZWtzID0gdXNlTWVtbyhcblx0XHQoKSA9PiBnZXRNb250aFdlZWtzKGN1cnJlbnREYXRlLCBmaXJzdERheU9mV2VlayksXG5cdFx0W2N1cnJlbnREYXRlLCBmaXJzdERheU9mV2Vla11cblx0KVxuXG5cdGNvbnN0IHJvd3MgPSB3ZWVrcy5tYXAoKGRheXMsIHdlZWtJbmRleCkgPT4gKHtcblx0XHRpZDogYHdlZWstJHt3ZWVrSW5kZXh9YCxcblx0XHRjb2x1bW5zOiBkYXlzLm1hcCgoZGF5KSA9PiAoe1xuXHRcdFx0aWQ6IGBjb2wtJHtkYXkudG9JU09TdHJpbmcoKX1gLFxuXHRcdFx0ZGF5LFxuXHRcdFx0Y2xhc3NOYW1lOiAndy1hdXRvJyxcblx0XHRcdGdyaWRUeXBlOiAnZGF5JyBhcyBjb25zdCxcblx0XHR9KSksXG5cdFx0Y2xhc3NOYW1lOiAnZmxleC0xJyxcblx0XHRzaG93RGF5TnVtYmVyOiB0cnVlLFxuXHR9KSlcblxuXHRyZXR1cm4gKFxuXHRcdDxIb3Jpem9udGFsR3JpZFxuXHRcdFx0Y2xhc3Nlcz17eyBib2R5OiAndy1mdWxsJywgaGVhZGVyOiAndy1mdWxsJyB9fVxuXHRcdFx0cm93cz17cm93c31cblx0XHRcdHZhcmlhbnQ9XCJyZWd1bGFyXCJcblx0XHQ+XG5cdFx0XHQ8TW9udGhIZWFkZXIgY2xhc3NOYW1lPVwiaC0xMlwiIC8+XG5cdFx0PC9Ib3Jpem9udGFsR3JpZD5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgeyBtZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5pbnRlcmZhY2UgSG9yaXpvbnRhbEdyaWRIZWFkZXJDb250YWluZXJQcm9wcyB7XG5cdGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlXG5cdGNsYXNzTmFtZT86IHN0cmluZ1xufVxuXG5jb25zdCBOb01lbW9Ib3Jpem9udGFsR3JpZEhlYWRlckNvbnRhaW5lciA9ICh7XG5cdGNoaWxkcmVuLFxuXHRjbGFzc05hbWUsXG59OiBIb3Jpem9udGFsR3JpZEhlYWRlckNvbnRhaW5lclByb3BzKSA9PiB7XG5cdGNvbnN0IHsgc3RpY2t5Vmlld0hlYWRlciwgdmlld0hlYWRlckNsYXNzTmFtZSB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoXG5cdFx0KHN0YXRlKSA9PiAoe1xuXHRcdFx0c3RpY2t5Vmlld0hlYWRlcjogc3RhdGUuc3RpY2t5Vmlld0hlYWRlcixcblx0XHRcdHZpZXdIZWFkZXJDbGFzc05hbWU6IHN0YXRlLnZpZXdIZWFkZXJDbGFzc05hbWUsXG5cdFx0fSlcblx0KVxuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCdmbGV4IGgtMTIgdy1maXQnLFxuXHRcdFx0XHRzdGlja3lWaWV3SGVhZGVyICYmICdzdGlja3kgdG9wLTAgei0yMSBiZy1iYWNrZ3JvdW5kJyxcblx0XHRcdFx0Y2xhc3NOYW1lLFxuXHRcdFx0XHR2aWV3SGVhZGVyQ2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0ZGF0YS10ZXN0aWQ9XCJob3Jpem9udGFsLWdyaWQtaGVhZGVyXCJcblx0XHQ+XG5cdFx0XHR7Y2hpbGRyZW59XG5cdFx0PC9kaXY+XG5cdClcbn1cblxuZXhwb3J0IGNvbnN0IEhvcml6b250YWxHcmlkSGVhZGVyQ29udGFpbmVyID0gbWVtbyhcblx0Tm9NZW1vSG9yaXpvbnRhbEdyaWRIZWFkZXJDb250YWluZXJcbilcbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBTY3JvbGxBcmVhLCBTY3JvbGxCYXIgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvc2Nyb2xsLWFyZWEnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgSG9yaXpvbnRhbEdyaWRIZWFkZXJDb250YWluZXIgfSBmcm9tICcuL2hvcml6b250YWwtZ3JpZC1oZWFkZXItY29udGFpbmVyJ1xuaW1wb3J0IHtcblx0SG9yaXpvbnRhbEdyaWRSb3csXG5cdHR5cGUgSG9yaXpvbnRhbEdyaWRSb3dQcm9wcyxcbn0gZnJvbSAnLi9ob3Jpem9udGFsLWdyaWQtcm93J1xuXG5jb25zdCBCT0RZX0hFSUdIVCA9ICdoLVtjYWxjKDEwMCUtM3JlbSldJ1xuXG5pbnRlcmZhY2UgSG9yaXpvbnRhbEdyaWRQcm9wcyB7XG5cdHJvd3M6IEhvcml6b250YWxHcmlkUm93UHJvcHNbXVxuXHRjaGlsZHJlbj86IFJlYWN0LlJlYWN0Tm9kZVxuXHRjbGFzc2VzPzogeyBoZWFkZXI/OiBzdHJpbmc7IGJvZHk/OiBzdHJpbmcgfVxuXHRhbGxEYXk/OiBib29sZWFuXG5cdGdyaWRUeXBlPzogJ2RheScgfCAnaG91cidcblx0dmFyaWFudD86ICdyZWd1bGFyJyB8ICdyZXNvdXJjZSdcblx0ZGF5TnVtYmVySGVpZ2h0PzogbnVtYmVyXG59XG5cbmV4cG9ydCBjb25zdCBIb3Jpem9udGFsR3JpZDogUmVhY3QuRkM8SG9yaXpvbnRhbEdyaWRQcm9wcz4gPSAoe1xuXHRyb3dzLFxuXHRjaGlsZHJlbixcblx0Y2xhc3Nlcyxcblx0YWxsRGF5OiB0b3BMZXZlbEFsbERheSxcblx0Z3JpZFR5cGUsXG5cdHZhcmlhbnQgPSAncmVzb3VyY2UnLFxuXHRkYXlOdW1iZXJIZWlnaHQsXG59KSA9PiB7XG5cdGNvbnN0IHsgY3VycmVudERhdGUgfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KChzdGF0ZSkgPT4gKHtcblx0XHRjdXJyZW50RGF0ZTogc3RhdGUuY3VycmVudERhdGUsXG5cdH0pKVxuXG5cdGNvbnN0IGlzUmVzb3VyY2VDYWxlbmRhciA9IHZhcmlhbnQgPT09ICdyZXNvdXJjZSdcblx0Y29uc3QgaXNSZWd1bGFyQ2FsZW5kYXIgPSAhaXNSZXNvdXJjZUNhbGVuZGFyXG5cblx0Y29uc3QgaGVhZGVyID0gY2hpbGRyZW4gJiYgKFxuXHRcdDxIb3Jpem9udGFsR3JpZEhlYWRlckNvbnRhaW5lciBjbGFzc05hbWU9e2NsYXNzZXM/LmhlYWRlcn0+XG5cdFx0XHR7Y2hpbGRyZW59XG5cdFx0PC9Ib3Jpem9udGFsR3JpZEhlYWRlckNvbnRhaW5lcj5cblx0KVxuXG5cdHJldHVybiAoXG5cdFx0PGRpdiBjbGFzc05hbWU9XCJoLWZ1bGxcIiBkYXRhLXRlc3RpZD1cImhvcml6b250YWwtZ3JpZC1jb250YWluZXJcIj5cblx0XHRcdHsvKipcblx0XHRcdCAqIGhlYWRlciByb3cgaXMgcmVuZGVyZWQgb3V0c2lkZSBzY3JvbGwgYXJlYSBmb3IgcmVndWxhciBjYWxlbmRhclxuXHRcdFx0ICovfVxuXHRcdFx0e2lzUmVndWxhckNhbGVuZGFyICYmIGhlYWRlcn1cblxuXHRcdFx0PFNjcm9sbEFyZWFcblx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHQnaC1mdWxsJyxcblx0XHRcdFx0XHRpc1JlZ3VsYXJDYWxlbmRhciAmJiAnb3ZlcmZsb3ctYXV0bycsXG5cdFx0XHRcdFx0aXNSZWd1bGFyQ2FsZW5kYXIgJiYgQk9EWV9IRUlHSFQgLy8gc2Nyb2xsIGFyZWEgYmVjb21lcyBib2R5IGluIHJlZ3VsYXIgY2FsZW5kYXJcblx0XHRcdFx0KX1cblx0XHRcdFx0ZGF0YS10ZXN0aWQ9XCJob3Jpem9udGFsLWdyaWQtc2Nyb2xsXCJcblx0XHRcdFx0dmlld1BvcnRQcm9wcz17eyBjbGFzc05hbWU6ICcqOmZsZXghICo6ZmxleC1jb2whICo6bWluLWgtZnVsbCcgfX1cblx0XHRcdD5cblx0XHRcdFx0ey8qKlxuXHRcdFx0XHQgKiBoZWFkZXIgcm93IGZvciByZXNvdXJjZSBjYWxlbmRhciBpbnNpZGUgc2Nyb2xsIGFyZWFcblx0XHRcdFx0ICogKi99XG5cdFx0XHRcdHtpc1Jlc291cmNlQ2FsZW5kYXIgJiYgaGVhZGVyfVxuXG5cdFx0XHRcdHsvKiBDYWxlbmRhciBhcmVhIHdpdGggc2Nyb2xsICovfVxuXHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdCdmbGV4IGZsZXgtMSB3LWZpdCcsXG5cdFx0XHRcdFx0XHRpc1Jlc291cmNlQ2FsZW5kYXIgJiYgQk9EWV9IRUlHSFQsIC8vIHRoaXMgYmVjb21lcyBib2R5IGluIHJlc291cmNlIGNhbGVuZGFyXG5cdFx0XHRcdFx0XHRjbGFzc2VzPy5ib2R5XG5cdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRkYXRhLXRlc3RpZD1cImhvcml6b250YWwtZ3JpZC1ib2R5XCJcblx0XHRcdFx0PlxuXHRcdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cInJlbGF0aXZlIHctZnVsbCBmbGV4IGZsZXgtY29sIGZsZXgtMVwiXG5cdFx0XHRcdFx0XHRrZXk9e2N1cnJlbnREYXRlLmZvcm1hdCgnWVlZWS1NTScpfVxuXHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdHtyb3dzLm1hcCgocm93LCBpbmRleCkgPT4gKFxuXHRcdFx0XHRcdFx0XHQ8SG9yaXpvbnRhbEdyaWRSb3dcblx0XHRcdFx0XHRcdFx0XHRhbGxEYXk9e3Jvdy5hbGxEYXkgPz8gdG9wTGV2ZWxBbGxEYXl9XG5cdFx0XHRcdFx0XHRcdFx0ZGF5TnVtYmVySGVpZ2h0PXtkYXlOdW1iZXJIZWlnaHR9XG5cdFx0XHRcdFx0XHRcdFx0Z3JpZFR5cGU9e2dyaWRUeXBlfVxuXHRcdFx0XHRcdFx0XHRcdGlzTGFzdFJvdz17aW5kZXggPT09IHJvd3MubGVuZ3RoIC0gMX1cblx0XHRcdFx0XHRcdFx0XHRrZXk9e3Jvdy5pZH1cblx0XHRcdFx0XHRcdFx0XHR2YXJpYW50PXt2YXJpYW50fVxuXHRcdFx0XHRcdFx0XHRcdHsuLi5yb3d9XG5cdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHQpKX1cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PC9kaXY+XG5cblx0XHRcdFx0PFNjcm9sbEJhciBjbGFzc05hbWU9XCJ6LTMwXCIgLz5cblx0XHRcdFx0PFNjcm9sbEJhciBjbGFzc05hbWU9XCJ6LTMwXCIgb3JpZW50YXRpb249XCJob3Jpem9udGFsXCIgLz5cblx0XHRcdDwvU2Nyb2xsQXJlYT5cblx0XHQ8L2Rpdj5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEFuaW1hdGVkU2VjdGlvbiB9IGZyb20gJ0AvY29tcG9uZW50cy9hbmltYXRpb25zL2FuaW1hdGVkLXNlY3Rpb24nXG5pbXBvcnQgeyB1c2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgeyBnZXRXZWVrRGF5cyB9IGZyb20gJ0AvbGliL3V0aWxzL2RhdGUtdXRpbHMnXG5cbmludGVyZmFjZSBNb250aEhlYWRlclByb3BzIHtcblx0Y2xhc3NOYW1lPzogc3RyaW5nXG59XG5cbmV4cG9ydCBjb25zdCBNb250aEhlYWRlcjogUmVhY3QuRkM8TW9udGhIZWFkZXJQcm9wcz4gPSAoeyBjbGFzc05hbWUgfSkgPT4ge1xuXHRjb25zdCB7IGZpcnN0RGF5T2ZXZWVrLCBzdGlja3lWaWV3SGVhZGVyLCB2aWV3SGVhZGVyQ2xhc3NOYW1lLCBjdXJyZW50RGF0ZSB9ID1cblx0XHR1c2VDYWxlbmRhckNvbnRleHQoKVxuXG5cdC8vIFJlb3JkZXIgd2VlayBkYXlzIGJhc2VkIG9uIGZpcnN0RGF5T2ZXZWVrXG5cdGNvbnN0IHdlZWtEYXlzID0gZ2V0V2Vla0RheXMoY3VycmVudERhdGUsIGZpcnN0RGF5T2ZXZWVrKVxuXG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0J2ZsZXggdy1mdWxsJyxcblx0XHRcdFx0c3RpY2t5Vmlld0hlYWRlciAmJiAnc3RpY2t5IHRvcC0wIHotMjAnLFxuXHRcdFx0XHR2aWV3SGVhZGVyQ2xhc3NOYW1lLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXRlc3RpZD1cIm1vbnRoLWhlYWRlclwiXG5cdFx0PlxuXHRcdFx0e3dlZWtEYXlzLm1hcCgod2Vla0RheSwgaW5kZXgpID0+IChcblx0XHRcdFx0PEFuaW1hdGVkU2VjdGlvblxuXHRcdFx0XHRcdGNsYXNzTmFtZT1cInB5LTIgdGV4dC1jZW50ZXIgZm9udC1tZWRpdW0gYm9yZGVyLXIgbGFzdDpib3JkZXItci0wIGJvcmRlci1iIGZsZXgtMVwiXG5cdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e2B3ZWVrZGF5LWhlYWRlci0ke3dlZWtEYXkuZm9ybWF0KCdkZGQnKS50b0xvd2VyQ2FzZSgpfWB9XG5cdFx0XHRcdFx0ZGVsYXk9e2luZGV4ICogMC4wNX1cblx0XHRcdFx0XHRrZXk9e3dlZWtEYXkudG9JU09TdHJpbmcoKX1cblx0XHRcdFx0XHR0cmFuc2l0aW9uS2V5PXt3ZWVrRGF5LnRvSVNPU3RyaW5nKCl9XG5cdFx0XHRcdD5cblx0XHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXNtIGNhcGl0YWxpemVcIj57d2Vla0RheS5mb3JtYXQoJ2RkZCcpfTwvc3Bhbj5cblx0XHRcdFx0PC9BbmltYXRlZFNlY3Rpb24+XG5cdFx0XHQpKX1cblx0XHQ8L2Rpdj5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEFsbERheVJvdyB9IGZyb20gJ0AvY29tcG9uZW50cy9hbGwtZGF5LXJvdy9hbGwtZGF5LXJvdydcbmltcG9ydCB7IEFuaW1hdGVkU2VjdGlvbiB9IGZyb20gJ0AvY29tcG9uZW50cy9hbmltYXRpb25zL2FuaW1hdGVkLXNlY3Rpb24nXG5pbXBvcnQgeyBWZXJ0aWNhbEdyaWQgfSBmcm9tICdAL2NvbXBvbmVudHMvdmVydGljYWwtZ3JpZC92ZXJ0aWNhbC1ncmlkJ1xuaW1wb3J0IHsgdXNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5pbXBvcnQgeyBnZXRWaWV3SG91cnMgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL3V0aWxzL3ZpZXctaG91cnMnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgZ2V0V2Vla0RheXMgfSBmcm9tICdAL2xpYi91dGlscy9kYXRlLXV0aWxzJ1xuXG5jb25zdCBDRUxMX0NMQVNTID0gJ3ctW2NhbGMoKDEwMCUtNHJlbSkvNyldIG1pbi13LVtjYWxjKCgxMDAlLTRyZW0pLzcpXSBmbGV4LTEnXG5jb25zdCBMRUZUX0NPTF9XSURUSCA9ICd3LTEwIHNtOnctMTYgbWluLXctMTAgc206bWluLXctMTYgbWF4LXctMTAgc206bWF4LXctMTYnXG5cbmNvbnN0IFdlZWtWaWV3OiBSZWFjdC5GQyA9ICgpID0+IHtcblx0Y29uc3Qge1xuXHRcdHQsXG5cdFx0Y3VycmVudERhdGUsXG5cdFx0Zmlyc3REYXlPZldlZWssXG5cdFx0c2VsZWN0RGF0ZSxcblx0XHRvcGVuRXZlbnRGb3JtLFxuXHRcdGN1cnJlbnRMb2NhbGUsXG5cdFx0dGltZUZvcm1hdCxcblx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzLFxuXHR9ID0gdXNlQ2FsZW5kYXJDb250ZXh0KClcblxuXHRjb25zdCB3ZWVrRGF5cyA9IHVzZU1lbW8oXG5cdFx0KCkgPT4gZ2V0V2Vla0RheXMoY3VycmVudERhdGUsIGZpcnN0RGF5T2ZXZWVrKSxcblx0XHRbY3VycmVudERhdGUsIGZpcnN0RGF5T2ZXZWVrXVxuXHQpXG5cblx0Y29uc3QgaG91cnMgPSB1c2VNZW1vKFxuXHRcdCgpID0+XG5cdFx0XHRnZXRWaWV3SG91cnMoe1xuXHRcdFx0XHRyZWZlcmVuY2VEYXRlOiBjdXJyZW50RGF0ZSxcblx0XHRcdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRcdFx0aGlkZU5vbkJ1c2luZXNzSG91cnMsXG5cdFx0XHRcdGFsbERhdGVzOiB3ZWVrRGF5cyxcblx0XHRcdH0pLFxuXHRcdFtjdXJyZW50RGF0ZSwgYnVzaW5lc3NIb3VycywgaGlkZU5vbkJ1c2luZXNzSG91cnMsIHdlZWtEYXlzXVxuXHQpXG5cblx0Y29uc3QgZmlyc3RDb2wgPSB7XG5cdFx0aWQ6ICd0aW1lLWNvbCcsXG5cdFx0ZGF5czogaG91cnMsXG5cdFx0ZGF5OiB1bmRlZmluZWQsXG5cdFx0Y2xhc3NOYW1lOiBgc2hyaW5rLTAgJHtMRUZUX0NPTF9XSURUSH0gc3RpY2t5IGxlZnQtMCBiZy1iYWNrZ3JvdW5kIHotMjBgLFxuXHRcdGdyaWRUeXBlOiAnaG91cicgYXMgY29uc3QsXG5cdFx0bm9FdmVudHM6IHRydWUsXG5cdFx0cmVuZGVyQ2VsbDogKGRhdGU6IGRheWpzLkRheWpzKSA9PiAoXG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQtbXV0ZWQtZm9yZWdyb3VuZCBwLTIgdGV4dC1yaWdodCB0ZXh0LVsxMHB4XSBzbTp0ZXh0LXhzIGZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyXCI+XG5cdFx0XHRcdHtJbnRsLkRhdGVUaW1lRm9ybWF0KGN1cnJlbnRMb2NhbGUsIHtcblx0XHRcdFx0XHRob3VyOiAnbnVtZXJpYycsXG5cdFx0XHRcdFx0aG91cjEyOiB0aW1lRm9ybWF0ID09PSAnMTItaG91cicsXG5cdFx0XHRcdH0pLmZvcm1hdChkYXRlLnRvRGF0ZSgpKX1cblx0XHRcdDwvZGl2PlxuXHRcdCksXG5cdH1cblxuXHQvLyBHZW5lcmF0ZSB3ZWVrIGRheXNcblx0Y29uc3QgY29sdW1ucyA9IHVzZU1lbW8oKCkgPT4ge1xuXHRcdHJldHVybiB3ZWVrRGF5cy5tYXAoKGRheSkgPT4gKHtcblx0XHRcdGlkOiBgZGF5LWNvbC0ke2RheS5mb3JtYXQoJ1lZWVktTU0tREQnKX1gLFxuXHRcdFx0ZGF5LFxuXHRcdFx0bGFiZWw6IGRheS5mb3JtYXQoJ0QnKSxcblx0XHRcdGNsYXNzTmFtZTogQ0VMTF9DTEFTUyxcblx0XHRcdGRheXM6IGhvdXJzLm1hcCgoaCkgPT5cblx0XHRcdFx0ZGF5LmhvdXIoaC5ob3VyKCkpLm1pbnV0ZSgwKS5zZWNvbmQoMCkubWlsbGlzZWNvbmQoMClcblx0XHRcdCksXG5cdFx0XHR2YWx1ZTogZGF5LFxuXHRcdH0pKVxuXHR9LCBbd2Vla0RheXMsIGhvdXJzXSlcblxuXHRyZXR1cm4gKFxuXHRcdDxWZXJ0aWNhbEdyaWRcblx0XHRcdGFsbERheVJvdz17XG5cdFx0XHRcdDxBbGxEYXlSb3dcblx0XHRcdFx0XHRjbGFzc2VzPXt7IGNlbGw6IENFTExfQ0xBU1MsIHNwYWNlcjogTEVGVF9DT0xfV0lEVEggfX1cblx0XHRcdFx0XHRkYXlzPXt3ZWVrRGF5c31cblx0XHRcdFx0Lz5cblx0XHRcdH1cblx0XHRcdGNsYXNzZXM9e3sgaGVhZGVyOiAndy1mdWxsIGgtMTgnLCBib2R5OiAnaC1bY2FsYygxMDAlLTQuNXJlbSldIHctZnVsbCcgfX1cblx0XHRcdGNvbHVtbnM9e1tmaXJzdENvbCwgLi4uY29sdW1uc119XG5cdFx0XHRncmlkVHlwZT1cImhvdXJcIlxuXHRcdFx0dmFyaWFudD1cInJlZ3VsYXJcIlxuXHRcdD5cblx0XHRcdDxkaXYgY2xhc3NOYW1lPXsnZmxleCBoLWZ1bGwgZmxleC0xJ30gZGF0YS10ZXN0aWQ9XCJ3ZWVrLXZpZXctaGVhZGVyXCI+XG5cdFx0XHRcdHsvKiBDb3JuZXIgY2VsbCB3aXRoIHdlZWsgbnVtYmVyICovfVxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInctMTAgc206dy0xNiBoLWZ1bGwgc2hyaW5rLTAgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJvcmRlci1yIHAtMiBmbGV4XCI+XG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlclwiPlxuXHRcdFx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwidGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHRleHQteHNcIj57dCgnd2VlaycpfTwvc3Bhbj5cblx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cImZvbnQtbWVkaXVtXCI+e2N1cnJlbnREYXRlLndlZWsoKX08L3NwYW4+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdHsvKiBEYXkgaGVhZGVyIGNlbGxzICovfVxuXHRcdFx0XHR7d2Vla0RheXMubWFwKChkYXksIGluZGV4KSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgaXNUb2RheSA9IGRheS5pc1NhbWUoZGF5anMoKSwgJ2RheScpXG5cdFx0XHRcdFx0Y29uc3Qga2V5ID0gYHdlZWstZGF5LWhlYWRlci0ke2RheS50b0lTT1N0cmluZygpfWBcblxuXHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHQ8QW5pbWF0ZWRTZWN0aW9uXG5cdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHRcdFx0J2hvdmVyOmJnLWFjY2VudCBmbGV4LTEgZmxleCBmbGV4LWNvbCBqdXN0aWZ5LWNlbnRlciBjdXJzb3ItcG9pbnRlciBwLTEgdGV4dC1jZW50ZXIgc206cC0yIGJvcmRlci1yIGxhc3Q6Ym9yZGVyLXItMCB3LTUwIGgtZnVsbCcsXG5cdFx0XHRcdFx0XHRcdFx0aXNUb2RheSAmJiAnYmctcHJpbWFyeS8xMCBmb250LWJvbGQnXG5cdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPXtgd2Vlay1kYXktaGVhZGVyLSR7ZGF5LmZvcm1hdCgnZGRkZCcpLnRvTG93ZXJDYXNlKCl9YH1cblx0XHRcdFx0XHRcdFx0ZGVsYXk9e2luZGV4ICogMC4wNX1cblx0XHRcdFx0XHRcdFx0a2V5PXtrZXl9XG5cdFx0XHRcdFx0XHRcdG9uQ2xpY2s9eygpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRzZWxlY3REYXRlKGRheSlcblx0XHRcdFx0XHRcdFx0XHRvcGVuRXZlbnRGb3JtKHsgc3RhcnQ6IGRheSB9KVxuXHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHR0cmFuc2l0aW9uS2V5PXtrZXl9XG5cdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidGV4dC14cyBzbTp0ZXh0LXNtXCI+e2RheS5mb3JtYXQoJ2RkZCcpfTwvZGl2PlxuXHRcdFx0XHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdFx0XHRcdCdteC1hdXRvIG10LTEgZmxleCBoLTUgdy01IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLWZ1bGwgdGV4dC14cycsXG5cdFx0XHRcdFx0XHRcdFx0XHRpc1RvZGF5ICYmICdiZy1wcmltYXJ5IHRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kJ1xuXHRcdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHR7SW50bC5EYXRlVGltZUZvcm1hdChjdXJyZW50TG9jYWxlLCB7XG5cdFx0XHRcdFx0XHRcdFx0XHRkYXk6ICdudW1lcmljJyxcblx0XHRcdFx0XHRcdFx0XHR9KS5mb3JtYXQoZGF5LnRvRGF0ZSgpKX1cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQ8L0FuaW1hdGVkU2VjdGlvbj5cblx0XHRcdFx0XHQpXG5cdFx0XHRcdH0pfVxuXHRcdFx0PC9kaXY+XG5cdFx0PC9WZXJ0aWNhbEdyaWQ+XG5cdClcbn1cblxuZXhwb3J0IGRlZmF1bHQgV2Vla1ZpZXdcbiIsCiAgICAiaW1wb3J0IHsgQW5pbWF0ZWRTZWN0aW9uIH0gZnJvbSAnQC9jb21wb25lbnRzL2FuaW1hdGlvbnMvYW5pbWF0ZWQtc2VjdGlvbidcbmltcG9ydCB7IFNjcm9sbEFyZWEsIFNjcm9sbEJhciB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9zY3JvbGwtYXJlYSdcbmltcG9ydCB7IHVzZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9jb250ZXh0J1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuY29uc3QgREFZX0hFQURFUl9OQU1FUyA9IFsnUycsICdNJywgJ1QnLCAnVycsICdUJywgJ0YnLCAnUyddXG5jb25zdCBFVkVOVF9ET1RfQ09MT1JTID0gWydiZy1wcmltYXJ5JywgJ2JnLWJsdWUtNTAwJywgJ2JnLWdyZWVuLTUwMCddXG5jb25zdCBEQVlTX0lOX01JTklfQ0FMRU5EQVIgPSA0MlxuXG5jb25zdCBnZXREYXlUb29sdGlwID0gKGV2ZW50Q291bnQ6IG51bWJlcik6IHN0cmluZyA9PiB7XG5cdGlmIChldmVudENvdW50ID09PSAwKSB7XG5cdFx0cmV0dXJuICcnXG5cdH1cblx0Y29uc3QgcGx1cmFsID0gZXZlbnRDb3VudCA+IDEgPyAncycgOiAnJ1xuXHRyZXR1cm4gYCR7ZXZlbnRDb3VudH0gZXZlbnQke3BsdXJhbH1gXG59XG5cbmludGVyZmFjZSBNb250aERhdGEge1xuXHRkYXRlOiBkYXlqcy5EYXlqc1xuXHRuYW1lOiBzdHJpbmdcblx0ZXZlbnRDb3VudDogbnVtYmVyXG5cdG1vbnRoS2V5OiBzdHJpbmdcbn1cblxuaW50ZXJmYWNlIERheURhdGEge1xuXHRkYXRlOiBkYXlqcy5EYXlqc1xuXHRkYXlLZXk6IHN0cmluZ1xuXHRpc0luQ3VycmVudE1vbnRoOiBib29sZWFuXG5cdGlzVG9kYXk6IGJvb2xlYW5cblx0aXNTZWxlY3RlZDogYm9vbGVhblxuXHRldmVudENvdW50OiBudW1iZXJcbn1cblxuY29uc3QgWWVhclZpZXcgPSAoKSA9PiB7XG5cdGNvbnN0IHsgY3VycmVudERhdGUsIHNlbGVjdERhdGUsIGV2ZW50cywgc2V0VmlldywgZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlLCB0IH0gPVxuXHRcdHVzZUNhbGVuZGFyQ29udGV4dCgpXG5cdGNvbnN0IGN1cnJlbnRZZWFyID0gY3VycmVudERhdGUueWVhcigpXG5cblx0Y29uc3QgZ2VuZXJhdGVNb250aHNEYXRhID0gKCk6IE1vbnRoRGF0YVtdID0+IHtcblx0XHRyZXR1cm4gQXJyYXkuZnJvbSh7IGxlbmd0aDogMTIgfSwgKF8sIG1vbnRoSW5kZXgpID0+IHtcblx0XHRcdGNvbnN0IG1vbnRoRGF0ZSA9IGRheWpzKClcblx0XHRcdFx0LnllYXIoY3VycmVudFllYXIpXG5cdFx0XHRcdC5tb250aChtb250aEluZGV4KVxuXHRcdFx0XHQuc3RhcnRPZignbW9udGgnKVxuXHRcdFx0Y29uc3QgZXZlbnRzSW5Nb250aCA9IGV2ZW50cy5maWx0ZXIoXG5cdFx0XHRcdChldmVudCkgPT5cblx0XHRcdFx0XHRldmVudC5zdGFydC55ZWFyKCkgPT09IGN1cnJlbnRZZWFyICYmXG5cdFx0XHRcdFx0ZXZlbnQuc3RhcnQubW9udGgoKSA9PT0gbW9udGhJbmRleFxuXHRcdFx0KVxuXG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRkYXRlOiBtb250aERhdGUsXG5cdFx0XHRcdG5hbWU6IG1vbnRoRGF0ZS5mb3JtYXQoJ01NTU0nKSxcblx0XHRcdFx0ZXZlbnRDb3VudDogZXZlbnRzSW5Nb250aC5sZW5ndGgsXG5cdFx0XHRcdG1vbnRoS2V5OiBtb250aERhdGUuZm9ybWF0KCdNTScpLFxuXHRcdFx0fVxuXHRcdH0pXG5cdH1cblxuXHRjb25zdCBnZW5lcmF0ZURheXNGb3JNb250aCA9IChtb250aERhdGU6IGRheWpzLkRheWpzKTogRGF5RGF0YVtdID0+IHtcblx0XHRjb25zdCBmaXJzdERheU9mQ2FsZW5kYXIgPSBtb250aERhdGUuc3RhcnRPZignbW9udGgnKS5zdGFydE9mKCd3ZWVrJylcblxuXHRcdHJldHVybiBBcnJheS5mcm9tKHsgbGVuZ3RoOiBEQVlTX0lOX01JTklfQ0FMRU5EQVIgfSwgKF8sIGRheUluZGV4KSA9PiB7XG5cdFx0XHRjb25zdCBkYXlEYXRlID0gZmlyc3REYXlPZkNhbGVuZGFyLmFkZChkYXlJbmRleCwgJ2RheScpXG5cdFx0XHRjb25zdCBkYXlTdGFydCA9IGRheURhdGUuc3RhcnRPZignZGF5Jylcblx0XHRcdGNvbnN0IGRheUVuZCA9IGRheURhdGUuZW5kT2YoJ2RheScpXG5cdFx0XHRjb25zdCBldmVudHNPbkRheSA9IGdldEV2ZW50c0ZvckRhdGVSYW5nZShkYXlTdGFydCwgZGF5RW5kKVxuXG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRkYXRlOiBkYXlEYXRlLFxuXHRcdFx0XHRkYXlLZXk6IGRheURhdGUuZm9ybWF0KCdZWVlZLU1NLUREJyksXG5cdFx0XHRcdGlzSW5DdXJyZW50TW9udGg6IGRheURhdGUubW9udGgoKSA9PT0gbW9udGhEYXRlLm1vbnRoKCksXG5cdFx0XHRcdGlzVG9kYXk6IGRheURhdGUuaXNTYW1lKGRheWpzKCksICdkYXknKSxcblx0XHRcdFx0aXNTZWxlY3RlZDogZGF5RGF0ZS5pc1NhbWUoY3VycmVudERhdGUsICdkYXknKSxcblx0XHRcdFx0ZXZlbnRDb3VudDogZXZlbnRzT25EYXkubGVuZ3RoLFxuXHRcdFx0fVxuXHRcdH0pXG5cdH1cblxuXHRjb25zdCBuYXZpZ2F0ZVRvRGF0ZSA9IChcblx0XHRkYXRlOiBkYXlqcy5EYXlqcyxcblx0XHR2aWV3OiAnbW9udGgnIHwgJ2RheScsXG5cdFx0ZXZlbnQ/OiBSZWFjdC5Nb3VzZUV2ZW50XG5cdCkgPT4ge1xuXHRcdGV2ZW50Py5zdG9wUHJvcGFnYXRpb24oKVxuXHRcdHNlbGVjdERhdGUoZGF0ZSlcblx0XHRzZXRWaWV3KHZpZXcpXG5cdH1cblxuXHRjb25zdCBnZXRFdmVudENvdW50TGFiZWwgPSAoY291bnQ6IG51bWJlcik6IHN0cmluZyA9PiB7XG5cdFx0Y29uc3QgZXZlbnRXb3JkID0gY291bnQgPT09IDEgPyB0KCdldmVudCcpIDogdCgnZXZlbnRzJylcblx0XHRyZXR1cm4gYCR7Y291bnR9ICR7ZXZlbnRXb3JkfWBcblx0fVxuXG5cdGNvbnN0IGdldERheUNsYXNzTmFtZSA9IChkYXk6IERheURhdGEpOiBzdHJpbmcgPT4ge1xuXHRcdGNvbnN0IGJhc2VDbGFzcyA9XG5cdFx0XHQncmVsYXRpdmUgZmxleCBhc3BlY3Qtc3F1YXJlIHctZnVsbCBjdXJzb3ItcG9pbnRlciBmbGV4LWNvbCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgaG92ZXI6YmctYWNjZW50IHJvdW5kZWQtc20gdHJhbnNpdGlvbi1jb2xvcnMgZHVyYXRpb24tMjAwJ1xuXHRcdGNvbnN0IG91dHNpZGVNb250aENsYXNzID0gZGF5LmlzSW5DdXJyZW50TW9udGhcblx0XHRcdD8gJydcblx0XHRcdDogJ3RleHQtbXV0ZWQtZm9yZWdyb3VuZCBvcGFjaXR5LTUwJ1xuXHRcdGNvbnN0IHRvZGF5Q2xhc3MgPSBkYXkuaXNUb2RheVxuXHRcdFx0PyAnYmctcHJpbWFyeSB0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCByb3VuZGVkLWZ1bGwnXG5cdFx0XHQ6ICcnXG5cdFx0Y29uc3Qgc2VsZWN0ZWRDbGFzcyA9XG5cdFx0XHRkYXkuaXNTZWxlY3RlZCAmJiAhZGF5LmlzVG9kYXkgPyAnYmctbXV0ZWQgcm91bmRlZC1mdWxsIGZvbnQtYm9sZCcgOiAnJ1xuXHRcdGNvbnN0IGhhc0V2ZW50c0NsYXNzID1cblx0XHRcdGRheS5ldmVudENvdW50ID4gMCAmJiAhZGF5LmlzVG9kYXkgJiYgIWRheS5pc1NlbGVjdGVkID8gJ2ZvbnQtbWVkaXVtJyA6ICcnXG5cblx0XHRyZXR1cm4gY24oXG5cdFx0XHRiYXNlQ2xhc3MsXG5cdFx0XHRvdXRzaWRlTW9udGhDbGFzcyxcblx0XHRcdHRvZGF5Q2xhc3MsXG5cdFx0XHRzZWxlY3RlZENsYXNzLFxuXHRcdFx0aGFzRXZlbnRzQ2xhc3Ncblx0XHQpXG5cdH1cblxuXHRjb25zdCBnZXRFdmVudERvdENsYXNzTmFtZSA9IChjb2xvcjogc3RyaW5nLCBpc1RvZGF5OiBib29sZWFuKTogc3RyaW5nID0+IHtcblx0XHRjb25zdCBkb3RDb2xvciA9IGlzVG9kYXkgPyAnYmctcHJpbWFyeS1mb3JlZ3JvdW5kJyA6IGNvbG9yXG5cdFx0cmV0dXJuIGNuKCdoLVszcHhdIHctWzNweF0gcm91bmRlZC1mdWxsJywgZG90Q29sb3IpXG5cdH1cblxuXHRjb25zdCBtb250aHNEYXRhID0gZ2VuZXJhdGVNb250aHNEYXRhKClcblxuXHRyZXR1cm4gKFxuXHRcdDxTY3JvbGxBcmVhIGNsYXNzTmFtZT1cImgtZnVsbFwiIGRhdGEtdGVzdGlkPVwieWVhci12aWV3XCI+XG5cdFx0XHQ8ZGl2XG5cdFx0XHRcdGNsYXNzTmFtZT1cImdyaWQgYXV0by1yb3dzLWZyIGdyaWQtY29scy0xIGdhcC00IHAtNCBzbTpncmlkLWNvbHMtMiBsZzpncmlkLWNvbHMtM1wiXG5cdFx0XHRcdGRhdGEtdGVzdGlkPVwieWVhci1ncmlkXCJcblx0XHRcdD5cblx0XHRcdFx0e21vbnRoc0RhdGEubWFwKChtb250aCwgbW9udGhJbmRleCkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IGRheXNJbk1vbnRoID0gZ2VuZXJhdGVEYXlzRm9yTW9udGgobW9udGguZGF0ZSlcblx0XHRcdFx0XHRjb25zdCBhbmltYXRpb25EZWxheSA9IG1vbnRoSW5kZXggKiAwLjA1XG5cblx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJob3Zlcjpib3JkZXItcHJpbWFyeSBmbGV4IGZsZXgtY29sIHJvdW5kZWQtbGcgYm9yZGVyIHAtMyB0ZXh0LWxlZnQgdHJhbnNpdGlvbi1hbGwgZHVyYXRpb24tMjAwIGhvdmVyOnNoYWRvdy1tZFwiXG5cdFx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPXtgeWVhci1tb250aC0ke21vbnRoLm1vbnRoS2V5fWB9XG5cdFx0XHRcdFx0XHRcdGtleT17bW9udGgubW9udGhLZXl9XG5cdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdDxBbmltYXRlZFNlY3Rpb25cblx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJtYi0yIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlblwiXG5cdFx0XHRcdFx0XHRcdFx0ZGVsYXk9e2FuaW1hdGlvbkRlbGF5fVxuXHRcdFx0XHRcdFx0XHRcdGtleT17YG1vbnRoLSR7bW9udGhJbmRleH1gfVxuXHRcdFx0XHRcdFx0XHRcdHRyYW5zaXRpb25LZXk9e2Btb250aC0ke21vbnRoSW5kZXh9YH1cblx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdDxidXR0b25cblx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cInRleHQtbGcgZm9udC1tZWRpdW0gaG92ZXI6dW5kZXJsaW5lIGN1cnNvci1wb2ludGVyXCJcblx0XHRcdFx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPXtgeWVhci1tb250aC10aXRsZS0ke21vbnRoLm1vbnRoS2V5fWB9XG5cdFx0XHRcdFx0XHRcdFx0XHRvbkNsaWNrPXsoKSA9PiBuYXZpZ2F0ZVRvRGF0ZShtb250aC5kYXRlLCAnbW9udGgnKX1cblx0XHRcdFx0XHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIlxuXHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdHttb250aC5uYW1lfVxuXHRcdFx0XHRcdFx0XHRcdDwvYnV0dG9uPlxuXG5cdFx0XHRcdFx0XHRcdFx0e21vbnRoLmV2ZW50Q291bnQgPiAwICYmIChcblx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImJnLXByaW1hcnkgdGV4dC1wcmltYXJ5LWZvcmVncm91bmQgcm91bmRlZC1mdWxsIHB4LTIgcHktMSB0ZXh0LXhzXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e2B5ZWFyLW1vbnRoLWV2ZW50LWNvdW50LSR7bW9udGgubW9udGhLZXl9YH1cblx0XHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0e2dldEV2ZW50Q291bnRMYWJlbChtb250aC5ldmVudENvdW50KX1cblx0XHRcdFx0XHRcdFx0XHRcdDwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHQ8L0FuaW1hdGVkU2VjdGlvbj5cblxuXHRcdFx0XHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiZ3JpZCBncmlkLWNvbHMtNyBnYXAtWzFweF0gdGV4dC1bMC42cmVtXVwiXG5cdFx0XHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e2B5ZWFyLW1pbmktY2FsZW5kYXItJHttb250aC5tb250aEtleX1gfVxuXHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0e0RBWV9IRUFERVJfTkFNRVMubWFwKChkYXlOYW1lLCBoZWFkZXJJbmRleCkgPT4gKFxuXHRcdFx0XHRcdFx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJ0ZXh0LW11dGVkLWZvcmVncm91bmQgaC0zIHRleHQtY2VudGVyXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0a2V5PXtgaGVhZGVyLSR7aGVhZGVySW5kZXh9YH1cblx0XHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0e2RheU5hbWV9XG5cdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0XHQpKX1cblxuXHRcdFx0XHRcdFx0XHRcdHtkYXlzSW5Nb250aC5tYXAoKGRheSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgZGF5VGVzdElkID0gYHllYXItZGF5LSR7bW9udGguZGF0ZS5mb3JtYXQoJ1lZWVktTU0nKX0tJHtkYXkuZGF5S2V5fWBcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IGhhc0V2ZW50cyA9IGRheS5ldmVudENvdW50ID4gMFxuXHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgdmlzaWJsZURvdENvdW50ID0gTWF0aC5taW4oZGF5LmV2ZW50Q291bnQsIDMpXG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zdCB2aXNpYmxlRG90Q29sb3JzID0gRVZFTlRfRE9UX0NPTE9SUy5zbGljZShcblx0XHRcdFx0XHRcdFx0XHRcdFx0MCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmlzaWJsZURvdENvdW50XG5cdFx0XHRcdFx0XHRcdFx0XHQpXG5cblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxidXR0b25cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9e2dldERheUNsYXNzTmFtZShkYXkpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPXtkYXlUZXN0SWR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0a2V5PXtkYXkuZGF5S2V5fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9uQ2xpY2s9eyhlKSA9PiBuYXZpZ2F0ZVRvRGF0ZShkYXkuZGF0ZSwgJ2RheScsIGUpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRpdGxlPXtnZXREYXlUb29sdGlwKGRheS5ldmVudENvdW50KX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cInRleHQtY2VudGVyIGxlYWRpbmctbm9uZVwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0e2RheS5kYXRlLmRhdGUoKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3NwYW4+XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR7aGFzRXZlbnRzICYmIChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnYWJzb2x1dGUgYm90dG9tLTAgZmxleCB3LWZ1bGwganVzdGlmeS1jZW50ZXIgc3BhY2UteC1bMXB4XScsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF5LmlzVG9kYXkgJiYgJ2JvdHRvbS1bMXB4XSdcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0e3Zpc2libGVEb3RDb2xvcnMubWFwKChkb3RDb2xvcikgPT4gKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9e2dldEV2ZW50RG90Q2xhc3NOYW1lKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkb3RDb2xvcixcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF5LmlzVG9kYXlcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRrZXk9e2RvdENvbG9yfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCkpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0PC9idXR0b24+XG5cdFx0XHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHRcdFx0fSl9XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0KVxuXHRcdFx0XHR9KX1cblx0XHRcdDwvZGl2PlxuXHRcdFx0PFNjcm9sbEJhciBjbGFzc05hbWU9XCJ6LTMwXCIgLz5cblx0XHQ8L1Njcm9sbEFyZWE+XG5cdClcbn1cblxuZXhwb3J0IGRlZmF1bHQgWWVhclZpZXdcbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IFJlYWN0Tm9kZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgRXZlbnRGb3JtUHJvcHMgfSBmcm9tICdAL2NvbXBvbmVudHMvZXZlbnQtZm9ybS9ldmVudC1mb3JtJ1xuaW1wb3J0IHR5cGUgeyBCdXNpbmVzc0hvdXJzLCBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHR5cGUge1xuXHRDYWxlbmRhckNsYXNzZXNPdmVycmlkZSxcblx0Q2VsbENsaWNrSW5mbyxcblx0UmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3JQcm9wcyxcbn0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci90eXBlcydcbmltcG9ydCB7IHVzZUNhbGVuZGFyRW5naW5lIH0gZnJvbSAnQC9ob29rcy91c2UtY2FsZW5kYXItZW5naW5lJ1xuaW1wb3J0IHR5cGUgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBHQVBfQkVUV0VFTl9FTEVNRU5UUyB9IGZyb20gJ0AvbGliL2NvbnN0YW50cydcbmltcG9ydCB0eXBlIHsgVHJhbnNsYXRpb25zLCBUcmFuc2xhdG9yRnVuY3Rpb24gfSBmcm9tICdAL2xpYi90cmFuc2xhdGlvbnMvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyVmlldywgVGltZUZvcm1hdCB9IGZyb20gJ0AvdHlwZXMnXG5pbXBvcnQgeyBDYWxlbmRhckNvbnRleHQgfSBmcm9tICcuL2NvbnRleHQnXG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2FsZW5kYXJQcm92aWRlclByb3BzIHtcblx0Y2hpbGRyZW46IFJlYWN0Tm9kZVxuXHRldmVudHM/OiBDYWxlbmRhckV2ZW50W11cblx0Zmlyc3REYXlPZldlZWs/OiBudW1iZXIgLy8gMCBmb3IgU3VuZGF5LCAxIGZvciBNb25kYXksIGV0Yy5cblx0aW5pdGlhbFZpZXc/OiBDYWxlbmRhclZpZXdcblx0aW5pdGlhbERhdGU/OiBkYXlqcy5EYXlqc1xuXHRyZW5kZXJFdmVudD86IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gUmVhY3ROb2RlXG5cdG9uRXZlbnRDbGljaz86IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuXHRvbkNlbGxDbGljaz86IChpbmZvOiBDZWxsQ2xpY2tJbmZvKSA9PiB2b2lkXG5cdG9uVmlld0NoYW5nZT86ICh2aWV3OiBDYWxlbmRhclZpZXcpID0+IHZvaWRcblx0b25FdmVudEFkZD86IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuXHRvbkV2ZW50VXBkYXRlPzogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG5cdG9uRXZlbnREZWxldGU/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0b25EYXRlQ2hhbmdlPzogKGRhdGU6IGRheWpzLkRheWpzKSA9PiB2b2lkXG5cdGxvY2FsZT86IHN0cmluZ1xuXHR0aW1lem9uZT86IHN0cmluZ1xuXHRkaXNhYmxlQ2VsbENsaWNrPzogYm9vbGVhblxuXHRkaXNhYmxlRXZlbnRDbGljaz86IGJvb2xlYW5cblx0ZGlzYWJsZURyYWdBbmREcm9wPzogYm9vbGVhblxuXHRkYXlNYXhFdmVudHM6IG51bWJlclxuXHRldmVudFNwYWNpbmc/OiBudW1iZXJcblx0c3RpY2t5Vmlld0hlYWRlcj86IGJvb2xlYW5cblx0dmlld0hlYWRlckNsYXNzTmFtZT86IHN0cmluZ1xuXHRoZWFkZXJDb21wb25lbnQ/OiBSZWFjdE5vZGUgLy8gT3B0aW9uYWwgY3VzdG9tIGhlYWRlciBjb21wb25lbnRcblx0aGVhZGVyQ2xhc3NOYW1lPzogc3RyaW5nIC8vIE9wdGlvbmFsIGN1c3RvbSBoZWFkZXIgY2xhc3Ncblx0YnVzaW5lc3NIb3Vycz86IEJ1c2luZXNzSG91cnMgfCBCdXNpbmVzc0hvdXJzW11cblx0cmVuZGVyRXZlbnRGb3JtPzogKHByb3BzOiBFdmVudEZvcm1Qcm9wcykgPT4gUmVhY3ROb2RlXG5cdC8vIFRyYW5zbGF0aW9uIG9wdGlvbnMgLSBwcm92aWRlIGVpdGhlciB0cmFuc2xhdGlvbnMgb2JqZWN0IE9SIHRyYW5zbGF0b3IgZnVuY3Rpb25cblx0dHJhbnNsYXRpb25zPzogVHJhbnNsYXRpb25zXG5cdHRyYW5zbGF0b3I/OiBUcmFuc2xhdG9yRnVuY3Rpb25cblx0dGltZUZvcm1hdD86IFRpbWVGb3JtYXRcblx0Y2xhc3Nlc092ZXJyaWRlPzogQ2FsZW5kYXJDbGFzc2VzT3ZlcnJpZGVcblx0cmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3I/OiAoXG5cdFx0cHJvcHM6IFJlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yUHJvcHNcblx0KSA9PiBSZWFjdE5vZGVcblx0aGlkZU5vbkJ1c2luZXNzSG91cnM/OiBib29sZWFuXG59XG5cbmV4cG9ydCBjb25zdCBDYWxlbmRhclByb3ZpZGVyOiBSZWFjdC5GQzxDYWxlbmRhclByb3ZpZGVyUHJvcHM+ID0gKHtcblx0Y2hpbGRyZW4sXG5cdGV2ZW50cyA9IFtdLFxuXHRmaXJzdERheU9mV2VlayA9IDAsXG5cdGluaXRpYWxWaWV3ID0gJ21vbnRoJyxcblx0aW5pdGlhbERhdGUsXG5cdHJlbmRlckV2ZW50LFxuXHRvbkV2ZW50Q2xpY2ssXG5cdG9uQ2VsbENsaWNrLFxuXHRvblZpZXdDaGFuZ2UsXG5cdG9uRXZlbnRBZGQsXG5cdG9uRXZlbnRVcGRhdGUsXG5cdG9uRXZlbnREZWxldGUsXG5cdG9uRGF0ZUNoYW5nZSxcblx0bG9jYWxlLFxuXHR0aW1lem9uZSxcblx0ZGlzYWJsZUNlbGxDbGljayxcblx0ZGlzYWJsZUV2ZW50Q2xpY2ssXG5cdGRpc2FibGVEcmFnQW5kRHJvcCxcblx0ZGF5TWF4RXZlbnRzLFxuXHRldmVudFNwYWNpbmcgPSBHQVBfQkVUV0VFTl9FTEVNRU5UUyxcblx0c3RpY2t5Vmlld0hlYWRlciA9IHRydWUsXG5cdHZpZXdIZWFkZXJDbGFzc05hbWUgPSAnJyxcblx0aGVhZGVyQ29tcG9uZW50LFxuXHRoZWFkZXJDbGFzc05hbWUsXG5cdGJ1c2luZXNzSG91cnMsXG5cdHJlbmRlckV2ZW50Rm9ybSxcblx0dHJhbnNsYXRpb25zLFxuXHR0cmFuc2xhdG9yLFxuXHR0aW1lRm9ybWF0ID0gJzEyLWhvdXInLFxuXHRjbGFzc2VzT3ZlcnJpZGUsXG5cdHJlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yLFxuXHRoaWRlTm9uQnVzaW5lc3NIb3VycyA9IGZhbHNlLFxufSkgPT4ge1xuXHQvLyBVc2UgdGhlIGNhbGVuZGFyIGVuZ2luZVxuXHRjb25zdCBjYWxlbmRhckVuZ2luZSA9IHVzZUNhbGVuZGFyRW5naW5lKHtcblx0XHRldmVudHMsXG5cdFx0Zmlyc3REYXlPZldlZWssXG5cdFx0aW5pdGlhbFZpZXcsXG5cdFx0aW5pdGlhbERhdGUsXG5cdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRvbkV2ZW50QWRkLFxuXHRcdG9uRXZlbnRVcGRhdGUsXG5cdFx0b25FdmVudERlbGV0ZSxcblx0XHRvbkRhdGVDaGFuZ2UsXG5cdFx0b25WaWV3Q2hhbmdlLFxuXHRcdGxvY2FsZSxcblx0XHR0aW1lem9uZSxcblx0XHR0cmFuc2xhdGlvbnMsXG5cdFx0dHJhbnNsYXRvcixcblx0fSlcblxuXHRjb25zdCBlZGl0RXZlbnQgPSB1c2VDYWxsYmFjayhcblx0XHQoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHtcblx0XHRcdGNhbGVuZGFyRW5naW5lLnNldFNlbGVjdGVkRXZlbnQoZXZlbnQpXG5cdFx0XHRjYWxlbmRhckVuZ2luZS5zZXRJc0V2ZW50Rm9ybU9wZW4odHJ1ZSlcblx0XHR9LFxuXHRcdFtjYWxlbmRhckVuZ2luZV1cblx0KVxuXG5cdC8vIEN1c3RvbSBoYW5kbGVycyB0aGF0IGNhbGwgZXh0ZXJuYWwgY2FsbGJhY2tzXG5cdGNvbnN0IGhhbmRsZUV2ZW50Q2xpY2sgPSB1c2VDYWxsYmFjayhcblx0XHQoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHtcblx0XHRcdGlmIChkaXNhYmxlRXZlbnRDbGljaykge1xuXHRcdFx0XHRyZXR1cm5cblx0XHRcdH1cblx0XHRcdGlmIChvbkV2ZW50Q2xpY2spIHtcblx0XHRcdFx0b25FdmVudENsaWNrKGV2ZW50KVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZWRpdEV2ZW50KGV2ZW50KVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0W2Rpc2FibGVFdmVudENsaWNrLCBvbkV2ZW50Q2xpY2ssIGVkaXRFdmVudF1cblx0KVxuXG5cdGNvbnN0IGhhbmRsZURhdGVDbGljayA9IHVzZUNhbGxiYWNrKFxuXHRcdChpbmZvOiBDZWxsQ2xpY2tJbmZvKSA9PiB7XG5cdFx0XHRpZiAoZGlzYWJsZUNlbGxDbGljaykge1xuXHRcdFx0XHRyZXR1cm5cblx0XHRcdH1cblxuXHRcdFx0aWYgKG9uQ2VsbENsaWNrKSB7XG5cdFx0XHRcdG9uQ2VsbENsaWNrKGluZm8pXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjYWxlbmRhckVuZ2luZS5vcGVuRXZlbnRGb3JtKGluZm8pXG5cdFx0XHR9XG5cdFx0fSxcblx0XHRbb25DZWxsQ2xpY2ssIGRpc2FibGVDZWxsQ2xpY2ssIGNhbGVuZGFyRW5naW5lXVxuXHQpXG5cblx0Ly8gQ3JlYXRlIHRoZSBjb250ZXh0IHZhbHVlXG5cdGNvbnN0IGNvbnRleHRWYWx1ZSA9IHVzZU1lbW8oXG5cdFx0KCkgPT4gKHtcblx0XHRcdGN1cnJlbnREYXRlOiBjYWxlbmRhckVuZ2luZS5jdXJyZW50RGF0ZSxcblx0XHRcdHZpZXc6IGNhbGVuZGFyRW5naW5lLnZpZXcsXG5cdFx0XHRldmVudHM6IGNhbGVuZGFyRW5naW5lLmV2ZW50cyxcblx0XHRcdHJhd0V2ZW50czogY2FsZW5kYXJFbmdpbmUucmF3RXZlbnRzLFxuXHRcdFx0Y3VycmVudExvY2FsZTogY2FsZW5kYXJFbmdpbmUuY3VycmVudExvY2FsZSxcblx0XHRcdGlzRXZlbnRGb3JtT3BlbjogY2FsZW5kYXJFbmdpbmUuaXNFdmVudEZvcm1PcGVuLFxuXHRcdFx0c2VsZWN0ZWRFdmVudDogY2FsZW5kYXJFbmdpbmUuc2VsZWN0ZWRFdmVudCxcblx0XHRcdHNlbGVjdGVkRGF0ZTogY2FsZW5kYXJFbmdpbmUuc2VsZWN0ZWREYXRlLFxuXHRcdFx0Zmlyc3REYXlPZldlZWs6IGNhbGVuZGFyRW5naW5lLmZpcnN0RGF5T2ZXZWVrLFxuXHRcdFx0c2V0Q3VycmVudERhdGU6IGNhbGVuZGFyRW5naW5lLnNldEN1cnJlbnREYXRlLFxuXHRcdFx0c2VsZWN0RGF0ZTogY2FsZW5kYXJFbmdpbmUuc2VsZWN0RGF0ZSxcblx0XHRcdHNldFZpZXc6IGNhbGVuZGFyRW5naW5lLnNldFZpZXcsXG5cdFx0XHRuZXh0UGVyaW9kOiBjYWxlbmRhckVuZ2luZS5uZXh0UGVyaW9kLFxuXHRcdFx0cHJldlBlcmlvZDogY2FsZW5kYXJFbmdpbmUucHJldlBlcmlvZCxcblx0XHRcdHRvZGF5OiBjYWxlbmRhckVuZ2luZS50b2RheSxcblx0XHRcdGFkZEV2ZW50OiBjYWxlbmRhckVuZ2luZS5hZGRFdmVudCxcblx0XHRcdHVwZGF0ZUV2ZW50OiBjYWxlbmRhckVuZ2luZS51cGRhdGVFdmVudCxcblx0XHRcdHVwZGF0ZVJlY3VycmluZ0V2ZW50OiBjYWxlbmRhckVuZ2luZS51cGRhdGVSZWN1cnJpbmdFdmVudCxcblx0XHRcdGRlbGV0ZUV2ZW50OiBjYWxlbmRhckVuZ2luZS5kZWxldGVFdmVudCxcblx0XHRcdGRlbGV0ZVJlY3VycmluZ0V2ZW50OiBjYWxlbmRhckVuZ2luZS5kZWxldGVSZWN1cnJpbmdFdmVudCxcblx0XHRcdG9wZW5FdmVudEZvcm06IGNhbGVuZGFyRW5naW5lLm9wZW5FdmVudEZvcm0sXG5cdFx0XHRjbG9zZUV2ZW50Rm9ybTogY2FsZW5kYXJFbmdpbmUuY2xvc2VFdmVudEZvcm0sXG5cdFx0XHRnZXRFdmVudHNGb3JEYXRlUmFuZ2U6IGNhbGVuZGFyRW5naW5lLmdldEV2ZW50c0ZvckRhdGVSYW5nZSxcblx0XHRcdGZpbmRQYXJlbnRSZWN1cnJpbmdFdmVudDogY2FsZW5kYXJFbmdpbmUuZmluZFBhcmVudFJlY3VycmluZ0V2ZW50LFxuXHRcdFx0cmVuZGVyRXZlbnQsXG5cdFx0XHRvbkV2ZW50Q2xpY2s6IGhhbmRsZUV2ZW50Q2xpY2ssXG5cdFx0XHRvbkNlbGxDbGljazogaGFuZGxlRGF0ZUNsaWNrLFxuXHRcdFx0bG9jYWxlLFxuXHRcdFx0dGltZXpvbmUsXG5cdFx0XHRkaXNhYmxlQ2VsbENsaWNrLFxuXHRcdFx0ZGlzYWJsZUV2ZW50Q2xpY2ssXG5cdFx0XHRkaXNhYmxlRHJhZ0FuZERyb3AsXG5cdFx0XHRkYXlNYXhFdmVudHMsXG5cdFx0XHRldmVudFNwYWNpbmcsXG5cdFx0XHRzdGlja3lWaWV3SGVhZGVyLFxuXHRcdFx0dmlld0hlYWRlckNsYXNzTmFtZSxcblx0XHRcdGhlYWRlckNvbXBvbmVudCxcblx0XHRcdGhlYWRlckNsYXNzTmFtZSxcblx0XHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0XHRyZW5kZXJFdmVudEZvcm0sXG5cdFx0XHR0OiBjYWxlbmRhckVuZ2luZS50LFxuXHRcdFx0dGltZUZvcm1hdCxcblx0XHRcdGNsYXNzZXNPdmVycmlkZSxcblx0XHRcdHJlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yLFxuXHRcdFx0aGlkZU5vbkJ1c2luZXNzSG91cnMsXG5cdFx0fSksXG5cdFx0W1xuXHRcdFx0Y2FsZW5kYXJFbmdpbmUsXG5cdFx0XHRyZW5kZXJFdmVudCxcblx0XHRcdGhhbmRsZUV2ZW50Q2xpY2ssXG5cdFx0XHRoYW5kbGVEYXRlQ2xpY2ssXG5cdFx0XHRsb2NhbGUsXG5cdFx0XHR0aW1lem9uZSxcblx0XHRcdGRpc2FibGVDZWxsQ2xpY2ssXG5cdFx0XHRkaXNhYmxlRXZlbnRDbGljayxcblx0XHRcdGRpc2FibGVEcmFnQW5kRHJvcCxcblx0XHRcdGRheU1heEV2ZW50cyxcblx0XHRcdGV2ZW50U3BhY2luZyxcblx0XHRcdHN0aWNreVZpZXdIZWFkZXIsXG5cdFx0XHR2aWV3SGVhZGVyQ2xhc3NOYW1lLFxuXHRcdFx0aGVhZGVyQ29tcG9uZW50LFxuXHRcdFx0aGVhZGVyQ2xhc3NOYW1lLFxuXHRcdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRcdHJlbmRlckV2ZW50Rm9ybSxcblx0XHRcdHRpbWVGb3JtYXQsXG5cdFx0XHRjbGFzc2VzT3ZlcnJpZGUsXG5cdFx0XHRyZW5kZXJDdXJyZW50VGltZUluZGljYXRvcixcblx0XHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzLFxuXHRcdF1cblx0KVxuXG5cdHJldHVybiAoXG5cdFx0PENhbGVuZGFyQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17Y29udGV4dFZhbHVlfT5cblx0XHRcdHtjaGlsZHJlbn1cblx0XHQ8L0NhbGVuZGFyQ29udGV4dC5Qcm92aWRlcj5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEFuaW1hdGVkU2VjdGlvbiB9IGZyb20gJ0AvY29tcG9uZW50cy9hbmltYXRpb25zL2FuaW1hdGVkLXNlY3Rpb24nXG5pbXBvcnQgeyBDYWxlbmRhckRuZENvbnRleHQgfSBmcm9tICdAL2NvbXBvbmVudHMvZHJhZy1hbmQtZHJvcC9jYWxlbmRhci1kbmQtY29udGV4dCdcbmltcG9ydCB7IEV2ZW50Rm9ybURpYWxvZyB9IGZyb20gJ0AvY29tcG9uZW50cy9ldmVudC1mb3JtL2V2ZW50LWZvcm0tZGlhbG9nJ1xuaW1wb3J0IHsgSGVhZGVyIH0gZnJvbSAnQC9jb21wb25lbnRzL2hlYWRlcidcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCBEYXlWaWV3IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvY29tcG9uZW50cy9kYXktdmlldy9kYXktdmlldydcbmltcG9ydCB7IE1vbnRoVmlldyB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvY29tcG9uZW50cy9tb250aC12aWV3L21vbnRoLXZpZXcnXG5pbXBvcnQgV2Vla1ZpZXcgZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci9jb21wb25lbnRzL3dlZWstdmlldy93ZWVrLXZpZXcnXG5pbXBvcnQgWWVhclZpZXcgZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci9jb21wb25lbnRzL3llYXItdmlldy95ZWFyLXZpZXcnXG5pbXBvcnQgeyB1c2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcbmltcG9ydCB7IENhbGVuZGFyUHJvdmlkZXIgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvcHJvdmlkZXInXG4vLyBveGxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZHVwbGljYXRlc1xuaW1wb3J0ICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB0eXBlIHtcblx0SWxhbXlDYWxlbmRhclByb3BFdmVudCxcblx0SWxhbXlDYWxlbmRhclByb3BzLFxufSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL3R5cGVzJ1xuaW1wb3J0IHtcblx0REFZX01BWF9FVkVOVFNfREVGQVVMVCxcblx0R0FQX0JFVFdFRU5fRUxFTUVOVFMsXG5cdFdFRUtfREFZU19OVU1CRVJfTUFQLFxufSBmcm9tICdAL2xpYi9jb25zdGFudHMnXG5pbXBvcnQgeyBub3JtYWxpemVFdmVudHMsIHNhZmVEYXRlIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmNvbnN0IENhbGVuZGFyQ29udGVudDogUmVhY3QuRkMgPSAoKSA9PiB7XG5cdGNvbnN0IHsgdmlldywgZGF5TWF4RXZlbnRzIH0gPSB1c2VDYWxlbmRhckNvbnRleHQoKVxuXG5cdGNvbnN0IHZpZXdNYXAgPSB7XG5cdFx0bW9udGg6IDxNb250aFZpZXcgZGF5TWF4RXZlbnRzPXtkYXlNYXhFdmVudHN9IGtleT1cIm1vbnRoXCIgLz4sXG5cdFx0d2VlazogPFdlZWtWaWV3IGtleT1cIndlZWtcIiAvPixcblx0XHRkYXk6IDxEYXlWaWV3IGtleT1cImRheVwiIC8+LFxuXHRcdHllYXI6IDxZZWFyVmlldyBrZXk9XCJ5ZWFyXCIgLz4sXG5cdH1cblxuXHRyZXR1cm4gKFxuXHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCB3LWZ1bGwgaC1mdWxsXCIgZGF0YS10ZXN0aWQ9XCJpbGFteS1jYWxlbmRhclwiPlxuXHRcdFx0PEhlYWRlciBjbGFzc05hbWU9XCJwLTFcIiAvPlxuXHRcdFx0ey8qIENhbGVuZGFyIEJvZHkgd2l0aCBBbmltYXRlUHJlc2VuY2UgZm9yIHZpZXcgdHJhbnNpdGlvbnMgKi99XG5cdFx0XHQ8Q2FsZW5kYXJEbmRDb250ZXh0PlxuXHRcdFx0XHQ8QW5pbWF0ZWRTZWN0aW9uXG5cdFx0XHRcdFx0Y2xhc3NOYW1lPVwidy1mdWxsIGgtW2NhbGMoMTAwJS0zLjVyZW0pXVwiXG5cdFx0XHRcdFx0ZGlyZWN0aW9uPVwiaG9yaXpvbnRhbFwiXG5cdFx0XHRcdFx0dHJhbnNpdGlvbktleT17dmlld31cblx0XHRcdFx0PlxuXHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiYm9yZGVyIGgtZnVsbCB3LWZ1bGxcIiBkYXRhLXRlc3RpZD1cImNhbGVuZGFyLWJvZHlcIj5cblx0XHRcdFx0XHRcdHt2aWV3TWFwW3ZpZXddfVxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8L0FuaW1hdGVkU2VjdGlvbj5cblx0XHRcdDwvQ2FsZW5kYXJEbmRDb250ZXh0PlxuXHRcdFx0PEV2ZW50Rm9ybURpYWxvZyAvPlxuXHRcdDwvZGl2PlxuXHQpXG59XG5cbmV4cG9ydCBjb25zdCBJbGFteUNhbGVuZGFyOiBSZWFjdC5GQzxJbGFteUNhbGVuZGFyUHJvcHM+ID0gKHtcblx0ZXZlbnRzLFxuXHRmaXJzdERheU9mV2VlayA9ICdzdW5kYXknLFxuXHRpbml0aWFsVmlldyA9ICdtb250aCcsXG5cdGluaXRpYWxEYXRlLFxuXHRkYXlNYXhFdmVudHMgPSBEQVlfTUFYX0VWRU5UU19ERUZBVUxULFxuXHRldmVudFNwYWNpbmcgPSBHQVBfQkVUV0VFTl9FTEVNRU5UUyxcblx0c3RpY2t5Vmlld0hlYWRlciA9IHRydWUsXG5cdHZpZXdIZWFkZXJDbGFzc05hbWUgPSAnJyxcblx0dGltZUZvcm1hdCA9ICcxMi1ob3VyJyxcblx0aGlkZU5vbkJ1c2luZXNzSG91cnMgPSBmYWxzZSxcblx0Li4ucHJvcHNcbn0pID0+IHtcblx0cmV0dXJuIChcblx0XHQ8Q2FsZW5kYXJQcm92aWRlclxuXHRcdFx0ZGF5TWF4RXZlbnRzPXtkYXlNYXhFdmVudHN9XG5cdFx0XHRldmVudFNwYWNpbmc9e2V2ZW50U3BhY2luZ31cblx0XHRcdGV2ZW50cz17bm9ybWFsaXplRXZlbnRzPElsYW15Q2FsZW5kYXJQcm9wRXZlbnQsIENhbGVuZGFyRXZlbnQ+KGV2ZW50cyl9XG5cdFx0XHRmaXJzdERheU9mV2Vlaz17V0VFS19EQVlTX05VTUJFUl9NQVBbZmlyc3REYXlPZldlZWtdfVxuXHRcdFx0aGlkZU5vbkJ1c2luZXNzSG91cnM9e2hpZGVOb25CdXNpbmVzc0hvdXJzfVxuXHRcdFx0aW5pdGlhbERhdGU9e3NhZmVEYXRlKGluaXRpYWxEYXRlKX1cblx0XHRcdGluaXRpYWxWaWV3PXtpbml0aWFsVmlld31cblx0XHRcdHN0aWNreVZpZXdIZWFkZXI9e3N0aWNreVZpZXdIZWFkZXJ9XG5cdFx0XHR0aW1lRm9ybWF0PXt0aW1lRm9ybWF0fVxuXHRcdFx0dmlld0hlYWRlckNsYXNzTmFtZT17dmlld0hlYWRlckNsYXNzTmFtZX1cblx0XHRcdHsuLi5wcm9wc31cblx0XHQ+XG5cdFx0XHQ8Q2FsZW5kYXJDb250ZW50IC8+XG5cdFx0PC9DYWxlbmRhclByb3ZpZGVyPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgSG9yaXpvbnRhbEdyaWQgfSBmcm9tICdAL2NvbXBvbmVudHMvaG9yaXpvbnRhbC1ncmlkL2hvcml6b250YWwtZ3JpZCdcbmltcG9ydCB7IHVzZVJlc291cmNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb250ZXh0cy9yZXNvdXJjZS1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5cbmludGVyZmFjZSBSZXNvdXJjZUV2ZW50R3JpZFByb3BzIHtcblx0LyoqXG5cdCAqIEFycmF5IG9mIGRheXMgdG8gZGlzcGxheSBpbiB0aGUgZ3JpZFxuXHQgKi9cblx0ZGF5czogZGF5anMuRGF5anNbXSB8IGRheWpzLkRheWpzW11bXVxuXHQvKiogVGhlIHR5cGUgb2YgZ3JpZCB0byBkaXNwbGF5IC0gJ2RheScgZm9yIGRheSB2aWV3LCAnaG91cicgZm9yIHdlZWsgdmlld1xuXHQgKiAoYWZmZWN0cyBldmVudCBwb3NpdGlvbmluZyBsb2dpYylcblx0ICovXG5cdGdyaWRUeXBlPzogJ2RheScgfCAnaG91cidcblx0LyoqXG5cdCAqIENoaWxkcmVuIHdpbGwgYmUgcmVuZGVyZWQgYXMgaGVhZGVycyBhYm92ZSB0aGUgZ3JpZFxuXHQgKiAoZS5nLiwgZm9yIGRheSBuYW1lcyBpbiBtb250aCB2aWV3KVxuXHQgKi9cblx0Y2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGVcblx0Y2xhc3Nlcz86IHsgaGVhZGVyPzogc3RyaW5nOyBib2R5Pzogc3RyaW5nOyBzY3JvbGw/OiBzdHJpbmc7IGNlbGw/OiBzdHJpbmcgfVxufVxuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VFdmVudEdyaWQ6IFJlYWN0LkZDPFJlc291cmNlRXZlbnRHcmlkUHJvcHM+ID0gKHtcblx0ZGF5cyxcblx0Z3JpZFR5cGUgPSAnZGF5Jyxcblx0Y2hpbGRyZW4sXG5cdGNsYXNzZXMsXG59KSA9PiB7XG5cdGNvbnN0IHsgZ2V0VmlzaWJsZVJlc291cmNlcyB9ID0gdXNlUmVzb3VyY2VDYWxlbmRhckNvbnRleHQoKVxuXG5cdGNvbnN0IHZpc2libGVSZXNvdXJjZXMgPSBnZXRWaXNpYmxlUmVzb3VyY2VzKClcblxuXHRjb25zdCBjb2x1bW5zID0gZGF5cy5tYXAoKGRheSkgPT4ge1xuXHRcdGNvbnN0IGlzQXJyYXkgPSBBcnJheS5pc0FycmF5KGRheSlcblx0XHRyZXR1cm4ge1xuXHRcdFx0aWQ6IGBjb2wtJHtpc0FycmF5ID8gZGF5WzBdPy5mb3JtYXQoJ1lZWVktTU0tREQnKSA6IGRheS50b0lTT1N0cmluZygpfWAsXG5cdFx0XHRkYXk6IGlzQXJyYXkgPyB1bmRlZmluZWQgOiBkYXksXG5cdFx0XHRkYXlzOiBpc0FycmF5ID8gZGF5IDogdW5kZWZpbmVkLFxuXHRcdFx0Y2xhc3NOYW1lOiBjbGFzc2VzPy5jZWxsLFxuXHRcdFx0Z3JpZFR5cGUsXG5cdFx0fVxuXHR9KVxuXG5cdGNvbnN0IHJvd3MgPSB2aXNpYmxlUmVzb3VyY2VzLm1hcCgocmVzb3VyY2UpID0+ICh7XG5cdFx0aWQ6IHJlc291cmNlLmlkLFxuXHRcdHRpdGxlOiByZXNvdXJjZS50aXRsZSxcblx0XHRyZXNvdXJjZTogcmVzb3VyY2UsXG5cdFx0Y29sdW1ucyxcblx0fSkpXG5cblx0cmV0dXJuIChcblx0XHQ8SG9yaXpvbnRhbEdyaWRcblx0XHRcdGNsYXNzZXM9e2NsYXNzZXN9XG5cdFx0XHRkYXlOdW1iZXJIZWlnaHQ9ezB9XG5cdFx0XHRncmlkVHlwZT17Z3JpZFR5cGV9XG5cdFx0XHRyb3dzPXtyb3dzfVxuXHRcdD5cblx0XHRcdHtjaGlsZHJlbn1cblx0XHQ8L0hvcml6b250YWxHcmlkPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQW5pbWF0ZWRTZWN0aW9uIH0gZnJvbSAnQC9jb21wb25lbnRzL2FuaW1hdGlvbnMvYW5pbWF0ZWQtc2VjdGlvbidcbmltcG9ydCB0eXBlIHsgQnVzaW5lc3NIb3VycyB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB7IGdldFZpZXdIb3VycyB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvdXRpbHMvdmlldy1ob3VycydcbmltcG9ydCB7IFJlc291cmNlRXZlbnRHcmlkIH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL3Jlc291cmNlLWV2ZW50LWdyaWQnXG5pbXBvcnQgeyB1c2VSZXNvdXJjZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29udGV4dHMvcmVzb3VyY2UtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmV4cG9ydCBjb25zdCBSZXNvdXJjZURheUhvcml6b250YWw6IFJlYWN0LkZDID0gKCkgPT4ge1xuXHRjb25zdCB7XG5cdFx0Y3VycmVudERhdGUsXG5cdFx0dCxcblx0XHRjdXJyZW50TG9jYWxlLFxuXHRcdHRpbWVGb3JtYXQsXG5cdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRoaWRlTm9uQnVzaW5lc3NIb3Vycyxcblx0XHRnZXRWaXNpYmxlUmVzb3VyY2VzLFxuXHR9ID0gdXNlUmVzb3VyY2VDYWxlbmRhckNvbnRleHQoKVxuXG5cdGNvbnN0IHJlc291cmNlcyA9IGdldFZpc2libGVSZXNvdXJjZXMoKVxuXG5cdC8vIEdlbmVyYXRlIHRpbWUgY29sdW1ucyAoaG91cmx5IHNsb3RzKVxuXHRjb25zdCBkYXlIb3VycyA9IGdldFZpZXdIb3Vycyh7XG5cdFx0cmVmZXJlbmNlRGF0ZTogY3VycmVudERhdGUsXG5cdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRoaWRlTm9uQnVzaW5lc3NIb3Vycyxcblx0XHRhbGxEYXRlczogW2N1cnJlbnREYXRlXSxcblx0XHRyZXNvdXJjZUJ1c2luZXNzSG91cnM6IHJlc291cmNlc1xuXHRcdFx0Lm1hcCgocikgPT4gci5idXNpbmVzc0hvdXJzKVxuXHRcdFx0LmZpbHRlcihCb29sZWFuKSBhcyAoQnVzaW5lc3NIb3VycyB8IEJ1c2luZXNzSG91cnNbXSlbXSxcblx0fSlcblxuXHRyZXR1cm4gKFxuXHRcdDxSZXNvdXJjZUV2ZW50R3JpZFxuXHRcdFx0Y2xhc3Nlcz17e1xuXHRcdFx0XHRoZWFkZXI6ICdtaW4tdy1mdWxsJyxcblx0XHRcdFx0Ym9keTogJ21pbi13LWZ1bGwnLFxuXHRcdFx0XHRjZWxsOiAnbWluLXctMjAgZmxleC0xJyxcblx0XHRcdH19XG5cdFx0XHRkYXlzPXtkYXlIb3Vyc31cblx0XHRcdGdyaWRUeXBlPVwiaG91clwiXG5cdFx0PlxuXHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ3LTIwIHNtOnctNDAgYm9yZGVyLWIgYm9yZGVyLXIgc2hyaW5rLTAgZmxleCBqdXN0aWZ5LWNlbnRlciBpdGVtcy1jZW50ZXIgc3RpY2t5IHRvcC0wIGxlZnQtMCBiZy1iYWNrZ3JvdW5kIHotMjBcIj5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtXCI+e3QoJ3Jlc291cmNlcycpfTwvZGl2PlxuXHRcdFx0PC9kaXY+XG5cblx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIGZsZXggZmxleC1jb2xcIj5cblx0XHRcdFx0ey8qIFRpbWUgaGVhZGVyIHJvdyAqL31cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IGgtMTJcIj5cblx0XHRcdFx0XHR7ZGF5SG91cnMubWFwKChjb2wsIGluZGV4KSA9PiB7XG5cdFx0XHRcdFx0XHRjb25zdCBpc05vd0hvdXIgPSBjb2wuaXNTYW1lKGRheWpzKCksICdob3VyJylcblx0XHRcdFx0XHRcdGNvbnN0IGtleSA9IGByZXNvdXJjZS1kYXktaGVhZGVyLSR7Y29sLnRvSVNPU3RyaW5nKCl9YFxuXG5cdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHQ8QW5pbWF0ZWRTZWN0aW9uXG5cdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdFx0XHRcdCdtaW4tdy0yMCBmbGV4LTEgYm9yZGVyLWIgYm9yZGVyLXIgbGFzdDpib3JkZXItci0wIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRleHQteHMgc2hyaW5rLTAnLFxuXHRcdFx0XHRcdFx0XHRcdFx0aXNOb3dIb3VyICYmICdiZy1ibHVlLTUwIHRleHQtYmx1ZS02MDAgZm9udC1tZWRpdW0nXG5cdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD17YHJlc291cmNlLWRheS10aW1lLWxhYmVsLSR7Y29sLmZvcm1hdCgnSEgnKX1gfVxuXHRcdFx0XHRcdFx0XHRcdGRlbGF5PXtpbmRleCAqIDAuMDV9XG5cdFx0XHRcdFx0XHRcdFx0a2V5PXtgJHtrZXl9LWFuaW1hdGVkYH1cblx0XHRcdFx0XHRcdFx0XHR0cmFuc2l0aW9uS2V5PXtgJHtrZXl9LW1vdGlvbmB9XG5cdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHR7SW50bC5EYXRlVGltZUZvcm1hdChjdXJyZW50TG9jYWxlLCB7XG5cdFx0XHRcdFx0XHRcdFx0XHRob3VyOiAnbnVtZXJpYycsXG5cdFx0XHRcdFx0XHRcdFx0XHRob3VyMTI6IHRpbWVGb3JtYXQgPT09ICcxMi1ob3VyJyxcblx0XHRcdFx0XHRcdFx0XHR9KS5mb3JtYXQoY29sLnRvRGF0ZSgpKX1cblx0XHRcdFx0XHRcdFx0PC9BbmltYXRlZFNlY3Rpb24+XG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0fSl9XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0PC9kaXY+XG5cdFx0PC9SZXNvdXJjZUV2ZW50R3JpZD5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgeyBBbGxEYXlDZWxsIH0gZnJvbSAnQC9jb21wb25lbnRzL2FsbC1kYXktcm93L2FsbC1kYXktY2VsbCdcbmltcG9ydCB7IEFsbERheVJvdyB9IGZyb20gJ0AvY29tcG9uZW50cy9hbGwtZGF5LXJvdy9hbGwtZGF5LXJvdydcbmltcG9ydCB7IFJlc291cmNlQ2VsbCB9IGZyb20gJ0AvY29tcG9uZW50cy9yZXNvdXJjZS1jZWxsJ1xuaW1wb3J0IHR5cGUgeyBCdXNpbmVzc0hvdXJzIH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHsgVmVydGljYWxHcmlkIH0gZnJvbSAnQC9jb21wb25lbnRzL3ZlcnRpY2FsLWdyaWQvdmVydGljYWwtZ3JpZCdcbmltcG9ydCB7IGdldFZpZXdIb3VycyB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvdXRpbHMvdmlldy1ob3VycydcbmltcG9ydCB7IHVzZVJlc291cmNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb250ZXh0cy9yZXNvdXJjZS1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5cbmV4cG9ydCBjb25zdCBSZXNvdXJjZURheVZlcnRpY2FsOiBSZWFjdC5GQyA9ICgpID0+IHtcblx0Y29uc3Qge1xuXHRcdGN1cnJlbnREYXRlLFxuXHRcdGdldFZpc2libGVSZXNvdXJjZXMsXG5cdFx0Y3VycmVudExvY2FsZSxcblx0XHR0aW1lRm9ybWF0LFxuXHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0aGlkZU5vbkJ1c2luZXNzSG91cnMsXG5cdH0gPSB1c2VSZXNvdXJjZUNhbGVuZGFyQ29udGV4dCgpXG5cblx0Y29uc3QgcmVzb3VyY2VzID0gZ2V0VmlzaWJsZVJlc291cmNlcygpXG5cdGNvbnN0IGhvdXJzID0gZ2V0Vmlld0hvdXJzKHtcblx0XHRyZWZlcmVuY2VEYXRlOiBjdXJyZW50RGF0ZSxcblx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzLFxuXHRcdGFsbERhdGVzOiBbY3VycmVudERhdGVdLFxuXHRcdHJlc291cmNlQnVzaW5lc3NIb3VyczogcmVzb3VyY2VzXG5cdFx0XHQubWFwKChyKSA9PiByLmJ1c2luZXNzSG91cnMpXG5cdFx0XHQuZmlsdGVyKEJvb2xlYW4pIGFzIChCdXNpbmVzc0hvdXJzIHwgQnVzaW5lc3NIb3Vyc1tdKVtdLFxuXHR9KVxuXG5cdGNvbnN0IGZpcnN0Q29sID0ge1xuXHRcdGlkOiAndGltZS1jb2wnLFxuXHRcdGRheTogdW5kZWZpbmVkLFxuXHRcdGRheXM6IGhvdXJzLFxuXHRcdGNsYXNzTmFtZTpcblx0XHRcdCdzaHJpbmstMCB3LTE2IG1pbi13LTE2IG1heC13LTE2IHN0aWNreSBsZWZ0LTAgYmctYmFja2dyb3VuZCB6LTIwJyxcblx0XHRncmlkVHlwZTogJ2hvdXInIGFzIGNvbnN0LFxuXHRcdG5vRXZlbnRzOiB0cnVlLFxuXHRcdHJlbmRlckNlbGw6IChkYXRlOiBkYXlqcy5EYXlqcykgPT4gKFxuXHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LW11dGVkLWZvcmVncm91bmQgcC0yIHRleHQtcmlnaHQgdGV4dC1bMTBweF0gc206dGV4dC14cyBmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlclwiPlxuXHRcdFx0XHR7SW50bC5EYXRlVGltZUZvcm1hdChjdXJyZW50TG9jYWxlLCB7XG5cdFx0XHRcdFx0aG91cjogJ251bWVyaWMnLFxuXHRcdFx0XHRcdGhvdXIxMjogdGltZUZvcm1hdCA9PT0gJzEyLWhvdXInLFxuXHRcdFx0XHR9KS5mb3JtYXQoZGF0ZS50b0RhdGUoKSl9XG5cdFx0XHQ8L2Rpdj5cblx0XHQpLFxuXHR9XG5cblx0Y29uc3QgY29sdW1ucyA9IHJlc291cmNlcy5tYXAoKHJlc291cmNlKSA9PiAoe1xuXHRcdGlkOiBgZGF5LWNvbC0ke2N1cnJlbnREYXRlLmZvcm1hdCgnWVlZWS1NTS1ERCcpfS1yZXNvdXJjZS0ke3Jlc291cmNlLmlkfWAsXG5cdFx0cmVzb3VyY2VJZDogcmVzb3VyY2UuaWQsXG5cdFx0cmVzb3VyY2UsXG5cdFx0ZGF5czogaG91cnMsXG5cdFx0ZGF5OiBjdXJyZW50RGF0ZSxcblx0XHRncmlkVHlwZTogJ2hvdXInIGFzIGNvbnN0LFxuXHR9KSlcblxuXHRyZXR1cm4gKFxuXHRcdDxWZXJ0aWNhbEdyaWRcblx0XHRcdGFsbERheVJvdz17XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCB3LWZ1bGxcIj5cblx0XHRcdFx0XHQ8QWxsRGF5Q2VsbCAvPlxuXHRcdFx0XHRcdHtyZXNvdXJjZXMubWFwKChyZXNvdXJjZSkgPT4gKFxuXHRcdFx0XHRcdFx0PEFsbERheVJvd1xuXHRcdFx0XHRcdFx0XHRjbGFzc2VzPXt7IGNlbGw6ICdtaW4tdy01MCcgfX1cblx0XHRcdFx0XHRcdFx0ZGF5cz17W2N1cnJlbnREYXRlXX1cblx0XHRcdFx0XHRcdFx0a2V5PXtgcmVzb3VyY2UtYWxsZGF5LXJvdy0ke3Jlc291cmNlLmlkfWB9XG5cdFx0XHRcdFx0XHRcdHJlc291cmNlPXtyZXNvdXJjZX1cblx0XHRcdFx0XHRcdFx0c2hvd1NwYWNlcj17ZmFsc2V9XG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdCkpfVxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdH1cblx0XHRcdGNlbGxTbG90cz17WzAsIDE1LCAzMCwgNDVdfVxuXHRcdFx0Y2xhc3Nlcz17eyBib2R5OiAndy1mdWxsJywgaGVhZGVyOiAndy1mdWxsJyB9fVxuXHRcdFx0Y29sdW1ucz17W2ZpcnN0Q29sLCAuLi5jb2x1bW5zXX1cblx0XHRcdGRhdGEtdGVzdGlkPVwicmVzb3VyY2UtZGF5XCJcblx0XHRcdGdyaWRUeXBlPVwiaG91clwiXG5cdFx0PlxuXHRcdFx0ey8qIEhlYWRlciAqL31cblx0XHRcdDxkaXZcblx0XHRcdFx0Y2xhc3NOYW1lPXsnZmxleCBib3JkZXItYiBoLTEyIGZsZXgtMSd9XG5cdFx0XHRcdGRhdGEtdGVzdGlkPVwicmVzb3VyY2UtbW9udGgtaGVhZGVyXCJcblx0XHRcdD5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJzaHJpbmstMCBib3JkZXItciB3LTE2IHN0aWNreSB0b3AtMCBsZWZ0LTAgYmctYmFja2dyb3VuZCB6LTIwXCIgLz5cblx0XHRcdFx0e3Jlc291cmNlcy5tYXAoKHJlc291cmNlKSA9PiAoXG5cdFx0XHRcdFx0PFJlc291cmNlQ2VsbFxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwibWluLXctNTAgZmxleC0xXCJcblx0XHRcdFx0XHRcdGtleT17YHJlc291cmNlLWNlbGwtJHtyZXNvdXJjZS5pZH1gfVxuXHRcdFx0XHRcdFx0cmVzb3VyY2U9e3Jlc291cmNlfVxuXHRcdFx0XHRcdC8+XG5cdFx0XHRcdCkpfVxuXHRcdFx0PC9kaXY+XG5cdFx0PC9WZXJ0aWNhbEdyaWQ+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VSZXNvdXJjZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29udGV4dHMvcmVzb3VyY2UtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB7IFJlc291cmNlRGF5SG9yaXpvbnRhbCB9IGZyb20gJy4vcmVzb3VyY2UtZGF5LWhvcml6b250YWwnXG5pbXBvcnQgeyBSZXNvdXJjZURheVZlcnRpY2FsIH0gZnJvbSAnLi9yZXNvdXJjZS1kYXktdmVydGljYWwnXG5cbmV4cG9ydCBjb25zdCBSZXNvdXJjZURheVZpZXc6IFJlYWN0LkZDID0gKCkgPT4ge1xuXHRjb25zdCB7IG9yaWVudGF0aW9uIH0gPSB1c2VSZXNvdXJjZUNhbGVuZGFyQ29udGV4dCgpXG5cblx0aWYgKG9yaWVudGF0aW9uID09PSAndmVydGljYWwnKSB7XG5cdFx0cmV0dXJuIDxSZXNvdXJjZURheVZlcnRpY2FsIC8+XG5cdH1cblxuXHRyZXR1cm4gPFJlc291cmNlRGF5SG9yaXpvbnRhbCAvPlxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEFuaW1hdGVkU2VjdGlvbiB9IGZyb20gJ0AvY29tcG9uZW50cy9hbmltYXRpb25zL2FuaW1hdGVkLXNlY3Rpb24nXG5pbXBvcnQgeyBSZXNvdXJjZUV2ZW50R3JpZCB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy9yZXNvdXJjZS1ldmVudC1ncmlkJ1xuaW1wb3J0IHsgdXNlUmVzb3VyY2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbnRleHRzL3Jlc291cmNlLWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGdldE1vbnRoRGF5cyB9IGZyb20gJ0AvbGliL3V0aWxzL2RhdGUtdXRpbHMnXG5cbmV4cG9ydCBjb25zdCBSZXNvdXJjZU1vbnRoSG9yaXpvbnRhbDogUmVhY3QuRkMgPSAoKSA9PiB7XG5cdGNvbnN0IHsgY3VycmVudERhdGUsIHQgfSA9IHVzZVJlc291cmNlQ2FsZW5kYXJDb250ZXh0KClcblxuXHQvLyBHZW5lcmF0ZSBjYWxlbmRhciBncmlkIC0gZGF5cyBvZiB0aGUgbW9udGhcblx0Y29uc3QgbW9udGhEYXlzID0gdXNlTWVtbzxkYXlqcy5EYXlqc1tdPigoKSA9PiB7XG5cdFx0cmV0dXJuIGdldE1vbnRoRGF5cyhjdXJyZW50RGF0ZSlcblx0fSwgW2N1cnJlbnREYXRlXSlcblxuXHRyZXR1cm4gKFxuXHRcdDxSZXNvdXJjZUV2ZW50R3JpZCBkYXlzPXttb250aERheXN9PlxuXHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ3LTIwIHNtOnctNDAgYm9yZGVyLWIgYm9yZGVyLXIgc2hyaW5rLTAgZmxleCBqdXN0aWZ5LWNlbnRlciBpdGVtcy1jZW50ZXIgc3RpY2t5IHRvcC0wIGxlZnQtMCBiZy1iYWNrZ3JvdW5kIHotMjBcIj5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtXCI+e3QoJ3Jlc291cmNlcycpfTwvZGl2PlxuXHRcdFx0PC9kaXY+XG5cblx0XHRcdHttb250aERheXMubWFwKChkYXksIGluZGV4KSA9PiB7XG5cdFx0XHRcdGNvbnN0IGtleSA9IGByZXNvdXJjZS1tb250aC1oZWFkZXItJHtkYXkudG9JU09TdHJpbmcoKX1gXG5cblx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHQ8QW5pbWF0ZWRTZWN0aW9uXG5cdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJ3LTIwIGJvcmRlci1iIGJvcmRlci1yIHNocmluay0wIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGZsZXgtY29sXCJcblx0XHRcdFx0XHRcdGRlbGF5PXtpbmRleCAqIDAuMDV9XG5cdFx0XHRcdFx0XHRrZXk9e2Ake2tleX0tYW5pbWF0ZWRgfVxuXHRcdFx0XHRcdFx0dHJhbnNpdGlvbktleT17YCR7a2V5fS1tb3Rpb25gfVxuXHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidGV4dC14cyBmb250LW1lZGl1bVwiPntkYXkuZm9ybWF0KCdEJyl9PC9kaXY+XG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCI+XG5cdFx0XHRcdFx0XHRcdHtkYXkuZm9ybWF0KCdkZGQnKX1cblx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdDwvQW5pbWF0ZWRTZWN0aW9uPlxuXHRcdFx0XHQpXG5cdFx0XHR9KX1cblx0XHQ8L1Jlc291cmNlRXZlbnRHcmlkPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgUmVzb3VyY2VDZWxsIH0gZnJvbSAnQC9jb21wb25lbnRzL3Jlc291cmNlLWNlbGwnXG5pbXBvcnQgeyBWZXJ0aWNhbEdyaWQgfSBmcm9tICdAL2NvbXBvbmVudHMvdmVydGljYWwtZ3JpZC92ZXJ0aWNhbC1ncmlkJ1xuaW1wb3J0IHsgdXNlUmVzb3VyY2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbnRleHRzL3Jlc291cmNlLWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcblxuZXhwb3J0IGNvbnN0IFJlc291cmNlTW9udGhWZXJ0aWNhbDogUmVhY3QuRkMgPSAoKSA9PiB7XG5cdGNvbnN0IHsgY3VycmVudERhdGUsIGdldFZpc2libGVSZXNvdXJjZXMgfSA9IHVzZVJlc291cmNlQ2FsZW5kYXJDb250ZXh0KClcblxuXHRjb25zdCByZXNvdXJjZXMgPSBnZXRWaXNpYmxlUmVzb3VyY2VzKClcblx0Y29uc3Qgc3RhcnRPZk1vbnRoID0gY3VycmVudERhdGUuc3RhcnRPZignbW9udGgnKVxuXHRjb25zdCBkYXlzSW5Nb250aCA9IEFycmF5LmZyb20oXG5cdFx0eyBsZW5ndGg6IGN1cnJlbnREYXRlLmRheXNJbk1vbnRoKCkgfSxcblx0XHQoXywgaSkgPT4gc3RhcnRPZk1vbnRoLmFkZChpLCAnZGF5Jylcblx0KVxuXG5cdGNvbnN0IGZpcnN0Q29sID0ge1xuXHRcdGlkOiAnZGF0ZS1jb2wnLFxuXHRcdGRheXM6IGRheXNJbk1vbnRoLFxuXHRcdGRheTogdW5kZWZpbmVkLFxuXHRcdGNsYXNzTmFtZTpcblx0XHRcdCdzaHJpbmstMCB3LTE2IG1pbi13LTE2IG1heC13LTE2IHN0aWNreSBsZWZ0LTAgYmctYmFja2dyb3VuZCB6LTIwJyxcblx0XHRncmlkVHlwZTogJ2RheScgYXMgY29uc3QsXG5cdFx0bm9FdmVudHM6IHRydWUsXG5cdFx0cmVuZGVyQ2VsbDogKGRhdGU6IGRheWpzLkRheWpzKSA9PiAoXG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQtbXV0ZWQtZm9yZWdyb3VuZCBwLTIgdGV4dC1yaWdodCB0ZXh0LVsxMHB4XSBzbTp0ZXh0LXhzIGZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyXCI+XG5cdFx0XHRcdDxzcGFuPntkYXRlLmZvcm1hdCgnRCcpfTwvc3Bhbj5cblx0XHRcdFx0PHNwYW4+e2RhdGUuZm9ybWF0KCdkZGQnKX08L3NwYW4+XG5cdFx0XHQ8L2Rpdj5cblx0XHQpLFxuXHR9XG5cblx0Y29uc3QgY29sdW1ucyA9IHJlc291cmNlcy5tYXAoKHJlc291cmNlKSA9PiAoe1xuXHRcdGlkOiBgbW9udGgtY29sLXJlc291cmNlLSR7cmVzb3VyY2UuaWR9YCxcblx0XHRkYXk6IHVuZGVmaW5lZCxcblx0XHRyZXNvdXJjZUlkOiByZXNvdXJjZS5pZCxcblx0XHRkYXlzOiBkYXlzSW5Nb250aCxcblx0XHRncmlkVHlwZTogJ2RheScgYXMgY29uc3QsXG5cdH0pKVxuXG5cdHJldHVybiAoXG5cdFx0PFZlcnRpY2FsR3JpZFxuXHRcdFx0Y2xhc3Nlcz17eyBoZWFkZXI6ICd3LWZ1bGwnLCBib2R5OiAndy1mdWxsJyB9fVxuXHRcdFx0Y29sdW1ucz17W2ZpcnN0Q29sLCAuLi5jb2x1bW5zXX1cblx0XHRcdGRhdGEtdGVzdGlkPVwicmVzb3VyY2UtbW9udGgtdmVydGljYWwtZ3JpZFwiXG5cdFx0PlxuXHRcdFx0ey8qIEhlYWRlciAqL31cblx0XHRcdDxkaXZcblx0XHRcdFx0Y2xhc3NOYW1lPXsnZmxleCBib3JkZXItYiBoLTEyIGZsZXgtMSd9XG5cdFx0XHRcdGRhdGEtdGVzdGlkPVwicmVzb3VyY2UtbW9udGgtaGVhZGVyXCJcblx0XHRcdD5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJzaHJpbmstMCBib3JkZXItciB3LTE2IHN0aWNreSB0b3AtMCBsZWZ0LTAgYmctYmFja2dyb3VuZCB6LTIwXCIgLz5cblx0XHRcdFx0e3Jlc291cmNlcy5tYXAoKHJlc291cmNlKSA9PiAoXG5cdFx0XHRcdFx0PFJlc291cmNlQ2VsbFxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwibWluLXctNTAgZmxleC0xXCJcblx0XHRcdFx0XHRcdGtleT17YHJlc291cmNlLWNlbGwtJHtyZXNvdXJjZS5pZH1gfVxuXHRcdFx0XHRcdFx0cmVzb3VyY2U9e3Jlc291cmNlfVxuXHRcdFx0XHRcdC8+XG5cdFx0XHRcdCkpfVxuXHRcdFx0PC9kaXY+XG5cdFx0PC9WZXJ0aWNhbEdyaWQ+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VSZXNvdXJjZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29udGV4dHMvcmVzb3VyY2UtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB7IFJlc291cmNlTW9udGhIb3Jpem9udGFsIH0gZnJvbSAnLi9yZXNvdXJjZS1tb250aC1ob3Jpem9udGFsJ1xuaW1wb3J0IHsgUmVzb3VyY2VNb250aFZlcnRpY2FsIH0gZnJvbSAnLi9yZXNvdXJjZS1tb250aC12ZXJ0aWNhbCdcblxuZXhwb3J0IGNvbnN0IFJlc291cmNlTW9udGhWaWV3OiBSZWFjdC5GQyA9ICgpID0+IHtcblx0Y29uc3QgeyBvcmllbnRhdGlvbiB9ID0gdXNlUmVzb3VyY2VDYWxlbmRhckNvbnRleHQoKVxuXG5cdGlmIChvcmllbnRhdGlvbiA9PT0gJ3ZlcnRpY2FsJykge1xuXHRcdHJldHVybiA8UmVzb3VyY2VNb250aFZlcnRpY2FsIC8+XG5cdH1cblxuXHRyZXR1cm4gPFJlc291cmNlTW9udGhIb3Jpem9udGFsIC8+XG59XG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQW5pbWF0ZWRTZWN0aW9uIH0gZnJvbSAnQC9jb21wb25lbnRzL2FuaW1hdGlvbnMvYW5pbWF0ZWQtc2VjdGlvbidcbmltcG9ydCB0eXBlIHsgQnVzaW5lc3NIb3VycyB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB7IGdldFZpZXdIb3VycyB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvdXRpbHMvdmlldy1ob3VycydcbmltcG9ydCB7IFJlc291cmNlRXZlbnRHcmlkIH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL3Jlc291cmNlLWV2ZW50LWdyaWQnXG5pbXBvcnQgeyB1c2VSZXNvdXJjZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29udGV4dHMvcmVzb3VyY2UtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgeyBnZXRXZWVrRGF5cyB9IGZyb20gJ0AvbGliL3V0aWxzL2RhdGUtdXRpbHMnXG5cbmV4cG9ydCBjb25zdCBSZXNvdXJjZVdlZWtIb3Jpem9udGFsOiBSZWFjdC5GQyA9ICgpID0+IHtcblx0Y29uc3Qge1xuXHRcdGN1cnJlbnREYXRlLFxuXHRcdGZpcnN0RGF5T2ZXZWVrLFxuXHRcdHQsXG5cdFx0Y3VycmVudExvY2FsZSxcblx0XHR0aW1lRm9ybWF0LFxuXHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0aGlkZU5vbkJ1c2luZXNzSG91cnMsXG5cdFx0Z2V0VmlzaWJsZVJlc291cmNlcyxcblx0fSA9IHVzZVJlc291cmNlQ2FsZW5kYXJDb250ZXh0KClcblxuXHRjb25zdCByZXNvdXJjZXMgPSBnZXRWaXNpYmxlUmVzb3VyY2VzKClcblxuXHQvLyBHZW5lcmF0ZSB3ZWVrIGRheXNcblx0Y29uc3Qgd2Vla0RheXMgPSB1c2VNZW1vKFxuXHRcdCgpID0+IGdldFdlZWtEYXlzKGN1cnJlbnREYXRlLCBmaXJzdERheU9mV2VlayksXG5cdFx0W2N1cnJlbnREYXRlLCBmaXJzdERheU9mV2Vla11cblx0KVxuXG5cdC8vIFJlc291cmNlLXNwZWNpZmljIGJ1c2luZXNzIGhvdXJzIGNvbWJpbmVkXG5cdGNvbnN0IHJlc291cmNlQnVzaW5lc3NIb3VycyA9IHVzZU1lbW8oXG5cdFx0KCkgPT5cblx0XHRcdHJlc291cmNlcy5tYXAoKHIpID0+IHIuYnVzaW5lc3NIb3VycykuZmlsdGVyKEJvb2xlYW4pIGFzIChcblx0XHRcdFx0fCBCdXNpbmVzc0hvdXJzXG5cdFx0XHRcdHwgQnVzaW5lc3NIb3Vyc1tdXG5cdFx0XHQpW10sXG5cdFx0W3Jlc291cmNlc11cblx0KVxuXG5cdC8vIEdlbmVyYXRlIHRpbWUgY29sdW1ucyAoaG91cmx5IHNsb3RzKVxuXHRjb25zdCB3ZWVrSG91cnMgPSB1c2VNZW1vKCgpID0+IHtcblx0XHRyZXR1cm4gd2Vla0RheXMubWFwKChkYXkpID0+XG5cdFx0XHRnZXRWaWV3SG91cnMoe1xuXHRcdFx0XHRyZWZlcmVuY2VEYXRlOiBkYXksXG5cdFx0XHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0XHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzLFxuXHRcdFx0XHRyZXNvdXJjZUJ1c2luZXNzSG91cnMsXG5cdFx0XHR9KVxuXHRcdClcblx0fSwgW3dlZWtEYXlzLCBidXNpbmVzc0hvdXJzLCBoaWRlTm9uQnVzaW5lc3NIb3VycywgcmVzb3VyY2VCdXNpbmVzc0hvdXJzXSlcblxuXHRyZXR1cm4gKFxuXHRcdDxSZXNvdXJjZUV2ZW50R3JpZFxuXHRcdFx0Y2xhc3Nlcz17e1xuXHRcdFx0XHRoZWFkZXI6ICdoLTI0IG1pbi13LWZ1bGwnLFxuXHRcdFx0XHRib2R5OiAnbWluLXctZnVsbCcsXG5cdFx0XHRcdGNlbGw6ICdtaW4tdy0yMCBmbGV4LTEnLFxuXHRcdFx0fX1cblx0XHRcdGRheXM9e3dlZWtIb3Vyc31cblx0XHRcdGdyaWRUeXBlPVwiaG91clwiXG5cdFx0PlxuXHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ3LTIwIHNtOnctNDAgYm9yZGVyLWIgYm9yZGVyLXIgc2hyaW5rLTAgZmxleCBqdXN0aWZ5LWNlbnRlciBpdGVtcy1jZW50ZXIgc3RpY2t5IHRvcC0wIGxlZnQtMCBiZy1iYWNrZ3JvdW5kIHotMjBcIj5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtXCI+e3QoJ3Jlc291cmNlcycpfTwvZGl2PlxuXHRcdFx0PC9kaXY+XG5cblx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIGZsZXggZmxleC1jb2xcIj5cblx0XHRcdFx0ey8qIERheSBoZWFkZXIgcm93ICovfVxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggaC0xMlwiPlxuXHRcdFx0XHRcdHt3ZWVrRGF5cy5tYXAoKGRheSwgaW5kZXgpID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IGlzVG9kYXkgPSBkYXkuaXNTYW1lKGRheWpzKCksICdkYXknKVxuXHRcdFx0XHRcdFx0Y29uc3Qga2V5ID0gYHJlc291cmNlLXdlZWstaGVhZGVyLSR7ZGF5LnRvSVNPU3RyaW5nKCl9LWRheWBcblxuXHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0PEFuaW1hdGVkU2VjdGlvblxuXHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHRcdFx0XHQnc2hyaW5rLTAgYm9yZGVyLXIgbGFzdDpib3JkZXItci0wIGJvcmRlci1iIGZsZXgtMSBmbGV4IGl0ZW1zLWNlbnRlciB0ZXh0LWNlbnRlciBmb250LW1lZGl1bScsXG5cdFx0XHRcdFx0XHRcdFx0XHRpc1RvZGF5ICYmICdiZy1ibHVlLTUwIHRleHQtYmx1ZS02MDAnXG5cdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD1cInJlc291cmNlLXdlZWstZGF5LWhlYWRlclwiXG5cdFx0XHRcdFx0XHRcdFx0ZGVsYXk9e2luZGV4ICogMC4wNX1cblx0XHRcdFx0XHRcdFx0XHRrZXk9e2Ake2tleX0tYW5pbWF0ZWRgfVxuXHRcdFx0XHRcdFx0XHRcdHRyYW5zaXRpb25LZXk9e2Ake2tleX0tbW90aW9uYH1cblx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwic3RpY2t5IGxlZnQtMS8yXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQtc21cIj57ZGF5LmZvcm1hdCgnZGRkJyl9PC9kaXY+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHtkYXkuZm9ybWF0KCdNL0QnKX1cblx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHQ8L0FuaW1hdGVkU2VjdGlvbj5cblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHR9KX1cblx0XHRcdFx0PC9kaXY+XG5cblx0XHRcdFx0ey8qIFRpbWUgaGVhZGVyIHJvdyAqL31cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IGgtMTIgYm9yZGVyLWJcIj5cblx0XHRcdFx0XHR7d2Vla0hvdXJzLmZsYXQoKS5tYXAoKGNvbCwgaW5kZXgpID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IGlzTm93SG91ciA9IGNvbC5pc1NhbWUoZGF5anMoKSwgJ2hvdXInKVxuXHRcdFx0XHRcdFx0Y29uc3Qga2V5ID0gYHJlc291cmNlLXdlZWstaGVhZGVyLSR7Y29sLnRvSVNPU3RyaW5nKCl9LWhvdXJgXG5cblx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdDxBbmltYXRlZFNlY3Rpb25cblx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0XHRcdFx0J21pbi13LTIwIGZsZXgtMSBib3JkZXItciBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB0ZXh0LXhzIHNocmluay0wJyxcblx0XHRcdFx0XHRcdFx0XHRcdGlzTm93SG91ciAmJiAnYmctYmx1ZS01MCB0ZXh0LWJsdWUtNjAwIGZvbnQtbWVkaXVtJ1xuXHRcdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e2ByZXNvdXJjZS13ZWVrLXRpbWUtbGFiZWwtJHtjb2wuZm9ybWF0KCdISCcpfWB9XG5cdFx0XHRcdFx0XHRcdFx0ZGVsYXk9e2luZGV4ICogMC4wMDV9XG5cdFx0XHRcdFx0XHRcdFx0a2V5PXtgJHtrZXl9LWFuaW1hdGVkYH1cblx0XHRcdFx0XHRcdFx0XHR0cmFuc2l0aW9uS2V5PXtgJHtrZXl9LW1vdGlvbmB9XG5cdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHR7SW50bC5EYXRlVGltZUZvcm1hdChjdXJyZW50TG9jYWxlLCB7XG5cdFx0XHRcdFx0XHRcdFx0XHRob3VyOiAnbnVtZXJpYycsXG5cdFx0XHRcdFx0XHRcdFx0XHRob3VyMTI6IHRpbWVGb3JtYXQgPT09ICcxMi1ob3VyJyxcblx0XHRcdFx0XHRcdFx0XHR9KS5mb3JtYXQoY29sLnRvRGF0ZSgpKX1cblx0XHRcdFx0XHRcdFx0PC9BbmltYXRlZFNlY3Rpb24+XG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0fSl9XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0PC9kaXY+XG5cdFx0PC9SZXNvdXJjZUV2ZW50R3JpZD5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEFsbERheUNlbGwgfSBmcm9tICdAL2NvbXBvbmVudHMvYWxsLWRheS1yb3cvYWxsLWRheS1jZWxsJ1xuaW1wb3J0IHsgQWxsRGF5Um93IH0gZnJvbSAnQC9jb21wb25lbnRzL2FsbC1kYXktcm93L2FsbC1kYXktcm93J1xuaW1wb3J0IHsgQW5pbWF0ZWRTZWN0aW9uIH0gZnJvbSAnQC9jb21wb25lbnRzL2FuaW1hdGlvbnMvYW5pbWF0ZWQtc2VjdGlvbidcbmltcG9ydCB7IFJlc291cmNlQ2VsbCB9IGZyb20gJ0AvY29tcG9uZW50cy9yZXNvdXJjZS1jZWxsJ1xuaW1wb3J0IHR5cGUgeyBCdXNpbmVzc0hvdXJzIH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHsgVmVydGljYWxHcmlkIH0gZnJvbSAnQC9jb21wb25lbnRzL3ZlcnRpY2FsLWdyaWQvdmVydGljYWwtZ3JpZCdcbmltcG9ydCB7IGdldFZpZXdIb3VycyB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvdXRpbHMvdmlldy1ob3VycydcbmltcG9ydCB7IHVzZVJlc291cmNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb250ZXh0cy9yZXNvdXJjZS1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgZ2V0V2Vla0RheXMgfSBmcm9tICdAL2xpYi91dGlscy9kYXRlLXV0aWxzJ1xuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VXZWVrVmVydGljYWw6IFJlYWN0LkZDID0gKCkgPT4ge1xuXHRjb25zdCB7XG5cdFx0Y3VycmVudERhdGUsXG5cdFx0Z2V0VmlzaWJsZVJlc291cmNlcyxcblx0XHRmaXJzdERheU9mV2Vlayxcblx0XHRjdXJyZW50TG9jYWxlLFxuXHRcdHRpbWVGb3JtYXQsXG5cdFx0dCxcblx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzLFxuXHR9ID0gdXNlUmVzb3VyY2VDYWxlbmRhckNvbnRleHQoKVxuXG5cdGNvbnN0IHJlc291cmNlcyA9IGdldFZpc2libGVSZXNvdXJjZXMoKVxuXHQvLyBHZW5lcmF0ZSB3ZWVrIGRheXNcblx0Y29uc3Qgd2Vla0RheXMgPSB1c2VNZW1vKFxuXHRcdCgpID0+IGdldFdlZWtEYXlzKGN1cnJlbnREYXRlLCBmaXJzdERheU9mV2VlayksXG5cdFx0W2N1cnJlbnREYXRlLCBmaXJzdERheU9mV2Vla11cblx0KVxuXG5cdGNvbnN0IGhvdXJzID0gdXNlTWVtbyhcblx0XHQoKSA9PlxuXHRcdFx0Z2V0Vmlld0hvdXJzKHtcblx0XHRcdFx0cmVmZXJlbmNlRGF0ZTogY3VycmVudERhdGUsXG5cdFx0XHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0XHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzLFxuXHRcdFx0XHRhbGxEYXRlczogd2Vla0RheXMsXG5cdFx0XHRcdHJlc291cmNlQnVzaW5lc3NIb3VyczogcmVzb3VyY2VzXG5cdFx0XHRcdFx0Lm1hcCgocikgPT4gci5idXNpbmVzc0hvdXJzKVxuXHRcdFx0XHRcdC5maWx0ZXIoQm9vbGVhbikgYXMgKEJ1c2luZXNzSG91cnMgfCBCdXNpbmVzc0hvdXJzW10pW10sXG5cdFx0XHR9KSxcblx0XHRbY3VycmVudERhdGUsIGJ1c2luZXNzSG91cnMsIGhpZGVOb25CdXNpbmVzc0hvdXJzLCB3ZWVrRGF5cywgcmVzb3VyY2VzXVxuXHQpXG5cblx0Y29uc3QgZmlyc3RDb2wgPSB1c2VNZW1vKFxuXHRcdCgpID0+ICh7XG5cdFx0XHRpZDogJ3RpbWUtY29sJyxcblx0XHRcdGRheXM6IGhvdXJzLFxuXHRcdFx0ZGF5OiB1bmRlZmluZWQsXG5cdFx0XHRjbGFzc05hbWU6XG5cdFx0XHRcdCdzaHJpbmstMCB3LTE2IG1pbi13LTE2IG1heC13LTE2IHN0aWNreSBsZWZ0LTAgYmctYmFja2dyb3VuZCB6LTIwJyxcblx0XHRcdGdyaWRUeXBlOiAnaG91cicgYXMgY29uc3QsXG5cdFx0XHRub0V2ZW50czogdHJ1ZSxcblx0XHRcdHJlbmRlckNlbGw6IChkYXRlOiBkYXlqcy5EYXlqcykgPT4gKFxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQtbXV0ZWQtZm9yZWdyb3VuZCBwLTIgdGV4dC1yaWdodCB0ZXh0LVsxMHB4XSBzbTp0ZXh0LXhzIGZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyXCI+XG5cdFx0XHRcdFx0e0ludGwuRGF0ZVRpbWVGb3JtYXQoY3VycmVudExvY2FsZSwge1xuXHRcdFx0XHRcdFx0aG91cjogJ251bWVyaWMnLFxuXHRcdFx0XHRcdFx0aG91cjEyOiB0aW1lRm9ybWF0ID09PSAnMTItaG91cicsXG5cdFx0XHRcdFx0fSkuZm9ybWF0KGRhdGUudG9EYXRlKCkpfVxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdCksXG5cdFx0fSksXG5cdFx0W2hvdXJzLCBjdXJyZW50TG9jYWxlLCB0aW1lRm9ybWF0XVxuXHQpXG5cblx0Y29uc3QgY29sdW1ucyA9IHVzZU1lbW8oXG5cdFx0KCkgPT5cblx0XHRcdHJlc291cmNlcy5mbGF0TWFwKChyZXNvdXJjZSkgPT5cblx0XHRcdFx0d2Vla0RheXMubWFwKChkYXkpID0+ICh7XG5cdFx0XHRcdFx0aWQ6IGBkYXktY29sLSR7ZGF5LmZvcm1hdCgnWVlZWS1NTS1ERCcpfS1yZXNvdXJjZS0ke3Jlc291cmNlLmlkfWAsXG5cdFx0XHRcdFx0cmVzb3VyY2VJZDogcmVzb3VyY2UuaWQsXG5cdFx0XHRcdFx0cmVzb3VyY2UsXG5cdFx0XHRcdFx0ZGF5LFxuXHRcdFx0XHRcdGRheXM6IGhvdXJzLm1hcCgoaCkgPT5cblx0XHRcdFx0XHRcdGRheS5ob3VyKGguaG91cigpKS5taW51dGUoMCkuc2Vjb25kKDApLm1pbGxpc2Vjb25kKDApXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRncmlkVHlwZTogJ2hvdXInIGFzIGNvbnN0LFxuXHRcdFx0XHR9KSlcblx0XHRcdCksXG5cdFx0W3Jlc291cmNlcywgd2Vla0RheXMsIGhvdXJzXVxuXHQpXG5cdHJldHVybiAoXG5cdFx0PFZlcnRpY2FsR3JpZFxuXHRcdFx0YWxsRGF5Um93PXtcblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4XCI+XG5cdFx0XHRcdFx0PEFsbERheUNlbGwgLz5cblx0XHRcdFx0XHR7cmVzb3VyY2VzLm1hcCgocmVzb3VyY2UpID0+IChcblx0XHRcdFx0XHRcdDxBbGxEYXlSb3dcblx0XHRcdFx0XHRcdFx0Y2xhc3Nlcz17eyBjZWxsOiAnbWluLXctNTAnIH19XG5cdFx0XHRcdFx0XHRcdGRheXM9e3dlZWtEYXlzfVxuXHRcdFx0XHRcdFx0XHRrZXk9e2ByZXNvdXJjZS13ZWVrLWFsbGRheS1yb3ctJHtyZXNvdXJjZS5pZH1gfVxuXHRcdFx0XHRcdFx0XHRyZXNvdXJjZT17cmVzb3VyY2V9XG5cdFx0XHRcdFx0XHRcdHNob3dTcGFjZXI9e2ZhbHNlfVxuXHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHQpKX1cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHR9XG5cdFx0XHRjbGFzc2VzPXt7IGhlYWRlcjogJ2gtMjQnIH19XG5cdFx0XHRjb2x1bW5zPXtbZmlyc3RDb2wsIC4uLmNvbHVtbnNdfVxuXHRcdFx0ZGF0YS10ZXN0aWQ9XCJyZXNvdXJjZS13ZWVrXCJcblx0XHRcdGdyaWRUeXBlPVwiaG91clwiXG5cdFx0PlxuXHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4LTEgZmxleCBmbGV4LWNvbFwiPlxuXHRcdFx0XHR7LyogUmVzb3VyY2UgaGVhZGVyIHJvdyAqL31cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IGgtMTJcIj5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInNocmluay0wIHctMTYgYm9yZGVyLXIgei0yMCBiZy1iYWNrZ3JvdW5kIHN0aWNreSBsZWZ0LTBcIj5cblx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cInB4LTIgaC1mdWxsIHctZnVsbCBmbGV4IGp1c3RpZnktY2VudGVyIGl0ZW1zLWVuZCB0ZXh0LXhzIHRleHQtbXV0ZWQtZm9yZWdyb3VuZFwiPlxuXHRcdFx0XHRcdFx0XHR7dCgnd2VlaycpfVxuXHRcdFx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdHtyZXNvdXJjZXMubWFwKChyZXNvdXJjZSwgaW5kZXgpID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IGtleSA9IGByZXNvdXJjZS13ZWVrLWhlYWRlci0ke3Jlc291cmNlLmlkfS1kYXlgXG5cblx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdDxBbmltYXRlZFNlY3Rpb25cblx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0XHRcdFx0J3Nocmluay0wIGJvcmRlci1yIGxhc3Q6Ym9yZGVyLXItMCBib3JkZXItYiBmbGV4IGl0ZW1zLWNlbnRlciB0ZXh0LWNlbnRlciBmb250LW1lZGl1bSB3LVtjYWxjKDcqdmFyKC0tc3BhY2luZykqNTApXSdcblx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRcdGRlbGF5PXtpbmRleCAqIDAuMDV9XG5cdFx0XHRcdFx0XHRcdFx0a2V5PXtgJHtrZXl9LWFuaW1hdGVkYH1cblx0XHRcdFx0XHRcdFx0XHR0cmFuc2l0aW9uS2V5PXtgJHtrZXl9LW1vdGlvbmB9XG5cdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHQ8UmVzb3VyY2VDZWxsXG5cdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJoLWZ1bGwgdy1mdWxsIGZsZXgtMVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXNvdXJjZT17cmVzb3VyY2V9XG5cdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJzdGlja3kgbGVmdC0xLzIgdGV4dC1zbSBmb250LW1lZGl1bSB0cnVuY2F0ZVwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7cmVzb3VyY2UudGl0bGV9XG5cdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0XHQ8L1Jlc291cmNlQ2VsbD5cblx0XHRcdFx0XHRcdFx0PC9BbmltYXRlZFNlY3Rpb24+XG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0fSl9XG5cdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdHsvKiBEYXRlIGhlYWRlciByb3cgKi99XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBoLTEyXCI+XG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJzaHJpbmstMCB3LTE2IGJvcmRlci1yIGJvcmRlci1iIHotMjAgYmctYmFja2dyb3VuZCBzdGlja3kgbGVmdC0wXCI+XG5cdFx0XHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJweC0yIGgtZnVsbCB3LWZ1bGwgZmxleCBqdXN0aWZ5LWNlbnRlciBpdGVtcy1zdGFydCBmb250LW1lZGl1bVwiPlxuXHRcdFx0XHRcdFx0XHR7Y3VycmVudERhdGUud2VlaygpfVxuXHRcdFx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdHtjb2x1bW5zLm1hcCgoY29sLCBpbmRleCkgPT4ge1xuXHRcdFx0XHRcdFx0Y29uc3QgZGF5ID0gY29sLmRheVxuXHRcdFx0XHRcdFx0Y29uc3Qga2V5ID0gYHJlc291cmNlLXdlZWstaGVhZGVyLSR7ZGF5LnRvSVNPU3RyaW5nKCl9LWhvdXItJHtjb2wucmVzb3VyY2VJZH1gXG5cblx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdDxBbmltYXRlZFNlY3Rpb25cblx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0XHRcdFx0J3ctNTAgYm9yZGVyLXIgbGFzdDpib3JkZXItci0wIGJvcmRlci1iIGZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRleHQteHMgc2hyaW5rLTAgYmctYmFja2dyb3VuZCdcblx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPXtgcmVzb3VyY2Utd2Vlay10aW1lLWxhYmVsLSR7ZGF5LmZvcm1hdCgnSEgnKX1gfVxuXHRcdFx0XHRcdFx0XHRcdGRlbGF5PXtpbmRleCAqIDAuMDV9XG5cdFx0XHRcdFx0XHRcdFx0a2V5PXtgJHtrZXl9LWFuaW1hdGVkYH1cblx0XHRcdFx0XHRcdFx0XHR0cmFuc2l0aW9uS2V5PXtgJHtrZXl9LW1vdGlvbmB9XG5cdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQtc21cIj57ZGF5LmZvcm1hdCgnZGRkJyl9PC9kaXY+XG5cdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtbXV0ZWQtZm9yZWdyb3VuZFwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0e2RheS5mb3JtYXQoJ00vRCcpfVxuXHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHQ8L0FuaW1hdGVkU2VjdGlvbj5cblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHR9KX1cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQ8L2Rpdj5cblx0XHQ8L1ZlcnRpY2FsR3JpZD5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZVJlc291cmNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb250ZXh0cy9yZXNvdXJjZS1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHsgUmVzb3VyY2VXZWVrSG9yaXpvbnRhbCB9IGZyb20gJy4vcmVzb3VyY2Utd2Vlay1ob3Jpem9udGFsJ1xuaW1wb3J0IHsgUmVzb3VyY2VXZWVrVmVydGljYWwgfSBmcm9tICcuL3Jlc291cmNlLXdlZWstdmVydGljYWwnXG5cbmV4cG9ydCBjb25zdCBSZXNvdXJjZVdlZWtWaWV3OiBSZWFjdC5GQyA9ICgpID0+IHtcblx0Y29uc3QgeyBvcmllbnRhdGlvbiB9ID0gdXNlUmVzb3VyY2VDYWxlbmRhckNvbnRleHQoKVxuXG5cdGlmIChvcmllbnRhdGlvbiA9PT0gJ3ZlcnRpY2FsJykge1xuXHRcdHJldHVybiA8UmVzb3VyY2VXZWVrVmVydGljYWwgLz5cblx0fVxuXG5cdHJldHVybiA8UmVzb3VyY2VXZWVrSG9yaXpvbnRhbCAvPlxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEFuaW1hdGVkU2VjdGlvbiB9IGZyb20gJ0AvY29tcG9uZW50cy9hbmltYXRpb25zL2FuaW1hdGVkLXNlY3Rpb24nXG5pbXBvcnQgeyBDYWxlbmRhckRuZENvbnRleHQgfSBmcm9tICdAL2NvbXBvbmVudHMvZHJhZy1hbmQtZHJvcC9jYWxlbmRhci1kbmQtY29udGV4dCdcbmltcG9ydCB7IEV2ZW50Rm9ybURpYWxvZyB9IGZyb20gJ0AvY29tcG9uZW50cy9ldmVudC1mb3JtL2V2ZW50LWZvcm0tZGlhbG9nJ1xuaW1wb3J0IHsgSGVhZGVyIH0gZnJvbSAnQC9jb21wb25lbnRzL2hlYWRlcidcbmltcG9ydCB7IFJlc291cmNlRGF5VmlldyB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy9kYXktdmlldydcbmltcG9ydCB7IFJlc291cmNlTW9udGhWaWV3IH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL21vbnRoLXZpZXcnXG5pbXBvcnQgeyBSZXNvdXJjZVdlZWtWaWV3IH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL3dlZWstdmlldydcbmltcG9ydCB7IHVzZVJlc291cmNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb250ZXh0cy9yZXNvdXJjZS1jYWxlbmRhci1jb250ZXh0J1xuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VDYWxlbmRhckJvZHk6IFJlYWN0LkZDID0gKCkgPT4ge1xuXHRjb25zdCB7IHZpZXcgfSA9IHVzZVJlc291cmNlQ2FsZW5kYXJDb250ZXh0KClcblxuXHRjb25zdCB2aWV3TWFwID0ge1xuXHRcdG1vbnRoOiA8UmVzb3VyY2VNb250aFZpZXcga2V5PVwibW9udGhcIiAvPixcblx0XHR3ZWVrOiA8UmVzb3VyY2VXZWVrVmlldyBrZXk9XCJ3ZWVrXCIgLz4sXG5cdFx0ZGF5OiA8UmVzb3VyY2VEYXlWaWV3IGtleT1cImRheVwiIC8+LFxuXHR9XG5cblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIHctZnVsbCBoLWZ1bGxcIlxuXHRcdFx0ZGF0YS10ZXN0aWQ9XCJpbGFteS1yZXNvdXJjZS1jYWxlbmRhclwiXG5cdFx0PlxuXHRcdFx0PEhlYWRlciBjbGFzc05hbWU9XCJwLTFcIiAvPlxuXG5cdFx0XHR7LyogQ2FsZW5kYXIgQm9keSB3aXRoIEFuaW1hdGVkU2VjdGlvbiBmb3IgdmlldyB0cmFuc2l0aW9ucyAqL31cblx0XHRcdDxDYWxlbmRhckRuZENvbnRleHQ+XG5cdFx0XHRcdDxBbmltYXRlZFNlY3Rpb25cblx0XHRcdFx0XHRjbGFzc05hbWU9XCJ3LWZ1bGwgaC1bY2FsYygxMDAlLTMuNXJlbSldIEBjb250YWluZXIvY2FsZW5kYXItYm9keVwiXG5cdFx0XHRcdFx0ZGlyZWN0aW9uPVwiaG9yaXpvbnRhbFwiXG5cdFx0XHRcdFx0dHJhbnNpdGlvbktleT17dmlld31cblx0XHRcdFx0PlxuXHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiYm9yZGVyIGgtZnVsbCB3LWZ1bGxcIiBkYXRhLXRlc3RpZD1cImNhbGVuZGFyLWJvZHlcIj5cblx0XHRcdFx0XHRcdHt2aWV3TWFwW3ZpZXddfVxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8L0FuaW1hdGVkU2VjdGlvbj5cblx0XHRcdDwvQ2FsZW5kYXJEbmRDb250ZXh0PlxuXG5cdFx0XHR7LyogRXZlbnQgRm9ybSBEaWFsb2cgKi99XG5cdFx0XHQ8RXZlbnRGb3JtRGlhbG9nIC8+XG5cdFx0PC9kaXY+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgeyBSZXNvdXJjZUNhbGVuZGFyUHJvdmlkZXIgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbnRleHRzL3Jlc291cmNlLWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSB7XG5cdElsYW15UmVzb3VyY2VDYWxlbmRhclByb3BFdmVudCxcblx0SWxhbXlSZXNvdXJjZUNhbGVuZGFyUHJvcHMsXG59IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvdHlwZXMnXG5pbXBvcnQge1xuXHREQVlfTUFYX0VWRU5UU19ERUZBVUxULFxuXHRHQVBfQkVUV0VFTl9FTEVNRU5UUyxcblx0V0VFS19EQVlTX05VTUJFUl9NQVAsXG59IGZyb20gJ0AvbGliL2NvbnN0YW50cydcbmltcG9ydCB7IG5vcm1hbGl6ZUV2ZW50cywgc2FmZURhdGUgfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IFJlc291cmNlQ2FsZW5kYXJCb2R5IH0gZnJvbSAnLi9yZXNvdXJjZS1jYWxlbmRhci1ib2R5J1xuXG5leHBvcnQgY29uc3QgSWxhbXlSZXNvdXJjZUNhbGVuZGFyOiBSZWFjdC5GQzxJbGFteVJlc291cmNlQ2FsZW5kYXJQcm9wcz4gPSAoe1xuXHRldmVudHMgPSBbXSxcblx0cmVzb3VyY2VzID0gW10sXG5cdGZpcnN0RGF5T2ZXZWVrID0gJ3N1bmRheScsXG5cdGluaXRpYWxWaWV3ID0gJ21vbnRoJyxcblx0aW5pdGlhbERhdGUsXG5cdGRpc2FibGVEcmFnQW5kRHJvcCA9IGZhbHNlLFxuXHRkYXlNYXhFdmVudHMgPSBEQVlfTUFYX0VWRU5UU19ERUZBVUxULFxuXHR0aW1lRm9ybWF0ID0gJzEyLWhvdXInLFxuXHRldmVudFNwYWNpbmcgPSBHQVBfQkVUV0VFTl9FTEVNRU5UUyxcblx0Li4ucHJvcHNcbn0pID0+IHtcblx0cmV0dXJuIChcblx0XHQ8UmVzb3VyY2VDYWxlbmRhclByb3ZpZGVyXG5cdFx0XHRkYXlNYXhFdmVudHM9e2RheU1heEV2ZW50c31cblx0XHRcdGRpc2FibGVEcmFnQW5kRHJvcD17ZGlzYWJsZURyYWdBbmREcm9wfVxuXHRcdFx0ZXZlbnRTcGFjaW5nPXtldmVudFNwYWNpbmd9XG5cdFx0XHRldmVudHM9e25vcm1hbGl6ZUV2ZW50czxJbGFteVJlc291cmNlQ2FsZW5kYXJQcm9wRXZlbnQsIENhbGVuZGFyRXZlbnQ+KFxuXHRcdFx0XHRldmVudHNcblx0XHRcdCl9XG5cdFx0XHRmaXJzdERheU9mV2Vlaz17V0VFS19EQVlTX05VTUJFUl9NQVBbZmlyc3REYXlPZldlZWtdfVxuXHRcdFx0aW5pdGlhbERhdGU9e3NhZmVEYXRlKGluaXRpYWxEYXRlKX1cblx0XHRcdGluaXRpYWxWaWV3PXtpbml0aWFsVmlld31cblx0XHRcdHJlc291cmNlcz17cmVzb3VyY2VzfVxuXHRcdFx0dGltZUZvcm1hdD17dGltZUZvcm1hdH1cblx0XHRcdHsuLi5wcm9wc31cblx0XHQ+XG5cdFx0XHQ8UmVzb3VyY2VDYWxlbmRhckJvZHkgLz5cblx0XHQ8L1Jlc291cmNlQ2FsZW5kYXJQcm92aWRlcj5cblx0KVxufVxuIgogIF0sCiAgIm1hcHBpbmdzIjogIkFBSUEsZ0JBQVMsZUNKVCxnQkFBUyxlQ0FULHNCQUNBLDBDQUNBLDhDQUNBLCtDQUNBLDJDQUNBLHVDQUNBLHlDQUNBLG9DQUNBLHdDQUNBLDJDQUdBLEdBQU0sT0FBTyxFQUFPLEVBQ3BCLEdBQU0sT0FBTyxFQUFVLEVBQ3ZCLEdBQU0sT0FBTyxFQUFhLEVBQzFCLEdBQU0sT0FBTyxFQUFjLEVBQzNCLEdBQU0sT0FBTyxFQUFTLEVBQ3RCLEdBQU0sT0FBTyxFQUFNLEVBQ25CLEdBQU0sT0FBTyxFQUFRLEVBQ3JCLEdBQU0sT0FBTyxFQUFHLEVBQ2hCLEdBQU0sT0FBTyxFQUFVLEVBRXZCLElBQWUsS0NyQmYsZUFBUyxjQUNULGtCQUFTLHdCQUdGLFNBQVMsQ0FBRSxJQUFJLEVBQXNCLENBQzNDLE9BQU8sR0FBUSxHQUFLLENBQU0sQ0FBQyxFQUdyQixTQUFTLEVBQVEsQ0FDdkIsRUFDMEIsQ0FDMUIsR0FBSSxJQUFTLE9BQ1osT0FFRCxHQUFJLEVBQU0sUUFBUSxDQUFJLEVBQ3JCLE9BQU8sRUFFUixJQUFNLEVBQWEsRUFBTSxDQUFJLEVBQzdCLE9BQU8sRUFBVyxRQUFRLEVBQUksRUFBYSxPQUdyQyxJQUFNLEdBQVcsQ0FDdkIsRUFDQSxJQUNnQixDQUNoQixJQUFNLEVBQVMsSUFBSyxDQUFJLEVBQ3hCLFFBQVcsS0FBTyxFQUNqQixPQUFPLEVBQU8sR0FFZixPQUFPLEdBaUJELFNBQVMsRUFNZixDQUFDLEVBQXlDLENBQzFDLEdBQUksQ0FBQyxHQUFVLENBQUMsRUFBTyxPQUN0QixNQUFPLENBQUMsRUFHVCxPQUFPLEVBQU8sSUFBSSxDQUFDLElBQVUsQ0FDNUIsTUFBTyxJQUNILEVBQ0gsTUFBTyxFQUFNLFFBQVEsRUFBTSxLQUFLLEVBQUksRUFBTSxNQUFRLEVBQU0sRUFBTSxLQUFLLEVBQ25FLElBQUssRUFBTSxR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
6
+ //# debugId=01C61AF3615F091064756E2164756E21
7
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL2luZGV4LnRzIiwgInNyYy9jb21wb25lbnRzL2FuaW1hdGlvbnMvYW5pbWF0ZWQtc2VjdGlvbi50c3giLCAic3JjL2xpYi91dGlscy9pbmRleC50cyIsICJzcmMvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnLnRzIiwgInNyYy9jb21wb25lbnRzL2RyYWctYW5kLWRyb3AvY2FsZW5kYXItZG5kLWNvbnRleHQudHN4IiwgInNyYy9jb21wb25lbnRzL3VpL2J1dHRvbi50c3giLCAic3JjL2NvbXBvbmVudHMvdWkvZGlhbG9nLnRzeCIsICJzcmMvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQudHMiLCAic3JjL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvY29udGV4dC50cyIsICJzcmMvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29udGV4dHMvcmVzb3VyY2UtY2FsZW5kYXItY29udGV4dC9jb250ZXh0LnRzIiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb250ZXh0cy9yZXNvdXJjZS1jYWxlbmRhci1jb250ZXh0L3Byb3ZpZGVyLnRzeCIsICJzcmMvaG9va3MvdXNlLWNhbGVuZGFyLWVuZ2luZS50cyIsICJzcmMvZmVhdHVyZXMvcmVjdXJyZW5jZS91dGlscy9yZWN1cnJlbmNlLWhhbmRsZXIudHMiLCAic3JjL2xpYi90cmFuc2xhdGlvbnMvZGVmYXVsdC50cyIsICJzcmMvbGliL3V0aWxzL2RhdGUtdXRpbHMudHMiLCAic3JjL2xpYi9jb25zdGFudHMudHMiLCAic3JjL2ZlYXR1cmVzL3JlY3VycmVuY2UvY29tcG9uZW50cy9yZWN1cnJlbmNlLWVkaXQtZGlhbG9nL3JlY3VycmVuY2UtZWRpdC1kaWFsb2cudHN4IiwgInNyYy9jb21wb25lbnRzL2RyYWctYW5kLWRyb3AvZG5kLXV0aWxzLnRzIiwgInNyYy9jb21wb25lbnRzL2RyYWctYW5kLWRyb3AvZXZlbnQtZHJhZy1vdmVybGF5LnRzeCIsICJzcmMvY29tcG9uZW50cy9ldmVudC1mb3JtL2V2ZW50LWZvcm0udHN4IiwgInNyYy9jb21wb25lbnRzL3VpL2NoZWNrYm94LnRzeCIsICJzcmMvY29tcG9uZW50cy91aS9kYXRlLXBpY2tlci50c3giLCAic3JjL2NvbXBvbmVudHMvdWkvY2FsZW5kYXIudHN4IiwgInNyYy9jb21wb25lbnRzL3VpL3BvcG92ZXIudHN4IiwgInNyYy9jb21wb25lbnRzL3VpL2lucHV0LnRzeCIsICJzcmMvY29tcG9uZW50cy91aS9sYWJlbC50c3giLCAic3JjL2NvbXBvbmVudHMvdWkvc2Nyb2xsLWFyZWEudHN4IiwgInNyYy9jb21wb25lbnRzL3VpL3RpbWUtcGlja2VyLnRzeCIsICJzcmMvaG9va3MvdXNlLWF1dG9jb21wbGV0ZS10aW1lcGlja2VyLnRzIiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci91dGlscy9idXNpbmVzcy1ob3Vycy50cyIsICJzcmMvZmVhdHVyZXMvY2FsZW5kYXIvdXRpbHMvZXZlbnQtZm9ybS11dGlscy50cyIsICJzcmMvZmVhdHVyZXMvcmVjdXJyZW5jZS9jb21wb25lbnRzL3JlY3VycmVuY2UtZWRpdG9yL3JlY3VycmVuY2UtZWRpdG9yLnRzeCIsICJzcmMvY29tcG9uZW50cy91aS9jYXJkLnRzeCIsICJzcmMvY29tcG9uZW50cy91aS9zZWxlY3QudHN4IiwgInNyYy9mZWF0dXJlcy9yZWN1cnJlbmNlL2hvb2tzL3VzZVJlY3VycmluZ0V2ZW50QWN0aW9ucy50cyIsICJzcmMvY29tcG9uZW50cy9ldmVudC1mb3JtL2V2ZW50LWZvcm0tZGlhbG9nLnRzeCIsICJzcmMvY29tcG9uZW50cy9oZWFkZXIvYmFzZS1oZWFkZXIudHN4IiwgInNyYy9saWIvdXRpbHMvZXhwb3J0LWljYWwudHMiLCAic3JjL2NvbXBvbmVudHMvaGVhZGVyL3RpdGxlLWNvbnRlbnQudHN4IiwgInNyYy9jb21wb25lbnRzL2hlYWRlci92aWV3LWNvbnRyb2xzLnRzeCIsICJzcmMvY29tcG9uZW50cy9hbGwtZGF5LXJvdy9hbGwtZGF5LXJvdy50c3giLCAic3JjL2NvbXBvbmVudHMvaG9yaXpvbnRhbC1ncmlkL2hvcml6b250YWwtZ3JpZC1yb3cudHN4IiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci9ob29rcy91c2VQcm9jZXNzZWRXZWVrRXZlbnRzLnRzIiwgInNyYy9saWIvdXRpbHMvcG9zaXRpb24td2Vlay1ldmVudHMudHMiLCAic3JjL2NvbXBvbmVudHMvZ3JpZC1jZWxsLnRzeCIsICJzcmMvY29tcG9uZW50cy9kYXktbnVtYmVyLnRzeCIsICJzcmMvY29tcG9uZW50cy9hbGwtZXZlbnRzLWRpYWxvZy50c3giLCAic3JjL2NvbXBvbmVudHMvZHJhZ2dhYmxlLWV2ZW50L2RyYWdnYWJsZS1ldmVudC50c3giLCAic3JjL2NvbXBvbmVudHMvZHJvcHBhYmxlLWNlbGwudHN4IiwgInNyYy9jb21wb25lbnRzL3Jlc291cmNlLWNlbGwudHN4IiwgInNyYy9jb21wb25lbnRzL2hvcml6b250YWwtZ3JpZC9ob3Jpem9udGFsLWdyaWQtZXZlbnRzLWxheWVyLnRzeCIsICJzcmMvY29tcG9uZW50cy9hbGwtZGF5LXJvdy9hbGwtZGF5LWNlbGwudHN4IiwgInNyYy9jb21wb25lbnRzL3ZlcnRpY2FsLWdyaWQvdmVydGljYWwtZ3JpZC1jb2wudHN4IiwgInNyYy9jb21wb25lbnRzL3ZlcnRpY2FsLWdyaWQvdmVydGljYWwtZ3JpZC1ldmVudHMtbGF5ZXIudHN4IiwgInNyYy9jb21wb25lbnRzL2N1cnJlbnQtdGltZS1pbmRpY2F0b3IudHN4IiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci9ob29rcy91c2VQcm9jZXNzZWREYXlFdmVudHMudHMiLCAic3JjL2xpYi91dGlscy9wb3NpdGlvbi1kYXktZXZlbnRzLnRzIiwgInNyYy9jb21wb25lbnRzL3ZlcnRpY2FsLWdyaWQvdmVydGljYWwtZ3JpZC1oZWFkZXItY29udGFpbmVyLnRzeCIsICJzcmMvY29tcG9uZW50cy92ZXJ0aWNhbC1ncmlkL3ZlcnRpY2FsLWdyaWQudHN4IiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci91dGlscy92aWV3LWhvdXJzLnRzIiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci9jb21wb25lbnRzL2RheS12aWV3L2RheS12aWV3LnRzeCIsICJzcmMvZmVhdHVyZXMvY2FsZW5kYXIvY29tcG9uZW50cy9tb250aC12aWV3L21vbnRoLXZpZXcudHN4IiwgInNyYy9jb21wb25lbnRzL2hvcml6b250YWwtZ3JpZC9ob3Jpem9udGFsLWdyaWQtaGVhZGVyLWNvbnRhaW5lci50c3giLCAic3JjL2NvbXBvbmVudHMvaG9yaXpvbnRhbC1ncmlkL2hvcml6b250YWwtZ3JpZC50c3giLCAic3JjL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbXBvbmVudHMvbW9udGgtdmlldy9tb250aC1oZWFkZXIudHN4IiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci9jb21wb25lbnRzL3dlZWstdmlldy93ZWVrLXZpZXcudHN4IiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci9jb21wb25lbnRzL3llYXItdmlldy95ZWFyLXZpZXcudHN4IiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L3Byb3ZpZGVyLnRzeCIsICJzcmMvZmVhdHVyZXMvY2FsZW5kYXIvY29tcG9uZW50cy9pbGFteS1jYWxlbmRhci50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvcmVzb3VyY2UtZXZlbnQtZ3JpZC50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvZGF5LXZpZXcvcmVzb3VyY2UtZGF5LWhvcml6b250YWwudHN4IiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL2RheS12aWV3L3Jlc291cmNlLWRheS12ZXJ0aWNhbC50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvZGF5LXZpZXcvaW5kZXgudHN4IiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL21vbnRoLXZpZXcvcmVzb3VyY2UtbW9udGgtaG9yaXpvbnRhbC50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvbW9udGgtdmlldy9yZXNvdXJjZS1tb250aC12ZXJ0aWNhbC50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvbW9udGgtdmlldy9pbmRleC50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvd2Vlay12aWV3L3Jlc291cmNlLXdlZWstaG9yaXpvbnRhbC50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvd2Vlay12aWV3L3Jlc291cmNlLXdlZWstdmVydGljYWwudHN4IiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL3dlZWstdmlldy9pbmRleC50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvaWxhbXktcmVzb3VyY2UtY2FsZW5kYXIvcmVzb3VyY2UtY2FsZW5kYXItYm9keS50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvaWxhbXktcmVzb3VyY2UtY2FsZW5kYXIvaWxhbXktcmVzb3VyY2UtY2FsZW5kYXIudHN4Il0sCiAgInNvdXJjZXNDb250ZW50IjogWwogICAgIi8vIFJlLWV4cG9ydCBycnVsZS5qcyB0eXBlcyBmb3IgY29udmVuaWVuY2VcbmV4cG9ydCB0eXBlIHsgRnJlcXVlbmN5LCBXZWVrZGF5IH0gZnJvbSAncnJ1bGUnXG5leHBvcnQgeyBSUnVsZSB9IGZyb20gJ3JydWxlJ1xuZXhwb3J0IHR5cGUgeyBFdmVudEZvcm1Qcm9wcyB9IGZyb20gJy4vY29tcG9uZW50cy9ldmVudC1mb3JtL2V2ZW50LWZvcm0nXG5leHBvcnQgdHlwZSB7IEJ1c2luZXNzSG91cnMsIENhbGVuZGFyRXZlbnQsIFdlZWtEYXlzIH0gZnJvbSAnLi9jb21wb25lbnRzL3R5cGVzJ1xuZXhwb3J0IHsgSWxhbXlDYWxlbmRhciB9IGZyb20gJy4vZmVhdHVyZXMvY2FsZW5kYXIvY29tcG9uZW50cy9pbGFteS1jYWxlbmRhcidcbmV4cG9ydCB0eXBlIHtcblx0Q2VsbENsaWNrSW5mbyxcblx0SWxhbXlDYWxlbmRhclByb3BzLFxuXHRSZW5kZXJDdXJyZW50VGltZUluZGljYXRvclByb3BzLFxufSBmcm9tICcuL2ZlYXR1cmVzL2NhbGVuZGFyL3R5cGVzJ1xuLy8gRXhwb3J0IHR5cGVzXG5leHBvcnQgdHlwZSB7IFJSdWxlT3B0aW9ucyB9IGZyb20gJy4vZmVhdHVyZXMvcmVjdXJyZW5jZS90eXBlcydcbi8vIFJSVUxFLWJhc2VkIHJlY3VycmVuY2Ugc3lzdGVtXG5leHBvcnQge1xuXHRnZW5lcmF0ZVJlY3VycmluZ0V2ZW50cyxcblx0aXNSZWN1cnJpbmdFdmVudCxcbn0gZnJvbSAnLi9mZWF0dXJlcy9yZWN1cnJlbmNlL3V0aWxzL3JlY3VycmVuY2UtaGFuZGxlcidcbmV4cG9ydCB0eXBlIHsgSWxhbXlSZXNvdXJjZUNhbGVuZGFyUHJvcHMgfSBmcm9tICcuL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvaWxhbXktcmVzb3VyY2UtY2FsZW5kYXInXG5leHBvcnQgeyBJbGFteVJlc291cmNlQ2FsZW5kYXIgfSBmcm9tICcuL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvaWxhbXktcmVzb3VyY2UtY2FsZW5kYXIvaWxhbXktcmVzb3VyY2UtY2FsZW5kYXInXG4vLyBSZXNvdXJjZSBjYWxlbmRhciB0eXBlc1xuZXhwb3J0IHR5cGUgeyBSZXNvdXJjZSB9IGZyb20gJy4vZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvdHlwZXMnXG4vLyBQdWJsaWMgY2FsZW5kYXIgY29udGV4dCBob29rc1xuZXhwb3J0IHtcblx0dHlwZSBVc2VJbGFteUNhbGVuZGFyQ29udGV4dFJldHVybixcblx0dXNlSWxhbXlDYWxlbmRhckNvbnRleHQsXG59IGZyb20gJy4vaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5leHBvcnQgeyBkZWZhdWx0VHJhbnNsYXRpb25zIH0gZnJvbSAnLi9saWIvdHJhbnNsYXRpb25zL2RlZmF1bHQnXG4vLyBUcmFuc2xhdGlvbiBzeXN0ZW1cbmV4cG9ydCB0eXBlIHtcblx0VHJhbnNsYXRpb25LZXksXG5cdFRyYW5zbGF0aW9ucyxcblx0VHJhbnNsYXRvckZ1bmN0aW9uLFxufSBmcm9tICcuL2xpYi90cmFuc2xhdGlvbnMvdHlwZXMnXG5leHBvcnQgdHlwZSB7IENhbGVuZGFyVmlldywgVGltZUZvcm1hdCB9IGZyb20gJy4vdHlwZXMnXG4iLAogICAgImltcG9ydCB7XG5cdEFuaW1hdGVQcmVzZW5jZSxcblx0dHlwZSBIVE1MTW90aW9uUHJvcHMsXG5cdG1vdGlvbixcblx0dHlwZSBWYXJpYW50cyxcbn0gZnJvbSAnbW90aW9uL3JlYWN0J1xuaW1wb3J0IHR5cGUgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmludGVyZmFjZSBBbmltYXRlZFNlY3Rpb25Qcm9wc1xuXHRleHRlbmRzIE9taXQ8SFRNTE1vdGlvblByb3BzPCdkaXYnPiwgJ2NoaWxkcmVuJyB8ICdsYXlvdXQnIHwgJ2xheW91dElkJz4ge1xuXHRjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlXG5cdHRyYW5zaXRpb25LZXk6IHN0cmluZ1xuXHRkZWxheT86IG51bWJlclxuXHRjbGFzc05hbWU/OiBzdHJpbmdcblx0ZGlyZWN0aW9uPzogJ3ZlcnRpY2FsJyB8ICdob3Jpem9udGFsJ1xuXHRsYXlvdXQ/OiBib29sZWFuIHwgJ3Bvc2l0aW9uJyB8ICdzaXplJyB8ICdwcmVzZXJ2ZS1hc3BlY3QnXG5cdGxheW91dElkPzogc3RyaW5nXG5cdCdkYXRhLXRlc3RpZCc/OiBzdHJpbmdcbn1cblxuY29uc3QgdmFyaWFudHM6IFZhcmlhbnRzID0ge1xuXHRoaWRkZW46ICh7IGRpcmVjdGlvbiB9OiB7IGRpcmVjdGlvbjogJ3ZlcnRpY2FsJyB8ICdob3Jpem9udGFsJyB9KSA9PiAoe1xuXHRcdG9wYWNpdHk6IDAsXG5cdFx0eDogZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgPyAxMCA6IDAsXG5cdFx0eTogZGlyZWN0aW9uID09PSAndmVydGljYWwnID8gLTEwIDogMCxcblx0fSksXG5cdHZpc2libGU6ICh7IGRlbGF5IH06IHsgZGVsYXk6IG51bWJlciB9KSA9PiAoe1xuXHRcdG9wYWNpdHk6IDEsXG5cdFx0eDogMCxcblx0XHR5OiAwLFxuXHRcdHRyYW5zaXRpb246IHsgZHVyYXRpb246IDAuMiwgZWFzZTogWzAuNCwgMCwgMC4yLCAxXSwgZGVsYXkgfSxcblx0fSksXG5cdGV4aXQ6ICh7IGRpcmVjdGlvbiB9OiB7IGRpcmVjdGlvbjogJ3ZlcnRpY2FsJyB8ICdob3Jpem9udGFsJyB9KSA9PiAoe1xuXHRcdG9wYWNpdHk6IDAsXG5cdFx0eDogZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgPyAtMTAgOiAwLFxuXHRcdHk6IGRpcmVjdGlvbiA9PT0gJ3ZlcnRpY2FsJyA/IC0xMCA6IDAsXG5cdFx0dHJhbnNpdGlvbjogeyBkdXJhdGlvbjogMC4xNSB9LFxuXHR9KSxcbn1cblxuZXhwb3J0IGNvbnN0IEFuaW1hdGVkU2VjdGlvbjogUmVhY3QuRkM8QW5pbWF0ZWRTZWN0aW9uUHJvcHM+ID0gKHtcblx0Y2hpbGRyZW4sXG5cdHRyYW5zaXRpb25LZXksXG5cdGRlbGF5ID0gMCxcblx0Y2xhc3NOYW1lLFxuXHRkaXJlY3Rpb24gPSAndmVydGljYWwnLFxuXHRsYXlvdXQsXG5cdGxheW91dElkLFxuXHQnZGF0YS10ZXN0aWQnOiB0ZXN0SWQsXG5cdHJlZixcblx0Li4ucHJvcHNcbn0pID0+IChcblx0PEFuaW1hdGVQcmVzZW5jZSBtb2RlPVwid2FpdFwiPlxuXHRcdDxtb3Rpb24uZGl2XG5cdFx0XHRhbmltYXRlPVwidmlzaWJsZVwiXG5cdFx0XHRjbGFzc05hbWU9e2NuKCdpbmxpbmUtYmxvY2sgdy1mdWxsJywgY2xhc3NOYW1lKX1cblx0XHRcdGN1c3RvbT17eyBkZWxheSwgZGlyZWN0aW9uIH19XG5cdFx0XHRkYXRhLXRlc3RpZD17dGVzdElkfVxuXHRcdFx0ZXhpdD1cImV4aXRcIlxuXHRcdFx0aW5pdGlhbD1cImhpZGRlblwiXG5cdFx0XHRrZXk9e3RyYW5zaXRpb25LZXl9XG5cdFx0XHRsYXlvdXQ9e2xheW91dH1cblx0XHRcdGxheW91dElkPXtsYXlvdXRJZH1cblx0XHRcdHJlZj17cmVmfVxuXHRcdFx0dmFyaWFudHM9e3ZhcmlhbnRzfVxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdD5cblx0XHRcdHtjaGlsZHJlbn1cblx0XHQ8L21vdGlvbi5kaXY+XG5cdDwvQW5pbWF0ZVByZXNlbmNlPlxuKVxuXG5BbmltYXRlZFNlY3Rpb24uZGlzcGxheU5hbWUgPSAnQW5pbWF0ZWRTZWN0aW9uJ1xuIiwKICAgICJpbXBvcnQgdHlwZSB7IENsYXNzVmFsdWUgfSBmcm9tICdjbHN4J1xuaW1wb3J0IHsgY2xzeCB9IGZyb20gJ2Nsc3gnXG5pbXBvcnQgeyB0d01lcmdlIH0gZnJvbSAndGFpbHdpbmQtbWVyZ2UnXG5pbXBvcnQgZGF5anMsIHsgdHlwZSBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuXG5leHBvcnQgZnVuY3Rpb24gY24oLi4uaW5wdXRzOiBDbGFzc1ZhbHVlW10pIHtcblx0cmV0dXJuIHR3TWVyZ2UoY2xzeChpbnB1dHMpKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2FmZURhdGUoXG5cdGRhdGU6IERheWpzIHwgRGF0ZSB8IHN0cmluZyB8IHVuZGVmaW5lZFxuKTogRGF5anMgfCB1bmRlZmluZWQge1xuXHRpZiAoZGF0ZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZFxuXHR9XG5cdGlmIChkYXlqcy5pc0RheWpzKGRhdGUpKSB7XG5cdFx0cmV0dXJuIGRhdGVcblx0fVxuXHRjb25zdCBwYXJzZWREYXRlID0gZGF5anMoZGF0ZSlcblx0cmV0dXJuIHBhcnNlZERhdGUuaXNWYWxpZCgpID8gcGFyc2VkRGF0ZSA6IHVuZGVmaW5lZFxufVxuXG5leHBvcnQgY29uc3Qgb21pdEtleXMgPSA8VCBleHRlbmRzIG9iamVjdCwgSyBleHRlbmRzIGtleW9mIFQ+KFxuXHRvYmo6IFQsXG5cdGtleXM6IEtbXVxuKTogT21pdDxULCBLPiA9PiB7XG5cdGNvbnN0IHJlc3VsdCA9IHsgLi4ub2JqIH1cblx0Zm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuXHRcdGRlbGV0ZSByZXN1bHRba2V5XVxuXHR9XG5cdHJldHVybiByZXN1bHRcbn1cblxuLyoqXG4gKiBOb3JtYWxpemVzIGNhbGVuZGFyIGV2ZW50cyBmcm9tIHB1YmxpYy1mYWNpbmcgZm9ybWF0IHRvIGludGVybmFsIGZvcm1hdC5cbiAqIENvbnZlcnRzIGZsZXhpYmxlIGRhdGUgdHlwZXMgKGRheWpzLCBEYXRlLCBzdHJpbmcpIHRvIHN0cmljdCBkYXlqcyBvYmplY3RzLlxuICpcbiAqIEBwYXJhbSBldmVudHMgLSBBcnJheSBvZiBjYWxlbmRhciBldmVudHMgd2l0aCBmbGV4aWJsZSBkYXRlIHR5cGVzXG4gKiBAcmV0dXJucyBOb3JtYWxpemVkIGFycmF5IG9mIGNhbGVuZGFyIGV2ZW50cyB3aXRoIGRheWpzIGRhdGVzXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFJlZ3VsYXIgY2FsZW5kYXIgZXZlbnRzXG4gKiBjb25zdCBldmVudHMgPSBub3JtYWxpemVFdmVudHM8SWxhbXlDYWxlbmRhclByb3BFdmVudCwgQ2FsZW5kYXJFdmVudD4ocHJvcEV2ZW50cylcbiAqXG4gKiAvLyBSZXNvdXJjZSBjYWxlbmRhciBldmVudHNcbiAqIGNvbnN0IHJlc291cmNlRXZlbnRzID0gbm9ybWFsaXplRXZlbnRzPElsYW15UmVzb3VyY2VDYWxlbmRhclByb3BFdmVudCwgQ2FsZW5kYXJFdmVudD4ocHJvcEV2ZW50cylcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZUV2ZW50czxcblx0VElucHV0IGV4dGVuZHMge1xuXHRcdHN0YXJ0OiBEYXlqcyB8IERhdGUgfCBzdHJpbmdcblx0XHRlbmQ6IERheWpzIHwgRGF0ZSB8IHN0cmluZ1xuXHR9LFxuXHRUT3V0cHV0LFxuPihldmVudHM6IFRJbnB1dFtdIHwgdW5kZWZpbmVkKTogVE91dHB1dFtdIHtcblx0aWYgKCFldmVudHMgfHwgIWV2ZW50cy5sZW5ndGgpIHtcblx0XHRyZXR1cm4gW11cblx0fVxuXG5cdHJldHVybiBldmVudHMubWFwKChldmVudCkgPT4ge1xuXHRcdHJldHVybiB7XG5cdFx0XHQuLi5ldmVudCxcblx0XHRcdHN0YXJ0OiBkYXlqcy5pc0RheWpzKGV2ZW50LnN0YXJ0KSA/IGV2ZW50LnN0YXJ0IDogZGF5anMoZXZlbnQuc3RhcnQpLFxuXHRcdFx0ZW5kOiBkYXlqcy5pc0RheWpzKGV2ZW50LmVuZCkgPyBldmVudC5lbmQgOiBkYXlqcyhldmVudC5lbmQpLFxuXHRcdH0gYXMgVE91dHB1dFxuXHR9KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSB7IE9wVW5pdFR5cGUgYXMgRGF5anNPcFVuaXRUeXBlLCBQbHVnaW5GdW5jIH0gZnJvbSAnZGF5anMnXG5pbXBvcnQgZGF5anMgZnJvbSAnZGF5anMnXG5pbXBvcnQgaXNCZXR3ZWVuIGZyb20gJ2RheWpzL3BsdWdpbi9pc0JldHdlZW4uanMnXG5pbXBvcnQgaXNTYW1lT3JBZnRlciBmcm9tICdkYXlqcy9wbHVnaW4vaXNTYW1lT3JBZnRlci5qcydcbmltcG9ydCBpc1NhbWVPckJlZm9yZSBmcm9tICdkYXlqcy9wbHVnaW4vaXNTYW1lT3JCZWZvcmUuanMnXG5pbXBvcnQgbG9jYWxlRGF0YSBmcm9tICdkYXlqcy9wbHVnaW4vbG9jYWxlRGF0YS5qcydcbmltcG9ydCBtaW5NYXggZnJvbSAnZGF5anMvcGx1Z2luL21pbk1heC5qcydcbmltcG9ydCB0aW1lem9uZSBmcm9tICdkYXlqcy9wbHVnaW4vdGltZXpvbmUuanMnXG5pbXBvcnQgdXRjIGZyb20gJ2RheWpzL3BsdWdpbi91dGMuanMnXG5pbXBvcnQgd2Vla2RheSBmcm9tICdkYXlqcy9wbHVnaW4vd2Vla2RheS5qcydcbmltcG9ydCB3ZWVrT2ZZZWFyIGZyb20gJ2RheWpzL3BsdWdpbi93ZWVrT2ZZZWFyLmpzJ1xuXG4vKipcbiAqIFBsdWdpbiB0aGF0IGZpeGVzIGEgZGF5anMtdGltZXpvbmUgYnVnIHdoZXJlIC5zdGFydE9mKCkgYW5kIC5lbmRPZigpIGRyb3BcbiAqIHRpbWV6b25lIGluZm8gd2hlbiB0aGUgc3lzdGVtJ3MgbG9jYWwgdGltZXpvbmUgaGFzIGEgRFNUIHRyYW5zaXRpb24gbmVhclxuICogdGhlIHRhcmdldCBkYXRlLiBBZnRlciBlYWNoIHN0YXJ0T2YvZW5kT2YgY2FsbCwgaWYgdGhlIFVUQyBvZmZzZXQgaGFzXG4gKiBkcmlmdGVkIGZyb20gd2hhdCB0aGUgdGltZXpvbmUgZXhwZWN0cywgcmUtYXBwbHkgdGhlIHRpbWV6b25lIHdpdGhcbiAqIGtlZXBMb2NhbFRpbWU9dHJ1ZSB0byByZXN0b3JlIHRoZSBjb3JyZWN0IG9mZnNldC5cbiAqL1xuaW50ZXJmYWNlIERheWpzSW50ZXJuYWwgZXh0ZW5kcyBkYXlqcy5EYXlqcyB7XG5cdCR4OiB7ICR0aW1lem9uZT86IHN0cmluZyB9XG59XG5cbmxldCBkZWZhdWx0VGltZXpvbmU6IHN0cmluZyB8IHVuZGVmaW5lZFxuXG5jb25zdCBmaXhUaW1lem9uZU9mZnNldDogUGx1Z2luRnVuYyA9IChfb3B0aW9uLCBkYXlqc0NsYXNzLCBkYXlqc0ZhY3RvcnkpID0+IHtcblx0Y29uc3QgcHJvdG8gPSBkYXlqc0NsYXNzLnByb3RvdHlwZVxuXG5cdC8vIEludGVyY2VwdCBzZXREZWZhdWx0IHRvIHRyYWNrIHRoZSBjb25maWd1cmVkIHRpbWV6b25lXG5cdGNvbnN0IG9yaWdpbmFsU2V0RGVmYXVsdCA9IGRheWpzRmFjdG9yeS50ei5zZXREZWZhdWx0XG5cdGRheWpzRmFjdG9yeS50ei5zZXREZWZhdWx0ID0gKHRpbWV6b25lPzogc3RyaW5nKSA9PiB7XG5cdFx0ZGVmYXVsdFRpbWV6b25lID0gdGltZXpvbmVcblx0XHRyZXR1cm4gb3JpZ2luYWxTZXREZWZhdWx0KHRpbWV6b25lKVxuXHR9XG5cblx0dHlwZSBTdGFydE9mRm4gPSAodW5pdDogRGF5anNPcFVuaXRUeXBlLCBfc3RhcnRPZj86IGJvb2xlYW4pID0+IGRheWpzLkRheWpzXG5cdGNvbnN0IG9yaWdpbmFsU3RhcnRPZiA9IHByb3RvLnN0YXJ0T2YgYXMgU3RhcnRPZkZuXG5cdGNvbnN0IG9yaWdpbmFsRW5kT2YgPSBwcm90by5lbmRPZlxuXG5cdGZ1bmN0aW9uIHJlc3RvcmVUaW1lem9uZShcblx0XHRpbnN0YW5jZTogZGF5anMuRGF5anMsXG5cdFx0cmVzdWx0OiBkYXlqcy5EYXlqc1xuXHQpOiBkYXlqcy5EYXlqcyB7XG5cdFx0Y29uc3QgdHogPSAoaW5zdGFuY2UgYXMgRGF5anNJbnRlcm5hbCkuJHg/LiR0aW1lem9uZSB8fCBkZWZhdWx0VGltZXpvbmVcblx0XHRpZiAoIXR6KSByZXR1cm4gcmVzdWx0XG5cblx0XHRjb25zdCBleHBlY3RlZE9mZnNldCA9IGRheWpzRmFjdG9yeVxuXHRcdFx0LnR6KHJlc3VsdC5mb3JtYXQoJ1lZWVktTU0tRERUSEg6bW06c3MnKSwgdHopXG5cdFx0XHQudXRjT2Zmc2V0KClcblx0XHRpZiAocmVzdWx0LnV0Y09mZnNldCgpICE9PSBleHBlY3RlZE9mZnNldCkge1xuXHRcdFx0cmV0dXJuIHJlc3VsdC50eih0eiwgdHJ1ZSlcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdFxuXHR9XG5cblx0Ly8gZGF5anMncyBlbmRPZiBjYWxscyBzdGFydE9mKHVuaXQsIGZhbHNlKSBpbnRlcm5hbGx5IOKAlCB0aGUgc2Vjb25kIGFyZ1xuXHQvLyAoX3N0YXJ0T2YpIGNvbnRyb2xzIHN0YXJ0LXZzLWVuZCBiZWhhdmlvci4gV2UgbXVzdCBmb3J3YXJkIGl0LlxuXHRwcm90by5zdGFydE9mID0gZnVuY3Rpb24gKHVuaXQ6IERheWpzT3BVbml0VHlwZSwgX3N0YXJ0T2Y/OiBib29sZWFuKSB7XG5cdFx0Y29uc3QgcmVzdWx0ID0gb3JpZ2luYWxTdGFydE9mLmNhbGwodGhpcywgdW5pdCwgX3N0YXJ0T2YpXG5cdFx0cmV0dXJuIHJlc3RvcmVUaW1lem9uZSh0aGlzLCByZXN1bHQpXG5cdH1cblxuXHQvLyBlbmRPZiBkZWxlZ2F0ZXMgdG8gc3RhcnRPZih1bml0LCBmYWxzZSksIHNvIHRoZSBwYXRjaGVkIHN0YXJ0T2YgaGFuZGxlcyBpdFxuXHRwcm90by5lbmRPZiA9IG9yaWdpbmFsRW5kT2Zcbn1cblxuLy8gRXh0ZW5kIGRheWpzIHdpdGggcGx1Z2luc1xuZGF5anMuZXh0ZW5kKHdlZWtkYXkpXG5kYXlqcy5leHRlbmQod2Vla09mWWVhcilcbmRheWpzLmV4dGVuZChpc1NhbWVPckFmdGVyKVxuZGF5anMuZXh0ZW5kKGlzU2FtZU9yQmVmb3JlKVxuZGF5anMuZXh0ZW5kKGlzQmV0d2VlbilcbmRheWpzLmV4dGVuZChtaW5NYXgpXG5kYXlqcy5leHRlbmQodGltZXpvbmUpXG5kYXlqcy5leHRlbmQodXRjKVxuZGF5anMuZXh0ZW5kKGxvY2FsZURhdGEpXG5kYXlqcy5leHRlbmQoZml4VGltZXpvbmVPZmZzZXQpXG5cbi8vIEN1c3RvbSBkYXlqcyBjb25zdHJ1Y3RvciB0aGF0IGF1dG9tYXRpY2FsbHkgdXNlcyAudHooKSBmb3IgYWxsIGluc3RhbmNlcy5cbi8vIFRoaXMgZW5zdXJlcyB0aGF0IGRheWpzKCkgY2FsbHMgdGhyb3VnaG91dCB0aGUgY29kZWJhc2UgaG9ub3IgdGhlIGRlZmF1bHRcbi8vIHRpbWV6b25lIHNldCB2aWEgZGF5anMudHouc2V0RGVmYXVsdCgpLlxuY29uc3QgdGltZXpvbmVBd2FyZURheWpzID0gKC4uLmFyZ3M6IHVua25vd25bXSkgPT4ge1xuXHRyZXR1cm4gKGRheWpzIGFzIHVua25vd24gYXMgeyB0ejogKC4uLmE6IHVua25vd25bXSkgPT4gZGF5anMuRGF5anMgfSkudHooXG5cdFx0Li4uYXJnc1xuXHQpXG59XG5cbi8vIEF0dGFjaCBhbGwgc3RhdGljIG1ldGhvZHMgYW5kIHByb3BlcnRpZXMgZnJvbSB0aGUgb3JpZ2luYWwgZGF5anMgdG8gb3VyIHdyYXBwZXIuXG4vLyBUaGlzIGFsbG93cyB0aGUgd3JhcHBlciB0byBiZSB1c2VkIGFzIGEgZHJvcC1pbiByZXBsYWNlbWVudC5cbk9iamVjdC5hc3NpZ24odGltZXpvbmVBd2FyZURheWpzLCBkYXlqcylcblxuLy8gRXhwb3J0IHRoZSBEYXlqcyB0eXBlIHNlcGFyYXRlbHkgZm9yIHVzZSBhcyBhIHR5cGUgaW4gb3RoZXIgZmlsZXMuXG4vLyBGaWxlcyBzaG91bGQgdXNlICdpbXBvcnQgZGF5anMsIHsgdHlwZSBEYXlqcyB9IGZyb20gXCJAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZ1wiJ1xuZXhwb3J0IHR5cGUgeyBEYXlqcywgTWFuaXB1bGF0ZVR5cGUsIE9wVW5pdFR5cGUgfSBmcm9tICdkYXlqcydcbmV4cG9ydCBkZWZhdWx0IHRpbWV6b25lQXdhcmVEYXlqcyBhcyB0eXBlb2YgZGF5anNcbiIsCiAgICAiaW1wb3J0IHR5cGUge1xuXHREcmFnQ2FuY2VsRXZlbnQsXG5cdERyYWdFbmRFdmVudCxcblx0RHJhZ1N0YXJ0RXZlbnQsXG59IGZyb20gJ0BkbmQta2l0L2NvcmUnXG5pbXBvcnQge1xuXHREbmRDb250ZXh0LFxuXHRNb3VzZVNlbnNvcixcblx0cG9pbnRlcldpdGhpbixcblx0VG91Y2hTZW5zb3IsXG5cdHVzZVNlbnNvcixcblx0dXNlU2Vuc29ycyxcbn0gZnJvbSAnQGRuZC1raXQvY29yZSdcbmltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHsgUmVjdXJyZW5jZUVkaXREaWFsb2cgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvY29tcG9uZW50cy9yZWN1cnJlbmNlLWVkaXQtZGlhbG9nJ1xuaW1wb3J0IHR5cGUgeyBSZWN1cnJlbmNlRWRpdFNjb3BlIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL3R5cGVzJ1xuaW1wb3J0IHsgaXNSZWN1cnJpbmdFdmVudCB9IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS91dGlscy9yZWN1cnJlbmNlLWhhbmRsZXInXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgeyBnZXRVcGRhdGVkRXZlbnQgfSBmcm9tICcuL2RuZC11dGlscydcbmltcG9ydCB7IEV2ZW50RHJhZ092ZXJsYXkgfSBmcm9tICcuL2V2ZW50LWRyYWctb3ZlcmxheSdcblxuaW50ZXJmYWNlIENhbGVuZGFyRG5kQ29udGV4dFByb3BzIHtcblx0Y2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gQ2FsZW5kYXJEbmRDb250ZXh0KHsgY2hpbGRyZW4gfTogQ2FsZW5kYXJEbmRDb250ZXh0UHJvcHMpIHtcblx0Y29uc3QgYWN0aXZlRXZlbnRSZWYgPSB1c2VSZWY8Q2FsZW5kYXJFdmVudD4obnVsbClcblx0Y29uc3QgZHJhZ092ZXJsYXlSZWYgPSB1c2VSZWY8e1xuXHRcdHNldEFjdGl2ZUV2ZW50OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQgfCBudWxsKSA9PiB2b2lkXG5cdH0+KG51bGwpXG5cblx0Y29uc3QgeyB1cGRhdGVFdmVudCwgdXBkYXRlUmVjdXJyaW5nRXZlbnQsIGRpc2FibGVEcmFnQW5kRHJvcCB9ID1cblx0XHR1c2VTbWFydENhbGVuZGFyQ29udGV4dCgoY29udGV4dCkgPT4gKHtcblx0XHRcdHVwZGF0ZUV2ZW50OiBjb250ZXh0LnVwZGF0ZUV2ZW50LFxuXHRcdFx0dXBkYXRlUmVjdXJyaW5nRXZlbnQ6IGNvbnRleHQudXBkYXRlUmVjdXJyaW5nRXZlbnQsXG5cdFx0XHRkaXNhYmxlRHJhZ0FuZERyb3A6IGNvbnRleHQuZGlzYWJsZURyYWdBbmREcm9wLFxuXHRcdH0pKVxuXG5cdC8vIFN0YXRlIGZvciByZWN1cnJpbmcgZXZlbnQgZGlhbG9nXG5cdGNvbnN0IFtyZWN1cnJpbmdEaWFsb2csIHNldFJlY3VycmluZ0RpYWxvZ10gPSB1c2VTdGF0ZTx7XG5cdFx0aXNPcGVuOiBib29sZWFuXG5cdFx0ZXZlbnQ6IENhbGVuZGFyRXZlbnQgfCBudWxsXG5cdFx0dXBkYXRlczogUGFydGlhbDxDYWxlbmRhckV2ZW50PiB8IG51bGxcblx0fT4oe1xuXHRcdGlzT3BlbjogZmFsc2UsXG5cdFx0ZXZlbnQ6IG51bGwsXG5cdFx0dXBkYXRlczogbnVsbCxcblx0fSlcblxuXHQvLyBDb25maWd1cmUgc2Vuc29ycyB3aXRoIHJlZHVjZWQgYWN0aXZhdGlvbiBjb25zdHJhaW50cyBmb3IgZWFzaWVyIGRyYWdnaW5nXG5cdGNvbnN0IG1vdXNlU2Vuc29yID0gdXNlU2Vuc29yKE1vdXNlU2Vuc29yLCB7XG5cdFx0Ly8gUmVxdWlyZSBtaW5pbWFsIG1vdmVtZW50IGJlZm9yZSBhY3RpdmF0aW5nXG5cdFx0YWN0aXZhdGlvbkNvbnN0cmFpbnQ6IHtcblx0XHRcdGRpc3RhbmNlOiAyLFxuXHRcdH0sXG5cdH0pXG5cblx0Y29uc3QgdG91Y2hTZW5zb3IgPSB1c2VTZW5zb3IoVG91Y2hTZW5zb3IsIHtcblx0XHQvLyBSZWR1Y2UgZGVsYXkgZm9yIHRvdWNoIGRldmljZXNcblx0XHRhY3RpdmF0aW9uQ29uc3RyYWludDoge1xuXHRcdFx0ZGVsYXk6IDEwMCxcblx0XHRcdHRvbGVyYW5jZTogNSxcblx0XHR9LFxuXHR9KVxuXG5cdGNvbnN0IHNlbnNvcnMgPSB1c2VTZW5zb3JzKG1vdXNlU2Vuc29yLCB0b3VjaFNlbnNvcilcblxuXHQvLyBIZWxwZXIgZnVuY3Rpb24gdG8gcGVyZm9ybSB0aGUgYWN0dWFsIGV2ZW50IHVwZGF0ZVxuXHRjb25zdCBwZXJmb3JtRXZlbnRVcGRhdGUgPSAoXG5cdFx0ZXZlbnQ6IENhbGVuZGFyRXZlbnQsXG5cdFx0dXBkYXRlczogUGFydGlhbDxDYWxlbmRhckV2ZW50PlxuXHQpID0+IHtcblx0XHQvLyBWYWxpZGF0ZSBpbnB1dHNcblx0XHRpZiAoIWV2ZW50IHx8ICFldmVudC5pZCkge1xuXHRcdFx0cmV0dXJuXG5cdFx0fVxuXG5cdFx0aWYgKCF1cGRhdGVzIHx8IE9iamVjdC5rZXlzKHVwZGF0ZXMpLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0cmV0dXJuXG5cdFx0fVxuXG5cdFx0aWYgKGlzUmVjdXJyaW5nRXZlbnQoZXZlbnQpKSB7XG5cdFx0XHQvLyBTaG93IGRpYWxvZyBmb3IgcmVjdXJyaW5nIGV2ZW50c1xuXHRcdFx0c2V0UmVjdXJyaW5nRGlhbG9nKHtcblx0XHRcdFx0aXNPcGVuOiB0cnVlLFxuXHRcdFx0XHRldmVudCxcblx0XHRcdFx0dXBkYXRlcyxcblx0XHRcdH0pXG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIERpcmVjdGx5IHVwZGF0ZSByZWd1bGFyIGV2ZW50c1xuXHRcdFx0dXBkYXRlRXZlbnQoZXZlbnQuaWQsIHVwZGF0ZXMpXG5cdFx0fVxuXHR9XG5cblx0Ly8gSGFuZGxlIHJlY3VycmluZyBldmVudCBkaWFsb2cgY29uZmlybWF0aW9uXG5cdGNvbnN0IGhhbmRsZVJlY3VycmluZ0V2ZW50Q29uZmlybSA9IChzY29wZTogUmVjdXJyZW5jZUVkaXRTY29wZSkgPT4ge1xuXHRcdGlmICghcmVjdXJyaW5nRGlhbG9nLmV2ZW50IHx8ICFyZWN1cnJpbmdEaWFsb2cudXBkYXRlcykge1xuXHRcdFx0c2V0UmVjdXJyaW5nRGlhbG9nKHsgaXNPcGVuOiBmYWxzZSwgZXZlbnQ6IG51bGwsIHVwZGF0ZXM6IG51bGwgfSlcblx0XHRcdHJldHVyblxuXHRcdH1cblxuXHRcdHRyeSB7XG5cdFx0XHR1cGRhdGVSZWN1cnJpbmdFdmVudChyZWN1cnJpbmdEaWFsb2cuZXZlbnQsIHJlY3VycmluZ0RpYWxvZy51cGRhdGVzLCB7XG5cdFx0XHRcdHNjb3BlLFxuXHRcdFx0XHRldmVudERhdGU6IHJlY3VycmluZ0RpYWxvZy5ldmVudC5zdGFydCxcblx0XHRcdH0pXG5cdFx0fSBjYXRjaCB7XG5cdFx0XHQvLyBTaWxlbnRseSBoYW5kbGUgZXJyb3IgYW5kIHJlc2V0IGRpYWxvZyBzdGF0ZVxuXHRcdH0gZmluYWxseSB7XG5cdFx0XHRzZXRSZWN1cnJpbmdEaWFsb2coeyBpc09wZW46IGZhbHNlLCBldmVudDogbnVsbCwgdXBkYXRlczogbnVsbCB9KVxuXHRcdH1cblx0fVxuXG5cdC8vIEhhbmRsZSByZWN1cnJpbmcgZXZlbnQgZGlhbG9nIGNsb3NlXG5cdGNvbnN0IGhhbmRsZVJlY3VycmluZ0V2ZW50Q2xvc2UgPSAoKSA9PiB7XG5cdFx0c2V0UmVjdXJyaW5nRGlhbG9nKHsgaXNPcGVuOiBmYWxzZSwgZXZlbnQ6IG51bGwsIHVwZGF0ZXM6IG51bGwgfSlcblx0fVxuXG5cdGNvbnN0IGhhbmRsZURyYWdTdGFydCA9IChldmVudDogRHJhZ1N0YXJ0RXZlbnQpID0+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+IFRcbik6IFQgfCBTbWFydENhbGVuZGFyQ29udGV4dFR5cGUge1xuXHRjb25zdCByZXNvdXJjZUNvbnRleHQgPSB1c2VDb250ZXh0KFJlc291cmNlQ2FsZW5kYXJDb250ZXh0KVxuXHRjb25zdCByZWd1bGFyQ29udGV4dCA9IHVzZUNvbnRleHQoQ2FsZW5kYXJDb250ZXh0KVxuXG5cdC8vIEluIHJlZ3VsYXIgY2FsZW5kYXJzLCByZXNvdXJjZS1zcGVjaWZpYyBmaWVsZHMgd2lsbCBiZSB1bmRlZmluZWQuXG5cdGNvbnN0IGNvbnRleHQgPSAocmVzb3VyY2VDb250ZXh0IHx8XG5cdFx0cmVndWxhckNvbnRleHQpIGFzIFNtYXJ0Q2FsZW5kYXJDb250ZXh0VHlwZVxuXG5cdGlmICghY29udGV4dCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcblx0XHRcdCd1c2VTbWFydENhbGVuZGFyQ29udGV4dCBtdXN0IGJlIHVzZWQgd2l0aGluIGEgQ2FsZW5kYXJQcm92aWRlciBvciBSZXNvdXJjZUNhbGVuZGFyUHJvdmlkZXInXG5cdFx0KVxuXHR9XG5cblx0cmV0dXJuIHNlbGVjdG9yID8gc2VsZWN0b3IoY29udGV4dCkgOiBjb250ZXh0XG59XG5cbi8qKlxuICogUHVibGljIGhvb2sgZXhwb3J0ZWQgZm9yIGxpYnJhcnkgdXNlcnMuXG4gKiBSZXR1cm5zIGEgbGltaXRlZCBzZXQgb2YgY29tbW9ubHkgdXNlZCBwcm9wZXJ0aWVzIGFuZCBtZXRob2RzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlSWxhbXlDYWxlbmRhckNvbnRleHQoKTogVXNlSWxhbXlDYWxlbmRhckNvbnRleHRSZXR1cm4ge1xuXHRjb25zdCBjb250ZXh0ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXG5cdHJldHVybiB7XG5cdFx0Y3VycmVudERhdGU6IGNvbnRleHQuY3VycmVudERhdGUsXG5cdFx0dmlldzogY29udGV4dC52aWV3LFxuXHRcdGV2ZW50czogY29udGV4dC5ldmVudHMsXG5cdFx0aXNFdmVudEZvcm1PcGVuOiBjb250ZXh0LmlzRXZlbnRGb3JtT3Blbixcblx0XHRzZWxlY3RlZEV2ZW50OiBjb250ZXh0LnNlbGVjdGVkRXZlbnQsXG5cdFx0c2VsZWN0ZWREYXRlOiBjb250ZXh0LnNlbGVjdGVkRGF0ZSxcblx0XHRmaXJzdERheU9mV2VlazogY29udGV4dC5maXJzdERheU9mV2Vlayxcblx0XHRyZXNvdXJjZXM6IGNvbnRleHQucmVzb3VyY2VzIHx8IFtdLFxuXHRcdHNldEN1cnJlbnREYXRlOiBjb250ZXh0LnNldEN1cnJlbnREYXRlLFxuXHRcdHNlbGVjdERhdGU6IGNvbnRleHQuc2VsZWN0RGF0ZSxcblx0XHRzZXRWaWV3OiBjb250ZXh0LnNldFZpZXcsXG5cdFx0bmV4dFBlcmlvZDogY29udGV4dC5uZXh0UGVyaW9kLFxuXHRcdHByZXZQZXJpb2Q6IGNvbnRleHQucHJldlBlcmlvZCxcblx0XHR0b2RheTogY29udGV4dC50b2RheSxcblx0XHRhZGRFdmVudDogY29udGV4dC5hZGRFdmVudCxcblx0XHR1cGRhdGVFdmVudDogY29udGV4dC51cGRhdGVFdmVudCxcblx0XHRkZWxldGVFdmVudDogY29udGV4dC5kZWxldGVFdmVudCxcblx0XHRvcGVuRXZlbnRGb3JtOiBjb250ZXh0Lm9wZW5FdmVudEZvcm0sXG5cdFx0Y2xvc2VFdmVudEZvcm06IGNvbnRleHQuY2xvc2VFdmVudEZvcm0sXG5cdFx0Z2V0RXZlbnRzRm9yUmVzb3VyY2U6IGNvbnRleHQuZ2V0RXZlbnRzRm9yUmVzb3VyY2UsXG5cdFx0YnVzaW5lc3NIb3VyczogY29udGV4dC5idXNpbmVzc0hvdXJzLFxuXHR9XG59XG4iLAogICAgImltcG9ydCB7IGNyZWF0ZUNvbnRleHQgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgRXZlbnRGb3JtUHJvcHMgfSBmcm9tICdAL2NvbXBvbmVudHMvZXZlbnQtZm9ybS9ldmVudC1mb3JtJ1xuaW1wb3J0IHR5cGUgeyBCdXNpbmVzc0hvdXJzLCBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHR5cGUge1xuXHRDYWxlbmRhckNsYXNzZXNPdmVycmlkZSxcblx0Q2VsbENsaWNrSW5mbyxcblx0UmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3JQcm9wcyxcbn0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci90eXBlcydcbmltcG9ydCB0eXBlIHsgUmVjdXJyZW5jZUVkaXRPcHRpb25zIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHR5cGUgeyBUcmFuc2xhdG9yRnVuY3Rpb24gfSBmcm9tICdAL2xpYi90cmFuc2xhdGlvbnMvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyVmlldywgVGltZUZvcm1hdCB9IGZyb20gJ0AvdHlwZXMnXG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2FsZW5kYXJDb250ZXh0VHlwZSB7XG5cdGN1cnJlbnREYXRlOiBEYXlqc1xuXHR2aWV3OiBDYWxlbmRhclZpZXdcblx0ZXZlbnRzOiBDYWxlbmRhckV2ZW50W11cblx0cmF3RXZlbnRzOiBDYWxlbmRhckV2ZW50W10gLy8gVW5wcm9jZXNzZWQgZXZlbnRzIGZvciBleHBvcnRcblx0aXNFdmVudEZvcm1PcGVuOiBib29sZWFuXG5cdHNlbGVjdGVkRXZlbnQ6IENhbGVuZGFyRXZlbnQgfCBudWxsXG5cdHNlbGVjdGVkRGF0ZTogRGF5anMgfCBudWxsXG5cdGZpcnN0RGF5T2ZXZWVrOiBudW1iZXIgLy8gMCBmb3IgU3VuZGF5LCAxIGZvciBNb25kYXksIGV0Yy5cblx0c2V0Q3VycmVudERhdGU6IChkYXRlOiBEYXlqcykgPT4gdm9pZFxuXHRzZWxlY3REYXRlOiAoZGF0ZTogRGF5anMpID0+IHZvaWRcblx0c2V0VmlldzogKHZpZXc6IENhbGVuZGFyVmlldykgPT4gdm9pZFxuXHRuZXh0UGVyaW9kOiAoKSA9PiB2b2lkXG5cdHByZXZQZXJpb2Q6ICgpID0+IHZvaWRcblx0dG9kYXk6ICgpID0+IHZvaWRcblx0YWRkRXZlbnQ6IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuXHR1cGRhdGVFdmVudDogKGV2ZW50SWQ6IHN0cmluZyB8IG51bWJlciwgZXZlbnQ6IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD4pID0+IHZvaWRcblx0dXBkYXRlUmVjdXJyaW5nRXZlbnQ6IChcblx0XHRldmVudDogQ2FsZW5kYXJFdmVudCxcblx0XHR1cGRhdGVzOiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+LFxuXHRcdG9wdGlvbnM6IFJlY3VycmVuY2VFZGl0T3B0aW9uc1xuXHQpID0+IHZvaWRcblx0ZGVsZXRlRXZlbnQ6IChldmVudElkOiBzdHJpbmcgfCBudW1iZXIpID0+IHZvaWRcblx0ZGVsZXRlUmVjdXJyaW5nRXZlbnQ6IChcblx0XHRldmVudDogQ2FsZW5kYXJFdmVudCxcblx0XHRvcHRpb25zOiBSZWN1cnJlbmNlRWRpdE9wdGlvbnNcblx0KSA9PiB2b2lkXG5cdG9wZW5FdmVudEZvcm06IChldmVudERhdGE/OiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+KSA9PiB2b2lkXG5cdGNsb3NlRXZlbnRGb3JtOiAoKSA9PiB2b2lkXG5cdGdldEV2ZW50c0ZvckRhdGVSYW5nZTogKHN0YXJ0RGF0ZTogRGF5anMsIGVuZERhdGU6IERheWpzKSA9PiBDYWxlbmRhckV2ZW50W11cblx0ZmluZFBhcmVudFJlY3VycmluZ0V2ZW50OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IENhbGVuZGFyRXZlbnQgfCBudWxsXG5cdHJlbmRlckV2ZW50PzogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiBSZWFjdC5SZWFjdE5vZGVcblx0b25FdmVudENsaWNrOiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0b25DZWxsQ2xpY2s6IChpbmZvOiBDZWxsQ2xpY2tJbmZvKSA9PiB2b2lkXG5cdGN1cnJlbnRMb2NhbGU/OiBzdHJpbmdcblx0ZGlzYWJsZUNlbGxDbGljaz86IGJvb2xlYW5cblx0ZGlzYWJsZUV2ZW50Q2xpY2s/OiBib29sZWFuXG5cdGRpc2FibGVEcmFnQW5kRHJvcD86IGJvb2xlYW5cblx0ZGF5TWF4RXZlbnRzOiBudW1iZXJcblx0ZXZlbnRTcGFjaW5nOiBudW1iZXJcblx0c3RpY2t5Vmlld0hlYWRlcjogYm9vbGVhblxuXHR2aWV3SGVhZGVyQ2xhc3NOYW1lOiBzdHJpbmdcblx0aGVhZGVyQ29tcG9uZW50PzogUmVhY3QuUmVhY3ROb2RlIC8vIE9wdGlvbmFsIGN1c3RvbSBoZWFkZXIgY29tcG9uZW50XG5cdGhlYWRlckNsYXNzTmFtZT86IHN0cmluZyAvLyBPcHRpb25hbCBjdXN0b20gaGVhZGVyIGNsYXNzXG5cdGJ1c2luZXNzSG91cnM/OiBCdXNpbmVzc0hvdXJzIHwgQnVzaW5lc3NIb3Vyc1tdXG5cdHJlbmRlckV2ZW50Rm9ybT86IChwcm9wczogRXZlbnRGb3JtUHJvcHMpID0+IFJlYWN0LlJlYWN0Tm9kZVxuXHQvLyBUcmFuc2xhdGlvbiBmdW5jdGlvblxuXHR0OiBUcmFuc2xhdG9yRnVuY3Rpb25cblx0dGltZUZvcm1hdDogVGltZUZvcm1hdFxuXHRjbGFzc2VzT3ZlcnJpZGU/OiBDYWxlbmRhckNsYXNzZXNPdmVycmlkZVxuXHRyZW5kZXJDdXJyZW50VGltZUluZGljYXRvcj86IChcblx0XHRwcm9wczogUmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3JQcm9wc1xuXHQpID0+IFJlYWN0LlJlYWN0Tm9kZVxuXHRoaWRlTm9uQnVzaW5lc3NIb3Vycz86IGJvb2xlYW5cblx0aGlkZGVuRGF5cz86IFNldDxudW1iZXI+XG59XG5cbi8vIENhbGVuZGFyQ29udGV4dCBpcyBrZXB0IGZvciBpbnRlcm5hbCBQcm92aWRlciB1c2FnZVxuZXhwb3J0IGNvbnN0IENhbGVuZGFyQ29udGV4dDogUmVhY3QuQ29udGV4dDxDYWxlbmRhckNvbnRleHRUeXBlIHwgdW5kZWZpbmVkPiA9XG5cdGNyZWF0ZUNvbnRleHQ8Q2FsZW5kYXJDb250ZXh0VHlwZSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKVxuIiwKICAgICJpbXBvcnQgeyBjcmVhdGVDb250ZXh0IH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyQ29udGV4dFR5cGUgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcbmltcG9ydCB0eXBlIHsgQ2VsbENsaWNrSW5mbyB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IFJlc291cmNlIH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci90eXBlcydcblxuZXhwb3J0IGludGVyZmFjZSBSZXNvdXJjZUNhbGVuZGFyQ29udGV4dFR5cGUgZXh0ZW5kcyBDYWxlbmRhckNvbnRleHRUeXBlIHtcblx0Ly8gUmVzb3VyY2Utc3BlY2lmaWMgc3RhdGVcblx0cmVzb3VyY2VzOiBSZXNvdXJjZVtdXG5cdHZpc2libGVSZXNvdXJjZXM6IFNldDxzdHJpbmcgfCBudW1iZXI+XG5cblx0Ly8gUmVzb3VyY2UgdXRpbGl0aWVzXG5cdGdldEV2ZW50c0ZvclJlc291cmNlOiAocmVzb3VyY2VJZDogc3RyaW5nIHwgbnVtYmVyKSA9PiBDYWxlbmRhckV2ZW50W11cblx0Z2V0RXZlbnRzRm9yUmVzb3VyY2VzOiAocmVzb3VyY2VJZHM6IChzdHJpbmcgfCBudW1iZXIpW10pID0+IENhbGVuZGFyRXZlbnRbXVxuXHRnZXRSZXNvdXJjZUJ5SWQ6IChyZXNvdXJjZUlkOiBzdHJpbmcgfCBudW1iZXIpID0+IFJlc291cmNlIHwgdW5kZWZpbmVkXG5cdGdldFZpc2libGVSZXNvdXJjZXM6ICgpID0+IFJlc291cmNlW11cblxuXHQvLyBDcm9zcy1yZXNvdXJjZSBldmVudCB1dGlsaXRpZXNcblx0aXNFdmVudENyb3NzUmVzb3VyY2U6IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gYm9vbGVhblxuXHRnZXRFdmVudFJlc291cmNlSWRzOiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IChzdHJpbmcgfCBudW1iZXIpW11cblxuXHQvLyBBZGRpdGlvbmFsIHByb3BlcnRpZXMgZnJvbSBjYWxlbmRhciBjb250ZXh0XG5cdG9uRXZlbnRDbGljazogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG5cdG9uQ2VsbENsaWNrOiAoaW5mbzogQ2VsbENsaWNrSW5mbykgPT4gdm9pZFxuXHRyZW5kZXJSZXNvdXJjZT86IChyZXNvdXJjZTogUmVzb3VyY2UpID0+IFJlYWN0LlJlYWN0Tm9kZVxuXHRvcmllbnRhdGlvbjogJ2hvcml6b250YWwnIHwgJ3ZlcnRpY2FsJ1xufVxuXG4vLyBSZXNvdXJjZUNhbGVuZGFyQ29udGV4dCBpcyBrZXB0IGZvciBpbnRlcm5hbCBQcm92aWRlciB1c2FnZVxuZXhwb3J0IGNvbnN0IFJlc291cmNlQ2FsZW5kYXJDb250ZXh0OiBSZWFjdC5Db250ZXh0PFxuXHRSZXNvdXJjZUNhbGVuZGFyQ29udGV4dFR5cGUgfCB1bmRlZmluZWRcbj4gPSBjcmVhdGVDb250ZXh0PFJlc291cmNlQ2FsZW5kYXJDb250ZXh0VHlwZSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VNZW1vLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhclByb3ZpZGVyUHJvcHMgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvcHJvdmlkZXInXG5pbXBvcnQgdHlwZSB7XG5cdENhbGVuZGFyQ2xhc3Nlc092ZXJyaWRlLFxuXHRDZWxsQ2xpY2tJbmZvLFxuXHRSZW5kZXJDdXJyZW50VGltZUluZGljYXRvclByb3BzLFxufSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBSZXNvdXJjZSB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvdHlwZXMnXG5pbXBvcnQgeyB1c2VDYWxlbmRhckVuZ2luZSB9IGZyb20gJ0AvaG9va3MvdXNlLWNhbGVuZGFyLWVuZ2luZSdcbmltcG9ydCB7IFJlc291cmNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnLi9jb250ZXh0J1xuXG5jb25zdCBnZXRFdmVudFJlc291cmNlSWRzID0gKGV2ZW50OiBDYWxlbmRhckV2ZW50KTogKHN0cmluZyB8IG51bWJlcilbXSA9PiB7XG5cdGlmIChldmVudC5yZXNvdXJjZUlkcykge1xuXHRcdHJldHVybiBldmVudC5yZXNvdXJjZUlkc1xuXHR9XG5cdGlmIChldmVudC5yZXNvdXJjZUlkICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gW2V2ZW50LnJlc291cmNlSWRdXG5cdH1cblx0cmV0dXJuIFtdXG59XG5cbmludGVyZmFjZSBSZXNvdXJjZUNhbGVuZGFyUHJvdmlkZXJQcm9wcyBleHRlbmRzIENhbGVuZGFyUHJvdmlkZXJQcm9wcyB7XG5cdGV2ZW50cz86IENhbGVuZGFyRXZlbnRbXVxuXHRyZXNvdXJjZXM/OiBSZXNvdXJjZVtdXG5cdHJlbmRlclJlc291cmNlPzogKHJlc291cmNlOiBSZXNvdXJjZSkgPT4gUmVhY3QuUmVhY3ROb2RlXG5cdGNsYXNzZXNPdmVycmlkZT86IENhbGVuZGFyQ2xhc3Nlc092ZXJyaWRlXG5cdG9yaWVudGF0aW9uPzogJ2hvcml6b250YWwnIHwgJ3ZlcnRpY2FsJ1xuXHRyZW5kZXJDdXJyZW50VGltZUluZGljYXRvcj86IChcblx0XHRwcm9wczogUmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3JQcm9wc1xuXHQpID0+IFJlYWN0LlJlYWN0Tm9kZVxuXHRoaWRlTm9uQnVzaW5lc3NIb3Vycz86IGJvb2xlYW5cbn1cblxuZXhwb3J0IGNvbnN0IFJlc291cmNlQ2FsZW5kYXJQcm92aWRlcjogUmVhY3QuRkM8XG5cdFJlc291cmNlQ2FsZW5kYXJQcm92aWRlclByb3BzXG4+ID0gKHtcblx0Y2hpbGRyZW4sXG5cdGV2ZW50cyA9IFtdLFxuXHRyZXNvdXJjZXMgPSBbXSxcblx0Zmlyc3REYXlPZldlZWsgPSAwLFxuXHRpbml0aWFsVmlldyA9ICdtb250aCcsXG5cdGluaXRpYWxEYXRlLFxuXHRyZW5kZXJFdmVudCxcblx0b25FdmVudENsaWNrLFxuXHRvbkNlbGxDbGljayxcblx0b25WaWV3Q2hhbmdlLFxuXHRvbkV2ZW50QWRkLFxuXHRvbkV2ZW50VXBkYXRlLFxuXHRvbkV2ZW50RGVsZXRlLFxuXHRvbkRhdGVDaGFuZ2UsXG5cdGxvY2FsZSxcblx0dGltZXpvbmUsXG5cdGRpc2FibGVDZWxsQ2xpY2ssXG5cdGRpc2FibGVFdmVudENsaWNrLFxuXHRkaXNhYmxlRHJhZ0FuZERyb3AsXG5cdGRheU1heEV2ZW50cyxcblx0ZXZlbnRTcGFjaW5nID0gMSxcblx0c3RpY2t5Vmlld0hlYWRlciA9IHRydWUsXG5cdHZpZXdIZWFkZXJDbGFzc05hbWUgPSAnJyxcblx0aGVhZGVyQ29tcG9uZW50LFxuXHRoZWFkZXJDbGFzc05hbWUsXG5cdHRyYW5zbGF0aW9ucyxcblx0dHJhbnNsYXRvcixcblx0cmVuZGVyUmVzb3VyY2UsXG5cdHJlbmRlckV2ZW50Rm9ybSxcblx0YnVzaW5lc3NIb3Vycyxcblx0dGltZUZvcm1hdCA9ICcxMi1ob3VyJyxcblx0Y2xhc3Nlc092ZXJyaWRlLFxuXHRvcmllbnRhdGlvbiA9ICdob3Jpem9udGFsJyxcblx0cmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3IsXG5cdGhpZGVOb25CdXNpbmVzc0hvdXJzID0gZmFsc2UsXG5cdGhpZGRlbkRheXMsXG59KSA9PiB7XG5cdC8vIFJlc291cmNlLXNwZWNpZmljIHN0YXRlXG5cdGNvbnN0IFtjdXJyZW50UmVzb3VyY2VzXSA9IHVzZVN0YXRlPFJlc291cmNlW10+KHJlc291cmNlcylcblx0Y29uc3QgW3Zpc2libGVSZXNvdXJjZXMsIHNldFZpc2libGVSZXNvdXJjZXNdID0gdXNlU3RhdGU8XG5cdFx0U2V0PHN0cmluZyB8IG51bWJlcj5cblx0PihuZXcgU2V0KHJlc291cmNlcy5tYXAoKHIpID0+IHIuaWQpKSlcblxuXHQvLyBVc2UgdGhlIGNhbGVuZGFyIGVuZ2luZVxuXHRjb25zdCBjYWxlbmRhckVuZ2luZSA9IHVzZUNhbGVuZGFyRW5naW5lKHtcblx0XHRldmVudHMsXG5cdFx0Zmlyc3REYXlPZldlZWssXG5cdFx0aW5pdGlhbFZpZXcsXG5cdFx0aW5pdGlhbERhdGUsXG5cdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRvbkV2ZW50QWRkLFxuXHRcdG9uRXZlbnRVcGRhdGUsXG5cdFx0b25FdmVudERlbGV0ZSxcblx0XHRvbkRhdGVDaGFuZ2UsXG5cdFx0b25WaWV3Q2hhbmdlOiBvblZpZXdDaGFuZ2UsXG5cdFx0bG9jYWxlLFxuXHRcdHRpbWV6b25lLFxuXHRcdHRyYW5zbGF0aW9ucyxcblx0XHR0cmFuc2xhdG9yLFxuXHR9KVxuXG5cdC8vIFJlc291cmNlIHZpc2liaWxpdHlcblx0Y29uc3QgdG9nZ2xlUmVzb3VyY2VWaXNpYmlsaXR5ID0gdXNlQ2FsbGJhY2soXG5cdFx0KHJlc291cmNlSWQ6IHN0cmluZyB8IG51bWJlcikgPT4ge1xuXHRcdFx0c2V0VmlzaWJsZVJlc291cmNlcygocHJldikgPT4ge1xuXHRcdFx0XHRjb25zdCBuZXdTZXQgPSBuZXcgU2V0KHByZXYpXG5cdFx0XHRcdGlmIChuZXdTZXQuaGFzKHJlc291cmNlSWQpKSB7XG5cdFx0XHRcdFx0bmV3U2V0LmRlbGV0ZShyZXNvdXJjZUlkKVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdG5ld1NldC5hZGQocmVzb3VyY2VJZClcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gbmV3U2V0XG5cdFx0XHR9KVxuXHRcdH0sXG5cdFx0W11cblx0KVxuXG5cdGNvbnN0IHNob3dSZXNvdXJjZSA9IHVzZUNhbGxiYWNrKChyZXNvdXJjZUlkOiBzdHJpbmcgfCBudW1iZXIpID0+IHtcblx0XHRzZXRWaXNpYmxlUmVzb3VyY2VzKChwcmV2KSA9PiBuZXcgU2V0KHByZXYpLmFkZChyZXNvdXJjZUlkKSlcblx0fSwgW10pXG5cblx0Y29uc3QgaGlkZVJlc291cmNlID0gdXNlQ2FsbGJhY2soKHJlc291cmNlSWQ6IHN0cmluZyB8IG51bWJlcikgPT4ge1xuXHRcdHNldFZpc2libGVSZXNvdXJjZXMoKHByZXYpID0+IHtcblx0XHRcdGNvbnN0IG5ld1NldCA9IG5ldyBTZXQocHJldilcblx0XHRcdG5ld1NldC5kZWxldGUocmVzb3VyY2VJZClcblx0XHRcdHJldHVybiBuZXdTZXRcblx0XHR9KVxuXHR9LCBbXSlcblxuXHRjb25zdCBzaG93QWxsUmVzb3VyY2VzID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuXHRcdHNldFZpc2libGVSZXNvdXJjZXMobmV3IFNldChjdXJyZW50UmVzb3VyY2VzLm1hcCgocikgPT4gci5pZCkpKVxuXHR9LCBbY3VycmVudFJlc291cmNlc10pXG5cblx0Y29uc3QgaGlkZUFsbFJlc291cmNlcyA9IHVzZUNhbGxiYWNrKCgpID0+IHtcblx0XHRzZXRWaXNpYmxlUmVzb3VyY2VzKG5ldyBTZXQoKSlcblx0fSwgW10pXG5cblx0Ly8gRXZlbnQgdXRpbGl0aWVzXG5cdGNvbnN0IGdldEV2ZW50c0ZvclJlc291cmNlID0gdXNlQ2FsbGJhY2soXG5cdFx0KHJlc291cmNlSWQ6IHN0cmluZyB8IG51bWJlcik6IENhbGVuZGFyRXZlbnRbXSA9PiB7XG5cdFx0XHRyZXR1cm4gY2FsZW5kYXJFbmdpbmUuZXZlbnRzLmZpbHRlcigoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHtcblx0XHRcdFx0aWYgKGV2ZW50LnJlc291cmNlSWRzKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGV2ZW50LnJlc291cmNlSWRzLmluY2x1ZGVzKHJlc291cmNlSWQpXG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGV2ZW50LnJlc291cmNlSWQgPT09IHJlc291cmNlSWRcblx0XHRcdH0pXG5cdFx0fSxcblx0XHRbY2FsZW5kYXJFbmdpbmUuZXZlbnRzXVxuXHQpXG5cblx0Y29uc3QgZ2V0RXZlbnRzRm9yUmVzb3VyY2VzID0gdXNlQ2FsbGJhY2soXG5cdFx0KHJlc291cmNlSWRzOiAoc3RyaW5nIHwgbnVtYmVyKVtdKTogQ2FsZW5kYXJFdmVudFtdID0+IHtcblx0XHRcdHJldHVybiBjYWxlbmRhckVuZ2luZS5ldmVudHMuZmlsdGVyKChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4ge1xuXHRcdFx0XHRjb25zdCBldmVudFJlc291cmNlSWRzID0gZ2V0RXZlbnRSZXNvdXJjZUlkcyhldmVudClcblx0XHRcdFx0cmV0dXJuIGV2ZW50UmVzb3VyY2VJZHMuc29tZSgoaWQpID0+IHJlc291cmNlSWRzLmluY2x1ZGVzKGlkKSlcblx0XHRcdH0pXG5cdFx0fSxcblx0XHRbY2FsZW5kYXJFbmdpbmUuZXZlbnRzXVxuXHQpXG5cblx0Y29uc3QgZ2V0UmVzb3VyY2VCeUlkID0gdXNlQ2FsbGJhY2soXG5cdFx0KHJlc291cmNlSWQ6IHN0cmluZyB8IG51bWJlcik6IFJlc291cmNlIHwgdW5kZWZpbmVkID0+IHtcblx0XHRcdHJldHVybiBjdXJyZW50UmVzb3VyY2VzLmZpbmQoKHJlc291cmNlKSA9PiByZXNvdXJjZS5pZCA9PT0gcmVzb3VyY2VJZClcblx0XHR9LFxuXHRcdFtjdXJyZW50UmVzb3VyY2VzXVxuXHQpXG5cblx0Y29uc3QgZ2V0VmlzaWJsZVJlc291cmNlcyA9IHVzZUNhbGxiYWNrKCgpOiBSZXNvdXJjZVtdID0+IHtcblx0XHRyZXR1cm4gY3VycmVudFJlc291cmNlcy5maWx0ZXIoKHJlc291cmNlKSA9PlxuXHRcdFx0dmlzaWJsZVJlc291cmNlcy5oYXMocmVzb3VyY2UuaWQpXG5cdFx0KVxuXHR9LCBbY3VycmVudFJlc291cmNlcywgdmlzaWJsZVJlc291cmNlc10pXG5cblx0Ly8gQ3Jvc3MtcmVzb3VyY2UgZXZlbnQgdXRpbGl0aWVzXG5cdGNvbnN0IGlzRXZlbnRDcm9zc1Jlc291cmNlID0gdXNlQ2FsbGJhY2soKGV2ZW50OiBDYWxlbmRhckV2ZW50KTogYm9vbGVhbiA9PiB7XG5cdFx0cmV0dXJuIEJvb2xlYW4oZXZlbnQucmVzb3VyY2VJZHMgJiYgZXZlbnQucmVzb3VyY2VJZHMubGVuZ3RoID4gMSlcblx0fSwgW10pXG5cblx0Ly8gQ3VzdG9tIGhhbmRsZXJzXG5cdGNvbnN0IGVkaXRFdmVudCA9IHVzZUNhbGxiYWNrKFxuXHRcdChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4ge1xuXHRcdFx0Y2FsZW5kYXJFbmdpbmUuc2V0U2VsZWN0ZWRFdmVudChldmVudClcblx0XHRcdGNhbGVuZGFyRW5naW5lLnNldElzRXZlbnRGb3JtT3Blbih0cnVlKVxuXHRcdH0sXG5cdFx0W2NhbGVuZGFyRW5naW5lXVxuXHQpXG5cblx0Y29uc3QgaGFuZGxlRXZlbnRDbGljayA9IHVzZUNhbGxiYWNrKFxuXHRcdChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4ge1xuXHRcdFx0aWYgKGRpc2FibGVFdmVudENsaWNrKSB7XG5cdFx0XHRcdHJldHVyblxuXHRcdFx0fVxuXHRcdFx0aWYgKG9uRXZlbnRDbGljaykge1xuXHRcdFx0XHRvbkV2ZW50Q2xpY2soZXZlbnQpXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRlZGl0RXZlbnQoZXZlbnQpXG5cdFx0XHR9XG5cdFx0fSxcblx0XHRbZGlzYWJsZUV2ZW50Q2xpY2ssIG9uRXZlbnRDbGljaywgZWRpdEV2ZW50XVxuXHQpXG5cblx0Y29uc3QgaGFuZGxlRGF0ZUNsaWNrID0gdXNlQ2FsbGJhY2soXG5cdFx0KGluZm86IENlbGxDbGlja0luZm8pID0+IHtcblx0XHRcdGlmIChkaXNhYmxlQ2VsbENsaWNrKSB7XG5cdFx0XHRcdHJldHVyblxuXHRcdFx0fVxuXG5cdFx0XHRpZiAob25DZWxsQ2xpY2spIHtcblx0XHRcdFx0b25DZWxsQ2xpY2soaW5mbylcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IG5ld0V2ZW50OiBDYWxlbmRhckV2ZW50ID0ge1xuXHRcdFx0XHRcdHRpdGxlOiBjYWxlbmRhckVuZ2luZS50KCduZXdFdmVudCcpLFxuXHRcdFx0XHRcdHN0YXJ0OiBpbmZvLnN0YXJ0LFxuXHRcdFx0XHRcdGVuZDogaW5mby5lbmQsXG5cdFx0XHRcdFx0ZGVzY3JpcHRpb246ICcnLFxuXHRcdFx0XHRcdGFsbERheTogZmFsc2UsXG5cdFx0XHRcdH0gYXMgQ2FsZW5kYXJFdmVudFxuXG5cdFx0XHRcdGlmIChpbmZvLnJlc291cmNlSWQgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdG5ld0V2ZW50LnJlc291cmNlSWQgPSBpbmZvLnJlc291cmNlSWRcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNhbGVuZGFyRW5naW5lLnNldFNlbGVjdGVkRXZlbnQobmV3RXZlbnQpXG5cdFx0XHRcdGNhbGVuZGFyRW5naW5lLnNldFNlbGVjdGVkRGF0ZShpbmZvLnN0YXJ0KVxuXHRcdFx0XHRjYWxlbmRhckVuZ2luZS5zZXRJc0V2ZW50Rm9ybU9wZW4odHJ1ZSlcblx0XHRcdH1cblx0XHR9LFxuXHRcdFtvbkNlbGxDbGljaywgZGlzYWJsZUNlbGxDbGljaywgY2FsZW5kYXJFbmdpbmVdXG5cdClcblxuXHQvLyBDcmVhdGUgdGhlIGNvbnRleHQgdmFsdWVcblx0Y29uc3QgY29udGV4dFZhbHVlID0gdXNlTWVtbyhcblx0XHQoKSA9PiAoe1xuXHRcdFx0Li4uY2FsZW5kYXJFbmdpbmUsXG5cdFx0XHR2aWV3OiBjYWxlbmRhckVuZ2luZS52aWV3LFxuXHRcdFx0c2V0VmlldzogY2FsZW5kYXJFbmdpbmUuc2V0Vmlldyxcblx0XHRcdGV2ZW50czogY2FsZW5kYXJFbmdpbmUuZXZlbnRzLFxuXHRcdFx0cmF3RXZlbnRzOiBjYWxlbmRhckVuZ2luZS5yYXdFdmVudHMsXG5cblx0XHRcdC8vIFJlc291cmNlLXNwZWNpZmljIHN0YXRlXG5cdFx0XHRyZXNvdXJjZXM6IGN1cnJlbnRSZXNvdXJjZXMsXG5cdFx0XHR2aXNpYmxlUmVzb3VyY2VzLFxuXHRcdFx0dG9nZ2xlUmVzb3VyY2VWaXNpYmlsaXR5LFxuXHRcdFx0c2hvd1Jlc291cmNlLFxuXHRcdFx0aGlkZVJlc291cmNlLFxuXHRcdFx0c2hvd0FsbFJlc291cmNlcyxcblx0XHRcdGhpZGVBbGxSZXNvdXJjZXMsXG5cblx0XHRcdC8vIFJlc291cmNlIHV0aWxpdGllc1xuXHRcdFx0Z2V0RXZlbnRzRm9yUmVzb3VyY2UsXG5cdFx0XHRnZXRFdmVudHNGb3JSZXNvdXJjZXMsXG5cdFx0XHRnZXRSZXNvdXJjZUJ5SWQsXG5cdFx0XHRnZXRWaXNpYmxlUmVzb3VyY2VzLFxuXG5cdFx0XHQvLyBDcm9zcy1yZXNvdXJjZSBldmVudCB1dGlsaXRpZXNcblx0XHRcdGlzRXZlbnRDcm9zc1Jlc291cmNlLFxuXHRcdFx0Z2V0RXZlbnRSZXNvdXJjZUlkcyxcblxuXHRcdFx0Ly8gT3ZlcnJpZGUgaGFuZGxlcnNcblx0XHRcdG9uRXZlbnRDbGljazogaGFuZGxlRXZlbnRDbGljayxcblx0XHRcdG9uQ2VsbENsaWNrOiBoYW5kbGVEYXRlQ2xpY2ssXG5cblx0XHRcdC8vIFBhc3MgdGhyb3VnaCBoZWFkZXIgcHJvcHNcblx0XHRcdGhlYWRlckNvbXBvbmVudCxcblx0XHRcdGhlYWRlckNsYXNzTmFtZSxcblxuXHRcdFx0Ly8gUGFzcyB0aHJvdWdoIG90aGVyIHByb3BzXG5cdFx0XHRyZW5kZXJFdmVudCxcblx0XHRcdHJlbmRlclJlc291cmNlLFxuXHRcdFx0cmVuZGVyRXZlbnRGb3JtLFxuXHRcdFx0bG9jYWxlLFxuXHRcdFx0dGltZXpvbmUsXG5cdFx0XHRkaXNhYmxlQ2VsbENsaWNrLFxuXHRcdFx0ZGlzYWJsZUV2ZW50Q2xpY2ssXG5cdFx0XHRkaXNhYmxlRHJhZ0FuZERyb3AsXG5cdFx0XHRkYXlNYXhFdmVudHMsXG5cdFx0XHRldmVudFNwYWNpbmcsXG5cdFx0XHRzdGlja3lWaWV3SGVhZGVyLFxuXHRcdFx0dmlld0hlYWRlckNsYXNzTmFtZSxcblx0XHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0XHR0aW1lRm9ybWF0LFxuXHRcdFx0Y2xhc3Nlc092ZXJyaWRlLFxuXHRcdFx0b3JpZW50YXRpb24sXG5cdFx0XHRyZW5kZXJDdXJyZW50VGltZUluZGljYXRvcixcblx0XHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzLFxuXHRcdFx0aGlkZGVuRGF5cyxcblx0XHR9KSxcblx0XHRbXG5cdFx0XHRjYWxlbmRhckVuZ2luZSxcblx0XHRcdGN1cnJlbnRSZXNvdXJjZXMsXG5cdFx0XHR2aXNpYmxlUmVzb3VyY2VzLFxuXHRcdFx0dG9nZ2xlUmVzb3VyY2VWaXNpYmlsaXR5LFxuXHRcdFx0c2hvd1Jlc291cmNlLFxuXHRcdFx0aGlkZVJlc291cmNlLFxuXHRcdFx0c2hvd0FsbFJlc291cmNlcyxcblx0XHRcdGhpZGVBbGxSZXNvdXJjZXMsXG5cdFx0XHRnZXRFdmVudHNGb3JSZXNvdXJjZSxcblx0XHRcdGdldEV2ZW50c0ZvclJlc291cmNlcyxcblx0XHRcdGdldFJlc291cmNlQnlJZCxcblx0XHRcdGdldFZpc2libGVSZXNvdXJjZXMsXG5cdFx0XHRpc0V2ZW50Q3Jvc3NSZXNvdXJjZSxcblx0XHRcdGhhbmRsZUV2ZW50Q2xpY2ssXG5cdFx0XHRoYW5kbGVEYXRlQ2xpY2ssXG5cdFx0XHRyZW5kZXJFdmVudCxcblx0XHRcdHJlbmRlclJlc291cmNlLFxuXHRcdFx0cmVuZGVyRXZlbnRGb3JtLFxuXHRcdFx0bG9jYWxlLFxuXHRcdFx0dGltZXpvbmUsXG5cdFx0XHRkaXNhYmxlQ2VsbENsaWNrLFxuXHRcdFx0ZGlzYWJsZUV2ZW50Q2xpY2ssXG5cdFx0XHRkaXNhYmxlRHJhZ0FuZERyb3AsXG5cdFx0XHRkYXlNYXhFdmVudHMsXG5cdFx0XHRldmVudFNwYWNpbmcsXG5cdFx0XHRzdGlja3lWaWV3SGVhZGVyLFxuXHRcdFx0dmlld0hlYWRlckNsYXNzTmFtZSxcblx0XHRcdGhlYWRlckNvbXBvbmVudCxcblx0XHRcdGhlYWRlckNsYXNzTmFtZSxcblx0XHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0XHR0aW1lRm9ybWF0LFxuXHRcdFx0Y2xhc3Nlc092ZXJyaWRlLFxuXHRcdFx0b3JpZW50YXRpb24sXG5cdFx0XHRyZW5kZXJDdXJyZW50VGltZUluZGljYXRvcixcblx0XHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzLFxuXHRcdFx0aGlkZGVuRGF5cyxcblx0XHRdXG5cdClcblxuXHRyZXR1cm4gKFxuXHRcdDxSZXNvdXJjZUNhbGVuZGFyQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17Y29udGV4dFZhbHVlfT5cblx0XHRcdHtjaGlsZHJlbn1cblx0XHQ8L1Jlc291cmNlQ2FsZW5kYXJDb250ZXh0LlByb3ZpZGVyPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgQnVzaW5lc3NIb3VycywgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB0eXBlIHsgUmVjdXJyZW5jZUVkaXRPcHRpb25zIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL3R5cGVzJ1xuaW1wb3J0IHtcblx0ZGVsZXRlUmVjdXJyaW5nRXZlbnQgYXMgZGVsZXRlUmVjdXJyaW5nRXZlbnRJbXBsLFxuXHRnZW5lcmF0ZVJlY3VycmluZ0V2ZW50cyxcblx0dXBkYXRlUmVjdXJyaW5nRXZlbnQgYXMgdXBkYXRlUmVjdXJyaW5nRXZlbnRJbXBsLFxufSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvdXRpbHMvcmVjdXJyZW5jZS1oYW5kbGVyJ1xuaW1wb3J0IGRheWpzLCB7XG5cdHR5cGUgRGF5anMsXG5cdHR5cGUgTWFuaXB1bGF0ZVR5cGUsXG59IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgZGVmYXVsdFRyYW5zbGF0aW9ucyB9IGZyb20gJ0AvbGliL3RyYW5zbGF0aW9ucy9kZWZhdWx0J1xuaW1wb3J0IHR5cGUgeyBUcmFuc2xhdGlvbnMsIFRyYW5zbGF0b3JGdW5jdGlvbiB9IGZyb20gJ0AvbGliL3RyYW5zbGF0aW9ucy90eXBlcydcbmltcG9ydCB7IGdldE1vbnRoV2Vla3MsIGdldFdlZWtEYXlzIH0gZnJvbSAnQC9saWIvdXRpbHMvZGF0ZS11dGlscydcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJWaWV3IH0gZnJvbSAnQC90eXBlcydcbmltcG9ydCB7IERBWV9NQVhfRVZFTlRTX0RFRkFVTFQgfSBmcm9tICcuLi9saWIvY29uc3RhbnRzJ1xuXG5leHBvcnQgaW50ZXJmYWNlIENhbGVuZGFyRW5naW5lQ29uZmlnIHtcblx0ZXZlbnRzOiBDYWxlbmRhckV2ZW50W11cblx0Zmlyc3REYXlPZldlZWs6IG51bWJlclxuXHRpbml0aWFsVmlldz86IENhbGVuZGFyVmlld1xuXHRpbml0aWFsRGF0ZT86IERheWpzXG5cdGJ1c2luZXNzSG91cnM/OiBCdXNpbmVzc0hvdXJzIHwgQnVzaW5lc3NIb3Vyc1tdXG5cdG9uRXZlbnRBZGQ/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0b25FdmVudFVwZGF0ZT86IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuXHRvbkV2ZW50RGVsZXRlPzogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG5cdG9uRGF0ZUNoYW5nZT86IChkYXRlOiBEYXlqcywgcmFuZ2U6IHsgc3RhcnQ6IERheWpzOyBlbmQ6IERheWpzIH0pID0+IHZvaWRcblx0b25WaWV3Q2hhbmdlPzogKHZpZXc6IENhbGVuZGFyVmlldykgPT4gdm9pZFxuXHRsb2NhbGU/OiBzdHJpbmdcblx0dGltZXpvbmU/OiBzdHJpbmdcblx0dHJhbnNsYXRpb25zPzogVHJhbnNsYXRpb25zXG5cdHRyYW5zbGF0b3I/OiBUcmFuc2xhdG9yRnVuY3Rpb25cbn1cblxuZXhwb3J0IGludGVyZmFjZSBDYWxlbmRhckVuZ2luZVJldHVybiB7XG5cdGN1cnJlbnREYXRlOiBEYXlqc1xuXHR2aWV3OiBDYWxlbmRhclZpZXdcblx0ZXZlbnRzOiBDYWxlbmRhckV2ZW50W11cblx0cmF3RXZlbnRzOiBDYWxlbmRhckV2ZW50W11cblx0aXNFdmVudEZvcm1PcGVuOiBib29sZWFuXG5cdHNlbGVjdGVkRXZlbnQ6IENhbGVuZGFyRXZlbnQgfCBudWxsXG5cdHNlbGVjdGVkRGF0ZTogRGF5anMgfCBudWxsXG5cdGZpcnN0RGF5T2ZXZWVrOiBudW1iZXJcblx0ZGF5TWF4RXZlbnRzOiBudW1iZXJcblx0Y3VycmVudExvY2FsZTogc3RyaW5nXG5cdGJ1c2luZXNzSG91cnM/OiBCdXNpbmVzc0hvdXJzIHwgQnVzaW5lc3NIb3Vyc1tdXG5cdHNldEN1cnJlbnREYXRlOiAoZGF0ZTogRGF5anMpID0+IHZvaWRcblx0c2VsZWN0RGF0ZTogKGRhdGU6IERheWpzKSA9PiB2b2lkXG5cdHNldFZpZXc6ICh2aWV3OiBDYWxlbmRhclZpZXcpID0+IHZvaWRcblx0bmV4dFBlcmlvZDogKCkgPT4gdm9pZFxuXHRwcmV2UGVyaW9kOiAoKSA9PiB2b2lkXG5cdHRvZGF5OiAoKSA9PiB2b2lkXG5cdGFkZEV2ZW50OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0dXBkYXRlRXZlbnQ6IChldmVudElkOiBzdHJpbmcgfCBudW1iZXIsIGV2ZW50OiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+KSA9PiB2b2lkXG5cdHVwZGF0ZVJlY3VycmluZ0V2ZW50OiAoXG5cdFx0ZXZlbnQ6IENhbGVuZGFyRXZlbnQsXG5cdFx0dXBkYXRlczogUGFydGlhbDxDYWxlbmRhckV2ZW50Pixcblx0XHRvcHRpb25zOiBSZWN1cnJlbmNlRWRpdE9wdGlvbnNcblx0KSA9PiB2b2lkXG5cdGRlbGV0ZUV2ZW50OiAoZXZlbnRJZDogc3RyaW5nIHwgbnVtYmVyKSA9PiB2b2lkXG5cdGRlbGV0ZVJlY3VycmluZ0V2ZW50OiAoXG5cdFx0ZXZlbnQ6IENhbGVuZGFyRXZlbnQsXG5cdFx0b3B0aW9uczogUmVjdXJyZW5jZUVkaXRPcHRpb25zXG5cdCkgPT4gdm9pZFxuXHRvcGVuRXZlbnRGb3JtOiAoZXZlbnREYXRhPzogUGFydGlhbDxDYWxlbmRhckV2ZW50PikgPT4gdm9pZFxuXHRjbG9zZUV2ZW50Rm9ybTogKCkgPT4gdm9pZFxuXHRzZXRTZWxlY3RlZEV2ZW50OiBSZWFjdC5EaXNwYXRjaDxSZWFjdC5TZXRTdGF0ZUFjdGlvbjxDYWxlbmRhckV2ZW50IHwgbnVsbD4+XG5cdHNldElzRXZlbnRGb3JtT3BlbjogUmVhY3QuRGlzcGF0Y2g8UmVhY3QuU2V0U3RhdGVBY3Rpb248Ym9vbGVhbj4+XG5cdHNldFNlbGVjdGVkRGF0ZTogUmVhY3QuRGlzcGF0Y2g8UmVhY3QuU2V0U3RhdGVBY3Rpb248RGF5anMgfCBudWxsPj5cblx0Z2V0RXZlbnRzRm9yRGF0ZVJhbmdlOiAoc3RhcnREYXRlOiBEYXlqcywgZW5kRGF0ZTogRGF5anMpID0+IENhbGVuZGFyRXZlbnRbXVxuXHRmaW5kUGFyZW50UmVjdXJyaW5nRXZlbnQ6IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gQ2FsZW5kYXJFdmVudCB8IG51bGxcblx0dDogVHJhbnNsYXRvckZ1bmN0aW9uXG59XG5cbmNvbnN0IFZJRVdfVU5JVFM6IFJlY29yZDxDYWxlbmRhclZpZXcsIE1hbmlwdWxhdGVUeXBlPiA9IHtcblx0ZGF5OiAnZGF5Jyxcblx0d2VlazogJ3dlZWsnLFxuXHRtb250aDogJ21vbnRoJyxcblx0eWVhcjogJ3llYXInLFxufVxuXG5leHBvcnQgY29uc3QgY2FsY3VsYXRlVmlld1JhbmdlID0gKFxuXHRkYXRlOiBEYXlqcyxcblx0dmlldzogQ2FsZW5kYXJWaWV3LFxuXHRmaXJzdERheU9mV2VlazogbnVtYmVyXG4pOiB7IHN0YXJ0OiBEYXlqczsgZW5kOiBEYXlqcyB9ID0+IHtcblx0aWYgKHZpZXcgPT09ICdkYXknKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHN0YXJ0OiBkYXRlLnN0YXJ0T2YoJ2RheScpLFxuXHRcdFx0ZW5kOiBkYXRlLmVuZE9mKCdkYXknKSxcblx0XHR9XG5cdH1cblx0aWYgKHZpZXcgPT09ICd5ZWFyJykge1xuXHRcdHJldHVybiB7XG5cdFx0XHRzdGFydDogZGF0ZS5zdGFydE9mKCd5ZWFyJyksXG5cdFx0XHRlbmQ6IGRhdGUuZW5kT2YoJ3llYXInKSxcblx0XHR9XG5cdH1cblx0aWYgKHZpZXcgPT09ICd3ZWVrJykge1xuXHRcdGNvbnN0IHdlZWtEYXlzID0gZ2V0V2Vla0RheXMoZGF0ZSwgZmlyc3REYXlPZldlZWspXG5cdFx0cmV0dXJuIHtcblx0XHRcdHN0YXJ0OiB3ZWVrRGF5c1swXS5zdGFydE9mKCdkYXknKSxcblx0XHRcdGVuZDogd2Vla0RheXNbNl0uZW5kT2YoJ2RheScpLFxuXHRcdH1cblx0fVxuXHQvLyBtb250aCB2aWV3XG5cdGNvbnN0IHdlZWtzID0gZ2V0TW9udGhXZWVrcyhkYXRlLCBmaXJzdERheU9mV2Vlaylcblx0cmV0dXJuIHsgc3RhcnQ6IHdlZWtzWzBdWzBdLnN0YXJ0T2YoJ2RheScpLCBlbmQ6IHdlZWtzWzVdWzZdLmVuZE9mKCdkYXknKSB9XG59XG5cbmV4cG9ydCBjb25zdCB1c2VDYWxlbmRhckVuZ2luZSA9IChcblx0Y29uZmlnOiBDYWxlbmRhckVuZ2luZUNvbmZpZ1xuKTogQ2FsZW5kYXJFbmdpbmVSZXR1cm4gPT4ge1xuXHRjb25zdCB7XG5cdFx0ZXZlbnRzID0gW10sXG5cdFx0Zmlyc3REYXlPZldlZWsgPSAwLFxuXHRcdGluaXRpYWxWaWV3ID0gJ21vbnRoJyxcblx0XHRpbml0aWFsRGF0ZSA9IGRheWpzKCksXG5cdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRvbkV2ZW50QWRkLFxuXHRcdG9uRXZlbnRVcGRhdGUsXG5cdFx0b25FdmVudERlbGV0ZSxcblx0XHRvbkRhdGVDaGFuZ2UsXG5cdFx0b25WaWV3Q2hhbmdlLFxuXHRcdGxvY2FsZSxcblx0XHR0aW1lem9uZSxcblx0XHR0cmFuc2xhdGlvbnMsXG5cdFx0dHJhbnNsYXRvcixcblx0fSA9IGNvbmZpZ1xuXG5cdGNvbnN0IFtjdXJyZW50RGF0ZSwgc2V0Q3VycmVudERhdGVdID0gdXNlU3RhdGU8RGF5anM+KFxuXHRcdGRheWpzLmlzRGF5anMoaW5pdGlhbERhdGUpID8gaW5pdGlhbERhdGUgOiBkYXlqcyhpbml0aWFsRGF0ZSlcblx0KVxuXHRjb25zdCBbdmlldywgc2V0Vmlld10gPSB1c2VTdGF0ZTxDYWxlbmRhclZpZXc+KGluaXRpYWxWaWV3KVxuXHRjb25zdCBbY3VycmVudEV2ZW50cywgc2V0Q3VycmVudEV2ZW50c10gPSB1c2VTdGF0ZTxDYWxlbmRhckV2ZW50W10+KGV2ZW50cylcblx0Y29uc3QgW2lzRXZlbnRGb3JtT3Blbiwgc2V0SXNFdmVudEZvcm1PcGVuXSA9IHVzZVN0YXRlKGZhbHNlKVxuXHRjb25zdCBbc2VsZWN0ZWRFdmVudCwgc2V0U2VsZWN0ZWRFdmVudF0gPSB1c2VTdGF0ZTxDYWxlbmRhckV2ZW50IHwgbnVsbD4obnVsbClcblx0Y29uc3QgW3NlbGVjdGVkRGF0ZSwgc2V0U2VsZWN0ZWREYXRlXSA9IHVzZVN0YXRlPERheWpzIHwgbnVsbD4obnVsbClcblx0Y29uc3QgW2N1cnJlbnRMb2NhbGUsIHNldEN1cnJlbnRMb2NhbGVdID0gdXNlU3RhdGUobG9jYWxlIHx8ICdlbicpXG5cdGNvbnN0IGxhc3RFdmVudHNQcm9wID0gdXNlUmVmKGV2ZW50cylcblx0Y29uc3QgbGFzdFRpbWV6b25lUHJvcCA9IHVzZVJlZih0aW1lem9uZSlcblx0Y29uc3QgbGFzdExvY2FsZVByb3AgPSB1c2VSZWYobG9jYWxlKVxuXG5cdGNvbnN0IHQ6IFRyYW5zbGF0b3JGdW5jdGlvbiA9IHVzZU1lbW8oKCkgPT4ge1xuXHRcdGlmICh0cmFuc2xhdG9yKSB7XG5cdFx0XHRyZXR1cm4gdHJhbnNsYXRvclxuXHRcdH1cblx0XHRpZiAodHJhbnNsYXRpb25zKSB7XG5cdFx0XHRyZXR1cm4gKGtleTogc3RyaW5nKSA9PiB0cmFuc2xhdGlvbnNba2V5IGFzIGtleW9mIFRyYW5zbGF0aW9uc10gfHwga2V5XG5cdFx0fVxuXHRcdHJldHVybiAoa2V5OiBzdHJpbmcpID0+XG5cdFx0XHRkZWZhdWx0VHJhbnNsYXRpb25zW2tleSBhcyBrZXlvZiBUcmFuc2xhdGlvbnNdIHx8IGtleVxuXHR9LCBbdHJhbnNsYXRpb25zLCB0cmFuc2xhdG9yXSlcblxuXHRjb25zdCBnZXRFdmVudHNGb3JEYXRlUmFuZ2UgPSB1c2VDYWxsYmFjayhcblx0XHQoc3RhcnREYXRlOiBEYXlqcywgZW5kRGF0ZTogRGF5anMpOiBDYWxlbmRhckV2ZW50W10gPT4ge1xuXHRcdFx0Y29uc3QgYWxsRXZlbnRzOiBDYWxlbmRhckV2ZW50W10gPSBbXVxuXG5cdFx0XHRmb3IgKGNvbnN0IGV2ZW50IG9mIGN1cnJlbnRFdmVudHMpIHtcblx0XHRcdFx0aWYgKGV2ZW50LnJydWxlKSB7XG5cdFx0XHRcdFx0YWxsRXZlbnRzLnB1c2goXG5cdFx0XHRcdFx0XHQuLi5nZW5lcmF0ZVJlY3VycmluZ0V2ZW50cyh7XG5cdFx0XHRcdFx0XHRcdGV2ZW50LFxuXHRcdFx0XHRcdFx0XHRjdXJyZW50RXZlbnRzLFxuXHRcdFx0XHRcdFx0XHRzdGFydERhdGUsXG5cdFx0XHRcdFx0XHRcdGVuZERhdGUsXG5cdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdClcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRjb25zdCBzdGFydHNJblJhbmdlID1cblx0XHRcdFx0XHRcdGV2ZW50LnN0YXJ0LmlzU2FtZU9yQWZ0ZXIoc3RhcnREYXRlKSAmJlxuXHRcdFx0XHRcdFx0ZXZlbnQuc3RhcnQuaXNTYW1lT3JCZWZvcmUoZW5kRGF0ZSlcblx0XHRcdFx0XHRjb25zdCBlbmRzSW5SYW5nZSA9XG5cdFx0XHRcdFx0XHRldmVudC5lbmQuaXNTYW1lT3JBZnRlcihzdGFydERhdGUpICYmXG5cdFx0XHRcdFx0XHRldmVudC5lbmQuaXNTYW1lT3JCZWZvcmUoZW5kRGF0ZSlcblx0XHRcdFx0XHRjb25zdCBzcGFuc1JhbmdlID1cblx0XHRcdFx0XHRcdGV2ZW50LnN0YXJ0LmlzQmVmb3JlKHN0YXJ0RGF0ZSkgJiYgZXZlbnQuZW5kLmlzQWZ0ZXIoZW5kRGF0ZSlcblx0XHRcdFx0XHRpZiAoc3RhcnRzSW5SYW5nZSB8fCBlbmRzSW5SYW5nZSB8fCBzcGFuc1JhbmdlKSB7XG5cdFx0XHRcdFx0XHRhbGxFdmVudHMucHVzaChldmVudClcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBhbGxFdmVudHNcblx0XHR9LFxuXHRcdFtjdXJyZW50RXZlbnRzXVxuXHQpXG5cblx0Y29uc3QgZ2V0Q3VycmVudFZpZXdSYW5nZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcblx0XHRyZXR1cm4gY2FsY3VsYXRlVmlld1JhbmdlKGN1cnJlbnREYXRlLCB2aWV3LCBmaXJzdERheU9mV2Vlaylcblx0fSwgW2N1cnJlbnREYXRlLCB2aWV3LCBmaXJzdERheU9mV2Vla10pXG5cblx0Y29uc3QgcHJvY2Vzc2VkRXZlbnRzID0gdXNlTWVtbygoKSA9PiB7XG5cdFx0Y29uc3QgeyBzdGFydCwgZW5kIH0gPSBnZXRDdXJyZW50Vmlld1JhbmdlKClcblx0XHRyZXR1cm4gZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlKHN0YXJ0LCBlbmQpXG5cdH0sIFtnZXRFdmVudHNGb3JEYXRlUmFuZ2UsIGdldEN1cnJlbnRWaWV3UmFuZ2VdKVxuXG5cdHVzZUVmZmVjdCgoKSA9PiB7XG5cdFx0aWYgKGV2ZW50cyAhPT0gbGFzdEV2ZW50c1Byb3AuY3VycmVudCkge1xuXHRcdFx0c2V0Q3VycmVudEV2ZW50cyhldmVudHMpXG5cdFx0XHRsYXN0RXZlbnRzUHJvcC5jdXJyZW50ID0gZXZlbnRzXG5cdFx0fVxuXHR9LCBbZXZlbnRzXSlcblxuXHR1c2VFZmZlY3QoKCkgPT4ge1xuXHRcdGlmIChsb2NhbGUgJiYgbG9jYWxlICE9PSBsYXN0TG9jYWxlUHJvcC5jdXJyZW50KSB7XG5cdFx0XHRzZXRDdXJyZW50TG9jYWxlKGxvY2FsZSlcblx0XHRcdGRheWpzLmxvY2FsZShsb2NhbGUpXG5cdFx0XHRzZXRDdXJyZW50RGF0ZSgocHJldkRhdGUpID0+IHByZXZEYXRlLmxvY2FsZShsb2NhbGUpKVxuXHRcdFx0bGFzdExvY2FsZVByb3AuY3VycmVudCA9IGxvY2FsZVxuXHRcdH1cblx0fSwgW2xvY2FsZV0pXG5cblx0dXNlRWZmZWN0KCgpID0+IHtcblx0XHRpZiAodGltZXpvbmUgJiYgdGltZXpvbmUgIT09IGxhc3RUaW1lem9uZVByb3AuY3VycmVudCkge1xuXHRcdFx0ZGF5anMudHouc2V0RGVmYXVsdCh0aW1lem9uZSlcblx0XHRcdHNldEN1cnJlbnREYXRlKChwcmV2KSA9PiBwcmV2LnR6KHRpbWV6b25lKSlcblx0XHRcdHNldEN1cnJlbnRFdmVudHMoKHByZXYpID0+XG5cdFx0XHRcdHByZXYubWFwKChlKSA9PiAoe1xuXHRcdFx0XHRcdC4uLmUsXG5cdFx0XHRcdFx0c3RhcnQ6IGUuc3RhcnQudHoodGltZXpvbmUpLFxuXHRcdFx0XHRcdGVuZDogZS5lbmQudHoodGltZXpvbmUpLFxuXHRcdFx0XHR9KSlcblx0XHRcdClcblx0XHRcdGxhc3RUaW1lem9uZVByb3AuY3VycmVudCA9IHRpbWV6b25lXG5cdFx0fVxuXHR9LCBbdGltZXpvbmVdKVxuXG5cdGNvbnN0IHNlbGVjdERhdGUgPSB1c2VDYWxsYmFjayhcblx0XHQoZGF0ZTogRGF5anMpID0+IHtcblx0XHRcdHNldEN1cnJlbnREYXRlKGRhdGUpXG5cdFx0XHRjb25zdCByYW5nZSA9IGNhbGN1bGF0ZVZpZXdSYW5nZShkYXRlLCB2aWV3LCBmaXJzdERheU9mV2Vlaylcblx0XHRcdG9uRGF0ZUNoYW5nZT8uKGRhdGUsIHJhbmdlKVxuXHRcdH0sXG5cdFx0W29uRGF0ZUNoYW5nZSwgdmlldywgZmlyc3REYXlPZldlZWtdXG5cdClcblxuXHRjb25zdCBuYXZpZ2F0ZVBlcmlvZCA9IHVzZUNhbGxiYWNrKFxuXHRcdChkaXJlY3Rpb246IDEgfCAtMSkgPT4ge1xuXHRcdFx0c2V0Q3VycmVudERhdGUoKHByZXYpID0+IHtcblx0XHRcdFx0Y29uc3QgbmV3RGF0ZSA9XG5cdFx0XHRcdFx0ZGlyZWN0aW9uID09PSAxXG5cdFx0XHRcdFx0XHQ/IHByZXYuYWRkKDEsIFZJRVdfVU5JVFNbdmlld10pXG5cdFx0XHRcdFx0XHQ6IHByZXYuc3VidHJhY3QoMSwgVklFV19VTklUU1t2aWV3XSlcblx0XHRcdFx0Y29uc3QgcmFuZ2UgPSBjYWxjdWxhdGVWaWV3UmFuZ2UobmV3RGF0ZSwgdmlldywgZmlyc3REYXlPZldlZWspXG5cdFx0XHRcdG9uRGF0ZUNoYW5nZT8uKG5ld0RhdGUsIHJhbmdlKVxuXHRcdFx0XHRyZXR1cm4gbmV3RGF0ZVxuXHRcdFx0fSlcblx0XHR9LFxuXHRcdFt2aWV3LCBvbkRhdGVDaGFuZ2UsIGZpcnN0RGF5T2ZXZWVrXVxuXHQpXG5cblx0Y29uc3QgbmV4dFBlcmlvZCA9IHVzZUNhbGxiYWNrKCgpID0+IG5hdmlnYXRlUGVyaW9kKDEpLCBbbmF2aWdhdGVQZXJpb2RdKVxuXHRjb25zdCBwcmV2UGVyaW9kID0gdXNlQ2FsbGJhY2soKCkgPT4gbmF2aWdhdGVQZXJpb2QoLTEpLCBbbmF2aWdhdGVQZXJpb2RdKVxuXG5cdGNvbnN0IHRvZGF5ID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuXHRcdGNvbnN0IG5ld0RhdGUgPSBkYXlqcygpXG5cdFx0c2V0Q3VycmVudERhdGUobmV3RGF0ZSlcblx0XHRjb25zdCByYW5nZSA9IGNhbGN1bGF0ZVZpZXdSYW5nZShuZXdEYXRlLCB2aWV3LCBmaXJzdERheU9mV2Vlaylcblx0XHRvbkRhdGVDaGFuZ2U/LihuZXdEYXRlLCByYW5nZSlcblx0fSwgW29uRGF0ZUNoYW5nZSwgdmlldywgZmlyc3REYXlPZldlZWtdKVxuXG5cdGNvbnN0IGFkZEV2ZW50ID0gdXNlQ2FsbGJhY2soXG5cdFx0KGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB7XG5cdFx0XHRzZXRDdXJyZW50RXZlbnRzKChwcmV2KSA9PiBbLi4ucHJldiwgZXZlbnRdKVxuXHRcdFx0b25FdmVudEFkZD8uKGV2ZW50KVxuXHRcdH0sXG5cdFx0W29uRXZlbnRBZGRdXG5cdClcblxuXHRjb25zdCB1cGRhdGVFdmVudCA9IHVzZUNhbGxiYWNrKFxuXHRcdChldmVudElkOiBzdHJpbmcgfCBudW1iZXIsIHVwZGF0ZXM6IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD4pID0+IHtcblx0XHRcdHNldEN1cnJlbnRFdmVudHMoKHByZXYpID0+XG5cdFx0XHRcdHByZXYubWFwKChldmVudCkgPT4ge1xuXHRcdFx0XHRcdGlmIChldmVudC5pZCAhPT0gZXZlbnRJZCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGV2ZW50XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNvbnN0IG5ld0V2ZW50ID0geyAuLi5ldmVudCwgLi4udXBkYXRlcyB9XG5cdFx0XHRcdFx0b25FdmVudFVwZGF0ZT8uKG5ld0V2ZW50KVxuXHRcdFx0XHRcdHJldHVybiBuZXdFdmVudFxuXHRcdFx0XHR9KVxuXHRcdFx0KVxuXHRcdH0sXG5cdFx0W29uRXZlbnRVcGRhdGVdXG5cdClcblxuXHRjb25zdCB1cGRhdGVSZWN1cnJpbmdFdmVudCA9IHVzZUNhbGxiYWNrKFxuXHRcdChcblx0XHRcdGV2ZW50OiBDYWxlbmRhckV2ZW50LFxuXHRcdFx0dXBkYXRlczogUGFydGlhbDxDYWxlbmRhckV2ZW50Pixcblx0XHRcdG9wdGlvbnM6IFJlY3VycmVuY2VFZGl0T3B0aW9uc1xuXHRcdCkgPT4ge1xuXHRcdFx0b25FdmVudFVwZGF0ZT8uKHsgLi4uZXZlbnQsIC4uLnVwZGF0ZXMgfSlcblx0XHRcdHNldEN1cnJlbnRFdmVudHMoXG5cdFx0XHRcdHVwZGF0ZVJlY3VycmluZ0V2ZW50SW1wbCh7XG5cdFx0XHRcdFx0dGFyZ2V0RXZlbnQ6IGV2ZW50LFxuXHRcdFx0XHRcdHVwZGF0ZXMsXG5cdFx0XHRcdFx0Y3VycmVudEV2ZW50cyxcblx0XHRcdFx0XHRzY29wZTogb3B0aW9ucy5zY29wZSxcblx0XHRcdFx0fSlcblx0XHRcdClcblx0XHR9LFxuXHRcdFtjdXJyZW50RXZlbnRzLCBvbkV2ZW50VXBkYXRlXVxuXHQpXG5cblx0Y29uc3QgZGVsZXRlUmVjdXJyaW5nRXZlbnQgPSB1c2VDYWxsYmFjayhcblx0XHQoZXZlbnQ6IENhbGVuZGFyRXZlbnQsIG9wdGlvbnM6IFJlY3VycmVuY2VFZGl0T3B0aW9ucykgPT4ge1xuXHRcdFx0b25FdmVudERlbGV0ZT8uKGV2ZW50KVxuXHRcdFx0c2V0Q3VycmVudEV2ZW50cyhcblx0XHRcdFx0ZGVsZXRlUmVjdXJyaW5nRXZlbnRJbXBsKHtcblx0XHRcdFx0XHR0YXJnZXRFdmVudDogZXZlbnQsXG5cdFx0XHRcdFx0Y3VycmVudEV2ZW50cyxcblx0XHRcdFx0XHRzY29wZTogb3B0aW9ucy5zY29wZSxcblx0XHRcdFx0fSlcblx0XHRcdClcblx0XHR9LFxuXHRcdFtjdXJyZW50RXZlbnRzLCBvbkV2ZW50RGVsZXRlXVxuXHQpXG5cblx0Y29uc3QgZGVsZXRlRXZlbnQgPSB1c2VDYWxsYmFjayhcblx0XHQoZXZlbnRJZDogc3RyaW5nIHwgbnVtYmVyKSA9PiB7XG5cdFx0XHRzZXRDdXJyZW50RXZlbnRzKChwcmV2KSA9PiB7XG5cdFx0XHRcdGNvbnN0IGV2ZW50VG9EZWxldGUgPSBwcmV2LmZpbmQoKGUpID0+IGUuaWQgPT09IGV2ZW50SWQpXG5cdFx0XHRcdGlmIChldmVudFRvRGVsZXRlKSB7XG5cdFx0XHRcdFx0b25FdmVudERlbGV0ZT8uKGV2ZW50VG9EZWxldGUpXG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHByZXYuZmlsdGVyKChlKSA9PiBlLmlkICE9PSBldmVudElkKVxuXHRcdFx0fSlcblx0XHR9LFxuXHRcdFtvbkV2ZW50RGVsZXRlXVxuXHQpXG5cblx0Y29uc3Qgb3BlbkV2ZW50Rm9ybSA9IHVzZUNhbGxiYWNrKFxuXHRcdChldmVudERhdGE/OiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+KSA9PiB7XG5cdFx0XHRpZiAoZXZlbnREYXRhPy5zdGFydCkge1xuXHRcdFx0XHRzZXRTZWxlY3RlZERhdGUoZXZlbnREYXRhLnN0YXJ0KVxuXHRcdFx0fVxuXHRcdFx0Y29uc3Qgc3RhcnQgPSBldmVudERhdGE/LnN0YXJ0ID8/IGN1cnJlbnREYXRlXG5cdFx0XHRzZXRTZWxlY3RlZEV2ZW50KHtcblx0XHRcdFx0dGl0bGU6IHQoJ25ld0V2ZW50JyksXG5cdFx0XHRcdHN0YXJ0LFxuXHRcdFx0XHRlbmQ6IGV2ZW50RGF0YT8uZW5kID8/IHN0YXJ0LmFkZCgxLCAnaG91cicpLFxuXHRcdFx0XHRyZXNvdXJjZUlkOiBldmVudERhdGE/LnJlc291cmNlSWQsXG5cdFx0XHRcdGRlc2NyaXB0aW9uOiAnJyxcblx0XHRcdFx0YWxsRGF5OiBldmVudERhdGE/LmFsbERheSA/PyBmYWxzZSxcblx0XHRcdH0gYXMgQ2FsZW5kYXJFdmVudClcblx0XHRcdHNldElzRXZlbnRGb3JtT3Blbih0cnVlKVxuXHRcdH0sXG5cdFx0W2N1cnJlbnREYXRlLCB0XVxuXHQpXG5cblx0Y29uc3QgY2xvc2VFdmVudEZvcm0gPSB1c2VDYWxsYmFjaygoKSA9PiB7XG5cdFx0c2V0U2VsZWN0ZWREYXRlKG51bGwpXG5cdFx0c2V0U2VsZWN0ZWRFdmVudChudWxsKVxuXHRcdHNldElzRXZlbnRGb3JtT3BlbihmYWxzZSlcblx0fSwgW10pXG5cblx0Y29uc3QgaGFuZGxlVmlld0NoYW5nZSA9IHVzZUNhbGxiYWNrKFxuXHRcdChuZXdWaWV3OiBDYWxlbmRhclZpZXcpID0+IHtcblx0XHRcdHNldFZpZXcobmV3Vmlldylcblx0XHRcdG9uVmlld0NoYW5nZT8uKG5ld1ZpZXcpXG5cdFx0fSxcblx0XHRbb25WaWV3Q2hhbmdlXVxuXHQpXG5cblx0Y29uc3QgZmluZFBhcmVudFJlY3VycmluZ0V2ZW50ID0gdXNlQ2FsbGJhY2soXG5cdFx0KGV2ZW50OiBDYWxlbmRhckV2ZW50KTogQ2FsZW5kYXJFdmVudCB8IG51bGwgPT4ge1xuXHRcdFx0Y29uc3QgdGFyZ2V0VUlEID0gZXZlbnQudWlkXG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRjdXJyZW50RXZlbnRzLmZpbmQoXG5cdFx0XHRcdFx0KGUpID0+IChlLnVpZCB8fCBgJHtlLmlkfUBpbGFteS5jYWxlbmRhcmApID09PSB0YXJnZXRVSUQgJiYgZS5ycnVsZVxuXHRcdFx0XHQpIHx8IG51bGxcblx0XHRcdClcblx0XHR9LFxuXHRcdFtjdXJyZW50RXZlbnRzXVxuXHQpXG5cblx0cmV0dXJuIHtcblx0XHRjdXJyZW50RGF0ZSxcblx0XHR2aWV3LFxuXHRcdGV2ZW50czogcHJvY2Vzc2VkRXZlbnRzLFxuXHRcdHJhd0V2ZW50czogY3VycmVudEV2ZW50cyxcblx0XHRpc0V2ZW50Rm9ybU9wZW4sXG5cdFx0c2VsZWN0ZWRFdmVudCxcblx0XHRzZWxlY3RlZERhdGUsXG5cdFx0Zmlyc3REYXlPZldlZWssXG5cdFx0ZGF5TWF4RXZlbnRzOiBEQVlfTUFYX0VWRU5UU19ERUZBVUxULFxuXHRcdGN1cnJlbnRMb2NhbGUsXG5cdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRzZXRDdXJyZW50RGF0ZSxcblx0XHRzZWxlY3REYXRlLFxuXHRcdHNldFZpZXc6IGhhbmRsZVZpZXdDaGFuZ2UsXG5cdFx0bmV4dFBlcmlvZCxcblx0XHRwcmV2UGVyaW9kLFxuXHRcdHRvZGF5LFxuXHRcdGFkZEV2ZW50LFxuXHRcdHVwZGF0ZUV2ZW50LFxuXHRcdHVwZGF0ZVJlY3VycmluZ0V2ZW50LFxuXHRcdGRlbGV0ZUV2ZW50LFxuXHRcdGRlbGV0ZVJlY3VycmluZ0V2ZW50LFxuXHRcdG9wZW5FdmVudEZvcm0sXG5cdFx0Y2xvc2VFdmVudEZvcm0sXG5cdFx0c2V0U2VsZWN0ZWRFdmVudCxcblx0XHRzZXRJc0V2ZW50Rm9ybU9wZW4sXG5cdFx0c2V0U2VsZWN0ZWREYXRlLFxuXHRcdGdldEV2ZW50c0ZvckRhdGVSYW5nZSxcblx0XHRmaW5kUGFyZW50UmVjdXJyaW5nRXZlbnQsXG5cdFx0dCxcblx0fVxufVxuIiwKICAgICJpbXBvcnQgeyBSUnVsZSB9IGZyb20gJ3JydWxlJ1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzJ1xuaW1wb3J0IHR5cGUgeyBSUnVsZU9wdGlvbnMgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvdHlwZXMnXG5pbXBvcnQgZGF5anMsIHsgdHlwZSBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgb21pdEtleXMsIHNhZmVEYXRlIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbi8qKlxuICogQ29udmVydHMgYSBEYXlqcyBvYmplY3QgdG8gYSBcIkZsb2F0aW5nIFRpbWVcIiBEYXRlIHJlcHJlc2VudGF0aW9uLlxuICogSW4gRmxvYXRpbmcgVGltZSwgd2UgdXNlIGEgVVRDIERhdGUgb2JqZWN0IGJ1dCBzZXQgaXRzIFVUQyBjb21wb25lbnRzXG4gKiB0byBtYXRjaCB0aGUgbG9jYWwgY29tcG9uZW50cyBvZiB0aGUgdXNlcidzIGRhdGUuXG4gKlxuICogVGhpcyBpcyBlc3NlbnRpYWwgZm9yIFJSdWxlIGV2YWx1YXRpb24gYmVjYXVzZSBpdCBlbnN1cmVzIHRoYXQgYSBydWxlXG4gKiBsaWtlIFwiRXZlcnkgV2VkbmVzZGF5XCIgcmVmZXJzIHRvIHRoZSB1c2VyJ3MgbG9jYWwgV2VkbmVzZGF5LCBldmVuIGlmXG4gKiB0aGF0IHRpbWUgZmFsbHMgb24gYSBUaHVyc2RheSBpbiBhY3R1YWwgVVRDLlxuICovXG5jb25zdCB0b0Zsb2F0aW5nRGF0ZSA9IChkOiBEYXlqcyk6IERhdGUgPT4ge1xuXHRyZXR1cm4gbmV3IERhdGUoXG5cdFx0RGF0ZS5VVEMoXG5cdFx0XHRkLnllYXIoKSxcblx0XHRcdGQubW9udGgoKSxcblx0XHRcdGQuZGF0ZSgpLFxuXHRcdFx0ZC5ob3VyKCksXG5cdFx0XHRkLm1pbnV0ZSgpLFxuXHRcdFx0ZC5zZWNvbmQoKSxcblx0XHRcdGQubWlsbGlzZWNvbmQoKVxuXHRcdClcblx0KVxufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgXCJGbG9hdGluZyBUaW1lXCIgRGF0ZSBiYWNrIHRvIGEgRGF5anMgb2JqZWN0IGluIHRoZSBvcmlnaW5hbCBjb250ZXh0LlxuICogSXQgdGFrZXMgdGhlIFlNREhNUyBjb21wb25lbnRzIGZyb20gdGhlIFVUQyBEYXRlIGFuZCBhcHBsaWVzIHRoZW0gdG8gdGhlXG4gKiByZWZlcmVuY2UgRGF5anMgb2JqZWN0IChwcmVzZXJ2aW5nIGl0cyB0aW1lem9uZS9sb2NhbGUpLlxuICovXG5jb25zdCBmcm9tRmxvYXRpbmdEYXRlID0gKGRhdGU6IERhdGUsIHJlZmVyZW5jZTogRGF5anMpOiBEYXlqcyA9PiB7XG5cdHJldHVybiByZWZlcmVuY2Vcblx0XHQueWVhcihkYXRlLmdldFVUQ0Z1bGxZZWFyKCkpXG5cdFx0Lm1vbnRoKGRhdGUuZ2V0VVRDTW9udGgoKSlcblx0XHQuZGF0ZShkYXRlLmdldFVUQ0RhdGUoKSlcblx0XHQuaG91cihkYXRlLmdldFVUQ0hvdXJzKCkpXG5cdFx0Lm1pbnV0ZShkYXRlLmdldFVUQ01pbnV0ZXMoKSlcblx0XHQuc2Vjb25kKGRhdGUuZ2V0VVRDU2Vjb25kcygpKVxuXHRcdC5taWxsaXNlY29uZChkYXRlLmdldFVUQ01pbGxpc2Vjb25kcygpKVxufVxuXG5leHBvcnQgY29uc3QgaXNSZWN1cnJpbmdFdmVudCA9IChldmVudDogQ2FsZW5kYXJFdmVudCk6IGJvb2xlYW4gPT4ge1xuXHRyZXR1cm4gQm9vbGVhbihldmVudC5ycnVsZSB8fCBldmVudC5yZWN1cnJlbmNlSWQgfHwgZXZlbnQudWlkKVxufVxuXG4vKipcbiAqIENvbnNpc3RlbnRseSBkZXJpdmVzIGEgcGFyZW50IFVJRCBmcm9tIGFuIGV2ZW50LlxuICogVXNlcyB0aGUgZXhwbGljaXQgYHVpZGAgaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgZmFsbHMgYmFjayB0byBgJHtpZH1AaWxhbXkuY2FsZW5kYXJgLlxuICovXG5jb25zdCBnZXRFdmVudFBhcmVudFVJRCA9IChldmVudDogQ2FsZW5kYXJFdmVudCk6IHN0cmluZyA9PiB7XG5cdHJldHVybiBldmVudC51aWQgfHwgYCR7ZXZlbnQuaWR9QGlsYW15LmNhbGVuZGFyYFxufVxuXG5pbnRlcmZhY2UgR2VuZXJhdGVSZWN1cnJpbmdFdmVudHNQcm9wcyB7XG5cdGV2ZW50OiBDYWxlbmRhckV2ZW50XG5cdGN1cnJlbnRFdmVudHM6IENhbGVuZGFyRXZlbnRbXVxuXHRzdGFydERhdGU6IERheWpzXG5cdGVuZERhdGU6IERheWpzXG59XG5cbmV4cG9ydCBjb25zdCBnZW5lcmF0ZVJlY3VycmluZ0V2ZW50cyA9ICh7XG5cdGV2ZW50LFxuXHRjdXJyZW50RXZlbnRzLFxuXHRzdGFydERhdGUsXG5cdGVuZERhdGUsXG59OiBHZW5lcmF0ZVJlY3VycmluZ0V2ZW50c1Byb3BzKTogQ2FsZW5kYXJFdmVudFtdID0+IHtcblx0Ly8gSWYgbm90IGEgcmVjdXJyaW5nIGV2ZW50LCByZXR1cm4gZW1wdHkgYXJyYXlcblx0aWYgKCFldmVudC5ycnVsZSkge1xuXHRcdHJldHVybiBbXVxuXHR9XG5cblx0dHJ5IHtcblx0XHQvLyBEVFNUQVJUIGFuZCBTRUFSQ0ggV0lORE9XIFRSQU5TRk9STUFUSU9OXG5cdFx0Ly8gVHJhbnNmb3JtIGFsbCBkYXRlcyB0byBcImZsb2F0aW5nIHRpbWVcIiAoVVRDIHdpdGggbG9jYWwgY29tcG9uZW50cylcblx0XHQvLyBUaGlzIGVuc3VyZXMgUlJ1bGUgZXZhbHVhdGVzIFwiV2VkbmVzZGF5XCIgYXMgdGhlIHVzZXIncyBsb2NhbCBXZWRuZXNkYXlcblx0XHRjb25zdCBmbG9hdGluZ1N0YXJ0ID0gdG9GbG9hdGluZ0RhdGUoZXZlbnQuc3RhcnQpXG5cdFx0Y29uc3QgZmxvYXRpbmdVbnRpbCA9IGV2ZW50LnJydWxlLnVudGlsXG5cdFx0XHQ/IHRvRmxvYXRpbmdEYXRlKGRheWpzKGV2ZW50LnJydWxlLnVudGlsKSlcblx0XHRcdDogdW5kZWZpbmVkXG5cblx0XHRjb25zdCBydWxlT3B0aW9uczogUlJ1bGVPcHRpb25zID0ge1xuXHRcdFx0Li4uZXZlbnQucnJ1bGUsXG5cdFx0XHRkdHN0YXJ0OiBmbG9hdGluZ1N0YXJ0LFxuXHRcdFx0dW50aWw6IGZsb2F0aW5nVW50aWwsXG5cdFx0fVxuXHRcdGNvbnN0IHJ1bGUgPSBuZXcgUlJ1bGUocnVsZU9wdGlvbnMpXG5cblx0XHRjb25zdCBwYXJlbnRVaWQgPSBnZXRFdmVudFBhcmVudFVJRChldmVudClcblx0XHRjb25zdCBvdmVycmlkZXMgPSBjdXJyZW50RXZlbnRzLmZpbHRlcihcblx0XHRcdChlKSA9PiBlLnJlY3VycmVuY2VJZCAmJiBnZXRFdmVudFBhcmVudFVJRChlKSA9PT0gcGFyZW50VWlkXG5cdFx0KVxuXG5cdFx0Ly8gQ2FsY3VsYXRlIGV2ZW50IGR1cmF0aW9uIHRvIGV4cGFuZCBzZWFyY2ggd2luZG93IGZvciBldmVudHMgdGhhdCBzcGFuIHRoZSByYW5nZVxuXHRcdGNvbnN0IGV2ZW50RHVyYXRpb24gPSBldmVudC5lbmQuZGlmZihldmVudC5zdGFydClcblxuXHRcdC8vIEV4cGFuZCBzZWFyY2ggd2luZG93IGJhY2t3YXJkIGJ5IGV2ZW50IGR1cmF0aW9uIHRvIGNhdGNoIGV2ZW50cyB0aGF0IHN0YXJ0IGJlZm9yZVxuXHRcdC8vIHRoZSByYW5nZSBidXQgc3BhbiBpbnRvIGl0XG5cdFx0Y29uc3QgZXhwYW5kZWRTdGFydERhdGVUaW1lID0gdG9GbG9hdGluZ0RhdGUoXG5cdFx0XHRzdGFydERhdGUuc3VidHJhY3QoZXZlbnREdXJhdGlvbiwgJ21pbGxpc2Vjb25kJylcblx0XHQpXG5cdFx0Y29uc3QgZW5kRGF0ZVRpbWUgPSB0b0Zsb2F0aW5nRGF0ZShlbmREYXRlKVxuXG5cdFx0Ly8gR2V0IGFsbCBvY2N1cnJlbmNlcyBpbiB0aGUgZXhwYW5kZWQgcmFuZ2Vcblx0XHRjb25zdCBvY2N1cnJlbmNlcyA9IHJ1bGUuYmV0d2VlbihleHBhbmRlZFN0YXJ0RGF0ZVRpbWUsIGVuZERhdGVUaW1lLCB0cnVlKVxuXG5cdFx0Ly8gQ29udmVydCBvY2N1cnJlbmNlcyB0byBDYWxlbmRhckV2ZW50IGluc3RhbmNlc1xuXHRcdGNvbnN0IHJlY3VycmluZ0V2ZW50czogQ2FsZW5kYXJFdmVudFtdID0gb2NjdXJyZW5jZXNcblx0XHRcdC5tYXAoKG9jY3VycmVuY2UsIGluZGV4KSA9PiB7XG5cdFx0XHRcdGNvbnN0IG9jY3VycmVuY2VEYXRlID0gZnJvbUZsb2F0aW5nRGF0ZShvY2N1cnJlbmNlLCBldmVudC5zdGFydClcblx0XHRcdFx0Y29uc3QgZXhpc3RpbmdPdmVycmlkZSA9IG92ZXJyaWRlcy5maW5kKChlKSA9PlxuXHRcdFx0XHRcdHNhZmVEYXRlKGUucmVjdXJyZW5jZUlkKT8uaXNTYW1lKG9jY3VycmVuY2VEYXRlKVxuXHRcdFx0XHQpXG5cblx0XHRcdFx0Ly8gSWYgdGhlcmUncyBhbiBvdmVycmlkZSwgdXNlIGl0XG5cdFx0XHRcdGlmIChleGlzdGluZ092ZXJyaWRlKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHsgLi4uZXZlbnQsIC4uLmV4aXN0aW5nT3ZlcnJpZGUgfVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQ2FsY3VsYXRlIHRoZSBkdXJhdGlvbiBmcm9tIHRoZSBvcmlnaW5hbCBldmVudFxuXHRcdFx0XHRjb25zdCBvcmlnaW5hbER1cmF0aW9uID0gZXZlbnQuZW5kLmRpZmYoZXZlbnQuc3RhcnQpXG5cdFx0XHRcdGNvbnN0IG5ld0VuZFRpbWUgPSBvY2N1cnJlbmNlRGF0ZS5hZGQob3JpZ2luYWxEdXJhdGlvbiwgJ21pbGxpc2Vjb25kJylcblx0XHRcdFx0Y29uc3QgcmVjdXJyaW5nRXZlbnRJZCA9IGAke2V2ZW50LmlkfV8ke2luZGV4fWBcblx0XHRcdFx0Y29uc3QgcGFyZW50VUlEID0gZ2V0RXZlbnRQYXJlbnRVSUQoZXZlbnQpXG5cblx0XHRcdFx0Ly8gQ3JlYXRlIHRoZSByZWN1cnJpbmcgZXZlbnQgaW5zdGFuY2Vcblx0XHRcdFx0Y29uc3QgcmVjdXJyaW5nRXZlbnQ6IENhbGVuZGFyRXZlbnQgPSB7XG5cdFx0XHRcdFx0Li4uZXZlbnQsXG5cdFx0XHRcdFx0aWQ6IHJlY3VycmluZ0V2ZW50SWQsXG5cdFx0XHRcdFx0c3RhcnQ6IG9jY3VycmVuY2VEYXRlLFxuXHRcdFx0XHRcdGVuZDogbmV3RW5kVGltZSxcblx0XHRcdFx0XHR1aWQ6IHBhcmVudFVJRCwgLy8gU2FtZSBVSUQgYXMgcGFyZW50IGZvciBwcm9wZXIgZ3JvdXBpbmdcblx0XHRcdFx0XHRycnVsZTogdW5kZWZpbmVkLCAvLyBJbnN0YW5jZSBldmVudHMgZG9uJ3QgaGF2ZSBSUlVMRVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHJlY3VycmluZ0V2ZW50XG5cdFx0XHR9KVxuXHRcdFx0LmZpbHRlcigocmVjdXJyaW5nRXZlbnQpID0+IHtcblx0XHRcdFx0Ly8gRmlsdGVyIG91dCBFWERBVEUgZXhjbHVzaW9uc1xuXHRcdFx0XHRjb25zdCBoYXNFeGRhdGVzID0gZXZlbnQuZXhkYXRlcyAmJiBldmVudC5leGRhdGVzLmxlbmd0aCA+IDBcblx0XHRcdFx0aWYgKGhhc0V4ZGF0ZXMpIHtcblx0XHRcdFx0XHRjb25zdCBldmVudFN0YXJ0SVNPID0gcmVjdXJyaW5nRXZlbnQuc3RhcnQudG9JU09TdHJpbmcoKVxuXHRcdFx0XHRcdGNvbnN0IGlzRXhjbHVkZWQgPSBldmVudC5leGRhdGVzPy5pbmNsdWRlcyhldmVudFN0YXJ0SVNPKVxuXHRcdFx0XHRcdGlmIChpc0V4Y2x1ZGVkKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2Vcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBGaWx0ZXIgdG8gb25seSBpbmNsdWRlIGV2ZW50cyB0aGF0IHNwYW4gdGhyb3VnaCB0aGUgb3JpZ2luYWwgcmVxdWVzdGVkIGRhdGUgcmFuZ2Vcblx0XHRcdFx0Ly8gQW4gZXZlbnQgc3BhbnMgdGhlIHJhbmdlIGlmOiBldmVudF9zdGFydCA8IHJhbmdlX2VuZCBBTkQgZXZlbnRfZW5kID4gcmFuZ2Vfc3RhcnRcblx0XHRcdFx0Ly8gVXNlIGlzU2FtZU9yQmVmb3JlL2lzU2FtZU9yQWZ0ZXIgdG8gaW5jbHVkZSBib3VuZGFyeSBjYXNlc1xuXHRcdFx0XHRjb25zdCBldmVudFNwYW5zUmFuZ2UgPVxuXHRcdFx0XHRcdHJlY3VycmluZ0V2ZW50LnN0YXJ0LmlzU2FtZU9yQmVmb3JlKGVuZERhdGUpICYmXG5cdFx0XHRcdFx0cmVjdXJyaW5nRXZlbnQuZW5kLmlzU2FtZU9yQWZ0ZXIoc3RhcnREYXRlKVxuXG5cdFx0XHRcdHJldHVybiBldmVudFNwYW5zUmFuZ2Vcblx0XHRcdH0pXG5cblx0XHRyZXR1cm4gcmVjdXJyaW5nRXZlbnRzXG5cdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0Ly8gSGFuZGxlIGludmFsaWQgUlJVTEUgb3B0aW9uc1xuXHRcdHRocm93IG5ldyBFcnJvcihcblx0XHRcdGBJbnZhbGlkIFJSVUxFIG9wdGlvbnM6ICR7SlNPTi5zdHJpbmdpZnkoZXZlbnQucnJ1bGUpfS4gRXJyb3I6ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcid9YFxuXHRcdClcblx0fVxufVxuXG5pbnRlcmZhY2UgVXBkYXRlUmVjdXJyaW5nRXZlbnRQcm9wcyB7XG5cdHRhcmdldEV2ZW50OiBDYWxlbmRhckV2ZW50XG5cdHVwZGF0ZXM6IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD5cblx0Y3VycmVudEV2ZW50czogQ2FsZW5kYXJFdmVudFtdXG5cdHNjb3BlOiAndGhpcycgfCAnZm9sbG93aW5nJyB8ICdhbGwnXG59XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVSZWN1cnJpbmdFdmVudCA9ICh7XG5cdHRhcmdldEV2ZW50LFxuXHR1cGRhdGVzLFxuXHRjdXJyZW50RXZlbnRzLFxuXHRzY29wZSxcbn06IFVwZGF0ZVJlY3VycmluZ0V2ZW50UHJvcHMpOiBDYWxlbmRhckV2ZW50W10gPT4ge1xuXHRjb25zdCB1cGRhdGVkRXZlbnRzID0gWy4uLmN1cnJlbnRFdmVudHNdXG5cblx0Ly8gRmluZCB0aGUgYmFzZSByZWN1cnJpbmcgZXZlbnRcblx0Y29uc3QgdGFyZ2V0VWlkID0gZ2V0RXZlbnRQYXJlbnRVSUQodGFyZ2V0RXZlbnQpXG5cdGNvbnN0IGJhc2VFdmVudEluZGV4ID0gdXBkYXRlZEV2ZW50cy5maW5kSW5kZXgoKGUpID0+IHtcblx0XHRyZXR1cm4gZ2V0RXZlbnRQYXJlbnRVSUQoZSkgPT09IHRhcmdldFVpZCAmJiBlLnJydWxlICYmICFlLnJlY3VycmVuY2VJZFxuXHR9KVxuXG5cdGlmIChiYXNlRXZlbnRJbmRleCA9PT0gLTEpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ0Jhc2UgcmVjdXJyaW5nIGV2ZW50IG5vdCBmb3VuZCcpXG5cdH1cblxuXHRjb25zdCBiYXNlRXZlbnQgPSB1cGRhdGVkRXZlbnRzW2Jhc2VFdmVudEluZGV4XVxuXG5cdHN3aXRjaCAoc2NvcGUpIHtcblx0XHRjYXNlICd0aGlzJzoge1xuXHRcdFx0Ly8gXCJUaGlzIGV2ZW50IG9ubHlcIiAtIEFkZCBFWERBVEUgdG8gYmFzZSBldmVudCBhbmQgY3JlYXRlIHN0YW5kYWxvbmUgbW9kaWZpZWQgZXZlbnRcblx0XHRcdGNvbnN0IHRhcmdldEV2ZW50U3RhcnRJU08gPSB0YXJnZXRFdmVudC5zdGFydC50b0lTT1N0cmluZygpXG5cdFx0XHRjb25zdCBleGlzdGluZ0V4ZGF0ZXMgPSBiYXNlRXZlbnQuZXhkYXRlcyB8fCBbXVxuXHRcdFx0Y29uc3QgdXBkYXRlZEV4ZGF0ZXMgPSBbLi4uZXhpc3RpbmdFeGRhdGVzLCB0YXJnZXRFdmVudFN0YXJ0SVNPXVxuXG5cdFx0XHRjb25zdCB1cGRhdGVkQmFzZUV2ZW50ID0ge1xuXHRcdFx0XHQuLi5iYXNlRXZlbnQsXG5cdFx0XHRcdGV4ZGF0ZXM6IHVwZGF0ZWRFeGRhdGVzLFxuXHRcdFx0fVxuXHRcdFx0dXBkYXRlZEV2ZW50c1tiYXNlRXZlbnRJbmRleF0gPSB1cGRhdGVkQmFzZUV2ZW50XG5cblx0XHRcdC8vIENyZWF0ZSBzdGFuZGFsb25lIG1vZGlmaWVkIGV2ZW50IHdpdGggcmVjdXJyZW5jZUlkXG5cdFx0XHRjb25zdCBtb2RpZmllZEV2ZW50SWQgPSBgJHt0YXJnZXRFdmVudC5pZH1fbW9kaWZpZWRfJHtEYXRlLm5vdygpfWBcblx0XHRcdGNvbnN0IG1vZGlmaWVkRXZlbnQ6IENhbGVuZGFyRXZlbnQgPSB7XG5cdFx0XHRcdC8vIEB0cy1leHBlY3QtZXJyb3IgVE9ETzogZml4IHRoZSB0eXBlc1xuXHRcdFx0XHQuLi5vbWl0S2V5cyh0YXJnZXRFdmVudCwgWyd3aWR0aCcsICdoZWlnaHQnLCAndG9wJywgJ2xlZnQnLCAncmlnaHQnXSksXG5cdFx0XHRcdC4uLnVwZGF0ZXMsXG5cdFx0XHRcdGlkOiBtb2RpZmllZEV2ZW50SWQsXG5cdFx0XHRcdHJlY3VycmVuY2VJZDogdGFyZ2V0RXZlbnRTdGFydElTTywgLy8gVGhpcyBtYXJrcyBpdCBhcyBhIG1vZGlmaWVkIGluc3RhbmNlXG5cdFx0XHRcdHVpZDogZ2V0RXZlbnRQYXJlbnRVSUQoYmFzZUV2ZW50KSwgLy8gS2VlcCBzYW1lIFVJRCBhcyBiYXNlIGV2ZW50IChpQ2FsZW5kYXIgc3RhbmRhcmQpXG5cdFx0XHRcdHJydWxlOiB1bmRlZmluZWQsIC8vIFN0YW5kYWxvbmUgZXZlbnRzIGRvbid0IGhhdmUgUlJVTEVcblx0XHRcdH0gYXMgQ2FsZW5kYXJFdmVudFxuXHRcdFx0dXBkYXRlZEV2ZW50cy5wdXNoKG1vZGlmaWVkRXZlbnQpXG5cdFx0XHRicmVha1xuXHRcdH1cblxuXHRcdGNhc2UgJ2ZvbGxvd2luZyc6IHtcblx0XHRcdC8vIFwiVGhpcyBhbmQgZm9sbG93aW5nXCIgLSBUZXJtaW5hdGUgb3JpZ2luYWwgc2VyaWVzIGFuZCBjcmVhdGUgbmV3IHNlcmllc1xuXG5cdFx0XHQvLyBDYWxjdWxhdGUgdGhlIHRlcm1pbmF0aW9uIGRhdGU6IGRheSBiZWZvcmUgdGFyZ2V0IHdpdGggZW5kIG9mIGRheSB0aW1lXG5cdFx0XHQvLyBUaGlzIGVuc3VyZXMgdGhlIGxhc3Qgb2NjdXJyZW5jZSBiZWZvcmUgdGFyZ2V0IGlzIGluY2x1ZGVkIGluIHRoZSB0ZXJtaW5hdGVkIHNlcmllc1xuXHRcdFx0Y29uc3QgZGF5QmVmb3JlVGFyZ2V0ID0gdGFyZ2V0RXZlbnQuc3RhcnQuc3VidHJhY3QoMSwgJ2RheScpXG5cdFx0XHRjb25zdCB0ZXJtaW5hdGlvbkRhdGUgPSBkYXlCZWZvcmVUYXJnZXQuZW5kT2YoJ2RheScpLnRvRGF0ZSgpXG5cblx0XHRcdC8vIFVwZGF0ZSBvcmlnaW5hbCBzZXJpZXMgd2l0aCBVTlRJTCB0byBlbmQgYmVmb3JlIHRhcmdldCBkYXRlXG5cdFx0XHRjb25zdCB0ZXJtaW5hdGVkRXZlbnQgPSB7XG5cdFx0XHRcdC4uLmJhc2VFdmVudCxcblx0XHRcdFx0cnJ1bGU6IHtcblx0XHRcdFx0XHQuLi5iYXNlRXZlbnQucnJ1bGUsXG5cdFx0XHRcdFx0dW50aWw6IHRlcm1pbmF0aW9uRGF0ZSxcblx0XHRcdFx0fSBhcyBSUnVsZU9wdGlvbnMsXG5cdFx0XHR9XG5cdFx0XHR1cGRhdGVkRXZlbnRzW2Jhc2VFdmVudEluZGV4XSA9IHRlcm1pbmF0ZWRFdmVudFxuXG5cdFx0XHQvLyBDcmVhdGUgbmV3IHNlcmllcyBzdGFydGluZyBmcm9tIHRhcmdldCBkYXRlXG5cdFx0XHRjb25zdCBvcmlnaW5hbER1cmF0aW9uID0gYmFzZUV2ZW50LmVuZC5kaWZmKGJhc2VFdmVudC5zdGFydClcblx0XHRcdGNvbnN0IG5ld1Nlcmllc1N0YXJ0VGltZSA9IHVwZGF0ZXMuc3RhcnQgfHwgdGFyZ2V0RXZlbnQuc3RhcnRcblx0XHRcdGNvbnN0IG5ld1Nlcmllc0VuZFRpbWUgPVxuXHRcdFx0XHR1cGRhdGVzLmVuZCB8fCBuZXdTZXJpZXNTdGFydFRpbWUuYWRkKG9yaWdpbmFsRHVyYXRpb24pXG5cdFx0XHRjb25zdCBuZXdTZXJpZXNJZCA9IGAke2Jhc2VFdmVudC5pZH1fZm9sbG93aW5nYFxuXHRcdFx0Y29uc3QgbmV3U2VyaWVzVUlEID0gYCR7bmV3U2VyaWVzSWR9QGlsYW15LmNhbGVuZGFyYFxuXG5cdFx0XHRjb25zdCBuZXdTZXJpZXNFdmVudDogQ2FsZW5kYXJFdmVudCA9IHtcblx0XHRcdFx0Li4uYmFzZUV2ZW50LFxuXHRcdFx0XHQuLi51cGRhdGVzLFxuXHRcdFx0XHRycnVsZToge1xuXHRcdFx0XHRcdC4uLmJhc2VFdmVudC5ycnVsZSxcblx0XHRcdFx0XHQuLi51cGRhdGVzLnJydWxlLFxuXHRcdFx0XHRcdGR0c3RhcnQ6IG5ld1Nlcmllc1N0YXJ0VGltZS50b0RhdGUoKSxcblx0XHRcdFx0fSBhcyBSUnVsZU9wdGlvbnMsXG5cdFx0XHRcdGlkOiBuZXdTZXJpZXNJZCxcblx0XHRcdFx0dWlkOiBuZXdTZXJpZXNVSUQsIC8vIE5ldyBVSUQgZm9yIG5ldyBzZXJpZXNcblx0XHRcdFx0c3RhcnQ6IG5ld1Nlcmllc1N0YXJ0VGltZSxcblx0XHRcdFx0ZW5kOiBuZXdTZXJpZXNFbmRUaW1lLFxuXHRcdFx0XHRyZWN1cnJlbmNlSWQ6IHVuZGVmaW5lZCwgLy8gVGhpcyBpcyBhIG5ldyBiYXNlIGV2ZW50LCBub3QgYW4gaW5zdGFuY2Vcblx0XHRcdH1cblx0XHRcdHVwZGF0ZWRFdmVudHMucHVzaChuZXdTZXJpZXNFdmVudClcblx0XHRcdGJyZWFrXG5cdFx0fVxuXG5cdFx0Y2FzZSAnYWxsJzoge1xuXHRcdFx0Ly8gXCJBbGwgZXZlbnRzXCIgLSBVcGRhdGUgdGhlIGJhc2UgcmVjdXJyaW5nIGV2ZW50XG5cdFx0XHRjb25zdCB1cGRhdGVkQmFzZUV2ZW50ID0ge1xuXHRcdFx0XHQuLi5iYXNlRXZlbnQsXG5cdFx0XHRcdC4uLnVwZGF0ZXMsXG5cdFx0XHR9XG5cdFx0XHR1cGRhdGVkRXZlbnRzW2Jhc2VFdmVudEluZGV4XSA9IHVwZGF0ZWRCYXNlRXZlbnRcblx0XHRcdGJyZWFrXG5cdFx0fVxuXG5cdFx0ZGVmYXVsdDpcblx0XHRcdHRocm93IG5ldyBFcnJvcihcblx0XHRcdFx0YEludmFsaWQgc2NvcGU6ICR7c2NvcGV9LiBNdXN0IGJlICd0aGlzJywgJ2ZvbGxvd2luZycsIG9yICdhbGwnYFxuXHRcdFx0KVxuXHR9XG5cblx0cmV0dXJuIHVwZGF0ZWRFdmVudHNcbn1cblxuaW50ZXJmYWNlIERlbGV0ZVJlY3VycmluZ0V2ZW50UHJvcHMge1xuXHR0YXJnZXRFdmVudDogQ2FsZW5kYXJFdmVudFxuXHRjdXJyZW50RXZlbnRzOiBDYWxlbmRhckV2ZW50W11cblx0c2NvcGU6ICd0aGlzJyB8ICdmb2xsb3dpbmcnIHwgJ2FsbCdcbn1cblxuZXhwb3J0IGNvbnN0IGRlbGV0ZVJlY3VycmluZ0V2ZW50ID0gKHtcblx0dGFyZ2V0RXZlbnQsXG5cdGN1cnJlbnRFdmVudHMsXG5cdHNjb3BlLFxufTogRGVsZXRlUmVjdXJyaW5nRXZlbnRQcm9wcyk6IENhbGVuZGFyRXZlbnRbXSA9PiB7XG5cdGNvbnN0IHVwZGF0ZWRFdmVudHMgPSBbLi4uY3VycmVudEV2ZW50c11cblxuXHQvLyBGaW5kIHRoZSBiYXNlIHJlY3VycmluZyBldmVudFxuXHRjb25zdCB0YXJnZXRVaWQgPSBnZXRFdmVudFBhcmVudFVJRCh0YXJnZXRFdmVudClcblx0Y29uc3QgYmFzZUV2ZW50SW5kZXggPSB1cGRhdGVkRXZlbnRzLmZpbmRJbmRleCgoZSkgPT4ge1xuXHRcdHJldHVybiBnZXRFdmVudFBhcmVudFVJRChlKSA9PT0gdGFyZ2V0VWlkICYmIGUucnJ1bGUgJiYgIWUucmVjdXJyZW5jZUlkXG5cdH0pXG5cblx0aWYgKGJhc2VFdmVudEluZGV4ID09PSAtMSkge1xuXHRcdHRocm93IG5ldyBFcnJvcignQmFzZSByZWN1cnJpbmcgZXZlbnQgbm90IGZvdW5kJylcblx0fVxuXG5cdGNvbnN0IGJhc2VFdmVudCA9IHVwZGF0ZWRFdmVudHNbYmFzZUV2ZW50SW5kZXhdXG5cblx0c3dpdGNoIChzY29wZSkge1xuXHRcdGNhc2UgJ3RoaXMnOiB7XG5cdFx0XHQvLyBcIlRoaXMgZXZlbnQgb25seVwiIC0gQWRkIEVYREFURSB0byBleGNsdWRlIHRoaXMgb2NjdXJyZW5jZVxuXHRcdFx0Y29uc3QgdGFyZ2V0RXZlbnRTdGFydElTTyA9IHRhcmdldEV2ZW50LnN0YXJ0LnRvSVNPU3RyaW5nKClcblx0XHRcdGNvbnN0IGV4aXN0aW5nRXhkYXRlcyA9IGJhc2VFdmVudC5leGRhdGVzIHx8IFtdXG5cdFx0XHRjb25zdCB1cGRhdGVkRXhkYXRlcyA9IFsuLi5leGlzdGluZ0V4ZGF0ZXMsIHRhcmdldEV2ZW50U3RhcnRJU09dXG5cblx0XHRcdGNvbnN0IHVwZGF0ZWRCYXNlRXZlbnQgPSB7IC4uLmJhc2VFdmVudCwgZXhkYXRlczogdXBkYXRlZEV4ZGF0ZXMgfVxuXHRcdFx0dXBkYXRlZEV2ZW50c1tiYXNlRXZlbnRJbmRleF0gPSB1cGRhdGVkQmFzZUV2ZW50XG5cdFx0XHRicmVha1xuXHRcdH1cblxuXHRcdGNhc2UgJ2ZvbGxvd2luZyc6IHtcblx0XHRcdC8vIFwiVGhpcyBhbmQgZm9sbG93aW5nXCIgLSBUZXJtaW5hdGUgc2VyaWVzIHdpdGggVU5USUwgYmVmb3JlIHRhcmdldCBkYXRlXG5cblx0XHRcdC8vIENhbGN1bGF0ZSB0aGUgdGVybWluYXRpb24gZGF0ZTogZGF5IGJlZm9yZSB0YXJnZXQgd2l0aCBlbmQgb2YgZGF5IHRpbWVcblx0XHRcdC8vIFRoaXMgZW5zdXJlcyB0aGUgbGFzdCBvY2N1cnJlbmNlIGJlZm9yZSB0YXJnZXQgaXMgaW5jbHVkZWQgaW4gdGhlIHRlcm1pbmF0ZWQgc2VyaWVzXG5cdFx0XHRjb25zdCBkYXlCZWZvcmVUYXJnZXQgPSB0YXJnZXRFdmVudC5zdGFydC5zdWJ0cmFjdCgxLCAnZGF5Jylcblx0XHRcdGNvbnN0IHRlcm1pbmF0aW9uRGF0ZSA9IGRheUJlZm9yZVRhcmdldC5lbmRPZignZGF5JykudG9EYXRlKClcblxuXHRcdFx0Y29uc3QgdGVybWluYXRlZEV2ZW50ID0ge1xuXHRcdFx0XHQuLi5iYXNlRXZlbnQsXG5cdFx0XHRcdHJydWxlOiB7XG5cdFx0XHRcdFx0Li4uYmFzZUV2ZW50LnJydWxlLFxuXHRcdFx0XHRcdHVudGlsOiB0ZXJtaW5hdGlvbkRhdGUsXG5cdFx0XHRcdH0gYXMgUlJ1bGVPcHRpb25zLFxuXHRcdFx0fVxuXHRcdFx0dXBkYXRlZEV2ZW50c1tiYXNlRXZlbnRJbmRleF0gPSB0ZXJtaW5hdGVkRXZlbnRcblx0XHRcdGJyZWFrXG5cdFx0fVxuXG5cdFx0Y2FzZSAnYWxsJzoge1xuXHRcdFx0Ly8gXCJBbGwgZXZlbnRzXCIgLSBSZW1vdmUgdGhlIGVudGlyZSByZWN1cnJpbmcgc2VyaWVzXG5cdFx0XHRjb25zdCB0YXJnZXRVaWQgPSBnZXRFdmVudFBhcmVudFVJRCh0YXJnZXRFdmVudClcblx0XHRcdGNvbnN0IGV2ZW50c1dpdGhvdXRUYXJnZXRTZXJpZXMgPSB1cGRhdGVkRXZlbnRzLmZpbHRlcihcblx0XHRcdFx0KGUpID0+IGdldEV2ZW50UGFyZW50VUlEKGUpICE9PSB0YXJnZXRVaWRcblx0XHRcdClcblx0XHRcdHJldHVybiBldmVudHNXaXRob3V0VGFyZ2V0U2VyaWVzXG5cdFx0fVxuXG5cdFx0ZGVmYXVsdDpcblx0XHRcdHRocm93IG5ldyBFcnJvcihcblx0XHRcdFx0YEludmFsaWQgc2NvcGU6ICR7c2NvcGV9LiBNdXN0IGJlICd0aGlzJywgJ2ZvbGxvd2luZycsIG9yICdhbGwnYFxuXHRcdFx0KVxuXHR9XG5cblx0cmV0dXJuIHVwZGF0ZWRFdmVudHNcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBUcmFuc2xhdGlvbnMgfSBmcm9tICcuL3R5cGVzJ1xuXG5leHBvcnQgY29uc3QgZGVmYXVsdFRyYW5zbGF0aW9uczogVHJhbnNsYXRpb25zID0ge1xuXHQvLyBDb21tb24gYWN0aW9uc1xuXHR0b2RheTogJ1RvZGF5Jyxcblx0Y3JlYXRlOiAnQ3JlYXRlJyxcblx0bmV3OiAnTmV3Jyxcblx0dXBkYXRlOiAnVXBkYXRlJyxcblx0ZGVsZXRlOiAnRGVsZXRlJyxcblx0Y2FuY2VsOiAnQ2FuY2VsJyxcblx0ZXhwb3J0OiAnRXhwb3J0JyxcblxuXHQvLyBFdmVudCByZWxhdGVkXG5cdGV2ZW50OiAnRXZlbnQnLFxuXHRldmVudHM6ICdFdmVudHMnLFxuXHRuZXdFdmVudDogJ05ldyBFdmVudCcsXG5cdHRpdGxlOiAnVGl0bGUnLFxuXHRkZXNjcmlwdGlvbjogJ0Rlc2NyaXB0aW9uJyxcblx0bG9jYXRpb246ICdMb2NhdGlvbicsXG5cdGFsbERheTogJ0FsbCBkYXknLFxuXHRzdGFydERhdGU6ICdTdGFydCBEYXRlJyxcblx0ZW5kRGF0ZTogJ0VuZCBEYXRlJyxcblx0c3RhcnRUaW1lOiAnU3RhcnQgVGltZScsXG5cdGVuZFRpbWU6ICdFbmQgVGltZScsXG5cdGNvbG9yOiAnQ29sb3InLFxuXG5cdC8vIEV2ZW50IGZvcm1cblx0Y3JlYXRlRXZlbnQ6ICdDcmVhdGUgRXZlbnQnLFxuXHRlZGl0RXZlbnQ6ICdFZGl0IEV2ZW50Jyxcblx0YWRkTmV3RXZlbnQ6ICdBZGQgYSBuZXcgZXZlbnQgdG8geW91ciBjYWxlbmRhcicsXG5cdGVkaXRFdmVudERldGFpbHM6ICdFZGl0IHlvdXIgZXZlbnQgZGV0YWlscycsXG5cdGV2ZW50VGl0bGVQbGFjZWhvbGRlcjogJ0V2ZW50IHRpdGxlJyxcblx0ZXZlbnREZXNjcmlwdGlvblBsYWNlaG9sZGVyOiAnRXZlbnQgZGVzY3JpcHRpb24gKG9wdGlvbmFsKScsXG5cdGV2ZW50TG9jYXRpb25QbGFjZWhvbGRlcjogJ0V2ZW50IGxvY2F0aW9uIChvcHRpb25hbCknLFxuXG5cdC8vIFJlY3VycmVuY2Vcblx0cmVwZWF0OiAnUmVwZWF0Jyxcblx0cmVwZWF0czogJ1JlcGVhdHMnLFxuXHRjdXN0b21SZWN1cnJlbmNlOiAnQ3VzdG9tIHJlY3VycmVuY2UnLFxuXHRkYWlseTogJ0RhaWx5Jyxcblx0d2Vla2x5OiAnV2Vla2x5Jyxcblx0bW9udGhseTogJ01vbnRobHknLFxuXHR5ZWFybHk6ICdZZWFybHknLFxuXHRpbnRlcnZhbDogJ0ludGVydmFsJyxcblx0cmVwZWF0T246ICdSZXBlYXQgb24nLFxuXHRuZXZlcjogJ05ldmVyJyxcblx0Y291bnQ6ICdDb3VudCcsXG5cdGV2ZXJ5OiAnRXZlcnknLFxuXHRlbmRzOiAnRW5kcycsXG5cdGFmdGVyOiAnQWZ0ZXInLFxuXHRvY2N1cnJlbmNlczogJ29jY3VycmVuY2VzJyxcblx0b246ICdPbicsXG5cblx0Ly8gUmVjdXJyZW5jZSBlZGl0IGRpYWxvZ1xuXHRlZGl0UmVjdXJyaW5nRXZlbnQ6ICdFZGl0IHJlY3VycmluZyBldmVudCcsXG5cdGRlbGV0ZVJlY3VycmluZ0V2ZW50OiAnRGVsZXRlIHJlY3VycmluZyBldmVudCcsXG5cdGVkaXRSZWN1cnJpbmdFdmVudFF1ZXN0aW9uOlxuXHRcdCdpcyBhIHJlY3VycmluZyBldmVudC4gSG93IHdvdWxkIHlvdSBsaWtlIHRvIGVkaXQgaXQ/Jyxcblx0ZGVsZXRlUmVjdXJyaW5nRXZlbnRRdWVzdGlvbjpcblx0XHQnaXMgYSByZWN1cnJpbmcgZXZlbnQuIEhvdyB3b3VsZCB5b3UgbGlrZSB0byBkZWxldGUgaXQ/Jyxcblx0dGhpc0V2ZW50OiAnVGhpcyBldmVudCcsXG5cdHRoaXNFdmVudERlc2NyaXB0aW9uOiAnT25seSBjaGFuZ2UgdGhpcyBzcGVjaWZpYyBvY2N1cnJlbmNlJyxcblx0dGhpc0FuZEZvbGxvd2luZ0V2ZW50czogJ1RoaXMgYW5kIGZvbGxvd2luZyBldmVudHMnLFxuXHR0aGlzQW5kRm9sbG93aW5nRXZlbnRzRGVzY3JpcHRpb246ICdFZGl0IHRoaXMgYW5kIGFsbCBmdXR1cmUgb2NjdXJyZW5jZXMnLFxuXHRhbGxFdmVudHM6ICdBbGwgZXZlbnRzJyxcblx0YWxsRXZlbnRzRGVzY3JpcHRpb246ICdFZGl0IHRoZSBlbnRpcmUgcmVjdXJyaW5nIHNlcmllcycsXG5cdG9ubHlDaGFuZ2VUaGlzOiAnT25seSBjaGFuZ2UgdGhpcyBzcGVjaWZpYyBvY2N1cnJlbmNlJyxcblx0Y2hhbmdlVGhpc0FuZEZ1dHVyZTogJ0NoYW5nZSB0aGlzIGFuZCBhbGwgZnV0dXJlIG9jY3VycmVuY2VzJyxcblx0Y2hhbmdlRW50aXJlU2VyaWVzOiAnQ2hhbmdlIHRoZSBlbnRpcmUgcmVjdXJyaW5nIHNlcmllcycsXG5cdG9ubHlEZWxldGVUaGlzOiAnT25seSBkZWxldGUgdGhpcyBzcGVjaWZpYyBvY2N1cnJlbmNlJyxcblx0ZGVsZXRlVGhpc0FuZEZ1dHVyZTogJ0RlbGV0ZSB0aGlzIGFuZCBhbGwgZnV0dXJlIG9jY3VycmVuY2VzJyxcblx0ZGVsZXRlRW50aXJlU2VyaWVzOiAnRGVsZXRlIHRoZSBlbnRpcmUgcmVjdXJyaW5nIHNlcmllcycsXG5cblx0Ly8gVmlldyB0eXBlc1xuXHRtb250aDogJ01vbnRoJyxcblx0d2VlazogJ1dlZWsnLFxuXHRkYXk6ICdEYXknLFxuXHR5ZWFyOiAnWWVhcicsXG5cdG1vcmU6ICdtb3JlJyxcblxuXHQvLyBSZXNvdXJjZSBjYWxlbmRhclxuXHRyZXNvdXJjZXM6ICdSZXNvdXJjZXMnLFxuXHRyZXNvdXJjZTogJ1Jlc291cmNlJyxcblx0dGltZTogJ1RpbWUnLFxuXHRkYXRlOiAnRGF0ZScsXG5cdG5vUmVzb3VyY2VzVmlzaWJsZTogJ05vIHJlc291cmNlcyB2aXNpYmxlJyxcblx0YWRkUmVzb3VyY2VzT3JTaG93RXhpc3Rpbmc6ICdBZGQgcmVzb3VyY2VzIG9yIHNob3cgZXhpc3Rpbmcgb25lcycsXG5cblx0Ly8gRGF5cyBvZiB3ZWVrXG5cdHN1bmRheTogJ1N1bmRheScsXG5cdG1vbmRheTogJ01vbmRheScsXG5cdHR1ZXNkYXk6ICdUdWVzZGF5Jyxcblx0d2VkbmVzZGF5OiAnV2VkbmVzZGF5Jyxcblx0dGh1cnNkYXk6ICdUaHVyc2RheScsXG5cdGZyaWRheTogJ0ZyaWRheScsXG5cdHNhdHVyZGF5OiAnU2F0dXJkYXknLFxuXG5cdC8vIERheXMgc2hvcnRcblx0c3VuOiAnU3VuJyxcblx0bW9uOiAnTW9uJyxcblx0dHVlOiAnVHVlJyxcblx0d2VkOiAnV2VkJyxcblx0dGh1OiAnVGh1Jyxcblx0ZnJpOiAnRnJpJyxcblx0c2F0OiAnU2F0JyxcblxuXHQvLyBNb250aHNcblx0amFudWFyeTogJ0phbnVhcnknLFxuXHRmZWJydWFyeTogJ0ZlYnJ1YXJ5Jyxcblx0bWFyY2g6ICdNYXJjaCcsXG5cdGFwcmlsOiAnQXByaWwnLFxuXHRtYXk6ICdNYXknLFxuXHRqdW5lOiAnSnVuZScsXG5cdGp1bHk6ICdKdWx5Jyxcblx0YXVndXN0OiAnQXVndXN0Jyxcblx0c2VwdGVtYmVyOiAnU2VwdGVtYmVyJyxcblx0b2N0b2JlcjogJ09jdG9iZXInLFxuXHRub3ZlbWJlcjogJ05vdmVtYmVyJyxcblx0ZGVjZW1iZXI6ICdEZWNlbWJlcicsXG59XG4iLAogICAgImltcG9ydCBkYXlqcywgeyB0eXBlIERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgd2VlayBkYXlzIGZvciBhIGdpdmVuIGRhdGUgYW5kIGZpcnN0IGRheSBvZiB3ZWVrIHNldHRpbmcuXG4gKlxuICogVGhpcyBmdW5jdGlvbiBlbnN1cmVzIHRoYXQgdGhlIGN1cnJlbnQgZGF0ZSBpcyBhbHdheXMgaW5jbHVkZWQgaW4gdGhlIHJldHVybmVkIHdlZWssXG4gKiBldmVuIHdoZW4gdGhlIGZpcnN0IGRheSBvZiB3ZWVrIGlzIHNldCB0byBhIGRheSBhZnRlciB0aGUgY3VycmVudCBkYXRlLlxuICpcbiAqIEBwYXJhbSBjdXJyZW50RGF0ZSAtIFRoZSByZWZlcmVuY2UgZGF0ZSBmb3IgY2FsY3VsYXRpbmcgdGhlIHdlZWtcbiAqIEBwYXJhbSBmaXJzdERheU9mV2VlayAtIFRoZSBkYXkgbnVtYmVyICgwLTYpIHJlcHJlc2VudGluZyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrICgwID0gU3VuZGF5LCAxID0gTW9uZGF5LCBldGMuKVxuICogQHJldHVybnMgQW4gYXJyYXkgb2YgNyBkYXlqcyBvYmplY3RzIHJlcHJlc2VudGluZyB0aGUgd2VlayBkYXlzLCBzdGFydGluZyBmcm9tIGZpcnN0RGF5T2ZXZWVrXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEdldCB3ZWVrIHN0YXJ0aW5nIGZyb20gTW9uZGF5IGZvciBjdXJyZW50IGRhdGVcbiAqIGNvbnN0IHdlZWtEYXlzID0gZ2V0V2Vla0RheXMoZGF5anMoJzIwMjUtMTAtMTMnKSwgMSlcbiAqIC8vIFJldHVybnM6IFtNb24gT2N0IDEzLCBUdWUgT2N0IDE0LCAuLi4sIFN1biBPY3QgMTldXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEdldCB3ZWVrIHN0YXJ0aW5nIGZyb20gV2VkbmVzZGF5IHdoZW4gY3VycmVudCBkYXRlIGlzIE1vbmRheVxuICogY29uc3Qgd2Vla0RheXMgPSBnZXRXZWVrRGF5cyhkYXlqcygnMjAyNS0xMC0xMycpLCAzKVxuICogLy8gUmV0dXJuczogW1dlZCBPY3QgOCwgVGh1IE9jdCA5LCAuLi4sIFR1ZSBPY3QgMTRdIChpbmNsdWRlcyBNb25kYXkgT2N0IDEzKVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0V2Vla0RheXMoXG5cdGN1cnJlbnREYXRlOiBEYXlqcyxcblx0Zmlyc3REYXlPZldlZWs6IG51bWJlclxuKTogRGF5anNbXSB7XG5cdGNvbnN0IHN0YXJ0T2ZXZWVrRnJvbUN1cnJlbnREYXRlID0gY3VycmVudERhdGVcblx0XHQuc3RhcnRPZignd2VlaycpXG5cdFx0LmRheShmaXJzdERheU9mV2VlaylcblxuXHRjb25zdCBhZGp1c3RlZFN0YXJ0T2ZXZWVrID0gY3VycmVudERhdGUuaXNCZWZvcmUoc3RhcnRPZldlZWtGcm9tQ3VycmVudERhdGUpXG5cdFx0PyBzdGFydE9mV2Vla0Zyb21DdXJyZW50RGF0ZS5zdWJ0cmFjdCgxLCAnd2VlaycpXG5cdFx0OiBzdGFydE9mV2Vla0Zyb21DdXJyZW50RGF0ZVxuXG5cdHJldHVybiBBcnJheS5mcm9tKHsgbGVuZ3RoOiA3IH0sIChfLCBkYXlJbmRleCkgPT5cblx0XHRhZGp1c3RlZFN0YXJ0T2ZXZWVrLmFkZChkYXlJbmRleCwgJ2RheScpXG5cdClcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgNiB3ZWVrcyBvZiBkYXlzIGZvciBhIG1vbnRoIGNhbGVuZGFyIHZpZXcuXG4gKiBBbHdheXMgcmV0dXJucyA0MiBkYXlzICg2IHdlZWtzIMOXIDcgZGF5cykuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRNb250aFdlZWtzKFxuXHRtb250aERhdGU6IERheWpzLFxuXHRmaXJzdERheU9mV2VlazogbnVtYmVyXG4pOiBEYXlqc1tdW10ge1xuXHRjb25zdCBmaXJzdFdlZWsgPSBnZXRXZWVrRGF5cyhtb250aERhdGUuc3RhcnRPZignbW9udGgnKSwgZmlyc3REYXlPZldlZWspXG5cblx0cmV0dXJuIEFycmF5LmZyb20oeyBsZW5ndGg6IDYgfSwgKF8sIHdlZWtJbmRleCkgPT4ge1xuXHRcdGNvbnN0IHdlZWtTdGFydCA9IGZpcnN0V2Vla1swXS5hZGQod2Vla0luZGV4LCAnd2VlaycpXG5cdFx0cmV0dXJuIGdldFdlZWtEYXlzKHdlZWtTdGFydCwgZmlyc3REYXlPZldlZWspXG5cdH0pXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRNb250aERheXMobW9udGhEYXRlOiBEYXlqcyk6IERheWpzW10ge1xuXHRjb25zdCBkYXlzSW5Nb250aCA9IG1vbnRoRGF0ZS5kYXlzSW5Nb250aCgpXG5cdGNvbnN0IHN0YXJ0T2ZNb250aCA9IG1vbnRoRGF0ZS5zdGFydE9mKCdtb250aCcpXG5cdHJldHVybiBBcnJheS5mcm9tKHsgbGVuZ3RoOiBkYXlzSW5Nb250aCB9LCAoXywgaSkgPT5cblx0XHRzdGFydE9mTW9udGguYWRkKGksICdkYXknKVxuXHQpXG59XG5cbmludGVyZmFjZSBHZXREYXlIb3Vyc09wdGlvbnMge1xuXHRyZWZlcmVuY2VEYXRlPzogRGF5anNcblx0bGVuZ3RoPzogbnVtYmVyXG59XG5cbi8qKlxuICogR2VuZXJhdGVzIGFuIGFycmF5IG9mIDI0IGRheWpzIG9iamVjdHMgcmVwcmVzZW50aW5nIGhvdXJseSBzbG90cyBmb3IgYSBkYXkuXG4gKiBVc2VzIC5ob3VyKGkpIHNvIGVhY2ggcm93IG1hcHMgdG8gXCJ0aGUgaG91ciBsYWJlbGVkIGlcIiDigJQga2VlcGluZyBncmlkIHJvd3NcbiAqIGFsaWduZWQgYWNyb3NzIGNvbHVtbnMgaW4gd2VlayB2aWV3cy4gT24gRFNUIHNwcmluZy1mb3J3YXJkLCAuaG91cigyKSByZXR1cm5zXG4gKiAzIEFNICh0aGUgbm9uLWV4aXN0ZW50IGhvdXIgaXMgY29sbGFwc2VkKSwgYnV0IHRoZSBncmlkIGtleSBmaXggKGRheUluZGV4KVxuICogYW5kIHBlci1kYXkgZ2VuZXJhdGlvbiBpbiB2aWV3cyBoYW5kbGUgdGhpcyBjb3JyZWN0bHkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREYXlIb3Vycyh7XG5cdHJlZmVyZW5jZURhdGUgPSBkYXlqcygpLFxuXHRsZW5ndGggPSAyNCxcbn06IEdldERheUhvdXJzT3B0aW9ucyA9IHt9KTogRGF5anNbXSB7XG5cdGNvbnN0IHN0YXJ0T2ZEYXkgPSByZWZlcmVuY2VEYXRlLnN0YXJ0T2YoJ2RheScpXG5cdHJldHVybiBBcnJheS5mcm9tKHsgbGVuZ3RoIH0sIChfLCBpKSA9PlxuXHRcdHN0YXJ0T2ZEYXkuaG91cihpKS5taW51dGUoMCkuc2Vjb25kKDApLm1pbGxpc2Vjb25kKDApXG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBXZWVrRGF5cyB9IGZyb20gJ0AvY29tcG9uZW50cydcblxuZXhwb3J0IGNvbnN0IEdBUF9CRVRXRUVOX0VMRU1FTlRTID0gMSAvLyBweCAoZ2FwLTEpXG5leHBvcnQgY29uc3QgREFZX05VTUJFUl9IRUlHSFQgPSAyNCAvLyBweCAoaC02KVxuZXhwb3J0IGNvbnN0IEVWRU5UX0JBUl9IRUlHSFQgPSAyNCAvLyBweCAoaC1bMjRweF0pXG5leHBvcnQgY29uc3QgREFZX01BWF9FVkVOVFNfREVGQVVMVCA9IDQgLy8gRGVmYXVsdCBtYXggZXZlbnRzIHBlciBkYXlcbmV4cG9ydCBjb25zdCBESVNBQkxFRF9DRUxMX0NMQVNTTkFNRSA9XG5cdCdiZy1zZWNvbmRhcnkgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHBvaW50ZXItZXZlbnRzLW5vbmUnXG5cbmV4cG9ydCBjb25zdCBXRUVLX0RBWVNfTlVNQkVSX01BUDogUmVjb3JkPFdlZWtEYXlzLCBudW1iZXI+ID0ge1xuXHRzdW5kYXk6IDAsXG5cdG1vbmRheTogMSxcblx0dHVlc2RheTogMixcblx0d2VkbmVzZGF5OiAzLFxuXHR0aHVyc2RheTogNCxcblx0ZnJpZGF5OiA1LFxuXHRzYXR1cmRheTogNixcbn1cblxuZXhwb3J0IGNvbnN0IERBWV9OVU1CRVJfVE9fV0VFS19EQVlTOiBSZWNvcmQ8bnVtYmVyLCBXZWVrRGF5cz4gPSB7XG5cdDA6ICdzdW5kYXknLFxuXHQxOiAnbW9uZGF5Jyxcblx0MjogJ3R1ZXNkYXknLFxuXHQzOiAnd2VkbmVzZGF5Jyxcblx0NDogJ3RodXJzZGF5Jyxcblx0NTogJ2ZyaWRheScsXG5cdDY6ICdzYXR1cmRheScsXG59XG4iLAogICAgImltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9idXR0b24nXG5pbXBvcnQge1xuXHREaWFsb2csXG5cdERpYWxvZ0NvbnRlbnQsXG5cdERpYWxvZ0Rlc2NyaXB0aW9uLFxuXHREaWFsb2dGb290ZXIsXG5cdERpYWxvZ0hlYWRlcixcblx0RGlhbG9nVGl0bGUsXG59IGZyb20gJ0AvY29tcG9uZW50cy91aS9kaWFsb2cnXG5pbXBvcnQgdHlwZSB7IFJlY3VycmVuY2VFZGl0U2NvcGUgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvdHlwZXMnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5cbmludGVyZmFjZSBSZWN1cnJlbmNlRWRpdERpYWxvZ1Byb3BzIHtcblx0aXNPcGVuOiBib29sZWFuXG5cdG9uQ2xvc2U6ICgpID0+IHZvaWRcblx0b25Db25maXJtOiAoc2NvcGU6IFJlY3VycmVuY2VFZGl0U2NvcGUpID0+IHZvaWRcblx0b3BlcmF0aW9uVHlwZTogJ2VkaXQnIHwgJ2RlbGV0ZSdcblx0ZXZlbnRUaXRsZTogc3RyaW5nXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBSZWN1cnJlbmNlRWRpdERpYWxvZyh7XG5cdGlzT3Blbixcblx0b25DbG9zZSxcblx0b25Db25maXJtLFxuXHRvcGVyYXRpb25UeXBlLFxuXHRldmVudFRpdGxlLFxufTogUmVjdXJyZW5jZUVkaXREaWFsb2dQcm9wcykge1xuXHRjb25zdCB7IHQgfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KChjb250ZXh0KSA9PiAoeyB0OiBjb250ZXh0LnQgfSkpXG5cblx0Y29uc3QgaGFuZGxlU2NvcGVTZWxlY3QgPSAoc2NvcGU6IFJlY3VycmVuY2VFZGl0U2NvcGUpID0+IHtcblx0XHRvbkNvbmZpcm0oc2NvcGUpXG5cdFx0b25DbG9zZSgpXG5cdH1cblxuXHRjb25zdCBpc0VkaXQgPSBvcGVyYXRpb25UeXBlID09PSAnZWRpdCdcblxuXHRyZXR1cm4gKFxuXHRcdDxEaWFsb2cgb25PcGVuQ2hhbmdlPXtvbkNsb3NlfSBvcGVuPXtpc09wZW59PlxuXHRcdFx0PERpYWxvZ0NvbnRlbnQgY2xhc3NOYW1lPVwibWF4LXctbWRcIj5cblx0XHRcdFx0PERpYWxvZ0hlYWRlcj5cblx0XHRcdFx0XHQ8RGlhbG9nVGl0bGU+XG5cdFx0XHRcdFx0XHR7aXNFZGl0ID8gdCgnZWRpdFJlY3VycmluZ0V2ZW50JykgOiB0KCdkZWxldGVSZWN1cnJpbmdFdmVudCcpfVxuXHRcdFx0XHRcdDwvRGlhbG9nVGl0bGU+XG5cdFx0XHRcdFx0PERpYWxvZ0Rlc2NyaXB0aW9uPlxuXHRcdFx0XHRcdFx0XCJ7ZXZlbnRUaXRsZX1cInsnICd9XG5cdFx0XHRcdFx0XHR7aXNFZGl0XG5cdFx0XHRcdFx0XHRcdD8gdCgnZWRpdFJlY3VycmluZ0V2ZW50UXVlc3Rpb24nKVxuXHRcdFx0XHRcdFx0XHQ6IHQoJ2RlbGV0ZVJlY3VycmluZ0V2ZW50UXVlc3Rpb24nKX1cblx0XHRcdFx0XHQ8L0RpYWxvZ0Rlc2NyaXB0aW9uPlxuXHRcdFx0XHQ8L0RpYWxvZ0hlYWRlcj5cblxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInNwYWNlLXktM1wiPlxuXHRcdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cInctZnVsbCBqdXN0aWZ5LXN0YXJ0IGgtYXV0byBwLTRcIlxuXHRcdFx0XHRcdFx0b25DbGljaz17KCkgPT4gaGFuZGxlU2NvcGVTZWxlY3QoJ3RoaXMnKX1cblx0XHRcdFx0XHRcdHZhcmlhbnQ9XCJvdXRsaW5lXCJcblx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQtbGVmdFwiPlxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZvbnQtbWVkaXVtXCI+e3QoJ3RoaXNFdmVudCcpfTwvZGl2PlxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCI+XG5cdFx0XHRcdFx0XHRcdFx0e2lzRWRpdCA/IHQoJ29ubHlDaGFuZ2VUaGlzJykgOiB0KCdvbmx5RGVsZXRlVGhpcycpfVxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdDwvQnV0dG9uPlxuXG5cdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwidy1mdWxsIGp1c3RpZnktc3RhcnQgaC1hdXRvIHAtNFwiXG5cdFx0XHRcdFx0XHRvbkNsaWNrPXsoKSA9PiBoYW5kbGVTY29wZVNlbGVjdCgnZm9sbG93aW5nJyl9XG5cdFx0XHRcdFx0XHR2YXJpYW50PVwib3V0bGluZVwiXG5cdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWxlZnRcIj5cblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmb250LW1lZGl1bVwiPnt0KCd0aGlzQW5kRm9sbG93aW5nRXZlbnRzJyl9PC9kaXY+XG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LW11dGVkLWZvcmVncm91bmRcIj5cblx0XHRcdFx0XHRcdFx0XHR7aXNFZGl0ID8gdCgnY2hhbmdlVGhpc0FuZEZ1dHVyZScpIDogdCgnZGVsZXRlVGhpc0FuZEZ1dHVyZScpfVxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdDwvQnV0dG9uPlxuXG5cdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwidy1mdWxsIGp1c3RpZnktc3RhcnQgaC1hdXRvIHAtNFwiXG5cdFx0XHRcdFx0XHRvbkNsaWNrPXsoKSA9PiBoYW5kbGVTY29wZVNlbGVjdCgnYWxsJyl9XG5cdFx0XHRcdFx0XHR2YXJpYW50PVwib3V0bGluZVwiXG5cdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWxlZnRcIj5cblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmb250LW1lZGl1bVwiPnt0KCdhbGxFdmVudHMnKX08L2Rpdj5cblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtbXV0ZWQtZm9yZWdyb3VuZFwiPlxuXHRcdFx0XHRcdFx0XHRcdHtpc0VkaXQgPyB0KCdjaGFuZ2VFbnRpcmVTZXJpZXMnKSA6IHQoJ2RlbGV0ZUVudGlyZVNlcmllcycpfVxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0XHQ8L2Rpdj5cblxuXHRcdFx0XHQ8RGlhbG9nRm9vdGVyPlxuXHRcdFx0XHRcdDxCdXR0b24gb25DbGljaz17b25DbG9zZX0gdmFyaWFudD1cIm91dGxpbmVcIj5cblx0XHRcdFx0XHRcdHt0KCdjYW5jZWwnKX1cblx0XHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdFx0PC9EaWFsb2dGb290ZXI+XG5cdFx0XHQ8L0RpYWxvZ0NvbnRlbnQ+XG5cdFx0PC9EaWFsb2c+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBEcmFnRW5kRXZlbnQgfSBmcm9tICdAZG5kLWtpdC9jb3JlJ1xuaW1wb3J0IGRheWpzLCB7IHR5cGUgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJy4uL3R5cGVzJ1xuXG5pbnRlcmZhY2UgRHJvcENlbGxEYXRhIHtcblx0dHlwZT86IHN0cmluZ1xuXHRkYXRlPzogc3RyaW5nXG5cdGhvdXI/OiBudW1iZXJcblx0bWludXRlPzogbnVtYmVyXG5cdHJlc291cmNlSWQ/OiBzdHJpbmdcblx0YWxsRGF5PzogYm9vbGVhblxufVxuXG5leHBvcnQgY29uc3QgZ2V0VXBkYXRlZEV2ZW50ID0gKFxuXHRldmVudDogRHJhZ0VuZEV2ZW50LFxuXHRhY3RpdmVFdmVudDogQ2FsZW5kYXJFdmVudCB8IG51bGxcbikgPT4ge1xuXHRjb25zdCB7IGFjdGl2ZSwgb3ZlciB9ID0gZXZlbnRcblxuXHRpZiAoIWFjdGl2ZSB8fCAhb3ZlciB8fCAhYWN0aXZlRXZlbnQpIHtcblx0XHRyZXR1cm4gbnVsbFxuXHR9XG5cblx0Y29uc3QgZGF0YSA9IChvdmVyLmRhdGEuY3VycmVudCB8fCB7fSkgYXMgRHJvcENlbGxEYXRhXG5cdGNvbnN0IGlzVGltZUNlbGwgPSBkYXRhLnR5cGUgPT09ICd0aW1lLWNlbGwnXG5cdGNvbnN0IHsgcmVzb3VyY2VJZCwgYWxsRGF5IH0gPSBkYXRhXG5cdGxldCBuZXdTdGFydDogRGF5anNcblxuXHRpZiAoaXNUaW1lQ2VsbCkge1xuXHRcdGNvbnN0IHsgZGF0ZSwgaG91ciA9IDAsIG1pbnV0ZSA9IDAgfSA9IGRhdGFcblxuXHRcdC8vIENyZWF0ZSBuZXcgc3RhcnQgdGltZSBiYXNlZCBvbiB0aGUgZHJvcCB0YXJnZXRcblx0XHRuZXdTdGFydCA9IGRheWpzKGRhdGUpLmhvdXIoaG91cikubWludXRlKG1pbnV0ZSlcblx0fSBlbHNlIHtcblx0XHRjb25zdCB7IGRhdGUgfSA9IGRhdGFcblxuXHRcdG5ld1N0YXJ0ID0gZGF5anMoZGF0ZSlcblx0fVxuXG5cdGNvbnN0IGV2ZW50RHVyYXRpb24gPSBhY3RpdmVFdmVudC5lbmQuZGlmZihhY3RpdmVFdmVudC5zdGFydCwgJ3NlY29uZCcpXG5cblx0Ly8gQ3JlYXRlIG5ldyBlbmQgdGltZSBieSBhZGRpbmcgdGhlIG9yaWdpbmFsIGR1cmF0aW9uXG5cdGxldCBuZXdFbmQgPSBuZXdTdGFydC5hZGQoZXZlbnREdXJhdGlvbiwgJ3NlY29uZCcpXG5cblx0aWYgKG5ld0VuZC5pc1NhbWUobmV3RW5kLnN0YXJ0T2YoJ2RheScpKSkge1xuXHRcdC8vIElmIHRoZSBuZXcgZW5kIHRpbWUgaXMgYXQgbWlkbmlnaHQsIHNldCBpdCB0byAyNCBob3VycyBvZiBwYXJ0aWFsIGRheVxuXHRcdG5ld0VuZCA9IG5ld0VuZC5zdWJ0cmFjdCgxLCAnZGF5JykuZW5kT2YoJ2RheScpXG5cdH1cblxuXHQvLyBVcGRhdGUgdGhlIGV2ZW50IHdpdGggbmV3IHRpbWVzIGFuZCByZXNvdXJjZSBpZiBjaGFuZ2VkXG5cdGNvbnN0IHVwZGF0ZXMgPSB7XG5cdFx0c3RhcnQ6IG5ld1N0YXJ0LFxuXHRcdGVuZDogbmV3RW5kLFxuXHRcdHJlc291cmNlSWQsXG5cdFx0YWxsRGF5OiBpc1RpbWVDZWxsID8gZmFsc2UgOiAoYWxsRGF5ID8/IGFjdGl2ZUV2ZW50LmFsbERheSksXG5cdH1cblx0cmV0dXJuIHsgYWN0aXZlRXZlbnQsIHVwZGF0ZXMgfVxufVxuIiwKICAgICJpbXBvcnQgeyBEcmFnT3ZlcmxheSB9IGZyb20gJ0BkbmQta2l0L2NvcmUnXG5pbXBvcnQgeyBzbmFwQ2VudGVyVG9DdXJzb3IgfSBmcm9tICdAZG5kLWtpdC9tb2RpZmllcnMnXG5pbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZUltcGVyYXRpdmVIYW5kbGUsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnLi4vdHlwZXMnXG5cbmludGVyZmFjZSBFdmVudERyYWdPdmVybGF5UHJvcHMge1xuXHRyZWY6IFJlYWN0LlJlZjx7IHNldEFjdGl2ZUV2ZW50OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWQgfT5cbn1cblxuZXhwb3J0IGNvbnN0IEV2ZW50RHJhZ092ZXJsYXk6IFJlYWN0LkZDPEV2ZW50RHJhZ092ZXJsYXlQcm9wcz4gPSAoeyByZWYgfSkgPT4ge1xuXHRjb25zdCBbYWN0aXZlRXZlbnQsIHNldEFjdGl2ZUV2ZW50XSA9IHVzZVN0YXRlPENhbGVuZGFyRXZlbnQgfCBudWxsPihudWxsKVxuXG5cdHVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCAoKSA9PiAoe1xuXHRcdHNldEFjdGl2ZUV2ZW50LFxuXHR9KSlcblxuXHRyZXR1cm4gKFxuXHRcdDxEcmFnT3ZlcmxheSBtb2RpZmllcnM9e1tzbmFwQ2VudGVyVG9DdXJzb3JdfT5cblx0XHRcdHthY3RpdmVFdmVudCAmJiAoXG5cdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0J2N1cnNvci1ncmFiIHRydW5jYXRlIHJvdW5kZWQgYmctYW1iZXItMjAwIHAtMiB0ZXh0LVsxMHB4XSBzaGFkb3ctbGcgc206dGV4dC14cyB3LTIwJyxcblx0XHRcdFx0XHRcdGFjdGl2ZUV2ZW50LmJhY2tncm91bmRDb2xvciB8fCAnYmctYmx1ZS01MDAnLFxuXHRcdFx0XHRcdFx0YWN0aXZlRXZlbnQuY29sb3IgfHwgJ3RleHQtd2hpdGUnXG5cdFx0XHRcdFx0KX1cblx0XHRcdFx0PlxuXHRcdFx0XHRcdHthY3RpdmVFdmVudD8udGl0bGV9XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0KX1cblx0XHQ8L0RyYWdPdmVybGF5PlxuXHQpXG59XG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VNZW1vLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2J1dHRvbidcbmltcG9ydCB7IENoZWNrYm94IH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2NoZWNrYm94J1xuaW1wb3J0IHsgRGF0ZVBpY2tlciB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9kYXRlLXBpY2tlcidcbmltcG9ydCB7IERpYWxvZ0Zvb3RlciB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9kaWFsb2cnXG5pbXBvcnQgeyBJbnB1dCB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9pbnB1dCdcbmltcG9ydCB7IExhYmVsIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2xhYmVsJ1xuaW1wb3J0IHsgU2Nyb2xsQXJlYSB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9zY3JvbGwtYXJlYSdcbmltcG9ydCB7IFRpbWVQaWNrZXIgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvdGltZS1waWNrZXInXG5pbXBvcnQgeyBpc0J1c2luZXNzRGF5IH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci91dGlscy9idXNpbmVzcy1ob3VycydcbmltcG9ydCB7XG5cdGJ1aWxkRGF0ZVRpbWUsXG5cdGJ1aWxkRW5kRGF0ZVRpbWUsXG5cdGdldFRpbWVDb25zdHJhaW50cyxcbn0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci91dGlscy9ldmVudC1mb3JtLXV0aWxzJ1xuaW1wb3J0IHsgUmVjdXJyZW5jZUVkaXREaWFsb2cgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvY29tcG9uZW50cy9yZWN1cnJlbmNlLWVkaXQtZGlhbG9nJ1xuaW1wb3J0IHsgUmVjdXJyZW5jZUVkaXRvciB9IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS9jb21wb25lbnRzL3JlY3VycmVuY2UtZWRpdG9yL3JlY3VycmVuY2UtZWRpdG9yJ1xuaW1wb3J0IHsgdXNlUmVjdXJyaW5nRXZlbnRBY3Rpb25zIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL2hvb2tzL3VzZVJlY3VycmluZ0V2ZW50QWN0aW9ucydcbmltcG9ydCB0eXBlIHsgUlJ1bGVPcHRpb25zIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL3R5cGVzJ1xuaW1wb3J0IHsgaXNSZWN1cnJpbmdFdmVudCB9IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS91dGlscy9yZWN1cnJlbmNlLWhhbmRsZXInXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5jb25zdCBDT0xPUl9PUFRJT05TID0gW1xuXHR7XG5cdFx0dmFsdWU6IGBiZy1ibHVlLTEwMCB0ZXh0LWJsdWUtODAwYCxcblx0XHRsYWJlbDogJ0JsdWUnLFxuXHR9LFxuXHR7XG5cdFx0dmFsdWU6IGBiZy1ncmVlbi0xMDAgdGV4dC1ncmVlbi04MDBgLFxuXHRcdGxhYmVsOiAnR3JlZW4nLFxuXHR9LFxuXHR7XG5cdFx0dmFsdWU6IGBiZy1wdXJwbGUtMTAwIHRleHQtcHVycGxlLTgwMGAsXG5cdFx0bGFiZWw6ICdQdXJwbGUnLFxuXHR9LFxuXHR7XG5cdFx0dmFsdWU6IGBiZy1yZWQtMTAwIHRleHQtcmVkLTgwMGAsXG5cdFx0bGFiZWw6ICdSZWQnLFxuXHR9LFxuXHR7XG5cdFx0dmFsdWU6IGBiZy15ZWxsb3ctMTAwIHRleHQteWVsbG93LTgwMGAsXG5cdFx0bGFiZWw6ICdZZWxsb3cnLFxuXHR9LFxuXHR7XG5cdFx0dmFsdWU6IGBiZy1waW5rLTEwMCB0ZXh0LXBpbmstODAwYCxcblx0XHRsYWJlbDogJ1BpbmsnLFxuXHR9LFxuXHR7XG5cdFx0dmFsdWU6IGBiZy1pbmRpZ28tMTAwIHRleHQtaW5kaWdvLTgwMGAsXG5cdFx0bGFiZWw6ICdJbmRpZ28nLFxuXHR9LFxuXHR7XG5cdFx0dmFsdWU6IGBiZy1hbWJlci0xMDAgdGV4dC1hbWJlci04MDBgLFxuXHRcdGxhYmVsOiAnQW1iZXInLFxuXHR9LFxuXHR7XG5cdFx0dmFsdWU6IGBiZy1lbWVyYWxkLTEwMCB0ZXh0LWVtZXJhbGQtODAwYCxcblx0XHRsYWJlbDogJ0VtZXJhbGQnLFxuXHR9LFxuXHR7XG5cdFx0dmFsdWU6IGBiZy1za3ktMTAwIHRleHQtc2t5LTgwMGAsXG5cdFx0bGFiZWw6ICdTa3knLFxuXHR9LFxuXHR7XG5cdFx0dmFsdWU6IGBiZy12aW9sZXQtMTAwIHRleHQtdmlvbGV0LTgwMGAsXG5cdFx0bGFiZWw6ICdWaW9sZXQnLFxuXHR9LFxuXHR7XG5cdFx0dmFsdWU6IGBiZy1yb3NlLTEwMCB0ZXh0LXJvc2UtODAwYCxcblx0XHRsYWJlbDogJ1Jvc2UnLFxuXHR9LFxuXHR7XG5cdFx0dmFsdWU6IGBiZy10ZWFsLTEwMCB0ZXh0LXRlYWwtODAwYCxcblx0XHRsYWJlbDogJ1RlYWwnLFxuXHR9LFxuXHR7XG5cdFx0dmFsdWU6IGBiZy1vcmFuZ2UtMTAwIHRleHQtb3JhbmdlLTgwMGAsXG5cdFx0bGFiZWw6ICdPcmFuZ2UnLFxuXHR9LFxuXVxuXG5leHBvcnQgaW50ZXJmYWNlIEV2ZW50Rm9ybVByb3BzIHtcblx0b3Blbj86IGJvb2xlYW5cblx0c2VsZWN0ZWRFdmVudD86IENhbGVuZGFyRXZlbnQgfCBudWxsXG5cdG9uQWRkPzogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG5cdG9uVXBkYXRlPzogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG5cdG9uRGVsZXRlPzogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG5cdG9uQ2xvc2U6ICgpID0+IHZvaWRcbn1cblxuZXhwb3J0IGNvbnN0IEV2ZW50Rm9ybTogUmVhY3QuRkM8RXZlbnRGb3JtUHJvcHM+ID0gKHtcblx0c2VsZWN0ZWRFdmVudCxcblx0b25DbG9zZSxcblx0b25VcGRhdGUsXG5cdG9uRGVsZXRlLFxuXHRvbkFkZCxcbn0pID0+IHtcblx0Y29uc3Qge1xuXHRcdGRpYWxvZ1N0YXRlLFxuXHRcdG9wZW5FZGl0RGlhbG9nLFxuXHRcdG9wZW5EZWxldGVEaWFsb2csXG5cdFx0Y2xvc2VEaWFsb2csXG5cdFx0aGFuZGxlQ29uZmlybSxcblx0fSA9IHVzZVJlY3VycmluZ0V2ZW50QWN0aW9ucyhvbkNsb3NlKVxuXG5cdGNvbnN0IHtcblx0XHRmaW5kUGFyZW50UmVjdXJyaW5nRXZlbnQsXG5cdFx0dCxcblx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdHRpbWVGb3JtYXQsXG5cdFx0Z2V0UmVzb3VyY2VCeUlkLFxuXHR9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKGNvbnRleHQpID0+ICh7XG5cdFx0ZmluZFBhcmVudFJlY3VycmluZ0V2ZW50OiBjb250ZXh0LmZpbmRQYXJlbnRSZWN1cnJpbmdFdmVudCxcblx0XHR0OiBjb250ZXh0LnQsXG5cdFx0YnVzaW5lc3NIb3VyczogY29udGV4dC5idXNpbmVzc0hvdXJzLFxuXHRcdHRpbWVGb3JtYXQ6IGNvbnRleHQudGltZUZvcm1hdCxcblx0XHRnZXRSZXNvdXJjZUJ5SWQ6IGNvbnRleHQuZ2V0UmVzb3VyY2VCeUlkLFxuXHR9KSlcblxuXHRjb25zdCBzdGFydCA9IHNlbGVjdGVkRXZlbnQ/LnN0YXJ0ID8/IGRheWpzKClcblx0Y29uc3QgZW5kID0gc2VsZWN0ZWRFdmVudD8uZW5kID8/IGRheWpzKCkuYWRkKDEsICdob3VyJylcblxuXHQvLyBGaW5kIHBhcmVudCBldmVudCBpZiB0aGlzIGlzIGEgcmVjdXJyaW5nIGV2ZW50IGluc3RhbmNlXG5cdGNvbnN0IHBhcmVudEV2ZW50ID0gc2VsZWN0ZWRFdmVudFxuXHRcdD8gZmluZFBhcmVudFJlY3VycmluZ0V2ZW50KHNlbGVjdGVkRXZlbnQpXG5cdFx0OiBudWxsXG5cblx0Ly8gRm9ybSBzdGF0ZVxuXHRjb25zdCBbc3RhcnREYXRlLCBzZXRTdGFydERhdGVdID0gdXNlU3RhdGUoc3RhcnQudG9EYXRlKCkpXG5cdGNvbnN0IFtlbmREYXRlLCBzZXRFbmREYXRlXSA9IHVzZVN0YXRlKGVuZC50b0RhdGUoKSlcblx0Y29uc3QgW2lzQWxsRGF5LCBzZXRJc0FsbERheV0gPSB1c2VTdGF0ZShzZWxlY3RlZEV2ZW50Py5hbGxEYXkgfHwgZmFsc2UpXG5cdGNvbnN0IFtzZWxlY3RlZENvbG9yLCBzZXRTZWxlY3RlZENvbG9yXSA9IHVzZVN0YXRlKFxuXHRcdHNlbGVjdGVkRXZlbnQ/LmNvbG9yIHx8IENPTE9SX09QVElPTlNbMF0udmFsdWVcblx0KVxuXG5cdC8vIFRpbWUgc3RhdGVcblx0Y29uc3QgW3N0YXJ0VGltZSwgc2V0U3RhcnRUaW1lXSA9IHVzZVN0YXRlKHN0YXJ0LmZvcm1hdCgnSEg6bW0nKSlcblx0Y29uc3QgW2VuZFRpbWUsIHNldEVuZFRpbWVdID0gdXNlU3RhdGUoZW5kLmZvcm1hdCgnSEg6bW0nKSlcblxuXHQvLyBJbml0aWFsaXplIGZvcm0gdmFsdWVzIGZyb20gc2VsZWN0ZWQgZXZlbnQgb3IgZGVmYXVsdHNcblx0Y29uc3QgW2Zvcm1WYWx1ZXMsIHNldEZvcm1WYWx1ZXNdID0gdXNlU3RhdGUoe1xuXHRcdHRpdGxlOiBzZWxlY3RlZEV2ZW50Py50aXRsZSB8fCAnJyxcblx0XHRkZXNjcmlwdGlvbjogc2VsZWN0ZWRFdmVudD8uZGVzY3JpcHRpb24gfHwgJycsXG5cdFx0bG9jYXRpb246IHNlbGVjdGVkRXZlbnQ/LmxvY2F0aW9uIHx8ICcnLFxuXHR9KVxuXG5cdC8vIFJlY3VycmVuY2Ugc3RhdGUgLSBwdWxsIFJSVUxFIGZyb20gcGFyZW50IGlmIHRoaXMgaXMgYW4gaW5zdGFuY2Vcblx0Y29uc3QgW3JydWxlLCBzZXRScnVsZV0gPSB1c2VTdGF0ZTxSUnVsZU9wdGlvbnMgfCBudWxsPigoKSA9PiB7XG5cdFx0Y29uc3QgZXZlbnRScnVsZSA9IHNlbGVjdGVkRXZlbnQ/LnJydWxlIHx8IHBhcmVudEV2ZW50Py5ycnVsZVxuXHRcdHJldHVybiBldmVudFJydWxlIHx8IG51bGxcblx0fSlcblxuXHQvLyBDcmVhdGUgd3JhcHBlciBmdW5jdGlvbnMgdG8gZml4IFR5cGVTY3JpcHQgZXJyb3JzIHdpdGggRGF0ZVBpY2tlclxuXHRjb25zdCBoYW5kbGVTdGFydERhdGVDaGFuZ2UgPSAoZGF0ZTogRGF0ZSB8IHVuZGVmaW5lZCkgPT4ge1xuXHRcdGlmICghZGF0ZSkgcmV0dXJuXG5cdFx0c2V0U3RhcnREYXRlKGRhdGUpXG5cdFx0aWYgKGRheWpzKGRhdGUpLmlzQWZ0ZXIoZGF5anMoZW5kRGF0ZSkpKSB7XG5cdFx0XHRzZXRFbmREYXRlKGRhdGUpXG5cdFx0fVxuXHR9XG5cblx0Y29uc3QgaGFuZGxlRW5kRGF0ZUNoYW5nZSA9IChkYXRlOiBEYXRlIHwgdW5kZWZpbmVkKSA9PiB7XG5cdFx0aWYgKCFkYXRlKSByZXR1cm5cblx0XHRzZXRFbmREYXRlKGRhdGUpXG5cdFx0aWYgKGRhdGUgJiYgZGF5anMoZGF0ZSkuaXNCZWZvcmUoZGF5anMoc3RhcnREYXRlKSkpIHtcblx0XHRcdHNldFN0YXJ0RGF0ZShkYXRlKVxuXHRcdH1cblx0fVxuXG5cdC8vIFRpbWUgdmFsaWRhdGlvbiBoYW5kbGVycyAtIG9ubHkgdmFsaWRhdGUgd2hlbiBkYXRlcyBhcmUgdGhlIHNhbWVcblx0Y29uc3QgaGFuZGxlU3RhcnRUaW1lQ2hhbmdlID0gKHRpbWU6IHN0cmluZykgPT4ge1xuXHRcdHNldFN0YXJ0VGltZSh0aW1lKVxuXHRcdC8vIE9ubHkgdmFsaWRhdGUgaWYgc2FtZSBkYXlcblx0XHRpZiAoZGF5anMoc3RhcnREYXRlKS5pc1NhbWUoZGF5anMoZW5kRGF0ZSksICdkYXknKSAmJiB0aW1lID4gZW5kVGltZSkge1xuXHRcdFx0c2V0RW5kVGltZSh0aW1lKVxuXHRcdH1cblx0fVxuXG5cdGNvbnN0IGhhbmRsZUVuZFRpbWVDaGFuZ2UgPSAodGltZTogc3RyaW5nKSA9PiB7XG5cdFx0c2V0RW5kVGltZSh0aW1lKVxuXHRcdC8vIE9ubHkgdmFsaWRhdGUgaWYgc2FtZSBkYXlcblx0XHRpZiAoZGF5anMoc3RhcnREYXRlKS5pc1NhbWUoZGF5anMoZW5kRGF0ZSksICdkYXknKSAmJiB0aW1lIDwgc3RhcnRUaW1lKSB7XG5cdFx0XHRzZXRTdGFydFRpbWUodGltZSlcblx0XHR9XG5cdH1cblxuXHQvLyBVcGRhdGUgZm9ybSB2YWx1ZXMgd2hlbiBpbnB1dCBjaGFuZ2VzXG5cdGNvbnN0IGhhbmRsZUlucHV0Q2hhbmdlID0gKFxuXHRcdGU6IFJlYWN0LkNoYW5nZUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQgfCBIVE1MVGV4dEFyZWFFbGVtZW50PlxuXHQpID0+IHtcblx0XHRjb25zdCB7IG5hbWUsIHZhbHVlIH0gPSBlLnRhcmdldFxuXHRcdHNldEZvcm1WYWx1ZXMoKHByZXYpID0+ICh7IC4uLnByZXYsIFtuYW1lXTogdmFsdWUgfSkpXG5cdH1cblxuXHR1c2VFZmZlY3QoKCkgPT4ge1xuXHRcdC8vIFJlc2V0IGVuZCB0aW1lIHdoZW4gYWxsIGRheSBpcyB0b2dnbGVkIHRvIG9uXG5cdFx0aWYgKGlzQWxsRGF5KSB7XG5cdFx0XHRzZXRFbmRUaW1lKCcyMzo1OScpXG5cdFx0fVxuXHR9LCBbaXNBbGxEYXldKVxuXG5cdGNvbnN0IGhhbmRsZVN1Ym1pdCA9IChlOiBSZWFjdC5Gb3JtRXZlbnQpID0+IHtcblx0XHRlLnByZXZlbnREZWZhdWx0KClcblxuXHRcdGNvbnN0IHN0YXJ0RGF0ZVRpbWUgPSBidWlsZERhdGVUaW1lKHN0YXJ0RGF0ZSwgc3RhcnRUaW1lLCBpc0FsbERheSlcblx0XHRjb25zdCBlbmREYXRlVGltZSA9IGJ1aWxkRW5kRGF0ZVRpbWUoZW5kRGF0ZSwgZW5kVGltZSwgaXNBbGxEYXkpXG5cblx0XHRjb25zdCBldmVudERhdGE6IENhbGVuZGFyRXZlbnQgPSB7XG5cdFx0XHRpZDogc2VsZWN0ZWRFdmVudD8uaWQgfHwgZGF5anMoKS5mb3JtYXQoJ1lZWVlNTURESEhtbXNzJyksXG5cdFx0XHR0aXRsZTogZm9ybVZhbHVlcy50aXRsZSxcblx0XHRcdHN0YXJ0OiBzdGFydERhdGVUaW1lLFxuXHRcdFx0ZW5kOiBlbmREYXRlVGltZSxcblx0XHRcdHJlc291cmNlSWQ6IHNlbGVjdGVkRXZlbnQ/LnJlc291cmNlSWQsXG5cdFx0XHRkZXNjcmlwdGlvbjogZm9ybVZhbHVlcy5kZXNjcmlwdGlvbixcblx0XHRcdGxvY2F0aW9uOiBmb3JtVmFsdWVzLmxvY2F0aW9uLFxuXHRcdFx0YWxsRGF5OiBpc0FsbERheSxcblx0XHRcdGNvbG9yOiBzZWxlY3RlZENvbG9yLFxuXHRcdFx0cnJ1bGU6IHJydWxlIHx8IHVuZGVmaW5lZCxcblx0XHR9XG5cblx0XHRpZiAoc2VsZWN0ZWRFdmVudD8uaWQgJiYgaXNSZWN1cnJpbmdFdmVudChzZWxlY3RlZEV2ZW50KSkge1xuXHRcdFx0b3BlbkVkaXREaWFsb2coc2VsZWN0ZWRFdmVudCwge1xuXHRcdFx0XHR0aXRsZTogZm9ybVZhbHVlcy50aXRsZSxcblx0XHRcdFx0c3RhcnQ6IHN0YXJ0RGF0ZVRpbWUsXG5cdFx0XHRcdGVuZDogZW5kRGF0ZVRpbWUsXG5cdFx0XHRcdGRlc2NyaXB0aW9uOiBmb3JtVmFsdWVzLmRlc2NyaXB0aW9uLFxuXHRcdFx0XHRsb2NhdGlvbjogZm9ybVZhbHVlcy5sb2NhdGlvbixcblx0XHRcdFx0YWxsRGF5OiBpc0FsbERheSxcblx0XHRcdFx0Y29sb3I6IHNlbGVjdGVkQ29sb3IsXG5cdFx0XHRcdHJydWxlOiBycnVsZSB8fCB1bmRlZmluZWQsXG5cdFx0XHR9KVxuXHRcdFx0cmV0dXJuXG5cdFx0fVxuXG5cdFx0aWYgKHNlbGVjdGVkRXZlbnQ/LmlkKSB7XG5cdFx0XHRvblVwZGF0ZT8uKGV2ZW50RGF0YSlcblx0XHR9IGVsc2Uge1xuXHRcdFx0b25BZGQ/LihldmVudERhdGEpXG5cdFx0fVxuXHRcdG9uQ2xvc2UoKVxuXHR9XG5cblx0Y29uc3QgaGFuZGxlRGVsZXRlID0gKCkgPT4ge1xuXHRcdGlmIChzZWxlY3RlZEV2ZW50Py5pZCkge1xuXHRcdFx0Ly8gQ2hlY2sgaWYgdGhpcyBpcyBhIHJlY3VycmluZyBldmVudFxuXHRcdFx0aWYgKGlzUmVjdXJyaW5nRXZlbnQoc2VsZWN0ZWRFdmVudCkpIHtcblx0XHRcdFx0Ly8gU2hvdyByZWN1cnJpbmcgZXZlbnQgZGVsZXRlIGRpYWxvZ1xuXHRcdFx0XHRvcGVuRGVsZXRlRGlhbG9nKHNlbGVjdGVkRXZlbnQpXG5cdFx0XHRcdHJldHVybiAvLyBEb24ndCBjbG9zZSB0aGUgZm9ybSB5ZXQsIGxldCB0aGUgZGlhbG9nIGhhbmRsZSBpdFxuXHRcdFx0fVxuXHRcdFx0b25EZWxldGU/LihzZWxlY3RlZEV2ZW50KVxuXHRcdFx0b25DbG9zZSgpXG5cdFx0fVxuXHR9XG5cblx0Y29uc3QgaGFuZGxlUlJ1bGVDaGFuZ2UgPSAobmV3UlJ1bGU6IFJSdWxlT3B0aW9ucyB8IG51bGwpID0+IHtcblx0XHRpZiAoIW5ld1JSdWxlKSB7XG5cdFx0XHRzZXRScnVsZShudWxsKVxuXHRcdFx0cmV0dXJuXG5cdFx0fVxuXHRcdGNvbnN0IHN0YXJ0RGF0ZVRpbWUgPSBidWlsZERhdGVUaW1lKHN0YXJ0RGF0ZSwgc3RhcnRUaW1lLCBpc0FsbERheSlcblx0XHRzZXRScnVsZSh7IC4uLm5ld1JSdWxlLCBkdHN0YXJ0OiBzdGFydERhdGVUaW1lLnRvRGF0ZSgpIH0pXG5cdH1cblxuXHQvLyBVc2UgcmVzb3VyY2Utc3BlY2lmaWMgYnVzaW5lc3MgaG91cnMgaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgZmFsbGJhY2sgdG8gZ2xvYmFsXG5cdGNvbnN0IGVmZmVjdGl2ZUJ1c2luZXNzSG91cnMgPSB1c2VNZW1vKCgpID0+IHtcblx0XHRjb25zdCByZXNvdXJjZUlkID0gc2VsZWN0ZWRFdmVudD8ucmVzb3VyY2VJZFxuXHRcdGlmIChyZXNvdXJjZUlkICYmIGdldFJlc291cmNlQnlJZCkge1xuXHRcdFx0Y29uc3QgcmVzb3VyY2UgPSBnZXRSZXNvdXJjZUJ5SWQocmVzb3VyY2VJZClcblx0XHRcdGlmIChyZXNvdXJjZT8uYnVzaW5lc3NIb3Vycykge1xuXHRcdFx0XHRyZXR1cm4gcmVzb3VyY2UuYnVzaW5lc3NIb3Vyc1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gYnVzaW5lc3NIb3Vyc1xuXHR9LCBbc2VsZWN0ZWRFdmVudD8ucmVzb3VyY2VJZCwgZ2V0UmVzb3VyY2VCeUlkLCBidXNpbmVzc0hvdXJzXSlcblxuXHRjb25zdCBkaXNhYmxlZERhdGVNYXRjaGVyID0gZWZmZWN0aXZlQnVzaW5lc3NIb3Vyc1xuXHRcdD8gKGRhdGU6IERhdGUpID0+ICFpc0J1c2luZXNzRGF5KGRheWpzKGRhdGUpLCBlZmZlY3RpdmVCdXNpbmVzc0hvdXJzKVxuXHRcdDogdW5kZWZpbmVkXG5cblx0Y29uc3Qgc3RhcnRDb25zdHJhaW50cyA9IGdldFRpbWVDb25zdHJhaW50cyhzdGFydERhdGUsIGVmZmVjdGl2ZUJ1c2luZXNzSG91cnMpXG5cdGNvbnN0IGVuZENvbnN0cmFpbnRzID0gZ2V0VGltZUNvbnN0cmFpbnRzKGVuZERhdGUsIGVmZmVjdGl2ZUJ1c2luZXNzSG91cnMpXG5cblx0cmV0dXJuIChcblx0XHQ8PlxuXHRcdFx0PGZvcm0gY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCBmbGV4LTEgbWluLWgtMFwiIG9uU3VibWl0PXtoYW5kbGVTdWJtaXR9PlxuXHRcdFx0XHQ8U2Nyb2xsQXJlYSBjbGFzc05hbWU9XCJmbGV4LTEgbWluLWgtMFwiPlxuXHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBnYXAtMyBzbTpnYXAtNCBwLTFcIj5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBnYXAtMlwiPlxuXHRcdFx0XHRcdFx0XHQ8TGFiZWwgY2xhc3NOYW1lPVwidGV4dC14cyBzbTp0ZXh0LXNtXCIgaHRtbEZvcj1cInRpdGxlXCI+XG5cdFx0XHRcdFx0XHRcdFx0e3QoJ3RpdGxlJyl9XG5cdFx0XHRcdFx0XHRcdDwvTGFiZWw+XG5cdFx0XHRcdFx0XHRcdDxJbnB1dFxuXHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImgtOCB0ZXh0LXNtIHNtOmgtOVwiXG5cdFx0XHRcdFx0XHRcdFx0aWQ9XCJ0aXRsZVwiXG5cdFx0XHRcdFx0XHRcdFx0bmFtZT1cInRpdGxlXCJcblx0XHRcdFx0XHRcdFx0XHRvbkNoYW5nZT17aGFuZGxlSW5wdXRDaGFuZ2V9XG5cdFx0XHRcdFx0XHRcdFx0cGxhY2Vob2xkZXI9e3QoJ2V2ZW50VGl0bGVQbGFjZWhvbGRlcicpfVxuXHRcdFx0XHRcdFx0XHRcdHJlcXVpcmVkXG5cdFx0XHRcdFx0XHRcdFx0dmFsdWU9e2Zvcm1WYWx1ZXMudGl0bGV9XG5cdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJncmlkIGdhcC0xIHNtOmdhcC0yXCI+XG5cdFx0XHRcdFx0XHRcdDxMYWJlbCBjbGFzc05hbWU9XCJ0ZXh0LXhzIHNtOnRleHQtc21cIiBodG1sRm9yPVwiZGVzY3JpcHRpb25cIj5cblx0XHRcdFx0XHRcdFx0XHR7dCgnZGVzY3JpcHRpb24nKX1cblx0XHRcdFx0XHRcdFx0PC9MYWJlbD5cblx0XHRcdFx0XHRcdFx0PElucHV0XG5cdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiaC04IHRleHQtc20gc206aC05XCJcblx0XHRcdFx0XHRcdFx0XHRpZD1cImRlc2NyaXB0aW9uXCJcblx0XHRcdFx0XHRcdFx0XHRuYW1lPVwiZGVzY3JpcHRpb25cIlxuXHRcdFx0XHRcdFx0XHRcdG9uQ2hhbmdlPXtoYW5kbGVJbnB1dENoYW5nZX1cblx0XHRcdFx0XHRcdFx0XHRwbGFjZWhvbGRlcj17dCgnZXZlbnREZXNjcmlwdGlvblBsYWNlaG9sZGVyJyl9XG5cdFx0XHRcdFx0XHRcdFx0dmFsdWU9e2Zvcm1WYWx1ZXMuZGVzY3JpcHRpb259XG5cdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTJcIj5cblx0XHRcdFx0XHRcdFx0PENoZWNrYm94XG5cdFx0XHRcdFx0XHRcdFx0Y2hlY2tlZD17aXNBbGxEYXl9XG5cdFx0XHRcdFx0XHRcdFx0aWQ9XCJhbGxEYXlcIlxuXHRcdFx0XHRcdFx0XHRcdG9uQ2hlY2tlZENoYW5nZT17KGNoZWNrZWQpID0+IHNldElzQWxsRGF5KGNoZWNrZWQgPT09IHRydWUpfVxuXHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHQ8TGFiZWwgY2xhc3NOYW1lPVwidGV4dC14cyBzbTp0ZXh0LXNtXCIgaHRtbEZvcj1cImFsbERheVwiPlxuXHRcdFx0XHRcdFx0XHRcdHt0KCdhbGxEYXknKX1cblx0XHRcdFx0XHRcdFx0PC9MYWJlbD5cblx0XHRcdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ3JpZC1jb2xzLTIgZ2FwLTIgc206Z2FwLTRcIj5cblx0XHRcdFx0XHRcdFx0PGRpdj5cblx0XHRcdFx0XHRcdFx0XHQ8TGFiZWwgY2xhc3NOYW1lPVwidGV4dC14cyBzbTp0ZXh0LXNtXCI+e3QoJ3N0YXJ0RGF0ZScpfTwvTGFiZWw+XG5cdFx0XHRcdFx0XHRcdFx0PERhdGVQaWNrZXJcblx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cIm10LTFcIlxuXHRcdFx0XHRcdFx0XHRcdFx0Y2xvc2VPblNlbGVjdFxuXHRcdFx0XHRcdFx0XHRcdFx0ZGF0ZT17c3RhcnREYXRlfVxuXHRcdFx0XHRcdFx0XHRcdFx0ZGlzYWJsZWQ9e2Rpc2FibGVkRGF0ZU1hdGNoZXJ9XG5cdFx0XHRcdFx0XHRcdFx0XHRvbkNoYW5nZT17aGFuZGxlU3RhcnREYXRlQ2hhbmdlfVxuXHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHQ8ZGl2PlxuXHRcdFx0XHRcdFx0XHRcdDxMYWJlbCBjbGFzc05hbWU9XCJ0ZXh0LXhzIHNtOnRleHQtc21cIj57dCgnZW5kRGF0ZScpfTwvTGFiZWw+XG5cdFx0XHRcdFx0XHRcdFx0PERhdGVQaWNrZXJcblx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cIm10LTFcIlxuXHRcdFx0XHRcdFx0XHRcdFx0Y2xvc2VPblNlbGVjdFxuXHRcdFx0XHRcdFx0XHRcdFx0ZGF0ZT17ZW5kRGF0ZX1cblx0XHRcdFx0XHRcdFx0XHRcdGRpc2FibGVkPXtkaXNhYmxlZERhdGVNYXRjaGVyfVxuXHRcdFx0XHRcdFx0XHRcdFx0b25DaGFuZ2U9e2hhbmRsZUVuZERhdGVDaGFuZ2V9XG5cdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblxuXHRcdFx0XHRcdFx0eyFpc0FsbERheSAmJiAoXG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBncmlkLWNvbHMtMiBnYXAtMiBzbTpnYXAtNFwiPlxuXHRcdFx0XHRcdFx0XHRcdDxkaXY+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8TGFiZWwgY2xhc3NOYW1lPVwidGV4dC14cyBzbTp0ZXh0LXNtXCI+e3QoJ3N0YXJ0VGltZScpfTwvTGFiZWw+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8VGltZVBpY2tlclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJtdC0xIGgtOCB0ZXh0LXNtIHNtOmgtOVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG1heFRpbWU9e3N0YXJ0Q29uc3RyYWludHMubWF4fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRtaW5UaW1lPXtzdGFydENvbnN0cmFpbnRzLm1pbn1cblx0XHRcdFx0XHRcdFx0XHRcdFx0bmFtZT1cInN0YXJ0LXRpbWVcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvbkNoYW5nZT17aGFuZGxlU3RhcnRUaW1lQ2hhbmdlfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aW1lRm9ybWF0PXt0aW1lRm9ybWF0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZT17c3RhcnRUaW1lfVxuXHRcdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0XHQ8ZGl2PlxuXHRcdFx0XHRcdFx0XHRcdFx0PExhYmVsIGNsYXNzTmFtZT1cInRleHQteHMgc206dGV4dC1zbVwiPnt0KCdlbmRUaW1lJyl9PC9MYWJlbD5cblx0XHRcdFx0XHRcdFx0XHRcdDxUaW1lUGlja2VyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cIm10LTEgaC04IHRleHQtc20gc206aC05XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0bWF4VGltZT17ZW5kQ29uc3RyYWludHMubWF4fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRtaW5UaW1lPXtlbmRDb25zdHJhaW50cy5taW59XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG5hbWU9XCJlbmQtdGltZVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9uQ2hhbmdlPXtoYW5kbGVFbmRUaW1lQ2hhbmdlfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aW1lRm9ybWF0PXt0aW1lRm9ybWF0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZT17ZW5kVGltZX1cblx0XHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0KX1cblxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJncmlkIGdhcC0xIHNtOmdhcC0yXCI+XG5cdFx0XHRcdFx0XHRcdDxMYWJlbCBjbGFzc05hbWU9XCJ0ZXh0LXhzIHNtOnRleHQtc21cIj57dCgnY29sb3InKX08L0xhYmVsPlxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC13cmFwIGdhcC0yXCI+XG5cdFx0XHRcdFx0XHRcdFx0e0NPTE9SX09QVElPTlMubWFwKChjb2xvcikgPT4gKFxuXHRcdFx0XHRcdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRhcmlhLWxhYmVsPXtjb2xvci5sYWJlbH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRgJHtjb2xvci52YWx1ZX0gaC02IHctNiByb3VuZGVkLWZ1bGwgc206aC04IHNtOnctOGAsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0c2VsZWN0ZWRDb2xvciA9PT0gY29sb3IudmFsdWUgJiZcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdyaW5nLTIgcmluZy1ibGFjayByaW5nLW9mZnNldC0xIHNtOnJpbmctb2Zmc2V0LTInXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGtleT17Y29sb3IudmFsdWV9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9uQ2xpY2s9eygpID0+IHNldFNlbGVjdGVkQ29sb3IoY29sb3IudmFsdWUpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyaWFudD1cImdob3N0XCJcblx0XHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdFx0KSl9XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBnYXAtMSBzbTpnYXAtMlwiPlxuXHRcdFx0XHRcdFx0XHQ8TGFiZWwgY2xhc3NOYW1lPVwidGV4dC14cyBzbTp0ZXh0LXNtXCIgaHRtbEZvcj1cImxvY2F0aW9uXCI+XG5cdFx0XHRcdFx0XHRcdFx0e3QoJ2xvY2F0aW9uJyl9XG5cdFx0XHRcdFx0XHRcdDwvTGFiZWw+XG5cdFx0XHRcdFx0XHRcdDxJbnB1dFxuXHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImgtOCB0ZXh0LXNtIHNtOmgtOVwiXG5cdFx0XHRcdFx0XHRcdFx0aWQ9XCJsb2NhdGlvblwiXG5cdFx0XHRcdFx0XHRcdFx0bmFtZT1cImxvY2F0aW9uXCJcblx0XHRcdFx0XHRcdFx0XHRvbkNoYW5nZT17aGFuZGxlSW5wdXRDaGFuZ2V9XG5cdFx0XHRcdFx0XHRcdFx0cGxhY2Vob2xkZXI9e3QoJ2V2ZW50TG9jYXRpb25QbGFjZWhvbGRlcicpfVxuXHRcdFx0XHRcdFx0XHRcdHZhbHVlPXtmb3JtVmFsdWVzLmxvY2F0aW9ufVxuXHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cblx0XHRcdFx0XHRcdHsvKiBSZWN1cnJlbmNlIFNlY3Rpb24gKi99XG5cdFx0XHRcdFx0XHQ8UmVjdXJyZW5jZUVkaXRvciBvbkNoYW5nZT17aGFuZGxlUlJ1bGVDaGFuZ2V9IHZhbHVlPXtycnVsZX0gLz5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PC9TY3JvbGxBcmVhPlxuXG5cdFx0XHRcdDxEaWFsb2dGb290ZXIgY2xhc3NOYW1lPVwibXQtNCBzaHJpbmstMCBmbGV4IGZsZXgtY29sLXJldmVyc2UgZ2FwLTIgc206ZmxleC1yb3cgc206Z2FwLTBcIj5cblx0XHRcdFx0XHR7c2VsZWN0ZWRFdmVudD8uaWQgJiYgKFxuXHRcdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJ3LWZ1bGwgc206bXItYXV0byBzbTp3LWF1dG9cIlxuXHRcdFx0XHRcdFx0XHRvbkNsaWNrPXtoYW5kbGVEZWxldGV9XG5cdFx0XHRcdFx0XHRcdHNpemU9XCJzbVwiXG5cdFx0XHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIlxuXHRcdFx0XHRcdFx0XHR2YXJpYW50PVwiZGVzdHJ1Y3RpdmVcIlxuXHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHR7dCgnZGVsZXRlJyl9XG5cdFx0XHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCB3LWZ1bGwgZ2FwLTIgc206dy1hdXRvXCI+XG5cdFx0XHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImZsZXgtMSBzbTpmbGV4LW5vbmVcIlxuXHRcdFx0XHRcdFx0XHRvbkNsaWNrPXtvbkNsb3NlfVxuXHRcdFx0XHRcdFx0XHRzaXplPVwic21cIlxuXHRcdFx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCJcblx0XHRcdFx0XHRcdFx0dmFyaWFudD1cIm91dGxpbmVcIlxuXHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHR7dCgnY2FuY2VsJyl9XG5cdFx0XHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdFx0XHRcdDxCdXR0b24gY2xhc3NOYW1lPVwiZmxleC0xIHNtOmZsZXgtbm9uZVwiIHNpemU9XCJzbVwiIHR5cGU9XCJzdWJtaXRcIj5cblx0XHRcdFx0XHRcdFx0e3NlbGVjdGVkRXZlbnQ/LmlkID8gdCgndXBkYXRlJykgOiB0KCdjcmVhdGUnKX1cblx0XHRcdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8L0RpYWxvZ0Zvb3Rlcj5cblx0XHRcdDwvZm9ybT5cblxuXHRcdFx0ey8qIFJlY3VycmluZyBFdmVudCBFZGl0IERpYWxvZyAqL31cblx0XHRcdDxSZWN1cnJlbmNlRWRpdERpYWxvZ1xuXHRcdFx0XHRldmVudFRpdGxlPXtkaWFsb2dTdGF0ZS5ldmVudD8udGl0bGUgfHwgJyd9XG5cdFx0XHRcdGlzT3Blbj17ZGlhbG9nU3RhdGUuaXNPcGVufVxuXHRcdFx0XHRvbkNsb3NlPXtjbG9zZURpYWxvZ31cblx0XHRcdFx0b25Db25maXJtPXtoYW5kbGVDb25maXJtfVxuXHRcdFx0XHRvcGVyYXRpb25UeXBlPXtkaWFsb2dTdGF0ZS5vcGVyYXRpb25UeXBlfVxuXHRcdFx0Lz5cblx0XHQ8Lz5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgKiBhcyBDaGVja2JveFByaW1pdGl2ZSBmcm9tICdAcmFkaXgtdWkvcmVhY3QtY2hlY2tib3gnXG5pbXBvcnQgeyBDaGVja0ljb24gfSBmcm9tICdsdWNpZGUtcmVhY3QnXG5pbXBvcnQgdHlwZSAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5mdW5jdGlvbiBDaGVja2JveCh7XG5cdGNsYXNzTmFtZSxcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBDaGVja2JveFByaW1pdGl2ZS5Sb290Pikge1xuXHRyZXR1cm4gKFxuXHRcdDxDaGVja2JveFByaW1pdGl2ZS5Sb290XG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQncGVlciBib3JkZXItaW5wdXQgZGFyazpiZy1pbnB1dC8zMCBkYXRhLVtzdGF0ZT1jaGVja2VkXTpiZy1wcmltYXJ5IGRhdGEtW3N0YXRlPWNoZWNrZWRdOnRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIGRhcms6ZGF0YS1bc3RhdGU9Y2hlY2tlZF06YmctcHJpbWFyeSBkYXRhLVtzdGF0ZT1jaGVja2VkXTpib3JkZXItcHJpbWFyeSBmb2N1cy12aXNpYmxlOmJvcmRlci1yaW5nIGZvY3VzLXZpc2libGU6cmluZy1yaW5nLzUwIGFyaWEtaW52YWxpZDpyaW5nLWRlc3RydWN0aXZlLzIwIGRhcms6YXJpYS1pbnZhbGlkOnJpbmctZGVzdHJ1Y3RpdmUvNDAgYXJpYS1pbnZhbGlkOmJvcmRlci1kZXN0cnVjdGl2ZSBzaXplLTQgc2hyaW5rLTAgcm91bmRlZC1bNHB4XSBib3JkZXIgc2hhZG93LXhzIHRyYW5zaXRpb24tc2hhZG93IG91dGxpbmUtbm9uZSBmb2N1cy12aXNpYmxlOnJpbmctWzNweF0gZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIGRpc2FibGVkOm9wYWNpdHktNTAnLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJjaGVja2JveFwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0PlxuXHRcdFx0PENoZWNrYm94UHJpbWl0aXZlLkluZGljYXRvclxuXHRcdFx0XHRjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB0ZXh0LWN1cnJlbnQgdHJhbnNpdGlvbi1ub25lXCJcblx0XHRcdFx0ZGF0YS1zbG90PVwiY2hlY2tib3gtaW5kaWNhdG9yXCJcblx0XHRcdD5cblx0XHRcdFx0PENoZWNrSWNvbiBjbGFzc05hbWU9XCJzaXplLTMuNVwiIC8+XG5cdFx0XHQ8L0NoZWNrYm94UHJpbWl0aXZlLkluZGljYXRvcj5cblx0XHQ8L0NoZWNrYm94UHJpbWl0aXZlLlJvb3Q+XG5cdClcbn1cblxuZXhwb3J0IHsgQ2hlY2tib3ggfVxuIiwKICAgICJpbXBvcnQgeyBQb3BvdmVyQ2xvc2UgfSBmcm9tICdAcmFkaXgtdWkvcmVhY3QtcG9wb3ZlcidcbmltcG9ydCB7IENhbGVuZGFyIGFzIENhbGVuZGFySWNvbiB9IGZyb20gJ2x1Y2lkZS1yZWFjdCdcbmltcG9ydCB7IHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBNYXRjaGVyIH0gZnJvbSAncmVhY3QtZGF5LXBpY2tlcidcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9idXR0b24nXG5pbXBvcnQgeyBDYWxlbmRhciB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9jYWxlbmRhcidcbmltcG9ydCB7XG5cdFBvcG92ZXIsXG5cdFBvcG92ZXJDb250ZW50LFxuXHRQb3BvdmVyVHJpZ2dlcixcbn0gZnJvbSAnQC9jb21wb25lbnRzL3VpL3BvcG92ZXInXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5pbnRlcmZhY2UgRGF0ZVBpY2tlclByb3BzIHtcblx0ZGF0ZTogRGF0ZSB8IHVuZGVmaW5lZFxuXHRvbkNoYW5nZT86IChkYXRlOiBEYXRlIHwgdW5kZWZpbmVkKSA9PiB2b2lkXG5cdGxhYmVsPzogc3RyaW5nXG5cdGNsYXNzTmFtZT86IHN0cmluZ1xuXHRjbG9zZU9uU2VsZWN0PzogYm9vbGVhblxuXHRkaXNhYmxlZD86IE1hdGNoZXIgfCBNYXRjaGVyW11cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIERhdGVQaWNrZXIoe1xuXHRkYXRlLFxuXHRjbG9zZU9uU2VsZWN0LFxuXHRvbkNoYW5nZSxcblx0bGFiZWwgPSAnUGljayBhIGRhdGUnLFxuXHRjbGFzc05hbWUsXG5cdGRpc2FibGVkLFxufTogRGF0ZVBpY2tlclByb3BzKSB7XG5cdGNvbnN0IHBvcE92ZXJSZWYgPSB1c2VSZWY8SFRNTEJ1dHRvbkVsZW1lbnQgfCBudWxsPihudWxsKVxuXHRjb25zdCBbc2VsZWN0ZWREYXRlLCBzZXRTZWxlY3RlZERhdGVdID0gdXNlU3RhdGU8RGF0ZSB8IHVuZGVmaW5lZD4oZGF0ZSlcblxuXHQvLyBTeW5jIGRhdGUgc3RhdGUgd2l0aCBkYXRlIHByb3Bcblx0dXNlRWZmZWN0KCgpID0+IHtcblx0XHRzZXRTZWxlY3RlZERhdGUoZGF0ZSlcblx0fSwgW2RhdGVdKVxuXG5cdGNvbnN0IGhhbmRsZURhdGVTZWxlY3QgPSAoZGF0ZTogRGF0ZSB8IHVuZGVmaW5lZCkgPT4ge1xuXHRcdHNldFNlbGVjdGVkRGF0ZShkYXRlKVxuXHRcdGlmIChjbG9zZU9uU2VsZWN0KSB7XG5cdFx0XHRwb3BPdmVyUmVmLmN1cnJlbnQ/LmNsaWNrKClcblx0XHR9XG5cdFx0b25DaGFuZ2U/LihkYXRlKVxuXHR9XG5cblx0cmV0dXJuIChcblx0XHQ8ZGl2IGNsYXNzTmFtZT17Y2xhc3NOYW1lfT5cblx0XHRcdDxQb3BvdmVyPlxuXHRcdFx0XHQ8UG9wb3ZlclRyaWdnZXIgYXNDaGlsZD5cblx0XHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0XHQnZGF0YS1bZW1wdHk9dHJ1ZV06dGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHctZnVsbCBqdXN0aWZ5LXN0YXJ0IHRleHQtbGVmdCBmb250LW5vcm1hbCdcblx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRkYXRhLWVtcHR5PXshZGF0ZX1cblx0XHRcdFx0XHRcdHZhcmlhbnQ9XCJvdXRsaW5lXCJcblx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHQ8Q2FsZW5kYXJJY29uIC8+XG5cdFx0XHRcdFx0XHR7c2VsZWN0ZWREYXRlID8gKFxuXHRcdFx0XHRcdFx0XHRkYXlqcyhzZWxlY3RlZERhdGUpLmZvcm1hdCgnTU1NIEQsIFlZWVknKVxuXHRcdFx0XHRcdFx0KSA6IChcblx0XHRcdFx0XHRcdFx0PHNwYW4+e2xhYmVsfTwvc3Bhbj5cblx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHRcdDwvUG9wb3ZlclRyaWdnZXI+XG5cdFx0XHRcdDxQb3BvdmVyQ29udGVudCBhbGlnbj1cInN0YXJ0XCIgY2xhc3NOYW1lPVwidy1hdXRvIHAtMFwiPlxuXHRcdFx0XHRcdDxQb3BvdmVyQ2xvc2UgcmVmPXtwb3BPdmVyUmVmfSAvPlxuXHRcdFx0XHRcdDxDYWxlbmRhclxuXHRcdFx0XHRcdFx0Y2FwdGlvbkxheW91dD1cImRyb3Bkb3duXCJcblx0XHRcdFx0XHRcdGRlZmF1bHRNb250aD17c2VsZWN0ZWREYXRlfVxuXHRcdFx0XHRcdFx0ZGlzYWJsZWQ9e2Rpc2FibGVkfVxuXHRcdFx0XHRcdFx0bW9kZT1cInNpbmdsZVwiXG5cdFx0XHRcdFx0XHRvblNlbGVjdD17aGFuZGxlRGF0ZVNlbGVjdH1cblx0XHRcdFx0XHRcdHNlbGVjdGVkPXtzZWxlY3RlZERhdGV9XG5cdFx0XHRcdFx0Lz5cblx0XHRcdFx0PC9Qb3BvdmVyQ29udGVudD5cblx0XHRcdDwvUG9wb3Zlcj5cblx0XHQ8L2Rpdj5cblx0KVxufVxuIiwKICAgICJpbXBvcnQge1xuXHRDaGV2cm9uRG93bkljb24sXG5cdENoZXZyb25MZWZ0SWNvbixcblx0Q2hldnJvblJpZ2h0SWNvbixcbn0gZnJvbSAnbHVjaWRlLXJlYWN0J1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IERheUJ1dHRvbiB9IGZyb20gJ3JlYWN0LWRheS1waWNrZXInXG5pbXBvcnQgeyBEYXlQaWNrZXIsIGdldERlZmF1bHRDbGFzc05hbWVzIH0gZnJvbSAncmVhY3QtZGF5LXBpY2tlcidcbmltcG9ydCB7IEJ1dHRvbiwgYnV0dG9uVmFyaWFudHMgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvYnV0dG9uJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuZnVuY3Rpb24gQ2FsZW5kYXIoe1xuXHRjbGFzc05hbWUsXG5cdGNsYXNzTmFtZXMsXG5cdHNob3dPdXRzaWRlRGF5cyA9IHRydWUsXG5cdGNhcHRpb25MYXlvdXQgPSAnbGFiZWwnLFxuXHRidXR0b25WYXJpYW50ID0gJ2dob3N0Jyxcblx0Zm9ybWF0dGVycyxcblx0Y29tcG9uZW50cyxcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBEYXlQaWNrZXI+ICYge1xuXHRidXR0b25WYXJpYW50PzogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIEJ1dHRvbj5bJ3ZhcmlhbnQnXVxufSkge1xuXHRjb25zdCBkZWZhdWx0Q2xhc3NOYW1lcyA9IGdldERlZmF1bHRDbGFzc05hbWVzKClcblxuXHRyZXR1cm4gKFxuXHRcdDxEYXlQaWNrZXJcblx0XHRcdGNhcHRpb25MYXlvdXQ9e2NhcHRpb25MYXlvdXR9XG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQnYmctYmFja2dyb3VuZCBncm91cC9jYWxlbmRhciBwLTMgWy0tY2VsbC1zaXplOi0tc3BhY2luZyg4KV0gW1tkYXRhLXNsb3Q9Y2FyZC1jb250ZW50XV8mXTpiZy10cmFuc3BhcmVudCBbW2RhdGEtc2xvdD1wb3BvdmVyLWNvbnRlbnRdXyZdOmJnLXRyYW5zcGFyZW50Jyxcblx0XHRcdFx0U3RyaW5nLnJhd2BydGw6Kio6Wy5yZHAtYnV0dG9uXFxfbmV4dD5zdmddOnJvdGF0ZS0xODBgLFxuXHRcdFx0XHRTdHJpbmcucmF3YHJ0bDoqKjpbLnJkcC1idXR0b25cXF9wcmV2aW91cz5zdmddOnJvdGF0ZS0xODBgLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRjbGFzc05hbWVzPXt7XG5cdFx0XHRcdHJvb3Q6IGNuKCd3LWZpdCcsIGRlZmF1bHRDbGFzc05hbWVzLnJvb3QpLFxuXHRcdFx0XHRtb250aHM6IGNuKFxuXHRcdFx0XHRcdCdmbGV4IGdhcC00IGZsZXgtY29sIG1kOmZsZXgtcm93IHJlbGF0aXZlJyxcblx0XHRcdFx0XHRkZWZhdWx0Q2xhc3NOYW1lcy5tb250aHNcblx0XHRcdFx0KSxcblx0XHRcdFx0bW9udGg6IGNuKCdmbGV4IGZsZXgtY29sIHctZnVsbCBnYXAtNCcsIGRlZmF1bHRDbGFzc05hbWVzLm1vbnRoKSxcblx0XHRcdFx0bmF2OiBjbihcblx0XHRcdFx0XHQnZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEgdy1mdWxsIGFic29sdXRlIHRvcC0wIGluc2V0LXgtMCBqdXN0aWZ5LWJldHdlZW4nLFxuXHRcdFx0XHRcdGRlZmF1bHRDbGFzc05hbWVzLm5hdlxuXHRcdFx0XHQpLFxuXHRcdFx0XHRidXR0b25fcHJldmlvdXM6IGNuKFxuXHRcdFx0XHRcdGJ1dHRvblZhcmlhbnRzKHsgdmFyaWFudDogYnV0dG9uVmFyaWFudCB9KSxcblx0XHRcdFx0XHQnc2l6ZS0oLS1jZWxsLXNpemUpIGFyaWEtZGlzYWJsZWQ6b3BhY2l0eS01MCBwLTAgc2VsZWN0LW5vbmUnLFxuXHRcdFx0XHRcdGRlZmF1bHRDbGFzc05hbWVzLmJ1dHRvbl9wcmV2aW91c1xuXHRcdFx0XHQpLFxuXHRcdFx0XHRidXR0b25fbmV4dDogY24oXG5cdFx0XHRcdFx0YnV0dG9uVmFyaWFudHMoeyB2YXJpYW50OiBidXR0b25WYXJpYW50IH0pLFxuXHRcdFx0XHRcdCdzaXplLSgtLWNlbGwtc2l6ZSkgYXJpYS1kaXNhYmxlZDpvcGFjaXR5LTUwIHAtMCBzZWxlY3Qtbm9uZScsXG5cdFx0XHRcdFx0ZGVmYXVsdENsYXNzTmFtZXMuYnV0dG9uX25leHRcblx0XHRcdFx0KSxcblx0XHRcdFx0bW9udGhfY2FwdGlvbjogY24oXG5cdFx0XHRcdFx0J2ZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGgtKC0tY2VsbC1zaXplKSB3LWZ1bGwgcHgtKC0tY2VsbC1zaXplKScsXG5cdFx0XHRcdFx0ZGVmYXVsdENsYXNzTmFtZXMubW9udGhfY2FwdGlvblxuXHRcdFx0XHQpLFxuXHRcdFx0XHRkcm9wZG93bnM6IGNuKFxuXHRcdFx0XHRcdCd3LWZ1bGwgZmxleCBpdGVtcy1jZW50ZXIgdGV4dC1zbSBmb250LW1lZGl1bSBqdXN0aWZ5LWNlbnRlciBoLSgtLWNlbGwtc2l6ZSkgZ2FwLTEuNScsXG5cdFx0XHRcdFx0ZGVmYXVsdENsYXNzTmFtZXMuZHJvcGRvd25zXG5cdFx0XHRcdCksXG5cdFx0XHRcdGRyb3Bkb3duX3Jvb3Q6IGNuKFxuXHRcdFx0XHRcdCdyZWxhdGl2ZSBoYXMtZm9jdXM6Ym9yZGVyLXJpbmcgYm9yZGVyIGJvcmRlci1pbnB1dCBzaGFkb3cteHMgaGFzLWZvY3VzOnJpbmctcmluZy81MCBoYXMtZm9jdXM6cmluZy1bM3B4XSByb3VuZGVkLW1kJyxcblx0XHRcdFx0XHRkZWZhdWx0Q2xhc3NOYW1lcy5kcm9wZG93bl9yb290XG5cdFx0XHRcdCksXG5cdFx0XHRcdGRyb3Bkb3duOiBjbihcblx0XHRcdFx0XHQnYWJzb2x1dGUgYmctcG9wb3ZlciBpbnNldC0wIG9wYWNpdHktMCcsXG5cdFx0XHRcdFx0ZGVmYXVsdENsYXNzTmFtZXMuZHJvcGRvd25cblx0XHRcdFx0KSxcblx0XHRcdFx0Y2FwdGlvbl9sYWJlbDogY24oXG5cdFx0XHRcdFx0J3NlbGVjdC1ub25lIGZvbnQtbWVkaXVtJyxcblx0XHRcdFx0XHRjYXB0aW9uTGF5b3V0ID09PSAnbGFiZWwnXG5cdFx0XHRcdFx0XHQ/ICd0ZXh0LXNtJ1xuXHRcdFx0XHRcdFx0OiAncm91bmRlZC1tZCBwbC0yIHByLTEgZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEgdGV4dC1zbSBoLTggWyY+c3ZnXTp0ZXh0LW11dGVkLWZvcmVncm91bmQgWyY+c3ZnXTpzaXplLTMuNScsXG5cdFx0XHRcdFx0ZGVmYXVsdENsYXNzTmFtZXMuY2FwdGlvbl9sYWJlbFxuXHRcdFx0XHQpLFxuXHRcdFx0XHR0YWJsZTogJ3ctZnVsbCBib3JkZXItY29sbGFwc2UnLFxuXHRcdFx0XHR3ZWVrZGF5czogY24oJ2ZsZXgnLCBkZWZhdWx0Q2xhc3NOYW1lcy53ZWVrZGF5cyksXG5cdFx0XHRcdHdlZWtkYXk6IGNuKFxuXHRcdFx0XHRcdCd0ZXh0LW11dGVkLWZvcmVncm91bmQgcm91bmRlZC1tZCBmbGV4LTEgZm9udC1ub3JtYWwgdGV4dC1bMC44cmVtXSBzZWxlY3Qtbm9uZScsXG5cdFx0XHRcdFx0ZGVmYXVsdENsYXNzTmFtZXMud2Vla2RheVxuXHRcdFx0XHQpLFxuXHRcdFx0XHR3ZWVrOiBjbignZmxleCB3LWZ1bGwgbXQtMicsIGRlZmF1bHRDbGFzc05hbWVzLndlZWspLFxuXHRcdFx0XHR3ZWVrX251bWJlcl9oZWFkZXI6IGNuKFxuXHRcdFx0XHRcdCdzZWxlY3Qtbm9uZSB3LSgtLWNlbGwtc2l6ZSknLFxuXHRcdFx0XHRcdGRlZmF1bHRDbGFzc05hbWVzLndlZWtfbnVtYmVyX2hlYWRlclxuXHRcdFx0XHQpLFxuXHRcdFx0XHR3ZWVrX251bWJlcjogY24oXG5cdFx0XHRcdFx0J3RleHQtWzAuOHJlbV0gc2VsZWN0LW5vbmUgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kJyxcblx0XHRcdFx0XHRkZWZhdWx0Q2xhc3NOYW1lcy53ZWVrX251bWJlclxuXHRcdFx0XHQpLFxuXHRcdFx0XHRkYXk6IGNuKFxuXHRcdFx0XHRcdCdyZWxhdGl2ZSB3LWZ1bGwgaC1mdWxsIHAtMCB0ZXh0LWNlbnRlciBbJjpsYXN0LWNoaWxkW2RhdGEtc2VsZWN0ZWQ9dHJ1ZV1fYnV0dG9uXTpyb3VuZGVkLXItbWQgZ3JvdXAvZGF5IGFzcGVjdC1zcXVhcmUgc2VsZWN0LW5vbmUnLFxuXHRcdFx0XHRcdHByb3BzLnNob3dXZWVrTnVtYmVyXG5cdFx0XHRcdFx0XHQ/ICdbJjpudGgtY2hpbGQoMilbZGF0YS1zZWxlY3RlZD10cnVlXV9idXR0b25dOnJvdW5kZWQtbC1tZCdcblx0XHRcdFx0XHRcdDogJ1smOmZpcnN0LWNoaWxkW2RhdGEtc2VsZWN0ZWQ9dHJ1ZV1fYnV0dG9uXTpyb3VuZGVkLWwtbWQnLFxuXHRcdFx0XHRcdGRlZmF1bHRDbGFzc05hbWVzLmRheVxuXHRcdFx0XHQpLFxuXHRcdFx0XHRyYW5nZV9zdGFydDogY24oXG5cdFx0XHRcdFx0J3JvdW5kZWQtbC1tZCBiZy1hY2NlbnQnLFxuXHRcdFx0XHRcdGRlZmF1bHRDbGFzc05hbWVzLnJhbmdlX3N0YXJ0XG5cdFx0XHRcdCksXG5cdFx0XHRcdHJhbmdlX21pZGRsZTogY24oJ3JvdW5kZWQtbm9uZScsIGRlZmF1bHRDbGFzc05hbWVzLnJhbmdlX21pZGRsZSksXG5cdFx0XHRcdHJhbmdlX2VuZDogY24oJ3JvdW5kZWQtci1tZCBiZy1hY2NlbnQnLCBkZWZhdWx0Q2xhc3NOYW1lcy5yYW5nZV9lbmQpLFxuXHRcdFx0XHR0b2RheTogY24oXG5cdFx0XHRcdFx0J2JnLWFjY2VudCB0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kIHJvdW5kZWQtbWQgZGF0YS1bc2VsZWN0ZWQ9dHJ1ZV06cm91bmRlZC1ub25lJyxcblx0XHRcdFx0XHRkZWZhdWx0Q2xhc3NOYW1lcy50b2RheVxuXHRcdFx0XHQpLFxuXHRcdFx0XHRvdXRzaWRlOiBjbihcblx0XHRcdFx0XHQndGV4dC1tdXRlZC1mb3JlZ3JvdW5kIGFyaWEtc2VsZWN0ZWQ6dGV4dC1tdXRlZC1mb3JlZ3JvdW5kJyxcblx0XHRcdFx0XHRkZWZhdWx0Q2xhc3NOYW1lcy5vdXRzaWRlXG5cdFx0XHRcdCksXG5cdFx0XHRcdGRpc2FibGVkOiBjbihcblx0XHRcdFx0XHQndGV4dC1tdXRlZC1mb3JlZ3JvdW5kIG9wYWNpdHktNTAnLFxuXHRcdFx0XHRcdGRlZmF1bHRDbGFzc05hbWVzLmRpc2FibGVkXG5cdFx0XHRcdCksXG5cdFx0XHRcdGhpZGRlbjogY24oJ2ludmlzaWJsZScsIGRlZmF1bHRDbGFzc05hbWVzLmhpZGRlbiksXG5cdFx0XHRcdC4uLmNsYXNzTmFtZXMsXG5cdFx0XHR9fVxuXHRcdFx0Y29tcG9uZW50cz17e1xuXHRcdFx0XHRSb290OiAoeyBjbGFzc05hbWUsIHJvb3RSZWYsIC4uLnByb3BzIH0pID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKGNsYXNzTmFtZSl9XG5cdFx0XHRcdFx0XHRcdGRhdGEtc2xvdD1cImNhbGVuZGFyXCJcblx0XHRcdFx0XHRcdFx0cmVmPXtyb290UmVmfVxuXHRcdFx0XHRcdFx0XHR7Li4ucHJvcHN9XG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdClcblx0XHRcdFx0fSxcblx0XHRcdFx0Q2hldnJvbjogKHsgY2xhc3NOYW1lLCBvcmllbnRhdGlvbiwgLi4ucHJvcHMgfSkgPT4ge1xuXHRcdFx0XHRcdGlmIChvcmllbnRhdGlvbiA9PT0gJ2xlZnQnKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHQ8Q2hldnJvbkxlZnRJY29uIGNsYXNzTmFtZT17Y24oJ3NpemUtNCcsIGNsYXNzTmFtZSl9IHsuLi5wcm9wc30gLz5cblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAob3JpZW50YXRpb24gPT09ICdyaWdodCcpIHtcblx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdDxDaGV2cm9uUmlnaHRJY29uXG5cdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbignc2l6ZS00JywgY2xhc3NOYW1lKX1cblx0XHRcdFx0XHRcdFx0XHR7Li4ucHJvcHN9XG5cdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdDxDaGV2cm9uRG93bkljb24gY2xhc3NOYW1lPXtjbignc2l6ZS00JywgY2xhc3NOYW1lKX0gey4uLnByb3BzfSAvPlxuXHRcdFx0XHRcdClcblx0XHRcdFx0fSxcblx0XHRcdFx0RGF5QnV0dG9uOiBDYWxlbmRhckRheUJ1dHRvbixcblx0XHRcdFx0V2Vla051bWJlcjogKHsgY2hpbGRyZW4sIC4uLnByb3BzIH0pID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0PHRkIHsuLi5wcm9wc30+XG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBzaXplLSgtLWNlbGwtc2l6ZSkgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRleHQtY2VudGVyXCI+XG5cdFx0XHRcdFx0XHRcdFx0e2NoaWxkcmVufVxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdDwvdGQ+XG5cdFx0XHRcdFx0KVxuXHRcdFx0XHR9LFxuXHRcdFx0XHQuLi5jb21wb25lbnRzLFxuXHRcdFx0fX1cblx0XHRcdGZvcm1hdHRlcnM9e3tcblx0XHRcdFx0Zm9ybWF0TW9udGhEcm9wZG93bjogKGRhdGUpID0+XG5cdFx0XHRcdFx0ZGF0ZS50b0xvY2FsZVN0cmluZygnZGVmYXVsdCcsIHsgbW9udGg6ICdzaG9ydCcgfSksXG5cdFx0XHRcdC4uLmZvcm1hdHRlcnMsXG5cdFx0XHR9fVxuXHRcdFx0c2hvd091dHNpZGVEYXlzPXtzaG93T3V0c2lkZURheXN9XG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0Lz5cblx0KVxufVxuXG5mdW5jdGlvbiBDYWxlbmRhckRheUJ1dHRvbih7XG5cdGNsYXNzTmFtZSxcblx0ZGF5LFxuXHRtb2RpZmllcnMsXG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgRGF5QnV0dG9uPikge1xuXHRjb25zdCBkZWZhdWx0Q2xhc3NOYW1lcyA9IGdldERlZmF1bHRDbGFzc05hbWVzKClcblxuXHRjb25zdCByZWYgPSBSZWFjdC51c2VSZWY8SFRNTEJ1dHRvbkVsZW1lbnQ+KG51bGwpXG5cdFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG5cdFx0aWYgKG1vZGlmaWVycy5mb2N1c2VkKSB7XG5cdFx0XHRyZWYuY3VycmVudD8uZm9jdXMoKVxuXHRcdH1cblx0fSwgW21vZGlmaWVycy5mb2N1c2VkXSlcblxuXHRyZXR1cm4gKFxuXHRcdDxCdXR0b25cblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCdkYXRhLVtzZWxlY3RlZC1zaW5nbGU9dHJ1ZV06YmctcHJpbWFyeSBkYXRhLVtzZWxlY3RlZC1zaW5nbGU9dHJ1ZV06dGV4dC1wcmltYXJ5LWZvcmVncm91bmQgZGF0YS1bcmFuZ2UtbWlkZGxlPXRydWVdOmJnLWFjY2VudCBkYXRhLVtyYW5nZS1taWRkbGU9dHJ1ZV06dGV4dC1hY2NlbnQtZm9yZWdyb3VuZCBkYXRhLVtyYW5nZS1zdGFydD10cnVlXTpiZy1wcmltYXJ5IGRhdGEtW3JhbmdlLXN0YXJ0PXRydWVdOnRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIGRhdGEtW3JhbmdlLWVuZD10cnVlXTpiZy1wcmltYXJ5IGRhdGEtW3JhbmdlLWVuZD10cnVlXTp0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCBncm91cC1kYXRhLVtmb2N1c2VkPXRydWVdL2RheTpib3JkZXItcmluZyBncm91cC1kYXRhLVtmb2N1c2VkPXRydWVdL2RheTpyaW5nLXJpbmcvNTAgZGFyazpob3Zlcjp0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kIGZsZXggYXNwZWN0LXNxdWFyZSBzaXplLWF1dG8gdy1mdWxsIG1pbi13LSgtLWNlbGwtc2l6ZSkgZmxleC1jb2wgZ2FwLTEgbGVhZGluZy1ub25lIGZvbnQtbm9ybWFsIGdyb3VwLWRhdGEtW2ZvY3VzZWQ9dHJ1ZV0vZGF5OnJlbGF0aXZlIGdyb3VwLWRhdGEtW2ZvY3VzZWQ9dHJ1ZV0vZGF5OnotMTAgZ3JvdXAtZGF0YS1bZm9jdXNlZD10cnVlXS9kYXk6cmluZy1bM3B4XSBkYXRhLVtyYW5nZS1lbmQ9dHJ1ZV06cm91bmRlZC1tZCBkYXRhLVtyYW5nZS1lbmQ9dHJ1ZV06cm91bmRlZC1yLW1kIGRhdGEtW3JhbmdlLW1pZGRsZT10cnVlXTpyb3VuZGVkLW5vbmUgZGF0YS1bcmFuZ2Utc3RhcnQ9dHJ1ZV06cm91bmRlZC1tZCBkYXRhLVtyYW5nZS1zdGFydD10cnVlXTpyb3VuZGVkLWwtbWQgWyY+c3Bhbl06dGV4dC14cyBbJj5zcGFuXTpvcGFjaXR5LTcwJyxcblx0XHRcdFx0ZGVmYXVsdENsYXNzTmFtZXMuZGF5LFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLWRheT17ZGF5LmRhdGUudG9Mb2NhbGVEYXRlU3RyaW5nKCl9XG5cdFx0XHRkYXRhLXJhbmdlLWVuZD17bW9kaWZpZXJzLnJhbmdlX2VuZH1cblx0XHRcdGRhdGEtcmFuZ2UtbWlkZGxlPXttb2RpZmllcnMucmFuZ2VfbWlkZGxlfVxuXHRcdFx0ZGF0YS1yYW5nZS1zdGFydD17bW9kaWZpZXJzLnJhbmdlX3N0YXJ0fVxuXHRcdFx0ZGF0YS1zZWxlY3RlZC1zaW5nbGU9e1xuXHRcdFx0XHRtb2RpZmllcnMuc2VsZWN0ZWQgJiZcblx0XHRcdFx0IW1vZGlmaWVycy5yYW5nZV9zdGFydCAmJlxuXHRcdFx0XHQhbW9kaWZpZXJzLnJhbmdlX2VuZCAmJlxuXHRcdFx0XHQhbW9kaWZpZXJzLnJhbmdlX21pZGRsZVxuXHRcdFx0fVxuXHRcdFx0cmVmPXtyZWZ9XG5cdFx0XHRzaXplPVwiaWNvblwiXG5cdFx0XHR2YXJpYW50PVwiZ2hvc3RcIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdC8+XG5cdClcbn1cblxuZXhwb3J0IHsgQ2FsZW5kYXIsIENhbGVuZGFyRGF5QnV0dG9uIH1cbiIsCiAgICAiaW1wb3J0ICogYXMgUG9wb3ZlclByaW1pdGl2ZSBmcm9tICdAcmFkaXgtdWkvcmVhY3QtcG9wb3ZlcidcbmltcG9ydCB0eXBlICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmZ1bmN0aW9uIFBvcG92ZXIoe1xuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFBvcG92ZXJQcmltaXRpdmUuUm9vdD4pIHtcblx0cmV0dXJuIDxQb3BvdmVyUHJpbWl0aXZlLlJvb3QgZGF0YS1zbG90PVwicG9wb3ZlclwiIHsuLi5wcm9wc30gLz5cbn1cblxuZnVuY3Rpb24gUG9wb3ZlclRyaWdnZXIoe1xuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFBvcG92ZXJQcmltaXRpdmUuVHJpZ2dlcj4pIHtcblx0cmV0dXJuIDxQb3BvdmVyUHJpbWl0aXZlLlRyaWdnZXIgZGF0YS1zbG90PVwicG9wb3Zlci10cmlnZ2VyXCIgey4uLnByb3BzfSAvPlxufVxuXG5mdW5jdGlvbiBQb3BvdmVyQ29udGVudCh7XG5cdGNsYXNzTmFtZSxcblx0YWxpZ24gPSAnY2VudGVyJyxcblx0c2lkZU9mZnNldCA9IDQsXG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgUG9wb3ZlclByaW1pdGl2ZS5Db250ZW50Pikge1xuXHRyZXR1cm4gKFxuXHRcdDxQb3BvdmVyUHJpbWl0aXZlLlBvcnRhbD5cblx0XHRcdDxQb3BvdmVyUHJpbWl0aXZlLkNvbnRlbnRcblx0XHRcdFx0YWxpZ249e2FsaWdufVxuXHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdCdiZy1wb3BvdmVyIHRleHQtcG9wb3Zlci1mb3JlZ3JvdW5kIGRhdGEtW3N0YXRlPW9wZW5dOmFuaW1hdGUtaW4gZGF0YS1bc3RhdGU9Y2xvc2VkXTphbmltYXRlLW91dCBkYXRhLVtzdGF0ZT1jbG9zZWRdOmZhZGUtb3V0LTAgZGF0YS1bc3RhdGU9b3Blbl06ZmFkZS1pbi0wIGRhdGEtW3N0YXRlPWNsb3NlZF06em9vbS1vdXQtOTUgZGF0YS1bc3RhdGU9b3Blbl06em9vbS1pbi05NSBkYXRhLVtzaWRlPWJvdHRvbV06c2xpZGUtaW4tZnJvbS10b3AtMiBkYXRhLVtzaWRlPWxlZnRdOnNsaWRlLWluLWZyb20tcmlnaHQtMiBkYXRhLVtzaWRlPXJpZ2h0XTpzbGlkZS1pbi1mcm9tLWxlZnQtMiBkYXRhLVtzaWRlPXRvcF06c2xpZGUtaW4tZnJvbS1ib3R0b20tMiB6LTUwIHctNzIgb3JpZ2luLSgtLXJhZGl4LXBvcG92ZXItY29udGVudC10cmFuc2Zvcm0tb3JpZ2luKSByb3VuZGVkLW1kIGJvcmRlciBwLTQgc2hhZG93LW1kIG91dGxpbmUtaGlkZGVuJyxcblx0XHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdFx0KX1cblx0XHRcdFx0ZGF0YS1zbG90PVwicG9wb3Zlci1jb250ZW50XCJcblx0XHRcdFx0c2lkZU9mZnNldD17c2lkZU9mZnNldH1cblx0XHRcdFx0ey4uLnByb3BzfVxuXHRcdFx0Lz5cblx0XHQ8L1BvcG92ZXJQcmltaXRpdmUuUG9ydGFsPlxuXHQpXG59XG5cbmZ1bmN0aW9uIFBvcG92ZXJBbmNob3Ioe1xuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFBvcG92ZXJQcmltaXRpdmUuQW5jaG9yPikge1xuXHRyZXR1cm4gPFBvcG92ZXJQcmltaXRpdmUuQW5jaG9yIGRhdGEtc2xvdD1cInBvcG92ZXItYW5jaG9yXCIgey4uLnByb3BzfSAvPlxufVxuXG5leHBvcnQgeyBQb3BvdmVyLCBQb3BvdmVyQW5jaG9yLCBQb3BvdmVyQ29udGVudCwgUG9wb3ZlclRyaWdnZXIgfVxuIiwKICAgICJpbXBvcnQgdHlwZSAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5mdW5jdGlvbiBJbnB1dCh7IGNsYXNzTmFtZSwgdHlwZSwgLi4ucHJvcHMgfTogUmVhY3QuQ29tcG9uZW50UHJvcHM8J2lucHV0Jz4pIHtcblx0cmV0dXJuIChcblx0XHQ8aW5wdXRcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCdmaWxlOnRleHQtZm9yZWdyb3VuZCBwbGFjZWhvbGRlcjp0ZXh0LW11dGVkLWZvcmVncm91bmQgc2VsZWN0aW9uOmJnLXByaW1hcnkgc2VsZWN0aW9uOnRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIGRhcms6YmctaW5wdXQvMzAgYm9yZGVyLWlucHV0IGZsZXggaC05IHctZnVsbCBtaW4tdy0wIHJvdW5kZWQtbWQgYm9yZGVyIGJnLXRyYW5zcGFyZW50IHB4LTMgcHktMSB0ZXh0LWJhc2Ugc2hhZG93LXhzIHRyYW5zaXRpb24tW2NvbG9yLGJveC1zaGFkb3ddIG91dGxpbmUtbm9uZSBmaWxlOmlubGluZS1mbGV4IGZpbGU6aC03IGZpbGU6Ym9yZGVyLTAgZmlsZTpiZy10cmFuc3BhcmVudCBmaWxlOnRleHQtc20gZmlsZTpmb250LW1lZGl1bSBkaXNhYmxlZDpwb2ludGVyLWV2ZW50cy1ub25lIGRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZCBkaXNhYmxlZDpvcGFjaXR5LTUwIG1kOnRleHQtc20nLFxuXHRcdFx0XHQnZm9jdXMtdmlzaWJsZTpib3JkZXItcmluZyBmb2N1cy12aXNpYmxlOnJpbmctcmluZy81MCBmb2N1cy12aXNpYmxlOnJpbmctWzNweF0nLFxuXHRcdFx0XHQnYXJpYS1pbnZhbGlkOnJpbmctZGVzdHJ1Y3RpdmUvMjAgZGFyazphcmlhLWludmFsaWQ6cmluZy1kZXN0cnVjdGl2ZS80MCBhcmlhLWludmFsaWQ6Ym9yZGVyLWRlc3RydWN0aXZlJyxcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0ZGF0YS1zbG90PVwiaW5wdXRcIlxuXHRcdFx0dHlwZT17dHlwZX1cblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmV4cG9ydCB7IElucHV0IH1cbiIsCiAgICAiaW1wb3J0ICogYXMgTGFiZWxQcmltaXRpdmUgZnJvbSAnQHJhZGl4LXVpL3JlYWN0LWxhYmVsJ1xuaW1wb3J0IHR5cGUgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuZnVuY3Rpb24gTGFiZWwoe1xuXHRjbGFzc05hbWUsXG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgTGFiZWxQcmltaXRpdmUuUm9vdD4pIHtcblx0cmV0dXJuIChcblx0XHQ8TGFiZWxQcmltaXRpdmUuUm9vdFxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0J2ZsZXggaXRlbXMtY2VudGVyIGdhcC0yIHRleHQtc20gbGVhZGluZy1ub25lIGZvbnQtbWVkaXVtIHNlbGVjdC1ub25lIGdyb3VwLWRhdGEtW2Rpc2FibGVkPXRydWVdOnBvaW50ZXItZXZlbnRzLW5vbmUgZ3JvdXAtZGF0YS1bZGlzYWJsZWQ9dHJ1ZV06b3BhY2l0eS01MCBwZWVyLWRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZCBwZWVyLWRpc2FibGVkOm9wYWNpdHktNTAnLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJsYWJlbFwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0Lz5cblx0KVxufVxuXG5leHBvcnQgeyBMYWJlbCB9XG4iLAogICAgImltcG9ydCAqIGFzIFNjcm9sbEFyZWFQcmltaXRpdmUgZnJvbSAnQHJhZGl4LXVpL3JlYWN0LXNjcm9sbC1hcmVhJ1xuaW1wb3J0IHR5cGUgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuaW50ZXJmYWNlIFNjcm9sbEFyZWFQcm9wc1xuXHRleHRlbmRzIFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTY3JvbGxBcmVhUHJpbWl0aXZlLlJvb3Q+IHtcblx0dmlld1BvcnRQcm9wcz86IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTY3JvbGxBcmVhUHJpbWl0aXZlLlZpZXdwb3J0PlxufVxuXG5mdW5jdGlvbiBTY3JvbGxBcmVhKHtcblx0Y2xhc3NOYW1lLFxuXHRjaGlsZHJlbixcblx0dmlld1BvcnRQcm9wcyxcblx0Li4ucHJvcHNcbn06IFNjcm9sbEFyZWFQcm9wcykge1xuXHRyZXR1cm4gKFxuXHRcdDxTY3JvbGxBcmVhUHJpbWl0aXZlLlJvb3Rcblx0XHRcdGNsYXNzTmFtZT17Y24oJ3JlbGF0aXZlJywgY2xhc3NOYW1lKX1cblx0XHRcdGRhdGEtc2xvdD1cInNjcm9sbC1hcmVhXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQ+XG5cdFx0XHQ8U2Nyb2xsQXJlYVByaW1pdGl2ZS5WaWV3cG9ydFxuXHRcdFx0XHR7Li4udmlld1BvcnRQcm9wc31cblx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHQnZm9jdXMtdmlzaWJsZTpyaW5nLXJpbmcvNTAgc2l6ZS1mdWxsIHJvdW5kZWQtW2luaGVyaXRdIHRyYW5zaXRpb24tW2NvbG9yLGJveC1zaGFkb3ddIG91dGxpbmUtbm9uZSBmb2N1cy12aXNpYmxlOnJpbmctWzNweF0gZm9jdXMtdmlzaWJsZTpvdXRsaW5lLTEnLFxuXHRcdFx0XHRcdHZpZXdQb3J0UHJvcHM/LmNsYXNzTmFtZVxuXHRcdFx0XHQpfVxuXHRcdFx0XHRkYXRhLXNsb3Q9XCJzY3JvbGwtYXJlYS12aWV3cG9ydFwiXG5cdFx0XHQ+XG5cdFx0XHRcdHtjaGlsZHJlbn1cblx0XHRcdDwvU2Nyb2xsQXJlYVByaW1pdGl2ZS5WaWV3cG9ydD5cblx0XHRcdDxTY3JvbGxCYXIgLz5cblx0XHRcdDxTY3JvbGxBcmVhUHJpbWl0aXZlLkNvcm5lciAvPlxuXHRcdDwvU2Nyb2xsQXJlYVByaW1pdGl2ZS5Sb290PlxuXHQpXG59XG5cbmZ1bmN0aW9uIFNjcm9sbEJhcih7XG5cdGNsYXNzTmFtZSxcblx0b3JpZW50YXRpb24gPSAndmVydGljYWwnLFxuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNjcm9sbEFyZWFQcmltaXRpdmUuU2Nyb2xsQXJlYVNjcm9sbGJhcj4pIHtcblx0cmV0dXJuIChcblx0XHQ8U2Nyb2xsQXJlYVByaW1pdGl2ZS5TY3JvbGxBcmVhU2Nyb2xsYmFyXG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQnZmxleCB0b3VjaC1ub25lIHAtcHggdHJhbnNpdGlvbi1jb2xvcnMgc2VsZWN0LW5vbmUnLFxuXHRcdFx0XHRvcmllbnRhdGlvbiA9PT0gJ3ZlcnRpY2FsJyAmJlxuXHRcdFx0XHRcdCdoLWZ1bGwgdy0yLjUgYm9yZGVyLWwgYm9yZGVyLWwtdHJhbnNwYXJlbnQnLFxuXHRcdFx0XHRvcmllbnRhdGlvbiA9PT0gJ2hvcml6b250YWwnICYmXG5cdFx0XHRcdFx0J2gtMi41IGZsZXgtY29sIGJvcmRlci10IGJvcmRlci10LXRyYW5zcGFyZW50Jyxcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0ZGF0YS1zbG90PVwic2Nyb2xsLWFyZWEtc2Nyb2xsYmFyXCJcblx0XHRcdG9yaWVudGF0aW9uPXtvcmllbnRhdGlvbn1cblx0XHRcdHsuLi5wcm9wc31cblx0XHQ+XG5cdFx0XHQ8U2Nyb2xsQXJlYVByaW1pdGl2ZS5TY3JvbGxBcmVhVGh1bWJcblx0XHRcdFx0Y2xhc3NOYW1lPVwiYmctYm9yZGVyIHJlbGF0aXZlIGZsZXgtMSByb3VuZGVkLWZ1bGxcIlxuXHRcdFx0XHRkYXRhLXNsb3Q9XCJzY3JvbGwtYXJlYS10aHVtYlwiXG5cdFx0XHQvPlxuXHRcdDwvU2Nyb2xsQXJlYVByaW1pdGl2ZS5TY3JvbGxBcmVhU2Nyb2xsYmFyPlxuXHQpXG59XG5cbmV4cG9ydCB7IFNjcm9sbEFyZWEsIFNjcm9sbEJhciB9XG4iLAogICAgImltcG9ydCB7IENsb2NrIH0gZnJvbSAnbHVjaWRlLXJlYWN0J1xuaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvYnV0dG9uJ1xuaW1wb3J0IHsgSW5wdXQgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvaW5wdXQnXG5pbXBvcnQge1xuXHRQb3BvdmVyLFxuXHRQb3BvdmVyQ29udGVudCxcblx0UG9wb3ZlclRyaWdnZXIsXG59IGZyb20gJ0AvY29tcG9uZW50cy91aS9wb3BvdmVyJ1xuaW1wb3J0IHsgU2Nyb2xsQXJlYSB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9zY3JvbGwtYXJlYSdcbmltcG9ydCB7IHVzZUF1dG9jb21wbGV0ZVRpbWVwaWNrZXIgfSBmcm9tICdAL2hvb2tzL3VzZS1hdXRvY29tcGxldGUtdGltZXBpY2tlcidcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgdHlwZSB7IFRpbWVGb3JtYXQgfSBmcm9tICdAL3R5cGVzJ1xuXG5jb25zdCBoYW5kbGVXaGVlbCA9IChlOiBSZWFjdC5XaGVlbEV2ZW50PEhUTUxEaXZFbGVtZW50PikgPT4ge1xuXHQvLyBQcmV2ZW50IGV2ZW50IGZyb20gYnViYmxpbmcgdG8gcHJldmVudCBQb3BvdmVyIGZyb20gY2xvc2luZ1xuXHRlLnN0b3BQcm9wYWdhdGlvbigpXG59XG5cbmludGVyZmFjZSBUaW1lUGlja2VyUHJvcHMge1xuXHR2YWx1ZTogc3RyaW5nXG5cdG9uQ2hhbmdlOiAodmFsdWU6IHN0cmluZykgPT4gdm9pZFxuXHRtaW5UaW1lPzogc3RyaW5nXG5cdG1heFRpbWU/OiBzdHJpbmdcblx0dGltZUZvcm1hdD86IFRpbWVGb3JtYXRcblx0cGxhY2Vob2xkZXI/OiBzdHJpbmdcblx0Y2xhc3NOYW1lPzogc3RyaW5nXG5cdGRpc2FibGVkPzogYm9vbGVhblxuXHRuYW1lPzogc3RyaW5nXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBUaW1lUGlja2VyKHtcblx0dmFsdWUsXG5cdG9uQ2hhbmdlLFxuXHRtaW5UaW1lID0gJzAwOjAwJyxcblx0bWF4VGltZSA9ICcyMzo0NScsXG5cdHRpbWVGb3JtYXQgPSAnMTItaG91cicsXG5cdHBsYWNlaG9sZGVyID0gJ1NlbGVjdCB0aW1lLi4uJyxcblx0Y2xhc3NOYW1lLFxuXHRkaXNhYmxlZCA9IGZhbHNlLFxuXHRuYW1lLFxufTogVGltZVBpY2tlclByb3BzKSB7XG5cdGNvbnN0IFtvcGVuLCBzZXRPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKVxuXHRjb25zdCBbc2VhcmNoLCBzZXRTZWFyY2hdID0gdXNlU3RhdGUoJycpXG5cdGNvbnN0IGlucHV0UmVmID0gdXNlUmVmPEhUTUxJbnB1dEVsZW1lbnQ+KG51bGwpXG5cdGNvbnN0IHRyaWdnZXJSZWYgPSB1c2VSZWY8SFRNTEJ1dHRvbkVsZW1lbnQ+KG51bGwpXG5cdGNvbnN0IFt0cmlnZ2VyV2lkdGgsIHNldFRyaWdnZXJXaWR0aF0gPSB1c2VTdGF0ZTxudW1iZXI+KDApXG5cblx0Y29uc3QgeyB0aW1lT3B0aW9ucywgZm9ybWF0VGltZSB9ID0gdXNlQXV0b2NvbXBsZXRlVGltZXBpY2tlcih7XG5cdFx0dGltZUZvcm1hdCxcblx0XHRtaW5UaW1lLFxuXHRcdG1heFRpbWUsXG5cdH0pXG5cblx0Ly8gRmlsdGVyIHRpbWUgb3B0aW9ucyBiYXNlZCBvbiBzZWFyY2hcblx0Y29uc3QgZmlsdGVyZWRPcHRpb25zID0gdGltZU9wdGlvbnMuZmlsdGVyKCh0aW1lKSA9PiB7XG5cdFx0Y29uc3QgZm9ybWF0dGVkVGltZSA9IGZvcm1hdFRpbWUodGltZSlcblx0XHRyZXR1cm4gZm9ybWF0dGVkVGltZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaC50b0xvd2VyQ2FzZSgpKVxuXHR9KVxuXG5cdGNvbnN0IGhhbmRsZVNlbGVjdCA9ICh0aW1lOiBzdHJpbmcpID0+IHtcblx0XHRvbkNoYW5nZSh0aW1lKVxuXHRcdHNldE9wZW4oZmFsc2UpXG5cdFx0c2V0U2VhcmNoKCcnKVxuXHR9XG5cblx0Ly8gTWVhc3VyZSB0cmlnZ2VyIHdpZHRoIGFuZCBmb2N1cyBpbnB1dCB3aGVuIHBvcG92ZXIgb3BlbnNcblx0dXNlRWZmZWN0KCgpID0+IHtcblx0XHRpZiAob3Blbikge1xuXHRcdFx0aWYgKHRyaWdnZXJSZWYuY3VycmVudCkge1xuXHRcdFx0XHRzZXRUcmlnZ2VyV2lkdGgodHJpZ2dlclJlZi5jdXJyZW50Lm9mZnNldFdpZHRoKVxuXHRcdFx0fVxuXHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdGlucHV0UmVmLmN1cnJlbnQ/LmZvY3VzKClcblx0XHRcdH0sIDApXG5cdFx0fVxuXHR9LCBbb3Blbl0pXG5cblx0Y29uc3QgY3VycmVudFRpbWVTdHJpbmcgPSB2YWx1ZSA/IGZvcm1hdFRpbWUodmFsdWUpIDogcGxhY2Vob2xkZXJcblxuXHRyZXR1cm4gKFxuXHRcdDxQb3BvdmVyIG9uT3BlbkNoYW5nZT17c2V0T3Blbn0gb3Blbj17b3Blbn0+XG5cdFx0XHQ8UG9wb3ZlclRyaWdnZXIgYXNDaGlsZD5cblx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdGFyaWEtY29udHJvbHM9XCJ0aW1lLXBpY2tlci1saXN0Ym94XCJcblx0XHRcdFx0XHRhcmlhLWV4cGFuZGVkPXtvcGVufVxuXHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oJ3ctZnVsbCBqdXN0aWZ5LXN0YXJ0JywgY2xhc3NOYW1lKX1cblx0XHRcdFx0XHRkYXRhLXRlc3RpZD17YHRpbWUtcGlja2VyLSR7bmFtZX1gfVxuXHRcdFx0XHRcdGRpc2FibGVkPXtkaXNhYmxlZH1cblx0XHRcdFx0XHRyZWY9e3RyaWdnZXJSZWZ9XG5cdFx0XHRcdFx0cm9sZT1cImNvbWJvYm94XCJcblx0XHRcdFx0XHR2YXJpYW50PVwib3V0bGluZVwiXG5cdFx0XHRcdD5cblx0XHRcdFx0XHQ8Q2xvY2sgY2xhc3NOYW1lPVwibXItMiBoLTQgdy00XCIgLz5cblx0XHRcdFx0XHR7Y3VycmVudFRpbWVTdHJpbmd9XG5cdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0PC9Qb3BvdmVyVHJpZ2dlcj5cblx0XHRcdDxQb3BvdmVyQ29udGVudFxuXHRcdFx0XHRhbGlnbj1cInN0YXJ0XCJcblx0XHRcdFx0Y2xhc3NOYW1lPVwicC0wXCJcblx0XHRcdFx0c3R5bGU9e3sgd2lkdGg6IHRyaWdnZXJXaWR0aCB9fVxuXHRcdFx0PlxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInAtMiBib3JkZXItYlwiPlxuXHRcdFx0XHRcdDxJbnB1dFxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiaC04XCJcblx0XHRcdFx0XHRcdG9uQ2hhbmdlPXsoZSkgPT4gc2V0U2VhcmNoKGUudGFyZ2V0LnZhbHVlKX1cblx0XHRcdFx0XHRcdHBsYWNlaG9sZGVyPVwiU2VhcmNoIHRpbWUuLi5cIlxuXHRcdFx0XHRcdFx0cmVmPXtpbnB1dFJlZn1cblx0XHRcdFx0XHRcdHZhbHVlPXtzZWFyY2h9XG5cdFx0XHRcdFx0Lz5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDxTY3JvbGxBcmVhIGNsYXNzTmFtZT1cImgtWzIwMHB4XVwiIG9uV2hlZWw9e2hhbmRsZVdoZWVsfT5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInAtMVwiPlxuXHRcdFx0XHRcdFx0e2ZpbHRlcmVkT3B0aW9ucy5sZW5ndGggPT09IDAgPyAoXG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwicHktNiB0ZXh0LWNlbnRlciB0ZXh0LXNtIHRleHQtbXV0ZWQtZm9yZWdyb3VuZFwiPlxuXHRcdFx0XHRcdFx0XHRcdE4vQVxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdCkgOiAoXG5cdFx0XHRcdFx0XHRcdGZpbHRlcmVkT3B0aW9ucy5tYXAoKHRpbWUpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCB0aW1lU3RyaW5nID0gZm9ybWF0VGltZSh0aW1lKVxuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IGlzU2VsZWN0ZWQgPSB0aW1lID09PSB2YWx1ZVxuXHRcdFx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdFx0XHQ8YnV0dG9uXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0J3JlbGF0aXZlIGZsZXggdy1mdWxsIGN1cnNvci1wb2ludGVyIHNlbGVjdC1ub25lIGl0ZW1zLWNlbnRlciByb3VuZGVkLXNtIHB4LTIgcHktMS41IHRleHQtc20gb3V0bGluZS1ub25lIHRyYW5zaXRpb24tY29sb3JzIGhvdmVyOmJnLWFjY2VudCBob3Zlcjp0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kJyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpc1NlbGVjdGVkICYmICdiZy1hY2NlbnQgdGV4dC1hY2NlbnQtZm9yZWdyb3VuZCdcblx0XHRcdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0a2V5PXt0aW1lfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvbkNsaWNrPXsoKSA9PiBoYW5kbGVTZWxlY3QodGltZSl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIlxuXHRcdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7dGltZVN0cmluZ31cblx0XHRcdFx0XHRcdFx0XHRcdDwvYnV0dG9uPlxuXHRcdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDwvU2Nyb2xsQXJlYT5cblx0XHRcdDwvUG9wb3ZlckNvbnRlbnQ+XG5cdFx0PC9Qb3BvdmVyPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgVGltZUZvcm1hdCB9IGZyb20gJ0AvdHlwZXMnXG5cbmludGVyZmFjZSBVc2VBdXRvY29tcGxldGVUaW1lcGlja2VyUHJvcHMge1xuXHR0aW1lRm9ybWF0PzogVGltZUZvcm1hdFxuXHRtaW5UaW1lPzogc3RyaW5nXG5cdG1heFRpbWU/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZUF1dG9jb21wbGV0ZVRpbWVwaWNrZXIoe1xuXHR0aW1lRm9ybWF0ID0gJzEyLWhvdXInLFxuXHRtaW5UaW1lID0gJzAwOjAwJyxcblx0bWF4VGltZSA9ICcyMzo0NScsXG59OiBVc2VBdXRvY29tcGxldGVUaW1lcGlja2VyUHJvcHMpIHtcblx0Ly8gR2VuZXJhdGUgdGltZSBvcHRpb25zICgxNS1taW51dGUgaW50ZXJ2YWxzKSB3aXRoaW4gbWluL21heCByYW5nZVxuXHRjb25zdCB0aW1lT3B0aW9ucyA9IHVzZU1lbW8oKCkgPT4ge1xuXHRcdGNvbnN0IHRpbWVzOiBzdHJpbmdbXSA9IFtdXG5cdFx0Y29uc3QgW21pbkhvdXIsIG1pbk1pbnV0ZV0gPSBtaW5UaW1lLnNwbGl0KCc6JykubWFwKE51bWJlcilcblx0XHRjb25zdCBbbWF4SG91ciwgbWF4TWludXRlXSA9IG1heFRpbWUuc3BsaXQoJzonKS5tYXAoTnVtYmVyKVxuXG5cdFx0Y29uc3QgbWluVG90YWxNaW51dGVzID0gbWluSG91ciAqIDYwICsgbWluTWludXRlXG5cdFx0Y29uc3QgbWF4VG90YWxNaW51dGVzID0gbWF4SG91ciAqIDYwICsgbWF4TWludXRlXG5cblx0XHRmb3IgKFxuXHRcdFx0bGV0IHRvdGFsTWludXRlcyA9IG1pblRvdGFsTWludXRlcztcblx0XHRcdHRvdGFsTWludXRlcyA8PSBtYXhUb3RhbE1pbnV0ZXM7XG5cdFx0XHR0b3RhbE1pbnV0ZXMgKz0gMTVcblx0XHQpIHtcblx0XHRcdGNvbnN0IGhvdXJzID0gTWF0aC5mbG9vcih0b3RhbE1pbnV0ZXMgLyA2MClcblx0XHRcdGNvbnN0IG1pbnV0ZXMgPSB0b3RhbE1pbnV0ZXMgJSA2MFxuXG5cdFx0XHRjb25zdCB0aW1lU3RyaW5nID0gYCR7aG91cnMudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpfToke21pbnV0ZXMudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpfWBcblx0XHRcdHRpbWVzLnB1c2godGltZVN0cmluZylcblx0XHR9XG5cblx0XHRyZXR1cm4gdGltZXNcblx0fSwgW21pblRpbWUsIG1heFRpbWVdKVxuXG5cdGNvbnN0IGZvcm1hdFRpbWUgPSAodGltZTogc3RyaW5nKSA9PiB7XG5cdFx0Y29uc3QgW2hvdXJzLCBtaW51dGVzXSA9IHRpbWUuc3BsaXQoJzonKS5tYXAoTnVtYmVyKVxuXHRcdGNvbnN0IHBlcmlvZCA9IGhvdXJzID49IDEyID8gJ1BNJyA6ICdBTSdcblx0XHRjb25zdCBkaXNwbGF5SG91cnMgPSBob3VycyA9PT0gMCA/IDEyIDogaG91cnMgPiAxMiA/IGhvdXJzIC0gMTIgOiBob3Vyc1xuXG5cdFx0aWYgKHRpbWVGb3JtYXQgPT09ICcyNC1ob3VyJykge1xuXHRcdFx0cmV0dXJuIGAke2hvdXJzLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKX06JHttaW51dGVzLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKX1gXG5cdFx0fVxuXG5cdFx0cmV0dXJuIGAke2Rpc3BsYXlIb3Vyc306JHttaW51dGVzLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKX0gJHtwZXJpb2R9YFxuXHR9XG5cblx0cmV0dXJuIHtcblx0XHR0aW1lT3B0aW9ucyxcblx0XHRmb3JtYXRUaW1lLFxuXHR9XG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgQnVzaW5lc3NIb3VycyB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB0eXBlIHsgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IFdFRUtfREFZU19OVU1CRVJfTUFQIH0gZnJvbSAnQC9saWIvY29uc3RhbnRzJ1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIHNwZWNpZmljIGRhdGUgaXMgYSBidXNpbmVzcyBkYXkuXG4gKlxuICogQHBhcmFtIGRhdGUgVGhlIGRhdGUgdG8gY2hlY2tcbiAqIEBwYXJhbSBidXNpbmVzc0hvdXJzIFRoZSBidXNpbmVzcyBob3VycyBjb25maWd1cmF0aW9uIChzaW5nbGUgb3IgYXJyYXkpXG4gKiBAcmV0dXJucyB0cnVlIGlmIHRoZSBkYXRlIGlzIGEgYnVzaW5lc3MgZGF5LCBmYWxzZSBvdGhlcndpc2VcbiAqL1xuZXhwb3J0IGNvbnN0IGlzQnVzaW5lc3NEYXkgPSAoXG5cdGRhdGU6IERheWpzLFxuXHRidXNpbmVzc0hvdXJzPzogQnVzaW5lc3NIb3VycyB8IEJ1c2luZXNzSG91cnNbXVxuKTogYm9vbGVhbiA9PiB7XG5cdGlmICghYnVzaW5lc3NIb3Vycykge1xuXHRcdHJldHVybiB0cnVlXG5cdH1cblxuXHRsZXQgaGFzTWF0Y2ggPSBmYWxzZVxuXHRwcm9jZXNzQnVzaW5lc3NIb3VycyhidXNpbmVzc0hvdXJzLCB7XG5cdFx0ZGF0ZSxcblx0XHRvbk1hdGNoOiAoKSA9PiB7XG5cdFx0XHRoYXNNYXRjaCA9IHRydWVcblx0XHR9LFxuXHR9KVxuXG5cdHJldHVybiBoYXNNYXRjaFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElzQnVzaW5lc3NIb3VyT3B0aW9ucyB7XG5cdGRhdGU6IERheWpzXG5cdGhvdXI/OiBudW1iZXJcblx0bWludXRlPzogbnVtYmVyXG5cdGJ1c2luZXNzSG91cnM/OiBCdXNpbmVzc0hvdXJzIHwgQnVzaW5lc3NIb3Vyc1tdXG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgc3BlY2lmaWMgaG91ciBvbiBhIHNwZWNpZmljIGRhdGUgaXMgd2l0aGluIGJ1c2luZXNzIGhvdXJzLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIGZvciBjaGVja2luZyBidXNpbmVzcyBob3Vyc1xuICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgdGltZSBpcyB3aXRoaW4gYnVzaW5lc3MgaG91cnMsIGZhbHNlIG90aGVyd2lzZVxuICovXG5leHBvcnQgY29uc3QgaXNCdXNpbmVzc0hvdXIgPSAoe1xuXHRkYXRlLFxuXHRob3VyLFxuXHRtaW51dGUgPSAwLFxuXHRidXNpbmVzc0hvdXJzLFxufTogSXNCdXNpbmVzc0hvdXJPcHRpb25zKTogYm9vbGVhbiA9PiB7XG5cdC8vIElmIGJ1c2luZXNzIGhvdXJzIGFyZSBub3QgY29uZmlndXJlZCwgY29uc2lkZXIgZXZlcnl0aGluZyBhcyBcImJ1c2luZXNzIGhvdXJzXCJcblx0aWYgKCFidXNpbmVzc0hvdXJzKSB7XG5cdFx0cmV0dXJuIHRydWVcblx0fVxuXG5cdC8vIElmIGhvdXIgaXMgbm90IHByb3ZpZGVkLCB3ZSBhc3N1bWUgdGhlIHVzZXIgb25seSBjYXJlcyBhYm91dCB0aGUgZGF5XG5cdGlmIChob3VyID09PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gaXNCdXNpbmVzc0RheShkYXRlLCBidXNpbmVzc0hvdXJzKVxuXHR9XG5cblx0bGV0IGlzSW5CdXNpbmVzc0hvdXIgPSBmYWxzZVxuXHRjb25zdCBjdXJyZW50TWludXRlcyA9IGhvdXIgKiA2MCArIG1pbnV0ZVxuXG5cdHByb2Nlc3NCdXNpbmVzc0hvdXJzKGJ1c2luZXNzSG91cnMsIHtcblx0XHRkYXRlLFxuXHRcdG9uTWF0Y2g6IChjb25maWcpID0+IHtcblx0XHRcdC8vIENoZWNrIHRpbWUgYWdhaW5zdCB0aGlzIHNwZWNpZmljIGNvbmZpZ1xuXHRcdFx0Ly8gc3RhcnRUaW1lIGFuZCBlbmRUaW1lIGFyZSBudW1iZXJzICgwLTI0KVxuXHRcdFx0Y29uc3Qgc3RhcnRIID0gY29uZmlnLnN0YXJ0VGltZSA/PyA5XG5cdFx0XHRjb25zdCBlbmRIID0gY29uZmlnLmVuZFRpbWUgPz8gMTdcblxuXHRcdFx0Y29uc3Qgc3RhcnRNaW51dGVzID0gc3RhcnRIICogNjBcblx0XHRcdGNvbnN0IGVuZE1pbnV0ZXMgPSBlbmRIICogNjBcblxuXHRcdFx0aWYgKGN1cnJlbnRNaW51dGVzID49IHN0YXJ0TWludXRlcyAmJiBjdXJyZW50TWludXRlcyA8IGVuZE1pbnV0ZXMpIHtcblx0XHRcdFx0aXNJbkJ1c2luZXNzSG91ciA9IHRydWVcblx0XHRcdH1cblx0XHR9LFxuXHR9KVxuXG5cdHJldHVybiBpc0luQnVzaW5lc3NIb3VyXG59XG5cbi8qKlxuICogSGVscGVyIHRvIHByb2Nlc3MgYSBidXNpbmVzcyBob3VycyBjb25maWd1cmF0aW9uIGFuZCB1cGRhdGUgdGhlIHJhbmdlLlxuICovXG5leHBvcnQgY29uc3QgcHJvY2Vzc0J1c2luZXNzSG91cnMgPSAoXG5cdGJoOiBCdXNpbmVzc0hvdXJzIHwgQnVzaW5lc3NIb3Vyc1tdIHwgdW5kZWZpbmVkLFxuXHRvcHRpb25zOiB7XG5cdFx0ZGF0ZT86IERheWpzXG5cdFx0b25NYXRjaDogKGNvbmZpZzogQnVzaW5lc3NIb3VycykgPT4gdm9pZFxuXHR9XG4pID0+IHtcblx0Y29uc3QgeyBkYXRlLCBvbk1hdGNoIH0gPSBvcHRpb25zXG5cdGlmICghYmgpIHJldHVyblxuXG5cdGNvbnN0IGNvbmZpZ3MgPSBBcnJheS5pc0FycmF5KGJoKSA/IGJoIDogW2JoXVxuXG5cdGZvciAoY29uc3QgY29uZmlnIG9mIGNvbmZpZ3MpIHtcblx0XHRpZiAoZGF0ZSAmJiBjb25maWcuZGF5c09mV2Vlaykge1xuXHRcdFx0Y29uc3QgZGF5T2ZXZWVrID0gZGF0ZS5kYXkoKVxuXHRcdFx0aWYgKFxuXHRcdFx0XHRjb25maWcuZGF5c09mV2Vlay5zb21lKChkKSA9PiBXRUVLX0RBWVNfTlVNQkVSX01BUFtkXSA9PT0gZGF5T2ZXZWVrKVxuXHRcdFx0KSB7XG5cdFx0XHRcdG9uTWF0Y2goY29uZmlnKVxuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRvbk1hdGNoKGNvbmZpZylcblx0XHR9XG5cdH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBCdXNpbmVzc0hvdXJzUmFuZ2Uge1xuXHRtaW5TdGFydDogbnVtYmVyXG5cdG1heEVuZDogbnVtYmVyXG5cdGhhc0J1c2luZXNzSG91cnM6IGJvb2xlYW5cbn1cblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSB1bmlvbiBvZiBidXNpbmVzcyBob3VycyByYW5nZXMgYWNyb3NzIG11bHRpcGxlIGRhdGVzIGFuZC9vciByZXNvdXJjZSBjb25maWd1cmF0aW9ucy5cbiAqL1xuZXhwb3J0IGNvbnN0IGNhbGN1bGF0ZUJ1c2luZXNzSG91cnNSYW5nZSA9IChvcHRpb25zOiB7XG5cdGFsbERhdGVzOiBEYXlqc1tdXG5cdGJ1c2luZXNzSG91cnM/OiBCdXNpbmVzc0hvdXJzIHwgQnVzaW5lc3NIb3Vyc1tdXG5cdHJlc291cmNlQnVzaW5lc3NIb3Vycz86IChCdXNpbmVzc0hvdXJzIHwgQnVzaW5lc3NIb3Vyc1tdKVtdXG5cdGhpZGVOb25CdXNpbmVzc0hvdXJzPzogYm9vbGVhblxufSk6IEJ1c2luZXNzSG91cnNSYW5nZSA9PiB7XG5cdGNvbnN0IHtcblx0XHRhbGxEYXRlcyxcblx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdHJlc291cmNlQnVzaW5lc3NIb3VycyA9IFtdLFxuXHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzLFxuXHR9ID0gb3B0aW9uc1xuXG5cdGxldCBtaW5TdGFydCA9IDI0XG5cdGxldCBtYXhFbmQgPSAwXG5cdGxldCBoYXNCdXNpbmVzc0hvdXJzID0gZmFsc2VcblxuXHRjb25zdCBvbk1hdGNoID0gKGNvbmZpZzogQnVzaW5lc3NIb3VycykgPT4ge1xuXHRcdGhhc0J1c2luZXNzSG91cnMgPSB0cnVlXG5cdFx0bWluU3RhcnQgPSBNYXRoLm1pbihtaW5TdGFydCwgY29uZmlnLnN0YXJ0VGltZSA/PyA5KVxuXHRcdG1heEVuZCA9IE1hdGgubWF4KG1heEVuZCwgY29uZmlnLmVuZFRpbWUgPz8gMTcpXG5cdH1cblxuXHQvLyBQcm9jZXNzIGdsb2JhbCBhbmQgcmVzb3VyY2UgYnVzaW5lc3MgaG91cnMgZm9yIGVhY2ggZGF0ZVxuXHRmb3IgKGNvbnN0IGRhdGUgb2YgYWxsRGF0ZXMpIHtcblx0XHRwcm9jZXNzQnVzaW5lc3NIb3VycyhidXNpbmVzc0hvdXJzLCB7IGRhdGUsIG9uTWF0Y2ggfSlcblx0XHRmb3IgKGNvbnN0IHJiaCBvZiByZXNvdXJjZUJ1c2luZXNzSG91cnMpIHtcblx0XHRcdHByb2Nlc3NCdXNpbmVzc0hvdXJzKHJiaCwgeyBkYXRlLCBvbk1hdGNoIH0pXG5cdFx0fVxuXHR9XG5cblx0Ly8gRmFsbGJhY2sgbG9naWMgaWYgbm8gYnVzaW5lc3MgaG91cnMgZm91bmQgZm9yIHNwZWNpZmljIGRhdGVzXG5cdGlmICghaGFzQnVzaW5lc3NIb3VycyAmJiBoaWRlTm9uQnVzaW5lc3NIb3Vycykge1xuXHRcdHByb2Nlc3NCdXNpbmVzc0hvdXJzKGJ1c2luZXNzSG91cnMsIHsgb25NYXRjaCB9KVxuXHRcdGZvciAoY29uc3QgcmJoIG9mIHJlc291cmNlQnVzaW5lc3NIb3Vycykge1xuXHRcdFx0cHJvY2Vzc0J1c2luZXNzSG91cnMocmJoLCB7IG9uTWF0Y2ggfSlcblx0XHR9XG5cblx0XHQvLyBGaW5hbCBmYWxsYmFjayB0byBkZWZhdWx0IDktMTcgaWYgc3RpbGwgbm90aGluZ1xuXHRcdGlmICghaGFzQnVzaW5lc3NIb3Vycykge1xuXHRcdFx0bWluU3RhcnQgPSA5XG5cdFx0XHRtYXhFbmQgPSAxN1xuXHRcdFx0aGFzQnVzaW5lc3NIb3VycyA9IHRydWVcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4geyBtaW5TdGFydCwgbWF4RW5kLCBoYXNCdXNpbmVzc0hvdXJzIH1cbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBCdXNpbmVzc0hvdXJzIH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHsgY2FsY3VsYXRlQnVzaW5lc3NIb3Vyc1JhbmdlIH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci91dGlscy9idXNpbmVzcy1ob3VycydcbmltcG9ydCBkYXlqcywgeyB0eXBlIERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5cbmV4cG9ydCBjb25zdCBidWlsZERhdGVUaW1lID0gKFxuXHRkYXRlOiBEYXRlLFxuXHR0aW1lOiBzdHJpbmcsXG5cdGlzQWxsRGF5OiBib29sZWFuXG4pOiBEYXlqcyA9PiB7XG5cdGNvbnN0IFtob3VycywgbWludXRlc10gPSB0aW1lLnNwbGl0KCc6JykubWFwKE51bWJlcilcblx0Y29uc3QgYmFzZSA9IGRheWpzKGRhdGUpLmhvdXIoaG91cnMpLm1pbnV0ZShtaW51dGVzKVxuXHRyZXR1cm4gaXNBbGxEYXkgPyBiYXNlLmhvdXIoMCkubWludXRlKDApIDogYmFzZVxufVxuXG5leHBvcnQgY29uc3QgYnVpbGRFbmREYXRlVGltZSA9IChcblx0ZGF0ZTogRGF0ZSxcblx0dGltZTogc3RyaW5nLFxuXHRpc0FsbERheTogYm9vbGVhblxuKTogRGF5anMgPT4ge1xuXHRjb25zdCBbaG91cnMsIG1pbnV0ZXNdID0gdGltZS5zcGxpdCgnOicpLm1hcChOdW1iZXIpXG5cdGNvbnN0IGJhc2UgPSBkYXlqcyhkYXRlKS5ob3VyKGhvdXJzKS5taW51dGUobWludXRlcylcblx0cmV0dXJuIGlzQWxsRGF5ID8gYmFzZS5ob3VyKDIzKS5taW51dGUoNTkpIDogYmFzZVxufVxuXG5leHBvcnQgY29uc3QgZ2V0VGltZUNvbnN0cmFpbnRzID0gKFxuXHRkYXRlOiBEYXRlLFxuXHRidXNpbmVzc0hvdXJzPzogQnVzaW5lc3NIb3VycyB8IEJ1c2luZXNzSG91cnNbXVxuKSA9PiB7XG5cdGlmICghYnVzaW5lc3NIb3VycykgcmV0dXJuIHsgbWluOiAnMDA6MDAnLCBtYXg6ICcyMzo1OScgfVxuXG5cdGNvbnN0IGRheWpzRGF0ZSA9IGRheWpzKGRhdGUpXG5cblx0Y29uc3QgeyBtaW5TdGFydCwgbWF4RW5kLCBoYXNCdXNpbmVzc0hvdXJzIH0gPSBjYWxjdWxhdGVCdXNpbmVzc0hvdXJzUmFuZ2Uoe1xuXHRcdGFsbERhdGVzOiBbZGF5anNEYXRlXSxcblx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzOiBmYWxzZSxcblx0fSlcblxuXHRpZiAoIWhhc0J1c2luZXNzSG91cnMpIHtcblx0XHRyZXR1cm4geyBtaW46ICcwMDowMCcsIG1heDogJzIzOjU5JyB9XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdG1pbjogYCR7bWluU3RhcnQudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpfTowMGAsXG5cdFx0bWF4OiBgJHsobWF4RW5kIC0gMSkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpfTo0NWAsXG5cdH1cbn1cbiIsCiAgICAiaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VNZW1vLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBXZWVrZGF5IH0gZnJvbSAncnJ1bGUnXG5pbXBvcnQgeyBSUnVsZSB9IGZyb20gJ3JydWxlJ1xuaW1wb3J0IHsgQ2FyZCwgQ2FyZENvbnRlbnQsIENhcmRIZWFkZXIsIENhcmRUaXRsZSB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9jYXJkJ1xuaW1wb3J0IHsgQ2hlY2tib3ggfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvY2hlY2tib3gnXG5pbXBvcnQgeyBEYXRlUGlja2VyIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2RhdGUtcGlja2VyJ1xuaW1wb3J0IHsgSW5wdXQgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvaW5wdXQnXG5pbXBvcnQgeyBMYWJlbCB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9sYWJlbCdcbmltcG9ydCB7XG5cdFNlbGVjdCxcblx0U2VsZWN0Q29udGVudCxcblx0U2VsZWN0SXRlbSxcblx0U2VsZWN0VHJpZ2dlcixcblx0U2VsZWN0VmFsdWUsXG59IGZyb20gJ0AvY29tcG9uZW50cy91aS9zZWxlY3QnXG5pbXBvcnQgdHlwZSB7IFJSdWxlT3B0aW9ucyB9IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS90eXBlcydcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcblxuY29uc3QgRlJFUV9NQVAgPSB7XG5cdERBSUxZOiBSUnVsZS5EQUlMWSxcblx0V0VFS0xZOiBSUnVsZS5XRUVLTFksXG5cdE1PTlRITFk6IFJSdWxlLk1PTlRITFksXG5cdFlFQVJMWTogUlJ1bGUuWUVBUkxZLFxufSBhcyBjb25zdFxuY29uc3QgRlJFUV9UT19TVFIgPSBPYmplY3QuZnJvbUVudHJpZXMoXG5cdE9iamVjdC5lbnRyaWVzKEZSRVFfTUFQKS5tYXAoKFtrLCB2XSkgPT4gW3YsIGtdKVxuKSBhcyBSZWNvcmQ8bnVtYmVyLCBzdHJpbmc+XG5jb25zdCBXRUVLREFZUyA9IFtcblx0UlJ1bGUuU1UsXG5cdFJSdWxlLk1PLFxuXHRSUnVsZS5UVSxcblx0UlJ1bGUuV0UsXG5cdFJSdWxlLlRILFxuXHRSUnVsZS5GUixcblx0UlJ1bGUuU0EsXG5dXG5jb25zdCBEQVlfS0VZUyA9IFsnc3VuJywgJ21vbicsICd0dWUnLCAnd2VkJywgJ3RodScsICdmcmknLCAnc2F0J11cbmNvbnN0IHBhcnNlTnVtID0gKHY6IHN0cmluZykgPT4gTWF0aC5tYXgoMSwgTnVtYmVyLnBhcnNlSW50KHYsIDEwKSB8fCAxKVxuXG5jb25zdCBnZXREZXNjcmlwdGlvbiA9IChcblx0b3B0czogUlJ1bGVPcHRpb25zIHwgbnVsbCxcblx0dDogKGs6IHN0cmluZykgPT4gc3RyaW5nXG4pID0+IHtcblx0aWYgKCFvcHRzKSB7XG5cdFx0cmV0dXJuIHQoJ2N1c3RvbVJlY3VycmVuY2UnKVxuXHR9XG5cdHRyeSB7XG5cdFx0Y29uc3QgdGV4dCA9IG5ldyBSUnVsZShvcHRzKS50b1RleHQoKVxuXHRcdHJldHVybiB0ZXh0ICYmICF0ZXh0LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ2Vycm9yJylcblx0XHRcdD8gdGV4dC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHRleHQuc2xpY2UoMSlcblx0XHRcdDogdCgnY3VzdG9tUmVjdXJyZW5jZScpXG5cdH0gY2F0Y2gge1xuXHRcdHJldHVybiB0KCdjdXN0b21SZWN1cnJlbmNlJylcblx0fVxufVxuXG5pbnRlcmZhY2UgUHJvcHMge1xuXHR2YWx1ZT86IFJSdWxlT3B0aW9ucyB8IG51bGxcblx0b25DaGFuZ2U6ICh2OiBSUnVsZU9wdGlvbnMgfCBudWxsKSA9PiB2b2lkXG59XG5cbmV4cG9ydCBjb25zdCBSZWN1cnJlbmNlRWRpdG9yOiBSZWFjdC5GQzxQcm9wcz4gPSAoeyB2YWx1ZSwgb25DaGFuZ2UgfSkgPT4ge1xuXHRjb25zdCB7IHQgfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KChjdHgpID0+ICh7IHQ6IGN0eC50IH0pKVxuXHRjb25zdCBbc2hvdywgc2V0U2hvd10gPSB1c2VTdGF0ZSghIXZhbHVlKVxuXHRjb25zdCBbb3B0cywgc2V0T3B0c10gPSB1c2VTdGF0ZTxSUnVsZU9wdGlvbnMgfCBudWxsPigoKSA9PiB2YWx1ZSB8fCBudWxsKVxuXG5cdGNvbnN0IHdlZWtEYXlzID0gdXNlTWVtbyhcblx0XHQoKSA9PiBEQVlfS0VZUy5tYXAoKGssIGkpID0+ICh7IHZhbHVlOiBXRUVLREFZU1tpXSwgbGFiZWw6IHQoaykgfSkpLFxuXHRcdFt0XVxuXHQpXG5cblx0dXNlRWZmZWN0KCgpID0+IHtcblx0XHRzZXRTaG93KCEhdmFsdWUpXG5cdFx0aWYgKHZhbHVlKSB7XG5cdFx0XHRzZXRPcHRzKHZhbHVlKVxuXHRcdH1cblx0fSwgW3ZhbHVlXSlcblxuXHRjb25zdCB1cGRhdGUgPSAodTogUGFydGlhbDxSUnVsZU9wdGlvbnM+KSA9PiB7XG5cdFx0aWYgKCFvcHRzKSB7XG5cdFx0XHRyZXR1cm5cblx0XHR9XG5cdFx0Y29uc3QgbmV4dCA9IHsgLi4ub3B0cywgLi4udSB9XG5cdFx0c2V0T3B0cyhuZXh0KVxuXHRcdG9uQ2hhbmdlKHNob3cgPyBuZXh0IDogbnVsbClcblx0fVxuXG5cdGNvbnN0IHRvZ2dsZSA9IChjaGVja2VkOiBib29sZWFuKSA9PiB7XG5cdFx0c2V0U2hvdyhjaGVja2VkKVxuXHRcdGlmICghY2hlY2tlZCkge1xuXHRcdFx0b25DaGFuZ2UobnVsbClcblx0XHRcdHJldHVyblxuXHRcdH1cblx0XHRpZiAob3B0cykge1xuXHRcdFx0b25DaGFuZ2Uob3B0cylcblx0XHRcdHJldHVyblxuXHRcdH1cblx0XHRjb25zdCBkZWYgPSB7IGZyZXE6IFJSdWxlLkRBSUxZLCBpbnRlcnZhbDogMSB9IGFzIFJSdWxlT3B0aW9uc1xuXHRcdHNldE9wdHMoZGVmKVxuXHRcdG9uQ2hhbmdlKGRlZilcblx0fVxuXG5cdGNvbnN0IHRvZ2dsZURheSA9IChpOiBudW1iZXIpID0+IHtcblx0XHRjb25zdCBjdXJyID0gKG9wdHM/LmJ5d2Vla2RheSBhcyBXZWVrZGF5W10pIHx8IFtdXG5cdFx0Y29uc3QgZGF5ID0gV0VFS0RBWVNbaV1cblx0XHRjb25zdCBuZXh0ID0gY3Vyci5pbmNsdWRlcyhkYXkpXG5cdFx0XHQ/IGN1cnIuZmlsdGVyKChkKSA9PiBkICE9PSBkYXkpXG5cdFx0XHQ6IFsuLi5jdXJyLCBkYXldXG5cdFx0dXBkYXRlKHsgYnl3ZWVrZGF5OiBuZXh0Lmxlbmd0aCA/IG5leHQgOiB1bmRlZmluZWQgfSlcblx0fVxuXG5cdGNvbnN0IHNldEVuZFR5cGUgPSAodHlwZTogJ25ldmVyJyB8ICdjb3VudCcgfCAndW50aWwnKSA9PiB7XG5cdFx0Y29uc3QgdTogUGFydGlhbDxSUnVsZU9wdGlvbnM+ID0geyBjb3VudDogdW5kZWZpbmVkLCB1bnRpbDogdW5kZWZpbmVkIH1cblx0XHRpZiAodHlwZSA9PT0gJ2NvdW50Jykge1xuXHRcdFx0dS5jb3VudCA9IG9wdHM/LmNvdW50IHx8IDFcblx0XHR9XG5cdFx0aWYgKHR5cGUgPT09ICd1bnRpbCcpIHtcblx0XHRcdHUudW50aWwgPSBvcHRzPy51bnRpbCB8fCBkYXlqcygpLmFkZCgxLCAnbW9udGgnKS5lbmRPZignZGF5JykudG9EYXRlKClcblx0XHR9XG5cdFx0dXBkYXRlKHUpXG5cdH1cblxuXHRjb25zdCBlbmRUeXBlID0gb3B0cz8udW50aWwgPyAndW50aWwnIDogb3B0cz8uY291bnQgPyAnY291bnQnIDogJ25ldmVyJ1xuXHRjb25zdCBmcmVxID0gRlJFUV9UT19TVFJbb3B0cz8uZnJlcSA/PyBSUnVsZS5EQUlMWV0gfHwgJ0RBSUxZJ1xuXHRjb25zdCBieXdlZWtkYXkgPSBBcnJheS5pc0FycmF5KG9wdHM/LmJ5d2Vla2RheSlcblx0XHQ/IG9wdHMuYnl3ZWVrZGF5XG5cdFx0OiBvcHRzPy5ieXdlZWtkYXlcblx0XHRcdD8gW29wdHMuYnl3ZWVrZGF5XVxuXHRcdFx0OiBbXVxuXG5cdHJldHVybiAoXG5cdFx0PENhcmQgZGF0YS10ZXN0aWQ9XCJyZWN1cnJlbmNlLWVkaXRvclwiPlxuXHRcdFx0PENhcmRIZWFkZXIgY2xhc3NOYW1lPVwicGItM1wiPlxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMlwiPlxuXHRcdFx0XHRcdDxDaGVja2JveFxuXHRcdFx0XHRcdFx0Y2hlY2tlZD17c2hvd31cblx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPVwidG9nZ2xlLXJlY3VycmVuY2VcIlxuXHRcdFx0XHRcdFx0aWQ9XCJyZWN1cnJpbmdcIlxuXHRcdFx0XHRcdFx0b25DaGVja2VkQ2hhbmdlPXt0b2dnbGV9XG5cdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHQ8Q2FyZFRpdGxlIGNsYXNzTmFtZT1cInRleHQtc21cIj57dCgncmVwZWF0Jyl9PC9DYXJkVGl0bGU+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHR7c2hvdyAmJiB2YWx1ZSAmJiAoXG5cdFx0XHRcdFx0PHAgY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LW11dGVkLWZvcmVncm91bmRcIj5cblx0XHRcdFx0XHRcdHtnZXREZXNjcmlwdGlvbih2YWx1ZSwgdCl9XG5cdFx0XHRcdFx0PC9wPlxuXHRcdFx0XHQpfVxuXHRcdFx0PC9DYXJkSGVhZGVyPlxuXG5cdFx0XHR7c2hvdyAmJiAoXG5cdFx0XHRcdDxDYXJkQ29udGVudCBjbGFzc05hbWU9XCJwdC0wXCI+XG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTRcIj5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBncmlkLWNvbHMtMiBnYXAtNFwiPlxuXHRcdFx0XHRcdFx0XHQ8ZGl2PlxuXHRcdFx0XHRcdFx0XHRcdDxMYWJlbCBjbGFzc05hbWU9XCJ0ZXh0LXhzXCIgaHRtbEZvcj1cImZyZXF1ZW5jeVwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0e3QoJ3JlcGVhdHMnKX1cblx0XHRcdFx0XHRcdFx0XHQ8L0xhYmVsPlxuXHRcdFx0XHRcdFx0XHRcdDxTZWxlY3Rcblx0XHRcdFx0XHRcdFx0XHRcdG9uVmFsdWVDaGFuZ2U9eyhmKSA9PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR1cGRhdGUoeyBmcmVxOiBGUkVRX01BUFtmIGFzIGtleW9mIHR5cGVvZiBGUkVRX01BUF0gfSlcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlPXtmcmVxfVxuXHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdDxTZWxlY3RUcmlnZ2VyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImgtOFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPVwiZnJlcXVlbmN5LXNlbGVjdFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlkPVwiZnJlcXVlbmN5XCJcblx0XHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0PFNlbGVjdFZhbHVlIC8+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8L1NlbGVjdFRyaWdnZXI+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8U2VsZWN0Q29udGVudD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0e09iamVjdC5rZXlzKEZSRVFfTUFQKS5tYXAoKGYpID0+IChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8U2VsZWN0SXRlbSBrZXk9e2Z9IHZhbHVlPXtmfT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHt0KGYudG9Mb3dlckNhc2UoKSl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9TZWxlY3RJdGVtPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQpKX1cblx0XHRcdFx0XHRcdFx0XHRcdDwvU2VsZWN0Q29udGVudD5cblx0XHRcdFx0XHRcdFx0XHQ8L1NlbGVjdD5cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdDxkaXY+XG5cdFx0XHRcdFx0XHRcdFx0PExhYmVsIGNsYXNzTmFtZT1cInRleHQteHNcIiBodG1sRm9yPVwiaW50ZXJ2YWxcIj5cblx0XHRcdFx0XHRcdFx0XHRcdHt0KCdldmVyeScpfVxuXHRcdFx0XHRcdFx0XHRcdDwvTGFiZWw+XG5cdFx0XHRcdFx0XHRcdFx0PElucHV0XG5cdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJoLThcIlxuXHRcdFx0XHRcdFx0XHRcdFx0aWQ9XCJpbnRlcnZhbFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRtaW49XCIxXCJcblx0XHRcdFx0XHRcdFx0XHRcdG9uQ2hhbmdlPXsoZSkgPT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0dXBkYXRlKHsgaW50ZXJ2YWw6IHBhcnNlTnVtKGUudGFyZ2V0LnZhbHVlKSB9KVxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0dHlwZT1cIm51bWJlclwiXG5cdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZT17b3B0cz8uaW50ZXJ2YWwgfHwgMX1cblx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdFx0XHR7b3B0cz8uZnJlcSA9PT0gUlJ1bGUuV0VFS0xZICYmIChcblx0XHRcdFx0XHRcdFx0PGRpdj5cblx0XHRcdFx0XHRcdFx0XHQ8TGFiZWwgY2xhc3NOYW1lPVwidGV4dC14c1wiPnt0KCdyZXBlYXRPbicpfTwvTGFiZWw+XG5cdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtd3JhcCBnYXAtMSBtdC0xXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHR7d2Vla0RheXMubWFwKChkLCBpKSA9PiAoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0xXCIga2V5PXtkLmxhYmVsfT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8Q2hlY2tib3hcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNoZWNrZWQ9e2J5d2Vla2RheS5pbmNsdWRlcyhkLnZhbHVlKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlkPXtgZGF5LSR7aX1gfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0b25DaGVja2VkQ2hhbmdlPXsoKSA9PiB0b2dnbGVEYXkoaSl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8TGFiZWxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cInRleHQteHMgY3Vyc29yLXBvaW50ZXJcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aHRtbEZvcj17YGRheS0ke2l9YH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR7ZC5sYWJlbH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L0xhYmVsPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0XHRcdCkpfVxuXHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdCl9XG5cblx0XHRcdFx0XHRcdDxkaXY+XG5cdFx0XHRcdFx0XHRcdDxMYWJlbCBjbGFzc05hbWU9XCJ0ZXh0LXhzXCI+e3QoJ2VuZHMnKX08L0xhYmVsPlxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInNwYWNlLXktMiBtdC0xXCI+XG5cdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTJcIj5cblx0XHRcdFx0XHRcdFx0XHRcdDxDaGVja2JveFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjaGVja2VkPXtlbmRUeXBlID09PSAnbmV2ZXInfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZD1cIm5ldmVyXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0b25DaGVja2VkQ2hhbmdlPXsoKSA9PiBzZXRFbmRUeXBlKCduZXZlcicpfVxuXHRcdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0XHRcdDxMYWJlbCBjbGFzc05hbWU9XCJ0ZXh0LXhzXCIgaHRtbEZvcj1cIm5ldmVyXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHt0KCduZXZlcicpfVxuXHRcdFx0XHRcdFx0XHRcdFx0PC9MYWJlbD5cblx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMlwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0PENoZWNrYm94XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNoZWNrZWQ9e2VuZFR5cGUgPT09ICdjb3VudCd9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlkPVwiYWZ0ZXJcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvbkNoZWNrZWRDaGFuZ2U9eygpID0+IHNldEVuZFR5cGUoJ2NvdW50Jyl9XG5cdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdFx0PExhYmVsIGNsYXNzTmFtZT1cInRleHQteHNcIiBodG1sRm9yPVwiYWZ0ZXJcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0e3QoJ2FmdGVyJyl9XG5cdFx0XHRcdFx0XHRcdFx0XHQ8L0xhYmVsPlxuXHRcdFx0XHRcdFx0XHRcdFx0e2VuZFR5cGUgPT09ICdjb3VudCcgJiYgKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8SW5wdXRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJoLTYgdy0xNiB0ZXh0LXhzXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD1cImNvdW50LWlucHV0XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtaW49XCIxXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvbkNoYW5nZT17KGUpID0+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR1cGRhdGUoeyBjb3VudDogcGFyc2VOdW0oZS50YXJnZXQudmFsdWUpIH0pXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU9XCJudW1iZXJcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlPXtvcHRzPy5jb3VudCB8fCAxfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cInRleHQteHNcIj57dCgnb2NjdXJyZW5jZXMnKX08L3NwYW4+XG5cdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTJcIj5cblx0XHRcdFx0XHRcdFx0XHRcdDxDaGVja2JveFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjaGVja2VkPXtlbmRUeXBlID09PSAndW50aWwnfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZD1cIm9uXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0b25DaGVja2VkQ2hhbmdlPXsoKSA9PiBzZXRFbmRUeXBlKCd1bnRpbCcpfVxuXHRcdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0XHRcdDxMYWJlbCBjbGFzc05hbWU9XCJ0ZXh0LXhzXCIgaHRtbEZvcj1cIm9uXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHt0KCdvbicpfVxuXHRcdFx0XHRcdFx0XHRcdFx0PC9MYWJlbD5cblx0XHRcdFx0XHRcdFx0XHRcdHtlbmRUeXBlID09PSAndW50aWwnICYmIChcblx0XHRcdFx0XHRcdFx0XHRcdFx0PERhdGVQaWNrZXJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJoLTZcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRhdGU9e29wdHM/LnVudGlsID8/IHVuZGVmaW5lZH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvbkNoYW5nZT17KGQpID0+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR1cGRhdGUoe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR1bnRpbDogZCA/IGRheWpzKGQpLmVuZE9mKCdkYXknKS50b0RhdGUoKSA6IHVuZGVmaW5lZCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PC9DYXJkQ29udGVudD5cblx0XHRcdCl9XG5cdFx0PC9DYXJkPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB0eXBlICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmZ1bmN0aW9uIENhcmQoeyBjbGFzc05hbWUsIC4uLnByb3BzIH06IFJlYWN0LkNvbXBvbmVudFByb3BzPCdkaXYnPikge1xuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCd0ZXh0LWNhcmQtZm9yZWdyb3VuZCBmbGV4IGZsZXgtY29sIGdhcC02IHJvdW5kZWQteGwgYm9yZGVyIHNoYWRvdy1zbScsXG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHRcdGRhdGEtc2xvdD1cImNhcmRcIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdC8+XG5cdClcbn1cblxuZnVuY3Rpb24gQ2FyZEhlYWRlcih7IGNsYXNzTmFtZSwgLi4ucHJvcHMgfTogUmVhY3QuQ29tcG9uZW50UHJvcHM8J2Rpdic+KSB7XG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0J0Bjb250YWluZXIvY2FyZC1oZWFkZXIgZ3JpZCBhdXRvLXJvd3MtbWluIGdyaWQtcm93cy1bYXV0b19hdXRvXSBpdGVtcy1zdGFydCBnYXAtMS41IHAtNCBwYi0wIGhhcy1kYXRhLVtzbG90PWNhcmQtYWN0aW9uXTpncmlkLWNvbHMtWzFmcl9hdXRvXScsXG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHRcdGRhdGEtc2xvdD1cImNhcmQtaGVhZGVyXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmZ1bmN0aW9uIENhcmRUaXRsZSh7IGNsYXNzTmFtZSwgLi4ucHJvcHMgfTogUmVhY3QuQ29tcG9uZW50UHJvcHM8J2Rpdic+KSB7XG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbignbGVhZGluZy1ub25lIGZvbnQtc2VtaWJvbGQnLCBjbGFzc05hbWUpfVxuXHRcdFx0ZGF0YS1zbG90PVwiY2FyZC10aXRsZVwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0Lz5cblx0KVxufVxuXG5mdW5jdGlvbiBDYXJkRGVzY3JpcHRpb24oeyBjbGFzc05hbWUsIC4uLnByb3BzIH06IFJlYWN0LkNvbXBvbmVudFByb3BzPCdkaXYnPikge1xuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oJ3RleHQtbXV0ZWQtZm9yZWdyb3VuZCB0ZXh0LXNtJywgY2xhc3NOYW1lKX1cblx0XHRcdGRhdGEtc2xvdD1cImNhcmQtZGVzY3JpcHRpb25cIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdC8+XG5cdClcbn1cblxuZnVuY3Rpb24gQ2FyZEFjdGlvbih7IGNsYXNzTmFtZSwgLi4ucHJvcHMgfTogUmVhY3QuQ29tcG9uZW50UHJvcHM8J2Rpdic+KSB7XG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0J2NvbC1zdGFydC0yIHJvdy1zcGFuLTIgcm93LXN0YXJ0LTEgc2VsZi1zdGFydCBqdXN0aWZ5LXNlbGYtZW5kJyxcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0ZGF0YS1zbG90PVwiY2FyZC1hY3Rpb25cIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdC8+XG5cdClcbn1cblxuZnVuY3Rpb24gQ2FyZENvbnRlbnQoeyBjbGFzc05hbWUsIC4uLnByb3BzIH06IFJlYWN0LkNvbXBvbmVudFByb3BzPCdkaXYnPikge1xuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oJ3AtNCBwdC0wJywgY2xhc3NOYW1lKX1cblx0XHRcdGRhdGEtc2xvdD1cImNhcmQtY29udGVudFwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0Lz5cblx0KVxufVxuXG5mdW5jdGlvbiBDYXJkRm9vdGVyKHsgY2xhc3NOYW1lLCAuLi5wcm9wcyB9OiBSZWFjdC5Db21wb25lbnRQcm9wczwnZGl2Jz4pIHtcblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9e2NuKCdmbGV4IGl0ZW1zLWNlbnRlciBweC02IFsuYm9yZGVyLXRdOnB0LTYnLCBjbGFzc05hbWUpfVxuXHRcdFx0ZGF0YS1zbG90PVwiY2FyZC1mb290ZXJcIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdC8+XG5cdClcbn1cblxuZXhwb3J0IHtcblx0Q2FyZCxcblx0Q2FyZEFjdGlvbixcblx0Q2FyZENvbnRlbnQsXG5cdENhcmREZXNjcmlwdGlvbixcblx0Q2FyZEZvb3Rlcixcblx0Q2FyZEhlYWRlcixcblx0Q2FyZFRpdGxlLFxufVxuIiwKICAgICJpbXBvcnQgKiBhcyBTZWxlY3RQcmltaXRpdmUgZnJvbSAnQHJhZGl4LXVpL3JlYWN0LXNlbGVjdCdcbmltcG9ydCB7IENoZWNrSWNvbiwgQ2hldnJvbkRvd25JY29uLCBDaGV2cm9uVXBJY29uIH0gZnJvbSAnbHVjaWRlLXJlYWN0J1xuaW1wb3J0IHR5cGUgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuZnVuY3Rpb24gU2VsZWN0KHtcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTZWxlY3RQcmltaXRpdmUuUm9vdD4pIHtcblx0cmV0dXJuIDxTZWxlY3RQcmltaXRpdmUuUm9vdCBkYXRhLXNsb3Q9XCJzZWxlY3RcIiB7Li4ucHJvcHN9IC8+XG59XG5cbmZ1bmN0aW9uIFNlbGVjdEdyb3VwKHtcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTZWxlY3RQcmltaXRpdmUuR3JvdXA+KSB7XG5cdHJldHVybiA8U2VsZWN0UHJpbWl0aXZlLkdyb3VwIGRhdGEtc2xvdD1cInNlbGVjdC1ncm91cFwiIHsuLi5wcm9wc30gLz5cbn1cblxuZnVuY3Rpb24gU2VsZWN0VmFsdWUoe1xuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNlbGVjdFByaW1pdGl2ZS5WYWx1ZT4pIHtcblx0cmV0dXJuIDxTZWxlY3RQcmltaXRpdmUuVmFsdWUgZGF0YS1zbG90PVwic2VsZWN0LXZhbHVlXCIgey4uLnByb3BzfSAvPlxufVxuXG5mdW5jdGlvbiBTZWxlY3RUcmlnZ2VyKHtcblx0Y2xhc3NOYW1lLFxuXHRzaXplID0gJ2RlZmF1bHQnLFxuXHRjaGlsZHJlbixcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTZWxlY3RQcmltaXRpdmUuVHJpZ2dlcj4gJiB7XG5cdHNpemU/OiAnc20nIHwgJ2RlZmF1bHQnXG59KSB7XG5cdHJldHVybiAoXG5cdFx0PFNlbGVjdFByaW1pdGl2ZS5UcmlnZ2VyXG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcImJvcmRlci1pbnB1dCBkYXRhLVtwbGFjZWhvbGRlcl06dGV4dC1tdXRlZC1mb3JlZ3JvdW5kIFsmX3N2Zzpub3QoW2NsYXNzKj0ndGV4dC0nXSldOnRleHQtbXV0ZWQtZm9yZWdyb3VuZCBmb2N1cy12aXNpYmxlOmJvcmRlci1yaW5nIGZvY3VzLXZpc2libGU6cmluZy1yaW5nLzUwIGFyaWEtaW52YWxpZDpyaW5nLWRlc3RydWN0aXZlLzIwIGRhcms6YXJpYS1pbnZhbGlkOnJpbmctZGVzdHJ1Y3RpdmUvNDAgYXJpYS1pbnZhbGlkOmJvcmRlci1kZXN0cnVjdGl2ZSBkYXJrOmJnLWlucHV0LzMwIGRhcms6aG92ZXI6YmctaW5wdXQvNTAgZmxleCB3LWZpdCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGdhcC0yIHJvdW5kZWQtbWQgYm9yZGVyIGJnLXRyYW5zcGFyZW50IHB4LTMgcHktMiB0ZXh0LXNtIHdoaXRlc3BhY2Utbm93cmFwIHNoYWRvdy14cyB0cmFuc2l0aW9uLVtjb2xvcixib3gtc2hhZG93XSBvdXRsaW5lLW5vbmUgZm9jdXMtdmlzaWJsZTpyaW5nLVszcHhdIGRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZCBkaXNhYmxlZDpvcGFjaXR5LTUwIGRhdGEtW3NpemU9ZGVmYXVsdF06aC05IGRhdGEtW3NpemU9c21dOmgtOCAqOmRhdGEtW3Nsb3Q9c2VsZWN0LXZhbHVlXTpsaW5lLWNsYW1wLTEgKjpkYXRhLVtzbG90PXNlbGVjdC12YWx1ZV06ZmxleCAqOmRhdGEtW3Nsb3Q9c2VsZWN0LXZhbHVlXTppdGVtcy1jZW50ZXIgKjpkYXRhLVtzbG90PXNlbGVjdC12YWx1ZV06Z2FwLTIgWyZfc3ZnXTpwb2ludGVyLWV2ZW50cy1ub25lIFsmX3N2Z106c2hyaW5rLTAgWyZfc3ZnOm5vdChbY2xhc3MqPSdzaXplLSddKV06c2l6ZS00XCIsXG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHRcdGRhdGEtc2l6ZT17c2l6ZX1cblx0XHRcdGRhdGEtc2xvdD1cInNlbGVjdC10cmlnZ2VyXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQ+XG5cdFx0XHR7Y2hpbGRyZW59XG5cdFx0XHQ8U2VsZWN0UHJpbWl0aXZlLkljb24gYXNDaGlsZD5cblx0XHRcdFx0PENoZXZyb25Eb3duSWNvbiBjbGFzc05hbWU9XCJzaXplLTQgb3BhY2l0eS01MFwiIC8+XG5cdFx0XHQ8L1NlbGVjdFByaW1pdGl2ZS5JY29uPlxuXHRcdDwvU2VsZWN0UHJpbWl0aXZlLlRyaWdnZXI+XG5cdClcbn1cblxuZnVuY3Rpb24gU2VsZWN0Q29udGVudCh7XG5cdGNsYXNzTmFtZSxcblx0Y2hpbGRyZW4sXG5cdHBvc2l0aW9uID0gJ3BvcHBlcicsXG5cdGFsaWduID0gJ2NlbnRlcicsXG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgU2VsZWN0UHJpbWl0aXZlLkNvbnRlbnQ+KSB7XG5cdHJldHVybiAoXG5cdFx0PFNlbGVjdFByaW1pdGl2ZS5Qb3J0YWw+XG5cdFx0XHQ8U2VsZWN0UHJpbWl0aXZlLkNvbnRlbnRcblx0XHRcdFx0YWxpZ249e2FsaWdufVxuXHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdCdiZy1wb3BvdmVyIHRleHQtcG9wb3Zlci1mb3JlZ3JvdW5kIGRhdGEtW3N0YXRlPW9wZW5dOmFuaW1hdGUtaW4gZGF0YS1bc3RhdGU9Y2xvc2VkXTphbmltYXRlLW91dCBkYXRhLVtzdGF0ZT1jbG9zZWRdOmZhZGUtb3V0LTAgZGF0YS1bc3RhdGU9b3Blbl06ZmFkZS1pbi0wIGRhdGEtW3N0YXRlPWNsb3NlZF06em9vbS1vdXQtOTUgZGF0YS1bc3RhdGU9b3Blbl06em9vbS1pbi05NSBkYXRhLVtzaWRlPWJvdHRvbV06c2xpZGUtaW4tZnJvbS10b3AtMiBkYXRhLVtzaWRlPWxlZnRdOnNsaWRlLWluLWZyb20tcmlnaHQtMiBkYXRhLVtzaWRlPXJpZ2h0XTpzbGlkZS1pbi1mcm9tLWxlZnQtMiBkYXRhLVtzaWRlPXRvcF06c2xpZGUtaW4tZnJvbS1ib3R0b20tMiByZWxhdGl2ZSB6LTUwIG1heC1oLSgtLXJhZGl4LXNlbGVjdC1jb250ZW50LWF2YWlsYWJsZS1oZWlnaHQpIG1pbi13LVs4cmVtXSBvcmlnaW4tKC0tcmFkaXgtc2VsZWN0LWNvbnRlbnQtdHJhbnNmb3JtLW9yaWdpbikgb3ZlcmZsb3cteC1oaWRkZW4gb3ZlcmZsb3cteS1hdXRvIHJvdW5kZWQtbWQgYm9yZGVyIHNoYWRvdy1tZCcsXG5cdFx0XHRcdFx0cG9zaXRpb24gPT09ICdwb3BwZXInICYmXG5cdFx0XHRcdFx0XHQnZGF0YS1bc2lkZT1ib3R0b21dOnRyYW5zbGF0ZS15LTEgZGF0YS1bc2lkZT1sZWZ0XTotdHJhbnNsYXRlLXgtMSBkYXRhLVtzaWRlPXJpZ2h0XTp0cmFuc2xhdGUteC0xIGRhdGEtW3NpZGU9dG9wXTotdHJhbnNsYXRlLXktMScsXG5cdFx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHRcdCl9XG5cdFx0XHRcdGRhdGEtc2xvdD1cInNlbGVjdC1jb250ZW50XCJcblx0XHRcdFx0cG9zaXRpb249e3Bvc2l0aW9ufVxuXHRcdFx0XHR7Li4ucHJvcHN9XG5cdFx0XHQ+XG5cdFx0XHRcdDxTZWxlY3RTY3JvbGxVcEJ1dHRvbiAvPlxuXHRcdFx0XHQ8U2VsZWN0UHJpbWl0aXZlLlZpZXdwb3J0XG5cdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdCdwLTEnLFxuXHRcdFx0XHRcdFx0cG9zaXRpb24gPT09ICdwb3BwZXInICYmXG5cdFx0XHRcdFx0XHRcdCdoLVt2YXIoLS1yYWRpeC1zZWxlY3QtdHJpZ2dlci1oZWlnaHQpXSB3LWZ1bGwgbWluLXctW3ZhcigtLXJhZGl4LXNlbGVjdC10cmlnZ2VyLXdpZHRoKV0gc2Nyb2xsLW15LTEnXG5cdFx0XHRcdFx0KX1cblx0XHRcdFx0PlxuXHRcdFx0XHRcdHtjaGlsZHJlbn1cblx0XHRcdFx0PC9TZWxlY3RQcmltaXRpdmUuVmlld3BvcnQ+XG5cdFx0XHRcdDxTZWxlY3RTY3JvbGxEb3duQnV0dG9uIC8+XG5cdFx0XHQ8L1NlbGVjdFByaW1pdGl2ZS5Db250ZW50PlxuXHRcdDwvU2VsZWN0UHJpbWl0aXZlLlBvcnRhbD5cblx0KVxufVxuXG5mdW5jdGlvbiBTZWxlY3RMYWJlbCh7XG5cdGNsYXNzTmFtZSxcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTZWxlY3RQcmltaXRpdmUuTGFiZWw+KSB7XG5cdHJldHVybiAoXG5cdFx0PFNlbGVjdFByaW1pdGl2ZS5MYWJlbFxuXHRcdFx0Y2xhc3NOYW1lPXtjbigndGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHB4LTIgcHktMS41IHRleHQteHMnLCBjbGFzc05hbWUpfVxuXHRcdFx0ZGF0YS1zbG90PVwic2VsZWN0LWxhYmVsXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmZ1bmN0aW9uIFNlbGVjdEl0ZW0oe1xuXHRjbGFzc05hbWUsXG5cdGNoaWxkcmVuLFxuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNlbGVjdFByaW1pdGl2ZS5JdGVtPikge1xuXHRyZXR1cm4gKFxuXHRcdDxTZWxlY3RQcmltaXRpdmUuSXRlbVxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XCJmb2N1czpiZy1hY2NlbnQgZm9jdXM6dGV4dC1hY2NlbnQtZm9yZWdyb3VuZCBbJl9zdmc6bm90KFtjbGFzcyo9J3RleHQtJ10pXTp0ZXh0LW11dGVkLWZvcmVncm91bmQgcmVsYXRpdmUgZmxleCB3LWZ1bGwgY3Vyc29yLWRlZmF1bHQgaXRlbXMtY2VudGVyIGdhcC0yIHJvdW5kZWQtc20gcHktMS41IHByLTggcGwtMiB0ZXh0LXNtIG91dGxpbmUtaGlkZGVuIHNlbGVjdC1ub25lIGRhdGEtW2Rpc2FibGVkXTpwb2ludGVyLWV2ZW50cy1ub25lIGRhdGEtW2Rpc2FibGVkXTpvcGFjaXR5LTUwIFsmX3N2Z106cG9pbnRlci1ldmVudHMtbm9uZSBbJl9zdmddOnNocmluay0wIFsmX3N2Zzpub3QoW2NsYXNzKj0nc2l6ZS0nXSldOnNpemUtNCAqOltzcGFuXTpsYXN0OmZsZXggKjpbc3Bhbl06bGFzdDppdGVtcy1jZW50ZXIgKjpbc3Bhbl06bGFzdDpnYXAtMlwiLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJzZWxlY3QtaXRlbVwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0PlxuXHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwiYWJzb2x1dGUgcmlnaHQtMiBmbGV4IHNpemUtMy41IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlclwiPlxuXHRcdFx0XHQ8U2VsZWN0UHJpbWl0aXZlLkl0ZW1JbmRpY2F0b3I+XG5cdFx0XHRcdFx0PENoZWNrSWNvbiBjbGFzc05hbWU9XCJzaXplLTRcIiAvPlxuXHRcdFx0XHQ8L1NlbGVjdFByaW1pdGl2ZS5JdGVtSW5kaWNhdG9yPlxuXHRcdFx0PC9zcGFuPlxuXHRcdFx0PFNlbGVjdFByaW1pdGl2ZS5JdGVtVGV4dD57Y2hpbGRyZW59PC9TZWxlY3RQcmltaXRpdmUuSXRlbVRleHQ+XG5cdFx0PC9TZWxlY3RQcmltaXRpdmUuSXRlbT5cblx0KVxufVxuXG5mdW5jdGlvbiBTZWxlY3RTZXBhcmF0b3Ioe1xuXHRjbGFzc05hbWUsXG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgU2VsZWN0UHJpbWl0aXZlLlNlcGFyYXRvcj4pIHtcblx0cmV0dXJuIChcblx0XHQ8U2VsZWN0UHJpbWl0aXZlLlNlcGFyYXRvclxuXHRcdFx0Y2xhc3NOYW1lPXtjbignYmctYm9yZGVyIHBvaW50ZXItZXZlbnRzLW5vbmUgLW14LTEgbXktMSBoLXB4JywgY2xhc3NOYW1lKX1cblx0XHRcdGRhdGEtc2xvdD1cInNlbGVjdC1zZXBhcmF0b3JcIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdC8+XG5cdClcbn1cblxuZnVuY3Rpb24gU2VsZWN0U2Nyb2xsVXBCdXR0b24oe1xuXHRjbGFzc05hbWUsXG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgU2VsZWN0UHJpbWl0aXZlLlNjcm9sbFVwQnV0dG9uPikge1xuXHRyZXR1cm4gKFxuXHRcdDxTZWxlY3RQcmltaXRpdmUuU2Nyb2xsVXBCdXR0b25cblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCdmbGV4IGN1cnNvci1kZWZhdWx0IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBweS0xJyxcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0ZGF0YS1zbG90PVwic2VsZWN0LXNjcm9sbC11cC1idXR0b25cIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdD5cblx0XHRcdDxDaGV2cm9uVXBJY29uIGNsYXNzTmFtZT1cInNpemUtNFwiIC8+XG5cdFx0PC9TZWxlY3RQcmltaXRpdmUuU2Nyb2xsVXBCdXR0b24+XG5cdClcbn1cblxuZnVuY3Rpb24gU2VsZWN0U2Nyb2xsRG93bkJ1dHRvbih7XG5cdGNsYXNzTmFtZSxcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTZWxlY3RQcmltaXRpdmUuU2Nyb2xsRG93bkJ1dHRvbj4pIHtcblx0cmV0dXJuIChcblx0XHQ8U2VsZWN0UHJpbWl0aXZlLlNjcm9sbERvd25CdXR0b25cblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCdmbGV4IGN1cnNvci1kZWZhdWx0IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBweS0xJyxcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0ZGF0YS1zbG90PVwic2VsZWN0LXNjcm9sbC1kb3duLWJ1dHRvblwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0PlxuXHRcdFx0PENoZXZyb25Eb3duSWNvbiBjbGFzc05hbWU9XCJzaXplLTRcIiAvPlxuXHRcdDwvU2VsZWN0UHJpbWl0aXZlLlNjcm9sbERvd25CdXR0b24+XG5cdClcbn1cblxuZXhwb3J0IHtcblx0U2VsZWN0LFxuXHRTZWxlY3RDb250ZW50LFxuXHRTZWxlY3RHcm91cCxcblx0U2VsZWN0SXRlbSxcblx0U2VsZWN0TGFiZWwsXG5cdFNlbGVjdFNjcm9sbERvd25CdXR0b24sXG5cdFNlbGVjdFNjcm9sbFVwQnV0dG9uLFxuXHRTZWxlY3RTZXBhcmF0b3IsXG5cdFNlbGVjdFRyaWdnZXIsXG5cdFNlbGVjdFZhbHVlLFxufVxuIiwKICAgICJpbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB0eXBlIHsgUmVjdXJyZW5jZUVkaXRTY29wZSB9IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS90eXBlcydcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcblxuZXhwb3J0IGZ1bmN0aW9uIHVzZVJlY3VycmluZ0V2ZW50QWN0aW9ucyhvbkNvbXBsZXRlPzogKCkgPT4gdm9pZCkge1xuXHRjb25zdCB7IHVwZGF0ZVJlY3VycmluZ0V2ZW50LCBkZWxldGVSZWN1cnJpbmdFdmVudCB9ID1cblx0XHR1c2VTbWFydENhbGVuZGFyQ29udGV4dCgoY29udGV4dCkgPT4gKHtcblx0XHRcdHVwZGF0ZVJlY3VycmluZ0V2ZW50OiBjb250ZXh0LnVwZGF0ZVJlY3VycmluZ0V2ZW50LFxuXHRcdFx0ZGVsZXRlUmVjdXJyaW5nRXZlbnQ6IGNvbnRleHQuZGVsZXRlUmVjdXJyaW5nRXZlbnQsXG5cdFx0fSkpXG5cblx0Y29uc3QgW2RpYWxvZ1N0YXRlLCBzZXREaWFsb2dTdGF0ZV0gPSB1c2VTdGF0ZTx7XG5cdFx0aXNPcGVuOiBib29sZWFuXG5cdFx0b3BlcmF0aW9uVHlwZTogJ2VkaXQnIHwgJ2RlbGV0ZSdcblx0XHRldmVudDogQ2FsZW5kYXJFdmVudCB8IG51bGxcblx0XHR1cGRhdGVzPzogUGFydGlhbDxDYWxlbmRhckV2ZW50PlxuXHRcdG9uQ29uZmlybT86IChzY29wZTogUmVjdXJyZW5jZUVkaXRTY29wZSkgPT4gdm9pZFxuXHR9Pih7XG5cdFx0aXNPcGVuOiBmYWxzZSxcblx0XHRvcGVyYXRpb25UeXBlOiAnZWRpdCcsXG5cdFx0ZXZlbnQ6IG51bGwsXG5cdH0pXG5cblx0Y29uc3Qgb3BlbkVkaXREaWFsb2cgPSB1c2VDYWxsYmFjayhcblx0XHQoZXZlbnQ6IENhbGVuZGFyRXZlbnQsIHVwZGF0ZXM6IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD4pID0+IHtcblx0XHRcdHNldERpYWxvZ1N0YXRlKHtcblx0XHRcdFx0aXNPcGVuOiB0cnVlLFxuXHRcdFx0XHRvcGVyYXRpb25UeXBlOiAnZWRpdCcsXG5cdFx0XHRcdGV2ZW50LFxuXHRcdFx0XHR1cGRhdGVzLFxuXHRcdFx0XHRvbkNvbmZpcm06IChzY29wZTogUmVjdXJyZW5jZUVkaXRTY29wZSkgPT4ge1xuXHRcdFx0XHRcdHVwZGF0ZVJlY3VycmluZ0V2ZW50KGV2ZW50LCB1cGRhdGVzLCB7XG5cdFx0XHRcdFx0XHRzY29wZSxcblx0XHRcdFx0XHRcdGV2ZW50RGF0ZTogZXZlbnQuc3RhcnQsXG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0fSxcblx0XHRcdH0pXG5cdFx0fSxcblx0XHRbdXBkYXRlUmVjdXJyaW5nRXZlbnRdXG5cdClcblxuXHRjb25zdCBvcGVuRGVsZXRlRGlhbG9nID0gdXNlQ2FsbGJhY2soXG5cdFx0KGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB7XG5cdFx0XHRzZXREaWFsb2dTdGF0ZSh7XG5cdFx0XHRcdGlzT3BlbjogdHJ1ZSxcblx0XHRcdFx0b3BlcmF0aW9uVHlwZTogJ2RlbGV0ZScsXG5cdFx0XHRcdGV2ZW50LFxuXHRcdFx0XHRvbkNvbmZpcm06IChzY29wZTogUmVjdXJyZW5jZUVkaXRTY29wZSkgPT4ge1xuXHRcdFx0XHRcdGRlbGV0ZVJlY3VycmluZ0V2ZW50KGV2ZW50LCB7XG5cdFx0XHRcdFx0XHRzY29wZSxcblx0XHRcdFx0XHRcdGV2ZW50RGF0ZTogZXZlbnQuc3RhcnQsXG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0fSxcblx0XHRcdH0pXG5cdFx0fSxcblx0XHRbZGVsZXRlUmVjdXJyaW5nRXZlbnRdXG5cdClcblxuXHRjb25zdCBjbG9zZURpYWxvZyA9IHVzZUNhbGxiYWNrKCgpID0+IHtcblx0XHRzZXREaWFsb2dTdGF0ZSh7XG5cdFx0XHRpc09wZW46IGZhbHNlLFxuXHRcdFx0b3BlcmF0aW9uVHlwZTogJ2VkaXQnLFxuXHRcdFx0ZXZlbnQ6IG51bGwsXG5cdFx0fSlcblx0fSwgW10pXG5cblx0Y29uc3QgaGFuZGxlQ29uZmlybSA9IHVzZUNhbGxiYWNrKFxuXHRcdChzY29wZTogUmVjdXJyZW5jZUVkaXRTY29wZSkgPT4ge1xuXHRcdFx0aWYgKGRpYWxvZ1N0YXRlLm9uQ29uZmlybSkge1xuXHRcdFx0XHRkaWFsb2dTdGF0ZS5vbkNvbmZpcm0oc2NvcGUpXG5cdFx0XHR9XG5cdFx0XHRjbG9zZURpYWxvZygpXG5cdFx0XHQvLyBDYWxsIG9uQ29tcGxldGUgdG8gY2xvc2UgdGhlIHBhcmVudCBmb3JtXG5cdFx0XHRvbkNvbXBsZXRlPy4oKVxuXHRcdH0sXG5cdFx0W2RpYWxvZ1N0YXRlLCBjbG9zZURpYWxvZywgb25Db21wbGV0ZV1cblx0KVxuXG5cdHJldHVybiB7XG5cdFx0ZGlhbG9nU3RhdGUsXG5cdFx0b3BlbkVkaXREaWFsb2csXG5cdFx0b3BlbkRlbGV0ZURpYWxvZyxcblx0XHRjbG9zZURpYWxvZyxcblx0XHRoYW5kbGVDb25maXJtLFxuXHR9XG59XG4iLAogICAgImltcG9ydCB7XG5cdERpYWxvZyxcblx0RGlhbG9nQ29udGVudCxcblx0RGlhbG9nRGVzY3JpcHRpb24sXG5cdERpYWxvZ0hlYWRlcixcblx0RGlhbG9nVGl0bGUsXG59IGZyb20gJ0AvY29tcG9uZW50cy91aS9kaWFsb2cnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICcuLi90eXBlcydcbmltcG9ydCB7IEV2ZW50Rm9ybSB9IGZyb20gJy4vZXZlbnQtZm9ybSdcblxuZXhwb3J0IGNvbnN0IEV2ZW50Rm9ybURpYWxvZyA9ICgpID0+IHtcblx0Y29uc3Qge1xuXHRcdHQsXG5cdFx0c2VsZWN0ZWRFdmVudCxcblx0XHRpc0V2ZW50Rm9ybU9wZW4sXG5cdFx0Y2xvc2VFdmVudEZvcm0sXG5cdFx0YWRkRXZlbnQsXG5cdFx0dXBkYXRlRXZlbnQsXG5cdFx0ZGVsZXRlRXZlbnQsXG5cdFx0cmVuZGVyRXZlbnRGb3JtLFxuXHR9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKGNvbnRleHQpID0+ICh7XG5cdFx0dDogY29udGV4dC50LFxuXHRcdHNlbGVjdGVkRXZlbnQ6IGNvbnRleHQuc2VsZWN0ZWRFdmVudCxcblx0XHRpc0V2ZW50Rm9ybU9wZW46IGNvbnRleHQuaXNFdmVudEZvcm1PcGVuLFxuXHRcdGNsb3NlRXZlbnRGb3JtOiBjb250ZXh0LmNsb3NlRXZlbnRGb3JtLFxuXHRcdGFkZEV2ZW50OiBjb250ZXh0LmFkZEV2ZW50LFxuXHRcdHVwZGF0ZUV2ZW50OiBjb250ZXh0LnVwZGF0ZUV2ZW50LFxuXHRcdGRlbGV0ZUV2ZW50OiBjb250ZXh0LmRlbGV0ZUV2ZW50LFxuXHRcdHJlbmRlckV2ZW50Rm9ybTogY29udGV4dC5yZW5kZXJFdmVudEZvcm0sXG5cdH0pKVxuXG5cdGNvbnN0IGhhbmRsZU9uVXBkYXRlID0gKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB7XG5cdFx0dXBkYXRlRXZlbnQoZXZlbnQuaWQsIGV2ZW50KVxuXHR9XG5cblx0Y29uc3QgaGFuZGxlT25EZWxldGUgPSAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHtcblx0XHRkZWxldGVFdmVudChldmVudC5pZClcblx0fVxuXG5cdGNvbnN0IGV2ZW50Rm9ybVByb3BzID0ge1xuXHRcdG9wZW46IGlzRXZlbnRGb3JtT3Blbixcblx0XHRvbkNsb3NlOiBjbG9zZUV2ZW50Rm9ybSxcblx0XHRzZWxlY3RlZEV2ZW50LFxuXHRcdG9uQWRkOiBhZGRFdmVudCxcblx0XHRvblVwZGF0ZTogaGFuZGxlT25VcGRhdGUsXG5cdFx0b25EZWxldGU6IGhhbmRsZU9uRGVsZXRlLFxuXHR9XG5cblx0aWYgKHJlbmRlckV2ZW50Rm9ybSkge1xuXHRcdHJldHVybiByZW5kZXJFdmVudEZvcm0oZXZlbnRGb3JtUHJvcHMpXG5cdH1cblxuXHRyZXR1cm4gKFxuXHRcdDxEaWFsb2cgb25PcGVuQ2hhbmdlPXtjbG9zZUV2ZW50Rm9ybX0gb3Blbj17aXNFdmVudEZvcm1PcGVufT5cblx0XHRcdDxEaWFsb2dDb250ZW50IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgaC1bOTB2aF0gdy1bOTB2d10gbWF4LXctWzUwMHB4XSBwLTQgc206cC02IG92ZXJmbG93LWhpZGRlbiBnYXAtMFwiPlxuXHRcdFx0XHQ8RGlhbG9nSGVhZGVyIGNsYXNzTmFtZT1cIm1iLTIgc206bWItNCBzaHJpbmstMFwiPlxuXHRcdFx0XHRcdDxEaWFsb2dUaXRsZSBjbGFzc05hbWU9XCJ0ZXh0LWJhc2Ugc206dGV4dC1sZ1wiPlxuXHRcdFx0XHRcdFx0e3NlbGVjdGVkRXZlbnQ/LmlkID8gdCgnZWRpdEV2ZW50JykgOiB0KCdjcmVhdGVFdmVudCcpfVxuXHRcdFx0XHRcdDwvRGlhbG9nVGl0bGU+XG5cdFx0XHRcdFx0PERpYWxvZ0Rlc2NyaXB0aW9uIGNsYXNzTmFtZT1cInRleHQteHMgc206dGV4dC1zbVwiPlxuXHRcdFx0XHRcdFx0e3NlbGVjdGVkRXZlbnQ/LmlkID8gdCgnZWRpdEV2ZW50RGV0YWlscycpIDogdCgnYWRkTmV3RXZlbnQnKX1cblx0XHRcdFx0XHQ8L0RpYWxvZ0Rlc2NyaXB0aW9uPlxuXHRcdFx0XHQ8L0RpYWxvZ0hlYWRlcj5cblxuXHRcdFx0XHQ8RXZlbnRGb3JtIHsuLi5ldmVudEZvcm1Qcm9wc30gLz5cblx0XHRcdDwvRGlhbG9nQ29udGVudD5cblx0XHQ8L0RpYWxvZz5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgeyBDYWxlbmRhciBhcyBDYWxlbmRhckljb24sIERvd25sb2FkLCBNZW51LCBQbHVzIH0gZnJvbSAnbHVjaWRlLXJlYWN0J1xuaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2J1dHRvbidcbmltcG9ydCB7XG5cdFBvcG92ZXIsXG5cdFBvcG92ZXJDb250ZW50LFxuXHRQb3BvdmVyVHJpZ2dlcixcbn0gZnJvbSAnQC9jb21wb25lbnRzL3VpL3BvcG92ZXInXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgZG93bmxvYWRJQ2FsZW5kYXIgfSBmcm9tICdAL2xpYi91dGlscy9leHBvcnQtaWNhbCdcbmltcG9ydCBUaXRsZUNvbnRlbnQgZnJvbSAnLi90aXRsZS1jb250ZW50J1xuaW1wb3J0IFZpZXdDb250cm9scyBmcm9tICcuL3ZpZXctY29udHJvbHMnXG5cbmludGVyZmFjZSBIZWFkZXJQcm9wcyB7XG5cdGNsYXNzTmFtZT86IHN0cmluZ1xufVxuXG5jb25zdCBIZWFkZXI6IFJlYWN0LkZDPEhlYWRlclByb3BzPiA9ICh7IGNsYXNzTmFtZSA9ICcnIH0pID0+IHtcblx0Y29uc3Qge1xuXHRcdHZpZXcsXG5cdFx0c2V0Vmlldyxcblx0XHRuZXh0UGVyaW9kLFxuXHRcdHByZXZQZXJpb2QsXG5cdFx0dG9kYXksXG5cdFx0b3BlbkV2ZW50Rm9ybSxcblx0XHRoZWFkZXJDb21wb25lbnQsXG5cdFx0aGVhZGVyQ2xhc3NOYW1lLFxuXHRcdHJhd0V2ZW50cyxcblx0XHR0LFxuXHR9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKGN0eCkgPT4gKHtcblx0XHR2aWV3OiBjdHgudmlldyxcblx0XHRzZXRWaWV3OiBjdHguc2V0Vmlldyxcblx0XHRuZXh0UGVyaW9kOiBjdHgubmV4dFBlcmlvZCxcblx0XHRwcmV2UGVyaW9kOiBjdHgucHJldlBlcmlvZCxcblx0XHR0b2RheTogY3R4LnRvZGF5LFxuXHRcdG9wZW5FdmVudEZvcm06IGN0eC5vcGVuRXZlbnRGb3JtLFxuXHRcdGhlYWRlckNvbXBvbmVudDogY3R4LmhlYWRlckNvbXBvbmVudCxcblx0XHRoZWFkZXJDbGFzc05hbWU6IGN0eC5oZWFkZXJDbGFzc05hbWUsXG5cdFx0cmF3RXZlbnRzOiBjdHgucmF3RXZlbnRzLFxuXHRcdHQ6IGN0eC50LFxuXHR9KSlcblxuXHRjb25zdCBbbW9iaWxlTWVudU9wZW4sIHNldE1vYmlsZU1lbnVPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKVxuXG5cdGNvbnN0IGNsb3NlTW9iaWxlTWVudSA9ICgpID0+IHNldE1vYmlsZU1lbnVPcGVuKGZhbHNlKVxuXG5cdGNvbnN0IGhhbmRsZUV4cG9ydCA9ICgpID0+IHtcblx0XHRjb25zdCBmaWxlbmFtZSA9IGBpbGFteS1jYWxlbmRhci0ke25ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zcGxpdCgnVCcpWzBdfS5pY3NgXG5cdFx0ZG93bmxvYWRJQ2FsZW5kYXIocmF3RXZlbnRzLCBmaWxlbmFtZSwgJ2lsYW15IENhbGVuZGFyJylcblx0XHRjbG9zZU1vYmlsZU1lbnUoKVxuXHR9XG5cblx0Y29uc3QgTmV3RXZlbnRCdXR0b24gPSAoKSA9PiAoXG5cdFx0PEJ1dHRvblxuXHRcdFx0Y2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTFcIlxuXHRcdFx0b25DbGljaz17KCkgPT4gb3BlbkV2ZW50Rm9ybSgpfVxuXHRcdFx0c2l6ZT1cInNtXCJcblx0XHRcdHZhcmlhbnQ9XCJkZWZhdWx0XCJcblx0XHQ+XG5cdFx0XHQ8UGx1cyBjbGFzc05hbWU9XCJoLTQgdy00XCIgLz5cblx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cImhpZGRlbiBANHhsOmlubGluZVwiPnt0KCduZXcnKX08L3NwYW4+XG5cdFx0PC9CdXR0b24+XG5cdClcblxuXHRjb25zdCBFeHBvcnRCdXR0b24gPSAoeyBmdWxsV2lkdGggPSBmYWxzZSB9OiB7IGZ1bGxXaWR0aD86IGJvb2xlYW4gfSkgPT4gKFxuXHRcdDxCdXR0b25cblx0XHRcdGNsYXNzTmFtZT17Y24oJ2ZsZXggaXRlbXMtY2VudGVyIGdhcC0xJywgZnVsbFdpZHRoICYmICd3LWZ1bGwgZ2FwLTInKX1cblx0XHRcdG9uQ2xpY2s9e2hhbmRsZUV4cG9ydH1cblx0XHRcdHNpemU9XCJzbVwiXG5cdFx0XHR2YXJpYW50PVwib3V0bGluZVwiXG5cdFx0PlxuXHRcdFx0PERvd25sb2FkIGNsYXNzTmFtZT1cImgtNCB3LTRcIiAvPlxuXHRcdFx0e2Z1bGxXaWR0aCA/IChcblx0XHRcdFx0YCR7dCgnZXhwb3J0Jyl9IENhbGVuZGFyICguaWNzKWBcblx0XHRcdCkgOiAoXG5cdFx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cImhpZGRlbiBANHhsL2Jhc2UtaGVhZGVyOmlubGluZVwiPnt0KCdleHBvcnQnKX08L3NwYW4+XG5cdFx0XHQpfVxuXHRcdDwvQnV0dG9uPlxuXHQpXG5cblx0aWYgKGhlYWRlckNvbXBvbmVudCkge1xuXHRcdHJldHVybiBoZWFkZXJDb21wb25lbnRcblx0fVxuXG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPVwiQGNvbnRhaW5lci9iYXNlLWhlYWRlciB3LWZ1bGxcIlxuXHRcdFx0ZGF0YS10ZXN0aWQ9XCJjYWxlbmRhci1oZWFkZXJcIlxuXHRcdD5cblx0XHRcdDxkaXZcblx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHQnZmxleCBqdXN0aWZ5LWNlbnRlciBAMnhsL2Jhc2UtaGVhZGVyOmp1c3RpZnktYmV0d2VlbiBmbGV4LXdyYXAgaXRlbXMtY2VudGVyIGdhcC0yJyxcblx0XHRcdFx0XHRjbGFzc05hbWUsXG5cdFx0XHRcdFx0aGVhZGVyQ2xhc3NOYW1lXG5cdFx0XHRcdCl9XG5cdFx0XHQ+XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LXdyYXAgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0xIEAyeGwvYmFzZS1oZWFkZXI6anVzdGlmeS1zdGFydFwiPlxuXHRcdFx0XHRcdDxDYWxlbmRhckljb24gY2xhc3NOYW1lPVwiaC01IHctNVwiIC8+XG5cdFx0XHRcdFx0PFRpdGxlQ29udGVudCAvPlxuXHRcdFx0XHQ8L2Rpdj5cblxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC13cmFwIGp1c3RpZnktc3RhcnQgQHhsL2Jhc2UtaGVhZGVyOmp1c3RpZnktY2VudGVyIGdhcC0xIEA0eGwvYmFzZS1oZWFkZXI6anVzdGlmeS1lbmQgb3ZlcmZsb3cteC1hdXRvXCI+XG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJoaWRkZW4gQG1kL2Jhc2UtaGVhZGVyOmZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktc3RhcnQgZ2FwLTFcIj5cblx0XHRcdFx0XHRcdDxWaWV3Q29udHJvbHNcblx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwianVzdGlmeS1lbmRcIlxuXHRcdFx0XHRcdFx0XHRjdXJyZW50Vmlldz17dmlld31cblx0XHRcdFx0XHRcdFx0b25DaGFuZ2U9e3NldFZpZXd9XG5cdFx0XHRcdFx0XHRcdG9uTmV4dD17bmV4dFBlcmlvZH1cblx0XHRcdFx0XHRcdFx0b25QcmV2aW91cz17cHJldlBlcmlvZH1cblx0XHRcdFx0XHRcdFx0b25Ub2RheT17dG9kYXl9XG5cdFx0XHRcdFx0XHRcdHZhcmlhbnQ9XCJkZWZhdWx0XCJcblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHQ8TmV3RXZlbnRCdXR0b24gLz5cblx0XHRcdFx0XHRcdDxFeHBvcnRCdXR0b24gLz5cblx0XHRcdFx0XHQ8L2Rpdj5cblxuXHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1lbmQgZ2FwLTEgQG1kL2Jhc2UtaGVhZGVyOmhpZGRlblwiPlxuXHRcdFx0XHRcdFx0PE5ld0V2ZW50QnV0dG9uIC8+XG5cdFx0XHRcdFx0XHQ8UG9wb3ZlciBvbk9wZW5DaGFuZ2U9e3NldE1vYmlsZU1lbnVPcGVufSBvcGVuPXttb2JpbGVNZW51T3Blbn0+XG5cdFx0XHRcdFx0XHRcdDxQb3BvdmVyVHJpZ2dlciBhc0NoaWxkPlxuXHRcdFx0XHRcdFx0XHRcdDxCdXR0b24gc2l6ZT1cInNtXCIgdmFyaWFudD1cIm91dGxpbmVcIj5cblx0XHRcdFx0XHRcdFx0XHRcdDxNZW51IGNsYXNzTmFtZT1cImgtNCB3LTRcIiAvPlxuXHRcdFx0XHRcdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0XHRcdFx0XHQ8L1BvcG92ZXJUcmlnZ2VyPlxuXHRcdFx0XHRcdFx0XHQ8UG9wb3ZlckNvbnRlbnQgYWxpZ249XCJlbmRcIiBjbGFzc05hbWU9XCJ3LVsyNDBweF0gcC0yXCI+XG5cdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTJcIj5cblx0XHRcdFx0XHRcdFx0XHRcdDxWaWV3Q29udHJvbHNcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y3VycmVudFZpZXc9e3ZpZXd9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9uQ2hhbmdlPXsodikgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHNldFZpZXcodilcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbG9zZU1vYmlsZU1lbnUoKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvbk5leHQ9eygpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRuZXh0UGVyaW9kKClcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbG9zZU1vYmlsZU1lbnUoKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvblByZXZpb3VzPXsoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0cHJldlBlcmlvZCgpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xvc2VNb2JpbGVNZW51KClcblx0XHRcdFx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0b25Ub2RheT17KCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRvZGF5KClcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbG9zZU1vYmlsZU1lbnUoKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YXJpYW50PVwiZ3JpZFwiXG5cdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJwdC0yIGJvcmRlci10XCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxFeHBvcnRCdXR0b24gZnVsbFdpZHRoIC8+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0PC9Qb3BvdmVyQ29udGVudD5cblx0XHRcdFx0XHRcdDwvUG9wb3Zlcj5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQ8L2Rpdj5cblx0XHQ8L2Rpdj5cblx0KVxufVxuXG5leHBvcnQgZGVmYXVsdCBIZWFkZXJcbiIsCiAgICAiaW1wb3J0IHsgUlJ1bGUgfSBmcm9tICdycnVsZSdcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCBkYXlqcywgeyB0eXBlIERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5cbmNvbnN0IENSTEYgPSAnXFxyXFxuJ1xuXG5jb25zdCBVVENfVlRJTUVaT05FID0gW1xuXHQnQkVHSU46VlRJTUVaT05FJyxcblx0J1RaSUQ6VVRDJyxcblx0J0JFR0lOOlNUQU5EQVJEJyxcblx0J0RUU1RBUlQ6MTk3MDAxMDFUMDAwMDAwJyxcblx0J1RaTkFNRTpVVEMnLFxuXHQnVFpPRkZTRVRGUk9NOiswMDAwJyxcblx0J1RaT0ZGU0VUVE86KzAwMDAnLFxuXHQnRU5EOlNUQU5EQVJEJyxcblx0J0VORDpWVElNRVpPTkUnLFxuXS5qb2luKENSTEYpXG5cbmNvbnN0IGVzY2FwZVRleHQgPSAodGV4dDogc3RyaW5nKTogc3RyaW5nID0+IHtcblx0cmV0dXJuIHRleHRcblx0XHQucmVwbGFjZUFsbCgnXFxcXCcsICdcXFxcXFxcXCcpXG5cdFx0LnJlcGxhY2VBbGwoJzsnLCAnXFxcXDsnKVxuXHRcdC5yZXBsYWNlQWxsKCcsJywgJ1xcXFwsJylcblx0XHQucmVwbGFjZUFsbCgnXFxuJywgJ1xcXFxuJylcblx0XHQucmVwbGFjZUFsbCgnXFxyJywgJycpXG59XG5cbmNvbnN0IGZvcm1hdERhdGUgPSAoZGF0ZTogRGF5anMsIGlzQWxsRGF5ID0gZmFsc2UpOiBzdHJpbmcgPT4ge1xuXHRyZXR1cm4gaXNBbGxEYXlcblx0XHQ/IGRhdGUuZm9ybWF0KCdZWVlZTU1ERCcpXG5cdFx0OiBkYXRlLnV0YygpLmZvcm1hdCgnWVlZWU1NRERbVF1ISG1tc3NbWl0nKVxufVxuXG5jb25zdCBnZXRVSUQgPSAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpOiBzdHJpbmcgPT4ge1xuXHRyZXR1cm4gZXZlbnQudWlkIHx8IGAke2V2ZW50LmlkfUBpbGFteS5jYWxlbmRhcmBcbn1cblxuY29uc3QgZm9ybWF0UlJ1bGUgPSAocnJ1bGVPcHRpb25zOiB1bmtub3duKTogc3RyaW5nID0+IHtcblx0dHJ5IHtcblx0XHRjb25zdCBycnVsZVN0cmluZyA9IG5ldyBSUnVsZShcblx0XHRcdHJydWxlT3B0aW9ucyBhcyBDb25zdHJ1Y3RvclBhcmFtZXRlcnM8dHlwZW9mIFJSdWxlPlswXVxuXHRcdCkudG9TdHJpbmcoKVxuXHRcdHJldHVybiAoXG5cdFx0XHRycnVsZVN0cmluZy5zcGxpdCgnXFxuJykuZmluZCgobGluZSkgPT4gbGluZS5zdGFydHNXaXRoKCdSUlVMRTonKSkgfHwgJydcblx0XHQpXG5cdH0gY2F0Y2gge1xuXHRcdHJldHVybiAnJ1xuXHR9XG59XG5cbmNvbnN0IGNvbnZlcnRFdmVudFRvVkV2ZW50ID0gKGV2ZW50OiBDYWxlbmRhckV2ZW50KTogc3RyaW5nID0+IHtcblx0Y29uc3QgdGltZXN0YW1wID0gZGF5anMoKS51dGMoKS5mb3JtYXQoJ1lZWVlNTUREW1RdSEhtbXNzW1pdJylcblx0Y29uc3QgZGF0ZVBhcmFtID0gZXZlbnQuYWxsRGF5ID8gJztWQUxVRT1EQVRFJyA6ICcnXG5cdGNvbnN0IHJydWxlID0gZXZlbnQucnJ1bGUgPyBmb3JtYXRSUnVsZShldmVudC5ycnVsZSkgOiAnJ1xuXG5cdGNvbnN0IGV4ZGF0ZXMgPSBldmVudC5leGRhdGVzPy5sZW5ndGhcblx0XHQ/IGV2ZW50LmV4ZGF0ZXMubWFwKChkKSA9PiBmb3JtYXREYXRlKGRheWpzKGQpLCBldmVudC5hbGxEYXkpKS5qb2luKCcsJylcblx0XHQ6IG51bGxcblxuXHRjb25zdCByZWN1cnJlbmNlSWQgPSBldmVudC5yZWN1cnJlbmNlSWRcblx0XHQ/IGZvcm1hdERhdGUoZGF5anMoZXZlbnQucmVjdXJyZW5jZUlkKSwgZXZlbnQuYWxsRGF5KVxuXHRcdDogbnVsbFxuXG5cdGNvbnN0IGxpbmVzID0gW1xuXHRcdCdCRUdJTjpWRVZFTlQnLFxuXHRcdGBVSUQ6JHtnZXRVSUQoZXZlbnQpfWAsXG5cdFx0YERUU1RBUlQke2RhdGVQYXJhbX06JHtmb3JtYXREYXRlKGV2ZW50LnN0YXJ0LCBldmVudC5hbGxEYXkpfWAsXG5cdFx0YERURU5EJHtkYXRlUGFyYW19OiR7Zm9ybWF0RGF0ZShldmVudC5lbmQsIGV2ZW50LmFsbERheSl9YCxcblx0XHRgU1VNTUFSWToke2VzY2FwZVRleHQoZXZlbnQudGl0bGUpfWAsXG5cdFx0ZXZlbnQuZGVzY3JpcHRpb24gJiYgYERFU0NSSVBUSU9OOiR7ZXNjYXBlVGV4dChldmVudC5kZXNjcmlwdGlvbil9YCxcblx0XHRldmVudC5sb2NhdGlvbiAmJiBgTE9DQVRJT046JHtlc2NhcGVUZXh0KGV2ZW50LmxvY2F0aW9uKX1gLFxuXHRcdHJydWxlLFxuXHRcdGV4ZGF0ZXMgJiYgYEVYREFURToke2V4ZGF0ZXN9YCxcblx0XHRyZWN1cnJlbmNlSWQgJiYgYFJFQ1VSUkVOQ0UtSUQ6JHtyZWN1cnJlbmNlSWR9YCxcblx0XHRgRFRTVEFNUDoke3RpbWVzdGFtcH1gLFxuXHRcdGBDUkVBVEVEOiR7dGltZXN0YW1wfWAsXG5cdFx0YExBU1QtTU9ESUZJRUQ6JHt0aW1lc3RhbXB9YCxcblx0XHQnU1RBVFVTOkNPTkZJUk1FRCcsXG5cdFx0J1NFUVVFTkNFOjAnLFxuXHRcdCdUUkFOU1A6T1BBUVVFJyxcblx0XHQnRU5EOlZFVkVOVCcsXG5cdF1cblxuXHRyZXR1cm4gbGluZXMuZmlsdGVyKEJvb2xlYW4pLmpvaW4oQ1JMRilcbn1cblxuY29uc3QgZmlsdGVyRXZlbnRzID0gKGV2ZW50czogQ2FsZW5kYXJFdmVudFtdKTogQ2FsZW5kYXJFdmVudFtdID0+IHtcblx0Y29uc3Qgc2VlblVJRHMgPSBuZXcgU2V0PHN0cmluZz4oKVxuXG5cdHJldHVybiBldmVudHMuZmlsdGVyKChldmVudCkgPT4ge1xuXHRcdGNvbnN0IHVpZCA9IGdldFVJRChldmVudClcblx0XHRjb25zdCBpc0Jhc2VSZWN1cnJpbmcgPSBldmVudC5ycnVsZSAmJiAhZXZlbnQucmVjdXJyZW5jZUlkXG5cdFx0Y29uc3QgaXNNb2RpZmllZEluc3RhbmNlID0gZXZlbnQucmVjdXJyZW5jZUlkICYmICFldmVudC5ycnVsZVxuXG5cdFx0aWYgKGlzQmFzZVJlY3VycmluZykge1xuXHRcdFx0c2VlblVJRHMuYWRkKHVpZClcblx0XHRcdHJldHVybiB0cnVlXG5cdFx0fVxuXHRcdGlmIChpc01vZGlmaWVkSW5zdGFuY2UpIHtcblx0XHRcdHJldHVybiB0cnVlXG5cdFx0fVxuXHRcdHJldHVybiAhZXZlbnQucnJ1bGUgJiYgIWV2ZW50LnJlY3VycmVuY2VJZCAmJiAhc2VlblVJRHMuaGFzKHVpZClcblx0fSlcbn1cblxuZXhwb3J0IGNvbnN0IGV4cG9ydFRvSUNhbGVuZGFyID0gKFxuXHRldmVudHM6IENhbGVuZGFyRXZlbnRbXSxcblx0Y2FsZW5kYXJOYW1lID0gJ2lsYW15IENhbGVuZGFyJ1xuKTogc3RyaW5nID0+IHtcblx0Y29uc3QgbmFtZSA9IGVzY2FwZVRleHQoY2FsZW5kYXJOYW1lKVxuXHRjb25zdCB2ZXZlbnRTdHJpbmdzID0gZmlsdGVyRXZlbnRzKGV2ZW50cykubWFwKGNvbnZlcnRFdmVudFRvVkV2ZW50KVxuXG5cdHJldHVybiBbXG5cdFx0J0JFR0lOOlZDQUxFTkRBUicsXG5cdFx0J1ZFUlNJT046Mi4wJyxcblx0XHQnUFJPRElEOi0vL2lsYW15Ly9pbGFteSBDYWxlbmRhci8vRU4nLFxuXHRcdCdDQUxTQ0FMRTpHUkVHT1JJQU4nLFxuXHRcdCdNRVRIT0Q6UFVCTElTSCcsXG5cdFx0YFgtV1ItQ0FMTkFNRToke25hbWV9YCxcblx0XHRgWC1XUi1DQUxERVNDOkV4cG9ydGVkIGZyb20gJHtuYW1lfWAsXG5cdFx0VVRDX1ZUSU1FWk9ORSxcblx0XHQuLi52ZXZlbnRTdHJpbmdzLFxuXHRcdCdFTkQ6VkNBTEVOREFSJyxcblx0XS5qb2luKENSTEYpXG59XG5cbmV4cG9ydCBjb25zdCBkb3dubG9hZElDYWxlbmRhciA9IChcblx0ZXZlbnRzOiBDYWxlbmRhckV2ZW50W10sXG5cdGZpbGVuYW1lID0gJ2NhbGVuZGFyLmljcycsXG5cdGNhbGVuZGFyTmFtZSA9ICdpbGFteSBDYWxlbmRhcidcbik6IHZvaWQgPT4ge1xuXHRjb25zdCBibG9iID0gbmV3IEJsb2IoW2V4cG9ydFRvSUNhbGVuZGFyKGV2ZW50cywgY2FsZW5kYXJOYW1lKV0sIHtcblx0XHR0eXBlOiAndGV4dC9jYWxlbmRhcjtjaGFyc2V0PXV0Zi04Jyxcblx0fSlcblx0Y29uc3QgdXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKVxuXHRjb25zdCBub3JtYWxpemVkRmlsZW5hbWUgPSBmaWxlbmFtZS5lbmRzV2l0aCgnLmljcycpXG5cdFx0PyBmaWxlbmFtZVxuXHRcdDogYCR7ZmlsZW5hbWV9Lmljc2BcblxuXHRjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpXG5cdGxpbmsuaHJlZiA9IHVybFxuXHRsaW5rLmRvd25sb2FkID0gbm9ybWFsaXplZEZpbGVuYW1lXG5cblx0ZG9jdW1lbnQuYm9keS5hcHBlbmQobGluaylcblx0bGluay5jbGljaygpXG5cdGxpbmsucmVtb3ZlKClcblx0VVJMLnJldm9rZU9iamVjdFVSTCh1cmwpXG59XG4iLAogICAgImltcG9ydCB7IENoZXZyb25Eb3duIH0gZnJvbSAnbHVjaWRlLXJlYWN0J1xuaW1wb3J0IHsgdXNlTWVtbywgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEFuaW1hdGVkU2VjdGlvbiB9IGZyb20gJ0AvY29tcG9uZW50cy9hbmltYXRpb25zL2FuaW1hdGVkLXNlY3Rpb24nXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvYnV0dG9uJ1xuaW1wb3J0IHtcblx0UG9wb3Zlcixcblx0UG9wb3ZlckNvbnRlbnQsXG5cdFBvcG92ZXJUcmlnZ2VyLFxufSBmcm9tICdAL2NvbXBvbmVudHMvdWkvcG9wb3ZlcidcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCBkYXlqcywgeyB0eXBlIERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgZ2V0V2Vla0RheXMgfSBmcm9tICdAL2xpYi91dGlscy9kYXRlLXV0aWxzJ1xuXG5jb25zdCBNT05USF9LRVlTID0gW1xuXHQnamFudWFyeScsXG5cdCdmZWJydWFyeScsXG5cdCdtYXJjaCcsXG5cdCdhcHJpbCcsXG5cdCdtYXknLFxuXHQnanVuZScsXG5cdCdqdWx5Jyxcblx0J2F1Z3VzdCcsXG5cdCdzZXB0ZW1iZXInLFxuXHQnb2N0b2JlcicsXG5cdCdub3ZlbWJlcicsXG5cdCdkZWNlbWJlcicsXG5dIGFzIGNvbnN0XG5cbmNvbnN0IFRpdGxlQ29udGVudCA9ICgpID0+IHtcblx0Y29uc3QgeyBjdXJyZW50RGF0ZSwgdmlldywgc2VsZWN0RGF0ZSwgdCwgZmlyc3REYXlPZldlZWsgfSA9XG5cdFx0dXNlU21hcnRDYWxlbmRhckNvbnRleHQoKGN0eCkgPT4gKHtcblx0XHRcdGN1cnJlbnREYXRlOiBjdHguY3VycmVudERhdGUsXG5cdFx0XHR2aWV3OiBjdHgudmlldyxcblx0XHRcdHNlbGVjdERhdGU6IGN0eC5zZWxlY3REYXRlLFxuXHRcdFx0dDogY3R4LnQsXG5cdFx0XHRmaXJzdERheU9mV2VlazogY3R4LmZpcnN0RGF5T2ZXZWVrLFxuXHRcdH0pKVxuXG5cdGNvbnN0IFtvcGVuUG9wb3Zlciwgc2V0T3BlblBvcG92ZXJdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbClcblxuXHRjb25zdCBtb250aHMgPSB1c2VNZW1vKCgpID0+IE1PTlRIX0tFWVMubWFwKChrZXkpID0+IHQoa2V5KSksIFt0XSlcblx0Y29uc3QgY3VycmVudFllYXIgPSBjdXJyZW50RGF0ZS55ZWFyKClcblx0Y29uc3QgeWVhcnMgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiAxMSB9LCAoXywgaSkgPT4gY3VycmVudFllYXIgLSA1ICsgaSlcblx0Y29uc3Qgd2Vla0RheXMgPSBnZXRXZWVrRGF5cyhjdXJyZW50RGF0ZSwgZmlyc3REYXlPZldlZWspXG5cblx0Y29uc3QgaGFuZGxlU2VsZWN0RGF0ZSA9IChkYXRlOiBEYXlqcykgPT4ge1xuXHRcdHNlbGVjdERhdGUoZGF0ZSlcblx0XHRzZXRPcGVuUG9wb3ZlcihudWxsKVxuXHR9XG5cblx0Y29uc3QgcmVuZGVyTW9udGhDb250ZW50ID0gKCkgPT4gKFxuXHRcdDw+XG5cdFx0XHR7bW9udGhzLm1hcCgobW9udGgsIGluZGV4KSA9PiAoXG5cdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0J2p1c3RpZnktc3RhcnQgZm9udC1ub3JtYWwnLFxuXHRcdFx0XHRcdFx0Y3VycmVudERhdGUubW9udGgoKSA9PT0gaW5kZXggJiYgJ2JnLXByaW1hcnkvMTAnXG5cdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRrZXk9e21vbnRofVxuXHRcdFx0XHRcdG9uQ2xpY2s9eygpID0+IGhhbmRsZVNlbGVjdERhdGUoY3VycmVudERhdGUubW9udGgoaW5kZXgpKX1cblx0XHRcdFx0XHR2YXJpYW50PVwiZ2hvc3RcIlxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0e21vbnRofVxuXHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdCkpfVxuXHRcdDwvPlxuXHQpXG5cblx0Y29uc3QgcmVuZGVyWWVhckNvbnRlbnQgPSAoKSA9PiAoXG5cdFx0PD5cblx0XHRcdHt5ZWFycy5tYXAoKHllYXIpID0+IChcblx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHQnanVzdGlmeS1zdGFydCBmb250LW5vcm1hbCcsXG5cdFx0XHRcdFx0XHRjdXJyZW50RGF0ZS55ZWFyKCkgPT09IHllYXIgJiYgJ2JnLXByaW1hcnkvMTAnXG5cdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRrZXk9e3llYXJ9XG5cdFx0XHRcdFx0b25DbGljaz17KCkgPT4gaGFuZGxlU2VsZWN0RGF0ZShjdXJyZW50RGF0ZS55ZWFyKHllYXIpKX1cblx0XHRcdFx0XHR2YXJpYW50PVwiZ2hvc3RcIlxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0e3llYXJ9XG5cdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0KSl9XG5cdFx0PC8+XG5cdClcblxuXHRjb25zdCByZW5kZXJXZWVrQ29udGVudCA9ICgpID0+IChcblx0XHQ8PlxuXHRcdFx0e0FycmF5LmZyb20oeyBsZW5ndGg6IDcgfSwgKF8sIGkpID0+IHtcblx0XHRcdFx0Y29uc3Qgd2Vla0RhdGUgPSBjdXJyZW50RGF0ZS5zdWJ0cmFjdCgzLCAnd2VlaycpLmFkZChpLCAnd2VlaycpXG5cdFx0XHRcdGNvbnN0IGRheXMgPSBnZXRXZWVrRGF5cyh3ZWVrRGF0ZSwgZmlyc3REYXlPZldlZWspXG5cdFx0XHRcdGNvbnN0IHN0YXJ0ID0gZGF5c1swXVxuXHRcdFx0XHRjb25zdCBlbmQgPSBkYXlzWzZdXG5cdFx0XHRcdGNvbnN0IGlzQ3VycmVudFdlZWsgPSB3ZWVrRGF0ZS5pc1NhbWUoY3VycmVudERhdGUsICd3ZWVrJylcblx0XHRcdFx0Y29uc3QgY3Jvc3Nlc01vbnRoID0gc3RhcnQubW9udGgoKSAhPT0gZW5kLm1vbnRoKClcblxuXHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHRcdCdqdXN0aWZ5LXN0YXJ0IGZvbnQtbm9ybWFsJyxcblx0XHRcdFx0XHRcdFx0aXNDdXJyZW50V2VlayAmJiAnYmctcHJpbWFyeS8xMCdcblx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRrZXk9e3N0YXJ0LmZvcm1hdCgnWVlZWS1NTS1ERCcpfVxuXHRcdFx0XHRcdFx0b25DbGljaz17KCkgPT4gaGFuZGxlU2VsZWN0RGF0ZShzdGFydCl9XG5cdFx0XHRcdFx0XHR2YXJpYW50PVwiZ2hvc3RcIlxuXHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCB3LWZ1bGwgaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlblwiPlxuXHRcdFx0XHRcdFx0XHQ8c3Bhbj57YCR7c3RhcnQuZm9ybWF0KCdNTU0gRCcpfSAtICR7ZW5kLmZvcm1hdCgnRCcpfWB9PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHR7Y3Jvc3Nlc01vbnRoICYmIChcblx0XHRcdFx0XHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJtbC0wLjUgdGV4dC14cyBvcGFjaXR5LTcwXCI+e2Ake3N0YXJ0LmZvcm1hdCgnTU1NJyl9LSR7ZW5kLmZvcm1hdCgnTU1NJyl9YH08L3NwYW4+XG5cdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdFx0KVxuXHRcdFx0fSl9XG5cdFx0PC8+XG5cdClcblxuXHRjb25zdCByZW5kZXJEYXlDb250ZW50ID0gKCkgPT4ge1xuXHRcdGNvbnN0IGZpcnN0RGF5ID0gY3VycmVudERhdGUuc3RhcnRPZignbW9udGgnKVxuXHRcdGNvbnN0IGRheXNJbk1vbnRoID0gY3VycmVudERhdGUuZGF5c0luTW9udGgoKVxuXG5cdFx0cmV0dXJuIChcblx0XHRcdDw+XG5cdFx0XHRcdHtBcnJheS5mcm9tKHsgbGVuZ3RoOiBkYXlzSW5Nb250aCB9LCAoXywgaSkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IGRheSA9IGZpcnN0RGF5LmRhdGUoaSArIDEpXG5cdFx0XHRcdFx0Y29uc3QgaXNDdXJyZW50RGF5ID0gZGF5LmlzU2FtZShjdXJyZW50RGF0ZSwgJ2RheScpXG5cdFx0XHRcdFx0Y29uc3QgaXNUb2RheSA9IGRheS5pc1NhbWUoZGF5anMoKSwgJ2RheScpXG5cblx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0XHRcdCdqdXN0aWZ5LXN0YXJ0IGZvbnQtbm9ybWFsJyxcblx0XHRcdFx0XHRcdFx0XHRpc0N1cnJlbnREYXkgJiYgJ2JnLXByaW1hcnkvMTAnXG5cdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdGtleT17ZGF5LmZvcm1hdCgnWVlZWS1NTS1ERCcpfVxuXHRcdFx0XHRcdFx0XHRvbkNsaWNrPXsoKSA9PiBoYW5kbGVTZWxlY3REYXRlKGRheSl9XG5cdFx0XHRcdFx0XHRcdHZhcmlhbnQ9XCJnaG9zdFwiXG5cdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCB3LWZ1bGwgaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlblwiPlxuXHRcdFx0XHRcdFx0XHRcdDxzcGFuPntkYXkuZm9ybWF0KCdkZGRkLCBNTU0gRCcpfTwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0XHR7aXNUb2RheSAmJiAoXG5cdFx0XHRcdFx0XHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJiZy1wcmltYXJ5IHRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIHJvdW5kZWQtc20gcHgtMSEgdGV4dC14c1wiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7dCgndG9kYXknKX1cblx0XHRcdFx0XHRcdFx0XHRcdDwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0XHRcdClcblx0XHRcdFx0fSl9XG5cdFx0XHQ8Lz5cblx0XHQpXG5cdH1cblxuXHRjb25zdCBwb3BvdmVycyA9IFtcblx0XHR7XG5cdFx0XHRpZDogJ21vbnRoJyxcblx0XHRcdGhpZGRlbjogdmlldyA9PT0gJ3llYXInLFxuXHRcdFx0dGl0bGU6IGN1cnJlbnREYXRlLmZvcm1hdCgnTU1NTScpLFxuXHRcdFx0cmVuZGVyOiByZW5kZXJNb250aENvbnRlbnQsXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRpZDogJ3llYXInLFxuXHRcdFx0aGlkZGVuOiBmYWxzZSxcblx0XHRcdHRpdGxlOiBjdXJyZW50RGF0ZS5mb3JtYXQoJ1lZWVknKSxcblx0XHRcdHJlbmRlcjogcmVuZGVyWWVhckNvbnRlbnQsXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRpZDogJ3dlZWsnLFxuXHRcdFx0aGlkZGVuOiB2aWV3ICE9PSAnd2VlaycsXG5cdFx0XHR0aXRsZTogYCR7d2Vla0RheXNbMF0uZm9ybWF0KCdNTU0gRCcpfSAtICR7d2Vla0RheXNbNl0uZm9ybWF0KCdNTU0gRCcpfWAsXG5cdFx0XHRyZW5kZXI6IHJlbmRlcldlZWtDb250ZW50LFxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0aWQ6ICdkYXknLFxuXHRcdFx0aGlkZGVuOiB2aWV3ICE9PSAnZGF5Jyxcblx0XHRcdHRpdGxlOiBjdXJyZW50RGF0ZS5mb3JtYXQoJ2RkZGQsIEQnKSxcblx0XHRcdHJlbmRlcjogcmVuZGVyRGF5Q29udGVudCxcblx0XHR9LFxuXHRdXG5cblx0cmV0dXJuIHBvcG92ZXJzXG5cdFx0LmZpbHRlcigocCkgPT4gIXAuaGlkZGVuKVxuXHRcdC5tYXAoKHBvcG92ZXIpID0+IChcblx0XHRcdDxQb3BvdmVyXG5cdFx0XHRcdGtleT17cG9wb3Zlci5pZH1cblx0XHRcdFx0b25PcGVuQ2hhbmdlPXsob3BlbikgPT4gc2V0T3BlblBvcG92ZXIob3BlbiA/IHBvcG92ZXIuaWQgOiBudWxsKX1cblx0XHRcdFx0b3Blbj17b3BlblBvcG92ZXIgPT09IHBvcG92ZXIuaWR9XG5cdFx0XHQ+XG5cdFx0XHRcdDxQb3BvdmVyVHJpZ2dlciBhc0NoaWxkPlxuXHRcdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0xIHB4LTEhIGZvbnQtc2VtaWJvbGRcIlxuXHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9XCJjYWxlbmRhci1tb250aC1idXR0b25cIlxuXHRcdFx0XHRcdFx0dmFyaWFudD1cImdob3N0XCJcblx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHQ8QW5pbWF0ZWRTZWN0aW9uXG5cdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0xIHB4LTEhIGZvbnQtc2VtaWJvbGRcIlxuXHRcdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD1cImNhbGVuZGFyLW1vbnRoLWJ1dHRvblwiXG5cdFx0XHRcdFx0XHRcdHRyYW5zaXRpb25LZXk9e2Ake3BvcG92ZXIuaWR9LSR7Y3VycmVudERhdGUuZm9ybWF0KCdZWVlZLU1NLUREJyl9YH1cblx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0e3BvcG92ZXIudGl0bGV9XG5cdFx0XHRcdFx0XHQ8L0FuaW1hdGVkU2VjdGlvbj5cblx0XHRcdFx0XHRcdDxDaGV2cm9uRG93biBjbGFzc05hbWU9XCJoLTQgdy00XCIgLz5cblx0XHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdFx0PC9Qb3BvdmVyVHJpZ2dlcj5cblx0XHRcdFx0PFBvcG92ZXJDb250ZW50IGNsYXNzTmFtZT1cInctNDAgcC0wXCI+XG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IG1heC1oLTYwIGZsZXgtY29sIG92ZXJmbG93LWF1dG9cIj5cblx0XHRcdFx0XHRcdHtwb3BvdmVyLnJlbmRlcigpfVxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8L1BvcG92ZXJDb250ZW50PlxuXHRcdFx0PC9Qb3BvdmVyPlxuXHRcdCkpXG59XG5cbmV4cG9ydCBkZWZhdWx0IFRpdGxlQ29udGVudFxuIiwKICAgICJpbXBvcnQgeyBDaGV2cm9uTGVmdCwgQ2hldnJvblJpZ2h0IH0gZnJvbSAnbHVjaWRlLXJlYWN0J1xuaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvYnV0dG9uJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxudHlwZSBWaWV3VHlwZSA9ICdkYXknIHwgJ3dlZWsnIHwgJ21vbnRoJyB8ICd5ZWFyJ1xuY29uc3QgQVZBSUxBQkxFX1ZJRVdTOiBWaWV3VHlwZVtdID0gWydkYXknLCAnd2VlaycsICdtb250aCcsICd5ZWFyJ11cblxuaW50ZXJmYWNlIFZpZXdDb250cm9sc1Byb3BzIHtcblx0Y3VycmVudFZpZXc6IFZpZXdUeXBlXG5cdG9uQ2hhbmdlOiAodmlldzogVmlld1R5cGUpID0+IHZvaWRcblx0b25Ub2RheT86ICgpID0+IHZvaWRcblx0b25OZXh0PzogKCkgPT4gdm9pZFxuXHRvblByZXZpb3VzPzogKCkgPT4gdm9pZFxuXHR2YXJpYW50PzogJ2RlZmF1bHQnIHwgJ2dyaWQnXG5cdHNpemU/OiAnc20nIHwgJ2RlZmF1bHQnXG5cdGNsYXNzTmFtZT86IHN0cmluZ1xufVxuXG5jb25zdCBWaWV3Q29udHJvbHM6IFJlYWN0LkZDPFZpZXdDb250cm9sc1Byb3BzPiA9ICh7XG5cdGN1cnJlbnRWaWV3LFxuXHRvbkNoYW5nZSxcblx0dmFyaWFudCA9ICdkZWZhdWx0Jyxcblx0c2l6ZSA9ICdzbScsXG5cdGNsYXNzTmFtZSxcblx0b25Ub2RheSxcblx0b25OZXh0LFxuXHRvblByZXZpb3VzLFxufSkgPT4ge1xuXHRjb25zdCB7IHQsIHJlc291cmNlcyB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKGNvbnRleHQpID0+ICh7XG5cdFx0dDogY29udGV4dC50LFxuXHRcdHJlc291cmNlczogY29udGV4dC5yZXNvdXJjZXMsXG5cdH0pKVxuXHRjb25zdCBpc0dyaWQgPSB2YXJpYW50ID09PSAnZ3JpZCdcblx0Y29uc3QgaXNSZXNvdXJjZUNhbGVuZGFyID0gcmVzb3VyY2VzICYmIHJlc291cmNlcy5sZW5ndGggPiAwXG5cblx0Ly8gRXh0cmFjdCBjb21tb24gYnV0dG9uIGNsYXNzTmFtZSBsb2dpYyB0byBhIGZ1bmN0aW9uXG5cdGNvbnN0IGdldEJ1dHRvbkNsYXNzTmFtZSA9ICh2aWV3VHlwZTogVmlld1R5cGUpID0+IHtcblx0XHRyZXR1cm4gY24oXG5cdFx0XHQvLyBCYXNlIHdpZHRoIGZvciBncmlkIGxheW91dFxuXHRcdFx0aXNHcmlkID8gJ3ctZnVsbCcgOiAnJyxcblx0XHRcdC8vIEFjdGl2ZSB2aWV3IHN0eWxpbmdcblx0XHRcdGN1cnJlbnRWaWV3ID09PSB2aWV3VHlwZSAmJiAnYmctcHJpbWFyeS84MCdcblx0XHQpXG5cdH1cblxuXHRjb25zdCBnZXRCdG5WYXJpYW50ID0gKHZpZXdUeXBlOiBWaWV3VHlwZSkgPT4ge1xuXHRcdHJldHVybiBjdXJyZW50VmlldyA9PT0gdmlld1R5cGUgPyAnZGVmYXVsdCcgOiAnb3V0bGluZSdcblx0fVxuXG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0aXNHcmlkID8gJ2dyaWQgZ3JpZC1jb2xzLTIgZ2FwLTInIDogJ2ZsZXggZ2FwLTEnLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0PlxuXHRcdFx0PEJ1dHRvbiBvbkNsaWNrPXtvblByZXZpb3VzfSBzaXplPXtzaXplfSB2YXJpYW50PVwib3V0bGluZVwiPlxuXHRcdFx0XHQ8Q2hldnJvbkxlZnQgY2xhc3NOYW1lPVwiaC00IHctNFwiIC8+XG5cdFx0XHQ8L0J1dHRvbj5cblx0XHRcdDxCdXR0b24gb25DbGljaz17b25OZXh0fSBzaXplPXtzaXplfSB2YXJpYW50PVwib3V0bGluZVwiPlxuXHRcdFx0XHQ8Q2hldnJvblJpZ2h0IGNsYXNzTmFtZT1cImgtNCB3LTRcIiAvPlxuXHRcdFx0PC9CdXR0b24+XG5cblx0XHRcdHtBVkFJTEFCTEVfVklFV1MubWFwKCh0eXBlOiBWaWV3VHlwZSkgPT4ge1xuXHRcdFx0XHRpZiAoaXNSZXNvdXJjZUNhbGVuZGFyICYmIHR5cGUgPT09ICd5ZWFyJykge1xuXHRcdFx0XHRcdHJldHVybiBudWxsXG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Z2V0QnV0dG9uQ2xhc3NOYW1lKHR5cGUpfVxuXHRcdFx0XHRcdFx0a2V5PXt0eXBlfVxuXHRcdFx0XHRcdFx0b25DbGljaz17KCkgPT4gb25DaGFuZ2UodHlwZSl9XG5cdFx0XHRcdFx0XHRzaXplPXtzaXplfVxuXHRcdFx0XHRcdFx0dmFyaWFudD17Z2V0QnRuVmFyaWFudCh0eXBlKX1cblx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHR7dCh0eXBlKX1cblx0XHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdFx0KVxuXHRcdFx0fSl9XG5cblx0XHRcdDxCdXR0b24gb25DbGljaz17b25Ub2RheX0gc2l6ZT17c2l6ZX0gdmFyaWFudD1cIm91dGxpbmVcIj5cblx0XHRcdFx0e3QoJ3RvZGF5Jyl9XG5cdFx0XHQ8L0J1dHRvbj5cblx0XHQ8L2Rpdj5cblx0KVxufVxuXG5leHBvcnQgZGVmYXVsdCBWaWV3Q29udHJvbHNcbiIsCiAgICAiaW1wb3J0IHsgbWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgSG9yaXpvbnRhbEdyaWRSb3cgfSBmcm9tICdAL2NvbXBvbmVudHMvaG9yaXpvbnRhbC1ncmlkL2hvcml6b250YWwtZ3JpZC1yb3cnXG5pbXBvcnQgdHlwZSB7IFJlc291cmNlIH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci90eXBlcydcbmltcG9ydCB0eXBlIHsgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgeyBBbGxEYXlDZWxsIH0gZnJvbSAnLi9hbGwtZGF5LWNlbGwnXG5cbmludGVyZmFjZSBBbGxEYXlSb3dQcm9wcyB7XG5cdGRheXM6IERheWpzW11cblx0Y2xhc3Nlcz86IHsgcm93Pzogc3RyaW5nOyBjZWxsPzogc3RyaW5nOyBzcGFjZXI/OiBzdHJpbmcgfVxuXHRyZXNvdXJjZT86IFJlc291cmNlXG5cdHNob3dTcGFjZXI/OiBib29sZWFuXG59XG5cbmNvbnN0IE5vTWVtb0FsbERheVJvdzogUmVhY3QuRkM8QWxsRGF5Um93UHJvcHM+ID0gKHtcblx0ZGF5cyxcblx0Y2xhc3Nlcyxcblx0cmVzb3VyY2UsXG5cdHNob3dTcGFjZXIgPSB0cnVlLFxufSkgPT4ge1xuXHRjb25zdCBjb2x1bW5zID0gZGF5cy5tYXAoKGRheSwgaW5kZXgpID0+ICh7XG5cdFx0aWQ6IGBhbGxkYXktY29sLSR7ZGF5LnRvSVNPU3RyaW5nKCl9LSR7aW5kZXh9YCxcblx0XHRkYXksXG5cdFx0Z3JpZFR5cGU6ICdkYXknIGFzIGNvbnN0LFxuXHRcdGNsYXNzTmFtZTogY24oJ2gtZnVsbCBtaW4taC0xMiBib3JkZXItciBsYXN0OmJvcmRlci1yLTAnLCBjbGFzc2VzPy5jZWxsKSxcblx0fSkpXG5cblx0cmV0dXJuIChcblx0XHQ8ZGl2IGNsYXNzTmFtZT17Y24oJ2ZsZXggdy1mdWxsJywgY2xhc3Nlcz8ucm93KX0gZGF0YS10ZXN0aWQ9XCJhbGwtZGF5LXJvd1wiPlxuXHRcdFx0ey8qIFRpbWUgY29sIHNwYWNlciAqL31cblx0XHRcdHtzaG93U3BhY2VyICYmIDxBbGxEYXlDZWxsIGNsYXNzTmFtZT17Y2xhc3Nlcz8uc3BhY2VyfSAvPn1cblxuXHRcdFx0ey8qIERheSBhbGwgZGF5IGNlbGwgKi99XG5cdFx0XHQ8SG9yaXpvbnRhbEdyaWRSb3dcblx0XHRcdFx0YWxsRGF5XG5cdFx0XHRcdGNsYXNzTmFtZT1cImZsZXgtMSBtaW4taC1maXRcIlxuXHRcdFx0XHRjb2x1bW5zPXtjb2x1bW5zfVxuXHRcdFx0XHRkYXlOdW1iZXJIZWlnaHQ9ezB9XG5cdFx0XHRcdGdyaWRUeXBlPVwiZGF5XCJcblx0XHRcdFx0aWQ9e2BhbGwtZGF5LXJvdy0ke3Jlc291cmNlPy5pZCA/PyAnbWFpbid9YH1cblx0XHRcdFx0aXNMYXN0Um93XG5cdFx0XHRcdHJlc291cmNlPXtyZXNvdXJjZX1cblx0XHRcdFx0dmFyaWFudD1cInJlZ3VsYXJcIlxuXHRcdFx0Lz5cblx0XHQ8L2Rpdj5cblx0KVxufVxuXG5leHBvcnQgY29uc3QgQWxsRGF5Um93ID0gbWVtbyhOb01lbW9BbGxEYXlSb3cpXG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgbWVtbywgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlUHJvY2Vzc2VkV2Vla0V2ZW50cyB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvaG9va3MvdXNlUHJvY2Vzc2VkV2Vla0V2ZW50cydcbmltcG9ydCB0eXBlIHsgUmVzb3VyY2UgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL3R5cGVzJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUgeyBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IEdyaWRDZWxsIH0gZnJvbSAnLi4vZ3JpZC1jZWxsJ1xuaW1wb3J0IHsgUmVzb3VyY2VDZWxsIH0gZnJvbSAnLi4vcmVzb3VyY2UtY2VsbCdcbmltcG9ydCB7IEhvcml6b250YWxHcmlkRXZlbnRzTGF5ZXIgfSBmcm9tICcuL2hvcml6b250YWwtZ3JpZC1ldmVudHMtbGF5ZXInXG5cbmludGVyZmFjZSBIb3Jpem9udGFsR3JpZENvbHVtbiB7XG5cdGlkOiBzdHJpbmdcblx0ZGF5PzogRGF5anNcblx0ZGF5cz86IERheWpzW11cblx0Z3JpZFR5cGU6ICdkYXknIHwgJ2hvdXInXG5cdGNsYXNzTmFtZT86IHN0cmluZ1xuXHRyZW5kZXJDZWxsPzogKHJvdzogSG9yaXpvbnRhbEdyaWRSb3dQcm9wcykgPT4gUmVhY3QuUmVhY3ROb2RlXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSG9yaXpvbnRhbEdyaWRSb3dQcm9wcyB7XG5cdGlkOiBzdHJpbmcgfCBudW1iZXJcblx0cmVzb3VyY2U/OiBSZXNvdXJjZVxuXHRncmlkVHlwZT86ICdkYXknIHwgJ2hvdXInXG5cdHZhcmlhbnQ/OiAncmVndWxhcicgfCAncmVzb3VyY2UnXG5cdGRheU51bWJlckhlaWdodD86IG51bWJlclxuXHRjbGFzc05hbWU/OiBzdHJpbmdcblx0Y29sdW1ucz86IEhvcml6b250YWxHcmlkQ29sdW1uW11cblx0YWxsRGF5PzogYm9vbGVhblxuXHRzaG93RGF5TnVtYmVyPzogYm9vbGVhblxuXHRpc0xhc3RSb3c/OiBib29sZWFuXG59XG5cbmNvbnN0IE5vTWVtb0hvcml6b250YWxHcmlkUm93OiBSZWFjdC5GQzxIb3Jpem9udGFsR3JpZFJvd1Byb3BzPiA9ICh7XG5cdGlkLFxuXHRyZXNvdXJjZSxcblx0Z3JpZFR5cGUgPSAnZGF5Jyxcblx0dmFyaWFudCA9ICdyZXNvdXJjZScsXG5cdGRheU51bWJlckhlaWdodCxcblx0Y2xhc3NOYW1lLFxuXHRjb2x1bW5zID0gW10sXG5cdGFsbERheSxcblx0c2hvd0RheU51bWJlciA9IGZhbHNlLFxuXHRpc0xhc3RSb3cgPSBmYWxzZSxcbn0pID0+IHtcblx0Y29uc3QgeyByZW5kZXJSZXNvdXJjZSB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXG5cdGNvbnN0IGlzUmVzb3VyY2VDYWxlbmRhciA9IHZhcmlhbnQgPT09ICdyZXNvdXJjZSdcblx0Ly8gRmxhdCBjb2x1bW5zOiBlYWNoIGNvbHVtbiBoYXMgY29sLmRheSAocmVndWxhciBtb250aCwgcmVzb3VyY2UgbW9udGgpXG5cdC8vIEdyb3VwZWQgY29sdW1uczogZWFjaCBjb2x1bW4gaGFzIGNvbC5kYXlzW10gKHJlc291cmNlIHdlZWsgaG9yaXpvbnRhbClcblx0Y29uc3QgaXNHcm91cGVkID0gY29sdW1ucy5zb21lKChjb2wpID0+IGNvbC5kYXlzKVxuXG5cdC8vIENvbGxlY3QgYWxsIGRheXMgZm9yIGZsYXQgcm93c1xuXHRjb25zdCBmbGF0RGF5cyA9IHVzZU1lbW8oKCkgPT4ge1xuXHRcdGlmIChpc0dyb3VwZWQpIHJldHVybiBbXVxuXHRcdHJldHVybiBjb2x1bW5zLm1hcCgoY29sKSA9PiBjb2wuZGF5KS5maWx0ZXIoKGQpOiBkIGlzIERheWpzID0+IEJvb2xlYW4oZCkpXG5cdH0sIFtjb2x1bW5zLCBpc0dyb3VwZWRdKVxuXG5cdC8vIENvbXB1dGUgZXZlbnRzIG9uY2UgYXQgdGhlIHJvdyBsZXZlbCDigJQgc2hhcmVkIGJldHdlZW4gR3JpZENlbGxzIGFuZCBldmVudHMgbGF5ZXJcblx0Y29uc3QgeyBwb3NpdGlvbmVkRXZlbnRzLCBkYXlFdmVudHNNYXAgfSA9IHVzZVByb2Nlc3NlZFdlZWtFdmVudHMoe1xuXHRcdGRheXM6IGZsYXREYXlzLFxuXHRcdGdyaWRUeXBlLFxuXHRcdHJlc291cmNlSWQ6IHJlc291cmNlPy5pZCxcblx0XHRkYXlOdW1iZXJIZWlnaHQsXG5cdFx0YWxsRGF5LFxuXHR9KVxuXG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbignZmxleCBmbGV4LTEgcmVsYXRpdmUnLCBjbGFzc05hbWUpfVxuXHRcdFx0ZGF0YS10ZXN0aWQ9e2Bob3Jpem9udGFsLXJvdy0ke2lkfWB9XG5cdFx0PlxuXHRcdFx0e2lzUmVzb3VyY2VDYWxlbmRhciAmJiByZXNvdXJjZSAmJiAoXG5cdFx0XHRcdDxSZXNvdXJjZUNlbGxcblx0XHRcdFx0XHRjbGFzc05hbWU9XCJ3LTIwIHNtOnctNDAgc3RpY2t5IGxlZnQtMCBiZy1iYWNrZ3JvdW5kIHotMjAgaC1mdWxsXCJcblx0XHRcdFx0XHRkYXRhLXRlc3RpZD17YGhvcml6b250YWwtcm93LWxhYmVsLSR7cmVzb3VyY2UuaWR9YH1cblx0XHRcdFx0XHRyZXNvdXJjZT17cmVzb3VyY2V9XG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7cmVuZGVyUmVzb3VyY2UgPyAoXG5cdFx0XHRcdFx0XHRyZW5kZXJSZXNvdXJjZShyZXNvdXJjZSlcblx0XHRcdFx0XHQpIDogKFxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ3cmFwLWJyZWFrLXdvcmQgdGV4dC1zbVwiPntyZXNvdXJjZS50aXRsZX08L2Rpdj5cblx0XHRcdFx0XHQpfVxuXHRcdFx0XHQ8L1Jlc291cmNlQ2VsbD5cblx0XHRcdCl9XG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInJlbGF0aXZlIGZsZXgtMSBmbGV4XCI+XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCB3LWZ1bGxcIj5cblx0XHRcdFx0XHR7Y29sdW1ucy5tYXAoKGNvbCwgaW5kZXgpID0+IHtcblx0XHRcdFx0XHRcdGlmIChjb2wuZGF5cykge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHRcdDxHcm91cGVkQ29sdW1uXG5cdFx0XHRcdFx0XHRcdFx0XHRhbGxEYXk9e2FsbERheX1cblx0XHRcdFx0XHRcdFx0XHRcdGNvbD17Y29sfVxuXHRcdFx0XHRcdFx0XHRcdFx0ZGF5TnVtYmVySGVpZ2h0PXtkYXlOdW1iZXJIZWlnaHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRncmlkVHlwZT17Z3JpZFR5cGV9XG5cdFx0XHRcdFx0XHRcdFx0XHRpZD17aWR9XG5cdFx0XHRcdFx0XHRcdFx0XHRpc0xhc3RDb2w9e2luZGV4ID09PSBjb2x1bW5zLmxlbmd0aCAtIDF9XG5cdFx0XHRcdFx0XHRcdFx0XHRpc0xhc3RSb3c9e2lzTGFzdFJvd31cblx0XHRcdFx0XHRcdFx0XHRcdGtleT17Y29sLmlkfVxuXHRcdFx0XHRcdFx0XHRcdFx0cmVzb3VyY2VJZD17cmVzb3VyY2U/LmlkfVxuXHRcdFx0XHRcdFx0XHRcdFx0c2hvd0RheU51bWJlcj17c2hvd0RheU51bWJlcn1cblx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdHJldHVybiBjb2wuZGF5ID8gKFxuXHRcdFx0XHRcdFx0XHQ8R3JpZENlbGxcblx0XHRcdFx0XHRcdFx0XHRhbGxEYXk9e2FsbERheX1cblx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0XHRcdFx0J2ZsZXgtMSB3LTIwJyxcblx0XHRcdFx0XHRcdFx0XHRcdGlzTGFzdFJvdyAmJiAnYm9yZGVyLWItMCcsXG5cdFx0XHRcdFx0XHRcdFx0XHRjb2wuY2xhc3NOYW1lXG5cdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0XHRkYXk9e2NvbC5kYXl9XG5cdFx0XHRcdFx0XHRcdFx0Z3JpZFR5cGU9e2dyaWRUeXBlfVxuXHRcdFx0XHRcdFx0XHRcdGhvdXI9e2dyaWRUeXBlID09PSAnaG91cicgPyBjb2wuZGF5LmhvdXIoKSA6IHVuZGVmaW5lZH1cblx0XHRcdFx0XHRcdFx0XHRrZXk9e2NvbC5kYXkudG9JU09TdHJpbmcoKX1cblx0XHRcdFx0XHRcdFx0XHRwcmVjb21wdXRlZEV2ZW50cz17ZGF5RXZlbnRzTWFwLmdldChcblx0XHRcdFx0XHRcdFx0XHRcdGNvbC5kYXkuZm9ybWF0KCdZWVlZLU1NLUREJylcblx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRcdHJlc291cmNlSWQ9e3Jlc291cmNlPy5pZH1cblx0XHRcdFx0XHRcdFx0XHRzaG93RGF5TnVtYmVyPXtzaG93RGF5TnVtYmVyfVxuXHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0KSA6IG51bGxcblx0XHRcdFx0XHR9KX1cblx0XHRcdFx0PC9kaXY+XG5cblx0XHRcdFx0ey8qIEV2ZW50cyBsYXllciBwb3NpdGlvbmVkIGFic29sdXRlbHkgb3ZlciB0aGUgcm93ICovfVxuXHRcdFx0XHR7IWlzR3JvdXBlZCAmJiAoXG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJhYnNvbHV0ZSBpbnNldC0wIHotMTAgcG9pbnRlci1ldmVudHMtbm9uZVwiPlxuXHRcdFx0XHRcdFx0PEhvcml6b250YWxHcmlkRXZlbnRzTGF5ZXJcblx0XHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e2Bob3Jpem9udGFsLWV2ZW50cy0ke2lkfWB9XG5cdFx0XHRcdFx0XHRcdGRheXM9e2ZsYXREYXlzfVxuXHRcdFx0XHRcdFx0XHRwb3NpdGlvbmVkRXZlbnRzPXtwb3NpdGlvbmVkRXZlbnRzfVxuXHRcdFx0XHRcdFx0XHRyZXNvdXJjZUlkPXtyZXNvdXJjZT8uaWR9XG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQpfVxuXHRcdFx0PC9kaXY+XG5cdFx0PC9kaXY+XG5cdClcbn1cblxuLyoqXG4gKiBBIGNvbHVtbiBjb250YWluaW5nIG11bHRpcGxlIGRheXMgKGUuZy4sIG9uZSBkYXkncyBob3VybHkgc2xvdHMgaW4gcmVzb3VyY2Ugd2VlayB2aWV3KS5cbiAqIE5lZWRzIGl0cyBvd24gdXNlUHJvY2Vzc2VkV2Vla0V2ZW50cyBjYWxsIHNpbmNlIGV2ZW50cyBhcmUgc2NvcGVkIHRvIHRoaXMgZGF5IGdyb3VwLlxuICovXG5jb25zdCBHcm91cGVkQ29sdW1uID0gbWVtbyhcblx0KHtcblx0XHRjb2wsXG5cdFx0Z3JpZFR5cGUgPSAnZGF5Jyxcblx0XHRhbGxEYXksXG5cdFx0cmVzb3VyY2VJZCxcblx0XHRkYXlOdW1iZXJIZWlnaHQsXG5cdFx0c2hvd0RheU51bWJlcixcblx0XHRpc0xhc3RSb3csXG5cdFx0aXNMYXN0Q29sLFxuXHRcdGlkLFxuXHR9OiB7XG5cdFx0Y29sOiBIb3Jpem9udGFsR3JpZENvbHVtblxuXHRcdGdyaWRUeXBlPzogJ2RheScgfCAnaG91cidcblx0XHRhbGxEYXk/OiBib29sZWFuXG5cdFx0cmVzb3VyY2VJZD86IHN0cmluZyB8IG51bWJlclxuXHRcdGRheU51bWJlckhlaWdodD86IG51bWJlclxuXHRcdHNob3dEYXlOdW1iZXI6IGJvb2xlYW5cblx0XHRpc0xhc3RSb3c6IGJvb2xlYW5cblx0XHRpc0xhc3RDb2w6IGJvb2xlYW5cblx0XHRpZDogc3RyaW5nIHwgbnVtYmVyXG5cdH0pID0+IHtcblx0XHRjb25zdCBkYXlzID0gY29sLmRheXMgPz8gW11cblx0XHRjb25zdCB7IHBvc2l0aW9uZWRFdmVudHMgfSA9IHVzZVByb2Nlc3NlZFdlZWtFdmVudHMoe1xuXHRcdFx0ZGF5cyxcblx0XHRcdGdyaWRUeXBlLFxuXHRcdFx0cmVzb3VyY2VJZCxcblx0XHRcdGRheU51bWJlckhlaWdodCxcblx0XHRcdGFsbERheSxcblx0XHR9KVxuXG5cdFx0cmV0dXJuIChcblx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCByZWxhdGl2ZSB3LWZ1bGxcIj5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IHctZnVsbFwiPlxuXHRcdFx0XHRcdHtkYXlzLm1hcCgoZGF5KSA9PiAoXG5cdFx0XHRcdFx0XHQ8R3JpZENlbGxcblx0XHRcdFx0XHRcdFx0YWxsRGF5PXthbGxEYXl9XG5cdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHRcdFx0J2ZsZXgtMSB3LTIwJyxcblx0XHRcdFx0XHRcdFx0XHRpc0xhc3RSb3cgJiYgJ2JvcmRlci1iLTAnLFxuXHRcdFx0XHRcdFx0XHRcdCFpc0xhc3RDb2wgJiYgJ2JvcmRlci1yIScsXG5cdFx0XHRcdFx0XHRcdFx0Y29sLmNsYXNzTmFtZVxuXHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRkYXk9e2RheX1cblx0XHRcdFx0XHRcdFx0Z3JpZFR5cGU9e2dyaWRUeXBlfVxuXHRcdFx0XHRcdFx0XHRob3VyPXtncmlkVHlwZSA9PT0gJ2hvdXInID8gZGF5LmhvdXIoKSA6IHVuZGVmaW5lZH1cblx0XHRcdFx0XHRcdFx0a2V5PXtkYXkudG9JU09TdHJpbmcoKX1cblx0XHRcdFx0XHRcdFx0cmVzb3VyY2VJZD17cmVzb3VyY2VJZH1cblx0XHRcdFx0XHRcdFx0c2hvd0RheU51bWJlcj17c2hvd0RheU51bWJlcn1cblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0KSl9XG5cdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiYWJzb2x1dGUgaW5zZXQtMCB6LTEwIHBvaW50ZXItZXZlbnRzLW5vbmVcIj5cblx0XHRcdFx0XHQ8SG9yaXpvbnRhbEdyaWRFdmVudHNMYXllclxuXHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e2Bob3Jpem9udGFsLWV2ZW50cy0ke2lkfWB9XG5cdFx0XHRcdFx0XHRkYXlzPXtkYXlzfVxuXHRcdFx0XHRcdFx0cG9zaXRpb25lZEV2ZW50cz17cG9zaXRpb25lZEV2ZW50c31cblx0XHRcdFx0XHRcdHJlc291cmNlSWQ9e3Jlc291cmNlSWR9XG5cdFx0XHRcdFx0Lz5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQ8L2Rpdj5cblx0XHQpXG5cdH1cbilcblxuZXhwb3J0IGNvbnN0IEhvcml6b250YWxHcmlkUm93ID0gbWVtbyhOb01lbW9Ib3Jpem9udGFsR3JpZFJvdylcbiIsCiAgICAiaW1wb3J0IHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUgeyBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHtcblx0Z2V0UG9zaXRpb25lZEV2ZW50cyxcblx0dHlwZSBQb3NpdGlvbmVkRXZlbnQsXG59IGZyb20gJ0AvbGliL3V0aWxzL3Bvc2l0aW9uLXdlZWstZXZlbnRzJ1xuXG5pbnRlcmZhY2UgVXNlUHJvY2Vzc2VkV2Vla0V2ZW50c1Byb3BzIHtcblx0ZGF5czogRGF5anNbXVxuXHRhbGxEYXk/OiBib29sZWFuXG5cdGRheU51bWJlckhlaWdodD86IG51bWJlclxuXHRyZXNvdXJjZUlkPzogc3RyaW5nIHwgbnVtYmVyXG5cdGdyaWRUeXBlPzogJ2RheScgfCAnaG91cidcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQcm9jZXNzZWRXZWVrRXZlbnRzUmVzdWx0IHtcblx0cG9zaXRpb25lZEV2ZW50czogUG9zaXRpb25lZEV2ZW50W11cblx0ZGF5RXZlbnRzTWFwOiBNYXA8c3RyaW5nLCBDYWxlbmRhckV2ZW50W10+XG59XG5cbmV4cG9ydCBjb25zdCB1c2VQcm9jZXNzZWRXZWVrRXZlbnRzID0gKHtcblx0ZGF5cyxcblx0YWxsRGF5LFxuXHRkYXlOdW1iZXJIZWlnaHQsXG5cdHJlc291cmNlSWQsXG5cdGdyaWRUeXBlLFxufTogVXNlUHJvY2Vzc2VkV2Vla0V2ZW50c1Byb3BzKTogUHJvY2Vzc2VkV2Vla0V2ZW50c1Jlc3VsdCA9PiB7XG5cdGNvbnN0IHtcblx0XHRnZXRFdmVudHNGb3JEYXRlUmFuZ2UsXG5cdFx0ZGF5TWF4RXZlbnRzLFxuXHRcdGV2ZW50U3BhY2luZyxcblx0XHRnZXRFdmVudHNGb3JSZXNvdXJjZSxcblx0fSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblxuXHRjb25zdCBmaXJzdCA9IGRheXMuYXQoMClcblx0Y29uc3QgbGFzdCA9IGRheXMuYXQoLTEpXG5cdGNvbnN0IHdlZWtTdGFydCA9IGZpcnN0Py5zdGFydE9mKCdkYXknKVxuXHRjb25zdCB3ZWVrRW5kID0gbGFzdD8uZW5kT2YoJ2RheScpXG5cblx0Y29uc3QgZXZlbnRzID0gdXNlTWVtbygoKSA9PiB7XG5cdFx0aWYgKCF3ZWVrU3RhcnQgfHwgIXdlZWtFbmQpIHJldHVybiBbXVxuXHRcdGxldCB3ZWVrRXZlbnRzID0gZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlKHdlZWtTdGFydCwgd2Vla0VuZClcblx0XHRpZiAocmVzb3VyY2VJZCkge1xuXHRcdFx0Y29uc3QgcmVzb3VyY2VFdmVudHMgPSBnZXRFdmVudHNGb3JSZXNvdXJjZShyZXNvdXJjZUlkKVxuXHRcdFx0d2Vla0V2ZW50cyA9IHdlZWtFdmVudHMuZmlsdGVyKChldmVudCkgPT5cblx0XHRcdFx0cmVzb3VyY2VFdmVudHMuc29tZSgoZSkgPT4gU3RyaW5nKGUuaWQpID09PSBTdHJpbmcoZXZlbnQuaWQpKVxuXHRcdFx0KVxuXHRcdH1cblxuXHRcdGlmIChhbGxEYXkpIHtcblx0XHRcdHdlZWtFdmVudHMgPSB3ZWVrRXZlbnRzLmZpbHRlcigoZSkgPT4gISFlLmFsbERheSA9PT0gYWxsRGF5KVxuXHRcdH1cblxuXHRcdHJldHVybiB3ZWVrRXZlbnRzXG5cdH0sIFtcblx0XHRnZXRFdmVudHNGb3JEYXRlUmFuZ2UsXG5cdFx0Z2V0RXZlbnRzRm9yUmVzb3VyY2UsXG5cdFx0d2Vla1N0YXJ0LFxuXHRcdHdlZWtFbmQsXG5cdFx0cmVzb3VyY2VJZCxcblx0XHRhbGxEYXksXG5cdF0pXG5cblx0Y29uc3QgZGF5RXZlbnRzTWFwID0gdXNlTWVtbygoKSA9PiB7XG5cdFx0Y29uc3QgbWFwID0gbmV3IE1hcDxzdHJpbmcsIENhbGVuZGFyRXZlbnRbXT4oKVxuXHRcdGZvciAoY29uc3QgZGF5IG9mIGRheXMpIHtcblx0XHRcdGNvbnN0IGtleSA9IGRheS5mb3JtYXQoJ1lZWVktTU0tREQnKVxuXHRcdFx0Y29uc3QgZGF5U3RhcnQgPSBkYXkuc3RhcnRPZignZGF5Jylcblx0XHRcdGNvbnN0IGRheUVuZCA9IGRheS5lbmRPZignZGF5Jylcblx0XHRcdGNvbnN0IGRheUV2ZW50cyA9IGV2ZW50cy5maWx0ZXIoKGUpID0+IHtcblx0XHRcdFx0Y29uc3Qgc3RhcnRzSW5EYXkgPVxuXHRcdFx0XHRcdGUuc3RhcnQuaXNTYW1lT3JBZnRlcihkYXlTdGFydCkgJiYgZS5zdGFydC5pc1NhbWVPckJlZm9yZShkYXlFbmQpXG5cdFx0XHRcdGNvbnN0IGVuZHNJbkRheSA9XG5cdFx0XHRcdFx0ZS5lbmQuaXNTYW1lT3JBZnRlcihkYXlTdGFydCkgJiYgZS5lbmQuaXNTYW1lT3JCZWZvcmUoZGF5RW5kKVxuXHRcdFx0XHRjb25zdCBzcGFuc0RheSA9IGUuc3RhcnQuaXNCZWZvcmUoZGF5U3RhcnQpICYmIGUuZW5kLmlzQWZ0ZXIoZGF5RW5kKVxuXHRcdFx0XHRyZXR1cm4gc3RhcnRzSW5EYXkgfHwgZW5kc0luRGF5IHx8IHNwYW5zRGF5XG5cdFx0XHR9KVxuXHRcdFx0bWFwLnNldChrZXksIGRheUV2ZW50cylcblx0XHR9XG5cdFx0cmV0dXJuIG1hcFxuXHR9LCBbZGF5cywgZXZlbnRzXSlcblxuXHRjb25zdCBwb3NpdGlvbmVkRXZlbnRzID0gdXNlTWVtbygoKSA9PiB7XG5cdFx0cmV0dXJuIGdldFBvc2l0aW9uZWRFdmVudHMoe1xuXHRcdFx0ZGF5cyxcblx0XHRcdGV2ZW50cyxcblx0XHRcdGRheU1heEV2ZW50cyxcblx0XHRcdGRheU51bWJlckhlaWdodCxcblx0XHRcdGV2ZW50U3BhY2luZyxcblx0XHRcdGdyaWRUeXBlLFxuXHRcdH0pXG5cdH0sIFtkYXlzLCBkYXlNYXhFdmVudHMsIGRheU51bWJlckhlaWdodCwgZXZlbnRTcGFjaW5nLCBldmVudHMsIGdyaWRUeXBlXSlcblxuXHRyZXR1cm4geyBwb3NpdGlvbmVkRXZlbnRzLCBkYXlFdmVudHNNYXAgfVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgZGF5anMsIHsgdHlwZSBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHtcblx0REFZX05VTUJFUl9IRUlHSFQsXG5cdEVWRU5UX0JBUl9IRUlHSFQsXG5cdEdBUF9CRVRXRUVOX0VMRU1FTlRTLFxufSBmcm9tICdAL2xpYi9jb25zdGFudHMnXG5cbmV4cG9ydCBpbnRlcmZhY2UgUG9zaXRpb25lZEV2ZW50IGV4dGVuZHMgQ2FsZW5kYXJFdmVudCB7XG5cdGxlZnQ6IG51bWJlciAvLyBMZWZ0IHBvc2l0aW9uIGluIHBlcmNlbnRhZ2Vcblx0d2lkdGg6IG51bWJlciAvLyBXaWR0aCBpbiBwZXJjZW50YWdlXG5cdHRvcDogbnVtYmVyIC8vIFRvcCBwb3NpdGlvbiBpbiBwZXJjZW50YWdlXG5cdGhlaWdodDogbnVtYmVyIC8vIEhlaWdodCBpbiBwZXJjZW50YWdlXG5cdHBvc2l0aW9uOiBudW1iZXIgLy8gUG9zaXRpb24gaW4gdGhlIHJvdyAoMCBmb3IgZmlyc3QsIDEgZm9yIHNlY29uZCwgZXRjLilcblx0aXNUcnVuY2F0ZWRTdGFydDogYm9vbGVhbiAvLyBXaGV0aGVyIHRoZSBldmVudCBpcyB0cnVuY2F0ZWQgYXQgdGhlIHN0YXJ0XG5cdGlzVHJ1bmNhdGVkRW5kOiBib29sZWFuIC8vIFdoZXRoZXIgdGhlIGV2ZW50IGlzIHRydW5jYXRlZCBhdCB0aGUgZW5kXG59XG5cbmludGVyZmFjZSBHZXRQb3NpdGlvbmVkRXZlbnRzUHJvcHMge1xuXHRkYXlzOiBEYXlqc1tdXG5cdGV2ZW50czogQ2FsZW5kYXJFdmVudFtdXG5cdGRheU1heEV2ZW50czogbnVtYmVyXG5cdGRheU51bWJlckhlaWdodD86IG51bWJlclxuXHRncmlkVHlwZT86ICdkYXknIHwgJ2hvdXInIC8vIEZ1dHVyZSB1c2UgZm9yIGRpZmZlcmVudCBncmlkIHR5cGVzXG5cdGV2ZW50U3BhY2luZz86IG51bWJlciAvLyBDdXN0b20gdmVydGljYWwgc3BhY2luZyBiZXR3ZWVuIGV2ZW50cyAoZGVmYXVsdHMgdG8gR0FQX0JFVFdFRU5fRUxFTUVOVFMpXG59XG5cbmV4cG9ydCBjb25zdCBnZXRQb3NpdGlvbmVkRXZlbnRzID0gKHtcblx0ZGF5cyxcblx0ZXZlbnRzLFxuXHRkYXlNYXhFdmVudHMsXG5cdGRheU51bWJlckhlaWdodCA9IERBWV9OVU1CRVJfSEVJR0hULFxuXHRncmlkVHlwZSA9ICdkYXknLFxuXHRldmVudFNwYWNpbmcgPSBHQVBfQkVUV0VFTl9FTEVNRU5UUyxcbn06IEdldFBvc2l0aW9uZWRFdmVudHNQcm9wcykgPT4ge1xuXHQvLyBGb3IgaG91ci1iYXNlZCBncmlkcywgdXNlIGFjdHVhbCBmaXJzdC9sYXN0IGhvdXJzIGZyb20gZGF5cyBhcnJheVxuXHQvLyBGb3IgZGF5LWJhc2VkIGdyaWRzLCB1c2Ugc3RhcnQvZW5kIG9mIGRheSB0byBjYXB0dXJlIGFsbCBldmVudHNcblx0Y29uc3QgZmlyc3QgPSBkYXlzLmF0KDApXG5cdGNvbnN0IGxhc3QgPSBkYXlzLmF0KC0xKVxuXHRpZiAoIWZpcnN0IHx8ICFsYXN0KSByZXR1cm4gW11cblxuXHRjb25zdCBmaXJzdERheSA9XG5cdFx0Z3JpZFR5cGUgPT09ICdob3VyJyA/IGZpcnN0LnN0YXJ0T2YoJ2hvdXInKSA6IGZpcnN0LnN0YXJ0T2YoJ2RheScpXG5cdGNvbnN0IGxhc3REYXkgPSBncmlkVHlwZSA9PT0gJ2hvdXInID8gbGFzdC5lbmRPZignaG91cicpIDogbGFzdC5lbmRPZignZGF5Jylcblx0Y29uc3QgZGF5Q291bnQgPSBkYXlzLmxlbmd0aFxuXG5cdC8vIFNlcGFyYXRlIG11bHRpLWRheSBhbmQgc2luZ2xlLWRheSBldmVudHNcblx0Y29uc3QgbXVsdGlEYXlFdmVudHMgPSBldmVudHMuZmlsdGVyKChlKSA9PiBlLmVuZC5kaWZmKGUuc3RhcnQsIGdyaWRUeXBlKSA+IDApXG5cdGNvbnN0IHNpbmdsZURheUV2ZW50cyA9IGV2ZW50cy5maWx0ZXIoXG5cdFx0KGUpID0+IGUuZW5kLmRpZmYoZS5zdGFydCwgZ3JpZFR5cGUpID09PSAwXG5cdClcblxuXHQvLyBTb3J0IG11bHRpLWRheSBldmVudHMgYnkgc3RhcnQgZGF0ZSwgdGhlbiBieSBkdXJhdGlvblxuXHRjb25zdCBzb3J0ZWRNdWx0aURheSA9IFsuLi5tdWx0aURheUV2ZW50c10uc29ydCgoYSwgYikgPT4ge1xuXHRcdGNvbnN0IHN0YXJ0RGlmZiA9IGEuc3RhcnQuZGlmZihiLnN0YXJ0KVxuXHRcdGlmIChzdGFydERpZmYgIT09IDApIHtcblx0XHRcdHJldHVybiBzdGFydERpZmZcblx0XHR9XG5cdFx0cmV0dXJuIGIuZW5kLmRpZmYoYi5zdGFydCkgLSBhLmVuZC5kaWZmKGEuc3RhcnQpIC8vIExvbmdlciBldmVudHMgZmlyc3Rcblx0fSlcblxuXHQvLyBTb3J0IHNpbmdsZS1kYXkgZXZlbnRzIGJ5IHN0YXJ0IHRpbWVcblx0Y29uc3Qgc29ydGVkU2luZ2xlRGF5ID0gWy4uLnNpbmdsZURheUV2ZW50c10uc29ydCgoYSwgYikgPT5cblx0XHRhLnN0YXJ0LmRpZmYoYi5zdGFydClcblx0KVxuXG5cdC8vIENyZWF0ZSBkYXlDb3VudCB4IGRheU1heEV2ZW50cyBncmlkIHdpdGggZmxhZ3Ncblx0Y29uc3QgZ3JpZDogeyB0YWtlbjogYm9vbGVhbjsgZXZlbnQ6IENhbGVuZGFyRXZlbnQgfCBudWxsIH1bXVtdID0gW11cblx0Zm9yIChsZXQgcm93ID0gMDsgcm93IDwgZGF5TWF4RXZlbnRzOyByb3crKykge1xuXHRcdGdyaWRbcm93XSA9IFtdXG5cdFx0Zm9yIChsZXQgY29sID0gMDsgY29sIDwgZGF5Q291bnQ7IGNvbCsrKSB7XG5cdFx0XHRncmlkW3Jvd11bY29sXSA9IHsgdGFrZW46IGZhbHNlLCBldmVudDogbnVsbCB9XG5cdFx0fVxuXHR9XG5cblx0Y29uc3QgcHJvY2Vzc2VkRXZlbnRzOiBQb3NpdGlvbmVkRXZlbnRbXSA9IFtdXG5cblx0Ly8gU3RlcCAxOiBBc3NpZ24gcG9zaXRpb25zIHRvIG11bHRpLWRheSBldmVudHMgZmlyc3Rcblx0Zm9yIChjb25zdCBldmVudCBvZiBzb3J0ZWRNdWx0aURheSkge1xuXHRcdGNvbnN0IGV2ZW50U3RhcnQgPSBkYXlqcy5tYXgoZXZlbnQuc3RhcnQuc3RhcnRPZihncmlkVHlwZSksIGZpcnN0RGF5KVxuXHRcdGNvbnN0IGFkanVzdGVkRW5kID1cblx0XHRcdGdyaWRUeXBlID09PSAnaG91cicgPyBldmVudC5lbmQuc3VidHJhY3QoMSwgJ21pbnV0ZScpIDogZXZlbnQuZW5kXG5cdFx0Y29uc3QgZXZlbnRFbmQgPSBkYXlqcy5taW4oYWRqdXN0ZWRFbmQuc3RhcnRPZihncmlkVHlwZSksIGxhc3REYXkpXG5cdFx0Y29uc3Qgc3RhcnRDb2wgPSBNYXRoLm1heCgwLCBldmVudFN0YXJ0LmRpZmYoZmlyc3REYXksIGdyaWRUeXBlKSlcblx0XHRjb25zdCBlbmRDb2wgPSBNYXRoLm1pbihkYXlDb3VudCAtIDEsIGV2ZW50RW5kLmRpZmYoZmlyc3REYXksIGdyaWRUeXBlKSlcblxuXHRcdC8vIERldGVjdCBpZiBldmVudCBpcyB0cnVuY2F0ZWQgYXQgdGhlIGJvdW5kYXJpZXNcblx0XHRjb25zdCBpc1RydW5jYXRlZFN0YXJ0ID0gZXZlbnQuc3RhcnQuc3RhcnRPZihncmlkVHlwZSkuaXNCZWZvcmUoZmlyc3REYXkpXG5cdFx0Y29uc3QgaXNUcnVuY2F0ZWRFbmQgPSBldmVudC5lbmQuc3RhcnRPZihncmlkVHlwZSkuaXNBZnRlcihsYXN0RGF5KVxuXG5cdFx0Ly8gVHJ5IHRvIHBsYWNlIHRoZSBldmVudCBzdGFydGluZyBmcm9tIGl0cyBvcmlnaW5hbCBzdGFydCBjb2x1bW5cblx0XHRsZXQgcGxhY2VkU3VjY2Vzc2Z1bGx5ID0gZmFsc2VcblxuXHRcdC8vIEZpcnN0IHRyeTogcGxhY2UgZnJvbSBvcmlnaW5hbCBzdGFydCBwb3NpdGlvblxuXHRcdGxldCBhc3NpZ25lZFJvdyA9IC0xXG5cdFx0Zm9yIChsZXQgcm93ID0gMDsgcm93IDwgZGF5TWF4RXZlbnRzOyByb3crKykge1xuXHRcdFx0bGV0IGNhblBsYWNlID0gdHJ1ZVxuXHRcdFx0Zm9yIChsZXQgY29sID0gc3RhcnRDb2w7IGNvbCA8PSBlbmRDb2w7IGNvbCsrKSB7XG5cdFx0XHRcdGlmIChncmlkW3Jvd11bY29sXS50YWtlbikge1xuXHRcdFx0XHRcdGNhblBsYWNlID0gZmFsc2Vcblx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAoY2FuUGxhY2UpIHtcblx0XHRcdFx0YXNzaWduZWRSb3cgPSByb3dcblx0XHRcdFx0YnJlYWtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBJZiB3ZSBmb3VuZCBhIHJvdywgYXNzaWduIHRoZSBldmVudCB0byBhbGwgaXRzIGNvbHVtbnNcblx0XHRpZiAoYXNzaWduZWRSb3cgIT09IC0xKSB7XG5cdFx0XHRmb3IgKGxldCBjb2wgPSBzdGFydENvbDsgY29sIDw9IGVuZENvbDsgY29sKyspIHtcblx0XHRcdFx0Z3JpZFthc3NpZ25lZFJvd11bY29sXSA9IHsgdGFrZW46IHRydWUsIGV2ZW50IH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gQ3JlYXRlIHBvc2l0aW9uIGRhdGEgZm9yIHJlbmRlcmluZ1xuXHRcdFx0Y29uc3Qgc3BhbkRheXMgPSBlbmRDb2wgLSBzdGFydENvbCArIDFcblx0XHRcdHByb2Nlc3NlZEV2ZW50cy5wdXNoKHtcblx0XHRcdFx0bGVmdDogKHN0YXJ0Q29sIC8gZGF5Q291bnQpICogMTAwLFxuXHRcdFx0XHR3aWR0aDogKHNwYW5EYXlzIC8gZGF5Q291bnQpICogMTAwLFxuXHRcdFx0XHR0b3A6XG5cdFx0XHRcdFx0ZGF5TnVtYmVySGVpZ2h0ICtcblx0XHRcdFx0XHRldmVudFNwYWNpbmcgK1xuXHRcdFx0XHRcdGFzc2lnbmVkUm93ICogKEVWRU5UX0JBUl9IRUlHSFQgKyBldmVudFNwYWNpbmcpLFxuXHRcdFx0XHRoZWlnaHQ6IEVWRU5UX0JBUl9IRUlHSFQsXG5cdFx0XHRcdHBvc2l0aW9uOiBhc3NpZ25lZFJvdyxcblx0XHRcdFx0Li4uZXZlbnQsXG5cdFx0XHRcdGlzVHJ1bmNhdGVkU3RhcnQsXG5cdFx0XHRcdGlzVHJ1bmNhdGVkRW5kLFxuXHRcdFx0fSBhcyBQb3NpdGlvbmVkRXZlbnQpXG5cdFx0XHRwbGFjZWRTdWNjZXNzZnVsbHkgPSB0cnVlXG5cdFx0fVxuXG5cdFx0Ly8gSWYgY291bGRuJ3QgcGxhY2UgYXQgb3JpZ2luYWwgcG9zaXRpb24sIHRyeSB0cnVuY2F0ZWQgdmVyc2lvbnMgc3RhcnRpbmcgZnJvbSBsYXRlciBkYXlzXG5cdFx0aWYgKCFwbGFjZWRTdWNjZXNzZnVsbHkpIHtcblx0XHRcdGZvciAoXG5cdFx0XHRcdGxldCB0cnlTdGFydENvbCA9IHN0YXJ0Q29sICsgMTtcblx0XHRcdFx0dHJ5U3RhcnRDb2wgPD0gZW5kQ29sO1xuXHRcdFx0XHR0cnlTdGFydENvbCsrXG5cdFx0XHQpIHtcblx0XHRcdFx0Ly8gVHJ5IHRvIHBsYWNlIHRoZSB0cnVuY2F0ZWQgZXZlbnQgc3RhcnRpbmcgZnJvbSB0aGlzIGNvbHVtblxuXHRcdFx0XHRsZXQgdHJ1bmNhdGVkQXNzaWduZWRSb3cgPSAtMVxuXHRcdFx0XHRmb3IgKGxldCByb3cgPSAwOyByb3cgPCBkYXlNYXhFdmVudHM7IHJvdysrKSB7XG5cdFx0XHRcdFx0bGV0IGNhblBsYWNlID0gdHJ1ZVxuXHRcdFx0XHRcdGZvciAobGV0IGNvbCA9IHRyeVN0YXJ0Q29sOyBjb2wgPD0gZW5kQ29sOyBjb2wrKykge1xuXHRcdFx0XHRcdFx0aWYgKGdyaWRbcm93XVtjb2xdLnRha2VuKSB7XG5cdFx0XHRcdFx0XHRcdGNhblBsYWNlID0gZmFsc2Vcblx0XHRcdFx0XHRcdFx0YnJlYWtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKGNhblBsYWNlKSB7XG5cdFx0XHRcdFx0XHR0cnVuY2F0ZWRBc3NpZ25lZFJvdyA9IHJvd1xuXHRcdFx0XHRcdFx0YnJlYWtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBJZiB3ZSBmb3VuZCBhIHJvdyBmb3IgdGhlIHRydW5jYXRlZCB2ZXJzaW9uLCBwbGFjZSBpdFxuXHRcdFx0XHRpZiAodHJ1bmNhdGVkQXNzaWduZWRSb3cgIT09IC0xKSB7XG5cdFx0XHRcdFx0Zm9yIChsZXQgY29sID0gdHJ5U3RhcnRDb2w7IGNvbCA8PSBlbmRDb2w7IGNvbCsrKSB7XG5cdFx0XHRcdFx0XHRncmlkW3RydW5jYXRlZEFzc2lnbmVkUm93XVtjb2xdID0geyB0YWtlbjogdHJ1ZSwgZXZlbnQgfVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIENyZWF0ZSBwb3NpdGlvbiBkYXRhIGZvciB0aGUgdHJ1bmNhdGVkIHJlbmRlcmluZ1xuXHRcdFx0XHRcdGNvbnN0IHRydW5jYXRlZFNwYW5EYXlzID0gZW5kQ29sIC0gdHJ5U3RhcnRDb2wgKyAxXG5cdFx0XHRcdFx0cHJvY2Vzc2VkRXZlbnRzLnB1c2goe1xuXHRcdFx0XHRcdFx0bGVmdDogKHRyeVN0YXJ0Q29sIC8gZGF5Q291bnQpICogMTAwLFxuXHRcdFx0XHRcdFx0d2lkdGg6ICh0cnVuY2F0ZWRTcGFuRGF5cyAvIGRheUNvdW50KSAqIDEwMCxcblx0XHRcdFx0XHRcdHRvcDpcblx0XHRcdFx0XHRcdFx0ZGF5TnVtYmVySGVpZ2h0ICtcblx0XHRcdFx0XHRcdFx0ZXZlbnRTcGFjaW5nICtcblx0XHRcdFx0XHRcdFx0dHJ1bmNhdGVkQXNzaWduZWRSb3cgKiAoRVZFTlRfQkFSX0hFSUdIVCArIGV2ZW50U3BhY2luZyksXG5cdFx0XHRcdFx0XHRoZWlnaHQ6IEVWRU5UX0JBUl9IRUlHSFQsXG5cdFx0XHRcdFx0XHRwb3NpdGlvbjogdHJ1bmNhdGVkQXNzaWduZWRSb3csXG5cdFx0XHRcdFx0XHQuLi5ldmVudCxcblx0XHRcdFx0XHRcdGlzVHJ1bmNhdGVkU3RhcnQ6IHRydWUsIC8vIEFsd2F5cyB0cnVuY2F0ZWQgYXQgc3RhcnQgd2hlbiB1c2luZyB0aGlzIGZhbGxiYWNrIGxvZ2ljXG5cdFx0XHRcdFx0XHRpc1RydW5jYXRlZEVuZCxcblx0XHRcdFx0XHR9IGFzIFBvc2l0aW9uZWRFdmVudClcblx0XHRcdFx0XHRwbGFjZWRTdWNjZXNzZnVsbHkgPSB0cnVlXG5cdFx0XHRcdFx0YnJlYWsgLy8gU3VjY2Vzc2Z1bGx5IHBsYWNlZCwgc3RvcCB0cnlpbmcgb3RoZXIgc3RhcnQgcG9zaXRpb25zXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBTdGVwIDI6IEZpbGwgZ2FwcyB3aXRoIHNpbmdsZS1kYXkgZXZlbnRzXG5cdGZvciAoY29uc3QgZXZlbnQgb2Ygc29ydGVkU2luZ2xlRGF5KSB7XG5cdFx0Y29uc3QgZXZlbnRTdGFydCA9IGRheWpzLm1heChldmVudC5zdGFydC5zdGFydE9mKGdyaWRUeXBlKSwgZmlyc3REYXkpXG5cdFx0Ly8gQ2xhbXAgY29sIHRvIHZhbGlkIGdyaWQgYm91bmRzIHRvIHByZXZlbnQgYWNjZXNzaW5nIHVuZGVmaW5lZCBncmlkIHBvc2l0aW9uc1xuXHRcdGNvbnN0IGNvbCA9IE1hdGgubWF4KFxuXHRcdFx0MCxcblx0XHRcdE1hdGgubWluKGRheUNvdW50IC0gMSwgZXZlbnRTdGFydC5kaWZmKGZpcnN0RGF5LCBncmlkVHlwZSkpXG5cdFx0KVxuXG5cdFx0Ly8gU2luZ2xlLWRheSBldmVudHMgYXJlIG5vdCB0cnVuY2F0ZWQgYnkgZGVmaW5pdGlvblxuXHRcdGNvbnN0IGlzVHJ1bmNhdGVkU3RhcnQgPSBmYWxzZVxuXHRcdGNvbnN0IGlzVHJ1bmNhdGVkRW5kID0gZmFsc2VcblxuXHRcdC8vIEZpbmQgdGhlIGZpcnN0IGF2YWlsYWJsZSByb3cgaW4gdGhpcyBjb2x1bW5cblx0XHRsZXQgYXNzaWduZWRSb3cgPSAtMVxuXHRcdGZvciAobGV0IHJvdyA9IDA7IHJvdyA8IGRheU1heEV2ZW50czsgcm93KyspIHtcblx0XHRcdGlmICghZ3JpZFtyb3ddW2NvbF0udGFrZW4pIHtcblx0XHRcdFx0YXNzaWduZWRSb3cgPSByb3dcblx0XHRcdFx0YnJlYWtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBJZiB3ZSBmb3VuZCBhIHJvdywgYXNzaWduIHRoZSBldmVudFxuXHRcdGlmIChhc3NpZ25lZFJvdyAhPT0gLTEpIHtcblx0XHRcdGdyaWRbYXNzaWduZWRSb3ddW2NvbF0gPSB7IHRha2VuOiB0cnVlLCBldmVudCB9XG5cblx0XHRcdC8vIENyZWF0ZSBwb3NpdGlvbiBkYXRhIGZvciByZW5kZXJpbmdcblx0XHRcdHByb2Nlc3NlZEV2ZW50cy5wdXNoKHtcblx0XHRcdFx0bGVmdDogKGNvbCAvIGRheUNvdW50KSAqIDEwMCxcblx0XHRcdFx0d2lkdGg6ICgxIC8gZGF5Q291bnQpICogMTAwLFxuXHRcdFx0XHR0b3A6XG5cdFx0XHRcdFx0ZGF5TnVtYmVySGVpZ2h0ICtcblx0XHRcdFx0XHRldmVudFNwYWNpbmcgK1xuXHRcdFx0XHRcdGFzc2lnbmVkUm93ICogKEVWRU5UX0JBUl9IRUlHSFQgKyBldmVudFNwYWNpbmcpLFxuXHRcdFx0XHRoZWlnaHQ6IEVWRU5UX0JBUl9IRUlHSFQsXG5cdFx0XHRcdHBvc2l0aW9uOiBhc3NpZ25lZFJvdyxcblx0XHRcdFx0Li4uZXZlbnQsXG5cdFx0XHRcdGlzVHJ1bmNhdGVkU3RhcnQsXG5cdFx0XHRcdGlzVHJ1bmNhdGVkRW5kLFxuXHRcdFx0fSBhcyBQb3NpdGlvbmVkRXZlbnQpXG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHByb2Nlc3NlZEV2ZW50c1xufVxuIiwKICAgICJpbXBvcnQgUmVhY3QsIHsgbWVtbywgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgRGF5TnVtYmVyIH0gZnJvbSAnQC9jb21wb25lbnRzL2RheS1udW1iZXInXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgeyBpc0J1c2luZXNzSG91ciB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvdXRpbHMvYnVzaW5lc3MtaG91cnMnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSB7IERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBFVkVOVF9CQVJfSEVJR0hUIH0gZnJvbSAnQC9saWIvY29uc3RhbnRzJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB0eXBlIHsgU2VsZWN0ZWREYXlFdmVudHMgfSBmcm9tICcuL2FsbC1ldmVudHMtZGlhbG9nJ1xuaW1wb3J0IHsgQWxsRXZlbnREaWFsb2cgfSBmcm9tICcuL2FsbC1ldmVudHMtZGlhbG9nJ1xuaW1wb3J0IHsgRHJvcHBhYmxlQ2VsbCB9IGZyb20gJy4vZHJvcHBhYmxlLWNlbGwnXG5cbmludGVyZmFjZSBHcmlkUHJvcHMge1xuXHRkYXk6IERheWpzXG5cdGhvdXI/OiBudW1iZXIgLy8gT3B0aW9uYWwgaG91ciBmb3IgaG91ci1iYXNlZCBncmlkc1xuXHRtaW51dGU/OiBudW1iZXIgLy8gT3B0aW9uYWwgbWludXRlIGZvciBtb3JlIGdyYW51bGFyIHRpbWUgc2xvdHNcblx0ZGF5TWF4RXZlbnRzPzogbnVtYmVyXG5cdGNsYXNzTmFtZT86IHN0cmluZyAvLyBPcHRpb25hbCBjbGFzc05hbWUgZm9yIGN1c3RvbSBzdHlsaW5nXG5cdHJlc291cmNlSWQ/OiBzdHJpbmcgfCBudW1iZXIgLy8gT3B0aW9uYWwgcmVzb3VyY2UgSUQgZm9yIHJlc291cmNlLXNwZWNpZmljIGRheSBjZWxsc1xuXHRncmlkVHlwZT86ICdkYXknIHwgJ2hvdXInIC8vIEZ1dHVyZSB1c2UgZm9yIGRpZmZlcmVudCBncmlkIHR5cGVzXG5cdHNob3VsZFJlbmRlckV2ZW50cz86IGJvb2xlYW4gLy8gRmxhZyB0byBkZXRlcm1pbmUgaWYgZXZlbnRzIHNob3VsZCBiZSByZW5kZXJlZFxuXHRhbGxEYXk/OiBib29sZWFuIC8vIEZsYWcgdG8gaW5kaWNhdGUgaWYgdGhpcyBpcyBhbiBhbGwtZGF5IGNlbGxcblx0c2hvd0RheU51bWJlcj86IGJvb2xlYW4gLy8gRmxhZyB0byBzaG93IG9yIGhpZGUgdGhlIGRheSBudW1iZXJcblx0Y2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGVcblx0J2RhdGEtdGVzdGlkJz86IHN0cmluZ1xuXHRwcmVjb21wdXRlZEV2ZW50cz86IENhbGVuZGFyRXZlbnRbXVxufVxuXG5jb25zdCBOb01lbW9HcmlkQ2VsbDogUmVhY3QuRkM8R3JpZFByb3BzPiA9ICh7XG5cdGRheSxcblx0aG91cixcblx0bWludXRlLFxuXHRjbGFzc05hbWUgPSAnJyxcblx0cmVzb3VyY2VJZCxcblx0Z3JpZFR5cGUgPSAnZGF5Jyxcblx0c2hvdWxkUmVuZGVyRXZlbnRzID0gdHJ1ZSxcblx0YWxsRGF5ID0gZmFsc2UsXG5cdHByZWNvbXB1dGVkRXZlbnRzLFxuXHQnZGF0YS10ZXN0aWQnOiBkYXRhVGVzdElkLFxuXHRzaG93RGF5TnVtYmVyID0gZmFsc2UsXG5cdGNoaWxkcmVuLFxufSkgPT4ge1xuXHRjb25zdCBhbGxFdmVudHNEaWFsb2dSZWYgPSBSZWFjdC51c2VSZWY8e1xuXHRcdG9wZW46ICgpID0+IHZvaWRcblx0XHRjbG9zZTogKCkgPT4gdm9pZFxuXHRcdHNldFNlbGVjdGVkRGF5RXZlbnRzOiAoZGF5RXZlbnRzOiBTZWxlY3RlZERheUV2ZW50cykgPT4gdm9pZFxuXHR9PihudWxsKVxuXHRjb25zdCB7XG5cdFx0ZGF5TWF4RXZlbnRzID0gMCxcblx0XHRnZXRFdmVudHNGb3JEYXRlUmFuZ2UsXG5cdFx0Y3VycmVudERhdGUsXG5cdFx0dCxcblx0XHRnZXRFdmVudHNGb3JSZXNvdXJjZSxcblx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdGN1cnJlbnRMb2NhbGUsXG5cdFx0ZXZlbnRTcGFjaW5nLFxuXHRcdGdldFJlc291cmNlQnlJZCxcblx0fSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblxuXHRjb25zdCB0b2RheUV2ZW50cyA9IHVzZU1lbW8oKCkgPT4ge1xuXHRcdGlmICghc2hvdWxkUmVuZGVyRXZlbnRzKSB7XG5cdFx0XHRyZXR1cm4gW11cblx0XHR9XG5cblx0XHQvLyBVc2UgcHJlLWNvbXB1dGVkIGV2ZW50cyBmcm9tIHRoZSByb3cgbGV2ZWwgd2hlbiBhdmFpbGFibGVcblx0XHRpZiAocHJlY29tcHV0ZWRFdmVudHMpIHtcblx0XHRcdHJldHVybiBwcmVjb21wdXRlZEV2ZW50c1xuXHRcdH1cblxuXHRcdGxldCB0b2RheUV2ZW50cyA9IGdldEV2ZW50c0ZvckRhdGVSYW5nZShcblx0XHRcdGRheS5zdGFydE9mKGdyaWRUeXBlKSxcblx0XHRcdGRheS5lbmRPZihncmlkVHlwZSlcblx0XHQpXG5cblx0XHRpZiAoYWxsRGF5KSB7XG5cdFx0XHR0b2RheUV2ZW50cyA9IHRvZGF5RXZlbnRzLmZpbHRlcigoZSkgPT4gZS5hbGxEYXkpXG5cdFx0fVxuXG5cdFx0aWYgKHJlc291cmNlSWQpIHtcblx0XHRcdGNvbnN0IHJlc291cmNlRXZlbnRzID0gZ2V0RXZlbnRzRm9yUmVzb3VyY2UocmVzb3VyY2VJZCkgPz8gW11cblxuXHRcdFx0cmV0dXJuIHRvZGF5RXZlbnRzLmZpbHRlcigoZXZlbnQpID0+XG5cdFx0XHRcdHJlc291cmNlRXZlbnRzLnNvbWUoKHJlKSA9PiBTdHJpbmcocmUuaWQpID09PSBTdHJpbmcoZXZlbnQuaWQpKVxuXHRcdFx0KVxuXHRcdH1cblxuXHRcdHJldHVybiB0b2RheUV2ZW50c1xuXHR9LCBbXG5cdFx0cHJlY29tcHV0ZWRFdmVudHMsXG5cdFx0ZGF5LFxuXHRcdHJlc291cmNlSWQsXG5cdFx0Z2V0RXZlbnRzRm9yRGF0ZVJhbmdlLFxuXHRcdGdldEV2ZW50c0ZvclJlc291cmNlLFxuXHRcdGdyaWRUeXBlLFxuXHRcdHNob3VsZFJlbmRlckV2ZW50cyxcblx0XHRhbGxEYXksXG5cdF0pXG5cblx0Ly8gSGFuZGxlciBmb3Igc2hvd2luZyBhbGwgZXZlbnRzIGluIGEgZGlhbG9nXG5cdGNvbnN0IHNob3dBbGxFdmVudHMgPSAoZGF5OiBEYXlqcywgZXZlbnRzOiBDYWxlbmRhckV2ZW50W10pID0+IHtcblx0XHRhbGxFdmVudHNEaWFsb2dSZWYuY3VycmVudD8uc2V0U2VsZWN0ZWREYXlFdmVudHMoe1xuXHRcdFx0ZGF5LFxuXHRcdFx0ZXZlbnRzLFxuXHRcdH0pXG5cdFx0YWxsRXZlbnRzRGlhbG9nUmVmLmN1cnJlbnQ/Lm9wZW4oKVxuXHR9XG5cblx0Y29uc3QgaXNDdXJyZW50TW9udGggPSBkYXkubW9udGgoKSA9PT0gY3VycmVudERhdGUubW9udGgoKVxuXG5cdGNvbnN0IGhpZGRlbkV2ZW50c0NvdW50ID0gdG9kYXlFdmVudHMubGVuZ3RoIC0gZGF5TWF4RXZlbnRzXG5cdGNvbnN0IGhhc0hpZGRlbkV2ZW50cyA9IGhpZGRlbkV2ZW50c0NvdW50ID4gMFxuXG5cdC8vIFVzZSByZXNvdXJjZS1zcGVjaWZpYyBidXNpbmVzcyBob3VycyBpZiBhdmFpbGFibGUsIG90aGVyd2lzZSBmYWxsYmFjayB0byBnbG9iYWxcblx0Y29uc3QgZWZmZWN0aXZlQnVzaW5lc3NIb3VycyA9IHVzZU1lbW8oKCkgPT4ge1xuXHRcdGlmIChyZXNvdXJjZUlkICYmIGdldFJlc291cmNlQnlJZCkge1xuXHRcdFx0Y29uc3QgcmVzb3VyY2UgPSBnZXRSZXNvdXJjZUJ5SWQocmVzb3VyY2VJZClcblx0XHRcdGlmIChyZXNvdXJjZT8uYnVzaW5lc3NIb3Vycykge1xuXHRcdFx0XHRyZXR1cm4gcmVzb3VyY2UuYnVzaW5lc3NIb3Vyc1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gYnVzaW5lc3NIb3Vyc1xuXHR9LCBbcmVzb3VyY2VJZCwgZ2V0UmVzb3VyY2VCeUlkLCBidXNpbmVzc0hvdXJzXSlcblxuXHRjb25zdCBpc0J1c2luZXNzID0gaXNCdXNpbmVzc0hvdXIoe1xuXHRcdGRhdGU6IGRheSxcblx0XHRob3VyOiBncmlkVHlwZSA9PT0gJ2hvdXInID8gZGF5LmhvdXIoKSA6IHVuZGVmaW5lZCxcblx0XHRidXNpbmVzc0hvdXJzOiBlZmZlY3RpdmVCdXNpbmVzc0hvdXJzLFxuXHR9KVxuXG5cdGNvbnN0IGhvdXJTdHIgPSBkYXkuZm9ybWF0KCdISCcpXG5cdGNvbnN0IG1tID0gZGF5LmZvcm1hdCgnbW0nKVxuXHRjb25zdCBiYXNlVGVzdElkID0gYGRheS1jZWxsLSR7ZGF5LmZvcm1hdCgnWVlZWS1NTS1ERCcpfWBcblx0Y29uc3QgdGVzdElkID1cblx0XHRncmlkVHlwZSA9PT0gJ2hvdXInID8gYCR7YmFzZVRlc3RJZH0tJHtob3VyU3RyfS0ke21tfWAgOiBiYXNlVGVzdElkXG5cdC8vIERyb3BwYWJsZSBJRCBtdXN0IHVzZSB0b0lTT1N0cmluZygpIChub3QgWVlZWS1NTS1ERCkgc28gZWFjaCB0aW1lIHNsb3Rcblx0Ly8gZ2V0cyBhIHVuaXF1ZSBJRCBpbiBAZG5kLWtpdCdzIHJlZ2lzdHJ5LiBZWVlZLU1NLUREIHN0cmlwcyB0aGUgdGltZSxcblx0Ly8gY2F1c2luZyBhbGwgY2VsbHMgb24gdGhlIHNhbWUgZGF5IHRvIGNvbGxpZGUuXG5cdGNvbnN0IGRyb3BwYWJsZUlkID0gYGRheS1jZWxsLSR7ZGF5LnRvSVNPU3RyaW5nKCl9JHthbGxEYXkgPyAnLWFsbGRheScgOiAnJ30ke3Jlc291cmNlSWQgPyBgLXJlc291cmNlLSR7cmVzb3VyY2VJZH1gIDogJyd9YFxuXG5cdHJldHVybiAoXG5cdFx0PD5cblx0XHRcdDxEcm9wcGFibGVDZWxsXG5cdFx0XHRcdGFsbERheT17YWxsRGF5fVxuXHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdCdjdXJzb3ItcG9pbnRlciBvdmVyZmxvdy1jbGlwIHAtMSBob3ZlcjpiZy1hY2NlbnQgbWluLWgtWzYwcHhdIHJlbGF0aXZlIGJvcmRlci1yIGxhc3Q6Ym9yZGVyLXItMCBvbmx5OmJvcmRlci1yIGJvcmRlci1iJyxcblx0XHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdFx0KX1cblx0XHRcdFx0ZGF0YS10ZXN0aWQ9e2RhdGFUZXN0SWQgfHwgdGVzdElkfVxuXHRcdFx0XHRkYXRlPXtkYXl9XG5cdFx0XHRcdGRpc2FibGVkPXshaXNCdXNpbmVzcyB8fCAhaXNDdXJyZW50TW9udGh9XG5cdFx0XHRcdGhvdXI9e2hvdXJ9XG5cdFx0XHRcdGlkPXtkcm9wcGFibGVJZH1cblx0XHRcdFx0bWludXRlPXttaW51dGV9XG5cdFx0XHRcdHJlc291cmNlSWQ9e3Jlc291cmNlSWR9XG5cdFx0XHRcdHR5cGU9XCJkYXktY2VsbFwiXG5cdFx0XHQ+XG5cdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIGgtZnVsbCB3LWZ1bGxcIlxuXHRcdFx0XHRcdGRhdGEtdGVzdGlkPVwiZ3JpZC1jZWxsLWNvbnRlbnRcIlxuXHRcdFx0XHRcdHN0eWxlPXt7IGdhcDogYCR7ZXZlbnRTcGFjaW5nfXB4YCB9fVxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0e3Nob3dEYXlOdW1iZXIgJiYgPERheU51bWJlciBkYXRlPXtkYXl9IGxvY2FsZT17Y3VycmVudExvY2FsZX0gLz59XG5cblx0XHRcdFx0XHR7c2hvdWxkUmVuZGVyRXZlbnRzICYmIChcblx0XHRcdFx0XHRcdDw+XG5cdFx0XHRcdFx0XHRcdHsvKiBSZW5kZXIgcGxhY2Vob2xkZXJzIGZvciBldmVudHMgdGhhdCBvY2N1ciB0b2RheSBzbyB0aGF0IHRoZSBjZWxsIGhlaWdodCBpcyBhY2NvcmRpbmcgdG8gZGF5TWF4RXZlbnRzLiAqL31cblx0XHRcdFx0XHRcdFx0e3RvZGF5RXZlbnRzLnNsaWNlKDAsIGRheU1heEV2ZW50cykubWFwKChldmVudCwgcm93SW5kZXgpID0+IChcblx0XHRcdFx0XHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJ3LWZ1bGwgc2hyaW5rLTBcIlxuXHRcdFx0XHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e2V2ZW50Py50aXRsZX1cblx0XHRcdFx0XHRcdFx0XHRcdGtleT17YGVtcHR5LSR7cm93SW5kZXh9LSR7ZXZlbnQuaWR9YH1cblx0XHRcdFx0XHRcdFx0XHRcdHN0eWxlPXt7IGhlaWdodDogYCR7RVZFTlRfQkFSX0hFSUdIVH1weGAgfX1cblx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHQpKX1cblxuXHRcdFx0XHRcdFx0XHR7LyogU2hvdyBtb3JlIGV2ZW50cyBidXR0b24gd2l0aCBhY2N1cmF0ZSBjb3VudCAqL31cblx0XHRcdFx0XHRcdFx0e2hhc0hpZGRlbkV2ZW50cyAmJiAoXG5cdFx0XHRcdFx0XHRcdFx0Ly8gYmlvbWUtaWdub3JlIGxpbnQvYTExeS91c2VTZW1hbnRpY0VsZW1lbnRzOiBVc2luZyBkaXYgYXMgYnV0dG9uXG5cdFx0XHRcdFx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwidGV4dC1tdXRlZC1mb3JlZ3JvdW5kIGhvdmVyOnRleHQtZm9yZWdyb3VuZCBjdXJzb3ItcG9pbnRlciB0ZXh0LVsxMHB4XSB3aGl0ZXNwYWNlLW5vd3JhcCBzbTp0ZXh0LXhzIHNocmluay0wIG10LTFcIlxuXHRcdFx0XHRcdFx0XHRcdFx0b25DbGljaz17KGUpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZS5zdG9wUHJvcGFnYXRpb24oKVxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHNob3dBbGxFdmVudHMoZGF5LCB0b2RheUV2ZW50cylcblx0XHRcdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHRcdFx0XHRvbktleURvd249eyhlKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChlLmtleSA9PT0gJ0VudGVyJyB8fCBlLmtleSA9PT0gJyAnKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZS5zdG9wUHJvcGFnYXRpb24oKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHNob3dBbGxFdmVudHMoZGF5LCB0b2RheUV2ZW50cylcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdFx0XHRcdHJvbGU9XCJidXR0b25cIlxuXHRcdFx0XHRcdFx0XHRcdFx0dGFiSW5kZXg9ezB9XG5cdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0K3toaWRkZW5FdmVudHNDb3VudH0ge3QoJ21vcmUnKX1cblx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdDwvPlxuXHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0e2NoaWxkcmVufVxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdDwvRHJvcHBhYmxlQ2VsbD5cblxuXHRcdFx0ey8qIERpYWxvZyBmb3Igc2hvd2luZyBhbGwgZXZlbnRzICovfVxuXHRcdFx0PEFsbEV2ZW50RGlhbG9nIHJlZj17YWxsRXZlbnRzRGlhbG9nUmVmfSAvPlxuXHRcdDwvPlxuXHQpXG59XG5cbmV4cG9ydCBjb25zdCBHcmlkQ2VsbCA9IG1lbW8oTm9NZW1vR3JpZENlbGwpIGFzIHR5cGVvZiBOb01lbW9HcmlkQ2VsbFxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCBkYXlqcywgeyB0eXBlIERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5pbnRlcmZhY2UgRGF5TnVtYmVyUHJvcHMge1xuXHRkYXRlOiBEYXlqc1xuXHRsb2NhbGU/OiBzdHJpbmdcblx0Y2xhc3NOYW1lPzogc3RyaW5nXG59XG5cbi8qKlxuICogUmVuZGVycyB0aGUgZGF5IG51bWJlciBmb3IgYSBjYWxlbmRhciBjZWxsLCBoaWdobGlnaHRpbmcgJ3RvZGF5JyB3aXRoIGEgcHJpbWFyeSBiYWNrZ3JvdW5kLlxuICovXG5leHBvcnQgY29uc3QgRGF5TnVtYmVyOiBSZWFjdC5GQzxEYXlOdW1iZXJQcm9wcz4gPSAoe1xuXHRkYXRlLFxuXHRsb2NhbGUgPSAnZW4nLFxuXHRjbGFzc05hbWUsXG59KSA9PiB7XG5cdGNvbnN0IGlzVG9kYXkgPSBkYXRlLmlzU2FtZShkYXlqcygpLCAnZGF5JylcblxuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCdmbGV4IGgtNSB3LTUgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHJvdW5kZWQtZnVsbCB0ZXh0LXhzIHNocmluay0wJyxcblx0XHRcdFx0aXNUb2RheSAmJiAnYmctcHJpbWFyeSB0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCBmb250LW1lZGl1bScsXG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHRcdGRhdGEtdGVzdGlkPXtcblx0XHRcdFx0aXNUb2RheSA/ICdkYXktbnVtYmVyLXRvZGF5JyA6IGBkYXktbnVtYmVyLSR7ZGF0ZS5mb3JtYXQoJ0QnKX1gXG5cdFx0XHR9XG5cdFx0PlxuXHRcdFx0e2RhdGUuZm9ybWF0KCdEJyl9XG5cdFx0PC9kaXY+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VJbXBlcmF0aXZlSGFuZGxlLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzJ1xuaW1wb3J0IHsgRHJhZ2dhYmxlRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvZHJhZ2dhYmxlLWV2ZW50L2RyYWdnYWJsZS1ldmVudCdcbmltcG9ydCB7XG5cdERpYWxvZyxcblx0RGlhbG9nQ29udGVudCxcblx0RGlhbG9nSGVhZGVyLFxuXHREaWFsb2dUaXRsZSxcbn0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2RpYWxvZydcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB0eXBlIHsgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmV4cG9ydCBpbnRlcmZhY2UgU2VsZWN0ZWREYXlFdmVudHMge1xuXHRkYXk6IERheWpzXG5cdGV2ZW50czogQ2FsZW5kYXJFdmVudFtdXG59XG5cbmludGVyZmFjZSBBbGxFdmVudERpYWxvZ1Byb3BzIHtcblx0cmVmOiBSZWFjdC5SZWY8e1xuXHRcdG9wZW46ICgpID0+IHZvaWRcblx0XHRjbG9zZTogKCkgPT4gdm9pZFxuXHRcdHNldFNlbGVjdGVkRGF5RXZlbnRzOiAoZGF5RXZlbnRzOiBTZWxlY3RlZERheUV2ZW50cykgPT4gdm9pZFxuXHR9PlxufVxuXG5leHBvcnQgY29uc3QgQWxsRXZlbnREaWFsb2c6IFJlYWN0LkZDPEFsbEV2ZW50RGlhbG9nUHJvcHM+ID0gKHsgcmVmIH0pID0+IHtcblx0Y29uc3QgW2RpYWxvZ09wZW4sIHNldERpYWxvZ09wZW5dID0gdXNlU3RhdGUoZmFsc2UpXG5cdGNvbnN0IFtzZWxlY3RlZERheUV2ZW50cywgc2V0U2VsZWN0ZWREYXlFdmVudHNdID1cblx0XHR1c2VTdGF0ZTxTZWxlY3RlZERheUV2ZW50cyB8IG51bGw+KG51bGwpXG5cdGNvbnN0IHsgY3VycmVudERhdGUsIGZpcnN0RGF5T2ZXZWVrIH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cblx0dXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsICgpID0+ICh7XG5cdFx0b3BlbjogKCkgPT4gc2V0RGlhbG9nT3Blbih0cnVlKSxcblx0XHRjbG9zZTogKCkgPT4gc2V0RGlhbG9nT3BlbihmYWxzZSksXG5cdFx0c2V0U2VsZWN0ZWREYXlFdmVudHM6IChkYXlFdmVudHM6IFNlbGVjdGVkRGF5RXZlbnRzKSA9PlxuXHRcdFx0c2V0U2VsZWN0ZWREYXlFdmVudHMoZGF5RXZlbnRzKSxcblx0fSkpXG5cblx0Ly8gR2V0IHN0YXJ0IGRhdGUgZm9yIHRoZSBjdXJyZW50IG1vbnRoIHZpZXcgYmFzZWQgb24gZmlyc3REYXlPZldlZWtcblx0Y29uc3QgZmlyc3REYXlPZk1vbnRoID0gY3VycmVudERhdGUuc3RhcnRPZignbW9udGgnKVxuXG5cdC8vIENhbGN1bGF0ZSB0aGUgZmlyc3QgZGF5IG9mIHRoZSBjYWxlbmRhciBncmlkIGNvcnJlY3RseVxuXHQvLyBGaW5kIHRoZSBmaXJzdCBkYXkgb2Ygd2VlayAoZS5nLiBTdW5kYXkgb3IgTW9uZGF5KSB0aGF0IGNvbWVzIGJlZm9yZSBvciBvbiB0aGUgZmlyc3QgZGF5IG9mIHRoZSBtb250aFxuXHRsZXQgYWRqdXN0ZWRGaXJzdERheU9mQ2FsZW5kYXIgPSBmaXJzdERheU9mTW9udGguY2xvbmUoKVxuXHR3aGlsZSAoYWRqdXN0ZWRGaXJzdERheU9mQ2FsZW5kYXIuZGF5KCkgIT09IGZpcnN0RGF5T2ZXZWVrKSB7XG5cdFx0YWRqdXN0ZWRGaXJzdERheU9mQ2FsZW5kYXIgPSBhZGp1c3RlZEZpcnN0RGF5T2ZDYWxlbmRhci5zdWJ0cmFjdCgxLCAnZGF5Jylcblx0fVxuXG5cdHJldHVybiAoXG5cdFx0PERpYWxvZyBvbk9wZW5DaGFuZ2U9e3NldERpYWxvZ09wZW59IG9wZW49e2RpYWxvZ09wZW59PlxuXHRcdFx0PERpYWxvZ0NvbnRlbnQgY2xhc3NOYW1lPVwibWF4LWgtWzgwdmhdIG1heC13LW1kIG92ZXJmbG93LXktYXV0b1wiPlxuXHRcdFx0XHQ8RGlhbG9nSGVhZGVyPlxuXHRcdFx0XHRcdDxEaWFsb2dUaXRsZT5cblx0XHRcdFx0XHRcdHtzZWxlY3RlZERheUV2ZW50cz8uZGF5LmZvcm1hdCgnTU1NTSBELCBZWVlZJyl9XG5cdFx0XHRcdFx0PC9EaWFsb2dUaXRsZT5cblx0XHRcdFx0PC9EaWFsb2dIZWFkZXI+XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwibXQtNCBzcGFjZS15LTNcIj5cblx0XHRcdFx0XHR7c2VsZWN0ZWREYXlFdmVudHM/LmV2ZW50cy5tYXAoKGV2ZW50KSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHQ8RHJhZ2dhYmxlRXZlbnRcblx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJyZWxhdGl2ZSBteS0xIGgtWzMwcHhdXCIgLy8gVXNlIGV2ZW50IElEIGZvciB1bmlxdWUgaWRlbnRpZmljYXRpb25cblx0XHRcdFx0XHRcdFx0XHRlbGVtZW50SWQ9e2BhbGwtZXZlbnRzLWRpYWxvZy1ldmVudC0kJHtldmVudC5pZH1gfVxuXHRcdFx0XHRcdFx0XHRcdGV2ZW50PXtldmVudH1cblx0XHRcdFx0XHRcdFx0XHRrZXk9e2V2ZW50LmlkfVxuXHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdH0pfVxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdDwvRGlhbG9nQ29udGVudD5cblx0XHQ8L0RpYWxvZz5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgeyB1c2VEcmFnZ2FibGUgfSBmcm9tICdAZG5kLWtpdC9jb3JlJ1xuaW1wb3J0IHR5cGUgeyBDU1NQcm9wZXJ0aWVzIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBtZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBBbmltYXRlZFNlY3Rpb24gfSBmcm9tICdAL2NvbXBvbmVudHMvYW5pbWF0aW9ucy9hbmltYXRlZC1zZWN0aW9uJ1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuY29uc3QgZ2V0Qm9yZGVyUmFkaXVzQ2xhc3MgPSAoXG5cdGlzVHJ1bmNhdGVkU3RhcnQ6IGJvb2xlYW4sXG5cdGlzVHJ1bmNhdGVkRW5kOiBib29sZWFuXG4pID0+IHtcblx0aWYgKGlzVHJ1bmNhdGVkU3RhcnQgJiYgaXNUcnVuY2F0ZWRFbmQpIHtcblx0XHRyZXR1cm4gJ3JvdW5kZWQtbm9uZSdcblx0fVxuXHRpZiAoaXNUcnVuY2F0ZWRTdGFydCkge1xuXHRcdHJldHVybiAncm91bmRlZC1yLW1kIHJvdW5kZWQtbC1ub25lJ1xuXHR9XG5cdGlmIChpc1RydW5jYXRlZEVuZCkge1xuXHRcdHJldHVybiAncm91bmRlZC1sLW1kIHJvdW5kZWQtci1ub25lJ1xuXHR9XG5cdHJldHVybiAncm91bmRlZC1tZCdcbn1cblxuZnVuY3Rpb24gRHJhZ2dhYmxlRXZlbnRVbm1lbW9pemVkKHtcblx0ZWxlbWVudElkLFxuXHRldmVudCxcblx0Y2xhc3NOYW1lLFxuXHRzdHlsZSxcblx0ZGlzYWJsZURyYWcgPSBmYWxzZSxcbn06IHtcblx0ZWxlbWVudElkOiBzdHJpbmdcblx0Y2xhc3NOYW1lPzogc3RyaW5nXG5cdHN0eWxlPzogQ1NTUHJvcGVydGllc1xuXHRldmVudDogQ2FsZW5kYXJFdmVudFxuXHRkaXNhYmxlRHJhZz86IGJvb2xlYW5cbn0pIHtcblx0Y29uc3QgeyBvbkV2ZW50Q2xpY2ssIHJlbmRlckV2ZW50LCBkaXNhYmxlRXZlbnRDbGljaywgZGlzYWJsZURyYWdBbmREcm9wIH0gPVxuXHRcdHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblxuXHRjb25zdCB7IGF0dHJpYnV0ZXMsIGxpc3RlbmVycywgc2V0Tm9kZVJlZiwgaXNEcmFnZ2luZyB9ID0gdXNlRHJhZ2dhYmxlKHtcblx0XHRpZDogZWxlbWVudElkLFxuXHRcdGRhdGE6IHtcblx0XHRcdGV2ZW50LFxuXHRcdFx0dHlwZTogJ2NhbGVuZGFyLWV2ZW50Jyxcblx0XHR9LFxuXHRcdGRpc2FibGVkOiBkaXNhYmxlRHJhZyB8fCBkaXNhYmxlRHJhZ0FuZERyb3AsXG5cdH0pXG5cblx0Ly8gRGVmYXVsdCBldmVudCBjb250ZW50IHRvIHJlbmRlciBpZiBjdXN0b20gcmVuZGVyRXZlbnQgaXMgbm90IHByb3ZpZGVkXG5cdGNvbnN0IERlZmF1bHRFdmVudENvbnRlbnQgPSAoKSA9PiB7XG5cdFx0Ly8gQ2hlY2sgaWYgdGhpcyBldmVudCBoYXMgdHJ1bmNhdGlvbiBpbmZvcm1hdGlvblxuXHRcdGNvbnN0IGVuaGFuY2VkRXZlbnQgPSBldmVudCBhcyB1bmtub3duIGFzIHtcblx0XHRcdGlzVHJ1bmNhdGVkU3RhcnQ/OiBib29sZWFuXG5cdFx0XHRpc1RydW5jYXRlZEVuZD86IGJvb2xlYW5cblx0XHR9XG5cdFx0Y29uc3QgaXNUcnVuY2F0ZWRTdGFydCA9IGVuaGFuY2VkRXZlbnQuaXNUcnVuY2F0ZWRTdGFydFxuXHRcdGNvbnN0IGlzVHJ1bmNhdGVkRW5kID0gZW5oYW5jZWRFdmVudC5pc1RydW5jYXRlZEVuZFxuXG5cdFx0cmV0dXJuIChcblx0XHRcdDxkaXZcblx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRldmVudC5iYWNrZ3JvdW5kQ29sb3IgfHwgJ2JnLWJsdWUtNTAwJyxcblx0XHRcdFx0XHRldmVudC5jb2xvciB8fCAndGV4dC13aGl0ZScsXG5cdFx0XHRcdFx0J2gtZnVsbCB3LWZ1bGwgcHgtMSBib3JkZXItWzEuNXB4XSBib3JkZXItY2FyZCB0ZXh0LWxlZnQgb3ZlcmZsb3ctY2xpcCByZWxhdGl2ZScsXG5cdFx0XHRcdFx0Z2V0Qm9yZGVyUmFkaXVzQ2xhc3MoXG5cdFx0XHRcdFx0XHRCb29sZWFuKGlzVHJ1bmNhdGVkU3RhcnQpLFxuXHRcdFx0XHRcdFx0Qm9vbGVhbihpc1RydW5jYXRlZEVuZClcblx0XHRcdFx0XHQpXG5cdFx0XHRcdCl9XG5cdFx0XHRcdHN0eWxlPXt7IGJhY2tncm91bmRDb2xvcjogZXZlbnQuYmFja2dyb3VuZENvbG9yLCBjb2xvcjogZXZlbnQuY29sb3IgfX1cblx0XHRcdD5cblx0XHRcdFx0ey8qIExlZnQgY29udGludWF0aW9uIGluZGljYXRvciAqL31cblx0XHRcdFx0e2lzVHJ1bmNhdGVkU3RhcnQgJiYgKFxuXHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiYWJzb2x1dGUgbGVmdC0wIHRvcC0wIGJvdHRvbS0wIHctMC41IGJnLWZvcmVncm91bmQvMjVcIj48L2Rpdj5cblx0XHRcdFx0KX1cblxuXHRcdFx0XHR7LyogRXZlbnQgdGl0bGUgKi99XG5cdFx0XHRcdDxwXG5cdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdCd0ZXh0LVsxMHB4XSBmb250LXNlbWlib2xkIHNtOnRleHQteHMgbXQtMC41Jyxcblx0XHRcdFx0XHRcdC8vIEFkZCBzbGlnaHQgcGFkZGluZyB0byBhdm9pZCBvdmVybGFwIHdpdGggaW5kaWNhdG9yc1xuXHRcdFx0XHRcdFx0aXNUcnVuY2F0ZWRTdGFydCAmJiAncGwtMScsXG5cdFx0XHRcdFx0XHRpc1RydW5jYXRlZEVuZCAmJiAncHItMSdcblx0XHRcdFx0XHQpfVxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0e2V2ZW50LnRpdGxlfVxuXHRcdFx0XHQ8L3A+XG5cblx0XHRcdFx0ey8qIFJpZ2h0IGNvbnRpbnVhdGlvbiBpbmRpY2F0b3IgKi99XG5cdFx0XHRcdHtpc1RydW5jYXRlZEVuZCAmJiAoXG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJhYnNvbHV0ZSByaWdodC0wIHRvcC0wIGJvdHRvbS0wIHctMC41IGJnLWZvcmVncm91bmQvMjVcIj48L2Rpdj5cblx0XHRcdFx0KX1cblx0XHRcdDwvZGl2PlxuXHRcdClcblx0fVxuXG5cdHJldHVybiAoXG5cdFx0PEFuaW1hdGVkU2VjdGlvblxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0J3RydW5jYXRlIGgtZnVsbCB3LWZ1bGwnLFxuXHRcdFx0XHRkaXNhYmxlRHJhZyB8fCBkaXNhYmxlRHJhZ0FuZERyb3Bcblx0XHRcdFx0XHQ/IGRpc2FibGVFdmVudENsaWNrXG5cdFx0XHRcdFx0XHQ/ICdjdXJzb3ItZGVmYXVsdCdcblx0XHRcdFx0XHRcdDogJ2N1cnNvci1wb2ludGVyJ1xuXHRcdFx0XHRcdDogJ2N1cnNvci1ncmFiJyxcblx0XHRcdFx0aXNEcmFnZ2luZyAmJlxuXHRcdFx0XHRcdCEoZGlzYWJsZURyYWcgfHwgZGlzYWJsZURyYWdBbmREcm9wKSAmJlxuXHRcdFx0XHRcdCdjdXJzb3ItZ3JhYmJpbmcgc2hhZG93LWxnJyxcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0bGF5b3V0PXt0cnVlfVxuXHRcdFx0bGF5b3V0SWQ9e2VsZW1lbnRJZH1cblx0XHRcdG9uQ2xpY2s9eyhlKSA9PiB7XG5cdFx0XHRcdGUuc3RvcFByb3BhZ2F0aW9uKClcblx0XHRcdFx0b25FdmVudENsaWNrKGV2ZW50KVxuXHRcdFx0fX1cblx0XHRcdHJlZj17c2V0Tm9kZVJlZn1cblx0XHRcdHN0eWxlPXtzdHlsZX1cblx0XHRcdHRyYW5zaXRpb25LZXk9e2VsZW1lbnRJZH1cblx0XHRcdHsuLi5hdHRyaWJ1dGVzfVxuXHRcdFx0ey4uLmxpc3RlbmVyc31cblx0XHQ+XG5cdFx0XHR7LyogVXNlIGN1c3RvbSByZW5kZXJFdmVudCBmcm9tIGNvbnRleHQgaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgdXNlIGRlZmF1bHQgKi99XG5cdFx0XHR7cmVuZGVyRXZlbnQgPyByZW5kZXJFdmVudChldmVudCkgOiA8RGVmYXVsdEV2ZW50Q29udGVudCAvPn1cblx0XHQ8L0FuaW1hdGVkU2VjdGlvbj5cblx0KVxufVxuXG5leHBvcnQgY29uc3QgRHJhZ2dhYmxlRXZlbnQgPSBtZW1vKFxuXHREcmFnZ2FibGVFdmVudFVubWVtb2l6ZWQsXG5cdChwcmV2UHJvcHMsIG5leHRQcm9wcykgPT4ge1xuXHRcdC8vIENvbXBhcmUgdGhlIGVzc2VudGlhbCBwcm9wcyB0byBwcmV2ZW50IHVubmVjZXNzYXJ5IHJlLXJlbmRlcnNcblx0XHRyZXR1cm4gKFxuXHRcdFx0cHJldlByb3BzLmVsZW1lbnRJZCA9PT0gbmV4dFByb3BzLmVsZW1lbnRJZCAmJlxuXHRcdFx0cHJldlByb3BzLmRpc2FibGVEcmFnID09PSBuZXh0UHJvcHMuZGlzYWJsZURyYWcgJiZcblx0XHRcdHByZXZQcm9wcy5jbGFzc05hbWUgPT09IG5leHRQcm9wcy5jbGFzc05hbWUgJiZcblx0XHRcdHByZXZQcm9wcy5ldmVudCA9PT0gbmV4dFByb3BzLmV2ZW50XG5cdFx0KVxuXHR9XG4pXG4iLAogICAgIi8vIG94bGludC1kaXNhYmxlIG5vLW5lZ2F0ZWQtY29uZGl0aW9uXG5cbmltcG9ydCB7IHVzZURyb3BwYWJsZSB9IGZyb20gJ0BkbmQta2l0L2NvcmUnXG5pbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB0eXBlIHsgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IERJU0FCTEVEX0NFTExfQ0xBU1NOQU1FIH0gZnJvbSAnQC9saWIvY29uc3RhbnRzJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuaW50ZXJmYWNlIERyb3BwYWJsZUNlbGxQcm9wcyB7XG5cdGlkOiBzdHJpbmdcblx0dHlwZTogJ2RheS1jZWxsJyB8ICd0aW1lLWNlbGwnXG5cdGRhdGU6IERheWpzXG5cdGhvdXI/OiBudW1iZXJcblx0bWludXRlPzogbnVtYmVyXG5cdHJlc291cmNlSWQ/OiBzdHJpbmcgfCBudW1iZXJcblx0YWxsRGF5PzogYm9vbGVhblxuXHRjaGlsZHJlbj86IFJlYWN0LlJlYWN0Tm9kZVxuXHRjbGFzc05hbWU/OiBzdHJpbmdcblx0c3R5bGU/OiBSZWFjdC5DU1NQcm9wZXJ0aWVzXG5cdCdkYXRhLXRlc3RpZCc/OiBzdHJpbmdcblx0ZGlzYWJsZWQ/OiBib29sZWFuXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBEcm9wcGFibGVDZWxsKHtcblx0aWQsXG5cdHR5cGUsXG5cdGRhdGUsXG5cdGhvdXIsXG5cdG1pbnV0ZSxcblx0cmVzb3VyY2VJZCxcblx0YWxsRGF5LFxuXHRjaGlsZHJlbixcblx0Y2xhc3NOYW1lLFxuXHRzdHlsZSxcblx0J2RhdGEtdGVzdGlkJzogZGF0YVRlc3RJZCxcblx0ZGlzYWJsZWQgPSBmYWxzZSxcbn06IERyb3BwYWJsZUNlbGxQcm9wcykge1xuXHRjb25zdCB7XG5cdFx0b25DZWxsQ2xpY2ssXG5cdFx0ZGlzYWJsZURyYWdBbmREcm9wLFxuXHRcdGRpc2FibGVDZWxsQ2xpY2ssXG5cdFx0Y2xhc3Nlc092ZXJyaWRlLFxuXHRcdHZpZXcsXG5cdH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cblx0Y29uc3QgeyBpc092ZXIsIHNldE5vZGVSZWYgfSA9IHVzZURyb3BwYWJsZSh7XG5cdFx0aWQsXG5cdFx0ZGF0YToge1xuXHRcdFx0dHlwZSxcblx0XHRcdGRhdGUsXG5cdFx0XHRob3VyLFxuXHRcdFx0bWludXRlLFxuXHRcdFx0cmVzb3VyY2VJZCxcblx0XHRcdGFsbERheSxcblx0XHR9LFxuXHRcdGRpc2FibGVkOiBkaXNhYmxlRHJhZ0FuZERyb3AgfHwgZGlzYWJsZWQsXG5cdH0pXG5cblx0Y29uc3QgaGFuZGxlQ2VsbENsaWNrID0gKGU6IFJlYWN0Lk1vdXNlRXZlbnQpID0+IHtcblx0XHRlLnN0b3BQcm9wYWdhdGlvbigpXG5cblx0XHRpZiAoZGlzYWJsZUNlbGxDbGljayB8fCBkaXNhYmxlZCkge1xuXHRcdFx0cmV0dXJuXG5cdFx0fVxuXG5cdFx0Y29uc3Qgc3RhcnQgPSBkYXRlLmhvdXIoaG91ciA/PyAwKS5taW51dGUobWludXRlID8/IDApXG5cdFx0bGV0IGVuZCA9IHN0YXJ0LmNsb25lKClcblx0XHRpZiAoaG91ciAhPT0gdW5kZWZpbmVkICYmIG1pbnV0ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRlbmQgPSBlbmQuaG91cihob3VyKS5taW51dGUobWludXRlICsgMTUpIC8vIGRheSB2aWV3IHRpbWUgc2xvdHMgYXJlIDE1IG1pbnV0ZXNcblx0XHR9IGVsc2UgaWYgKGhvdXIgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0ZW5kID0gZW5kLmhvdXIoaG91ciArIDEpLm1pbnV0ZSgwKSAvLyB3ZWVrIHZpZXcgdGltZSBzbG90cyBhcmUgMSBob3VyXG5cdFx0fSBlbHNlIHtcblx0XHRcdGVuZCA9IGVuZC5ob3VyKDIzKS5taW51dGUoNTkpIC8vIG1vbnRoIHZpZXcgZnVsbCBkYXlcblx0XHR9XG5cblx0XHRvbkNlbGxDbGljayh7IHN0YXJ0LCBlbmQsIHJlc291cmNlSWQsIGFsbERheSB9KVxuXHR9XG5cblx0cmV0dXJuIChcblx0XHQvLyBiaW9tZS1pZ25vcmUgbGludC9hMTF5L25vU3RhdGljRWxlbWVudEludGVyYWN0aW9uczogVGhlIGNlbGwgaXMgaW50ZXJhY3RpdmUgZm9yIGV2ZW50IGNyZWF0aW9uXG5cdFx0Ly8gYmlvbWUtaWdub3JlIGxpbnQvYTExeS91c2VLZXlXaXRoQ2xpY2tFdmVudHM6IEtleSBldmVudHMgYXJlIGhhbmRsZWQgYnkgcGFyZW50IGNvbXBvbmVudHNcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQnZHJvcHBhYmxlLWNlbGwnLFxuXHRcdFx0XHRjbGFzc05hbWUsXG5cdFx0XHRcdGlzT3ZlciAmJiAhZGlzYWJsZURyYWdBbmREcm9wICYmICFkaXNhYmxlZCAmJiAnYmctYWNjZW50Jyxcblx0XHRcdFx0ZGlzYWJsZUNlbGxDbGljayB8fCBkaXNhYmxlZCA/ICdjdXJzb3ItZGVmYXVsdCcgOiAnY3Vyc29yLXBvaW50ZXInLFxuXHRcdFx0XHRkaXNhYmxlZCAmJiAoY2xhc3Nlc092ZXJyaWRlPy5kaXNhYmxlZENlbGwgfHwgRElTQUJMRURfQ0VMTF9DTEFTU05BTUUpXG5cdFx0XHQpfVxuXHRcdFx0ZGF0YS1kaXNhYmxlZD17ZGlzYWJsZWQudG9TdHJpbmcoKX1cblx0XHRcdGRhdGEtdGVzdGlkPXtkYXRhVGVzdElkfVxuXHRcdFx0ZGF0YS12aWV3PXt2aWV3fVxuXHRcdFx0b25DbGljaz17aGFuZGxlQ2VsbENsaWNrfVxuXHRcdFx0cmVmPXtzZXROb2RlUmVmfVxuXHRcdFx0c3R5bGU9e3N0eWxlfVxuXHRcdD5cblx0XHRcdHtjaGlsZHJlbn1cblx0XHQ8L2Rpdj5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSB7IFJlc291cmNlIH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci90eXBlcydcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmludGVyZmFjZSBSZXNvdXJjZUNlbGxQcm9wcyB7XG5cdHJlc291cmNlOiBSZXNvdXJjZVxuXHRjbGFzc05hbWU/OiBzdHJpbmdcblx0Y2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGVcblx0J2RhdGEtdGVzdGlkJz86IHN0cmluZ1xufVxuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VDZWxsOiBSZWFjdC5GQzxSZXNvdXJjZUNlbGxQcm9wcz4gPSAoe1xuXHRyZXNvdXJjZSxcblx0Y2xhc3NOYW1lLFxuXHRjaGlsZHJlbixcblx0J2RhdGEtdGVzdGlkJzogZGF0YVRlc3RJZCxcbn0pID0+IHtcblx0Y29uc3QgeyByZW5kZXJSZXNvdXJjZSB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0J2ZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHAtMiBib3JkZXItciBsYXN0OmJvcmRlci1yLTAnLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXRlc3RpZD17ZGF0YVRlc3RJZH1cblx0XHRcdHN0eWxlPXt7XG5cdFx0XHRcdGNvbG9yOiByZXNvdXJjZS5jb2xvcixcblx0XHRcdFx0YmFja2dyb3VuZENvbG9yOiByZXNvdXJjZS5iYWNrZ3JvdW5kQ29sb3IsXG5cdFx0XHR9fVxuXHRcdD5cblx0XHRcdHtyZW5kZXJSZXNvdXJjZVxuXHRcdFx0XHQ/IHJlbmRlclJlc291cmNlKHJlc291cmNlKVxuXHRcdFx0XHQ6IChjaGlsZHJlbiA/PyAoXG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gZm9udC1tZWRpdW0gdHJ1bmNhdGVcIj57cmVzb3VyY2UudGl0bGV9PC9kaXY+XG5cdFx0XHRcdFx0KSl9XG5cdFx0PC9kaXY+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHsgbWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgRHJhZ2dhYmxlRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvZHJhZ2dhYmxlLWV2ZW50L2RyYWdnYWJsZS1ldmVudCdcbmltcG9ydCB0eXBlIHsgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IEVWRU5UX0JBUl9IRUlHSFQgfSBmcm9tICdAL2xpYi9jb25zdGFudHMnXG5pbXBvcnQgdHlwZSB7IFBvc2l0aW9uZWRFdmVudCB9IGZyb20gJ0AvbGliL3V0aWxzL3Bvc2l0aW9uLXdlZWstZXZlbnRzJ1xuXG5leHBvcnQgaW50ZXJmYWNlIEhvcml6b250YWxHcmlkRXZlbnRzTGF5ZXJQcm9wcyB7XG5cdGRheXM6IERheWpzW11cblx0cmVzb3VyY2VJZD86IHN0cmluZyB8IG51bWJlclxuXHQnZGF0YS10ZXN0aWQnPzogc3RyaW5nXG5cdHBvc2l0aW9uZWRFdmVudHM6IFBvc2l0aW9uZWRFdmVudFtdXG59XG5cbmNvbnN0IE5vTWVtb0hvcml6b250YWxHcmlkRXZlbnRzTGF5ZXI6IFJlYWN0LkZDPFxuXHRIb3Jpem9udGFsR3JpZEV2ZW50c0xheWVyUHJvcHNcbj4gPSAoeyBkYXlzLCByZXNvdXJjZUlkLCAnZGF0YS10ZXN0aWQnOiBkYXRhVGVzdElkLCBwb3NpdGlvbmVkRXZlbnRzIH0pID0+IHtcblx0Y29uc3Qgd2Vla1N0YXJ0ID0gZGF5cy5hdCgwKT8uc3RhcnRPZignZGF5JylcblxuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT1cImFic29sdXRlIGluc2V0LTAgcG9pbnRlci1ldmVudHMtbm9uZSB6LTEwIG92ZXJmbG93LWNsaXBcIlxuXHRcdFx0ZGF0YS10ZXN0aWQ9e2RhdGFUZXN0SWR9XG5cdFx0PlxuXHRcdFx0e3Bvc2l0aW9uZWRFdmVudHMubWFwKChldmVudCkgPT4ge1xuXHRcdFx0XHRjb25zdCBldmVudEtleSA9IGAke2V2ZW50LmlkfS0ke2V2ZW50LnBvc2l0aW9ufS0ke3dlZWtTdGFydD8udG9JU09TdHJpbmcoKX0tJHtyZXNvdXJjZUlkID8/ICduby1yZXNvdXJjZSd9YFxuXG5cdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiYWJzb2x1dGUgei0xMCBwb2ludGVyLWV2ZW50cy1hdXRvIG92ZXJmbG93LWNsaXBcIlxuXHRcdFx0XHRcdFx0ZGF0YS1sZWZ0PXtldmVudC5sZWZ0fVxuXHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e2Bob3Jpem9udGFsLWV2ZW50LSR7ZXZlbnQuaWR9YH1cblx0XHRcdFx0XHRcdGRhdGEtdG9wPXtldmVudC50b3B9XG5cdFx0XHRcdFx0XHRkYXRhLXdpZHRoPXtldmVudC53aWR0aH1cblx0XHRcdFx0XHRcdGtleT17YCR7ZXZlbnRLZXl9LXdyYXBwZXJgfVxuXHRcdFx0XHRcdFx0c3R5bGU9e3tcblx0XHRcdFx0XHRcdFx0bGVmdDogYGNhbGMoJHtldmVudC5sZWZ0fSUgKyB2YXIoLS1zcGFjaW5nKSAqIDAuMjUpYCxcblx0XHRcdFx0XHRcdFx0d2lkdGg6IGBjYWxjKCR7ZXZlbnQud2lkdGh9JSAtIHZhcigtLXNwYWNpbmcpICogMSlgLFxuXHRcdFx0XHRcdFx0XHR0b3A6IGAke2V2ZW50LnRvcH1weGAsXG5cdFx0XHRcdFx0XHRcdGhlaWdodDogYCR7RVZFTlRfQkFSX0hFSUdIVH1weGAsXG5cdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdDxEcmFnZ2FibGVFdmVudFxuXHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJoLWZ1bGwgdy1mdWxsIHNoYWRvd1wiXG5cdFx0XHRcdFx0XHRcdGVsZW1lbnRJZD17ZXZlbnRLZXl9XG5cdFx0XHRcdFx0XHRcdGV2ZW50PXtldmVudH1cblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdClcblx0XHRcdH0pfVxuXHRcdDwvZGl2PlxuXHQpXG59XG5cbmV4cG9ydCBjb25zdCBIb3Jpem9udGFsR3JpZEV2ZW50c0xheWVyID0gbWVtbyhOb01lbW9Ib3Jpem9udGFsR3JpZEV2ZW50c0xheWVyKVxuIiwKICAgICJpbXBvcnQgeyBtZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5pbnRlcmZhY2UgQWxsRGF5Q2VsbFByb3BzIHtcblx0Y2xhc3NOYW1lPzogc3RyaW5nXG59XG5cbmNvbnN0IE5vTWVtb0FsbERheUNlbGw6IFJlYWN0LkZDPEFsbERheUNlbGxQcm9wcz4gPSAoeyBjbGFzc05hbWUgfSkgPT4ge1xuXHRjb25zdCB7IHQgfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQndy0xNiBib3JkZXItciBzaHJpbmstMCBzdGlja3kgbGVmdC0wIGJnLWJhY2tncm91bmQgei0yMCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBzbTp0ZXh0LXhzIHRleHQtbXV0ZWQtZm9yZWdyb3VuZCcsXG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHQ+XG5cdFx0XHR7dCgnYWxsRGF5Jyl9XG5cdFx0PC9kaXY+XG5cdClcbn1cblxuZXhwb3J0IGNvbnN0IEFsbERheUNlbGwgPSBtZW1vKE5vTWVtb0FsbERheUNlbGwpXG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgbWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBSZXNvdXJjZSB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgR3JpZENlbGwgfSBmcm9tICcuLi9ncmlkLWNlbGwnXG5pbXBvcnQgeyBWZXJ0aWNhbEdyaWRFdmVudHNMYXllciB9IGZyb20gJy4vdmVydGljYWwtZ3JpZC1ldmVudHMtbGF5ZXInXG5cbmV4cG9ydCBpbnRlcmZhY2UgVmVydGljYWxHcmlkQ29sUHJvcHMge1xuXHRpZDogc3RyaW5nXG5cdGRheT86IERheWpzXG5cdHJlc291cmNlSWQ/OiBzdHJpbmcgfCBudW1iZXJcblx0cmVzb3VyY2U/OiBSZXNvdXJjZVxuXHRkYXlzOiBEYXlqc1tdIC8vIFRoZSBzcGVjaWZpYyBkYXkgdGhpcyBjb2x1bW4gcmVwcmVzZW50c1xuXHRjbGFzc05hbWU/OiBzdHJpbmdcblx0J2RhdGEtdGVzdGlkJz86IHN0cmluZ1xuXHRncmlkVHlwZT86ICdkYXknIHwgJ2hvdXInXG5cdHJlbmRlckhlYWRlcj86ICgpID0+IFJlYWN0LlJlYWN0Tm9kZVxuXHRyZW5kZXJDZWxsPzogKGRhdGU6IERheWpzKSA9PiBSZWFjdC5SZWFjdE5vZGVcblx0bm9FdmVudHM/OiBib29sZWFuXG5cdC8qKiBPcHRpb25hbCBhcnJheSBvZiBtaW51dGUgc2xvdHMgYnkgd2hpY2ggdGhlIGhvdXIgaXMgZGl2aWRlZFxuXHQgKiBlLmcuLCBbMCwgMTUsIDMwLCA0NV0gZm9yIHF1YXJ0ZXItaG91ciBzbG90c1xuXHQgKi9cblx0Y2VsbFNsb3RzPzogbnVtYmVyW11cblx0LyoqIFdoZXRoZXIgdGhpcyBpcyB0aGUgbGFzdCBjb2x1bW4gaW4gdGhlIGdyaWQgKi9cblx0aXNMYXN0Q29sdW1uPzogYm9vbGVhblxufVxuXG5jb25zdCBOb01lbW9WZXJ0aWNhbEdyaWRDb2w6IFJlYWN0LkZDPFZlcnRpY2FsR3JpZENvbFByb3BzPiA9ICh7XG5cdGlkLFxuXHRkYXlzLFxuXHRyZXNvdXJjZUlkLFxuXHRyZXNvdXJjZSxcblx0J2RhdGEtdGVzdGlkJzogZGF0YVRlc3RJZCxcblx0Z3JpZFR5cGUsXG5cdGNsYXNzTmFtZSxcblx0cmVuZGVyQ2VsbCxcblx0bm9FdmVudHMsXG5cdGNlbGxTbG90cyA9IFs2MF0sIC8vIERlZmF1bHQgdG8gZnVsbCBob3VyIHNsb3RzXG5cdGlzTGFzdENvbHVtbixcbn0pID0+IHtcblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQnZmxleCBmbGV4LWNvbCBmbGV4LTEgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIG1pbi13LTUwIGJnLWJhY2tncm91bmQgcmVsYXRpdmUnLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXRlc3RpZD17ZGF0YVRlc3RJZCB8fCBgdmVydGljYWwtY29sLSR7aWR9YH1cblx0XHQ+XG5cdFx0XHR7LyogVGltZSBzbG90cyAqL31cblx0XHRcdDxkaXZcblx0XHRcdFx0Y2xhc3NOYW1lPVwidy1mdWxsIHJlbGF0aXZlIGdyaWRcIlxuXHRcdFx0XHRzdHlsZT17e1xuXHRcdFx0XHRcdGdyaWRUZW1wbGF0ZVJvd3M6IGByZXBlYXQoJHtkYXlzLmxlbmd0aH0sIG1pbm1heCgwLCAxZnIpKWAsXG5cdFx0XHRcdH19XG5cdFx0XHQ+XG5cdFx0XHRcdHtkYXlzLm1hcCgoZGF5LCBkYXlJbmRleCkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IGhvdXJTdHIgPSBkYXkuZm9ybWF0KCdISCcpXG5cdFx0XHRcdFx0Y29uc3QgZGF0ZVN0ciA9IGRheS5mb3JtYXQoJ1lZWVktTU0tREQnKVxuXG5cdFx0XHRcdFx0aWYgKHJlbmRlckNlbGwpIHtcblx0XHRcdFx0XHRcdGNvbnN0IHRlc3RJZCA9XG5cdFx0XHRcdFx0XHRcdGlkID09PSAndGltZS1jb2wnXG5cdFx0XHRcdFx0XHRcdFx0PyBgdmVydGljYWwtdGltZS0ke2hvdXJTdHJ9YFxuXHRcdFx0XHRcdFx0XHRcdDogYHZlcnRpY2FsLWNlbGwtJHtkYXRlU3RyfS0ke2hvdXJTdHJ9LTAwJHtyZXNvdXJjZUlkID8gYC0ke3Jlc291cmNlSWR9YCA6ICcnfWBcblx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJoLVs2MHB4XSBib3JkZXItYiBib3JkZXItclwiXG5cdFx0XHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e3Rlc3RJZH1cblx0XHRcdFx0XHRcdFx0XHRrZXk9e2Ake2lkfS0ke2RheUluZGV4fS0ke2hvdXJTdHJ9YH1cblx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdHtyZW5kZXJDZWxsKGRheSl9XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJldHVybiBjZWxsU2xvdHMubWFwKChtaW51dGUpID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IG0gPSBtaW51dGUgPT09IDYwID8gdW5kZWZpbmVkIDogbWludXRlXG5cdFx0XHRcdFx0XHRjb25zdCBtbSA9IG0gPT09IHVuZGVmaW5lZCA/ICcwMCcgOiBTdHJpbmcobSkucGFkU3RhcnQoMiwgJzAnKVxuXHRcdFx0XHRcdFx0Y29uc3QgdGVzdElkID0gYHZlcnRpY2FsLWNlbGwtJHtkYXRlU3RyfS0ke2hvdXJTdHJ9LSR7bW19JHtyZXNvdXJjZUlkID8gYC0ke3Jlc291cmNlSWR9YCA6ICcnfWBcblxuXHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0PEdyaWRDZWxsXG5cdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdFx0XHRcdCdob3ZlcjpiZy1hY2NlbnQgcmVsYXRpdmUgei0xMCBoLVs2MHB4XSBjdXJzb3ItcG9pbnRlciBib3JkZXItYicsXG5cdFx0XHRcdFx0XHRcdFx0XHRtaW51dGUgPT09IDYwID8gJycgOiAnYm9yZGVyLWRhc2hlZCBoLVsxNXB4XSBtaW4taC1bMTVweF0nLFxuXHRcdFx0XHRcdFx0XHRcdFx0aXNMYXN0Q29sdW1uID8gJ2JvcmRlci1yLTAnIDogJ2JvcmRlci1yJ1xuXHRcdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e3Rlc3RJZH1cblx0XHRcdFx0XHRcdFx0XHRkYXk9e20gPyBkYXkubWludXRlKG0pIDogZGF5fVxuXHRcdFx0XHRcdFx0XHRcdGdyaWRUeXBlPXtncmlkVHlwZX1cblx0XHRcdFx0XHRcdFx0XHRob3VyPXtkYXkuaG91cigpfVxuXHRcdFx0XHRcdFx0XHRcdGtleT17YCR7aWR9LSR7ZGF5SW5kZXh9LSR7bW19YH1cblx0XHRcdFx0XHRcdFx0XHRtaW51dGU9e219XG5cdFx0XHRcdFx0XHRcdFx0cmVzb3VyY2VJZD17cmVzb3VyY2VJZH0gLy8gRXZlbnRzIGFyZSByZW5kZXJlZCBpbiBhIHNlcGFyYXRlIGxheWVyXG5cdFx0XHRcdFx0XHRcdFx0c2hvdWxkUmVuZGVyRXZlbnRzPXtmYWxzZX1cblx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHR9KX1cblxuXHRcdFx0XHR7LyogRXZlbnQgYmxvY2tzIGxheWVyICovfVxuXHRcdFx0XHR7IW5vRXZlbnRzICYmIChcblx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImFic29sdXRlIGluc2V0LTAgei0xMCBwb2ludGVyLWV2ZW50cy1ub25lXCI+XG5cdFx0XHRcdFx0XHQ8VmVydGljYWxHcmlkRXZlbnRzTGF5ZXJcblx0XHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e2B2ZXJ0aWNhbC1ldmVudHMtJHtpZH1gfVxuXHRcdFx0XHRcdFx0XHRkYXlzPXtkYXlzfVxuXHRcdFx0XHRcdFx0XHRncmlkVHlwZT17Z3JpZFR5cGV9XG5cdFx0XHRcdFx0XHRcdHJlc291cmNlPXtyZXNvdXJjZX1cblx0XHRcdFx0XHRcdFx0cmVzb3VyY2VJZD17cmVzb3VyY2VJZH1cblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdCl9XG5cdFx0XHQ8L2Rpdj5cblx0XHQ8L2Rpdj5cblx0KVxufVxuXG5leHBvcnQgY29uc3QgVmVydGljYWxHcmlkQ29sID0gbWVtbyhcblx0Tm9NZW1vVmVydGljYWxHcmlkQ29sXG4pIGFzIHR5cGVvZiBOb01lbW9WZXJ0aWNhbEdyaWRDb2xcbiIsCiAgICAiaW1wb3J0IHsgbWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQ3VycmVudFRpbWVJbmRpY2F0b3IgfSBmcm9tICdAL2NvbXBvbmVudHMvY3VycmVudC10aW1lLWluZGljYXRvcidcbmltcG9ydCB7IERyYWdnYWJsZUV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL2RyYWdnYWJsZS1ldmVudC9kcmFnZ2FibGUtZXZlbnQnXG5pbXBvcnQgeyB1c2VQcm9jZXNzZWREYXlFdmVudHMgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL2hvb2tzL3VzZVByb2Nlc3NlZERheUV2ZW50cydcbmltcG9ydCB0eXBlIHsgUmVzb3VyY2UgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuaW50ZXJmYWNlIFZlcnRpY2FsR3JpZEV2ZW50c0xheWVyUHJvcHMge1xuXHRncmlkVHlwZT86ICdkYXknIHwgJ2hvdXInXG5cdGRheXM6IERheWpzW10gLy8gVGhlIHNwZWNpZmljIGRheSB0aGlzIGxheWVyIHJlcHJlc2VudHNcblx0cmVzb3VyY2VJZD86IHN0cmluZyB8IG51bWJlclxuXHRyZXNvdXJjZT86IFJlc291cmNlXG5cdCdkYXRhLXRlc3RpZCc/OiBzdHJpbmdcbn1cblxuY29uc3QgTm9NZW1vVmVydGljYWxHcmlkRXZlbnRzTGF5ZXI6IFJlYWN0LkZDPFZlcnRpY2FsR3JpZEV2ZW50c0xheWVyUHJvcHM+ID0gKHtcblx0ZGF5cyxcblx0Z3JpZFR5cGUgPSAnaG91cicsXG5cdHJlc291cmNlSWQsXG5cdHJlc291cmNlLFxuXHQnZGF0YS10ZXN0aWQnOiBkYXRhVGVzdElkLFxufSkgPT4ge1xuXHRjb25zdCB0b2RheUV2ZW50cyA9IHVzZVByb2Nlc3NlZERheUV2ZW50cyh7IGRheXMsIGdyaWRUeXBlLCByZXNvdXJjZUlkIH0pXG5cdGNvbnN0IHJhbmdlU3RhcnQgPSBkYXlzLmF0KDApXG5cdGNvbnN0IHJhbmdlRW5kID0gZGF5cy5hdCgtMSk/LmFkZCgxLCBncmlkVHlwZSlcblxuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT1cInJlbGF0aXZlIHctZnVsbCBoLWZ1bGwgcG9pbnRlci1ldmVudHMtbm9uZSB6LTEwIG92ZXJmbG93LWNsaXBcIlxuXHRcdFx0ZGF0YS10ZXN0aWQ9e2RhdGFUZXN0SWR9XG5cdFx0PlxuXHRcdFx0e3JhbmdlU3RhcnQgJiYgcmFuZ2VFbmQgJiYgKFxuXHRcdFx0XHQ8Q3VycmVudFRpbWVJbmRpY2F0b3Jcblx0XHRcdFx0XHRyYW5nZUVuZD17cmFuZ2VFbmR9XG5cdFx0XHRcdFx0cmFuZ2VTdGFydD17cmFuZ2VTdGFydH1cblx0XHRcdFx0XHRyZXNvdXJjZT17cmVzb3VyY2V9XG5cdFx0XHRcdC8+XG5cdFx0XHQpfVxuXHRcdFx0e3RvZGF5RXZlbnRzLm1hcCgoZXZlbnQsIGluZGV4KSA9PiB7XG5cdFx0XHRcdGNvbnN0IGV2ZW50S2V5ID0gYGV2ZW50LSR7ZXZlbnQuaWR9LSR7aW5kZXh9LSR7ZGF5cy5hdCgwKT8udG9JU09TdHJpbmcoKX0tJHtyZXNvdXJjZUlkID8/ICduby1yZXNvdXJjZSd9YFxuXHRcdFx0XHRjb25zdCBpc1Nob3J0RXZlbnQgPSBldmVudC5lbmQuZGlmZihldmVudC5zdGFydCwgJ21pbnV0ZScpIDw9IDE1XG5cblx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJhYnNvbHV0ZVwiXG5cdFx0XHRcdFx0XHRrZXk9e2Ake2V2ZW50S2V5fS13cmFwcGVyYH1cblx0XHRcdFx0XHRcdHN0eWxlPXt7XG5cdFx0XHRcdFx0XHRcdGxlZnQ6IGAke2V2ZW50LmxlZnR9JWAsXG5cdFx0XHRcdFx0XHRcdHdpZHRoOiBgY2FsYygke2V2ZW50LndpZHRofSUgLSB2YXIoLS1zcGFjaW5nKSAqIDIpYCxcblx0XHRcdFx0XHRcdFx0dG9wOiBgJHtldmVudC50b3B9JWAsXG5cdFx0XHRcdFx0XHRcdGhlaWdodDogYCR7ZXZlbnQuaGVpZ2h0fSVgLFxuXHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHQ8RHJhZ2dhYmxlRXZlbnRcblx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbigncG9pbnRlci1ldmVudHMtYXV0bycsIHtcblx0XHRcdFx0XHRcdFx0XHQnWyZfcF06dGV4dC1bMTBweF0gWyZfcF06bXQtMCc6IGlzU2hvcnRFdmVudCxcblx0XHRcdFx0XHRcdFx0fSl9XG5cdFx0XHRcdFx0XHRcdGVsZW1lbnRJZD17ZXZlbnRLZXl9XG5cdFx0XHRcdFx0XHRcdGV2ZW50PXtldmVudH1cblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdClcblx0XHRcdH0pfVxuXHRcdDwvZGl2PlxuXHQpXG59XG5cbmV4cG9ydCBjb25zdCBWZXJ0aWNhbEdyaWRFdmVudHNMYXllciA9IG1lbW8oTm9NZW1vVmVydGljYWxHcmlkRXZlbnRzTGF5ZXIpXG4iLAogICAgImltcG9ydCB7IG1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgUmVzb3VyY2UgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL3R5cGVzJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUgeyBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuXG5pbnRlcmZhY2UgQ3VycmVudFRpbWVJbmRpY2F0b3JQcm9wcyB7XG5cdC8qKiBUaGUgc3RhcnQgZGF0ZS90aW1lIG9mIHRoZSBjb250YWluZXIncyB0aW1lbGluZSAoZS5nLiwgdG9wIG9mIHRoZSBjb2x1bW4pICovXG5cdHJhbmdlU3RhcnQ6IERheWpzXG5cdC8qKiBUaGUgZW5kIGRhdGUvdGltZSBvZiB0aGUgY29udGFpbmVyJ3MgdGltZWxpbmUgKGUuZy4sIGJvdHRvbSBvZiB0aGUgY29sdW1uKSAqL1xuXHRyYW5nZUVuZDogRGF5anNcblx0LyoqIE9wdGlvbmFsIHJlZmVyZW5jZSB0aW1lIGZvciBcIm5vd1wiICh1c2VmdWwgZm9yIHRlc3RpbmcpICovXG5cdG5vdz86IERheWpzXG5cdC8qKiBUaGUgcmVzb3VyY2UgYXNzb2NpYXRlZCB3aXRoIHRoaXMgY29sdW1uIChvcHRpb25hbCkgKi9cblx0cmVzb3VyY2U/OiBSZXNvdXJjZVxufVxuXG4vKipcbiAqIFJlbmRlcnMgYSBob3Jpem9udGFsIHJlZCBsaW5lIGluZGljYXRpbmcgdGhlIGN1cnJlbnQgdGltZSByZWxhdGl2ZSB0byBhIHZlcnRpY2FsIGNvbnRhaW5lcidzIHRpbWVsaW5lLlxuICogVGhlIGluZGljYXRvciBoYW5kbGVzIGl0cyBvd24gdmlzaWJpbGl0eSBiYXNlZCBvbiB3aGV0aGVyICdub3cnIGZhbGxzIHdpdGhpbiB0aGUgcHJvdmlkZWQgcmFuZ2UuXG4gKiBTdXBwb3J0cyBjdXN0b20gcmVuZGVyaW5nIHZpYSByZW5kZXJDdXJyZW50VGltZUluZGljYXRvciBmcm9tIGNvbnRleHQuXG4gKi9cbmNvbnN0IE5vTWVtb0N1cnJlbnRUaW1lSW5kaWNhdG9yID0gKHtcblx0cmFuZ2VTdGFydCxcblx0cmFuZ2VFbmQsXG5cdG5vdzogcHJvcE5vdyxcblx0cmVzb3VyY2UsXG59OiBDdXJyZW50VGltZUluZGljYXRvclByb3BzKSA9PiB7XG5cdC8vIEdldCByZW5kZXIgZnVuY3Rpb24gYW5kIGN1cnJlbnQgdmlldyBmcm9tIGNvbnRleHRcblx0Y29uc3QgeyByZW5kZXJDdXJyZW50VGltZUluZGljYXRvciwgdmlldyB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoXG5cdFx0KHN0YXRlKSA9PiAoe1xuXHRcdFx0cmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3I6IHN0YXRlLnJlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yLFxuXHRcdFx0dmlldzogc3RhdGUudmlldyxcblx0XHR9KVxuXHQpXG5cblx0Y29uc3Qgbm93ID0gcHJvcE5vdyA/PyBkYXlqcygpXG5cblx0Ly8gQ2hlY2sgaWYgY3VycmVudCB0aW1lIGZhbGxzIHdpdGhpbiB0aGlzIHJhbmdlXG5cdGNvbnN0IGlzV2l0aGluUmFuZ2UgPSBub3cuaXNTYW1lT3JBZnRlcihyYW5nZVN0YXJ0KSAmJiBub3cuaXNCZWZvcmUocmFuZ2VFbmQpXG5cblx0aWYgKCFpc1dpdGhpblJhbmdlKSB7XG5cdFx0cmV0dXJuIG51bGxcblx0fVxuXG5cdGNvbnN0IHRvdGFsRHVyYXRpb24gPSByYW5nZUVuZC5kaWZmKHJhbmdlU3RhcnQsICdtaW51dGUnKVxuXHRjb25zdCBtaW51dGVzRnJvbVN0YXJ0ID0gbm93LmRpZmYocmFuZ2VTdGFydCwgJ21pbnV0ZScpXG5cdGNvbnN0IHByb2dyZXNzID0gKG1pbnV0ZXNGcm9tU3RhcnQgLyB0b3RhbER1cmF0aW9uKSAqIDEwMFxuXG5cdC8vIElmIGN1c3RvbSByZW5kZXIgZnVuY3Rpb24gaXMgcHJvdmlkZWQgdmlhIGNvbnRleHQsIHVzZSBpdFxuXHRpZiAocmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3IpIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PD5cblx0XHRcdFx0e3JlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yKHtcblx0XHRcdFx0XHRjdXJyZW50VGltZTogbm93LFxuXHRcdFx0XHRcdHJhbmdlU3RhcnQsXG5cdFx0XHRcdFx0cmFuZ2VFbmQsXG5cdFx0XHRcdFx0cHJvZ3Jlc3MsXG5cdFx0XHRcdFx0cmVzb3VyY2UsXG5cdFx0XHRcdFx0dmlldyxcblx0XHRcdFx0fSl9XG5cdFx0XHQ8Lz5cblx0XHQpXG5cdH1cblxuXHQvLyBEZWZhdWx0IGluZGljYXRvciByZW5kZXJpbmdcblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9XCJhYnNvbHV0ZSBsZWZ0LTAgcmlnaHQtMCBoLTAuNSBiZy1yZWQtNTAwIHotNTAgcG9pbnRlci1ldmVudHMtbm9uZVwiXG5cdFx0XHRkYXRhLXRlc3RpZD1cImN1cnJlbnQtdGltZS1pbmRpY2F0b3JcIlxuXHRcdFx0c3R5bGU9e3tcblx0XHRcdFx0dG9wOiBgJHtwcm9ncmVzc30lYCxcblx0XHRcdH19XG5cdFx0Lz5cblx0KVxufVxuXG5leHBvcnQgY29uc3QgQ3VycmVudFRpbWVJbmRpY2F0b3IgPSBtZW1vKE5vTWVtb0N1cnJlbnRUaW1lSW5kaWNhdG9yKVxuIiwKICAgICJpbXBvcnQgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSB7IERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQge1xuXHRnZXRQb3NpdGlvbmVkRGF5RXZlbnRzLFxuXHR0eXBlIFBvc2l0aW9uZWRFdmVudCxcbn0gZnJvbSAnQC9saWIvdXRpbHMvcG9zaXRpb24tZGF5LWV2ZW50cydcblxuaW50ZXJmYWNlIFVzZVByb2Nlc3NlZERheUV2ZW50c1Byb3BzIHtcblx0ZGF5czogRGF5anNbXSAvLyBUaGUgc3BlY2lmaWMgZGF5IHRoaXMgY29sdW1uIHJlcHJlc2VudHNcblx0Z3JpZFR5cGU/OiAnZGF5JyB8ICdob3VyJ1xuXHRyZXNvdXJjZUlkPzogc3RyaW5nIHwgbnVtYmVyXG59XG5cbmV4cG9ydCBjb25zdCB1c2VQcm9jZXNzZWREYXlFdmVudHMgPSAoe1xuXHRkYXlzLFxuXHRncmlkVHlwZSxcblx0cmVzb3VyY2VJZCxcbn06IFVzZVByb2Nlc3NlZERheUV2ZW50c1Byb3BzKSA9PiB7XG5cdGNvbnN0IHsgZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlLCBnZXRFdmVudHNGb3JSZXNvdXJjZSB9ID1cblx0XHR1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cdGNvbnN0IGZpcnN0ID0gZGF5cy5hdCgwKVxuXHRjb25zdCBsYXN0ID0gZGF5cy5hdCgtMSlcblx0Y29uc3QgZGF5U3RhcnQgPSBmaXJzdD8uc3RhcnRPZignZGF5Jylcblx0Y29uc3QgZGF5RW5kID0gbGFzdD8uZW5kT2YoJ2RheScpXG5cblx0Y29uc3QgZXZlbnRzID0gdXNlTWVtbygoKSA9PiB7XG5cdFx0aWYgKCFkYXlTdGFydCB8fCAhZGF5RW5kKSByZXR1cm4gW11cblx0XHRsZXQgZGF5RXZlbnRzID0gZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlKGRheVN0YXJ0LCBkYXlFbmQpXG5cdFx0aWYgKHJlc291cmNlSWQpIHtcblx0XHRcdGNvbnN0IHJlc291cmNlRXZlbnRzID0gZ2V0RXZlbnRzRm9yUmVzb3VyY2UocmVzb3VyY2VJZClcblx0XHRcdGRheUV2ZW50cyA9IGRheUV2ZW50cy5maWx0ZXIoKGV2ZW50KSA9PlxuXHRcdFx0XHRyZXNvdXJjZUV2ZW50cy5zb21lKChyZSkgPT4gU3RyaW5nKHJlLmlkKSA9PT0gU3RyaW5nKGV2ZW50LmlkKSlcblx0XHRcdClcblx0XHR9XG5cblx0XHQvLyBWZXJ0aWNhbCBncmlkcyAoRGF5L1dlZWsvUmVzb3VyY2UgVmVydGljYWwpIG5ldmVyIHJlbmRlciBhbGwtZGF5IGV2ZW50c1xuXHRcdC8vIGFzIHRob3NlIGFyZSBoYW5kbGVkIGJ5IHRoZSBhbGwtZGF5LXJvdyBvciBhcmUgbm90IGFwcHJvcHJpYXRlIGZvciB0aGUgdGltZSBncmlkLlxuXHRcdHJldHVybiBkYXlFdmVudHMuZmlsdGVyKChlKSA9PiAhZS5hbGxEYXkpXG5cdH0sIFtcblx0XHRkYXlTdGFydCxcblx0XHRkYXlFbmQsXG5cdFx0Z2V0RXZlbnRzRm9yRGF0ZVJhbmdlLFxuXHRcdHJlc291cmNlSWQsXG5cdFx0Z2V0RXZlbnRzRm9yUmVzb3VyY2UsXG5cdF0pXG5cblx0Y29uc3QgdG9kYXlFdmVudHMgPSB1c2VNZW1vPFBvc2l0aW9uZWRFdmVudFtdPigoKSA9PiB7XG5cdFx0cmV0dXJuIGdldFBvc2l0aW9uZWREYXlFdmVudHMoe1xuXHRcdFx0ZGF5cyxcblx0XHRcdGV2ZW50cyxcblx0XHRcdGdyaWRUeXBlLFxuXHRcdH0pXG5cdH0sIFtkYXlzLCBncmlkVHlwZSwgZXZlbnRzXSlcblxuXHRyZXR1cm4gdG9kYXlFdmVudHNcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IGRheWpzLCB7IHR5cGUgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcblxuZXhwb3J0IGludGVyZmFjZSBQb3NpdGlvbmVkRXZlbnQgZXh0ZW5kcyBDYWxlbmRhckV2ZW50IHtcblx0bGVmdDogbnVtYmVyIC8vIExlZnQgcG9zaXRpb24gaW4gcGVyY2VudGFnZVxuXHR3aWR0aDogbnVtYmVyIC8vIFdpZHRoIGluIHBlcmNlbnRhZ2Vcblx0dG9wOiBudW1iZXIgLy8gVG9wIHBvc2l0aW9uIGluIHBlcmNlbnRhZ2Vcblx0aGVpZ2h0OiBudW1iZXIgLy8gSGVpZ2h0IGluIHBlcmNlbnRhZ2Vcblx0ekluZGV4PzogbnVtYmVyIC8vIFotaW5kZXggZm9yIGxheWVyaW5nIG92ZXJsYXBwaW5nIGV2ZW50c1xufVxuXG5pbnRlcmZhY2UgR2V0UG9zaXRpb25lZERheUV2ZW50c1BhcmFtcyB7XG5cdGRheXM6IERheWpzW11cblx0Z3JpZFR5cGU/OiAnZGF5JyB8ICdob3VyJyB8ICdtaW51dGUnXG5cdGV2ZW50czogQ2FsZW5kYXJFdmVudFtdXG59XG5cbmV4cG9ydCBjb25zdCBnZXRQb3NpdGlvbmVkRGF5RXZlbnRzID0gKHtcblx0ZGF5cyxcblx0Z3JpZFR5cGUgPSAnaG91cicsXG5cdGV2ZW50cyxcbn06IEdldFBvc2l0aW9uZWREYXlFdmVudHNQYXJhbXMpOiBQb3NpdGlvbmVkRXZlbnRbXSA9PiB7XG5cdC8vIEZpbHRlciBvdXQgYWxsLWRheSBldmVudHMgYW5kIHNvcnQgYnkgc3RhcnQgdGltZVxuXHRjb25zdCBzb3J0ZWRFdmVudHMgPSBldmVudHNcblx0XHQuZmlsdGVyKChlKSA9PiAhZS5hbGxEYXkpXG5cdFx0LnRvU29ydGVkKChhLCBiKSA9PiBhLnN0YXJ0LmRpZmYoYi5zdGFydCkpXG5cblx0aWYgKHNvcnRlZEV2ZW50cy5sZW5ndGggPT09IDApIHtcblx0XHRyZXR1cm4gW11cblx0fVxuXG5cdC8vIERldGVybWluZSBncmlkIGJvdW5kYXJpZXMgYW5kIG1ldHJpY3Ncblx0Ly8gVXNlIGV4cGxpY2l0IHN0YXJ0T2YgdG8gZW5zdXJlIHdlIGFyZSBhbmNob3JlZCB0byB0aGUgZ3JpZCB1bml0IGJvdW5kYXJpZXNcblx0Ly8gVGhpcyBwcmV2ZW50cyBvZmZzZXRzIGlmIHRoZSBncmlkIGRheXMgYXJlIG5vdCBub3JtYWxpemVkXG5cdGNvbnN0IGdyaWRTdGFydCA9IGRheXMuYXQoMCkgfHwgZGF5anMoKVxuXHRjb25zdCB0b3RhbFVuaXRzID0gZGF5cy5sZW5ndGhcblx0Y29uc3QgaXNEaXNjcmV0ZSA9IGdyaWRUeXBlID09PSAnZGF5J1xuXG5cdC8vIFN0ZXAgMTogR3JvdXAgZXZlbnRzIGludG8gY2x1c3RlcnMgb2Ygb3ZlcmxhcHBpbmcgZXZlbnRzXG5cdGNvbnN0IGNsdXN0ZXJzOiBDYWxlbmRhckV2ZW50W11bXSA9IFtdXG5cdGxldCBjdXJyZW50Q2x1c3RlcjogQ2FsZW5kYXJFdmVudFtdID0gW11cblx0bGV0IGxhc3RFdmVudEVuZDogRGF5anMgfCBudWxsID0gbnVsbFxuXHRmb3IgKGNvbnN0IGV2ZW50IG9mIHNvcnRlZEV2ZW50cykge1xuXHRcdGlmIChsYXN0RXZlbnRFbmQgJiYgZXZlbnQuc3RhcnQuaXNTYW1lT3JBZnRlcihsYXN0RXZlbnRFbmQpKSB7XG5cdFx0XHRpZiAoY3VycmVudENsdXN0ZXIubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRjbHVzdGVycy5wdXNoKGN1cnJlbnRDbHVzdGVyKVxuXHRcdFx0fVxuXHRcdFx0Y3VycmVudENsdXN0ZXIgPSBbXVxuXHRcdH1cblx0XHRjdXJyZW50Q2x1c3Rlci5wdXNoKGV2ZW50KVxuXHRcdGxhc3RFdmVudEVuZCA9IGxhc3RFdmVudEVuZCA/IGRheWpzLm1heChsYXN0RXZlbnRFbmQsIGV2ZW50LmVuZCkgOiBldmVudC5lbmRcblx0fVxuXHRpZiAoY3VycmVudENsdXN0ZXIubGVuZ3RoID4gMCkge1xuXHRcdGNsdXN0ZXJzLnB1c2goY3VycmVudENsdXN0ZXIpXG5cdH1cblxuXHQvLyBTdGVwIDI6IEZvciBlYWNoIGNsdXN0ZXIsIHVzZSBhIG1vcmUgaW50ZWxsaWdlbnQgY29sdW1uIGFzc2lnbm1lbnRcblx0Y29uc3QgcHJvY2Vzc2VkRXZlbnRzOiBQb3NpdGlvbmVkRXZlbnRbXSA9IFtdXG5cdGZvciAoY29uc3QgY2x1c3RlciBvZiBjbHVzdGVycykge1xuXHRcdGlmIChjbHVzdGVyLmxlbmd0aCA9PT0gMSkge1xuXHRcdFx0Ly8gU2luZ2xlIGV2ZW50IHRha2VzIGZ1bGwgd2lkdGhcblx0XHRcdGNvbnN0IGV2ZW50ID0gY2x1c3RlclswXVxuXG5cdFx0XHRsZXQgc3RhcnRUaW1lID0gZXZlbnQuc3RhcnQuZGlmZihncmlkU3RhcnQsIGdyaWRUeXBlLCB0cnVlKVxuXHRcdFx0bGV0IGVuZFRpbWUgPSBldmVudC5lbmQuZGlmZihncmlkU3RhcnQsIGdyaWRUeXBlLCB0cnVlKVxuXG5cdFx0XHRpZiAoaXNEaXNjcmV0ZSkge1xuXHRcdFx0XHRzdGFydFRpbWUgPSBNYXRoLmZsb29yKHN0YXJ0VGltZSlcblx0XHRcdFx0ZW5kVGltZSA9IE1hdGguY2VpbChlbmRUaW1lKVxuXHRcdFx0XHQvLyBFbnN1cmUgYXQgbGVhc3QgMSB1bml0IGR1cmF0aW9uIGZvciBkaXNjcmV0ZSBldmVudHNcblx0XHRcdFx0aWYgKGVuZFRpbWUgPD0gc3RhcnRUaW1lKSB7XG5cdFx0XHRcdFx0ZW5kVGltZSA9IHN0YXJ0VGltZSArIDFcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBDbGFtcCB0byBncmlkIGJvdW5kYXJpZXNcblx0XHRcdGlmIChzdGFydFRpbWUgPCAwKSBzdGFydFRpbWUgPSAwXG5cdFx0XHRpZiAoZW5kVGltZSA+IHRvdGFsVW5pdHMpIGVuZFRpbWUgPSB0b3RhbFVuaXRzXG5cblx0XHRcdGNvbnN0IHRvdGFsRHVyYXRpb24gPSBNYXRoLm1heCgwLCBlbmRUaW1lIC0gc3RhcnRUaW1lKVxuXG5cdFx0XHQvLyBTa2lwIGV2ZW50cyB0aGF0IGFyZSBjb21wbGV0ZWx5IG91dHNpZGUgdGhlIGdyaWRcblx0XHRcdGlmICh0b3RhbER1cmF0aW9uID09PSAwKSBjb250aW51ZVxuXG5cdFx0XHRjb25zdCB0b3AgPSAoc3RhcnRUaW1lIC8gdG90YWxVbml0cykgKiAxMDBcblx0XHRcdGNvbnN0IGhlaWdodCA9ICh0b3RhbER1cmF0aW9uIC8gdG90YWxVbml0cykgKiAxMDBcblxuXHRcdFx0cHJvY2Vzc2VkRXZlbnRzLnB1c2goeyAuLi5ldmVudCwgbGVmdDogMCwgd2lkdGg6IDEwMCwgdG9wLCBoZWlnaHQgfSlcblx0XHRcdGNvbnRpbnVlXG5cdFx0fVxuXG5cdFx0Ly8gTXVsdGlwbGUgZXZlbnRzIC0gdXNlIGxheWVyZWQgcG9zaXRpb25pbmcgYXBwcm9hY2hcblx0XHQvLyBTb3J0IGJ5IGR1cmF0aW9uIChsb25nZXN0IGZpcnN0KSwgdGhlbiBieSBzdGFydCB0aW1lXG5cdFx0Y29uc3Qgc29ydGVkQ2x1c3RlciA9IFsuLi5jbHVzdGVyXS5zb3J0KChhLCBiKSA9PiB7XG5cdFx0XHRjb25zdCBhRHVyYXRpb24gPSBhLmVuZC5kaWZmKGEuc3RhcnQsICdtaW51dGUnKVxuXHRcdFx0Y29uc3QgYkR1cmF0aW9uID0gYi5lbmQuZGlmZihiLnN0YXJ0LCAnbWludXRlJylcblxuXHRcdFx0Ly8gTG9uZ2VyIGV2ZW50cyBmaXJzdFxuXHRcdFx0aWYgKGFEdXJhdGlvbiAhPT0gYkR1cmF0aW9uKSB7XG5cdFx0XHRcdHJldHVybiBiRHVyYXRpb24gLSBhRHVyYXRpb25cblx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgc2FtZSBkdXJhdGlvbiwgZWFybGllciBzdGFydCB0aW1lIGZpcnN0XG5cdFx0XHRyZXR1cm4gYS5zdGFydC5kaWZmKGIuc3RhcnQpXG5cdFx0fSlcblxuXHRcdC8vIFByb2Nlc3MgZXZlbnRzIHdpdGggbGF5ZXJlZCBwb3NpdGlvbmluZ1xuXHRcdGNvbnN0IHRvdGFsRXZlbnRzID0gc29ydGVkQ2x1c3Rlci5sZW5ndGhcblxuXHRcdC8vIENhbGN1bGF0ZSBkeW5hbWljIG9mZnNldCBiYXNlZCBvbiBudW1iZXIgb2Ygb3ZlcmxhcHBpbmcgZXZlbnRzXG5cdFx0Ly8gRmV3ZXIgZXZlbnRzID0gbGFyZ2VyIGluZGl2aWR1YWwgb2Zmc2V0cywgbW9yZSBldmVudHMgPSBzbWFsbGVyIG9mZnNldHNcblx0XHRsZXQgbWF4T2Zmc2V0OiBudW1iZXJcblx0XHRpZiAodG90YWxFdmVudHMgPT09IDIpIHtcblx0XHRcdG1heE9mZnNldCA9IDI1IC8vIDI1JSBvZmZzZXQgZm9yIDIgZXZlbnRzXG5cdFx0fSBlbHNlIGlmICh0b3RhbEV2ZW50cyA9PT0gMykge1xuXHRcdFx0bWF4T2Zmc2V0ID0gNTAgLy8gNTAlIHRvdGFsIGZvciAzIGV2ZW50cyAoMjUlIGVhY2gpXG5cdFx0fSBlbHNlIGlmICh0b3RhbEV2ZW50cyA9PT0gNCkge1xuXHRcdFx0bWF4T2Zmc2V0ID0gNjAgLy8gNjAlIHRvdGFsIGZvciA0IGV2ZW50cyAoMjAlIGVhY2gpXG5cdFx0fSBlbHNlIHtcblx0XHRcdG1heE9mZnNldCA9IDcwIC8vIDcwJSB0b3RhbCBmb3IgNSsgZXZlbnRzXG5cdFx0fVxuXG5cdFx0Y29uc3Qgb2Zmc2V0UGVyRXZlbnQgPSB0b3RhbEV2ZW50cyA+IDEgPyBtYXhPZmZzZXQgLyAodG90YWxFdmVudHMgLSAxKSA6IDBcblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgc29ydGVkQ2x1c3Rlci5sZW5ndGg7IGkrKykge1xuXHRcdFx0Y29uc3QgZXZlbnQgPSBzb3J0ZWRDbHVzdGVyW2ldXG5cblx0XHRcdGxldCBzdGFydFRpbWUgPSBldmVudC5zdGFydC5kaWZmKGdyaWRTdGFydCwgZ3JpZFR5cGUsIHRydWUpXG5cdFx0XHRsZXQgZW5kVGltZSA9IGV2ZW50LmVuZC5kaWZmKGdyaWRTdGFydCwgZ3JpZFR5cGUsIHRydWUpXG5cblx0XHRcdGlmIChpc0Rpc2NyZXRlKSB7XG5cdFx0XHRcdHN0YXJ0VGltZSA9IE1hdGguZmxvb3Ioc3RhcnRUaW1lKVxuXHRcdFx0XHRlbmRUaW1lID0gTWF0aC5jZWlsKGVuZFRpbWUpXG5cdFx0XHRcdGlmIChlbmRUaW1lIDw9IHN0YXJ0VGltZSkge1xuXHRcdFx0XHRcdGVuZFRpbWUgPSBzdGFydFRpbWUgKyAxXG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gQ2xhbXAgdG8gZ3JpZCBib3VuZGFyaWVzXG5cdFx0XHRpZiAoc3RhcnRUaW1lIDwgMCkgc3RhcnRUaW1lID0gMFxuXHRcdFx0aWYgKGVuZFRpbWUgPiB0b3RhbFVuaXRzKSBlbmRUaW1lID0gdG90YWxVbml0c1xuXG5cdFx0XHRjb25zdCB0b3RhbER1cmF0aW9uID0gTWF0aC5tYXgoMCwgZW5kVGltZSAtIHN0YXJ0VGltZSlcblxuXHRcdFx0aWYgKHRvdGFsRHVyYXRpb24gPT09IDApIGNvbnRpbnVlXG5cblx0XHRcdGNvbnN0IHRvcCA9IChzdGFydFRpbWUgLyB0b3RhbFVuaXRzKSAqIDEwMFxuXHRcdFx0Y29uc3QgaGVpZ2h0ID0gKHRvdGFsRHVyYXRpb24gLyB0b3RhbFVuaXRzKSAqIDEwMFxuXG5cdFx0XHQvLyBDYWxjdWxhdGUgcG9zaXRpb25pbmcgYmFzZWQgb24gbGF5ZXIgYW5kIHRvdGFsIGV2ZW50c1xuXHRcdFx0bGV0IGxlZnQ6IG51bWJlclxuXHRcdFx0bGV0IHdpZHRoOiBudW1iZXJcblx0XHRcdGxldCB6SW5kZXg6IG51bWJlclxuXG5cdFx0XHRpZiAoaSA9PT0gMCkge1xuXHRcdFx0XHQvLyBGaXJzdCBldmVudCAobG9uZ2VzdCkgdGFrZXMgZnVsbCB3aWR0aCBhdCBib3R0b21cblx0XHRcdFx0bGVmdCA9IDBcblx0XHRcdFx0d2lkdGggPSAxMDBcblx0XHRcdFx0ekluZGV4ID0gMVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gU3Vic2VxdWVudCBldmVudHMgYXJlIG9mZnNldCBkeW5hbWljYWxseSBiYXNlZCBvbiB0b3RhbCBldmVudCBjb3VudFxuXHRcdFx0XHRsZWZ0ID0gb2Zmc2V0UGVyRXZlbnQgKiBpXG5cdFx0XHRcdHdpZHRoID0gMTAwIC0gbGVmdCAvLyBSZW1haW5pbmcgd2lkdGhcblx0XHRcdFx0ekluZGV4ID0gaSArIDEgLy8gSGlnaGVyIHotaW5kZXggZm9yIGV2ZW50cyBvbiB0b3Bcblx0XHRcdH1cblxuXHRcdFx0cHJvY2Vzc2VkRXZlbnRzLnB1c2goe1xuXHRcdFx0XHQuLi5ldmVudCxcblx0XHRcdFx0bGVmdCxcblx0XHRcdFx0d2lkdGgsXG5cdFx0XHRcdHRvcCxcblx0XHRcdFx0aGVpZ2h0LFxuXHRcdFx0XHR6SW5kZXgsXG5cdFx0XHR9KVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBwcm9jZXNzZWRFdmVudHNcbn1cbiIsCiAgICAiaW1wb3J0IHsgbWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5pbnRlcmZhY2UgVmVydGljYWxHcmlkSGVhZGVyQ29udGFpbmVyUHJvcHMge1xuXHRjaGlsZHJlbj86IFJlYWN0LlJlYWN0Tm9kZVxuXHRjbGFzc2VzPzogeyBoZWFkZXI/OiBzdHJpbmc7IGFsbERheT86IHN0cmluZyB9XG5cdGFsbERheVJvdz86IFJlYWN0LlJlYWN0Tm9kZVxufVxuXG5jb25zdCBOb01lbW9WZXJ0aWNhbEdyaWRIZWFkZXJDb250YWluZXI6IFJlYWN0LkZDPFxuXHRWZXJ0aWNhbEdyaWRIZWFkZXJDb250YWluZXJQcm9wc1xuPiA9ICh7IGNoaWxkcmVuLCBjbGFzc2VzLCBhbGxEYXlSb3cgfSkgPT4ge1xuXHRjb25zdCB7IHN0aWNreVZpZXdIZWFkZXIsIHZpZXdIZWFkZXJDbGFzc05hbWUgfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KFxuXHRcdChzdGF0ZSkgPT4gKHtcblx0XHRcdHN0aWNreVZpZXdIZWFkZXI6IHN0YXRlLnN0aWNreVZpZXdIZWFkZXIsXG5cdFx0XHR2aWV3SGVhZGVyQ2xhc3NOYW1lOiBzdGF0ZS52aWV3SGVhZGVyQ2xhc3NOYW1lLFxuXHRcdH0pXG5cdClcblxuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdHN0aWNreVZpZXdIZWFkZXIgJiYgJ3N0aWNreSB0b3AtMCB6LTIxIGJnLWJhY2tncm91bmQnLCAvLyBaLWluZGV4IGFib3ZlIHRoZSBsZWZ0IHN0aWNreSByZXNvdXJjZSBjb2x1bW5cblx0XHRcdFx0dmlld0hlYWRlckNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHQ+XG5cdFx0XHQ8ZGl2XG5cdFx0XHRcdGNsYXNzTmFtZT17Y24oJ2gtMTIgYm9yZGVyLWIgdy1maXQnLCBjbGFzc2VzPy5oZWFkZXIpfVxuXHRcdFx0XHRkYXRhLXRlc3RpZD1cInZlcnRpY2FsLWdyaWQtaGVhZGVyXCJcblx0XHRcdD5cblx0XHRcdFx0e2NoaWxkcmVufVxuXHRcdFx0PC9kaXY+XG5cdFx0XHR7LyogQWxsLWRheSByb3cgKi99XG5cdFx0XHR7YWxsRGF5Um93ICYmIChcblx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oJ2ZsZXggdy1mdWxsIGJvcmRlci1iIG1pbi1oLTEyJywgY2xhc3Nlcz8uYWxsRGF5KX1cblx0XHRcdFx0XHRkYXRhLXRlc3RpZD1cInZlcnRpY2FsLWdyaWQtYWxsLWRheVwiXG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7YWxsRGF5Um93fVxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdCl9XG5cdFx0PC9kaXY+XG5cdClcbn1cblxuZXhwb3J0IGNvbnN0IFZlcnRpY2FsR3JpZEhlYWRlckNvbnRhaW5lciA9IG1lbW8oXG5cdE5vTWVtb1ZlcnRpY2FsR3JpZEhlYWRlckNvbnRhaW5lclxuKVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IFNjcm9sbEFyZWEsIFNjcm9sbEJhciB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9zY3JvbGwtYXJlYSdcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgeyBWZXJ0aWNhbEdyaWRDb2wsIHR5cGUgVmVydGljYWxHcmlkQ29sUHJvcHMgfSBmcm9tICcuL3ZlcnRpY2FsLWdyaWQtY29sJ1xuaW1wb3J0IHsgVmVydGljYWxHcmlkSGVhZGVyQ29udGFpbmVyIH0gZnJvbSAnLi92ZXJ0aWNhbC1ncmlkLWhlYWRlci1jb250YWluZXInXG5cbmludGVyZmFjZSBWZXJ0aWNhbEdyaWRQcm9wcyB7XG5cdGNvbHVtbnM6IFZlcnRpY2FsR3JpZENvbFByb3BzW11cblx0Y2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGVcblx0Z3JpZFR5cGU/OiAnZGF5JyB8ICdob3VyJ1xuXHR2YXJpYW50PzogJ3JlZ3VsYXInIHwgJ3Jlc291cmNlJ1xuXHRjbGFzc2VzPzogeyBoZWFkZXI/OiBzdHJpbmc7IGJvZHk/OiBzdHJpbmc7IGFsbERheT86IHN0cmluZyB9XG5cdGFsbERheVJvdz86IFJlYWN0LlJlYWN0Tm9kZVxuXHQvKipcblx0ICogT3B0aW9uYWwgYXJyYXkgb2YgbWludXRlIHNsb3RzIGJ5IHdoaWNoIHRoZSBob3VyIGlzIGRpdmlkZWRcblx0ICogZS5nLiwgWzAsIDE1LCAzMCwgNDVdIGZvciBxdWFydGVyLWhvdXIgc2xvdHNcblx0ICovXG5cdGNlbGxTbG90cz86IG51bWJlcltdXG5cdHN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllc1xufVxuXG5leHBvcnQgY29uc3QgVmVydGljYWxHcmlkOiBSZWFjdC5GQzxWZXJ0aWNhbEdyaWRQcm9wcz4gPSAoe1xuXHRjb2x1bW5zLFxuXHRjaGlsZHJlbixcblx0Z3JpZFR5cGUgPSAnZGF5Jyxcblx0dmFyaWFudCA9ICdyZXNvdXJjZScsXG5cdGNsYXNzZXMsXG5cdGFsbERheVJvdyxcblx0Y2VsbFNsb3RzLFxuXHRzdHlsZSxcbn0pID0+IHtcblx0Y29uc3QgaXNSZXNvdXJjZUNhbGVuZGFyID0gdmFyaWFudCA9PT0gJ3Jlc291cmNlJ1xuXHRjb25zdCBpc1JlZ3VsYXJDYWxlbmRhciA9ICFpc1Jlc291cmNlQ2FsZW5kYXJcblxuXHRjb25zdCBoZWFkZXIgPSBjaGlsZHJlbiAmJiAoXG5cdFx0PFZlcnRpY2FsR3JpZEhlYWRlckNvbnRhaW5lclxuXHRcdFx0YWxsRGF5Um93PXthbGxEYXlSb3d9XG5cdFx0XHRjbGFzc2VzPXt7IGhlYWRlcjogY2xhc3Nlcz8uaGVhZGVyLCBhbGxEYXk6IGNsYXNzZXM/LmFsbERheSB9fVxuXHRcdD5cblx0XHRcdHtjaGlsZHJlbn1cblx0XHQ8L1ZlcnRpY2FsR3JpZEhlYWRlckNvbnRhaW5lcj5cblx0KVxuXG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPVwiaC1mdWxsIGZsZXggZmxleC1jb2xcIlxuXHRcdFx0ZGF0YS10ZXN0aWQ9XCJ2ZXJ0aWNhbC1ncmlkLWNvbnRhaW5lclwiXG5cdFx0XHRzdHlsZT17c3R5bGV9XG5cdFx0PlxuXHRcdFx0ey8qIGhlYWRlciByb3cgKi99XG5cdFx0XHR7aXNSZWd1bGFyQ2FsZW5kYXIgJiYgaGVhZGVyfVxuXG5cdFx0XHQ8U2Nyb2xsQXJlYVxuXHRcdFx0XHRjbGFzc05hbWU9e2NuKCdoLWZ1bGwnLCBpc1JlZ3VsYXJDYWxlbmRhciAmJiAnb3ZlcmZsb3ctYXV0bycpfVxuXHRcdFx0XHRkYXRhLXRlc3RpZD1cInZlcnRpY2FsLWdyaWQtc2Nyb2xsXCJcblx0XHRcdFx0dmlld1BvcnRQcm9wcz17eyBjbGFzc05hbWU6ICcqOmZsZXghICo6ZmxleC1jb2whICo6bWluLWgtZnVsbCcgfX1cblx0XHRcdD5cblx0XHRcdFx0ey8qIGhlYWRlciByb3cgZm9yIHJlc291cmNlIGNhbGVuZGFyIGluc2lkZSBzY3JvbGwgYXJlYSAqL31cblx0XHRcdFx0e2lzUmVzb3VyY2VDYWxlbmRhciAmJiBoZWFkZXJ9XG5cdFx0XHRcdHsvKiBDYWxlbmRhciBhcmVhIHdpdGggc2Nyb2xsICovfVxuXHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbignZmxleCBmbGV4LTEgdy1maXQnLCBjbGFzc2VzPy5ib2R5KX1cblx0XHRcdFx0XHRkYXRhLXRlc3RpZD1cInZlcnRpY2FsLWdyaWQtYm9keVwiXG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7LyogRGF5IGNvbHVtbnMgd2l0aCB0aW1lIHNsb3RzICovfVxuXHRcdFx0XHRcdHtjb2x1bW5zLm1hcCgoY29sdW1uLCBpbmRleCkgPT4gKFxuXHRcdFx0XHRcdFx0PFZlcnRpY2FsR3JpZENvbFxuXHRcdFx0XHRcdFx0XHRrZXk9e2Ake2NvbHVtbi5pZH0tJHtpbmRleH1gfVxuXHRcdFx0XHRcdFx0XHR7Li4uY29sdW1ufVxuXHRcdFx0XHRcdFx0XHRjZWxsU2xvdHM9e2NlbGxTbG90c31cblx0XHRcdFx0XHRcdFx0Z3JpZFR5cGU9e2dyaWRUeXBlfVxuXHRcdFx0XHRcdFx0XHRpc0xhc3RDb2x1bW49e2luZGV4ID09PSBjb2x1bW5zLmxlbmd0aCAtIDF9XG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdCkpfVxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PFNjcm9sbEJhciBjbGFzc05hbWU9XCJ6LTMwXCIgLz4gey8qIHZlcnRpY2FsIHNjcm9sbGJhciAqL31cblx0XHRcdFx0PFNjcm9sbEJhciBjbGFzc05hbWU9XCJ6LTMwXCIgb3JpZW50YXRpb249XCJob3Jpem9udGFsXCIgLz57JyAnfVxuXHRcdFx0XHR7LyogaG9yaXpvbnRhbCBzY3JvbGxiYXIgKi99XG5cdFx0XHQ8L1Njcm9sbEFyZWE+XG5cdFx0PC9kaXY+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBCdXNpbmVzc0hvdXJzIH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgZ2V0RGF5SG91cnMgfSBmcm9tICdAL2xpYi91dGlscy9kYXRlLXV0aWxzJ1xuaW1wb3J0IHsgY2FsY3VsYXRlQnVzaW5lc3NIb3Vyc1JhbmdlIH0gZnJvbSAnLi9idXNpbmVzcy1ob3VycydcblxuaW50ZXJmYWNlIEdldFZpZXdIb3Vyc09wdGlvbnMge1xuXHRyZWZlcmVuY2VEYXRlOiBEYXlqc1xuXHRidXNpbmVzc0hvdXJzPzogQnVzaW5lc3NIb3VycyB8IEJ1c2luZXNzSG91cnNbXVxuXHRoaWRlTm9uQnVzaW5lc3NIb3Vycz86IGJvb2xlYW5cblx0LyoqXG5cdCAqIEZvciB2aWV3cyB3aXRoIG11bHRpcGxlIGRheXMgKGxpa2UgV2Vla1ZpZXcpLCB3ZSBtaWdodCB3YW50IHRvIHNob3dcblx0ICogdGhlIHVuaW9uIG9mIGFsbCBidXNpbmVzcyBob3VycyBhY3Jvc3MgdGhvc2UgZGF5cy5cblx0ICovXG5cdGFsbERhdGVzPzogRGF5anNbXVxuXHQvKipcblx0ICogT3B0aW9uYWwgYWRkaXRpb25hbCBidXNpbmVzcyBob3VycyBjb25maWd1cmF0aW9ucyAoZS5nLiwgZnJvbSByZXNvdXJjZXMpLlxuXHQgKiBUaGVzZSB3aWxsIGJlIG1lcmdlZCB3aXRoIHRoZSBnbG9iYWwgYnVzaW5lc3NIb3VycyB3aGVuIGNhbGN1bGF0aW5nIHRoZSB2aXNpYmxlIHJhbmdlLlxuXHQgKi9cblx0cmVzb3VyY2VCdXNpbmVzc0hvdXJzPzogKEJ1c2luZXNzSG91cnMgfCBCdXNpbmVzc0hvdXJzW10pW11cbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIGxpc3Qgb2YgaG91cnMgdG8gZGlzcGxheSBpbiB0aGUgY2FsZW5kYXIgdmlldy5cbiAqIElmIGhpZGVOb25CdXNpbmVzc0hvdXJzIGlzIHRydWUsIGl0IGZpbHRlcnMgdGhlIGhvdXJzIGJhc2VkIG9uIGJ1c2luZXNzSG91cnMgY29uZmlndXJhdGlvbi5cbiAqIEZvciBtdWx0aXBsZSBkYXRlcywgaXQgdGFrZXMgdGhlIGVhcmxpZXN0IHN0YXJ0IGFuZCBsYXRlc3QgZW5kIGFjcm9zcyBhbGwgZGF0ZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRWaWV3SG91cnMoe1xuXHRyZWZlcmVuY2VEYXRlLFxuXHRidXNpbmVzc0hvdXJzLFxuXHRoaWRlTm9uQnVzaW5lc3NIb3Vycyxcblx0YWxsRGF0ZXMgPSBbcmVmZXJlbmNlRGF0ZV0sXG5cdHJlc291cmNlQnVzaW5lc3NIb3VycyA9IFtdLFxufTogR2V0Vmlld0hvdXJzT3B0aW9ucyk6IERheWpzW10ge1xuXHRjb25zdCBob3VycyA9IGdldERheUhvdXJzKHsgcmVmZXJlbmNlRGF0ZSB9KVxuXG5cdGNvbnN0IGhhc0J1c2luZXNzSG91cnNDb25maWcgPVxuXHRcdCEhYnVzaW5lc3NIb3VycyB8fCByZXNvdXJjZUJ1c2luZXNzSG91cnMubGVuZ3RoID4gMFxuXHRjb25zdCBzaG91bGRGaWx0ZXJCeUJ1c2luZXNzSG91cnMgPVxuXHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzICYmIGhhc0J1c2luZXNzSG91cnNDb25maWdcblxuXHRpZiAoIXNob3VsZEZpbHRlckJ5QnVzaW5lc3NIb3VycykgcmV0dXJuIGhvdXJzXG5cblx0Y29uc3QgeyBtaW5TdGFydCwgbWF4RW5kLCBoYXNCdXNpbmVzc0hvdXJzIH0gPSBjYWxjdWxhdGVCdXNpbmVzc0hvdXJzUmFuZ2Uoe1xuXHRcdGFsbERhdGVzLFxuXHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0cmVzb3VyY2VCdXNpbmVzc0hvdXJzLFxuXHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzLFxuXHR9KVxuXG5cdGlmICghaGFzQnVzaW5lc3NIb3VycykgcmV0dXJuIGhvdXJzXG5cblx0cmV0dXJuIGhvdXJzLmZpbHRlcigoaCkgPT4ge1xuXHRcdGNvbnN0IGhvdXIgPSBoLmhvdXIoKVxuXHRcdHJldHVybiBob3VyID49IG1pblN0YXJ0ICYmIGhvdXIgPCBtYXhFbmRcblx0fSlcbn1cbiIsCiAgICAiaW1wb3J0IHsgQWxsRGF5Um93IH0gZnJvbSAnQC9jb21wb25lbnRzL2FsbC1kYXktcm93L2FsbC1kYXktcm93J1xuaW1wb3J0IHsgQW5pbWF0ZWRTZWN0aW9uIH0gZnJvbSAnQC9jb21wb25lbnRzL2FuaW1hdGlvbnMvYW5pbWF0ZWQtc2VjdGlvbidcbmltcG9ydCB7IFZlcnRpY2FsR3JpZCB9IGZyb20gJ0AvY29tcG9uZW50cy92ZXJ0aWNhbC1ncmlkL3ZlcnRpY2FsLWdyaWQnXG5pbXBvcnQgeyBnZXRWaWV3SG91cnMgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL3V0aWxzL3ZpZXctaG91cnMnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgZGF5anMsIHsgdHlwZSBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuZXhwb3J0IGNvbnN0IERheVZpZXcgPSAoKSA9PiB7XG5cdGNvbnN0IHsgY3VycmVudERhdGUsIHRpbWVGb3JtYXQsIHQsIGJ1c2luZXNzSG91cnMsIGhpZGVOb25CdXNpbmVzc0hvdXJzIH0gPVxuXHRcdHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblx0Y29uc3QgaXNUb2RheSA9IGN1cnJlbnREYXRlLmlzU2FtZShkYXlqcygpLCAnZGF5Jylcblx0Y29uc3QgaG91cnMgPSBnZXRWaWV3SG91cnMoe1xuXHRcdHJlZmVyZW5jZURhdGU6IGN1cnJlbnREYXRlLFxuXHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0aGlkZU5vbkJ1c2luZXNzSG91cnMsXG5cdFx0YWxsRGF0ZXM6IFtjdXJyZW50RGF0ZV0sXG5cdH0pXG5cblx0Y29uc3QgZmlyc3RDb2wgPSB7XG5cdFx0aWQ6ICd0aW1lLWNvbCcsXG5cdFx0ZGF5OiB1bmRlZmluZWQsXG5cdFx0ZGF5czogaG91cnMsXG5cdFx0Y2xhc3NOYW1lOlxuXHRcdFx0J3Nocmluay0wIHctMTYgbWluLXctMTYgbWF4LXctMTYgc3RpY2t5IGxlZnQtMCBiZy1iYWNrZ3JvdW5kIHotMjAnLFxuXHRcdGdyaWRUeXBlOiAnaG91cicgYXMgY29uc3QsXG5cdFx0bm9FdmVudHM6IHRydWUsXG5cdFx0cmVuZGVyQ2VsbDogKGRhdGU6IERheWpzKSA9PiAoXG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQtbXV0ZWQtZm9yZWdyb3VuZCBwLTIgdGV4dC1yaWdodCB0ZXh0LVsxMHB4XSBzbTp0ZXh0LXhzIGZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyXCI+XG5cdFx0XHRcdHtkYXRlLmZvcm1hdCh0aW1lRm9ybWF0ID09PSAnMTItaG91cicgPyAnaCBBJyA6ICdIJyl9XG5cdFx0XHQ8L2Rpdj5cblx0XHQpLFxuXHR9XG5cblx0Y29uc3QgY29sdW1ucyA9IHtcblx0XHRpZDogYGRheS1jb2wtJHtjdXJyZW50RGF0ZS5mb3JtYXQoJ1lZWVktTU0tREQnKX1gLFxuXHRcdGRheTogY3VycmVudERhdGUsXG5cdFx0ZGF5czogaG91cnMsXG5cdFx0Y2xhc3NOYW1lOiAndy1bY2FsYygxMDAlLTRyZW0pXSBmbGV4LTEnLFxuXHRcdGdyaWRUeXBlOiAnaG91cicgYXMgY29uc3QsXG5cdH1cblxuXHRyZXR1cm4gKFxuXHRcdDxWZXJ0aWNhbEdyaWRcblx0XHRcdGFsbERheVJvdz17PEFsbERheVJvdyBkYXlzPXtbY3VycmVudERhdGVdfSAvPn1cblx0XHRcdGNlbGxTbG90cz17WzAsIDE1LCAzMCwgNDVdfVxuXHRcdFx0Y2xhc3Nlcz17e1xuXHRcdFx0XHRoZWFkZXI6ICd3LWZ1bGwnLFxuXHRcdFx0XHRib2R5OiAndy1mdWxsJyxcblx0XHRcdFx0YWxsRGF5OiAndy1mdWxsJyxcblx0XHRcdH19XG5cdFx0XHRjb2x1bW5zPXtbZmlyc3RDb2wsIGNvbHVtbnNdfVxuXHRcdFx0Z3JpZFR5cGU9XCJob3VyXCJcblx0XHRcdHZhcmlhbnQ9XCJyZWd1bGFyXCJcblx0XHQ+XG5cdFx0XHR7LyogSGVhZGVyICovfVxuXHRcdFx0PGRpdlxuXHRcdFx0XHRjbGFzc05hbWU9eydmbGV4IGZsZXgtMSBqdXN0aWZ5LWNlbnRlciBpdGVtcy1jZW50ZXIgbWluLWgtMTInfVxuXHRcdFx0XHRkYXRhLXRlc3RpZD1cImRheS12aWV3LWhlYWRlclwiXG5cdFx0XHQ+XG5cdFx0XHRcdDxBbmltYXRlZFNlY3Rpb25cblx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0J2ZsZXgganVzdGlmeS1jZW50ZXIgaXRlbXMtY2VudGVyIHRleHQtY2VudGVyIHRleHQtYmFzZSBmb250LXNlbWlib2xkIHNtOnRleHQteGwnLFxuXHRcdFx0XHRcdFx0aXNUb2RheSAmJiAndGV4dC1wcmltYXJ5J1xuXHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0dHJhbnNpdGlvbktleT17Y3VycmVudERhdGUuZm9ybWF0KCdZWVlZLU1NLUREJyl9XG5cdFx0XHRcdD5cblx0XHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJ4czppbmxpbmUgaGlkZGVuXCI+XG5cdFx0XHRcdFx0XHR7Y3VycmVudERhdGUuZm9ybWF0KCdkZGRkLCAnKX1cblx0XHRcdFx0XHQ8L3NwYW4+XG5cdFx0XHRcdFx0e2N1cnJlbnREYXRlLmZvcm1hdCgnTU1NTSBELCBZWVlZJyl9XG5cdFx0XHRcdFx0e2lzVG9kYXkgJiYgKFxuXHRcdFx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwiYmctcHJpbWFyeSB0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCBtbC0yIHJvdW5kZWQtZnVsbCBweC0xIHB5LTAuNSB0ZXh0LXhzIHNtOnB4LTIgc206dGV4dC1zbVwiPlxuXHRcdFx0XHRcdFx0XHR7dCgndG9kYXknKX1cblx0XHRcdFx0XHRcdDwvc3Bhbj5cblx0XHRcdFx0XHQpfVxuXHRcdFx0XHQ8L0FuaW1hdGVkU2VjdGlvbj5cblx0XHRcdDwvZGl2PlxuXHRcdDwvVmVydGljYWxHcmlkPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgSG9yaXpvbnRhbEdyaWQgfSBmcm9tICdAL2NvbXBvbmVudHMvaG9yaXpvbnRhbC1ncmlkL2hvcml6b250YWwtZ3JpZCdcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB7IGdldE1vbnRoV2Vla3MgfSBmcm9tICdAL2xpYi91dGlscy9kYXRlLXV0aWxzJ1xuaW1wb3J0IHsgTW9udGhIZWFkZXIgfSBmcm9tICcuL21vbnRoLWhlYWRlcidcbmltcG9ydCB0eXBlIHsgTW9udGhWaWV3UHJvcHMgfSBmcm9tICcuL3R5cGVzJ1xuXG5leHBvcnQgY29uc3QgTW9udGhWaWV3OiBSZWFjdC5GQzxNb250aFZpZXdQcm9wcz4gPSAoKSA9PiB7XG5cdGNvbnN0IHsgY3VycmVudERhdGUsIGZpcnN0RGF5T2ZXZWVrIH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cblx0Y29uc3Qgd2Vla3MgPSB1c2VNZW1vKFxuXHRcdCgpID0+IGdldE1vbnRoV2Vla3MoY3VycmVudERhdGUsIGZpcnN0RGF5T2ZXZWVrKSxcblx0XHRbY3VycmVudERhdGUsIGZpcnN0RGF5T2ZXZWVrXVxuXHQpXG5cblx0Y29uc3Qgcm93cyA9IHdlZWtzLm1hcCgoZGF5cywgd2Vla0luZGV4KSA9PiAoe1xuXHRcdGlkOiBgd2Vlay0ke3dlZWtJbmRleH1gLFxuXHRcdGNvbHVtbnM6IGRheXMubWFwKChkYXkpID0+ICh7XG5cdFx0XHRpZDogYGNvbC0ke2RheS50b0lTT1N0cmluZygpfWAsXG5cdFx0XHRkYXksXG5cdFx0XHRjbGFzc05hbWU6ICd3LWF1dG8nLFxuXHRcdFx0Z3JpZFR5cGU6ICdkYXknIGFzIGNvbnN0LFxuXHRcdH0pKSxcblx0XHRjbGFzc05hbWU6ICdmbGV4LTEnLFxuXHRcdHNob3dEYXlOdW1iZXI6IHRydWUsXG5cdH0pKVxuXG5cdHJldHVybiAoXG5cdFx0PEhvcml6b250YWxHcmlkXG5cdFx0XHRjbGFzc2VzPXt7IGJvZHk6ICd3LWZ1bGwnLCBoZWFkZXI6ICd3LWZ1bGwnIH19XG5cdFx0XHRyb3dzPXtyb3dzfVxuXHRcdFx0dmFyaWFudD1cInJlZ3VsYXJcIlxuXHRcdD5cblx0XHRcdDxNb250aEhlYWRlciBjbGFzc05hbWU9XCJoLTEyXCIgLz5cblx0XHQ8L0hvcml6b250YWxHcmlkPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB7IG1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmludGVyZmFjZSBIb3Jpem9udGFsR3JpZEhlYWRlckNvbnRhaW5lclByb3BzIHtcblx0Y2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGVcblx0Y2xhc3NOYW1lPzogc3RyaW5nXG59XG5cbmNvbnN0IE5vTWVtb0hvcml6b250YWxHcmlkSGVhZGVyQ29udGFpbmVyID0gKHtcblx0Y2hpbGRyZW4sXG5cdGNsYXNzTmFtZSxcbn06IEhvcml6b250YWxHcmlkSGVhZGVyQ29udGFpbmVyUHJvcHMpID0+IHtcblx0Y29uc3QgeyBzdGlja3lWaWV3SGVhZGVyLCB2aWV3SGVhZGVyQ2xhc3NOYW1lIH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dChcblx0XHQoc3RhdGUpID0+ICh7XG5cdFx0XHRzdGlja3lWaWV3SGVhZGVyOiBzdGF0ZS5zdGlja3lWaWV3SGVhZGVyLFxuXHRcdFx0dmlld0hlYWRlckNsYXNzTmFtZTogc3RhdGUudmlld0hlYWRlckNsYXNzTmFtZSxcblx0XHR9KVxuXHQpXG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0J2ZsZXggaC0xMiB3LWZpdCcsXG5cdFx0XHRcdHN0aWNreVZpZXdIZWFkZXIgJiYgJ3N0aWNreSB0b3AtMCB6LTIxIGJnLWJhY2tncm91bmQnLFxuXHRcdFx0XHRjbGFzc05hbWUsXG5cdFx0XHRcdHZpZXdIZWFkZXJDbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXRlc3RpZD1cImhvcml6b250YWwtZ3JpZC1oZWFkZXJcIlxuXHRcdD5cblx0XHRcdHtjaGlsZHJlbn1cblx0XHQ8L2Rpdj5cblx0KVxufVxuXG5leHBvcnQgY29uc3QgSG9yaXpvbnRhbEdyaWRIZWFkZXJDb250YWluZXIgPSBtZW1vKFxuXHROb01lbW9Ib3Jpem9udGFsR3JpZEhlYWRlckNvbnRhaW5lclxuKVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IFNjcm9sbEFyZWEsIFNjcm9sbEJhciB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9zY3JvbGwtYXJlYSdcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgeyBIb3Jpem9udGFsR3JpZEhlYWRlckNvbnRhaW5lciB9IGZyb20gJy4vaG9yaXpvbnRhbC1ncmlkLWhlYWRlci1jb250YWluZXInXG5pbXBvcnQge1xuXHRIb3Jpem9udGFsR3JpZFJvdyxcblx0dHlwZSBIb3Jpem9udGFsR3JpZFJvd1Byb3BzLFxufSBmcm9tICcuL2hvcml6b250YWwtZ3JpZC1yb3cnXG5cbmludGVyZmFjZSBIb3Jpem9udGFsR3JpZFByb3BzIHtcblx0cm93czogSG9yaXpvbnRhbEdyaWRSb3dQcm9wc1tdXG5cdGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlXG5cdGNsYXNzZXM/OiB7IGhlYWRlcj86IHN0cmluZzsgYm9keT86IHN0cmluZyB9XG5cdGFsbERheT86IGJvb2xlYW5cblx0Z3JpZFR5cGU/OiAnZGF5JyB8ICdob3VyJ1xuXHR2YXJpYW50PzogJ3JlZ3VsYXInIHwgJ3Jlc291cmNlJ1xuXHRkYXlOdW1iZXJIZWlnaHQ/OiBudW1iZXJcbn1cblxuZXhwb3J0IGNvbnN0IEhvcml6b250YWxHcmlkOiBSZWFjdC5GQzxIb3Jpem9udGFsR3JpZFByb3BzPiA9ICh7XG5cdHJvd3MsXG5cdGNoaWxkcmVuLFxuXHRjbGFzc2VzLFxuXHRhbGxEYXk6IHRvcExldmVsQWxsRGF5LFxuXHRncmlkVHlwZSxcblx0dmFyaWFudCA9ICdyZXNvdXJjZScsXG5cdGRheU51bWJlckhlaWdodCxcbn0pID0+IHtcblx0Y29uc3QgeyBjdXJyZW50RGF0ZSB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXG5cdGNvbnN0IGlzUmVzb3VyY2VDYWxlbmRhciA9IHZhcmlhbnQgPT09ICdyZXNvdXJjZSdcblx0Y29uc3QgaXNSZWd1bGFyQ2FsZW5kYXIgPSAhaXNSZXNvdXJjZUNhbGVuZGFyXG5cblx0Y29uc3QgaGVhZGVyID0gY2hpbGRyZW4gJiYgKFxuXHRcdDxIb3Jpem9udGFsR3JpZEhlYWRlckNvbnRhaW5lciBjbGFzc05hbWU9e2NsYXNzZXM/LmhlYWRlcn0+XG5cdFx0XHR7Y2hpbGRyZW59XG5cdFx0PC9Ib3Jpem9udGFsR3JpZEhlYWRlckNvbnRhaW5lcj5cblx0KVxuXG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPVwiaC1mdWxsIGZsZXggZmxleC1jb2xcIlxuXHRcdFx0ZGF0YS10ZXN0aWQ9XCJob3Jpem9udGFsLWdyaWQtY29udGFpbmVyXCJcblx0XHQ+XG5cdFx0XHR7LyoqXG5cdFx0XHQgKiBoZWFkZXIgcm93IGlzIHJlbmRlcmVkIG91dHNpZGUgc2Nyb2xsIGFyZWEgZm9yIHJlZ3VsYXIgY2FsZW5kYXJcblx0XHRcdCAqL31cblx0XHRcdHtpc1JlZ3VsYXJDYWxlbmRhciAmJiBoZWFkZXJ9XG5cblx0XHRcdDxTY3JvbGxBcmVhXG5cdFx0XHRcdGNsYXNzTmFtZT17Y24oJ2gtZnVsbCcsIGlzUmVndWxhckNhbGVuZGFyICYmICdvdmVyZmxvdy1hdXRvJyl9XG5cdFx0XHRcdGRhdGEtdGVzdGlkPVwiaG9yaXpvbnRhbC1ncmlkLXNjcm9sbFwiXG5cdFx0XHRcdHZpZXdQb3J0UHJvcHM9e3sgY2xhc3NOYW1lOiAnKjpmbGV4ISAqOmZsZXgtY29sISAqOm1pbi1oLWZ1bGwnIH19XG5cdFx0XHQ+XG5cdFx0XHRcdHsvKipcblx0XHRcdFx0ICogaGVhZGVyIHJvdyBmb3IgcmVzb3VyY2UgY2FsZW5kYXIgaW5zaWRlIHNjcm9sbCBhcmVhXG5cdFx0XHRcdCAqICovfVxuXHRcdFx0XHR7aXNSZXNvdXJjZUNhbGVuZGFyICYmIGhlYWRlcn1cblxuXHRcdFx0XHR7LyogQ2FsZW5kYXIgYXJlYSB3aXRoIHNjcm9sbCAqL31cblx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oJ2ZsZXggZmxleC0xIHctZml0JywgY2xhc3Nlcz8uYm9keSl9XG5cdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9XCJob3Jpem9udGFsLWdyaWQtYm9keVwiXG5cdFx0XHRcdD5cblx0XHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJyZWxhdGl2ZSB3LWZ1bGwgZmxleCBmbGV4LWNvbCBmbGV4LTFcIlxuXHRcdFx0XHRcdFx0a2V5PXtjdXJyZW50RGF0ZS5mb3JtYXQoJ1lZWVktTU0nKX1cblx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHR7cm93cy5tYXAoKHJvdywgaW5kZXgpID0+IChcblx0XHRcdFx0XHRcdFx0PEhvcml6b250YWxHcmlkUm93XG5cdFx0XHRcdFx0XHRcdFx0YWxsRGF5PXtyb3cuYWxsRGF5ID8/IHRvcExldmVsQWxsRGF5fVxuXHRcdFx0XHRcdFx0XHRcdGRheU51bWJlckhlaWdodD17ZGF5TnVtYmVySGVpZ2h0fVxuXHRcdFx0XHRcdFx0XHRcdGdyaWRUeXBlPXtncmlkVHlwZX1cblx0XHRcdFx0XHRcdFx0XHRpc0xhc3RSb3c9e2luZGV4ID09PSByb3dzLmxlbmd0aCAtIDF9XG5cdFx0XHRcdFx0XHRcdFx0a2V5PXtyb3cuaWR9XG5cdFx0XHRcdFx0XHRcdFx0dmFyaWFudD17dmFyaWFudH1cblx0XHRcdFx0XHRcdFx0XHR7Li4ucm93fVxuXHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0KSl9XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdDxTY3JvbGxCYXIgY2xhc3NOYW1lPVwiei0zMFwiIC8+XG5cdFx0XHRcdDxTY3JvbGxCYXIgY2xhc3NOYW1lPVwiei0zMFwiIG9yaWVudGF0aW9uPVwiaG9yaXpvbnRhbFwiIC8+XG5cdFx0XHQ8L1Njcm9sbEFyZWE+XG5cdFx0PC9kaXY+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBBbmltYXRlZFNlY3Rpb24gfSBmcm9tICdAL2NvbXBvbmVudHMvYW5pbWF0aW9ucy9hbmltYXRlZC1zZWN0aW9uJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IGdldFdlZWtEYXlzIH0gZnJvbSAnQC9saWIvdXRpbHMvZGF0ZS11dGlscydcblxuaW50ZXJmYWNlIE1vbnRoSGVhZGVyUHJvcHMge1xuXHRjbGFzc05hbWU/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGNvbnN0IE1vbnRoSGVhZGVyOiBSZWFjdC5GQzxNb250aEhlYWRlclByb3BzPiA9ICh7IGNsYXNzTmFtZSB9KSA9PiB7XG5cdGNvbnN0IHsgZmlyc3REYXlPZldlZWssIHN0aWNreVZpZXdIZWFkZXIsIHZpZXdIZWFkZXJDbGFzc05hbWUsIGN1cnJlbnREYXRlIH0gPVxuXHRcdHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblxuXHQvLyBSZW9yZGVyIHdlZWsgZGF5cyBiYXNlZCBvbiBmaXJzdERheU9mV2Vla1xuXHRjb25zdCB3ZWVrRGF5cyA9IGdldFdlZWtEYXlzKGN1cnJlbnREYXRlLCBmaXJzdERheU9mV2VlaylcblxuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCdmbGV4IHctZnVsbCcsXG5cdFx0XHRcdHN0aWNreVZpZXdIZWFkZXIgJiYgJ3N0aWNreSB0b3AtMCB6LTIwJyxcblx0XHRcdFx0dmlld0hlYWRlckNsYXNzTmFtZSxcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0ZGF0YS10ZXN0aWQ9XCJtb250aC1oZWFkZXJcIlxuXHRcdD5cblx0XHRcdHt3ZWVrRGF5cy5tYXAoKHdlZWtEYXksIGluZGV4KSA9PiAoXG5cdFx0XHRcdDxBbmltYXRlZFNlY3Rpb25cblx0XHRcdFx0XHRjbGFzc05hbWU9XCJweS0yIHRleHQtY2VudGVyIGZvbnQtbWVkaXVtIGJvcmRlci1yIGxhc3Q6Ym9yZGVyLXItMCBib3JkZXItYiBmbGV4LTFcIlxuXHRcdFx0XHRcdGRhdGEtdGVzdGlkPXtgd2Vla2RheS1oZWFkZXItJHt3ZWVrRGF5LmZvcm1hdCgnZGRkJykudG9Mb3dlckNhc2UoKX1gfVxuXHRcdFx0XHRcdGRlbGF5PXtpbmRleCAqIDAuMDV9XG5cdFx0XHRcdFx0a2V5PXt3ZWVrRGF5LnRvSVNPU3RyaW5nKCl9XG5cdFx0XHRcdFx0dHJhbnNpdGlvbktleT17d2Vla0RheS50b0lTT1N0cmluZygpfVxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwidGV4dC1zbSBjYXBpdGFsaXplXCI+e3dlZWtEYXkuZm9ybWF0KCdkZGQnKX08L3NwYW4+XG5cdFx0XHRcdDwvQW5pbWF0ZWRTZWN0aW9uPlxuXHRcdFx0KSl9XG5cdFx0PC9kaXY+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBBbGxEYXlSb3cgfSBmcm9tICdAL2NvbXBvbmVudHMvYWxsLWRheS1yb3cvYWxsLWRheS1yb3cnXG5pbXBvcnQgeyBBbmltYXRlZFNlY3Rpb24gfSBmcm9tICdAL2NvbXBvbmVudHMvYW5pbWF0aW9ucy9hbmltYXRlZC1zZWN0aW9uJ1xuaW1wb3J0IHsgVmVydGljYWxHcmlkIH0gZnJvbSAnQC9jb21wb25lbnRzL3ZlcnRpY2FsLWdyaWQvdmVydGljYWwtZ3JpZCdcbmltcG9ydCB7IGdldFZpZXdIb3VycyB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvdXRpbHMvdmlldy1ob3VycydcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCBkYXlqcywgeyB0eXBlIERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgZ2V0V2Vla0RheXMgfSBmcm9tICdAL2xpYi91dGlscy9kYXRlLXV0aWxzJ1xuXG5jb25zdCBDRUxMX0NMQVNTID1cblx0J3ctW2NhbGMoKDEwMCUtNHJlbSkvdmFyKC0tdmlzaWJsZS1kYXlzKSldIG1pbi13LVtjYWxjKCgxMDAlLTRyZW0pL3ZhcigtLXZpc2libGUtZGF5cykpXSBmbGV4LTEnXG5jb25zdCBMRUZUX0NPTF9XSURUSCA9ICd3LTEwIHNtOnctMTYgbWluLXctMTAgc206bWluLXctMTYgbWF4LXctMTAgc206bWF4LXctMTYnXG5cbmV4cG9ydCBjb25zdCBXZWVrVmlldzogUmVhY3QuRkMgPSAoKSA9PiB7XG5cdGNvbnN0IHtcblx0XHR0LFxuXHRcdGN1cnJlbnREYXRlLFxuXHRcdGZpcnN0RGF5T2ZXZWVrLFxuXHRcdHNlbGVjdERhdGUsXG5cdFx0b3BlbkV2ZW50Rm9ybSxcblx0XHR0aW1lRm9ybWF0LFxuXHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0aGlkZU5vbkJ1c2luZXNzSG91cnMsXG5cdFx0aGlkZGVuRGF5cyxcblx0fSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblxuXHRjb25zdCB3ZWVrRGF5cyA9IHVzZU1lbW8oXG5cdFx0KCkgPT4gZ2V0V2Vla0RheXMoY3VycmVudERhdGUsIGZpcnN0RGF5T2ZXZWVrKSxcblx0XHRbY3VycmVudERhdGUsIGZpcnN0RGF5T2ZXZWVrXVxuXHQpXG5cblx0Y29uc3QgdmlzaWJsZURheXMgPSB1c2VNZW1vKFxuXHRcdCgpID0+XG5cdFx0XHRoaWRkZW5EYXlzXG5cdFx0XHRcdD8gd2Vla0RheXMuZmlsdGVyKChkYXkpID0+ICFoaWRkZW5EYXlzLmhhcyhkYXkuZGF5KCkpKVxuXHRcdFx0XHQ6IHdlZWtEYXlzLFxuXHRcdFt3ZWVrRGF5cywgaGlkZGVuRGF5c11cblx0KVxuXG5cdGNvbnN0IGhvdXJzID0gdXNlTWVtbyhcblx0XHQoKSA9PlxuXHRcdFx0Z2V0Vmlld0hvdXJzKHtcblx0XHRcdFx0cmVmZXJlbmNlRGF0ZTogY3VycmVudERhdGUsXG5cdFx0XHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0XHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzLFxuXHRcdFx0XHRhbGxEYXRlczogd2Vla0RheXMsXG5cdFx0XHR9KSxcblx0XHRbY3VycmVudERhdGUsIGJ1c2luZXNzSG91cnMsIGhpZGVOb25CdXNpbmVzc0hvdXJzLCB3ZWVrRGF5c11cblx0KVxuXG5cdGNvbnN0IGZpcnN0Q29sID0ge1xuXHRcdGlkOiAndGltZS1jb2wnLFxuXHRcdGRheXM6IGhvdXJzLFxuXHRcdGRheTogdW5kZWZpbmVkLFxuXHRcdGNsYXNzTmFtZTogYHNocmluay0wICR7TEVGVF9DT0xfV0lEVEh9IHN0aWNreSBsZWZ0LTAgYmctYmFja2dyb3VuZCB6LTIwYCxcblx0XHRncmlkVHlwZTogJ2hvdXInIGFzIGNvbnN0LFxuXHRcdG5vRXZlbnRzOiB0cnVlLFxuXHRcdHJlbmRlckNlbGw6IChkYXRlOiBEYXlqcykgPT4gKFxuXHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LW11dGVkLWZvcmVncm91bmQgcC0yIHRleHQtcmlnaHQgdGV4dC1bMTBweF0gc206dGV4dC14cyBmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlclwiPlxuXHRcdFx0XHR7ZGF0ZS5mb3JtYXQodGltZUZvcm1hdCA9PT0gJzEyLWhvdXInID8gJ2ggQScgOiAnSCcpfVxuXHRcdFx0PC9kaXY+XG5cdFx0KSxcblx0fVxuXG5cdC8vIEdlbmVyYXRlIHdlZWsgZGF5cyDigJQgZWFjaCBjb2x1bW4gZ2V0cyBpdHMgb3duIGhvdXJzIG9uIHRoZSBjb3JyZWN0IGRhdGVcblx0Y29uc3QgY29sdW1ucyA9IHVzZU1lbW8oKCkgPT4ge1xuXHRcdHJldHVybiB2aXNpYmxlRGF5cy5tYXAoKGRheSkgPT4gKHtcblx0XHRcdGlkOiBgZGF5LWNvbC0ke2RheS5mb3JtYXQoJ1lZWVktTU0tREQnKX1gLFxuXHRcdFx0ZGF5LFxuXHRcdFx0bGFiZWw6IGRheS5mb3JtYXQoJ0QnKSxcblx0XHRcdGNsYXNzTmFtZTogQ0VMTF9DTEFTUyxcblx0XHRcdGRheXM6IGdldFZpZXdIb3Vycyh7XG5cdFx0XHRcdHJlZmVyZW5jZURhdGU6IGRheSxcblx0XHRcdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRcdFx0aGlkZU5vbkJ1c2luZXNzSG91cnMsXG5cdFx0XHRcdGFsbERhdGVzOiB3ZWVrRGF5cyxcblx0XHRcdH0pLFxuXHRcdFx0dmFsdWU6IGRheSxcblx0XHR9KSlcblx0fSwgW3dlZWtEYXlzLCBidXNpbmVzc0hvdXJzLCBoaWRlTm9uQnVzaW5lc3NIb3VycywgdmlzaWJsZURheXMubWFwXSlcblxuXHRjb25zdCBjc3NWYXJzID0ge1xuXHRcdCctLXZpc2libGUtZGF5cyc6IHZpc2libGVEYXlzLmxlbmd0aCxcblx0fSBhcyBSZWFjdC5DU1NQcm9wZXJ0aWVzXG5cblx0cmV0dXJuIChcblx0XHQ8VmVydGljYWxHcmlkXG5cdFx0XHRhbGxEYXlSb3c9e1xuXHRcdFx0XHQ8QWxsRGF5Um93XG5cdFx0XHRcdFx0Y2xhc3Nlcz17eyBjZWxsOiBDRUxMX0NMQVNTLCBzcGFjZXI6IExFRlRfQ09MX1dJRFRIIH19XG5cdFx0XHRcdFx0ZGF5cz17dmlzaWJsZURheXN9XG5cdFx0XHRcdC8+XG5cdFx0XHR9XG5cdFx0XHRjbGFzc2VzPXt7IGhlYWRlcjogJ3ctZnVsbCBoLTE4JywgYm9keTogJ3ctZnVsbCcgfX1cblx0XHRcdGNvbHVtbnM9e1tmaXJzdENvbCwgLi4uY29sdW1uc119XG5cdFx0XHRncmlkVHlwZT1cImhvdXJcIlxuXHRcdFx0c3R5bGU9e2Nzc1ZhcnN9XG5cdFx0XHR2YXJpYW50PVwicmVndWxhclwiXG5cdFx0PlxuXHRcdFx0PGRpdiBjbGFzc05hbWU9eydmbGV4IGgtZnVsbCBmbGV4LTEnfSBkYXRhLXRlc3RpZD1cIndlZWstdmlldy1oZWFkZXJcIj5cblx0XHRcdFx0ey8qIENvcm5lciBjZWxsIHdpdGggd2VlayBudW1iZXIgKi99XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidy0xMCBzbTp3LTE2IGgtZnVsbCBzaHJpbmstMCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgYm9yZGVyLXIgcC0yIGZsZXhcIj5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyXCI+XG5cdFx0XHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LW11dGVkLWZvcmVncm91bmQgdGV4dC14c1wiPnt0KCd3ZWVrJyl9PC9zcGFuPlxuXHRcdFx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwiZm9udC1tZWRpdW1cIj57Y3VycmVudERhdGUud2VlaygpfTwvc3Bhbj5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PC9kaXY+XG5cblx0XHRcdFx0ey8qIERheSBoZWFkZXIgY2VsbHMgKi99XG5cdFx0XHRcdHt2aXNpYmxlRGF5cy5tYXAoKGRheSwgaW5kZXgpID0+IHtcblx0XHRcdFx0XHRjb25zdCBpc1RvZGF5ID0gZGF5LmlzU2FtZShkYXlqcygpLCAnZGF5Jylcblx0XHRcdFx0XHRjb25zdCBrZXkgPSBgd2Vlay1kYXktaGVhZGVyLSR7ZGF5LnRvSVNPU3RyaW5nKCl9YFxuXG5cdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdDxBbmltYXRlZFNlY3Rpb25cblx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdFx0XHQnaG92ZXI6YmctYWNjZW50IGZsZXgtMSBmbGV4IGZsZXgtY29sIGp1c3RpZnktY2VudGVyIGN1cnNvci1wb2ludGVyIHAtMSB0ZXh0LWNlbnRlciBzbTpwLTIgYm9yZGVyLXIgbGFzdDpib3JkZXItci0wIHctNTAgaC1mdWxsJyxcblx0XHRcdFx0XHRcdFx0XHRpc1RvZGF5ICYmICdiZy1wcmltYXJ5LzEwIGZvbnQtYm9sZCdcblx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e2B3ZWVrLWRheS1oZWFkZXItJHtkYXkuZm9ybWF0KCdkZGRkJykudG9Mb3dlckNhc2UoKX1gfVxuXHRcdFx0XHRcdFx0XHRkZWxheT17aW5kZXggKiAwLjA1fVxuXHRcdFx0XHRcdFx0XHRrZXk9e2tleX1cblx0XHRcdFx0XHRcdFx0b25DbGljaz17KCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdHNlbGVjdERhdGUoZGF5KVxuXHRcdFx0XHRcdFx0XHRcdG9wZW5FdmVudEZvcm0oeyBzdGFydDogZGF5IH0pXG5cdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHRcdHRyYW5zaXRpb25LZXk9e2tleX1cblx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHNtOnRleHQtc21cIj57ZGF5LmZvcm1hdCgnZGRkJyl9PC9kaXY+XG5cdFx0XHRcdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0XHRcdFx0J214LWF1dG8gbXQtMSBmbGV4IGgtNSB3LTUgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHJvdW5kZWQtZnVsbCB0ZXh0LXhzJyxcblx0XHRcdFx0XHRcdFx0XHRcdGlzVG9kYXkgJiYgJ2JnLXByaW1hcnkgdGV4dC1wcmltYXJ5LWZvcmVncm91bmQnXG5cdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdHtkYXkuZm9ybWF0KCdEJyl9XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0PC9BbmltYXRlZFNlY3Rpb24+XG5cdFx0XHRcdFx0KVxuXHRcdFx0XHR9KX1cblx0XHRcdDwvZGl2PlxuXHRcdDwvVmVydGljYWxHcmlkPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB7IEFuaW1hdGVkU2VjdGlvbiB9IGZyb20gJ0AvY29tcG9uZW50cy9hbmltYXRpb25zL2FuaW1hdGVkLXNlY3Rpb24nXG5pbXBvcnQgeyBTY3JvbGxBcmVhLCBTY3JvbGxCYXIgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvc2Nyb2xsLWFyZWEnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgZGF5anMsIHsgdHlwZSBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuY29uc3QgREFZX0hFQURFUl9OQU1FUyA9IFtcblx0eyBpZDogJ3N1bicsIGxhYmVsOiAnUycgfSxcblx0eyBpZDogJ21vbicsIGxhYmVsOiAnTScgfSxcblx0eyBpZDogJ3R1ZScsIGxhYmVsOiAnVCcgfSxcblx0eyBpZDogJ3dlZCcsIGxhYmVsOiAnVycgfSxcblx0eyBpZDogJ3RodScsIGxhYmVsOiAnVCcgfSxcblx0eyBpZDogJ2ZyaScsIGxhYmVsOiAnRicgfSxcblx0eyBpZDogJ3NhdCcsIGxhYmVsOiAnUycgfSxcbl1cbmNvbnN0IEVWRU5UX0RPVF9DT0xPUlMgPSBbJ2JnLXByaW1hcnknLCAnYmctYmx1ZS01MDAnLCAnYmctZ3JlZW4tNTAwJ11cbmNvbnN0IERBWVNfSU5fTUlOSV9DQUxFTkRBUiA9IDQyXG5cbmNvbnN0IGdldERheVRvb2x0aXAgPSAoZXZlbnRDb3VudDogbnVtYmVyKTogc3RyaW5nID0+IHtcblx0aWYgKGV2ZW50Q291bnQgPT09IDApIHtcblx0XHRyZXR1cm4gJydcblx0fVxuXHRjb25zdCBwbHVyYWwgPSBldmVudENvdW50ID4gMSA/ICdzJyA6ICcnXG5cdHJldHVybiBgJHtldmVudENvdW50fSBldmVudCR7cGx1cmFsfWBcbn1cblxuaW50ZXJmYWNlIE1vbnRoRGF0YSB7XG5cdGRhdGU6IERheWpzXG5cdG5hbWU6IHN0cmluZ1xuXHRldmVudENvdW50OiBudW1iZXJcblx0bW9udGhLZXk6IHN0cmluZ1xufVxuXG5pbnRlcmZhY2UgRGF5RGF0YSB7XG5cdGRhdGU6IERheWpzXG5cdGRheUtleTogc3RyaW5nXG5cdGlzSW5DdXJyZW50TW9udGg6IGJvb2xlYW5cblx0aXNUb2RheTogYm9vbGVhblxuXHRpc1NlbGVjdGVkOiBib29sZWFuXG5cdGV2ZW50Q291bnQ6IG51bWJlclxufVxuXG5leHBvcnQgY29uc3QgWWVhclZpZXcgPSAoKSA9PiB7XG5cdGNvbnN0IHsgY3VycmVudERhdGUsIHNlbGVjdERhdGUsIGV2ZW50cywgc2V0VmlldywgZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlLCB0IH0gPVxuXHRcdHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblx0Y29uc3QgY3VycmVudFllYXIgPSBjdXJyZW50RGF0ZS55ZWFyKClcblxuXHRjb25zdCBnZW5lcmF0ZU1vbnRoc0RhdGEgPSAoKTogTW9udGhEYXRhW10gPT4ge1xuXHRcdHJldHVybiBBcnJheS5mcm9tKHsgbGVuZ3RoOiAxMiB9LCAoXywgbW9udGhJbmRleCkgPT4ge1xuXHRcdFx0Y29uc3QgbW9udGhEYXRlID0gZGF5anMoKVxuXHRcdFx0XHQueWVhcihjdXJyZW50WWVhcilcblx0XHRcdFx0Lm1vbnRoKG1vbnRoSW5kZXgpXG5cdFx0XHRcdC5zdGFydE9mKCdtb250aCcpXG5cdFx0XHRjb25zdCBldmVudHNJbk1vbnRoID0gZXZlbnRzLmZpbHRlcihcblx0XHRcdFx0KGV2ZW50KSA9PlxuXHRcdFx0XHRcdGV2ZW50LnN0YXJ0LnllYXIoKSA9PT0gY3VycmVudFllYXIgJiZcblx0XHRcdFx0XHRldmVudC5zdGFydC5tb250aCgpID09PSBtb250aEluZGV4XG5cdFx0XHQpXG5cblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdGRhdGU6IG1vbnRoRGF0ZSxcblx0XHRcdFx0bmFtZTogbW9udGhEYXRlLmZvcm1hdCgnTU1NTScpLFxuXHRcdFx0XHRldmVudENvdW50OiBldmVudHNJbk1vbnRoLmxlbmd0aCxcblx0XHRcdFx0bW9udGhLZXk6IG1vbnRoRGF0ZS5mb3JtYXQoJ01NJyksXG5cdFx0XHR9XG5cdFx0fSlcblx0fVxuXG5cdGNvbnN0IGdlbmVyYXRlRGF5c0Zvck1vbnRoID0gKG1vbnRoRGF0ZTogRGF5anMpOiBEYXlEYXRhW10gPT4ge1xuXHRcdGNvbnN0IGZpcnN0RGF5T2ZDYWxlbmRhciA9IG1vbnRoRGF0ZS5zdGFydE9mKCdtb250aCcpLnN0YXJ0T2YoJ3dlZWsnKVxuXG5cdFx0cmV0dXJuIEFycmF5LmZyb20oeyBsZW5ndGg6IERBWVNfSU5fTUlOSV9DQUxFTkRBUiB9LCAoXywgZGF5SW5kZXgpID0+IHtcblx0XHRcdGNvbnN0IGRheURhdGUgPSBmaXJzdERheU9mQ2FsZW5kYXIuYWRkKGRheUluZGV4LCAnZGF5Jylcblx0XHRcdGNvbnN0IGRheVN0YXJ0ID0gZGF5RGF0ZS5zdGFydE9mKCdkYXknKVxuXHRcdFx0Y29uc3QgZGF5RW5kID0gZGF5RGF0ZS5lbmRPZignZGF5Jylcblx0XHRcdGNvbnN0IGV2ZW50c09uRGF5ID0gZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlKGRheVN0YXJ0LCBkYXlFbmQpXG5cblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdGRhdGU6IGRheURhdGUsXG5cdFx0XHRcdGRheUtleTogZGF5RGF0ZS5mb3JtYXQoJ1lZWVktTU0tREQnKSxcblx0XHRcdFx0aXNJbkN1cnJlbnRNb250aDogZGF5RGF0ZS5tb250aCgpID09PSBtb250aERhdGUubW9udGgoKSxcblx0XHRcdFx0aXNUb2RheTogZGF5RGF0ZS5pc1NhbWUoZGF5anMoKSwgJ2RheScpLFxuXHRcdFx0XHRpc1NlbGVjdGVkOiBkYXlEYXRlLmlzU2FtZShjdXJyZW50RGF0ZSwgJ2RheScpLFxuXHRcdFx0XHRldmVudENvdW50OiBldmVudHNPbkRheS5sZW5ndGgsXG5cdFx0XHR9XG5cdFx0fSlcblx0fVxuXG5cdGNvbnN0IG5hdmlnYXRlVG9EYXRlID0gKFxuXHRcdGRhdGU6IERheWpzLFxuXHRcdHZpZXc6ICdtb250aCcgfCAnZGF5Jyxcblx0XHRldmVudD86IFJlYWN0Lk1vdXNlRXZlbnRcblx0KSA9PiB7XG5cdFx0ZXZlbnQ/LnN0b3BQcm9wYWdhdGlvbigpXG5cdFx0c2VsZWN0RGF0ZShkYXRlKVxuXHRcdHNldFZpZXcodmlldylcblx0fVxuXG5cdGNvbnN0IGdldEV2ZW50Q291bnRMYWJlbCA9IChjb3VudDogbnVtYmVyKTogc3RyaW5nID0+IHtcblx0XHRjb25zdCBldmVudFdvcmQgPSBjb3VudCA9PT0gMSA/IHQoJ2V2ZW50JykgOiB0KCdldmVudHMnKVxuXHRcdHJldHVybiBgJHtjb3VudH0gJHtldmVudFdvcmR9YFxuXHR9XG5cblx0Y29uc3QgZ2V0RGF5Q2xhc3NOYW1lID0gKGRheTogRGF5RGF0YSk6IHN0cmluZyA9PiB7XG5cdFx0Y29uc3QgYmFzZUNsYXNzID1cblx0XHRcdCdyZWxhdGl2ZSBmbGV4IGFzcGVjdC1zcXVhcmUgdy1mdWxsIGN1cnNvci1wb2ludGVyIGZsZXgtY29sIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBob3ZlcjpiZy1hY2NlbnQgcm91bmRlZC1zbSB0cmFuc2l0aW9uLWNvbG9ycyBkdXJhdGlvbi0yMDAnXG5cdFx0Y29uc3Qgb3V0c2lkZU1vbnRoQ2xhc3MgPSBkYXkuaXNJbkN1cnJlbnRNb250aFxuXHRcdFx0PyAnJ1xuXHRcdFx0OiAndGV4dC1tdXRlZC1mb3JlZ3JvdW5kIG9wYWNpdHktNTAnXG5cdFx0Y29uc3QgdG9kYXlDbGFzcyA9IGRheS5pc1RvZGF5XG5cdFx0XHQ/ICdiZy1wcmltYXJ5IHRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIHJvdW5kZWQtZnVsbCdcblx0XHRcdDogJydcblx0XHRjb25zdCBzZWxlY3RlZENsYXNzID1cblx0XHRcdGRheS5pc1NlbGVjdGVkICYmICFkYXkuaXNUb2RheSA/ICdiZy1tdXRlZCByb3VuZGVkLWZ1bGwgZm9udC1ib2xkJyA6ICcnXG5cdFx0Y29uc3QgaGFzRXZlbnRzQ2xhc3MgPVxuXHRcdFx0ZGF5LmV2ZW50Q291bnQgPiAwICYmICFkYXkuaXNUb2RheSAmJiAhZGF5LmlzU2VsZWN0ZWQgPyAnZm9udC1tZWRpdW0nIDogJydcblxuXHRcdHJldHVybiBjbihcblx0XHRcdGJhc2VDbGFzcyxcblx0XHRcdG91dHNpZGVNb250aENsYXNzLFxuXHRcdFx0dG9kYXlDbGFzcyxcblx0XHRcdHNlbGVjdGVkQ2xhc3MsXG5cdFx0XHRoYXNFdmVudHNDbGFzc1xuXHRcdClcblx0fVxuXG5cdGNvbnN0IGdldEV2ZW50RG90Q2xhc3NOYW1lID0gKGNvbG9yOiBzdHJpbmcsIGlzVG9kYXk6IGJvb2xlYW4pOiBzdHJpbmcgPT4ge1xuXHRcdGNvbnN0IGRvdENvbG9yID0gaXNUb2RheSA/ICdiZy1wcmltYXJ5LWZvcmVncm91bmQnIDogY29sb3Jcblx0XHRyZXR1cm4gY24oJ2gtWzNweF0gdy1bM3B4XSByb3VuZGVkLWZ1bGwnLCBkb3RDb2xvcilcblx0fVxuXG5cdGNvbnN0IG1vbnRoc0RhdGEgPSBnZW5lcmF0ZU1vbnRoc0RhdGEoKVxuXG5cdHJldHVybiAoXG5cdFx0PFNjcm9sbEFyZWEgY2xhc3NOYW1lPVwiaC1mdWxsXCIgZGF0YS10ZXN0aWQ9XCJ5ZWFyLXZpZXdcIj5cblx0XHRcdDxkaXZcblx0XHRcdFx0Y2xhc3NOYW1lPVwiZ3JpZCBhdXRvLXJvd3MtZnIgZ3JpZC1jb2xzLTEgZ2FwLTQgcC00IHNtOmdyaWQtY29scy0yIGxnOmdyaWQtY29scy0zXCJcblx0XHRcdFx0ZGF0YS10ZXN0aWQ9XCJ5ZWFyLWdyaWRcIlxuXHRcdFx0PlxuXHRcdFx0XHR7bW9udGhzRGF0YS5tYXAoKG1vbnRoLCBtb250aEluZGV4KSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgZGF5c0luTW9udGggPSBnZW5lcmF0ZURheXNGb3JNb250aChtb250aC5kYXRlKVxuXHRcdFx0XHRcdGNvbnN0IGFuaW1hdGlvbkRlbGF5ID0gbW9udGhJbmRleCAqIDAuMDVcblxuXHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImhvdmVyOmJvcmRlci1wcmltYXJ5IGZsZXggZmxleC1jb2wgcm91bmRlZC1sZyBib3JkZXIgcC0zIHRleHQtbGVmdCB0cmFuc2l0aW9uLWFsbCBkdXJhdGlvbi0yMDAgaG92ZXI6c2hhZG93LW1kXCJcblx0XHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e2B5ZWFyLW1vbnRoLSR7bW9udGgubW9udGhLZXl9YH1cblx0XHRcdFx0XHRcdFx0a2V5PXttb250aC5tb250aEtleX1cblx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0PEFuaW1hdGVkU2VjdGlvblxuXHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cIm1iLTIgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuXCJcblx0XHRcdFx0XHRcdFx0XHRkZWxheT17YW5pbWF0aW9uRGVsYXl9XG5cdFx0XHRcdFx0XHRcdFx0a2V5PXtgbW9udGgtJHttb250aC5tb250aEtleX1gfVxuXHRcdFx0XHRcdFx0XHRcdHRyYW5zaXRpb25LZXk9e2Btb250aC0ke21vbnRoLm1vbnRoS2V5fWB9XG5cdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHQ8YnV0dG9uXG5cdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJ0ZXh0LWxnIGZvbnQtbWVkaXVtIGhvdmVyOnVuZGVybGluZSBjdXJzb3ItcG9pbnRlclwiXG5cdFx0XHRcdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD17YHllYXItbW9udGgtdGl0bGUtJHttb250aC5tb250aEtleX1gfVxuXHRcdFx0XHRcdFx0XHRcdFx0b25DbGljaz17KCkgPT4gbmF2aWdhdGVUb0RhdGUobW9udGguZGF0ZSwgJ21vbnRoJyl9XG5cdFx0XHRcdFx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCJcblx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHR7bW9udGgubmFtZX1cblx0XHRcdFx0XHRcdFx0XHQ8L2J1dHRvbj5cblxuXHRcdFx0XHRcdFx0XHRcdHttb250aC5ldmVudENvdW50ID4gMCAmJiAoXG5cdFx0XHRcdFx0XHRcdFx0XHQ8c3BhblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJiZy1wcmltYXJ5IHRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIHJvdW5kZWQtZnVsbCBweC0yIHB5LTEgdGV4dC14c1wiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPXtgeWVhci1tb250aC1ldmVudC1jb3VudC0ke21vbnRoLm1vbnRoS2V5fWB9XG5cdFx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHtnZXRFdmVudENvdW50TGFiZWwobW9udGguZXZlbnRDb3VudCl9XG5cdFx0XHRcdFx0XHRcdFx0XHQ8L3NwYW4+XG5cdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0PC9BbmltYXRlZFNlY3Rpb24+XG5cblx0XHRcdFx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImdyaWQgZ3JpZC1jb2xzLTcgZ2FwLVsxcHhdIHRleHQtWzAuNnJlbV1cIlxuXHRcdFx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPXtgeWVhci1taW5pLWNhbGVuZGFyLSR7bW9udGgubW9udGhLZXl9YH1cblx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdHtEQVlfSEVBREVSX05BTUVTLm1hcCgoZGF5KSA9PiAoXG5cdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cInRleHQtbXV0ZWQtZm9yZWdyb3VuZCBoLTMgdGV4dC1jZW50ZXJcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRrZXk9e2BoZWFkZXItJHttb250aC5tb250aEtleX0tJHtkYXkuaWR9YH1cblx0XHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0e2RheS5sYWJlbH1cblx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdCkpfVxuXG5cdFx0XHRcdFx0XHRcdFx0e2RheXNJbk1vbnRoLm1hcCgoZGF5KSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBkYXlUZXN0SWQgPSBgeWVhci1kYXktJHttb250aC5kYXRlLmZvcm1hdCgnWVlZWS1NTScpfS0ke2RheS5kYXlLZXl9YFxuXHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgaGFzRXZlbnRzID0gZGF5LmV2ZW50Q291bnQgPiAwXG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zdCB2aXNpYmxlRG90Q291bnQgPSBNYXRoLm1pbihkYXkuZXZlbnRDb3VudCwgMylcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IHZpc2libGVEb3RDb2xvcnMgPSBFVkVOVF9ET1RfQ09MT1JTLnNsaWNlKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQwLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2aXNpYmxlRG90Q291bnRcblx0XHRcdFx0XHRcdFx0XHRcdClcblxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0XHRcdFx0PGJ1dHRvblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Z2V0RGF5Q2xhc3NOYW1lKGRheSl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e2RheVRlc3RJZH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRrZXk9e2RheS5kYXlLZXl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0b25DbGljaz17KGUpID0+IG5hdmlnYXRlVG9EYXRlKGRheS5kYXRlLCAnZGF5JywgZSl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGl0bGU9e2dldERheVRvb2x0aXAoZGF5LmV2ZW50Q291bnQpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwidGV4dC1jZW50ZXIgbGVhZGluZy1ub25lXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR7ZGF5LmRhdGUuZGF0ZSgpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvc3Bhbj5cblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHtoYXNFdmVudHMgJiYgKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdhYnNvbHV0ZSBib3R0b20tMCBmbGV4IHctZnVsbCBqdXN0aWZ5LWNlbnRlciBzcGFjZS14LVsxcHhdJyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkYXkuaXNUb2RheSAmJiAnYm90dG9tLVsxcHhdJ1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR7dmlzaWJsZURvdENvbG9ycy5tYXAoKGRvdENvbG9yKSA9PiAoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHNwYW5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Z2V0RXZlbnREb3RDbGFzc05hbWUoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRvdENvbG9yLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkYXkuaXNUb2RheVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGtleT17ZG90Q29sb3J9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KSl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2J1dHRvbj5cblx0XHRcdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdFx0XHR9KX1cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQpXG5cdFx0XHRcdH0pfVxuXHRcdFx0PC9kaXY+XG5cdFx0XHQ8U2Nyb2xsQmFyIGNsYXNzTmFtZT1cInotMzBcIiAvPlxuXHRcdDwvU2Nyb2xsQXJlYT5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgUmVhY3ROb2RlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBFdmVudEZvcm1Qcm9wcyB9IGZyb20gJ0AvY29tcG9uZW50cy9ldmVudC1mb3JtL2V2ZW50LWZvcm0nXG5pbXBvcnQgdHlwZSB7IEJ1c2luZXNzSG91cnMsIENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgdHlwZSB7XG5cdENhbGVuZGFyQ2xhc3Nlc092ZXJyaWRlLFxuXHRDZWxsQ2xpY2tJbmZvLFxuXHREYXRlUmFuZ2UsXG5cdFJlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yUHJvcHMsXG59IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvdHlwZXMnXG5pbXBvcnQgeyB1c2VDYWxlbmRhckVuZ2luZSB9IGZyb20gJ0AvaG9va3MvdXNlLWNhbGVuZGFyLWVuZ2luZSdcbmltcG9ydCB0eXBlIHsgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IEdBUF9CRVRXRUVOX0VMRU1FTlRTIH0gZnJvbSAnQC9saWIvY29uc3RhbnRzJ1xuaW1wb3J0IHR5cGUgeyBUcmFuc2xhdGlvbnMsIFRyYW5zbGF0b3JGdW5jdGlvbiB9IGZyb20gJ0AvbGliL3RyYW5zbGF0aW9ucy90eXBlcydcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJWaWV3LCBUaW1lRm9ybWF0IH0gZnJvbSAnQC90eXBlcydcbmltcG9ydCB7IENhbGVuZGFyQ29udGV4dCB9IGZyb20gJy4vY29udGV4dCdcblxuZXhwb3J0IGludGVyZmFjZSBDYWxlbmRhclByb3ZpZGVyUHJvcHMge1xuXHRjaGlsZHJlbjogUmVhY3ROb2RlXG5cdGV2ZW50cz86IENhbGVuZGFyRXZlbnRbXVxuXHRmaXJzdERheU9mV2Vlaz86IG51bWJlciAvLyAwIGZvciBTdW5kYXksIDEgZm9yIE1vbmRheSwgZXRjLlxuXHRpbml0aWFsVmlldz86IENhbGVuZGFyVmlld1xuXHRpbml0aWFsRGF0ZT86IERheWpzXG5cdHJlbmRlckV2ZW50PzogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiBSZWFjdE5vZGVcblx0b25FdmVudENsaWNrPzogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG5cdG9uQ2VsbENsaWNrPzogKGluZm86IENlbGxDbGlja0luZm8pID0+IHZvaWRcblx0b25WaWV3Q2hhbmdlPzogKHZpZXc6IENhbGVuZGFyVmlldykgPT4gdm9pZFxuXHRvbkV2ZW50QWRkPzogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG5cdG9uRXZlbnRVcGRhdGU/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0b25FdmVudERlbGV0ZT86IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuXHRvbkRhdGVDaGFuZ2U/OiAoZGF0ZTogRGF5anMsIHJhbmdlOiBEYXRlUmFuZ2UpID0+IHZvaWRcblx0bG9jYWxlPzogc3RyaW5nXG5cdHRpbWV6b25lPzogc3RyaW5nXG5cdGRpc2FibGVDZWxsQ2xpY2s/OiBib29sZWFuXG5cdGRpc2FibGVFdmVudENsaWNrPzogYm9vbGVhblxuXHRkaXNhYmxlRHJhZ0FuZERyb3A/OiBib29sZWFuXG5cdGRheU1heEV2ZW50czogbnVtYmVyXG5cdGV2ZW50U3BhY2luZz86IG51bWJlclxuXHRzdGlja3lWaWV3SGVhZGVyPzogYm9vbGVhblxuXHR2aWV3SGVhZGVyQ2xhc3NOYW1lPzogc3RyaW5nXG5cdGhlYWRlckNvbXBvbmVudD86IFJlYWN0Tm9kZSAvLyBPcHRpb25hbCBjdXN0b20gaGVhZGVyIGNvbXBvbmVudFxuXHRoZWFkZXJDbGFzc05hbWU/OiBzdHJpbmcgLy8gT3B0aW9uYWwgY3VzdG9tIGhlYWRlciBjbGFzc1xuXHRidXNpbmVzc0hvdXJzPzogQnVzaW5lc3NIb3VycyB8IEJ1c2luZXNzSG91cnNbXVxuXHRyZW5kZXJFdmVudEZvcm0/OiAocHJvcHM6IEV2ZW50Rm9ybVByb3BzKSA9PiBSZWFjdE5vZGVcblx0Ly8gVHJhbnNsYXRpb24gb3B0aW9ucyAtIHByb3ZpZGUgZWl0aGVyIHRyYW5zbGF0aW9ucyBvYmplY3QgT1IgdHJhbnNsYXRvciBmdW5jdGlvblxuXHR0cmFuc2xhdGlvbnM/OiBUcmFuc2xhdGlvbnNcblx0dHJhbnNsYXRvcj86IFRyYW5zbGF0b3JGdW5jdGlvblxuXHR0aW1lRm9ybWF0PzogVGltZUZvcm1hdFxuXHRjbGFzc2VzT3ZlcnJpZGU/OiBDYWxlbmRhckNsYXNzZXNPdmVycmlkZVxuXHRyZW5kZXJDdXJyZW50VGltZUluZGljYXRvcj86IChcblx0XHRwcm9wczogUmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3JQcm9wc1xuXHQpID0+IFJlYWN0Tm9kZVxuXHRoaWRlTm9uQnVzaW5lc3NIb3Vycz86IGJvb2xlYW5cblx0aGlkZGVuRGF5cz86IFNldDxudW1iZXI+XG59XG5cbmV4cG9ydCBjb25zdCBDYWxlbmRhclByb3ZpZGVyOiBSZWFjdC5GQzxDYWxlbmRhclByb3ZpZGVyUHJvcHM+ID0gKHtcblx0Y2hpbGRyZW4sXG5cdGV2ZW50cyA9IFtdLFxuXHRmaXJzdERheU9mV2VlayA9IDAsXG5cdGluaXRpYWxWaWV3ID0gJ21vbnRoJyxcblx0aW5pdGlhbERhdGUsXG5cdHJlbmRlckV2ZW50LFxuXHRvbkV2ZW50Q2xpY2ssXG5cdG9uQ2VsbENsaWNrLFxuXHRvblZpZXdDaGFuZ2UsXG5cdG9uRXZlbnRBZGQsXG5cdG9uRXZlbnRVcGRhdGUsXG5cdG9uRXZlbnREZWxldGUsXG5cdG9uRGF0ZUNoYW5nZSxcblx0bG9jYWxlLFxuXHR0aW1lem9uZSxcblx0ZGlzYWJsZUNlbGxDbGljayxcblx0ZGlzYWJsZUV2ZW50Q2xpY2ssXG5cdGRpc2FibGVEcmFnQW5kRHJvcCxcblx0ZGF5TWF4RXZlbnRzLFxuXHRldmVudFNwYWNpbmcgPSBHQVBfQkVUV0VFTl9FTEVNRU5UUyxcblx0c3RpY2t5Vmlld0hlYWRlciA9IHRydWUsXG5cdHZpZXdIZWFkZXJDbGFzc05hbWUgPSAnJyxcblx0aGVhZGVyQ29tcG9uZW50LFxuXHRoZWFkZXJDbGFzc05hbWUsXG5cdGJ1c2luZXNzSG91cnMsXG5cdHJlbmRlckV2ZW50Rm9ybSxcblx0dHJhbnNsYXRpb25zLFxuXHR0cmFuc2xhdG9yLFxuXHR0aW1lRm9ybWF0ID0gJzEyLWhvdXInLFxuXHRjbGFzc2VzT3ZlcnJpZGUsXG5cdHJlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yLFxuXHRoaWRlTm9uQnVzaW5lc3NIb3VycyA9IGZhbHNlLFxuXHRoaWRkZW5EYXlzLFxufSkgPT4ge1xuXHQvLyBVc2UgdGhlIGNhbGVuZGFyIGVuZ2luZVxuXHRjb25zdCBjYWxlbmRhckVuZ2luZSA9IHVzZUNhbGVuZGFyRW5naW5lKHtcblx0XHRldmVudHMsXG5cdFx0Zmlyc3REYXlPZldlZWssXG5cdFx0aW5pdGlhbFZpZXcsXG5cdFx0aW5pdGlhbERhdGUsXG5cdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRvbkV2ZW50QWRkLFxuXHRcdG9uRXZlbnRVcGRhdGUsXG5cdFx0b25FdmVudERlbGV0ZSxcblx0XHRvbkRhdGVDaGFuZ2UsXG5cdFx0b25WaWV3Q2hhbmdlLFxuXHRcdGxvY2FsZSxcblx0XHR0aW1lem9uZSxcblx0XHR0cmFuc2xhdGlvbnMsXG5cdFx0dHJhbnNsYXRvcixcblx0fSlcblxuXHRjb25zdCBlZGl0RXZlbnQgPSB1c2VDYWxsYmFjayhcblx0XHQoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHtcblx0XHRcdGNhbGVuZGFyRW5naW5lLnNldFNlbGVjdGVkRXZlbnQoZXZlbnQpXG5cdFx0XHRjYWxlbmRhckVuZ2luZS5zZXRJc0V2ZW50Rm9ybU9wZW4odHJ1ZSlcblx0XHR9LFxuXHRcdFtjYWxlbmRhckVuZ2luZV1cblx0KVxuXG5cdC8vIEN1c3RvbSBoYW5kbGVycyB0aGF0IGNhbGwgZXh0ZXJuYWwgY2FsbGJhY2tzXG5cdGNvbnN0IGhhbmRsZUV2ZW50Q2xpY2sgPSB1c2VDYWxsYmFjayhcblx0XHQoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHtcblx0XHRcdGlmIChkaXNhYmxlRXZlbnRDbGljaykge1xuXHRcdFx0XHRyZXR1cm5cblx0XHRcdH1cblx0XHRcdGlmIChvbkV2ZW50Q2xpY2spIHtcblx0XHRcdFx0b25FdmVudENsaWNrKGV2ZW50KVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZWRpdEV2ZW50KGV2ZW50KVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0W2Rpc2FibGVFdmVudENsaWNrLCBvbkV2ZW50Q2xpY2ssIGVkaXRFdmVudF1cblx0KVxuXG5cdGNvbnN0IGhhbmRsZURhdGVDbGljayA9IHVzZUNhbGxiYWNrKFxuXHRcdChpbmZvOiBDZWxsQ2xpY2tJbmZvKSA9PiB7XG5cdFx0XHRpZiAoZGlzYWJsZUNlbGxDbGljaykge1xuXHRcdFx0XHRyZXR1cm5cblx0XHRcdH1cblxuXHRcdFx0aWYgKG9uQ2VsbENsaWNrKSB7XG5cdFx0XHRcdG9uQ2VsbENsaWNrKGluZm8pXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjYWxlbmRhckVuZ2luZS5vcGVuRXZlbnRGb3JtKGluZm8pXG5cdFx0XHR9XG5cdFx0fSxcblx0XHRbb25DZWxsQ2xpY2ssIGRpc2FibGVDZWxsQ2xpY2ssIGNhbGVuZGFyRW5naW5lXVxuXHQpXG5cblx0Ly8gQ3JlYXRlIHRoZSBjb250ZXh0IHZhbHVlXG5cdGNvbnN0IGNvbnRleHRWYWx1ZSA9IHVzZU1lbW8oXG5cdFx0KCkgPT4gKHtcblx0XHRcdGN1cnJlbnREYXRlOiBjYWxlbmRhckVuZ2luZS5jdXJyZW50RGF0ZSxcblx0XHRcdHZpZXc6IGNhbGVuZGFyRW5naW5lLnZpZXcsXG5cdFx0XHRldmVudHM6IGNhbGVuZGFyRW5naW5lLmV2ZW50cyxcblx0XHRcdHJhd0V2ZW50czogY2FsZW5kYXJFbmdpbmUucmF3RXZlbnRzLFxuXHRcdFx0Y3VycmVudExvY2FsZTogY2FsZW5kYXJFbmdpbmUuY3VycmVudExvY2FsZSxcblx0XHRcdGlzRXZlbnRGb3JtT3BlbjogY2FsZW5kYXJFbmdpbmUuaXNFdmVudEZvcm1PcGVuLFxuXHRcdFx0c2VsZWN0ZWRFdmVudDogY2FsZW5kYXJFbmdpbmUuc2VsZWN0ZWRFdmVudCxcblx0XHRcdHNlbGVjdGVkRGF0ZTogY2FsZW5kYXJFbmdpbmUuc2VsZWN0ZWREYXRlLFxuXHRcdFx0Zmlyc3REYXlPZldlZWs6IGNhbGVuZGFyRW5naW5lLmZpcnN0RGF5T2ZXZWVrLFxuXHRcdFx0c2V0Q3VycmVudERhdGU6IGNhbGVuZGFyRW5naW5lLnNldEN1cnJlbnREYXRlLFxuXHRcdFx0c2VsZWN0RGF0ZTogY2FsZW5kYXJFbmdpbmUuc2VsZWN0RGF0ZSxcblx0XHRcdHNldFZpZXc6IGNhbGVuZGFyRW5naW5lLnNldFZpZXcsXG5cdFx0XHRuZXh0UGVyaW9kOiBjYWxlbmRhckVuZ2luZS5uZXh0UGVyaW9kLFxuXHRcdFx0cHJldlBlcmlvZDogY2FsZW5kYXJFbmdpbmUucHJldlBlcmlvZCxcblx0XHRcdHRvZGF5OiBjYWxlbmRhckVuZ2luZS50b2RheSxcblx0XHRcdGFkZEV2ZW50OiBjYWxlbmRhckVuZ2luZS5hZGRFdmVudCxcblx0XHRcdHVwZGF0ZUV2ZW50OiBjYWxlbmRhckVuZ2luZS51cGRhdGVFdmVudCxcblx0XHRcdHVwZGF0ZVJlY3VycmluZ0V2ZW50OiBjYWxlbmRhckVuZ2luZS51cGRhdGVSZWN1cnJpbmdFdmVudCxcblx0XHRcdGRlbGV0ZUV2ZW50OiBjYWxlbmRhckVuZ2luZS5kZWxldGVFdmVudCxcblx0XHRcdGRlbGV0ZVJlY3VycmluZ0V2ZW50OiBjYWxlbmRhckVuZ2luZS5kZWxldGVSZWN1cnJpbmdFdmVudCxcblx0XHRcdG9wZW5FdmVudEZvcm06IGNhbGVuZGFyRW5naW5lLm9wZW5FdmVudEZvcm0sXG5cdFx0XHRjbG9zZUV2ZW50Rm9ybTogY2FsZW5kYXJFbmdpbmUuY2xvc2VFdmVudEZvcm0sXG5cdFx0XHRnZXRFdmVudHNGb3JEYXRlUmFuZ2U6IGNhbGVuZGFyRW5naW5lLmdldEV2ZW50c0ZvckRhdGVSYW5nZSxcblx0XHRcdGZpbmRQYXJlbnRSZWN1cnJpbmdFdmVudDogY2FsZW5kYXJFbmdpbmUuZmluZFBhcmVudFJlY3VycmluZ0V2ZW50LFxuXHRcdFx0cmVuZGVyRXZlbnQsXG5cdFx0XHRvbkV2ZW50Q2xpY2s6IGhhbmRsZUV2ZW50Q2xpY2ssXG5cdFx0XHRvbkNlbGxDbGljazogaGFuZGxlRGF0ZUNsaWNrLFxuXHRcdFx0bG9jYWxlLFxuXHRcdFx0dGltZXpvbmUsXG5cdFx0XHRkaXNhYmxlQ2VsbENsaWNrLFxuXHRcdFx0ZGlzYWJsZUV2ZW50Q2xpY2ssXG5cdFx0XHRkaXNhYmxlRHJhZ0FuZERyb3AsXG5cdFx0XHRkYXlNYXhFdmVudHMsXG5cdFx0XHRldmVudFNwYWNpbmcsXG5cdFx0XHRzdGlja3lWaWV3SGVhZGVyLFxuXHRcdFx0dmlld0hlYWRlckNsYXNzTmFtZSxcblx0XHRcdGhlYWRlckNvbXBvbmVudCxcblx0XHRcdGhlYWRlckNsYXNzTmFtZSxcblx0XHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0XHRyZW5kZXJFdmVudEZvcm0sXG5cdFx0XHR0OiBjYWxlbmRhckVuZ2luZS50LFxuXHRcdFx0dGltZUZvcm1hdCxcblx0XHRcdGNsYXNzZXNPdmVycmlkZSxcblx0XHRcdHJlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yLFxuXHRcdFx0aGlkZU5vbkJ1c2luZXNzSG91cnMsXG5cdFx0XHRoaWRkZW5EYXlzLFxuXHRcdH0pLFxuXHRcdFtcblx0XHRcdGNhbGVuZGFyRW5naW5lLFxuXHRcdFx0cmVuZGVyRXZlbnQsXG5cdFx0XHRoYW5kbGVFdmVudENsaWNrLFxuXHRcdFx0aGFuZGxlRGF0ZUNsaWNrLFxuXHRcdFx0bG9jYWxlLFxuXHRcdFx0dGltZXpvbmUsXG5cdFx0XHRkaXNhYmxlQ2VsbENsaWNrLFxuXHRcdFx0ZGlzYWJsZUV2ZW50Q2xpY2ssXG5cdFx0XHRkaXNhYmxlRHJhZ0FuZERyb3AsXG5cdFx0XHRkYXlNYXhFdmVudHMsXG5cdFx0XHRldmVudFNwYWNpbmcsXG5cdFx0XHRzdGlja3lWaWV3SGVhZGVyLFxuXHRcdFx0dmlld0hlYWRlckNsYXNzTmFtZSxcblx0XHRcdGhlYWRlckNvbXBvbmVudCxcblx0XHRcdGhlYWRlckNsYXNzTmFtZSxcblx0XHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0XHRyZW5kZXJFdmVudEZvcm0sXG5cdFx0XHR0aW1lRm9ybWF0LFxuXHRcdFx0Y2xhc3Nlc092ZXJyaWRlLFxuXHRcdFx0cmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3IsXG5cdFx0XHRoaWRlTm9uQnVzaW5lc3NIb3Vycyxcblx0XHRcdGhpZGRlbkRheXMsXG5cdFx0XVxuXHQpXG5cblx0cmV0dXJuIChcblx0XHQ8Q2FsZW5kYXJDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXtjb250ZXh0VmFsdWV9PlxuXHRcdFx0e2NoaWxkcmVufVxuXHRcdDwvQ2FsZW5kYXJDb250ZXh0LlByb3ZpZGVyPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQW5pbWF0ZWRTZWN0aW9uIH0gZnJvbSAnQC9jb21wb25lbnRzL2FuaW1hdGlvbnMvYW5pbWF0ZWQtc2VjdGlvbidcbmltcG9ydCB7IENhbGVuZGFyRG5kQ29udGV4dCB9IGZyb20gJ0AvY29tcG9uZW50cy9kcmFnLWFuZC1kcm9wL2NhbGVuZGFyLWRuZC1jb250ZXh0J1xuaW1wb3J0IHsgRXZlbnRGb3JtRGlhbG9nIH0gZnJvbSAnQC9jb21wb25lbnRzL2V2ZW50LWZvcm0vZXZlbnQtZm9ybS1kaWFsb2cnXG5pbXBvcnQgeyBIZWFkZXIgfSBmcm9tICdAL2NvbXBvbmVudHMvaGVhZGVyJ1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHsgRGF5VmlldyB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvY29tcG9uZW50cy9kYXktdmlldy9kYXktdmlldydcbmltcG9ydCB7IE1vbnRoVmlldyB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvY29tcG9uZW50cy9tb250aC12aWV3L21vbnRoLXZpZXcnXG5pbXBvcnQgeyBXZWVrVmlldyB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvY29tcG9uZW50cy93ZWVrLXZpZXcvd2Vlay12aWV3J1xuaW1wb3J0IHsgWWVhclZpZXcgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbXBvbmVudHMveWVhci12aWV3L3llYXItdmlldydcbmltcG9ydCB7IENhbGVuZGFyUHJvdmlkZXIgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvcHJvdmlkZXInXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG4vLyBveGxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZHVwbGljYXRlc1xuaW1wb3J0ICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB0eXBlIHsgV2Vla0RheXMgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgdHlwZSB7XG5cdElsYW15Q2FsZW5kYXJQcm9wRXZlbnQsXG5cdElsYW15Q2FsZW5kYXJQcm9wcyxcbn0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci90eXBlcydcbmltcG9ydCB7XG5cdERBWV9NQVhfRVZFTlRTX0RFRkFVTFQsXG5cdEdBUF9CRVRXRUVOX0VMRU1FTlRTLFxuXHRXRUVLX0RBWVNfTlVNQkVSX01BUCxcbn0gZnJvbSAnQC9saWIvY29uc3RhbnRzJ1xuaW1wb3J0IHsgbm9ybWFsaXplRXZlbnRzLCBzYWZlRGF0ZSB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5jb25zdCBDYWxlbmRhckNvbnRlbnQ6IFJlYWN0LkZDID0gKCkgPT4ge1xuXHRjb25zdCB7IHZpZXcsIGRheU1heEV2ZW50cyB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXG5cdGNvbnN0IHZpZXdNYXAgPSB7XG5cdFx0bW9udGg6IDxNb250aFZpZXcgZGF5TWF4RXZlbnRzPXtkYXlNYXhFdmVudHN9IGtleT1cIm1vbnRoXCIgLz4sXG5cdFx0d2VlazogPFdlZWtWaWV3IGtleT1cIndlZWtcIiAvPixcblx0XHRkYXk6IDxEYXlWaWV3IGtleT1cImRheVwiIC8+LFxuXHRcdHllYXI6IDxZZWFyVmlldyBrZXk9XCJ5ZWFyXCIgLz4sXG5cdH1cblxuXHRyZXR1cm4gKFxuXHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCB3LWZ1bGwgaC1mdWxsXCIgZGF0YS10ZXN0aWQ9XCJpbGFteS1jYWxlbmRhclwiPlxuXHRcdFx0PEhlYWRlciBjbGFzc05hbWU9XCJwLTFcIiAvPlxuXHRcdFx0ey8qIENhbGVuZGFyIEJvZHkgd2l0aCBBbmltYXRlUHJlc2VuY2UgZm9yIHZpZXcgdHJhbnNpdGlvbnMgKi99XG5cdFx0XHQ8Q2FsZW5kYXJEbmRDb250ZXh0PlxuXHRcdFx0XHQ8QW5pbWF0ZWRTZWN0aW9uXG5cdFx0XHRcdFx0Y2xhc3NOYW1lPVwidy1mdWxsIGgtW2NhbGMoMTAwJS0zLjVyZW0pXVwiXG5cdFx0XHRcdFx0ZGlyZWN0aW9uPVwiaG9yaXpvbnRhbFwiXG5cdFx0XHRcdFx0dHJhbnNpdGlvbktleT17dmlld31cblx0XHRcdFx0PlxuXHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiYm9yZGVyIGgtZnVsbCB3LWZ1bGxcIiBkYXRhLXRlc3RpZD1cImNhbGVuZGFyLWJvZHlcIj5cblx0XHRcdFx0XHRcdHt2aWV3TWFwW3ZpZXddfVxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8L0FuaW1hdGVkU2VjdGlvbj5cblx0XHRcdDwvQ2FsZW5kYXJEbmRDb250ZXh0PlxuXHRcdFx0PEV2ZW50Rm9ybURpYWxvZyAvPlxuXHRcdDwvZGl2PlxuXHQpXG59XG5cbmNvbnN0IHRvSGlkZGVuRGF5c1NldCA9IChoaWRkZW5EYXlzPzogV2Vla0RheXNbXSk6IFNldDxudW1iZXI+IHwgdW5kZWZpbmVkID0+IHtcblx0aWYgKCFoaWRkZW5EYXlzIHx8IGhpZGRlbkRheXMubGVuZ3RoID09PSAwKSByZXR1cm4gdW5kZWZpbmVkXG5cdHJldHVybiBuZXcgU2V0KGhpZGRlbkRheXMubWFwKChkYXkpID0+IFdFRUtfREFZU19OVU1CRVJfTUFQW2RheV0pKVxufVxuXG5leHBvcnQgY29uc3QgSWxhbXlDYWxlbmRhcjogUmVhY3QuRkM8SWxhbXlDYWxlbmRhclByb3BzPiA9ICh7XG5cdGV2ZW50cyxcblx0Zmlyc3REYXlPZldlZWsgPSAnc3VuZGF5Jyxcblx0aW5pdGlhbFZpZXcgPSAnbW9udGgnLFxuXHRpbml0aWFsRGF0ZSxcblx0ZGF5TWF4RXZlbnRzID0gREFZX01BWF9FVkVOVFNfREVGQVVMVCxcblx0ZXZlbnRTcGFjaW5nID0gR0FQX0JFVFdFRU5fRUxFTUVOVFMsXG5cdHN0aWNreVZpZXdIZWFkZXIgPSB0cnVlLFxuXHR2aWV3SGVhZGVyQ2xhc3NOYW1lID0gJycsXG5cdHRpbWVGb3JtYXQgPSAnMTItaG91cicsXG5cdGhpZGVOb25CdXNpbmVzc0hvdXJzID0gZmFsc2UsXG5cdGhpZGRlbkRheXMsXG5cdC4uLnByb3BzXG59KSA9PiB7XG5cdHJldHVybiAoXG5cdFx0PENhbGVuZGFyUHJvdmlkZXJcblx0XHRcdGRheU1heEV2ZW50cz17ZGF5TWF4RXZlbnRzfVxuXHRcdFx0ZXZlbnRTcGFjaW5nPXtldmVudFNwYWNpbmd9XG5cdFx0XHRldmVudHM9e25vcm1hbGl6ZUV2ZW50czxJbGFteUNhbGVuZGFyUHJvcEV2ZW50LCBDYWxlbmRhckV2ZW50PihldmVudHMpfVxuXHRcdFx0Zmlyc3REYXlPZldlZWs9e1dFRUtfREFZU19OVU1CRVJfTUFQW2ZpcnN0RGF5T2ZXZWVrXX1cblx0XHRcdGhpZGRlbkRheXM9e3RvSGlkZGVuRGF5c1NldChoaWRkZW5EYXlzKX1cblx0XHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzPXtoaWRlTm9uQnVzaW5lc3NIb3Vyc31cblx0XHRcdGluaXRpYWxEYXRlPXtzYWZlRGF0ZShpbml0aWFsRGF0ZSl9XG5cdFx0XHRpbml0aWFsVmlldz17aW5pdGlhbFZpZXd9XG5cdFx0XHRzdGlja3lWaWV3SGVhZGVyPXtzdGlja3lWaWV3SGVhZGVyfVxuXHRcdFx0dGltZUZvcm1hdD17dGltZUZvcm1hdH1cblx0XHRcdHZpZXdIZWFkZXJDbGFzc05hbWU9e3ZpZXdIZWFkZXJDbGFzc05hbWV9XG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0PlxuXHRcdFx0PENhbGVuZGFyQ29udGVudCAvPlxuXHRcdDwvQ2FsZW5kYXJQcm92aWRlcj5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEhvcml6b250YWxHcmlkIH0gZnJvbSAnQC9jb21wb25lbnRzL2hvcml6b250YWwtZ3JpZC9ob3Jpem9udGFsLWdyaWQnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSB7IERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5cbmludGVyZmFjZSBSZXNvdXJjZUV2ZW50R3JpZFByb3BzIHtcblx0LyoqXG5cdCAqIEFycmF5IG9mIGRheXMgdG8gZGlzcGxheSBpbiB0aGUgZ3JpZFxuXHQgKi9cblx0ZGF5czogRGF5anNbXSB8IERheWpzW11bXVxuXHQvKiogVGhlIHR5cGUgb2YgZ3JpZCB0byBkaXNwbGF5IC0gJ2RheScgZm9yIGRheSB2aWV3LCAnaG91cicgZm9yIHdlZWsgdmlld1xuXHQgKiAoYWZmZWN0cyBldmVudCBwb3NpdGlvbmluZyBsb2dpYylcblx0ICovXG5cdGdyaWRUeXBlPzogJ2RheScgfCAnaG91cidcblx0LyoqXG5cdCAqIENoaWxkcmVuIHdpbGwgYmUgcmVuZGVyZWQgYXMgaGVhZGVycyBhYm92ZSB0aGUgZ3JpZFxuXHQgKiAoZS5nLiwgZm9yIGRheSBuYW1lcyBpbiBtb250aCB2aWV3KVxuXHQgKi9cblx0Y2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGVcblx0Y2xhc3Nlcz86IHsgaGVhZGVyPzogc3RyaW5nOyBib2R5Pzogc3RyaW5nOyBzY3JvbGw/OiBzdHJpbmc7IGNlbGw/OiBzdHJpbmcgfVxufVxuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VFdmVudEdyaWQ6IFJlYWN0LkZDPFJlc291cmNlRXZlbnRHcmlkUHJvcHM+ID0gKHtcblx0ZGF5cyxcblx0Z3JpZFR5cGUgPSAnZGF5Jyxcblx0Y2hpbGRyZW4sXG5cdGNsYXNzZXMsXG59KSA9PiB7XG5cdGNvbnN0IHsgZ2V0VmlzaWJsZVJlc291cmNlcyB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXG5cdGNvbnN0IHZpc2libGVSZXNvdXJjZXMgPSBnZXRWaXNpYmxlUmVzb3VyY2VzKClcblxuXHRjb25zdCBjb2x1bW5zID0gZGF5cy5tYXAoKGRheSkgPT4ge1xuXHRcdGNvbnN0IGlzQXJyYXkgPSBBcnJheS5pc0FycmF5KGRheSlcblx0XHRyZXR1cm4ge1xuXHRcdFx0aWQ6IGBjb2wtJHtpc0FycmF5ID8gZGF5WzBdPy5mb3JtYXQoJ1lZWVktTU0tREQnKSA6IGRheS50b0lTT1N0cmluZygpfWAsXG5cdFx0XHRkYXk6IGlzQXJyYXkgPyB1bmRlZmluZWQgOiBkYXksXG5cdFx0XHRkYXlzOiBpc0FycmF5ID8gZGF5IDogdW5kZWZpbmVkLFxuXHRcdFx0Y2xhc3NOYW1lOiBjbGFzc2VzPy5jZWxsLFxuXHRcdFx0Z3JpZFR5cGUsXG5cdFx0fVxuXHR9KVxuXG5cdGNvbnN0IHJvd3MgPSB2aXNpYmxlUmVzb3VyY2VzLm1hcCgocmVzb3VyY2UpID0+ICh7XG5cdFx0aWQ6IHJlc291cmNlLmlkLFxuXHRcdHRpdGxlOiByZXNvdXJjZS50aXRsZSxcblx0XHRyZXNvdXJjZTogcmVzb3VyY2UsXG5cdFx0Y29sdW1ucyxcblx0fSkpXG5cblx0cmV0dXJuIChcblx0XHQ8SG9yaXpvbnRhbEdyaWRcblx0XHRcdGNsYXNzZXM9e2NsYXNzZXN9XG5cdFx0XHRkYXlOdW1iZXJIZWlnaHQ9ezB9XG5cdFx0XHRncmlkVHlwZT17Z3JpZFR5cGV9XG5cdFx0XHRyb3dzPXtyb3dzfVxuXHRcdD5cblx0XHRcdHtjaGlsZHJlbn1cblx0XHQ8L0hvcml6b250YWxHcmlkPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQW5pbWF0ZWRTZWN0aW9uIH0gZnJvbSAnQC9jb21wb25lbnRzL2FuaW1hdGlvbnMvYW5pbWF0ZWQtc2VjdGlvbidcbmltcG9ydCB0eXBlIHsgQnVzaW5lc3NIb3VycyB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB7IGdldFZpZXdIb3VycyB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvdXRpbHMvdmlldy1ob3VycydcbmltcG9ydCB7IFJlc291cmNlRXZlbnRHcmlkIH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL3Jlc291cmNlLWV2ZW50LWdyaWQnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VEYXlIb3Jpem9udGFsOiBSZWFjdC5GQyA9ICgpID0+IHtcblx0Y29uc3Qge1xuXHRcdGN1cnJlbnREYXRlLFxuXHRcdHQsXG5cdFx0dGltZUZvcm1hdCxcblx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzLFxuXHRcdGdldFZpc2libGVSZXNvdXJjZXMsXG5cdH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cblx0Y29uc3QgcmVzb3VyY2VzID0gZ2V0VmlzaWJsZVJlc291cmNlcygpXG5cblx0Ly8gR2VuZXJhdGUgdGltZSBjb2x1bW5zIChob3VybHkgc2xvdHMpXG5cdGNvbnN0IGRheUhvdXJzID0gZ2V0Vmlld0hvdXJzKHtcblx0XHRyZWZlcmVuY2VEYXRlOiBjdXJyZW50RGF0ZSxcblx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzLFxuXHRcdGFsbERhdGVzOiBbY3VycmVudERhdGVdLFxuXHRcdHJlc291cmNlQnVzaW5lc3NIb3VyczogcmVzb3VyY2VzXG5cdFx0XHQubWFwKChyKSA9PiByLmJ1c2luZXNzSG91cnMpXG5cdFx0XHQuZmlsdGVyKEJvb2xlYW4pIGFzIChCdXNpbmVzc0hvdXJzIHwgQnVzaW5lc3NIb3Vyc1tdKVtdLFxuXHR9KVxuXG5cdHJldHVybiAoXG5cdFx0PFJlc291cmNlRXZlbnRHcmlkXG5cdFx0XHRjbGFzc2VzPXt7XG5cdFx0XHRcdGhlYWRlcjogJ21pbi13LWZ1bGwnLFxuXHRcdFx0XHRib2R5OiAnbWluLXctZnVsbCcsXG5cdFx0XHRcdGNlbGw6ICdtaW4tdy0yMCBmbGV4LTEnLFxuXHRcdFx0fX1cblx0XHRcdGRheXM9e2RheUhvdXJzfVxuXHRcdFx0Z3JpZFR5cGU9XCJob3VyXCJcblx0XHQ+XG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInctMjAgc206dy00MCBib3JkZXItYiBib3JkZXItciBzaHJpbmstMCBmbGV4IGp1c3RpZnktY2VudGVyIGl0ZW1zLWNlbnRlciBzdGlja3kgdG9wLTAgbGVmdC0wIGJnLWJhY2tncm91bmQgei0yMFwiPlxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQtc21cIj57dCgncmVzb3VyY2VzJyl9PC9kaXY+XG5cdFx0XHQ8L2Rpdj5cblxuXHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4LTEgZmxleCBmbGV4LWNvbFwiPlxuXHRcdFx0XHR7LyogVGltZSBoZWFkZXIgcm93ICovfVxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggaC0xMlwiPlxuXHRcdFx0XHRcdHtkYXlIb3Vycy5tYXAoKGNvbCwgaW5kZXgpID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IGlzTm93SG91ciA9IGNvbC5pc1NhbWUoZGF5anMoKSwgJ2hvdXInKVxuXHRcdFx0XHRcdFx0Y29uc3Qga2V5ID0gYHJlc291cmNlLWRheS1oZWFkZXItJHtjb2wudG9JU09TdHJpbmcoKX1gXG5cblx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdDxBbmltYXRlZFNlY3Rpb25cblx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0XHRcdFx0J21pbi13LTIwIGZsZXgtMSBib3JkZXItYiBib3JkZXItciBsYXN0OmJvcmRlci1yLTAgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC14cyBzaHJpbmstMCcsXG5cdFx0XHRcdFx0XHRcdFx0XHRpc05vd0hvdXIgJiYgJ2JnLWJsdWUtNTAgdGV4dC1ibHVlLTYwMCBmb250LW1lZGl1bSdcblx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPXtgcmVzb3VyY2UtZGF5LXRpbWUtbGFiZWwtJHtjb2wuZm9ybWF0KCdISCcpfWB9XG5cdFx0XHRcdFx0XHRcdFx0ZGVsYXk9e2luZGV4ICogMC4wNX1cblx0XHRcdFx0XHRcdFx0XHRrZXk9e2Ake2tleX0tYW5pbWF0ZWRgfVxuXHRcdFx0XHRcdFx0XHRcdHRyYW5zaXRpb25LZXk9e2Ake2tleX0tbW90aW9uYH1cblx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdHtjb2wuZm9ybWF0KHRpbWVGb3JtYXQgPT09ICcxMi1ob3VyJyA/ICdoIEEnIDogJ0gnKX1cblx0XHRcdFx0XHRcdFx0PC9BbmltYXRlZFNlY3Rpb24+XG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0fSl9XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0PC9kaXY+XG5cdFx0PC9SZXNvdXJjZUV2ZW50R3JpZD5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgeyBBbGxEYXlDZWxsIH0gZnJvbSAnQC9jb21wb25lbnRzL2FsbC1kYXktcm93L2FsbC1kYXktY2VsbCdcbmltcG9ydCB7IEFsbERheVJvdyB9IGZyb20gJ0AvY29tcG9uZW50cy9hbGwtZGF5LXJvdy9hbGwtZGF5LXJvdydcbmltcG9ydCB7IFJlc291cmNlQ2VsbCB9IGZyb20gJ0AvY29tcG9uZW50cy9yZXNvdXJjZS1jZWxsJ1xuaW1wb3J0IHR5cGUgeyBCdXNpbmVzc0hvdXJzIH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHsgVmVydGljYWxHcmlkIH0gZnJvbSAnQC9jb21wb25lbnRzL3ZlcnRpY2FsLWdyaWQvdmVydGljYWwtZ3JpZCdcbmltcG9ydCB7IGdldFZpZXdIb3VycyB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvdXRpbHMvdmlldy1ob3VycydcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB0eXBlIHsgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcblxuZXhwb3J0IGNvbnN0IFJlc291cmNlRGF5VmVydGljYWw6IFJlYWN0LkZDID0gKCkgPT4ge1xuXHRjb25zdCB7XG5cdFx0Y3VycmVudERhdGUsXG5cdFx0Z2V0VmlzaWJsZVJlc291cmNlcyxcblx0XHR0aW1lRm9ybWF0LFxuXHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0aGlkZU5vbkJ1c2luZXNzSG91cnMsXG5cdH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cblx0Y29uc3QgcmVzb3VyY2VzID0gZ2V0VmlzaWJsZVJlc291cmNlcygpXG5cdGNvbnN0IGhvdXJzID0gZ2V0Vmlld0hvdXJzKHtcblx0XHRyZWZlcmVuY2VEYXRlOiBjdXJyZW50RGF0ZSxcblx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzLFxuXHRcdGFsbERhdGVzOiBbY3VycmVudERhdGVdLFxuXHRcdHJlc291cmNlQnVzaW5lc3NIb3VyczogcmVzb3VyY2VzXG5cdFx0XHQubWFwKChyKSA9PiByLmJ1c2luZXNzSG91cnMpXG5cdFx0XHQuZmlsdGVyKEJvb2xlYW4pIGFzIChCdXNpbmVzc0hvdXJzIHwgQnVzaW5lc3NIb3Vyc1tdKVtdLFxuXHR9KVxuXG5cdGNvbnN0IGZpcnN0Q29sID0ge1xuXHRcdGlkOiAndGltZS1jb2wnLFxuXHRcdGRheTogdW5kZWZpbmVkLFxuXHRcdGRheXM6IGhvdXJzLFxuXHRcdGNsYXNzTmFtZTpcblx0XHRcdCdzaHJpbmstMCB3LTE2IG1pbi13LTE2IG1heC13LTE2IHN0aWNreSBsZWZ0LTAgYmctYmFja2dyb3VuZCB6LTIwJyxcblx0XHRncmlkVHlwZTogJ2hvdXInIGFzIGNvbnN0LFxuXHRcdG5vRXZlbnRzOiB0cnVlLFxuXHRcdHJlbmRlckNlbGw6IChkYXRlOiBEYXlqcykgPT4gKFxuXHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LW11dGVkLWZvcmVncm91bmQgcC0yIHRleHQtcmlnaHQgdGV4dC1bMTBweF0gc206dGV4dC14cyBmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlclwiPlxuXHRcdFx0XHR7ZGF0ZS5mb3JtYXQodGltZUZvcm1hdCA9PT0gJzEyLWhvdXInID8gJ2ggQScgOiAnSCcpfVxuXHRcdFx0PC9kaXY+XG5cdFx0KSxcblx0fVxuXG5cdGNvbnN0IGNvbHVtbnMgPSByZXNvdXJjZXMubWFwKChyZXNvdXJjZSkgPT4gKHtcblx0XHRpZDogYGRheS1jb2wtJHtjdXJyZW50RGF0ZS5mb3JtYXQoJ1lZWVktTU0tREQnKX0tcmVzb3VyY2UtJHtyZXNvdXJjZS5pZH1gLFxuXHRcdHJlc291cmNlSWQ6IHJlc291cmNlLmlkLFxuXHRcdHJlc291cmNlLFxuXHRcdGRheXM6IGhvdXJzLFxuXHRcdGRheTogY3VycmVudERhdGUsXG5cdFx0Z3JpZFR5cGU6ICdob3VyJyBhcyBjb25zdCxcblx0fSkpXG5cblx0cmV0dXJuIChcblx0XHQ8VmVydGljYWxHcmlkXG5cdFx0XHRhbGxEYXlSb3c9e1xuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggdy1mdWxsXCI+XG5cdFx0XHRcdFx0PEFsbERheUNlbGwgLz5cblx0XHRcdFx0XHR7cmVzb3VyY2VzLm1hcCgocmVzb3VyY2UpID0+IChcblx0XHRcdFx0XHRcdDxBbGxEYXlSb3dcblx0XHRcdFx0XHRcdFx0Y2xhc3Nlcz17eyBjZWxsOiAnbWluLXctNTAnIH19XG5cdFx0XHRcdFx0XHRcdGRheXM9e1tjdXJyZW50RGF0ZV19XG5cdFx0XHRcdFx0XHRcdGtleT17YHJlc291cmNlLWFsbGRheS1yb3ctJHtyZXNvdXJjZS5pZH1gfVxuXHRcdFx0XHRcdFx0XHRyZXNvdXJjZT17cmVzb3VyY2V9XG5cdFx0XHRcdFx0XHRcdHNob3dTcGFjZXI9e2ZhbHNlfVxuXHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHQpKX1cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHR9XG5cdFx0XHRjZWxsU2xvdHM9e1swLCAxNSwgMzAsIDQ1XX1cblx0XHRcdGNsYXNzZXM9e3sgYm9keTogJ3ctZnVsbCcsIGhlYWRlcjogJ3ctZnVsbCcgfX1cblx0XHRcdGNvbHVtbnM9e1tmaXJzdENvbCwgLi4uY29sdW1uc119XG5cdFx0XHRkYXRhLXRlc3RpZD1cInJlc291cmNlLWRheVwiXG5cdFx0XHRncmlkVHlwZT1cImhvdXJcIlxuXHRcdD5cblx0XHRcdHsvKiBIZWFkZXIgKi99XG5cdFx0XHQ8ZGl2XG5cdFx0XHRcdGNsYXNzTmFtZT17J2ZsZXggYm9yZGVyLWIgaC0xMiBmbGV4LTEnfVxuXHRcdFx0XHRkYXRhLXRlc3RpZD1cInJlc291cmNlLW1vbnRoLWhlYWRlclwiXG5cdFx0XHQ+XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwic2hyaW5rLTAgYm9yZGVyLXIgdy0xNiBzdGlja3kgdG9wLTAgbGVmdC0wIGJnLWJhY2tncm91bmQgei0yMFwiIC8+XG5cdFx0XHRcdHtyZXNvdXJjZXMubWFwKChyZXNvdXJjZSkgPT4gKFxuXHRcdFx0XHRcdDxSZXNvdXJjZUNlbGxcblx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cIm1pbi13LTUwIGZsZXgtMVwiXG5cdFx0XHRcdFx0XHRrZXk9e2ByZXNvdXJjZS1jZWxsLSR7cmVzb3VyY2UuaWR9YH1cblx0XHRcdFx0XHRcdHJlc291cmNlPXtyZXNvdXJjZX1cblx0XHRcdFx0XHQvPlxuXHRcdFx0XHQpKX1cblx0XHRcdDwvZGl2PlxuXHRcdDwvVmVydGljYWxHcmlkPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHsgUmVzb3VyY2VEYXlIb3Jpem9udGFsIH0gZnJvbSAnLi9yZXNvdXJjZS1kYXktaG9yaXpvbnRhbCdcbmltcG9ydCB7IFJlc291cmNlRGF5VmVydGljYWwgfSBmcm9tICcuL3Jlc291cmNlLWRheS12ZXJ0aWNhbCdcblxuZXhwb3J0IGNvbnN0IFJlc291cmNlRGF5VmlldzogUmVhY3QuRkMgPSAoKSA9PiB7XG5cdGNvbnN0IHsgb3JpZW50YXRpb24gfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblxuXHRpZiAob3JpZW50YXRpb24gPT09ICd2ZXJ0aWNhbCcpIHtcblx0XHRyZXR1cm4gPFJlc291cmNlRGF5VmVydGljYWwgLz5cblx0fVxuXG5cdHJldHVybiA8UmVzb3VyY2VEYXlIb3Jpem9udGFsIC8+XG59XG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQW5pbWF0ZWRTZWN0aW9uIH0gZnJvbSAnQC9jb21wb25lbnRzL2FuaW1hdGlvbnMvYW5pbWF0ZWQtc2VjdGlvbidcbmltcG9ydCB7IFJlc291cmNlRXZlbnRHcmlkIH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL3Jlc291cmNlLWV2ZW50LWdyaWQnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSB7IERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBnZXRNb250aERheXMgfSBmcm9tICdAL2xpYi91dGlscy9kYXRlLXV0aWxzJ1xuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VNb250aEhvcml6b250YWw6IFJlYWN0LkZDID0gKCkgPT4ge1xuXHRjb25zdCB7IGN1cnJlbnREYXRlLCB0IH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cblx0Ly8gR2VuZXJhdGUgY2FsZW5kYXIgZ3JpZCAtIGRheXMgb2YgdGhlIG1vbnRoXG5cdGNvbnN0IG1vbnRoRGF5cyA9IHVzZU1lbW88RGF5anNbXT4oKCkgPT4ge1xuXHRcdHJldHVybiBnZXRNb250aERheXMoY3VycmVudERhdGUpXG5cdH0sIFtjdXJyZW50RGF0ZV0pXG5cblx0cmV0dXJuIChcblx0XHQ8UmVzb3VyY2VFdmVudEdyaWQgZGF5cz17bW9udGhEYXlzfT5cblx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidy0yMCBzbTp3LTQwIGJvcmRlci1iIGJvcmRlci1yIHNocmluay0wIGZsZXgganVzdGlmeS1jZW50ZXIgaXRlbXMtY2VudGVyIHN0aWNreSB0b3AtMCBsZWZ0LTAgYmctYmFja2dyb3VuZCB6LTIwXCI+XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbVwiPnt0KCdyZXNvdXJjZXMnKX08L2Rpdj5cblx0XHRcdDwvZGl2PlxuXG5cdFx0XHR7bW9udGhEYXlzLm1hcCgoZGF5LCBpbmRleCkgPT4ge1xuXHRcdFx0XHRjb25zdCBrZXkgPSBgcmVzb3VyY2UtbW9udGgtaGVhZGVyLSR7ZGF5LnRvSVNPU3RyaW5nKCl9YFxuXG5cdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0PEFuaW1hdGVkU2VjdGlvblxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwidy0yMCBib3JkZXItYiBib3JkZXItciBzaHJpbmstMCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBmbGV4LWNvbFwiXG5cdFx0XHRcdFx0XHRkZWxheT17aW5kZXggKiAwLjA1fVxuXHRcdFx0XHRcdFx0a2V5PXtgJHtrZXl9LWFuaW1hdGVkYH1cblx0XHRcdFx0XHRcdHRyYW5zaXRpb25LZXk9e2Ake2tleX0tbW90aW9uYH1cblx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQteHMgZm9udC1tZWRpdW1cIj57ZGF5LmZvcm1hdCgnRCcpfTwvZGl2PlxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtbXV0ZWQtZm9yZWdyb3VuZFwiPlxuXHRcdFx0XHRcdFx0XHR7ZGF5LmZvcm1hdCgnZGRkJyl9XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8L0FuaW1hdGVkU2VjdGlvbj5cblx0XHRcdFx0KVxuXHRcdFx0fSl9XG5cdFx0PC9SZXNvdXJjZUV2ZW50R3JpZD5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IFJlc291cmNlQ2VsbCB9IGZyb20gJ0AvY29tcG9uZW50cy9yZXNvdXJjZS1jZWxsJ1xuaW1wb3J0IHsgVmVydGljYWxHcmlkIH0gZnJvbSAnQC9jb21wb25lbnRzL3ZlcnRpY2FsLWdyaWQvdmVydGljYWwtZ3JpZCdcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB0eXBlIHsgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcblxuZXhwb3J0IGNvbnN0IFJlc291cmNlTW9udGhWZXJ0aWNhbDogUmVhY3QuRkMgPSAoKSA9PiB7XG5cdGNvbnN0IHsgY3VycmVudERhdGUsIGdldFZpc2libGVSZXNvdXJjZXMgfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblxuXHRjb25zdCByZXNvdXJjZXMgPSBnZXRWaXNpYmxlUmVzb3VyY2VzKClcblx0Y29uc3Qgc3RhcnRPZk1vbnRoID0gY3VycmVudERhdGUuc3RhcnRPZignbW9udGgnKVxuXHRjb25zdCBkYXlzSW5Nb250aCA9IEFycmF5LmZyb20oXG5cdFx0eyBsZW5ndGg6IGN1cnJlbnREYXRlLmRheXNJbk1vbnRoKCkgfSxcblx0XHQoXywgaSkgPT4gc3RhcnRPZk1vbnRoLmFkZChpLCAnZGF5Jylcblx0KVxuXG5cdGNvbnN0IGZpcnN0Q29sID0ge1xuXHRcdGlkOiAnZGF0ZS1jb2wnLFxuXHRcdGRheXM6IGRheXNJbk1vbnRoLFxuXHRcdGRheTogdW5kZWZpbmVkLFxuXHRcdGNsYXNzTmFtZTpcblx0XHRcdCdzaHJpbmstMCB3LTE2IG1pbi13LTE2IG1heC13LTE2IHN0aWNreSBsZWZ0LTAgYmctYmFja2dyb3VuZCB6LTIwJyxcblx0XHRncmlkVHlwZTogJ2RheScgYXMgY29uc3QsXG5cdFx0bm9FdmVudHM6IHRydWUsXG5cdFx0cmVuZGVyQ2VsbDogKGRhdGU6IERheWpzKSA9PiAoXG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQtbXV0ZWQtZm9yZWdyb3VuZCBwLTIgdGV4dC1yaWdodCB0ZXh0LVsxMHB4XSBzbTp0ZXh0LXhzIGZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyXCI+XG5cdFx0XHRcdDxzcGFuPntkYXRlLmZvcm1hdCgnRCcpfTwvc3Bhbj5cblx0XHRcdFx0PHNwYW4+e2RhdGUuZm9ybWF0KCdkZGQnKX08L3NwYW4+XG5cdFx0XHQ8L2Rpdj5cblx0XHQpLFxuXHR9XG5cblx0Y29uc3QgY29sdW1ucyA9IHJlc291cmNlcy5tYXAoKHJlc291cmNlKSA9PiAoe1xuXHRcdGlkOiBgbW9udGgtY29sLXJlc291cmNlLSR7cmVzb3VyY2UuaWR9YCxcblx0XHRkYXk6IHVuZGVmaW5lZCxcblx0XHRyZXNvdXJjZUlkOiByZXNvdXJjZS5pZCxcblx0XHRkYXlzOiBkYXlzSW5Nb250aCxcblx0XHRncmlkVHlwZTogJ2RheScgYXMgY29uc3QsXG5cdH0pKVxuXG5cdHJldHVybiAoXG5cdFx0PFZlcnRpY2FsR3JpZFxuXHRcdFx0Y2xhc3Nlcz17eyBoZWFkZXI6ICd3LWZ1bGwnLCBib2R5OiAndy1mdWxsJyB9fVxuXHRcdFx0Y29sdW1ucz17W2ZpcnN0Q29sLCAuLi5jb2x1bW5zXX1cblx0XHRcdGRhdGEtdGVzdGlkPVwicmVzb3VyY2UtbW9udGgtdmVydGljYWwtZ3JpZFwiXG5cdFx0PlxuXHRcdFx0ey8qIEhlYWRlciAqL31cblx0XHRcdDxkaXZcblx0XHRcdFx0Y2xhc3NOYW1lPXsnZmxleCBib3JkZXItYiBoLTEyIGZsZXgtMSd9XG5cdFx0XHRcdGRhdGEtdGVzdGlkPVwicmVzb3VyY2UtbW9udGgtaGVhZGVyXCJcblx0XHRcdD5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJzaHJpbmstMCBib3JkZXItciB3LTE2IHN0aWNreSB0b3AtMCBsZWZ0LTAgYmctYmFja2dyb3VuZCB6LTIwXCIgLz5cblx0XHRcdFx0e3Jlc291cmNlcy5tYXAoKHJlc291cmNlKSA9PiAoXG5cdFx0XHRcdFx0PFJlc291cmNlQ2VsbFxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwibWluLXctNTAgZmxleC0xXCJcblx0XHRcdFx0XHRcdGtleT17YHJlc291cmNlLWNlbGwtJHtyZXNvdXJjZS5pZH1gfVxuXHRcdFx0XHRcdFx0cmVzb3VyY2U9e3Jlc291cmNlfVxuXHRcdFx0XHRcdC8+XG5cdFx0XHRcdCkpfVxuXHRcdFx0PC9kaXY+XG5cdFx0PC9WZXJ0aWNhbEdyaWQ+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgeyBSZXNvdXJjZU1vbnRoSG9yaXpvbnRhbCB9IGZyb20gJy4vcmVzb3VyY2UtbW9udGgtaG9yaXpvbnRhbCdcbmltcG9ydCB7IFJlc291cmNlTW9udGhWZXJ0aWNhbCB9IGZyb20gJy4vcmVzb3VyY2UtbW9udGgtdmVydGljYWwnXG5cbmV4cG9ydCBjb25zdCBSZXNvdXJjZU1vbnRoVmlldzogUmVhY3QuRkMgPSAoKSA9PiB7XG5cdGNvbnN0IHsgb3JpZW50YXRpb24gfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblxuXHRpZiAob3JpZW50YXRpb24gPT09ICd2ZXJ0aWNhbCcpIHtcblx0XHRyZXR1cm4gPFJlc291cmNlTW9udGhWZXJ0aWNhbCAvPlxuXHR9XG5cblx0cmV0dXJuIDxSZXNvdXJjZU1vbnRoSG9yaXpvbnRhbCAvPlxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEFuaW1hdGVkU2VjdGlvbiB9IGZyb20gJ0AvY29tcG9uZW50cy9hbmltYXRpb25zL2FuaW1hdGVkLXNlY3Rpb24nXG5pbXBvcnQgdHlwZSB7IEJ1c2luZXNzSG91cnMgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgeyBnZXRWaWV3SG91cnMgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL3V0aWxzL3ZpZXctaG91cnMnXG5pbXBvcnQgeyBSZXNvdXJjZUV2ZW50R3JpZCB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy9yZXNvdXJjZS1ldmVudC1ncmlkJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IGdldFdlZWtEYXlzIH0gZnJvbSAnQC9saWIvdXRpbHMvZGF0ZS11dGlscydcblxuZXhwb3J0IGNvbnN0IFJlc291cmNlV2Vla0hvcml6b250YWw6IFJlYWN0LkZDID0gKCkgPT4ge1xuXHRjb25zdCB7XG5cdFx0Y3VycmVudERhdGUsXG5cdFx0Zmlyc3REYXlPZldlZWssXG5cdFx0dCxcblx0XHR0aW1lRm9ybWF0LFxuXHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0aGlkZU5vbkJ1c2luZXNzSG91cnMsXG5cdFx0Z2V0VmlzaWJsZVJlc291cmNlcyxcblx0fSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblxuXHRjb25zdCByZXNvdXJjZXMgPSBnZXRWaXNpYmxlUmVzb3VyY2VzKClcblxuXHQvLyBHZW5lcmF0ZSB3ZWVrIGRheXNcblx0Y29uc3Qgd2Vla0RheXMgPSB1c2VNZW1vKFxuXHRcdCgpID0+IGdldFdlZWtEYXlzKGN1cnJlbnREYXRlLCBmaXJzdERheU9mV2VlayksXG5cdFx0W2N1cnJlbnREYXRlLCBmaXJzdERheU9mV2Vla11cblx0KVxuXG5cdC8vIFJlc291cmNlLXNwZWNpZmljIGJ1c2luZXNzIGhvdXJzIGNvbWJpbmVkXG5cdGNvbnN0IHJlc291cmNlQnVzaW5lc3NIb3VycyA9IHVzZU1lbW8oXG5cdFx0KCkgPT5cblx0XHRcdHJlc291cmNlcy5tYXAoKHIpID0+IHIuYnVzaW5lc3NIb3VycykuZmlsdGVyKEJvb2xlYW4pIGFzIChcblx0XHRcdFx0fCBCdXNpbmVzc0hvdXJzXG5cdFx0XHRcdHwgQnVzaW5lc3NIb3Vyc1tdXG5cdFx0XHQpW10sXG5cdFx0W3Jlc291cmNlc11cblx0KVxuXG5cdC8vIEdlbmVyYXRlIHRpbWUgY29sdW1ucyAoaG91cmx5IHNsb3RzKVxuXHRjb25zdCB3ZWVrSG91cnMgPSB1c2VNZW1vKCgpID0+IHtcblx0XHRyZXR1cm4gd2Vla0RheXMubWFwKChkYXkpID0+XG5cdFx0XHRnZXRWaWV3SG91cnMoe1xuXHRcdFx0XHRyZWZlcmVuY2VEYXRlOiBkYXksXG5cdFx0XHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0XHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzLFxuXHRcdFx0XHRyZXNvdXJjZUJ1c2luZXNzSG91cnMsXG5cdFx0XHR9KVxuXHRcdClcblx0fSwgW3dlZWtEYXlzLCBidXNpbmVzc0hvdXJzLCBoaWRlTm9uQnVzaW5lc3NIb3VycywgcmVzb3VyY2VCdXNpbmVzc0hvdXJzXSlcblxuXHRyZXR1cm4gKFxuXHRcdDxSZXNvdXJjZUV2ZW50R3JpZFxuXHRcdFx0Y2xhc3Nlcz17e1xuXHRcdFx0XHRoZWFkZXI6ICdoLTI0IG1pbi13LWZ1bGwnLFxuXHRcdFx0XHRib2R5OiAnbWluLXctZnVsbCcsXG5cdFx0XHRcdGNlbGw6ICdtaW4tdy0yMCBmbGV4LTEnLFxuXHRcdFx0fX1cblx0XHRcdGRheXM9e3dlZWtIb3Vyc31cblx0XHRcdGdyaWRUeXBlPVwiaG91clwiXG5cdFx0PlxuXHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ3LTIwIHNtOnctNDAgYm9yZGVyLWIgYm9yZGVyLXIgc2hyaW5rLTAgZmxleCBqdXN0aWZ5LWNlbnRlciBpdGVtcy1jZW50ZXIgc3RpY2t5IHRvcC0wIGxlZnQtMCBiZy1iYWNrZ3JvdW5kIHotMjBcIj5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtXCI+e3QoJ3Jlc291cmNlcycpfTwvZGl2PlxuXHRcdFx0PC9kaXY+XG5cblx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIGZsZXggZmxleC1jb2xcIj5cblx0XHRcdFx0ey8qIERheSBoZWFkZXIgcm93ICovfVxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggaC0xMlwiPlxuXHRcdFx0XHRcdHt3ZWVrRGF5cy5tYXAoKGRheSwgaW5kZXgpID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IGlzVG9kYXkgPSBkYXkuaXNTYW1lKGRheWpzKCksICdkYXknKVxuXHRcdFx0XHRcdFx0Y29uc3Qga2V5ID0gYHJlc291cmNlLXdlZWstaGVhZGVyLSR7ZGF5LnRvSVNPU3RyaW5nKCl9LWRheWBcblxuXHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0PEFuaW1hdGVkU2VjdGlvblxuXHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHRcdFx0XHQnc2hyaW5rLTAgYm9yZGVyLXIgbGFzdDpib3JkZXItci0wIGJvcmRlci1iIGZsZXgtMSBmbGV4IGl0ZW1zLWNlbnRlciB0ZXh0LWNlbnRlciBmb250LW1lZGl1bScsXG5cdFx0XHRcdFx0XHRcdFx0XHRpc1RvZGF5ICYmICdiZy1ibHVlLTUwIHRleHQtYmx1ZS02MDAnXG5cdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD1cInJlc291cmNlLXdlZWstZGF5LWhlYWRlclwiXG5cdFx0XHRcdFx0XHRcdFx0ZGVsYXk9e2luZGV4ICogMC4wNX1cblx0XHRcdFx0XHRcdFx0XHRrZXk9e2Ake2tleX0tYW5pbWF0ZWRgfVxuXHRcdFx0XHRcdFx0XHRcdHRyYW5zaXRpb25LZXk9e2Ake2tleX0tbW90aW9uYH1cblx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwic3RpY2t5IGxlZnQtMS8yXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQtc21cIj57ZGF5LmZvcm1hdCgnZGRkJyl9PC9kaXY+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHtkYXkuZm9ybWF0KCdNL0QnKX1cblx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHQ8L0FuaW1hdGVkU2VjdGlvbj5cblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHR9KX1cblx0XHRcdFx0PC9kaXY+XG5cblx0XHRcdFx0ey8qIFRpbWUgaGVhZGVyIHJvdyAqL31cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IGgtMTIgYm9yZGVyLWJcIj5cblx0XHRcdFx0XHR7d2Vla0hvdXJzLmZsYXQoKS5tYXAoKGNvbCwgaW5kZXgpID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IGlzTm93SG91ciA9IGNvbC5pc1NhbWUoZGF5anMoKSwgJ2hvdXInKVxuXHRcdFx0XHRcdFx0Y29uc3Qga2V5ID0gYHJlc291cmNlLXdlZWstaGVhZGVyLSR7Y29sLnRvSVNPU3RyaW5nKCl9LWhvdXItJHtpbmRleH1gXG5cblx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdDxBbmltYXRlZFNlY3Rpb25cblx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0XHRcdFx0J21pbi13LTIwIGZsZXgtMSBib3JkZXItciBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB0ZXh0LXhzIHNocmluay0wJyxcblx0XHRcdFx0XHRcdFx0XHRcdGlzTm93SG91ciAmJiAnYmctYmx1ZS01MCB0ZXh0LWJsdWUtNjAwIGZvbnQtbWVkaXVtJ1xuXHRcdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e2ByZXNvdXJjZS13ZWVrLXRpbWUtbGFiZWwtJHtjb2wuZm9ybWF0KCdISCcpfWB9XG5cdFx0XHRcdFx0XHRcdFx0ZGVsYXk9e2luZGV4ICogMC4wMDV9XG5cdFx0XHRcdFx0XHRcdFx0a2V5PXtgJHtrZXl9LWFuaW1hdGVkYH1cblx0XHRcdFx0XHRcdFx0XHR0cmFuc2l0aW9uS2V5PXtgJHtrZXl9LW1vdGlvbmB9XG5cdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHR7Y29sLmZvcm1hdCh0aW1lRm9ybWF0ID09PSAnMTItaG91cicgPyAnaCBBJyA6ICdIJyl9XG5cdFx0XHRcdFx0XHRcdDwvQW5pbWF0ZWRTZWN0aW9uPlxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdH0pfVxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdDwvZGl2PlxuXHRcdDwvUmVzb3VyY2VFdmVudEdyaWQ+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBBbGxEYXlDZWxsIH0gZnJvbSAnQC9jb21wb25lbnRzL2FsbC1kYXktcm93L2FsbC1kYXktY2VsbCdcbmltcG9ydCB7IEFsbERheVJvdyB9IGZyb20gJ0AvY29tcG9uZW50cy9hbGwtZGF5LXJvdy9hbGwtZGF5LXJvdydcbmltcG9ydCB7IEFuaW1hdGVkU2VjdGlvbiB9IGZyb20gJ0AvY29tcG9uZW50cy9hbmltYXRpb25zL2FuaW1hdGVkLXNlY3Rpb24nXG5pbXBvcnQgeyBSZXNvdXJjZUNlbGwgfSBmcm9tICdAL2NvbXBvbmVudHMvcmVzb3VyY2UtY2VsbCdcbmltcG9ydCB0eXBlIHsgQnVzaW5lc3NIb3VycyB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB7IFZlcnRpY2FsR3JpZCB9IGZyb20gJ0AvY29tcG9uZW50cy92ZXJ0aWNhbC1ncmlkL3ZlcnRpY2FsLWdyaWQnXG5pbXBvcnQgeyBnZXRWaWV3SG91cnMgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL3V0aWxzL3ZpZXctaG91cnMnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSB7IERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgZ2V0V2Vla0RheXMgfSBmcm9tICdAL2xpYi91dGlscy9kYXRlLXV0aWxzJ1xuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VXZWVrVmVydGljYWw6IFJlYWN0LkZDID0gKCkgPT4ge1xuXHRjb25zdCB7XG5cdFx0Y3VycmVudERhdGUsXG5cdFx0Z2V0VmlzaWJsZVJlc291cmNlcyxcblx0XHRmaXJzdERheU9mV2Vlayxcblx0XHR0aW1lRm9ybWF0LFxuXHRcdHQsXG5cdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRoaWRlTm9uQnVzaW5lc3NIb3Vycyxcblx0XHRoaWRkZW5EYXlzLFxuXHR9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXG5cdGNvbnN0IHJlc291cmNlcyA9IGdldFZpc2libGVSZXNvdXJjZXMoKVxuXHQvLyBHZW5lcmF0ZSB3ZWVrIGRheXNcblx0Y29uc3Qgd2Vla0RheXMgPSB1c2VNZW1vKFxuXHRcdCgpID0+IGdldFdlZWtEYXlzKGN1cnJlbnREYXRlLCBmaXJzdERheU9mV2VlayksXG5cdFx0W2N1cnJlbnREYXRlLCBmaXJzdERheU9mV2Vla11cblx0KVxuXG5cdGNvbnN0IHZpc2libGVEYXlzID0gdXNlTWVtbyhcblx0XHQoKSA9PlxuXHRcdFx0aGlkZGVuRGF5c1xuXHRcdFx0XHQ/IHdlZWtEYXlzLmZpbHRlcigoZGF5KSA9PiAhaGlkZGVuRGF5cy5oYXMoZGF5LmRheSgpKSlcblx0XHRcdFx0OiB3ZWVrRGF5cyxcblx0XHRbd2Vla0RheXMsIGhpZGRlbkRheXNdXG5cdClcblxuXHRjb25zdCBob3VycyA9IHVzZU1lbW8oXG5cdFx0KCkgPT5cblx0XHRcdGdldFZpZXdIb3Vycyh7XG5cdFx0XHRcdHJlZmVyZW5jZURhdGU6IGN1cnJlbnREYXRlLFxuXHRcdFx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdFx0XHRoaWRlTm9uQnVzaW5lc3NIb3Vycyxcblx0XHRcdFx0YWxsRGF0ZXM6IHdlZWtEYXlzLFxuXHRcdFx0XHRyZXNvdXJjZUJ1c2luZXNzSG91cnM6IHJlc291cmNlc1xuXHRcdFx0XHRcdC5tYXAoKHIpID0+IHIuYnVzaW5lc3NIb3Vycylcblx0XHRcdFx0XHQuZmlsdGVyKEJvb2xlYW4pIGFzIChCdXNpbmVzc0hvdXJzIHwgQnVzaW5lc3NIb3Vyc1tdKVtdLFxuXHRcdFx0fSksXG5cdFx0W2N1cnJlbnREYXRlLCBidXNpbmVzc0hvdXJzLCBoaWRlTm9uQnVzaW5lc3NIb3Vycywgd2Vla0RheXMsIHJlc291cmNlc11cblx0KVxuXG5cdGNvbnN0IGZpcnN0Q29sID0gdXNlTWVtbyhcblx0XHQoKSA9PiAoe1xuXHRcdFx0aWQ6ICd0aW1lLWNvbCcsXG5cdFx0XHRkYXlzOiBob3Vycyxcblx0XHRcdGRheTogdW5kZWZpbmVkLFxuXHRcdFx0Y2xhc3NOYW1lOlxuXHRcdFx0XHQnc2hyaW5rLTAgdy0xNiBtaW4tdy0xNiBtYXgtdy0xNiBzdGlja3kgbGVmdC0wIGJnLWJhY2tncm91bmQgei0yMCcsXG5cdFx0XHRncmlkVHlwZTogJ2hvdXInIGFzIGNvbnN0LFxuXHRcdFx0bm9FdmVudHM6IHRydWUsXG5cdFx0XHRyZW5kZXJDZWxsOiAoZGF0ZTogRGF5anMpID0+IChcblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LW11dGVkLWZvcmVncm91bmQgcC0yIHRleHQtcmlnaHQgdGV4dC1bMTBweF0gc206dGV4dC14cyBmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlclwiPlxuXHRcdFx0XHRcdHtkYXRlLmZvcm1hdCh0aW1lRm9ybWF0ID09PSAnMTItaG91cicgPyAnaCBBJyA6ICdIJyl9XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0KSxcblx0XHR9KSxcblx0XHRbaG91cnMsIHRpbWVGb3JtYXRdXG5cdClcblxuXHRjb25zdCBjb2x1bW5zID0gdXNlTWVtbyhcblx0XHQoKSA9PlxuXHRcdFx0cmVzb3VyY2VzLmZsYXRNYXAoKHJlc291cmNlKSA9PlxuXHRcdFx0XHR2aXNpYmxlRGF5cy5tYXAoKGRheSkgPT4gKHtcblx0XHRcdFx0XHRpZDogYGRheS1jb2wtJHtkYXkuZm9ybWF0KCdZWVlZLU1NLUREJyl9LXJlc291cmNlLSR7cmVzb3VyY2UuaWR9YCxcblx0XHRcdFx0XHRyZXNvdXJjZUlkOiByZXNvdXJjZS5pZCxcblx0XHRcdFx0XHRyZXNvdXJjZSxcblx0XHRcdFx0XHRkYXksXG5cdFx0XHRcdFx0ZGF5czogZ2V0Vmlld0hvdXJzKHtcblx0XHRcdFx0XHRcdHJlZmVyZW5jZURhdGU6IGRheSxcblx0XHRcdFx0XHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0XHRcdFx0XHRoaWRlTm9uQnVzaW5lc3NIb3Vycyxcblx0XHRcdFx0XHRcdGFsbERhdGVzOiB3ZWVrRGF5cyxcblx0XHRcdFx0XHRcdHJlc291cmNlQnVzaW5lc3NIb3VyczogcmVzb3VyY2VzXG5cdFx0XHRcdFx0XHRcdC5tYXAoKHIpID0+IHIuYnVzaW5lc3NIb3Vycylcblx0XHRcdFx0XHRcdFx0LmZpbHRlcihCb29sZWFuKSBhcyAoQnVzaW5lc3NIb3VycyB8IEJ1c2luZXNzSG91cnNbXSlbXSxcblx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRncmlkVHlwZTogJ2hvdXInIGFzIGNvbnN0LFxuXHRcdFx0XHR9KSlcblx0XHRcdCksXG5cdFx0W3Jlc291cmNlcywgd2Vla0RheXMsIGJ1c2luZXNzSG91cnMsIGhpZGVOb25CdXNpbmVzc0hvdXJzLCB2aXNpYmxlRGF5cy5tYXBdXG5cdClcblxuXHRyZXR1cm4gKFxuXHRcdDxWZXJ0aWNhbEdyaWRcblx0XHRcdGFsbERheVJvdz17XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleFwiPlxuXHRcdFx0XHRcdDxBbGxEYXlDZWxsIC8+XG5cdFx0XHRcdFx0e3Jlc291cmNlcy5tYXAoKHJlc291cmNlKSA9PiAoXG5cdFx0XHRcdFx0XHQ8QWxsRGF5Um93XG5cdFx0XHRcdFx0XHRcdGNsYXNzZXM9e3sgY2VsbDogJ21pbi13LTUwJyB9fVxuXHRcdFx0XHRcdFx0XHRkYXlzPXt2aXNpYmxlRGF5c31cblx0XHRcdFx0XHRcdFx0a2V5PXtgcmVzb3VyY2Utd2Vlay1hbGxkYXktcm93LSR7cmVzb3VyY2UuaWR9YH1cblx0XHRcdFx0XHRcdFx0cmVzb3VyY2U9e3Jlc291cmNlfVxuXHRcdFx0XHRcdFx0XHRzaG93U3BhY2VyPXtmYWxzZX1cblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0KSl9XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0fVxuXHRcdFx0Y2xhc3Nlcz17eyBoZWFkZXI6ICdoLTI0JyB9fVxuXHRcdFx0Y29sdW1ucz17W2ZpcnN0Q29sLCAuLi5jb2x1bW5zXX1cblx0XHRcdGRhdGEtdGVzdGlkPVwicmVzb3VyY2Utd2Vla1wiXG5cdFx0XHRncmlkVHlwZT1cImhvdXJcIlxuXHRcdD5cblx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIGZsZXggZmxleC1jb2xcIj5cblx0XHRcdFx0ey8qIFJlc291cmNlIGhlYWRlciByb3cgKi99XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBoLTEyXCI+XG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJzaHJpbmstMCB3LTE2IGJvcmRlci1yIHotMjAgYmctYmFja2dyb3VuZCBzdGlja3kgbGVmdC0wXCI+XG5cdFx0XHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJweC0yIGgtZnVsbCB3LWZ1bGwgZmxleCBqdXN0aWZ5LWNlbnRlciBpdGVtcy1lbmQgdGV4dC14cyB0ZXh0LW11dGVkLWZvcmVncm91bmRcIj5cblx0XHRcdFx0XHRcdFx0e3QoJ3dlZWsnKX1cblx0XHRcdFx0XHRcdDwvc3Bhbj5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHR7cmVzb3VyY2VzLm1hcCgocmVzb3VyY2UsIGluZGV4KSA9PiB7XG5cdFx0XHRcdFx0XHRjb25zdCBrZXkgPSBgcmVzb3VyY2Utd2Vlay1oZWFkZXItJHtyZXNvdXJjZS5pZH0tZGF5YFxuXG5cdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHQ8QW5pbWF0ZWRTZWN0aW9uXG5cdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdFx0XHRcdCdzaHJpbmstMCBib3JkZXItciBsYXN0OmJvcmRlci1yLTAgYm9yZGVyLWIgZmxleCBpdGVtcy1jZW50ZXIgdGV4dC1jZW50ZXIgZm9udC1tZWRpdW0nXG5cdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0XHRkZWxheT17aW5kZXggKiAwLjA1fVxuXHRcdFx0XHRcdFx0XHRcdGtleT17YCR7a2V5fS1hbmltYXRlZGB9XG5cdFx0XHRcdFx0XHRcdFx0c3R5bGU9e3tcblx0XHRcdFx0XHRcdFx0XHRcdHdpZHRoOiBgY2FsYygke3Zpc2libGVEYXlzLmxlbmd0aH0gKiB2YXIoLS1zcGFjaW5nKSAqIDUwKWAsXG5cdFx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdFx0XHR0cmFuc2l0aW9uS2V5PXtgJHtrZXl9LW1vdGlvbmB9XG5cdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHQ8UmVzb3VyY2VDZWxsXG5cdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJoLWZ1bGwgdy1mdWxsIGZsZXgtMVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXNvdXJjZT17cmVzb3VyY2V9XG5cdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJzdGlja3kgbGVmdC0xLzIgdGV4dC1zbSBmb250LW1lZGl1bSB0cnVuY2F0ZVwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7cmVzb3VyY2UudGl0bGV9XG5cdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0XHQ8L1Jlc291cmNlQ2VsbD5cblx0XHRcdFx0XHRcdFx0PC9BbmltYXRlZFNlY3Rpb24+XG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0fSl9XG5cdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdHsvKiBEYXRlIGhlYWRlciByb3cgKi99XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBoLTEyXCI+XG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJzaHJpbmstMCB3LTE2IGJvcmRlci1yIGJvcmRlci1iIHotMjAgYmctYmFja2dyb3VuZCBzdGlja3kgbGVmdC0wXCI+XG5cdFx0XHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJweC0yIGgtZnVsbCB3LWZ1bGwgZmxleCBqdXN0aWZ5LWNlbnRlciBpdGVtcy1zdGFydCBmb250LW1lZGl1bVwiPlxuXHRcdFx0XHRcdFx0XHR7Y3VycmVudERhdGUud2VlaygpfVxuXHRcdFx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdHtjb2x1bW5zLm1hcCgoY29sLCBpbmRleCkgPT4ge1xuXHRcdFx0XHRcdFx0Y29uc3QgZGF5ID0gY29sLmRheVxuXHRcdFx0XHRcdFx0Y29uc3Qga2V5ID0gYHJlc291cmNlLXdlZWstaGVhZGVyLSR7ZGF5LnRvSVNPU3RyaW5nKCl9LWhvdXItJHtjb2wucmVzb3VyY2VJZH1gXG5cblx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdDxBbmltYXRlZFNlY3Rpb25cblx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0XHRcdFx0J3ctNTAgYm9yZGVyLXIgbGFzdDpib3JkZXItci0wIGJvcmRlci1iIGZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRleHQteHMgc2hyaW5rLTAgYmctYmFja2dyb3VuZCdcblx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPXtgcmVzb3VyY2Utd2Vlay10aW1lLWxhYmVsLSR7ZGF5LmZvcm1hdCgnSEgnKX1gfVxuXHRcdFx0XHRcdFx0XHRcdGRlbGF5PXtpbmRleCAqIDAuMDV9XG5cdFx0XHRcdFx0XHRcdFx0a2V5PXtgJHtrZXl9LWFuaW1hdGVkYH1cblx0XHRcdFx0XHRcdFx0XHR0cmFuc2l0aW9uS2V5PXtgJHtrZXl9LW1vdGlvbmB9XG5cdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQtc21cIj57ZGF5LmZvcm1hdCgnZGRkJyl9PC9kaXY+XG5cdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtbXV0ZWQtZm9yZWdyb3VuZFwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0e2RheS5mb3JtYXQoJ00vRCcpfVxuXHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHQ8L0FuaW1hdGVkU2VjdGlvbj5cblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHR9KX1cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQ8L2Rpdj5cblx0XHQ8L1ZlcnRpY2FsR3JpZD5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB7IFJlc291cmNlV2Vla0hvcml6b250YWwgfSBmcm9tICcuL3Jlc291cmNlLXdlZWstaG9yaXpvbnRhbCdcbmltcG9ydCB7IFJlc291cmNlV2Vla1ZlcnRpY2FsIH0gZnJvbSAnLi9yZXNvdXJjZS13ZWVrLXZlcnRpY2FsJ1xuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VXZWVrVmlldzogUmVhY3QuRkMgPSAoKSA9PiB7XG5cdGNvbnN0IHsgb3JpZW50YXRpb24gfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblxuXHRpZiAob3JpZW50YXRpb24gPT09ICd2ZXJ0aWNhbCcpIHtcblx0XHRyZXR1cm4gPFJlc291cmNlV2Vla1ZlcnRpY2FsIC8+XG5cdH1cblxuXHRyZXR1cm4gPFJlc291cmNlV2Vla0hvcml6b250YWwgLz5cbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBBbmltYXRlZFNlY3Rpb24gfSBmcm9tICdAL2NvbXBvbmVudHMvYW5pbWF0aW9ucy9hbmltYXRlZC1zZWN0aW9uJ1xuaW1wb3J0IHsgQ2FsZW5kYXJEbmRDb250ZXh0IH0gZnJvbSAnQC9jb21wb25lbnRzL2RyYWctYW5kLWRyb3AvY2FsZW5kYXItZG5kLWNvbnRleHQnXG5pbXBvcnQgeyBFdmVudEZvcm1EaWFsb2cgfSBmcm9tICdAL2NvbXBvbmVudHMvZXZlbnQtZm9ybS9ldmVudC1mb3JtLWRpYWxvZydcbmltcG9ydCB7IEhlYWRlciB9IGZyb20gJ0AvY29tcG9uZW50cy9oZWFkZXInXG5pbXBvcnQgeyBSZXNvdXJjZURheVZpZXcgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvZGF5LXZpZXcnXG5pbXBvcnQgeyBSZXNvdXJjZU1vbnRoVmlldyB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy9tb250aC12aWV3J1xuaW1wb3J0IHsgUmVzb3VyY2VXZWVrVmlldyB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy93ZWVrLXZpZXcnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5cbmV4cG9ydCBjb25zdCBSZXNvdXJjZUNhbGVuZGFyQm9keTogUmVhY3QuRkMgPSAoKSA9PiB7XG5cdGNvbnN0IHsgdmlldyB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXG5cdGNvbnN0IHZpZXdNYXA6IFJlY29yZDxzdHJpbmcsIFJlYWN0LlJlYWN0Tm9kZT4gPSB7XG5cdFx0bW9udGg6IDxSZXNvdXJjZU1vbnRoVmlldyBrZXk9XCJtb250aFwiIC8+LFxuXHRcdHdlZWs6IDxSZXNvdXJjZVdlZWtWaWV3IGtleT1cIndlZWtcIiAvPixcblx0XHRkYXk6IDxSZXNvdXJjZURheVZpZXcga2V5PVwiZGF5XCIgLz4sXG5cdH1cblxuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgdy1mdWxsIGgtZnVsbFwiXG5cdFx0XHRkYXRhLXRlc3RpZD1cImlsYW15LXJlc291cmNlLWNhbGVuZGFyXCJcblx0XHQ+XG5cdFx0XHQ8SGVhZGVyIGNsYXNzTmFtZT1cInAtMVwiIC8+XG5cblx0XHRcdHsvKiBDYWxlbmRhciBCb2R5IHdpdGggQW5pbWF0ZWRTZWN0aW9uIGZvciB2aWV3IHRyYW5zaXRpb25zICovfVxuXHRcdFx0PENhbGVuZGFyRG5kQ29udGV4dD5cblx0XHRcdFx0PEFuaW1hdGVkU2VjdGlvblxuXHRcdFx0XHRcdGNsYXNzTmFtZT1cInctZnVsbCBoLVtjYWxjKDEwMCUtMy41cmVtKV0gQGNvbnRhaW5lci9jYWxlbmRhci1ib2R5XCJcblx0XHRcdFx0XHRkaXJlY3Rpb249XCJob3Jpem9udGFsXCJcblx0XHRcdFx0XHR0cmFuc2l0aW9uS2V5PXt2aWV3fVxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJib3JkZXIgaC1mdWxsIHctZnVsbFwiIGRhdGEtdGVzdGlkPVwiY2FsZW5kYXItYm9keVwiPlxuXHRcdFx0XHRcdFx0e3ZpZXdNYXBbdmlld119XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDwvQW5pbWF0ZWRTZWN0aW9uPlxuXHRcdFx0PC9DYWxlbmRhckRuZENvbnRleHQ+XG5cblx0XHRcdHsvKiBFdmVudCBGb3JtIERpYWxvZyAqL31cblx0XHRcdDxFdmVudEZvcm1EaWFsb2cgLz5cblx0XHQ8L2Rpdj5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCwgV2Vla0RheXMgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgeyBSZXNvdXJjZUNhbGVuZGFyUHJvdmlkZXIgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbnRleHRzL3Jlc291cmNlLWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSB7XG5cdElsYW15UmVzb3VyY2VDYWxlbmRhclByb3BFdmVudCxcblx0SWxhbXlSZXNvdXJjZUNhbGVuZGFyUHJvcHMsXG59IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvdHlwZXMnXG5pbXBvcnQge1xuXHREQVlfTUFYX0VWRU5UU19ERUZBVUxULFxuXHRHQVBfQkVUV0VFTl9FTEVNRU5UUyxcblx0V0VFS19EQVlTX05VTUJFUl9NQVAsXG59IGZyb20gJ0AvbGliL2NvbnN0YW50cydcbmltcG9ydCB7IG5vcm1hbGl6ZUV2ZW50cywgc2FmZURhdGUgfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IFJlc291cmNlQ2FsZW5kYXJCb2R5IH0gZnJvbSAnLi9yZXNvdXJjZS1jYWxlbmRhci1ib2R5J1xuXG5jb25zdCB0b0hpZGRlbkRheXNTZXQgPSAoaGlkZGVuRGF5cz86IFdlZWtEYXlzW10pOiBTZXQ8bnVtYmVyPiB8IHVuZGVmaW5lZCA9PiB7XG5cdGlmICghaGlkZGVuRGF5cyB8fCBoaWRkZW5EYXlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHVuZGVmaW5lZFxuXHRyZXR1cm4gbmV3IFNldChoaWRkZW5EYXlzLm1hcCgoZGF5KSA9PiBXRUVLX0RBWVNfTlVNQkVSX01BUFtkYXldKSlcbn1cblxuZXhwb3J0IGNvbnN0IElsYW15UmVzb3VyY2VDYWxlbmRhcjogUmVhY3QuRkM8SWxhbXlSZXNvdXJjZUNhbGVuZGFyUHJvcHM+ID0gKHtcblx0ZXZlbnRzID0gW10sXG5cdHJlc291cmNlcyA9IFtdLFxuXHRmaXJzdERheU9mV2VlayA9ICdzdW5kYXknLFxuXHRpbml0aWFsVmlldyA9ICdtb250aCcsXG5cdGluaXRpYWxEYXRlLFxuXHRkaXNhYmxlRHJhZ0FuZERyb3AgPSBmYWxzZSxcblx0ZGF5TWF4RXZlbnRzID0gREFZX01BWF9FVkVOVFNfREVGQVVMVCxcblx0dGltZUZvcm1hdCA9ICcxMi1ob3VyJyxcblx0ZXZlbnRTcGFjaW5nID0gR0FQX0JFVFdFRU5fRUxFTUVOVFMsXG5cdGhpZGRlbkRheXMsXG5cdC4uLnByb3BzXG59KSA9PiB7XG5cdHJldHVybiAoXG5cdFx0PFJlc291cmNlQ2FsZW5kYXJQcm92aWRlclxuXHRcdFx0ZGF5TWF4RXZlbnRzPXtkYXlNYXhFdmVudHN9XG5cdFx0XHRkaXNhYmxlRHJhZ0FuZERyb3A9e2Rpc2FibGVEcmFnQW5kRHJvcH1cblx0XHRcdGV2ZW50U3BhY2luZz17ZXZlbnRTcGFjaW5nfVxuXHRcdFx0ZXZlbnRzPXtub3JtYWxpemVFdmVudHM8SWxhbXlSZXNvdXJjZUNhbGVuZGFyUHJvcEV2ZW50LCBDYWxlbmRhckV2ZW50Pihcblx0XHRcdFx0ZXZlbnRzXG5cdFx0XHQpfVxuXHRcdFx0Zmlyc3REYXlPZldlZWs9e1dFRUtfREFZU19OVU1CRVJfTUFQW2ZpcnN0RGF5T2ZXZWVrXX1cblx0XHRcdGhpZGRlbkRheXM9e3RvSGlkZGVuRGF5c1NldChoaWRkZW5EYXlzKX1cblx0XHRcdGluaXRpYWxEYXRlPXtzYWZlRGF0ZShpbml0aWFsRGF0ZSl9XG5cdFx0XHRpbml0aWFsVmlldz17aW5pdGlhbFZpZXd9XG5cdFx0XHRyZXNvdXJjZXM9e3Jlc291cmNlc31cblx0XHRcdHRpbWVGb3JtYXQ9e3RpbWVGb3JtYXR9XG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0PlxuXHRcdFx0PFJlc291cmNlQ2FsZW5kYXJCb2R5IC8+XG5cdFx0PC9SZXNvdXJjZUNhbGVuZGFyUHJvdmlkZXI+XG5cdClcbn1cbiIKICBdLAogICJtYXBwaW5ncyI6ICJBQUVBLGdCQUFTLGVDRlQsMEJBQ0MsYUFFQSxzQkNGRCxlQUFTLGNBQ1Qsa0JBQVMsd0JDRFQsc0JBQ0EsMENBQ0EsOENBQ0EsK0NBQ0EsMkNBQ0EsdUNBQ0EseUNBQ0Esb0NBQ0Esd0NBQ0EsMkNBYUEsSUFBSSxHQUVFLEdBQWdDLENBQUMsRUFBUyxFQUFZLElBQWlCLENBQzVFLElBQU0sRUFBUSxFQUFXLFVBR25CLEVBQXFCLEVBQWEsR0FBRyxXQUMzQyxFQUFhLEdBQUcsV0FBYSxD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T1AsRUFFSCxHQUNBLEdBQ0QsRUFDRCw0Q0NsTEcsSUFBTSxHQUE2QixJQUFNLENBQy9DLElBQVEsZUFBZ0IsRUFBd0IsRUFFaEQsR0FBSSxJQUFnQixXQUNuQixPQUFPLEdBQUMsR0FBRCxFQUFzQixFQUc5QixPQUFPLEdBQUMsR0FBRCxFQUF3Qix1RENGekIsSUFBTSxHQUFpQyxJQUFNLENBQ25ELElBQVEsUUFBUyxFQUF3QixFQVF6QyxPQUNDLEdBcUJFLE1BckJGLENBQ0MsVUFBVSw4QkFDVixjQUFZLDBCQUZiLFNBcUJFLENBakJELEdBQUMsR0FBRCxDQUFRLFVBQVUsTUFBTSxFQUd4QixHQVVFLEdBVkYsVUFDQyxHQVFFLEVBUkYsQ0FDQyxVQUFVLHdEQUNWLFVBQVUsYUFDVixjQUFlLEVBSGhCLFNBS0MsR0FFRSxNQUZGLENBQUssVUFBVSx1QkFBdUIsY0FBWSxnQkFBbEQsU0FwQjZDLENBQ2hELE1BQU8sR0FBQyxHQUFELEdBQXVCLE9BQVEsRUFDdEMsS0FBTSxHQUFDLEdBQUQsR0FBc0IsTUFBTyxFQUNuQyxJQUFLLEdBQUMsR0FBRCxHQUFxQixLQUFNLENBQ2pDLEVBaUJjLEdBQ1IsRUFDRCxFQUNELEVBR0YsR0FBQyxHQUFELEVBQWlCLEdBQ2hCLDRDQzFCSixJQUFNLEdBQWtCLENBQUMsSUFBcUQsQ0FDN0UsR0FBSSxDQUFDLEdBQWMsRUFBVyxTQUFXLEVBQUcsT0FDNUMsT0FBTyxJQUFJLElBQUksRUFBVyxJQUFJLENBQUMsSUFBUSxHQUFxQixFQUFJLENBQUMsR0FHckQsR0FBOEQsRUFDMUUsU0FBUyxDQUFDLEVBQ1YsWUFBWSxDQUFDLEVBQ2IsaUJBQWlCLFNBQ2pCLGNBQWMsUUFDZCxjQUNBLHFCQUFxQixHQUNyQixlQUFlLEdBQ2YsYUFBYSxVQUNiLGVBQWUsR0FDZixnQkFDRyxLQUNFLENBQ0wsT0FDQyxHQWdCRSxHQWhCRixDQUNDLGFBQWMsRUFDZCxtQkFBb0IsRUFDcEIsYUFBYyxFQUNkLE9BQVEsR0FDUCxDQUNELEVBQ0EsZUFBZ0IsR0FBcUIsR0FDckMsV0FBWSxHQUFnQixDQUFVLEVBQ3RDLFlBQWEsR0FBUyxDQUFXLEVBQ2pDLFlBQWEsRUFDYixVQUFXLEVBQ1gsV0FBWSxLQUNSLEVBYkwsU0FlQyxHQUFDLEdBQUQsRUFBc0IsRUFDckIiLAogICJkZWJ1Z0lkIjogIjAxQzYxQUYzNjE1RjA5MTA2NDc1NkUyMTY0NzU2RTIxIiwKICAibmFtZXMiOiBbXQp9