{"version":3,"sources":["webpack:///./node_modules/@progress/kendo-ui/js/kendo.scheduler.view.js"],"names":["module","exports","modules","installedModules","__webpack_require__","moduleId","id","loaded","call","m","c","p","0","3","Error","1050","1407","__WEBPACK_AMD_DEFINE_FACTORY__","__WEBPACK_AMD_DEFINE_ARRAY__","__WEBPACK_AMD_DEFINE_RESULT__","f","define","apply","undefined","kendo","ui","scheduler","$","window","getDate","date","Widget","outerHeight","_outerHeight","keys","NS","INVERSE_COLOR_CLASS","MIN_HORIZONTAL_SCROLL_SIZE","math","Math","levels","values","key","result","collect","depth","level","idx","length","push","table","tableRows","className","trim","join","allDayTable","timesHeader","columnLevelCount","allDaySlot","rowCount","text","content","scrollbarWidth","HINT","ResourceView","Class","extend","init","index","isRtl","enforceAllDaySlot","this","_index","_timeSlotCollections","_daySlotCollections","_isRtl","_enforceAllDaySlot","addTimeSlotCollection","startDate","endDate","_addCollection","addDaySlotCollection","collections","collection","SlotCollection","timeSlotCollectionCount","daySlotCollectionCount","daySlotByPosition","x","y","byDate","_slotByPosition","timeSlotByPosition","collectionIndex","slotIndex","count","nextSlot","slot","at","width","offsetWidth","height","offsetHeight","horizontalEnd","offsetLeft","verticalEnd","offsetTop","refresh","timeSlotRanges","startTime","endTime","firstIndex","lastIndex","start","_startSlot","inRange","end","_endSlot","MS_PER_DAY","first","last","_continuousRange","TimeSlotRange","daySlotRanges","isAllDay","DaySlotRange","range","startSlot","endSlot","startIndex","endIndex","ranges","head","tail","slotRanges","event","isDay","_startTime","toUtcTime","_endTime","isMultiDay","_startCollection","startInRange","_endCollection","endInRange","_getCollections","continuousSlot","reverse","pad","isDaySlot","firstSlot","lastSlot","upSlot","keepCollection","groupByDateVertically","that","moveToDaySlot","isFirstCell","_verticalSlot","downSlot","moveToTimeSlot","leftSlot","_horizontalSlot","rightSlot","step","swapCollection","_collection","multiday","time","_start","slotByStartDate","slotByEndDate","getSlotCollection","getTimeSlotCollection","getDaySlotCollection","SlotRange","options","innerHeight","events","addEvent","outerRect","snap","_rect","property","top","bottom","left","right","support","element","startOffset","startSlotDuration","endOffset","endSlotDuration","round","innerRect","innerWidth","groupIndex","_slots","_events","_end","_groupIndex","_collectionIndex","allday","addTimeSlot","isHorizontal","TimeSlot","addDaySlot","eventCount","DaySlot","Slot","clientWidth","clientHeight","timezone","toLocalDate","fn","arguments","offsetX","rtl","offset","difference","duration","floor","children","firstChild","firstChildHeight","firstChildTop","Date","scrollbar","collidingEvents","elements","overlaps","rangeIndex","eventsForSlot","eventElement","slotStart","slotEnd","createColumns","eventElements","_createColumns","createRows","SchedulerView","_normalizeOptions","_scrollbar","_resizeHint","_moveHint","_cellId","guid","_resourcesForGroups","_selectedSlots","visibleEndDate","setMilliseconds","workDayStart","workDayEnd","_isMobile","mobile","mobileOS","_addResourceView","resourceView","groups","dateForTitle","format","selectedDateFormat","shortDateForTitle","selectedShortDateFormat","mobileDateForTitle","selectedMobileDateFormat","_changeGroup","selection","previous","method","_isGroupedByDate","_changeDate","group","_changeGroupContinuously","_changeViewPeriod","_isInRange","newStart","newEnd","min","max","_horizontalSlots","multiple","horizontalRange","isVertical","_isVerticallyGrouped","_normalizeHorizontalSelection","tempSlot","_getNextHorizontalRange","_continuousSlot","_verticalSlots","verticalRange","_normalizeVerticalSelection","_getNextVerticalRange","_footer","html","messages","today","footer","appendTo","on","e","preventDefault","action","currentDate","timezoneOffset","convert","getTimezoneOffset","trigger","view","name","constrainSelection","move","shift","handled","verticalByDate","slots","DOWN","UP","_updateDirection","LEFT","RIGHT","backward","moveToEventInGroup","selectedEvents","prev","_continuousEvents","lastSelected","i","uid","inArray","moveToEvent","allEvents","_getAllEvents","uniqueAllEvents","_getUniqueEvents","sortedEvents","_getSortedEvents","eventIndex","_getNextEventIndexBySlot","_getStartIdx","_getSelectedSlot","current","candidate","_current","has","_scrollTo","select","clearSelection","_selectEvents","_selectSlots","tempIndex","slotStartDate","eventStartDate","getTime","selectedEventIndex","each","concat","exists","j","sort","second","firstStartDate","secondStartDate","setAttribute","addSelectedState","groupEvent","found","groupEvents","add","indexOf","addClass","attr","addDays","_resourceValue","resource","item","valuePrimitive","getter","dataValueField","_setResourceValue","groupLevelMember","setter","value","field","_resourceBySlot","resources","groupedResources","passedChildren","numberOfChildren","resourceIndex","groupOptions","nestedMember","orientation","rowLevels","columnLevels","dateGroupCompensation","groupLevel","_createResizeHint","css","_removeResizeHint","remove","_removeMoveHint","filter","container","elementOffset","elementOffsetDir","containerScroll","scrollTop","containerOffsetDir","bottomDistance","_inverseEventColor","eventColor","eventColorIsDark","Color","isDark","eventBackground","eventBackgroundIsDark","_eventTmpl","template","wrapper","settings","Template","templateSettings","paramName","type","state","storage","tmpl","proxy","eventResources","data","dataSource","eventResource","dataIndex","get","resourceColor","dataColorField","title","dataTextField","color","createLayout","layout","allDayIndex","rows","allDay","splice","_isVirtualized","_trimRowLevels","find","append","_topSection","_bottomSection","_updateDomRowLevels","_groupOrientation","_outerWidth","_scroller","virtual","levelMarker","lastGroup","cachedRowLevels","_hasContentToRender","stopAtLevel","parentLevel","parentValue","hasParent","rowLevelIndex","stop","createNextLayout","trimmedRowLevels","clone","_height","_times","cell","rowSpan","parseInt","_virtualContent","render","_cachedEvents","_tryRenderContent","bufferHeight","groupCells","times","_rowLevelIndices","toArray","map","refreshLayout","toolbar","headerHeight","paddingDirection","eq","datesHeader","datesHeaderRows","isSchedulerHeightSet","el","initialHeight","newHeight","style","contentDiv","kineticScrollNeeded","timesTable","removeClass","thElm","_datesHeader","dateGroup","closest","wrap","parent","scrollLeft","touchScroller","avoidScrolling","target","movable","_touchScroller","scrollElement","bind","sender","groupIdx","groupLength","_createDateLayout","dates","inner","createDateLayoutConfiguration","_createColumnsLayout","createLayoutConfiguration","_createRowsLayout","selectionByElement","removeAttr","destroy","calendarInfo","getCulture","calendars","standard","prevGroupSlot","nextGroupSlot","_eventOptionsForMove","_updateEventForResize","_updateEventForSelection","_innerElements","countInner","innerCollection","innerSpan","innerEls","isMobile","rowIndex","Array","split","rowHeaderRows","rowsBefore","currentRow","rowspan","columnIndex","dateTableRows","columnLevelIndex","th","column","colspan","allDayTableRows","lastLevel","td","cellContent","re","processor","parts","channels","formats","resolveColor","process","exec","r","g","b","normalizeByte","columns","eventRange","columnLength","endOverlaps","configuration","obj","minorTicks","itemParentValue","dataParentValueField","htmlEncode","slice","groupEqFilter","isArray","ObservableArray","prototype","charAt","substr","replace","toLowerCase","namedColors","isNaN","percBrightness","sqrt","brightnessValue","aqua","azure","beige","black","blue","brown","coral","cyan","darkblue","darkcyan","darkgray","darkgreen","darkorange","darkred","dimgray","fuchsia","gold","goldenrod","gray","green","greenyellow","indigo","ivory","khaki","lightblue","lightgrey","lightgreen","lightpink","lightyellow","lime","limegreen","linen","magenta","maroon","mediumblue","navy","olive","orange","orangered","orchid","pink","plum","purple","red","royalblue","salmon","silver","skyblue","slateblue","slategray","snow","steelblue","tan","teal","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","selectedStateRegExp","jQuery"],"mappings":"2GAAAA,EAAOC,QACE,SAAUC,GAET,IAAIC,EAAmB,GAGvB,SAASC,EAAoBC,GAG5B,GAAGF,EAAiBE,GACnB,OAAOF,EAAiBE,GAAUJ,QAGnC,IAAID,EAASG,EAAiBE,GAAY,CACzCJ,QAAS,GACTK,GAAID,EACJE,QAAQ,GAUT,OANAL,EAAQG,GAAUG,KAAKR,EAAOC,QAASD,EAAQA,EAAOC,QAASG,GAG/DJ,EAAOO,QAAS,EAGTP,EAAOC,QAcf,OATAG,EAAoBK,EAAIP,EAGxBE,EAAoBM,EAAIP,EAGxBC,EAAoBO,EAAI,GAGjBP,EAAoB,GAvC5B,CA0CC,CAEJQ,EACA,SAAUZ,EAAQC,EAASG,GAEhCJ,EAAOC,QAAUG,EAAoB,OAKhCS,EACA,SAAUb,EAAQC,GAEvBD,EAAOC,QAAU,WAAa,MAAM,IAAIa,MAAM,oCAKzCC,KACA,SAAUf,EAAQC,GAEvBD,EAAOC,QAAU,EAAQ,SAIpBe,KACA,SAAUhB,EAAQC,EAASG,GAEhC,IAAIa,EAAgCC,EAA8BC,GAA8B,SAAUC,EAAGC,GACvGH,EAA+B,CAAEd,EAAoB,OAASa,EAAiC,EAAKE,EAA2E,oBAAnCF,EAAiDA,EAA+BK,MAAMrB,EAASiB,GAAiCD,OAAmEM,IAAlCJ,IAAgDnB,EAAOC,QAAUkB,IADpR,EAE7F,WAoyFH,OA1xFIK,MAAMC,GAAGC,UAAY,GAEzB,SAAUC,GACN,IAAIH,EAAQI,OAAOJ,MACfC,EAAKD,EAAMC,GACXI,EAAUL,EAAMM,KAAKD,QACrBE,EAASN,EAAGM,OACZC,EAAcR,EAAMS,aACpBC,EAAOV,EAAMU,KACbC,EAAK,sBACLC,EAAsB,kBACtBC,EAA6B,KAC7BC,EAAOC,KAEX,SAASC,EAAOC,EAAQC,GACpB,IAAIC,EAAS,GAEb,SAASC,EAAQC,EAAOJ,GAGpB,GAFAA,EAASA,EAAOC,GAEZD,EAGA,IAFA,IAAIK,EAAQH,EAAOE,GAASF,EAAOE,IAAU,GAEpCE,EAAM,EAAGA,EAAMN,EAAOO,OAAQD,IACnCD,EAAMG,KAAKR,EAAOM,IAClBH,EAAQC,EAAQ,EAAGJ,EAAOM,IAOtC,OAFAH,EAAQ,EAAGH,GAEJE,EAGX,SAASO,EAAMC,EAAWC,GACtB,OAAKD,EAAUH,OAIR,qCAAuCxB,EAAM6B,KAAK,sBAAwBD,GAAa,KAAvF,SAEKD,EAAUG,KAAK,aAFpB,gBAHI,GAUf,SAASC,EAAYJ,EAAWC,GAC5B,OAAKD,EAAUH,OAIR,kCAAoCE,EAAMC,EAAWC,GAAa,SAH9D,GAMf,SAASI,EAAYC,EAAkBC,EAAYC,GAC/C,IAAIR,EAAY,GAEhB,GAAIQ,EAAW,EACX,IAAK,IAAIZ,EAAM,EAAGA,EAAMU,EAAkBV,IACtCI,EAAUF,KAAK,oBAQvB,OAJIS,GACAP,EAAUF,KAAK,yCAA2CS,EAAWE,KAAO,SAG5ED,EAAW,EACLhC,IAGHA,EAAE,kCAAoCuB,EAAMC,GAAa,UAGpE,SAASU,IACL,OAAOlC,EACH,wGAKR,IA+6BImC,EA/6BAC,EAAO,0LASPC,EAAexC,EAAMyC,MAAMC,OAAO,CAClCC,KAAM,SAASC,EAAOC,EAAOC,GACzBC,KAAKC,OAASJ,EACdG,KAAKE,qBAAuB,GAC5BF,KAAKG,oBAAsB,GAC3BH,KAAKI,OAASN,EACdE,KAAKK,mBAAqBN,GAG9BO,sBAAuB,SAASC,EAAWC,GACvC,OAAOR,KAAKS,eAAeF,EAAWC,EAASR,KAAKE,uBAGxDQ,qBAAsB,SAASH,EAAWC,GACtC,OAAOR,KAAKS,eAAeF,EAAWC,EAASR,KAAKG,sBAGxDM,eAAgB,SAASF,EAAWC,EAASG,GACzC,IAAIC,EAAa,IAAIC,EAAeN,EAAWC,EAASR,KAAKC,OAAQU,EAAYlC,QAIjF,OAFAkC,EAAYjC,KAAKkC,GAEVA,GAGXE,wBAAyB,WACrB,OAAOd,KAAKE,qBAAqBzB,QAGrCsC,uBAAwB,WACpB,OAAOf,KAAKG,oBAAoB1B,QAGpCuC,kBAAmB,SAASC,EAAGC,EAAGC,GAC9B,OAAOnB,KAAKoB,gBAAgBH,EAAGC,EAAGlB,KAAKG,oBAAqBgB,IAGhEE,mBAAoB,SAASJ,EAAGC,EAAGC,GAC/B,OAAOnB,KAAKoB,gBAAgBH,EAAGC,EAAGlB,KAAKE,qBAAsBiB,IAGjEC,gBAAiB,SAASH,EAAGC,EAAGP,EAAaQ,GAC1C,IAAK,IAAIG,EAAkB,EAAGA,EAAkBX,EAAYlC,OAAQ6C,IAGhE,IAFA,IAAIV,EAAaD,EAAYW,GAEpBC,EAAY,EAAGA,EAAYX,EAAWY,QAASD,IAAa,CACjE,IAGIE,EAHAC,EAAOd,EAAWe,GAAGJ,GACrBK,EAAQF,EAAKG,YACbC,EAASJ,EAAKK,aAGdC,EAAgBN,EAAKO,WAAaL,EAClCM,EAAeR,EAAKS,UAAYL,EAkBpC,GAhBKX,IACAM,EAAYb,EAAWe,GAAGJ,EAAY,IAGvCE,IACIA,EAASQ,YAAcP,EAAKO,WAExBD,EADAhC,KAAKI,OACWsB,EAAKO,YAAcP,EAAKO,WAAaR,EAASQ,YAE9CR,EAASQ,WAG7BC,EAAcT,EAASU,WAI3BlB,GAAKS,EAAKO,YAAchB,EAAIe,GAC5Bd,GAAKQ,EAAKS,WAAajB,EAAIgB,EAC3B,OAAOR,IAMtBU,QAAS,WACL,IAAId,EAEJ,IAAKA,EAAkB,EAAGA,EAAkBtB,KAAKG,oBAAoB1B,OAAQ6C,IACzEtB,KAAKG,oBAAoBmB,GAAiBc,UAG9C,IAAKd,EAAkB,EAAGA,EAAkBtB,KAAKE,qBAAqBzB,OAAQ6C,IAC1EtB,KAAKE,qBAAqBoB,GAAiBc,WAInDC,eAAgB,SAASC,EAAWC,GAChC,IAEIC,EAAYC,EAFZ9B,EAAcX,KAAKE,qBACnBwC,EAAQ1C,KAAK2C,WAAWL,EAAW3B,IAGlC+B,EAAME,SAAWN,GAAaI,EAAMhB,KAAKmB,MAC1CL,EAAaE,EAAMhB,KAAKJ,gBAAkB,EAC1CoB,EAAQ,MAGZ,IAAIG,EAAMH,EAgBV,GAdIJ,EAAYC,IACZM,EAAM7C,KAAK8C,SAASP,EAAS5B,IAG7BkC,IAAQA,EAAID,SAAWL,GAAWM,EAAInB,KAAKgB,QAC3CD,EAAYI,EAAInB,KAAKJ,gBAElBiB,IAAYM,EAAInB,KAAKgB,QAAWA,GAASD,EAAYC,EAAMhB,KAAKJ,iBAAqBmB,EAAYD,KAChGC,GAAa,GAGjBI,EAAM,MAGI,OAAVH,GAA0B,OAARG,EAAc,CAChC,GAAGN,EAAUD,EAAYrF,EAAMM,KAAKwF,WAChC,MAAO,GAEPL,EAAQ,CACJE,SAAS,EACTlB,KAAMf,EAAY6B,GAAYQ,SAGlCH,EAAM,CACFD,SAAS,EACTlB,KAAMf,EAAY8B,GAAWQ,QAKzC,GAAc,OAAVP,EAAgB,CAChB,GAAIG,EAAInB,KAAKmB,KAAOP,EAChB,MAAO,GAGXI,EAAQ,CACJE,SAAS,EACTlB,MAAOf,EAAY6B,IAAe7B,EAAYkC,EAAInB,KAAKJ,kBAAkB0B,SAIjF,GAAY,OAARH,EAAc,CACd,GAAIH,EAAMhB,KAAKgB,OAASH,EACpB,MAAO,GAGXM,EAAM,CACFD,SAAS,EACTlB,MAAOf,EAAY8B,IAAc9B,EAAY+B,EAAMhB,KAAKJ,kBAAkB2B,QAIlF,OAAOjD,KAAKkD,iBAAiBC,EAAexC,EAAa+B,EAAOG,IAGpEO,cAAe,SAASd,EAAWC,EAASc,GACxC,IAAI1C,EAAcX,KAAKG,oBAEnBuC,EAAQ1C,KAAK2C,WAAWL,EAAW3B,EAAa0C,IAE/CX,EAAME,SAAWN,GAAaI,EAAMhB,KAAKmB,MAC1CH,EAAQ,MAGZ,IAAIG,EAAMH,EAUV,GARIJ,EAAYC,IACZM,EAAM7C,KAAK8C,SAASP,EAAS5B,EAAa0C,IAG1CR,IAAQA,EAAID,SAAWL,GAAWM,EAAInB,KAAKgB,QAC3CG,EAAM,MAGI,OAAVH,GAA0B,OAARG,EAClB,MAAO,GAGX,GAAc,OAAVH,EAAgB,CAChB,GAAIG,EAAInB,KAAKmB,KAAOP,EAChB,MAAO,GAGX,GACIA,GAAarF,EAAMM,KAAKwF,WACxBL,EAAQ1C,KAAK2C,WAAWL,EAAW3B,EAAa0C,UAC1CX,EAAME,SAAWN,GAAaI,EAAMhB,KAAKmB,KAGvD,GAAY,OAARA,EAAc,CACd,GAAIH,EAAMhB,KAAKgB,OAASH,EACpB,MAAO,GAGX,GACIA,GAAWtF,EAAMM,KAAKwF,WACtBF,EAAM7C,KAAK8C,SAASP,EAAS5B,EAAa0C,UACpCR,EAAID,SAAWL,GAAWM,EAAInB,KAAKgB,OAGjD,OAAO1C,KAAKkD,iBAAiBI,EAAc3C,EAAa+B,EAAOG,IAGnEK,iBAAkB,SAASK,EAAO5C,EAAa+B,EAAOG,GASlD,IARA,IAAIW,EAAYd,EAAMhB,KAClB+B,EAAUZ,EAAInB,KAEdgC,EAAaF,EAAUlC,gBACvBqC,EAAWF,EAAQnC,gBAEnBsC,EAAS,GAEJtC,EAAkBoC,EAAYpC,GAAmBqC,EAAUrC,IAAmB,CACnF,IAAIV,EAAaD,EAAYW,GAEzB0B,EAAQpC,EAAWoC,QACnBC,EAAOrC,EAAWqC,OAClBY,GAAO,EACPC,GAAO,EAEPxC,GAAmBoC,IACnBI,GAAQpB,EAAME,SAGdtB,GAAmBqC,IACnBE,GAAQhB,EAAID,SAGZI,EAAMN,MAAQc,EAAUd,QACxBM,EAAQQ,GAGRP,EAAKP,MAAQe,EAAQf,QACrBO,EAAOQ,GAGPC,EAAaC,IACTrC,GAAmBoC,EACnBG,GAAO,EACAvC,GAAmBqC,EAC1BG,GAAO,EAEPD,EAAOC,GAAO,GAItBF,EAAOlF,KAAK,IAAI6E,EAAM,CAClBb,MAAOM,EACPH,IAAKI,EACLrC,WAAYA,EACZiD,KAAMA,EACNC,KAAMA,KAId,OAAOF,GAGXG,WAAY,SAASC,EAAOC,GACxB,IAAI3B,EAAY0B,EAAME,YAAcjH,EAAMM,KAAK4G,UAAUH,EAAMtB,OAC3DH,EAAUyB,EAAMI,UAAYnH,EAAMM,KAAK4G,UAAUH,EAAMnB,KAU3D,YARc7F,IAAViH,IAEIA,EADDjE,KAAKK,mBACI2D,EAAMK,aAENL,EAAMX,UAIlBY,EACOjE,KAAKoD,cAAcd,EAAWC,EAASyB,EAAMX,UAGjDrD,KAAKqC,eAAeC,EAAWC,IAG1CqB,OAAQ,SAAStB,EAAWC,EAAS0B,EAAOZ,GASxC,MARwB,iBAAbf,IACPA,EAAYrF,EAAMM,KAAK4G,UAAU7B,IAGf,iBAAXC,IACPA,EAAUtF,EAAMM,KAAK4G,UAAU5B,IAG/B0B,EACOjE,KAAKoD,cAAcd,EAAWC,EAASc,GAG3CrD,KAAKqC,eAAeC,EAAWC,IAG1C+B,iBAAkB,SAAS/G,EAAMoD,GAC7B,IAAK,IAAIW,EAAkB,EAAGA,EAAkBX,EAAYlC,OAAQ6C,IAAmB,CACnF,IAAIV,EAAaD,EAAYW,GAE7B,GAAIV,EAAW2D,aAAahH,GACxB,OAAOqD,EAIf,OAAO,MAGX4D,eAAgB,SAASjH,EAAMoD,EAAa0C,GACxC,IAAK,IAAI/B,EAAkB,EAAGA,EAAkBX,EAAYlC,OAAQ6C,IAAmB,CACnF,IAAIV,EAAaD,EAAYW,GAE7B,GAAIV,EAAW6D,WAAWlH,EAAM8F,GAC5B,OAAOzC,EAIf,OAAO,MAGX8D,gBAAiB,SAAST,GACtB,OAAOA,EAAQjE,KAAKG,oBAAsBH,KAAKE,sBAGnDyE,eAAgB,SAASjD,EAAMkD,GAC3B,IAAIC,EAAMD,GAAW,EAAI,EACrBjE,EAAcX,KAAK0E,gBAAgBhD,EAAKoD,WACxClE,EAAaD,EAAYe,EAAKJ,gBAAkBuD,GAEpD,OAAOjE,EAAaA,EAAWgE,EAAU,OAAS,gBAAa5H,GAGnE+H,UAAW,WACP,IAAIpE,EAAcX,KAAK0E,gBAAgB1E,KAAKe,0BAE5C,OAAOJ,EAAY,GAAGqC,SAG1BgC,SAAU,WACN,IAAIrE,EAAcX,KAAK0E,gBAAgB1E,KAAKe,0BAE5C,OAAOJ,EAAYA,EAAYlC,OAAS,GAAGwE,QAG/CgC,OAAQ,SAASvD,EAAMwD,EAAgBC,GACnC,IAAIC,EAAOpF,KACPqF,EAAgB,SAASP,EAAWxD,EAAiBzB,GACrD,IAAIyF,EAAwB,IAAVzF,EAElB,IAAKqF,IAAmBJ,GAAaQ,GAAeF,EAAKrE,yBACrD,OAAOqE,EAAKjF,oBAAoB,GAAGwB,GAAGL,IAQ9C,OAJKtB,KAAKc,4BACNoE,GAAiB,GAGdlF,KAAKuF,cAAc7D,GAAO,EAAG2D,EAAeF,IAGvDK,SAAU,SAAS9D,EAAMwD,EAAgBC,GACrC,IAAIC,EAAOpF,KACPyF,EAAiB,SAASX,EAAWxD,EAAiBzB,GACtD,IAAKqF,GAAkBJ,GAAaM,EAAKtE,0BACrC,OAAOsE,EAAKlF,qBAAqBL,GAAO8B,GAAG,IAQnD,OAJK3B,KAAKc,4BACNoE,GAAiB,GAGdlF,KAAKuF,cAAc7D,EAAM,EAAG+D,EAAgBN,IAGvDO,SAAU,SAAShE,EAAMyD,GACrB,OAAOnF,KAAK2F,gBAAgBjE,GAAO,EAAGyD,IAG1CS,UAAW,SAASlE,EAAMyD,GACtB,OAAOnF,KAAK2F,gBAAgBjE,EAAM,EAAGyD,IAGzCQ,gBAAiB,SAASjE,EAAMmE,EAAMV,GAClC,IAAItF,EAAQ6B,EAAK7B,MACbiF,EAAYpD,EAAKoD,UACjBxD,EAAkBI,EAAKJ,gBACvBX,EAAcX,KAAK0E,gBAAgBI,GAEvCA,GAAYK,GAAgCL,EAExCA,EACAjF,GAASgG,EAETvE,GAAmBuE,EAGvB,IAAIjF,EAAaD,EAAYW,GAE7B,OAAOV,EAAaA,EAAWe,GAAG9B,QAAS7C,GAG/CuI,cAAe,SAAS7D,EAAMmE,EAAMC,EAAgBX,GAChD,IAAItF,EAAQ6B,EAAK7B,MACbiF,EAAYpD,EAAKoD,UACjBxD,EAAkBI,EAAKJ,gBACvBX,EAAcX,KAAK0E,gBAAgBI,GAGvC,GADApD,EAAOoE,EAAehB,EAAWxD,EAAiBzB,GAC9C6B,EACA,OAAOA,EAGXoD,GAAYK,GAAgCL,EAExCA,EACAxD,GAAmBuE,EAEnBhG,GAASgG,EAGb,IAAIjF,EAAaD,EAAYW,GAE7B,OAAOV,EAAaA,EAAWe,GAAG9B,QAAS7C,GAG/C+I,YAAa,SAASlG,EAAOmG,GACzB,IAAIrF,EAAcqF,EAAUhG,KAAKG,oBAAsBH,KAAKE,qBAE5D,OAAOS,EAAYd,IAGvB8C,WAAY,SAASsD,EAAMtF,EAAa0C,GACpC,IAAIzC,EAAaZ,KAAKsE,iBAAiB2B,EAAMtF,GACzCiC,GAAU,EACV/C,EAAQ,EAEZ,IAAKe,EAAY,CACbA,EAAaD,EAAYd,GAEzB,MAAMA,EAAQc,EAAYlC,OAAS,GAAKmC,EAAWsF,OAASD,EACxDpG,IACAe,EAAaD,EAAYd,GAG7B+C,GAAU,EAGd,IAAIlB,EAAOd,EAAWuF,gBAAgBF,EAAM5C,GAO5C,OALK3B,IACDA,EAAOd,EAAWoC,QAClBJ,GAAU,GAGP,CACHlB,KAAMA,EACNkB,QAASA,IAIjBE,SAAU,SAASmD,EAAMtF,EAAa0C,GAClC,IAAIzC,EAAaZ,KAAKwE,eAAeyB,EAAMtF,EAAa0C,GACpDT,GAAU,EACV/C,EAAQc,EAAYlC,OAAS,EAEjC,IAAKmC,EAAY,CACbA,EAAaD,EAAYd,GAEzB,MAAMA,EAAQ,GAAKe,EAAWsF,OAASD,EACnCpG,IACAe,EAAaD,EAAYd,GAG7B+C,GAAU,EAGd,IAAIlB,EAAOd,EAAWwF,cAAcH,EAAM5C,GAY1C,OAVK3B,IAEGA,EADDuE,GAAQrF,EAAWoC,QAAQN,MACnB9B,EAAWoC,QAEXpC,EAAWqC,OAGtBL,GAAU,GAGP,CACHlB,KAAMA,EACNkB,QAASA,IAIjByD,kBAAmB,SAASxG,EAAOoE,GAC/B,OAAOjE,KAAKiE,EAAQ,uBAAyB,yBAAyBpE,IAG1EyG,sBAAuB,SAASzG,GAC5B,OAAOG,KAAKE,qBAAqBL,IAGrC0G,qBAAsB,SAAS1G,GAC3B,OAAOG,KAAKG,oBAAoBN,MAIpC2G,EAAYvJ,EAAMyC,MAAMC,OAAO,CAC/BC,KAAM,SAAS6G,GACXrJ,EAAEuC,OAAOK,KAAMyG,IAGnBC,YAAa,WAST,IARA,IAAI9F,EAAaZ,KAAKY,WAElB8C,EAAa1D,KAAK0C,MAAM7C,MAExB8D,EAAW3D,KAAK6C,IAAIhD,MAEpBzB,EAAS,EAEJmD,EAAYmC,EAAYnC,GAAaoC,EAAUpC,IACrDnD,GAAUwC,EAAWe,GAAGJ,GAAWQ,aAGtC,OAAO3D,GAGXuI,OAAQ,WACJ,OAAO3G,KAAKY,WAAW+F,UAG3BC,SAAU,SAAS5C,GACfhE,KAAK2G,SAASjI,KAAKsF,IAGvBR,UAAW,WACP,OAAIxD,KAAK0C,MAAMT,WAAajC,KAAK6C,IAAIZ,WAC1BjC,KAAK6C,IAET7C,KAAK0C,OAGhBe,QAAS,WACL,OAAIzD,KAAK0C,MAAMT,WAAajC,KAAK6C,IAAIZ,WAC1BjC,KAAK0C,MAET1C,KAAK6C,OAIhBM,EAAgBqD,EAAU7G,OAAO,CACjC+G,YAAa,WAST,IARA,IAAI9F,EAAaZ,KAAKY,WAElB8C,EAAa1D,KAAK0C,MAAM7C,MAExB8D,EAAW3D,KAAK6C,IAAIhD,MAEpBzB,EAAS,EAEJmD,EAAYmC,EAAYnC,GAAaoC,EAAUpC,IACrDnD,GAAUwC,EAAWe,GAAGJ,GAAWQ,aAGtC,OAAO3D,GAGXyI,UAAW,SAASnE,EAAOG,EAAKiE,GAC5B,OAAO9G,KAAK+G,MAAM,SAAUrE,EAAOG,EAAKiE,IAG5CC,MAAO,SAASC,EAAUtE,EAAOG,EAAKiE,GAClC,IAAIG,EACAC,EACAC,EACAC,EACA5D,EAAYxD,KAAK0C,MACjBe,EAAUzD,KAAK6C,IACf/C,EAAQ7C,EAAMoK,QAAQvH,MAAM0D,EAAU8D,SAU1C,GARoB,iBAAT5E,IACPA,EAAQzF,EAAMM,KAAK4G,UAAUzB,IAGf,iBAAPG,IACPA,EAAM5F,EAAMM,KAAK4G,UAAUtB,IAG3BiE,EACAG,EAAMzD,EAAUrB,UAChB+E,EAASzD,EAAQtB,UAAYsB,EAAQuD,EAAW,UAC7ClH,GACCqH,EAAO1D,EAAQxB,WACfmF,EAAQ5D,EAAUvB,WAAauB,EAAUwD,EAAW,WAEpDG,EAAO3D,EAAUvB,WACjBmF,EAAQ3D,EAAQxB,WAAawB,EAAQuD,EAAW,cAEjD,CACH,IAAIO,EAAc7E,EAAQc,EAAUd,MAEhC6E,EAAc,IACdA,EAAc,GAGlB,IAAIC,EAAoBhE,EAAUX,IAAMW,EAAUd,MAElDuE,EAAMzD,EAAUrB,UAAYqB,EAAUwD,EAAW,UAAYO,EAAcC,EAE3E,IAAIC,EAAYhE,EAAQZ,IAAMA,EAE1B4E,EAAY,IACZA,EAAY,GAGhB,IAAIC,EAAkBjE,EAAQZ,IAAMY,EAAQf,MAE5CwE,EAASzD,EAAQtB,UAAYsB,EAAQuD,EAAW,UAAYvD,EAAQuD,EAAW,UAAYS,EAAYC,EAEpG5H,GACCqH,EAAOnJ,KAAK2J,MAAMlE,EAAQxB,WAAawB,EAAQuD,EAAW,SAAUS,EAAYC,GAChFN,EAAQpJ,KAAK2J,MAAMnE,EAAUvB,WAAauB,EAAUwD,EAAW,SAAWxD,EAAUwD,EAAW,SAAWO,EAAcC,KAExHL,EAAOnJ,KAAK2J,MAAMnE,EAAUvB,WAAauB,EAAUwD,EAAW,SAAWO,EAAcC,GACvFJ,EAAQpJ,KAAK2J,MAAMlE,EAAQxB,WAAawB,EAAQuD,EAAW,SAAWvD,EAAQuD,EAAW,SAAWS,EAAYC,IAIxH,MAAO,CACHT,IAAKA,EACLC,OAAQA,EAERC,KAAe,IAATA,EAAaA,EAAOA,EAAO,EACjCC,MAAOA,IAIfQ,UAAW,SAASlF,EAAOG,EAAKiE,GAC5B,OAAO9G,KAAK+G,MAAM,SAAUrE,EAAOG,EAAKiE,MAI5CxD,EAAekD,EAAU7G,OAAO,CAChCkI,WAAY,WAWR,IAVA,IAAIjH,EAAaZ,KAAKY,WAElB8C,EAAa1D,KAAK0C,MAAM7C,MAExB8D,EAAW3D,KAAK6C,IAAIhD,MAEpBzB,EAAS,EAETwD,EAAQ8B,IAAeC,EAAW,cAAgB,cAE7CpC,EAAYmC,EAAYnC,GAAaoC,EAAUpC,IACrDnD,GAAUwC,EAAWe,GAAGJ,GAAWK,GAGtC,OAAOxD,KAIXyC,EAAiB5D,EAAMyC,MAAMC,OAAO,CACpCC,KAAM,SAASW,EAAWC,EAASsH,EAAYxG,GAC3CtB,KAAK+H,OAAS,GAEd/H,KAAKgI,QAAU,GAEfhI,KAAKkG,OAASjJ,EAAMM,KAAK4G,UAAU5D,GAEnCP,KAAKiI,KAAOhL,EAAMM,KAAK4G,UAAU3D,GAEjCR,KAAKkI,YAAcJ,EAEnB9H,KAAKmI,iBAAmB7G,GAE5Bc,QAAS,WACL,IAAK,IAAIb,EAAY,EAAGA,EAAYvB,KAAK+H,OAAOtJ,OAAQ8C,IACpDvB,KAAK+H,OAAOxG,GAAWa,WAI/BmC,aAAc,SAAShH,GACnB,OAAOyC,KAAKkG,QAAU3I,GAAQA,EAAOyC,KAAKiI,MAG9CxD,WAAY,SAASlH,EAAM8F,GACvB,IAAIR,EAAMQ,EAAW9F,EAAOyC,KAAKiI,KAAO1K,GAAQyC,KAAKiI,KACrD,OAAOjI,KAAKkG,QAAU3I,GAAQsF,GAGlCsD,gBAAiB,SAAS5I,GACtB,IAAI0I,EAAO1I,EAEQ,iBAAR0I,IACPA,EAAOhJ,EAAMM,KAAK4G,UAAU5G,IAGhC,IAAK,IAAIgE,EAAY,EAAGA,EAAYvB,KAAK+H,OAAOtJ,OAAQ8C,IAAa,CACjE,IAAIG,EAAO1B,KAAK+H,OAAOxG,GAEvB,GAAIG,EAAK6C,aAAa0B,GAClB,OAAOvE,EAIf,OAAO,MAGX0E,cAAe,SAAS7I,EAAM6K,GAC1B,IAAInC,EAAO1I,EAMX,GAJmB,iBAAR0I,IACPA,EAAOhJ,EAAMM,KAAK4G,UAAU5G,IAG5B6K,EACA,OAAOpI,KAAKmG,gBAAgB5I,GAAM,GAGtC,IAAK,IAAIgE,EAAY,EAAGA,EAAYvB,KAAK+H,OAAOtJ,OAAQ8C,IAAa,CACjE,IAAIG,EAAO1B,KAAK+H,OAAOxG,GAEvB,GAAIG,EAAK+C,WAAWwB,GAChB,OAAOvE,EAIf,OAAO,MAGXF,MAAO,WACH,OAAOxB,KAAK+H,OAAOtJ,QAEvBkI,OAAQ,WACJ,OAAO3G,KAAKgI,SAEhBK,YAAa,SAASf,EAAS5E,EAAOG,EAAKyF,GACvC,IAAI5G,EAAO,IAAI6G,EAASjB,EAAS5E,EAAOG,EAAK7C,KAAKkI,YAAalI,KAAKmI,iBAAkBnI,KAAK+H,OAAOtJ,OAAQ6J,GAE1GtI,KAAK+H,OAAOrJ,KAAKgD,IAErB8G,WAAY,SAASlB,EAAS5E,EAAOG,EAAK4F,GACtC,IAAI/G,EAAO,IAAIgH,EAAQpB,EAAS5E,EAAOG,EAAK7C,KAAKkI,YAAalI,KAAKmI,iBAAkBnI,KAAK+H,OAAOtJ,OAAQgK,GAEzGzI,KAAK+H,OAAOrJ,KAAKgD,IAErBsB,MAAO,WACH,OAAOhD,KAAK+H,OAAO,IAEvB9E,KAAM,WACF,OAAOjD,KAAK+H,OAAO/H,KAAK+H,OAAOtJ,OAAS,IAE5CkD,GAAI,SAAS9B,GACT,OAAOG,KAAK+H,OAAOlI,MAIvB8I,EAAO1L,EAAMyC,MAAMC,OAAO,CAC1BC,KAAM,SAAS0H,EAAS5E,EAAOG,EAAKiF,EAAYxG,EAAiBzB,GAC7DG,KAAKsH,QAAUA,EACftH,KAAK4I,YAActB,EAAQsB,YAC3B5I,KAAK6I,aAAevB,EAAQuB,aAC5B7I,KAAK6B,YAAcyF,EAAQzF,YAC3B7B,KAAK+B,aAAeuF,EAAQvF,aAC5B/B,KAAKmC,UAAYmF,EAAQnF,UACzBnC,KAAKiC,WAAaqF,EAAQrF,WAE1BjC,KAAK0C,MAAQA,EACb1C,KAAK6C,IAAMA,EACX7C,KAAKsH,QAAUA,EACftH,KAAK8H,WAAaA,EAClB9H,KAAKsB,gBAAkBA,EACvBtB,KAAKH,MAAQA,EACbG,KAAK8E,WAAY,GAGrB1C,QAAS,WACL,IAAIkF,EAAUtH,KAAKsH,QAEnBtH,KAAK4I,YAActB,EAAQsB,YAC3B5I,KAAK6I,aAAevB,EAAQuB,aAC5B7I,KAAK6B,YAAcyF,EAAQzF,YAC3B7B,KAAK+B,aAAeuF,EAAQvF,aAC5B/B,KAAKmC,UAAYmF,EAAQnF,UACzBnC,KAAKiC,WAAaqF,EAAQrF,YAG9B1B,UAAW,WACP,OAAOtD,EAAM6L,SAASC,YAAY/I,KAAK0C,QAG3ClC,QAAS,WACL,OAAOvD,EAAM6L,SAASC,YAAY/I,KAAK6C,MAG3C0B,aAAc,SAAShH,GACnB,OAAOyC,KAAK0C,OAASnF,GAAQA,EAAOyC,KAAK6C,KAG7C4B,WAAY,SAASlH,GACjB,OAAOyC,KAAK0C,MAAQnF,GAAQA,GAAQyC,KAAK6C,KAG7C0E,YAAa,WACV,OAAOvH,KAAK0C,OAGf+E,UAAW,WACP,OAAOzH,KAAK6C,OAIhB0F,EAAWI,EAAKhJ,OAAO,CACvBC,KAAM,SAAS0H,EAAS5E,EAAOG,EAAKiF,EAAYxG,EAAiBzB,EAAOyI,GACpEK,EAAKK,GAAGpJ,KAAK7C,MAAMiD,KAAMiJ,WAEzBjJ,KAAKsI,eAAeA,GAGxBY,QAAS,SAASC,EAAKC,GACnB,OACWpJ,KAAKiC,WAAamH,GAMjC7E,aAAc,SAAShH,GACnB,OAAOyC,KAAK0C,OAASnF,GAAQA,EAAOyC,KAAK6C,KAG7C4B,WAAY,SAASlH,GACjB,OAAOyC,KAAK0C,MAAQnF,GAAQA,GAAQyC,KAAK6C,KAG7C0E,YAAa,SAAStG,EAAGC,EAAG4F,GACxB,GAAIA,EACA,OAAO9G,KAAK0C,MAGhB,IAGI2G,EACApD,EAJAmD,EAAShM,EAAE4C,KAAKsH,SAAS8B,SAEzBE,EAAWtJ,KAAK6C,IAAM7C,KAAK0C,MAI/B,GAAI1C,KAAKsI,aAAc,CAEnB,IAAIxI,EAAQ7C,EAAMoK,QAAQvH,MAAME,KAAKsH,SAIrC,GAHA+B,EAAcpI,EAAImI,EAAOjC,KACzBlB,EAAOjI,KAAKuL,MAAMD,GAAaD,EAAarJ,KAAK6B,cAE7C/B,EACA,OAAOE,KAAK0C,MAAQ4G,EAAWrD,OAGnCoD,EAAanI,EAAIkI,EAAOnC,IACxBhB,EAAOjI,KAAKuL,MAAMD,GAAaD,EAAarJ,KAAK+B,eAGrD,OAAO/B,KAAK0C,MAAQuD,GAGxBwB,UAAW,SAASxG,EAAGC,EAAG4F,GACtB,GAAIA,EACA,OAAO9G,KAAK6C,IAGhB,IAGIwG,EACApD,EAJAmD,EAAShM,EAAE4C,KAAKsH,SAAS8B,SAEzBE,EAAWtJ,KAAK6C,IAAM7C,KAAK0C,MAI/B,GAAI1C,KAAKsI,aAAc,CAEnB,IAAIxI,EAAQ7C,EAAMoK,QAAQvH,MAAME,KAAKsH,SAIrC,GAHA+B,EAAapI,EAAImI,EAAOjC,KACxBlB,EAAOjI,KAAKuL,MAAMD,GAAaD,EAAarJ,KAAK6B,cAE7C/B,EACA,OAAOE,KAAK0C,MAAQ4G,EAAWrD,OAGnCoD,EAAanI,EAAIkI,EAAOnC,IACxBhB,EAAOjI,KAAKuL,MAAMD,GAAaD,EAAarJ,KAAK+B,eAGrD,OAAO/B,KAAK0C,MAAQuD,KAIxByC,EAAUC,EAAKhJ,OAAO,CACtBC,KAAM,SAAS0H,EAAS5E,EAAOG,EAAKiF,EAAYxG,EAAiBzB,EAAO4I,GAMpE,GALAE,EAAKK,GAAGpJ,KAAK7C,MAAMiD,KAAMiJ,WAEzBjJ,KAAKyI,WAAaA,EAClBzI,KAAK8E,WAAY,EAEb9E,KAAKsH,QAAQkC,SAAS/K,OAAQ,CAC9B,IAAIgL,EAAazJ,KAAKsH,QAAQkC,SAAS,GAEvCxJ,KAAK0J,iBAAmBD,EAAW1H,aACnC/B,KAAK2J,cAAgBF,EAAWtH,eAEhCnC,KAAK0J,iBAAmB,EACxB1J,KAAK2J,cAAgB,GAI7BpJ,UAAW,WACP,IAAIhD,EAAO,IAAIqM,KAAK5J,KAAK0C,OAEzB,OAAOzF,EAAM6L,SAAS/L,MAAMQ,EAAM,YAGtCiD,QAAS,WACL,IAAIjD,EAAO,IAAIqM,KAAK5J,KAAK6C,KAEzB,OAAO5F,EAAM6L,SAAS/L,MAAMQ,EAAM,YAGtCgH,aAAc,SAAShH,GACnB,OAAOyC,KAAK0C,OAASnF,GAAQA,EAAOyC,KAAK6C,KAG7C4B,WAAY,SAASlH,GACjB,OAAOyC,KAAK0C,MAAQnF,GAAQA,GAAQyC,KAAK6C,OAKjD,SAASgH,IAEL,OADAtK,EAAiBA,GAAkCtC,EAAMoK,QAAQwC,YAC1DtK,EAk+CX,SAASuK,EAAgBC,EAAUrH,EAAOG,GACtC,IAAIrE,EACAqB,EACA6D,EACAsG,EACArG,EAEJ,IAAKnF,EAAMuL,EAAStL,OAAO,EAAGD,GAAO,EAAGA,IACpCqB,EAAQoK,EAAWF,EAASvL,IAC5BkF,EAAa7D,EAAM6C,MACnBiB,EAAW9D,EAAMgD,IAEjBmH,EAAWtG,GAAchB,GAASiB,GAAYjB,GAE1CsH,GAAatG,GAAchB,GAASiB,GAAYd,GAASH,GAASgB,GAAcb,GAAOa,KACnFA,EAAahB,IACbA,EAAQgB,GAGRC,EAAWd,IACXA,EAAMc,IAKlB,OAAOuG,EAAcH,EAAUrH,EAAOG,GAG1C,SAASoH,EAAWE,GAChB,MAAO,CACHzH,MAAOyH,EAAazH,MACpBG,IAAKsH,EAAatH,KAI1B,SAASqH,EAAcH,EAAUK,EAAWC,GAGxC,IAFA,IAAI1D,EAAS,GAEJnI,EAAM,EAAGA,EAAMuL,EAAStL,OAAQD,IAAO,CAC5C,IAAIwF,EAAQiG,EAAWF,EAASvL,KAE3BwF,EAAMtB,MAAQ0H,GAAapG,EAAMnB,IAAMuH,GAAepG,EAAMtB,OAAS0H,GAAapG,EAAMnB,KAAOwH,IAChG1D,EAAOjI,KAAKqL,EAASvL,IAI7B,OAAOmI,EAGX,SAAS2D,EAAcC,GACnB,OAAOC,EAAeD,GAG1B,SAASE,EAAWF,GAChB,OAAOC,EAAeD,GArhD1BtN,EAAMC,GAAGwN,cAAgBlN,EAAOmC,OAAO,CACnCC,KAAM,SAAS0H,EAASb,GACpBjJ,EAAOwL,GAAGpJ,KAAK3D,KAAK+D,KAAMsH,EAASb,GAEnCzG,KAAK2K,oBACL3K,KAAK4K,WAAaf,IAClB7J,KAAKI,OAASnD,EAAMoK,QAAQvH,MAAMwH,GAClCtH,KAAK6K,YAAczN,IACnB4C,KAAK8K,UAAY1N,IACjB4C,KAAK+K,QAAU9N,EAAM+N,OACrBhL,KAAKiL,sBACLjL,KAAKkL,eAAiB,IAG1BC,eAAgB,WACZ,OAAOnL,KAAKQ,WAGhBmK,kBAAmB,WACf,IAAIlE,EAAUzG,KAAKyG,QAEfA,EAAQnE,WACRmE,EAAQnE,UAAU8I,gBAAgB,GAGlC3E,EAAQlE,SACRkE,EAAQlE,QAAQ6I,gBAAgB,GAGhC3E,EAAQ4E,cACR5E,EAAQ4E,aAAaD,gBAAgB,GAGrC3E,EAAQ6E,YACR7E,EAAQ6E,WAAWF,gBAAgB,IAI3CG,UAAW,WACP,IAAI9E,EAAUzG,KAAKyG,QACnB,OAA2B,IAAnBA,EAAQ+E,QAAmBvO,EAAMoK,QAAQoE,UAAgC,UAAnBhF,EAAQ+E,QAAyC,WAAnB/E,EAAQ+E,QAGxGE,iBAAkB,WACd,IAAIC,EAAe,IAAIlM,EAAaO,KAAK4L,OAAOnN,OAAQuB,KAAKI,OAAQJ,KAAKyG,QAAQ1G,mBAIlF,OAFAC,KAAK4L,OAAOlN,KAAKiN,GAEVA,GAGXE,aAAc,WACV,OAAO5O,EAAM6O,OAAO9L,KAAKyG,QAAQsF,mBAAoB/L,KAAKO,YAAaP,KAAKQ,YAGhFwL,kBAAmB,WACf,OAAO/O,EAAM6O,OAAO9L,KAAKyG,QAAQwF,wBAAyBjM,KAAKO,YAAaP,KAAKQ,YAGrF0L,mBAAoB,WAChB,OAAOjP,EAAM6O,OAAO9L,KAAKyG,QAAQ0F,0BAA4BnM,KAAKyG,QAAQwF,wBAAyBjM,KAAKO,YAAaP,KAAKQ,YAG9H4L,aAAc,SAASC,EAAWC,GAC9B,IAAIC,EAASD,EAAW,gBAAkB,gBACtC5K,EAAO1B,KAAKuM,GAAQF,EAAU3J,MAAO2J,EAAUvE,WAAYuE,EAAUhJ,UAUzE,OARI3B,IACA2K,EAAUvE,YAAcwE,GAAY,EAAI,GAGxCtM,KAAKwM,qBAAuB9K,IAC7B2K,EAAUvE,WAAawE,EAAWtM,KAAK4L,OAAOnN,OAAS,EAAI,GAGvDiD,GAGX+K,YAAa,SAASJ,EAAW3K,EAAM4K,GACnC,IACI3L,EAAad,EADb6M,EAAQ1M,KAAK4L,OAAOS,EAAUvE,YAGlC,GAAIwE,GAIE,GAHA3L,EAAc+L,EAAMhI,iBAAgB,GACpC7E,EAAQ6M,EAAM3L,yBAA2BW,EAAK7B,MAAQ,EAAI6B,EAAKJ,gBAAkB,EAE7EzB,GAAS,EACT,OAAQc,EAAYd,GAAOkI,OAAOpH,EAAYd,GAAOkI,OAAOtJ,OAAS,OAEtE,CACHkC,EAAc+L,EAAMhI,gBAAgBgI,EAAM3L,0BAC1ClB,EAAQ6M,EAAM3L,yBAA2B,EAAIW,EAAKJ,gBAAkB,EACpE,IAAIC,EAAYmL,EAAM3L,yBAA2BW,EAAKJ,gBAAkB,EAAI,EAE5E,GAAIX,EAAYd,IAAUc,EAAYd,GAAOkI,OAAOxG,GAChD,OAAQZ,EAAYd,GAAOkI,OAAOxG,KAKhDoL,yBAA0B,WACtB,OAAO,MAGXC,kBAAmB,WACf,OAAO,GAGXC,WAAY,SAASC,EAAUC,GAC3B,SAAID,GAAaC,GAAW/M,KAAKyG,QAAQuG,KAAQhN,KAAKyG,QAAQwG,OAGvD3P,EAAQwP,IAAaxP,EAAQ0C,KAAKyG,QAAQuG,MAAQ1P,EAAQyP,IAAWzP,EAAQ0C,KAAKyG,QAAQwG,OAGrGC,iBAAkB,SAASb,EAAWzI,EAAQuJ,EAAUvI,GACpD,IAiCID,EAjCA4H,EAAS3H,EAAU,WAAa,YAChCwI,EAAkB,CACjB5J,UAAWI,EAAO,GAAGlB,MACrBe,QAASG,EAAOA,EAAOnF,OAAS,GAAGoE,KAEpC6J,EAAQ1M,KAAK4L,OAAOS,EAAUvE,YAC9BuF,EAAarN,KAAKsN,uBAEtB,IAAKH,EAAU,CACX,IAAIzL,EAAO1B,KAAKuN,8BAA8BlB,EAAWzI,EAAQgB,GAC7DlD,IACA0L,EAAgB5J,UAAY4J,EAAgB3J,QAAU/B,GAI9D,GAAI1B,KAAKwM,qBAAuBW,EAAU,CACpC,IAAIK,EAAWxN,KAAKoM,aAAaC,EAAWzH,GAExC4I,EAIAJ,EAAgB5J,UAAY4J,EAAgB3J,QAAU+J,EAFxDJ,EAAkBpN,KAAKyN,wBAAwBf,EAAOH,EAAQa,QAKhEA,EAAgB5J,UAAYkJ,EAAMH,GAAQa,EAAgB5J,WAC1D4J,EAAgB3J,QAAUiJ,EAAMH,GAAQa,EAAgB3J,SAEnD0J,GAAaE,GAAgBD,EAAgB5J,WAAc4J,EAAgB3J,UAC1E2J,EAAgB5J,UAAY4J,EAAgB3J,QAAUzD,KAAKoM,aAAaC,EAAWzH,IAe/F,OATMwI,EAAgB5J,WAAc4J,EAAgB3J,SAAazD,KAAKwM,qBAClE7H,EAAiB3E,KAAK0N,gBAAgBrB,EAAWzI,EAAQgB,GACzDD,EAAiB3E,KAAK2M,yBAAyBN,EAAW1H,EAAgBwI,EAAUvI,GAEhFD,IACAyI,EAAgB5J,UAAY4J,EAAgB3J,QAAUkB,IAIvDyI,GAGVK,wBAAyB,SAASf,EAAOH,EAAQa,GAM7C,OALGpN,KAAKsN,yBACLF,EAAgB5J,UAAYkJ,EAAMH,GAAQa,EAAgB5J,WAC1D4J,EAAgB3J,QAAUiJ,EAAMH,GAAQa,EAAgB3J,UAGpD2J,GAGZO,eAAgB,SAAStB,EAAWzI,EAAQuJ,EAAUvI,GAClD,IACIlD,EADAgL,EAAQ1M,KAAK4L,OAAOS,EAAUvE,YAE9B8F,EAAgB,CAChBpK,UAAWI,EAAO,GAAGlB,MACrBe,QAASG,EAAOA,EAAOnF,OAAS,GAAGoE,KAGlCsK,IACDzL,EAAO1B,KAAK6N,4BAA4BxB,EAAWzI,EAAQgB,GACvDlD,IACAkM,EAAcpK,UAAYoK,EAAcnK,QAAU/B,IAI1D,IAAI6K,EAAS3H,EAAU,SAAW,WAalC,OAXAgJ,EAAgB5N,KAAK8N,sBAAsBpB,EAAOH,EAAQqB,EAAeT,GAEpEA,IAAYnN,KAAKsN,wBAA4BM,EAAcpK,WAAcoK,EAAcnK,UACpFzD,KAAKwM,mBACLoB,EAAcpK,UAAYoK,EAAcnK,QAAUzD,KAAKyM,YAAYJ,EAAW3K,EAAMkD,GAGpFgJ,EAAcpK,UAAYoK,EAAcnK,QAAUzD,KAAKoM,aAAaC,EAAWzH,IAIhFgJ,GAGXE,sBAAuB,SAASpB,EAAOH,EAAQqB,EAAeT,GAIzD,OAHAS,EAAcpK,UAAYkJ,EAAMH,GAAQqB,EAAcpK,UAAW2J,GACjES,EAAcnK,QAAUiJ,EAAMH,GAAQqB,EAAcnK,QAAS0J,GAEtDS,GAGZL,8BAA+B,WAC3B,OAAO,MAGXM,4BAA6B,SAASxB,EAAWzI,EAAQgB,GACrD,IAAIlD,EAQJ,OALIA,EADAkD,EACOhB,EAAO,GAAGlB,MAEVkB,EAAOA,EAAOnF,OAAS,GAAGoE,IAG9BnB,GAGXgM,gBAAiB,WACb,OAAO,MAGXK,QAAS,WACL,IAAI3I,EAAOpF,KACPyG,EAAUrB,EAAKqB,QAEnB,GAAIrB,EAAKmG,YAAa,CAClB,IAAIyC,EAAO,6CACXA,GAAQ,8EACRA,GAAQvH,EAAQwH,SAASC,MAAQ,cACjCF,GAAQ,SACR5I,EAAK+I,OAAS/Q,EAAE4Q,GAAMI,SAAShJ,EAAKkC,SAGrClC,EAAK+I,QACJ/I,EAAK+I,OAAOE,GAAG,QAAUzQ,EAAI,sBAAsB,SAAS0Q,GACxDA,EAAEC,iBACF,IAGIhR,EAHAuL,EAAW1D,EAAKqB,QAAQqC,SACxB0F,EAAS,QACTC,EAAc,IAAI7E,KAGtB,GAAGd,EAAS,CACR,IAAI4F,EAAiBzR,EAAM6L,SAASM,OAAOqF,EAAa3F,GACxDvL,EAAON,EAAM6L,SAAS6F,QAAQF,EAAaA,EAAYG,oBAAqBF,QAE5EnR,EAAOkR,EAGXrJ,EAAKyJ,QAAQ,WAAY,CAAEC,KAAM1J,EAAK2J,MAAQtI,EAAQsI,KAAMP,OAAQA,EAAQjR,KAAMA,QAK9FyR,mBAAoB,SAAS3C,GACzB,IACI3K,EADAgL,EAAQ1M,KAAK4L,OAAO,GAGnB5L,KAAK4C,QAAQyJ,GAOTK,EAAM3L,yBAEC2L,EAAM5L,4BACduL,EAAUhJ,UAAW,GAFrBgJ,EAAUhJ,UAAW,GAP1B3B,EAAOgL,EAAM3H,YAEbsH,EAAUhJ,SAAW3B,EAAKoD,UAC1BuH,EAAU3J,MAAQhB,EAAKnB,YACvB8L,EAAUxJ,IAAMnB,EAAKlB,WASnBR,KAAK4L,OAAOS,EAAUvE,cACvBuE,EAAUvE,WAAa,IAI/BmH,KAAM,SAAS5C,EAAWlO,EAAK+Q,GAC3B,IAAIC,GAAU,EACVzC,EAAQ1M,KAAK4L,OAAOS,EAAUvE,YAC9BsH,EAAiBpP,KAAKwM,oBAAuBxM,KAAKsN,uBAEjDZ,EAAM5L,4BACPuL,EAAUhJ,UAAW,GAGzB,IACIG,EAAWC,EAASmB,EAASyK,EAD7BzL,EAAS8I,EAAM9I,OAAOyI,EAAU3J,MAAO2J,EAAUxJ,IAAKwJ,EAAUhJ,UAAU,GAG9E,GAAIlF,IAAQR,EAAK2R,MAAQnR,IAAQR,EAAK4R,IAQlC,GAPAJ,GAAU,EACVvK,EAAUzG,IAAQR,EAAK4R,GAEvBvP,KAAKwP,iBAAiBnD,EAAWzI,EAAQsL,EAAOtK,GAAS,GAEzDyK,EAAQrP,KAAK2N,eAAetB,EAAWzI,EAAQsL,EAAOtK,IAEjDyK,EAAM7L,YAAc0L,GAASlP,KAAK4M,kBAAkBP,EAAWzH,GAAUwK,GAC1E,OAAOD,OAGR,IAAIhR,IAAQR,EAAK8R,MAAQtR,IAAQR,EAAK+R,SACzCP,GAAU,EACVvK,EAAUzG,IAAQR,EAAK8R,KAEvBzP,KAAKwP,iBAAiBnD,EAAWzI,EAAQsL,EAAOtK,GAAS,GAEzDyK,EAAQrP,KAAKkN,iBAAiBb,EAAWzI,EAAQsL,EAAOtK,IAEnDyK,EAAM7L,YAAc0L,GAASlP,KAAK4M,kBAAkBP,EAAWzH,EAASwK,IACzE,OAAOD,EAIf,GAAIA,EAAS,CAIT,GAHA3L,EAAY6L,EAAM7L,UAClBC,EAAU4L,EAAM5L,QAEZyL,EAAO,CACP,IAAIS,EAAWtD,EAAUsD,SACrBA,GAAYnM,EACZ6I,EAAU3J,MAAQc,EAAUjD,aACpBoP,GAAYlM,IACpB4I,EAAUxJ,IAAMY,EAAQjD,gBAErBgD,GAAaC,IACpB4I,EAAUhJ,SAAWG,EAAUsB,UAC/BuH,EAAU3J,MAAQc,EAAUjD,YAC5B8L,EAAUxJ,IAAMY,EAAQjD,WAG5B6L,EAAU1F,OAAS,GAGvB,OAAOwI,GAGXS,mBAAoB,SAASlD,EAAOhL,EAAMmO,EAAgBC,GACtD,IAEW9L,EAFP2C,EAAS+F,EAAMqD,mBAAqB,GAIpClL,EAAMiL,GAAQ,EAAI,EAElBrR,EAASkI,EAAOlI,OAChBD,EAAMsR,EAAOrR,EAAS,EAAI,EAE9B,GAAIoR,EAAepR,OAGf,IAFA,IAAIuR,EAAeH,EAAeA,EAAepR,OAAS,GAEjDwR,EAAI,EAAGA,EAAItJ,EAAOlI,OAAQwR,IAC3BtJ,EAAOsJ,GAAGC,MAAQF,IAClBxR,EAAMyR,EAAIpL,GAKtB,MAAOrG,EAAMC,GAAUD,GAAO,EAAG,CAG7B,GAFAwF,EAAQ2C,EAAOnI,KAERsR,GAAQ9L,EAAMtB,MAAMnC,aAAemB,EAAKnB,aAC1CuP,GAAQ9L,EAAMtB,MAAMnC,aAAemB,EAAKnB,cAErCyD,IAAmD,IAA1C5G,EAAE+S,QAAQnM,EAAMkM,IAAKL,GAAwB,GAC5C7L,EACV,MAIRxF,GAAOqG,EAGX,OAAOb,GAGXoM,YAAa,SAAS/D,EAAWyD,GAC7B,IAQI9L,EARA8D,EAAauE,EAAUvE,WAEvB4E,EAAQ1M,KAAK4L,OAAO9D,GACpBpG,EAAOgL,EAAM9I,OAAOyI,EAAU3J,MAAO2J,EAAUxJ,IAAKwJ,EAAUhJ,UAAU,GAAO,GAAGX,MAElFjE,EAASuB,KAAK4L,OAAOnN,OACrBoG,EAAMiL,GAAQ,EAAI,EAClBnJ,EAAS0F,EAAU1F,OAGvB,GAAI3G,KAAKwM,mBAAoB,CACzB,IAAI6D,EAAYrQ,KAAKsQ,gBACjBC,EAAkBvQ,KAAKwQ,iBAAiBH,GACxCI,EAAezQ,KAAK0Q,iBAAiBH,GAEzC,GAAqB,IAAlB5J,EAAOlI,OAAa,CACnB,IAAIkS,EAAa3Q,KAAK4Q,yBAAyBlP,EAAM+O,EAAc3I,GAEhEgI,GACCa,IAGJ3M,EAAQyM,EAAaE,OACnB,CACD,IAAInS,EAAMwB,KAAK6Q,aAAalK,EAAQ8J,GAErC,MAAOjS,EAAMiS,EAAahS,QAAUD,GAAO,EAAG,CAK1C,GAJGmI,EAAOlI,OAAS,IACfiD,EAAO1B,KAAK8Q,iBAAiBpP,EAAM+O,EAAczM,EAAOxF,EAAKqG,EAAKiL,KAGlEpO,EACA,MAGJ,KAAOoO,GAAQW,EAAajS,GAAKkE,MAAMnC,aAAemB,EAAKnB,aACpDuP,GAAQW,EAAajS,GAAKkE,MAAMnC,aAAemB,EAAKnB,cAClDoG,EAAO,IAAM8J,EAAajS,GAAK0R,IAAK,CACpClM,EAAQyM,EAAajS,GACpB,MAGVA,GAAOqG,SAIb,MAAOiD,EAAarJ,GAAUqJ,GAAc,EAAG,CAM7C,GALA9D,EAAQhE,KAAK4P,mBAAmBlD,EAAOhL,EAAMiF,EAAQmJ,GAErDhI,GAAcjD,EACd6H,EAAQ1M,KAAK4L,OAAO9D,IAEf4E,GAAS1I,EACV,MAGJ2C,EAAS,GAELjF,EADAoO,EACOpD,EAAM1H,WAEN0H,EAAM3H,WAAU,GAanC,OARIf,IACAqI,EAAU1F,OAAS,CAAE3C,EAAMkM,KAC3B7D,EAAU3J,MAAQsB,EAAMtB,MAAMnC,YAC9B8L,EAAUxJ,IAAMmB,EAAMnB,IAAIrC,UAC1B6L,EAAUhJ,SAAWW,EAAMtB,MAAMoC,UACjCuH,EAAUvE,WAAa9D,EAAMtB,MAAMoF,cAG9B9D,GAGb+M,QAAS,SAASC,GACd,QAAkBhU,IAAdgU,EAMA,OAAOhR,KAAKiR,SALZjR,KAAKiR,SAAWD,EACZhR,KAAKV,QAAQ4R,IAAIF,IACjBhR,KAAKmR,UAAUH,EAAWhR,KAAKV,QAAQ,KAOnD8R,OAAQ,SAAS/E,GACbrM,KAAKqR,iBAEArR,KAAKsR,cAAcjF,IACpBrM,KAAKuR,aAAalF,IAI1BuE,yBAA0B,SAASlP,EAAM+O,EAAc3I,GAInD,IAHA,IAAI0J,EAAY,EACZC,EAAgBxU,EAAMM,KAAKD,QAAQoE,EAAKnB,aAEnC0P,EAAI,EAAGA,EAAIQ,EAAahS,OAAQwR,IAAK,CAC1C,IAAIyB,EAAiBzU,EAAMM,KAAKD,QAAQmT,EAAaR,GAAGvN,MAAMnC,aAC9D,GAAIkR,EAAgBC,EAChBF,SAIJ,GAAIC,EAAcE,YAAcD,EAAeC,WAAa7J,EAAa2I,EAAaR,GAAGvN,MAAMoF,WACzF0J,QADN,CAKA,KAAIC,EAAcE,YAAcD,EAAeC,WAC3C7J,GAAc2I,EAAaR,GAAGvN,MAAMoF,YACpCpG,EAAKnB,YAAckQ,EAAaR,GAAGvN,MAAMnC,aAK5C,MAJGiR,KAMR,OAAOA,GAGXV,iBAAkB,SAASpP,EAAM+O,EAAczM,EAAOxF,EAAKqG,EAAKiL,GAC1D,GAAIW,EAAajS,EAAMqG,IACtB4L,EAAajS,GAAKkE,MAAMoF,aAAe2I,EAAajS,EAAMqG,GAAKnC,MAAMoF,WAAY,CAC5E,IAAIA,EAAa2I,EAAajS,EAAMqG,GAAKnC,MAAMoF,WAC3C4E,EAAQ1M,KAAK4L,OAAO9D,GAEnB4E,IAAS1I,IACXtC,EAAO,MAINA,EADAoO,EACOpD,EAAM1H,WAEN0H,EAAM3H,WAAU,GAGlC,OAAOrD,GAGZmP,aAAc,SAASlK,EAAQ8J,GAC3B,IAAImB,EAAqB,EAUzB,OARAxU,EAAEyU,KAAKpB,GAAc,WACjB,GAAIzQ,KAAKkQ,MAAQvJ,EAAO,GACnB,OAAO,EAGZiL,OAGGA,GAGXtB,cAAe,WAIX,IAHA,IAAID,EAAY,GACZzE,EAAS5L,KAAK4L,OAETpN,EAAM,EAAGA,EAAMoN,EAAOnN,OAAQD,IAC/BoN,EAAOpN,GAAKuR,oBACZM,EAAWA,EAAUyB,OAAOlG,EAAOpN,GAAKuR,oBAIhD,OAAOM,GAGXG,iBAAkB,SAASH,GAGvB,IAFA,IAAIE,EAAkB,GAEbN,EAAI,EAAGA,EAAII,EAAU5R,OAAQwR,IAAK,CAEvC,IADA,IAAI8B,GAAS,EACJC,EAAI,EAAGA,EAAIzB,EAAgB9R,OAAQuT,IACxC,GAAI3B,EAAUJ,GAAGC,MAAQK,EAAgByB,GAAG9B,IAAK,CAC7C6B,GAAS,EACT,MAIHA,GACDxB,EAAgB7R,KAAK2R,EAAUJ,IAIvC,OAAOM,GAGXG,iBAAkB,SAASH,GACtB,OAAOA,EAAgB0B,MAAK,SAASjP,EAAOkP,GACzC,IAAIC,EAAiBnP,EAAMN,MAAMnC,YAC7B6R,EAAkBF,EAAOxP,MAAMnC,YAC/BnC,EAASnB,EAAMM,KAAKD,QAAQ6U,GAAkBlV,EAAMM,KAAKD,QAAQ8U,GAwBrE,OAtBe,IAAXhU,IACAA,EAAS4E,EAAMN,MAAMoF,WAAaoK,EAAOxP,MAAMoF,YAGpC,IAAX1J,IACAA,EAAS+T,EAAeR,UAAYS,EAAgBT,WAGzC,IAAXvT,IACI4E,EAAMN,MAAMoC,YAAcoN,EAAOxP,MAAMoC,YACnC1G,GAAU,IAGb4E,EAAMN,MAAMoC,WAAaoN,EAAOxP,MAAMoC,YACnC1G,EAAS,IAIN,IAAXA,IACAA,EAAShB,EAAE4F,EAAMsE,SAASzH,QAAUzC,EAAE8U,EAAO5K,SAASzH,SAGnDzB,MAIfmT,aAAc,SAASlF,GACnB,IAAIhJ,EAAWgJ,EAAUhJ,SACrBqJ,EAAQ1M,KAAK4L,OAAOS,EAAUvE,YAE7B4E,EAAM5L,4BACPuC,GAAW,GAGfrD,KAAKkL,eAAiB,GAMtB,IAJA,IACI5D,EACA5F,EAFAkC,EAAS8I,EAAM9I,OAAOyI,EAAU3J,MAAO2J,EAAUxJ,IAAKQ,GAAU,GAI3D4G,EAAa,EAAGA,EAAarG,EAAOnF,OAAQwL,IAIjD,IAHA,IAAI1G,EAAQK,EAAOqG,GACfrJ,EAAa2C,EAAM3C,WAEdW,EAAYgC,EAAMb,MAAM7C,MAAO0B,GAAagC,EAAMV,IAAIhD,MAAO0B,IAClEG,EAAOd,EAAWe,GAAGJ,GAErB+F,EAAU5F,EAAK4F,QACfA,EAAQ+K,aAAa,iBAAiB,GACtCC,EAAiBhL,GAEjBtH,KAAKkL,eAAexM,KAAK,CACrBgE,MAAOhB,EAAKnB,YACZsC,IAAKnB,EAAKlB,UACV8G,QAASA,IAKjB+E,EAAUsD,WACVrI,EAAU1D,EAAO,GAAGlB,MAAM4E,SAG9BtH,KAAK+Q,QAAQzJ,IAGjBgK,cAAe,SAASjF,GACpB,IAGI7N,EAAK+T,EAHLC,GAAQ,EACR7L,EAAS0F,EAAU1F,OACnB8L,EAAczS,KAAKsQ,gBACF7R,EAASgU,EAAYhU,OAE1C,IAAKkI,EAAO,KAAO8L,EAAY,GAC3B,OAAOD,EAGX,IAAIpU,EAAShB,IAEb,IADAiP,EAAU1F,OAAS,GACdnI,EAAM,EAAGA,EAAMC,EAAQD,IACpBpB,EAAE+S,QAAQsC,EAAYjU,GAAK0R,IAAKvJ,IAAW,IAC3C4L,EAAaE,EAAYjU,GACzBJ,EAASA,EAAOsU,IAAIH,EAAWjL,UACkB,IAA9C+E,EAAU1F,OAAOgM,QAAQJ,EAAWrC,MACnC7D,EAAU1F,OAAOjI,KAAK6T,EAAWrC,MAY7C,OAPI9R,EAAO,KACPA,EAAOwU,SAAS,oBAAoBC,KAAK,iBAAiB,GAC1D7S,KAAK+Q,QAAQ3S,EAAO6E,OAAO,IAC3BjD,KAAKkL,eAAiB,GACtBsH,GAAQ,GAGLA,GAGX5P,QAAS,SAAS6D,GACd,IAAIlG,EAAYP,KAAKO,YACjBC,EAAUvD,EAAMM,KAAKuV,QAAQ9S,KAAKQ,UAAW,GAC7CkC,EAAQ+D,EAAQ/D,MAChBG,EAAM4D,EAAQ5D,IAElB,OAAOtC,GAAamC,GAASA,EAAQlC,GAAWD,EAAYsC,GAAOA,GAAOrC,GAG9EuS,eAAgB,SAASC,EAAUC,GAI/B,OAHID,EAASE,iBACTD,EAAOhW,EAAMkW,OAAOH,EAASI,eAAtBnW,CAAsCgW,IAE1CA,GAGXI,kBAAmB,SAASC,EAAkBN,EAAU5U,GACpD,IACImV,EADAC,EAAQF,EAAiBE,MAGzBR,EAAS7F,WACTqG,EAAQ,CAACA,IAGbD,EAAStW,EAAMsW,OAAOP,EAASS,OAC/BF,EAAOnV,EAAQoV,IAGnBE,gBAAiB,SAAShS,GACtB,IAAIiS,EAAY3T,KAAK4T,iBACjBxV,EAAS,GAEb,GAAIuV,EAAUlV,OAAQ,CAClB,IAQIoV,EAAgBC,EAAkB9B,EAAG/B,EARrC8D,EAAgBrS,EAAKoG,WACrBkM,EAAehU,KAAKyG,QAAQiG,MAC5BuH,EAAeD,EAAazW,MAAqC,eAA7ByW,EAAaE,YAA+B,UAAY,OAC5FjW,EAA0B,SAAjBgW,EAA0BjU,KAAKmU,UAAYnU,KAAKoU,aACzDC,EAAwBL,EAAazW,MAAqC,eAA7ByW,EAAaE,YAA+B,EAAI,EAC7FI,EAAarW,EAAO0V,EAAUlV,OAAS,EAAI4V,GAC3CrB,EAAWW,EAAUA,EAAUlV,OAAS,GACxC6U,EAAmBgB,EAAWP,GAKlC,IAFA/T,KAAKqT,kBAAkBC,EAAkBN,EAAU5U,GAE9C4T,EAAI2B,EAAUlV,OAAS,EAAGuT,GAAK,EAAGA,IAKnC,IAJAsC,EAAarW,EAAO+T,EAAIqC,GACxBrB,EAAWW,EAAU3B,GACrB6B,EAAiB,EAEZ5D,EAAI,EAAGA,EAAIqE,EAAW7V,OAAQwR,IAC/BqD,EAAmBgB,EAAWrE,GAC9B6D,EAAmBR,EAAiBW,GAAcxV,OAE/CqV,EAAmBC,EAAgBF,GAClC7T,KAAKqT,kBAAkBC,EAAkBN,EAAU5U,GAEnD6R,EAAIqE,EAAW7V,QAEfoV,GAAkBC,EAMlC,OAAO1V,GAGXmW,kBAAmB,SAASpN,EAAMF,EAAKrF,EAAOE,GAC1C,OAAO1E,EAAEoC,GAAMgV,IAAI,CACfrN,KAAMA,EACNF,IAAKA,EACLrF,MAAOA,EACPE,OAAQA,KAIhB2S,kBAAmB,WACfzU,KAAK6K,YAAY6J,SACjB1U,KAAK6K,YAAczN,KAGvBuX,gBAAiB,SAAUzE,GACnBA,GACAlQ,KAAK8K,UAAU8J,OAAO,cAAgB1E,EAAM,MAAMwE,SAElD1U,KAAK8K,UAAY9K,KAAK8K,UAAU8J,OAAO,eAAiB1E,EAAM,QAE9DlQ,KAAK8K,UAAU4J,SACf1U,KAAK8K,UAAY1N,MAIzB+T,UAAW,SAAS7J,EAASuN,GACzB,IAAIC,EAAgBxN,EAAQnF,UACxB4S,EAAmBzN,EAAQvF,aAC3BiT,EAAkBH,EAAUI,UAC5BC,EAAqBL,EAAUhM,aAC/BsM,EAAiBL,EAAgBC,EACjC3W,EAAS,EAGLA,EADA4W,EAAkBF,EACTA,EACFK,EAAkBH,EAAkBE,EACvCH,GAAoBG,EACVC,EAAiBD,EAElBJ,EAGJE,EAEbH,EAAUI,UAAY7W,GAG9BgX,mBAAoB,SAAS9N,GACzB,IAAI+N,EAAa/N,EAAQkN,IAAI,SACzBc,EAAmB,IAAIC,EAAMF,GAAYG,SACzCC,EAAkBnO,EAAQkN,IAAI,oBAC9BkB,EAAwB,IAAIH,EAAME,GAAiBD,SAEpDF,GAAoBI,GACnBpO,EAAQsL,SAAS/U,IAI1B8X,WAAY,SAASC,EAAUC,GAC3B,IAAIpP,EAAUzG,KAAKyG,QACfqP,EAAW1Y,EAAEuC,OAAO,GAAI1C,EAAM8Y,SAAUtP,EAAQuP,kBAChDC,EAAYH,EAASG,UACrBjI,EAAO,GACPkI,SAAcN,EACdO,EAAQ,CAAEC,QAAS,GAAI5U,MAAO,GAEpB,aAAT0U,GACAC,EAAMC,QAAQ,OAASD,EAAM3U,OAASoU,EACtC5H,GAAQ,cAAgBmI,EAAM3U,MAAQ,IAAMyU,EAAY,KACxDE,EAAM3U,SACU,WAAT0U,IACPlI,GAAQ4H,GAGZ,IAAIS,EAAOpZ,EAAM2Y,SAAS3Y,EAAM6O,OAAO+J,EAAS7H,GAAO8H,GAMvD,OAJIK,EAAM3U,MAAQ,IACd6U,EAAOjZ,EAAEkZ,MAAMD,EAAMF,EAAMC,UAGxBC,GAGXE,eAAgB,SAASvS,GACrB,IAAI2P,EAAY,GACZlN,EAAUzG,KAAKyG,QAEnB,IAAKA,EAAQkN,UACT,OAAOA,EAGX,IAAK,IAAInV,EAAM,EAAGA,EAAMiI,EAAQkN,UAAUlV,OAAQD,IAAO,CACrD,IAAIwU,EAAWvM,EAAQkN,UAAUnV,GAC7BiV,EAAQT,EAASS,MACjB8C,EAAiBtZ,EAAMkW,OAAOM,EAAbxW,CAAoB+G,GAEzC,GAAsB,MAAlBuS,EAAJ,CAIKvD,EAAS7F,WACVoJ,EAAiB,CAACA,IAKtB,IAFA,IAAIC,EAAOxD,EAASyD,WAAW3H,OAEtBiF,EAAgB,EAAGA,EAAgBwC,EAAe9X,OAAQsV,IAAiB,CAChF,IAAI2C,EAAgB,KAEhBlD,EAAQ+C,EAAexC,GAEtBf,EAASE,iBACVM,EAAQvW,EAAMkW,OAAOH,EAASI,eAAtBnW,CAAsCuW,IAGlD,IAAK,IAAImD,EAAY,EAAGA,EAAYH,EAAK/X,OAAQkY,IAC7C,GAAIH,EAAKG,GAAWC,IAAI5D,EAASI,iBAAmBI,EAAO,CACvDkD,EAAgBF,EAAKG,GACrB,MAIR,GAAsB,OAAlBD,EAAwB,CACxB,IAAIG,EAAgB5Z,EAAMkW,OAAOH,EAAS8D,eAAtB7Z,CAAsCyZ,GAC1D/C,EAAUjV,KAAK,CACX+U,MAAOT,EAASS,MAChBsD,MAAO/D,EAAS+D,MAChBhI,KAAMiE,EAASjE,KACf1P,KAAMpC,EAAMkW,OAAOH,EAASgE,cAAtB/Z,CAAqCyZ,GAC3ClD,MAAOA,EACPyD,MAAOJ,OAKvB,OAAOlD,GAGXuD,aAAc,SAASC,GACnB,IAAIC,GAAe,EAEdD,EAAOE,OACRF,EAAOE,KAAO,IAGlB,IAAK,IAAI7Y,EAAM,EAAGA,EAAM2Y,EAAOE,KAAK5Y,OAAQD,IACxC,GAAI2Y,EAAOE,KAAK7Y,GAAK8Y,OAAQ,CACzBF,EAAc5Y,EACd,MAIR,IAAIW,EAAagY,EAAOE,KAAKD,GAEzBA,GAAe,GACfD,EAAOE,KAAKE,OAAOH,EAAa,GAGpC,IAAIhD,EAAepU,KAAKoU,aAAenW,EAAOkZ,EAAQ,WAClDhD,EAAYnU,KAAKmU,UAAYlW,EAAOkZ,EAAQ,QAE7CnX,KAAKwX,kBACJxX,KAAKyX,eAAetD,GAGxBnU,KAAKrB,MAAQvB,EAAE,oEAAsE4C,KAAK+O,KAAO,iCAEjG,IAAI3P,EAAW+U,EAAUA,EAAU1V,OAAS,GAAGA,OAE/CuB,KAAKrB,MAAM+Y,KAAK,SAAS1U,QAAQ2U,OAAO3X,KAAK4X,YAAYxD,EAAcjV,EAAYC,IACnFY,KAAKrB,MAAM+Y,KAAK,SAAS1U,QAAQ2U,OAAO3X,KAAK6X,eAAezD,EAAcD,EAAW/U,IACrFY,KAAKsH,QAAQqQ,OAAO3X,KAAKrB,OAEtBqB,KAAKwX,kBACJxX,KAAK8X,sBAIN9X,KAAKuL,aACA6I,EAAa3V,OAAS,GACO,eAA7BuB,KAAK+X,qBACL9a,EAAM+a,YAAY5a,EAAEC,SAAWS,IAEnCkC,KAAKrB,MAAM+Y,KAAK,2CAA2C9V,MAAsD,IAA/CwS,EAAaA,EAAa3V,OAAS,GAAGA,OAAiB,KACzHuB,KAAKrB,MAAM+Y,KAAK,0CAA0C9V,MAAsD,IAA/CwS,EAAaA,EAAa3V,OAAS,GAAGA,OAAgB,MAG3HuB,KAAKiY,aAGTT,eAAgB,WACZ,OAAOxX,KAAKyG,QAAQyR,SAAWlY,KAAKmU,UAAU1V,OAAS,GAAKuB,KAAKsN,wBAGrEmK,eAAgB,SAAUtD,GACtB,IAEIgE,EAFAC,EAAYjE,EAAUA,EAAU1V,OAAS,GACzC4Z,EAAkBrY,KAAKqY,iBAAmB,GAG9CrY,KAAKsY,qBAAsB,EAgB3B,IAdA,IAAIC,EAAc,SAASta,EAAQ4B,GAC/B,IACA2Y,EAAaC,EADTC,EAAaza,EAAO4B,EAAQ,GAAGpB,OAAS,EAG5C,OAAIia,IACAF,EAAcva,EAAO4B,EAAQ,GAAG,GAChC4Y,EAAcxa,EAAO4B,GAAO,GAAG4Y,YAExBD,EAAYhF,QAAUiF,IAM5BE,EAAgBxE,EAAU1V,OAAS,EAAGka,GAAiB,EAAGA,IAAiB,CAChF,IAAIC,GAAO,EAYX,GAXGD,EAAgB,GAAKJ,EAAYpE,EAAWwE,KAC3CC,GAAO,EACPT,EAAcQ,GAGlBN,EAAgBM,GAAiBxE,EAAUwE,GAAepB,OAAO,GAE9DoB,EAAgBxE,EAAU1V,OAAS,GAAgD,GAA3C0V,EAAUwE,GAAe,GAAGtB,KAAK5Y,SACxE0V,EAAUwE,GAAe,GAAGtB,KAAOlD,EAAUwE,EAAgB,IAG9DC,EACC,MAYR,OARAP,EAAgBlE,EAAU1V,OAAS,GAAK0V,EAAUA,EAAU1V,OAAS,GAAG8Y,OAAOa,EAAU,GAAGf,KAAK5Y,QAEjGuB,KAAKqY,gBAAkBA,EAEnBA,EAAgBA,EAAgB5Z,OAAS,GAAGA,SAC5CuB,KAAKsY,qBAAsB,GAGxB,CACHH,YAAaA,GAAe,EAC5BhE,UAAWA,IAInB0E,iBAAkB,WAOd,IANA,IACIC,EACA3E,EACAgE,EACA/Y,EAJA2Z,EAAQ,GAMHJ,EAAgB,EAAGA,EAAgB3Y,KAAKqY,gBAAgB5Z,OAAQka,IACrEI,EAAMJ,GAAiB3Y,KAAKqY,gBAAgBM,GAGhDG,EAAmB9Y,KAAKyX,eAAesB,GACvC5E,EAAY2E,EAAiB3E,UAAUoD,OAAOuB,EAAiBX,aAC/DA,EAAcW,EAAiBX,YAC/B/Y,EAAW+U,EAAUA,EAAU1V,OAAS,GAAGA,cAEpCuB,KAAKgZ,QAEZ,IAAK,IAAI/I,EAAIkI,EAAalI,EAAIjQ,KAAKmU,UAAU1V,OAAQwR,IACjDjQ,KAAKmU,UAAUlE,GAAKjQ,KAAKmU,UAAUlE,GAAG6B,OAAOqC,EAAUlE,EAAIkI,IAS/D,GANAnY,KAAKrB,MACA+Y,KAAK,sBAAsBzU,OAAOyU,KAAK,SACvCC,OAAO3X,KAAKiZ,OAAO9E,EAAW/U,EAAUY,KAAKuL,aAAamM,KAAK,OAEpE1X,KAAK8X,sBAEFK,EAAc,EACb,IAAKlI,EAAI,EAAGA,EAAIkI,EAAalI,IAAK,CAC9B,IAAIiJ,EAAOlZ,KAAKrB,MAAM+Y,KAAK,mBAAqBzH,EAAI,KAAKhN,OACrDkW,EAAUC,SAASF,EAAKrG,KAAK,WAAW,IAAMzT,EAClD8Z,EAAKrG,KAAK,UAAWsG,GAI7BnZ,KAAKqZ,gBAAgBlF,EAAWnU,KAAKoU,cACrCpU,KAAKsZ,OAAOtZ,KAAKuZ,gBAGrBC,kBAAmB,WACf,IAAIpU,EAAOpF,KACPyZ,EAAerU,EAAKzG,MAAM+H,cAC1B5E,EAASsD,EAAK9F,QAAQoY,KAAK,SAAShR,cACpCuO,EAAY7P,EAAK9F,QAAQ2V,YAE7B,MAAM7P,EAAKkT,qBAAuBxW,EAAS2X,EAAexE,EACtD7P,EAAKyT,mBACL/W,EAASsD,EAAK9F,QAAQoY,KAAK,SAAShR,eAI5CoR,oBAAqB,WACjB,IAAI1S,EAAOpF,KACP0Z,EAAatU,EAAKuU,MAAMjC,KAAK,iDAEjC,GAAI1X,KAAK4Z,iBAAT,CAQAF,EAAaA,EAAWG,UAAUjV,UAElC,IAAI,IAAIqL,EAAI,EAAGA,GAAKyJ,EAAWjb,OAAQwR,IACnC7S,EAAEsc,EAAWzJ,IAAI4C,KAAK,iBAAkB7S,KAAK4Z,iBAAiB3J,SAV9DjQ,KAAK4Z,iBAAmBF,EAAWI,KAAI,SAASja,EAAOoT,GAEnD,OADA7V,EAAE6V,GAAMJ,KAAK,iBAAkBhT,GACxBA,KACRga,UAAUjV,WAWrBmV,cAAe,WAQX,IAPA,IAAI3U,EAAOpF,KACPga,EAAU5U,EAAKkC,QAAQoQ,KAAK,0BAC5B5V,EAASsD,EAAKkC,QAAQZ,cACtBmD,EAAY7J,KAAK4K,WACjBqP,EAAe,EACfC,EAAmBla,KAAKI,OAAS,OAAS,QAErC5B,EAAM,EAAGA,EAAMwb,EAAQvb,OAAQD,IACpCsD,GAAUrE,EAAYuc,EAAQG,GAAG3b,IAWrC,GARI4G,EAAKgV,cACLH,EAAexc,EAAY2H,EAAKgV,cAGhChV,EAAKnG,aAAexB,EAAY2H,EAAKnG,aAAegb,IACpDA,EAAexc,EAAY2H,EAAKnG,cAGhCmG,EAAKgV,aAAehV,EAAKnG,YAAa,CACtC,IAAIob,EAAkBjV,EAAKgV,YAAY1C,KAAK,SAAS1U,QAAQ0U,KAAK,MAElEtS,EAAKnG,YAAYyY,KAAK,MAAM5V,QAAO,SAASjC,GACxCzC,EAAE4C,MAAM8B,OAAOuY,EAAgBF,GAAGta,GAAOiC,aAI7CmY,IACAnY,GAAUmY,GAGV7U,EAAK+I,SACLrM,GAAUrE,EAAY2H,EAAK+I,SAG/B,IAAImM,EAAuB,SAASC,GAChC,IAAIC,EAAeC,EACnB,QAAIF,EAAG,GAAGG,MAAM5Y,SAGZ0Y,EAAgBD,EAAGzY,SAGvByY,EAAGzY,OAAO,QACV2Y,EAAYF,EAAGzY,SAEX0Y,GAAiBC,GACjBF,EAAGzY,OAAO,KACH,IAEXyY,EAAGzY,OAAO,KACH,KAGP6Y,EAAavV,EAAK9F,QAAQ,GAC1BC,EAAkBtC,EAAMoK,QAAQuT,oBAAkC,EAAZ/Q,EAE1D,GAAIyQ,EAAqBlV,EAAKkC,WACtBxF,EAAqB,EAAZ+H,EACTzE,EAAK9F,QAAQwC,OAAOA,GAEpBsD,EAAK9F,QAAQwC,OAAmB,EAAZ+H,EAAgB,GAGpCzE,EAAKuU,OAAO,CACZvU,EAAKuU,MAAM7X,OAAO6Y,EAAW9R,cAE7B,IAAIgS,EAAazV,EAAKuU,MAAMjC,KAAK,SAC7BmD,EAAWpc,QACXoc,EAAW/Y,OAAOsD,EAAK9F,QAAQoY,KAAK,SAAS,GAAG7O,cAKxDzD,EAAKzG,QACDgc,EAAW9Y,YAAc8Y,EAAW/R,YAAc,GAClDxD,EAAKzG,MAAMiU,SAAS,iBACpBxN,EAAKgV,YAAY5F,IAAI,WAAa0F,EAAkB3a,EAAiB6Z,SAAShU,EAAKgV,YAAY5Q,WAAWgL,IAAI,UAAY0F,EAAmB,UAAW,MAExJ9U,EAAKgV,YAAY5F,IAAI,WAAa0F,EAAkB,IAEpDS,EAAW5Y,aAAe4Y,EAAW9R,aAAe,GAAK8R,EAAW9R,aAAezD,EAAK9F,QAAQkK,SAAS,sBAAsB1H,SAC/HsD,EAAKzG,MAAMiU,SAAS,iBAEpBxN,EAAKzG,MAAMmc,YAAY,mBAKnClD,YAAa,SAASxD,EAAcjV,EAAYC,GAC5C,IAAI2b,EAAQ3d,EAAE,QAEd4C,KAAKf,YAAcA,EAAYmV,EAAa3V,OAAQU,EAAYC,GAChEY,KAAKoa,YAAcpa,KAAKgb,aAAa5G,EAAcjV,GAEnD,IAAI8b,EAAYjb,KAAKoa,YAAY1C,KAAK,cAWtC,OATIuD,EAAUxc,QACVwc,EAAUC,QAAQ,MAAMtI,SAAS,0BAGjC5S,KAAKuL,cACLwP,EAAMnI,SAAS,mBACfmI,EAAMnI,SAAS,YAAc5S,KAAK+X,oBAAsB,YAGrD3a,EAAE2d,GAAOpD,OAAO3X,KAAKf,YAAYyT,IAAI1S,KAAKoa,aAAae,KAAK,QAAQC,WAG/EvD,eAAgB,SAASzD,EAAcD,EAAW/U,GAK9C,OAJAY,KAAK2Z,MAAQ3Z,KAAKiZ,OAAO9E,EAAW/U,EAAUY,KAAKuL,aAEnDvL,KAAKV,QAAUA,EAAQ8U,EAAaA,EAAa3V,OAAS,GAAI0V,EAAUA,EAAU1V,OAAS,IAEpFrB,EAAE,QAAQua,OAAO3X,KAAK2Z,MAAMjH,IAAI1S,KAAKV,SAAS6b,KAAK,QAAQC,WAGtEnD,UAAW,WACP,IAAI7S,EAAOpF,KAEXA,KAAKV,QAAQ+O,GAAG,SAAWzQ,GAAI,WAC3BX,EAAMoe,WAAWjW,EAAKgV,YAAY1C,KAAK,6BAA8B1X,KAAKqb,YAC1EjW,EAAKuU,MAAM1E,UAAUjV,KAAKiV,WACvB7P,EAAKoS,kBACJpS,EAAKoU,uBAIb,IAAI8B,EAAgBre,EAAMqe,cAActb,KAAKV,QAAS,CAClDic,eAAgB,SAASjN,GACrB,OAAOlR,EAAEkR,EAAEtK,MAAMwX,QAAQN,QAAQ,2BAA2Bzc,OAAS,KAIzE6c,GAAiBA,EAAcG,UAE/Bzb,KAAK0b,eAAiBJ,EAEtBtb,KAAKV,QAAUgc,EAAcK,cAE7BL,EAAcG,QAAQG,KAAK,UAAU,SAAStN,GAC1CrR,EAAMoe,WAAWjW,EAAKgV,YAAY1C,KAAK,8BAA+BpJ,EAAEuN,OAAO5a,GAC/EmE,EAAKuU,MAAM1E,WAAW3G,EAAEuN,OAAO3a,GAC5BkE,EAAKoS,kBACJpS,EAAKoU,yBAMrBvO,oBAAqB,WACjB,IAAI7M,EAAS,GACTwN,EAAS5L,KAAKyG,QAAQiG,MACtBiH,EAAY3T,KAAKyG,QAAQkN,UAI7B,GAFA/H,EAASA,GAAUA,EAAO+H,UAAY/H,EAAO+H,UAAY,GAErDA,GAAa/H,EAAOnN,OACpB,IAAK,IAAID,EAAM,EAAGC,EAASkV,EAAUlV,OAAQD,EAAMC,EAAQD,IACvD,IAAK,IAAIsd,EAAW,EAAGC,EAAcnQ,EAAOnN,OAAQqd,EAAWC,EAAaD,IACpEnI,EAAUnV,GAAKuQ,OAASnD,EAAOkQ,IAC/B1d,EAAOM,KAAKiV,EAAUnV,IAMtCwB,KAAK4T,iBAAmBxV,GAG5B4d,kBAAmB,SAASC,EAAOC,EAAOvC,GACtC,OAAOwC,EAA8B,OAAQF,EAAOC,EAAOvC,IAG/DyC,qBAAsB,SAASzI,EAAWuI,EAAOtG,EAAUqG,EAAOtC,EAAOlB,GACrE,OAAO4D,EAA0B,UAAW1I,EAAWuI,EAAOtG,EAAUqG,EAAOtC,EAAOlB,IAG1FV,kBAAmB,WACf,IAAInM,EAAS5L,KAAKyG,QAAQiG,MAC1B,OAAOd,GAAUA,EAAO+H,UAAY/H,EAAOsI,YAAc,cAG7D1H,iBAAkB,WACd,OAAOxM,KAAKyG,QAAQiG,OAAS1M,KAAKyG,QAAQiG,MAAMnP,MAGpD+P,qBAAsB,WAClB,OAAOtN,KAAK4T,iBAAiBnV,QAAuC,aAA7BuB,KAAK+X,qBAGhDuE,kBAAmB,SAAS3I,EAAWuI,EAAOtG,EAAUqG,GACpD,OAAOI,EAA0B,OAAQ1I,EAAWuI,EAAOtG,EAAUqG,IAGzEM,mBAAoB,WAChB,OAAO,MAGXlL,eAAgB,WACZrR,KAAKV,QACAoY,KAAK,qBACL8E,WAAW,MACX3J,KAAK,iBAAiB,GACtBiI,YAAY,qBAGrB2B,QAAS,WACL,IAAIrX,EAAOpF,KAEXxC,EAAOwL,GAAGyT,QAAQxgB,KAAK+D,MAEnBoF,EAAKzG,QACL1B,EAAMwf,QAAQrX,EAAKzG,OACnByG,EAAKzG,MAAM+V,UAGXtP,EAAK+I,SACLlR,EAAMwf,QAAQrX,EAAK+I,QACnB/I,EAAK+I,OAAOuG,UAGhBtP,EAAKwG,OAAS,KACdxG,EAAKzG,MAAQ,KACbyG,EAAK9F,QAAU,KACf8F,EAAKuU,MAAQ,KACbvU,EAAKgV,YAAc,KACnBhV,EAAKnG,YAAc,KACnBmG,EAAK+I,OAAS,KACd/I,EAAKyF,YAAc,KACnBzF,EAAK0F,UAAY,MAGrB4R,aAAc,WACV,OAAOzf,EAAM0f,aAAaC,UAAUC,UAGxCC,cAAe,SAASvf,EAAMuK,EAAY7D,GACtC,IAAIrD,EACA8L,EAAQ1M,KAAK4L,OAAO9D,GACpBpG,EAAOgL,EAAM9I,OAAOrG,EAAMA,EAAM0G,GAAO,GAAO,GAAGvB,MAErD,KAAIoF,GAAc,GAIlB,OAAI9H,KAAKwM,mBACC9K,EAGN1B,KAAKsN,uBACAZ,EAAM5L,2BAIPF,EAAa8L,EAAM3G,YAAY9B,EAAQvC,EAAK7B,MAAQ6B,EAAKJ,iBAAiB,GACnEV,EAAWqC,SAJlBrC,EAAa8L,EAAM3G,YAAY2G,EAAM3L,yBAA2B,GAAG,GAC5DH,EAAWe,GAAGD,EAAK7B,QAMzB6M,EAAM5L,2BAIPF,EAAa8L,EAAM3G,YAAY9B,EAAQ,EAAIyI,EAAM5L,0BAA4B,EAAGmD,GACzEA,EAAQrD,EAAWqC,OAASrC,EAAWe,GAAGD,EAAK7B,SAJtDe,EAAa8L,EAAM3G,YAAYrE,EAAKJ,iBAAiB,GAC9CV,EAAWqC,SAQ9B8Z,cAAe,SAASxf,EAAMuK,EAAY7D,GACtC,IAAIrD,EAGAG,EAFA2L,EAAQ1M,KAAK4L,OAAO9D,GACpBpG,EAAOgL,EAAM9I,OAAOrG,EAAMA,EAAM0G,GAAO,GAAO,GAAGvB,MAGrD,KAAIoF,GAAc9H,KAAK4L,OAAOnN,OAAS,GAIvC,OAAIuB,KAAKwM,mBACC9K,EAGN1B,KAAKsN,uBACAZ,EAAM5L,2BAIPC,EAAyB2L,EAAM3L,yBAC/BH,EAAa8L,EAAM3G,YAAYhF,EAAyB,EAAIW,EAAKJ,gBAAiBP,GAE3EkD,EAAQrD,EAAWoC,QAAUpC,EAAWe,GAAGD,EAAKJ,mBANvDV,EAAa8L,EAAM3G,YAAY,GAAG,GAC3BnF,EAAWe,GAAGD,EAAK7B,QAQzB6M,EAAM5L,2BAIPF,EAAa8L,EAAM3G,YAAY,EAAG9B,GAC3BA,EAAQrD,EAAWoC,QAAUpC,EAAWe,GAAGD,EAAK7B,SAJvDe,EAAa8L,EAAM3G,YAAYrE,EAAKJ,iBAAiB,GAC9CV,EAAWoC,UAQ9Bga,qBAAsB,WAClB,MAAO,IAGXC,sBAAuB,aAIvBC,yBAA0B,SAAUlZ,GAChC,OAAOA,GAGXmZ,eAAgB,SAAS7V,EAAS4O,EAAMgG,GACpC,IAAI1a,EAAQ,EACR4b,EAAa,SAAS7C,GAClB,IAEIxJ,EAASsM,EAAiBpN,EAF1BqN,EAAY/C,EAAG2B,GACfqB,EAAWhD,EAAGrE,GAGlB,GAAGoH,EACC9b,GAAS8b,OAIb,GAAIC,GAAgC,IAApBA,EAAS9e,OAKzB,IAAIwR,EAAI,EAAGA,EAAIsN,EAAS9e,OAAQwR,IAC5Bc,EAAUwM,EAAStN,GACnBoN,EAAkBtM,EAAQmF,GAEvBmH,GAAmBA,EAAgB,GAC9BA,EAAgB,GAAGnH,IAA6C,IAApCmH,EAAgB,GAAGnH,GAAMzX,OAGrD2e,EAAWrM,GAFXvP,GAAS6b,EAAgB5e,OAK7B+C,GAAS,OAfbA,GAAS,GAsBrB,OAFA4b,EAAW9V,GAEJ9F,GAGXyX,OAAQ,SAAS9E,EAAW/U,EAAUoe,GAMlC,IALA,IAGIC,EAHArY,EAAOpF,KACPqX,EAAO,IAAIqG,MAAMte,GAAUL,OAAO4e,MAAM,KACxCC,EAAgB,GAGXjF,EAAgB,EAAGA,EAAgBxE,EAAU1V,OAAQka,IAAiB,CAC3E,IAAIpa,EAAQ4V,EAAUwE,GAClBkF,EAAa,EAEjB,IAAKJ,EAAW,EAAGA,EAAWlf,EAAME,OAAQgf,IAAY,CACpD,IAAIK,EAAavf,EAAMkf,GACnB5e,EAAYif,EAAWjf,WAAa,GACpCQ,EAAOye,EAAWze,KAClB0e,EAAU3Y,EAAK+X,eAAeW,EAAY,QAE9CD,GAAcE,EAEVD,EAAWxG,SACXzY,EAAY,6BAGZ2e,IAA6D,IAAjD3e,EAAU8T,QAAQ,4BAC9BtT,EAAO,wCAA0CA,EAAO,WAG5DgY,EAAKwG,EAAaE,IAAY,cAAgBlf,EAAY,cAAgBkf,EAAU,KAAO1e,EAAO,SAI1G,IAAKoe,EAAW,EAAGA,EAAWre,EAAUqe,IACpCG,EAAclf,KAAK2Y,EAAKoG,IAG5B,OAAIre,EAAW,EACJhC,IAGJA,EAAE,kCAAoCuB,EAAMif,GAAiB,WAGxE5C,aAAc,SAAS5G,EAAcjV,GAKjC,IAJA,IAEI6e,EAFA5Y,EAAOpF,KACPie,EAAgB,GAGXC,EAAmB,EAAGA,EAAmB9J,EAAa3V,OAAQyf,IAAoB,CACvF,IAAI3f,EAAQ6V,EAAa8J,GACrBC,EAAK,GAET,IAAKH,EAAc,EAAGA,EAAczf,EAAME,OAAQuf,IAAgB,CAC9D,IAAII,EAAS7f,EAAMyf,GACfK,EAAUjZ,EAAK+X,eAAeiB,EAAQ,UAAW,WAErDD,EAAGzf,KAAK,iBAAmB0f,EAAOC,SAAWA,GAAW,aAAeD,EAAOvf,WAAa,IAAO,KAAOuf,EAAO/e,KAAO,SAG3H4e,EAAcvf,KAAKyf,EAAGpf,KAAK,KAG/B,IAAIuf,EAAkB,GAEtB,GAAInf,EAAY,CACZ,IAAIof,EAAYnK,EAAaA,EAAa3V,OAAS,GAC/C+f,EAAK,GACLC,EAActf,EAAWsf,YAE7B,IAAKT,EAAc,EAAGA,EAAcO,EAAU9f,OAAQuf,IAClDQ,EAAG9f,KAAK,eAAiB6f,EAAUP,GAAanf,WAAa,IAAO,MAAQ4f,EAAcA,EAAYT,GAAe,UAAY,SAGrIM,EAAgB5f,KAAK8f,EAAGzf,KAAK,KAGjC,OAAO3B,EACH,wFAEQuB,EAAMsf,GACNjf,EAAYsf,EAAiB,8BAHrC,mBAmEZ,IAAI/I,EAAQ,SAAS/B,GACjB,IAEIkL,EACAC,EACAC,EACA3O,EACA4O,EANA5H,EAAQjX,KACR8e,EAAUvJ,EAAMuJ,QAOpB,GAAyB,IAArB7V,UAAUxK,OAGV,IAFA+U,EAAQyD,EAAM8H,aAAavL,GAEtBvD,EAAI,EAAGA,EAAI6O,EAAQrgB,OAAQwR,IAC5ByO,EAAKI,EAAQ7O,GAAGyO,GAChBC,EAAYG,EAAQ7O,GAAG+O,QACvBJ,EAAQF,EAAGO,KAAKzL,GAEZoL,IACAC,EAAWF,EAAUC,GACrB3H,EAAMiI,EAAIL,EAAS,GACnB5H,EAAMkI,EAAIN,EAAS,GACnB5H,EAAMmI,EAAIP,EAAS,SAI3B5H,EAAMiI,EAAIjW,UAAU,GACpBgO,EAAMkI,EAAIlW,UAAU,GACpBgO,EAAMmI,EAAInW,UAAU,GAGxBgO,EAAMiI,EAAIjI,EAAMoI,cAAcpI,EAAMiI,GACpCjI,EAAMkI,EAAIlI,EAAMoI,cAAcpI,EAAMkI,GACpClI,EAAMmI,EAAInI,EAAMoI,cAAcpI,EAAMmI,IAoFxC,SAAS5U,EAAeD,GAGpB,IAFA,IAAI+U,EAAU,GAEL9gB,EAAM,EAAGA,EAAM+L,EAAc9L,OAAQD,IAAO,CAKjD,IAJA,IAAIwF,EAAQuG,EAAc/L,GACtB+gB,EAAatV,EAAWjG,GACxBoa,EAAS,KAEJpM,EAAI,EAAGwN,EAAeF,EAAQ7gB,OAAQuT,EAAIwN,EAAcxN,IAAK,CAClE,IAAIyN,EAAcF,EAAW7c,MAAQ4c,EAAQtN,GAAGnP,IAEhD,GAAI0c,EAAW7c,MAAQ4c,EAAQtN,GAAGtP,OAAS+c,EAAa,CAEpDrB,EAASkB,EAAQtN,GAEboM,EAAOvb,IAAM0c,EAAW1c,MACxBub,EAAOvb,IAAM0c,EAAW1c,KAG5B,OAIHub,IACDA,EAAS,CAAE1b,MAAO6c,EAAW7c,MAAOG,IAAK0c,EAAW1c,IAAK8D,OAAQ,IACjE2Y,EAAQ5gB,KAAK0f,IAGjBA,EAAOzX,OAAOjI,KAAKsF,GAGvB,OAAOsb,EAGX,SAASnD,EAA8BpN,EAAMkN,EAAOC,EAAOvC,GACtD,IAAI+F,EAAgB,GAkBrB,OAhBCtiB,EAAEyU,KAAKoK,GAAO,SAASpc,EAAOoT,GAC3B,IAAIpU,EAAYoU,EAAKpU,UAAY,eAAiBoU,EAAKpU,UAAY,cAE/D8gB,EAAM,CACNtgB,KAAM4T,EAAK5T,KACXR,UAAWA,GAGZ8a,IAAU1G,EAAK2M,WACdD,EAAI5Q,GAAQoN,EAA8BpN,EAAMkE,EAAKqM,QAASpD,EAAOvC,GAErEgG,EAAI5Q,GAAQmN,EAEhBwD,EAAchhB,KAAKihB,MAGhBD,EAGX,SAASrD,EAA0BtN,EAAM4E,EAAWuI,EAAOtG,EAAUqG,EAAOtC,EAAOlB,GAC/E,IAAIzF,EAAWW,EAAU,GACrB+L,EAAgB,GAEpB,GAAI1M,EAAU,CACV,GAAIiJ,GAASC,EACT9e,EAAEyU,KAAKoK,GAAO,SAASpc,EAAOoT,GACtB0G,IAAU1G,EAAK2M,WACf3M,EAAKlE,GAAQsN,EAA0BtN,EAAM4E,EAAWV,EAAKqM,QAAS1J,EAAU3C,EAAKqM,QAAS3F,EAAOlB,GAErGxF,EAAKlE,GAAQsN,EAA0BtN,EAAM4E,EAAW,KAAMiC,EAAU,KAAM,KAAM6C,MAG5FiH,EAAgBzD,MACb,CACH,IAAIzF,EAAOxD,EAASyD,WAAW3H,OAE/B0H,EAAOA,EAAK5B,QAAO,SAAS3B,GACxB,IAAI4M,EAAkB5iB,EAAMkW,OAAOH,EAAS8M,qBAAtB7iB,CAA4CgW,GAElE,OAA2B,OAApB4M,QAAgD7iB,IAApB6iB,GAAiCA,IAAoBpH,KAG5F,IAAK,IAAI9B,EAAY,EAAGA,EAAYH,EAAK/X,OAAQkY,IAAa,CAC1D,IAAInD,EAAQvW,EAAMkW,OAAOH,EAASI,eAAtBnW,CAAsCuZ,EAAKG,IACnDgJ,EAAM,CACNtgB,KAAMuW,EAAS,CACXvW,KAAMpC,EAAM8iB,WAAW9iB,EAAMkW,OAAOH,EAASgE,cAAtB/Z,CAAqCuZ,EAAKG,KACjEM,MAAOha,EAAMkW,OAAOH,EAAS8D,eAAtB7Z,CAAsCuZ,EAAKG,IAClDlD,MAAOT,EAASS,MAChBsD,MAAO/D,EAAS+D,MAChBhI,KAAMiE,EAASjE,KACfyE,MAAOA,IAEX3U,UAAW,qCACX4Z,YAAaA,EACbjF,MAAOA,GAIXmM,EAAI5Q,GAAQsN,EAA0BtN,EAAM4E,EAAUqM,MAAM,GAAI9D,EAAOtG,EAAUqG,EAAOtC,EAAOnG,GAE/FkM,EAAchhB,KAAKihB,IAG3B,OAAOD,EAEX,OAAOxD,EAGX,SAAS+D,EAAczM,GACnB,OAAO,SAASP,GACZ,GAAIyK,MAAMwC,QAAQjN,IAASA,aAAgBhW,EAAMuZ,KAAK2J,gBAAiB,CACnE,IAAK,IAAI3hB,EAAM,EAAGA,EAAMyU,EAAKxU,OAAQD,IACjC,GAAIyU,EAAKzU,IAAQgV,EACb,OAAO,EAGf,OAAO,EAEX,OAAOP,GAAQO,GArMvB+B,EAAM6K,UAAY,CACdrB,aAAc,SAASvL,GAWnB,OAVAA,EAAQA,GAAS,OAEM,KAAnBA,EAAM6M,OAAO,KACb7M,EAAQA,EAAM8M,OAAO,EAAG,IAG5B9M,EAAQA,EAAM+M,QAAQ,KAAM,IAC5B/M,EAAQA,EAAMgN,cACdhN,EAAQ+B,EAAMkL,YAAYjN,IAAUA,EAE7BA,GAGX6L,cAAe,SAAS7L,GACpB,OAAQA,EAAQ,GAAKkN,MAAMlN,GAAU,EAAMA,EAAQ,IAAO,IAAMA,GAGpEmN,eAAgB,WACZ,IAAI1J,EAAQjX,KACZ,OAAOjC,EAAK6iB,KAAK,KAAQ3J,EAAMiI,EAAIjI,EAAMiI,EAAI,KAAQjI,EAAMkI,EAAIlI,EAAMkI,EAAI,KAAQlI,EAAMmI,EAAInI,EAAMmI,IAGrG5J,OAAQ,WACJ,IAAIyB,EAAQjX,KACR6gB,EAAkB5J,EAAM0J,iBAC5B,OAAOE,EAAkB,MAIjCtL,EAAMuJ,QAAU,CAAC,CACTJ,GAAI,+CACJM,QAAS,SAASJ,GACd,MAAO,CACHxF,SAASwF,EAAM,GAAI,IAAKxF,SAASwF,EAAM,GAAI,IAAKxF,SAASwF,EAAM,GAAI,OAG5E,CACCF,GAAI,0BACJM,QAAS,SAASJ,GACd,MAAO,CACHxF,SAASwF,EAAM,GAAI,IAAKxF,SAASwF,EAAM,GAAI,IAAKxF,SAASwF,EAAM,GAAI,OAG5E,CACCF,GAAI,0BACJM,QAAS,SAASJ,GACd,MAAO,CACHxF,SAASwF,EAAM,GAAKA,EAAM,GAAI,IAC9BxF,SAASwF,EAAM,GAAKA,EAAM,GAAI,IAC9BxF,SAASwF,EAAM,GAAKA,EAAM,GAAI,QAM9CrJ,EAAMkL,YAAc,CAChBK,KAAM,SAAUC,MAAO,SAAUC,MAAO,SACxCC,MAAO,SAAUC,KAAM,SAAUC,MAAO,SACxCC,MAAO,SAAUC,KAAM,SAAUC,SAAU,SAC3CC,SAAU,SAAUC,SAAU,SAAUC,UAAW,SACnDC,WAAY,SAAUC,QAAS,SAAUC,QAAS,SAClDC,QAAS,SAAUC,KAAM,SAAUC,UAAW,SAC9CC,KAAM,SAAUC,MAAO,SAAUC,YAAa,SAC9CC,OAAQ,SAAUC,MAAO,SAAUC,MAAO,SAC1CC,UAAW,SAAUC,UAAW,SAAUC,WAAY,SACtDC,UAAW,SAAUC,YAAa,SAAUC,KAAM,SAClDC,UAAW,SAAUC,MAAO,SAAUC,QAAS,SAC/CC,OAAQ,SAAUC,WAAY,SAAUC,KAAM,SAC9CC,MAAO,SAAUC,OAAQ,SAAUC,UAAW,SAC9CC,OAAQ,SAAUC,KAAM,SAAUC,KAAM,SACxCC,OAAQ,SAAUC,IAAK,SAAUC,UAAW,SAC5CC,OAAQ,SAAUC,OAAQ,SAAUC,QAAS,SAC7CC,UAAW,SAAUC,UAAW,SAAUC,KAAM,SAChDC,UAAW,SAAUC,IAAK,SAAUC,KAAM,SAC1CC,OAAQ,SAAUC,UAAW,SAAUC,OAAQ,SAC/CC,MAAO,SAAUC,MAAO,SAAUC,WAAY,SAC9CC,OAAQ,SAAUC,YAAa,UA2HnC,IAAIC,EAAsB,sBAC1B,SAAStS,EAAiB4G,GACtBA,EAAKra,UAAYqa,EAAKra,UAAU0hB,QAAQqE,EAAqB,IAAM,oBAGvExnB,EAAEuC,OAAOzC,EAAGwN,cAAe,CACvBJ,cAAeA,EACfG,WAAYA,EACZR,WAAYA,EACZH,gBAAiBA,EACjBmW,cAAeA,IAnxFvB,CAsxFG5iB,OAAOJ,MAAM4nB,QAETxnB,OAAOJ,QAEXpB,EAAoB","file":"js/chunk-vendors~7dff8178.f6616640.js","sourcesContent":["module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 0:\n/***/ (function(module, exports, __webpack_require__) {\n\n\tmodule.exports = __webpack_require__(1407);\n\n\n/***/ }),\n\n/***/ 3:\n/***/ (function(module, exports) {\n\n\tmodule.exports = function() { throw new Error(\"define cannot be used indirect\"); };\r\n\n\n/***/ }),\n\n/***/ 1050:\n/***/ (function(module, exports) {\n\n\tmodule.exports = require(\"./kendo.core\");\n\n/***/ }),\n\n/***/ 1407:\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function(f, define){\n\t !(__WEBPACK_AMD_DEFINE_ARRAY__ = [ __webpack_require__(1050) ], __WEBPACK_AMD_DEFINE_FACTORY__ = (f), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t})(function(){\n\n\tvar __meta__ = { // jshint ignore:line\n\t id: \"scheduler.view\",\n\t name: \"Scheduler View\",\n\t category: \"web\",\n\t description: \"The Scheduler Common View\",\n\t depends: [ \"core\" ],\n\t hidden: true\n\t};\n\t kendo.ui.scheduler = {};\n\t/* jshint eqnull: true */\n\t(function($) {\n\t var kendo = window.kendo,\n\t ui = kendo.ui,\n\t getDate = kendo.date.getDate,\n\t Widget = ui.Widget,\n\t outerHeight = kendo._outerHeight,\n\t keys = kendo.keys,\n\t NS = \".kendoSchedulerView\",\n\t INVERSE_COLOR_CLASS = \"k-event-inverse\",\n\t MIN_HORIZONTAL_SCROLL_SIZE = 1024,\n\t math = Math;\n\n\t function levels(values, key) {\n\t var result = [];\n\n\t function collect(depth, values) {\n\t values = values[key];\n\n\t if (values) {\n\t var level = result[depth] = result[depth] || [];\n\n\t for (var idx = 0; idx < values.length; idx++) {\n\t level.push(values[idx]);\n\t collect(depth + 1, values[idx]);\n\t }\n\t }\n\t }\n\n\t collect(0, values);\n\n\t return result;\n\t }\n\n\t function table(tableRows, className) {\n\t if (!tableRows.length) {\n\t return \"\";\n\t }\n\n\t return '' +\n\t '' +\n\t tableRows.join(\"\") +\n\t '' +\n\t '
';\n\t }\n\n\t function allDayTable(tableRows, className) {\n\t if (!tableRows.length) {\n\t return \"\";\n\t }\n\n\t return \"
\" + table(tableRows, className) + \"
\";\n\t }\n\n\t function timesHeader(columnLevelCount, allDaySlot, rowCount) {\n\t var tableRows = [];\n\n\t if (rowCount > 0) {\n\t for (var idx = 0; idx < columnLevelCount; idx++) {\n\t tableRows.push(\"​\");\n\t }\n\t }\n\n\t if (allDaySlot) {\n\t tableRows.push('' + allDaySlot.text + '');\n\t }\n\n\t if (rowCount < 1) {\n\t return $();\n\t }\n\n\t return $('
' + table(tableRows) + '
');\n\t }\n\n\t function content() {\n\t return $(\n\t '
' +\n\t '
' +\n\t '
'\n\t );\n\t }\n\t var HINT = '
' +\n\t '
' +\n\t '
' +\n\t '
' +\n\t '
' +\n\t '
' +\n\t '
';\n\n\n\t var ResourceView = kendo.Class.extend({\n\t init: function(index, isRtl, enforceAllDaySlot) {\n\t this._index = index;\n\t this._timeSlotCollections = [];\n\t this._daySlotCollections = [];\n\t this._isRtl = isRtl;\n\t this._enforceAllDaySlot = enforceAllDaySlot;\n\t },\n\n\t addTimeSlotCollection: function(startDate, endDate) {\n\t return this._addCollection(startDate, endDate, this._timeSlotCollections);\n\t },\n\n\t addDaySlotCollection: function(startDate, endDate) {\n\t return this._addCollection(startDate, endDate, this._daySlotCollections);\n\t },\n\n\t _addCollection: function(startDate, endDate, collections) {\n\t var collection = new SlotCollection(startDate, endDate, this._index, collections.length);\n\n\t collections.push(collection);\n\n\t return collection;\n\t },\n\n\t timeSlotCollectionCount: function() {\n\t return this._timeSlotCollections.length;\n\t },\n\n\t daySlotCollectionCount: function() {\n\t return this._daySlotCollections.length;\n\t },\n\n\t daySlotByPosition: function(x, y, byDate) {\n\t return this._slotByPosition(x, y, this._daySlotCollections, byDate);\n\t },\n\n\t timeSlotByPosition: function(x, y, byDate) {\n\t return this._slotByPosition(x, y, this._timeSlotCollections, byDate);\n\t },\n\n\t _slotByPosition: function(x, y, collections, byDate) {\n\t for (var collectionIndex = 0; collectionIndex < collections.length; collectionIndex++) {\n\t var collection = collections[collectionIndex];\n\n\t for (var slotIndex = 0; slotIndex < collection.count(); slotIndex++) {\n\t var slot = collection.at(slotIndex);\n\t var width = slot.offsetWidth;\n\t var height = slot.offsetHeight;\n\t var nextSlot;\n\n\t var horizontalEnd = slot.offsetLeft + width;\n\t var verticalEnd = slot.offsetTop + height;\n\n\t if (!byDate) {\n\t nextSlot = collection.at(slotIndex + 1);\n\t }\n\n\t if (nextSlot) {\n\t if (nextSlot.offsetLeft != slot.offsetLeft) {\n\t if (this._isRtl) {\n\t horizontalEnd = slot.offsetLeft + (slot.offsetLeft - nextSlot.offsetLeft);\n\t } else {\n\t horizontalEnd = nextSlot.offsetLeft;\n\t }\n\t } else {\n\t verticalEnd = nextSlot.offsetTop;\n\t }\n\t }\n\n\t if (x >= slot.offsetLeft && x < horizontalEnd &&\n\t y >= slot.offsetTop && y < verticalEnd) {\n\t return slot;\n\t }\n\t }\n\t }\n\t },\n\n\t refresh: function() {\n\t var collectionIndex;\n\n\t for (collectionIndex = 0; collectionIndex < this._daySlotCollections.length; collectionIndex++) {\n\t this._daySlotCollections[collectionIndex].refresh();\n\t }\n\n\t for (collectionIndex = 0; collectionIndex < this._timeSlotCollections.length; collectionIndex++) {\n\t this._timeSlotCollections[collectionIndex].refresh();\n\t }\n\t },\n\n\t timeSlotRanges: function(startTime, endTime) {\n\t var collections = this._timeSlotCollections;\n\t var start = this._startSlot(startTime, collections);\n\t var firstIndex, lastIndex;\n\n\t if (!start.inRange && startTime >= start.slot.end) {\n\t firstIndex = start.slot.collectionIndex + 1;\n\t start = null;\n\t }\n\n\t var end = start;\n\n\t if (startTime < endTime) {\n\t end = this._endSlot(endTime, collections);\n\t }\n\n\t if (end && !end.inRange && endTime <= end.slot.start) {\n\t lastIndex = end.slot.collectionIndex;\n\n\t if(endTime === end.slot.start && ((start && lastIndex > start.slot.collectionIndex) || (lastIndex > firstIndex))) {\n\t lastIndex -= 1;\n\t }\n\n\t end = null;\n\t }\n\n\t if (start === null && end === null) {\n\t if(endTime - startTime < kendo.date.MS_PER_DAY) {\n\t return [];\n\t } else {\n\t start = {\n\t inRange: true,\n\t slot: collections[firstIndex].first()\n\t };\n\n\t end = {\n\t inRange: true,\n\t slot: collections[lastIndex].last()\n\t };\n\t }\n\t }\n\n\t if (start === null) {\n\t if (end.slot.end <= startTime) {\n\t return [];\n\t }\n\n\t start = {\n\t inRange: true,\n\t slot: (collections[firstIndex] || collections[end.slot.collectionIndex]).first()\n\t };\n\t }\n\n\t if (end === null) {\n\t if (start.slot.start >= endTime) {\n\t return [];\n\t }\n\n\t end = {\n\t inRange: true,\n\t slot: (collections[lastIndex] || collections[start.slot.collectionIndex]).last()\n\t };\n\t }\n\n\t return this._continuousRange(TimeSlotRange, collections, start, end);\n\t },\n\n\t daySlotRanges: function(startTime, endTime, isAllDay) {\n\t var collections = this._daySlotCollections;\n\n\t var start = this._startSlot(startTime, collections, isAllDay);\n\n\t if (!start.inRange && startTime >= start.slot.end) {\n\t start = null;\n\t }\n\n\t var end = start;\n\n\t if (startTime < endTime) {\n\t end = this._endSlot(endTime, collections, isAllDay);\n\t }\n\n\t if (end && !end.inRange && endTime <= end.slot.start) {\n\t end = null;\n\t }\n\n\t if (start === null && end === null) {\n\t return [];\n\t }\n\n\t if (start === null) {\n\t if (end.slot.end <= startTime) {\n\t return [];\n\t }\n\n\t do {\n\t startTime += kendo.date.MS_PER_DAY;\n\t start = this._startSlot(startTime, collections, isAllDay);\n\t } while (!start.inRange && startTime >= start.slot.end);\n\t }\n\n\t if (end === null) {\n\t if (start.slot.start >= endTime) {\n\t return [];\n\t }\n\n\t do {\n\t endTime -= kendo.date.MS_PER_DAY;\n\t end = this._endSlot(endTime, collections, isAllDay);\n\t } while (!end.inRange && endTime <= end.slot.start);\n\t }\n\n\t return this._continuousRange(DaySlotRange, collections, start, end);\n\t },\n\n\t _continuousRange: function(range, collections, start, end) {\n\t var startSlot = start.slot;\n\t var endSlot = end.slot;\n\n\t var startIndex = startSlot.collectionIndex;\n\t var endIndex = endSlot.collectionIndex;\n\n\t var ranges = [];\n\n\t for (var collectionIndex = startIndex; collectionIndex <= endIndex; collectionIndex++) {\n\t var collection = collections[collectionIndex];\n\n\t var first = collection.first();\n\t var last = collection.last();\n\t var head = false;\n\t var tail = false;\n\n\t if (collectionIndex == startIndex) {\n\t tail = !start.inRange;\n\t }\n\n\t if (collectionIndex == endIndex) {\n\t head = !end.inRange;\n\t }\n\n\t if (first.start < startSlot.start) {\n\t first = startSlot;\n\t }\n\n\t if (last.start > endSlot.start) {\n\t last = endSlot;\n\t }\n\n\t if (startIndex < endIndex) {\n\t if (collectionIndex == startIndex) {\n\t head = true;\n\t } else if (collectionIndex == endIndex) {\n\t tail = true;\n\t } else {\n\t head = tail = true;\n\t }\n\t }\n\n\t ranges.push(new range({\n\t start: first,\n\t end: last,\n\t collection: collection,\n\t head: head,\n\t tail: tail\n\t }));\n\t }\n\n\t return ranges;\n\t },\n\n\t slotRanges: function(event, isDay) {\n\t var startTime = event._startTime || kendo.date.toUtcTime(event.start);\n\t var endTime = event._endTime || kendo.date.toUtcTime(event.end);\n\n\t if (isDay === undefined) {\n\t if(this._enforceAllDaySlot) {\n\t isDay = event.isMultiDay();\n\t } else {\n\t isDay = event.isAllDay;\n\t }\n\t }\n\n\t if (isDay) {\n\t return this.daySlotRanges(startTime, endTime, event.isAllDay);\n\t }\n\n\t return this.timeSlotRanges(startTime, endTime);\n\t },\n\n\t ranges: function(startTime, endTime, isDay, isAllDay) {\n\t if (typeof startTime != \"number\") {\n\t startTime = kendo.date.toUtcTime(startTime);\n\t }\n\n\t if (typeof endTime != \"number\") {\n\t endTime = kendo.date.toUtcTime(endTime);\n\t }\n\n\t if (isDay) {\n\t return this.daySlotRanges(startTime, endTime, isAllDay);\n\t }\n\n\t return this.timeSlotRanges(startTime, endTime);\n\t },\n\n\t _startCollection: function(date, collections) {\n\t for (var collectionIndex = 0; collectionIndex < collections.length; collectionIndex++) {\n\t var collection = collections[collectionIndex];\n\n\t if (collection.startInRange(date)) {\n\t return collection;\n\t }\n\t }\n\n\t return null;\n\t },\n\n\t _endCollection: function(date, collections, isAllDay) {\n\t for (var collectionIndex = 0; collectionIndex < collections.length; collectionIndex++) {\n\t var collection = collections[collectionIndex];\n\n\t if (collection.endInRange(date, isAllDay)) {\n\t return collection;\n\t }\n\t }\n\n\t return null;\n\t },\n\n\t _getCollections: function(isDay) {\n\t return isDay ? this._daySlotCollections : this._timeSlotCollections;\n\t },\n\n\t continuousSlot: function(slot, reverse) {\n\t var pad = reverse ? -1 : 1;\n\t var collections = this._getCollections(slot.isDaySlot);\n\t var collection = collections[slot.collectionIndex + pad];\n\n\t return collection ? collection[reverse ? \"last\" : \"first\"]() : undefined;\n\t },\n\n\t firstSlot: function() {\n\t var collections = this._getCollections(this.daySlotCollectionCount());\n\n\t return collections[0].first();\n\t },\n\n\t lastSlot: function() {\n\t var collections = this._getCollections(this.daySlotCollectionCount());\n\n\t return collections[collections.length - 1].last();\n\t },\n\n\t upSlot: function(slot, keepCollection, groupByDateVertically) {\n\t var that = this;\n\t var moveToDaySlot = function(isDaySlot, collectionIndex, index) {\n\t var isFirstCell = index === 0;\n\n\t if (!keepCollection && !isDaySlot && isFirstCell && that.daySlotCollectionCount()) {\n\t return that._daySlotCollections[0].at(collectionIndex);\n\t }\n\t };\n\n\t if (!this.timeSlotCollectionCount()) {\n\t keepCollection = true;\n\t }\n\n\t return this._verticalSlot(slot, -1, moveToDaySlot, groupByDateVertically);\n\t },\n\n\t downSlot: function(slot, keepCollection, groupByDateVertically) {\n\t var that = this;\n\t var moveToTimeSlot = function(isDaySlot, collectionIndex, index) {\n\t if (!keepCollection && isDaySlot && that.timeSlotCollectionCount()) {\n\t return that._timeSlotCollections[index].at(0);\n\t }\n\t };\n\n\t if (!this.timeSlotCollectionCount()) {\n\t keepCollection = true;\n\t }\n\n\t return this._verticalSlot(slot, 1, moveToTimeSlot, groupByDateVertically);\n\t },\n\n\t leftSlot: function(slot, groupByDateVertically) {\n\t return this._horizontalSlot(slot, -1, groupByDateVertically);\n\t },\n\n\t rightSlot: function(slot, groupByDateVertically) {\n\t return this._horizontalSlot(slot, 1, groupByDateVertically);\n\t },\n\n\t _horizontalSlot: function(slot, step, groupByDateVertically) {\n\t var index = slot.index;\n\t var isDaySlot = slot.isDaySlot;\n\t var collectionIndex = slot.collectionIndex;\n\t var collections = this._getCollections(isDaySlot);\n\n\t isDaySlot = groupByDateVertically ? false : isDaySlot;\n\n\t if (isDaySlot) {\n\t index += step;\n\t } else {\n\t collectionIndex += step;\n\t }\n\n\t var collection = collections[collectionIndex];\n\n\t return collection ? collection.at(index) : undefined;\n\t },\n\n\t _verticalSlot: function(slot, step, swapCollection, groupByDateVertically) {\n\t var index = slot.index;\n\t var isDaySlot = slot.isDaySlot;\n\t var collectionIndex = slot.collectionIndex;\n\t var collections = this._getCollections(isDaySlot);\n\n\t slot = swapCollection(isDaySlot, collectionIndex, index);\n\t if (slot) {\n\t return slot;\n\t }\n\n\t isDaySlot = groupByDateVertically ? false : isDaySlot;\n\n\t if (isDaySlot) {\n\t collectionIndex += step;\n\t } else {\n\t index += step;\n\t }\n\n\t var collection = collections[collectionIndex];\n\n\t return collection ? collection.at(index) : undefined;\n\t },\n\n\t _collection: function(index, multiday) {\n\t var collections = multiday? this._daySlotCollections : this._timeSlotCollections;\n\n\t return collections[index];\n\t },\n\n\t _startSlot: function(time, collections, isAllDay) {\n\t var collection = this._startCollection(time, collections);\n\t var inRange = true;\n\t var index = 0;\n\n\t if (!collection) {\n\t collection = collections[index];\n\n\t while(index < collections.length - 1 && collection._start < time) {\n\t index++;\n\t collection = collections[index];\n\t }\n\n\t inRange = false;\n\t }\n\n\t var slot = collection.slotByStartDate(time, isAllDay);\n\n\t if (!slot) {\n\t slot = collection.first();\n\t inRange = false;\n\t }\n\n\t return {\n\t slot: slot,\n\t inRange: inRange\n\t };\n\t },\n\n\t _endSlot: function(time, collections, isAllDay) {\n\t var collection = this._endCollection(time, collections, isAllDay);\n\t var inRange = true;\n\t var index = collections.length - 1;\n\n\t if (!collection) {\n\t collection = collections[index];\n\n\t while(index > 0 && collection._start > time) {\n\t index--;\n\t collection = collections[index];\n\t }\n\n\t inRange = false;\n\t }\n\n\t var slot = collection.slotByEndDate(time, isAllDay);\n\n\t if (!slot) {\n\t if(time <= collection.first().start) {\n\t slot = collection.first();\n\t } else {\n\t slot = collection.last();\n\t }\n\n\t inRange = false;\n\t }\n\n\t return {\n\t slot: slot,\n\t inRange: inRange\n\t };\n\t },\n\n\t getSlotCollection: function(index, isDay) {\n\t return this[isDay ? \"getDaySlotCollection\" : \"getTimeSlotCollection\"](index);\n\t },\n\n\t getTimeSlotCollection: function(index) {\n\t return this._timeSlotCollections[index];\n\t },\n\n\t getDaySlotCollection: function(index) {\n\t return this._daySlotCollections[index];\n\t }\n\t });\n\n\t var SlotRange = kendo.Class.extend({\n\t init: function(options) {\n\t $.extend(this, options);\n\t },\n\n\t innerHeight: function() {\n\t var collection = this.collection;\n\n\t var startIndex = this.start.index;\n\n\t var endIndex = this.end.index;\n\n\t var result = 0;\n\n\t for (var slotIndex = startIndex; slotIndex <= endIndex; slotIndex++) {\n\t result += collection.at(slotIndex).offsetHeight;\n\t }\n\n\t return result;\n\t },\n\n\t events: function () {\n\t return this.collection.events();\n\t },\n\n\t addEvent: function(event) {\n\t this.events().push(event);\n\t },\n\n\t startSlot: function() {\n\t if (this.start.offsetLeft > this.end.offsetLeft) {\n\t return this.end;\n\t }\n\t return this.start;\n\t },\n\n\t endSlot: function() {\n\t if (this.start.offsetLeft > this.end.offsetLeft) {\n\t return this.start;\n\t }\n\t return this.end;\n\t }\n\t });\n\n\t var TimeSlotRange = SlotRange.extend({\n\t innerHeight: function() {\n\t var collection = this.collection;\n\n\t var startIndex = this.start.index;\n\n\t var endIndex = this.end.index;\n\n\t var result = 0;\n\n\t for (var slotIndex = startIndex; slotIndex <= endIndex; slotIndex++) {\n\t result += collection.at(slotIndex).offsetHeight;\n\t }\n\n\t return result;\n\t },\n\n\t outerRect: function(start, end, snap) {\n\t return this._rect(\"offset\", start, end, snap);\n\t },\n\n\t _rect: function(property, start, end, snap) {\n\t var top;\n\t var bottom;\n\t var left;\n\t var right;\n\t var startSlot = this.start;\n\t var endSlot = this.end;\n\t var isRtl = kendo.support.isRtl(startSlot.element);\n\n\t if (typeof start != \"number\") {\n\t start = kendo.date.toUtcTime(start);\n\t }\n\n\t if (typeof end != \"number\") {\n\t end = kendo.date.toUtcTime(end);\n\t }\n\n\t if (snap) {\n\t top = startSlot.offsetTop;\n\t bottom = endSlot.offsetTop + endSlot[property + \"Height\"];\n\t if(isRtl) {\n\t left = endSlot.offsetLeft;\n\t right = startSlot.offsetLeft + startSlot[property + \"Width\"];\n\t } else {\n\t left = startSlot.offsetLeft;\n\t right = endSlot.offsetLeft + endSlot[property + \"Width\"];\n\t }\n\t } else {\n\t var startOffset = start - startSlot.start;\n\n\t if (startOffset < 0) {\n\t startOffset = 0;\n\t }\n\n\t var startSlotDuration = startSlot.end - startSlot.start;\n\n\t top = startSlot.offsetTop + startSlot[property + \"Height\"] * startOffset / startSlotDuration;\n\n\t var endOffset = endSlot.end - end;\n\n\t if (endOffset < 0) {\n\t endOffset = 0;\n\t }\n\n\t var endSlotDuration = endSlot.end - endSlot.start;\n\n\t bottom = endSlot.offsetTop + endSlot[property + \"Height\"] - endSlot[property + \"Height\"] * endOffset / endSlotDuration;\n\n\t if(isRtl) {\n\t left = Math.round(endSlot.offsetLeft + endSlot[property + \"Width\"]* endOffset / endSlotDuration);\n\t right = Math.round(startSlot.offsetLeft + startSlot[property + \"Width\"] - startSlot[property + \"Width\"] * startOffset / startSlotDuration);\n\t } else {\n\t left = Math.round(startSlot.offsetLeft + startSlot[property + \"Width\"] * startOffset / startSlotDuration);\n\t right = Math.round(endSlot.offsetLeft + endSlot[property + \"Width\"] - endSlot[property + \"Width\"] * endOffset / endSlotDuration);\n\t }\n\t }\n\n\t return {\n\t top: top,\n\t bottom: bottom,\n\t //first column has no left border\n\t left: left === 0 ? left : left + 1,\n\t right: right\n\t };\n\t },\n\n\t innerRect: function(start, end, snap) {\n\t return this._rect(\"client\", start, end, snap);\n\t }\n\t });\n\n\t var DaySlotRange = SlotRange.extend({\n\t innerWidth: function() {\n\t var collection = this.collection;\n\n\t var startIndex = this.start.index;\n\n\t var endIndex = this.end.index;\n\n\t var result = 0;\n\n\t var width = startIndex !== endIndex ? \"offsetWidth\" : \"clientWidth\";\n\n\t for (var slotIndex = startIndex; slotIndex <= endIndex; slotIndex++) {\n\t result += collection.at(slotIndex)[width];\n\t }\n\n\t return result;\n\t }\n\t });\n\n\t var SlotCollection = kendo.Class.extend({\n\t init: function(startDate, endDate, groupIndex, collectionIndex) {\n\t this._slots = [];\n\n\t this._events = [];\n\n\t this._start = kendo.date.toUtcTime(startDate);\n\n\t this._end = kendo.date.toUtcTime(endDate);\n\n\t this._groupIndex = groupIndex;\n\n\t this._collectionIndex = collectionIndex;\n\t },\n\t refresh: function() {\n\t for (var slotIndex = 0; slotIndex < this._slots.length; slotIndex++) {\n\t this._slots[slotIndex].refresh();\n\t }\n\t },\n\n\t startInRange: function(date) {\n\t return this._start <= date && date < this._end;\n\t },\n\n\t endInRange: function(date, isAllDay) {\n\t var end = isAllDay ? date < this._end : date <= this._end;\n\t return this._start <= date && end;\n\t },\n\n\t slotByStartDate: function(date) {\n\t var time = date;\n\n\t if (typeof time != \"number\") {\n\t time = kendo.date.toUtcTime(date);\n\t }\n\n\t for (var slotIndex = 0; slotIndex < this._slots.length; slotIndex++) {\n\t var slot = this._slots[slotIndex];\n\n\t if (slot.startInRange(time)) {\n\t return slot;\n\t }\n\t }\n\n\t return null;\n\t },\n\n\t slotByEndDate: function(date, allday) {\n\t var time = date;\n\n\t if (typeof time != \"number\") {\n\t time = kendo.date.toUtcTime(date);\n\t }\n\n\t if (allday) {\n\t return this.slotByStartDate(date, false);\n\t }\n\n\t for (var slotIndex = 0; slotIndex < this._slots.length; slotIndex++) {\n\t var slot = this._slots[slotIndex];\n\n\t if (slot.endInRange(time)) {\n\t return slot;\n\t }\n\t }\n\n\t return null;\n\t },\n\n\t count: function() {\n\t return this._slots.length;\n\t },\n\t events: function() {\n\t return this._events;\n\t },\n\t addTimeSlot: function(element, start, end, isHorizontal) {\n\t var slot = new TimeSlot(element, start, end, this._groupIndex, this._collectionIndex, this._slots.length, isHorizontal);\n\n\t this._slots.push(slot);\n\t },\n\t addDaySlot: function(element, start, end, eventCount) {\n\t var slot = new DaySlot(element, start, end, this._groupIndex, this._collectionIndex, this._slots.length, eventCount);\n\n\t this._slots.push(slot);\n\t },\n\t first: function() {\n\t return this._slots[0];\n\t },\n\t last: function() {\n\t return this._slots[this._slots.length - 1];\n\t },\n\t at: function(index) {\n\t return this._slots[index];\n\t }\n\t });\n\n\t var Slot = kendo.Class.extend({\n\t init: function(element, start, end, groupIndex, collectionIndex, index) {\n\t this.element = element;\n\t this.clientWidth = element.clientWidth;\n\t this.clientHeight = element.clientHeight;\n\t this.offsetWidth = element.offsetWidth;\n\t this.offsetHeight = element.offsetHeight;\n\t this.offsetTop = element.offsetTop;\n\t this.offsetLeft = element.offsetLeft;\n\n\t this.start = start;\n\t this.end = end;\n\t this.element = element;\n\t this.groupIndex = groupIndex;\n\t this.collectionIndex = collectionIndex;\n\t this.index = index;\n\t this.isDaySlot = false;\n\t },\n\n\t refresh: function() {\n\t var element = this.element;\n\n\t this.clientWidth = element.clientWidth;\n\t this.clientHeight = element.clientHeight;\n\t this.offsetWidth = element.offsetWidth;\n\t this.offsetHeight = element.offsetHeight;\n\t this.offsetTop = element.offsetTop;\n\t this.offsetLeft = element.offsetLeft;\n\t },\n\n\t startDate: function() {\n\t return kendo.timezone.toLocalDate(this.start);\n\t },\n\n\t endDate: function() {\n\t return kendo.timezone.toLocalDate(this.end);\n\t },\n\n\t startInRange: function(date) {\n\t return this.start <= date && date < this.end;\n\t },\n\n\t endInRange: function(date) {\n\t return this.start < date && date <= this.end;\n\t },\n\n\t startOffset: function() {\n\t return this.start;\n\t },\n\n\t endOffset: function() {\n\t return this.end;\n\t }\n\t });\n\n\t var TimeSlot = Slot.extend({\n\t init: function(element, start, end, groupIndex, collectionIndex, index, isHorizontal) {\n\t Slot.fn.init.apply(this, arguments);\n\n\t this.isHorizontal = isHorizontal ? true : false;\n\t },\n\n\t offsetX: function(rtl, offset) {\n\t if (rtl) {\n\t return this.offsetLeft + offset;\n\t } else {\n\t return this.offsetLeft + offset;\n\t }\n\t },\n\n\t startInRange: function(date) {\n\t return this.start <= date && date < this.end;\n\t },\n\n\t endInRange: function(date) {\n\t return this.start < date && date <= this.end;\n\t },\n\n\t startOffset: function(x, y, snap) {\n\t if (snap) {\n\t return this.start;\n\t }\n\n\t var offset = $(this.element).offset();\n\n\t var duration = this.end - this.start;\n\t var difference;\n\t var time;\n\n\t if (this.isHorizontal) {\n\t //need update\n\t var isRtl = kendo.support.isRtl(this.element);\n\t difference = x - offset.left;\n\t time = Math.floor(duration * ( difference / this.offsetWidth));\n\n\t if (isRtl) {\n\t return this.start + duration - time;\n\t }\n\t } else {\n\t difference = y - offset.top;\n\t time = Math.floor(duration * ( difference / this.offsetHeight));\n\t }\n\n\t return this.start + time;\n\t },\n\n\t endOffset: function(x, y, snap) {\n\t if (snap) {\n\t return this.end;\n\t }\n\n\t var offset = $(this.element).offset();\n\n\t var duration = this.end - this.start;\n\t var difference;\n\t var time;\n\n\t if (this.isHorizontal) {\n\t //need update\n\t var isRtl = kendo.support.isRtl(this.element);\n\t difference = x - offset.left;\n\t time = Math.floor(duration * ( difference / this.offsetWidth));\n\n\t if (isRtl) {\n\t return this.start + duration - time;\n\t }\n\t } else {\n\t difference = y - offset.top;\n\t time = Math.floor(duration * ( difference / this.offsetHeight));\n\t }\n\n\t return this.start + time;\n\t }\n\t });\n\n\t var DaySlot = Slot.extend({\n\t init: function(element, start, end, groupIndex, collectionIndex, index, eventCount) {\n\t Slot.fn.init.apply(this, arguments);\n\n\t this.eventCount = eventCount;\n\t this.isDaySlot = true;\n\n\t if (this.element.children.length) {\n\t var firstChild = this.element.children[0];\n\n\t this.firstChildHeight = firstChild.offsetHeight;\n\t this.firstChildTop = firstChild.offsetTop;\n\t } else {\n\t this.firstChildHeight = 3;\n\t this.firstChildTop = 0;\n\t }\n\t },\n\n\t startDate: function() {\n\t var date = new Date(this.start);\n\n\t return kendo.timezone.apply(date, \"Etc/UTC\");\n\t },\n\n\t endDate: function() {\n\t var date = new Date(this.end);\n\n\t return kendo.timezone.apply(date, \"Etc/UTC\");\n\t },\n\n\t startInRange: function(date) {\n\t return this.start <= date && date < this.end;\n\t },\n\n\t endInRange: function(date) {\n\t return this.start < date && date <= this.end;\n\t }\n\t });\n\n\t var scrollbarWidth;\n\t function scrollbar() {\n\t scrollbarWidth = scrollbarWidth ? scrollbarWidth : kendo.support.scrollbar();\n\t return scrollbarWidth;\n\t }\n\n\t kendo.ui.SchedulerView = Widget.extend({\n\t init: function(element, options) {\n\t Widget.fn.init.call(this, element, options);\n\n\t this._normalizeOptions();\n\t this._scrollbar = scrollbar();\n\t this._isRtl = kendo.support.isRtl(element);\n\t this._resizeHint = $();\n\t this._moveHint = $();\n\t this._cellId = kendo.guid();\n\t this._resourcesForGroups();\n\t this._selectedSlots = [];\n\t },\n\n\t visibleEndDate: function () {\n\t return this.endDate();\n\t },\n\n\t _normalizeOptions: function() {\n\t var options = this.options;\n\n\t if (options.startTime) {\n\t options.startTime.setMilliseconds(0);\n\t }\n\n\t if (options.endTime) {\n\t options.endTime.setMilliseconds(0);\n\t }\n\n\t if (options.workDayStart) {\n\t options.workDayStart.setMilliseconds(0);\n\t }\n\n\t if (options.workDayEnd) {\n\t options.workDayEnd.setMilliseconds(0);\n\t }\n\t },\n\n\t _isMobile: function() {\n\t var options = this.options;\n\t return (options.mobile === true && kendo.support.mobileOS) || options.mobile === \"phone\" || options.mobile === \"tablet\";\n\t },\n\n\t _addResourceView: function() {\n\t var resourceView = new ResourceView(this.groups.length, this._isRtl, this.options.enforceAllDaySlot);\n\n\t this.groups.push(resourceView);\n\n\t return resourceView;\n\t },\n\n\t dateForTitle: function() {\n\t return kendo.format(this.options.selectedDateFormat, this.startDate(), this.endDate());\n\t },\n\n\t shortDateForTitle: function() {\n\t return kendo.format(this.options.selectedShortDateFormat, this.startDate(), this.endDate());\n\t },\n\n\t mobileDateForTitle: function () {\n\t return kendo.format(this.options.selectedMobileDateFormat || this.options.selectedShortDateFormat, this.startDate(), this.endDate());\n\t },\n\n\t _changeGroup: function(selection, previous) {\n\t var method = previous ? \"prevGroupSlot\" : \"nextGroupSlot\";\n\t var slot = this[method](selection.start, selection.groupIndex, selection.isAllDay);\n\n\t if (slot) {\n\t selection.groupIndex += previous ? -1 : 1;\n\t }\n\n\t if (this._isGroupedByDate() && !slot) {\n\t selection.groupIndex = previous ? this.groups.length - 1 : 0;\n\t }\n\n\t return slot;\n\t },\n\n\t _changeDate: function(selection, slot, previous) {\n\t var group = this.groups[selection.groupIndex];\n\t var collections, index;\n\n\t if (previous) {\n\t collections = group._getCollections(false);\n\t index = group.daySlotCollectionCount() ? slot.index - 1 : slot.collectionIndex - 1;\n\n\t if (index >= 0) {\n\t return collections[index]._slots[collections[index]._slots.length - 1];\n\t }\n\t } else {\n\t collections = group._getCollections(group.daySlotCollectionCount());\n\t index = group.daySlotCollectionCount() ? 0 : slot.collectionIndex + 1;\n\t var slotIndex = group.daySlotCollectionCount() ? slot.collectionIndex + 1 : 0;\n\n\t if (collections[index] && collections[index]._slots[slotIndex]) {\n\t return collections[index]._slots[slotIndex];\n\t }\n\t }\n\t },\n\n\t _changeGroupContinuously: function() {\n\t return null;\n\t },\n\n\t _changeViewPeriod: function() {\n\t return false;\n\t },\n\n\t _isInRange: function(newStart, newEnd) {\n\t if(!newStart || !newEnd || !this.options.min || !this.options.max){\n\t return false;\n\t }\n\t return getDate(newStart) <= getDate(this.options.min) || getDate(newEnd) >= getDate(this.options.max);\n\t },\n\n\t _horizontalSlots: function(selection, ranges, multiple, reverse) {\n\t var method = reverse ? \"leftSlot\" : \"rightSlot\";\n\t var horizontalRange = {\n\t startSlot: ranges[0].start,\n\t endSlot: ranges[ranges.length - 1].end\n\t };\n\t var group = this.groups[selection.groupIndex];\n\t var isVertical = this._isVerticallyGrouped();\n\n\t if (!multiple) {\n\t var slot = this._normalizeHorizontalSelection(selection, ranges, reverse);\n\t if (slot) {\n\t horizontalRange.startSlot = horizontalRange.endSlot = slot;\n\t }\n\t }\n\n\t if (this._isGroupedByDate() && !multiple) {\n\t var tempSlot = this._changeGroup(selection, reverse);\n\n\t if(!tempSlot)\n\t {\n\t horizontalRange = this._getNextHorizontalRange(group, method, horizontalRange);\n\t } else {\n\t horizontalRange.startSlot = horizontalRange.endSlot = tempSlot;\n\t }\n\t } else {\n\t horizontalRange.startSlot = group[method](horizontalRange.startSlot);\n\t horizontalRange.endSlot = group[method](horizontalRange.endSlot);\n\n\t if (!multiple && !isVertical && (!horizontalRange.startSlot || !horizontalRange.endSlot)) {\n\t horizontalRange.startSlot = horizontalRange.endSlot = this._changeGroup(selection, reverse);\n\t }\n\t }\n\n\t var continuousSlot;\n\n\t if ((!horizontalRange.startSlot || !horizontalRange.endSlot) && !this._isGroupedByDate()) {\n\t continuousSlot = this._continuousSlot(selection, ranges, reverse);\n\t continuousSlot = this._changeGroupContinuously(selection, continuousSlot, multiple, reverse);\n\n\t if (continuousSlot) {\n\t horizontalRange.startSlot = horizontalRange.endSlot = continuousSlot;\n\t }\n\t }\n\n\t return horizontalRange;\n\t },\n\n\t _getNextHorizontalRange: function(group, method, horizontalRange){\n\t if(!this._isVerticallyGrouped()){\n\t horizontalRange.startSlot = group[method](horizontalRange.startSlot);\n\t horizontalRange.endSlot = group[method](horizontalRange.endSlot);\n\t }\n\n\t return horizontalRange;\n\t },\n\n\t _verticalSlots: function(selection, ranges, multiple, reverse) {\n\t var group = this.groups[selection.groupIndex];\n\t var slot;\n\t var verticalRange = {\n\t startSlot: ranges[0].start,\n\t endSlot: ranges[ranges.length - 1].end\n\t };\n\n\t if (!multiple) {\n\t slot = this._normalizeVerticalSelection(selection, ranges, reverse);\n\t if (slot) {\n\t verticalRange.startSlot = verticalRange.endSlot = slot;\n\t }\n\t }\n\n\t var method = reverse ? \"upSlot\" : \"downSlot\";\n\n\t verticalRange = this._getNextVerticalRange(group, method, verticalRange, multiple);\n\n\t if (!multiple && this._isVerticallyGrouped() && (!verticalRange.startSlot || !verticalRange.endSlot)) {\n\t if (this._isGroupedByDate()) {\n\t verticalRange.startSlot = verticalRange.endSlot = this._changeDate(selection, slot, reverse);\n\n\t }else{\n\t verticalRange.startSlot = verticalRange.endSlot = this._changeGroup(selection, reverse);\n\t }\n\t }\n\n\t return verticalRange;\n\t },\n\n\t _getNextVerticalRange: function(group, method, verticalRange, multiple){\n\t verticalRange.startSlot = group[method](verticalRange.startSlot, multiple);\n\t verticalRange.endSlot = group[method](verticalRange.endSlot, multiple);\n\n\t return verticalRange;\n\t },\n\n\t _normalizeHorizontalSelection: function() {\n\t return null;\n\t },\n\n\t _normalizeVerticalSelection: function(selection, ranges, reverse) {\n\t var slot;\n\n\t if (reverse) {\n\t slot = ranges[0].start;\n\t } else {\n\t slot = ranges[ranges.length - 1].end;\n\t }\n\n\t return slot;\n\t },\n\n\t _continuousSlot: function() {\n\t return null;\n\t },\n\n\t _footer: function() {\n\t var that = this;\n\t var options = that.options;\n\n\t if (that._isMobile()) {\n\t var html = '\";\n\t that.footer = $(html).appendTo(that.element);\n\t }\n\n\t if(that.footer) {\n\t that.footer.on(\"click\" + NS, \".k-scheduler-today\", function(e) {\n\t e.preventDefault();\n\t var timezone = that.options.timezone;\n\t var action = \"today\";\n\t var currentDate = new Date();\n\t var date;\n\n\t if(timezone){\n\t var timezoneOffset = kendo.timezone.offset(currentDate, timezone);\n\t date = kendo.timezone.convert(currentDate, currentDate.getTimezoneOffset(), timezoneOffset);\n\t }else{\n\t date = currentDate;\n\t }\n\n\t that.trigger(\"navigate\", { view: that.name || options.name, action: action, date: date });\n\t });\n\t }\n\t },\n\n\t constrainSelection: function(selection) {\n\t var group = this.groups[0];\n\t var slot;\n\n\t if (!this.inRange(selection)) {\n\t slot = group.firstSlot();\n\n\t selection.isAllDay = slot.isDaySlot;\n\t selection.start = slot.startDate();\n\t selection.end = slot.endDate();\n\t } else {\n\t if (!group.daySlotCollectionCount()) {\n\t selection.isAllDay = false;\n\t } else if (!group.timeSlotCollectionCount()) {\n\t selection.isAllDay = true;\n\t }\n\t }\n\n\t if (!this.groups[selection.groupIndex]) {\n\t selection.groupIndex = 0;\n\t }\n\t },\n\n\t move: function(selection, key, shift) {\n\t var handled = false;\n\t var group = this.groups[selection.groupIndex];\n\t var verticalByDate = this._isGroupedByDate() && this._isVerticallyGrouped();\n\n\t if (!group.timeSlotCollectionCount()) {\n\t selection.isAllDay = true;\n\t }\n\n\t var ranges = group.ranges(selection.start, selection.end, selection.isAllDay, false);\n\t var startSlot, endSlot, reverse, slots;\n\n\t if (key === keys.DOWN || key === keys.UP) {\n\t handled = true;\n\t reverse = key === keys.UP;\n\n\t this._updateDirection(selection, ranges, shift, reverse, true);\n\n\t slots = this._verticalSlots(selection, ranges, shift, reverse);\n\n\t if (!slots.startSlot && !shift && this._changeViewPeriod(selection, reverse, !verticalByDate)) {\n\t return handled;\n\t }\n\n\t } else if (key === keys.LEFT || key === keys.RIGHT) {\n\t handled = true;\n\t reverse = key === keys.LEFT;\n\n\t this._updateDirection(selection, ranges, shift, reverse, false);\n\n\t slots = this._horizontalSlots(selection, ranges, shift, reverse);\n\n\t if (!slots.startSlot && !shift && this._changeViewPeriod(selection, reverse, verticalByDate)) {\n\t return handled;\n\t }\n\t }\n\n\t if (handled) {\n\t startSlot = slots.startSlot;\n\t endSlot = slots.endSlot;\n\n\t if (shift) {\n\t var backward = selection.backward;\n\t if (backward && startSlot) {\n\t selection.start = startSlot.startDate();\n\t } else if (!backward && endSlot) {\n\t selection.end = endSlot.endDate();\n\t }\n\t } else if (startSlot && endSlot) {\n\t selection.isAllDay = startSlot.isDaySlot;\n\t selection.start = startSlot.startDate();\n\t selection.end = endSlot.endDate();\n\t }\n\n\t selection.events = [];\n\t }\n\n\t return handled;\n\t },\n\n\t moveToEventInGroup: function(group, slot, selectedEvents, prev) {\n\t var events = group._continuousEvents || [];\n\n\t var found, event;\n\n\t var pad = prev ? -1 : 1;\n\n\t var length = events.length;\n\t var idx = prev ? length - 1 : 0;\n\n\t if (selectedEvents.length) {\n\t var lastSelected = selectedEvents[selectedEvents.length - 1];\n\n\t for (var i = 0; i < events.length; i++) {\n\t if (events[i].uid === lastSelected) {\n\t idx = i + pad;\n\t }\n\t }\n\t }\n\n\t while (idx < length && idx > -1) {\n\t event = events[idx];\n\n\t if ( (!prev && event.start.startDate() >= slot.startDate()) ||\n\t (prev && event.start.startDate() <= slot.startDate()) ) {\n\n\t if (event && $.inArray(event.uid, selectedEvents) === -1) {\n\t found = !!event;\n\t break;\n\t }\n\t }\n\n\t idx += pad;\n\t }\n\n\t return event;\n\t },\n\n\t moveToEvent: function(selection, prev) {\n\t var groupIndex = selection.groupIndex;\n\n\t var group = this.groups[groupIndex];\n\t var slot = group.ranges(selection.start, selection.end, selection.isAllDay, false)[0].start;\n\n\t var length = this.groups.length;\n\t var pad = prev ? -1 : 1;\n\t var events = selection.events;\n\t var event;\n\n\t if (this._isGroupedByDate()) {\n\t var allEvents = this._getAllEvents();\n\t var uniqueAllEvents = this._getUniqueEvents(allEvents);\n\t var sortedEvents = this._getSortedEvents(uniqueAllEvents);\n\n\t if(events.length === 0){\n\t var eventIndex = this._getNextEventIndexBySlot(slot, sortedEvents, groupIndex);\n\n\t if(prev){\n\t eventIndex--;\n\t }\n\n\t event = sortedEvents[eventIndex];\n\t } else{\n\t var idx = this._getStartIdx(events, sortedEvents);\n\n\t while (idx < sortedEvents.length && idx > -1) {\n\t if(events.length > 0){\n\t slot = this._getSelectedSlot(slot, sortedEvents, event, idx, pad, prev);\n\t }\n\n\t if(!slot){\n\t break;\n\t }\n\n\t if ( (!prev && sortedEvents[idx].start.startDate() >= slot.startDate()) ||\n\t (prev && sortedEvents[idx].start.startDate() <= slot.startDate())) {\n\t if (events[0] != sortedEvents[idx].uid) {\n\t event = sortedEvents[idx];\n\t break;\n\t }\n\t }\n\t idx += pad;\n\t }\n\t }\n\t } else {\n\t while (groupIndex < length && groupIndex > -1) {\n\t event = this.moveToEventInGroup(group, slot, events, prev);\n\n\t groupIndex += pad;\n\t group = this.groups[groupIndex];\n\n\t if (!group || event) {\n\t break;\n\t }\n\n\t events = [];\n\t if (prev) {\n\t slot = group.lastSlot();\n\t } else {\n\t slot = group.firstSlot(true);\n\t }\n\t }\n\t }\n\n\t if (event) {\n\t selection.events = [ event.uid ];\n\t selection.start = event.start.startDate();\n\t selection.end = event.end.endDate();\n\t selection.isAllDay = event.start.isDaySlot;\n\t selection.groupIndex = event.start.groupIndex;\n\t }\n\n\t return !!event;\n\t },\n\n\t current: function(candidate) {\n\t if (candidate !== undefined) {\n\t this._current = candidate;\n\t if (this.content.has(candidate)) {\n\t this._scrollTo(candidate, this.content[0]);\n\t }\n\t } else {\n\t return this._current;\n\t }\n\t },\n\n\t select: function(selection) {\n\t this.clearSelection();\n\n\t if (!this._selectEvents(selection)) {\n\t this._selectSlots(selection);\n\t }\n\t },\n\n\t _getNextEventIndexBySlot: function(slot, sortedEvents, groupIndex){\n\t var tempIndex = 0;\n\t var slotStartDate = kendo.date.getDate(slot.startDate());\n\n\t for (var i = 0; i < sortedEvents.length; i++) {\n\t var eventStartDate = kendo.date.getDate(sortedEvents[i].start.startDate());\n\t if (slotStartDate > eventStartDate) {\n\t tempIndex++;\n\t continue;\n\t }\n\n\t if (slotStartDate.getTime() === eventStartDate.getTime() && groupIndex > sortedEvents[i].start.groupIndex) {\n\t tempIndex++;\n\t continue;\n\t }\n\n\t if (slotStartDate.getTime() === eventStartDate.getTime() &&\n\t groupIndex >= sortedEvents[i].start.groupIndex &&\n\t slot.startDate() > sortedEvents[i].start.startDate()) {\n\t tempIndex++;\n\t continue;\n\t }\n\n\t break;\n\t }\n\t return tempIndex;\n\t },\n\n\t _getSelectedSlot: function(slot, sortedEvents, event, idx, pad, prev) {\n\t if (sortedEvents[idx + pad] &&\n\t sortedEvents[idx].start.groupIndex !== sortedEvents[idx + pad].start.groupIndex) {\n\t var groupIndex = sortedEvents[idx + pad].start.groupIndex;\n\t var group = this.groups[groupIndex];\n\n\t if (!group || event) {\n\t slot = null;\n\t }\n\n\t if (prev) {\n\t slot = group.lastSlot();\n\t } else {\n\t slot = group.firstSlot(true);\n\t }\n\t }\n\t return slot;\n\t },\n\n\t _getStartIdx: function(events, sortedEvents){\n\t var selectedEventIndex = 0;\n\n\t $.each(sortedEvents, function() {\n\t if (this.uid === events[0]){\n\t return false;\n\t }\n\n\t selectedEventIndex++;\n\t });\n\n\t return selectedEventIndex;\n\t },\n\n\t _getAllEvents: function(){\n\t var allEvents = [];\n\t var groups = this.groups;\n\n\t for (var idx = 0; idx < groups.length; idx++) {\n\t if (groups[idx]._continuousEvents) {\n\t allEvents= allEvents.concat(groups[idx]._continuousEvents);\n\t }\n\t }\n\n\t return allEvents;\n\t },\n\n\t _getUniqueEvents: function(allEvents){\n\t var uniqueAllEvents = [];\n\n\t for (var i = 0; i < allEvents.length; i++) {\n\t var exists = false;\n\t for (var j = 0; j < uniqueAllEvents.length; j++) {\n\t if (allEvents[i].uid === uniqueAllEvents[j].uid) {\n\t exists = true;\n\t break;\n\t }\n\t }\n\n\t if (!exists) {\n\t uniqueAllEvents.push(allEvents[i]);\n\t }\n\t }\n\n\t return uniqueAllEvents;\n\t },\n\n\t _getSortedEvents: function(uniqueAllEvents){\n\t return uniqueAllEvents.sort(function(first, second) {\n\t var firstStartDate = first.start.startDate();\n\t var secondStartDate = second.start.startDate();\n\t var result = kendo.date.getDate(firstStartDate) - kendo.date.getDate(secondStartDate);\n\n\t if (result === 0) {\n\t result = first.start.groupIndex - second.start.groupIndex;\n\t }\n\n\t if (result === 0) {\n\t result = firstStartDate.getTime() - secondStartDate.getTime();\n\t }\n\n\t if (result === 0) {\n\t if (first.start.isDaySlot && !second.start.isDaySlot) {\n\t result = -1;\n\t }\n\n\t if (!first.start.isDaySlot && second.start.isDaySlot) {\n\t result = 1;\n\t }\n\t }\n\n\t if (result === 0) {\n\t result = $(first.element).index() - $(second.element).index();\n\t }\n\n\t return result;\n\t });\n\t },\n\n\t _selectSlots: function(selection) {\n\t var isAllDay = selection.isAllDay;\n\t var group = this.groups[selection.groupIndex];\n\n\t if (!group.timeSlotCollectionCount()) {\n\t isAllDay = true;\n\t }\n\n\t this._selectedSlots = [];\n\n\t var ranges = group.ranges(selection.start, selection.end, isAllDay, false);\n\t var element;\n\t var slot;\n\n\t for (var rangeIndex = 0; rangeIndex < ranges.length; rangeIndex++) {\n\t var range = ranges[rangeIndex];\n\t var collection = range.collection;\n\n\t for (var slotIndex = range.start.index; slotIndex <= range.end.index; slotIndex++) {\n\t slot = collection.at(slotIndex);\n\n\t element = slot.element;\n\t element.setAttribute(\"aria-selected\", true);\n\t addSelectedState(element);\n\n\t this._selectedSlots.push({\n\t start: slot.startDate(),\n\t end: slot.endDate(),\n\t element: element\n\t });\n\t }\n\t }\n\n\t if (selection.backward) {\n\t element = ranges[0].start.element;\n\t }\n\n\t this.current(element);\n\t },\n\n\t _selectEvents: function(selection) {\n\t var found = false;\n\t var events = selection.events;\n\t var groupEvents = this._getAllEvents();\n\t var idx, groupEvent, length = groupEvents.length;\n\n\t if (!events[0] || !groupEvents[0]) {\n\t return found;\n\t }\n\n\t var result = $();\n\t selection.events = [];\n\t for (idx = 0; idx < length; idx ++) {\n\t if ($.inArray(groupEvents[idx].uid, events) > -1) {\n\t groupEvent = groupEvents[idx];\n\t result = result.add(groupEvent.element);\n\t if(selection.events.indexOf(groupEvent.uid) === -1){\n\t selection.events.push(groupEvent.uid);\n\t }\n\t }\n\t }\n\n\t if (result[0]) {\n\t result.addClass(\"k-state-selected\").attr(\"aria-selected\", true);\n\t this.current(result.last()[0]);\n\t this._selectedSlots = [];\n\t found = true;\n\t }\n\n\t return found;\n\t },\n\n\t inRange: function(options) {\n\t var startDate = this.startDate();\n\t var endDate = kendo.date.addDays(this.endDate(), 1);\n\t var start = options.start;\n\t var end = options.end;\n\n\t return startDate <= start && start < endDate && startDate < end && end <= endDate;\n\t },\n\n\t _resourceValue: function(resource, item) {\n\t if (resource.valuePrimitive) {\n\t item = kendo.getter(resource.dataValueField)(item);\n\t }\n\t return item;\n\t },\n\n\t _setResourceValue: function(groupLevelMember, resource, result) {\n\t var value = groupLevelMember.value,\n\t setter;\n\n\t if (resource.multiple) {\n\t value = [value];\n\t }\n\n\t setter = kendo.setter(resource.field);\n\t setter(result, value);\n\t },\n\n\t _resourceBySlot: function(slot) {\n\t var resources = this.groupedResources;\n\t var result = {};\n\n\t if (resources.length) {\n\t var resourceIndex = slot.groupIndex,\n\t groupOptions = this.options.group,\n\t nestedMember = groupOptions.date || groupOptions.orientation === \"horizontal\" ? \"columns\" : \"rows\",\n\t levels = nestedMember === \"rows\" ? this.rowLevels : this.columnLevels,\n\t dateGroupCompensation = groupOptions.date && groupOptions.orientation === \"horizontal\" ? 1 : 0,\n\t groupLevel = levels[resources.length - 1 + dateGroupCompensation],\n\t resource = resources[resources.length - 1],\n\t groupLevelMember = groupLevel[resourceIndex],\n\t passedChildren, numberOfChildren, j, i;\n\n\t this._setResourceValue(groupLevelMember, resource, result);\n\n\t for (j = resources.length - 2; j >= 0; j--) {\n\t groupLevel = levels[j + dateGroupCompensation];\n\t resource = resources[j];\n\t passedChildren = 0;\n\n\t for (i = 0; i < groupLevel.length; i++) {\n\t groupLevelMember = groupLevel[i];\n\t numberOfChildren = groupLevelMember[nestedMember].length;\n\n\t if(numberOfChildren > resourceIndex - passedChildren) {\n\t this._setResourceValue(groupLevelMember, resource, result);\n\n\t i = groupLevel.length;\n\t } else {\n\t passedChildren += numberOfChildren;\n\t }\n\t }\n\t }\n\t }\n\n\t return result;\n\t },\n\n\t _createResizeHint: function(left, top, width, height) {\n\t return $(HINT).css({\n\t left: left,\n\t top: top,\n\t width: width,\n\t height: height\n\t });\n\t },\n\n\t _removeResizeHint: function() {\n\t this._resizeHint.remove();\n\t this._resizeHint = $();\n\t },\n\n\t _removeMoveHint: function (uid) {\n\t if (uid) {\n\t this._moveHint.filter(\"[data-uid='\" + uid + \"']\").remove();\n\n\t this._moveHint = this._moveHint.filter(\"[data-uid!='\" + uid + \"']\");\n\t } else {\n\t this._moveHint.remove();\n\t this._moveHint = $();\n\t }\n\t },\n\n\t _scrollTo: function(element, container) {\n\t var elementOffset = element.offsetTop,\n\t elementOffsetDir = element.offsetHeight,\n\t containerScroll = container.scrollTop,\n\t containerOffsetDir = container.clientHeight,\n\t bottomDistance = elementOffset + elementOffsetDir,\n\t result = 0;\n\n\t if (containerScroll > elementOffset) {\n\t result = elementOffset;\n\t } else if (bottomDistance > (containerScroll + containerOffsetDir)) {\n\t if (elementOffsetDir <= containerOffsetDir) {\n\t result = (bottomDistance - containerOffsetDir);\n\t } else {\n\t result = elementOffset;\n\t }\n\t } else {\n\t result = containerScroll;\n\t }\n\t container.scrollTop = result;\n\t },\n\n\t _inverseEventColor: function(element) {\n\t var eventColor = element.css(\"color\");\n\t var eventColorIsDark = new Color(eventColor).isDark();\n\t var eventBackground = element.css(\"background-color\");\n\t var eventBackgroundIsDark = new Color(eventBackground).isDark();\n\n\t if(eventColorIsDark == eventBackgroundIsDark) {\n\t element.addClass(INVERSE_COLOR_CLASS);\n\t }\n\t },\n\n\t _eventTmpl: function(template, wrapper) {\n\t var options = this.options,\n\t settings = $.extend({}, kendo.Template, options.templateSettings),\n\t paramName = settings.paramName,\n\t html = \"\",\n\t type = typeof template,\n\t state = { storage: {}, count: 0 };\n\n\t if (type === \"function\") {\n\t state.storage[\"tmpl\" + state.count] = template;\n\t html += \"#=this.tmpl\" + state.count + \"(\" + paramName + \")#\";\n\t state.count ++;\n\t } else if (type === \"string\") {\n\t html += template;\n\t }\n\n\t var tmpl = kendo.template(kendo.format(wrapper, html), settings);\n\n\t if (state.count > 0) {\n\t tmpl = $.proxy(tmpl, state.storage);\n\t }\n\n\t return tmpl;\n\t },\n\n\t eventResources: function(event) {\n\t var resources = [],\n\t options = this.options;\n\n\t if (!options.resources) {\n\t return resources;\n\t }\n\n\t for (var idx = 0; idx < options.resources.length; idx++) {\n\t var resource = options.resources[idx];\n\t var field = resource.field;\n\t var eventResources = kendo.getter(field)(event);\n\n\t if (eventResources == null) {\n\t continue;\n\t }\n\n\t if (!resource.multiple) {\n\t eventResources = [eventResources];\n\t }\n\n\t var data = resource.dataSource.view();\n\n\t for (var resourceIndex = 0; resourceIndex < eventResources.length; resourceIndex++) {\n\t var eventResource = null;\n\n\t var value = eventResources[resourceIndex];\n\n\t if (!resource.valuePrimitive) {\n\t value = kendo.getter(resource.dataValueField)(value);\n\t }\n\n\t for (var dataIndex = 0; dataIndex < data.length; dataIndex++) {\n\t if (data[dataIndex].get(resource.dataValueField) == value) {\n\t eventResource = data[dataIndex];\n\t break;\n\t }\n\t }\n\n\t if (eventResource !== null) {\n\t var resourceColor = kendo.getter(resource.dataColorField)(eventResource);\n\t resources.push({\n\t field: resource.field,\n\t title: resource.title,\n\t name: resource.name,\n\t text: kendo.getter(resource.dataTextField)(eventResource),\n\t value: value,\n\t color: resourceColor\n\t });\n\t }\n\t }\n\t }\n\t return resources;\n\t },\n\n\t createLayout: function(layout) {\n\t var allDayIndex = -1;\n\n\t if (!layout.rows) {\n\t layout.rows = [];\n\t }\n\n\t for (var idx = 0; idx < layout.rows.length; idx++) {\n\t if (layout.rows[idx].allDay) {\n\t allDayIndex = idx;\n\t break;\n\t }\n\t }\n\n\t var allDaySlot = layout.rows[allDayIndex];\n\n\t if (allDayIndex >= 0) {\n\t layout.rows.splice(allDayIndex, 1);\n\t }\n\n\t var columnLevels = this.columnLevels = levels(layout, \"columns\");\n\t var rowLevels = this.rowLevels = levels(layout, \"rows\");\n\n\t if(this._isVirtualized()) {\n\t this._trimRowLevels(rowLevels);\n\t }\n\n\t this.table = $('
');\n\n\t var rowCount = rowLevels[rowLevels.length - 1].length;\n\n\t this.table.find(\"tbody\").first().append(this._topSection(columnLevels, allDaySlot, rowCount));\n\t this.table.find(\"tbody\").first().append(this._bottomSection(columnLevels, rowLevels, rowCount));\n\t this.element.append(this.table);\n\n\t if(this._isVirtualized()) {\n\t this._updateDomRowLevels();\n\t }\n\n\t // Enable horizontal scrolling when mobile, grouped and less than 1024px width\n\t if(this._isMobile() &&\n\t columnLevels.length > 1 &&\n\t this._groupOrientation() === \"horizontal\" &&\n\t kendo._outerWidth($(window)) < MIN_HORIZONTAL_SCROLL_SIZE ){\n\n\t this.table.find(\".k-scheduler-content .k-scheduler-table\").width((columnLevels[columnLevels.length - 2].length * 100) + \"%\");\n\t this.table.find(\".k-scheduler-header .k-scheduler-table\").width((columnLevels[columnLevels.length - 2].length * 100) + \"%\");\n\t }\n\n\t this._scroller();\n\t },\n\n\t _isVirtualized: function () {\n\t return this.options.virtual && this.rowLevels.length > 1 && this._isVerticallyGrouped();\n\t },\n\n\t _trimRowLevels: function (rowLevels){\n\t var lastGroup = rowLevels[rowLevels.length - 2];\n\t var cachedRowLevels = this.cachedRowLevels || [];\n\t var levelMarker;\n\n\t this._hasContentToRender = true;\n\n\t var stopAtLevel = function(levels, index) {\n\t var hasParent = levels[index - 1].length > 0,\n\t parentLevel, parentValue;\n\n\t if (hasParent) {\n\t parentLevel = levels[index - 1][0];\n\t parentValue = levels[index][0].parentValue;\n\n\t return parentLevel.value !== parentValue;\n\t } else {\n\t return true;\n\t }\n\t };\n\n\t for (var rowLevelIndex = rowLevels.length - 2; rowLevelIndex >= 0; rowLevelIndex--) {\n\t var stop = false;\n\t if(rowLevelIndex > 0 && stopAtLevel(rowLevels, rowLevelIndex)) {\n\t stop = true;\n\t levelMarker = rowLevelIndex;\n\t }\n\n\t cachedRowLevels[rowLevelIndex] = rowLevels[rowLevelIndex].splice(1);\n\n\t if(rowLevelIndex < rowLevels.length - 2 && rowLevels[rowLevelIndex][0].rows.length != 1) {\n\t rowLevels[rowLevelIndex][0].rows = rowLevels[rowLevelIndex + 1];\n\t }\n\n\t if(stop) {\n\t break;\n\t }\n\t }\n\n\t cachedRowLevels[rowLevels.length - 1] = rowLevels[rowLevels.length - 1].splice(lastGroup[0].rows.length);\n\n\t this.cachedRowLevels = cachedRowLevels;\n\n\t if(!cachedRowLevels[cachedRowLevels.length - 1].length) {\n\t this._hasContentToRender = false;\n\t }\n\n\t return {\n\t levelMarker: levelMarker || 0,\n\t rowLevels: rowLevels\n\t };\n\t },\n\n\t createNextLayout: function (){\n\t var clone = [];\n\t var trimmedRowLevels;\n\t var rowLevels;\n\t var levelMarker;\n\t var rowCount;\n\n\t for (var rowLevelIndex = 0; rowLevelIndex < this.cachedRowLevels.length; rowLevelIndex++) {\n\t clone[rowLevelIndex] = this.cachedRowLevels[rowLevelIndex];\n\t }\n\n\t trimmedRowLevels = this._trimRowLevels(clone);\n\t rowLevels = trimmedRowLevels.rowLevels.splice(trimmedRowLevels.levelMarker);\n\t levelMarker = trimmedRowLevels.levelMarker;\n\t rowCount = rowLevels[rowLevels.length - 1].length;\n\n\t delete this._height;\n\n\t for (var i = levelMarker; i < this.rowLevels.length; i++) {\n\t this.rowLevels[i] = this.rowLevels[i].concat(rowLevels[i - levelMarker]);\n\t }\n\n\t this.table\n\t .find(\".k-scheduler-times\").last().find(\"tbody\")\n\t .append(this._times(rowLevels, rowCount, this._isMobile()).find(\"tr\"));\n\n\t this._updateDomRowLevels();\n\n\t if(levelMarker > 0) {\n\t for (i = 0; i < levelMarker; i++) {\n\t var cell = this.table.find(\"[data-row-level=\" + i + \"]\").last();\n\t var rowSpan = parseInt(cell.attr(\"rowspan\"),10) + rowCount;\n\t cell.attr(\"rowspan\", rowSpan);\n\t }\n\t }\n\n\t this._virtualContent(rowLevels, this.columnLevels);\n\t this.render(this._cachedEvents);\n\t },\n\n\t _tryRenderContent: function (){\n\t var that = this;\n\t var bufferHeight = that.table.innerHeight();\n\t var height = that.content.find(\"table\").innerHeight();\n\t var scrollTop = that.content.scrollTop();\n\n\t while(that._hasContentToRender && height - bufferHeight < scrollTop) {\n\t that.createNextLayout();\n\t height = that.content.find(\"table\").innerHeight();\n\t }\n\t },\n\n\t _updateDomRowLevels: function () {\n\t var that = this;\n\t var groupCells = that.times.find(\".k-scheduler-group-cell:not([data-row-level])\");\n\n\t if(!this._rowLevelIndices) {\n\t this._rowLevelIndices = groupCells.map(function(index, item){\n\t $(item).attr(\"data-row-level\", index);\n\t return index;\n\t }).toArray().reverse();\n\t return;\n\t }\n\n\t groupCells = groupCells.toArray().reverse();\n\n\t for(var i = 0; i <= groupCells.length; i++) {\n\t $(groupCells[i]).attr(\"data-row-level\", this._rowLevelIndices[i]);\n\t }\n\t },\n\n\t refreshLayout: function() {\n\t var that = this,\n\t toolbar = that.element.find(\"> .k-scheduler-toolbar\"),\n\t height = that.element.innerHeight(),\n\t scrollbar = this._scrollbar,\n\t headerHeight = 0,\n\t paddingDirection = this._isRtl ? \"left\" : \"right\";\n\n\t for (var idx = 0; idx < toolbar.length; idx++) {\n\t height -= outerHeight(toolbar.eq(idx));\n\t }\n\n\t if (that.datesHeader) {\n\t headerHeight = outerHeight(that.datesHeader);\n\t }\n\n\t if (that.timesHeader && outerHeight(that.timesHeader) > headerHeight) {\n\t headerHeight = outerHeight(that.timesHeader);\n\t }\n\n\t if (that.datesHeader && that.timesHeader) {\n\t var datesHeaderRows = that.datesHeader.find(\"table\").first().find(\"tr\");\n\n\t that.timesHeader.find(\"tr\").height(function(index) {\n\t $(this).height(datesHeaderRows.eq(index).height());\n\t });\n\t }\n\n\t if (headerHeight) {\n\t height -= headerHeight;\n\t }\n\n\t if (that.footer) {\n\t height -= outerHeight(that.footer);\n\t }\n\n\t var isSchedulerHeightSet = function(el) {\n\t var initialHeight, newHeight;\n\t if (el[0].style.height) {\n\t return true;\n\t } else {\n\t initialHeight = el.height();\n\t }\n\n\t el.height(\"auto\");\n\t newHeight = el.height();\n\n\t if (initialHeight != newHeight) {\n\t el.height(\"\");\n\t return true;\n\t }\n\t el.height(\"\");\n\t return false;\n\t };\n\n\t var contentDiv = that.content[0],\n\t scrollbarWidth = !kendo.support.kineticScrollNeeded ? scrollbar : 0;\n\n\t if (isSchedulerHeightSet(that.element)) { // set content height only if needed\n\t if (height > scrollbar * 2) { // do not set height if proper scrollbar cannot be displayed\n\t that.content.height(height);\n\t } else {\n\t that.content.height(scrollbar * 2 + 1);\n\t }\n\n\t if (that.times) {\n\t that.times.height(contentDiv.clientHeight);\n\n\t var timesTable = that.times.find(\"table\");\n\t if (timesTable.length) {\n\t timesTable.height(that.content.find(\"table\")[0].clientHeight);\n\t }\n\t }\n\t }\n\n\t if (that.table) {\n\t if (contentDiv.offsetWidth - contentDiv.clientWidth > 0) {\n\t that.table.addClass(\"k-scrollbar-v\");\n\t that.datesHeader.css(\"padding-\" + paddingDirection, scrollbarWidth - parseInt(that.datesHeader.children().css(\"border-\" + paddingDirection + \"-width\"), 10));\n\t } else {\n\t that.datesHeader.css(\"padding-\" + paddingDirection, \"\");\n\t }\n\t if (contentDiv.offsetHeight - contentDiv.clientHeight > 0 || contentDiv.clientHeight > that.content.children(\".k-scheduler-table\").height()) {\n\t that.table.addClass(\"k-scrollbar-h\");\n\t } else {\n\t that.table.removeClass(\"k-scrollbar-h\");\n\t }\n\t }\n\t },\n\n\t _topSection: function(columnLevels, allDaySlot, rowCount) {\n\t var thElm = $(\"\");\n\n\t this.timesHeader = timesHeader(columnLevels.length, allDaySlot, rowCount);\n\t this.datesHeader = this._datesHeader(columnLevels, allDaySlot);\n\n\t var dateGroup = this.datesHeader.find(\".k-nav-day\");\n\n\t if (dateGroup.length) {\n\t dateGroup.closest(\"tr\").addClass(\"k-scheduler-date-group\");\n\t }\n\n\t if (this._isMobile()) {\n\t thElm.addClass(\"k-mobile-header\");\n\t thElm.addClass(\"k-mobile-\" + this._groupOrientation() + \"-header\");\n\t }\n\n\t return $(thElm).append(this.timesHeader.add(this.datesHeader).wrap(\"\").parent());\n\t },\n\n\t _bottomSection: function(columnLevels, rowLevels, rowCount) {\n\t this.times = this._times(rowLevels, rowCount, this._isMobile());\n\n\t this.content = content(columnLevels[columnLevels.length - 1], rowLevels[rowLevels.length - 1]);\n\n\t return $(\"\").append(this.times.add(this.content).wrap(\"\").parent());\n\t },\n\n\t _scroller: function() {\n\t var that = this;\n\n\t this.content.on(\"scroll\" + NS, function () {\n\t kendo.scrollLeft(that.datesHeader.find(\">.k-scheduler-header-wrap\"), this.scrollLeft);\n\t that.times.scrollTop(this.scrollTop);\n\t if(that._isVirtualized()) {\n\t that._tryRenderContent();\n\t }\n\t });\n\n\t var touchScroller = kendo.touchScroller(this.content, {\n\t avoidScrolling: function(e) {\n\t return $(e.event.target).closest(\".k-event.k-event-active\").length > 0;\n\t }\n\t });\n\n\t if (touchScroller && touchScroller.movable) {\n\n\t this._touchScroller = touchScroller;\n\n\t this.content = touchScroller.scrollElement;\n\n\t touchScroller.movable.bind(\"change\", function(e) {\n\t kendo.scrollLeft(that.datesHeader.find(\">.k-scheduler-header-wrap\"), -e.sender.x);\n\t that.times.scrollTop(-e.sender.y);\n\t if(that._isVirtualized()) {\n\t that._tryRenderContent();\n\t }\n\t });\n\t }\n\t },\n\n\t _resourcesForGroups: function() {\n\t var result = [];\n\t var groups = this.options.group;\n\t var resources = this.options.resources;\n\n\t groups = groups && groups.resources ? groups.resources : [];\n\n\t if (resources && groups.length) {\n\t for (var idx = 0, length = resources.length; idx < length; idx++) {\n\t for (var groupIdx = 0, groupLength = groups.length; groupIdx < groupLength; groupIdx++) {\n\t if (resources[idx].name === groups[groupIdx]) {\n\t result.push(resources[idx]);\n\t }\n\t }\n\t }\n\t }\n\n\t this.groupedResources = result;\n\t },\n\n\t _createDateLayout: function(dates, inner, times) {\n\t return createDateLayoutConfiguration(\"rows\", dates, inner, times);\n\t },\n\n\t _createColumnsLayout: function(resources, inner, template, dates, times, parentValue) {\n\t return createLayoutConfiguration(\"columns\", resources, inner, template, dates, times, parentValue);\n\t },\n\n\t _groupOrientation: function() {\n\t var groups = this.options.group;\n\t return groups && groups.resources ? groups.orientation : \"horizontal\";\n\t },\n\n\t _isGroupedByDate: function() {\n\t return this.options.group && this.options.group.date;\n\t },\n\n\t _isVerticallyGrouped: function() {\n\t return this.groupedResources.length && this._groupOrientation() === \"vertical\";\n\t },\n\n\t _createRowsLayout: function(resources, inner, template, dates) {\n\t return createLayoutConfiguration(\"rows\", resources, inner, template, dates);\n\t },\n\n\t selectionByElement: function() {\n\t return null;\n\t },\n\n\t clearSelection: function() {\n\t this.content\n\t .find(\".k-state-selected\")\n\t .removeAttr(\"id\")\n\t .attr(\"aria-selected\", false)\n\t .removeClass(\"k-state-selected\");\n\t },\n\n\t destroy: function() {\n\t var that = this;\n\n\t Widget.fn.destroy.call(this);\n\n\t if (that.table) {\n\t kendo.destroy(that.table);\n\t that.table.remove();\n\t }\n\n\t if (that.footer) {\n\t kendo.destroy(that.footer);\n\t that.footer.remove();\n\t }\n\n\t that.groups = null;\n\t that.table = null;\n\t that.content = null;\n\t that.times = null;\n\t that.datesHeader = null;\n\t that.timesHeader = null;\n\t that.footer = null;\n\t that._resizeHint = null;\n\t that._moveHint = null;\n\t },\n\n\t calendarInfo: function() {\n\t return kendo.getCulture().calendars.standard;\n\t },\n\n\t prevGroupSlot: function(date, groupIndex, isDay) {\n\t var collection;\n\t var group = this.groups[groupIndex];\n\t var slot = group.ranges(date, date, isDay, false)[0].start;\n\n\t if (groupIndex <= 0) {\n\t return;\n\t }\n\n\t if (this._isGroupedByDate()) {\n\t return slot;\n\t }\n\n\t if (this._isVerticallyGrouped()) {\n\t if (!group.timeSlotCollectionCount()) {\n\t collection = group._collection(group.daySlotCollectionCount() - 1, true);\n\t return collection.at(slot.index);\n\t } else {\n\t collection = group._collection(isDay ? slot.index : slot.collectionIndex, false);\n\t return collection.last();\n\t }\n\t } else {\n\t if (!group.timeSlotCollectionCount()) {\n\t collection = group._collection(slot.collectionIndex, true);\n\t return collection.last();\n\t } else {\n\t collection = group._collection(isDay ? 0 : group.timeSlotCollectionCount() - 1, isDay);\n\t return isDay ? collection.last() : collection.at(slot.index);\n\t }\n\t }\n\t },\n\n\t nextGroupSlot: function(date, groupIndex, isDay) {\n\t var collection;\n\t var group = this.groups[groupIndex];\n\t var slot = group.ranges(date, date, isDay, false)[0].start;\n\t var daySlotCollectionCount;\n\n\t if (groupIndex >= this.groups.length - 1) {\n\t return;\n\t }\n\n\t if (this._isGroupedByDate()) {\n\t return slot;\n\t }\n\n\t if (this._isVerticallyGrouped()) {\n\t if (!group.timeSlotCollectionCount()) {\n\t collection = group._collection(0, true);\n\t return collection.at(slot.index);\n\t } else {\n\t daySlotCollectionCount = group.daySlotCollectionCount();\n\t collection = group._collection(daySlotCollectionCount ? 0 : slot.collectionIndex, daySlotCollectionCount);\n\n\t return isDay ? collection.first() : collection.at(slot.collectionIndex);\n\t }\n\t } else {\n\t if (!group.timeSlotCollectionCount()) {\n\t collection = group._collection(slot.collectionIndex, true);\n\t return collection.first();\n\t } else {\n\t collection = group._collection(0, isDay);\n\t return isDay ? collection.first() : collection.at(slot.index);\n\t }\n\t }\n\t },\n\n\t _eventOptionsForMove: function () {\n\t return {};\n\t },\n\n\t _updateEventForResize: function () {\n\t return;\n\t },\n\n\t _updateEventForSelection: function (event) {\n\t return event;\n\t },\n\n\t _innerElements: function(element, type, inner) {\n\t var count = 0,\n\t countInner = function(el) {\n\t var innerSpan = el[inner],\n\t innerEls = el[type],\n\t current, innerCollection, i;\n\n\t if(innerSpan) {\n\t count += innerSpan;\n\t return;\n\t }\n\n\t if(!innerEls || innerEls.length === 0) {\n\t count += 1;\n\t return;\n\t }\n\n\t for(i = 0; i < innerEls.length; i++) {\n\t current = innerEls[i];\n\t innerCollection = current[type];\n\n\t if(innerCollection && innerCollection[0]) {\n\t if(!innerCollection[0][type] || innerCollection[0][type].length === 0) {\n\t count += innerCollection.length;\n\t } else {\n\t countInner(current);\n\t }\n\t } else {\n\t count += 1;\n\t }\n\t }\n\t };\n\n\t countInner(element);\n\n\t return count;\n\t },\n\n\t _times: function(rowLevels, rowCount, isMobile) {\n\t var that = this;\n\t var rows = new Array(rowCount).join().split(\",\");\n\t var rowHeaderRows = [];\n\t var rowIndex;\n\n\t for (var rowLevelIndex = 0; rowLevelIndex < rowLevels.length; rowLevelIndex++) {\n\t var level = rowLevels[rowLevelIndex];\n\t var rowsBefore = 0;\n\n\t for (rowIndex = 0; rowIndex < level.length; rowIndex++) {\n\t var currentRow = level[rowIndex];\n\t var className = currentRow.className || \"\";\n\t var text = currentRow.text;\n\t var rowspan = that._innerElements(currentRow, \"rows\");\n\n\t rowsBefore += rowspan;\n\n\t if (currentRow.allDay) {\n\t className = \"k-scheduler-times-all-day\";\n\t }\n\n\t if (isMobile && className.indexOf(\"k-scheduler-group-cell\") !== -1) {\n\t text = '' + text + '';\n\t }\n\n\t rows[rowsBefore - rowspan] += '' + text + \"\";\n\t }\n\t }\n\n\t for (rowIndex = 0; rowIndex < rowCount; rowIndex++) {\n\t rowHeaderRows.push(rows[rowIndex]);\n\t }\n\n\t if (rowCount < 1) {\n\t return $();\n\t }\n\n\t return $('
' + table(rowHeaderRows) + '
');\n\t },\n\n\t _datesHeader: function(columnLevels, allDaySlot) {\n\t var that = this;\n\t var dateTableRows = [];\n\t var columnIndex;\n\n\t for (var columnLevelIndex = 0; columnLevelIndex < columnLevels.length; columnLevelIndex++) {\n\t var level = columnLevels[columnLevelIndex];\n\t var th = [];\n\n\t for (columnIndex = 0; columnIndex < level.length; columnIndex ++) {\n\t var column = level[columnIndex];\n\t var colspan = that._innerElements(column, \"columns\", \"colspan\");\n\n\t th.push('' + column.text + \"\");\n\t }\n\n\t dateTableRows.push(th.join(\"\"));\n\t }\n\n\t var allDayTableRows = [];\n\n\t if (allDaySlot) {\n\t var lastLevel = columnLevels[columnLevels.length - 1];\n\t var td = [];\n\t var cellContent = allDaySlot.cellContent;\n\n\t for (columnIndex = 0; columnIndex < lastLevel.length; columnIndex++) {\n\t td.push('' + (cellContent ? cellContent(columnIndex) : ' ') + '');\n\t }\n\n\t allDayTableRows.push(td.join(\"\"));\n\t }\n\n\t return $(\n\t '
' +\n\t '
' +\n\t table(dateTableRows) +\n\t allDayTable(allDayTableRows, \"k-scheduler-header-all-day\") +\n\t '
' +\n\t '
'\n\t );\n\t }\n\t });\n\n\t function collidingEvents(elements, start, end) {\n\t var idx,\n\t index,\n\t startIndex,\n\t overlaps,\n\t endIndex;\n\n\t for (idx = elements.length-1; idx >= 0; idx--) {\n\t index = rangeIndex(elements[idx]);\n\t startIndex = index.start;\n\t endIndex = index.end;\n\n\t overlaps = startIndex <= start && endIndex >= start;\n\n\t if (overlaps || (startIndex >= start && endIndex <= end) || (start <= startIndex && end >= startIndex)) {\n\t if (startIndex < start) {\n\t start = startIndex;\n\t }\n\n\t if (endIndex > end) {\n\t end = endIndex;\n\t }\n\t }\n\t }\n\n\t return eventsForSlot(elements, start, end);\n\t }\n\n\t function rangeIndex(eventElement) {\n\t return {\n\t start: eventElement.start,\n\t end: eventElement.end\n\t };\n\t }\n\n\t function eventsForSlot(elements, slotStart, slotEnd) {\n\t var events = [];\n\n\t for (var idx = 0; idx < elements.length; idx++) {\n\t var event = rangeIndex(elements[idx]);\n\n\t if ((event.start < slotStart && event.end > slotStart) || (event.start >= slotStart && event.end <= slotEnd)) {\n\t events.push(elements[idx]);\n\t }\n\t }\n\n\t return events;\n\t }\n\n\t function createColumns(eventElements) {\n\t return _createColumns(eventElements);\n\t }\n\n\t function createRows(eventElements) {\n\t return _createColumns(eventElements);\n\t }\n\n\t var Color = function(value) {\n\t var color = this,\n\t formats = Color.formats,\n\t re,\n\t processor,\n\t parts,\n\t i,\n\t channels;\n\n\t if (arguments.length === 1) {\n\t value = color.resolveColor(value);\n\n\t for (i = 0; i < formats.length; i++) {\n\t re = formats[i].re;\n\t processor = formats[i].process;\n\t parts = re.exec(value);\n\n\t if (parts) {\n\t channels = processor(parts);\n\t color.r = channels[0];\n\t color.g = channels[1];\n\t color.b = channels[2];\n\t }\n\t }\n\t } else {\n\t color.r = arguments[0];\n\t color.g = arguments[1];\n\t color.b = arguments[2];\n\t }\n\n\t color.r = color.normalizeByte(color.r);\n\t color.g = color.normalizeByte(color.g);\n\t color.b = color.normalizeByte(color.b);\n\t };\n\n\t Color.prototype = {\n\t resolveColor: function(value) {\n\t value = value || \"#000\";\n\n\t if (value.charAt(0) == \"#\") {\n\t value = value.substr(1, 6);\n\t }\n\n\t value = value.replace(/ /g, \"\");\n\t value = value.toLowerCase();\n\t value = Color.namedColors[value] || value;\n\n\t return value;\n\t },\n\n\t normalizeByte: function(value) {\n\t return (value < 0 || isNaN(value)) ? 0 : ((value > 255) ? 255 : value);\n\t },\n\n\t percBrightness: function() {\n\t var color = this;\n\t return math.sqrt(0.241 * color.r * color.r + 0.691 * color.g * color.g + 0.068 * color.b * color.b);\n\t },\n\n\t isDark: function() {\n\t var color = this;\n\t var brightnessValue = color.percBrightness();\n\t return brightnessValue < 180;\n\t }\n\t };\n\n\t Color.formats = [{\n\t re: /^rgb\\((\\d{1,3}),\\s*(\\d{1,3}),\\s*(\\d{1,3})\\)$/,\n\t process: function(parts) {\n\t return [\n\t parseInt(parts[1], 10), parseInt(parts[2], 10), parseInt(parts[3], 10)\n\t ];\n\t }\n\t }, {\n\t re: /^(\\w{2})(\\w{2})(\\w{2})$/,\n\t process: function(parts) {\n\t return [\n\t parseInt(parts[1], 16), parseInt(parts[2], 16), parseInt(parts[3], 16)\n\t ];\n\t }\n\t }, {\n\t re: /^(\\w{1})(\\w{1})(\\w{1})$/,\n\t process: function(parts) {\n\t return [\n\t parseInt(parts[1] + parts[1], 16),\n\t parseInt(parts[2] + parts[2], 16),\n\t parseInt(parts[3] + parts[3], 16)\n\t ];\n\t }\n\t }\n\t ];\n\n\t Color.namedColors = {\n\t aqua: \"00ffff\", azure: \"f0ffff\", beige: \"f5f5dc\",\n\t black: \"000000\", blue: \"0000ff\", brown: \"a52a2a\",\n\t coral: \"ff7f50\", cyan: \"00ffff\", darkblue: \"00008b\",\n\t darkcyan: \"008b8b\", darkgray: \"a9a9a9\", darkgreen: \"006400\",\n\t darkorange: \"ff8c00\", darkred: \"8b0000\", dimgray: \"696969\",\n\t fuchsia: \"ff00ff\", gold: \"ffd700\", goldenrod: \"daa520\",\n\t gray: \"808080\", green: \"008000\", greenyellow: \"adff2f\",\n\t indigo: \"4b0082\", ivory: \"fffff0\", khaki: \"f0e68c\",\n\t lightblue: \"add8e6\", lightgrey: \"d3d3d3\", lightgreen: \"90ee90\",\n\t lightpink: \"ffb6c1\", lightyellow: \"ffffe0\", lime: \"00ff00\",\n\t limegreen: \"32cd32\", linen: \"faf0e6\", magenta: \"ff00ff\",\n\t maroon: \"800000\", mediumblue: \"0000cd\", navy: \"000080\",\n\t olive: \"808000\", orange: \"ffa500\", orangered: \"ff4500\",\n\t orchid: \"da70d6\", pink: \"ffc0cb\", plum: \"dda0dd\",\n\t purple: \"800080\", red: \"ff0000\", royalblue: \"4169e1\",\n\t salmon: \"fa8072\", silver: \"c0c0c0\", skyblue: \"87ceeb\",\n\t slateblue: \"6a5acd\", slategray: \"708090\", snow: \"fffafa\",\n\t steelblue: \"4682b4\", tan: \"d2b48c\", teal: \"008080\",\n\t tomato: \"ff6347\", turquoise: \"40e0d0\", violet: \"ee82ee\",\n\t wheat: \"f5deb3\", white: \"ffffff\", whitesmoke: \"f5f5f5\",\n\t yellow: \"ffff00\", yellowgreen: \"9acd32\"\n\t };\n\n\t function _createColumns(eventElements) {\n\t var columns = [];\n\n\t for (var idx = 0; idx < eventElements.length; idx++) {\n\t var event = eventElements[idx];\n\t var eventRange = rangeIndex(event);\n\t var column = null;\n\n\t for (var j = 0, columnLength = columns.length; j < columnLength; j++) {\n\t var endOverlaps = eventRange.start > columns[j].end;\n\n\t if (eventRange.start < columns[j].start || endOverlaps) {\n\n\t column = columns[j];\n\n\t if (column.end < eventRange.end) {\n\t column.end = eventRange.end;\n\t }\n\n\t break;\n\t }\n\t }\n\n\t if (!column) {\n\t column = { start: eventRange.start, end: eventRange.end, events: [] };\n\t columns.push(column);\n\t }\n\n\t column.events.push(event);\n\t }\n\n\t return columns;\n\t }\n\n\t function createDateLayoutConfiguration(name, dates, inner, times) {\n\t var configuration = [];\n\n\t $.each(dates, function(index, item) {\n\t var className = item.className ? \"k-slot-cell \" + item.className : \"k-slot-cell\";\n\n\t var obj = {\n\t text: item.text,\n\t className: className\n\t };\n\n\t if(times && !item.minorTicks){\n\t obj[name] = createDateLayoutConfiguration(name, item.columns, inner, times);\n\t } else {\n\t obj[name] = inner;\n\t }\n\t configuration.push(obj);\n\t });\n\n\t return configuration;\n\t }\n\n\t function createLayoutConfiguration(name, resources, inner, template, dates, times, parentValue) {\n\t var resource = resources[0];\n\t var configuration = [];\n\n\t if (resource) {\n\t if (dates && inner) {\n\t $.each(dates, function(index, item) {\n\t if (times && !item.minorTicks) {\n\t item[name] = createLayoutConfiguration(name, resources, item.columns, template, item.columns, times, parentValue);\n\t } else {\n\t item[name] = createLayoutConfiguration(name, resources, null, template, null, null, parentValue);\n\t }\n\t });\n\t configuration = dates;\n\t } else {\n\t var data = resource.dataSource.view();\n\n\t data = data.filter(function(item) {\n\t var itemParentValue = kendo.getter(resource.dataParentValueField)(item);\n\n\t return itemParentValue === null || itemParentValue === undefined || itemParentValue === parentValue;\n\t });\n\n\t for (var dataIndex = 0; dataIndex < data.length; dataIndex++) {\n\t var value = kendo.getter(resource.dataValueField)(data[dataIndex]);\n\t var obj = {\n\t text: template({\n\t text: kendo.htmlEncode(kendo.getter(resource.dataTextField)(data[dataIndex])),\n\t color: kendo.getter(resource.dataColorField)(data[dataIndex]),\n\t field: resource.field,\n\t title: resource.title,\n\t name: resource.name,\n\t value: value\n\t }),\n\t className: \"k-slot-cell k-scheduler-group-cell\",\n\t parentValue: parentValue,\n\t value: value\n\t };\n\n\t // filter-out those inner resources that are not relevant\n\t obj[name] = createLayoutConfiguration(name, resources.slice(1), inner, template, dates, times, value);\n\n\t configuration.push(obj);\n\t }\n\t }\n\t return configuration;\n\t }\n\t return inner;\n\t }\n\n\t function groupEqFilter(value) {\n\t return function(item) {\n\t if (Array.isArray(item) || item instanceof kendo.data.ObservableArray) {\n\t for (var idx = 0; idx < item.length; idx++) {\n\t if (item[idx] == value) {\n\t return true;\n\t }\n\t }\n\t return false;\n\t }\n\t return item == value;\n\t };\n\t }\n\n\t var selectedStateRegExp = /\\s*k-state-selected/;\n\t function addSelectedState(cell) {\n\t cell.className = cell.className.replace(selectedStateRegExp, \"\") + \" k-state-selected\";\n\t }\n\n\t $.extend(ui.SchedulerView, {\n\t createColumns: createColumns,\n\t createRows: createRows,\n\t rangeIndex: rangeIndex,\n\t collidingEvents: collidingEvents,\n\t groupEqFilter: groupEqFilter\n\t });\n\n\t})(window.kendo.jQuery);\n\n\treturn window.kendo;\n\n\t}, __webpack_require__(3));\n\n\n/***/ })\n\n/******/ });"],"sourceRoot":""}