@ilamy/calendar 1.5.0 → 1.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +5 -0
- package/dist/index.js +6 -6
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
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
|
-
`,
|
|
3
|
-
`,"\\n").replaceAll("\r","")},
|
|
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};
|
|
1
|
+
import{RRule as Vq}from"rrule";import{AnimatePresence as c1,motion as o1}from"motion/react";import{clsx as y1}from"clsx";import{twMerge as v1}from"tailwind-merge";import N0 from"dayjs";import H1 from"dayjs/plugin/isBetween.js";import m1 from"dayjs/plugin/isSameOrAfter.js";import k1 from"dayjs/plugin/isSameOrBefore.js";import h1 from"dayjs/plugin/localeData.js";import g1 from"dayjs/plugin/minMax.js";import C1 from"dayjs/plugin/timezone.js";import D1 from"dayjs/plugin/utc.js";import E1 from"dayjs/plugin/weekday.js";import j1 from"dayjs/plugin/weekOfYear.js";var D5,x1=(P,$,Z)=>{let q=$.prototype,X=Z.tz.setDefault;Z.tz.setDefault=(J)=>{return D5=J,X(J)};let{startOf:f,endOf:Y}=q;function Q(J,K){let L=J.$x?.$timezone||D5;if(!L)return K;let z=Z.tz(K.format("YYYY-MM-DDTHH:mm:ss"),L).utcOffset();if(K.utcOffset()!==z)return K.tz(L,!0);return K}q.startOf=function(J,K){let L=f.call(this,J,K);return Q(this,L)},q.endOf=Y};N0.extend(E1);N0.extend(j1);N0.extend(m1);N0.extend(k1);N0.extend(H1);N0.extend(g1);N0.extend(C1);N0.extend(D1);N0.extend(h1);N0.extend(x1);var E5=(...P)=>{return N0.tz(...P)};Object.assign(E5,N0);var M=E5;function U(...P){return v1(y1(P))}function JP(P){if(P===void 0)return;if(M.isDayjs(P))return P;let $=M(P);return $.isValid()?$:void 0}var j5=(P,$)=>{let Z={...P};for(let q of $)delete Z[q];return Z};function hP(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 x5}from"react/jsx-runtime";var i1={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}})},C=({children:P,transitionKey:$,delay:Z=0,className:q,direction:X="vertical",layout:f,layoutId:Y,"data-testid":Q,ref:J,...K})=>x5(c1,{mode:"wait",children:x5(o1.div,{animate:"visible",className:U("inline-block w-full",q),custom:{delay:Z,direction:X},"data-testid":Q,exit:"exit",initial:"hidden",layout:f,layoutId:Y,ref:J,variants:i1,...K,children:P},$)});C.displayName="AnimatedSection";import{DndContext as Y4,MouseSensor as _4,pointerWithin as K4,TouchSensor as z4,useSensor as $2,useSensors as U4}from"@dnd-kit/core";import{useRef as Z2,useState as L4}from"react";import{Slot as l1}from"@radix-ui/react-slot";import{cva as u1}from"class-variance-authority";import{jsx as d1}from"react/jsx-runtime";var gP=u1("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:q=!1,...X}){return d1(q?l1:"button",{className:U(gP({variant:$,size:Z,className:P})),"data-slot":"button",...X})}import*as Q0 from"@radix-ui/react-dialog";import{XIcon as r1}from"lucide-react";import{jsx as M0,jsxs as Q5}from"react/jsx-runtime";function XP({...P}){return M0(Q0.Root,{"data-slot":"dialog",...P})}function a1({...P}){return M0(Q0.Portal,{"data-slot":"dialog-portal",...P})}function n1({className:P,...$}){return M0(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 qP({className:P,children:$,...Z}){return Q5(a1,{"data-slot":"dialog-portal",children:[M0(n1,{}),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:[M0(r1,{}),M0("span",{className:"sr-only",children:"Close"})]})]})]})}function QP({className:P,...$}){return M0("div",{className:U("flex flex-col gap-2 text-center sm:text-left",P),"data-slot":"dialog-header",...$})}function CP({className:P,...$}){return M0("div",{className:U("flex flex-col-reverse gap-2 sm:flex-row sm:justify-end",P),"data-slot":"dialog-footer",...$})}function YP({className:P,...$}){return M0(Q0.Title,{className:U("text-lg leading-none font-semibold",P),"data-slot":"dialog-title",...$})}function DP({className:P,...$}){return M0(Q0.Description,{className:U("text-muted-foreground text-sm",P),"data-slot":"dialog-description",...$})}import{useContext as t5}from"react";import{createContext as t1}from"react";var EP=t1(void 0);import{createContext as s1}from"react";var jP=s1(void 0);import{useCallback as A0,useMemo as $4,useState as r5}from"react";import{useCallback as e,useEffect as K5,useMemo as u5,useRef as z5,useState as e0}from"react";import{RRule as e1}from"rrule";var xP=(P)=>{return new Date(Date.UTC(P.year(),P.month(),P.date(),P.hour(),P.minute(),P.second(),P.millisecond()))},P4=(P,$)=>{return $.year(P.getUTCFullYear()).month(P.getUTCMonth()).date(P.getUTCDate()).hour(P.getUTCHours()).minute(P.getUTCMinutes()).second(P.getUTCSeconds()).millisecond(P.getUTCMilliseconds())},_P=(P)=>{return Boolean(P.rrule||P.recurrenceId||P.uid)},R0=(P)=>{return P.uid||`${P.id}@ilamy.calendar`},Y5=({event:P,currentEvents:$,startDate:Z,endDate:q})=>{if(!P.rrule)return[];try{let X=xP(P.start),f=P.rrule.until?xP(M(P.rrule.until)):void 0,Y={...P.rrule,dtstart:X,until:f},Q=new e1(Y),J=R0(P),K=$.filter((A)=>A.recurrenceId&&R0(A)===J),L=P.end.diff(P.start),z=xP(Z.subtract(L,"millisecond")),p=xP(q);return Q.between(z,p,!0).map((A,W)=>{let _=P4(A,P.start),N=K.find((h)=>JP(h.recurrenceId)?.isSame(_));if(N)return{...P,...N};let O=P.end.diff(P.start),S=_.add(O,"millisecond"),b=`${P.id}_${W}`,B=R0(P);return{...P,id:b,start:_,end:S,uid:B,rrule:void 0}}).filter((A)=>{if(P.exdates&&P.exdates.length>0){let N=A.start.toISOString();if(P.exdates?.includes(N))return!1}return A.start.isSameOrBefore(q)&&A.end.isSameOrAfter(Z)})}catch(X){throw Error(`Invalid RRULE options: ${JSON.stringify(P.rrule)}. Error: ${X instanceof Error?X.message:"Unknown error"}`)}},y5=({targetEvent:P,updates:$,currentEvents:Z,scope:q})=>{let X=[...Z],f=R0(P),Y=X.findIndex((J)=>{return R0(J)===f&&J.rrule&&!J.recurrenceId});if(Y===-1)throw Error("Base recurring event not found");let Q=X[Y];switch(q){case"this":{let J=P.start.toISOString(),L=[...Q.exdates||[],J],z={...Q,exdates:L};X[Y]=z;let p=`${P.id}_modified_${Date.now()}`,F={...j5(P,["width","height","top","left","right"]),...$,id:p,recurrenceId:J,uid:R0(Q),rrule:void 0};X.push(F);break}case"following":{let K=P.start.subtract(1,"day").endOf("day").toDate(),L={...Q,rrule:{...Q.rrule,until:K}};X[Y]=L;let z=Q.end.diff(Q.start),p=$.start||P.start,F=$.end||p.add(z),G=`${Q.id}_following`,A=`${G}@ilamy.calendar`,W={...Q,...$,rrule:{...Q.rrule,...$.rrule,dtstart:p.toDate()},id:G,uid:A,start:p,end:F,recurrenceId:void 0};X.push(W);break}case"all":{let J={...Q,...$};X[Y]=J;break}default:throw Error(`Invalid scope: ${q}. Must be 'this', 'following', or 'all'`)}return X},v5=({targetEvent:P,currentEvents:$,scope:Z})=>{let q=[...$],X=R0(P),f=q.findIndex((Q)=>{return R0(Q)===X&&Q.rrule&&!Q.recurrenceId});if(f===-1)throw Error("Base recurring event not found");let Y=q[f];switch(Z){case"this":{let Q=P.start.toISOString(),K=[...Y.exdates||[],Q],L={...Y,exdates:K};q[f]=L;break}case"following":{let J=P.start.subtract(1,"day").endOf("day").toDate(),K={...Y,rrule:{...Y.rrule,until:J}};q[f]=K;break}case"all":{let Q=R0(P);return q.filter((K)=>R0(K)!==Q)}default:throw Error(`Invalid scope: ${Z}. Must be 'this', 'following', or 'all'`)}return q};var _5={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($),q=P.isBefore(Z)?Z.subtract(1,"week"):Z;return Array.from({length:7},(X,f)=>q.add(f,"day"))}function yP(P,$){let Z=Y0(P.startOf("month"),$);return Array.from({length:6},(q,X)=>{let f=Z[0].add(X,"week");return Y0(f,$)})}function c5(P){let $=P.daysInMonth(),Z=P.startOf("month");return Array.from({length:$},(q,X)=>Z.add(X,"day"))}function o5({referenceDate:P=M(),length:$=24}={}){let Z=P.startOf("day");return Array.from({length:$},(q,X)=>Z.hour(X).minute(0).second(0).millisecond(0))}var E0=1,i5=24,F0=24,KP=4,l5="bg-secondary text-muted-foreground pointer-events-none",j0={sunday:0,monday:1,tuesday:2,wednesday:3,thursday:4,friday:5,saturday:6};var d5={day:"day",week:"week",month:"month",year:"year"},U5=(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 X=Y0(P,Z);return{start:X[0].startOf("day"),end:X[6].endOf("day")}}let q=yP(P,Z);return{start:q[0][0].startOf("day"),end:q[5][6].endOf("day")}},vP=(P)=>{let{events:$=[],firstDayOfWeek:Z=0,initialView:q="month",initialDate:X=M(),businessHours:f,onEventAdd:Y,onEventUpdate:Q,onEventDelete:J,onDateChange:K,onViewChange:L,locale:z,timezone:p,translations:F,translator:G}=P,[A,W]=e0(M.isDayjs(X)?X:M(X)),[_,N]=e0(q),[O,S]=e0($),[b,B]=e0(!1),[H,h]=e0(null),[o,l]=e0(null),[x,E]=e0(z||"en"),j=z5($),g=z5(p),a=z5(z),X0=u5(()=>{if(G)return G;if(F)return(I)=>F[I]||I;return(I)=>_5[I]||I},[F,G]),z0=e((I,m)=>{let u=[];for(let Z0 of O)if(Z0.rrule)u.push(...Y5({event:Z0,currentEvents:O,startDate:I,endDate:m}));else{let w=Z0.start.isSameOrAfter(I)&&Z0.start.isSameOrBefore(m),i=Z0.end.isSameOrAfter(I)&&Z0.end.isSameOrBefore(m),B0=Z0.start.isBefore(I)&&Z0.end.isAfter(m);if(w||i||B0)u.push(Z0)}return u},[O]),R=e(()=>{return U5(A,_,Z)},[A,_,Z]),n=u5(()=>{let{start:I,end:m}=R();return z0(I,m)},[z0,R]);K5(()=>{if($!==j.current)S($),j.current=$},[$]),K5(()=>{if(z&&z!==a.current)E(z),M.locale(z),W((I)=>I.locale(z)),a.current=z},[z]),K5(()=>{if(p&&p!==g.current)M.tz.setDefault(p),W((I)=>I.tz(p)),S((I)=>I.map((m)=>({...m,start:m.start.tz(p),end:m.end.tz(p)}))),g.current=p},[p]);let $0=e((I)=>{W(I);let m=U5(I,_,Z);K?.(I,m)},[K,_,Z]),t=e((I)=>$0(I),[$0]),q0=e((I)=>{let m=I===1?A.add(1,d5[_]):A.subtract(1,d5[_]);$0(m)},[A,_,$0]),s=e(()=>q0(1),[q0]),c=e(()=>q0(-1),[q0]),fP=e(()=>$0(M()),[$0]),T0=e((I)=>{S((m)=>[...m,I]),Y?.(I)},[Y]),n0=e((I,m)=>{let u=O.find((w)=>w.id===I);if(!u)return;let Z0={...u,...m};S((w)=>w.map((i)=>i.id===I?Z0:i)),Q?.(Z0)},[O,Q]),t0=e((I,m,u)=>{Q?.({...I,...m}),S(y5({targetEvent:I,updates:m,currentEvents:O,scope:u.scope}))},[O,Q]),s0=e((I,m)=>{J?.(I),S(v5({targetEvent:I,currentEvents:O,scope:m.scope}))},[O,J]),T=e((I)=>{let m=O.find((u)=>u.id===I);if(!m)return;S((u)=>u.filter((Z0)=>Z0.id!==I)),J?.(m)},[O,J]),U0=e((I)=>{if(I?.start)l(I.start);let m=I?.start??A;h({title:X0("newEvent"),start:m,end:I?.end??m.add(1,"hour"),resourceId:I?.resourceId,description:"",allDay:I?.allDay??!1}),B(!0)},[A,X0]),w0=e(()=>{l(null),h(null),B(!1)},[]),H0=e((I)=>{N(I),L?.(I);let m=U5(A,I,Z);K?.(A,m)},[L,K,A,Z]),kP=e((I)=>{let m=I.uid;return O.find((u)=>(u.uid||`${u.id}@ilamy.calendar`)===m&&u.rrule)||null},[O]);return{currentDate:A,view:_,events:n,rawEvents:O,isEventFormOpen:b,selectedEvent:H,selectedDate:o,firstDayOfWeek:Z,dayMaxEvents:KP,currentLocale:x,businessHours:f,setCurrentDate:W,selectDate:t,setView:H0,nextPeriod:s,prevPeriod:c,today:fP,addEvent:T0,updateEvent:n0,updateRecurringEvent:t0,deleteEvent:T,deleteRecurringEvent:s0,openEventForm:U0,closeEventForm:w0,setSelectedEvent:h,setIsEventFormOpen:B,setSelectedDate:l,getEventsForDateRange:z0,findParentRecurringEvent:kP,t:X0}};import{jsx as Z4}from"react/jsx-runtime";var a5=(P)=>{if(P.resourceIds)return P.resourceIds;if(P.resourceId!==void 0)return[P.resourceId];return[]},n5=({children:P,events:$=[],resources:Z=[],firstDayOfWeek:q=0,initialView:X="month",initialDate:f,renderEvent:Y,onEventClick:Q,onCellClick:J,onViewChange:K,onEventAdd:L,onEventUpdate:z,onEventDelete:p,onDateChange:F,locale:G,timezone:A,disableCellClick:W,disableEventClick:_,disableDragAndDrop:N,dayMaxEvents:O,eventSpacing:S=1,stickyViewHeader:b=!0,viewHeaderClassName:B="",headerComponent:H,headerClassName:h,translations:o,translator:l,renderResource:x,renderEventForm:E,businessHours:j,timeFormat:g="12-hour",classesOverride:a,orientation:X0="horizontal",renderCurrentTimeIndicator:z0,renderHour:R,hideNonBusinessHours:n=!1,hiddenDays:$0})=>{let[t]=r5(Z),[q0,s]=r5(new Set(Z.map((w)=>w.id))),c=vP({events:$,firstDayOfWeek:q,initialView:X,initialDate:f,businessHours:j,onEventAdd:L,onEventUpdate:z,onEventDelete:p,onDateChange:F,onViewChange:K,locale:G,timezone:A,translations:o,translator:l}),fP=A0((w)=>{s((i)=>{let B0=new Set(i);if(B0.has(w))B0.delete(w);else B0.add(w);return B0})},[]),T0=A0((w)=>{s((i)=>new Set(i).add(w))},[]),n0=A0((w)=>{s((i)=>{let B0=new Set(i);return B0.delete(w),B0})},[]),t0=A0(()=>{s(new Set(t.map((w)=>w.id)))},[t]),s0=A0(()=>{s(new Set)},[]),T=A0((w)=>{return c.events.filter((i)=>{if(i.resourceIds)return i.resourceIds.includes(w);return i.resourceId===w})},[c.events]),U0=A0((w)=>{return c.events.filter((i)=>{return a5(i).some((w1)=>w.includes(w1))})},[c.events]),w0=A0((w)=>{return t.find((i)=>i.id===w)},[t]),H0=A0(()=>{return t.filter((w)=>q0.has(w.id))},[t,q0]),kP=A0((w)=>{return Boolean(w.resourceIds&&w.resourceIds.length>1)},[]),I=A0((w)=>{c.setSelectedEvent(w),c.setIsEventFormOpen(!0)},[c]),m=A0((w)=>{if(_)return;if(Q)Q(w);else I(w)},[_,Q,I]),u=A0((w)=>{if(W)return;if(J)J(w);else{let i={title:c.t("newEvent"),start:w.start,end:w.end,description:"",allDay:!1};if(w.resourceId!==void 0)i.resourceId=w.resourceId;c.setSelectedEvent(i),c.setSelectedDate(w.start),c.setIsEventFormOpen(!0)}},[J,W,c]),Z0=$4(()=>({...c,view:c.view,setView:c.setView,events:c.events,rawEvents:c.rawEvents,resources:t,visibleResources:q0,toggleResourceVisibility:fP,showResource:T0,hideResource:n0,showAllResources:t0,hideAllResources:s0,getEventsForResource:T,getEventsForResources:U0,getResourceById:w0,getVisibleResources:H0,isEventCrossResource:kP,getEventResourceIds:a5,onEventClick:m,onCellClick:u,headerComponent:H,headerClassName:h,renderEvent:Y,renderResource:x,renderEventForm:E,locale:G,timezone:A,disableCellClick:W,disableEventClick:_,disableDragAndDrop:N,dayMaxEvents:O,eventSpacing:S,stickyViewHeader:b,viewHeaderClassName:B,businessHours:j,timeFormat:g,classesOverride:a,orientation:X0,renderCurrentTimeIndicator:z0,renderHour:R,hideNonBusinessHours:n,hiddenDays:$0}),[c,t,q0,fP,T0,n0,t0,s0,T,U0,w0,H0,kP,m,u,Y,x,E,G,A,W,_,N,O,S,b,B,H,h,j,g,a,X0,z0,R,n,$0]);return Z4(jP.Provider,{value:Z0,children:P})};function V(P){let $=t5(jP),Z=t5(EP),q=$||Z;if(!q)throw Error("useSmartCalendarContext must be used within a CalendarProvider or ResourceCalendarProvider");return P?P(q):q}function f4(){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 W0,jsxs as PP}from"react/jsx-runtime";function FP({isOpen:P,onClose:$,onConfirm:Z,operationType:q,eventTitle:X}){let{t:f}=V((J)=>({t:J.t})),Y=(J)=>{Z(J),$()},Q=q==="edit";return W0(XP,{onOpenChange:$,open:P,children:PP(qP,{className:"max-w-md",children:[PP(QP,{children:[W0(YP,{children:Q?f("editRecurringEvent"):f("deleteRecurringEvent")}),PP(DP,{children:['"',X,'"'," ",Q?f("editRecurringEventQuestion"):f("deleteRecurringEventQuestion")]})]}),PP("div",{className:"space-y-3",children:[W0(k,{className:"w-full justify-start h-auto p-4",onClick:()=>Y("this"),variant:"outline",children:PP("div",{className:"text-left",children:[W0("div",{className:"font-medium",children:f("thisEvent")}),W0("div",{className:"text-sm text-muted-foreground",children:Q?f("onlyChangeThis"):f("onlyDeleteThis")})]})}),W0(k,{className:"w-full justify-start h-auto p-4",onClick:()=>Y("following"),variant:"outline",children:PP("div",{className:"text-left",children:[W0("div",{className:"font-medium",children:f("thisAndFollowingEvents")}),W0("div",{className:"text-sm text-muted-foreground",children:Q?f("changeThisAndFuture"):f("deleteThisAndFuture")})]})}),W0(k,{className:"w-full justify-start h-auto p-4",onClick:()=>Y("all"),variant:"outline",children:PP("div",{className:"text-left",children:[W0("div",{className:"font-medium",children:f("allEvents")}),W0("div",{className:"text-sm text-muted-foreground",children:Q?f("changeEntireSeries"):f("deleteEntireSeries")})]})})]}),W0(CP,{children:W0(k,{onClick:$,variant:"outline",children:f("cancel")})})]})})}var s5=(P,$)=>{let{active:Z,over:q}=P;if(!Z||!q||!$)return null;let X=q.data.current||{},f=X.type==="time-cell",{resourceId:Y,allDay:Q}=X,J;if(f){let{date:p,hour:F=0,minute:G=0}=X;J=M(p).hour(F).minute(G)}else{let{date:p}=X;J=M(p)}let K=$.end.diff($.start,"second"),L=J.add(K,"second");if(L.isSame(L.startOf("day")))L=L.subtract(1,"day").endOf("day");let z={start:J,end:L,resourceId:Y,allDay:f?!1:Q??$.allDay};return{activeEvent:$,updates:z}};import{DragOverlay as J4}from"@dnd-kit/core";import{snapCenterToCursor as X4}from"@dnd-kit/modifiers";import{useImperativeHandle as q4,useState as Q4}from"react";import{jsx as e5}from"react/jsx-runtime";var P2=({ref:P})=>{let[$,Z]=Q4(null);return q4(P,()=>({setActiveEvent:Z})),e5(J4,{modifiers:[X4],children:$&&e5("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 f2,jsxs as J2,Fragment as G4}from"react/jsx-runtime";function cP({children:P}){let $=Z2(null),Z=Z2(null),{updateEvent:q,updateRecurringEvent:X,disableDragAndDrop:f}=V((_)=>({updateEvent:_.updateEvent,updateRecurringEvent:_.updateRecurringEvent,disableDragAndDrop:_.disableDragAndDrop})),[Y,Q]=L4({isOpen:!1,event:null,updates:null}),J=$2(_4,{activationConstraint:{distance:2}}),K=$2(z4,{activationConstraint:{delay:100,tolerance:5}}),L=U4(J,K),z=(_,N)=>{if(!_||!_.id)return;if(!N||Object.keys(N).length===0)return;if(_P(_))Q({isOpen:!0,event:_,updates:N});else q(_.id,N)},p=(_)=>{if(!Y.event||!Y.updates){Q({isOpen:!1,event:null,updates:null});return}try{X(Y.event,Y.updates,{scope:_,eventDate:Y.event.start})}catch{}finally{Q({isOpen:!1,event:null,updates:null})}},F=()=>{Q({isOpen:!1,event:null,updates:null})},G=(_)=>{let{active:N}=_;if(N.data.current?.type==="calendar-event")Z.current?.setActiveEvent(N.data.current.event),$.current=N.data.current.event},A=(_)=>{let N=s5(_,$.current);if(N){let{activeEvent:O,updates:S}=N;z(O,S)}$.current=null,Z.current?.setActiveEvent(null)},W=(_)=>{$.current=null};if(f)return P;return J2(G4,{children:[J2(Y4,{collisionDetection:K4,onDragCancel:W,onDragEnd:A,onDragStart:G,sensors:L,children:[P,f2(P2,{ref:Z})]}),f2(FP,{eventTitle:Y.event?.title||"",isOpen:Y.isOpen,onClose:F,onConfirm:p,operationType:"edit"})]})}import{useEffect as o4,useMemo as i4,useState as l0}from"react";import*as oP from"@radix-ui/react-checkbox";import{CheckIcon as A4}from"lucide-react";import{jsx as L5}from"react/jsx-runtime";function x0({className:P,...$}){return L5(oP.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:L5(oP.Indicator,{className:"flex items-center justify-center text-current transition-none","data-slot":"checkbox-indicator",children:L5(A4,{className:"size-3.5"})})})}import{PopoverClose as O4}from"@radix-ui/react-popover";import{Calendar as B4}from"lucide-react";import{useEffect as M4,useRef as R4,useState as I4}from"react";import{ChevronDownIcon as W4,ChevronLeftIcon as N4,ChevronRightIcon as p4}from"lucide-react";import*as iP from"react";import{DayPicker as F4,getDefaultClassNames as X2}from"react-day-picker";import{jsx as y0}from"react/jsx-runtime";function q2({className:P,classNames:$,showOutsideDays:Z=!0,captionLayout:q="label",buttonVariant:X="ghost",formatters:f,components:Y,...Q}){let J=X2();return y0(F4,{captionLayout:q,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(gP({variant:X}),"size-(--cell-size) aria-disabled:opacity-50 p-0 select-none",J.button_previous),button_next:U(gP({variant:X}),"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",q==="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",Q.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:K,rootRef:L,...z})=>{return y0("div",{className:U(K),"data-slot":"calendar",ref:L,...z})},Chevron:({className:K,orientation:L,...z})=>{if(L==="left")return y0(N4,{className:U("size-4",K),...z});if(L==="right")return y0(p4,{className:U("size-4",K),...z});return y0(W4,{className:U("size-4",K),...z})},DayButton:V4,WeekNumber:({children:K,...L})=>{return y0("td",{...L,children:y0("div",{className:"flex size-(--cell-size) items-center justify-center text-center",children:K})})},...Y},formatters:{formatMonthDropdown:(K)=>K.toLocaleString("default",{month:"short"}),...f},showOutsideDays:Z,...Q})}function V4({className:P,day:$,modifiers:Z,...q}){let X=X2(),f=iP.useRef(null);return iP.useEffect(()=>{if(Z.focused)f.current?.focus()},[Z.focused]),y0(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",X.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",...q})}import*as m0 from"@radix-ui/react-popover";import{jsx as lP}from"react/jsx-runtime";function v0({...P}){return lP(m0.Root,{"data-slot":"popover",...P})}function c0({...P}){return lP(m0.Trigger,{"data-slot":"popover-trigger",...P})}function o0({className:P,align:$="center",sideOffset:Z=4,...q}){return lP(m0.Portal,{children:lP(m0.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,...q})})}import{jsx as zP,jsxs as G5}from"react/jsx-runtime";function VP({date:P,closeOnSelect:$,onChange:Z,label:q="Pick a date",className:X,disabled:f}){let Y=R4(null),[Q,J]=I4(P);M4(()=>{J(P)},[P]);let K=(L)=>{if(J(L),$)Y.current?.click();Z?.(L)};return zP("div",{className:X,children:G5(v0,{children:[zP(c0,{asChild:!0,children:G5(k,{className:U("data-[empty=true]:text-muted-foreground w-full justify-start text-left font-normal"),"data-empty":!P,variant:"outline",children:[zP(B4,{}),Q?M(Q).format("MMM D, YYYY"):zP("span",{children:q})]})}),G5(o0,{align:"start",className:"w-auto p-0",children:[zP(O4,{ref:Y}),zP(q2,{captionLayout:"dropdown",defaultMonth:Q,disabled:f,mode:"single",onSelect:K,selected:Q})]})]})})}import{jsx as S4}from"react/jsx-runtime";function k0({className:P,type:$,...Z}){return S4("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 Q2 from"@radix-ui/react-label";import{jsx as b4}from"react/jsx-runtime";function d({className:P,...$}){return b4(Q2.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 I0 from"@radix-ui/react-scroll-area";import{jsx as OP,jsxs as T4}from"react/jsx-runtime";function S0({className:P,children:$,viewPortProps:Z,...q}){return T4(I0.Root,{className:U("relative",P),"data-slot":"scroll-area",...q,children:[OP(I0.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:$}),OP(h0,{}),OP(I0.Corner,{})]})}function h0({className:P,orientation:$="vertical",...Z}){return OP(I0.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:OP(I0.ScrollAreaThumb,{className:"bg-border relative flex-1 rounded-full","data-slot":"scroll-area-thumb"})})}import{Clock as H4}from"lucide-react";import{useEffect as m4,useRef as _2,useState as A5}from"react";import{useMemo as w4}from"react";function Y2({timeFormat:P="12-hour",minTime:$="00:00",maxTime:Z="23:45"}){return{timeOptions:w4(()=>{let f=[],[Y,Q]=$.split(":").map(Number),[J,K]=Z.split(":").map(Number),L=Y*60+Q,z=J*60+K;for(let p=L;p<=z;p+=15){let F=Math.floor(p/60),G=p%60,A=`${F.toString().padStart(2,"0")}:${G.toString().padStart(2,"0")}`;f.push(A)}return f},[$,Z]),formatTime:(f)=>{let[Y,Q]=f.split(":").map(Number),J=Y>=12?"PM":"AM",K=Y===0?12:Y>12?Y-12:Y;if(P==="24-hour")return`${Y.toString().padStart(2,"0")}:${Q.toString().padStart(2,"0")}`;return`${K}:${Q.toString().padStart(2,"0")} ${J}`}}}import{jsx as i0,jsxs as W5}from"react/jsx-runtime";var k4=(P)=>{P.stopPropagation()};function N5({value:P,onChange:$,minTime:Z="00:00",maxTime:q="23:45",timeFormat:X="12-hour",placeholder:f="Select time...",className:Y,disabled:Q=!1,name:J}){let[K,L]=A5(!1),[z,p]=A5(""),F=_2(null),G=_2(null),[A,W]=A5(0),{timeOptions:_,formatTime:N}=Y2({timeFormat:X,minTime:Z,maxTime:q}),O=_.filter((B)=>{return N(B).toLowerCase().includes(z.toLowerCase())}),S=(B)=>{$(B),L(!1),p("")};m4(()=>{if(K){if(G.current)W(G.current.offsetWidth);setTimeout(()=>{F.current?.focus()},0)}},[K]);let b=P?N(P):f;return W5(v0,{onOpenChange:L,open:K,children:[i0(c0,{asChild:!0,children:W5(k,{"aria-controls":"time-picker-listbox","aria-expanded":K,className:U("w-full justify-start",Y),"data-testid":`time-picker-${J}`,disabled:Q,ref:G,role:"combobox",variant:"outline",children:[i0(H4,{className:"mr-2 h-4 w-4"}),b]})}),W5(o0,{align:"start",className:"p-0",style:{width:A},children:[i0("div",{className:"p-2 border-b",children:i0(k0,{className:"h-8",onChange:(B)=>p(B.target.value),placeholder:"Search time...",ref:F,value:z})}),i0(S0,{className:"h-[200px]",onWheel:k4,children:i0("div",{className:"p-1",children:O.length===0?i0("div",{className:"py-6 text-center text-sm text-muted-foreground",children:"N/A"}):O.map((B)=>{let H=N(B);return i0("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",B===P&&"bg-accent text-accent-foreground"),onClick:()=>S(B),type:"button",children:H},B)})})})]})]})}var p5=(P,$)=>{if(!$)return!0;let Z=!1;return UP($,{date:P,onMatch:()=>{Z=!0}}),Z},K2=({date:P,hour:$,minute:Z=0,businessHours:q})=>{if(!q)return!0;if($===void 0)return p5(P,q);let X=!1,f=$*60+Z;return UP(q,{date:P,onMatch:(Y)=>{let Q=Y.startTime??9,J=Y.endTime??17,K=Q*60,L=J*60;if(f>=K&&f<L)X=!0}}),X},UP=(P,$)=>{let{date:Z,onMatch:q}=$;if(!P)return;let X=Array.isArray(P)?P:[P];for(let f of X)if(Z&&f.daysOfWeek){let Y=Z.day();if(f.daysOfWeek.some((Q)=>j0[Q]===Y))q(f)}else q(f)},uP=(P)=>{let{allDates:$,businessHours:Z,resourceBusinessHours:q=[],hideNonBusinessHours:X}=P,f=24,Y=0,Q=!1,J=(K)=>{Q=!0,f=Math.min(f,K.startTime??9),Y=Math.max(Y,K.endTime??17)};for(let K of $){UP(Z,{date:K,onMatch:J});for(let L of q)UP(L,{date:K,onMatch:J})}if(!Q&&X){UP(Z,{onMatch:J});for(let K of q)UP(K,{onMatch:J});if(!Q)f=9,Y=17,Q=!0}return{minStart:f,maxEnd:Y,hasBusinessHours:Q}};var F5=(P,$,Z)=>{let[q,X]=$.split(":").map(Number),f=M(P).hour(q).minute(X);return Z?f.hour(0).minute(0):f},z2=(P,$,Z)=>{let[q,X]=$.split(":").map(Number),f=M(P).hour(q).minute(X);return Z?f.hour(23).minute(59):f},V5=(P,$)=>{if(!$)return{min:"00:00",max:"23:59"};let Z=M(P),{minStart:q,maxEnd:X,hasBusinessHours:f}=uP({allDates:[Z],businessHours:$,hideNonBusinessHours:!1});if(!f)return{min:"00:00",max:"23:59"};return{min:`${q.toString().padStart(2,"0")}:00`,max:`${(X-1).toString().padStart(2,"0")}:45`}};import{useEffect as E4,useMemo as j4,useState as B2}from"react";import{RRule as K0}from"rrule";import{jsx as dP}from"react/jsx-runtime";function U2({className:P,...$}){return dP("div",{className:U("text-card-foreground flex flex-col gap-6 rounded-xl border shadow-sm",P),"data-slot":"card",...$})}function L2({className:P,...$}){return dP("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 G2({className:P,...$}){return dP("div",{className:U("leading-none font-semibold",P),"data-slot":"card-title",...$})}function A2({className:P,...$}){return dP("div",{className:U("p-4 pt-0",P),"data-slot":"card-content",...$})}import*as D from"@radix-ui/react-select";import{CheckIcon as h4,ChevronDownIcon as W2,ChevronUpIcon as g4}from"lucide-react";import{jsx as f0,jsxs as O5}from"react/jsx-runtime";function N2({...P}){return f0(D.Root,{"data-slot":"select",...P})}function p2({...P}){return f0(D.Value,{"data-slot":"select-value",...P})}function F2({className:P,size:$="default",children:Z,...q}){return O5(D.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",...q,children:[Z,f0(D.Icon,{asChild:!0,children:f0(W2,{className:"size-4 opacity-50"})})]})}function V2({className:P,children:$,position:Z="popper",align:q="center",...X}){return f0(D.Portal,{children:O5(D.Content,{align:q,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,...X,children:[f0(C4,{}),f0(D.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(D4,{})]})})}function O2({className:P,children:$,...Z}){return O5(D.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(D.ItemIndicator,{children:f0(h4,{className:"size-4"})})}),f0(D.ItemText,{children:$})]})}function C4({className:P,...$}){return f0(D.ScrollUpButton,{className:U("flex cursor-default items-center justify-center py-1",P),"data-slot":"select-scroll-up-button",...$,children:f0(g4,{className:"size-4"})})}function D4({className:P,...$}){return f0(D.ScrollDownButton,{className:U("flex cursor-default items-center justify-center py-1",P),"data-slot":"select-scroll-down-button",...$,children:f0(W2,{className:"size-4"})})}import{jsx as y,jsxs as _0}from"react/jsx-runtime";var B5={DAILY:K0.DAILY,WEEKLY:K0.WEEKLY,MONTHLY:K0.MONTHLY,YEARLY:K0.YEARLY},x4=Object.fromEntries(Object.entries(B5).map(([P,$])=>[$,P])),M2=[K0.SU,K0.MO,K0.TU,K0.WE,K0.TH,K0.FR,K0.SA],y4=["sun","mon","tue","wed","thu","fri","sat"],R2=(P)=>Math.max(1,Number.parseInt(P,10)||1),v4=(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")}},I2=({value:P,onChange:$})=>{let{t:Z}=V((A)=>({t:A.t})),[q,X]=B2(!!P),[f,Y]=B2(()=>P||null),Q=j4(()=>y4.map((A,W)=>({value:M2[W],label:Z(A)})),[Z]);E4(()=>{if(X(!!P),P)Y(P)},[P]);let J=(A)=>{if(!f)return;let W={...f,...A};Y(W),$(q?W:null)},K=(A)=>{if(X(A),!A){$(null);return}if(f){$(f);return}let W={freq:K0.DAILY,interval:1};Y(W),$(W)},L=(A)=>{let W=f?.byweekday||[],_=M2[A],N=W.includes(_)?W.filter((O)=>O!==_):[...W,_];J({byweekday:N.length?N:void 0})},z=(A)=>{let W={count:void 0,until:void 0};if(A==="count")W.count=f?.count||1;if(A==="until")W.until=f?.until||M().add(1,"month").endOf("day").toDate();J(W)},p=f?.until?"until":f?.count?"count":"never",F=x4[f?.freq??K0.DAILY]||"DAILY",G=Array.isArray(f?.byweekday)?f.byweekday:f?.byweekday?[f.byweekday]:[];return _0(U2,{"data-testid":"recurrence-editor",children:[_0(L2,{className:"pb-3",children:[_0("div",{className:"flex items-center space-x-2",children:[y(x0,{checked:q,"data-testid":"toggle-recurrence",id:"recurring",onCheckedChange:K}),y(G2,{className:"text-sm",children:Z("repeat")})]}),q&&P&&y("p",{className:"text-xs text-muted-foreground",children:v4(P,Z)})]}),q&&y(A2,{className:"pt-0",children:_0("div",{className:"space-y-4",children:[_0("div",{className:"grid grid-cols-2 gap-4",children:[_0("div",{children:[y(d,{className:"text-xs",htmlFor:"frequency",children:Z("repeats")}),_0(N2,{onValueChange:(A)=>J({freq:B5[A]}),value:F,children:[y(F2,{className:"h-8","data-testid":"frequency-select",id:"frequency",children:y(p2,{})}),y(V2,{children:Object.keys(B5).map((A)=>y(O2,{value:A,children:Z(A.toLowerCase())},A))})]})]}),_0("div",{children:[y(d,{className:"text-xs",htmlFor:"interval",children:Z("every")}),y(k0,{className:"h-8",id:"interval",min:"1",onChange:(A)=>J({interval:R2(A.target.value)}),type:"number",value:f?.interval||1})]})]}),f?.freq===K0.WEEKLY&&_0("div",{children:[y(d,{className:"text-xs",children:Z("repeatOn")}),y("div",{className:"flex flex-wrap gap-1 mt-1",children:Q.map((A,W)=>_0("div",{className:"flex items-center space-x-1",children:[y(x0,{checked:G.includes(A.value),id:`day-${W}`,onCheckedChange:()=>L(W)}),y(d,{className:"text-xs cursor-pointer",htmlFor:`day-${W}`,children:A.label})]},A.label))})]}),_0("div",{children:[y(d,{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:[y(x0,{checked:p==="never",id:"never",onCheckedChange:()=>z("never")}),y(d,{className:"text-xs",htmlFor:"never",children:Z("never")})]}),_0("div",{className:"flex items-center space-x-2",children:[y(x0,{checked:p==="count",id:"after",onCheckedChange:()=>z("count")}),y(d,{className:"text-xs",htmlFor:"after",children:Z("after")}),p==="count"&&y(k0,{className:"h-6 w-16 text-xs","data-testid":"count-input",min:"1",onChange:(A)=>J({count:R2(A.target.value)}),type:"number",value:f?.count||1}),y("span",{className:"text-xs",children:Z("occurrences")})]}),_0("div",{className:"flex items-center space-x-2",children:[y(x0,{checked:p==="until",id:"on",onCheckedChange:()=>z("until")}),y(d,{className:"text-xs",htmlFor:"on",children:Z("on")}),p==="until"&&y(VP,{className:"h-6",date:f?.until??void 0,onChange:(A)=>J({until:A?M(A).endOf("day").toDate():void 0})})]})]})]})]})})]})};import{useCallback as rP,useState as c4}from"react";function S2(P){let{updateRecurringEvent:$,deleteRecurringEvent:Z}=V((K)=>({updateRecurringEvent:K.updateRecurringEvent,deleteRecurringEvent:K.deleteRecurringEvent})),[q,X]=c4({isOpen:!1,operationType:"edit",event:null}),f=rP((K,L)=>{X({isOpen:!0,operationType:"edit",event:K,updates:L,onConfirm:(z)=>{$(K,L,{scope:z,eventDate:K.start})}})},[$]),Y=rP((K)=>{X({isOpen:!0,operationType:"delete",event:K,onConfirm:(L)=>{Z(K,{scope:L,eventDate:K.start})}})},[Z]),Q=rP(()=>{X({isOpen:!1,operationType:"edit",event:null})},[]),J=rP((K)=>{if(q.onConfirm)q.onConfirm(K);Q(),P?.()},[q,Q,P]);return{dialogState:q,openEditDialog:f,openDeleteDialog:Y,closeDialog:Q,handleConfirm:J}}import{jsx as v,jsxs as J0,Fragment as l4}from"react/jsx-runtime";var b2=[{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"}],T2=({selectedEvent:P,onClose:$,onUpdate:Z,onDelete:q,onAdd:X})=>{let{dialogState:f,openEditDialog:Y,openDeleteDialog:Q,closeDialog:J,handleConfirm:K}=S2($),{findParentRecurringEvent:L,t:z,businessHours:p,timeFormat:F,getResourceById:G}=V((T)=>({findParentRecurringEvent:T.findParentRecurringEvent,t:T.t,businessHours:T.businessHours,timeFormat:T.timeFormat,getResourceById:T.getResourceById})),A=P?.start??M(),W=P?.end??M().add(1,"hour"),_=P?L(P):null,[N,O]=l0(A.toDate()),[S,b]=l0(W.toDate()),[B,H]=l0(P?.allDay||!1),[h,o]=l0(P?.color||b2[0].value),[l,x]=l0(A.format("HH:mm")),[E,j]=l0(W.format("HH:mm")),[g,a]=l0({title:P?.title||"",description:P?.description||"",location:P?.location||""}),[X0,z0]=l0(()=>{return P?.rrule||_?.rrule||null}),R=(T)=>{if(!T)return;if(O(T),M(T).isAfter(M(S)))b(T)},n=(T)=>{if(!T)return;if(b(T),T&&M(T).isBefore(M(N)))O(T)},$0=(T)=>{if(x(T),M(N).isSame(M(S),"day")&&T>E)j(T)},t=(T)=>{if(j(T),M(N).isSame(M(S),"day")&&T<l)x(T)},q0=(T)=>{let{name:U0,value:w0}=T.target;a((H0)=>({...H0,[U0]:w0}))};o4(()=>{if(B)j("23:59")},[B]);let s=(T)=>{T.preventDefault();let U0=F5(N,l,B),w0=z2(S,E,B),H0={id:P?.id||M().format("YYYYMMDDHHmmss"),title:g.title,start:U0,end:w0,resourceId:P?.resourceId,description:g.description,location:g.location,allDay:B,color:h,rrule:X0||void 0};if(P?.id&&_P(P)){Y(P,{title:g.title,start:U0,end:w0,description:g.description,location:g.location,allDay:B,color:h,rrule:X0||void 0});return}if(P?.id)Z?.(H0);else X?.(H0);$()},c=()=>{if(P?.id){if(_P(P)){Q(P);return}q?.(P),$()}},fP=(T)=>{if(!T){z0(null);return}let U0=F5(N,l,B);z0({...T,dtstart:U0.toDate()})},T0=i4(()=>{let T=P?.resourceId;if(T&&G){let U0=G(T);if(U0?.businessHours)return U0.businessHours}return p},[P?.resourceId,G,p]),n0=T0?(T)=>!p5(M(T),T0):void 0,t0=V5(N,T0),s0=V5(S,T0);return J0(l4,{children:[J0("form",{className:"flex flex-col flex-1 min-h-0",onSubmit:s,children:[v(S0,{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:[v(d,{className:"text-xs sm:text-sm",htmlFor:"title",children:z("title")}),v(k0,{className:"h-8 text-sm sm:h-9",id:"title",name:"title",onChange:q0,placeholder:z("eventTitlePlaceholder"),required:!0,value:g.title})]}),J0("div",{className:"grid gap-1 sm:gap-2",children:[v(d,{className:"text-xs sm:text-sm",htmlFor:"description",children:z("description")}),v(k0,{className:"h-8 text-sm sm:h-9",id:"description",name:"description",onChange:q0,placeholder:z("eventDescriptionPlaceholder"),value:g.description})]}),J0("div",{className:"flex items-center space-x-2",children:[v(x0,{checked:B,id:"allDay",onCheckedChange:(T)=>H(T===!0)}),v(d,{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:[v(d,{className:"text-xs sm:text-sm",children:z("startDate")}),v(VP,{className:"mt-1",closeOnSelect:!0,date:N,disabled:n0,onChange:R})]}),J0("div",{children:[v(d,{className:"text-xs sm:text-sm",children:z("endDate")}),v(VP,{className:"mt-1",closeOnSelect:!0,date:S,disabled:n0,onChange:n})]})]}),!B&&J0("div",{className:"grid grid-cols-2 gap-2 sm:gap-4",children:[J0("div",{children:[v(d,{className:"text-xs sm:text-sm",children:z("startTime")}),v(N5,{className:"mt-1 h-8 text-sm sm:h-9",maxTime:t0.max,minTime:t0.min,name:"start-time",onChange:$0,timeFormat:F,value:l})]}),J0("div",{children:[v(d,{className:"text-xs sm:text-sm",children:z("endTime")}),v(N5,{className:"mt-1 h-8 text-sm sm:h-9",maxTime:s0.max,minTime:s0.min,name:"end-time",onChange:t,timeFormat:F,value:E})]})]}),J0("div",{className:"grid gap-1 sm:gap-2",children:[v(d,{className:"text-xs sm:text-sm",children:z("color")}),v("div",{className:"flex flex-wrap gap-2",children:b2.map((T)=>v(k,{"aria-label":T.label,className:U(`${T.value} h-6 w-6 rounded-full sm:h-8 sm:w-8`,h===T.value&&"ring-2 ring-black ring-offset-1 sm:ring-offset-2"),onClick:()=>o(T.value),type:"button",variant:"ghost"},T.value))})]}),J0("div",{className:"grid gap-1 sm:gap-2",children:[v(d,{className:"text-xs sm:text-sm",htmlFor:"location",children:z("location")}),v(k0,{className:"h-8 text-sm sm:h-9",id:"location",name:"location",onChange:q0,placeholder:z("eventLocationPlaceholder"),value:g.location})]}),v(I2,{onChange:fP,value:X0})]})}),J0(CP,{className:"mt-4 shrink-0 flex flex-col-reverse gap-2 sm:flex-row sm:gap-0",children:[P?.id&&v(k,{className:"w-full sm:mr-auto sm:w-auto",onClick:c,size:"sm",type:"button",variant:"destructive",children:z("delete")}),J0("div",{className:"flex w-full gap-2 sm:w-auto",children:[v(k,{className:"flex-1 sm:flex-none",onClick:$,size:"sm",type:"button",variant:"outline",children:z("cancel")}),v(k,{className:"flex-1 sm:flex-none",size:"sm",type:"submit",children:P?.id?z("update"):z("create")})]})]})]}),v(FP,{eventTitle:f.event?.title||"",isOpen:f.isOpen,onClose:J,onConfirm:K,operationType:f.operationType})]})};import{jsx as aP,jsxs as w2}from"react/jsx-runtime";var nP=()=>{let{t:P,selectedEvent:$,isEventFormOpen:Z,closeEventForm:q,addEvent:X,updateEvent:f,deleteEvent:Y,renderEventForm:Q}=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})),L={open:Z,onClose:q,selectedEvent:$,onAdd:X,onUpdate:(z)=>{f(z.id,z)},onDelete:(z)=>{Y(z.id)}};if(Q)return Q(L);return aP(XP,{onOpenChange:q,open:Z,children:w2(qP,{className:"flex flex-col h-[90vh] w-[90vw] max-w-[500px] p-4 sm:p-6 overflow-hidden gap-0",children:[w2(QP,{className:"mb-2 sm:mb-4 shrink-0",children:[aP(YP,{className:"text-base sm:text-lg",children:$?.id?P("editEvent"):P("createEvent")}),aP(DP,{className:"text-xs sm:text-sm",children:$?.id?P("editEventDetails"):P("addNewEvent")})]}),aP(T2,{...L})]})})};import{Calendar as Y3,Download as _3,Menu as K3,Plus as z3}from"lucide-react";import{useState as U3}from"react";import{RRule as u4}from"rrule";var M5=`\r
|
|
2
|
+
`,d4=["BEGIN:VTIMEZONE","TZID:UTC","BEGIN:STANDARD","DTSTART:19700101T000000","TZNAME:UTC","TZOFFSETFROM:+0000","TZOFFSETTO:+0000","END:STANDARD","END:VTIMEZONE"].join(M5),sP=(P)=>{return P.replaceAll("\\","\\\\").replaceAll(";","\\;").replaceAll(",","\\,").replaceAll(`
|
|
3
|
+
`,"\\n").replaceAll("\r","")},tP=(P,$=!1)=>{return $?P.format("YYYYMMDD"):P.utc().format("YYYYMMDD[T]HHmmss[Z]")},H2=(P)=>{return P.uid||`${P.id}@ilamy.calendar`},r4=(P)=>{try{return new u4(P).toString().split(`
|
|
4
|
+
`).find((Z)=>Z.startsWith("RRULE:"))||""}catch{return""}},a4=(P)=>{let $=M().utc().format("YYYYMMDD[T]HHmmss[Z]"),Z=P.allDay?";VALUE=DATE":"",q=P.rrule?r4(P.rrule):"",X=P.exdates?.length?P.exdates.map((Q)=>tP(M(Q),P.allDay)).join(","):null,f=P.recurrenceId?tP(M(P.recurrenceId),P.allDay):null;return["BEGIN:VEVENT",`UID:${H2(P)}`,`DTSTART${Z}:${tP(P.start,P.allDay)}`,`DTEND${Z}:${tP(P.end,P.allDay)}`,`SUMMARY:${sP(P.title)}`,P.description&&`DESCRIPTION:${sP(P.description)}`,P.location&&`LOCATION:${sP(P.location)}`,q,X&&`EXDATE:${X}`,f&&`RECURRENCE-ID:${f}`,`DTSTAMP:${$}`,`CREATED:${$}`,`LAST-MODIFIED:${$}`,"STATUS:CONFIRMED","SEQUENCE:0","TRANSP:OPAQUE","END:VEVENT"].filter(Boolean).join(M5)},n4=(P)=>{let $=new Set;return P.filter((Z)=>{let q=H2(Z),X=Z.rrule&&!Z.recurrenceId,f=Z.recurrenceId&&!Z.rrule;if(X)return $.add(q),!0;if(f)return!0;return!Z.rrule&&!Z.recurrenceId&&!$.has(q)})},t4=(P,$="ilamy Calendar")=>{let Z=sP($),q=n4(P).map(a4);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}`,d4,...q,"END:VCALENDAR"].join(M5)},m2=(P,$="calendar.ics",Z="ilamy Calendar")=>{let q=new Blob([t4(P,Z)],{type:"text/calendar;charset=utf-8"}),X=URL.createObjectURL(q),f=$.endsWith(".ics")?$:`${$}.ics`,Y=document.createElement("a");Y.href=X,Y.download=f,document.body.append(Y),Y.click(),Y.remove(),URL.revokeObjectURL(X)};import{ChevronDown as s4}from"lucide-react";import{useMemo as e4,useState as P3}from"react";import{jsx as P0,jsxs as P5,Fragment as eP}from"react/jsx-runtime";var $3=["january","february","march","april","may","june","july","august","september","october","november","december"],Z3=()=>{let{currentDate:P,view:$,selectDate:Z,t:q,firstDayOfWeek:X}=V((_)=>({currentDate:_.currentDate,view:_.view,selectDate:_.selectDate,t:_.t,firstDayOfWeek:_.firstDayOfWeek})),[f,Y]=P3(null),Q=e4(()=>$3.map((_)=>q(_)),[q]),J=P.year(),K=Array.from({length:11},(_,N)=>J-5+N),L=Y0(P,X),z=(_)=>{Z(_),Y(null)},p=()=>P0(eP,{children:Q.map((_,N)=>P0(k,{className:U("justify-start font-normal",P.month()===N&&"bg-primary/10"),onClick:()=>z(P.month(N)),variant:"ghost",children:_},_))}),F=()=>P0(eP,{children:K.map((_)=>P0(k,{className:U("justify-start font-normal",P.year()===_&&"bg-primary/10"),onClick:()=>z(P.year(_)),variant:"ghost",children:_},_))}),G=()=>P0(eP,{children:Array.from({length:7},(_,N)=>{let O=P.subtract(3,"week").add(N,"week"),S=Y0(O,X),b=S[0],B=S[6],H=O.isSame(P,"week"),h=b.month()!==B.month();return P0(k,{className:U("justify-start font-normal",H&&"bg-primary/10"),onClick:()=>z(b),variant:"ghost",children:P5("div",{className:"flex w-full items-center justify-between",children:[P0("span",{children:`${b.format("MMM D")} - ${B.format("D")}`}),h&&P0("span",{className:"ml-0.5 text-xs opacity-70",children:`${b.format("MMM")}-${B.format("MMM")}`})]})},b.format("YYYY-MM-DD"))})}),A=()=>{let _=P.startOf("month"),N=P.daysInMonth();return P0(eP,{children:Array.from({length:N},(O,S)=>{let b=_.date(S+1),B=b.isSame(P,"day"),H=b.isSame(M(),"day");return P0(k,{className:U("justify-start font-normal",B&&"bg-primary/10"),onClick:()=>z(b),variant:"ghost",children:P5("div",{className:"flex w-full items-center justify-between",children:[P0("span",{children:b.format("dddd, MMM D")}),H&&P0("span",{className:"bg-primary text-primary-foreground rounded-sm px-1! text-xs",children:q("today")})]})},b.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:`${L[0].format("MMM D")} - ${L[6].format("MMM D")}`,render:G},{id:"day",hidden:$!=="day",title:P.format("dddd, D"),render:A}].filter((_)=>!_.hidden).map((_)=>P5(v0,{onOpenChange:(N)=>Y(N?_.id:null),open:f===_.id,children:[P0(c0,{asChild:!0,children:P5(k,{className:"flex items-center gap-1 px-1! font-semibold","data-testid":"calendar-month-button",variant:"ghost",children:[P0(C,{className:"flex items-center gap-1 px-1! font-semibold","data-testid":"calendar-month-button",transitionKey:`${_.id}-${P.format("YYYY-MM-DD")}`,children:_.title}),P0(s4,{className:"h-4 w-4"})]})}),P0(o0,{className:"w-40 p-0",children:P0("div",{className:"flex max-h-60 flex-col overflow-auto",children:_.render()})})]},_.id))},k2=Z3;import{ChevronLeft as f3,ChevronRight as J3}from"lucide-react";import{jsx as LP,jsxs as Q3}from"react/jsx-runtime";var X3=["day","week","month","year"],q3=({currentView:P,onChange:$,variant:Z="default",size:q="sm",className:X,onToday:f,onNext:Y,onPrevious:Q})=>{let{t:J,resources:K}=V((G)=>({t:G.t,resources:G.resources})),L=Z==="grid",z=K&&K.length>0,p=(G)=>{return U(L?"w-full":"",P===G&&"bg-primary/80")},F=(G)=>{return P===G?"default":"outline"};return Q3("div",{className:U(L?"grid grid-cols-2 gap-2":"flex gap-1",X),children:[LP(k,{onClick:Q,size:q,variant:"outline",children:LP(f3,{className:"h-4 w-4"})}),LP(k,{onClick:Y,size:q,variant:"outline",children:LP(J3,{className:"h-4 w-4"})}),X3.map((G)=>{if(z&&G==="year")return null;return LP(k,{className:p(G),onClick:()=>$(G),size:q,variant:F(G),children:J(G)},G)}),LP(k,{onClick:f,size:q,variant:"outline",children:J("today")})]})},R5=q3;import{jsx as r,jsxs as g0}from"react/jsx-runtime";var L3=({className:P=""})=>{let{view:$,setView:Z,nextPeriod:q,prevPeriod:X,today:f,openEventForm:Y,headerComponent:Q,headerClassName:J,rawEvents:K,t:L}=V((_)=>({view:_.view,setView:_.setView,nextPeriod:_.nextPeriod,prevPeriod:_.prevPeriod,today:_.today,openEventForm:_.openEventForm,headerComponent:_.headerComponent,headerClassName:_.headerClassName,rawEvents:_.rawEvents,t:_.t})),[z,p]=U3(!1),F=()=>p(!1),G=()=>{let _=`ilamy-calendar-${new Date().toISOString().split("T")[0]}.ics`;m2(K,_,"ilamy Calendar"),F()},A=()=>g0(k,{className:"flex items-center gap-1",onClick:()=>Y(),size:"sm",variant:"default",children:[r(z3,{className:"h-4 w-4"}),r("span",{className:"hidden @4xl:inline",children:L("new")})]}),W=({fullWidth:_=!1})=>g0(k,{className:U("flex items-center gap-1",_&&"w-full gap-2"),onClick:G,size:"sm",variant:"outline",children:[r(_3,{className:"h-4 w-4"}),_?`${L("export")} Calendar (.ics)`:r("span",{className:"hidden @4xl/base-header:inline",children:L("export")})]});if(Q)return Q;return r("div",{className:"@container/base-header w-full","data-testid":"calendar-header",children:g0("div",{className:U("flex justify-center @2xl/base-header:justify-between flex-wrap items-center gap-2",P,J),children:[g0("div",{className:"flex flex-wrap items-center justify-center gap-1 @2xl/base-header:justify-start",children:[r(Y3,{className:"h-5 w-5"}),r(k2,{})]}),g0("div",{className:"flex flex-wrap justify-start @xl/base-header:justify-center gap-1 @4xl/base-header:justify-end overflow-x-auto",children:[g0("div",{className:"hidden @md/base-header:flex items-center justify-start gap-1",children:[r(R5,{className:"justify-end",currentView:$,onChange:Z,onNext:q,onPrevious:X,onToday:f,variant:"default"}),r(A,{}),r(W,{})]}),g0("div",{className:"flex items-center justify-end gap-1 @md/base-header:hidden",children:[r(A,{}),g0(v0,{onOpenChange:p,open:z,children:[r(c0,{asChild:!0,children:r(k,{size:"sm",variant:"outline",children:r(K3,{className:"h-4 w-4"})})}),r(o0,{align:"end",className:"w-[240px] p-2",children:g0("div",{className:"space-y-2",children:[r(R5,{currentView:$,onChange:(_)=>{Z(_),F()},onNext:()=>{q(),F()},onPrevious:()=>{X(),F()},onToday:()=>{f(),F()},variant:"grid"}),r("div",{className:"pt-2 border-t",children:r(W,{fullWidth:!0})})]})})]})]})]})]})})},BP=L3;import{memo as C3}from"react";import{memo as v2,useMemo as w3}from"react";import{useMemo as I5}from"react";var h2=({days:P,events:$,dayMaxEvents:Z,dayNumberHeight:q=i5,gridType:X="day",eventSpacing:f=E0})=>{let Y=P.at(0),Q=P.at(-1);if(!Y||!Q)return[];let J=X==="hour"?Y.startOf("hour"):Y.startOf("day"),K=X==="hour"?Q.endOf("hour"):Q.endOf("day"),L=P.length,z=$.filter((_)=>_.end.diff(_.start,X)>0),p=$.filter((_)=>_.end.diff(_.start,X)===0),F=[...z].sort((_,N)=>{let O=_.start.diff(N.start);if(O!==0)return O;return N.end.diff(N.start)-_.end.diff(_.start)}),G=[...p].sort((_,N)=>_.start.diff(N.start)),A=[];for(let _=0;_<Z;_++){A[_]=[];for(let N=0;N<L;N++)A[_][N]={taken:!1,event:null}}let W=[];for(let _ of F){let N=M.max(_.start.startOf(X),J),O=X==="hour"?_.end.subtract(1,"minute"):_.end,S=M.min(O.startOf(X),K),b=Math.max(0,N.diff(J,X)),B=Math.min(L-1,S.diff(J,X)),H=_.start.startOf(X).isBefore(J),h=_.end.startOf(X).isAfter(K),o=!1,l=-1;for(let x=0;x<Z;x++){let E=!0;for(let j=b;j<=B;j++)if(A[x][j].taken){E=!1;break}if(E){l=x;break}}if(l!==-1){for(let E=b;E<=B;E++)A[l][E]={taken:!0,event:_};let x=B-b+1;W.push({left:b/L*100,width:x/L*100,top:q+f+l*(F0+f),height:F0,position:l,..._,isTruncatedStart:H,isTruncatedEnd:h}),o=!0}if(!o)for(let x=b+1;x<=B;x++){let E=-1;for(let j=0;j<Z;j++){let g=!0;for(let a=x;a<=B;a++)if(A[j][a].taken){g=!1;break}if(g){E=j;break}}if(E!==-1){for(let g=x;g<=B;g++)A[E][g]={taken:!0,event:_};let j=B-x+1;W.push({left:x/L*100,width:j/L*100,top:q+f+E*(F0+f),height:F0,position:E,..._,isTruncatedStart:!0,isTruncatedEnd:h}),o=!0;break}}}for(let _ of G){let N=M.max(_.start.startOf(X),J),O=Math.max(0,Math.min(L-1,N.diff(J,X))),S=!1,b=!1,B=-1;for(let H=0;H<Z;H++)if(!A[H][O].taken){B=H;break}if(B!==-1)A[B][O]={taken:!0,event:_},W.push({left:O/L*100,width:1/L*100,top:q+f+B*(F0+f),height:F0,position:B,..._,isTruncatedStart:!1,isTruncatedEnd:!1})}return W};var S5=({days:P,allDay:$,dayNumberHeight:Z,resourceId:q,gridType:X})=>{let{getEventsForDateRange:f,dayMaxEvents:Y,eventSpacing:Q,getEventsForResource:J}=V(),K=P.at(0),L=P.at(-1),z=K?.startOf("day"),p=L?.endOf("day"),F=I5(()=>{if(!z||!p)return[];let W=f(z,p);if(q){let _=J(q);W=W.filter((N)=>_.some((O)=>String(O.id)===String(N.id)))}if($)W=W.filter((_)=>!!_.allDay===$);return W},[f,J,z,p,q,$]),G=I5(()=>{let W=new Map;for(let _ of P){let N=_.format("YYYY-MM-DD"),O=_.startOf("day"),S=_.endOf("day"),b=F.filter((B)=>{let H=B.start.isSameOrAfter(O)&&B.start.isSameOrBefore(S),h=B.end.isSameOrAfter(O)&&B.end.isSameOrBefore(S),o=B.start.isBefore(O)&&B.end.isAfter(S);return H||h||o});W.set(N,b)}return W},[P,F]);return{positionedEvents:I5(()=>{return h2({days:P,events:F,dayMaxEvents:Y,dayNumberHeight:Z,eventSpacing:Q,gridType:X})},[P,Y,Z,Q,F,X]),dayEventsMap:G}};import R3,{memo as I3,useMemo as j2}from"react";import{jsx as G3}from"react/jsx-runtime";var g2=({date:P,locale:$="en",className:Z})=>{let q=P.isSame(M(),"day");return G3("div",{className:U("flex h-5 w-5 items-center justify-center rounded-full text-xs shrink-0",q&&"bg-primary text-primary-foreground font-medium",Z),"data-testid":q?"day-number-today":`day-number-${P.format("D")}`,children:P.format("D")})};import{useImperativeHandle as V3,useState as C2}from"react";import{useDraggable as A3}from"@dnd-kit/core";import{memo as W3}from"react";import{jsx as MP,jsxs as F3}from"react/jsx-runtime";var N3=(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 p3({elementId:P,event:$,className:Z,style:q,disableDrag:X=!1}){let{onEventClick:f,renderEvent:Y,disableEventClick:Q,disableDragAndDrop:J}=V(),{attributes:K,listeners:L,setNodeRef:z,isDragging:p}=A3({id:P,data:{event:$,type:"calendar-event"},disabled:X||J}),F=()=>{let G=$,A=G.isTruncatedStart,W=G.isTruncatedEnd;return F3("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",N3(Boolean(A),Boolean(W))),style:{backgroundColor:$.backgroundColor,color:$.color},children:[A&&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",A&&"pl-1",W&&"pr-1"),children:$.title}),W&&MP("div",{className:"absolute right-0 top-0 bottom-0 w-0.5 bg-foreground/25"})]})};return MP(C,{className:U("truncate h-full w-full",X||J?Q?"cursor-default":"cursor-pointer":"cursor-grab",p&&!(X||J)&&"cursor-grabbing shadow-lg",Z),layout:!0,layoutId:P,onClick:(G)=>{G.stopPropagation(),f($)},ref:z,style:q,transitionKey:P,...K,...L,children:Y?Y($):MP(F,{})})}var GP=W3(p3,(P,$)=>{return P.elementId===$.elementId&&P.disableDrag===$.disableDrag&&P.className===$.className&&P.event===$.event});import{jsx as RP,jsxs as O3}from"react/jsx-runtime";var D2=({ref:P})=>{let[$,Z]=C2(!1),[q,X]=C2(null),{currentDate:f,firstDayOfWeek:Y}=V();V3(P,()=>({open:()=>Z(!0),close:()=>Z(!1),setSelectedDayEvents:(K)=>X(K)}));let J=f.startOf("month").clone();while(J.day()!==Y)J=J.subtract(1,"day");return RP(XP,{onOpenChange:Z,open:$,children:O3(qP,{className:"max-h-[80vh] max-w-md overflow-y-auto",children:[RP(QP,{children:RP(YP,{children:q?.day.format("MMMM D, YYYY")})}),RP("div",{className:"mt-4 space-y-3",children:q?.events.map((K)=>{return RP(GP,{className:"relative my-1 h-[30px]",elementId:`all-events-dialog-event-$${K.id}`,event:K},K.id)})})]})})};import{useDroppable as B3}from"@dnd-kit/core";import{jsx as M3}from"react/jsx-runtime";function E2({id:P,type:$,date:Z,hour:q,minute:X,resourceId:f,allDay:Y,children:Q,className:J,style:K,"data-testid":L,disabled:z=!1}){let{onCellClick:p,disableDragAndDrop:F,disableCellClick:G,classesOverride:A,view:W}=V(),{isOver:_,setNodeRef:N}=B3({id:P,data:{type:$,date:Z,hour:q,minute:X,resourceId:f,allDay:Y},disabled:F||z}),O=(S)=>{if(S.stopPropagation(),G||z)return;let b=Z.hour(q??0).minute(X??0),B=b.clone();if(q!==void 0&&X!==void 0)B=B.hour(q).minute(X+15);else if(q!==void 0)B=B.hour(q+1).minute(0);else B=B.hour(23).minute(59);p({start:b,end:B,resourceId:f,allDay:Y})};return M3("div",{className:U("droppable-cell",J,_&&!F&&!z&&"bg-accent",G||z?"cursor-default":"cursor-pointer",z&&(A?.disabledCell||l5)),"data-disabled":z.toString(),"data-testid":L,"data-view":W,onClick:O,ref:N,style:K,children:Q})}import{jsx as $5,jsxs as Z5,Fragment as x2}from"react/jsx-runtime";var S3=({day:P,hour:$,minute:Z,className:q="",resourceId:X,gridType:f="day",shouldRenderEvents:Y=!0,allDay:Q=!1,precomputedEvents:J,"data-testid":K,showDayNumber:L=!1,children:z})=>{let p=R3.useRef(null),{dayMaxEvents:F=0,getEventsForDateRange:G,currentDate:A,t:W,getEventsForResource:_,businessHours:N,currentLocale:O,eventSpacing:S,getResourceById:b}=V(),B=j2(()=>{if(!Y)return[];if(J)return J;let R=G(P.startOf(f),P.endOf(f));if(Q)R=R.filter((n)=>n.allDay);if(X){let n=_(X)??[];return R.filter(($0)=>n.some((t)=>String(t.id)===String($0.id)))}return R},[J,P,X,G,_,f,Y,Q]),H=(R,n)=>{p.current?.setSelectedDayEvents({day:R,events:n}),p.current?.open()},h=P.month()===A.month(),o=B.length-F,l=o>0,x=j2(()=>{if(X&&b){let R=b(X);if(R?.businessHours)return R.businessHours}return N},[X,b,N]),E=K2({date:P,hour:f==="hour"?P.hour():void 0,businessHours:x}),j=P.format("HH"),g=P.format("mm"),a=`day-cell-${P.format("YYYY-MM-DD")}`,X0=f==="hour"?`${a}-${j}-${g}`:a,z0=`day-cell-${P.toISOString()}${Q?"-allday":""}${X?`-resource-${X}`:""}`;return Z5(x2,{children:[$5(E2,{allDay:Q,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",q),"data-testid":K||X0,date:P,disabled:!E||!h,hour:$,id:z0,minute:Z,resourceId:X,type:"day-cell",children:Z5("div",{className:"flex flex-col h-full w-full","data-testid":"grid-cell-content",style:{gap:`${S}px`},children:[L&&$5(g2,{date:P,locale:O}),Y&&Z5(x2,{children:[B.slice(0,F).map((R,n)=>$5("div",{className:"w-full shrink-0","data-testid":R?.title,style:{height:`${F0}px`}},`empty-${n}-${R.id}`)),l&&Z5("div",{className:"text-muted-foreground hover:text-foreground cursor-pointer text-[10px] whitespace-nowrap sm:text-xs shrink-0 mt-1",onClick:(R)=>{R.stopPropagation(),H(P,B)},onKeyDown:(R)=>{if(R.key==="Enter"||R.key===" ")R.preventDefault(),R.stopPropagation(),H(P,B)},role:"button",tabIndex:0,children:["+",o," ",W("more")]})]}),z]})}),$5(D2,{ref:p})]})},IP=I3(S3);import{jsx as y2}from"react/jsx-runtime";var u0=({resource:P,className:$,children:Z,"data-testid":q})=>{let{renderResource:X}=V();return y2("div",{className:U("flex items-center justify-center p-2 border-r last:border-r-0",$),"data-testid":q,style:{color:P.color,backgroundColor:P.backgroundColor},children:X?X(P):Z??y2("div",{className:"text-sm font-medium truncate",children:P.title})})};import{memo as b3}from"react";import{jsx as b5}from"react/jsx-runtime";var T3=({days:P,resourceId:$,"data-testid":Z,positionedEvents:q})=>{let X=P.at(0)?.startOf("day");return b5("div",{className:"absolute inset-0 pointer-events-none z-10 overflow-clip","data-testid":Z,children:q.map((f)=>{let Y=`${f.id}-${f.position}-${X?.toISOString()}-${$??"no-resource"}`;return b5("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:`${F0}px`},children:b5(GP,{className:"h-full w-full shadow",elementId:Y,event:f})},`${Y}-wrapper`)})})},T5=b3(T3);import{jsx as V0,jsxs as w5}from"react/jsx-runtime";var H3=({id:P,resource:$,gridType:Z="day",variant:q="resource",dayNumberHeight:X,className:f,columns:Y=[],allDay:Q,showDayNumber:J=!1,isLastRow:K=!1})=>{let{renderResource:L}=V(),z=q==="resource",p=Y.some((W)=>W.days),F=w3(()=>{if(p)return[];return Y.map((W)=>W.day).filter((W)=>Boolean(W))},[Y,p]),{positionedEvents:G,dayEventsMap:A}=S5({days:F,gridType:Z,resourceId:$?.id,dayNumberHeight:X,allDay:Q});return w5("div",{className:U("flex flex-1 relative",f),"data-testid":`horizontal-row-${P}`,children:[z&&$&&V0(u0,{className:"w-20 sm:w-40 sticky left-0 bg-background z-20 h-full","data-testid":`horizontal-row-label-${$.id}`,resource:$,children:L?L($):V0("div",{className:"wrap-break-word text-sm",children:$.title})}),w5("div",{className:"relative flex-1 flex",children:[V0("div",{className:"flex w-full",children:Y.map((W,_)=>{if(W.days)return V0(m3,{allDay:Q,col:W,dayNumberHeight:X,gridType:Z,id:P,isLastCol:_===Y.length-1,isLastRow:K,resourceId:$?.id,showDayNumber:J},W.id);return W.day?V0(IP,{allDay:Q,className:U("flex-1 w-20",K&&"border-b-0",W.className),day:W.day,gridType:Z,hour:Z==="hour"?W.day.hour():void 0,precomputedEvents:A.get(W.day.format("YYYY-MM-DD")),resourceId:$?.id,showDayNumber:J},W.day.toISOString()):null})}),!p&&V0("div",{className:"absolute inset-0 z-10 pointer-events-none",children:V0(T5,{"data-testid":`horizontal-events-${P}`,days:F,positionedEvents:G,resourceId:$?.id})})]})]})},m3=v2(({col:P,gridType:$="day",allDay:Z,resourceId:q,dayNumberHeight:X,showDayNumber:f,isLastRow:Y,isLastCol:Q,id:J})=>{let K=P.days??[],{positionedEvents:L}=S5({days:K,gridType:$,resourceId:q,dayNumberHeight:X,allDay:Z});return w5("div",{className:"flex relative w-full",children:[V0("div",{className:"flex w-full",children:K.map((z)=>V0(IP,{allDay:Z,className:U("flex-1 w-20",Y&&"border-b-0",!Q&&"border-r!",P.className),day:z,gridType:$,hour:$==="hour"?z.hour():void 0,resourceId:q,showDayNumber:f},z.toISOString()))}),V0("div",{className:"absolute inset-0 z-10 pointer-events-none",children:V0(T5,{"data-testid":`horizontal-events-${J}`,days:K,positionedEvents:L,resourceId:q})})]})}),f5=v2(H3);import{memo as k3}from"react";import{jsx as g3}from"react/jsx-runtime";var h3=({className:P})=>{let{t:$}=V();return g3("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")})},AP=k3(h3);import{jsx as c2,jsxs as E3}from"react/jsx-runtime";var D3=({days:P,classes:$,resource:Z,showSpacer:q=!0})=>{let X=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 E3("div",{className:U("flex w-full",$?.row),"data-testid":"all-day-row",children:[q&&c2(AP,{className:$?.spacer}),c2(f5,{allDay:!0,className:"flex-1 min-h-fit",columns:X,dayNumberHeight:0,gridType:"day",id:`all-day-row-${Z?.id??"main"}`,isLastRow:!0,resource:Z,variant:"regular"})]})},d0=C3(D3);import{jsx as i2,Fragment as o2}from"react/jsx-runtime";var p0=({date:P})=>{let{renderHour:$,timeFormat:Z}=V();if($)return i2(o2,{children:$(P)});return i2(o2,{children:P.format(Z==="12-hour"?"h A":"H")})};import{memo as i3}from"react";import{memo as v3}from"react";import{memo as j3}from"react";import{jsx as l2,Fragment as y3}from"react/jsx-runtime";var x3=({rangeStart:P,rangeEnd:$,now:Z,resource:q})=>{let{renderCurrentTimeIndicator:X,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"),L=Y.diff(P,"minute")/J*100;if(X)return l2(y3,{children:X({currentTime:Y,rangeStart:P,rangeEnd:$,progress:L,resource:q,view:f})});return l2("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:`${L}%`}})},u2=j3(x3);import{useMemo as r2}from"react";var d2=({days:P,gridType:$="hour",events:Z})=>{let q=Z.filter((z)=>!z.allDay).toSorted((z,p)=>z.start.diff(p.start));if(q.length===0)return[];let X=P.at(0)||M(),f=P.length,Y=$==="day",Q=[],J=[],K=null;for(let z of q){if(K&&z.start.isSameOrAfter(K)){if(J.length>0)Q.push(J);J=[]}J.push(z),K=K?M.max(K,z.end):z.end}if(J.length>0)Q.push(J);let L=[];for(let z of Q){if(z.length===1){let W=z[0],_=W.start.diff(X,$,!0),N=W.end.diff(X,$,!0);if(Y){if(_=Math.floor(_),N=Math.ceil(N),N<=_)N=_+1}if(_<0)_=0;if(N>f)N=f;let O=Math.max(0,N-_);if(O===0)continue;let S=_/f*100,b=O/f*100;L.push({...W,left:0,width:100,top:S,height:b});continue}let p=[...z].sort((W,_)=>{let N=W.end.diff(W.start,"minute"),O=_.end.diff(_.start,"minute");if(N!==O)return O-N;return W.start.diff(_.start)}),F=p.length,G;if(F===2)G=25;else if(F===3)G=50;else if(F===4)G=60;else G=70;let A=F>1?G/(F-1):0;for(let W=0;W<p.length;W++){let _=p[W],N=_.start.diff(X,$,!0),O=_.end.diff(X,$,!0);if(Y){if(N=Math.floor(N),O=Math.ceil(O),O<=N)O=N+1}if(N<0)N=0;if(O>f)O=f;let S=Math.max(0,O-N);if(S===0)continue;let b=N/f*100,B=S/f*100,H,h,o;if(W===0)H=0,h=100,o=1;else H=A*W,h=100-H,o=W+1;L.push({..._,left:H,width:h,top:b,height:B,zIndex:o})}}return L};var a2=({days:P,gridType:$,resourceId:Z})=>{let{getEventsForDateRange:q,getEventsForResource:X}=V(),f=P.at(0),Y=P.at(-1),Q=f?.startOf("day"),J=Y?.endOf("day"),K=r2(()=>{if(!Q||!J)return[];let z=q(Q,J);if(Z){let p=X(Z);z=z.filter((F)=>p.some((G)=>String(G.id)===String(F.id)))}return z.filter((p)=>!p.allDay)},[Q,J,q,Z,X]);return r2(()=>{return d2({days:P,events:K,gridType:$})},[P,$,K])};import{jsx as H5,jsxs as o3}from"react/jsx-runtime";var c3=({days:P,gridType:$="hour",resourceId:Z,resource:q,"data-testid":X})=>{let f=a2({days:P,gridType:$,resourceId:Z}),Y=P.at(0),Q=P.at(-1)?.add(1,$);return o3("div",{className:"relative w-full h-full pointer-events-none z-10 overflow-clip","data-testid":X,children:[Y&&Q&&H5(u2,{rangeEnd:Q,rangeStart:Y,resource:q}),f.map((J,K)=>{let L=`event-${J.id}-${K}-${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(GP,{className:U("pointer-events-auto",{"[&_p]:text-[10px] [&_p]:mt-0":z}),elementId:L,event:J})},`${L}-wrapper`)})]})},n2=v3(c3);import{jsx as SP,jsxs as u3}from"react/jsx-runtime";var l3=({id:P,days:$,resourceId:Z,resource:q,"data-testid":X,gridType:f,className:Y,renderCell:Q,noEvents:J,cellSlots:K=[60],isLastColumn:L})=>{return SP("div",{className:U("flex flex-col flex-1 items-center justify-center min-w-50 bg-background relative",Y),"data-testid":X||`vertical-col-${P}`,children:u3("div",{className:"w-full relative grid",style:{gridTemplateRows:`repeat(${$.length}, minmax(0, 1fr))`},children:[$.map((z,p)=>{let F=z.format("HH"),G=z.format("YYYY-MM-DD");if(Q){let A=P==="time-col"?`vertical-time-${F}`:`vertical-cell-${G}-${F}-00${Z?`-${Z}`:""}`;return SP("div",{className:"h-[60px] border-b border-r","data-testid":A,children:Q(z)},`${P}-${p}-${F}`)}return K.map((A)=>{let W=A===60?void 0:A,_=W===void 0?"00":String(W).padStart(2,"0"),N=`vertical-cell-${G}-${F}-${_}${Z?`-${Z}`:""}`;return SP(IP,{className:U("hover:bg-accent relative z-10 h-[60px] cursor-pointer border-b",A===60?"":"border-dashed h-[15px] min-h-[15px]",L?"border-r-0":"border-r"),"data-testid":N,day:W?z.minute(W):z,gridType:f,hour:z.hour(),minute:W,resourceId:Z,shouldRenderEvents:!1},`${P}-${p}-${_}`)})}),!J&&SP("div",{className:"absolute inset-0 z-10 pointer-events-none",children:SP(n2,{"data-testid":`vertical-events-${P}`,days:$,gridType:f,resource:q,resourceId:Z})})]})})},t2=i3(l3);import{memo as d3}from"react";import{jsx as s2,jsxs as a3}from"react/jsx-runtime";var r3=({children:P,classes:$,allDayRow:Z})=>{let{stickyViewHeader:q,viewHeaderClassName:X}=V((f)=>({stickyViewHeader:f.stickyViewHeader,viewHeaderClassName:f.viewHeaderClassName}));return a3("div",{className:U(q&&"sticky top-0 z-21 bg-background",X),children:[s2("div",{className:U("h-12 border-b w-fit",$?.header),"data-testid":"vertical-grid-header",children:P}),Z&&s2("div",{className:U("flex w-full border-b min-h-12",$?.allDay),"data-testid":"vertical-grid-all-day",children:Z})]})},e2=d3(r3);import{jsx as bP,jsxs as P1}from"react/jsx-runtime";var b0=({columns:P,children:$,gridType:Z="day",variant:q="resource",classes:X,allDayRow:f,cellSlots:Y,style:Q})=>{let J=q==="resource",K=!J,L=$&&bP(e2,{allDayRow:f,classes:{header:X?.header,allDay:X?.allDay},children:$});return P1("div",{className:"h-full flex flex-col","data-testid":"vertical-grid-container",style:Q,children:[K&&L,P1(S0,{className:U("h-full",K&&"overflow-auto"),"data-testid":"vertical-grid-scroll",viewPortProps:{className:"*:flex! *:flex-col! *:min-h-full"},children:[J&&L,bP("div",{className:U("flex flex-1 w-fit",X?.body),"data-testid":"vertical-grid-body",children:P.map((z,p)=>bP(t2,{...z,cellSlots:Y,gridType:Z,isLastColumn:p===P.length-1},`${z.id}-${p}`))}),bP(h0,{className:"z-30"})," ",bP(h0,{className:"z-30",orientation:"horizontal"})," "]})]})};function L0({referenceDate:P,businessHours:$,hideNonBusinessHours:Z,allDates:q=[P],resourceBusinessHours:X=[]}){let f=o5({referenceDate:P}),Y=!!$||X.length>0;if(!(Z&&Y))return f;let{minStart:J,maxEnd:K,hasBusinessHours:L}=uP({allDates:q,businessHours:$,resourceBusinessHours:X,hideNonBusinessHours:Z});if(!L)return f;return f.filter((z)=>{let p=z.hour();return p>=J&&p<K})}import{jsx as $P,jsxs as n3}from"react/jsx-runtime";var $1=()=>{let{currentDate:P,t:$,businessHours:Z,hideNonBusinessHours:q}=V(),X=P.isSame(M(),"day"),f=L0({referenceDate:P,businessHours:Z,hideNonBusinessHours:q,allDates:[P]}),Y={id:"time-col",day:void 0,days:f,className:"shrink-0 w-16 min-w-16 max-w-16 sticky left-0 bg-background z-20",gridType:"hour",noEvents:!0,renderCell:(J)=>$P("div",{className:"text-muted-foreground p-2 text-right text-[10px] sm:text-xs flex flex-col items-center",children:$P(p0,{date:J})})},Q={id:`day-col-${P.format("YYYY-MM-DD")}`,day:P,days:f,className:"w-[calc(100%-4rem)] flex-1",gridType:"hour"};return $P(b0,{allDayRow:$P(d0,{days:[P]}),cellSlots:[0,15,30,45],classes:{header:"w-full",body:"w-full",allDay:"w-full"},columns:[Y,Q],gridType:"hour",variant:"regular",children:$P("div",{className:"flex flex-1 justify-center items-center min-h-12","data-testid":"day-view-header",children:n3(C,{className:U("flex justify-center items-center text-center text-base font-semibold sm:text-xl",X&&"text-primary"),transitionKey:P.format("YYYY-MM-DD"),children:[$P("span",{className:"xs:inline hidden",children:P.format("dddd, ")}),P.format("MMMM D, YYYY"),X&&$P("span",{className:"bg-primary text-primary-foreground ml-2 rounded-full px-1 py-0.5 text-xs sm:px-2 sm:text-sm",children:$("today")})]})})})};import{useMemo as P$}from"react";import{memo as t3}from"react";import{jsx as e3}from"react/jsx-runtime";var s3=({children:P,className:$})=>{let{stickyViewHeader:Z,viewHeaderClassName:q}=V((X)=>({stickyViewHeader:X.stickyViewHeader,viewHeaderClassName:X.viewHeaderClassName}));return e3("div",{className:U("flex h-12 w-fit",Z&&"sticky top-0 z-21 bg-background",$,q),"data-testid":"horizontal-grid-header",children:P})},Z1=t3(s3);import{jsx as WP,jsxs as f1}from"react/jsx-runtime";var J5=({rows:P,children:$,classes:Z,allDay:q,gridType:X,variant:f="resource",dayNumberHeight:Y})=>{let{currentDate:Q}=V(),J=f==="resource",K=!J,L=$&&WP(Z1,{className:Z?.header,children:$});return f1("div",{className:"h-full flex flex-col","data-testid":"horizontal-grid-container",children:[K&&L,f1(S0,{className:U("h-full",K&&"overflow-auto"),"data-testid":"horizontal-grid-scroll",viewPortProps:{className:"*:flex! *:flex-col! *:min-h-full"},children:[J&&L,WP("div",{className:U("flex flex-1 w-fit",Z?.body),"data-testid":"horizontal-grid-body",children:WP("div",{className:"relative w-full flex flex-col flex-1",children:P.map((z,p)=>WP(f5,{allDay:z.allDay??q,dayNumberHeight:Y,gridType:X,isLastRow:p===P.length-1,variant:f,...z},z.id))},Q.format("YYYY-MM"))}),WP(h0,{className:"z-30"}),WP(h0,{className:"z-30",orientation:"horizontal"})]})]})};import{jsx as m5}from"react/jsx-runtime";var J1=({className:P})=>{let{firstDayOfWeek:$,stickyViewHeader:Z,viewHeaderClassName:q,currentDate:X}=V(),f=Y0(X,$);return m5("div",{className:U("flex w-full",Z&&"sticky top-0 z-20",q,P),"data-testid":"month-header",children:f.map((Y,Q)=>m5(C,{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:Q*0.05,transitionKey:Y.toISOString(),children:m5("span",{className:"text-sm capitalize",children:Y.format("ddd")})},Y.toISOString()))})};import{jsx as X1}from"react/jsx-runtime";var q1=()=>{let{currentDate:P,firstDayOfWeek:$}=V(),q=P$(()=>yP(P,$),[P,$]).map((X,f)=>({id:`week-${f}`,columns:X.map((Y)=>({id:`col-${Y.toISOString()}`,day:Y,className:"w-auto",gridType:"day"})),className:"flex-1",showDayNumber:!0}));return X1(J5,{classes:{body:"w-full",header:"w-full"},rows:q,variant:"regular",children:X1(J1,{className:"h-12"})})};import{useMemo as X5}from"react";import{jsx as C0,jsxs as k5}from"react/jsx-runtime";var Q1="w-[calc((100%-4rem)/var(--visible-days))] min-w-[calc((100%-4rem)/var(--visible-days))] flex-1",Y1="w-10 sm:w-16 min-w-10 sm:min-w-16 max-w-10 sm:max-w-16",_1=()=>{let{t:P,currentDate:$,firstDayOfWeek:Z,selectDate:q,openEventForm:X,businessHours:f,hideNonBusinessHours:Y,hiddenDays:Q}=V(),J=X5(()=>Y0($,Z),[$,Z]),K=X5(()=>Q?J.filter((G)=>!Q.has(G.day())):J,[J,Q]),z={id:"time-col",days:X5(()=>L0({referenceDate:$,businessHours:f,hideNonBusinessHours:Y,allDates:J}),[$,f,Y,J]),day:void 0,className:`shrink-0 ${Y1} sticky left-0 bg-background z-20`,gridType:"hour",noEvents:!0,renderCell:(G)=>C0("div",{className:"text-muted-foreground p-2 text-right text-[10px] sm:text-xs flex flex-col items-center",children:C0(p0,{date:G})})},p=X5(()=>{return K.map((G)=>({id:`day-col-${G.format("YYYY-MM-DD")}`,day:G,label:G.format("D"),className:Q1,days:L0({referenceDate:G,businessHours:f,hideNonBusinessHours:Y,allDates:J}),value:G}))},[J,f,Y,K.map]),F={"--visible-days":K.length};return C0(b0,{allDayRow:C0(d0,{classes:{cell:Q1,spacer:Y1},days:K}),classes:{header:"w-full h-18",body:"w-full"},columns:[z,...p],gridType:"hour",style:F,variant:"regular",children:k5("div",{className:"flex h-full flex-1","data-testid":"week-view-header",children:[C0("div",{className:"w-10 sm:w-16 h-full shrink-0 items-center justify-center border-r p-2 flex",children:k5("div",{className:"flex flex-col items-center justify-center",children:[C0("span",{className:"text-muted-foreground text-xs",children:P("week")}),C0("span",{className:"font-medium",children:$.week()})]})}),K.map((G,A)=>{let W=G.isSame(M(),"day"),_=`week-day-header-${G.toISOString()}`;return k5(C,{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",W&&"bg-primary/10 font-bold"),"data-testid":`week-day-header-${G.format("dddd").toLowerCase()}`,delay:A*0.05,onClick:()=>{q(G),X({start:G})},transitionKey:_,children:[C0("div",{className:"text-xs sm:text-sm",children:G.format("ddd")}),C0("div",{className:U("mx-auto mt-1 flex h-5 w-5 items-center justify-center rounded-full text-xs",W&&"bg-primary text-primary-foreground"),children:G.format("D")})]},_)})]})})};import{jsx as r0,jsxs as TP}from"react/jsx-runtime";var $$=[{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"}],Z$=["bg-primary","bg-blue-500","bg-green-500"],f$=42,J$=(P)=>{if(P===0)return"";let $=P>1?"s":"";return`${P} event${$}`},K1=()=>{let{currentDate:P,selectDate:$,events:Z,setView:q,getEventsForDateRange:X,t:f}=V(),Y=P.year(),Q=()=>{return Array.from({length:12},(G,A)=>{let W=M().year(Y).month(A).startOf("month"),_=Z.filter((N)=>N.start.year()===Y&&N.start.month()===A);return{date:W,name:W.format("MMMM"),eventCount:_.length,monthKey:W.format("MM")}})},J=(G)=>{let A=G.startOf("month").startOf("week");return Array.from({length:f$},(W,_)=>{let N=A.add(_,"day"),O=N.startOf("day"),S=N.endOf("day"),b=X(O,S);return{date:N,dayKey:N.format("YYYY-MM-DD"),isInCurrentMonth:N.month()===G.month(),isToday:N.isSame(M(),"day"),isSelected:N.isSame(P,"day"),eventCount:b.length}})},K=(G,A,W)=>{W?.stopPropagation(),$(G),q(A)},L=(G)=>{let A=G===1?f("event"):f("events");return`${G} ${A}`},z=(G)=>{let W=G.isInCurrentMonth?"":"text-muted-foreground opacity-50",_=G.isToday?"bg-primary text-primary-foreground rounded-full":"",N=G.isSelected&&!G.isToday?"bg-muted rounded-full font-bold":"",O=G.eventCount>0&&!G.isToday&&!G.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",W,_,N,O)},p=(G,A)=>{return U("h-[3px] w-[3px] rounded-full",A?"bg-primary-foreground":G)},F=Q();return TP(S0,{className:"h-full","data-testid":"year-view",children:[r0("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((G,A)=>{let W=J(G.date),_=A*0.05;return TP("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-${G.monthKey}`,children:[TP(C,{className:"mb-2 flex items-center justify-between",delay:_,transitionKey:`month-${G.monthKey}`,children:[r0("button",{className:"text-lg font-medium hover:underline cursor-pointer","data-testid":`year-month-title-${G.monthKey}`,onClick:()=>K(G.date,"month"),type:"button",children:G.name}),G.eventCount>0&&r0("span",{className:"bg-primary text-primary-foreground rounded-full px-2 py-1 text-xs","data-testid":`year-month-event-count-${G.monthKey}`,children:L(G.eventCount)})]},`month-${G.monthKey}`),TP("div",{className:"grid grid-cols-7 gap-[1px] text-[0.6rem]","data-testid":`year-mini-calendar-${G.monthKey}`,children:[$$.map((N)=>r0("div",{className:"text-muted-foreground h-3 text-center",children:N.label},`header-${G.monthKey}-${N.id}`)),W.map((N)=>{let O=`year-day-${G.date.format("YYYY-MM")}-${N.dayKey}`,S=N.eventCount>0,b=Math.min(N.eventCount,3),B=Z$.slice(0,b);return TP("button",{className:z(N),"data-testid":O,onClick:(H)=>K(N.date,"day",H),title:J$(N.eventCount),type:"button",children:[r0("span",{className:"text-center leading-none",children:N.date.date()}),S&&r0("div",{className:U("absolute bottom-0 flex w-full justify-center space-x-[1px]",N.isToday&&"bottom-[1px]"),children:B.map((H)=>r0("span",{className:p(H,N.isToday)},H))})]},N.dayKey)})]})]},G.monthKey)})}),r0(h0,{className:"z-30"})]})};import{useCallback as h5,useMemo as X$}from"react";import{jsx as q$}from"react/jsx-runtime";var z1=({children:P,events:$=[],firstDayOfWeek:Z=0,initialView:q="month",initialDate:X,renderEvent:f,onEventClick:Y,onCellClick:Q,onViewChange:J,onEventAdd:K,onEventUpdate:L,onEventDelete:z,onDateChange:p,locale:F,timezone:G,disableCellClick:A,disableEventClick:W,disableDragAndDrop:_,dayMaxEvents:N,eventSpacing:O=E0,stickyViewHeader:S=!0,viewHeaderClassName:b="",headerComponent:B,headerClassName:H,businessHours:h,renderEventForm:o,translations:l,translator:x,timeFormat:E="12-hour",classesOverride:j,renderCurrentTimeIndicator:g,renderHour:a,hideNonBusinessHours:X0=!1,hiddenDays:z0})=>{let R=vP({events:$,firstDayOfWeek:Z,initialView:q,initialDate:X,businessHours:h,onEventAdd:K,onEventUpdate:L,onEventDelete:z,onDateChange:p,onViewChange:J,locale:F,timezone:G,translations:l,translator:x}),n=h5((s)=>{R.setSelectedEvent(s),R.setIsEventFormOpen(!0)},[R]),$0=h5((s)=>{if(W)return;if(Y)Y(s);else n(s)},[W,Y,n]),t=h5((s)=>{if(A)return;if(Q)Q(s);else R.openEventForm(s)},[Q,A,R]),q0=X$(()=>({currentDate:R.currentDate,view:R.view,events:R.events,rawEvents:R.rawEvents,currentLocale:R.currentLocale,isEventFormOpen:R.isEventFormOpen,selectedEvent:R.selectedEvent,selectedDate:R.selectedDate,firstDayOfWeek:R.firstDayOfWeek,setCurrentDate:R.setCurrentDate,selectDate:R.selectDate,setView:R.setView,nextPeriod:R.nextPeriod,prevPeriod:R.prevPeriod,today:R.today,addEvent:R.addEvent,updateEvent:R.updateEvent,updateRecurringEvent:R.updateRecurringEvent,deleteEvent:R.deleteEvent,deleteRecurringEvent:R.deleteRecurringEvent,openEventForm:R.openEventForm,closeEventForm:R.closeEventForm,getEventsForDateRange:R.getEventsForDateRange,findParentRecurringEvent:R.findParentRecurringEvent,renderEvent:f,onEventClick:$0,onCellClick:t,locale:F,timezone:G,disableCellClick:A,disableEventClick:W,disableDragAndDrop:_,dayMaxEvents:N,eventSpacing:O,stickyViewHeader:S,viewHeaderClassName:b,headerComponent:B,headerClassName:H,businessHours:h,renderEventForm:o,t:R.t,timeFormat:E,classesOverride:j,renderCurrentTimeIndicator:g,renderHour:a,hideNonBusinessHours:X0,hiddenDays:z0}),[R,f,$0,t,F,G,A,W,_,N,O,S,b,B,H,h,o,E,j,g,a,X0,z0]);return q$(EP.Provider,{value:q0,children:P})};import{jsx as O0,jsxs as K$}from"react/jsx-runtime";var Q$=()=>{let{view:P,dayMaxEvents:$}=V();return K$("div",{className:"flex flex-col w-full h-full","data-testid":"ilamy-calendar",children:[O0(BP,{className:"p-1"}),O0(cP,{children:O0(C,{className:"w-full h-[calc(100%-3.5rem)]",direction:"horizontal",transitionKey:P,children:O0("div",{className:"border h-full w-full","data-testid":"calendar-body",children:{month:O0(q1,{dayMaxEvents:$},"month"),week:O0(_1,{},"week"),day:O0($1,{},"day"),year:O0(K1,{},"year")}[P]})})}),O0(nP,{})]})},Y$=(P)=>{if(!P||P.length===0)return;return new Set(P.map(($)=>j0[$]))},_$=({events:P,firstDayOfWeek:$="sunday",initialView:Z="month",initialDate:q,dayMaxEvents:X=KP,eventSpacing:f=E0,stickyViewHeader:Y=!0,viewHeaderClassName:Q="",timeFormat:J="12-hour",hideNonBusinessHours:K=!1,hiddenDays:L,...z})=>{return O0(z1,{dayMaxEvents:X,eventSpacing:f,events:hP(P),firstDayOfWeek:j0[$],hiddenDays:Y$(L),hideNonBusinessHours:K,initialDate:JP(q),initialView:Z,stickyViewHeader:Y,timeFormat:J,viewHeaderClassName:Q,...z,children:O0(Q$,{})})};import{jsx as z$}from"react/jsx-runtime";var NP=({days:P,gridType:$="day",children:Z,classes:q})=>{let{getVisibleResources:X}=V(),f=X(),Y=P.map((J)=>{let K=Array.isArray(J);return{id:`col-${K?J[0]?.format("YYYY-MM-DD"):J.toISOString()}`,day:K?void 0:J,days:K?J:void 0,className:q?.cell,gridType:$}}),Q=f.map((J)=>({id:J.id,title:J.title,resource:J,columns:Y}));return z$(J5,{classes:q,dayNumberHeight:0,gridType:$,rows:Q,children:Z})};import{jsx as pP,jsxs as U$}from"react/jsx-runtime";var U1=()=>{let{currentDate:P,t:$,businessHours:Z,hideNonBusinessHours:q,getVisibleResources:X}=V(),f=X(),Y=L0({referenceDate:P,businessHours:Z,hideNonBusinessHours:q,allDates:[P],resourceBusinessHours:f.map((Q)=>Q.businessHours).filter(Boolean)});return U$(NP,{classes:{header:"min-w-full",body:"min-w-full",cell:"min-w-20 flex-1"},days:Y,gridType:"hour",children:[pP("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:pP("div",{className:"text-sm",children:$("resources")})}),pP("div",{className:"flex-1 flex flex-col",children:pP("div",{className:"flex h-12",children:Y.map((Q,J)=>{let K=Q.isSame(M(),"hour"),L=`resource-day-header-${Q.toISOString()}`;return pP(C,{className:U("min-w-20 flex-1 border-b border-r last:border-r-0 flex items-center justify-center text-xs shrink-0",K&&"bg-blue-50 text-blue-600 font-medium"),"data-testid":`resource-day-time-label-${Q.format("HH")}`,delay:J*0.05,transitionKey:`${L}-motion`,children:pP(p0,{date:Q})},`${L}-animated`)})})})]})};import{jsx as ZP,jsxs as L1}from"react/jsx-runtime";var G1=()=>{let{currentDate:P,getVisibleResources:$,businessHours:Z,hideNonBusinessHours:q}=V(),X=$(),f=L0({referenceDate:P,businessHours:Z,hideNonBusinessHours:q,allDates:[P],resourceBusinessHours:X.map((J)=>J.businessHours).filter(Boolean)}),Y={id:"time-col",day:void 0,days:f,className:"shrink-0 w-16 min-w-16 max-w-16 sticky left-0 bg-background z-20",gridType:"hour",noEvents:!0,renderCell:(J)=>ZP("div",{className:"text-muted-foreground p-2 text-right text-[10px] sm:text-xs flex flex-col items-center",children:ZP(p0,{date:J})})},Q=X.map((J)=>({id:`day-col-${P.format("YYYY-MM-DD")}-resource-${J.id}`,resourceId:J.id,resource:J,days:f,day:P,gridType:"hour"}));return ZP(b0,{allDayRow:L1("div",{className:"flex w-full",children:[ZP(AP,{}),X.map((J)=>ZP(d0,{classes:{cell:"min-w-50"},days:[P],resource:J,showSpacer:!1},`resource-allday-row-${J.id}`))]}),cellSlots:[0,15,30,45],classes:{body:"w-full",header:"w-full"},columns:[Y,...Q],"data-testid":"resource-day",gridType:"hour",children:L1("div",{className:"flex border-b h-12 flex-1","data-testid":"resource-month-header",children:[ZP("div",{className:"shrink-0 border-r w-16 sticky top-0 left-0 bg-background z-20"}),X.map((J)=>ZP(u0,{className:"min-w-50 flex-1",resource:J},`resource-cell-${J.id}`))]})})};import{jsx as A1}from"react/jsx-runtime";var W1=()=>{let{orientation:P}=V();if(P==="vertical")return A1(G1,{});return A1(U1,{})};import{useMemo as L$}from"react";import{jsx as q5,jsxs as N1}from"react/jsx-runtime";var p1=()=>{let{currentDate:P,t:$}=V(),Z=L$(()=>{return c5(P)},[P]);return N1(NP,{days:Z,children:[q5("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:q5("div",{className:"text-sm",children:$("resources")})}),Z.map((q,X)=>{let f=`resource-month-header-${q.toISOString()}`;return N1(C,{className:"w-20 border-b border-r shrink-0 flex items-center justify-center flex-col",delay:X*0.05,transitionKey:`${f}-motion`,children:[q5("div",{className:"text-xs font-medium",children:q.format("D")}),q5("div",{className:"text-xs text-muted-foreground",children:q.format("ddd")})]},`${f}-animated`)})]})};import{jsx as wP,jsxs as F1}from"react/jsx-runtime";var V1=()=>{let{currentDate:P,getVisibleResources:$}=V(),Z=$(),q=P.startOf("month"),X=Array.from({length:P.daysInMonth()},(Q,J)=>q.add(J,"day")),f={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:(Q)=>F1("div",{className:"text-muted-foreground p-2 text-right text-[10px] sm:text-xs flex flex-col items-center",children:[wP("span",{children:Q.format("D")}),wP("span",{children:Q.format("ddd")})]})},Y=Z.map((Q)=>({id:`month-col-resource-${Q.id}`,day:void 0,resourceId:Q.id,days:X,gridType:"day"}));return wP(b0,{classes:{header:"w-full",body:"w-full"},columns:[f,...Y],"data-testid":"resource-month-vertical-grid",children:F1("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"}),Z.map((Q)=>wP(u0,{className:"min-w-50 flex-1",resource:Q},`resource-cell-${Q.id}`))]})})};import{jsx as O1}from"react/jsx-runtime";var B1=()=>{let{orientation:P}=V();if(P==="vertical")return O1(V1,{});return O1(p1,{})};import{useMemo as g5}from"react";import{jsx as D0,jsxs as C5}from"react/jsx-runtime";var M1=()=>{let{currentDate:P,firstDayOfWeek:$,t:Z,businessHours:q,hideNonBusinessHours:X,getVisibleResources:f}=V(),Y=f(),Q=g5(()=>Y0(P,$),[P,$]),J=g5(()=>Y.map((L)=>L.businessHours).filter(Boolean),[Y]),K=g5(()=>{return Q.map((L)=>L0({referenceDate:L,businessHours:q,hideNonBusinessHours:X,resourceBusinessHours:J}))},[Q,q,X,J]);return C5(NP,{classes:{header:"h-24 min-w-full",body:"min-w-full",cell:"min-w-20 flex-1"},days:K,gridType:"hour",children:[D0("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:D0("div",{className:"text-sm",children:Z("resources")})}),C5("div",{className:"flex-1 flex flex-col",children:[D0("div",{className:"flex h-12",children:Q.map((L,z)=>{let p=L.isSame(M(),"day"),F=`resource-week-header-${L.toISOString()}-day`;return D0(C,{className:U("shrink-0 border-r last:border-r-0 border-b flex-1 flex items-center text-center font-medium",p&&"bg-blue-50 text-blue-600"),"data-testid":"resource-week-day-header",delay:z*0.05,transitionKey:`${F}-motion`,children:C5("div",{className:"sticky left-1/2",children:[D0("div",{className:"text-sm",children:L.format("ddd")}),D0("div",{className:"text-xs text-muted-foreground",children:L.format("M/D")})]})},`${F}-animated`)})}),D0("div",{className:"flex h-12 border-b",children:K.flat().map((L,z)=>{let p=L.isSame(M(),"hour"),F=`resource-week-header-${L.toISOString()}-hour-${z}`;return D0(C,{className:U("min-w-20 flex-1 border-r flex items-center justify-center text-xs shrink-0",p&&"bg-blue-50 text-blue-600 font-medium"),"data-testid":`resource-week-time-label-${L.format("HH")}`,delay:z*0.005,transitionKey:`${F}-motion`,children:D0(p0,{date:L})},`${F}-animated`)})})]})]})};import{useMemo as HP}from"react";import{jsx as G0,jsxs as mP}from"react/jsx-runtime";var R1=()=>{let{currentDate:P,getVisibleResources:$,firstDayOfWeek:Z,t:q,businessHours:X,hideNonBusinessHours:f,hiddenDays:Y}=V(),Q=$(),J=HP(()=>Y0(P,Z),[P,Z]),K=HP(()=>Y?J.filter((F)=>!Y.has(F.day())):J,[J,Y]),L=HP(()=>L0({referenceDate:P,businessHours:X,hideNonBusinessHours:f,allDates:J,resourceBusinessHours:Q.map((F)=>F.businessHours).filter(Boolean)}),[P,X,f,J,Q]),z=HP(()=>({id:"time-col",days:L,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:(F)=>G0("div",{className:"text-muted-foreground p-2 text-right text-[10px] sm:text-xs flex flex-col items-center",children:G0(p0,{date:F})})}),[L]),p=HP(()=>Q.flatMap((F)=>K.map((G)=>({id:`day-col-${G.format("YYYY-MM-DD")}-resource-${F.id}`,resourceId:F.id,resource:F,day:G,days:L0({referenceDate:G,businessHours:X,hideNonBusinessHours:f,allDates:J,resourceBusinessHours:Q.map((A)=>A.businessHours).filter(Boolean)}),gridType:"hour"}))),[Q,J,X,f,K.map]);return G0(b0,{allDayRow:mP("div",{className:"flex",children:[G0(AP,{}),Q.map((F)=>G0(d0,{classes:{cell:"min-w-50"},days:K,resource:F,showSpacer:!1},`resource-week-allday-row-${F.id}`))]}),classes:{header:"h-24"},columns:[z,...p],"data-testid":"resource-week",gridType:"hour",children:mP("div",{className:"flex-1 flex flex-col",children:[mP("div",{className:"flex h-12",children:[G0("div",{className:"shrink-0 w-16 border-r z-20 bg-background sticky left-0",children:G0("span",{className:"px-2 h-full w-full flex justify-center items-end text-xs text-muted-foreground",children:q("week")})}),Q.map((F,G)=>{let A=`resource-week-header-${F.id}-day`;return G0(C,{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(${K.length} * var(--spacing) * 50)`},transitionKey:`${A}-motion`,children:G0(u0,{className:"h-full w-full flex-1",resource:F,children:G0("div",{className:"sticky left-1/2 text-sm font-medium truncate",children:F.title})})},`${A}-animated`)})]}),mP("div",{className:"flex h-12",children:[G0("div",{className:"shrink-0 w-16 border-r border-b z-20 bg-background sticky left-0",children:G0("span",{className:"px-2 h-full w-full flex justify-center items-start font-medium",children:P.week()})}),p.map((F,G)=>{let A=F.day,W=`resource-week-header-${A.toISOString()}-hour-${F.resourceId}`;return mP(C,{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-${A.format("HH")}`,delay:G*0.05,transitionKey:`${W}-motion`,children:[G0("div",{className:"text-sm",children:A.format("ddd")}),G0("div",{className:"text-xs text-muted-foreground",children:A.format("M/D")})]},`${W}-animated`)})]})]})})};import{jsx as I1}from"react/jsx-runtime";var S1=()=>{let{orientation:P}=V();if(P==="vertical")return I1(R1,{});return I1(M1,{})};import{jsx as a0,jsxs as G$}from"react/jsx-runtime";var b1=()=>{let{view:P}=V();return G$("div",{className:"flex flex-col w-full h-full","data-testid":"ilamy-resource-calendar",children:[a0(BP,{className:"p-1"}),a0(cP,{children:a0(C,{className:"w-full h-[calc(100%-3.5rem)] @container/calendar-body",direction:"horizontal",transitionKey:P,children:a0("div",{className:"border h-full w-full","data-testid":"calendar-body",children:{month:a0(B1,{},"month"),week:a0(S1,{},"week"),day:a0(W1,{},"day")}[P]})})}),a0(nP,{})]})};import{jsx as T1}from"react/jsx-runtime";var A$=(P)=>{if(!P||P.length===0)return;return new Set(P.map(($)=>j0[$]))},W$=({events:P=[],resources:$=[],firstDayOfWeek:Z="sunday",initialView:q="month",initialDate:X,disableDragAndDrop:f=!1,dayMaxEvents:Y=KP,timeFormat:Q="12-hour",eventSpacing:J=E0,hiddenDays:K,...L})=>{return T1(n5,{dayMaxEvents:Y,disableDragAndDrop:f,eventSpacing:J,events:hP(P),firstDayOfWeek:j0[Z],hiddenDays:A$(K),initialDate:JP(X),initialView:q,resources:$,timeFormat:Q,...L,children:T1(b1,{})})};export{f4 as useIlamyCalendarContext,_P as isRecurringEvent,Y5 as generateRecurringEvents,_5 as defaultTranslations,Vq as RRule,W$ as IlamyResourceCalendar,_$ as IlamyCalendar};
|
|
5
5
|
|
|
6
|
-
//# debugId=
|
|
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
|
|
6
|
+
//# debugId=12555A2DB09C331764756E2164756E21
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL2luZGV4LnRzIiwgInNyYy9jb21wb25lbnRzL2FuaW1hdGlvbnMvYW5pbWF0ZWQtc2VjdGlvbi50c3giLCAic3JjL2xpYi91dGlscy9pbmRleC50cyIsICJzcmMvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnLnRzIiwgInNyYy9jb21wb25lbnRzL2RyYWctYW5kLWRyb3AvY2FsZW5kYXItZG5kLWNvbnRleHQudHN4IiwgInNyYy9jb21wb25lbnRzL3VpL2J1dHRvbi50c3giLCAic3JjL2NvbXBvbmVudHMvdWkvZGlhbG9nLnRzeCIsICJzcmMvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQudHMiLCAic3JjL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvY29udGV4dC50cyIsICJzcmMvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29udGV4dHMvcmVzb3VyY2UtY2FsZW5kYXItY29udGV4dC9jb250ZXh0LnRzIiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb250ZXh0cy9yZXNvdXJjZS1jYWxlbmRhci1jb250ZXh0L3Byb3ZpZGVyLnRzeCIsICJzcmMvaG9va3MvdXNlLWNhbGVuZGFyLWVuZ2luZS50cyIsICJzcmMvZmVhdHVyZXMvcmVjdXJyZW5jZS91dGlscy9yZWN1cnJlbmNlLWhhbmRsZXIudHMiLCAic3JjL2xpYi90cmFuc2xhdGlvbnMvZGVmYXVsdC50cyIsICJzcmMvbGliL3V0aWxzL2RhdGUtdXRpbHMudHMiLCAic3JjL2xpYi9jb25zdGFudHMudHMiLCAic3JjL2ZlYXR1cmVzL3JlY3VycmVuY2UvY29tcG9uZW50cy9yZWN1cnJlbmNlLWVkaXQtZGlhbG9nL3JlY3VycmVuY2UtZWRpdC1kaWFsb2cudHN4IiwgInNyYy9jb21wb25lbnRzL2RyYWctYW5kLWRyb3AvZG5kLXV0aWxzLnRzIiwgInNyYy9jb21wb25lbnRzL2RyYWctYW5kLWRyb3AvZXZlbnQtZHJhZy1vdmVybGF5LnRzeCIsICJzcmMvY29tcG9uZW50cy9ldmVudC1mb3JtL2V2ZW50LWZvcm0udHN4IiwgInNyYy9jb21wb25lbnRzL3VpL2NoZWNrYm94LnRzeCIsICJzcmMvY29tcG9uZW50cy91aS9kYXRlLXBpY2tlci50c3giLCAic3JjL2NvbXBvbmVudHMvdWkvY2FsZW5kYXIudHN4IiwgInNyYy9jb21wb25lbnRzL3VpL3BvcG92ZXIudHN4IiwgInNyYy9jb21wb25lbnRzL3VpL2lucHV0LnRzeCIsICJzcmMvY29tcG9uZW50cy91aS9sYWJlbC50c3giLCAic3JjL2NvbXBvbmVudHMvdWkvc2Nyb2xsLWFyZWEudHN4IiwgInNyYy9jb21wb25lbnRzL3VpL3RpbWUtcGlja2VyLnRzeCIsICJzcmMvaG9va3MvdXNlLWF1dG9jb21wbGV0ZS10aW1lcGlja2VyLnRzIiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci91dGlscy9idXNpbmVzcy1ob3Vycy50cyIsICJzcmMvZmVhdHVyZXMvY2FsZW5kYXIvdXRpbHMvZXZlbnQtZm9ybS11dGlscy50cyIsICJzcmMvZmVhdHVyZXMvcmVjdXJyZW5jZS9jb21wb25lbnRzL3JlY3VycmVuY2UtZWRpdG9yL3JlY3VycmVuY2UtZWRpdG9yLnRzeCIsICJzcmMvY29tcG9uZW50cy91aS9jYXJkLnRzeCIsICJzcmMvY29tcG9uZW50cy91aS9zZWxlY3QudHN4IiwgInNyYy9mZWF0dXJlcy9yZWN1cnJlbmNlL2hvb2tzL3VzZVJlY3VycmluZ0V2ZW50QWN0aW9ucy50cyIsICJzcmMvY29tcG9uZW50cy9ldmVudC1mb3JtL2V2ZW50LWZvcm0tZGlhbG9nLnRzeCIsICJzcmMvY29tcG9uZW50cy9oZWFkZXIvYmFzZS1oZWFkZXIudHN4IiwgInNyYy9saWIvdXRpbHMvZXhwb3J0LWljYWwudHMiLCAic3JjL2NvbXBvbmVudHMvaGVhZGVyL3RpdGxlLWNvbnRlbnQudHN4IiwgInNyYy9jb21wb25lbnRzL2hlYWRlci92aWV3LWNvbnRyb2xzLnRzeCIsICJzcmMvY29tcG9uZW50cy9hbGwtZGF5LXJvdy9hbGwtZGF5LXJvdy50c3giLCAic3JjL2NvbXBvbmVudHMvaG9yaXpvbnRhbC1ncmlkL2hvcml6b250YWwtZ3JpZC1yb3cudHN4IiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci9ob29rcy91c2VQcm9jZXNzZWRXZWVrRXZlbnRzLnRzIiwgInNyYy9saWIvdXRpbHMvcG9zaXRpb24td2Vlay1ldmVudHMudHMiLCAic3JjL2NvbXBvbmVudHMvZ3JpZC1jZWxsLnRzeCIsICJzcmMvY29tcG9uZW50cy9kYXktbnVtYmVyLnRzeCIsICJzcmMvY29tcG9uZW50cy9hbGwtZXZlbnRzLWRpYWxvZy50c3giLCAic3JjL2NvbXBvbmVudHMvZHJhZ2dhYmxlLWV2ZW50L2RyYWdnYWJsZS1ldmVudC50c3giLCAic3JjL2NvbXBvbmVudHMvZHJvcHBhYmxlLWNlbGwudHN4IiwgInNyYy9jb21wb25lbnRzL3Jlc291cmNlLWNlbGwudHN4IiwgInNyYy9jb21wb25lbnRzL2hvcml6b250YWwtZ3JpZC9ob3Jpem9udGFsLWdyaWQtZXZlbnRzLWxheWVyLnRzeCIsICJzcmMvY29tcG9uZW50cy9hbGwtZGF5LXJvdy9hbGwtZGF5LWNlbGwudHN4IiwgInNyYy9jb21wb25lbnRzL2hvdXItbGFiZWwvaG91ci1sYWJlbC50c3giLCAic3JjL2NvbXBvbmVudHMvdmVydGljYWwtZ3JpZC92ZXJ0aWNhbC1ncmlkLWNvbC50c3giLCAic3JjL2NvbXBvbmVudHMvdmVydGljYWwtZ3JpZC92ZXJ0aWNhbC1ncmlkLWV2ZW50cy1sYXllci50c3giLCAic3JjL2NvbXBvbmVudHMvY3VycmVudC10aW1lLWluZGljYXRvci50c3giLCAic3JjL2ZlYXR1cmVzL2NhbGVuZGFyL2hvb2tzL3VzZVByb2Nlc3NlZERheUV2ZW50cy50cyIsICJzcmMvbGliL3V0aWxzL3Bvc2l0aW9uLWRheS1ldmVudHMudHMiLCAic3JjL2NvbXBvbmVudHMvdmVydGljYWwtZ3JpZC92ZXJ0aWNhbC1ncmlkLWhlYWRlci1jb250YWluZXIudHN4IiwgInNyYy9jb21wb25lbnRzL3ZlcnRpY2FsLWdyaWQvdmVydGljYWwtZ3JpZC50c3giLCAic3JjL2ZlYXR1cmVzL2NhbGVuZGFyL3V0aWxzL3ZpZXctaG91cnMudHMiLCAic3JjL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbXBvbmVudHMvZGF5LXZpZXcvZGF5LXZpZXcudHN4IiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci9jb21wb25lbnRzL21vbnRoLXZpZXcvbW9udGgtdmlldy50c3giLCAic3JjL2NvbXBvbmVudHMvaG9yaXpvbnRhbC1ncmlkL2hvcml6b250YWwtZ3JpZC1oZWFkZXItY29udGFpbmVyLnRzeCIsICJzcmMvY29tcG9uZW50cy9ob3Jpem9udGFsLWdyaWQvaG9yaXpvbnRhbC1ncmlkLnRzeCIsICJzcmMvZmVhdHVyZXMvY2FsZW5kYXIvY29tcG9uZW50cy9tb250aC12aWV3L21vbnRoLWhlYWRlci50c3giLCAic3JjL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbXBvbmVudHMvd2Vlay12aWV3L3dlZWstdmlldy50c3giLCAic3JjL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbXBvbmVudHMveWVhci12aWV3L3llYXItdmlldy50c3giLCAic3JjL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvcHJvdmlkZXIudHN4IiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci9jb21wb25lbnRzL2lsYW15LWNhbGVuZGFyLnRzeCIsICJzcmMvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy9yZXNvdXJjZS1ldmVudC1ncmlkLnRzeCIsICJzcmMvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy9kYXktdmlldy9yZXNvdXJjZS1kYXktaG9yaXpvbnRhbC50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvZGF5LXZpZXcvcmVzb3VyY2UtZGF5LXZlcnRpY2FsLnRzeCIsICJzcmMvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy9kYXktdmlldy9pbmRleC50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvbW9udGgtdmlldy9yZXNvdXJjZS1tb250aC1ob3Jpem9udGFsLnRzeCIsICJzcmMvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy9tb250aC12aWV3L3Jlc291cmNlLW1vbnRoLXZlcnRpY2FsLnRzeCIsICJzcmMvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy9tb250aC12aWV3L2luZGV4LnRzeCIsICJzcmMvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy93ZWVrLXZpZXcvcmVzb3VyY2Utd2Vlay1ob3Jpem9udGFsLnRzeCIsICJzcmMvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy93ZWVrLXZpZXcvcmVzb3VyY2Utd2Vlay12ZXJ0aWNhbC50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvd2Vlay12aWV3L2luZGV4LnRzeCIsICJzcmMvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy9pbGFteS1yZXNvdXJjZS1jYWxlbmRhci9yZXNvdXJjZS1jYWxlbmRhci1ib2R5LnRzeCIsICJzcmMvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy9pbGFteS1yZXNvdXJjZS1jYWxlbmRhci9pbGFteS1yZXNvdXJjZS1jYWxlbmRhci50c3giXSwKICAic291cmNlc0NvbnRlbnQiOiBbCiAgICAiLy8gUmUtZXhwb3J0IHJydWxlLmpzIHR5cGVzIGZvciBjb252ZW5pZW5jZVxuZXhwb3J0IHR5cGUgeyBGcmVxdWVuY3ksIFdlZWtkYXkgfSBmcm9tICdycnVsZSdcbmV4cG9ydCB7IFJSdWxlIH0gZnJvbSAncnJ1bGUnXG5leHBvcnQgdHlwZSB7IEV2ZW50Rm9ybVByb3BzIH0gZnJvbSAnLi9jb21wb25lbnRzL2V2ZW50LWZvcm0vZXZlbnQtZm9ybSdcbmV4cG9ydCB0eXBlIHsgQnVzaW5lc3NIb3VycywgQ2FsZW5kYXJFdmVudCwgV2Vla0RheXMgfSBmcm9tICcuL2NvbXBvbmVudHMvdHlwZXMnXG5leHBvcnQgeyBJbGFteUNhbGVuZGFyIH0gZnJvbSAnLi9mZWF0dXJlcy9jYWxlbmRhci9jb21wb25lbnRzL2lsYW15LWNhbGVuZGFyJ1xuZXhwb3J0IHR5cGUge1xuXHRDZWxsQ2xpY2tJbmZvLFxuXHRJbGFteUNhbGVuZGFyUHJvcHMsXG5cdFJlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yUHJvcHMsXG59IGZyb20gJy4vZmVhdHVyZXMvY2FsZW5kYXIvdHlwZXMnXG4vLyBFeHBvcnQgdHlwZXNcbmV4cG9ydCB0eXBlIHsgUlJ1bGVPcHRpb25zIH0gZnJvbSAnLi9mZWF0dXJlcy9yZWN1cnJlbmNlL3R5cGVzJ1xuLy8gUlJVTEUtYmFzZWQgcmVjdXJyZW5jZSBzeXN0ZW1cbmV4cG9ydCB7XG5cdGdlbmVyYXRlUmVjdXJyaW5nRXZlbnRzLFxuXHRpc1JlY3VycmluZ0V2ZW50LFxufSBmcm9tICcuL2ZlYXR1cmVzL3JlY3VycmVuY2UvdXRpbHMvcmVjdXJyZW5jZS1oYW5kbGVyJ1xuZXhwb3J0IHR5cGUgeyBJbGFteVJlc291cmNlQ2FsZW5kYXJQcm9wcyB9IGZyb20gJy4vZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy9pbGFteS1yZXNvdXJjZS1jYWxlbmRhcidcbmV4cG9ydCB7IElsYW15UmVzb3VyY2VDYWxlbmRhciB9IGZyb20gJy4vZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy9pbGFteS1yZXNvdXJjZS1jYWxlbmRhci9pbGFteS1yZXNvdXJjZS1jYWxlbmRhcidcbi8vIFJlc291cmNlIGNhbGVuZGFyIHR5cGVzXG5leHBvcnQgdHlwZSB7IFJlc291cmNlIH0gZnJvbSAnLi9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci90eXBlcydcbi8vIFB1YmxpYyBjYWxlbmRhciBjb250ZXh0IGhvb2tzXG5leHBvcnQge1xuXHR0eXBlIFVzZUlsYW15Q2FsZW5kYXJDb250ZXh0UmV0dXJuLFxuXHR1c2VJbGFteUNhbGVuZGFyQ29udGV4dCxcbn0gZnJvbSAnLi9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmV4cG9ydCB7IGRlZmF1bHRUcmFuc2xhdGlvbnMgfSBmcm9tICcuL2xpYi90cmFuc2xhdGlvbnMvZGVmYXVsdCdcbi8vIFRyYW5zbGF0aW9uIHN5c3RlbVxuZXhwb3J0IHR5cGUge1xuXHRUcmFuc2xhdGlvbktleSxcblx0VHJhbnNsYXRpb25zLFxuXHRUcmFuc2xhdG9yRnVuY3Rpb24sXG59IGZyb20gJy4vbGliL3RyYW5zbGF0aW9ucy90eXBlcydcbmV4cG9ydCB0eXBlIHsgQ2FsZW5kYXJWaWV3LCBUaW1lRm9ybWF0IH0gZnJvbSAnLi90eXBlcydcbiIsCiAgICAiaW1wb3J0IHtcblx0QW5pbWF0ZVByZXNlbmNlLFxuXHR0eXBlIEhUTUxNb3Rpb25Qcm9wcyxcblx0bW90aW9uLFxuXHR0eXBlIFZhcmlhbnRzLFxufSBmcm9tICdtb3Rpb24vcmVhY3QnXG5pbXBvcnQgdHlwZSAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuaW50ZXJmYWNlIEFuaW1hdGVkU2VjdGlvblByb3BzXG5cdGV4dGVuZHMgT21pdDxIVE1MTW90aW9uUHJvcHM8J2Rpdic+LCAnY2hpbGRyZW4nIHwgJ2xheW91dCcgfCAnbGF5b3V0SWQnPiB7XG5cdGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGVcblx0dHJhbnNpdGlvbktleTogc3RyaW5nXG5cdGRlbGF5PzogbnVtYmVyXG5cdGNsYXNzTmFtZT86IHN0cmluZ1xuXHRkaXJlY3Rpb24/OiAndmVydGljYWwnIHwgJ2hvcml6b250YWwnXG5cdGxheW91dD86IGJvb2xlYW4gfCAncG9zaXRpb24nIHwgJ3NpemUnIHwgJ3ByZXNlcnZlLWFzcGVjdCdcblx0bGF5b3V0SWQ/OiBzdHJpbmdcblx0J2RhdGEtdGVzdGlkJz86IHN0cmluZ1xufVxuXG5jb25zdCB2YXJpYW50czogVmFyaWFudHMgPSB7XG5cdGhpZGRlbjogKHsgZGlyZWN0aW9uIH06IHsgZGlyZWN0aW9uOiAndmVydGljYWwnIHwgJ2hvcml6b250YWwnIH0pID0+ICh7XG5cdFx0b3BhY2l0eTogMCxcblx0XHR4OiBkaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyA/IDEwIDogMCxcblx0XHR5OiBkaXJlY3Rpb24gPT09ICd2ZXJ0aWNhbCcgPyAtMTAgOiAwLFxuXHR9KSxcblx0dmlzaWJsZTogKHsgZGVsYXkgfTogeyBkZWxheTogbnVtYmVyIH0pID0+ICh7XG5cdFx0b3BhY2l0eTogMSxcblx0XHR4OiAwLFxuXHRcdHk6IDAsXG5cdFx0dHJhbnNpdGlvbjogeyBkdXJhdGlvbjogMC4yLCBlYXNlOiBbMC40LCAwLCAwLjIsIDFdLCBkZWxheSB9LFxuXHR9KSxcblx0ZXhpdDogKHsgZGlyZWN0aW9uIH06IHsgZGlyZWN0aW9uOiAndmVydGljYWwnIHwgJ2hvcml6b250YWwnIH0pID0+ICh7XG5cdFx0b3BhY2l0eTogMCxcblx0XHR4OiBkaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyA/IC0xMCA6IDAsXG5cdFx0eTogZGlyZWN0aW9uID09PSAndmVydGljYWwnID8gLTEwIDogMCxcblx0XHR0cmFuc2l0aW9uOiB7IGR1cmF0aW9uOiAwLjE1IH0sXG5cdH0pLFxufVxuXG5leHBvcnQgY29uc3QgQW5pbWF0ZWRTZWN0aW9uOiBSZWFjdC5GQzxBbmltYXRlZFNlY3Rpb25Qcm9wcz4gPSAoe1xuXHRjaGlsZHJlbixcblx0dHJhbnNpdGlvbktleSxcblx0ZGVsYXkgPSAwLFxuXHRjbGFzc05hbWUsXG5cdGRpcmVjdGlvbiA9ICd2ZXJ0aWNhbCcsXG5cdGxheW91dCxcblx0bGF5b3V0SWQsXG5cdCdkYXRhLXRlc3RpZCc6IHRlc3RJZCxcblx0cmVmLFxuXHQuLi5wcm9wc1xufSkgPT4gKFxuXHQ8QW5pbWF0ZVByZXNlbmNlIG1vZGU9XCJ3YWl0XCI+XG5cdFx0PG1vdGlvbi5kaXZcblx0XHRcdGFuaW1hdGU9XCJ2aXNpYmxlXCJcblx0XHRcdGNsYXNzTmFtZT17Y24oJ2lubGluZS1ibG9jayB3LWZ1bGwnLCBjbGFzc05hbWUpfVxuXHRcdFx0Y3VzdG9tPXt7IGRlbGF5LCBkaXJlY3Rpb24gfX1cblx0XHRcdGRhdGEtdGVzdGlkPXt0ZXN0SWR9XG5cdFx0XHRleGl0PVwiZXhpdFwiXG5cdFx0XHRpbml0aWFsPVwiaGlkZGVuXCJcblx0XHRcdGtleT17dHJhbnNpdGlvbktleX1cblx0XHRcdGxheW91dD17bGF5b3V0fVxuXHRcdFx0bGF5b3V0SWQ9e2xheW91dElkfVxuXHRcdFx0cmVmPXtyZWZ9XG5cdFx0XHR2YXJpYW50cz17dmFyaWFudHN9XG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0PlxuXHRcdFx0e2NoaWxkcmVufVxuXHRcdDwvbW90aW9uLmRpdj5cblx0PC9BbmltYXRlUHJlc2VuY2U+XG4pXG5cbkFuaW1hdGVkU2VjdGlvbi5kaXNwbGF5TmFtZSA9ICdBbmltYXRlZFNlY3Rpb24nXG4iLAogICAgImltcG9ydCB0eXBlIHsgQ2xhc3NWYWx1ZSB9IGZyb20gJ2Nsc3gnXG5pbXBvcnQgeyBjbHN4IH0gZnJvbSAnY2xzeCdcbmltcG9ydCB7IHR3TWVyZ2UgfSBmcm9tICd0YWlsd2luZC1tZXJnZSdcbmltcG9ydCBkYXlqcywgeyB0eXBlIERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5cbmV4cG9ydCBmdW5jdGlvbiBjbiguLi5pbnB1dHM6IENsYXNzVmFsdWVbXSkge1xuXHRyZXR1cm4gdHdNZXJnZShjbHN4KGlucHV0cykpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzYWZlRGF0ZShcblx0ZGF0ZTogRGF5anMgfCBEYXRlIHwgc3RyaW5nIHwgdW5kZWZpbmVkXG4pOiBEYXlqcyB8IHVuZGVmaW5lZCB7XG5cdGlmIChkYXRlID09PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkXG5cdH1cblx0aWYgKGRheWpzLmlzRGF5anMoZGF0ZSkpIHtcblx0XHRyZXR1cm4gZGF0ZVxuXHR9XG5cdGNvbnN0IHBhcnNlZERhdGUgPSBkYXlqcyhkYXRlKVxuXHRyZXR1cm4gcGFyc2VkRGF0ZS5pc1ZhbGlkKCkgPyBwYXJzZWREYXRlIDogdW5kZWZpbmVkXG59XG5cbmV4cG9ydCBjb25zdCBvbWl0S2V5cyA9IDxUIGV4dGVuZHMgb2JqZWN0LCBLIGV4dGVuZHMga2V5b2YgVD4oXG5cdG9iajogVCxcblx0a2V5czogS1tdXG4pOiBPbWl0PFQsIEs+ID0+IHtcblx0Y29uc3QgcmVzdWx0ID0geyAuLi5vYmogfVxuXHRmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG5cdFx0ZGVsZXRlIHJlc3VsdFtrZXldXG5cdH1cblx0cmV0dXJuIHJlc3VsdFxufVxuXG4vKipcbiAqIE5vcm1hbGl6ZXMgY2FsZW5kYXIgZXZlbnRzIGZyb20gcHVibGljLWZhY2luZyBmb3JtYXQgdG8gaW50ZXJuYWwgZm9ybWF0LlxuICogQ29udmVydHMgZmxleGlibGUgZGF0ZSB0eXBlcyAoZGF5anMsIERhdGUsIHN0cmluZykgdG8gc3RyaWN0IGRheWpzIG9iamVjdHMuXG4gKlxuICogQHBhcmFtIGV2ZW50cyAtIEFycmF5IG9mIGNhbGVuZGFyIGV2ZW50cyB3aXRoIGZsZXhpYmxlIGRhdGUgdHlwZXNcbiAqIEByZXR1cm5zIE5vcm1hbGl6ZWQgYXJyYXkgb2YgY2FsZW5kYXIgZXZlbnRzIHdpdGggZGF5anMgZGF0ZXNcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gUmVndWxhciBjYWxlbmRhciBldmVudHNcbiAqIGNvbnN0IGV2ZW50cyA9IG5vcm1hbGl6ZUV2ZW50czxJbGFteUNhbGVuZGFyUHJvcEV2ZW50LCBDYWxlbmRhckV2ZW50Pihwcm9wRXZlbnRzKVxuICpcbiAqIC8vIFJlc291cmNlIGNhbGVuZGFyIGV2ZW50c1xuICogY29uc3QgcmVzb3VyY2VFdmVudHMgPSBub3JtYWxpemVFdmVudHM8SWxhbXlSZXNvdXJjZUNhbGVuZGFyUHJvcEV2ZW50LCBDYWxlbmRhckV2ZW50Pihwcm9wRXZlbnRzKVxuICovXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplRXZlbnRzPFxuXHRUSW5wdXQgZXh0ZW5kcyB7XG5cdFx0c3RhcnQ6IERheWpzIHwgRGF0ZSB8IHN0cmluZ1xuXHRcdGVuZDogRGF5anMgfCBEYXRlIHwgc3RyaW5nXG5cdH0sXG5cdFRPdXRwdXQsXG4+KGV2ZW50czogVElucHV0W10gfCB1bmRlZmluZWQpOiBUT3V0cHV0W10ge1xuXHRpZiAoIWV2ZW50cyB8fCAhZXZlbnRzLmxlbmd0aCkge1xuXHRcdHJldHVybiBbXVxuXHR9XG5cblx0cmV0dXJuIGV2ZW50cy5tYXAoKGV2ZW50KSA9PiB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdC4uLmV2ZW50LFxuXHRcdFx0c3RhcnQ6IGRheWpzLmlzRGF5anMoZXZlbnQuc3RhcnQpID8gZXZlbnQuc3RhcnQgOiBkYXlqcyhldmVudC5zdGFydCksXG5cdFx0XHRlbmQ6IGRheWpzLmlzRGF5anMoZXZlbnQuZW5kKSA/IGV2ZW50LmVuZCA6IGRheWpzKGV2ZW50LmVuZCksXG5cdFx0fSBhcyBUT3V0cHV0XG5cdH0pXG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgT3BVbml0VHlwZSBhcyBEYXlqc09wVW5pdFR5cGUsIFBsdWdpbkZ1bmMgfSBmcm9tICdkYXlqcydcbmltcG9ydCBkYXlqcyBmcm9tICdkYXlqcydcbmltcG9ydCBpc0JldHdlZW4gZnJvbSAnZGF5anMvcGx1Z2luL2lzQmV0d2Vlbi5qcydcbmltcG9ydCBpc1NhbWVPckFmdGVyIGZyb20gJ2RheWpzL3BsdWdpbi9pc1NhbWVPckFmdGVyLmpzJ1xuaW1wb3J0IGlzU2FtZU9yQmVmb3JlIGZyb20gJ2RheWpzL3BsdWdpbi9pc1NhbWVPckJlZm9yZS5qcydcbmltcG9ydCBsb2NhbGVEYXRhIGZyb20gJ2RheWpzL3BsdWdpbi9sb2NhbGVEYXRhLmpzJ1xuaW1wb3J0IG1pbk1heCBmcm9tICdkYXlqcy9wbHVnaW4vbWluTWF4LmpzJ1xuaW1wb3J0IHRpbWV6b25lIGZyb20gJ2RheWpzL3BsdWdpbi90aW1lem9uZS5qcydcbmltcG9ydCB1dGMgZnJvbSAnZGF5anMvcGx1Z2luL3V0Yy5qcydcbmltcG9ydCB3ZWVrZGF5IGZyb20gJ2RheWpzL3BsdWdpbi93ZWVrZGF5LmpzJ1xuaW1wb3J0IHdlZWtPZlllYXIgZnJvbSAnZGF5anMvcGx1Z2luL3dlZWtPZlllYXIuanMnXG5cbi8qKlxuICogUGx1Z2luIHRoYXQgZml4ZXMgYSBkYXlqcy10aW1lem9uZSBidWcgd2hlcmUgLnN0YXJ0T2YoKSBhbmQgLmVuZE9mKCkgZHJvcFxuICogdGltZXpvbmUgaW5mbyB3aGVuIHRoZSBzeXN0ZW0ncyBsb2NhbCB0aW1lem9uZSBoYXMgYSBEU1QgdHJhbnNpdGlvbiBuZWFyXG4gKiB0aGUgdGFyZ2V0IGRhdGUuIEFmdGVyIGVhY2ggc3RhcnRPZi9lbmRPZiBjYWxsLCBpZiB0aGUgVVRDIG9mZnNldCBoYXNcbiAqIGRyaWZ0ZWQgZnJvbSB3aGF0IHRoZSB0aW1lem9uZSBleHBlY3RzLCByZS1hcHBseSB0aGUgdGltZXpvbmUgd2l0aFxuICoga2VlcExvY2FsVGltZT10cnVlIHRvIHJlc3RvcmUgdGhlIGNvcnJlY3Qgb2Zmc2V0LlxuICovXG5pbnRlcmZhY2UgRGF5anNJbnRlcm5hbCBleHRlbmRzIGRheWpzLkRheWpzIHtcblx0JHg6IHsgJHRpbWV6b25lPzogc3RyaW5nIH1cbn1cblxubGV0IGRlZmF1bHRUaW1lem9uZTogc3RyaW5nIHwgdW5kZWZpbmVkXG5cbmNvbnN0IGZpeFRpbWV6b25lT2Zmc2V0OiBQbHVnaW5GdW5jID0gKF9vcHRpb24sIGRheWpzQ2xhc3MsIGRheWpzRmFjdG9yeSkgPT4ge1xuXHRjb25zdCBwcm90byA9IGRheWpzQ2xhc3MucHJvdG90eXBlXG5cblx0Ly8gSW50ZXJjZXB0IHNldERlZmF1bHQgdG8gdHJhY2sgdGhlIGNvbmZpZ3VyZWQgdGltZXpvbmVcblx0Y29uc3Qgb3JpZ2luYWxTZXREZWZhdWx0ID0gZGF5anNGYWN0b3J5LnR6LnNldERlZmF1bHRcblx0ZGF5anNGYWN0b3J5LnR6LnNldERlZmF1bHQgPSAodGltZXpvbmU/OiBzdHJpbmcpID0+IHtcblx0XHRkZWZhdWx0VGltZXpvbmUgPSB0aW1lem9uZVxuXHRcdHJldHVybiBvcmlnaW5hbFNldERlZmF1bHQodGltZXpvbmUpXG5cdH1cblxuXHR0eXBlIFN0YXJ0T2ZGbiA9ICh1bml0OiBEYXlqc09wVW5pdFR5cGUsIF9zdGFydE9mPzogYm9vbGVhbikgPT4gZGF5anMuRGF5anNcblx0Y29uc3Qgb3JpZ2luYWxTdGFydE9mID0gcHJvdG8uc3RhcnRPZiBhcyBTdGFydE9mRm5cblx0Y29uc3Qgb3JpZ2luYWxFbmRPZiA9IHByb3RvLmVuZE9mXG5cblx0ZnVuY3Rpb24gcmVzdG9yZVRpbWV6b25lKFxuXHRcdGluc3RhbmNlOiBkYXlqcy5EYXlqcyxcblx0XHRyZXN1bHQ6IGRheWpzLkRheWpzXG5cdCk6IGRheWpzLkRheWpzIHtcblx0XHRjb25zdCB0eiA9IChpbnN0YW5jZSBhcyBEYXlqc0ludGVybmFsKS4keD8uJHRpbWV6b25lIHx8IGRlZmF1bHRUaW1lem9uZVxuXHRcdGlmICghdHopIHJldHVybiByZXN1bHRcblxuXHRcdGNvbnN0IGV4cGVjdGVkT2Zmc2V0ID0gZGF5anNGYWN0b3J5XG5cdFx0XHQudHoocmVzdWx0LmZvcm1hdCgnWVlZWS1NTS1ERFRISDptbTpzcycpLCB0eilcblx0XHRcdC51dGNPZmZzZXQoKVxuXHRcdGlmIChyZXN1bHQudXRjT2Zmc2V0KCkgIT09IGV4cGVjdGVkT2Zmc2V0KSB7XG5cdFx0XHRyZXR1cm4gcmVzdWx0LnR6KHR6LCB0cnVlKVxuXHRcdH1cblx0XHRyZXR1cm4gcmVzdWx0XG5cdH1cblxuXHQvLyBkYXlqcydzIGVuZE9mIGNhbGxzIHN0YXJ0T2YodW5pdCwgZmFsc2UpIGludGVybmFsbHkg4oCUIHRoZSBzZWNvbmQgYXJnXG5cdC8vIChfc3RhcnRPZikgY29udHJvbHMgc3RhcnQtdnMtZW5kIGJlaGF2aW9yLiBXZSBtdXN0IGZvcndhcmQgaXQuXG5cdHByb3RvLnN0YXJ0T2YgPSBmdW5jdGlvbiAodW5pdDogRGF5anNPcFVuaXRUeXBlLCBfc3RhcnRPZj86IGJvb2xlYW4pIHtcblx0XHRjb25zdCByZXN1bHQgPSBvcmlnaW5hbFN0YXJ0T2YuY2FsbCh0aGlzLCB1bml0LCBfc3RhcnRPZilcblx0XHRyZXR1cm4gcmVzdG9yZVRpbWV6b25lKHRoaXMsIHJlc3VsdClcblx0fVxuXG5cdC8vIGVuZE9mIGRlbGVnYXRlcyB0byBzdGFydE9mKHVuaXQsIGZhbHNlKSwgc28gdGhlIHBhdGNoZWQgc3RhcnRPZiBoYW5kbGVzIGl0XG5cdHByb3RvLmVuZE9mID0gb3JpZ2luYWxFbmRPZlxufVxuXG4vLyBFeHRlbmQgZGF5anMgd2l0aCBwbHVnaW5zXG5kYXlqcy5leHRlbmQod2Vla2RheSlcbmRheWpzLmV4dGVuZCh3ZWVrT2ZZZWFyKVxuZGF5anMuZXh0ZW5kKGlzU2FtZU9yQWZ0ZXIpXG5kYXlqcy5leHRlbmQoaXNTYW1lT3JCZWZvcmUpXG5kYXlqcy5leHRlbmQoaXNCZXR3ZWVuKVxuZGF5anMuZXh0ZW5kKG1pbk1heClcbmRheWpzLmV4dGVuZCh0aW1lem9uZSlcbmRheWpzLmV4dGVuZCh1dGMpXG5kYXlqcy5leHRlbmQobG9jYWxlRGF0YSlcbmRheWpzLmV4dGVuZChmaXhUaW1lem9uZU9mZnNldClcblxuLy8gQ3VzdG9tIGRheWpzIGNvbnN0cnVjdG9yIHRoYXQgYXV0b21hdGljYWxseSB1c2VzIC50eigpIGZvciBhbGwgaW5zdGFuY2VzLlxuLy8gVGhpcyBlbnN1cmVzIHRoYXQgZGF5anMoKSBjYWxscyB0aHJvdWdob3V0IHRoZSBjb2RlYmFzZSBob25vciB0aGUgZGVmYXVsdFxuLy8gdGltZXpvbmUgc2V0IHZpYSBkYXlqcy50ei5zZXREZWZhdWx0KCkuXG5jb25zdCB0aW1lem9uZUF3YXJlRGF5anMgPSAoLi4uYXJnczogdW5rbm93bltdKSA9PiB7XG5cdHJldHVybiAoZGF5anMgYXMgdW5rbm93biBhcyB7IHR6OiAoLi4uYTogdW5rbm93bltdKSA9PiBkYXlqcy5EYXlqcyB9KS50eihcblx0XHQuLi5hcmdzXG5cdClcbn1cblxuLy8gQXR0YWNoIGFsbCBzdGF0aWMgbWV0aG9kcyBhbmQgcHJvcGVydGllcyBmcm9tIHRoZSBvcmlnaW5hbCBkYXlqcyB0byBvdXIgd3JhcHBlci5cbi8vIFRoaXMgYWxsb3dzIHRoZSB3cmFwcGVyIHRvIGJlIHVzZWQgYXMgYSBkcm9wLWluIHJlcGxhY2VtZW50LlxuT2JqZWN0LmFzc2lnbih0aW1lem9uZUF3YXJlRGF5anMsIGRheWpzKVxuXG4vLyBFeHBvcnQgdGhlIERheWpzIHR5cGUgc2VwYXJhdGVseSBmb3IgdXNlIGFzIGEgdHlwZSBpbiBvdGhlciBmaWxlcy5cbi8vIEZpbGVzIHNob3VsZCB1c2UgJ2ltcG9ydCBkYXlqcywgeyB0eXBlIERheWpzIH0gZnJvbSBcIkAvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnXCInXG5leHBvcnQgdHlwZSB7IERheWpzLCBNYW5pcHVsYXRlVHlwZSwgT3BVbml0VHlwZSB9IGZyb20gJ2RheWpzJ1xuZXhwb3J0IGRlZmF1bHQgdGltZXpvbmVBd2FyZURheWpzIGFzIHR5cGVvZiBkYXlqc1xuIiwKICAgICJpbXBvcnQgdHlwZSB7XG5cdERyYWdDYW5jZWxFdmVudCxcblx0RHJhZ0VuZEV2ZW50LFxuXHREcmFnU3RhcnRFdmVudCxcbn0gZnJvbSAnQGRuZC1raXQvY29yZSdcbmltcG9ydCB7XG5cdERuZENvbnRleHQsXG5cdE1vdXNlU2Vuc29yLFxuXHRwb2ludGVyV2l0aGluLFxuXHRUb3VjaFNlbnNvcixcblx0dXNlU2Vuc29yLFxuXHR1c2VTZW5zb3JzLFxufSBmcm9tICdAZG5kLWtpdC9jb3JlJ1xuaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgeyBSZWN1cnJlbmNlRWRpdERpYWxvZyB9IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS9jb21wb25lbnRzL3JlY3VycmVuY2UtZWRpdC1kaWFsb2cnXG5pbXBvcnQgdHlwZSB7IFJlY3VycmVuY2VFZGl0U2NvcGUgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvdHlwZXMnXG5pbXBvcnQgeyBpc1JlY3VycmluZ0V2ZW50IH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL3V0aWxzL3JlY3VycmVuY2UtaGFuZGxlcidcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB7IGdldFVwZGF0ZWRFdmVudCB9IGZyb20gJy4vZG5kLXV0aWxzJ1xuaW1wb3J0IHsgRXZlbnREcmFnT3ZlcmxheSB9IGZyb20gJy4vZXZlbnQtZHJhZy1vdmVybGF5J1xuXG5pbnRlcmZhY2UgQ2FsZW5kYXJEbmRDb250ZXh0UHJvcHMge1xuXHRjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBDYWxlbmRhckRuZENvbnRleHQoeyBjaGlsZHJlbiB9OiBDYWxlbmRhckRuZENvbnRleHRQcm9wcykge1xuXHRjb25zdCBhY3RpdmVFdmVudFJlZiA9IHVzZVJlZjxDYWxlbmRhckV2ZW50PihudWxsKVxuXHRjb25zdCBkcmFnT3ZlcmxheVJlZiA9IHVzZVJlZjx7XG5cdFx0c2V0QWN0aXZlRXZlbnQ6IChldmVudDogQ2FsZW5kYXJFdmVudCB8IG51bGwpID0+IHZvaWRcblx0fT4obnVsbClcblxuXHRjb25zdCB7IHVwZGF0ZUV2ZW50LCB1cGRhdGVSZWN1cnJpbmdFdmVudCwgZGlzYWJsZURyYWdBbmREcm9wIH0gPVxuXHRcdHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KChjb250ZXh0KSA9PiAoe1xuXHRcdFx0dXBkYXRlRXZlbnQ6IGNvbnRleHQudXBkYXRlRXZlbnQsXG5cdFx0XHR1cGRhdGVSZWN1cnJpbmdFdmVudDogY29udGV4dC51cGRhdGVSZWN1cnJpbmdFdmVudCxcblx0XHRcdGRpc2FibGVEcmFnQW5kRHJvcDogY29udGV4dC5kaXNhYmxlRHJhZ0FuZERyb3AsXG5cdFx0fSkpXG5cblx0Ly8gU3RhdGUgZm9yIHJlY3VycmluZyBldmVudCBkaWFsb2dcblx0Y29uc3QgW3JlY3VycmluZ0RpYWxvZywgc2V0UmVjdXJyaW5nRGlhbG9nXSA9IHVzZVN0YXRlPHtcblx0XHRpc09wZW46IGJvb2xlYW5cblx0XHRldmVudDogQ2FsZW5kYXJFdmVudCB8IG51bGxcblx0XHR1cGRhdGVzOiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+IHwgbnVsbFxuXHR9Pih7XG5cdFx0aXNPcGVuOiBmYWxzZSxcblx0XHRldmVudDogbnVsbCxcblx0XHR1cGRhdGVzOiBudWxsLFxuXHR9KVxuXG5cdC8vIENvbmZpZ3VyZSBzZW5zb3JzIHdpdGggcmVkdWNlZCBhY3RpdmF0aW9uIGNvbnN0cmFpbnRzIGZvciBlYXNpZXIgZHJhZ2dpbmdcblx0Y29uc3QgbW91c2VTZW5zb3IgPSB1c2VTZW5zb3IoTW91c2VTZW5zb3IsIHtcblx0XHQvLyBSZXF1aXJlIG1pbmltYWwgbW92ZW1lbnQgYmVmb3JlIGFjdGl2YXRpbmdcblx0XHRhY3RpdmF0aW9uQ29uc3RyYWludDoge1xuXHRcdFx0ZGlzdGFuY2U6IDIsXG5cdFx0fSxcblx0fSlcblxuXHRjb25zdCB0b3VjaFNlbnNvciA9IHVzZVNlbnNvcihUb3VjaFNlbnNvciwge1xuXHRcdC8vIFJlZHVjZSBkZWxheSBmb3IgdG91Y2ggZGV2aWNlc1xuXHRcdGFjdGl2YXRpb25Db25zdHJhaW50OiB7XG5cdFx0XHRkZWxheTogMTAwLFxuXHRcdFx0dG9sZXJhbmNlOiA1LFxuXHRcdH0sXG5cdH0pXG5cblx0Y29uc3Qgc2Vuc29ycyA9IHVzZVNlbnNvcnMobW91c2VTZW5zb3IsIHRvdWNoU2Vuc29yKVxuXG5cdC8vIEhlbHBlciBmdW5jdGlvbiB0byBwZXJmb3JtIHRoZSBhY3R1YWwgZXZlbnQgdXBkYXRlXG5cdGNvbnN0IHBlcmZvcm1FdmVudFVwZGF0ZSA9IChcblx0XHRldmVudDogQ2FsZW5kYXJFdmVudCxcblx0XHR1cGRhdGVzOiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+XG5cdCkgPT4ge1xuXHRcdC8vIFZhbGlkYXRlIGlucHV0c1xuXHRcdGlmICghZXZlbnQgfHwgIWV2ZW50LmlkKSB7XG5cdFx0XHRyZXR1cm5cblx0XHR9XG5cblx0XHRpZiAoIXVwZGF0ZXMgfHwgT2JqZWN0LmtleXModXBkYXRlcykubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRyZXR1cm5cblx0XHR9XG5cblx0XHRpZiAoaXNSZWN1cnJpbmdFdmVudChldmVudCkpIHtcblx0XHRcdC8vIFNob3cgZGlhbG9nIGZvciByZWN1cnJpbmcgZXZlbnRzXG5cdFx0XHRzZXRSZWN1cnJpbmdEaWFsb2coe1xuXHRcdFx0XHRpc09wZW46IHRydWUsXG5cdFx0XHRcdGV2ZW50LFxuXHRcdFx0XHR1cGRhdGVzLFxuXHRcdFx0fSlcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gRGlyZWN0bHkgdXBkYXRlIHJlZ3VsYXIgZXZlbnRzXG5cdFx0XHR1cGRhdGVFdmVudChldmVudC5pZCwgdXBkYXRlcylcblx0XHR9XG5cdH1cblxuXHQvLyBIYW5kbGUgcmVjdXJyaW5nIGV2ZW50IGRpYWxvZyBjb25maXJtYXRpb25cblx0Y29uc3QgaGFuZGxlUmVjdXJyaW5nRXZlbnRDb25maXJtID0gKHNjb3BlOiBSZWN1cnJlbmNlRWRpdFNjb3BlKSA9PiB7XG5cdFx0aWYgKCFyZWN1cnJpbmdEaWFsb2cuZXZlbnQgfHwgIXJlY3VycmluZ0RpYWxvZy51cGRhdGVzKSB7XG5cdFx0XHRzZXRSZWN1cnJpbmdEaWFsb2coeyBpc09wZW46IGZhbHNlLCBldmVudDogbnVsbCwgdXBkYXRlczogbnVsbCB9KVxuXHRcdFx0cmV0dXJuXG5cdFx0fVxuXG5cdFx0dHJ5IHtcblx0XHRcdHVwZGF0ZVJlY3VycmluZ0V2ZW50KHJlY3VycmluZ0RpYWxvZy5ldmVudCwgcmVjdXJyaW5nRGlhbG9nLnVwZGF0ZXMsIHtcblx0XHRcdFx0c2NvcGUsXG5cdFx0XHRcdGV2ZW50RGF0ZTogcmVjdXJyaW5nRGlhbG9nLmV2ZW50LnN0YXJ0LFxuXHRcdFx0fSlcblx0XHR9IGNhdGNoIHtcblx0XHRcdC8vIFNpbGVudGx5IGhhbmRsZSBlcnJvciBhbmQgcmVzZXQgZGlhbG9nIHN0YXRlXG5cdFx0fSBmaW5hbGx5IHtcblx0XHRcdHNldFJlY3VycmluZ0RpYWxvZyh7IGlzT3BlbjogZmFsc2UsIGV2ZW50OiBudWxsLCB1cGRhdGVzOiBudWxsIH0pXG5cdFx0fVxuXHR9XG5cblx0Ly8gSGFuZGxlIHJlY3VycmluZyBldmVudCBkaWFsb2cgY2xvc2Vcblx0Y29uc3QgaGFuZGxlUmVjdXJyaW5nRXZlbnRDbG9zZSA9ICgpID0+IHtcblx0XHRzZXRSZWN1cnJpbmdEaWFsb2coeyBpc09wZW46IGZhbHNlLCBldmVudDogbnVsbCwgdXBkYXRlczogbnVsbCB9KVxuXHR9XG5cblx0Y29uc3QgaGFuZGxlRHJhZ1N0YXJ0ID0gKGV2ZW50OiBEcmFnU3RhcnRFdmVudCkgPT4ge1xuXHRcdGNvbnN0IHsgYWN0aXZlIH0gPSBldmVudFxuXG5cdFx0Ly8gU2V0IHRoZSBhY3RpdmUgZXZlbnQgYmFzZWQgb24gdGhlIGV2ZW50IGRhdGFcblx0XHRpZiAoYWN0aXZlLmRhdGEuY3VycmVudD8udHlwZSA9PT0gJ2NhbGVuZGFyLWV2ZW50Jykge1xuXHRcdFx0ZHJhZ092ZXJsYXlSZWYuY3VycmVudD8uc2V0QWN0aXZlRXZlbnQoYWN0aXZlLmRhdGEuY3VycmVudC5ldmVudClcblx0XHRcdGFjdGl2ZUV2ZW50UmVmLmN1cnJlbnQgPSBhY3RpdmUuZGF0YS5jdXJyZW50LmV2ZW50XG5cdFx0fVxuXHR9XG5cblx0Y29uc3QgaGFuZGxlRHJhZ0VuZCA9IChldmVudDogRHJhZ0VuZEV2ZW50KSA9PiB7XG5cdFx0Y29uc3QgdXBkYXRlZEV2ZW50ID0gZ2V0VXBkYXRlZEV2ZW50KGV2ZW50LCBhY3RpdmVFdmVudFJlZi5jdXJyZW50KVxuXHRcdGlmICh1cGRhdGVkRXZlbnQpIHtcblx0XHRcdGNvbnN0IHsgYWN0aXZlRXZlbnQsIHVwZGF0ZXMgfSA9IHVwZGF0ZWRFdmVudFxuXHRcdFx0cGVyZm9ybUV2ZW50VXBkYXRlKGFjdGl2ZUV2ZW50LCB1cGRhdGVzKVxuXHRcdH1cblxuXHRcdC8vIENsZWFyIHRoZSBhY3RpdmUgZXZlbnQgcmVmZXJlbmNlXG5cdFx0YWN0aXZlRXZlbnRSZWYuY3VycmVudCA9IG51bGxcblx0XHRkcmFnT3ZlcmxheVJlZi5jdXJyZW50Py5zZXRBY3RpdmVFdmVudChudWxsKVxuXHR9XG5cblx0Y29uc3QgaGFuZGxlRHJhZ0NhbmNlbCA9IChfZXZlbnQ6IERyYWdDYW5jZWxFdmVudCkgPT4ge1xuXHRcdGFjdGl2ZUV2ZW50UmVmLmN1cnJlbnQgPSBudWxsXG5cdH1cblxuXHQvLyBJZiBkcmFnIGFuZCBkcm9wIGlzIGRpc2FibGVkLCBqdXN0IHJldHVybiBjaGlsZHJlbiB3aXRob3V0IERuZENvbnRleHRcblx0aWYgKGRpc2FibGVEcmFnQW5kRHJvcCkge1xuXHRcdHJldHVybiBjaGlsZHJlbiBhcyBSZWFjdC5SZWFjdEVsZW1lbnRcblx0fVxuXG5cdHJldHVybiAoXG5cdFx0PD5cblx0XHRcdDxEbmRDb250ZXh0XG5cdFx0XHRcdGNvbGxpc2lvbkRldGVjdGlvbj17cG9pbnRlcldpdGhpbn1cblx0XHRcdFx0b25EcmFnQ2FuY2VsPXtoYW5kbGVEcmFnQ2FuY2VsfVxuXHRcdFx0XHRvbkRyYWdFbmQ9e2hhbmRsZURyYWdFbmR9XG5cdFx0XHRcdG9uRHJhZ1N0YXJ0PXtoYW5kbGVEcmFnU3RhcnR9XG5cdFx0XHRcdHNlbnNvcnM9e3NlbnNvcnN9XG5cdFx0XHQ+XG5cdFx0XHRcdHtjaGlsZHJlbn1cblx0XHRcdFx0PEV2ZW50RHJhZ092ZXJsYXkgcmVmPXtkcmFnT3ZlcmxheVJlZn0gLz5cblx0XHRcdDwvRG5kQ29udGV4dD5cblxuXHRcdFx0ey8qIFJlY3VycmluZyBldmVudCBlZGl0IGRpYWxvZyAqL31cblx0XHRcdDxSZWN1cnJlbmNlRWRpdERpYWxvZ1xuXHRcdFx0XHRldmVudFRpdGxlPXtyZWN1cnJpbmdEaWFsb2cuZXZlbnQ/LnRpdGxlIHx8ICcnfVxuXHRcdFx0XHRpc09wZW49e3JlY3VycmluZ0RpYWxvZy5pc09wZW59XG5cdFx0XHRcdG9uQ2xvc2U9e2hhbmRsZVJlY3VycmluZ0V2ZW50Q2xvc2V9XG5cdFx0XHRcdG9uQ29uZmlybT17aGFuZGxlUmVjdXJyaW5nRXZlbnRDb25maXJtfVxuXHRcdFx0XHRvcGVyYXRpb25UeXBlPVwiZWRpdFwiXG5cdFx0XHQvPlxuXHRcdDwvPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB7IFNsb3QgfSBmcm9tICdAcmFkaXgtdWkvcmVhY3Qtc2xvdCdcbmltcG9ydCB0eXBlIHsgVmFyaWFudFByb3BzIH0gZnJvbSAnY2xhc3MtdmFyaWFuY2UtYXV0aG9yaXR5J1xuaW1wb3J0IHsgY3ZhIH0gZnJvbSAnY2xhc3MtdmFyaWFuY2UtYXV0aG9yaXR5J1xuaW1wb3J0IHR5cGUgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuY29uc3QgYnV0dG9uVmFyaWFudHMgPSBjdmEoXG5cdFwiaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0yIHdoaXRlc3BhY2Utbm93cmFwIHJvdW5kZWQtbWQgdGV4dC1zbSBmb250LW1lZGl1bSB0cmFuc2l0aW9uLWFsbCBkaXNhYmxlZDpwb2ludGVyLWV2ZW50cy1ub25lIGRpc2FibGVkOm9wYWNpdHktNTAgWyZfc3ZnXTpwb2ludGVyLWV2ZW50cy1ub25lIFsmX3N2Zzpub3QoW2NsYXNzKj0nc2l6ZS0nXSldOnNpemUtNCBzaHJpbmstMCBbJl9zdmddOnNocmluay0wIG91dGxpbmUtbm9uZSBmb2N1cy12aXNpYmxlOmJvcmRlci1yaW5nIGZvY3VzLXZpc2libGU6cmluZy1yaW5nLzUwIGZvY3VzLXZpc2libGU6cmluZy1bM3B4XSBhcmlhLWludmFsaWQ6cmluZy1kZXN0cnVjdGl2ZS8yMCBkYXJrOmFyaWEtaW52YWxpZDpyaW5nLWRlc3RydWN0aXZlLzQwIGFyaWEtaW52YWxpZDpib3JkZXItZGVzdHJ1Y3RpdmVcIixcblx0e1xuXHRcdHZhcmlhbnRzOiB7XG5cdFx0XHR2YXJpYW50OiB7XG5cdFx0XHRcdGRlZmF1bHQ6ICdiZy1wcmltYXJ5IHRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIGhvdmVyOmJnLXByaW1hcnkvOTAnLFxuXHRcdFx0XHRkZXN0cnVjdGl2ZTpcblx0XHRcdFx0XHQnYmctZGVzdHJ1Y3RpdmUgdGV4dC13aGl0ZSBob3ZlcjpiZy1kZXN0cnVjdGl2ZS85MCBmb2N1cy12aXNpYmxlOnJpbmctZGVzdHJ1Y3RpdmUvMjAgZGFyazpmb2N1cy12aXNpYmxlOnJpbmctZGVzdHJ1Y3RpdmUvNDAgZGFyazpiZy1kZXN0cnVjdGl2ZS82MCcsXG5cdFx0XHRcdG91dGxpbmU6XG5cdFx0XHRcdFx0J2JvcmRlciBiZy1iYWNrZ3JvdW5kIHNoYWRvdy14cyBob3ZlcjpiZy1hY2NlbnQgaG92ZXI6dGV4dC1hY2NlbnQtZm9yZWdyb3VuZCBkYXJrOmJnLWlucHV0LzMwIGRhcms6Ym9yZGVyLWlucHV0IGRhcms6aG92ZXI6YmctaW5wdXQvNTAnLFxuXHRcdFx0XHRzZWNvbmRhcnk6XG5cdFx0XHRcdFx0J2JnLXNlY29uZGFyeSB0ZXh0LXNlY29uZGFyeS1mb3JlZ3JvdW5kIGhvdmVyOmJnLXNlY29uZGFyeS84MCcsXG5cdFx0XHRcdGdob3N0OlxuXHRcdFx0XHRcdCdob3ZlcjpiZy1hY2NlbnQgaG92ZXI6dGV4dC1hY2NlbnQtZm9yZWdyb3VuZCBkYXJrOmhvdmVyOmJnLWFjY2VudC81MCcsXG5cdFx0XHRcdGxpbms6ICd0ZXh0LXByaW1hcnkgdW5kZXJsaW5lLW9mZnNldC00IGhvdmVyOnVuZGVybGluZScsXG5cdFx0XHR9LFxuXHRcdFx0c2l6ZToge1xuXHRcdFx0XHRkZWZhdWx0OiAnaC05IHB4LTQgcHktMiBoYXMtWz5zdmddOnB4LTMnLFxuXHRcdFx0XHRzbTogJ2gtOCByb3VuZGVkLW1kIGdhcC0xLjUgcHgtMyBoYXMtWz5zdmddOnB4LTIuNScsXG5cdFx0XHRcdGxnOiAnaC0xMCByb3VuZGVkLW1kIHB4LTYgaGFzLVs+c3ZnXTpweC00Jyxcblx0XHRcdFx0aWNvbjogJ3NpemUtOScsXG5cdFx0XHRcdCdpY29uLXNtJzogJ3NpemUtOCcsXG5cdFx0XHRcdCdpY29uLWxnJzogJ3NpemUtMTAnLFxuXHRcdFx0fSxcblx0XHR9LFxuXHRcdGRlZmF1bHRWYXJpYW50czoge1xuXHRcdFx0dmFyaWFudDogJ2RlZmF1bHQnLFxuXHRcdFx0c2l6ZTogJ2RlZmF1bHQnLFxuXHRcdH0sXG5cdH1cbilcblxuZnVuY3Rpb24gQnV0dG9uKHtcblx0Y2xhc3NOYW1lLFxuXHR2YXJpYW50LFxuXHRzaXplLFxuXHRhc0NoaWxkID0gZmFsc2UsXG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczwnYnV0dG9uJz4gJlxuXHRWYXJpYW50UHJvcHM8dHlwZW9mIGJ1dHRvblZhcmlhbnRzPiAmIHtcblx0XHRhc0NoaWxkPzogYm9vbGVhblxuXHR9KSB7XG5cdGNvbnN0IENvbXAgPSBhc0NoaWxkID8gU2xvdCA6ICdidXR0b24nXG5cblx0cmV0dXJuIChcblx0XHQ8Q29tcFxuXHRcdFx0Y2xhc3NOYW1lPXtjbihidXR0b25WYXJpYW50cyh7IHZhcmlhbnQsIHNpemUsIGNsYXNzTmFtZSB9KSl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJidXR0b25cIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdC8+XG5cdClcbn1cblxuZXhwb3J0IHsgQnV0dG9uLCBidXR0b25WYXJpYW50cyB9XG4iLAogICAgImltcG9ydCAqIGFzIERpYWxvZ1ByaW1pdGl2ZSBmcm9tICdAcmFkaXgtdWkvcmVhY3QtZGlhbG9nJ1xuaW1wb3J0IHsgWEljb24gfSBmcm9tICdsdWNpZGUtcmVhY3QnXG5pbXBvcnQgdHlwZSAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5mdW5jdGlvbiBEaWFsb2coe1xuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIERpYWxvZ1ByaW1pdGl2ZS5Sb290Pikge1xuXHRyZXR1cm4gPERpYWxvZ1ByaW1pdGl2ZS5Sb290IGRhdGEtc2xvdD1cImRpYWxvZ1wiIHsuLi5wcm9wc30gLz5cbn1cblxuZnVuY3Rpb24gRGlhbG9nVHJpZ2dlcih7XG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgRGlhbG9nUHJpbWl0aXZlLlRyaWdnZXI+KSB7XG5cdHJldHVybiA8RGlhbG9nUHJpbWl0aXZlLlRyaWdnZXIgZGF0YS1zbG90PVwiZGlhbG9nLXRyaWdnZXJcIiB7Li4ucHJvcHN9IC8+XG59XG5cbmZ1bmN0aW9uIERpYWxvZ1BvcnRhbCh7XG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgRGlhbG9nUHJpbWl0aXZlLlBvcnRhbD4pIHtcblx0cmV0dXJuIDxEaWFsb2dQcmltaXRpdmUuUG9ydGFsIGRhdGEtc2xvdD1cImRpYWxvZy1wb3J0YWxcIiB7Li4ucHJvcHN9IC8+XG59XG5cbmZ1bmN0aW9uIERpYWxvZ0Nsb3NlKHtcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBEaWFsb2dQcmltaXRpdmUuQ2xvc2U+KSB7XG5cdHJldHVybiA8RGlhbG9nUHJpbWl0aXZlLkNsb3NlIGRhdGEtc2xvdD1cImRpYWxvZy1jbG9zZVwiIHsuLi5wcm9wc30gLz5cbn1cblxuZnVuY3Rpb24gRGlhbG9nT3ZlcmxheSh7XG5cdGNsYXNzTmFtZSxcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBEaWFsb2dQcmltaXRpdmUuT3ZlcmxheT4pIHtcblx0cmV0dXJuIChcblx0XHQ8RGlhbG9nUHJpbWl0aXZlLk92ZXJsYXlcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCdkYXRhLVtzdGF0ZT1vcGVuXTphbmltYXRlLWluIGRhdGEtW3N0YXRlPWNsb3NlZF06YW5pbWF0ZS1vdXQgZGF0YS1bc3RhdGU9Y2xvc2VkXTpmYWRlLW91dC0wIGRhdGEtW3N0YXRlPW9wZW5dOmZhZGUtaW4tMCBmaXhlZCBpbnNldC0wIHotNTAgYmctYmxhY2svNTAnLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJkaWFsb2ctb3ZlcmxheVwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0Lz5cblx0KVxufVxuXG5mdW5jdGlvbiBEaWFsb2dDb250ZW50KHtcblx0Y2xhc3NOYW1lLFxuXHRjaGlsZHJlbixcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBEaWFsb2dQcmltaXRpdmUuQ29udGVudD4pIHtcblx0cmV0dXJuIChcblx0XHQ8RGlhbG9nUG9ydGFsIGRhdGEtc2xvdD1cImRpYWxvZy1wb3J0YWxcIj5cblx0XHRcdDxEaWFsb2dPdmVybGF5IC8+XG5cdFx0XHQ8RGlhbG9nUHJpbWl0aXZlLkNvbnRlbnRcblx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHQnYmctYmFja2dyb3VuZCBkYXRhLVtzdGF0ZT1vcGVuXTphbmltYXRlLWluIGRhdGEtW3N0YXRlPWNsb3NlZF06YW5pbWF0ZS1vdXQgZGF0YS1bc3RhdGU9Y2xvc2VkXTpmYWRlLW91dC0wIGRhdGEtW3N0YXRlPW9wZW5dOmZhZGUtaW4tMCBkYXRhLVtzdGF0ZT1jbG9zZWRdOnpvb20tb3V0LTk1IGRhdGEtW3N0YXRlPW9wZW5dOnpvb20taW4tOTUgZml4ZWQgdG9wLVs1MCVdIGxlZnQtWzUwJV0gei01MCBncmlkIHctZnVsbCBtYXgtdy1bY2FsYygxMDAlLTJyZW0pXSB0cmFuc2xhdGUteC1bLTUwJV0gdHJhbnNsYXRlLXktWy01MCVdIGdhcC00IHJvdW5kZWQtbGcgYm9yZGVyIHAtNiBzaGFkb3ctbGcgZHVyYXRpb24tMjAwIHNtOm1heC13LWxnIG1heC1oLVs5MCVdJyxcblx0XHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdFx0KX1cblx0XHRcdFx0ZGF0YS1zbG90PVwiZGlhbG9nLWNvbnRlbnRcIlxuXHRcdFx0XHR7Li4ucHJvcHN9XG5cdFx0XHQ+XG5cdFx0XHRcdHtjaGlsZHJlbn1cblx0XHRcdFx0PERpYWxvZ1ByaW1pdGl2ZS5DbG9zZSBjbGFzc05hbWU9XCJyaW5nLW9mZnNldC1iYWNrZ3JvdW5kIGZvY3VzOnJpbmctcmluZyBkYXRhLVtzdGF0ZT1vcGVuXTpiZy1hY2NlbnQgZGF0YS1bc3RhdGU9b3Blbl06dGV4dC1tdXRlZC1mb3JlZ3JvdW5kIGFic29sdXRlIHRvcC00IHJpZ2h0LTQgcm91bmRlZC14cyBvcGFjaXR5LTcwIHRyYW5zaXRpb24tb3BhY2l0eSBob3ZlcjpvcGFjaXR5LTEwMCBmb2N1czpyaW5nLTIgZm9jdXM6cmluZy1vZmZzZXQtMiBmb2N1czpvdXRsaW5lLWhpZGRlbiBkaXNhYmxlZDpwb2ludGVyLWV2ZW50cy1ub25lIFsmX3N2Z106cG9pbnRlci1ldmVudHMtbm9uZSBbJl9zdmddOnNocmluay0wIFsmX3N2Zzpub3QoW2NsYXNzKj0nc2l6ZS0nXSldOnNpemUtNFwiPlxuXHRcdFx0XHRcdDxYSWNvbiAvPlxuXHRcdFx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cInNyLW9ubHlcIj5DbG9zZTwvc3Bhbj5cblx0XHRcdFx0PC9EaWFsb2dQcmltaXRpdmUuQ2xvc2U+XG5cdFx0XHQ8L0RpYWxvZ1ByaW1pdGl2ZS5Db250ZW50PlxuXHRcdDwvRGlhbG9nUG9ydGFsPlxuXHQpXG59XG5cbmZ1bmN0aW9uIERpYWxvZ0hlYWRlcih7IGNsYXNzTmFtZSwgLi4ucHJvcHMgfTogUmVhY3QuQ29tcG9uZW50UHJvcHM8J2Rpdic+KSB7XG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbignZmxleCBmbGV4LWNvbCBnYXAtMiB0ZXh0LWNlbnRlciBzbTp0ZXh0LWxlZnQnLCBjbGFzc05hbWUpfVxuXHRcdFx0ZGF0YS1zbG90PVwiZGlhbG9nLWhlYWRlclwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0Lz5cblx0KVxufVxuXG5mdW5jdGlvbiBEaWFsb2dGb290ZXIoeyBjbGFzc05hbWUsIC4uLnByb3BzIH06IFJlYWN0LkNvbXBvbmVudFByb3BzPCdkaXYnPikge1xuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCdmbGV4IGZsZXgtY29sLXJldmVyc2UgZ2FwLTIgc206ZmxleC1yb3cgc206anVzdGlmeS1lbmQnLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJkaWFsb2ctZm9vdGVyXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmZ1bmN0aW9uIERpYWxvZ1RpdGxlKHtcblx0Y2xhc3NOYW1lLFxuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIERpYWxvZ1ByaW1pdGl2ZS5UaXRsZT4pIHtcblx0cmV0dXJuIChcblx0XHQ8RGlhbG9nUHJpbWl0aXZlLlRpdGxlXG5cdFx0XHRjbGFzc05hbWU9e2NuKCd0ZXh0LWxnIGxlYWRpbmctbm9uZSBmb250LXNlbWlib2xkJywgY2xhc3NOYW1lKX1cblx0XHRcdGRhdGEtc2xvdD1cImRpYWxvZy10aXRsZVwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0Lz5cblx0KVxufVxuXG5mdW5jdGlvbiBEaWFsb2dEZXNjcmlwdGlvbih7XG5cdGNsYXNzTmFtZSxcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBEaWFsb2dQcmltaXRpdmUuRGVzY3JpcHRpb24+KSB7XG5cdHJldHVybiAoXG5cdFx0PERpYWxvZ1ByaW1pdGl2ZS5EZXNjcmlwdGlvblxuXHRcdFx0Y2xhc3NOYW1lPXtjbigndGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHRleHQtc20nLCBjbGFzc05hbWUpfVxuXHRcdFx0ZGF0YS1zbG90PVwiZGlhbG9nLWRlc2NyaXB0aW9uXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmV4cG9ydCB7XG5cdERpYWxvZyxcblx0RGlhbG9nQ2xvc2UsXG5cdERpYWxvZ0NvbnRlbnQsXG5cdERpYWxvZ0Rlc2NyaXB0aW9uLFxuXHREaWFsb2dGb290ZXIsXG5cdERpYWxvZ0hlYWRlcixcblx0RGlhbG9nT3ZlcmxheSxcblx0RGlhbG9nUG9ydGFsLFxuXHREaWFsb2dUaXRsZSxcblx0RGlhbG9nVHJpZ2dlcixcbn1cbiIsCiAgICAiaW1wb3J0IHsgdXNlQ29udGV4dCB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBCdXNpbmVzc0hvdXJzLCBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHsgQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5pbXBvcnQgeyBSZXNvdXJjZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29udGV4dHMvcmVzb3VyY2UtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB0eXBlIHsgUmVzb3VyY2VDYWxlbmRhckNvbnRleHRUeXBlIH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb250ZXh0cy9yZXNvdXJjZS1jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5pbXBvcnQgdHlwZSB7IFJlc291cmNlIH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci90eXBlcydcbmltcG9ydCB0eXBlIHsgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJWaWV3IH0gZnJvbSAnQC90eXBlcydcblxuLyoqXG4gKiBGdWxsIGludGVybmFsIGNvbnRleHQgdHlwZSB1c2VkIGJ5IGxpYnJhcnkgY29tcG9uZW50cy5cbiAqL1xuZXhwb3J0IHR5cGUgU21hcnRDYWxlbmRhckNvbnRleHRUeXBlID0gUmVzb3VyY2VDYWxlbmRhckNvbnRleHRUeXBlXG5cbi8qKlxuICogUHVibGljbHkgZXhwb3NlZCBjYWxlbmRhciBjb250ZXh0IHByb3BlcnRpZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlSWxhbXlDYWxlbmRhckNvbnRleHRSZXR1cm4ge1xuXHRyZWFkb25seSBjdXJyZW50RGF0ZTogRGF5anNcblx0cmVhZG9ubHkgdmlldzogQ2FsZW5kYXJWaWV3XG5cdHJlYWRvbmx5IGV2ZW50czogQ2FsZW5kYXJFdmVudFtdXG5cdHJlYWRvbmx5IGlzRXZlbnRGb3JtT3BlbjogYm9vbGVhblxuXHRyZWFkb25seSBzZWxlY3RlZEV2ZW50OiBDYWxlbmRhckV2ZW50IHwgbnVsbFxuXHRyZWFkb25seSBzZWxlY3RlZERhdGU6IERheWpzIHwgbnVsbFxuXHRyZWFkb25seSBmaXJzdERheU9mV2VlazogbnVtYmVyXG5cdHJlYWRvbmx5IHJlc291cmNlczogUmVzb3VyY2VbXVxuXHRyZWFkb25seSBzZXRDdXJyZW50RGF0ZTogKGRhdGU6IERheWpzKSA9PiB2b2lkXG5cdHJlYWRvbmx5IHNlbGVjdERhdGU6IChkYXRlOiBEYXlqcykgPT4gdm9pZFxuXHRyZWFkb25seSBzZXRWaWV3OiAodmlldzogQ2FsZW5kYXJWaWV3KSA9PiB2b2lkXG5cdHJlYWRvbmx5IG5leHRQZXJpb2Q6ICgpID0+IHZvaWRcblx0cmVhZG9ubHkgcHJldlBlcmlvZDogKCkgPT4gdm9pZFxuXHRyZWFkb25seSB0b2RheTogKCkgPT4gdm9pZFxuXHRyZWFkb25seSBhZGRFdmVudDogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG5cdHJlYWRvbmx5IHVwZGF0ZUV2ZW50OiAoXG5cdFx0ZXZlbnRJZDogc3RyaW5nIHwgbnVtYmVyLFxuXHRcdGV2ZW50OiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+XG5cdCkgPT4gdm9pZFxuXHRyZWFkb25seSBkZWxldGVFdmVudDogKGV2ZW50SWQ6IHN0cmluZyB8IG51bWJlcikgPT4gdm9pZFxuXHRyZWFkb25seSBvcGVuRXZlbnRGb3JtOiAoZXZlbnREYXRhPzogUGFydGlhbDxDYWxlbmRhckV2ZW50PikgPT4gdm9pZFxuXHRyZWFkb25seSBjbG9zZUV2ZW50Rm9ybTogKCkgPT4gdm9pZFxuXHRyZWFkb25seSBnZXRFdmVudHNGb3JSZXNvdXJjZTogKFxuXHRcdHJlc291cmNlSWQ6IHN0cmluZyB8IG51bWJlclxuXHQpID0+IENhbGVuZGFyRXZlbnRbXVxuXHRyZWFkb25seSBidXNpbmVzc0hvdXJzPzogQnVzaW5lc3NIb3VycyB8IEJ1c2luZXNzSG91cnNbXVxufVxuXG4vKipcbiAqIEludGVybmFsIGhvb2sgdGhhdCByZXR1cm5zIHRoZSBmdWxsIGNvbnRleHQuXG4gKiBVc2VkIGJ5IGludGVybmFsIHZpZXdzLCBoZWFkZXJzLCBhbmQgZ3JpZCBjb21wb25lbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKTogU21hcnRDYWxlbmRhckNvbnRleHRUeXBlXG5leHBvcnQgZnVuY3Rpb24gdXNlU21hcnRDYWxlbmRhckNvbnRleHQ8VD4oXG5cdHNlbGVjdG9yOiAoY29udGV4dDogU21hcnRDYWxlbmRhckNvbnRleHRUeXBlKSA9PiBUXG4pOiBUXG5leHBvcnQgZnVuY3Rpb24gdXNlU21hcnRDYWxlbmRhckNvbnRleHQ8VD4oXG5cdHNlbGVjdG9yPzogKGNvbnRleHQ6IFNtYXJ0Q2FsZW5kYXJDb250ZXh0VHlwZSkgPT4gVFxuKTogVCB8IFNtYXJ0Q2FsZW5kYXJDb250ZXh0VHlwZSB7XG5cdGNvbnN0IHJlc291cmNlQ29udGV4dCA9IHVzZUNvbnRleHQoUmVzb3VyY2VDYWxlbmRhckNvbnRleHQpXG5cdGNvbnN0IHJlZ3VsYXJDb250ZXh0ID0gdXNlQ29udGV4dChDYWxlbmRhckNvbnRleHQpXG5cblx0Ly8gSW4gcmVndWxhciBjYWxlbmRhcnMsIHJlc291cmNlLXNwZWNpZmljIGZpZWxkcyB3aWxsIGJlIHVuZGVmaW5lZC5cblx0Y29uc3QgY29udGV4dCA9IChyZXNvdXJjZUNvbnRleHQgfHxcblx0XHRyZWd1bGFyQ29udGV4dCkgYXMgU21hcnRDYWxlbmRhckNvbnRleHRUeXBlXG5cblx0aWYgKCFjb250ZXh0KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0J3VzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IG11c3QgYmUgdXNlZCB3aXRoaW4gYSBDYWxlbmRhclByb3ZpZGVyIG9yIFJlc291cmNlQ2FsZW5kYXJQcm92aWRlcidcblx0XHQpXG5cdH1cblxuXHRyZXR1cm4gc2VsZWN0b3IgPyBzZWxlY3Rvcihjb250ZXh0KSA6IGNvbnRleHRcbn1cblxuLyoqXG4gKiBQdWJsaWMgaG9vayBleHBvcnRlZCBmb3IgbGlicmFyeSB1c2Vycy5cbiAqIFJldHVybnMgYSBsaW1pdGVkIHNldCBvZiBjb21tb25seSB1c2VkIHByb3BlcnRpZXMgYW5kIG1ldGhvZHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VJbGFteUNhbGVuZGFyQ29udGV4dCgpOiBVc2VJbGFteUNhbGVuZGFyQ29udGV4dFJldHVybiB7XG5cdGNvbnN0IGNvbnRleHQgPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cblx0cmV0dXJuIHtcblx0XHRjdXJyZW50RGF0ZTogY29udGV4dC5jdXJyZW50RGF0ZSxcblx0XHR2aWV3OiBjb250ZXh0LnZpZXcsXG5cdFx0ZXZlbnRzOiBjb250ZXh0LmV2ZW50cyxcblx0XHRpc0V2ZW50Rm9ybU9wZW46IGNvbnRleHQuaXNFdmVudEZvcm1PcGVuLFxuXHRcdHNlbGVjdGVkRXZlbnQ6IGNvbnRleHQuc2VsZWN0ZWRFdmVudCxcblx0XHRzZWxlY3RlZERhdGU6IGNvbnRleHQuc2VsZWN0ZWREYXRlLFxuXHRcdGZpcnN0RGF5T2ZXZWVrOiBjb250ZXh0LmZpcnN0RGF5T2ZXZWVrLFxuXHRcdHJlc291cmNlczogY29udGV4dC5yZXNvdXJjZXMgfHwgW10sXG5cdFx0c2V0Q3VycmVudERhdGU6IGNvbnRleHQuc2V0Q3VycmVudERhdGUsXG5cdFx0c2VsZWN0RGF0ZTogY29udGV4dC5zZWxlY3REYXRlLFxuXHRcdHNldFZpZXc6IGNvbnRleHQuc2V0Vmlldyxcblx0XHRuZXh0UGVyaW9kOiBjb250ZXh0Lm5leHRQZXJpb2QsXG5cdFx0cHJldlBlcmlvZDogY29udGV4dC5wcmV2UGVyaW9kLFxuXHRcdHRvZGF5OiBjb250ZXh0LnRvZGF5LFxuXHRcdGFkZEV2ZW50OiBjb250ZXh0LmFkZEV2ZW50LFxuXHRcdHVwZGF0ZUV2ZW50OiBjb250ZXh0LnVwZGF0ZUV2ZW50LFxuXHRcdGRlbGV0ZUV2ZW50OiBjb250ZXh0LmRlbGV0ZUV2ZW50LFxuXHRcdG9wZW5FdmVudEZvcm06IGNvbnRleHQub3BlbkV2ZW50Rm9ybSxcblx0XHRjbG9zZUV2ZW50Rm9ybTogY29udGV4dC5jbG9zZUV2ZW50Rm9ybSxcblx0XHRnZXRFdmVudHNGb3JSZXNvdXJjZTogY29udGV4dC5nZXRFdmVudHNGb3JSZXNvdXJjZSxcblx0XHRidXNpbmVzc0hvdXJzOiBjb250ZXh0LmJ1c2luZXNzSG91cnMsXG5cdH1cbn1cbiIsCiAgICAiaW1wb3J0IHsgY3JlYXRlQ29udGV4dCB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBFdmVudEZvcm1Qcm9wcyB9IGZyb20gJ0AvY29tcG9uZW50cy9ldmVudC1mb3JtL2V2ZW50LWZvcm0nXG5pbXBvcnQgdHlwZSB7IEJ1c2luZXNzSG91cnMsIENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgdHlwZSB7XG5cdENhbGVuZGFyQ2xhc3Nlc092ZXJyaWRlLFxuXHRDZWxsQ2xpY2tJbmZvLFxuXHRSZW5kZXJDdXJyZW50VGltZUluZGljYXRvclByb3BzLFxufSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBSZWN1cnJlbmNlRWRpdE9wdGlvbnMgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgdHlwZSB7IFRyYW5zbGF0b3JGdW5jdGlvbiB9IGZyb20gJ0AvbGliL3RyYW5zbGF0aW9ucy90eXBlcydcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJWaWV3LCBUaW1lRm9ybWF0IH0gZnJvbSAnQC90eXBlcydcblxuZXhwb3J0IGludGVyZmFjZSBDYWxlbmRhckNvbnRleHRUeXBlIHtcblx0Y3VycmVudERhdGU6IERheWpzXG5cdHZpZXc6IENhbGVuZGFyVmlld1xuXHRldmVudHM6IENhbGVuZGFyRXZlbnRbXVxuXHRyYXdFdmVudHM6IENhbGVuZGFyRXZlbnRbXSAvLyBVbnByb2Nlc3NlZCBldmVudHMgZm9yIGV4cG9ydFxuXHRpc0V2ZW50Rm9ybU9wZW46IGJvb2xlYW5cblx0c2VsZWN0ZWRFdmVudDogQ2FsZW5kYXJFdmVudCB8IG51bGxcblx0c2VsZWN0ZWREYXRlOiBEYXlqcyB8IG51bGxcblx0Zmlyc3REYXlPZldlZWs6IG51bWJlciAvLyAwIGZvciBTdW5kYXksIDEgZm9yIE1vbmRheSwgZXRjLlxuXHRzZXRDdXJyZW50RGF0ZTogKGRhdGU6IERheWpzKSA9PiB2b2lkXG5cdHNlbGVjdERhdGU6IChkYXRlOiBEYXlqcykgPT4gdm9pZFxuXHRzZXRWaWV3OiAodmlldzogQ2FsZW5kYXJWaWV3KSA9PiB2b2lkXG5cdG5leHRQZXJpb2Q6ICgpID0+IHZvaWRcblx0cHJldlBlcmlvZDogKCkgPT4gdm9pZFxuXHR0b2RheTogKCkgPT4gdm9pZFxuXHRhZGRFdmVudDogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG5cdHVwZGF0ZUV2ZW50OiAoZXZlbnRJZDogc3RyaW5nIHwgbnVtYmVyLCBldmVudDogUGFydGlhbDxDYWxlbmRhckV2ZW50PikgPT4gdm9pZFxuXHR1cGRhdGVSZWN1cnJpbmdFdmVudDogKFxuXHRcdGV2ZW50OiBDYWxlbmRhckV2ZW50LFxuXHRcdHVwZGF0ZXM6IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD4sXG5cdFx0b3B0aW9uczogUmVjdXJyZW5jZUVkaXRPcHRpb25zXG5cdCkgPT4gdm9pZFxuXHRkZWxldGVFdmVudDogKGV2ZW50SWQ6IHN0cmluZyB8IG51bWJlcikgPT4gdm9pZFxuXHRkZWxldGVSZWN1cnJpbmdFdmVudDogKFxuXHRcdGV2ZW50OiBDYWxlbmRhckV2ZW50LFxuXHRcdG9wdGlvbnM6IFJlY3VycmVuY2VFZGl0T3B0aW9uc1xuXHQpID0+IHZvaWRcblx0b3BlbkV2ZW50Rm9ybTogKGV2ZW50RGF0YT86IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD4pID0+IHZvaWRcblx0Y2xvc2VFdmVudEZvcm06ICgpID0+IHZvaWRcblx0Z2V0RXZlbnRzRm9yRGF0ZVJhbmdlOiAoc3RhcnREYXRlOiBEYXlqcywgZW5kRGF0ZTogRGF5anMpID0+IENhbGVuZGFyRXZlbnRbXVxuXHRmaW5kUGFyZW50UmVjdXJyaW5nRXZlbnQ6IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gQ2FsZW5kYXJFdmVudCB8IG51bGxcblx0cmVuZGVyRXZlbnQ/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IFJlYWN0LlJlYWN0Tm9kZVxuXHRvbkV2ZW50Q2xpY2s6IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuXHRvbkNlbGxDbGljazogKGluZm86IENlbGxDbGlja0luZm8pID0+IHZvaWRcblx0Y3VycmVudExvY2FsZT86IHN0cmluZ1xuXHRkaXNhYmxlQ2VsbENsaWNrPzogYm9vbGVhblxuXHRkaXNhYmxlRXZlbnRDbGljaz86IGJvb2xlYW5cblx0ZGlzYWJsZURyYWdBbmREcm9wPzogYm9vbGVhblxuXHRkYXlNYXhFdmVudHM6IG51bWJlclxuXHRldmVudFNwYWNpbmc6IG51bWJlclxuXHRzdGlja3lWaWV3SGVhZGVyOiBib29sZWFuXG5cdHZpZXdIZWFkZXJDbGFzc05hbWU6IHN0cmluZ1xuXHRoZWFkZXJDb21wb25lbnQ/OiBSZWFjdC5SZWFjdE5vZGUgLy8gT3B0aW9uYWwgY3VzdG9tIGhlYWRlciBjb21wb25lbnRcblx0aGVhZGVyQ2xhc3NOYW1lPzogc3RyaW5nIC8vIE9wdGlvbmFsIGN1c3RvbSBoZWFkZXIgY2xhc3Ncblx0YnVzaW5lc3NIb3Vycz86IEJ1c2luZXNzSG91cnMgfCBCdXNpbmVzc0hvdXJzW11cblx0cmVuZGVyRXZlbnRGb3JtPzogKHByb3BzOiBFdmVudEZvcm1Qcm9wcykgPT4gUmVhY3QuUmVhY3ROb2RlXG5cdC8vIFRyYW5zbGF0aW9uIGZ1bmN0aW9uXG5cdHQ6IFRyYW5zbGF0b3JGdW5jdGlvblxuXHR0aW1lRm9ybWF0OiBUaW1lRm9ybWF0XG5cdGNsYXNzZXNPdmVycmlkZT86IENhbGVuZGFyQ2xhc3Nlc092ZXJyaWRlXG5cdHJlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yPzogKFxuXHRcdHByb3BzOiBSZW5kZXJDdXJyZW50VGltZUluZGljYXRvclByb3BzXG5cdCkgPT4gUmVhY3QuUmVhY3ROb2RlXG5cdHJlbmRlckhvdXI/OiAoZGF0ZTogRGF5anMpID0+IFJlYWN0LlJlYWN0Tm9kZVxuXHRoaWRlTm9uQnVzaW5lc3NIb3Vycz86IGJvb2xlYW5cblx0aGlkZGVuRGF5cz86IFNldDxudW1iZXI+XG59XG5cbi8vIENhbGVuZGFyQ29udGV4dCBpcyBrZXB0IGZvciBpbnRlcm5hbCBQcm92aWRlciB1c2FnZVxuZXhwb3J0IGNvbnN0IENhbGVuZGFyQ29udGV4dDogUmVhY3QuQ29udGV4dDxDYWxlbmRhckNvbnRleHRUeXBlIHwgdW5kZWZpbmVkPiA9XG5cdGNyZWF0ZUNvbnRleHQ8Q2FsZW5kYXJDb250ZXh0VHlwZSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKVxuIiwKICAgICJpbXBvcnQgeyBjcmVhdGVDb250ZXh0IH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyQ29udGV4dFR5cGUgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcbmltcG9ydCB0eXBlIHsgQ2VsbENsaWNrSW5mbyB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IFJlc291cmNlIH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci90eXBlcydcblxuZXhwb3J0IGludGVyZmFjZSBSZXNvdXJjZUNhbGVuZGFyQ29udGV4dFR5cGUgZXh0ZW5kcyBDYWxlbmRhckNvbnRleHRUeXBlIHtcblx0Ly8gUmVzb3VyY2Utc3BlY2lmaWMgc3RhdGVcblx0cmVzb3VyY2VzOiBSZXNvdXJjZVtdXG5cdHZpc2libGVSZXNvdXJjZXM6IFNldDxzdHJpbmcgfCBudW1iZXI+XG5cblx0Ly8gUmVzb3VyY2UgdXRpbGl0aWVzXG5cdGdldEV2ZW50c0ZvclJlc291cmNlOiAocmVzb3VyY2VJZDogc3RyaW5nIHwgbnVtYmVyKSA9PiBDYWxlbmRhckV2ZW50W11cblx0Z2V0RXZlbnRzRm9yUmVzb3VyY2VzOiAocmVzb3VyY2VJZHM6IChzdHJpbmcgfCBudW1iZXIpW10pID0+IENhbGVuZGFyRXZlbnRbXVxuXHRnZXRSZXNvdXJjZUJ5SWQ6IChyZXNvdXJjZUlkOiBzdHJpbmcgfCBudW1iZXIpID0+IFJlc291cmNlIHwgdW5kZWZpbmVkXG5cdGdldFZpc2libGVSZXNvdXJjZXM6ICgpID0+IFJlc291cmNlW11cblxuXHQvLyBDcm9zcy1yZXNvdXJjZSBldmVudCB1dGlsaXRpZXNcblx0aXNFdmVudENyb3NzUmVzb3VyY2U6IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gYm9vbGVhblxuXHRnZXRFdmVudFJlc291cmNlSWRzOiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IChzdHJpbmcgfCBudW1iZXIpW11cblxuXHQvLyBBZGRpdGlvbmFsIHByb3BlcnRpZXMgZnJvbSBjYWxlbmRhciBjb250ZXh0XG5cdG9uRXZlbnRDbGljazogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG5cdG9uQ2VsbENsaWNrOiAoaW5mbzogQ2VsbENsaWNrSW5mbykgPT4gdm9pZFxuXHRyZW5kZXJSZXNvdXJjZT86IChyZXNvdXJjZTogUmVzb3VyY2UpID0+IFJlYWN0LlJlYWN0Tm9kZVxuXHRvcmllbnRhdGlvbjogJ2hvcml6b250YWwnIHwgJ3ZlcnRpY2FsJ1xufVxuXG4vLyBSZXNvdXJjZUNhbGVuZGFyQ29udGV4dCBpcyBrZXB0IGZvciBpbnRlcm5hbCBQcm92aWRlciB1c2FnZVxuZXhwb3J0IGNvbnN0IFJlc291cmNlQ2FsZW5kYXJDb250ZXh0OiBSZWFjdC5Db250ZXh0PFxuXHRSZXNvdXJjZUNhbGVuZGFyQ29udGV4dFR5cGUgfCB1bmRlZmluZWRcbj4gPSBjcmVhdGVDb250ZXh0PFJlc291cmNlQ2FsZW5kYXJDb250ZXh0VHlwZSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VNZW1vLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhclByb3ZpZGVyUHJvcHMgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvcHJvdmlkZXInXG5pbXBvcnQgdHlwZSB7XG5cdENhbGVuZGFyQ2xhc3Nlc092ZXJyaWRlLFxuXHRDZWxsQ2xpY2tJbmZvLFxuXHRSZW5kZXJDdXJyZW50VGltZUluZGljYXRvclByb3BzLFxufSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBSZXNvdXJjZSB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvdHlwZXMnXG5pbXBvcnQgeyB1c2VDYWxlbmRhckVuZ2luZSB9IGZyb20gJ0AvaG9va3MvdXNlLWNhbGVuZGFyLWVuZ2luZSdcbmltcG9ydCB0eXBlIHsgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IFJlc291cmNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnLi9jb250ZXh0J1xuXG5jb25zdCBnZXRFdmVudFJlc291cmNlSWRzID0gKGV2ZW50OiBDYWxlbmRhckV2ZW50KTogKHN0cmluZyB8IG51bWJlcilbXSA9PiB7XG5cdGlmIChldmVudC5yZXNvdXJjZUlkcykge1xuXHRcdHJldHVybiBldmVudC5yZXNvdXJjZUlkc1xuXHR9XG5cdGlmIChldmVudC5yZXNvdXJjZUlkICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gW2V2ZW50LnJlc291cmNlSWRdXG5cdH1cblx0cmV0dXJuIFtdXG59XG5cbmludGVyZmFjZSBSZXNvdXJjZUNhbGVuZGFyUHJvdmlkZXJQcm9wcyBleHRlbmRzIENhbGVuZGFyUHJvdmlkZXJQcm9wcyB7XG5cdGV2ZW50cz86IENhbGVuZGFyRXZlbnRbXVxuXHRyZXNvdXJjZXM/OiBSZXNvdXJjZVtdXG5cdHJlbmRlclJlc291cmNlPzogKHJlc291cmNlOiBSZXNvdXJjZSkgPT4gUmVhY3QuUmVhY3ROb2RlXG5cdGNsYXNzZXNPdmVycmlkZT86IENhbGVuZGFyQ2xhc3Nlc092ZXJyaWRlXG5cdG9yaWVudGF0aW9uPzogJ2hvcml6b250YWwnIHwgJ3ZlcnRpY2FsJ1xuXHRyZW5kZXJDdXJyZW50VGltZUluZGljYXRvcj86IChcblx0XHRwcm9wczogUmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3JQcm9wc1xuXHQpID0+IFJlYWN0LlJlYWN0Tm9kZVxuXHRyZW5kZXJIb3VyPzogKGRhdGU6IERheWpzKSA9PiBSZWFjdC5SZWFjdE5vZGVcblx0aGlkZU5vbkJ1c2luZXNzSG91cnM/OiBib29sZWFuXG59XG5cbmV4cG9ydCBjb25zdCBSZXNvdXJjZUNhbGVuZGFyUHJvdmlkZXI6IFJlYWN0LkZDPFxuXHRSZXNvdXJjZUNhbGVuZGFyUHJvdmlkZXJQcm9wc1xuPiA9ICh7XG5cdGNoaWxkcmVuLFxuXHRldmVudHMgPSBbXSxcblx0cmVzb3VyY2VzID0gW10sXG5cdGZpcnN0RGF5T2ZXZWVrID0gMCxcblx0aW5pdGlhbFZpZXcgPSAnbW9udGgnLFxuXHRpbml0aWFsRGF0ZSxcblx0cmVuZGVyRXZlbnQsXG5cdG9uRXZlbnRDbGljayxcblx0b25DZWxsQ2xpY2ssXG5cdG9uVmlld0NoYW5nZSxcblx0b25FdmVudEFkZCxcblx0b25FdmVudFVwZGF0ZSxcblx0b25FdmVudERlbGV0ZSxcblx0b25EYXRlQ2hhbmdlLFxuXHRsb2NhbGUsXG5cdHRpbWV6b25lLFxuXHRkaXNhYmxlQ2VsbENsaWNrLFxuXHRkaXNhYmxlRXZlbnRDbGljayxcblx0ZGlzYWJsZURyYWdBbmREcm9wLFxuXHRkYXlNYXhFdmVudHMsXG5cdGV2ZW50U3BhY2luZyA9IDEsXG5cdHN0aWNreVZpZXdIZWFkZXIgPSB0cnVlLFxuXHR2aWV3SGVhZGVyQ2xhc3NOYW1lID0gJycsXG5cdGhlYWRlckNvbXBvbmVudCxcblx0aGVhZGVyQ2xhc3NOYW1lLFxuXHR0cmFuc2xhdGlvbnMsXG5cdHRyYW5zbGF0b3IsXG5cdHJlbmRlclJlc291cmNlLFxuXHRyZW5kZXJFdmVudEZvcm0sXG5cdGJ1c2luZXNzSG91cnMsXG5cdHRpbWVGb3JtYXQgPSAnMTItaG91cicsXG5cdGNsYXNzZXNPdmVycmlkZSxcblx0b3JpZW50YXRpb24gPSAnaG9yaXpvbnRhbCcsXG5cdHJlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yLFxuXHRyZW5kZXJIb3VyLFxuXHRoaWRlTm9uQnVzaW5lc3NIb3VycyA9IGZhbHNlLFxuXHRoaWRkZW5EYXlzLFxufSkgPT4ge1xuXHQvLyBSZXNvdXJjZS1zcGVjaWZpYyBzdGF0ZVxuXHRjb25zdCBbY3VycmVudFJlc291cmNlc10gPSB1c2VTdGF0ZTxSZXNvdXJjZVtdPihyZXNvdXJjZXMpXG5cdGNvbnN0IFt2aXNpYmxlUmVzb3VyY2VzLCBzZXRWaXNpYmxlUmVzb3VyY2VzXSA9IHVzZVN0YXRlPFxuXHRcdFNldDxzdHJpbmcgfCBudW1iZXI+XG5cdD4obmV3IFNldChyZXNvdXJjZXMubWFwKChyKSA9PiByLmlkKSkpXG5cblx0Ly8gVXNlIHRoZSBjYWxlbmRhciBlbmdpbmVcblx0Y29uc3QgY2FsZW5kYXJFbmdpbmUgPSB1c2VDYWxlbmRhckVuZ2luZSh7XG5cdFx0ZXZlbnRzLFxuXHRcdGZpcnN0RGF5T2ZXZWVrLFxuXHRcdGluaXRpYWxWaWV3LFxuXHRcdGluaXRpYWxEYXRlLFxuXHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0b25FdmVudEFkZCxcblx0XHRvbkV2ZW50VXBkYXRlLFxuXHRcdG9uRXZlbnREZWxldGUsXG5cdFx0b25EYXRlQ2hhbmdlLFxuXHRcdG9uVmlld0NoYW5nZTogb25WaWV3Q2hhbmdlLFxuXHRcdGxvY2FsZSxcblx0XHR0aW1lem9uZSxcblx0XHR0cmFuc2xhdGlvbnMsXG5cdFx0dHJhbnNsYXRvcixcblx0fSlcblxuXHQvLyBSZXNvdXJjZSB2aXNpYmlsaXR5XG5cdGNvbnN0IHRvZ2dsZVJlc291cmNlVmlzaWJpbGl0eSA9IHVzZUNhbGxiYWNrKFxuXHRcdChyZXNvdXJjZUlkOiBzdHJpbmcgfCBudW1iZXIpID0+IHtcblx0XHRcdHNldFZpc2libGVSZXNvdXJjZXMoKHByZXYpID0+IHtcblx0XHRcdFx0Y29uc3QgbmV3U2V0ID0gbmV3IFNldChwcmV2KVxuXHRcdFx0XHRpZiAobmV3U2V0LmhhcyhyZXNvdXJjZUlkKSkge1xuXHRcdFx0XHRcdG5ld1NldC5kZWxldGUocmVzb3VyY2VJZClcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRuZXdTZXQuYWRkKHJlc291cmNlSWQpXG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIG5ld1NldFxuXHRcdFx0fSlcblx0XHR9LFxuXHRcdFtdXG5cdClcblxuXHRjb25zdCBzaG93UmVzb3VyY2UgPSB1c2VDYWxsYmFjaygocmVzb3VyY2VJZDogc3RyaW5nIHwgbnVtYmVyKSA9PiB7XG5cdFx0c2V0VmlzaWJsZVJlc291cmNlcygocHJldikgPT4gbmV3IFNldChwcmV2KS5hZGQocmVzb3VyY2VJZCkpXG5cdH0sIFtdKVxuXG5cdGNvbnN0IGhpZGVSZXNvdXJjZSA9IHVzZUNhbGxiYWNrKChyZXNvdXJjZUlkOiBzdHJpbmcgfCBudW1iZXIpID0+IHtcblx0XHRzZXRWaXNpYmxlUmVzb3VyY2VzKChwcmV2KSA9PiB7XG5cdFx0XHRjb25zdCBuZXdTZXQgPSBuZXcgU2V0KHByZXYpXG5cdFx0XHRuZXdTZXQuZGVsZXRlKHJlc291cmNlSWQpXG5cdFx0XHRyZXR1cm4gbmV3U2V0XG5cdFx0fSlcblx0fSwgW10pXG5cblx0Y29uc3Qgc2hvd0FsbFJlc291cmNlcyA9IHVzZUNhbGxiYWNrKCgpID0+IHtcblx0XHRzZXRWaXNpYmxlUmVzb3VyY2VzKG5ldyBTZXQoY3VycmVudFJlc291cmNlcy5tYXAoKHIpID0+IHIuaWQpKSlcblx0fSwgW2N1cnJlbnRSZXNvdXJjZXNdKVxuXG5cdGNvbnN0IGhpZGVBbGxSZXNvdXJjZXMgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG5cdFx0c2V0VmlzaWJsZVJlc291cmNlcyhuZXcgU2V0KCkpXG5cdH0sIFtdKVxuXG5cdC8vIEV2ZW50IHV0aWxpdGllc1xuXHRjb25zdCBnZXRFdmVudHNGb3JSZXNvdXJjZSA9IHVzZUNhbGxiYWNrKFxuXHRcdChyZXNvdXJjZUlkOiBzdHJpbmcgfCBudW1iZXIpOiBDYWxlbmRhckV2ZW50W10gPT4ge1xuXHRcdFx0cmV0dXJuIGNhbGVuZGFyRW5naW5lLmV2ZW50cy5maWx0ZXIoKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB7XG5cdFx0XHRcdGlmIChldmVudC5yZXNvdXJjZUlkcykge1xuXHRcdFx0XHRcdHJldHVybiBldmVudC5yZXNvdXJjZUlkcy5pbmNsdWRlcyhyZXNvdXJjZUlkKVxuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBldmVudC5yZXNvdXJjZUlkID09PSByZXNvdXJjZUlkXG5cdFx0XHR9KVxuXHRcdH0sXG5cdFx0W2NhbGVuZGFyRW5naW5lLmV2ZW50c11cblx0KVxuXG5cdGNvbnN0IGdldEV2ZW50c0ZvclJlc291cmNlcyA9IHVzZUNhbGxiYWNrKFxuXHRcdChyZXNvdXJjZUlkczogKHN0cmluZyB8IG51bWJlcilbXSk6IENhbGVuZGFyRXZlbnRbXSA9PiB7XG5cdFx0XHRyZXR1cm4gY2FsZW5kYXJFbmdpbmUuZXZlbnRzLmZpbHRlcigoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHtcblx0XHRcdFx0Y29uc3QgZXZlbnRSZXNvdXJjZUlkcyA9IGdldEV2ZW50UmVzb3VyY2VJZHMoZXZlbnQpXG5cdFx0XHRcdHJldHVybiBldmVudFJlc291cmNlSWRzLnNvbWUoKGlkKSA9PiByZXNvdXJjZUlkcy5pbmNsdWRlcyhpZCkpXG5cdFx0XHR9KVxuXHRcdH0sXG5cdFx0W2NhbGVuZGFyRW5naW5lLmV2ZW50c11cblx0KVxuXG5cdGNvbnN0IGdldFJlc291cmNlQnlJZCA9IHVzZUNhbGxiYWNrKFxuXHRcdChyZXNvdXJjZUlkOiBzdHJpbmcgfCBudW1iZXIpOiBSZXNvdXJjZSB8IHVuZGVmaW5lZCA9PiB7XG5cdFx0XHRyZXR1cm4gY3VycmVudFJlc291cmNlcy5maW5kKChyZXNvdXJjZSkgPT4gcmVzb3VyY2UuaWQgPT09IHJlc291cmNlSWQpXG5cdFx0fSxcblx0XHRbY3VycmVudFJlc291cmNlc11cblx0KVxuXG5cdGNvbnN0IGdldFZpc2libGVSZXNvdXJjZXMgPSB1c2VDYWxsYmFjaygoKTogUmVzb3VyY2VbXSA9PiB7XG5cdFx0cmV0dXJuIGN1cnJlbnRSZXNvdXJjZXMuZmlsdGVyKChyZXNvdXJjZSkgPT5cblx0XHRcdHZpc2libGVSZXNvdXJjZXMuaGFzKHJlc291cmNlLmlkKVxuXHRcdClcblx0fSwgW2N1cnJlbnRSZXNvdXJjZXMsIHZpc2libGVSZXNvdXJjZXNdKVxuXG5cdC8vIENyb3NzLXJlc291cmNlIGV2ZW50IHV0aWxpdGllc1xuXHRjb25zdCBpc0V2ZW50Q3Jvc3NSZXNvdXJjZSA9IHVzZUNhbGxiYWNrKChldmVudDogQ2FsZW5kYXJFdmVudCk6IGJvb2xlYW4gPT4ge1xuXHRcdHJldHVybiBCb29sZWFuKGV2ZW50LnJlc291cmNlSWRzICYmIGV2ZW50LnJlc291cmNlSWRzLmxlbmd0aCA+IDEpXG5cdH0sIFtdKVxuXG5cdC8vIEN1c3RvbSBoYW5kbGVyc1xuXHRjb25zdCBlZGl0RXZlbnQgPSB1c2VDYWxsYmFjayhcblx0XHQoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHtcblx0XHRcdGNhbGVuZGFyRW5naW5lLnNldFNlbGVjdGVkRXZlbnQoZXZlbnQpXG5cdFx0XHRjYWxlbmRhckVuZ2luZS5zZXRJc0V2ZW50Rm9ybU9wZW4odHJ1ZSlcblx0XHR9LFxuXHRcdFtjYWxlbmRhckVuZ2luZV1cblx0KVxuXG5cdGNvbnN0IGhhbmRsZUV2ZW50Q2xpY2sgPSB1c2VDYWxsYmFjayhcblx0XHQoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHtcblx0XHRcdGlmIChkaXNhYmxlRXZlbnRDbGljaykge1xuXHRcdFx0XHRyZXR1cm5cblx0XHRcdH1cblx0XHRcdGlmIChvbkV2ZW50Q2xpY2spIHtcblx0XHRcdFx0b25FdmVudENsaWNrKGV2ZW50KVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZWRpdEV2ZW50KGV2ZW50KVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0W2Rpc2FibGVFdmVudENsaWNrLCBvbkV2ZW50Q2xpY2ssIGVkaXRFdmVudF1cblx0KVxuXG5cdGNvbnN0IGhhbmRsZURhdGVDbGljayA9IHVzZUNhbGxiYWNrKFxuXHRcdChpbmZvOiBDZWxsQ2xpY2tJbmZvKSA9PiB7XG5cdFx0XHRpZiAoZGlzYWJsZUNlbGxDbGljaykge1xuXHRcdFx0XHRyZXR1cm5cblx0XHRcdH1cblxuXHRcdFx0aWYgKG9uQ2VsbENsaWNrKSB7XG5cdFx0XHRcdG9uQ2VsbENsaWNrKGluZm8pXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBuZXdFdmVudDogQ2FsZW5kYXJFdmVudCA9IHtcblx0XHRcdFx0XHR0aXRsZTogY2FsZW5kYXJFbmdpbmUudCgnbmV3RXZlbnQnKSxcblx0XHRcdFx0XHRzdGFydDogaW5mby5zdGFydCxcblx0XHRcdFx0XHRlbmQ6IGluZm8uZW5kLFxuXHRcdFx0XHRcdGRlc2NyaXB0aW9uOiAnJyxcblx0XHRcdFx0XHRhbGxEYXk6IGZhbHNlLFxuXHRcdFx0XHR9IGFzIENhbGVuZGFyRXZlbnRcblxuXHRcdFx0XHRpZiAoaW5mby5yZXNvdXJjZUlkICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRuZXdFdmVudC5yZXNvdXJjZUlkID0gaW5mby5yZXNvdXJjZUlkXG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjYWxlbmRhckVuZ2luZS5zZXRTZWxlY3RlZEV2ZW50KG5ld0V2ZW50KVxuXHRcdFx0XHRjYWxlbmRhckVuZ2luZS5zZXRTZWxlY3RlZERhdGUoaW5mby5zdGFydClcblx0XHRcdFx0Y2FsZW5kYXJFbmdpbmUuc2V0SXNFdmVudEZvcm1PcGVuKHRydWUpXG5cdFx0XHR9XG5cdFx0fSxcblx0XHRbb25DZWxsQ2xpY2ssIGRpc2FibGVDZWxsQ2xpY2ssIGNhbGVuZGFyRW5naW5lXVxuXHQpXG5cblx0Ly8gQ3JlYXRlIHRoZSBjb250ZXh0IHZhbHVlXG5cdGNvbnN0IGNvbnRleHRWYWx1ZSA9IHVzZU1lbW8oXG5cdFx0KCkgPT4gKHtcblx0XHRcdC4uLmNhbGVuZGFyRW5naW5lLFxuXHRcdFx0dmlldzogY2FsZW5kYXJFbmdpbmUudmlldyxcblx0XHRcdHNldFZpZXc6IGNhbGVuZGFyRW5naW5lLnNldFZpZXcsXG5cdFx0XHRldmVudHM6IGNhbGVuZGFyRW5naW5lLmV2ZW50cyxcblx0XHRcdHJhd0V2ZW50czogY2FsZW5kYXJFbmdpbmUucmF3RXZlbnRzLFxuXG5cdFx0XHQvLyBSZXNvdXJjZS1zcGVjaWZpYyBzdGF0ZVxuXHRcdFx0cmVzb3VyY2VzOiBjdXJyZW50UmVzb3VyY2VzLFxuXHRcdFx0dmlzaWJsZVJlc291cmNlcyxcblx0XHRcdHRvZ2dsZVJlc291cmNlVmlzaWJpbGl0eSxcblx0XHRcdHNob3dSZXNvdXJjZSxcblx0XHRcdGhpZGVSZXNvdXJjZSxcblx0XHRcdHNob3dBbGxSZXNvdXJjZXMsXG5cdFx0XHRoaWRlQWxsUmVzb3VyY2VzLFxuXG5cdFx0XHQvLyBSZXNvdXJjZSB1dGlsaXRpZXNcblx0XHRcdGdldEV2ZW50c0ZvclJlc291cmNlLFxuXHRcdFx0Z2V0RXZlbnRzRm9yUmVzb3VyY2VzLFxuXHRcdFx0Z2V0UmVzb3VyY2VCeUlkLFxuXHRcdFx0Z2V0VmlzaWJsZVJlc291cmNlcyxcblxuXHRcdFx0Ly8gQ3Jvc3MtcmVzb3VyY2UgZXZlbnQgdXRpbGl0aWVzXG5cdFx0XHRpc0V2ZW50Q3Jvc3NSZXNvdXJjZSxcblx0XHRcdGdldEV2ZW50UmVzb3VyY2VJZHMsXG5cblx0XHRcdC8vIE92ZXJyaWRlIGhhbmRsZXJzXG5cdFx0XHRvbkV2ZW50Q2xpY2s6IGhhbmRsZUV2ZW50Q2xpY2ssXG5cdFx0XHRvbkNlbGxDbGljazogaGFuZGxlRGF0ZUNsaWNrLFxuXG5cdFx0XHQvLyBQYXNzIHRocm91Z2ggaGVhZGVyIHByb3BzXG5cdFx0XHRoZWFkZXJDb21wb25lbnQsXG5cdFx0XHRoZWFkZXJDbGFzc05hbWUsXG5cblx0XHRcdC8vIFBhc3MgdGhyb3VnaCBvdGhlciBwcm9wc1xuXHRcdFx0cmVuZGVyRXZlbnQsXG5cdFx0XHRyZW5kZXJSZXNvdXJjZSxcblx0XHRcdHJlbmRlckV2ZW50Rm9ybSxcblx0XHRcdGxvY2FsZSxcblx0XHRcdHRpbWV6b25lLFxuXHRcdFx0ZGlzYWJsZUNlbGxDbGljayxcblx0XHRcdGRpc2FibGVFdmVudENsaWNrLFxuXHRcdFx0ZGlzYWJsZURyYWdBbmREcm9wLFxuXHRcdFx0ZGF5TWF4RXZlbnRzLFxuXHRcdFx0ZXZlbnRTcGFjaW5nLFxuXHRcdFx0c3RpY2t5Vmlld0hlYWRlcixcblx0XHRcdHZpZXdIZWFkZXJDbGFzc05hbWUsXG5cdFx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdFx0dGltZUZvcm1hdCxcblx0XHRcdGNsYXNzZXNPdmVycmlkZSxcblx0XHRcdG9yaWVudGF0aW9uLFxuXHRcdFx0cmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3IsXG5cdFx0XHRyZW5kZXJIb3VyLFxuXHRcdFx0aGlkZU5vbkJ1c2luZXNzSG91cnMsXG5cdFx0XHRoaWRkZW5EYXlzLFxuXHRcdH0pLFxuXHRcdFtcblx0XHRcdGNhbGVuZGFyRW5naW5lLFxuXHRcdFx0Y3VycmVudFJlc291cmNlcyxcblx0XHRcdHZpc2libGVSZXNvdXJjZXMsXG5cdFx0XHR0b2dnbGVSZXNvdXJjZVZpc2liaWxpdHksXG5cdFx0XHRzaG93UmVzb3VyY2UsXG5cdFx0XHRoaWRlUmVzb3VyY2UsXG5cdFx0XHRzaG93QWxsUmVzb3VyY2VzLFxuXHRcdFx0aGlkZUFsbFJlc291cmNlcyxcblx0XHRcdGdldEV2ZW50c0ZvclJlc291cmNlLFxuXHRcdFx0Z2V0RXZlbnRzRm9yUmVzb3VyY2VzLFxuXHRcdFx0Z2V0UmVzb3VyY2VCeUlkLFxuXHRcdFx0Z2V0VmlzaWJsZVJlc291cmNlcyxcblx0XHRcdGlzRXZlbnRDcm9zc1Jlc291cmNlLFxuXHRcdFx0aGFuZGxlRXZlbnRDbGljayxcblx0XHRcdGhhbmRsZURhdGVDbGljayxcblx0XHRcdHJlbmRlckV2ZW50LFxuXHRcdFx0cmVuZGVyUmVzb3VyY2UsXG5cdFx0XHRyZW5kZXJFdmVudEZvcm0sXG5cdFx0XHRsb2NhbGUsXG5cdFx0XHR0aW1lem9uZSxcblx0XHRcdGRpc2FibGVDZWxsQ2xpY2ssXG5cdFx0XHRkaXNhYmxlRXZlbnRDbGljayxcblx0XHRcdGRpc2FibGVEcmFnQW5kRHJvcCxcblx0XHRcdGRheU1heEV2ZW50cyxcblx0XHRcdGV2ZW50U3BhY2luZyxcblx0XHRcdHN0aWNreVZpZXdIZWFkZXIsXG5cdFx0XHR2aWV3SGVhZGVyQ2xhc3NOYW1lLFxuXHRcdFx0aGVhZGVyQ29tcG9uZW50LFxuXHRcdFx0aGVhZGVyQ2xhc3NOYW1lLFxuXHRcdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRcdHRpbWVGb3JtYXQsXG5cdFx0XHRjbGFzc2VzT3ZlcnJpZGUsXG5cdFx0XHRvcmllbnRhdGlvbixcblx0XHRcdHJlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yLFxuXHRcdFx0cmVuZGVySG91cixcblx0XHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzLFxuXHRcdFx0aGlkZGVuRGF5cyxcblx0XHRdXG5cdClcblxuXHRyZXR1cm4gKFxuXHRcdDxSZXNvdXJjZUNhbGVuZGFyQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17Y29udGV4dFZhbHVlfT5cblx0XHRcdHtjaGlsZHJlbn1cblx0XHQ8L1Jlc291cmNlQ2FsZW5kYXJDb250ZXh0LlByb3ZpZGVyPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgQnVzaW5lc3NIb3VycywgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB0eXBlIHsgUmVjdXJyZW5jZUVkaXRPcHRpb25zIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL3R5cGVzJ1xuaW1wb3J0IHtcblx0ZGVsZXRlUmVjdXJyaW5nRXZlbnQgYXMgZGVsZXRlUmVjdXJyaW5nRXZlbnRJbXBsLFxuXHRnZW5lcmF0ZVJlY3VycmluZ0V2ZW50cyxcblx0dXBkYXRlUmVjdXJyaW5nRXZlbnQgYXMgdXBkYXRlUmVjdXJyaW5nRXZlbnRJbXBsLFxufSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvdXRpbHMvcmVjdXJyZW5jZS1oYW5kbGVyJ1xuaW1wb3J0IGRheWpzLCB7XG5cdHR5cGUgRGF5anMsXG5cdHR5cGUgTWFuaXB1bGF0ZVR5cGUsXG59IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgZGVmYXVsdFRyYW5zbGF0aW9ucyB9IGZyb20gJ0AvbGliL3RyYW5zbGF0aW9ucy9kZWZhdWx0J1xuaW1wb3J0IHR5cGUgeyBUcmFuc2xhdGlvbnMsIFRyYW5zbGF0b3JGdW5jdGlvbiB9IGZyb20gJ0AvbGliL3RyYW5zbGF0aW9ucy90eXBlcydcbmltcG9ydCB7IGdldE1vbnRoV2Vla3MsIGdldFdlZWtEYXlzIH0gZnJvbSAnQC9saWIvdXRpbHMvZGF0ZS11dGlscydcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJWaWV3IH0gZnJvbSAnQC90eXBlcydcbmltcG9ydCB7IERBWV9NQVhfRVZFTlRTX0RFRkFVTFQgfSBmcm9tICcuLi9saWIvY29uc3RhbnRzJ1xuXG5leHBvcnQgaW50ZXJmYWNlIENhbGVuZGFyRW5naW5lQ29uZmlnIHtcblx0ZXZlbnRzOiBDYWxlbmRhckV2ZW50W11cblx0Zmlyc3REYXlPZldlZWs6IG51bWJlclxuXHRpbml0aWFsVmlldz86IENhbGVuZGFyVmlld1xuXHRpbml0aWFsRGF0ZT86IERheWpzXG5cdGJ1c2luZXNzSG91cnM/OiBCdXNpbmVzc0hvdXJzIHwgQnVzaW5lc3NIb3Vyc1tdXG5cdG9uRXZlbnRBZGQ/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0b25FdmVudFVwZGF0ZT86IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuXHRvbkV2ZW50RGVsZXRlPzogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG5cdG9uRGF0ZUNoYW5nZT86IChkYXRlOiBEYXlqcywgcmFuZ2U6IHsgc3RhcnQ6IERheWpzOyBlbmQ6IERheWpzIH0pID0+IHZvaWRcblx0b25WaWV3Q2hhbmdlPzogKHZpZXc6IENhbGVuZGFyVmlldykgPT4gdm9pZFxuXHRsb2NhbGU/OiBzdHJpbmdcblx0dGltZXpvbmU/OiBzdHJpbmdcblx0dHJhbnNsYXRpb25zPzogVHJhbnNsYXRpb25zXG5cdHRyYW5zbGF0b3I/OiBUcmFuc2xhdG9yRnVuY3Rpb25cbn1cblxuZXhwb3J0IGludGVyZmFjZSBDYWxlbmRhckVuZ2luZVJldHVybiB7XG5cdGN1cnJlbnREYXRlOiBEYXlqc1xuXHR2aWV3OiBDYWxlbmRhclZpZXdcblx0ZXZlbnRzOiBDYWxlbmRhckV2ZW50W11cblx0cmF3RXZlbnRzOiBDYWxlbmRhckV2ZW50W11cblx0aXNFdmVudEZvcm1PcGVuOiBib29sZWFuXG5cdHNlbGVjdGVkRXZlbnQ6IENhbGVuZGFyRXZlbnQgfCBudWxsXG5cdHNlbGVjdGVkRGF0ZTogRGF5anMgfCBudWxsXG5cdGZpcnN0RGF5T2ZXZWVrOiBudW1iZXJcblx0ZGF5TWF4RXZlbnRzOiBudW1iZXJcblx0Y3VycmVudExvY2FsZTogc3RyaW5nXG5cdGJ1c2luZXNzSG91cnM/OiBCdXNpbmVzc0hvdXJzIHwgQnVzaW5lc3NIb3Vyc1tdXG5cdHNldEN1cnJlbnREYXRlOiAoZGF0ZTogRGF5anMpID0+IHZvaWRcblx0c2VsZWN0RGF0ZTogKGRhdGU6IERheWpzKSA9PiB2b2lkXG5cdHNldFZpZXc6ICh2aWV3OiBDYWxlbmRhclZpZXcpID0+IHZvaWRcblx0bmV4dFBlcmlvZDogKCkgPT4gdm9pZFxuXHRwcmV2UGVyaW9kOiAoKSA9PiB2b2lkXG5cdHRvZGF5OiAoKSA9PiB2b2lkXG5cdGFkZEV2ZW50OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0dXBkYXRlRXZlbnQ6IChldmVudElkOiBzdHJpbmcgfCBudW1iZXIsIGV2ZW50OiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+KSA9PiB2b2lkXG5cdHVwZGF0ZVJlY3VycmluZ0V2ZW50OiAoXG5cdFx0ZXZlbnQ6IENhbGVuZGFyRXZlbnQsXG5cdFx0dXBkYXRlczogUGFydGlhbDxDYWxlbmRhckV2ZW50Pixcblx0XHRvcHRpb25zOiBSZWN1cnJlbmNlRWRpdE9wdGlvbnNcblx0KSA9PiB2b2lkXG5cdGRlbGV0ZUV2ZW50OiAoZXZlbnRJZDogc3RyaW5nIHwgbnVtYmVyKSA9PiB2b2lkXG5cdGRlbGV0ZVJlY3VycmluZ0V2ZW50OiAoXG5cdFx0ZXZlbnQ6IENhbGVuZGFyRXZlbnQsXG5cdFx0b3B0aW9uczogUmVjdXJyZW5jZUVkaXRPcHRpb25zXG5cdCkgPT4gdm9pZFxuXHRvcGVuRXZlbnRGb3JtOiAoZXZlbnREYXRhPzogUGFydGlhbDxDYWxlbmRhckV2ZW50PikgPT4gdm9pZFxuXHRjbG9zZUV2ZW50Rm9ybTogKCkgPT4gdm9pZFxuXHRzZXRTZWxlY3RlZEV2ZW50OiBSZWFjdC5EaXNwYXRjaDxSZWFjdC5TZXRTdGF0ZUFjdGlvbjxDYWxlbmRhckV2ZW50IHwgbnVsbD4+XG5cdHNldElzRXZlbnRGb3JtT3BlbjogUmVhY3QuRGlzcGF0Y2g8UmVhY3QuU2V0U3RhdGVBY3Rpb248Ym9vbGVhbj4+XG5cdHNldFNlbGVjdGVkRGF0ZTogUmVhY3QuRGlzcGF0Y2g8UmVhY3QuU2V0U3RhdGVBY3Rpb248RGF5anMgfCBudWxsPj5cblx0Z2V0RXZlbnRzRm9yRGF0ZVJhbmdlOiAoc3RhcnREYXRlOiBEYXlqcywgZW5kRGF0ZTogRGF5anMpID0+IENhbGVuZGFyRXZlbnRbXVxuXHRmaW5kUGFyZW50UmVjdXJyaW5nRXZlbnQ6IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gQ2FsZW5kYXJFdmVudCB8IG51bGxcblx0dDogVHJhbnNsYXRvckZ1bmN0aW9uXG59XG5cbmNvbnN0IFZJRVdfVU5JVFM6IFJlY29yZDxDYWxlbmRhclZpZXcsIE1hbmlwdWxhdGVUeXBlPiA9IHtcblx0ZGF5OiAnZGF5Jyxcblx0d2VlazogJ3dlZWsnLFxuXHRtb250aDogJ21vbnRoJyxcblx0eWVhcjogJ3llYXInLFxufVxuXG5leHBvcnQgY29uc3QgY2FsY3VsYXRlVmlld1JhbmdlID0gKFxuXHRkYXRlOiBEYXlqcyxcblx0dmlldzogQ2FsZW5kYXJWaWV3LFxuXHRmaXJzdERheU9mV2VlazogbnVtYmVyXG4pOiB7IHN0YXJ0OiBEYXlqczsgZW5kOiBEYXlqcyB9ID0+IHtcblx0aWYgKHZpZXcgPT09ICdkYXknKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHN0YXJ0OiBkYXRlLnN0YXJ0T2YoJ2RheScpLFxuXHRcdFx0ZW5kOiBkYXRlLmVuZE9mKCdkYXknKSxcblx0XHR9XG5cdH1cblx0aWYgKHZpZXcgPT09ICd5ZWFyJykge1xuXHRcdHJldHVybiB7XG5cdFx0XHRzdGFydDogZGF0ZS5zdGFydE9mKCd5ZWFyJyksXG5cdFx0XHRlbmQ6IGRhdGUuZW5kT2YoJ3llYXInKSxcblx0XHR9XG5cdH1cblx0aWYgKHZpZXcgPT09ICd3ZWVrJykge1xuXHRcdGNvbnN0IHdlZWtEYXlzID0gZ2V0V2Vla0RheXMoZGF0ZSwgZmlyc3REYXlPZldlZWspXG5cdFx0cmV0dXJuIHtcblx0XHRcdHN0YXJ0OiB3ZWVrRGF5c1swXS5zdGFydE9mKCdkYXknKSxcblx0XHRcdGVuZDogd2Vla0RheXNbNl0uZW5kT2YoJ2RheScpLFxuXHRcdH1cblx0fVxuXHQvLyBtb250aCB2aWV3XG5cdGNvbnN0IHdlZWtzID0gZ2V0TW9udGhXZWVrcyhkYXRlLCBmaXJzdERheU9mV2Vlaylcblx0cmV0dXJuIHsgc3RhcnQ6IHdlZWtzWzBdWzBdLnN0YXJ0T2YoJ2RheScpLCBlbmQ6IHdlZWtzWzVdWzZdLmVuZE9mKCdkYXknKSB9XG59XG5cbmV4cG9ydCBjb25zdCB1c2VDYWxlbmRhckVuZ2luZSA9IChcblx0Y29uZmlnOiBDYWxlbmRhckVuZ2luZUNvbmZpZ1xuKTogQ2FsZW5kYXJFbmdpbmVSZXR1cm4gPT4ge1xuXHRjb25zdCB7XG5cdFx0ZXZlbnRzID0gW10sXG5cdFx0Zmlyc3REYXlPZldlZWsgPSAwLFxuXHRcdGluaXRpYWxWaWV3ID0gJ21vbnRoJyxcblx0XHRpbml0aWFsRGF0ZSA9IGRheWpzKCksXG5cdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRvbkV2ZW50QWRkLFxuXHRcdG9uRXZlbnRVcGRhdGUsXG5cdFx0b25FdmVudERlbGV0ZSxcblx0XHRvbkRhdGVDaGFuZ2UsXG5cdFx0b25WaWV3Q2hhbmdlLFxuXHRcdGxvY2FsZSxcblx0XHR0aW1lem9uZSxcblx0XHR0cmFuc2xhdGlvbnMsXG5cdFx0dHJhbnNsYXRvcixcblx0fSA9IGNvbmZpZ1xuXG5cdGNvbnN0IFtjdXJyZW50RGF0ZSwgc2V0Q3VycmVudERhdGVdID0gdXNlU3RhdGU8RGF5anM+KFxuXHRcdGRheWpzLmlzRGF5anMoaW5pdGlhbERhdGUpID8gaW5pdGlhbERhdGUgOiBkYXlqcyhpbml0aWFsRGF0ZSlcblx0KVxuXHRjb25zdCBbdmlldywgc2V0Vmlld10gPSB1c2VTdGF0ZTxDYWxlbmRhclZpZXc+KGluaXRpYWxWaWV3KVxuXHRjb25zdCBbY3VycmVudEV2ZW50cywgc2V0Q3VycmVudEV2ZW50c10gPSB1c2VTdGF0ZTxDYWxlbmRhckV2ZW50W10+KGV2ZW50cylcblx0Y29uc3QgW2lzRXZlbnRGb3JtT3Blbiwgc2V0SXNFdmVudEZvcm1PcGVuXSA9IHVzZVN0YXRlKGZhbHNlKVxuXHRjb25zdCBbc2VsZWN0ZWRFdmVudCwgc2V0U2VsZWN0ZWRFdmVudF0gPSB1c2VTdGF0ZTxDYWxlbmRhckV2ZW50IHwgbnVsbD4obnVsbClcblx0Y29uc3QgW3NlbGVjdGVkRGF0ZSwgc2V0U2VsZWN0ZWREYXRlXSA9IHVzZVN0YXRlPERheWpzIHwgbnVsbD4obnVsbClcblx0Y29uc3QgW2N1cnJlbnRMb2NhbGUsIHNldEN1cnJlbnRMb2NhbGVdID0gdXNlU3RhdGUobG9jYWxlIHx8ICdlbicpXG5cdGNvbnN0IGxhc3RFdmVudHNQcm9wID0gdXNlUmVmKGV2ZW50cylcblx0Y29uc3QgbGFzdFRpbWV6b25lUHJvcCA9IHVzZVJlZih0aW1lem9uZSlcblx0Y29uc3QgbGFzdExvY2FsZVByb3AgPSB1c2VSZWYobG9jYWxlKVxuXG5cdGNvbnN0IHQ6IFRyYW5zbGF0b3JGdW5jdGlvbiA9IHVzZU1lbW8oKCkgPT4ge1xuXHRcdGlmICh0cmFuc2xhdG9yKSB7XG5cdFx0XHRyZXR1cm4gdHJhbnNsYXRvclxuXHRcdH1cblx0XHRpZiAodHJhbnNsYXRpb25zKSB7XG5cdFx0XHRyZXR1cm4gKGtleTogc3RyaW5nKSA9PiB0cmFuc2xhdGlvbnNba2V5IGFzIGtleW9mIFRyYW5zbGF0aW9uc10gfHwga2V5XG5cdFx0fVxuXHRcdHJldHVybiAoa2V5OiBzdHJpbmcpID0+XG5cdFx0XHRkZWZhdWx0VHJhbnNsYXRpb25zW2tleSBhcyBrZXlvZiBUcmFuc2xhdGlvbnNdIHx8IGtleVxuXHR9LCBbdHJhbnNsYXRpb25zLCB0cmFuc2xhdG9yXSlcblxuXHRjb25zdCBnZXRFdmVudHNGb3JEYXRlUmFuZ2UgPSB1c2VDYWxsYmFjayhcblx0XHQoc3RhcnREYXRlOiBEYXlqcywgZW5kRGF0ZTogRGF5anMpOiBDYWxlbmRhckV2ZW50W10gPT4ge1xuXHRcdFx0Y29uc3QgYWxsRXZlbnRzOiBDYWxlbmRhckV2ZW50W10gPSBbXVxuXG5cdFx0XHRmb3IgKGNvbnN0IGV2ZW50IG9mIGN1cnJlbnRFdmVudHMpIHtcblx0XHRcdFx0aWYgKGV2ZW50LnJydWxlKSB7XG5cdFx0XHRcdFx0YWxsRXZlbnRzLnB1c2goXG5cdFx0XHRcdFx0XHQuLi5nZW5lcmF0ZVJlY3VycmluZ0V2ZW50cyh7XG5cdFx0XHRcdFx0XHRcdGV2ZW50LFxuXHRcdFx0XHRcdFx0XHRjdXJyZW50RXZlbnRzLFxuXHRcdFx0XHRcdFx0XHRzdGFydERhdGUsXG5cdFx0XHRcdFx0XHRcdGVuZERhdGUsXG5cdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdClcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRjb25zdCBzdGFydHNJblJhbmdlID1cblx0XHRcdFx0XHRcdGV2ZW50LnN0YXJ0LmlzU2FtZU9yQWZ0ZXIoc3RhcnREYXRlKSAmJlxuXHRcdFx0XHRcdFx0ZXZlbnQuc3RhcnQuaXNTYW1lT3JCZWZvcmUoZW5kRGF0ZSlcblx0XHRcdFx0XHRjb25zdCBlbmRzSW5SYW5nZSA9XG5cdFx0XHRcdFx0XHRldmVudC5lbmQuaXNTYW1lT3JBZnRlcihzdGFydERhdGUpICYmXG5cdFx0XHRcdFx0XHRldmVudC5lbmQuaXNTYW1lT3JCZWZvcmUoZW5kRGF0ZSlcblx0XHRcdFx0XHRjb25zdCBzcGFuc1JhbmdlID1cblx0XHRcdFx0XHRcdGV2ZW50LnN0YXJ0LmlzQmVmb3JlKHN0YXJ0RGF0ZSkgJiYgZXZlbnQuZW5kLmlzQWZ0ZXIoZW5kRGF0ZSlcblx0XHRcdFx0XHRpZiAoc3RhcnRzSW5SYW5nZSB8fCBlbmRzSW5SYW5nZSB8fCBzcGFuc1JhbmdlKSB7XG5cdFx0XHRcdFx0XHRhbGxFdmVudHMucHVzaChldmVudClcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBhbGxFdmVudHNcblx0XHR9LFxuXHRcdFtjdXJyZW50RXZlbnRzXVxuXHQpXG5cblx0Y29uc3QgZ2V0Q3VycmVudFZpZXdSYW5nZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcblx0XHRyZXR1cm4gY2FsY3VsYXRlVmlld1JhbmdlKGN1cnJlbnREYXRlLCB2aWV3LCBmaXJzdERheU9mV2Vlaylcblx0fSwgW2N1cnJlbnREYXRlLCB2aWV3LCBmaXJzdERheU9mV2Vla10pXG5cblx0Y29uc3QgcHJvY2Vzc2VkRXZlbnRzID0gdXNlTWVtbygoKSA9PiB7XG5cdFx0Y29uc3QgeyBzdGFydCwgZW5kIH0gPSBnZXRDdXJyZW50Vmlld1JhbmdlKClcblx0XHRyZXR1cm4gZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlKHN0YXJ0LCBlbmQpXG5cdH0sIFtnZXRFdmVudHNGb3JEYXRlUmFuZ2UsIGdldEN1cnJlbnRWaWV3UmFuZ2VdKVxuXG5cdHVzZUVmZmVjdCgoKSA9PiB7XG5cdFx0aWYgKGV2ZW50cyAhPT0gbGFzdEV2ZW50c1Byb3AuY3VycmVudCkge1xuXHRcdFx0c2V0Q3VycmVudEV2ZW50cyhldmVudHMpXG5cdFx0XHRsYXN0RXZlbnRzUHJvcC5jdXJyZW50ID0gZXZlbnRzXG5cdFx0fVxuXHR9LCBbZXZlbnRzXSlcblxuXHR1c2VFZmZlY3QoKCkgPT4ge1xuXHRcdGlmIChsb2NhbGUgJiYgbG9jYWxlICE9PSBsYXN0TG9jYWxlUHJvcC5jdXJyZW50KSB7XG5cdFx0XHRzZXRDdXJyZW50TG9jYWxlKGxvY2FsZSlcblx0XHRcdGRheWpzLmxvY2FsZShsb2NhbGUpXG5cdFx0XHRzZXRDdXJyZW50RGF0ZSgocHJldkRhdGUpID0+IHByZXZEYXRlLmxvY2FsZShsb2NhbGUpKVxuXHRcdFx0bGFzdExvY2FsZVByb3AuY3VycmVudCA9IGxvY2FsZVxuXHRcdH1cblx0fSwgW2xvY2FsZV0pXG5cblx0dXNlRWZmZWN0KCgpID0+IHtcblx0XHRpZiAodGltZXpvbmUgJiYgdGltZXpvbmUgIT09IGxhc3RUaW1lem9uZVByb3AuY3VycmVudCkge1xuXHRcdFx0ZGF5anMudHouc2V0RGVmYXVsdCh0aW1lem9uZSlcblx0XHRcdHNldEN1cnJlbnREYXRlKChwcmV2KSA9PiBwcmV2LnR6KHRpbWV6b25lKSlcblx0XHRcdHNldEN1cnJlbnRFdmVudHMoKHByZXYpID0+XG5cdFx0XHRcdHByZXYubWFwKChlKSA9PiAoe1xuXHRcdFx0XHRcdC4uLmUsXG5cdFx0XHRcdFx0c3RhcnQ6IGUuc3RhcnQudHoodGltZXpvbmUpLFxuXHRcdFx0XHRcdGVuZDogZS5lbmQudHoodGltZXpvbmUpLFxuXHRcdFx0XHR9KSlcblx0XHRcdClcblx0XHRcdGxhc3RUaW1lem9uZVByb3AuY3VycmVudCA9IHRpbWV6b25lXG5cdFx0fVxuXHR9LCBbdGltZXpvbmVdKVxuXG5cdGNvbnN0IHVwZGF0ZURhdGVBbmROb3RpZnkgPSB1c2VDYWxsYmFjayhcblx0XHQobmV3RGF0ZTogRGF5anMpID0+IHtcblx0XHRcdHNldEN1cnJlbnREYXRlKG5ld0RhdGUpXG5cdFx0XHRjb25zdCByYW5nZSA9IGNhbGN1bGF0ZVZpZXdSYW5nZShuZXdEYXRlLCB2aWV3LCBmaXJzdERheU9mV2Vlaylcblx0XHRcdG9uRGF0ZUNoYW5nZT8uKG5ld0RhdGUsIHJhbmdlKVxuXHRcdH0sXG5cdFx0W29uRGF0ZUNoYW5nZSwgdmlldywgZmlyc3REYXlPZldlZWtdXG5cdClcblxuXHRjb25zdCBzZWxlY3REYXRlID0gdXNlQ2FsbGJhY2soXG5cdFx0KGRhdGU6IERheWpzKSA9PiB1cGRhdGVEYXRlQW5kTm90aWZ5KGRhdGUpLFxuXHRcdFt1cGRhdGVEYXRlQW5kTm90aWZ5XVxuXHQpXG5cblx0Y29uc3QgbmF2aWdhdGVQZXJpb2QgPSB1c2VDYWxsYmFjayhcblx0XHQoZGlyZWN0aW9uOiAxIHwgLTEpID0+IHtcblx0XHRcdGNvbnN0IG5ld0RhdGUgPVxuXHRcdFx0XHRkaXJlY3Rpb24gPT09IDFcblx0XHRcdFx0XHQ/IGN1cnJlbnREYXRlLmFkZCgxLCBWSUVXX1VOSVRTW3ZpZXddKVxuXHRcdFx0XHRcdDogY3VycmVudERhdGUuc3VidHJhY3QoMSwgVklFV19VTklUU1t2aWV3XSlcblx0XHRcdHVwZGF0ZURhdGVBbmROb3RpZnkobmV3RGF0ZSlcblx0XHR9LFxuXHRcdFtjdXJyZW50RGF0ZSwgdmlldywgdXBkYXRlRGF0ZUFuZE5vdGlmeV1cblx0KVxuXG5cdGNvbnN0IG5leHRQZXJpb2QgPSB1c2VDYWxsYmFjaygoKSA9PiBuYXZpZ2F0ZVBlcmlvZCgxKSwgW25hdmlnYXRlUGVyaW9kXSlcblx0Y29uc3QgcHJldlBlcmlvZCA9IHVzZUNhbGxiYWNrKCgpID0+IG5hdmlnYXRlUGVyaW9kKC0xKSwgW25hdmlnYXRlUGVyaW9kXSlcblxuXHRjb25zdCB0b2RheSA9IHVzZUNhbGxiYWNrKFxuXHRcdCgpID0+IHVwZGF0ZURhdGVBbmROb3RpZnkoZGF5anMoKSksXG5cdFx0W3VwZGF0ZURhdGVBbmROb3RpZnldXG5cdClcblxuXHRjb25zdCBhZGRFdmVudCA9IHVzZUNhbGxiYWNrKFxuXHRcdChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4ge1xuXHRcdFx0c2V0Q3VycmVudEV2ZW50cygocHJldikgPT4gWy4uLnByZXYsIGV2ZW50XSlcblx0XHRcdG9uRXZlbnRBZGQ/LihldmVudClcblx0XHR9LFxuXHRcdFtvbkV2ZW50QWRkXVxuXHQpXG5cblx0Y29uc3QgdXBkYXRlRXZlbnQgPSB1c2VDYWxsYmFjayhcblx0XHQoZXZlbnRJZDogc3RyaW5nIHwgbnVtYmVyLCB1cGRhdGVzOiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+KSA9PiB7XG5cdFx0XHRjb25zdCBldmVudFRvVXBkYXRlID0gY3VycmVudEV2ZW50cy5maW5kKChldmVudCkgPT4gZXZlbnQuaWQgPT09IGV2ZW50SWQpXG5cdFx0XHRpZiAoIWV2ZW50VG9VcGRhdGUpIHtcblx0XHRcdFx0cmV0dXJuXG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IG5ld0V2ZW50ID0geyAuLi5ldmVudFRvVXBkYXRlLCAuLi51cGRhdGVzIH1cblx0XHRcdHNldEN1cnJlbnRFdmVudHMoKHByZXYpID0+XG5cdFx0XHRcdHByZXYubWFwKChldmVudCkgPT4gKGV2ZW50LmlkID09PSBldmVudElkID8gbmV3RXZlbnQgOiBldmVudCkpXG5cdFx0XHQpXG5cdFx0XHRvbkV2ZW50VXBkYXRlPy4obmV3RXZlbnQpXG5cdFx0fSxcblx0XHRbY3VycmVudEV2ZW50cywgb25FdmVudFVwZGF0ZV1cblx0KVxuXG5cdGNvbnN0IHVwZGF0ZVJlY3VycmluZ0V2ZW50ID0gdXNlQ2FsbGJhY2soXG5cdFx0KFxuXHRcdFx0ZXZlbnQ6IENhbGVuZGFyRXZlbnQsXG5cdFx0XHR1cGRhdGVzOiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+LFxuXHRcdFx0b3B0aW9uczogUmVjdXJyZW5jZUVkaXRPcHRpb25zXG5cdFx0KSA9PiB7XG5cdFx0XHRvbkV2ZW50VXBkYXRlPy4oeyAuLi5ldmVudCwgLi4udXBkYXRlcyB9KVxuXHRcdFx0c2V0Q3VycmVudEV2ZW50cyhcblx0XHRcdFx0dXBkYXRlUmVjdXJyaW5nRXZlbnRJbXBsKHtcblx0XHRcdFx0XHR0YXJnZXRFdmVudDogZXZlbnQsXG5cdFx0XHRcdFx0dXBkYXRlcyxcblx0XHRcdFx0XHRjdXJyZW50RXZlbnRzLFxuXHRcdFx0XHRcdHNjb3BlOiBvcHRpb25zLnNjb3BlLFxuXHRcdFx0XHR9KVxuXHRcdFx0KVxuXHRcdH0sXG5cdFx0W2N1cnJlbnRFdmVudHMsIG9uRXZlbnRVcGRhdGVdXG5cdClcblxuXHRjb25zdCBkZWxldGVSZWN1cnJpbmdFdmVudCA9IHVzZUNhbGxiYWNrKFxuXHRcdChldmVudDogQ2FsZW5kYXJFdmVudCwgb3B0aW9uczogUmVjdXJyZW5jZUVkaXRPcHRpb25zKSA9PiB7XG5cdFx0XHRvbkV2ZW50RGVsZXRlPy4oZXZlbnQpXG5cdFx0XHRzZXRDdXJyZW50RXZlbnRzKFxuXHRcdFx0XHRkZWxldGVSZWN1cnJpbmdFdmVudEltcGwoe1xuXHRcdFx0XHRcdHRhcmdldEV2ZW50OiBldmVudCxcblx0XHRcdFx0XHRjdXJyZW50RXZlbnRzLFxuXHRcdFx0XHRcdHNjb3BlOiBvcHRpb25zLnNjb3BlLFxuXHRcdFx0XHR9KVxuXHRcdFx0KVxuXHRcdH0sXG5cdFx0W2N1cnJlbnRFdmVudHMsIG9uRXZlbnREZWxldGVdXG5cdClcblxuXHRjb25zdCBkZWxldGVFdmVudCA9IHVzZUNhbGxiYWNrKFxuXHRcdChldmVudElkOiBzdHJpbmcgfCBudW1iZXIpID0+IHtcblx0XHRcdGNvbnN0IGV2ZW50VG9EZWxldGUgPSBjdXJyZW50RXZlbnRzLmZpbmQoKGUpID0+IGUuaWQgPT09IGV2ZW50SWQpXG5cdFx0XHRpZiAoIWV2ZW50VG9EZWxldGUpIHtcblx0XHRcdFx0cmV0dXJuXG5cdFx0XHR9XG5cblx0XHRcdHNldEN1cnJlbnRFdmVudHMoKHByZXYpID0+IHByZXYuZmlsdGVyKChlKSA9PiBlLmlkICE9PSBldmVudElkKSlcblx0XHRcdG9uRXZlbnREZWxldGU/LihldmVudFRvRGVsZXRlKVxuXHRcdH0sXG5cdFx0W2N1cnJlbnRFdmVudHMsIG9uRXZlbnREZWxldGVdXG5cdClcblxuXHRjb25zdCBvcGVuRXZlbnRGb3JtID0gdXNlQ2FsbGJhY2soXG5cdFx0KGV2ZW50RGF0YT86IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD4pID0+IHtcblx0XHRcdGlmIChldmVudERhdGE/LnN0YXJ0KSB7XG5cdFx0XHRcdHNldFNlbGVjdGVkRGF0ZShldmVudERhdGEuc3RhcnQpXG5cdFx0XHR9XG5cdFx0XHRjb25zdCBzdGFydCA9IGV2ZW50RGF0YT8uc3RhcnQgPz8gY3VycmVudERhdGVcblx0XHRcdHNldFNlbGVjdGVkRXZlbnQoe1xuXHRcdFx0XHR0aXRsZTogdCgnbmV3RXZlbnQnKSxcblx0XHRcdFx0c3RhcnQsXG5cdFx0XHRcdGVuZDogZXZlbnREYXRhPy5lbmQgPz8gc3RhcnQuYWRkKDEsICdob3VyJyksXG5cdFx0XHRcdHJlc291cmNlSWQ6IGV2ZW50RGF0YT8ucmVzb3VyY2VJZCxcblx0XHRcdFx0ZGVzY3JpcHRpb246ICcnLFxuXHRcdFx0XHRhbGxEYXk6IGV2ZW50RGF0YT8uYWxsRGF5ID8/IGZhbHNlLFxuXHRcdFx0fSBhcyBDYWxlbmRhckV2ZW50KVxuXHRcdFx0c2V0SXNFdmVudEZvcm1PcGVuKHRydWUpXG5cdFx0fSxcblx0XHRbY3VycmVudERhdGUsIHRdXG5cdClcblxuXHRjb25zdCBjbG9zZUV2ZW50Rm9ybSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcblx0XHRzZXRTZWxlY3RlZERhdGUobnVsbClcblx0XHRzZXRTZWxlY3RlZEV2ZW50KG51bGwpXG5cdFx0c2V0SXNFdmVudEZvcm1PcGVuKGZhbHNlKVxuXHR9LCBbXSlcblxuXHRjb25zdCBoYW5kbGVWaWV3Q2hhbmdlID0gdXNlQ2FsbGJhY2soXG5cdFx0KG5ld1ZpZXc6IENhbGVuZGFyVmlldykgPT4ge1xuXHRcdFx0c2V0VmlldyhuZXdWaWV3KVxuXHRcdFx0b25WaWV3Q2hhbmdlPy4obmV3Vmlldylcblx0XHRcdC8vIFZpZXcgY2hhbmdlIGFmZmVjdHMgdmlzaWJsZSByYW5nZSDigJQgbm90aWZ5IGNvbnN1bWVyc1xuXHRcdFx0Y29uc3QgcmFuZ2UgPSBjYWxjdWxhdGVWaWV3UmFuZ2UoY3VycmVudERhdGUsIG5ld1ZpZXcsIGZpcnN0RGF5T2ZXZWVrKVxuXHRcdFx0b25EYXRlQ2hhbmdlPy4oY3VycmVudERhdGUsIHJhbmdlKVxuXHRcdH0sXG5cdFx0W29uVmlld0NoYW5nZSwgb25EYXRlQ2hhbmdlLCBjdXJyZW50RGF0ZSwgZmlyc3REYXlPZldlZWtdXG5cdClcblxuXHRjb25zdCBmaW5kUGFyZW50UmVjdXJyaW5nRXZlbnQgPSB1c2VDYWxsYmFjayhcblx0XHQoZXZlbnQ6IENhbGVuZGFyRXZlbnQpOiBDYWxlbmRhckV2ZW50IHwgbnVsbCA9PiB7XG5cdFx0XHRjb25zdCB0YXJnZXRVSUQgPSBldmVudC51aWRcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdGN1cnJlbnRFdmVudHMuZmluZChcblx0XHRcdFx0XHQoZSkgPT4gKGUudWlkIHx8IGAke2UuaWR9QGlsYW15LmNhbGVuZGFyYCkgPT09IHRhcmdldFVJRCAmJiBlLnJydWxlXG5cdFx0XHRcdCkgfHwgbnVsbFxuXHRcdFx0KVxuXHRcdH0sXG5cdFx0W2N1cnJlbnRFdmVudHNdXG5cdClcblxuXHRyZXR1cm4ge1xuXHRcdGN1cnJlbnREYXRlLFxuXHRcdHZpZXcsXG5cdFx0ZXZlbnRzOiBwcm9jZXNzZWRFdmVudHMsXG5cdFx0cmF3RXZlbnRzOiBjdXJyZW50RXZlbnRzLFxuXHRcdGlzRXZlbnRGb3JtT3Blbixcblx0XHRzZWxlY3RlZEV2ZW50LFxuXHRcdHNlbGVjdGVkRGF0ZSxcblx0XHRmaXJzdERheU9mV2Vlayxcblx0XHRkYXlNYXhFdmVudHM6IERBWV9NQVhfRVZFTlRTX0RFRkFVTFQsXG5cdFx0Y3VycmVudExvY2FsZSxcblx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdHNldEN1cnJlbnREYXRlLFxuXHRcdHNlbGVjdERhdGUsXG5cdFx0c2V0VmlldzogaGFuZGxlVmlld0NoYW5nZSxcblx0XHRuZXh0UGVyaW9kLFxuXHRcdHByZXZQZXJpb2QsXG5cdFx0dG9kYXksXG5cdFx0YWRkRXZlbnQsXG5cdFx0dXBkYXRlRXZlbnQsXG5cdFx0dXBkYXRlUmVjdXJyaW5nRXZlbnQsXG5cdFx0ZGVsZXRlRXZlbnQsXG5cdFx0ZGVsZXRlUmVjdXJyaW5nRXZlbnQsXG5cdFx0b3BlbkV2ZW50Rm9ybSxcblx0XHRjbG9zZUV2ZW50Rm9ybSxcblx0XHRzZXRTZWxlY3RlZEV2ZW50LFxuXHRcdHNldElzRXZlbnRGb3JtT3Blbixcblx0XHRzZXRTZWxlY3RlZERhdGUsXG5cdFx0Z2V0RXZlbnRzRm9yRGF0ZVJhbmdlLFxuXHRcdGZpbmRQYXJlbnRSZWN1cnJpbmdFdmVudCxcblx0XHR0LFxuXHR9XG59XG4iLAogICAgImltcG9ydCB7IFJSdWxlIH0gZnJvbSAncnJ1bGUnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMnXG5pbXBvcnQgdHlwZSB7IFJSdWxlT3B0aW9ucyB9IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS90eXBlcydcbmltcG9ydCBkYXlqcywgeyB0eXBlIERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBvbWl0S2V5cywgc2FmZURhdGUgfSBmcm9tICdAL2xpYi91dGlscydcblxuLyoqXG4gKiBDb252ZXJ0cyBhIERheWpzIG9iamVjdCB0byBhIFwiRmxvYXRpbmcgVGltZVwiIERhdGUgcmVwcmVzZW50YXRpb24uXG4gKiBJbiBGbG9hdGluZyBUaW1lLCB3ZSB1c2UgYSBVVEMgRGF0ZSBvYmplY3QgYnV0IHNldCBpdHMgVVRDIGNvbXBvbmVudHNcbiAqIHRvIG1hdGNoIHRoZSBsb2NhbCBjb21wb25lbnRzIG9mIHRoZSB1c2VyJ3MgZGF0ZS5cbiAqXG4gKiBUaGlzIGlzIGVzc2VudGlhbCBmb3IgUlJ1bGUgZXZhbHVhdGlvbiBiZWNhdXNlIGl0IGVuc3VyZXMgdGhhdCBhIHJ1bGVcbiAqIGxpa2UgXCJFdmVyeSBXZWRuZXNkYXlcIiByZWZlcnMgdG8gdGhlIHVzZXIncyBsb2NhbCBXZWRuZXNkYXksIGV2ZW4gaWZcbiAqIHRoYXQgdGltZSBmYWxscyBvbiBhIFRodXJzZGF5IGluIGFjdHVhbCBVVEMuXG4gKi9cbmNvbnN0IHRvRmxvYXRpbmdEYXRlID0gKGQ6IERheWpzKTogRGF0ZSA9PiB7XG5cdHJldHVybiBuZXcgRGF0ZShcblx0XHREYXRlLlVUQyhcblx0XHRcdGQueWVhcigpLFxuXHRcdFx0ZC5tb250aCgpLFxuXHRcdFx0ZC5kYXRlKCksXG5cdFx0XHRkLmhvdXIoKSxcblx0XHRcdGQubWludXRlKCksXG5cdFx0XHRkLnNlY29uZCgpLFxuXHRcdFx0ZC5taWxsaXNlY29uZCgpXG5cdFx0KVxuXHQpXG59XG5cbi8qKlxuICogQ29udmVydHMgYSBcIkZsb2F0aW5nIFRpbWVcIiBEYXRlIGJhY2sgdG8gYSBEYXlqcyBvYmplY3QgaW4gdGhlIG9yaWdpbmFsIGNvbnRleHQuXG4gKiBJdCB0YWtlcyB0aGUgWU1ESE1TIGNvbXBvbmVudHMgZnJvbSB0aGUgVVRDIERhdGUgYW5kIGFwcGxpZXMgdGhlbSB0byB0aGVcbiAqIHJlZmVyZW5jZSBEYXlqcyBvYmplY3QgKHByZXNlcnZpbmcgaXRzIHRpbWV6b25lL2xvY2FsZSkuXG4gKi9cbmNvbnN0IGZyb21GbG9hdGluZ0RhdGUgPSAoZGF0ZTogRGF0ZSwgcmVmZXJlbmNlOiBEYXlqcyk6IERheWpzID0+IHtcblx0cmV0dXJuIHJlZmVyZW5jZVxuXHRcdC55ZWFyKGRhdGUuZ2V0VVRDRnVsbFllYXIoKSlcblx0XHQubW9udGgoZGF0ZS5nZXRVVENNb250aCgpKVxuXHRcdC5kYXRlKGRhdGUuZ2V0VVRDRGF0ZSgpKVxuXHRcdC5ob3VyKGRhdGUuZ2V0VVRDSG91cnMoKSlcblx0XHQubWludXRlKGRhdGUuZ2V0VVRDTWludXRlcygpKVxuXHRcdC5zZWNvbmQoZGF0ZS5nZXRVVENTZWNvbmRzKCkpXG5cdFx0Lm1pbGxpc2Vjb25kKGRhdGUuZ2V0VVRDTWlsbGlzZWNvbmRzKCkpXG59XG5cbmV4cG9ydCBjb25zdCBpc1JlY3VycmluZ0V2ZW50ID0gKGV2ZW50OiBDYWxlbmRhckV2ZW50KTogYm9vbGVhbiA9PiB7XG5cdHJldHVybiBCb29sZWFuKGV2ZW50LnJydWxlIHx8IGV2ZW50LnJlY3VycmVuY2VJZCB8fCBldmVudC51aWQpXG59XG5cbi8qKlxuICogQ29uc2lzdGVudGx5IGRlcml2ZXMgYSBwYXJlbnQgVUlEIGZyb20gYW4gZXZlbnQuXG4gKiBVc2VzIHRoZSBleHBsaWNpdCBgdWlkYCBpZiBhdmFpbGFibGUsIG90aGVyd2lzZSBmYWxscyBiYWNrIHRvIGAke2lkfUBpbGFteS5jYWxlbmRhcmAuXG4gKi9cbmNvbnN0IGdldEV2ZW50UGFyZW50VUlEID0gKGV2ZW50OiBDYWxlbmRhckV2ZW50KTogc3RyaW5nID0+IHtcblx0cmV0dXJuIGV2ZW50LnVpZCB8fCBgJHtldmVudC5pZH1AaWxhbXkuY2FsZW5kYXJgXG59XG5cbmludGVyZmFjZSBHZW5lcmF0ZVJlY3VycmluZ0V2ZW50c1Byb3BzIHtcblx0ZXZlbnQ6IENhbGVuZGFyRXZlbnRcblx0Y3VycmVudEV2ZW50czogQ2FsZW5kYXJFdmVudFtdXG5cdHN0YXJ0RGF0ZTogRGF5anNcblx0ZW5kRGF0ZTogRGF5anNcbn1cblxuZXhwb3J0IGNvbnN0IGdlbmVyYXRlUmVjdXJyaW5nRXZlbnRzID0gKHtcblx0ZXZlbnQsXG5cdGN1cnJlbnRFdmVudHMsXG5cdHN0YXJ0RGF0ZSxcblx0ZW5kRGF0ZSxcbn06IEdlbmVyYXRlUmVjdXJyaW5nRXZlbnRzUHJvcHMpOiBDYWxlbmRhckV2ZW50W10gPT4ge1xuXHQvLyBJZiBub3QgYSByZWN1cnJpbmcgZXZlbnQsIHJldHVybiBlbXB0eSBhcnJheVxuXHRpZiAoIWV2ZW50LnJydWxlKSB7XG5cdFx0cmV0dXJuIFtdXG5cdH1cblxuXHR0cnkge1xuXHRcdC8vIERUU1RBUlQgYW5kIFNFQVJDSCBXSU5ET1cgVFJBTlNGT1JNQVRJT05cblx0XHQvLyBUcmFuc2Zvcm0gYWxsIGRhdGVzIHRvIFwiZmxvYXRpbmcgdGltZVwiIChVVEMgd2l0aCBsb2NhbCBjb21wb25lbnRzKVxuXHRcdC8vIFRoaXMgZW5zdXJlcyBSUnVsZSBldmFsdWF0ZXMgXCJXZWRuZXNkYXlcIiBhcyB0aGUgdXNlcidzIGxvY2FsIFdlZG5lc2RheVxuXHRcdGNvbnN0IGZsb2F0aW5nU3RhcnQgPSB0b0Zsb2F0aW5nRGF0ZShldmVudC5zdGFydClcblx0XHRjb25zdCBmbG9hdGluZ1VudGlsID0gZXZlbnQucnJ1bGUudW50aWxcblx0XHRcdD8gdG9GbG9hdGluZ0RhdGUoZGF5anMoZXZlbnQucnJ1bGUudW50aWwpKVxuXHRcdFx0OiB1bmRlZmluZWRcblxuXHRcdGNvbnN0IHJ1bGVPcHRpb25zOiBSUnVsZU9wdGlvbnMgPSB7XG5cdFx0XHQuLi5ldmVudC5ycnVsZSxcblx0XHRcdGR0c3RhcnQ6IGZsb2F0aW5nU3RhcnQsXG5cdFx0XHR1bnRpbDogZmxvYXRpbmdVbnRpbCxcblx0XHR9XG5cdFx0Y29uc3QgcnVsZSA9IG5ldyBSUnVsZShydWxlT3B0aW9ucylcblxuXHRcdGNvbnN0IHBhcmVudFVpZCA9IGdldEV2ZW50UGFyZW50VUlEKGV2ZW50KVxuXHRcdGNvbnN0IG92ZXJyaWRlcyA9IGN1cnJlbnRFdmVudHMuZmlsdGVyKFxuXHRcdFx0KGUpID0+IGUucmVjdXJyZW5jZUlkICYmIGdldEV2ZW50UGFyZW50VUlEKGUpID09PSBwYXJlbnRVaWRcblx0XHQpXG5cblx0XHQvLyBDYWxjdWxhdGUgZXZlbnQgZHVyYXRpb24gdG8gZXhwYW5kIHNlYXJjaCB3aW5kb3cgZm9yIGV2ZW50cyB0aGF0IHNwYW4gdGhlIHJhbmdlXG5cdFx0Y29uc3QgZXZlbnREdXJhdGlvbiA9IGV2ZW50LmVuZC5kaWZmKGV2ZW50LnN0YXJ0KVxuXG5cdFx0Ly8gRXhwYW5kIHNlYXJjaCB3aW5kb3cgYmFja3dhcmQgYnkgZXZlbnQgZHVyYXRpb24gdG8gY2F0Y2ggZXZlbnRzIHRoYXQgc3RhcnQgYmVmb3JlXG5cdFx0Ly8gdGhlIHJhbmdlIGJ1dCBzcGFuIGludG8gaXRcblx0XHRjb25zdCBleHBhbmRlZFN0YXJ0RGF0ZVRpbWUgPSB0b0Zsb2F0aW5nRGF0ZShcblx0XHRcdHN0YXJ0RGF0ZS5zdWJ0cmFjdChldmVudER1cmF0aW9uLCAnbWlsbGlzZWNvbmQnKVxuXHRcdClcblx0XHRjb25zdCBlbmREYXRlVGltZSA9IHRvRmxvYXRpbmdEYXRlKGVuZERhdGUpXG5cblx0XHQvLyBHZXQgYWxsIG9jY3VycmVuY2VzIGluIHRoZSBleHBhbmRlZCByYW5nZVxuXHRcdGNvbnN0IG9jY3VycmVuY2VzID0gcnVsZS5iZXR3ZWVuKGV4cGFuZGVkU3RhcnREYXRlVGltZSwgZW5kRGF0ZVRpbWUsIHRydWUpXG5cblx0XHQvLyBDb252ZXJ0IG9jY3VycmVuY2VzIHRvIENhbGVuZGFyRXZlbnQgaW5zdGFuY2VzXG5cdFx0Y29uc3QgcmVjdXJyaW5nRXZlbnRzOiBDYWxlbmRhckV2ZW50W10gPSBvY2N1cnJlbmNlc1xuXHRcdFx0Lm1hcCgob2NjdXJyZW5jZSwgaW5kZXgpID0+IHtcblx0XHRcdFx0Y29uc3Qgb2NjdXJyZW5jZURhdGUgPSBmcm9tRmxvYXRpbmdEYXRlKG9jY3VycmVuY2UsIGV2ZW50LnN0YXJ0KVxuXHRcdFx0XHRjb25zdCBleGlzdGluZ092ZXJyaWRlID0gb3ZlcnJpZGVzLmZpbmQoKGUpID0+XG5cdFx0XHRcdFx0c2FmZURhdGUoZS5yZWN1cnJlbmNlSWQpPy5pc1NhbWUob2NjdXJyZW5jZURhdGUpXG5cdFx0XHRcdClcblxuXHRcdFx0XHQvLyBJZiB0aGVyZSdzIGFuIG92ZXJyaWRlLCB1c2UgaXRcblx0XHRcdFx0aWYgKGV4aXN0aW5nT3ZlcnJpZGUpIHtcblx0XHRcdFx0XHRyZXR1cm4geyAuLi5ldmVudCwgLi4uZXhpc3RpbmdPdmVycmlkZSB9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBDYWxjdWxhdGUgdGhlIGR1cmF0aW9uIGZyb20gdGhlIG9yaWdpbmFsIGV2ZW50XG5cdFx0XHRcdGNvbnN0IG9yaWdpbmFsRHVyYXRpb24gPSBldmVudC5lbmQuZGlmZihldmVudC5zdGFydClcblx0XHRcdFx0Y29uc3QgbmV3RW5kVGltZSA9IG9jY3VycmVuY2VEYXRlLmFkZChvcmlnaW5hbER1cmF0aW9uLCAnbWlsbGlzZWNvbmQnKVxuXHRcdFx0XHRjb25zdCByZWN1cnJpbmdFdmVudElkID0gYCR7ZXZlbnQuaWR9XyR7aW5kZXh9YFxuXHRcdFx0XHRjb25zdCBwYXJlbnRVSUQgPSBnZXRFdmVudFBhcmVudFVJRChldmVudClcblxuXHRcdFx0XHQvLyBDcmVhdGUgdGhlIHJlY3VycmluZyBldmVudCBpbnN0YW5jZVxuXHRcdFx0XHRjb25zdCByZWN1cnJpbmdFdmVudDogQ2FsZW5kYXJFdmVudCA9IHtcblx0XHRcdFx0XHQuLi5ldmVudCxcblx0XHRcdFx0XHRpZDogcmVjdXJyaW5nRXZlbnRJZCxcblx0XHRcdFx0XHRzdGFydDogb2NjdXJyZW5jZURhdGUsXG5cdFx0XHRcdFx0ZW5kOiBuZXdFbmRUaW1lLFxuXHRcdFx0XHRcdHVpZDogcGFyZW50VUlELCAvLyBTYW1lIFVJRCBhcyBwYXJlbnQgZm9yIHByb3BlciBncm91cGluZ1xuXHRcdFx0XHRcdHJydWxlOiB1bmRlZmluZWQsIC8vIEluc3RhbmNlIGV2ZW50cyBkb24ndCBoYXZlIFJSVUxFXG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gcmVjdXJyaW5nRXZlbnRcblx0XHRcdH0pXG5cdFx0XHQuZmlsdGVyKChyZWN1cnJpbmdFdmVudCkgPT4ge1xuXHRcdFx0XHQvLyBGaWx0ZXIgb3V0IEVYREFURSBleGNsdXNpb25zXG5cdFx0XHRcdGNvbnN0IGhhc0V4ZGF0ZXMgPSBldmVudC5leGRhdGVzICYmIGV2ZW50LmV4ZGF0ZXMubGVuZ3RoID4gMFxuXHRcdFx0XHRpZiAoaGFzRXhkYXRlcykge1xuXHRcdFx0XHRcdGNvbnN0IGV2ZW50U3RhcnRJU08gPSByZWN1cnJpbmdFdmVudC5zdGFydC50b0lTT1N0cmluZygpXG5cdFx0XHRcdFx0Y29uc3QgaXNFeGNsdWRlZCA9IGV2ZW50LmV4ZGF0ZXM/LmluY2x1ZGVzKGV2ZW50U3RhcnRJU08pXG5cdFx0XHRcdFx0aWYgKGlzRXhjbHVkZWQpIHtcblx0XHRcdFx0XHRcdHJldHVybiBmYWxzZVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIEZpbHRlciB0byBvbmx5IGluY2x1ZGUgZXZlbnRzIHRoYXQgc3BhbiB0aHJvdWdoIHRoZSBvcmlnaW5hbCByZXF1ZXN0ZWQgZGF0ZSByYW5nZVxuXHRcdFx0XHQvLyBBbiBldmVudCBzcGFucyB0aGUgcmFuZ2UgaWY6IGV2ZW50X3N0YXJ0IDwgcmFuZ2VfZW5kIEFORCBldmVudF9lbmQgPiByYW5nZV9zdGFydFxuXHRcdFx0XHQvLyBVc2UgaXNTYW1lT3JCZWZvcmUvaXNTYW1lT3JBZnRlciB0byBpbmNsdWRlIGJvdW5kYXJ5IGNhc2VzXG5cdFx0XHRcdGNvbnN0IGV2ZW50U3BhbnNSYW5nZSA9XG5cdFx0XHRcdFx0cmVjdXJyaW5nRXZlbnQuc3RhcnQuaXNTYW1lT3JCZWZvcmUoZW5kRGF0ZSkgJiZcblx0XHRcdFx0XHRyZWN1cnJpbmdFdmVudC5lbmQuaXNTYW1lT3JBZnRlcihzdGFydERhdGUpXG5cblx0XHRcdFx0cmV0dXJuIGV2ZW50U3BhbnNSYW5nZVxuXHRcdFx0fSlcblxuXHRcdHJldHVybiByZWN1cnJpbmdFdmVudHNcblx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHQvLyBIYW5kbGUgaW52YWxpZCBSUlVMRSBvcHRpb25zXG5cdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0YEludmFsaWQgUlJVTEUgb3B0aW9uczogJHtKU09OLnN0cmluZ2lmeShldmVudC5ycnVsZSl9LiBFcnJvcjogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJ31gXG5cdFx0KVxuXHR9XG59XG5cbmludGVyZmFjZSBVcGRhdGVSZWN1cnJpbmdFdmVudFByb3BzIHtcblx0dGFyZ2V0RXZlbnQ6IENhbGVuZGFyRXZlbnRcblx0dXBkYXRlczogUGFydGlhbDxDYWxlbmRhckV2ZW50PlxuXHRjdXJyZW50RXZlbnRzOiBDYWxlbmRhckV2ZW50W11cblx0c2NvcGU6ICd0aGlzJyB8ICdmb2xsb3dpbmcnIHwgJ2FsbCdcbn1cblxuZXhwb3J0IGNvbnN0IHVwZGF0ZVJlY3VycmluZ0V2ZW50ID0gKHtcblx0dGFyZ2V0RXZlbnQsXG5cdHVwZGF0ZXMsXG5cdGN1cnJlbnRFdmVudHMsXG5cdHNjb3BlLFxufTogVXBkYXRlUmVjdXJyaW5nRXZlbnRQcm9wcyk6IENhbGVuZGFyRXZlbnRbXSA9PiB7XG5cdGNvbnN0IHVwZGF0ZWRFdmVudHMgPSBbLi4uY3VycmVudEV2ZW50c11cblxuXHQvLyBGaW5kIHRoZSBiYXNlIHJlY3VycmluZyBldmVudFxuXHRjb25zdCB0YXJnZXRVaWQgPSBnZXRFdmVudFBhcmVudFVJRCh0YXJnZXRFdmVudClcblx0Y29uc3QgYmFzZUV2ZW50SW5kZXggPSB1cGRhdGVkRXZlbnRzLmZpbmRJbmRleCgoZSkgPT4ge1xuXHRcdHJldHVybiBnZXRFdmVudFBhcmVudFVJRChlKSA9PT0gdGFyZ2V0VWlkICYmIGUucnJ1bGUgJiYgIWUucmVjdXJyZW5jZUlkXG5cdH0pXG5cblx0aWYgKGJhc2VFdmVudEluZGV4ID09PSAtMSkge1xuXHRcdHRocm93IG5ldyBFcnJvcignQmFzZSByZWN1cnJpbmcgZXZlbnQgbm90IGZvdW5kJylcblx0fVxuXG5cdGNvbnN0IGJhc2VFdmVudCA9IHVwZGF0ZWRFdmVudHNbYmFzZUV2ZW50SW5kZXhdXG5cblx0c3dpdGNoIChzY29wZSkge1xuXHRcdGNhc2UgJ3RoaXMnOiB7XG5cdFx0XHQvLyBcIlRoaXMgZXZlbnQgb25seVwiIC0gQWRkIEVYREFURSB0byBiYXNlIGV2ZW50IGFuZCBjcmVhdGUgc3RhbmRhbG9uZSBtb2RpZmllZCBldmVudFxuXHRcdFx0Y29uc3QgdGFyZ2V0RXZlbnRTdGFydElTTyA9IHRhcmdldEV2ZW50LnN0YXJ0LnRvSVNPU3RyaW5nKClcblx0XHRcdGNvbnN0IGV4aXN0aW5nRXhkYXRlcyA9IGJhc2VFdmVudC5leGRhdGVzIHx8IFtdXG5cdFx0XHRjb25zdCB1cGRhdGVkRXhkYXRlcyA9IFsuLi5leGlzdGluZ0V4ZGF0ZXMsIHRhcmdldEV2ZW50U3RhcnRJU09dXG5cblx0XHRcdGNvbnN0IHVwZGF0ZWRCYXNlRXZlbnQgPSB7XG5cdFx0XHRcdC4uLmJhc2VFdmVudCxcblx0XHRcdFx0ZXhkYXRlczogdXBkYXRlZEV4ZGF0ZXMsXG5cdFx0XHR9XG5cdFx0XHR1cGRhdGVkRXZlbnRzW2Jhc2VFdmVudEluZGV4XSA9IHVwZGF0ZWRCYXNlRXZlbnRcblxuXHRcdFx0Ly8gQ3JlYXRlIHN0YW5kYWxvbmUgbW9kaWZpZWQgZXZlbnQgd2l0aCByZWN1cnJlbmNlSWRcblx0XHRcdGNvbnN0IG1vZGlmaWVkRXZlbnRJZCA9IGAke3RhcmdldEV2ZW50LmlkfV9tb2RpZmllZF8ke0RhdGUubm93KCl9YFxuXHRcdFx0Y29uc3QgbW9kaWZpZWRFdmVudDogQ2FsZW5kYXJFdmVudCA9IHtcblx0XHRcdFx0Ly8gQHRzLWV4cGVjdC1lcnJvciBUT0RPOiBmaXggdGhlIHR5cGVzXG5cdFx0XHRcdC4uLm9taXRLZXlzKHRhcmdldEV2ZW50LCBbJ3dpZHRoJywgJ2hlaWdodCcsICd0b3AnLCAnbGVmdCcsICdyaWdodCddKSxcblx0XHRcdFx0Li4udXBkYXRlcyxcblx0XHRcdFx0aWQ6IG1vZGlmaWVkRXZlbnRJZCxcblx0XHRcdFx0cmVjdXJyZW5jZUlkOiB0YXJnZXRFdmVudFN0YXJ0SVNPLCAvLyBUaGlzIG1hcmtzIGl0IGFzIGEgbW9kaWZpZWQgaW5zdGFuY2Vcblx0XHRcdFx0dWlkOiBnZXRFdmVudFBhcmVudFVJRChiYXNlRXZlbnQpLCAvLyBLZWVwIHNhbWUgVUlEIGFzIGJhc2UgZXZlbnQgKGlDYWxlbmRhciBzdGFuZGFyZClcblx0XHRcdFx0cnJ1bGU6IHVuZGVmaW5lZCwgLy8gU3RhbmRhbG9uZSBldmVudHMgZG9uJ3QgaGF2ZSBSUlVMRVxuXHRcdFx0fSBhcyBDYWxlbmRhckV2ZW50XG5cdFx0XHR1cGRhdGVkRXZlbnRzLnB1c2gobW9kaWZpZWRFdmVudClcblx0XHRcdGJyZWFrXG5cdFx0fVxuXG5cdFx0Y2FzZSAnZm9sbG93aW5nJzoge1xuXHRcdFx0Ly8gXCJUaGlzIGFuZCBmb2xsb3dpbmdcIiAtIFRlcm1pbmF0ZSBvcmlnaW5hbCBzZXJpZXMgYW5kIGNyZWF0ZSBuZXcgc2VyaWVzXG5cblx0XHRcdC8vIENhbGN1bGF0ZSB0aGUgdGVybWluYXRpb24gZGF0ZTogZGF5IGJlZm9yZSB0YXJnZXQgd2l0aCBlbmQgb2YgZGF5IHRpbWVcblx0XHRcdC8vIFRoaXMgZW5zdXJlcyB0aGUgbGFzdCBvY2N1cnJlbmNlIGJlZm9yZSB0YXJnZXQgaXMgaW5jbHVkZWQgaW4gdGhlIHRlcm1pbmF0ZWQgc2VyaWVzXG5cdFx0XHRjb25zdCBkYXlCZWZvcmVUYXJnZXQgPSB0YXJnZXRFdmVudC5zdGFydC5zdWJ0cmFjdCgxLCAnZGF5Jylcblx0XHRcdGNvbnN0IHRlcm1pbmF0aW9uRGF0ZSA9IGRheUJlZm9yZVRhcmdldC5lbmRPZignZGF5JykudG9EYXRlKClcblxuXHRcdFx0Ly8gVXBkYXRlIG9yaWdpbmFsIHNlcmllcyB3aXRoIFVOVElMIHRvIGVuZCBiZWZvcmUgdGFyZ2V0IGRhdGVcblx0XHRcdGNvbnN0IHRlcm1pbmF0ZWRFdmVudCA9IHtcblx0XHRcdFx0Li4uYmFzZUV2ZW50LFxuXHRcdFx0XHRycnVsZToge1xuXHRcdFx0XHRcdC4uLmJhc2VFdmVudC5ycnVsZSxcblx0XHRcdFx0XHR1bnRpbDogdGVybWluYXRpb25EYXRlLFxuXHRcdFx0XHR9IGFzIFJSdWxlT3B0aW9ucyxcblx0XHRcdH1cblx0XHRcdHVwZGF0ZWRFdmVudHNbYmFzZUV2ZW50SW5kZXhdID0gdGVybWluYXRlZEV2ZW50XG5cblx0XHRcdC8vIENyZWF0ZSBuZXcgc2VyaWVzIHN0YXJ0aW5nIGZyb20gdGFyZ2V0IGRhdGVcblx0XHRcdGNvbnN0IG9yaWdpbmFsRHVyYXRpb24gPSBiYXNlRXZlbnQuZW5kLmRpZmYoYmFzZUV2ZW50LnN0YXJ0KVxuXHRcdFx0Y29uc3QgbmV3U2VyaWVzU3RhcnRUaW1lID0gdXBkYXRlcy5zdGFydCB8fCB0YXJnZXRFdmVudC5zdGFydFxuXHRcdFx0Y29uc3QgbmV3U2VyaWVzRW5kVGltZSA9XG5cdFx0XHRcdHVwZGF0ZXMuZW5kIHx8IG5ld1Nlcmllc1N0YXJ0VGltZS5hZGQob3JpZ2luYWxEdXJhdGlvbilcblx0XHRcdGNvbnN0IG5ld1Nlcmllc0lkID0gYCR7YmFzZUV2ZW50LmlkfV9mb2xsb3dpbmdgXG5cdFx0XHRjb25zdCBuZXdTZXJpZXNVSUQgPSBgJHtuZXdTZXJpZXNJZH1AaWxhbXkuY2FsZW5kYXJgXG5cblx0XHRcdGNvbnN0IG5ld1Nlcmllc0V2ZW50OiBDYWxlbmRhckV2ZW50ID0ge1xuXHRcdFx0XHQuLi5iYXNlRXZlbnQsXG5cdFx0XHRcdC4uLnVwZGF0ZXMsXG5cdFx0XHRcdHJydWxlOiB7XG5cdFx0XHRcdFx0Li4uYmFzZUV2ZW50LnJydWxlLFxuXHRcdFx0XHRcdC4uLnVwZGF0ZXMucnJ1bGUsXG5cdFx0XHRcdFx0ZHRzdGFydDogbmV3U2VyaWVzU3RhcnRUaW1lLnRvRGF0ZSgpLFxuXHRcdFx0XHR9IGFzIFJSdWxlT3B0aW9ucyxcblx0XHRcdFx0aWQ6IG5ld1Nlcmllc0lkLFxuXHRcdFx0XHR1aWQ6IG5ld1Nlcmllc1VJRCwgLy8gTmV3IFVJRCBmb3IgbmV3IHNlcmllc1xuXHRcdFx0XHRzdGFydDogbmV3U2VyaWVzU3RhcnRUaW1lLFxuXHRcdFx0XHRlbmQ6IG5ld1Nlcmllc0VuZFRpbWUsXG5cdFx0XHRcdHJlY3VycmVuY2VJZDogdW5kZWZpbmVkLCAvLyBUaGlzIGlzIGEgbmV3IGJhc2UgZXZlbnQsIG5vdCBhbiBpbnN0YW5jZVxuXHRcdFx0fVxuXHRcdFx0dXBkYXRlZEV2ZW50cy5wdXNoKG5ld1Nlcmllc0V2ZW50KVxuXHRcdFx0YnJlYWtcblx0XHR9XG5cblx0XHRjYXNlICdhbGwnOiB7XG5cdFx0XHQvLyBcIkFsbCBldmVudHNcIiAtIFVwZGF0ZSB0aGUgYmFzZSByZWN1cnJpbmcgZXZlbnRcblx0XHRcdGNvbnN0IHVwZGF0ZWRCYXNlRXZlbnQgPSB7XG5cdFx0XHRcdC4uLmJhc2VFdmVudCxcblx0XHRcdFx0Li4udXBkYXRlcyxcblx0XHRcdH1cblx0XHRcdHVwZGF0ZWRFdmVudHNbYmFzZUV2ZW50SW5kZXhdID0gdXBkYXRlZEJhc2VFdmVudFxuXHRcdFx0YnJlYWtcblx0XHR9XG5cblx0XHRkZWZhdWx0OlxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0XHRgSW52YWxpZCBzY29wZTogJHtzY29wZX0uIE11c3QgYmUgJ3RoaXMnLCAnZm9sbG93aW5nJywgb3IgJ2FsbCdgXG5cdFx0XHQpXG5cdH1cblxuXHRyZXR1cm4gdXBkYXRlZEV2ZW50c1xufVxuXG5pbnRlcmZhY2UgRGVsZXRlUmVjdXJyaW5nRXZlbnRQcm9wcyB7XG5cdHRhcmdldEV2ZW50OiBDYWxlbmRhckV2ZW50XG5cdGN1cnJlbnRFdmVudHM6IENhbGVuZGFyRXZlbnRbXVxuXHRzY29wZTogJ3RoaXMnIHwgJ2ZvbGxvd2luZycgfCAnYWxsJ1xufVxuXG5leHBvcnQgY29uc3QgZGVsZXRlUmVjdXJyaW5nRXZlbnQgPSAoe1xuXHR0YXJnZXRFdmVudCxcblx0Y3VycmVudEV2ZW50cyxcblx0c2NvcGUsXG59OiBEZWxldGVSZWN1cnJpbmdFdmVudFByb3BzKTogQ2FsZW5kYXJFdmVudFtdID0+IHtcblx0Y29uc3QgdXBkYXRlZEV2ZW50cyA9IFsuLi5jdXJyZW50RXZlbnRzXVxuXG5cdC8vIEZpbmQgdGhlIGJhc2UgcmVjdXJyaW5nIGV2ZW50XG5cdGNvbnN0IHRhcmdldFVpZCA9IGdldEV2ZW50UGFyZW50VUlEKHRhcmdldEV2ZW50KVxuXHRjb25zdCBiYXNlRXZlbnRJbmRleCA9IHVwZGF0ZWRFdmVudHMuZmluZEluZGV4KChlKSA9PiB7XG5cdFx0cmV0dXJuIGdldEV2ZW50UGFyZW50VUlEKGUpID09PSB0YXJnZXRVaWQgJiYgZS5ycnVsZSAmJiAhZS5yZWN1cnJlbmNlSWRcblx0fSlcblxuXHRpZiAoYmFzZUV2ZW50SW5kZXggPT09IC0xKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdCYXNlIHJlY3VycmluZyBldmVudCBub3QgZm91bmQnKVxuXHR9XG5cblx0Y29uc3QgYmFzZUV2ZW50ID0gdXBkYXRlZEV2ZW50c1tiYXNlRXZlbnRJbmRleF1cblxuXHRzd2l0Y2ggKHNjb3BlKSB7XG5cdFx0Y2FzZSAndGhpcyc6IHtcblx0XHRcdC8vIFwiVGhpcyBldmVudCBvbmx5XCIgLSBBZGQgRVhEQVRFIHRvIGV4Y2x1ZGUgdGhpcyBvY2N1cnJlbmNlXG5cdFx0XHRjb25zdCB0YXJnZXRFdmVudFN0YXJ0SVNPID0gdGFyZ2V0RXZlbnQuc3RhcnQudG9JU09TdHJpbmcoKVxuXHRcdFx0Y29uc3QgZXhpc3RpbmdFeGRhdGVzID0gYmFzZUV2ZW50LmV4ZGF0ZXMgfHwgW11cblx0XHRcdGNvbnN0IHVwZGF0ZWRFeGRhdGVzID0gWy4uLmV4aXN0aW5nRXhkYXRlcywgdGFyZ2V0RXZlbnRTdGFydElTT11cblxuXHRcdFx0Y29uc3QgdXBkYXRlZEJhc2VFdmVudCA9IHsgLi4uYmFzZUV2ZW50LCBleGRhdGVzOiB1cGRhdGVkRXhkYXRlcyB9XG5cdFx0XHR1cGRhdGVkRXZlbnRzW2Jhc2VFdmVudEluZGV4XSA9IHVwZGF0ZWRCYXNlRXZlbnRcblx0XHRcdGJyZWFrXG5cdFx0fVxuXG5cdFx0Y2FzZSAnZm9sbG93aW5nJzoge1xuXHRcdFx0Ly8gXCJUaGlzIGFuZCBmb2xsb3dpbmdcIiAtIFRlcm1pbmF0ZSBzZXJpZXMgd2l0aCBVTlRJTCBiZWZvcmUgdGFyZ2V0IGRhdGVcblxuXHRcdFx0Ly8gQ2FsY3VsYXRlIHRoZSB0ZXJtaW5hdGlvbiBkYXRlOiBkYXkgYmVmb3JlIHRhcmdldCB3aXRoIGVuZCBvZiBkYXkgdGltZVxuXHRcdFx0Ly8gVGhpcyBlbnN1cmVzIHRoZSBsYXN0IG9jY3VycmVuY2UgYmVmb3JlIHRhcmdldCBpcyBpbmNsdWRlZCBpbiB0aGUgdGVybWluYXRlZCBzZXJpZXNcblx0XHRcdGNvbnN0IGRheUJlZm9yZVRhcmdldCA9IHRhcmdldEV2ZW50LnN0YXJ0LnN1YnRyYWN0KDEsICdkYXknKVxuXHRcdFx0Y29uc3QgdGVybWluYXRpb25EYXRlID0gZGF5QmVmb3JlVGFyZ2V0LmVuZE9mKCdkYXknKS50b0RhdGUoKVxuXG5cdFx0XHRjb25zdCB0ZXJtaW5hdGVkRXZlbnQgPSB7XG5cdFx0XHRcdC4uLmJhc2VFdmVudCxcblx0XHRcdFx0cnJ1bGU6IHtcblx0XHRcdFx0XHQuLi5iYXNlRXZlbnQucnJ1bGUsXG5cdFx0XHRcdFx0dW50aWw6IHRlcm1pbmF0aW9uRGF0ZSxcblx0XHRcdFx0fSBhcyBSUnVsZU9wdGlvbnMsXG5cdFx0XHR9XG5cdFx0XHR1cGRhdGVkRXZlbnRzW2Jhc2VFdmVudEluZGV4XSA9IHRlcm1pbmF0ZWRFdmVudFxuXHRcdFx0YnJlYWtcblx0XHR9XG5cblx0XHRjYXNlICdhbGwnOiB7XG5cdFx0XHQvLyBcIkFsbCBldmVudHNcIiAtIFJlbW92ZSB0aGUgZW50aXJlIHJlY3VycmluZyBzZXJpZXNcblx0XHRcdGNvbnN0IHRhcmdldFVpZCA9IGdldEV2ZW50UGFyZW50VUlEKHRhcmdldEV2ZW50KVxuXHRcdFx0Y29uc3QgZXZlbnRzV2l0aG91dFRhcmdldFNlcmllcyA9IHVwZGF0ZWRFdmVudHMuZmlsdGVyKFxuXHRcdFx0XHQoZSkgPT4gZ2V0RXZlbnRQYXJlbnRVSUQoZSkgIT09IHRhcmdldFVpZFxuXHRcdFx0KVxuXHRcdFx0cmV0dXJuIGV2ZW50c1dpdGhvdXRUYXJnZXRTZXJpZXNcblx0XHR9XG5cblx0XHRkZWZhdWx0OlxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0XHRgSW52YWxpZCBzY29wZTogJHtzY29wZX0uIE11c3QgYmUgJ3RoaXMnLCAnZm9sbG93aW5nJywgb3IgJ2FsbCdgXG5cdFx0XHQpXG5cdH1cblxuXHRyZXR1cm4gdXBkYXRlZEV2ZW50c1xufVxuIiwKICAgICJpbXBvcnQgdHlwZSB7IFRyYW5zbGF0aW9ucyB9IGZyb20gJy4vdHlwZXMnXG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0VHJhbnNsYXRpb25zOiBUcmFuc2xhdGlvbnMgPSB7XG5cdC8vIENvbW1vbiBhY3Rpb25zXG5cdHRvZGF5OiAnVG9kYXknLFxuXHRjcmVhdGU6ICdDcmVhdGUnLFxuXHRuZXc6ICdOZXcnLFxuXHR1cGRhdGU6ICdVcGRhdGUnLFxuXHRkZWxldGU6ICdEZWxldGUnLFxuXHRjYW5jZWw6ICdDYW5jZWwnLFxuXHRleHBvcnQ6ICdFeHBvcnQnLFxuXG5cdC8vIEV2ZW50IHJlbGF0ZWRcblx0ZXZlbnQ6ICdFdmVudCcsXG5cdGV2ZW50czogJ0V2ZW50cycsXG5cdG5ld0V2ZW50OiAnTmV3IEV2ZW50Jyxcblx0dGl0bGU6ICdUaXRsZScsXG5cdGRlc2NyaXB0aW9uOiAnRGVzY3JpcHRpb24nLFxuXHRsb2NhdGlvbjogJ0xvY2F0aW9uJyxcblx0YWxsRGF5OiAnQWxsIGRheScsXG5cdHN0YXJ0RGF0ZTogJ1N0YXJ0IERhdGUnLFxuXHRlbmREYXRlOiAnRW5kIERhdGUnLFxuXHRzdGFydFRpbWU6ICdTdGFydCBUaW1lJyxcblx0ZW5kVGltZTogJ0VuZCBUaW1lJyxcblx0Y29sb3I6ICdDb2xvcicsXG5cblx0Ly8gRXZlbnQgZm9ybVxuXHRjcmVhdGVFdmVudDogJ0NyZWF0ZSBFdmVudCcsXG5cdGVkaXRFdmVudDogJ0VkaXQgRXZlbnQnLFxuXHRhZGROZXdFdmVudDogJ0FkZCBhIG5ldyBldmVudCB0byB5b3VyIGNhbGVuZGFyJyxcblx0ZWRpdEV2ZW50RGV0YWlsczogJ0VkaXQgeW91ciBldmVudCBkZXRhaWxzJyxcblx0ZXZlbnRUaXRsZVBsYWNlaG9sZGVyOiAnRXZlbnQgdGl0bGUnLFxuXHRldmVudERlc2NyaXB0aW9uUGxhY2Vob2xkZXI6ICdFdmVudCBkZXNjcmlwdGlvbiAob3B0aW9uYWwpJyxcblx0ZXZlbnRMb2NhdGlvblBsYWNlaG9sZGVyOiAnRXZlbnQgbG9jYXRpb24gKG9wdGlvbmFsKScsXG5cblx0Ly8gUmVjdXJyZW5jZVxuXHRyZXBlYXQ6ICdSZXBlYXQnLFxuXHRyZXBlYXRzOiAnUmVwZWF0cycsXG5cdGN1c3RvbVJlY3VycmVuY2U6ICdDdXN0b20gcmVjdXJyZW5jZScsXG5cdGRhaWx5OiAnRGFpbHknLFxuXHR3ZWVrbHk6ICdXZWVrbHknLFxuXHRtb250aGx5OiAnTW9udGhseScsXG5cdHllYXJseTogJ1llYXJseScsXG5cdGludGVydmFsOiAnSW50ZXJ2YWwnLFxuXHRyZXBlYXRPbjogJ1JlcGVhdCBvbicsXG5cdG5ldmVyOiAnTmV2ZXInLFxuXHRjb3VudDogJ0NvdW50Jyxcblx0ZXZlcnk6ICdFdmVyeScsXG5cdGVuZHM6ICdFbmRzJyxcblx0YWZ0ZXI6ICdBZnRlcicsXG5cdG9jY3VycmVuY2VzOiAnb2NjdXJyZW5jZXMnLFxuXHRvbjogJ09uJyxcblxuXHQvLyBSZWN1cnJlbmNlIGVkaXQgZGlhbG9nXG5cdGVkaXRSZWN1cnJpbmdFdmVudDogJ0VkaXQgcmVjdXJyaW5nIGV2ZW50Jyxcblx0ZGVsZXRlUmVjdXJyaW5nRXZlbnQ6ICdEZWxldGUgcmVjdXJyaW5nIGV2ZW50Jyxcblx0ZWRpdFJlY3VycmluZ0V2ZW50UXVlc3Rpb246XG5cdFx0J2lzIGEgcmVjdXJyaW5nIGV2ZW50LiBIb3cgd291bGQgeW91IGxpa2UgdG8gZWRpdCBpdD8nLFxuXHRkZWxldGVSZWN1cnJpbmdFdmVudFF1ZXN0aW9uOlxuXHRcdCdpcyBhIHJlY3VycmluZyBldmVudC4gSG93IHdvdWxkIHlvdSBsaWtlIHRvIGRlbGV0ZSBpdD8nLFxuXHR0aGlzRXZlbnQ6ICdUaGlzIGV2ZW50Jyxcblx0dGhpc0V2ZW50RGVzY3JpcHRpb246ICdPbmx5IGNoYW5nZSB0aGlzIHNwZWNpZmljIG9jY3VycmVuY2UnLFxuXHR0aGlzQW5kRm9sbG93aW5nRXZlbnRzOiAnVGhpcyBhbmQgZm9sbG93aW5nIGV2ZW50cycsXG5cdHRoaXNBbmRGb2xsb3dpbmdFdmVudHNEZXNjcmlwdGlvbjogJ0VkaXQgdGhpcyBhbmQgYWxsIGZ1dHVyZSBvY2N1cnJlbmNlcycsXG5cdGFsbEV2ZW50czogJ0FsbCBldmVudHMnLFxuXHRhbGxFdmVudHNEZXNjcmlwdGlvbjogJ0VkaXQgdGhlIGVudGlyZSByZWN1cnJpbmcgc2VyaWVzJyxcblx0b25seUNoYW5nZVRoaXM6ICdPbmx5IGNoYW5nZSB0aGlzIHNwZWNpZmljIG9jY3VycmVuY2UnLFxuXHRjaGFuZ2VUaGlzQW5kRnV0dXJlOiAnQ2hhbmdlIHRoaXMgYW5kIGFsbCBmdXR1cmUgb2NjdXJyZW5jZXMnLFxuXHRjaGFuZ2VFbnRpcmVTZXJpZXM6ICdDaGFuZ2UgdGhlIGVudGlyZSByZWN1cnJpbmcgc2VyaWVzJyxcblx0b25seURlbGV0ZVRoaXM6ICdPbmx5IGRlbGV0ZSB0aGlzIHNwZWNpZmljIG9jY3VycmVuY2UnLFxuXHRkZWxldGVUaGlzQW5kRnV0dXJlOiAnRGVsZXRlIHRoaXMgYW5kIGFsbCBmdXR1cmUgb2NjdXJyZW5jZXMnLFxuXHRkZWxldGVFbnRpcmVTZXJpZXM6ICdEZWxldGUgdGhlIGVudGlyZSByZWN1cnJpbmcgc2VyaWVzJyxcblxuXHQvLyBWaWV3IHR5cGVzXG5cdG1vbnRoOiAnTW9udGgnLFxuXHR3ZWVrOiAnV2VlaycsXG5cdGRheTogJ0RheScsXG5cdHllYXI6ICdZZWFyJyxcblx0bW9yZTogJ21vcmUnLFxuXG5cdC8vIFJlc291cmNlIGNhbGVuZGFyXG5cdHJlc291cmNlczogJ1Jlc291cmNlcycsXG5cdHJlc291cmNlOiAnUmVzb3VyY2UnLFxuXHR0aW1lOiAnVGltZScsXG5cdGRhdGU6ICdEYXRlJyxcblx0bm9SZXNvdXJjZXNWaXNpYmxlOiAnTm8gcmVzb3VyY2VzIHZpc2libGUnLFxuXHRhZGRSZXNvdXJjZXNPclNob3dFeGlzdGluZzogJ0FkZCByZXNvdXJjZXMgb3Igc2hvdyBleGlzdGluZyBvbmVzJyxcblxuXHQvLyBEYXlzIG9mIHdlZWtcblx0c3VuZGF5OiAnU3VuZGF5Jyxcblx0bW9uZGF5OiAnTW9uZGF5Jyxcblx0dHVlc2RheTogJ1R1ZXNkYXknLFxuXHR3ZWRuZXNkYXk6ICdXZWRuZXNkYXknLFxuXHR0aHVyc2RheTogJ1RodXJzZGF5Jyxcblx0ZnJpZGF5OiAnRnJpZGF5Jyxcblx0c2F0dXJkYXk6ICdTYXR1cmRheScsXG5cblx0Ly8gRGF5cyBzaG9ydFxuXHRzdW46ICdTdW4nLFxuXHRtb246ICdNb24nLFxuXHR0dWU6ICdUdWUnLFxuXHR3ZWQ6ICdXZWQnLFxuXHR0aHU6ICdUaHUnLFxuXHRmcmk6ICdGcmknLFxuXHRzYXQ6ICdTYXQnLFxuXG5cdC8vIE1vbnRoc1xuXHRqYW51YXJ5OiAnSmFudWFyeScsXG5cdGZlYnJ1YXJ5OiAnRmVicnVhcnknLFxuXHRtYXJjaDogJ01hcmNoJyxcblx0YXByaWw6ICdBcHJpbCcsXG5cdG1heTogJ01heScsXG5cdGp1bmU6ICdKdW5lJyxcblx0anVseTogJ0p1bHknLFxuXHRhdWd1c3Q6ICdBdWd1c3QnLFxuXHRzZXB0ZW1iZXI6ICdTZXB0ZW1iZXInLFxuXHRvY3RvYmVyOiAnT2N0b2JlcicsXG5cdG5vdmVtYmVyOiAnTm92ZW1iZXInLFxuXHRkZWNlbWJlcjogJ0RlY2VtYmVyJyxcbn1cbiIsCiAgICAiaW1wb3J0IGRheWpzLCB7IHR5cGUgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSB3ZWVrIGRheXMgZm9yIGEgZ2l2ZW4gZGF0ZSBhbmQgZmlyc3QgZGF5IG9mIHdlZWsgc2V0dGluZy5cbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIGVuc3VyZXMgdGhhdCB0aGUgY3VycmVudCBkYXRlIGlzIGFsd2F5cyBpbmNsdWRlZCBpbiB0aGUgcmV0dXJuZWQgd2VlayxcbiAqIGV2ZW4gd2hlbiB0aGUgZmlyc3QgZGF5IG9mIHdlZWsgaXMgc2V0IHRvIGEgZGF5IGFmdGVyIHRoZSBjdXJyZW50IGRhdGUuXG4gKlxuICogQHBhcmFtIGN1cnJlbnREYXRlIC0gVGhlIHJlZmVyZW5jZSBkYXRlIGZvciBjYWxjdWxhdGluZyB0aGUgd2Vla1xuICogQHBhcmFtIGZpcnN0RGF5T2ZXZWVrIC0gVGhlIGRheSBudW1iZXIgKDAtNikgcmVwcmVzZW50aW5nIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsgKDAgPSBTdW5kYXksIDEgPSBNb25kYXksIGV0Yy4pXG4gKiBAcmV0dXJucyBBbiBhcnJheSBvZiA3IGRheWpzIG9iamVjdHMgcmVwcmVzZW50aW5nIHRoZSB3ZWVrIGRheXMsIHN0YXJ0aW5nIGZyb20gZmlyc3REYXlPZldlZWtcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gR2V0IHdlZWsgc3RhcnRpbmcgZnJvbSBNb25kYXkgZm9yIGN1cnJlbnQgZGF0ZVxuICogY29uc3Qgd2Vla0RheXMgPSBnZXRXZWVrRGF5cyhkYXlqcygnMjAyNS0xMC0xMycpLCAxKVxuICogLy8gUmV0dXJuczogW01vbiBPY3QgMTMsIFR1ZSBPY3QgMTQsIC4uLiwgU3VuIE9jdCAxOV1cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gR2V0IHdlZWsgc3RhcnRpbmcgZnJvbSBXZWRuZXNkYXkgd2hlbiBjdXJyZW50IGRhdGUgaXMgTW9uZGF5XG4gKiBjb25zdCB3ZWVrRGF5cyA9IGdldFdlZWtEYXlzKGRheWpzKCcyMDI1LTEwLTEzJyksIDMpXG4gKiAvLyBSZXR1cm5zOiBbV2VkIE9jdCA4LCBUaHUgT2N0IDksIC4uLiwgVHVlIE9jdCAxNF0gKGluY2x1ZGVzIE1vbmRheSBPY3QgMTMpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRXZWVrRGF5cyhcblx0Y3VycmVudERhdGU6IERheWpzLFxuXHRmaXJzdERheU9mV2VlazogbnVtYmVyXG4pOiBEYXlqc1tdIHtcblx0Y29uc3Qgc3RhcnRPZldlZWtGcm9tQ3VycmVudERhdGUgPSBjdXJyZW50RGF0ZVxuXHRcdC5zdGFydE9mKCd3ZWVrJylcblx0XHQuZGF5KGZpcnN0RGF5T2ZXZWVrKVxuXG5cdGNvbnN0IGFkanVzdGVkU3RhcnRPZldlZWsgPSBjdXJyZW50RGF0ZS5pc0JlZm9yZShzdGFydE9mV2Vla0Zyb21DdXJyZW50RGF0ZSlcblx0XHQ/IHN0YXJ0T2ZXZWVrRnJvbUN1cnJlbnREYXRlLnN1YnRyYWN0KDEsICd3ZWVrJylcblx0XHQ6IHN0YXJ0T2ZXZWVrRnJvbUN1cnJlbnREYXRlXG5cblx0cmV0dXJuIEFycmF5LmZyb20oeyBsZW5ndGg6IDcgfSwgKF8sIGRheUluZGV4KSA9PlxuXHRcdGFkanVzdGVkU3RhcnRPZldlZWsuYWRkKGRheUluZGV4LCAnZGF5Jylcblx0KVxufVxuXG4vKipcbiAqIEdlbmVyYXRlcyA2IHdlZWtzIG9mIGRheXMgZm9yIGEgbW9udGggY2FsZW5kYXIgdmlldy5cbiAqIEFsd2F5cyByZXR1cm5zIDQyIGRheXMgKDYgd2Vla3Mgw5cgNyBkYXlzKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE1vbnRoV2Vla3MoXG5cdG1vbnRoRGF0ZTogRGF5anMsXG5cdGZpcnN0RGF5T2ZXZWVrOiBudW1iZXJcbik6IERheWpzW11bXSB7XG5cdGNvbnN0IGZpcnN0V2VlayA9IGdldFdlZWtEYXlzKG1vbnRoRGF0ZS5zdGFydE9mKCdtb250aCcpLCBmaXJzdERheU9mV2VlaylcblxuXHRyZXR1cm4gQXJyYXkuZnJvbSh7IGxlbmd0aDogNiB9LCAoXywgd2Vla0luZGV4KSA9PiB7XG5cdFx0Y29uc3Qgd2Vla1N0YXJ0ID0gZmlyc3RXZWVrWzBdLmFkZCh3ZWVrSW5kZXgsICd3ZWVrJylcblx0XHRyZXR1cm4gZ2V0V2Vla0RheXMod2Vla1N0YXJ0LCBmaXJzdERheU9mV2Vlaylcblx0fSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE1vbnRoRGF5cyhtb250aERhdGU6IERheWpzKTogRGF5anNbXSB7XG5cdGNvbnN0IGRheXNJbk1vbnRoID0gbW9udGhEYXRlLmRheXNJbk1vbnRoKClcblx0Y29uc3Qgc3RhcnRPZk1vbnRoID0gbW9udGhEYXRlLnN0YXJ0T2YoJ21vbnRoJylcblx0cmV0dXJuIEFycmF5LmZyb20oeyBsZW5ndGg6IGRheXNJbk1vbnRoIH0sIChfLCBpKSA9PlxuXHRcdHN0YXJ0T2ZNb250aC5hZGQoaSwgJ2RheScpXG5cdClcbn1cblxuaW50ZXJmYWNlIEdldERheUhvdXJzT3B0aW9ucyB7XG5cdHJlZmVyZW5jZURhdGU/OiBEYXlqc1xuXHRsZW5ndGg/OiBudW1iZXJcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgYW4gYXJyYXkgb2YgMjQgZGF5anMgb2JqZWN0cyByZXByZXNlbnRpbmcgaG91cmx5IHNsb3RzIGZvciBhIGRheS5cbiAqIFVzZXMgLmhvdXIoaSkgc28gZWFjaCByb3cgbWFwcyB0byBcInRoZSBob3VyIGxhYmVsZWQgaVwiIOKAlCBrZWVwaW5nIGdyaWQgcm93c1xuICogYWxpZ25lZCBhY3Jvc3MgY29sdW1ucyBpbiB3ZWVrIHZpZXdzLiBPbiBEU1Qgc3ByaW5nLWZvcndhcmQsIC5ob3VyKDIpIHJldHVybnNcbiAqIDMgQU0gKHRoZSBub24tZXhpc3RlbnQgaG91ciBpcyBjb2xsYXBzZWQpLCBidXQgdGhlIGdyaWQga2V5IGZpeCAoZGF5SW5kZXgpXG4gKiBhbmQgcGVyLWRheSBnZW5lcmF0aW9uIGluIHZpZXdzIGhhbmRsZSB0aGlzIGNvcnJlY3RseS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERheUhvdXJzKHtcblx0cmVmZXJlbmNlRGF0ZSA9IGRheWpzKCksXG5cdGxlbmd0aCA9IDI0LFxufTogR2V0RGF5SG91cnNPcHRpb25zID0ge30pOiBEYXlqc1tdIHtcblx0Y29uc3Qgc3RhcnRPZkRheSA9IHJlZmVyZW5jZURhdGUuc3RhcnRPZignZGF5Jylcblx0cmV0dXJuIEFycmF5LmZyb20oeyBsZW5ndGggfSwgKF8sIGkpID0+XG5cdFx0c3RhcnRPZkRheS5ob3VyKGkpLm1pbnV0ZSgwKS5zZWNvbmQoMCkubWlsbGlzZWNvbmQoMClcblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSB7IFdlZWtEYXlzIH0gZnJvbSAnQC9jb21wb25lbnRzJ1xuXG5leHBvcnQgY29uc3QgR0FQX0JFVFdFRU5fRUxFTUVOVFMgPSAxIC8vIHB4IChnYXAtMSlcbmV4cG9ydCBjb25zdCBEQVlfTlVNQkVSX0hFSUdIVCA9IDI0IC8vIHB4IChoLTYpXG5leHBvcnQgY29uc3QgRVZFTlRfQkFSX0hFSUdIVCA9IDI0IC8vIHB4IChoLVsyNHB4XSlcbmV4cG9ydCBjb25zdCBEQVlfTUFYX0VWRU5UU19ERUZBVUxUID0gNCAvLyBEZWZhdWx0IG1heCBldmVudHMgcGVyIGRheVxuZXhwb3J0IGNvbnN0IERJU0FCTEVEX0NFTExfQ0xBU1NOQU1FID1cblx0J2JnLXNlY29uZGFyeSB0ZXh0LW11dGVkLWZvcmVncm91bmQgcG9pbnRlci1ldmVudHMtbm9uZSdcblxuZXhwb3J0IGNvbnN0IFdFRUtfREFZU19OVU1CRVJfTUFQOiBSZWNvcmQ8V2Vla0RheXMsIG51bWJlcj4gPSB7XG5cdHN1bmRheTogMCxcblx0bW9uZGF5OiAxLFxuXHR0dWVzZGF5OiAyLFxuXHR3ZWRuZXNkYXk6IDMsXG5cdHRodXJzZGF5OiA0LFxuXHRmcmlkYXk6IDUsXG5cdHNhdHVyZGF5OiA2LFxufVxuXG5leHBvcnQgY29uc3QgREFZX05VTUJFUl9UT19XRUVLX0RBWVM6IFJlY29yZDxudW1iZXIsIFdlZWtEYXlzPiA9IHtcblx0MDogJ3N1bmRheScsXG5cdDE6ICdtb25kYXknLFxuXHQyOiAndHVlc2RheScsXG5cdDM6ICd3ZWRuZXNkYXknLFxuXHQ0OiAndGh1cnNkYXknLFxuXHQ1OiAnZnJpZGF5Jyxcblx0NjogJ3NhdHVyZGF5Jyxcbn1cbiIsCiAgICAiaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2J1dHRvbidcbmltcG9ydCB7XG5cdERpYWxvZyxcblx0RGlhbG9nQ29udGVudCxcblx0RGlhbG9nRGVzY3JpcHRpb24sXG5cdERpYWxvZ0Zvb3Rlcixcblx0RGlhbG9nSGVhZGVyLFxuXHREaWFsb2dUaXRsZSxcbn0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2RpYWxvZydcbmltcG9ydCB0eXBlIHsgUmVjdXJyZW5jZUVkaXRTY29wZSB9IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS90eXBlcydcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcblxuaW50ZXJmYWNlIFJlY3VycmVuY2VFZGl0RGlhbG9nUHJvcHMge1xuXHRpc09wZW46IGJvb2xlYW5cblx0b25DbG9zZTogKCkgPT4gdm9pZFxuXHRvbkNvbmZpcm06IChzY29wZTogUmVjdXJyZW5jZUVkaXRTY29wZSkgPT4gdm9pZFxuXHRvcGVyYXRpb25UeXBlOiAnZWRpdCcgfCAnZGVsZXRlJ1xuXHRldmVudFRpdGxlOiBzdHJpbmdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFJlY3VycmVuY2VFZGl0RGlhbG9nKHtcblx0aXNPcGVuLFxuXHRvbkNsb3NlLFxuXHRvbkNvbmZpcm0sXG5cdG9wZXJhdGlvblR5cGUsXG5cdGV2ZW50VGl0bGUsXG59OiBSZWN1cnJlbmNlRWRpdERpYWxvZ1Byb3BzKSB7XG5cdGNvbnN0IHsgdCB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKGNvbnRleHQpID0+ICh7IHQ6IGNvbnRleHQudCB9KSlcblxuXHRjb25zdCBoYW5kbGVTY29wZVNlbGVjdCA9IChzY29wZTogUmVjdXJyZW5jZUVkaXRTY29wZSkgPT4ge1xuXHRcdG9uQ29uZmlybShzY29wZSlcblx0XHRvbkNsb3NlKClcblx0fVxuXG5cdGNvbnN0IGlzRWRpdCA9IG9wZXJhdGlvblR5cGUgPT09ICdlZGl0J1xuXG5cdHJldHVybiAoXG5cdFx0PERpYWxvZyBvbk9wZW5DaGFuZ2U9e29uQ2xvc2V9IG9wZW49e2lzT3Blbn0+XG5cdFx0XHQ8RGlhbG9nQ29udGVudCBjbGFzc05hbWU9XCJtYXgtdy1tZFwiPlxuXHRcdFx0XHQ8RGlhbG9nSGVhZGVyPlxuXHRcdFx0XHRcdDxEaWFsb2dUaXRsZT5cblx0XHRcdFx0XHRcdHtpc0VkaXQgPyB0KCdlZGl0UmVjdXJyaW5nRXZlbnQnKSA6IHQoJ2RlbGV0ZVJlY3VycmluZ0V2ZW50Jyl9XG5cdFx0XHRcdFx0PC9EaWFsb2dUaXRsZT5cblx0XHRcdFx0XHQ8RGlhbG9nRGVzY3JpcHRpb24+XG5cdFx0XHRcdFx0XHRcIntldmVudFRpdGxlfVwieycgJ31cblx0XHRcdFx0XHRcdHtpc0VkaXRcblx0XHRcdFx0XHRcdFx0PyB0KCdlZGl0UmVjdXJyaW5nRXZlbnRRdWVzdGlvbicpXG5cdFx0XHRcdFx0XHRcdDogdCgnZGVsZXRlUmVjdXJyaW5nRXZlbnRRdWVzdGlvbicpfVxuXHRcdFx0XHRcdDwvRGlhbG9nRGVzY3JpcHRpb24+XG5cdFx0XHRcdDwvRGlhbG9nSGVhZGVyPlxuXG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwic3BhY2UteS0zXCI+XG5cdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwidy1mdWxsIGp1c3RpZnktc3RhcnQgaC1hdXRvIHAtNFwiXG5cdFx0XHRcdFx0XHRvbkNsaWNrPXsoKSA9PiBoYW5kbGVTY29wZVNlbGVjdCgndGhpcycpfVxuXHRcdFx0XHRcdFx0dmFyaWFudD1cIm91dGxpbmVcIlxuXHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidGV4dC1sZWZ0XCI+XG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZm9udC1tZWRpdW1cIj57dCgndGhpc0V2ZW50Jyl9PC9kaXY+XG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LW11dGVkLWZvcmVncm91bmRcIj5cblx0XHRcdFx0XHRcdFx0XHR7aXNFZGl0ID8gdCgnb25seUNoYW5nZVRoaXMnKSA6IHQoJ29ubHlEZWxldGVUaGlzJyl9XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0PC9CdXR0b24+XG5cblx0XHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJ3LWZ1bGwganVzdGlmeS1zdGFydCBoLWF1dG8gcC00XCJcblx0XHRcdFx0XHRcdG9uQ2xpY2s9eygpID0+IGhhbmRsZVNjb3BlU2VsZWN0KCdmb2xsb3dpbmcnKX1cblx0XHRcdFx0XHRcdHZhcmlhbnQ9XCJvdXRsaW5lXCJcblx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQtbGVmdFwiPlxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZvbnQtbWVkaXVtXCI+e3QoJ3RoaXNBbmRGb2xsb3dpbmdFdmVudHMnKX08L2Rpdj5cblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtbXV0ZWQtZm9yZWdyb3VuZFwiPlxuXHRcdFx0XHRcdFx0XHRcdHtpc0VkaXQgPyB0KCdjaGFuZ2VUaGlzQW5kRnV0dXJlJykgOiB0KCdkZWxldGVUaGlzQW5kRnV0dXJlJyl9XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0PC9CdXR0b24+XG5cblx0XHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJ3LWZ1bGwganVzdGlmeS1zdGFydCBoLWF1dG8gcC00XCJcblx0XHRcdFx0XHRcdG9uQ2xpY2s9eygpID0+IGhhbmRsZVNjb3BlU2VsZWN0KCdhbGwnKX1cblx0XHRcdFx0XHRcdHZhcmlhbnQ9XCJvdXRsaW5lXCJcblx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQtbGVmdFwiPlxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZvbnQtbWVkaXVtXCI+e3QoJ2FsbEV2ZW50cycpfTwvZGl2PlxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCI+XG5cdFx0XHRcdFx0XHRcdFx0e2lzRWRpdCA/IHQoJ2NoYW5nZUVudGlyZVNlcmllcycpIDogdCgnZGVsZXRlRW50aXJlU2VyaWVzJyl9XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdDxEaWFsb2dGb290ZXI+XG5cdFx0XHRcdFx0PEJ1dHRvbiBvbkNsaWNrPXtvbkNsb3NlfSB2YXJpYW50PVwib3V0bGluZVwiPlxuXHRcdFx0XHRcdFx0e3QoJ2NhbmNlbCcpfVxuXHRcdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0XHQ8L0RpYWxvZ0Zvb3Rlcj5cblx0XHRcdDwvRGlhbG9nQ29udGVudD5cblx0XHQ8L0RpYWxvZz5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSB7IERyYWdFbmRFdmVudCB9IGZyb20gJ0BkbmQta2l0L2NvcmUnXG5pbXBvcnQgZGF5anMsIHsgdHlwZSBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnLi4vdHlwZXMnXG5cbmludGVyZmFjZSBEcm9wQ2VsbERhdGEge1xuXHR0eXBlPzogc3RyaW5nXG5cdGRhdGU/OiBzdHJpbmdcblx0aG91cj86IG51bWJlclxuXHRtaW51dGU/OiBudW1iZXJcblx0cmVzb3VyY2VJZD86IHN0cmluZ1xuXHRhbGxEYXk/OiBib29sZWFuXG59XG5cbmV4cG9ydCBjb25zdCBnZXRVcGRhdGVkRXZlbnQgPSAoXG5cdGV2ZW50OiBEcmFnRW5kRXZlbnQsXG5cdGFjdGl2ZUV2ZW50OiBDYWxlbmRhckV2ZW50IHwgbnVsbFxuKSA9PiB7XG5cdGNvbnN0IHsgYWN0aXZlLCBvdmVyIH0gPSBldmVudFxuXG5cdGlmICghYWN0aXZlIHx8ICFvdmVyIHx8ICFhY3RpdmVFdmVudCkge1xuXHRcdHJldHVybiBudWxsXG5cdH1cblxuXHRjb25zdCBkYXRhID0gKG92ZXIuZGF0YS5jdXJyZW50IHx8IHt9KSBhcyBEcm9wQ2VsbERhdGFcblx0Y29uc3QgaXNUaW1lQ2VsbCA9IGRhdGEudHlwZSA9PT0gJ3RpbWUtY2VsbCdcblx0Y29uc3QgeyByZXNvdXJjZUlkLCBhbGxEYXkgfSA9IGRhdGFcblx0bGV0IG5ld1N0YXJ0OiBEYXlqc1xuXG5cdGlmIChpc1RpbWVDZWxsKSB7XG5cdFx0Y29uc3QgeyBkYXRlLCBob3VyID0gMCwgbWludXRlID0gMCB9ID0gZGF0YVxuXG5cdFx0Ly8gQ3JlYXRlIG5ldyBzdGFydCB0aW1lIGJhc2VkIG9uIHRoZSBkcm9wIHRhcmdldFxuXHRcdG5ld1N0YXJ0ID0gZGF5anMoZGF0ZSkuaG91cihob3VyKS5taW51dGUobWludXRlKVxuXHR9IGVsc2Uge1xuXHRcdGNvbnN0IHsgZGF0ZSB9ID0gZGF0YVxuXG5cdFx0bmV3U3RhcnQgPSBkYXlqcyhkYXRlKVxuXHR9XG5cblx0Y29uc3QgZXZlbnREdXJhdGlvbiA9IGFjdGl2ZUV2ZW50LmVuZC5kaWZmKGFjdGl2ZUV2ZW50LnN0YXJ0LCAnc2Vjb25kJylcblxuXHQvLyBDcmVhdGUgbmV3IGVuZCB0aW1lIGJ5IGFkZGluZyB0aGUgb3JpZ2luYWwgZHVyYXRpb25cblx0bGV0IG5ld0VuZCA9IG5ld1N0YXJ0LmFkZChldmVudER1cmF0aW9uLCAnc2Vjb25kJylcblxuXHRpZiAobmV3RW5kLmlzU2FtZShuZXdFbmQuc3RhcnRPZignZGF5JykpKSB7XG5cdFx0Ly8gSWYgdGhlIG5ldyBlbmQgdGltZSBpcyBhdCBtaWRuaWdodCwgc2V0IGl0IHRvIDI0IGhvdXJzIG9mIHBhcnRpYWwgZGF5XG5cdFx0bmV3RW5kID0gbmV3RW5kLnN1YnRyYWN0KDEsICdkYXknKS5lbmRPZignZGF5Jylcblx0fVxuXG5cdC8vIFVwZGF0ZSB0aGUgZXZlbnQgd2l0aCBuZXcgdGltZXMgYW5kIHJlc291cmNlIGlmIGNoYW5nZWRcblx0Y29uc3QgdXBkYXRlcyA9IHtcblx0XHRzdGFydDogbmV3U3RhcnQsXG5cdFx0ZW5kOiBuZXdFbmQsXG5cdFx0cmVzb3VyY2VJZCxcblx0XHRhbGxEYXk6IGlzVGltZUNlbGwgPyBmYWxzZSA6IChhbGxEYXkgPz8gYWN0aXZlRXZlbnQuYWxsRGF5KSxcblx0fVxuXHRyZXR1cm4geyBhY3RpdmVFdmVudCwgdXBkYXRlcyB9XG59XG4iLAogICAgImltcG9ydCB7IERyYWdPdmVybGF5IH0gZnJvbSAnQGRuZC1raXQvY29yZSdcbmltcG9ydCB7IHNuYXBDZW50ZXJUb0N1cnNvciB9IGZyb20gJ0BkbmQta2l0L21vZGlmaWVycydcbmltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlSW1wZXJhdGl2ZUhhbmRsZSwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICcuLi90eXBlcydcblxuaW50ZXJmYWNlIEV2ZW50RHJhZ092ZXJsYXlQcm9wcyB7XG5cdHJlZjogUmVhY3QuUmVmPHsgc2V0QWN0aXZlRXZlbnQ6IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZCB9PlxufVxuXG5leHBvcnQgY29uc3QgRXZlbnREcmFnT3ZlcmxheTogUmVhY3QuRkM8RXZlbnREcmFnT3ZlcmxheVByb3BzPiA9ICh7IHJlZiB9KSA9PiB7XG5cdGNvbnN0IFthY3RpdmVFdmVudCwgc2V0QWN0aXZlRXZlbnRdID0gdXNlU3RhdGU8Q2FsZW5kYXJFdmVudCB8IG51bGw+KG51bGwpXG5cblx0dXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsICgpID0+ICh7XG5cdFx0c2V0QWN0aXZlRXZlbnQsXG5cdH0pKVxuXG5cdHJldHVybiAoXG5cdFx0PERyYWdPdmVybGF5IG1vZGlmaWVycz17W3NuYXBDZW50ZXJUb0N1cnNvcl19PlxuXHRcdFx0e2FjdGl2ZUV2ZW50ICYmIChcblx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHQnY3Vyc29yLWdyYWIgdHJ1bmNhdGUgcm91bmRlZCBiZy1hbWJlci0yMDAgcC0yIHRleHQtWzEwcHhdIHNoYWRvdy1sZyBzbTp0ZXh0LXhzIHctMjAnLFxuXHRcdFx0XHRcdFx0YWN0aXZlRXZlbnQuYmFja2dyb3VuZENvbG9yIHx8ICdiZy1ibHVlLTUwMCcsXG5cdFx0XHRcdFx0XHRhY3RpdmVFdmVudC5jb2xvciB8fCAndGV4dC13aGl0ZSdcblx0XHRcdFx0XHQpfVxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0e2FjdGl2ZUV2ZW50Py50aXRsZX1cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQpfVxuXHRcdDwvRHJhZ092ZXJsYXk+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvYnV0dG9uJ1xuaW1wb3J0IHsgQ2hlY2tib3ggfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvY2hlY2tib3gnXG5pbXBvcnQgeyBEYXRlUGlja2VyIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2RhdGUtcGlja2VyJ1xuaW1wb3J0IHsgRGlhbG9nRm9vdGVyIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2RpYWxvZydcbmltcG9ydCB7IElucHV0IH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2lucHV0J1xuaW1wb3J0IHsgTGFiZWwgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvbGFiZWwnXG5pbXBvcnQgeyBTY3JvbGxBcmVhIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL3Njcm9sbC1hcmVhJ1xuaW1wb3J0IHsgVGltZVBpY2tlciB9IGZyb20gJ0AvY29tcG9uZW50cy91aS90aW1lLXBpY2tlcidcbmltcG9ydCB7IGlzQnVzaW5lc3NEYXkgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL3V0aWxzL2J1c2luZXNzLWhvdXJzJ1xuaW1wb3J0IHtcblx0YnVpbGREYXRlVGltZSxcblx0YnVpbGRFbmREYXRlVGltZSxcblx0Z2V0VGltZUNvbnN0cmFpbnRzLFxufSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL3V0aWxzL2V2ZW50LWZvcm0tdXRpbHMnXG5pbXBvcnQgeyBSZWN1cnJlbmNlRWRpdERpYWxvZyB9IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS9jb21wb25lbnRzL3JlY3VycmVuY2UtZWRpdC1kaWFsb2cnXG5pbXBvcnQgeyBSZWN1cnJlbmNlRWRpdG9yIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL2NvbXBvbmVudHMvcmVjdXJyZW5jZS1lZGl0b3IvcmVjdXJyZW5jZS1lZGl0b3InXG5pbXBvcnQgeyB1c2VSZWN1cnJpbmdFdmVudEFjdGlvbnMgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvaG9va3MvdXNlUmVjdXJyaW5nRXZlbnRBY3Rpb25zJ1xuaW1wb3J0IHR5cGUgeyBSUnVsZU9wdGlvbnMgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvdHlwZXMnXG5pbXBvcnQgeyBpc1JlY3VycmluZ0V2ZW50IH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL3V0aWxzL3JlY3VycmVuY2UtaGFuZGxlcidcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmNvbnN0IENPTE9SX09QVElPTlMgPSBbXG5cdHtcblx0XHR2YWx1ZTogYGJnLWJsdWUtMTAwIHRleHQtYmx1ZS04MDBgLFxuXHRcdGxhYmVsOiAnQmx1ZScsXG5cdH0sXG5cdHtcblx0XHR2YWx1ZTogYGJnLWdyZWVuLTEwMCB0ZXh0LWdyZWVuLTgwMGAsXG5cdFx0bGFiZWw6ICdHcmVlbicsXG5cdH0sXG5cdHtcblx0XHR2YWx1ZTogYGJnLXB1cnBsZS0xMDAgdGV4dC1wdXJwbGUtODAwYCxcblx0XHRsYWJlbDogJ1B1cnBsZScsXG5cdH0sXG5cdHtcblx0XHR2YWx1ZTogYGJnLXJlZC0xMDAgdGV4dC1yZWQtODAwYCxcblx0XHRsYWJlbDogJ1JlZCcsXG5cdH0sXG5cdHtcblx0XHR2YWx1ZTogYGJnLXllbGxvdy0xMDAgdGV4dC15ZWxsb3ctODAwYCxcblx0XHRsYWJlbDogJ1llbGxvdycsXG5cdH0sXG5cdHtcblx0XHR2YWx1ZTogYGJnLXBpbmstMTAwIHRleHQtcGluay04MDBgLFxuXHRcdGxhYmVsOiAnUGluaycsXG5cdH0sXG5cdHtcblx0XHR2YWx1ZTogYGJnLWluZGlnby0xMDAgdGV4dC1pbmRpZ28tODAwYCxcblx0XHRsYWJlbDogJ0luZGlnbycsXG5cdH0sXG5cdHtcblx0XHR2YWx1ZTogYGJnLWFtYmVyLTEwMCB0ZXh0LWFtYmVyLTgwMGAsXG5cdFx0bGFiZWw6ICdBbWJlcicsXG5cdH0sXG5cdHtcblx0XHR2YWx1ZTogYGJnLWVtZXJhbGQtMTAwIHRleHQtZW1lcmFsZC04MDBgLFxuXHRcdGxhYmVsOiAnRW1lcmFsZCcsXG5cdH0sXG5cdHtcblx0XHR2YWx1ZTogYGJnLXNreS0xMDAgdGV4dC1za3ktODAwYCxcblx0XHRsYWJlbDogJ1NreScsXG5cdH0sXG5cdHtcblx0XHR2YWx1ZTogYGJnLXZpb2xldC0xMDAgdGV4dC12aW9sZXQtODAwYCxcblx0XHRsYWJlbDogJ1Zpb2xldCcsXG5cdH0sXG5cdHtcblx0XHR2YWx1ZTogYGJnLXJvc2UtMTAwIHRleHQtcm9zZS04MDBgLFxuXHRcdGxhYmVsOiAnUm9zZScsXG5cdH0sXG5cdHtcblx0XHR2YWx1ZTogYGJnLXRlYWwtMTAwIHRleHQtdGVhbC04MDBgLFxuXHRcdGxhYmVsOiAnVGVhbCcsXG5cdH0sXG5cdHtcblx0XHR2YWx1ZTogYGJnLW9yYW5nZS0xMDAgdGV4dC1vcmFuZ2UtODAwYCxcblx0XHRsYWJlbDogJ09yYW5nZScsXG5cdH0sXG5dXG5cbmV4cG9ydCBpbnRlcmZhY2UgRXZlbnRGb3JtUHJvcHMge1xuXHRvcGVuPzogYm9vbGVhblxuXHRzZWxlY3RlZEV2ZW50PzogQ2FsZW5kYXJFdmVudCB8IG51bGxcblx0b25BZGQ/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0b25VcGRhdGU/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0b25EZWxldGU/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0b25DbG9zZTogKCkgPT4gdm9pZFxufVxuXG5leHBvcnQgY29uc3QgRXZlbnRGb3JtOiBSZWFjdC5GQzxFdmVudEZvcm1Qcm9wcz4gPSAoe1xuXHRzZWxlY3RlZEV2ZW50LFxuXHRvbkNsb3NlLFxuXHRvblVwZGF0ZSxcblx0b25EZWxldGUsXG5cdG9uQWRkLFxufSkgPT4ge1xuXHRjb25zdCB7XG5cdFx0ZGlhbG9nU3RhdGUsXG5cdFx0b3BlbkVkaXREaWFsb2csXG5cdFx0b3BlbkRlbGV0ZURpYWxvZyxcblx0XHRjbG9zZURpYWxvZyxcblx0XHRoYW5kbGVDb25maXJtLFxuXHR9ID0gdXNlUmVjdXJyaW5nRXZlbnRBY3Rpb25zKG9uQ2xvc2UpXG5cblx0Y29uc3Qge1xuXHRcdGZpbmRQYXJlbnRSZWN1cnJpbmdFdmVudCxcblx0XHR0LFxuXHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0dGltZUZvcm1hdCxcblx0XHRnZXRSZXNvdXJjZUJ5SWQsXG5cdH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgoY29udGV4dCkgPT4gKHtcblx0XHRmaW5kUGFyZW50UmVjdXJyaW5nRXZlbnQ6IGNvbnRleHQuZmluZFBhcmVudFJlY3VycmluZ0V2ZW50LFxuXHRcdHQ6IGNvbnRleHQudCxcblx0XHRidXNpbmVzc0hvdXJzOiBjb250ZXh0LmJ1c2luZXNzSG91cnMsXG5cdFx0dGltZUZvcm1hdDogY29udGV4dC50aW1lRm9ybWF0LFxuXHRcdGdldFJlc291cmNlQnlJZDogY29udGV4dC5nZXRSZXNvdXJjZUJ5SWQsXG5cdH0pKVxuXG5cdGNvbnN0IHN0YXJ0ID0gc2VsZWN0ZWRFdmVudD8uc3RhcnQgPz8gZGF5anMoKVxuXHRjb25zdCBlbmQgPSBzZWxlY3RlZEV2ZW50Py5lbmQgPz8gZGF5anMoKS5hZGQoMSwgJ2hvdXInKVxuXG5cdC8vIEZpbmQgcGFyZW50IGV2ZW50IGlmIHRoaXMgaXMgYSByZWN1cnJpbmcgZXZlbnQgaW5zdGFuY2Vcblx0Y29uc3QgcGFyZW50RXZlbnQgPSBzZWxlY3RlZEV2ZW50XG5cdFx0PyBmaW5kUGFyZW50UmVjdXJyaW5nRXZlbnQoc2VsZWN0ZWRFdmVudClcblx0XHQ6IG51bGxcblxuXHQvLyBGb3JtIHN0YXRlXG5cdGNvbnN0IFtzdGFydERhdGUsIHNldFN0YXJ0RGF0ZV0gPSB1c2VTdGF0ZShzdGFydC50b0RhdGUoKSlcblx0Y29uc3QgW2VuZERhdGUsIHNldEVuZERhdGVdID0gdXNlU3RhdGUoZW5kLnRvRGF0ZSgpKVxuXHRjb25zdCBbaXNBbGxEYXksIHNldElzQWxsRGF5XSA9IHVzZVN0YXRlKHNlbGVjdGVkRXZlbnQ/LmFsbERheSB8fCBmYWxzZSlcblx0Y29uc3QgW3NlbGVjdGVkQ29sb3IsIHNldFNlbGVjdGVkQ29sb3JdID0gdXNlU3RhdGUoXG5cdFx0c2VsZWN0ZWRFdmVudD8uY29sb3IgfHwgQ09MT1JfT1BUSU9OU1swXS52YWx1ZVxuXHQpXG5cblx0Ly8gVGltZSBzdGF0ZVxuXHRjb25zdCBbc3RhcnRUaW1lLCBzZXRTdGFydFRpbWVdID0gdXNlU3RhdGUoc3RhcnQuZm9ybWF0KCdISDptbScpKVxuXHRjb25zdCBbZW5kVGltZSwgc2V0RW5kVGltZV0gPSB1c2VTdGF0ZShlbmQuZm9ybWF0KCdISDptbScpKVxuXG5cdC8vIEluaXRpYWxpemUgZm9ybSB2YWx1ZXMgZnJvbSBzZWxlY3RlZCBldmVudCBvciBkZWZhdWx0c1xuXHRjb25zdCBbZm9ybVZhbHVlcywgc2V0Rm9ybVZhbHVlc10gPSB1c2VTdGF0ZSh7XG5cdFx0dGl0bGU6IHNlbGVjdGVkRXZlbnQ/LnRpdGxlIHx8ICcnLFxuXHRcdGRlc2NyaXB0aW9uOiBzZWxlY3RlZEV2ZW50Py5kZXNjcmlwdGlvbiB8fCAnJyxcblx0XHRsb2NhdGlvbjogc2VsZWN0ZWRFdmVudD8ubG9jYXRpb24gfHwgJycsXG5cdH0pXG5cblx0Ly8gUmVjdXJyZW5jZSBzdGF0ZSAtIHB1bGwgUlJVTEUgZnJvbSBwYXJlbnQgaWYgdGhpcyBpcyBhbiBpbnN0YW5jZVxuXHRjb25zdCBbcnJ1bGUsIHNldFJydWxlXSA9IHVzZVN0YXRlPFJSdWxlT3B0aW9ucyB8IG51bGw+KCgpID0+IHtcblx0XHRjb25zdCBldmVudFJydWxlID0gc2VsZWN0ZWRFdmVudD8ucnJ1bGUgfHwgcGFyZW50RXZlbnQ/LnJydWxlXG5cdFx0cmV0dXJuIGV2ZW50UnJ1bGUgfHwgbnVsbFxuXHR9KVxuXG5cdC8vIENyZWF0ZSB3cmFwcGVyIGZ1bmN0aW9ucyB0byBmaXggVHlwZVNjcmlwdCBlcnJvcnMgd2l0aCBEYXRlUGlja2VyXG5cdGNvbnN0IGhhbmRsZVN0YXJ0RGF0ZUNoYW5nZSA9IChkYXRlOiBEYXRlIHwgdW5kZWZpbmVkKSA9PiB7XG5cdFx0aWYgKCFkYXRlKSByZXR1cm5cblx0XHRzZXRTdGFydERhdGUoZGF0ZSlcblx0XHRpZiAoZGF5anMoZGF0ZSkuaXNBZnRlcihkYXlqcyhlbmREYXRlKSkpIHtcblx0XHRcdHNldEVuZERhdGUoZGF0ZSlcblx0XHR9XG5cdH1cblxuXHRjb25zdCBoYW5kbGVFbmREYXRlQ2hhbmdlID0gKGRhdGU6IERhdGUgfCB1bmRlZmluZWQpID0+IHtcblx0XHRpZiAoIWRhdGUpIHJldHVyblxuXHRcdHNldEVuZERhdGUoZGF0ZSlcblx0XHRpZiAoZGF0ZSAmJiBkYXlqcyhkYXRlKS5pc0JlZm9yZShkYXlqcyhzdGFydERhdGUpKSkge1xuXHRcdFx0c2V0U3RhcnREYXRlKGRhdGUpXG5cdFx0fVxuXHR9XG5cblx0Ly8gVGltZSB2YWxpZGF0aW9uIGhhbmRsZXJzIC0gb25seSB2YWxpZGF0ZSB3aGVuIGRhdGVzIGFyZSB0aGUgc2FtZVxuXHRjb25zdCBoYW5kbGVTdGFydFRpbWVDaGFuZ2UgPSAodGltZTogc3RyaW5nKSA9PiB7XG5cdFx0c2V0U3RhcnRUaW1lKHRpbWUpXG5cdFx0Ly8gT25seSB2YWxpZGF0ZSBpZiBzYW1lIGRheVxuXHRcdGlmIChkYXlqcyhzdGFydERhdGUpLmlzU2FtZShkYXlqcyhlbmREYXRlKSwgJ2RheScpICYmIHRpbWUgPiBlbmRUaW1lKSB7XG5cdFx0XHRzZXRFbmRUaW1lKHRpbWUpXG5cdFx0fVxuXHR9XG5cblx0Y29uc3QgaGFuZGxlRW5kVGltZUNoYW5nZSA9ICh0aW1lOiBzdHJpbmcpID0+IHtcblx0XHRzZXRFbmRUaW1lKHRpbWUpXG5cdFx0Ly8gT25seSB2YWxpZGF0ZSBpZiBzYW1lIGRheVxuXHRcdGlmIChkYXlqcyhzdGFydERhdGUpLmlzU2FtZShkYXlqcyhlbmREYXRlKSwgJ2RheScpICYmIHRpbWUgPCBzdGFydFRpbWUpIHtcblx0XHRcdHNldFN0YXJ0VGltZSh0aW1lKVxuXHRcdH1cblx0fVxuXG5cdC8vIFVwZGF0ZSBmb3JtIHZhbHVlcyB3aGVuIGlucHV0IGNoYW5nZXNcblx0Y29uc3QgaGFuZGxlSW5wdXRDaGFuZ2UgPSAoXG5cdFx0ZTogUmVhY3QuQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudCB8IEhUTUxUZXh0QXJlYUVsZW1lbnQ+XG5cdCkgPT4ge1xuXHRcdGNvbnN0IHsgbmFtZSwgdmFsdWUgfSA9IGUudGFyZ2V0XG5cdFx0c2V0Rm9ybVZhbHVlcygocHJldikgPT4gKHsgLi4ucHJldiwgW25hbWVdOiB2YWx1ZSB9KSlcblx0fVxuXG5cdHVzZUVmZmVjdCgoKSA9PiB7XG5cdFx0Ly8gUmVzZXQgZW5kIHRpbWUgd2hlbiBhbGwgZGF5IGlzIHRvZ2dsZWQgdG8gb25cblx0XHRpZiAoaXNBbGxEYXkpIHtcblx0XHRcdHNldEVuZFRpbWUoJzIzOjU5Jylcblx0XHR9XG5cdH0sIFtpc0FsbERheV0pXG5cblx0Y29uc3QgaGFuZGxlU3VibWl0ID0gKGU6IFJlYWN0LkZvcm1FdmVudCkgPT4ge1xuXHRcdGUucHJldmVudERlZmF1bHQoKVxuXG5cdFx0Y29uc3Qgc3RhcnREYXRlVGltZSA9IGJ1aWxkRGF0ZVRpbWUoc3RhcnREYXRlLCBzdGFydFRpbWUsIGlzQWxsRGF5KVxuXHRcdGNvbnN0IGVuZERhdGVUaW1lID0gYnVpbGRFbmREYXRlVGltZShlbmREYXRlLCBlbmRUaW1lLCBpc0FsbERheSlcblxuXHRcdGNvbnN0IGV2ZW50RGF0YTogQ2FsZW5kYXJFdmVudCA9IHtcblx0XHRcdGlkOiBzZWxlY3RlZEV2ZW50Py5pZCB8fCBkYXlqcygpLmZvcm1hdCgnWVlZWU1NRERISG1tc3MnKSxcblx0XHRcdHRpdGxlOiBmb3JtVmFsdWVzLnRpdGxlLFxuXHRcdFx0c3RhcnQ6IHN0YXJ0RGF0ZVRpbWUsXG5cdFx0XHRlbmQ6IGVuZERhdGVUaW1lLFxuXHRcdFx0cmVzb3VyY2VJZDogc2VsZWN0ZWRFdmVudD8ucmVzb3VyY2VJZCxcblx0XHRcdGRlc2NyaXB0aW9uOiBmb3JtVmFsdWVzLmRlc2NyaXB0aW9uLFxuXHRcdFx0bG9jYXRpb246IGZvcm1WYWx1ZXMubG9jYXRpb24sXG5cdFx0XHRhbGxEYXk6IGlzQWxsRGF5LFxuXHRcdFx0Y29sb3I6IHNlbGVjdGVkQ29sb3IsXG5cdFx0XHRycnVsZTogcnJ1bGUgfHwgdW5kZWZpbmVkLFxuXHRcdH1cblxuXHRcdGlmIChzZWxlY3RlZEV2ZW50Py5pZCAmJiBpc1JlY3VycmluZ0V2ZW50KHNlbGVjdGVkRXZlbnQpKSB7XG5cdFx0XHRvcGVuRWRpdERpYWxvZyhzZWxlY3RlZEV2ZW50LCB7XG5cdFx0XHRcdHRpdGxlOiBmb3JtVmFsdWVzLnRpdGxlLFxuXHRcdFx0XHRzdGFydDogc3RhcnREYXRlVGltZSxcblx0XHRcdFx0ZW5kOiBlbmREYXRlVGltZSxcblx0XHRcdFx0ZGVzY3JpcHRpb246IGZvcm1WYWx1ZXMuZGVzY3JpcHRpb24sXG5cdFx0XHRcdGxvY2F0aW9uOiBmb3JtVmFsdWVzLmxvY2F0aW9uLFxuXHRcdFx0XHRhbGxEYXk6IGlzQWxsRGF5LFxuXHRcdFx0XHRjb2xvcjogc2VsZWN0ZWRDb2xvcixcblx0XHRcdFx0cnJ1bGU6IHJydWxlIHx8IHVuZGVmaW5lZCxcblx0XHRcdH0pXG5cdFx0XHRyZXR1cm5cblx0XHR9XG5cblx0XHRpZiAoc2VsZWN0ZWRFdmVudD8uaWQpIHtcblx0XHRcdG9uVXBkYXRlPy4oZXZlbnREYXRhKVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRvbkFkZD8uKGV2ZW50RGF0YSlcblx0XHR9XG5cdFx0b25DbG9zZSgpXG5cdH1cblxuXHRjb25zdCBoYW5kbGVEZWxldGUgPSAoKSA9PiB7XG5cdFx0aWYgKHNlbGVjdGVkRXZlbnQ/LmlkKSB7XG5cdFx0XHQvLyBDaGVjayBpZiB0aGlzIGlzIGEgcmVjdXJyaW5nIGV2ZW50XG5cdFx0XHRpZiAoaXNSZWN1cnJpbmdFdmVudChzZWxlY3RlZEV2ZW50KSkge1xuXHRcdFx0XHQvLyBTaG93IHJlY3VycmluZyBldmVudCBkZWxldGUgZGlhbG9nXG5cdFx0XHRcdG9wZW5EZWxldGVEaWFsb2coc2VsZWN0ZWRFdmVudClcblx0XHRcdFx0cmV0dXJuIC8vIERvbid0IGNsb3NlIHRoZSBmb3JtIHlldCwgbGV0IHRoZSBkaWFsb2cgaGFuZGxlIGl0XG5cdFx0XHR9XG5cdFx0XHRvbkRlbGV0ZT8uKHNlbGVjdGVkRXZlbnQpXG5cdFx0XHRvbkNsb3NlKClcblx0XHR9XG5cdH1cblxuXHRjb25zdCBoYW5kbGVSUnVsZUNoYW5nZSA9IChuZXdSUnVsZTogUlJ1bGVPcHRpb25zIHwgbnVsbCkgPT4ge1xuXHRcdGlmICghbmV3UlJ1bGUpIHtcblx0XHRcdHNldFJydWxlKG51bGwpXG5cdFx0XHRyZXR1cm5cblx0XHR9XG5cdFx0Y29uc3Qgc3RhcnREYXRlVGltZSA9IGJ1aWxkRGF0ZVRpbWUoc3RhcnREYXRlLCBzdGFydFRpbWUsIGlzQWxsRGF5KVxuXHRcdHNldFJydWxlKHsgLi4ubmV3UlJ1bGUsIGR0c3RhcnQ6IHN0YXJ0RGF0ZVRpbWUudG9EYXRlKCkgfSlcblx0fVxuXG5cdC8vIFVzZSByZXNvdXJjZS1zcGVjaWZpYyBidXNpbmVzcyBob3VycyBpZiBhdmFpbGFibGUsIG90aGVyd2lzZSBmYWxsYmFjayB0byBnbG9iYWxcblx0Y29uc3QgZWZmZWN0aXZlQnVzaW5lc3NIb3VycyA9IHVzZU1lbW8oKCkgPT4ge1xuXHRcdGNvbnN0IHJlc291cmNlSWQgPSBzZWxlY3RlZEV2ZW50Py5yZXNvdXJjZUlkXG5cdFx0aWYgKHJlc291cmNlSWQgJiYgZ2V0UmVzb3VyY2VCeUlkKSB7XG5cdFx0XHRjb25zdCByZXNvdXJjZSA9IGdldFJlc291cmNlQnlJZChyZXNvdXJjZUlkKVxuXHRcdFx0aWYgKHJlc291cmNlPy5idXNpbmVzc0hvdXJzKSB7XG5cdFx0XHRcdHJldHVybiByZXNvdXJjZS5idXNpbmVzc0hvdXJzXG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBidXNpbmVzc0hvdXJzXG5cdH0sIFtzZWxlY3RlZEV2ZW50Py5yZXNvdXJjZUlkLCBnZXRSZXNvdXJjZUJ5SWQsIGJ1c2luZXNzSG91cnNdKVxuXG5cdGNvbnN0IGRpc2FibGVkRGF0ZU1hdGNoZXIgPSBlZmZlY3RpdmVCdXNpbmVzc0hvdXJzXG5cdFx0PyAoZGF0ZTogRGF0ZSkgPT4gIWlzQnVzaW5lc3NEYXkoZGF5anMoZGF0ZSksIGVmZmVjdGl2ZUJ1c2luZXNzSG91cnMpXG5cdFx0OiB1bmRlZmluZWRcblxuXHRjb25zdCBzdGFydENvbnN0cmFpbnRzID0gZ2V0VGltZUNvbnN0cmFpbnRzKHN0YXJ0RGF0ZSwgZWZmZWN0aXZlQnVzaW5lc3NIb3Vycylcblx0Y29uc3QgZW5kQ29uc3RyYWludHMgPSBnZXRUaW1lQ29uc3RyYWludHMoZW5kRGF0ZSwgZWZmZWN0aXZlQnVzaW5lc3NIb3VycylcblxuXHRyZXR1cm4gKFxuXHRcdDw+XG5cdFx0XHQ8Zm9ybSBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIGZsZXgtMSBtaW4taC0wXCIgb25TdWJtaXQ9e2hhbmRsZVN1Ym1pdH0+XG5cdFx0XHRcdDxTY3JvbGxBcmVhIGNsYXNzTmFtZT1cImZsZXgtMSBtaW4taC0wXCI+XG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJncmlkIGdhcC0zIHNtOmdhcC00IHAtMVwiPlxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJncmlkIGdhcC0yXCI+XG5cdFx0XHRcdFx0XHRcdDxMYWJlbCBjbGFzc05hbWU9XCJ0ZXh0LXhzIHNtOnRleHQtc21cIiBodG1sRm9yPVwidGl0bGVcIj5cblx0XHRcdFx0XHRcdFx0XHR7dCgndGl0bGUnKX1cblx0XHRcdFx0XHRcdFx0PC9MYWJlbD5cblx0XHRcdFx0XHRcdFx0PElucHV0XG5cdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiaC04IHRleHQtc20gc206aC05XCJcblx0XHRcdFx0XHRcdFx0XHRpZD1cInRpdGxlXCJcblx0XHRcdFx0XHRcdFx0XHRuYW1lPVwidGl0bGVcIlxuXHRcdFx0XHRcdFx0XHRcdG9uQ2hhbmdlPXtoYW5kbGVJbnB1dENoYW5nZX1cblx0XHRcdFx0XHRcdFx0XHRwbGFjZWhvbGRlcj17dCgnZXZlbnRUaXRsZVBsYWNlaG9sZGVyJyl9XG5cdFx0XHRcdFx0XHRcdFx0cmVxdWlyZWRcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZT17Zm9ybVZhbHVlcy50aXRsZX1cblx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ2FwLTEgc206Z2FwLTJcIj5cblx0XHRcdFx0XHRcdFx0PExhYmVsIGNsYXNzTmFtZT1cInRleHQteHMgc206dGV4dC1zbVwiIGh0bWxGb3I9XCJkZXNjcmlwdGlvblwiPlxuXHRcdFx0XHRcdFx0XHRcdHt0KCdkZXNjcmlwdGlvbicpfVxuXHRcdFx0XHRcdFx0XHQ8L0xhYmVsPlxuXHRcdFx0XHRcdFx0XHQ8SW5wdXRcblx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJoLTggdGV4dC1zbSBzbTpoLTlcIlxuXHRcdFx0XHRcdFx0XHRcdGlkPVwiZGVzY3JpcHRpb25cIlxuXHRcdFx0XHRcdFx0XHRcdG5hbWU9XCJkZXNjcmlwdGlvblwiXG5cdFx0XHRcdFx0XHRcdFx0b25DaGFuZ2U9e2hhbmRsZUlucHV0Q2hhbmdlfVxuXHRcdFx0XHRcdFx0XHRcdHBsYWNlaG9sZGVyPXt0KCdldmVudERlc2NyaXB0aW9uUGxhY2Vob2xkZXInKX1cblx0XHRcdFx0XHRcdFx0XHR2YWx1ZT17Zm9ybVZhbHVlcy5kZXNjcmlwdGlvbn1cblx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMlwiPlxuXHRcdFx0XHRcdFx0XHQ8Q2hlY2tib3hcblx0XHRcdFx0XHRcdFx0XHRjaGVja2VkPXtpc0FsbERheX1cblx0XHRcdFx0XHRcdFx0XHRpZD1cImFsbERheVwiXG5cdFx0XHRcdFx0XHRcdFx0b25DaGVja2VkQ2hhbmdlPXsoY2hlY2tlZCkgPT4gc2V0SXNBbGxEYXkoY2hlY2tlZCA9PT0gdHJ1ZSl9XG5cdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdDxMYWJlbCBjbGFzc05hbWU9XCJ0ZXh0LXhzIHNtOnRleHQtc21cIiBodG1sRm9yPVwiYWxsRGF5XCI+XG5cdFx0XHRcdFx0XHRcdFx0e3QoJ2FsbERheScpfVxuXHRcdFx0XHRcdFx0XHQ8L0xhYmVsPlxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBncmlkLWNvbHMtMiBnYXAtMiBzbTpnYXAtNFwiPlxuXHRcdFx0XHRcdFx0XHQ8ZGl2PlxuXHRcdFx0XHRcdFx0XHRcdDxMYWJlbCBjbGFzc05hbWU9XCJ0ZXh0LXhzIHNtOnRleHQtc21cIj57dCgnc3RhcnREYXRlJyl9PC9MYWJlbD5cblx0XHRcdFx0XHRcdFx0XHQ8RGF0ZVBpY2tlclxuXHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwibXQtMVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRjbG9zZU9uU2VsZWN0XG5cdFx0XHRcdFx0XHRcdFx0XHRkYXRlPXtzdGFydERhdGV9XG5cdFx0XHRcdFx0XHRcdFx0XHRkaXNhYmxlZD17ZGlzYWJsZWREYXRlTWF0Y2hlcn1cblx0XHRcdFx0XHRcdFx0XHRcdG9uQ2hhbmdlPXtoYW5kbGVTdGFydERhdGVDaGFuZ2V9XG5cdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdDxkaXY+XG5cdFx0XHRcdFx0XHRcdFx0PExhYmVsIGNsYXNzTmFtZT1cInRleHQteHMgc206dGV4dC1zbVwiPnt0KCdlbmREYXRlJyl9PC9MYWJlbD5cblx0XHRcdFx0XHRcdFx0XHQ8RGF0ZVBpY2tlclxuXHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwibXQtMVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRjbG9zZU9uU2VsZWN0XG5cdFx0XHRcdFx0XHRcdFx0XHRkYXRlPXtlbmREYXRlfVxuXHRcdFx0XHRcdFx0XHRcdFx0ZGlzYWJsZWQ9e2Rpc2FibGVkRGF0ZU1hdGNoZXJ9XG5cdFx0XHRcdFx0XHRcdFx0XHRvbkNoYW5nZT17aGFuZGxlRW5kRGF0ZUNoYW5nZX1cblx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdFx0XHR7IWlzQWxsRGF5ICYmIChcblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJncmlkIGdyaWQtY29scy0yIGdhcC0yIHNtOmdhcC00XCI+XG5cdFx0XHRcdFx0XHRcdFx0PGRpdj5cblx0XHRcdFx0XHRcdFx0XHRcdDxMYWJlbCBjbGFzc05hbWU9XCJ0ZXh0LXhzIHNtOnRleHQtc21cIj57dCgnc3RhcnRUaW1lJyl9PC9MYWJlbD5cblx0XHRcdFx0XHRcdFx0XHRcdDxUaW1lUGlja2VyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cIm10LTEgaC04IHRleHQtc20gc206aC05XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0bWF4VGltZT17c3RhcnRDb25zdHJhaW50cy5tYXh9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG1pblRpbWU9e3N0YXJ0Q29uc3RyYWludHMubWlufVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRuYW1lPVwic3RhcnQtdGltZVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9uQ2hhbmdlPXtoYW5kbGVTdGFydFRpbWVDaGFuZ2V9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRpbWVGb3JtYXQ9e3RpbWVGb3JtYXR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlPXtzdGFydFRpbWV9XG5cdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdDxkaXY+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8TGFiZWwgY2xhc3NOYW1lPVwidGV4dC14cyBzbTp0ZXh0LXNtXCI+e3QoJ2VuZFRpbWUnKX08L0xhYmVsPlxuXHRcdFx0XHRcdFx0XHRcdFx0PFRpbWVQaWNrZXJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwibXQtMSBoLTggdGV4dC1zbSBzbTpoLTlcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRtYXhUaW1lPXtlbmRDb25zdHJhaW50cy5tYXh9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG1pblRpbWU9e2VuZENvbnN0cmFpbnRzLm1pbn1cblx0XHRcdFx0XHRcdFx0XHRcdFx0bmFtZT1cImVuZC10aW1lXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0b25DaGFuZ2U9e2hhbmRsZUVuZFRpbWVDaGFuZ2V9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRpbWVGb3JtYXQ9e3RpbWVGb3JtYXR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlPXtlbmRUaW1lfVxuXHRcdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQpfVxuXG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ2FwLTEgc206Z2FwLTJcIj5cblx0XHRcdFx0XHRcdFx0PExhYmVsIGNsYXNzTmFtZT1cInRleHQteHMgc206dGV4dC1zbVwiPnt0KCdjb2xvcicpfTwvTGFiZWw+XG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LXdyYXAgZ2FwLTJcIj5cblx0XHRcdFx0XHRcdFx0XHR7Q09MT1JfT1BUSU9OUy5tYXAoKGNvbG9yKSA9PiAoXG5cdFx0XHRcdFx0XHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGFyaWEtbGFiZWw9e2NvbG9yLmxhYmVsfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGAke2NvbG9yLnZhbHVlfSBoLTYgdy02IHJvdW5kZWQtZnVsbCBzbTpoLTggc206dy04YCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzZWxlY3RlZENvbG9yID09PSBjb2xvci52YWx1ZSAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0J3JpbmctMiByaW5nLWJsYWNrIHJpbmctb2Zmc2V0LTEgc206cmluZy1vZmZzZXQtMidcblx0XHRcdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0a2V5PXtjb2xvci52YWx1ZX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0b25DbGljaz17KCkgPT4gc2V0U2VsZWN0ZWRDb2xvcihjb2xvci52YWx1ZSl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YXJpYW50PVwiZ2hvc3RcIlxuXHRcdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0XHQpKX1cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJncmlkIGdhcC0xIHNtOmdhcC0yXCI+XG5cdFx0XHRcdFx0XHRcdDxMYWJlbCBjbGFzc05hbWU9XCJ0ZXh0LXhzIHNtOnRleHQtc21cIiBodG1sRm9yPVwibG9jYXRpb25cIj5cblx0XHRcdFx0XHRcdFx0XHR7dCgnbG9jYXRpb24nKX1cblx0XHRcdFx0XHRcdFx0PC9MYWJlbD5cblx0XHRcdFx0XHRcdFx0PElucHV0XG5cdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiaC04IHRleHQtc20gc206aC05XCJcblx0XHRcdFx0XHRcdFx0XHRpZD1cImxvY2F0aW9uXCJcblx0XHRcdFx0XHRcdFx0XHRuYW1lPVwibG9jYXRpb25cIlxuXHRcdFx0XHRcdFx0XHRcdG9uQ2hhbmdlPXtoYW5kbGVJbnB1dENoYW5nZX1cblx0XHRcdFx0XHRcdFx0XHRwbGFjZWhvbGRlcj17dCgnZXZlbnRMb2NhdGlvblBsYWNlaG9sZGVyJyl9XG5cdFx0XHRcdFx0XHRcdFx0dmFsdWU9e2Zvcm1WYWx1ZXMubG9jYXRpb259XG5cdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblxuXHRcdFx0XHRcdFx0ey8qIFJlY3VycmVuY2UgU2VjdGlvbiAqL31cblx0XHRcdFx0XHRcdDxSZWN1cnJlbmNlRWRpdG9yIG9uQ2hhbmdlPXtoYW5kbGVSUnVsZUNoYW5nZX0gdmFsdWU9e3JydWxlfSAvPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8L1Njcm9sbEFyZWE+XG5cblx0XHRcdFx0PERpYWxvZ0Zvb3RlciBjbGFzc05hbWU9XCJtdC00IHNocmluay0wIGZsZXggZmxleC1jb2wtcmV2ZXJzZSBnYXAtMiBzbTpmbGV4LXJvdyBzbTpnYXAtMFwiPlxuXHRcdFx0XHRcdHtzZWxlY3RlZEV2ZW50Py5pZCAmJiAoXG5cdFx0XHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cInctZnVsbCBzbTptci1hdXRvIHNtOnctYXV0b1wiXG5cdFx0XHRcdFx0XHRcdG9uQ2xpY2s9e2hhbmRsZURlbGV0ZX1cblx0XHRcdFx0XHRcdFx0c2l6ZT1cInNtXCJcblx0XHRcdFx0XHRcdFx0dHlwZT1cImJ1dHRvblwiXG5cdFx0XHRcdFx0XHRcdHZhcmlhbnQ9XCJkZXN0cnVjdGl2ZVwiXG5cdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdHt0KCdkZWxldGUnKX1cblx0XHRcdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IHctZnVsbCBnYXAtMiBzbTp3LWF1dG9cIj5cblx0XHRcdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiZmxleC0xIHNtOmZsZXgtbm9uZVwiXG5cdFx0XHRcdFx0XHRcdG9uQ2xpY2s9e29uQ2xvc2V9XG5cdFx0XHRcdFx0XHRcdHNpemU9XCJzbVwiXG5cdFx0XHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIlxuXHRcdFx0XHRcdFx0XHR2YXJpYW50PVwib3V0bGluZVwiXG5cdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdHt0KCdjYW5jZWwnKX1cblx0XHRcdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0XHRcdFx0PEJ1dHRvbiBjbGFzc05hbWU9XCJmbGV4LTEgc206ZmxleC1ub25lXCIgc2l6ZT1cInNtXCIgdHlwZT1cInN1Ym1pdFwiPlxuXHRcdFx0XHRcdFx0XHR7c2VsZWN0ZWRFdmVudD8uaWQgPyB0KCd1cGRhdGUnKSA6IHQoJ2NyZWF0ZScpfVxuXHRcdFx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDwvRGlhbG9nRm9vdGVyPlxuXHRcdFx0PC9mb3JtPlxuXG5cdFx0XHR7LyogUmVjdXJyaW5nIEV2ZW50IEVkaXQgRGlhbG9nICovfVxuXHRcdFx0PFJlY3VycmVuY2VFZGl0RGlhbG9nXG5cdFx0XHRcdGV2ZW50VGl0bGU9e2RpYWxvZ1N0YXRlLmV2ZW50Py50aXRsZSB8fCAnJ31cblx0XHRcdFx0aXNPcGVuPXtkaWFsb2dTdGF0ZS5pc09wZW59XG5cdFx0XHRcdG9uQ2xvc2U9e2Nsb3NlRGlhbG9nfVxuXHRcdFx0XHRvbkNvbmZpcm09e2hhbmRsZUNvbmZpcm19XG5cdFx0XHRcdG9wZXJhdGlvblR5cGU9e2RpYWxvZ1N0YXRlLm9wZXJhdGlvblR5cGV9XG5cdFx0XHQvPlxuXHRcdDwvPlxuXHQpXG59XG4iLAogICAgImltcG9ydCAqIGFzIENoZWNrYm94UHJpbWl0aXZlIGZyb20gJ0ByYWRpeC11aS9yZWFjdC1jaGVja2JveCdcbmltcG9ydCB7IENoZWNrSWNvbiB9IGZyb20gJ2x1Y2lkZS1yZWFjdCdcbmltcG9ydCB0eXBlICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmZ1bmN0aW9uIENoZWNrYm94KHtcblx0Y2xhc3NOYW1lLFxuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIENoZWNrYm94UHJpbWl0aXZlLlJvb3Q+KSB7XG5cdHJldHVybiAoXG5cdFx0PENoZWNrYm94UHJpbWl0aXZlLlJvb3Rcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCdwZWVyIGJvcmRlci1pbnB1dCBkYXJrOmJnLWlucHV0LzMwIGRhdGEtW3N0YXRlPWNoZWNrZWRdOmJnLXByaW1hcnkgZGF0YS1bc3RhdGU9Y2hlY2tlZF06dGV4dC1wcmltYXJ5LWZvcmVncm91bmQgZGFyazpkYXRhLVtzdGF0ZT1jaGVja2VkXTpiZy1wcmltYXJ5IGRhdGEtW3N0YXRlPWNoZWNrZWRdOmJvcmRlci1wcmltYXJ5IGZvY3VzLXZpc2libGU6Ym9yZGVyLXJpbmcgZm9jdXMtdmlzaWJsZTpyaW5nLXJpbmcvNTAgYXJpYS1pbnZhbGlkOnJpbmctZGVzdHJ1Y3RpdmUvMjAgZGFyazphcmlhLWludmFsaWQ6cmluZy1kZXN0cnVjdGl2ZS80MCBhcmlhLWludmFsaWQ6Ym9yZGVyLWRlc3RydWN0aXZlIHNpemUtNCBzaHJpbmstMCByb3VuZGVkLVs0cHhdIGJvcmRlciBzaGFkb3cteHMgdHJhbnNpdGlvbi1zaGFkb3cgb3V0bGluZS1ub25lIGZvY3VzLXZpc2libGU6cmluZy1bM3B4XSBkaXNhYmxlZDpjdXJzb3Itbm90LWFsbG93ZWQgZGlzYWJsZWQ6b3BhY2l0eS01MCcsXG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHRcdGRhdGEtc2xvdD1cImNoZWNrYm94XCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQ+XG5cdFx0XHQ8Q2hlY2tib3hQcmltaXRpdmUuSW5kaWNhdG9yXG5cdFx0XHRcdGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRleHQtY3VycmVudCB0cmFuc2l0aW9uLW5vbmVcIlxuXHRcdFx0XHRkYXRhLXNsb3Q9XCJjaGVja2JveC1pbmRpY2F0b3JcIlxuXHRcdFx0PlxuXHRcdFx0XHQ8Q2hlY2tJY29uIGNsYXNzTmFtZT1cInNpemUtMy41XCIgLz5cblx0XHRcdDwvQ2hlY2tib3hQcmltaXRpdmUuSW5kaWNhdG9yPlxuXHRcdDwvQ2hlY2tib3hQcmltaXRpdmUuUm9vdD5cblx0KVxufVxuXG5leHBvcnQgeyBDaGVja2JveCB9XG4iLAogICAgImltcG9ydCB7IFBvcG92ZXJDbG9zZSB9IGZyb20gJ0ByYWRpeC11aS9yZWFjdC1wb3BvdmVyJ1xuaW1wb3J0IHsgQ2FsZW5kYXIgYXMgQ2FsZW5kYXJJY29uIH0gZnJvbSAnbHVjaWRlLXJlYWN0J1xuaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IE1hdGNoZXIgfSBmcm9tICdyZWFjdC1kYXktcGlja2VyJ1xuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2J1dHRvbidcbmltcG9ydCB7IENhbGVuZGFyIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2NhbGVuZGFyJ1xuaW1wb3J0IHtcblx0UG9wb3Zlcixcblx0UG9wb3ZlckNvbnRlbnQsXG5cdFBvcG92ZXJUcmlnZ2VyLFxufSBmcm9tICdAL2NvbXBvbmVudHMvdWkvcG9wb3ZlcidcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmludGVyZmFjZSBEYXRlUGlja2VyUHJvcHMge1xuXHRkYXRlOiBEYXRlIHwgdW5kZWZpbmVkXG5cdG9uQ2hhbmdlPzogKGRhdGU6IERhdGUgfCB1bmRlZmluZWQpID0+IHZvaWRcblx0bGFiZWw/OiBzdHJpbmdcblx0Y2xhc3NOYW1lPzogc3RyaW5nXG5cdGNsb3NlT25TZWxlY3Q/OiBib29sZWFuXG5cdGRpc2FibGVkPzogTWF0Y2hlciB8IE1hdGNoZXJbXVxufVxuXG5leHBvcnQgZnVuY3Rpb24gRGF0ZVBpY2tlcih7XG5cdGRhdGUsXG5cdGNsb3NlT25TZWxlY3QsXG5cdG9uQ2hhbmdlLFxuXHRsYWJlbCA9ICdQaWNrIGEgZGF0ZScsXG5cdGNsYXNzTmFtZSxcblx0ZGlzYWJsZWQsXG59OiBEYXRlUGlja2VyUHJvcHMpIHtcblx0Y29uc3QgcG9wT3ZlclJlZiA9IHVzZVJlZjxIVE1MQnV0dG9uRWxlbWVudCB8IG51bGw+KG51bGwpXG5cdGNvbnN0IFtzZWxlY3RlZERhdGUsIHNldFNlbGVjdGVkRGF0ZV0gPSB1c2VTdGF0ZTxEYXRlIHwgdW5kZWZpbmVkPihkYXRlKVxuXG5cdC8vIFN5bmMgZGF0ZSBzdGF0ZSB3aXRoIGRhdGUgcHJvcFxuXHR1c2VFZmZlY3QoKCkgPT4ge1xuXHRcdHNldFNlbGVjdGVkRGF0ZShkYXRlKVxuXHR9LCBbZGF0ZV0pXG5cblx0Y29uc3QgaGFuZGxlRGF0ZVNlbGVjdCA9IChkYXRlOiBEYXRlIHwgdW5kZWZpbmVkKSA9PiB7XG5cdFx0c2V0U2VsZWN0ZWREYXRlKGRhdGUpXG5cdFx0aWYgKGNsb3NlT25TZWxlY3QpIHtcblx0XHRcdHBvcE92ZXJSZWYuY3VycmVudD8uY2xpY2soKVxuXHRcdH1cblx0XHRvbkNoYW5nZT8uKGRhdGUpXG5cdH1cblxuXHRyZXR1cm4gKFxuXHRcdDxkaXYgY2xhc3NOYW1lPXtjbGFzc05hbWV9PlxuXHRcdFx0PFBvcG92ZXI+XG5cdFx0XHRcdDxQb3BvdmVyVHJpZ2dlciBhc0NoaWxkPlxuXHRcdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHRcdCdkYXRhLVtlbXB0eT10cnVlXTp0ZXh0LW11dGVkLWZvcmVncm91bmQgdy1mdWxsIGp1c3RpZnktc3RhcnQgdGV4dC1sZWZ0IGZvbnQtbm9ybWFsJ1xuXHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdGRhdGEtZW1wdHk9eyFkYXRlfVxuXHRcdFx0XHRcdFx0dmFyaWFudD1cIm91dGxpbmVcIlxuXHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdDxDYWxlbmRhckljb24gLz5cblx0XHRcdFx0XHRcdHtzZWxlY3RlZERhdGUgPyAoXG5cdFx0XHRcdFx0XHRcdGRheWpzKHNlbGVjdGVkRGF0ZSkuZm9ybWF0KCdNTU0gRCwgWVlZWScpXG5cdFx0XHRcdFx0XHQpIDogKFxuXHRcdFx0XHRcdFx0XHQ8c3Bhbj57bGFiZWx9PC9zcGFuPlxuXHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdFx0PC9Qb3BvdmVyVHJpZ2dlcj5cblx0XHRcdFx0PFBvcG92ZXJDb250ZW50IGFsaWduPVwic3RhcnRcIiBjbGFzc05hbWU9XCJ3LWF1dG8gcC0wXCI+XG5cdFx0XHRcdFx0PFBvcG92ZXJDbG9zZSByZWY9e3BvcE92ZXJSZWZ9IC8+XG5cdFx0XHRcdFx0PENhbGVuZGFyXG5cdFx0XHRcdFx0XHRjYXB0aW9uTGF5b3V0PVwiZHJvcGRvd25cIlxuXHRcdFx0XHRcdFx0ZGVmYXVsdE1vbnRoPXtzZWxlY3RlZERhdGV9XG5cdFx0XHRcdFx0XHRkaXNhYmxlZD17ZGlzYWJsZWR9XG5cdFx0XHRcdFx0XHRtb2RlPVwic2luZ2xlXCJcblx0XHRcdFx0XHRcdG9uU2VsZWN0PXtoYW5kbGVEYXRlU2VsZWN0fVxuXHRcdFx0XHRcdFx0c2VsZWN0ZWQ9e3NlbGVjdGVkRGF0ZX1cblx0XHRcdFx0XHQvPlxuXHRcdFx0XHQ8L1BvcG92ZXJDb250ZW50PlxuXHRcdFx0PC9Qb3BvdmVyPlxuXHRcdDwvZGl2PlxuXHQpXG59XG4iLAogICAgImltcG9ydCB7XG5cdENoZXZyb25Eb3duSWNvbixcblx0Q2hldnJvbkxlZnRJY29uLFxuXHRDaGV2cm9uUmlnaHRJY29uLFxufSBmcm9tICdsdWNpZGUtcmVhY3QnXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgRGF5QnV0dG9uIH0gZnJvbSAncmVhY3QtZGF5LXBpY2tlcidcbmltcG9ydCB7IERheVBpY2tlciwgZ2V0RGVmYXVsdENsYXNzTmFtZXMgfSBmcm9tICdyZWFjdC1kYXktcGlja2VyJ1xuaW1wb3J0IHsgQnV0dG9uLCBidXR0b25WYXJpYW50cyB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9idXR0b24nXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5mdW5jdGlvbiBDYWxlbmRhcih7XG5cdGNsYXNzTmFtZSxcblx0Y2xhc3NOYW1lcyxcblx0c2hvd091dHNpZGVEYXlzID0gdHJ1ZSxcblx0Y2FwdGlvbkxheW91dCA9ICdsYWJlbCcsXG5cdGJ1dHRvblZhcmlhbnQgPSAnZ2hvc3QnLFxuXHRmb3JtYXR0ZXJzLFxuXHRjb21wb25lbnRzLFxuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIERheVBpY2tlcj4gJiB7XG5cdGJ1dHRvblZhcmlhbnQ/OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgQnV0dG9uPlsndmFyaWFudCddXG59KSB7XG5cdGNvbnN0IGRlZmF1bHRDbGFzc05hbWVzID0gZ2V0RGVmYXVsdENsYXNzTmFtZXMoKVxuXG5cdHJldHVybiAoXG5cdFx0PERheVBpY2tlclxuXHRcdFx0Y2FwdGlvbkxheW91dD17Y2FwdGlvbkxheW91dH1cblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCdiZy1iYWNrZ3JvdW5kIGdyb3VwL2NhbGVuZGFyIHAtMyBbLS1jZWxsLXNpemU6LS1zcGFjaW5nKDgpXSBbW2RhdGEtc2xvdD1jYXJkLWNvbnRlbnRdXyZdOmJnLXRyYW5zcGFyZW50IFtbZGF0YS1zbG90PXBvcG92ZXItY29udGVudF1fJl06YmctdHJhbnNwYXJlbnQnLFxuXHRcdFx0XHRTdHJpbmcucmF3YHJ0bDoqKjpbLnJkcC1idXR0b25cXF9uZXh0PnN2Z106cm90YXRlLTE4MGAsXG5cdFx0XHRcdFN0cmluZy5yYXdgcnRsOioqOlsucmRwLWJ1dHRvblxcX3ByZXZpb3VzPnN2Z106cm90YXRlLTE4MGAsXG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHRcdGNsYXNzTmFtZXM9e3tcblx0XHRcdFx0cm9vdDogY24oJ3ctZml0JywgZGVmYXVsdENsYXNzTmFtZXMucm9vdCksXG5cdFx0XHRcdG1vbnRoczogY24oXG5cdFx0XHRcdFx0J2ZsZXggZ2FwLTQgZmxleC1jb2wgbWQ6ZmxleC1yb3cgcmVsYXRpdmUnLFxuXHRcdFx0XHRcdGRlZmF1bHRDbGFzc05hbWVzLm1vbnRoc1xuXHRcdFx0XHQpLFxuXHRcdFx0XHRtb250aDogY24oJ2ZsZXggZmxleC1jb2wgdy1mdWxsIGdhcC00JywgZGVmYXVsdENsYXNzTmFtZXMubW9udGgpLFxuXHRcdFx0XHRuYXY6IGNuKFxuXHRcdFx0XHRcdCdmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMSB3LWZ1bGwgYWJzb2x1dGUgdG9wLTAgaW5zZXQteC0wIGp1c3RpZnktYmV0d2VlbicsXG5cdFx0XHRcdFx0ZGVmYXVsdENsYXNzTmFtZXMubmF2XG5cdFx0XHRcdCksXG5cdFx0XHRcdGJ1dHRvbl9wcmV2aW91czogY24oXG5cdFx0XHRcdFx0YnV0dG9uVmFyaWFudHMoeyB2YXJpYW50OiBidXR0b25WYXJpYW50IH0pLFxuXHRcdFx0XHRcdCdzaXplLSgtLWNlbGwtc2l6ZSkgYXJpYS1kaXNhYmxlZDpvcGFjaXR5LTUwIHAtMCBzZWxlY3Qtbm9uZScsXG5cdFx0XHRcdFx0ZGVmYXVsdENsYXNzTmFtZXMuYnV0dG9uX3ByZXZpb3VzXG5cdFx0XHRcdCksXG5cdFx0XHRcdGJ1dHRvbl9uZXh0OiBjbihcblx0XHRcdFx0XHRidXR0b25WYXJpYW50cyh7IHZhcmlhbnQ6IGJ1dHRvblZhcmlhbnQgfSksXG5cdFx0XHRcdFx0J3NpemUtKC0tY2VsbC1zaXplKSBhcmlhLWRpc2FibGVkOm9wYWNpdHktNTAgcC0wIHNlbGVjdC1ub25lJyxcblx0XHRcdFx0XHRkZWZhdWx0Q2xhc3NOYW1lcy5idXR0b25fbmV4dFxuXHRcdFx0XHQpLFxuXHRcdFx0XHRtb250aF9jYXB0aW9uOiBjbihcblx0XHRcdFx0XHQnZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgaC0oLS1jZWxsLXNpemUpIHctZnVsbCBweC0oLS1jZWxsLXNpemUpJyxcblx0XHRcdFx0XHRkZWZhdWx0Q2xhc3NOYW1lcy5tb250aF9jYXB0aW9uXG5cdFx0XHRcdCksXG5cdFx0XHRcdGRyb3Bkb3duczogY24oXG5cdFx0XHRcdFx0J3ctZnVsbCBmbGV4IGl0ZW1zLWNlbnRlciB0ZXh0LXNtIGZvbnQtbWVkaXVtIGp1c3RpZnktY2VudGVyIGgtKC0tY2VsbC1zaXplKSBnYXAtMS41Jyxcblx0XHRcdFx0XHRkZWZhdWx0Q2xhc3NOYW1lcy5kcm9wZG93bnNcblx0XHRcdFx0KSxcblx0XHRcdFx0ZHJvcGRvd25fcm9vdDogY24oXG5cdFx0XHRcdFx0J3JlbGF0aXZlIGhhcy1mb2N1czpib3JkZXItcmluZyBib3JkZXIgYm9yZGVyLWlucHV0IHNoYWRvdy14cyBoYXMtZm9jdXM6cmluZy1yaW5nLzUwIGhhcy1mb2N1czpyaW5nLVszcHhdIHJvdW5kZWQtbWQnLFxuXHRcdFx0XHRcdGRlZmF1bHRDbGFzc05hbWVzLmRyb3Bkb3duX3Jvb3Rcblx0XHRcdFx0KSxcblx0XHRcdFx0ZHJvcGRvd246IGNuKFxuXHRcdFx0XHRcdCdhYnNvbHV0ZSBiZy1wb3BvdmVyIGluc2V0LTAgb3BhY2l0eS0wJyxcblx0XHRcdFx0XHRkZWZhdWx0Q2xhc3NOYW1lcy5kcm9wZG93blxuXHRcdFx0XHQpLFxuXHRcdFx0XHRjYXB0aW9uX2xhYmVsOiBjbihcblx0XHRcdFx0XHQnc2VsZWN0LW5vbmUgZm9udC1tZWRpdW0nLFxuXHRcdFx0XHRcdGNhcHRpb25MYXlvdXQgPT09ICdsYWJlbCdcblx0XHRcdFx0XHRcdD8gJ3RleHQtc20nXG5cdFx0XHRcdFx0XHQ6ICdyb3VuZGVkLW1kIHBsLTIgcHItMSBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMSB0ZXh0LXNtIGgtOCBbJj5zdmddOnRleHQtbXV0ZWQtZm9yZWdyb3VuZCBbJj5zdmddOnNpemUtMy41Jyxcblx0XHRcdFx0XHRkZWZhdWx0Q2xhc3NOYW1lcy5jYXB0aW9uX2xhYmVsXG5cdFx0XHRcdCksXG5cdFx0XHRcdHRhYmxlOiAndy1mdWxsIGJvcmRlci1jb2xsYXBzZScsXG5cdFx0XHRcdHdlZWtkYXlzOiBjbignZmxleCcsIGRlZmF1bHRDbGFzc05hbWVzLndlZWtkYXlzKSxcblx0XHRcdFx0d2Vla2RheTogY24oXG5cdFx0XHRcdFx0J3RleHQtbXV0ZWQtZm9yZWdyb3VuZCByb3VuZGVkLW1kIGZsZXgtMSBmb250LW5vcm1hbCB0ZXh0LVswLjhyZW1dIHNlbGVjdC1ub25lJyxcblx0XHRcdFx0XHRkZWZhdWx0Q2xhc3NOYW1lcy53ZWVrZGF5XG5cdFx0XHRcdCksXG5cdFx0XHRcdHdlZWs6IGNuKCdmbGV4IHctZnVsbCBtdC0yJywgZGVmYXVsdENsYXNzTmFtZXMud2VlayksXG5cdFx0XHRcdHdlZWtfbnVtYmVyX2hlYWRlcjogY24oXG5cdFx0XHRcdFx0J3NlbGVjdC1ub25lIHctKC0tY2VsbC1zaXplKScsXG5cdFx0XHRcdFx0ZGVmYXVsdENsYXNzTmFtZXMud2Vla19udW1iZXJfaGVhZGVyXG5cdFx0XHRcdCksXG5cdFx0XHRcdHdlZWtfbnVtYmVyOiBjbihcblx0XHRcdFx0XHQndGV4dC1bMC44cmVtXSBzZWxlY3Qtbm9uZSB0ZXh0LW11dGVkLWZvcmVncm91bmQnLFxuXHRcdFx0XHRcdGRlZmF1bHRDbGFzc05hbWVzLndlZWtfbnVtYmVyXG5cdFx0XHRcdCksXG5cdFx0XHRcdGRheTogY24oXG5cdFx0XHRcdFx0J3JlbGF0aXZlIHctZnVsbCBoLWZ1bGwgcC0wIHRleHQtY2VudGVyIFsmOmxhc3QtY2hpbGRbZGF0YS1zZWxlY3RlZD10cnVlXV9idXR0b25dOnJvdW5kZWQtci1tZCBncm91cC9kYXkgYXNwZWN0LXNxdWFyZSBzZWxlY3Qtbm9uZScsXG5cdFx0XHRcdFx0cHJvcHMuc2hvd1dlZWtOdW1iZXJcblx0XHRcdFx0XHRcdD8gJ1smOm50aC1jaGlsZCgyKVtkYXRhLXNlbGVjdGVkPXRydWVdX2J1dHRvbl06cm91bmRlZC1sLW1kJ1xuXHRcdFx0XHRcdFx0OiAnWyY6Zmlyc3QtY2hpbGRbZGF0YS1zZWxlY3RlZD10cnVlXV9idXR0b25dOnJvdW5kZWQtbC1tZCcsXG5cdFx0XHRcdFx0ZGVmYXVsdENsYXNzTmFtZXMuZGF5XG5cdFx0XHRcdCksXG5cdFx0XHRcdHJhbmdlX3N0YXJ0OiBjbihcblx0XHRcdFx0XHQncm91bmRlZC1sLW1kIGJnLWFjY2VudCcsXG5cdFx0XHRcdFx0ZGVmYXVsdENsYXNzTmFtZXMucmFuZ2Vfc3RhcnRcblx0XHRcdFx0KSxcblx0XHRcdFx0cmFuZ2VfbWlkZGxlOiBjbigncm91bmRlZC1ub25lJywgZGVmYXVsdENsYXNzTmFtZXMucmFuZ2VfbWlkZGxlKSxcblx0XHRcdFx0cmFuZ2VfZW5kOiBjbigncm91bmRlZC1yLW1kIGJnLWFjY2VudCcsIGRlZmF1bHRDbGFzc05hbWVzLnJhbmdlX2VuZCksXG5cdFx0XHRcdHRvZGF5OiBjbihcblx0XHRcdFx0XHQnYmctYWNjZW50IHRleHQtYWNjZW50LWZvcmVncm91bmQgcm91bmRlZC1tZCBkYXRhLVtzZWxlY3RlZD10cnVlXTpyb3VuZGVkLW5vbmUnLFxuXHRcdFx0XHRcdGRlZmF1bHRDbGFzc05hbWVzLnRvZGF5XG5cdFx0XHRcdCksXG5cdFx0XHRcdG91dHNpZGU6IGNuKFxuXHRcdFx0XHRcdCd0ZXh0LW11dGVkLWZvcmVncm91bmQgYXJpYS1zZWxlY3RlZDp0ZXh0LW11dGVkLWZvcmVncm91bmQnLFxuXHRcdFx0XHRcdGRlZmF1bHRDbGFzc05hbWVzLm91dHNpZGVcblx0XHRcdFx0KSxcblx0XHRcdFx0ZGlzYWJsZWQ6IGNuKFxuXHRcdFx0XHRcdCd0ZXh0LW11dGVkLWZvcmVncm91bmQgb3BhY2l0eS01MCcsXG5cdFx0XHRcdFx0ZGVmYXVsdENsYXNzTmFtZXMuZGlzYWJsZWRcblx0XHRcdFx0KSxcblx0XHRcdFx0aGlkZGVuOiBjbignaW52aXNpYmxlJywgZGVmYXVsdENsYXNzTmFtZXMuaGlkZGVuKSxcblx0XHRcdFx0Li4uY2xhc3NOYW1lcyxcblx0XHRcdH19XG5cdFx0XHRjb21wb25lbnRzPXt7XG5cdFx0XHRcdFJvb3Q6ICh7IGNsYXNzTmFtZSwgcm9vdFJlZiwgLi4ucHJvcHMgfSkgPT4ge1xuXHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oY2xhc3NOYW1lKX1cblx0XHRcdFx0XHRcdFx0ZGF0YS1zbG90PVwiY2FsZW5kYXJcIlxuXHRcdFx0XHRcdFx0XHRyZWY9e3Jvb3RSZWZ9XG5cdFx0XHRcdFx0XHRcdHsuLi5wcm9wc31cblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0KVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRDaGV2cm9uOiAoeyBjbGFzc05hbWUsIG9yaWVudGF0aW9uLCAuLi5wcm9wcyB9KSA9PiB7XG5cdFx0XHRcdFx0aWYgKG9yaWVudGF0aW9uID09PSAnbGVmdCcpIHtcblx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdDxDaGV2cm9uTGVmdEljb24gY2xhc3NOYW1lPXtjbignc2l6ZS00JywgY2xhc3NOYW1lKX0gey4uLnByb3BzfSAvPlxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmIChvcmllbnRhdGlvbiA9PT0gJ3JpZ2h0Jykge1xuXHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0PENoZXZyb25SaWdodEljb25cblx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKCdzaXplLTQnLCBjbGFzc05hbWUpfVxuXHRcdFx0XHRcdFx0XHRcdHsuLi5wcm9wc31cblx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0PENoZXZyb25Eb3duSWNvbiBjbGFzc05hbWU9e2NuKCdzaXplLTQnLCBjbGFzc05hbWUpfSB7Li4ucHJvcHN9IC8+XG5cdFx0XHRcdFx0KVxuXHRcdFx0XHR9LFxuXHRcdFx0XHREYXlCdXR0b246IENhbGVuZGFyRGF5QnV0dG9uLFxuXHRcdFx0XHRXZWVrTnVtYmVyOiAoeyBjaGlsZHJlbiwgLi4ucHJvcHMgfSkgPT4ge1xuXHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHQ8dGQgey4uLnByb3BzfT5cblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IHNpemUtKC0tY2VsbC1zaXplKSBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC1jZW50ZXJcIj5cblx0XHRcdFx0XHRcdFx0XHR7Y2hpbGRyZW59XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0PC90ZD5cblx0XHRcdFx0XHQpXG5cdFx0XHRcdH0sXG5cdFx0XHRcdC4uLmNvbXBvbmVudHMsXG5cdFx0XHR9fVxuXHRcdFx0Zm9ybWF0dGVycz17e1xuXHRcdFx0XHRmb3JtYXRNb250aERyb3Bkb3duOiAoZGF0ZSkgPT5cblx0XHRcdFx0XHRkYXRlLnRvTG9jYWxlU3RyaW5nKCdkZWZhdWx0JywgeyBtb250aDogJ3Nob3J0JyB9KSxcblx0XHRcdFx0Li4uZm9ybWF0dGVycyxcblx0XHRcdH19XG5cdFx0XHRzaG93T3V0c2lkZURheXM9e3Nob3dPdXRzaWRlRGF5c31cblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmZ1bmN0aW9uIENhbGVuZGFyRGF5QnV0dG9uKHtcblx0Y2xhc3NOYW1lLFxuXHRkYXksXG5cdG1vZGlmaWVycyxcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBEYXlCdXR0b24+KSB7XG5cdGNvbnN0IGRlZmF1bHRDbGFzc05hbWVzID0gZ2V0RGVmYXVsdENsYXNzTmFtZXMoKVxuXG5cdGNvbnN0IHJlZiA9IFJlYWN0LnVzZVJlZjxIVE1MQnV0dG9uRWxlbWVudD4obnVsbClcblx0UmVhY3QudXNlRWZmZWN0KCgpID0+IHtcblx0XHRpZiAobW9kaWZpZXJzLmZvY3VzZWQpIHtcblx0XHRcdHJlZi5jdXJyZW50Py5mb2N1cygpXG5cdFx0fVxuXHR9LCBbbW9kaWZpZXJzLmZvY3VzZWRdKVxuXG5cdHJldHVybiAoXG5cdFx0PEJ1dHRvblxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0J2RhdGEtW3NlbGVjdGVkLXNpbmdsZT10cnVlXTpiZy1wcmltYXJ5IGRhdGEtW3NlbGVjdGVkLXNpbmdsZT10cnVlXTp0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCBkYXRhLVtyYW5nZS1taWRkbGU9dHJ1ZV06YmctYWNjZW50IGRhdGEtW3JhbmdlLW1pZGRsZT10cnVlXTp0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kIGRhdGEtW3JhbmdlLXN0YXJ0PXRydWVdOmJnLXByaW1hcnkgZGF0YS1bcmFuZ2Utc3RhcnQ9dHJ1ZV06dGV4dC1wcmltYXJ5LWZvcmVncm91bmQgZGF0YS1bcmFuZ2UtZW5kPXRydWVdOmJnLXByaW1hcnkgZGF0YS1bcmFuZ2UtZW5kPXRydWVdOnRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIGdyb3VwLWRhdGEtW2ZvY3VzZWQ9dHJ1ZV0vZGF5OmJvcmRlci1yaW5nIGdyb3VwLWRhdGEtW2ZvY3VzZWQ9dHJ1ZV0vZGF5OnJpbmctcmluZy81MCBkYXJrOmhvdmVyOnRleHQtYWNjZW50LWZvcmVncm91bmQgZmxleCBhc3BlY3Qtc3F1YXJlIHNpemUtYXV0byB3LWZ1bGwgbWluLXctKC0tY2VsbC1zaXplKSBmbGV4LWNvbCBnYXAtMSBsZWFkaW5nLW5vbmUgZm9udC1ub3JtYWwgZ3JvdXAtZGF0YS1bZm9jdXNlZD10cnVlXS9kYXk6cmVsYXRpdmUgZ3JvdXAtZGF0YS1bZm9jdXNlZD10cnVlXS9kYXk6ei0xMCBncm91cC1kYXRhLVtmb2N1c2VkPXRydWVdL2RheTpyaW5nLVszcHhdIGRhdGEtW3JhbmdlLWVuZD10cnVlXTpyb3VuZGVkLW1kIGRhdGEtW3JhbmdlLWVuZD10cnVlXTpyb3VuZGVkLXItbWQgZGF0YS1bcmFuZ2UtbWlkZGxlPXRydWVdOnJvdW5kZWQtbm9uZSBkYXRhLVtyYW5nZS1zdGFydD10cnVlXTpyb3VuZGVkLW1kIGRhdGEtW3JhbmdlLXN0YXJ0PXRydWVdOnJvdW5kZWQtbC1tZCBbJj5zcGFuXTp0ZXh0LXhzIFsmPnNwYW5dOm9wYWNpdHktNzAnLFxuXHRcdFx0XHRkZWZhdWx0Q2xhc3NOYW1lcy5kYXksXG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHRcdGRhdGEtZGF5PXtkYXkuZGF0ZS50b0xvY2FsZURhdGVTdHJpbmcoKX1cblx0XHRcdGRhdGEtcmFuZ2UtZW5kPXttb2RpZmllcnMucmFuZ2VfZW5kfVxuXHRcdFx0ZGF0YS1yYW5nZS1taWRkbGU9e21vZGlmaWVycy5yYW5nZV9taWRkbGV9XG5cdFx0XHRkYXRhLXJhbmdlLXN0YXJ0PXttb2RpZmllcnMucmFuZ2Vfc3RhcnR9XG5cdFx0XHRkYXRhLXNlbGVjdGVkLXNpbmdsZT17XG5cdFx0XHRcdG1vZGlmaWVycy5zZWxlY3RlZCAmJlxuXHRcdFx0XHQhbW9kaWZpZXJzLnJhbmdlX3N0YXJ0ICYmXG5cdFx0XHRcdCFtb2RpZmllcnMucmFuZ2VfZW5kICYmXG5cdFx0XHRcdCFtb2RpZmllcnMucmFuZ2VfbWlkZGxlXG5cdFx0XHR9XG5cdFx0XHRyZWY9e3JlZn1cblx0XHRcdHNpemU9XCJpY29uXCJcblx0XHRcdHZhcmlhbnQ9XCJnaG9zdFwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0Lz5cblx0KVxufVxuXG5leHBvcnQgeyBDYWxlbmRhciwgQ2FsZW5kYXJEYXlCdXR0b24gfVxuIiwKICAgICJpbXBvcnQgKiBhcyBQb3BvdmVyUHJpbWl0aXZlIGZyb20gJ0ByYWRpeC11aS9yZWFjdC1wb3BvdmVyJ1xuaW1wb3J0IHR5cGUgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuZnVuY3Rpb24gUG9wb3Zlcih7XG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgUG9wb3ZlclByaW1pdGl2ZS5Sb290Pikge1xuXHRyZXR1cm4gPFBvcG92ZXJQcmltaXRpdmUuUm9vdCBkYXRhLXNsb3Q9XCJwb3BvdmVyXCIgey4uLnByb3BzfSAvPlxufVxuXG5mdW5jdGlvbiBQb3BvdmVyVHJpZ2dlcih7XG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgUG9wb3ZlclByaW1pdGl2ZS5UcmlnZ2VyPikge1xuXHRyZXR1cm4gPFBvcG92ZXJQcmltaXRpdmUuVHJpZ2dlciBkYXRhLXNsb3Q9XCJwb3BvdmVyLXRyaWdnZXJcIiB7Li4ucHJvcHN9IC8+XG59XG5cbmZ1bmN0aW9uIFBvcG92ZXJDb250ZW50KHtcblx0Y2xhc3NOYW1lLFxuXHRhbGlnbiA9ICdjZW50ZXInLFxuXHRzaWRlT2Zmc2V0ID0gNCxcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBQb3BvdmVyUHJpbWl0aXZlLkNvbnRlbnQ+KSB7XG5cdHJldHVybiAoXG5cdFx0PFBvcG92ZXJQcmltaXRpdmUuUG9ydGFsPlxuXHRcdFx0PFBvcG92ZXJQcmltaXRpdmUuQ29udGVudFxuXHRcdFx0XHRhbGlnbj17YWxpZ259XG5cdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0J2JnLXBvcG92ZXIgdGV4dC1wb3BvdmVyLWZvcmVncm91bmQgZGF0YS1bc3RhdGU9b3Blbl06YW5pbWF0ZS1pbiBkYXRhLVtzdGF0ZT1jbG9zZWRdOmFuaW1hdGUtb3V0IGRhdGEtW3N0YXRlPWNsb3NlZF06ZmFkZS1vdXQtMCBkYXRhLVtzdGF0ZT1vcGVuXTpmYWRlLWluLTAgZGF0YS1bc3RhdGU9Y2xvc2VkXTp6b29tLW91dC05NSBkYXRhLVtzdGF0ZT1vcGVuXTp6b29tLWluLTk1IGRhdGEtW3NpZGU9Ym90dG9tXTpzbGlkZS1pbi1mcm9tLXRvcC0yIGRhdGEtW3NpZGU9bGVmdF06c2xpZGUtaW4tZnJvbS1yaWdodC0yIGRhdGEtW3NpZGU9cmlnaHRdOnNsaWRlLWluLWZyb20tbGVmdC0yIGRhdGEtW3NpZGU9dG9wXTpzbGlkZS1pbi1mcm9tLWJvdHRvbS0yIHotNTAgdy03MiBvcmlnaW4tKC0tcmFkaXgtcG9wb3Zlci1jb250ZW50LXRyYW5zZm9ybS1vcmlnaW4pIHJvdW5kZWQtbWQgYm9yZGVyIHAtNCBzaGFkb3ctbWQgb3V0bGluZS1oaWRkZW4nLFxuXHRcdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0XHQpfVxuXHRcdFx0XHRkYXRhLXNsb3Q9XCJwb3BvdmVyLWNvbnRlbnRcIlxuXHRcdFx0XHRzaWRlT2Zmc2V0PXtzaWRlT2Zmc2V0fVxuXHRcdFx0XHR7Li4ucHJvcHN9XG5cdFx0XHQvPlxuXHRcdDwvUG9wb3ZlclByaW1pdGl2ZS5Qb3J0YWw+XG5cdClcbn1cblxuZnVuY3Rpb24gUG9wb3ZlckFuY2hvcih7XG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgUG9wb3ZlclByaW1pdGl2ZS5BbmNob3I+KSB7XG5cdHJldHVybiA8UG9wb3ZlclByaW1pdGl2ZS5BbmNob3IgZGF0YS1zbG90PVwicG9wb3Zlci1hbmNob3JcIiB7Li4ucHJvcHN9IC8+XG59XG5cbmV4cG9ydCB7IFBvcG92ZXIsIFBvcG92ZXJBbmNob3IsIFBvcG92ZXJDb250ZW50LCBQb3BvdmVyVHJpZ2dlciB9XG4iLAogICAgImltcG9ydCB0eXBlICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmZ1bmN0aW9uIElucHV0KHsgY2xhc3NOYW1lLCB0eXBlLCAuLi5wcm9wcyB9OiBSZWFjdC5Db21wb25lbnRQcm9wczwnaW5wdXQnPikge1xuXHRyZXR1cm4gKFxuXHRcdDxpbnB1dFxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0J2ZpbGU6dGV4dC1mb3JlZ3JvdW5kIHBsYWNlaG9sZGVyOnRleHQtbXV0ZWQtZm9yZWdyb3VuZCBzZWxlY3Rpb246YmctcHJpbWFyeSBzZWxlY3Rpb246dGV4dC1wcmltYXJ5LWZvcmVncm91bmQgZGFyazpiZy1pbnB1dC8zMCBib3JkZXItaW5wdXQgZmxleCBoLTkgdy1mdWxsIG1pbi13LTAgcm91bmRlZC1tZCBib3JkZXIgYmctdHJhbnNwYXJlbnQgcHgtMyBweS0xIHRleHQtYmFzZSBzaGFkb3cteHMgdHJhbnNpdGlvbi1bY29sb3IsYm94LXNoYWRvd10gb3V0bGluZS1ub25lIGZpbGU6aW5saW5lLWZsZXggZmlsZTpoLTcgZmlsZTpib3JkZXItMCBmaWxlOmJnLXRyYW5zcGFyZW50IGZpbGU6dGV4dC1zbSBmaWxlOmZvbnQtbWVkaXVtIGRpc2FibGVkOnBvaW50ZXItZXZlbnRzLW5vbmUgZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIGRpc2FibGVkOm9wYWNpdHktNTAgbWQ6dGV4dC1zbScsXG5cdFx0XHRcdCdmb2N1cy12aXNpYmxlOmJvcmRlci1yaW5nIGZvY3VzLXZpc2libGU6cmluZy1yaW5nLzUwIGZvY3VzLXZpc2libGU6cmluZy1bM3B4XScsXG5cdFx0XHRcdCdhcmlhLWludmFsaWQ6cmluZy1kZXN0cnVjdGl2ZS8yMCBkYXJrOmFyaWEtaW52YWxpZDpyaW5nLWRlc3RydWN0aXZlLzQwIGFyaWEtaW52YWxpZDpib3JkZXItZGVzdHJ1Y3RpdmUnLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJpbnB1dFwiXG5cdFx0XHR0eXBlPXt0eXBlfVxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdC8+XG5cdClcbn1cblxuZXhwb3J0IHsgSW5wdXQgfVxuIiwKICAgICJpbXBvcnQgKiBhcyBMYWJlbFByaW1pdGl2ZSBmcm9tICdAcmFkaXgtdWkvcmVhY3QtbGFiZWwnXG5pbXBvcnQgdHlwZSAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5mdW5jdGlvbiBMYWJlbCh7XG5cdGNsYXNzTmFtZSxcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBMYWJlbFByaW1pdGl2ZS5Sb290Pikge1xuXHRyZXR1cm4gKFxuXHRcdDxMYWJlbFByaW1pdGl2ZS5Sb290XG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQnZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgdGV4dC1zbSBsZWFkaW5nLW5vbmUgZm9udC1tZWRpdW0gc2VsZWN0LW5vbmUgZ3JvdXAtZGF0YS1bZGlzYWJsZWQ9dHJ1ZV06cG9pbnRlci1ldmVudHMtbm9uZSBncm91cC1kYXRhLVtkaXNhYmxlZD10cnVlXTpvcGFjaXR5LTUwIHBlZXItZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIHBlZXItZGlzYWJsZWQ6b3BhY2l0eS01MCcsXG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHRcdGRhdGEtc2xvdD1cImxhYmVsXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmV4cG9ydCB7IExhYmVsIH1cbiIsCiAgICAiaW1wb3J0ICogYXMgU2Nyb2xsQXJlYVByaW1pdGl2ZSBmcm9tICdAcmFkaXgtdWkvcmVhY3Qtc2Nyb2xsLWFyZWEnXG5pbXBvcnQgdHlwZSAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5pbnRlcmZhY2UgU2Nyb2xsQXJlYVByb3BzXG5cdGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNjcm9sbEFyZWFQcmltaXRpdmUuUm9vdD4ge1xuXHR2aWV3UG9ydFByb3BzPzogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNjcm9sbEFyZWFQcmltaXRpdmUuVmlld3BvcnQ+XG59XG5cbmZ1bmN0aW9uIFNjcm9sbEFyZWEoe1xuXHRjbGFzc05hbWUsXG5cdGNoaWxkcmVuLFxuXHR2aWV3UG9ydFByb3BzLFxuXHQuLi5wcm9wc1xufTogU2Nyb2xsQXJlYVByb3BzKSB7XG5cdHJldHVybiAoXG5cdFx0PFNjcm9sbEFyZWFQcmltaXRpdmUuUm9vdFxuXHRcdFx0Y2xhc3NOYW1lPXtjbigncmVsYXRpdmUnLCBjbGFzc05hbWUpfVxuXHRcdFx0ZGF0YS1zbG90PVwic2Nyb2xsLWFyZWFcIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdD5cblx0XHRcdDxTY3JvbGxBcmVhUHJpbWl0aXZlLlZpZXdwb3J0XG5cdFx0XHRcdHsuLi52aWV3UG9ydFByb3BzfVxuXHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdCdmb2N1cy12aXNpYmxlOnJpbmctcmluZy81MCBzaXplLWZ1bGwgcm91bmRlZC1baW5oZXJpdF0gdHJhbnNpdGlvbi1bY29sb3IsYm94LXNoYWRvd10gb3V0bGluZS1ub25lIGZvY3VzLXZpc2libGU6cmluZy1bM3B4XSBmb2N1cy12aXNpYmxlOm91dGxpbmUtMScsXG5cdFx0XHRcdFx0dmlld1BvcnRQcm9wcz8uY2xhc3NOYW1lXG5cdFx0XHRcdCl9XG5cdFx0XHRcdGRhdGEtc2xvdD1cInNjcm9sbC1hcmVhLXZpZXdwb3J0XCJcblx0XHRcdD5cblx0XHRcdFx0e2NoaWxkcmVufVxuXHRcdFx0PC9TY3JvbGxBcmVhUHJpbWl0aXZlLlZpZXdwb3J0PlxuXHRcdFx0PFNjcm9sbEJhciAvPlxuXHRcdFx0PFNjcm9sbEFyZWFQcmltaXRpdmUuQ29ybmVyIC8+XG5cdFx0PC9TY3JvbGxBcmVhUHJpbWl0aXZlLlJvb3Q+XG5cdClcbn1cblxuZnVuY3Rpb24gU2Nyb2xsQmFyKHtcblx0Y2xhc3NOYW1lLFxuXHRvcmllbnRhdGlvbiA9ICd2ZXJ0aWNhbCcsXG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgU2Nyb2xsQXJlYVByaW1pdGl2ZS5TY3JvbGxBcmVhU2Nyb2xsYmFyPikge1xuXHRyZXR1cm4gKFxuXHRcdDxTY3JvbGxBcmVhUHJpbWl0aXZlLlNjcm9sbEFyZWFTY3JvbGxiYXJcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCdmbGV4IHRvdWNoLW5vbmUgcC1weCB0cmFuc2l0aW9uLWNvbG9ycyBzZWxlY3Qtbm9uZScsXG5cdFx0XHRcdG9yaWVudGF0aW9uID09PSAndmVydGljYWwnICYmXG5cdFx0XHRcdFx0J2gtZnVsbCB3LTIuNSBib3JkZXItbCBib3JkZXItbC10cmFuc3BhcmVudCcsXG5cdFx0XHRcdG9yaWVudGF0aW9uID09PSAnaG9yaXpvbnRhbCcgJiZcblx0XHRcdFx0XHQnaC0yLjUgZmxleC1jb2wgYm9yZGVyLXQgYm9yZGVyLXQtdHJhbnNwYXJlbnQnLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJzY3JvbGwtYXJlYS1zY3JvbGxiYXJcIlxuXHRcdFx0b3JpZW50YXRpb249e29yaWVudGF0aW9ufVxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdD5cblx0XHRcdDxTY3JvbGxBcmVhUHJpbWl0aXZlLlNjcm9sbEFyZWFUaHVtYlxuXHRcdFx0XHRjbGFzc05hbWU9XCJiZy1ib3JkZXIgcmVsYXRpdmUgZmxleC0xIHJvdW5kZWQtZnVsbFwiXG5cdFx0XHRcdGRhdGEtc2xvdD1cInNjcm9sbC1hcmVhLXRodW1iXCJcblx0XHRcdC8+XG5cdFx0PC9TY3JvbGxBcmVhUHJpbWl0aXZlLlNjcm9sbEFyZWFTY3JvbGxiYXI+XG5cdClcbn1cblxuZXhwb3J0IHsgU2Nyb2xsQXJlYSwgU2Nyb2xsQmFyIH1cbiIsCiAgICAiaW1wb3J0IHsgQ2xvY2sgfSBmcm9tICdsdWNpZGUtcmVhY3QnXG5pbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9idXR0b24nXG5pbXBvcnQgeyBJbnB1dCB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9pbnB1dCdcbmltcG9ydCB7XG5cdFBvcG92ZXIsXG5cdFBvcG92ZXJDb250ZW50LFxuXHRQb3BvdmVyVHJpZ2dlcixcbn0gZnJvbSAnQC9jb21wb25lbnRzL3VpL3BvcG92ZXInXG5pbXBvcnQgeyBTY3JvbGxBcmVhIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL3Njcm9sbC1hcmVhJ1xuaW1wb3J0IHsgdXNlQXV0b2NvbXBsZXRlVGltZXBpY2tlciB9IGZyb20gJ0AvaG9va3MvdXNlLWF1dG9jb21wbGV0ZS10aW1lcGlja2VyJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB0eXBlIHsgVGltZUZvcm1hdCB9IGZyb20gJ0AvdHlwZXMnXG5cbmNvbnN0IGhhbmRsZVdoZWVsID0gKGU6IFJlYWN0LldoZWVsRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KSA9PiB7XG5cdC8vIFByZXZlbnQgZXZlbnQgZnJvbSBidWJibGluZyB0byBwcmV2ZW50IFBvcG92ZXIgZnJvbSBjbG9zaW5nXG5cdGUuc3RvcFByb3BhZ2F0aW9uKClcbn1cblxuaW50ZXJmYWNlIFRpbWVQaWNrZXJQcm9wcyB7XG5cdHZhbHVlOiBzdHJpbmdcblx0b25DaGFuZ2U6ICh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkXG5cdG1pblRpbWU/OiBzdHJpbmdcblx0bWF4VGltZT86IHN0cmluZ1xuXHR0aW1lRm9ybWF0PzogVGltZUZvcm1hdFxuXHRwbGFjZWhvbGRlcj86IHN0cmluZ1xuXHRjbGFzc05hbWU/OiBzdHJpbmdcblx0ZGlzYWJsZWQ/OiBib29sZWFuXG5cdG5hbWU/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFRpbWVQaWNrZXIoe1xuXHR2YWx1ZSxcblx0b25DaGFuZ2UsXG5cdG1pblRpbWUgPSAnMDA6MDAnLFxuXHRtYXhUaW1lID0gJzIzOjQ1Jyxcblx0dGltZUZvcm1hdCA9ICcxMi1ob3VyJyxcblx0cGxhY2Vob2xkZXIgPSAnU2VsZWN0IHRpbWUuLi4nLFxuXHRjbGFzc05hbWUsXG5cdGRpc2FibGVkID0gZmFsc2UsXG5cdG5hbWUsXG59OiBUaW1lUGlja2VyUHJvcHMpIHtcblx0Y29uc3QgW29wZW4sIHNldE9wZW5dID0gdXNlU3RhdGUoZmFsc2UpXG5cdGNvbnN0IFtzZWFyY2gsIHNldFNlYXJjaF0gPSB1c2VTdGF0ZSgnJylcblx0Y29uc3QgaW5wdXRSZWYgPSB1c2VSZWY8SFRNTElucHV0RWxlbWVudD4obnVsbClcblx0Y29uc3QgdHJpZ2dlclJlZiA9IHVzZVJlZjxIVE1MQnV0dG9uRWxlbWVudD4obnVsbClcblx0Y29uc3QgW3RyaWdnZXJXaWR0aCwgc2V0VHJpZ2dlcldpZHRoXSA9IHVzZVN0YXRlPG51bWJlcj4oMClcblxuXHRjb25zdCB7IHRpbWVPcHRpb25zLCBmb3JtYXRUaW1lIH0gPSB1c2VBdXRvY29tcGxldGVUaW1lcGlja2VyKHtcblx0XHR0aW1lRm9ybWF0LFxuXHRcdG1pblRpbWUsXG5cdFx0bWF4VGltZSxcblx0fSlcblxuXHQvLyBGaWx0ZXIgdGltZSBvcHRpb25zIGJhc2VkIG9uIHNlYXJjaFxuXHRjb25zdCBmaWx0ZXJlZE9wdGlvbnMgPSB0aW1lT3B0aW9ucy5maWx0ZXIoKHRpbWUpID0+IHtcblx0XHRjb25zdCBmb3JtYXR0ZWRUaW1lID0gZm9ybWF0VGltZSh0aW1lKVxuXHRcdHJldHVybiBmb3JtYXR0ZWRUaW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoLnRvTG93ZXJDYXNlKCkpXG5cdH0pXG5cblx0Y29uc3QgaGFuZGxlU2VsZWN0ID0gKHRpbWU6IHN0cmluZykgPT4ge1xuXHRcdG9uQ2hhbmdlKHRpbWUpXG5cdFx0c2V0T3BlbihmYWxzZSlcblx0XHRzZXRTZWFyY2goJycpXG5cdH1cblxuXHQvLyBNZWFzdXJlIHRyaWdnZXIgd2lkdGggYW5kIGZvY3VzIGlucHV0IHdoZW4gcG9wb3ZlciBvcGVuc1xuXHR1c2VFZmZlY3QoKCkgPT4ge1xuXHRcdGlmIChvcGVuKSB7XG5cdFx0XHRpZiAodHJpZ2dlclJlZi5jdXJyZW50KSB7XG5cdFx0XHRcdHNldFRyaWdnZXJXaWR0aCh0cmlnZ2VyUmVmLmN1cnJlbnQub2Zmc2V0V2lkdGgpXG5cdFx0XHR9XG5cdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0aW5wdXRSZWYuY3VycmVudD8uZm9jdXMoKVxuXHRcdFx0fSwgMClcblx0XHR9XG5cdH0sIFtvcGVuXSlcblxuXHRjb25zdCBjdXJyZW50VGltZVN0cmluZyA9IHZhbHVlID8gZm9ybWF0VGltZSh2YWx1ZSkgOiBwbGFjZWhvbGRlclxuXG5cdHJldHVybiAoXG5cdFx0PFBvcG92ZXIgb25PcGVuQ2hhbmdlPXtzZXRPcGVufSBvcGVuPXtvcGVufT5cblx0XHRcdDxQb3BvdmVyVHJpZ2dlciBhc0NoaWxkPlxuXHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0YXJpYS1jb250cm9scz1cInRpbWUtcGlja2VyLWxpc3Rib3hcIlxuXHRcdFx0XHRcdGFyaWEtZXhwYW5kZWQ9e29wZW59XG5cdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbigndy1mdWxsIGp1c3RpZnktc3RhcnQnLCBjbGFzc05hbWUpfVxuXHRcdFx0XHRcdGRhdGEtdGVzdGlkPXtgdGltZS1waWNrZXItJHtuYW1lfWB9XG5cdFx0XHRcdFx0ZGlzYWJsZWQ9e2Rpc2FibGVkfVxuXHRcdFx0XHRcdHJlZj17dHJpZ2dlclJlZn1cblx0XHRcdFx0XHRyb2xlPVwiY29tYm9ib3hcIlxuXHRcdFx0XHRcdHZhcmlhbnQ9XCJvdXRsaW5lXCJcblx0XHRcdFx0PlxuXHRcdFx0XHRcdDxDbG9jayBjbGFzc05hbWU9XCJtci0yIGgtNCB3LTRcIiAvPlxuXHRcdFx0XHRcdHtjdXJyZW50VGltZVN0cmluZ31cblx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHQ8L1BvcG92ZXJUcmlnZ2VyPlxuXHRcdFx0PFBvcG92ZXJDb250ZW50XG5cdFx0XHRcdGFsaWduPVwic3RhcnRcIlxuXHRcdFx0XHRjbGFzc05hbWU9XCJwLTBcIlxuXHRcdFx0XHRzdHlsZT17eyB3aWR0aDogdHJpZ2dlcldpZHRoIH19XG5cdFx0XHQ+XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwicC0yIGJvcmRlci1iXCI+XG5cdFx0XHRcdFx0PElucHV0XG5cdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJoLThcIlxuXHRcdFx0XHRcdFx0b25DaGFuZ2U9eyhlKSA9PiBzZXRTZWFyY2goZS50YXJnZXQudmFsdWUpfVxuXHRcdFx0XHRcdFx0cGxhY2Vob2xkZXI9XCJTZWFyY2ggdGltZS4uLlwiXG5cdFx0XHRcdFx0XHRyZWY9e2lucHV0UmVmfVxuXHRcdFx0XHRcdFx0dmFsdWU9e3NlYXJjaH1cblx0XHRcdFx0XHQvPlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PFNjcm9sbEFyZWEgY2xhc3NOYW1lPVwiaC1bMjAwcHhdXCIgb25XaGVlbD17aGFuZGxlV2hlZWx9PlxuXHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwicC0xXCI+XG5cdFx0XHRcdFx0XHR7ZmlsdGVyZWRPcHRpb25zLmxlbmd0aCA9PT0gMCA/IChcblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJweS02IHRleHQtY2VudGVyIHRleHQtc20gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCI+XG5cdFx0XHRcdFx0XHRcdFx0Ti9BXG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0KSA6IChcblx0XHRcdFx0XHRcdFx0ZmlsdGVyZWRPcHRpb25zLm1hcCgodGltZSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IHRpbWVTdHJpbmcgPSBmb3JtYXRUaW1lKHRpbWUpXG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgaXNTZWxlY3RlZCA9IHRpbWUgPT09IHZhbHVlXG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0XHRcdDxidXR0b25cblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQncmVsYXRpdmUgZmxleCB3LWZ1bGwgY3Vyc29yLXBvaW50ZXIgc2VsZWN0LW5vbmUgaXRlbXMtY2VudGVyIHJvdW5kZWQtc20gcHgtMiBweS0xLjUgdGV4dC1zbSBvdXRsaW5lLW5vbmUgdHJhbnNpdGlvbi1jb2xvcnMgaG92ZXI6YmctYWNjZW50IGhvdmVyOnRleHQtYWNjZW50LWZvcmVncm91bmQnLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlzU2VsZWN0ZWQgJiYgJ2JnLWFjY2VudCB0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kJ1xuXHRcdFx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRrZXk9e3RpbWV9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9uQ2xpY2s9eygpID0+IGhhbmRsZVNlbGVjdCh0aW1lKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZT1cImJ1dHRvblwiXG5cdFx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHt0aW1lU3RyaW5nfVxuXHRcdFx0XHRcdFx0XHRcdFx0PC9idXR0b24+XG5cdFx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PC9TY3JvbGxBcmVhPlxuXHRcdFx0PC9Qb3BvdmVyQ29udGVudD5cblx0XHQ8L1BvcG92ZXI+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBUaW1lRm9ybWF0IH0gZnJvbSAnQC90eXBlcydcblxuaW50ZXJmYWNlIFVzZUF1dG9jb21wbGV0ZVRpbWVwaWNrZXJQcm9wcyB7XG5cdHRpbWVGb3JtYXQ/OiBUaW1lRm9ybWF0XG5cdG1pblRpbWU/OiBzdHJpbmdcblx0bWF4VGltZT86IHN0cmluZ1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlQXV0b2NvbXBsZXRlVGltZXBpY2tlcih7XG5cdHRpbWVGb3JtYXQgPSAnMTItaG91cicsXG5cdG1pblRpbWUgPSAnMDA6MDAnLFxuXHRtYXhUaW1lID0gJzIzOjQ1Jyxcbn06IFVzZUF1dG9jb21wbGV0ZVRpbWVwaWNrZXJQcm9wcykge1xuXHQvLyBHZW5lcmF0ZSB0aW1lIG9wdGlvbnMgKDE1LW1pbnV0ZSBpbnRlcnZhbHMpIHdpdGhpbiBtaW4vbWF4IHJhbmdlXG5cdGNvbnN0IHRpbWVPcHRpb25zID0gdXNlTWVtbygoKSA9PiB7XG5cdFx0Y29uc3QgdGltZXM6IHN0cmluZ1tdID0gW11cblx0XHRjb25zdCBbbWluSG91ciwgbWluTWludXRlXSA9IG1pblRpbWUuc3BsaXQoJzonKS5tYXAoTnVtYmVyKVxuXHRcdGNvbnN0IFttYXhIb3VyLCBtYXhNaW51dGVdID0gbWF4VGltZS5zcGxpdCgnOicpLm1hcChOdW1iZXIpXG5cblx0XHRjb25zdCBtaW5Ub3RhbE1pbnV0ZXMgPSBtaW5Ib3VyICogNjAgKyBtaW5NaW51dGVcblx0XHRjb25zdCBtYXhUb3RhbE1pbnV0ZXMgPSBtYXhIb3VyICogNjAgKyBtYXhNaW51dGVcblxuXHRcdGZvciAoXG5cdFx0XHRsZXQgdG90YWxNaW51dGVzID0gbWluVG90YWxNaW51dGVzO1xuXHRcdFx0dG90YWxNaW51dGVzIDw9IG1heFRvdGFsTWludXRlcztcblx0XHRcdHRvdGFsTWludXRlcyArPSAxNVxuXHRcdCkge1xuXHRcdFx0Y29uc3QgaG91cnMgPSBNYXRoLmZsb29yKHRvdGFsTWludXRlcyAvIDYwKVxuXHRcdFx0Y29uc3QgbWludXRlcyA9IHRvdGFsTWludXRlcyAlIDYwXG5cblx0XHRcdGNvbnN0IHRpbWVTdHJpbmcgPSBgJHtob3Vycy50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyl9OiR7bWludXRlcy50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyl9YFxuXHRcdFx0dGltZXMucHVzaCh0aW1lU3RyaW5nKVxuXHRcdH1cblxuXHRcdHJldHVybiB0aW1lc1xuXHR9LCBbbWluVGltZSwgbWF4VGltZV0pXG5cblx0Y29uc3QgZm9ybWF0VGltZSA9ICh0aW1lOiBzdHJpbmcpID0+IHtcblx0XHRjb25zdCBbaG91cnMsIG1pbnV0ZXNdID0gdGltZS5zcGxpdCgnOicpLm1hcChOdW1iZXIpXG5cdFx0Y29uc3QgcGVyaW9kID0gaG91cnMgPj0gMTIgPyAnUE0nIDogJ0FNJ1xuXHRcdGNvbnN0IGRpc3BsYXlIb3VycyA9IGhvdXJzID09PSAwID8gMTIgOiBob3VycyA+IDEyID8gaG91cnMgLSAxMiA6IGhvdXJzXG5cblx0XHRpZiAodGltZUZvcm1hdCA9PT0gJzI0LWhvdXInKSB7XG5cdFx0XHRyZXR1cm4gYCR7aG91cnMudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpfToke21pbnV0ZXMudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpfWBcblx0XHR9XG5cblx0XHRyZXR1cm4gYCR7ZGlzcGxheUhvdXJzfToke21pbnV0ZXMudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpfSAke3BlcmlvZH1gXG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdHRpbWVPcHRpb25zLFxuXHRcdGZvcm1hdFRpbWUsXG5cdH1cbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBCdXNpbmVzc0hvdXJzIH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgV0VFS19EQVlTX05VTUJFUl9NQVAgfSBmcm9tICdAL2xpYi9jb25zdGFudHMnXG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgc3BlY2lmaWMgZGF0ZSBpcyBhIGJ1c2luZXNzIGRheS5cbiAqXG4gKiBAcGFyYW0gZGF0ZSBUaGUgZGF0ZSB0byBjaGVja1xuICogQHBhcmFtIGJ1c2luZXNzSG91cnMgVGhlIGJ1c2luZXNzIGhvdXJzIGNvbmZpZ3VyYXRpb24gKHNpbmdsZSBvciBhcnJheSlcbiAqIEByZXR1cm5zIHRydWUgaWYgdGhlIGRhdGUgaXMgYSBidXNpbmVzcyBkYXksIGZhbHNlIG90aGVyd2lzZVxuICovXG5leHBvcnQgY29uc3QgaXNCdXNpbmVzc0RheSA9IChcblx0ZGF0ZTogRGF5anMsXG5cdGJ1c2luZXNzSG91cnM/OiBCdXNpbmVzc0hvdXJzIHwgQnVzaW5lc3NIb3Vyc1tdXG4pOiBib29sZWFuID0+IHtcblx0aWYgKCFidXNpbmVzc0hvdXJzKSB7XG5cdFx0cmV0dXJuIHRydWVcblx0fVxuXG5cdGxldCBoYXNNYXRjaCA9IGZhbHNlXG5cdHByb2Nlc3NCdXNpbmVzc0hvdXJzKGJ1c2luZXNzSG91cnMsIHtcblx0XHRkYXRlLFxuXHRcdG9uTWF0Y2g6ICgpID0+IHtcblx0XHRcdGhhc01hdGNoID0gdHJ1ZVxuXHRcdH0sXG5cdH0pXG5cblx0cmV0dXJuIGhhc01hdGNoXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSXNCdXNpbmVzc0hvdXJPcHRpb25zIHtcblx0ZGF0ZTogRGF5anNcblx0aG91cj86IG51bWJlclxuXHRtaW51dGU/OiBudW1iZXJcblx0YnVzaW5lc3NIb3Vycz86IEJ1c2luZXNzSG91cnMgfCBCdXNpbmVzc0hvdXJzW11cbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYSBzcGVjaWZpYyBob3VyIG9uIGEgc3BlY2lmaWMgZGF0ZSBpcyB3aXRoaW4gYnVzaW5lc3MgaG91cnMuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgZm9yIGNoZWNraW5nIGJ1c2luZXNzIGhvdXJzXG4gKiBAcmV0dXJucyB0cnVlIGlmIHRoZSB0aW1lIGlzIHdpdGhpbiBidXNpbmVzcyBob3VycywgZmFsc2Ugb3RoZXJ3aXNlXG4gKi9cbmV4cG9ydCBjb25zdCBpc0J1c2luZXNzSG91ciA9ICh7XG5cdGRhdGUsXG5cdGhvdXIsXG5cdG1pbnV0ZSA9IDAsXG5cdGJ1c2luZXNzSG91cnMsXG59OiBJc0J1c2luZXNzSG91ck9wdGlvbnMpOiBib29sZWFuID0+IHtcblx0Ly8gSWYgYnVzaW5lc3MgaG91cnMgYXJlIG5vdCBjb25maWd1cmVkLCBjb25zaWRlciBldmVyeXRoaW5nIGFzIFwiYnVzaW5lc3MgaG91cnNcIlxuXHRpZiAoIWJ1c2luZXNzSG91cnMpIHtcblx0XHRyZXR1cm4gdHJ1ZVxuXHR9XG5cblx0Ly8gSWYgaG91ciBpcyBub3QgcHJvdmlkZWQsIHdlIGFzc3VtZSB0aGUgdXNlciBvbmx5IGNhcmVzIGFib3V0IHRoZSBkYXlcblx0aWYgKGhvdXIgPT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBpc0J1c2luZXNzRGF5KGRhdGUsIGJ1c2luZXNzSG91cnMpXG5cdH1cblxuXHRsZXQgaXNJbkJ1c2luZXNzSG91ciA9IGZhbHNlXG5cdGNvbnN0IGN1cnJlbnRNaW51dGVzID0gaG91ciAqIDYwICsgbWludXRlXG5cblx0cHJvY2Vzc0J1c2luZXNzSG91cnMoYnVzaW5lc3NIb3Vycywge1xuXHRcdGRhdGUsXG5cdFx0b25NYXRjaDogKGNvbmZpZykgPT4ge1xuXHRcdFx0Ly8gQ2hlY2sgdGltZSBhZ2FpbnN0IHRoaXMgc3BlY2lmaWMgY29uZmlnXG5cdFx0XHQvLyBzdGFydFRpbWUgYW5kIGVuZFRpbWUgYXJlIG51bWJlcnMgKDAtMjQpXG5cdFx0XHRjb25zdCBzdGFydEggPSBjb25maWcuc3RhcnRUaW1lID8/IDlcblx0XHRcdGNvbnN0IGVuZEggPSBjb25maWcuZW5kVGltZSA/PyAxN1xuXG5cdFx0XHRjb25zdCBzdGFydE1pbnV0ZXMgPSBzdGFydEggKiA2MFxuXHRcdFx0Y29uc3QgZW5kTWludXRlcyA9IGVuZEggKiA2MFxuXG5cdFx0XHRpZiAoY3VycmVudE1pbnV0ZXMgPj0gc3RhcnRNaW51dGVzICYmIGN1cnJlbnRNaW51dGVzIDwgZW5kTWludXRlcykge1xuXHRcdFx0XHRpc0luQnVzaW5lc3NIb3VyID0gdHJ1ZVxuXHRcdFx0fVxuXHRcdH0sXG5cdH0pXG5cblx0cmV0dXJuIGlzSW5CdXNpbmVzc0hvdXJcbn1cblxuLyoqXG4gKiBIZWxwZXIgdG8gcHJvY2VzcyBhIGJ1c2luZXNzIGhvdXJzIGNvbmZpZ3VyYXRpb24gYW5kIHVwZGF0ZSB0aGUgcmFuZ2UuXG4gKi9cbmV4cG9ydCBjb25zdCBwcm9jZXNzQnVzaW5lc3NIb3VycyA9IChcblx0Ymg6IEJ1c2luZXNzSG91cnMgfCBCdXNpbmVzc0hvdXJzW10gfCB1bmRlZmluZWQsXG5cdG9wdGlvbnM6IHtcblx0XHRkYXRlPzogRGF5anNcblx0XHRvbk1hdGNoOiAoY29uZmlnOiBCdXNpbmVzc0hvdXJzKSA9PiB2b2lkXG5cdH1cbikgPT4ge1xuXHRjb25zdCB7IGRhdGUsIG9uTWF0Y2ggfSA9IG9wdGlvbnNcblx0aWYgKCFiaCkgcmV0dXJuXG5cblx0Y29uc3QgY29uZmlncyA9IEFycmF5LmlzQXJyYXkoYmgpID8gYmggOiBbYmhdXG5cblx0Zm9yIChjb25zdCBjb25maWcgb2YgY29uZmlncykge1xuXHRcdGlmIChkYXRlICYmIGNvbmZpZy5kYXlzT2ZXZWVrKSB7XG5cdFx0XHRjb25zdCBkYXlPZldlZWsgPSBkYXRlLmRheSgpXG5cdFx0XHRpZiAoXG5cdFx0XHRcdGNvbmZpZy5kYXlzT2ZXZWVrLnNvbWUoKGQpID0+IFdFRUtfREFZU19OVU1CRVJfTUFQW2RdID09PSBkYXlPZldlZWspXG5cdFx0XHQpIHtcblx0XHRcdFx0b25NYXRjaChjb25maWcpXG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdG9uTWF0Y2goY29uZmlnKVxuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJ1c2luZXNzSG91cnNSYW5nZSB7XG5cdG1pblN0YXJ0OiBudW1iZXJcblx0bWF4RW5kOiBudW1iZXJcblx0aGFzQnVzaW5lc3NIb3VyczogYm9vbGVhblxufVxuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIHVuaW9uIG9mIGJ1c2luZXNzIGhvdXJzIHJhbmdlcyBhY3Jvc3MgbXVsdGlwbGUgZGF0ZXMgYW5kL29yIHJlc291cmNlIGNvbmZpZ3VyYXRpb25zLlxuICovXG5leHBvcnQgY29uc3QgY2FsY3VsYXRlQnVzaW5lc3NIb3Vyc1JhbmdlID0gKG9wdGlvbnM6IHtcblx0YWxsRGF0ZXM6IERheWpzW11cblx0YnVzaW5lc3NIb3Vycz86IEJ1c2luZXNzSG91cnMgfCBCdXNpbmVzc0hvdXJzW11cblx0cmVzb3VyY2VCdXNpbmVzc0hvdXJzPzogKEJ1c2luZXNzSG91cnMgfCBCdXNpbmVzc0hvdXJzW10pW11cblx0aGlkZU5vbkJ1c2luZXNzSG91cnM/OiBib29sZWFuXG59KTogQnVzaW5lc3NIb3Vyc1JhbmdlID0+IHtcblx0Y29uc3Qge1xuXHRcdGFsbERhdGVzLFxuXHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0cmVzb3VyY2VCdXNpbmVzc0hvdXJzID0gW10sXG5cdFx0aGlkZU5vbkJ1c2luZXNzSG91cnMsXG5cdH0gPSBvcHRpb25zXG5cblx0bGV0IG1pblN0YXJ0ID0gMjRcblx0bGV0IG1heEVuZCA9IDBcblx0bGV0IGhhc0J1c2luZXNzSG91cnMgPSBmYWxzZVxuXG5cdGNvbnN0IG9uTWF0Y2ggPSAoY29uZmlnOiBCdXNpbmVzc0hvdXJzKSA9PiB7XG5cdFx0aGFzQnVzaW5lc3NIb3VycyA9IHRydWVcblx0XHRtaW5TdGFydCA9IE1hdGgubWluKG1pblN0YXJ0LCBjb25maWcuc3RhcnRUaW1lID8/IDkpXG5cdFx0bWF4RW5kID0gTWF0aC5tYXgobWF4RW5kLCBjb25maWcuZW5kVGltZSA/PyAxNylcblx0fVxuXG5cdC8vIFByb2Nlc3MgZ2xvYmFsIGFuZCByZXNvdXJjZSBidXNpbmVzcyBob3VycyBmb3IgZWFjaCBkYXRlXG5cdGZvciAoY29uc3QgZGF0ZSBvZiBhbGxEYXRlcykge1xuXHRcdHByb2Nlc3NCdXNpbmVzc0hvdXJzKGJ1c2luZXNzSG91cnMsIHsgZGF0ZSwgb25NYXRjaCB9KVxuXHRcdGZvciAoY29uc3QgcmJoIG9mIHJlc291cmNlQnVzaW5lc3NIb3Vycykge1xuXHRcdFx0cHJvY2Vzc0J1c2luZXNzSG91cnMocmJoLCB7IGRhdGUsIG9uTWF0Y2ggfSlcblx0XHR9XG5cdH1cblxuXHQvLyBGYWxsYmFjayBsb2dpYyBpZiBubyBidXNpbmVzcyBob3VycyBmb3VuZCBmb3Igc3BlY2lmaWMgZGF0ZXNcblx0aWYgKCFoYXNCdXNpbmVzc0hvdXJzICYmIGhpZGVOb25CdXNpbmVzc0hvdXJzKSB7XG5cdFx0cHJvY2Vzc0J1c2luZXNzSG91cnMoYnVzaW5lc3NIb3VycywgeyBvbk1hdGNoIH0pXG5cdFx0Zm9yIChjb25zdCByYmggb2YgcmVzb3VyY2VCdXNpbmVzc0hvdXJzKSB7XG5cdFx0XHRwcm9jZXNzQnVzaW5lc3NIb3VycyhyYmgsIHsgb25NYXRjaCB9KVxuXHRcdH1cblxuXHRcdC8vIEZpbmFsIGZhbGxiYWNrIHRvIGRlZmF1bHQgOS0xNyBpZiBzdGlsbCBub3RoaW5nXG5cdFx0aWYgKCFoYXNCdXNpbmVzc0hvdXJzKSB7XG5cdFx0XHRtaW5TdGFydCA9IDlcblx0XHRcdG1heEVuZCA9IDE3XG5cdFx0XHRoYXNCdXNpbmVzc0hvdXJzID0gdHJ1ZVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiB7IG1pblN0YXJ0LCBtYXhFbmQsIGhhc0J1c2luZXNzSG91cnMgfVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSB7IEJ1c2luZXNzSG91cnMgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgeyBjYWxjdWxhdGVCdXNpbmVzc0hvdXJzUmFuZ2UgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL3V0aWxzL2J1c2luZXNzLWhvdXJzJ1xuaW1wb3J0IGRheWpzLCB7IHR5cGUgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcblxuZXhwb3J0IGNvbnN0IGJ1aWxkRGF0ZVRpbWUgPSAoXG5cdGRhdGU6IERhdGUsXG5cdHRpbWU6IHN0cmluZyxcblx0aXNBbGxEYXk6IGJvb2xlYW5cbik6IERheWpzID0+IHtcblx0Y29uc3QgW2hvdXJzLCBtaW51dGVzXSA9IHRpbWUuc3BsaXQoJzonKS5tYXAoTnVtYmVyKVxuXHRjb25zdCBiYXNlID0gZGF5anMoZGF0ZSkuaG91cihob3VycykubWludXRlKG1pbnV0ZXMpXG5cdHJldHVybiBpc0FsbERheSA/IGJhc2UuaG91cigwKS5taW51dGUoMCkgOiBiYXNlXG59XG5cbmV4cG9ydCBjb25zdCBidWlsZEVuZERhdGVUaW1lID0gKFxuXHRkYXRlOiBEYXRlLFxuXHR0aW1lOiBzdHJpbmcsXG5cdGlzQWxsRGF5OiBib29sZWFuXG4pOiBEYXlqcyA9PiB7XG5cdGNvbnN0IFtob3VycywgbWludXRlc10gPSB0aW1lLnNwbGl0KCc6JykubWFwKE51bWJlcilcblx0Y29uc3QgYmFzZSA9IGRheWpzKGRhdGUpLmhvdXIoaG91cnMpLm1pbnV0ZShtaW51dGVzKVxuXHRyZXR1cm4gaXNBbGxEYXkgPyBiYXNlLmhvdXIoMjMpLm1pbnV0ZSg1OSkgOiBiYXNlXG59XG5cbmV4cG9ydCBjb25zdCBnZXRUaW1lQ29uc3RyYWludHMgPSAoXG5cdGRhdGU6IERhdGUsXG5cdGJ1c2luZXNzSG91cnM/OiBCdXNpbmVzc0hvdXJzIHwgQnVzaW5lc3NIb3Vyc1tdXG4pID0+IHtcblx0aWYgKCFidXNpbmVzc0hvdXJzKSByZXR1cm4geyBtaW46ICcwMDowMCcsIG1heDogJzIzOjU5JyB9XG5cblx0Y29uc3QgZGF5anNEYXRlID0gZGF5anMoZGF0ZSlcblxuXHRjb25zdCB7IG1pblN0YXJ0LCBtYXhFbmQsIGhhc0J1c2luZXNzSG91cnMgfSA9IGNhbGN1bGF0ZUJ1c2luZXNzSG91cnNSYW5nZSh7XG5cdFx0YWxsRGF0ZXM6IFtkYXlqc0RhdGVdLFxuXHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0aGlkZU5vbkJ1c2luZXNzSG91cnM6IGZhbHNlLFxuXHR9KVxuXG5cdGlmICghaGFzQnVzaW5lc3NIb3Vycykge1xuXHRcdHJldHVybiB7IG1pbjogJzAwOjAwJywgbWF4OiAnMjM6NTknIH1cblx0fVxuXG5cdHJldHVybiB7XG5cdFx0bWluOiBgJHttaW5TdGFydC50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyl9OjAwYCxcblx0XHRtYXg6IGAkeyhtYXhFbmQgLSAxKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyl9OjQ1YCxcblx0fVxufVxuIiwKICAgICJpbXBvcnQgeyB1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IFdlZWtkYXkgfSBmcm9tICdycnVsZSdcbmltcG9ydCB7IFJSdWxlIH0gZnJvbSAncnJ1bGUnXG5pbXBvcnQgeyBDYXJkLCBDYXJkQ29udGVudCwgQ2FyZEhlYWRlciwgQ2FyZFRpdGxlIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2NhcmQnXG5pbXBvcnQgeyBDaGVja2JveCB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9jaGVja2JveCdcbmltcG9ydCB7IERhdGVQaWNrZXIgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvZGF0ZS1waWNrZXInXG5pbXBvcnQgeyBJbnB1dCB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9pbnB1dCdcbmltcG9ydCB7IExhYmVsIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2xhYmVsJ1xuaW1wb3J0IHtcblx0U2VsZWN0LFxuXHRTZWxlY3RDb250ZW50LFxuXHRTZWxlY3RJdGVtLFxuXHRTZWxlY3RUcmlnZ2VyLFxuXHRTZWxlY3RWYWx1ZSxcbn0gZnJvbSAnQC9jb21wb25lbnRzL3VpL3NlbGVjdCdcbmltcG9ydCB0eXBlIHsgUlJ1bGVPcHRpb25zIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL3R5cGVzJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuXG5jb25zdCBGUkVRX01BUCA9IHtcblx0REFJTFk6IFJSdWxlLkRBSUxZLFxuXHRXRUVLTFk6IFJSdWxlLldFRUtMWSxcblx0TU9OVEhMWTogUlJ1bGUuTU9OVEhMWSxcblx0WUVBUkxZOiBSUnVsZS5ZRUFSTFksXG59IGFzIGNvbnN0XG5jb25zdCBGUkVRX1RPX1NUUiA9IE9iamVjdC5mcm9tRW50cmllcyhcblx0T2JqZWN0LmVudHJpZXMoRlJFUV9NQVApLm1hcCgoW2ssIHZdKSA9PiBbdiwga10pXG4pIGFzIFJlY29yZDxudW1iZXIsIHN0cmluZz5cbmNvbnN0IFdFRUtEQVlTID0gW1xuXHRSUnVsZS5TVSxcblx0UlJ1bGUuTU8sXG5cdFJSdWxlLlRVLFxuXHRSUnVsZS5XRSxcblx0UlJ1bGUuVEgsXG5cdFJSdWxlLkZSLFxuXHRSUnVsZS5TQSxcbl1cbmNvbnN0IERBWV9LRVlTID0gWydzdW4nLCAnbW9uJywgJ3R1ZScsICd3ZWQnLCAndGh1JywgJ2ZyaScsICdzYXQnXVxuY29uc3QgcGFyc2VOdW0gPSAodjogc3RyaW5nKSA9PiBNYXRoLm1heCgxLCBOdW1iZXIucGFyc2VJbnQodiwgMTApIHx8IDEpXG5cbmNvbnN0IGdldERlc2NyaXB0aW9uID0gKFxuXHRvcHRzOiBSUnVsZU9wdGlvbnMgfCBudWxsLFxuXHR0OiAoazogc3RyaW5nKSA9PiBzdHJpbmdcbikgPT4ge1xuXHRpZiAoIW9wdHMpIHtcblx0XHRyZXR1cm4gdCgnY3VzdG9tUmVjdXJyZW5jZScpXG5cdH1cblx0dHJ5IHtcblx0XHRjb25zdCB0ZXh0ID0gbmV3IFJSdWxlKG9wdHMpLnRvVGV4dCgpXG5cdFx0cmV0dXJuIHRleHQgJiYgIXRleHQudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnZXJyb3InKVxuXHRcdFx0PyB0ZXh0LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgdGV4dC5zbGljZSgxKVxuXHRcdFx0OiB0KCdjdXN0b21SZWN1cnJlbmNlJylcblx0fSBjYXRjaCB7XG5cdFx0cmV0dXJuIHQoJ2N1c3RvbVJlY3VycmVuY2UnKVxuXHR9XG59XG5cbmludGVyZmFjZSBQcm9wcyB7XG5cdHZhbHVlPzogUlJ1bGVPcHRpb25zIHwgbnVsbFxuXHRvbkNoYW5nZTogKHY6IFJSdWxlT3B0aW9ucyB8IG51bGwpID0+IHZvaWRcbn1cblxuZXhwb3J0IGNvbnN0IFJlY3VycmVuY2VFZGl0b3I6IFJlYWN0LkZDPFByb3BzPiA9ICh7IHZhbHVlLCBvbkNoYW5nZSB9KSA9PiB7XG5cdGNvbnN0IHsgdCB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKGN0eCkgPT4gKHsgdDogY3R4LnQgfSkpXG5cdGNvbnN0IFtzaG93LCBzZXRTaG93XSA9IHVzZVN0YXRlKCEhdmFsdWUpXG5cdGNvbnN0IFtvcHRzLCBzZXRPcHRzXSA9IHVzZVN0YXRlPFJSdWxlT3B0aW9ucyB8IG51bGw+KCgpID0+IHZhbHVlIHx8IG51bGwpXG5cblx0Y29uc3Qgd2Vla0RheXMgPSB1c2VNZW1vKFxuXHRcdCgpID0+IERBWV9LRVlTLm1hcCgoaywgaSkgPT4gKHsgdmFsdWU6IFdFRUtEQVlTW2ldLCBsYWJlbDogdChrKSB9KSksXG5cdFx0W3RdXG5cdClcblxuXHR1c2VFZmZlY3QoKCkgPT4ge1xuXHRcdHNldFNob3coISF2YWx1ZSlcblx0XHRpZiAodmFsdWUpIHtcblx0XHRcdHNldE9wdHModmFsdWUpXG5cdFx0fVxuXHR9LCBbdmFsdWVdKVxuXG5cdGNvbnN0IHVwZGF0ZSA9ICh1OiBQYXJ0aWFsPFJSdWxlT3B0aW9ucz4pID0+IHtcblx0XHRpZiAoIW9wdHMpIHtcblx0XHRcdHJldHVyblxuXHRcdH1cblx0XHRjb25zdCBuZXh0ID0geyAuLi5vcHRzLCAuLi51IH1cblx0XHRzZXRPcHRzKG5leHQpXG5cdFx0b25DaGFuZ2Uoc2hvdyA/IG5leHQgOiBudWxsKVxuXHR9XG5cblx0Y29uc3QgdG9nZ2xlID0gKGNoZWNrZWQ6IGJvb2xlYW4pID0+IHtcblx0XHRzZXRTaG93KGNoZWNrZWQpXG5cdFx0aWYgKCFjaGVja2VkKSB7XG5cdFx0XHRvbkNoYW5nZShudWxsKVxuXHRcdFx0cmV0dXJuXG5cdFx0fVxuXHRcdGlmIChvcHRzKSB7XG5cdFx0XHRvbkNoYW5nZShvcHRzKVxuXHRcdFx0cmV0dXJuXG5cdFx0fVxuXHRcdGNvbnN0IGRlZiA9IHsgZnJlcTogUlJ1bGUuREFJTFksIGludGVydmFsOiAxIH0gYXMgUlJ1bGVPcHRpb25zXG5cdFx0c2V0T3B0cyhkZWYpXG5cdFx0b25DaGFuZ2UoZGVmKVxuXHR9XG5cblx0Y29uc3QgdG9nZ2xlRGF5ID0gKGk6IG51bWJlcikgPT4ge1xuXHRcdGNvbnN0IGN1cnIgPSAob3B0cz8uYnl3ZWVrZGF5IGFzIFdlZWtkYXlbXSkgfHwgW11cblx0XHRjb25zdCBkYXkgPSBXRUVLREFZU1tpXVxuXHRcdGNvbnN0IG5leHQgPSBjdXJyLmluY2x1ZGVzKGRheSlcblx0XHRcdD8gY3Vyci5maWx0ZXIoKGQpID0+IGQgIT09IGRheSlcblx0XHRcdDogWy4uLmN1cnIsIGRheV1cblx0XHR1cGRhdGUoeyBieXdlZWtkYXk6IG5leHQubGVuZ3RoID8gbmV4dCA6IHVuZGVmaW5lZCB9KVxuXHR9XG5cblx0Y29uc3Qgc2V0RW5kVHlwZSA9ICh0eXBlOiAnbmV2ZXInIHwgJ2NvdW50JyB8ICd1bnRpbCcpID0+IHtcblx0XHRjb25zdCB1OiBQYXJ0aWFsPFJSdWxlT3B0aW9ucz4gPSB7IGNvdW50OiB1bmRlZmluZWQsIHVudGlsOiB1bmRlZmluZWQgfVxuXHRcdGlmICh0eXBlID09PSAnY291bnQnKSB7XG5cdFx0XHR1LmNvdW50ID0gb3B0cz8uY291bnQgfHwgMVxuXHRcdH1cblx0XHRpZiAodHlwZSA9PT0gJ3VudGlsJykge1xuXHRcdFx0dS51bnRpbCA9IG9wdHM/LnVudGlsIHx8IGRheWpzKCkuYWRkKDEsICdtb250aCcpLmVuZE9mKCdkYXknKS50b0RhdGUoKVxuXHRcdH1cblx0XHR1cGRhdGUodSlcblx0fVxuXG5cdGNvbnN0IGVuZFR5cGUgPSBvcHRzPy51bnRpbCA/ICd1bnRpbCcgOiBvcHRzPy5jb3VudCA/ICdjb3VudCcgOiAnbmV2ZXInXG5cdGNvbnN0IGZyZXEgPSBGUkVRX1RPX1NUUltvcHRzPy5mcmVxID8/IFJSdWxlLkRBSUxZXSB8fCAnREFJTFknXG5cdGNvbnN0IGJ5d2Vla2RheSA9IEFycmF5LmlzQXJyYXkob3B0cz8uYnl3ZWVrZGF5KVxuXHRcdD8gb3B0cy5ieXdlZWtkYXlcblx0XHQ6IG9wdHM/LmJ5d2Vla2RheVxuXHRcdFx0PyBbb3B0cy5ieXdlZWtkYXldXG5cdFx0XHQ6IFtdXG5cblx0cmV0dXJuIChcblx0XHQ8Q2FyZCBkYXRhLXRlc3RpZD1cInJlY3VycmVuY2UtZWRpdG9yXCI+XG5cdFx0XHQ8Q2FyZEhlYWRlciBjbGFzc05hbWU9XCJwYi0zXCI+XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0yXCI+XG5cdFx0XHRcdFx0PENoZWNrYm94XG5cdFx0XHRcdFx0XHRjaGVja2VkPXtzaG93fVxuXHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9XCJ0b2dnbGUtcmVjdXJyZW5jZVwiXG5cdFx0XHRcdFx0XHRpZD1cInJlY3VycmluZ1wiXG5cdFx0XHRcdFx0XHRvbkNoZWNrZWRDaGFuZ2U9e3RvZ2dsZX1cblx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdDxDYXJkVGl0bGUgY2xhc3NOYW1lPVwidGV4dC1zbVwiPnt0KCdyZXBlYXQnKX08L0NhcmRUaXRsZT5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdHtzaG93ICYmIHZhbHVlICYmIChcblx0XHRcdFx0XHQ8cCBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtbXV0ZWQtZm9yZWdyb3VuZFwiPlxuXHRcdFx0XHRcdFx0e2dldERlc2NyaXB0aW9uKHZhbHVlLCB0KX1cblx0XHRcdFx0XHQ8L3A+XG5cdFx0XHRcdCl9XG5cdFx0XHQ8L0NhcmRIZWFkZXI+XG5cblx0XHRcdHtzaG93ICYmIChcblx0XHRcdFx0PENhcmRDb250ZW50IGNsYXNzTmFtZT1cInB0LTBcIj5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInNwYWNlLXktNFwiPlxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJncmlkIGdyaWQtY29scy0yIGdhcC00XCI+XG5cdFx0XHRcdFx0XHRcdDxkaXY+XG5cdFx0XHRcdFx0XHRcdFx0PExhYmVsIGNsYXNzTmFtZT1cInRleHQteHNcIiBodG1sRm9yPVwiZnJlcXVlbmN5XCI+XG5cdFx0XHRcdFx0XHRcdFx0XHR7dCgncmVwZWF0cycpfVxuXHRcdFx0XHRcdFx0XHRcdDwvTGFiZWw+XG5cdFx0XHRcdFx0XHRcdFx0PFNlbGVjdFxuXHRcdFx0XHRcdFx0XHRcdFx0b25WYWx1ZUNoYW5nZT17KGYpID0+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHVwZGF0ZSh7IGZyZXE6IEZSRVFfTUFQW2YgYXMga2V5b2YgdHlwZW9mIEZSRVFfTUFQXSB9KVxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0dmFsdWU9e2ZyZXF9XG5cdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0PFNlbGVjdFRyaWdnZXJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiaC04XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9XCJmcmVxdWVuY3ktc2VsZWN0XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ9XCJmcmVxdWVuY3lcIlxuXHRcdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8U2VsZWN0VmFsdWUgLz5cblx0XHRcdFx0XHRcdFx0XHRcdDwvU2VsZWN0VHJpZ2dlcj5cblx0XHRcdFx0XHRcdFx0XHRcdDxTZWxlY3RDb250ZW50PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7T2JqZWN0LmtleXMoRlJFUV9NQVApLm1hcCgoZikgPT4gKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxTZWxlY3RJdGVtIGtleT17Zn0gdmFsdWU9e2Z9PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0e3QoZi50b0xvd2VyQ2FzZSgpKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L1NlbGVjdEl0ZW0+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdCkpfVxuXHRcdFx0XHRcdFx0XHRcdFx0PC9TZWxlY3RDb250ZW50PlxuXHRcdFx0XHRcdFx0XHRcdDwvU2VsZWN0PlxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0PGRpdj5cblx0XHRcdFx0XHRcdFx0XHQ8TGFiZWwgY2xhc3NOYW1lPVwidGV4dC14c1wiIGh0bWxGb3I9XCJpbnRlcnZhbFwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0e3QoJ2V2ZXJ5Jyl9XG5cdFx0XHRcdFx0XHRcdFx0PC9MYWJlbD5cblx0XHRcdFx0XHRcdFx0XHQ8SW5wdXRcblx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImgtOFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRpZD1cImludGVydmFsXCJcblx0XHRcdFx0XHRcdFx0XHRcdG1pbj1cIjFcIlxuXHRcdFx0XHRcdFx0XHRcdFx0b25DaGFuZ2U9eyhlKSA9PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR1cGRhdGUoeyBpbnRlcnZhbDogcGFyc2VOdW0oZS50YXJnZXQudmFsdWUpIH0pXG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR0eXBlPVwibnVtYmVyXCJcblx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlPXtvcHRzPy5pbnRlcnZhbCB8fCAxfVxuXHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cblx0XHRcdFx0XHRcdHtvcHRzPy5mcmVxID09PSBSUnVsZS5XRUVLTFkgJiYgKFxuXHRcdFx0XHRcdFx0XHQ8ZGl2PlxuXHRcdFx0XHRcdFx0XHRcdDxMYWJlbCBjbGFzc05hbWU9XCJ0ZXh0LXhzXCI+e3QoJ3JlcGVhdE9uJyl9PC9MYWJlbD5cblx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC13cmFwIGdhcC0xIG10LTFcIj5cblx0XHRcdFx0XHRcdFx0XHRcdHt3ZWVrRGF5cy5tYXAoKGQsIGkpID0+IChcblx0XHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTFcIiBrZXk9e2QubGFiZWx9PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxDaGVja2JveFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2hlY2tlZD17Ynl3ZWVrZGF5LmluY2x1ZGVzKGQudmFsdWUpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ9e2BkYXktJHtpfWB9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvbkNoZWNrZWRDaGFuZ2U9eygpID0+IHRvZ2dsZURheShpKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxMYWJlbFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwidGV4dC14cyBjdXJzb3ItcG9pbnRlclwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRodG1sRm9yPXtgZGF5LSR7aX1gfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHtkLmxhYmVsfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvTGFiZWw+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdFx0KSl9XG5cdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0KX1cblxuXHRcdFx0XHRcdFx0PGRpdj5cblx0XHRcdFx0XHRcdFx0PExhYmVsIGNsYXNzTmFtZT1cInRleHQteHNcIj57dCgnZW5kcycpfTwvTGFiZWw+XG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwic3BhY2UteS0yIG10LTFcIj5cblx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMlwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0PENoZWNrYm94XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNoZWNrZWQ9e2VuZFR5cGUgPT09ICduZXZlcid9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlkPVwibmV2ZXJcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvbkNoZWNrZWRDaGFuZ2U9eygpID0+IHNldEVuZFR5cGUoJ25ldmVyJyl9XG5cdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdFx0PExhYmVsIGNsYXNzTmFtZT1cInRleHQteHNcIiBodG1sRm9yPVwibmV2ZXJcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0e3QoJ25ldmVyJyl9XG5cdFx0XHRcdFx0XHRcdFx0XHQ8L0xhYmVsPlxuXHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0yXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8Q2hlY2tib3hcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2hlY2tlZD17ZW5kVHlwZSA9PT0gJ2NvdW50J31cblx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ9XCJhZnRlclwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9uQ2hlY2tlZENoYW5nZT17KCkgPT4gc2V0RW5kVHlwZSgnY291bnQnKX1cblx0XHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8TGFiZWwgY2xhc3NOYW1lPVwidGV4dC14c1wiIGh0bWxGb3I9XCJhZnRlclwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7dCgnYWZ0ZXInKX1cblx0XHRcdFx0XHRcdFx0XHRcdDwvTGFiZWw+XG5cdFx0XHRcdFx0XHRcdFx0XHR7ZW5kVHlwZSA9PT0gJ2NvdW50JyAmJiAoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxJbnB1dFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImgtNiB3LTE2IHRleHQteHNcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPVwiY291bnQtaW5wdXRcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG1pbj1cIjFcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9uQ2hhbmdlPXsoZSkgPT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHVwZGF0ZSh7IGNvdW50OiBwYXJzZU51bShlLnRhcmdldC52YWx1ZSkgfSlcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZT1cIm51bWJlclwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFsdWU9e29wdHM/LmNvdW50IHx8IDF9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwidGV4dC14c1wiPnt0KCdvY2N1cnJlbmNlcycpfTwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMlwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0PENoZWNrYm94XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNoZWNrZWQ9e2VuZFR5cGUgPT09ICd1bnRpbCd9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlkPVwib25cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvbkNoZWNrZWRDaGFuZ2U9eygpID0+IHNldEVuZFR5cGUoJ3VudGlsJyl9XG5cdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdFx0PExhYmVsIGNsYXNzTmFtZT1cInRleHQteHNcIiBodG1sRm9yPVwib25cIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0e3QoJ29uJyl9XG5cdFx0XHRcdFx0XHRcdFx0XHQ8L0xhYmVsPlxuXHRcdFx0XHRcdFx0XHRcdFx0e2VuZFR5cGUgPT09ICd1bnRpbCcgJiYgKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8RGF0ZVBpY2tlclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImgtNlwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF0ZT17b3B0cz8udW50aWwgPz8gdW5kZWZpbmVkfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9uQ2hhbmdlPXsoZCkgPT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHVwZGF0ZSh7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHVudGlsOiBkID8gZGF5anMoZCkuZW5kT2YoJ2RheScpLnRvRGF0ZSgpIDogdW5kZWZpbmVkLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8L0NhcmRDb250ZW50PlxuXHRcdFx0KX1cblx0XHQ8L0NhcmQ+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuZnVuY3Rpb24gQ2FyZCh7IGNsYXNzTmFtZSwgLi4ucHJvcHMgfTogUmVhY3QuQ29tcG9uZW50UHJvcHM8J2Rpdic+KSB7XG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0J3RleHQtY2FyZC1mb3JlZ3JvdW5kIGZsZXggZmxleC1jb2wgZ2FwLTYgcm91bmRlZC14bCBib3JkZXIgc2hhZG93LXNtJyxcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0ZGF0YS1zbG90PVwiY2FyZFwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0Lz5cblx0KVxufVxuXG5mdW5jdGlvbiBDYXJkSGVhZGVyKHsgY2xhc3NOYW1lLCAuLi5wcm9wcyB9OiBSZWFjdC5Db21wb25lbnRQcm9wczwnZGl2Jz4pIHtcblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQnQGNvbnRhaW5lci9jYXJkLWhlYWRlciBncmlkIGF1dG8tcm93cy1taW4gZ3JpZC1yb3dzLVthdXRvX2F1dG9dIGl0ZW1zLXN0YXJ0IGdhcC0xLjUgcC00IHBiLTAgaGFzLWRhdGEtW3Nsb3Q9Y2FyZC1hY3Rpb25dOmdyaWQtY29scy1bMWZyX2F1dG9dJyxcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0ZGF0YS1zbG90PVwiY2FyZC1oZWFkZXJcIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdC8+XG5cdClcbn1cblxuZnVuY3Rpb24gQ2FyZFRpdGxlKHsgY2xhc3NOYW1lLCAuLi5wcm9wcyB9OiBSZWFjdC5Db21wb25lbnRQcm9wczwnZGl2Jz4pIHtcblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9e2NuKCdsZWFkaW5nLW5vbmUgZm9udC1zZW1pYm9sZCcsIGNsYXNzTmFtZSl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJjYXJkLXRpdGxlXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmZ1bmN0aW9uIENhcmREZXNjcmlwdGlvbih7IGNsYXNzTmFtZSwgLi4ucHJvcHMgfTogUmVhY3QuQ29tcG9uZW50UHJvcHM8J2Rpdic+KSB7XG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbigndGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHRleHQtc20nLCBjbGFzc05hbWUpfVxuXHRcdFx0ZGF0YS1zbG90PVwiY2FyZC1kZXNjcmlwdGlvblwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0Lz5cblx0KVxufVxuXG5mdW5jdGlvbiBDYXJkQWN0aW9uKHsgY2xhc3NOYW1lLCAuLi5wcm9wcyB9OiBSZWFjdC5Db21wb25lbnRQcm9wczwnZGl2Jz4pIHtcblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQnY29sLXN0YXJ0LTIgcm93LXNwYW4tMiByb3ctc3RhcnQtMSBzZWxmLXN0YXJ0IGp1c3RpZnktc2VsZi1lbmQnLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJjYXJkLWFjdGlvblwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0Lz5cblx0KVxufVxuXG5mdW5jdGlvbiBDYXJkQ29udGVudCh7IGNsYXNzTmFtZSwgLi4ucHJvcHMgfTogUmVhY3QuQ29tcG9uZW50UHJvcHM8J2Rpdic+KSB7XG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbigncC00IHB0LTAnLCBjbGFzc05hbWUpfVxuXHRcdFx0ZGF0YS1zbG90PVwiY2FyZC1jb250ZW50XCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmZ1bmN0aW9uIENhcmRGb290ZXIoeyBjbGFzc05hbWUsIC4uLnByb3BzIH06IFJlYWN0LkNvbXBvbmVudFByb3BzPCdkaXYnPikge1xuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oJ2ZsZXggaXRlbXMtY2VudGVyIHB4LTYgWy5ib3JkZXItdF06cHQtNicsIGNsYXNzTmFtZSl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJjYXJkLWZvb3RlclwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0Lz5cblx0KVxufVxuXG5leHBvcnQge1xuXHRDYXJkLFxuXHRDYXJkQWN0aW9uLFxuXHRDYXJkQ29udGVudCxcblx0Q2FyZERlc2NyaXB0aW9uLFxuXHRDYXJkRm9vdGVyLFxuXHRDYXJkSGVhZGVyLFxuXHRDYXJkVGl0bGUsXG59XG4iLAogICAgImltcG9ydCAqIGFzIFNlbGVjdFByaW1pdGl2ZSBmcm9tICdAcmFkaXgtdWkvcmVhY3Qtc2VsZWN0J1xuaW1wb3J0IHsgQ2hlY2tJY29uLCBDaGV2cm9uRG93bkljb24sIENoZXZyb25VcEljb24gfSBmcm9tICdsdWNpZGUtcmVhY3QnXG5pbXBvcnQgdHlwZSAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5mdW5jdGlvbiBTZWxlY3Qoe1xuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNlbGVjdFByaW1pdGl2ZS5Sb290Pikge1xuXHRyZXR1cm4gPFNlbGVjdFByaW1pdGl2ZS5Sb290IGRhdGEtc2xvdD1cInNlbGVjdFwiIHsuLi5wcm9wc30gLz5cbn1cblxuZnVuY3Rpb24gU2VsZWN0R3JvdXAoe1xuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNlbGVjdFByaW1pdGl2ZS5Hcm91cD4pIHtcblx0cmV0dXJuIDxTZWxlY3RQcmltaXRpdmUuR3JvdXAgZGF0YS1zbG90PVwic2VsZWN0LWdyb3VwXCIgey4uLnByb3BzfSAvPlxufVxuXG5mdW5jdGlvbiBTZWxlY3RWYWx1ZSh7XG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgU2VsZWN0UHJpbWl0aXZlLlZhbHVlPikge1xuXHRyZXR1cm4gPFNlbGVjdFByaW1pdGl2ZS5WYWx1ZSBkYXRhLXNsb3Q9XCJzZWxlY3QtdmFsdWVcIiB7Li4ucHJvcHN9IC8+XG59XG5cbmZ1bmN0aW9uIFNlbGVjdFRyaWdnZXIoe1xuXHRjbGFzc05hbWUsXG5cdHNpemUgPSAnZGVmYXVsdCcsXG5cdGNoaWxkcmVuLFxuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNlbGVjdFByaW1pdGl2ZS5UcmlnZ2VyPiAmIHtcblx0c2l6ZT86ICdzbScgfCAnZGVmYXVsdCdcbn0pIHtcblx0cmV0dXJuIChcblx0XHQ8U2VsZWN0UHJpbWl0aXZlLlRyaWdnZXJcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFwiYm9yZGVyLWlucHV0IGRhdGEtW3BsYWNlaG9sZGVyXTp0ZXh0LW11dGVkLWZvcmVncm91bmQgWyZfc3ZnOm5vdChbY2xhc3MqPSd0ZXh0LSddKV06dGV4dC1tdXRlZC1mb3JlZ3JvdW5kIGZvY3VzLXZpc2libGU6Ym9yZGVyLXJpbmcgZm9jdXMtdmlzaWJsZTpyaW5nLXJpbmcvNTAgYXJpYS1pbnZhbGlkOnJpbmctZGVzdHJ1Y3RpdmUvMjAgZGFyazphcmlhLWludmFsaWQ6cmluZy1kZXN0cnVjdGl2ZS80MCBhcmlhLWludmFsaWQ6Ym9yZGVyLWRlc3RydWN0aXZlIGRhcms6YmctaW5wdXQvMzAgZGFyazpob3ZlcjpiZy1pbnB1dC81MCBmbGV4IHctZml0IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ2FwLTIgcm91bmRlZC1tZCBib3JkZXIgYmctdHJhbnNwYXJlbnQgcHgtMyBweS0yIHRleHQtc20gd2hpdGVzcGFjZS1ub3dyYXAgc2hhZG93LXhzIHRyYW5zaXRpb24tW2NvbG9yLGJveC1zaGFkb3ddIG91dGxpbmUtbm9uZSBmb2N1cy12aXNpYmxlOnJpbmctWzNweF0gZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIGRpc2FibGVkOm9wYWNpdHktNTAgZGF0YS1bc2l6ZT1kZWZhdWx0XTpoLTkgZGF0YS1bc2l6ZT1zbV06aC04ICo6ZGF0YS1bc2xvdD1zZWxlY3QtdmFsdWVdOmxpbmUtY2xhbXAtMSAqOmRhdGEtW3Nsb3Q9c2VsZWN0LXZhbHVlXTpmbGV4ICo6ZGF0YS1bc2xvdD1zZWxlY3QtdmFsdWVdOml0ZW1zLWNlbnRlciAqOmRhdGEtW3Nsb3Q9c2VsZWN0LXZhbHVlXTpnYXAtMiBbJl9zdmddOnBvaW50ZXItZXZlbnRzLW5vbmUgWyZfc3ZnXTpzaHJpbmstMCBbJl9zdmc6bm90KFtjbGFzcyo9J3NpemUtJ10pXTpzaXplLTRcIixcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0ZGF0YS1zaXplPXtzaXplfVxuXHRcdFx0ZGF0YS1zbG90PVwic2VsZWN0LXRyaWdnZXJcIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdD5cblx0XHRcdHtjaGlsZHJlbn1cblx0XHRcdDxTZWxlY3RQcmltaXRpdmUuSWNvbiBhc0NoaWxkPlxuXHRcdFx0XHQ8Q2hldnJvbkRvd25JY29uIGNsYXNzTmFtZT1cInNpemUtNCBvcGFjaXR5LTUwXCIgLz5cblx0XHRcdDwvU2VsZWN0UHJpbWl0aXZlLkljb24+XG5cdFx0PC9TZWxlY3RQcmltaXRpdmUuVHJpZ2dlcj5cblx0KVxufVxuXG5mdW5jdGlvbiBTZWxlY3RDb250ZW50KHtcblx0Y2xhc3NOYW1lLFxuXHRjaGlsZHJlbixcblx0cG9zaXRpb24gPSAncG9wcGVyJyxcblx0YWxpZ24gPSAnY2VudGVyJyxcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTZWxlY3RQcmltaXRpdmUuQ29udGVudD4pIHtcblx0cmV0dXJuIChcblx0XHQ8U2VsZWN0UHJpbWl0aXZlLlBvcnRhbD5cblx0XHRcdDxTZWxlY3RQcmltaXRpdmUuQ29udGVudFxuXHRcdFx0XHRhbGlnbj17YWxpZ259XG5cdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0J2JnLXBvcG92ZXIgdGV4dC1wb3BvdmVyLWZvcmVncm91bmQgZGF0YS1bc3RhdGU9b3Blbl06YW5pbWF0ZS1pbiBkYXRhLVtzdGF0ZT1jbG9zZWRdOmFuaW1hdGUtb3V0IGRhdGEtW3N0YXRlPWNsb3NlZF06ZmFkZS1vdXQtMCBkYXRhLVtzdGF0ZT1vcGVuXTpmYWRlLWluLTAgZGF0YS1bc3RhdGU9Y2xvc2VkXTp6b29tLW91dC05NSBkYXRhLVtzdGF0ZT1vcGVuXTp6b29tLWluLTk1IGRhdGEtW3NpZGU9Ym90dG9tXTpzbGlkZS1pbi1mcm9tLXRvcC0yIGRhdGEtW3NpZGU9bGVmdF06c2xpZGUtaW4tZnJvbS1yaWdodC0yIGRhdGEtW3NpZGU9cmlnaHRdOnNsaWRlLWluLWZyb20tbGVmdC0yIGRhdGEtW3NpZGU9dG9wXTpzbGlkZS1pbi1mcm9tLWJvdHRvbS0yIHJlbGF0aXZlIHotNTAgbWF4LWgtKC0tcmFkaXgtc2VsZWN0LWNvbnRlbnQtYXZhaWxhYmxlLWhlaWdodCkgbWluLXctWzhyZW1dIG9yaWdpbi0oLS1yYWRpeC1zZWxlY3QtY29udGVudC10cmFuc2Zvcm0tb3JpZ2luKSBvdmVyZmxvdy14LWhpZGRlbiBvdmVyZmxvdy15LWF1dG8gcm91bmRlZC1tZCBib3JkZXIgc2hhZG93LW1kJyxcblx0XHRcdFx0XHRwb3NpdGlvbiA9PT0gJ3BvcHBlcicgJiZcblx0XHRcdFx0XHRcdCdkYXRhLVtzaWRlPWJvdHRvbV06dHJhbnNsYXRlLXktMSBkYXRhLVtzaWRlPWxlZnRdOi10cmFuc2xhdGUteC0xIGRhdGEtW3NpZGU9cmlnaHRdOnRyYW5zbGF0ZS14LTEgZGF0YS1bc2lkZT10b3BdOi10cmFuc2xhdGUteS0xJyxcblx0XHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdFx0KX1cblx0XHRcdFx0ZGF0YS1zbG90PVwic2VsZWN0LWNvbnRlbnRcIlxuXHRcdFx0XHRwb3NpdGlvbj17cG9zaXRpb259XG5cdFx0XHRcdHsuLi5wcm9wc31cblx0XHRcdD5cblx0XHRcdFx0PFNlbGVjdFNjcm9sbFVwQnV0dG9uIC8+XG5cdFx0XHRcdDxTZWxlY3RQcmltaXRpdmUuVmlld3BvcnRcblx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0J3AtMScsXG5cdFx0XHRcdFx0XHRwb3NpdGlvbiA9PT0gJ3BvcHBlcicgJiZcblx0XHRcdFx0XHRcdFx0J2gtW3ZhcigtLXJhZGl4LXNlbGVjdC10cmlnZ2VyLWhlaWdodCldIHctZnVsbCBtaW4tdy1bdmFyKC0tcmFkaXgtc2VsZWN0LXRyaWdnZXItd2lkdGgpXSBzY3JvbGwtbXktMSdcblx0XHRcdFx0XHQpfVxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0e2NoaWxkcmVufVxuXHRcdFx0XHQ8L1NlbGVjdFByaW1pdGl2ZS5WaWV3cG9ydD5cblx0XHRcdFx0PFNlbGVjdFNjcm9sbERvd25CdXR0b24gLz5cblx0XHRcdDwvU2VsZWN0UHJpbWl0aXZlLkNvbnRlbnQ+XG5cdFx0PC9TZWxlY3RQcmltaXRpdmUuUG9ydGFsPlxuXHQpXG59XG5cbmZ1bmN0aW9uIFNlbGVjdExhYmVsKHtcblx0Y2xhc3NOYW1lLFxuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNlbGVjdFByaW1pdGl2ZS5MYWJlbD4pIHtcblx0cmV0dXJuIChcblx0XHQ8U2VsZWN0UHJpbWl0aXZlLkxhYmVsXG5cdFx0XHRjbGFzc05hbWU9e2NuKCd0ZXh0LW11dGVkLWZvcmVncm91bmQgcHgtMiBweS0xLjUgdGV4dC14cycsIGNsYXNzTmFtZSl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJzZWxlY3QtbGFiZWxcIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdC8+XG5cdClcbn1cblxuZnVuY3Rpb24gU2VsZWN0SXRlbSh7XG5cdGNsYXNzTmFtZSxcblx0Y2hpbGRyZW4sXG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgU2VsZWN0UHJpbWl0aXZlLkl0ZW0+KSB7XG5cdHJldHVybiAoXG5cdFx0PFNlbGVjdFByaW1pdGl2ZS5JdGVtXG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcImZvY3VzOmJnLWFjY2VudCBmb2N1czp0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kIFsmX3N2Zzpub3QoW2NsYXNzKj0ndGV4dC0nXSldOnRleHQtbXV0ZWQtZm9yZWdyb3VuZCByZWxhdGl2ZSBmbGV4IHctZnVsbCBjdXJzb3ItZGVmYXVsdCBpdGVtcy1jZW50ZXIgZ2FwLTIgcm91bmRlZC1zbSBweS0xLjUgcHItOCBwbC0yIHRleHQtc20gb3V0bGluZS1oaWRkZW4gc2VsZWN0LW5vbmUgZGF0YS1bZGlzYWJsZWRdOnBvaW50ZXItZXZlbnRzLW5vbmUgZGF0YS1bZGlzYWJsZWRdOm9wYWNpdHktNTAgWyZfc3ZnXTpwb2ludGVyLWV2ZW50cy1ub25lIFsmX3N2Z106c2hyaW5rLTAgWyZfc3ZnOm5vdChbY2xhc3MqPSdzaXplLSddKV06c2l6ZS00ICo6W3NwYW5dOmxhc3Q6ZmxleCAqOltzcGFuXTpsYXN0Oml0ZW1zLWNlbnRlciAqOltzcGFuXTpsYXN0OmdhcC0yXCIsXG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHRcdGRhdGEtc2xvdD1cInNlbGVjdC1pdGVtXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQ+XG5cdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJhYnNvbHV0ZSByaWdodC0yIGZsZXggc2l6ZS0zLjUgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyXCI+XG5cdFx0XHRcdDxTZWxlY3RQcmltaXRpdmUuSXRlbUluZGljYXRvcj5cblx0XHRcdFx0XHQ8Q2hlY2tJY29uIGNsYXNzTmFtZT1cInNpemUtNFwiIC8+XG5cdFx0XHRcdDwvU2VsZWN0UHJpbWl0aXZlLkl0ZW1JbmRpY2F0b3I+XG5cdFx0XHQ8L3NwYW4+XG5cdFx0XHQ8U2VsZWN0UHJpbWl0aXZlLkl0ZW1UZXh0PntjaGlsZHJlbn08L1NlbGVjdFByaW1pdGl2ZS5JdGVtVGV4dD5cblx0XHQ8L1NlbGVjdFByaW1pdGl2ZS5JdGVtPlxuXHQpXG59XG5cbmZ1bmN0aW9uIFNlbGVjdFNlcGFyYXRvcih7XG5cdGNsYXNzTmFtZSxcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTZWxlY3RQcmltaXRpdmUuU2VwYXJhdG9yPikge1xuXHRyZXR1cm4gKFxuXHRcdDxTZWxlY3RQcmltaXRpdmUuU2VwYXJhdG9yXG5cdFx0XHRjbGFzc05hbWU9e2NuKCdiZy1ib3JkZXIgcG9pbnRlci1ldmVudHMtbm9uZSAtbXgtMSBteS0xIGgtcHgnLCBjbGFzc05hbWUpfVxuXHRcdFx0ZGF0YS1zbG90PVwic2VsZWN0LXNlcGFyYXRvclwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0Lz5cblx0KVxufVxuXG5mdW5jdGlvbiBTZWxlY3RTY3JvbGxVcEJ1dHRvbih7XG5cdGNsYXNzTmFtZSxcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTZWxlY3RQcmltaXRpdmUuU2Nyb2xsVXBCdXR0b24+KSB7XG5cdHJldHVybiAoXG5cdFx0PFNlbGVjdFByaW1pdGl2ZS5TY3JvbGxVcEJ1dHRvblxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0J2ZsZXggY3Vyc29yLWRlZmF1bHQgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHB5LTEnLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJzZWxlY3Qtc2Nyb2xsLXVwLWJ1dHRvblwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0PlxuXHRcdFx0PENoZXZyb25VcEljb24gY2xhc3NOYW1lPVwic2l6ZS00XCIgLz5cblx0XHQ8L1NlbGVjdFByaW1pdGl2ZS5TY3JvbGxVcEJ1dHRvbj5cblx0KVxufVxuXG5mdW5jdGlvbiBTZWxlY3RTY3JvbGxEb3duQnV0dG9uKHtcblx0Y2xhc3NOYW1lLFxuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNlbGVjdFByaW1pdGl2ZS5TY3JvbGxEb3duQnV0dG9uPikge1xuXHRyZXR1cm4gKFxuXHRcdDxTZWxlY3RQcmltaXRpdmUuU2Nyb2xsRG93bkJ1dHRvblxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0J2ZsZXggY3Vyc29yLWRlZmF1bHQgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHB5LTEnLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJzZWxlY3Qtc2Nyb2xsLWRvd24tYnV0dG9uXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQ+XG5cdFx0XHQ8Q2hldnJvbkRvd25JY29uIGNsYXNzTmFtZT1cInNpemUtNFwiIC8+XG5cdFx0PC9TZWxlY3RQcmltaXRpdmUuU2Nyb2xsRG93bkJ1dHRvbj5cblx0KVxufVxuXG5leHBvcnQge1xuXHRTZWxlY3QsXG5cdFNlbGVjdENvbnRlbnQsXG5cdFNlbGVjdEdyb3VwLFxuXHRTZWxlY3RJdGVtLFxuXHRTZWxlY3RMYWJlbCxcblx0U2VsZWN0U2Nyb2xsRG93bkJ1dHRvbixcblx0U2VsZWN0U2Nyb2xsVXBCdXR0b24sXG5cdFNlbGVjdFNlcGFyYXRvcixcblx0U2VsZWN0VHJpZ2dlcixcblx0U2VsZWN0VmFsdWUsXG59XG4iLAogICAgImltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBSZWN1cnJlbmNlRWRpdFNjb3BlIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL3R5cGVzJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuXG5leHBvcnQgZnVuY3Rpb24gdXNlUmVjdXJyaW5nRXZlbnRBY3Rpb25zKG9uQ29tcGxldGU/OiAoKSA9PiB2b2lkKSB7XG5cdGNvbnN0IHsgdXBkYXRlUmVjdXJyaW5nRXZlbnQsIGRlbGV0ZVJlY3VycmluZ0V2ZW50IH0gPVxuXHRcdHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KChjb250ZXh0KSA9PiAoe1xuXHRcdFx0dXBkYXRlUmVjdXJyaW5nRXZlbnQ6IGNvbnRleHQudXBkYXRlUmVjdXJyaW5nRXZlbnQsXG5cdFx0XHRkZWxldGVSZWN1cnJpbmdFdmVudDogY29udGV4dC5kZWxldGVSZWN1cnJpbmdFdmVudCxcblx0XHR9KSlcblxuXHRjb25zdCBbZGlhbG9nU3RhdGUsIHNldERpYWxvZ1N0YXRlXSA9IHVzZVN0YXRlPHtcblx0XHRpc09wZW46IGJvb2xlYW5cblx0XHRvcGVyYXRpb25UeXBlOiAnZWRpdCcgfCAnZGVsZXRlJ1xuXHRcdGV2ZW50OiBDYWxlbmRhckV2ZW50IHwgbnVsbFxuXHRcdHVwZGF0ZXM/OiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+XG5cdFx0b25Db25maXJtPzogKHNjb3BlOiBSZWN1cnJlbmNlRWRpdFNjb3BlKSA9PiB2b2lkXG5cdH0+KHtcblx0XHRpc09wZW46IGZhbHNlLFxuXHRcdG9wZXJhdGlvblR5cGU6ICdlZGl0Jyxcblx0XHRldmVudDogbnVsbCxcblx0fSlcblxuXHRjb25zdCBvcGVuRWRpdERpYWxvZyA9IHVzZUNhbGxiYWNrKFxuXHRcdChldmVudDogQ2FsZW5kYXJFdmVudCwgdXBkYXRlczogUGFydGlhbDxDYWxlbmRhckV2ZW50PikgPT4ge1xuXHRcdFx0c2V0RGlhbG9nU3RhdGUoe1xuXHRcdFx0XHRpc09wZW46IHRydWUsXG5cdFx0XHRcdG9wZXJhdGlvblR5cGU6ICdlZGl0Jyxcblx0XHRcdFx0ZXZlbnQsXG5cdFx0XHRcdHVwZGF0ZXMsXG5cdFx0XHRcdG9uQ29uZmlybTogKHNjb3BlOiBSZWN1cnJlbmNlRWRpdFNjb3BlKSA9PiB7XG5cdFx0XHRcdFx0dXBkYXRlUmVjdXJyaW5nRXZlbnQoZXZlbnQsIHVwZGF0ZXMsIHtcblx0XHRcdFx0XHRcdHNjb3BlLFxuXHRcdFx0XHRcdFx0ZXZlbnREYXRlOiBldmVudC5zdGFydCxcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHR9LFxuXHRcdFx0fSlcblx0XHR9LFxuXHRcdFt1cGRhdGVSZWN1cnJpbmdFdmVudF1cblx0KVxuXG5cdGNvbnN0IG9wZW5EZWxldGVEaWFsb2cgPSB1c2VDYWxsYmFjayhcblx0XHQoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHtcblx0XHRcdHNldERpYWxvZ1N0YXRlKHtcblx0XHRcdFx0aXNPcGVuOiB0cnVlLFxuXHRcdFx0XHRvcGVyYXRpb25UeXBlOiAnZGVsZXRlJyxcblx0XHRcdFx0ZXZlbnQsXG5cdFx0XHRcdG9uQ29uZmlybTogKHNjb3BlOiBSZWN1cnJlbmNlRWRpdFNjb3BlKSA9PiB7XG5cdFx0XHRcdFx0ZGVsZXRlUmVjdXJyaW5nRXZlbnQoZXZlbnQsIHtcblx0XHRcdFx0XHRcdHNjb3BlLFxuXHRcdFx0XHRcdFx0ZXZlbnREYXRlOiBldmVudC5zdGFydCxcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHR9LFxuXHRcdFx0fSlcblx0XHR9LFxuXHRcdFtkZWxldGVSZWN1cnJpbmdFdmVudF1cblx0KVxuXG5cdGNvbnN0IGNsb3NlRGlhbG9nID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuXHRcdHNldERpYWxvZ1N0YXRlKHtcblx0XHRcdGlzT3BlbjogZmFsc2UsXG5cdFx0XHRvcGVyYXRpb25UeXBlOiAnZWRpdCcsXG5cdFx0XHRldmVudDogbnVsbCxcblx0XHR9KVxuXHR9LCBbXSlcblxuXHRjb25zdCBoYW5kbGVDb25maXJtID0gdXNlQ2FsbGJhY2soXG5cdFx0KHNjb3BlOiBSZWN1cnJlbmNlRWRpdFNjb3BlKSA9PiB7XG5cdFx0XHRpZiAoZGlhbG9nU3RhdGUub25Db25maXJtKSB7XG5cdFx0XHRcdGRpYWxvZ1N0YXRlLm9uQ29uZmlybShzY29wZSlcblx0XHRcdH1cblx0XHRcdGNsb3NlRGlhbG9nKClcblx0XHRcdC8vIENhbGwgb25Db21wbGV0ZSB0byBjbG9zZSB0aGUgcGFyZW50IGZvcm1cblx0XHRcdG9uQ29tcGxldGU/LigpXG5cdFx0fSxcblx0XHRbZGlhbG9nU3RhdGUsIGNsb3NlRGlhbG9nLCBvbkNvbXBsZXRlXVxuXHQpXG5cblx0cmV0dXJuIHtcblx0XHRkaWFsb2dTdGF0ZSxcblx0XHRvcGVuRWRpdERpYWxvZyxcblx0XHRvcGVuRGVsZXRlRGlhbG9nLFxuXHRcdGNsb3NlRGlhbG9nLFxuXHRcdGhhbmRsZUNvbmZpcm0sXG5cdH1cbn1cbiIsCiAgICAiaW1wb3J0IHtcblx0RGlhbG9nLFxuXHREaWFsb2dDb250ZW50LFxuXHREaWFsb2dEZXNjcmlwdGlvbixcblx0RGlhbG9nSGVhZGVyLFxuXHREaWFsb2dUaXRsZSxcbn0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2RpYWxvZydcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJy4uL3R5cGVzJ1xuaW1wb3J0IHsgRXZlbnRGb3JtIH0gZnJvbSAnLi9ldmVudC1mb3JtJ1xuXG5leHBvcnQgY29uc3QgRXZlbnRGb3JtRGlhbG9nID0gKCkgPT4ge1xuXHRjb25zdCB7XG5cdFx0dCxcblx0XHRzZWxlY3RlZEV2ZW50LFxuXHRcdGlzRXZlbnRGb3JtT3Blbixcblx0XHRjbG9zZUV2ZW50Rm9ybSxcblx0XHRhZGRFdmVudCxcblx0XHR1cGRhdGVFdmVudCxcblx0XHRkZWxldGVFdmVudCxcblx0XHRyZW5kZXJFdmVudEZvcm0sXG5cdH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgoY29udGV4dCkgPT4gKHtcblx0XHR0OiBjb250ZXh0LnQsXG5cdFx0c2VsZWN0ZWRFdmVudDogY29udGV4dC5zZWxlY3RlZEV2ZW50LFxuXHRcdGlzRXZlbnRGb3JtT3BlbjogY29udGV4dC5pc0V2ZW50Rm9ybU9wZW4sXG5cdFx0Y2xvc2VFdmVudEZvcm06IGNvbnRleHQuY2xvc2VFdmVudEZvcm0sXG5cdFx0YWRkRXZlbnQ6IGNvbnRleHQuYWRkRXZlbnQsXG5cdFx0dXBkYXRlRXZlbnQ6IGNvbnRleHQudXBkYXRlRXZlbnQsXG5cdFx0ZGVsZXRlRXZlbnQ6IGNvbnRleHQuZGVsZXRlRXZlbnQsXG5cdFx0cmVuZGVyRXZlbnRGb3JtOiBjb250ZXh0LnJlbmRlckV2ZW50Rm9ybSxcblx0fSkpXG5cblx0Y29uc3QgaGFuZGxlT25VcGRhdGUgPSAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHtcblx0XHR1cGRhdGVFdmVudChldmVudC5pZCwgZXZlbnQpXG5cdH1cblxuXHRjb25zdCBoYW5kbGVPbkRlbGV0ZSA9IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4ge1xuXHRcdGRlbGV0ZUV2ZW50KGV2ZW50LmlkKVxuXHR9XG5cblx0Y29uc3QgZXZlbnRGb3JtUHJvcHMgPSB7XG5cdFx0b3BlbjogaXNFdmVudEZvcm1PcGVuLFxuXHRcdG9uQ2xvc2U6IGNsb3NlRXZlbnRGb3JtLFxuXHRcdHNlbGVjdGVkRXZlbnQsXG5cdFx0b25BZGQ6IGFkZEV2ZW50LFxuXHRcdG9uVXBkYXRlOiBoYW5kbGVPblVwZGF0ZSxcblx0XHRvbkRlbGV0ZTogaGFuZGxlT25EZWxldGUsXG5cdH1cblxuXHRpZiAocmVuZGVyRXZlbnRGb3JtKSB7XG5cdFx0cmV0dXJuIHJlbmRlckV2ZW50Rm9ybShldmVudEZvcm1Qcm9wcylcblx0fVxuXG5cdHJldHVybiAoXG5cdFx0PERpYWxvZyBvbk9wZW5DaGFuZ2U9e2Nsb3NlRXZlbnRGb3JtfSBvcGVuPXtpc0V2ZW50Rm9ybU9wZW59PlxuXHRcdFx0PERpYWxvZ0NvbnRlbnQgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCBoLVs5MHZoXSB3LVs5MHZ3XSBtYXgtdy1bNTAwcHhdIHAtNCBzbTpwLTYgb3ZlcmZsb3ctaGlkZGVuIGdhcC0wXCI+XG5cdFx0XHRcdDxEaWFsb2dIZWFkZXIgY2xhc3NOYW1lPVwibWItMiBzbTptYi00IHNocmluay0wXCI+XG5cdFx0XHRcdFx0PERpYWxvZ1RpdGxlIGNsYXNzTmFtZT1cInRleHQtYmFzZSBzbTp0ZXh0LWxnXCI+XG5cdFx0XHRcdFx0XHR7c2VsZWN0ZWRFdmVudD8uaWQgPyB0KCdlZGl0RXZlbnQnKSA6IHQoJ2NyZWF0ZUV2ZW50Jyl9XG5cdFx0XHRcdFx0PC9EaWFsb2dUaXRsZT5cblx0XHRcdFx0XHQ8RGlhbG9nRGVzY3JpcHRpb24gY2xhc3NOYW1lPVwidGV4dC14cyBzbTp0ZXh0LXNtXCI+XG5cdFx0XHRcdFx0XHR7c2VsZWN0ZWRFdmVudD8uaWQgPyB0KCdlZGl0RXZlbnREZXRhaWxzJykgOiB0KCdhZGROZXdFdmVudCcpfVxuXHRcdFx0XHRcdDwvRGlhbG9nRGVzY3JpcHRpb24+XG5cdFx0XHRcdDwvRGlhbG9nSGVhZGVyPlxuXG5cdFx0XHRcdDxFdmVudEZvcm0gey4uLmV2ZW50Rm9ybVByb3BzfSAvPlxuXHRcdFx0PC9EaWFsb2dDb250ZW50PlxuXHRcdDwvRGlhbG9nPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB7IENhbGVuZGFyIGFzIENhbGVuZGFySWNvbiwgRG93bmxvYWQsIE1lbnUsIFBsdXMgfSBmcm9tICdsdWNpZGUtcmVhY3QnXG5pbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvYnV0dG9uJ1xuaW1wb3J0IHtcblx0UG9wb3Zlcixcblx0UG9wb3ZlckNvbnRlbnQsXG5cdFBvcG92ZXJUcmlnZ2VyLFxufSBmcm9tICdAL2NvbXBvbmVudHMvdWkvcG9wb3ZlcidcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgeyBkb3dubG9hZElDYWxlbmRhciB9IGZyb20gJ0AvbGliL3V0aWxzL2V4cG9ydC1pY2FsJ1xuaW1wb3J0IFRpdGxlQ29udGVudCBmcm9tICcuL3RpdGxlLWNvbnRlbnQnXG5pbXBvcnQgVmlld0NvbnRyb2xzIGZyb20gJy4vdmlldy1jb250cm9scydcblxuaW50ZXJmYWNlIEhlYWRlclByb3BzIHtcblx0Y2xhc3NOYW1lPzogc3RyaW5nXG59XG5cbmNvbnN0IEhlYWRlcjogUmVhY3QuRkM8SGVhZGVyUHJvcHM+ID0gKHsgY2xhc3NOYW1lID0gJycgfSkgPT4ge1xuXHRjb25zdCB7XG5cdFx0dmlldyxcblx0XHRzZXRWaWV3LFxuXHRcdG5leHRQZXJpb2QsXG5cdFx0cHJldlBlcmlvZCxcblx0XHR0b2RheSxcblx0XHRvcGVuRXZlbnRGb3JtLFxuXHRcdGhlYWRlckNvbXBvbmVudCxcblx0XHRoZWFkZXJDbGFzc05hbWUsXG5cdFx0cmF3RXZlbnRzLFxuXHRcdHQsXG5cdH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgoY3R4KSA9PiAoe1xuXHRcdHZpZXc6IGN0eC52aWV3LFxuXHRcdHNldFZpZXc6IGN0eC5zZXRWaWV3LFxuXHRcdG5leHRQZXJpb2Q6IGN0eC5uZXh0UGVyaW9kLFxuXHRcdHByZXZQZXJpb2Q6IGN0eC5wcmV2UGVyaW9kLFxuXHRcdHRvZGF5OiBjdHgudG9kYXksXG5cdFx0b3BlbkV2ZW50Rm9ybTogY3R4Lm9wZW5FdmVudEZvcm0sXG5cdFx0aGVhZGVyQ29tcG9uZW50OiBjdHguaGVhZGVyQ29tcG9uZW50LFxuXHRcdGhlYWRlckNsYXNzTmFtZTogY3R4LmhlYWRlckNsYXNzTmFtZSxcblx0XHRyYXdFdmVudHM6IGN0eC5yYXdFdmVudHMsXG5cdFx0dDogY3R4LnQsXG5cdH0pKVxuXG5cdGNvbnN0IFttb2JpbGVNZW51T3Blbiwgc2V0TW9iaWxlTWVudU9wZW5dID0gdXNlU3RhdGUoZmFsc2UpXG5cblx0Y29uc3QgY2xvc2VNb2JpbGVNZW51ID0gKCkgPT4gc2V0TW9iaWxlTWVudU9wZW4oZmFsc2UpXG5cblx0Y29uc3QgaGFuZGxlRXhwb3J0ID0gKCkgPT4ge1xuXHRcdGNvbnN0IGZpbGVuYW1lID0gYGlsYW15LWNhbGVuZGFyLSR7bmV3IERhdGUoKS50b0lTT1N0cmluZygpLnNwbGl0KCdUJylbMF19Lmljc2Bcblx0XHRkb3dubG9hZElDYWxlbmRhcihyYXdFdmVudHMsIGZpbGVuYW1lLCAnaWxhbXkgQ2FsZW5kYXInKVxuXHRcdGNsb3NlTW9iaWxlTWVudSgpXG5cdH1cblxuXHRjb25zdCBOZXdFdmVudEJ1dHRvbiA9ICgpID0+IChcblx0XHQ8QnV0dG9uXG5cdFx0XHRjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMVwiXG5cdFx0XHRvbkNsaWNrPXsoKSA9PiBvcGVuRXZlbnRGb3JtKCl9XG5cdFx0XHRzaXplPVwic21cIlxuXHRcdFx0dmFyaWFudD1cImRlZmF1bHRcIlxuXHRcdD5cblx0XHRcdDxQbHVzIGNsYXNzTmFtZT1cImgtNCB3LTRcIiAvPlxuXHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwiaGlkZGVuIEA0eGw6aW5saW5lXCI+e3QoJ25ldycpfTwvc3Bhbj5cblx0XHQ8L0J1dHRvbj5cblx0KVxuXG5cdGNvbnN0IEV4cG9ydEJ1dHRvbiA9ICh7IGZ1bGxXaWR0aCA9IGZhbHNlIH06IHsgZnVsbFdpZHRoPzogYm9vbGVhbiB9KSA9PiAoXG5cdFx0PEJ1dHRvblxuXHRcdFx0Y2xhc3NOYW1lPXtjbignZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEnLCBmdWxsV2lkdGggJiYgJ3ctZnVsbCBnYXAtMicpfVxuXHRcdFx0b25DbGljaz17aGFuZGxlRXhwb3J0fVxuXHRcdFx0c2l6ZT1cInNtXCJcblx0XHRcdHZhcmlhbnQ9XCJvdXRsaW5lXCJcblx0XHQ+XG5cdFx0XHQ8RG93bmxvYWQgY2xhc3NOYW1lPVwiaC00IHctNFwiIC8+XG5cdFx0XHR7ZnVsbFdpZHRoID8gKFxuXHRcdFx0XHRgJHt0KCdleHBvcnQnKX0gQ2FsZW5kYXIgKC5pY3MpYFxuXHRcdFx0KSA6IChcblx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwiaGlkZGVuIEA0eGwvYmFzZS1oZWFkZXI6aW5saW5lXCI+e3QoJ2V4cG9ydCcpfTwvc3Bhbj5cblx0XHRcdCl9XG5cdFx0PC9CdXR0b24+XG5cdClcblxuXHRpZiAoaGVhZGVyQ29tcG9uZW50KSB7XG5cdFx0cmV0dXJuIGhlYWRlckNvbXBvbmVudFxuXHR9XG5cblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9XCJAY29udGFpbmVyL2Jhc2UtaGVhZGVyIHctZnVsbFwiXG5cdFx0XHRkYXRhLXRlc3RpZD1cImNhbGVuZGFyLWhlYWRlclwiXG5cdFx0PlxuXHRcdFx0PGRpdlxuXHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdCdmbGV4IGp1c3RpZnktY2VudGVyIEAyeGwvYmFzZS1oZWFkZXI6anVzdGlmeS1iZXR3ZWVuIGZsZXgtd3JhcCBpdGVtcy1jZW50ZXIgZ2FwLTInLFxuXHRcdFx0XHRcdGNsYXNzTmFtZSxcblx0XHRcdFx0XHRoZWFkZXJDbGFzc05hbWVcblx0XHRcdFx0KX1cblx0XHRcdD5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtd3JhcCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTEgQDJ4bC9iYXNlLWhlYWRlcjpqdXN0aWZ5LXN0YXJ0XCI+XG5cdFx0XHRcdFx0PENhbGVuZGFySWNvbiBjbGFzc05hbWU9XCJoLTUgdy01XCIgLz5cblx0XHRcdFx0XHQ8VGl0bGVDb250ZW50IC8+XG5cdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LXdyYXAganVzdGlmeS1zdGFydCBAeGwvYmFzZS1oZWFkZXI6anVzdGlmeS1jZW50ZXIgZ2FwLTEgQDR4bC9iYXNlLWhlYWRlcjpqdXN0aWZ5LWVuZCBvdmVyZmxvdy14LWF1dG9cIj5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImhpZGRlbiBAbWQvYmFzZS1oZWFkZXI6ZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1zdGFydCBnYXAtMVwiPlxuXHRcdFx0XHRcdFx0PFZpZXdDb250cm9sc1xuXHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJqdXN0aWZ5LWVuZFwiXG5cdFx0XHRcdFx0XHRcdGN1cnJlbnRWaWV3PXt2aWV3fVxuXHRcdFx0XHRcdFx0XHRvbkNoYW5nZT17c2V0Vmlld31cblx0XHRcdFx0XHRcdFx0b25OZXh0PXtuZXh0UGVyaW9kfVxuXHRcdFx0XHRcdFx0XHRvblByZXZpb3VzPXtwcmV2UGVyaW9kfVxuXHRcdFx0XHRcdFx0XHRvblRvZGF5PXt0b2RheX1cblx0XHRcdFx0XHRcdFx0dmFyaWFudD1cImRlZmF1bHRcIlxuXHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdDxOZXdFdmVudEJ1dHRvbiAvPlxuXHRcdFx0XHRcdFx0PEV4cG9ydEJ1dHRvbiAvPlxuXHRcdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWVuZCBnYXAtMSBAbWQvYmFzZS1oZWFkZXI6aGlkZGVuXCI+XG5cdFx0XHRcdFx0XHQ8TmV3RXZlbnRCdXR0b24gLz5cblx0XHRcdFx0XHRcdDxQb3BvdmVyIG9uT3BlbkNoYW5nZT17c2V0TW9iaWxlTWVudU9wZW59IG9wZW49e21vYmlsZU1lbnVPcGVufT5cblx0XHRcdFx0XHRcdFx0PFBvcG92ZXJUcmlnZ2VyIGFzQ2hpbGQ+XG5cdFx0XHRcdFx0XHRcdFx0PEJ1dHRvbiBzaXplPVwic21cIiB2YXJpYW50PVwib3V0bGluZVwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0PE1lbnUgY2xhc3NOYW1lPVwiaC00IHctNFwiIC8+XG5cdFx0XHRcdFx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHRcdFx0XHRcdDwvUG9wb3ZlclRyaWdnZXI+XG5cdFx0XHRcdFx0XHRcdDxQb3BvdmVyQ29udGVudCBhbGlnbj1cImVuZFwiIGNsYXNzTmFtZT1cInctWzI0MHB4XSBwLTJcIj5cblx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInNwYWNlLXktMlwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0PFZpZXdDb250cm9sc1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRjdXJyZW50Vmlldz17dmlld31cblx0XHRcdFx0XHRcdFx0XHRcdFx0b25DaGFuZ2U9eyh2KSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0c2V0Vmlldyh2KVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsb3NlTW9iaWxlTWVudSgpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9uTmV4dD17KCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG5leHRQZXJpb2QoKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsb3NlTW9iaWxlTWVudSgpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9uUHJldmlvdXM9eygpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRwcmV2UGVyaW9kKClcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbG9zZU1vYmlsZU1lbnUoKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvblRvZGF5PXsoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dG9kYXkoKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsb3NlTW9iaWxlTWVudSgpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhcmlhbnQ9XCJncmlkXCJcblx0XHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInB0LTIgYm9yZGVyLXRcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0PEV4cG9ydEJ1dHRvbiBmdWxsV2lkdGggLz5cblx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHQ8L1BvcG92ZXJDb250ZW50PlxuXHRcdFx0XHRcdFx0PC9Qb3BvdmVyPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdDwvZGl2PlxuXHRcdDwvZGl2PlxuXHQpXG59XG5cbmV4cG9ydCBkZWZhdWx0IEhlYWRlclxuIiwKICAgICJpbXBvcnQgeyBSUnVsZSB9IGZyb20gJ3JydWxlJ1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IGRheWpzLCB7IHR5cGUgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcblxuY29uc3QgQ1JMRiA9ICdcXHJcXG4nXG5cbmNvbnN0IFVUQ19WVElNRVpPTkUgPSBbXG5cdCdCRUdJTjpWVElNRVpPTkUnLFxuXHQnVFpJRDpVVEMnLFxuXHQnQkVHSU46U1RBTkRBUkQnLFxuXHQnRFRTVEFSVDoxOTcwMDEwMVQwMDAwMDAnLFxuXHQnVFpOQU1FOlVUQycsXG5cdCdUWk9GRlNFVEZST006KzAwMDAnLFxuXHQnVFpPRkZTRVRUTzorMDAwMCcsXG5cdCdFTkQ6U1RBTkRBUkQnLFxuXHQnRU5EOlZUSU1FWk9ORScsXG5dLmpvaW4oQ1JMRilcblxuY29uc3QgZXNjYXBlVGV4dCA9ICh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuXHRyZXR1cm4gdGV4dFxuXHRcdC5yZXBsYWNlQWxsKCdcXFxcJywgJ1xcXFxcXFxcJylcblx0XHQucmVwbGFjZUFsbCgnOycsICdcXFxcOycpXG5cdFx0LnJlcGxhY2VBbGwoJywnLCAnXFxcXCwnKVxuXHRcdC5yZXBsYWNlQWxsKCdcXG4nLCAnXFxcXG4nKVxuXHRcdC5yZXBsYWNlQWxsKCdcXHInLCAnJylcbn1cblxuY29uc3QgZm9ybWF0RGF0ZSA9IChkYXRlOiBEYXlqcywgaXNBbGxEYXkgPSBmYWxzZSk6IHN0cmluZyA9PiB7XG5cdHJldHVybiBpc0FsbERheVxuXHRcdD8gZGF0ZS5mb3JtYXQoJ1lZWVlNTUREJylcblx0XHQ6IGRhdGUudXRjKCkuZm9ybWF0KCdZWVlZTU1ERFtUXUhIbW1zc1taXScpXG59XG5cbmNvbnN0IGdldFVJRCA9IChldmVudDogQ2FsZW5kYXJFdmVudCk6IHN0cmluZyA9PiB7XG5cdHJldHVybiBldmVudC51aWQgfHwgYCR7ZXZlbnQuaWR9QGlsYW15LmNhbGVuZGFyYFxufVxuXG5jb25zdCBmb3JtYXRSUnVsZSA9IChycnVsZU9wdGlvbnM6IHVua25vd24pOiBzdHJpbmcgPT4ge1xuXHR0cnkge1xuXHRcdGNvbnN0IHJydWxlU3RyaW5nID0gbmV3IFJSdWxlKFxuXHRcdFx0cnJ1bGVPcHRpb25zIGFzIENvbnN0cnVjdG9yUGFyYW1ldGVyczx0eXBlb2YgUlJ1bGU+WzBdXG5cdFx0KS50b1N0cmluZygpXG5cdFx0cmV0dXJuIChcblx0XHRcdHJydWxlU3RyaW5nLnNwbGl0KCdcXG4nKS5maW5kKChsaW5lKSA9PiBsaW5lLnN0YXJ0c1dpdGgoJ1JSVUxFOicpKSB8fCAnJ1xuXHRcdClcblx0fSBjYXRjaCB7XG5cdFx0cmV0dXJuICcnXG5cdH1cbn1cblxuY29uc3QgY29udmVydEV2ZW50VG9WRXZlbnQgPSAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpOiBzdHJpbmcgPT4ge1xuXHRjb25zdCB0aW1lc3RhbXAgPSBkYXlqcygpLnV0YygpLmZvcm1hdCgnWVlZWU1NRERbVF1ISG1tc3NbWl0nKVxuXHRjb25zdCBkYXRlUGFyYW0gPSBldmVudC5hbGxEYXkgPyAnO1ZBTFVFPURBVEUnIDogJydcblx0Y29uc3QgcnJ1bGUgPSBldmVudC5ycnVsZSA/IGZvcm1hdFJSdWxlKGV2ZW50LnJydWxlKSA6ICcnXG5cblx0Y29uc3QgZXhkYXRlcyA9IGV2ZW50LmV4ZGF0ZXM/Lmxlbmd0aFxuXHRcdD8gZXZlbnQuZXhkYXRlcy5tYXAoKGQpID0+IGZvcm1hdERhdGUoZGF5anMoZCksIGV2ZW50LmFsbERheSkpLmpvaW4oJywnKVxuXHRcdDogbnVsbFxuXG5cdGNvbnN0IHJlY3VycmVuY2VJZCA9IGV2ZW50LnJlY3VycmVuY2VJZFxuXHRcdD8gZm9ybWF0RGF0ZShkYXlqcyhldmVudC5yZWN1cnJlbmNlSWQpLCBldmVudC5hbGxEYXkpXG5cdFx0OiBudWxsXG5cblx0Y29uc3QgbGluZXMgPSBbXG5cdFx0J0JFR0lOOlZFVkVOVCcsXG5cdFx0YFVJRDoke2dldFVJRChldmVudCl9YCxcblx0XHRgRFRTVEFSVCR7ZGF0ZVBhcmFtfToke2Zvcm1hdERhdGUoZXZlbnQuc3RhcnQsIGV2ZW50LmFsbERheSl9YCxcblx0XHRgRFRFTkQke2RhdGVQYXJhbX06JHtmb3JtYXREYXRlKGV2ZW50LmVuZCwgZXZlbnQuYWxsRGF5KX1gLFxuXHRcdGBTVU1NQVJZOiR7ZXNjYXBlVGV4dChldmVudC50aXRsZSl9YCxcblx0XHRldmVudC5kZXNjcmlwdGlvbiAmJiBgREVTQ1JJUFRJT046JHtlc2NhcGVUZXh0KGV2ZW50LmRlc2NyaXB0aW9uKX1gLFxuXHRcdGV2ZW50LmxvY2F0aW9uICYmIGBMT0NBVElPTjoke2VzY2FwZVRleHQoZXZlbnQubG9jYXRpb24pfWAsXG5cdFx0cnJ1bGUsXG5cdFx0ZXhkYXRlcyAmJiBgRVhEQVRFOiR7ZXhkYXRlc31gLFxuXHRcdHJlY3VycmVuY2VJZCAmJiBgUkVDVVJSRU5DRS1JRDoke3JlY3VycmVuY2VJZH1gLFxuXHRcdGBEVFNUQU1QOiR7dGltZXN0YW1wfWAsXG5cdFx0YENSRUFURUQ6JHt0aW1lc3RhbXB9YCxcblx0XHRgTEFTVC1NT0RJRklFRDoke3RpbWVzdGFtcH1gLFxuXHRcdCdTVEFUVVM6Q09ORklSTUVEJyxcblx0XHQnU0VRVUVOQ0U6MCcsXG5cdFx0J1RSQU5TUDpPUEFRVUUnLFxuXHRcdCdFTkQ6VkVWRU5UJyxcblx0XVxuXG5cdHJldHVybiBsaW5lcy5maWx0ZXIoQm9vbGVhbikuam9pbihDUkxGKVxufVxuXG5jb25zdCBmaWx0ZXJFdmVudHMgPSAoZXZlbnRzOiBDYWxlbmRhckV2ZW50W10pOiBDYWxlbmRhckV2ZW50W10gPT4ge1xuXHRjb25zdCBzZWVuVUlEcyA9IG5ldyBTZXQ8c3RyaW5nPigpXG5cblx0cmV0dXJuIGV2ZW50cy5maWx0ZXIoKGV2ZW50KSA9PiB7XG5cdFx0Y29uc3QgdWlkID0gZ2V0VUlEKGV2ZW50KVxuXHRcdGNvbnN0IGlzQmFzZVJlY3VycmluZyA9IGV2ZW50LnJydWxlICYmICFldmVudC5yZWN1cnJlbmNlSWRcblx0XHRjb25zdCBpc01vZGlmaWVkSW5zdGFuY2UgPSBldmVudC5yZWN1cnJlbmNlSWQgJiYgIWV2ZW50LnJydWxlXG5cblx0XHRpZiAoaXNCYXNlUmVjdXJyaW5nKSB7XG5cdFx0XHRzZWVuVUlEcy5hZGQodWlkKVxuXHRcdFx0cmV0dXJuIHRydWVcblx0XHR9XG5cdFx0aWYgKGlzTW9kaWZpZWRJbnN0YW5jZSkge1xuXHRcdFx0cmV0dXJuIHRydWVcblx0XHR9XG5cdFx0cmV0dXJuICFldmVudC5ycnVsZSAmJiAhZXZlbnQucmVjdXJyZW5jZUlkICYmICFzZWVuVUlEcy5oYXModWlkKVxuXHR9KVxufVxuXG5leHBvcnQgY29uc3QgZXhwb3J0VG9JQ2FsZW5kYXIgPSAoXG5cdGV2ZW50czogQ2FsZW5kYXJFdmVudFtdLFxuXHRjYWxlbmRhck5hbWUgPSAnaWxhbXkgQ2FsZW5kYXInXG4pOiBzdHJpbmcgPT4ge1xuXHRjb25zdCBuYW1lID0gZXNjYXBlVGV4dChjYWxlbmRhck5hbWUpXG5cdGNvbnN0IHZldmVudFN0cmluZ3MgPSBmaWx0ZXJFdmVudHMoZXZlbnRzKS5tYXAoY29udmVydEV2ZW50VG9WRXZlbnQpXG5cblx0cmV0dXJuIFtcblx0XHQnQkVHSU46VkNBTEVOREFSJyxcblx0XHQnVkVSU0lPTjoyLjAnLFxuXHRcdCdQUk9ESUQ6LS8vaWxhbXkvL2lsYW15IENhbGVuZGFyLy9FTicsXG5cdFx0J0NBTFNDQUxFOkdSRUdPUklBTicsXG5cdFx0J01FVEhPRDpQVUJMSVNIJyxcblx0XHRgWC1XUi1DQUxOQU1FOiR7bmFtZX1gLFxuXHRcdGBYLVdSLUNBTERFU0M6RXhwb3J0ZWQgZnJvbSAke25hbWV9YCxcblx0XHRVVENfVlRJTUVaT05FLFxuXHRcdC4uLnZldmVudFN0cmluZ3MsXG5cdFx0J0VORDpWQ0FMRU5EQVInLFxuXHRdLmpvaW4oQ1JMRilcbn1cblxuZXhwb3J0IGNvbnN0IGRvd25sb2FkSUNhbGVuZGFyID0gKFxuXHRldmVudHM6IENhbGVuZGFyRXZlbnRbXSxcblx0ZmlsZW5hbWUgPSAnY2FsZW5kYXIuaWNzJyxcblx0Y2FsZW5kYXJOYW1lID0gJ2lsYW15IENhbGVuZGFyJ1xuKTogdm9pZCA9PiB7XG5cdGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbZXhwb3J0VG9JQ2FsZW5kYXIoZXZlbnRzLCBjYWxlbmRhck5hbWUpXSwge1xuXHRcdHR5cGU6ICd0ZXh0L2NhbGVuZGFyO2NoYXJzZXQ9dXRmLTgnLFxuXHR9KVxuXHRjb25zdCB1cmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpXG5cdGNvbnN0IG5vcm1hbGl6ZWRGaWxlbmFtZSA9IGZpbGVuYW1lLmVuZHNXaXRoKCcuaWNzJylcblx0XHQ/IGZpbGVuYW1lXG5cdFx0OiBgJHtmaWxlbmFtZX0uaWNzYFxuXG5cdGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJylcblx0bGluay5ocmVmID0gdXJsXG5cdGxpbmsuZG93bmxvYWQgPSBub3JtYWxpemVkRmlsZW5hbWVcblxuXHRkb2N1bWVudC5ib2R5LmFwcGVuZChsaW5rKVxuXHRsaW5rLmNsaWNrKClcblx0bGluay5yZW1vdmUoKVxuXHRVUkwucmV2b2tlT2JqZWN0VVJMKHVybClcbn1cbiIsCiAgICAiaW1wb3J0IHsgQ2hldnJvbkRvd24gfSBmcm9tICdsdWNpZGUtcmVhY3QnXG5pbXBvcnQgeyB1c2VNZW1vLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQW5pbWF0ZWRTZWN0aW9uIH0gZnJvbSAnQC9jb21wb25lbnRzL2FuaW1hdGlvbnMvYW5pbWF0ZWQtc2VjdGlvbidcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9idXR0b24nXG5pbXBvcnQge1xuXHRQb3BvdmVyLFxuXHRQb3BvdmVyQ29udGVudCxcblx0UG9wb3ZlclRyaWdnZXIsXG59IGZyb20gJ0AvY29tcG9uZW50cy91aS9wb3BvdmVyJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IGRheWpzLCB7IHR5cGUgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgeyBnZXRXZWVrRGF5cyB9IGZyb20gJ0AvbGliL3V0aWxzL2RhdGUtdXRpbHMnXG5cbmNvbnN0IE1PTlRIX0tFWVMgPSBbXG5cdCdqYW51YXJ5Jyxcblx0J2ZlYnJ1YXJ5Jyxcblx0J21hcmNoJyxcblx0J2FwcmlsJyxcblx0J21heScsXG5cdCdqdW5lJyxcblx0J2p1bHknLFxuXHQnYXVndXN0Jyxcblx0J3NlcHRlbWJlcicsXG5cdCdvY3RvYmVyJyxcblx0J25vdmVtYmVyJyxcblx0J2RlY2VtYmVyJyxcbl0gYXMgY29uc3RcblxuY29uc3QgVGl0bGVDb250ZW50ID0gKCkgPT4ge1xuXHRjb25zdCB7IGN1cnJlbnREYXRlLCB2aWV3LCBzZWxlY3REYXRlLCB0LCBmaXJzdERheU9mV2VlayB9ID1cblx0XHR1c2VTbWFydENhbGVuZGFyQ29udGV4dCgoY3R4KSA9PiAoe1xuXHRcdFx0Y3VycmVudERhdGU6IGN0eC5jdXJyZW50RGF0ZSxcblx0XHRcdHZpZXc6IGN0eC52aWV3LFxuXHRcdFx0c2VsZWN0RGF0ZTogY3R4LnNlbGVjdERhdGUsXG5cdFx0XHR0OiBjdHgudCxcblx0XHRcdGZpcnN0RGF5T2ZXZWVrOiBjdHguZmlyc3REYXlPZldlZWssXG5cdFx0fSkpXG5cblx0Y29uc3QgW29wZW5Qb3BvdmVyLCBzZXRPcGVuUG9wb3Zlcl0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKVxuXG5cdGNvbnN0IG1vbnRocyA9IHVzZU1lbW8oKCkgPT4gTU9OVEhfS0VZUy5tYXAoKGtleSkgPT4gdChrZXkpKSwgW3RdKVxuXHRjb25zdCBjdXJyZW50WWVhciA9IGN1cnJlbnREYXRlLnllYXIoKVxuXHRjb25zdCB5ZWFycyA9IEFycmF5LmZyb20oeyBsZW5ndGg6IDExIH0sIChfLCBpKSA9PiBjdXJyZW50WWVhciAtIDUgKyBpKVxuXHRjb25zdCB3ZWVrRGF5cyA9IGdldFdlZWtEYXlzKGN1cnJlbnREYXRlLCBmaXJzdERheU9mV2VlaylcblxuXHRjb25zdCBoYW5kbGVTZWxlY3REYXRlID0gKGRhdGU6IERheWpzKSA9PiB7XG5cdFx0c2VsZWN0RGF0ZShkYXRlKVxuXHRcdHNldE9wZW5Qb3BvdmVyKG51bGwpXG5cdH1cblxuXHRjb25zdCByZW5kZXJNb250aENvbnRlbnQgPSAoKSA9PiAoXG5cdFx0PD5cblx0XHRcdHttb250aHMubWFwKChtb250aCwgaW5kZXgpID0+IChcblx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHQnanVzdGlmeS1zdGFydCBmb250LW5vcm1hbCcsXG5cdFx0XHRcdFx0XHRjdXJyZW50RGF0ZS5tb250aCgpID09PSBpbmRleCAmJiAnYmctcHJpbWFyeS8xMCdcblx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdGtleT17bW9udGh9XG5cdFx0XHRcdFx0b25DbGljaz17KCkgPT4gaGFuZGxlU2VsZWN0RGF0ZShjdXJyZW50RGF0ZS5tb250aChpbmRleCkpfVxuXHRcdFx0XHRcdHZhcmlhbnQ9XCJnaG9zdFwiXG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7bW9udGh9XG5cdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0KSl9XG5cdFx0PC8+XG5cdClcblxuXHRjb25zdCByZW5kZXJZZWFyQ29udGVudCA9ICgpID0+IChcblx0XHQ8PlxuXHRcdFx0e3llYXJzLm1hcCgoeWVhcikgPT4gKFxuXHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdCdqdXN0aWZ5LXN0YXJ0IGZvbnQtbm9ybWFsJyxcblx0XHRcdFx0XHRcdGN1cnJlbnREYXRlLnllYXIoKSA9PT0geWVhciAmJiAnYmctcHJpbWFyeS8xMCdcblx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdGtleT17eWVhcn1cblx0XHRcdFx0XHRvbkNsaWNrPXsoKSA9PiBoYW5kbGVTZWxlY3REYXRlKGN1cnJlbnREYXRlLnllYXIoeWVhcikpfVxuXHRcdFx0XHRcdHZhcmlhbnQ9XCJnaG9zdFwiXG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7eWVhcn1cblx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHQpKX1cblx0XHQ8Lz5cblx0KVxuXG5cdGNvbnN0IHJlbmRlcldlZWtDb250ZW50ID0gKCkgPT4gKFxuXHRcdDw+XG5cdFx0XHR7QXJyYXkuZnJvbSh7IGxlbmd0aDogNyB9LCAoXywgaSkgPT4ge1xuXHRcdFx0XHRjb25zdCB3ZWVrRGF0ZSA9IGN1cnJlbnREYXRlLnN1YnRyYWN0KDMsICd3ZWVrJykuYWRkKGksICd3ZWVrJylcblx0XHRcdFx0Y29uc3QgZGF5cyA9IGdldFdlZWtEYXlzKHdlZWtEYXRlLCBmaXJzdERheU9mV2Vlaylcblx0XHRcdFx0Y29uc3Qgc3RhcnQgPSBkYXlzWzBdXG5cdFx0XHRcdGNvbnN0IGVuZCA9IGRheXNbNl1cblx0XHRcdFx0Y29uc3QgaXNDdXJyZW50V2VlayA9IHdlZWtEYXRlLmlzU2FtZShjdXJyZW50RGF0ZSwgJ3dlZWsnKVxuXHRcdFx0XHRjb25zdCBjcm9zc2VzTW9udGggPSBzdGFydC5tb250aCgpICE9PSBlbmQubW9udGgoKVxuXG5cdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdFx0J2p1c3RpZnktc3RhcnQgZm9udC1ub3JtYWwnLFxuXHRcdFx0XHRcdFx0XHRpc0N1cnJlbnRXZWVrICYmICdiZy1wcmltYXJ5LzEwJ1xuXHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdGtleT17c3RhcnQuZm9ybWF0KCdZWVlZLU1NLUREJyl9XG5cdFx0XHRcdFx0XHRvbkNsaWNrPXsoKSA9PiBoYW5kbGVTZWxlY3REYXRlKHN0YXJ0KX1cblx0XHRcdFx0XHRcdHZhcmlhbnQ9XCJnaG9zdFwiXG5cdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IHctZnVsbCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuXCI+XG5cdFx0XHRcdFx0XHRcdDxzcGFuPntgJHtzdGFydC5mb3JtYXQoJ01NTSBEJyl9IC0gJHtlbmQuZm9ybWF0KCdEJyl9YH08L3NwYW4+XG5cdFx0XHRcdFx0XHRcdHtjcm9zc2VzTW9udGggJiYgKFxuXHRcdFx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cIm1sLTAuNSB0ZXh0LXhzIG9wYWNpdHktNzBcIj57YCR7c3RhcnQuZm9ybWF0KCdNTU0nKX0tJHtlbmQuZm9ybWF0KCdNTU0nKX1gfTwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0XHQpXG5cdFx0XHR9KX1cblx0XHQ8Lz5cblx0KVxuXG5cdGNvbnN0IHJlbmRlckRheUNvbnRlbnQgPSAoKSA9PiB7XG5cdFx0Y29uc3QgZmlyc3REYXkgPSBjdXJyZW50RGF0ZS5zdGFydE9mKCdtb250aCcpXG5cdFx0Y29uc3QgZGF5c0luTW9udGggPSBjdXJyZW50RGF0ZS5kYXlzSW5Nb250aCgpXG5cblx0XHRyZXR1cm4gKFxuXHRcdFx0PD5cblx0XHRcdFx0e0FycmF5LmZyb20oeyBsZW5ndGg6IGRheXNJbk1vbnRoIH0sIChfLCBpKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgZGF5ID0gZmlyc3REYXkuZGF0ZShpICsgMSlcblx0XHRcdFx0XHRjb25zdCBpc0N1cnJlbnREYXkgPSBkYXkuaXNTYW1lKGN1cnJlbnREYXRlLCAnZGF5Jylcblx0XHRcdFx0XHRjb25zdCBpc1RvZGF5ID0gZGF5LmlzU2FtZShkYXlqcygpLCAnZGF5JylcblxuXHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHRcdFx0J2p1c3RpZnktc3RhcnQgZm9udC1ub3JtYWwnLFxuXHRcdFx0XHRcdFx0XHRcdGlzQ3VycmVudERheSAmJiAnYmctcHJpbWFyeS8xMCdcblx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0a2V5PXtkYXkuZm9ybWF0KCdZWVlZLU1NLUREJyl9XG5cdFx0XHRcdFx0XHRcdG9uQ2xpY2s9eygpID0+IGhhbmRsZVNlbGVjdERhdGUoZGF5KX1cblx0XHRcdFx0XHRcdFx0dmFyaWFudD1cImdob3N0XCJcblx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IHctZnVsbCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuXCI+XG5cdFx0XHRcdFx0XHRcdFx0PHNwYW4+e2RheS5mb3JtYXQoJ2RkZGQsIE1NTSBEJyl9PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHRcdHtpc1RvZGF5ICYmIChcblx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cImJnLXByaW1hcnkgdGV4dC1wcmltYXJ5LWZvcmVncm91bmQgcm91bmRlZC1zbSBweC0xISB0ZXh0LXhzXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHt0KCd0b2RheScpfVxuXHRcdFx0XHRcdFx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHRcdFx0KVxuXHRcdFx0XHR9KX1cblx0XHRcdDwvPlxuXHRcdClcblx0fVxuXG5cdGNvbnN0IHBvcG92ZXJzID0gW1xuXHRcdHtcblx0XHRcdGlkOiAnbW9udGgnLFxuXHRcdFx0aGlkZGVuOiB2aWV3ID09PSAneWVhcicsXG5cdFx0XHR0aXRsZTogY3VycmVudERhdGUuZm9ybWF0KCdNTU1NJyksXG5cdFx0XHRyZW5kZXI6IHJlbmRlck1vbnRoQ29udGVudCxcblx0XHR9LFxuXHRcdHtcblx0XHRcdGlkOiAneWVhcicsXG5cdFx0XHRoaWRkZW46IGZhbHNlLFxuXHRcdFx0dGl0bGU6IGN1cnJlbnREYXRlLmZvcm1hdCgnWVlZWScpLFxuXHRcdFx0cmVuZGVyOiByZW5kZXJZZWFyQ29udGVudCxcblx0XHR9LFxuXHRcdHtcblx0XHRcdGlkOiAnd2VlaycsXG5cdFx0XHRoaWRkZW46IHZpZXcgIT09ICd3ZWVrJyxcblx0XHRcdHRpdGxlOiBgJHt3ZWVrRGF5c1swXS5mb3JtYXQoJ01NTSBEJyl9IC0gJHt3ZWVrRGF5c1s2XS5mb3JtYXQoJ01NTSBEJyl9YCxcblx0XHRcdHJlbmRlcjogcmVuZGVyV2Vla0NvbnRlbnQsXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRpZDogJ2RheScsXG5cdFx0XHRoaWRkZW46IHZpZXcgIT09ICdkYXknLFxuXHRcdFx0dGl0bGU6IGN1cnJlbnREYXRlLmZvcm1hdCgnZGRkZCwgRCcpLFxuXHRcdFx0cmVuZGVyOiByZW5kZXJEYXlDb250ZW50LFxuXHRcdH0sXG5cdF1cblxuXHRyZXR1cm4gcG9wb3ZlcnNcblx0XHQuZmlsdGVyKChwKSA9PiAhcC5oaWRkZW4pXG5cdFx0Lm1hcCgocG9wb3ZlcikgPT4gKFxuXHRcdFx0PFBvcG92ZXJcblx0XHRcdFx0a2V5PXtwb3BvdmVyLmlkfVxuXHRcdFx0XHRvbk9wZW5DaGFuZ2U9eyhvcGVuKSA9PiBzZXRPcGVuUG9wb3ZlcihvcGVuID8gcG9wb3Zlci5pZCA6IG51bGwpfVxuXHRcdFx0XHRvcGVuPXtvcGVuUG9wb3ZlciA9PT0gcG9wb3Zlci5pZH1cblx0XHRcdD5cblx0XHRcdFx0PFBvcG92ZXJUcmlnZ2VyIGFzQ2hpbGQ+XG5cdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEgcHgtMSEgZm9udC1zZW1pYm9sZFwiXG5cdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD1cImNhbGVuZGFyLW1vbnRoLWJ1dHRvblwiXG5cdFx0XHRcdFx0XHR2YXJpYW50PVwiZ2hvc3RcIlxuXHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdDxBbmltYXRlZFNlY3Rpb25cblx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEgcHgtMSEgZm9udC1zZW1pYm9sZFwiXG5cdFx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPVwiY2FsZW5kYXItbW9udGgtYnV0dG9uXCJcblx0XHRcdFx0XHRcdFx0dHJhbnNpdGlvbktleT17YCR7cG9wb3Zlci5pZH0tJHtjdXJyZW50RGF0ZS5mb3JtYXQoJ1lZWVktTU0tREQnKX1gfVxuXHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHR7cG9wb3Zlci50aXRsZX1cblx0XHRcdFx0XHRcdDwvQW5pbWF0ZWRTZWN0aW9uPlxuXHRcdFx0XHRcdFx0PENoZXZyb25Eb3duIGNsYXNzTmFtZT1cImgtNCB3LTRcIiAvPlxuXHRcdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0XHQ8L1BvcG92ZXJUcmlnZ2VyPlxuXHRcdFx0XHQ8UG9wb3ZlckNvbnRlbnQgY2xhc3NOYW1lPVwidy00MCBwLTBcIj5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggbWF4LWgtNjAgZmxleC1jb2wgb3ZlcmZsb3ctYXV0b1wiPlxuXHRcdFx0XHRcdFx0e3BvcG92ZXIucmVuZGVyKCl9XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDwvUG9wb3ZlckNvbnRlbnQ+XG5cdFx0XHQ8L1BvcG92ZXI+XG5cdFx0KSlcbn1cblxuZXhwb3J0IGRlZmF1bHQgVGl0bGVDb250ZW50XG4iLAogICAgImltcG9ydCB7IENoZXZyb25MZWZ0LCBDaGV2cm9uUmlnaHQgfSBmcm9tICdsdWNpZGUtcmVhY3QnXG5pbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9idXR0b24nXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG50eXBlIFZpZXdUeXBlID0gJ2RheScgfCAnd2VlaycgfCAnbW9udGgnIHwgJ3llYXInXG5jb25zdCBBVkFJTEFCTEVfVklFV1M6IFZpZXdUeXBlW10gPSBbJ2RheScsICd3ZWVrJywgJ21vbnRoJywgJ3llYXInXVxuXG5pbnRlcmZhY2UgVmlld0NvbnRyb2xzUHJvcHMge1xuXHRjdXJyZW50VmlldzogVmlld1R5cGVcblx0b25DaGFuZ2U6ICh2aWV3OiBWaWV3VHlwZSkgPT4gdm9pZFxuXHRvblRvZGF5PzogKCkgPT4gdm9pZFxuXHRvbk5leHQ/OiAoKSA9PiB2b2lkXG5cdG9uUHJldmlvdXM/OiAoKSA9PiB2b2lkXG5cdHZhcmlhbnQ/OiAnZGVmYXVsdCcgfCAnZ3JpZCdcblx0c2l6ZT86ICdzbScgfCAnZGVmYXVsdCdcblx0Y2xhc3NOYW1lPzogc3RyaW5nXG59XG5cbmNvbnN0IFZpZXdDb250cm9sczogUmVhY3QuRkM8Vmlld0NvbnRyb2xzUHJvcHM+ID0gKHtcblx0Y3VycmVudFZpZXcsXG5cdG9uQ2hhbmdlLFxuXHR2YXJpYW50ID0gJ2RlZmF1bHQnLFxuXHRzaXplID0gJ3NtJyxcblx0Y2xhc3NOYW1lLFxuXHRvblRvZGF5LFxuXHRvbk5leHQsXG5cdG9uUHJldmlvdXMsXG59KSA9PiB7XG5cdGNvbnN0IHsgdCwgcmVzb3VyY2VzIH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgoY29udGV4dCkgPT4gKHtcblx0XHR0OiBjb250ZXh0LnQsXG5cdFx0cmVzb3VyY2VzOiBjb250ZXh0LnJlc291cmNlcyxcblx0fSkpXG5cdGNvbnN0IGlzR3JpZCA9IHZhcmlhbnQgPT09ICdncmlkJ1xuXHRjb25zdCBpc1Jlc291cmNlQ2FsZW5kYXIgPSByZXNvdXJjZXMgJiYgcmVzb3VyY2VzLmxlbmd0aCA+IDBcblxuXHQvLyBFeHRyYWN0IGNvbW1vbiBidXR0b24gY2xhc3NOYW1lIGxvZ2ljIHRvIGEgZnVuY3Rpb25cblx0Y29uc3QgZ2V0QnV0dG9uQ2xhc3NOYW1lID0gKHZpZXdUeXBlOiBWaWV3VHlwZSkgPT4ge1xuXHRcdHJldHVybiBjbihcblx0XHRcdC8vIEJhc2Ugd2lkdGggZm9yIGdyaWQgbGF5b3V0XG5cdFx0XHRpc0dyaWQgPyAndy1mdWxsJyA6ICcnLFxuXHRcdFx0Ly8gQWN0aXZlIHZpZXcgc3R5bGluZ1xuXHRcdFx0Y3VycmVudFZpZXcgPT09IHZpZXdUeXBlICYmICdiZy1wcmltYXJ5LzgwJ1xuXHRcdClcblx0fVxuXG5cdGNvbnN0IGdldEJ0blZhcmlhbnQgPSAodmlld1R5cGU6IFZpZXdUeXBlKSA9PiB7XG5cdFx0cmV0dXJuIGN1cnJlbnRWaWV3ID09PSB2aWV3VHlwZSA/ICdkZWZhdWx0JyA6ICdvdXRsaW5lJ1xuXHR9XG5cblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRpc0dyaWQgPyAnZ3JpZCBncmlkLWNvbHMtMiBnYXAtMicgOiAnZmxleCBnYXAtMScsXG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHQ+XG5cdFx0XHQ8QnV0dG9uIG9uQ2xpY2s9e29uUHJldmlvdXN9IHNpemU9e3NpemV9IHZhcmlhbnQ9XCJvdXRsaW5lXCI+XG5cdFx0XHRcdDxDaGV2cm9uTGVmdCBjbGFzc05hbWU9XCJoLTQgdy00XCIgLz5cblx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0PEJ1dHRvbiBvbkNsaWNrPXtvbk5leHR9IHNpemU9e3NpemV9IHZhcmlhbnQ9XCJvdXRsaW5lXCI+XG5cdFx0XHRcdDxDaGV2cm9uUmlnaHQgY2xhc3NOYW1lPVwiaC00IHctNFwiIC8+XG5cdFx0XHQ8L0J1dHRvbj5cblxuXHRcdFx0e0FWQUlMQUJMRV9WSUVXUy5tYXAoKHR5cGU6IFZpZXdUeXBlKSA9PiB7XG5cdFx0XHRcdGlmIChpc1Jlc291cmNlQ2FsZW5kYXIgJiYgdHlwZSA9PT0gJ3llYXInKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG51bGxcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtnZXRCdXR0b25DbGFzc05hbWUodHlwZSl9XG5cdFx0XHRcdFx0XHRrZXk9e3R5cGV9XG5cdFx0XHRcdFx0XHRvbkNsaWNrPXsoKSA9PiBvbkNoYW5nZSh0eXBlKX1cblx0XHRcdFx0XHRcdHNpemU9e3NpemV9XG5cdFx0XHRcdFx0XHR2YXJpYW50PXtnZXRCdG5WYXJpYW50KHR5cGUpfVxuXHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdHt0KHR5cGUpfVxuXHRcdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0XHQpXG5cdFx0XHR9KX1cblxuXHRcdFx0PEJ1dHRvbiBvbkNsaWNrPXtvblRvZGF5fSBzaXplPXtzaXplfSB2YXJpYW50PVwib3V0bGluZVwiPlxuXHRcdFx0XHR7dCgndG9kYXknKX1cblx0XHRcdDwvQnV0dG9uPlxuXHRcdDwvZGl2PlxuXHQpXG59XG5cbmV4cG9ydCBkZWZhdWx0IFZpZXdDb250cm9sc1xuIiwKICAgICJpbXBvcnQgeyBtZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBIb3Jpem9udGFsR3JpZFJvdyB9IGZyb20gJ0AvY29tcG9uZW50cy9ob3Jpem9udGFsLWdyaWQvaG9yaXpvbnRhbC1ncmlkLXJvdydcbmltcG9ydCB0eXBlIHsgUmVzb3VyY2UgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IEFsbERheUNlbGwgfSBmcm9tICcuL2FsbC1kYXktY2VsbCdcblxuaW50ZXJmYWNlIEFsbERheVJvd1Byb3BzIHtcblx0ZGF5czogRGF5anNbXVxuXHRjbGFzc2VzPzogeyByb3c/OiBzdHJpbmc7IGNlbGw/OiBzdHJpbmc7IHNwYWNlcj86IHN0cmluZyB9XG5cdHJlc291cmNlPzogUmVzb3VyY2Vcblx0c2hvd1NwYWNlcj86IGJvb2xlYW5cbn1cblxuY29uc3QgTm9NZW1vQWxsRGF5Um93OiBSZWFjdC5GQzxBbGxEYXlSb3dQcm9wcz4gPSAoe1xuXHRkYXlzLFxuXHRjbGFzc2VzLFxuXHRyZXNvdXJjZSxcblx0c2hvd1NwYWNlciA9IHRydWUsXG59KSA9PiB7XG5cdGNvbnN0IGNvbHVtbnMgPSBkYXlzLm1hcCgoZGF5LCBpbmRleCkgPT4gKHtcblx0XHRpZDogYGFsbGRheS1jb2wtJHtkYXkudG9JU09TdHJpbmcoKX0tJHtpbmRleH1gLFxuXHRcdGRheSxcblx0XHRncmlkVHlwZTogJ2RheScgYXMgY29uc3QsXG5cdFx0Y2xhc3NOYW1lOiBjbignaC1mdWxsIG1pbi1oLTEyIGJvcmRlci1yIGxhc3Q6Ym9yZGVyLXItMCcsIGNsYXNzZXM/LmNlbGwpLFxuXHR9KSlcblxuXHRyZXR1cm4gKFxuXHRcdDxkaXYgY2xhc3NOYW1lPXtjbignZmxleCB3LWZ1bGwnLCBjbGFzc2VzPy5yb3cpfSBkYXRhLXRlc3RpZD1cImFsbC1kYXktcm93XCI+XG5cdFx0XHR7LyogVGltZSBjb2wgc3BhY2VyICovfVxuXHRcdFx0e3Nob3dTcGFjZXIgJiYgPEFsbERheUNlbGwgY2xhc3NOYW1lPXtjbGFzc2VzPy5zcGFjZXJ9IC8+fVxuXG5cdFx0XHR7LyogRGF5IGFsbCBkYXkgY2VsbCAqL31cblx0XHRcdDxIb3Jpem9udGFsR3JpZFJvd1xuXHRcdFx0XHRhbGxEYXlcblx0XHRcdFx0Y2xhc3NOYW1lPVwiZmxleC0xIG1pbi1oLWZpdFwiXG5cdFx0XHRcdGNvbHVtbnM9e2NvbHVtbnN9XG5cdFx0XHRcdGRheU51bWJlckhlaWdodD17MH1cblx0XHRcdFx0Z3JpZFR5cGU9XCJkYXlcIlxuXHRcdFx0XHRpZD17YGFsbC1kYXktcm93LSR7cmVzb3VyY2U/LmlkID8/ICdtYWluJ31gfVxuXHRcdFx0XHRpc0xhc3RSb3dcblx0XHRcdFx0cmVzb3VyY2U9e3Jlc291cmNlfVxuXHRcdFx0XHR2YXJpYW50PVwicmVndWxhclwiXG5cdFx0XHQvPlxuXHRcdDwvZGl2PlxuXHQpXG59XG5cbmV4cG9ydCBjb25zdCBBbGxEYXlSb3cgPSBtZW1vKE5vTWVtb0FsbERheVJvdylcbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBtZW1vLCB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VQcm9jZXNzZWRXZWVrRXZlbnRzIH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci9ob29rcy91c2VQcm9jZXNzZWRXZWVrRXZlbnRzJ1xuaW1wb3J0IHR5cGUgeyBSZXNvdXJjZSB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvdHlwZXMnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSB7IERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgR3JpZENlbGwgfSBmcm9tICcuLi9ncmlkLWNlbGwnXG5pbXBvcnQgeyBSZXNvdXJjZUNlbGwgfSBmcm9tICcuLi9yZXNvdXJjZS1jZWxsJ1xuaW1wb3J0IHsgSG9yaXpvbnRhbEdyaWRFdmVudHNMYXllciB9IGZyb20gJy4vaG9yaXpvbnRhbC1ncmlkLWV2ZW50cy1sYXllcidcblxuaW50ZXJmYWNlIEhvcml6b250YWxHcmlkQ29sdW1uIHtcblx0aWQ6IHN0cmluZ1xuXHRkYXk/OiBEYXlqc1xuXHRkYXlzPzogRGF5anNbXVxuXHRncmlkVHlwZTogJ2RheScgfCAnaG91cidcblx0Y2xhc3NOYW1lPzogc3RyaW5nXG5cdHJlbmRlckNlbGw/OiAocm93OiBIb3Jpem9udGFsR3JpZFJvd1Byb3BzKSA9PiBSZWFjdC5SZWFjdE5vZGVcbn1cblxuZXhwb3J0IGludGVyZmFjZSBIb3Jpem9udGFsR3JpZFJvd1Byb3BzIHtcblx0aWQ6IHN0cmluZyB8IG51bWJlclxuXHRyZXNvdXJjZT86IFJlc291cmNlXG5cdGdyaWRUeXBlPzogJ2RheScgfCAnaG91cidcblx0dmFyaWFudD86ICdyZWd1bGFyJyB8ICdyZXNvdXJjZSdcblx0ZGF5TnVtYmVySGVpZ2h0PzogbnVtYmVyXG5cdGNsYXNzTmFtZT86IHN0cmluZ1xuXHRjb2x1bW5zPzogSG9yaXpvbnRhbEdyaWRDb2x1bW5bXVxuXHRhbGxEYXk/OiBib29sZWFuXG5cdHNob3dEYXlOdW1iZXI/OiBib29sZWFuXG5cdGlzTGFzdFJvdz86IGJvb2xlYW5cbn1cblxuY29uc3QgTm9NZW1vSG9yaXpvbnRhbEdyaWRSb3c6IFJlYWN0LkZDPEhvcml6b250YWxHcmlkUm93UHJvcHM+ID0gKHtcblx0aWQsXG5cdHJlc291cmNlLFxuXHRncmlkVHlwZSA9ICdkYXknLFxuXHR2YXJpYW50ID0gJ3Jlc291cmNlJyxcblx0ZGF5TnVtYmVySGVpZ2h0LFxuXHRjbGFzc05hbWUsXG5cdGNvbHVtbnMgPSBbXSxcblx0YWxsRGF5LFxuXHRzaG93RGF5TnVtYmVyID0gZmFsc2UsXG5cdGlzTGFzdFJvdyA9IGZhbHNlLFxufSkgPT4ge1xuXHRjb25zdCB7IHJlbmRlclJlc291cmNlIH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cblx0Y29uc3QgaXNSZXNvdXJjZUNhbGVuZGFyID0gdmFyaWFudCA9PT0gJ3Jlc291cmNlJ1xuXHQvLyBGbGF0IGNvbHVtbnM6IGVhY2ggY29sdW1uIGhhcyBjb2wuZGF5IChyZWd1bGFyIG1vbnRoLCByZXNvdXJjZSBtb250aClcblx0Ly8gR3JvdXBlZCBjb2x1bW5zOiBlYWNoIGNvbHVtbiBoYXMgY29sLmRheXNbXSAocmVzb3VyY2Ugd2VlayBob3Jpem9udGFsKVxuXHRjb25zdCBpc0dyb3VwZWQgPSBjb2x1bW5zLnNvbWUoKGNvbCkgPT4gY29sLmRheXMpXG5cblx0Ly8gQ29sbGVjdCBhbGwgZGF5cyBmb3IgZmxhdCByb3dzXG5cdGNvbnN0IGZsYXREYXlzID0gdXNlTWVtbygoKSA9PiB7XG5cdFx0aWYgKGlzR3JvdXBlZCkgcmV0dXJuIFtdXG5cdFx0cmV0dXJuIGNvbHVtbnMubWFwKChjb2wpID0+IGNvbC5kYXkpLmZpbHRlcigoZCk6IGQgaXMgRGF5anMgPT4gQm9vbGVhbihkKSlcblx0fSwgW2NvbHVtbnMsIGlzR3JvdXBlZF0pXG5cblx0Ly8gQ29tcHV0ZSBldmVudHMgb25jZSBhdCB0aGUgcm93IGxldmVsIOKAlCBzaGFyZWQgYmV0d2VlbiBHcmlkQ2VsbHMgYW5kIGV2ZW50cyBsYXllclxuXHRjb25zdCB7IHBvc2l0aW9uZWRFdmVudHMsIGRheUV2ZW50c01hcCB9ID0gdXNlUHJvY2Vzc2VkV2Vla0V2ZW50cyh7XG5cdFx0ZGF5czogZmxhdERheXMsXG5cdFx0Z3JpZFR5cGUsXG5cdFx0cmVzb3VyY2VJZDogcmVzb3VyY2U/LmlkLFxuXHRcdGRheU51bWJlckhlaWdodCxcblx0XHRhbGxEYXksXG5cdH0pXG5cblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9e2NuKCdmbGV4IGZsZXgtMSByZWxhdGl2ZScsIGNsYXNzTmFtZSl9XG5cdFx0XHRkYXRhLXRlc3RpZD17YGhvcml6b250YWwtcm93LSR7aWR9YH1cblx0XHQ+XG5cdFx0XHR7aXNSZXNvdXJjZUNhbGVuZGFyICYmIHJlc291cmNlICYmIChcblx0XHRcdFx0PFJlc291cmNlQ2VsbFxuXHRcdFx0XHRcdGNsYXNzTmFtZT1cInctMjAgc206dy00MCBzdGlja3kgbGVmdC0wIGJnLWJhY2tncm91bmQgei0yMCBoLWZ1bGxcIlxuXHRcdFx0XHRcdGRhdGEtdGVzdGlkPXtgaG9yaXpvbnRhbC1yb3ctbGFiZWwtJHtyZXNvdXJjZS5pZH1gfVxuXHRcdFx0XHRcdHJlc291cmNlPXtyZXNvdXJjZX1cblx0XHRcdFx0PlxuXHRcdFx0XHRcdHtyZW5kZXJSZXNvdXJjZSA/IChcblx0XHRcdFx0XHRcdHJlbmRlclJlc291cmNlKHJlc291cmNlKVxuXHRcdFx0XHRcdCkgOiAoXG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cIndyYXAtYnJlYWstd29yZCB0ZXh0LXNtXCI+e3Jlc291cmNlLnRpdGxlfTwvZGl2PlxuXHRcdFx0XHRcdCl9XG5cdFx0XHRcdDwvUmVzb3VyY2VDZWxsPlxuXHRcdFx0KX1cblx0XHRcdDxkaXYgY2xhc3NOYW1lPVwicmVsYXRpdmUgZmxleC0xIGZsZXhcIj5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IHctZnVsbFwiPlxuXHRcdFx0XHRcdHtjb2x1bW5zLm1hcCgoY29sLCBpbmRleCkgPT4ge1xuXHRcdFx0XHRcdFx0aWYgKGNvbC5kYXlzKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdFx0PEdyb3VwZWRDb2x1bW5cblx0XHRcdFx0XHRcdFx0XHRcdGFsbERheT17YWxsRGF5fVxuXHRcdFx0XHRcdFx0XHRcdFx0Y29sPXtjb2x9XG5cdFx0XHRcdFx0XHRcdFx0XHRkYXlOdW1iZXJIZWlnaHQ9e2RheU51bWJlckhlaWdodH1cblx0XHRcdFx0XHRcdFx0XHRcdGdyaWRUeXBlPXtncmlkVHlwZX1cblx0XHRcdFx0XHRcdFx0XHRcdGlkPXtpZH1cblx0XHRcdFx0XHRcdFx0XHRcdGlzTGFzdENvbD17aW5kZXggPT09IGNvbHVtbnMubGVuZ3RoIC0gMX1cblx0XHRcdFx0XHRcdFx0XHRcdGlzTGFzdFJvdz17aXNMYXN0Um93fVxuXHRcdFx0XHRcdFx0XHRcdFx0a2V5PXtjb2wuaWR9XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXNvdXJjZUlkPXtyZXNvdXJjZT8uaWR9XG5cdFx0XHRcdFx0XHRcdFx0XHRzaG93RGF5TnVtYmVyPXtzaG93RGF5TnVtYmVyfVxuXHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0cmV0dXJuIGNvbC5kYXkgPyAoXG5cdFx0XHRcdFx0XHRcdDxHcmlkQ2VsbFxuXHRcdFx0XHRcdFx0XHRcdGFsbERheT17YWxsRGF5fVxuXHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHRcdFx0XHQnZmxleC0xIHctMjAnLFxuXHRcdFx0XHRcdFx0XHRcdFx0aXNMYXN0Um93ICYmICdib3JkZXItYi0wJyxcblx0XHRcdFx0XHRcdFx0XHRcdGNvbC5jbGFzc05hbWVcblx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRcdGRheT17Y29sLmRheX1cblx0XHRcdFx0XHRcdFx0XHRncmlkVHlwZT17Z3JpZFR5cGV9XG5cdFx0XHRcdFx0XHRcdFx0aG91cj17Z3JpZFR5cGUgPT09ICdob3VyJyA/IGNvbC5kYXkuaG91cigpIDogdW5kZWZpbmVkfVxuXHRcdFx0XHRcdFx0XHRcdGtleT17Y29sLmRheS50b0lTT1N0cmluZygpfVxuXHRcdFx0XHRcdFx0XHRcdHByZWNvbXB1dGVkRXZlbnRzPXtkYXlFdmVudHNNYXAuZ2V0KFxuXHRcdFx0XHRcdFx0XHRcdFx0Y29sLmRheS5mb3JtYXQoJ1lZWVktTU0tREQnKVxuXHRcdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdFx0cmVzb3VyY2VJZD17cmVzb3VyY2U/LmlkfVxuXHRcdFx0XHRcdFx0XHRcdHNob3dEYXlOdW1iZXI9e3Nob3dEYXlOdW1iZXJ9XG5cdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHQpIDogbnVsbFxuXHRcdFx0XHRcdH0pfVxuXHRcdFx0XHQ8L2Rpdj5cblxuXHRcdFx0XHR7LyogRXZlbnRzIGxheWVyIHBvc2l0aW9uZWQgYWJzb2x1dGVseSBvdmVyIHRoZSByb3cgKi99XG5cdFx0XHRcdHshaXNHcm91cGVkICYmIChcblx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImFic29sdXRlIGluc2V0LTAgei0xMCBwb2ludGVyLWV2ZW50cy1ub25lXCI+XG5cdFx0XHRcdFx0XHQ8SG9yaXpvbnRhbEdyaWRFdmVudHNMYXllclxuXHRcdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD17YGhvcml6b250YWwtZXZlbnRzLSR7aWR9YH1cblx0XHRcdFx0XHRcdFx0ZGF5cz17ZmxhdERheXN9XG5cdFx0XHRcdFx0XHRcdHBvc2l0aW9uZWRFdmVudHM9e3Bvc2l0aW9uZWRFdmVudHN9XG5cdFx0XHRcdFx0XHRcdHJlc291cmNlSWQ9e3Jlc291cmNlPy5pZH1cblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdCl9XG5cdFx0XHQ8L2Rpdj5cblx0XHQ8L2Rpdj5cblx0KVxufVxuXG4vKipcbiAqIEEgY29sdW1uIGNvbnRhaW5pbmcgbXVsdGlwbGUgZGF5cyAoZS5nLiwgb25lIGRheSdzIGhvdXJseSBzbG90cyBpbiByZXNvdXJjZSB3ZWVrIHZpZXcpLlxuICogTmVlZHMgaXRzIG93biB1c2VQcm9jZXNzZWRXZWVrRXZlbnRzIGNhbGwgc2luY2UgZXZlbnRzIGFyZSBzY29wZWQgdG8gdGhpcyBkYXkgZ3JvdXAuXG4gKi9cbmNvbnN0IEdyb3VwZWRDb2x1bW4gPSBtZW1vKFxuXHQoe1xuXHRcdGNvbCxcblx0XHRncmlkVHlwZSA9ICdkYXknLFxuXHRcdGFsbERheSxcblx0XHRyZXNvdXJjZUlkLFxuXHRcdGRheU51bWJlckhlaWdodCxcblx0XHRzaG93RGF5TnVtYmVyLFxuXHRcdGlzTGFzdFJvdyxcblx0XHRpc0xhc3RDb2wsXG5cdFx0aWQsXG5cdH06IHtcblx0XHRjb2w6IEhvcml6b250YWxHcmlkQ29sdW1uXG5cdFx0Z3JpZFR5cGU/OiAnZGF5JyB8ICdob3VyJ1xuXHRcdGFsbERheT86IGJvb2xlYW5cblx0XHRyZXNvdXJjZUlkPzogc3RyaW5nIHwgbnVtYmVyXG5cdFx0ZGF5TnVtYmVySGVpZ2h0PzogbnVtYmVyXG5cdFx0c2hvd0RheU51bWJlcjogYm9vbGVhblxuXHRcdGlzTGFzdFJvdzogYm9vbGVhblxuXHRcdGlzTGFzdENvbDogYm9vbGVhblxuXHRcdGlkOiBzdHJpbmcgfCBudW1iZXJcblx0fSkgPT4ge1xuXHRcdGNvbnN0IGRheXMgPSBjb2wuZGF5cyA/PyBbXVxuXHRcdGNvbnN0IHsgcG9zaXRpb25lZEV2ZW50cyB9ID0gdXNlUHJvY2Vzc2VkV2Vla0V2ZW50cyh7XG5cdFx0XHRkYXlzLFxuXHRcdFx0Z3JpZFR5cGUsXG5cdFx0XHRyZXNvdXJjZUlkLFxuXHRcdFx0ZGF5TnVtYmVySGVpZ2h0LFxuXHRcdFx0YWxsRGF5LFxuXHRcdH0pXG5cblx0XHRyZXR1cm4gKFxuXHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IHJlbGF0aXZlIHctZnVsbFwiPlxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggdy1mdWxsXCI+XG5cdFx0XHRcdFx0e2RheXMubWFwKChkYXkpID0+IChcblx0XHRcdFx0XHRcdDxHcmlkQ2VsbFxuXHRcdFx0XHRcdFx0XHRhbGxEYXk9e2FsbERheX1cblx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdFx0XHQnZmxleC0xIHctMjAnLFxuXHRcdFx0XHRcdFx0XHRcdGlzTGFzdFJvdyAmJiAnYm9yZGVyLWItMCcsXG5cdFx0XHRcdFx0XHRcdFx0IWlzTGFzdENvbCAmJiAnYm9yZGVyLXIhJyxcblx0XHRcdFx0XHRcdFx0XHRjb2wuY2xhc3NOYW1lXG5cdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdGRheT17ZGF5fVxuXHRcdFx0XHRcdFx0XHRncmlkVHlwZT17Z3JpZFR5cGV9XG5cdFx0XHRcdFx0XHRcdGhvdXI9e2dyaWRUeXBlID09PSAnaG91cicgPyBkYXkuaG91cigpIDogdW5kZWZpbmVkfVxuXHRcdFx0XHRcdFx0XHRrZXk9e2RheS50b0lTT1N0cmluZygpfVxuXHRcdFx0XHRcdFx0XHRyZXNvdXJjZUlkPXtyZXNvdXJjZUlkfVxuXHRcdFx0XHRcdFx0XHRzaG93RGF5TnVtYmVyPXtzaG93RGF5TnVtYmVyfVxuXHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHQpKX1cblx0XHRcdFx0PC9kaXY+XG5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJhYnNvbHV0ZSBpbnNldC0wIHotMTAgcG9pbnRlci1ldmVudHMtbm9uZVwiPlxuXHRcdFx0XHRcdDxIb3Jpem9udGFsR3JpZEV2ZW50c0xheWVyXG5cdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD17YGhvcml6b250YWwtZXZlbnRzLSR7aWR9YH1cblx0XHRcdFx0XHRcdGRheXM9e2RheXN9XG5cdFx0XHRcdFx0XHRwb3NpdGlvbmVkRXZlbnRzPXtwb3NpdGlvbmVkRXZlbnRzfVxuXHRcdFx0XHRcdFx0cmVzb3VyY2VJZD17cmVzb3VyY2VJZH1cblx0XHRcdFx0XHQvPlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdDwvZGl2PlxuXHRcdClcblx0fVxuKVxuXG5leHBvcnQgY29uc3QgSG9yaXpvbnRhbEdyaWRSb3cgPSBtZW1vKE5vTWVtb0hvcml6b250YWxHcmlkUm93KVxuIiwKICAgICJpbXBvcnQgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSB7IERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQge1xuXHRnZXRQb3NpdGlvbmVkRXZlbnRzLFxuXHR0eXBlIFBvc2l0aW9uZWRFdmVudCxcbn0gZnJvbSAnQC9saWIvdXRpbHMvcG9zaXRpb24td2Vlay1ldmVudHMnXG5cbmludGVyZmFjZSBVc2VQcm9jZXNzZWRXZWVrRXZlbnRzUHJvcHMge1xuXHRkYXlzOiBEYXlqc1tdXG5cdGFsbERheT86IGJvb2xlYW5cblx0ZGF5TnVtYmVySGVpZ2h0PzogbnVtYmVyXG5cdHJlc291cmNlSWQ/OiBzdHJpbmcgfCBudW1iZXJcblx0Z3JpZFR5cGU/OiAnZGF5JyB8ICdob3VyJ1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFByb2Nlc3NlZFdlZWtFdmVudHNSZXN1bHQge1xuXHRwb3NpdGlvbmVkRXZlbnRzOiBQb3NpdGlvbmVkRXZlbnRbXVxuXHRkYXlFdmVudHNNYXA6IE1hcDxzdHJpbmcsIENhbGVuZGFyRXZlbnRbXT5cbn1cblxuZXhwb3J0IGNvbnN0IHVzZVByb2Nlc3NlZFdlZWtFdmVudHMgPSAoe1xuXHRkYXlzLFxuXHRhbGxEYXksXG5cdGRheU51bWJlckhlaWdodCxcblx0cmVzb3VyY2VJZCxcblx0Z3JpZFR5cGUsXG59OiBVc2VQcm9jZXNzZWRXZWVrRXZlbnRzUHJvcHMpOiBQcm9jZXNzZWRXZWVrRXZlbnRzUmVzdWx0ID0+IHtcblx0Y29uc3Qge1xuXHRcdGdldEV2ZW50c0ZvckRhdGVSYW5nZSxcblx0XHRkYXlNYXhFdmVudHMsXG5cdFx0ZXZlbnRTcGFjaW5nLFxuXHRcdGdldEV2ZW50c0ZvclJlc291cmNlLFxuXHR9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXG5cdGNvbnN0IGZpcnN0ID0gZGF5cy5hdCgwKVxuXHRjb25zdCBsYXN0ID0gZGF5cy5hdCgtMSlcblx0Y29uc3Qgd2Vla1N0YXJ0ID0gZmlyc3Q/LnN0YXJ0T2YoJ2RheScpXG5cdGNvbnN0IHdlZWtFbmQgPSBsYXN0Py5lbmRPZignZGF5JylcblxuXHRjb25zdCBldmVudHMgPSB1c2VNZW1vKCgpID0+IHtcblx0XHRpZiAoIXdlZWtTdGFydCB8fCAhd2Vla0VuZCkgcmV0dXJuIFtdXG5cdFx0bGV0IHdlZWtFdmVudHMgPSBnZXRFdmVudHNGb3JEYXRlUmFuZ2Uod2Vla1N0YXJ0LCB3ZWVrRW5kKVxuXHRcdGlmIChyZXNvdXJjZUlkKSB7XG5cdFx0XHRjb25zdCByZXNvdXJjZUV2ZW50cyA9IGdldEV2ZW50c0ZvclJlc291cmNlKHJlc291cmNlSWQpXG5cdFx0XHR3ZWVrRXZlbnRzID0gd2Vla0V2ZW50cy5maWx0ZXIoKGV2ZW50KSA9PlxuXHRcdFx0XHRyZXNvdXJjZUV2ZW50cy5zb21lKChlKSA9PiBTdHJpbmcoZS5pZCkgPT09IFN0cmluZyhldmVudC5pZCkpXG5cdFx0XHQpXG5cdFx0fVxuXG5cdFx0aWYgKGFsbERheSkge1xuXHRcdFx0d2Vla0V2ZW50cyA9IHdlZWtFdmVudHMuZmlsdGVyKChlKSA9PiAhIWUuYWxsRGF5ID09PSBhbGxEYXkpXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHdlZWtFdmVudHNcblx0fSwgW1xuXHRcdGdldEV2ZW50c0ZvckRhdGVSYW5nZSxcblx0XHRnZXRFdmVudHNGb3JSZXNvdXJjZSxcblx0XHR3ZWVrU3RhcnQsXG5cdFx0d2Vla0VuZCxcblx0XHRyZXNvdXJjZUlkLFxuXHRcdGFsbERheSxcblx0XSlcblxuXHRjb25zdCBkYXlFdmVudHNNYXAgPSB1c2VNZW1vKCgpID0+IHtcblx0XHRjb25zdCBtYXAgPSBuZXcgTWFwPHN0cmluZywgQ2FsZW5kYXJFdmVudFtdPigpXG5cdFx0Zm9yIChjb25zdCBkYXkgb2YgZGF5cykge1xuXHRcdFx0Y29uc3Qga2V5ID0gZGF5LmZvcm1hdCgnWVlZWS1NTS1ERCcpXG5cdFx0XHRjb25zdCBkYXlTdGFydCA9IGRheS5zdGFydE9mKCdkYXknKVxuXHRcdFx0Y29uc3QgZGF5RW5kID0gZGF5LmVuZE9mKCdkYXknKVxuXHRcdFx0Y29uc3QgZGF5RXZlbnRzID0gZXZlbnRzLmZpbHRlcigoZSkgPT4ge1xuXHRcdFx0XHRjb25zdCBzdGFydHNJbkRheSA9XG5cdFx0XHRcdFx0ZS5zdGFydC5pc1NhbWVPckFmdGVyKGRheVN0YXJ0KSAmJiBlLnN0YXJ0LmlzU2FtZU9yQmVmb3JlKGRheUVuZClcblx0XHRcdFx0Y29uc3QgZW5kc0luRGF5ID1cblx0XHRcdFx0XHRlLmVuZC5pc1NhbWVPckFmdGVyKGRheVN0YXJ0KSAmJiBlLmVuZC5pc1NhbWVPckJlZm9yZShkYXlFbmQpXG5cdFx0XHRcdGNvbnN0IHNwYW5zRGF5ID0gZS5zdGFydC5pc0JlZm9yZShkYXlTdGFydCkgJiYgZS5lbmQuaXNBZnRlcihkYXlFbmQpXG5cdFx0XHRcdHJldHVybiBzdGFydHNJbkRheSB8fCBlbmRzSW5EYXkgfHwgc3BhbnNEYXlcblx0XHRcdH0pXG5cdFx0XHRtYXAuc2V0KGtleSwgZGF5RXZlbnRzKVxuXHRcdH1cblx0XHRyZXR1cm4gbWFwXG5cdH0sIFtkYXlzLCBldmVudHNdKVxuXG5cdGNvbnN0IHBvc2l0aW9uZWRFdmVudHMgPSB1c2VNZW1vKCgpID0+IHtcblx0XHRyZXR1cm4gZ2V0UG9zaXRpb25lZEV2ZW50cyh7XG5cdFx0XHRkYXlzLFxuXHRcdFx0ZXZlbnRzLFxuXHRcdFx0ZGF5TWF4RXZlbnRzLFxuXHRcdFx0ZGF5TnVtYmVySGVpZ2h0LFxuXHRcdFx0ZXZlbnRTcGFjaW5nLFxuXHRcdFx0Z3JpZFR5cGUsXG5cdFx0fSlcblx0fSwgW2RheXMsIGRheU1heEV2ZW50cywgZGF5TnVtYmVySGVpZ2h0LCBldmVudFNwYWNpbmcsIGV2ZW50cywgZ3JpZFR5cGVdKVxuXG5cdHJldHVybiB7IHBvc2l0aW9uZWRFdmVudHMsIGRheUV2ZW50c01hcCB9XG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCBkYXlqcywgeyB0eXBlIERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQge1xuXHREQVlfTlVNQkVSX0hFSUdIVCxcblx0RVZFTlRfQkFSX0hFSUdIVCxcblx0R0FQX0JFVFdFRU5fRUxFTUVOVFMsXG59IGZyb20gJ0AvbGliL2NvbnN0YW50cydcblxuZXhwb3J0IGludGVyZmFjZSBQb3NpdGlvbmVkRXZlbnQgZXh0ZW5kcyBDYWxlbmRhckV2ZW50IHtcblx0bGVmdDogbnVtYmVyIC8vIExlZnQgcG9zaXRpb24gaW4gcGVyY2VudGFnZVxuXHR3aWR0aDogbnVtYmVyIC8vIFdpZHRoIGluIHBlcmNlbnRhZ2Vcblx0dG9wOiBudW1iZXIgLy8gVG9wIHBvc2l0aW9uIGluIHBlcmNlbnRhZ2Vcblx0aGVpZ2h0OiBudW1iZXIgLy8gSGVpZ2h0IGluIHBlcmNlbnRhZ2Vcblx0cG9zaXRpb246IG51bWJlciAvLyBQb3NpdGlvbiBpbiB0aGUgcm93ICgwIGZvciBmaXJzdCwgMSBmb3Igc2Vjb25kLCBldGMuKVxuXHRpc1RydW5jYXRlZFN0YXJ0OiBib29sZWFuIC8vIFdoZXRoZXIgdGhlIGV2ZW50IGlzIHRydW5jYXRlZCBhdCB0aGUgc3RhcnRcblx0aXNUcnVuY2F0ZWRFbmQ6IGJvb2xlYW4gLy8gV2hldGhlciB0aGUgZXZlbnQgaXMgdHJ1bmNhdGVkIGF0IHRoZSBlbmRcbn1cblxuaW50ZXJmYWNlIEdldFBvc2l0aW9uZWRFdmVudHNQcm9wcyB7XG5cdGRheXM6IERheWpzW11cblx0ZXZlbnRzOiBDYWxlbmRhckV2ZW50W11cblx0ZGF5TWF4RXZlbnRzOiBudW1iZXJcblx0ZGF5TnVtYmVySGVpZ2h0PzogbnVtYmVyXG5cdGdyaWRUeXBlPzogJ2RheScgfCAnaG91cicgLy8gRnV0dXJlIHVzZSBmb3IgZGlmZmVyZW50IGdyaWQgdHlwZXNcblx0ZXZlbnRTcGFjaW5nPzogbnVtYmVyIC8vIEN1c3RvbSB2ZXJ0aWNhbCBzcGFjaW5nIGJldHdlZW4gZXZlbnRzIChkZWZhdWx0cyB0byBHQVBfQkVUV0VFTl9FTEVNRU5UUylcbn1cblxuZXhwb3J0IGNvbnN0IGdldFBvc2l0aW9uZWRFdmVudHMgPSAoe1xuXHRkYXlzLFxuXHRldmVudHMsXG5cdGRheU1heEV2ZW50cyxcblx0ZGF5TnVtYmVySGVpZ2h0ID0gREFZX05VTUJFUl9IRUlHSFQsXG5cdGdyaWRUeXBlID0gJ2RheScsXG5cdGV2ZW50U3BhY2luZyA9IEdBUF9CRVRXRUVOX0VMRU1FTlRTLFxufTogR2V0UG9zaXRpb25lZEV2ZW50c1Byb3BzKSA9PiB7XG5cdC8vIEZvciBob3VyLWJhc2VkIGdyaWRzLCB1c2UgYWN0dWFsIGZpcnN0L2xhc3QgaG91cnMgZnJvbSBkYXlzIGFycmF5XG5cdC8vIEZvciBkYXktYmFzZWQgZ3JpZHMsIHVzZSBzdGFydC9lbmQgb2YgZGF5IHRvIGNhcHR1cmUgYWxsIGV2ZW50c1xuXHRjb25zdCBmaXJzdCA9IGRheXMuYXQoMClcblx0Y29uc3QgbGFzdCA9IGRheXMuYXQoLTEpXG5cdGlmICghZmlyc3QgfHwgIWxhc3QpIHJldHVybiBbXVxuXG5cdGNvbnN0IGZpcnN0RGF5ID1cblx0XHRncmlkVHlwZSA9PT0gJ2hvdXInID8gZmlyc3Quc3RhcnRPZignaG91cicpIDogZmlyc3Quc3RhcnRPZignZGF5Jylcblx0Y29uc3QgbGFzdERheSA9IGdyaWRUeXBlID09PSAnaG91cicgPyBsYXN0LmVuZE9mKCdob3VyJykgOiBsYXN0LmVuZE9mKCdkYXknKVxuXHRjb25zdCBkYXlDb3VudCA9IGRheXMubGVuZ3RoXG5cblx0Ly8gU2VwYXJhdGUgbXVsdGktZGF5IGFuZCBzaW5nbGUtZGF5IGV2ZW50c1xuXHRjb25zdCBtdWx0aURheUV2ZW50cyA9IGV2ZW50cy5maWx0ZXIoKGUpID0+IGUuZW5kLmRpZmYoZS5zdGFydCwgZ3JpZFR5cGUpID4gMClcblx0Y29uc3Qgc2luZ2xlRGF5RXZlbnRzID0gZXZlbnRzLmZpbHRlcihcblx0XHQoZSkgPT4gZS5lbmQuZGlmZihlLnN0YXJ0LCBncmlkVHlwZSkgPT09IDBcblx0KVxuXG5cdC8vIFNvcnQgbXVsdGktZGF5IGV2ZW50cyBieSBzdGFydCBkYXRlLCB0aGVuIGJ5IGR1cmF0aW9uXG5cdGNvbnN0IHNvcnRlZE11bHRpRGF5ID0gWy4uLm11bHRpRGF5RXZlbnRzXS5zb3J0KChhLCBiKSA9PiB7XG5cdFx0Y29uc3Qgc3RhcnREaWZmID0gYS5zdGFydC5kaWZmKGIuc3RhcnQpXG5cdFx0aWYgKHN0YXJ0RGlmZiAhPT0gMCkge1xuXHRcdFx0cmV0dXJuIHN0YXJ0RGlmZlxuXHRcdH1cblx0XHRyZXR1cm4gYi5lbmQuZGlmZihiLnN0YXJ0KSAtIGEuZW5kLmRpZmYoYS5zdGFydCkgLy8gTG9uZ2VyIGV2ZW50cyBmaXJzdFxuXHR9KVxuXG5cdC8vIFNvcnQgc2luZ2xlLWRheSBldmVudHMgYnkgc3RhcnQgdGltZVxuXHRjb25zdCBzb3J0ZWRTaW5nbGVEYXkgPSBbLi4uc2luZ2xlRGF5RXZlbnRzXS5zb3J0KChhLCBiKSA9PlxuXHRcdGEuc3RhcnQuZGlmZihiLnN0YXJ0KVxuXHQpXG5cblx0Ly8gQ3JlYXRlIGRheUNvdW50IHggZGF5TWF4RXZlbnRzIGdyaWQgd2l0aCBmbGFnc1xuXHRjb25zdCBncmlkOiB7IHRha2VuOiBib29sZWFuOyBldmVudDogQ2FsZW5kYXJFdmVudCB8IG51bGwgfVtdW10gPSBbXVxuXHRmb3IgKGxldCByb3cgPSAwOyByb3cgPCBkYXlNYXhFdmVudHM7IHJvdysrKSB7XG5cdFx0Z3JpZFtyb3ddID0gW11cblx0XHRmb3IgKGxldCBjb2wgPSAwOyBjb2wgPCBkYXlDb3VudDsgY29sKyspIHtcblx0XHRcdGdyaWRbcm93XVtjb2xdID0geyB0YWtlbjogZmFsc2UsIGV2ZW50OiBudWxsIH1cblx0XHR9XG5cdH1cblxuXHRjb25zdCBwcm9jZXNzZWRFdmVudHM6IFBvc2l0aW9uZWRFdmVudFtdID0gW11cblxuXHQvLyBTdGVwIDE6IEFzc2lnbiBwb3NpdGlvbnMgdG8gbXVsdGktZGF5IGV2ZW50cyBmaXJzdFxuXHRmb3IgKGNvbnN0IGV2ZW50IG9mIHNvcnRlZE11bHRpRGF5KSB7XG5cdFx0Y29uc3QgZXZlbnRTdGFydCA9IGRheWpzLm1heChldmVudC5zdGFydC5zdGFydE9mKGdyaWRUeXBlKSwgZmlyc3REYXkpXG5cdFx0Y29uc3QgYWRqdXN0ZWRFbmQgPVxuXHRcdFx0Z3JpZFR5cGUgPT09ICdob3VyJyA/IGV2ZW50LmVuZC5zdWJ0cmFjdCgxLCAnbWludXRlJykgOiBldmVudC5lbmRcblx0XHRjb25zdCBldmVudEVuZCA9IGRheWpzLm1pbihhZGp1c3RlZEVuZC5zdGFydE9mKGdyaWRUeXBlKSwgbGFzdERheSlcblx0XHRjb25zdCBzdGFydENvbCA9IE1hdGgubWF4KDAsIGV2ZW50U3RhcnQuZGlmZihmaXJzdERheSwgZ3JpZFR5cGUpKVxuXHRcdGNvbnN0IGVuZENvbCA9IE1hdGgubWluKGRheUNvdW50IC0gMSwgZXZlbnRFbmQuZGlmZihmaXJzdERheSwgZ3JpZFR5cGUpKVxuXG5cdFx0Ly8gRGV0ZWN0IGlmIGV2ZW50IGlzIHRydW5jYXRlZCBhdCB0aGUgYm91bmRhcmllc1xuXHRcdGNvbnN0IGlzVHJ1bmNhdGVkU3RhcnQgPSBldmVudC5zdGFydC5zdGFydE9mKGdyaWRUeXBlKS5pc0JlZm9yZShmaXJzdERheSlcblx0XHRjb25zdCBpc1RydW5jYXRlZEVuZCA9IGV2ZW50LmVuZC5zdGFydE9mKGdyaWRUeXBlKS5pc0FmdGVyKGxhc3REYXkpXG5cblx0XHQvLyBUcnkgdG8gcGxhY2UgdGhlIGV2ZW50IHN0YXJ0aW5nIGZyb20gaXRzIG9yaWdpbmFsIHN0YXJ0IGNvbHVtblxuXHRcdGxldCBwbGFjZWRTdWNjZXNzZnVsbHkgPSBmYWxzZVxuXG5cdFx0Ly8gRmlyc3QgdHJ5OiBwbGFjZSBmcm9tIG9yaWdpbmFsIHN0YXJ0IHBvc2l0aW9uXG5cdFx0bGV0IGFzc2lnbmVkUm93ID0gLTFcblx0XHRmb3IgKGxldCByb3cgPSAwOyByb3cgPCBkYXlNYXhFdmVudHM7IHJvdysrKSB7XG5cdFx0XHRsZXQgY2FuUGxhY2UgPSB0cnVlXG5cdFx0XHRmb3IgKGxldCBjb2wgPSBzdGFydENvbDsgY29sIDw9IGVuZENvbDsgY29sKyspIHtcblx0XHRcdFx0aWYgKGdyaWRbcm93XVtjb2xdLnRha2VuKSB7XG5cdFx0XHRcdFx0Y2FuUGxhY2UgPSBmYWxzZVxuXHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChjYW5QbGFjZSkge1xuXHRcdFx0XHRhc3NpZ25lZFJvdyA9IHJvd1xuXHRcdFx0XHRicmVha1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIElmIHdlIGZvdW5kIGEgcm93LCBhc3NpZ24gdGhlIGV2ZW50IHRvIGFsbCBpdHMgY29sdW1uc1xuXHRcdGlmIChhc3NpZ25lZFJvdyAhPT0gLTEpIHtcblx0XHRcdGZvciAobGV0IGNvbCA9IHN0YXJ0Q29sOyBjb2wgPD0gZW5kQ29sOyBjb2wrKykge1xuXHRcdFx0XHRncmlkW2Fzc2lnbmVkUm93XVtjb2xdID0geyB0YWtlbjogdHJ1ZSwgZXZlbnQgfVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBDcmVhdGUgcG9zaXRpb24gZGF0YSBmb3IgcmVuZGVyaW5nXG5cdFx0XHRjb25zdCBzcGFuRGF5cyA9IGVuZENvbCAtIHN0YXJ0Q29sICsgMVxuXHRcdFx0cHJvY2Vzc2VkRXZlbnRzLnB1c2goe1xuXHRcdFx0XHRsZWZ0OiAoc3RhcnRDb2wgLyBkYXlDb3VudCkgKiAxMDAsXG5cdFx0XHRcdHdpZHRoOiAoc3BhbkRheXMgLyBkYXlDb3VudCkgKiAxMDAsXG5cdFx0XHRcdHRvcDpcblx0XHRcdFx0XHRkYXlOdW1iZXJIZWlnaHQgK1xuXHRcdFx0XHRcdGV2ZW50U3BhY2luZyArXG5cdFx0XHRcdFx0YXNzaWduZWRSb3cgKiAoRVZFTlRfQkFSX0hFSUdIVCArIGV2ZW50U3BhY2luZyksXG5cdFx0XHRcdGhlaWdodDogRVZFTlRfQkFSX0hFSUdIVCxcblx0XHRcdFx0cG9zaXRpb246IGFzc2lnbmVkUm93LFxuXHRcdFx0XHQuLi5ldmVudCxcblx0XHRcdFx0aXNUcnVuY2F0ZWRTdGFydCxcblx0XHRcdFx0aXNUcnVuY2F0ZWRFbmQsXG5cdFx0XHR9IGFzIFBvc2l0aW9uZWRFdmVudClcblx0XHRcdHBsYWNlZFN1Y2Nlc3NmdWxseSA9IHRydWVcblx0XHR9XG5cblx0XHQvLyBJZiBjb3VsZG4ndCBwbGFjZSBhdCBvcmlnaW5hbCBwb3NpdGlvbiwgdHJ5IHRydW5jYXRlZCB2ZXJzaW9ucyBzdGFydGluZyBmcm9tIGxhdGVyIGRheXNcblx0XHRpZiAoIXBsYWNlZFN1Y2Nlc3NmdWxseSkge1xuXHRcdFx0Zm9yIChcblx0XHRcdFx0bGV0IHRyeVN0YXJ0Q29sID0gc3RhcnRDb2wgKyAxO1xuXHRcdFx0XHR0cnlTdGFydENvbCA8PSBlbmRDb2w7XG5cdFx0XHRcdHRyeVN0YXJ0Q29sKytcblx0XHRcdCkge1xuXHRcdFx0XHQvLyBUcnkgdG8gcGxhY2UgdGhlIHRydW5jYXRlZCBldmVudCBzdGFydGluZyBmcm9tIHRoaXMgY29sdW1uXG5cdFx0XHRcdGxldCB0cnVuY2F0ZWRBc3NpZ25lZFJvdyA9IC0xXG5cdFx0XHRcdGZvciAobGV0IHJvdyA9IDA7IHJvdyA8IGRheU1heEV2ZW50czsgcm93KyspIHtcblx0XHRcdFx0XHRsZXQgY2FuUGxhY2UgPSB0cnVlXG5cdFx0XHRcdFx0Zm9yIChsZXQgY29sID0gdHJ5U3RhcnRDb2w7IGNvbCA8PSBlbmRDb2w7IGNvbCsrKSB7XG5cdFx0XHRcdFx0XHRpZiAoZ3JpZFtyb3ddW2NvbF0udGFrZW4pIHtcblx0XHRcdFx0XHRcdFx0Y2FuUGxhY2UgPSBmYWxzZVxuXHRcdFx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoY2FuUGxhY2UpIHtcblx0XHRcdFx0XHRcdHRydW5jYXRlZEFzc2lnbmVkUm93ID0gcm93XG5cdFx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIElmIHdlIGZvdW5kIGEgcm93IGZvciB0aGUgdHJ1bmNhdGVkIHZlcnNpb24sIHBsYWNlIGl0XG5cdFx0XHRcdGlmICh0cnVuY2F0ZWRBc3NpZ25lZFJvdyAhPT0gLTEpIHtcblx0XHRcdFx0XHRmb3IgKGxldCBjb2wgPSB0cnlTdGFydENvbDsgY29sIDw9IGVuZENvbDsgY29sKyspIHtcblx0XHRcdFx0XHRcdGdyaWRbdHJ1bmNhdGVkQXNzaWduZWRSb3ddW2NvbF0gPSB7IHRha2VuOiB0cnVlLCBldmVudCB9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gQ3JlYXRlIHBvc2l0aW9uIGRhdGEgZm9yIHRoZSB0cnVuY2F0ZWQgcmVuZGVyaW5nXG5cdFx0XHRcdFx0Y29uc3QgdHJ1bmNhdGVkU3BhbkRheXMgPSBlbmRDb2wgLSB0cnlTdGFydENvbCArIDFcblx0XHRcdFx0XHRwcm9jZXNzZWRFdmVudHMucHVzaCh7XG5cdFx0XHRcdFx0XHRsZWZ0OiAodHJ5U3RhcnRDb2wgLyBkYXlDb3VudCkgKiAxMDAsXG5cdFx0XHRcdFx0XHR3aWR0aDogKHRydW5jYXRlZFNwYW5EYXlzIC8gZGF5Q291bnQpICogMTAwLFxuXHRcdFx0XHRcdFx0dG9wOlxuXHRcdFx0XHRcdFx0XHRkYXlOdW1iZXJIZWlnaHQgK1xuXHRcdFx0XHRcdFx0XHRldmVudFNwYWNpbmcgK1xuXHRcdFx0XHRcdFx0XHR0cnVuY2F0ZWRBc3NpZ25lZFJvdyAqIChFVkVOVF9CQVJfSEVJR0hUICsgZXZlbnRTcGFjaW5nKSxcblx0XHRcdFx0XHRcdGhlaWdodDogRVZFTlRfQkFSX0hFSUdIVCxcblx0XHRcdFx0XHRcdHBvc2l0aW9uOiB0cnVuY2F0ZWRBc3NpZ25lZFJvdyxcblx0XHRcdFx0XHRcdC4uLmV2ZW50LFxuXHRcdFx0XHRcdFx0aXNUcnVuY2F0ZWRTdGFydDogdHJ1ZSwgLy8gQWx3YXlzIHRydW5jYXRlZCBhdCBzdGFydCB3aGVuIHVzaW5nIHRoaXMgZmFsbGJhY2sgbG9naWNcblx0XHRcdFx0XHRcdGlzVHJ1bmNhdGVkRW5kLFxuXHRcdFx0XHRcdH0gYXMgUG9zaXRpb25lZEV2ZW50KVxuXHRcdFx0XHRcdHBsYWNlZFN1Y2Nlc3NmdWxseSA9IHRydWVcblx0XHRcdFx0XHRicmVhayAvLyBTdWNjZXNzZnVsbHkgcGxhY2VkLCBzdG9wIHRyeWluZyBvdGhlciBzdGFydCBwb3NpdGlvbnNcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIFN0ZXAgMjogRmlsbCBnYXBzIHdpdGggc2luZ2xlLWRheSBldmVudHNcblx0Zm9yIChjb25zdCBldmVudCBvZiBzb3J0ZWRTaW5nbGVEYXkpIHtcblx0XHRjb25zdCBldmVudFN0YXJ0ID0gZGF5anMubWF4KGV2ZW50LnN0YXJ0LnN0YXJ0T2YoZ3JpZFR5cGUpLCBmaXJzdERheSlcblx0XHQvLyBDbGFtcCBjb2wgdG8gdmFsaWQgZ3JpZCBib3VuZHMgdG8gcHJldmVudCBhY2Nlc3NpbmcgdW5kZWZpbmVkIGdyaWQgcG9zaXRpb25zXG5cdFx0Y29uc3QgY29sID0gTWF0aC5tYXgoXG5cdFx0XHQwLFxuXHRcdFx0TWF0aC5taW4oZGF5Q291bnQgLSAxLCBldmVudFN0YXJ0LmRpZmYoZmlyc3REYXksIGdyaWRUeXBlKSlcblx0XHQpXG5cblx0XHQvLyBTaW5nbGUtZGF5IGV2ZW50cyBhcmUgbm90IHRydW5jYXRlZCBieSBkZWZpbml0aW9uXG5cdFx0Y29uc3QgaXNUcnVuY2F0ZWRTdGFydCA9IGZhbHNlXG5cdFx0Y29uc3QgaXNUcnVuY2F0ZWRFbmQgPSBmYWxzZVxuXG5cdFx0Ly8gRmluZCB0aGUgZmlyc3QgYXZhaWxhYmxlIHJvdyBpbiB0aGlzIGNvbHVtblxuXHRcdGxldCBhc3NpZ25lZFJvdyA9IC0xXG5cdFx0Zm9yIChsZXQgcm93ID0gMDsgcm93IDwgZGF5TWF4RXZlbnRzOyByb3crKykge1xuXHRcdFx0aWYgKCFncmlkW3Jvd11bY29sXS50YWtlbikge1xuXHRcdFx0XHRhc3NpZ25lZFJvdyA9IHJvd1xuXHRcdFx0XHRicmVha1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIElmIHdlIGZvdW5kIGEgcm93LCBhc3NpZ24gdGhlIGV2ZW50XG5cdFx0aWYgKGFzc2lnbmVkUm93ICE9PSAtMSkge1xuXHRcdFx0Z3JpZFthc3NpZ25lZFJvd11bY29sXSA9IHsgdGFrZW46IHRydWUsIGV2ZW50IH1cblxuXHRcdFx0Ly8gQ3JlYXRlIHBvc2l0aW9uIGRhdGEgZm9yIHJlbmRlcmluZ1xuXHRcdFx0cHJvY2Vzc2VkRXZlbnRzLnB1c2goe1xuXHRcdFx0XHRsZWZ0OiAoY29sIC8gZGF5Q291bnQpICogMTAwLFxuXHRcdFx0XHR3aWR0aDogKDEgLyBkYXlDb3VudCkgKiAxMDAsXG5cdFx0XHRcdHRvcDpcblx0XHRcdFx0XHRkYXlOdW1iZXJIZWlnaHQgK1xuXHRcdFx0XHRcdGV2ZW50U3BhY2luZyArXG5cdFx0XHRcdFx0YXNzaWduZWRSb3cgKiAoRVZFTlRfQkFSX0hFSUdIVCArIGV2ZW50U3BhY2luZyksXG5cdFx0XHRcdGhlaWdodDogRVZFTlRfQkFSX0hFSUdIVCxcblx0XHRcdFx0cG9zaXRpb246IGFzc2lnbmVkUm93LFxuXHRcdFx0XHQuLi5ldmVudCxcblx0XHRcdFx0aXNUcnVuY2F0ZWRTdGFydCxcblx0XHRcdFx0aXNUcnVuY2F0ZWRFbmQsXG5cdFx0XHR9IGFzIFBvc2l0aW9uZWRFdmVudClcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gcHJvY2Vzc2VkRXZlbnRzXG59XG4iLAogICAgImltcG9ydCBSZWFjdCwgeyBtZW1vLCB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBEYXlOdW1iZXIgfSBmcm9tICdAL2NvbXBvbmVudHMvZGF5LW51bWJlcidcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB7IGlzQnVzaW5lc3NIb3VyIH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci91dGlscy9idXNpbmVzcy1ob3VycydcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB0eXBlIHsgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IEVWRU5UX0JBUl9IRUlHSFQgfSBmcm9tICdAL2xpYi9jb25zdGFudHMnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHR5cGUgeyBTZWxlY3RlZERheUV2ZW50cyB9IGZyb20gJy4vYWxsLWV2ZW50cy1kaWFsb2cnXG5pbXBvcnQgeyBBbGxFdmVudERpYWxvZyB9IGZyb20gJy4vYWxsLWV2ZW50cy1kaWFsb2cnXG5pbXBvcnQgeyBEcm9wcGFibGVDZWxsIH0gZnJvbSAnLi9kcm9wcGFibGUtY2VsbCdcblxuaW50ZXJmYWNlIEdyaWRQcm9wcyB7XG5cdGRheTogRGF5anNcblx0aG91cj86IG51bWJlciAvLyBPcHRpb25hbCBob3VyIGZvciBob3VyLWJhc2VkIGdyaWRzXG5cdG1pbnV0ZT86IG51bWJlciAvLyBPcHRpb25hbCBtaW51dGUgZm9yIG1vcmUgZ3JhbnVsYXIgdGltZSBzbG90c1xuXHRkYXlNYXhFdmVudHM/OiBudW1iZXJcblx0Y2xhc3NOYW1lPzogc3RyaW5nIC8vIE9wdGlvbmFsIGNsYXNzTmFtZSBmb3IgY3VzdG9tIHN0eWxpbmdcblx0cmVzb3VyY2VJZD86IHN0cmluZyB8IG51bWJlciAvLyBPcHRpb25hbCByZXNvdXJjZSBJRCBmb3IgcmVzb3VyY2Utc3BlY2lmaWMgZGF5IGNlbGxzXG5cdGdyaWRUeXBlPzogJ2RheScgfCAnaG91cicgLy8gRnV0dXJlIHVzZSBmb3IgZGlmZmVyZW50IGdyaWQgdHlwZXNcblx0c2hvdWxkUmVuZGVyRXZlbnRzPzogYm9vbGVhbiAvLyBGbGFnIHRvIGRldGVybWluZSBpZiBldmVudHMgc2hvdWxkIGJlIHJlbmRlcmVkXG5cdGFsbERheT86IGJvb2xlYW4gLy8gRmxhZyB0byBpbmRpY2F0ZSBpZiB0aGlzIGlzIGFuIGFsbC1kYXkgY2VsbFxuXHRzaG93RGF5TnVtYmVyPzogYm9vbGVhbiAvLyBGbGFnIHRvIHNob3cgb3IgaGlkZSB0aGUgZGF5IG51bWJlclxuXHRjaGlsZHJlbj86IFJlYWN0LlJlYWN0Tm9kZVxuXHQnZGF0YS10ZXN0aWQnPzogc3RyaW5nXG5cdHByZWNvbXB1dGVkRXZlbnRzPzogQ2FsZW5kYXJFdmVudFtdXG59XG5cbmNvbnN0IE5vTWVtb0dyaWRDZWxsOiBSZWFjdC5GQzxHcmlkUHJvcHM+ID0gKHtcblx0ZGF5LFxuXHRob3VyLFxuXHRtaW51dGUsXG5cdGNsYXNzTmFtZSA9ICcnLFxuXHRyZXNvdXJjZUlkLFxuXHRncmlkVHlwZSA9ICdkYXknLFxuXHRzaG91bGRSZW5kZXJFdmVudHMgPSB0cnVlLFxuXHRhbGxEYXkgPSBmYWxzZSxcblx0cHJlY29tcHV0ZWRFdmVudHMsXG5cdCdkYXRhLXRlc3RpZCc6IGRhdGFUZXN0SWQsXG5cdHNob3dEYXlOdW1iZXIgPSBmYWxzZSxcblx0Y2hpbGRyZW4sXG59KSA9PiB7XG5cdGNvbnN0IGFsbEV2ZW50c0RpYWxvZ1JlZiA9IFJlYWN0LnVzZVJlZjx7XG5cdFx0b3BlbjogKCkgPT4gdm9pZFxuXHRcdGNsb3NlOiAoKSA9PiB2b2lkXG5cdFx0c2V0U2VsZWN0ZWREYXlFdmVudHM6IChkYXlFdmVudHM6IFNlbGVjdGVkRGF5RXZlbnRzKSA9PiB2b2lkXG5cdH0+KG51bGwpXG5cdGNvbnN0IHtcblx0XHRkYXlNYXhFdmVudHMgPSAwLFxuXHRcdGdldEV2ZW50c0ZvckRhdGVSYW5nZSxcblx0XHRjdXJyZW50RGF0ZSxcblx0XHR0LFxuXHRcdGdldEV2ZW50c0ZvclJlc291cmNlLFxuXHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0Y3VycmVudExvY2FsZSxcblx0XHRldmVudFNwYWNpbmcsXG5cdFx0Z2V0UmVzb3VyY2VCeUlkLFxuXHR9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXG5cdGNvbnN0IHRvZGF5RXZlbnRzID0gdXNlTWVtbygoKSA9PiB7XG5cdFx0aWYgKCFzaG91bGRSZW5kZXJFdmVudHMpIHtcblx0XHRcdHJldHVybiBbXVxuXHRcdH1cblxuXHRcdC8vIFVzZSBwcmUtY29tcHV0ZWQgZXZlbnRzIGZyb20gdGhlIHJvdyBsZXZlbCB3aGVuIGF2YWlsYWJsZVxuXHRcdGlmIChwcmVjb21wdXRlZEV2ZW50cykge1xuXHRcdFx0cmV0dXJuIHByZWNvbXB1dGVkRXZlbnRzXG5cdFx0fVxuXG5cdFx0bGV0IHRvZGF5RXZlbnRzID0gZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlKFxuXHRcdFx0ZGF5LnN0YXJ0T2YoZ3JpZFR5cGUpLFxuXHRcdFx0ZGF5LmVuZE9mKGdyaWRUeXBlKVxuXHRcdClcblxuXHRcdGlmIChhbGxEYXkpIHtcblx0XHRcdHRvZGF5RXZlbnRzID0gdG9kYXlFdmVudHMuZmlsdGVyKChlKSA9PiBlLmFsbERheSlcblx0XHR9XG5cblx0XHRpZiAocmVzb3VyY2VJZCkge1xuXHRcdFx0Y29uc3QgcmVzb3VyY2VFdmVudHMgPSBnZXRFdmVudHNGb3JSZXNvdXJjZShyZXNvdXJjZUlkKSA/PyBbXVxuXG5cdFx0XHRyZXR1cm4gdG9kYXlFdmVudHMuZmlsdGVyKChldmVudCkgPT5cblx0XHRcdFx0cmVzb3VyY2VFdmVudHMuc29tZSgocmUpID0+IFN0cmluZyhyZS5pZCkgPT09IFN0cmluZyhldmVudC5pZCkpXG5cdFx0XHQpXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRvZGF5RXZlbnRzXG5cdH0sIFtcblx0XHRwcmVjb21wdXRlZEV2ZW50cyxcblx0XHRkYXksXG5cdFx0cmVzb3VyY2VJZCxcblx0XHRnZXRFdmVudHNGb3JEYXRlUmFuZ2UsXG5cdFx0Z2V0RXZlbnRzRm9yUmVzb3VyY2UsXG5cdFx0Z3JpZFR5cGUsXG5cdFx0c2hvdWxkUmVuZGVyRXZlbnRzLFxuXHRcdGFsbERheSxcblx0XSlcblxuXHQvLyBIYW5kbGVyIGZvciBzaG93aW5nIGFsbCBldmVudHMgaW4gYSBkaWFsb2dcblx0Y29uc3Qgc2hvd0FsbEV2ZW50cyA9IChkYXk6IERheWpzLCBldmVudHM6IENhbGVuZGFyRXZlbnRbXSkgPT4ge1xuXHRcdGFsbEV2ZW50c0RpYWxvZ1JlZi5jdXJyZW50Py5zZXRTZWxlY3RlZERheUV2ZW50cyh7XG5cdFx0XHRkYXksXG5cdFx0XHRldmVudHMsXG5cdFx0fSlcblx0XHRhbGxFdmVudHNEaWFsb2dSZWYuY3VycmVudD8ub3BlbigpXG5cdH1cblxuXHRjb25zdCBpc0N1cnJlbnRNb250aCA9IGRheS5tb250aCgpID09PSBjdXJyZW50RGF0ZS5tb250aCgpXG5cblx0Y29uc3QgaGlkZGVuRXZlbnRzQ291bnQgPSB0b2RheUV2ZW50cy5sZW5ndGggLSBkYXlNYXhFdmVudHNcblx0Y29uc3QgaGFzSGlkZGVuRXZlbnRzID0gaGlkZGVuRXZlbnRzQ291bnQgPiAwXG5cblx0Ly8gVXNlIHJlc291cmNlLXNwZWNpZmljIGJ1c2luZXNzIGhvdXJzIGlmIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIGZhbGxiYWNrIHRvIGdsb2JhbFxuXHRjb25zdCBlZmZlY3RpdmVCdXNpbmVzc0hvdXJzID0gdXNlTWVtbygoKSA9PiB7XG5cdFx0aWYgKHJlc291cmNlSWQgJiYgZ2V0UmVzb3VyY2VCeUlkKSB7XG5cdFx0XHRjb25zdCByZXNvdXJjZSA9IGdldFJlc291cmNlQnlJZChyZXNvdXJjZUlkKVxuXHRcdFx0aWYgKHJlc291cmNlPy5idXNpbmVzc0hvdXJzKSB7XG5cdFx0XHRcdHJldHVybiByZXNvdXJjZS5idXNpbmVzc0hvdXJzXG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBidXNpbmVzc0hvdXJzXG5cdH0sIFtyZXNvdXJjZUlkLCBnZXRSZXNvdXJjZUJ5SWQsIGJ1c2luZXNzSG91cnNdKVxuXG5cdGNvbnN0IGlzQnVzaW5lc3MgPSBpc0J1c2luZXNzSG91cih7XG5cdFx0ZGF0ZTogZGF5LFxuXHRcdGhvdXI6IGdyaWRUeXBlID09PSAnaG91cicgPyBkYXkuaG91cigpIDogdW5kZWZpbmVkLFxuXHRcdGJ1c2luZXNzSG91cnM6IGVmZmVjdGl2ZUJ1c2luZXNzSG91cnMsXG5cdH0pXG5cblx0Y29uc3QgaG91clN0ciA9IGRheS5mb3JtYXQoJ0hIJylcblx0Y29uc3QgbW0gPSBkYXkuZm9ybWF0KCdtbScpXG5cdGNvbnN0IGJhc2VUZXN0SWQgPSBgZGF5LWNlbGwtJHtkYXkuZm9ybWF0KCdZWVlZLU1NLUREJyl9YFxuXHRjb25zdCB0ZXN0SWQgPVxuXHRcdGdyaWRUeXBlID09PSAnaG91cicgPyBgJHtiYXNlVGVzdElkfS0ke2hvdXJTdHJ9LSR7bW19YCA6IGJhc2VUZXN0SWRcblx0Ly8gRHJvcHBhYmxlIElEIG11c3QgdXNlIHRvSVNPU3RyaW5nKCkgKG5vdCBZWVlZLU1NLUREKSBzbyBlYWNoIHRpbWUgc2xvdFxuXHQvLyBnZXRzIGEgdW5pcXVlIElEIGluIEBkbmQta2l0J3MgcmVnaXN0cnkuIFlZWVktTU0tREQgc3RyaXBzIHRoZSB0aW1lLFxuXHQvLyBjYXVzaW5nIGFsbCBjZWxscyBvbiB0aGUgc2FtZSBkYXkgdG8gY29sbGlkZS5cblx0Y29uc3QgZHJvcHBhYmxlSWQgPSBgZGF5LWNlbGwtJHtkYXkudG9JU09TdHJpbmcoKX0ke2FsbERheSA/ICctYWxsZGF5JyA6ICcnfSR7cmVzb3VyY2VJZCA/IGAtcmVzb3VyY2UtJHtyZXNvdXJjZUlkfWAgOiAnJ31gXG5cblx0cmV0dXJuIChcblx0XHQ8PlxuXHRcdFx0PERyb3BwYWJsZUNlbGxcblx0XHRcdFx0YWxsRGF5PXthbGxEYXl9XG5cdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0J2N1cnNvci1wb2ludGVyIG92ZXJmbG93LWNsaXAgcC0xIGhvdmVyOmJnLWFjY2VudCBtaW4taC1bNjBweF0gcmVsYXRpdmUgYm9yZGVyLXIgbGFzdDpib3JkZXItci0wIG9ubHk6Ym9yZGVyLXIgYm9yZGVyLWInLFxuXHRcdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0XHQpfVxuXHRcdFx0XHRkYXRhLXRlc3RpZD17ZGF0YVRlc3RJZCB8fCB0ZXN0SWR9XG5cdFx0XHRcdGRhdGU9e2RheX1cblx0XHRcdFx0ZGlzYWJsZWQ9eyFpc0J1c2luZXNzIHx8ICFpc0N1cnJlbnRNb250aH1cblx0XHRcdFx0aG91cj17aG91cn1cblx0XHRcdFx0aWQ9e2Ryb3BwYWJsZUlkfVxuXHRcdFx0XHRtaW51dGU9e21pbnV0ZX1cblx0XHRcdFx0cmVzb3VyY2VJZD17cmVzb3VyY2VJZH1cblx0XHRcdFx0dHlwZT1cImRheS1jZWxsXCJcblx0XHRcdD5cblx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgaC1mdWxsIHctZnVsbFwiXG5cdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9XCJncmlkLWNlbGwtY29udGVudFwiXG5cdFx0XHRcdFx0c3R5bGU9e3sgZ2FwOiBgJHtldmVudFNwYWNpbmd9cHhgIH19XG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7c2hvd0RheU51bWJlciAmJiA8RGF5TnVtYmVyIGRhdGU9e2RheX0gbG9jYWxlPXtjdXJyZW50TG9jYWxlfSAvPn1cblxuXHRcdFx0XHRcdHtzaG91bGRSZW5kZXJFdmVudHMgJiYgKFxuXHRcdFx0XHRcdFx0PD5cblx0XHRcdFx0XHRcdFx0ey8qIFJlbmRlciBwbGFjZWhvbGRlcnMgZm9yIGV2ZW50cyB0aGF0IG9jY3VyIHRvZGF5IHNvIHRoYXQgdGhlIGNlbGwgaGVpZ2h0IGlzIGFjY29yZGluZyB0byBkYXlNYXhFdmVudHMuICovfVxuXHRcdFx0XHRcdFx0XHR7dG9kYXlFdmVudHMuc2xpY2UoMCwgZGF5TWF4RXZlbnRzKS5tYXAoKGV2ZW50LCByb3dJbmRleCkgPT4gKFxuXHRcdFx0XHRcdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cInctZnVsbCBzaHJpbmstMFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD17ZXZlbnQ/LnRpdGxlfVxuXHRcdFx0XHRcdFx0XHRcdFx0a2V5PXtgZW1wdHktJHtyb3dJbmRleH0tJHtldmVudC5pZH1gfVxuXHRcdFx0XHRcdFx0XHRcdFx0c3R5bGU9e3sgaGVpZ2h0OiBgJHtFVkVOVF9CQVJfSEVJR0hUfXB4YCB9fVxuXHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdCkpfVxuXG5cdFx0XHRcdFx0XHRcdHsvKiBTaG93IG1vcmUgZXZlbnRzIGJ1dHRvbiB3aXRoIGFjY3VyYXRlIGNvdW50ICovfVxuXHRcdFx0XHRcdFx0XHR7aGFzSGlkZGVuRXZlbnRzICYmIChcblx0XHRcdFx0XHRcdFx0XHQvLyBiaW9tZS1pZ25vcmUgbGludC9hMTF5L3VzZVNlbWFudGljRWxlbWVudHM6IFVzaW5nIGRpdiBhcyBidXR0b25cblx0XHRcdFx0XHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJ0ZXh0LW11dGVkLWZvcmVncm91bmQgaG92ZXI6dGV4dC1mb3JlZ3JvdW5kIGN1cnNvci1wb2ludGVyIHRleHQtWzEwcHhdIHdoaXRlc3BhY2Utbm93cmFwIHNtOnRleHQteHMgc2hyaW5rLTAgbXQtMVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRvbkNsaWNrPXsoZSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRlLnN0b3BQcm9wYWdhdGlvbigpXG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0c2hvd0FsbEV2ZW50cyhkYXksIHRvZGF5RXZlbnRzKVxuXHRcdFx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdFx0XHRcdG9uS2V5RG93bj17KGUpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGUua2V5ID09PSAnRW50ZXInIHx8IGUua2V5ID09PSAnICcpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRlLnByZXZlbnREZWZhdWx0KClcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRlLnN0b3BQcm9wYWdhdGlvbigpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0c2hvd0FsbEV2ZW50cyhkYXksIHRvZGF5RXZlbnRzKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHRcdFx0cm9sZT1cImJ1dHRvblwiXG5cdFx0XHRcdFx0XHRcdFx0XHR0YWJJbmRleD17MH1cblx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHQre2hpZGRlbkV2ZW50c0NvdW50fSB7dCgnbW9yZScpfVxuXHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0PC8+XG5cdFx0XHRcdFx0KX1cblx0XHRcdFx0XHR7Y2hpbGRyZW59XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0PC9Ecm9wcGFibGVDZWxsPlxuXG5cdFx0XHR7LyogRGlhbG9nIGZvciBzaG93aW5nIGFsbCBldmVudHMgKi99XG5cdFx0XHQ8QWxsRXZlbnREaWFsb2cgcmVmPXthbGxFdmVudHNEaWFsb2dSZWZ9IC8+XG5cdFx0PC8+XG5cdClcbn1cblxuZXhwb3J0IGNvbnN0IEdyaWRDZWxsID0gbWVtbyhOb01lbW9HcmlkQ2VsbCkgYXMgdHlwZW9mIE5vTWVtb0dyaWRDZWxsXG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IGRheWpzLCB7IHR5cGUgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmludGVyZmFjZSBEYXlOdW1iZXJQcm9wcyB7XG5cdGRhdGU6IERheWpzXG5cdGxvY2FsZT86IHN0cmluZ1xuXHRjbGFzc05hbWU/OiBzdHJpbmdcbn1cblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBkYXkgbnVtYmVyIGZvciBhIGNhbGVuZGFyIGNlbGwsIGhpZ2hsaWdodGluZyAndG9kYXknIHdpdGggYSBwcmltYXJ5IGJhY2tncm91bmQuXG4gKi9cbmV4cG9ydCBjb25zdCBEYXlOdW1iZXI6IFJlYWN0LkZDPERheU51bWJlclByb3BzPiA9ICh7XG5cdGRhdGUsXG5cdGxvY2FsZSA9ICdlbicsXG5cdGNsYXNzTmFtZSxcbn0pID0+IHtcblx0Y29uc3QgaXNUb2RheSA9IGRhdGUuaXNTYW1lKGRheWpzKCksICdkYXknKVxuXG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0J2ZsZXggaC01IHctNSBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZC1mdWxsIHRleHQteHMgc2hyaW5rLTAnLFxuXHRcdFx0XHRpc1RvZGF5ICYmICdiZy1wcmltYXJ5IHRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIGZvbnQtbWVkaXVtJyxcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0ZGF0YS10ZXN0aWQ9e1xuXHRcdFx0XHRpc1RvZGF5ID8gJ2RheS1udW1iZXItdG9kYXknIDogYGRheS1udW1iZXItJHtkYXRlLmZvcm1hdCgnRCcpfWBcblx0XHRcdH1cblx0XHQ+XG5cdFx0XHR7ZGF0ZS5mb3JtYXQoJ0QnKX1cblx0XHQ8L2Rpdj5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZUltcGVyYXRpdmVIYW5kbGUsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMnXG5pbXBvcnQgeyBEcmFnZ2FibGVFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy9kcmFnZ2FibGUtZXZlbnQvZHJhZ2dhYmxlLWV2ZW50J1xuaW1wb3J0IHtcblx0RGlhbG9nLFxuXHREaWFsb2dDb250ZW50LFxuXHREaWFsb2dIZWFkZXIsXG5cdERpYWxvZ1RpdGxlLFxufSBmcm9tICdAL2NvbXBvbmVudHMvdWkvZGlhbG9nJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUgeyBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuZXhwb3J0IGludGVyZmFjZSBTZWxlY3RlZERheUV2ZW50cyB7XG5cdGRheTogRGF5anNcblx0ZXZlbnRzOiBDYWxlbmRhckV2ZW50W11cbn1cblxuaW50ZXJmYWNlIEFsbEV2ZW50RGlhbG9nUHJvcHMge1xuXHRyZWY6IFJlYWN0LlJlZjx7XG5cdFx0b3BlbjogKCkgPT4gdm9pZFxuXHRcdGNsb3NlOiAoKSA9PiB2b2lkXG5cdFx0c2V0U2VsZWN0ZWREYXlFdmVudHM6IChkYXlFdmVudHM6IFNlbGVjdGVkRGF5RXZlbnRzKSA9PiB2b2lkXG5cdH0+XG59XG5cbmV4cG9ydCBjb25zdCBBbGxFdmVudERpYWxvZzogUmVhY3QuRkM8QWxsRXZlbnREaWFsb2dQcm9wcz4gPSAoeyByZWYgfSkgPT4ge1xuXHRjb25zdCBbZGlhbG9nT3Blbiwgc2V0RGlhbG9nT3Blbl0gPSB1c2VTdGF0ZShmYWxzZSlcblx0Y29uc3QgW3NlbGVjdGVkRGF5RXZlbnRzLCBzZXRTZWxlY3RlZERheUV2ZW50c10gPVxuXHRcdHVzZVN0YXRlPFNlbGVjdGVkRGF5RXZlbnRzIHwgbnVsbD4obnVsbClcblx0Y29uc3QgeyBjdXJyZW50RGF0ZSwgZmlyc3REYXlPZldlZWsgfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblxuXHR1c2VJbXBlcmF0aXZlSGFuZGxlKHJlZiwgKCkgPT4gKHtcblx0XHRvcGVuOiAoKSA9PiBzZXREaWFsb2dPcGVuKHRydWUpLFxuXHRcdGNsb3NlOiAoKSA9PiBzZXREaWFsb2dPcGVuKGZhbHNlKSxcblx0XHRzZXRTZWxlY3RlZERheUV2ZW50czogKGRheUV2ZW50czogU2VsZWN0ZWREYXlFdmVudHMpID0+XG5cdFx0XHRzZXRTZWxlY3RlZERheUV2ZW50cyhkYXlFdmVudHMpLFxuXHR9KSlcblxuXHQvLyBHZXQgc3RhcnQgZGF0ZSBmb3IgdGhlIGN1cnJlbnQgbW9udGggdmlldyBiYXNlZCBvbiBmaXJzdERheU9mV2Vla1xuXHRjb25zdCBmaXJzdERheU9mTW9udGggPSBjdXJyZW50RGF0ZS5zdGFydE9mKCdtb250aCcpXG5cblx0Ly8gQ2FsY3VsYXRlIHRoZSBmaXJzdCBkYXkgb2YgdGhlIGNhbGVuZGFyIGdyaWQgY29ycmVjdGx5XG5cdC8vIEZpbmQgdGhlIGZpcnN0IGRheSBvZiB3ZWVrIChlLmcuIFN1bmRheSBvciBNb25kYXkpIHRoYXQgY29tZXMgYmVmb3JlIG9yIG9uIHRoZSBmaXJzdCBkYXkgb2YgdGhlIG1vbnRoXG5cdGxldCBhZGp1c3RlZEZpcnN0RGF5T2ZDYWxlbmRhciA9IGZpcnN0RGF5T2ZNb250aC5jbG9uZSgpXG5cdHdoaWxlIChhZGp1c3RlZEZpcnN0RGF5T2ZDYWxlbmRhci5kYXkoKSAhPT0gZmlyc3REYXlPZldlZWspIHtcblx0XHRhZGp1c3RlZEZpcnN0RGF5T2ZDYWxlbmRhciA9IGFkanVzdGVkRmlyc3REYXlPZkNhbGVuZGFyLnN1YnRyYWN0KDEsICdkYXknKVxuXHR9XG5cblx0cmV0dXJuIChcblx0XHQ8RGlhbG9nIG9uT3BlbkNoYW5nZT17c2V0RGlhbG9nT3Blbn0gb3Blbj17ZGlhbG9nT3Blbn0+XG5cdFx0XHQ8RGlhbG9nQ29udGVudCBjbGFzc05hbWU9XCJtYXgtaC1bODB2aF0gbWF4LXctbWQgb3ZlcmZsb3cteS1hdXRvXCI+XG5cdFx0XHRcdDxEaWFsb2dIZWFkZXI+XG5cdFx0XHRcdFx0PERpYWxvZ1RpdGxlPlxuXHRcdFx0XHRcdFx0e3NlbGVjdGVkRGF5RXZlbnRzPy5kYXkuZm9ybWF0KCdNTU1NIEQsIFlZWVknKX1cblx0XHRcdFx0XHQ8L0RpYWxvZ1RpdGxlPlxuXHRcdFx0XHQ8L0RpYWxvZ0hlYWRlcj5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJtdC00IHNwYWNlLXktM1wiPlxuXHRcdFx0XHRcdHtzZWxlY3RlZERheUV2ZW50cz8uZXZlbnRzLm1hcCgoZXZlbnQpID0+IHtcblx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdDxEcmFnZ2FibGVFdmVudFxuXHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cInJlbGF0aXZlIG15LTEgaC1bMzBweF1cIiAvLyBVc2UgZXZlbnQgSUQgZm9yIHVuaXF1ZSBpZGVudGlmaWNhdGlvblxuXHRcdFx0XHRcdFx0XHRcdGVsZW1lbnRJZD17YGFsbC1ldmVudHMtZGlhbG9nLWV2ZW50LSQke2V2ZW50LmlkfWB9XG5cdFx0XHRcdFx0XHRcdFx0ZXZlbnQ9e2V2ZW50fVxuXHRcdFx0XHRcdFx0XHRcdGtleT17ZXZlbnQuaWR9XG5cdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0fSl9XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0PC9EaWFsb2dDb250ZW50PlxuXHRcdDwvRGlhbG9nPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB7IHVzZURyYWdnYWJsZSB9IGZyb20gJ0BkbmQta2l0L2NvcmUnXG5pbXBvcnQgdHlwZSB7IENTU1Byb3BlcnRpZXMgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IG1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEFuaW1hdGVkU2VjdGlvbiB9IGZyb20gJ0AvY29tcG9uZW50cy9hbmltYXRpb25zL2FuaW1hdGVkLXNlY3Rpb24nXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5jb25zdCBnZXRCb3JkZXJSYWRpdXNDbGFzcyA9IChcblx0aXNUcnVuY2F0ZWRTdGFydDogYm9vbGVhbixcblx0aXNUcnVuY2F0ZWRFbmQ6IGJvb2xlYW5cbikgPT4ge1xuXHRpZiAoaXNUcnVuY2F0ZWRTdGFydCAmJiBpc1RydW5jYXRlZEVuZCkge1xuXHRcdHJldHVybiAncm91bmRlZC1ub25lJ1xuXHR9XG5cdGlmIChpc1RydW5jYXRlZFN0YXJ0KSB7XG5cdFx0cmV0dXJuICdyb3VuZGVkLXItbWQgcm91bmRlZC1sLW5vbmUnXG5cdH1cblx0aWYgKGlzVHJ1bmNhdGVkRW5kKSB7XG5cdFx0cmV0dXJuICdyb3VuZGVkLWwtbWQgcm91bmRlZC1yLW5vbmUnXG5cdH1cblx0cmV0dXJuICdyb3VuZGVkLW1kJ1xufVxuXG5mdW5jdGlvbiBEcmFnZ2FibGVFdmVudFVubWVtb2l6ZWQoe1xuXHRlbGVtZW50SWQsXG5cdGV2ZW50LFxuXHRjbGFzc05hbWUsXG5cdHN0eWxlLFxuXHRkaXNhYmxlRHJhZyA9IGZhbHNlLFxufToge1xuXHRlbGVtZW50SWQ6IHN0cmluZ1xuXHRjbGFzc05hbWU/OiBzdHJpbmdcblx0c3R5bGU/OiBDU1NQcm9wZXJ0aWVzXG5cdGV2ZW50OiBDYWxlbmRhckV2ZW50XG5cdGRpc2FibGVEcmFnPzogYm9vbGVhblxufSkge1xuXHRjb25zdCB7IG9uRXZlbnRDbGljaywgcmVuZGVyRXZlbnQsIGRpc2FibGVFdmVudENsaWNrLCBkaXNhYmxlRHJhZ0FuZERyb3AgfSA9XG5cdFx0dXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXG5cdGNvbnN0IHsgYXR0cmlidXRlcywgbGlzdGVuZXJzLCBzZXROb2RlUmVmLCBpc0RyYWdnaW5nIH0gPSB1c2VEcmFnZ2FibGUoe1xuXHRcdGlkOiBlbGVtZW50SWQsXG5cdFx0ZGF0YToge1xuXHRcdFx0ZXZlbnQsXG5cdFx0XHR0eXBlOiAnY2FsZW5kYXItZXZlbnQnLFxuXHRcdH0sXG5cdFx0ZGlzYWJsZWQ6IGRpc2FibGVEcmFnIHx8IGRpc2FibGVEcmFnQW5kRHJvcCxcblx0fSlcblxuXHQvLyBEZWZhdWx0IGV2ZW50IGNvbnRlbnQgdG8gcmVuZGVyIGlmIGN1c3RvbSByZW5kZXJFdmVudCBpcyBub3QgcHJvdmlkZWRcblx0Y29uc3QgRGVmYXVsdEV2ZW50Q29udGVudCA9ICgpID0+IHtcblx0XHQvLyBDaGVjayBpZiB0aGlzIGV2ZW50IGhhcyB0cnVuY2F0aW9uIGluZm9ybWF0aW9uXG5cdFx0Y29uc3QgZW5oYW5jZWRFdmVudCA9IGV2ZW50IGFzIHVua25vd24gYXMge1xuXHRcdFx0aXNUcnVuY2F0ZWRTdGFydD86IGJvb2xlYW5cblx0XHRcdGlzVHJ1bmNhdGVkRW5kPzogYm9vbGVhblxuXHRcdH1cblx0XHRjb25zdCBpc1RydW5jYXRlZFN0YXJ0ID0gZW5oYW5jZWRFdmVudC5pc1RydW5jYXRlZFN0YXJ0XG5cdFx0Y29uc3QgaXNUcnVuY2F0ZWRFbmQgPSBlbmhhbmNlZEV2ZW50LmlzVHJ1bmNhdGVkRW5kXG5cblx0XHRyZXR1cm4gKFxuXHRcdFx0PGRpdlxuXHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdGV2ZW50LmJhY2tncm91bmRDb2xvciB8fCAnYmctYmx1ZS01MDAnLFxuXHRcdFx0XHRcdGV2ZW50LmNvbG9yIHx8ICd0ZXh0LXdoaXRlJyxcblx0XHRcdFx0XHQnaC1mdWxsIHctZnVsbCBweC0xIGJvcmRlci1bMS41cHhdIGJvcmRlci1jYXJkIHRleHQtbGVmdCBvdmVyZmxvdy1jbGlwIHJlbGF0aXZlJyxcblx0XHRcdFx0XHRnZXRCb3JkZXJSYWRpdXNDbGFzcyhcblx0XHRcdFx0XHRcdEJvb2xlYW4oaXNUcnVuY2F0ZWRTdGFydCksXG5cdFx0XHRcdFx0XHRCb29sZWFuKGlzVHJ1bmNhdGVkRW5kKVxuXHRcdFx0XHRcdClcblx0XHRcdFx0KX1cblx0XHRcdFx0c3R5bGU9e3sgYmFja2dyb3VuZENvbG9yOiBldmVudC5iYWNrZ3JvdW5kQ29sb3IsIGNvbG9yOiBldmVudC5jb2xvciB9fVxuXHRcdFx0PlxuXHRcdFx0XHR7LyogTGVmdCBjb250aW51YXRpb24gaW5kaWNhdG9yICovfVxuXHRcdFx0XHR7aXNUcnVuY2F0ZWRTdGFydCAmJiAoXG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJhYnNvbHV0ZSBsZWZ0LTAgdG9wLTAgYm90dG9tLTAgdy0wLjUgYmctZm9yZWdyb3VuZC8yNVwiPjwvZGl2PlxuXHRcdFx0XHQpfVxuXG5cdFx0XHRcdHsvKiBFdmVudCB0aXRsZSAqL31cblx0XHRcdFx0PHBcblx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0J3RleHQtWzEwcHhdIGZvbnQtc2VtaWJvbGQgc206dGV4dC14cyBtdC0wLjUnLFxuXHRcdFx0XHRcdFx0Ly8gQWRkIHNsaWdodCBwYWRkaW5nIHRvIGF2b2lkIG92ZXJsYXAgd2l0aCBpbmRpY2F0b3JzXG5cdFx0XHRcdFx0XHRpc1RydW5jYXRlZFN0YXJ0ICYmICdwbC0xJyxcblx0XHRcdFx0XHRcdGlzVHJ1bmNhdGVkRW5kICYmICdwci0xJ1xuXHRcdFx0XHRcdCl9XG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7ZXZlbnQudGl0bGV9XG5cdFx0XHRcdDwvcD5cblxuXHRcdFx0XHR7LyogUmlnaHQgY29udGludWF0aW9uIGluZGljYXRvciAqL31cblx0XHRcdFx0e2lzVHJ1bmNhdGVkRW5kICYmIChcblx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImFic29sdXRlIHJpZ2h0LTAgdG9wLTAgYm90dG9tLTAgdy0wLjUgYmctZm9yZWdyb3VuZC8yNVwiPjwvZGl2PlxuXHRcdFx0XHQpfVxuXHRcdFx0PC9kaXY+XG5cdFx0KVxuXHR9XG5cblx0cmV0dXJuIChcblx0XHQ8QW5pbWF0ZWRTZWN0aW9uXG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQndHJ1bmNhdGUgaC1mdWxsIHctZnVsbCcsXG5cdFx0XHRcdGRpc2FibGVEcmFnIHx8IGRpc2FibGVEcmFnQW5kRHJvcFxuXHRcdFx0XHRcdD8gZGlzYWJsZUV2ZW50Q2xpY2tcblx0XHRcdFx0XHRcdD8gJ2N1cnNvci1kZWZhdWx0J1xuXHRcdFx0XHRcdFx0OiAnY3Vyc29yLXBvaW50ZXInXG5cdFx0XHRcdFx0OiAnY3Vyc29yLWdyYWInLFxuXHRcdFx0XHRpc0RyYWdnaW5nICYmXG5cdFx0XHRcdFx0IShkaXNhYmxlRHJhZyB8fCBkaXNhYmxlRHJhZ0FuZERyb3ApICYmXG5cdFx0XHRcdFx0J2N1cnNvci1ncmFiYmluZyBzaGFkb3ctbGcnLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRsYXlvdXQ9e3RydWV9XG5cdFx0XHRsYXlvdXRJZD17ZWxlbWVudElkfVxuXHRcdFx0b25DbGljaz17KGUpID0+IHtcblx0XHRcdFx0ZS5zdG9wUHJvcGFnYXRpb24oKVxuXHRcdFx0XHRvbkV2ZW50Q2xpY2soZXZlbnQpXG5cdFx0XHR9fVxuXHRcdFx0cmVmPXtzZXROb2RlUmVmfVxuXHRcdFx0c3R5bGU9e3N0eWxlfVxuXHRcdFx0dHJhbnNpdGlvbktleT17ZWxlbWVudElkfVxuXHRcdFx0ey4uLmF0dHJpYnV0ZXN9XG5cdFx0XHR7Li4ubGlzdGVuZXJzfVxuXHRcdD5cblx0XHRcdHsvKiBVc2UgY3VzdG9tIHJlbmRlckV2ZW50IGZyb20gY29udGV4dCBpZiBhdmFpbGFibGUsIG90aGVyd2lzZSB1c2UgZGVmYXVsdCAqL31cblx0XHRcdHtyZW5kZXJFdmVudCA/IHJlbmRlckV2ZW50KGV2ZW50KSA6IDxEZWZhdWx0RXZlbnRDb250ZW50IC8+fVxuXHRcdDwvQW5pbWF0ZWRTZWN0aW9uPlxuXHQpXG59XG5cbmV4cG9ydCBjb25zdCBEcmFnZ2FibGVFdmVudCA9IG1lbW8oXG5cdERyYWdnYWJsZUV2ZW50VW5tZW1vaXplZCxcblx0KHByZXZQcm9wcywgbmV4dFByb3BzKSA9PiB7XG5cdFx0Ly8gQ29tcGFyZSB0aGUgZXNzZW50aWFsIHByb3BzIHRvIHByZXZlbnQgdW5uZWNlc3NhcnkgcmUtcmVuZGVyc1xuXHRcdHJldHVybiAoXG5cdFx0XHRwcmV2UHJvcHMuZWxlbWVudElkID09PSBuZXh0UHJvcHMuZWxlbWVudElkICYmXG5cdFx0XHRwcmV2UHJvcHMuZGlzYWJsZURyYWcgPT09IG5leHRQcm9wcy5kaXNhYmxlRHJhZyAmJlxuXHRcdFx0cHJldlByb3BzLmNsYXNzTmFtZSA9PT0gbmV4dFByb3BzLmNsYXNzTmFtZSAmJlxuXHRcdFx0cHJldlByb3BzLmV2ZW50ID09PSBuZXh0UHJvcHMuZXZlbnRcblx0XHQpXG5cdH1cbilcbiIsCiAgICAiLy8gb3hsaW50LWRpc2FibGUgbm8tbmVnYXRlZC1jb25kaXRpb25cblxuaW1wb3J0IHsgdXNlRHJvcHBhYmxlIH0gZnJvbSAnQGRuZC1raXQvY29yZSdcbmltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUgeyBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgRElTQUJMRURfQ0VMTF9DTEFTU05BTUUgfSBmcm9tICdAL2xpYi9jb25zdGFudHMnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5pbnRlcmZhY2UgRHJvcHBhYmxlQ2VsbFByb3BzIHtcblx0aWQ6IHN0cmluZ1xuXHR0eXBlOiAnZGF5LWNlbGwnIHwgJ3RpbWUtY2VsbCdcblx0ZGF0ZTogRGF5anNcblx0aG91cj86IG51bWJlclxuXHRtaW51dGU/OiBudW1iZXJcblx0cmVzb3VyY2VJZD86IHN0cmluZyB8IG51bWJlclxuXHRhbGxEYXk/OiBib29sZWFuXG5cdGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlXG5cdGNsYXNzTmFtZT86IHN0cmluZ1xuXHRzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXNcblx0J2RhdGEtdGVzdGlkJz86IHN0cmluZ1xuXHRkaXNhYmxlZD86IGJvb2xlYW5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIERyb3BwYWJsZUNlbGwoe1xuXHRpZCxcblx0dHlwZSxcblx0ZGF0ZSxcblx0aG91cixcblx0bWludXRlLFxuXHRyZXNvdXJjZUlkLFxuXHRhbGxEYXksXG5cdGNoaWxkcmVuLFxuXHRjbGFzc05hbWUsXG5cdHN0eWxlLFxuXHQnZGF0YS10ZXN0aWQnOiBkYXRhVGVzdElkLFxuXHRkaXNhYmxlZCA9IGZhbHNlLFxufTogRHJvcHBhYmxlQ2VsbFByb3BzKSB7XG5cdGNvbnN0IHtcblx0XHRvbkNlbGxDbGljayxcblx0XHRkaXNhYmxlRHJhZ0FuZERyb3AsXG5cdFx0ZGlzYWJsZUNlbGxDbGljayxcblx0XHRjbGFzc2VzT3ZlcnJpZGUsXG5cdFx0dmlldyxcblx0fSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblxuXHRjb25zdCB7IGlzT3Zlciwgc2V0Tm9kZVJlZiB9ID0gdXNlRHJvcHBhYmxlKHtcblx0XHRpZCxcblx0XHRkYXRhOiB7XG5cdFx0XHR0eXBlLFxuXHRcdFx0ZGF0ZSxcblx0XHRcdGhvdXIsXG5cdFx0XHRtaW51dGUsXG5cdFx0XHRyZXNvdXJjZUlkLFxuXHRcdFx0YWxsRGF5LFxuXHRcdH0sXG5cdFx0ZGlzYWJsZWQ6IGRpc2FibGVEcmFnQW5kRHJvcCB8fCBkaXNhYmxlZCxcblx0fSlcblxuXHRjb25zdCBoYW5kbGVDZWxsQ2xpY2sgPSAoZTogUmVhY3QuTW91c2VFdmVudCkgPT4ge1xuXHRcdGUuc3RvcFByb3BhZ2F0aW9uKClcblxuXHRcdGlmIChkaXNhYmxlQ2VsbENsaWNrIHx8IGRpc2FibGVkKSB7XG5cdFx0XHRyZXR1cm5cblx0XHR9XG5cblx0XHRjb25zdCBzdGFydCA9IGRhdGUuaG91cihob3VyID8/IDApLm1pbnV0ZShtaW51dGUgPz8gMClcblx0XHRsZXQgZW5kID0gc3RhcnQuY2xvbmUoKVxuXHRcdGlmIChob3VyICE9PSB1bmRlZmluZWQgJiYgbWludXRlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGVuZCA9IGVuZC5ob3VyKGhvdXIpLm1pbnV0ZShtaW51dGUgKyAxNSkgLy8gZGF5IHZpZXcgdGltZSBzbG90cyBhcmUgMTUgbWludXRlc1xuXHRcdH0gZWxzZSBpZiAoaG91ciAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRlbmQgPSBlbmQuaG91cihob3VyICsgMSkubWludXRlKDApIC8vIHdlZWsgdmlldyB0aW1lIHNsb3RzIGFyZSAxIGhvdXJcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZW5kID0gZW5kLmhvdXIoMjMpLm1pbnV0ZSg1OSkgLy8gbW9udGggdmlldyBmdWxsIGRheVxuXHRcdH1cblxuXHRcdG9uQ2VsbENsaWNrKHsgc3RhcnQsIGVuZCwgcmVzb3VyY2VJZCwgYWxsRGF5IH0pXG5cdH1cblxuXHRyZXR1cm4gKFxuXHRcdC8vIGJpb21lLWlnbm9yZSBsaW50L2ExMXkvbm9TdGF0aWNFbGVtZW50SW50ZXJhY3Rpb25zOiBUaGUgY2VsbCBpcyBpbnRlcmFjdGl2ZSBmb3IgZXZlbnQgY3JlYXRpb25cblx0XHQvLyBiaW9tZS1pZ25vcmUgbGludC9hMTF5L3VzZUtleVdpdGhDbGlja0V2ZW50czogS2V5IGV2ZW50cyBhcmUgaGFuZGxlZCBieSBwYXJlbnQgY29tcG9uZW50c1xuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCdkcm9wcGFibGUtY2VsbCcsXG5cdFx0XHRcdGNsYXNzTmFtZSxcblx0XHRcdFx0aXNPdmVyICYmICFkaXNhYmxlRHJhZ0FuZERyb3AgJiYgIWRpc2FibGVkICYmICdiZy1hY2NlbnQnLFxuXHRcdFx0XHRkaXNhYmxlQ2VsbENsaWNrIHx8IGRpc2FibGVkID8gJ2N1cnNvci1kZWZhdWx0JyA6ICdjdXJzb3ItcG9pbnRlcicsXG5cdFx0XHRcdGRpc2FibGVkICYmIChjbGFzc2VzT3ZlcnJpZGU/LmRpc2FibGVkQ2VsbCB8fCBESVNBQkxFRF9DRUxMX0NMQVNTTkFNRSlcblx0XHRcdCl9XG5cdFx0XHRkYXRhLWRpc2FibGVkPXtkaXNhYmxlZC50b1N0cmluZygpfVxuXHRcdFx0ZGF0YS10ZXN0aWQ9e2RhdGFUZXN0SWR9XG5cdFx0XHRkYXRhLXZpZXc9e3ZpZXd9XG5cdFx0XHRvbkNsaWNrPXtoYW5kbGVDZWxsQ2xpY2t9XG5cdFx0XHRyZWY9e3NldE5vZGVSZWZ9XG5cdFx0XHRzdHlsZT17c3R5bGV9XG5cdFx0PlxuXHRcdFx0e2NoaWxkcmVufVxuXHRcdDwvZGl2PlxuXHQpXG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgUmVzb3VyY2UgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL3R5cGVzJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuaW50ZXJmYWNlIFJlc291cmNlQ2VsbFByb3BzIHtcblx0cmVzb3VyY2U6IFJlc291cmNlXG5cdGNsYXNzTmFtZT86IHN0cmluZ1xuXHRjaGlsZHJlbj86IFJlYWN0LlJlYWN0Tm9kZVxuXHQnZGF0YS10ZXN0aWQnPzogc3RyaW5nXG59XG5cbmV4cG9ydCBjb25zdCBSZXNvdXJjZUNlbGw6IFJlYWN0LkZDPFJlc291cmNlQ2VsbFByb3BzPiA9ICh7XG5cdHJlc291cmNlLFxuXHRjbGFzc05hbWUsXG5cdGNoaWxkcmVuLFxuXHQnZGF0YS10ZXN0aWQnOiBkYXRhVGVzdElkLFxufSkgPT4ge1xuXHRjb25zdCB7IHJlbmRlclJlc291cmNlIH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQnZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcC0yIGJvcmRlci1yIGxhc3Q6Ym9yZGVyLXItMCcsXG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHRcdGRhdGEtdGVzdGlkPXtkYXRhVGVzdElkfVxuXHRcdFx0c3R5bGU9e3tcblx0XHRcdFx0Y29sb3I6IHJlc291cmNlLmNvbG9yLFxuXHRcdFx0XHRiYWNrZ3JvdW5kQ29sb3I6IHJlc291cmNlLmJhY2tncm91bmRDb2xvcixcblx0XHRcdH19XG5cdFx0PlxuXHRcdFx0e3JlbmRlclJlc291cmNlXG5cdFx0XHRcdD8gcmVuZGVyUmVzb3VyY2UocmVzb3VyY2UpXG5cdFx0XHRcdDogKGNoaWxkcmVuID8/IChcblx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSBmb250LW1lZGl1bSB0cnVuY2F0ZVwiPntyZXNvdXJjZS50aXRsZX08L2Rpdj5cblx0XHRcdFx0XHQpKX1cblx0XHQ8L2Rpdj5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgeyBtZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBEcmFnZ2FibGVFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy9kcmFnZ2FibGUtZXZlbnQvZHJhZ2dhYmxlLWV2ZW50J1xuaW1wb3J0IHR5cGUgeyBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgRVZFTlRfQkFSX0hFSUdIVCB9IGZyb20gJ0AvbGliL2NvbnN0YW50cydcbmltcG9ydCB0eXBlIHsgUG9zaXRpb25lZEV2ZW50IH0gZnJvbSAnQC9saWIvdXRpbHMvcG9zaXRpb24td2Vlay1ldmVudHMnXG5cbmV4cG9ydCBpbnRlcmZhY2UgSG9yaXpvbnRhbEdyaWRFdmVudHNMYXllclByb3BzIHtcblx0ZGF5czogRGF5anNbXVxuXHRyZXNvdXJjZUlkPzogc3RyaW5nIHwgbnVtYmVyXG5cdCdkYXRhLXRlc3RpZCc/OiBzdHJpbmdcblx0cG9zaXRpb25lZEV2ZW50czogUG9zaXRpb25lZEV2ZW50W11cbn1cblxuY29uc3QgTm9NZW1vSG9yaXpvbnRhbEdyaWRFdmVudHNMYXllcjogUmVhY3QuRkM8XG5cdEhvcml6b250YWxHcmlkRXZlbnRzTGF5ZXJQcm9wc1xuPiA9ICh7IGRheXMsIHJlc291cmNlSWQsICdkYXRhLXRlc3RpZCc6IGRhdGFUZXN0SWQsIHBvc2l0aW9uZWRFdmVudHMgfSkgPT4ge1xuXHRjb25zdCB3ZWVrU3RhcnQgPSBkYXlzLmF0KDApPy5zdGFydE9mKCdkYXknKVxuXG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPVwiYWJzb2x1dGUgaW5zZXQtMCBwb2ludGVyLWV2ZW50cy1ub25lIHotMTAgb3ZlcmZsb3ctY2xpcFwiXG5cdFx0XHRkYXRhLXRlc3RpZD17ZGF0YVRlc3RJZH1cblx0XHQ+XG5cdFx0XHR7cG9zaXRpb25lZEV2ZW50cy5tYXAoKGV2ZW50KSA9PiB7XG5cdFx0XHRcdGNvbnN0IGV2ZW50S2V5ID0gYCR7ZXZlbnQuaWR9LSR7ZXZlbnQucG9zaXRpb259LSR7d2Vla1N0YXJ0Py50b0lTT1N0cmluZygpfS0ke3Jlc291cmNlSWQgPz8gJ25vLXJlc291cmNlJ31gXG5cblx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJhYnNvbHV0ZSB6LTEwIHBvaW50ZXItZXZlbnRzLWF1dG8gb3ZlcmZsb3ctY2xpcFwiXG5cdFx0XHRcdFx0XHRkYXRhLWxlZnQ9e2V2ZW50LmxlZnR9XG5cdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD17YGhvcml6b250YWwtZXZlbnQtJHtldmVudC5pZH1gfVxuXHRcdFx0XHRcdFx0ZGF0YS10b3A9e2V2ZW50LnRvcH1cblx0XHRcdFx0XHRcdGRhdGEtd2lkdGg9e2V2ZW50LndpZHRofVxuXHRcdFx0XHRcdFx0a2V5PXtgJHtldmVudEtleX0td3JhcHBlcmB9XG5cdFx0XHRcdFx0XHRzdHlsZT17e1xuXHRcdFx0XHRcdFx0XHRsZWZ0OiBgY2FsYygke2V2ZW50LmxlZnR9JSArIHZhcigtLXNwYWNpbmcpICogMC4yNSlgLFxuXHRcdFx0XHRcdFx0XHR3aWR0aDogYGNhbGMoJHtldmVudC53aWR0aH0lIC0gdmFyKC0tc3BhY2luZykgKiAxKWAsXG5cdFx0XHRcdFx0XHRcdHRvcDogYCR7ZXZlbnQudG9wfXB4YCxcblx0XHRcdFx0XHRcdFx0aGVpZ2h0OiBgJHtFVkVOVF9CQVJfSEVJR0hUfXB4YCxcblx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0PERyYWdnYWJsZUV2ZW50XG5cdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImgtZnVsbCB3LWZ1bGwgc2hhZG93XCJcblx0XHRcdFx0XHRcdFx0ZWxlbWVudElkPXtldmVudEtleX1cblx0XHRcdFx0XHRcdFx0ZXZlbnQ9e2V2ZW50fVxuXHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0KVxuXHRcdFx0fSl9XG5cdFx0PC9kaXY+XG5cdClcbn1cblxuZXhwb3J0IGNvbnN0IEhvcml6b250YWxHcmlkRXZlbnRzTGF5ZXIgPSBtZW1vKE5vTWVtb0hvcml6b250YWxHcmlkRXZlbnRzTGF5ZXIpXG4iLAogICAgImltcG9ydCB7IG1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmludGVyZmFjZSBBbGxEYXlDZWxsUHJvcHMge1xuXHRjbGFzc05hbWU/OiBzdHJpbmdcbn1cblxuY29uc3QgTm9NZW1vQWxsRGF5Q2VsbDogUmVhY3QuRkM8QWxsRGF5Q2VsbFByb3BzPiA9ICh7IGNsYXNzTmFtZSB9KSA9PiB7XG5cdGNvbnN0IHsgdCB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCd3LTE2IGJvcmRlci1yIHNocmluay0wIHN0aWNreSBsZWZ0LTAgYmctYmFja2dyb3VuZCB6LTIwIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHNtOnRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kJyxcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdD5cblx0XHRcdHt0KCdhbGxEYXknKX1cblx0XHQ8L2Rpdj5cblx0KVxufVxuXG5leHBvcnQgY29uc3QgQWxsRGF5Q2VsbCA9IG1lbW8oTm9NZW1vQWxsRGF5Q2VsbClcbiIsCiAgICAiaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUgeyBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuXG5pbnRlcmZhY2UgSG91ckxhYmVsUHJvcHMge1xuXHRkYXRlOiBEYXlqc1xufVxuXG5leHBvcnQgY29uc3QgSG91ckxhYmVsOiBSZWFjdC5GQzxIb3VyTGFiZWxQcm9wcz4gPSAoeyBkYXRlIH0pID0+IHtcblx0Y29uc3QgeyByZW5kZXJIb3VyLCB0aW1lRm9ybWF0IH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cblx0aWYgKHJlbmRlckhvdXIpIHtcblx0XHRyZXR1cm4gPD57cmVuZGVySG91cihkYXRlKX08Lz5cblx0fVxuXG5cdHJldHVybiA8PntkYXRlLmZvcm1hdCh0aW1lRm9ybWF0ID09PSAnMTItaG91cicgPyAnaCBBJyA6ICdIJyl9PC8+XG59XG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgbWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBSZXNvdXJjZSB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgR3JpZENlbGwgfSBmcm9tICcuLi9ncmlkLWNlbGwnXG5pbXBvcnQgeyBWZXJ0aWNhbEdyaWRFdmVudHNMYXllciB9IGZyb20gJy4vdmVydGljYWwtZ3JpZC1ldmVudHMtbGF5ZXInXG5cbmV4cG9ydCBpbnRlcmZhY2UgVmVydGljYWxHcmlkQ29sUHJvcHMge1xuXHRpZDogc3RyaW5nXG5cdGRheT86IERheWpzXG5cdHJlc291cmNlSWQ/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+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBCdXNpbmVzc0hvdXJzIH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgZ2V0RGF5SG91cnMgfSBmcm9tICdAL2xpYi91dGlscy9kYXRlLXV0aWxzJ1xuaW1wb3J0IHsgY2FsY3VsYXRlQnVzaW5lc3NIb3Vyc1JhbmdlIH0gZnJvbSAnLi9idXNpbmVzcy1ob3VycydcblxuaW50ZXJmYWNlIEdldFZpZXdIb3Vyc09wdGlvbnMge1xuXHRyZWZlcmVuY2VEYXRlOiBEYXlqc1xuXHRidXNpbmVzc0hvdXJzPzogQnVzaW5lc3NIb3VycyB8IEJ1c2luZXNzSG91cnNbXVxuXHRoaWRlTm9uQnVzaW5lc3NIb3Vycz86IGJvb2xlYW5cblx0LyoqXG5cdCAqIEZvciB2aWV3cyB3aXRoIG11bHRpcGxlIGRheXMgKGxpa2UgV2Vla1ZpZXcpLCB3ZSBtaWdodCB3YW50IHRvIHNob3dcblx0ICogdGhlIHVuaW9uIG9mIGFsbCBidXNpbmVzcyBob3VycyBhY3Jvc3MgdGhvc2UgZGF5cy5cblx0ICovXG5cdGFsbERhdGVzPzogRGF5anNbXVxuXHQvKipcblx0ICogT3B0aW9uYWwgYWRkaXRpb25hbCBidXNpbmVzcyBob3VycyBjb25maWd1cmF0aW9ucyAoZS5nLiwgZnJvbSByZXNvdXJjZXMpLlxuXHQgKiBUaGVzZSB3aWxsIGJlIG1lcmdlZCB3aXRoIHRoZSBnbG9iYWwgYnVzaW5lc3NIb3VycyB3aGVuIGNhbGN1bGF0aW5nIHRoZSB2aXNpYmxlIHJhbmdlLlxuXHQgKi9cblx0cmVzb3VyY2VCdXNpbmVzc0hvdXJzPzogKEJ1c2luZXNzSG91cnMgfCBCdXNpbmVzc0hvdXJzW10pW11cbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIGxpc3Qgb2YgaG91cnMgdG8gZGlzcGxheSBpbiB0aGUgY2FsZW5kYXIgdmlldy5cbiAqIElmIGhpZGVOb25CdXNpbmVzc0hvdXJzIGlzIHRydWUsIGl0IGZpbHRlcnMgdGhlIGhvdXJzIGJhc2VkIG9uIGJ1c2luZXNzSG91cnMgY29uZmlndXJhdGlvbi5cbiAqIEZvciBtdWx0aXBsZSBkYXRlcywgaXQgdGFrZXMgdGhlIGVhcmxpZXN0IHN0YXJ0IGFuZCBsYXRlc3QgZW5kIGFjcm9zcyBhbGwgZGF0ZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRWaWV3SG91cnMoe1xuXHRyZWZlcmVuY2VEYXRlLFxuXHRidXNpbmVzc0hvdXJzLFxuXHRoaWRlTm9uQnVzaW5lc3NIb3Vycyxcblx0YWxsRGF0ZXMgPSBbcmVmZXJlbmNlRGF0ZV0sXG5cdHJlc291cmNlQnVzaW5lc3NIb3VycyA9IFtdLFxufTogR2V0Vmlld0hvdXJzT3B0aW9ucyk6IERheWpzW10ge1xuXHRjb25zdCBob3VycyA9IGdldERheUhvdXJzKHsgcmVmZXJlbmNlRGF0ZSB9KVxuXG5cdGNvbnN0IGhhc0J1c2luZXNzSG91cnNDb25maWcgPVxuXHRcdCEhYnVzaW5lc3NIb3VycyB8fCByZXNvdXJjZUJ1c2luZXNzSG91cnMubGVuZ3RoID4gMFxuXHRjb25zdCBzaG91bGRGaWx0ZXJCeUJ1c2luZXNzSG91cnMgPVxuXHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzICYmIGhhc0J1c2luZXNzSG91cnNDb25maWdcblxuXHRpZiAoIXNob3VsZEZpbHRlckJ5QnVzaW5lc3NIb3VycykgcmV0dXJuIGhvdXJzXG5cblx0Y29uc3QgeyBtaW5TdGFydCwgbWF4RW5kLCBoYXNCdXNpbmVzc0hvdXJzIH0gPSBjYWxjdWxhdGVCdXNpbmVzc0hvdXJzUmFuZ2Uoe1xuXHRcdGFsbERhdGVzLFxuXHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0cmVzb3VyY2VCdXNpbmVzc0hvdXJzLFxuXHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzLFxuXHR9KVxuXG5cdGlmICghaGFzQnVzaW5lc3NIb3VycykgcmV0dXJuIGhvdXJzXG5cblx0cmV0dXJuIGhvdXJzLmZpbHRlcigoaCkgPT4ge1xuXHRcdGNvbnN0IGhvdXIgPSBoLmhvdXIoKVxuXHRcdHJldHVybiBob3VyID49IG1pblN0YXJ0ICYmIGhvdXIgPCBtYXhFbmRcblx0fSlcbn1cbiIsCiAgICAiaW1wb3J0IHsgQWxsRGF5Um93IH0gZnJvbSAnQC9jb21wb25lbnRzL2FsbC1kYXktcm93L2FsbC1kYXktcm93J1xuaW1wb3J0IHsgQW5pbWF0ZWRTZWN0aW9uIH0gZnJvbSAnQC9jb21wb25lbnRzL2FuaW1hdGlvbnMvYW5pbWF0ZWQtc2VjdGlvbidcbmltcG9ydCB7IEhvdXJMYWJlbCB9IGZyb20gJ0AvY29tcG9uZW50cy9ob3VyLWxhYmVsL2hvdXItbGFiZWwnXG5pbXBvcnQgeyBWZXJ0aWNhbEdyaWQgfSBmcm9tICdAL2NvbXBvbmVudHMvdmVydGljYWwtZ3JpZC92ZXJ0aWNhbC1ncmlkJ1xuaW1wb3J0IHsgZ2V0Vmlld0hvdXJzIH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci91dGlscy92aWV3LWhvdXJzJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IGRheWpzLCB7IHR5cGUgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmV4cG9ydCBjb25zdCBEYXlWaWV3ID0gKCkgPT4ge1xuXHRjb25zdCB7IGN1cnJlbnREYXRlLCB0LCBidXNpbmVzc0hvdXJzLCBoaWRlTm9uQnVzaW5lc3NIb3VycyB9ID1cblx0XHR1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cdGNvbnN0IGlzVG9kYXkgPSBjdXJyZW50RGF0ZS5pc1NhbWUoZGF5anMoKSwgJ2RheScpXG5cdGNvbnN0IGhvdXJzID0gZ2V0Vmlld0hvdXJzKHtcblx0XHRyZWZlcmVuY2VEYXRlOiBjdXJyZW50RGF0ZSxcblx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzLFxuXHRcdGFsbERhdGVzOiBbY3VycmVudERhdGVdLFxuXHR9KVxuXG5cdGNvbnN0IGZpcnN0Q29sID0ge1xuXHRcdGlkOiAndGltZS1jb2wnLFxuXHRcdGRheTogdW5kZWZpbmVkLFxuXHRcdGRheXM6IGhvdXJzLFxuXHRcdGNsYXNzTmFtZTpcblx0XHRcdCdzaHJpbmstMCB3LTE2IG1pbi13LTE2IG1heC13LTE2IHN0aWNreSBsZWZ0LTAgYmctYmFja2dyb3VuZCB6LTIwJyxcblx0XHRncmlkVHlwZTogJ2hvdXInIGFzIGNvbnN0LFxuXHRcdG5vRXZlbnRzOiB0cnVlLFxuXHRcdHJlbmRlckNlbGw6IChkYXRlOiBEYXlqcykgPT4gKFxuXHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LW11dGVkLWZvcmVncm91bmQgcC0yIHRleHQtcmlnaHQgdGV4dC1bMTBweF0gc206dGV4dC14cyBmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlclwiPlxuXHRcdFx0XHQ8SG91ckxhYmVsIGRhdGU9e2RhdGV9IC8+XG5cdFx0XHQ8L2Rpdj5cblx0XHQpLFxuXHR9XG5cblx0Y29uc3QgY29sdW1ucyA9IHtcblx0XHRpZDogYGRheS1jb2wtJHtjdXJyZW50RGF0ZS5mb3JtYXQoJ1lZWVktTU0tREQnKX1gLFxuXHRcdGRheTogY3VycmVudERhdGUsXG5cdFx0ZGF5czogaG91cnMsXG5cdFx0Y2xhc3NOYW1lOiAndy1bY2FsYygxMDAlLTRyZW0pXSBmbGV4LTEnLFxuXHRcdGdyaWRUeXBlOiAnaG91cicgYXMgY29uc3QsXG5cdH1cblxuXHRyZXR1cm4gKFxuXHRcdDxWZXJ0aWNhbEdyaWRcblx0XHRcdGFsbERheVJvdz17PEFsbERheVJvdyBkYXlzPXtbY3VycmVudERhdGVdfSAvPn1cblx0XHRcdGNlbGxTbG90cz17WzAsIDE1LCAzMCwgNDVdfVxuXHRcdFx0Y2xhc3Nlcz17e1xuXHRcdFx0XHRoZWFkZXI6ICd3LWZ1bGwnLFxuXHRcdFx0XHRib2R5OiAndy1mdWxsJyxcblx0XHRcdFx0YWxsRGF5OiAndy1mdWxsJyxcblx0XHRcdH19XG5cdFx0XHRjb2x1bW5zPXtbZmlyc3RDb2wsIGNvbHVtbnNdfVxuXHRcdFx0Z3JpZFR5cGU9XCJob3VyXCJcblx0XHRcdHZhcmlhbnQ9XCJyZWd1bGFyXCJcblx0XHQ+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+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBBbGxEYXlSb3cgfSBmcm9tICdAL2NvbXBvbmVudHMvYWxsLWRheS1yb3cvYWxsLWRheS1yb3cnXG5pbXBvcnQgeyBBbmltYXRlZFNlY3Rpb24gfSBmcm9tICdAL2NvbXBvbmVudHMvYW5pbWF0aW9ucy9hbmltYXRlZC1zZWN0aW9uJ1xuaW1wb3J0IHsgSG91ckxhYmVsIH0gZnJvbSAnQC9jb21wb25lbnRzL2hvdXItbGFiZWwvaG91ci1sYWJlbCdcbmltcG9ydCB7IFZlcnRpY2FsR3JpZCB9IGZyb20gJ0AvY29tcG9uZW50cy92ZXJ0aWNhbC1ncmlkL3ZlcnRpY2FsLWdyaWQnXG5pbXBvcnQgeyBnZXRWaWV3SG91cnMgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL3V0aWxzL3ZpZXctaG91cnMnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgZGF5anMsIHsgdHlwZSBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IGdldFdlZWtEYXlzIH0gZnJvbSAnQC9saWIvdXRpbHMvZGF0ZS11dGlscydcblxuY29uc3QgQ0VMTF9DTEFTUyA9XG5cdCd3LVtjYWxjKCgxMDAlLTRyZW0pL3ZhcigtLXZpc2libGUtZGF5cykpXSBtaW4tdy1bY2FsYygoMTAwJS00cmVtKS92YXIoLS12aXNpYmxlLWRheXMpKV0gZmxleC0xJ1xuY29uc3QgTEVGVF9DT0xfV0lEVEggPSAndy0xMCBzbTp3LTE2IG1pbi13LTEwIHNtOm1pbi13LTE2IG1heC13LTEwIHNtOm1heC13LTE2J1xuXG5leHBvcnQgY29uc3QgV2Vla1ZpZXc6IFJlYWN0LkZDID0gKCkgPT4ge1xuXHRjb25zdCB7XG5cdFx0dCxcblx0XHRjdXJyZW50RGF0ZSxcblx0XHRmaXJzdERheU9mV2Vlayxcblx0XHRzZWxlY3REYXRlLFxuXHRcdG9wZW5FdmVudEZvcm0sXG5cdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRoaWRlTm9uQnVzaW5lc3NIb3Vycyxcblx0XHRoaWRkZW5EYXlzLFxuXHR9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXG5cdGNvbnN0IHdlZWtEYXlzID0gdXNlTWVtbyhcblx0XHQoKSA9PiBnZXRXZWVrRGF5cyhjdXJyZW50RGF0ZSwgZmlyc3REYXlPZldlZWspLFxuXHRcdFtjdXJyZW50RGF0ZSwgZmlyc3REYXlPZldlZWtdXG5cdClcblxuXHRjb25zdCB2aXNpYmxlRGF5cyA9IHVzZU1lbW8oXG5cdFx0KCkgPT5cblx0XHRcdGhpZGRlbkRheXNcblx0XHRcdFx0PyB3ZWVrRGF5cy5maWx0ZXIoKGRheSkgPT4gIWhpZGRlbkRheXMuaGFzKGRheS5kYXkoKSkpXG5cdFx0XHRcdDogd2Vla0RheXMsXG5cdFx0W3dlZWtEYXlzLCBoaWRkZW5EYXlzXVxuXHQpXG5cblx0Y29uc3QgaG91cnMgPSB1c2VNZW1vKFxuXHRcdCgpID0+XG5cdFx0XHRnZXRWaWV3SG91cnMoe1xuXHRcdFx0XHRyZWZlcmVuY2VEYXRlOiBjdXJyZW50RGF0ZSxcblx0XHRcdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRcdFx0aGlkZU5vbkJ1c2luZXNzSG91cnMsXG5cdFx0XHRcdGFsbERhdGVzOiB3ZWVrRGF5cyxcblx0XHRcdH0pLFxuXHRcdFtjdXJyZW50RGF0ZSwgYnVzaW5lc3NIb3VycywgaGlkZU5vbkJ1c2luZXNzSG91cnMsIHdlZWtEYXlzXVxuXHQpXG5cblx0Y29uc3QgZmlyc3RDb2wgPSB7XG5cdFx0aWQ6ICd0aW1lLWNvbCcsXG5cdFx0ZGF5czogaG91cnMsXG5cdFx0ZGF5OiB1bmRlZmluZWQsXG5cdFx0Y2xhc3NOYW1lOiBgc2hyaW5rLTAgJHtMRUZUX0NPTF9XSURUSH0gc3RpY2t5IGxlZnQtMCBiZy1iYWNrZ3JvdW5kIHotMjBgLFxuXHRcdGdyaWRUeXBlOiAnaG91cicgYXMgY29uc3QsXG5cdFx0bm9FdmVudHM6IHRydWUsXG5cdFx0cmVuZGVyQ2VsbDogKGRhdGU6IERheWpzKSA9PiAoXG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQtbXV0ZWQtZm9yZWdyb3VuZCBwLTIgdGV4dC1yaWdodCB0ZXh0LVsxMHB4XSBzbTp0ZXh0LXhzIGZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyXCI+XG5cdFx0XHRcdDxIb3VyTGFiZWwgZGF0ZT17ZGF0ZX0gLz5cblx0XHRcdDwvZGl2PlxuXHRcdCksXG5cdH1cblxuXHQvLyBHZW5lcmF0ZSB3ZWVrIGRheXMg4oCUIGVhY2ggY29sdW1uIGdldHMgaXRzIG93biBob3VycyBvbiB0aGUgY29ycmVjdCBkYXRlXG5cdGNvbnN0IGNvbHVtbnMgPSB1c2VNZW1vKCgpID0+IHtcblx0XHRyZXR1cm4gdmlzaWJsZURheXMubWFwKChkYXkpID0+ICh7XG5cdFx0XHRpZDogYGRheS1jb2wtJHtkYXkuZm9ybWF0KCdZWVlZLU1NLUREJyl9YCxcblx0XHRcdGRheSxcblx0XHRcdGxhYmVsOiBkYXkuZm9ybWF0KCdEJyksXG5cdFx0XHRjbGFzc05hbWU6IENFTExfQ0xBU1MsXG5cdFx0XHRkYXlzOiBnZXRWaWV3SG91cnMoe1xuXHRcdFx0XHRyZWZlcmVuY2VEYXRlOiBkYXksXG5cdFx0XHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0XHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzLFxuXHRcdFx0XHRhbGxEYXRlczogd2Vla0RheXMsXG5cdFx0XHR9KSxcblx0XHRcdHZhbHVlOiBkYXksXG5cdFx0fSkpXG5cdH0sIFt3ZWVrRGF5cywgYnVzaW5lc3NIb3VycywgaGlkZU5vbkJ1c2luZXNzSG91cnMsIHZpc2libGVEYXlzLm1hcF0pXG5cblx0Y29uc3QgY3NzVmFycyA9IHtcblx0XHQnLS12aXNpYmxlLWRheXMnOiB2aXNpYmxlRGF5cy5sZW5ndGgsXG5cdH0gYXMgUmVhY3QuQ1NTUHJvcGVydGllc1xuXG5cdHJldHVybiAoXG5cdFx0PFZlcnRpY2FsR3JpZFxuXHRcdFx0YWxsRGF5Um93PXtcblx0XHRcdFx0PEFsbERheVJvd1xuXHRcdFx0XHRcdGNsYXNzZXM9e3sgY2VsbDogQ0VMTF9DTEFTUywgc3BhY2VyOiBMRUZUX0NPTF9XSURUSCB9fVxuXHRcdFx0XHRcdGRheXM9e3Zpc2libGVEYXlzfVxuXHRcdFx0XHQvPlxuXHRcdFx0fVxuXHRcdFx0Y2xhc3Nlcz17eyBoZWFkZXI6ICd3LWZ1bGwgaC0xOCcsIGJvZHk6ICd3LWZ1bGwnIH19XG5cdFx0XHRjb2x1bW5zPXtbZmlyc3RDb2wsIC4uLmNvbHVtbnNdfVxuXHRcdFx0Z3JpZFR5cGU9XCJob3VyXCJcblx0XHRcdHN0eWxlPXtjc3NWYXJzfVxuXHRcdFx0dmFyaWFudD1cInJlZ3VsYXJcIlxuXHRcdD5cblx0XHRcdDxkaXYgY2xhc3NOYW1lPXsnZmxleCBoLWZ1bGwgZmxleC0xJ30gZGF0YS10ZXN0aWQ9XCJ3ZWVrLXZpZXctaGVhZGVyXCI+XG5cdFx0XHRcdHsvKiBDb3JuZXIgY2VsbCB3aXRoIHdlZWsgbnVtYmVyICovfVxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInctMTAgc206dy0xNiBoLWZ1bGwgc2hyaW5rLTAgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJvcmRlci1yIHAtMiBmbGV4XCI+XG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlclwiPlxuXHRcdFx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwidGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHRleHQteHNcIj57dCgnd2VlaycpfTwvc3Bhbj5cblx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cImZvbnQtbWVkaXVtXCI+e2N1cnJlbnREYXRlLndlZWsoKX08L3NwYW4+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdHsvKiBEYXkgaGVhZGVyIGNlbGxzICovfVxuXHRcdFx0XHR7dmlzaWJsZURheXMubWFwKChkYXksIGluZGV4KSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgaXNUb2RheSA9IGRheS5pc1NhbWUoZGF5anMoKSwgJ2RheScpXG5cdFx0XHRcdFx0Y29uc3Qga2V5ID0gYHdlZWstZGF5LWhlYWRlci0ke2RheS50b0lTT1N0cmluZygpfWBcblxuXHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHQ8QW5pbWF0ZWRTZWN0aW9uXG5cdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHRcdFx0J2hvdmVyOmJnLWFjY2VudCBmbGV4LTEgZmxleCBmbGV4LWNvbCBqdXN0aWZ5LWNlbnRlciBjdXJzb3ItcG9pbnRlciBwLTEgdGV4dC1jZW50ZXIgc206cC0yIGJvcmRlci1yIGxhc3Q6Ym9yZGVyLXItMCB3LTUwIGgtZnVsbCcsXG5cdFx0XHRcdFx0XHRcdFx0aXNUb2RheSAmJiAnYmctcHJpbWFyeS8xMCBmb250LWJvbGQnXG5cdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPXtgd2Vlay1kYXktaGVhZGVyLSR7ZGF5LmZvcm1hdCgnZGRkZCcpLnRvTG93ZXJDYXNlKCl9YH1cblx0XHRcdFx0XHRcdFx0ZGVsYXk9e2luZGV4ICogMC4wNX1cblx0XHRcdFx0XHRcdFx0a2V5PXtrZXl9XG5cdFx0XHRcdFx0XHRcdG9uQ2xpY2s9eygpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRzZWxlY3REYXRlKGRheSlcblx0XHRcdFx0XHRcdFx0XHRvcGVuRXZlbnRGb3JtKHsgc3RhcnQ6IGRheSB9KVxuXHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHR0cmFuc2l0aW9uS2V5PXtrZXl9XG5cdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidGV4dC14cyBzbTp0ZXh0LXNtXCI+e2RheS5mb3JtYXQoJ2RkZCcpfTwvZGl2PlxuXHRcdFx0XHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdFx0XHRcdCdteC1hdXRvIG10LTEgZmxleCBoLTUgdy01IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLWZ1bGwgdGV4dC14cycsXG5cdFx0XHRcdFx0XHRcdFx0XHRpc1RvZGF5ICYmICdiZy1wcmltYXJ5IHRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kJ1xuXHRcdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHR7ZGF5LmZvcm1hdCgnRCcpfVxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdDwvQW5pbWF0ZWRTZWN0aW9uPlxuXHRcdFx0XHRcdClcblx0XHRcdFx0fSl9XG5cdFx0XHQ8L2Rpdj5cblx0XHQ8L1ZlcnRpY2FsR3JpZD5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgeyBBbmltYXRlZFNlY3Rpb24gfSBmcm9tICdAL2NvbXBvbmVudHMvYW5pbWF0aW9ucy9hbmltYXRlZC1zZWN0aW9uJ1xuaW1wb3J0IHsgU2Nyb2xsQXJlYSwgU2Nyb2xsQmFyIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL3Njcm9sbC1hcmVhJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IGRheWpzLCB7IHR5cGUgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmNvbnN0IERBWV9IRUFERVJfTkFNRVMgPSBbXG5cdHsgaWQ6ICdzdW4nLCBsYWJlbDogJ1MnIH0sXG5cdHsgaWQ6ICdtb24nLCBsYWJlbDogJ00nIH0sXG5cdHsgaWQ6ICd0dWUnLCBsYWJlbDogJ1QnIH0sXG5cdHsgaWQ6ICd3ZWQnLCBsYWJlbDogJ1cnIH0sXG5cdHsgaWQ6ICd0aHUnLCBsYWJlbDogJ1QnIH0sXG5cdHsgaWQ6ICdmcmknLCBsYWJlbDogJ0YnIH0sXG5cdHsgaWQ6ICdzYXQnLCBsYWJlbDogJ1MnIH0sXG5dXG5jb25zdCBFVkVOVF9ET1RfQ09MT1JTID0gWydiZy1wcmltYXJ5JywgJ2JnLWJsdWUtNTAwJywgJ2JnLWdyZWVuLTUwMCddXG5jb25zdCBEQVlTX0lOX01JTklfQ0FMRU5EQVIgPSA0MlxuXG5jb25zdCBnZXREYXlUb29sdGlwID0gKGV2ZW50Q291bnQ6IG51bWJlcik6IHN0cmluZyA9PiB7XG5cdGlmIChldmVudENvdW50ID09PSAwKSB7XG5cdFx0cmV0dXJuICcnXG5cdH1cblx0Y29uc3QgcGx1cmFsID0gZXZlbnRDb3VudCA+IDEgPyAncycgOiAnJ1xuXHRyZXR1cm4gYCR7ZXZlbnRDb3VudH0gZXZlbnQke3BsdXJhbH1gXG59XG5cbmludGVyZmFjZSBNb250aERhdGEge1xuXHRkYXRlOiBEYXlqc1xuXHRuYW1lOiBzdHJpbmdcblx0ZXZlbnRDb3VudDogbnVtYmVyXG5cdG1vbnRoS2V5OiBzdHJpbmdcbn1cblxuaW50ZXJmYWNlIERheURhdGEge1xuXHRkYXRlOiBEYXlqc1xuXHRkYXlLZXk6IHN0cmluZ1xuXHRpc0luQ3VycmVudE1vbnRoOiBib29sZWFuXG5cdGlzVG9kYXk6IGJvb2xlYW5cblx0aXNTZWxlY3RlZDogYm9vbGVhblxuXHRldmVudENvdW50OiBudW1iZXJcbn1cblxuZXhwb3J0IGNvbnN0IFllYXJWaWV3ID0gKCkgPT4ge1xuXHRjb25zdCB7IGN1cnJlbnREYXRlLCBzZWxlY3REYXRlLCBldmVudHMsIHNldFZpZXcsIGdldEV2ZW50c0ZvckRhdGVSYW5nZSwgdCB9ID1cblx0XHR1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cdGNvbnN0IGN1cnJlbnRZZWFyID0gY3VycmVudERhdGUueWVhcigpXG5cblx0Y29uc3QgZ2VuZXJhdGVNb250aHNEYXRhID0gKCk6IE1vbnRoRGF0YVtdID0+IHtcblx0XHRyZXR1cm4gQXJyYXkuZnJvbSh7IGxlbmd0aDogMTIgfSwgKF8sIG1vbnRoSW5kZXgpID0+IHtcblx0XHRcdGNvbnN0IG1vbnRoRGF0ZSA9IGRheWpzKClcblx0XHRcdFx0LnllYXIoY3VycmVudFllYXIpXG5cdFx0XHRcdC5tb250aChtb250aEluZGV4KVxuXHRcdFx0XHQuc3RhcnRPZignbW9udGgnKVxuXHRcdFx0Y29uc3QgZXZlbnRzSW5Nb250aCA9IGV2ZW50cy5maWx0ZXIoXG5cdFx0XHRcdChldmVudCkgPT5cblx0XHRcdFx0XHRldmVudC5zdGFydC55ZWFyKCkgPT09IGN1cnJlbnRZZWFyICYmXG5cdFx0XHRcdFx0ZXZlbnQuc3RhcnQubW9udGgoKSA9PT0gbW9udGhJbmRleFxuXHRcdFx0KVxuXG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRkYXRlOiBtb250aERhdGUsXG5cdFx0XHRcdG5hbWU6IG1vbnRoRGF0ZS5mb3JtYXQoJ01NTU0nKSxcblx0XHRcdFx0ZXZlbnRDb3VudDogZXZlbnRzSW5Nb250aC5sZW5ndGgsXG5cdFx0XHRcdG1vbnRoS2V5OiBtb250aERhdGUuZm9ybWF0KCdNTScpLFxuXHRcdFx0fVxuXHRcdH0pXG5cdH1cblxuXHRjb25zdCBnZW5lcmF0ZURheXNGb3JNb250aCA9IChtb250aERhdGU6IERheWpzKTogRGF5RGF0YVtdID0+IHtcblx0XHRjb25zdCBmaXJzdERheU9mQ2FsZW5kYXIgPSBtb250aERhdGUuc3RhcnRPZignbW9udGgnKS5zdGFydE9mKCd3ZWVrJylcblxuXHRcdHJldHVybiBBcnJheS5mcm9tKHsgbGVuZ3RoOiBEQVlTX0lOX01JTklfQ0FMRU5EQVIgfSwgKF8sIGRheUluZGV4KSA9PiB7XG5cdFx0XHRjb25zdCBkYXlEYXRlID0gZmlyc3REYXlPZkNhbGVuZGFyLmFkZChkYXlJbmRleCwgJ2RheScpXG5cdFx0XHRjb25zdCBkYXlTdGFydCA9IGRheURhdGUuc3RhcnRPZignZGF5Jylcblx0XHRcdGNvbnN0IGRheUVuZCA9IGRheURhdGUuZW5kT2YoJ2RheScpXG5cdFx0XHRjb25zdCBldmVudHNPbkRheSA9IGdldEV2ZW50c0ZvckRhdGVSYW5nZShkYXlTdGFydCwgZGF5RW5kKVxuXG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRkYXRlOiBkYXlEYXRlLFxuXHRcdFx0XHRkYXlLZXk6IGRheURhdGUuZm9ybWF0KCdZWVlZLU1NLUREJyksXG5cdFx0XHRcdGlzSW5DdXJyZW50TW9udGg6IGRheURhdGUubW9udGgoKSA9PT0gbW9udGhEYXRlLm1vbnRoKCksXG5cdFx0XHRcdGlzVG9kYXk6IGRheURhdGUuaXNTYW1lKGRheWpzKCksICdkYXknKSxcblx0XHRcdFx0aXNTZWxlY3RlZDogZGF5RGF0ZS5pc1NhbWUoY3VycmVudERhdGUsICdkYXknKSxcblx0XHRcdFx0ZXZlbnRDb3VudDogZXZlbnRzT25EYXkubGVuZ3RoLFxuXHRcdFx0fVxuXHRcdH0pXG5cdH1cblxuXHRjb25zdCBuYXZpZ2F0ZVRvRGF0ZSA9IChcblx0XHRkYXRlOiBEYXlqcyxcblx0XHR2aWV3OiAnbW9udGgnIHwgJ2RheScsXG5cdFx0ZXZlbnQ/OiBSZWFjdC5Nb3VzZUV2ZW50XG5cdCkgPT4ge1xuXHRcdGV2ZW50Py5zdG9wUHJvcGFnYXRpb24oKVxuXHRcdHNlbGVjdERhdGUoZGF0ZSlcblx0XHRzZXRWaWV3KHZpZXcpXG5cdH1cblxuXHRjb25zdCBnZXRFdmVudENvdW50TGFiZWwgPSAoY291bnQ6IG51bWJlcik6IHN0cmluZyA9PiB7XG5cdFx0Y29uc3QgZXZlbnRXb3JkID0gY291bnQgPT09IDEgPyB0KCdldmVudCcpIDogdCgnZXZlbnRzJylcblx0XHRyZXR1cm4gYCR7Y291bnR9ICR7ZXZlbnRXb3JkfWBcblx0fVxuXG5cdGNvbnN0IGdldERheUNsYXNzTmFtZSA9IChkYXk6IERheURhdGEpOiBzdHJpbmcgPT4ge1xuXHRcdGNvbnN0IGJhc2VDbGFzcyA9XG5cdFx0XHQncmVsYXRpdmUgZmxleCBhc3BlY3Qtc3F1YXJlIHctZnVsbCBjdXJzb3ItcG9pbnRlciBmbGV4LWNvbCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgaG92ZXI6YmctYWNjZW50IHJvdW5kZWQtc20gdHJhbnNpdGlvbi1jb2xvcnMgZHVyYXRpb24tMjAwJ1xuXHRcdGNvbnN0IG91dHNpZGVNb250aENsYXNzID0gZGF5LmlzSW5DdXJyZW50TW9udGhcblx0XHRcdD8gJydcblx0XHRcdDogJ3RleHQtbXV0ZWQtZm9yZWdyb3VuZCBvcGFjaXR5LTUwJ1xuXHRcdGNvbnN0IHRvZGF5Q2xhc3MgPSBkYXkuaXNUb2RheVxuXHRcdFx0PyAnYmctcHJpbWFyeSB0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCByb3VuZGVkLWZ1bGwnXG5cdFx0XHQ6ICcnXG5cdFx0Y29uc3Qgc2VsZWN0ZWRDbGFzcyA9XG5cdFx0XHRkYXkuaXNTZWxlY3RlZCAmJiAhZGF5LmlzVG9kYXkgPyAnYmctbXV0ZWQgcm91bmRlZC1mdWxsIGZvbnQtYm9sZCcgOiAnJ1xuXHRcdGNvbnN0IGhhc0V2ZW50c0NsYXNzID1cblx0XHRcdGRheS5ldmVudENvdW50ID4gMCAmJiAhZGF5LmlzVG9kYXkgJiYgIWRheS5pc1NlbGVjdGVkID8gJ2ZvbnQtbWVkaXVtJyA6ICcnXG5cblx0XHRyZXR1cm4gY24oXG5cdFx0XHRiYXNlQ2xhc3MsXG5cdFx0XHRvdXRzaWRlTW9udGhDbGFzcyxcblx0XHRcdHRvZGF5Q2xhc3MsXG5cdFx0XHRzZWxlY3RlZENsYXNzLFxuXHRcdFx0aGFzRXZlbnRzQ2xhc3Ncblx0XHQpXG5cdH1cblxuXHRjb25zdCBnZXRFdmVudERvdENsYXNzTmFtZSA9IChjb2xvcjogc3RyaW5nLCBpc1RvZGF5OiBib29sZWFuKTogc3RyaW5nID0+IHtcblx0XHRjb25zdCBkb3RDb2xvciA9IGlzVG9kYXkgPyAnYmctcHJpbWFyeS1mb3JlZ3JvdW5kJyA6IGNvbG9yXG5cdFx0cmV0dXJuIGNuKCdoLVszcHhdIHctWzNweF0gcm91bmRlZC1mdWxsJywgZG90Q29sb3IpXG5cdH1cblxuXHRjb25zdCBtb250aHNEYXRhID0gZ2VuZXJhdGVNb250aHNEYXRhKClcblxuXHRyZXR1cm4gKFxuXHRcdDxTY3JvbGxBcmVhIGNsYXNzTmFtZT1cImgtZnVsbFwiIGRhdGEtdGVzdGlkPVwieWVhci12aWV3XCI+XG5cdFx0XHQ8ZGl2XG5cdFx0XHRcdGNsYXNzTmFtZT1cImdyaWQgYXV0by1yb3dzLWZyIGdyaWQtY29scy0xIGdhcC00IHAtNCBzbTpncmlkLWNvbHMtMiBsZzpncmlkLWNvbHMtM1wiXG5cdFx0XHRcdGRhdGEtdGVzdGlkPVwieWVhci1ncmlkXCJcblx0XHRcdD5cblx0XHRcdFx0e21vbnRoc0RhdGEubWFwKChtb250aCwgbW9udGhJbmRleCkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IGRheXNJbk1vbnRoID0gZ2VuZXJhdGVEYXlzRm9yTW9udGgobW9udGguZGF0ZSlcblx0XHRcdFx0XHRjb25zdCBhbmltYXRpb25EZWxheSA9IG1vbnRoSW5kZXggKiAwLjA1XG5cblx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJob3Zlcjpib3JkZXItcHJpbWFyeSBmbGV4IGZsZXgtY29sIHJvdW5kZWQtbGcgYm9yZGVyIHAtMyB0ZXh0LWxlZnQgdHJhbnNpdGlvbi1hbGwgZHVyYXRpb24tMjAwIGhvdmVyOnNoYWRvdy1tZFwiXG5cdFx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPXtgeWVhci1tb250aC0ke21vbnRoLm1vbnRoS2V5fWB9XG5cdFx0XHRcdFx0XHRcdGtleT17bW9udGgubW9udGhLZXl9XG5cdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdDxBbmltYXRlZFNlY3Rpb25cblx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJtYi0yIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlblwiXG5cdFx0XHRcdFx0XHRcdFx0ZGVsYXk9e2FuaW1hdGlvbkRlbGF5fVxuXHRcdFx0XHRcdFx0XHRcdGtleT17YG1vbnRoLSR7bW9udGgubW9udGhLZXl9YH1cblx0XHRcdFx0XHRcdFx0XHR0cmFuc2l0aW9uS2V5PXtgbW9udGgtJHttb250aC5tb250aEtleX1gfVxuXHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0PGJ1dHRvblxuXHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwidGV4dC1sZyBmb250LW1lZGl1bSBob3Zlcjp1bmRlcmxpbmUgY3Vyc29yLXBvaW50ZXJcIlxuXHRcdFx0XHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e2B5ZWFyLW1vbnRoLXRpdGxlLSR7bW9udGgubW9udGhLZXl9YH1cblx0XHRcdFx0XHRcdFx0XHRcdG9uQ2xpY2s9eygpID0+IG5hdmlnYXRlVG9EYXRlKG1vbnRoLmRhdGUsICdtb250aCcpfVxuXHRcdFx0XHRcdFx0XHRcdFx0dHlwZT1cImJ1dHRvblwiXG5cdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0e21vbnRoLm5hbWV9XG5cdFx0XHRcdFx0XHRcdFx0PC9idXR0b24+XG5cblx0XHRcdFx0XHRcdFx0XHR7bW9udGguZXZlbnRDb3VudCA+IDAgJiYgKFxuXHRcdFx0XHRcdFx0XHRcdFx0PHNwYW5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiYmctcHJpbWFyeSB0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCByb3VuZGVkLWZ1bGwgcHgtMiBweS0xIHRleHQteHNcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD17YHllYXItbW9udGgtZXZlbnQtY291bnQtJHttb250aC5tb250aEtleX1gfVxuXHRcdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7Z2V0RXZlbnRDb3VudExhYmVsKG1vbnRoLmV2ZW50Q291bnQpfVxuXHRcdFx0XHRcdFx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdDwvQW5pbWF0ZWRTZWN0aW9uPlxuXG5cdFx0XHRcdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJncmlkIGdyaWQtY29scy03IGdhcC1bMXB4XSB0ZXh0LVswLjZyZW1dXCJcblx0XHRcdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD17YHllYXItbWluaS1jYWxlbmRhci0ke21vbnRoLm1vbnRoS2V5fWB9XG5cdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHR7REFZX0hFQURFUl9OQU1FUy5tYXAoKGRheSkgPT4gKFxuXHRcdFx0XHRcdFx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJ0ZXh0LW11dGVkLWZvcmVncm91bmQgaC0zIHRleHQtY2VudGVyXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0a2V5PXtgaGVhZGVyLSR7bW9udGgubW9udGhLZXl9LSR7ZGF5LmlkfWB9XG5cdFx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHtkYXkubGFiZWx9XG5cdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0XHQpKX1cblxuXHRcdFx0XHRcdFx0XHRcdHtkYXlzSW5Nb250aC5tYXAoKGRheSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgZGF5VGVzdElkID0gYHllYXItZGF5LSR7bW9udGguZGF0ZS5mb3JtYXQoJ1lZWVktTU0nKX0tJHtkYXkuZGF5S2V5fWBcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IGhhc0V2ZW50cyA9IGRheS5ldmVudENvdW50ID4gMFxuXHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgdmlzaWJsZURvdENvdW50ID0gTWF0aC5taW4oZGF5LmV2ZW50Q291bnQsIDMpXG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zdCB2aXNpYmxlRG90Q29sb3JzID0gRVZFTlRfRE9UX0NPTE9SUy5zbGljZShcblx0XHRcdFx0XHRcdFx0XHRcdFx0MCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmlzaWJsZURvdENvdW50XG5cdFx0XHRcdFx0XHRcdFx0XHQpXG5cblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxidXR0b25cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9e2dldERheUNsYXNzTmFtZShkYXkpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPXtkYXlUZXN0SWR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0a2V5PXtkYXkuZGF5S2V5fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9uQ2xpY2s9eyhlKSA9PiBuYXZpZ2F0ZVRvRGF0ZShkYXkuZGF0ZSwgJ2RheScsIGUpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRpdGxlPXtnZXREYXlUb29sdGlwKGRheS5ldmVudENvdW50KX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cInRleHQtY2VudGVyIGxlYWRpbmctbm9uZVwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0e2RheS5kYXRlLmRhdGUoKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3NwYW4+XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR7aGFzRXZlbnRzICYmIChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnYWJzb2x1dGUgYm90dG9tLTAgZmxleCB3LWZ1bGwganVzdGlmeS1jZW50ZXIgc3BhY2UteC1bMXB4XScsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF5LmlzVG9kYXkgJiYgJ2JvdHRvbS1bMXB4XSdcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0e3Zpc2libGVEb3RDb2xvcnMubWFwKChkb3RDb2xvcikgPT4gKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9e2dldEV2ZW50RG90Q2xhc3NOYW1lKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkb3RDb2xvcixcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF5LmlzVG9kYXlcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRrZXk9e2RvdENvbG9yfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCkpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0PC9idXR0b24+XG5cdFx0XHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHRcdFx0fSl9XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0KVxuXHRcdFx0XHR9KX1cblx0XHRcdDwvZGl2PlxuXHRcdFx0PFNjcm9sbEJhciBjbGFzc05hbWU9XCJ6LTMwXCIgLz5cblx0XHQ8L1Njcm9sbEFyZWE+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IFJlYWN0Tm9kZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgRXZlbnRGb3JtUHJvcHMgfSBmcm9tICdAL2NvbXBvbmVudHMvZXZlbnQtZm9ybS9ldmVudC1mb3JtJ1xuaW1wb3J0IHR5cGUgeyBCdXNpbmVzc0hvdXJzLCBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHR5cGUge1xuXHRDYWxlbmRhckNsYXNzZXNPdmVycmlkZSxcblx0Q2VsbENsaWNrSW5mbyxcblx0RGF0ZVJhbmdlLFxuXHRSZW5kZXJDdXJyZW50VGltZUluZGljYXRvclByb3BzLFxufSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL3R5cGVzJ1xuaW1wb3J0IHsgdXNlQ2FsZW5kYXJFbmdpbmUgfSBmcm9tICdAL2hvb2tzL3VzZS1jYWxlbmRhci1lbmdpbmUnXG5pbXBvcnQgdHlwZSB7IERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBHQVBfQkVUV0VFTl9FTEVNRU5UUyB9IGZyb20gJ0AvbGliL2NvbnN0YW50cydcbmltcG9ydCB0eXBlIHsgVHJhbnNsYXRpb25zLCBUcmFuc2xhdG9yRnVuY3Rpb24gfSBmcm9tICdAL2xpYi90cmFuc2xhdGlvbnMvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyVmlldywgVGltZUZvcm1hdCB9IGZyb20gJ0AvdHlwZXMnXG5pbXBvcnQgeyBDYWxlbmRhckNvbnRleHQgfSBmcm9tICcuL2NvbnRleHQnXG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2FsZW5kYXJQcm92aWRlclByb3BzIHtcblx0Y2hpbGRyZW46IFJlYWN0Tm9kZVxuXHRldmVudHM/OiBDYWxlbmRhckV2ZW50W11cblx0Zmlyc3REYXlPZldlZWs/OiBudW1iZXIgLy8gMCBmb3IgU3VuZGF5LCAxIGZvciBNb25kYXksIGV0Yy5cblx0aW5pdGlhbFZpZXc/OiBDYWxlbmRhclZpZXdcblx0aW5pdGlhbERhdGU/OiBEYXlqc1xuXHRyZW5kZXJFdmVudD86IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gUmVhY3ROb2RlXG5cdG9uRXZlbnRDbGljaz86IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuXHRvbkNlbGxDbGljaz86IChpbmZvOiBDZWxsQ2xpY2tJbmZvKSA9PiB2b2lkXG5cdG9uVmlld0NoYW5nZT86ICh2aWV3OiBDYWxlbmRhclZpZXcpID0+IHZvaWRcblx0b25FdmVudEFkZD86IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuXHRvbkV2ZW50VXBkYXRlPzogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG5cdG9uRXZlbnREZWxldGU/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0b25EYXRlQ2hhbmdlPzogKGRhdGU6IERheWpzLCByYW5nZTogRGF0ZVJhbmdlKSA9PiB2b2lkXG5cdGxvY2FsZT86IHN0cmluZ1xuXHR0aW1lem9uZT86IHN0cmluZ1xuXHRkaXNhYmxlQ2VsbENsaWNrPzogYm9vbGVhblxuXHRkaXNhYmxlRXZlbnRDbGljaz86IGJvb2xlYW5cblx0ZGlzYWJsZURyYWdBbmREcm9wPzogYm9vbGVhblxuXHRkYXlNYXhFdmVudHM6IG51bWJlclxuXHRldmVudFNwYWNpbmc/OiBudW1iZXJcblx0c3RpY2t5Vmlld0hlYWRlcj86IGJvb2xlYW5cblx0dmlld0hlYWRlckNsYXNzTmFtZT86IHN0cmluZ1xuXHRoZWFkZXJDb21wb25lbnQ/OiBSZWFjdE5vZGUgLy8gT3B0aW9uYWwgY3VzdG9tIGhlYWRlciBjb21wb25lbnRcblx0aGVhZGVyQ2xhc3NOYW1lPzogc3RyaW5nIC8vIE9wdGlvbmFsIGN1c3RvbSBoZWFkZXIgY2xhc3Ncblx0YnVzaW5lc3NIb3Vycz86IEJ1c2luZXNzSG91cnMgfCBCdXNpbmVzc0hvdXJzW11cblx0cmVuZGVyRXZlbnRGb3JtPzogKHByb3BzOiBFdmVudEZvcm1Qcm9wcykgPT4gUmVhY3ROb2RlXG5cdC8vIFRyYW5zbGF0aW9uIG9wdGlvbnMgLSBwcm92aWRlIGVpdGhlciB0cmFuc2xhdGlvbnMgb2JqZWN0IE9SIHRyYW5zbGF0b3IgZnVuY3Rpb25cblx0dHJhbnNsYXRpb25zPzogVHJhbnNsYXRpb25zXG5cdHRyYW5zbGF0b3I/OiBUcmFuc2xhdG9yRnVuY3Rpb25cblx0dGltZUZvcm1hdD86IFRpbWVGb3JtYXRcblx0Y2xhc3Nlc092ZXJyaWRlPzogQ2FsZW5kYXJDbGFzc2VzT3ZlcnJpZGVcblx0cmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3I/OiAoXG5cdFx0cHJvcHM6IFJlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yUHJvcHNcblx0KSA9PiBSZWFjdE5vZGVcblx0cmVuZGVySG91cj86IChkYXRlOiBEYXlqcykgPT4gUmVhY3ROb2RlXG5cdGhpZGVOb25CdXNpbmVzc0hvdXJzPzogYm9vbGVhblxuXHRoaWRkZW5EYXlzPzogU2V0PG51bWJlcj5cbn1cblxuZXhwb3J0IGNvbnN0IENhbGVuZGFyUHJvdmlkZXI6IFJlYWN0LkZDPENhbGVuZGFyUHJvdmlkZXJQcm9wcz4gPSAoe1xuXHRjaGlsZHJlbixcblx0ZXZlbnRzID0gW10sXG5cdGZpcnN0RGF5T2ZXZWVrID0gMCxcblx0aW5pdGlhbFZpZXcgPSAnbW9udGgnLFxuXHRpbml0aWFsRGF0ZSxcblx0cmVuZGVyRXZlbnQsXG5cdG9uRXZlbnRDbGljayxcblx0b25DZWxsQ2xpY2ssXG5cdG9uVmlld0NoYW5nZSxcblx0b25FdmVudEFkZCxcblx0b25FdmVudFVwZGF0ZSxcblx0b25FdmVudERlbGV0ZSxcblx0b25EYXRlQ2hhbmdlLFxuXHRsb2NhbGUsXG5cdHRpbWV6b25lLFxuXHRkaXNhYmxlQ2VsbENsaWNrLFxuXHRkaXNhYmxlRXZlbnRDbGljayxcblx0ZGlzYWJsZURyYWdBbmREcm9wLFxuXHRkYXlNYXhFdmVudHMsXG5cdGV2ZW50U3BhY2luZyA9IEdBUF9CRVRXRUVOX0VMRU1FTlRTLFxuXHRzdGlja3lWaWV3SGVhZGVyID0gdHJ1ZSxcblx0dmlld0hlYWRlckNsYXNzTmFtZSA9ICcnLFxuXHRoZWFkZXJDb21wb25lbnQsXG5cdGhlYWRlckNsYXNzTmFtZSxcblx0YnVzaW5lc3NIb3Vycyxcblx0cmVuZGVyRXZlbnRGb3JtLFxuXHR0cmFuc2xhdGlvbnMsXG5cdHRyYW5zbGF0b3IsXG5cdHRpbWVGb3JtYXQgPSAnMTItaG91cicsXG5cdGNsYXNzZXNPdmVycmlkZSxcblx0cmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3IsXG5cdHJlbmRlckhvdXIsXG5cdGhpZGVOb25CdXNpbmVzc0hvdXJzID0gZmFsc2UsXG5cdGhpZGRlbkRheXMsXG59KSA9PiB7XG5cdC8vIFVzZSB0aGUgY2FsZW5kYXIgZW5naW5lXG5cdGNvbnN0IGNhbGVuZGFyRW5naW5lID0gdXNlQ2FsZW5kYXJFbmdpbmUoe1xuXHRcdGV2ZW50cyxcblx0XHRmaXJzdERheU9mV2Vlayxcblx0XHRpbml0aWFsVmlldyxcblx0XHRpbml0aWFsRGF0ZSxcblx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdG9uRXZlbnRBZGQsXG5cdFx0b25FdmVudFVwZGF0ZSxcblx0XHRvbkV2ZW50RGVsZXRlLFxuXHRcdG9uRGF0ZUNoYW5nZSxcblx0XHRvblZpZXdDaGFuZ2UsXG5cdFx0bG9jYWxlLFxuXHRcdHRpbWV6b25lLFxuXHRcdHRyYW5zbGF0aW9ucyxcblx0XHR0cmFuc2xhdG9yLFxuXHR9KVxuXG5cdGNvbnN0IGVkaXRFdmVudCA9IHVzZUNhbGxiYWNrKFxuXHRcdChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4ge1xuXHRcdFx0Y2FsZW5kYXJFbmdpbmUuc2V0U2VsZWN0ZWRFdmVudChldmVudClcblx0XHRcdGNhbGVuZGFyRW5naW5lLnNldElzRXZlbnRGb3JtT3Blbih0cnVlKVxuXHRcdH0sXG5cdFx0W2NhbGVuZGFyRW5naW5lXVxuXHQpXG5cblx0Ly8gQ3VzdG9tIGhhbmRsZXJzIHRoYXQgY2FsbCBleHRlcm5hbCBjYWxsYmFja3Ncblx0Y29uc3QgaGFuZGxlRXZlbnRDbGljayA9IHVzZUNhbGxiYWNrKFxuXHRcdChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4ge1xuXHRcdFx0aWYgKGRpc2FibGVFdmVudENsaWNrKSB7XG5cdFx0XHRcdHJldHVyblxuXHRcdFx0fVxuXHRcdFx0aWYgKG9uRXZlbnRDbGljaykge1xuXHRcdFx0XHRvbkV2ZW50Q2xpY2soZXZlbnQpXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRlZGl0RXZlbnQoZXZlbnQpXG5cdFx0XHR9XG5cdFx0fSxcblx0XHRbZGlzYWJsZUV2ZW50Q2xpY2ssIG9uRXZlbnRDbGljaywgZWRpdEV2ZW50XVxuXHQpXG5cblx0Y29uc3QgaGFuZGxlRGF0ZUNsaWNrID0gdXNlQ2FsbGJhY2soXG5cdFx0KGluZm86IENlbGxDbGlja0luZm8pID0+IHtcblx0XHRcdGlmIChkaXNhYmxlQ2VsbENsaWNrKSB7XG5cdFx0XHRcdHJldHVyblxuXHRcdFx0fVxuXG5cdFx0XHRpZiAob25DZWxsQ2xpY2spIHtcblx0XHRcdFx0b25DZWxsQ2xpY2soaW5mbylcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNhbGVuZGFyRW5naW5lLm9wZW5FdmVudEZvcm0oaW5mbylcblx0XHRcdH1cblx0XHR9LFxuXHRcdFtvbkNlbGxDbGljaywgZGlzYWJsZUNlbGxDbGljaywgY2FsZW5kYXJFbmdpbmVdXG5cdClcblxuXHQvLyBDcmVhdGUgdGhlIGNvbnRleHQgdmFsdWVcblx0Y29uc3QgY29udGV4dFZhbHVlID0gdXNlTWVtbyhcblx0XHQoKSA9PiAoe1xuXHRcdFx0Y3VycmVudERhdGU6IGNhbGVuZGFyRW5naW5lLmN1cnJlbnREYXRlLFxuXHRcdFx0dmlldzogY2FsZW5kYXJFbmdpbmUudmlldyxcblx0XHRcdGV2ZW50czogY2FsZW5kYXJFbmdpbmUuZXZlbnRzLFxuXHRcdFx0cmF3RXZlbnRzOiBjYWxlbmRhckVuZ2luZS5yYXdFdmVudHMsXG5cdFx0XHRjdXJyZW50TG9jYWxlOiBjYWxlbmRhckVuZ2luZS5jdXJyZW50TG9jYWxlLFxuXHRcdFx0aXNFdmVudEZvcm1PcGVuOiBjYWxlbmRhckVuZ2luZS5pc0V2ZW50Rm9ybU9wZW4sXG5cdFx0XHRzZWxlY3RlZEV2ZW50OiBjYWxlbmRhckVuZ2luZS5zZWxlY3RlZEV2ZW50LFxuXHRcdFx0c2VsZWN0ZWREYXRlOiBjYWxlbmRhckVuZ2luZS5zZWxlY3RlZERhdGUsXG5cdFx0XHRmaXJzdERheU9mV2VlazogY2FsZW5kYXJFbmdpbmUuZmlyc3REYXlPZldlZWssXG5cdFx0XHRzZXRDdXJyZW50RGF0ZTogY2FsZW5kYXJFbmdpbmUuc2V0Q3VycmVudERhdGUsXG5cdFx0XHRzZWxlY3REYXRlOiBjYWxlbmRhckVuZ2luZS5zZWxlY3REYXRlLFxuXHRcdFx0c2V0VmlldzogY2FsZW5kYXJFbmdpbmUuc2V0Vmlldyxcblx0XHRcdG5leHRQZXJpb2Q6IGNhbGVuZGFyRW5naW5lLm5leHRQZXJpb2QsXG5cdFx0XHRwcmV2UGVyaW9kOiBjYWxlbmRhckVuZ2luZS5wcmV2UGVyaW9kLFxuXHRcdFx0dG9kYXk6IGNhbGVuZGFyRW5naW5lLnRvZGF5LFxuXHRcdFx0YWRkRXZlbnQ6IGNhbGVuZGFyRW5naW5lLmFkZEV2ZW50LFxuXHRcdFx0dXBkYXRlRXZlbnQ6IGNhbGVuZGFyRW5naW5lLnVwZGF0ZUV2ZW50LFxuXHRcdFx0dXBkYXRlUmVjdXJyaW5nRXZlbnQ6IGNhbGVuZGFyRW5naW5lLnVwZGF0ZVJlY3VycmluZ0V2ZW50LFxuXHRcdFx0ZGVsZXRlRXZlbnQ6IGNhbGVuZGFyRW5naW5lLmRlbGV0ZUV2ZW50LFxuXHRcdFx0ZGVsZXRlUmVjdXJyaW5nRXZlbnQ6IGNhbGVuZGFyRW5naW5lLmRlbGV0ZVJlY3VycmluZ0V2ZW50LFxuXHRcdFx0b3BlbkV2ZW50Rm9ybTogY2FsZW5kYXJFbmdpbmUub3BlbkV2ZW50Rm9ybSxcblx0XHRcdGNsb3NlRXZlbnRGb3JtOiBjYWxlbmRhckVuZ2luZS5jbG9zZUV2ZW50Rm9ybSxcblx0XHRcdGdldEV2ZW50c0ZvckRhdGVSYW5nZTogY2FsZW5kYXJFbmdpbmUuZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlLFxuXHRcdFx0ZmluZFBhcmVudFJlY3VycmluZ0V2ZW50OiBjYWxlbmRhckVuZ2luZS5maW5kUGFyZW50UmVjdXJyaW5nRXZlbnQsXG5cdFx0XHRyZW5kZXJFdmVudCxcblx0XHRcdG9uRXZlbnRDbGljazogaGFuZGxlRXZlbnRDbGljayxcblx0XHRcdG9uQ2VsbENsaWNrOiBoYW5kbGVEYXRlQ2xpY2ssXG5cdFx0XHRsb2NhbGUsXG5cdFx0XHR0aW1lem9uZSxcblx0XHRcdGRpc2FibGVDZWxsQ2xpY2ssXG5cdFx0XHRkaXNhYmxlRXZlbnRDbGljayxcblx0XHRcdGRpc2FibGVEcmFnQW5kRHJvcCxcblx0XHRcdGRheU1heEV2ZW50cyxcblx0XHRcdGV2ZW50U3BhY2luZyxcblx0XHRcdHN0aWNreVZpZXdIZWFkZXIsXG5cdFx0XHR2aWV3SGVhZGVyQ2xhc3NOYW1lLFxuXHRcdFx0aGVhZGVyQ29tcG9uZW50LFxuXHRcdFx0aGVhZGVyQ2xhc3NOYW1lLFxuXHRcdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRcdHJlbmRlckV2ZW50Rm9ybSxcblx0XHRcdHQ6IGNhbGVuZGFyRW5naW5lLnQsXG5cdFx0XHR0aW1lRm9ybWF0LFxuXHRcdFx0Y2xhc3Nlc092ZXJyaWRlLFxuXHRcdFx0cmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3IsXG5cdFx0XHRyZW5kZXJIb3VyLFxuXHRcdFx0aGlkZU5vbkJ1c2luZXNzSG91cnMsXG5cdFx0XHRoaWRkZW5EYXlzLFxuXHRcdH0pLFxuXHRcdFtcblx0XHRcdGNhbGVuZGFyRW5naW5lLFxuXHRcdFx0cmVuZGVyRXZlbnQsXG5cdFx0XHRoYW5kbGVFdmVudENsaWNrLFxuXHRcdFx0aGFuZGxlRGF0ZUNsaWNrLFxuXHRcdFx0bG9jYWxlLFxuXHRcdFx0dGltZXpvbmUsXG5cdFx0XHRkaXNhYmxlQ2VsbENsaWNrLFxuXHRcdFx0ZGlzYWJsZUV2ZW50Q2xpY2ssXG5cdFx0XHRkaXNhYmxlRHJhZ0FuZERyb3AsXG5cdFx0XHRkYXlNYXhFdmVudHMsXG5cdFx0XHRldmVudFNwYWNpbmcsXG5cdFx0XHRzdGlja3lWaWV3SGVhZGVyLFxuXHRcdFx0dmlld0hlYWRlckNsYXNzTmFtZSxcblx0XHRcdGhlYWRlckNvbXBvbmVudCxcblx0XHRcdGhlYWRlckNsYXNzTmFtZSxcblx0XHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0XHRyZW5kZXJFdmVudEZvcm0sXG5cdFx0XHR0aW1lRm9ybWF0LFxuXHRcdFx0Y2xhc3Nlc092ZXJyaWRlLFxuXHRcdFx0cmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3IsXG5cdFx0XHRyZW5kZXJIb3VyLFxuXHRcdFx0aGlkZU5vbkJ1c2luZXNzSG91cnMsXG5cdFx0XHRoaWRkZW5EYXlzLFxuXHRcdF1cblx0KVxuXG5cdHJldHVybiAoXG5cdFx0PENhbGVuZGFyQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17Y29udGV4dFZhbHVlfT5cblx0XHRcdHtjaGlsZHJlbn1cblx0XHQ8L0NhbGVuZGFyQ29udGV4dC5Qcm92aWRlcj5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEFuaW1hdGVkU2VjdGlvbiB9IGZyb20gJ0AvY29tcG9uZW50cy9hbmltYXRpb25zL2FuaW1hdGVkLXNlY3Rpb24nXG5pbXBvcnQgeyBDYWxlbmRhckRuZENvbnRleHQgfSBmcm9tICdAL2NvbXBvbmVudHMvZHJhZy1hbmQtZHJvcC9jYWxlbmRhci1kbmQtY29udGV4dCdcbmltcG9ydCB7IEV2ZW50Rm9ybURpYWxvZyB9IGZyb20gJ0AvY29tcG9uZW50cy9ldmVudC1mb3JtL2V2ZW50LWZvcm0tZGlhbG9nJ1xuaW1wb3J0IHsgSGVhZGVyIH0gZnJvbSAnQC9jb21wb25lbnRzL2hlYWRlcidcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB7IERheVZpZXcgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbXBvbmVudHMvZGF5LXZpZXcvZGF5LXZpZXcnXG5pbXBvcnQgeyBNb250aFZpZXcgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbXBvbmVudHMvbW9udGgtdmlldy9tb250aC12aWV3J1xuaW1wb3J0IHsgV2Vla1ZpZXcgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbXBvbmVudHMvd2Vlay12aWV3L3dlZWstdmlldydcbmltcG9ydCB7IFllYXJWaWV3IH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci9jb21wb25lbnRzL3llYXItdmlldy95ZWFyLXZpZXcnXG5pbXBvcnQgeyBDYWxlbmRhclByb3ZpZGVyIH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L3Byb3ZpZGVyJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuLy8gb3hsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWR1cGxpY2F0ZXNcbmltcG9ydCAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgdHlwZSB7IFdlZWtEYXlzIH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHR5cGUge1xuXHRJbGFteUNhbGVuZGFyUHJvcEV2ZW50LFxuXHRJbGFteUNhbGVuZGFyUHJvcHMsXG59IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvdHlwZXMnXG5pbXBvcnQge1xuXHREQVlfTUFYX0VWRU5UU19ERUZBVUxULFxuXHRHQVBfQkVUV0VFTl9FTEVNRU5UUyxcblx0V0VFS19EQVlTX05VTUJFUl9NQVAsXG59IGZyb20gJ0AvbGliL2NvbnN0YW50cydcbmltcG9ydCB7IG5vcm1hbGl6ZUV2ZW50cywgc2FmZURhdGUgfSBmcm9tICdAL2xpYi91dGlscydcblxuY29uc3QgQ2FsZW5kYXJDb250ZW50OiBSZWFjdC5GQyA9ICgpID0+IHtcblx0Y29uc3QgeyB2aWV3LCBkYXlNYXhFdmVudHMgfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblxuXHRjb25zdCB2aWV3TWFwID0ge1xuXHRcdG1vbnRoOiA8TW9udGhWaWV3IGRheU1heEV2ZW50cz17ZGF5TWF4RXZlbnRzfSBrZXk9XCJtb250aFwiIC8+LFxuXHRcdHdlZWs6IDxXZWVrVmlldyBrZXk9XCJ3ZWVrXCIgLz4sXG5cdFx0ZGF5OiA8RGF5VmlldyBrZXk9XCJkYXlcIiAvPixcblx0XHR5ZWFyOiA8WWVhclZpZXcga2V5PVwieWVhclwiIC8+LFxuXHR9XG5cblx0cmV0dXJuIChcblx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgdy1mdWxsIGgtZnVsbFwiIGRhdGEtdGVzdGlkPVwiaWxhbXktY2FsZW5kYXJcIj5cblx0XHRcdDxIZWFkZXIgY2xhc3NOYW1lPVwicC0xXCIgLz5cblx0XHRcdHsvKiBDYWxlbmRhciBCb2R5IHdpdGggQW5pbWF0ZVByZXNlbmNlIGZvciB2aWV3IHRyYW5zaXRpb25zICovfVxuXHRcdFx0PENhbGVuZGFyRG5kQ29udGV4dD5cblx0XHRcdFx0PEFuaW1hdGVkU2VjdGlvblxuXHRcdFx0XHRcdGNsYXNzTmFtZT1cInctZnVsbCBoLVtjYWxjKDEwMCUtMy41cmVtKV1cIlxuXHRcdFx0XHRcdGRpcmVjdGlvbj1cImhvcml6b250YWxcIlxuXHRcdFx0XHRcdHRyYW5zaXRpb25LZXk9e3ZpZXd9XG5cdFx0XHRcdD5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImJvcmRlciBoLWZ1bGwgdy1mdWxsXCIgZGF0YS10ZXN0aWQ9XCJjYWxlbmRhci1ib2R5XCI+XG5cdFx0XHRcdFx0XHR7dmlld01hcFt2aWV3XX1cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PC9BbmltYXRlZFNlY3Rpb24+XG5cdFx0XHQ8L0NhbGVuZGFyRG5kQ29udGV4dD5cblx0XHRcdDxFdmVudEZvcm1EaWFsb2cgLz5cblx0XHQ8L2Rpdj5cblx0KVxufVxuXG5jb25zdCB0b0hpZGRlbkRheXNTZXQgPSAoaGlkZGVuRGF5cz86IFdlZWtEYXlzW10pOiBTZXQ8bnVtYmVyPiB8IHVuZGVmaW5lZCA9PiB7XG5cdGlmICghaGlkZGVuRGF5cyB8fCBoaWRkZW5EYXlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHVuZGVmaW5lZFxuXHRyZXR1cm4gbmV3IFNldChoaWRkZW5EYXlzLm1hcCgoZGF5KSA9PiBXRUVLX0RBWVNfTlVNQkVSX01BUFtkYXldKSlcbn1cblxuZXhwb3J0IGNvbnN0IElsYW15Q2FsZW5kYXI6IFJlYWN0LkZDPElsYW15Q2FsZW5kYXJQcm9wcz4gPSAoe1xuXHRldmVudHMsXG5cdGZpcnN0RGF5T2ZXZWVrID0gJ3N1bmRheScsXG5cdGluaXRpYWxWaWV3ID0gJ21vbnRoJyxcblx0aW5pdGlhbERhdGUsXG5cdGRheU1heEV2ZW50cyA9IERBWV9NQVhfRVZFTlRTX0RFRkFVTFQsXG5cdGV2ZW50U3BhY2luZyA9IEdBUF9CRVRXRUVOX0VMRU1FTlRTLFxuXHRzdGlja3lWaWV3SGVhZGVyID0gdHJ1ZSxcblx0dmlld0hlYWRlckNsYXNzTmFtZSA9ICcnLFxuXHR0aW1lRm9ybWF0ID0gJzEyLWhvdXInLFxuXHRoaWRlTm9uQnVzaW5lc3NIb3VycyA9IGZhbHNlLFxuXHRoaWRkZW5EYXlzLFxuXHQuLi5wcm9wc1xufSkgPT4ge1xuXHRyZXR1cm4gKFxuXHRcdDxDYWxlbmRhclByb3ZpZGVyXG5cdFx0XHRkYXlNYXhFdmVudHM9e2RheU1heEV2ZW50c31cblx0XHRcdGV2ZW50U3BhY2luZz17ZXZlbnRTcGFjaW5nfVxuXHRcdFx0ZXZlbnRzPXtub3JtYWxpemVFdmVudHM8SWxhbXlDYWxlbmRhclByb3BFdmVudCwgQ2FsZW5kYXJFdmVudD4oZXZlbnRzKX1cblx0XHRcdGZpcnN0RGF5T2ZXZWVrPXtXRUVLX0RBWVNfTlVNQkVSX01BUFtmaXJzdERheU9mV2Vla119XG5cdFx0XHRoaWRkZW5EYXlzPXt0b0hpZGRlbkRheXNTZXQoaGlkZGVuRGF5cyl9XG5cdFx0XHRoaWRlTm9uQnVzaW5lc3NIb3Vycz17aGlkZU5vbkJ1c2luZXNzSG91cnN9XG5cdFx0XHRpbml0aWFsRGF0ZT17c2FmZURhdGUoaW5pdGlhbERhdGUpfVxuXHRcdFx0aW5pdGlhbFZpZXc9e2luaXRpYWxWaWV3fVxuXHRcdFx0c3RpY2t5Vmlld0hlYWRlcj17c3RpY2t5Vmlld0hlYWRlcn1cblx0XHRcdHRpbWVGb3JtYXQ9e3RpbWVGb3JtYXR9XG5cdFx0XHR2aWV3SGVhZGVyQ2xhc3NOYW1lPXt2aWV3SGVhZGVyQ2xhc3NOYW1lfVxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdD5cblx0XHRcdDxDYWxlbmRhckNvbnRlbnQgLz5cblx0XHQ8L0NhbGVuZGFyUHJvdmlkZXI+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBIb3Jpem9udGFsR3JpZCB9IGZyb20gJ0AvY29tcG9uZW50cy9ob3Jpem9udGFsLWdyaWQvaG9yaXpvbnRhbC1ncmlkJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUgeyBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuXG5pbnRlcmZhY2UgUmVzb3VyY2VFdmVudEdyaWRQcm9wcyB7XG5cdC8qKlxuXHQgKiBBcnJheSBvZiBkYXlzIHRvIGRpc3BsYXkgaW4gdGhlIGdyaWRcblx0ICovXG5cdGRheXM6IERheWpzW10gfCBEYXlqc1tdW11cblx0LyoqIFRoZSB0eXBlIG9mIGdyaWQgdG8gZGlzcGxheSAtICdkYXknIGZvciBkYXkgdmlldywgJ2hvdXInIGZvciB3ZWVrIHZpZXdcblx0ICogKGFmZmVjdHMgZXZlbnQgcG9zaXRpb25pbmcgbG9naWMpXG5cdCAqL1xuXHRncmlkVHlwZT86ICdkYXknIHwgJ2hvdXInXG5cdC8qKlxuXHQgKiBDaGlsZHJlbiB3aWxsIGJlIHJlbmRlcmVkIGFzIGhlYWRlcnMgYWJvdmUgdGhlIGdyaWRcblx0ICogKGUuZy4sIGZvciBkYXkgbmFtZXMgaW4gbW9udGggdmlldylcblx0ICovXG5cdGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlXG5cdGNsYXNzZXM/OiB7IGhlYWRlcj86IHN0cmluZzsgYm9keT86IHN0cmluZzsgc2Nyb2xsPzogc3RyaW5nOyBjZWxsPzogc3RyaW5nIH1cbn1cblxuZXhwb3J0IGNvbnN0IFJlc291cmNlRXZlbnRHcmlkOiBSZWFjdC5GQzxSZXNvdXJjZUV2ZW50R3JpZFByb3BzPiA9ICh7XG5cdGRheXMsXG5cdGdyaWRUeXBlID0gJ2RheScsXG5cdGNoaWxkcmVuLFxuXHRjbGFzc2VzLFxufSkgPT4ge1xuXHRjb25zdCB7IGdldFZpc2libGVSZXNvdXJjZXMgfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblxuXHRjb25zdCB2aXNpYmxlUmVzb3VyY2VzID0gZ2V0VmlzaWJsZVJlc291cmNlcygpXG5cblx0Y29uc3QgY29sdW1ucyA9IGRheXMubWFwKChkYXkpID0+IHtcblx0XHRjb25zdCBpc0FycmF5ID0gQXJyYXkuaXNBcnJheShkYXkpXG5cdFx0cmV0dXJuIHtcblx0XHRcdGlkOiBgY29sLSR7aXNBcnJheSA/IGRheVswXT8uZm9ybWF0KCdZWVlZLU1NLUREJykgOiBkYXkudG9JU09TdHJpbmcoKX1gLFxuXHRcdFx0ZGF5OiBpc0FycmF5ID8gdW5kZWZpbmVkIDogZGF5LFxuXHRcdFx0ZGF5czogaXNBcnJheSA/IGRheSA6IHVuZGVmaW5lZCxcblx0XHRcdGNsYXNzTmFtZTogY2xhc3Nlcz8uY2VsbCxcblx0XHRcdGdyaWRUeXBlLFxuXHRcdH1cblx0fSlcblxuXHRjb25zdCByb3dzID0gdmlzaWJsZVJlc291cmNlcy5tYXAoKHJlc291cmNlKSA9PiAoe1xuXHRcdGlkOiByZXNvdXJjZS5pZCxcblx0XHR0aXRsZTogcmVzb3VyY2UudGl0bGUsXG5cdFx0cmVzb3VyY2U6IHJlc291cmNlLFxuXHRcdGNvbHVtbnMsXG5cdH0pKVxuXG5cdHJldHVybiAoXG5cdFx0PEhvcml6b250YWxHcmlkXG5cdFx0XHRjbGFzc2VzPXtjbGFzc2VzfVxuXHRcdFx0ZGF5TnVtYmVySGVpZ2h0PXswfVxuXHRcdFx0Z3JpZFR5cGU9e2dyaWRUeXBlfVxuXHRcdFx0cm93cz17cm93c31cblx0XHQ+XG5cdFx0XHR7Y2hpbGRyZW59XG5cdFx0PC9Ib3Jpem9udGFsR3JpZD5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEFuaW1hdGVkU2VjdGlvbiB9IGZyb20gJ0AvY29tcG9uZW50cy9hbmltYXRpb25zL2FuaW1hdGVkLXNlY3Rpb24nXG5pbXBvcnQgeyBIb3VyTGFiZWwgfSBmcm9tICdAL2NvbXBvbmVudHMvaG91ci1sYWJlbC9ob3VyLWxhYmVsJ1xuaW1wb3J0IHR5cGUgeyBCdXNpbmVzc0hvdXJzIH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHsgZ2V0Vmlld0hvdXJzIH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci91dGlscy92aWV3LWhvdXJzJ1xuaW1wb3J0IHsgUmVzb3VyY2VFdmVudEdyaWQgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvcmVzb3VyY2UtZXZlbnQtZ3JpZCdcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmV4cG9ydCBjb25zdCBSZXNvdXJjZURheUhvcml6b250YWw6IFJlYWN0LkZDID0gKCkgPT4ge1xuXHRjb25zdCB7XG5cdFx0Y3VycmVudERhdGUsXG5cdFx0dCxcblx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzLFxuXHRcdGdldFZpc2libGVSZXNvdXJjZXMsXG5cdH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cdGNvbnN0IHJlc291cmNlcyA9IGdldFZpc2libGVSZXNvdXJjZXMoKVxuXHRjb25zdCBkYXlIb3VycyA9IGdldFZpZXdIb3Vycyh7XG5cdFx0cmVmZXJlbmNlRGF0ZTogY3VycmVudERhdGUsXG5cdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRoaWRlTm9uQnVzaW5lc3NIb3Vycyxcblx0XHRhbGxEYXRlczogW2N1cnJlbnREYXRlXSxcblx0XHRyZXNvdXJjZUJ1c2luZXNzSG91cnM6IHJlc291cmNlc1xuXHRcdFx0Lm1hcCgocikgPT4gci5idXNpbmVzc0hvdXJzKVxuXHRcdFx0LmZpbHRlcihCb29sZWFuKSBhcyAoQnVzaW5lc3NIb3VycyB8IEJ1c2luZXNzSG91cnNbXSlbXSxcblx0fSlcblxuXHRyZXR1cm4gKFxuXHRcdDxSZXNvdXJjZUV2ZW50R3JpZFxuXHRcdFx0Y2xhc3Nlcz17e1xuXHRcdFx0XHRoZWFkZXI6ICdtaW4tdy1mdWxsJyxcblx0XHRcdFx0Ym9keTogJ21pbi13LWZ1bGwnLFxuXHRcdFx0XHRjZWxsOiAnbWluLXctMjAgZmxleC0xJyxcblx0XHRcdH19XG5cdFx0XHRkYXlzPXtkYXlIb3Vyc31cblx0XHRcdGdyaWRUeXBlPVwiaG91clwiXG5cdFx0PlxuXHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ3LTIwIHNtOnctNDAgYm9yZGVyLWIgYm9yZGVyLXIgc2hyaW5rLTAgZmxleCBqdXN0aWZ5LWNlbnRlciBpdGVtcy1jZW50ZXIgc3RpY2t5IHRvcC0wIGxlZnQtMCBiZy1iYWNrZ3JvdW5kIHotMjBcIj5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtXCI+e3QoJ3Jlc291cmNlcycpfTwvZGl2PlxuXHRcdFx0PC9kaXY+XG5cblx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIGZsZXggZmxleC1jb2xcIj5cblx0XHRcdFx0ey8qIFRpbWUgaGVhZGVyIHJvdyAqL31cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IGgtMTJcIj5cblx0XHRcdFx0XHR7ZGF5SG91cnMubWFwKChjb2wsIGluZGV4KSA9PiB7XG5cdFx0XHRcdFx0XHRjb25zdCBpc05vd0hvdXIgPSBjb2wuaXNTYW1lKGRheWpzKCksICdob3VyJylcblx0XHRcdFx0XHRcdGNvbnN0IGtleSA9IGByZXNvdXJjZS1kYXktaGVhZGVyLSR7Y29sLnRvSVNPU3RyaW5nKCl9YFxuXG5cdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHQ8QW5pbWF0ZWRTZWN0aW9uXG5cdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdFx0XHRcdCdtaW4tdy0yMCBmbGV4LTEgYm9yZGVyLWIgYm9yZGVyLXIgbGFzdDpib3JkZXItci0wIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRleHQteHMgc2hyaW5rLTAnLFxuXHRcdFx0XHRcdFx0XHRcdFx0aXNOb3dIb3VyICYmICdiZy1ibHVlLTUwIHRleHQtYmx1ZS02MDAgZm9udC1tZWRpdW0nXG5cdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD17YHJlc291cmNlLWRheS10aW1lLWxhYmVsLSR7Y29sLmZvcm1hdCgnSEgnKX1gfVxuXHRcdFx0XHRcdFx0XHRcdGRlbGF5PXtpbmRleCAqIDAuMDV9XG5cdFx0XHRcdFx0XHRcdFx0a2V5PXtgJHtrZXl9LWFuaW1hdGVkYH1cblx0XHRcdFx0XHRcdFx0XHR0cmFuc2l0aW9uS2V5PXtgJHtrZXl9LW1vdGlvbmB9XG5cdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHQ8SG91ckxhYmVsIGRhdGU9e2NvbH0gLz5cblx0XHRcdFx0XHRcdFx0PC9BbmltYXRlZFNlY3Rpb24+XG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0fSl9XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0PC9kaXY+XG5cdFx0PC9SZXNvdXJjZUV2ZW50R3JpZD5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgeyBBbGxEYXlDZWxsIH0gZnJvbSAnQC9jb21wb25lbnRzL2FsbC1kYXktcm93L2FsbC1kYXktY2VsbCdcbmltcG9ydCB7IEFsbERheVJvdyB9IGZyb20gJ0AvY29tcG9uZW50cy9hbGwtZGF5LXJvdy9hbGwtZGF5LXJvdydcbmltcG9ydCB7IEhvdXJMYWJlbCB9IGZyb20gJ0AvY29tcG9uZW50cy9ob3VyLWxhYmVsL2hvdXItbGFiZWwnXG5pbXBvcnQgeyBSZXNvdXJjZUNlbGwgfSBmcm9tICdAL2NvbXBvbmVudHMvcmVzb3VyY2UtY2VsbCdcbmltcG9ydCB0eXBlIHsgQnVzaW5lc3NIb3VycyB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB7IFZlcnRpY2FsR3JpZCB9IGZyb20gJ0AvY29tcG9uZW50cy92ZXJ0aWNhbC1ncmlkL3ZlcnRpY2FsLWdyaWQnXG5pbXBvcnQgeyBnZXRWaWV3SG91cnMgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL3V0aWxzL3ZpZXctaG91cnMnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSB7IERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5cbmV4cG9ydCBjb25zdCBSZXNvdXJjZURheVZlcnRpY2FsOiBSZWFjdC5GQyA9ICgpID0+IHtcblx0Y29uc3Qge1xuXHRcdGN1cnJlbnREYXRlLFxuXHRcdGdldFZpc2libGVSZXNvdXJjZXMsXG5cdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRoaWRlTm9uQnVzaW5lc3NIb3Vycyxcblx0fSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblxuXHRjb25zdCByZXNvdXJjZXMgPSBnZXRWaXNpYmxlUmVzb3VyY2VzKClcblx0Y29uc3QgaG91cnMgPSBnZXRWaWV3SG91cnMoe1xuXHRcdHJlZmVyZW5jZURhdGU6IGN1cnJlbnREYXRlLFxuXHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0aGlkZU5vbkJ1c2luZXNzSG91cnMsXG5cdFx0YWxsRGF0ZXM6IFtjdXJyZW50RGF0ZV0sXG5cdFx0cmVzb3VyY2VCdXNpbmVzc0hvdXJzOiByZXNvdXJjZXNcblx0XHRcdC5tYXAoKHIpID0+IHIuYnVzaW5lc3NIb3Vycylcblx0XHRcdC5maWx0ZXIoQm9vbGVhbikgYXMgKEJ1c2luZXNzSG91cnMgfCBCdXNpbmVzc0hvdXJzW10pW10sXG5cdH0pXG5cblx0Y29uc3QgZmlyc3RDb2wgPSB7XG5cdFx0aWQ6ICd0aW1lLWNvbCcsXG5cdFx0ZGF5OiB1bmRlZmluZWQsXG5cdFx0ZGF5czogaG91cnMsXG5cdFx0Y2xhc3NOYW1lOlxuXHRcdFx0J3Nocmluay0wIHctMTYgbWluLXctMTYgbWF4LXctMTYgc3RpY2t5IGxlZnQtMCBiZy1iYWNrZ3JvdW5kIHotMjAnLFxuXHRcdGdyaWRUeXBlOiAnaG91cicgYXMgY29uc3QsXG5cdFx0bm9FdmVudHM6IHRydWUsXG5cdFx0cmVuZGVyQ2VsbDogKGRhdGU6IERheWpzKSA9PiAoXG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQtbXV0ZWQtZm9yZWdyb3VuZCBwLTIgdGV4dC1yaWdodCB0ZXh0LVsxMHB4XSBzbTp0ZXh0LXhzIGZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyXCI+XG5cdFx0XHRcdDxIb3VyTGFiZWwgZGF0ZT17ZGF0ZX0gLz5cblx0XHRcdDwvZGl2PlxuXHRcdCksXG5cdH1cblxuXHRjb25zdCBjb2x1bW5zID0gcmVzb3VyY2VzLm1hcCgocmVzb3VyY2UpID0+ICh7XG5cdFx0aWQ6IGBkYXktY29sLSR7Y3VycmVudERhdGUuZm9ybWF0KCdZWVlZLU1NLUREJyl9LXJlc291cmNlLSR7cmVzb3VyY2UuaWR9YCxcblx0XHRyZXNvdXJjZUlkOiByZXNvdXJjZS5pZCxcblx0XHRyZXNvdXJjZSxcblx0XHRkYXlzOiBob3Vycyxcblx0XHRkYXk6IGN1cnJlbnREYXRlLFxuXHRcdGdyaWRUeXBlOiAnaG91cicgYXMgY29uc3QsXG5cdH0pKVxuXG5cdHJldHVybiAoXG5cdFx0PFZlcnRpY2FsR3JpZFxuXHRcdFx0YWxsRGF5Um93PXtcblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IHctZnVsbFwiPlxuXHRcdFx0XHRcdDxBbGxEYXlDZWxsIC8+XG5cdFx0XHRcdFx0e3Jlc291cmNlcy5tYXAoKHJlc291cmNlKSA9PiAoXG5cdFx0XHRcdFx0XHQ8QWxsRGF5Um93XG5cdFx0XHRcdFx0XHRcdGNsYXNzZXM9e3sgY2VsbDogJ21pbi13LTUwJyB9fVxuXHRcdFx0XHRcdFx0XHRkYXlzPXtbY3VycmVudERhdGVdfVxuXHRcdFx0XHRcdFx0XHRrZXk9e2ByZXNvdXJjZS1hbGxkYXktcm93LSR7cmVzb3VyY2UuaWR9YH1cblx0XHRcdFx0XHRcdFx0cmVzb3VyY2U9e3Jlc291cmNlfVxuXHRcdFx0XHRcdFx0XHRzaG93U3BhY2VyPXtmYWxzZX1cblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0KSl9XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0fVxuXHRcdFx0Y2VsbFNsb3RzPXtbMCwgMTUsIDMwLCA0NV19XG5cdFx0XHRjbGFzc2VzPXt7IGJvZHk6ICd3LWZ1bGwnLCBoZWFkZXI6ICd3LWZ1bGwnIH19XG5cdFx0XHRjb2x1bW5zPXtbZmlyc3RDb2wsIC4uLmNvbHVtbnNdfVxuXHRcdFx0ZGF0YS10ZXN0aWQ9XCJyZXNvdXJjZS1kYXlcIlxuXHRcdFx0Z3JpZFR5cGU9XCJob3VyXCJcblx0XHQ+XG5cdFx0XHR7LyogSGVhZGVyICovfVxuXHRcdFx0PGRpdlxuXHRcdFx0XHRjbGFzc05hbWU9eydmbGV4IGJvcmRlci1iIGgtMTIgZmxleC0xJ31cblx0XHRcdFx0ZGF0YS10ZXN0aWQ9XCJyZXNvdXJjZS1tb250aC1oZWFkZXJcIlxuXHRcdFx0PlxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInNocmluay0wIGJvcmRlci1yIHctMTYgc3RpY2t5IHRvcC0wIGxlZnQtMCBiZy1iYWNrZ3JvdW5kIHotMjBcIiAvPlxuXHRcdFx0XHR7cmVzb3VyY2VzLm1hcCgocmVzb3VyY2UpID0+IChcblx0XHRcdFx0XHQ8UmVzb3VyY2VDZWxsXG5cdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJtaW4tdy01MCBmbGV4LTFcIlxuXHRcdFx0XHRcdFx0a2V5PXtgcmVzb3VyY2UtY2VsbC0ke3Jlc291cmNlLmlkfWB9XG5cdFx0XHRcdFx0XHRyZXNvdXJjZT17cmVzb3VyY2V9XG5cdFx0XHRcdFx0Lz5cblx0XHRcdFx0KSl9XG5cdFx0XHQ8L2Rpdj5cblx0XHQ8L1ZlcnRpY2FsR3JpZD5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB7IFJlc291cmNlRGF5SG9yaXpvbnRhbCB9IGZyb20gJy4vcmVzb3VyY2UtZGF5LWhvcml6b250YWwnXG5pbXBvcnQgeyBSZXNvdXJjZURheVZlcnRpY2FsIH0gZnJvbSAnLi9yZXNvdXJjZS1kYXktdmVydGljYWwnXG5cbmV4cG9ydCBjb25zdCBSZXNvdXJjZURheVZpZXc6IFJlYWN0LkZDID0gKCkgPT4ge1xuXHRjb25zdCB7IG9yaWVudGF0aW9uIH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cblx0aWYgKG9yaWVudGF0aW9uID09PSAndmVydGljYWwnKSB7XG5cdFx0cmV0dXJuIDxSZXNvdXJjZURheVZlcnRpY2FsIC8+XG5cdH1cblxuXHRyZXR1cm4gPFJlc291cmNlRGF5SG9yaXpvbnRhbCAvPlxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEFuaW1hdGVkU2VjdGlvbiB9IGZyb20gJ0AvY29tcG9uZW50cy9hbmltYXRpb25zL2FuaW1hdGVkLXNlY3Rpb24nXG5pbXBvcnQgeyBSZXNvdXJjZUV2ZW50R3JpZCB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy9yZXNvdXJjZS1ldmVudC1ncmlkJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUgeyBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgZ2V0TW9udGhEYXlzIH0gZnJvbSAnQC9saWIvdXRpbHMvZGF0ZS11dGlscydcblxuZXhwb3J0IGNvbnN0IFJlc291cmNlTW9udGhIb3Jpem9udGFsOiBSZWFjdC5GQyA9ICgpID0+IHtcblx0Y29uc3QgeyBjdXJyZW50RGF0ZSwgdCB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXG5cdC8vIEdlbmVyYXRlIGNhbGVuZGFyIGdyaWQgLSBkYXlzIG9mIHRoZSBtb250aFxuXHRjb25zdCBtb250aERheXMgPSB1c2VNZW1vPERheWpzW10+KCgpID0+IHtcblx0XHRyZXR1cm4gZ2V0TW9udGhEYXlzKGN1cnJlbnREYXRlKVxuXHR9LCBbY3VycmVudERhdGVdKVxuXG5cdHJldHVybiAoXG5cdFx0PFJlc291cmNlRXZlbnRHcmlkIGRheXM9e21vbnRoRGF5c30+XG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInctMjAgc206dy00MCBib3JkZXItYiBib3JkZXItciBzaHJpbmstMCBmbGV4IGp1c3RpZnktY2VudGVyIGl0ZW1zLWNlbnRlciBzdGlja3kgdG9wLTAgbGVmdC0wIGJnLWJhY2tncm91bmQgei0yMFwiPlxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQtc21cIj57dCgncmVzb3VyY2VzJyl9PC9kaXY+XG5cdFx0XHQ8L2Rpdj5cblxuXHRcdFx0e21vbnRoRGF5cy5tYXAoKGRheSwgaW5kZXgpID0+IHtcblx0XHRcdFx0Y29uc3Qga2V5ID0gYHJlc291cmNlLW1vbnRoLWhlYWRlci0ke2RheS50b0lTT1N0cmluZygpfWBcblxuXHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdDxBbmltYXRlZFNlY3Rpb25cblx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cInctMjAgYm9yZGVyLWIgYm9yZGVyLXIgc2hyaW5rLTAgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZmxleC1jb2xcIlxuXHRcdFx0XHRcdFx0ZGVsYXk9e2luZGV4ICogMC4wNX1cblx0XHRcdFx0XHRcdGtleT17YCR7a2V5fS1hbmltYXRlZGB9XG5cdFx0XHRcdFx0XHR0cmFuc2l0aW9uS2V5PXtgJHtrZXl9LW1vdGlvbmB9XG5cdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXhzIGZvbnQtbWVkaXVtXCI+e2RheS5mb3JtYXQoJ0QnKX08L2Rpdj5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LW11dGVkLWZvcmVncm91bmRcIj5cblx0XHRcdFx0XHRcdFx0e2RheS5mb3JtYXQoJ2RkZCcpfVxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0PC9BbmltYXRlZFNlY3Rpb24+XG5cdFx0XHRcdClcblx0XHRcdH0pfVxuXHRcdDwvUmVzb3VyY2VFdmVudEdyaWQ+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBSZXNvdXJjZUNlbGwgfSBmcm9tICdAL2NvbXBvbmVudHMvcmVzb3VyY2UtY2VsbCdcbmltcG9ydCB7IFZlcnRpY2FsR3JpZCB9IGZyb20gJ0AvY29tcG9uZW50cy92ZXJ0aWNhbC1ncmlkL3ZlcnRpY2FsLWdyaWQnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSB7IERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5cbmV4cG9ydCBjb25zdCBSZXNvdXJjZU1vbnRoVmVydGljYWw6IFJlYWN0LkZDID0gKCkgPT4ge1xuXHRjb25zdCB7IGN1cnJlbnREYXRlLCBnZXRWaXNpYmxlUmVzb3VyY2VzIH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cblx0Y29uc3QgcmVzb3VyY2VzID0gZ2V0VmlzaWJsZVJlc291cmNlcygpXG5cdGNvbnN0IHN0YXJ0T2ZNb250aCA9IGN1cnJlbnREYXRlLnN0YXJ0T2YoJ21vbnRoJylcblx0Y29uc3QgZGF5c0luTW9udGggPSBBcnJheS5mcm9tKFxuXHRcdHsgbGVuZ3RoOiBjdXJyZW50RGF0ZS5kYXlzSW5Nb250aCgpIH0sXG5cdFx0KF8sIGkpID0+IHN0YXJ0T2ZNb250aC5hZGQoaSwgJ2RheScpXG5cdClcblxuXHRjb25zdCBmaXJzdENvbCA9IHtcblx0XHRpZDogJ2RhdGUtY29sJyxcblx0XHRkYXlzOiBkYXlzSW5Nb250aCxcblx0XHRkYXk6IHVuZGVmaW5lZCxcblx0XHRjbGFzc05hbWU6XG5cdFx0XHQnc2hyaW5rLTAgdy0xNiBtaW4tdy0xNiBtYXgtdy0xNiBzdGlja3kgbGVmdC0wIGJnLWJhY2tncm91bmQgei0yMCcsXG5cdFx0Z3JpZFR5cGU6ICdkYXknIGFzIGNvbnN0LFxuXHRcdG5vRXZlbnRzOiB0cnVlLFxuXHRcdHJlbmRlckNlbGw6IChkYXRlOiBEYXlqcykgPT4gKFxuXHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LW11dGVkLWZvcmVncm91bmQgcC0yIHRleHQtcmlnaHQgdGV4dC1bMTBweF0gc206dGV4dC14cyBmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlclwiPlxuXHRcdFx0XHQ8c3Bhbj57ZGF0ZS5mb3JtYXQoJ0QnKX08L3NwYW4+XG5cdFx0XHRcdDxzcGFuPntkYXRlLmZvcm1hdCgnZGRkJyl9PC9zcGFuPlxuXHRcdFx0PC9kaXY+XG5cdFx0KSxcblx0fVxuXG5cdGNvbnN0IGNvbHVtbnMgPSByZXNvdXJjZXMubWFwKChyZXNvdXJjZSkgPT4gKHtcblx0XHRpZDogYG1vbnRoLWNvbC1yZXNvdXJjZS0ke3Jlc291cmNlLmlkfWAsXG5cdFx0ZGF5OiB1bmRlZmluZWQsXG5cdFx0cmVzb3VyY2VJZDogcmVzb3VyY2UuaWQsXG5cdFx0ZGF5czogZGF5c0luTW9udGgsXG5cdFx0Z3JpZFR5cGU6ICdkYXknIGFzIGNvbnN0LFxuXHR9KSlcblxuXHRyZXR1cm4gKFxuXHRcdDxWZXJ0aWNhbEdyaWRcblx0XHRcdGNsYXNzZXM9e3sgaGVhZGVyOiAndy1mdWxsJywgYm9keTogJ3ctZnVsbCcgfX1cblx0XHRcdGNvbHVtbnM9e1tmaXJzdENvbCwgLi4uY29sdW1uc119XG5cdFx0XHRkYXRhLXRlc3RpZD1cInJlc291cmNlLW1vbnRoLXZlcnRpY2FsLWdyaWRcIlxuXHRcdD5cblx0XHRcdHsvKiBIZWFkZXIgKi99XG5cdFx0XHQ8ZGl2XG5cdFx0XHRcdGNsYXNzTmFtZT17J2ZsZXggYm9yZGVyLWIgaC0xMiBmbGV4LTEnfVxuXHRcdFx0XHRkYXRhLXRlc3RpZD1cInJlc291cmNlLW1vbnRoLWhlYWRlclwiXG5cdFx0XHQ+XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwic2hyaW5rLTAgYm9yZGVyLXIgdy0xNiBzdGlja3kgdG9wLTAgbGVmdC0wIGJnLWJhY2tncm91bmQgei0yMFwiIC8+XG5cdFx0XHRcdHtyZXNvdXJjZXMubWFwKChyZXNvdXJjZSkgPT4gKFxuXHRcdFx0XHRcdDxSZXNvdXJjZUNlbGxcblx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cIm1pbi13LTUwIGZsZXgtMVwiXG5cdFx0XHRcdFx0XHRrZXk9e2ByZXNvdXJjZS1jZWxsLSR7cmVzb3VyY2UuaWR9YH1cblx0XHRcdFx0XHRcdHJlc291cmNlPXtyZXNvdXJjZX1cblx0XHRcdFx0XHQvPlxuXHRcdFx0XHQpKX1cblx0XHRcdDwvZGl2PlxuXHRcdDwvVmVydGljYWxHcmlkPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHsgUmVzb3VyY2VNb250aEhvcml6b250YWwgfSBmcm9tICcuL3Jlc291cmNlLW1vbnRoLWhvcml6b250YWwnXG5pbXBvcnQgeyBSZXNvdXJjZU1vbnRoVmVydGljYWwgfSBmcm9tICcuL3Jlc291cmNlLW1vbnRoLXZlcnRpY2FsJ1xuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VNb250aFZpZXc6IFJlYWN0LkZDID0gKCkgPT4ge1xuXHRjb25zdCB7IG9yaWVudGF0aW9uIH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cblx0aWYgKG9yaWVudGF0aW9uID09PSAndmVydGljYWwnKSB7XG5cdFx0cmV0dXJuIDxSZXNvdXJjZU1vbnRoVmVydGljYWwgLz5cblx0fVxuXG5cdHJldHVybiA8UmVzb3VyY2VNb250aEhvcml6b250YWwgLz5cbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBBbmltYXRlZFNlY3Rpb24gfSBmcm9tICdAL2NvbXBvbmVudHMvYW5pbWF0aW9ucy9hbmltYXRlZC1zZWN0aW9uJ1xuaW1wb3J0IHsgSG91ckxhYmVsIH0gZnJvbSAnQC9jb21wb25lbnRzL2hvdXItbGFiZWwvaG91ci1sYWJlbCdcbmltcG9ydCB0eXBlIHsgQnVzaW5lc3NIb3VycyB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB7IGdldFZpZXdIb3VycyB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvdXRpbHMvdmlldy1ob3VycydcbmltcG9ydCB7IFJlc291cmNlRXZlbnRHcmlkIH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL3Jlc291cmNlLWV2ZW50LWdyaWQnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgZ2V0V2Vla0RheXMgfSBmcm9tICdAL2xpYi91dGlscy9kYXRlLXV0aWxzJ1xuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VXZWVrSG9yaXpvbnRhbDogUmVhY3QuRkMgPSAoKSA9PiB7XG5cdGNvbnN0IHtcblx0XHRjdXJyZW50RGF0ZSxcblx0XHRmaXJzdERheU9mV2Vlayxcblx0XHR0LFxuXHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0aGlkZU5vbkJ1c2luZXNzSG91cnMsXG5cdFx0Z2V0VmlzaWJsZVJlc291cmNlcyxcblx0fSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblxuXHRjb25zdCByZXNvdXJjZXMgPSBnZXRWaXNpYmxlUmVzb3VyY2VzKClcblxuXHQvLyBHZW5lcmF0ZSB3ZWVrIGRheXNcblx0Y29uc3Qgd2Vla0RheXMgPSB1c2VNZW1vKFxuXHRcdCgpID0+IGdldFdlZWtEYXlzKGN1cnJlbnREYXRlLCBmaXJzdERheU9mV2VlayksXG5cdFx0W2N1cnJlbnREYXRlLCBmaXJzdERheU9mV2Vla11cblx0KVxuXG5cdC8vIFJlc291cmNlLXNwZWNpZmljIGJ1c2luZXNzIGhvdXJzIGNvbWJpbmVkXG5cdGNvbnN0IHJlc291cmNlQnVzaW5lc3NIb3VycyA9IHVzZU1lbW8oXG5cdFx0KCkgPT5cblx0XHRcdHJlc291cmNlcy5tYXAoKHIpID0+IHIuYnVzaW5lc3NIb3VycykuZmlsdGVyKEJvb2xlYW4pIGFzIChcblx0XHRcdFx0fCBCdXNpbmVzc0hvdXJzXG5cdFx0XHRcdHwgQnVzaW5lc3NIb3Vyc1tdXG5cdFx0XHQpW10sXG5cdFx0W3Jlc291cmNlc11cblx0KVxuXG5cdC8vIEdlbmVyYXRlIHRpbWUgY29sdW1ucyAoaG91cmx5IHNsb3RzKVxuXHRjb25zdCB3ZWVrSG91cnMgPSB1c2VNZW1vKCgpID0+IHtcblx0XHRyZXR1cm4gd2Vla0RheXMubWFwKChkYXkpID0+XG5cdFx0XHRnZXRWaWV3SG91cnMoe1xuXHRcdFx0XHRyZWZlcmVuY2VEYXRlOiBkYXksXG5cdFx0XHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0XHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzLFxuXHRcdFx0XHRyZXNvdXJjZUJ1c2luZXNzSG91cnMsXG5cdFx0XHR9KVxuXHRcdClcblx0fSwgW3dlZWtEYXlzLCBidXNpbmVzc0hvdXJzLCBoaWRlTm9uQnVzaW5lc3NIb3VycywgcmVzb3VyY2VCdXNpbmVzc0hvdXJzXSlcblxuXHRyZXR1cm4gKFxuXHRcdDxSZXNvdXJjZUV2ZW50R3JpZFxuXHRcdFx0Y2xhc3Nlcz17e1xuXHRcdFx0XHRoZWFkZXI6ICdoLTI0IG1pbi13LWZ1bGwnLFxuXHRcdFx0XHRib2R5OiAnbWluLXctZnVsbCcsXG5cdFx0XHRcdGNlbGw6ICdtaW4tdy0yMCBmbGV4LTEnLFxuXHRcdFx0fX1cblx0XHRcdGRheXM9e3dlZWtIb3Vyc31cblx0XHRcdGdyaWRUeXBlPVwiaG91clwiXG5cdFx0PlxuXHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ3LTIwIHNtOnctNDAgYm9yZGVyLWIgYm9yZGVyLXIgc2hyaW5rLTAgZmxleCBqdXN0aWZ5LWNlbnRlciBpdGVtcy1jZW50ZXIgc3RpY2t5IHRvcC0wIGxlZnQtMCBiZy1iYWNrZ3JvdW5kIHotMjBcIj5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtXCI+e3QoJ3Jlc291cmNlcycpfTwvZGl2PlxuXHRcdFx0PC9kaXY+XG5cblx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIGZsZXggZmxleC1jb2xcIj5cblx0XHRcdFx0ey8qIERheSBoZWFkZXIgcm93ICovfVxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggaC0xMlwiPlxuXHRcdFx0XHRcdHt3ZWVrRGF5cy5tYXAoKGRheSwgaW5kZXgpID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IGlzVG9kYXkgPSBkYXkuaXNTYW1lKGRheWpzKCksICdkYXknKVxuXHRcdFx0XHRcdFx0Y29uc3Qga2V5ID0gYHJlc291cmNlLXdlZWstaGVhZGVyLSR7ZGF5LnRvSVNPU3RyaW5nKCl9LWRheWBcblxuXHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0PEFuaW1hdGVkU2VjdGlvblxuXHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHRcdFx0XHQnc2hyaW5rLTAgYm9yZGVyLXIgbGFzdDpib3JkZXItci0wIGJvcmRlci1iIGZsZXgtMSBmbGV4IGl0ZW1zLWNlbnRlciB0ZXh0LWNlbnRlciBmb250LW1lZGl1bScsXG5cdFx0XHRcdFx0XHRcdFx0XHRpc1RvZGF5ICYmICdiZy1ibHVlLTUwIHRleHQtYmx1ZS02MDAnXG5cdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD1cInJlc291cmNlLXdlZWstZGF5LWhlYWRlclwiXG5cdFx0XHRcdFx0XHRcdFx0ZGVsYXk9e2luZGV4ICogMC4wNX1cblx0XHRcdFx0XHRcdFx0XHRrZXk9e2Ake2tleX0tYW5pbWF0ZWRgfVxuXHRcdFx0XHRcdFx0XHRcdHRyYW5zaXRpb25LZXk9e2Ake2tleX0tbW90aW9uYH1cblx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwic3RpY2t5IGxlZnQtMS8yXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQtc21cIj57ZGF5LmZvcm1hdCgnZGRkJyl9PC9kaXY+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHtkYXkuZm9ybWF0KCdNL0QnKX1cblx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHQ8L0FuaW1hdGVkU2VjdGlvbj5cblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHR9KX1cblx0XHRcdFx0PC9kaXY+XG5cblx0XHRcdFx0ey8qIFRpbWUgaGVhZGVyIHJvdyAqL31cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IGgtMTIgYm9yZGVyLWJcIj5cblx0XHRcdFx0XHR7d2Vla0hvdXJzLmZsYXQoKS5tYXAoKGNvbCwgaW5kZXgpID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IGlzTm93SG91ciA9IGNvbC5pc1NhbWUoZGF5anMoKSwgJ2hvdXInKVxuXHRcdFx0XHRcdFx0Y29uc3Qga2V5ID0gYHJlc291cmNlLXdlZWstaGVhZGVyLSR7Y29sLnRvSVNPU3RyaW5nKCl9LWhvdXItJHtpbmRleH1gXG5cblx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdDxBbmltYXRlZFNlY3Rpb25cblx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0XHRcdFx0J21pbi13LTIwIGZsZXgtMSBib3JkZXItciBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB0ZXh0LXhzIHNocmluay0wJyxcblx0XHRcdFx0XHRcdFx0XHRcdGlzTm93SG91ciAmJiAnYmctYmx1ZS01MCB0ZXh0LWJsdWUtNjAwIGZvbnQtbWVkaXVtJ1xuXHRcdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e2ByZXNvdXJjZS13ZWVrLXRpbWUtbGFiZWwtJHtjb2wuZm9ybWF0KCdISCcpfWB9XG5cdFx0XHRcdFx0XHRcdFx0ZGVsYXk9e2luZGV4ICogMC4wMDV9XG5cdFx0XHRcdFx0XHRcdFx0a2V5PXtgJHtrZXl9LWFuaW1hdGVkYH1cblx0XHRcdFx0XHRcdFx0XHR0cmFuc2l0aW9uS2V5PXtgJHtrZXl9LW1vdGlvbmB9XG5cdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHQ8SG91ckxhYmVsIGRhdGU9e2NvbH0gLz5cblx0XHRcdFx0XHRcdFx0PC9BbmltYXRlZFNlY3Rpb24+XG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0fSl9XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0PC9kaXY+XG5cdFx0PC9SZXNvdXJjZUV2ZW50R3JpZD5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEFsbERheUNlbGwgfSBmcm9tICdAL2NvbXBvbmVudHMvYWxsLWRheS1yb3cvYWxsLWRheS1jZWxsJ1xuaW1wb3J0IHsgQWxsRGF5Um93IH0gZnJvbSAnQC9jb21wb25lbnRzL2FsbC1kYXktcm93L2FsbC1kYXktcm93J1xuaW1wb3J0IHsgQW5pbWF0ZWRTZWN0aW9uIH0gZnJvbSAnQC9jb21wb25lbnRzL2FuaW1hdGlvbnMvYW5pbWF0ZWQtc2VjdGlvbidcbmltcG9ydCB7IEhvdXJMYWJlbCB9IGZyb20gJ0AvY29tcG9uZW50cy9ob3VyLWxhYmVsL2hvdXItbGFiZWwnXG5pbXBvcnQgeyBSZXNvdXJjZUNlbGwgfSBmcm9tICdAL2NvbXBvbmVudHMvcmVzb3VyY2UtY2VsbCdcbmltcG9ydCB0eXBlIHsgQnVzaW5lc3NIb3VycyB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB7IFZlcnRpY2FsR3JpZCB9IGZyb20gJ0AvY29tcG9uZW50cy92ZXJ0aWNhbC1ncmlkL3ZlcnRpY2FsLWdyaWQnXG5pbXBvcnQgeyBnZXRWaWV3SG91cnMgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL3V0aWxzL3ZpZXctaG91cnMnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSB7IERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgZ2V0V2Vla0RheXMgfSBmcm9tICdAL2xpYi91dGlscy9kYXRlLXV0aWxzJ1xuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VXZWVrVmVydGljYWw6IFJlYWN0LkZDID0gKCkgPT4ge1xuXHRjb25zdCB7XG5cdFx0Y3VycmVudERhdGUsXG5cdFx0Z2V0VmlzaWJsZVJlc291cmNlcyxcblx0XHRmaXJzdERheU9mV2Vlayxcblx0XHR0LFxuXHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0aGlkZU5vbkJ1c2luZXNzSG91cnMsXG5cdFx0aGlkZGVuRGF5cyxcblx0fSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblxuXHRjb25zdCByZXNvdXJjZXMgPSBnZXRWaXNpYmxlUmVzb3VyY2VzKClcblx0Ly8gR2VuZXJhdGUgd2VlayBkYXlzXG5cdGNvbnN0IHdlZWtEYXlzID0gdXNlTWVtbyhcblx0XHQoKSA9PiBnZXRXZWVrRGF5cyhjdXJyZW50RGF0ZSwgZmlyc3REYXlPZldlZWspLFxuXHRcdFtjdXJyZW50RGF0ZSwgZmlyc3REYXlPZldlZWtdXG5cdClcblxuXHRjb25zdCB2aXNpYmxlRGF5cyA9IHVzZU1lbW8oXG5cdFx0KCkgPT5cblx0XHRcdGhpZGRlbkRheXNcblx0XHRcdFx0PyB3ZWVrRGF5cy5maWx0ZXIoKGRheSkgPT4gIWhpZGRlbkRheXMuaGFzKGRheS5kYXkoKSkpXG5cdFx0XHRcdDogd2Vla0RheXMsXG5cdFx0W3dlZWtEYXlzLCBoaWRkZW5EYXlzXVxuXHQpXG5cblx0Y29uc3QgaG91cnMgPSB1c2VNZW1vKFxuXHRcdCgpID0+XG5cdFx0XHRnZXRWaWV3SG91cnMoe1xuXHRcdFx0XHRyZWZlcmVuY2VEYXRlOiBjdXJyZW50RGF0ZSxcblx0XHRcdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRcdFx0aGlkZU5vbkJ1c2luZXNzSG91cnMsXG5cdFx0XHRcdGFsbERhdGVzOiB3ZWVrRGF5cyxcblx0XHRcdFx0cmVzb3VyY2VCdXNpbmVzc0hvdXJzOiByZXNvdXJjZXNcblx0XHRcdFx0XHQubWFwKChyKSA9PiByLmJ1c2luZXNzSG91cnMpXG5cdFx0XHRcdFx0LmZpbHRlcihCb29sZWFuKSBhcyAoQnVzaW5lc3NIb3VycyB8IEJ1c2luZXNzSG91cnNbXSlbXSxcblx0XHRcdH0pLFxuXHRcdFtjdXJyZW50RGF0ZSwgYnVzaW5lc3NIb3VycywgaGlkZU5vbkJ1c2luZXNzSG91cnMsIHdlZWtEYXlzLCByZXNvdXJjZXNdXG5cdClcblxuXHRjb25zdCBmaXJzdENvbCA9IHVzZU1lbW8oXG5cdFx0KCkgPT4gKHtcblx0XHRcdGlkOiAndGltZS1jb2wnLFxuXHRcdFx0ZGF5czogaG91cnMsXG5cdFx0XHRkYXk6IHVuZGVmaW5lZCxcblx0XHRcdGNsYXNzTmFtZTpcblx0XHRcdFx0J3Nocmluay0wIHctMTYgbWluLXctMTYgbWF4LXctMTYgc3RpY2t5IGxlZnQtMCBiZy1iYWNrZ3JvdW5kIHotMjAnLFxuXHRcdFx0Z3JpZFR5cGU6ICdob3VyJyBhcyBjb25zdCxcblx0XHRcdG5vRXZlbnRzOiB0cnVlLFxuXHRcdFx0cmVuZGVyQ2VsbDogKGRhdGU6IERheWpzKSA9PiAoXG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHAtMiB0ZXh0LXJpZ2h0IHRleHQtWzEwcHhdIHNtOnRleHQteHMgZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXJcIj5cblx0XHRcdFx0XHQ8SG91ckxhYmVsIGRhdGU9e2RhdGV9IC8+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0KSxcblx0XHR9KSxcblx0XHRbaG91cnNdXG5cdClcblxuXHRjb25zdCBjb2x1bW5zID0gdXNlTWVtbyhcblx0XHQoKSA9PlxuXHRcdFx0cmVzb3VyY2VzLmZsYXRNYXAoKHJlc291cmNlKSA9PlxuXHRcdFx0XHR2aXNpYmxlRGF5cy5tYXAoKGRheSkgPT4gKHtcblx0XHRcdFx0XHRpZDogYGRheS1jb2wtJHtkYXkuZm9ybWF0KCdZWVlZLU1NLUREJyl9LXJlc291cmNlLSR7cmVzb3VyY2UuaWR9YCxcblx0XHRcdFx0XHRyZXNvdXJjZUlkOiByZXNvdXJjZS5pZCxcblx0XHRcdFx0XHRyZXNvdXJjZSxcblx0XHRcdFx0XHRkYXksXG5cdFx0XHRcdFx0ZGF5czogZ2V0Vmlld0hvdXJzKHtcblx0XHRcdFx0XHRcdHJlZmVyZW5jZURhdGU6IGRheSxcblx0XHRcdFx0XHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0XHRcdFx0XHRoaWRlTm9uQnVzaW5lc3NIb3Vycyxcblx0XHRcdFx0XHRcdGFsbERhdGVzOiB3ZWVrRGF5cyxcblx0XHRcdFx0XHRcdHJlc291cmNlQnVzaW5lc3NIb3VyczogcmVzb3VyY2VzXG5cdFx0XHRcdFx0XHRcdC5tYXAoKHIpID0+IHIuYnVzaW5lc3NIb3Vycylcblx0XHRcdFx0XHRcdFx0LmZpbHRlcihCb29sZWFuKSBhcyAoQnVzaW5lc3NIb3VycyB8IEJ1c2luZXNzSG91cnNbXSlbXSxcblx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRncmlkVHlwZTogJ2hvdXInIGFzIGNvbnN0LFxuXHRcdFx0XHR9KSlcblx0XHRcdCksXG5cdFx0W3Jlc291cmNlcywgd2Vla0RheXMsIGJ1c2luZXNzSG91cnMsIGhpZGVOb25CdXNpbmVzc0hvdXJzLCB2aXNpYmxlRGF5cy5tYXBdXG5cdClcblxuXHRyZXR1cm4gKFxuXHRcdDxWZXJ0aWNhbEdyaWRcblx0XHRcdGFsbERheVJvdz17XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleFwiPlxuXHRcdFx0XHRcdDxBbGxEYXlDZWxsIC8+XG5cdFx0XHRcdFx0e3Jlc291cmNlcy5tYXAoKHJlc291cmNlKSA9PiAoXG5cdFx0XHRcdFx0XHQ8QWxsRGF5Um93XG5cdFx0XHRcdFx0XHRcdGNsYXNzZXM9e3sgY2VsbDogJ21pbi13LTUwJyB9fVxuXHRcdFx0XHRcdFx0XHRkYXlzPXt2aXNpYmxlRGF5c31cblx0XHRcdFx0XHRcdFx0a2V5PXtgcmVzb3VyY2Utd2Vlay1hbGxkYXktcm93LSR7cmVzb3VyY2UuaWR9YH1cblx0XHRcdFx0XHRcdFx0cmVzb3VyY2U9e3Jlc291cmNlfVxuXHRcdFx0XHRcdFx0XHRzaG93U3BhY2VyPXtmYWxzZX1cblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0KSl9XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0fVxuXHRcdFx0Y2xhc3Nlcz17eyBoZWFkZXI6ICdoLTI0JyB9fVxuXHRcdFx0Y29sdW1ucz17W2ZpcnN0Q29sLCAuLi5jb2x1bW5zXX1cblx0XHRcdGRhdGEtdGVzdGlkPVwicmVzb3VyY2Utd2Vla1wiXG5cdFx0XHRncmlkVHlwZT1cImhvdXJcIlxuXHRcdD5cblx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIGZsZXggZmxleC1jb2xcIj5cblx0XHRcdFx0ey8qIFJlc291cmNlIGhlYWRlciByb3cgKi99XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBoLTEyXCI+XG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJzaHJpbmstMCB3LTE2IGJvcmRlci1yIHotMjAgYmctYmFja2dyb3VuZCBzdGlja3kgbGVmdC0wXCI+XG5cdFx0XHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJweC0yIGgtZnVsbCB3LWZ1bGwgZmxleCBqdXN0aWZ5LWNlbnRlciBpdGVtcy1lbmQgdGV4dC14cyB0ZXh0LW11dGVkLWZvcmVncm91bmRcIj5cblx0XHRcdFx0XHRcdFx0e3QoJ3dlZWsnKX1cblx0XHRcdFx0XHRcdDwvc3Bhbj5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHR7cmVzb3VyY2VzLm1hcCgocmVzb3VyY2UsIGluZGV4KSA9PiB7XG5cdFx0XHRcdFx0XHRjb25zdCBrZXkgPSBgcmVzb3VyY2Utd2Vlay1oZWFkZXItJHtyZXNvdXJjZS5pZH0tZGF5YFxuXG5cdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHQ8QW5pbWF0ZWRTZWN0aW9uXG5cdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdFx0XHRcdCdzaHJpbmstMCBib3JkZXItciBsYXN0OmJvcmRlci1yLTAgYm9yZGVyLWIgZmxleCBpdGVtcy1jZW50ZXIgdGV4dC1jZW50ZXIgZm9udC1tZWRpdW0nXG5cdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0XHRkZWxheT17aW5kZXggKiAwLjA1fVxuXHRcdFx0XHRcdFx0XHRcdGtleT17YCR7a2V5fS1hbmltYXRlZGB9XG5cdFx0XHRcdFx0XHRcdFx0c3R5bGU9e3tcblx0XHRcdFx0XHRcdFx0XHRcdHdpZHRoOiBgY2FsYygke3Zpc2libGVEYXlzLmxlbmd0aH0gKiB2YXIoLS1zcGFjaW5nKSAqIDUwKWAsXG5cdFx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdFx0XHR0cmFuc2l0aW9uS2V5PXtgJHtrZXl9LW1vdGlvbmB9XG5cdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHQ8UmVzb3VyY2VDZWxsXG5cdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJoLWZ1bGwgdy1mdWxsIGZsZXgtMVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXNvdXJjZT17cmVzb3VyY2V9XG5cdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJzdGlja3kgbGVmdC0xLzIgdGV4dC1zbSBmb250LW1lZGl1bSB0cnVuY2F0ZVwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7cmVzb3VyY2UudGl0bGV9XG5cdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0XHQ8L1Jlc291cmNlQ2VsbD5cblx0XHRcdFx0XHRcdFx0PC9BbmltYXRlZFNlY3Rpb24+XG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0fSl9XG5cdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdHsvKiBEYXRlIGhlYWRlciByb3cgKi99XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBoLTEyXCI+XG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJzaHJpbmstMCB3LTE2IGJvcmRlci1yIGJvcmRlci1iIHotMjAgYmctYmFja2dyb3VuZCBzdGlja3kgbGVmdC0wXCI+XG5cdFx0XHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJweC0yIGgtZnVsbCB3LWZ1bGwgZmxleCBqdXN0aWZ5LWNlbnRlciBpdGVtcy1zdGFydCBmb250LW1lZGl1bVwiPlxuXHRcdFx0XHRcdFx0XHR7Y3VycmVudERhdGUud2VlaygpfVxuXHRcdFx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdHtjb2x1bW5zLm1hcCgoY29sLCBpbmRleCkgPT4ge1xuXHRcdFx0XHRcdFx0Y29uc3QgZGF5ID0gY29sLmRheVxuXHRcdFx0XHRcdFx0Y29uc3Qga2V5ID0gYHJlc291cmNlLXdlZWstaGVhZGVyLSR7ZGF5LnRvSVNPU3RyaW5nKCl9LWhvdXItJHtjb2wucmVzb3VyY2VJZH1gXG5cblx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdDxBbmltYXRlZFNlY3Rpb25cblx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0XHRcdFx0J3ctNTAgYm9yZGVyLXIgbGFzdDpib3JkZXItci0wIGJvcmRlci1iIGZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRleHQteHMgc2hyaW5rLTAgYmctYmFja2dyb3VuZCdcblx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPXtgcmVzb3VyY2Utd2Vlay10aW1lLWxhYmVsLSR7ZGF5LmZvcm1hdCgnSEgnKX1gfVxuXHRcdFx0XHRcdFx0XHRcdGRlbGF5PXtpbmRleCAqIDAuMDV9XG5cdFx0XHRcdFx0XHRcdFx0a2V5PXtgJHtrZXl9LWFuaW1hdGVkYH1cblx0XHRcdFx0XHRcdFx0XHR0cmFuc2l0aW9uS2V5PXtgJHtrZXl9LW1vdGlvbmB9XG5cdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQtc21cIj57ZGF5LmZvcm1hdCgnZGRkJyl9PC9kaXY+XG5cdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtbXV0ZWQtZm9yZWdyb3VuZFwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0e2RheS5mb3JtYXQoJ00vRCcpfVxuXHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHQ8L0FuaW1hdGVkU2VjdGlvbj5cblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHR9KX1cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQ8L2Rpdj5cblx0XHQ8L1ZlcnRpY2FsR3JpZD5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB7IFJlc291cmNlV2Vla0hvcml6b250YWwgfSBmcm9tICcuL3Jlc291cmNlLXdlZWstaG9yaXpvbnRhbCdcbmltcG9ydCB7IFJlc291cmNlV2Vla1ZlcnRpY2FsIH0gZnJvbSAnLi9yZXNvdXJjZS13ZWVrLXZlcnRpY2FsJ1xuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VXZWVrVmlldzogUmVhY3QuRkMgPSAoKSA9PiB7XG5cdGNvbnN0IHsgb3JpZW50YXRpb24gfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblxuXHRpZiAob3JpZW50YXRpb24gPT09ICd2ZXJ0aWNhbCcpIHtcblx0XHRyZXR1cm4gPFJlc291cmNlV2Vla1ZlcnRpY2FsIC8+XG5cdH1cblxuXHRyZXR1cm4gPFJlc291cmNlV2Vla0hvcml6b250YWwgLz5cbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBBbmltYXRlZFNlY3Rpb24gfSBmcm9tICdAL2NvbXBvbmVudHMvYW5pbWF0aW9ucy9hbmltYXRlZC1zZWN0aW9uJ1xuaW1wb3J0IHsgQ2FsZW5kYXJEbmRDb250ZXh0IH0gZnJvbSAnQC9jb21wb25lbnRzL2RyYWctYW5kLWRyb3AvY2FsZW5kYXItZG5kLWNvbnRleHQnXG5pbXBvcnQgeyBFdmVudEZvcm1EaWFsb2cgfSBmcm9tICdAL2NvbXBvbmVudHMvZXZlbnQtZm9ybS9ldmVudC1mb3JtLWRpYWxvZydcbmltcG9ydCB7IEhlYWRlciB9IGZyb20gJ0AvY29tcG9uZW50cy9oZWFkZXInXG5pbXBvcnQgeyBSZXNvdXJjZURheVZpZXcgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvZGF5LXZpZXcnXG5pbXBvcnQgeyBSZXNvdXJjZU1vbnRoVmlldyB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy9tb250aC12aWV3J1xuaW1wb3J0IHsgUmVzb3VyY2VXZWVrVmlldyB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy93ZWVrLXZpZXcnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5cbmV4cG9ydCBjb25zdCBSZXNvdXJjZUNhbGVuZGFyQm9keTogUmVhY3QuRkMgPSAoKSA9PiB7XG5cdGNvbnN0IHsgdmlldyB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXG5cdGNvbnN0IHZpZXdNYXA6IFJlY29yZDxzdHJpbmcsIFJlYWN0LlJlYWN0Tm9kZT4gPSB7XG5cdFx0bW9udGg6IDxSZXNvdXJjZU1vbnRoVmlldyBrZXk9XCJtb250aFwiIC8+LFxuXHRcdHdlZWs6IDxSZXNvdXJjZVdlZWtWaWV3IGtleT1cIndlZWtcIiAvPixcblx0XHRkYXk6IDxSZXNvdXJjZURheVZpZXcga2V5PVwiZGF5XCIgLz4sXG5cdH1cblxuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgdy1mdWxsIGgtZnVsbFwiXG5cdFx0XHRkYXRhLXRlc3RpZD1cImlsYW15LXJlc291cmNlLWNhbGVuZGFyXCJcblx0XHQ+XG5cdFx0XHQ8SGVhZGVyIGNsYXNzTmFtZT1cInAtMVwiIC8+XG5cblx0XHRcdHsvKiBDYWxlbmRhciBCb2R5IHdpdGggQW5pbWF0ZWRTZWN0aW9uIGZvciB2aWV3IHRyYW5zaXRpb25zICovfVxuXHRcdFx0PENhbGVuZGFyRG5kQ29udGV4dD5cblx0XHRcdFx0PEFuaW1hdGVkU2VjdGlvblxuXHRcdFx0XHRcdGNsYXNzTmFtZT1cInctZnVsbCBoLVtjYWxjKDEwMCUtMy41cmVtKV0gQGNvbnRhaW5lci9jYWxlbmRhci1ib2R5XCJcblx0XHRcdFx0XHRkaXJlY3Rpb249XCJob3Jpem9udGFsXCJcblx0XHRcdFx0XHR0cmFuc2l0aW9uS2V5PXt2aWV3fVxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJib3JkZXIgaC1mdWxsIHctZnVsbFwiIGRhdGEtdGVzdGlkPVwiY2FsZW5kYXItYm9keVwiPlxuXHRcdFx0XHRcdFx0e3ZpZXdNYXBbdmlld119XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDwvQW5pbWF0ZWRTZWN0aW9uPlxuXHRcdFx0PC9DYWxlbmRhckRuZENvbnRleHQ+XG5cblx0XHRcdHsvKiBFdmVudCBGb3JtIERpYWxvZyAqL31cblx0XHRcdDxFdmVudEZvcm1EaWFsb2cgLz5cblx0XHQ8L2Rpdj5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCwgV2Vla0RheXMgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgeyBSZXNvdXJjZUNhbGVuZGFyUHJvdmlkZXIgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbnRleHRzL3Jlc291cmNlLWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSB7XG5cdElsYW15UmVzb3VyY2VDYWxlbmRhclByb3BFdmVudCxcblx0SWxhbXlSZXNvdXJjZUNhbGVuZGFyUHJvcHMsXG59IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvdHlwZXMnXG5pbXBvcnQge1xuXHREQVlfTUFYX0VWRU5UU19ERUZBVUxULFxuXHRHQVBfQkVUV0VFTl9FTEVNRU5UUyxcblx0V0VFS19EQVlTX05VTUJFUl9NQVAsXG59IGZyb20gJ0AvbGliL2NvbnN0YW50cydcbmltcG9ydCB7IG5vcm1hbGl6ZUV2ZW50cywgc2FmZURhdGUgfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IFJlc291cmNlQ2FsZW5kYXJCb2R5IH0gZnJvbSAnLi9yZXNvdXJjZS1jYWxlbmRhci1ib2R5J1xuXG5jb25zdCB0b0hpZGRlbkRheXNTZXQgPSAoaGlkZGVuRGF5cz86IFdlZWtEYXlzW10pOiBTZXQ8bnVtYmVyPiB8IHVuZGVmaW5lZCA9PiB7XG5cdGlmICghaGlkZGVuRGF5cyB8fCBoaWRkZW5EYXlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHVuZGVmaW5lZFxuXHRyZXR1cm4gbmV3IFNldChoaWRkZW5EYXlzLm1hcCgoZGF5KSA9PiBXRUVLX0RBWVNfTlVNQkVSX01BUFtkYXldKSlcbn1cblxuZXhwb3J0IGNvbnN0IElsYW15UmVzb3VyY2VDYWxlbmRhcjogUmVhY3QuRkM8SWxhbXlSZXNvdXJjZUNhbGVuZGFyUHJvcHM+ID0gKHtcblx0ZXZlbnRzID0gW10sXG5cdHJlc291cmNlcyA9IFtdLFxuXHRmaXJzdERheU9mV2VlayA9ICdzdW5kYXknLFxuXHRpbml0aWFsVmlldyA9ICdtb250aCcsXG5cdGluaXRpYWxEYXRlLFxuXHRkaXNhYmxlRHJhZ0FuZERyb3AgPSBmYWxzZSxcblx0ZGF5TWF4RXZlbnRzID0gREFZX01BWF9FVkVOVFNfREVGQVVMVCxcblx0dGltZUZvcm1hdCA9ICcxMi1ob3VyJyxcblx0ZXZlbnRTcGFjaW5nID0gR0FQX0JFVFdFRU5fRUxFTUVOVFMsXG5cdGhpZGRlbkRheXMsXG5cdC4uLnByb3BzXG59KSA9PiB7XG5cdHJldHVybiAoXG5cdFx0PFJlc291cmNlQ2FsZW5kYXJQcm92aWRlclxuXHRcdFx0ZGF5TWF4RXZlbnRzPXtkYXlNYXhFdmVudHN9XG5cdFx0XHRkaXNhYmxlRHJhZ0FuZERyb3A9e2Rpc2FibGVEcmFnQW5kRHJvcH1cblx0XHRcdGV2ZW50U3BhY2luZz17ZXZlbnRTcGFjaW5nfVxuXHRcdFx0ZXZlbnRzPXtub3JtYWxpemVFdmVudHM8SWxhbXlSZXNvdXJjZUNhbGVuZGFyUHJvcEV2ZW50LCBDYWxlbmRhckV2ZW50Pihcblx0XHRcdFx0ZXZlbnRzXG5cdFx0XHQpfVxuXHRcdFx0Zmlyc3REYXlPZldlZWs9e1dFRUtfREFZU19OVU1CRVJfTUFQW2ZpcnN0RGF5T2ZXZWVrXX1cblx0XHRcdGhpZGRlbkRheXM9e3RvSGlkZGVuRGF5c1NldChoaWRkZW5EYXlzKX1cblx0XHRcdGluaXRpYWxEYXRlPXtzYWZlRGF0ZShpbml0aWFsRGF0ZSl9XG5cdFx0XHRpbml0aWFsVmlldz17aW5pdGlhbFZpZXd9XG5cdFx0XHRyZXNvdXJjZXM9e3Jlc291cmNlc31cblx0XHRcdHRpbWVGb3JtYXQ9e3RpbWVGb3JtYXR9XG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0PlxuXHRcdFx0PFJlc291cmNlQ2FsZW5kYXJCb2R5IC8+XG5cdFx0PC9SZXNvdXJjZUNhbGVuZGFyUHJvdmlkZXI+XG5cdClcbn1cbiIKICBdLAogICJtYXBwaW5ncyI6ICJBQUVBLGdCQUFTLGVDRlQsMEJBQ0MsYUFFQSxzQkNGRCxlQUFTLGNBQ1Qsa0JBQVMsd0JDRFQsc0JBQ0EsMENBQ0EsOENBQ0Es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QUcsT0FDNUMsT0FBTyxJQUFJLElBQUksRUFBVyxJQUFJLENBQUMsSUFBUSxHQUFxQixFQUFJLENBQUMsR0FHckQsR0FBOEQsRUFDMUUsU0FBUyxDQUFDLEVBQ1YsWUFBWSxDQUFDLEVBQ2IsaUJBQWlCLFNBQ2pCLGNBQWMsUUFDZCxjQUNBLHFCQUFxQixHQUNyQixlQUFlLEdBQ2YsYUFBYSxVQUNiLGVBQWUsR0FDZixnQkFDRyxLQUNFLENBQ0wsT0FDQyxHQWdCRSxHQWhCRixDQUNDLGFBQWMsRUFDZCxtQkFBb0IsRUFDcEIsYUFBYyxFQUNkLE9BQVEsR0FDUCxDQUNELEVBQ0EsZUFBZ0IsR0FBcUIsR0FDckMsV0FBWSxHQUFnQixDQUFVLEVBQ3RDLFlBQWEsR0FBUyxDQUFXLEVBQ2pDLFlBQWEsRUFDYixVQUFXLEVBQ1gsV0FBWSxLQUNSLEVBYkwsU0FlQyxHQUFDLEdBQUQsRUFBc0IsRUFDckIiLAogICJkZWJ1Z0lkIjogIjEyNTU1QTJEQjA5QzMzMTc2NDc1NkUyMTY0NzU2RTIxIiwKICAibmFtZXMiOiBbXQp9
|