{"version":3,"sources":["webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/plugins/visualchars/index.js","webpack:///./node_modules/moment/locale/uz-latn.js","webpack:///./node_modules/moment/locale/ml.js","webpack:///./node_modules/moment/locale/cv.js","webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/plugins/autoresize/index.js","webpack:///./node_modules/moment/locale/is.js","webpack:///./node_modules/moment/locale/fo.js","webpack:///./node_modules/moment/locale/ja.js","webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/plugins/codesample/plugin.js","webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/plugins/toc/plugin.js","webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/plugins/textcolor/plugin.js","webpack:///./node_modules/moment/locale/es-do.js","webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/plugins/codesample/index.js","webpack:///./node_modules/moment/locale/ar-ma.js","webpack:///./node_modules/moment/locale/gom-latn.js","webpack:///./node_modules/moment/locale/fr-ch.js","webpack:///./node_modules/moment/locale/en-au.js","webpack:///./node_modules/moment/locale/tr.js","webpack:///./node_modules/moment/locale/da.js","webpack:///./node_modules/moment/locale/tl-ph.js","webpack:///./node_modules/moment/locale/eu.js","webpack:///./node_modules/moment/locale/th.js","webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/plugins/legacyoutput/index.js","webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/plugins/visualblocks/index.js","webpack:///./node_modules/moment/locale/sr-cyrl.js","webpack:///./node_modules/moment/locale/oc-lnc.js","webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/plugins/preview/index.js","webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/plugins/help/plugin.js","webpack:///./node_modules/moment/locale/mt.js","webpack:///./node_modules/moment/locale/ar-ly.js","webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/plugins/colorpicker/index.js","webpack:///./node_modules/moment/locale/be.js","webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/plugins/save/index.js","webpack:///./node_modules/moment/locale/ka.js","webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/plugins/fullpage/plugin.js","webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/plugins/textpattern/plugin.js","webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/plugins/charmap/index.js","webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/plugins/template/index.js","webpack:///./node_modules/moment/locale/ko.js","webpack:///./node_modules/moment/locale/ku.js","webpack:///./node_modules/moment/locale/bs.js","webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/plugins/searchreplace/index.js","webpack:///./node_modules/moment/locale/lt.js","webpack:///./node_modules/moment/locale/vi.js","webpack:///./node_modules/moment/locale/me.js","webpack:///./node_modules/moment/locale/af.js","webpack:///./node_modules/vue-tinymce-editor/src/components/TinymceVue.vue?b913","webpack:///node_modules/vue-tinymce-editor/src/components/TinymceVue.vue","webpack:///./node_modules/vue-tinymce-editor/src/components/TinymceVue.vue?501e","webpack:///./node_modules/vue-tinymce-editor/src/components/TinymceVue.vue","webpack:///./node_modules/vue-tinymce-editor/src/index.js","webpack:///./node_modules/moment/locale/uz.js","webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/plugins/preview/plugin.js","webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/plugins/paste/index.js","webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/plugins/imagetools/plugin.js","webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/plugins/template/plugin.js","webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/plugins/contextmenu/plugin.js","webpack:///./node_modules/moment/locale/en-ca.js","webpack:///./node_modules/moment/locale/en-gb.js","webpack:///./node_modules/moment/locale/mr.js","webpack:///./node_modules/moment/locale/ne.js","webpack:///./node_modules/moment/locale/zh-mo.js","webpack:///./node_modules/moment/locale/tg.js","webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/plugins/textcolor/index.js","webpack:///./node_modules/moment/locale/cs.js","webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/plugins/toc/index.js","webpack:///./node_modules/moment/locale/ta.js","webpack:///./node_modules/moment/locale/kn.js","webpack:///./node_modules/moment/locale/ar-kw.js","webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/plugins/image/plugin.js","webpack:///./node_modules/moment/locale/lb.js","webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/plugins/lists/plugin.js","webpack:///./node_modules/moment/locale sync ^\\.\\/.*$","webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/plugins/tabfocus/index.js","webpack:///./node_modules/moment/locale/az.js","webpack:///./node_modules/moment/locale/zh-hk.js","webpack:///./node_modules/moment/locale/hr.js","webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/plugins/anchor/index.js","webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/plugins/pagebreak/plugin.js","webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/plugins/hr/index.js","webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/plugins/emoticons/index.js","webpack:///./node_modules/moment/locale/id.js","webpack:///./node_modules/moment/locale/ga.js","webpack:///./node_modules/moment/locale/ur.js","webpack:///./node_modules/moment/locale/ss.js","webpack:///./node_modules/moment/locale/es-us.js","webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/plugins/paste/plugin.js","webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/plugins/imagetools/index.js","webpack:///./node_modules/moment/locale/tet.js","webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/plugins/emoticons/plugin.js","webpack:///./src/assets/img/backgroundTutor.png","webpack:///./node_modules/moment/locale/dv.js","webpack:///./node_modules/moment/locale/tk.js","webpack:///./node_modules/moment/locale/hu.js","webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/plugins/save/plugin.js","webpack:///./node_modules/moment/locale/zh-cn.js","webpack:///./node_modules/moment/locale/te.js","webpack:///./node_modules/moment/locale/sv.js","webpack:///./node_modules/moment/locale/ug-cn.js","webpack:///./node_modules/moment/locale/ms-my.js","webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/plugins/print/index.js","webpack:///./node_modules/moment/locale/eo.js","webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/plugins/insertdatetime/plugin.js","webpack:///./node_modules/vue-spinner/src/PulseLoader.vue?7a53","webpack:///./node_modules/moment/locale/sd.js","webpack:///./node_modules/moment/locale/br.js","webpack:///./node_modules/moment/locale/mi.js","webpack:///./node_modules/moment/locale/mk.js","webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/plugins/spellchecker/plugin.js","webpack:///./node_modules/moment/locale/nb.js","webpack:///./node_modules/moment/locale/kk.js","webpack:///./node_modules/moment/locale/ar-tn.js","webpack:///./node_modules/moment/locale/it.js","webpack:///./node_modules/moment/locale/it-ch.js","webpack:///./node_modules/moment/locale/en-nz.js","webpack:///./node_modules/moment/locale/fy.js","webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/plugins/spellchecker/index.js","webpack:///./node_modules/moment/locale/en-il.js","webpack:///./node_modules/moment/locale/sw.js","webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/plugins/link/plugin.js","webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/plugins/charmap/plugin.js","webpack:///./node_modules/moment/locale/sk.js","webpack:///./node_modules/moment/locale/yo.js","webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/plugins/fullscreen/index.js","webpack:///./node_modules/moment/locale/sl.js","webpack:///./node_modules/moment/locale/fi.js","webpack:///./node_modules/moment/locale/ar-sa.js","webpack:///./node_modules/moment/locale/bg.js","webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/plugins/bbcode/index.js","webpack:///./node_modules/moment/locale/my.js","webpack:///./node_modules/moment/locale/gl.js","webpack:///./node_modules/moment/locale/es.js","webpack:///./node_modules/vue-spinner/src/PulseLoader.vue?d496","webpack:///node_modules/vue-spinner/src/PulseLoader.vue","webpack:///./node_modules/vue-spinner/src/PulseLoader.vue?2038","webpack:///./node_modules/vue-spinner/src/PulseLoader.vue","webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/plugins/image/index.js","webpack:///./node_modules/moment/locale/el.js","webpack:///./node_modules/moment/locale/pl.js","webpack:///./node_modules/moment/locale/fa.js","webpack:///./node_modules/moment/locale/ar.js","webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/plugins/insertdatetime/index.js","webpack:///./node_modules/moment/locale/bn.js","webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/plugins/fullpage/index.js","webpack:///./node_modules/moment/locale/zh-tw.js","webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/plugins/code/plugin.js","webpack:///./node_modules/moment/locale/ru.js","webpack:///./node_modules/moment/locale/mn.js","webpack:///./node_modules/moment/locale/ky.js","webpack:///./node_modules/moment/locale/bn-bd.js","webpack:///./node_modules/moment/locale/ro.js","webpack:///./node_modules/moment/locale/cy.js","webpack:///./node_modules/vue2-timepicker/dist/VueTimepicker.common.js","webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/plugins/fullscreen/plugin.js","webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/plugins/importcss/plugin.js","webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/plugins/media/plugin.js","webpack:///./node_modules/moment/locale/fr.js","webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/plugins/anchor/plugin.js","webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/plugins/contextmenu/index.js","webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/plugins/wordcount/index.js","webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/plugins/help/index.js","webpack:///./node_modules/moment/locale/ar-dz.js","webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/plugins/advlist/plugin.js","webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/plugins/autolink/index.js","webpack:///./node_modules/moment/locale/bm.js","webpack:///./node_modules/moment/locale/gom-deva.js","webpack:///./node_modules/moment/locale/uk.js","webpack:///./node_modules/moment/locale/lo.js","webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/plugins/visualblocks/plugin.js","webpack:///./node_modules/moment/locale/de-at.js","webpack:///./node_modules/moment/locale/de.js","webpack:///./node_modules/moment/locale/tzm-latn.js","webpack:///./node_modules/moment/locale/jv.js","webpack:///./node_modules/moment/locale/es-mx.js","webpack:///./src/views/QuizTeacherCreateQuestion.vue?0cce","webpack:///src/views/QuizTeacherCreateQuestion.vue","webpack:///./src/views/QuizTeacherCreateQuestion.vue?7041","webpack:///./src/views/QuizTeacherCreateQuestion.vue","webpack:///./node_modules/moment/locale/en-sg.js","webpack:///./node_modules/moment/locale/nn.js","webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/plugins/bbcode/plugin.js","webpack:///./node_modules/moment/locale/lv.js","webpack:///./node_modules/moment/locale/de-ch.js","webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/plugins/autolink/plugin.js","webpack:///./node_modules/moment/locale/tzm.js","webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/plugins/nonbreaking/index.js","webpack:///./node_modules/moment/moment.js","webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/plugins/advlist/index.js","webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/plugins/link/index.js","webpack:///./node_modules/moment/locale/he.js","webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/plugins/table/plugin.js","webpack:///./node_modules/moment/locale/sq.js","webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/tinymce.js","webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/plugins/directionality/plugin.js","webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/plugins/noneditable/index.js","webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/plugins/autosave/plugin.js","webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/plugins/hr/plugin.js","webpack:///./node_modules/moment/locale/sr.js","webpack:///./node_modules/moment/locale/tzl.js","webpack:///./node_modules/moment/locale/tlh.js","webpack:///./node_modules/moment/locale/bo.js","webpack:///./node_modules/moment/locale/pt-br.js","webpack:///./src/assets/img/bgApps.jpg","webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/plugins/visualchars/plugin.js","webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/plugins/tabfocus/plugin.js","webpack:///./node_modules/moment/locale/fil.js","webpack:///./node_modules/moment/locale/hy-am.js","webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/plugins/wordcount/plugin.js","webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/plugins/nonbreaking/plugin.js","webpack:///./node_modules/moment/locale/ca.js","webpack:///./node_modules/moment/locale/fr-ca.js","webpack:///./node_modules/moment/locale/nl-be.js","webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/plugins/lists/index.js","webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/plugins/colorpicker/plugin.js","webpack:///./node_modules/moment/locale/hi.js","webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/plugins/directionality/index.js","webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/plugins/textpattern/index.js","webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/plugins/print/plugin.js","webpack:///./node_modules/moment/locale/gu.js","webpack:///./node_modules/moment/locale/en-ie.js","webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/plugins/autoresize/plugin.js","webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/plugins/searchreplace/plugin.js","webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/plugins/media/index.js","webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/plugins/noneditable/plugin.js","webpack:///./node_modules/moment/locale/km.js","webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/plugins/importcss/index.js","webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/themes/modern/theme.js","webpack:///./node_modules/moment/locale/ms.js","webpack:///./node_modules/moment/locale/et.js","webpack:///./node_modules/moment/locale/en-in.js","webpack:///./node_modules/moment/locale/si.js","webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/plugins/legacyoutput/plugin.js","webpack:///./src/views/QuizTeacherCreateQuestion.vue?6f42","webpack:///./node_modules/moment/locale/pt.js","webpack:///./node_modules/moment/locale/pa-in.js","webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/plugins/autosave/index.js","webpack:///./node_modules/moment/locale/gd.js","webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/plugins/pagebreak/index.js","webpack:///./node_modules/moment/locale/nl.js","webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/plugins/table/index.js","webpack:///./node_modules/moment/locale/x-pseudo.js","webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/plugins/code/index.js","webpack:///./node_modules/moment/locale/se.js"],"names":["global","factory","this","moment","uzLatn","defineLocale","months","split","monthsShort","weekdays","weekdaysShort","weekdaysMin","longDateFormat","LT","LTS","L","LL","LLL","LLLL","calendar","sameDay","nextDay","nextWeek","lastDay","lastWeek","sameElse","relativeTime","future","past","s","ss","m","mm","h","hh","d","dd","M","MM","y","yy","week","dow","doy","ml","monthsParseExact","meridiemParse","meridiemHour","hour","meridiem","minute","isLower","cv","output","affix","exec","dayOfMonthOrdinalParse","ordinal","plural","n","translate","number","withoutSuffix","key","isFuture","result","is","fo","ja","eras","since","offset","name","narrow","abbr","until","Infinity","eraYearOrdinalRegex","eraYearOrdinalParse","input","match","parseInt","l","ll","lll","llll","isPM","now","period","domGlobals","Cell","initial","value","get","set","v","clone","tinymce","util","Tools","resolve","global$1","getContentCss","editor","settings","codesample_content_css","getLanguages","codesample_languages","getDialogMinWidth","Math","min","DOM","getViewPort","w","getParam","getDialogMinHeight","Settings","window","global$2","_self","WorkerGlobalScope","self","Prism","lang","_","encode","tokens","Token","type","content","alias","map","replace","o","Object","prototype","toString","call","hasOwnProperty","languages","extend","id","redef","insertBefore","inside","before","insert","root","grammar","arguments","length","newToken","ret","token","DFS","callback","i","plugins","highlightAll","async","elements","document","querySelectorAll","element","highlightElement","language","parent","test","className","parentNode","nodeName","code","textContent","env","hooks","run","Worker","worker","filename","onmessage","evt","highlightedCode","data","innerHTML","postMessage","JSON","stringify","immediateClose","highlight","text","tokenize","strarr","rest","tokenloop","patterns","j","pattern","lookbehind","lookbehindLength","str","lastIndex","from","index","slice","len","to","after","args","push","wrapped","Array","splice","apply","all","add","callbacks","join","tag","classes","attributes","spellcheck","aliases","addEventListener","message","parse","close","isCodeSample","elm","indexOf","trimArg","predicateFn","arg1","arg2","markup","comment","prolog","doctype","cdata","punctuation","namespace","entity","title","xml","html","mathml","svg","css","atrule","rule","url","selector","string","property","important","function","style","clike","javascript","keyword","regex","interpolation","script","js","c","operator","macro","boolean","csharp","preprocessor","cpp","java","php","constant","delimiter","variable","package","tokenStack","backupCode","t","python","ruby","symbol","builtin","Utils","getSelectedCodeSample","node","selection","getNode","insertCodeSample","undoManager","transact","dom","setAttrib","select","insertContent","$","removeAttr","getCurrentCode","CodeSample","getLanguages$1","defaultLanguages","customLanguages","getCurrentLanguage","matches","Languages","Dialog","open","minWidth","minHeight","currentLanguage","currentLanguages","currentCode","windowManager","layout","direction","align","body","label","maxWidth","values","multiline","ariaLabel","flex","autofocus","onSubmit","e","register","addCommand","isCollapsed","formatter","toggle","Commands","setup","on","filter","each","idx","$elm","attr","trim","empty","append","unprocessedCodeSamples","contentEditable","find","replaceChild","getDoc","createTextNode","FilterContent","loadCss","pluginUrl","addedInlineCss","addedCss","linkElm","contentCss","inline","create","rel","href","getElementsByTagName","appendChild","LoadCss","register$1","addButton","cmd","addMenuItem","icon","Buttons","Plugin","ev","target","global$3","getTocClass","getTocHeader","tagName","getTocDepth","depth","prefix","counter","guid","Date","getTime","Guid","tocId","generateSelector","hasHeaders","readHeaders","tocClass","headerTag","headers","el","hasClass","level","getMinLevel","minLevel","generateTitle","openTag","closeTag","generateTocHtml","generateTocContentHtml","ii","nextLevel","prevLevel","isEmptyOrOffscren","nodes","getParents","insertToc","$tocElm","updateToc","Toc","children","toggleState","ctrl","control","disabled","readonly","isToc","getBody","contains","tooltip","onPostRender","context","addContextToolbar","getCurrentColor","format","color","getStart","mapColors","colorMap","colors","applyFormat","focus","nodeChanged","removeFormat","remove","TextColor","defaultColorMap","getTextColorMap","getForeColorMap","getBackColorMap","getTextColorRows","getTextColorCols","getForeColorRows","getBackColorRows","getForeColorCols","getBackColorCols","getColorPickerCallback","hasColorPicker","getHtml","cols","rows","last","x","count","uniqueId","getColorCellHtml","isNoColor","ColorPickerHtml","setDivColor","div","background","setAttribute","onButtonClick","_color","execCommand","onPanelClick","buttonCtrl","currentColor","selectColor","hidePanel","resetColor","getParent","colorPickerCallback","customColorCells","tableElm","panel","getEl","childNodes","firstChild","getAttribute","lastId","renderColorPicker","foreColor","role","ariaRemember","onclick","monthsShortDot","monthsParse","monthsRegex","esDo","month","monthsShortRegex","monthsStrictRegex","monthsShortStrictRegex","longMonthsParse","shortMonthsParse","weekdaysParseExact","hours","ww","arMa","processRelativeTime","gomLatn","standalone","isFormat","frCh","enAu","b","suffixes","1","5","8","70","80","2","7","20","50","3","4","100","6","9","10","30","60","90","tr","minutes","a","da","tlPh","eu","th","translator","words","correctGrammaticalCase","wordKey","word","srCyrl","day","lastWeekDays","ocLnc","noop","curry","fn","initialArgs","_i","restArgs","concat","not","f","never","always","none","NONE","eq","isNone","thunk","me","fold","isSome","getOr","getOrThunk","getOrDie","msg","Error","getOrNull","getOrUndefined","undefined","or","orThunk","bind","exists","forall","equals","equals_","toArray","freeze","some","constant_a","elementEq","Option","typeOf","isPrototypeOf","constructor","String","isType","isFunction","nativeSlice","nativeIndexOf","rawIndexOf","ts","xs","r","pred","meta","mac","access","shortcuts","shortcut","action","KeyboardShortcuts","makeTab","makeAriaLabel","shortcutLisString","items","KeyboardShortcutsTab","keys","supplant","obj","isStringOrNumber","fullMatch","urls","PluginUrls","makeLink","maybeUrlize","getMetadata","getPluginKeys","keys$1","forced_plugins","pluginLister","pluginKeys","pluginLis","pluginsString","installedPlugins","availablePlugins","makeTab$1","padding","spacing","PluginsTab","getVersion","major","minor","makeRow","version","majorVersion","minorVersion","changeLogLink","ButtonsRow","bodyType","buttons","mt","symbolMap","0","pluralForm","plurals","pluralize","u","arLy","preparse","postformat","num","forms","relativeTimeWithPlural","be","ka","$0","$1","$2","global$4","shouldHideInSourceView","getDefaultXmlPi","getDefaultEncoding","getDefaultFontFamily","getDefaultFontSize","getDefaultTextColor","getDefaultTitle","getDefaultDocType","parseHeader","head","validate","root_name","htmlToData","headerFragment","getAttr","fontface","fontsize","xml_pi","docencoding","getAll","httpEquiv","toLowerCase","langcode","stylesheets","link","langdir","visited_color","link_color","active_color","dataToHtml","headElement","setAttr","addHeadNode","substring","shortEnded","currentStyleSheetsMap","stylesheet","setAttribs","dir","vLink","aLink","indent","apply_source_formatting","indent_before","indent_after","serialize","Parser","headState","defaults","size","headHtml","protectHtml","protect","escape","unprotectHtml","unescape","Protect","low","handleSetContent","footState","startPos","endPos","styles","source_view","getDefaultHeader","headElm","styleSheet","cssText","removeChild","header","piEncoding","handleGetContent","foot","__spreadArrays","il","k","jl","sort","comparator","copy","has","isInlinePattern","isBlockPattern","isReplacementPattern","sortPatterns","start","createPatternSet","inlinePatterns","blockPatterns","replacementPatterns","get$1","patternsState","setPatterns","newPatterns","getPatterns","Api","defaultPatterns","end","getPatternSet","editorSettings","findPattern","lastIndexOf","isMatchingPattern","delta","textEnd","substr","hasContent","findEndPattern","findInlinePattern","rng","space","collapsed","container","startContainer","nodeType","endPattern","startOffset","endOffset","patternRng","createRange","setStart","setEnd","startPattern","findReplacementPattern","startSearch","isText","setSelection","textNode","newRng","createRng","setRng","splitContainer","splitText","deleteData","splitAndApply","found","formatArray","isArray","validFormats","grep","formatName","setCursorLocation","nextSibling","forEach","applyInlinePattern","getRng","foundPattern","applyInlinePatternSpace","wrappedTextNode","lastChar","lastCharNode","doc","insertAfter","applyInlinePatternEnter","applyBlockPattern","firstTextNode","textBlockElm","walker","next","max","block","collapse","selectionInsertText","insertData","newNode","insertNode","applyReplacement","replacement","extractChar","char","applyReplacementPattern","ch","applyReplacementPatternSpace","applyReplacementPatternEnter","handleEnter","patternSet","handleInlineKey","checkKeyEvent","codes","event","predicate","checkKeyCode","keyCode","modifierPressed","checkCharCode","chars","chr","charCodeAt","charCode","KeyHandler","charCodes","keyCodes","setEditorTimeout","Keyboard","ko","isUpper","numberMap","ku","bs","units","translateSeconds","translateSingular","special","lt","vi","af","render","_vm","_h","$createElement","_c","attrs","_v","_s","staticRenderFns","component","uz","getPreviewDialogWidth","getPreviewDialogHeight","getContentStyle","getPreviewHtml","previewHtml","contentStyle","documentBaseURI","getURI","contentCSS","toAbsolute","bodyId","body_id","bodyClass","body_class","preventClicksOnLinksScript","dirAttr","directionality","getContent","injectIframeContent","iframe","sandbox","src","encodeURIComponent","contentWindow","write","IframeContent","ie","dialogHtml","dialogWidth","dialogHeight","width","height","iframeElm","resize","createElement","canvas","tCanvas","ctx","get2dContext","drawImage","getContext","getWidth","image","naturalWidth","getHeight","naturalHeight","promise","Promise","TypeError","_state","_value","_deferreds","doResolve","reject","asap","immediateFn","setImmediate","setTimeout","thisArg","handle","deferred","cb","onFulfilled","onRejected","newValue","then","finale","_a","Handler","done","reason","ex","catch","remaining","res","val","race","values_1","imageToBlob","dataUriToBlob","anyUriToBlob","blobToImage","blob","blobUrl","URL","createObjectURL","Image","removeListeners","removeEventListener","loaded","error","complete","xhr","XMLHttpRequest","responseType","onload","status","response","onerror","_this","corsError","genericError","send","dataUriToBlobSync","uri","mimetype","base64","sliceSize","byteCharacters","atob","bytesLength","slicesCount","ceil","byteArrays","sliceIndex","begin","bytes","Uint8Array","Blob","canvasToBlob","quality","HTMLCanvasElement","toBlob","toDataURL","canvasToDataURL","blobToCanvas","revokeImageUrl","blobToDataUri","reader","FileReader","onloadend","readAsDataURL","revokeObjectURL","blobToImage$1","imageToBlob$1","create$1","getCanvas","initialType","getType","toBase64","toAdjustedBlob","toAdjustedDataURL","toAdjustedBase64","dataurl","toCanvas","fromBlob","fromCanvas","clamp","parsedValue","parseFloat","identity","DELTA_INDEX","multiply","matrix1","matrix2","col","out","adjust","matrix","adjustValue","adjustContrast","floor","adjustSaturation","lumR","lumG","lumB","adjustHue","angle","PI","cosVal","cos","sinVal","sin","adjustBrightness","adjustColors","adjustR","adjustG","adjustB","adjustSepia","adjustGrayscale","colorFilter","ir","applyColorFilter","applyMatrix","pixelsData","g","m0","m1","m2","m3","m4","m5","m6","m7","m8","m9","m10","m11","m12","m13","m14","m15","m16","m17","m18","m19","pixels","getImageData","putImageData","convoluteFilter","applyConvoluteFilter","pIn","pOut","aMatrix","side","round","sqrt","halfSide","rgba","drgba","cy","cx","scx","scy","innerOffset","wt","pixelsIn","pixelsOut","functionColorFilter","colorFn","filterImpl","lookup","applyLookup","lookupData","complexAdjustableColorFilter","matrixAdjustFn","basicColorFilter","basicConvolutionFilter","kernel","invert","brightness","hue","saturate","contrast","grayscale","sepia","colorize","sharpen","emboss","gamma","pow","exposure","exp","scale","dW","dH","sW","sH","wRatio","hRatio","scaleCapped","scaled","_scale","rotate","applyRotate","translateX","translateY","flip","axis","applyFlip","crop","applyCrop","resize$1","newCanvas","invert$1","sharpen$1","emboss$1","gamma$1","exposure$1","colorize$1","brightness$1","hue$1","saturate$1","contrast$1","grayscale$1","sepia$1","flip$1","crop$1","resize$2","rotate$1","blobToImageResult","Global","Function","path","parts","scope","p","unsafe","actual","Global$1","getToolbarItems","getProxyUrl","getCorsHosts","getCredentialsHosts","getApiKey","getUploadTimeout","shouldReuseFilename","global$5","global$6","UndoStack","state","removed","undo","canUndo","redo","canRedo","global$7","loadImage","LoadImage","global$8","global$9","global$a","CropRect","currentRect","viewPortRect","clampRect","containerElm","instance","handles","dragHelpers","blockers","getAbsoluteRect","outerRect","relativeRect","getRelativeRect","innerRect","getInnerRect","moveRect","startRect","deltaX","deltaY","rect","deltaW","deltaH","fire","setInnerRect","createDragHelper","DragHelper","ownerDocument","drag","appendTo","blocker","repaint","activeHandle","moveAndBlock","stopPropagation","preventDefault","LEFT","RIGHT","UP","DOWN","ENTER","SPACEBAR","toggleVisibility","selectors","show","hide","updateElementRect","left","top","xMul","yMul","setRect","setViewPortRect","setClampRect","destroy","helper","create$2","Control","ImagePanel","Defaults","imageSize","viewRect","toggleCropRect","imageSrc","img","$img","lastRect","$el","replaceWith","bg","inflate","zoomFit","repaintImage","zoom","postRender","_super","pw","ph","clientWidth","clientHeight","$bg","offsetWidth","offsetHeight","cropRect","bindStates","setupCropRect","createState","destroyState","destroyStates","states","currentState","win","mainPanel","filtersPanel","tempState","cropPanel","resizePanel","flipRotatePanel","imagePanel","sidePanel","mainViewContainer","invertPanel","brightnessPanel","huePanel","saturatePanel","contrastPanel","grayscalePanel","sepiaPanel","colorizePanel","sharpenPanel","embossPanel","gammaPanel","exposurePanel","panels","ratioW","ratioH","undoStack","reverseIfRtl","rtl","reverse","recalcSize","widthCtrl","heightCtrl","newWidth","newHeight","checked","floatToPercent","updateButtonUndoStates","statusbar","disableUndoRedo","displayState","switchPanel","targetPanel","hidePanels","addTempState","addBlobState","imageResultToBlob","cancel","tempAction","arg","waitForTempState","times","applyCall","alert","applyTempState","zoomIn","zoomOut","save","createPanel","labelGap","border","pack","createFilterPanel","subtype","newTempState","createVariableFilterPanel","update","ondragend","minValue","maxValue","previewFilter","createRgbFilterPanel","toggleConstrain","onkeyup","onchange","edit","imageResult","getImageSize","isPxValue","setImageSize","removeAttribute","getNaturalImageSize","ImageSize","isValue","traverse","json","reduce","requestUrlAsBlob","withCredentials","onreadystatechange","readyState","setRequestHeader","readBlob","fr","readAsText","parseJson","friendlyHttpErrors","friendlyServiceErrors","isServiceErrorCode","getHttpErrorMsg","handleHttpError","getServiceErrorMsg","getServiceError","serviceError","errorType","errorMsg","handleServiceError","handleServiceErrorResponse","Errors","appendApiKey","apiKey","separator","requestServiceBlob","requestBlob","getUrl","Proxy","count$1","isEditableImage","selectorMatched","isLocalImage","isCorsImage","imagetools_proxy","displayError","notificationManager","getSelectedImage","extractFilename","createId","host","inArray","isCorsWithCredentialsImage","imageToBlob$2","findSelectedBlob","blobInfo","editorUpload","blobCache","getByUri","startTimedUpload","imageUploadTimerState","imageUploadTimer","uploadImagesAuto","cancelTimedUpload","clearTimeout","updateSelectedImage","uploadImmediately","selectedImage","imageLoadedHandler","off","blobUri","selectedImageOperation","_scanForImages","rotate$2","flippedSize","flip$2","editImageDialog","originalSize","handleDialogBlob","newImage","newSize","openDialog","Actions","mceImageRotateLeft","mceImageRotateRight","mceImageFlipVertical","mceImageFlipHorizontal","mceEditImage","lastSelectedImageState","lastSelectedImage","UploadSelectedImage","register$2","ContextToolbar","getCreationDateClasses","getModificationDateClasses","getSelectedContentClasses","getPreviewReplaceValues","getTemplateReplaceValues","getTemplates","templates","getCdateFormat","getLang","getMdateFormat","getDialogWidth","getDialogHeight","addZeros","getDateTime","fmt","date","daysShort","daysLong","monthsLong","getFullYear","getYear","getMonth","getDate","getHours","getMinutes","getSeconds","getDay","DateTimeHelper","createTemplateList","templateList","success","replaceTemplateValues","templateValues","RegExp","replaceVals","vl","insertTemplate","ui","sel","cloneNode","addVisual","Templates","dateFormat","insertIframeHtml","contentCssLinks_1","templateHtml","template","selected","description","onSelectTemplate","onselect","onsubmit","showDialog","visibleState","isContextMenuVisible","shouldNeverUseNative","contextmenu_never_use_native","getContextMenu","getUiContainer","ui_container","nu","transpose","pos","dx","dy","fromPageXY","pageX","pageY","fromClientXY","clientX","clientY","transposeUiContainer","getStyle","containerPos","getPos","scrollLeft","scrollTop","transposeContentAreaContainer","iframePos","getContentAreaContainer","Coords","renderMenu","menu","contextmenu","item","menuItems","uiContainer","renderTo","moveTo","ContextMenu","isNativeOverrideKeyEvent","ctrlKey","Bind","enCa","enGb","relativeTimeMr","mr","ne","zhMo","hm","12","13","40","tg","cs","ta","kn","arKw","hasDimensions","image_dimensions","hasAdvTab","image_advtab","getPrependUrl","getClassList","hasDescription","image_description","hasImageTitle","image_title","hasImageCaption","image_caption","getImageList","hasUploadUrl","hasUploadHandler","getUploadUrl","getUploadHandler","getUploadBasePath","getUploadCredentials","parseIntAndGetMax","val1","val2","visibility","position","bottom","buildListItems","inputList","itemCallback","startItems","appendItems","menuItem","removePixelSuffix","addPixelSuffix","mergeMargins","margin","splitMargin","createImageList","imageList","waitLoadImage","imgElm","selectImage","shallow","old","baseMerge","merger","objects","curObject","merge","getHspace","marginLeft","marginRight","getVspace","marginTop","marginBottom","getBorder","borderWidth","getAttrib","hasAttribute","hasCaption","wrapInFigure","figureElm","class","removeFigure","toggleCaption","normalizeStyle","normalizeCss","attrValue","setSize","getSize","setHspace","pxValue","setVspace","setBorder","setBorderStyle","borderStyle","getBorderStyle","isFigure","defaultData","alt","caption","hspace","vspace","getStyleValue","figure","read","updateProp","oldData","newData","normalized","_name","mergedCss","compressed","splitTextBlock","textBlock","schema","getTextBlockElements","readImageDataFromSelection","insertImageAtCaret","setContent","outerHTML","insertedElm","syncSrcAttr","deleteImage","isEmpty","writeImageDataToSelection","insertOrUpdateImage","updateVSpaceHSpaceBorder","rootControl","toJSON","parseStyle","serializeStyle","updateStyle","packV","columns","AdvTab","doSyncSize","doSizeControls","constrained","doUpdateSize","isContrained","oldWidth","oldHeight","isNaN","syncSize","updateSize","createUi","maxLength","SizeManager","onSrcChange","srcURL","prependURL","absoluteURLPattern","imageListCtrl","convertURL","onBeforeCall","getGeneralItems","generalFormItems","filetype","onbeforecall","textStyle","getCssText","MainTab","pathJoin","path1","path2","Uploader","defaultHandler","failure","progress","formData","credentials","upload","onprogress","total","responseText","location","basePath","FormData","uploadBlob","handler","isDefaultHandler","onFileInput","Throbber","throbber","file","uploader","finalize","dataUrl","activateTab","err","acceptExts","makeTab$2","accept","UploadTab","submitForm","getRoot","altCtrl","lastControl","hasImageClass","toggleContentEditableState","toggleContentEditable","parser","addNodeFilter","serializer","stateSelector","prependToContext","processFutureTime","eifelerRegelAppliesToNumber","processPastTime","lastDigit","firstDigit","lb","isTextNode","isListNode","isOlUlNode","isListItemNode","isDlItemNode","isTableCellNode","isBr","isFirstChild","isLastChild","lastChild","isTextBlock","isBlock","blockElements","isBogusBr","previousSibling","keepBookmarks","isChildOfBody","isChildOf","NodeType","getNormalizedPoint","normalizeRange","outRng","cloneRange","rangeStart","rangeEnd","endContainer","Range","createBookmark","bookmark","setupEndPoint","offsetNode","hasChildNodes","resolveBookmark","restoreEndPoint","nodeIndex","Bookmark","isString","isBoolean","isNumber","nativePush","groupBy","wasType","group","foldl","acc","flatten","htmlElement","HTMLElement","getParentList","selectionStart","getClosestListRootElm","isParentListSelected","parentList","selectedBlocks","findSubLists","getSelectedSubLists","getSelectedBlocks","findParentListItemsNodes","elms","listItemsElms","parentLi","unique","getSelectedListItems","getSelectedDlItems","parentTableCell","findLastParentListNode","parentLists","getSelectedLists","firstList","subsequentLists","getSelectedListRoots","selectedLists","getUniqueListRoots","lists","listRoots","list","isList","Selection","fromHtml","console","fromDom","fromTag","fromText","fromPoint","docElm","elementFromPoint","Element","lift2","oa","ob","fromElements","fragment","createDocumentFragment","Immutable","fields","struct","each$1","props","compareDocumentPosition","documentPositionPreceding","DOCUMENT_POSITION_PRECEDING","documentPositionContainedBy","DOCUMENT_POSITION_CONTAINED_BY","Node","cached","called","firstMatch","regexes","find$1","agent","Number","detect","versionRegexes","cleanedAgent","unknown","Version","edge","chrome","opera","firefox","safari","isBrowser","current","unknown$1","nu$1","info","isEdge","isChrome","isIE","isOpera","isFirefox","isSafari","Browser","windows","ios","android","linux","osx","solaris","freebsd","isOS","unknown$2","nu$2","isWindows","isiOS","isAndroid","isOSX","isLinux","isSolaris","isFreeBSD","OperatingSystem","DeviceType","os","browser","userAgent","isiPad","isiPhone","isAndroid3","isAndroid4","isTablet","isTouch","isPhone","iOSwebview","isWebView","detect$1","candidates","candidate","search","detectBrowser","browsers","detectOs","oses","UaString","normalVersionRegex","checkContains","uastring","PlatformInfo","detect$2","deviceType","PlatformDetection","detect$3","navigator","PlatformDetection$1","ELEMENT","ATTRIBUTE_NODE","CDATA_SECTION_NODE","COMMENT_NODE","DOCUMENT_NODE","DOCUMENT_TYPE_NODE","DOCUMENT_FRAGMENT_NODE","ELEMENT_NODE","ELEMENT$1","TEXT_NODE","PROCESSING_INSTRUCTION_NODE","ENTITY_REFERENCE_NODE","ENTITY_NODE","NOTATION_NODE","elem","msMatchesSelector","webkitMatchesSelector","mozMatchesSelector","e1","e2","regularContains","d1","d2","ieContains","contains$1","is$1","child","marker","parent$1","before$1","append$1","isType$1","isElement","rawSet","setAll","isSupported","getPropertyValue","internalSet","setProperty","clone$1","original","isDeep","deep","shallowAs","mutate","children$1","joinSegment","joinSegments","segments","appendSegments","head$1","tail","createSegment","listType","segment","createSegments","entry","populateSegments","listAttributes","itemAttributes","normalizeSegment","createItem","appendItem","writeShallow","cast","newCast","writeDeep","composeList","entries","isList$1","hasFirstChildList","hasLastChildList","isIndented","isSelected","cloneItemContent","li","createEntry","indentEntry","indentation","cloneListProperties","source","previousSiblingEntry","normalizeEntries","matchingEntry","parseItem","itemSelection","selectionState","currentItemEntry","childListEntries","parseList","newDepth","parseLists","initialDepth","sourceList","createTextBlock","contentNode","blockName","hasContentNode","getBlockElements","createFragment","forced_root_block","forced_root_block_attrs","outdentedComposer","indentedComposer","contentDocument","composeEntries","groupIsIndented","indentSelectedEntries","getItemSelection","selectedListItems","listsIndentation","entrySets","entrySet","DOM$1","splitList","ul","tmpRng","bookmarks","newBlock","removeAndKeepBookmarks","targetNode","setStartAfter","setEndAfter","extractContents","SplitList","outdentDlItem","dl","indentDlItem","dlIndentation","dlItems","selectionIndentation","isHandled","getBookmark","moveToBookmark","indentListSelection","outdentListSelection","flattenListSelection","updateListStyle","detail","setStyle","updateListAttrs","updateListWithDetails","removeStyles","getEndPointNode","getSelectedTextBlocks","textBlocks","startNode","endNode","siblings","isBookmarkNode","hasCompatibleStyle","sib","sibStyle","detailStyle","applyList","listName","listItemName","getContentEditable","toUpperCase","listBlock","sibling","rename","mergeWithAdjacentLists","isValidLists","list1","list2","hasSameListStyle","targetStyle","hasSameClasses","elm1","elm2","shouldMerge","updateList","newList","toggleMultipleLists","hasListStyleDetail","toggleSingleList","toggleList","selectedSubLists","ToggleList","DOM$2","normalizeList","normalizeLists","NormalizeLists","findNextCaretContainer","isForward","nonEmptyBlocks","getNonEmptyElements","hasOnlyOneBlockChild","unwrapSingleBlockChild","moveChildren","fromElm","toElm","targetElm","mergeLiElements","listNode","nestedLists","mergeIntoEmptyLi","fromLi","toLi","mergeForward","mergeBackward","resolvedBookmark","backspaceDeleteFromListToListCaret","otherLi","selectionStartElm","removeBlock","parentBlock","backspaceDeleteIntoListCaret","otherLi_1","backspaceDeleteCaret","backspaceDeleteRange","startListParent","backspaceDelete","BACKSPACE","DELETE","Delete","queryListCommandState","command","addQueryStateHandler","shouldIndentOnTab","setupTabKey","TAB","metaKeyPressed","shiftKey","setup$1","findIndex","listState","tableCellIndex","parents","active","hasPlugin","plugin","webpackContext","req","webpackContextResolve","__webpack_require__","module","exports","az","zhHk","hr","getSeparatorHtml","shouldSplitBlock","getPageBreakClass","getPlaceholderHtml","transparentSrc","separatorHtml","pageBreakSeparatorRegExp","raw","pagebreak_split_block","ResolveName","ga","days","ur","esUs","hasProPlugin","log","DetectProPlugin","clipboard","quirks","firePastePreProcess","internal","isWordHtml","wordContent","firePastePostProcess","firePastePlainTextToggle","firePaste","ieFake","Events","shouldPlainTextInform","shouldBlockDrop","shouldPasteDataImages","shouldFilterDrop","getPreProcess","getPostProcess","getWebkitStyles","shouldRemoveWebKitStyles","shouldMergeFormats","isSmartPasteEnabled","isPasteAsTextEnabled","getRetainStyleProps","getWordValidElements","defaultValidElements","shouldConvertWordFakeLists","shouldUseDefaultFilters","shouldInformUserAboutPlainText","userIsInformedState","displayNotification","togglePlainTextPaste","pasteFormat","pasteHtml","pasteText","internalMimeType","internalMark","mark","unmark","isMarked","InternalHtml","internalHtmlMime","isPlainText","toBRs","openContainer","rootTag","rootAttrs","encodeAllRaw","toBlockElements","blocks","tagOpen","tagClose","paragraphs","stitch","convert","Newlines","innerText","domParser","shortEndedElements","getShortEndedElements","ignoreElements","makeMap","walk","currentNode","trimHtml","trimSpaces","s1","s2","createIdGenerator","isMsEdge","isWordContent","isNumericList","isBulletList","convertFakeListsToProperLists","currentListNode","prevListNode","lastLevel","getText","txt","trimListStart","regExp","removeIgnoredNodes","_listIgnore","convertParagraphToLi","paragraphNode","_listLevel","wrap","nodeText","filterStyles","validStyles","styleValue","outputStyles","filterWordContent","retainStyleProperties","spaces","validElements","valid_elements","valid_children","attributesOrder","addAttributeFilter","unwrap","rootNode","preProcess","WordFilter","preProcess$1","isRootContent","processResult","cancelled","postProcessFilter","tempBody","postProcessArgs","isDefaultPrevented","filterContent","preProcessArgs","filteredContent","hasEventListeners","process","ProcessFilters","paste","isAbsoluteUrl","isImageUrl","createImage","pasteHtmlFn","extra","createLink","linkSelection","insertImage","smartInsertContent","SmartPaste","filter$1","from$1","exports$1","define","require","amd","EphoxContactWrapper","cachedSetTimeout","cachedClearTimeout","defaultSetTimout","defaultClearTimeout","runTimeout","fun","runClearTimeout","currentQueue","queue","draining","queueIndex","cleanUpNextTick","drainQueue","timeout","Item","array","nextTick","argv","versions","addListener","once","removeListener","removeAllListeners","emit","prependListener","prependOnceListener","listeners","binding","cwd","chdir","umask","setTimeoutFunc","_handled","_immediateFn","_unhandledRejectionFn","prom","arr","warn","_setImmediateFn","_setUnhandledRejectionFn","clearImmediate","immediateIds","nextImmediateId","Timeout","clearFn","_id","_clearFn","setInterval","clearInterval","unref","ref","enroll","msecs","_idleTimeoutId","_idleTimeout","unenroll","_unrefActive","_onTimeout","promisePolyfill","boltExport","baseFn","nCallback","isReady","cbs","pure","LazyValue","errorReporter","make","fab","aFutureB","toPromise","anonBind","futureB","toLazy","toCached","cache","pure$1","Future","par","asyncValues","asyncValue","par$1","futures","mapM","subject","clear","isSet","pasteHtml$1","internalFlag","getDataTransferItems","dataTransfer","mceInternalUrlPrefix","getData","legacyText","types","contentType","getClipboardContent","clipboardEvent","clipboardData","hasContentType","clipboardContent","mimeType","hasHtmlOrText","getBase64FromUri","isValidDataUriImage","images_dataimg_filter","pasteImage","imageItem","images_reuse_filename","existingBlobInfo","findFirst","cachedBlobInfo","isClipboardEvent","readBlobsAsDataUris","getAsFile","getImagesFromDataTransfer","files","images","pasteImageData","paste_data_images","blobResults","isBrokenAndroidClipboardEvent","isKeyboardPasteEvent","registerEventHandlers","pasteBin","keyboardPastePlainTextState","keyboardPasteEvent","insertClipboardContent","isKeyBoardPaste","plainTextMode","isPlainTextHtml","isDefaultContent","removePasteBinOnKeyUp","webkit","stopImmediatePropagation","getLastRng","registerEventsAndFilters","isPasteInsert","isWebKitFakeUrl","isDataUri","allow_html_data_urls","getPasteBinParent","isExternalPasteBin","delegatePasteEvents","pasteBinElm","pasteBinDefaultContent","isDefault","lastRngCell","gecko","pasteBinClone","lastRng","unbind","pasteBinClones","dirtyWrappers","cleanWrapper","copyAndRemove","shift","isPasteBin","PasteBin","Clipboard","noop$1","hasWorkingClipboardApi","iOS","setData","setHtml5Clipboard","clearData","setClipboardData","fallback","markedHtml","outer","inner","contenteditable","setStyles","overflow","range","offscreenRange","selectNodeContents","contextual","isTableSelection","hasSelectedContent","cut","CutCopy","global$b","getCaretRangeFromEvent","getCaretRangeFromPoint","isPlainTextFileUrl","plainTextContent","setFocusedRange","draggingInternallyState","dropContent","content_1","DragDrop","postProcess","PrePostProcess","addPreProcessFilter","filterFunc","addPostProcessFilter","removeExplorerBrElementsAfterBlocks","explorerBlocksRegExp","removeWebKitStyles","webKitStyles","webKitStylesSetting","dom_1","node_1","inputStyles","decode","inputValue","currentValue","toHex","removeUnderlineAndFontInAnchor","setup$2","Quirks","stateChange","selectable","tet","emoticons","emoticonsHtml","row","emoticonUrl","PanelHtml","insertEmoticon","createHTML","panelHtml","autohide","dv","tk","weekEndings","hu","charAt","enableWhenDirty","hasOnSaveCallback","hasOnCancelCallback","displayErrorMessage","formObj","isDirty","execCallback","setDirty","submit","startContent","stateToggle","addShortcut","zhCn","te","sv","ugCn","msMy","eo","getDateFormat","getTimeFormat","getFormats","getDefaultDateTime","formats","shouldInsertTimeElement","updateElement","timeElm","computerTime","userTime","newTimeElm","datetime","insertDateTime","createMenuItems","lastFormatState","lastFormat","sd","relativeTimeWithMutation","mutation","specialMutationForYears","lastNumber","softMutation","mutationTable","fullWeekdaysParse","shortWeekdaysParse","minWeekdaysParse","br","weekdaysParse","mi","mk","last2Digits","getLanguage","defaultLanguage","getRpcUrl","getSpellcheckerCallback","getSpellcheckerWordcharPattern","defaultPattern","fireSpellcheckStart","fireSpellcheckEnd","isContentEditableFalse","suggestionsMenu","DomTextMatcher","blockElementsMap","hiddenTextElementsMap","shortEndedElementsMap","createMatch","stepThroughMatches","replaceFn","startNodeIndex","endNodeIndex","matchLocation","innerNodes","atIndex","curNode","matchIndex","genReplacer","makeReplacementNode","fill","stencil","elA","innerNode","innerEl","elB","unwrapElement","getWrappersByIndex","wrappers","dataIndex","filteredMatches","matchFromElement","elementFromMatch","rangeFromMatch","setStartBefore","deleteContents","reset","getWhiteSpaceElements","getTextMatcher","textMatcherState","textMatcher","defaultSpellcheckCallback","currentLanguageState","method","doneCallback","errorCallback","postData","content_type","sendRpcCall","successCallback","userSpellcheckCallback","spellCheckCallback","spellchecker","startedState","lastSuggestionsState","finish","setProgressState","markErrors","checkIfFinished","addToDictionary","spans","ignoreWord","span","getElmIndex","findSpansByIndex","suggestions","hasDictionarySupport","dictionary","getWordCharPattern","buildMenuItems","languageValues","languageValue","updateSelection","selectedLanguage","getItems","langPair","languageMenuItems","startSpellchecking","buttonArgs","onshow","showSuggestions","suggestion","onautohide","onhide","targetPos","documentElement","SuggestionsMenu","nb","kk","arTn","it","itCh","enNz","monthsShortWithDots","monthsShortWithoutDots","fy","enIl","sw","assumeExternalTargets","link_assume_external_targets","hasContextToolbar","link_context_toolbar","getLinkList","link_list","hasDefaultLinkTarget","default_link_target","getDefaultLinkTarget","getTargetList","target_list","setTargetList","shouldShowTargetList","getRelList","rel_list","hasRelList","getLinkClassList","link_class_list","hasLinkClassList","shouldShowLinkTitle","link_title","allowUnsafeLinkTarget","allow_unsafe_link_target","appendClickRemove","dispatchEvent","createEvent","initMouseEvent","opener","OpenUrl","toggleTargetRules","isUnsafe","rules","newRel","addTargetRules","removeTargetRules","trimCaretContainers","getAnchorElement","selectedElm","isImageFigure","getAnchorText","anchorElm","isLink","hasLinks","isOnlyTextSelected","attachState","linkAttrs","attach","linkImageFigure","unlink","unlinkImageFigure","fig","createLinkList","linkList","delayedConfirm","confirm","initialText","onlyText","textListCtrl","linkListCtrl","relListCtrl","targetListCtrl","classListCtrl","linkTitleCtrl","linkListChangeHandler","textCtrl","buildAnchorListControl","anchorList","anchor","unshift","updateText","urlChange","inp","onpaste","insertLink","removeLink","resultData","open$1","getLink","getSelectedLink","getHref","hasOnlyAltModifier","altKey","metaKey","gotoLink","targetEl","scrollIntoView","gotoSelectedLink","leftClickedOnAHref","setupGotoLinks","toggleActiveState","toggleViewLinkState","setupButtons","onpostrender","setupMenuItems","setupContextToolbars","Controls","fireInsertCustomChar","insertChar","evtChr","getCharMap","charmap","getCharMapAppend","charmap_append","getDefaultCharMap","charmapFilter","getCharsFromSetting","settingValue","extendCharMap","userCharMap","userCharMapAppend","getCharMap$1","CharMap","gridHtml","chrText","fromCharCode","GridHtml","getParentTd","charMapPanel","charDiv","charCodeString","onmouseover","td","sk","yo","sl","numbersPast","numbersFuture","verbalNumber","fi","arSa","my","gl","es","invalidDate","directives","rawName","expression","staticClass","spinnerStyle","spinnerDelay1","spinnerDelay2","spinnerDelay3","loading","Boolean","default","radius","display","animationName","animationDuration","animationIterationCount","animationTimingFunction","animationFillMode","animationDelay","monthsNominativeEl","monthsGenitiveEl","momentToFormat","_monthsGenitiveEl","_monthsNominativeEl","calendarEl","mom","_calendarEl","monthsNominative","monthsSubjective","pl","fa","ar","bn","zhTw","getMinWidth","getMinHeight","Content","ru","mn","ky","bnBd","ro","modules","installedModules","moduleId","getter","defineProperty","enumerable","Symbol","toStringTag","mode","__esModule","ns","object","wellKnownSymbol","TO_STRING_TAG","aFunction","that","toIndexedObject","nativeGetOwnPropertyNames","windowNames","getOwnPropertyNames","getWindowNames","DESCRIPTORS","propertyIsEnumerableModule","createPropertyDescriptor","toPrimitive","IE8_DOM_DEFINE","nativeGetOwnPropertyDescriptor","getOwnPropertyDescriptor","O","P","fails","fixRegExpWellKnownSymbolLogic","isRegExp","anObject","requireObjectCoercible","speciesConstructor","advanceStringIndex","toLength","callRegExpExec","regexpExec","arrayPush","MAX_UINT32","SUPPORTS_Y","SPLIT","nativeSplit","maybeCallNative","internalSplit","limit","lim","lastLength","flags","ignoreCase","unicode","sticky","lastLastIndex","separatorCopy","splitter","regexp","rx","S","C","unicodeMatching","q","A","z","classof","R","DOMIterables","createNonEnumerableProperty","COLLECTION_NAME","Collection","CollectionPrototype","$forEach","arrayMethodIsStrict","arrayMethodUsesToLength","STRICT_METHOD","USES_TO_LENGTH","callbackfn","getBuiltIn","ITERATOR","SAFE_CLOSING","iteratorWithReturn","SKIP_CLOSING","ITERATION_SUPPORT","V8_VERSION","SPECIES","METHOD_NAME","foo","toInteger","integer","redefine","setGlobal","copyConstructorProperties","isForced","options","FORCED","targetProperty","sourceProperty","descriptor","TARGET","GLOBAL","STATIC","stat","noTargetGet","forced","sham","internalObjectKeys","enumBugKeys","hiddenKeys","notARegExp","correctIsRegExpLogic","proto","includes","searchString","TO_STRING","RegExpPrototype","nativeToString","NOT_GENERIC","INCORRECT_NAME","rf","definePropertyModule","CONSTRUCTOR_NAME","Constructor","configurable","v8","Iterators","objectKeys","defineProperties","Properties","isObject","InternalStateModule","defineIterator","STRING_ITERATOR","setInternalState","getInternalState","getterFor","iterated","point","propertyIsEnumerable","UNSCOPABLES","ArrayPrototype","MATCH","$some","regExpExec","nativeMatch","matcher","fullUnicode","matchStr","defaultConstructor","getOwnPropertySymbols","$trim","forcedStringTrimMethod","inheritIfRequired","getFlags","stickyHelpers","setSpecies","NativeRegExp","re1","re2","CORRECT_NEW","UNSUPPORTED_Y","RegExpWrapper","thisIsRegExp","patternIsRegExp","flagsAreUndefined","proxy","toAbsoluteIndex","createMethod","IS_INCLUDES","$this","fromIndex","$filter","arrayMethodHasSpeciesSupport","HAS_SPECIES_SUPPORT","toObject","callWithSafeIterationClosing","isArrayIteratorMethod","createProperty","getIteratorMethod","arrayLike","step","iterator","argumentsLength","mapfn","mapping","iteratorMethod","argument","SUBSTITUTION_SYMBOLS","SUBSTITUTION_SYMBOLS_NO_NAMED","maybeToString","REPLACE","nativeReplace","REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE","REPLACE_KEEPS_$0","UNSAFE_SUBSTITUTE","searchValue","replaceValue","replacer","functionalReplace","results","accumulatedResult","nextSourcePosition","matched","captures","namedCaptures","groups","replacerArgs","getSubstitution","tailPos","symbols","capture","IS_PURE","store","copyright","getOwnPropertyNamesModule","getOwnPropertySymbolsModule","whitespaces","whitespace","ltrim","rtrim","TYPE","bitmap","writable","IndexedObject","nativeAssign","assign","B","alphabet","T","CONVERT_TO_STRING","first","second","codeAt","originalArray","NATIVE_WEAK_MAP","objectHas","sharedKey","WeakMap","enforce","wmget","wmhas","wmset","metadata","STATE","inspectSource","enforceInternalState","TEMPLATE","simple","setPrototypeOf","dummy","Wrapper","NewTarget","NewTargetPrototype","wrappedWellKnownSymbolModule","NAME","activeXDocument","documentCreateElement","GT","PROTOTYPE","SCRIPT","IE_PROTO","EmptyConstructor","scriptTag","NullProtoObjectViaActiveX","temp","parentWindow","NullProtoObjectViaIFrame","iframeDocument","JS","F","NullProtoObject","domain","ActiveXObject","createIteratorConstructor","getPrototypeOf","setToStringTag","IteratorsCore","IteratorPrototype","BUGGY_SAFARI_ITERATORS","KEYS","VALUES","ENTRIES","returnThis","Iterable","IteratorConstructor","DEFAULT","IS_SET","CurrentIteratorPrototype","methods","KEY","getIterationMethod","KIND","defaultIterator","IterablePrototype","INCORRECT_VALUES_NAME","nativeIterator","anyNativeIterator","propertyKey","__WEBPACK_AMD_DEFINE_FACTORY__","__WEBPACK_AMD_DEFINE_ARRAY__","__WEBPACK_AMD_DEFINE_RESULT__","getCurrentScript","currentScript","pageSource","inlineScriptSourceRegExp","inlineScriptSource","ieStackRegExp","ffStackRegExp","stackDetails","stack","scriptLocation","line","currentLocation","hash","scripts","functionToString","postfix","random","regexpFlags","nativeExec","patchedExec","UPDATES_LAST_INDEX_WRONG","BROKEN_CARET","NPCG_INCLUDED","PATCH","reCopy","re","charsAdded","strCopy","feature","detection","normalize","POLYFILL","NATIVE","arraySpeciesCreate","IS_CONCAT_SPREADABLE","MAX_SAFE_INTEGER","MAXIMUM_ALLOWED_INDEX_EXCEEDED","IS_CONCAT_SPREADABLE_SUPPORT","SPECIES_SUPPORT","isConcatSpreadable","spreadable","E","returnMethod","nativeDefineProperty","Attributes","RE","nativeJoin","ES3_STRINGS","ACCESSORS","MAXIMUM_ALLOWED_LENGTH_EXCEEDED","deleteCount","insertCount","actualDeleteCount","actualStart","NATIVE_SYMBOL","USE_SYMBOL_AS_UID","nativeObjectCreate","getOwnPropertyNamesExternal","getOwnPropertyDescriptorModule","shared","uid","defineWellKnownSymbol","HIDDEN","SYMBOL","TO_PRIMITIVE","ObjectPrototype","$Symbol","$stringify","nativePropertyIsEnumerable","AllSymbols","ObjectPrototypeSymbols","StringToSymbolRegistry","SymbolToStringRegistry","WellKnownSymbolsStore","QObject","USE_SETTER","findChild","setSymbolDescriptor","ObjectPrototypeDescriptor","isSymbol","$defineProperty","$defineProperties","properties","$getOwnPropertySymbols","$propertyIsEnumerable","$create","V","$getOwnPropertyDescriptor","$getOwnPropertyNames","names","IS_OBJECT_PROTOTYPE","setter","keyFor","sym","useSetter","useSimple","FORCED_JSON_STRINGIFY","$replacer","valueOf","checkCorrectnessOfIteration","INCORRECT_ITERATION","iterable","NUMBER","NativeNumber","NumberPrototype","BROKEN_CLASSOF","toNumber","third","radix","maxCode","digits","NaN","NumberWrapper","__webpack_exports__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_vue_timepicker_vue_vue_type_style_index_0_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_vue_timepicker_vue_vue_type_style_index_0_lang_css___WEBPACK_IMPORTED_MODULE_0___default","dotAll","thrower","argument0","argument1","PrototypeOfArrayIteratorPrototype","arrayIterator","TO_STRING_TAG_SUPPORT","FunctionPrototype","FunctionPrototypeToString","nameRE","createWellKnownSymbol","withoutSetter","nativeKeys","FAILS_ON_PRIMITIVES","IS_MAP","IS_FILTER","IS_SOME","IS_EVERY","IS_FIND_INDEX","NO_HOLES","specificCreate","boundFunction","every","PREFERRED_STRING","SHARED","$findIndex","addToUnscopables","FIND_INDEX","SKIPS_HOLES","non","$indexOf","NEGATIVE_ZERO","searchElement","$includes","EXISTS","NASHORN_BUG","aPossiblePrototype","CORRECT_SETTER","__proto__","TAG","REPLACE_SUPPORTS_NAMED_GROUPS","SPLIT_WORKS_WITH_OVERWRITTEN_EXEC","originalExec","DELEGATES_TO_SYMBOL","DELEGATES_TO_EXEC","execCalled","nativeRegExpMethod","nativeMethod","forceStringMethod","stringMethod","regexMethod","$map","check","globalThis","ArrayIteratorMethods","ArrayValues","NativeSymbol","EmptyStringDescriptionStore","SymbolWrapper","symbolPrototype","symbolToString","native","desc","CORRECT_PROTOTYPE_GETTER","ARRAY_ITERATOR","kind","Arguments","ownKeys","classofRaw","CORRECT_ARGUMENTS","tryGet","callee","inputClass","inputIsEmpty","hasInvalidInput","allValueSelected","$slots","placeholder","formatString","tabindex","manualInput","autocomplete","domProps","customDisplayTime","onFocus","onChange","$event","debounceBlur","blurEvent","onMouseDown","keyDownHandler","_k","escBlur","onCompostionStart","onCompostionEnd","pasteHandler","showClearBtn","showDropdownBtn","isActive","clearButton","clearTime","_t","_e","dropdownButton","setDropdownState","fixedDropdownButton","showDropdown","keepFocusing","toggleActive","dropdownDirClass","advancedKeyboard","_l","column","hourLabelText","hIndex","opts","hideDisabledHours","isDisabled","minuteLabelText","mIndex","hideDisabledMinutes","secondLabelText","sIndex","hideDisabledSeconds","apmLabelText","aIndex","apm","apmDisplayText","onTab","prevItem","nextItem","button","toLeftColumn","toRightColumn","_typeof","_arrayLikeToArray","arr2","_unsupportedIterableToArray","minLen","_createForOfIteratorHelper","normalCompletion","didErr","_e2","CONFIG","HOUR_TOKENS","MINUTE_TOKENS","SECOND_TOKENS","APM_TOKENS","BASIC_TYPES","DEFAULT_OPTIONS","minuteInterval","secondInterval","hourRange","minuteRange","secondRange","hideDisabledItems","hideDropdown","blurDelay","manualInputTimeout","dropOffsetHeight","vue_timepickervue_type_script_lang_js_","hideClearButton","closeOnComplete","inputWidth","hourLabel","minuteLabel","secondLabel","apmLabel","amText","pmText","lazy","autoScroll","dropDirection","containerId","appendToBody","debugMode","timeValue","seconds","apms","isFocusing","debounceTimer","hourType","minuteType","secondType","apmType","fullValues","bakDisplayTime","doClearApmChecking","selectionTimer","kbInputTimer","kbInputLog","bakCurrentPos","forceDropOnTop","computed","debugLog","useStringValue","inUse","typesInUse","getTokenByType","tokensInUse","displayTime","columnsSequence","baseOn12Hours","hourRangeIn24HrFormat","_this2","is12hRange","translate12hRange","restrictedHourRange","validHoursList","_this3","formatValue","am12Index","customApmText","apmEnabled","am","pm","minuteRangeList","renderRangeList","secondRangeList","inputWidthStyle","tokenRegexBase","tokenChunks","_step","tokensRegxStr","tokensMatchAll","getMatchAllByRegex","_iterator","tkMatch","rawToken","tokenMatchItem","getTokenType","needsCalibrate","needsPosCalibrate","chk","tokenChunksPos","_this4","calibrateLen","chunkCurrentLen","invalidValues","isEmptyValue","isValidValue","notInInterval","autoDirectionEnabled","watch","renderFormat","newInteval","renderList","readValues","fillValues","toDisabled","newLength","oldLength","$emit","checkAcceptingType","validValues","newFormat","_this5","renderHoursList","renderApmList","$nextTick","hoursCount","interval","isMinuteOrSecond","isMinute","readStringValues","readObjectValues","objValue","_this6","sanitizedValue","addFallbackValues","testString","regexString","needsPolyfill","matchAll","polyfillMatchAll","stringValue","_this7","_step2","othersRegxStr","othersMatchAll","chunks","_iterator2","isValueToken","_step3","_iterator3","otMatch","regexCombo","chunk","tokenRegex","getTokenRegex","safeChars","comboReg","matchResults","valueResults","vrIndex","targetToken","setValueFromString","tokenChunksForLog","tChunk","targetString","regxStr","matchesList","indicesReg","matchedItem","existIndex","idxItem","itemIndicesRegex","_this8","tokenType","stdValue","forceEmit","apmValue","_this9","baseHour","baseHourType","hourValue","_apmValue","lowerCasedApm","emitTimeValue","getFullData","fullData","valueT","match12hRange","isBasicType","isDisabledHour","section","rawRange","_this10","formatedValue","fullList","validItems","forceApmSelection","emptyApmSelection","_this11","$refs","selectionEnd","selectFirstSlot","checkForAutoScroll","toShow","fromUserClick","appendDropdownToBody","checkDropDirection","removeDropdownFromBody","dropdown","updateDropdownPos","classList","box","getBoundingClientRect","innerHeight","_this12","scrollToSelectedValues","firstColumn","scrollToSelected","allowFallback","targetList","targetValue","activeItemInCol","validItemsInCol","offsetTop","_this13","inputBox","blur","_this14","onBlur","firstValidValue","columnClass","getClosestSibling","dataKey","getPrevious","siblingsInCol","selfIndex","sbl","isManualInput","targetItem","getSideColumnName","currentColumn","toLeft","currentColumnIndex","getFirstItemInSideColumn","targetColumn","listItems","getActiveItemInSideColumn","activeItems","_this15","nearestSlot","getNearestChunkByPos","debounceSetInputSelection","isComposing","keyboardInput","clearKbInputLog","arrowHandler","tabHandler","toNextSlot","getCurrentTokenChunk","_this16","cpsData","inputIsCustomApmText","isCustomApmText","setSanitizedValueToSection","bakPos","pastingText","replaceCustomApmText","setKbInput","debounceClearKbLog","37","38","39","selectFirstValidValue","currentChunk","getClosestValidItemInCol","newChunkPos","toLateralToken","firstChunk","lastChunk","newChar","isApm","_this17","validValue","chunkType","chunkToken","lastInputValue","autoFillValue","nearest","nearestDelta","abs","firstSlotType","getClosestHourItem","_this18","nextIndex","currentIndex","valueKey","setManualHour","hourT","_ref","_this19","_ref$start","_ref$end","setInputSelectionRange","setSelectionRange","firstChunkPos","currentChunkIndex","targetSlotPos","inputData","inputString","getElementById","spaceDown","docHeight","scrollHeight","isFinite","testValue","tokenRegexStr","logText","_this20","identifier","inputClasses","clsName","_step4","_iterator4","finalLogText","debug","mounted","beforeDestroy","src_vue_timepickervue_type_script_lang_js_","normalizeComponent","scriptExports","functionalTemplate","injectStyles","scopeId","moduleIdentifier","shadowMode","hook","_compiled","functional","_scopeId","$vnode","ssrContext","__VUE_SSR_CONTEXT__","_registeredComponents","_ssrRegister","$root","$options","shadowRoot","_injectStyles","originalRender","existing","beforeCreate","vue_timepicker","src_0","fin","CSSRuleList","CSSStyleDeclaration","CSSValueList","ClientRectList","DOMRectList","DOMStringList","DOMTokenList","DataTransferItemList","FileList","HTMLAllCollection","HTMLCollection","HTMLFormElement","HTMLSelectElement","MediaList","MimeTypeArray","NamedNodeMap","NodeList","PaintRequestList","PluginArray","SVGLengthList","SVGNumberList","SVGPathSegList","SVGPointList","SVGStringList","SVGTransformList","SourceBufferList","StyleSheetList","TextTrackCueList","TextTrackList","TouchList","fullscreenState","isFullscreen","fireFullscreenStateChanged","getWindowSize","innerWidth","getScrollPos","vp","setScrollPos","scrollTo","toggleFullscreen","editorContainerStyle","editorContainer","iframeStyle","fullscreenInfo","removeResize","getContainer","iframeWidth","iframeHeight","containerWidth","containerHeight","removeClass","scrollPos","resizeHandler","removeHandler","newFullScreenInfo","addClass","shouldMergeClasses","shouldImportExclusive","getSelectorConverter","getSelectorFilter","getCssGroups","shouldAppend","getFileFilter","removeCacheSuffix","cacheSuffix","isSkinContentCss","skin","skinUrl","skin_url","baseURL","compileFilter","getSelectors","fileFilter","contentCSSUrls","imported","imports","cssRules","cssRule","selectorText","styleSheets","defaultConvertSelectorToFormat","elementName","inlineSelectorElements","getGroupsBySelector","compileUserDefinedGroups","isExclusiveMode","isUniqueSelector","globallyUniqueSelectors","markUniqueSelector","convertSelectorToFormat","selectorConverter","selector_converter","selectorFilter","processSelector","importcss","itemDefaults","selectorGroups","renderNew","ImportCss","getScripts","getAudioTemplateCallback","getVideoTemplateCallback","hasLiveEmbeds","shouldFilterHtml","getUrlResolver","hasAltSource","hasPoster","getVideoScriptMatch","prefixes","VideoScript","trimPx","getEphoxEmbedData","source1","source2","poster","isEphoxEmbed","allow_conditional_comments","movie","videoScript","HtmlToData","guess","mimes","mp3","wav","mp4","webm","ogg","swf","fileEnd","pop","mime","Mime","addPx","setAttributes","updatedAttrs","updateEphoxEmbed","styleMap","updateHtml","updateAll","hasImage","writer","sourceCount","imgAttrs","UpdateHtml","urlPatterns","allowFullscreen","newUrl","_loop_1","matchPattern","getIframeHtml","getFlashHtml","getAudioHtml","audioTemplateCallback","source2mime","getVideoHtml","videoTemplateCallback","source1mime","getScriptHtml","dataIn","embed","DataToHtml","embedPromise","rej","wrappedResolve","defaultPromise","loadedData","getEmbedHtml","embedHandler","isCached","Service","trimPx$1","addPx$1","Size","getMaxWidth","getMaxHeight","setMaxWidth","setMaxHeight","embedChange","handleError","errorMessage","dataEmbed","getSource","addEmbedHtml","fromJSON","selectPlaceholder","beforeObjects","afterObjects","handleInsert","populateMeta","advancedFormItems","reserialise","embedTextBox","updateValueOnChange","forId","sanitize","blocked","attrName","Sanitize","createPlaceholderNode","placeHolder","retainAttributesAndInnerHtml","createPreviewIframeNode","previewWrapper","previewNode","shimNode","allowfullscreen","frameborder","sourceNode","attribs","ai","innerHtml","isWithinEphoxEmbed","placeHolderConverter","ceFalse","Nodes","specialElements","getSpecialElements","boolAttrs","getBoolAttrs","realElm","realElmName","selectedNode","objectType","isValidId","getId","isAnchor","Anchor","insertAnchor","newId","currentId","isAnchorNode","setContentEditable","arDz","applyListFormat","getNumberStyles","getBulletStyles","getSelectedStyleType","listElm","ListUtils","styleValueToText","toMenuItems","ListStyles","listStyleType","addSplitButton","addControl","bm","gomDeva","weekdaysCaseReplace","nounCase","nominative","accusative","genitive","processHoursFunction","uk","lo","fireVisualBlocks","isEnabledByDefault","visualblocks_content_css","cssId","load","linkElements","matchingLinkElms","toggleVisualBlocks","enabledState","toggleClass","VisualBlocks","Bindings","deAt","de","tzmLatn","jv","esMx","staticStyle","backgroundImage","backgroundBanner","_m","qSummary","grade","quizName","quizNo","model","$$v","Question","choiceA","choiceB","choiceC","choiceD","choiceE","choiceF","choiceG","onFileChangeUploadPhoto","urlApp","_q","answer","ansId","GoToPageList","CreateQuestion","PublishQuiz","components","PulseLoader","QuestionId","imageId","SubmittedForm","question","togglePress","app","img1","HandleFileInputPhoto","photo","myapp","SubmitFilePhoto","$route","query","userId","quizTitleId","$API","GoToPageCreateQuestion","reload","GoToPageOverview","$router","enSg","nn","html2bbcode","rep","bbcode2html","Convert","init","relativeTimeWithSingular","relativeSeconds","lv","deCh","getAutoLinkPattern","rangeEqualsDelimiterOrSpace","rangeString","handleEclipse","parseCurrentLine","handleSpacebar","scopeIndex","prev","rngText","autoLinkPattern","defaultLinkTarget","nodeValue","autoUrlDetectState","Keys","tzm","hookCallback","setHookCallback","hasOwnProp","isObjectEmpty","isUndefined","isDate","arrLen","createUTC","locale","strict","createLocalOrUTC","utc","defaultParsingFlags","unusedTokens","unusedInput","charsLeftOver","nullInput","invalidEra","invalidMonth","invalidFormat","userInvalidated","iso","parsedDateParts","era","rfc2822","weekdayMismatch","getParsingFlags","_pf","isValid","_isValid","parsedParts","isNowValid","_d","invalidWeekday","_strict","bigHour","isFrozen","createInvalid","momentProperties","updateInProgress","copyConfig","prop","momentPropertiesLen","_isAMomentObject","_f","_tzm","_isUTC","_offset","_locale","Moment","config","updateOffset","isMoment","suppressDeprecationWarnings","deprecate","firstTime","deprecationHandler","argLen","deprecations","deprecateSimple","_config","_dayOfMonthOrdinalParseLenient","_dayOfMonthOrdinalParse","_ordinalParse","mergeConfigs","parentConfig","childConfig","Locale","defaultCalendar","_calendar","zeroFill","targetLength","forceSign","absNumber","zerosToFill","sign","formattingTokens","localFormattingTokens","formatFunctions","formatTokenFunctions","addFormatToken","padded","func","localeData","removeFormattingTokens","makeFormatFunction","formatMoment","expandFormat","replaceLongDateFormatTokens","defaultLongDateFormat","_longDateFormat","formatUpper","tok","defaultInvalidDate","_invalidDate","defaultOrdinal","defaultDayOfMonthOrdinalParse","_ordinal","defaultRelativeTime","_relativeTime","pastFuture","diff","addUnitAlias","unit","shorthand","lowerCase","normalizeUnits","normalizeObjectUnits","inputObject","normalizedProp","normalizedInput","priorities","addUnitPriority","priority","getPrioritizedUnits","unitsObj","isLeapYear","year","absFloor","toInt","argumentForCoercion","coercedNumber","makeGetSet","keepTime","set$1","daysInMonth","stringGet","stringSet","prioritized","prioritizedLen","match1","match2","match3","match4","match6","match1to2","match3to4","match5to6","match1to3","match1to4","match1to6","matchUnsigned","matchSigned","matchOffset","matchShortOffset","matchTimestamp","matchWord","addRegexToken","strictRegex","isStrict","getParseRegexForToken","unescapeFormat","regexEscape","p1","p2","p3","p4","addParseToken","tokenLen","addWeekParseToken","_w","addTimeToArrayFromToken","YEAR","MONTH","DATE","HOUR","MINUTE","SECOND","MILLISECOND","WEEK","WEEKDAY","mod","modMonth","defaultLocaleMonths","defaultLocaleMonthsShort","MONTHS_IN_FORMAT","defaultMonthsShortRegex","defaultMonthsRegex","localeMonths","_months","localeMonthsShort","_monthsShort","handleStrictParse","monthName","llc","toLocaleLowerCase","_monthsParse","_longMonthsParse","_shortMonthsParse","localeMonthsParse","_monthsParseExact","setMonth","dayOfMonth","getSetMonth","getDaysInMonth","computeMonthsParse","_monthsShortStrictRegex","_monthsShortRegex","_monthsStrictRegex","_monthsRegex","cmpLenRev","shortPieces","longPieces","mixedPieces","daysInYear","parseTwoDigitYear","getSetYear","getIsLeapYear","createDate","ms","setFullYear","createUTCDate","UTC","getUTCFullYear","setUTCFullYear","firstWeekOffset","fwd","fwdlw","getUTCDay","dayOfYearFromWeeks","weekday","resYear","resDayOfYear","localWeekday","weekOffset","dayOfYear","weekOfYear","resWeek","weeksInYear","weekOffsetNext","localeWeek","_week","defaultLocaleWeek","localeFirstDayOfWeek","localeFirstDayOfYear","getSetWeek","getSetISOWeek","parseWeekday","parseIsoWeekday","shiftWeekdays","ws","weekdaysMinRegex","weekdaysShortRegex","weekdaysRegex","defaultLocaleWeekdays","defaultLocaleWeekdaysShort","defaultLocaleWeekdaysMin","defaultWeekdaysRegex","defaultWeekdaysShortRegex","defaultWeekdaysMinRegex","localeWeekdays","_weekdays","localeWeekdaysShort","_weekdaysShort","localeWeekdaysMin","_weekdaysMin","handleStrictParse$1","weekdayName","_weekdaysParse","_shortWeekdaysParse","_minWeekdaysParse","localeWeekdaysParse","_weekdaysParseExact","_fullWeekdaysParse","getSetDayOfWeek","getSetLocaleDayOfWeek","getSetISODayOfWeek","computeWeekdaysParse","_weekdaysStrictRegex","_weekdaysRegex","_weekdaysShortStrictRegex","_weekdaysShortRegex","_weekdaysMinStrictRegex","_weekdaysMinRegex","minp","shortp","longp","minPieces","hFormat","kFormat","lowercase","matchMeridiem","_meridiemParse","localeIsPM","kInput","_isPm","_meridiem","pos1","pos2","defaultLocaleMeridiemParse","getSetHour","localeMeridiem","globalLocale","baseConfig","locales","localeFamilies","commonPrefix","arr1","minl","normalizeLocale","chooseLocale","loadLocale","isLocaleNameSane","oldLocale","_abbr","getSetGlobalLocale","getLocale","parentLocale","updateLocale","tmpLocale","listLocales","checkOverflow","_overflowDayOfYear","_overflowWeeks","_overflowWeekday","extendedIsoRegex","basicIsoRegex","tzRegex","isoDates","isoTimes","aspNetJsonRegex","obsOffsets","UT","GMT","EDT","EST","CDT","CST","MDT","MST","PDT","PST","configFromISO","allowTime","timeFormat","tzFormat","isoDatesLen","isoTimesLen","configFromStringAndFormat","extractFromRFC2822Strings","yearStr","monthStr","dayStr","hourStr","minuteStr","secondStr","untruncateYear","preprocessRFC2822","checkWeekday","weekdayStr","parsedInput","weekdayProvided","weekdayActual","calculateOffset","obsOffset","militaryOffset","numOffset","configFromRFC2822","parsedArray","setUTCMinutes","getUTCMinutes","configFromString","createFromInputFallback","currentDateArray","nowValue","_useUTC","getUTCMonth","getUTCDate","configFromArray","currentDate","expectedWeekday","yearToUse","dayOfYearFromWeekInfo","_dayOfYear","_nextDay","weekYear","weekdayOverflow","curWeek","GG","W","createLocal","gg","ISO_8601","RFC_2822","skipped","stringLength","totalParsedInputLength","meridiemFixWrap","erasConvertYear","isPm","configFromStringAndArray","tempConfig","bestMoment","scoreToBeat","currentScore","validFormatFound","bestFormatIsValid","configfLen","score","configFromObject","dayOrDate","millisecond","createFromConfig","prepareConfig","configFromInput","isUTC","prototypeMin","other","prototypeMax","pickBy","moments","ordering","isDurationValid","unitHasDecimal","orderLen","isValid$1","createInvalid$1","createDuration","Duration","duration","years","quarters","quarter","weeks","isoWeek","milliseconds","_milliseconds","_days","_data","_bubble","isDuration","absRound","compareArrays","array1","array2","dontConvert","lengthDiff","diffs","utcOffset","offsetFromString","chunkOffset","cloneWithOffset","setTime","local","getDateOffset","getTimezoneOffset","getSetOffset","keepLocalTime","keepMinutes","localAdjust","_changeInProgress","addSubtract","getSetZone","setOffsetToUTC","setOffsetToLocal","subtract","setOffsetToParsedOffset","tZone","hasAlignedHourOffset","isDaylightSavingTime","isDaylightSavingTimeShifted","_isDSTShifted","isLocal","isUtcOffset","isUtc","aspNetRegex","isoRegex","diffRes","parseIso","momentsDifference","positiveMomentsDifference","base","isAfter","isBefore","createAdder","dur","tmp","isAdding","invalid","isMomentInput","isNumberOrStringArray","isMomentInputObject","objectTest","propertyTest","propertyLen","arrayTest","dataTypeTest","isCalendarSpec","getCalendarFormat","myMoment","calendar$1","time","sod","startOf","calendarFormat","localInput","endOf","isBetween","inclusivity","localFrom","localTo","isSame","inputMs","isSameOrAfter","isSameOrBefore","asFloat","zoneDelta","monthDiff","anchor2","wholeMonthDiff","toISOString","keepOffset","toDate","inspect","suffix","zone","defaultFormatUtc","defaultFormat","humanize","fromNow","toNow","newLocaleData","MS_PER_SECOND","MS_PER_MINUTE","MS_PER_HOUR","MS_PER_400_YEARS","mod$1","dividend","divisor","localStartOfDate","utcStartOfDate","startOfDate","isoWeekday","unix","isValid$2","parsingFlags","invalidAt","creationData","localeEras","_eras","localeErasParse","eraName","localeErasConvertYear","getEraName","getEraNarrow","getEraAbbr","getEraYear","erasNameRegex","computeErasParse","_erasNameRegex","_erasRegex","erasAbbrRegex","_erasAbbrRegex","erasNarrowRegex","_erasNarrowRegex","matchEraAbbr","matchEraName","matchEraNarrow","matchEraYearOrdinal","_eraYearOrdinalRegex","abbrPieces","namePieces","narrowPieces","addWeekYearFormatToken","getSetWeekYear","getSetWeekYearHelper","getSetISOWeekYear","getISOWeeksInYear","getISOWeeksInISOWeekYear","isoWeekYear","getWeeksInYear","weekInfo","getWeeksInWeekYear","weeksTarget","setWeekAll","dayOfYearData","getSetQuarter","erasParse","getSetDayOfMonth","getSetDayOfYear","getSetMinute","getSetMillisecond","getSetSecond","parseMs","getZoneAbbr","getZoneName","createUnix","createInZone","parseZone","preParsePostFormat","for","eraNarrow","eraAbbr","eraYear","isoWeeks","weeksInWeekYear","isoWeeksInYear","isoWeeksInISOWeekYear","isDST","zoneAbbr","zoneName","dates","isDSTShifted","proto$1","field","listMonthsImpl","listWeekdaysImpl","localeSorted","listMonths","listMonthsShort","listWeekdays","listWeekdaysShort","listWeekdaysMin","firstDayOfYear","firstDayOfWeek","langData","mathAbs","addSubtract$1","add$1","subtract$1","absCeil","bubble","monthsFromDays","monthsToDays","daysToMonths","as","valueOf$1","makeAs","asMilliseconds","asSeconds","asMinutes","asHours","asDays","asWeeks","asMonths","asQuarters","asYears","get$2","makeGetter","thresholds","substituteTimeAgo","relativeTime$1","posNegDuration","getSetRelativeTimeRounding","roundingFunction","getSetRelativeTimeThreshold","threshold","argWithSuffix","argThresholds","withSuffix","abs$1","toISOString$1","totalSign","ymSign","daysSign","hmsSign","toFixed","proto$2","toIsoString","relativeTimeRounding","relativeTimeThreshold","HTML5_FMT","DATETIME_LOCAL","DATETIME_LOCAL_SECONDS","DATETIME_LOCAL_MS","TIME","TIME_SECONDS","TIME_MS","he","compose","fb","die","eachr","foldr","map$1","tupleMap","tuple","reqMessage","required","unsuppMessage","unsupported","validateStrArr","invalidTypeMessage","incorrect","checkDupes","everything","sorted","dupe","MixedBag","optional","allReqd","opt","COMMENT","DOCUMENT","TEXT","isComment","checkRange","endsWith","inBody","internalRemove","removeProperty","setAll$1","getComputedStyle","getUnsafeProperty","getRaw","remove$1","sourceDom","targetDom","DOCUMENT$1","bypassSelector","childElementCount","one","querySelector","contains$2","owner","defaultView","isRoot","stop","rawParent","prevSibling","prepend","firstChild$1","wrapper","after$1","rogue","remove$2","grid","address","detailnew","extended","rowdata","elementnew","rowdatanew","rowcells","rowdetails","bounds","ancestors","descendants","ancestors$1","children$2","descendants$1","ClosestOrAncestor","ancestor","closest","child$1","descendant","descend","child_1","ancestor$1","child$2","descendant$1","closest$1","firstLayer","filterFirstLayer","LayerSelector","tags","isRootOrUpperTable","cell","cells","notCell","neighbours","neighbourCells","neighbourRows","firstCell","table","grid$1","rowProp","colProp","rowsCount","TableLookup","fromTable","parentSection","parentName","rowspan","colspan","fromPastedRows","example","DetailsList","getAt","warehouse","findItem","filtered","filterItems","generate","maxRows","maxColumns","details","currentRow","cr","cc","newpos","justCells","Warehouse","statsStruct","findSelectedStats","house","totalColumns","totalRows","minRow","minCol","maxRow","maxCol","startRow","endRow","startCol","endCol","makeCell","seenSelected","rowIndex","fillInGaps","stats","needCell","clean","emptyRows","extract","selectedSelector","unselectedCells","CopySelected","NodeValue","getOption","api","set$2","getEnd","NBSP","isTextNodeWithCursorPosition","elementsWithCursorPosition","isCursorPosition","hasCursorPosition","last$1","descendantRtl","copy$1","cloneChildren","createCell","replica","pasteReplace","newRow","cloneFormats","oldCell","newCell","first$1","firstText","formatSelector","clonedFormat","cellOperations","formatsToClone","docu","lastNode","gap","TableFill","fromHtml$1","inSelection","leftEdge","rightEdge","topEdge","bottomEdge","finishCol","finishRow","isWithin","isRectangular","isRect","detailIsWithin","CellBounds","getBounds","detailA","detailB","getAnyBox","startCell","finishCell","startCoords","finishCoords","sc","fc","getBox","CellGroup","moveBy","dest","intercepts","parentCell","innerCell","isContainedBy","c1","c2","CellFinder","moveBy$1","deltaRow","deltaColumn","getWarehouse","intercepts$1","nestedIntercepts","firstTable","lastTable","optStartCell","optLastCell","lastCell","getBox$1","TablePositions","TagBoundaries","DomUniverse","isBoundary","isEmptyTag","comparePosition","copyAttributesTo","destination","up","down","copyTo","afterAll","appendAll","setText","leftRight","brokenPath","bisect","universe","ind","breakToRight","breakToLeft","prior","breakPath","isTop","breaker","splits","breakage","right","nextChild","all$1","look","oneAll","unsafeOne","commonElement","eq$1","unsafeSubset","common","ps1","ps2","finder","ps","topDown","startIndex","endIndex","eIndex","ancestors$2","prune","pruned1","pruned2","firstpath","secondpath","subset","ancs","SubsetFn","sharedOne","subset$1","ancestors$3","breakToLeft$1","breakToRight$1","breakPath$1","Parent","sharedOne$1","_universe","subset$2","ancestors$4","breakToLeft$2","breakToRight$2","breakPath$2","DomParent","Identified","lookupTable","identify","getIsRoot","rootTable","boxes","startTable","finishTable","ancestorCells","lca","lcaTable","finishAncestorCells","startAncestorCells","retrieve","sels","getLast","lastSelectedSelector","getEdges","firstSelectedSelector","tbl","expandTo","identified","shiftSelection","CellSelection","retrieve$1","retrieveBox","edges","firstAncestor","lastAncestor","fA","lA","TableSelection","attributeSelector","firstSelected","lastSelected","Ephemera","generate$1","cases","constructors","adt","acase","argLength","branches","branchKeys","reqKey","params","Adt","type$1","multiple","single","cata","onNone","onMultiple","onSingle","SelectionTypes","selections","unmergable","hasSpan","mergable","_env","CellOperations","noMenu","forMenu","notCell$1","paste$1","pasteRows","generators","TableTargets","extractSelected","serializeElements","getTextContent","registerEvents","actions","cellSelection","multiCellContext","cellOpt","domCell","targets","pasteCells","Dimension","getOffset","getOuter","aggregate","cumulativeInclusions","absoluteMax","api$1","get$3","api$2","get$4","getOuter$1","platform","needManualCalc","px","getProp","getCalculatedHeight","paddingTop","paddingBottom","borderTop","borderBottom","boxSizing","borders","RuntimeSize","genericSizeRegex","percentageBasedSizeRegex","pixelBasedSizeRegex","setPixelWidth","amount","setPercentageWidth","setHeight","getHeightValue","normalizePixelSize","getTotalHeight","get$5","getSpan","getRawWidth","cssWidth","normalizePercentageWidth","cellWidth","tableSize","pixelWidth","choosePercentageSize","percentMatch","intWidth","getPercentageWidth","normalizePixelWidth","choosePixelSize","pixelMatch","floatWidth","getPixelWidth","getHeight$1","getGenericWidth","setGenericWidth","Sizes","halve","main","CellMutations","Position","boxPosition","firstDefinedOrZero","absolute","pageYOffset","pageXOffset","clientTop","clientLeft","viewport","offsetLeft","rowInfo","colInfo","rtlEdge","ltrEdge","getLeftEdge","getRightEdge","getTop","getTopEdge","getBottomEdge","findPositions","getInnerEdge","getOuterEdge","lines","cellOption","lastLine","negate","positions","optElements","ltr","BarPositions","ResizeDirection","TableDirection","directionAt","auto","isRtl","getGridSize","TableGridSize","__assign","cat","findMap","setIfNot","ignore","newRows","newCells","renderSection","gridSection","sectionName","tb","isNew","removeSection","renderOrRemoveSection","headSection","bodySection","footSection","copy$2","clonedCell","Redraw","remove$3","supports","get$6","clazz","remove$4","add$2","cleanClass","remove$5","has$1","repeat","repititions","deduce","aa","extras","rowsArr","getBlock","isSingle","getFallback","decide","inBlock","singleInBlock","detailOption","rows$1","Blocks","dashNamespace","Styles","row$1","Bar","resizeBar","resizeRowBar","resizeColBar","BAR_THICKNESS","wire","previous","drawBar","origin","cpOption","cp","bar","refreshCol","colPositions","tableHeight","colBar","refreshRow","rowPositions","tableWidth","rowBar","refreshGrid","hdirection","vdirection","refresh","each$2","bars","isRowBar","isColBar","Bars","addCell","gridRow","setCells","mutateCell","mapCells","getCell","getCellElement","cellLength","GridRow","getColumn","getRow","findDiff","comp","subgrid","restOfRow","endColIndex","restOfColumn","endRowIndex","TableGrid","toDetails","seen","ri","ci","updateSeen","toGrid","rowCells","Transitions","fromWarehouse","deriveRows","rendered","findRow","rowOfCells","toDetailList","findInWarehouse","operation","adjustment","postAction","genWrappers","cursor","newElements","onCell","onPaste","onPasteRows","lc","onMergable","_warehouse","onUnmergable","onCells","mapError","onValue","toOption","isError","onError","fromOption","Result","measure","startAddress","gridA","gridB","rowRemainder","colRemainder","colRequired","rowRequired","rowDelta","colDelta","measureWidth","colLengthA","colLengthB","generator","rowFill","_row","colFill","tailor","fillCols","fillRows","modifiedCols","tailoredGrid","Fitment","substitution","unmerge","isToReplace","uniqueCells","currentCell","splitRows","rowPrevCells","_loop_2","sub","MergingOperations","isSpanning","matching","mergeTables","mergeHeight","mergeWidth","merge$1","fittedGrid","fittedNewGrid","secondDelta","fittedOldGrid","TableMerge","insertRowAt","between","withinSpan","insertColumnAt","splitCellIntoColumns","exampleRow","exampleCol","isTargetCell","splitCellIntoRows","deleteColumnsAt","deleteRowsAt","ModificationOperations","replaceIn","isTarget","notStartRow","colIndex","notStartColumn","replaceColumn","alreadyAdded","replaceRow","targetRow","TransformOperations","only","middle","ColumnContext","neighbours$1","determine","zero","onOnly","singleColumnWidth","newNext","minCellWidth","newThis","diffx","onLeft","onMiddle","_prev","onRight","Deltas","getSpan$1","hasColspan","hasRowspan","getInt","CellUtils","getRaw$1","getRawW","getRawH","getWidthFrom","backups","columnCell","deduced","getDeduced","getRawWidths","getPercentageWidths","getPixelWidths","getHeightFrom","rowCell","getPixelHeights","getRawHeights","ColumnSizes","measures","recalculateWidth","widths","recalculateHeight","heights","matchRowHeight","Recalculations","percentageSize","getCellDelta","_delta","setTableWidth","_newWidths","ratio","change","getWidths","setElementWidth","pixelSize","newWidths","chooseSize","fallbackWidth","getTableSize","TableSize","getWarehouse$1","sumUp","getTableWarehouse","adjustWidth","deltas","newSizes","adjustHeight","newHeights","newCellSizes","newRowSizes","adjustWidthTo","Adjustments","handleUnsupported","baseWith","invalidKeys","handleExact","exactly","verifyGenerators","elementToData","modification","toData","nuFrom","recent","getOrInit","transform","makeNew","replaceOrInit","merging","combine","Generators","blockList","isFormatting","isHeading","isContainer","isFrame","isInline","Structure","universe$1","isBlock$1","isFormatting$1","isHeading$1","isContainer$1","isEmptyTag$1","isFrame$1","isInline$1","DomStructure","merge$2","advancedBr","isListItem","siblingIsBlock","rightSibling","markCell","rightSiblingIsBlock","markContent","contents","TableContent","outcome","elementFromGrid","findIn","bundle","uniqueRows","currentDetail","uniqueColumns","insertRowBefore","targetIndex","newGrid","insertRowsBefore","newG","insertRowAfter","insertRowsAfter","insertColumnBefore","insertColumnsBefore","insertColumnAfter","insertColumnsAfter","makeRowHeader","makeColumnHeader","unmakeRowHeader","unmakeColumnHeader","splitCellIntoColumns$1","splitCellIntoRows$1","eraseColumns","_comparator","_genWrappers","eraseRows","mergeCells","unmergeCells","pasteDetails","gridify","wh","mergedGrid","nuGrid","gridifyRows","pasteRowsBefore","pasteRowsAfter","TableOperations","getBody$1","getPixelWidth$1","getPixelHeight","removePxSuffix","addSizeSuffix","removeDataStyle","dataStyleCells","getDirection","ltr$1","rtl$1","Direction","defaultTableToolbar","defaultStyles","defaultAttributes","getDefaultAttributes","getDefaultStyles","hasTableResizeBars","hasTabNavigation","hasAdvancedCellTab","hasAdvancedRowTab","hasAdvancedTableTab","hasAppearanceOptions","hasTableGrid","shouldStyleWithCss","getCellClassList","getRowClassList","getTableClassList","isPixelsForced","getCloneElements","cloneElements","hasObjectResizing","objectResizing","getToolbar","toolbar","fireNewRow","fireNewCell","fireObjectResizeStart","fireObjectResized","TableActions","lazyWire","isTableBody","lastRowGuard","lastColumnGuard","execute","guard","deleteRow","deleteColumn","copyRows","selectedCells","slicedGrid","slicedDetails","CopyRows","getTDTHOverallStyle","firstChildStyle","checkChildren","currentStyle","applyAlign","applyVAlign","unApplyAlign","unApplyVAlign","Styles$1","styleFieldHasFocus","isEqualNode","activeElement","syncAdvancedStyleFields","updateAdvancedFields","updateStyleField","borderColor","backgroundColor","extractAdvancedStyles","createStyleForm","createColorPickAction","formItemDefaults","alignH","onaction","Helpers","updateStyles","dataset","mceStyle","extractDataFromElement","valign","matchNode","onSubmitCellForm","cellElm","generalCellForm","labelGapCalc","CellDialog","extractDataFromElement$1","switchRowType","rowElm","toType","oldParentElm","parentElm","onSubmitRowForm","generalRowForm","RowDialog","DefaultRenderOptions","percentages","makeTable","tableBody","tableRow","tableHeaderCell","tableCell","render$1","rowHeaders","columnHeaders","renderOpts","tbody","trs","get$7","getOuter$2","placeCaretInCell","selectFirstCellInTable","fireEvents","isPercentage","insert$1","InsertTable","styleTDTH","extractDataFromElement$2","cellspacing","cellpadding","applyDataToElement","onSubmitTableForm","captionElm","open$2","isProps","colsCtrl","rowsCtrl","generalTableForm","TableDialog","each$3","registerCommands","clipboardRows","eraseTable","getSelectionStartCell","getSelectionStartCaption","cellOrCaption","getSelectionStartFromSelector","getTableFromCell","resizeChange","oldSize","actOnSelection","beforeSize","copyRowSelection","pasteOnSelection","clonedRows","mceTableSplitCells","mceTableMergeCells","mceTableInsertRowBefore","mceTableInsertRowAfter","mceTableInsertColBefore","mceTableInsertColAfter","mceTableDeleteCol","mceTableDeleteRow","mceTableCutRow","mceTableCopyRow","mceTablePasteRowBefore","mceTablePasteRowAfter","mceTableDelete","mceInsertTable","mceTableProps","mceTableRowProps","mceTableCellProps","view","detached","editable","body$1","ResizeWire","Event","handlers","trigger","typeDefs","registry","mkEvent","prevent","kill","rawEvent","binder","useCapture","bind$1","bind$2","shallow$1","merge$3","styles$1","Styles$2","Blocker","layerClass","DragMode","DragSink","DragApi","compare","extract$1","sink","dragApi","mdown","forceDrop","mup","drop","mmove","move","mout","delayDrop","MouseDrag","last$2","rate","timer","throttle","InDrag","onEvent","dataOption","events","NoDrag","Movement","noDragState","inDragState","dragState","isOn","movement","throttledDrop","go","mousemove","runIfActive","Dragging","transform$1","Dragger","Mutation","BarMutation","delegate","xDelta","yDelta","isContentEditableTrue","findClosestContentEditable","resizeBarDragging","BarManager","resizing","hoverTable","getResizer","_dataRow","_dataCol","currentCol","getDelta","newX","oldX","startAdjust","mousedown","findClosestEditableTable","mouseover","hideBars","showBars","manager","beforeResize","afterResize","startDrag","TableResize","createContainer","get$8","remove$6","TableWire","ResizeHandler","startW","startRawW","selectionRng","isTable","lazyResize","sz","rawWire","rawTable","percentW","targetPercentW","newCellSizes_1","newCellSize","adt$1","none$1","CellLocation","detect$4","CellNavigation","create$3","SimRange","adt$2","cata$1","onBefore","onOn","onAfter","situ","before$2","after$2","Situ","adt$3","domRange","relative","exact","exactFromRange","simRange","soffset","foffset","getStart$1","startSitu","finishSitu","getWin","range$1","selectNodeContentsUsing","setFinish","setEndBefore","relativeToNative","exactToNative","toRect","getFirstRect","rects","getClientRects","adt$4","fromRange","getRanges","doDiagnose","ranges","reversed","rev","diagnose","asLtrRange","diagnosis","searchForPoint","rectForOffset","maxX","curDeltaX","inRect","locateOffset","textnode","rangeForOffset","locate","selectNode","foundRect","searchInChildren","locateNode","locate$1","boundedX","boundedY","COLLAPSE_TO_LEFT","COLLAPSE_TO_RIGHT","getCollapseDirection","createCollapsedNode","collapseDirection","locateInElement","cursorRange","locateInEmpty","caretPositionFromPoint","caretRangeFromPoint","searchTextNodes","searchFromPoint","availableSearch","fromPoint$1","beforeSpecial","name$1","preprocessRelative","preprocessExact","preprocess","makeRange","after$3","same","doSetNativeRange","getSelection","removeAllRanges","addRange","doSetRange","setLegacyRtlRange","setRangeFromRelative","setBaseAndExtent","setExact","setRelative","toNative","getDomRange","readRange","rangeCount","firstRng","getRangeAt","doGetExact","anchorNode","focusNode","anchorOffset","focusOffset","setToElement","getExact","get$9","getFirstRect$1","getAtPoint","forward","backward","getCellFirstCursorPosition","getNewRowCursorPosition","rootElements","handle$1","body_1","isRoot_1","navigation","TabContext","create$4","Response","create$5","Situs","convertToRange","makeSitus","Util","sync","selectRange","detect$5","cellSel","annotations","newSels","KeySelection","backtrack","_direction","transition","sidestep","advance","successors","go$1","ruleOpt","succ","Walkers","hone","left$1","right$1","isLeaf","before$3","seekLeft","after$4","seekRight","universe$2","before$4","after$5","seekLeft$1","seekRight$1","ancestor$2","adt$5","failedUp","failedDown","isOverlapping","bridge","beforeBounds","getRect","afterBounds","isRow","verify","beforeOffset","afterOffset","afterCell","beforeCell","_sharedRow","cata$2","onSuccess","onFailedUp","onFailedDown","BeforeAfter","inParent","indexInParent","gatherer","cand","gather","handleBr","findBr","handleParent","adjacent","tryBr","tgt","analysis","BrTags","nu$3","moveDown","caret","moveUp","moveBottomTo","moveTopTo","getTop$1","getBottom","Carets","getPartialBox","getRangedRect","toCaret","getElemBox","getBoxAt","getEntireBox","Rectangles","JUMP_SIZE","NUM_RETRIES","adt$6","retry","isOutside","inOutsideBlock","adjustDown","guessBox","lowerCaret","adjustUp","higherCaret","upMovement","adjuster","downMovement","isAtTable","adjustForTable","numRetries","adjustTil","situsFromPoint","newCaret","ieTryDown","ieTryUp","checkScroll","adjusted","getInnerHeight","moved","scrollBy","Retries","tryUp","tryDown","getJumpSize","MAX_RETRIES","platform$1","findSpot","brNeighbour","fromSitus","scan","tryCursor","situs","tryAgain","tryAt","otherRetry","ieRetry","handle$2","spot","TableKeys","inSameTable","simulate","navigate","precheck","firstUpCheck","lastOffset","lastDownCheck","VerticalMovement","findCell","MouseSelection","clearState","selectContents","mouseup","_event","KeyDirection","isKey","keycode","isUp","isDown","isNavigation","SelectionKeys","isBackward","toRaw","sr","Rect","get$a","_DOC","by","WindowBridge","exactAdt","clearSelection","setRelativeSelection","getScrollY","rc","mouse","keyboard","clearToNavigate","keydown","realEvent","which","attempts","keyup","InputHandlers","remove$7","removeClasses","byClass","ephemera","addSelectionClass","removeSelectionClasses","byAttr","removeSelectionAttributes","addSelectionAttribute","SelectionAnnotation","hasInternalTarget","CellSelection$1","handlerStruct","syncSelection","mouseHandlers","keyHandlers","hasShiftKey","handleResponse","wrappedEvent","wrapEvent","isMouseEvent","isLeftMouse","isLeftButtonPressed","mouseDown","mouseOver","mouseUp","Selections","each$4","addButtons","addToolbars","addMenuItems","tableCtrls","cellCtrls","mergeCtrls","unmergeCtrls","noTargetDisable","ctrlEnable","pushTable","pushCell","pushMerge","pushUnmerge","setDisabledCtrls","mergeCtrl","unmergeCtrl","cellDom","generateTableGrid","selectGrid","tx","ty","focusCell","insertTable","ariaHideMenu","aria","hideAll","lastX","lastY","onmousemove","tableProperties","deleteTable","MenuItems","getClipboardRows","setClipboardRows","sugarRows","getApi","addTempAttr","Plugin$1","sq","ie11","ie12","iDevice","fileApi","phone","tablet","windowsPhone","isNull","partition","pass","fail","difference","a1","a2","mapToObject","nav","matchMediaQuery","matchMedia","appName","requestAnimationFramePromise","Env","caretAfter","documentMode","overrideViewPort","experimentalShadowDom","canHaveCSP","desktop","promiseObj","requestAnimationFrame","requestAnimationFrameFunc","vendors","featurefill","wrappedSetTimeout","wrappedSetInterval","wrappedClearTimeout","wrappedClearInterval","debounce","Delay","setEditorInterval","eventExpandoPrefix","mouseEventRe","deprecated","keyLocation","layerX","layerY","returnValue","webkitMovementX","webkitMovementY","keyIdentifier","hasIsDefaultPrevented","returnTrue","returnFalse","addEvent","attachEvent","removeEvent","detachEvent","getTargetFromShadowDom","defaultTarget","composedPath","fix","originalEvent","srcElement","eventDoc","isPropagationStopped","cancelBubble","isImmediatePropagationStopped","bindOnReady","eventUtils","domLoaded","isDocReady","readyHandler","waitForDomLoaded","tryScroll","doScroll","EventUtils","expando","hasFocusIn","hasMouseEnterLeave","mouseEnterLeave","mouseenter","mouseleave","executeHandlers","callbackList","fakeName","nativeHandler","defaultNativeHandler","related","currentTarget","relatedTarget","eventMap","support","Expr","isXML","compile","outermostContext","sortInput","hasDuplicate","setDocument","docElem","documentIsHTML","rbuggyQSA","rbuggyMatches","preferredDoc","dirruns","classCache","createCache","tokenCache","compilerCache","sortOrder","strundefined","MAX_NEGATIVE","hasOwn","push_native","indexOf$1","booleans","pseudos","rcomma","rcombinators","rattributeQuotes","rpseudo","ridentifier","matchExpr","ID","CLASS","ATTR","PSEUDO","CHILD","bool","needsContext","rinputs","rheader","rnative","rquickExpr","rsibling","rescape","runescape","funescape","escaped","escapedWhitespace","high","els","Sizzle","seed","nid","newContext","newSelector","getElementsByClassName","qsa","toSelector","testContext","qsaError","cacheLength","markFunction","siblingCheck","cur","sourceIndex","createInputPseudo","createButtonPseudo","createPositionalPseudo","matchIndexes","hasCompare","getById","attrId","disconnectedMatch","adown","bup","sortDetached","aup","ap","bp","expr","matchesSelector","attrHandle","getAttributeNode","specified","uniqueSort","duplicates","detectDuplicates","sortStable","createPseudo","preFilter","excess","unquoted","nodeNameSelector","what","ofType","outerCache","useCache","pseudo","setFilters","unmatched","elemLang","hasFocus","tabIndex","enabled","selectedIndex","even","odd","gt","nth","radio","checkbox","password","addCombinator","combinator","checkNonElements","doneName","oldCache","newCache","elementMatcher","matchers","multipleContexts","contexts","condense","newUnmatched","mapped","setMatcher","postFilter","postFinder","postSelector","preMap","postMap","preexisting","elems","matcherIn","matcherOut","matcherFromTokens","checkContext","leadingRelative","implicitRelative","matchContext","matchAnyContext","matcherFromGroupMatchers","elementMatchers","setMatchers","bySet","byElement","superMatcher","outermost","matchedCount","setMatched","contextBackup","dirrunsUnique","filters","parseOnly","soFar","preFilters","compiled","isArray$1","indexOf$2","collection","iteratee","accumulator","findIndex$1","ArrUtils","whiteSpaceRegExp","delim","sp","cn","scn","createNS","onCreate","static","ext","resolve$1","explode","_addCacheSuffix","push$1","slice$1","rquickExpr$1","skipUniques","isDefined","isString$1","isWindow","fragDoc","frag","domManipulate","targetNodes","sourceItem","getElementDocument","DomQuery","makeArray","lastParent","newWrapper","numericCssMap","booleanMap","propFix","cssFix","float","attrHooks","cssHooks","whiteSpaceRegExp$1","trim$1","camel","dashed","prependTo","wrapAll","wrapInner","existingClassName","classState","siblingName","firstSibling","parentsUntil","nextUntil","prevUntil","overrideDefaults","appendHooks","targetHooks","maxlength","opacity","find$2","ie$1","opera$1","android$1","trim$2","lTrim","rTrim","hasOwnProperty$1","map$2","bifilter","branch","getAllRaw","ruleName","toArray$1","recurse","Recurse","contains$3","prevSiblings","nextSiblings","childNodesCount","browser$1","firstElement","getTableCaptionDeltaY","bodyTop","captionTop","captionHeight","rootElm","offsetParent","module$1","nu$4","StyleSheetLoader","maxLoadTime","idCount","loadedStates","appendToHead","loadedCallback","startTime","passed","failed","isOldWebKit","webKitChunks","wait","testCallback","waitCallback","waitForWebKitLinkLoaded","ownerNode","owningElement","waitForGeckoLinkLoaded","sheet","defer","contentCssCors","crossOrigin","loadF","unbox","loadAll","TreeWalker","findSibling","startName","findPreviousNode","prev2","namedEntities","baseEntities","reverseEntities","voids","tableCells","tableSections","headings","wsElements","lazyLookup","isVoid","isTableSection","isTableCell","isWsPreserveElement","isNodeType","isRestrictedNode","isElement$1","matchNodeNames","matchStyleValues","cssValue","hasPropValue","propName","propValue","hasAttributeValue","isBogus","isBogusAll","hasContentEditableState","isText$1","isDocument","isDocumentFragment","isBr$1","surroundedBySpans","previousIsSpan","nextIsSpan","trimNode","trimmedLength","TrimNode","makeMap$1","attrsCharsRegExp","textCharsRegExp","rawCharsRegExp","entityRegExp","asciiMap","128","130","131","132","133","134","135","136","137","138","139","140","142","145","146","147","148","149","150","151","152","153","154","155","156","158","159","'","nativeDecode","buildEntitiesLookup","encodeRaw","encodeNumeric","encodeNamed","entities","getEncodeFunc","entitiesMap","encodeNamedAndNumeric","encodeCustomNamed","nameMap","named","numeric","Entities","mapCache","dummyObj","makeMap$2","extend$1","explode$1","inArray$1","compileSchema","globalAttributes","blockContent","phrasingContent","flowContent","html4BlockContent","html4PhrasingContent","ni","arrayToMap","addAttrs","schemaItem","compileElementMap","Schema","invalidStyles","schemaItems","whiteSpaceElementsMap","selfClosingElementsMap","boolAttrMap","validClasses","nonEmptyElementsMap","moveCaretBeforeOnEnterElementsMap","textBlockElementsMap","textInlineElementsMap","patternElements","customElementsMap","createLookupTable","option","defaultValue","extendWith","verify_html","valid_styles","invalid_styles","valid_classes","patternToRegExp","addValidElements","ei","al","attrData","attrType","outputName","globalAttributesOrder","elementRuleRegExp","attrRuleRegExp","hasPatternsRegExp","paddEmpty","removeEmpty","removeEmptyAttrs","attributesRequired","attributesDefault","attributesForced","forcedValue","attributePatterns","setValidElements","addCustomElements","customElements","customElementRegExp","text_block_elements","block_elements","cloneName","customRule","elmName","addValidChildren","validChildren","childRuleRegExp","getElementRule","custom_elements","extended_valid_elements","dt","thead","tfoot","legend","area","param","parentsRequired","invalid_elements","getValidStyles","getInvalidStyles","getValidClasses","getTextInlineElements","getSelfClosingElements","getMoveCaretBeforeOnEnterElements","isValidChild","attrPatterns","getCustomElements","hex","encodingItems","rgbRegExp","urlOrStrRegExp","styleRegExp","trimRightRegExp","encodingLookup","invisibleChar","isEncoded","urlConverter","url_converter","urlConverterScope","url_converter_scope","compress","noJoin","canCompress","compress2","keepSlashes","decodeSingleHexSequence","escSeq","decodeHexSequences","processUrl","url2","url3","str2","allow_script_urls","scriptUrl","allow_svg_data_urls","serializeStyles","styleList","each$5","grep$1","simpleSelectorRe","whiteSpaceRegExp$2","setupAttrHooks","keepValues","keep_values","keepUrlHook","updateInternalStyleAttr","rawValue","findNodeIndex","lastNodeType","DOMUtils","addedStyles","stdMode","boxModel","styleSheetLoader","boundEvents","ownEvents","getElementsByName","$$","defaultVal","getAttribs","originalValue","onSetAttrib","attrElm","clone_1","root_element","argWin","actWin","update_styles","stylesArg","collect","selectorVal","_findSib","getNext","getPrev","setHTML","canHaveHTML","newElm","outHtml","keepChildren","$node","removeAllAttribs","removeAttributeNode","addStyle","styleElm","loadCSS","cls","isHidden","getOuterHTML","setOuterHTML","reference","referenceNode","oldElm","attrNode","findCommonAncestor","pe","rgbVal","brCount","bogusVal","splitElm","replacementElm","bef","aft","pa","getContentEditableParent","dumpRng","DOMUtils$1","each$6","grep$2","isFunction$1","ScriptLoader","QUEUED","LOADING","LOADED","FAILED","scriptLoadedCallbacks","queueLoadedCallbacks","loadScript","isDone","markDone","loadQueue","loadScripts","failures","execCallbacks","loadingScripts","notifyCallbacks","each$7","AddOnManager","_listeners","dependencies","requireLangPack","languageLoad","addOn","listener","createUrl","baseUrl","dep","resource","addComponents","pluginName","loadDependencies","addOnUrl","deps","urlString","waitFor","PluginManager","ThemeManager","wrap$1","has$2","annotation","dataAnnotation","dataAnnotationId","annotationName","an","newStart","findMarkers","isAnnotation","findAll","markers","directory","nodesAlready","changeCallbacks","initData","withCallbacks","updateCallbacks","callbackMap","outputData","fireCallbacks","fireNoAnnotation","onNodeChange","identifyParserNode","optAnnotation","persistent","__rest","add$3","owner$1","docDom","contentElements","ZWSP","isZwsp","trim$3","Zwsp","isElement$2","isText$2","isCaretContainerBlock","isCaretContainerInline","isCaretContainer","insertInline","endsWithCaretContainer","startsWithCaretContainer","isBeforeInline","isAtStart","isAfterInline","isAtEnd","createBogusBr","insertBlock","blockNode","trimBogusBr","brs","lastBr","showCaretContainerBlock","caretContainer","isRangeInCaretContainerBlock","isContentEditableTrue$1","isContentEditableFalse$1","isBr$2","isText$3","isInvalidTextElement","isAtomicInline","isTable$1","isCaretContainer$1","isCaretCandidate","isNonUiContentEditableFalse","isUnselectable","isInEditable","isAtomicContentEditableFalse","isAtomic","isEditableCaretCandidate","toStart","isEqual","rect1","rect2","isValidOverflow","overflowY","isAbove","halfHeight","isBelow","containsXY","overflowX","getOverflow","getSelectedNode","extendingChars","isExtendingChar","lift3","oc","slice$2","and","Predicate","isElement$3","isCaretCandidate$1","isFloated","isValidElementCaretCandidate","isNotPre","isText$4","isBr$3","resolveIndex","isWhiteSpace","isRange","isHiddenWhiteSpaceRange","getBrClientRect","brNode","clientRect","nbsp","getBoundingClientRectWebKitText","ec","so","isZeroRect","clientRects","collapseAndInflateWidth","newClientRect","getCaretPositionClientRects","caretPosition","beforeNode","addUniqueAndValidRect","addCharacterOffset","CaretPosition","toRange","isVisible","fromRangeStart","fromRangeEnd","isTextPosition","isElementPosition","HDirection","CaretPosition$1","isText$5","isBogus$1","nodeIndex$1","normalizedParent","getChildNodes","normalizedTextOffset","equal","normalizedNodeIndex","numTextFragments","createPathItem","outputOffset","resolvePathItem","findTextPosition","dataLen","targetOffset","resolve$2","trimEmptyTextNode","insertFragment","rangeInsertNode","isContentEditableFalse$2","getNormalizedTextOffset","trimmedOffset","getPoint","getLocation","findIndex$2","moveEndPoint","normalizeTableCellSelection","findAdjacentContentEditableFalseElm","getOffsetBookmark","getCaretBookmark","getRangeBookmark","createBookmarkSpan","filled","getPersistentBookmark","rng2","endBookmarkNode","startBookmarkNode","keep","GetBookmark","getUndoBookmark","CARET_ID","isCaretNode","getParentCaretContainer","isElement$4","isText$6","removeNode","getNodeValue","setNodeValue","trimCount","trimmedText","removeUnchanged","removeTextAndReposition","removeElementAndReposition","newPosition","removeTextCaretContainer","removeElementCaretContainer","removeAndReposition","caretContainerNode","CaretContainerRemove","browser$2","isContentEditableFalse$3","isTableCell$1","getAbsoluteClientRect","scrollX","scrollY","rootRect","trimInlineCaretContainers","contentEditableFalseNodes","FakeCaret","cursorInterval","lastVisualCaret","caretState","startBlink","reposition","getCss","isFakeCaretTableBrowser","isFakeCaretTarget","isContentEditableFalse$4","isBlockLike","isCaretContainer$2","isCaretContainerBlock$1","isElement$5","isCaretCandidate$2","isForwards","isBackwards","skipCaretContainers","findNode","getParentBlock","isInSameBlock","caretPosition1","caretPosition2","getChildNodeAtRelativeOffset","relativeOffset","beforeAfter","isNodesInSameBlock","node1","node2","lean","leanLeft","leanRight","getRelativeCefElm","getNormalizedRangeEndPoint","normalizedRange","getElementFromPosition","getElementFromPrevPosition","getVisualCaretPosition","walkFn","isMoveInsideSameBlock","inSameBlock","isContentEditableFalse$5","isText$7","isElement$6","isBr$4","isCaretCandidate$3","isAtomic$1","isEditableCaretCandidate$1","nodeAtIndex","getCaretCandidatePosition","moveForwardFromBr","nextNode","findCaretPosition","Forwards","rootContentEditableFalseElm","CaretWalker","Backwards","walkToPositionIn","fromPosition","afterElement","isBeforeOrStart","isAfterOrEnd","isBeforeAfterSameElement","isAtBr","shouldSkipPosition","navigateIgnore","ignoreFilter","positionIn","nextPosition","prevPosition","CaretFinder","firstPositionIn","lastPositionIn","isStringPathBookmark","isRangeBookmark","isIdBookmark","isIndexBookmark","isPathBookmark","addBogus","resolveCaretPositionBookmark","insertZwsp","tryFindRangePosition","padEmptyCaretContainer","setEndPoint","isValidTextNode","appendData","o1","o2","resolvePaths","resolveId","spos","epos","resolveIndex$1","resolve$3","ResolveBookmark","getBookmark$1","isBookmarkNode$1","Bookmarks","isInlineBlock","moveStart","isWhiteSpaceNode","getNonWhiteSpaceSibling","inc","isTextBlock$1","ed","replaceVars","vars","isEq","str1","normalizeStyleValue","getTextDecoration","decoration","getParents$1","FormatUtils","isBookmarkNode$2","getParents$2","isWhiteSpaceNode$1","isTextBlock$2","findLeaf","excludeTrailingWhitespace","leaf","findParentContentEditable","findSpace","findWordEndPoint","lastTextNode","findSelectorEndPoint","curFormat","findBlockEndPoint","scopeRoot","findParentContainer","block_expand","expandRng","endPoint","expand","ExpandRange","each$8","getEndChild","walk$1","startPoint","exclude","collectSiblings","findEndPoint","walkBoundary","RangeWalk","zeroWidth","isZeroWidth","wrapName","shouldApplyToTrailingSpaces","applyWordGrab","makeAnnotation","eDoc","decorate","_b","master","annotate","newWrappers","finishWrapper","getOrOpenWrapper","processElements","processElement","processNodes","annotateWithBookmark","initialRng","Annotator","changes","annotationChanged","hasOnlyOneChild","isPaddingNode","isPaddedEmptyBlock","isEmptyFragmentElement","nonEmptyElements","isListFragment","cleanupDomFragment","domFragment","toDomFragment","listItems$1","isPadding","isListItemPadded","isEmptyOrPadded","trimListItems","getParentLi","isParentBlockLi","getSplit","beforeRng","afterRng","cloneContents","findFirstIn","caretPos","caretWalker","newCaretPos","findLastOf","insertMiddle","insertAtCaret","liTarget","liElms","BEGINNING","END","isAt","newPos","InsertList","each$9","ElementUtils","compareObjects","obj1","obj2","getLastChildren","rawNode","removeTrailingBr","allBrs","fillWithPaddingBr","isPaddingContents","isPaddedElement","trimBlockTrailingBr","lastChildPrevSibling","PaddingBr","makeMap$3","Writer","indentBefore","indentAfter","htmlOutput","entity_encoding","element_format","pi","HtmlSerializer","11","sortedAttrs","elementRule","createRange$1","normalizeBlockSelectionRange","commonAncestorContainer","newEndPos","RangeNormalizer","isAfterNbsp","trimOrPadLeftRight","hasSiblingText","trimNbspAfterDeleteAndPadValue","isTableCell$2","selectionSetContent","validInsertion","trimBrsFromTableCell","reduceInlineTextElements","textInlineElements","root_1","elementUtils_1","testNode","markFragmentElements","umarkFragmentElements","isPartOfFragment","canHaveChildren","moveSelectionToMarker","parentEditableFalseElm","nextRng","getContentEditableFalseParent","findNextCaretRng","insertHtmlAtCaret","bookmarkHtml","caretElement","parentElement","parserArgs","_selectionOverrides","showBlockCaretContainer","processValue","insertAtCaret$1","InsertContent","strongRtl","hasStrongRtl","getBodySetting","bodyObj","getIframeAttrs","getDocType","getDocumentBaseUrl","getBodyId","getBodyClass","getContentSecurityPolicy","shouldPutBrInPre","getForcedRootBlock","getForcedRootBlockAttrs","getBrNewLineSelector","getNoNewLineSelector","shouldKeepStyles","shouldEndContainerOnEmptyBlock","getFontStyleValues","getFontSizeClasses","getImagesDataImgFilter","isAutomaticUploadsEnabled","shouldReuseFileName","shouldReplaceBlobUris","getImageUploadUrl","getImageUploadBasePath","getImagesUploadCredentials","getImagesUploadHandler","shouldUseContentCssCors","getInlineBoundarySelector","isInlineTarget","findInlineParents","findRootInline","hasSameParentBlock","block1","block2","isAtZwsp","normalizePosition","normalizeForwards","normalizeBackwards","InlineUtils","isBeforeRoot","getParentBlock$1","placeCaretInEmptyBody","paddEmptyBody","willDeleteLastPositionInElement","fromPos","firstPos","lastPos","normalizedFirstPos","normalizedLastPos","normalizedFromPos","nextPos","prevPos","DeleteUtils","hasWhitespacePreserveParent","rootElement","isWhitespace","isNamedAnchor","isContent","isBookmark","isBogus$2","isBogusAll$1","isEmptyNode","isEmpty$1","Empty","BlockPosition","BlockBoundary","getBlockPosition","isDifferentBlocks","blockBoundary","hasSameParent","parent1","parent2","isEditable","skipLastBr","blockPosition","lastPositionInBlock","readFromRange","fromBlockPos","toBlockPos","blockPos","read$1","BlockMergeBoundary","dropLast","parentsUntil$1","parents$1","parentsAndSelf","Parents","getChildrenUntilBlockBoundary","extractChildren","removeEmptyRoot","isEmptyBefore","nestedBlockMerge","fromBlock","toBlock","insertionPoint","sidelongBlockMerge","findInsertionPoint","getInsertionPoint","trimBr","mergeBlockInto","mergeBlocks","MergeBlocks","BlockBoundaryDelete","deleteRangeMergeBlocks","isRawNodeInTable","isSelectionInTable","isEverythingSelected","noPrevious","noNext","emptyEditor","deleteRange","backspaceDelete$1","BlockRangeDelete","isBr$5","parentBlocks","isBeforeBr","isAfterBr","findPreviousBr","findNextBr","is$2","expected","isNbsp","isWhiteSpace$1","isContent$1","isChar","isBeforeSpace","isAfterSpace","isEmptyText","isNextToContentEditableFalse","isBeforeContentEditableFalse","isAfterContentEditableFalse","isNextToTable","isBeforeTable","isAfterTable","isCompoundElement","DeleteAction","moveToElement","moveToPosition","isAtContentEditableBlockCaret","caretLocation","isDeleteFromCefDifferentBlocks","deleteEmptyBlockOrMoveToCef","toCefElm","blockElm","findCefPosition","getContentEditableBlockAction","skipMoveToActionFromInlineCefToContent","deleteAction","getContentEditableAction","read$2","isCollapsibleWhitespace","normalizeContent","isStartOfContent","isEndOfContent","previousCharIsSpace","normalize$1","replaceData","normalizeWhitespaceAfter","whitespaceCount","normalizeWhitespaceBefore","mergeTextNodes","prevNode","normalizeWhitespace","whitespaceOffset","needsReposition","beforeOrStartOf","afterOrEndOf","getPreviousSiblingCaretPosition","getNextSiblingCaretPosition","findCaretPositionBackwardsFromElm","startPosition","findCaretPositionForwardsFromElm","findCaretPositionBackwards","findCaretPositionForward","findCaretPosition$1","findCaretPosOutsideElmAfterDelete","eqRawNode","isBlock$2","paddEmptyBlock","deleteNormalized","afterDeletePosOpt","prevTextOpt","nextTextOpt","isInlineElement","deleteElement","moveCaret","afterDeletePos","normalizedAfterDeletePos","paddPos","DeleteElement","deleteElement$1","hideFakeCaret","deleteOffscreenSelection","selectedElement","getContentEditableRoot","paddEmptyElement","ceRoot","backspaceDelete$2","CefDelete","isText$8","startsWithCaretContainer$1","endsWithCaretContainer$1","createZwsp","insertBefore$1","insertAfter$1","insertInline$1","insertInlineBefore","insertInlineAfter","insertInlinePos","isPosCaretContainer","caretNode","renderCaret","BoundaryCaret","evaluateUntil","fns","LazyEvaluator","Location","rescope","nPos","isNotInsideFormatCaretContainer","findInsideRootInline","isValidLocation","getElement","readLocation","getName","outside","isEq$1","location1","location2","betweenInlines","fromInline","toInline","skipNoMovement","fromLocation","toLocation","findLocationTraverse","findLocationSimple","findLocation","BoundaryLocation","prevLocation","nextLocation","hasSelectionModifyApi","getSel","modify","moveRel","moveByWord","WordSelection","setCaretPosition","isFeatureEnabled","inline_boundaries","setSelected","renderCaretLocation","findLocation$1","toggleInlines","selectedInlines","targetInlines","safeRemoveCaretContainer","composing","renderInsideInlineCaret","inlines","moveWord","setupSelectedState","moveNextWord","movePrevWord","BoundarySelection","isFeatureEnabled$1","rangeFromPositions","hasOnlyTwoOrLessPositionsLeft","setCaretLocation","deleteFromTo","rescope$1","backspaceDeleteCollapsed","toPosition","backspaceDelete$3","InlineBoundaryDelete","tableCellRng","tableSelection","removeTable","emptyCells","isRootFromElement","getClosestCell","getClosestTable","isExpandedCellRng","cellRng","getTableFromCellRng","startParentTable","endParentTable","getTableCells","getCellRangeFromStartTable","endCell","partialSelection","isWithinSameTable","getCellRng","getTableSelectionFromCellRng","getTableSelectionFromRng","getCellIndex","getSelectedCells","getAction","getActionFromCells","getActionFromRange","TableDeleteAction","getSelectedNodes","hasMultipleRanges","MultiRange","getCellsFromRanges","getCellsFromElement","getCellsFromElementOrRanges","rangeCells","getCellsFromEditor","TableCellSelection","deleteTableElement","deleteCellRange","deleteCaptionRange","emptyElement","deleteTableRange","startElm","getParentCaption","deleteRange$1","getParentCell","deleteBetweenCells","fromCell","toCell","isDeleteOfLastCharPos","fromCaption","emptyCaretCaption","validateCaretCaption","toCaption","deleteCaretInsideCaption","deleteCaretCells","deleteCaretCaption","deleteCaret","backspaceDelete$4","TableDelete","isEq$2","matchesUnInheritedFormatSelector","formatList","inherit","matchParents","matchName","matchItems","itemName","similar","onmatch","startElement","matchedFormatNames","checkedMap","canApply","defaultBlock","MatchFormat","split$1","SplitRange","ZWSP$1","CARET_ID$1","importNode","getEmptyCaretContainers","isCaretContainerEmpty","findFirstTextNode","createCaretContainer","trimZwspFromCaretContainer","removeCaretContainerNode","removeCaretContainer","insertCaretContainerNode","formatNode","appendNode","insertFormatNodesIntoCaretContainer","formatNodes","innerMostFormatNode","applyCaretFormat","wordcharRegex","removeCaretFormat","hasContentAfter","expandedRng","newCaretContainer","disableCaretContainer","replaceWithCaretFormat","innerMost","isFormatElement","inlineElements","isEmptyCaretFormatElement","getParentInlines","hasOnlyOneChild$1","deleteLastPosition","parentInlines","isFormatElement$1","deleteCaret$1","backspaceDelete$5","InlineFormatDelete","getPos$1","fireScrollIntoViewEvent","alignToTop","scrollEvent","scrollElementIntoView","viewPort","viewPortY","viewPortH","offsetY","scrollContainer","getScrollContainer","getViewPortRect","scrollRangeIntoView","rngRect","bodyRect","ScrollIntoView","isContentEditableTrue$2","isContentEditableFalse$6","showCaret","getNodeRange","renderCaretAtRange","caretPositionNode","caretPositionBeforeNode","renderRangeCaret","caretRange","moveToRange","trimEmptyTextNode$1","deleteContentAndShowCaret","peekCaretPosition","deleteCefBoundaryText","getNextVisualCaretPosition","getPrevVisualCaretPosition","getNextPosFn","isBeforeContentEditableFalseFn","nextCaretPosition","backspaceDelete$6","CefBoundaryDelete","nativeCommand","deleteCommand","forwardDeleteCommand","DeleteCommands","getSpecifiedFontProp","getProperty","round$1","precision","factor","toPt","fontSize","normalizeFontFamily","fontFamily","getComputedFontProp","getFontProp","FontInfo","getFontSize","getFontFamily","findFirstCaretElement","isRangeAtStartOfNode","getCaretElement","fromFontSizeNumber","fontSizeNumber","fontSizes","fontClasses","fontNameAction","fontNameQuery","fontSizeAction","fontSizeQuery","isEq$3","rng1","RangeCompare","findParent","hasParent","hasParentWithName","isTable$2","isTableCell$3","isCeFalseCaretContainer","hasBrBeforeAfter","isPrevNode","hasContentEditableFalseParent","findTextNodeRelative","isAfterNode","lastInlineElement","parentBlockContainer","normalizeEndPoint","directionLeft","normalize$2","normRng","NormalizeRange","hasRightSideContent","scrollToBr","brElm","moveSelectionToBr","extraBr","insertBrAtCaret","isAfterLastNodeInContainer","containerBlock","containerBlockName","isControlKey","insertBrBefore","insertBrAfter","hasBrAfter","isBeforeBr$1","isAnchorLink","isInsideAnchor","readInlineAnchorLocation","insertBrOutsideAnchor","anchorLocation","InsertBr","browser$3","normalizeRng","isOrContains","isRngInRoot","shouldStore","nativeRangeToSelectionRange","getBookmark$2","bookmarkToNativeRng","newBookmark","storeNative","restore","SelectionBookmark","indentElement","useMargin","indentStyleName","isListComponent","parentIsListComponent","getBlocksToIndent","indentUnit","indentValue","queryCommandState","each$a","extend$2","map$3","inArray$2","EditorCommands","commands","customCommand","skip_focus","theme","queryCommandValue","addCommands","commandList","queryCommandSupported","addQueryValueHandler","hasCustomCommand","execNativeCommand","isFormatMatch","toggleFormat","storeSelection","restoreSelection","queryCommandEnabled","listParent","hasVisual","editingHost","alignStates","inline_styles","paddingLeft","Undo","Redo","nativeEvents","Dispatcher","toggleEvent","bindings","beforeFire","bindingName","hi","isNative","customEventRootDelegates","getEventDispatcher","_eventDispatcher","toggleNativeEvent","Observable","firePreProcess","firePostProcess","fireRemove","fireDetach","fireSwitchMode","setEditorCommandState","toggleReadOnly","controlSelection","hideResizeRect","setMode","getMode","initialized","isReadOnly","getEventTarget","eventName","event_root","eventRoot","isListening","hidden","fireEvent","bindEventDelegate","eventRootElm","delegates","editorManager","activeEditor","editors","EditorObservable","bindPendingEventDelegates","_pendingNativeEvents","unbindAllNativeEvents","EditorObservable$1","sectionResult","mobilePlugins","defaultMobileSettings","normalizePlugins","pluginNames","trimmedPlugins","filterMobilePlugins","extractSections","getSection","sections","sectionSettings","hasSection","getDefaultSettings","documentBaseUrl","delta_width","delta_height","popup_css","document_base_url","add_form_submit_trigger","submit_patch","add_unload_trigger","convert_urls","relative_urls","remove_script_host","object_resizing","visual","font_size_style_values","font_size_legacy_values","hidden_input","render_ui","convert_fonts_to_spans","ie7_compat","getExternalPlugins","overrideSettings","userDefinedExternalPlugins","external_plugins","combinePlugins","forcedPlugins","processPlugins","isTouchDevice","defaultOverrideSettings","platformPlugins","combinedPlugins","isOnMobile","combineSettings","defaultSettings","extendedSettings","content_editable","getEditorSettings","getFiltered","getParamObject","isArrayOf","each$b","explode$2","keyCodeLookup","f1","f2","f3","f4","f5","f6","f7","f8","f9","f10","f11","f12","modifierNames","Shortcuts","pendingPatterns","parseShortcut","createShortcut","cmdFunc","subpatterns","hasModifier","isFunctionKey","matchShortcut","executeShortcutAction","_doc","getContentEditableHost","getCollapsedNode","getFocusInElement","normalizeSelection","focusBody","setActive","hasElementFocus","hasIframeFocus","iframeElement","hasInlineFocus","rawBody","hasFocus$1","focusEditor","refreshContentEditable","contentEditableHost","activateEditor","bookmarkRng","skipFocus","EditorFocus","rawElm","getComputedSizeProp","getClientWidth","getClientHeight","getMarginTop","getMarginLeft","getBoundingClientRect$1","isInsideElementContentArea","bodyElm","isXYInContentArea","transposedPoint","fromDomSafe","isEditorAttachedToDom","rawContainer","EditorView","NotificationManagerImpl","unimplemented","getArgs","NotificationManager","notifications","getImplementation","getNotificationManagerImpl","getTopNotification","progressBar","addNotification","notification","closeNotification","otherNotification","getNotifications","serviceMessage","service_message","WindowManagerImpl","getParams","setParams","WindowManager","getWindowManagerImpl","funcBind","fireOpenEvent","fireCloseEvent","addWindow","closeWindow","otherWindow","getTopWindow","getWindows","I18n","setCode","newCode","_dir","getCode","getLangData","resolvePluginName","targetUrl","matchUrl","pluginUrlToMessage","_skinLoaded","uploadError","pluginLoadError","pluginInitError","initError","ErrorReporter","PluginManager$1","uploadStatus","pendingPromises","noUpload","handlerSuccess","handlerFailure","resolvePending","uploadBlobInfo","openNotification","markPending","closeNotification_1","markUploaded","removeFailed","percent","pendingUploadBlobInfo","uploadBlobs","blobInfos","isUploaded","isPending","requestAnimationFrame$1","Window","blobUriToBlob","rejectWithError","parseDataUri","uriParts","decodeURIComponent","uriToBlob","Conversions","imageToBlobInfo","dataUri","getAllImages","ImageScanner","cachedPromises","promises","imageInfo","newPromise","rnd","uuid","Uuid","BlobCache","mimeToExt","toBlobInfo","removeByUri","UploadStatus","PENDING","UPLOADED","blobUriStatuses","createStatus","resultUri","hasBlobUri","getResultUri","EditorUpload","imageScanner","urlFilters","aliveGuard","cacheInvalidator","replaceString","replaceImageUrl","replacementUrl","replaceUrlInUndoStack","fragments","replaceImageUri","uploadImages","scanForImages","imageInfos","filteredResult","uploadInfo","dataImgFilter","addFilter","resultItem","replaceBlobUris","isBlockElement","isValidTarget","hasBlockParent","shouldRemoveTextNode","addRootBlocks","rootBlockNode","tempNode","rootNodeName","forcedRootBlock","setup$3","ForceBlocks","getStartNode","getEndNode","getFirstChildren","getLastChildren$1","hasAllContentsSelected","moveEndPoint$1","hasAnyRanges","NodeChange","lastPath","isSameElementPath","currentPath","nativeRng","fakeRng","selectionChange","disable_nodechange","VDirection","VK","HOME","getNodeClientRects","toArrayWithNode","findUntil","walkUntil","isAboveFn","isBeflowFn","targetClientRect","aboveLineNumber","lineNumber","isLineNumber","upUntil","Up","downUntil","Down","positionsUntil","isBelowFn","getClientRect","isAboveLine","isLine","isContentEditableFalse$7","findNode$1","distanceToRectLeft","distanceToRectRight","isInside","findClosestClientRect","oldClientRect","oldDistance","newDistance","walkUntil$1","findLineNodeRects","targetNodeRect","checkPosFn","lineRects","getFakeCaretTargets","caretInfo","closestCaret","closestNodeRect","contentEditableFalseNodeRects","targetNodeRects","isXYWithinRange","RangePoint","getAbsolutePosition","getBodyPosition","getScrollPosition","getBodyScroll","inlineScroll","iframeScroll","getMousePosition","iframePosition","scrollPosition","calculatePosition","bodyPosition","mousePosition","calc","MousePosition","isContentEditableFalse$8","isContentEditableTrue$3","isDraggable","isValidDropTarget","targetElement","dragElement","cloneElement","cloneElm","createGhost","clonedElm","ghostElm","appendGhostToBody","moveGhost","maxY","removeElement","isLeftMouseButtonPressed","hasDraggableElement","applyRelPos","relX","start$1","ceElm","elmPos","screenX","screenY","scrollWidth","relY","ghost","move$1","throttledPlaceCaretAt","placeCaretAt","dragging","getRawTarget","targetClone_1","targetClone","removeDragState","bindFakeDragEvents","pageDom","dragStartHandler","dragHandler","dropHandler","dragEndHandler","rootDocument","blockIeDrop","realTarget","DragDropOverrides","setup$4","renderFocusCaret","CefFocus","isContentEditableTrue$4","isContentEditableFalse$9","getContentEditableRoot$1","SelectionOverrides","selectedContentEditableNode","fakeCaret","realSelectionId","isFakeSelectionElement","getRealSelectionElement","setRange","getRange","blockCaretContainer","contentEditableRoot","removeContentEditableSelection","handleTouchSelect","setContentEditableSelection","hasNormalCaretPosition","hasBetterMouseTarget","targetBlock","caretBlock","normalizeShortEndedElementSelection","isRangeInCaretContainer","realSelectionElement","outerText","addCss","contentStyles","rootClass","isWithinCaretContainer","$realSelectionContainer","origTargetClone","isValidPrefixAttrName","trimComments","sanitizedText","isInvalidUri","findEndTagIndex","tokenRegExp","checkBogusAttribute","attrString","SaxParser","fix_self_closing","endRegExp","attrList","textData","isInternalElement","removeInternalElements","fillAttrsMap","isShortEnded","isValidElement","attribsValue","validAttributesMap","validAttributePatterns","processHtml","anyAttributesRequired","selfClosing","attrRegExp","fixSelfClosing","filteredUrlAttrs","scriptUriRegExp","processEndTag","valid","parseAttribute","val3","attrRule","trimRegExp","self_closing_elements","remove_internals","bogusValue","findEndTag","SaxParser$1","tempAttrs","trimContentRegExp","trimInternal","endTagIndex","matchLength","bogusAllRegExp","getTempAttrs","trimExternal","TrimHtml","KEEP","INSERT","vDown","vUp","snake","diag","buildScript","start1","end1","start2","end2","getMiddleSnake","i2","buildSnake","sum","Diff","getOuterHtml","createFragment$1","insertAt","removeAt","applyDiff","read$3","currentFragments","Fragments","undoLevelDocument","lazyTempDocument","implementation","createHTMLDocument","hasIframes","createFragmentedLevel","beforeBookmark","createCompleteLevel","createFromEditor","trimmedFragments","trimmed","applyToEditor","getLevelContent","getCleanLevelContent","hasEqualContent","level1","level2","hasEqualCleanedContent","isEq$4","Levels","UndoManager","isFirstTypedCharacter","locks","isUnlocked","setTyping","typing","addNonTypingUndoLevel","endTyping","beforeChange","modKey","isInsertReplacementText","inputType","isInsertTextDataNull","currentLevel","custom_undo_redo_levels","hasUndo","hasRedo","callback1","callback2","postProcessHooks","filter$2","each$c","addPostProcessHook","isPre","hasPreSibling","pre","joinPre","pre1","pre2","Hooks","MCE_ATTR_RE","each$d","isEq$5","isTableCell$4","isChildOfInlineParent","lastIdx","wrap$2","wrapWithSiblings","matchName$1","isColorFormatAndAnchor","links","find$3","removeNode$1","rootBlockElm","list_block","compareNode","stylesModified","remove_similar","valueOut","findFormatRoot","formatRoot","wrapAndSplit","lastClone","firstClone","formatRootParent","mixed","splitToFormatRoot","isRemoveBookmarkNode","lastContentEditable","removeRngStyle","textDecoration","ceFalseOverride","RemoveFormat","each$e","isElementNode","findElementSibling","mergeSiblingsNodes","tmpSibling","elementUtils","processChildElements","hasStyle","applyStyle","unwrapEmptySpan","processUnderlineAndColor","mergeUnderlineAndColor","mergeBackgroundColorAndFontSize","mergeSubSup","mergeSiblings","merge_siblings","clearChildStyles","clear_child_styles","mergeWithChildren","mergeWithParents","merge_with_parents","MergeFormats","each$f","isElementNode$1","setElementFormat","onformat","styleVal","applyNodeStyle","applyRngStyle","nodeSpecific","wrapElm","currentWrapElm","childCount","getChildCount","getChildElementNode","mergeStyles","curSelNode","ApplyFormat","each$g","setup$5","formatChangeData","currentFormats","matchedFormats","addListeners","formatChangeItems","formatChanged","formatChangeState","FormatChanged","valigntop","verticalAlign","valignmiddle","valignbottom","alignleft","preview","textAlign","aligncenter","alignright","alignjustify","bold","fontWeight","italic","fontStyle","underline","strikethrough","forecolor","hilitecolor","fontname","fontsize_class","blockquote","subscript","superscript","removeformat","DefaultFormats","FormatRegistry","unregister","each$h","parsedSelectorToHtml","ancestry","sItem","getRequiredParent","elmRule","wrapInHtml","parentCandidate","parentRequired","ancestorName","siblingElm","selectorToHtml","parseSelector","parseSelectorItem","$3","$4","previewFrag","previewElm","parentFontSize","previewStyles","previewCss","preview_styles","removeVars","numValue","Preview","ToggleFormat","setup$6","FormatShortcuts","Formatter","hasOwnProperty$2","htmlParser","internalName","cleanup","hasChildren","trimTrailingBr","brNode1","brNode2","DomSerializerFilters","impl","oldDoc","shouldFireEvent","no_events","DomSerializerPreProcess","removeAttrs","addFontToSpansFilter","face","addStrikeToSpanFilter","addFilters","LegacyFilter","whiteSpaceRegExp$3","typeLookup","walk$2","Node$1","selfAttrs","selfAttr","cloneAttrs","refNode","paddEmptyNode","brPreferred","padd_empty_with_br","isPaddedWithNbsp","hasOnlyChild","isPadded","isEmpty$2","whitespaceElements","isLineBreakNode","remove_trailing_brs","prevName","whiteSpaceElements","appendRel","addNoOpener","allow_html_in_named_anchor","fix_list_elements","classValue","validClassesMap","makeMap$4","each$i","explode$3","extend$3","DomParser","nodeFilters","attributeFilters","matchedNodes","matchedAttributes","fixInvalidChildren","newParent","childNode","nonSplitableElements","textBlockElements","fixed","filterNode","getNodeFilters","getAttributeFilters","fl","isInWhiteSpacePreservedElement","invalidChildren","rootBlockName","startWhiteSpaceRegExp","endWhiteSpaceRegExp","allWhiteSpaceRegExp","isAllWhiteSpaceRegExp","createNode","removeWhitespaceBefore","textNodeNext","textVal","cloneAndExcludeBlocks","attrFiltersLen","postProcess$1","outArgs","getHtmlFromNode","getInner","parseHtml","serializeNode","htmlSerializer","toHtml","DomSerializer","addRules","setRules","DomSerializer$1","domSerializer","BookmarkManager","BreakType","BookmarkManager$1","isContentEditableFalse$a","isContentEditableTrue$5","getContentEditableRoot$2","ControlSelection","selectedElmGhost","resizeHelper","resizeHandles","selectedHandle","startX","startY","selectedElmX","selectedElmY","startH","resizeStarted","startScrollWidth","startScrollHeight","editableDoc","nw","se","isImage","isEventOnImageOutsideRange","contextMenuSelectImage","getResizeTarget","isResizable","resizeGhostElement","proportional","resizeHelperX","resizeHelperY","resize_img_proportional","endGhostResize","setSizeProp","showResizeRect","targetWidth","targetHeight","unbindResizeHandleEvents","handleElm","unSelectabe","updateResizeRect","controlElm","isChildOrEqual","disableGeckoResize","isWithinContentEditableFalse","delayedSelect","throttledUpdateResizeRect","hasCeProperty","findParent$1","findClosestIeRange","createTextRange","moveToElementText","moveToPoint","moveOutOfContentEditableFalse","pointDoc","CaretRangeFromPoint","processRanges","EventProcessRanges","tableModel","cellPosition","fillout","y2","x2","cellExists","skipCellsX","findElementPos","extractRows","sx","sy","ey","subTable","createDomTable","tableElement","modelRowsToDomRows","fromDom$1","toDom","subsection","endElement","SimpleTableModel","findParentListContainer","getFullySelectedListWrappers","listCont","wrap$3","innerElm","directListWrappers","commonAnchorContainer","getWrapElements","wrapElements","listWrappers","allWrappers","emptyFragment","getFragmentFromRange","getParentTable","getTableFragment","selectedTableCells","fullTableModel","sectionedTableModel","getSelectionFragment","read$4","FragmentReader","bin","getHtmlContent","tmpElm","GetSelectionContent","setupArgs","cleanContent","contentArgs","createContextualFragment","anyRng","pasteHTML","SetSelectionContent","getEndpointElement","real","getStart$2","skipEmptyTextNodes","forwards","orig","getNode$1","endElm","select$1","each$j","isNativeIeSelection","isAttachedToDom","isValidRange","Selection$1","bookmarkManager","selectedRange","explicitRange","selectorChangedData","getEnd$1","compareEndPoints","tryCompareBoundaryPoints","how","sourceRange","destinationRange","compareBoundaryPoints","START_TO_START","END_TO_END","ieRange","setNode","getSelectedBlocks$1","anchorRange","focusRange","selectorChanged","currentSelectors","matchedSelectors","walk$3","getBreakType","currentPos","Br","Block","Wrap","getPositionsUntil","breakType","breakAt","Eol","getAdjacentLinePositions","getPositionsUntilBreak","findClosestHorizontalPositionFromPoint","newRect","lastDist","newDist","findClosestHorizontalPosition","targetRect","getPositionsUntilPreviousLine","getPositionsUntilNextLine","isAtFirstLine","isAtLastLine","getPositionsAbove","getPositionsBelow","getFirstLinePositions","getLastLinePositions","isContentEditableFalse$b","getSelectedNode$1","moveToCeFalseHorizontally","rangeIsInContainerBlock","moveToCeFalseVertically","walkerFn","linePositions","nextLinePositions","closestNextLineRect","caretClientRect","dist1","dist2","contentEditableFalseNode","caretPositions","exitPreBlock","getHorizontalRange","newRange","getVerticalRange","moveH","moveV","isCefPosition","moveToLineEndPoint","deflate","getCorners","getYAxisValue","tds","findClosestCorner","corners","newCorner","oldCorner","oldDist","getClosestCell$1","isTargetCorner","corner","getBottomValue","getTopValue","isAbove$1","isBelow$1","getClosestCellAbove","getClosestCellBelow","findClosestPositionInAboveCell","findClosestPositionInBelowCell","hasNextBreak","lineInfo","breakPos","startsWithWrapBreak","startsWithBrBreak","isAtTableCellLine","isAtFirstTableCellLine","isAtLastTableCellLine","isCaretAtStartOrEndOfTable","navigateHorizontally","getClosestAbovePosition","getClosestBelowPosition","getTable","renderBlock","navigateVertically","moveH$1","moveV$1","rangeBefore","insertElement","insertBr","insertBlock$1","insertEmptyLine","getClosestTargetBlock","isAtFirstOrLastLine","moveCaretToNewEmptyLine","rootBlock","rootBlockAttrs","moveV$2","matchesEvent","match$1","MatchKeys","executeKeydownOverride","setup$7","ArrowKeys","executeKeydownOverride$1","executeKeyupOverride","setup$8","DeleteBackspaceKeys","firstNonWhiteSpaceNodeSibling","moveToCaretPosition","tempElm","getEditableRoot","editableRoot","getParentBlock$2","getParentBlockName","isListItemParentBlock","NewLineUtils","hasFirstChild","hasParent$1","isListBlock","isNestedList","getContainerBlock","containerBlockParent","isFirstOrLastLi","createNewBlock","newBlockName","InsertLi","trimZwsp","isEmptyAnchor","isTableCell$5","emptyBlock","containerAndSiblingName","canSplitBlock","trimInlineElementsOnLeftSideOfBlock","firstChilds","normalizeZwspOffset","includeZwspInRange","trimLeadingLineBreaks","getEditableRoot$1","applyAttributes","forcedRootBlockAttrs","attrStyles","currentStyles","newStyles","attrClassesOpt","attrClasses","currentClassesOpt","currentClasses","filteredClasses","newClasses","appliedAttrs","remainingAttrs","setForcedBlockAttrs","forcedRootBlockName","wrapSelfAndSiblingsInDefaultBlock","addBrToBlockIfNeeded","insert$2","parentBlockName","clonedNode","isCaretAtStartOrEndOfBlock","normalizedOffset","insertNewBlockAfter","InsertBlock","shouldInsertBr","shouldBlockNewLine","ContextSelectors","newLineAction","shouldBlockNewLine$1","isBrMode","requiredState","brMode","inListBlock","inPreBlock","inSummaryBlock","shouldPutBrInPre$1","inBrContext","canInsertIntoEditableRoot","rootEditable","match$2","predicates","isMatch","getAction$1","NewLineAction","insert$3","InsertNewLine","endTypingLevel","handleEnterKeyEvent","setup$9","EnterKey","insertTextAtPosition","insertNbspAtPosition","insertSpaceAtPosition","navigateIgnoreEmptyTextNodes","getClosestBlock","isAtBeforeAfterBlockBoundary","isAtBlockBoundary","isAtStartOfBlock","isAtEndOfBlock","isBeforeBlock","isAfterBlock","isInMiddleOfText","getClosestBlock$1","hasSpaceBefore","hasSpaceAfter","isPreValue","isInPre","isAtBeginningOfBody","isAtEndOfBody","isAtLineBoundary","needsToHaveNbsp","needsToBeNbspLeft","needsToBeNbspRight","afterPos","needsToBeNbsp","isNbspAt","hasNbsp","normalizeNbspMiddle","normalizeNbspAtStart","normalizeNbspInMiddleOfTextNode","newText","normalizeNbspAtEnd","normalizeNbsps","normalizeNbspsInEditor","locationToCaretPosition","insertInlineBoundarySpaceOrNbsp","checkPos","setSelection$1","insertSpaceOrNbspAtSelection","executeKeydownOverride$2","setup$a","SpaceKey","findBlockCaretContainer","removeIeControlRect","handleBlockContainer","setup$b","CaretContainerInput","browser$4","setupIeInput","keypressThrotter","setup$c","executeKeydownOverride$3","setup$d","HomeEndKeys","setup$e","KeyboardOverrides","isGecko","isWebKit","mceInternalDataType","setMceInternalContent","selectionHtml","internalContent","getMceInternalContent","insertClipboardContents","emptyEditorWhenDeleting","serializeRng","allContentsSelected","allRng","allSelection","selectAll","inputMethodFocus","removeHrOnBackspace","selectControlElements","removeStylesWhenDeletingAcrossBlockElements","getAttributeApplyFunction","setAttributeNode","isSelectionAcrossElements","disableBackspaceIntoATable","removeBlockQuoteOnBackSpace","setGeckoEditingOptions","setOpts","addBrAfterLastLinks","fixLinks","setDefaultBlockType","showBrokenImageIcon","restoreFocusOnKeyDown","bodyHeight","blockCmdArrowNavigation","disableAutoUrlDetect","tapLinksAndImages","blockFormSubmitInsideEditor","removeAppleInterchangeBrs","ieInternalDragAndDrop","isTextBlockNode","normalizeSelection$1","setup$f","preventSummaryToggle","filterDetails","setup$g","appendStyle","createParser","autoFocus","auto_focus","destroyed","initEditor","getStyleSheetLoader","initContentBody","skipWrite","contentCssText","orgVisibility","iframeHTML","bodyEl","content_document","content_window","bodyElement","hex_colors","force_hex_style_colors","class_filter","annotator","_nodeChangeDispatcher","browser_spellcheck","gecko_spellcheck","nowrap","whiteSpace","content_style","InitContentBody","DOM$3","relaxDomain","ifr","hostname","bodyUuid","domainRelaxUrl","normalizeHeight","normalizedHeight","createIframeElement","customAttrs","frameBorder","allowTransparency","createIframe","isDomainRelaxed","contentAreaContainer","iframeContainer","init$1","boxInfo","orgDisplay","InitIframe","DOM$4","initPlugin","initializedPlugins","pluginInstance","trimLegacyPrefix","initPlugins","initTheme","Theme","renderFromLoadedTheme","min_height","renderUI","deltaWidth","deltaHeight","renderFromThemeFunc","createThemeFalseResult","renderThemeFalseIframe","renderThemeFalse","renderThemeUi","init$2","rtl_ui","i18n","aria_label","content_css","Init","DOM$5","hasSkipLoadPrefix","loadLanguage","scriptLoader","language_url","loadTheme","themeUrl","theme_url","loadPlugins","form","formElement","hasHiddenInput","formEventDelegate","_mceOldSubmit","triggerSave","encoding","_beforeUnload","set_dirty","Render","add$4","sidebars","Sidebar","each$k","trim$4","queryParts","DEFAULT_PORTS","ftp","http","https","mailto","URI","baseUri","base_uri","isProtocolRelative","protocol","toAbsPath","part","userInfo","port","setPath","toRelative","tu","uu","toRelPath","noHost","isSameOrigin","defaultPort","breakPoint","outPath","noProtoHost","loc","pathname","trimEmptyContents","emptyRegExp","getContentFromBody","getContent$1","findMatchingNodes","nodeMatches","attrMatches","filter$3","defaultFormat$1","isTreeNode","moveSelection","setEditorHtml","setContentString","padd","setContentTree","setContent$1","DOM$6","restoreOriginalStyles","safeDestroy","clearDomReferences","restoreForm","is_removing","automatic","DOM$7","extend$4","each$l","resolve$4","ie$2","Editor","documentBaseURL","baseURI","language_load","loadedCSS","editorCommands","cache_suffix","override_viewport","callbackLookup","lang_1","i18n_1","addSidebar","contextToolbars","focusedEditor","isNotDirty","oldState","urlconverter_callback","visual_table_class","visual_anchor_class","documentFocusInHandler","beforeUnloadDelegate","EditorManager","isEditorUIElement","FocusManager","isManualNodeChange","registerPageMouseUp","throttledStore","mouseUpPage","registerFocusOut","registerMouseUp","registerEditorEvents","register$3","SelectionRestore","DOM$8","isEditorUIElement$1","isUIElement","customSelector","custom_ui_selector","getActiveElement","blurredEditor","unregisterDocumentEvents","setup$h","FocusController","DOM$9","explode$4","each$m","extend$5","instanceCounter","boundGlobalEvents","legacyEditors","isValidLegacyKey","globalEventDelegate","toggleGlobalEvents","removeEditorFromList","targetEditor","oldEditors","purgeDestroyedEditor","releaseDate","preInit","tinyMCEPreInit","srcScript","base_url","pluginBaseUrls","plugin_base_urls","invalidInlineTargets","isInvalidInlineTarget","findTargets","editor_deselector","editor_selector","provideResults","initEditors","initCount","createEditor","existingEditor","addI18n","EditorManager$1","RangeUtils","normalizedRng","compareRanges","extendClass","initializing","RangeUtils$1","round$2","relativePosition","targetW","targetH","findBestRelativePosition","constrainRect","rels","intersect","x1","y1","clamp$1","fixedSize","underflowX1","underflowY1","overflowX2","overflowY2","cx2","cy2","fromClientRect","Factory","typeClass","lctype","controlType","ControlType","each$n","extend$6","Class","member","mixins","mixin","Mixins","name_1","Methods","fieldName","Statics","min$1","max$1","round$3","Color","rgb2hsv","minRGB","maxRGB","hsvToRgb","saturation","chroma","toRgb","toHsv","quote","JSON$1","JSONP","XHR","ready","success_scope","error_scope","overrideMimeType","crossDomain","requestheaders","extend$7","JSONRequest","sendRPC","ecb","scb","localStorage","storage","getItem","setItem","removeItem","LocalStorage","publicApi","geom","EventDispatcher","Serializer","isMac","Tinymce","exportToModuleLoaders","exportToWindowGlobal","tinyMCE","setDir","curDir","fireRestoreDraft","fireStoreDraft","fireRemoveDraft","timeString","defaultTime","multiples","toParse","parsedTime","shouldAskBeforeUnload","getAutoSavePrefix","shouldRestoreWhenEmpty","getAutoSaveInterval","autosave_interval","getAutoSaveRetention","autosave_retention","hasDraft","removeDraft","storeDraft","restoreDraft","startStoreDraft","started","restoreLastDraft","_beforeUnloadHandler","autosave","onbeforeunload","tzl","numbersNouns","translateFuture","translatePast","numberNoun","numberAsNoun","hundred","ten","tlh","bo","ptBr","isEnabled","fireVisualChars","charMap","charMapToRegExp","charMapToSelector","Data","regExpGlobal","wrapCharWithSpan","Html","value$1","filterDescendants","findParentElm","replaceWithSpans","nodeList","withSpans","VisualChars","toggleVisualChars","debouncedToggle","valueForToggling","getTabFocusElements","getTabFocus","tabCancel","canSelectRecursive","canSelect","fil","hyAm","regExps","aletter","midnumlet","midletter","midnum","lf","newline","katakana","extendnumlet","characterIndices","ALETTER","MIDNUMLET","MIDLETTER","MIDNUM","NUMERIC","CR","LF","NEWLINE","EXTEND","FORMAT","KATAKANA","EXTENDNUMLET","AT","OTHER","SETS","EMPTY_STRING","PUNCTUATION","WHITESPACE","UnicodeData","SETS$1","setsLength","memoize","classify","memoized","StringMapper","isWordBoundary","prevType","nextNextType","nextType","WordBoundary","EMPTY_STRING$1","WHITESPACE$1","PUNCTUATION$1","isProtocol","findWordEnd","extractUrl","peakedWord","doGetWords","includePunctuation","includeWhitespace","getWords","WordGetter","isSeparator","treeWalker","getCount","WordCount","wordsToText","debouncedUpdate","Statusbar","stringRepeat","repeats","isVisualCharsEnabled","visualchars","insertNbsp","getKeyboardSpaces","ca","frCa","nlBe","showPreview","hexColor","setColor","rgb","colorPickerCtrl","color_picker_callback","print","gu","enIe","getAutoResizeMinHeight","getAutoResizeMaxHeight","getAutoResizeOverflowPadding","getAutoResizeBottomMargin","shouldAutoResizeOnInit","fullscreen","toggleScrolling","deltaSize","resizeHeight","myHeight","maxHeight","overflowPadding","bottomMargin","paddingRight","Resize","findAndReplaceDOMText","replacementNode","captureGroup","getMatchIndexes","cg","stencilNode_1","FindReplaceText","markAllMatches","currentIndexState","testIndex","matchCase","wholeWord","isMatchSpan","currentMatchIndex","hasMore","hasNext","hasPrev","keepEditorSelection","selectedText","updateButtonStates","notFoundAlert","onClose","caseState","getNonEditableClass","getEditableClass","getNonEditableRegExps","nonEditableRegExps","checkClassName","replaceMatchWithSpan","prevChar","findStartTagIndex","tagHtml","convertRegExpsToNonEditable","editClass","nonEditClass","contentEditableAttrName","hasEditClass","hasNonEditClass","km","isBrandingEnabled","hasMenubar","getMenubar","hasStatusbar","getToolbarSize","getFixedToolbarContainer","getInlineToolbarPositionHandler","getMenu","getRemovedMenuItems","isSkinDisabled","getResize","getSkinUrl","skinName","getIndexedToolbars","defaultToolbar","toolbars","mainToolbar","getToolbars","fireSkinLoaded","fireResizeEditor","fireBeforeRenderUI","addKeys","A11y","getUiContainerDelta","setUiContainer","inheritUiContainer","fromCtrl","toCtrl","UiContainer","createToolbar","buttonGroup","toolbarItems","bindSelectorChanged","disabledStateSelector","createToolbars","addToolbar","ariaRoot","Toolbar","toClientRect","geomRect","hideAllFloatingPanels","movePanelTo","togglePositionClass","relPos","userConstrain","elementRect","contentAreaRect","panelRect","addContextualToolbars","getContextToolbars","getElementRect","shouldShow","relRect","testPositions","smallElementWidthThreshold","repositionHandler","findFrontMostMatch","bindScrollEvent","reposition_1","uiContainer_1","showContextToolbar","autofix","oncancel","reflow","hideAllContextToolbars","ContextToolbars","defaultMenus","tools","help","delimiterMenuNamePair","createMenuNameItemPair","hasItemName","namedMenuItems","namedMenuItem","cleanupMenu","removedMenuItems","menuItemsPass1","menuItemsPass2","createMenu","editorMenuItems","menus","menuButton","isUserDefined","getDefaultMenubar","defaultMenuBar","createMenuButtons","menuButtons","menubar","enabledMenuNames","Menubar","resizeTo","containerSize","iframeSize","resizeBy","dw","dh","sidebar","callbackName","visible","deactivateButtons","findSidebar","showPanel","btnCtrl","isModernBrowser","hasSidebar","createSidebar","fireSkinLoaded$1","SkinLoaded","switchMode","editArea","editAreaContainer","resizeHandleCtrl","startSize","skinUiCss","onResizeStart","onResize","linkHtml","brandingLabel","renderBefore","Iframe","funcs","getRuntimeStyle","isStatic","isFixed","calculateRelativePosition","ctrlElm","selfW","selfH","getWindowViewPort","getUiContainerViewPort","customUiContainer","Movable","testMoveRel","layoutRect","constrain","constrainToViewport","BoxUtils","parseBox","measureBox","computedStyle","getSide","ClassList","_map","uniqueItems","__checked","_change","curState","clsValue","Collection$1","chunker","Selector","compileNameFilter","compileIdFilter","compileClassesFilter","compileAttrFilter","cmp","compilePsuedoFilter","notSelectors","parseChunks","direct","_selectors","si","Collection$2","Binding","otherModel","otherName","fromSelfToOther","fromOtherToSelf","_bindings","global$c","isNode","animationFrameRequested","ObservableObject","oldValue","dirtyCtrls","ReflowQueue","_layout","hasMouseWheelEventSupport","hasWheelEventSupport","classPrefix","idCounter","defaultClasses","applyClasses","_aria","_elmCache","borderBox","paddingBox","marginBox","getContainerElm","getParentCtrl","controlIdLookup","initLayoutRect","autoResize","startMinWidth","startMinHeight","initialSize","maxW","maxH","_layoutRect","contentW","contentH","innerW","innerH","minW","minH","scrollW","_lastLayoutRect","lastLayoutRect","repaintControls","curRect","bodyStyle","borderW","borderH","lastRepaintRect","_lastRepaintRect","_hasBody","updateLayoutRect","_lastRect","resolveCallbackName","parentControls","ariaTarget","newItems","controls","_eventsRoot","renderHtml","preRender","parentEventsRoot","_nativeEvents","bindPendingEvents","parentCtrl","parentWidth","parentHeight","eventCtrl","eventRootCtrl","mouseLeaveHandler","_lastHoverCtrl","mouseEnterHandler","lastParents","lastCtrl","fixWheelEvent","wheelDelta","wheelDeltaX","eventRootDelegates","_delegates","_hasMouseEnter","Control$1","hasTabstopData","KeyboardNavigation","focusedElement","focusedControl","getRole","getParentRole","getAriaProp","isTextInputElement","canFocus","getFocusElements","getNavigationRoot","targetControl","navigationRoot","focusFirst","focusElements","moveFocusToIndex","lastAriaIndex","moveFocus","parentRole","submenu","enter","tab","handleNonTabOrEscEvent","selectorCache","Container","_items","bodyClasses","containerCls","focusCtrl","keyboardNav","oldItem","newItem","ctrlItems","defaultType","curItems","beforeItems","afterItems","recalc","getDocumentSize","updateWithTouchData","changedTouches","$eventOverlay","downButton","handleElement","docSize","runtimeStyle","zIndex","documentClickHandler","documentScrollHandler","windowResizeHandler","hasModal","Scrollable","renderScroll","repaintScroll","hasScrollH","hasScrollV","repaintAxis","axisName","posName","sizeName","contentSizeName","hasScroll","ax","scrollBarElm","scrollThumbElm","scrollSize","posNameLower","sizeNameLower","addScroll","addScrollAxis","deltaPosName","scrollStart","axisId","draghelper","_hasScroll","Panel","_preBodyHtml","Resizable","resizeToContent","visiblePanels","zOrder","skipOrHidePanels","clickCtrl","bindDocumentClickHandler","bindDocumentScrollHandler","repositionPanel","bindWindowResizeHandler","docElm_1","clientWidth_1","clientHeight_1","FloatPanel","toggleFixedChildPanels","_autoFixY","addRemove","topModal","modal","modalBlockEl","currentZIndex","$modalBlockEl_1","prefix_1","popover","describedBy","removeVisiblePanel","bodyRole","isFixed$1","inlineToolbarContainer","fixedToolbarContainer","_fixed","bodyPos","scrollContainerPos","Inline","ProgressState","Tooltip","Widget","tooltips","_tooltip","disable","Progress","setValue","updateLiveRegion","Notification","closeButton","notificationStyle","getEditorContainer","getContainerWidth","prePositionNotifications","positionNotifications","firstItem","closeCallback","extendedArgs","notif","oldMetaValue","toggleFullScreenState","contentValue","noScaleMetaValue","toggleBodyFullScreenClasses","checkFullscreenWindows","_fullscreen","handleWindowResize","lastSize_1","closeClass","needsRecalc","headerW","headEl","headerH","headerHtml","footerHtml","slowRendering","_timer","_initial","dragHelper","getContentWindow","MessageBox","OK","OK_CANCEL","YES_NO","YES_NO_CANCEL","msgBox","createButton","primary","onClick","onCancel","features","choiceCallback","ThemeApi","Layout","firstControlClass","lastControlClass","containerClass","firstClass","lastClass","lastItem","controlClass","AbsoluteLayout","Button","btnStyle","btnElm","ariaPressed","textHtml","textCls","setButtonText","$span","iconElm","BrowseButton","click","ButtonGroup","Checkbox","global$d","ComboBox","subinput","showMenu","statusLevel","statusMessage","lineHeight","openElm","innerPadding","inputElm","openBtnHtml","extraAttrs","statusHtml","showAutoComplete","term","previewUrl","hideMenu","statusIconElm","focusIdx","ColorBox","repaintColor","PanelButton","panelSettings","rtlRels","ltrRels","popoverAlign","ColorButton","onClickHandler","global$e","ColorPicker","hsv","hueRootElm","huePointElm","svRootElm","svPointElm","updateColor","hueUpdate","updateSaturationAndValue","updateHue","_repaint","_svdraghelper","_hdraghelper","_rendered","hueHtml","stops","getOldIeFallbackHtml","gradientPrefix","stopsList","gradientCssText","DropZone","cfg","hidefocus","toggleDragClass","Path","_getDataPathHtml","ElementPath","elementpath","outParents","FormItem","Form","formItem","recalcLabels","maxLabelWidth","labels","labelCtrl","labelWidth","FieldSet","unique$1","windows$1","isChildOfContentEditableTrue","getElementText","getOrGenerateId","isValidAnchor","isHeader","isValidHeader","getLevel","headerTarget","headerId","anchorTarget","anchorId","anchorText","getHeaderTargets","getAnchorTargets","getTargetElements","hasTitle","LinkTargets","getActiveEditor","history","HISTORY_LENGTH","clearHistory","toMenuItem","staticMenuItem","isUniqueUrl","foundTarget","getSetting","fileType","fromHistoryMenuItems","historyItems","uniqueHistory","fromMenuItems","filteredTargets","anchorMenuItems","topAnchor","bottomAchor","bothEmpty","typeahead_urls","filterByQuery","addToHistory","lowerCaseTerm","getTitle","linkDetails","setupAutoCompleteHandler","linkTargets","statusToUiState","setupLinkValidatorHandler","validatorHandler","filepicker_validator_handler","validateUrl_1","uiState","FilePicker","actionCallback","fileBrowserCallback","fileBrowserCallbackTypes","file_picker_types","file_browser_callback_types","file_picker_callback","file_browser_callback","FitLayout","contLayoutRect","FlexLayout","contPaddingBox","contSettings","totalFlex","availableSpace","ctrlLayoutRect","ctrlSettings","maxSize","maxAlignEndPos","minSizeName","maxSizeName","beforeName","innerSizeName","deltaSizeName","alignAxisName","alignInnerSizeName","alignSizeName","alignMinSizeName","alignBeforeName","alignAfterName","alignDeltaSizeName","alignContentSizeName","maxSizeItems","maxFlexSize","FlowLayout","endClass","addFormatChangedListener","changed","postRenderFormatToggle","alignFormats","defaultAlign","alignMenuItems","onShowMenu","alignnone","Align","getFirstFont","findMatchingValue","font","createFontNameListBoxChangeHandler","createFormats","getFontItems","defaultFontsFormats","fonts","font_formats","registerButtons","fixedWidth","FontSelect","findMatchingValue$1","pt","createFontSizeListBoxChangeHandler","getFontSizeItems","defaultFontsizeFormats","fontsizeFormats","fontsize_formats","registerButtons$1","FontSizeSelect","hideMenuObjects","hideFormatMenuItems","createFormatMenu","newFormats","defaultStyleFormats","createStylesMenu","style_formats_merge","style_formats","registerMenuItems","formatMenu","registerButtons$2","style_formats_autohide","Formats","defaultBlocks","createFormats$1","createListBoxChangeHandler","lazyFormatSelectBoxItems","register$4","block_formats","FormatSelect","createCustomMenuItems","nameList","isSeparator$1","trimMenuItems","menuItems2","createContextMenuItems","outputMenuItems","createInsertMenu","insertButtonItems","insert_button_items","registerButtons$3","oncreatemenu","register$5","InsertButton","registerFormatButtons","registerCommandButtons","outdent","selectall","visualaid","newdocument","registerCommandToggleButtons","registerButtons$4","registerMenuItems$1","register$6","SimpleControls","toggleUndoRedoState","checkState","typeFn","registerMenuItems$2","registerButtons$5","register$7","UndoRedo","toggleVisualAidState","registerMenuItems$3","register$8","VisualAid","setupEnvironment","setupUiContainer","setupRtlMode","setupHideFloatPanels","FormatControls","GridLayout","posX","posY","spacingH","spacingV","alignV","ctrlMinWidth","ctrlMinHeight","availableWidth","availableHeight","reverseRows","colWidths","rowHeights","flexV","flexWidths","Iframe$1","InfoBox","severity","Label","strong","startMinH","targetCtrl","forName","Toolbar$1","MenuBar","isChildOf$1","MenuButton","_renderOpen","animate","activeMenu","menuLayoutRect","selfBottom","hasVisibleSiblingMenu","overCtrl","Menu","itemsFactory","hideThrobber","requestTime","_hasIcons","ListBox","lastItemCtrl","menuValues","_values","valueExists","activateMenuItemsByValue","hasMenus","getSelectedItem","selectedItem","toggleTextStyle","_textStyle","textElm","MenuItem","_parentMenu","_lastRel","iconHtml","convertShortcut","escapeRegExp","markMatches","boldMatches","hover","Radio","ResizeHandle","resizeDragHelper","createOptions","strOptions","SelectBox","_options","minVal","maxVal","setAriaProp","updateSliderHandle","maxHandlePos","shortSizeName","stylePosName","handleEl","orientation","_minValue","_maxValue","Slider","_initValue","screenCordName","toFraction","fromFraction","handleKeyboard","alter","handleDrag","startHandlePos","handlePos","_dragHelper","Spacer","SplitButton","mainButtonElm","menuButtonElm","_menuBtnText","StackLayout","TabPanel","activeTabElm","activeTabId","tabsHtml","activeTab","targetParent","headH","TextBox","registerToFactory","et","enIn","overrideFormats","alignElements","fontElm","paIn","gd","nl","xPseudo"],"mappings":"sHAMA,EAAQ,S,wBCFN,SAAUA,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;IAAIC,EAASD,EAAOE,aAAa,UAAW,CACxCC,OAAQ,6EAA6EC,MACjF,KAEJC,YAAa,oDAAoDD,MAAM,KACvEE,SACI,+DAA+DF,MAC3D,KAERG,cAAe,kCAAkCH,MAAM,KACvDI,YAAa,yBAAyBJ,MAAM,KAC5CK,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVC,SAAU,CACNC,QAAS,uBACTC,QAAS,mBACTC,SAAU,2BACVC,QAAS,uBACTC,SAAU,oCACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,kBACRC,KAAM,qBACNC,EAAG,SACHC,GAAI,YACJC,EAAG,aACHC,GAAI,YACJC,EAAG,WACHC,GAAI,UACJC,EAAG,UACHC,GAAI,SACJC,EAAG,SACHC,GAAI,QACJC,EAAG,UACHC,GAAI,UAERC,KAAM,CACFC,IAAK,EACLC,IAAK,KAIb,OAAOvC,M,wBC1DT,SAAUJ,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;IAAIyC,EAAKzC,EAAOE,aAAa,KAAM,CAC/BC,OAAQ,yFAAyFC,MAC7F,KAEJC,YACI,yEAAyED,MACrE,KAERsC,kBAAkB,EAClBpC,SACI,wEAAwEF,MACpE,KAERG,cAAe,2CAA2CH,MAAM,KAChEI,YAAa,wBAAwBJ,MAAM,KAC3CK,eAAgB,CACZC,GAAI,aACJC,IAAK,gBACLC,EAAG,aACHC,GAAI,cACJC,IAAK,0BACLC,KAAM,iCAEVC,SAAU,CACNC,QAAS,aACTC,QAAS,YACTC,SAAU,WACVC,QAAS,cACTC,SAAU,oBACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,aACRC,KAAM,WACNC,EAAG,gBACHC,GAAI,cACJC,EAAG,eACHC,GAAI,cACJC,EAAG,eACHC,GAAI,cACJC,EAAG,YACHC,GAAI,WACJC,EAAG,WACHC,GAAI,UACJC,EAAG,WACHC,GAAI,WAERM,cAAe,gDACfC,aAAc,SAAUC,EAAMC,GAI1B,OAHa,KAATD,IACAA,EAAO,GAGO,WAAbC,GAAyBD,GAAQ,GACrB,iBAAbC,GACa,eAAbA,EAEOD,EAAO,GAEPA,GAGfC,SAAU,SAAUD,EAAME,EAAQC,GAC9B,OAAIH,EAAO,EACA,SACAA,EAAO,GACP,SACAA,EAAO,GACP,eACAA,EAAO,GACP,aAEA,YAKnB,OAAOJ,M,wBCtFT,SAAU5C,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;IAAIiD,EAAKjD,EAAOE,aAAa,KAAM,CAC/BC,OAAQ,gEAAgEC,MACpE,KAEJC,YAAa,kDAAkDD,MAAM,KACrEE,SACI,oEAAoEF,MAChE,KAERG,cAAe,6BAA6BH,MAAM,KAClDI,YAAa,uBAAuBJ,MAAM,KAC1CK,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,sCACJC,IAAK,6CACLC,KAAM,oDAEVC,SAAU,CACNC,QAAS,sBACTC,QAAS,sBACTE,QAAS,sBACTD,SAAU,4BACVE,SAAU,4BACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,SAAU0B,GACd,IAAIC,EAAQ,UAAUC,KAAKF,GACrB,MACA,QAAQE,KAAKF,GACb,MACA,MACN,OAAOA,EAASC,GAEpB1B,KAAM,YACNC,EAAG,iBACHC,GAAI,aACJC,EAAG,YACHC,GAAI,WACJC,EAAG,YACHC,GAAI,WACJC,EAAG,UACHC,GAAI,SACJC,EAAG,WACHC,GAAI,UACJC,EAAG,UACHC,GAAI,UAERgB,uBAAwB,cACxBC,QAAS,SACThB,KAAM,CACFC,IAAK,EACLC,IAAK,KAIb,OAAOS,M,uBCjEX,EAAQ,S,wBCFN,SAAUpD,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;SAASuD,EAAOC,GACZ,OAAIA,EAAI,MAAQ,IAELA,EAAI,KAAO,EAK1B,SAASC,EAAUC,EAAQC,EAAeC,EAAKC,GAC3C,IAAIC,EAASJ,EAAS,IACtB,OAAQE,GACJ,IAAK,IACD,OAAOD,GAAiBE,EAClB,mBACA,mBACV,IAAK,KACD,OAAIN,EAAOG,GAEHI,GACCH,GAAiBE,EAAW,WAAa,YAG3CC,EAAS,UACpB,IAAK,IACD,OAAOH,EAAgB,SAAW,SACtC,IAAK,KACD,OAAIJ,EAAOG,GAEHI,GAAUH,GAAiBE,EAAW,UAAY,WAE/CF,EACAG,EAAS,SAEbA,EAAS,SACpB,IAAK,KACD,OAAIP,EAAOG,GAEHI,GACCH,GAAiBE,EACZ,gBACA,iBAGPC,EAAS,cACpB,IAAK,IACD,OAAIH,EACO,QAEJE,EAAW,MAAQ,OAC9B,IAAK,KACD,OAAIN,EAAOG,GACHC,EACOG,EAAS,QAEbA,GAAUD,EAAW,OAAS,SAC9BF,EACAG,EAAS,QAEbA,GAAUD,EAAW,MAAQ,QACxC,IAAK,IACD,OAAIF,EACO,UAEJE,EAAW,QAAU,SAChC,IAAK,KACD,OAAIN,EAAOG,GACHC,EACOG,EAAS,UAEbA,GAAUD,EAAW,SAAW,WAChCF,EACAG,EAAS,UAEbA,GAAUD,EAAW,QAAU,UAC1C,IAAK,IACD,OAAOF,GAAiBE,EAAW,KAAO,MAC9C,IAAK,KACD,OAAIN,EAAOG,GACAI,GAAUH,GAAiBE,EAAW,KAAO,QAEjDC,GAAUH,GAAiBE,EAAW,KAAO,QAIhE,IAAIE,EAAK/D,EAAOE,aAAa,KAAM,CAC/BC,OAAQ,oFAAoFC,MACxF,KAEJC,YAAa,kDAAkDD,MAAM,KACrEE,SACI,mFAAmFF,MAC/E,KAERG,cAAe,8BAA8BH,MAAM,KACnDI,YAAa,uBAAuBJ,MAAM,KAC1CK,eAAgB,CACZC,GAAI,OACJC,IAAK,UACLC,EAAG,aACHC,GAAI,eACJC,IAAK,0BACLC,KAAM,iCAEVC,SAAU,CACNC,QAAS,iBACTC,QAAS,oBACTC,SAAU,gBACVC,QAAS,iBACTC,SAAU,0BACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,WACRC,KAAM,iBACNC,EAAG+B,EACH9B,GAAI8B,EACJ7B,EAAG6B,EACH5B,GAAI4B,EACJ3B,EAAG,cACHC,GAAI0B,EACJzB,EAAGyB,EACHxB,GAAIwB,EACJvB,EAAGuB,EACHtB,GAAIsB,EACJrB,EAAGqB,EACHpB,GAAIoB,GAERJ,uBAAwB,YACxBC,QAAS,MACThB,KAAM,CACFC,IAAK,EACLC,IAAK,KAIb,OAAOuB,M,wBC/IT,SAAUlE,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;IAAIgE,EAAKhE,EAAOE,aAAa,KAAM,CAC/BC,OAAQ,qFAAqFC,MACzF,KAEJC,YAAa,kDAAkDD,MAAM,KACrEE,SACI,4EAA4EF,MACxE,KAERG,cAAe,8BAA8BH,MAAM,KACnDI,YAAa,uBAAuBJ,MAAM,KAC1CK,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,4BAEVC,SAAU,CACNC,QAAS,iBACTC,QAAS,oBACTC,SAAU,gBACVC,QAAS,kBACTC,SAAU,wBACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,QACRC,KAAM,YACNC,EAAG,YACHC,GAAI,cACJC,EAAG,eACHC,GAAI,cACJC,EAAG,WACHC,GAAI,WACJC,EAAG,YACHC,GAAI,WACJC,EAAG,cACHC,GAAI,aACJC,EAAG,UACHC,GAAI,SAERgB,uBAAwB,YACxBC,QAAS,MACThB,KAAM,CACFC,IAAK,EACLC,IAAK,KAIb,OAAOwB,M,wBC7DT,SAAUnE,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;IAAIiE,EAAKjE,EAAOE,aAAa,KAAM,CAC/BgE,KAAM,CACF,CACIC,MAAO,aACPC,OAAQ,EACRC,KAAM,KACNC,OAAQ,IACRC,KAAM,KAEV,CACIJ,MAAO,aACPK,MAAO,aACPJ,OAAQ,EACRC,KAAM,KACNC,OAAQ,IACRC,KAAM,KAEV,CACIJ,MAAO,aACPK,MAAO,aACPJ,OAAQ,EACRC,KAAM,KACNC,OAAQ,IACRC,KAAM,KAEV,CACIJ,MAAO,aACPK,MAAO,aACPJ,OAAQ,EACRC,KAAM,KACNC,OAAQ,IACRC,KAAM,KAEV,CACIJ,MAAO,aACPK,MAAO,aACPJ,OAAQ,EACRC,KAAM,KACNC,OAAQ,IACRC,KAAM,KAEV,CACIJ,MAAO,aACPK,MAAO,aACPJ,OAAQ,EACRC,KAAM,KACNC,OAAQ,KACRC,KAAM,MAEV,CACIJ,MAAO,aACPK,OAAQC,IACRL,OAAQ,EACRC,KAAM,MACNC,OAAQ,KACRC,KAAM,OAGdG,oBAAqB,WACrBC,oBAAqB,SAAUC,EAAOC,GAClC,MAAoB,MAAbA,EAAM,GAAa,EAAIC,SAASD,EAAM,IAAMD,EAAO,KAE9DzE,OAAQ,yCAAyCC,MAAM,KACvDC,YAAa,yCAAyCD,MAClD,KAEJE,SAAU,8BAA8BF,MAAM,KAC9CG,cAAe,gBAAgBH,MAAM,KACrCI,YAAa,gBAAgBJ,MAAM,KACnCK,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,YACJC,IAAK,kBACLC,KAAM,uBACNgE,EAAG,aACHC,GAAI,YACJC,IAAK,kBACLC,KAAM,wBAEVvC,cAAe,SACfwC,KAAM,SAAUP,GACZ,MAAiB,OAAVA,GAEX9B,SAAU,SAAUD,EAAME,EAAQC,GAC9B,OAAIH,EAAO,GACA,KAEA,MAGf7B,SAAU,CACNC,QAAS,UACTC,QAAS,UACTC,SAAU,SAAUiE,GAChB,OAAIA,EAAI9C,SAAWvC,KAAKuC,OACb,cAEA,WAGflB,QAAS,UACTC,SAAU,SAAU+D,GAChB,OAAIrF,KAAKuC,SAAW8C,EAAI9C,OACb,cAEA,WAGfhB,SAAU,KAEd+B,uBAAwB,WACxBC,QAAS,SAAUI,EAAQ2B,GACvB,OAAQA,GACJ,IAAK,IACD,OAAkB,IAAX3B,EAAe,KAAOA,EAAS,IAC1C,IAAK,IACL,IAAK,IACL,IAAK,MACD,OAAOA,EAAS,IACpB,QACI,OAAOA,IAGnBnC,aAAc,CACVC,OAAQ,MACRC,KAAM,MACNC,EAAG,KACHC,GAAI,MACJC,EAAG,KACHC,GAAI,MACJC,EAAG,MACHC,GAAI,OACJC,EAAG,KACHC,GAAI,MACJC,EAAG,MACHC,GAAI,OACJC,EAAG,KACHC,GAAI,SAIZ,OAAO4B,M,sBC5JX,YACkB,SAAUqB,GACxB,aAEA,IAAIC,EAAO,SAAUC,GACnB,IAAIC,EAAQD,EACRE,EAAM,WACR,OAAOD,GAELE,EAAM,SAAUC,GAClBH,EAAQG,GAENC,EAAQ,WACV,OAAON,EAAKG,MAEd,MAAO,CACLA,IAAKA,EACLC,IAAKA,EACLE,MAAOA,IAIPhG,EAASiG,QAAQC,KAAKC,MAAMC,QAAQ,yBAEpCC,EAAWJ,QAAQC,KAAKC,MAAMC,QAAQ,wBAEtCE,EAAgB,SAAUC,GAC5B,OAAOA,EAAOC,SAASC,wBAErBC,EAAe,SAAUH,GAC3B,OAAOA,EAAOC,SAASG,sBAErBC,EAAoB,SAAUL,GAChC,OAAOM,KAAKC,IAAIT,EAASU,IAAIC,cAAcC,EAAGV,EAAOW,SAAS,0BAA2B,OAEvFC,EAAqB,SAAUZ,GACjC,OAAOM,KAAKC,IAAIT,EAASU,IAAIC,cAAcC,EAAGV,EAAOW,SAAS,2BAA4B,OAExFE,EAAW,CACbd,cAAeA,EACfI,aAAcA,EACdE,kBAAmBA,EACnBO,mBAAoBA,GAGlBE,EAAS,GACTC,EAAWD,EACXE,EAA0B,qBAAXF,EAAyBA,EAAsC,qBAAtBG,mBAAqC/B,EAAWgC,gBAAgBD,kBAAoB/B,EAAWgC,KAAO,GAC9JC,EAAQ,WACV,IAAIC,EAAO,iCACPC,EAAIL,EAAMG,MAAQ,CACpBxB,KAAM,CACJ2B,OAAQ,SAAUC,GAChB,OAAIA,aAAkBC,EACb,IAAIA,EAAMD,EAAOE,KAAMJ,EAAE1B,KAAK2B,OAAOC,EAAOG,SAAUH,EAAOI,OACnC,UAAxBN,EAAE1B,KAAK8B,KAAKF,GACdA,EAAOK,IAAIP,EAAE1B,KAAK2B,QAElBC,EAAOM,QAAQ,KAAM,SAASA,QAAQ,KAAM,QAAQA,QAAQ,UAAW,MAGlFJ,KAAM,SAAUK,GACd,OAAOC,OAAOC,UAAUC,SAASC,KAAKJ,GAAGrD,MAAM,oBAAoB,IAErEgB,MAAO,SAAUqC,GACf,IAAIL,EAAOJ,EAAE1B,KAAK8B,KAAKK,GACvB,OAAQL,GACR,IAAK,SACH,IAAIhC,EAAQ,GACZ,IAAK,IAAIjC,KAAOsE,EACVA,EAAEK,eAAe3E,KACnBiC,EAAMjC,GAAO6D,EAAE1B,KAAKF,MAAMqC,EAAEtE,KAGhC,OAAOiC,EACT,IAAK,QACH,OAAOqC,EAAEF,KAAOE,EAAEF,KAAI,SAAUpC,GAC9B,OAAO6B,EAAE1B,KAAKF,MAAMD,MAGxB,OAAOsC,IAGXM,UAAW,CACTC,OAAQ,SAAUC,EAAIC,GACpB,IAAInB,EAAOC,EAAE1B,KAAKF,MAAM4B,EAAEe,UAAUE,IACpC,IAAK,IAAI9E,KAAO+E,EACdnB,EAAK5D,GAAO+E,EAAM/E,GAEpB,OAAO4D,GAEToB,aAAc,SAAUC,EAAQC,EAAQC,EAAQC,GAC9CA,EAAOA,GAAQvB,EAAEe,UACjB,IAAIS,EAAUD,EAAKH,GACnB,GAAyB,IAArBK,UAAUC,OAAc,CAE1B,IAAK,IAAIC,KADTL,EAASG,UAAU,GACEH,EACfA,EAAOR,eAAea,KACxBH,EAAQG,GAAYL,EAAOK,IAG/B,OAAOH,EAET,IAAII,EAAM,GACV,IAAK,IAAIC,KAASL,EAChB,GAAIA,EAAQV,eAAee,GAAQ,CACjC,GAAIA,IAAUR,EACZ,IAAK,IAAIM,KAAYL,EACfA,EAAOR,eAAea,KACxBC,EAAID,GAAYL,EAAOK,IAI7BC,EAAIC,GAASL,EAAQK,GAQzB,OALA7B,EAAEe,UAAUe,IAAI9B,EAAEe,WAAW,SAAU5E,EAAK6B,GACtCA,IAAUuD,EAAKH,IAAWjF,IAAQiF,IACpC9I,KAAK6D,GAAOyF,MAGTL,EAAKH,GAAUQ,GAExBE,IAAK,SAAUrB,EAAGsB,EAAU3B,GAC1B,IAAK,IAAI4B,KAAKvB,EACRA,EAAEK,eAAekB,KACnBD,EAASlB,KAAKJ,EAAGuB,EAAGvB,EAAEuB,GAAI5B,GAAQ4B,GACR,WAAtBhC,EAAE1B,KAAK8B,KAAKK,EAAEuB,IAChBhC,EAAEe,UAAUe,IAAIrB,EAAEuB,GAAID,GACS,UAAtB/B,EAAE1B,KAAK8B,KAAKK,EAAEuB,KACvBhC,EAAEe,UAAUe,IAAIrB,EAAEuB,GAAID,EAAUC,MAM1CC,QAAS,GACTC,aAAc,SAAUC,EAAOJ,GAE7B,IADA,IAAIK,EAAWvE,EAAWwE,SAASC,iBAAiB,oGAC3CN,EAAI,EAAGO,OAAU,EAAQA,EAAUH,EAASJ,MACnDhC,EAAEwC,iBAAiBD,GAAmB,IAAVJ,EAAgBJ,IAGhDS,iBAAkB,SAAUD,EAASJ,EAAOJ,GAC1C,IAAIU,EAAUjB,EAASkB,EAASH,EAChC,MAAOG,IAAW3C,EAAK4C,KAAKD,EAAOE,WACjCF,EAASA,EAAOG,WAEdH,IACFD,GAAYC,EAAOE,UAAUxF,MAAM2C,IAAS,CAC1C,CACA,KACC,GACHyB,EAAUxB,EAAEe,UAAU0B,IAExBF,EAAQK,UAAYL,EAAQK,UAAUpC,QAAQT,EAAM,IAAIS,QAAQ,OAAQ,KAAO,aAAeiC,EAC9FC,EAASH,EAAQM,WACb,OAAOF,KAAKD,EAAOI,YACrBJ,EAAOE,UAAYF,EAAOE,UAAUpC,QAAQT,EAAM,IAAIS,QAAQ,OAAQ,KAAO,aAAeiC,GAE9F,IAAIM,EAAOR,EAAQS,YACfC,EAAM,CACRV,QAASA,EACTE,SAAUA,EACVjB,QAASA,EACTuB,KAAMA,GAER,GAAKA,GAASvB,EAKd,GADAxB,EAAEkD,MAAMC,IAAI,mBAAoBF,GAC5Bd,GAASxC,EAAMyD,OAAQ,CACzB,IAAIC,EAAS,IAAIxF,EAAWuF,OAAOpD,EAAEsD,UACrCD,EAAOE,UAAY,SAAUC,GAC3BP,EAAIQ,gBAAkBD,EAAIE,KAC1B1D,EAAEkD,MAAMC,IAAI,gBAAiBF,GAC7BA,EAAIV,QAAQoB,UAAYV,EAAIQ,gBACxB1B,GACFA,EAASlB,KAAKoC,EAAIV,SAEpBvC,EAAEkD,MAAMC,IAAI,kBAAmBF,GAC/BjD,EAAEkD,MAAMC,IAAI,WAAYF,IAE1BI,EAAOO,YAAYC,KAAKC,UAAU,CAChCrB,SAAUQ,EAAIR,SACdM,KAAME,EAAIF,KACVgB,gBAAgB,UAGlBd,EAAIQ,gBAAkBzD,EAAEgE,UAAUf,EAAIF,KAAME,EAAIzB,QAASyB,EAAIR,UAC7DzC,EAAEkD,MAAMC,IAAI,gBAAiBF,GAC7BA,EAAIV,QAAQoB,UAAYV,EAAIQ,gBACxB1B,GACFA,EAASlB,KAAK0B,GAEhBvC,EAAEkD,MAAMC,IAAI,kBAAmBF,GAC/BjD,EAAEkD,MAAMC,IAAI,WAAYF,QA7BxBjD,EAAEkD,MAAMC,IAAI,WAAYF,IAgC5Be,UAAW,SAAUC,EAAMzC,EAASiB,GAClC,IAAIvC,EAASF,EAAEkE,SAASD,EAAMzC,GAC9B,OAAOrB,EAAM2D,UAAU9D,EAAE1B,KAAK2B,OAAOC,GAASuC,IAEhDyB,SAAU,SAAUD,EAAMzC,EAASiB,GACjC,IAAItC,EAAQH,EAAEG,MACVgE,EAAS,CAACF,GACVG,EAAO5C,EAAQ4C,KACnB,GAAIA,EAAM,CACR,IAAK,IAAIvC,KAASuC,EAChB5C,EAAQK,GAASuC,EAAKvC,UAEjBL,EAAQ4C,KAEjBC,EACE,IAAK,IAAIxC,KAASL,EAChB,GAAKA,EAAQV,eAAee,IAAWL,EAAQK,GAA/C,CAGA,IAAIyC,EAAW9C,EAAQK,GACvByC,EAAqC,UAA1BtE,EAAE1B,KAAK8B,KAAKkE,GAAwBA,EAAW,CAACA,GAC3D,IAAK,IAAIC,EAAI,EAAGA,EAAID,EAAS5C,SAAU6C,EAAG,CACxC,IAAIC,EAAUF,EAASC,GACnBnD,EAASoD,EAAQpD,OACjBqD,IAAeD,EAAQC,WACvBC,EAAmB,EACnBpE,EAAQkE,EAAQlE,MACpBkE,EAAUA,EAAQA,SAAWA,EAC7B,IAAK,IAAIxC,EAAI,EAAGA,EAAImC,EAAOzC,OAAQM,IAAK,CACtC,IAAI2C,EAAMR,EAAOnC,GACjB,GAAImC,EAAOzC,OAASuC,EAAKvC,OACvB,MAAM2C,EAER,KAAIM,aAAexE,GAAnB,CAGAqE,EAAQI,UAAY,EACpB,IAAIxH,EAAQoH,EAAQ7I,KAAKgJ,GACzB,GAAIvH,EAAO,CACLqH,IACFC,EAAmBtH,EAAM,GAAGsE,QAE9B,IAAImD,EAAOzH,EAAM0H,MAAQ,EAAIJ,EAC7BtH,EAAQA,EAAM,GAAG2H,MAAML,GACvB,IAAIM,EAAM5H,EAAMsE,OAAQuD,EAAKJ,EAAOG,EAAK3D,EAASsD,EAAII,MAAM,EAAGF,EAAO,GAAIK,EAAQP,EAAII,MAAME,EAAK,GAC7FE,EAAO,CACTnD,EACA,GAEEX,GACF8D,EAAKC,KAAK/D,GAEZ,IAAIgE,EAAU,IAAIlF,EAAM0B,EAAOT,EAASpB,EAAEkE,SAAS9G,EAAOgE,GAAUhE,EAAOkD,GAC3E6E,EAAKC,KAAKC,GACNH,GACFC,EAAKC,KAAKF,GAEZI,MAAM3E,UAAU4E,OAAOC,MAAMrB,EAAQgB,OAK/C,OAAOhB,GAETjB,MAAO,CACLuC,IAAK,GACLC,IAAK,SAAU9I,EAAMmF,GACnB,IAAImB,EAAQlD,EAAEkD,MAAMuC,IACpBvC,EAAMtG,GAAQsG,EAAMtG,IAAS,GAC7BsG,EAAMtG,GAAMwI,KAAKrD,IAEnBoB,IAAK,SAAUvG,EAAMqG,GACnB,IAAI0C,EAAY3F,EAAEkD,MAAMuC,IAAI7I,GAC5B,GAAK+I,GAAcA,EAAUjE,OAG7B,IAAK,IAAIM,EAAI,EAAGD,OAAW,EAAQA,EAAW4D,EAAU3D,MACtDD,EAASkB,MAKb9C,EAAQH,EAAEG,MAAQ,SAAUC,EAAMC,EAASC,GAC7ChI,KAAK8H,KAAOA,EACZ9H,KAAK+H,QAAUA,EACf/H,KAAKgI,MAAQA,GAqCf,GAnCAH,EAAM2D,UAAY,SAAUrD,EAAGgC,EAAUC,GACvC,GAAiB,kBAANjC,EACT,OAAOA,EAET,GAAuB,UAAnBT,EAAE1B,KAAK8B,KAAKK,GACd,OAAOA,EAAEF,KAAI,SAAUgC,GACrB,OAAOpC,EAAM2D,UAAUvB,EAASE,EAAUhC,MACzCmF,KAAK,IAEV,IAAI3C,EAAM,CACR7C,KAAMK,EAAEL,KACRC,QAASF,EAAM2D,UAAUrD,EAAEJ,QAASoC,EAAUC,GAC9CmD,IAAK,OACLC,QAAS,CACP,QACArF,EAAEL,MAEJ2F,WAAY,GACZtD,SAAUA,EACVC,OAAQA,GAKV,GAHiB,YAAbO,EAAI7C,OACN6C,EAAI8C,WAAWC,WAAa,QAE1BvF,EAAEH,MAAO,CACX,IAAI2F,EAAmC,UAAzBjG,EAAE1B,KAAK8B,KAAKK,EAAEH,OAAqBG,EAAEH,MAAQ,CAACG,EAAEH,OAC9DgF,MAAM3E,UAAUyE,KAAKI,MAAMvC,EAAI6C,QAASG,GAE1CjG,EAAEkD,MAAMC,IAAI,OAAQF,GACpB,IAAI8C,EAAa,GACjB,IAAK,IAAInJ,KAAQqG,EAAI8C,WACnBA,IAAeA,EAAa,IAAM,IAAMnJ,EAAO,MAAQqG,EAAI8C,WAAWnJ,IAAS,IAAM,IAEvF,MAAO,IAAMqG,EAAI4C,IAAM,WAAa5C,EAAI6C,QAAQF,KAAK,KAAO,KAAOG,EAAa,IAAM9C,EAAI5C,QAAU,KAAO4C,EAAI4C,IAAM,MAElHlG,EAAM0C,SACT,OAAK1C,EAAMuG,kBAGXvG,EAAMuG,iBAAiB,WAAW,SAAU1C,GAC1C,IAAI2C,EAAUtC,KAAKuC,MAAM5C,EAAIE,MAAO3D,EAAOoG,EAAQ1D,SAAUM,EAAOoD,EAAQpD,KAAMgB,EAAiBoC,EAAQpC,eAC3GpE,EAAMiE,YAAY5D,EAAEgE,UAAUjB,EAAM/C,EAAEe,UAAUhB,GAAOA,IACnDgE,GACFpE,EAAM0G,WAEP,GACI1G,EAAMG,OATJH,EAAMG,MApRP,GAwpBZ,SAASwG,EAAaC,GACpB,OAAOA,GAAwB,QAAjBA,EAAIzD,WAA8D,IAAxCyD,EAAI3D,UAAU4D,QAAQ,aAEhE,SAASC,EAAQC,GACf,OAAO,SAAUC,EAAMC,GACrB,OAAOF,EAAYE,IA7XC,qBAAblH,IACTA,EAASI,MAAQA,GAEnBA,EAAMiB,UAAU8F,OAAS,CACvBC,QAAS,kBACTC,OAAQ,iBACRC,QAAS,qBACTC,MAAO,0BACPpB,IAAK,CACHrB,QAAS,iGACTpD,OAAQ,CACN,IAAO,CACLoD,QAAS,kBACTpD,OAAQ,CACN8F,YAAa,QACbC,UAAW,iBAGf,aAAc,CACZ3C,QAAS,kCACTpD,OAAQ,CAAE8F,YAAa,WAEzB,YAAe,OACf,YAAa,CACX1C,QAAS,YACTpD,OAAQ,CAAE+F,UAAW,mBAI3BC,OAAQ,qBAEVtH,EAAMoD,MAAMwC,IAAI,QAAQ,SAAUzC,GACf,WAAbA,EAAI7C,OACN6C,EAAI8C,WAAWsB,MAAQpE,EAAI5C,QAAQG,QAAQ,QAAS,SAGxDV,EAAMiB,UAAUuG,IAAMxH,EAAMiB,UAAU8F,OACtC/G,EAAMiB,UAAUwG,KAAOzH,EAAMiB,UAAU8F,OACvC/G,EAAMiB,UAAUyG,OAAS1H,EAAMiB,UAAU8F,OACzC/G,EAAMiB,UAAU0G,IAAM3H,EAAMiB,UAAU8F,OACtC/G,EAAMiB,UAAU2G,IAAM,CACpBZ,QAAS,mBACTa,OAAQ,CACNnD,QAAS,4BACTpD,OAAQ,CAAEwG,KAAM,YAElBC,IAAK,+DACLC,SAAU,+BACVC,OAAQ,8CACRC,SAAU,yBACVC,UAAW,kBACXC,SAAU,oBACVhB,YAAa,YAEfpH,EAAMiB,UAAU2G,IAAIC,OAAOvG,OAAOgD,KAAOtE,EAAMxB,KAAKF,MAAM0B,EAAMiB,UAAU2G,KACtE5H,EAAMiB,UAAU8F,SAClB/G,EAAMiB,UAAUI,aAAa,SAAU,MAAO,CAC5CgH,MAAO,CACL3D,QAAS,oCACTpD,OAAQ,CACNyE,IAAK,CACHrB,QAAS,6BACTpD,OAAQtB,EAAMiB,UAAU8F,OAAOhB,IAAIzE,QAErCgD,KAAMtE,EAAMiB,UAAU2G,KAExBpH,MAAO,kBAGXR,EAAMiB,UAAUI,aAAa,SAAU,aAAc,CACnD,aAAc,CACZqD,QAAS,uBACTpD,OAAQ,CACN,YAAa,CACXoD,QAAS,aACTpD,OAAQtB,EAAMiB,UAAU8F,OAAOhB,IAAIzE,QAErC,YAAe,wBACf,aAAc,CACZoD,QAAS,MACTpD,OAAQtB,EAAMiB,UAAU2G,MAG5BpH,MAAO,iBAERR,EAAMiB,UAAU8F,OAAOhB,MAE5B/F,EAAMiB,UAAUqH,MAAQ,CACtB,QAAW,CACT,CACE5D,QAAS,4BACTC,YAAY,GAEd,CACED,QAAS,mBACTC,YAAY,IAGhB,OAAU,+CACV,aAAc,CACZD,QAAS,uGACTC,YAAY,EACZrD,OAAQ,CAAE8F,YAAa,YAEzB,QAAW,2GACX,QAAW,mBACX,SAAY,oBACZ,OAAU,gDACV,SAAY,0DACZ,YAAe,iBAEjBpH,EAAMiB,UAAUsH,WAAavI,EAAMiB,UAAUC,OAAO,QAAS,CAC3DsH,QAAS,uUACTrM,OAAQ,+EACRiM,SAAU,0DAEZpI,EAAMiB,UAAUI,aAAa,aAAc,UAAW,CACpDoH,MAAO,CACL/D,QAAS,+EACTC,YAAY,KAGhB3E,EAAMiB,UAAUI,aAAa,aAAc,aAAc,CACvD,kBAAmB,CACjBqD,QAAS,qBACTpD,OAAQ,CACNoH,cAAe,CACbhE,QAAS,cACTpD,OAAQ,CACN,4BAA6B,CAC3BoD,QAAS,YACTlE,MAAO,eAET,KAAQR,EAAMiB,UAAUsH,aAG5BN,OAAQ,cAIVjI,EAAMiB,UAAU8F,QAClB/G,EAAMiB,UAAUI,aAAa,SAAU,MAAO,CAC5CsH,OAAQ,CACNjE,QAAS,sCACTpD,OAAQ,CACNyE,IAAK,CACHrB,QAAS,+BACTpD,OAAQtB,EAAMiB,UAAU8F,OAAOhB,IAAIzE,QAErCgD,KAAMtE,EAAMiB,UAAUsH,YAExB/H,MAAO,yBAIbR,EAAMiB,UAAU2H,GAAK5I,EAAMiB,UAAUsH,WACrCvI,EAAMiB,UAAU4H,EAAI7I,EAAMiB,UAAUC,OAAO,QAAS,CAClDsH,QAAS,gOACTM,SAAU,wDACV3M,OAAQ,wDAEV6D,EAAMiB,UAAUI,aAAa,IAAK,SAAU,CAC1C0H,MAAO,CACLrE,QAAS,oDACTC,YAAY,EACZnE,MAAO,WACPc,OAAQ,CACN2G,OAAQ,CACNvD,QAAS,0CACTC,YAAY,cAKb3E,EAAMiB,UAAU4H,EAAE,qBAClB7I,EAAMiB,UAAU4H,EAAEG,QACzBhJ,EAAMiB,UAAUgI,OAASjJ,EAAMiB,UAAUC,OAAO,QAAS,CACvDsH,QAAS,upBACTP,OAAQ,CACN,uCACA,mBAEF9L,OAAQ,kCAEV6D,EAAMiB,UAAUI,aAAa,SAAU,UAAW,CAChD6H,aAAc,CACZxE,QAAS,aACTC,YAAY,KAGhB3E,EAAMiB,UAAUkI,IAAMnJ,EAAMiB,UAAUC,OAAO,IAAK,CAChDsH,QAAS,0hBACTQ,QAAS,mBACTF,SAAU,gJAEZ9I,EAAMiB,UAAUI,aAAa,MAAO,UAAW,CAC7C,aAAc,CACZqD,QAAS,wBACTC,YAAY,KAGhB3E,EAAMiB,UAAUmI,KAAOpJ,EAAMiB,UAAUC,OAAO,QAAS,CACrDsH,QAAS,2VACTrM,OAAQ,6EACR2M,SAAU,CACRpE,QAAS,4FACTC,YAAY,KAGhB3E,EAAMiB,UAAUoI,IAAMrJ,EAAMiB,UAAUC,OAAO,QAAS,CACpDsH,QAAS,0aACTc,SAAU,oBACVtC,QAAS,CACPtC,QAAS,uCACTC,YAAY,KAGhB3E,EAAMiB,UAAUI,aAAa,MAAO,aAAc,CAChD,gBAAiB,CACfqD,QAAS,eACTC,YAAY,EACZnE,MAAO,aAGXR,EAAMiB,UAAUI,aAAa,MAAO,UAAW,CAC7CkI,UAAW,mBACXC,SAAU,WACVC,QAAS,CACP/E,QAAS,kCACTC,YAAY,EACZrD,OAAQ,CAAE8F,YAAa,SAG3BpH,EAAMiB,UAAUI,aAAa,MAAO,WAAY,CAC9C6G,SAAU,CACRxD,QAAS,YACTC,YAAY,KAGZ3E,EAAMiB,UAAU8F,SAClB/G,EAAMoD,MAAMwC,IAAI,oBAAoB,SAAUzC,GACvB,QAAjBA,EAAIR,WAGRQ,EAAIuG,WAAa,GACjBvG,EAAIwG,WAAaxG,EAAIF,KACrBE,EAAIF,KAAOE,EAAIF,KAAKvC,QAAQ,mCAAmC,SAAUpD,GAEvE,OADA6F,EAAIuG,WAAWpE,KAAKhI,GACb,SAAW6F,EAAIuG,WAAW9H,OAAS,aAG9C5B,EAAMoD,MAAMwC,IAAI,iBAAiB,SAAUzC,GACpB,QAAjBA,EAAIR,WACNQ,EAAIF,KAAOE,EAAIwG,kBACRxG,EAAIwG,eAGf3J,EAAMoD,MAAMwC,IAAI,mBAAmB,SAAUzC,GAC3C,GAAqB,QAAjBA,EAAIR,SAAR,CAGA,IAAK,IAAIT,EAAI,EAAG0H,OAAI,EAAQA,EAAIzG,EAAIuG,WAAWxH,GAAIA,IACjDiB,EAAIQ,gBAAkBR,EAAIQ,gBAAgBjD,QAAQ,UAAYwB,EAAI,GAAK,MAAOlC,EAAMkE,UAAU0F,EAAGzG,EAAIzB,QAAS,OAAOhB,QAAQ,MAAO,SAEtIyC,EAAIV,QAAQoB,UAAYV,EAAIQ,oBAE9B3D,EAAMoD,MAAMwC,IAAI,QAAQ,SAAUzC,GACX,QAAjBA,EAAIR,UAAmC,WAAbQ,EAAI7C,OAChC6C,EAAI5C,QAAU4C,EAAI5C,QAAQG,QAAQ,2BAA4B,yCAGlEV,EAAMiB,UAAUI,aAAa,MAAO,UAAW,CAC7C0F,OAAQ,CACNrC,QAAS,iBACTpD,OAAQtB,EAAMiB,UAAU8F,QAE1BsC,IAAK,2BAGTrJ,EAAMiB,UAAU4I,OAAS,CACvB,QAAW,CACTnF,QAAS,eACTC,YAAY,GAEd,OAAU,kDACV,SAAY,CACVD,QAAS,mDACTC,YAAY,GAEd,aAAc,CACZD,QAAS,0BACTC,YAAY,GAEd,QAAW,+KACX,QAAW,qBACX,OAAU,4EACV,SAAY,uEACZ,YAAe,iBAEhB,SAAU3E,GACTA,EAAMiB,UAAU6I,KAAO9J,EAAMiB,UAAUC,OAAO,QAAS,CACrD8F,QAAS,uBACTwB,QAAS,8PAEX,IAAIE,EAAgB,CAClBhE,QAAS,aACTpD,OAAQ,CACNiI,UAAW,CACT7E,QAAS,WACTlE,MAAO,OAET8D,KAAMtE,EAAMxB,KAAKF,MAAM0B,EAAMiB,UAAU6I,QAG3C9J,EAAMiB,UAAUI,aAAa,OAAQ,UAAW,CAC9CoH,MAAO,CACL,CACE/D,QAAS,4DACTpD,OAAQ,CAAEoH,cAAeA,IAE3B,CACEhE,QAAS,wCACTpD,OAAQ,CAAEoH,cAAeA,IAE3B,CACEhE,QAAS,yDACTpD,OAAQ,CAAEoH,cAAeA,IAE3B,CACEhE,QAAS,0CACTpD,OAAQ,CAAEoH,cAAeA,IAE3B,CACEhE,QAAS,sCACTpD,OAAQ,CAAEoH,cAAeA,IAE3B,CACEhE,QAAS,2EACTC,YAAY,IAGhB6E,SAAU,yCACVO,OAAQ,uCAEV/J,EAAMiB,UAAUI,aAAa,OAAQ,SAAU,CAC7C2I,QAAS,kPACTV,SAAU,oCAEZtJ,EAAMiB,UAAU6I,KAAK7B,OAAS,CAC5B,CACEvD,QAAS,4DACTpD,OAAQ,CAAEoH,cAAeA,IAE3B,CACEhE,QAAS,wCACTpD,OAAQ,CAAEoH,cAAeA,IAE3B,CACEhE,QAAS,yDACTpD,OAAQ,CAAEoH,cAAeA,IAE3B,CACEhE,QAAS,0CACTpD,OAAQ,CAAEoH,cAAeA,IAE3B,CACEhE,QAAS,sCACTpD,OAAQ,CAAEoH,cAAeA,IAE3B,CACEhE,QAAS,4CACTpD,OAAQ,CAAEoH,cAAeA,KAxE/B,CA2EE1I,GAUF,IAAIiK,EAAQ,CACVzD,aAAcA,EACdG,QAASA,GAGPuD,EAAwB,SAAUrL,GACpC,IAAIsL,EAAOtL,EAAOuL,UAAUC,UAC5B,OAAIJ,EAAMzD,aAAa2D,GACdA,EAEF,MAELG,EAAmB,SAAUzL,EAAQ8D,EAAUM,GACjDpE,EAAO0L,YAAYC,UAAS,WAC1B,IAAIL,EAAOD,EAAsBrL,GACjCoE,EAAOtE,EAASU,IAAIc,OAAO8C,GACvBkH,GACFtL,EAAO4L,IAAIC,UAAUP,EAAM,QAAS,YAAcxH,GAClDwH,EAAKtG,UAAYZ,EACjBjD,EAAM0C,iBAAiByH,GACvBtL,EAAOuL,UAAUO,OAAOR,KAExBtL,EAAO+L,cAAc,mCAAqCjI,EAAW,KAAOM,EAAO,UACnFpE,EAAOuL,UAAUO,OAAO9L,EAAOgM,EAAE,UAAUC,WAAW,MAAM,SAI9DC,EAAiB,SAAUlM,GAC7B,IAAIsL,EAAOD,EAAsBrL,GACjC,OAAIsL,EACKA,EAAKjH,YAEP,IAEL8H,EAAa,CACfd,sBAAuBA,EACvBI,iBAAkBA,EAClBS,eAAgBA,GAGdE,EAAiB,SAAUpM,GAC7B,IAAIqM,EAAmB,CACrB,CACE/G,KAAM,WACNjG,MAAO,UAET,CACEiG,KAAM,aACNjG,MAAO,cAET,CACEiG,KAAM,MACNjG,MAAO,OAET,CACEiG,KAAM,MACNjG,MAAO,OAET,CACEiG,KAAM,OACNjG,MAAO,QAET,CACEiG,KAAM,SACNjG,MAAO,UAET,CACEiG,KAAM,OACNjG,MAAO,QAET,CACEiG,KAAM,IACNjG,MAAO,KAET,CACEiG,KAAM,KACNjG,MAAO,UAET,CACEiG,KAAM,MACNjG,MAAO,QAGPiN,EAAkBzL,EAASV,aAAaH,GAC5C,OAAOsM,GAAoCD,GAEzCE,EAAqB,SAAUvM,GACjC,IAAIwM,EACAlB,EAAOa,EAAWd,sBAAsBrL,GAC5C,OAAIsL,GACFkB,EAAUlB,EAAKrH,UAAUxF,MAAM,kBACxB+N,EAAUA,EAAQ,GAAK,IAEzB,IAELC,EAAY,CACdtM,aAAciM,EACdG,mBAAoBA,GAGlBG,EAAS,CACXC,KAAM,SAAU3M,GACd,IAAI4M,EAAW/L,EAASR,kBAAkBL,GACtC6M,EAAYhM,EAASD,mBAAmBZ,GACxC8M,EAAkBL,EAAUF,mBAAmBvM,GAC/C+M,EAAmBN,EAAUtM,aAAaH,GAC1CgN,EAAcb,EAAWD,eAAelM,GAC5CA,EAAOiN,cAAcN,KAAK,CACxBjE,MAAO,0BACPkE,SAAUA,EACVC,UAAWA,EACXK,OAAQ,OACRC,UAAW,SACXC,MAAO,UACPC,KAAM,CACJ,CACE5L,KAAM,UACNxD,KAAM,WACNqP,MAAO,WACPC,SAAU,IACVlO,MAAOyN,EACPU,OAAQT,GAEV,CACEtL,KAAM,UACNxD,KAAM,OACNwP,WAAW,EACXpG,YAAY,EACZqG,UAAW,YACXC,KAAM,EACNnE,MAAO,mCACPrC,QAAS,YACT9H,MAAO2N,EACPY,WAAW,IAGfC,SAAU,SAAUC,GAClB3B,EAAWV,iBAAiBzL,EAAQ8N,EAAE/I,KAAKjB,SAAUgK,EAAE/I,KAAKX,WAMhE2J,EAAW,SAAU/N,GACvBA,EAAOgO,WAAW,cAAc,WAC9B,IAAI1C,EAAOtL,EAAOuL,UAAUC,UACxBxL,EAAOuL,UAAU0C,eAAiB7C,EAAMzD,aAAa2D,GACvDoB,EAAOC,KAAK3M,GAEZA,EAAOkO,UAAUC,OAAO,YAI1BC,EAAW,CAAEL,SAAUA,GAEvBM,EAAQ,SAAUrO,GACpB,IAAIgM,EAAIhM,EAAOgM,EACfhM,EAAOsO,GAAG,cAAc,SAAUR,GAChC9B,EAAE,6BAA8B8B,EAAExC,MAAMiD,OAAOnD,EAAMtD,QAAQsD,EAAMzD,eAAe6G,MAAK,SAAUC,EAAK7G,GACpG,IAAI8G,EAAO1C,EAAEpE,GAAMxD,EAAOwD,EAAIvD,YAC9BqK,EAAKC,KAAK,QAAS3C,EAAE4C,KAAKF,EAAKC,KAAK,WACpCD,EAAKzC,WAAW,mBAChByC,EAAKG,QAAQC,OAAO9C,EAAE,iBAAiBwC,MAAK,WAC1C7U,KAAK0K,YAAcD,YAIzBpE,EAAOsO,GAAG,cAAc,WACtB,IAAIS,EAAyB/C,EAAE,OAAOuC,OAAOnD,EAAMtD,QAAQsD,EAAMzD,eAAe4G,QAAO,SAAUE,EAAK7G,GACpG,MAA+B,UAAxBA,EAAIoH,mBAETD,EAAuBhM,QACzB/C,EAAO0L,YAAYC,UAAS,WAC1BoD,EAAuBP,MAAK,SAAUC,EAAK7G,GACzCoE,EAAEpE,GAAKqH,KAAK,MAAMT,MAAK,SAAUC,EAAK7G,GACpCA,EAAI1D,WAAWgL,aAAalP,EAAOmP,SAASC,eAAe,MAAOxH,MAEpEA,EAAIoH,iBAAkB,EACtBpH,EAAI5C,UAAYhF,EAAO4L,IAAItK,OAAOsG,EAAIvD,aACtClD,EAAM0C,iBAAiB+D,GACvBA,EAAI3D,UAAY+H,EAAE4C,KAAKhH,EAAI3D,qBAMjCoL,EAAgB,CAAEhB,MAAOA,GAEzBiB,EAAU,SAAUtP,EAAQuP,EAAWC,EAAgBC,GACzD,IAAIC,EACAC,EAAa9O,EAASd,cAAcC,GACpCA,EAAO4P,QAAUJ,EAAelQ,QAG/BU,EAAO4P,QAAUH,EAASnQ,QAG3BU,EAAO4P,OACTJ,EAAejQ,KAAI,GAEnBkQ,EAASlQ,KAAI,IAEI,IAAfoQ,IACFD,EAAU1P,EAAO4L,IAAIiE,OAAO,OAAQ,CAClCC,IAAK,aACLC,KAAMJ,GAA0BJ,EAAY,mBAE9CvP,EAAOmP,SAASa,qBAAqB,QAAQ,GAAGC,YAAYP,MAG5DQ,EAAU,CAAEZ,QAASA,GAErBa,EAAa,SAAUnQ,GACzBA,EAAOoQ,UAAU,aAAc,CAC7BC,IAAK,aACL3H,MAAO,4BAET1I,EAAOsQ,YAAY,aAAc,CAC/BD,IAAK,aACL/K,KAAM,cACNiL,KAAM,gBAGNC,EAAU,CAAEzC,SAAUoC,GAEtBX,EAAiBrQ,GAAK,GAe1B,SAASsR,KAdThX,EAAOsN,IAAI,cAAc,SAAU/G,EAAQuP,GACzC,IAAIE,EAAWtQ,GAAK,GACpBkQ,EAAchB,MAAMrO,GACpBwQ,EAAQzC,SAAS/N,GACjBoO,EAASL,SAAS/N,GAClBA,EAAOsO,GAAG,QAAQ,WAChB4B,EAAQZ,QAAQtP,EAAQuP,EAAWC,EAAgBC,MAErDzP,EAAOsO,GAAG,YAAY,SAAUoC,GAC1BtF,EAAMzD,aAAa+I,EAAGC,SACxBjE,EAAOC,KAAK3M,UA37BL,CAo8Bfc,SAr8BF,I,sBCAA,YACW,WACP,aAEA,IAAIrH,EAASiG,QAAQC,KAAKC,MAAMC,QAAQ,yBAEpCC,EAAWJ,QAAQC,KAAKC,MAAMC,QAAQ,wBAEtCkB,EAAWrB,QAAQC,KAAKC,MAAMC,QAAQ,qBAEtC+Q,EAAWlR,QAAQC,KAAKC,MAAMC,QAAQ,sBAEtCgR,EAAc,SAAU7Q,GAC1B,OAAOA,EAAOW,SAAS,YAAa,YAElCmQ,EAAe,SAAU9Q,GAC3B,IAAI+Q,EAAU/Q,EAAOW,SAAS,aAAc,MAC5C,MAAO,WAAWqD,KAAK+M,GAAWA,EAAU,MAE1CC,EAAc,SAAUhR,GAC1B,IAAIiR,EAAQvS,SAASsB,EAAOW,SAAS,YAAa,KAAM,IACxD,OAAOsQ,GAAS,GAAKA,GAAS,EAAIA,EAAQ,GAExCpQ,EAAW,CACbgQ,YAAaA,EACbC,aAAcA,EACdE,YAAaA,GAGXnB,EAAS,SAAUqB,GACrB,IAAIC,EAAU,EACd,OAAO,WACL,IAAIC,GAAO,IAAIC,MAAOC,UAAUrP,SAAS,IACzC,OAAOiP,EAASE,GAAQD,KAAWlP,SAAS,MAG5CsP,EAAO,CAAE1B,OAAQA,GAEjB2B,EAAQD,EAAK1B,OAAO,WACpB4B,EAAmB,SAA0BR,GAC/C,IAAI5N,EACA8F,EAAW,GACf,IAAK9F,EAAI,EAAGA,GAAK4N,EAAO5N,IACtB8F,EAAS1C,KAAK,IAAMpD,GAEtB,OAAO8F,EAASlC,KAAK,MAEnByK,EAAa,SAAU1R,GACzB,OAAO2R,EAAY3R,GAAQ+C,OAAS,GAElC4O,EAAc,SAAU3R,GAC1B,IAAI4R,EAAW/Q,EAASgQ,YAAY7Q,GAChC6R,EAAYhR,EAASiQ,aAAa9Q,GAClCmJ,EAAWsI,EAAiB5Q,EAASmQ,YAAYhR,IACjD8R,EAAU9R,EAAOgM,EAAE7C,GAMvB,OALI2I,EAAQ/O,QAAU,YAAYiB,KAAK6N,KACrCC,EAAUA,EAAQvD,QAAO,SAAUlL,EAAG0O,GACpC,OAAQ/R,EAAO4L,IAAIoG,SAASD,EAAG7N,WAAY0N,OAGxChB,EAAShP,IAAIkQ,GAAS,SAAUpW,GACrC,MAAO,CACL4G,GAAI5G,EAAE4G,GAAK5G,EAAE4G,GAAKkP,IAClBS,MAAOvT,SAAShD,EAAEyI,SAAStC,QAAQ,MAAO,IAAK,IAC/C6G,MAAO1I,EAAOgM,EAAE1G,KAAK5J,GACrBkI,QAASlI,OAIXwW,EAAc,SAAUJ,GAC1B,IAAIzO,EAAG8O,EAAW,EAClB,IAAK9O,EAAI,EAAGA,EAAIyO,EAAQ/O,OAAQM,IAI9B,GAHIyO,EAAQzO,GAAG4O,MAAQE,IACrBA,EAAWL,EAAQzO,GAAG4O,OAEP,IAAbE,EACF,OAAOA,EAGX,OAAOA,GAELC,EAAgB,SAAUlL,EAAKwB,GACjC,IAAI2J,EAAU,IAAMnL,EAAM,2BACtBoL,EAAW,KAAOpL,EAAM,IAC5B,OAAOmL,EAAUvS,EAASU,IAAIc,OAAOoH,GAAS4J,GAE5CC,EAAkB,SAAUvS,GAC9B,IAAI4I,EAAO4J,EAAuBxS,GAClC,MAAO,eAAiBA,EAAO4L,IAAItK,OAAOT,EAASgQ,YAAY7Q,IAAW,6BAA+B4I,EAAO,UAE9G4J,EAAyB,SAAUxS,GACrC,IAGIqD,EAAGoP,EAAI/W,EAAGgX,EAHV9J,EAAO,GACPkJ,EAAUH,EAAY3R,GACtB2S,EAAYT,EAAYJ,GAAW,EAEvC,IAAKA,EAAQ/O,OACX,MAAO,GAGT,IADA6F,GAAQwJ,EAAcvR,EAASiQ,aAAa9Q,GAASe,EAAS1D,UAAU,sBACnEgG,EAAI,EAAGA,EAAIyO,EAAQ/O,OAAQM,IAAK,CAInC,GAHA3H,EAAIoW,EAAQzO,GACZ3H,EAAEkI,QAAQtB,GAAK5G,EAAE4G,GACjBoQ,EAAYZ,EAAQzO,EAAI,IAAMyO,EAAQzO,EAAI,GAAG4O,MACzCU,IAAcjX,EAAEuW,MAClBrJ,GAAQ,YAER,IAAK6J,EAAKE,EAAWF,EAAK/W,EAAEuW,MAAOQ,IACjC7J,GAAQ,WAIZ,GADAA,GAAQ,aAAelN,EAAE4G,GAAK,KAAO5G,EAAEgN,MAAQ,OAC3CgK,IAAchX,EAAEuW,OAAUS,EAM5B,IAAKD,EAAK/W,EAAEuW,MAAOQ,EAAKC,EAAWD,IACjC7J,GAAQ,sBANVA,GAAQ,QACH8J,IACH9J,GAAQ,SAOZ+J,EAAYjX,EAAEuW,MAEhB,OAAOrJ,GAELgK,EAAoB,SAAU5S,EAAQ6S,GACxC,OAAQA,EAAM9P,QAAU/C,EAAO4L,IAAIkH,WAAWD,EAAM,GAAI,4BAA4B9P,OAAS,GAE3FgQ,EAAY,SAAU/S,GACxB,IAAI4R,EAAW/Q,EAASgQ,YAAY7Q,GAChCgT,EAAUhT,EAAOgM,EAAE,IAAM4F,GACzBgB,EAAkB5S,EAAQgT,GAC5BhT,EAAO+L,cAAcwG,EAAgBvS,IAErCiT,EAAUjT,IAGViT,EAAY,SAAUjT,GACxB,IAAI4R,EAAW/Q,EAASgQ,YAAY7Q,GAChCgT,EAAUhT,EAAOgM,EAAE,IAAM4F,GACzBoB,EAAQjQ,QACV/C,EAAO0L,YAAYC,UAAS,WAC1BqH,EAAQpK,KAAK4J,EAAuBxS,QAItCkT,EAAM,CACRxB,WAAYA,EACZqB,UAAWA,EACXE,UAAWA,GAGTlF,EAAW,SAAU/N,GACvBA,EAAOgO,WAAW,gBAAgB,WAChCkF,EAAIH,UAAU/S,MAEhBA,EAAOgO,WAAW,gBAAgB,WAChCkF,EAAID,UAAUjT,OAGdoO,EAAW,CAAEL,SAAUA,GAEvBM,EAAQ,SAAUrO,GACpB,IAAIgM,EAAIhM,EAAOgM,EAAG4F,EAAW/Q,EAASgQ,YAAY7Q,GAClDA,EAAOsO,GAAG,cAAc,SAAUR,GAChC,IAAIkF,EAAUhH,EAAE,IAAM4F,EAAU9D,EAAExC,MAC9B0H,EAAQjQ,SACViQ,EAAQ/G,WAAW,mBACnB+G,EAAQ/D,KAAK,qBAAqBhD,WAAW,uBAGjDjM,EAAOsO,GAAG,cAAc,WACtB,IAAI0E,EAAUhH,EAAE,IAAM4F,GAClBoB,EAAQjQ,SACViQ,EAAQrE,KAAK,mBAAmB,GAChCqE,EAAQG,SAAS,gBAAgBxE,KAAK,mBAAmB,QAI3DU,EAAgB,CAAEhB,MAAOA,GAEzB+E,EAAc,SAAUpT,GAC1B,OAAO,SAAU8N,GACf,IAAIuF,EAAOvF,EAAEwF,QACbtT,EAAOsO,GAAG,iCAAiC,WACzC+E,EAAKE,SAASvT,EAAOwT,WAAaN,EAAIxB,WAAW1R,SAInDyT,EAAQ,SAAUzT,GACpB,OAAO,SAAU4H,GACf,OAAOA,GAAO5H,EAAO4L,IAAIjO,GAAGiK,EAAK,IAAM/G,EAASgQ,YAAY7Q,KAAYA,EAAO0T,UAAUC,SAAS/L,KAGlGuI,EAAa,SAAUnQ,GACzBA,EAAOoQ,UAAU,MAAO,CACtBwD,QAAS,oBACTvD,IAAK,eACLE,KAAM,MACNsD,aAAcT,EAAYpT,KAE5BA,EAAOoQ,UAAU,YAAa,CAC5BwD,QAAS,SACTvD,IAAK,eACLE,KAAM,WAERvQ,EAAOsQ,YAAY,MAAO,CACxBhL,KAAM,oBACNwO,QAAS,SACTzD,IAAK,eACLwD,aAAcT,EAAYpT,KAE5BA,EAAO+T,kBAAkBN,EAAMzT,GAAS,cAEtCwQ,EAAU,CAAEzC,SAAUoC,GAO1B,SAASM,KALThX,EAAOsN,IAAI,OAAO,SAAU/G,GAC1BoO,EAASL,SAAS/N,GAClBwQ,EAAQzC,SAAS/N,GACjBqP,EAAchB,MAAMrO,OA1NhB,IADV,I,sBCAA,YACiB,WACb,aAEA,IAAIvG,EAASiG,QAAQC,KAAKC,MAAMC,QAAQ,yBAEpCmU,EAAkB,SAAUhU,EAAQiU,GACtC,IAAIC,EAOJ,OANAlU,EAAO4L,IAAIkH,WAAW9S,EAAOuL,UAAU4I,YAAY,SAAUvM,GAC3D,IAAIvI,GACAA,EAAQuI,EAAI4B,MAAiB,cAAXyK,EAAyB,QAAU,uBACvDC,EAAQA,GAAgB7U,MAGrB6U,GAELE,EAAY,SAAUC,GACxB,IAAIhR,EACAiR,EAAS,GACb,IAAKjR,EAAI,EAAGA,EAAIgR,EAAStR,OAAQM,GAAK,EACpCiR,EAAO7N,KAAK,CACVnB,KAAM+O,EAAShR,EAAI,GACnB6Q,MAAO,IAAMG,EAAShR,KAG1B,OAAOiR,GAELC,EAAc,SAAUvU,EAAQiU,EAAQ5U,GAC1CW,EAAO0L,YAAYC,UAAS,WAC1B3L,EAAOwU,QACPxU,EAAOkO,UAAUrH,MAAMoN,EAAQ,CAAE5U,MAAOA,IACxCW,EAAOyU,kBAGPC,EAAe,SAAU1U,EAAQiU,GACnCjU,EAAO0L,YAAYC,UAAS,WAC1B3L,EAAOwU,QACPxU,EAAOkO,UAAUyG,OAAOV,EAAQ,CAAE5U,MAAO,MAAQ,MAAM,GACvDW,EAAOyU,kBAGPG,EAAY,CACdZ,gBAAiBA,EACjBI,UAAWA,EACXG,YAAaA,EACbG,aAAcA,GAGZ3G,EAAW,SAAU/N,GACvBA,EAAOgO,WAAW,qBAAqB,SAAUiG,EAAQ5U,GACvDuV,EAAUL,YAAYvU,EAAQiU,EAAQ5U,MAExCW,EAAOgO,WAAW,sBAAsB,SAAUiG,GAChDW,EAAUF,aAAa1U,EAAQiU,OAG/B7F,EAAW,CAAEL,SAAUA,GAEvBjO,EAAWJ,QAAQC,KAAKC,MAAMC,QAAQ,wBAEtCkB,EAAWrB,QAAQC,KAAKC,MAAMC,QAAQ,sBAEtCgV,EAAkB,CACpB,SACA,QACA,SACA,eACA,SACA,aACA,SACA,aACA,SACA,aACA,SACA,YACA,SACA,SACA,SACA,iBACA,SACA,SACA,SACA,SACA,SACA,QACA,SACA,QACA,SACA,OACA,SACA,OACA,SACA,eACA,SACA,OACA,SACA,MACA,SACA,QACA,SACA,eACA,SACA,YACA,SACA,YACA,SACA,aACA,SACA,SACA,SACA,cACA,SACA,UACA,SACA,OACA,SACA,SACA,SACA,OACA,SACA,OACA,SACA,WACA,SACA,aACA,SACA,QACA,SACA,OACA,SACA,QACA,SACA,eACA,SACA,aACA,SACA,YACA,SACA,iBACA,SACA,QAEEC,EAAkB,SAAU9U,GAC9B,OAAOA,EAAOW,SAAS,gBAAiBkU,IAEtCE,EAAkB,SAAU/U,GAC9B,OAAOA,EAAOW,SAAS,gBAAiBmU,EAAgB9U,KAEtDgV,EAAkB,SAAUhV,GAC9B,OAAOA,EAAOW,SAAS,gBAAiBmU,EAAgB9U,KAEtDiV,EAAmB,SAAUjV,GAC/B,OAAOA,EAAOW,SAAS,iBAAkB,IAEvCuU,EAAmB,SAAUlV,GAC/B,OAAOA,EAAOW,SAAS,iBAAkB,IAEvCwU,EAAmB,SAAUnV,GAC/B,OAAOA,EAAOW,SAAS,iBAAkBsU,EAAiBjV,KAExDoV,EAAmB,SAAUpV,GAC/B,OAAOA,EAAOW,SAAS,iBAAkBsU,EAAiBjV,KAExDqV,EAAmB,SAAUrV,GAC/B,OAAOA,EAAOW,SAAS,iBAAkBuU,EAAiBlV,KAExDsV,EAAmB,SAAUtV,GAC/B,OAAOA,EAAOW,SAAS,iBAAkBuU,EAAiBlV,KAExDuV,EAAyB,SAAUvV,GACrC,OAAOA,EAAOW,SAAS,wBAAyB,OAE9C6U,EAAiB,SAAUxV,GAC7B,MAAiD,oBAAnCuV,EAAuBvV,IAEnCa,EAAW,CACbkU,gBAAiBA,EACjBC,gBAAiBA,EACjBG,iBAAkBA,EAClBC,iBAAkBA,EAClBC,iBAAkBA,EAClBC,iBAAkBA,EAClBC,uBAAwBA,EACxBC,eAAgBA,GAGd5E,EAAWlR,QAAQC,KAAKC,MAAMC,QAAQ,qBAEtC4V,EAAU,SAAUC,EAAMC,EAAMtB,EAAUmB,GAC5C,IAAIlB,EAAQJ,EAAOtL,EAAMgN,EAAMC,EAAG7Z,EAAGqH,EAAGyS,EAAQ,EAC5CxT,EAAKxC,EAASU,IAAIuV,SAAS,WAC3BC,EAAmB,SAAU9B,EAAOxL,GACtC,IAAIuN,EAAsB,gBAAV/B,EAChB,MAAO,4BAA8B+B,EAAY,sBAAwB,IAAlE,cAA6F3T,EAAK,IAAMwT,IAAxG,sBAA+I5B,GAAgB,IAA/J,yCAA+NA,EAAQ,qBAAuBA,EAAQ,IAAtQ,YAA+RtD,EAASvT,UAAUqL,GAAS,MAAQuN,EAAY,SAAW,IAA1V,eAST,IAPA3B,EAASM,EAAUR,UAAUC,GAC7BC,EAAO7N,KAAK,CACVnB,KAAMsL,EAASvT,UAAU,YACzB6W,MAAO,gBAETtL,EAAO,mGACPgN,EAAOtB,EAAOvR,OAAS,EAClB/G,EAAI,EAAGA,EAAI2Z,EAAM3Z,IAAK,CAEzB,IADA4M,GAAQ,OACHiN,EAAI,EAAGA,EAAIH,EAAMG,IACpBxS,EAAIrH,EAAI0Z,EAAOG,EACXxS,EAAIuS,EACNhN,GAAQ,aAERsL,EAAQI,EAAOjR,GACfuF,GAAQoN,EAAiB9B,EAAMA,MAAOA,EAAM5O,OAGhDsD,GAAQ,QAEV,GAAI4M,EAAgB,CAGlB,IAFA5M,GAAQ,oBAA2B8M,EAA3B,2CAAoFpT,EAApF,0GAA0MA,EAA1M,mFAAySsO,EAASvT,UAAU,aAA5T,4BACRuL,GAAQ,OACHiN,EAAI,EAAGA,EAAIH,EAAMG,IACpBjN,GAAQoN,EAAiB,GAAI,gBAE/BpN,GAAQ,QAGV,OADAA,GAAQ,mBACDA,GAELsN,EAAkB,CAAET,QAASA,GAE7BU,EAAc,SAAqBC,EAAK/W,GAC1C+W,EAAI5M,MAAM6M,WAAahX,EACvB+W,EAAIE,aAAa,iBAAkBjX,IAEjCkX,EAAgB,SAAUvW,GAC5B,OAAO,SAAU8N,GACf,IAAIuF,EAAOvF,EAAEwF,QACTD,EAAKmD,OACPxW,EAAOyW,YAAY,oBAAqBpD,EAAKpT,SAASgU,OAAQZ,EAAKmD,QAEnExW,EAAOyW,YAAY,qBAAsBpD,EAAKpT,SAASgU,UAIzDyC,EAAe,SAAU1W,EAAQ0V,GACnC,OAAO,SAAU5H,GACf,IACIzO,EADAsX,EAAahd,KAAKoK,SAElB6S,EAAehC,EAAUZ,gBAAgBhU,EAAQ2W,EAAW1W,SAASgU,QACrE4C,EAAc,SAAUxX,GAC1BW,EAAOyW,YAAY,oBAAqBE,EAAW1W,SAASgU,OAAQ5U,GACpEsX,EAAWG,YACXH,EAAWzC,MAAM7U,IAEf0X,EAAa,WACf/W,EAAOyW,YAAY,qBAAsBE,EAAW1W,SAASgU,QAC7D0C,EAAWG,YACXH,EAAWI,cAEb,GAAIjX,EAASU,IAAIwW,UAAUlJ,EAAE6C,OAAQ,yBAA0B,CAC7DgG,EAAWG,YACX,IAAIG,EAAsBpW,EAAS0U,uBAAuBvV,GAC1DiX,EAAoB/U,KAAKlC,GAAQ,SAAUX,GACzC,IACI6X,EAAkBd,EAAK/S,EADvB8T,EAAWR,EAAWS,MAAMC,QAAQrH,qBAAqB,SAAS,GAKtE,IAHAkH,EAAmBnW,EAASa,IAAIuV,EAASxB,KAAKwB,EAASxB,KAAK5S,OAAS,GAAGuU,YAAY,SAAU1P,GAC5F,OAAOA,EAAI2P,cAERlU,EAAI,EAAGA,EAAI6T,EAAiBnU,OAAQM,IAEvC,GADA+S,EAAMc,EAAiB7T,IAClB+S,EAAIoB,aAAa,kBACpB,MAGJ,GAAInU,IAAMqS,EACR,IAAKrS,EAAI,EAAGA,EAAIqS,EAAO,EAAGrS,IACxB8S,EAAYe,EAAiB7T,GAAI6T,EAAiB7T,EAAI,GAAGmU,aAAa,mBAG1ErB,EAAYC,EAAK/W,GACjBwX,EAAYxX,KACXuX,GAELvX,EAAQyO,EAAE6C,OAAO6G,aAAa,kBAC1BnY,GACE1F,KAAK8d,QACP3X,EAASU,IAAIlB,IAAI3F,KAAK8d,QAAQnB,aAAa,gBAAiB,SAE9DxI,EAAE6C,OAAO2F,aAAa,iBAAiB,GACvC3c,KAAK8d,OAAS3J,EAAE6C,OAAOrO,GACT,gBAAVjD,EACF0X,IAEAF,EAAYxX,IAEK,OAAVA,GACTsX,EAAWG,cAIbY,EAAoB,SAAU1X,EAAQ2X,GACxC,OAAO,WACL,IAAIjC,EAAOiC,EAAY9W,EAASwU,iBAAiBrV,GAAUa,EAASyU,iBAAiBtV,GACjF2V,EAAOgC,EAAY9W,EAASsU,iBAAiBnV,GAAUa,EAASuU,iBAAiBpV,GACjFqU,EAAWsD,EAAY9W,EAASkU,gBAAgB/U,GAAUa,EAASmU,gBAAgBhV,GACnFwV,EAAiB3U,EAAS2U,eAAexV,GAC7C,OAAOkW,EAAgBT,QAAQC,EAAMC,EAAMtB,EAAUmB,KAGrDrF,EAAa,SAAUnQ,GACzBA,EAAOoQ,UAAU,YAAa,CAC5B3O,KAAM,cACNmS,QAAS,aACTK,OAAQ,YACRmD,MAAO,CACLQ,KAAM,cACNC,cAAc,EACdjP,KAAM8O,EAAkB1X,GAAQ,GAChC8X,QAASpB,EAAa1W,EAAQa,EAASwU,iBAAiBrV,KAE1D8X,QAASvB,EAAcvW,KAEzBA,EAAOoQ,UAAU,YAAa,CAC5B3O,KAAM,cACNmS,QAAS,mBACTK,OAAQ,cACRmD,MAAO,CACLQ,KAAM,cACNC,cAAc,EACdjP,KAAM8O,EAAkB1X,GAAQ,GAChC8X,QAASpB,EAAa1W,EAAQa,EAASyU,iBAAiBtV,KAE1D8X,QAASvB,EAAcvW,MAGvBwQ,EAAU,CAAEzC,SAAUoC,GAM1B,SAASM,KAJThX,EAAOsN,IAAI,aAAa,SAAU/G,GAChCoO,EAASL,SAAS/N,GAClBwQ,EAAQzC,SAAS/N,OAhVP,IADhB,I,wBCGE,SAAUvG,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;IAAIme,EACI,8DAA8D/d,MAC1D,KAERC,EAAc,kDAAkDD,MAAM,KACtEge,EAAc,CACV,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,SAEJC,EACI,mLAEJC,EAAOte,EAAOE,aAAa,QAAS,CACpCC,OAAQ,2FAA2FC,MAC/F,KAEJC,YAAa,SAAUuB,EAAGyY,GACtB,OAAKzY,EAEM,QAAQwI,KAAKiQ,GACbha,EAAYuB,EAAE2c,SAEdJ,EAAevc,EAAE2c,SAJjBJ,GAOfE,YAAaA,EACbG,iBAAkBH,EAClBI,kBACI,+FACJC,uBACI,0FACJN,YAAaA,EACbO,gBAAiBP,EACjBQ,iBAAkBR,EAClB9d,SAAU,uDAAuDF,MAAM,KACvEG,cAAe,qCAAqCH,MAAM,KAC1DI,YAAa,uBAAuBJ,MAAM,KAC1Cye,oBAAoB,EACpBpe,eAAgB,CACZC,GAAI,SACJC,IAAK,YACLC,EAAG,aACHC,GAAI,wBACJC,IAAK,+BACLC,KAAM,sCAEVC,SAAU,CACNC,QAAS,WACL,MAAO,aAAgC,IAAjBlB,KAAK+e,QAAgB,IAAM,IAAM,QAE3D5d,QAAS,WACL,MAAO,gBAAmC,IAAjBnB,KAAK+e,QAAgB,IAAM,IAAM,QAE9D3d,SAAU,WACN,MAAO,cAAiC,IAAjBpB,KAAK+e,QAAgB,IAAM,IAAM,QAE5D1d,QAAS,WACL,MAAO,cAAiC,IAAjBrB,KAAK+e,QAAgB,IAAM,IAAM,QAE5Dzd,SAAU,WACN,MACI,0BACkB,IAAjBtB,KAAK+e,QAAgB,IAAM,IAC5B,QAGRxd,SAAU,KAEdC,aAAc,CACVC,OAAQ,QACRC,KAAM,UACNC,EAAG,gBACHC,GAAI,cACJC,EAAG,YACHC,GAAI,aACJC,EAAG,WACHC,GAAI,WACJC,EAAG,SACHC,GAAI,UACJ6E,EAAG,aACHiY,GAAI,aACJ7c,EAAG,SACHC,GAAI,WACJC,EAAG,SACHC,GAAI,WAERgB,uBAAwB,WACxBC,QAAS,MACThB,KAAM,CACFC,IAAK,EACLC,IAAK,KAIb,OAAO8b,M,uBC9GX,EAAQ,S,wBCDN,SAAUze,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;IAAIgf,EAAOhf,EAAOE,aAAa,QAAS,CACpCC,OAAQ,wEAAwEC,MAC5E,KAEJC,YACI,wEAAwED,MACpE,KAERE,SAAU,sDAAsDF,MAAM,KACtEG,cAAe,wCAAwCH,MAAM,KAC7DI,YAAa,gBAAgBJ,MAAM,KACnCye,oBAAoB,EACpBpe,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,0BAEVC,SAAU,CACNC,QAAS,wBACTC,QAAS,sBACTC,SAAU,uBACVC,QAAS,sBACTC,SAAU,uBACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,QACRC,KAAM,SACNC,EAAG,OACHC,GAAI,WACJC,EAAG,QACHC,GAAI,WACJC,EAAG,OACHC,GAAI,WACJC,EAAG,MACHC,GAAI,UACJC,EAAG,MACHC,GAAI,UACJC,EAAG,MACHC,GAAI,YAERC,KAAM,CACFC,IAAK,EACLC,IAAK,KAIb,OAAOwc,M,wBC5DT,SAAUnf,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;SAASif,EAAoBvb,EAAQC,EAAeC,EAAKC,GACrD,IAAIwW,EAAS,CACT3Y,EAAG,CAAC,qBAAsB,iBAC1BC,GAAI,CAAC+B,EAAS,cAAeA,EAAS,WACtC9B,EAAG,CAAC,aAAc,YAClBC,GAAI,CAAC6B,EAAS,YAAaA,EAAS,WACpC5B,EAAG,CAAC,YAAa,UACjBC,GAAI,CAAC2B,EAAS,WAAYA,EAAS,UACnC1B,EAAG,CAAC,YAAa,UACjBC,GAAI,CAACyB,EAAS,WAAYA,EAAS,QACnCxB,EAAG,CAAC,eAAgB,aACpBC,GAAI,CAACuB,EAAS,cAAeA,EAAS,WACtCtB,EAAG,CAAC,aAAc,YAClBC,GAAI,CAACqB,EAAS,YAAaA,EAAS,YAExC,OAAOG,EAAWwW,EAAOzW,GAAK,GAAKyW,EAAOzW,GAAK,GAGnD,IAAIsb,EAAUlf,EAAOE,aAAa,WAAY,CAC1CC,OAAQ,CACJgf,WACI,4EAA4E/e,MACxE,KAERia,OAAQ,wIAAwIja,MAC5I,KAEJgf,SAAU,mBAEd/e,YACI,4DAA4DD,MAAM,KACtEsC,kBAAkB,EAClBpC,SAAU,uDAAuDF,MAAM,KACvEG,cAAe,qCAAqCH,MAAM,KAC1DI,YAAa,uBAAuBJ,MAAM,KAC1Cye,oBAAoB,EACpBpe,eAAgB,CACZC,GAAI,iBACJC,IAAK,oBACLC,EAAG,aACHC,GAAI,cACJC,IAAK,6BACLC,KAAM,sCACNmE,KAAM,mCAEVlE,SAAU,CACNC,QAAS,WACTC,QAAS,cACTC,SAAU,sBACVC,QAAS,WACTC,SAAU,sBACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,KACRC,KAAM,UACNC,EAAGud,EACHtd,GAAIsd,EACJrd,EAAGqd,EACHpd,GAAIod,EACJnd,EAAGmd,EACHld,GAAIkd,EACJjd,EAAGid,EACHhd,GAAIgd,EACJ/c,EAAG+c,EACH9c,GAAI8c,EACJ7c,EAAG6c,EACH5c,GAAI4c,GAER5b,uBAAwB,cACxBC,QAAS,SAAUI,EAAQ2B,GACvB,OAAQA,GAEJ,IAAK,IACD,OAAO3B,EAAS,KACpB,QACA,IAAK,IACL,IAAK,IACL,IAAK,MACL,IAAK,IACL,IAAK,IACL,IAAK,IACD,OAAOA,IAGnBpB,KAAM,CACFC,IAAK,EACLC,IAAK,GAETG,cAAe,+BACfC,aAAc,SAAUC,EAAMC,GAI1B,OAHa,KAATD,IACAA,EAAO,GAEM,SAAbC,EACOD,EAAO,EAAIA,EAAOA,EAAO,GACZ,aAAbC,EACAD,EACa,aAAbC,EACAD,EAAO,GAAKA,EAAOA,EAAO,GACb,UAAbC,EACAD,EAAO,QADX,GAIXC,SAAU,SAAUD,EAAME,EAAQC,GAC9B,OAAIH,EAAO,EACA,OACAA,EAAO,GACP,WACAA,EAAO,GACP,WACAA,EAAO,GACP,QAEA,UAKnB,OAAOqc,M,wBChIT,SAAUrf,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;IAAIqf,EAAOrf,EAAOE,aAAa,QAAS,CACpCC,OAAQ,uFAAuFC,MAC3F,KAEJC,YACI,iEAAiED,MAC7D,KAERsC,kBAAkB,EAClBpC,SAAU,sDAAsDF,MAAM,KACtEG,cAAe,qCAAqCH,MAAM,KAC1DI,YAAa,uBAAuBJ,MAAM,KAC1Cye,oBAAoB,EACpBpe,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,0BAEVC,SAAU,CACNC,QAAS,qBACTC,QAAS,gBACTC,SAAU,cACVC,QAAS,cACTC,SAAU,sBACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,UACRC,KAAM,YACNC,EAAG,oBACHC,GAAI,cACJC,EAAG,aACHC,GAAI,aACJC,EAAG,YACHC,GAAI,YACJC,EAAG,UACHC,GAAI,WACJC,EAAG,UACHC,GAAI,UACJC,EAAG,QACHC,GAAI,UAERgB,uBAAwB,gBACxBC,QAAS,SAAUI,EAAQ2B,GACvB,OAAQA,GAEJ,QACA,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,MACL,IAAK,IACD,OAAO3B,GAAqB,IAAXA,EAAe,KAAO,KAG3C,IAAK,IACL,IAAK,IACD,OAAOA,GAAqB,IAAXA,EAAe,KAAO,OAGnDpB,KAAM,CACFC,IAAK,EACLC,IAAK,KAIb,OAAO6c,M,wBC9ET,SAAUxf,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;IAAIsf,EAAOtf,EAAOE,aAAa,QAAS,CACpCC,OAAQ,wFAAwFC,MAC5F,KAEJC,YAAa,kDAAkDD,MAAM,KACrEE,SAAU,2DAA2DF,MACjE,KAEJG,cAAe,8BAA8BH,MAAM,KACnDI,YAAa,uBAAuBJ,MAAM,KAC1CK,eAAgB,CACZC,GAAI,SACJC,IAAK,YACLC,EAAG,aACHC,GAAI,cACJC,IAAK,qBACLC,KAAM,4BAEVC,SAAU,CACNC,QAAS,gBACTC,QAAS,mBACTC,SAAU,eACVC,QAAS,oBACTC,SAAU,sBACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,QACRC,KAAM,SACNC,EAAG,gBACHC,GAAI,aACJC,EAAG,WACHC,GAAI,aACJC,EAAG,UACHC,GAAI,WACJC,EAAG,QACHC,GAAI,UACJC,EAAG,UACHC,GAAI,YACJC,EAAG,SACHC,GAAI,YAERgB,uBAAwB,uBACxBC,QAAS,SAAUI,GACf,IAAI6b,EAAI7b,EAAS,GACbR,EACgC,OAAxBQ,EAAS,IAAO,IACd,KACM,IAAN6b,EACA,KACM,IAANA,EACA,KACM,IAANA,EACA,KACA,KACd,OAAO7b,EAASR,GAEpBZ,KAAM,CACFC,IAAK,EACLC,IAAK,KAIb,OAAO8c,M,wBCvET,SAAUzf,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;IAAIwf,EAAW,CACXC,EAAG,QACHC,EAAG,QACHC,EAAG,QACHC,GAAI,QACJC,GAAI,QACJC,EAAG,OACHC,EAAG,OACHC,GAAI,OACJC,GAAI,OACJC,EAAG,QACHC,EAAG,QACHC,IAAK,QACLC,EAAG,OACHC,EAAG,QACHC,GAAI,QACJC,GAAI,QACJC,GAAI,QACJC,GAAI,SAGJC,EAAK3gB,EAAOE,aAAa,KAAM,CAC/BC,OAAQ,6EAA6EC,MACjF,KAEJC,YAAa,kDAAkDD,MAAM,KACrEE,SAAU,wDAAwDF,MAC9D,KAEJG,cAAe,8BAA8BH,MAAM,KACnDI,YAAa,uBAAuBJ,MAAM,KAC1C0C,SAAU,SAAUgc,EAAO8B,EAAS5d,GAChC,OAAI8b,EAAQ,GACD9b,EAAU,KAAO,KAEjBA,EAAU,KAAO,MAGhCL,cAAe,cACfwC,KAAM,SAAUP,GACZ,MAAiB,OAAVA,GAA4B,OAAVA,GAE7BnE,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVC,SAAU,CACNC,QAAS,kBACTC,QAAS,kBACTC,SAAU,2BACVC,QAAS,WACTC,SAAU,yBACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,WACRC,KAAM,UACNC,EAAG,gBACHC,GAAI,YACJC,EAAG,aACHC,GAAI,YACJC,EAAG,WACHC,GAAI,UACJC,EAAG,UACHC,GAAI,SACJ6E,EAAG,YACHiY,GAAI,WACJ7c,EAAG,SACHC,GAAI,QACJC,EAAG,UACHC,GAAI,UAERiB,QAAS,SAAUI,EAAQ2B,GACvB,OAAQA,GACJ,IAAK,IACL,IAAK,IACL,IAAK,KACL,IAAK,KACD,OAAO3B,EACX,QACI,GAAe,IAAXA,EAEA,OAAOA,EAAS,QAEpB,IAAImd,EAAInd,EAAS,GACb6b,EAAK7b,EAAS,IAAOmd,EACrBzQ,EAAI1M,GAAU,IAAM,IAAM,KAC9B,OAAOA,GAAU8b,EAASqB,IAAMrB,EAASD,IAAMC,EAASpP,MAGpE9N,KAAM,CACFC,IAAK,EACLC,IAAK,KAIb,OAAOme,M,wBC9GT,SAAU9gB,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;IAAI8gB,EAAK9gB,EAAOE,aAAa,KAAM,CAC/BC,OAAQ,sFAAsFC,MAC1F,KAEJC,YAAa,kDAAkDD,MAAM,KACrEE,SAAU,qDAAqDF,MAAM,KACrEG,cAAe,8BAA8BH,MAAM,KACnDI,YAAa,uBAAuBJ,MAAM,KAC1CK,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,eACJC,IAAK,qBACLC,KAAM,sCAEVC,SAAU,CACNC,QAAS,iBACTC,QAAS,oBACTC,SAAU,mBACVC,QAAS,iBACTC,SAAU,qBACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,QACRC,KAAM,WACNC,EAAG,cACHC,GAAI,cACJC,EAAG,WACHC,GAAI,cACJC,EAAG,UACHC,GAAI,WACJC,EAAG,SACHC,GAAI,UACJC,EAAG,WACHC,GAAI,aACJC,EAAG,QACHC,GAAI,SAERgB,uBAAwB,YACxBC,QAAS,MACThB,KAAM,CACFC,IAAK,EACLC,IAAK,KAIb,OAAOse,M,wBCzDT,SAAUjhB,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;IAAI+gB,EAAO/gB,EAAOE,aAAa,QAAS,CACpCC,OAAQ,0FAA0FC,MAC9F,KAEJC,YAAa,kDAAkDD,MAAM,KACrEE,SAAU,yDAAyDF,MAC/D,KAEJG,cAAe,8BAA8BH,MAAM,KACnDI,YAAa,wBAAwBJ,MAAM,KAC3CK,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,YACHC,GAAI,eACJC,IAAK,qBACLC,KAAM,6BAEVC,SAAU,CACNC,QAAS,oBACTC,QAAS,gBACTC,SAAU,0BACVC,QAAS,eACTC,SAAU,4BACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,gBACRC,KAAM,mBACNC,EAAG,gBACHC,GAAI,aACJC,EAAG,eACHC,GAAI,YACJC,EAAG,aACHC,GAAI,UACJC,EAAG,aACHC,GAAI,UACJC,EAAG,cACHC,GAAI,WACJC,EAAG,aACHC,GAAI,WAERgB,uBAAwB,UACxBC,QAAS,SAAUI,GACf,OAAOA,GAEXpB,KAAM,CACFC,IAAK,EACLC,IAAK,KAIb,OAAOue,M,wBC7DT,SAAUlhB,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;IAAIghB,EAAKhhB,EAAOE,aAAa,KAAM,CAC/BC,OAAQ,+FAA+FC,MACnG,KAEJC,YACI,8DAA8DD,MAC1D,KAERsC,kBAAkB,EAClBpC,SACI,sEAAsEF,MAClE,KAERG,cAAe,8BAA8BH,MAAM,KACnDI,YAAa,uBAAuBJ,MAAM,KAC1Cye,oBAAoB,EACpBpe,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,0BACJC,IAAK,gCACLC,KAAM,sCACNgE,EAAG,WACHC,GAAI,oBACJC,IAAK,0BACLC,KAAM,gCAEVlE,SAAU,CACNC,QAAS,kBACTC,QAAS,mBACTC,SAAU,gBACVC,QAAS,kBACTC,SAAU,0BACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,WACRC,KAAM,WACNC,EAAG,iBACHC,GAAI,aACJC,EAAG,aACHC,GAAI,YACJC,EAAG,WACHC,GAAI,UACJC,EAAG,WACHC,GAAI,UACJC,EAAG,eACHC,GAAI,cACJC,EAAG,WACHC,GAAI,WAERgB,uBAAwB,YACxBC,QAAS,MACThB,KAAM,CACFC,IAAK,EACLC,IAAK,KAIb,OAAOwe,M,wBCrET,SAAUnhB,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;IAAIihB,EAAKjhB,EAAOE,aAAa,KAAM,CAC/BC,OAAQ,oGAAoGC,MACxG,KAEJC,YACI,iEAAiED,MAC7D,KAERsC,kBAAkB,EAClBpC,SAAU,iDAAiDF,MAAM,KACjEG,cAAe,8CAA8CH,MAAM,KACnEI,YAAa,yBAAyBJ,MAAM,KAC5Cye,oBAAoB,EACpBpe,eAAgB,CACZC,GAAI,OACJC,IAAK,UACLC,EAAG,aACHC,GAAI,cACJC,IAAK,wBACLC,KAAM,oCAEV4B,cAAe,wBACfwC,KAAM,SAAUP,GACZ,MAAiB,eAAVA,GAEX9B,SAAU,SAAUD,EAAME,EAAQC,GAC9B,OAAIH,EAAO,GACA,aAEA,cAGf7B,SAAU,CACNC,QAAS,mBACTC,QAAS,qBACTC,SAAU,qBACVC,QAAS,wBACTC,SAAU,6BACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,SACRC,KAAM,YACNC,EAAG,eACHC,GAAI,YACJC,EAAG,SACHC,GAAI,UACJC,EAAG,YACHC,GAAI,aACJC,EAAG,QACHC,GAAI,SACJ6E,EAAG,YACHiY,GAAI,aACJ7c,EAAG,UACHC,GAAI,WACJC,EAAG,OACHC,GAAI,WAIZ,OAAO4e,M,uBCnEX,EAAQ,S,qBCAR,EAAQ,S,wBCDN,SAAUphB,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;IAAIkhB,EAAa,CACbC,MAAO,CAEHxf,GAAI,CAAC,UAAW,UAAW,WAC3BC,EAAG,CAAC,cAAe,iBACnBC,GAAI,CAAC,QAAS,SAAU,UACxBC,EAAG,CAAC,YAAa,eACjBC,GAAI,CAAC,MAAO,OAAQ,QACpBC,EAAG,CAAC,YAAa,eACjBC,GAAI,CAAC,MAAO,OAAQ,QACpBC,EAAG,CAAC,cAAe,iBACnBC,GAAI,CAAC,QAAS,SAAU,UACxBC,EAAG,CAAC,eAAgB,gBACpBC,GAAI,CAAC,SAAU,SAAU,WAE7B+e,uBAAwB,SAAU1d,EAAQ2d,GACtC,OACI3d,EAAS,IAAM,GACfA,EAAS,IAAM,IACdA,EAAS,IAAM,IAAMA,EAAS,KAAO,IAE/BA,EAAS,KAAO,EAAI2d,EAAQ,GAAKA,EAAQ,GAE7CA,EAAQ,IAEnB5d,UAAW,SAAUC,EAAQC,EAAeC,EAAKC,GAC7C,IACIyd,EADAD,EAAUH,EAAWC,MAAMvd,GAG/B,OAAmB,IAAfA,EAAIuF,OAEQ,MAARvF,GAAeD,EAAsB,eAClCE,GAAYF,EAAgB0d,EAAQ,GAAKA,EAAQ,IAG5DC,EAAOJ,EAAWE,uBAAuB1d,EAAQ2d,GAErC,OAARzd,GAAgBD,GAA0B,WAAT2d,EAC1B5d,EAAS,UAGbA,EAAS,IAAM4d,KAI1BC,EAASvhB,EAAOE,aAAa,UAAW,CACxCC,OAAQ,mFAAmFC,MACvF,KAEJC,YACI,2DAA2DD,MAAM,KACrEsC,kBAAkB,EAClBpC,SAAU,sDAAsDF,MAAM,KACtEG,cAAe,qCAAqCH,MAAM,KAC1DI,YAAa,uBAAuBJ,MAAM,KAC1Cye,oBAAoB,EACpBpe,eAAgB,CACZC,GAAI,OACJC,IAAK,UACLC,EAAG,cACHC,GAAI,gBACJC,IAAK,qBACLC,KAAM,4BAEVC,SAAU,CACNC,QAAS,eACTC,QAAS,eACTC,SAAU,WACN,OAAQpB,KAAKyhB,OACT,KAAK,EACD,MAAO,sBACX,KAAK,EACD,MAAO,qBACX,KAAK,EACD,MAAO,sBACX,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACD,MAAO,oBAGnBpgB,QAAS,cACTC,SAAU,WACN,IAAIogB,EAAe,CACf,2BACA,+BACA,4BACA,0BACA,8BACA,2BACA,4BAEJ,OAAOA,EAAa1hB,KAAKyhB,QAE7BlgB,SAAU,KAEdC,aAAc,CACVC,OAAQ,QACRC,KAAM,SACNC,EAAG,mBACHC,GAAIuf,EAAWzd,UACf7B,EAAGsf,EAAWzd,UACd5B,GAAIqf,EAAWzd,UACf3B,EAAGof,EAAWzd,UACd1B,GAAImf,EAAWzd,UACfzB,EAAGkf,EAAWzd,UACdxB,GAAIif,EAAWzd,UACfvB,EAAGgf,EAAWzd,UACdtB,GAAI+e,EAAWzd,UACfrB,EAAG8e,EAAWzd,UACdpB,GAAI6e,EAAWzd,WAEnBJ,uBAAwB,YACxBC,QAAS,MACThB,KAAM,CACFC,IAAK,EACLC,IAAK,KAIb,OAAO+e,M,wBCnIT,SAAU1hB,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;IAAI0hB,EAAQ1hB,EAAOE,aAAa,SAAU,CACtCC,OAAQ,CACJgf,WACI,qFAAqF/e,MACjF,KAERia,OAAQ,sHAAsHja,MAC1H,KAEJgf,SAAU,mBAEd/e,YACI,+DAA+DD,MAC3D,KAERsC,kBAAkB,EAClBpC,SAAU,2DAA2DF,MACjE,KAEJG,cAAe,8BAA8BH,MAAM,KACnDI,YAAa,uBAAuBJ,MAAM,KAC1Cye,oBAAoB,EACpBpe,eAAgB,CACZC,GAAI,OACJC,IAAK,UACLC,EAAG,aACHC,GAAI,mBACJmE,GAAI,aACJlE,IAAK,4BACLmE,IAAK,mBACLlE,KAAM,iCACNmE,KAAM,wBAEVlE,SAAU,CACNC,QAAS,aACTC,QAAS,eACTC,SAAU,cACVC,QAAS,aACTC,SAAU,qBACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,YACRC,KAAM,QACNC,EAAG,gBACHC,GAAI,cACJC,EAAG,aACHC,GAAI,aACJC,EAAG,UACHC,GAAI,UACJC,EAAG,UACHC,GAAI,WACJC,EAAG,SACHC,GAAI,WACJC,EAAG,QACHC,GAAI,UAERgB,uBAAwB,qBACxBC,QAAS,SAAUI,EAAQ2B,GACvB,IAAInC,EACW,IAAXQ,EACM,IACW,IAAXA,EACA,IACW,IAAXA,EACA,IACW,IAAXA,EACA,IACA,IAIV,MAHe,MAAX2B,GAA6B,MAAXA,IAClBnC,EAAS,KAENQ,EAASR,GAEpBZ,KAAM,CACFC,IAAK,EACLC,IAAK,KAIb,OAAOkf,M,uBCvFX,EAAQ,S,sBCNR,YACY,WACR,aAEA,IAAI7hB,EAASiG,QAAQC,KAAKC,MAAMC,QAAQ,yBAEpC0b,EAAO,aAEP9Q,EAAW,SAAUpL,GACvB,OAAO,WACL,OAAOA,IAGX,SAASmc,EAAMC,GAEb,IADA,IAAIC,EAAc,GACTC,EAAK,EAAGA,EAAK7Y,UAAUC,OAAQ4Y,IACtCD,EAAYC,EAAK,GAAK7Y,UAAU6Y,GAElC,OAAO,WAEL,IADA,IAAIC,EAAW,GACND,EAAK,EAAGA,EAAK7Y,UAAUC,OAAQ4Y,IACtCC,EAASD,GAAM7Y,UAAU6Y,GAE3B,IAAI7U,EAAM4U,EAAYG,OAAOD,GAC7B,OAAOH,EAAG5U,MAAM,KAAMC,IAG1B,IAAIgV,EAAM,SAAUC,GAClB,OAAO,WAEL,IADA,IAAIvV,EAAO,GACFmV,EAAK,EAAGA,EAAK7Y,UAAUC,OAAQ4Y,IACtCnV,EAAKmV,GAAM7Y,UAAU6Y,GAEvB,OAAQI,EAAElV,MAAM,KAAML,KAGtBwV,EAAQvR,GAAS,GACjBwR,EAASxR,GAAS,GAElByR,EAAO,WACT,OAAOC,GAELA,EAAO,WACT,IAAIC,EAAK,SAAUta,GACjB,OAAOA,EAAEua,UAEPna,EAAO,SAAUoa,GACnB,OAAOA,KAELha,EAAK,SAAUlF,GACjB,OAAOA,GAELmf,EAAK,CACPC,KAAM,SAAUpf,EAAG9B,GACjB,OAAO8B,KAETO,GAAIqe,EACJS,OAAQT,EACRK,OAAQJ,EACRS,MAAOpa,EACPqa,WAAYza,EACZ0a,SAAU,SAAUC,GAClB,MAAM,IAAIC,MAAMD,GAAO,oCAEzBE,UAAWtS,EAAS,MACpBuS,eAAgBvS,OAASwS,GACzBC,GAAI5a,EACJ6a,QAASjb,EACTN,IAAKsa,EACL1N,KAAM+M,EACN6B,KAAMlB,EACNmB,OAAQrB,EACRsB,OAAQrB,EACR1N,OAAQ2N,EACRqB,OAAQnB,EACRoB,QAASpB,EACTqB,QAAS,WACP,MAAO,IAETxb,SAAUwI,EAAS,WAKrB,OAHI1I,OAAO2b,QACT3b,OAAO2b,OAAOnB,GAETA,EA1CE,GA4CPoB,EAAO,SAAUlD,GACnB,IAAImD,EAAanT,EAASgQ,GACtBvZ,EAAO,WACT,OAAOqb,GAELa,EAAO,SAAUrB,GACnB,OAAOA,EAAEtB,IAEP8B,EAAK,CACPC,KAAM,SAAUpf,EAAG9B,GACjB,OAAOA,EAAEmf,IAEX9c,GAAI,SAAU6B,GACZ,OAAOib,IAAMjb,GAEfid,OAAQR,EACRI,OAAQL,EACRU,MAAOkB,EACPjB,WAAYiB,EACZhB,SAAUgB,EACVb,UAAWa,EACXZ,eAAgBY,EAChBV,GAAIhc,EACJic,QAASjc,EACTU,IAAK,SAAUma,GACb,OAAO4B,EAAK5B,EAAEtB,KAEhBjM,KAAM,SAAUuN,GACdA,EAAEtB,IAEJ2C,KAAMA,EACNC,OAAQD,EACRE,OAAQF,EACR7O,OAAQ,SAAUwN,GAChB,OAAOA,EAAEtB,GAAK8B,EAAKJ,GAErBsB,QAAS,WACP,MAAO,CAAChD,IAEVxY,SAAU,WACR,MAAO,QAAUwY,EAAI,KAEvB8C,OAAQ,SAAUzb,GAChB,OAAOA,EAAEnE,GAAG8c,IAEd+C,QAAS,SAAU1b,EAAG+b,GACpB,OAAO/b,EAAE0a,KAAKR,GAAO,SAAU7C,GAC7B,OAAO0E,EAAUpD,EAAGtB,QAI1B,OAAOoD,GAELrW,EAAO,SAAU7G,GACnB,OAAiB,OAAVA,QAA4B4d,IAAV5d,EAAsB8c,EAAOwB,EAAKte,IAEzDye,EAAS,CACXH,KAAMA,EACNzB,KAAMA,EACNhW,KAAMA,GAGJ6X,EAAS,SAAUlI,GACrB,GAAU,OAANA,EACF,MAAO,OAET,IAAI9K,SAAW8K,EACf,MAAU,WAAN9K,IAAmBpE,MAAM3E,UAAUgc,cAAcnI,IAAMA,EAAEoI,aAAsC,UAAvBpI,EAAEoI,YAAYhgB,MACjF,QAEC,WAAN8M,IAAmBmT,OAAOlc,UAAUgc,cAAcnI,IAAMA,EAAEoI,aAAsC,WAAvBpI,EAAEoI,YAAYhgB,MAClF,SAEF8M,GAELoT,EAAS,SAAU1c,GACrB,OAAO,SAAUpC,GACf,OAAO0e,EAAO1e,KAAWoC,IAGzB2c,EAAaD,EAAO,YAEpBE,EAAc1X,MAAM3E,UAAUoE,MAC9BkY,EAAgB3X,MAAM3E,UAAU6F,QAChC0W,EAAa,SAAUC,EAAIzT,GAC7B,OAAOuT,EAAcpc,KAAKsc,EAAIzT,IAE5B4I,EAAW,SAAU8K,EAAI5I,GAC3B,OAAO0I,EAAWE,EAAI5I,IAAM,GAE1BjU,EAAM,SAAU6c,EAAI1C,GAGtB,IAFA,IAAI1V,EAAMoY,EAAG1b,OACT2b,EAAI,IAAI/X,MAAMN,GACThD,EAAI,EAAGA,EAAIgD,EAAKhD,IAAK,CAC5B,IAAIwS,EAAI4I,EAAGpb,GACXqb,EAAErb,GAAK0Y,EAAElG,EAAGxS,GAEd,OAAOqb,GAELnQ,EAAS,SAAUkQ,EAAIE,GAEzB,IADA,IAAID,EAAI,GACCrb,EAAI,EAAGgD,EAAMoY,EAAG1b,OAAQM,EAAIgD,EAAKhD,IAAK,CAC7C,IAAIwS,EAAI4I,EAAGpb,GACPsb,EAAK9I,EAAGxS,IACVqb,EAAEjY,KAAKoP,GAGX,OAAO6I,GAELzP,EAAO,SAAUwP,EAAIE,GACvB,IAAK,IAAItb,EAAI,EAAGgD,EAAMoY,EAAG1b,OAAQM,EAAIgD,EAAKhD,IAAK,CAC7C,IAAIwS,EAAI4I,EAAGpb,GACX,GAAIsb,EAAK9I,EAAGxS,GACV,OAAOya,EAAOH,KAAK9H,GAGvB,OAAOiI,EAAO5B,QAMZpc,GAJSse,EAAWzX,MAAMT,OAAQS,MAAMT,KAI7BxG,QAAQC,KAAKC,MAAMC,QAAQ,sBAEtCkB,EAAWrB,QAAQC,KAAKC,MAAMC,QAAQ,eAEtC+e,EAAO7d,EAAS8d,IAAM,IAAW,OACjCC,EAAS/d,EAAS8d,IAAM,aAAe,cACvCE,EAAY,CACd,CACEC,SAAUJ,EAAO,OACjBK,OAAQ,QAEV,CACED,SAAUJ,EAAO,OACjBK,OAAQ,UAEV,CACED,SAAUJ,EAAO,OACjBK,OAAQ,aAEV,CACED,SAAUJ,EAAO,OACjBK,OAAQ,cAEV,CACED,SAAUJ,EAAO,WAAaA,EAAO,eACrCK,OAAQ,QAEV,CACED,SAAUJ,EAAO,OACjBK,OAAQ,QAEV,CACED,SAAUF,EAAS,OACnBG,OAAQ,YAEV,CACED,SAAUF,EAAS,OACnBG,OAAQ,YAEV,CACED,SAAUF,EAAS,OACnBG,OAAQ,YAEV,CACED,SAAUF,EAAS,OACnBG,OAAQ,YAEV,CACED,SAAUF,EAAS,OACnBG,OAAQ,YAEV,CACED,SAAUF,EAAS,OACnBG,OAAQ,YAEV,CACED,SAAUF,EAAS,OACnBG,OAAQ,aAEV,CACED,SAAUF,EAAS,OACnBG,OAAQ,OAEV,CACED,SAAUF,EAAS,OACnBG,OAAQ,WAEV,CACED,SAAU,WACVC,OAAQ,oBAEV,CACED,SAAU,YACVC,OAAQ,oBAEV,CACED,SAAU,YACVC,OAAQ,yBAEV,CACED,SAAU,YACVC,OAAQ,+BAEV,CACED,SAAUJ,EAAO,OACjBK,OAAQ,0CAEV,CACED,SAAUJ,EAAO,OACjBK,OAAQ,mCAEV,CACED,SAAUJ,EAAO,OACjBK,OAAQ,6CAGRC,EAAoB,CAAEH,UAAWA,GAEjCI,EAAU,WACZ,IAAIC,EAAgB,SAAUJ,GAC5B,MAAO,uBAAyBA,EAASC,OAAS,eAAiBD,EAASA,SAASnd,QAAQ,QAAS,WAAa,KAEjHwd,EAAoBzd,EAAIsd,EAAkBH,WAAW,SAAUC,GACjE,MAAO,0CAA4CI,EAAcJ,GAA1D,QAAqFlf,EAASzC,UAAU2hB,EAASC,QAAjH,YAA8ID,EAASA,SAAvJ,gBACN/X,KAAK,IACR,MAAO,CACLyB,MAAO,kBACPjH,KAAM,YACN+H,MAAO,0DACP8V,MAAO,CAAC,CACJ7d,KAAM,YACNmH,KAAM,oDAAqE9I,EAASzC,UAAU,UAAxF,YAAuHyC,EAASzC,UAAU,YAA1I,gBAA+KgiB,EAA/K,qBAIVE,EAAuB,CAAEJ,QAASA,GAElCK,EAAOzd,OAAOyd,KAEdC,EAAW,SAAUzZ,EAAK0Z,GAC5B,IAAIC,EAAmB,SAAUlF,GAC/B,IAAI1P,SAAW0P,EACf,MAAa,WAAN1P,GAAwB,WAANA,GAE3B,OAAO/E,EAAInE,QAAQ,mBAAmB,SAAU+d,EAAWpiB,GACzD,IAAI6B,EAAQqgB,EAAIliB,GAChB,OAAOmiB,EAAiBtgB,GAASA,EAAM4C,WAAa2d,MAIpDC,EAAO,CACT,CACEriB,IAAK,UACLS,KAAM,iBAER,CACET,IAAK,SACLS,KAAM,UAER,CACET,IAAK,WACLS,KAAM,YAER,CACET,IAAK,aACLS,KAAM,cAER,CACET,IAAK,WACLS,KAAM,YAER,CACET,IAAK,SACLS,KAAM,UAER,CACET,IAAK,UACLS,KAAM,iBAER,CACET,IAAK,OACLS,KAAM,QAER,CACET,IAAK,aACLS,KAAM,eAER,CACET,IAAK,cACLS,KAAM,gBAER,CACET,IAAK,WACLS,KAAM,qBAER,CACET,IAAK,cACLS,KAAM,gBAER,CACET,IAAK,iBACLS,KAAM,kBAER,CACET,IAAK,YACLS,KAAM,aAER,CACET,IAAK,WACLS,KAAM,aAER,CACET,IAAK,aACLS,KAAM,eAER,CACET,IAAK,OACLS,KAAM,QAER,CACET,IAAK,KACLS,KAAM,mBAER,CACET,IAAK,QACLS,KAAM,SAER,CACET,IAAK,aACLS,KAAM,eAER,CACET,IAAK,YACLS,KAAM,cAER,CACET,IAAK,iBACLS,KAAM,oBAER,CACET,IAAK,eACLS,KAAM,iBAER,CACET,IAAK,OACLS,KAAM,QAER,CACET,IAAK,QACLS,KAAM,SAER,CACET,IAAK,QACLS,KAAM,SAER,CACET,IAAK,cACLS,KAAM,eAER,CACET,IAAK,cACLS,KAAM,eAER,CACET,IAAK,YACLS,KAAM,cAER,CACET,IAAK,QACLS,KAAM,SAER,CACET,IAAK,UACLS,KAAM,WAER,CACET,IAAK,QACLS,KAAM,SAER,CACET,IAAK,OACLS,KAAM,QAER,CACET,IAAK,gBACLS,KAAM,sBAER,CACET,IAAK,eACLS,KAAM,iBAER,CAC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E,MAAK,SAAU9B,GAC9B,OAAOyF,EAAgBzF,EAAQhxB,EAAMq2B,MAGzC,SAASsB,EAAiB33B,EAAMq2B,GAC9B,OAAOqB,EAAkB13B,EAAMq2B,GAASvD,MAAK,SAAU8E,GACrD,OAAOA,EAAQr/B,MAAM,KAAK,MAG9B,SAASs/B,IACP,OAAOR,EAAUvE,KAAK90B,GAExB,MAAO,CACLu5B,QAASA,EACThB,OAAQA,EACRC,UAAWA,EACXgB,SAAUA,EACVC,eAAgBA,EAChBC,kBAAmBA,EACnBC,iBAAkBA,EAClBE,SAAUA,GAGd,SAASC,EAAS/D,GAChB,OAAO6C,EAAc7C,GAAMjB,MAAK,SAAUuC,GACxC,OAAO+B,EAASV,EAAa3C,GAAOA,EAAMsB,MAG9C,SAAS0C,EAAW/G,EAAQhxB,GAC1B,OAAOo2B,EAAapF,EAAQhxB,GAAM8yB,MAAK,SAAUiB,GAC/C,OAAOqD,EAASxF,EAAQxzB,QAAQ4yB,GAAS+C,EAAM/C,EAAOwF,gBAI1D,SAASwB,EAAMp6B,EAAOkB,EAAKqsB,GACzB,IAAI8M,EAA+B,kBAAVr6B,EAAqBs6B,WAAWt6B,GAASA,EAMlE,OALIq6B,EAAc9M,EAChB8M,EAAc9M,EACL8M,EAAcn5B,IACvBm5B,EAAcn5B,GAETm5B,EAET,SAASE,IACP,MAAO,CACL,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,GAGJ,IAAIC,EAAc,CAChB,EACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,GACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,GACA,IACA,IACA,IACA,IACA,IACA,IACA,GACA,IACA,IACA,IACA,IACA,GACA,IACA,IACA,IACA,IACA,GACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,GACA,IACA,IACA,IACA,IACA,IACA,IACA,EACA,KACA,KACA,KACA,KACA,IACA,KACA,KACA,KACA,KACA,IACA,KACA,KACA,KACA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6B,EACA,EACA,EACA,EACA,EACAA,EACA,EACA,EACA,EACA,EACAA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,IAGJ,SAAS+7B,EAAahB,EAAQiB,EAASC,EAASC,GAI9C,OAHAF,EAAU5B,EAAM4B,EAAS,EAAG,GAC5BC,EAAU7B,EAAM6B,EAAS,EAAG,GAC5BC,EAAU9B,EAAM8B,EAAS,EAAG,GACrBzB,EAASM,EAAQ,CACtBiB,EACA,EACA,EACA,EACA,EACA,EACAC,EACA,EACA,EACA,EACA,EACA,EACAC,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,IAGJ,SAASC,EAAYpB,EAAQ/6B,GAE3B,OADAA,EAAQo6B,EAAMp6B,EAAO,EAAG,GACjBy6B,EAASM,EAAQD,EAAO,CAC7B,KACA,KACA,KACA,EACA,EACA,KACA,KACA,KACA,EACA,EACA,KACA,KACA,KACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,GACC96B,IAEL,SAASo8B,EAAgBrB,EAAQ/6B,GAE/B,OADAA,EAAQo6B,EAAMp6B,EAAO,EAAG,GACjBy6B,EAASM,EAAQD,EAAO,CAC7B,IACA,IACA,IACA,EACA,EACA,IACA,IACA,IACA,EACA,EACA,IACA,IACA,IACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,GACC96B,IAGL,SAASq8B,EAAYC,EAAIvB,GACvB,OAAOuB,EAAGrC,WAAW/E,MAAK,SAAU9B,GAClC,OAAOmJ,EAAiBnJ,EAAQkJ,EAAG3C,UAAWoB,MAGlD,SAASwB,EAAiBnJ,EAAQhxB,EAAM24B,GACtC,IAAItmB,EAAU8e,EAAaH,GAC3B,SAASoJ,EAAYC,EAAYtgC,GAG/B,IAFA,IAAIkjB,EAAGqd,EAAG5iB,EAAGsB,EACT1V,EAAO+2B,EAAW/2B,KAAMi3B,EAAKxgC,EAAE,GAAIygC,EAAKzgC,EAAE,GAAI0gC,EAAK1gC,EAAE,GAAI2gC,EAAK3gC,EAAE,GAAI4gC,EAAK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F,CACE,MACA,gBAEF,CACE,MACA,kBAEF,CACE,MACA,qBAEF,CACE,OACA,6CAEF,CACE,OACA,8CAEF,CACE,MACA,2BAEF,CACE,MACA,4BAEF,CACE,OACA,8BAEF,CACE,OACA,+BAEF,CACE,OACA,8BAEF,CACE,OACA,+BAEF,CACE,OACA,+BAEF,CACE,OACA,+BAEF,CACE,KACA,kBAEF,CACE,KACA,qBAEF,CACE,OACA,yBAEF,CACE,OACA,4BAEF,CACE,OACA,WAEF,CACE,OACA,WAEF,CACE,MACA,UAEF,CACE,OACA,YAEF,CACE,MACA,iBAEF,CACE,MACA,cAEF,CACE,MACA,aAEF,CACE,MACA,6BAEF,CACE,MACA,wBAEF,CACE,MACA,qBAEF,CACE,MACA,eAEF,CACE,MACA,eAEF,CACE,OACA,cAEF,CACE,MACA,mBAEF,CACE,MACA,iBAEF,CACE,OACA,kBAEF,CACE,MACA,uBAEF,CACE,MACA,mBAEF,CACE,MACA,mBAEF,CACE,MACA,qBAEF,CACE,MACA,wBAEF,CACE,MACA,qBAEF,CACE,MACA,2BAEF,CACE,MACA,qBAEF,CACE,OACA,YAEF,CACE,OACA,kBAEF,CACE,OACA,YAEF,CACE,OACA,eAEF,CACE,OACA,cAEF,CACE,OACA,0BAEF,CACE,OACA,mBAEF,CACE,OACA,gBAEF,CACE,OACA,gBAEF,CACE,OACA,cAEF,CACE,OACA,qBAEF,CACE,OACA,sBAEF,CACE,OACA,iBAEF,CACE,OACA,eAEF,CACE,OACA,cAEF,CACE,MACA,YAEF,CACE,OACA,gBAEF,CACE,OACA,SAEF,CACE,OACA,wBAEF,CACE,OACA,WAEF,CACE,OACA,gBAEF,CACE,OACA,YAEF,CACE,OACA,uBAEF,CACE,OACA,qBAEF,CACE,OACA,mBAEF,CACE,OACA,SAEF,CACE,MACA,gBAEF,CACE,MACA,WAEF,CACE,MACA,8BAEF,CACE,MACA,+BAEF,CACE,OACA,UAEF,CACE,OACA,iBAEF,CACE,MACA,aAEF,CACE,MACA,aAEF,CACE,MACA,kBAEF,CACE,MACA,aAEF,CACE,MACA,iBAEF,CACE,MACA,kBAEF,CACE,MACA,cAEF,CACE,MACA,eAEF,CACE,MACA,eAEF,CACE,MACA,aAEF,CACE,MACA,aAEF,CACE,MACA,kBAEF,CACE,MACA,iBAEF,CACE,MACA,cAEF,CACE,MACA,aAEF,CACE,MACA,aAEF,CACE,MACA,kBAEF,CACE,MACA,iBAEF,CACE,MACA,cAEF,CACE,MACA,OAEF,CACE,MACA,aAEF,CACE,MACA,aAEF,CACE,MACA,aAEF,CACE,MACA,kBAEF,CACE,MACA,aAEF,CACE,MACA,iBAEF,CACE,MACA,aAEF,CACE,MACA,cAEF,CACE,MACA,eAEF,CACE,MACA,aAEF,CACE,MACA,aAEF,CACE,MACA,aAEF,CACE,MACA,kBAEF,CACE,MACA,iBAEF,CACE,MACA,cAEF,CACE,MACA,aAEF,CACE,MACA,iBAEF,CACE,MACA,cAEF,CACE,MACA,SAEF,CACE,MACA,aAEF,CACE,MACA,aAEF,CACE,MACA,kBAEF,CACE,MACA,aAEF,CACE,MACA,iBAEF,CACE,MACA,kBAEF,CACE,MACA,cAEF,CACE,MACA,eAEF,CACE,MACA,eAEF,CACE,MACA,aAEF,CACE,MACA,aAEF,CACE,MACA,kBAEF,CACE,MACA,iBAEF,CACE,MACA,cAEF,CACE,MACA,aAEF,CACE,MACA,aAEF,CACE,MACA,kBAEF,CACE,MACA,iBAEF,CACE,MACA,cAEF,CACE,MACA,OAEF,CACE,MACA,aAEF,CACE,MACA,aAEF,CACE,MACA,aAEF,CACE,MACA,kBAEF,CACE,MACA,aAEF,CACE,MACA,iBAEF,CACE,MACA,WAEF,CACE,MACA,YAEF,CACE,MACA,eAEF,CACE,MACA,aAEF,CACE,MACA,aAEF,CACE,MACA,aAEF,CACE,MACA,kBAEF,CACE,MACA,iBAEF,CACE,MACA,cAEF,CACE,MACA,aAEF,CACE,MACA,SAEF,CACE,MACA,iBAEF,CACE,MACA,cAEF,CACE,MACA,SAEF,CACE,MACA,QAEF,CACE,MACA,SAEF,CACE,MACA,SAEF,CACE,MACA,WAEF,CACE,MACA,QAEF,CACE,MACA,OAEF,CACE,MACA,SAEF,CACE,MACA,QAEF,CACE,MACA,SAEF,CACE,MACA,UAEF,CACE,MACA,MAEF,CACE,MACA,MAEF,CACE,MACA,MAEF,CACE,MACA,WAEF,CACE,MACA,MAEF,CACE,MACA,OAEF,CACE,MACA,SAEF,CACE,MACA,OAEF,CACE,MACA,WAEF,CACE,MACA,OAEF,CACE,MACA,OAEF,CACE,MACA,OAEF,CACE,MACA,SAEF,CACE,MACA,SAEF,CACE,MACA,QAEF,CACE,MACA,SAEF,CACE,MACA,SAEF,CACE,MACA,WAEF,CACE,MACA,QAEF,CACE,MACA,OAEF,CACE,MACA,SAEF,CACE,MACA,QAEF,CACE,MACA,SAEF,CACE,MACA,UAEF,CACE,MACA,MAEF,CACE,MACA,MAEF,CACE,MACA,MAEF,CACE,MACA,WAEF,CACE,MACA,MAEF,CACE,MACA,OAEF,CACE,MACA,eAEF,CACE,MACA,SAEF,CACE,MACA,OAEF,CACE,MACA,WAEF,CACE,MACA,OAEF,CACE,MACA,OAEF,CACE,MACA,OAEF,CACE,MACA,SAEF,CACE,OACA,eAEF,CACE,MACA,aAEF,CACE,OACA,oBAEF,CACE,MACA,yBAEF,CACE,OACA,iBAEF,CACE,OACA,kBAEF,CACE,OACA,mBAEF,CACE,OACA,iBAEF,CACE,OACA,oBAEF,CACE,OACA,mBAEF,CACE,OACA,oBAEF,CACE,OACA,mBAEF,CACE,OACA,0BAEF,CACE,OACA,wBAEF,CACE,OACA,2BAEF,CACE,OACA,0BAEF,CACE,OACA,2BAEF,CACE,OACA,aAEF,CACE,OACA,aAEF,CACE,OACA,eAEF,CACE,OACA,mBAEF,CACE,OACA,yBAEF,CACE,OACA,2BAEF,CACE,OACA,gBAEF,CACE,OACA,iBAEF,CACE,OACA,iBAEF,CACE,OACA,gBAEF,CACE,OACA,gBAEF,CACE,OACA,iBAEF,CACE,OACA,cAEF,CACE,OACA,eAEF,CACE,OACA,+BAEF,CACE,OACA,gCAEF,CACE,OACA,WAEF,CACE,OACA,oBAEF,CACE,OACA,mBAEF,CACE,OACA,oBAEF,CACE,OACA,sBAEF,CACE,OACA,YAEF,CACE,OACA,YAEF,CACE,OACA,cAEF,CACE,OACA,yBAEF,CACE,OACA,qBAEF,CACE,OACA,sBAEF,CACE,OACA,wBAIFC,EAAgB,SAAUJ,GAC5B,OAAO5pF,EAAS0rB,KAAKk+D,GAAS,SAAU3vC,GACtC,OAAOzuB,EAAQyuB,IAAyB,IAAhBA,EAAKh3C,WAG7BgnF,EAAsB,SAAUC,GAClC,OAAI1+D,EAAQ0+D,GACH,GAAGnuE,OAAOiuE,EAAcE,IAEL,oBAAjBA,EACFA,IAEF,IAELC,EAAgB,SAAUjqF,EAAQ0pF,GACpC,IAAIQ,EAAcrpF,EAAS4oF,WAAWzpF,GAClCkqF,IACFR,EAAUK,EAAoBG,IAEhC,IAAIC,EAAoBtpF,EAAS8oF,iBAAiB3pF,GAClD,OAAImqF,EACK,GAAGtuE,OAAO6tE,GAAS7tE,OAAOkuE,EAAoBI,IAEhDT,GAELU,EAAe,SAAUpqF,GAC3B,OAAOiqF,EAAcjqF,EAAQ6pF,MAE3BQ,EAAU,CAAEZ,WAAYW,GAExB9qF,EAAM,SAAUU,GAClB,IAAIypF,EAAa,WACf,OAAOY,EAAQZ,WAAWzpF,IAExBupF,EAAa,SAAUh7D,GACzBylB,EAAQu1C,WAAWvpF,EAAQuuB,IAE7B,MAAO,CACLk7D,WAAYA,EACZF,WAAYA,IAGZ3gE,EAAM,CAAEtpB,IAAKA,GAEbmW,EAAU,SAAUi0E,GACtB,IAAIY,EAAUz0E,EAAG7Z,EACbo2B,EAAQ9xB,KAAKC,IAAImpF,EAAQ3mF,OAAQ,IACjCsvB,EAAS/xB,KAAKg3B,KAAKoyD,EAAQ3mF,OAASqvB,GAExC,IADAk4D,EAAW,yEACNtuF,EAAI,EAAGA,EAAIq2B,EAAQr2B,IAAK,CAE3B,IADAsuF,GAAY,OACPz0E,EAAI,EAAGA,EAAIuc,EAAOvc,IAAK,CAC1B,IAAI1P,EAAQnK,EAAIo2B,EAAQvc,EACxB,GAAI1P,EAAQujF,EAAQ3mF,OAAQ,CAC1B,IAAIwrB,EAAMm7D,EAAQvjF,GACdsoB,EAAW/vB,SAAS6vB,EAAI,GAAI,IAC5Bg8D,EAAUh8D,EAAMrQ,OAAOssE,aAAa/7D,GAAY,SACpD67D,GAAY,cAAgB/7D,EAAI,GAApB,+BAA+DA,EAAI,GAAK,6BAA+BE,EAAW,KAAO87D,EAAzH,mBAEZD,GAAY,SAGhBA,GAAY,QAGd,OADAA,GAAY,mBACLA,GAELG,EAAW,CAAEh1E,QAASA,GAEtBi1E,EAAc,SAAU9iF,GAC1B,MAAOA,EAAK,CACV,GAAqB,OAAjBA,EAAIzD,SACN,OAAOyD,EAETA,EAAMA,EAAI1D,aAGVyI,EAAO,SAAU3M,GACnB,IAAIkqC,EACAygD,EAAe,CACjBlpF,KAAM,YACNmH,KAAM6hF,EAASh1E,QAAQ40E,EAAQZ,WAAWzpF,IAC1C8X,QAAS,SAAUhK,GACjB,IAAI6C,EAAS7C,EAAE6C,OACf,GAAI,aAAa3M,KAAK2M,EAAOxM,UAAW,CACtC,IAAIymF,EAAUF,EAAY/5E,GAAQ4G,WAClC,GAAIqzE,GAAWA,EAAQ5rC,aAAa,YAAa,CAC/C,IAAI6rC,EAAiBD,EAAQpzE,aAAa,YACtCiX,EAAW/vB,SAASmsF,EAAgB,IACnC5nC,MAAMx0B,IACTulB,EAAQu1C,WAAWvpF,EAAQke,OAAOssE,aAAa/7D,IAE5C3gB,EAAEwsC,SACLpQ,EAAIxiC,WAKZojF,YAAa,SAAUh9E,GACrB,IAAIi9E,EAAKL,EAAY58E,EAAE6C,QACnBo6E,GAAMA,EAAGxzE,YACX2yB,EAAIj7B,KAAK,YAAY3J,KAAKylF,EAAGxzE,WAAWA,WAAWxS,MACnDmlC,EAAIj7B,KAAK,iBAAiB3J,KAAKylF,EAAGriF,SAElCwhC,EAAIj7B,KAAK,YAAY3J,KAAK,KAC1B4kC,EAAIj7B,KAAK,iBAAiB3J,KAAK,QAIrC4kC,EAAMlqC,EAAOiN,cAAcN,KAAK,CAC9BjE,MAAO,oBACPmY,QAAS,GACTD,QAAS,GACTtB,MAAO,CACLqrE,EACA,CACElpF,KAAM,YACNyL,OAAQ,OACRC,UAAW,SACXC,MAAO,SACPyT,QAAS,EACTjU,SAAU,IACVC,UAAW,IACXyS,MAAO,CACL,CACE7d,KAAM,QACNxD,KAAM,UACNqH,KAAM,IACNkE,MAAO,sCACPqkC,OAAQ,EACRjhC,SAAU,IACVC,UAAW,IAEb,CACEpL,KAAM,SACNoL,UAAW,IAEb,CACEpL,KAAM,QACNxD,KAAM,eACNqH,KAAM,IACNkE,MAAO,yBACPqkC,OAAQ,EACRjhC,SAAU,QAKlB6U,QAAS,CAAC,CACNnc,KAAM,QACNwS,QAAS,WACPoyB,EAAIxiC,cAKVgF,EAAS,CAAEC,KAAMA,GAEjBoB,EAAW,SAAU/N,GACvBA,EAAOgO,WAAW,kBAAkB,WAClCtB,EAAOC,KAAK3M,OAGZoO,EAAW,CAAEL,SAAUA,GAEvBoC,EAAa,SAAUnQ,GACzBA,EAAOoQ,UAAU,UAAW,CAC1BG,KAAM,UACNqD,QAAS,oBACTvD,IAAK,mBAEPrQ,EAAOsQ,YAAY,UAAW,CAC5BC,KAAM,UACNjL,KAAM,oBACN+K,IAAK,iBACLyD,QAAS,YAGTtD,EAAU,CAAEzC,SAAUoC,GAO1B,SAASM,KALThX,EAAOsN,IAAI,WAAW,SAAU/G,GAG9B,OAFAoO,EAASL,SAAS/N,GAClBwQ,EAAQzC,SAAS/N,GACV4oB,EAAItpB,IAAIU,OAjvCP,IADd,I,wBCKE,SAAUvG,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;IAAIG,EACI,oFAAoFC,MAChF,KAERC,EAAc,kDAAkDD,MAAM,KAC1E,SAASmD,EAAOC,GACZ,OAAOA,EAAI,GAAKA,EAAI,EAExB,SAASC,EAAUC,EAAQC,EAAeC,EAAKC,GAC3C,IAAIC,EAASJ,EAAS,IACtB,OAAQE,GACJ,IAAK,IACD,OAAOD,GAAiBE,EAAW,aAAe,gBACtD,IAAK,KACD,OAAIF,GAAiBE,EACVC,GAAUP,EAAOG,GAAU,UAAY,UAEvCI,EAAS,YAExB,IAAK,IACD,OAAOH,EAAgB,SAAWE,EAAW,SAAW,UAC5D,IAAK,KACD,OAAIF,GAAiBE,EACVC,GAAUP,EAAOG,GAAU,SAAW,SAEtCI,EAAS,WAExB,IAAK,IACD,OAAOH,EAAgB,SAAWE,EAAW,SAAW,UAC5D,IAAK,KACD,OAAIF,GAAiBE,EACVC,GAAUP,EAAOG,GAAU,SAAW,SAEtCI,EAAS,WAExB,IAAK,IACD,OAAOH,GAAiBE,EAAW,MAAQ,OAC/C,IAAK,KACD,OAAIF,GAAiBE,EACVC,GAAUP,EAAOG,GAAU,MAAQ,OAEnCI,EAAS,QAExB,IAAK,IACD,OAAOH,GAAiBE,EAAW,SAAW,WAClD,IAAK,KACD,OAAIF,GAAiBE,EACVC,GAAUP,EAAOG,GAAU,UAAY,YAEvCI,EAAS,WAExB,IAAK,IACD,OAAOH,GAAiBE,EAAW,MAAQ,QAC/C,IAAK,KACD,OAAIF,GAAiBE,EACVC,GAAUP,EAAOG,GAAU,OAAS,SAEpCI,EAAS,SAKhC,IAAIstF,EAAKpxF,EAAOE,aAAa,KAAM,CAC/BC,OAAQA,EACRE,YAAaA,EACbC,SAAU,sDAAsDF,MAAM,KACtEG,cAAe,uBAAuBH,MAAM,KAC5CI,YAAa,uBAAuBJ,MAAM,KAC1CK,eAAgB,CACZC,GAAI,OACJC,IAAK,UACLC,EAAG,aACHC,GAAI,eACJC,IAAK,oBACLC,KAAM,0BAEVC,SAAU,CACNC,QAAS,cACTC,QAAS,gBACTC,SAAU,WACN,OAAQpB,KAAKyhB,OACT,KAAK,EACD,MAAO,kBACX,KAAK,EACL,KAAK,EACD,MAAO,kBACX,KAAK,EACD,MAAO,kBACX,KAAK,EACD,MAAO,oBACX,KAAK,EACD,MAAO,kBACX,KAAK,EACD,MAAO,oBAGnBpgB,QAAS,eACTC,SAAU,WACN,OAAQtB,KAAKyhB,OACT,KAAK,EACD,MAAO,uBACX,KAAK,EACL,KAAK,EACD,MAAO,uBACX,KAAK,EACD,MAAO,uBACX,KAAK,EACL,KAAK,EACD,MAAO,uBACX,KAAK,EACD,MAAO,yBAGnBlgB,SAAU,KAEdC,aAAc,CACVC,OAAQ,QACRC,KAAM,UACNC,EAAG+B,EACH9B,GAAI8B,EACJ7B,EAAG6B,EACH5B,GAAI4B,EACJ3B,EAAG2B,EACH1B,GAAI0B,EACJzB,EAAGyB,EACHxB,GAAIwB,EACJvB,EAAGuB,EACHtB,GAAIsB,EACJrB,EAAGqB,EACHpB,GAAIoB,GAERJ,uBAAwB,YACxBC,QAAS,MACThB,KAAM,CACFC,IAAK,EACLC,IAAK,KAIb,OAAO4uF,M,wBCrJT,SAAUvxF,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;IAAIqxF,EAAKrxF,EAAOE,aAAa,KAAM,CAC/BC,OAAQ,0FAA0FC,MAC9F,KAEJC,YAAa,gEAAgED,MAAM,KACnFE,SAAU,uDAAuDF,MAAM,KACvEG,cAAe,sCAAsCH,MAAM,KAC3DI,YAAa,2BAA2BJ,MAAM,KAC9CK,eAAgB,CACZC,GAAI,SACJC,IAAK,YACLC,EAAG,aACHC,GAAI,cACJC,IAAK,qBACLC,KAAM,4BAEVC,SAAU,CACNC,QAAS,gBACTC,QAAS,eACTC,SAAU,8BACVC,QAAS,eACTC,SAAU,6BACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,SACRC,KAAM,WACNC,EAAG,oBACHC,GAAI,WACJC,EAAG,cACHC,GAAI,aACJC,EAAG,cACHC,GAAI,aACJC,EAAG,WACHC,GAAI,UACJC,EAAG,WACHC,GAAI,UACJC,EAAG,YACHC,GAAI,YAERgB,uBAAwB,gBACxBC,QAAS,UACThB,KAAM,CACFC,IAAK,EACLC,IAAK,KAIb,OAAO6uF,M,qBCvDX,EAAQ,S,sBCFN,SAAUxxF,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;SAASif,EAAoBvb,EAAQC,EAAeC,EAAKC,GACrD,IAAIC,EAASJ,EAAS,IACtB,OAAQE,GACJ,IAAK,IACD,OAAOD,GAAiBE,EAClB,eACA,kBACV,IAAK,KAUD,OARIC,GADW,IAAXJ,EACUC,EAAgB,UAAY,UACpB,IAAXD,EACGC,GAAiBE,EAAW,UAAY,WAC3CH,EAAS,EACNC,GAAiBE,EAAW,UAAY,WAExC,SAEPC,EACX,IAAK,IACD,OAAOH,EAAgB,aAAe,aAC1C,IAAK,KAUD,OARIG,GADW,IAAXJ,EACUC,EAAgB,SAAW,SACnB,IAAXD,EACGC,GAAiBE,EAAW,SAAW,WAC1CH,EAAS,EACNC,GAAiBE,EAAW,SAAW,WAEvCF,GAAiBE,EAAW,QAAU,WAE7CC,EACX,IAAK,IACD,OAAOH,EAAgB,UAAY,UACvC,IAAK,KAUD,OARIG,GADW,IAAXJ,EACUC,EAAgB,MAAQ,MAChB,IAAXD,EACGC,GAAiBE,EAAW,MAAQ,QACvCH,EAAS,EACNC,GAAiBE,EAAW,MAAQ,QAEpCF,GAAiBE,EAAW,KAAO,QAE1CC,EACX,IAAK,IACD,OAAOH,GAAiBE,EAAW,SAAW,YAClD,IAAK,KAQD,OANIC,GADW,IAAXJ,EACUC,GAAiBE,EAAW,MAAQ,OAC5B,IAAXH,EACGC,GAAiBE,EAAW,MAAQ,UAEpCF,GAAiBE,EAAW,MAAQ,QAE3CC,EACX,IAAK,IACD,OAAOH,GAAiBE,EAAW,WAAa,eACpD,IAAK,KAUD,OARIC,GADW,IAAXJ,EACUC,GAAiBE,EAAW,QAAU,UAC9B,IAAXH,EACGC,GAAiBE,EAAW,SAAW,WAC1CH,EAAS,EACNC,GAAiBE,EAAW,SAAW,SAEvCF,GAAiBE,EAAW,UAAY,SAE/CC,EACX,IAAK,IACD,OAAOH,GAAiBE,EAAW,WAAa,aACpD,IAAK,KAUD,OARIC,GADW,IAAXJ,EACUC,GAAiBE,EAAW,OAAS,QAC7B,IAAXH,EACGC,GAAiBE,EAAW,OAAS,SACxCH,EAAS,EACNC,GAAiBE,EAAW,OAAS,OAErCF,GAAiBE,EAAW,MAAQ,OAE3CC,GAInB,IAAIwtF,EAAKtxF,EAAOE,aAAa,KAAM,CAC/BC,OAAQ,wFAAwFC,MAC5F,KAEJC,YACI,8DAA8DD,MAC1D,KAERsC,kBAAkB,EAClBpC,SAAU,sDAAsDF,MAAM,KACtEG,cAAe,qCAAqCH,MAAM,KAC1DI,YAAa,uBAAuBJ,MAAM,KAC1Cye,oBAAoB,EACpBpe,eAAgB,CACZC,GAAI,OACJC,IAAK,UACLC,EAAG,eACHC,GAAI,eACJC,IAAK,oBACLC,KAAM,2BAEVC,SAAU,CACNC,QAAS,gBACTC,QAAS,gBAETC,SAAU,WACN,OAAQpB,KAAKyhB,OACT,KAAK,EACD,MAAO,wBACX,KAAK,EACD,MAAO,sBACX,KAAK,EACD,MAAO,uBACX,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACD,MAAO,qBAGnBpgB,QAAS,iBACTC,SAAU,WACN,OAAQtB,KAAKyhB,OACT,KAAK,EACD,MAAO,+BACX,KAAK,EACD,MAAO,6BACX,KAAK,EACD,MAAO,8BACX,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACD,MAAO,4BAGnBlgB,SAAU,KAEdC,aAAc,CACVC,OAAQ,SACRC,KAAM,UACNC,EAAGud,EACHtd,GAAIsd,EACJrd,EAAGqd,EACHpd,GAAIod,EACJnd,EAAGmd,EACHld,GAAIkd,EACJjd,EAAGid,EACHhd,GAAIgd,EACJ/c,EAAG+c,EACH9c,GAAI8c,EACJ7c,EAAG6c,EACH5c,GAAI4c,GAER5b,uBAAwB,YACxBC,QAAS,MACThB,KAAM,CACFC,IAAK,EACLC,IAAK,KAIb,OAAO8uF,M,wBC/KT,SAAUzxF,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;IAAIuxF,EACI,wEAAwEnxF,MACpE,KAERoxF,EAAgB,CACZ,QACA,QACA,SACA,SACA,SACA,SACA,SACAD,EAAY,GACZA,EAAY,GACZA,EAAY,IAEpB,SAAS9tF,EAAUC,EAAQC,EAAeC,EAAKC,GAC3C,IAAIC,EAAS,GACb,OAAQF,GACJ,IAAK,IACD,OAAOC,EAAW,oBAAsB,kBAC5C,IAAK,KACDC,EAASD,EAAW,WAAa,WACjC,MACJ,IAAK,IACD,OAAOA,EAAW,WAAa,WACnC,IAAK,KACDC,EAASD,EAAW,WAAa,YACjC,MACJ,IAAK,IACD,OAAOA,EAAW,SAAW,QACjC,IAAK,KACDC,EAASD,EAAW,SAAW,SAC/B,MACJ,IAAK,IACD,OAAOA,EAAW,SAAW,QACjC,IAAK,KACDC,EAASD,EAAW,SAAW,SAC/B,MACJ,IAAK,IACD,OAAOA,EAAW,YAAc,WACpC,IAAK,KACDC,EAASD,EAAW,YAAc,YAClC,MACJ,IAAK,IACD,OAAOA,EAAW,SAAW,QACjC,IAAK,KACDC,EAASD,EAAW,SAAW,SAC/B,MAGR,OADAC,EAAS2tF,EAAa/tF,EAAQG,GAAY,IAAMC,EACzCA,EAEX,SAAS2tF,EAAa/tF,EAAQG,GAC1B,OAAOH,EAAS,GACVG,EACI2tF,EAAc9tF,GACd6tF,EAAY7tF,GAChBA,EAGV,IAAIguF,EAAK1xF,EAAOE,aAAa,KAAM,CAC/BC,OAAQ,2GAA2GC,MAC/G,KAEJC,YACI,uEAAuED,MACnE,KAERE,SACI,qEAAqEF,MACjE,KAERG,cAAe,uBAAuBH,MAAM,KAC5CI,YAAa,uBAAuBJ,MAAM,KAC1CK,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,mBACJC,IAAK,gCACLC,KAAM,sCACNgE,EAAG,WACHC,GAAI,cACJC,IAAK,2BACLC,KAAM,iCAEVlE,SAAU,CACNC,QAAS,oBACTC,QAAS,sBACTC,SAAU,gBACVC,QAAS,mBACTC,SAAU,4BACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,YACRC,KAAM,YACNC,EAAG+B,EACH9B,GAAI8B,EACJ7B,EAAG6B,EACH5B,GAAI4B,EACJ3B,EAAG2B,EACH1B,GAAI0B,EACJzB,EAAGyB,EACHxB,GAAIwB,EACJvB,EAAGuB,EACHtB,GAAIsB,EACJrB,EAAGqB,EACHpB,GAAIoB,GAERJ,uBAAwB,YACxBC,QAAS,MACThB,KAAM,CACFC,IAAK,EACLC,IAAK,KAIb,OAAOkvF,M,sBChIT,SAAU7xF,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;IAAI+nB,EAAY,CACRtI,EAAG,IACHK,EAAG,IACHI,EAAG,IACHC,EAAG,IACHT,EAAG,IACHW,EAAG,IACHN,EAAG,IACHJ,EAAG,IACHW,EAAG,IACH0H,EAAG,KAEPqN,EAAY,CACR,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,KAGTs8D,EAAO3xF,EAAOE,aAAa,QAAS,CACpCC,OAAQ,6EAA6EC,MACjF,KAEJC,YACI,6EAA6ED,MACzE,KAERE,SAAU,sDAAsDF,MAAM,KACtEG,cAAe,wCAAwCH,MAAM,KAC7DI,YAAa,gBAAgBJ,MAAM,KACnCye,oBAAoB,EACpBpe,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,0BAEV4B,cAAe,MACfwC,KAAM,SAAUP,GACZ,MAAO,MAAQA,GAEnB9B,SAAU,SAAUD,EAAME,EAAQC,GAC9B,OAAIH,EAAO,GACA,IAEA,KAGf7B,SAAU,CACNC,QAAS,wBACTC,QAAS,sBACTC,SAAU,uBACVC,QAAS,sBACTC,SAAU,uBACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,QACRC,KAAM,SACNC,EAAG,OACHC,GAAI,WACJC,EAAG,QACHC,GAAI,WACJC,EAAG,OACHC,GAAI,WACJC,EAAG,MACHC,GAAI,UACJC,EAAG,MACHC,GAAI,UACJC,EAAG,MACHC,GAAI,YAERimB,SAAU,SAAU9Y,GAChB,OAAOA,EACFvH,QAAQ,iBAAiB,SAAUpD,GAChC,OAAOwwB,EAAUxwB,MAEpBoD,QAAQ,KAAM,MAEvBsgB,WAAY,SAAU/Y,GAClB,OAAOA,EACFvH,QAAQ,OAAO,SAAUpD,GACtB,OAAOkjB,EAAUljB,MAEpBoD,QAAQ,KAAM,MAEvB3F,KAAM,CACFC,IAAK,EACLC,IAAK,KAIb,OAAOmvF,M,wBC7GT,SAAU9xF,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;IAAIgvC,EAAKhvC,EAAOE,aAAa,KAAM,CAC/BC,OAAQ,oFAAoFC,MACxF,KAEJC,YAAa,kDAAkDD,MAAM,KACrEE,SAAU,yDAAyDF,MAC/D,KAEJG,cAAe,8BAA8BH,MAAM,KACnDI,YAAa,uBAAuBJ,MAAM,KAC1CK,eAAgB,CACZC,GAAI,OACJC,IAAK,UACLC,EAAG,YACHC,GAAI,cACJC,IAAK,mBACLC,KAAM,0BAEVC,SAAU,CACNC,QAAS,cACTC,QAAS,cACTC,SAAU,cACVC,QAAS,eACTC,SAAU,WACN,OAAQtB,KAAKyhB,OACT,KAAK,EACL,KAAK,EACL,KAAK,EACD,MAAO,yBACX,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACD,MAAO,0BAGnBlgB,SAAU,KAEdC,aAAc,CACVC,OAAQ,UACRC,KAAM,WACNC,EAAG,kBACHC,GAAI,aACJC,EAAG,SACHC,GAAI,YACJC,EAAG,MACHC,GAAI,UACJC,EAAG,MACHC,GAAI,UACJ6E,EAAG,UACHiY,GAAI,aACJ7c,EAAG,QACHC,GAAI,YACJC,EAAG,SACHC,GAAI,aAERgB,uBAAwB,8BACxBC,QAAS,SAAUI,GACf,IAAI8pD,EAAY9pD,EAAS,GACrBu/E,EAAcv/E,EAAS,IAC3B,OAAe,IAAXA,EACOA,EAAS,MACO,IAAhBu/E,EACAv/E,EAAS,MACTu/E,EAAc,IAAMA,EAAc,GAClCv/E,EAAS,MACK,IAAd8pD,EACA9pD,EAAS,MACK,IAAd8pD,EACA9pD,EAAS,MACK,IAAd8pD,GAAiC,IAAdA,EACnB9pD,EAAS,MAETA,EAAS,OAGxBpB,KAAM,CACFC,IAAK,EACLC,IAAK,KAIb,OAAOwsC,M,qBCzFX,EAAQ,S,sBCAN,SAAUnvC,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;IAAI+nB,EAAY,CACRtI,EAAG,IACHK,EAAG,IACHI,EAAG,IACHC,EAAG,IACHT,EAAG,IACHW,EAAG,IACHN,EAAG,IACHJ,EAAG,IACHW,EAAG,IACH0H,EAAG,KAEPqN,EAAY,CACR,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,KAGTu8D,EAAK5xF,EAAOE,aAAa,KAAM,CAC/BC,OAAQ,2FAA2FC,MAC/F,KAEJC,YAAa,mDAAmDD,MAAM,KACtEE,SAAU,wDAAwDF,MAC9D,KAEJG,cAAe,2BAA2BH,MAAM,KAChDI,YAAa,2BAA2BJ,MAAM,KAE9CK,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,0BAEVC,SAAU,CACNC,QAAS,kBACTC,QAAS,sBACTC,SAAU,gBACVC,QAAS,mBACTC,SAAU,6BACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,gBACRC,KAAM,kBACNC,EAAG,kBACHC,GAAI,aACJC,EAAG,WACHC,GAAI,WACJC,EAAG,UACHC,GAAI,UACJC,EAAG,SACHC,GAAI,SACJC,EAAG,OACHC,GAAI,OACJC,EAAG,UACHC,GAAI,WAERimB,SAAU,SAAU9Y,GAChB,OAAOA,EAAOvH,QAAQ,iBAAiB,SAAUpD,GAC7C,OAAOwwB,EAAUxwB,OAGzB0jB,WAAY,SAAU/Y,GAClB,OAAOA,EAAOvH,QAAQ,OAAO,SAAUpD,GACnC,OAAOkjB,EAAUljB,OAGzBvC,KAAM,CACFC,IAAK,EACLC,IAAK,KAIb,OAAOovF,M,sBC/FT,SAAU/xF,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;IAAI6xF,EAAK7xF,EAAOE,aAAa,KAAM,CAC/BC,OAAQ,yFAAyFC,MAC7F,KAEJC,YACI,8DAA8DD,MAC1D,KAERsC,kBAAkB,EAClBpC,SAAU,mDAAmDF,MAAM,KACnEG,cAAe,qCAAqCH,MAAM,KAC1DI,YAAa,uBAAuBJ,MAAM,KAC1Cye,oBAAoB,EACpBpe,eAAgB,CACZC,GAAI,OACJC,IAAK,UACLC,EAAG,aACHC,GAAI,wBACJC,IAAK,6BACLC,KAAM,oCAEVC,SAAU,CACNC,QAAS,WACL,MAAO,UAA6B,IAAjBlB,KAAK+e,QAAgB,KAAO,KAAO,QAE1D5d,QAAS,WACL,MAAO,UAA6B,IAAjBnB,KAAK+e,QAAgB,KAAO,KAAO,QAE1D3d,SAAU,WACN,MAAO,UAA6B,IAAjBpB,KAAK+e,QAAgB,KAAO,KAAO,QAE1D1d,QAAS,WACL,MAAO,UAA6B,IAAjBrB,KAAK+e,QAAgB,IAAM,KAAO,QAEzDzd,SAAU,WACN,MACI,qBAAwC,IAAjBtB,KAAK+e,QAAgB,KAAO,KAAO,QAGlExd,SAAU,KAEdC,aAAc,CACVC,OAAQ,SAAU4K,GACd,OAA0B,IAAtBA,EAAI6B,QAAQ,MACL,IAAM7B,EAEV,MAAQA,GAEnB3K,KAAM,SACNC,EAAG,eACHC,GAAI,cACJC,EAAG,YACHC,GAAI,aACJC,EAAG,YACHC,GAAI,WACJC,EAAG,SACHC,GAAI,UACJC,EAAG,SACHC,GAAI,WACJC,EAAG,SACHC,GAAI,WAERgB,uBAAwB,WACxBC,QAAS,MACThB,KAAM,CACFC,IAAK,EACLC,IAAK,KAIb,OAAOqvF,M,wBC/ET,SAAUhyF,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;IAAIme,EACI,8DAA8D/d,MAC1D,KAERC,EAAc,kDAAkDD,MAAM,KACtEge,EAAc,CACV,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,SAEJC,EACI,mLAEJyzE,EAAK9xF,EAAOE,aAAa,KAAM,CAC/BC,OAAQ,2FAA2FC,MAC/F,KAEJC,YAAa,SAAUuB,EAAGyY,GACtB,OAAKzY,EAEM,QAAQwI,KAAKiQ,GACbha,EAAYuB,EAAE2c,SAEdJ,EAAevc,EAAE2c,SAJjBJ,GAOfE,YAAaA,EACbG,iBAAkBH,EAClBI,kBACI,+FACJC,uBACI,0FACJN,YAAaA,EACbO,gBAAiBP,EACjBQ,iBAAkBR,EAClB9d,SAAU,uDAAuDF,MAAM,KACvEG,cAAe,qCAAqCH,MAAM,KAC1DI,YAAa,uBAAuBJ,MAAM,KAC1Cye,oBAAoB,EACpBpe,eAAgB,CACZC,GAAI,OACJC,IAAK,UACLC,EAAG,aACHC,GAAI,wBACJC,IAAK,6BACLC,KAAM,oCAEVC,SAAU,CACNC,QAAS,WACL,MAAO,aAAgC,IAAjBlB,KAAK+e,QAAgB,IAAM,IAAM,QAE3D5d,QAAS,WACL,MAAO,gBAAmC,IAAjBnB,KAAK+e,QAAgB,IAAM,IAAM,QAE9D3d,SAAU,WACN,MAAO,cAAiC,IAAjBpB,KAAK+e,QAAgB,IAAM,IAAM,QAE5D1d,QAAS,WACL,MAAO,cAAiC,IAAjBrB,KAAK+e,QAAgB,IAAM,IAAM,QAE5Dzd,SAAU,WACN,MACI,0BACkB,IAAjBtB,KAAK+e,QAAgB,IAAM,IAC5B,QAGRxd,SAAU,KAEdC,aAAc,CACVC,OAAQ,QACRC,KAAM,UACNC,EAAG,gBACHC,GAAI,cACJC,EAAG,YACHC,GAAI,aACJC,EAAG,WACHC,GAAI,WACJC,EAAG,SACHC,GAAI,UACJ6E,EAAG,aACHiY,GAAI,aACJ7c,EAAG,SACHC,GAAI,WACJC,EAAG,SACHC,GAAI,WAERgB,uBAAwB,WACxBC,QAAS,MACThB,KAAM,CACFC,IAAK,EACLC,IAAK,GAETuvF,YAAa,mBAGjB,OAAOD,M,oCCtHX,IAAI/7D,EAAS,WAAa,IAAIC,EAAIj2B,KAASk2B,EAAGD,EAAIE,eAAmBC,EAAGH,EAAI5uB,MAAM+uB,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAAC67D,WAAW,CAAC,CAAC3tF,KAAK,OAAO4tF,QAAQ,SAASxsF,MAAOuwB,EAAW,QAAEk8D,WAAW,YAAYC,YAAY,aAAa,CAACh8D,EAAG,MAAM,CAACg8D,YAAY,mBAAmBviF,MAAM,CAAEomB,EAAIo8D,aAAap8D,EAAIq8D,iBAAkBl8D,EAAG,MAAM,CAACg8D,YAAY,mBAAmBviF,MAAM,CAAEomB,EAAIo8D,aAAap8D,EAAIs8D,iBAAkBn8D,EAAG,MAAM,CAACg8D,YAAY,mBAAmBviF,MAAM,CAAEomB,EAAIo8D,aAAap8D,EAAIu8D,oBAC3ch8D,EAAkB,GCStB,GAEElyB,KAAM,cAENuvD,MAAO,CACL4+B,QAAS,CACP3qF,KAAM4qF,QACNC,SAAS,GAEXp4E,MAAO,CACLzS,KAAMyc,OACNouE,QAAS,WAEXxmE,KAAM,CACJrkB,KAAMyc,OACNouE,QAAS,QAEX7uC,OAAQ,CACNh8C,KAAMyc,OACNouE,QAAS,OAEXC,OAAQ,CACN9qF,KAAMyc,OACNouE,QAAS,SAGbvnF,KA1BF,WA2BI,MAAO,CACLinF,aAAc,CACpB,2BACA,gBACQ35D,OAAQ14B,KAAKmsB,KACrB,mBACA,yBACQ0mE,QAAS,eACTC,cAAe,sBACfC,kBAAmB,QACnBC,wBAAyB,WACzBC,wBAAyB,gCACzBC,kBAAmB,QAErBZ,cAAe,CACba,eAAgB,SAElBZ,cAAe,CACbY,eAAgB,SAElBX,cAAe,CACbW,eAAgB,YC1D4P,I,wBCQhR18D,EAAY,eACd,EACAT,EACAQ,GACA,EACA,KACA,KACA,MAIa,OAAAC,E,gCCbf,EAAQ,S,wBCFN,SAAU32B,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;SAASwkB,EAAW5f,GAChB,MACyB,qBAAbkkC,UAA4BlkC,aAAiBkkC,UACX,sBAA1C3gC,OAAOC,UAAUC,SAASC,KAAK1D,GAIvC,IAAIuT,EAAKnY,EAAOE,aAAa,KAAM,CAC/BizF,mBACI,qHAAqH/yF,MACjH,KAERgzF,iBACI,qHAAqHhzF,MACjH,KAERD,OAAQ,SAAUkzF,EAAgBh5E,GAC9B,OAAKg5E,EAGiB,kBAAXh5E,GACP,IAAIjQ,KAAKiQ,EAAO6Q,UAAU,EAAG7Q,EAAOpM,QAAQ,UAGrClO,KAAKuzF,kBAAkBD,EAAe90E,SAEtCxe,KAAKwzF,oBAAoBF,EAAe90E,SARxCxe,KAAKwzF,qBAWpBlzF,YAAa,oDAAoDD,MAAM,KACvEE,SAAU,yDAAyDF,MAC/D,KAEJG,cAAe,8BAA8BH,MAAM,KACnDI,YAAa,uBAAuBJ,MAAM,KAC1C0C,SAAU,SAAUgc,EAAO8B,EAAS5d,GAChC,OAAI8b,EAAQ,GACD9b,EAAU,KAAO,KAEjBA,EAAU,KAAO,MAGhCmC,KAAM,SAAUP,GACZ,MAAyC,OAAjCA,EAAQ,IAAI0lB,cAAc,IAEtC3nB,cAAe,gBACflC,eAAgB,CACZC,GAAI,SACJC,IAAK,YACLC,EAAG,aACHC,GAAI,cACJC,IAAK,qBACLC,KAAM,4BAEVyyF,WAAY,CACRvyF,QAAS,iBACTC,QAAS,gBACTC,SAAU,eACVC,QAAS,eACTC,SAAU,WACN,OAAQtB,KAAKyhB,OACT,KAAK,EACD,MAAO,gCACX,QACI,MAAO,mCAGnBlgB,SAAU,KAEdN,SAAU,SAAU4C,EAAK6vF,GACrB,IAAIvwF,EAASnD,KAAK2zF,YAAY9vF,GAC1Bkb,EAAQ20E,GAAOA,EAAI30E,QAIvB,OAHI0F,EAAWthB,KACXA,EAASA,EAAO+J,MAAMwmF,IAEnBvwF,EAAO+E,QAAQ,KAAM6W,EAAQ,KAAO,EAAI,MAAQ,SAE3Dvd,aAAc,CACVC,OAAQ,QACRC,KAAM,UACNC,EAAG,oBACHC,GAAI,kBACJC,EAAG,YACHC,GAAI,WACJC,EAAG,UACHC,GAAI,UACJC,EAAG,WACHC,GAAI,WACJC,EAAG,aACHC,GAAI,WACJC,EAAG,cACHC,GAAI,aAERgB,uBAAwB,WACxBC,QAAS,MACThB,KAAM,CACFC,IAAK,EACLC,IAAK,KAIb,OAAO2V,M,wBC9GT,SAAUtY,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;IAAI2zF,EACI,mGAAmGvzF,MAC/F,KAERwzF,EACI,qGAAqGxzF,MACjG,KAERge,EAAc,CACV,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,SAER,SAAS7a,EAAOC,GACZ,OAAOA,EAAI,GAAK,GAAKA,EAAI,GAAK,MAAQA,EAAI,IAAM,KAAO,EAE3D,SAASC,EAAUC,EAAQC,EAAeC,GACtC,IAAIE,EAASJ,EAAS,IACtB,OAAQE,GACJ,IAAK,KACD,OAAOE,GAAUP,EAAOG,GAAU,UAAY,UAClD,IAAK,IACD,OAAOC,EAAgB,SAAW,SACtC,IAAK,KACD,OAAOG,GAAUP,EAAOG,GAAU,SAAW,SACjD,IAAK,IACD,OAAOC,EAAgB,UAAY,UACvC,IAAK,KACD,OAAOG,GAAUP,EAAOG,GAAU,UAAY,UAClD,IAAK,KACD,OAAOI,GAAUP,EAAOG,GAAU,WAAa,WACnD,IAAK,KACD,OAAOI,GAAUP,EAAOG,GAAU,WAAa,YACnD,IAAK,KACD,OAAOI,GAAUP,EAAOG,GAAU,OAAS,QAIvD,IAAImwF,EAAK7zF,EAAOE,aAAa,KAAM,CAC/BC,OAAQ,SAAUkzF,EAAgBh5E,GAC9B,OAAKg5E,EAEM,SAASjpF,KAAKiQ,GACdu5E,EAAiBP,EAAe90E,SAEhCo1E,EAAiBN,EAAe90E,SAJhCo1E,GAOftzF,YAAa,kDAAkDD,MAAM,KACrEge,YAAaA,EACbO,gBAAiBP,EACjBQ,iBAAkBR,EAClB9d,SACI,6DAA6DF,MAAM,KACvEG,cAAe,2BAA2BH,MAAM,KAChDI,YAAa,uBAAuBJ,MAAM,KAC1CK,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVC,SAAU,CACNC,QAAS,cACTC,QAAS,eACTC,SAAU,WACN,OAAQpB,KAAKyhB,OACT,KAAK,EACD,MAAO,qBAEX,KAAK,EACD,MAAO,mBAEX,KAAK,EACD,MAAO,iBAEX,KAAK,EACD,MAAO,kBAEX,QACI,MAAO,oBAGnBpgB,QAAS,iBACTC,SAAU,WACN,OAAQtB,KAAKyhB,OACT,KAAK,EACD,MAAO,4BACX,KAAK,EACD,MAAO,wBACX,KAAK,EACD,MAAO,yBACX,QACI,MAAO,2BAGnBlgB,SAAU,KAEdC,aAAc,CACVC,OAAQ,QACRC,KAAM,UACNC,EAAG,eACHC,GAAI8B,EACJ7B,EAAG6B,EACH5B,GAAI4B,EACJ3B,EAAG2B,EACH1B,GAAI0B,EACJzB,EAAG,UACHC,GAAI,SACJ6E,EAAG,UACHiY,GAAItb,EACJvB,EAAG,UACHC,GAAIsB,EACJrB,EAAG,MACHC,GAAIoB,GAERJ,uBAAwB,YACxBC,QAAS,MACThB,KAAM,CACFC,IAAK,EACLC,IAAK,KAIb,OAAOqxF,M,yBChJT,SAAUh0F,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;IAAI+nB,EAAY,CACRtI,EAAG,IACHK,EAAG,IACHI,EAAG,IACHC,EAAG,IACHT,EAAG,IACHW,EAAG,IACHN,EAAG,IACHJ,EAAG,IACHW,EAAG,IACH0H,EAAG,KAEPqN,EAAY,CACR,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,KAGTy+D,EAAK9zF,EAAOE,aAAa,KAAM,CAC/BC,OAAQ,wEAAwEC,MAC5E,KAEJC,YACI,wEAAwED,MACpE,KAERE,SACI,qDAAoEF,MAChE,KAERG,cACI,qDAAoEH,MAChE,KAERI,YAAa,gBAAgBJ,MAAM,KACnCye,oBAAoB,EACpBpe,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEV4B,cAAe,wBACfwC,KAAM,SAAUP,GACZ,MAAO,aAAawF,KAAKxF,IAE7B9B,SAAU,SAAUD,EAAME,EAAQC,GAC9B,OAAIH,EAAO,GACA,aAEA,cAGf7B,SAAU,CACNC,QAAS,kBACTC,QAAS,iBACTC,SAAU,iBACVC,QAAS,kBACTC,SAAU,uBACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,QACRC,KAAM,SACNC,EAAG,YACHC,GAAI,WACJC,EAAG,WACHC,GAAI,WACJC,EAAG,UACHC,GAAI,UACJC,EAAG,SACHC,GAAI,SACJC,EAAG,SACHC,GAAI,SACJC,EAAG,SACHC,GAAI,UAERimB,SAAU,SAAU9Y,GAChB,OAAOA,EACFvH,QAAQ,UAAU,SAAUpD,GACzB,OAAOwwB,EAAUxwB,MAEpBoD,QAAQ,KAAM,MAEvBsgB,WAAY,SAAU/Y,GAClB,OAAOA,EACFvH,QAAQ,OAAO,SAAUpD,GACtB,OAAOkjB,EAAUljB,MAEpBoD,QAAQ,KAAM,MAEvB5E,uBAAwB,WACxBC,QAAS,MACThB,KAAM,CACFC,IAAK,EACLC,IAAK,MAIb,OAAOsxF,M,wBCnHT,SAAUj0F,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;IAAI+nB,EAAY,CACRtI,EAAG,IACHK,EAAG,IACHI,EAAG,IACHC,EAAG,IACHT,EAAG,IACHW,EAAG,IACHN,EAAG,IACHJ,EAAG,IACHW,EAAG,IACH0H,EAAG,KAEPqN,EAAY,CACR,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,KAETpN,EAAa,SAAUzkB,GACnB,OAAa,IAANA,EACD,EACM,IAANA,EACA,EACM,IAANA,EACA,EACAA,EAAI,KAAO,GAAKA,EAAI,KAAO,GAC3B,EACAA,EAAI,KAAO,GACX,EACA,GAEV0kB,EAAU,CACNxmB,EAAG,CACC,eACA,cACA,CAAC,UAAW,WACZ,UACA,WACA,YAEJE,EAAG,CACC,eACA,cACA,CAAC,UAAW,WACZ,WACA,WACA,YAEJE,EAAG,CACC,cACA,aACA,CAAC,SAAU,UACX,WACA,UACA,WAEJE,EAAG,CACC,aACA,WACA,CAAC,QAAS,SACV,UACA,WACA,UAEJE,EAAG,CACC,aACA,WACA,CAAC,QAAS,SACV,UACA,UACA,UAEJE,EAAG,CACC,aACA,WACA,CAAC,QAAS,SACV,WACA,WACA,WAGR+lB,EAAY,SAAUC,GAClB,OAAO,SAAU1kB,EAAQC,EAAe6L,EAAQ3L,GAC5C,IAAIse,EAAI8F,EAAWvkB,GACf0I,EAAM8b,EAAQE,GAAGH,EAAWvkB,IAIhC,OAHU,IAANye,IACA/V,EAAMA,EAAIzI,EAAgB,EAAI,IAE3ByI,EAAInE,QAAQ,MAAOvE,KAGlCvD,EAAS,CACL,QACA,SACA,OACA,QACA,OACA,QACA,QACA,QACA,SACA,SACA,SACA,UAGJ4zF,EAAK/zF,EAAOE,aAAa,KAAM,CAC/BC,OAAQA,EACRE,YAAaF,EACbG,SAAU,sDAAsDF,MAAM,KACtEG,cAAe,wCAAwCH,MAAM,KAC7DI,YAAa,gBAAgBJ,MAAM,KACnCye,oBAAoB,EACpBpe,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,0BAEV4B,cAAe,MACfwC,KAAM,SAAUP,GACZ,MAAO,MAAQA,GAEnB9B,SAAU,SAAUD,EAAME,EAAQC,GAC9B,OAAIH,EAAO,GACA,IAEA,KAGf7B,SAAU,CACNC,QAAS,wBACTC,QAAS,uBACTC,SAAU,uBACVC,QAAS,sBACTC,SAAU,uBACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,SACRC,KAAM,SACNC,EAAGymB,EAAU,KACbxmB,GAAIwmB,EAAU,KACdvmB,EAAGumB,EAAU,KACbtmB,GAAIsmB,EAAU,KACdrmB,EAAGqmB,EAAU,KACbpmB,GAAIomB,EAAU,KACdnmB,EAAGmmB,EAAU,KACblmB,GAAIkmB,EAAU,KACdjmB,EAAGimB,EAAU,KACbhmB,GAAIgmB,EAAU,KACd/lB,EAAG+lB,EAAU,KACb9lB,GAAI8lB,EAAU,MAElBG,SAAU,SAAU9Y,GAChB,OAAOA,EACFvH,QAAQ,iBAAiB,SAAUpD,GAChC,OAAOwwB,EAAUxwB,MAEpBoD,QAAQ,KAAM,MAEvBsgB,WAAY,SAAU/Y,GAClB,OAAOA,EACFvH,QAAQ,OAAO,SAAUpD,GACtB,OAAOkjB,EAAUljB,MAEpBoD,QAAQ,KAAM,MAEvB3F,KAAM,CACFC,IAAK,EACLC,IAAK,MAIb,OAAOuxF,M,wBC/LX,EAAQ,S,sBCFN,SAAUl0F,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;IAAI+nB,EAAY,CACRtI,EAAG,IACHK,EAAG,IACHI,EAAG,IACHC,EAAG,IACHT,EAAG,IACHW,EAAG,IACHN,EAAG,IACHJ,EAAG,IACHW,EAAG,IACH0H,EAAG,KAEPqN,EAAY,CACR,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,KAGT2+D,EAAKh0F,EAAOE,aAAa,KAAM,CAC/BC,OAAQ,0FAA0FC,MAC9F,KAEJC,YACI,mEAAmED,MAC/D,KAERE,SAAU,4DAA4DF,MAClE,KAEJG,cAAe,uCAAuCH,MAAM,KAC5DI,YAAa,kCAAkCJ,MAAM,KACrDK,eAAgB,CACZC,GAAI,aACJC,IAAK,gBACLC,EAAG,aACHC,GAAI,cACJC,IAAK,0BACLC,KAAM,iCAEVC,SAAU,CACNC,QAAS,UACTC,QAAS,gBACTC,SAAU,WACVC,QAAS,aACTC,SAAU,gBACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,SACRC,KAAM,SACNC,EAAG,eACHC,GAAI,aACJC,EAAG,WACHC,GAAI,WACJC,EAAG,WACHC,GAAI,WACJC,EAAG,SACHC,GAAI,SACJC,EAAG,SACHC,GAAI,SACJC,EAAG,SACHC,GAAI,UAERimB,SAAU,SAAU9Y,GAChB,OAAOA,EAAOvH,QAAQ,iBAAiB,SAAUpD,GAC7C,OAAOwwB,EAAUxwB,OAGzB0jB,WAAY,SAAU/Y,GAClB,OAAOA,EAAOvH,QAAQ,OAAO,SAAUpD,GACnC,OAAOkjB,EAAUljB,OAGzBlC,cAAe,2BACfC,aAAc,SAAUC,EAAMC,GAI1B,OAHa,KAATD,IACAA,EAAO,GAGO,QAAbC,GAAsBD,GAAQ,GACjB,UAAbC,GAAwBD,EAAO,GACnB,UAAbC,EAEOD,EAAO,GAEPA,GAGfC,SAAU,SAAUD,EAAME,EAAQC,GAC9B,OAAIH,EAAO,EACA,MACAA,EAAO,GACP,OACAA,EAAO,GACP,QACAA,EAAO,GACP,QAEA,OAGfP,KAAM,CACFC,IAAK,EACLC,IAAK,KAIb,OAAOwxF,M,qBCzHX,EAAQ,S,wBCDN,SAAUn0F,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;IAAIi0F,EAAOj0F,EAAOE,aAAa,QAAS,CACpCC,OAAQ,wCAAwCC,MAC5C,KAEJC,YAAa,yCAAyCD,MAClD,KAEJE,SAAU,8BAA8BF,MAAM,KAC9CG,cAAe,uBAAuBH,MAAM,KAC5CI,YAAa,gBAAgBJ,MAAM,KACnCK,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,YACJC,IAAK,kBACLC,KAAM,sBACNgE,EAAG,WACHC,GAAI,YACJC,IAAK,kBACLC,KAAM,uBAEVvC,cAAe,oBACfC,aAAc,SAAUC,EAAMC,GAI1B,OAHa,KAATD,IACAA,EAAO,GAEM,OAAbC,GAAkC,OAAbA,GAAkC,OAAbA,EACnCD,EACa,OAAbC,EACAD,GAAQ,GAAKA,EAAOA,EAAO,GACd,OAAbC,GAAkC,OAAbA,EACrBD,EAAO,QADX,GAIXC,SAAU,SAAUD,EAAME,EAAQC,GAC9B,IAAIk+C,EAAY,IAAPr+C,EAAaE,EACtB,OAAIm+C,EAAK,IACE,KACAA,EAAK,IACL,KACAA,EAAK,KACL,KACAA,EAAK,KACL,KACAA,EAAK,KACL,KAEA,MAGflgD,SAAU,CACNC,QAAS,UACTC,QAAS,UACTC,SAAU,aACVC,QAAS,UACTC,SAAU,aACVC,SAAU,KAEd+B,uBAAwB,iBACxBC,QAAS,SAAUI,EAAQ2B,GACvB,OAAQA,GACJ,IAAK,IACL,IAAK,IACL,IAAK,MACD,OAAO3B,EAAS,IACpB,IAAK,IACD,OAAOA,EAAS,IACpB,IAAK,IACL,IAAK,IACD,OAAOA,EAAS,IACpB,QACI,OAAOA,IAGnBnC,aAAc,CACVC,OAAQ,MACRC,KAAM,MACNC,EAAG,KACHC,GAAI,OACJC,EAAG,OACHC,GAAI,QACJC,EAAG,OACHC,GAAI,QACJC,EAAG,MACHC,GAAI,OACJC,EAAG,OACHC,GAAI,QACJC,EAAG,MACHC,GAAI,UAIZ,OAAO4xF,M,sBC3GX,YACY,WACR,aAEA,IAAIp0F,EAASiG,QAAQC,KAAKC,MAAMC,QAAQ,yBAEpCC,EAAWJ,QAAQC,KAAKC,MAAMC,QAAQ,wBAEtCiuF,EAAc,SAAU9tF,GAC1B,OAAOA,EAAOW,SAAS,oBAAqB,MAE1CotF,EAAe,SAAU/tF,GAC3B,OAAOA,EAAOW,SAAS,qBAAsBL,KAAKC,IAAIT,EAASU,IAAIC,cAAc/E,EAAI,IAAK,OAExFmF,EAAW,CACbitF,YAAaA,EACbC,aAAcA,GAGZtsC,EAAa,SAAUzhD,EAAQ4I,GACjC5I,EAAOwU,QACPxU,EAAO0L,YAAYC,UAAS,WAC1B3L,EAAOyhD,WAAW74C,MAEpB5I,EAAOuL,UAAUmgB,oBACjB1rB,EAAOyU,eAEL8c,EAAa,SAAUvxB,GACzB,OAAOA,EAAOuxB,WAAW,CAAE3K,aAAa,KAEtConE,EAAU,CACZvsC,WAAYA,EACZlwB,WAAYA,GAGV5kB,EAAO,SAAU3M,GACnB,IAAI4M,EAAW/L,EAASitF,YAAY9tF,GAChC6M,EAAYhM,EAASktF,aAAa/tF,GAClCkqC,EAAMlqC,EAAOiN,cAAcN,KAAK,CAClCjE,MAAO,cACP2E,KAAM,CACJ5L,KAAM,UACNxD,KAAM,OACNwP,WAAW,EACXb,SAAUA,EACVC,UAAWA,EACXxF,YAAY,EACZmC,MAAO,oCAETqE,SAAU,SAAUC,GAClBkgF,EAAQvsC,WAAWzhD,EAAQ8N,EAAE/I,KAAKX,SAGtC8lC,EAAIj7B,KAAK,SAAS5P,MAAM2uF,EAAQz8D,WAAWvxB,KAEzC0M,EAAS,CAAEC,KAAMA,GAEjBoB,EAAW,SAAU/N,GACvBA,EAAOgO,WAAW,iBAAiB,WACjCtB,EAAOC,KAAK3M,OAGZoO,EAAW,CAAEL,SAAUA,GAEvBoC,EAAa,SAAUnQ,GACzBA,EAAOoQ,UAAU,OAAQ,CACvBG,KAAM,OACNqD,QAAS,cACTkE,QAAS,WACPpL,EAAOC,KAAK3M,MAGhBA,EAAOsQ,YAAY,OAAQ,CACzBC,KAAM,OACNjL,KAAM,cACNwS,QAAS,WACPpL,EAAOC,KAAK3M,OAIdwQ,EAAU,CAAEzC,SAAUoC,GAO1B,SAASM,KALThX,EAAOsN,IAAI,QAAQ,SAAU/G,GAG3B,OAFAoO,EAASL,SAAS/N,GAClBwQ,EAAQzC,SAAS/N,GACV,OApFF,IADX,I,wBCME,SAAUvG,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;SAASuD,EAAO+d,EAAMkH,GAClB,IAAIC,EAAQnH,EAAKlhB,MAAM,KACvB,OAAOooB,EAAM,KAAO,GAAKA,EAAM,MAAQ,GACjCC,EAAM,GACND,EAAM,IAAM,GAAKA,EAAM,IAAM,IAAMA,EAAM,IAAM,IAAMA,EAAM,KAAO,IAClEC,EAAM,GACNA,EAAM,GAEhB,SAASC,EAAuBhlB,EAAQC,EAAeC,GACnD,IAAIyW,EAAS,CACT1Y,GAAIgC,EAAgB,yBAA2B,yBAC/C9B,GAAI8B,EAAgB,sBAAwB,sBAC5C5B,GAAI,iBACJE,GAAI,gBACJ8c,GAAI,uBACJ5c,GAAI,uBACJE,GAAI,gBAER,MAAY,MAARuB,EACOD,EAAgB,SAAW,SAE3BD,EAAS,IAAMH,EAAO8W,EAAOzW,IAAOF,GAGnD,IAAI0a,EAAc,CACd,QACA,QACA,QACA,QACA,WACA,QACA,QACA,QACA,QACA,QACA,QACA,SAMAi2E,EAAKr0F,EAAOE,aAAa,KAAM,CAC/BC,OAAQ,CACJka,OAAQ,oFAAoFja,MACxF,KAEJ+e,WACI,kFAAkF/e,MAC9E,MAGZC,YAAa,CAETga,OAAQ,gEAAgEja,MACpE,KAEJ+e,WACI,gEAAgE/e,MAC5D,MAGZE,SAAU,CACN6e,WACI,gEAAgE/e,MAC5D,KAERia,OAAQ,gEAAgEja,MACpE,KAEJgf,SAAU,iDAEd7e,cAAe,uBAAuBH,MAAM,KAC5CI,YAAa,uBAAuBJ,MAAM,KAC1Cge,YAAaA,EACbO,gBAAiBP,EACjBQ,iBAAkBR,EAGlBC,YACI,2MAGJG,iBACI,2MAGJC,kBACI,wHAGJC,uBACI,6FACJje,eAAgB,CACZC,GAAI,OACJC,IAAK,UACLC,EAAG,aACHC,GAAI,iBACJC,IAAK,uBACLC,KAAM,8BAEVC,SAAU,CACNC,QAAS,kBACTC,QAAS,iBACTE,QAAS,gBACTD,SAAU,SAAUiE,GAChB,GAAIA,EAAI9C,SAAWvC,KAAKuC,OAcpB,OAAmB,IAAfvC,KAAKyhB,MACE,oBAEA,mBAhBX,OAAQzhB,KAAKyhB,OACT,KAAK,EACD,MAAO,6BACX,KAAK,EACL,KAAK,EACL,KAAK,EACD,MAAO,6BACX,KAAK,EACL,KAAK,EACL,KAAK,EACD,MAAO,+BAUvBngB,SAAU,SAAU+D,GAChB,GAAIA,EAAI9C,SAAWvC,KAAKuC,OAcpB,OAAmB,IAAfvC,KAAKyhB,MACE,oBAEA,mBAhBX,OAAQzhB,KAAKyhB,OACT,KAAK,EACD,MAAO,2BACX,KAAK,EACL,KAAK,EACL,KAAK,EACD,MAAO,2BACX,KAAK,EACL,KAAK,EACL,KAAK,EACD,MAAO,6BAUvBlgB,SAAU,KAEdC,aAAc,CACVC,OAAQ,WACRC,KAAM,WACNC,EAAG,mBACHC,GAAI+mB,EACJ9mB,EAAG8mB,EACH7mB,GAAI6mB,EACJ5mB,EAAG,MACHC,GAAI2mB,EACJ1mB,EAAG,OACHC,GAAIymB,EACJ5hB,EAAG,SACHiY,GAAI2J,EACJxmB,EAAG,QACHC,GAAIumB,EACJtmB,EAAG,MACHC,GAAIqmB,GAER/lB,cAAe,wBACfwC,KAAM,SAAUP,GACZ,MAAO,iBAAiBwF,KAAKxF,IAEjC9B,SAAU,SAAUD,EAAME,EAAQC,GAC9B,OAAIH,EAAO,EACA,OACAA,EAAO,GACP,OACAA,EAAO,GACP,MAEA,UAGfQ,uBAAwB,mBACxBC,QAAS,SAAUI,EAAQ2B,GACvB,OAAQA,GACJ,IAAK,IACL,IAAK,IACL,IAAK,MACD,OAAO3B,EAAS,KACpB,IAAK,IACD,OAAOA,EAAS,MACpB,IAAK,IACL,IAAK,IACD,OAAOA,EAAS,KACpB,QACI,OAAOA,IAGnBpB,KAAM,CACFC,IAAK,EACLC,IAAK,KAIb,OAAO6xF,M,wBCzNT,SAAUx0F,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;SAASyD,EAAUC,EAAQC,EAAeC,EAAKC,GAC3C,OAAQD,GACJ,IAAK,IACD,OAAOD,EAAgB,gBAAkB,kBAC7C,IAAK,KACD,OAAOD,GAAUC,EAAgB,UAAY,aACjD,IAAK,IACL,IAAK,KACD,OAAOD,GAAUC,EAAgB,SAAW,YAChD,IAAK,IACL,IAAK,KACD,OAAOD,GAAUC,EAAgB,OAAS,WAC9C,IAAK,IACL,IAAK,KACD,OAAOD,GAAUC,EAAgB,QAAU,WAC/C,IAAK,IACL,IAAK,KACD,OAAOD,GAAUC,EAAgB,OAAS,UAC9C,IAAK,IACL,IAAK,KACD,OAAOD,GAAUC,EAAgB,OAAS,WAC9C,QACI,OAAOD,GAInB,IAAI4wF,EAAKt0F,EAAOE,aAAa,KAAM,CAC/BC,OAAQ,+LAA+LC,MACnM,KAEJC,YACI,6EAA6ED,MACzE,KAERsC,kBAAkB,EAClBpC,SAAU,6CAA6CF,MAAM,KAC7DG,cAAe,8BAA8BH,MAAM,KACnDI,YAAa,uBAAuBJ,MAAM,KAC1Cye,oBAAoB,EACpBpe,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,oBACJC,IAAK,0BACLC,KAAM,iCAEV4B,cAAe,SACfwC,KAAM,SAAUP,GACZ,MAAiB,OAAVA,GAEX9B,SAAU,SAAUD,EAAME,EAAQC,GAC9B,OAAIH,EAAO,GACA,KAEA,MAGf7B,SAAU,CACNC,QAAS,eACTC,QAAS,eACTC,SAAU,iBACVC,QAAS,eACTC,SAAU,qBACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,WACRC,KAAM,UACNC,EAAG+B,EACH9B,GAAI8B,EACJ7B,EAAG6B,EACH5B,GAAI4B,EACJ3B,EAAG2B,EACH1B,GAAI0B,EACJzB,EAAGyB,EACHxB,GAAIwB,EACJvB,EAAGuB,EACHtB,GAAIsB,EACJrB,EAAGqB,EACHpB,GAAIoB,GAERJ,uBAAwB,eACxBC,QAAS,SAAUI,EAAQ2B,GACvB,OAAQA,GACJ,IAAK,IACL,IAAK,IACL,IAAK,MACD,OAAO3B,EAAS,QACpB,QACI,OAAOA,MAKvB,OAAO4wF,M,sBCxGT,SAAUz0F,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;IAAIwf,EAAW,CACXwI,EAAG,MACHvI,EAAG,MACHK,EAAG,MACHI,EAAG,MACHC,EAAG,MACHT,EAAG,MACHW,EAAG,MACHN,EAAG,MACHJ,EAAG,MACHW,EAAG,MACHC,GAAI,MACJP,GAAI,MACJQ,GAAI,MACJ6gC,GAAI,MACJphC,GAAI,MACJQ,GAAI,MACJb,GAAI,MACJC,GAAI,MACJa,GAAI,MACJN,IAAK,OAGLm0E,EAAKv0F,EAAOE,aAAa,KAAM,CAC/BC,OAAQ,kFAAkFC,MACtF,KAEJC,YAAa,qDAAqDD,MAC9D,KAEJE,SAAU,2DAA2DF,MACjE,KAEJG,cAAe,8BAA8BH,MAAM,KACnDI,YAAa,uBAAuBJ,MAAM,KAC1CK,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVC,SAAU,CACNC,QAAS,kBACTC,QAAS,kBACTC,SAAU,iBACVC,QAAS,kBACTC,SAAU,wCACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,YACRC,KAAM,WACNC,EAAG,iBACHC,GAAI,YACJC,EAAG,YACHC,GAAI,WACJC,EAAG,WACHC,GAAI,UACJC,EAAG,UACHC,GAAI,SACJC,EAAG,SACHC,GAAI,QACJC,EAAG,UACHC,GAAI,UAERgB,uBAAwB,wBACxBC,QAAS,SAAUI,GACf,IAAImd,EAAInd,EAAS,GACb6b,EAAI7b,GAAU,IAAM,IAAM,KAC9B,OAAOA,GAAU8b,EAAS9b,IAAW8b,EAASqB,IAAMrB,EAASD,KAEjEjd,KAAM,CACFC,IAAK,EACLC,IAAK,KAIb,OAAO+xF,M,sBCxFT,SAAU10F,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;IAAI+nB,EAAY,CACRtI,EAAG,IACHK,EAAG,IACHI,EAAG,IACHC,EAAG,IACHT,EAAG,IACHW,EAAG,IACHN,EAAG,IACHJ,EAAG,IACHW,EAAG,IACH0H,EAAG,KAEPqN,EAAY,CACR,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,KAGTm/D,EAAOx0F,EAAOE,aAAa,QAAS,CACpCC,OAAQ,0FAA0FC,MAC9F,KAEJC,YACI,mEAAmED,MAC/D,KAERE,SAAU,4DAA4DF,MAClE,KAEJG,cAAe,uCAAuCH,MAAM,KAC5DI,YAAa,kCAAkCJ,MAAM,KACrDK,eAAgB,CACZC,GAAI,aACJC,IAAK,gBACLC,EAAG,aACHC,GAAI,cACJC,IAAK,0BACLC,KAAM,iCAEVC,SAAU,CACNC,QAAS,UACTC,QAAS,gBACTC,SAAU,WACVC,QAAS,aACTC,SAAU,gBACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,SACRC,KAAM,SACNC,EAAG,eACHC,GAAI,aACJC,EAAG,WACHC,GAAI,WACJC,EAAG,WACHC,GAAI,WACJC,EAAG,SACHC,GAAI,SACJC,EAAG,SACHC,GAAI,SACJC,EAAG,SACHC,GAAI,UAERimB,SAAU,SAAU9Y,GAChB,OAAOA,EAAOvH,QAAQ,iBAAiB,SAAUpD,GAC7C,OAAOwwB,EAAUxwB,OAGzB0jB,WAAY,SAAU/Y,GAClB,OAAOA,EAAOvH,QAAQ,OAAO,SAAUpD,GACnC,OAAOkjB,EAAUljB,OAIzBlC,cAAe,uCACfC,aAAc,SAAUC,EAAMC,GAI1B,OAHa,KAATD,IACAA,EAAO,GAEM,QAAbC,EACOD,EAAO,EAAIA,EAAOA,EAAO,GACZ,QAAbC,GAEa,SAAbA,EADAD,EAGa,UAAbC,EACAD,GAAQ,EAAIA,EAAOA,EAAO,GACb,UAAbC,GAEa,YAAbA,EADAD,EAAO,QACX,GAKXC,SAAU,SAAUD,EAAME,EAAQC,GAC9B,OAAIH,EAAO,EACA,MACAA,EAAO,EACP,MACAA,EAAO,GACP,OACAA,EAAO,GACP,QACAA,EAAO,GACP,QACAA,EAAO,GACP,UAEA,OAGfP,KAAM,CACFC,IAAK,EACLC,IAAK,KAIb,OAAOgyF,M,wBCnIT,SAAU30F,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;SAAS0oB,EAAuBhlB,EAAQC,EAAeC,GACnD,IAAIyW,EAAS,CACL1Y,GAAI,UACJE,GAAI,SACJE,GAAI,MACJE,GAAI,OACJ8c,GAAI,YACJ5c,GAAI,OACJE,GAAI,OAER+0C,EAAY,IAIhB,OAHI1zC,EAAS,KAAO,IAAOA,GAAU,KAAOA,EAAS,MAAQ,KACzD0zC,EAAY,QAET1zC,EAAS0zC,EAAY/8B,EAAOzW,GAGvC,IAAI6wF,EAAKz0F,EAAOE,aAAa,KAAM,CAC/BC,OAAQ,oGAAoGC,MACxG,KAEJC,YACI,+DAA+DD,MAC3D,KAERsC,kBAAkB,EAClBpC,SAAU,kDAAkDF,MAAM,KAClEG,cAAe,8BAA8BH,MAAM,KACnDI,YAAa,uBAAuBJ,MAAM,KAC1CK,eAAgB,CACZC,GAAI,OACJC,IAAK,UACLC,EAAG,aACHC,GAAI,cACJC,IAAK,mBACLC,KAAM,0BAEVC,SAAU,CACNC,QAAS,cACTC,QAAS,gBACTC,SAAU,eACVC,QAAS,eACTC,SAAU,uBACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,WACRC,KAAM,aACNC,EAAG,iBACHC,GAAI+mB,EACJ9mB,EAAG,WACHC,GAAI6mB,EACJ5mB,EAAG,QACHC,GAAI2mB,EACJ1mB,EAAG,OACHC,GAAIymB,EACJ5hB,EAAG,cACHiY,GAAI2J,EACJxmB,EAAG,SACHC,GAAIumB,EACJtmB,EAAG,QACHC,GAAIqmB,GAERpmB,KAAM,CACFC,IAAK,EACLC,IAAK,KAIb,OAAOiyF,M,sBC/ET,SAAU50F,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;IAAIskC,EAAKtkC,EAAOE,aAAa,KAAM,CAC/BC,OAAQ,yFAAyFC,MAC7F,KAEJC,YAAa,qDAAqDD,MAC9D,KAEJE,SACI,+EAA+EF,MAC3E,KAERG,cAAe,+BAA+BH,MAAM,KACpDI,YAAa,uBAAuBJ,MAAM,KAC1Cye,oBAAoB,EAEpBpe,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVC,SAAU,CACNC,QAAS,iBACTC,QAAS,gBACTC,SAAU,eACVC,QAAS,eACTC,SAAU,wBACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,UACRC,KAAM,WACNC,EAAG,mBACHC,GAAI,YACJC,EAAG,QACHC,GAAI,WACJC,EAAG,MACHC,GAAI,SACJC,EAAG,UACHC,GAAI,aACJC,EAAG,MACHC,GAAI,SACJC,EAAG,WACHC,GAAI,cAERgB,uBAAwB,mCAExBC,QAAS,SAAUI,GACf,IAAI6b,EAAI7b,EACJR,EAAS,GACT+hC,EAAS,CACL,GACA,KACA,KACA,MACA,MACA,KACA,KACA,KACA,MACA,MACA,MACA,KACA,MACA,KACA,KACA,MACA,KACA,KACA,MACA,KACA,OAWR,OATI1lB,EAAI,GAEArc,EADM,KAANqc,GAAkB,KAANA,GAAkB,KAANA,GAAkB,KAANA,GAAkB,MAANA,EACvC,MAEA,MAENA,EAAI,IACXrc,EAAS+hC,EAAO1lB,IAEb7b,EAASR,GAEpBZ,KAAM,CACFC,IAAK,EACLC,IAAK,KAIb,OAAO8hC,M,uBC1GXyjC,EAAOC,QACE,SAAU0sB,GAET,IAAIC,EAAmB,GAGvB,SAAS7sB,EAAoB8sB,GAG5B,GAAGD,EAAiBC,GACnB,OAAOD,EAAiBC,GAAU5sB,QAGnC,IAAID,EAAS4sB,EAAiBC,GAAY,CACzCnrF,EAAGmrF,EACH7vF,GAAG,EACHijE,QAAS,IAUV,OANA0sB,EAAQE,GAAUtsF,KAAKy/D,EAAOC,QAASD,EAAQA,EAAOC,QAASF,GAG/DC,EAAOhjE,GAAI,EAGJgjE,EAAOC,QA0Df,OArDAF,EAAoBlmE,EAAI8yF,EAGxB5sB,EAAoB13D,EAAIukF,EAGxB7sB,EAAoB9lE,EAAI,SAASgmE,EAAS3jE,EAAMwwF,GAC3C/sB,EAAoB5/D,EAAE8/D,EAAS3jE,IAClC8D,OAAO2sF,eAAe9sB,EAAS3jE,EAAM,CAAE0wF,YAAY,EAAMrvF,IAAKmvF,KAKhE/sB,EAAoBhjD,EAAI,SAASkjD,GACX,qBAAXgtB,QAA0BA,OAAOC,aAC1C9sF,OAAO2sF,eAAe9sB,EAASgtB,OAAOC,YAAa,CAAExvF,MAAO,WAE7D0C,OAAO2sF,eAAe9sB,EAAS,aAAc,CAAEviE,OAAO,KAQvDqiE,EAAoB32D,EAAI,SAAS1L,EAAOyvF,GAEvC,GADU,EAAPA,IAAUzvF,EAAQqiE,EAAoBriE,IAC/B,EAAPyvF,EAAU,OAAOzvF,EACpB,GAAW,EAAPyvF,GAA8B,kBAAVzvF,GAAsBA,GAASA,EAAM0vF,WAAY,OAAO1vF,EAChF,IAAI2vF,EAAKjtF,OAAO8N,OAAO,MAGvB,GAFA6xD,EAAoBhjD,EAAEswE,GACtBjtF,OAAO2sF,eAAeM,EAAI,UAAW,CAAEL,YAAY,EAAMtvF,MAAOA,IACtD,EAAPyvF,GAA4B,iBAATzvF,EAAmB,IAAI,IAAI7B,KAAO6B,EAAOqiE,EAAoB9lE,EAAEozF,EAAIxxF,EAAK,SAASA,GAAO,OAAO6B,EAAM7B,IAAQ4f,KAAK,KAAM5f,IAC9I,OAAOwxF,GAIRttB,EAAoBtkE,EAAI,SAASukE,GAChC,IAAI8sB,EAAS9sB,GAAUA,EAAOotB,WAC7B,WAAwB,OAAOptB,EAAO,YACtC,WAA8B,OAAOA,GAEtC,OADAD,EAAoB9lE,EAAE6yF,EAAQ,IAAKA,GAC5BA,GAIR/sB,EAAoB5/D,EAAI,SAASmtF,EAAQ5lF,GAAY,OAAOtH,OAAOC,UAAUG,eAAeD,KAAK+sF,EAAQ5lF,IAGzGq4D,EAAoB5+B,EAAI,GAIjB4+B,EAAoBA,EAAoBpmE,EAAI,QAnFpD,CAsFC,CAEJ,OACA,SAAUqmE,EAAQC,EAASF,GAEjC,IAAIwtB,EAAkBxtB,EAAoB,QAEtCytB,EAAgBD,EAAgB,eAChClrF,EAAO,GAEXA,EAAKmrF,GAAiB,IAEtBxtB,EAAOC,QAA2B,eAAjB1jD,OAAOla,IAKlB,OACA,SAAU29D,EAAQC,EAASF,GAEjC,IAAI0tB,EAAY1tB,EAAoB,QAGpCC,EAAOC,QAAU,SAAUnmD,EAAI4zE,EAAMtsF,GAEnC,GADAqsF,EAAU3zE,QACGwB,IAAToyE,EAAoB,OAAO5zE,EAC/B,OAAQ1Y,GACN,KAAK,EAAG,OAAO,WACb,OAAO0Y,EAAGvZ,KAAKmtF,IAEjB,KAAK,EAAG,OAAO,SAAU50E,GACvB,OAAOgB,EAAGvZ,KAAKmtF,EAAM50E,IAEvB,KAAK,EAAG,OAAO,SAAUA,EAAGtB,GAC1B,OAAOsC,EAAGvZ,KAAKmtF,EAAM50E,EAAGtB,IAE1B,KAAK,EAAG,OAAO,SAAUsB,EAAGtB,EAAGnP,GAC7B,OAAOyR,EAAGvZ,KAAKmtF,EAAM50E,EAAGtB,EAAGnP,IAG/B,OAAO,WACL,OAAOyR,EAAG5U,MAAMwoF,EAAMvsF,cAOpB,OACA,SAAU6+D,EAAQC,EAASF,GAEjC,IAAI4tB,EAAkB5tB,EAAoB,QACtC6tB,EAA4B7tB,EAAoB,QAAQ3lD,EAExD9Z,EAAW,GAAGA,SAEdutF,EAA+B,iBAAV1uF,QAAsBA,QAAUiB,OAAO0tF,oBAC5D1tF,OAAO0tF,oBAAoB3uF,QAAU,GAErC4uF,EAAiB,SAAU5M,GAC7B,IACE,OAAOyM,EAA0BzM,GACjC,MAAO9sD,GACP,OAAOw5D,EAAYppF,UAKvBu7D,EAAOC,QAAQ7lD,EAAI,SAA6B+mE,GAC9C,OAAO0M,GAAoC,mBAArBvtF,EAASC,KAAK4gF,GAChC4M,EAAe5M,GACfyM,EAA0BD,EAAgBxM,MAM1C,OACA,SAAUnhB,EAAQC,EAASF,GAEjC,IAAIiuB,EAAcjuB,EAAoB,QAClCkuB,EAA6BluB,EAAoB,QACjDmuB,EAA2BnuB,EAAoB,QAC/C4tB,EAAkB5tB,EAAoB,QACtCouB,EAAcpuB,EAAoB,QAClC75C,EAAM65C,EAAoB,QAC1BquB,EAAiBruB,EAAoB,QAErCsuB,EAAiCjuF,OAAOkuF,yBAI5CruB,EAAQ7lD,EAAI4zE,EAAcK,EAAiC,SAAkCE,EAAGC,GAG9F,GAFAD,EAAIZ,EAAgBY,GACpBC,EAAIL,EAAYK,GAAG,GACfJ,EAAgB,IAClB,OAAOC,EAA+BE,EAAGC,GACzC,MAAOn6D,IACT,GAAInO,EAAIqoE,EAAGC,GAAI,OAAON,GAA0BD,EAA2B7zE,EAAE7Z,KAAKguF,EAAGC,GAAID,EAAEC,MAMvF,OACA,SAAUxuB,EAAQC,EAASF,GAEjC,IAAIiuB,EAAcjuB,EAAoB,QAClC0uB,EAAQ1uB,EAAoB,QAC5BlvC,EAAgBkvC,EAAoB,QAGxCC,EAAOC,SAAW+tB,IAAgBS,GAAM,WACtC,OAEQ,GAFDruF,OAAO2sF,eAAel8D,EAAc,OAAQ,IAAK,CACtDlzB,IAAK,WAAc,OAAO,KACzBmb,MAMC,KACA,SAAUknD,EAAQC,EAASF,GAEjC,aAEA,IAAI2uB,EAAgC3uB,EAAoB,QACpD4uB,EAAW5uB,EAAoB,QAC/B6uB,EAAW7uB,EAAoB,QAC/B8uB,EAAyB9uB,EAAoB,QAC7C+uB,EAAqB/uB,EAAoB,QACzCgvB,EAAqBhvB,EAAoB,QACzCivB,EAAWjvB,EAAoB,QAC/BkvB,EAAiBlvB,EAAoB,QACrCmvB,EAAanvB,EAAoB,QACjC0uB,EAAQ1uB,EAAoB,QAE5BovB,EAAY,GAAGrqF,KACflG,EAAMD,KAAKC,IACXwwF,EAAa,WAGbC,GAAcZ,GAAM,WAAc,OAAQx5C,OAAOm6C,EAAY,QAGjEV,EAA8B,QAAS,GAAG,SAAUY,EAAOC,EAAaC,GACtE,IAAIC,EAmDJ,OAzCEA,EAR2B,KAA3B,OAAOp3F,MAAM,QAAQ,IACc,GAAnC,OAAOA,MAAM,QAAS,GAAG+I,QACO,GAAhC,KAAK/I,MAAM,WAAW+I,QACU,GAAhC,IAAI/I,MAAM,YAAY+I,QACtB,IAAI/I,MAAM,QAAQ+I,OAAS,GAC3B,GAAG/I,MAAM,MAAM+I,OAGC,SAAUiuC,EAAWqgD,GACnC,IAAIjoF,EAAS8U,OAAOsyE,EAAuB72F,OACvC23F,OAAgBr0E,IAAVo0E,EAAsBN,EAAaM,IAAU,EACvD,GAAY,IAARC,EAAW,MAAO,GACtB,QAAkBr0E,IAAd+zB,EAAyB,MAAO,CAAC5nC,GAErC,IAAKknF,EAASt/C,GACZ,OAAOkgD,EAAYhvF,KAAKkH,EAAQ4nC,EAAWsgD,GAE7C,IAQI7yF,EAAOwH,EAAWsrF,EARlBz0F,EAAS,GACT00F,GAASxgD,EAAUygD,WAAa,IAAM,KAC7BzgD,EAAUvjC,UAAY,IAAM,KAC5BujC,EAAU0gD,QAAU,IAAM,KAC1B1gD,EAAU2gD,OAAS,IAAM,IAClCC,EAAgB,EAEhBC,EAAgB,IAAIj7C,OAAO5F,EAAU8mB,OAAQ05B,EAAQ,KAEzD,MAAO/yF,EAAQoyF,EAAW3uF,KAAK2vF,EAAezoF,GAAS,CAErD,GADAnD,EAAY4rF,EAAc5rF,UACtBA,EAAY2rF,IACd90F,EAAO2J,KAAK2C,EAAOhD,MAAMwrF,EAAenzF,EAAM0H,QAC1C1H,EAAMsE,OAAS,GAAKtE,EAAM0H,MAAQiD,EAAOrG,QAAQ+tF,EAAUjqF,MAAM/J,EAAQ2B,EAAM2H,MAAM,IACzFmrF,EAAa9yF,EAAM,GAAGsE,OACtB6uF,EAAgB3rF,EACZnJ,EAAOiG,QAAUuuF,GAAK,MAExBO,EAAc5rF,YAAcxH,EAAM0H,OAAO0rF,EAAc5rF,YAK7D,OAHI2rF,IAAkBxoF,EAAOrG,QACvBwuF,GAAeM,EAAc7tF,KAAK,KAAKlH,EAAO2J,KAAK,IAClD3J,EAAO2J,KAAK2C,EAAOhD,MAAMwrF,IACzB90F,EAAOiG,OAASuuF,EAAMx0F,EAAOsJ,MAAM,EAAGkrF,GAAOx0F,GAG7C,IAAI9C,WAAMijB,EAAW,GAAGla,OACjB,SAAUiuC,EAAWqgD,GACnC,YAAqBp0E,IAAd+zB,GAAqC,IAAVqgD,EAAc,GAAKH,EAAYhvF,KAAKvI,KAAMq3C,EAAWqgD,IAEpEH,EAEhB,CAGL,SAAelgD,EAAWqgD,GACxB,IAAInB,EAAIM,EAAuB72F,MAC3Bm4F,OAAwB70E,GAAb+zB,OAAyB/zB,EAAY+zB,EAAUigD,GAC9D,YAAoBh0E,IAAb60E,EACHA,EAAS5vF,KAAK8uC,EAAWk/C,EAAGmB,GAC5BD,EAAclvF,KAAKgc,OAAOgyE,GAAIl/C,EAAWqgD,IAO/C,SAAUU,EAAQV,GAChB,IAAIr8D,EAAMm8D,EAAgBC,EAAeW,EAAQp4F,KAAM03F,EAAOD,IAAkBF,GAChF,GAAIl8D,EAAIL,KAAM,OAAOK,EAAI31B,MAEzB,IAAI2yF,EAAKzB,EAASwB,GACdE,EAAI/zE,OAAOvkB,MACXu4F,EAAIzB,EAAmBuB,EAAIp7C,QAE3Bu7C,EAAkBH,EAAGN,QACrBF,GAASQ,EAAGP,WAAa,IAAM,KACtBO,EAAGvkF,UAAY,IAAM,KACrBukF,EAAGN,QAAU,IAAM,KACnBV,EAAa,IAAM,KAI5Bc,EAAW,IAAII,EAAElB,EAAagB,EAAK,OAASA,EAAGl6B,OAAS,IAAK05B,GAC7DF,OAAgBr0E,IAAVo0E,EAAsBN,EAAaM,IAAU,EACvD,GAAY,IAARC,EAAW,MAAO,GACtB,GAAiB,IAAbW,EAAElvF,OAAc,OAAuC,OAAhC6tF,EAAekB,EAAUG,GAAc,CAACA,GAAK,GACxE,IAAInvD,EAAI,EACJsvD,EAAI,EACJC,EAAI,GACR,MAAOD,EAAIH,EAAElvF,OAAQ,CACnB+uF,EAAS7rF,UAAY+qF,EAAaoB,EAAI,EACtC,IACItkF,EADAwkF,EAAI1B,EAAekB,EAAUd,EAAaiB,EAAIA,EAAE7rF,MAAMgsF,IAE1D,GACQ,OAANE,IACCxkF,EAAIvN,EAAIowF,EAASmB,EAAS7rF,WAAa+qF,EAAa,EAAIoB,IAAKH,EAAElvF,WAAa+/B,EAE7EsvD,EAAI1B,EAAmBuB,EAAGG,EAAGD,OACxB,CAEL,GADAE,EAAE5rF,KAAKwrF,EAAE7rF,MAAM08B,EAAGsvD,IACdC,EAAEtvF,SAAWuuF,EAAK,OAAOe,EAC7B,IAAK,IAAIhvF,EAAI,EAAGA,GAAKivF,EAAEvvF,OAAS,EAAGM,IAEjC,GADAgvF,EAAE5rF,KAAK6rF,EAAEjvF,IACLgvF,EAAEtvF,SAAWuuF,EAAK,OAAOe,EAE/BD,EAAItvD,EAAIh1B,GAIZ,OADAukF,EAAE5rF,KAAKwrF,EAAE7rF,MAAM08B,IACRuvD,OAGTrB,IAKE,OACA,SAAUrvB,EAAQC,EAASF,GAEjC,IAAI6wB,EAAU7wB,EAAoB,QAC9BmvB,EAAanvB,EAAoB,QAIrCC,EAAOC,QAAU,SAAU4wB,EAAGP,GAC5B,IAAIj1F,EAAOw1F,EAAEx1F,KACb,GAAoB,oBAATA,EAAqB,CAC9B,IAAIU,EAASV,EAAKkF,KAAKswF,EAAGP,GAC1B,GAAsB,kBAAXv0F,EACT,MAAM41B,UAAU,sEAElB,OAAO51B,EAGT,GAAmB,WAAf60F,EAAQC,GACV,MAAMl/D,UAAU,+CAGlB,OAAOu9D,EAAW3uF,KAAKswF,EAAGP,KAOtB,OACA,SAAUtwB,EAAQC,EAASF,GAEjC,IAAIjoE,EAASioE,EAAoB,QAC7B+wB,EAAe/wB,EAAoB,QACnC91C,EAAU81C,EAAoB,QAC9BgxB,EAA8BhxB,EAAoB,QAEtD,IAAK,IAAIixB,KAAmBF,EAAc,CACxC,IAAIG,EAAan5F,EAAOk5F,GACpBE,EAAsBD,GAAcA,EAAW5wF,UAEnD,GAAI6wF,GAAuBA,EAAoBjnE,UAAYA,EAAS,IAClE8mE,EAA4BG,EAAqB,UAAWjnE,GAC5D,MAAOoK,GACP68D,EAAoBjnE,QAAUA,KAO5B,OACA,SAAU+1C,EAAQC,EAASF,GAEjC,aAEA,IAAIoxB,EAAWpxB,EAAoB,QAAQ91C,QACvCmnE,EAAsBrxB,EAAoB,QAC1CsxB,EAA0BtxB,EAAoB,QAE9CuxB,EAAgBF,EAAoB,WACpCG,EAAiBF,EAAwB,WAI7CrxB,EAAOC,QAAYqxB,GAAkBC,EAEjC,GAAGtnE,QAFgD,SAAiBunE,GACtE,OAAOL,EAASn5F,KAAMw5F,EAAYrwF,UAAUC,OAAS,EAAID,UAAU,QAAKma,KAMpE,OACA,SAAU0kD,EAAQC,EAASF,GAEjC,IAAI0xB,EAAa1xB,EAAoB,QAErCC,EAAOC,QAAUwxB,EAAW,WAAY,oBAKlC,OACA,SAAUzxB,EAAQC,GAExBD,EAAOC,QAAU,SAAUkhB,GACzB,GAAiB,mBAANA,EACT,MAAMxvD,UAAUpV,OAAO4kE,GAAM,sBAC7B,OAAOA,IAML,OACA,SAAUnhB,EAAQC,EAASF,GAEjC,IAAIwtB,EAAkBxtB,EAAoB,QAEtC2xB,EAAWnE,EAAgB,YAC3BoE,GAAe,EAEnB,IACE,IAAItlC,EAAS,EACTulC,EAAqB,CACvB5mE,KAAM,WACJ,MAAO,CAAEgI,OAAQq5B,MAEnB,OAAU,WACRslC,GAAe,IAGnBC,EAAmBF,GAAY,WAC7B,OAAO15F,MAGTgN,MAAMT,KAAKqtF,GAAoB,WAAc,MAAM,KACnD,MAAOv9D,IAET2rC,EAAOC,QAAU,SAAU5kE,EAAMw2F,GAC/B,IAAKA,IAAiBF,EAAc,OAAO,EAC3C,IAAIG,GAAoB,EACxB,IACE,IAAIxE,EAAS,GACbA,EAAOoE,GAAY,WACjB,MAAO,CACL1mE,KAAM,WACJ,MAAO,CAAEgI,KAAM8+D,GAAoB,MAIzCz2F,EAAKiyF,GACL,MAAOj5D,IACT,OAAOy9D,IAMH,OACA,SAAU9xB,EAAQC,GAIxBD,EAAOC,QAAU,SAAUkhB,GACzB,QAAU7lE,GAAN6lE,EAAiB,MAAMxvD,UAAU,wBAA0BwvD,GAC/D,OAAOA,IAMH,OACA,SAAUnhB,EAAQC,EAASF,GAEjC,IAAI0uB,EAAQ1uB,EAAoB,QAC5BwtB,EAAkBxtB,EAAoB,QACtCgyB,EAAahyB,EAAoB,QAEjCiyB,EAAUzE,EAAgB,WAE9BvtB,EAAOC,QAAU,SAAUgyB,GAIzB,OAAOF,GAAc,KAAOtD,GAAM,WAChC,IAAI7jB,EAAQ,GACRtuD,EAAcsuD,EAAMtuD,YAAc,GAItC,OAHAA,EAAY01E,GAAW,WACrB,MAAO,CAAEE,IAAK,IAE2B,IAApCtnB,EAAMqnB,GAAavH,SAASwH,SAOjC,OACA,SAAUlyB,EAAQC,EAASF,GAEjC,IAAIoyB,EAAYpyB,EAAoB,QAEhC90C,EAAMtsB,KAAKssB,IACXrsB,EAAMD,KAAKC,IAKfohE,EAAOC,QAAU,SAAUz7D,EAAOpD,GAChC,IAAIgxF,EAAUD,EAAU3tF,GACxB,OAAO4tF,EAAU,EAAInnE,EAAImnE,EAAUhxF,EAAQ,GAAKxC,EAAIwzF,EAAShxF,KAMzD,OACA,SAAU4+D,EAAQC,EAASF,GAEjC,IAAIjoE,EAASioE,EAAoB,QAC7BuuB,EAA2BvuB,EAAoB,QAAQ3lD,EACvD22E,EAA8BhxB,EAAoB,QAClDsyB,EAAWtyB,EAAoB,QAC/BuyB,EAAYvyB,EAAoB,QAChCwyB,EAA4BxyB,EAAoB,QAChDyyB,EAAWzyB,EAAoB,QAgBnCC,EAAOC,QAAU,SAAUwyB,EAASt8B,GAClC,IAGIu8B,EAAQ1jF,EAAQnT,EAAK82F,EAAgBC,EAAgBC,EAHrDC,EAASL,EAAQzjF,OACjB+jF,EAASN,EAAQ36F,OACjBk7F,EAASP,EAAQQ,KASrB,GANEjkF,EADE+jF,EACOj7F,EACAk7F,EACAl7F,EAAOg7F,IAAWR,EAAUQ,EAAQ,KAEnCh7F,EAAOg7F,IAAW,IAAIzyF,UAE9B2O,EAAQ,IAAKnT,KAAOs6D,EAAQ,CAQ9B,GAPAy8B,EAAiBz8B,EAAOt6D,GACpB42F,EAAQS,aACVL,EAAavE,EAAyBt/E,EAAQnT,GAC9C82F,EAAiBE,GAAcA,EAAWn1F,OACrCi1F,EAAiB3jF,EAAOnT,GAC/B62F,EAASF,EAASO,EAASl3F,EAAMi3F,GAAUE,EAAS,IAAM,KAAOn3F,EAAK42F,EAAQU,SAEzET,QAA6Bp3E,IAAnBq3E,EAA8B,CAC3C,UAAWC,WAA0BD,EAAgB,SACrDJ,EAA0BK,EAAgBD,IAGxCF,EAAQW,MAAST,GAAkBA,EAAeS,OACpDrC,EAA4B6B,EAAgB,QAAQ,GAGtDP,EAASrjF,EAAQnT,EAAK+2F,EAAgBH,MAOpC,OACA,SAAUzyB,EAAQC,EAASF,GAEjC,IAAIszB,EAAqBtzB,EAAoB,QACzCuzB,EAAcvzB,EAAoB,QAElCwzB,EAAaD,EAAYp5E,OAAO,SAAU,aAI9C+lD,EAAQ7lD,EAAIha,OAAO0tF,qBAAuB,SAA6BS,GACrE,OAAO8E,EAAmB9E,EAAGgF,KAMzB,KACA,SAAUvzB,EAAQC,EAASF,GAEjC,aAEA,IAAI11D,EAAI01D,EAAoB,QACxByzB,EAAazzB,EAAoB,QACjC8uB,EAAyB9uB,EAAoB,QAC7C0zB,EAAuB1zB,EAAoB,QAI/C11D,EAAE,CAAE2E,OAAQ,SAAU0kF,OAAO,EAAMP,QAASM,EAAqB,aAAe,CAC9EE,SAAU,SAAkBC,GAC1B,SAAUr3E,OAAOsyE,EAAuB72F,OACrCkO,QAAQstF,EAAWI,GAAezyF,UAAUC,OAAS,EAAID,UAAU,QAAKma,OAOzE,OACA,SAAU0kD,EAAQC,EAASF,GAEjC,aAEA,IAAIsyB,EAAWtyB,EAAoB,QAC/B6uB,EAAW7uB,EAAoB,QAC/B0uB,EAAQ1uB,EAAoB,QAC5B8vB,EAAQ9vB,EAAoB,QAE5B8zB,EAAY,WACZC,EAAkB7+C,OAAO50C,UACzB0zF,EAAiBD,EAAgBD,GAEjCG,EAAcvF,GAAM,WAAc,MAA2D,QAApDsF,EAAexzF,KAAK,CAAE41D,OAAQ,IAAK05B,MAAO,SAEnFoE,EAAiBF,EAAez3F,MAAQu3F,GAIxCG,GAAeC,IACjB5B,EAASp9C,OAAO50C,UAAWwzF,GAAW,WACpC,IAAIhD,EAAIjC,EAAS52F,MACbmpC,EAAI5kB,OAAOs0E,EAAE16B,QACb+9B,EAAKrD,EAAEhB,MACPz1E,EAAImC,YAAcjB,IAAP44E,GAAoBrD,aAAa57C,UAAY,UAAW6+C,GAAmBjE,EAAMtvF,KAAKswF,GAAKqD,GAC1G,MAAO,IAAM/yD,EAAI,IAAM/mB,IACtB,CAAEgnB,QAAQ,KAMT,KACA,SAAU4+B,EAAQC,EAASF,GAEjC,aAEA,IAAI0xB,EAAa1xB,EAAoB,QACjCo0B,EAAuBp0B,EAAoB,QAC3CwtB,EAAkBxtB,EAAoB,QACtCiuB,EAAcjuB,EAAoB,QAElCiyB,EAAUzE,EAAgB,WAE9BvtB,EAAOC,QAAU,SAAUm0B,GACzB,IAAIC,EAAc5C,EAAW2C,GACzBrH,EAAiBoH,EAAqB/5E,EAEtC4zE,GAAeqG,IAAgBA,EAAYrC,IAC7CjF,EAAesH,EAAarC,EAAS,CACnCsC,cAAc,EACd32F,IAAK,WAAc,OAAO3F,UAQ1B,OACA,SAAUgoE,EAAQC,EAASF,GAEjC,IAMIjjE,EAAO0iB,EANP1nB,EAASioE,EAAoB,QAC7BzQ,EAAYyQ,EAAoB,QAEhC0I,EAAU3wE,EAAO2wE,QACjBsC,EAAWtC,GAAWA,EAAQsC,SAC9BwpB,EAAKxpB,GAAYA,EAASwpB,GAG1BA,GACFz3F,EAAQy3F,EAAGl8F,MAAM,KACjBmnB,EAAU1iB,EAAM,GAAKA,EAAM,IAClBwyD,IACTxyD,EAAQwyD,EAAUxyD,MAAM,iBACnBA,GAASA,EAAM,IAAM,MACxBA,EAAQwyD,EAAUxyD,MAAM,iBACpBA,IAAO0iB,EAAU1iB,EAAM,MAI/BkjE,EAAOC,QAAUzgD,IAAYA,GAKvB,OACA,SAAUwgD,EAAQC,EAASF,GAEjC,IAAI0xB,EAAa1xB,EAAoB,QAErCC,EAAOC,QAAUwxB,EAAW,YAAa,cAAgB,IAKnD,OACA,SAAUzxB,EAAQC,EAASF,GAEjC,IAAI6wB,EAAU7wB,EAAoB,QAC9By0B,EAAYz0B,EAAoB,QAChCwtB,EAAkBxtB,EAAoB,QAEtC2xB,EAAWnE,EAAgB,YAE/BvtB,EAAOC,QAAU,SAAUkhB,GACzB,QAAU7lE,GAAN6lE,EAAiB,OAAOA,EAAGuQ,IAC1BvQ,EAAG,eACHqT,EAAU5D,EAAQzP,MAMnB,OACA,SAAUnhB,EAAQC,EAASF,GAEjC,IAAIiuB,EAAcjuB,EAAoB,QAClCo0B,EAAuBp0B,EAAoB,QAC3C6uB,EAAW7uB,EAAoB,QAC/B00B,EAAa10B,EAAoB,QAIrCC,EAAOC,QAAU+tB,EAAc5tF,OAAOs0F,iBAAmB,SAA0BnG,EAAGoG,GACpF/F,EAASL,GACT,IAGI1yF,EAHAgiB,EAAO42E,EAAWE,GAClBvzF,EAASyc,EAAKzc,OACdoD,EAAQ,EAEZ,MAAOpD,EAASoD,EAAO2vF,EAAqB/5E,EAAEm0E,EAAG1yF,EAAMgiB,EAAKrZ,KAAUmwF,EAAW94F,IACjF,OAAO0yF,IAMH,OACA,SAAUvuB,EAAQC,EAASF,GAEjC,IAAI60B,EAAW70B,EAAoB,QAEnCC,EAAOC,QAAU,SAAUkhB,GACzB,IAAKyT,EAASzT,IAAc,OAAPA,EACnB,MAAMxvD,UAAU,aAAepV,OAAO4kE,GAAM,mBAC5C,OAAOA,IAML,OACA,SAAUnhB,EAAQC,EAASF,GAEjC,aAEA,IAAIkY,EAASlY,EAAoB,QAAQkY,OACrC4c,EAAsB90B,EAAoB,QAC1C+0B,EAAiB/0B,EAAoB,QAErCg1B,EAAkB,kBAClBC,EAAmBH,EAAoBj3F,IACvCq3F,EAAmBJ,EAAoBK,UAAUH,GAIrDD,EAAev4E,OAAQ,UAAU,SAAU44E,GACzCH,EAAiBh9F,KAAM,CACrB8H,KAAMi1F,EACNttF,OAAQ8U,OAAO44E,GACf3wF,MAAO,OAIR,WACD,IAGI4wF,EAHAnzD,EAAQgzD,EAAiBj9F,MACzByP,EAASw6B,EAAMx6B,OACfjD,EAAQy9B,EAAMz9B,MAElB,OAAIA,GAASiD,EAAOrG,OAAe,CAAE1D,WAAO4d,EAAW0X,MAAM,IAC7DoiE,EAAQnd,EAAOxwE,EAAQjD,GACvBy9B,EAAMz9B,OAAS4wF,EAAMh0F,OACd,CAAE1D,MAAO03F,EAAOpiE,MAAM,QAMzB,OACA,SAAUgtC,EAAQC,GAExBD,EAAOC,QAAU,IAKX,KACA,SAAUD,EAAQC,EAASF,GAEjC,aAEA,IAAI11D,EAAI01D,EAAoB,QACxB91C,EAAU81C,EAAoB,QAIlC11D,EAAE,CAAE2E,OAAQ,QAAS0kF,OAAO,EAAMP,OAAQ,GAAGlpE,SAAWA,GAAW,CACjEA,QAASA,KAML,OACA,SAAU+1C,EAAQC,EAASF,GAEjC,IAAIjoE,EAASioE,EAAoB,QAEjCC,EAAOC,QAAUnoE,GAKX,OACA,SAAUkoE,EAAQC,EAASF,GAEjC,IAAI0uB,EAAQ1uB,EAAoB,QAC5B6wB,EAAU7wB,EAAoB,QAE9B1nE,EAAQ,GAAGA,MAGf2nE,EAAOC,QAAUwuB,GAAM,WAGrB,OAAQruF,OAAO,KAAKi1F,qBAAqB,MACtC,SAAUlU,GACb,MAAsB,UAAfyP,EAAQzP,GAAkB9oF,EAAMkI,KAAK4gF,EAAI,IAAM/gF,OAAO+gF,IAC3D/gF,QAKE,OACA,SAAU4/D,EAAQC,EAASF,GAEjC,IAAIwtB,EAAkBxtB,EAAoB,QACtC7xD,EAAS6xD,EAAoB,QAC7Bo0B,EAAuBp0B,EAAoB,QAE3Cu1B,EAAc/H,EAAgB,eAC9BgI,EAAiBvwF,MAAM3E,eAIQib,GAA/Bi6E,EAAeD,IACjBnB,EAAqB/5E,EAAEm7E,EAAgBD,EAAa,CAClDhB,cAAc,EACd52F,MAAOwQ,EAAO,QAKlB8xD,EAAOC,QAAU,SAAUpkE,GACzB05F,EAAeD,GAAaz5F,IAAO,IAM/B,OACA,SAAUmkE,EAAQC,EAASF,GAEjC,IAAI60B,EAAW70B,EAAoB,QAC/B6wB,EAAU7wB,EAAoB,QAC9BwtB,EAAkBxtB,EAAoB,QAEtCy1B,EAAQjI,EAAgB,SAI5BvtB,EAAOC,QAAU,SAAUkhB,GACzB,IAAIwN,EACJ,OAAOiG,EAASzT,UAAmC7lE,KAA1BqzE,EAAWxN,EAAGqU,MAA0B7G,EAA0B,UAAfiC,EAAQzP,MAMhF,OACA,SAAUnhB,EAAQC,EAASF,GAEjC,aAEA,IAAI11D,EAAI01D,EAAoB,QACxB01B,EAAQ11B,EAAoB,QAAQ/jD,KACpCo1E,EAAsBrxB,EAAoB,QAC1CsxB,EAA0BtxB,EAAoB,QAE9CuxB,EAAgBF,EAAoB,QACpCG,EAAiBF,EAAwB,QAI7ChnF,EAAE,CAAE2E,OAAQ,QAAS0kF,OAAO,EAAMP,QAAS7B,IAAkBC,GAAkB,CAC7Ev1E,KAAM,SAAcw1E,GAClB,OAAOiE,EAAMz9F,KAAMw5F,EAAYrwF,UAAUC,OAAS,EAAID,UAAU,QAAKma,OAOnE,OACA,SAAU0kD,EAAQC,EAASF,GAEjC,aAEA,IAAI2uB,EAAgC3uB,EAAoB,QACpD6uB,EAAW7uB,EAAoB,QAC/BivB,EAAWjvB,EAAoB,QAC/B8uB,EAAyB9uB,EAAoB,QAC7CgvB,EAAqBhvB,EAAoB,QACzC21B,EAAa31B,EAAoB,QAGrC2uB,EAA8B,QAAS,GAAG,SAAU8G,EAAOG,EAAanG,GACtE,MAAO,CAGL,SAAeY,GACb,IAAI7B,EAAIM,EAAuB72F,MAC3B49F,OAAoBt6E,GAAV80E,OAAsB90E,EAAY80E,EAAOoF,GACvD,YAAmBl6E,IAAZs6E,EAAwBA,EAAQr1F,KAAK6vF,EAAQ7B,GAAK,IAAIt5C,OAAOm7C,GAAQoF,GAAOj5E,OAAOgyE,KAI5F,SAAU6B,GACR,IAAI/8D,EAAMm8D,EAAgBmG,EAAavF,EAAQp4F,MAC/C,GAAIq7B,EAAIL,KAAM,OAAOK,EAAI31B,MAEzB,IAAI2yF,EAAKzB,EAASwB,GACdE,EAAI/zE,OAAOvkB,MAEf,IAAKq4F,EAAGv4F,OAAQ,OAAO49F,EAAWrF,EAAIC,GAEtC,IAAIuF,EAAcxF,EAAGN,QACrBM,EAAG/rF,UAAY,EACf,IAEIvI,EAFA20F,EAAI,GACJj1F,EAAI,EAER,MAAwC,QAAhCM,EAAS25F,EAAWrF,EAAIC,IAAc,CAC5C,IAAIwF,EAAWv5E,OAAOxgB,EAAO,IAC7B20F,EAAEj1F,GAAKq6F,EACU,KAAbA,IAAiBzF,EAAG/rF,UAAYyqF,EAAmBuB,EAAGtB,EAASqB,EAAG/rF,WAAYuxF,IAClFp6F,IAEF,OAAa,IAANA,EAAU,KAAOi1F,QAQxB,KACA,SAAU1wB,EAAQC,EAASF,GAEjC,IAAI6uB,EAAW7uB,EAAoB,QAC/B0tB,EAAY1tB,EAAoB,QAChCwtB,EAAkBxtB,EAAoB,QAEtCiyB,EAAUzE,EAAgB,WAI9BvtB,EAAOC,QAAU,SAAUsuB,EAAGwH,GAC5B,IACIzF,EADAC,EAAI3B,EAASL,GAAGjyE,YAEpB,YAAahB,IAANi1E,QAAiDj1E,IAA7Bg1E,EAAI1B,EAAS2B,GAAGyB,IAAyB+D,EAAqBtI,EAAU6C,KAM/F,KACA,SAAUtwB,EAAQC,EAASF,GAEjC,IAAI0uB,EAAQ1uB,EAAoB,QAEhCC,EAAOC,UAAY7/D,OAAO41F,wBAA0BvH,GAAM,WAGxD,OAAQlyE,OAAO0wE,cAMX,OACA,SAAUjtB,EAAQC,EAASF,GAEjC,aAEA,IAAI11D,EAAI01D,EAAoB,QACxBk2B,EAAQl2B,EAAoB,QAAQ9yD,KACpCipF,EAAyBn2B,EAAoB,QAIjD11D,EAAE,CAAE2E,OAAQ,SAAU0kF,OAAO,EAAMP,OAAQ+C,EAAuB,SAAW,CAC3EjpF,KAAM,WACJ,OAAOgpF,EAAMj+F,UAOX,OACA,SAAUgoE,EAAQC,EAASF,GAEjC,IAAIiuB,EAAcjuB,EAAoB,QAClCjoE,EAASioE,EAAoB,QAC7ByyB,EAAWzyB,EAAoB,QAC/Bo2B,EAAoBp2B,EAAoB,QACxCgtB,EAAiBhtB,EAAoB,QAAQ3lD,EAC7C0zE,EAAsB/tB,EAAoB,QAAQ3lD,EAClDu0E,EAAW5uB,EAAoB,QAC/Bq2B,EAAWr2B,EAAoB,QAC/Bs2B,EAAgBt2B,EAAoB,QACpCsyB,EAAWtyB,EAAoB,QAC/B0uB,EAAQ1uB,EAAoB,QAC5Bi1B,EAAmBj1B,EAAoB,QAAQniE,IAC/C04F,EAAav2B,EAAoB,QACjCwtB,EAAkBxtB,EAAoB,QAEtCy1B,EAAQjI,EAAgB,SACxBgJ,EAAez+F,EAAOm9C,OACtB6+C,EAAkByC,EAAal2F,UAC/Bm2F,EAAM,KACNC,EAAM,KAGNC,EAAc,IAAIH,EAAaC,KAASA,EAExCG,EAAgBN,EAAcM,cAE9BjE,EAAS1E,GAAewE,EAAS,UAAYkE,GAAeC,GAAiBlI,GAAM,WAGrF,OAFAgI,EAAIjB,IAAS,EAENe,EAAaC,IAAQA,GAAOD,EAAaE,IAAQA,GAAiC,QAA1BF,EAAaC,EAAK,SAKnF,GAAI9D,EAAQ,CACV,IAAIkE,EAAgB,SAAgB1yF,EAAS2rF,GAC3C,IAGIG,EAHA6G,EAAe7+F,gBAAgB4+F,EAC/BE,EAAkBnI,EAASzqF,GAC3B6yF,OAA8Bz7E,IAAVu0E,EAGxB,IAAKgH,GAAgBC,GAAmB5yF,EAAQoY,cAAgBs6E,GAAiBG,EAC/E,OAAO7yF,EAGLwyF,EACEI,IAAoBC,IAAmB7yF,EAAUA,EAAQiyD,QACpDjyD,aAAmB0yF,IACxBG,IAAmBlH,EAAQuG,EAAS71F,KAAK2D,IAC7CA,EAAUA,EAAQiyD,QAGhBwgC,IACF3G,IAAWH,GAASA,EAAM3pF,QAAQ,MAAQ,EACtC8pF,IAAQH,EAAQA,EAAM3vF,QAAQ,KAAM,MAG1C,IAAInE,EAASo6F,EACXO,EAAc,IAAIH,EAAaryF,EAAS2rF,GAAS0G,EAAaryF,EAAS2rF,GACvEgH,EAAe7+F,KAAO87F,EACtB8C,GAKF,OAFID,GAAiB3G,GAAQgF,EAAiBj5F,EAAQ,CAAEi0F,OAAQA,IAEzDj0F,GAELi7F,EAAQ,SAAUn7F,GACpBA,KAAO+6F,GAAiB7J,EAAe6J,EAAe/6F,EAAK,CACzDy4F,cAAc,EACd32F,IAAK,WAAc,OAAO44F,EAAa16F,IACvC+B,IAAK,SAAUujF,GAAMoV,EAAa16F,GAAOslF,MAGzCtjE,EAAOiwE,EAAoByI,GAC3B/xF,EAAQ,EACZ,MAAOqZ,EAAKzc,OAASoD,EAAOwyF,EAAMn5E,EAAKrZ,MACvCsvF,EAAgBx3E,YAAcs6E,EAC9BA,EAAcv2F,UAAYyzF,EAC1BzB,EAASv6F,EAAQ,SAAU8+F,GAI7BN,EAAW,WAKL,OACA,SAAUt2B,EAAQC,EAASF,GAEjC,IAAI4tB,EAAkB5tB,EAAoB,QACtCivB,EAAWjvB,EAAoB,QAC/Bk3B,EAAkBl3B,EAAoB,QAGtCm3B,EAAe,SAAUC,GAC3B,OAAO,SAAUC,EAAOhnF,EAAIinF,GAC1B,IAGI35F,EAHA6wF,EAAIZ,EAAgByJ,GACpBh2F,EAAS4tF,EAAST,EAAEntF,QACpBoD,EAAQyyF,EAAgBI,EAAWj2F,GAIvC,GAAI+1F,GAAe/mF,GAAMA,GAAI,MAAOhP,EAASoD,EAG3C,GAFA9G,EAAQ6wF,EAAE/pF,KAEN9G,GAASA,EAAO,OAAO,OAEtB,KAAM0D,EAASoD,EAAOA,IAC3B,IAAK2yF,GAAe3yF,KAAS+pF,IAAMA,EAAE/pF,KAAW4L,EAAI,OAAO+mF,GAAe3yF,GAAS,EACnF,OAAQ2yF,IAAgB,IAI9Bn3B,EAAOC,QAAU,CAGf0zB,SAAUuD,GAAa,GAGvBhxF,QAASgxF,GAAa,KAMlB,OACA,SAAUl3B,EAAQC,EAASF,GAEjC,aAEA,IAAI11D,EAAI01D,EAAoB,QACxBu3B,EAAUv3B,EAAoB,QAAQnzD,OACtC2qF,EAA+Bx3B,EAAoB,QACnDsxB,EAA0BtxB,EAAoB,QAE9Cy3B,EAAsBD,EAA6B,UAEnDhG,EAAiBF,EAAwB,UAK7ChnF,EAAE,CAAE2E,OAAQ,QAAS0kF,OAAO,EAAMP,QAASqE,IAAwBjG,GAAkB,CACnF3kF,OAAQ,SAAgB4kF,GACtB,OAAO8F,EAAQt/F,KAAMw5F,EAAYrwF,UAAUC,OAAS,EAAID,UAAU,QAAKma,OAOrE,OACA,SAAU0kD,EAAQC,EAASF,GAEjC,aAEA,IAAItkD,EAAOskD,EAAoB,QAC3B03B,EAAW13B,EAAoB,QAC/B23B,EAA+B33B,EAAoB,QACnD43B,EAAwB53B,EAAoB,QAC5CivB,EAAWjvB,EAAoB,QAC/B63B,EAAiB73B,EAAoB,QACrC83B,EAAoB93B,EAAoB,QAI5CC,EAAOC,QAAU,SAAc63B,GAC7B,IAOI12F,EAAQrF,EAAQg8F,EAAMC,EAAUhtE,EAAMttB,EAPtC6wF,EAAIkJ,EAASK,GACbvH,EAAmB,mBAARv4F,KAAqBA,KAAOgN,MACvCizF,EAAkB92F,UAAUC,OAC5B82F,EAAQD,EAAkB,EAAI92F,UAAU,QAAKma,EAC7C68E,OAAoB78E,IAAV48E,EACVE,EAAiBP,EAAkBtJ,GACnC/pF,EAAQ,EAIZ,GAFI2zF,IAASD,EAAQz8E,EAAKy8E,EAAOD,EAAkB,EAAI92F,UAAU,QAAKma,EAAW,SAE3DA,GAAlB88E,GAAiC7H,GAAKvrF,OAAS2yF,EAAsBS,GAWvE,IAFAh3F,EAAS4tF,EAAST,EAAEntF,QACpBrF,EAAS,IAAIw0F,EAAEnvF,GACTA,EAASoD,EAAOA,IACpB9G,EAAQy6F,EAAUD,EAAM3J,EAAE/pF,GAAQA,GAAS+pF,EAAE/pF,GAC7CozF,EAAe77F,EAAQyI,EAAO9G,QAThC,IAHAs6F,EAAWI,EAAe73F,KAAKguF,GAC/BvjE,EAAOgtE,EAAShtE,KAChBjvB,EAAS,IAAIw0F,IACLwH,EAAO/sE,EAAKzqB,KAAKy3F,IAAWhlE,KAAMxuB,IACxC9G,EAAQy6F,EAAUT,EAA6BM,EAAUE,EAAO,CAACH,EAAKr6F,MAAO8G,IAAQ,GAAQuzF,EAAKr6F,MAClGk6F,EAAe77F,EAAQyI,EAAO9G,GAWlC,OADA3B,EAAOqF,OAASoD,EACTzI,IAMH,OACA,SAAUikE,EAAQC,EAASF,GAEjC,IAAIoyB,EAAYpyB,EAAoB,QAEhCnhE,EAAMD,KAAKC,IAIfohE,EAAOC,QAAU,SAAUo4B,GACzB,OAAOA,EAAW,EAAIz5F,EAAIuzF,EAAUkG,GAAW,kBAAoB,IAM/D,KACA,SAAUr4B,EAAQC,GAExB,IAAIz/D,EAAiB,GAAGA,eAExBw/D,EAAOC,QAAU,SAAUkhB,EAAItlF,GAC7B,OAAO2E,EAAeD,KAAK4gF,EAAItlF,KAM3B,KACA,SAAUmkE,EAAQC,EAASF,GAEjC,aAEA,IAAI2uB,EAAgC3uB,EAAoB,QACpD6uB,EAAW7uB,EAAoB,QAC/B03B,EAAW13B,EAAoB,QAC/BivB,EAAWjvB,EAAoB,QAC/BoyB,EAAYpyB,EAAoB,QAChC8uB,EAAyB9uB,EAAoB,QAC7CgvB,EAAqBhvB,EAAoB,QACzC21B,EAAa31B,EAAoB,QAEjC90C,EAAMtsB,KAAKssB,IACXrsB,EAAMD,KAAKC,IACXg6B,EAAQj6B,KAAKi6B,MACb0/D,EAAuB,4BACvBC,EAAgC,oBAEhCC,EAAgB,SAAUrX,GAC5B,YAAc7lE,IAAP6lE,EAAmBA,EAAK5kE,OAAO4kE,IAIxCuN,EAA8B,UAAW,GAAG,SAAU+J,EAASC,EAAelJ,EAAiBv8D,GAC7F,IAAI0lE,EAA+C1lE,EAAO0lE,6CACtDC,EAAmB3lE,EAAO2lE,iBAC1BC,EAAoBF,EAA+C,IAAM,KAE7E,MAAO,CAGL,SAAiBG,EAAaC,GAC5B,IAAIxK,EAAIM,EAAuB72F,MAC3BghG,OAA0B19E,GAAfw9E,OAA2Bx9E,EAAYw9E,EAAYL,GAClE,YAAoBn9E,IAAb09E,EACHA,EAASz4F,KAAKu4F,EAAavK,EAAGwK,GAC9BL,EAAcn4F,KAAKgc,OAAOgyE,GAAIuK,EAAaC,IAIjD,SAAU3I,EAAQ2I,GAChB,IACIJ,GAAgDC,GACzB,kBAAjBG,IAA0E,IAA7CA,EAAa7yF,QAAQ2yF,GAC1D,CACA,IAAIxlE,EAAMm8D,EAAgBkJ,EAAetI,EAAQp4F,KAAM+gG,GACvD,GAAI1lE,EAAIL,KAAM,OAAOK,EAAI31B,MAG3B,IAAI2yF,EAAKzB,EAASwB,GACdE,EAAI/zE,OAAOvkB,MAEXihG,EAA4C,oBAAjBF,EAC1BE,IAAmBF,EAAex8E,OAAOw8E,IAE9C,IAAIjhG,EAASu4F,EAAGv4F,OAChB,GAAIA,EAAQ,CACV,IAAI+9F,EAAcxF,EAAGN,QACrBM,EAAG/rF,UAAY,EAEjB,IAAI40F,EAAU,GACd,MAAO,EAAM,CACX,IAAIn9F,EAAS25F,EAAWrF,EAAIC,GAC5B,GAAe,OAAXv0F,EAAiB,MAGrB,GADAm9F,EAAQp0F,KAAK/I,IACRjE,EAAQ,MAEb,IAAIg+F,EAAWv5E,OAAOxgB,EAAO,IACZ,KAAb+5F,IAAiBzF,EAAG/rF,UAAYyqF,EAAmBuB,EAAGtB,EAASqB,EAAG/rF,WAAYuxF,IAKpF,IAFA,IAAIsD,EAAoB,GACpBC,EAAqB,EAChB13F,EAAI,EAAGA,EAAIw3F,EAAQ93F,OAAQM,IAAK,CACvC3F,EAASm9F,EAAQx3F,GAUjB,IARA,IAAI23F,EAAU98E,OAAOxgB,EAAO,IACxBo/C,EAAWlwB,EAAIrsB,EAAIuzF,EAAUp2F,EAAOyI,OAAQ8rF,EAAElvF,QAAS,GACvDk4F,EAAW,GAMNr1F,EAAI,EAAGA,EAAIlI,EAAOqF,OAAQ6C,IAAKq1F,EAASx0F,KAAK0zF,EAAcz8F,EAAOkI,KAC3E,IAAIs1F,EAAgBx9F,EAAOy9F,OAC3B,GAAIP,EAAmB,CACrB,IAAIQ,EAAe,CAACJ,GAASn/E,OAAOo/E,EAAUn+C,EAAUm1C,QAClCh1E,IAAlBi+E,GAA6BE,EAAa30F,KAAKy0F,GACnD,IAAI9tE,EAAclP,OAAOw8E,EAAa7zF,WAAMoW,EAAWm+E,SAEvDhuE,EAAciuE,EAAgBL,EAAS/I,EAAGn1C,EAAUm+C,EAAUC,EAAeR,GAE3E59C,GAAYi+C,IACdD,GAAqB7I,EAAE7rF,MAAM20F,EAAoBj+C,GAAY1vB,EAC7D2tE,EAAqBj+C,EAAWk+C,EAAQj4F,QAG5C,OAAO+3F,EAAoB7I,EAAE7rF,MAAM20F,KAKvC,SAASM,EAAgBL,EAASh1F,EAAK82C,EAAUm+C,EAAUC,EAAe9tE,GACxE,IAAIkuE,EAAUx+C,EAAWk+C,EAAQj4F,OAC7BvH,EAAIy/F,EAASl4F,OACbw4F,EAAUrB,EAKd,YAJsBj9E,IAAlBi+E,IACFA,EAAgB9B,EAAS8B,GACzBK,EAAUtB,GAELI,EAAcn4F,KAAKkrB,EAAamuE,GAAS,SAAU98F,EAAO+uB,GAC/D,IAAIguE,EACJ,OAAQhuE,EAAGosD,OAAO,IAChB,IAAK,IAAK,MAAO,IACjB,IAAK,IAAK,OAAOohB,EACjB,IAAK,IAAK,OAAOh1F,EAAII,MAAM,EAAG02C,GAC9B,IAAK,IAAK,OAAO92C,EAAII,MAAMk1F,GAC3B,IAAK,IACHE,EAAUN,EAAc1tE,EAAGpnB,MAAM,GAAI,IACrC,MACF,QACE,IAAIhJ,GAAKowB,EACT,GAAU,IAANpwB,EAAS,OAAOqB,EACpB,GAAIrB,EAAI5B,EAAG,CACT,IAAIugB,EAAIwe,EAAMn9B,EAAI,IAClB,OAAU,IAAN2e,EAAgBtd,EAChBsd,GAAKvgB,OAA8ByhB,IAApBg+E,EAASl/E,EAAI,GAAmByR,EAAGosD,OAAO,GAAKqhB,EAASl/E,EAAI,GAAKyR,EAAGosD,OAAO,GACvFn7E,EAET+8F,EAAUP,EAAS79F,EAAI,GAE3B,YAAmB6f,IAAZu+E,EAAwB,GAAKA,UAQpC,KACA,SAAU75B,EAAQC,EAASF,GAEjC,IAAI+5B,EAAU/5B,EAAoB,QAC9Bg6B,EAAQh6B,EAAoB,SAE/BC,EAAOC,QAAU,SAAUpkE,EAAK6B,GAC/B,OAAOq8F,EAAMl+F,KAASk+F,EAAMl+F,QAAiByf,IAAV5d,EAAsBA,EAAQ,MAChE,WAAY,IAAIoH,KAAK,CACtB0a,QAAS,QACT2tE,KAAM2M,EAAU,OAAS,SACzBE,UAAW,0CAMP,OACA,SAAUh6B,EAAQC,EAASF,GAEjC,IAAI0xB,EAAa1xB,EAAoB,QACjCk6B,EAA4Bl6B,EAAoB,QAChDm6B,EAA8Bn6B,EAAoB,QAClD6uB,EAAW7uB,EAAoB,QAGnCC,EAAOC,QAAUwxB,EAAW,UAAW,YAAc,SAAiBtQ,GACpE,IAAItjE,EAAOo8E,EAA0B7/E,EAAEw0E,EAASzN,IAC5C6U,EAAwBkE,EAA4B9/E,EACxD,OAAO47E,EAAwBn4E,EAAK3D,OAAO87E,EAAsB7U,IAAOtjE,IAMpE,KACA,SAAUmiD,EAAQC,GAIxBD,EAAOC,QAAU,iDAKX,OACA,SAAUD,EAAQC,EAASF,GAEjC,IAAI8uB,EAAyB9uB,EAAoB,QAC7Co6B,EAAcp6B,EAAoB,QAElCq6B,EAAa,IAAMD,EAAc,IACjCE,EAAQplD,OAAO,IAAMmlD,EAAaA,EAAa,KAC/CE,EAAQrlD,OAAOmlD,EAAaA,EAAa,MAGzClD,EAAe,SAAUqD,GAC3B,OAAO,SAAUnD,GACf,IAAI3vF,EAAS8U,OAAOsyE,EAAuBuI,IAG3C,OAFW,EAAPmD,IAAU9yF,EAASA,EAAOvH,QAAQm6F,EAAO,KAClC,EAAPE,IAAU9yF,EAASA,EAAOvH,QAAQo6F,EAAO,KACtC7yF,IAIXu4D,EAAOC,QAAU,CAGf15C,MAAO2wE,EAAa,GAGpB/vE,IAAK+vE,EAAa,GAGlBjqF,KAAMiqF,EAAa,KAMf,OACA,SAAUl3B,EAAQC,EAASF,GAEjC,IAAI4uB,EAAW5uB,EAAoB,QAEnCC,EAAOC,QAAU,SAAUkhB,GACzB,GAAIwN,EAASxN,GACX,MAAMxvD,UAAU,iDAChB,OAAOwvD,IAML,OACA,SAAUnhB,EAAQC,GAExBD,EAAOC,QAAU,SAAUu6B,EAAQ98F,GACjC,MAAO,CACLsvF,aAAuB,EAATwN,GACdlG,eAAyB,EAATkG,GAChBC,WAAqB,EAATD,GACZ98F,MAAOA,KAOL,OACA,SAAUsiE,EAAQC,EAASF,GAEjC,aAEA,IAAIiuB,EAAcjuB,EAAoB,QAClC0uB,EAAQ1uB,EAAoB,QAC5B00B,EAAa10B,EAAoB,QACjCm6B,EAA8Bn6B,EAAoB,QAClDkuB,EAA6BluB,EAAoB,QACjD03B,EAAW13B,EAAoB,QAC/B26B,EAAgB36B,EAAoB,QAEpC46B,EAAev6F,OAAOw6F,OACtB7N,EAAiB3sF,OAAO2sF,eAI5B/sB,EAAOC,SAAW06B,GAAgBlM,GAAM,WAEtC,GAAIT,GAQiB,IARF2M,EAAa,CAAEnjF,EAAG,GAAKmjF,EAAa5N,EAAe,GAAI,IAAK,CAC7EC,YAAY,EACZrvF,IAAK,WACHovF,EAAe/0F,KAAM,IAAK,CACxB0F,MAAO,EACPsvF,YAAY,OAGd,CAAEx1E,EAAG,KAAMA,EAAS,OAAO,EAE/B,IAAIk5E,EAAI,GACJmK,EAAI,GAEJtxF,EAAS0jF,SACT6N,EAAW,uBAGf,OAFApK,EAAEnnF,GAAU,EACZuxF,EAASziG,MAAM,IAAI4xB,SAAQ,SAAU2C,GAAOiuE,EAAEjuE,GAAOA,KACf,GAA/B+tE,EAAa,GAAIjK,GAAGnnF,IAAgBkrF,EAAWkG,EAAa,GAAIE,IAAIv1F,KAAK,KAAOw1F,KACpF,SAAgB9rF,EAAQmnD,GAC3B,IAAI4kC,EAAItD,EAASzoF,GACbipF,EAAkB92F,UAAUC,OAC5BoD,EAAQ,EACRwxF,EAAwBkE,EAA4B9/E,EACpDi7E,EAAuBpH,EAA2B7zE,EACtD,MAAO69E,EAAkBzzF,EAAO,CAC9B,IAII3I,EAJAy0F,EAAIoK,EAAcv5F,UAAUqD,MAC5BqZ,EAAOm4E,EAAwBvB,EAAWnE,GAAGp2E,OAAO87E,EAAsB1F,IAAMmE,EAAWnE,GAC3FlvF,EAASyc,EAAKzc,OACd6C,EAAI,EAER,MAAO7C,EAAS6C,EACdpI,EAAMgiB,EAAK5Z,KACN+pF,IAAeqH,EAAqB90F,KAAK+vF,EAAGz0F,KAAMk/F,EAAEl/F,GAAOy0F,EAAEz0F,IAEpE,OAAOk/F,GACPJ,GAKE,KACA,SAAU36B,EAAQC,EAASF,GAEjC,IAAIoyB,EAAYpyB,EAAoB,QAChC8uB,EAAyB9uB,EAAoB,QAG7Cm3B,EAAe,SAAU8D,GAC3B,OAAO,SAAU5D,EAAOtgD,GACtB,IAGImkD,EAAOC,EAHP5K,EAAI/zE,OAAOsyE,EAAuBuI,IAClCj8C,EAAWg3C,EAAUr7C,GACrB3yB,EAAOmsE,EAAElvF,OAEb,OAAI+5C,EAAW,GAAKA,GAAYh3B,EAAa62E,EAAoB,QAAK1/E,GACtE2/E,EAAQ3K,EAAEzjE,WAAWsuB,GACd8/C,EAAQ,OAAUA,EAAQ,OAAU9/C,EAAW,IAAMh3B,IACtD+2E,EAAS5K,EAAEzjE,WAAWsuB,EAAW,IAAM,OAAU+/C,EAAS,MAC1DF,EAAoB1K,EAAErY,OAAO98B,GAAY8/C,EACzCD,EAAoB1K,EAAE7rF,MAAM02C,EAAUA,EAAW,GAA+B+/C,EAAS,OAAlCD,EAAQ,OAAU,IAA0B,SAI7Gj7B,EAAOC,QAAU,CAGfk7B,OAAQjE,GAAa,GAGrBjf,OAAQif,GAAa,KAMjB,OACA,SAAUl3B,EAAQC,EAASF,GAEjC,IAAI60B,EAAW70B,EAAoB,QAC/Bp2C,EAAUo2C,EAAoB,QAC9BwtB,EAAkBxtB,EAAoB,QAEtCiyB,EAAUzE,EAAgB,WAI9BvtB,EAAOC,QAAU,SAAUm7B,EAAeh6F,GACxC,IAAImvF,EASF,OARE5mE,EAAQyxE,KACV7K,EAAI6K,EAAc9+E,YAEF,mBAALi0E,GAAoBA,IAAMvrF,QAAS2kB,EAAQ4mE,EAAElwF,WAC/Cu0F,EAASrE,KAChBA,EAAIA,EAAEyB,GACI,OAANzB,IAAYA,OAAIj1E,IAH+Ci1E,OAAIj1E,GAKlE,SAAWA,IAANi1E,EAAkBvrF,MAAQurF,GAAc,IAAXnvF,EAAe,EAAIA,KAM1D,OACA,SAAU4+D,EAAQC,EAASF,GAEjC,IASIniE,EAAKD,EAAKuoB,EATVm1E,EAAkBt7B,EAAoB,QACtCjoE,EAASioE,EAAoB,QAC7B60B,EAAW70B,EAAoB,QAC/BgxB,EAA8BhxB,EAAoB,QAClDu7B,EAAYv7B,EAAoB,QAChCw7B,EAAYx7B,EAAoB,QAChCwzB,EAAaxzB,EAAoB,QAEjCy7B,EAAU1jG,EAAO0jG,QAGjBC,EAAU,SAAUta,GACtB,OAAOj7D,EAAIi7D,GAAMxjF,EAAIwjF,GAAMvjF,EAAIujF,EAAI,KAGjC+T,EAAY,SAAUqF,GACxB,OAAO,SAAUpZ,GACf,IAAIl/C,EACJ,IAAK2yD,EAASzT,KAAQl/C,EAAQtkC,EAAIwjF,IAAKrhF,OAASy6F,EAC9C,MAAM5oE,UAAU,0BAA4B4oE,EAAO,aACnD,OAAOt4D,IAIb,GAAIo5D,EAAiB,CACnB,IAAItB,EAAQ,IAAIyB,EACZE,EAAQ3B,EAAMp8F,IACdg+F,EAAQ5B,EAAM7zE,IACd01E,EAAQ7B,EAAMn8F,IAClBA,EAAM,SAAUujF,EAAI0a,GAElB,OADAD,EAAMr7F,KAAKw5F,EAAO5Y,EAAI0a,GACfA,GAETl+F,EAAM,SAAUwjF,GACd,OAAOua,EAAMn7F,KAAKw5F,EAAO5Y,IAAO,IAElCj7D,EAAM,SAAUi7D,GACd,OAAOwa,EAAMp7F,KAAKw5F,EAAO5Y,QAEtB,CACL,IAAI2a,EAAQP,EAAU,SACtBhI,EAAWuI,IAAS,EACpBl+F,EAAM,SAAUujF,EAAI0a,GAElB,OADA9K,EAA4B5P,EAAI2a,EAAOD,GAChCA,GAETl+F,EAAM,SAAUwjF,GACd,OAAOma,EAAUna,EAAI2a,GAAS3a,EAAG2a,GAAS,IAE5C51E,EAAM,SAAUi7D,GACd,OAAOma,EAAUna,EAAI2a,IAIzB97B,EAAOC,QAAU,CACfriE,IAAKA,EACLD,IAAKA,EACLuoB,IAAKA,EACLu1E,QAASA,EACTvG,UAAWA,IAMP,OACA,SAAUl1B,EAAQC,EAASF,GAEjC,IAAIjoE,EAASioE,EAAoB,QAC7BgxB,EAA8BhxB,EAAoB,QAClD75C,EAAM65C,EAAoB,QAC1BuyB,EAAYvyB,EAAoB,QAChCg8B,EAAgBh8B,EAAoB,QACpC80B,EAAsB90B,EAAoB,QAE1Ck1B,EAAmBJ,EAAoBl3F,IACvCq+F,EAAuBnH,EAAoB4G,QAC3CQ,EAAW1/E,OAAOA,QAAQlkB,MAAM,WAEnC2nE,EAAOC,QAAU,SAAUsuB,EAAG1yF,EAAK6B,EAAO+0F,GACzC,IAAIrxD,IAASqxD,KAAYA,EAAQrxD,OAC7B86D,IAASzJ,KAAYA,EAAQzF,WAC7BkG,IAAcT,KAAYA,EAAQS,YAClB,mBAATx1F,IACS,iBAAP7B,GAAoBqqB,EAAIxoB,EAAO,SAASqzF,EAA4BrzF,EAAO,OAAQ7B,GAC9FmgG,EAAqBt+F,GAAOy4D,OAAS8lC,EAAS32F,KAAmB,iBAAPzJ,EAAkBA,EAAM,KAEhF0yF,IAAMz2F,GAIEspC,GAEA8xD,GAAe3E,EAAE1yF,KAC3BqgG,GAAS,UAFF3N,EAAE1yF,GAIPqgG,EAAQ3N,EAAE1yF,GAAO6B,EAChBqzF,EAA4BxC,EAAG1yF,EAAK6B,IATnCw+F,EAAQ3N,EAAE1yF,GAAO6B,EAChB40F,EAAUz2F,EAAK6B,KAUrBqjC,SAAS1gC,UAAW,YAAY,WACjC,MAAsB,mBAARrI,MAAsBi9F,EAAiBj9F,MAAMm+D,QAAU4lC,EAAc/jG,UAM/E,KACA,SAAUgoE,EAAQC,EAASF,GAEjC,IAAI60B,EAAW70B,EAAoB,QAC/Bo8B,EAAiBp8B,EAAoB,QAGzCC,EAAOC,QAAU,SAAUm3B,EAAOgF,EAAOC,GACvC,IAAIC,EAAWC,EAUf,OAPEJ,GAE0C,mBAAlCG,EAAYF,EAAM9/E,cAC1BggF,IAAcD,GACdzH,EAAS2H,EAAqBD,EAAUj8F,YACxCk8F,IAAuBF,EAAQh8F,WAC/B87F,EAAe/E,EAAOmF,GACjBnF,IAMH,KACA,SAAUp3B,EAAQC,GAExBA,EAAQ7lD,EAAIha,OAAO41F,uBAKb,OACA,SAAUh2B,EAAQC,EAASF,GAEjC,IAAI/+B,EAAO++B,EAAoB,QAC3B75C,EAAM65C,EAAoB,QAC1By8B,EAA+Bz8B,EAAoB,QACnDgtB,EAAiBhtB,EAAoB,QAAQ3lD,EAEjD4lD,EAAOC,QAAU,SAAUw8B,GACzB,IAAIxP,EAASjsD,EAAKisD,SAAWjsD,EAAKisD,OAAS,IACtC/mE,EAAI+mE,EAAQwP,IAAO1P,EAAeE,EAAQwP,EAAM,CACnD/+F,MAAO8+F,EAA6BpiF,EAAEqiF,OAOpC,KACA,SAAUz8B,EAAQC,GAGxBD,EAAOC,QAAU,CACf,cACA,iBACA,gBACA,uBACA,iBACA,WACA,YAMI,OACA,SAAUD,EAAQC,EAASF,GAEjC,IAAI8uB,EAAyB9uB,EAAoB,QAIjDC,EAAOC,QAAU,SAAUo4B,GACzB,OAAOj4F,OAAOyuF,EAAuBwJ,MAMjC,OACA,SAAUr4B,EAAQC,EAASF,GAEjC,IAmDI28B,EAnDA9N,EAAW7uB,EAAoB,QAC/B20B,EAAmB30B,EAAoB,QACvCuzB,EAAcvzB,EAAoB,QAClCwzB,EAAaxzB,EAAoB,QACjC94D,EAAO84D,EAAoB,QAC3B48B,EAAwB58B,EAAoB,QAC5Cw7B,EAAYx7B,EAAoB,QAEhC68B,EAAK,IACLjkG,EAAK,IACLkkG,EAAY,YACZC,EAAS,SACTC,EAAWxB,EAAU,YAErByB,EAAmB,aAEnBC,EAAY,SAAUl9F,GACxB,OAAOpH,EAAKmkG,EAASF,EAAK78F,EAAUpH,EAAK,IAAMmkG,EAASF,GAItDM,EAA4B,SAAUR,GACxCA,EAAgBvsE,MAAM8sE,EAAU,KAChCP,EAAgB32F,QAChB,IAAIo3F,EAAOT,EAAgBU,aAAah9F,OAExC,OADAs8F,EAAkB,KACXS,GAILE,EAA2B,WAE7B,IAEIC,EAFAxtE,EAAS6sE,EAAsB,UAC/BY,EAAK,OAAST,EAAS,IAU3B,OARAhtE,EAAOjoB,MAAMgjF,QAAU,OACvB5jF,EAAKqH,YAAYwhB,GAEjBA,EAAOE,IAAMzT,OAAOghF,GACpBD,EAAiBxtE,EAAOI,cAAcnuB,SACtCu7F,EAAetyF,OACfsyF,EAAentE,MAAM8sE,EAAU,sBAC/BK,EAAev3F,QACRu3F,EAAeE,GASpBC,EAAkB,WACpB,IAEEf,EAAkB36F,SAAS27F,QAAU,IAAIC,cAAc,YACvD,MAAOtpE,IACTopE,EAAkBf,EAAkBQ,EAA0BR,GAAmBW,IACjF,IAAIj8F,EAASkyF,EAAYlyF,OACzB,MAAOA,WAAiBq8F,EAAgBZ,GAAWvJ,EAAYlyF,IAC/D,OAAOq8F,KAGTlK,EAAWwJ,IAAY,EAIvB/8B,EAAOC,QAAU7/D,OAAO8N,QAAU,SAAgBqgF,EAAGoG,GACnD,IAAI54F,EAQJ,OAPU,OAANwyF,GACFyO,EAAiBH,GAAajO,EAASL,GACvCxyF,EAAS,IAAIihG,EACbA,EAAiBH,GAAa,KAE9B9gG,EAAOghG,GAAYxO,GACdxyF,EAAS0hG,SACMniF,IAAfq5E,EAA2B54F,EAAS24F,EAAiB34F,EAAQ44F,KAMhE,OACA,SAAU30B,EAAQC,EAASF,GAEjC,aAEA,IAAI11D,EAAI01D,EAAoB,QACxB69B,EAA4B79B,EAAoB,QAChD89B,EAAiB99B,EAAoB,QACrCo8B,EAAiBp8B,EAAoB,QACrC+9B,EAAiB/9B,EAAoB,QACrCgxB,EAA8BhxB,EAAoB,QAClDsyB,EAAWtyB,EAAoB,QAC/BwtB,EAAkBxtB,EAAoB,QACtC+5B,EAAU/5B,EAAoB,QAC9By0B,EAAYz0B,EAAoB,QAChCg+B,EAAgBh+B,EAAoB,QAEpCi+B,EAAoBD,EAAcC,kBAClCC,EAAyBF,EAAcE,uBACvCvM,EAAWnE,EAAgB,YAC3B2Q,EAAO,OACPC,EAAS,SACTC,EAAU,UAEVC,EAAa,WAAc,OAAOrmG,MAEtCgoE,EAAOC,QAAU,SAAUq+B,EAAU7B,EAAM8B,EAAqBvzE,EAAMwzE,EAASC,EAAQ/L,GACrFkL,EAA0BW,EAAqB9B,EAAMzxE,GAErD,IAkBI0zE,EAA0BC,EAASC,EAlBnCC,EAAqB,SAAUC,GACjC,GAAIA,IAASN,GAAWO,EAAiB,OAAOA,EAChD,IAAKd,GAA0Ba,KAAQE,EAAmB,OAAOA,EAAkBF,GACnF,OAAQA,GACN,KAAKZ,EAAM,OAAO,WAAkB,OAAO,IAAIK,EAAoBvmG,KAAM8mG,IACzE,KAAKX,EAAQ,OAAO,WAAoB,OAAO,IAAII,EAAoBvmG,KAAM8mG,IAC7E,KAAKV,EAAS,OAAO,WAAqB,OAAO,IAAIG,EAAoBvmG,KAAM8mG,IAC/E,OAAO,WAAc,OAAO,IAAIP,EAAoBvmG,QAGpDw1F,EAAgBiP,EAAO,YACvBwC,GAAwB,EACxBD,EAAoBV,EAASj+F,UAC7B6+F,EAAiBF,EAAkBtN,IAClCsN,EAAkB,eAClBR,GAAWQ,EAAkBR,GAC9BO,GAAmBd,GAA0BiB,GAAkBL,EAAmBL,GAClFW,EAA4B,SAAR1C,GAAkBuC,EAAkBzpC,SAA4B2pC,EAiCxF,GA7BIC,IACFT,EAA2Bb,EAAesB,EAAkB5+F,KAAK,IAAI+9F,IACjEN,IAAsB59F,OAAOC,WAAaq+F,EAAyB1zE,OAChE8uE,GAAW+D,EAAea,KAA8BV,IACvD7B,EACFA,EAAeuC,EAA0BV,GACa,mBAAtCU,EAAyBhN,IACzCX,EAA4B2N,EAA0BhN,EAAU2M,IAIpEP,EAAeY,EAA0BlR,GAAe,GAAM,GAC1DsM,IAAStF,EAAUhH,GAAiB6Q,KAKxCG,GAAWL,GAAUe,GAAkBA,EAAe5iG,OAAS6hG,IACjEc,GAAwB,EACxBF,EAAkB,WAAoB,OAAOG,EAAe3+F,KAAKvI,QAI7D8hG,IAAWpH,GAAWsM,EAAkBtN,KAAcqN,GAC1DhO,EAA4BiO,EAAmBtN,EAAUqN,GAE3DvK,EAAUiI,GAAQsC,EAGdP,EAMF,GALAG,EAAU,CACR9yF,OAAQgzF,EAAmBV,GAC3BtgF,KAAM4gF,EAASM,EAAkBF,EAAmBX,GACpD3oC,QAASspC,EAAmBT,IAE1B1L,EAAQ,IAAKkM,KAAOD,GAClBV,GAA0BgB,KAA2BL,KAAOI,KAC9D3M,EAAS2M,EAAmBJ,EAAKD,EAAQC,SAEtCv0F,EAAE,CAAE2E,OAAQytF,EAAM/I,OAAO,EAAMP,OAAQ8K,GAA0BgB,GAAyBN,GAGnG,OAAOA,IAMH,OACA,SAAU3+B,EAAQC,EAASF,GAEjC,IAAIjoE,EAASioE,EAAoB,QAC7Bg8B,EAAgBh8B,EAAoB,QAEpCy7B,EAAU1jG,EAAO0jG,QAErBx7B,EAAOC,QAA6B,oBAAZu7B,GAA0B,cAAcn5F,KAAK05F,EAAcP,KAK7E,OACA,SAAUx7B,EAAQC,EAASF,GAEjC,IAAI60B,EAAW70B,EAAoB,QAEnCC,EAAOC,QAAU,SAAUkhB,GACzB,IAAKyT,EAASzT,GACZ,MAAMxvD,UAAUpV,OAAO4kE,GAAM,qBAC7B,OAAOA,IAML,OACA,SAAUnhB,EAAQC,EAASF,GAEjC,IAAI0uB,EAAQ1uB,EAAoB,QAGhCC,EAAOC,SAAWwuB,GAAM,WACtB,OAA8E,GAAvEruF,OAAO2sF,eAAe,GAAI,EAAG,CAAEpvF,IAAK,WAAc,OAAO,KAAQ,OAMpE,KACA,SAAUqiE,EAAQC,EAASF,GAEjC,aAEA,IAAIouB,EAAcpuB,EAAoB,QAClCo0B,EAAuBp0B,EAAoB,QAC3CmuB,EAA2BnuB,EAAoB,QAEnDC,EAAOC,QAAU,SAAUqtB,EAAQzxF,EAAK6B,GACtC,IAAI0hG,EAAcjR,EAAYtyF,GAC1BujG,KAAe9R,EAAQ6G,EAAqB/5E,EAAEkzE,EAAQ8R,EAAalR,EAAyB,EAAGxwF,IAC9F4vF,EAAO8R,GAAe1hG,IAMvB,OACA,SAAUsiE,EAAQC,GAExBD,EAAOC,QAAU,SAAUkhB,GACzB,MAAqB,kBAAPA,EAAyB,OAAPA,EAA4B,oBAAPA,IAMjD,KACA,SAAUnhB,EAAQC,EAASF,GAEjC,IAAIs/B,EAAgCC,EAA8BC,GAMjE,SAAUt+F,EAAMlJ,GAEXunG,EAA+B,GAAID,EAAiC,EACtEE,EAA2E,oBAAnCF,EACvCA,EAA+Bn6F,MAAM+6D,EAASq/B,GAAiCD,OAC9C/jF,IAAlCikF,IAAgDv/B,EAAOC,QAAUs/B,IALrE,CAOkB,qBAAThgG,MAAuBA,MAAa,WAC3C,SAASigG,IACP,GAAIz9F,SAAS09F,cACX,OAAO19F,SAAS09F,cAKlB,IACE,MAAM,IAAItkF,MAEZ,MAAOkpC,GAEL,IAMEq7C,EACAC,EACAC,EAREC,EAAgB,kCAClBC,EAAgB,6BAChBC,EAAeF,EAAcxkG,KAAKgpD,EAAI27C,QAAUF,EAAczkG,KAAKgpD,EAAI27C,OACvEC,EAAkBF,GAAgBA,EAAa,KAAO,EACtDG,EAAQH,GAAgBA,EAAa,KAAO,EAC5CI,EAAkBp+F,SAASwhD,SAASn1C,KAAKlO,QAAQ6B,SAASwhD,SAAS68C,KAAM,IAIzEC,EAAUt+F,SAASsM,qBAAqB,UAEtC4xF,IAAmBE,IACrBT,EAAa39F,SAAS++E,gBAAgB/gC,UACtC4/C,EAA2B,IAAI1qD,OAAO,sBAAwBirD,EAAO,GAAK,iDAAkD,KAC5HN,EAAqBF,EAAWx/F,QAAQy/F,EAA0B,MAAM1yF,QAG1E,IAAK,IAAIvL,EAAI,EAAGA,EAAI2+F,EAAQj/F,OAAQM,IAAK,CAEvC,GAA8B,gBAA1B2+F,EAAQ3+F,GAAGssC,WACb,OAAOqyD,EAAQ3+F,GAIjB,GAAI2+F,EAAQ3+F,GAAGsuB,MAAQiwE,EACrB,OAAOI,EAAQ3+F,GAIjB,GACEu+F,IAAmBE,GACnBE,EAAQ3+F,GAAG2B,WACXg9F,EAAQ3+F,GAAG2B,UAAU4J,SAAW2yF,EAEhC,OAAOS,EAAQ3+F,GAKnB,OAAO,MAIX,OAAO89F,MAMH,KACA,SAAUx/B,EAAQC,EAASF,GAEjC,IAAIg6B,EAAQh6B,EAAoB,QAE5BugC,EAAmBv/D,SAASzgC,SAGE,mBAAvBy5F,EAAMgC,gBACfhC,EAAMgC,cAAgB,SAAU5a,GAC9B,OAAOmf,EAAiB//F,KAAK4gF,KAIjCnhB,EAAOC,QAAU85B,EAAMgC,eAKjB,OACA,SAAU/7B,EAAQC,EAASF,GAEjC,aAEA,IAAIkY,EAASlY,EAAoB,QAAQkY,OAIzCjY,EAAOC,QAAU,SAAUqwB,EAAG9rF,EAAOurF,GACnC,OAAOvrF,GAASurF,EAAU9X,EAAOqY,EAAG9rF,GAAOpD,OAAS,KAMhD,OACA,SAAU4+D,EAAQC,GAExB,IAAIt/D,EAAK,EACL4/F,EAAU5hG,KAAK6hG,SAEnBxgC,EAAOC,QAAU,SAAUpkE,GACzB,MAAO,UAAY0gB,YAAejB,IAARzf,EAAoB,GAAKA,GAAO,QAAU8E,EAAK4/F,GAASjgG,SAAS,MAMvF,KACA,SAAU0/D,EAAQC,EAASF,GAEjC,IAAIiuB,EAAcjuB,EAAoB,QAClCo0B,EAAuBp0B,EAAoB,QAC3CmuB,EAA2BnuB,EAAoB,QAEnDC,EAAOC,QAAU+tB,EAAc,SAAUV,EAAQzxF,EAAK6B,GACpD,OAAOy2F,EAAqB/5E,EAAEkzE,EAAQzxF,EAAKqyF,EAAyB,EAAGxwF,KACrE,SAAU4vF,EAAQzxF,EAAK6B,GAEzB,OADA4vF,EAAOzxF,GAAO6B,EACP4vF,IAMH,KACA,SAAUttB,EAAQC,EAASF,GAEjC,aAEA,IAAI0gC,EAAc1gC,EAAoB,QAClCs2B,EAAgBt2B,EAAoB,QAEpC2gC,EAAazrD,OAAO50C,UAAUhF,KAI9Bq9F,EAAgBn8E,OAAOlc,UAAUH,QAEjCygG,EAAcD,EAEdE,EAA2B,WAC7B,IAAIpK,EAAM,IACNC,EAAM,MAGV,OAFAiK,EAAWngG,KAAKi2F,EAAK,KACrBkK,EAAWngG,KAAKk2F,EAAK,KACI,IAAlBD,EAAIlyF,WAAqC,IAAlBmyF,EAAInyF,UALL,GAQ3BqyF,EAAgBN,EAAcM,eAAiBN,EAAcwK,aAG7DC,OAAuCxlF,IAAvB,OAAOjgB,KAAK,IAAI,GAEhC0lG,EAAQH,GAA4BE,GAAiBnK,EAErDoK,IACFJ,EAAc,SAAct8F,GAC1B,IACIC,EAAW08F,EAAQlkG,EAAO4E,EAD1Bu/F,EAAKjpG,KAELg4F,EAAS2G,GAAiBsK,EAAGjR,OAC7BH,EAAQ4Q,EAAYlgG,KAAK0gG,GACzB9qC,EAAS8qC,EAAG9qC,OACZ+qC,EAAa,EACbC,EAAU98F,EA+Cd,OA7CI2rF,IACFH,EAAQA,EAAM3vF,QAAQ,IAAK,KACC,IAAxB2vF,EAAM3pF,QAAQ,OAChB2pF,GAAS,KAGXsR,EAAU5kF,OAAOlY,GAAKI,MAAMw8F,EAAG38F,WAE3B28F,EAAG38F,UAAY,KAAO28F,EAAGn1F,WAAam1F,EAAGn1F,WAAuC,OAA1BzH,EAAI48F,EAAG38F,UAAY,MAC3E6xD,EAAS,OAASA,EAAS,IAC3BgrC,EAAU,IAAMA,EAChBD,KAIFF,EAAS,IAAI/rD,OAAO,OAASkhB,EAAS,IAAK05B,IAGzCiR,IACFE,EAAS,IAAI/rD,OAAO,IAAMkhB,EAAS,WAAY05B,IAE7C+Q,IAA0Bt8F,EAAY28F,EAAG38F,WAE7CxH,EAAQ4jG,EAAWngG,KAAKyvF,EAASgR,EAASC,EAAIE,GAE1CnR,EACElzF,GACFA,EAAMD,MAAQC,EAAMD,MAAM4H,MAAMy8F,GAChCpkG,EAAM,GAAKA,EAAM,GAAG2H,MAAMy8F,GAC1BpkG,EAAM0H,MAAQy8F,EAAG38F,UACjB28F,EAAG38F,WAAaxH,EAAM,GAAGsE,QACpB6/F,EAAG38F,UAAY,EACbs8F,GAA4B9jG,IACrCmkG,EAAG38F,UAAY28F,EAAGnpG,OAASgF,EAAM0H,MAAQ1H,EAAM,GAAGsE,OAASkD,GAEzDw8F,GAAiBhkG,GAASA,EAAMsE,OAAS,GAG3Cs3F,EAAcn4F,KAAKzD,EAAM,GAAIkkG,GAAQ,WACnC,IAAKt/F,EAAI,EAAGA,EAAIP,UAAUC,OAAS,EAAGM,SACf4Z,IAAjBna,UAAUO,KAAkB5E,EAAM4E,QAAK4Z,MAK1Cxe,IAIXkjE,EAAOC,QAAU0gC,GAKX,OACA,SAAU3gC,EAAQC,EAASF,GAEjC,IAAI0uB,EAAQ1uB,EAAoB,QAE5Bt0C,EAAc,kBAEd+mE,EAAW,SAAU4O,EAASC,GAChC,IAAI3jG,EAAQ0F,EAAKk+F,EAAUF,IAC3B,OAAO1jG,GAAS6jG,GACZ7jG,GAAS8jG,IACW,mBAAbH,EAA0B5S,EAAM4S,KACrCA,IAGJC,EAAY9O,EAAS8O,UAAY,SAAU75F,GAC7C,OAAO8U,OAAO9U,GAAQvH,QAAQurB,EAAa,KAAKlJ,eAG9Cnf,EAAOovF,EAASpvF,KAAO,GACvBo+F,EAAShP,EAASgP,OAAS,IAC3BD,EAAW/O,EAAS+O,SAAW,IAEnCvhC,EAAOC,QAAUuyB,GAKX,OACA,SAAUxyB,EAAQC,EAASF,GAEjC,aAEA,IAAI11D,EAAI01D,EAAoB,QACxB0uB,EAAQ1uB,EAAoB,QAC5Bp2C,EAAUo2C,EAAoB,QAC9B60B,EAAW70B,EAAoB,QAC/B03B,EAAW13B,EAAoB,QAC/BivB,EAAWjvB,EAAoB,QAC/B63B,EAAiB73B,EAAoB,QACrC0hC,EAAqB1hC,EAAoB,QACzCw3B,EAA+Bx3B,EAAoB,QACnDwtB,EAAkBxtB,EAAoB,QACtCgyB,EAAahyB,EAAoB,QAEjC2hC,EAAuBnU,EAAgB,sBACvCoU,EAAmB,iBACnBC,EAAiC,iCAKjCC,EAA+B9P,GAAc,KAAOtD,GAAM,WAC5D,IAAI7jB,EAAQ,GAEZ,OADAA,EAAM82B,IAAwB,EACvB92B,EAAM1wD,SAAS,KAAO0wD,KAG3Bk3B,EAAkBvK,EAA6B,UAE/CwK,EAAqB,SAAUxT,GACjC,IAAKqG,EAASrG,GAAI,OAAO,EACzB,IAAIyT,EAAazT,EAAEmT,GACnB,YAAsBpmF,IAAf0mF,IAA6BA,EAAar4E,EAAQ4kE,IAGvDmE,GAAUmP,IAAiCC,EAK/Cz3F,EAAE,CAAE2E,OAAQ,QAAS0kF,OAAO,EAAMP,OAAQT,GAAU,CAClDx4E,OAAQ,SAAgBqxB,GACtB,IAGI7pC,EAAGmkB,EAAGzkB,EAAQsD,EAAKu9F,EAHnB1T,EAAIkJ,EAASz/F,MACb04F,EAAI+Q,EAAmBlT,EAAG,GAC1B9yF,EAAI,EAER,IAAKiG,GAAK,EAAGN,EAASD,UAAUC,OAAQM,EAAIN,EAAQM,IAElD,GADAugG,GAAW,IAAPvgG,EAAW6sF,EAAIptF,UAAUO,GACzBqgG,EAAmBE,GAAI,CAEzB,GADAv9F,EAAMsqF,EAASiT,EAAE7gG,QACb3F,EAAIiJ,EAAMi9F,EAAkB,MAAMhwE,UAAUiwE,GAChD,IAAK/7E,EAAI,EAAGA,EAAInhB,EAAKmhB,IAAKpqB,IAASoqB,KAAKo8E,GAAGrK,EAAelH,EAAGj1F,EAAGwmG,EAAEp8E,QAC7D,CACL,GAAIpqB,GAAKkmG,EAAkB,MAAMhwE,UAAUiwE,GAC3ChK,EAAelH,EAAGj1F,IAAKwmG,GAI3B,OADAvR,EAAEtvF,OAAS3F,EACJi1F,MAOL,OACA,SAAU1wB,EAAQC,EAASF,GAEjC,IAAI6uB,EAAW7uB,EAAoB,QAGnCC,EAAOC,QAAU,SAAU+3B,EAAUl+E,EAAIpc,EAAO0gG,GAC9C,IACE,OAAOA,EAAUtkF,EAAG80E,EAASlxF,GAAO,GAAIA,EAAM,IAAMoc,EAAGpc,GAEvD,MAAO22B,GACP,IAAI6tE,EAAelK,EAAS,UAE5B,WADqB18E,IAAjB4mF,GAA4BtT,EAASsT,EAAa3hG,KAAKy3F,IACrD3jE,KAOJ,OACA,SAAU2rC,EAAQC,EAASF,GAEjC,IAAIiuB,EAAcjuB,EAAoB,QAClCquB,EAAiBruB,EAAoB,QACrC6uB,EAAW7uB,EAAoB,QAC/BouB,EAAcpuB,EAAoB,QAElCoiC,EAAuB/hG,OAAO2sF,eAIlC9sB,EAAQ7lD,EAAI4zE,EAAcmU,EAAuB,SAAwB5T,EAAGC,EAAG4T,GAI7E,GAHAxT,EAASL,GACTC,EAAIL,EAAYK,GAAG,GACnBI,EAASwT,GACLhU,EAAgB,IAClB,OAAO+T,EAAqB5T,EAAGC,EAAG4T,GAClC,MAAO/tE,IACT,GAAI,QAAS+tE,GAAc,QAASA,EAAY,MAAMzwE,UAAU,2BAEhE,MADI,UAAWywE,IAAY7T,EAAEC,GAAK4T,EAAW1kG,OACtC6wF,IAMH,OACA,SAAUvuB,EAAQC,EAASF,GAEjC,aAEA,IAAIi+B,EAAoBj+B,EAAoB,QAAQi+B,kBAChD9vF,EAAS6xD,EAAoB,QAC7BmuB,EAA2BnuB,EAAoB,QAC/C+9B,EAAiB/9B,EAAoB,QACrCy0B,EAAYz0B,EAAoB,QAEhCs+B,EAAa,WAAc,OAAOrmG,MAEtCgoE,EAAOC,QAAU,SAAUs+B,EAAqB9B,EAAMzxE,GACpD,IAAIwiE,EAAgBiP,EAAO,YAI3B,OAHA8B,EAAoBl+F,UAAY6N,EAAO8vF,EAAmB,CAAEhzE,KAAMkjE,EAAyB,EAAGljE,KAC9F8yE,EAAeS,EAAqB/Q,GAAe,GAAO,GAC1DgH,EAAUhH,GAAiB6Q,EACpBE,IAMH,OACA,SAAUv+B,EAAQC,EAASF,GAEjC,aAGA,IAAI0uB,EAAQ1uB,EAAoB,QAIhC,SAASsiC,EAAG1oG,EAAGygB,GACb,OAAO66B,OAAOt7C,EAAGygB,GAGnB6lD,EAAQ02B,cAAgBlI,GAAM,WAE5B,IAAIwS,EAAKoB,EAAG,IAAK,KAEjB,OADApB,EAAG38F,UAAY,EACW,MAAnB28F,EAAG5lG,KAAK,WAGjB4kE,EAAQ4gC,aAAepS,GAAM,WAE3B,IAAIwS,EAAKoB,EAAG,KAAM,MAElB,OADApB,EAAG38F,UAAY,EACU,MAAlB28F,EAAG5lG,KAAK,WAMX,KACA,SAAU2kE,EAAQC,EAASF,GAEjC,aAEA,IAAI11D,EAAI01D,EAAoB,QACxB26B,EAAgB36B,EAAoB,QACpC4tB,EAAkB5tB,EAAoB,QACtCqxB,EAAsBrxB,EAAoB,QAE1CuiC,EAAa,GAAGh9F,KAEhBi9F,EAAc7H,GAAiBt6F,OAC/BkxF,EAAgBF,EAAoB,OAAQ,KAIhD/mF,EAAE,CAAE2E,OAAQ,QAAS0kF,OAAO,EAAMP,OAAQoP,IAAgBjR,GAAiB,CACzEhsF,KAAM,SAAc+pC,GAClB,OAAOizD,EAAW/hG,KAAKotF,EAAgB31F,WAAqBsjB,IAAd+zB,EAA0B,IAAMA,OAO5E,KACA,SAAU2wB,EAAQC,EAASF,GAEjC,aAEA,IAAI11D,EAAI01D,EAAoB,QACxBk3B,EAAkBl3B,EAAoB,QACtCoyB,EAAYpyB,EAAoB,QAChCivB,EAAWjvB,EAAoB,QAC/B03B,EAAW13B,EAAoB,QAC/B0hC,EAAqB1hC,EAAoB,QACzC63B,EAAiB73B,EAAoB,QACrCw3B,EAA+Bx3B,EAAoB,QACnDsxB,EAA0BtxB,EAAoB,QAE9Cy3B,EAAsBD,EAA6B,UACnDhG,EAAiBF,EAAwB,SAAU,CAAEmR,WAAW,EAAMviF,EAAG,EAAGvI,EAAG,IAE/EuT,EAAMtsB,KAAKssB,IACXrsB,EAAMD,KAAKC,IACX+iG,EAAmB,iBACnBc,EAAkC,kCAKtCp4F,EAAE,CAAE2E,OAAQ,QAAS0kF,OAAO,EAAMP,QAASqE,IAAwBjG,GAAkB,CACnFtsF,OAAQ,SAAgBshB,EAAOm8E,GAC7B,IAIIC,EAAaC,EAAmBlS,EAAG7qE,EAAGthB,EAAMI,EAJ5C4pF,EAAIkJ,EAASz/F,MACb0M,EAAMsqF,EAAST,EAAEntF,QACjByhG,EAAc5L,EAAgB1wE,EAAO7hB,GACrCuzF,EAAkB92F,UAAUC,OAWhC,GATwB,IAApB62F,EACF0K,EAAcC,EAAoB,EACL,IAApB3K,GACT0K,EAAc,EACdC,EAAoBl+F,EAAMm+F,IAE1BF,EAAc1K,EAAkB,EAChC2K,EAAoBhkG,EAAIqsB,EAAIknE,EAAUuQ,GAAc,GAAIh+F,EAAMm+F,IAE5Dn+F,EAAMi+F,EAAcC,EAAoBjB,EAC1C,MAAMhwE,UAAU8wE,GAGlB,IADA/R,EAAI+Q,EAAmBlT,EAAGqU,GACrB/8E,EAAI,EAAGA,EAAI+8E,EAAmB/8E,IACjCthB,EAAOs+F,EAAch9E,EACjBthB,KAAQgqF,GAAGqJ,EAAelH,EAAG7qE,EAAG0oE,EAAEhqF,IAGxC,GADAmsF,EAAEtvF,OAASwhG,EACPD,EAAcC,EAAmB,CACnC,IAAK/8E,EAAIg9E,EAAah9E,EAAInhB,EAAMk+F,EAAmB/8E,IACjDthB,EAAOshB,EAAI+8E,EACXj+F,EAAKkhB,EAAI88E,EACLp+F,KAAQgqF,EAAGA,EAAE5pF,GAAM4pF,EAAEhqF,UACbgqF,EAAE5pF,GAEhB,IAAKkhB,EAAInhB,EAAKmhB,EAAInhB,EAAMk+F,EAAoBD,EAAa98E,WAAY0oE,EAAE1oE,EAAI,QACtE,GAAI88E,EAAcC,EACvB,IAAK/8E,EAAInhB,EAAMk+F,EAAmB/8E,EAAIg9E,EAAah9E,IACjDthB,EAAOshB,EAAI+8E,EAAoB,EAC/Bj+F,EAAKkhB,EAAI88E,EAAc,EACnBp+F,KAAQgqF,EAAGA,EAAE5pF,GAAM4pF,EAAEhqF,UACbgqF,EAAE5pF,GAGlB,IAAKkhB,EAAI,EAAGA,EAAI88E,EAAa98E,IAC3B0oE,EAAE1oE,EAAIg9E,GAAe1hG,UAAU0kB,EAAI,GAGrC,OADA0oE,EAAEntF,OAASsD,EAAMk+F,EAAoBD,EAC9BjS,MAOL,KACA,SAAU1wB,EAAQC,EAASF,GAEjC,aAEA,IAAI11D,EAAI01D,EAAoB,QACxBjoE,EAASioE,EAAoB,QAC7B0xB,EAAa1xB,EAAoB,QACjC+5B,EAAU/5B,EAAoB,QAC9BiuB,EAAcjuB,EAAoB,QAClC+iC,EAAgB/iC,EAAoB,QACpCgjC,EAAoBhjC,EAAoB,QACxC0uB,EAAQ1uB,EAAoB,QAC5B75C,EAAM65C,EAAoB,QAC1Bp2C,EAAUo2C,EAAoB,QAC9B60B,EAAW70B,EAAoB,QAC/B6uB,EAAW7uB,EAAoB,QAC/B03B,EAAW13B,EAAoB,QAC/B4tB,EAAkB5tB,EAAoB,QACtCouB,EAAcpuB,EAAoB,QAClCmuB,EAA2BnuB,EAAoB,QAC/CijC,EAAqBjjC,EAAoB,QACzC00B,EAAa10B,EAAoB,QACjCk6B,EAA4Bl6B,EAAoB,QAChDkjC,EAA8BljC,EAAoB,QAClDm6B,EAA8Bn6B,EAAoB,QAClDmjC,EAAiCnjC,EAAoB,QACrDo0B,EAAuBp0B,EAAoB,QAC3CkuB,EAA6BluB,EAAoB,QACjDgxB,EAA8BhxB,EAAoB,QAClDsyB,EAAWtyB,EAAoB,QAC/BojC,EAASpjC,EAAoB,QAC7Bw7B,EAAYx7B,EAAoB,QAChCwzB,EAAaxzB,EAAoB,QACjCqjC,EAAMrjC,EAAoB,QAC1BwtB,EAAkBxtB,EAAoB,QACtCy8B,EAA+Bz8B,EAAoB,QACnDsjC,EAAwBtjC,EAAoB,QAC5C+9B,EAAiB/9B,EAAoB,QACrC80B,EAAsB90B,EAAoB,QAC1CoxB,EAAWpxB,EAAoB,QAAQ91C,QAEvCq5E,EAAS/H,EAAU,UACnBgI,EAAS,SACT1G,EAAY,YACZ2G,EAAejW,EAAgB,eAC/ByH,EAAmBH,EAAoBj3F,IACvCq3F,EAAmBJ,EAAoBK,UAAUqO,GACjDE,EAAkBrjG,OAAOy8F,GACzB6G,EAAU5rG,EAAOm1F,OACjB0W,EAAalS,EAAW,OAAQ,aAChCpD,EAAiC6U,EAA+B9oF,EAChE+nF,EAAuBhO,EAAqB/5E,EAC5CwzE,EAA4BqV,EAA4B7oF,EACxDwpF,EAA6B3V,EAA2B7zE,EACxDypF,EAAaV,EAAO,WACpBW,EAAyBX,EAAO,cAChCY,GAAyBZ,EAAO,6BAChCa,GAAyBb,EAAO,6BAChCc,GAAwBd,EAAO,OAC/Be,GAAUpsG,EAAOosG,QAEjBC,IAAcD,KAAYA,GAAQrH,KAAeqH,GAAQrH,GAAWuH,UAGpEC,GAAsBrW,GAAeS,GAAM,WAC7C,OAES,GAFFuU,EAAmBb,EAAqB,GAAI,IAAK,CACtDxkG,IAAK,WAAc,OAAOwkG,EAAqBnqG,KAAM,IAAK,CAAE0F,MAAO,IAAKob,MACtEA,KACD,SAAUy1E,EAAGC,EAAG4T,GACnB,IAAIkC,EAA4BjW,EAA+BoV,EAAiBjV,GAC5E8V,UAAkCb,EAAgBjV,GACtD2T,EAAqB5T,EAAGC,EAAG4T,GACvBkC,GAA6B/V,IAAMkV,GACrCtB,EAAqBsB,EAAiBjV,EAAG8V,IAEzCnC,EAEAx7B,GAAO,SAAUphE,EAAKywC,GACxB,IAAIzsC,EAASs6F,EAAWt+F,GAAOy9F,EAAmBU,EAAQ7G,IAO1D,OANA7H,EAAiBzrF,EAAQ,CACvBzJ,KAAMyjG,EACNh+F,IAAKA,EACLywC,YAAaA,IAEVg4C,IAAazkF,EAAOysC,YAAcA,GAChCzsC,GAGLg7F,GAAWxB,EAAoB,SAAU5hB,GAC3C,MAAoB,iBAANA,GACZ,SAAUA,GACZ,OAAO/gF,OAAO+gF,aAAeuiB,GAG3Bc,GAAkB,SAAwBjW,EAAGC,EAAG4T,GAC9C7T,IAAMkV,GAAiBe,GAAgBV,EAAwBtV,EAAG4T,GACtExT,EAASL,GACT,IAAI1yF,EAAMsyF,EAAYK,GAAG,GAEzB,OADAI,EAASwT,GACLl8E,EAAI29E,EAAYhoG,IACbumG,EAAWpV,YAIV9mE,EAAIqoE,EAAG+U,IAAW/U,EAAE+U,GAAQznG,KAAM0yF,EAAE+U,GAAQznG,IAAO,GACvDumG,EAAaY,EAAmBZ,EAAY,CAAEpV,WAAYkB,EAAyB,GAAG,OAJjFhoE,EAAIqoE,EAAG+U,IAASnB,EAAqB5T,EAAG+U,EAAQpV,EAAyB,EAAG,KACjFK,EAAE+U,GAAQznG,IAAO,GAIVwoG,GAAoB9V,EAAG1yF,EAAKumG,IAC9BD,EAAqB5T,EAAG1yF,EAAKumG,IAGpCqC,GAAoB,SAA0BlW,EAAGoG,GACnD/F,EAASL,GACT,IAAImW,EAAa/W,EAAgBgH,GAC7B92E,EAAO42E,EAAWiQ,GAAYxqF,OAAOyqF,GAAuBD,IAIhE,OAHAvT,EAAStzE,GAAM,SAAUhiB,GAClBmyF,IAAe4W,GAAsBrkG,KAAKmkG,EAAY7oG,IAAM2oG,GAAgBjW,EAAG1yF,EAAK6oG,EAAW7oG,OAE/F0yF,GAGLsW,GAAU,SAAgBtW,EAAGoG,GAC/B,YAAsBr5E,IAAfq5E,EAA2BqO,EAAmBzU,GAAKkW,GAAkBzB,EAAmBzU,GAAIoG,IAGjGiQ,GAAwB,SAA8BE,GACxD,IAAItW,EAAIL,EAAY2W,GAAG,GACnB9X,EAAa4W,EAA2BrjG,KAAKvI,KAAMw2F,GACvD,QAAIx2F,OAASyrG,GAAmBv9E,EAAI29E,EAAYrV,KAAOtoE,EAAI49E,EAAwBtV,QAC5ExB,IAAe9mE,EAAIluB,KAAMw2F,KAAOtoE,EAAI29E,EAAYrV,IAAMtoE,EAAIluB,KAAMsrG,IAAWtrG,KAAKsrG,GAAQ9U,KAAKxB,IAGlG+X,GAA4B,SAAkCxW,EAAGC,GACnE,IAAIrN,EAAKwM,EAAgBY,GACrB1yF,EAAMsyF,EAAYK,GAAG,GACzB,GAAIrN,IAAOsiB,IAAmBv9E,EAAI29E,EAAYhoG,IAASqqB,EAAI49E,EAAwBjoG,GAAnF,CACA,IAAIg3F,EAAaxE,EAA+BlN,EAAItlF,GAIpD,OAHIg3F,IAAc3sE,EAAI29E,EAAYhoG,IAAUqqB,EAAIi7D,EAAImiB,IAAWniB,EAAGmiB,GAAQznG,KACxEg3F,EAAW7F,YAAa,GAEnB6F,IAGLmS,GAAuB,SAA6BzW,GACtD,IAAI0W,EAAQrX,EAA0BD,EAAgBY,IAClDxyF,EAAS,GAIb,OAHAo1F,EAAS8T,GAAO,SAAUppG,GACnBqqB,EAAI29E,EAAYhoG,IAASqqB,EAAIqtE,EAAY13F,IAAME,EAAO+I,KAAKjJ,MAE3DE,GAGL4oG,GAAyB,SAA+BpW,GAC1D,IAAI2W,EAAsB3W,IAAMkV,EAC5BwB,EAAQrX,EAA0BsX,EAAsBpB,EAAyBnW,EAAgBY,IACjGxyF,EAAS,GAMb,OALAo1F,EAAS8T,GAAO,SAAUppG,IACpBqqB,EAAI29E,EAAYhoG,IAAUqpG,IAAuBh/E,EAAIu9E,EAAiB5nG,IACxEE,EAAO+I,KAAK++F,EAAWhoG,OAGpBE,GAkHT,GA7GK+mG,IACHY,EAAU,WACR,GAAI1rG,gBAAgB0rG,EAAS,MAAM/xE,UAAU,+BAC7C,IAAIqkB,EAAe70C,UAAUC,aAA2Bka,IAAjBna,UAAU,GAA+Bob,OAAOpb,UAAU,SAA7Bma,EAChE/V,EAAM69F,EAAIptD,GACVmvD,EAAS,SAAUznG,GACjB1F,OAASyrG,GAAiB0B,EAAO5kG,KAAKujG,EAAwBpmG,GAC9DwoB,EAAIluB,KAAMsrG,IAAWp9E,EAAIluB,KAAKsrG,GAAS/9F,KAAMvN,KAAKsrG,GAAQ/9F,IAAO,GACrE8+F,GAAoBrsG,KAAMuN,EAAK2oF,EAAyB,EAAGxwF,KAG7D,OADIswF,GAAemW,IAAYE,GAAoBZ,EAAiBl+F,EAAK,CAAE+uF,cAAc,EAAM12F,IAAKunG,IAC7Fx+B,GAAKphE,EAAKywC,IAGnBq8C,EAASqR,EAAQ7G,GAAY,YAAY,WACvC,OAAO5H,EAAiBj9F,MAAMuN,OAGhC8sF,EAASqR,EAAS,iBAAiB,SAAU1tD,GAC3C,OAAO2wB,GAAKy8B,EAAIptD,GAAcA,MAGhCi4C,EAA2B7zE,EAAIwqF,GAC/BzQ,EAAqB/5E,EAAIoqF,GACzBtB,EAA+B9oF,EAAI2qF,GACnC9K,EAA0B7/E,EAAI6oF,EAA4B7oF,EAAI4qF,GAC9D9K,EAA4B9/E,EAAIuqF,GAEhCnI,EAA6BpiF,EAAI,SAAU9d,GACzC,OAAOqqE,GAAK4mB,EAAgBjxF,GAAOA,IAGjC0xF,IAEFmU,EAAqBuB,EAAQ7G,GAAY,cAAe,CACtDvI,cAAc,EACd32F,IAAK,WACH,OAAOs3F,EAAiBj9F,MAAMg+C,eAG7B8jD,GACHzH,EAASoR,EAAiB,uBAAwBmB,GAAuB,CAAExjE,QAAQ,MAKzF/2B,EAAE,CAAEvS,QAAQ,EAAM6uE,MAAM,EAAMwsB,QAAS2P,EAAe1P,MAAO0P,GAAiB,CAC5E7V,OAAQyW,IAGVvS,EAASsD,EAAWwP,KAAwB,SAAU3nG,GACpD+mG,EAAsB/mG,MAGxB+N,EAAE,CAAE2E,OAAQu0F,EAAQtQ,MAAM,EAAME,QAAS2P,GAAiB,CAGxD,IAAO,SAAUjnG,GACf,IAAI4L,EAAS8U,OAAO1gB,GACpB,GAAIqqB,EAAI69E,GAAwBt8F,GAAS,OAAOs8F,GAAuBt8F,GACvE,IAAI8B,EAASm6F,EAAQj8F,GAGrB,OAFAs8F,GAAuBt8F,GAAU8B,EACjCy6F,GAAuBz6F,GAAU9B,EAC1B8B,GAIT67F,OAAQ,SAAgBC,GACtB,IAAKd,GAASc,GAAM,MAAM1zE,UAAU0zE,EAAM,oBAC1C,GAAIn/E,EAAI89E,GAAwBqB,GAAM,OAAOrB,GAAuBqB,IAEtEC,UAAW,WAAcnB,IAAa,GACtCoB,UAAW,WAAcpB,IAAa,KAGxC95F,EAAE,CAAE2E,OAAQ,SAAUikF,MAAM,EAAME,QAAS2P,EAAe1P,MAAOpF,GAAe,CAG9E9/E,OAAQ22F,GAGR9X,eAAgByX,GAGhB9P,iBAAkB+P,GAGlBnW,yBAA0ByW,KAG5B16F,EAAE,CAAE2E,OAAQ,SAAUikF,MAAM,EAAME,QAAS2P,GAAiB,CAG1DhV,oBAAqBkX,GAGrBhP,sBAAuB2O,KAKzBt6F,EAAE,CAAE2E,OAAQ,SAAUikF,MAAM,EAAME,OAAQ1E,GAAM,WAAcyL,EAA4B9/E,EAAE,OAAU,CACpG47E,sBAAuB,SAA+B7U,GACpD,OAAO+Y,EAA4B9/E,EAAEq9E,EAAStW,OAM9CwiB,EAAY,CACd,IAAI6B,IAAyB1C,GAAiBrU,GAAM,WAClD,IAAIllF,EAASm6F,IAEb,MAA+B,UAAxBC,EAAW,CAACp6F,KAEe,MAA7Bo6F,EAAW,CAAE7qF,EAAGvP,KAEc,MAA9Bo6F,EAAWvjG,OAAOmJ,OAGzBc,EAAE,CAAE2E,OAAQ,OAAQikF,MAAM,EAAME,OAAQqS,IAAyB,CAE/DhiG,UAAW,SAAmB29E,EAAI6X,EAAUhxE,GAC1C,IAEIy9E,EAFA5gG,EAAO,CAACs8E,GACR38E,EAAQ,EAEZ,MAAOrD,UAAUC,OAASoD,EAAOK,EAAKC,KAAK3D,UAAUqD,MAErD,GADAihG,EAAYzM,GACPpE,EAASoE,SAAoB19E,IAAP6lE,KAAoBojB,GAASpjB,GAMxD,OALKx3D,EAAQqvE,KAAWA,EAAW,SAAUn9F,EAAK6B,GAEhD,GADwB,mBAAb+nG,IAAyB/nG,EAAQ+nG,EAAUllG,KAAKvI,KAAM6D,EAAK6B,KACjE6mG,GAAS7mG,GAAQ,OAAOA,IAE/BmH,EAAK,GAAKm0F,EACH2K,EAAWz+F,MAAM,KAAML,MAO/B6+F,EAAQ7G,GAAW2G,IACtBzS,EAA4B2S,EAAQ7G,GAAY2G,EAAcE,EAAQ7G,GAAW6I,SAInF5H,EAAe4F,EAASH,GAExBhQ,EAAW+P,IAAU,GAKf,KACA,SAAUtjC,EAAQC,EAASF,GAEjC,IAAI11D,EAAI01D,EAAoB,QACxBx7D,EAAOw7D,EAAoB,QAC3B4lC,EAA8B5lC,EAAoB,QAElD6lC,GAAuBD,GAA4B,SAAUE,GAC/D7gG,MAAMT,KAAKshG,MAKbx7F,EAAE,CAAE2E,OAAQ,QAASikF,MAAM,EAAME,OAAQyS,GAAuB,CAC9DrhG,KAAMA,KAMF,KACA,SAAUy7D,EAAQC,EAASF,GAEjC,aAEA,IAAI0uB,EAAQ1uB,EAAoB,QAEhCC,EAAOC,QAAU,SAAUgyB,EAAaoG,GACtC,IAAIja,EAAS,GAAG6T,GAChB,QAAS7T,GAAUqQ,GAAM,WAEvBrQ,EAAO79E,KAAK,KAAM83F,GAAY,WAAc,MAAM,GAAM,QAOtD,KACA,SAAUr4B,EAAQC,GAExB,IAAItqC,EAAOh3B,KAAKg3B,KACZiD,EAAQj6B,KAAKi6B,MAIjBonC,EAAOC,QAAU,SAAUo4B,GACzB,OAAO/2C,MAAM+2C,GAAYA,GAAY,GAAKA,EAAW,EAAIz/D,EAAQjD,GAAM0iE,KAMnE,KACA,SAAUr4B,EAAQC,EAASF,GAEjC,aAEA,IAAIiuB,EAAcjuB,EAAoB,QAClCjoE,EAASioE,EAAoB,QAC7ByyB,EAAWzyB,EAAoB,QAC/BsyB,EAAWtyB,EAAoB,QAC/B75C,EAAM65C,EAAoB,QAC1B6wB,EAAU7wB,EAAoB,QAC9Bo2B,EAAoBp2B,EAAoB,QACxCouB,EAAcpuB,EAAoB,QAClC0uB,EAAQ1uB,EAAoB,QAC5B7xD,EAAS6xD,EAAoB,QAC7B+tB,EAAsB/tB,EAAoB,QAAQ3lD,EAClDk0E,EAA2BvuB,EAAoB,QAAQ3lD,EACvD2yE,EAAiBhtB,EAAoB,QAAQ3lD,EAC7CnN,EAAO8yD,EAAoB,QAAQ9yD,KAEnC64F,EAAS,SACTC,EAAejuG,EAAOguG,GACtBE,EAAkBD,EAAa1lG,UAG/B4lG,EAAiBrV,EAAQ1iF,EAAO83F,KAAqBF,EAIrDI,EAAW,SAAU7N,GACvB,IACI4C,EAAOkL,EAAOC,EAAOC,EAASC,EAAQllG,EAAQoD,EAAO/B,EADrD0+E,EAAKgN,EAAYkK,GAAU,GAE/B,GAAiB,iBAANlX,GAAkBA,EAAG//E,OAAS,EAGvC,GAFA+/E,EAAKl0E,EAAKk0E,GACV8Z,EAAQ9Z,EAAGt0D,WAAW,GACR,KAAVouE,GAA0B,KAAVA,GAElB,GADAkL,EAAQhlB,EAAGt0D,WAAW,GACR,KAAVs5E,GAA0B,MAAVA,EAAe,OAAOI,SACrC,GAAc,KAAVtL,EAAc,CACvB,OAAQ9Z,EAAGt0D,WAAW,IACpB,KAAK,GAAI,KAAK,GAAIu5E,EAAQ,EAAGC,EAAU,GAAI,MAC3C,KAAK,GAAI,KAAK,IAAKD,EAAQ,EAAGC,EAAU,GAAI,MAC5C,QAAS,OAAQllB,EAInB,IAFAmlB,EAASnlB,EAAG18E,MAAM,GAClBrD,EAASklG,EAAOllG,OACXoD,EAAQ,EAAGA,EAAQpD,EAAQoD,IAI9B,GAHA/B,EAAO6jG,EAAOz5E,WAAWroB,GAGrB/B,EAAO,IAAMA,EAAO4jG,EAAS,OAAOE,IACxC,OAAOxpG,SAASupG,EAAQF,GAE5B,OAAQjlB,GAKZ,GAAIqR,EAASsT,GAASC,EAAa,UAAYA,EAAa,QAAUA,EAAa,SAAU,CAS3F,IARA,IAcqBlqG,EAdjB2qG,EAAgB,SAAgB9oG,GAClC,IAAIyjF,EAAKhgF,UAAUC,OAAS,EAAI,EAAI1D,EAChC0+F,EAAQpkG,KACZ,OAAOokG,aAAiBoK,IAElBP,EAAiBxX,GAAM,WAAcuX,EAAgBN,QAAQnlG,KAAK67F,MAAaxL,EAAQwL,IAAU0J,GACjG3P,EAAkB,IAAI4P,EAAaG,EAAS/kB,IAAMib,EAAOoK,GAAiBN,EAAS/kB,IAElFtjE,EAAOmwE,EAAcF,EAAoBiY,GAAgB,6KAMhE1tG,MAAM,KAAM4L,EAAI,EAAQ4Z,EAAKzc,OAAS6C,EAAGA,IACrCiiB,EAAI6/E,EAAclqG,EAAMgiB,EAAK5Z,MAAQiiB,EAAIsgF,EAAe3qG,IAC1DkxF,EAAeyZ,EAAe3qG,EAAKyyF,EAAyByX,EAAclqG,IAG9E2qG,EAAcnmG,UAAY2lG,EAC1BA,EAAgB1pF,YAAckqF,EAC9BnU,EAASv6F,EAAQguG,EAAQU,KAMrB,KACA,SAAUxmC,EAAQymC,EAAqB1mC,GAE7C,aACqB,IAAI2mC,EAAka3mC,EAAoB,QACtb4mC,EAAub5mC,EAAoBtkE,EAAEirG,GAE3ZC,EAAya,GAI9e,KACA,SAAU3mC,EAAQC,EAASF,GAEjC,IAAIwtB,EAAkBxtB,EAAoB,QAEtCy1B,EAAQjI,EAAgB,SAE5BvtB,EAAOC,QAAU,SAAUgyB,GACzB,IAAI7B,EAAS,IACb,IACE,MAAM6B,GAAa7B,GACnB,MAAOjkF,GACP,IAEE,OADAikF,EAAOoF,IAAS,EACT,MAAMvD,GAAa7B,GAC1B,MAAOh2E,KACT,OAAO,IAML,KACA,SAAU4lD,EAAQC,EAASF,GAEjC,aAEA,IAAI11D,EAAI01D,EAAoB,QACxB1kE,EAAO0kE,EAAoB,QAE/B11D,EAAE,CAAE2E,OAAQ,SAAU0kF,OAAO,EAAMP,OAAQ,IAAI93F,OAASA,GAAQ,CAC9DA,KAAMA,KAMF,KACA,SAAU2kE,EAAQC,EAASF,GAEjC,aAEA,IAAI6uB,EAAW7uB,EAAoB,QAInCC,EAAOC,QAAU,WACf,IAAIytB,EAAOkB,EAAS52F,MAChB+D,EAAS,GAOb,OANI2xF,EAAK51F,SAAQiE,GAAU,KACvB2xF,EAAKoC,aAAY/zF,GAAU,KAC3B2xF,EAAK5hF,YAAW/P,GAAU,KAC1B2xF,EAAKkZ,SAAQ7qG,GAAU,KACvB2xF,EAAKqC,UAASh0F,GAAU,KACxB2xF,EAAKsC,SAAQj0F,GAAU,KACpBA,IAMH,KACA,SAAUikE,EAAQC,EAASF,GAEjC,IAAIiuB,EAAcjuB,EAAoB,QAClC0uB,EAAQ1uB,EAAoB,QAC5B75C,EAAM65C,EAAoB,QAE1BgtB,EAAiB3sF,OAAO2sF,eACxBve,EAAQ,GAERq4B,EAAU,SAAU1lB,GAAM,MAAMA,GAEpCnhB,EAAOC,QAAU,SAAUgyB,EAAaQ,GACtC,GAAIvsE,EAAIsoD,EAAOyjB,GAAc,OAAOzjB,EAAMyjB,GACrCQ,IAASA,EAAU,IACxB,IAAIrU,EAAS,GAAG6T,GACZuQ,IAAYt8E,EAAIusE,EAAS,cAAeA,EAAQ+P,UAChDsE,EAAY5gF,EAAIusE,EAAS,GAAKA,EAAQ,GAAKoU,EAC3CE,EAAY7gF,EAAIusE,EAAS,GAAKA,EAAQ,QAAKn3E,EAE/C,OAAOkzD,EAAMyjB,KAAiB7T,IAAWqQ,GAAM,WAC7C,GAAI+T,IAAcxU,EAAa,OAAO,EACtC,IAAIO,EAAI,CAAEntF,QAAS,GAEfohG,EAAWzV,EAAewB,EAAG,EAAG,CAAEvB,YAAY,EAAMrvF,IAAKkpG,IACxDtY,EAAE,GAAK,EAEZnQ,EAAO79E,KAAKguF,EAAGuY,EAAWC,QAOxB,KACA,SAAU/mC,EAAQC,EAASF,GAEjC,aAEA,IAaIi+B,EAAmBgJ,EAAmCC,EAbtDpJ,EAAiB99B,EAAoB,QACrCgxB,EAA8BhxB,EAAoB,QAClD75C,EAAM65C,EAAoB,QAC1BwtB,EAAkBxtB,EAAoB,QACtC+5B,EAAU/5B,EAAoB,QAE9B2xB,EAAWnE,EAAgB,YAC3B0Q,GAAyB,EAEzBI,EAAa,WAAc,OAAOrmG,MAMlC,GAAG6lB,OACLopF,EAAgB,GAAGppF,OAEb,SAAUopF,GAEdD,EAAoCnJ,EAAeA,EAAeoJ,IAC9DD,IAAsC5mG,OAAOC,YAAW29F,EAAoBgJ,IAHlD/I,GAAyB,QAOlC3iF,GAArB0iF,IAAgCA,EAAoB,IAGnDlE,GAAY5zE,EAAI83E,EAAmBtM,IACtCX,EAA4BiN,EAAmBtM,EAAU2M,GAG3Dr+B,EAAOC,QAAU,CACf+9B,kBAAmBA,EACnBC,uBAAwBA,IAMpB,KACA,SAAUj+B,EAAQC,EAASF,GAEjC,aAEA,IAAImnC,EAAwBnnC,EAAoB,QAC5C6wB,EAAU7wB,EAAoB,QAIlCC,EAAOC,QAAUinC,EAAwB,GAAG5mG,SAAW,WACrD,MAAO,WAAaswF,EAAQ54F,MAAQ,MAMhC,KACA,SAAUgoE,EAAQC,EAASF,GAEjC,IAAIiuB,EAAcjuB,EAAoB,QAClCgtB,EAAiBhtB,EAAoB,QAAQ3lD,EAE7C+sF,EAAoBpmE,SAAS1gC,UAC7B+mG,EAA4BD,EAAkB7mG,SAC9C+mG,EAAS,wBACT5K,EAAO,OAIPzO,KAAiByO,KAAQ0K,IAC3Bpa,EAAeoa,EAAmB1K,EAAM,CACtCnI,cAAc,EACd32F,IAAK,WACH,IACE,OAAOypG,EAA0B7mG,KAAKvI,MAAM8E,MAAMuqG,GAAQ,GAC1D,MAAOhzE,GACP,MAAO,QAST,KACA,SAAU2rC,EAAQC,EAASF,GAEjC,IAAIjoE,EAASioE,EAAoB,QAC7BojC,EAASpjC,EAAoB,QAC7B75C,EAAM65C,EAAoB,QAC1BqjC,EAAMrjC,EAAoB,QAC1B+iC,EAAgB/iC,EAAoB,QACpCgjC,EAAoBhjC,EAAoB,QAExCkkC,EAAwBd,EAAO,OAC/BlW,EAASn1F,EAAOm1F,OAChBqa,EAAwBvE,EAAoB9V,EAASA,GAAUA,EAAOsa,eAAiBnE,EAE3FpjC,EAAOC,QAAU,SAAU3jE,GAIvB,OAHG4pB,EAAI+9E,EAAuB3nG,KAC1BwmG,GAAiB58E,EAAI+mE,EAAQ3wF,GAAO2nG,EAAsB3nG,GAAQ2wF,EAAO3wF,GACxE2nG,EAAsB3nG,GAAQgrG,EAAsB,UAAYhrG,IAC9D2nG,EAAsB3nG,KAM3B,KACA,SAAU0jE,EAAQC,EAASF,GAEjC,IAAI11D,EAAI01D,EAAoB,QACxB03B,EAAW13B,EAAoB,QAC/BynC,EAAaznC,EAAoB,QACjC0uB,EAAQ1uB,EAAoB,QAE5B0nC,EAAsBhZ,GAAM,WAAc+Y,EAAW,MAIzDn9F,EAAE,CAAE2E,OAAQ,SAAUikF,MAAM,EAAME,OAAQsU,GAAuB,CAC/D5pF,KAAM,SAAcsjE,GAClB,OAAOqmB,EAAW/P,EAAStW,QAOzB,KACA,SAAUnhB,EAAQC,EAASF,GAEjC,IAAItkD,EAAOskD,EAAoB,QAC3B26B,EAAgB36B,EAAoB,QACpC03B,EAAW13B,EAAoB,QAC/BivB,EAAWjvB,EAAoB,QAC/B0hC,EAAqB1hC,EAAoB,QAEzCj7D,EAAO,GAAGA,KAGVoyF,EAAe,SAAUqD,GAC3B,IAAImN,EAAiB,GAARnN,EACToN,EAAoB,GAARpN,EACZqN,EAAkB,GAARrN,EACVsN,EAAmB,GAARtN,EACXuN,EAAwB,GAARvN,EAChBwN,EAAmB,GAARxN,GAAauN,EAC5B,OAAO,SAAU1Q,EAAO5F,EAAY9D,EAAMsa,GASxC,IARA,IAOItqG,EAAO3B,EAPPwyF,EAAIkJ,EAASL,GACb73F,EAAOm7F,EAAcnM,GACrB0Z,EAAgBxsF,EAAK+1E,EAAY9D,EAAM,GACvCtsF,EAAS4tF,EAASzvF,EAAK6B,QACvBoD,EAAQ,EACR0J,EAAS85F,GAAkBvG,EAC3BzyF,EAAS04F,EAASx5F,EAAOkpF,EAAOh2F,GAAUumG,EAAYz5F,EAAOkpF,EAAO,QAAK97E,EAEvEla,EAASoD,EAAOA,IAAS,IAAIujG,GAAYvjG,KAASjF,KACtD7B,EAAQ6B,EAAKiF,GACbzI,EAASksG,EAAcvqG,EAAO8G,EAAO+pF,GACjCgM,GACF,GAAImN,EAAQ14F,EAAOxK,GAASzI,OACvB,GAAIA,EAAQ,OAAQw+F,GACvB,KAAK,EAAG,OAAO,EACf,KAAK,EAAG,OAAO78F,EACf,KAAK,EAAG,OAAO8G,EACf,KAAK,EAAGM,EAAKvE,KAAKyO,EAAQtR,QACrB,GAAImqG,EAAU,OAAO,EAGhC,OAAOC,GAAiB,EAAIF,GAAWC,EAAWA,EAAW74F,IAIjEgxD,EAAOC,QAAU,CAGfh2C,QAASitE,EAAa,GAGtBj3F,IAAKi3F,EAAa,GAGlBtqF,OAAQsqF,EAAa,GAGrBl7E,KAAMk7E,EAAa,GAGnBgR,MAAOhR,EAAa,GAGpB5pF,KAAM4pF,EAAa,GAGnB73B,UAAW63B,EAAa,KAMpB,KACA,SAAUl3B,EAAQC,EAASF,GAEjC,IAAI60B,EAAW70B,EAAoB,QAMnCC,EAAOC,QAAU,SAAUpjE,EAAOsrG,GAChC,IAAKvT,EAAS/3F,GAAQ,OAAOA,EAC7B,IAAIid,EAAIwZ,EACR,GAAI60E,GAAoD,mBAAxBruF,EAAKjd,EAAMyD,YAA4Bs0F,EAASthE,EAAMxZ,EAAGvZ,KAAK1D,IAAS,OAAOy2B,EAC9G,GAAmC,mBAAvBxZ,EAAKjd,EAAM6oG,WAA2B9Q,EAASthE,EAAMxZ,EAAGvZ,KAAK1D,IAAS,OAAOy2B,EACzF,IAAK60E,GAAoD,mBAAxBruF,EAAKjd,EAAMyD,YAA4Bs0F,EAASthE,EAAMxZ,EAAGvZ,KAAK1D,IAAS,OAAOy2B,EAC/G,MAAM3B,UAAU,6CAMZ,KACA,SAAUquC,EAAQC,GAExBD,EAAOC,SAAU,GAKX,KACA,SAAUD,EAAQC,GAExB,IAAI3/D,EAAW,GAAGA,SAElB0/D,EAAOC,QAAU,SAAUkhB,GACzB,OAAO7gF,EAASC,KAAK4gF,GAAI18E,MAAM,GAAI,KAM/B,KACA,SAAUu7D,EAAQC,EAASF,GAEjC,IAAIjoE,EAASioE,EAAoB,QAC7BuyB,EAAYvyB,EAAoB,QAEhCqoC,EAAS,qBACTrO,EAAQjiG,EAAOswG,IAAW9V,EAAU8V,EAAQ,IAEhDpoC,EAAOC,QAAU85B,GAKX,KACA,SAAU/5B,EAAQC,EAASF,GAEjC,aAEA,IAAI11D,EAAI01D,EAAoB,QACxBsoC,EAAatoC,EAAoB,QAAQV,UACzCipC,EAAmBvoC,EAAoB,QACvCsxB,EAA0BtxB,EAAoB,QAE9CwoC,EAAa,YACbC,GAAc,EAEdjX,EAAiBF,EAAwBkX,GAGzCA,IAAc,IAAIvjG,MAAM,GAAGujG,IAAY,WAAcC,GAAc,KAIvEn+F,EAAE,CAAE2E,OAAQ,QAAS0kF,OAAO,EAAMP,OAAQqV,IAAgBjX,GAAkB,CAC1ElyB,UAAW,SAAmBmyB,GAC5B,OAAO6W,EAAWrwG,KAAMw5F,EAAYrwF,UAAUC,OAAS,EAAID,UAAU,QAAKma,MAK9EgtF,EAAiBC,IAKX,KACA,SAAUvoC,EAAQC,GAExB,IAAI7lC,EAGJA,EAAI,WACH,OAAOpiC,KADJ,GAIJ,IAECoiC,EAAIA,GAAK,IAAI2G,SAAS,cAAb,GACR,MAAO50B,GAEc,kBAAXhN,SAAqBi7B,EAAIj7B,QAOrC6gE,EAAOC,QAAU7lC,GAKX,KACA,SAAU4lC,EAAQC,EAASF,GAEjC,IAAI0uB,EAAQ1uB,EAAoB,QAC5Bo6B,EAAcp6B,EAAoB,QAElC0oC,EAAM,MAIVzoC,EAAOC,QAAU,SAAUgyB,GACzB,OAAOxD,GAAM,WACX,QAAS0L,EAAYlI,MAAkBwW,EAAIxW,MAAkBwW,GAAOtO,EAAYlI,GAAa31F,OAAS21F,OAOpG,KACA,SAAUjyB,EAAQC,EAASF,GAEjC,aAEA,IAAI11D,EAAI01D,EAAoB,QACxB2oC,EAAW3oC,EAAoB,QAAQ75D,QACvCkrF,EAAsBrxB,EAAoB,QAC1CsxB,EAA0BtxB,EAAoB,QAE9CpjD,EAAgB,GAAGzW,QAEnByiG,IAAkBhsF,GAAiB,EAAI,CAAC,GAAGzW,QAAQ,GAAI,GAAK,EAC5DorF,EAAgBF,EAAoB,WACpCG,EAAiBF,EAAwB,UAAW,CAAEmR,WAAW,EAAM9qF,EAAG,IAI9ErN,EAAE,CAAE2E,OAAQ,QAAS0kF,OAAO,EAAMP,OAAQwV,IAAkBrX,IAAkBC,GAAkB,CAC9FrrF,QAAS,SAAiB0iG,GACxB,OAAOD,EAEHhsF,EAAczX,MAAMlN,KAAMmJ,YAAc,EACxCunG,EAAS1wG,KAAM4wG,EAAeznG,UAAUC,OAAS,EAAID,UAAU,QAAKma,OAOtE,KACA,SAAU0kD,EAAQC,EAASF,GAEjC,IAAI75C,EAAM65C,EAAoB,QAC1B4tB,EAAkB5tB,EAAoB,QACtC75D,EAAU65D,EAAoB,QAAQ75D,QACtCqtF,EAAaxzB,EAAoB,QAErCC,EAAOC,QAAU,SAAUqtB,EAAQ2X,GACjC,IAGIppG,EAHA0yF,EAAIZ,EAAgBL,GACpB5rF,EAAI,EACJ3F,EAAS,GAEb,IAAKF,KAAO0yF,GAAIroE,EAAIqtE,EAAY13F,IAAQqqB,EAAIqoE,EAAG1yF,IAAQE,EAAO+I,KAAKjJ,GAEnE,MAAOopG,EAAM7jG,OAASM,EAAOwkB,EAAIqoE,EAAG1yF,EAAMopG,EAAMvjG,SAC7CwE,EAAQnK,EAAQF,IAAQE,EAAO+I,KAAKjJ,IAEvC,OAAOE,IAMH,KACA,SAAUikE,EAAQC,EAASF,GAEjC,aAEA,IAAI11D,EAAI01D,EAAoB,QACxB8oC,EAAY9oC,EAAoB,QAAQ4zB,SACxC2U,EAAmBvoC,EAAoB,QACvCsxB,EAA0BtxB,EAAoB,QAE9CwxB,EAAiBF,EAAwB,UAAW,CAAEmR,WAAW,EAAM9qF,EAAG,IAI9ErN,EAAE,CAAE2E,OAAQ,QAAS0kF,OAAO,EAAMP,QAAS5B,GAAkB,CAC3DoC,SAAU,SAAkBvjF,GAC1B,OAAOy4F,EAAU7wG,KAAMoY,EAAIjP,UAAUC,OAAS,EAAID,UAAU,QAAKma,MAKrEgtF,EAAiB,aAKX,KACA,SAAUtoC,EAAQC,EAASF,GAEjC,IAAIjoE,EAASioE,EAAoB,QAC7B60B,EAAW70B,EAAoB,QAE/Bh+D,EAAWjK,EAAOiK,SAElB+mG,EAASlU,EAAS7yF,IAAa6yF,EAAS7yF,EAAS8uB,eAErDmvC,EAAOC,QAAU,SAAUkhB,GACzB,OAAO2nB,EAAS/mG,EAAS8uB,cAAcswD,GAAM,KAMzC,KACA,SAAUnhB,EAAQC,EAASF,GAEjC,IAAI11D,EAAI01D,EAAoB,QACxB66B,EAAS76B,EAAoB,QAIjC11D,EAAE,CAAE2E,OAAQ,SAAUikF,MAAM,EAAME,OAAQ/yF,OAAOw6F,SAAWA,GAAU,CACpEA,OAAQA,KAMJ,KACA,SAAU56B,EAAQC,EAASF,GAEjC,IAAIjoE,EAASioE,EAAoB,QAC7BgxB,EAA8BhxB,EAAoB,QAEtDC,EAAOC,QAAU,SAAUpkE,EAAK6B,GAC9B,IACEqzF,EAA4Bj5F,EAAQ+D,EAAK6B,GACzC,MAAO22B,GACPv8B,EAAO+D,GAAO6B,EACd,OAAOA,IAML,KACA,SAAUsiE,EAAQC,GAExBD,EAAOC,QAAU,IAKX,KACA,SAAUD,EAAQC,GAExBD,EAAOC,QAAU,SAAU5kE,GACzB,IACE,QAASA,IACT,MAAOg5B,GACP,OAAO,KAOL,KACA,SAAU2rC,EAAQC,EAASF,GAEjC,IAAI/+B,EAAO++B,EAAoB,QAC3BjoE,EAASioE,EAAoB,QAE7B0tB,EAAY,SAAUzkF,GACxB,MAA0B,mBAAZA,EAAyBA,OAAWsS,GAGpD0kD,EAAOC,QAAU,SAAUp5D,EAAWu3E,GACpC,OAAOj9E,UAAUC,OAAS,EAAIqsF,EAAUzsD,EAAKn6B,KAAe4mF,EAAU31F,EAAO+O,IACzEm6B,EAAKn6B,IAAcm6B,EAAKn6B,GAAWu3E,IAAWtmF,EAAO+O,IAAc/O,EAAO+O,GAAWu3E,KAMrF,KACA,SAAUpe,EAAQC,EAASF,GAEjC,aAEA,IAAI6jC,EAA6B,GAAGvO,qBAChC/G,EAA2BluF,OAAOkuF,yBAGlCya,EAAcza,IAA6BsV,EAA2BrjG,KAAK,CAAEmX,EAAG,GAAK,GAIzFuoD,EAAQ7lD,EAAI2uF,EAAc,SAA8BjE,GACtD,IAAIjS,EAAavE,EAAyBt2F,KAAM8sG,GAChD,QAASjS,GAAcA,EAAW7F,YAChC4W,GAKE,KACA,SAAU5jC,EAAQC,EAASF,GAEjC,IAAIsjC,EAAwBtjC,EAAoB,QAIhDsjC,EAAsB,aAKhB,KACA,SAAUrjC,EAAQC,EAASF,GAEjC,IAAI6uB,EAAW7uB,EAAoB,QAC/BipC,EAAqBjpC,EAAoB,QAM7CC,EAAOC,QAAU7/D,OAAO+7F,iBAAmB,aAAe,GAAK,WAC7D,IAEIgJ,EAFA8D,GAAiB,EACjB5mG,EAAO,GAEX,IACE8iG,EAAS/kG,OAAOkuF,yBAAyBluF,OAAOC,UAAW,aAAazC,IACxEunG,EAAO5kG,KAAK8B,EAAM,IAClB4mG,EAAiB5mG,aAAgB2C,MACjC,MAAOqvB,IACT,OAAO,SAAwBk6D,EAAGmF,GAKhC,OAJA9E,EAASL,GACTya,EAAmBtV,GACfuV,EAAgB9D,EAAO5kG,KAAKguF,EAAGmF,GAC9BnF,EAAE2a,UAAYxV,EACZnF,GAdoD,QAgBzDjzE,IAKA,KACA,SAAU0kD,EAAQC,EAASF,GAEjC,IAAImnC,EAAwBnnC,EAAoB,QAC5CsyB,EAAWtyB,EAAoB,QAC/Bz/D,EAAWy/D,EAAoB,QAI9BmnC,GACH7U,EAASjyF,OAAOC,UAAW,WAAYC,EAAU,CAAE8gC,QAAQ,KAMvD,KACA,SAAU4+B,EAAQC,EAASF,GAEjC,IAAIgtB,EAAiBhtB,EAAoB,QAAQ3lD,EAC7C8L,EAAM65C,EAAoB,QAC1BwtB,EAAkBxtB,EAAoB,QAEtCytB,EAAgBD,EAAgB,eAEpCvtB,EAAOC,QAAU,SAAUkhB,EAAIgoB,EAAKnW,GAC9B7R,IAAOj7D,EAAIi7D,EAAK6R,EAAS7R,EAAKA,EAAG9gF,UAAWmtF,IAC9CT,EAAe5L,EAAIqM,EAAe,CAAE8G,cAAc,EAAM52F,MAAOyrG,MAO7D,KACA,SAAUnpC,EAAQC,EAASF,GAEjC,aAGAA,EAAoB,QACpB,IAAIsyB,EAAWtyB,EAAoB,QAC/B0uB,EAAQ1uB,EAAoB,QAC5BwtB,EAAkBxtB,EAAoB,QACtCmvB,EAAanvB,EAAoB,QACjCgxB,EAA8BhxB,EAAoB,QAElDiyB,EAAUzE,EAAgB,WAE1B6b,GAAiC3a,GAAM,WAIzC,IAAIwS,EAAK,IAMT,OALAA,EAAG5lG,KAAO,WACR,IAAIU,EAAS,GAEb,OADAA,EAAOy9F,OAAS,CAAE1gF,EAAG,KACd/c,GAEyB,MAA3B,GAAGmE,QAAQ+gG,EAAI,WAKpBrI,EAAmB,WACrB,MAAkC,OAA3B,IAAI14F,QAAQ,IAAK,MADH,GAInBu4F,EAAUlL,EAAgB,WAE1BoL,EAA+C,WACjD,QAAI,IAAIF,IAC6B,KAA5B,IAAIA,GAAS,IAAK,MAFsB,GAS/C4Q,GAAqC5a,GAAM,WAC7C,IAAIwS,EAAK,OACLqI,EAAerI,EAAG5lG,KACtB4lG,EAAG5lG,KAAO,WAAc,OAAOiuG,EAAapkG,MAAMlN,KAAMmJ,YACxD,IAAIpF,EAAS,KAAK1D,MAAM4oG,GACxB,OAAyB,IAAlBllG,EAAOqF,QAA8B,MAAdrF,EAAO,IAA4B,MAAdA,EAAO,MAG5DikE,EAAOC,QAAU,SAAU2+B,EAAKx9F,EAAQ/F,EAAM+3F,GAC5C,IAAImQ,EAAShW,EAAgBqR,GAEzB2K,GAAuB9a,GAAM,WAE/B,IAAIF,EAAI,GAER,OADAA,EAAEgV,GAAU,WAAc,OAAO,GACZ,GAAd,GAAG3E,GAAKrQ,MAGbib,EAAoBD,IAAwB9a,GAAM,WAEpD,IAAIgb,GAAa,EACbxI,EAAK,IAkBT,MAhBY,UAARrC,IAIFqC,EAAK,GAGLA,EAAG3kF,YAAc,GACjB2kF,EAAG3kF,YAAY01E,GAAW,WAAc,OAAOiP,GAC/CA,EAAGpR,MAAQ,GACXoR,EAAGsC,GAAU,IAAIA,IAGnBtC,EAAG5lG,KAAO,WAAiC,OAAnBouG,GAAa,EAAa,MAElDxI,EAAGsC,GAAQ,KACHkG,KAGV,IACGF,IACAC,GACQ,YAAR5K,KACCwK,IACAxQ,GACCD,IAEM,UAARiG,IAAoByK,EACrB,CACA,IAAIK,EAAqB,IAAInG,GACzB5E,EAAUtjG,EAAKkoG,EAAQ,GAAG3E,IAAM,SAAU+K,EAAcvZ,EAAQ/rF,EAAKiC,EAAMsjG,GAC7E,OAAIxZ,EAAO/0F,OAAS6zF,EACdqa,IAAwBK,EAInB,CAAE52E,MAAM,EAAMt1B,MAAOgsG,EAAmBnpG,KAAK6vF,EAAQ/rF,EAAKiC,IAE5D,CAAE0sB,MAAM,EAAMt1B,MAAOisG,EAAappG,KAAK8D,EAAK+rF,EAAQ9pF,IAEtD,CAAE0sB,MAAM,KACd,CACD4lE,iBAAkBA,EAClBD,6CAA8CA,IAE5CkR,EAAelL,EAAQ,GACvBmL,EAAcnL,EAAQ,GAE1BtM,EAAS91E,OAAOlc,UAAWu+F,EAAKiL,GAChCxX,EAASp9C,OAAO50C,UAAWkjG,EAAkB,GAAVniG,EAG/B,SAAUqG,EAAQ8jC,GAAO,OAAOu+D,EAAYvpG,KAAKkH,EAAQzP,KAAMuzC,IAG/D,SAAU9jC,GAAU,OAAOqiG,EAAYvpG,KAAKkH,EAAQzP,QAItDo7F,GAAMrC,EAA4B97C,OAAO50C,UAAUkjG,GAAS,QAAQ,KAMpE,KACA,SAAUvjC,EAAQC,EAASF,GAEjC,aAEA,IAAI11D,EAAI01D,EAAoB,QACxBgqC,EAAOhqC,EAAoB,QAAQ9/D,IACnCs3F,EAA+Bx3B,EAAoB,QACnDsxB,EAA0BtxB,EAAoB,QAE9Cy3B,EAAsBD,EAA6B,OAEnDhG,EAAiBF,EAAwB,OAK7ChnF,EAAE,CAAE2E,OAAQ,QAAS0kF,OAAO,EAAMP,QAASqE,IAAwBjG,GAAkB,CACnFtxF,IAAK,SAAauxF,GAChB,OAAOuY,EAAK/xG,KAAMw5F,EAAYrwF,UAAUC,OAAS,EAAID,UAAU,QAAKma,OAOlE,KACA,SAAU0kD,EAAQC,EAASF,IAEL,SAASjoE,GAAS,IAAIkyG,EAAQ,SAAU7oB,GAClE,OAAOA,GAAMA,EAAGxiF,MAAQA,MAAQwiF,GAIlCnhB,EAAOC,QAEL+pC,EAA2B,iBAAdC,YAA0BA,aACvCD,EAAuB,iBAAV7qG,QAAsBA,SACnC6qG,EAAqB,iBAARzqG,MAAoBA,OACjCyqG,EAAuB,iBAAVlyG,GAAsBA,IAEnCipC,SAAS,cAATA,KAE2BxgC,KAAKvI,KAAM+nE,EAAoB,UAItD,KACA,SAAUC,EAAQC,EAASF,GAEjC,IAAIjoE,EAASioE,EAAoB,QAC7B+wB,EAAe/wB,EAAoB,QACnCmqC,EAAuBnqC,EAAoB,QAC3CgxB,EAA8BhxB,EAAoB,QAClDwtB,EAAkBxtB,EAAoB,QAEtC2xB,EAAWnE,EAAgB,YAC3BC,EAAgBD,EAAgB,eAChC4c,EAAcD,EAAqBr+F,OAEvC,IAAK,IAAImlF,KAAmBF,EAAc,CACxC,IAAIG,EAAan5F,EAAOk5F,GACpBE,EAAsBD,GAAcA,EAAW5wF,UACnD,GAAI6wF,EAAqB,CAEvB,GAAIA,EAAoBQ,KAAcyY,EAAa,IACjDpZ,EAA4BG,EAAqBQ,EAAUyY,GAC3D,MAAO91E,GACP68D,EAAoBQ,GAAYyY,EAKlC,GAHKjZ,EAAoB1D,IACvBuD,EAA4BG,EAAqB1D,EAAewD,GAE9DF,EAAaE,GAAkB,IAAK,IAAIiB,KAAeiY,EAEzD,GAAIhZ,EAAoBe,KAAiBiY,EAAqBjY,GAAc,IAC1ElB,EAA4BG,EAAqBe,EAAaiY,EAAqBjY,IACnF,MAAO59D,GACP68D,EAAoBe,GAAeiY,EAAqBjY,OAS1D,KACA,SAAUjyB,EAAQC,EAASF,GAEjC,IAAIszB,EAAqBtzB,EAAoB,QACzCuzB,EAAcvzB,EAAoB,QAItCC,EAAOC,QAAU7/D,OAAOyd,MAAQ,SAAc0wE,GAC5C,OAAO8E,EAAmB9E,EAAG+E,KAMzB,KACA,SAAUtzB,EAAQC,EAASF,GAEjC,aAIA,IAAI11D,EAAI01D,EAAoB,QACxBiuB,EAAcjuB,EAAoB,QAClCjoE,EAASioE,EAAoB,QAC7B75C,EAAM65C,EAAoB,QAC1B60B,EAAW70B,EAAoB,QAC/BgtB,EAAiBhtB,EAAoB,QAAQ3lD,EAC7Cm4E,EAA4BxyB,EAAoB,QAEhDqqC,EAAetyG,EAAOm1F,OAE1B,GAAIe,GAAsC,mBAAhBoc,MAAiC,gBAAiBA,EAAa/pG,iBAExDib,IAA/B8uF,IAAep0D,aACd,CACD,IAAIq0D,EAA8B,GAE9BC,EAAgB,WAClB,IAAIt0D,EAAc70C,UAAUC,OAAS,QAAsBka,IAAjBna,UAAU,QAAmBma,EAAYiB,OAAOpb,UAAU,IAChGpF,EAAS/D,gBAAgBsyG,EACzB,IAAIF,EAAap0D,QAED16B,IAAhB06B,EAA4Bo0D,IAAiBA,EAAap0D,GAE9D,MADoB,KAAhBA,IAAoBq0D,EAA4BtuG,IAAU,GACvDA,GAETw2F,EAA0B+X,EAAeF,GACzC,IAAIG,EAAkBD,EAAcjqG,UAAY+pG,EAAa/pG,UAC7DkqG,EAAgBjuF,YAAcguF,EAE9B,IAAIE,EAAiBD,EAAgBjqG,SACjCmqG,EAAyC,gBAAhCluF,OAAO6tF,EAAa,SAC7Bha,EAAS,wBACbrD,EAAewd,EAAiB,cAAe,CAC7CjW,cAAc,EACd32F,IAAK,WACH,IAAI4L,EAASqrF,EAAS58F,MAAQA,KAAK0tG,UAAY1tG,KAC3CyP,EAAS+iG,EAAejqG,KAAKgJ,GACjC,GAAI2c,EAAImkF,EAA6B9gG,GAAS,MAAO,GACrD,IAAImhG,EAAOD,EAAShjG,EAAOhD,MAAM,GAAI,GAAKgD,EAAOvH,QAAQkwF,EAAQ,MACjE,MAAgB,KAATsa,OAAcpvF,EAAYovF,KAIrCrgG,EAAE,CAAEvS,QAAQ,EAAMq7F,QAAQ,GAAQ,CAChClG,OAAQqd,MAON,KACA,SAAUtqC,EAAQC,EAASF,GAEjC,IAAI75C,EAAM65C,EAAoB,QAC1B03B,EAAW13B,EAAoB,QAC/Bw7B,EAAYx7B,EAAoB,QAChC4qC,EAA2B5qC,EAAoB,QAE/Cg9B,EAAWxB,EAAU,YACrBkI,EAAkBrjG,OAAOC,UAI7B2/D,EAAOC,QAAU0qC,EAA2BvqG,OAAOy9F,eAAiB,SAAUtP,GAE5E,OADAA,EAAIkJ,EAASlJ,GACTroE,EAAIqoE,EAAGwO,GAAkBxO,EAAEwO,GACH,mBAAjBxO,EAAEjyE,aAA6BiyE,aAAaA,EAAEjyE,YAChDiyE,EAAEjyE,YAAYjc,UACdkuF,aAAanuF,OAASqjG,EAAkB,OAM7C,KACA,SAAUzjC,EAAQC,EAASF,GAEjC,IAAI0uB,EAAQ1uB,EAAoB,QAEhCC,EAAOC,SAAWwuB,GAAM,WACtB,SAAS+O,KAET,OADAA,EAAEn9F,UAAUic,YAAc,KACnBlc,OAAOy9F,eAAe,IAAIL,KAASA,EAAEn9F,cAMxC,KACA,SAAU2/D,EAAQC,EAASF,GAEjC,aAEA,IAAI4tB,EAAkB5tB,EAAoB,QACtCuoC,EAAmBvoC,EAAoB,QACvCy0B,EAAYz0B,EAAoB,QAChC80B,EAAsB90B,EAAoB,QAC1C+0B,EAAiB/0B,EAAoB,QAErC6qC,EAAiB,iBACjB5V,EAAmBH,EAAoBj3F,IACvCq3F,EAAmBJ,EAAoBK,UAAU0V,GAYrD5qC,EAAOC,QAAU60B,EAAe9vF,MAAO,SAAS,SAAUmwF,EAAU0V,GAClE7V,EAAiBh9F,KAAM,CACrB8H,KAAM8qG,EACN57F,OAAQ2+E,EAAgBwH,GACxB3wF,MAAO,EACPqmG,KAAMA,OAIP,WACD,IAAI5oE,EAAQgzD,EAAiBj9F,MACzBgX,EAASizB,EAAMjzB,OACf67F,EAAO5oE,EAAM4oE,KACbrmG,EAAQy9B,EAAMz9B,QAClB,OAAKwK,GAAUxK,GAASwK,EAAO5N,QAC7B6gC,EAAMjzB,YAASsM,EACR,CAAE5d,WAAO4d,EAAW0X,MAAM,IAEvB,QAAR63E,EAAuB,CAAEntG,MAAO8G,EAAOwuB,MAAM,GACrC,UAAR63E,EAAyB,CAAEntG,MAAOsR,EAAOxK,GAAQwuB,MAAM,GACpD,CAAEt1B,MAAO,CAAC8G,EAAOwK,EAAOxK,IAASwuB,MAAM,KAC7C,UAKHwhE,EAAUsW,UAAYtW,EAAUxvF,MAGhCsjG,EAAiB,QACjBA,EAAiB,UACjBA,EAAiB,YAKX,KACA,SAAUtoC,EAAQC,EAASF,GAEjC,IAAIwtB,EAAkBxtB,EAAoB,QAE1CE,EAAQ7lD,EAAImzE,GAKN,KACA,SAAUvtB,EAAQC,EAASF,GAEjC,IAAI75C,EAAM65C,EAAoB,QAC1BgrC,EAAUhrC,EAAoB,QAC9BmjC,EAAiCnjC,EAAoB,QACrDo0B,EAAuBp0B,EAAoB,QAE/CC,EAAOC,QAAU,SAAUjxD,EAAQmnD,GAIjC,IAHA,IAAIt4C,EAAOktF,EAAQ50C,GACf42B,EAAiBoH,EAAqB/5E,EACtCk0E,EAA2B4U,EAA+B9oF,EACrD1Y,EAAI,EAAGA,EAAImc,EAAKzc,OAAQM,IAAK,CACpC,IAAI7F,EAAMgiB,EAAKnc,GACVwkB,EAAIlX,EAAQnT,IAAMkxF,EAAe/9E,EAAQnT,EAAKyyF,EAAyBn4B,EAAQt6D,OAOlF,KACA,SAAUmkE,EAAQC,EAASF,GAEjC,IAAI6wB,EAAU7wB,EAAoB,QAIlCC,EAAOC,QAAUj7D,MAAM2kB,SAAW,SAAiB4hB,GACjD,MAAuB,SAAhBqlD,EAAQrlD,KAMX,KACA,SAAUy0B,EAAQC,EAASF,GAEjC,IAAIwtB,EAAkBxtB,EAAoB,QACtCy0B,EAAYz0B,EAAoB,QAEhC2xB,EAAWnE,EAAgB,YAC3BgI,EAAiBvwF,MAAM3E,UAG3B2/D,EAAOC,QAAU,SAAUkhB,GACzB,YAAc7lE,IAAP6lE,IAAqBqT,EAAUxvF,QAAUm8E,GAAMoU,EAAe7D,KAAcvQ,KAM/E,KACA,SAAUnhB,EAAQC,EAASF,GAEjC,IAAImnC,EAAwBnnC,EAAoB,QAC5CirC,EAAajrC,EAAoB,QACjCwtB,EAAkBxtB,EAAoB,QAEtCytB,EAAgBD,EAAgB,eAEhC0d,EAAuE,aAAnDD,EAAW,WAAc,OAAO7pG,UAArB,IAG/B+pG,EAAS,SAAU/pB,EAAItlF,GACzB,IACE,OAAOslF,EAAGtlF,GACV,MAAOw4B,MAIX2rC,EAAOC,QAAUinC,EAAwB8D,EAAa,SAAU7pB,GAC9D,IAAIoN,EAAGhpF,EAAKxJ,EACZ,YAAcuf,IAAP6lE,EAAmB,YAAqB,OAAPA,EAAc,OAEM,iBAAhD57E,EAAM2lG,EAAO3c,EAAInuF,OAAO+gF,GAAKqM,IAA8BjoF,EAEnE0lG,EAAoBD,EAAWzc,GAEH,WAA3BxyF,EAASivG,EAAWzc,KAAsC,mBAAZA,EAAE4c,OAAuB,YAAcpvG,IAMtF,KACA,SAAUikE,EAAQC,EAASF,GAEjC,IAAIojC,EAASpjC,EAAoB,QAC7BqjC,EAAMrjC,EAAoB,QAE1BliD,EAAOslF,EAAO,QAElBnjC,EAAOC,QAAU,SAAUpkE,GACzB,OAAOgiB,EAAKhiB,KAASgiB,EAAKhiB,GAAOunG,EAAIvnG,MAMjC,KACA,SAAUmkE,EAAQymC,EAAqB1mC,GAE7C,aAOA,GALAA,EAAoBhjD,EAAE0pF,GAKA,qBAAXtnG,OAAwB,CACjC,IAAIsgG,EAAgBtgG,OAAO4C,SAAS09F,cAE9BD,EAAmBz/B,EAAoB,QAC3C0/B,EAAgBD,IAGV,kBAAmBz9F,UACvB3B,OAAO2sF,eAAehrF,SAAU,gBAAiB,CAAEpE,IAAK6hG,IAI5D,IAAIxvE,EAAMyvE,GAAiBA,EAAczvE,IAAIlzB,MAAM,2BAC/CkzB,IACF+vC,EAAoB5+B,EAAInR,EAAI,IAKH,IAGzBhC,EAAS,WAAa,IAAIC,EAAIj2B,KAASk2B,EAAGD,EAAIE,eAAmBC,EAAGH,EAAI5uB,MAAM+uB,IAAIF,EAAG,OAAOE,EAAG,OAAO,CAACg8D,YAAY,+BAA+BviF,MAAOomB,EAAmB,iBAAG,CAACG,EAAG,QAAQ,CAAC2+C,IAAI,QAAQqd,YAAY,eAAe3sC,MAAM,CAACxvB,EAAIm9E,WAAY,CAAC,WAAYn9E,EAAIo9E,aAAc,QAAWp9E,EAAIq9E,gBAAiB,eAAgBr9E,EAAIs9E,iBAAkB,SAAYt9E,EAAIrc,SAAU,kBAAmBqc,EAAIu9E,QAAUv9E,EAAIu9E,OAAO58F,OAAQ/G,MAAOomB,EAAmB,gBAAEI,MAAM,CAAC,KAAO,OAAO,GAAKJ,EAAIttB,GAAG,KAAOstB,EAAI3xB,KAAK,YAAc2xB,EAAIw9E,YAAcx9E,EAAIw9E,YAAcx9E,EAAIy9E,aAAa,SAAWz9E,EAAIrc,UAAY,EAAIqc,EAAI09E,SAAS,SAAW19E,EAAIrc,SAAS,UAAYqc,EAAI29E,YAAY,aAAe39E,EAAI49E,cAAcC,SAAS,CAAC,MAAQ79E,EAAIo9E,aAAe,KAAOp9E,EAAI89E,mBAAmBp/F,GAAG,CAAC,MAAQshB,EAAI+9E,QAAQ,OAAS/9E,EAAIg+E,SAAS,KAAO,SAASC,GAAQj+E,EAAIk+E,eAAgBl+E,EAAIm+E,aAAa,UAAYn+E,EAAIo+E,YAAY,QAAU,CAACp+E,EAAIq+E,eAAe,SAASJ,GAAQ,OAAIA,EAAOpsG,KAAKoG,QAAQ,QAAQ+nB,EAAIs+E,GAAGL,EAAO1/E,QAAQ,MAAM,GAAG0/E,EAAOrwG,IAAI,CAAC,MAAM,YAA8BqwG,EAAOvzD,SAASuzD,EAAO/sC,UAAU+sC,EAAOtlB,QAAQslB,EAAOrlB,QAAjE,KAAgG54D,EAAIu+E,QAAQN,KAAU,iBAAmBj+E,EAAIw+E,kBAAkB,eAAiBx+E,EAAIy+E,gBAAgB,MAAQz+E,EAAI0+E,gBAAiB1+E,EAAI2+E,cAAgB3+E,EAAI4+E,gBAAiBz+E,EAAG,MAAM,CAACg8D,YAAY,WAAW/7D,MAAM,CAAC,SAAW,OAAO,EAAGJ,EAAI6+E,UAAY7+E,EAAI2+E,aAAcx+E,EAAG,OAAO,CAACg8D,YAAY,YAAY3sC,MAAM,CAAC,iBAAkBxvB,EAAIu9E,QAAUv9E,EAAIu9E,OAAOuB,aAAc1+E,MAAM,CAAC,SAAW,MAAM1hB,GAAG,CAAC,MAAQshB,EAAI++E,YAAY,CAAC/+E,EAAIg/E,GAAG,cAAc,CAAC7+E,EAAG,OAAO,CAACg8D,YAAY,QAAQ,CAACn8D,EAAIK,GAAG,UAAU,GAAGL,EAAIi/E,KAAMj/E,EAAmB,gBAAEG,EAAG,OAAO,CAACg8D,YAAY,eAAe3sC,MAAM,CAAC,iBAAkBxvB,EAAIu9E,QAAUv9E,EAAIu9E,OAAO2B,gBAAiB9+E,MAAM,CAAC,SAAW,MAAM1hB,GAAG,CAAC,MAAQ,SAASu/F,GAAQ,OAAOj+E,EAAIm/E,kBAAiBn/E,EAAIo/E,sBAAuBp/E,EAAIq/E,cAAqB,IAAO,UAAYr/E,EAAIs/E,eAAe,CAACt/E,EAAIg/E,GAAG,iBAAiB,CAAC7+E,EAAG,OAAO,CAACg8D,YAAY,QAAQ,CAACn8D,EAAIK,GAAG,UAAU,GAAGL,EAAIi/E,OAAOj/E,EAAIi/E,KAAMj/E,EAAIu9E,QAAUv9E,EAAIu9E,OAAO58F,KAAMwf,EAAG,MAAM,CAACg8D,YAAY,eAAe,CAACn8D,EAAIg/E,GAAG,SAAS,GAAGh/E,EAAIi/E,KAAMj/E,EAAgB,aAAEG,EAAG,MAAM,CAACg8D,YAAY,sBAAsB/7D,MAAM,CAAC,SAAW,MAAM1hB,GAAG,CAAC,MAAQshB,EAAIu/E,gBAAgBv/E,EAAIi/E,KAAK9+E,EAAG,MAAM,CAAC67D,WAAW,CAAC,CAAC3tF,KAAK,OAAO4tF,QAAQ,SAASxsF,MAAOuwB,EAAgB,aAAEk8D,WAAW,iBAAiBpd,IAAI,WAAWqd,YAAY,WAAW3sC,MAAM,CAACxvB,EAAIw/E,kBAAkB5lG,MAAOomB,EAAmB,gBAAEI,MAAM,CAAC,SAAW,MAAM1hB,GAAG,CAAC,QAAUshB,EAAIs/E,aAAa,MAAQ,SAASrB,GAAQA,EAAOpnE,qBAAsB,CAAC1W,EAAG,MAAM,CAACg8D,YAAY,cAAcviF,MAAOomB,EAAmB,gBAAEI,MAAM,CAAC,SAAW,OAAO,CAAGJ,EAAIy/E,iBAAowEz/E,EAAIi/E,KAAtvE,CAACj/E,EAAI0/E,GAAI1/E,EAAmB,iBAAE,SAAS2/E,GAAQ,MAAO,CAAa,SAAXA,EAAmBx/E,EAAG,KAAK,CAACvyB,IAAI+xG,EAAOxjB,YAAY,QAAQz9E,GAAG,CAAC,OAASshB,EAAIs/E,eAAe,CAACn/E,EAAG,KAAK,CAACg8D,YAAY,OAAO0hB,SAAS,CAAC,YAAc79E,EAAIM,GAAGN,EAAI4/E,kBAAkB5/E,EAAI0/E,GAAI1/E,EAAS,OAAE,SAASmyC,EAAG0tC,GAAQ,MAAO,EAAG7/E,EAAI8/E,KAAKC,mBAAsB//E,EAAI8/E,KAAKC,oBAAsB//E,EAAIggF,WAAW,OAAQ7tC,GAAMhyC,EAAG,KAAK,CAACvyB,IAAIiyG,EAAOrwD,MAAM,CAACgiB,OAAQxxC,EAAInzB,OAASslE,GAAI/xC,MAAM,CAAC,SAAWJ,EAAIggF,WAAW,OAAQ7tC,GAAI,WAAWA,GAAI0rC,SAAS,CAAC,YAAc79E,EAAIM,GAAG6xC,IAAKzzD,GAAG,CAAC,MAAQ,SAASu/F,GAAQ,OAAOj+E,EAAI9jB,OAAO,OAAQi2D,OAAQnyC,EAAIi/E,UAAS,GAAGj/E,EAAIi/E,KAAiB,WAAXU,EAAqBx/E,EAAG,KAAK,CAACvyB,IAAI+xG,EAAOxjB,YAAY,UAAUz9E,GAAG,CAAC,OAASshB,EAAIs/E,eAAe,CAACn/E,EAAG,KAAK,CAACg8D,YAAY,OAAO0hB,SAAS,CAAC,YAAc79E,EAAIM,GAAGN,EAAIigF,oBAAoBjgF,EAAI0/E,GAAI1/E,EAAW,SAAE,SAASp0B,EAAEs0G,GAAQ,MAAO,EAAGlgF,EAAI8/E,KAAKK,qBAAwBngF,EAAI8/E,KAAKK,sBAAwBngF,EAAIggF,WAAW,SAAUp0G,GAAKu0B,EAAG,KAAK,CAACvyB,IAAIsyG,EAAO1wD,MAAM,CAACgiB,OAAQxxC,EAAIjzB,SAAWnB,GAAGw0B,MAAM,CAAC,SAAWJ,EAAIggF,WAAW,SAAUp0G,GAAG,WAAWA,GAAGiyG,SAAS,CAAC,YAAc79E,EAAIM,GAAG10B,IAAI8S,GAAG,CAAC,MAAQ,SAASu/F,GAAQ,OAAOj+E,EAAI9jB,OAAO,SAAUtQ,OAAOo0B,EAAIi/E,UAAS,GAAGj/E,EAAIi/E,KAAiB,WAAXU,EAAqBx/E,EAAG,KAAK,CAACvyB,IAAI+xG,EAAOxjB,YAAY,UAAUz9E,GAAG,CAAC,OAASshB,EAAIs/E,eAAe,CAACn/E,EAAG,KAAK,CAACg8D,YAAY,OAAO0hB,SAAS,CAAC,YAAc79E,EAAIM,GAAGN,EAAIogF,oBAAoBpgF,EAAI0/E,GAAI1/E,EAAW,SAAE,SAASt0B,EAAE20G,GAAQ,MAAO,EAAGrgF,EAAI8/E,KAAKQ,qBAAwBtgF,EAAI8/E,KAAKQ,sBAAwBtgF,EAAIggF,WAAW,SAAUt0G,GAAKy0B,EAAG,KAAK,CAACvyB,IAAIyyG,EAAO7wD,MAAM,CAACgiB,OAAQxxC,EAAIitE,SAAWvhG,GAAG00B,MAAM,CAAC,SAAWJ,EAAIggF,WAAW,SAAUt0G,GAAG,WAAWA,GAAGmyG,SAAS,CAAC,YAAc79E,EAAIM,GAAG50B,IAAIgT,GAAG,CAAC,MAAQ,SAASu/F,GAAQ,OAAOj+E,EAAI9jB,OAAO,SAAUxQ,OAAOs0B,EAAIi/E,UAAS,GAAGj/E,EAAIi/E,KAAiB,QAAXU,EAAkBx/E,EAAG,KAAK,CAACvyB,IAAI+xG,EAAOxjB,YAAY,OAAOz9E,GAAG,CAAC,OAASshB,EAAIs/E,eAAe,CAACn/E,EAAG,KAAK,CAACg8D,YAAY,OAAO0hB,SAAS,CAAC,YAAc79E,EAAIM,GAAGN,EAAIugF,iBAAiBvgF,EAAI0/E,GAAI1/E,EAAQ,MAAE,SAASnV,EAAE21F,GAAQ,MAAO,EAAGxgF,EAAI8/E,KAAKC,mBAAsB//E,EAAI8/E,KAAKC,oBAAsB//E,EAAIggF,WAAW,MAAOn1F,GAAKsV,EAAG,KAAK,CAACvyB,IAAI4yG,EAAOhxD,MAAM,CAACgiB,OAAQxxC,EAAIygF,MAAQ51F,GAAGuV,MAAM,CAAC,SAAWJ,EAAIggF,WAAW,MAAOn1F,GAAG,WAAWA,GAAGgzF,SAAS,CAAC,YAAc79E,EAAIM,GAAGN,EAAI0gF,eAAe71F,KAAKnM,GAAG,CAAC,MAAQ,SAASu/F,GAAQ,OAAOj+E,EAAI9jB,OAAO,MAAO2O,OAAOmV,EAAIi/E,UAAS,GAAGj/E,EAAIi/E,UAAmBj/E,EAAoB,iBAAE,CAACA,EAAI0/E,GAAI1/E,EAAmB,iBAAE,SAAS2/E,GAAQ,MAAO,CAAa,SAAXA,EAAmBx/E,EAAG,KAAK,CAACvyB,IAAI+xG,EAAOxjB,YAAY,QAAQ/7D,MAAM,CAAC,SAAW,MAAM1hB,GAAG,CAAC,OAASshB,EAAIs/E,eAAe,CAACn/E,EAAG,KAAK,CAACg8D,YAAY,OAAO/7D,MAAM,CAAC,SAAW,MAAMy9E,SAAS,CAAC,YAAc79E,EAAIM,GAAGN,EAAI4/E,kBAAkB5/E,EAAI0/E,GAAI1/E,EAAS,OAAE,SAASmyC,EAAG0tC,GAAQ,MAAO,EAAG7/E,EAAI8/E,KAAKC,mBAAsB//E,EAAI8/E,KAAKC,oBAAsB//E,EAAIggF,WAAW,OAAQ7tC,GAAMhyC,EAAG,KAAK,CAACvyB,IAAIiyG,EAAOrwD,MAAM,CAACgiB,OAAQxxC,EAAInzB,OAASslE,GAAI/xC,MAAM,CAAC,SAAWJ,EAAIggF,WAAW,OAAQ7tC,IAAO,EAAInyC,EAAI09E,SAAS,WAAWvrC,EAAG,SAAWnyC,EAAIggF,WAAW,OAAQ7tC,IAAK0rC,SAAS,CAAC,YAAc79E,EAAIM,GAAG6xC,IAAKzzD,GAAG,CAAC,MAAQ,SAASu/F,GAAQ,OAAOj+E,EAAI9jB,OAAO,OAAQi2D,IAAK,QAAU,CAAC,SAAS8rC,GAAQ,OAAIA,EAAOpsG,KAAKoG,QAAQ,QAAQ+nB,EAAIs+E,GAAGL,EAAO1/E,QAAQ,MAAM,EAAE0/E,EAAOrwG,IAAI,OAAgB,KAAcoyB,EAAI2gF,MAAM,OAAQxuC,EAAI8rC,IAAS,SAASA,GAAQ,OAAIA,EAAOpsG,KAAKoG,QAAQ,QAAQ+nB,EAAIs+E,GAAGL,EAAO1/E,QAAQ,QAAQ,GAAG0/E,EAAOrwG,IAAI,CAAC,IAAI,aAAsB,MAAOqwG,EAAOnnE,iBAAwB9W,EAAI9jB,OAAO,OAAQi2D,KAAK,SAAS8rC,GAAQ,OAAIA,EAAOpsG,KAAKoG,QAAQ,QAAQ+nB,EAAIs+E,GAAGL,EAAO1/E,QAAQ,QAAQ,GAAG0/E,EAAOrwG,IAAI,SAAkB,MAAOqwG,EAAOnnE,iBAAwB9W,EAAI9jB,OAAO,OAAQi2D,KAAK,SAAS8rC,GAAQ,OAAIA,EAAOpsG,KAAKoG,QAAQ,QAAQ+nB,EAAIs+E,GAAGL,EAAO1/E,QAAQ,KAAK,GAAG0/E,EAAOrwG,IAAI,CAAC,KAAK,YAAqB,MAAOqwG,EAAOnnE,iBAAwB9W,EAAI4gF,SAAS,OAAQzuC,KAAK,SAAS8rC,GAAQ,OAAIA,EAAOpsG,KAAKoG,QAAQ,QAAQ+nB,EAAIs+E,GAAGL,EAAO1/E,QAAQ,OAAO,GAAG0/E,EAAOrwG,IAAI,CAAC,OAAO,cAAuB,MAAOqwG,EAAOnnE,iBAAwB9W,EAAI6gF,SAAS,OAAQ1uC,KAAK,SAAS8rC,GAAQ,OAAIA,EAAOpsG,KAAKoG,QAAQ,QAAQ+nB,EAAIs+E,GAAGL,EAAO1/E,QAAQ,OAAO,GAAG0/E,EAAOrwG,IAAI,CAAC,OAAO,eAAiC,WAAYqwG,GAA4B,IAAlBA,EAAO6C,OAAvC,MAAoE7C,EAAOnnE,iBAAwB9W,EAAI+gF,aAAa,UAAS,SAAS9C,GAAQ,OAAIA,EAAOpsG,KAAKoG,QAAQ,QAAQ+nB,EAAIs+E,GAAGL,EAAO1/E,QAAQ,QAAQ,GAAG0/E,EAAOrwG,IAAI,CAAC,QAAQ,gBAAkC,WAAYqwG,GAA4B,IAAlBA,EAAO6C,OAAvC,MAAoE7C,EAAOnnE,iBAAwB9W,EAAIghF,cAAc,UAAS,SAAS/C,GAAQ,OAAIA,EAAOpsG,KAAKoG,QAAQ,QAAQ+nB,EAAIs+E,GAAGL,EAAO1/E,QAAQ,MAAM,GAAG0/E,EAAOrwG,IAAI,CAAC,MAAM,YAA8BqwG,EAAOvzD,SAASuzD,EAAO/sC,UAAU+sC,EAAOtlB,QAAQslB,EAAOrlB,QAAjE,KAAgG54D,EAAIk+E,aAAaD,KAAU,KAAOj+E,EAAIk+E,aAAa,MAAQl+E,EAAIs/E,gBAAgBt/E,EAAIi/E,UAAS,GAAGj/E,EAAIi/E,KAAiB,WAAXU,EAAqBx/E,EAAG,KAAK,CAACvyB,IAAI+xG,EAAOxjB,YAAY,UAAU/7D,MAAM,CAAC,SAAW,MAAM1hB,GAAG,CAAC,OAASshB,EAAIs/E,eAAe,CAACn/E,EAAG,KAAK,CAACg8D,YAAY,OAAO/7D,MAAM,CAAC,SAAW,MAAMy9E,SAAS,CAAC,YAAc79E,EAAIM,GAAGN,EAAIigF,oBAAoBjgF,EAAI0/E,GAAI1/E,EAAW,SAAE,SAASp0B,EAAEs0G,GAAQ,MAAO,EAAGlgF,EAAI8/E,KAAKK,qBAAwBngF,EAAI8/E,KAAKK,sBAAwBngF,EAAIggF,WAAW,SAAUp0G,GAAKu0B,EAAG,KAAK,CAACvyB,IAAIsyG,EAAO1wD,MAAM,CAACgiB,OAAQxxC,EAAIjzB,SAAWnB,GAAGw0B,MAAM,CAAC,SAAWJ,EAAIggF,WAAW,SAAUp0G,IAAM,EAAIo0B,EAAI09E,SAAS,WAAW9xG,EAAE,SAAWo0B,EAAIggF,WAAW,SAAUp0G,IAAIiyG,SAAS,CAAC,YAAc79E,EAAIM,GAAG10B,IAAI8S,GAAG,CAAC,MAAQ,SAASu/F,GAAQ,OAAOj+E,EAAI9jB,OAAO,SAAUtQ,IAAI,QAAU,CAAC,SAASqyG,GAAQ,OAAIA,EAAOpsG,KAAKoG,QAAQ,QAAQ+nB,EAAIs+E,GAAGL,EAAO1/E,QAAQ,MAAM,EAAE0/E,EAAOrwG,IAAI,OAAgB,KAAcoyB,EAAI2gF,MAAM,SAAU/0G,EAAGqyG,IAAS,SAASA,GAAQ,OAAIA,EAAOpsG,KAAKoG,QAAQ,QAAQ+nB,EAAIs+E,GAAGL,EAAO1/E,QAAQ,QAAQ,GAAG0/E,EAAOrwG,IAAI,CAAC,IAAI,aAAsB,MAAOqwG,EAAOnnE,iBAAwB9W,EAAI9jB,OAAO,SAAUtQ,KAAI,SAASqyG,GAAQ,OAAIA,EAAOpsG,KAAKoG,QAAQ,QAAQ+nB,EAAIs+E,GAAGL,EAAO1/E,QAAQ,QAAQ,GAAG0/E,EAAOrwG,IAAI,SAAkB,MAAOqwG,EAAOnnE,iBAAwB9W,EAAI9jB,OAAO,SAAUtQ,KAAI,SAASqyG,GAAQ,OAAIA,EAAOpsG,KAAKoG,QAAQ,QAAQ+nB,EAAIs+E,GAAGL,EAAO1/E,QAAQ,KAAK,GAAG0/E,EAAOrwG,IAAI,CAAC,KAAK,YAAqB,MAAOqwG,EAAOnnE,iBAAwB9W,EAAI4gF,SAAS,SAAUh1G,KAAI,SAASqyG,GAAQ,OAAIA,EAAOpsG,KAAKoG,QAAQ,QAAQ+nB,EAAIs+E,GAAGL,EAAO1/E,QAAQ,OAAO,GAAG0/E,EAAOrwG,IAAI,CAAC,OAAO,cAAuB,MAAOqwG,EAAOnnE,iBAAwB9W,EAAI6gF,SAAS,SAAUj1G,KAAI,SAASqyG,GAAQ,OAAIA,EAAOpsG,KAAKoG,QAAQ,QAAQ+nB,EAAIs+E,GAAGL,EAAO1/E,QAAQ,OAAO,GAAG0/E,EAAOrwG,IAAI,CAAC,OAAO,eAAiC,WAAYqwG,GAA4B,IAAlBA,EAAO6C,OAAvC,MAAoE7C,EAAOnnE,iBAAwB9W,EAAI+gF,aAAa,YAAW,SAAS9C,GAAQ,OAAIA,EAAOpsG,KAAKoG,QAAQ,QAAQ+nB,EAAIs+E,GAAGL,EAAO1/E,QAAQ,QAAQ,GAAG0/E,EAAOrwG,IAAI,CAAC,QAAQ,gBAAkC,WAAYqwG,GAA4B,IAAlBA,EAAO6C,OAAvC,MAAoE7C,EAAOnnE,iBAAwB9W,EAAIghF,cAAc,YAAW,SAAS/C,GAAQ,OAAIA,EAAOpsG,KAAKoG,QAAQ,QAAQ+nB,EAAIs+E,GAAGL,EAAO1/E,QAAQ,MAAM,GAAG0/E,EAAOrwG,IAAI,CAAC,MAAM,YAA8BqwG,EAAOvzD,SAASuzD,EAAO/sC,UAAU+sC,EAAOtlB,QAAQslB,EAAOrlB,QAAjE,KAAgG54D,EAAIk+E,aAAaD,KAAU,KAAOj+E,EAAIk+E,aAAa,MAAQl+E,EAAIs/E,gBAAgBt/E,EAAIi/E,UAAS,GAAGj/E,EAAIi/E,KAAiB,WAAXU,EAAqBx/E,EAAG,KAAK,CAACvyB,IAAI+xG,EAAOxjB,YAAY,UAAU/7D,MAAM,CAAC,SAAW,MAAM1hB,GAAG,CAAC,OAASshB,EAAIs/E,eAAe,CAACn/E,EAAG,KAAK,CAACg8D,YAAY,OAAO/7D,MAAM,CAAC,SAAW,MAAMy9E,SAAS,CAAC,YAAc79E,EAAIM,GAAGN,EAAIogF,oBAAoBpgF,EAAI0/E,GAAI1/E,EAAW,SAAE,SAASt0B,EAAE20G,GAAQ,MAAO,EAAGrgF,EAAI8/E,KAAKQ,qBAAwBtgF,EAAI8/E,KAAKQ,sBAAwBtgF,EAAIggF,WAAW,SAAUt0G,GAAKy0B,EAAG,KAAK,CAACvyB,IAAIyyG,EAAO7wD,MAAM,CAACgiB,OAAQxxC,EAAIitE,SAAWvhG,GAAG00B,MAAM,CAAC,SAAWJ,EAAIggF,WAAW,SAAUt0G,IAAM,EAAIs0B,EAAI09E,SAAS,WAAWhyG,EAAE,SAAWs0B,EAAIggF,WAAW,SAAUt0G,IAAImyG,SAAS,CAAC,YAAc79E,EAAIM,GAAG50B,IAAIgT,GAAG,CAAC,MAAQ,SAASu/F,GAAQ,OAAOj+E,EAAI9jB,OAAO,SAAUxQ,IAAI,QAAU,CAAC,SAASuyG,GAAQ,OAAIA,EAAOpsG,KAAKoG,QAAQ,QAAQ+nB,EAAIs+E,GAAGL,EAAO1/E,QAAQ,MAAM,EAAE0/E,EAAOrwG,IAAI,OAAgB,KAAcoyB,EAAI2gF,MAAM,SAAUj1G,EAAGuyG,IAAS,SAASA,GAAQ,OAAIA,EAAOpsG,KAAKoG,QAAQ,QAAQ+nB,EAAIs+E,GAAGL,EAAO1/E,QAAQ,QAAQ,GAAG0/E,EAAOrwG,IAAI,CAAC,IAAI,aAAsB,MAAOqwG,EAAOnnE,iBAAwB9W,EAAI9jB,OAAO,SAAUxQ,KAAI,SAASuyG,GAAQ,OAAIA,EAAOpsG,KAAKoG,QAAQ,QAAQ+nB,EAAIs+E,GAAGL,EAAO1/E,QAAQ,QAAQ,GAAG0/E,EAAOrwG,IAAI,SAAkB,MAAOqwG,EAAOnnE,iBAAwB9W,EAAI9jB,OAAO,SAAUxQ,KAAI,SAASuyG,GAAQ,OAAIA,EAAOpsG,KAAKoG,QAAQ,QAAQ+nB,EAAIs+E,GAAGL,EAAO1/E,QAAQ,KAAK,GAAG0/E,EAAOrwG,IAAI,CAAC,KAAK,YAAqB,MAAOqwG,EAAOnnE,iBAAwB9W,EAAI4gF,SAAS,SAAUl1G,KAAI,SAASuyG,GAAQ,OAAIA,EAAOpsG,KAAKoG,QAAQ,QAAQ+nB,EAAIs+E,GAAGL,EAAO1/E,QAAQ,OAAO,GAAG0/E,EAAOrwG,IAAI,CAAC,OAAO,cAAuB,MAAOqwG,EAAOnnE,iBAAwB9W,EAAI6gF,SAAS,SAAUn1G,KAAI,SAASuyG,GAAQ,OAAIA,EAAOpsG,KAAKoG,QAAQ,QAAQ+nB,EAAIs+E,GAAGL,EAAO1/E,QAAQ,OAAO,GAAG0/E,EAAOrwG,IAAI,CAAC,OAAO,eAAiC,WAAYqwG,GAA4B,IAAlBA,EAAO6C,OAAvC,MAAoE7C,EAAOnnE,iBAAwB9W,EAAI+gF,aAAa,YAAW,SAAS9C,GAAQ,OAAIA,EAAOpsG,KAAKoG,QAAQ,QAAQ+nB,EAAIs+E,GAAGL,EAAO1/E,QAAQ,QAAQ,GAAG0/E,EAAOrwG,IAAI,CAAC,QAAQ,gBAAkC,WAAYqwG,GAA4B,IAAlBA,EAAO6C,OAAvC,MAAoE7C,EAAOnnE,iBAAwB9W,EAAIghF,cAAc,YAAW,SAAS/C,GAAQ,OAAIA,EAAOpsG,KAAKoG,QAAQ,QAAQ+nB,EAAIs+E,GAAGL,EAAO1/E,QAAQ,MAAM,GAAG0/E,EAAOrwG,IAAI,CAAC,MAAM,YAA8BqwG,EAAOvzD,SAASuzD,EAAO/sC,UAAU+sC,EAAOtlB,QAAQslB,EAAOrlB,QAAjE,KAAgG54D,EAAIk+E,aAAaD,KAAU,KAAOj+E,EAAIk+E,aAAa,MAAQl+E,EAAIs/E,gBAAgBt/E,EAAIi/E,UAAS,GAAGj/E,EAAIi/E,KAAiB,QAAXU,EAAkBx/E,EAAG,KAAK,CAACvyB,IAAI+xG,EAAOxjB,YAAY,OAAO/7D,MAAM,CAAC,SAAW,MAAM1hB,GAAG,CAAC,OAASshB,EAAIs/E,eAAe,CAACn/E,EAAG,KAAK,CAACg8D,YAAY,OAAO/7D,MAAM,CAAC,SAAW,MAAMy9E,SAAS,CAAC,YAAc79E,EAAIM,GAAGN,EAAIugF,iBAAiBvgF,EAAI0/E,GAAI1/E,EAAQ,MAAE,SAASnV,EAAE21F,GAAQ,MAAO,EAAGxgF,EAAI8/E,KAAKC,mBAAsB//E,EAAI8/E,KAAKC,oBAAsB//E,EAAIggF,WAAW,MAAOn1F,GAAKsV,EAAG,KAAK,CAACvyB,IAAI4yG,EAAOhxD,MAAM,CAACgiB,OAAQxxC,EAAIygF,MAAQ51F,GAAGuV,MAAM,CAAC,SAAWJ,EAAIggF,WAAW,MAAOn1F,IAAM,EAAImV,EAAI09E,SAAS,WAAW7yF,EAAE,SAAWmV,EAAIggF,WAAW,MAAOn1F,IAAIgzF,SAAS,CAAC,YAAc79E,EAAIM,GAAGN,EAAI0gF,eAAe71F,KAAKnM,GAAG,CAAC,MAAQ,SAASu/F,GAAQ,OAAOj+E,EAAI9jB,OAAO,MAAO2O,IAAI,QAAU,CAAC,SAASozF,GAAQ,OAAIA,EAAOpsG,KAAKoG,QAAQ,QAAQ+nB,EAAIs+E,GAAGL,EAAO1/E,QAAQ,MAAM,EAAE0/E,EAAOrwG,IAAI,OAAgB,KAAcoyB,EAAI2gF,MAAM,MAAO91F,EAAGozF,IAAS,SAASA,GAAQ,OAAIA,EAAOpsG,KAAKoG,QAAQ,QAAQ+nB,EAAIs+E,GAAGL,EAAO1/E,QAAQ,QAAQ,GAAG0/E,EAAOrwG,IAAI,CAAC,IAAI,aAAsB,MAAOqwG,EAAOnnE,iBAAwB9W,EAAI9jB,OAAO,MAAO2O,KAAI,SAASozF,GAAQ,OAAIA,EAAOpsG,KAAKoG,QAAQ,QAAQ+nB,EAAIs+E,GAAGL,EAAO1/E,QAAQ,QAAQ,GAAG0/E,EAAOrwG,IAAI,SAAkB,MAAOqwG,EAAOnnE,iBAAwB9W,EAAI9jB,OAAO,MAAO2O,KAAI,SAASozF,GAAQ,OAAIA,EAAOpsG,KAAKoG,QAAQ,QAAQ+nB,EAAIs+E,GAAGL,EAAO1/E,QAAQ,KAAK,GAAG0/E,EAAOrwG,IAAI,CAAC,KAAK,YAAqB,MAAOqwG,EAAOnnE,iBAAwB9W,EAAI4gF,SAAS,MAAO/1F,KAAI,SAASozF,GAAQ,OAAIA,EAAOpsG,KAAKoG,QAAQ,QAAQ+nB,EAAIs+E,GAAGL,EAAO1/E,QAAQ,OAAO,GAAG0/E,EAAOrwG,IAAI,CAAC,OAAO,cAAuB,MAAOqwG,EAAOnnE,iBAAwB9W,EAAI6gF,SAAS,MAAOh2F,KAAI,SAASozF,GAAQ,OAAIA,EAAOpsG,KAAKoG,QAAQ,QAAQ+nB,EAAIs+E,GAAGL,EAAO1/E,QAAQ,OAAO,GAAG0/E,EAAOrwG,IAAI,CAAC,OAAO,eAAiC,WAAYqwG,GAA4B,IAAlBA,EAAO6C,OAAvC,MAAoE7C,EAAOnnE,iBAAwB9W,EAAI+gF,aAAa,SAAQ,SAAS9C,GAAQ,OAAIA,EAAOpsG,KAAKoG,QAAQ,QAAQ+nB,EAAIs+E,GAAGL,EAAO1/E,QAAQ,QAAQ,GAAG0/E,EAAOrwG,IAAI,CAAC,QAAQ,gBAAkC,WAAYqwG,GAA4B,IAAlBA,EAAO6C,OAAvC,MAAoE7C,EAAOnnE,iBAAwB9W,EAAIghF,cAAc,SAAQ,SAAS/C,GAAQ,OAAIA,EAAOpsG,KAAKoG,QAAQ,QAAQ+nB,EAAIs+E,GAAGL,EAAO1/E,QAAQ,MAAM,GAAG0/E,EAAOrwG,IAAI,CAAC,MAAM,YAA8BqwG,EAAOvzD,SAASuzD,EAAO/sC,UAAU+sC,EAAOtlB,QAAQslB,EAAOrlB,QAAjE,KAAgG54D,EAAIk+E,aAAaD,KAAU,KAAOj+E,EAAIk+E,aAAa,MAAQl+E,EAAIs/E,gBAAgBt/E,EAAIi/E,UAAS,GAAGj/E,EAAIi/E,UAASj/E,EAAIi/E,MAAM,QAC9mc1+E,EAAkB,GAMAuxC,EAAoB,QAGpBA,EAAoB,QAGhBA,EAAoB,QAGtBA,EAAoB,QAGpBA,EAAoB,QAGpBA,EAAoB,QAGxBA,EAAoB,QAGrBA,EAAoB,QAGlBA,EAAoB,QAGrBA,EAAoB,QAGlBA,EAAoB,QAGnBA,EAAoB,QAGfA,EAAoB,QAGzBA,EAAoB,QAGtBA,EAAoB,QAGbA,EAAoB,QAG3BA,EAAoB,QAGfA,EAAoB,QAGrBA,EAAoB,QAGvBA,EAAoB,QAGlBA,EAAoB,QAGtBA,EAAoB,QAGrBA,EAAoB,QAGNA,EAAoB,QAGvCA,EAAoB,QAGRA,EAAoB,QAGvBA,EAAoB,QAGrBA,EAAoB,QAGlBA,EAAoB,QAGrBA,EAAoB,QAGVA,EAAoB,QAUvD,SAASmvC,EAAQnxF,GAaf,OATEmxF,EADoB,oBAAXjiB,QAAoD,kBAApBA,OAAO+K,SACtC,SAAiBj6E,GACzB,cAAcA,GAGN,SAAiBA,GACzB,OAAOA,GAAyB,oBAAXkvE,QAAyBlvE,EAAIzB,cAAgB2wE,QAAUlvE,IAAQkvE,OAAO5sF,UAAY,gBAAkB0d,GAItHmxF,EAAQnxF,GAGGgiD,EAAoB,QAGxC,SAASovC,EAAkBljC,EAAKvnE,IACnB,MAAPA,GAAeA,EAAMunE,EAAI7qE,UAAQsD,EAAMunE,EAAI7qE,QAE/C,IAAK,IAAIM,EAAI,EAAG0tG,EAAO,IAAIpqG,MAAMN,GAAMhD,EAAIgD,EAAKhD,IAC9C0tG,EAAK1tG,GAAKuqE,EAAIvqE,GAGhB,OAAO0tG,EAUT,SAASC,EAA4BlvG,EAAGmvG,GACtC,GAAKnvG,EAAL,CACA,GAAiB,kBAANA,EAAgB,OAAOgvG,EAAkBhvG,EAAGmvG,GACvD,IAAI7zG,EAAI2E,OAAOC,UAAUC,SAASC,KAAKJ,GAAGsE,MAAM,GAAI,GAEpD,MADU,WAANhJ,GAAkB0E,EAAEmc,cAAa7gB,EAAI0E,EAAEmc,YAAYhgB,MAC7C,QAANb,GAAqB,QAANA,EAAoBuJ,MAAMT,KAAKpE,GACxC,cAAN1E,GAAqB,2CAA2C4G,KAAK5G,GAAW0zG,EAAkBhvG,EAAGmvG,QAAzG,GAWF,SAASC,EAA2BpvG,GAClC,GAAsB,qBAAX8sF,QAAgD,MAAtB9sF,EAAE8sF,OAAO+K,UAAmB,CAC/D,GAAIhzF,MAAM2kB,QAAQxpB,KAAOA,EAAIkvG,EAA4BlvG,IAAK,CAC5D,IAAIuB,EAAI,EAEJ87F,EAAI,aAER,MAAO,CACL7jG,EAAG6jG,EACH/hG,EAAG,WACD,OAAIiG,GAAKvB,EAAEiB,OAAe,CACxB4xB,MAAM,GAED,CACLA,MAAM,EACNt1B,MAAOyC,EAAEuB,OAGbyK,EAAG,SAAW+gG,GACZ,MAAMA,GAER9yF,EAAGojF,GAIP,MAAM,IAAI7rE,UAAU,yIAGtB,IAAIwvD,EAGA98B,EAFAmrD,GAAmB,EACnBC,GAAS,EAEb,MAAO,CACL91G,EAAG,WACDwnF,EAAKhhF,EAAE8sF,OAAO+K,aAEhBv8F,EAAG,WACD,IAAIs8F,EAAO5W,EAAGn2D,OAEd,OADAwkF,EAAmBzX,EAAK/kE,KACjB+kE,GAET5rF,EAAG,SAAWujG,GACZD,GAAS,EACTprD,EAAMqrD,GAERt1F,EAAG,WACD,IACOo1F,GAAoC,MAAhBruB,EAAG,WAAmBA,EAAG,YAClD,QACA,GAAIsuB,EAAQ,MAAMprD,KAgC1B,IAAIsrD,EAAS,CACXC,YAAa,CAAC,KAAM,IAAK,KAAM,IAAK,KAAM,KAC1CC,cAAe,CAAC,KAAM,KACtBC,cAAe,CAAC,KAAM,KACtBC,WAAY,CAAC,IAAK,KAClBC,YAAa,CAAC,OAAQ,SAAU,SAAU,QAExCC,EAAkB,CACpB39F,OAAQ,QACR49F,eAAgB,EAChBC,eAAgB,EAChBC,UAAW,KACXC,YAAa,KACbC,YAAa,KACbtC,mBAAmB,EACnBI,qBAAqB,EACrBG,qBAAqB,EACrBgC,mBAAmB,EACnBC,cAAc,EACdC,UAAW,IACXC,mBAAoB,IACpBC,iBAAkB,KAEaC,EAAyC,CACxEt0G,KAAM,gBACNuvD,MAAO,CACLnuD,MAAO,CACLoC,KAAM,CAACM,OAAQmc,SAEjBjK,OAAQ,CACNxS,KAAMyc,QAER2zF,eAAgB,CACdpwG,KAAM,CAAC4sD,OAAQnwC,SAEjB4zF,eAAgB,CACdrwG,KAAM,CAAC4sD,OAAQnwC,SAEjB6zF,UAAW,CACTtwG,KAAMkF,OAERqrG,YAAa,CACXvwG,KAAMkF,OAERsrG,YAAa,CACXxwG,KAAMkF,OAERgpG,kBAAmB,CACjBluG,KAAM4qF,QACNC,SAAS,GAEXyjB,oBAAqB,CACnBtuG,KAAM4qF,QACNC,SAAS,GAEX4jB,oBAAqB,CACnBzuG,KAAM4qF,QACNC,SAAS,GAEX4lB,kBAAmB,CACjBzwG,KAAM4qF,QACNC,SAAS,GAEXkmB,gBAAiB,CACf/wG,KAAM4qF,QACNC,SAAS,GAEX/4E,SAAU,CACR9R,KAAM4qF,QACNC,SAAS,GAEXmmB,gBAAiB,CACfhxG,KAAM4qF,QACNC,SAAS,GAEXhqF,GAAI,CACFb,KAAMyc,QAERjgB,KAAM,CACJwD,KAAMyc,QAER6uF,WAAY,CACVtrG,KAAM,CAACyc,OAAQnc,OAAQ4E,QAEzBymG,YAAa,CACX3rG,KAAMyc,QAERovF,SAAU,CACR7rG,KAAM,CAAC4sD,OAAQnwC,QACfouE,QAAS,GAEXomB,WAAY,CACVjxG,KAAMyc,QAERsvF,aAAc,CACZ/rG,KAAMyc,OACNouE,QAAS,OAEXqmB,UAAW,CACTlxG,KAAMyc,QAER00F,YAAa,CACXnxG,KAAMyc,QAER20F,YAAa,CACXpxG,KAAMyc,QAER40F,SAAU,CACRrxG,KAAMyc,QAER60F,OAAQ,CACNtxG,KAAMyc,QAER80F,OAAQ,CACNvxG,KAAMyc,QAERk0F,UAAW,CACT3wG,KAAM,CAAC4sD,OAAQnwC,SAEjBmxF,iBAAkB,CAChB5tG,KAAM4qF,QACNC,SAAS,GAEX2mB,KAAM,CACJxxG,KAAM4qF,QACNC,SAAS,GAEX4mB,WAAY,CACVzxG,KAAM4qF,QACNC,SAAS,GAEX6mB,cAAe,CACb1xG,KAAMyc,OACNouE,QAAS,QAEXgmB,iBAAkB,CAChB7wG,KAAM,CAAC4sD,OAAQnwC,SAEjBk1F,YAAa,CACX3xG,KAAMyc,QAERm1F,aAAc,CACZ5xG,KAAM4qF,QACNC,SAAS,GAEXihB,YAAa,CACX9rG,KAAM4qF,QACNC,SAAS,GAEX+lB,mBAAoB,CAClB5wG,KAAM,CAAC4sD,OAAQnwC,SAEjBi0F,aAAc,CACZ1wG,KAAM4qF,QACNC,SAAS,GAEX0iB,oBAAqB,CACnBvtG,KAAM4qF,QACNC,SAAS,GAEXgnB,UAAW,CACT7xG,KAAM4qF,QACNC,SAAS,IAGbvnF,KAAM,WACJ,MAAO,CACLwuG,UAAW,GACX76F,MAAO,GACP8B,QAAS,GACTg5F,QAAS,GACTC,KAAM,GACNhF,UAAU,EACVQ,cAAc,EACdyE,YAAY,EACZC,mBAAe12F,EACf22F,SAAU,KACVC,WAAY,KACZC,WAAY,GACZC,QAAS,GACTt3G,KAAM,GACNE,OAAQ,GACRkgG,OAAQ,GACRwT,IAAK,GACL2D,gBAAY/2F,EACZg3F,oBAAgBh3F,EAChBi3F,oBAAoB,EACpBC,oBAAgBl3F,EAChBm3F,kBAAcn3F,EACdo3F,WAAY,GACZC,mBAAer3F,EACfs3F,gBAAgB,IAGpBC,SAAU,CACR9E,KAAM,WACJ,IAAItb,EAAUryF,OAAOw6F,OAAO,GAAIqV,GA4GhC,OA1GIj4G,KAAKsa,QAAUta,KAAKsa,OAAOlR,SAC7BqxF,EAAQngF,OAASiK,OAAOvkB,KAAKsa,SAG3Bta,KAAKkwD,SAASlwD,KAAKk4G,kBACrBzd,EAAQyd,gBAAkBl4G,KAAKk4G,kBAI5Bzd,EAAQyd,gBAAkBzd,EAAQyd,eAAiB,GAAKzd,EAAQyd,eAAiB,MAChFl4G,KAAK25G,YACHlf,EAAQyd,eAAiB,GAC3Bl4G,KAAK86G,SAAS,8DAAgE54F,OAAOliB,KAAKk4G,kBACtD,IAA3Bzd,EAAQyd,gBAAwBzd,EAAQyd,eAAiB,IAClEl4G,KAAK86G,SAAS,gEAAkE54F,OAAOliB,KAAKk4G,kBAIjE,IAA3Bzd,EAAQyd,eACVzd,EAAQyd,eAAiB,GAEzBzd,EAAQyd,eAAiB,GAIzBl4G,KAAKkwD,SAASlwD,KAAKm4G,kBACrB1d,EAAQ0d,gBAAkBn4G,KAAKm4G,kBAI5B1d,EAAQ0d,gBAAkB1d,EAAQ0d,eAAiB,GAAK1d,EAAQ0d,eAAiB,MAChFn4G,KAAK25G,YACHlf,EAAQ0d,eAAiB,GAC3Bn4G,KAAK86G,SAAS,8DAAgE54F,OAAOliB,KAAKm4G,kBACtD,IAA3B1d,EAAQ0d,gBAAwB1d,EAAQ0d,eAAiB,IAClEn4G,KAAK86G,SAAS,gEAAkE54F,OAAOliB,KAAKm4G,kBAIjE,IAA3B1d,EAAQ0d,eACV1d,EAAQ0d,eAAiB,GAEzB1d,EAAQ0d,eAAiB,GAIzBn4G,KAAKo4G,WAAaprG,MAAM2kB,QAAQ3xB,KAAKo4G,aACvC3d,EAAQ2d,UAAY7sG,KAAKuC,MAAMvC,KAAKC,UAAUxL,KAAKo4G,aAE9Cp4G,KAAKo4G,UAAUhvG,QAAUpJ,KAAK25G,WACjC35G,KAAK86G,SAAS,mDAId96G,KAAKq4G,aAAerrG,MAAM2kB,QAAQ3xB,KAAKq4G,eACzC5d,EAAQ4d,YAAc9sG,KAAKuC,MAAMvC,KAAKC,UAAUxL,KAAKq4G,eAEhDr4G,KAAKq4G,YAAYjvG,QAAUpJ,KAAK25G,WACnC35G,KAAK86G,SAAS,qDAId96G,KAAKs4G,aAAetrG,MAAM2kB,QAAQ3xB,KAAKs4G,eACzC7d,EAAQ6d,YAAc/sG,KAAKuC,MAAMvC,KAAKC,UAAUxL,KAAKs4G,eAEhDt4G,KAAKs4G,YAAYlvG,QAAUpJ,KAAK25G,WACnC35G,KAAK86G,SAAS,qDAId96G,KAAKu4G,oBACP9d,EAAQ8d,mBAAoB,IAG1Bv4G,KAAKg2G,mBAAqBh2G,KAAKu4G,qBACjC9d,EAAQub,mBAAoB,IAG1Bh2G,KAAKo2G,qBAAuBp2G,KAAKu4G,qBACnC9d,EAAQ2b,qBAAsB,IAG5Bp2G,KAAKu2G,qBAAuBv2G,KAAKu4G,qBACnC9d,EAAQ8b,qBAAsB,GAG5Bv2G,KAAKw4G,eACHx4G,KAAK4zG,YACPnZ,EAAQ+d,cAAe,EACdx4G,KAAK25G,WACd35G,KAAK86G,SAAS,wDAId96G,KAAKy4G,YAAcz4G,KAAKy4G,UAAY,IACtChe,EAAQge,WAAaz4G,KAAKy4G,WAGxBz4G,KAAK04G,qBAAuB14G,KAAK04G,mBAAqB,IACxDje,EAAQie,oBAAsB14G,KAAK04G,oBAGjC14G,KAAK24G,mBAAqB34G,KAAK24G,iBAAmB,IACpDle,EAAQke,kBAAoB34G,KAAK24G,kBAG5Ble,GAETsgB,eAAgB,WACd,MAA6B,kBAAf/6G,KAAK0F,OAErBguG,aAAc,WACZ,OAAO1zG,KAAK+1G,KAAKz7F,QAAU29F,EAAgB39F,QAE7C0gG,MAAO,WACL,IAAIl+E,EAAQ98B,KAERi7G,EAAatD,EAAOK,YAAYpjG,QAAO,SAAU9M,GACnD,OAAOg1B,EAAMo+E,eAAepzG,MAG9BmzG,EAAWltF,MAAK,SAAU/oB,EAAG+f,GAC3B,OAAO+X,EAAM42E,aAAaxlG,QAAQ4uB,EAAMo+E,eAAel2G,IAAM,MAAQ83B,EAAM42E,aAAaxlG,QAAQ4uB,EAAMo+E,eAAen2F,IAAM,SAE7H,IAAIo2F,EAAcF,EAAWhzG,KAAI,SAAUH,GACzC,OAAOg1B,EAAMo+E,eAAepzG,MAE9B,MAAO,CACLhF,OAAQ9C,KAAKi6G,SACbj3G,SAAUhD,KAAKk6G,WACfhX,SAAUljG,KAAKm6G,WACfzD,MAAO12G,KAAKo6G,QACZziC,MAAOsjC,GAAc,GACrBrzG,OAAQuzG,GAAe,KAG3BC,YAAa,WACX,IAAI1H,EAAenvF,OAAOvkB,KAAK0zG,cAkB/B,OAhBI1zG,KAAK8C,OACP4wG,EAAeA,EAAaxrG,QAAQ,IAAI+0C,OAAOj9C,KAAKi6G,SAAU,KAAMj6G,KAAK8C,OAGvE9C,KAAKgD,SACP0wG,EAAeA,EAAaxrG,QAAQ,IAAI+0C,OAAOj9C,KAAKk6G,WAAY,KAAMl6G,KAAKgD,SAGzEhD,KAAKkjG,QAAUljG,KAAKm6G,aACtBzG,EAAeA,EAAaxrG,QAAQ,IAAI+0C,OAAOj9C,KAAKm6G,WAAY,KAAMn6G,KAAKkjG,SAGzEljG,KAAK02G,KAAO12G,KAAKo6G,UACnB1G,EAAeA,EAAaxrG,QAAQ,IAAI+0C,OAAOj9C,KAAKo6G,QAAS,KAAMp6G,KAAK02G,MAGnEhD,GAETK,kBAAmB,WACjB,OAAK/zG,KAAKo5G,QAAWp5G,KAAKq5G,OAInBr5G,KAAKo7G,YAAYlzG,QAAQ,IAAI+0C,OAAOj9C,KAAK02G,IAAK,KAAM12G,KAAK22G,eAAe32G,KAAK02G,MAH3E12G,KAAKo7G,aAKhB/H,aAAc,WACZ,OAAOrzG,KAAK0zG,eAAiB1zG,KAAKo7G,aAEpC7H,iBAAkB,WAChB,QAAIvzG,KAAKg7G,MAAMl4G,OAAS9C,KAAK8C,MAAQ9C,KAAKg7G,MAAMh4G,SAAWhD,KAAKgD,QAAUhD,KAAKg7G,MAAM9X,SAAWljG,KAAKkjG,QAAUljG,KAAKg7G,MAAMtE,MAAQ12G,KAAK02G,MAMzI2E,gBAAiB,WACf,OAAOr7G,KAAKg7G,MAAMrjC,MAAM1vE,KAAI,SAAUH,GACpC,OAAOA,MACH,IAER8sG,aAAc,WACZ,OAAI50G,KAAK64G,kBAAmB74G,KAAK4Z,WAIzB5Z,KAAKqzG,cAEfwB,gBAAiB,WACf,QAAI70G,KAAKq1G,wBAILr1G,KAAK+1G,KAAKyC,eAAgBx4G,KAAK80G,UAAa90G,KAAKs1G,eAMvDgG,cAAe,WACb,MAAyB,MAAlBt7G,KAAKi6G,UAAsC,OAAlBj6G,KAAKi6G,UAEvCsB,sBAAuB,WACrB,IAAIC,EAASx7G,KAEb,IAAKA,KAAKi6G,WAAaj6G,KAAK+1G,KAAKqC,UAC/B,OAAO,EAGT,IAAKp4G,KAAK+1G,KAAKqC,UAAUhvG,OACvB,MAAO,GAGT,IAAIuzE,EAAQ,GA8CZ,OA7CA38E,KAAK+1G,KAAKqC,UAAUnmF,SAAQ,SAAUvsB,GACpC,GAAIA,aAAiBsH,MAAO,CACtBtH,EAAM0D,OAAS,GAAKoyG,EAAO7B,WAC7B6B,EAAOV,SAAS,qGAAuG54F,OAAO3W,KAAKC,UAAU9F,GAAQ,iCAGvJ,IAAI6oB,EAAQ7oB,EAAM,GACdypB,EAAMzpB,EAAM,IAAMA,EAAM,GAExB81G,EAAOC,WAAWltF,KACpBA,EAAQitF,EAAOE,kBAAkBntF,IAG/BitF,EAAOC,WAAWtsF,KACpBA,EAAMqsF,EAAOE,kBAAkBvsF,IAGjC,IAAK,IAAIzlB,GAAK6kB,EAAO7kB,IAAMylB,EAAKzlB,IAC1BA,EAAI,GAAKA,EAAI,IAIZizE,EAAMgf,SAASjyF,IAClBizE,EAAM7vE,KAAKpD,OAGV,CAOL,GALEhE,EADE81G,EAAOC,WAAW/1G,GACZ81G,EAAOE,kBAAkBh2G,IAExBA,EAGPA,EAAQ,GAAKA,EAAQ,GACvB,OAGGi3E,EAAMgf,SAASj2F,IAClBi3E,EAAM7vE,KAAKpH,OAIjBi3E,EAAM5uD,MAAK,SAAU/oB,EAAG+f,GACtB,OAAO/f,EAAI+f,KAEN43D,GAETg/B,oBAAqB,WAEnB,IAAK37G,KAAKu7G,sBACR,OAAO,EAIT,GAAIv7G,KAAKs7G,cAAe,CACtB,IAAI3+B,EAAQ38E,KAAKu7G,sBAAsBtzG,KAAI,SAAUvC,GACnD,OAAc,KAAVA,EACK,MACY,KAAVA,GAA0B,IAAVA,EAClB,MAGFA,EAAQ,GAAK,GAAGwc,OAAOxc,EAAQ,GAAI,KAAO,GAAGwc,OAAOxc,EAAO,QAEpE,OAAOi3E,EAIT,OAAO38E,KAAKu7G,uBAEdK,eAAgB,WACd,IAAIC,EAAS77G,KAEb,IAAKA,KAAK4zG,YACR,OAAO,EAGT,GAAI5zG,KAAK27G,oBAAqB,CAC5B,IAAIppD,EAAO,GAEX,GAAIvyD,KAAKs7G,cAAe,CACtB/oD,EAAOvyD,KAAK27G,oBAAoB1zG,KAAI,SAAUmgE,GAC5C,IAAIpjE,EAAIojE,EAAGz4C,OAAO,EAAGy4C,EAAGh/D,OAAS,GAC7B2b,EAAIqjD,EAAGz4C,QAAQ,GACnB,MAAO,GAAGzN,OAAO25F,EAAOC,YAAYD,EAAO5B,SAAUj1G,IAAIkd,OAAO6C,MAElE,IAAIg3F,EAAYxpD,EAAKrkD,QAAQ,OAO7B,OALI6tG,EAAY,GAEdxpD,EAAKw7B,QAAQx7B,EAAKtlD,OAAO8uG,EAAW,GAAG,IAGlCxpD,EAYT,OATAA,EAAOvyD,KAAK27G,oBAAoB1zG,KAAI,SAAUmgE,GAC5C,OAAOyzC,EAAOC,YAAYD,EAAO5B,SAAU7xC,MAGzC7V,EAAKnpD,OAAS,GAAKmpD,EAAK,IAAkB,OAAZA,EAAK,IAErCA,EAAKzlD,KAAKylD,EAAKkpB,SAGVlpB,EAGT,OAAIvyD,KAAKs7G,cACA,GAAGp5F,OAAO,GAAIliB,KAAK+e,MAAM9W,KAAI,SAAUmgE,GAC5C,MAAO,GAAGlmD,OAAOkmD,EAAI,QACnBpoE,KAAK+e,MAAM9W,KAAI,SAAUmgE,GAC3B,MAAO,GAAGlmD,OAAOkmD,EAAI,SAIlBpoE,KAAK+e,OAEdmP,IAAK,WACH,IAAInqB,EAAS,CACXi4G,eAAe,GAEbC,IAAej8G,KAAKo6G,QAExB,GAAI6B,GAAcj8G,KAAKu7G,uBAAyBv7G,KAAKu7G,sBAAsBnyG,OAAQ,CACjF,IAAIuzE,EAAQ,GAAGz6D,OAAO,GAAIliB,KAAKu7G,uBAC/Bx3G,EAAOm4G,GAAKv/B,EAAM34D,MAAK,SAAUte,GAC/B,OAAOA,EAAQ,IAAgB,KAAVA,KAEvB3B,EAAOo4G,GAAKx/B,EAAM34D,MAAK,SAAUte,GAC/B,OAAOA,GAAS,IAAMA,EAAQ,WAGhC3B,EAAOm4G,GAAKD,EACZl4G,EAAOo4G,GAAKF,EAOd,OAJIj8G,KAAKo5G,QAAUp5G,KAAKo5G,OAAOhwG,QAAUpJ,KAAKq5G,QAAUr5G,KAAKq5G,OAAOjwG,UAClErF,EAAOi4G,eAAgB,GAGlBj4G,GAETq4G,gBAAiB,WACf,SAAKp8G,KAAKk6G,aAAel6G,KAAK+1G,KAAKsC,eAI9Br4G,KAAK+1G,KAAKsC,YAAYjvG,OAIpBpJ,KAAKq8G,gBAAgBr8G,KAAK+1G,KAAKsC,YAAa,UAH1C,KAKXiE,gBAAiB,WACf,SAAKt8G,KAAKm6G,aAAen6G,KAAK+1G,KAAKuC,eAI9Bt4G,KAAK+1G,KAAKuC,YAAYlvG,OAIpBpJ,KAAKq8G,gBAAgBr8G,KAAK+1G,KAAKuC,YAAa,UAH1C,KAKXzC,cAAe,WACb,OAAO71G,KAAKg5G,WAAah5G,KAAKi6G,UAEhC/D,gBAAiB,WACf,OAAOl2G,KAAKi5G,aAAej5G,KAAKk6G,YAElC7D,gBAAiB,WACf,OAAOr2G,KAAKk5G,aAAel5G,KAAKm6G,YAElC3D,aAAc,WACZ,OAAOx2G,KAAKm5G,UAAYn5G,KAAKo6G,SAE/BmC,gBAAiB,WACf,GAAKv8G,KAAK+4G,YAAe/4G,KAAK+4G,WAAW3vG,OAIzC,MAAO,CACLqvB,MAAOz4B,KAAK+4G,aAGhByD,eAAgB,WACd,OAAOx8G,KAAKg7G,MAAMpzG,OAAO0F,KAAK,MAEhCmvG,YAAa,WACX,IAAKz8G,KAAK4zG,cAAgB5zG,KAAK+6G,eAC7B,OAAO,EAGT,IAMI2B,EANAhJ,EAAenvF,OAAOvkB,KAAK0zG,cAC3BiJ,EAAgB,IAAIz6F,OAAOliB,KAAKw8G,eAAgB,OAChDI,EAAiB58G,KAAK68G,mBAAmBnJ,EAAciJ,GACvDF,EAAc,GAEdK,EAAYvF,EAA2BqF,GAG3C,IACE,IAAKE,EAAUn7G,MAAO+6G,EAAQI,EAAUr5G,KAAKu3B,MAAO,CAClD,IAAI+hF,EAAUL,EAAMh3G,MAChBs3G,EAAWD,EAAQ,GACnBE,EAAiB,CACnBzwG,MAAOuwG,EAAQvwG,MACfjD,MAAOyzG,EACPl1G,KAAM9H,KAAKk9G,aAAaF,GACxBG,eAAgBH,EAAS5zG,OAAS,EAClCsD,KAAMswG,GAAY,IAAI5zG,QAExBqzG,EAAY3vG,KAAKmwG,IAEnB,MAAO5wD,GACPywD,EAAU3oG,EAAEk4C,GACZ,QACAywD,EAAU16F,IAGZ,OAAOq6F,GAETW,kBAAmB,WACjB,QAAKp9G,KAAK4zG,aAIH5zG,KAAKy8G,YAAYz4F,MAAK,SAAUq5F,GACrC,OAAOA,EAAIF,mBAGfG,eAAgB,WACd,IAAIC,EAASv9G,KAEb,IAAKA,KAAK4zG,YACR,OAAO,EAGT,IAAK5zG,KAAKo9G,kBACR,OAAOp9G,KAAKy8G,YAAYx0G,KAAI,SAAUo1G,GACpC,MAAO,CACL9zG,MAAO8zG,EAAI9zG,MACXzB,KAAMu1G,EAAIv1G,KACVymB,MAAO8uF,EAAI7wG,MACX2iB,IAAKkuF,EAAI7wG,MAAQ6wG,EAAI3wG,QAK3B,IAAI6lD,EAAO,GACPirD,EAAe,EA2BnB,OA1BAx9G,KAAKy8G,YAAYxqF,SAAQ,SAAUorF,GACjC,IAAII,EAEJ,GAAiB,QAAbJ,EAAIv1G,MAAkBy1G,EAAOrvF,IAAI8tF,cACnC,GAAIuB,EAAO7G,KAAO6G,EAAO7G,IAAIttG,OAAQ,CACnC,IAAI4yG,EAA6C,OAA7BuB,EAAO7G,IAAInsF,cAAyBgzF,EAAOnE,OAASmE,EAAOlE,OAC/EoE,EAAkBzB,GAAiBA,EAAc5yG,OAAS4yG,EAAc5yG,OAASi0G,EAAI3wG,SAErF+wG,EAAkBJ,EAAI3wG,SAIxB+wG,EAAkBF,EAAOF,EAAIv1G,OAASy1G,EAAOF,EAAIv1G,MAAMsB,OAASm0G,EAAOF,EAAIv1G,MAAMsB,OAASi0G,EAAI3wG,IAGhG6lD,EAAKzlD,KAAK,CACRvD,MAAO8zG,EAAI9zG,MACXzB,KAAMu1G,EAAIv1G,KACVymB,MAAO8uF,EAAI7wG,MAAQgxG,EACnBruF,IAAKkuF,EAAI7wG,MAAQgxG,EAAeC,IAG9BJ,EAAIF,gBAAkBM,EAAkBJ,EAAI3wG,MAC9C8wG,GAAgBC,EAAkBJ,EAAI3wG,QAGnC6lD,GAETmrD,cAAe,WACb,GAAI19G,KAAKqzG,aACP,MAAO,GAGT,IAAKrzG,KAAK27G,sBAAwB37G,KAAKo8G,kBAAoBp8G,KAAKs8G,iBAAgD,IAA7Bt8G,KAAK+1G,KAAKmC,gBAAqD,IAA7Bl4G,KAAK+1G,KAAKoC,eAC7H,MAAO,GAGT,IAAIp0G,EAAS,GAkBb,OAhBI/D,KAAKg7G,MAAMl4G,MAAS9C,KAAK29G,aAAa39G,KAAKi6G,SAAUj6G,KAAK8C,OAAW9C,KAAK49G,aAAa59G,KAAKi6G,SAAUj6G,KAAK8C,QAAS9C,KAAKi2G,WAAW,OAAQj2G,KAAK8C,OACnJiB,EAAO+I,KAAK,SAGV9M,KAAKg7G,MAAMh4G,QAAWhD,KAAK29G,aAAa39G,KAAKk6G,WAAYl6G,KAAKgD,SAAahD,KAAK49G,aAAa59G,KAAKk6G,WAAYl6G,KAAKgD,UAAWhD,KAAKi2G,WAAW,SAAUj2G,KAAKgD,UAAWhD,KAAK69G,cAAc,SAAU79G,KAAKgD,SAC5Me,EAAO+I,KAAK,WAGV9M,KAAKg7G,MAAM9X,QAAWljG,KAAK29G,aAAa39G,KAAKm6G,WAAYn6G,KAAKkjG,SAAaljG,KAAK49G,aAAa59G,KAAKm6G,WAAYn6G,KAAKkjG,UAAWljG,KAAKi2G,WAAW,SAAUj2G,KAAKkjG,UAAWljG,KAAK69G,cAAc,SAAU79G,KAAKkjG,SAC5Mn/F,EAAO+I,KAAK,WAGV9M,KAAKg7G,MAAMtE,KAAQ12G,KAAK29G,aAAa39G,KAAKo6G,QAASp6G,KAAK02G,MAAU12G,KAAK49G,aAAa59G,KAAKo6G,QAASp6G,KAAK02G,OAAQ12G,KAAKi2G,WAAW,MAAOj2G,KAAK02G,MAC7I3yG,EAAO+I,KAAK,OAGV/I,EAAOqF,OACFrF,EAGF,IAETuvG,gBAAiB,WACf,OAAO5gB,QAAQ1yF,KAAK09G,eAAiB19G,KAAK09G,cAAct0G,SAE1D00G,qBAAsB,WACpB,MAA8B,SAAvB99G,KAAKw5G,eAEd/D,iBAAkB,WAChB,OAAIz1G,KAAK89G,qBACA99G,KAAK46G,eAAiB,UAAY,YAGb,OAAvB56G,KAAKw5G,cAAyB,UAAY,cAGrDuE,MAAO,CACL,cAAe,SAAoBpjF,GACjC36B,KAAKg+G,aAAarjF,IAEpB,sBAAuB,SAA4BsjF,GACjDj+G,KAAKk+G,WAAW,SAAUD,IAE5B,sBAAuB,SAA4BA,GACjDj+G,KAAKk+G,WAAW,SAAUD,IAE5Bv4G,MAAO,CACLm2D,MAAM,EACNlQ,QAAS,WACP3rD,KAAKm+G,eAGT/C,YAAa,WACXp7G,KAAKo+G,cAEPxkG,SAAU,SAAkBykG,GACtBA,IAEEr+G,KAAK80G,WACP90G,KAAK80G,UAAW,GAGd90G,KAAKs1G,eACPt1G,KAAKs1G,cAAe,KAI1B,uBAAwB,SAA6BgJ,EAAWC,GAC1DD,GAAaA,GAAa,EAC5Bt+G,KAAKw+G,MAAM,QAASx+G,KAAK09G,eAChBa,GAAaA,GAAa,GACnCv+G,KAAKw+G,MAAM,QAAS,MAI1B7X,QAAS,CACPmV,YAAa,SAAqBvyG,EAAOG,GACvC,IAAK1J,KAAKkwD,SAASxmD,GACjB,MAAO,GAKT,OAFAA,GAAKA,EAEGH,GACN,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACH,MAAI,CAAC,IAAK,KAAKoyF,SAASpyF,IAAgB,IAANG,EACf,MAAVH,EAAgB,KAAO,KAGzBgb,OAAO7a,GAEhB,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACH,MAAI,CAAC,KAAM,MAAMiyF,SAASpyF,IAAgB,IAANG,EACjB,OAAVH,EAAiB,KAAO,KAG1BG,EAAI,GAAK,IAAIwY,OAAOxY,GAAK6a,OAAO7a,GAEzC,QACE,MAAO,KAGb+0G,mBAAoB,SAA4BC,EAAahL,GAC3D,IAAKgL,IAAgBhL,IAAiBA,EAAatqG,OACjD,MAAO,GAGT,IAAK,IAAIM,EAAI,EAAGA,EAAIg1G,EAAYt1G,OAAQM,IACtC,GAAIgqG,EAAaxlG,QAAQwwG,EAAYh1G,KAAO,EAC1C,OAAOg1G,EAAYh1G,GAIvB,MAAO,IAETs0G,aAAc,SAAsBW,GAClC,IAAIC,EAAS5+G,KAEb2+G,EAAYA,GAAa3+G,KAAK+1G,KAAKz7F,QAAU29F,EAAgB39F,OAC7D,IAAI2/F,EAAWj6G,KAAKy+G,mBAAmB9G,EAAOC,YAAa+G,GACvDzE,EAAal6G,KAAKy+G,mBAAmB9G,EAAOE,cAAe8G,GAC/D3+G,KAAKm6G,WAAan6G,KAAKy+G,mBAAmB9G,EAAOG,cAAe6G,GAChE3+G,KAAKo6G,QAAUp6G,KAAKy+G,mBAAmB9G,EAAOI,WAAY4G,GAErD1E,GAAaC,GAAel6G,KAAKm6G,YAAen6G,KAAKo6G,UACpDp6G,KAAK25G,WAAa35G,KAAKsa,QACzBta,KAAK86G,SAAS,0DAA6D54F,OAAOliB,KAAKsa,OAAQ,+CAGjG2/F,EAAW,KACXC,EAAa,MAGfl6G,KAAKi6G,SAAWA,EAChBj6G,KAAKk6G,WAAaA,EAClBl6G,KAAKi6G,SAAWj6G,KAAK6+G,kBAAoB7+G,KAAK+e,MAAQ,GACtD/e,KAAKk6G,WAAal6G,KAAKk+G,WAAW,UAAYl+G,KAAK6gB,QAAU,GAC7D7gB,KAAKm6G,WAAan6G,KAAKk+G,WAAW,UAAYl+G,KAAK65G,QAAU,GAC7D75G,KAAKo6G,QAAUp6G,KAAK8+G,gBAAkB9+G,KAAK85G,KAAO,GAClD95G,KAAK++G,WAAU,WACbH,EAAOT,iBAGXU,gBAAiB,WAIf,IAHA,IAAIG,EAAah/G,KAAKs7G,cAAgB,GAAK,GACvCv8F,EAAQ,GAEHrV,EAAI,EAAGA,EAAIs1G,EAAYt1G,IACR,MAAlB1J,KAAKi6G,UAAsC,OAAlBj6G,KAAKi6G,SAChCl7F,EAAMjS,KAAK9M,KAAK87G,YAAY97G,KAAKi6G,SAAUvwG,EAAI,IAE/CqV,EAAMjS,KAAK9M,KAAK87G,YAAY97G,KAAKi6G,SAAUvwG,IAI/C1J,KAAK+e,MAAQA,GAEfm/F,WAAY,SAAoB1hD,EAAUyiD,GACxC,GAAKj/G,KAAKk/G,iBAAiB1iD,GAA3B,CAIA,IAAI2iD,EAAwB,WAAb3iD,EACfyiD,EAAWA,IAAaE,EAAWn/G,KAAK+1G,KAAKmC,gBAAkBD,EAAgBC,eAAiBl4G,KAAK+1G,KAAKoC,gBAAkBF,EAAgBE,gBAG5I,IAFA,IAAIp0G,EAAS,GAEJ2F,EAAI,EAAGA,EAAI,GAAIA,GAAKu1G,EAC3Bl7G,EAAO+I,KAAK9M,KAAK87G,YAAYqD,EAAWn/G,KAAKk6G,WAAal6G,KAAKm6G,WAAYzwG,IAG7Ey1G,EAAWn/G,KAAK6gB,QAAU9c,EAAS/D,KAAK65G,QAAU91G,IAEpD+6G,cAAe,WACb9+G,KAAK85G,KAAwB,MAAjB95G,KAAKo6G,QAAkB,CAAC,KAAM,MAAQ,CAAC,KAAM,OAE3D+D,WAAY,WACNn+G,KAAK+6G,gBACH/6G,KAAK25G,WACP35G,KAAK86G,SAAS,6BAA8B54F,OAAOliB,KAAK0F,MAAO,MAGjE1F,KAAKo/G,iBAAiBp/G,KAAK0F,SAEvB1F,KAAK25G,WACP35G,KAAK86G,SAAS,8BAA+B54F,OAAO3W,KAAKC,UAAUxL,KAAK0F,OAAS,IAAK,MAGxF1F,KAAKq/G,iBAAiBr/G,KAAK0F,SAG/B25G,iBAAkB,SAA0BC,GAC1C,IAAIC,EAASv/G,KAET45G,EAAYruG,KAAKuC,MAAMvC,KAAKC,UAAU8zG,GAAY,KAClDzrG,EAASzL,OAAOyd,KAAK+zF,GAEH,IAAlB/lG,EAAOzK,QAKXuuG,EAAOK,YAAY/lF,SAAQ,SAAUnqB,GACnC,IAAIyB,EAAQg2G,EAAOrE,eAAepzG,GAElC,GAAI+L,EAAO3F,QAAQ3E,IAAU,EAAG,CAC9B,IAAIi2G,EAAiBD,EAAOC,eAAej2G,EAAOqwG,EAAUrwG,IAE5Dg2G,EAAOz3G,GAAQ03G,EACf5F,EAAUrwG,GAASi2G,OAEnBD,EAAOz3G,GAAQ,MAGnB9H,KAAK45G,UAAYA,GAhBf55G,KAAKy/G,qBAkBT5C,mBAAoB,SAA4B6C,EAAYC,GAC1D,IAAItzG,EAAM,eACNuzG,EAAgBltB,SAASrmF,EAAIwzG,UAAoC,oBAAjBxzG,EAAIwzG,UACxD,OAAOD,EAAgB5/G,KAAK8/G,iBAAiBJ,EAAYC,GAAeD,EAAWG,SAAS,IAAI5iE,OAAO0iE,EAAa,OAEtHP,iBAAkB,SAA0BW,GAC1C,IAAIC,EAAShgH,KAGb,GAAK+/G,GAAgBA,EAAY32G,OAAjC,CAKA,IASI62G,EATAvM,EAAenvF,OAAOvkB,KAAK0zG,cAC3BiJ,EAAgB,IAAIz6F,OAAOliB,KAAKw8G,eAAgB,OAChD0D,EAAgB,MAAMh+F,OAAOliB,KAAKw8G,eAAgB,OAClDI,EAAiB58G,KAAK68G,mBAAmBnJ,EAAciJ,GACvDwD,EAAiBngH,KAAK68G,mBAAmBnJ,EAAcwM,GACvDE,EAAS,GACT3D,EAAc,GAEd4D,EAAa9I,EAA2BqF,GAG5C,IACE,IAAKyD,EAAW1+G,MAAOs+G,EAASI,EAAW58G,KAAKu3B,MAAO,CACrD,IAAI+hF,EAAUkD,EAAOv6G,MACjBu3G,EAAiB,CACnBzwG,MAAOuwG,EAAQvwG,MACfjD,MAAOwzG,EAAQ,GACfuD,cAAc,GAEhBF,EAAOtzG,KAAKmwG,GACZR,EAAY3vG,KAAKmwG,IAEnB,MAAO5wD,GACPg0D,EAAWlsG,EAAEk4C,GACb,QACAg0D,EAAWj+F,IAGb,IACIm+F,EADAC,EAAajJ,EAA2B4I,GAG5C,IACE,IAAKK,EAAW7+G,MAAO4+G,EAASC,EAAW/8G,KAAKu3B,MAAO,CACrD,IAAIylF,EAAUF,EAAO76G,MACrB06G,EAAOtzG,KAAK,CACVN,MAAOi0G,EAAQj0G,MACfjD,MAAOk3G,EAAQ,MAGnB,MAAOp0D,GACPm0D,EAAWrsG,EAAEk4C,GACb,QACAm0D,EAAWp+F,IAGbg+F,EAAOryF,MAAK,SAAU/oB,EAAG+f,GACvB,OAAO/f,EAAEwH,MAAQuY,EAAEvY,OAAS,EAAI,KAElC,IAAIk0G,EAAa,GACjBN,EAAOnuF,SAAQ,SAAU0uF,GACvB,GAAIA,EAAML,aAAc,CACtB,IAAIM,EAAaZ,EAAOa,cAAcF,EAAMp3G,QAAU,GACtDm3G,GAAcE,MACT,CACL,IAAIE,EAAYH,EAAMp3G,MAAMrB,QAAQ,sBAAuB,QAC3Dw4G,GAAc,MAAMx+F,OAAO4+F,EAAW,SAG1C,IAAIC,EAAW,IAAI9jE,OAAOyjE,GAE1B,GAAIK,EAAS12G,KAAK01G,GAAc,CAC9B,IAAIiB,EAAejB,EAAYj7G,MAAM,IAAIm4C,OAAOyjE,IAC5CO,EAAeD,EAAav0G,MAAM,EAAGgwG,EAAYrzG,OAAS,GAC1DwwG,EAAY,GAShB,GARAqH,EAAahvF,SAAQ,SAAUvsB,EAAOw7G,GACpC,GAAIzE,EAAYyE,GAAU,CACxB,IAAIC,EAAc1E,EAAYyE,GAAS33G,MACvCqwG,EAAUuH,GAAenB,EAAOoB,mBAAmB17G,EAAOy7G,OAG9DnhH,KAAK45G,UAAYA,EAEb55G,KAAK25G,UAAW,CAClB,IAAI0H,EAAoB5E,EAAYx0G,KAAI,SAAUq5G,GAChD,OAAOA,GAAUA,EAAO/3G,SAE1BvJ,KAAK86G,SAAS,8BAA8B54F,OAAO3W,KAAKC,UAAUy1G,GAAe,UAAU/+F,OAAO3W,KAAKC,UAAU61G,GAAoB,yBAAyBn/F,OAAOliB,KAAK0zG,aAAc,YAGtL1zG,KAAK25G,WACP35G,KAAK86G,SAAS,8EAAkF54F,OAAOliB,KAAK0zG,aAAc,eAAexxF,OAAO69F,SApFlJ//G,KAAKy/G,qBAwFTK,iBAAkB,SAA0ByB,EAAcC,GACxD,IAAIC,EAAcF,EAAaz8G,MAAM,IAAIm4C,OAAOukE,EAAS,MACrDz9G,EAAS,GACT29G,EAAa,GA6BjB,OA3BID,GAAeA,EAAYr4G,QAC7Bq4G,EAAYxvF,SAAQ,SAAU0vF,GAC5B,IAGIn1G,EAHAo1G,EAAaF,EAAWr6C,WAAU,SAAUw6C,GAC9C,OAAOA,EAAQx1G,MAAQs1G,KAIzB,GAAIC,GAAc,EACZF,EAAWE,IAAeF,EAAWE,GAAY3xG,QACnDzD,EAAQk1G,EAAWE,GAAY3xG,MAAM5M,KAAKk+G,GAAc/0G,WAErD,CACL,IAAIs1G,EAAmB,IAAI7kE,OAAO0kE,EAAa,KAC/Cn1G,EAAQs1G,EAAiBz+G,KAAKk+G,GAAc/0G,MAC5Ck1G,EAAW50G,KAAK,CACdT,IAAKkY,OAAOo9F,GACZ1xG,MAAO6xG,IAIX/9G,EAAO+I,KAAK,CACVmb,EAAG1D,OAAOo9F,GACVn1G,MAAOA,OAKNzI,GAET07G,kBAAmB,WACjB,IAAIsC,EAAS/hH,KAET45G,EAAY,GAChB55G,KAAKg7G,MAAMrjC,MAAM1lD,SAAQ,SAAUnqB,GACjC8xG,EAAUmI,EAAO7G,eAAepzG,IAAS,MAE3C9H,KAAK45G,UAAYA,GAEnBwH,mBAAoB,SAA4BrhF,EAAax2B,GAC3D,IAAKA,IAAUw2B,EACb,MAAO,GAGT,IAAIiiF,EAAYhiH,KAAKk9G,aAAa3zG,GAElC,IAAKy4G,IAAcA,EAAU54G,OAC3B,MAAO,GAGT,IAAI64G,EAAWliF,IAAgB//B,KAAKk7G,eAAe8G,GAAajiF,EAAc,GAE9E,OADA//B,KAAKgiH,GAAaC,EACXA,GAET7D,WAAY,SAAoB8D,GAC9B,IAKIC,EALAC,EAASpiH,KAETq6G,EAAa,GACbgI,EAAWriH,KAAK8C,KAChBw/G,EAAetiH,KAAKi6G,SAGxB,GAAKqI,GAAiBtiH,KAAKkwD,SAASmyD,GAO7B,CACL,IAAIE,GAAaF,EAEbG,KAAYxiH,KAAKs7G,gBAAiBt7G,KAAK02G,MAAM12G,KAAKyiH,cAAcziH,KAAK02G,KAEzEiB,EAAOC,YAAY3lF,SAAQ,SAAU1oB,GAMnC,IAAI7D,EACAgxG,EANJ,GAAIntG,IAAU+4G,EAQd,OAAQ/4G,GACN,IAAK,IACL,IAAK,KACL,IAAK,IACL,IAAK,KAGC7D,EAFA08G,EAAO9G,cACS,OAAdkH,EACMD,EAAY,GAAKA,EAAY,GAAKA,EACjC,CAAC,IAAK,MAAM5mB,SAASpyF,GACR,KAAdg5G,EAAmB,GAAKA,EAExBA,EAAY,GAGlB,CAAC,IAAK,MAAM5mB,SAASpyF,GACD,IAAdg5G,EAAkB,GAAKA,EAEvBA,EAAY,GAIxBlI,EAAW9wG,GAAS64G,EAAOtG,YAAYvyG,EAAO7D,GAC9C,MAEF,IAAK,IACL,IAAK,KAEC08G,EAAO9G,eACT51G,EAAQ68G,EACR7L,EAAM8L,GAAa,IAEfD,EAAY,IAAMA,EAAY,IAChC7L,EAAM,KACNhxG,EAAsB,KAAd68G,EAAmB,GAAKA,EAAY,KAE5C7L,EAAM,KACNhxG,EAAQ68G,EAAY,KAAO,EAAI,GAAKA,GAIxClI,EAAW9wG,GAAS64G,EAAOtG,YAAYvyG,EAAO7D,GAC9C20G,EAAWv5F,EAAI41F,EACf2D,EAAW3hB,EAAIge,EAAIzzC,cACnB,WAlDFo3C,EAAW9wG,GAAS84G,UAbxB1K,EAAOC,YAAY3lF,SAAQ,SAAU1oB,GACnC,OAAO8wG,EAAW9wG,GAAS,MAE7B44G,EAAWniH,KAAKyiH,cAAcziH,KAAK02G,KAAO,IAC1C2D,EAAWv5F,EAAIqhG,EACf9H,EAAW3hB,EAAIypB,EAASl/C,cA+D1Bo3C,EAAWx4G,EAAI7B,KAAK87G,YAAY,IAAK97G,KAAKgD,QAC1Cq3G,EAAWv4G,GAAK9B,KAAK87G,YAAY,KAAM97G,KAAKgD,QAC5Cq3G,EAAW14G,EAAI3B,KAAK87G,YAAY,IAAK97G,KAAKkjG,QAC1CmX,EAAWz4G,GAAK5B,KAAK87G,YAAY,KAAM97G,KAAKkjG,QAC5CljG,KAAKq6G,WAAaA,EAIbr6G,KAAKs5G,OAAQ4I,GAChBliH,KAAK0iH,gBAGH1iH,KAAK84G,iBAAmB94G,KAAKuzG,kBAAoBvzG,KAAKs1G,cACxDt1G,KAAKw1G,gBAGTmN,YAAa,WAKX,OAJK3iH,KAAKq6G,YACRr6G,KAAKo+G,aAGA,CACLhzG,KAAMG,KAAKuC,MAAMvC,KAAKC,UAAUxL,KAAKq6G,aACrCe,YAAap7G,KAAKqzG,aAAe,GAAK9uF,OAAOvkB,KAAKo7G,eAGtDsH,cAAe,WACb,GAAI1iH,KAAKs5G,MAAQt5G,KAAKs6G,iBAAmBt6G,KAAKo7G,YACxCp7G,KAAK25G,WACP35G,KAAK86G,SAAS,+FAFlB,CAQA,IAAI8H,EAAW5iH,KAAK2iH,cAEpB,GAAI3iH,KAAK+6G,eACP/6G,KAAKw+G,MAAM,QAASoE,EAASxH,iBACxB,CACL,IAAIf,EAAauI,EAASx3G,KACtB+vG,EAAcn7G,KAAKg7G,MAAMpzG,QAAU,GACnCgyG,EAAY,GAChBuB,EAAYlpF,SAAQ,SAAU1oB,GAC5BqwG,EAAUrwG,GAAS8wG,EAAW9wG,IAAU,MAE1CvJ,KAAKw+G,MAAM,QAASjzG,KAAKuC,MAAMvC,KAAKC,UAAUouG,KAGhD55G,KAAKw+G,MAAM,SAAUoE,KAEvBlH,kBAAmB,SAA2Bh2G,GAC5C,IAAIm9G,EAAS7iH,KAAK8iH,cAAcp9G,GAEhC,OAAmB,MAAdm9G,EAAO,IACFA,EAAO,IAAkC,MAA5BA,EAAO,GAAGt4F,cAAwB,EAAI,KAGrDs4F,EAAO,IAAkC,MAA5BA,EAAO,GAAGt4F,cAAwB,GAAK,IAE9D0rF,WAAY,SAAoBnuG,EAAMpC,GACpC,IAAK1F,KAAK+iH,YAAYj7G,KAAU9H,KAAKg7G,MAAMlzG,GACzC,OAAO,EAGT,OAAQA,GACN,IAAK,OACH,OAAO9H,KAAKgjH,eAAet9G,GAE7B,IAAK,SACL,IAAK,SACH,QAAK1F,KAAK,GAAGkiB,OAAOpa,EAAM,gBAIlB9H,KAAK,GAAGkiB,OAAOpa,EAAM,cAAc6zF,SAASj2F,GAEtD,IAAK,MACH,QAAK1F,KAAK27G,sBAIF37G,KAAKkuB,IAAIluB,KAAKyiH,cAAc/8G,IAEtC,QACE,OAAO,IAGbs9G,eAAgB,SAAwBt9G,GACtC,IAAK1F,KAAK27G,oBACR,OAAO,EAGT,GAAI37G,KAAKs7G,cAAe,CACtB,GAAKt7G,KAAK02G,KAAQ12G,KAAK02G,IAAIttG,OAEpB,CACL,IAAIG,EAAmC,OAA3BvJ,KAAK02G,IAAInsF,cAAyB,IAAM,IACpD,OAAQvqB,KAAK27G,oBAAoBhgB,SAAS,GAAGz5E,QAAQxc,GAAOwc,OAAO3Y,IAHnE,OAAO,EAQX,OAAuB,OAAlBvJ,KAAKi6G,UAAuC,MAAlBj6G,KAAKi6G,UAAgC,KAAVv0G,IAAe1F,KAAK27G,oBAAoBhgB,SAAS,OAInG37F,KAAK27G,oBAAoBhgB,UAAUj2F,IAE7Cm4G,cAAe,SAAuBoF,EAASv9G,GAC7C,GAAKu9G,GAAYjjH,KAAKk/G,iBAAiB+D,GAIvC,OAAkD,IAA9CjjH,KAAK+1G,KAAK,GAAG7zF,OAAO+gG,EAAS,eAIzBv9G,EAAQ1F,KAAK+1G,KAAK,GAAG7zF,OAAO+gG,EAAS,eAAiB,GAEhE5G,gBAAiB,SAAyB6G,EAAUD,GAClD,IAAIE,EAAUnjH,KAEd,IAAKkjH,IAAaD,IAAYjjH,KAAKk/G,iBAAiB+D,GAClD,MAAO,GAGT,IACIG,EADAzmC,EAAQ,GAsCZ,GApCAumC,EAASjxF,SAAQ,SAAUvsB,GACzB,GAAIA,aAAiBsH,MAAO,CACtBtH,EAAM0D,OAAS,GAAK+5G,EAAQxJ,WAC9BwJ,EAAQrI,SAAS,wBAAyB54F,OAAO+gG,EAAS,6EAA8E/gG,OAAO3W,KAAKC,UAAU9F,GAAQ,iCAMxK,IAHA,IAAI6oB,EAAQ7oB,EAAM,GACdypB,EAAMzpB,EAAM,IAAMA,EAAM,GAEnBgE,GAAK6kB,EAAO7kB,IAAMylB,EAAKzlB,IAC1BA,EAAI,GAAKA,EAAI,KAIjB05G,EAAgBD,EAAQrH,YAAYqH,EAAQjI,eAAe+H,GAAUv5G,GAEhEizE,EAAMgf,SAASynB,IAClBzmC,EAAM7vE,KAAKs2G,QAGV,CACL,IAAK19G,EAAQ,IAAMA,EAAQ,GACzB,OAGF09G,EAAgBD,EAAQrH,YAAYqH,EAAQjI,eAAe+H,GAAUv9G,GAEhEi3E,EAAMgf,SAASynB,IAClBzmC,EAAM7vE,KAAKs2G,OAIjBzmC,EAAM5uD,MAAK,SAAU/oB,EAAG+f,GACtB,OAAO/f,EAAI+f,KAGT/kB,KAAK25G,UAAW,CAClB,IAAI0J,GAAwB,WAAZJ,EAAuBjjH,KAAK6gB,QAAU7gB,KAAK65G,UAAY,GACnEyJ,EAAaD,EAASzuG,QAAO,SAAUwrC,GACzC,OAAOu8B,EAAMgf,SAASv7C,MAGnBkjE,GAAeA,EAAWl6G,SACb,WAAZ65G,EACFjjH,KAAK86G,SAAS,4EAA8E54F,OAAO3W,KAAKC,UAAUxL,KAAKq4G,aAAc,uBAAuBn2F,OAAOliB,KAAK+1G,KAAKmC,iBAE7Kl4G,KAAK86G,SAAS,4EAA8E54F,OAAO3W,KAAKC,UAAUxL,KAAKs4G,aAAc,uBAAuBp2F,OAAOliB,KAAK+1G,KAAKoC,kBAKnL,OAAOx7B,GAET4mC,kBAAmB,WACjB,IAAIvjH,KAAK4zG,aAKL5zG,KAAKo6G,UAAYp6G,KAAK02G,MACpB12G,KAAKkuB,IAAIguF,IAAMl8G,KAAKkuB,IAAIiuF,IAAI,CAC9Bn8G,KAAKu6G,oBAAqB,EAC1B,IAAI4H,EAAWniH,KAAKkuB,IAAIguF,GAAK,KAAO,KACpCl8G,KAAK02G,IAAuB,MAAjB12G,KAAKo6G,QAAkB+H,EAASl/C,cAAgBk/C,IAIjEqB,kBAAmB,WACbxjH,KAAKu6G,oBAAoC,KAAdv6G,KAAK8C,MAA+B,KAAhB9C,KAAKgD,QAAiC,KAAhBhD,KAAKkjG,SAC5EljG,KAAK02G,IAAM,IAGb12G,KAAKu6G,oBAAqB,GAE5B5D,eAAgB,SAAwBwL,GACtC,OAAIniH,KAAKo5G,QAA2C,OAAjCp5G,KAAKyiH,cAAcN,GAC7BniH,KAAKo5G,OAGVp5G,KAAKq5G,QAA2C,OAAjCr5G,KAAKyiH,cAAcN,GAC7BniH,KAAKq5G,OAGP8I,GAET3M,aAAc,WACZ,IAAIiO,EAAUzjH,KAEVA,KAAK4Z,WAIT5Z,KAAK80G,UAAY90G,KAAK80G,SAElB90G,KAAK80G,UACP90G,KAAK+5G,YAAa,EAEd/5G,KAAK4zG,aACP5zG,KAAKw+G,MAAM,SAGRx+G,KAAK+1G,KAAKyC,cACbx4G,KAAKo1G,kBAAiB,GAIpBp1G,KAAKs5G,OACPt5G,KAAKs6G,eAAiB/1F,OAAOvkB,KAAKo7G,aAAe,KAG/Cp7G,KAAK4zG,cAAgB5zG,KAAKqzG,cAC5BrzG,KAAK++G,WAAU,WACT0E,EAAQC,MAAM7+G,OAAgD,IAAvC4+G,EAAQC,MAAM7+G,MAAMgsD,gBAAwB4yD,EAAQC,MAAM7+G,MAAM8+G,eAAiBF,EAAQrI,YAAYhyG,QAE9Hq6G,EAAQG,uBAKV5jH,KAAKs1G,aACPt1G,KAAKo1G,kBAAiB,GACbp1G,KAAK4zG,aACd5zG,KAAKw+G,MAAM,OAAQx+G,KAAK2iH,eAG1B3iH,KAAK+5G,YAAa,EAEd/5G,KAAKs5G,OACPt5G,KAAKo+G,YAAW,GAChBp+G,KAAKs6G,oBAAiBh3F,IAItBtjB,KAAK27G,qBAAuB37G,KAAKs7G,gBACnCt7G,KAAKs1G,aAAet1G,KAAKujH,oBAAsBvjH,KAAKwjH,qBAGlDxjH,KAAKs1G,cACPt1G,KAAK6jH,uBAGTzO,iBAAkB,SAA0B0O,GAC1C,IAAIC,EAAgB56G,UAAUC,OAAS,QAAsBka,IAAjBna,UAAU,IAAmBA,UAAU,GAE/E26G,GACE9jH,KAAK05G,cACP15G,KAAKgkH,uBAGPhkH,KAAKu1G,eAEDv1G,KAAK89G,sBACP99G,KAAKikH,qBAGPjkH,KAAKs1G,cAAe,EACpBt1G,KAAKw+G,MAAM,QAEPuF,IACE/jH,KAAKq1G,sBACPr1G,KAAK80G,UAAW,GAGlB90G,KAAKw+G,MAAM,OAAQx+G,KAAK2iH,eACxB3iH,KAAK6jH,wBAGP7jH,KAAKs1G,cAAe,EACpBt1G,KAAKw+G,MAAM,QAASx+G,KAAK2iH,eAErB3iH,KAAK05G,cACP15G,KAAKkkH,2BAIXF,qBAAsB,WACpB,IAAIG,EAAWnkH,KAAK0jH,OAAS1jH,KAAK0jH,MAAMS,SACpCzwG,EAAO3J,SAASsM,qBAAqB,QAAQ,GAE7C3C,GAAQywG,IACVh9G,OAAOyG,iBAAiB,SAAU5N,KAAKokH,mBACvCD,EAASE,UAAUj3G,IAAI,6BACvBpN,KAAKokH,oBACL1wG,EAAK4C,YAAY6tG,KAGrBC,kBAAmB,WACjB,GAAKpkH,KAAK05G,aAAV,CAIA,IAAIyK,EAAWnkH,KAAK0jH,OAAS1jH,KAAK0jH,MAAMS,SACpCzwG,EAAO3J,SAASsM,qBAAqB,QAAQ,GAEjD,GAAI3C,GAAQywG,EAAU,CACpB,IAAIG,EAAMtkH,KAAK+uC,IAAIw1E,wBAEW,YAA1BvkH,KAAKy1G,kBACP0O,EAASt0G,MAAMuzC,OAAS,GAAGlhC,OAAO/a,OAAOq9G,YAAcF,EAAIjiH,EAAG,MAC9D8hH,EAASt0G,MAAM+9B,IAAM,SAErBu2E,EAASt0G,MAAM+9B,IAAM,GAAG1rB,OAAOoiG,EAAIjiH,EAAIiiH,EAAI5rF,OAAQ,MACnDyrF,EAASt0G,MAAMuzC,OAAS,QAG1B+gE,EAASt0G,MAAM89B,KAAO,GAAGzrB,OAAOoiG,EAAIpoG,EAAG,SAG3CgoG,uBAAwB,WACtB,IAAIC,EAAWnkH,KAAK0jH,OAAS1jH,KAAK0jH,MAAMS,SACpCzwG,EAAO3J,SAASsM,qBAAqB,QAAQ,GAE7C3C,GAAQywG,GAAYzwG,EAAKsG,SAASmqG,IACpCzwG,EAAK4Z,YAAY62F,GAGfA,IACFA,EAASE,UAAUrpG,OAAO,6BAC1BmpG,EAASt0G,MAAM+9B,IAAM,GACrBu2E,EAASt0G,MAAMuzC,OAAS,GACxB+gE,EAASt0G,MAAM89B,KAAO,GACtB3tC,KAAK+uC,IAAIz4B,YAAY6tG,IAGvBh9G,OAAOg1B,oBAAoB,SAAUn8B,KAAKokH,oBAE5ChQ,UAAW,WACLp0G,KAAK4zG,cAAgB5zG,KAAK+1G,KAAKyC,cAEjCx4G,KAAKw+G,MAAM,OAAQx+G,KAAK2iH,gBAG5BxwG,OAAQ,SAAgBrK,EAAMpC,GACxB1F,KAAK+iH,YAAYj7G,KAAU9H,KAAKi2G,WAAWnuG,EAAMpC,KACnD1F,KAAK8H,GAAQpC,EAET1F,KAAKu6G,qBACPv6G,KAAKu6G,oBAAqB,KAIhCvF,UAAW,WACLh1G,KAAK4Z,WAIT5Z,KAAK8C,KAAO,GACZ9C,KAAKgD,OAAS,GACdhD,KAAKkjG,OAAS,GACdljG,KAAK02G,IAAM,GAEP12G,KAAK4zG,aAAe5zG,KAAK0jH,OAAS1jH,KAAK0jH,MAAM7+G,OAAS7E,KAAK0jH,MAAM7+G,MAAMa,MAAM0D,SAC/EpJ,KAAK0jH,MAAM7+G,MAAMa,MAAQ,IAGvB1F,KAAKs5G,MACPt5G,KAAKo+G,YAAW,KAMpByF,mBAAoB,WAClB,IAAIY,EAAUzkH,KAEVA,KAAKqzG,eAILrzG,KAAKu5G,WACPv5G,KAAK++G,WAAU,WACb0F,EAAQC,4BAED1kH,KAAK01G,kBAEd11G,KAAK++G,WAAU,WACb,IAAI4F,EAAcF,EAAQzJ,MAAMrjC,MAAM,GAEtC8sC,EAAQG,iBAAiBD,GAAa,QAI5CC,iBAAkB,SAA0BhP,GAC1C,IAAIiP,EAAgB17G,UAAUC,OAAS,QAAsBka,IAAjBna,UAAU,IAAmBA,UAAU,GAEnF,GAAKnJ,KAAK45G,YAAa55G,KAAKqzG,aAA5B,CAIA,IAAIyR,EAGFA,EADE9kH,KAAK05G,cAAgB15G,KAAK0jH,OAAS1jH,KAAK0jH,MAAMS,SACnCnkH,KAAK0jH,MAAMS,SAASn6G,iBAAiB,MAAMkY,OAAO0zF,EAAQ,MAAM,GAEhE51G,KAAK+uC,IAAI/kC,iBAAiB,MAAMkY,OAAO0zF,EAAQ,MAAM,GAGpE,IAAImP,EAAc/kH,KAAKglH,gBAAgBpP,GAAQ,IAE1CmP,GAAeF,IAElBE,EAAc/kH,KAAKilH,gBAAgBrP,GAAQ,IAGzCkP,GAAcC,IAChBD,EAAWllE,UAAYmlE,EAAYG,WAAa,EAE5CllH,KAAK01G,kBACPqP,EAAYlqG,WAIlB6pG,uBAAwB,WACtB,IAAIS,EAAUnlH,KAETA,KAAK45G,YAAa55G,KAAKqzG,cAI5BrzG,KAAKg7G,MAAMrjC,MAAM1lD,SAAQ,SAAUgxF,GACjCkC,EAAQP,iBAAiB3B,OAM7BjP,QAAS,WACHh0G,KAAK4Z,WAIJ5Z,KAAK+5G,aACR/5G,KAAK+5G,YAAa,GAGf/5G,KAAK80G,UACR90G,KAAKw1G,iBAGThB,QAAS,WACP,IAAIx0G,KAAK4Z,SAAT,CAIAzS,OAAOgyC,aAAan5C,KAAKg6G,eACzBh6G,KAAK+5G,YAAa,EAClB,IAAIqL,EAAWplH,KAAK+uC,IAAI/kC,iBAAiB,sBAAsB,GAE3Do7G,GACFA,EAASC,SAGblR,aAAc,WACZ,IAAImR,EAAUtlH,KAEVA,KAAK4Z,WAIT5Z,KAAK+5G,YAAa,EAClB5yG,OAAOgyC,aAAan5C,KAAKg6G,eACzBh6G,KAAKg6G,cAAgB7yG,OAAOizB,YAAW,WACrCjzB,OAAOgyC,aAAamsE,EAAQtL,eAE5BsL,EAAQC,WACPvlH,KAAK+1G,KAAK0C,aAEf8M,OAAQ,WACDvlH,KAAK4Z,UAAa5Z,KAAK+5G,aAAc/5G,KAAK80G,UAC7C90G,KAAKw1G,gBAGTD,aAAc,WACRv1G,KAAK4Z,WAITzS,OAAOgyC,aAAan5C,KAAKg6G,eAEpBh6G,KAAK+5G,aACR/5G,KAAK+5G,YAAa,KAGtBnD,MAAO,SAAehB,EAAQlwG,EAAOwF,GACnC,GAAIlL,KAAK05G,cAAgBxuG,EAAIi8D,SAAU,CACrC,IAAIw9C,EAAc3kH,KAAKg7G,MAAMrjC,MAAM,GAEnC,GAAIi+B,IAAW+O,EACb,OAGF,IAAIa,EAAkBxlH,KAAKilH,gBAAgBN,GAAa,GAEpDa,GAAmBA,EAAgB3nG,aAAa,cAAgB0G,OAAO7e,KACzEwF,EAAI6hC,iBAEA/sC,KAAK0jH,OAAS1jH,KAAK0jH,MAAM7+G,OAC3B7E,KAAK0jH,MAAM7+G,MAAMgW,WAKzBoqG,gBAAiB,SAAyBrP,GACxC,IAAI6P,EAAc,GAAGvjG,OAAO0zF,EAAQ,KAEpC,OAAI51G,KAAK05G,cAAgB15G,KAAK0jH,OAAS1jH,KAAK0jH,MAAMS,SACzCnkH,KAAK0jH,MAAMS,SAASn6G,iBAAiB,MAAMkY,OAAOujG,EAAa,qCAGjEzlH,KAAK+uC,IAAI/kC,iBAAiB,MAAMkY,OAAOujG,EAAa,sCAE7DT,gBAAiB,SAAyBpP,GACxC,IAAI6P,EAAc,GAAGvjG,OAAO0zF,EAAQ,KAEpC,OAAI51G,KAAK05G,cAAgB15G,KAAK0jH,OAAS1jH,KAAK0jH,MAAMS,SACzCnkH,KAAK0jH,MAAMS,SAASn6G,iBAAiB,MAAMkY,OAAOujG,EAAa,4BAGjEzlH,KAAK+uC,IAAI/kC,iBAAiB,MAAMkY,OAAOujG,EAAa,6BAE7DC,kBAAmB,SAA2B9P,EAAQ+P,GACpD,IAAIC,EAAcz8G,UAAUC,OAAS,QAAsBka,IAAjBna,UAAU,IAAmBA,UAAU,GAC7E08G,EAAgB7lH,KAAKilH,gBAAgBrP,GACrCkQ,EAAY94G,MAAM3E,UAAUg/D,UAAU9+D,KAAKs9G,GAAe,SAAUE,GACtE,OAAOA,EAAIloG,aAAa,cAAgB8nG,KAG1C,OAAIC,GAA6B,IAAdE,EACVD,EAAcA,EAAcz8G,OAAS,GAIzCw8G,GAAeE,IAAcD,EAAcz8G,OAAS,EAKrD08G,EAAY,EACPD,EAAc,GAGnBD,EACKC,EAAcC,EAAY,GAG5BD,EAAcC,EAAY,GAZxBD,EAAc,IAczBhP,SAAU,SAAkBjB,EAAQ+P,GAClC,IAAIK,EAAgB78G,UAAUC,OAAS,QAAsBka,IAAjBna,UAAU,IAAmBA,UAAU,GAC/E88G,EAAajmH,KAAK0lH,kBAAkB9P,EAAQ+P,GAAS,GAEzD,GAAIM,EACF,OAAOD,EAAgBC,EAAaA,EAAWprG,SAGnDi8F,SAAU,SAAkBlB,EAAQ+P,GAClC,IAAIK,EAAgB78G,UAAUC,OAAS,QAAsBka,IAAjBna,UAAU,IAAmBA,UAAU,GAC/E88G,EAAajmH,KAAK0lH,kBAAkB9P,EAAQ+P,GAAS,GAEzD,GAAIM,EACF,OAAOD,EAAgBC,EAAaA,EAAWprG,SAGnDqrG,kBAAmB,SAA2BC,GAC5C,IAAIC,EAASj9G,UAAUC,OAAS,QAAsBka,IAAjBna,UAAU,IAAmBA,UAAU,GACxEk9G,EAAqBrmH,KAAKg7G,MAAMrjC,MAAMzpE,QAAQi4G,GAElD,GAAIC,GAAUC,GAAsB,EAC9BrmH,KAAK25G,WACP35G,KAAK86G,SAAS,2CAFlB,CAMO,GAAKsL,GAAUC,IAAuBrmH,KAAKg7G,MAAMrjC,MAAMvuE,OAAS,EAQvE,OAAOpJ,KAAKg7G,MAAMrjC,MAAMyuC,EAASC,EAAqB,EAAIA,EAAqB,GAPzErmH,KAAK25G,WACP35G,KAAK86G,SAAS,0CAQpBwL,yBAA0B,SAAkCH,GAC1D,IAAIC,EAASj9G,UAAUC,OAAS,QAAsBka,IAAjBna,UAAU,IAAmBA,UAAU,GACxEo9G,EAAevmH,KAAKkmH,kBAAkBC,EAAeC,GAEzD,GAAKG,EAAL,CAIA,IAAIC,EAAYxmH,KAAKilH,gBAAgBsB,GAErC,OAAIC,GAAaA,EAAU,GAClBA,EAAU,QADnB,IAIFC,0BAA2B,SAAmCN,GAC5D,IAAIC,EAASj9G,UAAUC,OAAS,QAAsBka,IAAjBna,UAAU,IAAmBA,UAAU,GACxEo9G,EAAevmH,KAAKkmH,kBAAkBC,EAAeC,GAEzD,GAAKG,EAAL,CAIA,IAAIG,EAAc1mH,KAAKglH,gBAAgBuB,GAEvC,OAAIG,GAAeA,EAAY,GACtBA,EAAY,QADrB,IAIF1P,aAAc,SAAsBmP,GAClC,IAAIF,EAAajmH,KAAKymH,0BAA0BN,GAAe,IAASnmH,KAAKsmH,yBAAyBH,GAAe,GAEjHF,GACFA,EAAWprG,SAGfo8F,cAAe,SAAuBkP,GACpC,IAAIF,EAAajmH,KAAKymH,0BAA0BN,GAAe,IAAUnmH,KAAKsmH,yBAAyBH,GAAe,GAElHF,GACFA,EAAWprG,SAMfw5F,YAAa,WACX,IAAIsS,EAAU3mH,KAETA,KAAK4zG,cAIVzsG,OAAOgyC,aAAan5C,KAAKw6G,gBACzBx6G,KAAKw6G,eAAiBrzG,OAAOizB,YAAW,WAGtC,GAFAjzB,OAAOgyC,aAAawtE,EAAQnM,gBAExBmM,EAAQjD,OAASiD,EAAQjD,MAAM7+G,MAAO,CACxC,IAAI+hH,EAAcD,EAAQE,qBAAqBF,EAAQjD,MAAM7+G,MAAMgsD,gBAAkB,GAErF81D,EAAQG,0BAA0BF,MAEnC,MAELtS,eAAgB,SAAwBppG,GACtC,GAAIA,EAAI67G,aAA+B,MAAhB77G,EAAIspB,QAIzB,OAFAtpB,EAAI6hC,iBACJ7hC,EAAI4hC,mBACG,EAIL5hC,EAAIspB,SAAW,IAAMtpB,EAAIspB,SAAW,IAAMtpB,EAAIspB,SAAW,IAAMtpB,EAAIspB,SAAW,KAChFtpB,EAAI6hC,iBACJ/sC,KAAKgnH,cAAc97G,EAAIrH,MACd,CAAC,GAAI,GAAI,IAAI83F,SAASzwF,EAAIspB,UACnCtpB,EAAI6hC,iBACJ/sC,KAAKgnH,cAAc97G,EAAIrH,KAAK,IACnBqH,EAAIspB,SAAW,IAAMtpB,EAAIspB,SAAW,IAC7CtpB,EAAI6hC,iBACJ/sC,KAAKinH,kBACLjnH,KAAKknH,aAAah8G,IACO,IAAhBA,EAAIspB,SAAiC,KAAhBtpB,EAAIspB,SAClCtpB,EAAI6hC,iBACJ/sC,KAAKinH,kBACLjnH,KAAKg1G,aACoB,IAAhB9pG,EAAIspB,SACbx0B,KAAKinH,kBACLjnH,KAAKmnH,WAAWj8G,IACS,MAAhBA,EAAIspB,SAAmC,KAAhBtpB,EAAIspB,SACpCtpB,EAAI6hC,iBACJ/sC,KAAKinH,kBACLjnH,KAAKonH,cACoB,KAAhBl8G,EAAIspB,SAAoBtpB,EAAI2jF,SAAW3jF,EAAIy1C,SACpDz1C,EAAI6hC,kBAGR0nE,kBAAmB,SAA2BvpG,GAI5C,OAHAA,EAAI6hC,iBACJ7hC,EAAI4hC,kBACJ9sC,KAAK26G,cAAgB36G,KAAKqnH,wBACnB,GAET3S,gBAAiB,SAAyBxpG,GACxC,IAAIo8G,EAAUtnH,KAEdkL,EAAI6hC,iBACJ7hC,EAAI4hC,kBACJ,IAAIy6E,EAAUr8G,EAAIE,KACdo8G,GAAuB,EAwB3B,OAtBIxnH,KAAKkuB,IAAI8tF,gBACXwL,EAAuBxnH,KAAKynH,gBAAgBF,IAG1CC,GACFxnH,KAAK0nH,2BAA2B,MAAOF,GAGzCxnH,KAAK0jH,MAAM7+G,MAAMa,MAAQ1F,KAAKkuB,IAAI8tF,cAAgBh8G,KAAK+zG,kBAAoB/zG,KAAKo7G,YAChFp7G,KAAK++G,WAAU,WACb,GAAIuI,EAAQ3M,cAAe,CACzB,IAAIgN,EAASp8G,KAAKuC,MAAMvC,KAAKC,UAAU87G,EAAQ3M,gBAE3C6M,IACFG,EAAOx4F,IAAMw4F,EAAOp5F,MAAQg5F,EAAQn+G,QAGtCk+G,EAAQR,0BAA0Ba,GAElCL,EAAQ3M,cAAgB,UAGrB,GAEThG,aAAc,SAAsBzpG,GAClCA,EAAI6hC,iBACJ,IAAI66E,GAAe18G,EAAI6sE,eAAiB5wE,OAAO4wE,eAAeN,QAAQ,QAElEz3E,KAAK25G,WACP35G,KAAK86G,SAAS,kBAAmB54F,OAAO0lG,EAAa,qBAGlDA,GAAgBA,EAAYx+G,SAK7BpJ,KAAKkuB,IAAI8tF,gBACX4L,EAAc5nH,KAAK6nH,qBAAqBD,IAGtC5nH,KAAKqzG,aACPrzG,KAAKo/G,iBAAiBwI,IAEtB5nH,KAAK06G,WAAakN,EAAYj4F,QAAQ,EAAG,GACzC3vB,KAAK8nH,aACL9nH,KAAK+nH,wBAGTb,aAAc,SAAsBh8G,GAClC,IAAIsI,EAAY,CACdw0G,GAAI,IACJC,GAAI,IACJC,GAAI,IACJ5mE,GAAI,KACJp2C,EAAIspB,SAEN,GAAkB,MAAdhhB,GAAmC,MAAdA,EACvB,GAAIxT,KAAKqzG,aACPrzG,KAAKmoH,4BACA,CACL,IAAIC,EAAepoH,KAAKqnH,uBAExB,IAAKe,EAEH,YADApoH,KAAKmoH,wBAIP,IAAInG,EAAYoG,EAAatgH,KAC7B9H,KAAKqoH,yBAAyBrG,EAAWhiH,KAAKgiH,GAAYxuG,GAC1D,IAAI80G,EAActoH,KAAKqnH,uBACvBrnH,KAAK8mH,0BAA0BwB,OAEV,MAAd90G,EACTxT,KAAKuoH,gBAAe,GACG,MAAd/0G,GACTxT,KAAKuoH,gBAAe,IAGxBpB,WAAY,SAAoBj8G,GAC9B,IAAKlL,KAAKqzG,cAAgBrzG,KAAKs9G,gBAAkBt9G,KAAKs9G,eAAel0G,OAAQ,CAC3E,IAAIg/G,EAAepoH,KAAKqnH,uBAExB,IAAKe,EACH,OAGF,IAAII,EAAaxoH,KAAKs9G,eAAe,GACjCmL,EAAYzoH,KAAKs9G,eAAet9G,KAAKs9G,eAAel0G,OAAS,IAE7D8B,EAAIi8D,UAAYihD,EAAa7+G,QAAUi/G,EAAWj/G,QAAU2B,EAAIi8D,UAAYihD,EAAa7+G,QAAUk/G,EAAUl/G,SAC/G2B,EAAI6hC,iBACJ/sC,KAAKuoH,eAAer9G,EAAIi8D,gBAErB,GAAInnE,KAAK05G,cAAgB15G,KAAK01G,iBAAkB,CACrD,GAAIxqG,EAAIi8D,SACN,OAKF,GAFAj8D,EAAI6hC,iBAEA/sC,KAAKqzG,aAAc,CACrB,IAAIsR,EAAc3kH,KAAKg7G,MAAMrjC,MAAM,GAC/BotC,EAAc/kH,KAAKilH,gBAAgBN,GAAa,GAEhDI,GACFA,EAAYlqG,WAKpBmsG,cAAe,SAAuB0B,GACpC,IAAIC,EAAQx/G,UAAUC,OAAS,QAAsBka,IAAjBna,UAAU,IAAmBA,UAAU,GACvEi/G,EAAepoH,KAAKqnH,wBAEnBe,GAAsC,QAAtBA,EAAatgH,MAAkB6gH,GAA+B,QAAtBP,EAAatgH,OAAmB6gH,IAI7F3oH,KAAK06G,WAAa,GAAGx4F,OAAOliB,KAAK06G,WAAW/qF,QAAQ,IAAIzN,OAAOwmG,GAC/D1oH,KAAK8nH,aACL9nH,KAAK+nH,uBAEPd,gBAAiB,WACf9/G,OAAOgyC,aAAan5C,KAAKy6G,cACzBz6G,KAAK06G,WAAa,IAEpBqN,mBAAoB,WAClB,IAAIa,EAAU5oH,KAEdmH,OAAOgyC,aAAan5C,KAAKy6G,cACzBz6G,KAAKy6G,aAAetzG,OAAOizB,YAAW,WACpCwuF,EAAQ3B,oBACPjnH,KAAK+1G,KAAK2C,qBAEfoP,WAAY,SAAoBpiH,GAC9BA,EAAQA,GAAS1F,KAAK06G,WACtB,IAAI0N,EAAepoH,KAAKqnH,uBAExB,GAAKe,GAAiB1iH,GAAUA,EAAM0D,OAAtC,CAIA,IAEIy/G,EAFAC,EAAYV,EAAatgH,KACzBihH,EAAaX,EAAa7+G,MAG9B,GAAkB,QAAdu/G,EACE9oH,KAAKyiH,cAAc/8G,GAAOi2F,SAAS,KACrCktB,EAAa,KACJ7oH,KAAKyiH,cAAc/8G,GAAOi2F,SAAS,OAC5CktB,EAAa,MAGXA,IACFA,EAA4B,MAAfE,EAAqBF,EAAW5lD,cAAgB4lD,QAG/D,GAAI7oH,KAAK49G,aAAamL,EAAYrjH,GAChCmjH,EAAanjH,MACR,CACL,IAAIsjH,EAAiBhpH,KAAK87G,YAAYiN,EAAYrjH,EAAMiqB,QAAQ,IAE5D3vB,KAAK49G,aAAamL,EAAYC,KAChCH,EAAaG,GAKnB,GAAIH,EAAY,CACd7oH,KAAK0nH,2BAA2BoB,EAAWD,GAC3C,IAAIP,EAActoH,KAAKqnH,uBACvBrnH,KAAK8mH,0BAA0BwB,GAG7BtoH,KAAK25G,YACHkP,EACF7oH,KAAK86G,SAAS,2BAA4B54F,OAAO2mG,EAAY,yBAA2B3mG,OAAOxc,EAAO,eAAiBwc,OAAO4mG,EAAW,WAEzI9oH,KAAK86G,SAAS,UAAW54F,OAAOxc,EAAO,yBAA2Bwc,OAAO4mG,EAAW,cAK1F7U,SAAU,WACR,GAAKj0G,KAAK4zG,aAAgB5zG,KAAK0jH,OAAU1jH,KAAK0jH,MAAM7+G,MAApD,CAIA,IAAIokH,EAAgBjpH,KAAK0jH,MAAM7+G,MAAMa,OAAS,GAE1CujH,GAAiBA,EAAc7/G,QACjCpJ,KAAKo/G,iBAAiB6J,KAG1BpC,qBAAsB,SAA8B/5F,GAClD,GAAK9sB,KAAKs9G,gBAAmBt9G,KAAKs9G,eAAel0G,OAAjD,CAOA,IAHA,IAAI8/G,EACAC,GAAgB,EAEXz/G,EAAI,EAAGA,EAAI1J,KAAKs9G,eAAel0G,OAAQM,IAAK,CACnD,IAAIi3G,EAAQp1G,KAAKuC,MAAMvC,KAAKC,UAAUxL,KAAKs9G,eAAe5zG,KAE1D,GAAIi3G,EAAMpyF,QAAUzB,EAClB,OAAO6zF,EAGT,IAAIlxF,EAAQ9oB,KAAKyiH,IAAIzI,EAAMpyF,MAAQzB,GAEnC,GAAIq8F,EAAe,EACjBD,EAAUvI,EACVwI,EAAe15F,MACV,CACL,GAAI05F,GAAgB15F,EAClB,OAAOy5F,EAGTC,EAAe15F,EACfy5F,EAAUvI,GAId,OAAOuI,IAETf,sBAAuB,WACrB,GAAKnoH,KAAKs9G,gBAAmBt9G,KAAKs9G,eAAel0G,OAAjD,CAIA,IAAIigH,EAAgBrpH,KAAKs9G,eAAe,GAAGx1G,KAErB,SAAlBuhH,EACFrpH,KAAKspH,qBAELtpH,KAAKqoH,yBAAyBgB,EAAerpH,KAAKqpH,IAGpDrpH,KAAK4jH,oBAEP0F,mBAAoB,SAA4B1qC,GAC9C,IAAI2qC,EAAUvpH,KAEVwT,EAAYrK,UAAUC,OAAS,QAAsBka,IAAjBna,UAAU,GAAmBA,UAAU,GAAK,IAEpF,GAAKnJ,KAAK47G,gBAAmB57G,KAAK47G,eAAexyG,OAQjD,GAAKw1E,EAAL,CAKA,IAQI4qC,EARAC,EAAezpH,KAAK47G,eAAev0C,WAAU,SAAUjnB,GACzD,GAAKmpE,EAAQjO,cAEN,CACL,IAAIoO,EAAW,GAAGxnG,OAAO08D,GAAc18D,OAA8C,OAAvCqnG,EAAQ9G,cAAc8G,EAAQ7S,KAAgB,IAAM,KAClG,OAAOt2D,IAASspE,EAHhB,OAAOtpE,IAASw+B,KASlB4qC,GADoB,IAAlBC,EACU,EACW,MAAdj2G,EACoB,IAAjBi2G,EAAqBzpH,KAAK47G,eAAexyG,OAAS,EAAIqgH,EAAe,GAEpEA,EAAe,GAAKzpH,KAAK47G,eAAexyG,OAGvD,IAAI0tG,EAAW92G,KAAK47G,eAAe4N,GACnCxpH,KAAK2pH,cAAc7S,QAvBjB92G,KAAK2pH,cAAc3pH,KAAK47G,eAAe,SARnC57G,KAAK25G,WACP35G,KAAK86G,SAAS,kFAAoF54F,OAAO3W,KAAKC,UAAUxL,KAAKo4G,cAgCnIiQ,yBAA0B,SAAkCzS,EAAQh3B,GAClE,IAAIprE,EAAYrK,UAAUC,OAAS,QAAsBka,IAAjBna,UAAU,GAAmBA,UAAU,GAAK,IAEpF,GAAe,SAAXysG,EACF51G,KAAKspH,mBAAmB1qC,EAAcprE,OACjC,CACL,IAAIsjG,EAAyB,MAAdtjG,EAAoBxT,KAAK62G,SAASjB,EAAQ51G,KAAK41G,IAAS,GAAQ51G,KAAK82G,SAASlB,EAAQ51G,KAAK41G,IAAS,GAE/GkB,GACF92G,KAAKmS,OAAOyjG,EAAQkB,EAASj5F,aAAa,eAIhD6pG,2BAA4B,SAAoCzE,EAAStkC,GACvE,GAAKskC,GAAYjjH,KAAKk7G,eAAe+H,GAArC,CAKA,IAAIzD,EAAiBx/G,KAAKw/G,eAAex/G,KAAKk7G,eAAe+H,GAAUtkC,GACvE3+E,KAAKijH,GAAWzD,IAElBmK,cAAe,SAAuB7S,GACpC,GAAI92G,KAAKy7G,WAAW3E,GAAW,CAC7B,IAAI8S,EAAQ5pH,KAAK8iH,cAAchM,GAC3BqL,EAAwB,MAAbyH,EAAM,GAAa,KAAO,KACzC5pH,KAAK0nH,2BAA2B,MAAwB,MAAjB1nH,KAAKo6G,QAAkB+H,EAAS53F,cAAgB43F,GACvFniH,KAAK0nH,2BAA2B,OAAQkC,EAAM,SAE9C5pH,KAAK0nH,2BAA2B,OAAQ5Q,IAG5CgQ,0BAA2B,SAAmC+C,GAC5D,IAAIC,EAAU9pH,KAEV+pH,EAAaF,EAAKt7F,MAClBA,OAAuB,IAAfw7F,EAAwB,EAAIA,EACpCC,EAAWH,EAAK16F,IAChBA,OAAmB,IAAb66F,EAAsB,EAAIA,EACpChqH,KAAK++G,WAAU,WACb+K,EAAQG,uBAAuB17F,EAAOY,MAExChoB,OAAOgyC,aAAan5C,KAAKw6G,gBACzBx6G,KAAKw6G,eAAiBrzG,OAAOizB,YAAW,WACtCjzB,OAAOgyC,aAAa2wE,EAAQtP,iBAExBsP,EAAQpG,MAAM7+G,OAAUilH,EAAQpG,MAAM7+G,MAAMgsD,iBAAmBtiC,GAASu7F,EAAQpG,MAAM7+G,MAAM8+G,eAAiBx0F,GAC/G26F,EAAQG,uBAAuB17F,EAAOY,KAEvC,KAEL86F,uBAAwB,SAAgC17F,EAAOY,GACzDnvB,KAAK0jH,OAAS1jH,KAAK0jH,MAAM7+G,OAC3B7E,KAAK0jH,MAAM7+G,MAAMqlH,kBAAkB37F,EAAOY,IAG9Ck4F,qBAAsB,WACpB,OAAOrnH,KAAK6mH,qBAAqB7mH,KAAK0jH,MAAM7+G,OAAS7E,KAAK0jH,MAAM7+G,MAAMgsD,gBAAkB,IAE1F+yD,gBAAiB,WACf,IAAIuG,EAAgBnqH,KAAK6mH,qBAAqB,GAC9C7mH,KAAK8mH,0BAA0BqD,IAEjC/C,WAAY,WACV,IAAKpnH,KAAKqzG,cAAgBrzG,KAAKs9G,gBAAkBt9G,KAAKs9G,eAAel0G,OAAQ,CAC3E,IAAIg/G,EAAepoH,KAAKqnH,uBAExB,IAAKe,EACH,OAGF,IAAIK,EAAYzoH,KAAKs9G,eAAet9G,KAAKs9G,eAAel0G,OAAS,GAE7Dg/G,EAAa7+G,QAAUk/G,EAAUl/G,OACnCvJ,KAAKuoH,gBAAe,KAI1BA,eAAgB,SAAwBnC,GACtC,IAAIgC,EAAepoH,KAAKqnH,uBAExB,GAAKe,EAAL,CAKA,IAAIgC,EAAoBpqH,KAAKs9G,eAAej2C,WAAU,SAAUg2C,GAC9D,OAAOA,EAAI9zG,QAAU6+G,EAAa7+G,SAGpC,IAAK68G,GAAUgE,GAAqBpqH,KAAKs9G,eAAel0G,OAAS,GAAKg9G,GAAgC,IAAtBgE,EAC1EpqH,KAAK25G,YACHyM,EACFpmH,KAAK86G,SAAS,uCAEd96G,KAAK86G,SAAS,6CALpB,CAYA,IAAIuP,EAAgBjE,EAASpmH,KAAKs9G,eAAe8M,EAAoB,GAAKpqH,KAAKs9G,eAAe8M,EAAoB,GAClHpqH,KAAK8mH,0BAA0BuD,SArB7BrqH,KAAKmoH,yBAuBTV,gBAAiB,SAAyB6C,GACxC,SAAKA,IAAcA,EAAUlhH,UAIzBpJ,KAAKo5G,QAAUp5G,KAAKo5G,SAAWkR,EACT,MAAjBtqH,KAAKo6G,QAAkB,KAAO,QAGnCp6G,KAAKq5G,QAAUr5G,KAAKq5G,SAAWiR,KACT,MAAjBtqH,KAAKo6G,QAAkB,KAAO,QAKzCyN,qBAAsB,SAA8B0C,GAClD,OAAIvqH,KAAKo5G,QAAUp5G,KAAKo5G,OAAOhwG,QAAUmhH,EAAY5uB,SAAS37F,KAAKo5G,QAC1DmR,EAAYriH,QAAQ,IAAI+0C,OAAOj9C,KAAKo5G,OAAQ,KAAuB,MAAjBp5G,KAAKo6G,QAAkB,KAAO,MAC9Ep6G,KAAKq5G,QAAUr5G,KAAKq5G,OAAOjwG,QAAUmhH,EAAY5uB,SAAS37F,KAAKq5G,QACjEkR,EAAYriH,QAAQ,IAAI+0C,OAAOj9C,KAAKq5G,OAAQ,KAAuB,MAAjBr5G,KAAKo6G,QAAkB,KAAO,MAGlFmQ,GAETtG,mBAAoB,WAClB,GAAKjkH,KAAK+uC,IAAV,CAIA,IAAI7e,EAEAlwB,KAAKy5G,aAAez5G,KAAKy5G,YAAYrwG,SACvC8mB,EAAYnmB,SAASygH,eAAexqH,KAAKy5G,cAEpCvpF,GAAalwB,KAAK25G,WACrB35G,KAAK86G,SAAS,sBAAuB54F,OAAOliB,KAAKy5G,YAAa,6CAIlE,IACIgR,EADAryG,EAAKpY,KAAK+uC,IAGd,GAAI7e,GAAaA,EAAU4f,aAEzB26E,EAAYv6F,EAAUg1F,UAAYh1F,EAAU4f,cAAgB13B,EAAG8sG,UAAY9sG,EAAG03B,kBACzE,CAEL,IAAI46E,EAAY/jH,KAAKssB,IAAIlpB,SAAS2J,KAAKi3G,aAAc5gH,SAAS++E,gBAAgB6hC,aAAc5gH,SAAS2J,KAAKo8B,aAAc/lC,SAAS++E,gBAAgBh5C,aAAc/lC,SAAS2J,KAAKi8B,aAAc5lC,SAAS++E,gBAAgBn5C,cACpN86E,EAAYC,GAAatyG,EAAG8sG,UAAY9sG,EAAG03B,cAG7C9vC,KAAK46G,eAAiB56G,KAAK+1G,KAAK4C,iBAAmB8R,IAKrDhP,WAAY,SAAoB/1G,GAC9B,MAAO,qBAAqB2E,KAAK3E,IAEnCo9G,cAAe,SAAuBp9G,GACpC,OAAOA,EAAMZ,MAAM,yBAErBorD,SAAU,SAAkBxqD,GAC1B,OAAQ4jD,MAAMtpB,WAAWt6B,KAAWklH,SAASllH,IAE/Cq9G,YAAa,SAAqBj7G,GAChC,OAAO6vG,EAAOK,YAAYrc,SAAS7zF,IAErC26G,cAAe,SAAuBN,GACpC,OAAQA,GAAY,IAAI53F,eAE1Bs2F,cAAe,SAAuBt3G,GACpC,OAAQA,GACN,IAAK,KACH,MAAO,0BAET,IAAK,IACH,MAAO,gCAET,IAAK,KACH,MAAO,uBAET,IAAK,IACH,MAAO,yBAET,IAAK,KACH,MAAO,8BAET,IAAK,IACH,MAAO,gCAET,IAAK,KACH,MAAO,oBAET,IAAK,KACH,MAAO,oBAET,IAAK,IACH,MAAO,6BAET,IAAK,IACH,MAAO,6BAET,IAAK,IACH,MAAO,eAET,IAAK,IACH,MAAO,eAET,QACE,MAAO,KAGbo0G,aAAc,SAAsBwD,EAAa0J,GAC/C,OAAQA,IAAcA,EAAUzhH,QAAUyhH,GAAaA,IAAc1J,GAEvEvD,aAAc,SAAsBuD,EAAa0J,GAC/C,IAAK1J,GAAenhH,KAAK29G,aAAawD,EAAa0J,GACjD,OAAO,EAGT,IAAIC,EAAgB9qH,KAAK6gH,cAAcM,GAEvC,SAAK2J,IAAkBA,EAAc1hH,SAI9B,IAAI6zC,OAAO,IAAI/6B,OAAO4oG,EAAe,MAAMzgH,KAAKwgH,IAEzDrL,eAAgB,SAAwB2B,EAAaxiC,GACnD,OAAI3+E,KAAK49G,aAAauD,EAAaxiC,GAC1BA,EAGF,IAETu+B,aAAc,SAAsB3zG,GAClC,OAAOvJ,KAAKg7G,MAAMrjC,MAAM33E,KAAKg7G,MAAMpzG,OAAOsG,QAAQ3E,KAAW,IAE/D2xG,eAAgB,SAAwBpzG,GACtC,OAAO9H,KAAK,GAAGkiB,OAAOpa,EAAM,UAAY,IAE1Co3G,iBAAkB,SAA0Bp3G,GAC1C,MAAO,CAAC,SAAU,UAAU6zF,SAAS7zF,IAEvCgzG,SAAU,SAAkBiQ,GAC1B,IAAIC,EAAUhrH,KAEd,GAAK+qH,GAAYA,EAAQ3hH,OAAzB,CAIA,IAAI6hH,EAAa,GAUjB,GARIjrH,KAAK2I,KACPsiH,GAAc,IAAI/oG,OAAOliB,KAAK2I,KAG5B3I,KAAKsE,OACP2mH,GAAc,SAAS/oG,OAAOliB,KAAKsE,KAAM,MAGvCtE,KAAKozG,WAAY,CACnB,IAAI8X,EAAe,GAEY,kBAApBlrH,KAAKozG,WACd8X,EAAelrH,KAAKozG,WAAW/yG,MAAM,OAC5B2M,MAAM2kB,QAAQ3xB,KAAKozG,YAC5B8X,EAAe,GAAGhpG,OAAO,GAAIliB,KAAKozG,YACI,WAA7B8D,EAAQl3G,KAAKozG,aACtBhrG,OAAOyd,KAAK7lB,KAAKozG,YAAYnhF,SAAQ,SAAUk5F,GACzCH,EAAQ5X,WAAW+X,IACrBD,EAAap+G,KAAKq+G,MAKxB,IACIC,EADAC,EAAa9T,EAA2B2T,GAG5C,IACE,IAAKG,EAAW1pH,MAAOypH,EAASC,EAAW5nH,KAAKu3B,MAAO,CACrD,IAAIo4E,EAAagY,EAAO1lH,MAEpB0tG,GAAcA,EAAWn+F,OAAO7L,SAClC6hH,GAAc,IAAI/oG,OAAOkxF,EAAWn+F,UAGxC,MAAOo3C,GACPg/D,EAAWl3G,EAAEk4C,GACb,QACAg/D,EAAWjpG,KAIf,IAAIkpG,EAAe,UAAUppG,OAAO6oG,GAAS7oG,OAAO+oG,EAAa,QAAQ/oG,OAAO+oG,EAAY,KAAO,IAE/F9jH,OAAOwrD,QAAQ44D,OAAyC,oBAAzBpkH,OAAOwrD,QAAQ44D,MAChDpkH,OAAOwrD,QAAQ44D,MAAMD,GAErBnkH,OAAOwrD,QAAQyW,IAAIkiD,MAIzBE,QAAS,WACPrkH,OAAOgyC,aAAan5C,KAAKg6G,eACzB7yG,OAAOgyC,aAAan5C,KAAKw6G,gBACzBrzG,OAAOgyC,aAAan5C,KAAKy6G,cACzBz6G,KAAKg+G,gBAEPyN,cAAe,WACbtkH,OAAOgyC,aAAan5C,KAAKg6G,eACzB7yG,OAAOgyC,aAAan5C,KAAKw6G,gBACzBrzG,OAAOgyC,aAAan5C,KAAKy6G,gBAIKiR,EAA6C,EAE1B3jD,EAAoB,QASzE,SAAS4jD,EACPC,EACA51F,EACAQ,EACAq1F,EACAC,EACAC,EACAC,EACAC,GAGA,IAqBIC,EArBAzxB,EAAmC,oBAAlBmxB,EACjBA,EAAcnxB,QACdmxB,EAsDJ,GAnDI51F,IACFykE,EAAQzkE,OAASA,EACjBykE,EAAQjkE,gBAAkBA,EAC1BikE,EAAQ0xB,WAAY,GAIlBN,IACFpxB,EAAQ2xB,YAAa,GAInBL,IACFtxB,EAAQ4xB,SAAW,UAAYN,GAI7BC,GACFE,EAAO,SAAU/xG,GAEfA,EACEA,GACCna,KAAKssH,QAAUtsH,KAAKssH,OAAOC,YAC3BvsH,KAAKoK,QAAUpK,KAAKoK,OAAOkiH,QAAUtsH,KAAKoK,OAAOkiH,OAAOC,WAEtDpyG,GAA0C,qBAAxBqyG,sBACrBryG,EAAUqyG,qBAGRV,GACFA,EAAavjH,KAAKvI,KAAMma,GAGtBA,GAAWA,EAAQsyG,uBACrBtyG,EAAQsyG,sBAAsBr/G,IAAI4+G,IAKtCvxB,EAAQiyB,aAAeR,GACdJ,IACTI,EAAOD,EACH,WACAH,EAAavjH,KACXvI,MACCy6F,EAAQ2xB,WAAapsH,KAAKoK,OAASpK,MAAM2sH,MAAMC,SAASC,aAG3Df,GAGFI,EACF,GAAIzxB,EAAQ2xB,WAAY,CAGtB3xB,EAAQqyB,cAAgBZ,EAExB,IAAIa,EAAiBtyB,EAAQzkE,OAC7BykE,EAAQzkE,OAAS,SAAmCj0B,EAAGoY,GAErD,OADA+xG,EAAK3jH,KAAK4R,GACH4yG,EAAehrH,EAAGoY,QAEtB,CAEL,IAAI6yG,EAAWvyB,EAAQwyB,aACvBxyB,EAAQwyB,aAAeD,EACnB,GAAG9qG,OAAO8qG,EAAUd,GACpB,CAACA,GAIT,MAAO,CACLjkD,QAAS2jD,EACTnxB,QAASA,GAab,IAAIhkE,EAAYk1F,EACdD,EACA11F,EACAQ,GACA,EACA,KACA,KACA,MAI+B02F,EAAkBz2F,EAAiB,QAGnC02F,EAAQ,EAII1e,EAAoB,WAAa,GAMxE,KACA,SAAUzmC,EAAQC,EAASF,GAEjC,aAEA,IAAI11D,EAAI01D,EAAoB,QACxB60B,EAAW70B,EAAoB,QAC/Bp2C,EAAUo2C,EAAoB,QAC9Bk3B,EAAkBl3B,EAAoB,QACtCivB,EAAWjvB,EAAoB,QAC/B4tB,EAAkB5tB,EAAoB,QACtC63B,EAAiB73B,EAAoB,QACrCwtB,EAAkBxtB,EAAoB,QACtCw3B,EAA+Bx3B,EAAoB,QACnDsxB,EAA0BtxB,EAAoB,QAE9Cy3B,EAAsBD,EAA6B,SACnDhG,EAAiBF,EAAwB,QAAS,CAAEmR,WAAW,EAAMviF,EAAG,EAAGvI,EAAG,IAE9Es6E,EAAUzE,EAAgB,WAC1B7wE,EAAc,GAAGjY,MACjBwmB,EAAMtsB,KAAKssB,IAKf5gB,EAAE,CAAE2E,OAAQ,QAAS0kF,OAAO,EAAMP,QAASqE,IAAwBjG,GAAkB,CACnF9sF,MAAO,SAAe8hB,EAAOY,GAC3B,IAKIktE,EAAat4F,EAAQN,EALrB8yF,EAAIZ,EAAgB31F,MACpBoJ,EAAS4tF,EAAST,EAAEntF,QACpBykB,EAAIoxE,EAAgB1wE,EAAOnlB,GAC3BgkH,EAAMnuB,OAAwB37E,IAAR6L,EAAoB/lB,EAAS+lB,EAAK/lB,GAG5D,GAAIuoB,EAAQ4kE,KACV8F,EAAc9F,EAAEjyE,YAEU,mBAAf+3E,GAA8BA,IAAgBrvF,QAAS2kB,EAAQ0qE,EAAYh0F,WAE3Eu0F,EAASP,KAClBA,EAAcA,EAAYrC,GACN,OAAhBqC,IAAsBA,OAAc/4E,IAHxC+4E,OAAc/4E,EAKZ+4E,IAAgBrvF,YAAyBsW,IAAhB+4E,GAC3B,OAAO33E,EAAYnc,KAAKguF,EAAG1oE,EAAGu/F,GAIlC,IADArpH,EAAS,SAAqBuf,IAAhB+4E,EAA4BrvF,MAAQqvF,GAAappE,EAAIm6F,EAAMv/F,EAAG,IACvEpqB,EAAI,EAAGoqB,EAAIu/F,EAAKv/F,IAAKpqB,IAASoqB,KAAK0oE,GAAGqJ,EAAe77F,EAAQN,EAAG8yF,EAAE1oE,IAEvE,OADA9pB,EAAOqF,OAAS3F,EACTM,MAOL,KACA,SAAUikE,EAAQC,EAASF,GAGjC,IAAI26B,EAAgB36B,EAAoB,QACpC8uB,EAAyB9uB,EAAoB,QAEjDC,EAAOC,QAAU,SAAUkhB,GACzB,OAAOuZ,EAAc7L,EAAuB1N,MAMxC,KACA,SAAUnhB,EAAQC,EAASF,KAM3B,KACA,SAAUC,EAAQC,GAIxBD,EAAOC,QAAU,CACfolD,YAAa,EACbC,oBAAqB,EACrBC,aAAc,EACdC,eAAgB,EAChBC,YAAa,EACbC,cAAe,EACfC,aAAc,EACdC,qBAAsB,EACtBC,SAAU,EACVC,kBAAmB,EACnBC,eAAgB,EAChBC,gBAAiB,EACjBC,kBAAmB,EACnBC,UAAW,EACXC,cAAe,EACfC,aAAc,EACdC,SAAU,EACVC,iBAAkB,EAClBx3G,OAAQ,EACRy3G,YAAa,EACbC,cAAe,EACfC,cAAe,EACfC,eAAgB,EAChBC,aAAc,EACdC,cAAe,EACfC,iBAAkB,EAClBC,iBAAkB,EAClBC,eAAgB,EAChBC,iBAAkB,EAClBC,cAAe,EACfC,UAAW,IAMP,KACA,SAAUlnD,EAAQC,EAASF,GAEjC,IAAI+iC,EAAgB/iC,EAAoB,QAExCC,EAAOC,QAAU6iC,IAEX7V,OAAOmG,MAEkB,iBAAnBnG,OAAO+K,a,+CCtrOnB,YACkB,SAAUz6F,GACxB,aAEA,IAAIC,EAAO,SAAUC,GACnB,IAAIC,EAAQD,EACRE,EAAM,WACR,OAAOD,GAELE,EAAM,SAAUC,GAClBH,EAAQG,GAENC,EAAQ,WACV,OAAON,EAAKG,MAEd,MAAO,CACLA,IAAKA,EACLC,IAAKA,EACLE,MAAOA,IAIPhG,EAASiG,QAAQC,KAAKC,MAAMC,QAAQ,yBAEpCP,EAAM,SAAUwpH,GAClB,MAAO,CACLC,aAAc,WACZ,OAAiC,OAA1BD,EAAgBxpH,SAIzBspB,EAAM,CAAEtpB,IAAKA,GAEbQ,EAAWJ,QAAQC,KAAKC,MAAMC,QAAQ,wBAEtCmpH,EAA6B,SAAUhpH,EAAQ4jC,GACjD5jC,EAAO8lC,KAAK,yBAA0B,CAAElC,MAAOA,KAE7C+/B,EAAS,CAAEqlD,2BAA4BA,GAEvCxoH,EAAMV,EAASU,IACfyoH,EAAgB,WAClB,IAAIvoH,EACAhF,EACAwuC,EAAMhrC,EAAW4B,OACjBsrB,EAAMltB,EAAWwE,SACjB2J,EAAO+e,EAAI/e,KASf,OARIA,EAAKm8B,cACP9oC,EAAI2M,EAAKm8B,YACT9tC,EAAI2R,EAAKo8B,cAEPS,EAAIg/E,YAAch/E,EAAIi0E,cACxBz9G,EAAIwpC,EAAIg/E,WACRxtH,EAAIwuC,EAAIi0E,aAEH,CACLz9G,EAAGA,EACHhF,EAAGA,IAGHytH,EAAe,WACjB,IAAIC,EAAK5oH,EAAIC,cACb,MAAO,CACLoV,EAAGuzG,EAAGvzG,EACN7Z,EAAGotH,EAAGptH,IAGNqtH,EAAe,SAAU5wE,GAC3Bv5C,EAAW4B,OAAOwoH,SAAS7wE,EAAI5iC,EAAG4iC,EAAIz8C,IAEpCutH,EAAmB,SAAUvpH,EAAQ8oH,GACvC,IAEIU,EACAC,EAAiBh4F,EAAQi4F,EAHzBr8G,EAAOnO,EAAWwE,SAAS2J,KAC3Bo1E,EAAkBvjF,EAAWwE,SAAS++E,gBAGtCknC,EAAiBb,EAAgBxpH,MACjCizB,EAAS,WACX/xB,EAAIi7D,SAAShqC,EAAQ,SAAUw3F,IAAgBvtH,GAAK+tH,EAAgBngF,aAAe7X,EAAO6X,gBAExFsgF,EAAe,WACjBppH,EAAIu0E,OAAO71E,EAAW4B,OAAQ,SAAUyxB,IAM1C,GAJAk3F,EAAkBzpH,EAAO6pH,eACzBL,EAAuBC,EAAgBjgH,MACvCioB,EAASzxB,EAAO05C,0BAA0BniC,WAC1CmyG,EAAcj4F,EAAOjoB,MAChBmgH,EAqBHD,EAAYt3F,MAAQu3F,EAAeG,YACnCJ,EAAYr3F,OAASs3F,EAAeI,aAChCJ,EAAeK,iBACjBR,EAAqBp3F,MAAQu3F,EAAeK,gBAE1CL,EAAeM,kBACjBT,EAAqBn3F,OAASs3F,EAAeM,iBAE/CzpH,EAAI0pH,YAAY78G,EAAM,kBACtB7M,EAAI0pH,YAAYznC,EAAiB,kBACjCjiF,EAAI0pH,YAAYT,EAAiB,kBACjCJ,EAAaM,EAAeQ,WAC5B3pH,EAAIu0E,OAAO71E,EAAW4B,OAAQ,SAAU6oH,EAAeS,eACvDpqH,EAAOmzC,IAAI,SAAUw2E,EAAeU,eACpCvB,EAAgBvpH,IAAI,MACpBokE,EAAOqlD,2BAA2BhpH,GAAQ,OApCvB,CACnB,IAAIsqH,EAAoB,CACtBH,UAAWhB,IACXa,eAAgBR,EAAqBp3F,MACrC63F,gBAAiBT,EAAqBn3F,OACtCy3F,YAAaJ,EAAYt3F,MACzB23F,aAAcL,EAAYr3F,OAC1B+3F,cAAe73F,EACf83F,cAAeT,GAEjBF,EAAYt3F,MAAQs3F,EAAYr3F,OAAS,OACzCm3F,EAAqBp3F,MAAQo3F,EAAqBn3F,OAAS,GAC3D7xB,EAAI+pH,SAASl9G,EAAM,kBACnB7M,EAAI+pH,SAAS9nC,EAAiB,kBAC9BjiF,EAAI+pH,SAASd,EAAiB,kBAC9BjpH,EAAI4c,KAAKle,EAAW4B,OAAQ,SAAUyxB,GACtCvyB,EAAOsO,GAAG,SAAUs7G,GACpBr3F,IACAu2F,EAAgBvpH,IAAI+qH,GACpB3mD,EAAOqlD,2BAA2BhpH,GAAQ,KAoB1Cg0C,EAAU,CAAEu1E,iBAAkBA,GAE9Bx7G,EAAW,SAAU/N,EAAQ8oH,GAC/B9oH,EAAOgO,WAAW,iBAAiB,WACjCgmC,EAAQu1E,iBAAiBvpH,EAAQ8oH,OAGjC16G,EAAW,CAAEL,SAAUA,GAEvBk7B,EAAa,SAAUjpC,GACzB,OAAO,SAAU8N,GACf,IAAIuF,EAAOvF,EAAEwF,QACbtT,EAAOsO,GAAG,0BAA0B,SAAUR,GAC5CuF,EAAK+tD,OAAOtzD,EAAE81B,YAIhBzzB,EAAa,SAAUnQ,GACzBA,EAAOsQ,YAAY,aAAc,CAC/BhL,KAAM,aACN0Z,SAAU,eACV65D,YAAY,EACZxoE,IAAK,gBACLwD,aAAco1B,EAAWjpC,GACzB8T,QAAS,SAEX9T,EAAOoQ,UAAU,aAAc,CAC7BgxD,QAAQ,EACRxtD,QAAS,aACTvD,IAAK,gBACLwD,aAAco1B,EAAWjpC,MAGzBwQ,EAAU,CAAEzC,SAAUoC,GAY1B,SAASM,KAVThX,EAAOsN,IAAI,cAAc,SAAU/G,GACjC,IAAI8oH,EAAkB3pH,EAAK,MAC3B,OAAIa,EAAOC,SAAS2P,SAGpBxB,EAASL,SAAS/N,EAAQ8oH,GAC1Bt4G,EAAQzC,SAAS/N,GACjBA,EAAOw6E,YAAY,eAAgB,GAAI,kBAJ9B5xD,EAAItpB,IAAIwpH,OAlKN,CA8KfhoH,SA/KF,I,sBCAA,YACiB,WACb,aAEA,IAAIrH,EAASiG,QAAQC,KAAKC,MAAMC,QAAQ,yBAEpCC,EAAWJ,QAAQC,KAAKC,MAAMC,QAAQ,wBAEtCkB,EAAWrB,QAAQC,KAAKC,MAAMC,QAAQ,yBAEtC+Q,EAAWlR,QAAQC,KAAKC,MAAMC,QAAQ,eAEtC+iB,EAAWljB,QAAQC,KAAKC,MAAMC,QAAQ,sBAEtC2qH,EAAqB,SAAUxqH,GACjC,OAAOA,EAAOW,SAAS,4BAErB8pH,EAAwB,SAAUzqH,GACpC,OAAOA,EAAOW,SAAS,wBAErB+pH,EAAuB,SAAU1qH,GACnC,OAAOA,EAAOW,SAAS,iCAErBgqH,EAAoB,SAAU3qH,GAChC,OAAOA,EAAOW,SAAS,8BAErBiqH,EAAe,SAAU5qH,GAC3B,OAAOA,EAAOW,SAAS,qBAErBkqH,EAAe,SAAU7qH,GAC3B,OAAOA,EAAOW,SAAS,qBAErBmqH,EAAgB,SAAU9qH,GAC5B,OAAOA,EAAOW,SAAS,0BAErBE,EAAW,CACb2pH,mBAAoBA,EACpBC,sBAAuBA,EACvBC,qBAAsBA,EACtBC,kBAAmBA,EACnBC,aAAcA,EACdC,aAAcA,EACdC,cAAeA,GAGbC,EAAoB,SAAU7hH,GAChC,IAAI8hH,EAAcp6G,EAASo6G,YAI3B,MAHmB,kBAAR9hH,IACTA,EAAMA,EAAIrH,QAAQ,IAAMmpH,EAAa,IAAInpH,QAAQ,IAAMmpH,EAAa,KAE/D9hH,GAEL+hH,EAAmB,SAAUjrH,EAAQ+P,GACvC,IAAI9P,EAAWD,EAAOC,SAAUirH,GAAyB,IAAlBjrH,EAASirH,OAAiBjrH,EAASirH,MAAQ,aAClF,GAAIA,EAAM,CACR,IAAIC,EAAUlrH,EAASmrH,SAAWprH,EAAO4wB,gBAAgBG,WAAW9wB,EAASmrH,UAAYrqH,EAASsqH,QAAU,UAAYH,EACxH,OAAOn7G,IAASo7G,EAAU,YAAcnrH,EAAO4P,OAAS,UAAY,IAAM,WAE5E,OAAO,GAEL07G,EAAgB,SAAU/8G,GAC5B,MAAsB,kBAAXA,EACF,SAAUlP,GACf,OAAkC,IAA3BA,EAAMwI,QAAQ0G,IAEdA,aAAkBqoC,OACpB,SAAUv3C,GACf,OAAOkP,EAAOvK,KAAK3E,IAGhBkP,GAELg9G,EAAe,SAAUvrH,EAAQosB,EAAKo/F,GACxC,IAAItkF,EAAY,GAAIukF,EAAiB,GACrC,SAAS38G,EAAOiY,EAAY2kG,GAC1B,IAA4BrmC,EAAxBt1E,EAAOgX,EAAWhX,KAEtB,GADAA,EAAOg7G,EAAkBh7G,GACpBA,GAASy7G,EAAWz7G,EAAM27G,KAAaT,EAAiBjrH,EAAQ+P,GAArE,CAGA6S,EAASpU,KAAKuY,EAAW4kG,SAAS,SAAU5kG,GAC1CjY,EAAOiY,GAAY,MAErB,IACEs+D,EAAQt+D,EAAW6kG,UAAY7kG,EAAWs+D,MAC1C,MAAOv3E,IAET8U,EAASpU,KAAK62E,GAAO,SAAUwmC,GACzBA,EAAQ9kG,WACVjY,EAAO+8G,EAAQ9kG,YAAY,GAClB8kG,EAAQC,cACjBlpG,EAASpU,KAAKq9G,EAAQC,aAAa9xH,MAAM,MAAM,SAAUmP,GACvD+9B,EAAUzgC,KAAKmc,EAAShU,KAAKzF,WAKrCyZ,EAASpU,KAAKxO,EAAO8wB,YAAY,SAAU5nB,GACzCuiH,EAAeviH,IAAO,KAEnBsiH,IACHA,EAAa,SAAUz7G,EAAM27G,GAC3B,OAAOA,GAAYD,EAAe17G,KAGtC,IACE6S,EAASpU,KAAK4d,EAAI2/F,aAAa,SAAUhlG,GACvCjY,EAAOiY,MAET,MAAOjZ,IAET,OAAOo5B,GAEL8kF,EAAiC,SAAUhsH,EAAQ8rH,GACrD,IAAI73G,EACA9K,EAAW,2CAA2CnM,KAAK8uH,GAC/D,GAAK3iH,EAAL,CAGA,IAAI8iH,EAAc9iH,EAAS,GACvBhC,EAAUgC,EAAS,GAAGmgB,OAAO,GAAGtvB,MAAM,KAAKiN,KAAK,KAChDilH,EAAyBtpG,EAASikD,QAAQ,SAsB9C,OArBI19D,EAAS,IACX8K,EAAS,CAAEvL,MAAOojH,GACd9rH,EAAOqhD,OAAOC,uBAAuB2qE,GACvCh4G,EAAO4Y,MAAQo/F,EACNjsH,EAAOqhD,OAAO2X,mBAAmBizD,IAAgBC,EAAuBD,EAAY/nG,eAC7FjQ,EAAO9K,SAAW8iH,EAElBh4G,EAAOrE,OAASq8G,GAET9iH,EAAS,KAClB8K,EAAS,CACPrE,OAAQ,OACRlH,MAAOojH,EAAaxiG,OAAO,GAC3BniB,QAASA,KAG+B,IAAxCtG,EAAS2pH,mBAAmBxqH,GAC9BiU,EAAO9M,QAAUA,EAEjB8M,EAAO7M,WAAa,CAAEg4C,MAAOj4C,GAExB8M,IAELk4G,EAAsB,SAAUhxB,EAAQhyF,GAC1C,OAAOyZ,EAAS4I,KAAK2vE,GAAQ,SAAUlxC,GACrC,OAAQA,EAAM17C,QAAU07C,EAAM17C,OAAOpF,OAGrCijH,EAA2B,SAAUjxB,GACvC,OAAOv4E,EAAShhB,IAAIu5F,GAAQ,SAAUlxC,GACpC,OAAOrnC,EAASvgB,OAAO,GAAI4nD,EAAO,CAChCqL,SAAUrL,EACV/iB,UAAW,GACX34B,OAAQ+8G,EAAcrhE,EAAM17C,QAC5BwrC,KAAM,CACJz0C,KAAM2kD,EAAMvhD,MACZmxC,KAAM,UAKVwyE,EAAkB,SAAUrsH,EAAQiqD,GACtC,OAAiB,OAAVA,IAA6D,IAA3CppD,EAAS4pH,sBAAsBzqH,IAEtDssH,EAAmB,SAAUtsH,EAAQmJ,EAAU8gD,EAAOsiE,GACxD,QAASF,EAAgBrsH,EAAQiqD,GAAS9gD,KAAYojH,EAA0BpjH,KAAY8gD,EAAM/iB,YAEhGslF,EAAqB,SAAUxsH,EAAQmJ,EAAU8gD,EAAOsiE,GACtDF,EAAgBrsH,EAAQiqD,GAC1BsiE,EAAwBpjH,IAAY,EAEpC8gD,EAAM/iB,UAAU/9B,IAAY,GAG5BsjH,EAA0B,SAAUzsH,EAAQshE,EAAQn4D,EAAU8gD,GAChE,IAAIyiE,EAUJ,OAREA,EADEziE,GAASA,EAAM0iE,mBACG1iE,EAAM0iE,mBACjB9rH,EAAS6pH,qBAAqB1qH,GACnBa,EAAS6pH,qBAAqB1qH,GAE9B,WAClB,OAAOgsH,EAA+BhsH,EAAQmJ,IAG3CujH,EAAkBxqH,KAAKo/D,EAAQn4D,EAAU8gD,IAE9C57C,EAAQ,SAAUrO,GACpBA,EAAOsO,GAAG,qBAAqB,SAAUR,GACvC,IAAIy+G,EAA0B,GAC1BK,EAAiBtB,EAAczqH,EAAS8pH,kBAAkB3qH,IAAUqT,EAAOvF,EAAEwF,QAC7E6nF,EAASixB,EAAyBvrH,EAAS+pH,aAAa5qH,IACxD6sH,EAAkB,SAAU1jH,EAAU8gD,GACxC,GAAIqiE,EAAiBtsH,EAAQmJ,EAAU8gD,EAAOsiE,GAA0B,CACtEC,EAAmBxsH,EAAQmJ,EAAU8gD,EAAOsiE,GAC5C,IAAIt4G,EAASw4G,EAAwBzsH,EAAQA,EAAOsD,QAAQwpH,UAAW3jH,EAAU8gD,GACjF,GAAIh2C,EAAQ,CACV,IAAIwX,EAAaxX,EAAOhW,MAAQ6B,EAASU,IAAIuV,WAE7C,OADA/V,EAAOkO,UAAUH,SAAS0d,EAAYxX,GAC/B2O,EAASvgB,OAAO,GAAIgR,EAAKpT,SAAS8sH,aAAc,CACrDznH,KAAM2O,EAAOvL,MACbuL,OAAQwX,KAId,OAAO,MAEJ5qB,EAASgqH,aAAa7qH,IACzBqT,EAAKiM,QAAQ3K,SAEfiO,EAASpU,KAAK+8G,EAAavrH,EAAQ8N,EAAEse,KAAOpsB,EAAOmP,SAAUm8G,EAAczqH,EAASiqH,cAAc9qH,MAAW,SAAUmJ,GACrH,IAAmC,IAA/BA,EAAStB,QAAQ,YACd+kH,GAAkBA,EAAezjH,IAAW,CAC/C,IAAI6jH,EAAiBb,EAAoBhxB,EAAQhyF,GACjD,GAAI6jH,EAAejqH,OAAS,EAC1B6f,EAASpU,KAAKw+G,GAAgB,SAAU/iE,GACtC,IAAI5M,EAAWwvE,EAAgB1jH,EAAU8gD,GACrC5M,GACF4M,EAAMlQ,KAAKF,KAAKpzC,KAAK42C,UAGpB,CACL,IAAIA,EAAWwvE,EAAgB1jH,EAAU,MACrCk0C,GACFhqC,EAAKtM,IAAIs2C,QAMnBz6B,EAASpU,KAAK2sF,GAAQ,SAAUlxC,GAC1BA,EAAMlQ,KAAKF,KAAK92C,OAAS,GAC3BsQ,EAAKtM,IAAIkjD,EAAMlQ,SAGnBjsC,EAAEwF,QAAQ25G,gBAGVC,EAAY,CACdlB,+BAAgCA,EAChC39G,MAAOA,GAGL/O,EAAM,SAAUU,GAClB,IAAIysH,EAA0B,SAAUX,GACtC,OAAOoB,EAAUlB,+BAA+BhsH,EAAQ8rH,IAE1D,MAAO,CAAEW,wBAAyBA,IAEhC7jG,EAAM,CAAEtpB,IAAKA,GAMjB,SAASmR,KAJThX,EAAOsN,IAAI,aAAa,SAAU/G,GAEhC,OADAktH,EAAU7+G,MAAMrO,GACT4oB,EAAItpB,IAAIU,OA9PL,IADhB,I,sBCAA,YACa,WACT,aAEA,IAAIvG,EAASiG,QAAQC,KAAKC,MAAMC,QAAQ,yBAEpCC,EAAWJ,QAAQC,KAAKC,MAAMC,QAAQ,eAEtCkB,EAAWrB,QAAQC,KAAKC,MAAMC,QAAQ,sBAEtCstH,EAAa,SAAUntH,GACzB,OAAOA,EAAOW,SAAS,kBAErBysH,EAA2B,SAAUptH,GACvC,OAAOA,EAAOW,SAAS,4BAErB0sH,EAA2B,SAAUrtH,GACvC,OAAOA,EAAOW,SAAS,4BAErB2sH,EAAgB,SAAUttH,GAC5B,OAAOA,EAAOW,SAAS,qBAAqB,IAE1C4sH,EAAmB,SAAUvtH,GAC/B,OAAOA,EAAOW,SAAS,qBAAqB,IAE1C6sH,EAAiB,SAAUxtH,GAC7B,OAAOA,EAAOW,SAAS,uBAErB8sH,EAAe,SAAUztH,GAC3B,OAAOA,EAAOW,SAAS,oBAAoB,IAEzC+sH,EAAY,SAAU1tH,GACxB,OAAOA,EAAOW,SAAS,gBAAgB,IAErC46C,EAAgB,SAAUv7C,GAC5B,OAAOA,EAAOW,SAAS,oBAAoB,IAEzCE,EAAW,CACbssH,WAAYA,EACZC,yBAA0BA,EAC1BC,yBAA0BA,EAC1BC,cAAeA,EACfC,iBAAkBA,EAClBC,eAAgBA,EAChBC,aAAcA,EACdC,UAAWA,EACXnyE,cAAeA,GAGbp8C,EAAO,SAAUC,GACnB,IAAIC,EAAQD,EACRE,EAAM,WACR,OAAOD,GAELE,EAAM,SAAUC,GAClBH,EAAQG,GAENC,EAAQ,WACV,OAAON,EAAKG,MAEd,MAAO,CACLA,IAAKA,EACLC,IAAKA,EACLE,MAAOA,IAIP8b,EAAO,aAEP9Q,EAAW,SAAUpL,GACvB,OAAO,WACL,OAAOA,IAGP2c,EAAQvR,GAAS,GACjBwR,EAASxR,GAAS,GAElByR,EAAO,WACT,OAAOC,GAELA,EAAO,WACT,IAAIC,EAAK,SAAUta,GACjB,OAAOA,EAAEua,UAEPna,EAAO,SAAUoa,GACnB,OAAOA,KAELha,EAAK,SAAUlF,GACjB,OAAOA,GAELmf,EAAK,CACPC,KAAM,SAAUpf,EAAG9B,GACjB,OAAO8B,KAETO,GAAIqe,EACJS,OAAQT,EACRK,OAAQJ,EACRS,MAAOpa,EACPqa,WAAYza,EACZ0a,SAAU,SAAUC,GAClB,MAAM,IAAIC,MAAMD,GAAO,oCAEzBE,UAAWtS,EAAS,MACpBuS,eAAgBvS,OAASwS,GACzBC,GAAI5a,EACJ6a,QAASjb,EACTN,IAAKsa,EACL1N,KAAM+M,EACN6B,KAAMlB,EACNmB,OAAQrB,EACRsB,OAAQrB,EACR1N,OAAQ2N,EACRqB,OAAQnB,EACRoB,QAASpB,EACTqB,QAAS,WACP,MAAO,IAETxb,SAAUwI,EAAS,WAKrB,OAHI1I,OAAO2b,QACT3b,OAAO2b,OAAOnB,GAETA,EA1CE,GA4CPoB,EAAO,SAAUlD,GACnB,IAAImD,EAAanT,EAASgQ,GACtBvZ,EAAO,WACT,OAAOqb,GAELa,EAAO,SAAUrB,GACnB,OAAOA,EAAEtB,IAEP8B,EAAK,CACPC,KAAM,SAAUpf,EAAG9B,GACjB,OAAOA,EAAEmf,IAEX9c,GAAI,SAAU6B,GACZ,OAAOib,IAAMjb,GAEfid,OAAQR,EACRI,OAAQL,EACRU,MAAOkB,EACPjB,WAAYiB,EACZhB,SAAUgB,EACVb,UAAWa,EACXZ,eAAgBY,EAChBV,GAAIhc,EACJic,QAASjc,EACTU,IAAK,SAAUma,GACb,OAAO4B,EAAK5B,EAAEtB,KAEhBjM,KAAM,SAAUuN,GACdA,EAAEtB,IAEJ2C,KAAMA,EACNC,OAAQD,EACRE,OAAQF,EACR7O,OAAQ,SAAUwN,GAChB,OAAOA,EAAEtB,GAAK8B,EAAKJ,GAErBsB,QAAS,WACP,MAAO,CAAChD,IAEVxY,SAAU,WACR,MAAO,QAAUwY,EAAI,KAEvB8C,OAAQ,SAAUzb,GAChB,OAAOA,EAAEnE,GAAG8c,IAEd+C,QAAS,SAAU1b,EAAG+b,GACpB,OAAO/b,EAAE0a,KAAKR,GAAO,SAAU7C,GAC7B,OAAO0E,EAAUpD,EAAGtB,QAI1B,OAAOoD,GAELrW,EAAO,SAAU7G,GACnB,OAAiB,OAAVA,QAA4B4d,IAAV5d,EAAsB8c,EAAOwB,EAAKte,IAEzDye,EAAS,CACXH,KAAMA,EACNzB,KAAMA,EACNhW,KAAMA,GAGJ/D,EAAiBJ,OAAOI,eACxB7C,EAAM,SAAUogB,EAAKliB,GACvB,OAAOqqB,EAAInI,EAAKliB,GAAOsgB,EAAO5X,KAAKwZ,EAAIliB,IAAQsgB,EAAO5B,QAEpD2L,EAAM,SAAUnI,EAAKliB,GACvB,OAAO2E,EAAeD,KAAKwd,EAAKliB,IAG9BoT,EAAWlR,QAAQC,KAAKC,MAAMC,QAAQ,wBAEtC+iB,EAAWljB,QAAQC,KAAKC,MAAMC,QAAQ,0BAEtC8tH,EAAsB,SAAUC,EAAUj8F,GAC5C,GAAIi8F,EACF,IAAK,IAAIvqH,EAAI,EAAGA,EAAIuqH,EAAS7qH,OAAQM,IACnC,IAAyC,IAArCsuB,EAAI9pB,QAAQ+lH,EAASvqH,GAAGkL,QAC1B,OAAOq/G,EAASvqH,IAKpBwqH,EAAc,CAAEF,oBAAqBA,GAErCntH,EAAMoQ,EAASpQ,IACfstH,EAAS,SAAUzuH,GACrB,OAAOA,EAAMwC,QAAQ,MAAO,KAE1BksH,EAAoB,SAAU/9F,GAChC,IAAIxmB,EAAQwmB,EAAMpuB,IAAI4H,MAClBmd,EAASnd,EAAQhJ,EAAI4hD,WAAW54C,GAAS,GAC7C,MAAO,CACL/H,KAAM,kBACNusH,QAASh+F,EAAMpuB,IAAI,wBACnBqsH,QAAS,GACTC,OAAQ,GACR97F,MAAO9yB,EAAIqnB,EAAQ,aAAa/kB,IAAIksH,GAAQpxG,MAAM,IAClD2V,OAAQ/yB,EAAIqnB,EAAQ,cAAc/kB,IAAIksH,GAAQpxG,MAAM,MAGpD+G,EAAa,SAAUmqG,EAAUhlH,GACnC,IAAIulH,EAAehvH,GAAK,GACpB4F,EAAO,GA+CX,OA9CA6d,EAAS,CACPW,UAAU,EACV6qG,4BAA4B,EAC5B7+F,QAAS,kBACTrH,MAAO,SAAUjqB,EAAM+xB,GACrB,GAAIm+F,EAAa7uH,YAAc,GAAIuoB,EAAImI,EAAMpuB,IAAK,wBAChDusH,EAAa5uH,KAAI,GACjBwF,EAAOgpH,EAAkB/9F,OACpB,CAUL,GATKjrB,EAAKipH,SAAoB,UAAT/vH,IACnB8G,EAAKipH,QAAUh+F,EAAMpuB,IAAIysH,OAEd,WAATpwH,GAA8B,WAATA,GAA8B,UAATA,GAA6B,UAATA,GAA6B,UAATA,IAC/E8G,EAAKtD,OACRsD,EAAKtD,KAAOxD,GAEd8G,EAAOhE,EAASsB,OAAO2tB,EAAMpuB,IAAKmD,IAEvB,WAAT9G,EAAmB,CACrB,IAAIqwH,EAAcT,EAAYF,oBAAoBC,EAAU59F,EAAMpuB,IAAI+vB,KACtE,IAAK28F,EACH,OAEFvpH,EAAO,CACLtD,KAAM,SACNusH,QAASh+F,EAAMpuB,IAAI+vB,IACnBS,MAAOk8F,EAAYl8F,MACnBC,OAAQi8F,EAAYj8F,QAGX,WAATp0B,IACG8G,EAAKipH,QAEEjpH,EAAKkpH,UACflpH,EAAKkpH,QAAUj+F,EAAMpuB,IAAI+vB,KAFzB5sB,EAAKipH,QAAUh+F,EAAMpuB,IAAI+vB,KAKhB,QAAT1zB,GAAmB8G,EAAKmpH,SAC1BnpH,EAAKmpH,OAASl+F,EAAMpuB,IAAI+vB,SAI7BlqB,MAAMmB,GACT7D,EAAKipH,QAAUjpH,EAAKipH,SAAWjpH,EAAK4sB,KAAO5sB,EAAKA,KAChDA,EAAKkpH,QAAUlpH,EAAKkpH,SAAW,GAC/BlpH,EAAKmpH,OAASnpH,EAAKmpH,QAAU,GACtBnpH,GAELwpH,EAAa,CAAE9qG,WAAYA,GAE3BggB,EAAW/jC,QAAQC,KAAKC,MAAMC,QAAQ,wBAEtC2uH,EAAQ,SAAUtlH,GACpB,IAAIulH,EAAQ,CACVC,IAAK,aACLC,IAAK,YACLC,IAAK,YACLC,KAAM,aACNC,IAAK,YACLC,IAAK,iCAEHC,EAAU9lH,EAAIgb,cAAclqB,MAAM,KAAKi1H,MACvCC,EAAOT,EAAMO,GACjB,OAAOE,GAAc,IAEnBC,EAAO,CAAEX,MAAOA,GAEhB9qF,EAAWhkC,QAAQC,KAAKC,MAAMC,QAAQ,uBAEtCqkC,EAAWxkC,QAAQC,KAAKC,MAAMC,QAAQ,uBAEtCk6D,EAAQnpD,EAASpQ,IACjB4uH,EAAQ,SAAU/vH,GACpB,MAAO,YAAY2E,KAAK3E,GAASA,EAAQ,KAAOA,GAE9CgwH,EAAgB,SAAUr/F,EAAOs/F,GACnC,IAAK,IAAIrxH,KAAQqxH,EAAc,CAC7B,IAAIjwH,EAAQ,GAAKiwH,EAAarxH,GAC9B,GAAI+xB,EAAMpuB,IAAI3D,GAAO,CACnB,IAAIoF,EAAI2sB,EAAMjtB,OACd,MAAOM,IAAK,CACV,IAAIsL,EAAOqhB,EAAM3sB,GACbsL,EAAK1Q,OAASA,IACZoB,GACF2wB,EAAMpuB,IAAI3D,GAAQoB,EAClBsP,EAAKtP,MAAQA,WAEN2wB,EAAMpuB,IAAI3D,GACjB+xB,EAAMppB,OAAOvD,EAAG,WAIbhE,IACT2wB,EAAMvpB,KAAK,CACTxI,KAAMA,EACNoB,MAAOA,IAET2wB,EAAMpuB,IAAI3D,GAAQoB,KAIpBkwH,EAAmB,SAAUxqH,EAAMirB,GACrC,IAAIxmB,EAAQwmB,EAAMpuB,IAAI4H,MAClBgmH,EAAWhmH,EAAQuwD,EAAM3X,WAAW54C,GAAS,GACjDgmH,EAAS,aAAeJ,EAAMrqH,EAAKqtB,OACnCo9F,EAAS,cAAgBJ,EAAMrqH,EAAKstB,QACpCg9F,EAAcr/F,EAAO,CAAExmB,MAAOuwD,EAAM1X,eAAemtE,MAEjDC,EAAa,SAAU7mH,EAAM7D,EAAM2qH,GACrC,IAGIC,EAHAC,EAAS1rF,IACTiqF,EAAehvH,GAAK,GACpB0wH,EAAc,EAsGlB,OApGAjtG,EAAS,CACPW,UAAU,EACV6qG,4BAA4B,EAC5B7+F,QAAS,kBACTpnB,QAAS,SAAU7C,GACjBsqH,EAAOznH,QAAQ7C,IAEjBgD,MAAO,SAAUhD,GACfsqH,EAAOtnH,MAAMhD,IAEfA,KAAM,SAAUA,EAAMi9D,GACpBqtD,EAAOtqH,KAAKA,EAAMi9D,IAEpBr6C,MAAO,SAAUjqB,EAAM+xB,EAAOnhB,GAC5B,GAAIs/G,EAAa7uH,YAAc,GAAIuoB,EAAImI,EAAMpuB,IAAK,wBAChDusH,EAAa5uH,KAAI,GACjBgwH,EAAiBxqH,EAAMirB,OAClB,CACL,OAAQ/xB,GACR,IAAK,QACL,IAAK,SACL,IAAK,QACL,IAAK,MACL,IAAK,cACiBgf,IAAhBlY,EAAKstB,aAAuCpV,IAAflY,EAAKqtB,OACpCi9F,EAAcr/F,EAAO,CACnBoC,MAAOrtB,EAAKqtB,MACZC,OAAQttB,EAAKstB,SAGjB,MAEF,GAAIq9F,EACF,OAAQzxH,GACR,IAAK,QACHoxH,EAAcr/F,EAAO,CACnBk+F,OAAQnpH,EAAKmpH,OACbv8F,IAAK,KAEH5sB,EAAKkpH,SACPoB,EAAcr/F,EAAO,CAAE2B,IAAK,KAE9B,MACF,IAAK,SACH09F,EAAcr/F,EAAO,CAAE2B,IAAK5sB,EAAKipH,UACjC,MACF,IAAK,SAEH,GADA6B,IACIA,GAAe,IACjBR,EAAcr/F,EAAO,CACnB2B,IAAK5sB,EAAK,SAAW8qH,GACrBpuH,KAAMsD,EAAK,SAAW8qH,EAAc,WAEjC9qH,EAAK,SAAW8qH,IACnB,OAGJ,MACF,IAAK,MACH,IAAK9qH,EAAKmpH,OACR,OAEFyB,GAAW,EACX,OAINC,EAAO1nG,MAAMjqB,EAAM+xB,EAAOnhB,IAE5Bia,IAAK,SAAU7qB,GACb,IAAKkwH,EAAa7uH,MAAO,CACvB,GAAa,UAATrB,GAAoByxH,EACtB,IAAK,IAAIvpH,EAAQ,EAAGA,GAAS,EAAGA,IAC9B,GAAIpB,EAAK,SAAWoB,GAAQ,CAC1B,IAAI6pB,EAAQ,GACZA,EAAMpuB,IAAM,GACRiuH,EAAc1pH,IAChBkpH,EAAcr/F,EAAO,CACnB2B,IAAK5sB,EAAK,SAAWoB,GACrB1E,KAAMsD,EAAK,SAAWoB,EAAQ,UAEhCypH,EAAO1nG,MAAM,SAAU8H,GAAO,IAKtC,GAAIjrB,EAAKmpH,QAAmB,WAATjwH,GAAqByxH,IAAcC,EAAU,CAC9D,IAAIG,EAAW,GACfA,EAASluH,IAAM,GACfytH,EAAcS,EAAU,CACtBn+F,IAAK5sB,EAAKmpH,OACV97F,MAAOrtB,EAAKqtB,MACZC,OAAQttB,EAAKstB,SAEfu9F,EAAO1nG,MAAM,MAAO4nG,GAAU,IAGlCF,EAAO9mG,IAAI7qB,KAEZylC,EAAS,KAAKj8B,MAAMmB,GAChBgnH,EAAOr+F,cAEZw+F,EAAa,CAAEN,WAAYA,GAE3BO,EAAc,CAChB,CACEpmH,MAAO,8BACPnI,KAAM,SACNf,EAAG,IACHhF,EAAG,IACHwN,IAAK,6BACL+mH,iBAAiB,GAEnB,CACErmH,MAAO,iDACPnI,KAAM,SACNf,EAAG,IACHhF,EAAG,IACHwN,IAAK,gCACL+mH,iBAAiB,GAEnB,CACErmH,MAAO,0CACPnI,KAAM,SACNf,EAAG,IACHhF,EAAG,IACHwN,IAAK,6BACL+mH,iBAAiB,GAEnB,CACErmH,MAAO,uBACPnI,KAAM,SACNf,EAAG,IACHhF,EAAG,IACHwN,IAAK,uEACL+mH,iBAAiB,GAEnB,CACErmH,MAAO,6BACPnI,KAAM,SACNf,EAAG,IACHhF,EAAG,IACHwN,IAAK,mDACL+mH,iBAAiB,GAEnB,CACErmH,MAAO,kDACPnI,KAAM,SACNf,EAAG,IACHhF,EAAG,IACHwN,IAAK,kDACL+mH,iBAAiB,GAEnB,CACErmH,MAAO,mCACPnI,KAAM,SACNf,EAAG,IACHhF,EAAG,IACHwN,IAAK,uCACL+mH,iBAAiB,GAEnB,CACErmH,MAAO,mBACPnI,KAAM,SACNf,EAAG,IACHhF,EAAG,IACHwN,IAAK,uCACL+mH,iBAAiB,IAGjB9+E,EAAS,SAAUtrC,EAASqD,GAQ9B,IAPA,IAAIzK,EAAQoH,EAAQ+D,MAAM5M,KAAKkM,GAC3BgnH,EAASrqH,EAAQqD,IACjBinH,EAAU,SAAU9sH,GACtB6sH,EAASA,EAAOruH,QAAQ,IAAMwB,GAAG,WAC/B,OAAO5E,EAAM4E,GAAK5E,EAAM4E,GAAK,OAGxBA,EAAI,EAAGA,EAAI5E,EAAMsE,OAAQM,IAChC8sH,EAAQ9sH,GAEV,OAAO6sH,EAAOruH,QAAQ,MAAO,KAE3BuuH,EAAe,SAAUlnH,GAC3B,IAAIrD,EAAUmqH,EAAYzhH,QAAO,SAAU1I,GACzC,OAAOA,EAAQ+D,MAAM5F,KAAKkF,MAE5B,OAAIrD,EAAQ9C,OAAS,EACZhC,EAASsB,OAAO,GAAIwD,EAAQ,GAAI,CAAEqD,IAAKioC,EAAOtrC,EAAQ,GAAIqD,KAE1D,MAIPmnH,EAAgB,SAAUtrH,GAC5B,IAAIkrH,EAAkBlrH,EAAKkrH,gBAAkB,uBAAyB,GACtE,MAAO,gBAAkBlrH,EAAKipH,QAAU,YAAcjpH,EAAKqtB,MAAQ,aAAertB,EAAKstB,OAAS,IAAM49F,EAAkB,cAEtHK,EAAe,SAAUvrH,GAC3B,IAAI6D,EAAO,iBAAmB7D,EAAKipH,QAAU,YAAcjpH,EAAKqtB,MAAQ,aAAertB,EAAKstB,OAAS,0CAKrG,OAJIttB,EAAKmpH,SACPtlH,GAAQ,aAAe7D,EAAKmpH,OAAS,YAAcnpH,EAAKqtB,MAAQ,aAAertB,EAAKstB,OAAS,QAE/FzpB,GAAQ,YACDA,GAEL2nH,EAAe,SAAUxrH,EAAMyrH,GACjC,OAAIA,EACKA,EAAsBzrH,GAEtB,mCAAqCA,EAAKipH,QAAU,MAAQjpH,EAAKkpH,QAAU,kBAAoBlpH,EAAKkpH,QAAU,KAAOlpH,EAAK0rH,YAAc,UAAY1rH,EAAK0rH,YAAc,IAAM,IAAM,QAAU,IAAM,YAG1MC,EAAe,SAAU3rH,EAAM4rH,GACjC,OAAIA,EACKA,EAAsB5rH,GAEtB,iBAAmBA,EAAKqtB,MAAQ,aAAertB,EAAKstB,OAAS,KAAOttB,EAAKmpH,OAAS,YAAcnpH,EAAKmpH,OAAS,IAAM,IAApH,uCAAwKnpH,EAAKipH,QAAU,KAAOjpH,EAAK6rH,YAAc,UAAY7rH,EAAK6rH,YAAc,IAAM,IAAM,SAAW7rH,EAAKkpH,QAAU,gBAAkBlpH,EAAKkpH,QAAU,KAAOlpH,EAAK0rH,YAAc,UAAY1rH,EAAK0rH,YAAc,IAAM,IAAM,QAAU,IAAM,YAGnZI,EAAgB,SAAU9rH,GAC5B,MAAO,gBAAkBA,EAAKipH,QAAU,gBAEtCtpG,GAAa,SAAU1kB,EAAQ8wH,GACjC,IAAI/rH,EAAOhE,EAASsB,OAAO,GAAIyuH,GAC/B,IAAK/rH,EAAKipH,UACRjtH,EAASsB,OAAO0C,EAAMwpH,EAAW9qG,WAAW5iB,EAASssH,WAAWntH,GAAS+E,EAAKgsH,SACzEhsH,EAAKipH,SACR,MAAO,GAGNjpH,EAAKkpH,UACRlpH,EAAKkpH,QAAU,IAEZlpH,EAAKmpH,SACRnpH,EAAKmpH,OAAS,IAEhBnpH,EAAKipH,QAAUhuH,EAAO4jD,WAAW7+C,EAAKipH,QAAS,UAC/CjpH,EAAKkpH,QAAUjuH,EAAO4jD,WAAW7+C,EAAKkpH,QAAS,UAC/ClpH,EAAK6rH,YAAczB,EAAKX,MAAMzpH,EAAKipH,SACnCjpH,EAAK0rH,YAActB,EAAKX,MAAMzpH,EAAKkpH,SACnClpH,EAAKmpH,OAASluH,EAAO4jD,WAAW7+C,EAAKmpH,OAAQ,UAC7C,IAAIroH,EAAUuqH,EAAarrH,EAAKipH,SAQhC,GAPInoH,IACFd,EAAKipH,QAAUnoH,EAAQqD,IACvBnE,EAAKtD,KAAOoE,EAAQpE,KACpBsD,EAAKkrH,gBAAkBpqH,EAAQoqH,gBAC/BlrH,EAAKqtB,MAAQrtB,EAAKqtB,OAASvsB,EAAQnF,EACnCqE,EAAKstB,OAASttB,EAAKstB,QAAUxsB,EAAQnK,GAEnCqJ,EAAKgsH,MACP,OAAOhB,EAAWN,WAAW1qH,EAAKgsH,MAAOhsH,GAAM,GAE/C,IAAIupH,EAAcT,EAAYF,oBAAoB9sH,EAASssH,WAAWntH,GAAS+E,EAAKipH,SAChFM,IACFvpH,EAAKtD,KAAO,SACZsD,EAAKqtB,MAAQk8F,EAAYl8F,MACzBrtB,EAAKstB,OAASi8F,EAAYj8F,QAE5B,IAAIm+F,EAAwB3vH,EAASusH,yBAAyBptH,GAC1D2wH,EAAwB9vH,EAASwsH,yBAAyBrtH,GAM9D,OALA+E,EAAKqtB,MAAQrtB,EAAKqtB,OAAS,IAC3BrtB,EAAKstB,OAASttB,EAAKstB,QAAU,IAC7BtxB,EAASyN,KAAKzJ,GAAM,SAAU1F,EAAO7B,GACnCuH,EAAKvH,GAAOwC,EAAO4L,IAAItK,OAAOjC,MAEd,WAAd0F,EAAKtD,KACA4uH,EAActrH,GACS,kCAArBA,EAAK6rH,YACPN,EAAavrH,IAC4B,IAAvCA,EAAK6rH,YAAY/oH,QAAQ,SAC3B0oH,EAAaxrH,EAAMyrH,GACH,WAAdzrH,EAAKtD,KACPovH,EAAc9rH,GAEd2rH,EAAa3rH,EAAM4rH,IAI5BK,GAAa,CAAEtsG,WAAYA,IAE3ByrD,GAAQ,GACR8gD,GAAe,SAAUlsH,EAAM2f,EAAY4gC,GAC7C,OAAO,IAAI7hB,GAAS,SAAUzO,EAAKk8F,GACjC,IAAIC,EAAiB,SAAU56F,GAI7B,OAHIA,EAAS3tB,OACXunE,GAAMprE,EAAKipH,SAAWz3F,GAEjBvB,EAAI,CACT9rB,IAAKnE,EAAKipH,QACVplH,KAAM2tB,EAAS3tB,KAAO2tB,EAAS3tB,KAAO8b,EAAW3f,MAGjDorE,GAAMprE,EAAKipH,SACbmD,EAAehhD,GAAMprE,EAAKipH,UAE1B1oE,EAAQ,CAAEp8C,IAAKnE,EAAKipH,SAAWmD,EAAgBD,OAIjDE,GAAiB,SAAUrsH,EAAM2f,GACnC,OAAO,IAAI+e,GAAS,SAAUzO,GAC5BA,EAAI,CACFpsB,KAAM8b,EAAW3f,GACjBmE,IAAKnE,EAAKipH,cAIZqD,GAAa,SAAUrxH,GACzB,OAAO,SAAU+E,GACf,OAAOisH,GAAWtsG,WAAW1kB,EAAQ+E,KAGrCusH,GAAe,SAAUtxH,EAAQ+E,GACnC,IAAIwsH,EAAe1wH,EAAS2sH,eAAextH,GAC3C,OAAOuxH,EAAeN,GAAalsH,EAAMssH,GAAWrxH,GAASuxH,GAAgBH,GAAersH,EAAMssH,GAAWrxH,KAE3GwxH,GAAW,SAAUtoH,GACvB,OAAOinE,GAAMhuE,eAAe+G,IAE1BuoH,GAAU,CACZH,aAAcA,GACdE,SAAUA,IAGRE,GAAW,SAAUryH,GACvB,OAAOA,EAAMwC,QAAQ,MAAO,KAE1B8vH,GAAU,SAAUtyH,GACtB,MAAO,YAAY2E,KAAK3E,GAASA,EAAQ,KAAOA,GAE9CsgD,GAAU,SAAU1hD,GACtB,OAAO,SAAU2J,GACf,OAAOA,EAAM8pH,GAAS9pH,EAAI4B,MAAMvL,IAAS,KAGzCyhD,GAAU,SAAUzhD,GACtB,OAAO,SAAU2J,EAAKvI,GAChBuI,IACFA,EAAI4B,MAAMvL,GAAQ0zH,GAAQtyH,MAI5BuyH,GAAO,CACTC,YAAalyE,GAAQ,YACrBmyE,aAAcnyE,GAAQ,aACtBoyE,YAAaryE,GAAQ,YACrBsyE,aAActyE,GAAQ,cAGpBgD,GAAa,SAAU1W,EAAWC,GACpCD,EAAUpI,MAAMrkC,IAAI,SAAUysC,EAAU3sC,SACxC4sC,EAAWrI,MAAMrkC,IAAI,SAAU0sC,EAAW5sC,UAExCsjD,GAAiB,SAAUzY,EAAKnuB,GAClC,IAAIiwB,EAAY9B,EAAIj7B,KAAK,UAAU,GAC/Bg9B,EAAa/B,EAAIj7B,KAAK,WAAW,GACjC2zC,EAAc1Y,EAAIj7B,KAAK,cAAc,GACrC+8B,GAAaC,GAAc2W,GAC7B7mC,EAAEiwB,EAAWC,EAAY2W,EAAYxW,YAGrCyW,GAAe,SAAU7W,EAAWC,EAAY6W,GAClD,IAAIC,EAAW/W,EAAUpI,MAAMtkC,IAAI,UAC/B0jD,EAAY/W,EAAWrI,MAAMtkC,IAAI,UACjC4sC,EAAWF,EAAU3sC,QACrB8sC,EAAYF,EAAW5sC,QACvByjD,GAAgBC,GAAYC,GAAa9W,GAAYC,IACnDD,IAAa6W,GACf5W,EAAY7rC,KAAKu9B,MAAMqO,EAAW6W,EAAW5W,GACxC8W,MAAM9W,IACTF,EAAW5sC,MAAM8sC,KAGnBD,EAAW5rC,KAAKu9B,MAAMsO,EAAY6W,EAAY9W,GACzC+W,MAAM/W,IACTF,EAAU3sC,MAAM6sC,KAItBwW,GAAW1W,EAAWC,IAEpBiX,GAAW,SAAUhZ,GACvByY,GAAezY,EAAKwY,KAElBS,GAAa,SAAUjZ,GACzByY,GAAezY,EAAK2Y,KAElBO,GAAW,SAAUwqD,GACvB,IAAI7hE,EAAa,WACf6hE,GAAS,SAAU1jE,GACjBiZ,GAAWjZ,OAGf,MAAO,CACLzoC,KAAM,YACN6L,MAAO,aACPJ,OAAQ,OACRE,MAAO,SACPyT,QAAS,EACTvB,MAAO,CACL,CACErhB,KAAM,QACNwD,KAAM,UACN4hD,UAAW,EACXv9B,KAAM,EACN6oB,SAAU5C,EACVr+B,UAAW,SAEb,CACEjM,KAAM,QACN6D,KAAM,KAER,CACErH,KAAM,SACNwD,KAAM,UACN4hD,UAAW,EACXv9B,KAAM,EACN6oB,SAAU5C,EACVr+B,UAAW,UAEb,CACEzP,KAAM,YACNwD,KAAM,WACN2qC,SAAS,EACT9mC,KAAM,4BAKVg+C,GAAc,CAChBF,SAAUA,GACVF,SAAUA,GACVC,WAAYA,IAGV8uE,GAAcnyH,EAASkyB,IAAMlyB,EAASkyB,IAAM,EAAI,WAAa,UAC7DkgG,GAAc,SAAUlyH,GAC1B,OAAO,SAAUg2B,GACf,IAAIm8F,EAAen8F,GAASA,EAAMnZ,IAAM,8BAAgCmZ,EAAMnZ,IAAM,2CACpF7c,EAAO4xC,oBAAoBjlC,KAAK,CAC9BlL,KAAM,QACN6D,KAAM6sH,MAIR/gD,GAAU,SAAUpxE,GACtB,IAAI4D,EAAU5D,EAAOuL,UAAUC,UAC3B4mH,EAAYxuH,EAAQ4T,aAAa,wBACrC,OAAI46G,EACK,CACL,QAAWA,EACX,uBAAwBA,EACxB,MAASR,GAAKC,YAAYjuH,GAC1B,OAAUguH,GAAKE,aAAaluH,IAGzBA,EAAQ4T,aAAa,mBAAqB+2G,EAAW9qG,WAAW5iB,EAASssH,WAAWntH,GAASA,EAAO8mD,WAAWphC,UAAU9hB,EAAS,CAAE2H,WAAW,KAAW,IAE/J8mH,GAAY,SAAUryH,GACxB,IAAI4H,EAAM5H,EAAOuL,UAAUC,UAC3B,GAAI5D,EAAI4P,aAAa,oBAAsB5P,EAAI4P,aAAa,wBAC1D,OAAOxX,EAAOuL,UAAUgmB,cAGxB+gG,GAAe,SAAUpoF,EAAKlqC,GAChC,OAAO,SAAUu2B,GACf,IAAI3tB,EAAO2tB,EAAS3tB,KAChBmoH,EAAQ7mF,EAAIj7B,KAAK,UAAU,GAC3BlK,EAAOhE,EAASsB,OAAOksH,EAAW9qG,WAAW5iB,EAASssH,WAAWntH,GAAS4I,GAAO,CAAEolH,QAASz3F,EAASrtB,MACzGghC,EAAIqoF,SAASxtH,GACTgsH,IACFA,EAAM1xH,MAAMuJ,GACZ06C,GAAYH,WAAWjZ,MAIzBsoF,GAAoB,SAAUxyH,EAAQyyH,GACxC,IAAIpvH,EACArH,EACA02H,EAAe1yH,EAAO4L,IAAIE,OAAO,wBACrC,IAAKzI,EAAI,EAAGA,EAAIovH,EAAc1vH,OAAQM,IACpC,IAAKrH,EAAI02H,EAAa3vH,OAAS,EAAG/G,GAAK,EAAGA,IACpCy2H,EAAcpvH,KAAOqvH,EAAa12H,IACpC02H,EAAa9rH,OAAO5K,EAAG,GAI7BgE,EAAOuL,UAAUO,OAAO4mH,EAAa,KAEnCC,GAAe,SAAU3yH,EAAQ4I,GACnC,IAAI6pH,EAAgBzyH,EAAO4L,IAAIE,OAAO,wBACtC9L,EAAO+L,cAAcnD,GACrB4pH,GAAkBxyH,EAAQyyH,GAC1BzyH,EAAOyU,eAEL4xC,GAAa,SAAUnc,EAAKlqC,GAC9B,IAAI+E,EAAOmlC,EAAIiY,SACfp9C,EAAKgsH,MAAQhB,EAAWN,WAAW1qH,EAAKgsH,MAAOhsH,GAC3CA,EAAKgsH,OAASU,GAAQD,SAASzsH,EAAKipH,SACtC2E,GAAa3yH,EAAQ+E,EAAKgsH,OAE1BU,GAAQH,aAAatxH,EAAQ+E,GAAMwvB,MAAK,SAAUgC,GAChDo8F,GAAa3yH,EAAQu2B,EAAS3tB,SAC7BksB,MAAMo9F,GAAYlyH,KAGrB4yH,GAAe,SAAU1oF,EAAKtrB,GAChC7d,EAASyN,KAAKoQ,GAAM,SAAUvf,EAAO7B,GACnC0sC,EAAIj7B,KAAK,IAAMzR,GAAK6B,MAAMA,OAG1B04C,GAAa,SAAU/3C,GACzB,IAAIkqC,EACAnlC,EACAg/C,EAAmB,CAAC,CACpB9lD,KAAM,UACNwD,KAAM,aACNuiD,SAAU,QACVl+B,KAAM,GACNlY,WAAW,EACXN,MAAO,SACPw6E,QAAS,WACP/zD,YAAW,WACT09F,GAAQH,aAAatxH,EAAQkqC,EAAIiY,UAAU5tB,KAAK+9F,GAAapoF,EAAKlqC,IAAS80B,MAAMo9F,GAAYlyH,MAC5F,IAEL2uC,SAAU,SAAU7gC,GAClB2jH,GAAQH,aAAatxH,EAAQkqC,EAAIiY,UAAU5tB,KAAK+9F,GAAapoF,EAAKlqC,IAAS80B,MAAMo9F,GAAYlyH,IAC7F4yH,GAAa1oF,EAAKp8B,EAAE8Q,OAEtBqlC,aAAc,SAAUn2C,GACtBA,EAAE8Q,KAAOsrB,EAAIiY,YAGf0wE,EAAoB,GACpBC,EAAc,SAAU3kF,GAC1BA,EAAOjE,GACPnlC,EAAOmlC,EAAIiY,SACXjY,EAAIj7B,KAAK,UAAU5P,MAAM0wH,EAAWN,WAAW1qH,EAAKgsH,MAAOhsH,KAoB7D,GAlBIlE,EAAS4sH,aAAaztH,IACxB6yH,EAAkBpsH,KAAK,CACrBxI,KAAM,UACNwD,KAAM,aACNuiD,SAAU,QACVl+B,KAAM,GACNxY,MAAO,uBAGPzM,EAAS6sH,UAAU1tH,IACrB6yH,EAAkBpsH,KAAK,CACrBxI,KAAM,SACNwD,KAAM,aACNuiD,SAAU,QACVl+B,KAAM,GACNxY,MAAO,WAGPzM,EAAS06C,cAAcv7C,GAAS,CAClC,IAAIsT,EAAUgwC,GAAYF,SAAS0vE,GACnC/uE,EAAiBt9C,KAAK6M,GAExBvO,EAAOqsE,GAAQpxE,GACf,IAAI+yH,EAAe,CACjBzwH,GAAI,iBACJb,KAAM,UACNkM,KAAM,EACN1P,KAAM,QACNoB,MAAOgzH,GAAUryH,GACjByN,WAAW,EACXkI,KAAM,EACNrI,MAAO,UAEL0lH,EAAsB,WACxBjuH,EAAOhE,EAASsB,OAAO,GAAIksH,EAAW9qG,WAAW5iB,EAASssH,WAAWntH,GAASrG,KAAK0F,UACnF1F,KAAKoK,SAASA,SAASwuH,SAASxtH,IAElCguH,EAAad,IAAee,EAC5B,IAAI3lH,EAAO,CACT,CACE3E,MAAO,UACPjH,KAAM,OACN6d,MAAOykC,GAET,CACEr7C,MAAO,QACPjH,KAAM,YACNyL,OAAQ,OACRC,UAAW,SACXC,MAAO,UACPwT,QAAS,GACTC,QAAS,GACTvB,MAAO,CACL,CACE7d,KAAM,QACN6D,KAAM,+BACN2tH,MAAO,kBAETF,KAIFF,EAAkB9vH,OAAS,GAC7BsK,EAAK5G,KAAK,CACRiC,MAAO,WACPjH,KAAM,OACN6d,MAAOuzG,IAGX3oF,EAAMlqC,EAAOiN,cAAcN,KAAK,CAC9BjE,MAAO,oBACP3D,KAAMA,EACNyc,SAAU,WACVnU,KAAMA,EACNQ,SAAU,WACRy1C,GAAYH,WAAWjZ,GACvBmc,GAAWnc,EAAKlqC,MAGpBsjD,GAAYJ,SAAShZ,IAEnBx9B,GAAS,CAAEqrC,WAAYA,IAEvBxvB,GAAQ,SAAUvoB,GACpB,IAAI+3C,EAAa,WACfrrC,GAAOqrC,WAAW/3C,IAEpB,MAAO,CAAE+3C,WAAYA,IAEnBnvB,GAAM,CAAEtpB,IAAKipB,IAEbxa,GAAW,SAAU/N,GACvB,IAAI+3C,EAAa,WACfrrC,GAAOqrC,WAAW/3C,IAEpBA,EAAOgO,WAAW,WAAY+pC,IAE5B3pC,GAAW,CAAEL,SAAUA,IAEvBs2B,GAAW3kC,QAAQC,KAAKC,MAAMC,QAAQ,qBAEtCqzH,GAAW,SAAUlzH,EAAQ4I,GAC/B,IAA0C,IAAtC/H,EAAS0sH,iBAAiBvtH,GAC5B,OAAO4I,EAET,IACIuqH,EADAvD,EAAS1rF,IAwCb,OAtCAthB,EAAS,CACPW,UAAU,EACV6qG,4BAA4B,EAC5B7+F,QAAS,kBACTpnB,QAAS,SAAU7C,GACjBsqH,EAAOznH,QAAQ7C,IAEjBgD,MAAO,SAAUhD,GACfsqH,EAAOtnH,MAAMhD,IAEfA,KAAM,SAAUA,EAAMi9D,GACpBqtD,EAAOtqH,KAAKA,EAAMi9D,IAEpBr6C,MAAO,SAAUjqB,EAAM+xB,EAAOnhB,GAE5B,GADAskH,GAAU,EACG,WAATl1H,GAA8B,aAATA,GAAgC,QAATA,EAAhD,CAGA,IAAK,IAAIoF,EAAI2sB,EAAMjtB,OAAS,EAAGM,GAAK,EAAGA,IAAK,CAC1C,IAAI+vH,EAAWpjG,EAAM3sB,GAAGpF,KACO,IAA3Bm1H,EAASvrH,QAAQ,eACZmoB,EAAMpuB,IAAIwxH,GACjBpjG,EAAMppB,OAAOvD,EAAG,IAED,UAAb+vH,IACFpjG,EAAM3sB,GAAGhE,MAAQW,EAAO4L,IAAIy2C,eAAeriD,EAAO4L,IAAIw2C,WAAWpyB,EAAM3sB,GAAGhE,OAAQpB,IAGtF2xH,EAAO1nG,MAAMjqB,EAAM+xB,EAAOnhB,GAC1BskH,GAAU,IAEZrqG,IAAK,SAAU7qB,GACTk1H,GAGJvD,EAAO9mG,IAAI7qB,KAEZylC,EAAS,KAAKj8B,MAAMmB,GAChBgnH,EAAOr+F,cAEZ8hG,GAAW,CAAEH,SAAUA,IAEvBI,GAAwB,SAAUtzH,EAAQsL,GAC5C,IAAIioH,EACAt1H,EAAOqN,EAAKrN,KAYhB,OAXAs1H,EAAc,IAAIlvF,GAAS,MAAO,GAClCkvF,EAAYxuG,YAAa,EACzByuG,GAA6BxzH,EAAQsL,EAAMioH,GAC3CA,EAAY5kH,KAAK,CACf,MAASrD,EAAKqD,KAAK,UAAY,MAC/B,OAAUrD,EAAKqD,KAAK,YAAuB,UAAT1Q,EAAmB,KAAO,OAC5D,MAASqN,EAAKqD,KAAK,SACnB,IAAO7O,EAASsiE,eAChB,kBAAmBnkE,EACnB,MAAS,yBAA2BA,IAE/Bs1H,GAELE,GAA0B,SAAUzzH,EAAQsL,GAC9C,IAAIooH,EACAC,EACAC,EACA31H,EAAOqN,EAAKrN,KAuBhB,OAtBAy1H,EAAiB,IAAIrvF,GAAS,OAAQ,GACtCqvF,EAAe/kH,KAAK,CAClB,gBAAmB,QACnB,MAASrD,EAAKqD,KAAK,SACnB,kBAAmB1Q,EACnB,MAAS,iCAAmCA,IAE9Cu1H,GAA6BxzH,EAAQsL,EAAMooH,GAC3CC,EAAc,IAAItvF,GAASpmC,EAAM,GACjC01H,EAAYhlH,KAAK,CACfgjB,IAAKrmB,EAAKqD,KAAK,OACfklH,gBAAiBvoH,EAAKqD,KAAK,mBAC3BnF,MAAO8B,EAAKqD,KAAK,SACjBywC,MAAO9zC,EAAKqD,KAAK,SACjByjB,MAAO9mB,EAAKqD,KAAK,SACjB0jB,OAAQ/mB,EAAKqD,KAAK,UAClBmlH,YAAa,MAEfF,EAAW,IAAIvvF,GAAS,OAAQ,GAChCuvF,EAASjlH,KAAK,QAAS,YACvB+kH,EAAe5kH,OAAO6kH,GACtBD,EAAe5kH,OAAO8kH,GACfF,GAELF,GAA+B,SAAUxzH,EAAQ+zH,EAAYz5D,GAC/D,IAAI84D,EACA3zE,EACAu0E,EACAC,EACAC,EACJF,EAAUD,EAAW3sH,WACrB6sH,EAAKD,EAAQjxH,OACb,MAAOkxH,IACLb,EAAWY,EAAQC,GAAIh2H,KACvBwhD,EAAYu0E,EAAQC,GAAI50H,MACP,UAAb+zH,GAAqC,WAAbA,GAAsC,UAAbA,IAClC,SAAbA,GAAoC,QAAbA,IACzB3zE,EAAYz/C,EAAO4jD,WAAWnE,EAAW2zE,IAE3C94D,EAAW3rD,KAAK,cAAgBykH,EAAU3zE,IAG9Cy0E,EAAYH,EAAWx8G,YAAcw8G,EAAWx8G,WAAWlY,MACvD60H,IACF55D,EAAW3rD,KAAK,gBAAiBuX,OAAOmtG,GAASH,SAASlzH,EAAQk0H,KAClE55D,EAAW/iD,WAAa,OAGxB48G,GAAqB,SAAU7oH,GACjC,MAAOA,EAAOA,EAAKvH,OACjB,GAAIuH,EAAKqD,KAAK,wBACZ,OAAO,EAGX,OAAO,GAELylH,GAAuB,SAAUp0H,GACnC,OAAO,SAAU6S,GACf,IACIvH,EACAgjH,EAFAjrH,EAAIwP,EAAM9P,OAGd,MAAOM,IACLiI,EAAOuH,EAAMxP,GACRiI,EAAKvH,SAGNuH,EAAKvH,OAAO4K,KAAK,qBAGH,WAAdrD,EAAKrN,OACPqwH,EAAcT,EAAYF,oBAAoB9sH,EAASssH,WAAWntH,GAASsL,EAAKqD,KAAK,QAChF2/G,MAIHA,IACEA,EAAYl8F,OACd9mB,EAAKqD,KAAK,QAAS2/G,EAAYl8F,MAAMnwB,YAEnCqsH,EAAYj8F,QACd/mB,EAAKqD,KAAK,SAAU2/G,EAAYj8F,OAAOpwB,aAGzB,WAAdqJ,EAAKrN,MAAqB4C,EAASysH,cAActtH,IAAWF,EAASu0H,QAClEF,GAAmB7oH,IACtBA,EAAKzJ,QAAQ4xH,GAAwBzzH,EAAQsL,IAG1C6oH,GAAmB7oH,IACtBA,EAAKzJ,QAAQyxH,GAAsBtzH,EAAQsL,QAMjDgpH,GAAQ,CACVb,wBAAyBA,GACzBH,sBAAuBA,GACvBc,qBAAsBA,IAGpB/lH,GAAQ,SAAUrO,GACpBA,EAAOsO,GAAG,WAAW,WACnB,IAAIimH,EAAkBv0H,EAAOqhD,OAAOmzE,qBACpCzzH,EAASyN,KAAK,4BAA4BxU,MAAM,MAAM,SAAUiE,GAC9Ds2H,EAAgBt2H,GAAQ,IAAI24C,OAAO,KAAO34C,EAAO,SAAU,SAE7D,IAAIw2H,EAAYz0H,EAAOqhD,OAAOqzE,eAC9B3zH,EAASyN,KAAK,2DAA2DxU,MAAM,MAAM,SAAUiE,GAC7Fw2H,EAAUx2H,GAAQ,MAEpB+B,EAAO4mD,OAAOC,cAAc,yCAA0CytE,GAAMF,qBAAqBp0H,IACjGA,EAAO8mD,WAAWqiB,mBAAmB,mBAAmB,SAAUt2D,EAAO5U,GACvE,IACIqN,EACAqpH,EACAV,EACAD,EACAE,EACAv1C,EACAi2C,EACA3wH,EARAZ,EAAIwP,EAAM9P,OASd,MAAOM,IAEL,GADAiI,EAAOuH,EAAMxP,GACRiI,EAAKvH,OAAV,CAGA6wH,EAActpH,EAAKqD,KAAK1Q,GACxB02H,EAAU,IAAItwF,GAASuwF,EAAa,GAChB,UAAhBA,GAA2C,WAAhBA,IAC7B3wH,EAAYqH,EAAKqD,KAAK,SAClB1K,IAA0D,IAA7CA,EAAU4D,QAAQ,sBACjC8sH,EAAQhmH,KAAK,CACXyjB,MAAO9mB,EAAKiM,WAAW5I,KAAK,SAC5B0jB,OAAQ/mB,EAAKiM,WAAW5I,KAAK,YAG/BgmH,EAAQhmH,KAAK,CACXyjB,MAAO9mB,EAAKqD,KAAK,SACjB0jB,OAAQ/mB,EAAKqD,KAAK,aAIxBgmH,EAAQhmH,KAAK,CAAEnF,MAAO8B,EAAKqD,KAAK,WAChCqlH,EAAU1oH,EAAKlE,WACf6sH,EAAKD,EAAQjxH,OACb,MAAOkxH,IAAM,CACX,IAAIb,EAAWY,EAAQC,GAAIh2H,KACa,IAApCm1H,EAASvrH,QAAQ,gBACnB8sH,EAAQhmH,KAAKykH,EAAS9pG,OAAO,IAAK0qG,EAAQC,GAAI50H,OAG9B,WAAhBu1H,GACFD,EAAQhmH,KAAK,OAAQ,mBAEvBulH,EAAY5oH,EAAKqD,KAAK,iBAClBulH,IACFv1C,EAAY,IAAIt6C,GAAS,QAAS,GAClCs6C,EAAUpc,KAAM,EAChBoc,EAAUt/E,MAAQg0H,GAASH,SAASlzH,EAAQomB,SAAS8tG,IACrDS,EAAQ7lH,OAAO6vE,IAEjBrzE,EAAKzJ,QAAQ8yH,UAInB30H,EAAOsO,GAAG,cAAc,WACtBtO,EAAOgM,EAAE,2BAA2BwC,MAAK,SAAUrI,EAAOyB,GACxD,IAAI8G,EAAO1O,EAAOgM,EAAEpE,GAC2B,IAA3C8G,EAAKO,KAAK,gBAAiBrH,GAAK7E,QAClC2L,EAAKI,OAAO,yCAKhBO,GAAgB,CAAEhB,MAAOA,IAEzB0yD,GAAU,SAAU/gE,GACtBA,EAAOsO,GAAG,eAAe,SAAUR,GACjC,IAAI7P,EACsB,IAAtB6P,EAAE6C,OAAOoZ,WAAmB9rB,EAAO6P,EAAE6C,OAAO6G,aAAa,sBAC3D1J,EAAE7P,KAAOA,OAIXwkE,GAAc,CAAEp0D,MAAO0yD,IAEvB2X,GAAU,SAAU14E,GACtBA,EAAOsO,GAAG,eAAe,WACvB,IAAIumH,EAAe70H,EAAOuL,UAAUC,UAChCqpH,GAAgB70H,EAAO4L,IAAIoG,SAAS6iH,EAAc,uBAChD70H,EAAO4L,IAAImzC,UAAU81E,EAAc,sBACrCA,EAAav+G,aAAa,oBAAqB,QAIrDtW,EAAOsO,GAAG,kBAAkB,SAAUR,GACpC,IAAIgnH,EAAahnH,EAAE6C,OAAO6G,aAAa,mBACpB,UAAfs9G,GAAyC,WAAfA,GAC5BhnH,EAAE44B,oBAGN1mC,EAAOsO,GAAG,iBAAiB,SAAUR,GACnC,IACIlF,EADA+H,EAAS7C,EAAE6C,OAEXA,EAAO6G,aAAa,qBACtB5O,EAAO+H,EAAO6G,aAAa,iBACvB5O,IACFA,EAAOwd,SAASxd,GAChB+H,EAAO2F,aAAa,gBAAiB4P,OAAO6pG,EAAWN,WAAW7mH,EAAM,CACtEwpB,MAAOtkB,EAAEskB,MACTC,OAAQvkB,EAAEukB,iBAMhB+5B,GAAY,CAAE/9C,MAAOqqE,IAErBvoE,GAAa,SAAUnQ,GACzBA,EAAOoQ,UAAU,QAAS,CACxBwD,QAAS,oBACTvD,IAAK,WACL02C,cAAe,CACb,uBACA,wBACA,+BAGJ/mD,EAAOsQ,YAAY,QAAS,CAC1BC,KAAM,QACNjL,KAAM,QACN+K,IAAK,WACLyD,QAAS,SACTkzC,kBAAkB,KAGlBx2C,GAAU,CAAEzC,SAAUoC,IAU1B,SAASM,MARThX,EAAOsN,IAAI,SAAS,SAAU/G,GAM5B,OALAoO,GAASL,SAAS/N,GAClBwQ,GAAQzC,SAAS/N,GACjByiE,GAAYp0D,MAAMrO,GAClBqP,GAAchB,MAAMrO,GACpBosD,GAAU/9C,MAAMrO,GACT4oB,GAAItpB,IAAIU,OAhxCT,IADZ,I,wBCIE,SAAUvG,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;IAAIye,EACI,2FACJC,EACI,oFACJL,EACI,yKACJD,EAAc,CACV,SACA,SACA,SACA,QACA,QACA,SACA,SACA,SACA,SACA,QACA,QACA,SAGJ83B,EAAKl2C,EAAOE,aAAa,KAAM,CAC/BC,OAAQ,uFAAuFC,MAC3F,KAEJC,YACI,iEAAiED,MAC7D,KAERie,YAAaA,EACbG,iBAAkBH,EAClBI,kBAAmBA,EACnBC,uBAAwBA,EACxBN,YAAaA,EACbO,gBAAiBP,EACjBQ,iBAAkBR,EAClB9d,SAAU,sDAAsDF,MAAM,KACtEG,cAAe,qCAAqCH,MAAM,KAC1DI,YAAa,uBAAuBJ,MAAM,KAC1Cye,oBAAoB,EACpBpe,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,0BAEVC,SAAU,CACNC,QAAS,qBACTC,QAAS,gBACTC,SAAU,cACVC,QAAS,cACTC,SAAU,sBACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,UACRC,KAAM,YACNC,EAAG,oBACHC,GAAI,cACJC,EAAG,aACHC,GAAI,aACJC,EAAG,YACHC,GAAI,YACJC,EAAG,UACHC,GAAI,WACJ6E,EAAG,cACHiY,GAAI,cACJ7c,EAAG,UACHC,GAAI,UACJC,EAAG,QACHC,GAAI,UAERgB,uBAAwB,eACxBC,QAAS,SAAUI,EAAQ2B,GACvB,OAAQA,GAIJ,IAAK,IACD,OAAO3B,GAAqB,IAAXA,EAAe,KAAO,IAG3C,QACA,IAAK,IACL,IAAK,IACL,IAAK,MACL,IAAK,IACD,OAAOA,GAAqB,IAAXA,EAAe,KAAO,KAG3C,IAAK,IACL,IAAK,IACD,OAAOA,GAAqB,IAAXA,EAAe,KAAO,OAGnDpB,KAAM,CACFC,IAAK,EACLC,IAAK,KAIb,OAAO0zC,M,sBCpHX,YACc,WACV,aAEA,IAAIr2C,EAASiG,QAAQC,KAAKC,MAAMC,QAAQ,yBAEpCk1H,EAAY,SAAUzyH,GACxB,MAAO,8BAA8B0B,KAAK1B,IAExC0yH,EAAQ,SAAUh1H,GACpB,IAAI60H,EAAe70H,EAAOuL,UAAUC,UAChCypH,EAAoC,MAAzBJ,EAAa9jH,SAAkE,KAA/C/Q,EAAO4L,IAAImzC,UAAU81E,EAAc,QAClF,OAAOI,EAAWJ,EAAavyH,IAAMuyH,EAAa52H,KAAO,IAEvD0E,EAAS,SAAU3C,EAAQsC,GAC7B,IAAIuyH,EAAe70H,EAAOuL,UAAUC,UAChCypH,EAAoC,MAAzBJ,EAAa9jH,SAAkE,KAA/C/Q,EAAO4L,IAAImzC,UAAU81E,EAAc,QAC9EI,GACFJ,EAAa5lF,gBAAgB,QAC7B4lF,EAAavyH,GAAKA,EAClBtC,EAAO0L,YAAY3E,QAEnB/G,EAAOwU,QACPxU,EAAOuL,UAAUuhB,UAAS,GAC1B9sB,EAAOyW,YAAY,oBAAoB,EAAOzW,EAAO4L,IAAIytE,WAAW,IAAK,CAAE/2E,GAAIA,OAG/E4yH,EAAS,CACXH,UAAWA,EACXC,MAAOA,EACPryH,OAAQA,GAGNwyH,EAAe,SAAUn1H,EAAQo1H,GACnC,OAAKF,EAAOH,UAAUK,IAIpBF,EAAOvyH,OAAO3C,EAAQo1H,IACf,IAJPp1H,EAAOiN,cAAcqgC,MAAM,2GACpB,IAMP3gC,EAAO,SAAU3M,GACnB,IAAIq1H,EAAYH,EAAOF,MAAMh1H,GAC7BA,EAAOiN,cAAcN,KAAK,CACxBjE,MAAO,SACP2E,KAAM,CACJ5L,KAAM,UACNxD,KAAM,KACN6nB,KAAM,GACNxY,MAAO,KACPjO,MAAOg2H,GAETv9E,SAAU,SAAUhqC,GAClB,IAAIsnH,EAAQtnH,EAAE/I,KAAKzC,GACf6yH,EAAan1H,EAAQo1H,IACvBtnH,EAAE44B,qBAKNh6B,EAAS,CAAEC,KAAMA,GAEjBoB,EAAW,SAAU/N,GACvBA,EAAOgO,WAAW,aAAa,WAC7BtB,EAAOC,KAAK3M,OAGZoO,EAAW,CAAEL,SAAUA,GAEvBunH,EAAe,SAAUhqH,GAC3B,OAAQA,EAAKqD,KAAK,UAAYrD,EAAKqD,KAAK,OAASrD,EAAKqD,KAAK,WAAarD,EAAKiM,YAE3Eg+G,EAAqB,SAAU3xF,GACjC,OAAO,SAAU/wB,GACf,IAAK,IAAIxP,EAAI,EAAGA,EAAIwP,EAAM9P,OAAQM,IAC5BiyH,EAAaziH,EAAMxP,KACrBwP,EAAMxP,GAAGsL,KAAK,kBAAmBi1B,KAKrCv1B,EAAQ,SAAUrO,GACpBA,EAAOsO,GAAG,WAAW,WACnBtO,EAAO4mD,OAAOC,cAAc,IAAK0uE,EAAmB,UACpDv1H,EAAO8mD,WAAWD,cAAc,IAAK0uE,EAAmB,WAGxDlmH,EAAgB,CAAEhB,MAAOA,GAEzB8B,EAAa,SAAUnQ,GACzBA,EAAOoQ,UAAU,SAAU,CACzBG,KAAM,SACNqD,QAAS,SACTvD,IAAK,YACL02C,cAAe,kBAEjB/mD,EAAOsQ,YAAY,SAAU,CAC3BC,KAAM,SACNjL,KAAM,SACNwO,QAAS,SACTzD,IAAK,eAGLG,EAAU,CAAEzC,SAAUoC,GAO1B,SAASM,KALThX,EAAOsN,IAAI,UAAU,SAAU/G,GAC7BqP,EAAchB,MAAMrO,GACpBoO,EAASL,SAAS/N,GAClBwQ,EAAQzC,SAAS/N,OA5GV,IADb,I,qBCMA,EAAQ,S,qBCAR,EAAQ,S,qBCAR,EAAQ,S,sBCEN,SAAUvG,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;IAAIioB,EAAa,SAAUzkB,GACnB,OAAa,IAANA,EACD,EACM,IAANA,EACA,EACM,IAANA,EACA,EACAA,EAAI,KAAO,GAAKA,EAAI,KAAO,GAC3B,EACAA,EAAI,KAAO,GACX,EACA,GAEV0kB,EAAU,CACNxmB,EAAG,CACC,eACA,cACA,CAAC,UAAW,WACZ,UACA,WACA,YAEJE,EAAG,CACC,eACA,cACA,CAAC,UAAW,WACZ,WACA,WACA,YAEJE,EAAG,CACC,cACA,aACA,CAAC,SAAU,UACX,WACA,UACA,WAEJE,EAAG,CACC,aACA,WACA,CAAC,QAAS,SACV,UACA,WACA,UAEJE,EAAG,CACC,aACA,WACA,CAAC,QAAS,SACV,UACA,UACA,UAEJE,EAAG,CACC,aACA,WACA,CAAC,QAAS,SACV,WACA,WACA,WAGR+lB,EAAY,SAAUC,GAClB,OAAO,SAAU1kB,EAAQC,EAAe6L,EAAQ3L,GAC5C,IAAIse,EAAI8F,EAAWvkB,GACf0I,EAAM8b,EAAQE,GAAGH,EAAWvkB,IAIhC,OAHU,IAANye,IACA/V,EAAMA,EAAIzI,EAAgB,EAAI,IAE3ByI,EAAInE,QAAQ,MAAOvE,KAGlCvD,EAAS,CACL,QACA,QACA,OACA,QACA,MACA,OACA,SACA,MACA,SACA,SACA,SACA,UAGJy7H,EAAO57H,EAAOE,aAAa,QAAS,CACpCC,OAAQA,EACRE,YAAaF,EACbG,SAAU,sDAAsDF,MAAM,KACtEG,cAAe,wCAAwCH,MAAM,KAC7DI,YAAa,gBAAgBJ,MAAM,KACnCye,oBAAoB,EACpBpe,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,0BAEV4B,cAAe,MACfwC,KAAM,SAAUP,GACZ,MAAO,MAAQA,GAEnB9B,SAAU,SAAUD,EAAME,EAAQC,GAC9B,OAAIH,EAAO,GACA,IAEA,KAGf7B,SAAU,CACNC,QAAS,wBACTC,QAAS,uBACTC,SAAU,uBACVC,QAAS,sBACTC,SAAU,uBACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,SACRC,KAAM,SACNC,EAAGymB,EAAU,KACbxmB,GAAIwmB,EAAU,KACdvmB,EAAGumB,EAAU,KACbtmB,GAAIsmB,EAAU,KACdrmB,EAAGqmB,EAAU,KACbpmB,GAAIomB,EAAU,KACdnmB,EAAGmmB,EAAU,KACblmB,GAAIkmB,EAAU,KACdjmB,EAAGimB,EAAU,KACbhmB,GAAIgmB,EAAU,KACd/lB,EAAG+lB,EAAU,KACb9lB,GAAI8lB,EAAU,MAElBI,WAAY,SAAU/Y,GAClB,OAAOA,EAAOvH,QAAQ,KAAM,MAEhC3F,KAAM,CACFC,IAAK,EACLC,IAAK,KAIb,OAAOo5H,M,oBCpKX,YACe,WACX,aAEA,IAAI/7H,EAASiG,QAAQC,KAAKC,MAAMC,QAAQ,yBAEpCC,EAAWJ,QAAQC,KAAKC,MAAMC,QAAQ,sBAEtC41H,EAAkB,SAAUz1H,EAAQy8D,EAAUiM,GAChD,IAAIr4D,EAAmB,OAAbosD,EAAoB,sBAAwB,oBACtDz8D,EAAOyW,YAAYpG,GAAK,GAAsB,IAAfq4D,EAAuB,KAAO,CAAE,kBAAmBA,KAEhF10B,EAAU,CAAEyhF,gBAAiBA,GAE7B1nH,EAAW,SAAU/N,GACvBA,EAAOgO,WAAW,2BAA2B,SAAUgpC,EAAI33C,GACzD20C,EAAQyhF,gBAAgBz1H,EAAQ,KAAMX,EAAM,uBAE9CW,EAAOgO,WAAW,yBAAyB,SAAUgpC,EAAI33C,GACvD20C,EAAQyhF,gBAAgBz1H,EAAQ,KAAMX,EAAM,wBAG5C+O,EAAW,CAAEL,SAAUA,GAEvB2nH,EAAkB,SAAU11H,GAC9B,IAAI2mB,EAAS3mB,EAAOW,SAAS,wBAAyB,uEACtD,OAAOgmB,EAASA,EAAO3sB,MAAM,QAAU,IAErC27H,EAAkB,SAAU31H,GAC9B,IAAI2mB,EAAS3mB,EAAOW,SAAS,wBAAyB,8BACtD,OAAOgmB,EAASA,EAAO3sB,MAAM,QAAU,IAErC6G,EAAW,CACb60H,gBAAiBA,EACjBC,gBAAiBA,GAGfptE,EAAgB,SAAUvoD,EAAQ4H,GACpC,OAAO5H,EAAOgM,EAAE2H,SAAS3T,EAAO0T,UAAW9L,IAEzCggD,EAAkB,SAAUt8C,GAC9B,OAAOA,GAAQ,YAAYtH,KAAKsH,EAAKnH,WAEnCqjD,EAAa,SAAUxnD,GACzB,OAAO,SAAUsL,GACf,OAAOA,GAAQ,eAAetH,KAAKsH,EAAKnH,WAAaokD,EAAcvoD,EAAQsL,KAG3EsqH,EAAuB,SAAU51H,GACnC,IAAI61H,EAAU71H,EAAO4L,IAAIoL,UAAUhX,EAAOuL,UAAUC,UAAW,SAC/D,OAAOxL,EAAO4L,IAAIutC,SAAS08E,EAAS,kBAAoB,IAEtDC,EAAY,CACdluE,gBAAiBA,EACjBJ,WAAYA,EACZouE,qBAAsBA,GAGpBG,EAAmB,SAAUrtD,GAC/B,OAAOA,EAAW7mE,QAAQ,MAAO,KAAKA,QAAQ,SAAS,SAAU0sB,GAC/D,OAAOA,EAAIquC,kBAGXo5D,EAAc,SAAUrvG,GAC1B,OAAO7mB,EAAS8B,IAAI+kB,GAAQ,SAAU+hD,GACpC,IAAIpjE,EAAOywH,EAAiBrtD,GACxB3jE,EAAsB,YAAf2jE,EAA2B,GAAKA,EAC3C,MAAO,CACLpjE,KAAMA,EACNP,KAAMA,OAIRkxH,EAAa,CAAED,YAAaA,GAE5Bh1D,EAAY,SAAU9U,EAAMj+B,GAC9B,IAAK,IAAI9nB,EAAQ,EAAGA,EAAQ+lD,EAAKnpD,OAAQoD,IAAS,CAChD,IAAIvC,EAAUsoD,EAAK/lD,GACnB,GAAI8nB,EAAUrqB,GACZ,OAAOuC,EAGX,OAAQ,GAEN86D,EAAY,SAAUjhE,EAAQy8D,GAChC,OAAO,SAAU3uD,GACf,IAAIuF,EAAOvF,EAAEwF,QACbtT,EAAOsO,GAAG,cAAc,SAAUR,GAChC,IAAIozD,EAAiBF,EAAUlzD,EAAEqzD,QAAS20D,EAAUluE,iBAChDuZ,GAA8B,IAApBD,EAAwBpzD,EAAEqzD,QAAQ/6D,MAAM,EAAG86D,GAAkBpzD,EAAEqzD,QACzEnV,EAAQlsD,EAAS0rB,KAAK21C,EAAS20D,EAAUtuE,WAAWxnD,IACxDqT,EAAK+tD,OAAOpV,EAAMjpD,OAAS,GAAKipD,EAAM,GAAG7nD,WAAas4D,QAIxDmlB,EAAkB,SAAU5hF,GAC9B,OAAO,SAAU8N,GACf,IAAIooH,EAAgBJ,EAAUF,qBAAqB51H,GACnD8N,EAAEwF,QAAQgM,QAAQ9Q,MAAK,SAAU6E,GAC/BA,EAAK+tD,OAAO/tD,EAAKpT,SAAS8E,OAASmxH,QAIrCC,EAAiB,SAAUn2H,EAAQsC,EAAIsR,EAASvD,EAAKlM,EAAUwiB,GACjE3mB,EAAOoQ,UAAU9N,EAAI,CACnB8+D,QAAQ,EACR3/D,KAAM,cACNmS,QAASA,EACTimC,KAAMo8E,EAAWD,YAAYrvG,GAC7B9S,aAAcotD,EAAUjhE,EAAQmE,GAChCg+E,OAAQP,EAAgB5hF,GACxB63C,SAAU,SAAU/pC,GAClBkmC,EAAQyhF,gBAAgBz1H,EAAQmE,EAAU2J,EAAEwF,QAAQrT,SAAS8E,OAE/D+S,QAAS,WACP9X,EAAOyW,YAAYpG,OAIrBD,EAAY,SAAUpQ,EAAQsC,EAAIsR,EAASvD,EAAKlM,EAAUwiB,GAC5D3mB,EAAOoQ,UAAU9N,EAAI,CACnB8+D,QAAQ,EACR3/D,KAAM,SACNmS,QAASA,EACTC,aAAcotD,EAAUjhE,EAAQmE,GAChC2T,QAAS,WACP9X,EAAOyW,YAAYpG,OAIrB+lH,EAAa,SAAUp2H,EAAQsC,EAAIsR,EAASvD,EAAKlM,EAAUwiB,GACzDA,EAAO5jB,OAAS,EAClBozH,EAAen2H,EAAQsC,EAAIsR,EAASvD,EAAKlM,EAAUwiB,GAEnDvW,EAAUpQ,EAAQsC,EAAIsR,EAASvD,EAAKlM,IAGpCgM,EAAa,SAAUnQ,GACzBo2H,EAAWp2H,EAAQ,UAAW,gBAAiB,oBAAqB,KAAMa,EAAS60H,gBAAgB11H,IACnGo2H,EAAWp2H,EAAQ,UAAW,cAAe,sBAAuB,KAAMa,EAAS80H,gBAAgB31H,KAEjGwQ,EAAU,CAAEzC,SAAUoC,GAY1B,SAASM,KAVThX,EAAOsN,IAAI,WAAW,SAAU/G,GAC9B,IAAIqhE,EAAY,SAAUrhE,EAAQshE,GAChC,IAAIh+D,EAAUtD,EAAOC,SAASqD,QAAUtD,EAAOC,SAASqD,QAAU,GAClE,OAA4D,IAArDxD,EAASmyC,QAAQ3uC,EAAQtJ,MAAM,QAASsnE,IAE7CD,EAAUrhE,EAAQ,WACpBwQ,EAAQzC,SAAS/N,GACjBoO,EAASL,SAAS/N,QArJZ,IADd,I,qBCMA,EAAQ,S,sBCFN,SAAUvG,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;IAAIy8H,EAAKz8H,EAAOE,aAAa,KAAM,CAC/BC,OAAQ,8IAA8IC,MAClJ,KAEJC,YAAa,iDAAiDD,MAAM,KACpEE,SAAU,+CAA+CF,MAAM,KAC/DG,cAAe,8BAA8BH,MAAM,KACnDI,YAAa,uBAAuBJ,MAAM,KAC1CK,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,2BACJC,IAAK,wCACLC,KAAM,8CAEVC,SAAU,CACNC,QAAS,eACTC,QAAS,iBACTC,SAAU,qBACVC,QAAS,iBACTC,SAAU,yBACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,UACRC,KAAM,aACNC,EAAG,kBACHC,GAAI,aACJC,EAAG,eACHC,GAAI,YACJC,EAAG,aACHC,GAAI,UACJC,EAAG,aACHC,GAAI,UACJC,EAAG,aACHC,GAAI,UACJC,EAAG,YACHC,GAAI,UAERC,KAAM,CACFC,IAAK,EACLC,IAAK,KAIb,OAAOi6H,M,sBCvDT,SAAU58H,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;SAASif,EAAoBvb,EAAQC,EAAeC,EAAKC,GACrD,IAAIwW,EAAS,CACT3Y,EAAG,CAAC,kBAAmB,cACvBC,GAAI,CAAC+B,EAAS,aAAcA,EAAS,UACrC9B,EAAG,CAAC,aAAc,YAClBC,GAAI,CAAC6B,EAAS,YAAaA,EAAS,WACpC5B,EAAG,CAAC,WAAY,SAChBC,GAAI,CAAC2B,EAAS,UAAWA,EAAS,SAClC1B,EAAG,CAAC,YAAa,UACjBC,GAAI,CAACyB,EAAS,WAAYA,EAAS,QACnCxB,EAAG,CAAC,gBAAiB,aACrBC,GAAI,CAACuB,EAAS,cAAeA,EAAS,WACtCtB,EAAG,CAAC,aAAc,WAClBC,GAAI,CAACqB,EAAS,YAAaA,EAAS,YAExC,OAAOG,EAAWwW,EAAOzW,GAAK,GAAKyW,EAAOzW,GAAK,GAGnD,IAAI84H,EAAU18H,EAAOE,aAAa,WAAY,CAC1CC,OAAQ,CACJgf,WACI,wFAAwF/e,MACpF,KAERia,OAAQ,mJAAmJja,MACvJ,KAEJgf,SAAU,mBAEd/e,YACI,4EAA4ED,MACxE,KAERsC,kBAAkB,EAClBpC,SAAU,qDAAqDF,MAAM,KACrEG,cAAe,4CAA4CH,MAAM,KACjEI,YAAa,wBAAwBJ,MAAM,KAC3Cye,oBAAoB,EACpBpe,eAAgB,CACZC,GAAI,kBACJC,IAAK,qBACLC,EAAG,aACHC,GAAI,cACJC,IAAK,8BACLC,KAAM,uCACNmE,KAAM,oCAEVlE,SAAU,CACNC,QAAS,WACTC,QAAS,eACTC,SAAU,qBACVC,QAAS,WACTC,SAAU,qBACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,KACRC,KAAM,UACNC,EAAGud,EACHtd,GAAIsd,EACJrd,EAAGqd,EACHpd,GAAIod,EACJnd,EAAGmd,EACHld,GAAIkd,EACJjd,EAAGid,EACHhd,GAAIgd,EACJ/c,EAAG+c,EACH9c,GAAI8c,EACJ7c,EAAG6c,EACH5c,GAAI4c,GAER5b,uBAAwB,eACxBC,QAAS,SAAUI,EAAQ2B,GACvB,OAAQA,GAEJ,IAAK,IACD,OAAO3B,EAAS,MACpB,QACA,IAAK,IACL,IAAK,IACL,IAAK,MACL,IAAK,IACL,IAAK,IACL,IAAK,IACD,OAAOA,IAGnBpB,KAAM,CACFC,IAAK,EACLC,IAAK,GAETG,cAAe,4BACfC,aAAc,SAAUC,EAAMC,GAI1B,OAHa,KAATD,IACAA,EAAO,GAEM,SAAbC,EACOD,EAAO,EAAIA,EAAOA,EAAO,GACZ,WAAbC,EACAD,EACa,YAAbC,EACAD,EAAO,GAAKA,EAAOA,EAAO,GACb,UAAbC,EACAD,EAAO,QADX,GAIXC,SAAU,SAAUD,EAAME,EAAQC,GAC9B,OAAIH,EAAO,EACA,OACAA,EAAO,GACP,SACAA,EAAO,GACP,UACAA,EAAO,GACP,QAEA,UAKnB,OAAO65H,M,sBCjIT,SAAU78H,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;SAASuD,EAAO+d,EAAMkH,GAClB,IAAIC,EAAQnH,EAAKlhB,MAAM,KACvB,OAAOooB,EAAM,KAAO,GAAKA,EAAM,MAAQ,GACjCC,EAAM,GACND,EAAM,IAAM,GAAKA,EAAM,IAAM,IAAMA,EAAM,IAAM,IAAMA,EAAM,KAAO,IAClEC,EAAM,GACNA,EAAM,GAEhB,SAASC,EAAuBhlB,EAAQC,EAAeC,GACnD,IAAIyW,EAAS,CACT1Y,GAAIgC,EAAgB,yBAA2B,yBAC/C9B,GAAI8B,EAAgB,yBAA2B,yBAC/C5B,GAAI4B,EAAgB,sBAAwB,sBAC5C1B,GAAI,gBACJE,GAAI,wBACJE,GAAI,kBAER,MAAY,MAARuB,EACOD,EAAgB,UAAY,UACpB,MAARC,EACAD,EAAgB,SAAW,SAE3BD,EAAS,IAAMH,EAAO8W,EAAOzW,IAAOF,GAGnD,SAASi5H,EAAoB/6H,EAAGyY,GAC5B,IAcIuiH,EAdAt8H,EAAW,CACPu8H,WACI,0DAA0Dz8H,MACtD,KAER08H,WACI,0DAA0D18H,MACtD,KAER28H,SACI,4DAA4D38H,MACxD,MAKhB,OAAU,IAANwB,EACOtB,EAAS,cACXkM,MAAM,EAAG,GACTyV,OAAO3hB,EAAS,cAAckM,MAAM,EAAG,IAE3C5K,GAILg7H,EAAW,qBAAqBxyH,KAAKiQ,GAC/B,aACA,sCAAsCjQ,KAAKiQ,GAC3C,WACA,aACC/Z,EAASs8H,GAAUh7H,EAAE4f,QARjBlhB,EAAS,cAUxB,SAAS08H,EAAqB5wH,GAC1B,OAAO,WACH,OAAOA,EAAM,KAAwB,KAAjBrM,KAAK+e,QAAiB,IAAM,IAAM,QAI9D,IAAIm+G,EAAKj9H,EAAOE,aAAa,KAAM,CAC/BC,OAAQ,CACJka,OAAQ,yFAAyFja,MAC7F,KAEJ+e,WACI,iGAAiG/e,MAC7F,MAGZC,YAAa,yDAAyDD,MAClE,KAEJE,SAAUq8H,EACVp8H,cAAe,uBAAuBH,MAAM,KAC5CI,YAAa,uBAAuBJ,MAAM,KAC1CK,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,iBACJC,IAAK,wBACLC,KAAM,+BAEVC,SAAU,CACNC,QAAS+7H,EAAqB,cAC9B97H,QAAS87H,EAAqB,YAC9B57H,QAAS47H,EAAqB,WAC9B77H,SAAU67H,EAAqB,cAC/B37H,SAAU,WACN,OAAQtB,KAAKyhB,OACT,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACD,OAAOw7G,EAAqB,oBAAoB10H,KAAKvI,MACzD,KAAK,EACL,KAAK,EACL,KAAK,EACD,OAAOi9H,EAAqB,qBAAqB10H,KAAKvI,QAGlEuB,SAAU,KAEdC,aAAc,CACVC,OAAQ,QACRC,KAAM,UACNC,EAAG,kBACHC,GAAI+mB,EACJ9mB,EAAG8mB,EACH7mB,GAAI6mB,EACJ5mB,EAAG,SACHC,GAAI2mB,EACJ1mB,EAAG,OACHC,GAAIymB,EACJxmB,EAAG,SACHC,GAAIumB,EACJtmB,EAAG,MACHC,GAAIqmB,GAGR/lB,cAAe,wBACfwC,KAAM,SAAUP,GACZ,MAAO,iBAAiBwF,KAAKxF,IAEjC9B,SAAU,SAAUD,EAAME,EAAQC,GAC9B,OAAIH,EAAO,EACA,OACAA,EAAO,GACP,QACAA,EAAO,GACP,MAEA,UAGfQ,uBAAwB,iBACxBC,QAAS,SAAUI,EAAQ2B,GACvB,OAAQA,GACJ,IAAK,IACL,IAAK,IACL,IAAK,MACL,IAAK,IACL,IAAK,IACD,OAAO3B,EAAS,KACpB,IAAK,IACD,OAAOA,EAAS,MACpB,QACI,OAAOA,IAGnBpB,KAAM,CACFC,IAAK,EACLC,IAAK,KAIb,OAAOy6H,M,sBC3KT,SAAUp9H,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;IAAIk9H,EAAKl9H,EAAOE,aAAa,KAAM,CAC/BC,OAAQ,6EAA6EC,MACjF,KAEJC,YACI,6EAA6ED,MACzE,KAERE,SAAU,sCAAsCF,MAAM,KACtDG,cAAe,oCAAoCH,MAAM,KACzDI,YAAa,mBAAmBJ,MAAM,KACtCye,oBAAoB,EACpBpe,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,6BAEV4B,cAAe,kBACfwC,KAAM,SAAUP,GACZ,MAAiB,WAAVA,GAEX9B,SAAU,SAAUD,EAAME,EAAQC,GAC9B,OAAIH,EAAO,GACA,WAEA,UAGf7B,SAAU,CACNC,QAAS,kBACTC,QAAS,mBACTC,SAAU,wBACVC,QAAS,qBACTC,SAAU,4BACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,SACRC,KAAM,WACNC,EAAG,mBACHC,GAAI,YACJC,EAAG,SACHC,GAAI,UACJC,EAAG,YACHC,GAAI,aACJC,EAAG,QACHC,GAAI,SACJC,EAAG,UACHC,GAAI,WACJC,EAAG,OACHC,GAAI,SAERgB,uBAAwB,eACxBC,QAAS,SAAUI,GACf,MAAO,MAAQA,KAIvB,OAAOw5H,M,oBC1EX,YACoB,WAChB,aAEA,IAAI33H,EAAO,SAAUC,GACnB,IAAIC,EAAQD,EACRE,EAAM,WACR,OAAOD,GAELE,EAAM,SAAUC,GAClBH,EAAQG,GAENC,EAAQ,WACV,OAAON,EAAKG,MAEd,MAAO,CACLA,IAAKA,EACLC,IAAKA,EACLE,MAAOA,IAIPhG,EAASiG,QAAQC,KAAKC,MAAMC,QAAQ,yBAEpCk3H,EAAmB,SAAU/2H,EAAQ4jC,GACvC5jC,EAAO8lC,KAAK,eAAgB,CAAElC,MAAOA,KAEnC+/B,EAAS,CAAEozD,iBAAkBA,GAE7BC,EAAqB,SAAUh3H,GACjC,OAAOA,EAAOW,SAAS,8BAA8B,IAEnDZ,EAAgB,SAAUC,GAC5B,OAAOA,EAAOC,SAASg3H,0BAErBp2H,EAAW,CACbm2H,mBAAoBA,EACpBj3H,cAAeA,GAGbD,EAAWJ,QAAQC,KAAKC,MAAMC,QAAQ,wBAEtCkB,EAAWrB,QAAQC,KAAKC,MAAMC,QAAQ,sBAEtCq3H,EAAQp3H,EAASU,IAAIuV,WACrBohH,EAAO,SAAU/qG,EAAKljB,GACxB,IAAIkuH,EAAer2H,EAAS0c,QAAQ2O,EAAIpc,qBAAqB,SACzDqnH,EAAmBt2H,EAASyqB,KAAK4rG,GAAc,SAAU9zG,GAC3D,OAAOA,EAAKhhB,KAAO40H,KAErB,GAAgC,IAA5BG,EAAiBt0H,OAAc,CACjC,IAAI2M,EAAU5P,EAASU,IAAIqP,OAAO,OAAQ,CACxCvN,GAAI40H,EACJpnH,IAAK,aACLC,KAAM7G,IAERkjB,EAAIpc,qBAAqB,QAAQ,GAAGC,YAAYP,KAGhDQ,EAAU,CAAEinH,KAAMA,GAElBG,EAAqB,SAAUt3H,EAAQuP,EAAWgoH,GACpD,IAAI3rH,EAAM5L,EAAO4L,IACb+D,EAAa9O,EAASd,cAAcC,GACxCkQ,EAAQinH,KAAKn3H,EAAOmP,SAAUQ,GAA0BJ,EAAY,yBACpE3D,EAAI4rH,YAAYx3H,EAAO0T,UAAW,oBAClC6jH,EAAah4H,KAAKg4H,EAAaj4H,OAC/BqkE,EAAOozD,iBAAiB/2H,EAAQu3H,EAAaj4H,QAE3Cm4H,EAAe,CAAEH,mBAAoBA,GAErCvpH,EAAW,SAAU/N,EAAQuP,EAAWgoH,GAC1Cv3H,EAAOgO,WAAW,mBAAmB,WACnCypH,EAAaH,mBAAmBt3H,EAAQuP,EAAWgoH,OAGnDnpH,EAAW,CAAEL,SAAUA,GAEvBM,EAAQ,SAAUrO,EAAQuP,EAAWgoH,GACvCv3H,EAAOsO,GAAG,sCAAsC,SAAUR,GACpDypH,EAAaj4H,OACfU,EAAO4L,IAAI4rH,YAAYx3H,EAAO0T,UAAW,mBAA+B,wBAAX5F,EAAErM,SAGnEzB,EAAOsO,GAAG,QAAQ,WACZzN,EAASm2H,mBAAmBh3H,IAC9By3H,EAAaH,mBAAmBt3H,EAAQuP,EAAWgoH,MAGvDv3H,EAAOsO,GAAG,UAAU,WAClBtO,EAAO4L,IAAIs+G,YAAYlqH,EAAO0T,UAAW,wBAGzCgkH,EAAW,CAAErpH,MAAOA,GAEpB06E,EAAoB,SAAU/oF,EAAQu3H,GACxC,OAAO,SAAUzpH,GACf,IAAIuF,EAAOvF,EAAEwF,QACbD,EAAK+tD,OAAOm2D,EAAaj4H,OACzBU,EAAOsO,GAAG,gBAAgB,SAAUR,GAClCuF,EAAK+tD,OAAOtzD,EAAE81B,YAIhBzzB,EAAa,SAAUnQ,EAAQu3H,GACjCv3H,EAAOoQ,UAAU,eAAgB,CAC/BgxD,QAAQ,EACR14D,MAAO,cACP2H,IAAK,kBACLwD,aAAck1E,EAAkB/oF,EAAQu3H,KAE1Cv3H,EAAOsQ,YAAY,eAAgB,CACjChL,KAAM,cACN+K,IAAK,kBACLwD,aAAck1E,EAAkB/oF,EAAQu3H,GACxC1+C,YAAY,EACZ/kE,QAAS,OACTkzC,kBAAkB,KAGlBx2C,EAAU,CAAEzC,SAAUoC,GAQ1B,SAASM,KANThX,EAAOsN,IAAI,gBAAgB,SAAU/G,EAAQuP,GAC3C,IAAIgoH,EAAep4H,GAAK,GACxBiP,EAASL,SAAS/N,EAAQuP,EAAWgoH,GACrC/mH,EAAQzC,SAAS/N,EAAQu3H,GACzBG,EAASrpH,MAAMrO,EAAQuP,EAAWgoH,OA7HrB,IADnB,I,sBCOE,SAAU99H,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;SAASif,EAAoBvb,EAAQC,EAAeC,EAAKC,GACrD,IAAIwW,EAAS,CACTzY,EAAG,CAAC,cAAe,gBACnBE,EAAG,CAAC,cAAe,gBACnBE,EAAG,CAAC,UAAW,aACfC,GAAI,CAACyB,EAAS,QAASA,EAAS,UAChCoD,EAAG,CAAC,aAAc,eAClB5E,EAAG,CAAC,YAAa,eACjBC,GAAI,CAACuB,EAAS,UAAWA,EAAS,YAClCtB,EAAG,CAAC,WAAY,cAChBC,GAAI,CAACqB,EAAS,SAAUA,EAAS,YAErC,OAAOC,EAAgB0W,EAAOzW,GAAK,GAAKyW,EAAOzW,GAAK,GAGxD,IAAIm6H,EAAO/9H,EAAOE,aAAa,QAAS,CACpCC,OAAQ,qFAAqFC,MACzF,KAEJC,YACI,6DAA6DD,MAAM,KACvEsC,kBAAkB,EAClBpC,SACI,8DAA8DF,MAC1D,KAERG,cAAe,8BAA8BH,MAAM,KACnDI,YAAa,uBAAuBJ,MAAM,KAC1Cye,oBAAoB,EACpBpe,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,eACJC,IAAK,qBACLC,KAAM,4BAEVC,SAAU,CACNC,QAAS,sBACTK,SAAU,IACVJ,QAAS,uBACTC,SAAU,qBACVC,QAAS,wBACTC,SAAU,gCAEdE,aAAc,CACVC,OAAQ,QACRC,KAAM,SACNC,EAAG,oBACHC,GAAI,cACJC,EAAGqd,EACHpd,GAAI,aACJC,EAAGmd,EACHld,GAAI,aACJC,EAAGid,EACHhd,GAAIgd,EACJnY,EAAGmY,EACHF,GAAI,YACJ7c,EAAG+c,EACH9c,GAAI8c,EACJ7c,EAAG6c,EACH5c,GAAI4c,GAER5b,uBAAwB,YACxBC,QAAS,MACThB,KAAM,CACFC,IAAK,EACLC,IAAK,KAIb,OAAOu7H,M,sBCjFT,SAAUl+H,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;SAASif,EAAoBvb,EAAQC,EAAeC,EAAKC,GACrD,IAAIwW,EAAS,CACTzY,EAAG,CAAC,cAAe,gBACnBE,EAAG,CAAC,cAAe,gBACnBE,EAAG,CAAC,UAAW,aACfC,GAAI,CAACyB,EAAS,QAASA,EAAS,UAChCoD,EAAG,CAAC,aAAc,eAClB5E,EAAG,CAAC,YAAa,eACjBC,GAAI,CAACuB,EAAS,UAAWA,EAAS,YAClCtB,EAAG,CAAC,WAAY,cAChBC,GAAI,CAACqB,EAAS,SAAUA,EAAS,YAErC,OAAOC,EAAgB0W,EAAOzW,GAAK,GAAKyW,EAAOzW,GAAK,GAGxD,IAAIo6H,EAAKh+H,EAAOE,aAAa,KAAM,CAC/BC,OAAQ,qFAAqFC,MACzF,KAEJC,YACI,6DAA6DD,MAAM,KACvEsC,kBAAkB,EAClBpC,SACI,8DAA8DF,MAC1D,KAERG,cAAe,8BAA8BH,MAAM,KACnDI,YAAa,uBAAuBJ,MAAM,KAC1Cye,oBAAoB,EACpBpe,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,eACJC,IAAK,qBACLC,KAAM,4BAEVC,SAAU,CACNC,QAAS,sBACTK,SAAU,IACVJ,QAAS,uBACTC,SAAU,qBACVC,QAAS,wBACTC,SAAU,gCAEdE,aAAc,CACVC,OAAQ,QACRC,KAAM,SACNC,EAAG,oBACHC,GAAI,cACJC,EAAGqd,EACHpd,GAAI,aACJC,EAAGmd,EACHld,GAAI,aACJC,EAAGid,EACHhd,GAAIgd,EACJnY,EAAGmY,EACHF,GAAI,YACJ7c,EAAG+c,EACH9c,GAAI8c,EACJ7c,EAAG6c,EACH5c,GAAI4c,GAER5b,uBAAwB,YACxBC,QAAS,MACThB,KAAM,CACFC,IAAK,EACLC,IAAK,KAIb,OAAOw7H,M,sBClFT,SAAUn+H,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;IAAIi+H,EAAUj+H,EAAOE,aAAa,WAAY,CAC1CC,OAAQ,wFAAwFC,MAC5F,KAEJC,YACI,wFAAwFD,MACpF,KAERE,SAAU,kDAAkDF,MAAM,KAClEG,cAAe,kDAAkDH,MAAM,KACvEI,YAAa,kDAAkDJ,MAAM,KACrEK,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,0BAEVC,SAAU,CACNC,QAAS,eACTC,QAAS,cACTC,SAAU,cACVC,QAAS,gBACTC,SAAU,cACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,iBACRC,KAAM,SACNC,EAAG,OACHC,GAAI,UACJC,EAAG,QACHC,GAAI,WACJC,EAAG,OACHC,GAAI,cACJC,EAAG,MACHC,GAAI,WACJC,EAAG,QACHC,GAAI,YACJC,EAAG,QACHC,GAAI,aAERC,KAAM,CACFC,IAAK,EACLC,IAAK,MAIb,OAAOy7H,M,sBCzDT,SAAUp+H,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;IAAIk+H,EAAKl+H,EAAOE,aAAa,KAAM,CAC/BC,OAAQ,yFAAyFC,MAC7F,KAEJC,YAAa,kDAAkDD,MAAM,KACrEE,SAAU,+CAA+CF,MAAM,KAC/DG,cAAe,8BAA8BH,MAAM,KACnDI,YAAa,uBAAuBJ,MAAM,KAC1CK,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,4BACLC,KAAM,mCAEV4B,cAAe,6BACfC,aAAc,SAAUC,EAAMC,GAI1B,OAHa,KAATD,IACAA,EAAO,GAEM,WAAbC,EACOD,EACa,WAAbC,EACAD,GAAQ,GAAKA,EAAOA,EAAO,GACd,WAAbC,GAAsC,UAAbA,EACzBD,EAAO,QADX,GAIXC,SAAU,SAAUgc,EAAO8B,EAAS5d,GAChC,OAAI8b,EAAQ,GACD,SACAA,EAAQ,GACR,SACAA,EAAQ,GACR,SAEA,SAGf9d,SAAU,CACNC,QAAS,2BACTC,QAAS,sBACTC,SAAU,kBACVC,QAAS,wBACTC,SAAU,4BACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,gBACRC,KAAM,uBACNC,EAAG,kBACHC,GAAI,WACJC,EAAG,kBACHC,GAAI,WACJC,EAAG,gBACHC,GAAI,SACJC,EAAG,WACHC,GAAI,YACJC,EAAG,UACHC,GAAI,WACJC,EAAG,SACHC,GAAI,WAERC,KAAM,CACFC,IAAK,EACLC,IAAK,KAIb,OAAO07H,M,sBChFT,SAAUr+H,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;IAAIme,EACI,8DAA8D/d,MAC1D,KAERC,EAAc,kDAAkDD,MAAM,KACtEge,EAAc,CACV,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,SAEJC,EACI,mLAEJ8/G,EAAOn+H,EAAOE,aAAa,QAAS,CACpCC,OAAQ,2FAA2FC,MAC/F,KAEJC,YAAa,SAAUuB,EAAGyY,GACtB,OAAKzY,EAEM,QAAQwI,KAAKiQ,GACbha,EAAYuB,EAAE2c,SAEdJ,EAAevc,EAAE2c,SAJjBJ,GAOfE,YAAaA,EACbG,iBAAkBH,EAClBI,kBACI,+FACJC,uBACI,0FACJN,YAAaA,EACbO,gBAAiBP,EACjBQ,iBAAkBR,EAClB9d,SAAU,uDAAuDF,MAAM,KACvEG,cAAe,qCAAqCH,MAAM,KAC1DI,YAAa,uBAAuBJ,MAAM,KAC1Cye,oBAAoB,EACpBpe,eAAgB,CACZC,GAAI,OACJC,IAAK,UACLC,EAAG,aACHC,GAAI,wBACJC,IAAK,6BACLC,KAAM,oCAEVC,SAAU,CACNC,QAAS,WACL,MAAO,aAAgC,IAAjBlB,KAAK+e,QAAgB,IAAM,IAAM,QAE3D5d,QAAS,WACL,MAAO,gBAAmC,IAAjBnB,KAAK+e,QAAgB,IAAM,IAAM,QAE9D3d,SAAU,WACN,MAAO,cAAiC,IAAjBpB,KAAK+e,QAAgB,IAAM,IAAM,QAE5D1d,QAAS,WACL,MAAO,cAAiC,IAAjBrB,KAAK+e,QAAgB,IAAM,IAAM,QAE5Dzd,SAAU,WACN,MACI,0BACkB,IAAjBtB,KAAK+e,QAAgB,IAAM,IAC5B,QAGRxd,SAAU,KAEdC,aAAc,CACVC,OAAQ,QACRC,KAAM,UACNC,EAAG,gBACHC,GAAI,cACJC,EAAG,YACHC,GAAI,aACJC,EAAG,WACHC,GAAI,WACJC,EAAG,SACHC,GAAI,UACJ6E,EAAG,aACHiY,GAAI,aACJ7c,EAAG,SACHC,GAAI,WACJC,EAAG,SACHC,GAAI,WAERgB,uBAAwB,WACxBC,QAAS,MACThB,KAAM,CACFC,IAAK,EACLC,IAAK,GAETuvF,YAAa,mBAGjB,OAAOosC,M,yCCtHX,IAAIpoG,EAAS,WAAa,IAAIC,EAAIj2B,KAASk2B,EAAGD,EAAIE,eAAmBC,EAAGH,EAAI5uB,MAAM+uB,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACA,EAAG,MAAM,CAACg8D,YAAY,mBAAmBisC,YAAY,CAAC,kBAAkB,QAAQ,MAAQ,OAAO,SAAW,QAAQ,MAAQ,OAAO,IAAM,OAAOxuH,MAAM,CAAGyuH,gBAAkB,OAASroG,EAAIsoG,iBAAmB,MAAS,CAACtoG,EAAIuoG,GAAG,KAAKpoG,EAAG,MAAM,CAACg8D,YAAY,mBAAmBisC,YAAY,CAAC,kBAAkB,QAAQ,MAAQ,OAAO,SAAW,QAAQ,MAAQ,OAAO,IAAM,OAAOxuH,MAAM,CAAGyuH,gBAAkB,OAASroG,EAAIsoG,iBAAmB,MAAS,CAACnoG,EAAG,MAAM,CAACg8D,YAAY,OAAOisC,YAAY,CAAC,MAAQ,SAAS,CAACjoG,EAAG,OAAO,CAACC,MAAM,CAAC,GAAK,OAAO,CAACD,EAAG,OAAO,CAACg8D,YAAY,cAAch8D,EAAG,MAAMA,EAAG,MAAMA,EAAG,MAAMA,EAAG,MAAMA,EAAG,MAAMA,EAAG,MAAMA,EAAG,MAAMA,EAAG,SAAS,KAAKA,EAAG,QAAQ,CAACg8D,YAAY,qBAAqB,CAACh8D,EAAG,OAAO,CAACA,EAAG,OAAO,CAACg8D,YAAY,6BAA6B/7D,MAAM,CAAC,GAAK,OAAO,CAACD,EAAG,aAAa,CAACA,EAAG,OAAO,CAACg8D,YAAY,gBAAgB/7D,MAAM,CAAC,GAAK,KAAK,GAAK,OAAO,CAACD,EAAG,KAAK,CAACg8D,YAAY,kDAAkDisC,YAAY,CAAC,YAAY,SAAS,CAACpoG,EAAIK,GAAG,IAAIL,EAAIM,GAAGN,EAAIwoG,SAASxnD,SAAS,OAAO7gD,EAAG,KAAK,CAACg8D,YAAY,kDAAkDisC,YAAY,CAAC,YAAY,SAAS,CAACpoG,EAAIK,GAAG,IAAIL,EAAIM,GAAGN,EAAIwoG,SAASC,OAAO,OAAOtoG,EAAG,KAAK,CAACg8D,YAAY,kDAAkDisC,YAAY,CAAC,YAAY,SAAS,CAACpoG,EAAIK,GAAG,IAAIL,EAAIM,GAAGN,EAAIwoG,SAASE,UAAU,OAAOvoG,EAAG,KAAK,CAACg8D,YAAY,kDAAkDisC,YAAY,CAAC,YAAY,SAAS,CAACjoG,EAAG,MAAMH,EAAIK,GAAG,aAAaL,EAAIM,GAAGN,EAAI2oG,QAAQ,OAAOxoG,EAAG,MAAMA,EAAG,OAAO,CAACA,EAAG,KAAK,CAACH,EAAIK,GAAG,yBAAyBF,EAAG,UAAU,CAACg8D,YAAY,OAAO/7D,MAAM,CAAC,GAAK,KAAK,YAAc,uBAAuBwoG,MAAM,CAACn5H,MAAOuwB,EAAY,SAAExsB,SAAS,SAAUq1H,GAAM7oG,EAAI8oG,SAASD,GAAK3sC,WAAW,eAAe,GAAG/7D,EAAG,OAAO,CAACA,EAAG,OAAO,CAACA,EAAG,MAAM,CAACg8D,YAAY,aAAa,CAACn8D,EAAIK,GAAG,QAAQF,EAAG,YAAY,CAACg8D,YAAY,uBAAuBisC,YAAY,CAAC,OAAS,oBAAoB,gBAAgB,QAAQhoG,MAAM,CAAC,YAAc,GAAG,SAAW,GAAG,KAAO,KAAKwoG,MAAM,CAACn5H,MAAOuwB,EAAW,QAAExsB,SAAS,SAAUq1H,GAAM7oG,EAAI+oG,QAAQF,GAAK3sC,WAAW,cAAc,IAAI,GAAG/7D,EAAG,OAAO,CAACA,EAAG,OAAO,CAACA,EAAG,IAAI,CAACg8D,YAAY,aAAa,CAACn8D,EAAIK,GAAG,QAAQF,EAAG,YAAY,CAACg8D,YAAY,uBAAuBisC,YAAY,CAAC,OAAS,oBAAoB,gBAAgB,QAAQhoG,MAAM,CAAC,YAAc,GAAG,SAAW,GAAG,KAAO,KAAKwoG,MAAM,CAACn5H,MAAOuwB,EAAW,QAAExsB,SAAS,SAAUq1H,GAAM7oG,EAAIgpG,QAAQH,GAAK3sC,WAAW,cAAc,IAAI,GAAG/7D,EAAG,OAAO,CAACA,EAAG,OAAO,CAACA,EAAG,IAAI,CAACg8D,YAAY,aAAa,CAACn8D,EAAIK,GAAG,QAAQF,EAAG,YAAY,CAACg8D,YAAY,uBAAuBisC,YAAY,CAAC,OAAS,oBAAoB,gBAAgB,QAAQhoG,MAAM,CAAC,YAAc,GAAG,SAAW,GAAG,KAAO,KAAKwoG,MAAM,CAACn5H,MAAOuwB,EAAW,QAAExsB,SAAS,SAAUq1H,GAAM7oG,EAAIipG,QAAQJ,GAAK3sC,WAAW,cAAc,IAAI,GAAG/7D,EAAG,OAAO,CAACA,EAAG,OAAO,CAACA,EAAG,IAAI,CAACg8D,YAAY,aAAa,CAACn8D,EAAIK,GAAG,QAAQF,EAAG,YAAY,CAACg8D,YAAY,uBAAuBisC,YAAY,CAAC,OAAS,oBAAoB,gBAAgB,QAAQhoG,MAAM,CAAC,YAAc,GAAG,SAAW,GAAG,KAAO,KAAKwoG,MAAM,CAACn5H,MAAOuwB,EAAW,QAAExsB,SAAS,SAAUq1H,GAAM7oG,EAAIkpG,QAAQL,GAAK3sC,WAAW,cAAc,IAAI,GAAG/7D,EAAG,OAAO,CAACA,EAAG,OAAO,CAACA,EAAG,IAAI,CAACg8D,YAAY,aAAa,CAACn8D,EAAIK,GAAG,QAAQF,EAAG,YAAY,CAACg8D,YAAY,uBAAuBisC,YAAY,CAAC,OAAS,oBAAoB,gBAAgB,QAAQhoG,MAAM,CAAC,YAAc,GAAG,SAAW,GAAG,KAAO,KAAKwoG,MAAM,CAACn5H,MAAOuwB,EAAW,QAAExsB,SAAS,SAAUq1H,GAAM7oG,EAAImpG,QAAQN,GAAK3sC,WAAW,cAAc,IAAI,GAAG/7D,EAAG,OAAO,CAACA,EAAG,OAAO,CAACA,EAAG,IAAI,CAACg8D,YAAY,aAAa,CAACn8D,EAAIK,GAAG,QAAQF,EAAG,YAAY,CAACg8D,YAAY,uBAAuBisC,YAAY,CAAC,OAAS,oBAAoB,gBAAgB,QAAQhoG,MAAM,CAAC,YAAc,GAAG,SAAW,GAAG,KAAO,KAAKwoG,MAAM,CAACn5H,MAAOuwB,EAAW,QAAExsB,SAAS,SAAUq1H,GAAM7oG,EAAIopG,QAAQP,GAAK3sC,WAAW,cAAc,IAAI,GAAG/7D,EAAG,OAAO,CAACA,EAAG,OAAO,CAACA,EAAG,IAAI,CAACg8D,YAAY,aAAa,CAACn8D,EAAIK,GAAG,QAAQF,EAAG,YAAY,CAACg8D,YAAY,uBAAuBisC,YAAY,CAAC,OAAS,oBAAoB,gBAAgB,QAAQhoG,MAAM,CAAC,YAAc,GAAG,SAAW,GAAG,KAAO,KAAKwoG,MAAM,CAACn5H,MAAOuwB,EAAW,QAAExsB,SAAS,SAAUq1H,GAAM7oG,EAAIqpG,QAAQR,GAAK3sC,WAAW,cAAc,IAAI,IAAI,IAAI,GAAG/7D,EAAG,aAAa,CAACg8D,YAAY,MAAM,CAACh8D,EAAG,MAAM,CAACg8D,YAAY,SAAS,CAACh8D,EAAG,MAAM,CAACg8D,YAAY,QAAQ,CAACn8D,EAAIK,GAAG,UAAUF,EAAG,OAAO,CAACg8D,YAAY,WAAWisC,YAAY,CAAC,SAAW,WAAW,CAACjoG,EAAG,QAAQ,CAAC2+C,IAAI,QAAQ1+C,MAAM,CAAC,KAAO,OAAO,GAAK,MAAM,OAAS,sCAAsC1hB,GAAG,CAAC,OAASshB,EAAIspG,2BAA2BnpG,EAAG,MAAMA,EAAG,MAAMA,EAAG,MAAM,CAACioG,YAAY,CAAC,YAAY,QAAQhoG,MAAM,CAAC,GAAK,YAAY,CAAEJ,EAAU,OAAEG,EAAG,MAAM,CAACioG,YAAY,CAAC,YAAY,QAAQhoG,MAAM,CAAC,IAAMJ,EAAIupG,UAAUvpG,EAAIi/E,SAAS9+E,EAAG,MAAMA,EAAG,OAAO,CAACA,EAAG,KAAK,CAACH,EAAIK,GAAG,uBAAuBF,EAAG,QAAQA,EAAG,aAAa,CAACA,EAAG,OAAO,CAACg8D,YAAY,0BAA0B,CAACh8D,EAAG,OAAO,CAACg8D,YAAY,OAAOisC,YAAY,CAAC,QAAU,QAAQhoG,MAAM,CAAC,GAAK,KAAK,GAAK,OAAO,CAACD,EAAG,QAAQ,CAACA,EAAG,QAAQ,CAAC67D,WAAW,CAAC,CAAC3tF,KAAK,QAAQ4tF,QAAQ,UAAUxsF,MAAOuwB,EAAU,OAAEk8D,WAAW,WAAW97D,MAAM,CAAC,KAAO,QAAQ,KAAO,QAAQ,QAAU,IAAIy9E,SAAS,CAAC,QAAU79E,EAAIwpG,GAAGxpG,EAAIypG,OAAO,OAAO/qH,GAAG,CAAC,MAAQ,SAASu/F,GAAQj+E,EAAI0pG,MAAQ,GAAG,OAAS,SAASzrB,GAAQj+E,EAAIypG,OAAO,SAAStpG,EAAG,OAAO,CAACH,EAAIK,GAAG,SAASF,EAAG,QAAQ,CAACA,EAAG,QAAQ,CAAC67D,WAAW,CAAC,CAAC3tF,KAAK,QAAQ4tF,QAAQ,UAAUxsF,MAAOuwB,EAAU,OAAEk8D,WAAW,WAAW97D,MAAM,CAAC,KAAO,QAAQ,KAAO,SAASy9E,SAAS,CAAC,QAAU79E,EAAIwpG,GAAGxpG,EAAIypG,OAAO,OAAO/qH,GAAG,CAAC,MAAQ,SAASu/F,GAAQj+E,EAAI0pG,MAAQ,GAAG,OAAS,SAASzrB,GAAQj+E,EAAIypG,OAAO,SAAStpG,EAAG,OAAO,CAACH,EAAIK,GAAG,WAAWF,EAAG,OAAO,CAACg8D,YAAY,OAAOisC,YAAY,CAAC,QAAU,QAAQhoG,MAAM,CAAC,GAAK,KAAK,GAAK,OAAO,CAACD,EAAG,QAAQ,CAACA,EAAG,QAAQ,CAAC67D,WAAW,CAAC,CAAC3tF,KAAK,QAAQ4tF,QAAQ,UAAUxsF,MAAOuwB,EAAU,OAAEk8D,WAAW,WAAW97D,MAAM,CAAC,KAAO,QAAQ,KAAO,QAAQ,QAAU,IAAIy9E,SAAS,CAAC,QAAU79E,EAAIwpG,GAAGxpG,EAAIypG,OAAO,OAAO/qH,GAAG,CAAC,MAAQ,SAASu/F,GAAQj+E,EAAI0pG,MAAQ,GAAG,OAAS,SAASzrB,GAAQj+E,EAAIypG,OAAO,SAAStpG,EAAG,OAAO,CAACH,EAAIK,GAAG,SAASF,EAAG,QAAQ,CAACA,EAAG,QAAQ,CAAC67D,WAAW,CAAC,CAAC3tF,KAAK,QAAQ4tF,QAAQ,UAAUxsF,MAAOuwB,EAAU,OAAEk8D,WAAW,WAAW97D,MAAM,CAAC,KAAO,QAAQ,KAAO,SAASy9E,SAAS,CAAC,QAAU79E,EAAIwpG,GAAGxpG,EAAIypG,OAAO,OAAO/qH,GAAG,CAAC,MAAQ,SAASu/F,GAAQj+E,EAAI0pG,MAAQ,GAAG,OAAS,SAASzrB,GAAQj+E,EAAIypG,OAAO,SAAStpG,EAAG,OAAO,CAACH,EAAIK,GAAG,YAAY,IAAI,GAAGF,EAAG,OAAO,CAACg8D,YAAY,WAAW/7D,MAAM,CAAC,GAAK,OAAO,CAACD,EAAG,MAAM,CAACg8D,YAAY,OAAO,CAACh8D,EAAG,OAAO,CAACg8D,YAAY,SAAS,CAACh8D,EAAG,UAAU,CAACg8D,YAAY,6BAA6B/7D,MAAM,CAAC,MAAQ,QAAQ,MAAQ,IAAI1hB,GAAG,CAAC,MAAQshB,EAAI2pG,eAAe,CAACxpG,EAAG,QAAQ,CAACC,MAAM,CAAC,KAAO,oBAAoBJ,EAAIK,GAAG,oBAAoB,IAAI,GAAGF,EAAG,OAAO,CAACg8D,YAAY,SAAS,CAACh8D,EAAG,UAAU,CAACg8D,YAAY,6BAA6B/7D,MAAM,CAAC,MAAQ,GAAG,MAAQ,IAAI1hB,GAAG,CAAC,MAAQshB,EAAI4pG,iBAAiB,CAACzpG,EAAG,QAAQ,CAACC,MAAM,CAAC,KAAO,qBAAqBJ,EAAIK,GAAG,oBAAoB,IAAI,IAAI,KAAKF,EAAG,OAAO,CAACC,MAAM,CAAC,GAAK,OAAO,CAACD,EAAG,MAAM,CAACg8D,YAAY,QAAQ,CAACh8D,EAAG,KAAK,CAACg8D,YAAY,eAAe,CAACn8D,EAAIK,GAAG,sCAAsCF,EAAG,UAAU,CAACg8D,YAAY,uBAAuB/7D,MAAM,CAAC,MAAQ,UAAU,KAAO,KAAK,MAAQ,GAAG,SAAWJ,EAAIggF,YAAYthG,GAAG,CAAC,MAAQshB,EAAI6pG,cAAc,CAAC7pG,EAAIK,GAAG,aAAa,MAAM,IAAI,IAAI,IAAI,IAAI,IAChjOE,EAAkB,CAAC,WAAa,IAAIP,EAAIj2B,KAASk2B,EAAGD,EAAIE,eAAmBC,EAAGH,EAAI5uB,MAAM+uB,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACg8D,YAAY,WAAWisC,YAAY,CAAC,MAAQ,SAAS,CAACjoG,EAAG,KAAK,CAACg8D,YAAY,8BAA8B,CAACn8D,EAAIK,GAAG,iBAAiBF,EAAG,MAAMA,EAAG,U,+mBCiUlQ,4BAUA,uCAMA,yCAGA,sBACA,OACE9xB,KAAM,QACNy7H,WAAY,CACVC,YAAJ,QAEE50H,KALF,WAKA,MACI,OAAO,EAAX,CACMmzH,iBAAN,IACM0B,WAAY,GACZlB,SAAU,GACVC,QAAS,GACTC,QAAS,GACTC,QAAS,GACTC,QAAS,GACTC,QAAS,GACTC,QAAS,GACTC,QAAS,GACTK,MAAO,GACPO,QAAS,GACTzB,SAAU,GACVG,OAAQ,GACRuB,eAAe,EACfh9G,OAAO,EACPi9G,SAAU,GACVC,YAAa,GACbb,OAAQ,GACRc,IAAK,KAELC,KAAM,IAtBZ,aAuBA,MAvBA,YAwBA,IAxBA,aAyBA,MAzBA,WA2BA,IA3BA,GA8BE,QApCF,WAoCA,2IACA,sBACA,mBACA,kBAHA,8CAKE1lB,SAAU,GACVlU,QAAS,CAEP,eAFJ,WAEA,oKACA,OACA,0DACA,qBAEA,kBACA,8BACA,kBACA,4BAGA,mBACA,4BAZA,8CAgBI,cAlBJ,WAkBA,2IACA,OACA,IACA,yDACA,CACA,qBAGA,kBACA,8BACA,gBACA,0BAGA,mBACA,2BAfA,8CAkBI,kBApCJ,WAoCA,wJACA,eACA,yCACA,mDAHA,kBAKA,OACA,kCACA,qBAEA,kBACA,8BACA,wBAGA,mBACA,aACA,UACA,WACA,+BACA,kCAnBA,8CAwBI44B,wBA5DJ,SA4DA,GACM,IAAN,oBACMv/H,KAAKw/H,OAASzjG,IAAIC,gBAAgBgwB,GAClChsD,KAAKwgI,wBAEPA,qBAjEJ,WAkEMxgI,KAAKygI,MAAQzgI,KAAK0jH,MAAMgd,MAAMznD,MAC9Bj5E,KAAK2gI,mBAEP,gBArEJ,WAqEA,iJACA,eAEA,4BACA,mDACA,oCAEA,OACA,uBACA,SACA,wCAGA,kBACA,8BACA,qBAGA,mBACA,8BACA,kBApBA,8CAyBId,eA9FJ,WA8FA,WAEM,GADA7/H,KAAKmgI,eAAgB,EACC,KAAlBngI,KAAK++H,SAEf,CACQ/+H,KAAKmjB,OAAQ,EACb,IAAR,eAEsC,MAAhBnjB,KAAKkgI,SAAsBlgI,KAAKkgI,QAmB9C,OAlBAj1E,EAAS91C,OAAO,SAAUnV,KAAK4gI,OAAOC,MAAMC,QAC5C71E,EAAS91C,OAAO,QAASnV,KAAK2/H,OAC9B10E,EAAS91C,OAAO,cAAenV,KAAK4gI,OAAOC,MAAME,aACjD91E,EAAS91C,OAAO,aAAcnV,KAAKigI,YACnCh1E,EAAS91C,OAAO,WAAYnV,KAAK++H,UACjC9zE,EAAS91C,OAAO,UAAWnV,KAAKg/H,SAChC/zE,EAAS91C,OAAO,UAAWnV,KAAKi/H,SAChCh0E,EAAS91C,OAAO,UAAWnV,KAAKk/H,SAChCj0E,EAAS91C,OAAO,UAAWnV,KAAKm/H,SAChCl0E,EAAS91C,OAAO,UAAWnV,KAAKo/H,SAChCn0E,EAAS91C,OAAO,UAAWnV,KAAKq/H,SAChCp0E,EAAS91C,OAAO,UAAWnV,KAAKs/H,SAEhC3sE,QAAQyW,IAAI,SAAUppE,KAAK4gI,OAAOC,MAAMC,QACxCnuE,QAAQyW,IAAI,QAASppE,KAAK2/H,OAC1BhtE,QAAQyW,IAAI,aAAcppE,KAAKigI,YAC/BttE,QAAQyW,IAAI,UAAWppE,KAAKg/H,SAErBh/H,KAAKghI,KACpB,iCACU,iBAAV,IAEA,kBACA,6BACY,EAAZ,4BAGA,mBACA,aACY,EAAZ,QACY,EAAZ,SACY,QAAZ,uBACY,QAAZ,yBAtCQhhI,KAAKmjB,OAAQ,GA4CjB28G,YA7IJ,WA6IA,WAC4B,KAAlB9/H,KAAK++H,UACP/+H,KAAK6/H,iBAEP,IAAN,eAGM,OAFA50E,EAAS91C,OAAO,SAAUnV,KAAK4gI,OAAOC,MAAME,aAErC/gI,KAAKghI,KAClB,0BACQ,iBAAR,IAEA,kBACA,6BACU,EAAV,sBAGA,mBACA,aACU,EAAV,QACU,EAAV,SACU,QAAV,uBACU,QAAV,0BAIIC,uBAtKJ,WAuKM95H,OAAOokD,SAAS21E,UAElBC,iBAzKJ,WA0KMnhI,KAAKohI,QAAQt0H,KACnB,8BACA,8BACA,WACA,2BAGI8yH,aAjLJ,WAkLM5/H,KAAKohI,QAAQt0H,KACnB,4BACA,8BACA,WACA,6BCtjBmW,I,wBCQ/V2pB,EAAY,eACd,EACAT,EACAQ,GACA,EACA,KACA,KACA,MAIa,aAAAC,E,+BCfb,SAAU32B,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;IAAIohI,EAAOphI,EAAOE,aAAa,QAAS,CACpCC,OAAQ,wFAAwFC,MAC5F,KAEJC,YAAa,kDAAkDD,MAAM,KACrEE,SAAU,2DAA2DF,MACjE,KAEJG,cAAe,8BAA8BH,MAAM,KACnDI,YAAa,uBAAuBJ,MAAM,KAC1CK,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVC,SAAU,CACNC,QAAS,gBACTC,QAAS,mBACTC,SAAU,eACVC,QAAS,oBACTC,SAAU,sBACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,QACRC,KAAM,SACNC,EAAG,gBACHC,GAAI,aACJC,EAAG,WACHC,GAAI,aACJC,EAAG,UACHC,GAAI,WACJC,EAAG,QACHC,GAAI,UACJC,EAAG,UACHC,GAAI,YACJC,EAAG,SACHC,GAAI,YAERgB,uBAAwB,uBACxBC,QAAS,SAAUI,GACf,IAAI6b,EAAI7b,EAAS,GACbR,EACgC,OAAxBQ,EAAS,IAAO,IACd,KACM,IAAN6b,EACA,KACM,IAANA,EACA,KACM,IAANA,EACA,KACA,KACd,OAAO7b,EAASR,GAEpBZ,KAAM,CACFC,IAAK,EACLC,IAAK,KAIb,OAAO4+H,M,sBCvET,SAAUvhI,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;IAAIqhI,EAAKrhI,EAAOE,aAAa,KAAM,CAC/BC,OAAQ,qFAAqFC,MACzF,KAEJC,YACI,6DAA6DD,MAAM,KACvEsC,kBAAkB,EAClBpC,SAAU,qDAAqDF,MAAM,KACrEG,cAAe,+BAA+BH,MAAM,KACpDI,YAAa,uBAAuBJ,MAAM,KAC1Cye,oBAAoB,EACpBpe,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,eACJC,IAAK,0BACLC,KAAM,iCAEVC,SAAU,CACNC,QAAS,oBACTC,QAAS,uBACTC,SAAU,mBACVC,QAAS,oBACTC,SAAU,gCACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,QACRC,KAAM,WACNC,EAAG,eACHC,GAAI,YACJC,EAAG,aACHC,GAAI,YACJC,EAAG,WACHC,GAAI,WACJC,EAAG,UACHC,GAAI,WACJ6E,EAAG,UACHiY,GAAI,WACJ7c,EAAG,YACHC,GAAI,aACJC,EAAG,SACHC,GAAI,SAERgB,uBAAwB,YACxBC,QAAS,MACThB,KAAM,CACFC,IAAK,EACLC,IAAK,KAIb,OAAO6+H,M,oBCnEX,YACc,WACV,aAEA,IAAIxhI,EAASiG,QAAQC,KAAKC,MAAMC,QAAQ,yBAEpCC,EAAWJ,QAAQC,KAAKC,MAAMC,QAAQ,sBAEtCq7H,EAAc,SAAU5/H,GAC1BA,EAAIwE,EAAS8O,KAAKtT,GAClB,IAAI6/H,EAAM,SAAUv4B,EAAI58F,GACtB1K,EAAIA,EAAEuG,QAAQ+gG,EAAI58F,IAuCpB,OArCAm1H,EAAI,sCAAuC,oBAC3CA,EAAI,mEAAoE,qCACxEA,EAAI,oEAAqE,uCACzEA,EAAI,mEAAoE,qCACxEA,EAAI,oEAAqE,uCACzEA,EAAI,iDAAkD,wBACtDA,EAAI,6CAA8C,wBAClDA,EAAI,mDAAoD,sBACxDA,EAAI,wBAAyB,MAC7BA,EAAI,+BAAgC,iBACpCA,EAAI,4CAA6C,mBACjDA,EAAI,6CAA8C,qBAClDA,EAAI,gDAAiD,0BACrDA,EAAI,iDAAkD,4BACtDA,EAAI,wCAAyC,0BAC7CA,EAAI,yCAA0C,4BAC9CA,EAAI,sCAAuC,0BAC3CA,EAAI,uCAAwC,4BAC5CA,EAAI,mBAAoB,QACxBA,EAAI,iBAAkB,OACtBA,EAAI,eAAgB,QACpBA,EAAI,aAAc,OAClBA,EAAI,UAAW,QACfA,EAAI,+DAAgE,aACpEA,EAAI,QAAS,OACbA,EAAI,sBAAuB,WAC3BA,EAAI,mBAAoB,YACxBA,EAAI,YAAa,MACjBA,EAAI,WAAY,MAChBA,EAAI,SAAU,MACdA,EAAI,QAAS,IACbA,EAAI,UAAW,MACfA,EAAI,kBAAmB,KACvBA,EAAI,WAAY,KAChBA,EAAI,SAAU,KACdA,EAAI,SAAU,KACdA,EAAI,UAAW,KACR7/H,GAEL8/H,EAAc,SAAU9/H,GAC1BA,EAAIwE,EAAS8O,KAAKtT,GAClB,IAAI6/H,EAAM,SAAUv4B,EAAI58F,GACtB1K,EAAIA,EAAEuG,QAAQ+gG,EAAI58F,IAepB,OAbAm1H,EAAI,OAAQ,UACZA,EAAI,UAAW,YACfA,EAAI,YAAa,aACjBA,EAAI,UAAW,QACfA,EAAI,YAAa,SACjBA,EAAI,UAAW,OACfA,EAAI,YAAa,QACjBA,EAAI,mCAAoC,uBACxCA,EAAI,0BAA2B,uBAC/BA,EAAI,0BAA2B,oBAC/BA,EAAI,oCAAqC,8BACzCA,EAAI,4BAA6B,2CACjCA,EAAI,iCAAkC,4CAC/B7/H,GAEL+/H,EAAU,CACZH,YAAaA,EACbE,YAAaA,GAoBf,SAAS3qH,KAjBThX,EAAOsN,IAAI,UAAU,WACnB,MAAO,CACLu0H,KAAM,SAAUt7H,GACdA,EAAOsO,GAAG,oBAAoB,SAAUR,GACtCA,EAAEpM,QAAU25H,EAAQD,YAAYttH,EAAEpM,YAEpC1B,EAAOsO,GAAG,eAAe,SAAUR,GAC7BA,EAAEvO,MACJuO,EAAEpM,QAAU25H,EAAQD,YAAYttH,EAAEpM,UAEhCoM,EAAExO,MACJwO,EAAEpM,QAAU25H,EAAQH,YAAYptH,EAAEpM,mBAvFnC,IADb,I,sBCKE,SAAUjI,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;IAAIw1B,EAAQ,CACR7zB,GAAI,qCAAqCvB,MAAM,KAC/CwB,EAAG,iCAAiCxB,MAAM,KAC1CyB,GAAI,iCAAiCzB,MAAM,KAC3C0B,EAAG,iCAAiC1B,MAAM,KAC1C2B,GAAI,iCAAiC3B,MAAM,KAC3C4B,EAAG,6BAA6B5B,MAAM,KACtC6B,GAAI,6BAA6B7B,MAAM,KACvC8B,EAAG,iCAAiC9B,MAAM,KAC1C+B,GAAI,iCAAiC/B,MAAM,KAC3CgC,EAAG,wBAAwBhC,MAAM,KACjCiC,GAAI,wBAAwBjC,MAAM,MAKtC,SAASia,EAAOoO,EAAO/kB,EAAQC,GAC3B,OAAIA,EAEOD,EAAS,KAAO,GAAKA,EAAS,MAAQ,GAAK+kB,EAAM,GAAKA,EAAM,GAI5D/kB,EAAS,KAAO,GAAKA,EAAS,MAAQ,GAAK+kB,EAAM,GAAKA,EAAM,GAG3E,SAASC,EAAuBhlB,EAAQC,EAAeC,GACnD,OAAOF,EAAS,IAAM2W,EAAOmb,EAAM5xB,GAAMF,EAAQC,GAErD,SAASg+H,EAAyBj+H,EAAQC,EAAeC,GACrD,OAAOyW,EAAOmb,EAAM5xB,GAAMF,EAAQC,GAEtC,SAASi+H,EAAgBl+H,EAAQC,GAC7B,OAAOA,EAAgB,iBAAmB,iBAG9C,IAAIk+H,EAAK7hI,EAAOE,aAAa,KAAM,CAC/BC,OAAQ,uGAAuGC,MAC3G,KAEJC,YAAa,kDAAkDD,MAAM,KACrEE,SACI,0EAA0EF,MACtE,KAERG,cAAe,kBAAkBH,MAAM,KACvCI,YAAa,kBAAkBJ,MAAM,KACrCye,oBAAoB,EACpBpe,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,cACHC,GAAI,uBACJC,IAAK,8BACLC,KAAM,qCAEVC,SAAU,CACNC,QAAS,uBACTC,QAAS,oBACTC,SAAU,qBACVC,QAAS,sBACTC,SAAU,gCACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,SACRC,KAAM,WACNC,EAAGkgI,EACHjgI,GAAI+mB,EACJ9mB,EAAG+/H,EACH9/H,GAAI6mB,EACJ5mB,EAAG6/H,EACH5/H,GAAI2mB,EACJ1mB,EAAG2/H,EACH1/H,GAAIymB,EACJxmB,EAAGy/H,EACHx/H,GAAIumB,EACJtmB,EAAGu/H,EACHt/H,GAAIqmB,GAERrlB,uBAAwB,YACxBC,QAAS,MACThB,KAAM,CACFC,IAAK,EACLC,IAAK,KAIb,OAAOq/H,M,sBClGT,SAAUhiI,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;SAASif,EAAoBvb,EAAQC,EAAeC,EAAKC,GACrD,IAAIwW,EAAS,CACTzY,EAAG,CAAC,cAAe,gBACnBE,EAAG,CAAC,cAAe,gBACnBE,EAAG,CAAC,UAAW,aACfC,GAAI,CAACyB,EAAS,QAASA,EAAS,UAChCoD,EAAG,CAAC,aAAc,eAClB5E,EAAG,CAAC,YAAa,eACjBC,GAAI,CAACuB,EAAS,UAAWA,EAAS,YAClCtB,EAAG,CAAC,WAAY,cAChBC,GAAI,CAACqB,EAAS,SAAUA,EAAS,YAErC,OAAOC,EAAgB0W,EAAOzW,GAAK,GAAKyW,EAAOzW,GAAK,GAGxD,IAAIk+H,EAAO9hI,EAAOE,aAAa,QAAS,CACpCC,OAAQ,qFAAqFC,MACzF,KAEJC,YACI,6DAA6DD,MAAM,KACvEsC,kBAAkB,EAClBpC,SACI,8DAA8DF,MAC1D,KAERG,cAAe,uBAAuBH,MAAM,KAC5CI,YAAa,uBAAuBJ,MAAM,KAC1Cye,oBAAoB,EACpBpe,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,eACJC,IAAK,qBACLC,KAAM,4BAEVC,SAAU,CACNC,QAAS,sBACTK,SAAU,IACVJ,QAAS,uBACTC,SAAU,qBACVC,QAAS,wBACTC,SAAU,gCAEdE,aAAc,CACVC,OAAQ,QACRC,KAAM,SACNC,EAAG,oBACHC,GAAI,cACJC,EAAGqd,EACHpd,GAAI,aACJC,EAAGmd,EACHld,GAAI,aACJC,EAAGid,EACHhd,GAAIgd,EACJnY,EAAGmY,EACHF,GAAI,YACJ7c,EAAG+c,EACH9c,GAAI8c,EACJ7c,EAAG6c,EACH5c,GAAI4c,GAER5b,uBAAwB,YACxBC,QAAS,MACThB,KAAM,CACFC,IAAK,EACLC,IAAK,KAIb,OAAOs/H,M,oBCpFX,YACgB,WACZ,aAEA,IAAIjiI,EAASiG,QAAQC,KAAKC,MAAMC,QAAQ,yBAEpCC,EAAWJ,QAAQC,KAAKC,MAAMC,QAAQ,eAEtC87H,EAAqB,SAAU37H,GACjC,OAAOA,EAAOW,SAAS,mBAAoB,sFAEzCmjF,EAAuB,SAAU9jF,GACnC,OAAOA,EAAOW,SAAS,sBAAuB,KAE5CE,EAAW,CACb86H,mBAAoBA,EACpB73C,qBAAsBA,GAGpB83C,EAA8B,SAAUC,EAAanxH,GACvD,OAAOmxH,IAAgBnxH,GAA6B,MAAhBmxH,GAAqD,MAA9BA,EAAYrtG,WAAW,IAEhFstG,EAAgB,SAAU97H,GAC5B+7H,EAAiB/7H,GAAS,EAAG,MAE3Bg8H,EAAiB,SAAUh8H,GAC7B+7H,EAAiB/7H,EAAQ,EAAG,KAE1B2tB,EAAc,SAAU3tB,GAC1B+7H,EAAiB/7H,GAAS,EAAG,KAE3Bi8H,EAAa,SAAUpyG,EAAW1jB,GAIpC,GAHIA,EAAQ,IACVA,EAAQ,GAEiB,IAAvB0jB,EAAUE,SAAgB,CAC5B,IAAI1jB,EAAMwjB,EAAU9kB,KAAKhC,OACrBoD,EAAQE,IACVF,EAAQE,GAGZ,OAAOF,GAELkkB,EAAW,SAAUX,EAAKG,EAAW7rB,GACZ,IAAvB6rB,EAAUE,UAAkBF,EAAUy/B,gBACxC5/B,EAAIW,SAASR,EAAWoyG,EAAWpyG,EAAW7rB,IAE9C0rB,EAAI41D,eAAez1D,IAGnBS,EAAS,SAAUZ,EAAKG,EAAW7rB,GACV,IAAvB6rB,EAAUE,UAAkBF,EAAUy/B,gBACxC5/B,EAAIY,OAAOT,EAAWoyG,EAAWpyG,EAAW7rB,IAE5C0rB,EAAI8wC,YAAY3wC,IAGhBkyG,EAAmB,SAAU/7H,EAAQkqB,EAAWxf,GAClD,IAAIgf,EAAKZ,EAAKZ,EAAO8gC,EAAcG,EAAU7jD,EAAMkH,EAAS0vH,EAAM71H,EAAK81H,EACnEC,EAAkBv7H,EAAS86H,mBAAmB37H,GAC9Cq8H,EAAoBx7H,EAASijF,qBAAqB9jF,GACtD,GAA2C,MAAvCA,EAAOuL,UAAUC,UAAUuF,QAA/B,CAIA,GADA2Y,EAAM1pB,EAAOuL,UAAUugB,QAAO,GAAM+8B,aAChCn/B,EAAIO,YAAc,EAAG,CAEvB,GADAiyG,EAAOxyG,EAAIs/B,aAAaX,iBACnB6zE,EAAM,CACT,IAAKxyG,EAAIs/B,aAAazxC,aAAemS,EAAIs/B,aAAazxC,WAAWoU,YAC/D,OAEFuwG,EAAOxyG,EAAIs/B,aAAazxC,WAAWoU,YAKrC,GAHAtlB,EAAM61H,EAAKn5H,OACXsnB,EAASX,EAAKwyG,EAAM71H,GACpBikB,EAAOZ,EAAKwyG,EAAM71H,GACdqjB,EAAIQ,UAAY,EAClB,OAEFpB,EAAMY,EAAIQ,UACV8+B,EAAekzE,MACV,CAEL,GADAlzE,EAAet/B,EAAIs/B,aACW,IAA1BA,EAAaj/B,UAAkBi/B,EAAazxC,WAAY,CAC1D,MAAiC,IAA1ByxC,EAAaj/B,UAAkBi/B,EAAazxC,WACjDyxC,EAAeA,EAAazxC,WAEA,IAA1ByxC,EAAaj/B,WACfM,EAASX,EAAKs/B,EAAc,GAC5B1+B,EAAOZ,EAAKs/B,EAAcA,EAAaszE,UAAUv5H,SAInD+lB,EADoB,IAAlBY,EAAIQ,UACA,EAEAR,EAAIQ,UAAY,EAAIA,EAG9BhC,EAAQY,EACR,GACEuB,EAASX,EAAKs/B,EAAclgC,GAAO,EAAIA,EAAM,EAAI,GACjDwB,EAAOZ,EAAKs/B,EAAclgC,GAAO,EAAIA,EAAM,EAAI,GAC/CA,GAAO,EACPqzG,EAAUzyG,EAAIznB,iBACK,MAAZk6H,GAA+B,KAAZA,GAA4C,MAA1BA,EAAQ3tG,WAAW,IAAc1F,EAAM,GAAK,GAAKqzG,IAAYzxH,GACvGkxH,EAA4BlyG,EAAIznB,WAAYyI,IAC9C2f,EAASX,EAAKs/B,EAAclgC,GAC5BwB,EAAOZ,EAAKs/B,EAAc9gC,GAC1BY,GAAO,GACsB,IAApBY,EAAIO,aACbI,EAASX,EAAKs/B,EAAc,GAC5B1+B,EAAOZ,EAAKs/B,EAAc9gC,KAE1BmC,EAASX,EAAKs/B,EAAclgC,GAC5BwB,EAAOZ,EAAKs/B,EAAc9gC,IAE5B5iB,EAAOokB,EAAIznB,WAC0B,MAAjCqD,EAAKs0E,OAAOt0E,EAAKvC,OAAS,IAC5BunB,EAAOZ,EAAKs/B,EAAc9gC,EAAQ,GAEpC5iB,EAAOokB,EAAIznB,WAAW2M,OACtBpC,EAAUlH,EAAK7G,MAAM29H,GACjB5vH,IACiB,SAAfA,EAAQ,GACVA,EAAQ,GAAK,cACJ,KAAKxI,KAAKwI,EAAQ,MAAQ,WAAWxI,KAAKwI,EAAQ,MAC3DA,EAAQ,GAAK,UAAYA,EAAQ,IAEnC28C,EAAWnpD,EAAOuL,UAAU2vD,cAC5Bl7D,EAAOuL,UAAUwf,OAAOrB,GACxB1pB,EAAOyW,YAAY,cAAc,EAAOjK,EAAQ,GAAKA,EAAQ,IACzD6vH,GACFr8H,EAAO4L,IAAIC,UAAU7L,EAAOuL,UAAUC,UAAW,SAAU6wH,GAE7Dr8H,EAAOuL,UAAU4vD,eAAehS,GAChCnpD,EAAOyU,iBAGPpG,EAAQ,SAAUrO,GACpB,IAAIu8H,EACJv8H,EAAOsO,GAAG,WAAW,SAAUR,GAC7B,GAAkB,KAAdA,EAAEqgB,QACJ,OAAOR,EAAY3tB,MAGnBF,EAASkyB,GACXhyB,EAAOsO,GAAG,SAAS,WACjB,IAAKiuH,EAAoB,CACvBA,GAAqB,EACrB,IACEv8H,EAAOyW,YAAY,iBAAiB,GAAO,GAC3C,MAAOoe,UAMf70B,EAAOsO,GAAG,YAAY,SAAUR,GAC9B,GAAkB,KAAdA,EAAEqgB,QACJ,OAAO2tG,EAAc97H,MAGzBA,EAAOsO,GAAG,SAAS,SAAUR,GAC3B,GAAkB,KAAdA,EAAEqgB,QACJ,OAAO6tG,EAAeh8H,QAIxBw8H,EAAO,CAAEnuH,MAAOA,GAKpB,SAASoC,KAHThX,EAAOsN,IAAI,YAAY,SAAU/G,GAC/Bw8H,EAAKnuH,MAAMrO,OA1KF,IADf,I,sBCIE,SAAUvG,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;IAAI6iI,EAAM7iI,EAAOE,aAAa,MAAO,CACjCC,OAAQ,kFAAkFC,MACtF,KAEJC,YACI,kFAAkFD,MAC9E,KAERE,SAAU,kDAAkDF,MAAM,KAClEG,cAAe,kDAAkDH,MAAM,KACvEI,YAAa,kDAAkDJ,MAAM,KACrEK,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,0BAEVC,SAAU,CACNC,QAAS,cACTC,QAAS,cACTC,SAAU,cACVC,QAAS,eACTC,SAAU,cACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,gBACRC,KAAM,SACNC,EAAG,OACHC,GAAI,UACJC,EAAG,QACHC,GAAI,WACJC,EAAG,OACHC,GAAI,cACJC,EAAG,MACHC,GAAI,WACJC,EAAG,QACHC,GAAI,YACJC,EAAG,QACHC,GAAI,aAERC,KAAM,CACFC,IAAK,EACLC,IAAK,MAIb,OAAOqgI,M,qBCxDX,EAAQ,S,sBCNR;;;;;CAME,SAAUhjI,EAAQC,GAC+CioE,EAAOC,QAAUloE,KADnF,CAICC,GAAM,WAAe,aAEnB,IAAI+iI,EA6HA/+G,EA3HJ,SAASpZ,IACL,OAAOm4H,EAAa71H,MAAM,KAAM/D,WAKpC,SAAS65H,EAAgBv5H,GACrBs5H,EAAet5H,EAGnB,SAASkoB,EAAQ9sB,GACb,OACIA,aAAiBmI,OACyB,mBAA1C5E,OAAOC,UAAUC,SAASC,KAAK1D,GAIvC,SAAS+3F,EAAS/3F,GAGd,OACa,MAATA,GAC0C,oBAA1CuD,OAAOC,UAAUC,SAASC,KAAK1D,GAIvC,SAASo+H,EAAWniH,EAAGtB,GACnB,OAAOpX,OAAOC,UAAUG,eAAeD,KAAKuY,EAAGtB,GAGnD,SAAS0jH,EAAcn9G,GACnB,GAAI3d,OAAO0tF,oBACP,OAAkD,IAA3C1tF,OAAO0tF,oBAAoB/vE,GAAK3c,OAEvC,IAAIykB,EACJ,IAAKA,KAAK9H,EACN,GAAIk9G,EAAWl9G,EAAK8H,GAChB,OAAO,EAGf,OAAO,EAIf,SAASs1G,EAAYt+H,GACjB,YAAiB,IAAVA,EAGX,SAASqrD,EAASrrD,GACd,MACqB,kBAAVA,GACmC,oBAA1CuD,OAAOC,UAAUC,SAASC,KAAK1D,GAIvC,SAASu+H,EAAOv+H,GACZ,OACIA,aAAiB6S,MACyB,kBAA1CtP,OAAOC,UAAUC,SAASC,KAAK1D,GAIvC,SAASoD,EAAIgsE,EAAKnyD,GACd,IACIpY,EADA2xB,EAAM,GAENgoG,EAASpvD,EAAI7qE,OACjB,IAAKM,EAAI,EAAGA,EAAI25H,IAAU35H,EACtB2xB,EAAIvuB,KAAKgV,EAAGmyD,EAAIvqE,GAAIA,IAExB,OAAO2xB,EAGX,SAAS3yB,EAAOoY,EAAGtB,GACf,IAAK,IAAI9V,KAAK8V,EACNyjH,EAAWzjH,EAAG9V,KACdoX,EAAEpX,GAAK8V,EAAE9V,IAYjB,OARIu5H,EAAWzjH,EAAG,cACdsB,EAAExY,SAAWkX,EAAElX,UAGf26H,EAAWzjH,EAAG,aACdsB,EAAE4sF,QAAUluF,EAAEkuF,SAGX5sF,EAGX,SAASwiH,EAAUz+H,EAAOyV,EAAQipH,EAAQC,GACtC,OAAOC,GAAiB5+H,EAAOyV,EAAQipH,EAAQC,GAAQ,GAAME,MAGjE,SAASC,IAEL,MAAO,CACHzuH,OAAO,EACP0uH,aAAc,GACdC,YAAa,GACbnnD,UAAW,EACXonD,cAAe,EACfC,WAAW,EACXC,WAAY,KACZC,aAAc,KACdC,eAAe,EACfC,iBAAiB,EACjBC,KAAK,EACLC,gBAAiB,GACjBC,IAAK,KACLvhI,SAAU,KACVwhI,SAAS,EACTC,iBAAiB,GAIzB,SAASC,EAAgB5iI,GAIrB,OAHa,MAATA,EAAE6iI,MACF7iI,EAAE6iI,IAAMf,KAEL9hI,EAAE6iI,IAsBb,SAASC,EAAQ9iI,GACb,GAAkB,MAAdA,EAAE+iI,SAAkB,CACpB,IAAI/sC,EAAQ4sC,EAAgB5iI,GACxBgjI,EAAc7gH,EAAKzb,KAAKsvF,EAAMwsC,iBAAiB,SAAU36H,GACrD,OAAY,MAALA,KAEXo7H,GACKx7E,MAAMznD,EAAEkjI,GAAGptH,YACZkgF,EAAMnb,SAAW,IAChBmb,EAAM3iF,QACN2iF,EAAMmsC,aACNnsC,EAAMosC,eACNpsC,EAAMmtC,iBACNntC,EAAM2sC,kBACN3sC,EAAMksC,YACNlsC,EAAMqsC,gBACNrsC,EAAMssC,mBACLtsC,EAAM90F,UAAa80F,EAAM90F,UAAY8hI,GAU/C,GARIhjI,EAAEojI,UACFH,EACIA,GACwB,IAAxBjtC,EAAMisC,eACwB,IAA9BjsC,EAAM+rC,aAAax6H,aACDka,IAAlBu0E,EAAMqtC,SAGS,MAAnB98H,OAAO+8H,UAAqB/8H,OAAO+8H,SAAStjI,GAG5C,OAAOijI,EAFPjjI,EAAE+iI,SAAWE,EAKrB,OAAOjjI,EAAE+iI,SAGb,SAASQ,EAAcvtC,GACnB,IAAIh2F,EAAIyhI,EAAU/0B,KAOlB,OANa,MAAT1W,EACAnvF,EAAO+7H,EAAgB5iI,GAAIg2F,GAE3B4sC,EAAgB5iI,GAAGsiI,iBAAkB,EAGlCtiI,EA7DPmiB,EADAhX,MAAM3E,UAAU2b,KACThX,MAAM3E,UAAU2b,KAEhB,SAAUkuD,GACb,IAEIxoE,EAFA0H,EAAIhJ,OAAOpI,MACX0M,EAAM0E,EAAEhI,SAAW,EAGvB,IAAKM,EAAI,EAAGA,EAAIgD,EAAKhD,IACjB,GAAIA,KAAK0H,GAAK8gE,EAAI3pE,KAAKvI,KAAMoR,EAAE1H,GAAIA,EAAG0H,GAClC,OAAO,EAIf,OAAO,GAqDf,IAAIi0H,EAAoBz6H,EAAMy6H,iBAAmB,GAC7CC,GAAmB,EAEvB,SAASC,EAAW54H,EAAIJ,GACpB,IAAI7C,EACA87H,EACAlqG,EACAmqG,EAAsBJ,EAAiBj8H,OAiC3C,GA/BK+5H,EAAY52H,EAAKm5H,oBAClB/4H,EAAG+4H,iBAAmBn5H,EAAKm5H,kBAE1BvC,EAAY52H,EAAKyV,MAClBrV,EAAGqV,GAAKzV,EAAKyV,IAEZmhH,EAAY52H,EAAKo5H,MAClBh5H,EAAGg5H,GAAKp5H,EAAKo5H,IAEZxC,EAAY52H,EAAKopG,MAClBhpG,EAAGgpG,GAAKppG,EAAKopG,IAEZwtB,EAAY52H,EAAK04H,WAClBt4H,EAAGs4H,QAAU14H,EAAK04H,SAEjB9B,EAAY52H,EAAKq5H,QAClBj5H,EAAGi5H,KAAOr5H,EAAKq5H,MAEdzC,EAAY52H,EAAKs5H,UAClBl5H,EAAGk5H,OAASt5H,EAAKs5H,QAEhB1C,EAAY52H,EAAKu5H,WAClBn5H,EAAGm5H,QAAUv5H,EAAKu5H,SAEjB3C,EAAY52H,EAAKm4H,OAClB/3H,EAAG+3H,IAAMD,EAAgBl4H,IAExB42H,EAAY52H,EAAKw5H,WAClBp5H,EAAGo5H,QAAUx5H,EAAKw5H,SAGlBN,EAAsB,EACtB,IAAK/7H,EAAI,EAAGA,EAAI+7H,EAAqB/7H,IACjC87H,EAAOH,EAAiB37H,GACxB4xB,EAAM/uB,EAAKi5H,GACNrC,EAAY7nG,KACb3uB,EAAG64H,GAAQlqG,GAKvB,OAAO3uB,EAIX,SAASq5H,EAAOC,GACZV,EAAWvlI,KAAMimI,GACjBjmI,KAAK+kI,GAAK,IAAIrtH,KAAkB,MAAbuuH,EAAOlB,GAAakB,EAAOlB,GAAGptH,UAAY42F,KACxDvuG,KAAK2kI,YACN3kI,KAAK+kI,GAAK,IAAIrtH,KAAK62F,OAIE,IAArB+2B,IACAA,GAAmB,EACnB16H,EAAMs7H,aAAalmI,MACnBslI,GAAmB,GAI3B,SAASa,EAASpgH,GACd,OACIA,aAAeigH,GAAkB,MAAPjgH,GAAuC,MAAxBA,EAAI2/G,iBAIrD,SAASxxD,EAAKhxD,IAEgC,IAAtCtY,EAAMw7H,6BACa,qBAAZzzE,SACPA,QAAQuhB,MAERvhB,QAAQuhB,KAAK,wBAA0BhxD,GAI/C,SAASmjH,EAAUnjH,EAAKpB,GACpB,IAAIwkH,GAAY,EAEhB,OAAO59H,GAAO,WAIV,GAHgC,MAA5BkC,EAAM27H,oBACN37H,EAAM27H,mBAAmB,KAAMrjH,GAE/BojH,EAAW,CACX,IACI/yF,EACA7pC,EACA7F,EAHAgJ,EAAO,GAIP25H,EAASr9H,UAAUC,OACvB,IAAKM,EAAI,EAAGA,EAAI88H,EAAQ98H,IAAK,CAEzB,GADA6pC,EAAM,GACsB,kBAAjBpqC,UAAUO,GAAiB,CAElC,IAAK7F,KADL0vC,GAAO,MAAQ7pC,EAAI,KACPP,UAAU,GACd85H,EAAW95H,UAAU,GAAItF,KACzB0vC,GAAO1vC,EAAM,KAAOsF,UAAU,GAAGtF,GAAO,MAGhD0vC,EAAMA,EAAI9mC,MAAM,GAAI,QAEpB8mC,EAAMpqC,UAAUO,GAEpBmD,EAAKC,KAAKymC,GAEd2gC,EACIhxD,EACI,gBACAlW,MAAM3E,UAAUoE,MAAMlE,KAAKsE,GAAMS,KAAK,IACtC,MACA,IAAI6V,OAAQ6kF,OAEpBs+B,GAAY,EAEhB,OAAOxkH,EAAG5U,MAAMlN,KAAMmJ,aACvB2Y,GAGP,IAgFI+D,EAhFA4gH,EAAe,GAEnB,SAASC,EAAgBpiI,EAAM4e,GACK,MAA5BtY,EAAM27H,oBACN37H,EAAM27H,mBAAmBjiI,EAAM4e,GAE9BujH,EAAaniI,KACd4vE,EAAKhxD,GACLujH,EAAaniI,IAAQ,GAO7B,SAASmgB,EAAW5f,GAChB,MACyB,qBAAbkkC,UAA4BlkC,aAAiBkkC,UACX,sBAA1C3gC,OAAOC,UAAUC,SAASC,KAAK1D,GAIvC,SAASe,EAAIqgI,GACT,IAAIT,EAAM97H,EACV,IAAKA,KAAKu8H,EACFhD,EAAWgD,EAAQv8H,KACnB87H,EAAOS,EAAOv8H,GACV+a,EAAW+gH,GACXxlI,KAAK0J,GAAK87H,EAEVxlI,KAAK,IAAM0J,GAAK87H,GAI5BxlI,KAAK2mI,QAAUV,EAIfjmI,KAAK4mI,+BAAiC,IAAI3pF,QACrCj9C,KAAK6mI,wBAAwB1oE,QAAUn+D,KAAK8mI,cAAc3oE,QACvD,IACA,UAAUA,QAItB,SAAS4oE,EAAaC,EAAcC,GAChC,IACIzB,EADAnqG,EAAM3yB,EAAO,GAAIs+H,GAErB,IAAKxB,KAAQyB,EACLhE,EAAWgE,EAAazB,KACpB5oC,EAASoqC,EAAaxB,KAAU5oC,EAASqqC,EAAYzB,KACrDnqG,EAAImqG,GAAQ,GACZ98H,EAAO2yB,EAAImqG,GAAOwB,EAAaxB,IAC/B98H,EAAO2yB,EAAImqG,GAAOyB,EAAYzB,KACF,MAArByB,EAAYzB,GACnBnqG,EAAImqG,GAAQyB,EAAYzB,UAEjBnqG,EAAImqG,IAIvB,IAAKA,KAAQwB,EAEL/D,EAAW+D,EAAcxB,KACxBvC,EAAWgE,EAAazB,IACzB5oC,EAASoqC,EAAaxB,MAGtBnqG,EAAImqG,GAAQ98H,EAAO,GAAI2yB,EAAImqG,KAGnC,OAAOnqG,EAGX,SAAS6rG,EAAOjB,GACE,MAAVA,GACAjmI,KAAK4F,IAAIqgI,GAhEjBr7H,EAAMw7H,6BAA8B,EACpCx7H,EAAM27H,mBAAqB,KAsEvB1gH,EADAzd,OAAOyd,KACAzd,OAAOyd,KAEP,SAAUE,GACb,IAAIrc,EACA2xB,EAAM,GACV,IAAK3xB,KAAKqc,EACFk9G,EAAWl9G,EAAKrc,IAChB2xB,EAAIvuB,KAAKpD,GAGjB,OAAO2xB,GAIf,IAAI8rG,EAAkB,CAClBjmI,QAAS,gBACTC,QAAS,mBACTC,SAAU,eACVC,QAAS,oBACTC,SAAU,sBACVC,SAAU,KAGd,SAASN,EAAS4C,EAAK6vF,EAAKruF,GACxB,IAAIlC,EAASnD,KAAKonI,UAAUvjI,IAAQ7D,KAAKonI,UAAU,YACnD,OAAO3iH,EAAWthB,GAAUA,EAAOoF,KAAKmrF,EAAKruF,GAAOlC,EAGxD,SAASkkI,EAAS1jI,EAAQ2jI,EAAcC,GACpC,IAAIC,EAAY,GAAK7gI,KAAKyiH,IAAIzlH,GAC1B8jI,EAAcH,EAAeE,EAAUp+H,OACvCs+H,EAAO/jI,GAAU,EACrB,OACK+jI,EAAQH,EAAY,IAAM,GAAM,KACjC5gI,KAAK0/B,IAAI,GAAI1/B,KAAKssB,IAAI,EAAGw0G,IAAcn/H,WAAWqnB,OAAO,GACzD63G,EAIR,IAAIG,EACI,yMACJC,EAAwB,6CACxBC,EAAkB,GAClBC,EAAuB,GAM3B,SAASC,EAAex+H,EAAOy+H,EAAQzkI,EAASkG,GAC5C,IAAIw+H,EAAOx+H,EACa,kBAAbA,IACPw+H,EAAO,WACH,OAAOjoI,KAAKyJ,OAGhBF,IACAu+H,EAAqBv+H,GAAS0+H,GAE9BD,IACAF,EAAqBE,EAAO,IAAM,WAC9B,OAAOX,EAASY,EAAK/6H,MAAMlN,KAAMmJ,WAAY6+H,EAAO,GAAIA,EAAO,MAGnEzkI,IACAukI,EAAqBvkI,GAAW,WAC5B,OAAOvD,KAAKkoI,aAAa3kI,QACrB0kI,EAAK/6H,MAAMlN,KAAMmJ,WACjBI,KAMhB,SAAS4+H,EAAuBtjI,GAC5B,OAAIA,EAAMC,MAAM,YACLD,EAAMqD,QAAQ,WAAY,IAE9BrD,EAAMqD,QAAQ,MAAO,IAGhC,SAASkgI,EAAmB9tH,GACxB,IACI5Q,EACAN,EAFAwpE,EAAQt4D,EAAOxV,MAAM6iI,GAIzB,IAAKj+H,EAAI,EAAGN,EAASwpE,EAAMxpE,OAAQM,EAAIN,EAAQM,IACvCo+H,EAAqBl1D,EAAMlpE,IAC3BkpE,EAAMlpE,GAAKo+H,EAAqBl1D,EAAMlpE,IAEtCkpE,EAAMlpE,GAAKy+H,EAAuBv1D,EAAMlpE,IAIhD,OAAO,SAAUgqF,GACb,IACIhqF,EADAvG,EAAS,GAEb,IAAKuG,EAAI,EAAGA,EAAIN,EAAQM,IACpBvG,GAAUshB,EAAWmuD,EAAMlpE,IACrBkpE,EAAMlpE,GAAGnB,KAAKmrF,EAAKp5E,GACnBs4D,EAAMlpE,GAEhB,OAAOvG,GAKf,SAASklI,EAAaxmI,EAAGyY,GACrB,OAAKzY,EAAE8iI,WAIPrqH,EAASguH,EAAahuH,EAAQzY,EAAEqmI,cAChCL,EAAgBvtH,GACZutH,EAAgBvtH,IAAW8tH,EAAmB9tH,GAE3CutH,EAAgBvtH,GAAQzY,IAPpBA,EAAEqmI,aAAal2C,cAU9B,SAASs2C,EAAahuH,EAAQipH,GAC1B,IAAI75H,EAAI,EAER,SAAS6+H,EAA4B1jI,GACjC,OAAO0+H,EAAO7iI,eAAemE,IAAUA,EAG3C+iI,EAAsBt7H,UAAY,EAClC,MAAO5C,GAAK,GAAKk+H,EAAsBv9H,KAAKiQ,GACxCA,EAASA,EAAOpS,QACZ0/H,EACAW,GAEJX,EAAsBt7H,UAAY,EAClC5C,GAAK,EAGT,OAAO4Q,EAGX,IAAIkuH,EAAwB,CACxB5nI,IAAK,YACLD,GAAI,SACJE,EAAG,aACHC,GAAI,eACJC,IAAK,sBACLC,KAAM,6BAGV,SAASN,EAAemD,GACpB,IAAIyW,EAASta,KAAKyoI,gBAAgB5kI,GAC9B6kI,EAAc1oI,KAAKyoI,gBAAgB5kI,EAAIo/D,eAE3C,OAAI3oD,IAAWouH,EACJpuH,GAGXta,KAAKyoI,gBAAgB5kI,GAAO6kI,EACvB5jI,MAAM6iI,GACN1/H,KAAI,SAAU0gI,GACX,MACY,SAARA,GACQ,OAARA,GACQ,OAARA,GACQ,SAARA,EAEOA,EAAIl8H,MAAM,GAEdk8H,KAEVr7H,KAAK,IAEHtN,KAAKyoI,gBAAgB5kI,IAGhC,IAAI+kI,EAAqB,eAEzB,SAAS52C,IACL,OAAOhyF,KAAK6oI,aAGhB,IAAIC,EAAiB,KACjBC,EAAgC,UAEpC,SAASxlI,EAAQI,GACb,OAAO3D,KAAKgpI,SAAS9gI,QAAQ,KAAMvE,GAGvC,IAAIslI,GAAsB,CACtBxnI,OAAQ,QACRC,KAAM,SACNC,EAAG,gBACHC,GAAI,aACJC,EAAG,WACHC,GAAI,aACJC,EAAG,UACHC,GAAI,WACJC,EAAG,QACHC,GAAI,UACJ6E,EAAG,SACHiY,GAAI,WACJ7c,EAAG,UACHC,GAAI,YACJC,EAAG,SACHC,GAAI,YAGR,SAASd,GAAamC,EAAQC,EAAe6L,EAAQ3L,GACjD,IAAIX,EAASnD,KAAKkpI,cAAcz5H,GAChC,OAAOgV,EAAWthB,GACZA,EAAOQ,EAAQC,EAAe6L,EAAQ3L,GACtCX,EAAO+E,QAAQ,MAAOvE,GAGhC,SAASwlI,GAAWC,EAAMjmI,GACtB,IAAImX,EAASta,KAAKkpI,cAAcE,EAAO,EAAI,SAAW,QACtD,OAAO3kH,EAAWnK,GAAUA,EAAOnX,GAAUmX,EAAOpS,QAAQ,MAAO/E,GAGvE,IAAIwK,GAAU,GAEd,SAAS07H,GAAaC,EAAMC,GACxB,IAAIC,EAAYF,EAAK/+G,cACrB5c,GAAQ67H,GAAa77H,GAAQ67H,EAAY,KAAO77H,GAAQ47H,GAAaD,EAGzE,SAASG,GAAeh0G,GACpB,MAAwB,kBAAVA,EACR9nB,GAAQ8nB,IAAU9nB,GAAQ8nB,EAAMlL,oBAChCjH,EAGV,SAASomH,GAAqBC,GAC1B,IACIC,EACApE,EAFAqE,EAAkB,GAItB,IAAKrE,KAAQmE,EACL1G,EAAW0G,EAAanE,KACxBoE,EAAiBH,GAAejE,GAC5BoE,IACAC,EAAgBD,GAAkBD,EAAYnE,KAK1D,OAAOqE,EAGX,IAAIC,GAAa,GAEjB,SAASC,GAAgBT,EAAMU,GAC3BF,GAAWR,GAAQU,EAGvB,SAASC,GAAoBC,GACzB,IACI7hH,EADAoN,EAAQ,GAEZ,IAAKpN,KAAK6hH,EACFjH,EAAWiH,EAAU7hH,IACrBoN,EAAM3oB,KAAK,CAAEw8H,KAAMjhH,EAAG2hH,SAAUF,GAAWzhH,KAMnD,OAHAoN,EAAM1H,MAAK,SAAUjN,EAAGtB,GACpB,OAAOsB,EAAEkpH,SAAWxqH,EAAEwqH,YAEnBv0G,EAGX,SAAS00G,GAAWC,GAChB,OAAQA,EAAO,IAAM,GAAKA,EAAO,MAAQ,GAAMA,EAAO,MAAQ,EAGlE,SAASC,GAAS1mI,GACd,OAAIA,EAAS,EAEFgD,KAAKg3B,KAAKh6B,IAAW,EAErBgD,KAAKi6B,MAAMj9B,GAI1B,SAAS2mI,GAAMC,GACX,IAAIC,GAAiBD,EACjB7kI,EAAQ,EAMZ,OAJsB,IAAlB8kI,GAAuB5f,SAAS4f,KAChC9kI,EAAQ2kI,GAASG,IAGd9kI,EAGX,SAAS+kI,GAAWnB,EAAMoB,GACtB,OAAO,SAAUhlI,GACb,OAAa,MAATA,GACAilI,GAAM3qI,KAAMspI,EAAM5jI,GAClBkF,EAAMs7H,aAAalmI,KAAM0qI,GAClB1qI,MAEA2F,GAAI3F,KAAMspI,IAK7B,SAAS3jI,GAAI+tF,EAAK41C,GACd,OAAO51C,EAAIixC,UACLjxC,EAAIqxC,GAAG,OAASrxC,EAAImyC,OAAS,MAAQ,IAAMyD,KAC3C/6B,IAGV,SAASo8B,GAAMj3C,EAAK41C,EAAM5jI,GAClBguF,EAAIixC,YAAcr7E,MAAM5jD,KAEX,aAAT4jI,GACAa,GAAWz2C,EAAI02C,SACC,IAAhB12C,EAAIl1E,SACW,KAAfk1E,EAAI33C,QAEJr2C,EAAQ4kI,GAAM5kI,GACdguF,EAAIqxC,GAAG,OAASrxC,EAAImyC,OAAS,MAAQ,IAAMyD,GACvC5jI,EACAguF,EAAIl1E,QACJosH,GAAYllI,EAAOguF,EAAIl1E,WAG3Bk1E,EAAIqxC,GAAG,OAASrxC,EAAImyC,OAAS,MAAQ,IAAMyD,GAAM5jI,IAO7D,SAASmlI,GAAUp1G,GAEf,OADAA,EAAQg0G,GAAeh0G,GACnBhR,EAAWzkB,KAAKy1B,IACTz1B,KAAKy1B,KAETz1B,KAGX,SAAS8qI,GAAUr1G,EAAO/vB,GACtB,GAAqB,kBAAV+vB,EAAoB,CAC3BA,EAAQi0G,GAAqBj0G,GAC7B,IACI/rB,EADAqhI,EAAcd,GAAoBx0G,GAElCu1G,EAAiBD,EAAY3hI,OACjC,IAAKM,EAAI,EAAGA,EAAIshI,EAAgBthI,IAC5B1J,KAAK+qI,EAAYrhI,GAAG4/H,MAAM7zG,EAAMs1G,EAAYrhI,GAAG4/H,YAInD,GADA7zG,EAAQg0G,GAAeh0G,GACnBhR,EAAWzkB,KAAKy1B,IAChB,OAAOz1B,KAAKy1B,GAAO/vB,GAG3B,OAAO1F,KAGX,IAoBIu0D,GApBA02E,GAAS,KACTC,GAAS,OACTC,GAAS,QACTC,GAAS,QACTC,GAAS,aACTC,GAAY,QACZC,GAAY,YACZC,GAAY,gBACZC,GAAY,UACZC,GAAY,UACZC,GAAY,eACZC,GAAgB,MAChBC,GAAc,WACdC,GAAc,qBACdC,GAAmB,0BACnBC,GAAiB,uBAGjBC,GACI,wJAKR,SAASC,GAAc3iI,EAAO0G,EAAOk8H,GACjC53E,GAAQhrD,GAASkb,EAAWxU,GACtBA,EACA,SAAUm8H,EAAUlE,GAChB,OAAOkE,GAAYD,EAAcA,EAAcl8H,GAI7D,SAASo8H,GAAsB9iI,EAAO08H,GAClC,OAAKhD,EAAW1uE,GAAShrD,GAIlBgrD,GAAQhrD,GAAO08H,EAAOhB,QAASgB,EAAOF,SAHlC,IAAI9oF,OAAOqvF,GAAe/iI,IAOzC,SAAS+iI,GAAe3qI,GACpB,OAAO4qI,GACH5qI,EACKuG,QAAQ,KAAM,IACdA,QACG,uCACA,SAAUm5F,EAASmrC,EAAIC,EAAIC,EAAIC,GAC3B,OAAOH,GAAMC,GAAMC,GAAMC,MAM7C,SAASJ,GAAY5qI,GACjB,OAAOA,EAAEuG,QAAQ,yBAA0B,QAjC/CqsD,GAAU,GAoCV,IAAI3sD,GAAS,GAEb,SAASglI,GAAcrjI,EAAOE,GAC1B,IAAIC,EAEAmjI,EADA5E,EAAOx+H,EAWX,IATqB,kBAAVF,IACPA,EAAQ,CAACA,IAET2mD,EAASzmD,KACTw+H,EAAO,SAAUpjI,EAAO+tE,GACpBA,EAAMnpE,GAAY6gI,GAAMzlI,KAGhCgoI,EAAWtjI,EAAMH,OACZM,EAAI,EAAGA,EAAImjI,EAAUnjI,IACtB9B,GAAO2B,EAAMG,IAAMu+H,EAI3B,SAAS6E,GAAkBvjI,EAAOE,GAC9BmjI,GAAcrjI,GAAO,SAAU1E,EAAO+tE,EAAOqzD,EAAQ18H,GACjD08H,EAAO8G,GAAK9G,EAAO8G,IAAM,GACzBtjI,EAAS5E,EAAOohI,EAAO8G,GAAI9G,EAAQ18H,MAI3C,SAASyjI,GAAwBzjI,EAAO1E,EAAOohI,GAC9B,MAATphI,GAAiBo+H,EAAWr7H,GAAQ2B,IACpC3B,GAAO2B,GAAO1E,EAAOohI,EAAOnrG,GAAImrG,EAAQ18H,GAIhD,IAcI2E,GAdA++H,GAAO,EACPC,GAAQ,EACRC,GAAO,EACPC,GAAO,EACPC,GAAS,EACTC,GAAS,EACTC,GAAc,EACdC,GAAO,EACPC,GAAU,EAEd,SAASC,GAAIjqI,EAAGyY,GACZ,OAASzY,EAAIyY,EAAKA,GAAKA,EAoB3B,SAAS0uH,GAAYR,EAAM5rH,GACvB,GAAI8qC,MAAM8gF,IAAS9gF,MAAM9qC,GACrB,OAAO+vF,IAEX,IAAIo/B,EAAWD,GAAIlvH,EAAO,IAE1B,OADA4rH,IAAS5rH,EAAQmvH,GAAY,GACT,IAAbA,EACDxD,GAAWC,GACP,GACA,GACJ,GAAOuD,EAAW,EAAK,EAxB7Bz/H,GADAlB,MAAM3E,UAAU6F,QACNlB,MAAM3E,UAAU6F,QAEhB,SAAU/F,GAEhB,IAAIuB,EACJ,IAAKA,EAAI,EAAGA,EAAI1J,KAAKoJ,SAAUM,EAC3B,GAAI1J,KAAK0J,KAAOvB,EACZ,OAAOuB,EAGf,OAAQ,GAmBhBq+H,EAAe,IAAK,CAAC,KAAM,GAAI,MAAM,WACjC,OAAO/nI,KAAKwe,QAAU,KAG1BupH,EAAe,MAAO,EAAG,GAAG,SAAUztH,GAClC,OAAOta,KAAKkoI,aAAa5nI,YAAYN,KAAMsa,MAG/CytH,EAAe,OAAQ,EAAG,GAAG,SAAUztH,GACnC,OAAOta,KAAKkoI,aAAa9nI,OAAOJ,KAAMsa,MAK1C+uH,GAAa,QAAS,KAItBU,GAAgB,QAAS,GAIzBmC,GAAc,IAAKZ,IACnBY,GAAc,KAAMZ,GAAWJ,IAC/BgB,GAAc,OAAO,SAAUE,EAAU7I,GACrC,OAAOA,EAAO9kH,iBAAiB2tH,MAEnCF,GAAc,QAAQ,SAAUE,EAAU7I,GACtC,OAAOA,EAAOjlH,YAAY8tH,MAG9BQ,GAAc,CAAC,IAAK,OAAO,SAAU/nI,EAAO+tE,GACxCA,EAAMs6D,IAAS5C,GAAMzlI,GAAS,KAGlC+nI,GAAc,CAAC,MAAO,SAAS,SAAU/nI,EAAO+tE,EAAOqzD,EAAQ18H,GAC3D,IAAIiV,EAAQynH,EAAOF,QAAQ1nH,YAAYxZ,EAAO0E,EAAO08H,EAAOhB,SAE/C,MAATzmH,EACAo0D,EAAMs6D,IAAS1uH,EAEfimH,EAAgBwB,GAAQhC,aAAep/H,KAM/C,IAAI+oI,GACI,wFAAwFvtI,MACpF,KAERwtI,GACI,kDAAkDxtI,MAAM,KAC5DytI,GAAmB,gCACnBC,GAA0B9B,GAC1B+B,GAAqB/B,GAEzB,SAASgC,GAAapsI,EAAGyY,GACrB,OAAKzY,EAKE8vB,EAAQ3xB,KAAKkuI,SACdluI,KAAKkuI,QAAQrsI,EAAE2c,SACfxe,KAAKkuI,SACAluI,KAAKkuI,QAAQ7uH,UAAYyuH,IAAkBzjI,KAAKiQ,GAC3C,SACA,cACRzY,EAAE2c,SAVCmT,EAAQ3xB,KAAKkuI,SACdluI,KAAKkuI,QACLluI,KAAKkuI,QAAQ,cAW3B,SAASC,GAAkBtsI,EAAGyY,GAC1B,OAAKzY,EAKE8vB,EAAQ3xB,KAAKouI,cACdpuI,KAAKouI,aAAavsI,EAAE2c,SACpBxe,KAAKouI,aACDN,GAAiBzjI,KAAKiQ,GAAU,SAAW,cAC7CzY,EAAE2c,SARCmT,EAAQ3xB,KAAKouI,cACdpuI,KAAKouI,aACLpuI,KAAKouI,aAAa,cAShC,SAASC,GAAkBC,EAAWh0H,EAAQkpH,GAC1C,IAAI95H,EACAoP,EACA46E,EACA66C,EAAMD,EAAUE,oBACpB,IAAKxuI,KAAKyuI,aAKN,IAHAzuI,KAAKyuI,aAAe,GACpBzuI,KAAK0uI,iBAAmB,GACxB1uI,KAAK2uI,kBAAoB,GACpBjlI,EAAI,EAAGA,EAAI,KAAMA,EAClBgqF,EAAM4vC,EAAU,CAAC,IAAM55H,IACvB1J,KAAK2uI,kBAAkBjlI,GAAK1J,KAAKM,YAC7BozF,EACA,IACF86C,oBACFxuI,KAAK0uI,iBAAiBhlI,GAAK1J,KAAKI,OAAOszF,EAAK,IAAI86C,oBAIxD,OAAIhL,EACe,QAAXlpH,GACAxB,EAAK5K,GAAQ3F,KAAKvI,KAAK2uI,kBAAmBJ,IAC3B,IAARz1H,EAAYA,EAAK,OAExBA,EAAK5K,GAAQ3F,KAAKvI,KAAK0uI,iBAAkBH,IAC1B,IAARz1H,EAAYA,EAAK,MAGb,QAAXwB,GACAxB,EAAK5K,GAAQ3F,KAAKvI,KAAK2uI,kBAAmBJ,IAC9B,IAARz1H,EACOA,GAEXA,EAAK5K,GAAQ3F,KAAKvI,KAAK0uI,iBAAkBH,IAC1B,IAARz1H,EAAYA,EAAK,QAExBA,EAAK5K,GAAQ3F,KAAKvI,KAAK0uI,iBAAkBH,IAC7B,IAARz1H,EACOA,GAEXA,EAAK5K,GAAQ3F,KAAKvI,KAAK2uI,kBAAmBJ,IAC3B,IAARz1H,EAAYA,EAAK,OAKpC,SAAS81H,GAAkBN,EAAWh0H,EAAQkpH,GAC1C,IAAI95H,EAAGgqF,EAAKzjF,EAEZ,GAAIjQ,KAAK6uI,kBACL,OAAOR,GAAkB9lI,KAAKvI,KAAMsuI,EAAWh0H,EAAQkpH,GAY3D,IATKxjI,KAAKyuI,eACNzuI,KAAKyuI,aAAe,GACpBzuI,KAAK0uI,iBAAmB,GACxB1uI,KAAK2uI,kBAAoB,IAMxBjlI,EAAI,EAAGA,EAAI,GAAIA,IAAK,CAmBrB,GAjBAgqF,EAAM4vC,EAAU,CAAC,IAAM55H,IACnB85H,IAAWxjI,KAAK0uI,iBAAiBhlI,KACjC1J,KAAK0uI,iBAAiBhlI,GAAK,IAAIuzC,OAC3B,IAAMj9C,KAAKI,OAAOszF,EAAK,IAAIxrF,QAAQ,IAAK,IAAM,IAC9C,KAEJlI,KAAK2uI,kBAAkBjlI,GAAK,IAAIuzC,OAC5B,IAAMj9C,KAAKM,YAAYozF,EAAK,IAAIxrF,QAAQ,IAAK,IAAM,IACnD,MAGHs7H,GAAWxjI,KAAKyuI,aAAa/kI,KAC9BuG,EACI,IAAMjQ,KAAKI,OAAOszF,EAAK,IAAM,KAAO1zF,KAAKM,YAAYozF,EAAK,IAC9D1zF,KAAKyuI,aAAa/kI,GAAK,IAAIuzC,OAAOhtC,EAAM/H,QAAQ,IAAK,IAAK,MAI1Ds7H,GACW,SAAXlpH,GACAta,KAAK0uI,iBAAiBhlI,GAAGW,KAAKikI,GAE9B,OAAO5kI,EACJ,GACH85H,GACW,QAAXlpH,GACAta,KAAK2uI,kBAAkBjlI,GAAGW,KAAKikI,GAE/B,OAAO5kI,EACJ,IAAK85H,GAAUxjI,KAAKyuI,aAAa/kI,GAAGW,KAAKikI,GAC5C,OAAO5kI,GAOnB,SAASolI,GAASp7C,EAAKhuF,GACnB,IAAIqpI,EAEJ,IAAKr7C,EAAIixC,UAEL,OAAOjxC,EAGX,GAAqB,kBAAVhuF,EACP,GAAI,QAAQ2E,KAAK3E,GACbA,EAAQ4kI,GAAM5kI,QAId,GAFAA,EAAQguF,EAAIw0C,aAAa7pH,YAAY3Y,IAEhCwqD,EAASxqD,GACV,OAAOguF,EAOnB,OAFAq7C,EAAapoI,KAAKC,IAAI8sF,EAAI33C,OAAQ6uF,GAAYl3C,EAAI02C,OAAQ1kI,IAC1DguF,EAAIqxC,GAAG,OAASrxC,EAAImyC,OAAS,MAAQ,IAAM,SAASngI,EAAOqpI,GACpDr7C,EAGX,SAASs7C,GAAYtpI,GACjB,OAAa,MAATA,GACAopI,GAAS9uI,KAAM0F,GACfkF,EAAMs7H,aAAalmI,MAAM,GAClBA,MAEA2F,GAAI3F,KAAM,SAIzB,SAASivI,KACL,OAAOrE,GAAY5qI,KAAKoqI,OAAQpqI,KAAKwe,SAGzC,SAASC,GAAiB2tH,GACtB,OAAIpsI,KAAK6uI,mBACA5L,EAAWjjI,KAAM,iBAClBkvI,GAAmB3mI,KAAKvI,MAExBosI,EACOpsI,KAAKmvI,wBAELnvI,KAAKovI,oBAGXnM,EAAWjjI,KAAM,uBAClBA,KAAKovI,kBAAoBrB,IAEtB/tI,KAAKmvI,yBAA2B/C,EACjCpsI,KAAKmvI,wBACLnvI,KAAKovI,mBAInB,SAAS9wH,GAAY8tH,GACjB,OAAIpsI,KAAK6uI,mBACA5L,EAAWjjI,KAAM,iBAClBkvI,GAAmB3mI,KAAKvI,MAExBosI,EACOpsI,KAAKqvI,mBAELrvI,KAAKsvI,eAGXrM,EAAWjjI,KAAM,kBAClBA,KAAKsvI,aAAetB,IAEjBhuI,KAAKqvI,oBAAsBjD,EAC5BpsI,KAAKqvI,mBACLrvI,KAAKsvI,cAInB,SAASJ,KACL,SAASK,EAAUzuH,EAAGtB,GAClB,OAAOA,EAAEpW,OAAS0X,EAAE1X,OAGxB,IAGIM,EACAgqF,EAJA87C,EAAc,GACdC,EAAa,GACbC,EAAc,GAGlB,IAAKhmI,EAAI,EAAGA,EAAI,GAAIA,IAEhBgqF,EAAM4vC,EAAU,CAAC,IAAM55H,IACvB8lI,EAAY1iI,KAAK9M,KAAKM,YAAYozF,EAAK,KACvC+7C,EAAW3iI,KAAK9M,KAAKI,OAAOszF,EAAK,KACjCg8C,EAAY5iI,KAAK9M,KAAKI,OAAOszF,EAAK,KAClCg8C,EAAY5iI,KAAK9M,KAAKM,YAAYozF,EAAK,KAO3C,IAHA87C,EAAYzhH,KAAKwhH,GACjBE,EAAW1hH,KAAKwhH,GAChBG,EAAY3hH,KAAKwhH,GACZ7lI,EAAI,EAAGA,EAAI,GAAIA,IAChB8lI,EAAY9lI,GAAK6iI,GAAYiD,EAAY9lI,IACzC+lI,EAAW/lI,GAAK6iI,GAAYkD,EAAW/lI,IAE3C,IAAKA,EAAI,EAAGA,EAAI,GAAIA,IAChBgmI,EAAYhmI,GAAK6iI,GAAYmD,EAAYhmI,IAG7C1J,KAAKsvI,aAAe,IAAIryF,OAAO,KAAOyyF,EAAYpiI,KAAK,KAAO,IAAK,KACnEtN,KAAKovI,kBAAoBpvI,KAAKsvI,aAC9BtvI,KAAKqvI,mBAAqB,IAAIpyF,OAC1B,KAAOwyF,EAAWniI,KAAK,KAAO,IAC9B,KAEJtN,KAAKmvI,wBAA0B,IAAIlyF,OAC/B,KAAOuyF,EAAYliI,KAAK,KAAO,IAC/B,KAiDR,SAASqiI,GAAWvF,GAChB,OAAOD,GAAWC,GAAQ,IAAM,IA5CpCrC,EAAe,IAAK,EAAG,GAAG,WACtB,IAAI1lI,EAAIrC,KAAKoqI,OACb,OAAO/nI,GAAK,KAAOglI,EAAShlI,EAAG,GAAK,IAAMA,KAG9C0lI,EAAe,EAAG,CAAC,KAAM,GAAI,GAAG,WAC5B,OAAO/nI,KAAKoqI,OAAS,OAGzBrC,EAAe,EAAG,CAAC,OAAQ,GAAI,EAAG,QAClCA,EAAe,EAAG,CAAC,QAAS,GAAI,EAAG,QACnCA,EAAe,EAAG,CAAC,SAAU,GAAG,GAAO,EAAG,QAI1CsB,GAAa,OAAQ,KAIrBU,GAAgB,OAAQ,GAIxBmC,GAAc,IAAKL,IACnBK,GAAc,KAAMZ,GAAWJ,IAC/BgB,GAAc,OAAQR,GAAWN,IACjCc,GAAc,QAASP,GAAWN,IAClCa,GAAc,SAAUP,GAAWN,IAEnCuB,GAAc,CAAC,QAAS,UAAWK,IACnCL,GAAc,QAAQ,SAAU/nI,EAAO+tE,GACnCA,EAAMq6D,IACe,IAAjBpoI,EAAMuE,OAAewB,EAAMglI,kBAAkB/qI,GAASylI,GAAMzlI,MAEpE+nI,GAAc,MAAM,SAAU/nI,EAAO+tE,GACjCA,EAAMq6D,IAAQriI,EAAMglI,kBAAkB/qI,MAE1C+nI,GAAc,KAAK,SAAU/nI,EAAO+tE,GAChCA,EAAMq6D,IAAQloI,SAASF,EAAO,OAWlC+F,EAAMglI,kBAAoB,SAAU/qI,GAChC,OAAOylI,GAAMzlI,IAAUylI,GAAMzlI,GAAS,GAAK,KAAO,MAKtD,IAAIgrI,GAAapF,GAAW,YAAY,GAExC,SAASqF,KACL,OAAO3F,GAAWnqI,KAAKoqI,QAG3B,SAAS2F,GAAW1tI,EAAGR,EAAGI,EAAGF,EAAGI,EAAGR,EAAGquI,GAGlC,IAAIj0F,EAYJ,OAVI15C,EAAI,KAAOA,GAAK,GAEhB05C,EAAO,IAAIrkC,KAAKrV,EAAI,IAAKR,EAAGI,EAAGF,EAAGI,EAAGR,EAAGquI,GACpCplB,SAAS7uE,EAAKI,gBACdJ,EAAKk0F,YAAY5tI,IAGrB05C,EAAO,IAAIrkC,KAAKrV,EAAGR,EAAGI,EAAGF,EAAGI,EAAGR,EAAGquI,GAG/Bj0F,EAGX,SAASm0F,GAAc7tI,GACnB,IAAI05C,EAAMlvC,EAcV,OAZIxK,EAAI,KAAOA,GAAK,GAChBwK,EAAOG,MAAM3E,UAAUoE,MAAMlE,KAAKY,WAElC0D,EAAK,GAAKxK,EAAI,IACd05C,EAAO,IAAIrkC,KAAKA,KAAKy4H,IAAIjjI,MAAM,KAAML,IACjC+9G,SAAS7uE,EAAKq0F,mBACdr0F,EAAKs0F,eAAehuI,IAGxB05C,EAAO,IAAIrkC,KAAKA,KAAKy4H,IAAIjjI,MAAM,KAAM/D,YAGlC4yC,EAIX,SAASu0F,GAAgBlG,EAAM5nI,EAAKC,GAChC,IACI8tI,EAAM,EAAI/tI,EAAMC,EAEhB+tI,GAAS,EAAIN,GAAc9F,EAAM,EAAGmG,GAAKE,YAAcjuI,GAAO,EAElE,OAAQguI,EAAQD,EAAM,EAI1B,SAASG,GAAmBtG,EAAM7nI,EAAMouI,EAASnuI,EAAKC,GAClD,IAGImuI,EACAC,EAJAC,GAAgB,EAAIH,EAAUnuI,GAAO,EACrCuuI,EAAaT,GAAgBlG,EAAM5nI,EAAKC,GACxCuuI,EAAY,EAAI,GAAKzuI,EAAO,GAAKuuI,EAAeC,EAepD,OAXIC,GAAa,GACbJ,EAAUxG,EAAO,EACjByG,EAAelB,GAAWiB,GAAWI,GAC9BA,EAAYrB,GAAWvF,IAC9BwG,EAAUxG,EAAO,EACjByG,EAAeG,EAAYrB,GAAWvF,KAEtCwG,EAAUxG,EACVyG,EAAeG,GAGZ,CACH5G,KAAMwG,EACNI,UAAWH,GAInB,SAASI,GAAWv9C,EAAKlxF,EAAKC,GAC1B,IAEIyuI,EACAN,EAHAG,EAAaT,GAAgB58C,EAAI02C,OAAQ5nI,EAAKC,GAC9CF,EAAOoE,KAAKi6B,OAAO8yD,EAAIs9C,YAAcD,EAAa,GAAK,GAAK,EAehE,OAXIxuI,EAAO,GACPquI,EAAUl9C,EAAI02C,OAAS,EACvB8G,EAAU3uI,EAAO4uI,GAAYP,EAASpuI,EAAKC,IACpCF,EAAO4uI,GAAYz9C,EAAI02C,OAAQ5nI,EAAKC,IAC3CyuI,EAAU3uI,EAAO4uI,GAAYz9C,EAAI02C,OAAQ5nI,EAAKC,GAC9CmuI,EAAUl9C,EAAI02C,OAAS,IAEvBwG,EAAUl9C,EAAI02C,OACd8G,EAAU3uI,GAGP,CACHA,KAAM2uI,EACN9G,KAAMwG,GAId,SAASO,GAAY/G,EAAM5nI,EAAKC,GAC5B,IAAIsuI,EAAaT,GAAgBlG,EAAM5nI,EAAKC,GACxC2uI,EAAiBd,GAAgBlG,EAAO,EAAG5nI,EAAKC,GACpD,OAAQktI,GAAWvF,GAAQ2G,EAAaK,GAAkB,EAoC9D,SAASC,GAAW39C,GAChB,OAAOu9C,GAAWv9C,EAAK1zF,KAAKsxI,MAAM9uI,IAAKxC,KAAKsxI,MAAM7uI,KAAKF,KAhC3DwlI,EAAe,IAAK,CAAC,KAAM,GAAI,KAAM,QACrCA,EAAe,IAAK,CAAC,KAAM,GAAI,KAAM,WAIrCsB,GAAa,OAAQ,KACrBA,GAAa,UAAW,KAIxBU,GAAgB,OAAQ,GACxBA,GAAgB,UAAW,GAI3BmC,GAAc,IAAKZ,IACnBY,GAAc,KAAMZ,GAAWJ,IAC/BgB,GAAc,IAAKZ,IACnBY,GAAc,KAAMZ,GAAWJ,IAE/B4B,GACI,CAAC,IAAK,KAAM,IAAK,OACjB,SAAUjoI,EAAOtC,EAAM0jI,EAAQ18H,GAC3BhH,EAAKgH,EAAMomB,OAAO,EAAG,IAAM26G,GAAMzlI,MAYzC,IAAI0sI,GAAoB,CACpB/uI,IAAK,EACLC,IAAK,GAGT,SAAS+uI,KACL,OAAOxxI,KAAKsxI,MAAM9uI,IAGtB,SAASivI,KACL,OAAOzxI,KAAKsxI,MAAM7uI,IAKtB,SAASivI,GAAW7sI,GAChB,IAAItC,EAAOvC,KAAKkoI,aAAa3lI,KAAKvC,MAClC,OAAgB,MAAT6E,EAAgBtC,EAAOvC,KAAKoN,IAAqB,GAAhBvI,EAAQtC,GAAW,KAG/D,SAASovI,GAAc9sI,GACnB,IAAItC,EAAO0uI,GAAWjxI,KAAM,EAAG,GAAGuC,KAClC,OAAgB,MAATsC,EAAgBtC,EAAOvC,KAAKoN,IAAqB,GAAhBvI,EAAQtC,GAAW,KAgE/D,SAASqvI,GAAa/sI,EAAO0+H,GACzB,MAAqB,kBAAV1+H,EACAA,EAGNykD,MAAMzkD,IAIXA,EAAQ0+H,EAAOxgD,cAAcl+E,GACR,kBAAVA,EACAA,EAGJ,MARIE,SAASF,EAAO,IAW/B,SAASgtI,GAAgBhtI,EAAO0+H,GAC5B,MAAqB,kBAAV1+H,EACA0+H,EAAOxgD,cAAcl+E,GAAS,GAAK,EAEvCykD,MAAMzkD,GAAS,KAAOA,EAIjC,SAASitI,GAAcC,EAAItuI,GACvB,OAAOsuI,EAAGtlI,MAAMhJ,EAAG,GAAGye,OAAO6vH,EAAGtlI,MAAM,EAAGhJ,IArF7CskI,EAAe,IAAK,EAAG,KAAM,OAE7BA,EAAe,KAAM,EAAG,GAAG,SAAUztH,GACjC,OAAOta,KAAKkoI,aAAaznI,YAAYT,KAAMsa,MAG/CytH,EAAe,MAAO,EAAG,GAAG,SAAUztH,GAClC,OAAOta,KAAKkoI,aAAa1nI,cAAcR,KAAMsa,MAGjDytH,EAAe,OAAQ,EAAG,GAAG,SAAUztH,GACnC,OAAOta,KAAKkoI,aAAa3nI,SAASP,KAAMsa,MAG5CytH,EAAe,IAAK,EAAG,EAAG,WAC1BA,EAAe,IAAK,EAAG,EAAG,cAI1BsB,GAAa,MAAO,KACpBA,GAAa,UAAW,KACxBA,GAAa,aAAc,KAG3BU,GAAgB,MAAO,IACvBA,GAAgB,UAAW,IAC3BA,GAAgB,aAAc,IAI9BmC,GAAc,IAAKZ,IACnBY,GAAc,IAAKZ,IACnBY,GAAc,IAAKZ,IACnBY,GAAc,MAAM,SAAUE,EAAU7I,GACpC,OAAOA,EAAOyO,iBAAiB5F,MAEnCF,GAAc,OAAO,SAAUE,EAAU7I,GACrC,OAAOA,EAAO0O,mBAAmB7F,MAErCF,GAAc,QAAQ,SAAUE,EAAU7I,GACtC,OAAOA,EAAO2O,cAAc9F,MAGhCU,GAAkB,CAAC,KAAM,MAAO,SAAS,SAAUjoI,EAAOtC,EAAM0jI,EAAQ18H,GACpE,IAAIonI,EAAU1K,EAAOF,QAAQhjD,cAAcl+E,EAAO0E,EAAO08H,EAAOhB,SAEjD,MAAX0L,EACApuI,EAAKN,EAAI0uI,EAETlM,EAAgBwB,GAAQjB,eAAiBngI,KAIjDioI,GAAkB,CAAC,IAAK,IAAK,MAAM,SAAUjoI,EAAOtC,EAAM0jI,EAAQ18H,GAC9DhH,EAAKgH,GAAS+gI,GAAMzlI,MAkCxB,IAAIstI,GACI,2DAA2D9xI,MAAM,KACrE+xI,GAA6B,8BAA8B/xI,MAAM,KACjEgyI,GAA2B,uBAAuBhyI,MAAM,KACxDiyI,GAAuBrG,GACvBsG,GAA4BtG,GAC5BuG,GAA0BvG,GAE9B,SAASwG,GAAe5wI,EAAGyY,GACvB,IAAI/Z,EAAWoxB,EAAQ3xB,KAAK0yI,WACtB1yI,KAAK0yI,UACL1yI,KAAK0yI,UACD7wI,IAAW,IAANA,GAAc7B,KAAK0yI,UAAUrzH,SAAShV,KAAKiQ,GAC1C,SACA,cAEhB,OAAa,IAANzY,EACDiwI,GAAcvxI,EAAUP,KAAKsxI,MAAM9uI,KACnCX,EACAtB,EAASsB,EAAE4f,OACXlhB,EAGV,SAASoyI,GAAoB9wI,GACzB,OAAa,IAANA,EACDiwI,GAAc9xI,KAAK4yI,eAAgB5yI,KAAKsxI,MAAM9uI,KAC9CX,EACA7B,KAAK4yI,eAAe/wI,EAAE4f,OACtBzhB,KAAK4yI,eAGf,SAASC,GAAkBhxI,GACvB,OAAa,IAANA,EACDiwI,GAAc9xI,KAAK8yI,aAAc9yI,KAAKsxI,MAAM9uI,KAC5CX,EACA7B,KAAK8yI,aAAajxI,EAAE4f,OACpBzhB,KAAK8yI,aAGf,SAASC,GAAoBC,EAAa14H,EAAQkpH,GAC9C,IAAI95H,EACAoP,EACA46E,EACA66C,EAAMyE,EAAYxE,oBACtB,IAAKxuI,KAAKizI,eAKN,IAJAjzI,KAAKizI,eAAiB,GACtBjzI,KAAKkzI,oBAAsB,GAC3BlzI,KAAKmzI,kBAAoB,GAEpBzpI,EAAI,EAAGA,EAAI,IAAKA,EACjBgqF,EAAM4vC,EAAU,CAAC,IAAM,IAAI7hH,IAAI/X,GAC/B1J,KAAKmzI,kBAAkBzpI,GAAK1J,KAAKS,YAC7BizF,EACA,IACF86C,oBACFxuI,KAAKkzI,oBAAoBxpI,GAAK1J,KAAKQ,cAC/BkzF,EACA,IACF86C,oBACFxuI,KAAKizI,eAAevpI,GAAK1J,KAAKO,SAASmzF,EAAK,IAAI86C,oBAIxD,OAAIhL,EACe,SAAXlpH,GACAxB,EAAK5K,GAAQ3F,KAAKvI,KAAKizI,eAAgB1E,IACxB,IAARz1H,EAAYA,EAAK,MACN,QAAXwB,GACPxB,EAAK5K,GAAQ3F,KAAKvI,KAAKkzI,oBAAqB3E,IAC7B,IAARz1H,EAAYA,EAAK,OAExBA,EAAK5K,GAAQ3F,KAAKvI,KAAKmzI,kBAAmB5E,IAC3B,IAARz1H,EAAYA,EAAK,MAGb,SAAXwB,GACAxB,EAAK5K,GAAQ3F,KAAKvI,KAAKizI,eAAgB1E,IAC3B,IAARz1H,EACOA,GAEXA,EAAK5K,GAAQ3F,KAAKvI,KAAKkzI,oBAAqB3E,IAChC,IAARz1H,EACOA,GAEXA,EAAK5K,GAAQ3F,KAAKvI,KAAKmzI,kBAAmB5E,IAC3B,IAARz1H,EAAYA,EAAK,QACN,QAAXwB,GACPxB,EAAK5K,GAAQ3F,KAAKvI,KAAKkzI,oBAAqB3E,IAChC,IAARz1H,EACOA,GAEXA,EAAK5K,GAAQ3F,KAAKvI,KAAKizI,eAAgB1E,IAC3B,IAARz1H,EACOA,GAEXA,EAAK5K,GAAQ3F,KAAKvI,KAAKmzI,kBAAmB5E,IAC3B,IAARz1H,EAAYA,EAAK,SAExBA,EAAK5K,GAAQ3F,KAAKvI,KAAKmzI,kBAAmB5E,IAC9B,IAARz1H,EACOA,GAEXA,EAAK5K,GAAQ3F,KAAKvI,KAAKizI,eAAgB1E,IAC3B,IAARz1H,EACOA,GAEXA,EAAK5K,GAAQ3F,KAAKvI,KAAKkzI,oBAAqB3E,IAC7B,IAARz1H,EAAYA,EAAK,QAKpC,SAASs6H,GAAoBJ,EAAa14H,EAAQkpH,GAC9C,IAAI95H,EAAGgqF,EAAKzjF,EAEZ,GAAIjQ,KAAKqzI,oBACL,OAAON,GAAoBxqI,KAAKvI,KAAMgzI,EAAa14H,EAAQkpH,GAU/D,IAPKxjI,KAAKizI,iBACNjzI,KAAKizI,eAAiB,GACtBjzI,KAAKmzI,kBAAoB,GACzBnzI,KAAKkzI,oBAAsB,GAC3BlzI,KAAKszI,mBAAqB,IAGzB5pI,EAAI,EAAGA,EAAI,EAAGA,IAAK,CA6BpB,GA1BAgqF,EAAM4vC,EAAU,CAAC,IAAM,IAAI7hH,IAAI/X,GAC3B85H,IAAWxjI,KAAKszI,mBAAmB5pI,KACnC1J,KAAKszI,mBAAmB5pI,GAAK,IAAIuzC,OAC7B,IAAMj9C,KAAKO,SAASmzF,EAAK,IAAIxrF,QAAQ,IAAK,QAAU,IACpD,KAEJlI,KAAKkzI,oBAAoBxpI,GAAK,IAAIuzC,OAC9B,IAAMj9C,KAAKQ,cAAckzF,EAAK,IAAIxrF,QAAQ,IAAK,QAAU,IACzD,KAEJlI,KAAKmzI,kBAAkBzpI,GAAK,IAAIuzC,OAC5B,IAAMj9C,KAAKS,YAAYizF,EAAK,IAAIxrF,QAAQ,IAAK,QAAU,IACvD,MAGHlI,KAAKizI,eAAevpI,KACrBuG,EACI,IACAjQ,KAAKO,SAASmzF,EAAK,IACnB,KACA1zF,KAAKQ,cAAckzF,EAAK,IACxB,KACA1zF,KAAKS,YAAYizF,EAAK,IAC1B1zF,KAAKizI,eAAevpI,GAAK,IAAIuzC,OAAOhtC,EAAM/H,QAAQ,IAAK,IAAK,MAI5Ds7H,GACW,SAAXlpH,GACAta,KAAKszI,mBAAmB5pI,GAAGW,KAAK2oI,GAEhC,OAAOtpI,EACJ,GACH85H,GACW,QAAXlpH,GACAta,KAAKkzI,oBAAoBxpI,GAAGW,KAAK2oI,GAEjC,OAAOtpI,EACJ,GACH85H,GACW,OAAXlpH,GACAta,KAAKmzI,kBAAkBzpI,GAAGW,KAAK2oI,GAE/B,OAAOtpI,EACJ,IAAK85H,GAAUxjI,KAAKizI,eAAevpI,GAAGW,KAAK2oI,GAC9C,OAAOtpI,GAOnB,SAAS6pI,GAAgB1uI,GACrB,IAAK7E,KAAK2kI,UACN,OAAgB,MAAT9/H,EAAgB7E,KAAOuuG,IAElC,IAAI9sF,EAAMzhB,KAAK6lI,OAAS7lI,KAAK+kI,GAAG0L,YAAczwI,KAAK+kI,GAAGroF,SACtD,OAAa,MAAT73C,GACAA,EAAQ+sI,GAAa/sI,EAAO7E,KAAKkoI,cAC1BloI,KAAKoN,IAAIvI,EAAQ4c,EAAK,MAEtBA,EAIf,SAAS+xH,GAAsB3uI,GAC3B,IAAK7E,KAAK2kI,UACN,OAAgB,MAAT9/H,EAAgB7E,KAAOuuG,IAElC,IAAIoiC,GAAW3wI,KAAKyhB,MAAQ,EAAIzhB,KAAKkoI,aAAaoJ,MAAM9uI,KAAO,EAC/D,OAAgB,MAATqC,EAAgB8rI,EAAU3wI,KAAKoN,IAAIvI,EAAQ8rI,EAAS,KAG/D,SAAS8C,GAAmB5uI,GACxB,IAAK7E,KAAK2kI,UACN,OAAgB,MAAT9/H,EAAgB7E,KAAOuuG,IAOlC,GAAa,MAAT1pG,EAAe,CACf,IAAI8rI,EAAUkB,GAAgBhtI,EAAO7E,KAAKkoI,cAC1C,OAAOloI,KAAKyhB,IAAIzhB,KAAKyhB,MAAQ,EAAIkvH,EAAUA,EAAU,GAErD,OAAO3wI,KAAKyhB,OAAS,EAI7B,SAASywH,GAAc9F,GACnB,OAAIpsI,KAAKqzI,qBACApQ,EAAWjjI,KAAM,mBAClB0zI,GAAqBnrI,KAAKvI,MAE1BosI,EACOpsI,KAAK2zI,qBAEL3zI,KAAK4zI,iBAGX3Q,EAAWjjI,KAAM,oBAClBA,KAAK4zI,eAAiBtB,IAEnBtyI,KAAK2zI,sBAAwBvH,EAC9BpsI,KAAK2zI,qBACL3zI,KAAK4zI,gBAInB,SAAS3B,GAAmB7F,GACxB,OAAIpsI,KAAKqzI,qBACApQ,EAAWjjI,KAAM,mBAClB0zI,GAAqBnrI,KAAKvI,MAE1BosI,EACOpsI,KAAK6zI,0BAEL7zI,KAAK8zI,sBAGX7Q,EAAWjjI,KAAM,yBAClBA,KAAK8zI,oBAAsBvB,IAExBvyI,KAAK6zI,2BAA6BzH,EACnCpsI,KAAK6zI,0BACL7zI,KAAK8zI,qBAInB,SAAS9B,GAAiB5F,GACtB,OAAIpsI,KAAKqzI,qBACApQ,EAAWjjI,KAAM,mBAClB0zI,GAAqBnrI,KAAKvI,MAE1BosI,EACOpsI,KAAK+zI,wBAEL/zI,KAAKg0I,oBAGX/Q,EAAWjjI,KAAM,uBAClBA,KAAKg0I,kBAAoBxB,IAEtBxyI,KAAK+zI,yBAA2B3H,EACjCpsI,KAAK+zI,wBACL/zI,KAAKg0I,mBAInB,SAASN,KACL,SAASnE,EAAUzuH,EAAGtB,GAClB,OAAOA,EAAEpW,OAAS0X,EAAE1X,OAGxB,IAIIM,EACAgqF,EACAugD,EACAC,EACAC,EARAC,EAAY,GACZ5E,EAAc,GACdC,EAAa,GACbC,EAAc,GAMlB,IAAKhmI,EAAI,EAAGA,EAAI,EAAGA,IAEfgqF,EAAM4vC,EAAU,CAAC,IAAM,IAAI7hH,IAAI/X,GAC/BuqI,EAAO1H,GAAYvsI,KAAKS,YAAYizF,EAAK,KACzCwgD,EAAS3H,GAAYvsI,KAAKQ,cAAckzF,EAAK,KAC7CygD,EAAQ5H,GAAYvsI,KAAKO,SAASmzF,EAAK,KACvC0gD,EAAUtnI,KAAKmnI,GACfzE,EAAY1iI,KAAKonI,GACjBzE,EAAW3iI,KAAKqnI,GAChBzE,EAAY5iI,KAAKmnI,GACjBvE,EAAY5iI,KAAKonI,GACjBxE,EAAY5iI,KAAKqnI,GAIrBC,EAAUrmH,KAAKwhH,GACfC,EAAYzhH,KAAKwhH,GACjBE,EAAW1hH,KAAKwhH,GAChBG,EAAY3hH,KAAKwhH,GAEjBvvI,KAAK4zI,eAAiB,IAAI32F,OAAO,KAAOyyF,EAAYpiI,KAAK,KAAO,IAAK,KACrEtN,KAAK8zI,oBAAsB9zI,KAAK4zI,eAChC5zI,KAAKg0I,kBAAoBh0I,KAAK4zI,eAE9B5zI,KAAK2zI,qBAAuB,IAAI12F,OAC5B,KAAOwyF,EAAWniI,KAAK,KAAO,IAC9B,KAEJtN,KAAK6zI,0BAA4B,IAAI52F,OACjC,KAAOuyF,EAAYliI,KAAK,KAAO,IAC/B,KAEJtN,KAAK+zI,wBAA0B,IAAI92F,OAC/B,KAAOm3F,EAAU9mI,KAAK,KAAO,IAC7B,KAMR,SAAS+mI,KACL,OAAOr0I,KAAK+e,QAAU,IAAM,GAGhC,SAASu1H,KACL,OAAOt0I,KAAK+e,SAAW,GAiC3B,SAAShc,GAASwG,EAAOgrI,GACrBxM,EAAex+H,EAAO,EAAG,GAAG,WACxB,OAAOvJ,KAAKkoI,aAAanlI,SACrB/C,KAAK+e,QACL/e,KAAK6gB,UACL0zH,MAiBZ,SAASC,GAAcpI,EAAU7I,GAC7B,OAAOA,EAAOkR,eA2DlB,SAASC,GAAW7vI,GAGhB,MAAgD,OAAxCA,EAAQ,IAAI0lB,cAAc01D,OAAO,GAnH7C8nD,EAAe,IAAK,CAAC,KAAM,GAAI,EAAG,QAClCA,EAAe,IAAK,CAAC,KAAM,GAAI,EAAGsM,IAClCtM,EAAe,IAAK,CAAC,KAAM,GAAI,EAAGuM,IAElCvM,EAAe,MAAO,EAAG,GAAG,WACxB,MAAO,GAAKsM,GAAQnnI,MAAMlN,MAAQqnI,EAASrnI,KAAK6gB,UAAW,MAG/DknH,EAAe,QAAS,EAAG,GAAG,WAC1B,MACI,GACAsM,GAAQnnI,MAAMlN,MACdqnI,EAASrnI,KAAK6gB,UAAW,GACzBwmH,EAASrnI,KAAK65G,UAAW,MAIjCkuB,EAAe,MAAO,EAAG,GAAG,WACxB,MAAO,GAAK/nI,KAAK+e,QAAUsoH,EAASrnI,KAAK6gB,UAAW,MAGxDknH,EAAe,QAAS,EAAG,GAAG,WAC1B,MACI,GACA/nI,KAAK+e,QACLsoH,EAASrnI,KAAK6gB,UAAW,GACzBwmH,EAASrnI,KAAK65G,UAAW,MAcjC92G,GAAS,KAAK,GACdA,GAAS,KAAK,GAIdsmI,GAAa,OAAQ,KAGrBU,GAAgB,OAAQ,IAQxBmC,GAAc,IAAKsI,IACnBtI,GAAc,IAAKsI,IACnBtI,GAAc,IAAKZ,IACnBY,GAAc,IAAKZ,IACnBY,GAAc,IAAKZ,IACnBY,GAAc,KAAMZ,GAAWJ,IAC/BgB,GAAc,KAAMZ,GAAWJ,IAC/BgB,GAAc,KAAMZ,GAAWJ,IAE/BgB,GAAc,MAAOX,IACrBW,GAAc,QAASV,IACvBU,GAAc,MAAOX,IACrBW,GAAc,QAASV,IAEvBoB,GAAc,CAAC,IAAK,MAAOQ,IAC3BR,GAAc,CAAC,IAAK,OAAO,SAAU/nI,EAAO+tE,EAAOqzD,GAC/C,IAAI0O,EAASrK,GAAMzlI,GACnB+tE,EAAMw6D,IAAmB,KAAXuH,EAAgB,EAAIA,KAEtC/H,GAAc,CAAC,IAAK,MAAM,SAAU/nI,EAAO+tE,EAAOqzD,GAC9CA,EAAO2O,MAAQ3O,EAAOF,QAAQ3gI,KAAKP,GACnCohI,EAAO4O,UAAYhwI,KAEvB+nI,GAAc,CAAC,IAAK,OAAO,SAAU/nI,EAAO+tE,EAAOqzD,GAC/CrzD,EAAMw6D,IAAQ9C,GAAMzlI,GACpB4/H,EAAgBwB,GAAQf,SAAU,KAEtC0H,GAAc,OAAO,SAAU/nI,EAAO+tE,EAAOqzD,GACzC,IAAInnF,EAAMj6C,EAAMuE,OAAS,EACzBwpE,EAAMw6D,IAAQ9C,GAAMzlI,EAAM8qB,OAAO,EAAGmvB,IACpC8zB,EAAMy6D,IAAU/C,GAAMzlI,EAAM8qB,OAAOmvB,IACnC2lF,EAAgBwB,GAAQf,SAAU,KAEtC0H,GAAc,SAAS,SAAU/nI,EAAO+tE,EAAOqzD,GAC3C,IAAI6O,EAAOjwI,EAAMuE,OAAS,EACtB2rI,EAAOlwI,EAAMuE,OAAS,EAC1BwpE,EAAMw6D,IAAQ9C,GAAMzlI,EAAM8qB,OAAO,EAAGmlH,IACpCliE,EAAMy6D,IAAU/C,GAAMzlI,EAAM8qB,OAAOmlH,EAAM,IACzCliE,EAAM06D,IAAUhD,GAAMzlI,EAAM8qB,OAAOolH,IACnCtQ,EAAgBwB,GAAQf,SAAU,KAEtC0H,GAAc,OAAO,SAAU/nI,EAAO+tE,EAAOqzD,GACzC,IAAInnF,EAAMj6C,EAAMuE,OAAS,EACzBwpE,EAAMw6D,IAAQ9C,GAAMzlI,EAAM8qB,OAAO,EAAGmvB,IACpC8zB,EAAMy6D,IAAU/C,GAAMzlI,EAAM8qB,OAAOmvB,OAEvC8tF,GAAc,SAAS,SAAU/nI,EAAO+tE,EAAOqzD,GAC3C,IAAI6O,EAAOjwI,EAAMuE,OAAS,EACtB2rI,EAAOlwI,EAAMuE,OAAS,EAC1BwpE,EAAMw6D,IAAQ9C,GAAMzlI,EAAM8qB,OAAO,EAAGmlH,IACpCliE,EAAMy6D,IAAU/C,GAAMzlI,EAAM8qB,OAAOmlH,EAAM,IACzCliE,EAAM06D,IAAUhD,GAAMzlI,EAAM8qB,OAAOolH,OAWvC,IAAIC,GAA6B,gBAK7BC,GAAaxK,GAAW,SAAS,GAErC,SAASyK,GAAen2H,EAAO8B,EAAS5d,GACpC,OAAI8b,EAAQ,GACD9b,EAAU,KAAO,KAEjBA,EAAU,KAAO,KAIhC,IAuBIkyI,GAvBAC,GAAa,CACbn0I,SAAUkmI,EACVzmI,eAAgB8nI,EAChBx2C,YAAa42C,EACbrlI,QAASulI,EACTxlI,uBAAwBylI,EACxBvnI,aAAcynI,GAEd7oI,OAAQwtI,GACRttI,YAAautI,GAEbtrI,KAAMgvI,GAENhxI,SAAU4xI,GACV1xI,YAAa4xI,GACb7xI,cAAe4xI,GAEfxvI,cAAeoyI,IAIfK,GAAU,GACVC,GAAiB,GAGrB,SAASC,GAAaC,EAAMp+B,GACxB,IAAI1tG,EACA+rI,EAAO9uI,KAAKC,IAAI4uI,EAAKpsI,OAAQguG,EAAKhuG,QACtC,IAAKM,EAAI,EAAGA,EAAI+rI,EAAM/rI,GAAK,EACvB,GAAI8rI,EAAK9rI,KAAO0tG,EAAK1tG,GACjB,OAAOA,EAGf,OAAO+rI,EAGX,SAASC,GAAgB7xI,GACrB,OAAOA,EAAMA,EAAI0mB,cAAcriB,QAAQ,IAAK,KAAOrE,EAMvD,SAAS8xI,GAAa1oC,GAClB,IACIhhG,EACA+mB,EACAuwG,EACAljI,EAJAqJ,EAAI,EAMR,MAAOA,EAAIujG,EAAM7jG,OAAQ,CACrB/I,EAAQq1I,GAAgBzoC,EAAMvjG,IAAIrJ,MAAM,KACxC4L,EAAI5L,EAAM+I,OACV4pB,EAAO0iH,GAAgBzoC,EAAMvjG,EAAI,IACjCspB,EAAOA,EAAOA,EAAK3yB,MAAM,KAAO,KAChC,MAAO4L,EAAI,EAAG,CAEV,GADAs3H,EAASqS,GAAWv1I,EAAMoM,MAAM,EAAGR,GAAGqB,KAAK,MACvCi2H,EACA,OAAOA,EAEX,GACIvwG,GACAA,EAAK5pB,QAAU6C,GACfspI,GAAal1I,EAAO2yB,IAAS/mB,EAAI,EAGjC,MAEJA,IAEJvC,IAEJ,OAAOyrI,GAGX,SAASU,GAAiBvxI,GAEtB,OAAoC,MAA7BA,EAAKQ,MAAM,eAGtB,SAAS8wI,GAAWtxI,GAChB,IAAIwxI,EAAY,KAGhB,QACsBxyH,IAAlB+xH,GAAQ/wI,IACU,qBAAX0jE,GACPA,GACAA,EAAOC,SACP4tE,GAAiBvxI,GAEjB,IACIwxI,EAAYX,GAAaY,MACRrkE,EACjB,UAAe,KAAcptE,GAC7B0xI,GAAmBF,GACrB,MAAO3hI,GAGLkhI,GAAQ/wI,GAAQ,KAGxB,OAAO+wI,GAAQ/wI,GAMnB,SAAS0xI,GAAmBnyI,EAAKgQ,GAC7B,IAAIzI,EAqBJ,OApBIvH,IAEIuH,EADA+3H,EAAYtvH,GACLoiI,GAAUpyI,GAEV1D,GAAa0D,EAAKgQ,GAGzBzI,EAEA+pI,GAAe/pI,EAEQ,qBAAZunD,SAA2BA,QAAQuhB,MAE1CvhB,QAAQuhB,KACJ,UAAYrwE,EAAM,2CAM3BsxI,GAAaY,MAGxB,SAAS51I,GAAamE,EAAM2hI,GACxB,GAAe,OAAXA,EAAiB,CACjB,IAAI1C,EACAyD,EAAeoO,GAEnB,GADAnP,EAAOzhI,KAAOF,EACO,MAAjB+wI,GAAQ/wI,GACRoiI,EACI,uBACA,2OAKJM,EAAeqO,GAAQ/wI,GAAMqiI,aAC1B,GAA2B,MAAvBV,EAAOiQ,aACd,GAAoC,MAAhCb,GAAQpP,EAAOiQ,cACflP,EAAeqO,GAAQpP,EAAOiQ,cAAcvP,YACzC,CAEH,GADApD,EAASqS,GAAW3P,EAAOiQ,cACb,MAAV3S,EAUA,OAPK+R,GAAerP,EAAOiQ,gBACvBZ,GAAerP,EAAOiQ,cAAgB,IAE1CZ,GAAerP,EAAOiQ,cAAcppI,KAAK,CACrCxI,KAAMA,EACN2hI,OAAQA,IAEL,KATPe,EAAezD,EAAOoD,QA0BlC,OAbA0O,GAAQ/wI,GAAQ,IAAI4iI,EAAOH,EAAaC,EAAcf,IAElDqP,GAAehxI,IACfgxI,GAAehxI,GAAM2tB,SAAQ,SAAU/V,GACnC/b,GAAa+b,EAAE5X,KAAM4X,EAAE+pH,WAO/B+P,GAAmB1xI,GAEZ+wI,GAAQ/wI,GAIf,cADO+wI,GAAQ/wI,GACR,KAIf,SAAS6xI,GAAa7xI,EAAM2hI,GACxB,GAAc,MAAVA,EAAgB,CAChB,IAAI1C,EACA6S,EACApP,EAAeoO,GAEE,MAAjBC,GAAQ/wI,IAA+C,MAA9B+wI,GAAQ/wI,GAAM4xI,aAEvCb,GAAQ/wI,GAAMsB,IAAImhI,EAAasO,GAAQ/wI,GAAMqiI,QAASV,KAGtDmQ,EAAYR,GAAWtxI,GACN,MAAb8xI,IACApP,EAAeoP,EAAUzP,SAE7BV,EAASc,EAAaC,EAAcf,GACnB,MAAbmQ,IAIAnQ,EAAOzhI,KAAOF,GAElBi/H,EAAS,IAAI2D,EAAOjB,GACpB1C,EAAO2S,aAAeb,GAAQ/wI,GAC9B+wI,GAAQ/wI,GAAQi/H,GAIpByS,GAAmB1xI,QAGE,MAAjB+wI,GAAQ/wI,KAC0B,MAA9B+wI,GAAQ/wI,GAAM4xI,cACdb,GAAQ/wI,GAAQ+wI,GAAQ/wI,GAAM4xI,aAC1B5xI,IAAS0xI,MACTA,GAAmB1xI,IAEC,MAAjB+wI,GAAQ/wI,WACR+wI,GAAQ/wI,IAI3B,OAAO+wI,GAAQ/wI,GAInB,SAAS2xI,GAAUpyI,GACf,IAAI0/H,EAMJ,GAJI1/H,GAAOA,EAAIkiI,SAAWliI,EAAIkiI,QAAQgQ,QAClClyI,EAAMA,EAAIkiI,QAAQgQ,QAGjBlyI,EACD,OAAOsxI,GAGX,IAAKxjH,EAAQ9tB,GAAM,CAGf,GADA0/H,EAASqS,GAAW/xI,GAChB0/H,EACA,OAAOA,EAEX1/H,EAAM,CAACA,GAGX,OAAO8xI,GAAa9xI,GAGxB,SAASwyI,KACL,OAAOxwH,EAAKwvH,IAGhB,SAASiB,GAAcz0I,GACnB,IAAI66E,EACA57D,EAAIjf,EAAEi5B,GAuCV,OArCIha,IAAsC,IAAjC2jH,EAAgB5iI,GAAG66E,WACxBA,EACI57D,EAAEosH,IAAS,GAAKpsH,EAAEosH,IAAS,GACrBA,GACApsH,EAAEqsH,IAAQ,GAAKrsH,EAAEqsH,IAAQvC,GAAY9pH,EAAEmsH,IAAOnsH,EAAEosH,KAChDC,GACArsH,EAAEssH,IAAQ,GACVtsH,EAAEssH,IAAQ,IACG,KAAZtsH,EAAEssH,MACgB,IAAdtsH,EAAEusH,KACe,IAAdvsH,EAAEwsH,KACiB,IAAnBxsH,EAAEysH,KACVH,GACAtsH,EAAEusH,IAAU,GAAKvsH,EAAEusH,IAAU,GAC7BA,GACAvsH,EAAEwsH,IAAU,GAAKxsH,EAAEwsH,IAAU,GAC7BA,GACAxsH,EAAEysH,IAAe,GAAKzsH,EAAEysH,IAAe,IACvCA,IACC,EAGP9I,EAAgB5iI,GAAG00I,qBAClB75D,EAAWuwD,IAAQvwD,EAAWywD,MAE/BzwD,EAAWywD,IAEX1I,EAAgB5iI,GAAG20I,iBAAgC,IAAd95D,IACrCA,EAAW8wD,IAEX/I,EAAgB5iI,GAAG40I,mBAAkC,IAAd/5D,IACvCA,EAAW+wD,IAGfhJ,EAAgB5iI,GAAG66E,SAAWA,GAG3B76E,EAKX,IAAI60I,GACI,iJACJC,GACI,6IACJC,GAAU,wBACVC,GAAW,CACP,CAAC,eAAgB,uBACjB,CAAC,aAAc,mBACf,CAAC,eAAgB,kBACjB,CAAC,aAAc,eAAe,GAC9B,CAAC,WAAY,eACb,CAAC,UAAW,cAAc,GAC1B,CAAC,aAAc,cACf,CAAC,WAAY,SACb,CAAC,aAAc,eACf,CAAC,YAAa,eAAe,GAC7B,CAAC,UAAW,SACZ,CAAC,SAAU,SAAS,GACpB,CAAC,OAAQ,SAAS,IAGtBC,GAAW,CACP,CAAC,gBAAiB,uBAClB,CAAC,gBAAiB,sBAClB,CAAC,WAAY,kBACb,CAAC,QAAS,aACV,CAAC,cAAe,qBAChB,CAAC,cAAe,oBAChB,CAAC,SAAU,gBACX,CAAC,OAAQ,YACT,CAAC,KAAM,SAEXC,GAAkB,qBAElBxS,GACI,0LACJyS,GAAa,CACTC,GAAI,EACJC,IAAK,EACLC,KAAK,IACLC,KAAK,IACLC,KAAK,IACLC,KAAK,IACLC,KAAK,IACLC,KAAK,IACLC,KAAK,IACLC,KAAK,KAIb,SAASC,GAAc1R,GACnB,IAAIv8H,EACA1E,EAGA4yI,EACAl6F,EACAm6F,EACAC,EALAroI,EAASw2H,EAAOjkH,GAChBld,EAAQ4xI,GAAiBrzI,KAAKoM,IAAWknI,GAActzI,KAAKoM,GAK5DsoI,EAAclB,GAASztI,OACvB4uI,EAAclB,GAAS1tI,OAE3B,GAAItE,EAAO,CAEP,IADA2/H,EAAgBwB,GAAQ7B,KAAM,EACzB16H,EAAI,EAAG1E,EAAI+yI,EAAaruI,EAAI1E,EAAG0E,IAChC,GAAImtI,GAASntI,GAAG,GAAGrG,KAAKyB,EAAM,IAAK,CAC/B44C,EAAam5F,GAASntI,GAAG,GACzBkuI,GAA+B,IAAnBf,GAASntI,GAAG,GACxB,MAGR,GAAkB,MAAdg0C,EAEA,YADAuoF,EAAOrB,UAAW,GAGtB,GAAI9/H,EAAM,GAAI,CACV,IAAK4E,EAAI,EAAG1E,EAAIgzI,EAAatuI,EAAI1E,EAAG0E,IAChC,GAAIotI,GAASptI,GAAG,GAAGrG,KAAKyB,EAAM,IAAK,CAE/B+yI,GAAc/yI,EAAM,IAAM,KAAOgyI,GAASptI,GAAG,GAC7C,MAGR,GAAkB,MAAdmuI,EAEA,YADA5R,EAAOrB,UAAW,GAI1B,IAAKgT,GAA2B,MAAdC,EAEd,YADA5R,EAAOrB,UAAW,GAGtB,GAAI9/H,EAAM,GAAI,CACV,IAAI8xI,GAAQvzI,KAAKyB,EAAM,IAInB,YADAmhI,EAAOrB,UAAW,GAFlBkT,EAAW,IAMnB7R,EAAON,GAAKjoF,GAAcm6F,GAAc,KAAOC,GAAY,IAC3DG,GAA0BhS,QAE1BA,EAAOrB,UAAW,EAI1B,SAASsT,GACLC,EACAC,EACAC,EACAC,EACAC,EACAC,GAEA,IAAIz0I,EAAS,CACT00I,GAAeN,GACftK,GAAyB3/H,QAAQkqI,GACjCrzI,SAASszI,EAAQ,IACjBtzI,SAASuzI,EAAS,IAClBvzI,SAASwzI,EAAW,KAOxB,OAJIC,GACAz0I,EAAO+I,KAAK/H,SAASyzI,EAAW,KAG7Bz0I,EAGX,SAAS00I,GAAeN,GACpB,IAAI/N,EAAOrlI,SAASozI,EAAS,IAC7B,OAAI/N,GAAQ,GACD,IAAOA,EACPA,GAAQ,IACR,KAAOA,EAEXA,EAGX,SAASsO,GAAkB/2I,GAEvB,OAAOA,EACFuG,QAAQ,qBAAsB,KAC9BA,QAAQ,WAAY,KACpBA,QAAQ,SAAU,IAClBA,QAAQ,SAAU,IAG3B,SAASywI,GAAaC,EAAYC,EAAa5S,GAC3C,GAAI2S,EAAY,CAEZ,IAAIE,EAAkB1G,GAA2BlkI,QAAQ0qI,GACrDG,EAAgB,IAAIrhI,KAChBmhI,EAAY,GACZA,EAAY,GACZA,EAAY,IACdn8F,SACN,GAAIo8F,IAAoBC,EAGpB,OAFAtU,EAAgBwB,GAAQzB,iBAAkB,EAC1CyB,EAAOrB,UAAW,GACX,EAGf,OAAO,EAGX,SAASoU,GAAgBC,EAAWC,EAAgBC,GAChD,GAAIF,EACA,OAAOjC,GAAWiC,GACf,GAAIC,EAEP,OAAO,EAEP,IAAI/3F,EAAKp8C,SAASo0I,EAAW,IACzBt3I,EAAIs/C,EAAK,IACTp/C,GAAKo/C,EAAKt/C,GAAK,IACnB,OAAW,GAAJE,EAASF,EAKxB,SAASu3I,GAAkBnT,GACvB,IACIoT,EADAv0I,EAAQy/H,GAAQlhI,KAAKq1I,GAAkBzS,EAAOjkH,KAElD,GAAIld,EAAO,CASP,GARAu0I,EAAcnB,GACVpzI,EAAM,GACNA,EAAM,GACNA,EAAM,GACNA,EAAM,GACNA,EAAM,GACNA,EAAM,KAEL6zI,GAAa7zI,EAAM,GAAIu0I,EAAapT,GACrC,OAGJA,EAAOnrG,GAAKu+G,EACZpT,EAAOL,KAAOoT,GAAgBl0I,EAAM,GAAIA,EAAM,GAAIA,EAAM,KAExDmhI,EAAOlB,GAAKmL,GAAchjI,MAAM,KAAM+4H,EAAOnrG,IAC7CmrG,EAAOlB,GAAGuU,cAAcrT,EAAOlB,GAAGwU,gBAAkBtT,EAAOL,MAE3DnB,EAAgBwB,GAAQ1B,SAAU,OAElC0B,EAAOrB,UAAW,EAK1B,SAAS4U,GAAiBvT,GACtB,IAAI5kC,EAAU01C,GAAgB1zI,KAAK4iI,EAAOjkH,IAC1B,OAAZq/E,GAKJs2C,GAAc1R,IACU,IAApBA,EAAOrB,kBACAqB,EAAOrB,SAKlBwU,GAAkBnT,IACM,IAApBA,EAAOrB,kBACAqB,EAAOrB,SAKdqB,EAAOhB,QACPgB,EAAOrB,UAAW,EAGlBh6H,EAAM6uI,wBAAwBxT,MAtB9BA,EAAOlB,GAAK,IAAIrtH,MAAM2pF,EAAQ,IAoCtC,SAASn1E,GAASpL,EAAGtB,EAAGnP,GACpB,OAAS,MAALyQ,EACOA,EAEF,MAALtB,EACOA,EAEJnP,EAGX,SAASqpI,GAAiBzT,GAEtB,IAAI0T,EAAW,IAAIjiI,KAAK9M,EAAMvF,OAC9B,OAAI4gI,EAAO2T,QACA,CACHD,EAASvJ,iBACTuJ,EAASE,cACTF,EAASG,cAGV,CAACH,EAASx9F,cAAew9F,EAASt9F,WAAYs9F,EAASr9F,WAOlE,SAASy9F,GAAgB9T,GACrB,IAAIv8H,EACAqyC,EAEAi+F,EACAC,EACAC,EAHAr1I,EAAQ,GAKZ,IAAIohI,EAAOlB,GAAX,CAgCA,IA5BAiV,EAAcN,GAAiBzT,GAG3BA,EAAO8G,IAAyB,MAAnB9G,EAAOnrG,GAAGqyG,KAAqC,MAApBlH,EAAOnrG,GAAGoyG,KAClDiN,GAAsBlU,GAID,MAArBA,EAAOmU,aACPF,EAAYhuH,GAAS+5G,EAAOnrG,GAAGmyG,IAAO+M,EAAY/M,MAG9ChH,EAAOmU,WAAazK,GAAWuK,IACT,IAAtBjU,EAAOmU,cAEP3V,EAAgBwB,GAAQsQ,oBAAqB,GAGjDx6F,EAAOm0F,GAAcgK,EAAW,EAAGjU,EAAOmU,YAC1CnU,EAAOnrG,GAAGoyG,IAASnxF,EAAK89F,cACxB5T,EAAOnrG,GAAGqyG,IAAQpxF,EAAK+9F,cAQtBpwI,EAAI,EAAGA,EAAI,GAAqB,MAAhBu8H,EAAOnrG,GAAGpxB,KAAcA,EACzCu8H,EAAOnrG,GAAGpxB,GAAK7E,EAAM6E,GAAKswI,EAAYtwI,GAI1C,KAAOA,EAAI,EAAGA,IACVu8H,EAAOnrG,GAAGpxB,GAAK7E,EAAM6E,GACD,MAAhBu8H,EAAOnrG,GAAGpxB,GAAoB,IAANA,EAAU,EAAI,EAAKu8H,EAAOnrG,GAAGpxB,GAKrC,KAApBu8H,EAAOnrG,GAAGsyG,KACY,IAAtBnH,EAAOnrG,GAAGuyG,KACY,IAAtBpH,EAAOnrG,GAAGwyG,KACiB,IAA3BrH,EAAOnrG,GAAGyyG,MAEVtH,EAAOoU,UAAW,EAClBpU,EAAOnrG,GAAGsyG,IAAQ,GAGtBnH,EAAOlB,IAAMkB,EAAO2T,QAAU1J,GAAgBH,IAAY7iI,MACtD,KACArI,GAEJo1I,EAAkBhU,EAAO2T,QACnB3T,EAAOlB,GAAG0L,YACVxK,EAAOlB,GAAGroF,SAIG,MAAfupF,EAAOL,MACPK,EAAOlB,GAAGuU,cAAcrT,EAAOlB,GAAGwU,gBAAkBtT,EAAOL,MAG3DK,EAAOoU,WACPpU,EAAOnrG,GAAGsyG,IAAQ,IAKlBnH,EAAO8G,IACgB,qBAAhB9G,EAAO8G,GAAG9qI,GACjBgkI,EAAO8G,GAAG9qI,IAAMg4I,IAEhBxV,EAAgBwB,GAAQzB,iBAAkB,IAIlD,SAAS2V,GAAsBlU,GAC3B,IAAIl/H,EAAGuzI,EAAU/3I,EAAMouI,EAASnuI,EAAKC,EAAK0iG,EAAMo1C,EAAiBC,EAEjEzzI,EAAIk/H,EAAO8G,GACC,MAARhmI,EAAE0zI,IAAqB,MAAP1zI,EAAE2zI,GAAoB,MAAP3zI,EAAEkjG,GACjCznG,EAAM,EACNC,EAAM,EAMN63I,EAAWpuH,GACPnlB,EAAE0zI,GACFxU,EAAOnrG,GAAGmyG,IACVgE,GAAW0J,KAAe,EAAG,GAAGvQ,MAEpC7nI,EAAO2pB,GAASnlB,EAAE2zI,EAAG,GACrB/J,EAAUzkH,GAASnlB,EAAEkjG,EAAG,IACpB0mC,EAAU,GAAKA,EAAU,KACzB4J,GAAkB,KAGtB/3I,EAAMyjI,EAAOF,QAAQuL,MAAM9uI,IAC3BC,EAAMwjI,EAAOF,QAAQuL,MAAM7uI,IAE3B+3I,EAAUvJ,GAAW0J,KAAen4I,EAAKC,GAEzC63I,EAAWpuH,GAASnlB,EAAE6zI,GAAI3U,EAAOnrG,GAAGmyG,IAAOuN,EAAQpQ,MAGnD7nI,EAAO2pB,GAASnlB,EAAEA,EAAGyzI,EAAQj4I,MAElB,MAAPwE,EAAE9E,GAEF0uI,EAAU5pI,EAAE9E,GACR0uI,EAAU,GAAKA,EAAU,KACzB4J,GAAkB,IAER,MAAPxzI,EAAEoN,GAETw8H,EAAU5pI,EAAEoN,EAAI3R,GACZuE,EAAEoN,EAAI,GAAKpN,EAAEoN,EAAI,KACjBomI,GAAkB,IAItB5J,EAAUnuI,GAGdD,EAAO,GAAKA,EAAO4uI,GAAYmJ,EAAU93I,EAAKC,GAC9CgiI,EAAgBwB,GAAQuQ,gBAAiB,EACf,MAAnB+D,EACP9V,EAAgBwB,GAAQwQ,kBAAmB,GAE3CtxC,EAAOurC,GAAmB4J,EAAU/3I,EAAMouI,EAASnuI,EAAKC,GACxDwjI,EAAOnrG,GAAGmyG,IAAQ9nC,EAAKilC,KACvBnE,EAAOmU,WAAaj1C,EAAK6rC,WAWjC,SAASiH,GAA0BhS,GAE/B,GAAIA,EAAON,KAAO/6H,EAAMiwI,SAIxB,GAAI5U,EAAON,KAAO/6H,EAAMkwI,SAAxB,CAIA7U,EAAOnrG,GAAK,GACZ2pG,EAAgBwB,GAAQ/wH,OAAQ,EAGhC,IACIxL,EACAmvI,EACAjxI,EACA2B,EACAwxI,EAGAzW,EACAuI,EATAp9H,EAAS,GAAKw2H,EAAOjkH,GAMrBg5H,EAAevrI,EAAOrG,OACtB6xI,EAAyB,EAO7B,IAHArzI,EACI0gI,EAAarC,EAAON,GAAIM,EAAOF,SAASjhI,MAAM6iI,IAAqB,GACvEkF,EAAWjlI,EAAOwB,OACbM,EAAI,EAAGA,EAAImjI,EAAUnjI,IACtBH,EAAQ3B,EAAO8B,GACfmvI,GAAeppI,EAAO3K,MAAMunI,GAAsB9iI,EAAO08H,KACrD,IAAI,GACJ4S,IACAkC,EAAUtrI,EAAOkgB,OAAO,EAAGlgB,EAAOvB,QAAQ2qI,IACtCkC,EAAQ3xI,OAAS,GACjBq7H,EAAgBwB,GAAQpC,YAAY/2H,KAAKiuI,GAE7CtrI,EAASA,EAAOhD,MACZgD,EAAOvB,QAAQ2qI,GAAeA,EAAYzvI,QAE9C6xI,GAA0BpC,EAAYzvI,QAGtC0+H,EAAqBv+H,IACjBsvI,EACApU,EAAgBwB,GAAQ/wH,OAAQ,EAEhCuvH,EAAgBwB,GAAQrC,aAAa92H,KAAKvD,GAE9CyjI,GAAwBzjI,EAAOsvI,EAAa5S,IACrCA,EAAOhB,UAAY4T,GAC1BpU,EAAgBwB,GAAQrC,aAAa92H,KAAKvD,GAKlDk7H,EAAgBwB,GAAQnC,cACpBkX,EAAeC,EACfxrI,EAAOrG,OAAS,GAChBq7H,EAAgBwB,GAAQpC,YAAY/2H,KAAK2C,GAKzCw2H,EAAOnrG,GAAGsyG,KAAS,KACiB,IAApC3I,EAAgBwB,GAAQf,SACxBe,EAAOnrG,GAAGsyG,IAAQ,IAElB3I,EAAgBwB,GAAQf,aAAU5hH,GAGtCmhH,EAAgBwB,GAAQ5B,gBAAkB4B,EAAOnrG,GAAGruB,MAAM,GAC1Dg4H,EAAgBwB,GAAQljI,SAAWkjI,EAAO4O,UAE1C5O,EAAOnrG,GAAGsyG,IAAQ8N,GACdjV,EAAOF,QACPE,EAAOnrG,GAAGsyG,IACVnH,EAAO4O,WAIXvQ,EAAMG,EAAgBwB,GAAQ3B,IAClB,OAARA,IACA2B,EAAOnrG,GAAGmyG,IAAQhH,EAAOF,QAAQoV,gBAAgB7W,EAAK2B,EAAOnrG,GAAGmyG,MAGpE8M,GAAgB9T,GAChBqQ,GAAcrQ,QAhFVmT,GAAkBnT,QAJlB0R,GAAc1R,GAuFtB,SAASiV,GAAgB3X,EAAQzgI,EAAMC,GACnC,IAAIq4I,EAEJ,OAAgB,MAAZr4I,EAEOD,EAEgB,MAAvBygI,EAAO1gI,aACA0gI,EAAO1gI,aAAaC,EAAMC,GACX,MAAfwgI,EAAOn+H,MAEdg2I,EAAO7X,EAAOn+H,KAAKrC,GACfq4I,GAAQt4I,EAAO,KACfA,GAAQ,IAEPs4I,GAAiB,KAATt4I,IACTA,EAAO,GAEJA,GAGAA,EAKf,SAASu4I,GAAyBpV,GAC9B,IAAIqV,EACAC,EACAC,EACA9xI,EACA+xI,EACAC,EACAC,GAAoB,EACpBC,EAAa3V,EAAON,GAAGv8H,OAE3B,GAAmB,IAAfwyI,EAGA,OAFAnX,EAAgBwB,GAAQ/B,eAAgB,OACxC+B,EAAOlB,GAAK,IAAIrtH,KAAK62F,MAIzB,IAAK7kG,EAAI,EAAGA,EAAIkyI,EAAYlyI,IACxB+xI,EAAe,EACfC,GAAmB,EACnBJ,EAAa/V,EAAW,GAAIU,GACN,MAAlBA,EAAO2T,UACP0B,EAAW1B,QAAU3T,EAAO2T,SAEhC0B,EAAW3V,GAAKM,EAAON,GAAGj8H,GAC1BuuI,GAA0BqD,GAEtB3W,EAAQ2W,KACRI,GAAmB,GAIvBD,GAAgBhX,EAAgB6W,GAAYxX,cAG5C2X,GAAkE,GAAlDhX,EAAgB6W,GAAY1X,aAAax6H,OAEzDq7H,EAAgB6W,GAAYO,MAAQJ,EAE/BE,EAaGF,EAAeD,IACfA,EAAcC,EACdF,EAAaD,IAbE,MAAfE,GACAC,EAAeD,GACfE,KAEAF,EAAcC,EACdF,EAAaD,EACTI,IACAC,GAAoB,IAWpCjzI,EAAOu9H,EAAQsV,GAAcD,GAGjC,SAASQ,GAAiB7V,GACtB,IAAIA,EAAOlB,GAAX,CAIA,IAAIr7H,EAAIggI,GAAqBzD,EAAOjkH,IAChC+5H,OAAsBz4H,IAAV5Z,EAAE+X,IAAoB/X,EAAEqyC,KAAOryC,EAAE+X,IACjDwkH,EAAOnrG,GAAK7yB,EACR,CAACyB,EAAE0gI,KAAM1gI,EAAE8U,MAAOu9H,EAAWryI,EAAE5G,KAAM4G,EAAE1G,OAAQ0G,EAAEw5F,OAAQx5F,EAAEsyI,cAC3D,SAAUj2H,GACN,OAAOA,GAAOhhB,SAASghB,EAAK,OAIpCg0H,GAAgB9T,IAGpB,SAASgW,GAAiBhW,GACtB,IAAI5qG,EAAM,IAAI2qG,EAAOsQ,GAAc4F,GAAcjW,KAOjD,OANI5qG,EAAIg/G,WAEJh/G,EAAIjuB,IAAI,EAAG,KACXiuB,EAAIg/G,cAAW/2H,GAGZ+X,EAGX,SAAS6gH,GAAcjW,GACnB,IAAIphI,EAAQohI,EAAOjkH,GACf1H,EAAS2rH,EAAON,GAIpB,OAFAM,EAAOF,QAAUE,EAAOF,SAAWkQ,GAAUhQ,EAAOtwB,IAEtC,OAAV9wG,QAA8Bye,IAAXhJ,GAAkC,KAAVzV,EACpCugI,EAAc,CAAErB,WAAW,KAGjB,kBAAVl/H,IACPohI,EAAOjkH,GAAKnd,EAAQohI,EAAOF,QAAQx9G,SAAS1jB,IAG5CshI,EAASthI,GACF,IAAImhI,EAAOsQ,GAAczxI,KACzBu+H,EAAOv+H,GACdohI,EAAOlB,GAAKlgI,EACL8sB,EAAQrX,GACf+gI,GAAyBpV,GAClB3rH,EACP29H,GAA0BhS,GAE1BkW,GAAgBlW,GAGftB,EAAQsB,KACTA,EAAOlB,GAAK,MAGTkB,IAGX,SAASkW,GAAgBlW,GACrB,IAAIphI,EAAQohI,EAAOjkH,GACfmhH,EAAYt+H,GACZohI,EAAOlB,GAAK,IAAIrtH,KAAK9M,EAAMvF,OACpB+9H,EAAOv+H,GACdohI,EAAOlB,GAAK,IAAIrtH,KAAK7S,EAAM6oG,WACH,kBAAV7oG,EACd20I,GAAiBvT,GACVt0G,EAAQ9sB,IACfohI,EAAOnrG,GAAK7yB,EAAIpD,EAAM4H,MAAM,IAAI,SAAUsZ,GACtC,OAAOhhB,SAASghB,EAAK,OAEzBg0H,GAAgB9T,IACTrpC,EAAS/3F,GAChBi3I,GAAiB7V,GACV/1E,EAASrrD,GAEhBohI,EAAOlB,GAAK,IAAIrtH,KAAK7S,GAErB+F,EAAM6uI,wBAAwBxT,GAItC,SAASxC,GAAiB5+H,EAAOyV,EAAQipH,EAAQC,EAAQ4Y,GACrD,IAAI/rI,EAAI,GA2BR,OAzBe,IAAXiK,IAA8B,IAAXA,IACnBkpH,EAASlpH,EACTA,OAASgJ,IAGE,IAAXigH,IAA8B,IAAXA,IACnBC,EAASD,EACTA,OAASjgH,IAIRs5E,EAAS/3F,IAAUq+H,EAAcr+H,IACjC8sB,EAAQ9sB,IAA2B,IAAjBA,EAAMuE,UAEzBvE,OAAQye,GAIZjT,EAAEq1H,kBAAmB,EACrBr1H,EAAEupI,QAAUvpI,EAAEw1H,OAASuW,EACvB/rI,EAAEslG,GAAK4tB,EACPlzH,EAAE2R,GAAKnd,EACPwL,EAAEs1H,GAAKrrH,EACPjK,EAAE40H,QAAUzB,EAELyY,GAAiB5rI,GAG5B,SAASsqI,GAAY91I,EAAOyV,EAAQipH,EAAQC,GACxC,OAAOC,GAAiB5+H,EAAOyV,EAAQipH,EAAQC,GAAQ,GAve3D54H,EAAM6uI,wBAA0BpT,EAC5B,iSAGA,SAAUJ,GACNA,EAAOlB,GAAK,IAAIrtH,KAAKuuH,EAAOjkH,IAAMikH,EAAO2T,QAAU,OAAS,QAuLpEhvI,EAAMiwI,SAAW,aAGjBjwI,EAAMkwI,SAAW,aA2SjB,IAAIuB,GAAehW,EACX,sGACA,WACI,IAAIiW,EAAQ3B,GAAYztI,MAAM,KAAM/D,WACpC,OAAInJ,KAAK2kI,WAAa2X,EAAM3X,UACjB2X,EAAQt8I,KAAOA,KAAOs8I,EAEtBlX,OAInBmX,GAAelW,EACX,sGACA,WACI,IAAIiW,EAAQ3B,GAAYztI,MAAM,KAAM/D,WACpC,OAAInJ,KAAK2kI,WAAa2X,EAAM3X,UACjB2X,EAAQt8I,KAAOA,KAAOs8I,EAEtBlX,OAUvB,SAASoX,GAAO16H,EAAI26H,GAChB,IAAIphH,EAAK3xB,EAIT,GAHuB,IAAnB+yI,EAAQrzI,QAAgBuoB,EAAQ8qH,EAAQ,MACxCA,EAAUA,EAAQ,KAEjBA,EAAQrzI,OACT,OAAOuxI,KAGX,IADAt/G,EAAMohH,EAAQ,GACT/yI,EAAI,EAAGA,EAAI+yI,EAAQrzI,SAAUM,EACzB+yI,EAAQ/yI,GAAGi7H,YAAa8X,EAAQ/yI,GAAGoY,GAAIuZ,KACxCA,EAAMohH,EAAQ/yI,IAGtB,OAAO2xB,EAIX,SAASz0B,KACL,IAAIiG,EAAO,GAAGJ,MAAMlE,KAAKY,UAAW,GAEpC,OAAOqzI,GAAO,WAAY3vI,GAG9B,SAASomB,KACL,IAAIpmB,EAAO,GAAGJ,MAAMlE,KAAKY,UAAW,GAEpC,OAAOqzI,GAAO,UAAW3vI,GAG7B,IAAIxH,GAAM,WACN,OAAOqS,KAAKrS,IAAMqS,KAAKrS,OAAS,IAAIqS,MAGpCglI,GAAW,CACX,OACA,UACA,QACA,OACA,MACA,OACA,SACA,SACA,eAGJ,SAASC,GAAgB96I,GACrB,IAAIgC,EAEA6F,EADAkzI,GAAiB,EAEjBC,EAAWH,GAAStzI,OACxB,IAAKvF,KAAOhC,EACR,GACIohI,EAAWphI,EAAGgC,MAEuB,IAAjCqK,GAAQ3F,KAAKm0I,GAAU74I,IACZ,MAAVhC,EAAEgC,IAAiBylD,MAAMznD,EAAEgC,KAGhC,OAAO,EAIf,IAAK6F,EAAI,EAAGA,EAAImzI,IAAYnzI,EACxB,GAAI7H,EAAE66I,GAAShzI,IAAK,CAChB,GAAIkzI,EACA,OAAO,EAEP58G,WAAWn+B,EAAE66I,GAAShzI,OAAS4gI,GAAMzoI,EAAE66I,GAAShzI,OAChDkzI,GAAiB,GAK7B,OAAO,EAGX,SAASE,KACL,OAAO98I,KAAK4kI,SAGhB,SAASmY,KACL,OAAOC,GAAezuC,KAG1B,SAAS0uC,GAASC,GACd,IAAIrT,EAAkBH,GAAqBwT,GACvCC,EAAQtT,EAAgBO,MAAQ,EAChCgT,EAAWvT,EAAgBwT,SAAW,EACtCj9I,EAASypI,EAAgBrrH,OAAS,EAClC8+H,EAAQzT,EAAgBtnI,MAAQsnI,EAAgB0T,SAAW,EAC3Dv0E,EAAO6gE,EAAgBpoH,KAAO,EAC9B1C,EAAQ8qH,EAAgB/mI,MAAQ,EAChC+d,EAAUgpH,EAAgB7mI,QAAU,EACpC62G,EAAUgwB,EAAgB3mC,QAAU,EACpCs6C,EAAe3T,EAAgBmS,aAAe,EAElDh8I,KAAK4kI,SAAW+X,GAAgB9S,GAGhC7pI,KAAKy9I,eACAD,EACS,IAAV3jC,EACU,IAAVh5F,EACQ,IAAR9B,EAAe,GAAK,GAGxB/e,KAAK09I,OAAS10E,EAAe,EAARs0E,EAIrBt9I,KAAKkuI,SAAW9tI,EAAoB,EAAXg9I,EAAuB,GAARD,EAExCn9I,KAAK29I,MAAQ,GAEb39I,KAAK+lI,QAAUkQ,KAEfj2I,KAAK49I,UAGT,SAASC,GAAW93H,GAChB,OAAOA,aAAek3H,GAG1B,SAASa,GAASn6I,GACd,OAAIA,EAAS,GACyB,EAA3BgD,KAAKu9B,OAAO,EAAIvgC,GAEhBgD,KAAKu9B,MAAMvgC,GAK1B,SAASo6I,GAAcC,EAAQC,EAAQC,GACnC,IAGIx0I,EAHAgD,EAAM/F,KAAKC,IAAIo3I,EAAO50I,OAAQ60I,EAAO70I,QACrC+0I,EAAax3I,KAAKyiH,IAAI40B,EAAO50I,OAAS60I,EAAO70I,QAC7Cg1I,EAAQ,EAEZ,IAAK10I,EAAI,EAAGA,EAAIgD,EAAKhD,KAEZw0I,GAAeF,EAAOt0I,KAAOu0I,EAAOv0I,KACnCw0I,GAAe5T,GAAM0T,EAAOt0I,MAAQ4gI,GAAM2T,EAAOv0I,MAEnD00I,IAGR,OAAOA,EAAQD,EAKnB,SAAS95I,GAAOkF,EAAO8tC,GACnB0wF,EAAex+H,EAAO,EAAG,GAAG,WACxB,IAAIlF,EAASrE,KAAKq+I,YACd3W,EAAO,IAKX,OAJIrjI,EAAS,IACTA,GAAUA,EACVqjI,EAAO,KAGPA,EACAL,KAAYhjI,EAAS,IAAK,GAC1BgzC,EACAgwF,IAAWhjI,EAAS,GAAI,MAKpCA,GAAO,IAAK,KACZA,GAAO,KAAM,IAIb6nI,GAAc,IAAKH,IACnBG,GAAc,KAAMH,IACpBa,GAAc,CAAC,IAAK,OAAO,SAAU/nI,EAAO+tE,EAAOqzD,GAC/CA,EAAO2T,SAAU,EACjB3T,EAAOL,KAAO0Y,GAAiBvS,GAAkBlnI,MAQrD,IAAI05I,GAAc,kBAElB,SAASD,GAAiB1gD,EAASnuF,GAC/B,IACIkxG,EACA13E,EACApoB,EAHAhO,GAAWpD,GAAU,IAAI3K,MAAM84F,GAKnC,OAAgB,OAAZ/qF,EACO,MAGX8tG,EAAQ9tG,EAAQA,EAAQzJ,OAAS,IAAM,GACvC6/B,GAAS03E,EAAQ,IAAI77G,MAAMy5I,KAAgB,CAAC,IAAK,EAAG,GACpD19H,EAAuB,GAAXooB,EAAM,GAAWqhG,GAAMrhG,EAAM,IAEtB,IAAZpoB,EAAgB,EAAiB,MAAbooB,EAAM,GAAapoB,GAAWA,GAI7D,SAAS29H,GAAgB35I,EAAOg6H,GAC5B,IAAIxjG,EAAK+tG,EACT,OAAIvK,EAAMgH,QACNxqG,EAAMwjG,EAAM/4H,QACZsjI,GACKjD,EAASthI,IAAUu+H,EAAOv+H,GACrBA,EAAM6oG,UACNitC,GAAY91I,GAAO6oG,WAAaryE,EAAIqyE,UAE9CryE,EAAI0pG,GAAG0Z,QAAQpjH,EAAI0pG,GAAGr3B,UAAY07B,GAClCx+H,EAAMs7H,aAAa7qG,GAAK,GACjBA,GAEAs/G,GAAY91I,GAAO65I,QAIlC,SAASC,GAAc98I,GAGnB,OAAQ8E,KAAKu9B,MAAMriC,EAAEkjI,GAAG6Z,qBAqB5B,SAASC,GAAah6I,EAAOi6I,EAAeC,GACxC,IACIC,EADA36I,EAASrE,KAAK8lI,SAAW,EAE7B,IAAK9lI,KAAK2kI,UACN,OAAgB,MAAT9/H,EAAgB7E,KAAOuuG,IAElC,GAAa,MAAT1pG,EAAe,CACf,GAAqB,kBAAVA,GAEP,GADAA,EAAQy5I,GAAiBvS,GAAkBlnI,GAC7B,OAAVA,EACA,OAAO7E,UAEJ2G,KAAKyiH,IAAIvkH,GAAS,KAAOk6I,IAChCl6I,GAAgB,IAwBpB,OAtBK7E,KAAK6lI,QAAUiZ,IAChBE,EAAcL,GAAc3+I,OAEhCA,KAAK8lI,QAAUjhI,EACf7E,KAAK6lI,QAAS,EACK,MAAfmZ,GACAh/I,KAAKoN,IAAI4xI,EAAa,KAEtB36I,IAAWQ,KACNi6I,GAAiB9+I,KAAKi/I,kBACvBC,GACIl/I,KACAg9I,GAAen4I,EAAQR,EAAQ,KAC/B,GACA,GAEIrE,KAAKi/I,oBACbj/I,KAAKi/I,mBAAoB,EACzBr0I,EAAMs7H,aAAalmI,MAAM,GACzBA,KAAKi/I,kBAAoB,OAG1Bj/I,KAEP,OAAOA,KAAK6lI,OAASxhI,EAASs6I,GAAc3+I,MAIpD,SAASm/I,GAAWt6I,EAAOi6I,GACvB,OAAa,MAATj6I,GACqB,kBAAVA,IACPA,GAASA,GAGb7E,KAAKq+I,UAAUx5I,EAAOi6I,GAEf9+I,OAECA,KAAKq+I,YAIrB,SAASe,GAAeN,GACpB,OAAO9+I,KAAKq+I,UAAU,EAAGS,GAG7B,SAASO,GAAiBP,GAStB,OARI9+I,KAAK6lI,SACL7lI,KAAKq+I,UAAU,EAAGS,GAClB9+I,KAAK6lI,QAAS,EAEViZ,GACA9+I,KAAKs/I,SAASX,GAAc3+I,MAAO,MAGpCA,KAGX,SAASu/I,KACL,GAAiB,MAAbv/I,KAAK4lI,KACL5lI,KAAKq+I,UAAUr+I,KAAK4lI,MAAM,GAAO,QAC9B,GAAuB,kBAAZ5lI,KAAKgiB,GAAiB,CACpC,IAAIw9H,EAAQlB,GAAiBxS,GAAa9rI,KAAKgiB,IAClC,MAATw9H,EACAx/I,KAAKq+I,UAAUmB,GAEfx/I,KAAKq+I,UAAU,GAAG,GAG1B,OAAOr+I,KAGX,SAASy/I,GAAqB56I,GAC1B,QAAK7E,KAAK2kI,YAGV9/H,EAAQA,EAAQ81I,GAAY91I,GAAOw5I,YAAc,GAEzCr+I,KAAKq+I,YAAcx5I,GAAS,KAAO,GAG/C,SAAS66I,KACL,OACI1/I,KAAKq+I,YAAcr+I,KAAK8F,QAAQ0Y,MAAM,GAAG6/H,aACzCr+I,KAAKq+I,YAAcr+I,KAAK8F,QAAQ0Y,MAAM,GAAG6/H,YAIjD,SAASsB,KACL,IAAKxc,EAAYnjI,KAAK4/I,eAClB,OAAO5/I,KAAK4/I,cAGhB,IACItD,EADAjsI,EAAI,GAcR,OAXAk1H,EAAWl1H,EAAGrQ,MACdqQ,EAAI6rI,GAAc7rI,GAEdA,EAAEyqB,IACFwhH,EAAQjsI,EAAEw1H,OAASvC,EAAUjzH,EAAEyqB,IAAM6/G,GAAYtqI,EAAEyqB,IACnD96B,KAAK4/I,cACD5/I,KAAK2kI,WAAaoZ,GAAc1tI,EAAEyqB,GAAIwhH,EAAMx4H,WAAa,GAE7D9jB,KAAK4/I,eAAgB,EAGlB5/I,KAAK4/I,cAGhB,SAASC,KACL,QAAO7/I,KAAK2kI,YAAa3kI,KAAK6lI,OAGlC,SAASia,KACL,QAAO9/I,KAAK2kI,WAAY3kI,KAAK6lI,OAGjC,SAASka,KACL,QAAO//I,KAAK2kI,YAAY3kI,KAAK6lI,QAA2B,IAAjB7lI,KAAK8lI,SApJhDl7H,EAAMs7H,aAAe,aAwJrB,IAAI8Z,GAAc,wDAIdC,GACI,sKAER,SAASjD,GAAen4I,EAAOhB,GAC3B,IAGI6jI,EACAp+H,EACA42I,EALAhD,EAAWr4I,EAEXC,EAAQ,KAkEZ,OA7DI+4I,GAAWh5I,GACXq4I,EAAW,CACPlN,GAAInrI,EAAM44I,cACVx7I,EAAG4C,EAAM64I,MACTv7I,EAAG0C,EAAMqpI,SAENh+E,EAASrrD,KAAWykD,OAAOzkD,IAClCq4I,EAAW,GACPr5I,EACAq5I,EAASr5I,IAAQgB,EAEjBq4I,EAASM,cAAgB34I,IAErBC,EAAQk7I,GAAY38I,KAAKwB,KACjC6iI,EAAoB,MAAb5iI,EAAM,IAAc,EAAI,EAC/Bo4I,EAAW,CACP76I,EAAG,EACHJ,EAAGqoI,GAAMxlI,EAAMqoI,KAASzF,EACxB3lI,EAAGuoI,GAAMxlI,EAAMsoI,KAAS1F,EACxB7lI,EAAGyoI,GAAMxlI,EAAMuoI,KAAW3F,EAC1B/lI,EAAG2oI,GAAMxlI,EAAMwoI,KAAW5F,EAC1BsI,GAAI1F,GAAMwT,GAA8B,IAArBh5I,EAAMyoI,MAAwB7F,KAE7C5iI,EAAQm7I,GAAS58I,KAAKwB,KAC9B6iI,EAAoB,MAAb5iI,EAAM,IAAc,EAAI,EAC/Bo4I,EAAW,CACP76I,EAAG89I,GAASr7I,EAAM,GAAI4iI,GACtBvlI,EAAGg+I,GAASr7I,EAAM,GAAI4iI,GACtB3gI,EAAGo5I,GAASr7I,EAAM,GAAI4iI,GACtBzlI,EAAGk+I,GAASr7I,EAAM,GAAI4iI,GACtB3lI,EAAGo+I,GAASr7I,EAAM,GAAI4iI,GACtB7lI,EAAGs+I,GAASr7I,EAAM,GAAI4iI,GACtB/lI,EAAGw+I,GAASr7I,EAAM,GAAI4iI,KAEP,MAAZwV,EAEPA,EAAW,GAES,kBAAbA,IACN,SAAUA,GAAY,OAAQA,KAE/BgD,EAAUE,GACNzF,GAAYuC,EAAS3wI,MACrBouI,GAAYuC,EAASvwI,KAGzBuwI,EAAW,GACXA,EAASlN,GAAKkQ,EAAQ1C,aACtBN,EAAS/6I,EAAI+9I,EAAQ9/I,QAGzBkJ,EAAM,IAAI2zI,GAASC,GAEfW,GAAWh5I,IAAUo+H,EAAWp+H,EAAO,aACvCyE,EAAIy8H,QAAUlhI,EAAMkhI,SAGpB8X,GAAWh5I,IAAUo+H,EAAWp+H,EAAO,cACvCyE,EAAIs7H,SAAW//H,EAAM+/H,UAGlBt7H,EAMX,SAAS62I,GAASjyD,EAAKw5C,GAInB,IAAIrsG,EAAM6yD,GAAOluD,WAAWkuD,EAAIhmF,QAAQ,IAAK,MAE7C,OAAQohD,MAAMjuB,GAAO,EAAIA,GAAOqsG,EAGpC,SAAS2Y,GAA0BC,EAAMhE,GACrC,IAAIjhH,EAAM,GAUV,OARAA,EAAIj7B,OACAk8I,EAAM99H,QAAU8hI,EAAK9hI,QAAyC,IAA9B89H,EAAMlS,OAASkW,EAAKlW,QACpDkW,EAAKx6I,QAAQsH,IAAIiuB,EAAIj7B,OAAQ,KAAKmgJ,QAAQjE,MACxCjhH,EAAIj7B,OAGVi7B,EAAImiH,cAAgBlB,GAASgE,EAAKx6I,QAAQsH,IAAIiuB,EAAIj7B,OAAQ,KAEnDi7B,EAGX,SAAS+kH,GAAkBE,EAAMhE,GAC7B,IAAIjhH,EACJ,OAAMilH,EAAK3b,WAAa2X,EAAM3X,WAI9B2X,EAAQkC,GAAgBlC,EAAOgE,GAC3BA,EAAKE,SAASlE,GACdjhH,EAAMglH,GAA0BC,EAAMhE,IAEtCjhH,EAAMglH,GAA0B/D,EAAOgE,GACvCjlH,EAAImiH,cAAgBniH,EAAImiH,aACxBniH,EAAIj7B,QAAUi7B,EAAIj7B,QAGfi7B,GAZI,CAAEmiH,aAAc,EAAGp9I,OAAQ,GAgB1C,SAASqgJ,GAAYjtI,EAAWlP,GAC5B,OAAO,SAAUg3B,EAAKh2B,GAClB,IAAIo7I,EAAKC,EAmBT,OAjBe,OAAXr7I,GAAoBgkD,OAAOhkD,KAC3BohI,EACIpiI,EACA,YACIA,EACA,uDACAA,EAHJ,kGAOJq8I,EAAMrlH,EACNA,EAAMh2B,EACNA,EAASq7I,GAGbD,EAAM1D,GAAe1hH,EAAKh2B,GAC1B45I,GAAYl/I,KAAM0gJ,EAAKltI,GAChBxT,MAIf,SAASk/I,GAAYxrD,EAAKwpD,EAAU0D,EAAU1a,GAC1C,IAAIsX,EAAeN,EAASO,cACxBz0E,EAAO80E,GAASZ,EAASQ,OACzBt9I,EAAS09I,GAASZ,EAAShP,SAE1Bx6C,EAAIixC,YAKTuB,EAA+B,MAAhBA,GAA8BA,EAEzC9lI,GACA0uI,GAASp7C,EAAK/tF,GAAI+tF,EAAK,SAAWtzF,EAASwgJ,GAE3C53E,GACA2hE,GAAMj3C,EAAK,OAAQ/tF,GAAI+tF,EAAK,QAAU1qB,EAAO43E,GAE7CpD,GACA9pD,EAAIqxC,GAAG0Z,QAAQ/qD,EAAIqxC,GAAGr3B,UAAY8vC,EAAeoD,GAEjD1a,GACAt7H,EAAMs7H,aAAaxyC,EAAK1qB,GAAQ5oE,IA5FxC48I,GAAel7H,GAAKm7H,GAAS50I,UAC7B20I,GAAe6D,QAAU9D,GA+FzB,IAAI3vI,GAAMqzI,GAAY,EAAG,OACrBnB,GAAWmB,IAAa,EAAG,YAE/B,SAASzwF,GAASnrD,GACd,MAAwB,kBAAVA,GAAsBA,aAAiB0f,OAIzD,SAASu8H,GAAcj8I,GACnB,OACIshI,EAASthI,IACTu+H,EAAOv+H,IACPmrD,GAASnrD,IACTqrD,EAASrrD,IACTk8I,GAAsBl8I,IACtBm8I,GAAoBn8I,IACV,OAAVA,QACUye,IAAVze,EAIR,SAASm8I,GAAoBn8I,GACzB,IA4BI6E,EACAgG,EA7BAuxI,EAAarkD,EAAS/3F,KAAWq+H,EAAcr+H,GAC/Cq8I,GAAe,EACfx0C,EAAa,CACT,QACA,OACA,IACA,SACA,QACA,IACA,OACA,MACA,IACA,QACA,OACA,IACA,QACA,OACA,IACA,UACA,SACA,IACA,UACA,SACA,IACA,eACA,cACA,MAIJy0C,EAAcz0C,EAAWtjG,OAE7B,IAAKM,EAAI,EAAGA,EAAIy3I,EAAaz3I,GAAK,EAC9BgG,EAAWg9F,EAAWhjG,GACtBw3I,EAAeA,GAAgBje,EAAWp+H,EAAO6K,GAGrD,OAAOuxI,GAAcC,EAGzB,SAASH,GAAsBl8I,GAC3B,IAAIu8I,EAAYzvH,EAAQ9sB,GACpBw8I,GAAe,EAOnB,OANID,IACAC,EAGkB,IAFdx8I,EAAM+P,QAAO,SAAUwrC,GACnB,OAAQ8P,EAAS9P,IAAS4P,GAASnrD,MACpCuE,QAEJg4I,GAAaC,EAGxB,SAASC,GAAez8I,GACpB,IAUI6E,EACAgG,EAXAuxI,EAAarkD,EAAS/3F,KAAWq+H,EAAcr+H,GAC/Cq8I,GAAe,EACfx0C,EAAa,CACT,UACA,UACA,UACA,WACA,WACA,YAKR,IAAKhjG,EAAI,EAAGA,EAAIgjG,EAAWtjG,OAAQM,GAAK,EACpCgG,EAAWg9F,EAAWhjG,GACtBw3I,EAAeA,GAAgBje,EAAWp+H,EAAO6K,GAGrD,OAAOuxI,GAAcC,EAGzB,SAASK,GAAkBC,EAAUn8I,GACjC,IAAI+jI,EAAOoY,EAASpY,KAAK/jI,EAAK,QAAQ,GACtC,OAAO+jI,GAAQ,EACT,WACAA,GAAQ,EACR,WACAA,EAAO,EACP,UACAA,EAAO,EACP,UACAA,EAAO,EACP,UACAA,EAAO,EACP,WACA,WAGV,SAASqY,GAAWC,EAAMlgE,GAEG,IAArBr4E,UAAUC,SACLD,UAAU,GAGJ23I,GAAc33I,UAAU,KAC/Bu4I,EAAOv4I,UAAU,GACjBq4E,OAAUl+D,GACHg+H,GAAen4I,UAAU,MAChCq4E,EAAUr4E,UAAU,GACpBu4I,OAAOp+H,IAPPo+H,OAAOp+H,EACPk+D,OAAUl+D,IAWlB,IAAIje,EAAMq8I,GAAQ/G,KACdgH,EAAMnD,GAAgBn5I,EAAKrF,MAAM4hJ,QAAQ,OACzCtnI,EAAS1P,EAAMi3I,eAAe7hJ,KAAM2hJ,IAAQ,WAC5Cx+I,EACIq+E,IACC/8D,EAAW+8D,EAAQlnE,IACdknE,EAAQlnE,GAAQ/R,KAAKvI,KAAMqF,GAC3Bm8E,EAAQlnE,IAEtB,OAAOta,KAAKsa,OACRnX,GAAUnD,KAAKkoI,aAAajnI,SAASqZ,EAAQta,KAAM26I,GAAYt1I,KAIvE,SAASS,KACL,OAAO,IAAIkgI,EAAOhmI,MAGtB,SAASugJ,GAAQ17I,EAAO4wB,GACpB,IAAIqsH,EAAa3b,EAASthI,GAASA,EAAQ81I,GAAY91I,GACvD,SAAM7E,KAAK2kI,YAAamd,EAAWnd,aAGnClvG,EAAQg0G,GAAeh0G,IAAU,cACnB,gBAAVA,EACOz1B,KAAK0tG,UAAYo0C,EAAWp0C,UAE5Bo0C,EAAWp0C,UAAY1tG,KAAK8F,QAAQ87I,QAAQnsH,GAAOi4E,WAIlE,SAAS8yC,GAAS37I,EAAO4wB,GACrB,IAAIqsH,EAAa3b,EAASthI,GAASA,EAAQ81I,GAAY91I,GACvD,SAAM7E,KAAK2kI,YAAamd,EAAWnd,aAGnClvG,EAAQg0G,GAAeh0G,IAAU,cACnB,gBAAVA,EACOz1B,KAAK0tG,UAAYo0C,EAAWp0C,UAE5B1tG,KAAK8F,QAAQi8I,MAAMtsH,GAAOi4E,UAAYo0C,EAAWp0C,WAIhE,SAASs0C,GAAUz1I,EAAMI,EAAI8oB,EAAOwsH,GAChC,IAAIC,EAAY/b,EAAS55H,GAAQA,EAAOouI,GAAYpuI,GAChD41I,EAAUhc,EAASx5H,GAAMA,EAAKguI,GAAYhuI,GAC9C,SAAM3M,KAAK2kI,WAAaud,EAAUvd,WAAawd,EAAQxd,aAGvDsd,EAAcA,GAAe,MAEL,MAAnBA,EAAY,GACPjiJ,KAAKugJ,QAAQ2B,EAAWzsH,IACvBz1B,KAAKwgJ,SAAS0B,EAAWzsH,MACZ,MAAnBwsH,EAAY,GACPjiJ,KAAKwgJ,SAAS2B,EAAS1sH,IACtBz1B,KAAKugJ,QAAQ4B,EAAS1sH,KAIrC,SAAS2sH,GAAOv9I,EAAO4wB,GACnB,IACI4sH,EADAP,EAAa3b,EAASthI,GAASA,EAAQ81I,GAAY91I,GAEvD,SAAM7E,KAAK2kI,YAAamd,EAAWnd,aAGnClvG,EAAQg0G,GAAeh0G,IAAU,cACnB,gBAAVA,EACOz1B,KAAK0tG,YAAco0C,EAAWp0C,WAErC20C,EAAUP,EAAWp0C,UAEjB1tG,KAAK8F,QAAQ87I,QAAQnsH,GAAOi4E,WAAa20C,GACzCA,GAAWriJ,KAAK8F,QAAQi8I,MAAMtsH,GAAOi4E,YAKjD,SAAS40C,GAAcz9I,EAAO4wB,GAC1B,OAAOz1B,KAAKoiJ,OAAOv9I,EAAO4wB,IAAUz1B,KAAKugJ,QAAQ17I,EAAO4wB,GAG5D,SAAS8sH,GAAe19I,EAAO4wB,GAC3B,OAAOz1B,KAAKoiJ,OAAOv9I,EAAO4wB,IAAUz1B,KAAKwgJ,SAAS37I,EAAO4wB,GAG7D,SAAS2zG,GAAKvkI,EAAO4wB,EAAO+sH,GACxB,IAAI9sD,EAAM+sD,EAAWt/I,EAErB,IAAKnD,KAAK2kI,UACN,OAAOp2B,IAKX,GAFA7Y,EAAO8oD,GAAgB35I,EAAO7E,OAEzB01F,EAAKivC,UACN,OAAOp2B,IAOX,OAJAk0C,EAAoD,KAAvC/sD,EAAK2oD,YAAcr+I,KAAKq+I,aAErC5oH,EAAQg0G,GAAeh0G,GAEfA,GACJ,IAAK,OACDtyB,EAASu/I,GAAU1iJ,KAAM01F,GAAQ,GACjC,MACJ,IAAK,QACDvyF,EAASu/I,GAAU1iJ,KAAM01F,GACzB,MACJ,IAAK,UACDvyF,EAASu/I,GAAU1iJ,KAAM01F,GAAQ,EACjC,MACJ,IAAK,SACDvyF,GAAUnD,KAAO01F,GAAQ,IACzB,MACJ,IAAK,SACDvyF,GAAUnD,KAAO01F,GAAQ,IACzB,MACJ,IAAK,OACDvyF,GAAUnD,KAAO01F,GAAQ,KACzB,MACJ,IAAK,MACDvyF,GAAUnD,KAAO01F,EAAO+sD,GAAa,MACrC,MACJ,IAAK,OACDt/I,GAAUnD,KAAO01F,EAAO+sD,GAAa,OACrC,MACJ,QACIt/I,EAASnD,KAAO01F,EAGxB,OAAO8sD,EAAUr/I,EAASknI,GAASlnI,GAGvC,SAASu/I,GAAU5hI,EAAGtB,GAClB,GAAIsB,EAAEi7B,OAASv8B,EAAEu8B,OAGb,OAAQ2mG,GAAUljI,EAAGsB,GAGzB,IAGI6hI,EACAniH,EAJAoiH,EAAyC,IAAvBpjI,EAAE4qH,OAAStpH,EAAEspH,SAAgB5qH,EAAEhB,QAAUsC,EAAEtC,SAE7DsvE,EAAShtE,EAAEhb,QAAQsH,IAAIw1I,EAAgB,UAe3C,OAXIpjI,EAAIsuE,EAAS,GACb60D,EAAU7hI,EAAEhb,QAAQsH,IAAIw1I,EAAiB,EAAG,UAE5CpiH,GAAUhhB,EAAIsuE,IAAWA,EAAS60D,KAElCA,EAAU7hI,EAAEhb,QAAQsH,IAAIw1I,EAAiB,EAAG,UAE5CpiH,GAAUhhB,EAAIsuE,IAAW60D,EAAU70D,MAI9B80D,EAAiBpiH,IAAW,EAMzC,SAASl4B,KACL,OAAOtI,KAAK8F,QAAQy9H,OAAO,MAAMjpH,OAAO,oCAG5C,SAASuoI,GAAYC,GACjB,IAAK9iJ,KAAK2kI,UACN,OAAO,KAEX,IAAIjB,GAAqB,IAAfof,EACNjhJ,EAAI6hI,EAAM1jI,KAAK8F,QAAQ49H,MAAQ1jI,KACnC,OAAI6B,EAAEuoI,OAAS,GAAKvoI,EAAEuoI,OAAS,KACpB/B,EACHxmI,EACA6hI,EACM,iCACA,gCAGVj/G,EAAW/M,KAAKrP,UAAUw6I,aAEtBnf,EACO1jI,KAAK+iJ,SAASF,cAEd,IAAInrI,KAAK1X,KAAK0tG,UAA+B,GAAnB1tG,KAAKq+I,YAAmB,KACpDwE,cACA36I,QAAQ,IAAKmgI,EAAaxmI,EAAG,MAGnCwmI,EACHxmI,EACA6hI,EAAM,+BAAiC,8BAU/C,SAASsf,KACL,IAAKhjJ,KAAK2kI,UACN,MAAO,qBAAuB3kI,KAAKgiB,GAAK,OAE5C,IAEIzK,EACA6yH,EACAroD,EACAkhE,EALAhb,EAAO,SACPib,EAAO,GAcX,OATKljJ,KAAK6/I,YACN5X,EAA4B,IAArBjoI,KAAKq+I,YAAoB,aAAe,mBAC/C6E,EAAO,KAEX3rI,EAAS,IAAM0wH,EAAO,MACtBmC,EAAO,GAAKpqI,KAAKoqI,QAAUpqI,KAAKoqI,QAAU,KAAO,OAAS,SAC1DroD,EAAW,wBACXkhE,EAASC,EAAO,OAETljJ,KAAKsa,OAAO/C,EAAS6yH,EAAOroD,EAAWkhE,GAGlD,SAAS3oI,GAAOiwG,GACPA,IACDA,EAAcvqH,KAAK+/I,QACbn1I,EAAMu4I,iBACNv4I,EAAMw4I,eAEhB,IAAIjgJ,EAASklI,EAAaroI,KAAMuqH,GAChC,OAAOvqH,KAAKkoI,aAAa1/G,WAAWrlB,GAGxC,SAASoJ,GAAKm1I,EAAM99I,GAChB,OACI5D,KAAK2kI,YACHwB,EAASub,IAASA,EAAK/c,WAAcgW,GAAY+G,GAAM/c,WAElDqY,GAAe,CAAErwI,GAAI3M,KAAMuM,KAAMm1I,IACnCne,OAAOvjI,KAAKujI,UACZ8f,UAAUz/I,GAER5D,KAAKkoI,aAAal2C,cAIjC,SAASsxD,GAAQ1/I,GACb,OAAO5D,KAAKuM,KAAKouI,KAAe/2I,GAGpC,SAAS+I,GAAG+0I,EAAM99I,GACd,OACI5D,KAAK2kI,YACHwB,EAASub,IAASA,EAAK/c,WAAcgW,GAAY+G,GAAM/c,WAElDqY,GAAe,CAAEzwI,KAAMvM,KAAM2M,GAAI+0I,IACnCne,OAAOvjI,KAAKujI,UACZ8f,UAAUz/I,GAER5D,KAAKkoI,aAAal2C,cAIjC,SAASuxD,GAAM3/I,GACX,OAAO5D,KAAK2M,GAAGguI,KAAe/2I,GAMlC,SAAS2/H,GAAO1/H,GACZ,IAAI2/I,EAEJ,YAAYlgI,IAARzf,EACO7D,KAAK+lI,QAAQgQ,OAEpByN,EAAgBvN,GAAUpyI,GACL,MAAjB2/I,IACAxjJ,KAAK+lI,QAAUyd,GAEZxjJ,MA1Hf4K,EAAMw4I,cAAgB,uBACtBx4I,EAAMu4I,iBAAmB,yBA6HzB,IAAI17I,GAAO4+H,EACP,mJACA,SAAUxiI,GACN,YAAYyf,IAARzf,EACO7D,KAAKkoI,aAELloI,KAAKujI,OAAO1/H,MAK/B,SAASqkI,KACL,OAAOloI,KAAK+lI,QAGhB,IAAI0d,GAAgB,IAChBC,GAAgB,GAAKD,GACrBE,GAAc,GAAKD,GACnBE,GAAmB,QAAwBD,GAG/C,SAASE,GAAMC,EAAUC,GACrB,OAASD,EAAWC,EAAWA,GAAWA,EAG9C,SAASC,GAAiB3hJ,EAAGR,EAAGI,GAE5B,OAAII,EAAI,KAAOA,GAAK,EAET,IAAIqV,KAAKrV,EAAI,IAAKR,EAAGI,GAAK2hJ,GAE1B,IAAIlsI,KAAKrV,EAAGR,EAAGI,GAAGyrG,UAIjC,SAASu2C,GAAe5hJ,EAAGR,EAAGI,GAE1B,OAAII,EAAI,KAAOA,GAAK,EAETqV,KAAKy4H,IAAI9tI,EAAI,IAAKR,EAAGI,GAAK2hJ,GAE1BlsI,KAAKy4H,IAAI9tI,EAAGR,EAAGI,GAI9B,SAAS2/I,GAAQnsH,GACb,IAAIisH,EAAMwC,EAEV,GADAzuH,EAAQg0G,GAAeh0G,QACTnS,IAAVmS,GAAiC,gBAAVA,IAA4Bz1B,KAAK2kI,UACxD,OAAO3kI,KAKX,OAFAkkJ,EAAclkJ,KAAK6lI,OAASoe,GAAiBD,GAErCvuH,GACJ,IAAK,OACDisH,EAAOwC,EAAYlkJ,KAAKoqI,OAAQ,EAAG,GACnC,MACJ,IAAK,UACDsX,EAAOwC,EACHlkJ,KAAKoqI,OACLpqI,KAAKwe,QAAWxe,KAAKwe,QAAU,EAC/B,GAEJ,MACJ,IAAK,QACDkjI,EAAOwC,EAAYlkJ,KAAKoqI,OAAQpqI,KAAKwe,QAAS,GAC9C,MACJ,IAAK,OACDkjI,EAAOwC,EACHlkJ,KAAKoqI,OACLpqI,KAAKwe,QACLxe,KAAK+7C,OAAS/7C,KAAK2wI,WAEvB,MACJ,IAAK,UACD+Q,EAAOwC,EACHlkJ,KAAKoqI,OACLpqI,KAAKwe,QACLxe,KAAK+7C,QAAU/7C,KAAKmkJ,aAAe,IAEvC,MACJ,IAAK,MACL,IAAK,OACDzC,EAAOwC,EAAYlkJ,KAAKoqI,OAAQpqI,KAAKwe,QAASxe,KAAK+7C,QACnD,MACJ,IAAK,OACD2lG,EAAO1hJ,KAAK+kI,GAAGr3B,UACfg0C,GAAQmC,GACJnC,GAAQ1hJ,KAAK6lI,OAAS,EAAI7lI,KAAKq+I,YAAcqF,IAC7CC,IAEJ,MACJ,IAAK,SACDjC,EAAO1hJ,KAAK+kI,GAAGr3B,UACfg0C,GAAQmC,GAAMnC,EAAMgC,IACpB,MACJ,IAAK,SACDhC,EAAO1hJ,KAAK+kI,GAAGr3B,UACfg0C,GAAQmC,GAAMnC,EAAM+B,IACpB,MAKR,OAFAzjJ,KAAK+kI,GAAG0Z,QAAQiD,GAChB92I,EAAMs7H,aAAalmI,MAAM,GAClBA,KAGX,SAAS+hJ,GAAMtsH,GACX,IAAIisH,EAAMwC,EAEV,GADAzuH,EAAQg0G,GAAeh0G,QACTnS,IAAVmS,GAAiC,gBAAVA,IAA4Bz1B,KAAK2kI,UACxD,OAAO3kI,KAKX,OAFAkkJ,EAAclkJ,KAAK6lI,OAASoe,GAAiBD,GAErCvuH,GACJ,IAAK,OACDisH,EAAOwC,EAAYlkJ,KAAKoqI,OAAS,EAAG,EAAG,GAAK,EAC5C,MACJ,IAAK,UACDsX,EACIwC,EACIlkJ,KAAKoqI,OACLpqI,KAAKwe,QAAWxe,KAAKwe,QAAU,EAAK,EACpC,GACA,EACR,MACJ,IAAK,QACDkjI,EAAOwC,EAAYlkJ,KAAKoqI,OAAQpqI,KAAKwe,QAAU,EAAG,GAAK,EACvD,MACJ,IAAK,OACDkjI,EACIwC,EACIlkJ,KAAKoqI,OACLpqI,KAAKwe,QACLxe,KAAK+7C,OAAS/7C,KAAK2wI,UAAY,GAC/B,EACR,MACJ,IAAK,UACD+Q,EACIwC,EACIlkJ,KAAKoqI,OACLpqI,KAAKwe,QACLxe,KAAK+7C,QAAU/7C,KAAKmkJ,aAAe,GAAK,GACxC,EACR,MACJ,IAAK,MACL,IAAK,OACDzC,EAAOwC,EAAYlkJ,KAAKoqI,OAAQpqI,KAAKwe,QAASxe,KAAK+7C,OAAS,GAAK,EACjE,MACJ,IAAK,OACD2lG,EAAO1hJ,KAAK+kI,GAAGr3B,UACfg0C,GACIiC,GACAE,GACInC,GAAQ1hJ,KAAK6lI,OAAS,EAAI7lI,KAAKq+I,YAAcqF,IAC7CC,IAEJ,EACJ,MACJ,IAAK,SACDjC,EAAO1hJ,KAAK+kI,GAAGr3B,UACfg0C,GAAQgC,GAAgBG,GAAMnC,EAAMgC,IAAiB,EACrD,MACJ,IAAK,SACDhC,EAAO1hJ,KAAK+kI,GAAGr3B,UACfg0C,GAAQ+B,GAAgBI,GAAMnC,EAAM+B,IAAiB,EACrD,MAKR,OAFAzjJ,KAAK+kI,GAAG0Z,QAAQiD,GAChB92I,EAAMs7H,aAAalmI,MAAM,GAClBA,KAGX,SAAS0tG,KACL,OAAO1tG,KAAK+kI,GAAGr3B,UAAkC,KAArB1tG,KAAK8lI,SAAW,GAGhD,SAASse,KACL,OAAOz9I,KAAKi6B,MAAM5gC,KAAK0tG,UAAY,KAGvC,SAASq1C,KACL,OAAO,IAAIrrI,KAAK1X,KAAK0tG,WAGzB,SAAS5pF,KACL,IAAIjiB,EAAI7B,KACR,MAAO,CACH6B,EAAEuoI,OACFvoI,EAAE2c,QACF3c,EAAEk6C,OACFl6C,EAAEiB,OACFjB,EAAEmB,SACFnB,EAAEqhG,SACFrhG,EAAEm6I,eAIV,SAASv8C,KACL,IAAI59F,EAAI7B,KACR,MAAO,CACHm9I,MAAOt7I,EAAEuoI,OACThqI,OAAQyB,EAAE2c,QACVu9B,KAAMl6C,EAAEk6C,OACRh9B,MAAOld,EAAEkd,QACT8B,QAAShf,EAAEgf,UACXg5F,QAASh4G,EAAEg4G,UACX2jC,aAAc37I,EAAE27I,gBAIxB,SAASh1F,KAEL,OAAOxoD,KAAK2kI,UAAY3kI,KAAK6iJ,cAAgB,KAGjD,SAASwB,KACL,OAAO1f,EAAQ3kI,MAGnB,SAASskJ,KACL,OAAO57I,EAAO,GAAI+7H,EAAgBzkI,OAGtC,SAASukJ,KACL,OAAO9f,EAAgBzkI,MAAM08E,SAGjC,SAAS8nE,KACL,MAAO,CACH3/I,MAAO7E,KAAKgiB,GACZ1H,OAAQta,KAAK2lI,GACbpC,OAAQvjI,KAAK+lI,QACbqW,MAAOp8I,KAAK6lI,OACZrC,OAAQxjI,KAAKilI,SAqDrB,SAASwf,GAAW5iJ,EAAGyY,GACnB,IAAI5Q,EACA1E,EACA+2C,EACA53C,EAAOnE,KAAK0kJ,OAASzO,GAAU,MAAMyO,MACzC,IAAKh7I,EAAI,EAAG1E,EAAIb,EAAKiF,OAAQM,EAAI1E,IAAK0E,EAAG,CACrC,cAAevF,EAAKuF,GAAGtF,OACnB,IAAK,SAED23C,EAAOnxC,EAAMzG,EAAKuF,GAAGtF,OAAOw9I,QAAQ,OACpCz9I,EAAKuF,GAAGtF,MAAQ23C,EAAK2xD,UACrB,MAGR,cAAevpG,EAAKuF,GAAGjF,OACnB,IAAK,YACDN,EAAKuF,GAAGjF,MAASC,IACjB,MACJ,IAAK,SAEDq3C,EAAOnxC,EAAMzG,EAAKuF,GAAGjF,OAAOm9I,QAAQ,OAAOl0C,UAC3CvpG,EAAKuF,GAAGjF,MAAQs3C,EAAK2xD,UACrB,OAGZ,OAAOvpG,EAGX,SAASwgJ,GAAgBC,EAAStqI,EAAQkpH,GACtC,IAAI95H,EACA1E,EAEAV,EACAE,EACAD,EAHAJ,EAAOnE,KAAKmE,OAMhB,IAFAygJ,EAAUA,EAAQ3hF,cAEbv5D,EAAI,EAAG1E,EAAIb,EAAKiF,OAAQM,EAAI1E,IAAK0E,EAKlC,GAJApF,EAAOH,EAAKuF,GAAGpF,KAAK2+D,cACpBz+D,EAAOL,EAAKuF,GAAGlF,KAAKy+D,cACpB1+D,EAASJ,EAAKuF,GAAGnF,OAAO0+D,cAEpBugE,EACA,OAAQlpH,GACJ,IAAK,IACL,IAAK,KACL,IAAK,MACD,GAAI9V,IAASogJ,EACT,OAAOzgJ,EAAKuF,GAEhB,MAEJ,IAAK,OACD,GAAIpF,IAASsgJ,EACT,OAAOzgJ,EAAKuF,GAEhB,MAEJ,IAAK,QACD,GAAInF,IAAWqgJ,EACX,OAAOzgJ,EAAKuF,GAEhB,WAEL,GAAI,CAACpF,EAAME,EAAMD,GAAQ2J,QAAQ02I,IAAY,EAChD,OAAOzgJ,EAAKuF,GAKxB,SAASm7I,GAAsBvgB,EAAK8F,GAChC,IAAI5+G,EAAM84G,EAAIlgI,OAASkgI,EAAI7/H,MAAQ,GAAM,EACzC,YAAa6e,IAAT8mH,EACOx/H,EAAM05H,EAAIlgI,OAAOgmI,OAEjBx/H,EAAM05H,EAAIlgI,OAAOgmI,QAAUA,EAAO9F,EAAIjgI,QAAUmnB,EAI/D,SAASs5H,KACL,IAAIp7I,EACA1E,EACAs2B,EACAn3B,EAAOnE,KAAKkoI,aAAa/jI,OAC7B,IAAKuF,EAAI,EAAG1E,EAAIb,EAAKiF,OAAQM,EAAI1E,IAAK0E,EAAG,CAIrC,GAFA4xB,EAAMt7B,KAAK8F,QAAQ87I,QAAQ,OAAOl0C,UAE9BvpG,EAAKuF,GAAGtF,OAASk3B,GAAOA,GAAOn3B,EAAKuF,GAAGjF,MACvC,OAAON,EAAKuF,GAAGpF,KAEnB,GAAIH,EAAKuF,GAAGjF,OAAS62B,GAAOA,GAAOn3B,EAAKuF,GAAGtF,MACvC,OAAOD,EAAKuF,GAAGpF,KAIvB,MAAO,GAGX,SAASygJ,KACL,IAAIr7I,EACA1E,EACAs2B,EACAn3B,EAAOnE,KAAKkoI,aAAa/jI,OAC7B,IAAKuF,EAAI,EAAG1E,EAAIb,EAAKiF,OAAQM,EAAI1E,IAAK0E,EAAG,CAIrC,GAFA4xB,EAAMt7B,KAAK8F,QAAQ87I,QAAQ,OAAOl0C,UAE9BvpG,EAAKuF,GAAGtF,OAASk3B,GAAOA,GAAOn3B,EAAKuF,GAAGjF,MACvC,OAAON,EAAKuF,GAAGnF,OAEnB,GAAIJ,EAAKuF,GAAGjF,OAAS62B,GAAOA,GAAOn3B,EAAKuF,GAAGtF,MACvC,OAAOD,EAAKuF,GAAGnF,OAIvB,MAAO,GAGX,SAASygJ,KACL,IAAIt7I,EACA1E,EACAs2B,EACAn3B,EAAOnE,KAAKkoI,aAAa/jI,OAC7B,IAAKuF,EAAI,EAAG1E,EAAIb,EAAKiF,OAAQM,EAAI1E,IAAK0E,EAAG,CAIrC,GAFA4xB,EAAMt7B,KAAK8F,QAAQ87I,QAAQ,OAAOl0C,UAE9BvpG,EAAKuF,GAAGtF,OAASk3B,GAAOA,GAAOn3B,EAAKuF,GAAGjF,MACvC,OAAON,EAAKuF,GAAGlF,KAEnB,GAAIL,EAAKuF,GAAGjF,OAAS62B,GAAOA,GAAOn3B,EAAKuF,GAAGtF,MACvC,OAAOD,EAAKuF,GAAGlF,KAIvB,MAAO,GAGX,SAASygJ,KACL,IAAIv7I,EACA1E,EACAwmB,EACA8P,EACAn3B,EAAOnE,KAAKkoI,aAAa/jI,OAC7B,IAAKuF,EAAI,EAAG1E,EAAIb,EAAKiF,OAAQM,EAAI1E,IAAK0E,EAMlC,GALA8hB,EAAMrnB,EAAKuF,GAAGtF,OAASD,EAAKuF,GAAGjF,MAAQ,GAAM,EAG7C62B,EAAMt7B,KAAK8F,QAAQ87I,QAAQ,OAAOl0C,UAG7BvpG,EAAKuF,GAAGtF,OAASk3B,GAAOA,GAAOn3B,EAAKuF,GAAGjF,OACvCN,EAAKuF,GAAGjF,OAAS62B,GAAOA,GAAOn3B,EAAKuF,GAAGtF,MAExC,OACKpE,KAAKoqI,OAASx/H,EAAMzG,EAAKuF,GAAGtF,OAAOgmI,QAAU5+G,EAC9CrnB,EAAKuF,GAAGrF,OAKpB,OAAOrE,KAAKoqI,OAGhB,SAAS8a,GAAc9Y,GAInB,OAHKnJ,EAAWjjI,KAAM,mBAClBmlJ,GAAiB58I,KAAKvI,MAEnBosI,EAAWpsI,KAAKolJ,eAAiBplJ,KAAKqlJ,WAGjD,SAASC,GAAclZ,GAInB,OAHKnJ,EAAWjjI,KAAM,mBAClBmlJ,GAAiB58I,KAAKvI,MAEnBosI,EAAWpsI,KAAKulJ,eAAiBvlJ,KAAKqlJ,WAGjD,SAASG,GAAgBpZ,GAIrB,OAHKnJ,EAAWjjI,KAAM,qBAClBmlJ,GAAiB58I,KAAKvI,MAEnBosI,EAAWpsI,KAAKylJ,iBAAmBzlJ,KAAKqlJ,WAGnD,SAASK,GAAatZ,EAAU7I,GAC5B,OAAOA,EAAO+hB,cAAclZ,GAGhC,SAASuZ,GAAavZ,EAAU7I,GAC5B,OAAOA,EAAO2hB,cAAc9Y,GAGhC,SAASwZ,GAAexZ,EAAU7I,GAC9B,OAAOA,EAAOiiB,gBAAgBpZ,GAGlC,SAASyZ,GAAoBzZ,EAAU7I,GACnC,OAAOA,EAAOuiB,sBAAwBla,GAG1C,SAASuZ,KACL,IAIIz7I,EACA1E,EALA+gJ,EAAa,GACbC,EAAa,GACbC,EAAe,GACfvW,EAAc,GAGdvrI,EAAOnE,KAAKmE,OAEhB,IAAKuF,EAAI,EAAG1E,EAAIb,EAAKiF,OAAQM,EAAI1E,IAAK0E,EAClCs8I,EAAWl5I,KAAKy/H,GAAYpoI,EAAKuF,GAAGpF,OACpCyhJ,EAAWj5I,KAAKy/H,GAAYpoI,EAAKuF,GAAGlF,OACpCyhJ,EAAan5I,KAAKy/H,GAAYpoI,EAAKuF,GAAGnF,SAEtCmrI,EAAY5iI,KAAKy/H,GAAYpoI,EAAKuF,GAAGpF,OACrCorI,EAAY5iI,KAAKy/H,GAAYpoI,EAAKuF,GAAGlF,OACrCkrI,EAAY5iI,KAAKy/H,GAAYpoI,EAAKuF,GAAGnF,SAGzCvE,KAAKqlJ,WAAa,IAAIpoG,OAAO,KAAOyyF,EAAYpiI,KAAK,KAAO,IAAK,KACjEtN,KAAKolJ,eAAiB,IAAInoG,OAAO,KAAO+oG,EAAW14I,KAAK,KAAO,IAAK,KACpEtN,KAAKulJ,eAAiB,IAAItoG,OAAO,KAAO8oG,EAAWz4I,KAAK,KAAO,IAAK,KACpEtN,KAAKylJ,iBAAmB,IAAIxoG,OACxB,KAAOgpG,EAAa34I,KAAK,KAAO,IAChC,KAcR,SAAS44I,GAAuB38I,EAAOurF,GACnCizC,EAAe,EAAG,CAACx+H,EAAOA,EAAMH,QAAS,EAAG0rF,GA0ChD,SAASqxD,GAAethJ,GACpB,OAAOuhJ,GAAqB79I,KACxBvI,KACA6E,EACA7E,KAAKuC,OACLvC,KAAK2wI,UACL3wI,KAAKkoI,aAAaoJ,MAAM9uI,IACxBxC,KAAKkoI,aAAaoJ,MAAM7uI,KAIhC,SAAS4jJ,GAAkBxhJ,GACvB,OAAOuhJ,GAAqB79I,KACxBvI,KACA6E,EACA7E,KAAKu9I,UACLv9I,KAAKmkJ,aACL,EACA,GAIR,SAASmC,KACL,OAAOnV,GAAYnxI,KAAKoqI,OAAQ,EAAG,GAGvC,SAASmc,KACL,OAAOpV,GAAYnxI,KAAKwmJ,cAAe,EAAG,GAG9C,SAASC,KACL,IAAIC,EAAW1mJ,KAAKkoI,aAAaoJ,MACjC,OAAOH,GAAYnxI,KAAKoqI,OAAQsc,EAASlkJ,IAAKkkJ,EAASjkJ,KAG3D,SAASkkJ,KACL,IAAID,EAAW1mJ,KAAKkoI,aAAaoJ,MACjC,OAAOH,GAAYnxI,KAAKs6I,WAAYoM,EAASlkJ,IAAKkkJ,EAASjkJ,KAG/D,SAAS2jJ,GAAqBvhJ,EAAOtC,EAAMouI,EAASnuI,EAAKC,GACrD,IAAImkJ,EACJ,OAAa,MAAT/hJ,EACOosI,GAAWjxI,KAAMwC,EAAKC,GAAK2nI,MAElCwc,EAAczV,GAAYtsI,EAAOrC,EAAKC,GAClCF,EAAOqkJ,IACPrkJ,EAAOqkJ,GAEJC,GAAWt+I,KAAKvI,KAAM6E,EAAOtC,EAAMouI,EAASnuI,EAAKC,IAIhE,SAASokJ,GAAWvM,EAAU/3I,EAAMouI,EAASnuI,EAAKC,GAC9C,IAAIqkJ,EAAgBpW,GAAmB4J,EAAU/3I,EAAMouI,EAASnuI,EAAKC,GACjEs5C,EAAOm0F,GAAc4W,EAAc1c,KAAM,EAAG0c,EAAc9V,WAK9D,OAHAhxI,KAAKoqI,KAAKruF,EAAKq0F,kBACfpwI,KAAKwe,MAAMu9B,EAAK89F,eAChB75I,KAAK+7C,KAAKA,EAAK+9F,cACR95I,KAwBX,SAAS+mJ,GAAcliJ,GACnB,OAAgB,MAATA,EACD8B,KAAKg3B,MAAM39B,KAAKwe,QAAU,GAAK,GAC/Bxe,KAAKwe,MAAoB,GAAb3Z,EAAQ,GAAU7E,KAAKwe,QAAU,GAnavDupH,EAAe,IAAK,EAAG,EAAG,WAC1BA,EAAe,KAAM,EAAG,EAAG,WAC3BA,EAAe,MAAO,EAAG,EAAG,WAC5BA,EAAe,OAAQ,EAAG,EAAG,WAC7BA,EAAe,QAAS,EAAG,EAAG,aAE9BA,EAAe,IAAK,CAAC,IAAK,GAAI,KAAM,WACpCA,EAAe,IAAK,CAAC,KAAM,GAAI,EAAG,WAClCA,EAAe,IAAK,CAAC,MAAO,GAAI,EAAG,WACnCA,EAAe,IAAK,CAAC,OAAQ,GAAI,EAAG,WAEpCmE,GAAc,IAAKwZ,IACnBxZ,GAAc,KAAMwZ,IACpBxZ,GAAc,MAAOwZ,IACrBxZ,GAAc,OAAQyZ,IACtBzZ,GAAc,QAAS0Z,IAEvBhZ,GACI,CAAC,IAAK,KAAM,MAAO,OAAQ,UAC3B,SAAU/nI,EAAO+tE,EAAOqzD,EAAQ18H,GAC5B,IAAI+6H,EAAM2B,EAAOF,QAAQihB,UAAUniJ,EAAO0E,EAAO08H,EAAOhB,SACpDX,EACAG,EAAgBwB,GAAQ3B,IAAMA,EAE9BG,EAAgBwB,GAAQjC,WAAan/H,KAKjDqnI,GAAc,IAAKN,IACnBM,GAAc,KAAMN,IACpBM,GAAc,MAAON,IACrBM,GAAc,OAAQN,IACtBM,GAAc,KAAM2Z,IAEpBjZ,GAAc,CAAC,IAAK,KAAM,MAAO,QAASK,IAC1CL,GAAc,CAAC,OAAO,SAAU/nI,EAAO+tE,EAAOqzD,EAAQ18H,GAClD,IAAIzE,EACAmhI,EAAOF,QAAQ+f,uBACfhhJ,EAAQD,EAAMC,MAAMmhI,EAAOF,QAAQ+f,uBAGnC7f,EAAOF,QAAQnhI,oBACfguE,EAAMq6D,IAAQhH,EAAOF,QAAQnhI,oBAAoBC,EAAOC,GAExD8tE,EAAMq6D,IAAQloI,SAASF,EAAO,OA4OtCkjI,EAAe,EAAG,CAAC,KAAM,GAAI,GAAG,WAC5B,OAAO/nI,KAAKs6I,WAAa,OAG7BvS,EAAe,EAAG,CAAC,KAAM,GAAI,GAAG,WAC5B,OAAO/nI,KAAKwmJ,cAAgB,OAOhCN,GAAuB,OAAQ,YAC/BA,GAAuB,QAAS,YAChCA,GAAuB,OAAQ,eAC/BA,GAAuB,QAAS,eAIhC7c,GAAa,WAAY,MACzBA,GAAa,cAAe,MAI5BU,GAAgB,WAAY,GAC5BA,GAAgB,cAAe,GAI/BmC,GAAc,IAAKL,IACnBK,GAAc,IAAKL,IACnBK,GAAc,KAAMZ,GAAWJ,IAC/BgB,GAAc,KAAMZ,GAAWJ,IAC/BgB,GAAc,OAAQR,GAAWN,IACjCc,GAAc,OAAQR,GAAWN,IACjCc,GAAc,QAASP,GAAWN,IAClCa,GAAc,QAASP,GAAWN,IAElCyB,GACI,CAAC,OAAQ,QAAS,OAAQ,UAC1B,SAAUjoI,EAAOtC,EAAM0jI,EAAQ18H,GAC3BhH,EAAKgH,EAAMomB,OAAO,EAAG,IAAM26G,GAAMzlI,MAIzCioI,GAAkB,CAAC,KAAM,OAAO,SAAUjoI,EAAOtC,EAAM0jI,EAAQ18H,GAC3DhH,EAAKgH,GAASqB,EAAMglI,kBAAkB/qI,MAsE1CkjI,EAAe,IAAK,EAAG,KAAM,WAI7BsB,GAAa,UAAW,KAIxBU,GAAgB,UAAW,GAI3BmC,GAAc,IAAKjB,IACnB2B,GAAc,KAAK,SAAU/nI,EAAO+tE,GAChCA,EAAMs6D,IAA8B,GAApB5C,GAAMzlI,GAAS,MAanCkjI,EAAe,IAAK,CAAC,KAAM,GAAI,KAAM,QAIrCsB,GAAa,OAAQ,KAGrBU,GAAgB,OAAQ,GAIxBmC,GAAc,IAAKZ,IACnBY,GAAc,KAAMZ,GAAWJ,IAC/BgB,GAAc,MAAM,SAAUE,EAAU7I,GAEpC,OAAO6I,EACD7I,EAAOsD,yBAA2BtD,EAAOuD,cACzCvD,EAAOqD,kCAGjBgG,GAAc,CAAC,IAAK,MAAOO,IAC3BP,GAAc,MAAM,SAAU/nI,EAAO+tE,GACjCA,EAAMu6D,IAAQ7C,GAAMzlI,EAAMC,MAAMwmI,IAAW,OAK/C,IAAI2b,GAAmBxc,GAAW,QAAQ,GAyB1C,SAASyc,GAAgBriJ,GACrB,IAAImsI,EACArqI,KAAKu9B,OACAlkC,KAAK8F,QAAQ87I,QAAQ,OAAS5hJ,KAAK8F,QAAQ87I,QAAQ,SAAW,OAC/D,EACR,OAAgB,MAAT/8I,EAAgBmsI,EAAYhxI,KAAKoN,IAAIvI,EAAQmsI,EAAW,KA1BnEjJ,EAAe,MAAO,CAAC,OAAQ,GAAI,OAAQ,aAI3CsB,GAAa,YAAa,OAG1BU,GAAgB,YAAa,GAI7BmC,GAAc,MAAOT,IACrBS,GAAc,OAAQf,IACtByB,GAAc,CAAC,MAAO,SAAS,SAAU/nI,EAAO+tE,EAAOqzD,GACnDA,EAAOmU,WAAa9P,GAAMzlI,MAiB9BkjI,EAAe,IAAK,CAAC,KAAM,GAAI,EAAG,UAIlCsB,GAAa,SAAU,KAIvBU,GAAgB,SAAU,IAI1BmC,GAAc,IAAKZ,IACnBY,GAAc,KAAMZ,GAAWJ,IAC/B0B,GAAc,CAAC,IAAK,MAAOS,IAI3B,IAAI8Z,GAAe1c,GAAW,WAAW,GAIzC1C,EAAe,IAAK,CAAC,KAAM,GAAI,EAAG,UAIlCsB,GAAa,SAAU,KAIvBU,GAAgB,SAAU,IAI1BmC,GAAc,IAAKZ,IACnBY,GAAc,KAAMZ,GAAWJ,IAC/B0B,GAAc,CAAC,IAAK,MAAOU,IAI3B,IA8CI/jI,GAAO69I,GA9CPC,GAAe5c,GAAW,WAAW,GA+CzC,IA3CA1C,EAAe,IAAK,EAAG,GAAG,WACtB,SAAU/nI,KAAKg8I,cAAgB,QAGnCjU,EAAe,EAAG,CAAC,KAAM,GAAI,GAAG,WAC5B,SAAU/nI,KAAKg8I,cAAgB,OAGnCjU,EAAe,EAAG,CAAC,MAAO,GAAI,EAAG,eACjCA,EAAe,EAAG,CAAC,OAAQ,GAAI,GAAG,WAC9B,OAA4B,GAArB/nI,KAAKg8I,iBAEhBjU,EAAe,EAAG,CAAC,QAAS,GAAI,GAAG,WAC/B,OAA4B,IAArB/nI,KAAKg8I,iBAEhBjU,EAAe,EAAG,CAAC,SAAU,GAAI,GAAG,WAChC,OAA4B,IAArB/nI,KAAKg8I,iBAEhBjU,EAAe,EAAG,CAAC,UAAW,GAAI,GAAG,WACjC,OAA4B,IAArB/nI,KAAKg8I,iBAEhBjU,EAAe,EAAG,CAAC,WAAY,GAAI,GAAG,WAClC,OAA4B,IAArB/nI,KAAKg8I,iBAEhBjU,EAAe,EAAG,CAAC,YAAa,GAAI,GAAG,WACnC,OAA4B,IAArB/nI,KAAKg8I,iBAKhB3S,GAAa,cAAe,MAI5BU,GAAgB,cAAe,IAI/BmC,GAAc,IAAKT,GAAWR,IAC9BiB,GAAc,KAAMT,GAAWP,IAC/BgB,GAAc,MAAOT,GAAWN,IAG3B5hI,GAAQ,OAAQA,GAAMH,QAAU,EAAGG,IAAS,IAC7C2iI,GAAc3iI,GAAOqiI,IAGzB,SAAS0b,GAAQziJ,EAAO+tE,GACpBA,EAAM26D,IAAejD,GAAuB,KAAhB,KAAOzlI,IAGvC,IAAK0E,GAAQ,IAAKA,GAAMH,QAAU,EAAGG,IAAS,IAC1CqjI,GAAcrjI,GAAO+9I,IAYzB,SAASC,KACL,OAAOvnJ,KAAK6lI,OAAS,MAAQ,GAGjC,SAAS2hB,KACL,OAAOxnJ,KAAK6lI,OAAS,6BAA+B,GAdxDuhB,GAAoB3c,GAAW,gBAAgB,GAI/C1C,EAAe,IAAK,EAAG,EAAG,YAC1BA,EAAe,KAAM,EAAG,EAAG,YAY3B,IAAIrsC,GAAQsqC,EAAO39H,UAwGnB,SAASo/I,GAAW5iJ,GAChB,OAAO81I,GAAoB,IAAR91I,GAGvB,SAAS6iJ,KACL,OAAO/M,GAAYztI,MAAM,KAAM/D,WAAWw+I,YAG9C,SAASC,GAAmBn4I,GACxB,OAAOA,EA/GXisF,GAAMtuF,IAAMA,GACZsuF,GAAMz6F,SAAWwgJ,GACjB/lD,GAAM51F,MAAQA,GACd41F,GAAM0tC,KAAOA,GACb1tC,GAAMqmD,MAAQA,GACdrmD,GAAMphF,OAASA,GACfohF,GAAMnvF,KAAOA,GACbmvF,GAAM4nD,QAAUA,GAChB5nD,GAAM/uF,GAAKA,GACX+uF,GAAM6nD,MAAQA,GACd7nD,GAAM/1F,IAAMklI,GACZnvC,GAAM6oD,UAAYA,GAClB7oD,GAAM6kD,QAAUA,GAChB7kD,GAAM8kD,SAAWA,GACjB9kD,GAAMsmD,UAAYA,GAClBtmD,GAAM0mD,OAASA,GACf1mD,GAAM4mD,cAAgBA,GACtB5mD,GAAM6mD,eAAiBA,GACvB7mD,GAAMipC,QAAU0f,GAChB3oD,GAAMj0F,KAAOA,GACbi0F,GAAM6nC,OAASA,GACf7nC,GAAMwsC,WAAaA,GACnBxsC,GAAMzoE,IAAMspH,GACZ7gD,GAAM90F,IAAMy1I,GACZ3gD,GAAM4oD,aAAeA,GACrB5oD,GAAM91F,IAAMklI,GACZpvC,GAAMkmD,QAAUA,GAChBlmD,GAAM4jD,SAAWA,GACjB5jD,GAAM53E,QAAUA,GAChB43E,GAAM+D,SAAWA,GACjB/D,GAAMqnD,OAASA,GACfrnD,GAAMmnD,YAAcA,GACpBnnD,GAAMsnD,QAAUA,GACM,qBAAX/tD,QAAwC,MAAdA,OAAO4yD,MACxCnsD,GAAMzG,OAAO4yD,IAAI,+BAAiC,WAC9C,MAAO,UAAY7nJ,KAAKsa,SAAW,MAG3CohF,GAAMlzC,OAASA,GACfkzC,GAAMpzF,SAAWA,GACjBozF,GAAM0oD,KAAOA,GACb1oD,GAAMgS,QAAUA,GAChBhS,GAAM8oD,aAAeA,GACrB9oD,GAAMkpD,QAAUE,GAChBppD,GAAMosD,UAAY/C,GAClBrpD,GAAMqsD,QAAU/C,GAChBtpD,GAAMssD,QAAU/C,GAChBvpD,GAAM0uC,KAAOyF,GACbn0C,GAAMyuC,WAAa2F,GACnBp0C,GAAM4+C,SAAW6L,GACjBzqD,GAAM8qD,YAAcH,GACpB3qD,GAAM2hD,QAAU3hD,GAAM0hD,SAAW2J,GACjCrrD,GAAMl9E,MAAQwwH,GACdtzC,GAAMkvC,YAAcqE,GACpBvzC,GAAMn5F,KAAOm5F,GAAM4hD,MAAQ5L,GAC3Bh2C,GAAM6hD,QAAU7hD,GAAMusD,SAAWtW,GACjCj2C,GAAMy1C,YAAcsV,GACpB/qD,GAAMwsD,gBAAkBvB,GACxBjrD,GAAMysD,eAAiB7B,GACvB5qD,GAAM0sD,sBAAwB7B,GAC9B7qD,GAAM3/C,KAAOkrG,GACbvrD,GAAMj6E,IAAMi6E,GAAM1yB,KAAOuqE,GACzB73C,GAAMi1C,QAAU6C,GAChB93C,GAAMyoD,WAAa1Q,GACnB/3C,GAAMs1C,UAAYkW,GAClBxrD,GAAM54F,KAAO44F,GAAM38E,MAAQk2H,GAC3Bv5C,GAAM14F,OAAS04F,GAAM76E,QAAUsmI,GAC/BzrD,GAAMwH,OAASxH,GAAMme,QAAUwtC,GAC/B3rD,GAAMsgD,YAActgD,GAAM8hD,aAAe4J,GACzC1rD,GAAM2iD,UAAYQ,GAClBnjD,GAAMgoC,IAAM0b,GACZ1jD,GAAMgjD,MAAQW,GACd3jD,GAAMisD,UAAYpI,GAClB7jD,GAAM+jD,qBAAuBA,GAC7B/jD,GAAM2sD,MAAQ3I,GACdhkD,GAAMmkD,QAAUA,GAChBnkD,GAAMokD,YAAcA,GACpBpkD,GAAMqkD,MAAQA,GACdrkD,GAAM0gD,MAAQ2D,GACdrkD,GAAM4sD,SAAWf,GACjB7rD,GAAM6sD,SAAWf,GACjB9rD,GAAM8sD,MAAQniB,EACV,kDACA4gB,IAEJvrD,GAAMt7F,OAASimI,EACX,mDACA2I,IAEJtzC,GAAMyhD,MAAQ9W,EACV,iDACAwJ,IAEJn0C,GAAMwnD,KAAO7c,EACT,2GACA8Y,IAEJzjD,GAAM+sD,aAAepiB,EACjB,0GACAsZ,IAeJ,IAAI+I,GAAUxhB,EAAO7+H,UAuCrB,SAASumB,GAAMtU,EAAQ9N,EAAOm8I,EAAOx7C,GACjC,IAAIo2B,EAAS0S,KACTvS,EAAMJ,IAAY19H,IAAIunG,EAAQ3gG,GAClC,OAAO+2H,EAAOolB,GAAOjlB,EAAKppH,GAG9B,SAASsuI,GAAetuI,EAAQ9N,EAAOm8I,GAQnC,GAPIz4F,EAAS51C,KACT9N,EAAQ8N,EACRA,OAASgJ,GAGbhJ,EAASA,GAAU,GAEN,MAAT9N,EACA,OAAOoiB,GAAMtU,EAAQ9N,EAAOm8I,EAAO,SAGvC,IAAIj/I,EACA62B,EAAM,GACV,IAAK72B,EAAI,EAAGA,EAAI,GAAIA,IAChB62B,EAAI72B,GAAKklB,GAAMtU,EAAQ5Q,EAAGi/I,EAAO,SAErC,OAAOpoH,EAWX,SAASsoH,GAAiBC,EAAcxuI,EAAQ9N,EAAOm8I,GACvB,mBAAjBG,GACH54F,EAAS51C,KACT9N,EAAQ8N,EACRA,OAASgJ,GAGbhJ,EAASA,GAAU,KAEnBA,EAASwuI,EACTt8I,EAAQ8N,EACRwuI,GAAe,EAEX54F,EAAS51C,KACT9N,EAAQ8N,EACRA,OAASgJ,GAGbhJ,EAASA,GAAU,IAGvB,IAEI5Q,EAFA65H,EAAS0S,KACTx6D,EAAQqtE,EAAevlB,EAAO+N,MAAM9uI,IAAM,EAE1C+9B,EAAM,GAEV,GAAa,MAAT/zB,EACA,OAAOoiB,GAAMtU,GAAS9N,EAAQivE,GAAS,EAAGktE,EAAO,OAGrD,IAAKj/I,EAAI,EAAGA,EAAI,EAAGA,IACf62B,EAAI72B,GAAKklB,GAAMtU,GAAS5Q,EAAI+xE,GAAS,EAAGktE,EAAO,OAEnD,OAAOpoH,EAGX,SAASwoH,GAAWzuI,EAAQ9N,GACxB,OAAOo8I,GAAetuI,EAAQ9N,EAAO,UAGzC,SAASw8I,GAAgB1uI,EAAQ9N,GAC7B,OAAOo8I,GAAetuI,EAAQ9N,EAAO,eAGzC,SAASy8I,GAAaH,EAAcxuI,EAAQ9N,GACxC,OAAOq8I,GAAiBC,EAAcxuI,EAAQ9N,EAAO,YAGzD,SAAS08I,GAAkBJ,EAAcxuI,EAAQ9N,GAC7C,OAAOq8I,GAAiBC,EAAcxuI,EAAQ9N,EAAO,iBAGzD,SAAS28I,GAAgBL,EAAcxuI,EAAQ9N,GAC3C,OAAOq8I,GAAiBC,EAAcxuI,EAAQ9N,EAAO,eA5HzDk8I,GAAQznJ,SAAWA,EACnBynJ,GAAQhoJ,eAAiBA,EACzBgoJ,GAAQ12D,YAAcA,EACtB02D,GAAQnlJ,QAAUA,EAClBmlJ,GAAQngI,SAAWq/H,GACnBc,GAAQlgI,WAAao/H,GACrBc,GAAQlnJ,aAAeA,GACvBknJ,GAAQvf,WAAaA,GACrBuf,GAAQ9iJ,IAAMA,EACd8iJ,GAAQvkJ,KAAOsgJ,GACfiE,GAAQ1B,UAAYrC,GACpB+D,GAAQvN,gBAAkB0J,GAC1B6D,GAAQpD,cAAgBA,GACxBoD,GAAQxD,cAAgBA,GACxBwD,GAAQlD,gBAAkBA,GAE1BkD,GAAQtoJ,OAAS6tI,GACjBya,GAAQpoJ,YAAc6tI,GACtBua,GAAQrqI,YAAcuwH,GACtB8Z,GAAQpqI,YAAcA,GACtBoqI,GAAQjqI,iBAAmBA,GAC3BiqI,GAAQnmJ,KAAO8uI,GACfqX,GAAQU,eAAiB3X,GACzBiX,GAAQW,eAAiB7X,GAEzBkX,GAAQnoJ,SAAWkyI,GACnBiW,GAAQjoJ,YAAcoyI,GACtB6V,GAAQloJ,cAAgBmyI,GACxB+V,GAAQ3lE,cAAgBqwD,GAExBsV,GAAQxW,cAAgBA,GACxBwW,GAAQzW,mBAAqBA,GAC7ByW,GAAQ1W,iBAAmBA,GAE3B0W,GAAQtjJ,KAAOsvI,GACfgU,GAAQ3lJ,SAAWmyI,GA4FnBc,GAAmB,KAAM,CACrB7xI,KAAM,CACF,CACIC,MAAO,aACPK,MAAQC,IACRL,OAAQ,EACRC,KAAM,cACNC,OAAQ,KACRC,KAAM,MAEV,CACIJ,MAAO,aACPK,OAAQC,IACRL,OAAQ,EACRC,KAAM,gBACNC,OAAQ,KACRC,KAAM,OAGdlB,uBAAwB,uBACxBC,QAAS,SAAUI,GACf,IAAI6b,EAAI7b,EAAS,GACbR,EACmC,IAA/BmnI,GAAO3mI,EAAS,IAAO,IACjB,KACM,IAAN6b,EACA,KACM,IAANA,EACA,KACM,IAANA,EACA,KACA,KACd,OAAO7b,EAASR,KAMxByH,EAAMnD,KAAO4+H,EACT,wDACA2P,IAEJprI,EAAM0+I,SAAWjjB,EACb,gEACA4P,IAGJ,IAAIsT,GAAU5iJ,KAAKyiH,IAEnB,SAASA,KACL,IAAIh+G,EAAOpL,KAAK29I,MAahB,OAXA39I,KAAKy9I,cAAgB8L,GAAQvpJ,KAAKy9I,eAClCz9I,KAAK09I,MAAQ6L,GAAQvpJ,KAAK09I,OAC1B19I,KAAKkuI,QAAUqb,GAAQvpJ,KAAKkuI,SAE5B9iI,EAAKoyI,aAAe+L,GAAQn+I,EAAKoyI,cACjCpyI,EAAKyuG,QAAU0vC,GAAQn+I,EAAKyuG,SAC5BzuG,EAAKyV,QAAU0oI,GAAQn+I,EAAKyV,SAC5BzV,EAAK2T,MAAQwqI,GAAQn+I,EAAK2T,OAC1B3T,EAAKhL,OAASmpJ,GAAQn+I,EAAKhL,QAC3BgL,EAAK+xI,MAAQoM,GAAQn+I,EAAK+xI,OAEnBn9I,KAGX,SAASwpJ,GAActM,EAAUr4I,EAAOa,EAAO8N,GAC3C,IAAI8oI,EAAQU,GAAen4I,EAAOa,GAMlC,OAJAw3I,EAASO,eAAiBjqI,EAAY8oI,EAAMmB,cAC5CP,EAASQ,OAASlqI,EAAY8oI,EAAMoB,MACpCR,EAAShP,SAAW16H,EAAY8oI,EAAMpO,QAE/BgP,EAASU,UAIpB,SAAS6L,GAAM5kJ,EAAOa,GAClB,OAAO8jJ,GAAcxpJ,KAAM6E,EAAOa,EAAO,GAI7C,SAASgkJ,GAAW7kJ,EAAOa,GACvB,OAAO8jJ,GAAcxpJ,KAAM6E,EAAOa,GAAQ,GAG9C,SAASikJ,GAAQhmJ,GACb,OAAIA,EAAS,EACFgD,KAAKi6B,MAAMj9B,GAEXgD,KAAKg3B,KAAKh6B,GAIzB,SAASimJ,KACL,IAII/vC,EACAh5F,EACA9B,EACAo+H,EACA0M,EARArM,EAAex9I,KAAKy9I,cACpBz0E,EAAOhpE,KAAK09I,MACZt9I,EAASJ,KAAKkuI,QACd9iI,EAAOpL,KAAK29I,MAgDhB,OArCSH,GAAgB,GAAKx0E,GAAQ,GAAK5oE,GAAU,GAC5Co9I,GAAgB,GAAKx0E,GAAQ,GAAK5oE,GAAU,IAGjDo9I,GAAuD,MAAvCmM,GAAQG,GAAa1pJ,GAAU4oE,GAC/CA,EAAO,EACP5oE,EAAS,GAKbgL,EAAKoyI,aAAeA,EAAe,IAEnC3jC,EAAUwwB,GAASmT,EAAe,KAClCpyI,EAAKyuG,QAAUA,EAAU,GAEzBh5F,EAAUwpH,GAASxwB,EAAU,IAC7BzuG,EAAKyV,QAAUA,EAAU,GAEzB9B,EAAQsrH,GAASxpH,EAAU,IAC3BzV,EAAK2T,MAAQA,EAAQ,GAErBiqD,GAAQqhE,GAAStrH,EAAQ,IAGzB8qI,EAAiBxf,GAAS0f,GAAa/gF,IACvC5oE,GAAUypJ,EACV7gF,GAAQ2gF,GAAQG,GAAaD,IAG7B1M,EAAQ9S,GAASjqI,EAAS,IAC1BA,GAAU,GAEVgL,EAAK49D,KAAOA,EACZ59D,EAAKhL,OAASA,EACdgL,EAAK+xI,MAAQA,EAENn9I,KAGX,SAAS+pJ,GAAa/gF,GAGlB,OAAe,KAAPA,EAAe,OAG3B,SAAS8gF,GAAa1pJ,GAElB,OAAiB,OAATA,EAAmB,KAG/B,SAAS4pJ,GAAGv0H,GACR,IAAKz1B,KAAK2kI,UACN,OAAOp2B,IAEX,IAAIvlC,EACA5oE,EACAo9I,EAAex9I,KAAKy9I,cAIxB,GAFAhoH,EAAQg0G,GAAeh0G,GAET,UAAVA,GAA+B,YAAVA,GAAiC,SAAVA,EAG5C,OAFAuzC,EAAOhpE,KAAK09I,MAAQF,EAAe,MACnCp9I,EAASJ,KAAKkuI,QAAU6b,GAAa/gF,GAC7BvzC,GACJ,IAAK,QACD,OAAOr1B,EACX,IAAK,UACD,OAAOA,EAAS,EACpB,IAAK,OACD,OAAOA,EAAS,QAKxB,OADA4oE,EAAOhpE,KAAK09I,MAAQ/2I,KAAKu9B,MAAM4lH,GAAa9pJ,KAAKkuI,UACzCz4G,GACJ,IAAK,OACD,OAAOuzC,EAAO,EAAIw0E,EAAe,OACrC,IAAK,MACD,OAAOx0E,EAAOw0E,EAAe,MACjC,IAAK,OACD,OAAc,GAAPx0E,EAAYw0E,EAAe,KACtC,IAAK,SACD,OAAc,KAAPx0E,EAAcw0E,EAAe,IACxC,IAAK,SACD,OAAc,MAAPx0E,EAAew0E,EAAe,IAEzC,IAAK,cACD,OAAO72I,KAAKi6B,MAAa,MAAPooC,GAAgBw0E,EACtC,QACI,MAAM,IAAIr6H,MAAM,gBAAkBsS,IAMlD,SAASw0H,KACL,OAAKjqJ,KAAK2kI,UAIN3kI,KAAKy9I,cACQ,MAAbz9I,KAAK09I,MACJ19I,KAAKkuI,QAAU,GAAM,OACK,QAA3B5D,GAAMtqI,KAAKkuI,QAAU,IANd3/B,IAUf,SAAS27C,GAAOliJ,GACZ,OAAO,WACH,OAAOhI,KAAKgqJ,GAAGhiJ,IAIvB,IAAImiJ,GAAiBD,GAAO,MACxBE,GAAYF,GAAO,KACnBG,GAAYH,GAAO,KACnBI,GAAUJ,GAAO,KACjBK,GAASL,GAAO,KAChBM,GAAUN,GAAO,KACjBO,GAAWP,GAAO,KAClBQ,GAAaR,GAAO,KACpBS,GAAUT,GAAO,KAErB,SAASxuF,KACL,OAAOshF,GAAeh9I,MAG1B,SAAS4qJ,GAAMn1H,GAEX,OADAA,EAAQg0G,GAAeh0G,GAChBz1B,KAAK2kI,UAAY3kI,KAAKy1B,EAAQ,OAAS84E,IAGlD,SAASs8C,GAAWvmJ,GAChB,OAAO,WACH,OAAOtE,KAAK2kI,UAAY3kI,KAAK29I,MAAMr5I,GAAQiqG,KAInD,IAAIivC,GAAeqN,GAAW,gBAC1BhxC,GAAUgxC,GAAW,WACrBhqI,GAAUgqI,GAAW,WACrB9rI,GAAQ8rI,GAAW,SACnB7hF,GAAO6hF,GAAW,QAClBzqJ,GAASyqJ,GAAW,UACpB1N,GAAQ0N,GAAW,SAEvB,SAASvN,KACL,OAAOjT,GAASrqI,KAAKgpE,OAAS,GAGlC,IAAI9kC,GAAQv9B,KAAKu9B,MACb4mH,GAAa,CACTlpJ,GAAI,GACJD,EAAG,GACHE,EAAG,GACHE,EAAG,GACHE,EAAG,GACH8E,EAAG,KACH5E,EAAG,IAIX,SAAS4oJ,GAAkBt7I,EAAQ9L,EAAQC,EAAeE,EAAUy/H,GAChE,OAAOA,EAAO/hI,aAAamC,GAAU,IAAKC,EAAe6L,EAAQ3L,GAGrE,SAASknJ,GAAeC,EAAgBrnJ,EAAeknJ,EAAYvnB,GAC/D,IAAI2Z,EAAWF,GAAeiO,GAAgB7hC,MAC1CvP,EAAU31E,GAAMg5G,EAAS8M,GAAG,MAC5BnpI,EAAUqjB,GAAMg5G,EAAS8M,GAAG,MAC5BjrI,EAAQmlB,GAAMg5G,EAAS8M,GAAG,MAC1BhhF,EAAO9kC,GAAMg5G,EAAS8M,GAAG,MACzB5pJ,EAAS8jC,GAAMg5G,EAAS8M,GAAG,MAC3B1M,EAAQp5G,GAAMg5G,EAAS8M,GAAG,MAC1B7M,EAAQj5G,GAAMg5G,EAAS8M,GAAG,MAC1BlpI,EACK+4F,GAAWixC,EAAWlpJ,IAAM,CAAC,IAAKi4G,IAClCA,EAAUixC,EAAWnpJ,GAAK,CAAC,KAAMk4G,IACjCh5F,GAAW,GAAK,CAAC,MACjBA,EAAUiqI,EAAWjpJ,GAAK,CAAC,KAAMgf,IACjC9B,GAAS,GAAK,CAAC,MACfA,EAAQ+rI,EAAW/oJ,GAAK,CAAC,KAAMgd,IAC/BiqD,GAAQ,GAAK,CAAC,MACdA,EAAO8hF,EAAW7oJ,GAAK,CAAC,KAAM+mE,GAgBvC,OAdoB,MAAhB8hF,EAAW/jJ,IACX+Z,EACIA,GACCw8H,GAAS,GAAK,CAAC,MACfA,EAAQwN,EAAW/jJ,GAAK,CAAC,KAAMu2I,IAExCx8H,EAAIA,GACC1gB,GAAU,GAAK,CAAC,MAChBA,EAAS0qJ,EAAW3oJ,GAAK,CAAC,KAAM/B,IAChC+8I,GAAS,GAAK,CAAC,MAAS,CAAC,KAAMA,GAEpCr8H,EAAE,GAAKld,EACPkd,EAAE,IAAMmqI,EAAiB,EACzBnqI,EAAE,GAAKyiH,EACAwnB,GAAkB79I,MAAM,KAAM4T,GAIzC,SAASoqI,GAA2BC,GAChC,YAAyB7nI,IAArB6nI,EACOjnH,GAEqB,oBAArBinH,IACPjnH,GAAQinH,GACD,GAMf,SAASC,GAA4BC,EAAW3zD,GAC5C,YAA8Bp0E,IAA1BwnI,GAAWO,UAGD/nI,IAAVo0E,EACOozD,GAAWO,IAEtBP,GAAWO,GAAa3zD,EACN,MAAd2zD,IACAP,GAAWlpJ,GAAK81F,EAAQ,IAErB,IAGX,SAAS2rD,GAASiI,EAAeC,GAC7B,IAAKvrJ,KAAK2kI,UACN,OAAO3kI,KAAKkoI,aAAal2C,cAG7B,IAEIuxC,EACApgI,EAHAqoJ,GAAa,EACbtqI,EAAK4pI,GAyBT,MArB6B,kBAAlBQ,IACPC,EAAgBD,EAChBA,GAAgB,GAES,mBAAlBA,IACPE,EAAaF,GAEY,kBAAlBC,IACPrqI,EAAK9Y,OAAOw6F,OAAO,GAAIkoD,GAAYS,GACZ,MAAnBA,EAAc5pJ,GAAiC,MAApB4pJ,EAAc3pJ,KACzCsf,EAAGtf,GAAK2pJ,EAAc5pJ,EAAI,IAIlC4hI,EAASvjI,KAAKkoI,aACd/kI,EAAS6nJ,GAAehrJ,MAAOwrJ,EAAYtqI,EAAIqiH,GAE3CioB,IACAroJ,EAASogI,EAAO4F,YAAYnpI,KAAMmD,IAG/BogI,EAAO/6G,WAAWrlB,GAG7B,IAAIsoJ,GAAQ9kJ,KAAKyiH,IAEjB,SAASse,GAAKxrH,GACV,OAAQA,EAAI,IAAMA,EAAI,KAAOA,EAGjC,SAASwvI,KAQL,IAAK1rJ,KAAK2kI,UACN,OAAO3kI,KAAKkoI,aAAal2C,cAG7B,IAGInxE,EACA9B,EACAo+H,EACAx7I,EAEAgqJ,EACAC,EACAC,EACAC,EAXAjyC,EAAU4xC,GAAMzrJ,KAAKy9I,eAAiB,IACtCz0E,EAAOyiF,GAAMzrJ,KAAK09I,OAClBt9I,EAASqrJ,GAAMzrJ,KAAKkuI,SAKpB7iF,EAAQrrD,KAAKoqJ,YAMjB,OAAK/+F,GAOLxqC,EAAUwpH,GAASxwB,EAAU,IAC7B96F,EAAQsrH,GAASxpH,EAAU,IAC3Bg5F,GAAW,GACXh5F,GAAW,GAGXs8H,EAAQ9S,GAASjqI,EAAS,IAC1BA,GAAU,GAGVuB,EAAIk4G,EAAUA,EAAQkyC,QAAQ,GAAG7jJ,QAAQ,SAAU,IAAM,GAEzDyjJ,EAAYtgG,EAAQ,EAAI,IAAM,GAC9BugG,EAASlkB,GAAK1nI,KAAKkuI,WAAaxG,GAAKr8E,GAAS,IAAM,GACpDwgG,EAAWnkB,GAAK1nI,KAAK09I,SAAWhW,GAAKr8E,GAAS,IAAM,GACpDygG,EAAUpkB,GAAK1nI,KAAKy9I,iBAAmB/V,GAAKr8E,GAAS,IAAM,GAGvDsgG,EACA,KACCxO,EAAQyO,EAASzO,EAAQ,IAAM,KAC/B/8I,EAASwrJ,EAASxrJ,EAAS,IAAM,KACjC4oE,EAAO6iF,EAAW7iF,EAAO,IAAM,KAC/BjqD,GAAS8B,GAAWg5F,EAAU,IAAM,KACpC96F,EAAQ+sI,EAAU/sI,EAAQ,IAAM,KAChC8B,EAAUirI,EAAUjrI,EAAU,IAAM,KACpCg5F,EAAUiyC,EAAUnqJ,EAAI,IAAM,KA9BxB,MAkCf,IAAIqqJ,GAAU/O,GAAS50I,UAwGvB,OAtGA2jJ,GAAQrnB,QAAUmY,GAClBkP,GAAQ5iC,IAAMA,GACd4iC,GAAQ5+I,IAAMq8I,GACduC,GAAQ1M,SAAWoK,GACnBsC,GAAQhC,GAAKA,GACbgC,GAAQ7B,eAAiBA,GACzB6B,GAAQ5B,UAAYA,GACpB4B,GAAQ3B,UAAYA,GACpB2B,GAAQ1B,QAAUA,GAClB0B,GAAQzB,OAASA,GACjByB,GAAQxB,QAAUA,GAClBwB,GAAQvB,SAAWA,GACnBuB,GAAQtB,WAAaA,GACrBsB,GAAQrB,QAAUA,GAClBqB,GAAQt+C,QAAUu8C,GAClB+B,GAAQpO,QAAUgM,GAClBoC,GAAQlmJ,MAAQ41D,GAChBswF,GAAQrmJ,IAAMilJ,GACdoB,GAAQxO,aAAeA,GACvBwO,GAAQnyC,QAAUA,GAClBmyC,GAAQnrI,QAAUA,GAClBmrI,GAAQjtI,MAAQA,GAChBitI,GAAQhjF,KAAOA,GACfgjF,GAAQ1O,MAAQA,GAChB0O,GAAQ5rJ,OAASA,GACjB4rJ,GAAQ7O,MAAQA,GAChB6O,GAAQ3I,SAAWA,GACnB2I,GAAQnJ,YAAc6I,GACtBM,GAAQ1jJ,SAAWojJ,GACnBM,GAAQxjG,OAASkjG,GACjBM,GAAQzoB,OAASA,GACjByoB,GAAQ9jB,WAAaA,GAErB8jB,GAAQC,YAAc5lB,EAClB,sFACAqlB,IAEJM,GAAQvkJ,KAAOA,GAIfsgI,EAAe,IAAK,EAAG,EAAG,QAC1BA,EAAe,IAAK,EAAG,EAAG,WAI1BmE,GAAc,IAAKL,IACnBK,GAAc,IAAKF,IACnBY,GAAc,KAAK,SAAU/nI,EAAO+tE,EAAOqzD,GACvCA,EAAOlB,GAAK,IAAIrtH,KAAyB,IAApBsoB,WAAWn7B,OAEpC+nI,GAAc,KAAK,SAAU/nI,EAAO+tE,EAAOqzD,GACvCA,EAAOlB,GAAK,IAAIrtH,KAAK4yH,GAAMzlI;;AAK/B+F,EAAM4c,QAAU,SAEhBw7G,EAAgB2X,IAEhB/vI,EAAMkX,GAAK45E,GACX9wF,EAAMhE,IAAMA,GACZgE,EAAMqoB,IAAMA,GACZroB,EAAMvF,IAAMA,GACZuF,EAAM84H,IAAMJ,EACZ14H,EAAMw5I,KAAOqD,GACb78I,EAAMxK,OAAS2oJ,GACfn+I,EAAMw4H,OAASA,EACfx4H,EAAM24H,OAASyS,GACfprI,EAAMi2I,QAAUzb,EAChBx6H,EAAMsyI,SAAWF,GACjBpyI,EAAMu7H,SAAWA,EACjBv7H,EAAMrK,SAAW0oJ,GACjBr+I,EAAM+8I,UAAYD,GAClB98I,EAAMs9H,WAAa+N,GACnBrrI,EAAMizI,WAAaA,GACnBjzI,EAAMtK,YAAc0oJ,GACpBp+I,EAAMnK,YAAc0oJ,GACpBv+I,EAAMzK,aAAeA,GACrByK,EAAMurI,aAAeA,GACrBvrI,EAAMyqI,QAAUgB,GAChBzrI,EAAMpK,cAAgB0oJ,GACtBt+I,EAAM6+H,eAAiBA,GACvB7+H,EAAMshJ,qBAAuBhB,GAC7BtgJ,EAAMuhJ,sBAAwBf,GAC9BxgJ,EAAMi3I,eAAiBN,GACvB32I,EAAMvC,UAAYqzF,GAGlB9wF,EAAMwhJ,UAAY,CACdC,eAAgB,mBAChBC,uBAAwB,sBACxBC,kBAAmB,0BACnBpf,KAAM,aACNqf,KAAM,QACNC,aAAc,WACdC,QAAS,eACTlf,KAAM,aACNN,MAAO,WAGJtiI,O,8CC5iLX,EAAQ,S,qBCAR,EAAQ,S,sBCAN,SAAU9K,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;IAAI0sJ,EAAK1sJ,EAAOE,aAAa,KAAM,CAC/BC,OAAQ,0EAA0EC,MAC9E,KAEJC,YACI,4DAA4DD,MAAM,KACtEE,SAAU,uCAAuCF,MAAM,KACvDG,cAAe,uBAAuBH,MAAM,KAC5CI,YAAa,gBAAgBJ,MAAM,KACnCK,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,iBACJC,IAAK,uBACLC,KAAM,6BACNgE,EAAG,WACHC,GAAI,aACJC,IAAK,mBACLC,KAAM,yBAEVlE,SAAU,CACNC,QAAS,cACTC,QAAS,aACTC,SAAU,iBACVC,QAAS,eACTC,SAAU,+BACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,UACRC,KAAM,UACNC,EAAG,aACHC,GAAI,WACJC,EAAG,MACHC,GAAI,UACJC,EAAG,MACHC,GAAI,SAAU2B,GACV,OAAe,IAAXA,EACO,SAEJA,EAAS,SAEpB1B,EAAG,MACHC,GAAI,SAAUyB,GACV,OAAe,IAAXA,EACO,SAEJA,EAAS,SAEpBxB,EAAG,OACHC,GAAI,SAAUuB,GACV,OAAe,IAAXA,EACO,UAEJA,EAAS,WAEpBtB,EAAG,MACHC,GAAI,SAAUqB,GACV,OAAe,IAAXA,EACO,SACAA,EAAS,KAAO,GAAgB,KAAXA,EACrBA,EAAS,OAEbA,EAAS,UAGxBf,cACI,gEACJwC,KAAM,SAAUP,GACZ,MAAO,8BAA8BwF,KAAKxF,IAE9C9B,SAAU,SAAUD,EAAME,EAAQC,GAC9B,OAAIH,EAAO,EACA,aACAA,EAAO,GACP,QACAA,EAAO,GACPG,EAAU,SAAW,eACrBH,EAAO,GACPG,EAAU,QAAU,eAEpB,UAKnB,OAAO0pJ,M,oBCtGX,YACa,SAAUpnJ,GACnB,aAEA,IAAIzF,EAASiG,QAAQC,KAAKC,MAAMC,QAAQ,yBAEpC0b,EAAO,aAEPgrI,EAAU,SAAU74D,EAAI84D,GAC1B,OAAO,WAEL,IADA,IAAIhgJ,EAAO,GACFmV,EAAK,EAAGA,EAAK7Y,UAAUC,OAAQ4Y,IACtCnV,EAAKmV,GAAM7Y,UAAU6Y,GAEvB,OAAO+xE,EAAG84D,EAAG3/I,MAAM,KAAML,MAGzBiE,EAAW,SAAUpL,GACvB,OAAO,WACL,OAAOA,IAGPu6B,EAAW,SAAU/jB,GACvB,OAAOA,GAET,SAAS2F,EAAMC,GAEb,IADA,IAAIC,EAAc,GACTC,EAAK,EAAGA,EAAK7Y,UAAUC,OAAQ4Y,IACtCD,EAAYC,EAAK,GAAK7Y,UAAU6Y,GAElC,OAAO,WAEL,IADA,IAAIC,EAAW,GACND,EAAK,EAAGA,EAAK7Y,UAAUC,OAAQ4Y,IACtCC,EAASD,GAAM7Y,UAAU6Y,GAE3B,IAAI7U,EAAM4U,EAAYG,OAAOD,GAC7B,OAAOH,EAAG5U,MAAM,KAAMC,IAG1B,IAAIgV,EAAM,SAAUC,GAClB,OAAO,WAEL,IADA,IAAIvV,EAAO,GACFmV,EAAK,EAAGA,EAAK7Y,UAAUC,OAAQ4Y,IACtCnV,EAAKmV,GAAM7Y,UAAU6Y,GAEvB,OAAQI,EAAElV,MAAM,KAAML,KAGtBigJ,EAAM,SAAU5pI,GAClB,OAAO,WACL,MAAM,IAAIC,MAAMD,KAGhBb,EAAQvR,GAAS,GACjBwR,EAASxR,GAAS,GAElByR,EAAO,WACT,OAAOC,GAELA,EAAO,WACT,IAAIC,EAAK,SAAUta,GACjB,OAAOA,EAAEua,UAEPna,EAAO,SAAUoa,GACnB,OAAOA,KAELha,EAAK,SAAUlF,GACjB,OAAOA,GAELmf,EAAK,CACPC,KAAM,SAAUpf,EAAG9B,GACjB,OAAO8B,KAETO,GAAIqe,EACJS,OAAQT,EACRK,OAAQJ,EACRS,MAAOpa,EACPqa,WAAYza,EACZ0a,SAAU,SAAUC,GAClB,MAAM,IAAIC,MAAMD,GAAO,oCAEzBE,UAAWtS,EAAS,MACpBuS,eAAgBvS,OAASwS,GACzBC,GAAI5a,EACJ6a,QAASjb,EACTN,IAAKsa,EACL1N,KAAM+M,EACN6B,KAAMlB,EACNmB,OAAQrB,EACRsB,OAAQrB,EACR1N,OAAQ2N,EACRqB,OAAQnB,EACRoB,QAASpB,EACTqB,QAAS,WACP,MAAO,IAETxb,SAAUwI,EAAS,WAKrB,OAHI1I,OAAO2b,QACT3b,OAAO2b,OAAOnB,GAETA,EA1CE,GA4CPoB,EAAO,SAAUlD,GACnB,IAAImD,EAAanT,EAASgQ,GACtBvZ,EAAO,WACT,OAAOqb,GAELa,EAAO,SAAUrB,GACnB,OAAOA,EAAEtB,IAEP8B,EAAK,CACPC,KAAM,SAAUpf,EAAG9B,GACjB,OAAOA,EAAEmf,IAEX9c,GAAI,SAAU6B,GACZ,OAAOib,IAAMjb,GAEfid,OAAQR,EACRI,OAAQL,EACRU,MAAOkB,EACPjB,WAAYiB,EACZhB,SAAUgB,EACVb,UAAWa,EACXZ,eAAgBY,EAChBV,GAAIhc,EACJic,QAASjc,EACTU,IAAK,SAAUma,GACb,OAAO4B,EAAK5B,EAAEtB,KAEhBjM,KAAM,SAAUuN,GACdA,EAAEtB,IAEJ2C,KAAMA,EACNC,OAAQD,EACRE,OAAQF,EACR7O,OAAQ,SAAUwN,GAChB,OAAOA,EAAEtB,GAAK8B,EAAKJ,GAErBsB,QAAS,WACP,MAAO,CAAChD,IAEVxY,SAAU,WACR,MAAO,QAAUwY,EAAI,KAEvB8C,OAAQ,SAAUzb,GAChB,OAAOA,EAAEnE,GAAG8c,IAEd+C,QAAS,SAAU1b,EAAG+b,GACpB,OAAO/b,EAAE0a,KAAKR,GAAO,SAAU7C,GAC7B,OAAO0E,EAAUpD,EAAGtB,QAI1B,OAAOoD,GAELrW,EAAO,SAAU7G,GACnB,OAAiB,OAAVA,QAA4B4d,IAAV5d,EAAsB8c,EAAOwB,EAAKte,IAEzDye,EAAS,CACXH,KAAMA,EACNzB,KAAMA,EACNhW,KAAMA,GAGJ6X,EAAS,SAAUlI,GACrB,GAAU,OAANA,EACF,MAAO,OAET,IAAI9K,SAAW8K,EACf,MAAU,WAAN9K,IAAmBpE,MAAM3E,UAAUgc,cAAcnI,IAAMA,EAAEoI,aAAsC,UAAvBpI,EAAEoI,YAAYhgB,MACjF,QAEC,WAAN8M,IAAmBmT,OAAOlc,UAAUgc,cAAcnI,IAAMA,EAAEoI,aAAsC,WAAvBpI,EAAEoI,YAAYhgB,MAClF,SAEF8M,GAELoT,EAAS,SAAU1c,GACrB,OAAO,SAAUpC,GACf,OAAO0e,EAAO1e,KAAWoC,IAGzBkoD,EAAWxrC,EAAO,UAClBmN,EAAUnN,EAAO,SACjByrC,EAAYzrC,EAAO,WACnBC,EAAaD,EAAO,YACpB0rC,EAAW1rC,EAAO,UAElBE,EAAc1X,MAAM3E,UAAUoE,MAC9BkY,EAAgB3X,MAAM3E,UAAU6F,QAChCiiD,EAAanjD,MAAM3E,UAAUyE,KAC7B8X,EAAa,SAAUC,EAAIzT,GAC7B,OAAOuT,EAAcpc,KAAKsc,EAAIzT,IAE5B4I,EAAW,SAAU8K,EAAI5I,GAC3B,OAAO0I,EAAWE,EAAI5I,IAAM,GAE1BwH,EAAS,SAAUoB,EAAIE,GACzB,IAAK,IAAItb,EAAI,EAAGgD,EAAMoY,EAAG1b,OAAQM,EAAIgD,EAAKhD,IAAK,CAC7C,IAAIwS,EAAI4I,EAAGpb,GACX,GAAIsb,EAAK9I,EAAGxS,GACV,OAAO,EAGX,OAAO,GAELzB,EAAM,SAAU6c,EAAI1C,GAGtB,IAFA,IAAI1V,EAAMoY,EAAG1b,OACT2b,EAAI,IAAI/X,MAAMN,GACThD,EAAI,EAAGA,EAAIgD,EAAKhD,IAAK,CAC5B,IAAIwS,EAAI4I,EAAGpb,GACXqb,EAAErb,GAAK0Y,EAAElG,EAAGxS,GAEd,OAAOqb,GAELlQ,EAAO,SAAUiQ,EAAI1C,GACvB,IAAK,IAAI1Y,EAAI,EAAGgD,EAAMoY,EAAG1b,OAAQM,EAAIgD,EAAKhD,IAAK,CAC7C,IAAIwS,EAAI4I,EAAGpb,GACX0Y,EAAElG,EAAGxS,KAGLqjJ,EAAQ,SAAUjoI,EAAI1C,GACxB,IAAK,IAAI1Y,EAAIob,EAAG1b,OAAS,EAAGM,GAAK,EAAGA,IAAK,CACvC,IAAIwS,EAAI4I,EAAGpb,GACX0Y,EAAElG,EAAGxS,KAGLkL,EAAS,SAAUkQ,EAAIE,GAEzB,IADA,IAAID,EAAI,GACCrb,EAAI,EAAGgD,EAAMoY,EAAG1b,OAAQM,EAAIgD,EAAKhD,IAAK,CAC7C,IAAIwS,EAAI4I,EAAGpb,GACPsb,EAAK9I,EAAGxS,IACVqb,EAAEjY,KAAKoP,GAGX,OAAO6I,GAELioI,EAAQ,SAAUloI,EAAI1C,EAAGouC,GAI3B,OAHAu8F,EAAMjoI,GAAI,SAAU5I,GAClBs0C,EAAMpuC,EAAEouC,EAAKt0C,MAERs0C,GAELD,EAAQ,SAAUzrC,EAAI1C,EAAGouC,GAI3B,OAHA37C,EAAKiQ,GAAI,SAAU5I,GACjBs0C,EAAMpuC,EAAEouC,EAAKt0C,MAERs0C,GAELl7C,EAAO,SAAUwP,EAAIE,GACvB,IAAK,IAAItb,EAAI,EAAGgD,EAAMoY,EAAG1b,OAAQM,EAAIgD,EAAKhD,IAAK,CAC7C,IAAIwS,EAAI4I,EAAGpb,GACX,GAAIsb,EAAK9I,EAAGxS,GACV,OAAOya,EAAOH,KAAK9H,GAGvB,OAAOiI,EAAO5B,QAEZ8kD,EAAY,SAAUviD,EAAIE,GAC5B,IAAK,IAAItb,EAAI,EAAGgD,EAAMoY,EAAG1b,OAAQM,EAAIgD,EAAKhD,IAAK,CAC7C,IAAIwS,EAAI4I,EAAGpb,GACX,GAAIsb,EAAK9I,EAAGxS,GACV,OAAOya,EAAOH,KAAKta,GAGvB,OAAOya,EAAO5B,QAEZkuC,EAAU,SAAU3rC,GAEtB,IADA,IAAIC,EAAI,GACCrb,EAAI,EAAGgD,EAAMoY,EAAG1b,OAAQM,EAAIgD,IAAOhD,EAAG,CAC7C,IAAKioB,EAAQ7M,EAAGpb,IACd,MAAM,IAAIyZ,MAAM,oBAAsBzZ,EAAI,6BAA+Bob,GAE3EqrC,EAAWjjD,MAAM6X,EAAGD,EAAGpb,IAEzB,OAAOqb,GAELtB,EAAO,SAAUqB,EAAI1C,GACvB,IAAIjf,EAAS8E,EAAI6c,EAAI1C,GACrB,OAAOquC,EAAQttD,IAEbwgB,EAAS,SAAUmB,EAAIE,GACzB,IAAK,IAAItb,EAAI,EAAGgD,EAAMoY,EAAG1b,OAAQM,EAAIgD,IAAOhD,EAAG,CAC7C,IAAIwS,EAAI4I,EAAGpb,GACX,IAAmB,IAAfsb,EAAK9I,EAAGxS,GACV,OAAO,EAGX,OAAO,GAELyoC,EAAU,SAAUrtB,GACtB,IAAIC,EAAIL,EAAYnc,KAAKuc,EAAI,GAE7B,OADAC,EAAEotB,UACKptB,GAEL9I,EAAO,SAAU6I,GACnB,OAAqB,IAAdA,EAAG1b,OAAe+a,EAAO5B,OAAS4B,EAAOH,KAAKc,EAAGA,EAAG1b,OAAS,KAMlEyc,GAJSpB,EAAWzX,MAAMT,OAAQS,MAAMT,KAIjCnE,OAAOyd,MACd+tC,EAAS,SAAU7tC,EAAK3D,GAE1B,IADA,IAAIyxC,EAAQhuC,EAAKE,GACR8H,EAAI,EAAGnhB,EAAMmnD,EAAMzqD,OAAQykB,EAAInhB,EAAKmhB,IAAK,CAChD,IAAInkB,EAAImqD,EAAMhmC,GACV3R,EAAI6J,EAAIrc,GACZ0Y,EAAElG,EAAGxS,KAGLujJ,EAAQ,SAAUlnI,EAAK3D,GACzB,OAAO8qI,EAASnnI,GAAK,SAAU7J,EAAGxS,GAChC,MAAO,CACLmkB,EAAGnkB,EACH7D,EAAGuc,EAAElG,EAAGxS,QAIVwjJ,EAAW,SAAUnnI,EAAK3D,GAC5B,IAAI2C,EAAI,GAKR,OAJA6uC,EAAO7tC,GAAK,SAAU7J,EAAGxS,GACvB,IAAIyjJ,EAAQ/qI,EAAElG,EAAGxS,GACjBqb,EAAEooI,EAAMt/H,GAAKs/H,EAAMtnJ,KAEdkf,GAGL0uC,EAAY,WAEd,IADA,IAAIC,EAAS,GACJ1xC,EAAK,EAAGA,EAAK7Y,UAAUC,OAAQ4Y,IACtC0xC,EAAO1xC,GAAM7Y,UAAU6Y,GAEzB,OAAO,WAEL,IADA,IAAInO,EAAS,GACJmO,EAAK,EAAGA,EAAK7Y,UAAUC,OAAQ4Y,IACtCnO,EAAOmO,GAAM7Y,UAAU6Y,GAEzB,GAAI0xC,EAAOtqD,SAAWyK,EAAOzK,OAC3B,MAAM,IAAI+Z,MAAM,mDAAqDuwC,EAAOtqD,OAAS,WAAayK,EAAOzK,OAAS,cAEpH,IAAIuqD,EAAS,GAIb,OAHA9+C,EAAK6+C,GAAQ,SAAUpvD,EAAMoF,GAC3BiqD,EAAOrvD,GAAQwM,EAAS+C,EAAOnK,OAE1BiqD,IAIP5lC,EAAO,SAAUkmD,GACnB,OAAOA,EAAIxnE,MAAM,GAAGshB,QAElBq/H,EAAa,SAAUC,EAAUxnI,GACnC,MAAM,IAAI1C,MAAM,sBAAwB4K,EAAKs/H,GAAU//I,KAAK,MAAQ,8CAAgDygB,EAAKlI,GAAMvY,KAAK,MAAQ,MAE1IggJ,EAAgB,SAAUC,GAC5B,MAAM,IAAIpqI,MAAM,gCAAkC4K,EAAKw/H,GAAajgJ,KAAK,QAEvEkgJ,EAAiB,SAAU75I,EAAOi/D,GACpC,IAAKjhD,EAAQihD,GACX,MAAM,IAAIzvD,MAAM,OAASxP,EAAQ,kCAAoCi/D,EAAQ,KAE/E/9D,EAAK+9D,GAAO,SAAU9xD,GACpB,IAAKkvC,EAASlvC,GACZ,MAAM,IAAIqC,MAAM,aAAerC,EAAI,WAAanN,EAAQ,iCAI1D85I,EAAqB,SAAUC,EAAW5lJ,GAC5C,MAAM,IAAIqb,MAAM,kCAAoCrb,EAAO,WAAaimB,EAAK2/H,GAAWpgJ,KAAK,MAAQ,gBAEnGqgJ,EAAa,SAAUC,GACzB,IAAIC,EAAS9/H,EAAK6/H,GACdE,EAAOx4I,EAAKu4I,GAAQ,SAAUlsJ,EAAG+H,GACnC,OAAOA,EAAImkJ,EAAOzkJ,OAAS,GAAKzH,IAAMksJ,EAAOnkJ,EAAI,MAEnDokJ,EAAKj5I,MAAK,SAAU5S,GAClB,MAAM,IAAIkhB,MAAM,cAAgBlhB,EAAI,mDAAqD4rJ,EAAOvgJ,KAAK,MAAQ,UAI7GygJ,EAAW,SAAUV,EAAUW,GACjC,IAAIJ,EAAaP,EAASnrI,OAAO8rI,GACjC,GAA0B,IAAtBJ,EAAWxkJ,OACb,MAAM,IAAI+Z,MAAM,6DAKlB,OAHAqqI,EAAe,WAAYH,GAC3BG,EAAe,WAAYQ,GAC3BL,EAAWC,GACJ,SAAU7nI,GACf,IAAIS,EAASX,EAAKE,GACdkoI,EAAUtqI,EAAO0pI,GAAU,SAAUxlF,GACvC,OAAO7tD,EAASwM,EAAQqhD,MAErBomF,GACHb,EAAWC,EAAU7mI,GAEvB,IAAI+mI,EAAc34I,EAAO4R,GAAQ,SAAU3iB,GACzC,OAAQmW,EAAS4zI,EAAY/pJ,MAE3B0pJ,EAAYnkJ,OAAS,GACvBkkJ,EAAcC,GAEhB,IAAIxoI,EAAI,GAOR,OANAlQ,EAAKw4I,GAAU,SAAUxlF,GACvB9iD,EAAE8iD,GAAO/2D,EAASiV,EAAI8hD,OAExBhzD,EAAKm5I,GAAU,SAAUE,GACvBnpI,EAAEmpI,GAAOp9I,EAAS1I,OAAOC,UAAUG,eAAeD,KAAKwd,EAAKmoI,GAAO/pI,EAAOH,KAAK+B,EAAImoI,IAAQ/pI,EAAO5B,WAE7FwC,IAMPopI,IAFY5oJ,EAAW4uD,KAAKiF,eACZ7zD,EAAW4uD,KAAKkF,mBACtB9zD,EAAW4uD,KAAKmF,cAC1B80F,GAAW7oJ,EAAW4uD,KAAKoF,cAG3BJ,IAFgB5zD,EAAW4uD,KAAKqF,mBACZj0D,EAAW4uD,KAAKsF,uBAC1Bl0D,EAAW4uD,KAAKuF,cAC1B20F,GAAO9oJ,EAAW4uD,KAAKyF,UAMvB9wB,IALyBvjC,EAAW4uD,KAAK0F,4BACtBt0D,EAAW4uD,KAAK2F,sBAC1Bv0D,EAAW4uD,KAAK4F,YACdx0D,EAAW4uD,KAAK6F,cAEW,qBAAtBz0D,EAAW4B,OAAyB5B,EAAW4B,OAAS4hC,SAAS,eAATA,IAExEC,GAAO,SAAUC,EAAOC,GAE1B,IADA,IAAI/gC,OAAcmb,IAAV4lB,GAAiC,OAAVA,EAAiBA,EAAQJ,GAC/Cp/B,EAAI,EAAGA,EAAIu/B,EAAM7/B,aAAgBka,IAANnb,GAAyB,OAANA,IAAcuB,EACnEvB,EAAIA,EAAE8gC,EAAMv/B,IAEd,OAAOvB,GAELjC,GAAU,SAAUijC,EAAGD,GACzB,IAAID,EAAQE,EAAE9oC,MAAM,KACpB,OAAO2oC,GAAKC,EAAOC,IAGjBE,GAAS,SAAU9kC,EAAM4kC,GAC3B,OAAOhjC,GAAQ5B,EAAM4kC,IAEnBjmB,GAAW,SAAU3e,EAAM4kC,GAC7B,IAAIG,EAASD,GAAO9kC,EAAM4kC,GAC1B,QAAe5lB,IAAX+lB,GAAmC,OAAXA,EAC1B,MAAM,IAAIlmB,MAAM7e,EAAO,kCAEzB,OAAO+kC,GAELC,GAAW,CAAErmB,SAAUA,IAEvB3e,GAAO,SAAU2F,GACnB,IAAI8a,EAAI9a,EAAQgI,MAAMzH,SACtB,OAAOua,EAAEwF,eAEPziB,GAAO,SAAUmC,GACnB,OAAOA,EAAQgI,MAAMme,UAEnB8qC,GAAW,SAAU9pD,GACvB,OAAO,SAAUnH,GACf,OAAOnC,GAAKmC,KAAamH,IAGzBk9I,GAAY,SAAUrkJ,GACxB,OAAOnC,GAAKmC,KAAakkJ,IAA6B,aAAlB7pJ,GAAK2F,IAEvCkxD,GAAYD,GAAS/B,IACrBpoC,GAASmqC,GAASmzF,IAElBjzF,GAAS,SAAUnpD,EAAKpO,EAAK6B,GAC/B,KAAIsqD,EAAStqD,IAAUuqD,EAAUvqD,IAAUwqD,EAASxqD,IAIlD,MADAH,EAAWotD,QAAQt2B,MAAM,iCAAkCx4B,EAAK,YAAa6B,EAAO,cAAeuM,GAC7F,IAAIkR,MAAM,kCAHhBlR,EAAI0K,aAAa9Y,EAAK6B,EAAQ,KAM9BE,GAAM,SAAUqE,EAASpG,EAAK6B,GAChC01D,GAAOnxD,EAAQgI,MAAOpO,EAAK6B,IAEzB21D,GAAS,SAAUpxD,EAASosB,GAC9B,IAAIpkB,EAAMhI,EAAQgI,MAClB2hD,EAAOv9B,GAAO,SAAUxwB,EAAGgoB,GACzButC,GAAOnpD,EAAK4b,EAAGhoB,OAGfF,GAAM,SAAUsE,EAASpG,GAC3B,IAAIgC,EAAIoE,EAAQgI,MAAM4L,aAAaha,GACnC,OAAa,OAANgC,OAAayd,EAAYzd,GAE9BqoB,GAAM,SAAUjkB,EAASpG,GAC3B,IAAIoO,EAAMhI,EAAQgI,MAClB,SAAOA,IAAOA,EAAIozC,eAAepzC,EAAIozC,aAAaxhD,IAEhDmX,GAAS,SAAU/Q,EAASpG,GAC9BoG,EAAQgI,MAAMqjC,gBAAgBzxC,IAE5BiC,GAAQ,SAAUmE,GACpB,OAAOsmD,EAAMtmD,EAAQgI,MAAMxE,YAAY,SAAU+iD,EAAKx7C,GAEpD,OADAw7C,EAAIx7C,EAAK1Q,MAAQ0Q,EAAKtP,MACf8qD,IACN,KAGD+9F,GAAa,SAAUliJ,EAAKsjB,EAAQpB,GACtC,GAAe,KAAXoB,EACF,OAAO,EAET,GAAItjB,EAAIjD,OAASumB,EAAOvmB,OACtB,OAAO,EAET,IAAI8S,EAAI7P,EAAIsjB,OAAOpB,EAAOA,EAAQoB,EAAOvmB,QACzC,OAAO8S,IAAMyT,GAEXgrC,GAAa,SAAUtuD,EAAKsjB,GAC9B,OAAgC,IAAzBtjB,EAAI6B,QAAQyhB,IAEjB6+H,GAAW,SAAUniJ,EAAK42I,GAC5B,OAAOsL,GAAWliJ,EAAK42I,EAAQ52I,EAAIjD,OAAS65I,EAAO75I,SAEjD6L,GAAO,SAAU5I,GACnB,OAAOA,EAAInE,QAAQ,aAAc,KAG/BozD,GAAc,SAAUrpD,GAC1B,YAAqBqR,IAAdrR,EAAIpC,OAAuB4U,EAAWxS,EAAIpC,MAAM0rD,mBAGrDnH,GAAS,SAAUhyC,GACrB,IACI2C,EADAsvC,GAAS,EAEb,OAAO,WAEL,IADA,IAAIxnD,EAAO,GACFmV,EAAK,EAAGA,EAAK7Y,UAAUC,OAAQ4Y,IACtCnV,EAAKmV,GAAM7Y,UAAU6Y,GAMvB,OAJKqyC,IACHA,GAAS,EACTtvC,EAAI3C,EAAElV,MAAM,KAAML,IAEbkY,IAIP2tC,GAAW,SAAUzjD,EAAMi6B,GAC7B,IAAIzW,EAAMyW,GAAS3jC,EAAWwE,SAC1B0S,EAAMgW,EAAIoG,cAAc,OAE5B,GADApc,EAAIpR,UAAY4D,GACXwN,EAAIkzC,iBAAmBlzC,EAAIkB,WAAWvU,OAAS,EAElD,MADA7D,EAAWotD,QAAQt2B,MAAM,wCAAyCptB,GAC5D,IAAIkU,MAAM,qCAElB,OAAOyvC,GAAQn2C,EAAIkB,WAAW,KAE5Bk1C,GAAU,SAAUtlD,EAAK27B,GAC3B,IAAIzW,EAAMyW,GAAS3jC,EAAWwE,SAC1B4H,EAAO8gB,EAAIoG,cAActrB,GAC7B,OAAOqlD,GAAQjhD,IAEbmhD,GAAW,SAAUnnD,EAAMu9B,GAC7B,IAAIzW,EAAMyW,GAAS3jC,EAAWwE,SAC1B4H,EAAO8gB,EAAIhd,eAAe9J,GAC9B,OAAOinD,GAAQjhD,IAEbihD,GAAU,SAAUjhD,GACtB,GAAa,OAATA,QAA0B2R,IAAT3R,EACnB,MAAM,IAAIwR,MAAM,oCAElB,MAAO,CAAElR,IAAKnB,EAASa,KAErBohD,GAAY,SAAUC,EAAQ92C,EAAG7Z,GACnC,IAAIowB,EAAMugC,EAAO/gD,MACjB,OAAOkS,EAAO5X,KAAKkmB,EAAIwgC,iBAAiB/2C,EAAG7Z,IAAI4F,IAAI2qD,KAEjDM,GAAU,CACZR,SAAUA,GACVG,QAASA,GACTC,SAAUA,GACVF,QAASA,GACTG,UAAWA,IAGT07F,GAAS,SAAUxkJ,GACrB,IAAIgI,EAAM8e,GAAO9mB,GAAWA,EAAQgI,MAAM1H,WAAaN,EAAQgI,MAC/D,YAAeqR,IAARrR,GAA6B,OAARA,GAAgBA,EAAIs6B,cAAc74B,KAAKsG,SAAS/H,IAE1EyB,GAAO0gD,IAAO,WAChB,OAAOr6C,GAAQm5C,GAAQN,QAAQrtD,EAAWwE,cAExCgQ,GAAU,SAAU0Y,GACtB,IAAIjT,EAAIiT,EAAIxgB,MAAMyB,KAClB,GAAU,OAAN8L,QAAoB8D,IAAN9D,EAChB,MAAM,IAAI2D,MAAM,6BAElB,OAAO+vC,GAAQN,QAAQpzC,IAGrBg8C,GAAc,SAAUvpD,EAAKvC,EAAUhK,GACzC,IAAKsqD,EAAStqD,GAEZ,MADAH,EAAWotD,QAAQt2B,MAAM,qCAAsC3sB,EAAU,YAAahK,EAAO,cAAeuM,GACtG,IAAIkR,MAAM,+BAAiCzd,GAE/C41D,GAAYrpD,IACdA,EAAIpC,MAAM4rD,YAAY/rD,EAAUhK,IAGhCgpJ,GAAiB,SAAUz8I,EAAKvC,GAC9B4rD,GAAYrpD,IACdA,EAAIpC,MAAM8+I,eAAej/I,IAGzBi7H,GAAQ,SAAU1gI,EAASyF,EAAUhK,GACvC,IAAIuM,EAAMhI,EAAQgI,MAClBupD,GAAYvpD,EAAKvC,EAAUhK,IAEzBkpJ,GAAW,SAAU3kJ,EAASmF,GAChC,IAAI6C,EAAMhI,EAAQgI,MAClB2hD,EAAOxkD,GAAK,SAAUvJ,EAAGgoB,GACvB2tC,GAAYvpD,EAAK4b,EAAGhoB,OAGpB+oB,GAAQ,SAAU3kB,EAASyF,GAC7B,IAAIuC,EAAMhI,EAAQgI,MACd+a,EAASznB,EAAW4B,OAAO0nJ,iBAAiB58I,GAC5C8S,EAAIiI,EAAOuuC,iBAAiB7rD,GAC5B7J,EAAU,KAANkf,GAAa0pI,GAAOxkJ,GAA8C8a,EAAnC+pI,GAAkB78I,EAAKvC,GAC9D,OAAa,OAAN7J,OAAayd,EAAYzd,GAE9BipJ,GAAoB,SAAU78I,EAAKvC,GACrC,OAAO4rD,GAAYrpD,GAAOA,EAAIpC,MAAM0rD,iBAAiB7rD,GAAY,IAE/Dq/I,GAAS,SAAU9kJ,EAASyF,GAC9B,IAAIuC,EAAMhI,EAAQgI,MACd22D,EAAMkmF,GAAkB78I,EAAKvC,GACjC,OAAOyU,EAAO5X,KAAKq8D,GAAKh0D,QAAO,SAAUmQ,GACvC,OAAOA,EAAE3b,OAAS,MAGlB4lJ,GAAW,SAAU/kJ,EAASyF,GAChC,IAAIuC,EAAMhI,EAAQgI,MAClBy8I,GAAez8I,EAAKvC,GAChBwe,GAAIjkB,EAAS,UAA4C,KAAhCgL,GAAKtP,GAAIsE,EAAS,WAC7C+Q,GAAO/Q,EAAS,UAGhBgkB,GAAO,SAAUkwC,EAAQnnD,GAC3B,IAAIi4I,EAAY9wF,EAAOlsD,MACnBi9I,EAAYl4I,EAAO/E,MACnBqpD,GAAY2zF,IAAc3zF,GAAY4zF,KACxCA,EAAUr/I,MAAMwd,QAAU4hI,EAAUp/I,MAAMwd,UAI1C1b,GAAO,WACT,IAAIyQ,EAAIknB,GAASrmB,SAAS,QAC1B,OAAOb,GAEL0xC,GAA0B,SAAUhzC,EAAGtB,EAAG1a,GAC5C,OAAkD,KAA1Cgc,EAAEgzC,wBAAwBt0C,GAAK1a,IAErCivD,GAA4B,SAAUjzC,EAAGtB,GAC3C,OAAOs0C,GAAwBhzC,EAAGtB,EAAG7N,KAAOqiD,8BAE1CC,GAA8B,SAAUnzC,EAAGtB,GAC7C,OAAOs0C,GAAwBhzC,EAAGtB,EAAG7N,KAAOuiD,iCAE1CC,GAAO,CACTJ,0BAA2BA,GAC3BE,4BAA6BA,IAG3BK,GAAa,SAAUC,EAAS5yD,GAClC,IAAK,IAAI+H,EAAI,EAAGA,EAAI6qD,EAAQnrD,OAAQM,IAAK,CACvC,IAAIwS,EAAIq4C,EAAQ7qD,GAChB,GAAIwS,EAAE7R,KAAK1I,GACT,OAAOua,IAKTs4C,GAAS,SAAUD,EAASE,GAC9B,IAAI1vC,EAAIuvC,GAAWC,EAASE,GAC5B,IAAK1vC,EACH,MAAO,CACLsC,MAAO,EACPC,MAAO,GAGX,IAAIgpC,EAAQ,SAAU5mD,GACpB,OAAOgrD,OAAOD,EAAMvsD,QAAQ6c,EAAG,IAAMrb,KAEvC,OAAOk1C,GAAG0R,EAAM,GAAIA,EAAM,KAExBqE,GAAS,SAAUC,EAAgBH,GACrC,IAAII,EAAetwC,OAAOkwC,GAAOlqC,cACjC,OAA8B,IAA1BqqC,EAAexrD,OACV0rD,KAEFN,GAAOI,EAAgBC,IAE5BC,GAAU,WACZ,OAAOlW,GAAG,EAAG,IAEXA,GAAK,SAAUv3B,EAAOC,GACxB,MAAO,CACLD,MAAOA,EACPC,MAAOA,IAGPytC,GAAU,CACZnW,GAAIA,GACJ+V,OAAQA,GACRG,QAASA,IAGPE,GAAO,OACPC,GAAS,SACT58B,GAAK,KACL68B,GAAQ,QACRC,GAAU,UACVC,GAAS,SACTC,GAAY,SAAU/wD,EAAMgxD,GAC9B,OAAO,WACL,OAAOA,IAAYhxD,IAGnBixD,GAAY,WACd,OAAOC,GAAK,CACVF,aAAShyC,EACTkE,QAASutC,GAAQD,aAGjBU,GAAO,SAAUC,GACnB,IAAIH,EAAUG,EAAKH,QACf9tC,EAAUiuC,EAAKjuC,QACnB,MAAO,CACL8tC,QAASA,EACT9tC,QAASA,EACTkuC,OAAQL,GAAUL,GAAMM,GACxBK,SAAUN,GAAUJ,GAAQK,GAC5BM,KAAMP,GAAUh9B,GAAIi9B,GACpBO,QAASR,GAAUH,GAAOI,GAC1BQ,UAAWT,GAAUF,GAASG,GAC9BS,SAAUV,GAAUD,GAAQE,KAG5BU,GAAU,CACZlB,QAASS,GACT3W,GAAI4W,GACJR,KAAMlkD,EAASkkD,IACfC,OAAQnkD,EAASmkD,IACjB58B,GAAIvnB,EAASunB,IACb68B,MAAOpkD,EAASokD,IAChBC,QAASrkD,EAASqkD,IAClBC,OAAQtkD,EAASskD,KAGfa,GAAU,UACVC,GAAM,MACNC,GAAU,UACVC,GAAQ,QACRC,GAAM,MACNC,GAAU,UACVC,GAAU,UACVC,GAAO,SAAUlyD,EAAMgxD,GACzB,OAAO,WACL,OAAOA,IAAYhxD,IAGnBmyD,GAAY,WACd,OAAOC,GAAK,CACVpB,aAAShyC,EACTkE,QAASutC,GAAQD,aAGjB4B,GAAO,SAAUjB,GACnB,IAAIH,EAAUG,EAAKH,QACf9tC,EAAUiuC,EAAKjuC,QACnB,MAAO,CACL8tC,QAASA,EACT9tC,QAASA,EACTmvC,UAAWH,GAAKP,GAASX,GACzBsB,MAAOJ,GAAKN,GAAKZ,GACjBuB,UAAWL,GAAKL,GAASb,GACzBwB,MAAON,GAAKH,GAAKf,GACjByB,QAASP,GAAKJ,GAAOd,GACrB0B,UAAWR,GAAKF,GAAShB,GACzB2B,UAAWT,GAAKD,GAASjB,KAGzB4B,GAAkB,CACpBpC,QAAS2B,GACT7X,GAAI8X,GACJT,QAASnlD,EAASmlD,IAClBC,IAAKplD,EAASolD,IACdC,QAASrlD,EAASqlD,IAClBC,MAAOtlD,EAASslD,IAChBC,IAAKvlD,EAASulD,IACdC,QAASxlD,EAASwlD,IAClBC,QAASzlD,EAASylD,KAGhBY,GAAa,SAAUC,EAAIC,EAASC,GACtC,IAAIC,EAASH,EAAGR,UAAuC,IAA5B,QAAQvsD,KAAKitD,GACpCE,EAAWJ,EAAGR,UAAYW,EAC1BE,EAAaL,EAAGP,aAAoC,IAArBO,EAAG5vC,QAAQH,MAC1CqwC,EAAaN,EAAGP,aAAoC,IAArBO,EAAG5vC,QAAQH,MAC1CswC,EAAWJ,GAAUE,GAAcC,IAA4C,IAA9B,UAAUrtD,KAAKitD,GAChEM,EAAUR,EAAGR,SAAWQ,EAAGP,YAC3BgB,EAAUD,IAAYD,EACtBG,EAAaT,EAAQtB,YAAcqB,EAAGR,UAAyC,IAA9B,UAAUvsD,KAAKitD,GACpE,MAAO,CACLC,OAAQzmD,EAASymD,GACjBC,SAAU1mD,EAAS0mD,GACnBG,SAAU7mD,EAAS6mD,GACnBE,QAAS/mD,EAAS+mD,GAClBD,QAAS9mD,EAAS8mD,GAClBf,UAAWO,EAAGP,UACdD,MAAOQ,EAAGR,MACVmB,UAAWjnD,EAASgnD,KAIpBE,GAAW,SAAUC,EAAYX,GACnC,IAAI7C,EAAQlwC,OAAO+yC,GAAW/sC,cAC9B,OAAOjV,EAAK2iD,GAAY,SAAUC,GAChC,OAAOA,EAAUC,OAAO1D,OAGxB2D,GAAgB,SAAUC,EAAUf,GACtC,OAAOU,GAASK,EAAUf,GAAWrvD,KAAI,SAAUovD,GACjD,IAAI7vC,EAAUutC,GAAQJ,OAAO0C,EAAQzC,eAAgB0C,GACrD,MAAO,CACLhC,QAAS+B,EAAQ/yD,KACjBkjB,QAASA,OAIX8wC,GAAW,SAAUC,EAAMjB,GAC7B,OAAOU,GAASO,EAAMjB,GAAWrvD,KAAI,SAAUmvD,GAC7C,IAAI5vC,EAAUutC,GAAQJ,OAAOyC,EAAGxC,eAAgB0C,GAChD,MAAO,CACLhC,QAAS8B,EAAG9yD,KACZkjB,QAASA,OAIXgxC,GAAW,CACbJ,cAAeA,GACfE,SAAUA,IAGRG,GAAqB,sCACrBC,GAAgB,SAAU1hD,GAC5B,OAAO,SAAU2hD,GACf,OAAOgC,GAAWhC,EAAU3hD,KAG5BqhD,GAAW,CACb,CACE/zD,KAAM,OACNswD,eAAgB,CAAC,kCACjBuD,OAAQ,SAAUQ,GAChB,OAAOgC,GAAWhC,EAAU,UAAYgC,GAAWhC,EAAU,WAAagC,GAAWhC,EAAU,WAAagC,GAAWhC,EAAU,iBAGrI,CACEr0D,KAAM,SACNswD,eAAgB,CACd,kCACA6D,IAEFN,OAAQ,SAAUQ,GAChB,OAAOgC,GAAWhC,EAAU,YAAcgC,GAAWhC,EAAU,iBAGnE,CACEr0D,KAAM,KACNswD,eAAgB,CACd,iCACA,8BAEFuD,OAAQ,SAAUQ,GAChB,OAAOgC,GAAWhC,EAAU,SAAWgC,GAAWhC,EAAU,aAGhE,CACEr0D,KAAM,QACNswD,eAAgB,CACd6D,GACA,kCAEFN,OAAQO,GAAc,UAExB,CACEp0D,KAAM,UACNswD,eAAgB,CAAC,uCACjBuD,OAAQO,GAAc,YAExB,CACEp0D,KAAM,SACNswD,eAAgB,CACd6D,GACA,iCAEFN,OAAQ,SAAUQ,GAChB,OAAQgC,GAAWhC,EAAU,WAAagC,GAAWhC,EAAU,aAAegC,GAAWhC,EAAU,kBAIrGJ,GAAO,CACT,CACEj0D,KAAM,UACN6zD,OAAQO,GAAc,OACtB9D,eAAgB,CAAC,0CAEnB,CACEtwD,KAAM,MACN6zD,OAAQ,SAAUQ,GAChB,OAAOgC,GAAWhC,EAAU,WAAagC,GAAWhC,EAAU,SAEhE/D,eAAgB,CACd,sCACA,+BACA,wCAGJ,CACEtwD,KAAM,UACN6zD,OAAQO,GAAc,WACtB9D,eAAgB,CAAC,sCAEnB,CACEtwD,KAAM,MACN6zD,OAAQO,GAAc,QACtB9D,eAAgB,CAAC,mCAEnB,CACEtwD,KAAM,QACN6zD,OAAQO,GAAc,SACtB9D,eAAgB,IAElB,CACEtwD,KAAM,UACN6zD,OAAQO,GAAc,SACtB9D,eAAgB,IAElB,CACEtwD,KAAM,UACN6zD,OAAQO,GAAc,WACtB9D,eAAgB,KAGhBgE,GAAe,CACjBP,SAAUvnD,EAASunD,IACnBE,KAAMznD,EAASynD,KAGbM,GAAW,SAAUvB,GACvB,IAAIe,EAAWO,GAAaP,WACxBE,EAAOK,GAAaL,OACpBlB,EAAUmB,GAASJ,cAAcC,EAAUf,GAAWz0C,KAAKmzC,GAAQlB,QAASkB,GAAQpX,IACpFwY,EAAKoB,GAASF,SAASC,EAAMjB,GAAWz0C,KAAKq0C,GAAgBpC,QAASoC,GAAgBtY,IACtFka,EAAa3B,GAAWC,EAAIC,EAASC,GACzC,MAAO,CACLD,QAASA,EACTD,GAAIA,EACJ0B,WAAYA,IAGZC,GAAoB,CAAEpE,OAAQkE,IAE9BG,GAAW5E,IAAO,WACpB,IAAIkD,EAAY/xD,EAAW0zD,UAAU3B,UACrC,OAAOyB,GAAkBpE,OAAO2C,MAE9B4B,GAAsB,CAAEvE,OAAQqE,IAEhCW,GAAYR,GACZg2F,GAAaf,GACbpqJ,GAAK,SAAUiG,EAASuF,GAC1B,IAAIyC,EAAMhI,EAAQgI,MAClB,GAAIA,EAAIme,WAAaupC,GACnB,OAAO,EAEP,IAAIM,EAAOhoD,EACX,QAAqBqR,IAAjB22C,EAAKpnD,QACP,OAAOonD,EAAKpnD,QAAQrD,GACf,QAA+B8T,IAA3B22C,EAAKC,kBACd,OAAOD,EAAKC,kBAAkB1qD,GACzB,QAAmC8T,IAA/B22C,EAAKE,sBACd,OAAOF,EAAKE,sBAAsB3qD,GAC7B,QAAgC8T,IAA5B22C,EAAKG,mBACd,OAAOH,EAAKG,mBAAmB5qD,GAE/B,MAAM,IAAI2T,MAAM,mCAIlBisI,GAAiB,SAAUn9I,GAC7B,OAAOA,EAAIme,WAAaupC,IAAa1nD,EAAIme,WAAa++H,IAAwC,IAA1Bl9I,EAAIo9I,mBAEtEliJ,GAAM,SAAUqC,EAAU05B,GAC5B,IAAIo3G,OAAiBh9H,IAAV4lB,EAAsB3jC,EAAWwE,SAAWm/B,EAAMj3B,MAC7D,OAAOm9I,GAAe9O,GAAQ,GAAKr4I,EAAIq4I,EAAKt2I,iBAAiBwF,GAAW0jD,GAAQN,UAE9E08F,GAAM,SAAU9/I,EAAU05B,GAC5B,IAAIo3G,OAAiBh9H,IAAV4lB,EAAsB3jC,EAAWwE,SAAWm/B,EAAMj3B,MAC7D,OAAOm9I,GAAe9O,GAAQn8H,EAAO5B,OAAS4B,EAAO5X,KAAK+zI,EAAKiP,cAAc//I,IAAWvH,IAAIirD,GAAQN,UAGlGnwC,GAAK,SAAU43C,EAAIC,GACrB,OAAOD,EAAGpoD,QAAUqoD,EAAGroD,OAErBsoD,GAAkB,SAAUF,EAAIC,GAClC,IAAIE,EAAKH,EAAGpoD,MACRwoD,EAAKH,EAAGroD,MACZ,OAAOuoD,IAAOC,GAAaD,EAAGxgD,SAASygD,IAErCC,GAAa,SAAUL,EAAIC,GAC7B,OAAOnG,GAAKF,4BAA4BoG,EAAGpoD,MAAOqoD,EAAGroD,QAEnDolD,GAAU6B,GAAoBvE,SAAS0C,QACvCm4F,GAAan4F,GAAQzB,OAAS8E,GAAaH,GAC3CK,GAAO52D,GAEPyrJ,GAAQ,SAAUxlJ,GACpB,OAAOipD,GAAQN,QAAQ3oD,EAAQgI,MAAMs6B,gBAEnCmjH,GAAc,SAAUzlJ,GAC1B,OAAOipD,GAAQN,QAAQ3oD,EAAQgI,MAAMs6B,cAAcmjH,cAEjDtlJ,GAAS,SAAUH,GACrB,OAAOka,EAAO5X,KAAKtC,EAAQgI,MAAM1H,YAAYtC,IAAIirD,GAAQN,UAEvD4U,GAAU,SAAUv9D,EAAS0lJ,GAC/B,IAAIC,EAAOnrI,EAAWkrI,GAAUA,EAASttI,EACrCpQ,EAAMhI,EAAQgI,MACd3I,EAAM,GACV,MAA0B,OAAnB2I,EAAI1H,iBAA0C+Y,IAAnBrR,EAAI1H,WAA0B,CAC9D,IAAIslJ,EAAY59I,EAAI1H,WAChB4+B,EAAI+pB,GAAQN,QAAQi9F,GAExB,GADAvmJ,EAAIwD,KAAKq8B,IACO,IAAZymH,EAAKzmH,GACP,MAEAl3B,EAAM49I,EAGV,OAAOvmJ,GAELwmJ,GAAc,SAAU7lJ,GAC1B,OAAOka,EAAO5X,KAAKtC,EAAQgI,MAAMy8C,iBAAiBzmD,IAAIirD,GAAQN,UAE5D5gC,GAAc,SAAU/nB,GAC1B,OAAOka,EAAO5X,KAAKtC,EAAQgI,MAAM+f,aAAa/pB,IAAIirD,GAAQN,UAExDp5C,GAAW,SAAUvP,GACvB,OAAOhC,EAAIgC,EAAQgI,MAAM0L,WAAYu1C,GAAQN,UAE3CiI,GAAQ,SAAU5wD,EAASuC,GAC7B,IAAIg1C,EAAKv3C,EAAQgI,MAAM0L,WACvB,OAAOwG,EAAO5X,KAAKi1C,EAAGh1C,IAAQvE,IAAIirD,GAAQN,UAExCh1C,GAAa,SAAU3T,GACzB,OAAO4wD,GAAM5wD,EAAS,IAIpBlB,IAFO0qD,EAAU,UAAW,UAEnB,SAAUqH,EAAQ7wD,GAC7B,IAAI8wD,EAAW3wD,GAAO0wD,GACtBC,EAASlmD,MAAK,SAAUhP,GACtBA,EAAEoM,MAAMpJ,aAAaoB,EAAQgI,MAAO6oD,EAAO7oD,YAG3CrF,GAAQ,SAAUkuD,EAAQ7wD,GAC5B,IAAIk5D,EAAUnxC,GAAY8oC,GAC1BqI,EAAQtgD,MAAK,WACX,IAAIk4C,EAAW3wD,GAAO0wD,GACtBC,EAASlmD,MAAK,SAAUhP,GACtBsP,GAAOtP,EAAGoE,SAEX,SAAUpE,GACXkD,GAAOlD,EAAGoE,OAGV8lJ,GAAU,SAAU3lJ,EAAQH,GAC9B,IAAI+lJ,EAAepyI,GAAWxT,GAC9B4lJ,EAAantI,MAAK,WAChB1N,GAAO/K,EAAQH,MACd,SAAUpE,GACXuE,EAAO6H,MAAMpJ,aAAaoB,EAAQgI,MAAOpM,EAAEoM,WAG3CkD,GAAS,SAAU/K,EAAQH,GAC7BG,EAAO6H,MAAMqE,YAAYrM,EAAQgI,QAE/B08D,GAAO,SAAU1kE,EAASgmJ,GAC5BlnJ,GAAOkB,EAASgmJ,GAChB96I,GAAO86I,EAAShmJ,IAGd+wD,GAAW,SAAUF,EAAQhxD,GAC/B+K,EAAK/K,GAAU,SAAUoS,GACvBnT,GAAO+xD,EAAQ5+C,OAGfg0I,GAAU,SAAUp1F,EAAQhxD,GAC9B+K,EAAK/K,GAAU,SAAUoS,EAAGxS,GAC1B,IAAIyK,EAAU,IAANzK,EAAUoxD,EAAShxD,EAASJ,EAAI,GACxCkD,GAAMuH,EAAG+H,OAGT++C,GAAW,SAAU7wD,EAAQN,GAC/B+K,EAAK/K,GAAU,SAAUoS,GACvB/G,GAAO/K,EAAQ8R,OAIfhH,GAAQ,SAAUjL,GACpBA,EAAQgI,MAAMvH,YAAc,GAC5BmK,EAAK2E,GAASvP,IAAU,SAAUkmJ,GAChCC,GAASD,OAGTC,GAAW,SAAUnmJ,GACvB,IAAIgI,EAAMhI,EAAQgI,MACK,OAAnBA,EAAI1H,YACN0H,EAAI1H,WAAW+iB,YAAYrb,IAG3Bw9D,GAAS,SAAUwgF,GACrB,IAAIj0F,EAAaxiD,GAASy2I,GACtBj0F,EAAW5yD,OAAS,GACtB4xD,GAASi1F,EAASj0F,GAEpBo0F,GAASH,IAKPI,IAFY58F,EAAU,QAAS,UAClBA,EAAU,QAAS,UACzBA,EAAU,OAAQ,YACzB68F,GAAU78F,EAAU,MAAO,UAE3BoO,IADSpO,EAAU,IAAK,KACfA,EAAU,UAAW,UAAW,YACzC88F,GAAY98F,EAAU,UAAW,UAAW,UAAW,SACvD+8F,GAAW/8F,EAAU,UAAW,UAAW,UAAW,MAAO,UAC7Dg9F,GAAUh9F,EAAU,UAAW,QAAS,WACxCi9F,GAAaj9F,EAAU,UAAW,SAClCk9F,GAAal9F,EAAU,UAAW,QAAS,UAAW,SACtDm9F,GAAWn9F,EAAU,QAAS,WAC9Bo9F,GAAap9F,EAAU,UAAW,WAClCq9F,GAASr9F,EAAU,WAAY,WAAY,YAAa,aAExDs9F,GAAY,SAAU7nH,EAAO5U,EAAWq7H,GAC1C,OAAO/6I,EAAO4yD,GAAQt+B,EAAOymH,GAASr7H,IAEpC0nC,GAAa,SAAU9yB,EAAO5U,GAChC,OAAO1f,EAAO4E,GAAS0vB,GAAQ5U,IAE7B08H,GAAc,SAAU9nH,EAAO5U,GACjC,IAAIvwB,EAAS,GAOb,OANA8Q,EAAK2E,GAAS0vB,IAAQ,SAAUhtB,GAC1BoY,EAAUpY,KACZnY,EAASA,EAAOme,OAAO,CAAChG,KAE1BnY,EAASA,EAAOme,OAAO8uI,GAAY90I,EAAGoY,OAEjCvwB,GAGLktJ,GAAc,SAAU/nH,EAAO15B,EAAUmgJ,GAC3C,OAAOoB,GAAU7nH,GAAO,SAAU/0B,GAChC,OAAOnQ,GAAGmQ,EAAG3E,KACZmgJ,IAEDuB,GAAa,SAAUhoH,EAAO15B,GAChC,OAAOwsD,GAAW9yB,GAAO,SAAU/0B,GACjC,OAAOnQ,GAAGmQ,EAAG3E,OAGb2hJ,GAAgB,SAAUjoH,EAAO15B,GACnC,OAAOrC,GAAIqC,EAAU05B,IAGvB,SAASkoH,GAAmBptJ,EAAIqtJ,EAAUnoH,EAAOpoB,EAAG6uI,GAClD,OAAO3rJ,EAAGklC,EAAOpoB,GAAKqD,EAAOH,KAAKklB,GAASzkB,EAAWkrI,IAAWA,EAAOzmH,GAAS/kB,EAAO5B,OAAS8uI,EAASnoH,EAAOpoB,EAAG6uI,GAGtH,IAAI0B,GAAW,SAAUnoH,EAAO5U,EAAWq7H,GACzC,IAAI1lJ,EAAUi/B,EAAMj3B,MAChB29I,EAAOnrI,EAAWkrI,GAAUA,EAAS7+I,GAAS,GAClD,MAAO7G,EAAQM,WAAY,CACzBN,EAAUA,EAAQM,WAClB,IAAI6N,EAAK86C,GAAQN,QAAQ3oD,GACzB,GAAIqqB,EAAUlc,GACZ,OAAO+L,EAAOH,KAAK5L,GACd,GAAIw3I,EAAKx3I,GACd,MAGJ,OAAO+L,EAAO5B,QAEZ+uI,GAAU,SAAUpoH,EAAO5U,EAAWq7H,GACxC,IAAI3rJ,EAAK,SAAUrC,EAAG0I,GACpB,OAAOA,EAAK1I,IAEd,OAAOyvJ,GAAkBptJ,EAAIqtJ,GAAUnoH,EAAO5U,EAAWq7H,IAEvD4B,GAAU,SAAUroH,EAAO5U,GAC7B,IAAItP,EAAO,SAAUrT,GACnB,OAAO2iB,EAAU4+B,GAAQN,QAAQjhD,KAE/B5N,EAASuR,EAAK4zB,EAAMj3B,MAAM0L,WAAYqH,GAC1C,OAAOjhB,EAAOkE,IAAIirD,GAAQN,UAExB4+F,GAAa,SAAUtoH,EAAO5U,GAChC,IAAIm9H,EAAU,SAAU9/I,GACtB,IAAK,IAAIjI,EAAI,EAAGA,EAAIiI,EAAKgM,WAAWvU,OAAQM,IAAK,CAC/C,IAAIgoJ,EAAUx+F,GAAQN,QAAQjhD,EAAKgM,WAAWjU,IAC9C,GAAI4qB,EAAUo9H,GACZ,OAAOvtI,EAAOH,KAAK0tI,GAErB,IAAIr2H,EAAMo2H,EAAQ9/I,EAAKgM,WAAWjU,IAClC,GAAI2xB,EAAIvY,SACN,OAAOuY,EAGX,OAAOlX,EAAO5B,QAEhB,OAAOkvI,EAAQvoH,EAAMj3B,QAGnB0/I,GAAa,SAAUzoH,EAAO15B,EAAUmgJ,GAC1C,OAAO0B,GAASnoH,GAAO,SAAU/0B,GAC/B,OAAOnQ,GAAGmQ,EAAG3E,KACZmgJ,IAEDiC,GAAU,SAAU1oH,EAAO15B,GAC7B,OAAO+hJ,GAAQroH,GAAO,SAAU/0B,GAC9B,OAAOnQ,GAAGmQ,EAAG3E,OAGbqiJ,GAAe,SAAU3oH,EAAO15B,GAClC,OAAO8/I,GAAI9/I,EAAU05B,IAEnB4oH,GAAY,SAAU5oH,EAAO15B,EAAUmgJ,GACzC,OAAOyB,GAAkBptJ,GAAI2tJ,GAAYzoH,EAAO15B,EAAUmgJ,IAGxDoC,GAAa,SAAU7oH,EAAO15B,GAChC,OAAOwiJ,GAAiB9oH,EAAO15B,EAAUsB,GAAS,KAEhDkhJ,GAAmB,SAAU9oH,EAAO15B,EAAU8kB,GAChD,OAAO7Q,EAAKjK,GAAS0vB,IAAQ,SAAUhtB,GACrC,OAAOlY,GAAGkY,EAAG1M,GAAY8kB,EAAUpY,GAAK,CAACA,GAAK,GAAK81I,GAAiB91I,EAAG1M,EAAU8kB,OAGjF29H,GAAgB,CAClBF,WAAYA,GACZC,iBAAkBA,IAGhB9sH,GAAS,SAAUgtH,EAAMjoJ,EAAS0lJ,GAIpC,QAHe,IAAXA,IACFA,EAASttI,GAEPstI,EAAO1lJ,GACT,OAAOka,EAAO5B,OAEhB,GAAIvI,EAASk4I,EAAM5tJ,GAAK2F,IACtB,OAAOka,EAAOH,KAAK/Z,GAErB,IAAIkoJ,EAAqB,SAAUlkJ,GACjC,OAAOjK,GAAGiK,EAAK,UAAY0hJ,EAAO1hJ,IAEpC,OAAO0jJ,GAAW1nJ,EAASioJ,EAAK5kJ,KAAK,KAAM6kJ,IAEzCC,GAAO,SAAUnoJ,EAAS0lJ,GAC5B,OAAOzqH,GAAO,CACZ,KACA,MACCj7B,EAAS0lJ,IAEV0C,GAAQ,SAAUhB,GACpB,OAAOY,GAAcF,WAAWV,EAAU,UAExCiB,GAAU,SAAUroJ,EAAS0lJ,GAC/B,OAAOzqH,GAAO,CACZ,UACA,KACA,QACA,QACA,SACCj7B,EAAS0lJ,IAEV4C,GAAa,SAAU/iJ,EAAUvF,GACnC,OAAOG,GAAOH,GAAShC,KAAI,SAAUmC,GACnC,OAAO8mJ,GAAW9mJ,EAAQoF,OAG1BgjJ,GAAiB3wI,EAAM0wI,GAAY,SACnCE,GAAgB5wI,EAAM0wI,GAAY,MAClCG,GAAY,SAAUrB,GACxB,OAAOQ,GAAaR,EAAU,UAE5BsB,GAAQ,SAAU1oJ,EAAS0lJ,GAC7B,OAAOmC,GAAU7nJ,EAAS,QAAS0lJ,IAEjCrwE,GAAM,SAAUr1E,EAAS0lJ,GAC3B,OAAOzqH,GAAO,CAAC,MAAOj7B,EAAS0lJ,IAE7B3zI,GAAO,SAAUq1I,GACnB,OAAOY,GAAcF,WAAWV,EAAU,OAExCr8I,GAAO,SAAU/K,EAASyF,GAC5B,OAAO3K,SAASY,GAAIsE,EAASyF,GAAW,KAEtCkjJ,GAAS,SAAU3oJ,EAAS4oJ,EAASC,GACvC,IAAIC,EAAY/9I,GAAK/K,EAAS4oJ,GAC1B92I,EAAO/G,GAAK/K,EAAS6oJ,GACzB,OAAOzC,GAAK0C,EAAWh3I,IAErBi3I,GAAc,CAChBZ,KAAMA,GACNM,UAAWA,GACXL,MAAOA,GACPG,eAAgBA,GAChBG,MAAOA,GACPrzE,IAAKA,GACLtjE,KAAMA,GACNs2I,QAASA,GACTG,cAAeA,GACfz9I,KAAMA,GACNq7I,KAAMuC,IAGJK,GAAY,SAAUN,GACxB,IAAI32I,EAAOg3I,GAAYh3I,KAAK22I,GAC5B,OAAO1qJ,EAAI+T,GAAM,SAAUsjE,GACzB,IAAIr1E,EAAUq1E,EACVvkB,EAAW3wD,GAAOH,GAClBipJ,EAAgBn4F,EAAS9yD,KAAI,SAAUkhC,GACzC,IAAIgqH,EAAa7uJ,GAAK6kC,GACtB,MAAsB,UAAfgqH,GAAyC,UAAfA,GAAyC,UAAfA,EAAyBA,EAAa,WAChGpwI,MAAM,SACLsvI,EAAQpqJ,EAAI+qJ,GAAYX,MAAM/yE,IAAM,SAAU8yE,GAChD,IAAIgB,EAAUllI,GAAIkkI,EAAM,WAAartJ,SAASY,GAAIysJ,EAAM,WAAY,IAAM,EACtEiB,EAAUnlI,GAAIkkI,EAAM,WAAartJ,SAASY,GAAIysJ,EAAM,WAAY,IAAM,EAC1E,OAAOvwF,GAAOuwF,EAAMgB,EAASC,MAE/B,OAAO5C,GAAQxmJ,EAASooJ,EAAOa,OAG/BI,GAAiB,SAAUt3I,EAAMu3I,GACnC,OAAOtrJ,EAAI+T,GAAM,SAAUsjE,GACzB,IAAI+yE,EAAQpqJ,EAAI+qJ,GAAYX,MAAM/yE,IAAM,SAAU8yE,GAChD,IAAIgB,EAAUllI,GAAIkkI,EAAM,WAAartJ,SAASY,GAAIysJ,EAAM,WAAY,IAAM,EACtEiB,EAAUnlI,GAAIkkI,EAAM,WAAartJ,SAASY,GAAIysJ,EAAM,WAAY,IAAM,EAC1E,OAAOvwF,GAAOuwF,EAAMgB,EAASC,MAE/B,OAAO5C,GAAQnxE,EAAK+yE,EAAOkB,EAAQtwC,eAGnCuwC,GAAc,CAChBP,UAAWA,GACXK,eAAgBA,IAGdzvJ,GAAM,SAAUy7E,EAAKs2B,GACvB,OAAOt2B,EAAM,IAAMs2B,GAEjB69C,GAAQ,SAAUC,EAAWp0E,EAAKs2B,GACpC,IAAIhtC,EAAM8qF,EAAUvuI,SAASthB,GAAIy7E,EAAKs2B,IACtC,YAAetyF,IAARslD,EAAoBzkD,EAAOH,KAAK4kD,GAAOzkD,EAAO5B,QAEnDoxI,GAAW,SAAUD,EAAWtzG,EAAMpyB,GACxC,IAAI4lI,EAAWC,GAAYH,GAAW,SAAU7xF,GAC9C,OAAO7zC,EAAWoyB,EAAMyhB,EAAO53D,cAEjC,OAAO2pJ,EAASxqJ,OAAS,EAAI+a,EAAOH,KAAK4vI,EAAS,IAAMzvI,EAAO5B,QAE7DsxI,GAAc,SAAUH,EAAWp/H,GACrC,IAAInnB,EAAMsW,EAAKiwI,EAAUvmJ,OAAO,SAAU4X,GACxC,OAAOA,EAAEstI,WAEX,OAAOz9I,EAAOzH,EAAKmnB,IAEjBw/H,GAAW,SAAUvhG,GACvB,IAAIptC,EAAS,GACTktI,EAAQ,GACR0B,EAAUxhG,EAAKnpD,OACf4qJ,EAAa,EACjBn/I,EAAK09C,GAAM,SAAU0hG,EAASlvI,GAC5B,IAAImvI,EAAa,GACjBr/I,EAAKo/I,EAAQ5B,SAAS,SAAUxwF,GAC9B,IAAItzC,EAAQ,EACZ,WAAiCjL,IAA1B6B,EAAOthB,GAAIkhB,EAAGwJ,IACnBA,IAGF,IADA,IAAI+mC,EAAUk7F,GAAS3uF,EAAO53D,UAAW43D,EAAOuxF,UAAWvxF,EAAOwxF,UAAWtuI,EAAGwJ,GACvE7kB,EAAI,EAAGA,EAAIm4D,EAAOwxF,UAAW3pJ,IACpC,IAAK,IAAIuC,EAAI,EAAGA,EAAI41D,EAAOuxF,UAAWnnJ,IAAK,CACzC,IAAIkoJ,EAAKpvI,EAAI9Y,EACTmoJ,EAAK7lI,EAAQ7kB,EACb2qJ,EAASxwJ,GAAIswJ,EAAIC,GACrBjvI,EAAOkvI,GAAU/+F,EACjB0+F,EAAartJ,KAAKssB,IAAI+gI,EAAYI,EAAK,GAG3CF,EAAWpnJ,KAAKwoD,MAElB+8F,EAAMvlJ,KAAK2jJ,GAAQwD,EAAQhqJ,UAAWiqJ,EAAYD,EAAQhxC,eAE5D,IAAI2vC,EAASvC,GAAK0D,EAASC,GAC3B,MAAO,CACL3D,KAAMv/I,EAAS8hJ,GACfztI,OAAQrU,EAASqU,GACjBhY,IAAK2D,EAASuhJ,KAGdiC,GAAY,SAAUZ,GACxB,IAAI13I,EAAO/T,EAAIyrJ,EAAUvmJ,OAAO,SAAUpG,GACxC,OAAOA,EAAEsrJ,WAEX,OAAO5hG,EAAQz0C,IAEbu4I,GAAY,CACdT,SAAUA,GACVL,MAAOA,GACPE,SAAUA,GACVE,YAAaA,GACbS,UAAWA,IAGTE,GAAc/gG,EAAU,SAAU,SAAU,SAAU,UACtDghG,GAAoB,SAAUC,EAAO92F,GACvC,IAAI+2F,EAAeD,EAAMrE,OAAOxnG,UAC5B+rG,EAAYF,EAAMrE,OAAOr0I,OACzB64I,EAASD,EACTE,EAASH,EACTI,EAAS,EACTC,EAAS,EAmBb,OAlBAphG,EAAO8gG,EAAMvvI,UAAU,SAAU08C,GAC/B,GAAIjE,EAAWiE,GAAS,CACtB,IAAIozF,EAAWpzF,EAAOyd,MAClB41E,EAASD,EAAWpzF,EAAOuxF,UAAY,EACvC+B,EAAWtzF,EAAO+zC,SAClBw/C,EAASD,EAAWtzF,EAAOwxF,UAAY,EACvC4B,EAAWJ,EACbA,EAASI,EACAC,EAASH,IAClBA,EAASG,GAEPC,EAAWL,EACbA,EAASK,EACAC,EAASJ,IAClBA,EAASI,OAIRZ,GAAYK,EAAQC,EAAQC,EAAQC,IAEzCK,GAAW,SAAU9iG,EAAM+iG,EAAcC,GAC3C,IAAIj2E,EAAM/sB,EAAKgjG,GAAUtrJ,UACrBmnF,EAAKl+B,GAAQL,QAAQ,MACzB19C,GAAOi8E,EAAIl+B,GAAQL,QAAQ,OAC3B,IAAIzwC,EAAIkzI,EAAengJ,GAAS46I,GAChC3tI,EAAEk9D,EAAK8R,IAELokE,GAAa,SAAUjjG,EAAMmiG,EAAOe,EAAO73F,GAG7C,IAFA,IAAI+2F,EAAeD,EAAMrE,OAAOxnG,UAC5B+rG,EAAYF,EAAMrE,OAAOr0I,OACpBtS,EAAI,EAAGA,EAAIkrJ,EAAWlrJ,IAE7B,IADA,IAAI4rJ,GAAe,EACVrpJ,EAAI,EAAGA,EAAI0oJ,EAAc1oJ,IAChC,KAAMvC,EAAI+rJ,EAAMZ,UAAYnrJ,EAAI+rJ,EAAMV,UAAY9oJ,EAAIwpJ,EAAMX,UAAY7oJ,EAAIwpJ,EAAMT,UAAW,CAC3F,IAAIU,EAAWnB,GAAUd,MAAMiB,EAAOhrJ,EAAGuC,GAAG2I,OAAOgpD,GAAYl7C,SAC3DgzI,EACFL,GAAS9iG,EAAM+iG,EAAc5rJ,GAE7B4rJ,GAAe,IAMrBK,GAAQ,SAAUhD,EAAO8C,GAC3B,IAAIG,EAAYhhJ,EAAOq9I,GAAcF,WAAWY,EAAO,OAAO,SAAUrzE,GACtE,OAAuC,IAAhCA,EAAIrtE,MAAMo9I,qBAEnBx6I,EAAK+gJ,EAAWxF,IACZqF,EAAMX,WAAaW,EAAMT,UAAYS,EAAMZ,WAAaY,EAAMV,UAChElgJ,EAAKo9I,GAAcF,WAAWY,EAAO,UAAU,SAAUP,GACvDp3I,GAAOo3I,EAAM,WACbp3I,GAAOo3I,EAAM,cAGjBp3I,GAAO23I,EAAO,SACd33I,GAAO23I,EAAO,UACd3D,GAAS2D,EAAO,SAChB3D,GAAS2D,EAAO,WAEdkD,GAAU,SAAUlD,EAAOmD,GAC7B,IAAIl4F,EAAa,SAAUiE,GACzB,OAAO79D,GAAG69D,EAAO53D,UAAW6rJ,IAE1BvjG,EAAOihG,GAAYP,UAAUN,GAC7B+B,EAAQH,GAAUT,SAASvhG,GAC3BkjG,EAAQhB,GAAkBC,EAAO92F,GACjCpuD,EAAW,UAAYsmJ,EAAZ,YAAkDA,EAAmB,IAChFC,EAAkB9D,GAAcD,iBAAiBW,EAAO,SAAS,SAAUP,GAC7E,OAAOpuJ,GAAGouJ,EAAM5iJ,MAKlB,OAHAqF,EAAKkhJ,EAAiB3F,IACtBoF,GAAWjjG,EAAMmiG,EAAOe,EAAO73F,GAC/B+3F,GAAMhD,EAAO8C,GACN9C,GAELqD,GAAe,CAAEH,QAASA,IAE9B,SAASI,GAAWjyJ,EAAIM,GACtB,IAAIqB,EAAM,SAAUsE,GAClB,IAAKjG,EAAGiG,GACN,MAAM,IAAIkZ,MAAM,gBAAkB7e,EAAO,eAAiBA,EAAO,SAEnE,OAAO4xJ,EAAUjsJ,GAAS8Y,MAAM,KAE9BmzI,EAAY,SAAUjsJ,GACxB,OAAOjG,EAAGiG,GAAWka,EAAO5X,KAAKtC,EAAQgI,MAAM0wH,WAAax+G,EAAO5B,QAEjE3c,EAAM,SAAUqE,EAASvE,GAC3B,IAAK1B,EAAGiG,GACN,MAAM,IAAIkZ,MAAM,oBAAsB7e,EAAO,eAAiBA,EAAO,SAEvE2F,EAAQgI,MAAM0wH,UAAYj9H,GAE5B,MAAO,CACLC,IAAKA,EACLuwJ,UAAWA,EACXtwJ,IAAKA,GAIT,IAAIuwJ,GAAMF,GAAUllI,GAAQ,QACxB65H,GAAQ,SAAU3gJ,GACpB,OAAOksJ,GAAIxwJ,IAAIsE,IAEbisJ,GAAY,SAAUjsJ,GACxB,OAAOksJ,GAAID,UAAUjsJ,IAEnBmsJ,GAAQ,SAAUnsJ,EAASvE,GAC7BywJ,GAAIvwJ,IAAIqE,EAASvE,IAGf2wJ,GAAS,SAAUpsJ,GACrB,MAAyB,QAAlB3F,GAAK2F,GAAqB,EAAIisJ,GAAUjsJ,GAAS4Y,MAAK,WAC3D,OAAOrJ,GAASvP,GAASb,UACxB,SAAUvD,GACX,OAAOA,EAAEuD,WAGTktJ,GAAO,IACPC,GAA+B,SAAUn+I,GAC3C,OAAO89I,GAAU99I,GAAIxD,QAAO,SAAUjJ,GACpC,OAA8B,IAAvBA,EAAKsJ,OAAO7L,QAAgBuC,EAAKuC,QAAQooJ,KAAS,KACxDxzI,UAED0zI,GAA6B,CAC/B,MACA,MAEEC,GAAmB,SAAUx8F,GAC/B,IAAIy8F,EAAoBH,GAA6Bt8F,GACrD,OAAOy8F,GAAqB18I,EAASw8I,GAA4BlyJ,GAAK21D,KAGpEgpC,GAAQ,SAAUh5F,GACpB,OAAOunJ,GAAWvnJ,EAASwsJ,KAEzBE,GAAS,SAAU1sJ,GACrB,OAAO2sJ,GAAc3sJ,EAASwsJ,KAE5BG,GAAgB,SAAU1tH,EAAO5U,GACnC,IAAIm9H,EAAU,SAAUxnJ,GAEtB,IADA,IAAI+xD,EAAaxiD,GAASvP,GACjBP,EAAIsyD,EAAW5yD,OAAS,EAAGM,GAAK,EAAGA,IAAK,CAC/C,IAAImxD,EAAQmB,EAAWtyD,GACvB,GAAI4qB,EAAUumC,GACZ,OAAO12C,EAAOH,KAAK62C,GAErB,IAAIx/B,EAAMo2H,EAAQ52F,GAClB,GAAIx/B,EAAIvY,SACN,OAAOuY,EAGX,OAAOlX,EAAO5B,QAEhB,OAAOkvI,EAAQvoH,IAGbwyB,GAAU,SAAUC,EAAUC,GAChC,OAAO1I,GAAQN,QAAQ+I,EAAS1pD,MAAMsrC,UAAUqe,KAE9CvX,GAAU,SAAUsX,GACtB,OAAOD,GAAQC,GAAU,IAEvBE,GAAO,SAAUF,GACnB,OAAOD,GAAQC,GAAU,IAEvBG,GAAY,SAAUH,EAAUpuD,GAClC,IAAIqxC,EAAKsU,GAAQL,QAAQtlD,GACrBE,EAAa3H,GAAM61D,GAEvB,OADAN,GAAOzc,EAAInxC,GACJmxC,GAELi4G,GAAS,SAAUl7F,EAAUpuD,GAC/B,IAAIqxC,EAAKkd,GAAUH,EAAUpuD,GACzBupJ,EAAgBt9I,GAASqiD,GAAKF,IAElC,OADAV,GAASrc,EAAIk4G,GACNl4G,GAGLm4G,GAAa,WACf,IAAI3lE,EAAKl+B,GAAQL,QAAQ,MAEzB,OADA19C,GAAOi8E,EAAIl+B,GAAQL,QAAQ,OACpBu+B,GAELlpF,GAAU,SAAUkqJ,EAAM7kJ,EAAK8oB,GACjC,IAAI2gI,EAAUH,GAAOzE,EAAM7kJ,GAQ3B,OAPAqmD,EAAOv9B,GAAO,SAAUxwB,EAAGgoB,GACf,OAANhoB,EACFmV,GAAOg8I,EAASnpI,GAEhBjoB,GAAIoxJ,EAASnpI,EAAGhoB,MAGbmxJ,GAELC,GAAe,SAAU7E,GAC3B,OAAOA,GAEL8E,GAAS,SAAUzkI,GACrB,OAAO,WACL,OAAOygC,GAAQL,QAAQ,KAAMpgC,EAAIxgB,SAGjCklJ,GAAe,SAAUC,EAASC,EAAS71E,GAC7C,IAAI81E,EAAUr0D,GAAMm0D,GACpB,OAAOE,EAAQrvJ,KAAI,SAAUsvJ,GAC3B,IAAIC,EAAiBh2E,EAAQl0E,KAAK,KAC9Bk6D,EAAUypF,GAAYsG,EAAWC,GAAgB,SAAUvtJ,GAC7D,OAAOwY,GAAGxY,EAASmtJ,MAErB,OAAOpK,EAAMxlF,GAAS,SAAUvrD,EAAM7R,GACpC,IAAIqtJ,EAAepzG,GAAQj6C,GAG3B,OAFA4Q,GAAOy8I,EAAc,mBACrBtiJ,GAAO8G,EAAMw7I,GACNA,IACNJ,MACFt0I,MAAMs0I,IAEPK,GAAiB,SAAU37F,EAAQtpC,EAAKklI,GAC1C,IAAIN,EAAU,SAAU90B,GACtB,IAAIq1B,EAAOnI,GAAMltB,EAAKt4H,WAClBmnF,EAAKl+B,GAAQL,QAAQvuD,GAAKi+H,EAAKt4H,WAAY2tJ,EAAK3lJ,OAChDuvE,EAAUm2E,EAAe50I,MAAM,CACjC,SACA,KACA,IACA,IACA,OACA,OACA,KACA,KACA,KACA,KACA,KACA,KACA,IACA,QAEE80I,EAAWr2E,EAAQp4E,OAAS,EAAI+tJ,GAAa50B,EAAKt4H,UAAWmnF,EAAI5P,GAAW4P,EAQhF,OAPAj8E,GAAO0iJ,EAAU3kG,GAAQL,QAAQ,OACjC5kC,GAAKs0G,EAAKt4H,UAAWmnF,GACrB49D,GAAS59D,EAAI,UACU,IAAnBmxC,EAAK8wB,WACPrE,GAASzsB,EAAKt4H,UAAW,SAE3B8xD,EAAOwmE,EAAKt4H,UAAWmnF,GAChBA,GAET,MAAO,CACL9R,IAAK43E,GAAOzkI,GACZ2/H,KAAMiF,EACNnvJ,QAASA,GACT4vJ,IAAKf,KAGLpmF,GAAQ,SAAUl+C,GACpB,MAAO,CACL6sD,IAAK43E,GAAOzkI,GACZ2/H,KAAM2E,GACN7uJ,QAAS+uJ,GACTa,IAAKf,KAGLgB,GAAY,CACdL,eAAgBA,GAChB/mF,MAAOA,IAGLqnF,GAAa,SAAU/oJ,EAAMi6B,GAC/B,IAAIzW,EAAMyW,GAAS3jC,EAAWwE,SAC1B0S,EAAMgW,EAAIoG,cAAc,OAE5B,OADApc,EAAIpR,UAAY4D,EACTuK,GAAS05C,GAAQN,QAAQn2C,KAG9Bw7I,GAAc,SAAUnH,EAAQjvF,GAClC,IAAIq2F,EAAWr2F,EAAO+zC,SAClBuiD,EAAYt2F,EAAO+zC,SAAW/zC,EAAOwxF,UAAY,EACjD+E,EAAUv2F,EAAOyd,MACjB+4E,EAAax2F,EAAOyd,MAAQzd,EAAOuxF,UAAY,EACnD,OAAO8E,GAAYpH,EAAOwH,aAAeH,GAAarH,EAAOqE,YAAeiD,GAAWtH,EAAOyH,aAAeF,GAAcvH,EAAOmE,YAEhIuD,GAAW,SAAU1H,EAAQjvF,GAC/B,OAAOA,EAAO+zC,UAAYk7C,EAAOqE,YAActzF,EAAO+zC,SAAW/zC,EAAOwxF,UAAY,GAAKvC,EAAOwH,aAAez2F,EAAOyd,OAASwxE,EAAOmE,YAAcpzF,EAAOyd,MAAQzd,EAAOuxF,UAAY,GAAKtC,EAAOyH,aAEhME,GAAgB,SAAU/E,EAAW5C,GAGvC,IAFA,IAAI4H,GAAS,EACTC,EAAiB92I,EAAM22I,GAAU1H,GAC5BpnJ,EAAIonJ,EAAOmE,WAAYvrJ,GAAKonJ,EAAOyH,YAAa7uJ,IACvD,IAAK,IAAIuC,EAAI6kJ,EAAOqE,WAAYlpJ,GAAK6kJ,EAAOwH,YAAarsJ,IACvDysJ,EAASA,GAAUnE,GAAUd,MAAMC,EAAWhqJ,EAAGuC,GAAGyX,OAAOi1I,GAG/D,OAAOD,EAASv0I,EAAOH,KAAK8sI,GAAU3sI,EAAO5B,QAE3Cq2I,GAAa,CACfX,YAAaA,GACbO,SAAUA,GACVC,cAAeA,IAGbI,GAAY,SAAUC,EAASC,GACjC,OAAOjI,GAAOnqJ,KAAKC,IAAIkyJ,EAAQx5E,MAAOy5E,EAAQz5E,OAAQ34E,KAAKC,IAAIkyJ,EAAQljD,SAAUmjD,EAAQnjD,UAAWjvG,KAAKssB,IAAI6lI,EAAQx5E,MAAQw5E,EAAQ1F,UAAY,EAAG2F,EAAQz5E,MAAQy5E,EAAQ3F,UAAY,GAAIzsJ,KAAKssB,IAAI6lI,EAAQljD,SAAWkjD,EAAQzF,UAAY,EAAG0F,EAAQnjD,SAAWmjD,EAAQ1F,UAAY,KAEpR2F,GAAY,SAAUtF,EAAWuF,EAAWC,GAC9C,IAAIC,EAAc5E,GAAUZ,SAASD,EAAWuF,EAAWx2I,IACvD22I,EAAe7E,GAAUZ,SAASD,EAAWwF,EAAYz2I,IAC7D,OAAO02I,EAAY11I,MAAK,SAAU41I,GAChC,OAAOD,EAAanxJ,KAAI,SAAUqxJ,GAChC,OAAOT,GAAUQ,EAAIC,UAIvBC,GAAS,SAAU7F,EAAWuF,EAAWC,GAC3C,OAAOF,GAAUtF,EAAWuF,EAAWC,GAAYz1I,MAAK,SAAUqtI,GAChE,OAAO8H,GAAWH,cAAc/E,EAAW5C,OAG3C0I,GAAY,CACdR,UAAWA,GACXO,OAAQA,IAGNE,GAAS,SAAU/F,EAAWtB,EAAM9yE,EAAKs2B,GAC3C,OAAO2+C,GAAUZ,SAASD,EAAWtB,EAAM3vI,IAAIgB,MAAK,SAAUo+C,GAC5D,IAAIozF,EAAW31E,EAAM,EAAIzd,EAAOyd,MAAQzd,EAAOuxF,UAAY,EAAIvxF,EAAOyd,MAClE61E,EAAWv/C,EAAS,EAAI/zC,EAAO+zC,SAAW/zC,EAAOwxF,UAAY,EAAIxxF,EAAO+zC,SACxE8jD,EAAOnF,GAAUd,MAAMC,EAAWuB,EAAW31E,EAAK61E,EAAWv/C,GACjE,OAAO8jD,EAAKzxJ,KAAI,SAAUhG,GACxB,OAAOA,EAAEgI,iBAIX0vJ,GAAa,SAAUjG,EAAWnlI,EAAOy4D,GAC3C,OAAOwyE,GAAUR,UAAUtF,EAAWnlI,EAAOy4D,GAAQ/+E,KAAI,SAAU6oJ,GACjE,IAAIhoJ,EAASyrJ,GAAUV,YAAYH,EAAW7xI,EAAM+2I,GAAWX,YAAanH,IAC5E,OAAO7oJ,EAAIa,GAAQ,SAAU+4D,GAC3B,OAAOA,EAAO53D,iBAIhB2vJ,GAAa,SAAUlG,EAAWmG,GACpC,IAAIC,EAAgB,SAAUC,EAAIC,GAChC,OAAOxK,GAAWwK,EAAID,IAExB,OAAOxF,GAAUZ,SAASD,EAAWmG,EAAWC,GAAe7xJ,KAAI,SAAU45D,GAC3E,OAAOA,EAAO53D,cAGdgwJ,GAAa,CACfR,OAAQA,GACRE,WAAYA,GACZC,WAAYA,IAGVM,GAAW,SAAU9H,EAAM+H,EAAUC,GACvC,OAAOpH,GAAYL,MAAMP,GAAM3uI,MAAK,SAAUkvI,GAC5C,IAAIe,EAAY2G,GAAa1H,GAC7B,OAAOsH,GAAWR,OAAO/F,EAAWtB,EAAM+H,EAAUC,OAGpDE,GAAe,SAAU3H,EAAO1vD,EAAOhnF,GACzC,IAAIy3I,EAAY2G,GAAa1H,GAC7B,OAAOsH,GAAWN,WAAWjG,EAAWzwD,EAAOhnF,IAE7Cs+I,GAAmB,SAAU5H,EAAO1vD,EAAOu3D,EAAYv+I,EAAMw+I,GAC/D,IAAI/G,EAAY2G,GAAa1H,GACzB+H,EAAej4I,GAAGkwI,EAAO6H,GAAcr2I,EAAOH,KAAKi/E,GAASg3D,GAAWL,WAAWlG,EAAWzwD,GAC7F03D,EAAcl4I,GAAGkwI,EAAO8H,GAAat2I,EAAOH,KAAK/H,GAAQg+I,GAAWL,WAAWlG,EAAWz3I,GAC9F,OAAOy+I,EAAaj3I,MAAK,SAAUw1I,GACjC,OAAO0B,EAAYl3I,MAAK,SAAUm3I,GAChC,OAAOX,GAAWN,WAAWjG,EAAWuF,EAAW2B,UAIrDC,GAAW,SAAUlI,EAAO1vD,EAAOhnF,GACrC,IAAIy3I,EAAY2G,GAAa1H,GAC7B,OAAO6G,GAAUD,OAAO7F,EAAWzwD,EAAOhnF,IAExCo+I,GAAe,SAAU1H,GAC3B,IAAIpgG,EAAOihG,GAAYP,UAAUN,GACjC,OAAO4B,GAAUT,SAASvhG,IAExBuoG,GAAiB,CACnBrB,OAAQS,GACRP,WAAYW,GACZC,iBAAkBA,GAClBhB,OAAQsB,IAGNE,GAAgB,CAClB,OACA,IACA,MACA,UACA,QACA,aACA,SACA,SACA,SACA,MACA,UACA,KACA,KACA,KACA,QACA,QACA,QACA,QACA,UACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,aACA,MACA,WAGF,SAASC,KACP,IAAIt/F,EAAU,SAAUzxD,GACtB,OAAOipD,GAAQN,QAAQ3oD,EAAQgI,MAAMsrC,WAAU,KAE7CxzC,EAAW,SAAUE,GACvB,OAAOA,EAAQgI,MAAMs6B,eAEnB0uH,EAAa,SAAUhxJ,GACzB,QAAKkxD,GAAUlxD,KAGO,SAAlB3F,GAAK2F,IAGF+P,EAAS+gJ,GAAez2J,GAAK2F,MAElCixJ,EAAa,SAAUjxJ,GACzB,QAAKkxD,GAAUlxD,IAGR+P,EAAS,CACd,KACA,MACA,KACA,SACC1V,GAAK2F,KAENkxJ,EAAkB,SAAUlxJ,EAASqyI,GACvC,OAAOryI,EAAQgI,MAAM6hD,wBAAwBwoF,EAAMrqI,QAEjDmpJ,EAAmB,SAAUj9F,EAAQk9F,GACvC,IAAIrR,EAAKlkJ,GAAMq4D,GACf9C,GAAOggG,EAAarR,IAEtB,MAAO,CACLsR,GAAIxqJ,EAAS,CACXtB,SAAUmiJ,GACVL,QAASQ,GACTx9H,UAAW+8H,GACXlkJ,IAAKq6D,KAEP+zF,KAAMzqJ,EAAS,CACbtB,SAAU2hJ,GACV78H,UAAW08H,KAEbhkI,OAAQlc,EAAS,CACfnL,IAAKipB,GACLmgI,OAAQA,GACRnpJ,IAAK+kI,GACL3vH,OAAQg0I,KAEV34H,MAAOvlB,EAAS,CACdnL,IAAKA,GACLC,IAAKA,GACLoV,OAAQA,GACRwgJ,OAAQJ,IAEVpyJ,OAAQ8H,EAAS,CACf/H,OAAQA,GACR6D,MAAOA,GACP6uJ,SAAUvL,GACV/6I,OAAQA,GACRumJ,UAAWzgG,GACX80F,QAASA,GACTphF,KAAMA,KAER3zD,OAAQlK,EAAS,CACf2+D,OAAQA,GACRz0D,OAAQo1I,KAEVl6I,OAAQpF,EAAS,CACf8tC,GAAIsU,GAAQL,QACZ/sD,MAAO41D,EACP/vD,KAAMunD,GAAQJ,WAEhB+tE,MAAO/vH,EAAS,CACdqqJ,gBAAiBA,EACjBrL,YAAaA,GACb99H,YAAaA,KAEftiB,SAAUoB,EAAS,CACjB0I,SAAUA,GACVlV,KAAMA,GACN8F,OAAQA,GACRL,SAAUA,EACVgnB,OAAQA,GACRu9H,UAAWA,GACXnzF,UAAWA,GACX+S,QAAS08E,GACT+Q,QAASvF,GACT6E,WAAYA,EACZC,WAAYA,IAEdz4I,GAAIA,GACJze,GAAI42D,IAIR,IAAIghG,GAAYnoG,EAAU,OAAQ,SAC9BooG,GAAapoG,EAAU,QAAS,SAAU,UAC1CqoG,GAAS,SAAUC,EAAU3xJ,EAAQywD,GACvC,IAAIrhD,EAAWuiJ,EAASrsJ,WAAW8J,SAASpP,GACxCoC,EAAQ66D,EAAU7tD,EAAUqI,EAAMk6I,EAASt5I,GAAIo4C,IACnD,OAAOruD,EAAMvE,KAAI,SAAU+zJ,GACzB,MAAO,CACLjzJ,OAAQ+H,EAAS0I,EAAS/M,MAAM,EAAGuvJ,IACnCpvJ,MAAOkE,EAAS0I,EAAS/M,MAAMuvJ,EAAM,SAIvCC,GAAe,SAAUF,EAAU3xJ,EAAQywD,GAC7C,OAAOihG,GAAOC,EAAU3xJ,EAAQywD,GAAO5yD,KAAI,SAAUghC,GACnD,IAAIi6D,EAAS64D,EAAS7lJ,SAASpQ,MAAMsE,GAGrC,OAFA2xJ,EAAS/yJ,SAAS0yJ,UAAUx4D,EAAQj6D,EAAMr8B,SAC1CmvJ,EAAS/yJ,SAAS4D,MAAMxC,EAAQ84F,GACzB04D,GAAUxxJ,EAAQ84F,OAGzBg5D,GAAc,SAAUH,EAAU3xJ,EAAQywD,GAC5C,OAAOihG,GAAOC,EAAU3xJ,EAAQywD,GAAO5yD,KAAI,SAAUghC,GACnD,IAAIkzH,EAAQJ,EAAS7lJ,SAASpQ,MAAMsE,GAIpC,OAHA2xJ,EAAS/yJ,SAAS0yJ,UAAUS,EAAOlzH,EAAMlgC,SAASmZ,OAAO,CAAC24C,KAC1DkhG,EAAS/yJ,SAAS0yJ,UAAUtxJ,EAAQ6+B,EAAMr8B,SAC1CmvJ,EAAS/yJ,SAASD,OAAOqB,EAAQ+xJ,GAC1BP,GAAUO,EAAO/xJ,OAGxBgyJ,GAAY,SAAUL,EAAU37G,EAAMi8G,EAAOC,GAC/C,IAAItpI,EAAO,SAAU6nC,EAAOvK,EAAOisG,GACjC,IAAIngF,EAAWy/E,GAAWhhG,EAAO12C,EAAO5B,OAAQg6I,GAChD,OAAIF,EAAMxhG,GACDghG,GAAWhhG,EAAOvK,EAAOisG,GAEzBR,EAASrsJ,WAAWtF,OAAOywD,GAAOp3C,MAAK,SAAUrZ,GACtD,OAAOkyJ,EAAQP,EAAU3xJ,EAAQywD,GAAO5yD,KAAI,SAAUu0J,GACpD,IAAIxrF,EAAQ,CAAC,CACTiyB,MAAOu5D,EAAS7uH,KAChBu1D,OAAQs5D,EAASC,QAEjBC,EAAYL,EAAMjyJ,GAAUA,EAASoyJ,EAAS7uH,OAClD,OAAO3a,EAAK0pI,EAAWv4I,EAAOH,KAAKw4I,EAASC,SAAUF,EAAOr6I,OAAO8uD,UAErEjuD,MAAMq5D,IAGb,OAAOppD,EAAKotB,EAAMj8B,EAAO5B,OAAQ,KAG/Bo6I,GAAQ,SAAUZ,EAAUa,EAAM9yJ,EAAUsY,GAC9C,IAAIuH,EAAO7f,EAAS,GAChBwyD,EAAOxyD,EAAS2C,MAAM,GAC1B,OAAO2V,EAAE25I,EAAUa,EAAMjzI,EAAM2yC,IAE7BugG,GAAS,SAAUd,EAAUa,EAAM9yJ,GACrC,OAAOA,EAASV,OAAS,EAAIuzJ,GAAMZ,EAAUa,EAAM9yJ,EAAUgzJ,IAAa34I,EAAO5B,QAE/Eu6I,GAAY,SAAUf,EAAUa,EAAMjzI,EAAM2yC,GAC9C,IAAI/tC,EAAQquI,EAAKb,EAAUpyI,GAC3B,OAAOqjI,EAAM1wF,GAAM,SAAU98C,EAAGsB,GAC9B,IAAIw0C,EAAUsnG,EAAKb,EAAUj7I,GAC7B,OAAOi8I,GAAchB,EAAUv8I,EAAG81C,KACjC/mC,IAEDwuI,GAAgB,SAAUhB,EAAUxtI,EAAOY,GAC7C,OAAOZ,EAAM9K,MAAK,SAAU9hB,GAC1B,OAAOwtB,EAAIva,OAAOiN,EAAMk6I,EAASt5I,GAAI9gB,QAIrCq7J,GAAO,SAAUjB,EAAU37G,GAC7B,OAAOv+B,EAAMk6I,EAASt5I,GAAI29B,IAExB68G,GAAe,SAAUlB,EAAUmB,EAAQC,EAAKC,GAClD,IAAI5jJ,EAAWuiJ,EAASrsJ,WAAW8J,SAAS0jJ,GAC5C,GAAInB,EAASt5I,GAAGy6I,EAAQC,EAAI,IAC1B,OAAOh5I,EAAOH,KAAK,CAACm5I,EAAI,KAE1B,GAAIpB,EAASt5I,GAAGy6I,EAAQE,EAAI,IAC1B,OAAOj5I,EAAOH,KAAK,CAACo5I,EAAI,KAE1B,IAAIC,EAAS,SAAUC,GACrB,IAAIC,EAAUprH,EAAQmrH,GAClB9wJ,EAAQ66D,EAAUk2F,EAASP,GAAKjB,EAAUmB,IAASn6I,OAAO,GAC1Dq9B,EAAO5zC,EAAQ+wJ,EAAQn0J,OAAS,EAAIm0J,EAAQ/wJ,EAAQ,GAAK+wJ,EAAQ/wJ,GACrE,OAAO66D,EAAU7tD,EAAUwjJ,GAAKjB,EAAU37G,KAExCo9G,EAAaH,EAAOF,GACpBM,EAAWJ,EAAOD,GACtB,OAAOI,EAAW/5I,MAAK,SAAU6yF,GAC/B,OAAOmnD,EAASx1J,KAAI,SAAUy1J,GAC5B,IAAIz6D,EAAQt8F,KAAKC,IAAI0vG,EAAQonD,GACzBzhJ,EAAOtV,KAAKssB,IAAIqjF,EAAQonD,GAC5B,OAAOlkJ,EAAS/M,MAAMw2F,EAAOhnF,EAAO,UAItC0hJ,GAAc,SAAU5B,EAAUxtI,EAAOY,EAAKwgI,QACjC,IAAXA,IACFA,EAASttI,GAEX,IAAI86I,EAAM,CAAC5uI,GAAOrM,OAAO65I,EAAST,KAAKnuJ,IAAIohB,IACvC6uI,EAAM,CAACjuI,GAAKjN,OAAO65I,EAAST,KAAKnuJ,IAAIgiB,IACrCyuI,EAAQ,SAAU50H,GACpB,IAAIx8B,EAAQ66D,EAAUr+B,EAAM2mH,GAC5B,OAAOnjJ,EAAMqW,MAAK,WAChB,OAAOmmB,KACN,SAAUgzH,GACX,OAAOhzH,EAAKv8B,MAAM,EAAGuvJ,EAAM,OAG3B6B,EAAUD,EAAMT,GAChBW,EAAUF,EAAMR,GAChBjyD,EAAS71F,EAAKuoJ,GAAS,SAAU3hJ,GACnC,OAAOwH,EAAOo6I,EAASd,GAAKjB,EAAU7/I,OAExC,MAAO,CACL6hJ,UAAWjtJ,EAAS+sJ,GACpBG,WAAYltJ,EAASgtJ,GACrB3yD,OAAQr6F,EAASq6F,KAGjB8yD,GAAS,SAAUlC,EAAUxtI,EAAOY,GACtC,IAAI+uI,EAAOP,GAAY5B,EAAUxtI,EAAOY,GACxC,OAAO+uI,EAAK/yD,SAAS1nF,MAAK,SAAU0nF,GAClC,OAAO8xD,GAAalB,EAAU5wD,EAAQ+yD,EAAKH,YAAaG,EAAKF,kBAG7DG,GAAW,CACbF,OAAQA,GACRlN,UAAW4M,IAGTS,GAAYvB,GACZwB,GAAWF,GAASF,OACpBK,GAAcH,GAASpN,UACvBwN,GAAgBrC,GAChBsC,GAAiBvC,GACjBwC,GAAcrC,GACdsC,GAAS,CACXN,UAAWA,GACXH,OAAQI,GACRtN,UAAWuN,GACXpC,YAAaqC,GACbtC,aAAcuC,GACdpC,UAAWqC,IAGT1C,GAAWf,KACX2D,GAAc,SAAU/B,EAAM9yJ,GAChC,OAAO40J,GAAON,UAAUrC,IAAU,SAAU6C,EAAW30J,GACrD,OAAO2yJ,EAAK3yJ,KACXH,IAED+0J,GAAW,SAAUtwI,EAAOy4D,GAC9B,OAAO03E,GAAOT,OAAOlC,GAAUxtI,EAAOy4D,IAEpC83E,GAAc,SAAUvwI,EAAOy4D,EAAQ2oE,GACzC,OAAO+O,GAAO3N,UAAUgL,GAAUxtI,EAAOy4D,EAAQ2oE,IAE/CoP,GAAgB,SAAU30J,EAAQywD,GACpC,OAAO6jG,GAAOxC,YAAYH,GAAU3xJ,EAAQywD,IAE1CmkG,GAAiB,SAAU50J,EAAQywD,GACrC,OAAO6jG,GAAOzC,aAAaF,GAAU3xJ,EAAQywD,IAE3CokG,GAAc,SAAUpkG,EAAOwhG,EAAOC,GACxC,OAAOoC,GAAOtC,UAAUL,GAAUlhG,EAAOwhG,GAAO,SAAUh0I,EAAG8gB,EAAG94B,GAC9D,OAAOisJ,EAAQnzH,EAAG94B,OAGlB6uJ,GAAY,CACdd,UAAWO,GACXV,OAAQY,GACR9N,UAAW+N,GACX5C,YAAa6C,GACb9C,aAAc+C,GACd5C,UAAW6C,IAGT/oJ,GAAS63I,EAAS,CACpB,QACA,QACA,UACC,IACCoR,GAAa,CAAEjpJ,OAAQA,IAEvBkpJ,GAAc,SAAUlvI,GAC1B,OAAOyhI,GAAWzhI,EAAW,UAE3BmvI,GAAW,SAAU9wI,EAAOy4D,EAAQ2oE,GACtC,IAAI2P,EAAY,SAAUC,GACxB,OAAO,SAAUt1J,GACf,YAAkBqZ,IAAXqsI,GAAwBA,EAAO1lJ,IAAYwY,GAAGxY,EAASs1J,KAGlE,OAAI98I,GAAG8L,EAAOy4D,GACL7iE,EAAOH,KAAKm7I,GAAWjpJ,OAAO,CACnCspJ,MAAOr7I,EAAOH,KAAK,CAACuK,IACpBA,MAAOA,EACPy4D,OAAQA,KAGHo4E,GAAY7wI,GAAO9K,MAAK,SAAUg8I,GACvC,OAAOL,GAAYp4E,GAAQvjE,MAAK,SAAUi8I,GACxC,GAAIj9I,GAAGg9I,EAAYC,GACjB,OAAOv7I,EAAOH,KAAKm7I,GAAWjpJ,OAAO,CACnCspJ,MAAO1E,GAAenB,WAAW8F,EAAYlxI,EAAOy4D,GACpDz4D,MAAOA,EACPy4D,OAAQA,KAEL,GAAIwoE,GAAWiQ,EAAYC,GAAc,CAC9C,IAAIC,EAAgB1O,GAAYjqE,EAAQ,QAASs4E,EAAUG,IACvDvG,EAAayG,EAAcv2J,OAAS,EAAIu2J,EAAcA,EAAcv2J,OAAS,GAAK49E,EACtF,OAAO7iE,EAAOH,KAAKm7I,GAAWjpJ,OAAO,CACnCspJ,MAAO1E,GAAeP,iBAAiBkF,EAAYlxI,EAAOkxI,EAAYz4E,EAAQ04E,GAC9EnxI,MAAOA,EACPy4D,OAAQkyE,KAEL,GAAI1J,GAAWkQ,EAAaD,GAAa,CAC1CE,EAAgB1O,GAAY1iI,EAAO,QAAS+wI,EAAUI,IAA1D,IACIzG,EAAY0G,EAAcv2J,OAAS,EAAIu2J,EAAcA,EAAcv2J,OAAS,GAAKmlB,EACrF,OAAOpK,EAAOH,KAAKm7I,GAAWjpJ,OAAO,CACnCspJ,MAAO1E,GAAeP,iBAAiBmF,EAAanxI,EAAOkxI,EAAYz4E,EAAQ04E,GAC/EnxI,MAAOA,EACPy4D,OAAQiyE,KAGV,OAAOiG,GAAUnO,UAAUxiI,EAAOy4D,GAAQmkB,SAAS1nF,MAAK,SAAUm8I,GAChE,OAAO9N,GAAU8N,EAAK,QAASjQ,GAAQlsI,MAAK,SAAUo8I,GACpD,IAAIC,EAAsB7O,GAAYjqE,EAAQ,QAASs4E,EAAUO,IAC7D3G,EAAa4G,EAAoB12J,OAAS,EAAI02J,EAAoBA,EAAoB12J,OAAS,GAAK49E,EACpG+4E,EAAqB9O,GAAY1iI,EAAO,QAAS+wI,EAAUO,IAC3D5G,EAAY8G,EAAmB32J,OAAS,EAAI22J,EAAmBA,EAAmB32J,OAAS,GAAKmlB,EACpG,OAAOpK,EAAOH,KAAKm7I,GAAWjpJ,OAAO,CACnCspJ,MAAO1E,GAAeP,iBAAiBsF,EAAUtxI,EAAOkxI,EAAYz4E,EAAQ04E,GAC5EnxI,MAAO0qI,EACPjyE,OAAQkyE,kBASpB8G,GAAW,SAAU9vI,EAAW1gB,GAClC,IAAIywJ,EAAO9O,GAAcjhI,EAAW1gB,GACpC,OAAOywJ,EAAK72J,OAAS,EAAI+a,EAAOH,KAAKi8I,GAAQ97I,EAAO5B,QAElD29I,GAAU,SAAUV,EAAOW,GAC7B,OAAO7qJ,EAAKkqJ,GAAO,SAAUl7C,GAC3B,OAAOtgH,GAAGsgH,EAAK67C,OAGfC,GAAW,SAAUlwI,EAAWmwI,EAAuBF,GACzD,OAAOtO,GAAa3hI,EAAWmwI,GAAuB58I,MAAK,SAAUw/E,GACnE,OAAO4uD,GAAa3hI,EAAWiwI,GAAsB18I,MAAK,SAAUxH,GAClE,OAAOijJ,GAAUd,UAAUgB,GAAa,CACtCn8D,EACAhnF,IACChU,KAAI,SAAUq4J,GACf,MAAO,CACLr9D,MAAOnyF,EAASmyF,GAChBhnF,KAAMnL,EAASmL,GACf02I,MAAO7hJ,EAASwvJ,cAMtBC,GAAW,SAAUv5E,EAAQq5E,GAC/B,OAAO1O,GAAW3qE,EAAQ,SAASvjE,MAAK,SAAUkvI,GAChD,OAAOd,GAAac,EAAO0N,GAAuB58I,MAAK,SAAU8K,GAC/D,OAAO8wI,GAAS9wI,EAAOy4D,GAAQvjE,MAAK,SAAU+8I,GAC5C,OAAOA,EAAWhB,QAAQv3J,KAAI,SAAUu3J,GACtC,MAAO,CACLA,MAAO1uJ,EAAS0uJ,GAChBjxI,MAAOzd,EAAS0vJ,EAAWjyI,SAC3By4D,OAAQl2E,EAAS0vJ,EAAWx5E,wBAOpCy5E,GAAiB,SAAUjB,EAAOrF,EAAUC,EAAaiG,EAAuBF,GAClF,OAAOD,GAAQV,EAAOW,GAAsB18I,MAAK,SAAUxH,GACzD,OAAO6+I,GAAerB,OAAOx9I,EAAMk+I,EAAUC,GAAa32I,MAAK,SAAUujE,GACvE,OAAOu5E,GAASv5E,EAAQq5E,UAI1BK,GAAgB,CAClBrB,SAAUA,GACVW,SAAUA,GACVS,eAAgBA,GAChBL,SAAUA,IAGRO,GAAa,SAAUzwI,EAAW1gB,GACpC,OAAOkxJ,GAAcV,SAAS9vI,EAAW1gB,IAEvCoxJ,GAAc,SAAU1wI,EAAWmwI,EAAuBF,GAC5D,OAAOO,GAAcN,SAASlwI,EAAWmwI,EAAuBF,GAAsB18I,MAAK,SAAUo9I,GACnG,IAAIlR,EAAS,SAAU0B,GACrB,OAAO5uI,GAAGyN,EAAWmhI,IAEnByP,EAAgBnP,GAAWkP,EAAM59D,QAAS,0BAA2B0sD,GACrEoR,EAAepP,GAAWkP,EAAM5kJ,OAAQ,0BAA2B0zI,GACvE,OAAOmR,EAAcr9I,MAAK,SAAUu9I,GAClC,OAAOD,EAAat9I,MAAK,SAAUw9I,GACjC,OAAOx+I,GAAGu+I,EAAIC,GAAMnG,GAAevB,OAAOsH,EAAMlO,QAASkO,EAAM59D,QAAS49D,EAAM5kJ,QAAUkI,EAAO5B,iBAKnG2+I,GAAiB,CACnBlB,SAAUW,GACVC,YAAaA,IAGX7iH,GAAW,oBACX+3G,GAAmB,MAAQ/3G,GAAW,QAAUA,GAAW,IAC3DojH,GAAoB,IAAMpjH,GAAW,IACrCqjH,GAAgB,0BAChBf,GAAwB,MAAQe,GAAgB,QAAUA,GAAgB,IAC1EC,GAAe,yBACflB,GAAuB,MAAQkB,GAAe,QAAUA,GAAe,IACvEC,GAAW,CACbvjH,SAAUjtC,EAASitC,IACnB+3G,iBAAkBhlJ,EAASglJ,IAC3BqL,kBAAmBrwJ,EAASqwJ,IAC5BC,cAAetwJ,EAASswJ,IACxBf,sBAAuBvvJ,EAASuvJ,IAChCgB,aAAcvwJ,EAASuwJ,IACvBlB,qBAAsBrvJ,EAASqvJ,KAG7BoB,GAAa,SAAUC,GACzB,IAAK7vI,EAAQ6vI,GACX,MAAM,IAAIr+I,MAAM,0BAElB,GAAqB,IAAjBq+I,EAAMp4J,OACR,MAAM,IAAI+Z,MAAM,mCAElB,IAAIs+I,EAAe,GACfC,EAAM,GAyDV,OAxDA7sJ,EAAK2sJ,GAAO,SAAUG,EAAOxlJ,GAC3B,IAAIqK,EAASX,EAAK87I,GAClB,GAAsB,IAAlBn7I,EAAOpd,OACT,MAAM,IAAI+Z,MAAM,kCAElB,IAAItf,EAAM2iB,EAAO,GACb9gB,EAAQi8J,EAAM99J,GAClB,QAAiByf,IAAbo+I,EAAI79J,GACN,MAAM,IAAIsf,MAAM,0BAA4Btf,GACvC,GAAY,SAARA,EACT,MAAM,IAAIsf,MAAM,yCACX,IAAKwO,EAAQjsB,GAClB,MAAM,IAAIyd,MAAM,mCAElBs+I,EAAa30J,KAAKjJ,GAClB69J,EAAI79J,GAAO,WACT,IAAI+9J,EAAYz4J,UAAUC,OAC1B,GAAIw4J,IAAcl8J,EAAM0D,OACtB,MAAM,IAAI+Z,MAAM,qCAAuCtf,EAAM,cAAgB6B,EAAM0D,OAAS,KAAO1D,EAAQ,UAAYk8J,GAGzH,IADA,IAAI/0J,EAAO,IAAIG,MAAM40J,GACZl4J,EAAI,EAAGA,EAAImD,EAAKzD,OAAQM,IAC/BmD,EAAKnD,GAAKP,UAAUO,GAEtB,IAAI5E,EAAQ,SAAU+8J,GACpB,IAAIC,EAAaj8I,EAAKg8I,GACtB,GAAIJ,EAAar4J,SAAW04J,EAAW14J,OACrC,MAAM,IAAI+Z,MAAM,iDAAmDs+I,EAAan0J,KAAK,KAAO,aAAew0J,EAAWx0J,KAAK,MAE7H,IAAI2gJ,EAAUtqI,EAAO89I,GAAc,SAAUM,GAC3C,OAAO/nJ,EAAS8nJ,EAAYC,MAE9B,IAAK9T,EACH,MAAM,IAAI9qI,MAAM,gEAAkE2+I,EAAWx0J,KAAK,MAAQ,eAAiBm0J,EAAan0J,KAAK,OAE/I,OAAOu0J,EAASh+J,GAAKqJ,MAAM,KAAML,IAEnC,MAAO,CACLgW,KAAM,WACJ,GAAI1Z,UAAUC,SAAWo4J,EAAMp4J,OAC7B,MAAM,IAAI+Z,MAAM,+CAAiDq+I,EAAMp4J,OAAS,SAAWD,UAAUC,QAEvG,IAAI4N,EAAS7N,UAAUgT,GACvB,OAAOnF,EAAO9J,MAAM,KAAML,IAE5B/H,MAAOA,EACPskE,IAAK,SAAUz1D,GACbpO,EAAWotD,QAAQyW,IAAIz1D,EAAO,CAC5B8tJ,aAAcA,EACdn9I,YAAazgB,EACbm+J,OAAQn1J,UAMX60J,GAELO,GAAM,CAAEnO,SAAUyN,IAElBW,GAASD,GAAInO,SAAS,CACxB,CAAEvxI,KAAM,IACR,CAAE4/I,SAAU,CAAC,aACb,CAAEC,OAAQ,CAAC,gBAETC,GAAO,SAAUprF,EAASqrF,EAAQC,EAAYC,GAChD,OAAOvrF,EAAQp0D,KAAKy/I,EAAQC,EAAYC,IAEtCC,GAAiB,CACnBJ,KAAMA,GACN9/I,KAAM2/I,GAAO3/I,KACb4/I,SAAUD,GAAOC,SACjBC,OAAQF,GAAOE,QAGbxwJ,GAAY,SAAUwgJ,EAAMsQ,GAC9B,OAAOD,GAAeJ,KAAKK,EAAW/8J,MAAOmL,EAAS,IAAKmvB,EAAUnvB,EAAS,CAACshJ,MAE7EuQ,GAAa,SAAUvQ,EAAMsQ,GAC/B,IAAIE,EAAU,SAAU3oG,GACtB,OAAO/rC,GAAI+rC,EAAM,YAAcl1D,SAASY,GAAIs0D,EAAM,WAAY,IAAM,GAAK/rC,GAAI+rC,EAAM,YAAcl1D,SAASY,GAAIs0D,EAAM,WAAY,IAAM,GAEpIhC,EAAarmD,GAAUwgJ,EAAMsQ,GACjC,OAAOzqG,EAAW7uD,OAAS,GAAKua,EAAOs0C,EAAY2qG,GAAWz+I,EAAOH,KAAKi0C,GAAc9zC,EAAO5B,QAE7FsgJ,GAAW,SAAUlQ,EAAO+P,GAC9B,OAAOD,GAAeJ,KAAKK,EAAW/8J,MAAOwe,EAAO5B,MAAM,SAAU8vI,EAAOyQ,GACzE,OAAqB,IAAjBzQ,EAAMjpJ,OACD+a,EAAO5B,OAET2+I,GAAeN,YAAYjO,EAAO2O,GAASjB,wBAAyBiB,GAASnB,wBAAwB18I,MAAK,SAAUqtI,GACzH,OAAOuB,EAAMjpJ,OAAS,EAAI+a,EAAOH,KAAK,CACpC8sI,OAAQhgJ,EAASggJ,GACjBuB,MAAOvhJ,EAASuhJ,KACbluI,EAAO5B,YAEb4B,EAAO5B,OAERwgJ,GAAiB,CACnBF,SAAUA,GACVF,WAAYA,GACZ/wJ,UAAWA,IAGToxJ,GAAS,SAAU5Q,GACrB,MAAO,CACLnoJ,QAAS6G,EAASshJ,GAClByQ,SAAU1+I,EAAO5B,KACjBogJ,WAAYx+I,EAAO5B,KACnB3Q,UAAWd,EAAS,CAACshJ,MAGrB6Q,GAAU,SAAUP,EAAY/P,EAAOP,GACzC,MAAO,CACLnoJ,QAAS6G,EAASshJ,GAClByQ,SAAU/xJ,EAASiyJ,GAAeF,SAASlQ,EAAO+P,IAClDC,WAAY7xJ,EAASiyJ,GAAeJ,WAAWvQ,EAAMsQ,IACrD9wJ,UAAWd,EAASiyJ,GAAenxJ,UAAUwgJ,EAAMsQ,MAGnDQ,GAAY,SAAUj5J,GACxB,OAAO+4J,GAAO/4J,IAEZk5J,GAAU1vG,EAAU,UAAW,YAAa,cAC5C2vG,GAAY,SAAUV,EAAY/P,EAAOP,EAAM9oF,EAAW+5F,GAC5D,MAAO,CACLp5J,QAAS6G,EAASshJ,GAClByQ,SAAU1+I,EAAO5B,KACjBogJ,WAAYx+I,EAAO5B,KACnB3Q,UAAWd,EAASiyJ,GAAenxJ,UAAUwgJ,EAAMsQ,IACnDp5F,UAAWx4D,EAASw4D,GACpB+5F,WAAYvyJ,EAASuyJ,KAGrBC,GAAe,CACjBN,OAAQA,GACRC,QAASA,GACT3Q,QAAS4Q,GACTvyF,MAAOwyF,GACPC,UAAWA,IAGTG,GAAkB,SAAUlR,GAC9B,OAAOW,GAAYL,MAAMN,EAAM,IAAIpqJ,IAAI4zD,IAAM5zD,KAAI,SAAU+uJ,GACzD,MAAO,CAAChB,GAAaH,QAAQmB,EAASsK,GAASH,0BAG/CqC,GAAoB,SAAUn9J,EAAQyD,GACxC,OAAO7B,EAAI6B,GAAU,SAAUmE,GAC7B,OAAO5H,EAAOuL,UAAUu7C,WAAWphC,UAAU9d,EAAIgE,MAAO,OACvD3E,KAAK,KAENm2J,GAAiB,SAAU35J,GAC7B,OAAO7B,EAAI6B,GAAU,SAAUG,GAC7B,OAAOA,EAAQgI,MAAM46D,aACpBv/D,KAAK,KAENo2J,GAAiB,SAAUr9J,EAAQq8J,EAAYiB,EAASC,GAC1Dv9J,EAAOsO,GAAG,oBAAoB,SAAUR,GACtC,IAAI0vJ,EAAmB,SAAUxR,GAC/Bl+I,EAAE44B,iBACFw2H,GAAgBlR,GAAOx9I,MAAK,SAAU/K,GACpCqK,EAAEpM,QAAuB,SAAboM,EAAEmG,OAAoBmpJ,GAAe35J,GAAY05J,GAAkBn9J,EAAQyD,QAGvE,IAAhBqK,EAAEvC,WACJ6wJ,GAAeJ,KAAKK,EAAW/8J,MAAOic,EAAMiiJ,EAAkBjiJ,MAGlEvb,EAAOsO,GAAG,oBAAoB,SAAUR,GACtC,IAAoB,IAAhBA,EAAEvC,YAAkC,IAAZuC,EAAEw8D,MAAgB,CAC5C,IAAImzF,EAAU3/I,EAAO5X,KAAKlG,EAAO4L,IAAIoL,UAAUhX,EAAOuL,UAAU4I,WAAY,UAC5EspJ,EAAQjvJ,MAAK,SAAUkvJ,GACrB,IAAI3R,EAAOl/F,GAAQN,QAAQmxG,GAC3B/Q,GAAYL,MAAMP,GAAMv9I,MAAK,SAAU89I,GACrC,IAAI7oJ,EAAW8K,EAAOojJ,GAAW7jJ,EAAEpM,UAAU,SAAUA,GACrD,MAAyB,SAAlBzD,GAAKyD,MAEd,GAAwB,IAApB+B,EAASV,QAAsC,UAAtB9E,GAAKwF,EAAS,IAAiB,CAC1DqK,EAAE44B,iBACF,IAAIta,EAAMygC,GAAQN,QAAQvsD,EAAOmP,UAC7B6tJ,EAAatL,GAAUpnF,MAAMl+C,GAC7BuxI,EAAUV,GAAa3yF,MAAMyhF,EAAMtoJ,EAAS,GAAIu5J,GACpDM,EAAQM,WAAWtR,EAAOqR,GAASnvJ,MAAK,SAAUkb,GAChD1pB,EAAOuL,UAAUwf,OAAOrB,GACxB1pB,EAAOwU,QACP+oJ,EAAc1sF,MAAMy7E,kBAQ9B/2E,GAAY,CAAE8nF,eAAgBA,IAElC,SAASQ,GAAW5/J,EAAM6/J,GACxB,IAAIv+J,EAAM,SAAUqE,EAASlI,GAC3B,IAAKmuD,EAASnuD,KAAOA,EAAE+C,MAAM,YAC3B,MAAM,IAAIqe,MAAM7e,EAAO,wDAA0DvC,GAEnF,IAAIkQ,EAAMhI,EAAQgI,MACdqpD,GAAYrpD,KACdA,EAAIpC,MAAMvL,GAAQvC,EAAI,OAGtB4D,EAAM,SAAUsE,GAClB,IAAI8a,EAAIo/I,EAAUl6J,GAClB,GAAI8a,GAAK,GAAW,OAANA,EAAY,CACxB,IAAI3V,EAAMwf,GAAM3kB,EAAS3F,GACzB,OAAO07B,WAAW5wB,IAAQ,EAE5B,OAAO2V,GAELq/I,EAAWz+J,EACX0+J,EAAY,SAAUp6J,EAASyiG,GACjC,OAAOn8C,EAAMm8C,GAAY,SAAUl8C,EAAK9gD,GACtC,IAAI4rB,EAAM1M,GAAM3kB,EAASyF,GACrBhK,OAAgB4d,IAARgY,EAAoB,EAAIv2B,SAASu2B,EAAK,IAClD,OAAOguB,MAAM5jD,GAAS8qD,EAAMA,EAAM9qD,IACjC,IAEDutB,EAAM,SAAUhpB,EAASvE,EAAOgnG,GAClC,IAAI43D,EAAuBD,EAAUp6J,EAASyiG,GAC1C63D,EAAc7+J,EAAQ4+J,EAAuB5+J,EAAQ4+J,EAAuB,EAChF,OAAOC,GAET,MAAO,CACL3+J,IAAKA,EACLD,IAAKA,EACLy+J,SAAUA,EACVC,UAAWA,EACXpxI,IAAKA,GAIT,IAAIuxI,GAAQN,GAAU,UAAU,SAAUj6J,GACxC,IAAIgI,EAAMhI,EAAQgI,MAClB,OAAOw8I,GAAOxkJ,GAAWgI,EAAIsyG,wBAAwB7rF,OAASzmB,EAAI69B,gBAEhE20H,GAAQ,SAAUx6J,GACpB,OAAOu6J,GAAM7+J,IAAIsE,IAEfm6J,GAAW,SAAUn6J,GACvB,OAAOu6J,GAAMJ,SAASn6J,IAGpBy6J,GAAQR,GAAU,SAAS,SAAUj6J,GACvC,OAAOA,EAAQgI,MAAM49B,eAEnB80H,GAAQ,SAAU16J,GACpB,OAAOy6J,GAAM/+J,IAAIsE,IAEf26J,GAAa,SAAU36J,GACzB,OAAOy6J,GAAMN,SAASn6J,IAGpB46J,GAAW3rG,GAAoBvE,SAC/BmwG,GAAiB,WACnB,OAAOD,GAASxtG,QAAQzB,QAAUivG,GAASxtG,QAAQ3B,UAEjDw4C,GAAW,SAAU62D,EAAI3oF,GAC3B,IAAI3zD,EAAMuX,WAAW+kI,GACrB,OAAOz7G,MAAM7gC,GAAO2zD,EAAW3zD,GAE7Bu8I,GAAU,SAAU/2J,EAAK3J,EAAM83E,GACjC,OAAO8xB,GAASt/E,GAAM3gB,EAAK3J,GAAO83E,IAEhC6oF,GAAsB,SAAU7S,GAClC,IAAI8S,EAAaF,GAAQ5S,EAAM,cAAe,GAC1C+S,EAAgBH,GAAQ5S,EAAM,iBAAkB,GAChDgT,EAAYJ,GAAQ5S,EAAM,mBAAoB,GAC9CiT,EAAeL,GAAQ5S,EAAM,sBAAuB,GACpD15H,EAAS05H,EAAKngJ,MAAMsyG,wBAAwB7rF,OAC5C4sI,EAAY12I,GAAMwjI,EAAM,cACxBmT,EAAUH,EAAYC,EAC1B,MAAqB,eAAdC,EAA6B5sI,EAASA,EAASwsI,EAAaC,EAAgBI,GAEjFnsI,GAAW,SAAUg5H,GACvB,OAAO4S,GAAQ5S,EAAM,QAASuS,GAAMvS,KAElC74H,GAAY,SAAU64H,GACxB,OAAO0S,KAAmBG,GAAoB7S,GAAQ4S,GAAQ5S,EAAM,SAAUqS,GAAMrS,KAElFoT,GAAc,CAChBpsI,SAAUA,GACVG,UAAWA,IAGTksI,GAAmB,uBACnBC,GAA2B,iBAC3BC,GAAsB,qBACtBC,GAAgB,SAAUxT,EAAMyT,GAClCl7B,GAAMynB,EAAM,QAASyT,EAAS,OAE5BC,GAAqB,SAAU1T,EAAMyT,GACvCl7B,GAAMynB,EAAM,QAASyT,EAAS,MAE5BE,GAAY,SAAU3T,EAAMyT,GAC9Bl7B,GAAMynB,EAAM,SAAUyT,EAAS,OAE7BG,GAAiB,SAAU5T,GAC7B,OAAOrD,GAAOqD,EAAM,UAAUpvI,YAAW,WACvC,OAAOwiJ,GAAYjsI,UAAU64H,GAAQ,SAGrCzlF,GAAU,SAAUylF,EAAMzuJ,EAAQmxF,EAAQqY,GAC5C,IAAIhzD,EAAU64G,GAAYL,MAAMP,GAAMnqJ,KAAI,SAAU0qJ,GAClD,IAAItnG,EAAQypC,EAAO69D,GACnB,OAAOhsJ,KAAKi6B,MAAMj9B,EAAS,IAAM0nD,MAChCtoC,MAAMpf,GAET,OADAwpG,EAAOilD,EAAMj4G,GACNA,GAEL8rH,GAAqB,SAAUvgK,EAAO0sJ,EAAMt9D,EAAQqY,GACtD,IAAIxpG,EAASoB,SAASW,EAAO,IAC7B,OAAO8oJ,GAAS9oJ,EAAO,MAAuB,UAAfpB,GAAK8tJ,GAAoBzlF,GAAQylF,EAAMzuJ,EAAQmxF,EAAQqY,GAAUxpG,GAE9FuiK,GAAiB,SAAU9T,GAC7B,IAAI1sJ,EAAQsgK,GAAe5T,GAC3B,OAAK1sJ,EAGEugK,GAAmBvgK,EAAO0sJ,EAAMqS,GAAOsB,IAFrCtB,GAAMrS,IAIb+T,GAAQ,SAAU/T,EAAMtqJ,EAAMsa,GAChC,IAAIvc,EAAIuc,EAAEgwI,GACN7qE,EAAO6+E,GAAQhU,EAAMtqJ,GACzB,OAAOjC,EAAI0hF,GAET6+E,GAAU,SAAUhU,EAAMtqJ,GAC5B,OAAOomB,GAAIkkI,EAAMtqJ,GAAQ/C,SAASY,GAAIysJ,EAAMtqJ,GAAO,IAAM,GAEvDu+J,GAAc,SAAUp8J,GAC1B,IAAIq8J,EAAWvX,GAAO9kJ,EAAS,SAC/B,OAAOq8J,EAASzjJ,MAAK,WACnB,OAAOsB,EAAO5X,KAAK5G,GAAIsE,EAAS,aAC/B,SAAUwuB,GACX,OAAOtU,EAAOH,KAAKyU,OAGnB8tI,GAA2B,SAAUC,EAAWC,GAClD,OAAOD,EAAYC,EAAUC,aAAe,KAE1CC,GAAuB,SAAU18J,EAASwuB,EAAOguI,GACnD,IAAIG,EAAelB,GAAyBriK,KAAKo1B,GACjD,GAAqB,OAAjBmuI,EACF,OAAO5mI,WAAW4mI,EAAa,IAE/B,IAAIC,EAAWlC,GAAM16J,GACrB,OAAOs8J,GAAyBM,EAAUJ,IAG1CK,GAAqB,SAAU1U,EAAMqU,GACvC,IAAIhuI,EAAQ4tI,GAAYjU,GACxB,OAAO35H,EAAM5V,MAAK,WAChB,IAAIgkJ,EAAWlC,GAAMvS,GACrB,OAAOmU,GAAyBM,EAAUJ,MACzC,SAAU1/J,GACX,OAAO4/J,GAAqBvU,EAAMrrJ,EAAG0/J,OAGrCM,GAAsB,SAAUP,EAAWC,GAC7C,OAAOD,EAAY,IAAMC,EAAUC,cAEjCM,GAAkB,SAAU/8J,EAASwuB,EAAOguI,GAC9C,IAAIQ,EAAatB,GAAoBtiK,KAAKo1B,GAC1C,GAAmB,OAAfwuI,EACF,OAAOliK,SAASkiK,EAAW,GAAI,IAEjC,IAAIL,EAAelB,GAAyBriK,KAAKo1B,GACjD,GAAqB,OAAjBmuI,EAAuB,CACzB,IAAIM,EAAalnI,WAAW4mI,EAAa,IACzC,OAAOG,GAAoBG,EAAYT,GAEzC,OAAO9B,GAAM16J,IAEXk9J,GAAgB,SAAU/U,EAAMqU,GAClC,IAAIhuI,EAAQ4tI,GAAYjU,GACxB,OAAO35H,EAAM5V,MAAK,WAChB,OAAO8hJ,GAAMvS,MACZ,SAAUrrJ,GACX,OAAOigK,GAAgB5U,EAAMrrJ,EAAG0/J,OAGhCW,GAAc,SAAUhV,GAC1B,OAAO+T,GAAM/T,EAAM,UAAW8T,KAE5BmB,GAAkB,SAAUjV,GAC9B,IAAI35H,EAAQ4tI,GAAYjU,GACxB,OAAO35H,EAAMhV,MAAK,SAAU1c,GAC1B,IAAIjC,EAAQ2gK,GAAiBpiK,KAAK0D,GAClC,OAAc,OAAVjC,EACKqf,EAAOH,KAAK,CACjByU,MAAO3nB,EAASkvB,WAAWl7B,EAAM,KACjCwkI,KAAMx4H,EAAShM,EAAM,MAGhBqf,EAAO5B,WAIhB+kJ,GAAkB,SAAUlV,EAAMyT,EAAQv8B,GAC5CqB,GAAMynB,EAAM,QAASyT,EAASv8B,IAE5Bi+B,GAAQ,CACV7B,yBAA0B50J,EAAS40J,IACnCC,oBAAqB70J,EAAS60J,IAC9BC,cAAeA,GACfE,mBAAoBA,GACpBC,UAAWA,GACXoB,cAAeA,GACfL,mBAAoBA,GACpBO,gBAAiBA,GACjBC,gBAAiBA,GACjB/tI,UAAW6tI,GACXf,YAAaA,IAGXmB,GAAQ,SAAUC,EAAMnrB,GAC1B,IAAI7jH,EAAQ8uI,GAAMF,gBAAgBI,GAClChvI,EAAM5jB,MAAK,SAAU9N,GACnB,IAAIwrC,EAAWxrC,EAAE0xB,QAAU,EAC3B8uI,GAAMD,gBAAgBG,EAAMl1H,EAAUxrC,EAAEuiI,QACxCi+B,GAAMD,gBAAgBhrB,EAAO/pG,EAAUxrC,EAAEuiI,YAGzCo+B,GAAgB,CAAEF,MAAOA,IAEzBziJ,GAAI,SAAU4oB,EAAMC,GACtB,IAAIlqC,EAAY,SAAUwY,EAAG7Z,GAC3B,OAAO0iB,GAAE4oB,EAAOzxB,EAAG0xB,EAAMvrC,IAE3B,MAAO,CACLsrC,KAAM78B,EAAS68B,GACfC,IAAK98B,EAAS88B,GACdlqC,UAAWA,IAGXikK,GAAW5iJ,GAEX6iJ,GAAc,SAAU31J,GAC1B,IAAIqyG,EAAMryG,EAAIsyG,wBACd,OAAOojD,GAASrjD,EAAI32E,KAAM22E,EAAI12E,MAE5Bi6H,GAAqB,SAAU/mJ,EAAGtB,GACpC,YAAa8D,IAANxC,EAAkBA,OAAUwC,IAAN9D,EAAkBA,EAAI,GAEjDsoJ,GAAW,SAAU79J,GACvB,IAAIwoB,EAAMxoB,EAAQgI,MAAMs6B,cACpB74B,EAAO+e,EAAI/e,KACX68B,EAAM9d,EAAIi9H,YACVzgJ,EAAOwjB,EAAIq2D,gBACXlpC,EAAYioH,GAAmBt3H,EAAIw3H,YAAa94J,EAAK2wC,WACrDD,EAAakoH,GAAmBt3H,EAAIy3H,YAAa/4J,EAAK0wC,YACtDsoH,EAAYJ,GAAmB54J,EAAKg5J,UAAWv0J,EAAKu0J,WACpDC,EAAaL,GAAmB54J,EAAKi5J,WAAYx0J,EAAKw0J,YAC1D,OAAOC,GAASl+J,GAASvG,UAAUi8C,EAAauoH,EAAYtoH,EAAYqoH,IAEtEE,GAAW,SAAUl+J,GACvB,IAAIgI,EAAMhI,EAAQgI,MACdwgB,EAAMxgB,EAAIs6B,cACV74B,EAAO+e,EAAI/e,KACf,OAAIA,IAASzB,EACJ01J,GAASj0J,EAAK00J,WAAY10J,EAAKwxG,WAEnCupC,GAAOxkJ,GAGL29J,GAAY31J,GAFV01J,GAAS,EAAG,IAKnBU,GAAU50G,EAAU,MAAO,KAC3B60G,GAAU70G,EAAU,MAAO,KAC3B80G,GAAU,SAAUnW,GACtB,IAAItzG,EAAMgpH,GAAS1V,GACnB,OAAOtzG,EAAInR,OAASi3H,GAAWxS,IAE7BoW,GAAU,SAAUpW,GACtB,OAAO0V,GAAS1V,GAAMzkH,QAEpB86H,GAAc,SAAUj8J,EAAO4lJ,GACjC,OAAOkW,GAAQ97J,EAAOg8J,GAAQpW,KAE5BsW,GAAe,SAAUl8J,EAAO4lJ,GAClC,OAAOkW,GAAQ97J,EAAO+7J,GAAQnW,KAE5BuW,GAAS,SAAUvW,GACrB,OAAO0V,GAAS1V,GAAMxkH,OAEpBg7H,GAAa,SAAUp8J,EAAO4lJ,GAChC,OAAOiW,GAAQ77J,EAAOm8J,GAAOvW,KAE3ByW,GAAgB,SAAUr8J,EAAO4lJ,GACnC,OAAOiW,GAAQ77J,EAAOm8J,GAAOvW,GAAQgS,GAAShS,KAE5C0W,GAAgB,SAAUC,EAAcC,EAAcp2F,GACxD,GAAqB,IAAjBA,EAAMxpE,OACR,MAAO,GAET,IAAI6/J,EAAQhhK,EAAI2qE,EAAMnmE,MAAM,IAAI,SAAUy8J,EAAY18J,GACpD,OAAO08J,EAAWjhK,KAAI,SAAUmqJ,GAC9B,OAAO2W,EAAav8J,EAAO4lJ,SAG3B+W,EAAWv2F,EAAMA,EAAMxpE,OAAS,GAAGnB,KAAI,SAAUmqJ,GACnD,OAAO4W,EAAap2F,EAAMxpE,OAAS,EAAGgpJ,MAExC,OAAO6W,EAAM/mJ,OAAO,CAACinJ,KAEnBC,GAAS,SAAUrpE,GACrB,OAAQA,GAENrnE,GAAS,CACXjJ,MAAOwQ,EACPopI,UAAW,SAAUC,GACnB,OAAOR,GAAcF,GAAYC,GAAeS,IAElDt0G,KAAM2zG,IAEJY,GAAM,CACR95I,MAAOwQ,EACP+0B,KAAMwzG,GACNa,UAAW,SAAUC,GACnB,OAAOR,GAAcL,GAAaC,GAAcY,KAGhDp3H,GAAM,CACRziB,MAAO25I,GACPp0G,KAAMuzG,GACNc,UAAW,SAAUC,GACnB,OAAOR,GAAcJ,GAAcD,GAAaa,KAGhDE,GAAe,CACjB9wI,OAAQA,GACRwZ,IAAKA,GACLq3H,IAAKA,IAGHE,GAAkB,CACpBF,IAAKC,GAAaD,IAClBr3H,IAAKs3H,GAAat3H,KAGpB,SAASw3H,GAAgBC,GACvB,IAAIC,EAAO,SAAUjX,GACnB,OAAOgX,EAAYhX,GAAOkX,QAAUJ,GAAgBv3H,IAAMu3H,GAAgBF,KAExE95I,EAAQ,SAAUo2I,EAAQlT,GAC5B,OAAOiX,EAAKjX,GAAOljI,MAAMo2I,EAAQlT,IAE/B0W,EAAY,SAAUttJ,EAAM42I,GAC9B,OAAOiX,EAAKjX,GAAO0W,UAAUttJ,EAAM42I,IAEjC39F,EAAO,SAAUo9F,GACnB,OAAOwX,EAAKxX,GAAMp9F,KAAKo9F,IAEzB,MAAO,CACL3iI,MAAOA,EACPulC,KAAMA,EACNq0G,UAAWA,GAIf,IAAIS,GAAc,SAAUnX,GAC1B,IAAI9tJ,EAAQ2uJ,GAAYP,UAAUN,GAC9Be,EAAYa,GAAUT,SAASjvJ,GACnC,OAAO6uJ,EAAUrD,QAEf0Z,GAAgB,CAAED,YAAaA,IAE/BE,GAAW,WAUb,OATAA,GAAW5hK,OAAOw6F,QAAU,SAAkBxxF,GAC5C,IAAK,IAAIzP,EAAG+H,EAAI,EAAGjG,EAAI0F,UAAUC,OAAQM,EAAIjG,EAAGiG,IAE9C,IAAK,IAAIy/B,KADTxnC,EAAIwH,UAAUO,GACA/H,EACRyG,OAAOC,UAAUG,eAAeD,KAAK5G,EAAGwnC,KAC1C/3B,EAAE+3B,GAAKxnC,EAAEwnC,IAEf,OAAO/3B,GAEF44J,GAAS98J,MAAMlN,KAAMmJ,YAG1B8gK,GAAM,SAAUh2F,GAKlB,IAJA,IAAIlvD,EAAI,GACJjY,EAAO,SAAUoP,GACnB6I,EAAEjY,KAAKoP,IAEAxS,EAAI,EAAGA,EAAIuqE,EAAI7qE,OAAQM,IAC9BuqE,EAAIvqE,GAAGmL,KAAK/H,GAEd,OAAOiY,GAELmlJ,GAAU,SAAUj2F,EAAK7xD,GAC3B,IAAK,IAAI1Y,EAAI,EAAGA,EAAIuqE,EAAI7qE,OAAQM,IAAK,CACnC,IAAIqb,EAAI3C,EAAE6xD,EAAIvqE,GAAIA,GAClB,GAAIqb,EAAEjC,SACJ,OAAOiC,EAGX,OAAOZ,EAAO5B,QAGZ4nJ,GAAW,SAAUlgK,EAASyF,EAAUhK,EAAO0kK,GAC7C1kK,IAAU0kK,EACZpvJ,GAAO/Q,EAASyF,GAEhB9J,GAAIqE,EAASyF,EAAUhK,IAGvBswB,GAAS,SAAU28H,EAAOtC,GAC5B,IAAIga,EAAU,GACVC,EAAW,GACXC,EAAgB,SAAUC,EAAaC,GACzC,IAAIxnD,EAAU2uC,GAAQe,EAAO8X,GAAaznJ,YAAW,WACnD,IAAI0nJ,EAAKx3G,GAAQL,QAAQ43G,EAAahb,GAAMkD,GAAO1gJ,OAEnD,OADAkD,GAAOw9I,EAAO+X,GACPA,KAETx1J,GAAM+tG,GACN,IAAIjnG,EAAO/T,EAAIuiK,GAAa,SAAUlrF,GAChCA,EAAIqrF,SACNN,EAAQv9J,KAAKwyE,EAAIr1E,WAEnB,IAAI2W,EAAK0+D,EAAIr1E,UAUb,OATAiL,GAAM0L,GACN/L,EAAKyqE,EAAI+yE,SAAS,SAAUD,GACtBA,EAAKuY,SACPL,EAASx9J,KAAKslJ,EAAKnoJ,WAErBkgK,GAAS/X,EAAKnoJ,UAAW,UAAWmoJ,EAAKiB,UAAW,GACpD8W,GAAS/X,EAAKnoJ,UAAW,UAAWmoJ,EAAKgB,UAAW,GACpDj+I,GAAOyL,EAAIwxI,EAAKnoJ,cAEX2W,KAETq6C,GAASgoD,EAASjnG,IAEhB4uJ,EAAgB,SAAUH,GAC5B7Y,GAAQe,EAAO8X,GAAa51J,KAAKu7I,KAE/Bya,EAAwB,SAAUL,EAAaC,GAC7CD,EAAYphK,OAAS,EACvBmhK,EAAcC,EAAaC,GAE3BG,EAAcH,IAGdK,EAAc,GACdC,EAAc,GACdC,EAAc,GAiBlB,OAhBAn2J,EAAKw7I,GAAM,SAAU/wE,GACnB,OAAQA,EAAI2jC,WACZ,IAAK,QACH6nD,EAAYh+J,KAAKwyE,GACjB,MACF,IAAK,QACHyrF,EAAYj+J,KAAKwyE,GACjB,MACF,IAAK,QACH0rF,EAAYl+J,KAAKwyE,GACjB,UAGJurF,EAAsBC,EAAa,SACnCD,EAAsBE,EAAa,SACnCF,EAAsBG,EAAa,SAC5B,CACLX,QAASv5J,EAASu5J,GAClBC,SAAUx5J,EAASw5J,KAGnBW,GAAS,SAAU5a,GACrB,IAAIr0I,EAAO/T,EAAIooJ,GAAM,SAAU/wE,GAC7B,IAAI1+D,EAAKyjC,GAAQi7B,EAAIr1E,WAOrB,OANA4K,EAAKyqE,EAAI+yE,SAAS,SAAUD,GAC1B,IAAI8Y,EAAarvG,GAAKu2F,EAAKnoJ,WAC3BkgK,GAASe,EAAY,UAAW9Y,EAAKiB,UAAW,GAChD8W,GAASe,EAAY,UAAW9Y,EAAKgB,UAAW,GAChDj+I,GAAOyL,EAAIsqJ,MAENtqJ,KAET,OAAO5E,GAELmvJ,GAAS,CACXn1I,OAAQA,GACR/H,KAAMg9I,IAGJjkH,GAAO,SAAU/8C,EAAS+K,GAC5B,IAAItP,EAAQC,GAAIsE,EAAS+K,GACzB,YAAiBsO,IAAV5d,GAAiC,KAAVA,EAAe,GAAKA,EAAMrF,MAAM,MAE5D+M,GAAM,SAAUnD,EAAS+K,EAAMrM,GACjC,IAAI27C,EAAM0C,GAAK/8C,EAAS+K,GACpB4pC,EAAK0F,EAAIpiC,OAAO,CAACvZ,IAErB,OADA/C,GAAIqE,EAAS+K,EAAM4pC,EAAGtxC,KAAK,OACpB,GAEL89J,GAAW,SAAUnhK,EAAS+K,EAAMrM,GACtC,IAAIi2C,EAAKhqC,EAAOoyC,GAAK/8C,EAAS+K,IAAO,SAAUnP,GAC7C,OAAOA,IAAM8C,KAOf,OALIi2C,EAAGx1C,OAAS,EACdxD,GAAIqE,EAAS+K,EAAM4pC,EAAGtxC,KAAK,MAE3B0N,GAAO/Q,EAAS+K,IAEX,GAGLq2J,GAAW,SAAUphK,GACvB,YAAmCqZ,IAA5BrZ,EAAQgI,MAAMoyG,WAEnBinD,GAAQ,SAAUrhK,GACpB,OAAO+8C,GAAK/8C,EAAS,UAEnBw/I,GAAQ,SAAUx/I,EAASshK,GAC7B,OAAOn+J,GAAInD,EAAS,QAASshK,IAE3BC,GAAW,SAAUvhK,EAASshK,GAChC,OAAOH,GAASnhK,EAAS,QAASshK,IAGhCE,GAAQ,SAAUxhK,EAASshK,GACzBF,GAASphK,GACXA,EAAQgI,MAAMoyG,UAAUj3G,IAAIm+J,GAE5B9hB,GAAMx/I,EAASshK,IAGfG,GAAa,SAAUzhK,GACzB,IAAIo6G,EAAYgnD,GAASphK,GAAWA,EAAQgI,MAAMoyG,UAAYinD,GAAMrhK,GAC3C,IAArBo6G,EAAUj7G,QACZ4R,GAAO/Q,EAAS,UAGhB0hK,GAAW,SAAU1hK,EAASshK,GAChC,GAAIF,GAASphK,GAAU,CACrB,IAAIo6G,EAAYp6G,EAAQgI,MAAMoyG,UAC9BA,EAAUrpG,OAAOuwJ,QAEjBC,GAASvhK,EAASshK,GAEpBG,GAAWzhK,IAET2hK,GAAQ,SAAU3hK,EAASshK,GAC7B,OAAOF,GAASphK,IAAYA,EAAQgI,MAAMoyG,UAAUrqG,SAASuxJ,IAG3DM,GAAS,SAAUC,EAAa1pJ,GAElC,IADA,IAAI2C,EAAI,GACCrb,EAAI,EAAGA,EAAIoiK,EAAapiK,IAC/Bqb,EAAEjY,KAAKsV,EAAE1Y,IAEX,OAAOqb,GAEL43D,GAAQ,SAAUpuD,EAAOY,GAE3B,IADA,IAAIpK,EAAI,GACCrb,EAAI6kB,EAAO7kB,EAAIylB,EAAKzlB,IAC3Bqb,EAAEjY,KAAKpD,GAET,OAAOqb,GAELgnJ,GAAS,SAAUjnJ,EAAItY,GACzB,GAAIA,EAAQ,GAAKA,GAASsY,EAAG1b,OAAS,EACpC,OAAO+a,EAAO5B,OAEhB,IAAI+yC,EAAUxwC,EAAGtY,GAAOqW,MAAK,WAC3B,IAAI/W,EAAOqmC,EAAQrtB,EAAGrY,MAAM,EAAGD,IAC/B,OAAO09J,GAAQp+J,GAAM,SAAUgV,EAAGpX,GAChC,OAAOoX,EAAE7Y,KAAI,SAAU+jK,GACrB,MAAO,CACLtmK,MAAOsmK,EACPv8I,MAAO/lB,EAAI,YAIhB,SAAU2G,GACX,OAAO8T,EAAOH,KAAK,CACjBte,MAAO2K,EACPof,MAAO,OAGPuD,EAAOlO,EAAGtY,EAAQ,GAAGqW,MAAK,WAC5B,IAAI/W,EAAOgZ,EAAGrY,MAAMD,EAAQ,GAC5B,OAAO09J,GAAQp+J,GAAM,SAAUgV,EAAGpX,GAChC,OAAOoX,EAAE7Y,KAAI,SAAU+jK,GACrB,MAAO,CACLtmK,MAAOsmK,EACPv8I,MAAO/lB,EAAI,YAIhB,SAAUjG,GACX,OAAO0gB,EAAOH,KAAK,CACjBte,MAAOjC,EACPgsB,MAAO,OAGX,OAAO6lC,EAAQ7xC,MAAK,SAAUpT,GAC5B,OAAO2iB,EAAK/qB,KAAI,SAAUxE,GACxB,IAAIwoK,EAASxoK,EAAEgsB,MAAQpf,EAAEof,MACzB,OAAO9oB,KAAKyiH,IAAI3lH,EAAEiC,MAAQ2K,EAAE3K,OAASumK,SAKvCpjH,GAAU,SAAU6qG,GACtB,IAAIrD,EAAOqD,EAAUrD,OACjBt0I,EAAO4gE,GAAM,EAAG0zE,EAAKxnG,WACrBqjH,EAAUvvF,GAAM,EAAG0zE,EAAKr0I,QAC5B,OAAO/T,EAAI8T,GAAM,SAAUukB,GACzB,IAAI6rI,EAAW,WACb,OAAO1oJ,EAAKyoJ,GAAS,SAAUnnJ,GAC7B,OAAOwvI,GAAUd,MAAMC,EAAW3uI,EAAGub,GAAK1rB,QAAO,SAAUitD,GACzD,OAAOA,EAAO+zC,WAAat1E,KAC1Bzd,KAAK/R,EAAS,KAAK,SAAU+wD,GAC9B,MAAO,CAACA,UAIVuqG,EAAW,SAAUvqG,GACvB,OAA4B,IAArBA,EAAOwxF,WAEZgZ,EAAc,WAChB,OAAO9X,GAAUd,MAAMC,EAAW,EAAGpzH,IAEvC,OAAOgsI,GAAOH,EAAUC,EAAUC,OAGlCC,GAAS,SAAUH,EAAUC,EAAUC,GACzC,IAAIE,EAAUJ,IACVK,EAAgBl3J,EAAKi3J,EAASH,GAC9BK,EAAeD,EAAchpJ,SAAQ,WACvC,OAAOW,EAAO5X,KAAKggK,EAAQ,IAAI/oJ,QAAQ6oJ,MAEzC,OAAOI,EAAaxkK,KAAI,SAAU45D,GAChC,OAAOA,EAAO53D,cAGdyiK,GAAS,SAAUhZ,GACrB,IAAIrD,EAAOqD,EAAUrD,OACjB6b,EAAUvvF,GAAM,EAAG0zE,EAAKr0I,QACxBD,EAAO4gE,GAAM,EAAG0zE,EAAKxnG,WACzB,OAAO5gD,EAAIikK,GAAS,SAAU5sF,GAC5B,IAAI6sF,EAAW,WACb,OAAO1oJ,EAAK1H,GAAM,SAAU1L,GAC1B,OAAOkkJ,GAAUd,MAAMC,EAAWp0E,EAAKjvE,GAAGuE,QAAO,SAAUitD,GACzD,OAAOA,EAAOyd,QAAUA,KACvBz8D,KAAK/R,EAAS,KAAK,SAAU+wD,GAC9B,MAAO,CAACA,UAIVuqG,EAAW,SAAUvqG,GACvB,OAA4B,IAArBA,EAAOuxF,WAEZiZ,EAAc,WAChB,OAAO9X,GAAUd,MAAMC,EAAWp0E,EAAK,IAEzC,OAAOgtF,GAAOH,EAAUC,EAAUC,OAGlCM,GAAS,CACX9jH,QAASA,GACT7sC,KAAM0wJ,IAGJt9J,GAAM,SAAUP,GAClB,IAAI+9J,EAAgB/9J,EAAU3G,QAAQ,MAAO,KACzChC,EAAU,SAAUmG,GACtB,OAAOugK,EAAgB,IAAMvgK,GAE/B,MAAO,CAAEnG,QAASA,IAGhB8mB,GAAS5d,GAAI,iBACby9J,GAAS,CAAE3mK,QAAS8mB,GAAO9mB,SAE3Bo6B,GAAM,SAAUs1E,EAAQ15F,EAAG7Z,EAAG0E,EAAGhF,GACnC,IAAI2qC,EAAUwmB,GAAQL,QAAQ,OAY9B,OAXA+7F,GAASliH,EAAS,CAChByW,SAAU,WACVxV,KAAMzxB,EAAInV,EAAI,EAAI,KAClB6mC,IAAKvrC,EAAI,KACTq2B,OAAQ32B,EAAI,KACZ02B,MAAO1xB,EAAI,OAEbs0D,GAAO3uB,EAAS,CACd,cAAekpE,EACf,KAAQ,iBAEHlpE,GAELogI,GAAQ,SAAU/nJ,EAAG7I,EAAG7Z,EAAG0E,EAAGhF,GAChC,IAAI2qC,EAAUwmB,GAAQL,QAAQ,OAY9B,OAXA+7F,GAASliH,EAAS,CAChByW,SAAU,WACVxV,KAAMzxB,EAAI,KACV0xB,IAAKvrC,EAAIN,EAAI,EAAI,KACjB22B,OAAQ32B,EAAI,KACZ02B,MAAO1xB,EAAI,OAEbs0D,GAAO3uB,EAAS,CACd,WAAY3nB,EACZ,KAAQ,iBAEH2nB,GAELqgI,GAAM,CACRzsI,IAAKA,GACLg/C,IAAKwtF,IAGHE,GAAYH,GAAO3mK,QAAQ,eAC3B+mK,GAAeJ,GAAO3mK,QAAQ,gBAC9BgnK,GAAeL,GAAO3mK,QAAQ,gBAC9BinK,GAAgB,EAChBj/H,GAAU,SAAUk/H,GACtB,IAAIC,EAAWlc,GAAcic,EAAKhjK,SAAU,IAAM4iK,IAClDn4J,EAAKw4J,EAAUjd,KAEbkd,GAAU,SAAUF,EAAM/D,EAAWnzJ,GACvC,IAAIq3J,EAASH,EAAKG,SAClB14J,EAAKw0J,GAAW,SAAUmE,EAAU9jK,GAClC8jK,EAAS34J,MAAK,SAAU44J,GACtB,IAAIC,EAAMx3J,EAAOq3J,EAAQE,GACzBhC,GAAMiC,EAAKV,IACX73J,GAAOi4J,EAAKhjK,SAAUsjK,UAIxBC,GAAa,SAAUP,EAAMQ,EAAczqH,EAAU0qH,GACvDP,GAAQF,EAAMQ,GAAc,SAAUL,EAAQE,GAC5C,IAAIK,EAASf,GAAIzsI,IAAImtI,EAAGntI,MAAOmtI,EAAGvxJ,IAAMqxJ,EAAO5/H,OAAQwV,EAASvV,MAAQ2/H,EAAO3/H,MAAOu/H,GAAeU,GAErG,OADApC,GAAMqC,EAAQZ,IACPY,MAGPC,GAAa,SAAUX,EAAMY,EAAc7qH,EAAU8qH,GACvDX,GAAQF,EAAMY,GAAc,SAAUT,EAAQE,GAC5C,IAAIS,EAASnB,GAAIztF,IAAImuF,EAAGnuF,MAAOn8B,EAASxV,OAAS4/H,EAAO5/H,OAAQ8/H,EAAGprK,IAAMkrK,EAAO3/H,MAAOqgI,EAAYd,IAEnG,OADA1B,GAAMyC,EAAQjB,IACPiB,MAGPC,GAAc,SAAUf,EAAMza,EAAO32I,EAAMD,EAAMqyJ,EAAYC,GAC/D,IAAIlrH,EAAW2kH,GAASnV,GACpBqb,EAAehyJ,EAAK5S,OAAS,EAAIglK,EAAW/E,UAAUrtJ,EAAM22I,GAAS,GACzEob,GAAWX,EAAMY,EAAc7qH,EAAUyhH,GAAWjS,IACpD,IAAIib,EAAe7xJ,EAAK3S,OAAS,EAAIilK,EAAWhF,UAAUttJ,EAAM42I,GAAS,GACzEgb,GAAWP,EAAMQ,EAAczqH,EAAUihH,GAASzR,KAEhD2b,GAAU,SAAUlB,EAAMza,EAAOyb,EAAYC,GAC/CngI,GAAQk/H,GACR,IAAI76G,EAAOihG,GAAYP,UAAUN,GAC7Be,EAAYa,GAAUT,SAASvhG,GAC/Bv2C,EAAO2wJ,GAAO3wJ,KAAK03I,GACnB33I,EAAO4wJ,GAAO9jH,QAAQ6qG,GAC1Bya,GAAYf,EAAMza,EAAO32I,EAAMD,EAAMqyJ,EAAYC,IAE/CE,GAAS,SAAUnB,EAAMhrJ,GAC3B,IAAIosJ,EAAOrd,GAAcic,EAAKhjK,SAAU,IAAM4iK,IAC9Cn4J,EAAK25J,EAAMpsJ,IAETqrB,GAAO,SAAU2/H,GACnBmB,GAAOnB,GAAM,SAAUM,GACrB/iC,GAAM+iC,EAAK,UAAW,YAGtBlgI,GAAO,SAAU4/H,GACnBmB,GAAOnB,GAAM,SAAUM,GACrB/iC,GAAM+iC,EAAK,UAAW,aAGtBe,GAAW,SAAUxkK,GACvB,OAAO2hK,GAAM3hK,EAASgjK,KAEpByB,GAAW,SAAUzkK,GACvB,OAAO2hK,GAAM3hK,EAASijK,KAEpByB,GAAO,CACTL,QAASA,GACT7gI,KAAMA,GACND,KAAMA,GACNU,QAASA,GACTugI,SAAUA,GACVC,SAAUA,IAGRE,GAAU,SAAUC,EAASriK,EAAO4lJ,GACtC,IAAIC,EAAQwc,EAAQxc,QAChBtpJ,EAASspJ,EAAM5lJ,MAAM,EAAGD,GACxBI,EAAQylJ,EAAM5lJ,MAAMD,GACpB89J,EAAWvhK,EAAOmZ,OAAO,CAACkwI,IAAOlwI,OAAOtV,GAC5C,OAAOkiK,GAASD,EAASvE,IAEvByE,GAAa,SAAUF,EAASriK,EAAO4lJ,GACzC,IAAIC,EAAQwc,EAAQxc,QACpBA,EAAM7lJ,GAAS4lJ,GAEb0c,GAAW,SAAUD,EAASxc,GAChC,OAAOzB,GAASyB,EAAOwc,EAAQ5rD,YAE7B+rD,GAAW,SAAUH,EAASzsJ,GAChC,IAAIiwI,EAAQwc,EAAQxc,QAChBttI,EAAI9c,EAAIoqJ,EAAOjwI,GACnB,OAAOwuI,GAAS7rI,EAAG8pJ,EAAQ5rD,YAEzBgsD,GAAU,SAAUJ,EAASriK,GAC/B,OAAOqiK,EAAQxc,QAAQ7lJ,IAErB0iK,GAAiB,SAAUL,EAASriK,GACtC,OAAOyiK,GAAQJ,EAASriK,GAAOvC,WAE7BklK,GAAa,SAAUN,GACzB,OAAOA,EAAQxc,QAAQjpJ,QAErBgmK,GAAU,CACZR,QAASA,GACTE,SAAUA,GACVC,WAAYA,GACZE,QAASA,GACTC,eAAgBA,GAChBF,SAAUA,GACVG,WAAYA,IAGVE,GAAY,SAAUhf,EAAM7jJ,GAC9B,OAAOvE,EAAIooJ,GAAM,SAAU/wE,GACzB,OAAO8vF,GAAQH,QAAQ3vF,EAAK9yE,OAG5B8iK,GAAS,SAAUjf,EAAM7jJ,GAC3B,OAAO6jJ,EAAK7jJ,IAEV+iK,GAAW,SAAUzqJ,EAAI0qJ,GAC3B,GAAkB,IAAd1qJ,EAAG1b,OACL,OAAO,EAET,IAAI65F,EAAQn+E,EAAG,GACXtY,EAAQ66D,EAAUviD,GAAI,SAAU5I,GAClC,OAAQszJ,EAAKvsE,EAAMh5F,UAAWiS,EAAEjS,cAElC,OAAOuC,EAAMqW,MAAK,WAChB,OAAOiC,EAAG1b,UACT,SAAU4yJ,GACX,OAAOA,MAGPyT,GAAU,SAAUpf,EAAM/wE,EAAKs2B,EAAQ5nF,GACzC,IAAI0hJ,EAAYJ,GAAOjf,EAAM/wE,GAAK+yE,QAAQ5lJ,MAAMmpG,GAC5C+5D,EAAcJ,GAASG,EAAW1hJ,GAClC4hJ,EAAeP,GAAUhf,EAAMz6C,GAAQnpG,MAAM6yE,GAC7CuwF,EAAcN,GAASK,EAAc5hJ,GACzC,MAAO,CACLqlI,QAASviJ,EAAS6+J,GAClBvc,QAAStiJ,EAAS++J,KAGlBC,GAAY,CAAEL,QAASA,IAEvBM,GAAY,SAAU1f,EAAMriI,GAC9B,IAAIgiJ,EAAO/nK,EAAIooJ,GAAM,SAAU/wE,EAAK2wF,GAClC,OAAOhoK,EAAIq3E,EAAI+yE,SAAS,SAAU/xH,EAAK4vI,GACrC,OAAO,QAGPC,EAAa,SAAUF,EAAIC,EAAI9c,EAASC,GAC1C,IAAK,IAAItuI,EAAIkrJ,EAAIlrJ,EAAIkrJ,EAAK7c,EAASruI,IACjC,IAAK,IAAI1U,EAAI6/J,EAAI7/J,EAAI6/J,EAAK7c,EAAShjJ,IACjC2/J,EAAKjrJ,GAAG1U,IAAK,GAInB,OAAOpI,EAAIooJ,GAAM,SAAU/wE,EAAK2wF,GAC9B,IAAIhc,EAAUxwI,EAAK67D,EAAI+yE,SAAS,SAAUD,EAAM8d,GAC9C,IAAqB,IAAjBF,EAAKC,GAAIC,GAAe,CAC1B,IAAInsK,EAAS+rK,GAAUL,QAAQpf,EAAM4f,EAAIC,EAAIliJ,GAE7C,OADAmiJ,EAAWF,EAAIC,EAAInsK,EAAOqvJ,UAAWrvJ,EAAOsvJ,WACrC,CAAC9C,GAAU6B,EAAKnoJ,UAAWlG,EAAOqvJ,UAAWrvJ,EAAOsvJ,UAAWjB,EAAKuY,UAE3E,MAAO,MAGX,OAAO9Z,GAAWoD,EAAS30E,EAAI2jC,eAG/BmtD,GAAS,SAAU1c,EAAW2P,EAAYsH,GAE5C,IADA,IAAIta,EAAO,GACF3mJ,EAAI,EAAGA,EAAIgqJ,EAAUrD,OAAOr0I,OAAQtS,IAAK,CAEhD,IADA,IAAI2mK,EAAW,GACNpkK,EAAI,EAAGA,EAAIynJ,EAAUrD,OAAOxnG,UAAW58C,IAAK,CACnD,IAAIhC,EAAUsqJ,GAAUd,MAAMC,EAAWhqJ,EAAGuC,GAAGhE,KAAI,SAAUm4C,GAC3D,OAAOswG,GAAWtwG,EAAKn2C,UAAW0gK,MACjC3nJ,YAAW,WACZ,OAAO0tI,GAAW2S,EAAWvL,OAAO,MAEtCuY,EAASvjK,KAAK7C,GAEhB,IAAIq1E,EAAMsxE,GAASyf,EAAU3c,EAAUvmJ,MAAMzD,GAAGu5G,WAChDotC,EAAKvjJ,KAAKwyE,GAEZ,OAAO+wE,GAELigB,GAAc,CAChBP,UAAWA,GACXK,OAAQA,IAGNG,GAAgB,SAAU7c,EAAW2P,GACvC,OAAOiN,GAAYF,OAAO1c,EAAW2P,GAAY,IAE/CmN,GAAa,SAAUC,EAAUpN,GACnC,IAAIqN,EAAU,SAAUzc,GACtB,IAAI0c,EAAazG,GAAQjW,GAAS,SAAUpyF,GAC1C,OAAOz3D,GAAOy3D,EAAO53D,WAAWhC,KAAI,SAAUq3E,GAC5C,IAAIqrF,EAAQvgK,GAAOk1E,GAAK58D,SACxB,OAAOguI,GAAWpxE,EAAKqrF,SAG3B,OAAOgG,EAAW3tJ,YAAW,WAC3B,OAAO0tI,GAAW2S,EAAW/jF,OAAO,OAGxC,OAAOr3E,EAAIwoK,GAAU,SAAUxc,GAC7B,IAAI30E,EAAMoxF,EAAQzc,EAAQA,WAC1B,OAAOtD,GAAWrxE,EAAIr1E,UAAWgqJ,EAAQA,UAAWA,EAAQhxC,UAAW3jC,EAAIqrF,aAG3EiG,GAAe,SAAUvgB,EAAMgT,GACjC,IAAIoN,EAAWH,GAAYP,UAAU1f,EAAM5tI,IAC3C,OAAO+tJ,GAAWC,EAAUpN,IAE1BwN,GAAkB,SAAUnd,EAAWzpJ,GACzC,IAAIkD,EAAMsjD,EAAQxoD,EAAIyrJ,EAAUvmJ,OAAO,SAAU4X,GAC/C,OAAOA,EAAEstI,YAEX,OAAO/8I,EAAKnI,GAAK,SAAUgH,GACzB,OAAOsO,GAAGxY,EAASkK,EAAElK,eAGrBY,GAAM,SAAUimK,EAAWjb,EAASkb,EAAYC,EAAYC,GAC9D,OAAO,SAAU7D,EAAMza,EAAO37I,EAAQqsJ,EAAY7vJ,GAChD,IAAI3O,EAAQ2uJ,GAAYP,UAAUN,GAC9Be,EAAYa,GAAUT,SAASjvJ,GAC/B1B,EAAS0yJ,EAAQnC,EAAW18I,GAAQ/O,KAAI,SAAUwtD,GACpD,IAAIopE,EAAQ0xC,GAAc7c,EAAW2P,GACjCt/J,EAAS+sK,EAAUjyC,EAAOppE,EAAMhzC,GAAIwuJ,EAAY5N,IAChDhT,EAAOugB,GAAa7sK,EAAOssJ,OAAQgT,GACvC,MAAO,CACLhT,KAAMv/I,EAASu/I,GACf6gB,OAAQntK,EAAOmtK,WAGnB,OAAO/tK,EAAO0f,MAAK,WACjB,OAAOsB,EAAO5B,UACb,SAAUge,GACX,IAAI4wI,EAAchG,GAAOn1I,OAAO28H,EAAOpyH,EAAI8vH,QAI3C,OAHA0gB,EAAWpe,EAAOpyH,EAAI8vH,OAAQ78I,GAC9Bw9J,EAAWre,GACXgc,GAAKL,QAAQlB,EAAMza,EAAO6W,GAAa9wI,OAAQllB,GACxC2Q,EAAOH,KAAK,CACjBktJ,OAAQ3wI,EAAI2wI,OACZ7G,QAAS8G,EAAY9G,QACrBC,SAAU6G,EAAY7G,gBAK1B8G,GAAS,SAAU1d,EAAW18I,GAChC,OAAOg8I,GAAYZ,KAAKp7I,EAAO/M,WAAWwZ,MAAK,SAAU2uI,GACvD,OAAOye,GAAgBnd,EAAWtB,OAGlCif,GAAU,SAAU3d,EAAW18I,GACjC,OAAOg8I,GAAYZ,KAAKp7I,EAAO/M,WAAWwZ,MAAK,SAAU2uI,GACvD,OAAOye,GAAgBnd,EAAWtB,GAAMnqJ,KAAI,SAAUgsJ,GACpD,IAAIvuJ,EAAQskK,GAASA,GAAS,GAAI/V,GAAU,CAC1CoP,WAAYrsJ,EAAOqsJ,WACnB/5F,UAAWtyD,EAAOsyD,YAEpB,OAAO5jE,SAIT4rK,GAAc,SAAU5d,EAAW18I,GACrC,IAAIi9I,EAAUhsJ,EAAI+O,EAAOpF,aAAa,SAAUwgJ,GAC9C,OAAOY,GAAYZ,KAAKA,GAAM3uI,MAAK,SAAU8tJ,GAC3C,OAAOV,GAAgBnd,EAAW6d,SAGlClf,EAAQ4X,GAAIhW,GAChB,OAAO5B,EAAMjpJ,OAAS,EAAI+a,EAAOH,KAAK,CACpCquI,MAAOA,EACPgR,WAAYrsJ,EAAOqsJ,WACnB/5F,UAAWtyD,EAAOsyD,YACfnlD,EAAO5B,QAEVivJ,GAAa,SAAUC,EAAYz6J,GACrC,OAAOA,EAAO6rJ,YAEZ6O,GAAe,SAAUD,EAAYz6J,GACvC,OAAOA,EAAO2rJ,cAEZgP,GAAU,SAAUje,EAAW18I,GACjC,IAAIi9I,EAAUhsJ,EAAI+O,EAAOpF,aAAa,SAAUwgJ,GAC9C,OAAOY,GAAYZ,KAAKA,GAAM3uI,MAAK,SAAU8tJ,GAC3C,OAAOV,GAAgBnd,EAAW6d,SAGlClf,EAAQ4X,GAAIhW,GAChB,OAAO5B,EAAMjpJ,OAAS,EAAI+a,EAAOH,KAAKquI,GAASluI,EAAO5B,QAGpD7c,GAAQ,SAAUyC,GACpB,IAAInE,EAAK,SAAU6B,GACjB,OAAOsC,IAAMtC,GAEX0d,EAAK,SAAU2qI,GACjB,OAAOxoJ,GAAMyC,IAEXqb,EAAU,SAAUpB,GACtB,OAAO1c,GAAMyC,IAEXF,EAAM,SAAUma,GAClB,OAAO1c,GAAM0c,EAAEja,KAEbypK,EAAW,SAAUxvJ,GACvB,OAAO1c,GAAMyC,IAEX0M,EAAO,SAAUuN,GACnBA,EAAEja,IAEAsb,EAAO,SAAUrB,GACnB,OAAOA,EAAEja,IAEP0a,EAAO,SAAUnb,EAAGmqK,GACtB,OAAOA,EAAQ1pK,IAEbub,EAAS,SAAUtB,GACrB,OAAOA,EAAEja,IAEPwb,EAAS,SAAUvB,GACrB,OAAOA,EAAEja,IAEP2pK,EAAW,WACb,OAAO3tJ,EAAOH,KAAK7b,IAErB,MAAO,CACLnE,GAAIA,EACJyxC,QAASnzB,EACTyvJ,QAAS1vJ,EACTU,MAAOjS,EAAS3I,GAChB6a,WAAYlS,EAAS3I,GACrB8a,SAAUnS,EAAS3I,GACnBob,GAAIA,EACJC,QAASA,EACTX,KAAMA,EACN5a,IAAKA,EACL2pK,SAAUA,EACV/8J,KAAMA,EACN4O,KAAMA,EACNC,OAAQA,EACRC,OAAQA,EACRmuJ,SAAUA,IAGVz1I,GAAQ,SAAUxuB,GACpB,IAAImV,EAAa,SAAUZ,GACzB,OAAOA,KAELa,EAAW,WACb,OAAO6pI,EAAIvoI,OAAO1W,GAAXi/I,IAELvpI,EAAK,SAAU2qI,GACjB,OAAOA,GAEL1qI,EAAU,SAAUpB,GACtB,OAAOA,KAELna,EAAM,SAAUma,GAClB,OAAOia,GAAMxuB,IAEX+jK,EAAW,SAAUxvJ,GACvB,OAAOia,GAAMja,EAAEvU,KAEb4V,EAAO,SAAUrB,GACnB,OAAOia,GAAMxuB,IAEXgV,EAAO,SAAUmvJ,EAAStqK,GAC5B,OAAOsqK,EAAQnkK,IAEjB,MAAO,CACL7J,GAAIqe,EACJozB,QAASpzB,EACT0vJ,QAASzvJ,EACTS,MAAOkd,EACPjd,WAAYA,EACZC,SAAUA,EACVM,GAAIA,EACJC,QAASA,EACTX,KAAMA,EACN5a,IAAKA,EACL2pK,SAAUA,EACV/8J,KAAM+M,EACN6B,KAAMA,EACNC,OAAQrB,EACRsB,OAAQrB,EACRwvJ,SAAU3tJ,EAAO5B,OAGjB0vJ,GAAa,SAAU/jB,EAAK7hG,GAC9B,OAAO6hG,EAAIrrI,MAAK,WACd,OAAOwZ,GAAMgwB,KACZ3mD,KAEDwsK,GAAS,CACXxsK,MAAOA,GACP22B,MAAOA,GACP41I,WAAYA,IAGVE,GAAU,SAAUC,EAAcC,EAAOC,GAC3C,GAAIF,EAAa9yF,OAAS+yF,EAAMjpK,QAAUgpK,EAAax8D,SAAWw5D,GAAQD,WAAWkD,EAAM,IACzF,OAAOH,GAAO71I,MAAM,mDAAqD+1I,EAAa9yF,MAAQ,aAAe8yF,EAAax8D,UAE5H,IAAI28D,EAAeF,EAAM5lK,MAAM2lK,EAAa9yF,OACxCkzF,EAAeD,EAAa,GAAGlgB,QAAQ5lJ,MAAM2lK,EAAax8D,UAC1D68D,EAAcrD,GAAQD,WAAWmD,EAAM,IACvCI,EAAcJ,EAAMlpK,OACxB,OAAO8oK,GAAOxsK,MAAM,CAClBitK,SAAU7hK,EAASyhK,EAAanpK,OAASspK,GACzCE,SAAU9hK,EAAS0hK,EAAappK,OAASqpK,MAGzCI,GAAe,SAAUR,EAAOC,GAClC,IAAIQ,EAAa1D,GAAQD,WAAWkD,EAAM,IACtCU,EAAa3D,GAAQD,WAAWmD,EAAM,IAC1C,MAAO,CACLK,SAAU7hK,EAAS,GACnB8hK,SAAU9hK,EAASgiK,EAAaC,KAGhCluF,GAAO,SAAUwtE,EAAO2gB,GAC1B,OAAO/qK,EAAIoqJ,GAAO,WAChB,OAAO3B,GAAWsiB,EAAU5gB,QAAQ,OAGpC6gB,GAAU,SAAU5iB,EAAMwV,EAAQmN,GACpC,OAAO3iB,EAAKnuI,OAAO2pJ,GAAOhG,GAAQ,SAAUqN,GAC1C,OAAO9D,GAAQN,SAASze,EAAKA,EAAKjnJ,OAAS,GAAIy7E,GAAKwrE,EAAKA,EAAKjnJ,OAAS,GAAGipJ,QAAS2gB,SAGnFG,GAAU,SAAU9iB,EAAMwV,EAAQmN,GACpC,OAAO/qK,EAAIooJ,GAAM,SAAU/wE,GACzB,OAAO8vF,GAAQN,SAASxvF,EAAKA,EAAI+yE,QAAQnwI,OAAO2iE,GAAKlI,GAAM,EAAGkpF,GAASmN,SAGvEI,GAAS,SAAUf,EAAO5iJ,EAAOujJ,GACnC,IAAIK,EAAW5jJ,EAAMmjJ,WAAa,EAAIO,GAAUlzI,EAC5CqzI,EAAW7jJ,EAAMkjJ,WAAa,EAAIM,GAAUhzI,EAC5CszI,EAAeF,EAAShB,EAAO1rK,KAAKyiH,IAAI35F,EAAMmjJ,YAAaI,GAC3DQ,EAAeF,EAASC,EAAc5sK,KAAKyiH,IAAI35F,EAAMkjJ,YAAaK,GACtE,OAAOQ,GAELC,GAAU,CACZtB,QAASA,GACTU,aAAcA,GACdO,OAAQA,IAGNzuH,GAAQ,SAAU0rG,EAAMS,EAAQ9iI,EAAY0lJ,GAC9C,GAAoB,IAAhBrjB,EAAKjnJ,OACP,OAAOinJ,EAET,IAAK,IAAI3mJ,EAAIonJ,EAAOmE,WAAYvrJ,GAAKonJ,EAAOyH,YAAa7uJ,IACvD,IAAK,IAAIuC,EAAI6kJ,EAAOqE,WAAYlpJ,GAAK6kJ,EAAOwH,YAAarsJ,IACvDmjK,GAAQL,WAAW1e,EAAK3mJ,GAAIuC,EAAGykJ,GAAWgjB,KAAgB,IAG9D,OAAOrjB,GAELsjB,GAAU,SAAUtjB,EAAMr5I,EAAQgX,EAAY0lJ,GAEhD,IADA,IAAIzwE,GAAQ,EACHv5F,EAAI,EAAGA,EAAI2mJ,EAAKjnJ,OAAQM,IAC/B,IAAK,IAAIuC,EAAI,EAAGA,EAAImjK,GAAQD,WAAW9e,EAAK,IAAKpkJ,IAAK,CACpD,IAAIqpD,EAAU85G,GAAQF,eAAe7e,EAAK3mJ,GAAIuC,GAC1C2nK,EAAc5lJ,EAAWsnC,EAASt+C,IAClB,IAAhB48J,IAAkC,IAAV3wE,EAC1BmsE,GAAQL,WAAW1e,EAAK3mJ,GAAIuC,EAAGykJ,GAAWgjB,KAAgB,KACjC,IAAhBE,IACT3wE,GAAQ,GAId,OAAOotD,GAELwjB,GAAc,SAAUv0F,EAAKtxD,GAC/B,OAAOuiC,EAAM+uB,GAAK,SAAUxzE,EAAMsmJ,GAChC,OAAO1uI,EAAO5X,GAAM,SAAUgoK,GAC5B,OAAO9lJ,EAAW8lJ,EAAY7pK,UAAWmoJ,EAAKnoJ,cAC3C6B,EAAOA,EAAKoW,OAAO,CAACkwI,MACxB,KAED2hB,GAAY,SAAU1jB,EAAM7jJ,EAAOwhB,EAAY0lJ,GACjD,GAAIlnK,EAAQ,GAAKA,EAAQ6jJ,EAAKjnJ,OAAQ,CACpC,IAAI4qK,EAAe3jB,EAAK7jJ,EAAQ,GAAG6lJ,QAC/BA,EAAQwhB,GAAYG,EAAchmJ,GACtCnZ,EAAKw9I,GAAO,SAAUD,GAmBpB,IAlBA,IAAI3+H,EAActP,EAAO5B,OACrBi0G,EAAU,SAAU9sH,GAatB,IAZA,IAAIuqK,EAAU,SAAUhoK,GACtB,IAAIqpD,EAAU+6F,EAAK3mJ,GAAG2oJ,QAAQpmJ,GAC1B2nK,EAAc5lJ,EAAWsnC,EAAQrrD,UAAWmoJ,EAAKnoJ,WACjD2pK,IACEngJ,EAAY/Q,WACd+Q,EAActP,EAAOH,KAAK0vJ,MAE5BjgJ,EAAY5e,MAAK,SAAUq/J,GACzB9E,GAAQL,WAAW1e,EAAK3mJ,GAAIuC,EAAGykJ,GAAWwjB,GAAK,SAI5CjoK,EAAI,EAAGA,EAAImjK,GAAQD,WAAW9e,EAAK,IAAKpkJ,IAC/CgoK,EAAQhoK,IAGHvC,EAAI8C,EAAO9C,EAAI2mJ,EAAKjnJ,OAAQM,IACnC8sH,EAAQ9sH,MAId,OAAO2mJ,GAEL8jB,GAAoB,CACtBxvH,MAAOA,GACPgvH,QAASA,GACTI,UAAWA,IAGTK,GAAa,SAAU/jB,EAAM/wE,EAAKh/C,EAAKtS,GACzC,IAAIkqC,EAAYk3G,GAAQH,QAAQ5e,EAAK/wE,GAAMh/C,GACvC+zI,EAAWxyJ,EAAMmM,EAAYkqC,EAAUjuD,WACvCiqJ,EAAa7D,EAAK/wE,GACtB,OAAO+wE,EAAKjnJ,OAAS,GAAKgmK,GAAQD,WAAWjb,GAAc,IAAM5zH,EAAM,GAAK+zI,EAASjF,GAAQF,eAAehb,EAAY5zH,EAAM,KAAOA,EAAM4zH,EAAW7B,QAAQjpJ,OAAS,GAAKirK,EAASjF,GAAQF,eAAehb,EAAY5zH,EAAM,KAAOg/C,EAAM,GAAK+0F,EAASjF,GAAQF,eAAe7e,EAAK/wE,EAAM,GAAIh/C,KAASg/C,EAAM+wE,EAAKjnJ,OAAS,GAAKirK,EAASjF,GAAQF,eAAe7e,EAAK/wE,EAAM,GAAIh/C,MAE9Wg0I,GAAc,SAAUlC,EAAcC,EAAOC,EAAOU,EAAWhlJ,GAOjE,IANA,IAAIinI,EAAWmd,EAAa9yF,MACxB61E,EAAWid,EAAax8D,SACxB2+D,EAAcjC,EAAMlpK,OACpBorK,EAAapF,GAAQD,WAAWmD,EAAM,IACtCpd,EAASD,EAAWsf,EACpBnf,EAASD,EAAWqf,EACfzvJ,EAAIkwI,EAAUlwI,EAAImwI,EAAQnwI,IACjC,IAAK,IAAI1U,EAAI8kJ,EAAU9kJ,EAAI+kJ,EAAQ/kJ,IAAK,CAClC+jK,GAAW/B,EAAOttJ,EAAG1U,EAAG2d,IAC1BmmJ,GAAkBR,QAAQtB,EAAOjD,GAAQF,eAAemD,EAAMttJ,GAAI1U,GAAI2d,EAAYglJ,EAAU5gB,MAE9F,IAAIiF,EAAU+X,GAAQF,eAAeoD,EAAMvtJ,EAAIkwI,GAAW5kJ,EAAI8kJ,GAC1D1hI,EAAcu/I,EAAU9qK,QAAQmvJ,GACpC+X,GAAQL,WAAWsD,EAAMttJ,GAAI1U,EAAGqgJ,GAAWj9H,GAAa,IAG5D,OAAO4+I,GAELoC,GAAU,SAAUrC,EAAcC,EAAOC,EAAOU,EAAWhlJ,GAC7D,IAAIjqB,EAAS0vK,GAAQtB,QAAQC,EAAcC,EAAOC,GAClD,OAAOvuK,EAAOkE,KAAI,SAAUwnB,GAC1B,IAAIilJ,EAAajB,GAAQL,OAAOf,EAAO5iJ,EAAOujJ,GAC9C,OAAOsB,GAAYlC,EAAcsC,EAAYpC,EAAOU,EAAWhlJ,OAG/DhlB,GAAS,SAAUwD,EAAO6lK,EAAOC,EAAOU,EAAWhlJ,GACrDmmJ,GAAkBJ,UAAU1B,EAAO7lK,EAAOwhB,EAAYglJ,EAAU5gB,MAChE,IAAI3iI,EAAQgkJ,GAAQZ,aAAaP,EAAOD,GACpCsC,EAAgBlB,GAAQL,OAAOd,EAAO7iJ,EAAOujJ,GAC7C4B,EAAcnB,GAAQZ,aAAaR,EAAOsC,GAC1CE,EAAgBpB,GAAQL,OAAOf,EAAOuC,EAAa5B,GACvD,OAAO6B,EAAcpoK,MAAM,EAAGD,GAAO0V,OAAOyyJ,GAAezyJ,OAAO2yJ,EAAcpoK,MAAMD,EAAOqoK,EAAczrK,UAEzG0rK,GAAa,CACfnwH,MAAO8vH,GACPzrK,OAAQA,IAGN+rK,GAAc,SAAU1kB,EAAM7jJ,EAAO+mJ,EAASvlI,EAAY0lJ,GAC5D,IAAI3qK,EAASsnJ,EAAK5jJ,MAAM,EAAGD,GACvBI,EAAQyjJ,EAAK5jJ,MAAMD,GACnBwoK,EAAU5F,GAAQJ,SAAS3e,EAAKkD,IAAU,SAAUr4H,EAAI7qB,GAC1D,IAAI4kK,EAAazoK,EAAQ,GAAKA,EAAQ6jJ,EAAKjnJ,QAAU4kB,EAAWohJ,GAAQF,eAAe7e,EAAK7jJ,EAAQ,GAAI6D,GAAI++J,GAAQF,eAAe7e,EAAK7jJ,GAAQ6D,IAC5I/G,EAAM2rK,EAAa7F,GAAQH,QAAQ5e,EAAK7jJ,GAAQ6D,GAAKqgJ,GAAWgjB,EAAax4I,EAAGjxB,UAAW+jB,IAAa,GAC5G,OAAO1kB,KAET,OAAOP,EAAOmZ,OAAO,CAAC8yJ,IAAU9yJ,OAAOtV,IAErCsoK,GAAiB,SAAU7kB,EAAM7jJ,EAAO+mJ,EAASvlI,EAAY0lJ,GAC/D,OAAOzrK,EAAIooJ,GAAM,SAAU/wE,GACzB,IAAI21F,EAAazoK,EAAQ,GAAKA,EAAQ4iK,GAAQD,WAAW7vF,IAAQtxD,EAAWohJ,GAAQF,eAAe5vF,EAAK9yE,EAAQ,GAAI4iK,GAAQF,eAAe5vF,EAAK9yE,IAC5I0nK,EAAMe,EAAa7F,GAAQH,QAAQ3vF,EAAK9yE,GAASkkJ,GAAWgjB,EAAatE,GAAQF,eAAe5vF,EAAKi0E,GAAUvlI,IAAa,GAChI,OAAOohJ,GAAQR,QAAQtvF,EAAK9yE,EAAO0nK,OAGnCiB,GAAuB,SAAU9kB,EAAM+kB,EAAYC,EAAYrnJ,EAAY0lJ,GAC7E,IAAIlnK,EAAQ6oK,EAAa,EACzB,OAAOptK,EAAIooJ,GAAM,SAAU/wE,EAAK51E,GAC9B,IAAI4rK,EAAe5rK,IAAM0rK,EACrBlB,EAAMoB,EAAe5kB,GAAWgjB,EAAatE,GAAQF,eAAe5vF,EAAK+1F,GAAarnJ,IAAa,GAAQohJ,GAAQH,QAAQ3vF,EAAK+1F,GACpI,OAAOjG,GAAQR,QAAQtvF,EAAK9yE,EAAO0nK,OAGnCqB,GAAoB,SAAUllB,EAAM+kB,EAAYC,EAAYrnJ,EAAY0lJ,GAC1E,IAAIlnK,EAAQ4oK,EAAa,EACrBrsK,EAASsnJ,EAAK5jJ,MAAM,EAAGD,GACvBI,EAAQyjJ,EAAK5jJ,MAAMD,GACnBwoK,EAAU5F,GAAQJ,SAAS3e,EAAK+kB,IAAa,SAAUl6I,EAAIxxB,GAC7D,IAAI4rK,EAAe5rK,IAAM2rK,EACzB,OAAOC,EAAe5kB,GAAWgjB,EAAax4I,EAAGjxB,UAAW+jB,IAAa,GAAQkN,KAEnF,OAAOnyB,EAAOmZ,OAAO,CAAC8yJ,IAAU9yJ,OAAOtV,IAErC4oK,GAAkB,SAAUnlB,EAAM9hI,EAAOy4D,GAC3C,IAAIhrE,EAAO/T,EAAIooJ,GAAM,SAAU/wE,GAC7B,IAAI+yE,EAAQ/yE,EAAI+yE,QAAQ5lJ,MAAM,EAAG8hB,GAAOrM,OAAOo9D,EAAI+yE,QAAQ5lJ,MAAMu6E,EAAS,IAC1E,OAAO4pE,GAASyB,EAAO/yE,EAAI2jC,cAE7B,OAAOruG,EAAOoH,GAAM,SAAUsjE,GAC5B,OAAOA,EAAI+yE,QAAQjpJ,OAAS,MAG5BqsK,GAAe,SAAUplB,EAAM9hI,EAAOy4D,GACxC,OAAOqpE,EAAK5jJ,MAAM,EAAG8hB,GAAOrM,OAAOmuI,EAAK5jJ,MAAMu6E,EAAS,KAErD0uF,GAAyB,CAC3BX,YAAaA,GACbG,eAAgBA,GAChBC,qBAAsBA,GACtBI,kBAAmBA,GACnBE,aAAcA,GACdD,gBAAiBA,IAGfG,GAAY,SAAUtlB,EAAM2T,EAASh2I,EAAY0lJ,GACnD,IAAIkC,EAAW,SAAUxjB,GACvB,OAAO1uI,EAAOsgJ,GAAS,SAAUhtJ,GAC/B,OAAOgX,EAAWokI,EAAKnoJ,UAAW+M,EAAO/M,eAG7C,OAAOhC,EAAIooJ,GAAM,SAAU/wE,GACzB,OAAO8vF,GAAQJ,SAAS1vF,GAAK,SAAU8yE,GACrC,OAAOwjB,EAASxjB,GAAQ1B,GAAWgjB,EAAathB,EAAKnoJ,UAAW+jB,IAAa,GAAQokI,SAIvFyjB,GAAc,SAAUxlB,EAAMkF,EAAUugB,EAAU9nJ,GACpD,YAA4D1K,IAArD8rJ,GAAQF,eAAe7e,EAAKkF,GAAWugB,IAA4BvgB,EAAW,GAAKvnI,EAAWohJ,GAAQF,eAAe7e,EAAKkF,EAAW,GAAIugB,GAAW1G,GAAQF,eAAe7e,EAAKkF,GAAWugB,KAEhMC,GAAiB,SAAUz2F,EAAK9yE,EAAOwhB,GACzC,OAAOxhB,EAAQ,GAAKwhB,EAAWohJ,GAAQF,eAAe5vF,EAAK9yE,EAAQ,GAAI4iK,GAAQF,eAAe5vF,EAAK9yE,KAEjGwpK,GAAgB,SAAU3lB,EAAM7jJ,EAAOwhB,EAAY0lJ,GACrD,IAAI1P,EAAUvgJ,EAAK4sI,GAAM,SAAU/wE,EAAK51E,GACtC,IAAIusK,EAAeJ,GAAYxlB,EAAM3mJ,EAAG8C,EAAOwhB,IAAe+nJ,GAAez2F,EAAK9yE,EAAOwhB,GACzF,OAAOioJ,EAAe,GAAK,CAAC7G,GAAQH,QAAQ3vF,EAAK9yE,OAEnD,OAAOmpK,GAAUtlB,EAAM2T,EAASh2I,EAAY0lJ,IAE1CwC,GAAa,SAAU7lB,EAAM7jJ,EAAOwhB,EAAY0lJ,GAClD,IAAIyC,EAAY9lB,EAAK7jJ,GACjBw3J,EAAUvgJ,EAAK0yJ,EAAU9jB,SAAS,SAAUjyG,EAAM12C,GACpD,IAAIusK,EAAeJ,GAAYxlB,EAAM7jJ,EAAO9C,EAAGskB,IAAe+nJ,GAAeI,EAAWzsK,EAAGskB,GAC3F,OAAOioJ,EAAe,GAAK,CAAC71H,MAE9B,OAAOu1H,GAAUtlB,EAAM2T,EAASh2I,EAAY0lJ,IAE1C0C,GAAsB,CACxBJ,cAAeA,GACfE,WAAYA,IAGVxU,GAAMO,GAAInO,SAAS,CACrB,CAAEvxI,KAAM,IACR,CAAE8zJ,KAAM,CAAC,UACT,CACE1oI,KAAM,CACJ,QACA,SAGJ,CACE2oI,OAAQ,CACN,OACA,QACA,SAGJ,CACE7Z,MAAO,CACL,OACA,YAIF8Z,GAAgBvM,GAAS,GAAItI,IAE7B8U,GAAe,SAAU3xK,EAAO2H,GAClC,OAAqB,IAAjB3H,EAAMuE,OACDmtK,GAAch0J,OAEF,IAAjB1d,EAAMuE,OACDmtK,GAAcF,KAAK,GAEd,IAAV7pK,EACK+pK,GAAc5oI,KAAK,EAAG,GAE3BnhC,IAAU3H,EAAMuE,OAAS,EACpBmtK,GAAc9Z,MAAMjwJ,EAAQ,EAAGA,GAEpCA,EAAQ,GAAKA,EAAQ3H,EAAMuE,OAAS,EAC/BmtK,GAAcD,OAAO9pK,EAAQ,EAAGA,EAAOA,EAAQ,GAEjD+pK,GAAch0J,QAEnBk0J,GAAY,SAAU5xK,EAAO+wG,EAAQ7V,EAAM0mE,GAC7C,IAAI1iK,EAASc,EAAM4H,MAAM,GACrB0N,EAAUq8J,GAAa3xK,EAAO+wG,GAC9B8gE,EAAO,SAAU9jG,GACnB,OAAO3qE,EAAI2qE,EAAO9hE,EAAS,KAEzBwxJ,EAASxxJ,EAAS4lK,EAAK3yK,IACvB4yK,EAAS,SAAUnqK,GACrB,OAAOi6J,EAAUmQ,kBAAkB7yK,EAAOyI,GAAQuzF,IAEhDkU,EAAW,SAAUznG,EAAOwmB,GAC9B,GAAI+sE,GAAQ,EAAG,CACb,IAAI82E,EAAUlwK,KAAKssB,IAAIwzI,EAAUqQ,eAAgB/yK,EAAOivB,GAAQ+sE,GAChE,OAAO22E,EAAK3yK,EAAO0I,MAAM,EAAGD,IAAQ0V,OAAO,CACzC69E,EACA82E,EAAU9yK,EAAOivB,KAChB9Q,OAAOw0J,EAAK3yK,EAAO0I,MAAMumB,EAAO,KAEnC,IAAI+jJ,EAAUpwK,KAAKssB,IAAIwzI,EAAUqQ,eAAgB/yK,EAAOyI,GAASuzF,GAC7Di3E,EAAQjzK,EAAOyI,GAASuqK,EAC5B,OAAOL,EAAK3yK,EAAO0I,MAAM,EAAGD,IAAQ0V,OAAO,CACzC60J,EAAUhzK,EAAOyI,GACjBwqK,IACC90J,OAAOw0J,EAAK3yK,EAAO0I,MAAMumB,EAAO,MAGnCikJ,EAAShjE,EACTijE,EAAW,SAAUC,EAAO3qK,EAAOwmB,GACrC,OAAOihF,EAASznG,EAAOwmB,IAErBokJ,EAAU,SAAUD,EAAO3qK,GAC7B,GAAIuzF,GAAQ,EACV,OAAO22E,EAAK3yK,EAAO0I,MAAM,EAAGD,IAAQ0V,OAAO,CAAC69E,IAE5C,IAAI5zE,EAAOxlB,KAAKssB,IAAIwzI,EAAUqQ,eAAgB/yK,EAAOyI,GAASuzF,GAC9D,OAAO22E,EAAK3yK,EAAO0I,MAAM,EAAGD,IAAQ0V,OAAO,CAACiK,EAAOpoB,EAAOyI,MAG9D,OAAO2N,EAAQ0I,KAAKy/I,EAAQqU,EAAQM,EAAQC,EAAUE,IAEpDC,GAAS,CAAEZ,UAAWA,IAEtBa,GAAY,SAAUllB,EAAMtqJ,GAC9B,OAAOomB,GAAIkkI,EAAMtqJ,IAAS/C,SAASY,GAAIysJ,EAAMtqJ,GAAO,IAAM,GAExDyvK,GAAa,SAAUnlB,GACzB,OAAOklB,GAAUllB,EAAM,YAErBolB,GAAa,SAAUplB,GACzB,OAAOklB,GAAUllB,EAAM,YAErBqlB,GAAS,SAAUxtK,EAASyF,GAC9B,OAAO3K,SAAS6pB,GAAM3kB,EAASyF,GAAW,KAExCgoK,GAAY,CACdH,WAAYA,GACZC,WAAYA,GACZvkK,SAAUnC,EAAS,IACnBoC,UAAWpC,EAAS,IACpB2mK,OAAQA,IAGNE,GAAW,SAAUvlB,EAAM1iJ,EAAUolF,GACvC,OAAOi6D,GAAOqD,EAAM1iJ,GAAUmT,MAAK,WACjC,OAAOiyE,EAAOs9D,GAAQ,QACrB,SAAUxpF,GACX,OAAOA,MAGPgvG,GAAU,SAAUxlB,EAAMqU,GAC5B,OAAOkR,GAASvlB,EAAM,SAAS,SAAUj+I,GACvC,OAAOozJ,GAAMJ,cAAchzJ,EAAGsyJ,OAG9BoR,GAAU,SAAUzlB,GACtB,OAAOulB,GAASvlB,EAAM,SAAUmV,GAAMhuI,YAEpCu+I,GAAe,SAAUpkB,EAAWlgJ,EAAW4lB,EAAUgjD,EAAUqqF,GACrE,IAAI59G,EAAU8jH,GAAO9jH,QAAQ6qG,GACzBqkB,EAAU9vK,EAAI4gD,GAAS,SAAUqgH,GACnC,OAAOA,EAAWjhK,IAAIuL,EAAUwhD,SAElC,OAAO/sD,EAAI4gD,GAAS,SAAUqgH,EAAY74J,GACxC,IAAI2nK,EAAa9O,EAAWt0J,OAAOuN,EAAIu1J,GAAUH,aACjD,OAAOS,EAAWn1J,MAAK,WACrB,IAAIo1J,EAAUlM,GAAOgM,EAAS1nK,GAC9B,OAAO+rE,EAAS67F,MACf,SAAU7lB,GACX,OAAOh5H,EAASg5H,EAAMqU,UAIxByR,GAAa,SAAUD,GACzB,OAAOA,EAAQhwK,KAAI,SAAUhG,GAC3B,OAAOA,EAAI,QACV8gB,MAAM,KAEPo1J,GAAe,SAAUzkB,EAAWlgJ,EAAWizJ,GACjD,OAAOqR,GAAapkB,EAAWlgJ,EAAWokK,GAASM,GAAYzR,IAE7D2R,GAAsB,SAAU1kB,EAAWlgJ,EAAWizJ,GACxD,OAAOqR,GAAapkB,EAAWlgJ,EAAW+zJ,GAAMT,oBAAoB,SAAUmR,GAC5E,OAAOA,EAAQp1J,MAAK,WAClB,OAAO4jJ,EAAUqQ,kBAChB,SAAUtQ,GACX,OAAOA,EAAYC,EAAUC,aAAe,SAE7CD,IAED4R,GAAiB,SAAU3kB,EAAWlgJ,EAAWizJ,GACnD,OAAOqR,GAAapkB,EAAWlgJ,EAAW+zJ,GAAMJ,eAAe,SAAU8Q,GACvE,OAAOA,EAAQj1J,WAAWyjJ,EAAUqQ,gBACnCrQ,IAED6R,GAAgB,SAAU5kB,EAAWlgJ,EAAW+lB,EAAW6iD,GAC7D,IAAIpgE,EAAO2wJ,GAAO3wJ,KAAK03I,GACnBqkB,EAAU9vK,EAAI+T,GAAM,SAAUktJ,GAChC,OAAOA,EAAWjhK,IAAIuL,EAAUwhD,SAElC,OAAO/sD,EAAI+T,GAAM,SAAUktJ,EAAY74J,GACrC,IAAIkoK,EAAUrP,EAAWt0J,OAAOuN,EAAIu1J,GAAUF,aAC9C,OAAOe,EAAQ11J,MAAK,WAClB,IAAIo1J,EAAUlM,GAAOgM,EAAS1nK,GAC9B,OAAO+rE,EAAS67F,MACf,SAAU7lB,GACX,OAAO74H,EAAU64H,UAInBomB,GAAkB,SAAU9kB,EAAWlgJ,GACzC,OAAO8kK,GAAc5kB,EAAWlgJ,EAAW+zJ,GAAMhuI,WAAW,SAAU0+I,GACpE,OAAOA,EAAQj1J,WAAW00J,GAAUxkK,eAGpCulK,GAAgB,SAAU/kB,EAAWlgJ,GACvC,OAAO8kK,GAAc5kB,EAAWlgJ,EAAWqkK,GAASK,KAElDQ,GAAc,CAChBP,aAAcA,GACdE,eAAgBA,GAChBD,oBAAqBA,GACrBI,gBAAiBA,GACjBC,cAAeA,IAGbptH,GAAQ,SAAU98B,EAAOY,EAAKwpJ,GAEhC,IADA,IAAI5zJ,EAAI,EACCrb,EAAI6kB,EAAO7kB,EAAIylB,EAAKzlB,IAC3Bqb,QAAqBzB,IAAhBq1J,EAASjvK,GAAmBivK,EAASjvK,GAAK,EAEjD,OAAOqb,GAEL6zJ,GAAmB,SAAUllB,EAAWmlB,GAC1C,IAAI1rK,EAAMonJ,GAAUD,UAAUZ,GAC9B,OAAOzrJ,EAAIkF,GAAK,SAAUilJ,GACxB,IAAI35H,EAAQ4yB,GAAM+mG,EAAKx8C,SAAUw8C,EAAKx8C,SAAWw8C,EAAKiB,UAAWwlB,GACjE,MAAO,CACL5uK,QAASmoJ,EAAKnoJ,QACdwuB,MAAO3nB,EAAS2nB,GAChB46H,QAASjB,EAAKiB,aAIhBylB,GAAoB,SAAUplB,EAAWqlB,GAC3C,IAAI5rK,EAAMonJ,GAAUD,UAAUZ,GAC9B,OAAOzrJ,EAAIkF,GAAK,SAAUilJ,GACxB,IAAI15H,EAAS2yB,GAAM+mG,EAAK9yE,MAAO8yE,EAAK9yE,MAAQ8yE,EAAKgB,UAAW2lB,GAC5D,MAAO,CACL9uK,QAASmoJ,EAAKnoJ,QACdyuB,OAAQ5nB,EAAS4nB,GACjB06H,QAAShB,EAAKgB,aAIhB4lB,GAAiB,SAAUtlB,EAAWqlB,GACxC,OAAO9wK,EAAIyrJ,EAAUvmJ,OAAO,SAAUmyE,EAAK51E,GACzC,MAAO,CACLO,QAASq1E,EAAIr1E,QACbyuB,OAAQ5nB,EAASioK,EAAQrvK,SAI3BuvK,GAAiB,CACnBL,iBAAkBA,GAClBE,kBAAmBA,GACnBE,eAAgBA,IAGdE,GAAiB,SAAUzgJ,EAAOxuB,GACpC,IAAIi9J,EAAalnI,WAAWvH,GACxBiuI,EAAa/B,GAAM16J,GACnBkvK,EAAe,SAAU1pJ,GAC3B,OAAOA,EAAQi3I,EAAa,KAE1BkQ,EAAoB,SAAU7vK,EAAGqyK,GACnC,MAAO,CAAC,IAAMryK,IAEZ+vK,EAAe,WACjB,OAAOY,GAAUzkK,WAAayzJ,EAAa,KAEzC2S,EAAgB,SAAU1mB,EAAO2mB,EAAY7pJ,GAC/C,IAAI8pJ,EAAQ9pJ,EAAQ,IAChB+pJ,EAASD,EAAQrS,EACrBK,GAAMzB,mBAAmBnT,EAAOuU,EAAasS,IAE/C,MAAO,CACL/gJ,MAAO3nB,EAASo2J,GAChBR,WAAY51J,EAAS41J,GACrB+S,UAAWf,GAAYN,oBACvBe,aAAcA,EACdvC,kBAAmBA,EACnBE,aAAcA,EACd4C,gBAAiBnS,GAAMzB,mBACvBuT,cAAeA,IAGfM,GAAY,SAAUlhJ,GACxB,IAAI0gJ,EAAel5I,EACf22I,EAAoB,SAAU7vK,EAAG0oB,GACnC,IAAIonJ,EAAUlwK,KAAKssB,IAAIykJ,GAAUzkK,WAAYlM,EAAI0oB,GACjD,MAAO,CAAConJ,EAAU9vK,IAEhBsyK,EAAgB,SAAU1mB,EAAOinB,EAAWR,GAC9C,IAAI/tH,EAAQ2hG,EAAM4sB,GAAW,SAAUp6J,EAAGsB,GACxC,OAAOtB,EAAIsB,IACV,GACHymJ,GAAM3B,cAAcjT,EAAOtnG,IAE7B,MAAO,CACL5yB,MAAO3nB,EAAS2nB,GAChBiuI,WAAY51J,EAAS2nB,GACrBghJ,UAAWf,GAAYL,eACvBc,aAAcA,EACdvC,kBAAmBA,EACnBE,aAAcY,GAAUzkK,SACxBymK,gBAAiBnS,GAAM3B,cACvByT,cAAeA,IAGfQ,GAAa,SAAU5vK,EAASwuB,GAClC,IAAImuI,EAAeW,GAAM7B,2BAA2BriK,KAAKo1B,GACzD,GAAqB,OAAjBmuI,EACF,OAAOsS,GAAetS,EAAa,GAAI38J,GAEzC,IAAIg9J,EAAaM,GAAM5B,sBAAsBtiK,KAAKo1B,GAClD,GAAmB,OAAfwuI,EAAqB,CACvB,IAAIJ,EAAW9hK,SAASkiK,EAAW,GAAI,IACvC,OAAO0S,GAAU9S,GAEnB,IAAIiT,EAAgBnV,GAAM16J,GAC1B,OAAO0vK,GAAUG,IAEfC,GAAe,SAAU9vK,GAC3B,IAAIwuB,EAAQ8uI,GAAMlB,YAAYp8J,GAC9B,OAAOwuB,EAAM5V,MAAK,WAChB,IAAIi3J,EAAgBnV,GAAM16J,GAC1B,OAAO0vK,GAAUG,MAChB,SAAU/yK,GACX,OAAO8yK,GAAW5vK,EAASlD,OAG3BizK,GAAY,CAAED,aAAcA,IAE5BE,GAAiB,SAAU1nH,GAC7B,OAAOgiG,GAAUT,SAASvhG,IAExB2nH,GAAQ,SAAU//H,GACpB,OAAO6yG,EAAM7yG,GAAS,SAAU36B,EAAGsB,GACjC,OAAOtB,EAAIsB,IACV,IAEDq5J,GAAoB,SAAUxnB,GAChC,IAAIpgG,EAAOihG,GAAYP,UAAUN,GACjC,OAAOsnB,GAAe1nH,IAEpB6nH,GAAc,SAAUznB,EAAOljI,EAAOjjB,EAAOgH,GAC/C,IAAIizJ,EAAYuT,GAAUD,aAAapnB,GACnC5yD,EAAO0mE,EAAU0S,aAAa1pJ,GAC9BikI,EAAYymB,GAAkBxnB,GAC9BkmB,EAASpS,EAAUgT,UAAU/lB,EAAWlgJ,EAAWizJ,GACnD4T,EAAShD,GAAOZ,UAAUoC,EAAQrsK,EAAOuzF,EAAM0mE,GAC/CmT,EAAY3xK,EAAIoyK,GAAQ,SAAUt7H,EAAIr1C,GACxC,OAAOq1C,EAAK85H,EAAOnvK,MAEjB4wK,EAAWrB,GAAeL,iBAAiBllB,EAAWkmB,GAC1D/kK,EAAKylK,GAAU,SAAUloB,GACvBqU,EAAUiT,gBAAgBtnB,EAAKnoJ,UAAWmoJ,EAAK35H,YAE7CjsB,IAAUknJ,EAAUrD,OAAOxnG,UAAY,GACzC49G,EAAU4S,cAAc1mB,EAAOinB,EAAW75E,IAG1Cw6E,GAAe,SAAU5nB,EAAOljI,EAAOjjB,EAAOgH,GAChD,IAAIkgJ,EAAYymB,GAAkBxnB,GAC9BomB,EAAUL,GAAYF,gBAAgB9kB,EAAWlgJ,GACjDgnK,EAAavyK,EAAI8wK,GAAS,SAAU/5H,EAAIt1C,GAC1C,OAAO8C,IAAU9C,EAAI/C,KAAKssB,IAAIxD,EAAQuvB,EAAI04H,GAAUxkK,aAAe8rC,KAEjEy7H,EAAexB,GAAeH,kBAAkBplB,EAAW8mB,GAC3DE,EAAczB,GAAeD,eAAetlB,EAAW8mB,GAC3D3lK,EAAK6lK,GAAa,SAAUp7F,GAC1BioF,GAAMxB,UAAUzmF,EAAIr1E,UAAWq1E,EAAI5mD,aAErC7jB,EAAK4lK,GAAc,SAAUroB,GAC3BmV,GAAMxB,UAAU3T,EAAKnoJ,UAAWmoJ,EAAK15H,aAEvC,IAAI2yB,EAAQ6uH,GAAMM,GAClBjT,GAAMxB,UAAUpT,EAAOtnG,IAErBsvH,GAAgB,SAAUhoB,EAAOpgG,EAAM/+C,GACzC,IAAIizJ,EAAYuT,GAAUD,aAAapnB,GACnCe,EAAYumB,GAAe1nH,GAC3BsmH,EAASpS,EAAUgT,UAAU/lB,EAAWlgJ,EAAWizJ,GACnD6T,EAAWrB,GAAeL,iBAAiBllB,EAAWmlB,GAC1DhkK,EAAKylK,GAAU,SAAUloB,GACvBqU,EAAUiT,gBAAgBtnB,EAAKnoJ,UAAWmoJ,EAAK35H,YAE7C6hJ,EAASlxK,OAAS,GACpBq9J,EAAU4S,cAAc1mB,EAAOkmB,EAAQpS,EAAU0S,aAAa,KAG9DyB,GAAc,CAChBR,YAAaA,GACbG,aAAcA,GACdI,cAAeA,IAGbn1K,GAAO,SAAUC,GACnB,IAAIC,EAAQD,EACRE,EAAM,WACR,OAAOD,GAELE,EAAM,SAAUC,GAClBH,EAAQG,GAENC,EAAQ,WACV,OAAON,GAAKG,MAEd,MAAO,CACLA,IAAKA,EACLC,IAAKA,EACLE,MAAOA,IAIPw6I,GAAO,SAAUu6B,EAAmBxtB,GACtC,OAAOytB,GAASD,EAAmBxtB,EAAU,CAC3CzjI,SAAUnF,EACV9Q,MAAO,cAGPmnK,GAAW,SAAUD,EAAmBxtB,EAAUroI,GACpD,GAAwB,IAApBqoI,EAASjkJ,OACX,MAAM,IAAI+Z,MAAM,iDAIlB,OAFAqqI,EAAe,WAAYH,GAC3BM,EAAWN,GACJ,SAAUtnI,GACf,IAAIS,EAASX,EAAKE,GACdkoI,EAAUtqI,EAAO0pI,GAAU,SAAUxlF,GACvC,OAAO7tD,EAASwM,EAAQqhD,MAErBomF,GACHb,EAAWC,EAAU7mI,GAEvBq0J,EAAkBxtB,EAAU7mI,GAC5B,IAAIu0J,EAAcnmK,EAAOy4I,GAAU,SAAUxpJ,GAC3C,OAAQmhB,EAAK4E,SAAS7D,EAAIliB,GAAMA,MAKlC,OAHIk3K,EAAY3xK,OAAS,GACvBqkJ,EAAmBstB,EAAa/1J,EAAKrR,OAEhCoS,IAGPi1J,GAAc,SAAU3tB,EAAUxnI,GACpC,IAAI0nI,EAAc34I,EAAOiR,GAAM,SAAUhiB,GACvC,OAAQmW,EAASqzI,EAAUxpJ,MAEzB0pJ,EAAYnkJ,OAAS,GACvBkkJ,EAAcC,IAGd0tB,GAAU,SAAU5tB,GACtB,OAAO/M,GAAK06B,GAAa3tB,IAGvB6tB,GAAmBD,GAAQ,CAC7B,OACA,MACA,UACA,QAEEE,GAAgB,SAAUlxK,GAC5B,IAAIopJ,EAAUnlI,GAAIjkB,EAAS,WAAalF,SAASY,GAAIsE,EAAS,WAAY,IAAM,EAC5EmpJ,EAAUllI,GAAIjkB,EAAS,WAAalF,SAASY,GAAIsE,EAAS,WAAY,IAAM,EAChF,MAAO,CACLA,QAAS6G,EAAS7G,GAClBopJ,QAASviJ,EAASuiJ,GAClBD,QAAStiJ,EAASsiJ,KAGlBgoB,GAAe,SAAU/X,EAAYgY,QACxB,IAAXA,IACFA,EAASF,IAEXD,GAAiB7X,GACjB,IAAIlgH,EAAW39C,GAAK2e,EAAO5B,QACvBq8B,EAAK,SAAUxzC,GACjB,OAAOi4J,EAAWjR,KAAKhnJ,IAErBkwK,EAAS,SAAUrxK,GACrB,IAAImB,EAAOiwK,EAAOpxK,GAClB,OAAO20C,EAAGxzC,IAERgC,EAAM,SAAUnD,GAClB,IAAIwpB,EAAc6nJ,EAAOrxK,GAQzB,OAPIk5C,EAASx9C,MAAM+c,UACjBygC,EAASv9C,IAAIue,EAAOH,KAAKyP,IAE3B8nJ,EAASp3J,EAAOH,KAAK,CACnBo8B,KAAMn2C,EACNwpB,YAAaA,IAERA,GAEL8nJ,EAASp3J,EAAO5B,OAChBi5J,EAAY,SAAUvxK,EAAS+jB,GACjC,OAAOutJ,EAAO14J,MAAK,WACjB,OAAOzV,EAAInD,MACV,SAAUk/B,GACX,OAAOnb,EAAW/jB,EAASk/B,EAAEiX,MAAQjX,EAAE1V,YAAcrmB,EAAInD,OAG7D,MAAO,CACLuxK,UAAWA,EACXtK,OAAQ/tH,EAASx9C,MAGjB81K,GAAY,SAAUvyI,EAAO37B,GAC/B,OAAO,SAAU81J,GACf,IAAIlgH,EAAW39C,GAAK2e,EAAO5B,QAC3B24J,GAAiB7X,GACjB,IAAI9wG,EAAO,GACPiC,EAAS,SAAUvqD,EAAS+jB,GAC9B,OAAO1Y,EAAKi9C,GAAM,SAAUr2C,GAC1B,OAAO8R,EAAW9R,EAAEkkC,KAAMn2C,OAG1ByxK,EAAU,SAAUzxK,GACtB,IAAIosB,EAAQ,CAAE6S,MAAOA,GACjBkpH,EAAOiR,EAAWn7J,QAAQ+B,EAASsD,EAAK8oB,GAQ5C,OAPAk8B,EAAKzlD,KAAK,CACRszC,KAAMn2C,EACNiqK,IAAK9hB,IAEHjvG,EAASx9C,MAAM+c,UACjBygC,EAASv9C,IAAIue,EAAOH,KAAKouI,IAEpBA,GAELupB,EAAgB,SAAU1xK,EAAS+jB,GACrC,OAAOwmC,EAAOvqD,EAAS+jB,GAAYnL,MAAK,WACtC,OAAO64J,EAAQzxK,MACd,SAAUk/B,GACX,OAAOnb,EAAW/jB,EAASk/B,EAAEiX,MAAQjX,EAAE+qI,IAAMwH,EAAQzxK,OAGzD,MAAO,CACL0xK,cAAeA,EACfzK,OAAQ/tH,EAASx9C,OAInBi2K,GAAU,SAAUvY,GACtB6X,GAAiB7X,GACjB,IAAIlgH,EAAW39C,GAAK2e,EAAO5B,QACvBs5J,EAAU,SAAUzpB,GAItB,OAHIjvG,EAASx9C,MAAM+c,UACjBygC,EAASv9C,IAAIue,EAAOH,KAAKouI,IAEpB,WACL,IAAIxpF,EAAMy6F,EAAWjR,KAAK,CACxBnoJ,QAAS6G,EAASshJ,GAClBiB,QAASviJ,EAAS,GAClBsiJ,QAAStiJ,EAAS,KAIpB,OAFAk+I,GAASpmF,EAAK,SACdomF,GAASoD,EAAM,SACRxpF,IAGX,MAAO,CACLizG,QAASA,EACT3K,OAAQ/tH,EAASx9C,MAGjBm2K,GAAa,CACfV,aAAcA,GACdK,UAAWA,GACXG,QAASA,IAGPG,GAAY,CACd,OACA,IACA,MACA,UACA,QACA,aACA,SACA,SACA,SACA,MACA,UACA,KACA,KACA,QACA,QACA,QACA,QACA,UACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,aACA,MACA,WAEEvpH,GAAS,SAAUupG,EAAU37G,GAC/B,IAAIhpC,EAAU2kJ,EAASrsJ,WAAWpL,KAAK87C,GACvC,OAAOpmC,EAAS,CACd,KACA,MACC5C,IAEDm3C,GAAU,SAAUwtG,EAAU37G,GAChC,IAAIhpC,EAAU2kJ,EAASrsJ,WAAWpL,KAAK87C,GACvC,OAAOpmC,EAAS+hK,GAAW3kK,IAEzB4kK,GAAe,SAAUjgB,EAAU37G,GACrC,IAAIhpC,EAAU2kJ,EAASrsJ,WAAWpL,KAAK87C,GACvC,OAAOpmC,EAAS,CACd,UACA,MACA,IACA,KACA,KACA,KACA,KACA,KACA,MACC5C,IAED6kK,GAAY,SAAUlgB,EAAU37G,GAClC,IAAIhpC,EAAU2kJ,EAASrsJ,WAAWpL,KAAK87C,GACvC,OAAOpmC,EAAS,CACd,KACA,KACA,KACA,KACA,KACA,MACC5C,IAED8kK,GAAc,SAAUngB,EAAU37G,GACpC,OAAOpmC,EAAS,CACd,MACA,KACA,KACA,KACA,aACA,OACA,WACC+hJ,EAASrsJ,WAAWpL,KAAK87C,KAE1B86G,GAAa,SAAUa,EAAU37G,GACnC,OAAOpmC,EAAS,CACd,KACA,MACA,KACA,SACC+hJ,EAASrsJ,WAAWpL,KAAK87C,KAE1B+7H,GAAU,SAAUpgB,EAAU37G,GAChC,MAA0C,WAAnC27G,EAASrsJ,WAAWpL,KAAK87C,IAE9Bg8H,GAAW,SAAUrgB,EAAU37G,GACjC,QAASmO,GAAQwtG,EAAU37G,IAAS86G,GAAWa,EAAU37G,KAA6C,OAAnC27G,EAASrsJ,WAAWpL,KAAK87C,IAE1Fi8H,GAAY,CACd9tH,QAASA,GACTiE,OAAQA,GACRwpH,aAAcA,GACdC,UAAWA,GACXC,YAAaA,GACbhhB,WAAYA,GACZihB,QAASA,GACTC,SAAUA,IAGRE,GAAathB,KACbuhB,GAAY,SAAUtyK,GACxB,OAAOoyK,GAAU9tH,QAAQ+tH,GAAYryK,IAEnCuzD,GAAW,SAAUvzD,GACvB,OAAOoyK,GAAU7pH,OAAO8pH,GAAYryK,IAElCuyK,GAAiB,SAAUvyK,GAC7B,OAAOoyK,GAAUL,aAAaM,GAAYryK,IAExCwyK,GAAc,SAAUxyK,GAC1B,OAAOoyK,GAAUJ,UAAUK,GAAYryK,IAErCyyK,GAAgB,SAAUzyK,GAC5B,OAAOoyK,GAAUH,YAAYI,GAAYryK,IAEvC0yK,GAAe,SAAU1yK,GAC3B,OAAOoyK,GAAUnhB,WAAWohB,GAAYryK,IAEtC2yK,GAAY,SAAU3yK,GACxB,OAAOoyK,GAAUF,QAAQG,GAAYryK,IAEnC4yK,GAAa,SAAU5yK,GACzB,OAAOoyK,GAAUD,SAASE,GAAYryK,IAEpC6yK,GAAe,CACjBvuH,QAASguH,GACT/pH,OAAQgL,GACRw+G,aAAcQ,GACdP,UAAWQ,GACXP,YAAaQ,GACbxhB,WAAYyhB,GACZR,QAASS,GACTR,SAAUS,IAGRE,GAAU,SAAU1qB,GACtB,IAAInkG,EAAO,SAAU91C,GACnB,MAAoB,OAAb9T,GAAK8T,IAEV4kK,EAAa,SAAUxjK,GACzB,OAAOmK,EAAOnK,GAAU,SAAUnJ,GAChC,OAAO69C,EAAK79C,IAAM0gB,GAAO1gB,IAAiC,IAA3Bu6I,GAAMv6I,GAAG4E,OAAO7L,WAG/C6zK,EAAa,SAAU7kK,GACzB,MAAoB,OAAb9T,GAAK8T,IAAgBi5I,GAASj5I,EAAI0kK,GAAatqH,QAAQ1vC,UAE5Do6J,EAAiB,SAAU9kK,GAC7B,OAAO4Z,GAAY5Z,GAAInQ,KAAI,SAAUk1K,GACnC,QAAIL,GAAavuH,QAAQ4uH,MAGrBL,GAAa5hB,WAAWiiB,IACI,QAAvB74K,GAAK64K,MAGbp6J,OAAM,IAEPq6J,EAAW,SAAUhrB,GACvB,OAAOuE,GAAOvE,GAAM3uI,MAAK,SAAU00I,GACjC,IAAIklB,EAAsBH,EAAe/kB,GACzC,OAAO/tJ,GAAO+tJ,GAAWlwJ,KAAI,SAAUmC,GACrC,OAA+B,IAAxBizK,GAAgCJ,EAAW7yK,IAAW8jD,EAAKiqG,IAAc2kB,GAAavuH,QAAQnkD,KAAYqY,GAAG2vI,EAAMhoJ,GAAU,GAAK,CAAC8oD,GAAQL,QAAQ,aAE3J9vC,MAAM,KAEPu6J,EAAc,WAChB,IAAIv1K,EAAU0b,EAAK4uI,GAAO,SAAUD,GAClC,IAAIp2F,EAAaxiD,GAAS44I,GAC1B,OAAO4qB,EAAWhhH,GAAc,GAAKA,EAAW95C,OAAOk7J,EAAShrB,OAElE,OAA0B,IAAnBrqJ,EAAQqB,OAAe,CAAC8pD,GAAQL,QAAQ,OAAS9qD,GAEtDw1K,EAAWD,IACfpoK,GAAMm9I,EAAM,IACZp3F,GAASo3F,EAAM,GAAIkrB,IAEjBC,GAAe,CAAE74H,MAAOo4H,IAExBnf,GAAQ,SAAUjL,GACpB,IAAIN,EAAQW,GAAYX,MAAMM,GACT,IAAjBN,EAAMjpJ,QACRgnJ,GAASuC,IAGT8qB,GAAUhqH,EAAU,OAAQ,UAC5BiqH,GAAkB,SAAUrtB,EAAM/wE,EAAKs2B,GACzC,OAAO+nE,GAAOttB,EAAM/wE,EAAKs2B,GAAQpyF,SAAQ,WACvC,OAAOm6J,GAAOttB,EAAM,EAAG,OAGvBstB,GAAS,SAAUttB,EAAM/wE,EAAKs2B,GAChC,OAAOzxF,EAAO5X,KAAK8jJ,EAAK/wE,IAAM77D,MAAK,SAAUsB,GAC3C,OAAOZ,EAAO5X,KAAKwY,EAAEstI,QAAQz8C,IAASnyF,MAAK,SAAUpT,GACnD,OAAO8T,EAAO5X,KAAK8D,EAAEpG,kBAIvB2zK,GAAS,SAAUvtB,EAAM/wE,EAAKs2B,GAChC,OAAO6nE,GAAQptB,EAAMstB,GAAOttB,EAAM/wE,EAAKs2B,KAErCioE,GAAa,SAAU5pB,GACzB,OAAO1jG,EAAM0jG,GAAS,SAAUnoJ,EAAM+1D,GACpC,OAAOn+C,EAAO5X,GAAM,SAAUgyK,GAC5B,OAAOA,EAAcx+F,QAAUzd,EAAOyd,SACnCxzE,EAAOA,EAAKoW,OAAO,CAAC2/C,MACxB,IAAI9zC,MAAK,SAAU+qI,EAASC,GAC7B,OAAOD,EAAQx5E,MAAQy5E,EAAQz5E,UAG/By+F,GAAgB,SAAU9pB,GAC5B,OAAO1jG,EAAM0jG,GAAS,SAAUnoJ,EAAM+1D,GACpC,OAAOn+C,EAAO5X,GAAM,SAAUgyK,GAC5B,OAAOA,EAAcloE,WAAa/zC,EAAO+zC,YACtC9pG,EAAOA,EAAKoW,OAAO,CAAC2/C,MACxB,IAAI9zC,MAAK,SAAU+qI,EAASC,GAC7B,OAAOD,EAAQljD,SAAWmjD,EAAQnjD,aAGlCooE,GAAkB,SAAU3tB,EAAMxuF,EAAQ7zC,EAAYijJ,GACxD,IAAI1d,EAAU1xF,EAAOyd,MACjB2+F,EAAcp8G,EAAOyd,MACrB4+F,EAAUxI,GAAuBX,YAAY1kB,EAAM4tB,EAAa1qB,EAASvlI,EAAYijJ,EAAYuK,WACrG,OAAOoC,GAAOM,EAASD,EAAap8G,EAAO+zC,WAEzCuoE,GAAmB,SAAU9tB,EAAM4D,EAASjmI,EAAYijJ,GAC1D,IAAI1d,EAAUU,EAAQ,GAAG30E,MACrB2+F,EAAchqB,EAAQ,GAAG30E,MACzBtjE,EAAO6hK,GAAW5pB,GAClBiqB,EAAU3tH,EAAMv0C,GAAM,SAAUoiK,EAAMlL,GACxC,OAAOwC,GAAuBX,YAAYqJ,EAAMH,EAAa1qB,EAASvlI,EAAYijJ,EAAYuK,aAC7FnrB,GACH,OAAOutB,GAAOM,EAASD,EAAahqB,EAAQ,GAAGr+C,WAE7CyoE,GAAiB,SAAUhuB,EAAMxuF,EAAQ7zC,EAAYijJ,GACvD,IAAI1d,EAAU1xF,EAAOyd,MACjB2+F,EAAcp8G,EAAOyd,MAAQzd,EAAOuxF,UACpC8qB,EAAUxI,GAAuBX,YAAY1kB,EAAM4tB,EAAa1qB,EAASvlI,EAAYijJ,EAAYuK,WACrG,OAAOoC,GAAOM,EAASD,EAAap8G,EAAO+zC,WAEzC0oE,GAAkB,SAAUjuB,EAAM4D,EAASjmI,EAAYijJ,GACzD,IAAIj1J,EAAO6hK,GAAW5pB,GAClBV,EAAUv3I,EAAKA,EAAK5S,OAAS,GAAGk2E,MAChC2+F,EAAcjiK,EAAKA,EAAK5S,OAAS,GAAGk2E,MAAQtjE,EAAKA,EAAK5S,OAAS,GAAGgqJ,UAClE8qB,EAAU3tH,EAAMv0C,GAAM,SAAUoiK,EAAMlL,GACxC,OAAOwC,GAAuBX,YAAYqJ,EAAMH,EAAa1qB,EAASvlI,EAAYijJ,EAAYuK,aAC7FnrB,GACH,OAAOutB,GAAOM,EAASD,EAAahqB,EAAQ,GAAGr+C,WAE7C2oE,GAAqB,SAAUluB,EAAMxuF,EAAQ7zC,EAAYijJ,GAC3D,IAAI1d,EAAU1xF,EAAO+zC,SACjBqoE,EAAcp8G,EAAO+zC,SACrBsoE,EAAUxI,GAAuBR,eAAe7kB,EAAM4tB,EAAa1qB,EAASvlI,EAAYijJ,EAAYuK,WACxG,OAAOoC,GAAOM,EAASr8G,EAAOyd,MAAO2+F,IAEnCO,GAAsB,SAAUnuB,EAAM4D,EAASjmI,EAAYijJ,GAC7D,IAAIpoH,EAAUk1H,GAAc9pB,GACxBV,EAAU1qG,EAAQ,GAAG+sD,SACrBqoE,EAAcp1H,EAAQ,GAAG+sD,SACzBsoE,EAAU3tH,EAAM1H,GAAS,SAAUu1H,EAAMlL,GAC3C,OAAOwC,GAAuBR,eAAekJ,EAAMH,EAAa1qB,EAASvlI,EAAYijJ,EAAYuK,aAChGnrB,GACH,OAAOutB,GAAOM,EAASjqB,EAAQ,GAAG30E,MAAO2+F,IAEvCQ,GAAoB,SAAUpuB,EAAMxuF,EAAQ7zC,EAAYijJ,GAC1D,IAAI1d,EAAU1xF,EAAO+zC,SACjBqoE,EAAcp8G,EAAO+zC,SAAW/zC,EAAOwxF,UACvC6qB,EAAUxI,GAAuBR,eAAe7kB,EAAM4tB,EAAa1qB,EAASvlI,EAAYijJ,EAAYuK,WACxG,OAAOoC,GAAOM,EAASr8G,EAAOyd,MAAO2+F,IAEnCS,GAAqB,SAAUruB,EAAM4D,EAASjmI,EAAYijJ,GAC5D,IAAI1d,EAAUU,EAAQA,EAAQ7qJ,OAAS,GAAGwsG,SACtCqoE,EAAchqB,EAAQA,EAAQ7qJ,OAAS,GAAGwsG,SAAWq+C,EAAQA,EAAQ7qJ,OAAS,GAAGiqJ,UACjFxqG,EAAUk1H,GAAc9pB,GACxBiqB,EAAU3tH,EAAM1H,GAAS,SAAUu1H,EAAMlL,GAC3C,OAAOwC,GAAuBR,eAAekJ,EAAMH,EAAa1qB,EAASvlI,EAAYijJ,EAAYuK,aAChGnrB,GACH,OAAOutB,GAAOM,EAASjqB,EAAQ,GAAG30E,MAAO2+F,IAEvCU,GAAgB,SAAUtuB,EAAMxuF,EAAQ7zC,EAAYijJ,GACtD,IAAIiN,EAAU9H,GAAoBF,WAAW7lB,EAAMxuF,EAAOyd,MAAOtxD,EAAYijJ,EAAY0K,eACzF,OAAOiC,GAAOM,EAASr8G,EAAOyd,MAAOzd,EAAO+zC,WAE1CgpE,GAAmB,SAAUvuB,EAAMxuF,EAAQ7zC,EAAYijJ,GACzD,IAAIiN,EAAU9H,GAAoBJ,cAAc3lB,EAAMxuF,EAAO+zC,SAAU5nF,EAAYijJ,EAAY0K,eAC/F,OAAOiC,GAAOM,EAASr8G,EAAOyd,MAAOzd,EAAO+zC,WAE1CipE,GAAkB,SAAUxuB,EAAMxuF,EAAQ7zC,EAAYijJ,GACxD,IAAIiN,EAAU9H,GAAoBF,WAAW7lB,EAAMxuF,EAAOyd,MAAOtxD,EAAYijJ,EAAY0K,eACzF,OAAOiC,GAAOM,EAASr8G,EAAOyd,MAAOzd,EAAO+zC,WAE1CkpE,GAAqB,SAAUzuB,EAAMxuF,EAAQ7zC,EAAYijJ,GAC3D,IAAIiN,EAAU9H,GAAoBJ,cAAc3lB,EAAMxuF,EAAO+zC,SAAU5nF,EAAYijJ,EAAY0K,eAC/F,OAAOiC,GAAOM,EAASr8G,EAAOyd,MAAOzd,EAAO+zC,WAE1CmpE,GAAyB,SAAU1uB,EAAMxuF,EAAQ7zC,EAAYijJ,GAC/D,IAAIiN,EAAUxI,GAAuBP,qBAAqB9kB,EAAMxuF,EAAOyd,MAAOzd,EAAO+zC,SAAU5nF,EAAYijJ,EAAYuK,WACvH,OAAOoC,GAAOM,EAASr8G,EAAOyd,MAAOzd,EAAO+zC,WAE1CopE,GAAsB,SAAU3uB,EAAMxuF,EAAQ7zC,EAAYijJ,GAC5D,IAAIiN,EAAUxI,GAAuBH,kBAAkBllB,EAAMxuF,EAAOyd,MAAOzd,EAAO+zC,SAAU5nF,EAAYijJ,EAAYuK,WACpH,OAAOoC,GAAOM,EAASr8G,EAAOyd,MAAOzd,EAAO+zC,WAE1CqpE,GAAe,SAAU5uB,EAAM4D,EAASirB,EAAaC,GACvD,IAAIt2H,EAAUk1H,GAAc9pB,GACxBiqB,EAAUxI,GAAuBF,gBAAgBnlB,EAAMxnG,EAAQ,GAAG+sD,SAAU/sD,EAAQA,EAAQz/C,OAAS,GAAGwsG,UACxGs7D,EAASwM,GAAgBQ,EAASjqB,EAAQ,GAAG30E,MAAO20E,EAAQ,GAAGr+C,UACnE,OAAO6nE,GAAQS,EAAShN,IAEtBkO,GAAY,SAAU/uB,EAAM4D,EAASirB,EAAaC,GACpD,IAAInjK,EAAO6hK,GAAW5pB,GAClBiqB,EAAUxI,GAAuBD,aAAaplB,EAAMr0I,EAAK,GAAGsjE,MAAOtjE,EAAKA,EAAK5S,OAAS,GAAGk2E,OACzF4xF,EAASwM,GAAgBQ,EAASjqB,EAAQ,GAAG30E,MAAO20E,EAAQ,GAAGr+C,UACnE,OAAO6nE,GAAQS,EAAShN,IAEtBmO,GAAa,SAAUhvB,EAAMwS,EAAU70I,EAAYmxJ,GACrD,IAAI9sB,EAAQwQ,EAASxQ,QACrBmrB,GAAa74H,MAAM0tG,GACnB,IAAI6rB,EAAU/J,GAAkBxvH,MAAM0rG,EAAMwS,EAAS/R,SAAU9iI,EAAYld,EAASuhJ,EAAM,KAC1F,OAAOorB,GAAQS,EAAS/5J,EAAO5X,KAAK8lJ,EAAM,MAExCitB,GAAe,SAAUjvB,EAAMsS,EAAY30I,EAAYijJ,GACzD,IAAIiN,EAAUlxB,EAAM2V,GAAY,SAAUnjJ,EAAG4yI,GAC3C,OAAO+hB,GAAkBR,QAAQn0J,EAAG4yI,EAAMpkI,EAAYijJ,EAAY4K,QAAQzpB,MACzE/B,GACH,OAAOotB,GAAQS,EAAS/5J,EAAO5X,KAAKo2J,EAAW,MAE7CsB,GAAa,SAAU5T,EAAMkvB,EAAcvxJ,EAAYmxJ,GACzD,IAAIK,EAAU,SAAU7sB,EAAO0Q,GAC7B,IAAI9wG,EAAOihG,GAAYP,UAAUN,GAC7B8sB,EAAKlrB,GAAUT,SAASvhG,GAC5B,OAAO+9G,GAAYF,OAAOqP,EAAIpc,GAAY,IAExCiP,EAAQkN,EAAQD,EAAaj2G,YAAai2G,EAAalc,cACvD+O,EAAe9hB,GAAQivB,EAAajgG,MAAOigG,EAAa3pE,UACxD8pE,EAAa5K,GAAWnwH,MAAMytH,EAAc/hB,EAAMiiB,EAAOiN,EAAalc,aAAcr1I,GACxF,OAAO0xJ,EAAW78J,MAAK,WACrB,OAAO46J,GAAQptB,EAAMlsI,EAAOH,KAAKu7J,EAAat1K,eAC7C,SAAU01K,GACX,IAAIzO,EAASwM,GAAgBiC,EAAQJ,EAAajgG,MAAOigG,EAAa3pE,UACtE,OAAO6nE,GAAQkC,EAAQzO,OAGvB0O,GAAc,SAAU5jK,EAAMqnJ,EAAY9P,GAC5C,IAAIgsB,EAAe/rB,GAAYF,eAAet3I,EAAMu3I,GAChDksB,EAAKlrB,GAAUT,SAASyrB,GAC5B,OAAOjP,GAAYF,OAAOqP,EAAIpc,GAAY,IAExCwc,GAAkB,SAAUxvB,EAAMkvB,EAAcvxJ,EAAYmxJ,GAC9D,IAAI5rB,EAAUlD,EAAKkvB,EAAaltB,MAAM,GAAG/yE,OACrC9yE,EAAQ+yK,EAAaltB,MAAM,GAAG/yE,MAC9BgzF,EAAQsN,GAAYL,EAAaj2G,YAAai2G,EAAalc,aAAc9P,GACzEmsB,EAAa5K,GAAW9rK,OAAOwD,EAAO6jJ,EAAMiiB,EAAOiN,EAAalc,aAAcr1I,GAC9EkjJ,EAASwM,GAAgBgC,EAAYH,EAAaltB,MAAM,GAAG/yE,MAAOigG,EAAaltB,MAAM,GAAGz8C,UAC5F,OAAO6nE,GAAQiC,EAAYxO,IAEzB4O,GAAiB,SAAUzvB,EAAMkvB,EAAcvxJ,EAAYmxJ,GAC7D,IAAI5rB,EAAUlD,EAAKkvB,EAAaltB,MAAM,GAAG/yE,OACrC9yE,EAAQ+yK,EAAaltB,MAAMktB,EAAaltB,MAAMjpJ,OAAS,GAAGk2E,MAAQigG,EAAaltB,MAAMktB,EAAaltB,MAAMjpJ,OAAS,GAAGgqJ,UACpHkf,EAAQsN,GAAYL,EAAaj2G,YAAai2G,EAAalc,aAAc9P,GACzEmsB,EAAa5K,GAAW9rK,OAAOwD,EAAO6jJ,EAAMiiB,EAAOiN,EAAalc,aAAcr1I,GAC9EkjJ,EAASwM,GAAgBgC,EAAYH,EAAaltB,MAAM,GAAG/yE,MAAOigG,EAAaltB,MAAM,GAAGz8C,UAC5F,OAAO6nE,GAAQiC,EAAYxO,IAEzBt4I,GAASgiJ,GAAYD,cACrBoF,GAAkB,CACpB/B,gBAAiBnzK,GAAImzK,GAAiB5M,GAAQxvJ,EAAMA,EAAMk6J,GAAWV,cACrE+C,iBAAkBtzK,GAAIszK,GAAkBxM,GAAS/vJ,EAAMA,EAAMk6J,GAAWV,cACxEiD,eAAgBxzK,GAAIwzK,GAAgBjN,GAAQxvJ,EAAMA,EAAMk6J,GAAWV,cACnEkD,gBAAiBzzK,GAAIyzK,GAAiB3M,GAAS/vJ,EAAMA,EAAMk6J,GAAWV,cACtEmD,mBAAoB1zK,GAAI0zK,GAAoBnN,GAAQx4I,GAAQhX,EAAMk6J,GAAWV,cAC7EoD,oBAAqB3zK,GAAI2zK,GAAqB7M,GAAS/4I,GAAQhX,EAAMk6J,GAAWV,cAChFqD,kBAAmB5zK,GAAI4zK,GAAmBrN,GAAQx4I,GAAQhX,EAAMk6J,GAAWV,cAC3EsD,mBAAoB7zK,GAAI6zK,GAAoB/M,GAAS/4I,GAAQhX,EAAMk6J,GAAWV,cAC9EjG,qBAAsBtqK,GAAIk0K,GAAwB3N,GAAQx4I,GAAQhX,EAAMk6J,GAAWV,cACnF7F,kBAAmB1qK,GAAIm0K,GAAqB5N,GAAQxvJ,EAAMA,EAAMk6J,GAAWV,cAC3E6D,aAAcp0K,GAAIo0K,GAActN,GAAS/4I,GAAQglI,GAAOke,GAAWV,cACnEgE,UAAWv0K,GAAIu0K,GAAWzN,GAAS/vJ,EAAMg8I,GAAOke,GAAWV,cAC3DwD,iBAAkB/zK,GAAI+zK,GAAkBxN,GAAQxvJ,EAAMA,EAAMk6J,GAAWL,UAAU,MAAO,OACxFqD,mBAAoBj0K,GAAIi0K,GAAoB1N,GAAQxvJ,EAAMA,EAAMk6J,GAAWL,UAAU,KAAM,OAC3FkD,cAAe9zK,GAAI8zK,GAAevN,GAAQxvJ,EAAMA,EAAMk6J,GAAWL,UAAU,MAAO,OAClFoD,gBAAiBh0K,GAAIg0K,GAAiBzN,GAAQxvJ,EAAMA,EAAMk6J,GAAWL,UAAU,KAAM,OACrF4D,WAAYx0K,GAAIw0K,GAAY7N,GAAY5vJ,EAAMA,EAAMk6J,GAAWF,SAC/D0D,aAAcz0K,GAAIy0K,GAAc5N,GAAc94I,GAAQhX,EAAMk6J,GAAWF,SACvE3X,WAAYp5J,GAAIo5J,GAAYoN,GAASz4I,GAAQhX,EAAMk6J,GAAWV,cAC9DyE,gBAAiBh1K,GAAIg1K,GAAiBvO,GAAa1vJ,EAAMA,EAAMk6J,GAAWV,cAC1E0E,eAAgBj1K,GAAIi1K,GAAgBxO,GAAa1vJ,EAAMA,EAAMk6J,GAAWV,eAGtE4E,GAAY,SAAU35K,GACxB,OAAO6sD,GAAQN,QAAQvsD,EAAO0T,YAE5BkmK,GAAkB,SAAUhyK,GAC9B,OAAOA,EAAIs2G,wBAAwB9rF,OAEjCynJ,GAAiB,SAAUjyK,GAC7B,OAAOA,EAAIs2G,wBAAwB7rF,QAEjC4mI,GAAY,SAAUj5J,GACxB,OAAO,SAAU4D,GACf,OAAOwY,GAAGxY,EAAS+1K,GAAU35K,MAG7B85K,GAAiB,SAAUh0J,GAC7B,OAAOA,EAAOA,EAAKjkB,QAAQ,MAAO,IAAM,IAEtCk4K,GAAgB,SAAUj0J,GAI5B,MAHI,WAAW9hB,KAAK8hB,KAClBA,GAAQ,MAEHA,GAELk0J,GAAkB,SAAU1tB,GAC9B,IAAI2tB,EAAiBnvB,GAAcwB,EAAO,yCAC1C33I,GAAO23I,EAAO,kBACd99I,EAAKyrK,GAAgB,SAAUluB,GAC7Bp3I,GAAOo3I,EAAM,sBAIbmuB,GAAe,SAAUt2K,GAC3B,MAAuC,QAAhC2kB,GAAM3kB,EAAS,aAAyB,MAAQ,OAGrDu2K,GAAQ,CAAE3W,MAAO/4J,GAAS,IAC1B2vK,GAAQ,CAAE5W,MAAO/4J,GAAS,IAC1B64J,GAAc,SAAU1/J,GAC1B,IAAIuhB,EAAM+0J,GAAat2K,GACvB,MAAe,QAARuhB,EAAgBi1J,GAAQD,IAE7BE,GAAY,CAAE/W,YAAaA,IAE3BgX,GAAsB,CACxB,aACA,cACA,IACA,uBACA,sBACA,iBACA,IACA,uBACA,sBACA,kBAEEC,GAAgB,CAClB,kBAAmB,WACnB,MAAS,QAEPC,GAAoB,CAAE3sI,OAAQ,KAC9B4sI,GAAuB,SAAUz6K,GACnC,OAAOA,EAAOW,SAAS,2BAA4B65K,GAAmB,WAEpEE,GAAmB,SAAU16K,GAC/B,OAAOA,EAAOW,SAAS,uBAAwB45K,GAAe,WAE5DI,GAAqB,SAAU36K,GACjC,OAAOA,EAAOW,SAAS,qBAAqB,EAAM,YAEhDi6K,GAAmB,SAAU56K,GAC/B,OAAOA,EAAOW,SAAS,wBAAwB,EAAM,YAEnDk6K,GAAqB,SAAU76K,GACjC,OAAOA,EAAOW,SAAS,qBAAqB,EAAM,YAEhDm6K,GAAoB,SAAU96K,GAChC,OAAOA,EAAOW,SAAS,oBAAoB,EAAM,YAE/Co6K,GAAsB,SAAU/6K,GAClC,OAAOA,EAAOW,SAAS,gBAAgB,EAAM,YAE3Cq6K,GAAuB,SAAUh7K,GACnC,OAAOA,EAAOW,SAAS,4BAA4B,EAAM,YAEvDs6K,GAAe,SAAUj7K,GAC3B,OAAOA,EAAOW,SAAS,cAAc,EAAM,YAEzCu6K,GAAqB,SAAUl7K,GACjC,OAAOA,EAAOW,SAAS,sBAAsB,EAAO,YAElDw6K,GAAmB,SAAUn7K,GAC/B,OAAOA,EAAOW,SAAS,wBAAyB,GAAI,UAElDy6K,GAAkB,SAAUp7K,GAC9B,OAAOA,EAAOW,SAAS,uBAAwB,GAAI,UAEjD06K,GAAoB,SAAUr7K,GAChC,OAAOA,EAAOW,SAAS,mBAAoB,GAAI,UAE7C4U,GAAyB,SAAUvV,GACrC,OAAOA,EAAOW,SAAS,0BAErB26K,GAAiB,SAAUt7K,GAC7B,OAAqD,IAA9CA,EAAOW,SAAS,2BAErB46K,GAAmB,SAAUv7K,GAC/B,IAAIw7K,EAAgBx7K,EAAOW,SAAS,wBACpC,OAAIgpD,EAAS6xH,GACJ19J,EAAOH,KAAK69J,EAAcxhL,MAAM,SAC9B2M,MAAM2kB,QAAQkwJ,GAChB19J,EAAOH,KAAK69J,GAEZ19J,EAAO5B,QAGdu/J,GAAoB,SAAUz7K,GAChC,IAAI07K,EAAiB17K,EAAOW,SAAS,mBAAmB,GACxD,MAA0B,UAAnB+6K,GAA8BA,GAEnCC,GAAa,SAAU37K,GACzB,IAAI47K,EAAU57K,EAAOW,SAAS,gBAAiB25K,IAC/C,MAAgB,KAAZsB,IAA8B,IAAZA,EACb,GACEjyH,EAASiyH,GACXA,EAAQ5hL,MAAM,QACZsxB,EAAQswJ,GACVA,EAEA,IAIPC,GAAa,SAAU77K,EAAQi5E,GACjC,OAAOj5E,EAAO8lC,KAAK,SAAU,CAAEx6B,KAAM2tE,KAEnC6iG,GAAc,SAAU97K,EAAQ+rJ,GAClC,OAAO/rJ,EAAO8lC,KAAK,UAAW,CAAEx6B,KAAMygJ,KAEpCgwB,GAAwB,SAAU/7K,EAAQ2Q,EAAQyhB,EAAOC,GAC3DryB,EAAO8lC,KAAK,oBAAqB,CAC/Bn1B,OAAQA,EACRyhB,MAAOA,EACPC,OAAQA,KAGR2pJ,GAAoB,SAAUh8K,EAAQ2Q,EAAQyhB,EAAOC,GACvDryB,EAAO8lC,KAAK,gBAAiB,CAC3Bn1B,OAAQA,EACRyhB,MAAOA,EACPC,OAAQA,KAIR4pJ,GAAe,SAAUj8K,EAAQk8K,GACnC,IAAIC,EAAc,SAAUn8K,GAC1B,MAAmC,UAA5B/B,GAAK07K,GAAU35K,KAEpBo8K,EAAe,SAAU9vB,GAC3B,IAAIxmI,EAAO49I,GAAcD,YAAYnX,GACrC,OAA+B,IAAxB6vB,EAAYn8K,IAAqB8lB,EAAKnQ,OAAS,GAEpD0mK,EAAkB,SAAU/vB,GAC9B,IAAIxmI,EAAO49I,GAAcD,YAAYnX,GACrC,OAA+B,IAAxB6vB,EAAYn8K,IAAqB8lB,EAAK08B,UAAY,GAEvDsuG,EAAeyqB,GAAiBv7K,GAChCs8K,EAAU,SAAU7R,EAAW8R,EAAO7mH,EAAQwmH,GAChD,OAAO,SAAU5vB,EAAO37I,GACtBqpK,GAAgB1tB,GAChB,IAAIya,EAAOmV,IACP9vJ,EAAMygC,GAAQN,QAAQvsD,EAAOmP,UAC7BhC,EAAYk2J,GAAegX,GAAU/W,aACrCtG,EAAatL,GAAUL,eAAe37F,EAAQtpC,EAAK0kI,GACvD,OAAOyrB,EAAMjwB,GAASme,EAAU1D,EAAMza,EAAO37I,EAAQqsJ,EAAY7vJ,GAAWiQ,MAAK,SAAU1f,GAOzF,OANA8Q,EAAK9Q,EAAOsmK,WAAW,SAAU/qF,GAC/B4iG,GAAW77K,EAAQi5E,EAAIrtE,UAEzB4C,EAAK9Q,EAAOumK,YAAY,SAAUlY,GAChC+vB,GAAY97K,EAAQ+rJ,EAAKngJ,UAEpBlO,EAAOmtK,SAASjpK,KAAI,SAAUmqJ,GACnC,IAAIriI,EAAM1pB,EAAO4L,IAAIkf,YAGrB,OAFApB,EAAIW,SAAS0hI,EAAKngJ,MAAO,GACzB8d,EAAIY,OAAOyhI,EAAKngJ,MAAO,GAChB8d,QAEN5L,EAAO5B,SAGZsgK,EAAYF,EAAQ5C,GAAgBX,UAAWqD,EAAc7gK,EAAM2gK,GACnEO,EAAeH,EAAQ5C,GAAgBd,aAAcyD,EAAiB9gK,EAAM2gK,GAC5EpE,EAAmBwE,EAAQ5C,GAAgB5B,iBAAkB77J,EAAQV,EAAM2gK,GAC3EjE,EAAkBqE,EAAQ5C,GAAgBzB,gBAAiBh8J,EAAQV,EAAM2gK,GACzE/D,EAAsBmE,EAAQ5C,GAAgBvB,oBAAqBl8J,EAAQolJ,GAAcF,MAAO+a,GAChG7D,EAAqBiE,EAAQ5C,GAAgBrB,mBAAoBp8J,EAAQolJ,GAAcF,MAAO+a,GAC9FlD,EAAasD,EAAQ5C,GAAgBV,WAAY/8J,EAAQV,EAAM2gK,GAC/DjD,EAAeqD,EAAQ5C,GAAgBT,aAAch9J,EAAQV,EAAM2gK,GACnE1C,EAAkB8C,EAAQ5C,GAAgBF,gBAAiBv9J,EAAQV,EAAM2gK,GACzEzC,EAAiB6C,EAAQ5C,GAAgBD,eAAgBx9J,EAAQV,EAAM2gK,GACvEte,EAAa0e,EAAQ5C,GAAgB9b,WAAY3hJ,EAAQV,EAAM2gK,GACnE,MAAO,CACLM,UAAWA,EACXC,aAAcA,EACd3E,iBAAkBA,EAClBG,gBAAiBA,EACjBE,oBAAqBA,EACrBE,mBAAoBA,EACpBW,WAAYA,EACZC,aAAcA,EACdO,gBAAiBA,EACjBC,eAAgBA,EAChB7b,WAAYA,IAIZ8e,GAAW,SAAUpwB,EAAO37I,EAAQqsJ,GACtC,IAAI9wG,EAAOihG,GAAYP,UAAUN,GAC7B+B,EAAQH,GAAUT,SAASvhG,GAC3B0hG,EAAU0d,GAAQjd,EAAO19I,GAC7B,OAAOi9I,EAAQhsJ,KAAI,SAAU+6K,GAC3B,IAAI3yB,EAAOigB,GAAYF,OAAO1b,EAAO2O,GAAY,GAC7C4f,EAAa5yB,EAAK5jJ,MAAMu2K,EAAc,GAAG1jG,MAAO0jG,EAAcA,EAAc55K,OAAS,GAAGk2E,MAAQ0jG,EAAcA,EAAc55K,OAAS,GAAGgqJ,WACxI8vB,EAAgBtS,GAAaqS,EAAY5f,GAC7C,OAAO8H,GAAOl9I,KAAKi1J,OAGnBC,GAAW,CAAEJ,SAAUA,IAEvB58K,GAAWJ,QAAQC,KAAKC,MAAMC,QAAQ,sBAEtCk9K,GAAsB,SAAUnxK,EAAKhE,EAAK3J,GAC5C,IACI++K,EADAhxB,EAAQpgJ,EAAIE,OAAO,QAASlE,GAE5Bq1K,EAAgB,SAAUD,EAAiB/xH,GAC7C,IAAK,IAAI5nD,EAAI,EAAGA,EAAI4nD,EAAKloD,OAAQM,IAAK,CACpC,IAAI65K,EAAetxK,EAAIutC,SAAS8R,EAAK5nD,GAAIpF,GAIzC,GAH+B,qBAApB++K,IACTA,EAAkBE,GAEhBF,IAAoBE,EACtB,MAAO,GAGX,OAAOF,GAGT,OADAA,EAAkBC,EAAcD,EAAiBhxB,GAC1CgxB,GAELG,GAAa,SAAUn9K,EAAQ4H,EAAK3J,GAClCA,GACF+B,EAAOkO,UAAUrH,MAAM,QAAU5I,EAAM,GAAI2J,IAG3Cw1K,GAAc,SAAUp9K,EAAQ4H,EAAK3J,GACnCA,GACF+B,EAAOkO,UAAUrH,MAAM,SAAW5I,EAAM,GAAI2J,IAG5Cy1K,GAAe,SAAUr9K,EAAQ4H,GACnC9H,GAAS0O,KAAK,oBAAoBxU,MAAM,MAAM,SAAUiE,GACtD+B,EAAOkO,UAAUyG,OAAO,QAAU1W,EAAM,GAAI2J,OAG5C01K,GAAgB,SAAUt9K,EAAQ4H,GACpC9H,GAAS0O,KAAK,oBAAoBxU,MAAM,MAAM,SAAUiE,GACtD+B,EAAOkO,UAAUyG,OAAO,SAAW1W,EAAM,GAAI2J,OAG7C21K,GAAW,CACbJ,WAAYA,GACZC,YAAaA,GACbC,aAAcA,GACdC,cAAeA,GACfP,oBAAqBA,IAGnB//H,GAAiB,SAAUC,EAAWC,EAAcC,GACtD,IAAIC,EAAc,SAAU5vC,EAAQ1Q,GAclC,OAbAA,EAASA,GAAU,GACnBgD,GAAS0O,KAAKhB,GAAQ,SAAUusC,GAC9B,IAAIsD,EAAW,CAAE/3C,KAAMy0C,EAAKz0C,MAAQy0C,EAAKrxC,OACrCqxC,EAAKF,KACPwD,EAASxD,KAAOuD,EAAYrD,EAAKF,OAEjCwD,EAASh+C,MAAQ06C,EAAK16C,MAClB69C,GACFA,EAAaG,IAGjBvgD,EAAO2J,KAAK42C,MAEPvgD,GAET,OAAOsgD,EAAYH,EAAWE,GAAc,KAE9C,SAASqgI,GAAmB1vK,GAC1B,OAAOA,EAAEwF,QAAQ4uC,YAAYjzC,KAAK,UAAU,GAAGoI,QAAQomK,YAAYv+K,EAAWwE,SAASg6K,eAEzF,IAAIC,GAA0B,SAAU39K,EAAQ6E,GAC1C24K,GAAmB34K,GACrB+4K,GAAqB59K,EAAQ6E,GAE7Bg5K,GAAiB79K,EAAQ6E,IAGzBg5K,GAAmB,SAAU79K,EAAQ6E,GACvC,IAAI+G,EAAM5L,EAAO4L,IACbs2C,EAAcr9C,EAAIyO,QAAQ4uC,YAC1Bn9C,EAAOm9C,EAAYC,SACnBp5C,EAAM6C,EAAIw2C,WAAWr9C,EAAKyE,OAC9BT,EAAI,gBAAkBhE,EAAKk7C,YAC3Bl3C,EAAI,gBAAkBhE,EAAK+4K,YAC3B/0K,EAAI,oBAAsBhE,EAAKg5K,gBAC/Bh1K,EAAIqpB,MAAQrtB,EAAKqtB,MAAQ2nJ,GAAch1K,EAAKqtB,OAAS,GACrDrpB,EAAIspB,OAASttB,EAAKstB,OAAS0nJ,GAAch1K,EAAKstB,QAAU,GACxD6vB,EAAYjzC,KAAK,UAAU5P,MAAMuM,EAAIy2C,eAAez2C,EAAIw2C,WAAWx2C,EAAIy2C,eAAet5C,OAEpF60K,GAAuB,SAAU59K,EAAQ6E,GAC3C,IAAI+G,EAAM5L,EAAO4L,IACbs2C,EAAcr9C,EAAIyO,QAAQ4uC,YAC1Bn9C,EAAOm9C,EAAYC,SACnBp5C,EAAM6C,EAAIw2C,WAAWr9C,EAAKyE,OAC9B04C,EAAYjzC,KAAK,gBAAgB5P,MAAM0J,EAAI,iBAAmB,IAC9Dm5C,EAAYjzC,KAAK,gBAAgB5P,MAAM0J,EAAI,iBAAmB,IAC9Dm5C,EAAYjzC,KAAK,oBAAoB5P,MAAM0J,EAAI,qBAAuB,IACtEm5C,EAAYjzC,KAAK,UAAU5P,MAAM0J,EAAIqpB,OAAS,IAC9C8vB,EAAYjzC,KAAK,WAAW5P,MAAM0J,EAAIspB,QAAU,KAE9C2rJ,GAAwB,SAAUpyK,EAAKhE,GACzC,IAAImB,EAAM6C,EAAIw2C,WAAWx2C,EAAImzC,UAAUn3C,EAAK,UACxC7C,EAAO,GAWX,OAVIgE,EAAI,kBACNhE,EAAKk7C,YAAcl3C,EAAI,iBAErBA,EAAI,kBACNhE,EAAK+4K,YAAc/0K,EAAI,iBAErBA,EAAI,sBACNhE,EAAKg5K,gBAAkBh1K,EAAI,qBAE7BhE,EAAKyE,MAAQoC,EAAIy2C,eAAet5C,GACzBhE,GAELk5K,GAAkB,SAAUj+K,GAC9B,IAAIk+K,EAAwB,WAC1B,IAAIjnK,EAAsB1B,GAAuBvV,GACjD,GAAIiX,EACF,OAAO,SAAUpS,GACf,OAAOoS,EAAoB/U,KAAKlC,GAAQ,SAAUX,GAChDwF,EAAIyO,QAAQjU,MAAMA,GAAOymC,KAAK,YAC7BjhC,EAAIyO,QAAQjU,WAIrB,MAAO,CACLqJ,MAAO,WACPjH,KAAM,OACNokB,SAAU,CAAE8oB,SAAUnzB,EAAMqiK,GAAkB79K,IAC9Csf,MAAO,CACL,CACEhS,MAAO,QACPrP,KAAM,QACNwD,KAAM,UACNktC,SAAUnzB,EAAMoiK,GAAsB59K,IAExC,CACEyB,KAAM,OACNmf,QAAS,EACTu9J,iBAAkB,CAChBjxK,OAAQ,OACRkxK,OAAQ,CACN,QACA,UAGJv4J,SAAU,CAAEC,KAAM,GAClBxG,MAAO,CACL,CACEhS,MAAO,eACP7L,KAAM,UACNxD,KAAM,cACNm0B,MAAO,GACPylB,SAAUr8B,EAAMqiK,GAAkB79K,GAClCwN,OAAQ,CACN,CACElI,KAAM,YACNjG,MAAO,IAET,CACEiG,KAAM,QACNjG,MAAO,SAET,CACEiG,KAAM,SACNjG,MAAO,UAET,CACEiG,KAAM,SACNjG,MAAO,UAET,CACEiG,KAAM,SACNjG,MAAO,UAET,CACEiG,KAAM,SACNjG,MAAO,UAET,CACEiG,KAAM,QACNjG,MAAO,SAET,CACEiG,KAAM,QACNjG,MAAO,SAET,CACEiG,KAAM,SACNjG,MAAO,UAET,CACEiG,KAAM,OACNjG,MAAO,QAET,CACEiG,KAAM,SACNjG,MAAO,YAIb,CACEiO,MAAO,eACP7L,KAAM,WACNxD,KAAM,cACNogL,SAAUH,KAEZ,CACE5wK,MAAO,mBACP7L,KAAM,WACNxD,KAAM,kBACNogL,SAAUH,UAOlBI,GAAU,CACZL,gBAAiBA,GACjBjhI,eAAgBA,GAChB6gI,iBAAkBA,GAClBG,sBAAuBA,GACvBJ,qBAAsBA,GACtBD,wBAAyBA,IAGvBY,GAAe,SAAU32K,EAAKof,UACzBpf,EAAI42K,QAAQC,SACnB72K,EAAI4B,MAAMwd,SAAW,IAAMA,GAEzB03J,GAAyB,SAAU1+K,EAAQ4H,GAC7C,IAAIgE,EAAM5L,EAAO4L,IACb7G,EAAO,CACTqtB,MAAOxmB,EAAIutC,SAASvxC,EAAK,UAAYgE,EAAImzC,UAAUn3C,EAAK,SACxDyqB,OAAQzmB,EAAIutC,SAASvxC,EAAK,WAAagE,EAAImzC,UAAUn3C,EAAK,UAC1Di7B,MAAOj3B,EAAImzC,UAAUn3C,EAAK,SAC1Bw3C,MAAOxzC,EAAImzC,UAAUn3C,EAAK,SAC1BnG,KAAMmG,EAAIzD,SAAS+f,cACnB1a,MAAO,GACP4D,MAAO,GACPuxK,OAAQ,IAeV,OAbA7+K,GAAS0O,KAAK,oBAAoBxU,MAAM,MAAM,SAAUiE,GAClD+B,EAAOkO,UAAU0wK,UAAUh3K,EAAK,QAAU3J,KAC5C8G,EAAKqI,MAAQnP,MAGjB6B,GAAS0O,KAAK,oBAAoBxU,MAAM,MAAM,SAAUiE,GAClD+B,EAAOkO,UAAU0wK,UAAUh3K,EAAK,SAAW3J,KAC7C8G,EAAK45K,OAAS1gL,MAGd48K,GAAmB76K,IACrBF,GAASuC,OAAO0C,EAAMu5K,GAAQN,sBAAsBpyK,EAAKhE,IAEpD7C,GAEL85K,GAAmB,SAAU7+K,EAAQgsJ,EAAOnnJ,GAC9C,IACIE,EADA6G,EAAM5L,EAAO4L,IAEjB,SAASC,EAAUjE,EAAK3J,EAAMoB,IACP,IAAjB2sJ,EAAMjpJ,QAAgB1D,IACxBuM,EAAIC,UAAUjE,EAAK3J,EAAMoB,GAG7B,SAASo8D,EAAS7zD,EAAK3J,EAAMoB,IACN,IAAjB2sJ,EAAMjpJ,QAAgB1D,IACxBuM,EAAI6vD,SAAS7zD,EAAK3J,EAAMoB,GAGxBw7K,GAAmB76K,IACrBs+K,GAAQX,wBAAwB39K,EAAQ6E,GAE1CE,EAAOF,EAAIyO,QAAQ4uC,YAAYC,SAC/BniD,EAAO0L,YAAYC,UAAS,WAC1B7L,GAAS0O,KAAKw9I,GAAO,SAAU8yB,GAC7BjzK,EAAUizK,EAAS,QAAS/5K,EAAK89B,OACZ,IAAjBmpH,EAAMjpJ,OACR8I,EAAUizK,EAAS,QAAS/5K,EAAKyE,OAEjC+0K,GAAaO,EAAS/5K,EAAKyE,OAE7BqC,EAAUizK,EAAS,QAAS/5K,EAAKq6C,OACjCqc,EAASqjH,EAAS,QAAS/E,GAAch1K,EAAKqtB,QAC9CqpC,EAASqjH,EAAS,SAAU/E,GAAch1K,EAAKstB,SAC3CttB,EAAKtD,MAAQq9K,EAAQ36K,SAAS+f,gBAAkBnf,EAAKtD,OACvDq9K,EAAUlzK,EAAImxD,OAAO+hH,EAAS/5K,EAAKtD,OAEhB,IAAjBuqJ,EAAMjpJ,SACRw6K,GAASF,aAAar9K,EAAQ8+K,GAC9BvB,GAASD,cAAct9K,EAAQ8+K,IAE7B/5K,EAAKqI,OACPmwK,GAASJ,WAAWn9K,EAAQ8+K,EAAS/5K,EAAKqI,OAExCrI,EAAK45K,QACPpB,GAASH,YAAYp9K,EAAQ8+K,EAAS/5K,EAAK45K,WAG/C3+K,EAAOwU,YAGP7H,GAAO,SAAU3M,GACnB,IAAI8+K,EAAS/5K,EAAMoiF,EAAe6kE,EAAQ,GAO1C,GANAA,EAAQhsJ,EAAO4L,IAAIE,OAAO,+CAC1BgzK,EAAU9+K,EAAO4L,IAAIoL,UAAUhX,EAAOuL,UAAU4I,WAAY,UACvD63I,EAAMjpJ,QAAU+7K,GACnB9yB,EAAMvlJ,KAAKq4K,GAEbA,EAAUA,GAAW9yB,EAAM,GACtB8yB,EAAL,CAIE/5K,EADEinJ,EAAMjpJ,OAAS,EACV,CACLqvB,MAAO,GACPC,OAAQ,GACRwQ,MAAO,GACPuc,MAAO,GACPhyC,MAAO,GACPuxK,OAAQ,GACRn1K,MAAO,GACP/H,KAAMq9K,EAAQ36K,SAAS+f,eAGlBw6J,GAAuB1+K,EAAQ8+K,GAEpC3D,GAAiBn7K,GAAQ+C,OAAS,IACpCokF,EAAgB,CACdlpF,KAAM,QACNwD,KAAM,UACN6L,MAAO,QACPE,OAAQ8wK,GAAQthI,eAAem+H,GAAiBn7K,IAAS,SAAU+5C,GAC7DA,EAAK16C,QACP06C,EAAKmK,UAAY,WACf,OAAOlkD,EAAOkO,UAAUi2C,WAAW,CACjCt3B,MAAO,KACP1lB,QAAS,CAAC4yC,EAAK16C,gBAO3B,IAAI0/K,EAAkB,CACpBt9K,KAAM,OACNyL,OAAQ,OACRC,UAAW,SACX6xK,aAAc,WACdp+J,QAAS,EACTtB,MAAO,CACL,CACE7d,KAAM,OACNyL,OAAQ,OACRs1C,QAAS,EACTw8H,cAAc,EACdp+J,QAAS,EACTiF,SAAU,CACRpkB,KAAM,UACN8L,SAAU,IAEZ+R,MAAO,CACL,CACEhS,MAAO,QACPrP,KAAM,QACN0wC,SAAUnzB,EAAM8iK,GAAQT,iBAAkB79K,IAE5C,CACEsN,MAAO,SACPrP,KAAM,SACN0wC,SAAUnzB,EAAM8iK,GAAQT,iBAAkB79K,IAE5C,CACEsN,MAAO,YACPrP,KAAM,OACNwD,KAAM,UACN6D,KAAM,OACNsH,SAAU,GACVW,SAAU,KACVC,OAAQ,CACN,CACElI,KAAM,OACNjG,MAAO,MAET,CACEiG,KAAM,cACNjG,MAAO,QAIb,CACEiO,MAAO,QACPrP,KAAM,QACNwD,KAAM,UACN6D,KAAM,OACNsH,SAAU,GACVW,SAAU,KACVC,OAAQ,CACN,CACElI,KAAM,OACNjG,MAAO,IAET,CACEiG,KAAM,MACNjG,MAAO,OAET,CACEiG,KAAM,SACNjG,MAAO,OAET,CACEiG,KAAM,YACNjG,MAAO,YAET,CACEiG,KAAM,eACNjG,MAAO,cAIb,CACEiO,MAAO,UACPrP,KAAM,QACNwD,KAAM,UACN6D,KAAM,OACNsH,SAAU,GACVW,SAAU,KACVC,OAAQ,CACN,CACElI,KAAM,OACNjG,MAAO,IAET,CACEiG,KAAM,OACNjG,MAAO,QAET,CACEiG,KAAM,SACNjG,MAAO,UAET,CACEiG,KAAM,QACNjG,MAAO,WAIb,CACEiO,MAAO,UACPrP,KAAM,SACNwD,KAAM,UACN6D,KAAM,OACNsH,SAAU,GACVW,SAAU,KACVC,OAAQ,CACN,CACElI,KAAM,OACNjG,MAAO,IAET,CACEiG,KAAM,MACNjG,MAAO,OAET,CACEiG,KAAM,SACNjG,MAAO,UAET,CACEiG,KAAM,SACNjG,MAAO,cAMjB8nF,IAGA0zF,GAAmB76K,GACrBA,EAAOiN,cAAcN,KAAK,CACxBjE,MAAO,kBACP8Y,SAAU,WACVzc,KAAMA,EACNsI,KAAM,CACJ,CACE3E,MAAO,UACPjH,KAAM,OACN6d,MAAOy/J,GAETT,GAAQL,gBAAgBj+K,IAE1B83C,SAAUt8B,EAAMqjK,GAAkB7+K,EAAQgsJ,KAG5ChsJ,EAAOiN,cAAcN,KAAK,CACxBjE,MAAO,kBACP3D,KAAMA,EACNsI,KAAM0xK,EACNjnI,SAAUt8B,EAAMqjK,GAAkB7+K,EAAQgsJ,OAI5CizB,GAAa,CAAEtyK,KAAMA,IAErBuyK,GAA2B,SAAUl/K,EAAQ4H,GAC/C,IAAIgE,EAAM5L,EAAO4L,IACb7G,EAAO,CACTstB,OAAQzmB,EAAIutC,SAASvxC,EAAK,WAAagE,EAAImzC,UAAUn3C,EAAK,UAC1Di7B,MAAOj3B,EAAImzC,UAAUn3C,EAAK,SAC1Bw3C,MAAOxzC,EAAImzC,UAAUn3C,EAAK,SAC1BwF,MAAO,GACP5D,MAAO,GACP/H,KAAMmG,EAAI1D,WAAWC,SAAS+f,eAUhC,OARApkB,GAAS0O,KAAK,oBAAoBxU,MAAM,MAAM,SAAUiE,GAClD+B,EAAOkO,UAAU0wK,UAAUh3K,EAAK,QAAU3J,KAC5C8G,EAAKqI,MAAQnP,MAGb68K,GAAkB96K,IACpBF,GAASuC,OAAO0C,EAAMu5K,GAAQN,sBAAsBpyK,EAAKhE,IAEpD7C,GAELo6K,GAAgB,SAAUvzK,EAAKwzK,EAAQC,GACzC,IAAIloK,EAAWvL,EAAIoL,UAAUooK,EAAQ,SACjCE,EAAeF,EAAOl7K,WACtBq7K,EAAY3zK,EAAIE,OAAOuzK,EAAQloK,GAAU,GACxCooK,IACHA,EAAY3zK,EAAIiE,OAAOwvK,GACnBloK,EAASI,WAC0B,YAAjCJ,EAASI,WAAWpT,SACtByH,EAAIygB,YAAYkzJ,EAAWpoK,EAASI,YAEpCJ,EAAS3U,aAAa+8K,EAAWpoK,EAASI,YAG5CJ,EAASlH,YAAYsvK,IAGzBA,EAAUtvK,YAAYmvK,GACjBE,EAAah2H,iBAChB19C,EAAI+I,OAAO2qK,IAGf,SAASE,GAAgBx/K,EAAQ2V,EAAMkrC,EAASh8C,GAC9C,IAAI+G,EAAM5L,EAAO4L,IACjB,SAASC,EAAUjE,EAAK3J,EAAMoB,IACR,IAAhBsW,EAAK5S,QAAgB1D,IACvBuM,EAAIC,UAAUjE,EAAK3J,EAAMoB,GAG7B,SAASo8D,EAAS7zD,EAAK3J,EAAMoB,IACP,IAAhBsW,EAAK5S,QAAgB1D,IACvBuM,EAAI6vD,SAAS7zD,EAAK3J,EAAMoB,GAGxBy7K,GAAkB96K,IACpBs+K,GAAQX,wBAAwB39K,EAAQ6E,GAE1C,IAAIE,EAAOF,EAAIyO,QAAQ4uC,YAAYC,SACnCniD,EAAO0L,YAAYC,UAAS,WAC1B7L,GAAS0O,KAAKmH,GAAM,SAAUypK,GAC5BvzK,EAAUuzK,EAAQ,QAASr6K,EAAK89B,OAChCh3B,EAAUuzK,EAAQ,QAASr6K,EAAKyE,OAChCqC,EAAUuzK,EAAQ,QAASr6K,EAAKq6C,OAChCqc,EAAS2jH,EAAQ,SAAUrF,GAAch1K,EAAKstB,SAC1CttB,EAAKtD,OAAS29K,EAAOl7K,WAAWC,SAAS+f,eAC3Ci7J,GAAcn/K,EAAO4L,IAAKwzK,EAAQr6K,EAAKtD,MAErCsD,EAAKqI,QAAUyzC,EAAQzzC,QACzBmwK,GAASF,aAAar9K,EAAQo/K,GAC9B7B,GAASJ,WAAWn9K,EAAQo/K,EAAQr6K,EAAKqI,WAG7CpN,EAAOwU,WAGX,IAAI0zE,GAAS,SAAUloF,GACrB,IACImX,EAAU2nK,EAASM,EAAQj4F,EAAepiF,EAE1C06K,EAHA7zK,EAAM5L,EAAO4L,IAEb+J,EAAO,GAEXwB,EAAWvL,EAAIoL,UAAUhX,EAAOuL,UAAU4I,WAAY,SACtD2qK,EAAUlzK,EAAIoL,UAAUhX,EAAOuL,UAAU4I,WAAY,SACrDrU,GAAS0O,KAAK2I,EAASxB,MAAM,SAAUsjE,GACrCn5E,GAAS0O,KAAKyqE,EAAI+yE,OAAO,SAAUD,GACjC,GAAIngJ,EAAImzC,UAAUgtG,EAAM,sBAAwBA,IAAS+yB,EAEvD,OADAnpK,EAAKlP,KAAKwyE,IACH,QAIbmmG,EAASzpK,EAAK,GACTypK,IAIHr6K,EADE4Q,EAAK5S,OAAS,EACT,CACLsvB,OAAQ,GACRwQ,MAAO,GACPr5B,MAAO,GACP41C,MAAO,GACPhyC,MAAO,GACP3L,KAAM29K,EAAOl7K,WAAWC,SAAS+f,eAG5Bg7J,GAAyBl/K,EAAQo/K,GAEtChE,GAAgBp7K,GAAQ+C,OAAS,IACnCokF,EAAgB,CACdlpF,KAAM,QACNwD,KAAM,UACN6L,MAAO,QACPE,OAAQ8wK,GAAQthI,eAAeo+H,GAAgBp7K,IAAS,SAAU+5C,GAC5DA,EAAK16C,QACP06C,EAAKmK,UAAY,WACf,OAAOlkD,EAAOkO,UAAUi2C,WAAW,CACjCt3B,MAAO,KACP1lB,QAAS,CAAC4yC,EAAK16C,gBAO3BogL,EAAiB,CACfh+K,KAAM,OACN+gD,QAAS,EACT5hC,QAAS,EACTiF,SAAU,CAAEpkB,KAAM,WAClB6d,MAAO,CACL,CACE7d,KAAM,UACNxD,KAAM,OACNqP,MAAO,WACPhI,KAAM,SACNiI,SAAU,KACVC,OAAQ,CACN,CACElI,KAAM,SACNjG,MAAO,SAET,CACEiG,KAAM,OACNjG,MAAO,SAET,CACEiG,KAAM,SACNjG,MAAO,WAIb,CACEoC,KAAM,UACNxD,KAAM,QACNqP,MAAO,YACPhI,KAAM,OACNiI,SAAU,KACVC,OAAQ,CACN,CACElI,KAAM,OACNjG,MAAO,IAET,CACEiG,KAAM,OACNjG,MAAO,QAET,CACEiG,KAAM,SACNjG,MAAO,UAET,CACEiG,KAAM,QACNjG,MAAO,WAIb,CACEiO,MAAO,SACPrP,KAAM,UAERkpF,IAGA2zF,GAAkB96K,GACpBA,EAAOiN,cAAcN,KAAK,CACxBjE,MAAO,iBACP3D,KAAMA,EACNyc,SAAU,WACVnU,KAAM,CACJ,CACE3E,MAAO,UACPjH,KAAM,OACN6d,MAAOmgK,GAETnB,GAAQL,gBAAgBj+K,IAE1B83C,SAAUt8B,EAAMgkK,GAAiBx/K,EAAQ2V,EAAM5Q,KAGjD/E,EAAOiN,cAAcN,KAAK,CACxBjE,MAAO,iBACP3D,KAAMA,EACNsI,KAAMoyK,EACN3nI,SAAUt8B,EAAMgkK,GAAiBx/K,EAAQ2V,EAAM5Q,OAIjD26K,GAAY,CAAE/yK,KAAMu7E,IAEpBnnF,GAAWrB,QAAQC,KAAKC,MAAMC,QAAQ,eAEtC8/K,GAAuB,CACzBh5J,OAAQ,CACN,kBAAmB,WACnB,MAAS,QAEXvf,WAAY,CAAEymC,OAAQ,KACtB+xI,aAAa,GAEXC,GAAY,WACd,OAAOhzH,GAAQL,QAAQ,UAErBszH,GAAY,WACd,OAAOjzH,GAAQL,QAAQ,UAErBuzH,GAAW,WACb,OAAOlzH,GAAQL,QAAQ,OAErBwzH,GAAkB,WACpB,OAAOnzH,GAAQL,QAAQ,OAErByzH,GAAY,WACd,OAAOpzH,GAAQL,QAAQ,OAErB0zH,GAAW,SAAUvqK,EAAM6sC,EAAS29H,EAAYC,EAAeC,QAC9C,IAAfA,IACFA,EAAaV,IAEf,IAAIrzB,EAAQuzB,KACZt3B,GAAS+D,EAAO+zB,EAAW15J,QAC3BquC,GAAOs3F,EAAO+zB,EAAWj5K,YACzB,IAAIk5K,EAAQR,KACZhxK,GAAOw9I,EAAOg0B,GAEd,IADA,IAAIC,EAAM,GACDl9K,EAAI,EAAGA,EAAIsS,EAAMtS,IAAK,CAE7B,IADA,IAAIkX,EAAKwlK,KACAn6K,EAAI,EAAGA,EAAI48C,EAAS58C,IAAK,CAChC,IAAImlF,EAAK1nF,EAAI88K,GAAcv6K,EAAIw6K,EAAgBJ,KAAoBC,KAC/Dr6K,EAAIw6K,GACN7gL,GAAIwrF,EAAI,QAAS,OAEf1nF,EAAI88K,GACN5gL,GAAIwrF,EAAI,QAAS,OAEnBj8E,GAAOi8E,EAAIl+B,GAAQL,QAAQ,OACvB6zH,EAAWT,aACbt7C,GAAMv5C,EAAI,QAAS,IAAMvoC,EAAU,KAErC1zC,GAAOyL,EAAIwwE,GAEbw1F,EAAI95K,KAAK8T,GAGX,OADAq6C,GAAS0rH,EAAOC,GACTj0B,GAGLk0B,GAAQ,SAAU58K,GACpB,OAAOA,EAAQgI,MAAM5G,WAEnBy7K,GAAa,SAAU78K,GACzB,IAAIimB,EAAYgjC,GAAQL,QAAQ,OAC5B/sD,EAAQotD,GAAQN,QAAQ3oD,EAAQgI,MAAMsrC,WAAU,IAEpD,OADApoC,GAAO+a,EAAWpqB,GACX+gL,GAAM32J,IAGX62J,GAAmB,SAAU1gL,EAAQ+rJ,GACvC/rJ,EAAOuL,UAAUO,OAAOigJ,EAAKngJ,OAAO,GACpC5L,EAAOuL,UAAUuhB,UAAS,IAExB6zJ,GAAyB,SAAU3gL,EAAQmX,GAC7Cq0I,GAAar0I,EAAU,SAAS3I,KAAKgN,EAAMklK,GAAkB1gL,KAE3D4gL,GAAa,SAAU5gL,EAAQssJ,GACjC99I,EAAKs8I,GAAcwB,EAAO,OAAO,SAAUrzE,GACzC4iG,GAAW77K,EAAQi5E,EAAIrtE,OACvB4C,EAAKs8I,GAAc7xE,EAAK,UAAU,SAAU8yE,GAC1C+vB,GAAY97K,EAAQ+rJ,EAAKngJ,cAI3Bi1K,GAAe,SAAUzuJ,GAC3B,OAAOu3B,EAASv3B,KAAkC,IAAxBA,EAAMvqB,QAAQ,MAEtCi5K,GAAW,SAAU9gL,EAAQwiD,EAAS7sC,GACxC,IAAI4kK,EAAgBG,GAAiB16K,GACjCo0F,EAAU,CACZztE,OAAQ4zJ,EACRnzK,WAAYqzK,GAAqBz6K,GACjC4/K,YAAaiB,GAAatG,EAAcnoJ,SAAWkpJ,GAAet7K,IAEhEssJ,EAAQ4zB,GAASvqK,EAAM6sC,EAAS,EAAG,EAAG4xC,GAC1C70F,GAAI+sJ,EAAO,cAAe,SAC1B,IAAI1jJ,EAAO63K,GAAWn0B,GAEtB,OADAtsJ,EAAO+L,cAAcnD,GACd4iJ,GAAamuB,GAAU35K,GAAS,8BAA8B4B,KAAI,SAAU0qJ,GAOjF,OANIgvB,GAAet7K,IACjBskI,GAAMgoB,EAAO,QAAS/jI,GAAM+jI,EAAO,UAErC33I,GAAO23I,EAAO,eACds0B,GAAW5gL,EAAQssJ,GACnBq0B,GAAuB3gL,EAAQssJ,GACxBA,EAAM1gJ,SACZ8Q,MAAM,OAEPqkK,GAAc,CAAEp+K,OAAQm+K,IAE5B,SAASE,GAAUp1K,EAAKhE,EAAK3J,EAAMoB,GACjC,GAAoB,OAAhBuI,EAAImJ,SAAoC,OAAhBnJ,EAAImJ,QAC9BnF,EAAI6vD,SAAS7zD,EAAK3J,EAAMoB,QAExB,GAAIuI,EAAIuL,SACN,IAAK,IAAI9P,EAAI,EAAGA,EAAIuE,EAAIuL,SAASpQ,OAAQM,IACvC29K,GAAUp1K,EAAKhE,EAAIuL,SAAS9P,GAAIpF,EAAMoB,GAK9C,IAAI4hL,GAA2B,SAAUjhL,EAAQmX,GAC/C,IAAIvL,EAAM5L,EAAO4L,IACb7G,EAAO,CACTqtB,MAAOxmB,EAAIutC,SAAShiC,EAAU,UAAYvL,EAAImzC,UAAU5nC,EAAU,SAClEkb,OAAQzmB,EAAIutC,SAAShiC,EAAU,WAAavL,EAAImzC,UAAU5nC,EAAU,UACpE+pK,YAAat1K,EAAIutC,SAAShiC,EAAU,mBAAqBvL,EAAImzC,UAAU5nC,EAAU,eACjFgqK,YAAav1K,EAAImzC,UAAU5nC,EAAU,0BAA4BvL,EAAImzC,UAAU5nC,EAAU,gBAAkBomK,GAASR,oBAAoB/8K,EAAO4L,IAAKuL,EAAU,WAC9J02B,OAAQjiC,EAAImzC,UAAU5nC,EAAU,oBAAsBvL,EAAImzC,UAAU5nC,EAAU,WAAaomK,GAASR,oBAAoB/8K,EAAO4L,IAAKuL,EAAU,UAC9I2mK,YAAalyK,EAAImzC,UAAU5nC,EAAU,yBACrCmpC,UAAW10C,EAAIE,OAAO,UAAWqL,GAAU,GAC3CioC,MAAOxzC,EAAImzC,UAAU5nC,EAAU,UAUjC,OARArX,GAAS0O,KAAK,oBAAoBxU,MAAM,MAAM,SAAUiE,GAClD+B,EAAOkO,UAAU0wK,UAAUznK,EAAU,QAAUlZ,KACjD8G,EAAKqI,MAAQnP,MAGb88K,GAAoB/6K,IACtBF,GAASuC,OAAO0C,EAAMu5K,GAAQN,sBAAsBpyK,EAAKuL,IAEpDpS,GAELq8K,GAAqB,SAAUphL,EAAQmX,EAAUpS,GACnD,IAAI6G,EAAM5L,EAAO4L,IACbokB,EAAQ,GACRrJ,EAAS,GAuBb,GAtBAqJ,EAAMovB,MAAQr6C,EAAKq6C,MACnBz4B,EAAO0L,OAAS0nJ,GAAch1K,EAAKstB,QAC/BzmB,EAAImzC,UAAU5nC,EAAU,WAAa+jK,GAAmBl7K,GAC1DgwB,EAAMoC,MAAQ0nJ,GAAe/0K,EAAKqtB,OAElCzL,EAAOyL,MAAQ2nJ,GAAch1K,EAAKqtB,OAEhC8oJ,GAAmBl7K,IACrB2mB,EAAO,gBAAkBozJ,GAAch1K,EAAK8oC,QAC5ClnB,EAAO,kBAAoBozJ,GAAch1K,EAAKm8K,aAC9CphL,GAASuC,OAAO2tB,EAAO,CACrB,wBAAyBjrB,EAAK+4K,YAC9B,wBAAyB/4K,EAAKo8K,YAC9B,kBAAmBp8K,EAAK8oC,UAG1B/tC,GAASuC,OAAO2tB,EAAO,CACrB6d,OAAQ9oC,EAAK8oC,OACbszI,YAAap8K,EAAKo8K,YAClBD,YAAan8K,EAAKm8K,cAGlBhG,GAAmBl7K,IACjBmX,EAAShE,SACX,IAAK,IAAI9P,EAAI,EAAGA,EAAI8T,EAAShE,SAASpQ,OAAQM,IAC5C29K,GAAUp1K,EAAKuL,EAAShE,SAAS9P,GAAI,CACnC,eAAgB02K,GAAch1K,EAAK8oC,QACnC,eAAgB9oC,EAAK+4K,YACrB,QAAW/D,GAAch1K,EAAKo8K,eAKlCp8K,EAAKyE,MACP1J,GAASuC,OAAOskB,EAAQ/a,EAAIw2C,WAAWr9C,EAAKyE,QAE5Cmd,EAAS7mB,GAASuC,OAAO,GAAIuJ,EAAIw2C,WAAWx2C,EAAImzC,UAAU5nC,EAAU,UAAWwP,GAEjFqJ,EAAMxmB,MAAQoC,EAAIy2C,eAAe17B,GACjC/a,EAAIsZ,WAAW/N,EAAU6Y,IAEvBqxJ,GAAoB,SAAUrhL,EAAQmX,EAAUtS,GAClD,IACIy8K,EACAv8K,EAFA6G,EAAM5L,EAAO4L,IAGbmvK,GAAoB/6K,IACtBs+K,GAAQX,wBAAwB39K,EAAQ6E,GAE1CE,EAAOF,EAAIyO,QAAQ4uC,YAAYC,UACZ,IAAfp9C,EAAKq6C,cACAr6C,EAAKq6C,MAEdp/C,EAAO0L,YAAYC,UAAS,WACrBwL,IACHA,EAAW4pK,GAAYp+K,OAAO3C,EAAQ+E,EAAK2Q,MAAQ,EAAG3Q,EAAK4Q,MAAQ,IAErEyrK,GAAmBphL,EAAQmX,EAAUpS,GACrCu8K,EAAa11K,EAAIE,OAAO,UAAWqL,GAAU,GACzCmqK,IAAev8K,EAAKu7C,SACtB10C,EAAI+I,OAAO2sK,IAERA,GAAcv8K,EAAKu7C,UACtBghI,EAAa11K,EAAIiE,OAAO,WACxByxK,EAAWt8K,UAAajE,GAASixB,GAAkC,IAA7B,2BACtC7a,EAAS3U,aAAa8+K,EAAYnqK,EAASI,aAE7CgmK,GAASF,aAAar9K,EAAQmX,GAC1BpS,EAAKqI,OACPmwK,GAASJ,WAAWn9K,EAAQmX,EAAUpS,EAAKqI,OAE7CpN,EAAOwU,QACPxU,EAAOm3C,gBAGPoqI,GAAS,SAAUvhL,EAAQwhL,GAC7B,IACIrqK,EAAUsqK,EAAUC,EAAUv6F,EAA0Bw6F,EADxD/1K,EAAM5L,EAAO4L,IACgC7G,EAAO,IACxC,IAAZy8K,GACFrqK,EAAWvL,EAAIoL,UAAUhX,EAAOuL,UAAU4I,WAAY,SAClDgD,IACFpS,EAAOk8K,GAAyBjhL,EAAQmX,MAG1CsqK,EAAW,CACTn0K,MAAO,OACPrP,KAAM,QAERyjL,EAAW,CACTp0K,MAAO,OACPrP,KAAM,SAGNo9K,GAAkBr7K,GAAQ+C,OAAS,IACjCgC,EAAKq6C,QACPr6C,EAAKq6C,MAAQr6C,EAAKq6C,MAAMv9C,QAAQ,0BAA2B,KAE7DslF,EAAgB,CACdlpF,KAAM,QACNwD,KAAM,UACN6L,MAAO,QACPE,OAAQ8wK,GAAQthI,eAAeq+H,GAAkBr7K,IAAS,SAAU+5C,GAC9DA,EAAK16C,QACP06C,EAAKmK,UAAY,WACf,OAAOlkD,EAAOkO,UAAUi2C,WAAW,CACjCt3B,MAAO,QACP1lB,QAAS,CAAC4yC,EAAK16C,gBAO3BsiL,EAAmB,CACjBlgL,KAAM,OACNyL,OAAQ,OACRC,UAAW,SACX6xK,aAAc,WACdp+J,QAAS,EACTtB,MAAO,CACL,CACE7d,KAAM,OACNu9K,cAAc,EACdp+J,QAAS,EACT1T,OAAQ,OACRs1C,QAAS,EACT38B,SAAU,CACRpkB,KAAM,UACN8L,SAAU,IAEZ+R,MAAO07J,GAAqBh7K,GAAU,CACpCyhL,EACAC,EACA,CACEp0K,MAAO,QACPrP,KAAM,QACN0wC,SAAUnzB,EAAM8iK,GAAQT,iBAAkB79K,IAE5C,CACEsN,MAAO,SACPrP,KAAM,SACN0wC,SAAUnzB,EAAM8iK,GAAQT,iBAAkB79K,IAE5C,CACEsN,MAAO,eACPrP,KAAM,eAER,CACEqP,MAAO,eACPrP,KAAM,eAER,CACEqP,MAAO,SACPrP,KAAM,UAER,CACEqP,MAAO,UACPrP,KAAM,UACNwD,KAAM,aAEN,CACFggL,EACAC,EACA,CACEp0K,MAAO,QACPrP,KAAM,QACN0wC,SAAUnzB,EAAM8iK,GAAQT,iBAAkB79K,IAE5C,CACEsN,MAAO,SACPrP,KAAM,SACN0wC,SAAUnzB,EAAM8iK,GAAQT,iBAAkB79K,MAIhD,CACEsN,MAAO,YACPrP,KAAM,QACNwD,KAAM,UACN6D,KAAM,OACNkI,OAAQ,CACN,CACElI,KAAM,OACNjG,MAAO,IAET,CACEiG,KAAM,OACNjG,MAAO,QAET,CACEiG,KAAM,SACNjG,MAAO,UAET,CACEiG,KAAM,QACNjG,MAAO,WAIb8nF,IAGA4zF,GAAoB/6K,GACtBA,EAAOiN,cAAcN,KAAK,CACxBjE,MAAO,mBACP3D,KAAMA,EACNyc,SAAU,WACVnU,KAAM,CACJ,CACE3E,MAAO,UACPjH,KAAM,OACN6d,MAAOqiK,GAETrD,GAAQL,gBAAgBj+K,IAE1B83C,SAAUt8B,EAAM6lK,GAAmBrhL,EAAQmX,KAG7CnX,EAAOiN,cAAcN,KAAK,CACxBjE,MAAO,mBACP3D,KAAMA,EACNsI,KAAMs0K,EACN7pI,SAAUt8B,EAAM6lK,GAAmBrhL,EAAQmX,MAI7CyqK,GAAc,CAAEj1K,KAAM40K,IAEtBM,GAAS/hL,GAAS0O,KAClBszK,GAAmB,SAAU9hL,EAAQs9J,EAASC,EAAelB,EAAY0lB,GAC3E,IAAIz4B,EAAS2P,GAAUj5J,GACnBgiL,EAAa,WACfC,IAAwB9kK,QAAQ+kK,GAA0B1zK,MAAK,SAAU2zK,GACvE,IAAI71B,EAAQK,GAAYL,MAAM61B,EAAe74B,GAC7CgD,EAAM/9I,OAAOuN,EAAIwtI,IAAS96I,MAAK,SAAU89I,GACvC,IAAIue,EAASh+G,GAAQJ,SAAS,IAC9BlmD,GAAM+lJ,EAAOue,GACb9gB,GAASuC,GACT,IAAI5iI,EAAM1pB,EAAO4L,IAAIkf,YACrBpB,EAAIW,SAASwgJ,EAAOj/J,MAAO,GAC3B8d,EAAIY,OAAOugJ,EAAOj/J,MAAO,GACzB5L,EAAOuL,UAAUwf,OAAOrB,UAI1B04J,EAAgC,SAAUj5K,GAC5C,OAAO,WACL,OAAO2U,EAAO5X,KAAKlG,EAAO4L,IAAIoL,UAAUhX,EAAOuL,UAAU4I,WAAYhL,IAAWvH,IAAIirD,GAAQN,WAG5F21H,EAA2BE,EAA8B,WACzDH,EAAwBG,EAA8B,SACtDC,EAAmB,SAAUt2B,GAC/B,OAAOY,GAAYL,MAAMP,EAAMzC,IAE7B3pG,EAAU,SAAU2sG,GACtB,MAAO,CACLl6H,MAAOwnJ,GAAgBttB,EAAM1gJ,OAC7BymB,OAAQunJ,GAAgBttB,EAAM1gJ,SAG9B02K,EAAe,SAAUtiL,EAAQuiL,EAASj2B,GAC5C,IAAIx4G,EAAU6L,EAAQ2sG,GAClBi2B,EAAQnwJ,QAAU0hB,EAAQ1hB,OAASmwJ,EAAQlwJ,SAAWyhB,EAAQzhB,SAChE0pJ,GAAsB/7K,EAAQssJ,EAAM1gJ,MAAO22K,EAAQnwJ,MAAOmwJ,EAAQlwJ,QAClE2pJ,GAAkBh8K,EAAQssJ,EAAM1gJ,MAAOkoC,EAAQ1hB,MAAO0hB,EAAQzhB,UAG9DmwJ,EAAiB,SAAUlG,GAC7B2F,IAAwBzzK,MAAK,SAAUu9I,GACrCs2B,EAAiBt2B,GAAMv9I,MAAK,SAAU89I,GACpC,IAAIqR,EAAUV,GAAaL,QAAQP,EAAY/P,EAAOP,GAClD02B,EAAa9iI,EAAQ2sG,GACzBgwB,EAAQhwB,EAAOqR,GAASnvJ,MAAK,SAAUkb,GACrC44J,EAAatiL,EAAQyiL,EAAYn2B,GACjCtsJ,EAAOuL,UAAUwf,OAAOrB,GACxB1pB,EAAOwU,QACP+oJ,EAAc1sF,MAAMy7E,GACpB0tB,GAAgB1tB,aAKpBo2B,EAAmB,SAAUpG,GAC/B,OAAO2F,IAAwB7kK,MAAK,SAAU2uI,GAC5C,OAAOs2B,EAAiBt2B,GAAM3uI,MAAK,SAAUkvI,GAC3C,IAAIlgI,EAAMygC,GAAQN,QAAQvsD,EAAOmP,UAC7BwuJ,EAAUV,GAAaL,QAAQP,EAAY/P,EAAOP,GAClDiR,EAAatL,GAAUL,eAAe91I,EAAM6Q,EAAKtO,EAAO5B,QAC5D,OAAO4gK,GAASJ,SAASpwB,EAAOqR,EAASX,UAI3C2lB,EAAmB,SAAUrG,GAC/ByF,EAAcziL,MAAMkP,MAAK,SAAUmH,GACjC,IAAIitK,EAAahhL,EAAI+T,GAAM,SAAUsjE,GACnC,OAAOzjB,GAAKyjB,MAEdgpG,IAAwBzzK,MAAK,SAAUu9I,GACrCs2B,EAAiBt2B,GAAMv9I,MAAK,SAAU89I,GACpC,IAAIlgI,EAAMygC,GAAQN,QAAQvsD,EAAOmP,UAC7B6tJ,EAAatL,GAAUpnF,MAAMl+C,GAC7BuxI,EAAUV,GAAaF,UAAUV,EAAY/P,EAAOP,EAAM62B,EAAY5lB,GAC1Esf,EAAQhwB,EAAOqR,GAASnvJ,MAAK,SAAUkb,GACrC1pB,EAAOuL,UAAUwf,OAAOrB,GACxB1pB,EAAOwU,QACP+oJ,EAAc1sF,MAAMy7E,gBAM9Bu1B,GAAO,CACLgB,mBAAoB,WAClBL,EAAellB,EAAQ2b,eAEzB6J,mBAAoB,WAClBN,EAAellB,EAAQ0b,aAEzB+J,wBAAyB,WACvBP,EAAellB,EAAQwa,mBAEzBkL,uBAAwB,WACtBR,EAAellB,EAAQ2a,kBAEzBgL,wBAAyB,WACvBT,EAAellB,EAAQ6a,sBAEzB+K,uBAAwB,WACtBV,EAAellB,EAAQ+a,qBAEzB8K,kBAAmB,WACjBX,EAAellB,EAAQmf,eAEzB2G,kBAAmB,WACjBZ,EAAellB,EAAQkf,YAEzB6G,eAAgB,SAAUr5B,GACxB+3B,EAAcxiL,IAAImjL,KAClBF,EAAellB,EAAQkf,YAEzB8G,gBAAiB,SAAUt5B,GACzB+3B,EAAcxiL,IAAImjL,MAEpBa,uBAAwB,SAAUv5B,GAChC24B,EAAiBrlB,EAAQkc,kBAE3BgK,sBAAuB,SAAUx5B,GAC/B24B,EAAiBrlB,EAAQmc,iBAE3BgK,eAAgBzB,IACf,SAAUpgD,EAAM3jI,GACjB+B,EAAOgO,WAAW/P,EAAM2jI,MAE1BigD,GAAO,CACL6B,eAAgBloK,EAAMomK,GAAYj1K,KAAM3M,GACxC2jL,cAAenoK,EAAMomK,GAAYj1K,KAAM3M,GAAQ,GAC/C4jL,iBAAkBpoK,EAAMkkK,GAAU/yK,KAAM3M,GACxC6jL,kBAAmBroK,EAAMyjK,GAAWtyK,KAAM3M,KACzC,SAAU4hI,EAAM3jI,GACjB+B,EAAOgO,WAAW/P,GAAM,SAAU+4C,EAAI/hB,GACpC2sG,EAAK3sG,UAIP7mB,GAAW,CAAE0zK,iBAAkBA,IAE/B9R,GAAO,SAAUpsK,GACnB,IAAIG,EAAS+Z,EAAO5X,KAAKtC,EAAQgI,MAAM62E,iBAAiB7gF,IAAIirD,GAAQN,SAAS7vC,MAAM9Y,GACnF,MAAO,CACLG,OAAQ0G,EAAS1G,GACjB+/K,KAAMr5K,EAAS7G,GACfsjK,OAAQz8J,EAAS62J,GAAS,EAAG,MAG7ByiB,GAAW,SAAUC,EAAUp1H,GACjC,IAAIs4G,EAAS,WACX,OAAOzF,GAAS7yG,IAElB,MAAO,CACL7qD,OAAQ0G,EAASmkD,GACjBk1H,KAAMr5K,EAASu5K,GACf9c,OAAQA,IAGR+c,GAAS,SAAUD,EAAUp1H,GAC/B,MAAO,CACL7qD,OAAQ0G,EAASmkD,GACjBk1H,KAAMr5K,EAASu5K,GACf9c,OAAQz8J,EAAS62J,GAAS,EAAG,MAG7B4iB,GAAa,CACflU,KAAMA,GACN+T,SAAUA,GACV12K,KAAM42K,IAGJE,GAAQ,SAAU92H,GACpB,IAAIC,EAASF,EAAUvmD,MAAM,KAAMwmD,GAC/B+2H,EAAW,GACXhnK,EAAO,SAAUkoC,GACnB,QAAgBroC,IAAZqoC,EACF,MAAM,IAAIxoC,MAAM,uCAElBsnK,EAAS39K,KAAK6+C,IAEZyvB,EAAS,SAAUzvB,GACrB8+H,EAAW71K,EAAO61K,GAAU,SAAU1oL,GACpC,OAAOA,IAAM4pD,MAGb++H,EAAU,WAEZ,IADA,IAAI79K,EAAO,GACFmV,EAAK,EAAGA,EAAK7Y,UAAUC,OAAQ4Y,IACtCnV,EAAKmV,GAAM7Y,UAAU6Y,GAEvB,IAAIqS,EAAQs/B,EAAOzmD,MAAM,KAAML,GAC/BgI,EAAK41K,GAAU,SAAU9+H,GACvBA,EAAQt3B,OAGZ,MAAO,CACL5Q,KAAMA,EACN23D,OAAQA,EACRsvG,QAASA,IAITxrJ,GAAW,SAAUyrJ,GACvB,IAAIC,EAAW39B,EAAM09B,GAAU,SAAUt2J,GACvC,MAAO,CACL5Q,KAAM4Q,EAAM5Q,KACZ23D,OAAQ/mD,EAAM+mD,WAGdsvG,EAAUz9B,EAAM09B,GAAU,SAAUt2J,GACtC,OAAOA,EAAMq2J,WAEf,MAAO,CACLE,SAAUA,EACVF,QAASA,IAGT1gH,GAAS,CAAE9zD,OAAQgpB,IAEnB2rJ,GAAU,SAAU7zK,EAAQkF,EAAG7Z,EAAGutJ,EAAMk7B,EAASC,EAAMniH,GACzD,MAAO,CACL5xD,OAAQlG,EAASkG,GACjBkF,EAAGpL,EAASoL,GACZ7Z,EAAGyO,EAASzO,GACZutJ,KAAMA,EACNk7B,QAASA,EACTC,KAAMA,EACNniH,IAAK93D,EAAS83D,KAGdtuC,GAAS,SAAU1lB,EAAQ+2C,GAC7B,OAAO,SAAUq/H,GACf,GAAKp2K,EAAOo2K,GAAZ,CAGA,IAAIh0K,EAASk8C,GAAQN,QAAQo4H,EAASh0K,QAClC44I,EAAO,WACTo7B,EAASl+I,mBAEPg+I,EAAU,WACZE,EAASj+I,kBAEPg+I,EAAOn+B,EAAQk+B,EAASl7B,GACxB1kJ,EAAM2/K,GAAQ7zK,EAAQg0K,EAAS3rI,QAAS2rI,EAAS1rI,QAASswG,EAAMk7B,EAASC,EAAMC,GACnFr/H,EAAQzgD,MAGR+/K,GAAS,SAAUhhL,EAASoqB,EAAOzf,EAAQ+2C,EAASu/H,GACtD,IAAIn+K,EAAUutB,GAAO1lB,EAAQ+2C,GAE7B,OADA1hD,EAAQgI,MAAMrE,iBAAiBymB,EAAOtnB,EAASm+K,GACxC,CAAE9vG,OAAQv5D,EAAMu5D,GAAQnxE,EAASoqB,EAAOtnB,EAASm+K,KAEtDC,GAAS,SAAUlhL,EAASoqB,EAAOzf,EAAQ+2C,GAC7C,OAAOs/H,GAAOhhL,EAASoqB,EAAOzf,EAAQ+2C,GAAS,IAE7CyvB,GAAS,SAAUnxE,EAASoqB,EAAOs3B,EAASu/H,GAC9CjhL,EAAQgI,MAAMkqB,oBAAoB9H,EAAOs3B,EAASu/H,IAGhD55G,GAAWxgE,GAAS,GACpBs6K,GAAS,SAAUnhL,EAASoqB,EAAOs3B,GACrC,OAAOw/H,GAAOlhL,EAASoqB,EAAOi9C,GAAU3lB,IAGtCnjD,GAAiBJ,OAAOC,UAAUG,eAClC6iL,GAAY,SAAU/mI,EAAK1F,GAC7B,OAAOA,GAEL2F,GAAY,SAAUC,GACxB,OAAO,WAEL,IADA,IAAIC,EAAU,IAAIz3C,MAAM7D,UAAUC,QACzBM,EAAI,EAAGA,EAAI+6C,EAAQr7C,OAAQM,IAClC+6C,EAAQ/6C,GAAKP,UAAUO,GAEzB,GAAuB,IAAnB+6C,EAAQr7C,OACV,MAAM,IAAI+Z,MAAM,4BAGlB,IADA,IAAI7Z,EAAM,GACD2C,EAAI,EAAGA,EAAIw4C,EAAQr7C,OAAQ6C,IAAK,CACvC,IAAIy4C,EAAYD,EAAQx4C,GACxB,IAAK,IAAIpI,KAAO6gD,EACVl8C,GAAeD,KAAKm8C,EAAW7gD,KACjCyF,EAAIzF,GAAO2gD,EAAOl7C,EAAIzF,GAAM6gD,EAAU7gD,KAI5C,OAAOyF,IAGPgiL,GAAU/mI,GAAU8mI,IAEpBE,GAAWn8K,GAAI,kBACfo8K,GAAW,CAAEtlL,QAASqlL,GAASrlL,SAE/BulL,GAAU,SAAUhxF,GACtB,IAAIn0F,EAAWglL,GAAQ,CAAEI,WAAYF,GAAStlL,QAAQ,YAAcu0F,GAChEh+E,EAAMy2C,GAAQL,QAAQ,OAC1BjtD,GAAI6W,EAAK,OAAQ,gBACjBmyI,GAASnyI,EAAK,CACZ0mC,SAAU,QACVxV,KAAM,MACNC,IAAK,MACLnV,MAAO,OACPC,OAAQ,SAEV+yI,GAAMhvJ,EAAK+uK,GAAStlL,QAAQ,YAC5BulK,GAAMhvJ,EAAKnW,EAASolL,YACpB,IAAIzhL,EAAU,WACZ,OAAOwS,GAELyxB,EAAU,WACZkiH,GAAS3zI,IAEX,MAAO,CACLxS,QAASA,EACTikC,QAASA,IAITy9I,GAAW1Q,GAAQ,CACrB,UACA,UACA,SACA,SAEE2Q,GAAW3Q,GAAQ,CACrB,UACA,QACA,OACA,YAEE4Q,GAAU5Q,GAAQ,CACpB,YACA,OACA,OACA,cAGE6Q,GAAU,SAAUxnI,EAAK1F,GAC3B,OAAO+oH,GAAS/oH,EAAGjR,OAAS2W,EAAI3W,OAAQiR,EAAGhR,MAAQ0W,EAAI1W,QAErDm+I,GAAY,SAAU13J,GACxB,OAAOlQ,EAAOH,KAAK2jJ,GAAStzI,EAAMnY,IAAKmY,EAAMhyB,OAE3C05D,GAAS,SAAUumB,EAAU7sB,GAC/B6sB,EAASvmB,OAAOtG,EAAK9nB,OAAQ8nB,EAAK7nB,QAEhCo+I,GAAO,SAAUC,EAAS3lL,GAC5B,IAAIomC,EAAU++I,GAAQnlL,GAClB4lL,EAAQd,GAAO1+I,EAAQziC,UAAW,YAAagiL,EAAQE,WACvDC,EAAMhB,GAAO1+I,EAAQziC,UAAW,UAAWgiL,EAAQI,MACnDC,EAAQlB,GAAO1+I,EAAQziC,UAAW,YAAagiL,EAAQM,MACvDC,EAAOpB,GAAO1+I,EAAQziC,UAAW,WAAYgiL,EAAQQ,WACrDv+I,EAAU,WACZxB,EAAQwB,UACRk+I,EAAIhxG,SACJkxG,EAAMlxG,SACNoxG,EAAKpxG,SACL8wG,EAAM9wG,UAEJ7sD,EAAQ,SAAUnkB,GACpB+K,GAAO/K,EAAQsiC,EAAQziC,YAErB2lJ,EAAO,WACTQ,GAAS1jH,EAAQziC,YAEnB,OAAO2hL,GAAS,CACd3hL,QAASyiC,EAAQziC,QACjBskB,MAAOA,EACPqhI,KAAMA,EACN1hH,QAASA,KAGTw+I,GAAYf,GAAS,CACvBG,QAASA,GACTj2B,QAASk2B,GACTC,KAAMA,GACNjwH,OAAQA,KAGN4wH,GAAS,SAAU7qK,EAAI8qK,GACzB,IAAIC,EAAQ,KACRx5I,EAAS,WACG,OAAVw5I,IACFtnL,EAAW4zC,aAAa0zI,GACxBA,EAAQ,OAGRC,EAAW,WAEb,IADA,IAAIjgL,EAAO,GACFmV,EAAK,EAAGA,EAAK7Y,UAAUC,OAAQ4Y,IACtCnV,EAAKmV,GAAM7Y,UAAU6Y,GAET,OAAV6qK,GACFtnL,EAAW4zC,aAAa0zI,GAE1BA,EAAQtnL,EAAW60B,YAAW,WAC5BtY,EAAG5U,MAAM,KAAML,GACfggL,EAAQ,OACPD,IAEL,MAAO,CACLv5I,OAAQA,EACRy5I,SAAUA,IAId,SAASC,KACP,IAAI1f,EAAWlpJ,EAAO5B,OAClBsjE,EAAQ,WACVwnF,EAAWlpJ,EAAO5B,QAEhBiyB,EAAS,SAAU2gD,EAAMv2C,GAC3B,IAAI76C,EAASspK,EAASplK,KAAI,SAAUq8C,GAClC,OAAO6wC,EAAK22F,QAAQxnI,EAAK1F,MAG3B,OADAyuH,EAAWlpJ,EAAOH,KAAK46B,GAChB76C,GAELipL,EAAU,SAAU34J,EAAO8gE,GAC7B,IAAI83F,EAAa93F,EAAK0gE,QAAQxhI,GAC9B44J,EAAWp4K,MAAK,SAAUzJ,GACxB,IAAI/G,EAASmwC,EAAO2gD,EAAM/pF,GAC1B/G,EAAOwQ,MAAK,SAAU5S,GACpBirL,EAAOxC,QAAQ6B,KAAKtqL,UAItBirL,EAASljH,GAAO9zD,OAAO,CAAEq2K,KAAM/B,GAAM,CAAC,WAC1C,MAAO,CACLwC,QAASA,EACTnnG,MAAOA,EACPqnG,OAAQA,EAAOtC,UAInB,SAASuC,KACP,MAAO,CACLH,QAASprK,EACTikE,MAAOjkE,GAIX,SAASwrK,KACP,IAAIC,EAAcF,KACdG,EAAcP,KACdQ,EAAYF,EACZ14K,EAAK,WACP44K,EAAU1nG,QACV0nG,EAAYD,GAEV9zI,EAAM,WACR+zI,EAAU1nG,QACV0nG,EAAYF,GAEVL,EAAU,SAAU34J,EAAO8gE,GAC7Bo4F,EAAUP,QAAQ34J,EAAO8gE,IAEvBq4F,EAAO,WACT,OAAOD,IAAcD,GAEvB,MAAO,CACL34K,GAAIA,EACJ6kC,IAAKA,EACLg0I,KAAMA,EACNR,QAASA,EACTE,OAAQI,EAAYJ,QAIxB,IAAIx4K,GAAQ,SAAU4tE,EAAU6S,EAAM7uF,GACpC,IAAImhE,GAAS,EACTylH,EAASljH,GAAO9zD,OAAO,CACzBqY,MAAOi8J,GAAM,IACb56B,KAAM46B,GAAM,MAEViD,EAAWL,KACXf,EAAO,WACTL,EAAKp8B,OACD69B,EAASD,SACXC,EAASj0I,MACT0zI,EAAOxC,QAAQ96B,SAGf89B,EAAgBf,GAAON,EAAM,KAC7BsB,EAAK,SAAUvjL,GACjB4hL,EAAKz9J,MAAMnkB,GACXqjL,EAAS94K,KACTu4K,EAAOxC,QAAQn8J,SAEbq/J,EAAY,SAAUv5J,GACxBq5J,EAAcr6I,SACdo6I,EAAST,QAAQ34J,EAAO8gE,IAE1Bs4F,EAASP,OAAOX,KAAK9oK,MAAK,SAAU4Q,GAClC8gE,EAAKp5B,OAAOumB,EAAUjuD,EAAMohC,WAE9B,IAAI9gD,EAAK,WACP8yD,GAAS,GAEPjuB,EAAM,WACRiuB,GAAS,GAEPomH,EAAc,SAAUzrK,GAC1B,OAAO,WAEL,IADA,IAAIvV,EAAO,GACFmV,EAAK,EAAGA,EAAK7Y,UAAUC,OAAQ4Y,IACtCnV,EAAKmV,GAAM7Y,UAAU6Y,GAEnBylD,GACFrlD,EAAElV,MAAM,KAAML,KAIhBm/K,EAAO72F,EAAK62F,KAAKH,GAAQ,CAC3BM,UAAWE,EACXA,KAAMwB,EAAYxB,GAClBE,KAAMsB,EAAYD,GAClBnB,UAAWoB,EAAYH,EAAcZ,YACnCxmL,GACA4nC,EAAU,WACZ89I,EAAK99I,WAEP,MAAO,CACLjkC,QAAS+hL,EAAK/hL,QACd0jL,GAAIA,EACJh5K,GAAIA,EACJ6kC,IAAKA,EACLtL,QAASA,EACTg/I,OAAQA,EAAOtC,WAGfkD,GAAW,CAAEp5K,MAAOA,IAEpBq5K,GAAc,SAAUzrG,EAAUh8E,QACnB,IAAbA,IACFA,EAAW,IAEb,IAAI6uF,OAAyB7xE,IAAlBhd,EAAS6uF,KAAqB7uF,EAAS6uF,KAAOu3F,GACzD,OAAOoB,GAASp5K,MAAM4tE,EAAU6S,EAAM7uF,IAEpC0nL,GAAU,CAAEvS,UAAWsS,IAEvBE,GAAW,WACb,IAAIf,EAASljH,GAAO9zD,OAAO,CACzBs2B,KAAMg+I,GAAM,CACV,SACA,aAGAzuH,EAAS,SAAU7/C,EAAG7Z,GACxB6qL,EAAOxC,QAAQl+I,KAAKtwB,EAAG7Z,IAEzB,MAAO,CACL05D,OAAQA,EACRmxH,OAAQA,EAAOtC,WAIfsD,GAAc,WAChB,IAAIhB,EAASljH,GAAO9zD,OAAO,CACzBs2B,KAAMg+I,GAAM,CACV,SACA,SACA,aAGAxzK,EAASmN,EAAO5B,OAChB4rK,EAAWF,KACfE,EAASjB,OAAO1gJ,KAAK/oB,MAAK,SAAU4Q,GAClCrd,EAAOnC,MAAK,SAAUzD,GACpB87K,EAAOxC,QAAQl+I,KAAKnY,EAAM+5J,SAAU/5J,EAAMg6J,SAAUj9K,SAGxD,IAAIwxF,EAAS,SAAUxxF,GACrB4F,EAASmN,EAAOH,KAAK5S,IAEnBzL,EAAM,WACR,OAAOqR,GAET,MAAO,CACL4rF,OAAQA,EACRj9F,IAAKA,EACLo2D,OAAQoyH,EAASpyH,OACjBmxH,OAAQA,EAAOtC,WAIf0D,GAAwB,SAAUrgL,GACpC,MAAuC,SAAhCtI,GAAIsI,EAAK,oBAEdsgL,GAA6B,SAAUv3K,EAAQ24I,GACjD,OAAOmC,GAAU96I,EAAQ,oBAAqB24I,IAG5C6+B,GAAoB3hB,GAAO3mK,QAAQ,wBACnCuoL,GAAa,SAAUrhB,EAAM55J,EAAW46J,GAC1C,IAAI9rF,EAAW4rG,KACXQ,EAAWV,GAAQvS,UAAUn5F,EAAU,IACvCqsG,EAAaxqK,EAAO5B,OACpBqsK,EAAa,SAAU3kL,EAASnC,GAClC,OAAOqc,EAAO5X,KAAK5G,GAAIsE,EAASnC,KAElCw6E,EAAS4qG,OAAO1gJ,KAAK/oB,MAAK,SAAU4Q,GAClCu6J,EAAWv6J,EAAMrd,SAAU,YAAYnC,MAAK,SAAUg6K,GACpD,IAAI36B,EAAawjB,GAAUD,OAAOpjJ,EAAMrd,SAAU,OAClD2zH,GAAMt2G,EAAMrd,SAAU,MAAOk9I,EAAa7/H,EAAMg6J,SAAW,SAE7DO,EAAWv6J,EAAMrd,SAAU,eAAenC,MAAK,SAAUi6K,GACvD,IAAIC,EAAarX,GAAUD,OAAOpjJ,EAAMrd,SAAU,QAClD2zH,GAAMt2G,EAAMrd,SAAU,OAAQ+3K,EAAa16J,EAAM+5J,SAAW,YAGhE,IAAIY,EAAW,SAAUh4K,EAAQwU,GAC/B,IAAIyjK,EAAOvX,GAAUD,OAAOzgK,EAAQwU,GAChC0jK,EAAOnqL,SAASY,GAAIqR,EAAQ,gBAAkBwU,GAAM,IACxD,OAAOyjK,EAAOC,GAEhBR,EAASxB,OAAOt9B,KAAKnsI,MAAK,WACxB6+D,EAAS38E,MAAMkP,MAAK,SAAUmC,GAC5B23K,EAAW95K,MAAK,SAAU89I,GACxBi8B,EAAW53K,EAAQ,YAAYnC,MAAK,SAAUyqE,GAC5C,IAAI7vD,EAAQu/J,EAASh4K,EAAQ,OAC7BgE,GAAOhE,EAAQ,oBACfk2K,EAAOxC,QAAQnQ,aAAa5nB,EAAOljI,EAAO1qB,SAASu6E,EAAK,QAE1DsvG,EAAW53K,EAAQ,eAAenC,MAAK,SAAU+gG,GAC/C,IAAInmF,EAAQu/J,EAASh4K,EAAQ,QAC7BgE,GAAOhE,EAAQ,qBACfk2K,EAAOxC,QAAQtQ,YAAYznB,EAAOljI,EAAO1qB,SAAS6wG,EAAQ,QAE5D+4D,GAAKL,QAAQlB,EAAMza,EAAOyb,EAAY56J,YAI5C,IAAIm4C,EAAU,SAAU30C,EAAQwU,GAC9B0hK,EAAOxC,QAAQyE,cACf7sG,EAASsgB,OAAO5rF,GAChBpR,GAAIoR,EAAQ,gBAAkBwU,EAAKzmB,SAAS6pB,GAAM5X,EAAQwU,GAAM,KAChEigJ,GAAMz0J,EAAQw3K,IACd7jD,GAAM3zH,EAAQ,UAAW,OACzB03K,EAASf,GAAGvgB,EAAKhjK,WAEfglL,EAAYhE,GAAOhe,EAAKhjK,SAAU,aAAa,SAAUiqB,GACvDs6I,GAAKF,SAASp6I,EAAMrd,WACtB20C,EAAQt3B,EAAMrd,SAAU,OAEtB23J,GAAKD,SAASr6I,EAAMrd,WACtB20C,EAAQt3B,EAAMrd,SAAU,WAGxB24I,EAAS,SAAUx7I,GACrB,OAAOsO,GAAGtO,EAAGi5J,EAAK+c,SAEhBkF,EAA2B,SAAUr4K,GACvC,OAAO86I,GAAU96I,EAAQ,QAAS24I,GAAQ/6I,QAAO,SAAU+9I,GACzD,OAAO47B,GAA2B57B,EAAOhD,GAAQjsI,OAAO4qK,QAGxDgB,EAAYlE,GAAOhe,EAAK+c,OAAQ,aAAa,SAAU91J,GACzDg7J,EAAyBh7J,EAAMrd,UAAU6L,MAAK,WACxC4rI,GAAOp6H,EAAMrd,WACf23J,GAAKzgI,QAAQk/H,MAEd,SAAUza,GACXg8B,EAAaxqK,EAAOH,KAAK2uI,GACzBgc,GAAKL,QAAQlB,EAAMza,EAAOyb,EAAY56J,SAGtC06B,EAAU,WACZkhJ,EAAUh0G,SACVk0G,EAAUl0G,SACVszG,EAASxgJ,UACTygI,GAAKzgI,QAAQk/H,IAEXkB,EAAU,SAAUhO,GACtBqO,GAAKL,QAAQlB,EAAM9M,EAAK8N,EAAY56J,IAElC05K,EAASljH,GAAO9zD,OAAO,CACzBqkK,aAAciQ,GAAM,CAClB,QACA,QACA,QAEFpQ,YAAaoQ,GAAM,CACjB,QACA,QACA,WAEF2E,YAAa3E,GAAM,MAErB,MAAO,CACLt8I,QAASA,EACTogI,QAASA,EACT35J,GAAI+5K,EAAS/5K,GACb6kC,IAAKk1I,EAASl1I,IACd+1I,SAAU1tK,EAAM8sJ,GAAKlhI,KAAM2/H,GAC3BoiB,SAAU3tK,EAAM8sJ,GAAKnhI,KAAM4/H,GAC3B8f,OAAQA,EAAOtC,WAIfx8I,GAAW,SAAUg/H,EAAMiB,GAC7B,IAAID,EAAa5E,GAAa9wI,OAC1B+2J,EAAUhB,GAAWrhB,EAAMiB,EAAYD,GACvC8e,EAASljH,GAAO9zD,OAAO,CACzBw5K,aAAclF,GAAM,CAAC,UACrBmF,YAAanF,GAAM,CAAC,UACpBoF,UAAWpF,GAAM,MAiBnB,OAfAiF,EAAQvC,OAAO3S,aAAa92J,MAAK,SAAU4Q,GACzC64J,EAAOxC,QAAQgF,aAAar7J,EAAMs+H,SAClC,IAAIljI,EAAQ2+I,EAAW3+I,MAAM4E,EAAM5E,QAAS4E,EAAMs+H,SAClDioB,GAAYL,aAAalmJ,EAAMs+H,QAASljI,EAAO4E,EAAMirD,MAAO8uF,GAC5D8e,EAAOxC,QAAQiF,YAAYt7J,EAAMs+H,YAEnC88B,EAAQvC,OAAOiC,YAAY1rK,MAAK,SAAU4Q,GACxC64J,EAAOxC,QAAQkF,eAEjBH,EAAQvC,OAAO9S,YAAY32J,MAAK,SAAU4Q,GACxC64J,EAAOxC,QAAQgF,aAAar7J,EAAMs+H,SAClC,IAAIljI,EAAQ4+I,EAAW5+I,MAAM4E,EAAM5E,QAAS4E,EAAMs+H,SAClDioB,GAAYR,YAAY/lJ,EAAMs+H,QAASljI,EAAO4E,EAAMuhF,SAAUy4D,GAC9D6e,EAAOxC,QAAQiF,YAAYt7J,EAAMs+H,YAE5B,CACLh+I,GAAI86K,EAAQ96K,GACZ6kC,IAAKi2I,EAAQj2I,IACb+1I,SAAUE,EAAQF,SAClBC,SAAUC,EAAQD,SAClBthJ,QAASuhJ,EAAQvhJ,QACjBg/I,OAAQA,EAAOtC,WAGfiF,GAAc,CAAE35K,OAAQk4B,IAExB0hJ,GAAkB,WACpB,IAAI5/J,EAAYgjC,GAAQL,QAAQ,OAUhC,OATA+7F,GAAS1+H,EAAW,CAClBizB,SAAU,SACVzqB,OAAQ,IACRD,MAAO,IACPxR,QAAS,IACT68B,OAAQ,IACR5P,OAAQ,MAEV/+B,GAAOzB,KAAQwc,GACRA,GAEL6/J,GAAQ,SAAU1pL,EAAQ6pB,GAC5B,OAAO7pB,EAAO4P,OAASs0K,GAAW72K,KAAKssK,GAAU35K,GAASypL,MAAqBvF,GAAWlU,KAAKnjH,GAAQN,QAAQvsD,EAAOmP,YAEpHw6K,GAAW,SAAU3pL,EAAQ+mK,GAC3B/mK,EAAO4P,QACTm6I,GAASgd,EAAKhjK,WAGd6lL,GAAY,CACdtqL,IAAKoqL,GACL/0K,OAAQg1K,IAGNE,GAAgB,SAAU7pL,GAC5B,IAII8pL,EAAQC,EAJRC,EAAelsK,EAAO5B,OACtBqW,EAASzU,EAAO5B,OAChB6qJ,EAAOjpJ,EAAO5B,OACdmjJ,EAA2B,iBAE3B4qB,EAAU,SAAUriL,GACtB,MAAwB,UAAjBA,EAAIzD,UAET67J,EAAc,SAAUp4J,GAC1B,OAAO5H,EAAO4L,IAAIutC,SAASvxC,EAAK,UAAY5H,EAAO4L,IAAImzC,UAAUn3C,EAAK,UAEpEsiL,EAAa,WACf,OAAO33J,GAEL2pJ,EAAW,WACb,OAAOnV,EAAKrqJ,MAAMwnK,GAAWlU,KAAKnjH,GAAQN,QAAQvsD,EAAO0T,cAEvDm0B,EAAU,WACZtV,EAAO/jB,MAAK,SAAU27K,GACpBA,EAAGtiJ,aAELk/H,EAAKv4J,MAAK,SAAU9N,GAClBkpL,GAAUj1K,OAAO3U,EAAQU,OAgE7B,OA7DAV,EAAOsO,GAAG,QAAQ,WAChB,IAAInB,EAAYk2J,GAAegX,GAAU/W,aACrC8mB,EAAUR,GAAUtqL,IAAIU,GAE5B,GADA+mK,EAAOjpJ,EAAOH,KAAKysK,GACf3O,GAAkBz7K,IAAW26K,GAAmB36K,GAAS,CAC3D,IAAImqL,EAAKX,GAAY35K,OAAOu6K,EAASj9K,GACrCg9K,EAAG77K,KACH67K,EAAGtD,OAAO0C,UAAUnsK,MAAK,SAAU4Q,GACjCg8J,EAAelsK,EAAOH,KAAK3d,EAAOuL,UAAUugB,aAE9Cq+J,EAAGtD,OAAOwC,aAAajsK,MAAK,SAAU4Q,GACpC,IAAIq8J,EAAWr8J,EAAMs+H,QAAQ1gJ,MAC7BmwK,GAAsB/7K,EAAQqqL,EAAUzQ,GAAgByQ,GAAWxQ,GAAewQ,OAEpFF,EAAGtD,OAAOyC,YAAYlsK,MAAK,SAAU4Q,GACnC,IAAIs+H,EAAQt+H,EAAMs+H,QACd+9B,EAAW/9B,EAAM1gJ,MACrBouK,GAAgB1tB,GAChB09B,EAAax7K,MAAK,SAAUkb,GAC1B1pB,EAAOuL,UAAUwf,OAAOrB,GACxB1pB,EAAOwU,WAETwnK,GAAkBh8K,EAAQqqL,EAAUzQ,GAAgByQ,GAAWxQ,GAAewQ,IAC9ErqL,EAAO0L,YAAY3E,SAErBwrB,EAASzU,EAAOH,KAAKwsK,OAGzBnqL,EAAOsO,GAAG,qBAAqB,SAAUR,GACvC,IAAIixD,EAAYjxD,EAAE6C,OACds5K,EAAQlrH,KACV+qH,EAASh8K,EAAEskB,MACX23J,EAAY/pB,EAAYjhG,OAG5B/+D,EAAOsO,GAAG,iBAAiB,SAAUR,GACnC,IAAIixD,EAAYjxD,EAAE6C,OAClB,GAAIs5K,EAAQlrH,GAAY,CACtB,IAAIutF,EAAQvtF,EACZ,GAAIsgG,EAAyBr7J,KAAK+lL,GAAY,CAC5C,IAAIO,EAAW3wJ,WAAW0lI,EAAyBriK,KAAK+sL,GAAW,IAC/DQ,EAAiBz8K,EAAEskB,MAAQk4J,EAAWR,EAC1C9pL,EAAO4L,IAAI6vD,SAAS6wF,EAAO,QAASi+B,EAAiB,SAChD,CACL,IAAIC,EAAiB,GACrB1qL,GAAS0O,KAAK89I,EAAM32I,MAAM,SAAUsjE,GAClCn5E,GAAS0O,KAAKyqE,EAAI+yE,OAAO,SAAUD,GACjC,IAAI35H,EAAQpyB,EAAO4L,IAAIutC,SAAS4yG,EAAM,SAAS,GAC/Cy+B,EAAe/jL,KAAK,CAClBslJ,KAAMA,EACN35H,MAAOA,UAIbtyB,GAAS0O,KAAKg8K,GAAgB,SAAUC,GACtCzqL,EAAO4L,IAAI6vD,SAASgvH,EAAY1+B,KAAM,QAAS0+B,EAAYr4J,OAC3DpyB,EAAO4L,IAAIC,UAAU4+K,EAAY1+B,KAAM,QAAS,cAKjD,CACLm+B,WAAYA,EACZhO,SAAUA,EACVr0I,QAASA,IAIT6iJ,GAAQ9uB,GAAInO,SAAS,CACvB,CAAEvxI,KAAM,CAAC,YACT,CAAE0gF,MAAO,CAAC,YACV,CACEqzE,OAAQ,CACN,UACA,WAGJ,CAAEr6J,KAAM,CAAC,cAEP+0K,GAAS,SAAU17H,GAIrB,YAHgB,IAAZA,IACFA,OAAUhyC,GAELytK,GAAMxuK,KAAK+yC,IAEhB27H,GAAejnB,GAASA,GAAS,GAAI+mB,IAAQ,CAAExuK,KAAMyuK,KAErDE,GAAW,SAAU57H,EAASq6F,GAChC,OAAOqD,GAAYL,MAAMr9F,EAASq6F,GAAQlsI,MAAK,SAAUkvI,GACvD,IAAIxlJ,EAAM6lJ,GAAYX,MAAMM,GACxBnmJ,EAAQ66D,EAAUl6D,GAAK,SAAU+O,GACnC,OAAOuG,GAAG6yC,EAASp5C,MAErB,OAAO1P,EAAMvE,KAAI,SAAU+zJ,GACzB,MAAO,CACLxvJ,MAAOsE,EAASkrJ,GAChB7uJ,IAAK2D,EAAS3D,WAKlB6lB,GAAO,SAAUsiC,EAASq6F,GAC5B,IAAItmD,EAAY6nF,GAAS57H,EAASq6F,GAClC,OAAOtmD,EAAUxmF,MAAK,WACpB,OAAOouK,GAAa1uK,KAAK+yC,MACxB,SAAUG,GACX,OAAOA,EAAKjpD,QAAU,EAAIipD,EAAKtoD,MAAM/D,OAAS6nL,GAAa3a,OAAOhhH,EAASG,EAAKtoD,MAAMsoD,EAAKjpD,QAAU,IAAMykL,GAAah1K,KAAKq5C,OAG7HitE,GAAO,SAAUjtE,EAASq6F,GAC5B,IAAItmD,EAAY6nF,GAAS57H,EAASq6F,GAClC,OAAOtmD,EAAUxmF,MAAK,WACpB,OAAOouK,GAAa1uK,UACnB,SAAUkzC,GACX,OAAOA,EAAKjpD,QAAU,GAAK,EAAIykL,GAAa3a,OAAOhhH,EAASG,EAAKtoD,MAAMsoD,EAAKjpD,QAAU,IAAMykL,GAAahuF,MAAM3tC,OAG/G67H,GAAiB,CACnBn+J,KAAMA,GACNuvG,KAAMA,IAGJ6uD,GAAW39H,EAAU,QAAS,UAAW,SAAU,WACnD49H,GAAW,CAAEn7K,OAAQk7K,IAErBE,GAAQrvB,GAAInO,SAAS,CACvB,CAAE/qJ,OAAQ,CAAC,YACX,CACE4L,GAAI,CACF,UACA,WAGJ,CAAE/H,MAAO,CAAC,cAER2kL,GAAS,SAAUt6G,EAASu6G,EAAUC,EAAMC,GAC9C,OAAOz6G,EAAQp0D,KAAK2uK,EAAUC,EAAMC,IAElCl3K,GAAW,SAAUm3K,GACvB,OAAOA,EAAK9uK,KAAKod,EAAUA,EAAUA,IAEnC2xJ,GAAWN,GAAMvoL,OACjB4L,GAAK28K,GAAM38K,GACXk9K,GAAUP,GAAM1kL,MAChBklL,GAAO,CACT/oL,OAAQ6oL,GACRj9K,GAAIA,GACJ/H,MAAOilL,GACPxvB,KAAMkvB,GACN/2K,SAAUA,IAGRu3K,GAAQ9vB,GAAInO,SAAS,CACvB,CAAEk+B,SAAU,CAAC,QACb,CACEC,SAAU,CACR,YACA,eAGJ,CACEC,MAAO,CACL,QACA,UACA,SACA,cAIFC,GAAiB,SAAUC,GAC7B,OAAOL,GAAMG,MAAME,EAAS7jK,QAAS6jK,EAASC,UAAWD,EAASprG,SAAUorG,EAASE,YAEnFC,GAAa,SAAU3gL,GACzB,OAAOA,EAAU9M,MAAM,CACrBktL,SAAU,SAAUjiK,GAClB,OAAOmjC,GAAQN,QAAQ7iC,EAAII,iBAE7B8hK,SAAU,SAAUO,EAAWC,GAC7B,OAAOX,GAAKt3K,SAASg4K,IAEvBN,MAAO,SAAU3jK,EAAO8jK,EAASrrG,EAAQsrG,GACvC,OAAO/jK,MAITyjK,GAAWD,GAAMC,SACjBC,GAAWF,GAAME,SACjBC,GAAQH,GAAMG,MACdQ,GAAS,SAAU9gL,GACrB,IAAI2c,EAAQgkK,GAAW3gL,GACvB,OAAO89I,GAAYnhI,IAEjBokK,GAAUtB,GAASn7K,OACnBu8C,GAAY,CACdu/H,SAAUA,GACVC,SAAUA,GACVC,MAAOA,GACPC,eAAgBA,GAChBO,OAAQA,GACR/1G,MAAOg2G,IAGL91G,GAAqB,SAAUtsC,EAAKtmC,GACtC,IAAI8lB,EAAMwgB,EAAIxmC,SAAS0mB,cAEvB,OADAmiK,GAAwB7iK,EAAK9lB,GACtB8lB,GAEL6iK,GAA0B,SAAU7iK,EAAK9lB,GAC3C8lB,EAAI8sD,mBAAmB5yE,EAAQgI,QAE7Bye,GAAW,SAAUX,EAAK4hK,GAC5BA,EAAK9uK,MAAK,SAAU1O,GAClB4b,EAAI41D,eAAexxE,EAAElC,UACpB,SAAUkC,EAAGhM,GACd4nB,EAAIW,SAASvc,EAAElC,MAAO9J,MACrB,SAAUgM,GACX4b,EAAI6wC,cAAczsD,EAAElC,WAGpB4gL,GAAY,SAAU9iK,EAAK4hK,GAC7BA,EAAK9uK,MAAK,SAAU1O,GAClB4b,EAAI+iK,aAAa3+K,EAAElC,UAClB,SAAUkC,EAAGhM,GACd4nB,EAAIY,OAAOxc,EAAElC,MAAO9J,MACnB,SAAUgM,GACX4b,EAAI8wC,YAAY1sD,EAAElC,WAGlB8gL,GAAmB,SAAUxiJ,EAAKiiJ,EAAWC,GAC/C,IAAI91G,EAAQpsC,EAAIxmC,SAAS0mB,cAGzB,OAFAC,GAASisD,EAAO61G,GAChBK,GAAUl2G,EAAO81G,GACV91G,GAELq2G,GAAgB,SAAUziJ,EAAKhiB,EAAO8jK,EAASrrG,EAAQsrG,GACzD,IAAIviK,EAAMwgB,EAAIxmC,SAAS0mB,cAGvB,OAFAV,EAAIW,SAASnC,EAAMtc,MAAOogL,GAC1BtiK,EAAIY,OAAOq2D,EAAO/0E,MAAOqgL,GAClBviK,GAELkjK,GAAS,SAAUjnJ,GACrB,MAAO,CACL2B,KAAM78B,EAASk7B,EAAK2B,MACpBC,IAAK98B,EAASk7B,EAAK4B,KACnB6uH,MAAO3rJ,EAASk7B,EAAKywH,OACrBr5G,OAAQtyC,EAASk7B,EAAKoX,QACtB3qB,MAAO3nB,EAASk7B,EAAKvT,OACrBC,OAAQ5nB,EAASk7B,EAAKtT,UAGtBw6J,GAAe,SAAUnjK,GAC3B,IAAIojK,EAAQpjK,EAAIqjK,iBACZpnJ,EAAOmnJ,EAAM/pL,OAAS,EAAI+pL,EAAM,GAAKpjK,EAAIw0F,wBAC7C,OAAOv4E,EAAKvT,MAAQ,GAAKuT,EAAKtT,OAAS,EAAIvU,EAAOH,KAAKgoB,GAAM/jC,IAAIgrL,IAAU9uK,EAAO5B,QAGhF8wK,GAAQpxB,GAAInO,SAAS,CACvB,CACEyV,IAAK,CACH,QACA,UACA,SACA,YAGJ,CACEr3H,IAAK,CACH,QACA,UACA,SACA,cAIFohJ,GAAY,SAAU/iJ,EAAKzoC,EAAM60E,GACnC,OAAO70E,EAAKorD,GAAQN,QAAQ+pB,EAAMxsD,gBAAiBwsD,EAAMrsD,YAAa4iC,GAAQN,QAAQ+pB,EAAMttB,cAAestB,EAAMpsD,YAE/GgjK,GAAY,SAAUhjJ,EAAK3+B,GAC7B,OAAOA,EAAU9M,MAAM,CACrBktL,SAAU,SAAUjiK,GAClB,MAAO,CACLw5I,IAAKz4J,EAASif,GACdmiB,IAAK/tB,EAAO5B,OAGhB0vK,SAAU,SAAUO,EAAWC,GAC7B,MAAO,CACLlpB,IAAKn1G,IAAO,WACV,OAAO2+H,GAAiBxiJ,EAAKiiJ,EAAWC,MAE1CvgJ,IAAKkiB,IAAO,WACV,OAAOjwC,EAAOH,KAAK+uK,GAAiBxiJ,EAAKkiJ,EAAYD,SAI3DN,MAAO,SAAU3jK,EAAO8jK,EAASrrG,EAAQsrG,GACvC,MAAO,CACL/oB,IAAKn1G,IAAO,WACV,OAAO4+H,GAAcziJ,EAAKhiB,EAAO8jK,EAASrrG,EAAQsrG,MAEpDpgJ,IAAKkiB,IAAO,WACV,OAAOjwC,EAAOH,KAAKgvK,GAAcziJ,EAAKy2C,EAAQsrG,EAAS/jK,EAAO8jK,YAMpEmB,GAAa,SAAUjjJ,EAAKkjJ,GAC9B,IAAI1jK,EAAM0jK,EAAOlqB,MACjB,GAAIx5I,EAAIE,UAAW,CACjB,IAAIyjK,EAAWD,EAAOvhJ,MAAMt9B,QAAO,SAAU++K,GAC3C,OAAyB,IAAlBA,EAAI1jK,aAEb,OAAOyjK,EAASzrL,KAAI,SAAU0rL,GAC5B,OAAON,GAAMnhJ,IAAIghB,GAAQN,QAAQ+gI,EAAItkI,cAAeskI,EAAIpjK,UAAW2iC,GAAQN,QAAQ+gI,EAAIxjK,gBAAiBwjK,EAAIrjK,gBAC3GtN,YAAW,WACZ,OAAOswK,GAAU/iJ,EAAK8iJ,GAAM9pB,IAAKx5I,MAGnC,OAAOujK,GAAU/iJ,EAAK8iJ,GAAM9pB,IAAKx5I,IAGjC6jK,GAAW,SAAUrjJ,EAAK3+B,GAC5B,IAAI6hL,EAASF,GAAUhjJ,EAAK3+B,GAC5B,OAAO4hL,GAAWjjJ,EAAKkjJ,IAErBI,GAAa,SAAUtjJ,EAAK3+B,GAC9B,IAAIkiL,EAAYF,GAASrjJ,EAAK3+B,GAC9B,OAAOkiL,EAAUhvL,MAAM,CACrBykK,IAAK,SAAUh7I,EAAO8jK,EAASrrG,EAAQsrG,GACrC,IAAIviK,EAAMwgB,EAAIxmC,SAAS0mB,cAGvB,OAFAV,EAAIW,SAASnC,EAAMtc,MAAOogL,GAC1BtiK,EAAIY,OAAOq2D,EAAO/0E,MAAOqgL,GAClBviK,GAETmiB,IAAK,SAAU3jB,EAAO8jK,EAASrrG,EAAQsrG,GACrC,IAAIviK,EAAMwgB,EAAIxmC,SAAS0mB,cAGvB,OAFAV,EAAIW,SAASs2D,EAAO/0E,MAAOqgL,GAC3BviK,EAAIY,OAAOpC,EAAMtc,MAAOogL,GACjBtiK,MAKTgkK,GAAiB,SAAUC,EAAe93K,EAAG7Z,EAAG4xL,EAAM7qL,GACxD,GAAe,IAAXA,EACF,OAAO,EACF,GAAI8S,IAAM+3K,EACf,OAAO7qL,EAAS,EAGlB,IADA,IAAIglL,EAAS6F,EACJvqL,EAAI,EAAGA,EAAIN,EAAQM,IAAK,CAC/B,IAAIsiC,EAAOgoJ,EAActqL,GACrBwqL,EAAYvtL,KAAKyiH,IAAIltG,EAAI8vB,EAAK2B,MAClC,GAAItrC,GAAK2pC,EAAKoX,OAAQ,CACpB,GAAI/gD,EAAI2pC,EAAK4B,KAAOsmJ,EAAY9F,EAC9B,OAAO1kL,EAAI,EAEX0kL,EAAS8F,GAIf,OAAO,GAELC,GAAS,SAAUnoJ,EAAM9vB,EAAG7Z,GAC9B,OAAO6Z,GAAK8vB,EAAK2B,MAAQzxB,GAAK8vB,EAAKywH,OAASp6J,GAAK2pC,EAAK4B,KAAOvrC,GAAK2pC,EAAKoX,QAGrEgxI,GAAe,SAAU3hK,EAAK4hK,EAAUn4K,EAAG7Z,EAAG2pC,GAChD,IAAIsoJ,EAAiB,SAAUnsL,GAC7B,IAAI4c,EAAI0N,EAAIxgB,MAAMwe,cAGlB,OAFA1L,EAAE2L,SAAS2jK,EAASpiL,MAAO9J,GAC3B4c,EAAEoO,UAAS,GACJpO,GAELivK,EAAgB,SAAU7rL,GAC5B,IAAI4c,EAAIuvK,EAAensL,GACvB,OAAO4c,EAAEw/F,yBAEPn7G,EAASwhJ,GAAMypC,GAAUjrL,OACzB/E,EAAS0vL,GAAeC,EAAe93K,EAAG7Z,EAAG2pC,EAAKywH,MAAOrzJ,GAC7D,OAAOkrL,EAAejwL,IAEpBkwL,GAAS,SAAU9hK,EAAK9gB,EAAMuK,EAAG7Z,GACnC,IAAI0iB,EAAI0N,EAAIxgB,MAAMwe,cAClB1L,EAAEyvK,WAAW7iL,EAAKM,OAClB,IAAIkhL,EAAQpuK,EAAEquK,iBACVqB,EAAYvqB,GAAQipB,GAAO,SAAUnnJ,GACvC,OAAOmoJ,GAAOnoJ,EAAM9vB,EAAG7Z,GAAK8hB,EAAOH,KAAKgoB,GAAQ7nB,EAAO5B,UAEzD,OAAOkyK,EAAUxsL,KAAI,SAAU+jC,GAC7B,OAAOooJ,GAAa3hK,EAAK9gB,EAAMuK,EAAG7Z,EAAG2pC,OAIrC0oJ,GAAmB,SAAUjiK,EAAK9gB,EAAMuK,EAAG7Z,GAC7C,IAAI0iB,EAAI0N,EAAIxgB,MAAMwe,cACdvX,EAAQM,GAAS7H,GACrB,OAAOu4J,GAAQhxJ,GAAO,SAAUzV,GAE9B,OADAshB,EAAEyvK,WAAW/wL,EAAEwO,OACRkiL,GAAOpvK,EAAEw/F,wBAAyBroG,EAAG7Z,GAAKsyL,GAAWliK,EAAKhvB,EAAGyY,EAAG7Z,GAAK8hB,EAAO5B,WAGnFoyK,GAAa,SAAUliK,EAAK9gB,EAAMuK,EAAG7Z,GACvC,OAAO0uB,GAAOpf,GAAQ4iL,GAAO9hK,EAAK9gB,EAAMuK,EAAG7Z,GAAKqyL,GAAiBjiK,EAAK9gB,EAAMuK,EAAG7Z,IAE7EuyL,GAAW,SAAUniK,EAAK9gB,EAAMuK,EAAG7Z,GACrC,IAAI0iB,EAAI0N,EAAIxgB,MAAMwe,cAClB1L,EAAEyvK,WAAW7iL,EAAKM,OAClB,IAAI+5B,EAAOjnB,EAAEw/F,wBACTswE,EAAWluL,KAAKssB,IAAI+Y,EAAK2B,KAAMhnC,KAAKC,IAAIolC,EAAKywH,MAAOvgJ,IACpD44K,EAAWnuL,KAAKssB,IAAI+Y,EAAK4B,IAAKjnC,KAAKC,IAAIolC,EAAKoX,OAAQ/gD,IACxD,OAAOsyL,GAAWliK,EAAK9gB,EAAMkjL,EAAUC,IAGrCC,IAAmB,EACnBC,IAAoB,EACpBC,GAAuB,SAAUjpJ,EAAM9vB,GACzC,OAAOA,EAAI8vB,EAAK2B,KAAO3B,EAAKywH,MAAQvgJ,EAAI64K,GAAmBC,IAEzDE,GAAsB,SAAUziK,EAAKzb,EAAQm+K,GAC/C,IAAIpwK,EAAI0N,EAAIxgB,MAAMwe,cAGlB,OAFA1L,EAAEyvK,WAAWx9K,EAAO/E,OACpB8S,EAAEoO,SAASgiK,GACJpwK,GAELqwK,GAAkB,SAAU3iK,EAAK9gB,EAAMuK,GACzC,IAAIm5K,EAAc5iK,EAAIxgB,MAAMwe,cAC5B4kK,EAAYb,WAAW7iL,EAAKM,OAC5B,IAAI+5B,EAAOqpJ,EAAY9wE,wBACnB4wE,EAAoBF,GAAqBjpJ,EAAM9vB,GAC/CkG,EAAI+yK,IAAsBJ,GAAmB9xF,GAAQ0zD,GACzD,OAAOv0I,EAAEzQ,GAAM1J,KAAI,SAAU+O,GAC3B,OAAOk+K,GAAoBziK,EAAKzb,EAAQm+K,OAGxCG,GAAgB,SAAU7iK,EAAK9gB,EAAMuK,GACvC,IAAI8vB,EAAOr6B,EAAKM,MAAMsyG,wBAClB4wE,EAAoBF,GAAqBjpJ,EAAM9vB,GACnD,OAAOiI,EAAOH,KAAKkxK,GAAoBziK,EAAK9gB,EAAMwjL,KAEhDh9H,GAAS,SAAU1lC,EAAK9gB,EAAMuK,GAChC,IAAIkG,EAA8B,IAA1B5I,GAAS7H,GAAMvI,OAAeksL,GAAgBF,GACtD,OAAOhzK,EAAEqQ,EAAK9gB,EAAMuK,IAGlBq5K,GAAyB,SAAU9iK,EAAKvW,EAAG7Z,GAC7C,OAAO8hB,EAAO5X,KAAKkmB,EAAIxgB,MAAMsjL,uBAAuBr5K,EAAG7Z,IAAIohB,MAAK,SAAUq7B,GACxE,GAAuB,OAAnBA,EAAI4Q,WACN,OAAOvrC,EAAO5B,OAEhB,IAAIwC,EAAI0N,EAAIxgB,MAAMwe,cAGlB,OAFA1L,EAAE2L,SAASouB,EAAI4Q,WAAY5Q,EAAIz6C,QAC/B0gB,EAAEoO,WACKhP,EAAOH,KAAKe,OAGnBywK,GAAsB,SAAU/iK,EAAKvW,EAAG7Z,GAC1C,OAAO8hB,EAAO5X,KAAKkmB,EAAIxgB,MAAMujL,oBAAoBt5K,EAAG7Z,KAElDozL,GAAkB,SAAUhjK,EAAK9gB,EAAMuK,EAAG7Z,GAC5C,IAAI0iB,EAAI0N,EAAIxgB,MAAMwe,cAClB1L,EAAEyvK,WAAW7iL,EAAKM,OAClB,IAAI+5B,EAAOjnB,EAAEw/F,wBACTswE,EAAWluL,KAAKssB,IAAI+Y,EAAK2B,KAAMhnC,KAAKC,IAAIolC,EAAKywH,MAAOvgJ,IACpD44K,EAAWnuL,KAAKssB,IAAI+Y,EAAK4B,IAAKjnC,KAAKC,IAAIolC,EAAKoX,OAAQ/gD,IACxD,OAAOuyL,GAASniK,EAAK9gB,EAAMkjL,EAAUC,IAEnCY,GAAkB,SAAUjjK,EAAKvW,EAAG7Z,GACtC,OAAO6wD,GAAQH,UAAUtgC,EAAKvW,EAAG7Z,GAAGohB,MAAK,SAAUw2C,GACjD,IAAImiB,EAAW,WACb,OAAOjkB,GAAO1lC,EAAKwnC,EAAM/9C,IAE3B,OAAiC,IAA1B1C,GAASygD,GAAM7wD,OAAegzE,IAAaq5G,GAAgBhjK,EAAKwnC,EAAM/9C,EAAG7Z,GAAGmhB,QAAQ44D,OAG3Fu5G,GAAkB5rL,SAASwrL,uBAAyBA,GAAyBxrL,SAASyrL,oBAAsBA,GAAsBE,GAClIE,GAAc,SAAUrlJ,EAAKr0B,EAAG7Z,GAClC,IAAIowB,EAAMygC,GAAQN,QAAQriB,EAAIxmC,UAC9B,OAAO4rL,GAAgBljK,EAAKvW,EAAG7Z,GAAG4F,KAAI,SAAU8nB,GAC9C,OAAOshK,GAASn7K,OAAOg9C,GAAQN,QAAQ7iC,EAAII,gBAAiBJ,EAAIO,YAAa4iC,GAAQN,QAAQ7iC,EAAIs/B,cAAet/B,EAAIQ,eAIpHslK,GAAgB,SAAU5rL,EAAS5F,GACrC,IAAIyxL,EAASxxL,GAAK2F,GAClB,MAAI,UAAY6rL,EACPhE,GAAKllL,MAAM3C,GACR+P,EAAS,CACjB,KACA,OACC87K,GAGe,IAAXzxL,EAAeytL,GAAK/oL,OAAOkB,GAAW6nL,GAAKllL,MAAM3C,GAFjD6nL,GAAKn9K,GAAG1K,EAAS5F,IAKxB0xL,GAAqB,SAAUvD,EAAWC,GAC5C,IAAIlkK,EAAQikK,EAAU3vK,KAAKivK,GAAK/oL,OAAQ8sL,GAAe/D,GAAKllL,OACxDo6E,EAASyrG,EAAW5vK,KAAKivK,GAAK/oL,OAAQ8sL,GAAe/D,GAAKllL,OAC9D,OAAO6lD,GAAUw/H,SAAS1jK,EAAOy4D,IAE/BgvG,GAAkB,SAAUznK,EAAO8jK,EAASrrG,EAAQsrG,GACtD,IAAIE,EAAYqD,GAActnK,EAAO8jK,GACjCI,EAAaoD,GAAc7uG,EAAQsrG,GACvC,OAAO7/H,GAAUw/H,SAASO,EAAWC,IAEnCwD,GAAa,SAAUrkL,GACzB,OAAOA,EAAU9M,MAAM,CACrBktL,SAAU,SAAUjiK,GAClB,IAAIxB,EAAQ2kC,GAAQN,QAAQ7iC,EAAII,gBAC5B62D,EAAS9zB,GAAQN,QAAQ7iC,EAAIs/B,cACjC,OAAO2mI,GAAgBznK,EAAOwB,EAAIO,YAAa02D,EAAQj3D,EAAIQ,YAE7D0hK,SAAU8D,GACV7D,MAAO8D,MAIPE,GAAY,SAAU3nK,EAAO8jK,EAASrrG,EAAQsrG,GAChD,IAAI7/J,EAAMg9H,GAAMlhI,GACZwB,EAAM0C,EAAIxgB,MAAMwe,cAGpB,OAFAV,EAAIW,SAASnC,EAAMtc,MAAOogL,GAC1BtiK,EAAIY,OAAOq2D,EAAO/0E,MAAOqgL,GAClBviK,GAELomK,GAAU,SAAU5nK,EAAO8jK,EAASrrG,EAAQsrG,GAC9C,IAAIvtK,EAAImxK,GAAU3nK,EAAO8jK,EAASrrG,EAAQsrG,GACtC8D,EAAO3zK,GAAG8L,EAAOy4D,IAAWqrG,IAAYC,EAC5C,OAAOvtK,EAAEkL,YAAcmmK,GAGrBC,GAAmB,SAAU9lJ,EAAKxgB,GACpC5L,EAAO5X,KAAKgkC,EAAI+lJ,gBAAgBzhL,MAAK,SAAUjD,GAC7CA,EAAU2kL,kBACV3kL,EAAU4kL,SAASzmK,OAGnB0mK,GAAa,SAAUlmJ,EAAKhiB,EAAO8jK,EAASrrG,EAAQsrG,GACtD,IAAIviK,EAAMijK,GAAcziJ,EAAKhiB,EAAO8jK,EAASrrG,EAAQsrG,GACrD+D,GAAiB9lJ,EAAKxgB,IAEpB2mK,GAAoB,SAAUnmJ,EAAK3+B,EAAW2c,EAAO8jK,EAASrrG,EAAQsrG,GACxE1gL,EAAUuhB,SAAS5E,EAAMtc,MAAOogL,GAChCzgL,EAAUlJ,OAAOs+E,EAAO/0E,MAAOqgL,IAE7BqE,GAAuB,SAAUpmJ,EAAK0hJ,GACxC,OAAO2B,GAASrjJ,EAAK0hJ,GAAUntL,MAAM,CACnCykK,IAAK,SAAUh7I,EAAO8jK,EAASrrG,EAAQsrG,GACrCmE,GAAWlmJ,EAAKhiB,EAAO8jK,EAASrrG,EAAQsrG,IAE1CpgJ,IAAK,SAAU3jB,EAAO8jK,EAASrrG,EAAQsrG,GACrC,IAAI1gL,EAAY2+B,EAAI+lJ,eACpB,GAAI1kL,EAAUglL,iBACZhlL,EAAUglL,iBAAiBroK,EAAMtc,MAAOogL,EAASrrG,EAAO/0E,MAAOqgL,QAC1D,GAAI1gL,EAAUlJ,OACnB,IACEguL,GAAkBnmJ,EAAK3+B,EAAW2c,EAAO8jK,EAASrrG,EAAQsrG,GAC1D,MAAOn+K,GACPsiL,GAAWlmJ,EAAKy2C,EAAQsrG,EAAS/jK,EAAO8jK,QAG1CoE,GAAWlmJ,EAAKy2C,EAAQsrG,EAAS/jK,EAAO8jK,OAK5CwE,GAAW,SAAUtmJ,EAAKhiB,EAAO8jK,EAASrrG,EAAQsrG,GACpD,IAAIL,EAAW+D,GAAgBznK,EAAO8jK,EAASrrG,EAAQsrG,GACvDqE,GAAqBpmJ,EAAK0hJ,IAExB6E,GAAc,SAAUvmJ,EAAKiiJ,EAAWC,GAC1C,IAAIR,EAAW8D,GAAmBvD,EAAWC,GAC7CkE,GAAqBpmJ,EAAK0hJ,IAExB8E,GAAW,SAAUnlL,GACvB,IAAI2+B,EAAMkiB,GAAUigI,OAAO9gL,GAAWK,MAClC+kL,EAAc,SAAUzoK,EAAO8jK,EAASrrG,EAAQsrG,GAClD,OAAOU,GAAcziJ,EAAKhiB,EAAO8jK,EAASrrG,EAAQsrG,IAEhD1+B,EAAWqiC,GAAWrkL,GAC1B,OAAOgiL,GAASrjJ,EAAKqjH,GAAU9uJ,MAAM,CACnCykK,IAAKytB,EACL9kJ,IAAK8kJ,KAGLC,GAAY,SAAUrlL,GACxB,GAAIA,EAAUslL,WAAa,EAAG,CAC5B,IAAIC,EAAWvlL,EAAUwlL,WAAW,GAChCj8G,EAAUvpE,EAAUwlL,WAAWxlL,EAAUslL,WAAa,GAC1D,OAAO/yK,EAAOH,KAAKqtK,GAASn7K,OAAOg9C,GAAQN,QAAQukI,EAAShnK,gBAAiBgnK,EAAS7mK,YAAa4iC,GAAQN,QAAQuoB,EAAQ9rB,cAAe8rB,EAAQ5qD,YAElJ,OAAOpM,EAAO5B,QAGd80K,GAAa,SAAUzlL,GACzB,IAAIk8E,EAAS56B,GAAQN,QAAQhhD,EAAU0lL,YACnCz8K,EAAQq4C,GAAQN,QAAQhhD,EAAU2lL,WACtC,OAAOpB,GAAQroG,EAAQl8E,EAAU4lL,aAAc38K,EAAOjJ,EAAU6lL,aAAetzK,EAAOH,KAAKqtK,GAASn7K,OAAO43E,EAAQl8E,EAAU4lL,aAAc38K,EAAOjJ,EAAU6lL,cAAgBR,GAAUrlL,IAEpL8lL,GAAe,SAAUnnJ,EAAKtmC,GAChC,IAAI8lB,EAAM8sD,GAAmBtsC,EAAKtmC,GAClCosL,GAAiB9lJ,EAAKxgB,IAEpB4nK,GAAW,SAAUpnJ,GACvB,OAAOpsB,EAAO5X,KAAKgkC,EAAI+lJ,gBAAgB1hL,QAAO,SAAU0oC,GACtD,OAAOA,EAAI45I,WAAa,KACvBzzK,KAAK4zK,KAENO,GAAQ,SAAUrnJ,GACpB,OAAOonJ,GAASpnJ,GAAKtoC,KAAI,SAAU00E,GACjC,OAAOlqB,GAAUy/H,MAAMv1G,EAAMpuD,QAASouD,EAAM01G,UAAW11G,EAAMqK,SAAUrK,EAAM21G,eAG7EuF,GAAiB,SAAUtnJ,EAAK3+B,GAClC,IAAIme,EAAM8jK,GAAWtjJ,EAAK3+B,GAC1B,OAAOshL,GAAanjK,IAElB+nK,GAAa,SAAUvnJ,EAAKr0B,EAAG7Z,GACjC,OAAOuzL,GAAYrlJ,EAAKr0B,EAAG7Z,IAEzB60E,GAAQ,SAAU3mC,GACpB,IAAI3+B,EAAY2+B,EAAI+lJ,eACpB1kL,EAAU2kL,mBAGRt/K,GAAWlR,QAAQC,KAAKC,MAAMC,QAAQ,mBAEtC6xL,GAAU,SAAU1xL,EAAQspJ,EAAQyC,EAAMmwB,GAC5C,OAAOoL,GAAGtnL,EAAQspJ,EAAQwhC,GAAen+J,KAAKo/H,GAAOmwB,IAEnDyV,GAAW,SAAU3xL,EAAQspJ,EAAQyC,EAAMmwB,GAC7C,OAAOoL,GAAGtnL,EAAQspJ,EAAQwhC,GAAe5uD,KAAK6vB,GAAOmwB,IAEnD0V,GAA6B,SAAU5xL,EAAQ+rJ,GACjD,IAAIxgJ,EAAY6gD,GAAUy/H,MAAM9/B,EAAM,EAAGA,EAAM,GAC/C,OAAO2kC,GAASnlL,IAEdsmL,GAA0B,SAAU7xL,EAAQssJ,GAC9C,IAAI32I,EAAOm1I,GAAcwB,EAAO,MAChC,OAAO12I,EAAKD,GAAMyH,MAAK,SAAUxH,GAC/B,OAAO41I,GAAa51I,EAAM,SAAShU,KAAI,SAAUg7F,GAC/C,OAAOg1F,GAA2B5xL,EAAQ48F,UAI5C0qF,GAAK,SAAUtnL,EAAQspJ,EAAQyC,EAAMuR,EAAS4e,GAChD,OAAOnwB,EAAKvvI,KAAKsB,EAAO5B,KAAM4B,EAAO5B,MAAM,SAAU+yC,EAAStiC,GAC5D,OAAOiwE,GAAMjwE,GAAM/qB,KAAI,SAAUmqJ,GAC/B,OAAO6lC,GAA2B5xL,EAAQ+rJ,SAE3C,SAAU98F,GACX,OAAO09F,GAAYL,MAAMr9F,EAASq6F,GAAQlsI,MAAK,SAAUkvI,GACvD,IAAIqR,EAAUV,GAAaN,OAAO1tG,GAIlC,OAHAjvD,EAAO0L,YAAYC,UAAS,WAC1B2xJ,EAAQ2a,gBAAgB3rB,EAAOqR,MAE1Bk0B,GAAwB7xL,EAAQssJ,UAIzCwlC,GAAe,CACjB,QACA,KACA,MAEEC,GAAW,SAAU/jK,EAAOhuB,EAAQs9J,EAAS4e,GAC/C,GAAIluJ,EAAMG,UAAYvd,GAASgwD,IAAK,CAClC,IAAIoxH,EAASrY,GAAU35K,GACnBiyL,EAAW,SAAUruL,GACvB,IAAI6rL,EAASxxL,GAAK2F,GAClB,OAAOwY,GAAGxY,EAASouL,IAAWr+K,EAASm+K,GAAcrC,IAEnD/lK,EAAM1pB,EAAOuL,UAAUugB,SAC3B,GAAIpC,EAAIE,UAAW,CACjB,IAAI1B,EAAQ2kC,GAAQN,QAAQ7iC,EAAII,gBAChC6iI,GAAYZ,KAAK7jI,EAAO+pK,GAAUzjL,MAAK,SAAUu9I,GAC/C/9H,EAAM0Y,iBACN,IAAIwrJ,EAAalkK,EAAM8yC,SAAW6wH,GAAWD,GACzChoK,EAAMwoK,EAAWlyL,EAAQiyL,EAAUlmC,EAAMuR,EAAS4e,GACtDxyJ,EAAIlb,MAAK,SAAU8nE,GACjBt2E,EAAOuL,UAAUwf,OAAOurD,YAM9B67G,GAAa,CAAEl+J,OAAQ89J,IAEvBK,GAAWhlI,EAAU,YAAa,QAClCilI,GAAW,CAAExiL,OAAQuiL,IAErBE,GAAW,SAAUpqK,EAAO8jK,EAASrrG,EAAQsrG,GAC/C,MAAO,CACL/jK,MAAOzd,EAASghL,GAAKn9K,GAAG4Z,EAAO8jK,IAC/BrrG,OAAQl2E,EAASghL,GAAKn9K,GAAGqyE,EAAQsrG,MAGjCsG,GAAQ,CAAE1iL,OAAQyiL,IAElBE,GAAiB,SAAUtoJ,EAAK3+B,GAClC,IAAIme,EAAM8jK,GAAWtjJ,EAAK3+B,GAC1B,OAAOy/K,GAASn7K,OAAOg9C,GAAQN,QAAQ7iC,EAAII,gBAAiBJ,EAAIO,YAAa4iC,GAAQN,QAAQ7iC,EAAIs/B,cAAet/B,EAAIQ,YAElHuoK,GAAYF,GAAM1iL,OAClB6iL,GAAO,CACTF,eAAgBA,GAChBC,UAAWA,IAGTE,GAAO,SAAU9oK,EAAWy/H,EAAQphI,EAAO8jK,EAASrrG,EAAQsrG,EAAS2G,GACvE,OAAMx2K,GAAG8L,EAAOy4D,IAAWqrG,IAAYC,EAO9BnuK,EAAO5B,OANPuvI,GAAUvjI,EAAO,QAASohI,GAAQlsI,MAAK,SAAU9hB,GACtD,OAAOmwJ,GAAU9qE,EAAQ,QAAS2oE,GAAQlsI,MAAK,SAAUrB,GACvD,OAAO82K,GAAShpK,EAAWy/H,EAAQhuJ,EAAGygB,EAAG62K,UAO7CC,GAAW,SAAUhpK,EAAWy/H,EAAQphI,EAAOy4D,EAAQiyG,GACzD,OAAKx2K,GAAG8L,EAAOy4D,GAWN7iE,EAAO5B,OAVPm+I,GAAcrB,SAAS9wI,EAAOy4D,EAAQ2oE,GAAQlsI,MAAK,SAAU01K,GAClE,IAAI35B,EAAQ25B,EAAQ35B,QAAQz8I,MAAM,IAClC,OAAIy8I,EAAMp2J,OAAS,GACjB6vL,EAAY/oK,EAAWsvI,EAAO25B,EAAQ5qK,QAAS4qK,EAAQnyG,UAChD7iE,EAAOH,KAAK00K,GAASxiL,OAAOiO,EAAOH,KAAK+0K,GAAKD,UAAUvqK,EAAO,EAAGA,EAAO8nI,GAAO9nI,MAAU,KAEzFpK,EAAO5B,WAOlBiyB,GAAS,SAAUx4B,EAAM6sC,EAAS34B,EAAW6tB,EAAUq7I,GACzD,IAAInxG,EAAkB,SAAUoxG,GAG9B,OAFAD,EAAYliH,MAAMhnD,GAClBkpK,EAAYH,YAAY/oK,EAAWmpK,EAAQ75B,QAAS65B,EAAQ9qK,QAAS8qK,EAAQryG,UACtEqyG,EAAQ75B,SAEjB,OAAOkB,GAAcD,eAAe1iH,EAAU/hC,EAAM6sC,EAASuwI,EAAY/4B,wBAAyB+4B,EAAYj5B,wBAAwBl4J,IAAIggF,IAExIqxG,GAAe,CACjBN,KAAMA,GACNrkI,OAAQukI,GACR1kJ,OAAQA,IAGNkB,GAAW+d,EAAU,OAAQ,QAC7B8lI,GAAY,SAAUx9B,EAAU37G,EAAMo5I,EAAYC,GAIpD,YAHmB,IAAfA,IACFA,EAAaC,IAER39B,EAASrsJ,WAAWtF,OAAOg2C,GAAMn4C,KAAI,SAAUkhC,GACpD,OAAOuM,GAASvM,EAAGswJ,OAGnBC,GAAW,SAAU39B,EAAU37G,EAAM5sC,EAAWimL,GAIlD,YAHmB,IAAfA,IACFA,EAAaE,IAERnmL,EAAU2vD,QAAQ44F,EAAU37G,GAAMn4C,KAAI,SAAUkhC,GACrD,OAAOuM,GAASvM,EAAGswJ,OAGnBE,GAAU,SAAU59B,EAAU37G,EAAM5sC,EAAWimL,QAC9B,IAAfA,IACFA,EAAaE,IAEf,IAAIngL,EAAWuiJ,EAASrsJ,WAAW8J,SAAS4mC,GACxCr8C,EAASyP,EAAUyvF,MAAMzpF,GAC7B,OAAOzV,EAAOkE,KAAI,SAAU8c,GAC1B,OAAO2wB,GAAS3wB,EAAG00K,OAGnBG,GAAa,CACf,CACEtkI,QAASikI,GACTvmK,KAAM0mK,GACNt9G,SAAUj4D,EAAO5B,QAEnB,CACE+yC,QAASokI,GACT1mK,KAAM2mK,GACNv9G,SAAUj4D,EAAOH,KAAKu1K,KAExB,CACEjkI,QAASqkI,GACT3mK,KAAM2mK,GACNv9G,SAAUj4D,EAAOH,KAAK01K,MAGtBG,GAAO,SAAU99B,EAAU37G,EAAM+0C,EAAM3hF,EAAWk4E,QACtC,IAAVA,IACFA,EAAQkuG,IAEV,IAAIE,EAAUxkL,EAAKo2E,GAAO,SAAUquG,GAClC,OAAOA,EAAKzkI,UAAY6/B,KAE1B,OAAO2kG,EAAQr2K,MAAK,SAAUnU,GAC5B,OAAOA,EAAKgmD,QAAQymG,EAAU37G,EAAM5sC,EAAWlE,EAAK0jB,MAAMxP,SAAQ,WAChE,OAAOlU,EAAK8sE,SAAS34D,MAAK,SAAUopI,GAClC,OAAOgtC,GAAK99B,EAAU37G,EAAMysG,EAAIr5I,aAMpCm6B,GAAO,WACT,IAAIw1B,EAAU,SAAU44F,EAAU37G,GAChC,OAAO27G,EAASl7B,QAAQivB,YAAY1vG,IAElC6iD,EAAQ,SAAUzpF,GACpB,OAAOA,EAASpQ,OAAS,EAAI+a,EAAOH,KAAKxK,EAASA,EAASpQ,OAAS,IAAM+a,EAAO5B,QAEnF,MAAO,CACL4gD,QAASA,EACT8/B,MAAOA,IAGPw5D,GAAQ,WACV,IAAIt5F,EAAU,SAAU44F,EAAU37G,GAChC,OAAO27G,EAASl7B,QAAQ7uG,YAAYouB,IAElC6iD,EAAQ,SAAUzpF,GACpB,OAAOA,EAASpQ,OAAS,EAAI+a,EAAOH,KAAKxK,EAAS,IAAM2K,EAAO5B,QAEjE,MAAO,CACL4gD,QAASA,EACT8/B,MAAOA,IAGP+2F,GAAU,CACZrsJ,KAAMA,GACN8uH,MAAOA,IAGLw9B,GAAO,SAAUl+B,EAAU37G,EAAM9rB,EAAW6gE,EAAM3hF,EAAWm8I,GAC/D,IAAI38H,EAAO6mK,GAAK99B,EAAU37G,EAAM+0C,EAAM3hF,GACtC,OAAOwf,EAAKvP,MAAK,SAAUhgB,GACzB,OAAIksJ,EAAOlsJ,EAAE28C,QACJj8B,EAAO5B,OAEP+R,EAAU7wB,EAAE28C,QAAUj8B,EAAOH,KAAKvgB,EAAE28C,QAAU65I,GAAKl+B,EAAUt4J,EAAE28C,OAAQ9rB,EAAW7wB,EAAE0xF,OAAQ3hF,EAAWm8I,OAIhHuqC,GAAS,SAAUn+B,EAAU37G,EAAM9rB,EAAWq7H,GAChD,OAAOsqC,GAAKl+B,EAAU37G,EAAM9rB,EAAWolK,GAAUM,GAAQrsJ,OAAQgiH,IAE/DwqC,GAAU,SAAUp+B,EAAU37G,EAAM9rB,EAAWq7H,GACjD,OAAOsqC,GAAKl+B,EAAU37G,EAAM9rB,EAAWolK,GAAUM,GAAQv9B,QAAS9M,IAGhEyqC,GAAS,SAAUr+B,GACrB,OAAO,SAAU9xJ,GACf,OAAwD,IAAjD8xJ,EAASrsJ,WAAW8J,SAASvP,GAASb,SAG7CixL,GAAW,SAAUt+B,EAAU37G,EAAMuvG,GACvC,OAAO2qC,GAASv+B,EAAU37G,EAAMg6I,GAAOr+B,GAAWpM,IAEhD4qC,GAAU,SAAUx+B,EAAU37G,EAAMuvG,GACtC,OAAO6qC,GAAUz+B,EAAU37G,EAAMg6I,GAAOr+B,GAAWpM,IAEjD2qC,GAAWJ,GACXM,GAAYL,GAEZM,GAAaz/B,KACb0/B,GAAW,SAAUzwL,EAAS0lJ,GAChC,OAAO0qC,GAASI,GAAYxwL,EAAS0lJ,IAEnCgrC,GAAU,SAAU1wL,EAAS0lJ,GAC/B,OAAO4qC,GAAQE,GAAYxwL,EAAS0lJ,IAElCirC,GAAa,SAAU3wL,EAASqqB,EAAWq7H,GAC7C,OAAO2qC,GAASG,GAAYxwL,EAASqqB,EAAWq7H,IAE9CkrC,GAAc,SAAU5wL,EAASqqB,EAAWq7H,GAC9C,OAAO6qC,GAAUC,GAAYxwL,EAASqqB,EAAWq7H,IAG/CmrC,GAAa,SAAU5xJ,EAAO5U,EAAWq7H,GAC3C,OAAO0B,GAASnoH,EAAO5U,EAAWq7H,GAAQ7sI,UAGxCs6E,GAAQ3pC,EAAU,UAAW,UAM7BsnI,IALQtnI,EAAU,UAAW,eACnBA,EAAU,UAAW,QAAS,UAC/BA,EAAU,QAAS,OACrBA,EAAU,UAAW,QAEpBwuG,GAAInO,SAAS,CACvB,CAAEvxI,KAAM,CAAC,YACT,CAAEu6B,QAAS,IACX,CAAEk+I,SAAU,CAAC,SACb,CAAEC,WAAY,CAAC,YAEbC,GAAgB,SAAUC,EAAQpyL,EAAQ6D,GAC5C,IAAIwuL,EAAeD,EAAOE,QAAQtyL,GAC9BuyL,EAAcH,EAAOE,QAAQzuL,GACjC,OAAO0uL,EAAY7+B,MAAQ2+B,EAAaztJ,MAAQ2tJ,EAAY3tJ,KAAOytJ,EAAa3+B,OAE9E8+B,GAAQ,SAAUthI,GACpB,OAAO63F,GAAU73F,EAAM,OAErBuhI,GAAS,SAAUL,EAAQpyL,EAAQ0yL,EAAc7uL,EAAO8uL,EAAa3wI,EAAS4kG,GAChF,OAAOmC,GAAUllJ,EAAO,QAAS+iJ,GAAQlsI,MAAK,SAAUk4K,GACtD,OAAO7pC,GAAU/oJ,EAAQ,QAAS4mJ,GAAQ1nJ,KAAI,SAAU2zL,GACtD,OAAKn5K,GAAGk5K,EAAWC,GAUVn5K,GAAG7V,EAAO+uL,IAActlC,GAAOslC,KAAeD,EAAc3wI,EAAQ6wI,GAAcb,GAAMx4K,KAAK,gBAT7F28I,GAAUd,UAAUm9B,GAAO,CAChCI,EACAC,IACC/4K,MAAK,WACN,OAAOq4K,GAAcC,EAAQS,EAAYD,GAAaZ,GAAMj+I,UAAYiO,EAAQ6wI,MAC/E,SAAUC,GACX,OAAO9wI,EAAQ6wI,YAMpB74K,MAAMg4K,GAAMx4K,KAAK,aAElBu5K,GAAS,SAAU7kH,EAASqrF,EAAQy5B,EAAWC,EAAYC,GAC7D,OAAOhlH,EAAQp0D,KAAKy/I,EAAQy5B,EAAWC,EAAYC,IAEjDC,GAAclyB,GAASA,GAAS,GAAI+wB,IAAQ,CAC9CS,OAAQA,GACRn5B,KAAMy5B,KAIJK,IADa1oI,EAAU,WAAY,cAAe,UAAW,SAClDA,EAAU,SAAU,WAAY,UAAW,UACtD2oI,GAAgB,SAAUnyL,GAC5B,OAAOG,GAAOH,GAASwZ,MAAK,SAAUrZ,GACpC,IAAI4xD,EAAaxiD,GAASpP,GAC1B,OAAO8D,GAAQ8tD,EAAY/xD,GAAShC,KAAI,SAAUuE,GAChD,OAAO2vL,GAAS/xL,EAAQ4xD,EAAY/xD,EAASuC,UAI/C0B,GAAU,SAAUpE,EAAUG,GAChC,OAAOo9D,EAAUv9D,EAAU+X,EAAMY,GAAIxY,KAGnCikD,GAAO,SAAU+L,GACnB,MAAsB,OAAf31D,GAAK21D,IAEVoiI,GAAW,SAAUC,EAAMC,EAAQ5sC,GACrC,OAAO4sC,EAAOD,EAAM3sC,GAAQlsI,MAAK,SAAUzM,GACzC,OAAO+Z,GAAO/Z,IAA2C,IAAhC4zI,GAAM5zI,GAAQ/B,OAAO7L,OAAeizL,GAASrlL,EAAQulL,EAAQ5sC,GAAUxrI,EAAOH,KAAKhN,OAG5GwlL,GAAW,SAAU7sC,EAAQ1lJ,EAASuJ,GACxC,OAAOA,EAAUkiC,SAASzrC,GAASuZ,SAAQ,WACzC,OAAO64K,GAASpyL,EAASuJ,EAAU+oL,OAAQ5sC,MAC1C1nJ,IAAIuL,EAAUy+K,WAEfwK,GAAS,SAAUxyL,EAAS5F,GAC9B,OAAOw2D,GAAM5wD,EAAS5F,GAAQuQ,OAAOs5C,IAAM1qC,SAAQ,WACjD,OAAOq3C,GAAM5wD,EAAS5F,EAAS,GAAGuQ,OAAOs5C,QAGzCwuI,GAAe,SAAU/sC,EAAQ1lJ,EAAS5F,EAAQmP,GACpD,OAAOipL,GAAOxyL,EAAS5F,GAAQof,MAAK,SAAUq/D,GAC5C,OAAOtvE,EAAUkiC,SAASotC,GAAIjgE,MAAK,WACjC,OAAOw5K,GAASv5G,EAAItvE,EAAU+oL,OAAQ5sC,GAAQ1nJ,IAAIuL,EAAUy+K,aAC3D,SAAU0K,GACX,OAAOP,GAAcO,GAAU10L,KAAI,SAAUwtD,GAC3C,OAAOq8H,GAAKn9K,GAAG8gD,EAAKrrD,SAAUqrD,EAAKjpD,mBAKvCowL,GAAQ,SAAUjtC,EAAQ1lJ,EAAS5F,EAAQmP,GAC7C,IAAIwD,EAASk3C,GAAKjkD,GAAWuyL,GAAS7sC,EAAQ1lJ,EAASuJ,GAAakpL,GAAa/sC,EAAQ1lJ,EAAS5F,EAAQmP,GAC1G,OAAOwD,EAAO/O,KAAI,SAAU40L,GAC1B,MAAO,CACLtuK,MAAOzd,EAAS+rL,GAChB71G,OAAQl2E,EAAS+rL,QAInBpsH,GAAU,SAAUqsH,GACtB,OAAOZ,GAAY75B,KAAKy6B,GAAU,SAAUjvL,GAC1C,OAAOsW,EAAO5B,UACb,WACD,OAAO4B,EAAO5B,UACb,SAAU6vI,GACX,OAAOjuI,EAAOH,KAAKo5E,GAAMg1D,EAAM,OAC9B,SAAUA,GACX,OAAOjuI,EAAOH,KAAKo5E,GAAMg1D,EAAMiE,GAAOjE,SAGtC2qC,GAAS,CACXH,MAAOA,GACPnsH,QAASA,IAGPusH,GAAOjvC,EAAS,CAClB,OACA,MACA,QACA,UACC,IACCkvC,GAAW,SAAUC,EAAOr3B,GAC9B,OAAOm3B,GAAK,CACVrvJ,KAAMuvJ,EAAMvvJ,OACZC,IAAKsvJ,EAAMtvJ,MAAQi4H,EACnBpJ,MAAOygC,EAAMzgC,QACbr5G,OAAQ85I,EAAM95I,SAAWyiH,KAGzBs3B,GAAS,SAAUD,EAAOr3B,GAC5B,OAAOm3B,GAAK,CACVrvJ,KAAMuvJ,EAAMvvJ,OACZC,IAAKsvJ,EAAMtvJ,MAAQi4H,EACnBpJ,MAAOygC,EAAMzgC,QACbr5G,OAAQ85I,EAAM95I,SAAWyiH,KAGzBu3B,GAAe,SAAUF,EAAO95I,GAClC,IAAI1qB,EAASwkK,EAAM95I,SAAW85I,EAAMtvJ,MACpC,OAAOovJ,GAAK,CACVrvJ,KAAMuvJ,EAAMvvJ,OACZC,IAAKwV,EAAS1qB,EACd+jI,MAAOygC,EAAMzgC,QACbr5G,OAAQA,KAGRi6I,GAAY,SAAUH,EAAOtvJ,GAC/B,IAAIlV,EAASwkK,EAAM95I,SAAW85I,EAAMtvJ,MACpC,OAAOovJ,GAAK,CACVrvJ,KAAMuvJ,EAAMvvJ,OACZC,IAAKA,EACL6uH,MAAOygC,EAAMzgC,QACbr5G,OAAQxV,EAAMlV,KAGdh1B,GAAY,SAAUw5L,EAAO9O,EAAQC,GACvC,OAAO2O,GAAK,CACVrvJ,KAAMuvJ,EAAMvvJ,OAASygJ,EACrBxgJ,IAAKsvJ,EAAMtvJ,MAAQygJ,EACnB5xB,MAAOygC,EAAMzgC,QAAU2xB,EACvBhrI,OAAQ85I,EAAM95I,SAAWirI,KAGzBiP,GAAW,SAAUJ,GACvB,OAAOA,EAAMtvJ,OAEX2vJ,GAAY,SAAUL,GACxB,OAAOA,EAAM95I,UAEX96C,GAAW,SAAU40L,GACvB,MAAO,IAAMA,EAAMvvJ,OAAS,KAAOuvJ,EAAMtvJ,MAAQ,SAAWsvJ,EAAMzgC,QAAU,KAAOygC,EAAM95I,SAAW,KAElGo6I,GAAS,CACX5+I,GAAIo+I,GACJG,OAAQA,GACRF,SAAUA,GACVG,aAAcA,GACdC,UAAWA,GACX10B,OAAQ20B,GACRC,UAAWA,GACX75L,UAAWA,GACX4E,SAAUA,IAGRm1L,GAAgB,SAAUtC,EAAQlxL,EAAS5F,GAC7C,OAAIA,GAAU,GAAKA,EAASgyJ,GAAOpsJ,GAC1BkxL,EAAOuC,cAAczzL,EAAS5F,EAAQ4F,EAAS5F,EAAS,GACtDA,EAAS,EACX82L,EAAOuC,cAAczzL,EAAS5F,EAAS,EAAG4F,EAAS5F,GAErD8f,EAAO5B,QAEZo7K,GAAU,SAAU3xJ,GACtB,OAAOwxJ,GAAO5+I,GAAG,CACfjR,KAAM3B,EAAK2B,KACXC,IAAK5B,EAAK4B,IACV6uH,MAAOzwH,EAAKywH,MACZr5G,OAAQpX,EAAKoX,UAGbw6I,GAAa,SAAUzC,EAAQlxL,GACjC,OAAOka,EAAOH,KAAKm3K,EAAOE,QAAQpxL,KAEhC4zL,GAAW,SAAU1C,EAAQlxL,EAAS5F,GACxC,OAAI82D,GAAUlxD,GACL2zL,GAAWzC,EAAQlxL,GAAShC,IAAI01L,IAC9B5sK,GAAO9mB,GACTwzL,GAActC,EAAQlxL,EAAS5F,GAAQ4D,IAAI01L,IAE3Cx5K,EAAO5B,QAGdu7K,GAAe,SAAU3C,EAAQlxL,GACnC,OAAIkxD,GAAUlxD,GACL2zL,GAAWzC,EAAQlxL,GAAShC,IAAI01L,IAC9B5sK,GAAO9mB,GACTkxL,EAAOuC,cAAczzL,EAAS,EAAGA,EAASosJ,GAAOpsJ,IAAUhC,IAAI01L,IAE/Dx5K,EAAO5B,QAGdw7K,GAAa,CACfF,SAAUA,GACVC,aAAcA,IAGZE,GAAY,EACZC,GAAc,IACdC,GAAQj8B,GAAInO,SAAS,CACvB,CAAEvxI,KAAM,IACR,CAAE47K,MAAO,CAAC,YAERC,GAAY,SAAUlB,EAAO54E,GAC/B,OAAO44E,EAAMvvJ,OAAS22E,EAAI32E,QAAUhnC,KAAKyiH,IAAI9E,EAAIm4C,QAAUygC,EAAMvvJ,QAAU,GAAKuvJ,EAAMvvJ,OAAS22E,EAAIm4C,SAEjG4hC,GAAiB,SAAUlD,EAAQlxL,EAASizL,GAC9C,OAAO5rC,GAAQrnJ,EAAS6yK,GAAavuH,SAAS1rC,KAAK/R,GAAS,IAAQ,SAAUshJ,GAC5E,OAAO2rC,GAAWD,aAAa3C,EAAQ/oC,GAAM1uI,QAAO,SAAU4gG,GAC5D,OAAO85E,GAAUlB,EAAO54E,UAI1Bg6E,GAAa,SAAUnD,EAAQlxL,EAASs0L,EAAU5iI,EAAUuhI,GAC9D,IAAIsB,EAAahB,GAAOP,SAASC,EAAOc,IACxC,OAAIr3L,KAAKyiH,IAAIm1E,EAASn7I,SAAWuY,EAASvY,UAAY,GAE3Cm7I,EAAS3wJ,MAAQsvJ,EAAM95I,SADzB86I,GAAMC,MAAMK,GAGVD,EAAS3wJ,QAAUsvJ,EAAM95I,SAC3B86I,GAAMC,MAAMX,GAAOP,SAASC,EAAO,IAEnCmB,GAAelD,EAAQlxL,EAASizL,GAASgB,GAAMC,MAAMX,GAAO95L,UAAU86L,EAAYR,GAAW,IAAME,GAAM37K,QAGhHk8K,GAAW,SAAUtD,EAAQlxL,EAASs0L,EAAU5iI,EAAUuhI,GAC5D,IAAIwB,EAAclB,GAAOL,OAAOD,EAAOc,IACvC,OAAIr3L,KAAKyiH,IAAIm1E,EAAS3wJ,MAAQ+tB,EAAS/tB,OAAS,GAErC2wJ,EAASn7I,SAAW85I,EAAMtvJ,MAD5BswJ,GAAMC,MAAMO,GAGVH,EAASn7I,WAAa85I,EAAMtvJ,MAC9BswJ,GAAMC,MAAMX,GAAOL,OAAOD,EAAO,IAEjCmB,GAAelD,EAAQlxL,EAASizL,GAASgB,GAAMC,MAAMX,GAAO95L,UAAUg7L,EAAaV,GAAW,IAAME,GAAM37K,QAGjHo8K,GAAa,CACfvhG,MAAOogG,GAAO70B,OACdi2B,SAAUH,GACVlS,KAAMiR,GAAOL,OACbZ,OAAQ7B,IAENmE,GAAe,CACjBzhG,MAAOogG,GAAOD,UACdqB,SAAUN,GACV/R,KAAMiR,GAAOP,SACbV,OAAQ5B,IAENmE,GAAY,SAAU3D,EAAQj/K,EAAG7Z,GACnC,OAAO84L,EAAOloI,iBAAiB/2C,EAAG7Z,GAAGuS,QAAO,SAAU3G,GACpD,MAAqB,UAAd3J,GAAK2J,MACX6U,UAEDi8K,GAAiB,SAAU5D,EAAQ1N,EAAU9xH,EAAUuhI,EAAO8B,GAChE,OAAOC,GAAU9D,EAAQ1N,EAAU9xH,EAAU8xH,EAASlB,KAAK2Q,EAAOc,IAAYgB,IAE5EC,GAAY,SAAU9D,EAAQ1N,EAAU9xH,EAAUuhI,EAAO8B,GAC3D,OAAmB,IAAfA,EACK76K,EAAOH,KAAKk5K,GAEjB4B,GAAU3D,EAAQ+B,EAAMvvJ,OAAQ8/I,EAASrwF,MAAM8/F,IAC1C6B,GAAe5D,EAAQ1N,EAAU9xH,EAAUuhI,EAAO8B,EAAa,GAEjE7D,EAAO+D,eAAehC,EAAMvvJ,OAAQ8/I,EAASrwF,MAAM8/F,IAAQz5K,MAAK,SAAUoxG,GAC/E,OAAOA,EAAMtmG,QAAQ1L,KAAKsB,EAAO5B,MAAM,SAAUtY,GAC/C,OAAO8zL,GAAWD,aAAa3C,EAAQlxL,GAASwZ,MAAK,SAAU86K,GAC7D,OAAO9Q,EAASmR,SAASzD,EAAQlxL,EAASs0L,EAAU5iI,EAAUuhI,GAAOr6K,KAAKsB,EAAO5B,MAAM,SAAU48K,GAC/F,OAAOF,GAAU9D,EAAQ1N,EAAU9xH,EAAUwjI,EAAUH,EAAa,SAErEx7K,SAAQ,WACT,OAAOW,EAAOH,KAAKk5K,QAEpB/4K,EAAO5B,UAGV68K,GAAY,SAAUjE,EAAQ+B,GAChC,OAAO/B,EAAO+D,eAAehC,EAAMvvJ,OAAQuvJ,EAAM95I,SAAW46I,KAE1DqB,GAAU,SAAUlE,EAAQ+B,GAC9B,OAAO/B,EAAO+D,eAAehC,EAAMvvJ,OAAQuvJ,EAAMtvJ,MAAQowJ,KAEvDsB,GAAc,SAAU7R,EAAU8R,EAAUpE,GAC9C,OAAI1N,EAASrwF,MAAMmiG,GAAYpE,EAAOqE,iBAC7Br7K,EAAOH,KAAKypK,EAASrwF,MAAMmiG,GAAYpE,EAAOqE,kBAC5C/R,EAASrwF,MAAMmiG,GAAY,EAC7Bp7K,EAAOH,MAAMypK,EAASrwF,MAAMmiG,IAE5Bp7K,EAAO5B,QAGd47K,GAAQ,SAAU1Q,EAAU0N,EAAQ+B,GACtC,IAAIuC,EAAQhS,EAASlB,KAAK2Q,EAAOc,IAC7BuB,EAAWN,GAAU9D,EAAQ1N,EAAUyP,EAAOuC,EAAOxB,IAAal7K,MAAM08K,GAC5E,OAAOH,GAAY7R,EAAU8R,EAAUpE,GAAQt4K,MAAK,WAClD,OAAOs4K,EAAO+D,eAAeK,EAAS5xJ,OAAQ8/I,EAASrwF,MAAMmiG,OAC5D,SAAU9vK,GAEX,OADA0rK,EAAOuE,SAAS,EAAGjwK,GACZ0rK,EAAO+D,eAAeK,EAAS5xJ,OAAQ8/I,EAASrwF,MAAMmiG,GAAY9vK,OAGzEkwK,GAAU,CACZC,MAAO/9K,EAAMs8K,GAAOQ,IACpBkB,QAASh+K,EAAMs8K,GAAOU,IACtBQ,QAASA,GACTD,UAAWA,GACXU,YAAahvL,EAASktL,KAGpB+B,GAAc,GACdC,GAAa9mI,GAAoBvE,SACjCsrI,GAAW,SAAU9E,EAAQxrC,EAAQn8I,GACvC,OAAO2nL,EAAO7E,eAAe7yK,MAAK,SAAU65B,GAC1C,OAAOy/I,GAAOH,MAAMjtC,EAAQryG,EAAI0pC,SAAU1pC,EAAIg1I,UAAW9+K,GAAWqP,MAAK,WACvE,OAAOsB,EAAOH,KAAKo5E,GAAM9/C,EAAI0pC,SAAU1pC,EAAIg1I,eAC1C,SAAU4N,GACX,IAAIvjH,EAAQw+G,EAAOgF,UAAUD,GACzBpD,EAAWZ,GAAYV,OAAOL,EAAQ79I,EAAI0pC,SAAU1pC,EAAIg1I,UAAW31G,EAAMqK,SAAUrK,EAAM21G,UAAW9+K,EAAUu3C,QAAS4kG,GAC3H,OAAOotC,GAAOtsH,QAAQqsH,UAIxBsD,GAAO,SAAUjF,EAAQxrC,EAAQ1lJ,EAAS5F,EAAQmP,EAAWwrL,GAC/D,OAAmB,IAAfA,EACK76K,EAAO5B,OAET89K,GAAUlF,EAAQxrC,EAAQ1lJ,EAAS5F,EAAQmP,GAAWiQ,MAAK,SAAU68K,GAC1E,IAAI3jH,EAAQw+G,EAAOgF,UAAUG,GACzBxD,EAAWZ,GAAYV,OAAOL,EAAQlxL,EAAS5F,EAAQs4E,EAAMqK,SAAUrK,EAAM21G,UAAW9+K,EAAUu3C,QAAS4kG,GAC/G,OAAOusC,GAAY75B,KAAKy6B,GAAU,WAChC,OAAO34K,EAAO5B,UACb,WACD,OAAO4B,EAAOH,KAAKs8K,MAClB,SAAUluC,GACX,OAAI3vI,GAAGxY,EAASmoJ,IAAoB,IAAX/tJ,EAChBk8L,GAASpF,EAAQlxL,EAAS5F,EAAQm5L,GAAOL,OAAQ3pL,GAEjD4sL,GAAKjF,EAAQxrC,EAAQyC,EAAM,EAAG5+I,EAAWwrL,EAAa,MAE9D,SAAU5sC,GACX,OAAI3vI,GAAGxY,EAASmoJ,IAAS/tJ,IAAWgyJ,GAAOjE,GAClCmuC,GAASpF,EAAQlxL,EAAS5F,EAAQm5L,GAAOP,SAAUzpL,GAEnD4sL,GAAKjF,EAAQxrC,EAAQyC,EAAMiE,GAAOjE,GAAO5+I,EAAWwrL,EAAa,UAK5EuB,GAAW,SAAUpF,EAAQlxL,EAAS5F,EAAQkoL,EAAM/4K,GACtD,OAAOuqL,GAAWF,SAAS1C,EAAQlxL,EAAS5F,GAAQof,MAAK,SAAU6gG,GACjE,OAAOk8E,GAAMrF,EAAQ3nL,EAAW+4K,EAAKjoE,EAAKq7E,GAAQG,oBAGlDU,GAAQ,SAAUrF,EAAQ3nL,EAAW8wG,GACvC,OAAI07E,GAAW3oI,QAAQ1B,YAAcqqI,GAAW3oI,QAAQtB,YAAciqI,GAAW3oI,QAAQvB,aAAekqI,GAAW3oI,QAAQ3B,SAClHliD,EAAUitL,WAAWtF,EAAQ72E,GAC3B07E,GAAW3oI,QAAQzB,OACrBpiD,EAAUktL,QAAQvF,EAAQ72E,GAE1BngG,EAAO5B,QAGd89K,GAAY,SAAUlF,EAAQxrC,EAAQ1lJ,EAAS5F,EAAQmP,GACzD,OAAOuqL,GAAWF,SAAS1C,EAAQlxL,EAAS5F,GAAQof,MAAK,SAAU6gG,GACjE,OAAOk8E,GAAMrF,EAAQ3nL,EAAW8wG,OAGhCq8E,GAAW,SAAUxF,EAAQxrC,EAAQn8I,GACvC,OAAOysL,GAAS9E,EAAQxrC,EAAQn8I,GAAWiQ,MAAK,SAAUm9K,GACxD,OAAOR,GAAKjF,EAAQxrC,EAAQixC,EAAK32L,UAAW22L,EAAKv8L,SAAUmP,EAAWusL,IAAa93L,IAAIkzL,EAAOgF,eAG9FU,GAAY,CAAEvmK,OAAQqmK,IAEtBt3F,GAAYnwC,GAAoBvE,SAChCmsI,GAAc,SAAU7mI,EAAM04F,GAChC,OAAOmoC,GAAW7gI,GAAM,SAAU9lD,GAChC,OAAO/J,GAAO+J,GAAGuP,QAAO,SAAUylB,GAChC,OAAO1mB,GAAG0mB,EAAGwpH,UAIfouC,GAAW,SAAU5F,EAAQxrC,EAAQn8I,EAAW/N,EAASqoF,GAC3D,OAAOgkE,GAAUrsJ,EAAS,QAASkqJ,GAAQlsI,MAAK,SAAU8K,GACxD,OAAOujI,GAAUvjI,EAAO,QAASohI,GAAQlsI,MAAK,SAAUkvI,GACtD,OAAKmuC,GAAYhzG,EAAQ6kE,GAGlBkuC,GAAUvmK,OAAO6gK,EAAQxrC,EAAQn8I,GAAWiQ,MAAK,SAAUk5D,GAChE,OAAOm1E,GAAUn1E,EAAMqK,SAAU,QAAS2oE,GAAQ1nJ,KAAI,SAAU++E,GAC9D,MAAO,CACLz4D,MAAOzd,EAASyd,GAChBy4D,OAAQl2E,EAASk2E,GACjBrK,MAAO7rE,EAAS6rE,UAPbx4D,EAAO5B,cAclBy+K,GAAW,SAAU7F,EAAQxrC,EAAQn8I,EAAW/N,EAASqoF,EAAQmzG,GACnE,OAAI53F,GAAUhyC,QAAQzB,OACbzxC,EAAO5B,OAEP0+K,EAASx7L,EAASkqJ,GAAQnsI,SAAQ,WACvC,OAAOu9K,GAAS5F,EAAQxrC,EAAQn8I,EAAW/N,EAASqoF,GAAQ7lF,KAAI,SAAUwtD,GACxE,IAAIknB,EAAQlnB,EAAKknB,QACjB,OAAO+7G,GAASxiL,OAAOiO,EAAOH,KAAK+0K,GAAKD,UAAUn8G,EAAMpuD,QAASouD,EAAM01G,UAAW11G,EAAMqK,SAAUrK,EAAM21G,aAAa,UAKzH4O,GAAe,SAAUz7L,EAASkqJ,GACpC,OAAOmC,GAAUrsJ,EAAS,KAAMkqJ,GAAQlsI,MAAK,SAAUwxI,GACrD,OAAOnD,GAAUmD,EAAU,QAAStF,GAAQlsI,MAAK,SAAUkvI,GACzD,IAAI32I,EAAOm1I,GAAcwB,EAAO,MAChC,OAAIlwI,GAAGwyI,EAAUj5I,EAAK,IACb4+K,GAAWjoC,GAAO,SAAU1oJ,GACjC,OAAO0sJ,GAAO1sJ,GAAS6Y,WACtB6sI,GAAQ1nJ,KAAI,SAAUgU,GACvB,IAAIklL,EAAa9qC,GAAOp6I,GACxB,OAAOy8K,GAASxiL,OAAOiO,EAAOH,KAAK+0K,GAAKD,UAAU78K,EAAMklL,EAAYllL,EAAMklL,KAAc,MAGnFh9K,EAAO5B,cAKlB6+K,GAAgB,SAAU37L,EAASkqJ,GACrC,OAAOmC,GAAUrsJ,EAAS,KAAMkqJ,GAAQlsI,MAAK,SAAUwxI,GACrD,OAAOnD,GAAUmD,EAAU,QAAStF,GAAQlsI,MAAK,SAAUkvI,GACzD,IAAI32I,EAAOm1I,GAAcwB,EAAO,MAChC,OAAIlwI,GAAGwyI,EAAUj5I,EAAKA,EAAK5S,OAAS,IAC3ByxL,GAAYloC,GAAO,SAAU1oJ,GAClC,OAAOg5F,GAAMh5F,GAAS6Y,WACrB6sI,GAAQ1nJ,KAAI,SAAUg7F,GACvB,OAAOy1F,GAASxiL,OAAOiO,EAAOH,KAAK+0K,GAAKD,UAAU71F,EAAO,EAAGA,EAAO,KAAK,MAGnE9+E,EAAO5B,cAKlBpQ,GAAS,SAAUgpL,EAAQjrK,EAAWy/H,EAAQn8I,EAAW/N,EAASqoF,EAAQmrG,GAC5E,OAAO8H,GAAS5F,EAAQxrC,EAAQn8I,EAAW/N,EAASqoF,GAAQrqE,MAAK,SAAUgyC,GACzE,OAAO6jI,GAAa3kI,OAAOzkC,EAAWy/H,EAAQl6F,EAAKlnC,QAASknC,EAAKuxB,SAAUiyG,OAG3EoI,GAAmB,CACrBL,SAAUA,GACV7uL,OAAQA,GACR+uL,aAAcA,GACdE,cAAeA,IAGbE,GAAW,SAAUtqL,EAAQ24I,GAC/B,OAAOmC,GAAU96I,EAAQ,QAAS24I,IAEpC,SAAS4xC,GAAgBpG,EAAQjrK,EAAWy/H,EAAQypC,GAClD,IAAIloB,EAAS/sJ,EAAO5B,OAChBi/K,EAAa,WACftwB,EAAS/sJ,EAAO5B,QAEd6sK,EAAY,SAAU/6J,GACxB+kK,EAAYliH,MAAMhnD,GAClBghJ,EAASowB,GAASjtK,EAAMrd,SAAU24I,IAEhC2/B,EAAY,SAAUj7J,GACxB68I,EAAOr8J,MAAK,SAAU0Z,GACpB6qK,EAAYliH,MAAMhnD,GAClBoxK,GAASjtK,EAAMrd,SAAU24I,GAAQ96I,MAAK,SAAUmyE,GAC9C05E,GAAcrB,SAAS9wI,EAAOy4D,EAAQ2oE,GAAQ96I,MAAK,SAAUskL,GAC3D,IAAI35B,EAAQ25B,EAAQ35B,QAAQz8I,MAAM,KAC9By8I,EAAMp2J,OAAS,GAAsB,IAAjBo2J,EAAMp2J,SAAiBqZ,GAAG8L,EAAOy4D,MACvDoyG,EAAYH,YAAY/oK,EAAWsvI,EAAO25B,EAAQ5qK,QAAS4qK,EAAQnyG,UACnEm0G,EAAOsG,eAAez6G,cAM5B06G,EAAU,SAAUC,GACtBzwB,EAAOr8J,KAAK2sL,IAEd,MAAO,CACLpS,UAAWA,EACXE,UAAWA,EACXoS,QAASA,GAIb,IAAInmC,GAAO,CACT7lH,SAAU1jB,GACVuqK,OAAQ5B,GACR1I,SAAUH,GAAK/oL,OACf03L,WAAYd,GAAQE,QACpBa,QAASf,GAAQP,UACjBr0I,QAASmxI,GAAYjB,YAEnB3/B,GAAK,CACP5lH,SAAUo6G,GACVysC,OAAQ7B,GACRzI,SAAUH,GAAK/oL,OACf03L,WAAYd,GAAQC,MACpBc,QAASf,GAAQN,QACjBt0I,QAASmxI,GAAYlB,UAEnB4G,GAAe,CACjBrmC,KAAMA,GACND,GAAIA,IAGFumC,GAAQ,SAAUh+L,GACpB,OAAO,SAAUi+L,GACf,OAAOA,IAAYj+L,IAGnBk+L,GAAOF,GAAM,IACbG,GAASH,GAAM,IACfI,GAAe,SAAUH,GAC3B,OAAOA,GAAW,IAAMA,GAAW,IAEjCI,GAAgB,CAClB34B,IAAK,CACH44B,WAAYN,GAAM,IAClBj9H,UAAWi9H,GAAM,KAEnB3vJ,IAAK,CACHiwJ,WAAYN,GAAM,IAClBj9H,UAAWi9H,GAAM,KAEnBE,KAAMA,GACNC,OAAQA,GACRC,aAAcA,IAGZG,GAAQ,SAAUC,GACpB,MAAO,CACL10J,KAAM00J,EAAG10J,OACTC,IAAKy0J,EAAGz0J,MACR6uH,MAAO4lC,EAAG5lC,QACVr5G,OAAQi/I,EAAGj/I,SACX3qB,MAAO4pK,EAAG5pK,QACVC,OAAQ2pK,EAAG3pK,WAGX4pK,GAAO,CAAEF,MAAOA,IAGhBG,IADWrpI,GAAoBvE,SAAS0C,QAAQtB,WACxC,SAAUysI,GACpB,IAAI/vK,OAAenP,IAATk/K,EAAqBA,EAAKvwL,MAAQ1M,EAAWwE,SACnDmS,EAAIuW,EAAI/e,KAAKisC,YAAcltB,EAAIq2D,gBAAgBnpC,WAC/Ct9C,EAAIowB,EAAI/e,KAAKksC,WAAantB,EAAIq2D,gBAAgBlpC,UAClD,OAAO+nH,GAASzrJ,EAAG7Z,KAEjBogM,GAAK,SAAUvmL,EAAG7Z,EAAGmgM,GACvB,IAAI/vK,OAAenP,IAATk/K,EAAqBA,EAAKvwL,MAAQ1M,EAAWwE,SACnDwmC,EAAM9d,EAAIi9H,YACdn/G,EAAImvJ,SAASxjL,EAAG7Z,IAGdqgM,GAAe,SAAUnyJ,GAC3B,IAAI0iB,EAAmB,SAAU/2C,EAAG7Z,GAClC,OAAO6wD,GAAQH,UAAUG,GAAQN,QAAQriB,EAAIxmC,UAAWmS,EAAG7Z,IAEzDg5L,EAAU,SAAUpxL,GACtB,OAAOA,EAAQgI,MAAMsyG,yBAEnBm5E,EAAgB,SAAUnvK,EAAO8jK,EAASrrG,EAAQsrG,GACpD,IAAIh1I,EAAMmV,GAAUy/H,MAAM3jK,EAAO8jK,EAASrrG,EAAQsrG,GAClD,OAAOuF,GAAetnJ,EAAK+M,GAAKr1C,IAAIq6L,GAAKF,QAEvC9L,EAAe,WACjB,OAAOsB,GAAMrnJ,GAAKtoC,KAAI,SAAU06L,GAC9B,OAAO5J,GAAKF,eAAetoJ,EAAKoyJ,OAGhCxC,EAAY,SAAUG,GACxB,IAAIrO,EAAWx/H,GAAUw/H,SAASqO,EAAM/xK,QAAS+xK,EAAMt5G,UACvD,OAAO+xG,GAAKF,eAAetoJ,EAAK0hJ,IAE9BiN,EAAiB,SAAUhjL,EAAG7Z,GAChC,OAAOy1L,GAAWvnJ,EAAKr0B,EAAG7Z,GAAG4F,KAAI,SAAUiqL,GACzC,OAAO0G,GAAM1iL,OAAOg8K,EAAM3jK,QAAS2jK,EAAMG,UAAWH,EAAMlrG,SAAUkrG,EAAMI,eAG1EsQ,EAAiB,WACnB1rH,GAAM3mC,IAEJkxJ,EAAiB,SAAUx3L,GAC7BytL,GAAannJ,EAAKtmC,IAEhB+mB,EAAe,SAAUssB,GAC3Bu5I,GAAStmJ,EAAK+M,EAAI/uB,QAAS+uB,EAAI+0I,UAAW/0I,EAAI0pC,SAAU1pC,EAAIg1I,YAE1DuQ,EAAuB,SAAUt0K,EAAOy4D,GAC1C8vG,GAAYvmJ,EAAKhiB,EAAOy4D,IAEtBw4G,EAAiB,WACnB,OAAOjvJ,EAAIi0E,aAETs+E,EAAa,WACf,IAAIhkJ,EAAMyjJ,GAAMrvI,GAAQN,QAAQriB,EAAIxmC,WACpC,OAAO+0C,EAAIlR,OAET8xJ,EAAW,SAAUxjL,EAAG7Z,GAC1BogM,GAAGvmL,EAAG7Z,EAAG6wD,GAAQN,QAAQriB,EAAIxmC,YAE/B,MAAO,CACLkpD,iBAAkBA,EAClBooI,QAASA,EACTqC,cAAeA,EACfpH,aAAcA,EACd6J,UAAWA,EACXjB,eAAgBA,EAChB0D,eAAgBA,EAChB5xK,aAAcA,EACd6xK,qBAAsBA,EACtBpB,eAAgBA,EAChBjC,eAAgBA,EAChBsD,WAAYA,EACZpD,SAAUA,IAIVqD,GAAKtvI,EAAU,OAAQ,QACvBuvI,GAAQ,SAAUzyJ,EAAKrgB,EAAWy/H,EAAQypC,GAC5C,IAAI+B,EAASuH,GAAanyJ,GACtBk6I,EAAW8W,GAAepG,EAAQjrK,EAAWy/H,EAAQypC,GACzD,MAAO,CACLhK,UAAW3E,EAAS2E,UACpBE,UAAW7E,EAAS6E,UACpBoS,QAASjX,EAASiX,UAGlBuB,GAAW,SAAU1yJ,EAAKrgB,EAAWy/H,EAAQypC,GAC/C,IAAI+B,EAASuH,GAAanyJ,GACtB2yJ,EAAkB,WAEpB,OADA9J,EAAYliH,MAAMhnD,GACX/L,EAAO5B,QAEZ4gL,EAAU,SAAU9uK,EAAO9F,EAAO8jK,EAASrrG,EAAQsrG,EAAS9+K,GAC9D,IAAI4vL,EAAY/uK,EAAMu0C,MAClBk5H,EAAUsB,EAAUC,MACpBl8H,GAAkC,IAAvBi8H,EAAUj8H,SACrBxb,EAAU+0G,GAAcV,SAAS9vI,EAAWkpK,EAAYtjC,oBAAoBjzI,MAAK,WACnF,OAAIq/K,GAAcF,OAAOF,IAAY36H,EAC5BtlD,EAAMw/K,GAAiBlvL,OAAQgpL,EAAQjrK,EAAWy/H,EAAQiyC,GAAarmC,KAAMv0E,EAAQz4D,EAAO6qK,EAAYH,aACtGiJ,GAAcH,KAAKD,IAAY36H,EACjCtlD,EAAMw/K,GAAiBlvL,OAAQgpL,EAAQjrK,EAAWy/H,EAAQiyC,GAAatmC,GAAIt0E,EAAQz4D,EAAO6qK,EAAYH,aACpGiJ,GAAcF,OAAOF,GACvBjgL,EAAMw/K,GAAiBL,SAAU7F,EAAQxrC,EAAQiyC,GAAarmC,KAAMv0E,EAAQz4D,EAAO8yK,GAAiBD,eAClGc,GAAcH,KAAKD,GACrBjgL,EAAMw/K,GAAiBL,SAAU7F,EAAQxrC,EAAQiyC,GAAatmC,GAAIt0E,EAAQz4D,EAAO8yK,GAAiBH,cAElG/8K,EAAO5B,QAEf,SAAUw7B,GACX,IAAIvJ,EAAS,SAAU8uJ,GACrB,OAAO,WACL,IAAI/K,EAAaruB,GAAQo5B,GAAU,SAAU7zK,GAC3C,OAAO6pK,GAAa9kJ,OAAO/kB,EAAMzT,OAAQyT,EAAM1T,OAAQmU,EAAW6tB,EAAUq7I,MAE9E,OAAOb,EAAW11K,MAAK,WACrB,OAAO69I,GAAcN,SAASlwI,EAAWkpK,EAAY/4B,wBAAyB+4B,EAAYj5B,wBAAwBl4J,KAAI,SAAU44J,GAC9H,IAAIoxB,EAAWiQ,GAAcF,OAAOF,IAAYtuL,EAAUoxD,UAAUk9H,GAAWhQ,GAAKllL,MAAQklL,GAAK/oL,OAGjG,OAFAoyL,EAAO0H,qBAAqB/Q,GAAKn9K,GAAGksJ,EAAM59D,QAAS,GAAIgvF,EAASpxB,EAAMlO,UACtEymC,EAAYliH,MAAMhnD,GACXwoK,GAASxiL,OAAOiO,EAAO5B,QAAQ,SAEvC,SAAU7a,GACX,OAAOyc,EAAOH,KAAK00K,GAASxiL,OAAOiO,EAAO5B,QAAQ,SAIxD,OAAI2/K,GAAcF,OAAOF,IAAY36H,EAC5B3yB,EAAO,CAACuuJ,GAAG,EAAI,KACbb,GAAcH,KAAKD,IAAY36H,EACjC3yB,EAAO,CAACuuJ,IAAI,EAAG,KACbvvL,EAAU2uL,WAAWL,IAAY36H,EACnC3yB,EAAO,CACZuuJ,GAAG,GAAI,GACPA,IAAI,EAAG,KAEAvvL,EAAUoxD,UAAUk9H,IAAY36H,EAClC3yB,EAAO,CACZuuJ,GAAG,EAAG,GACNA,GAAG,EAAI,KAEAb,GAAcD,aAAaH,KAAyB,IAAb36H,EACzC+7H,EAEA/+K,EAAO5B,QAGlB,OAAOopC,KAEL43I,EAAQ,SAAUlvK,EAAO9F,EAAO8jK,EAASrrG,EAAQsrG,GACnD,OAAO5xB,GAAcV,SAAS9vI,EAAWkpK,EAAYtjC,oBAAoBjzI,MAAK,WAC5E,IAAIugL,EAAY/uK,EAAMu0C,MAClBk5H,EAAUsB,EAAUC,MACpBl8H,GAAkC,IAAvBi8H,EAAUj8H,SACzB,OAAiB,IAAbA,EACKhjD,EAAO5B,OAEZ2/K,GAAcD,aAAaH,GACtBxI,GAAaN,KAAK9oK,EAAWy/H,EAAQphI,EAAO8jK,EAASrrG,EAAQsrG,EAAS8G,EAAYH,aAElF90K,EAAO5B,SAEf4B,EAAO5B,OAEZ,MAAO,CACL4gL,QAASA,EACTI,MAAOA,IAGPC,GAAgB,CAClBR,MAAOA,GACPC,SAAUA,IAGRQ,GAAW,SAAUx5L,EAASuD,GAChCqH,EAAKrH,GAAS,SAAU0O,GACtByvJ,GAAS1hK,EAASiS,OAIlB00G,GAAW,SAAU26C,GACvB,OAAO,SAAUthK,GACfwhK,GAAMxhK,EAASshK,KAGfm4B,GAAgB,SAAUl2L,GAC5B,OAAO,SAAUvD,GACfw5L,GAASx5L,EAASuD,KAIlBm2L,GAAU,SAAUC,GACtB,IAAIC,EAAoBjzE,GAASgzE,EAAS7lJ,YACtC+lJ,EAAyBJ,GAAc,CACzCE,EAAS7lJ,WACT6lJ,EAASviC,eACTuiC,EAASxiC,kBAEPlqF,EAAQ,SAAUhnD,GACpB,IAAI+vI,EAAO9O,GAAcjhI,EAAW0zK,EAAS9tC,oBAC7CjhJ,EAAKorJ,EAAM6jC,IAET7K,EAAc,SAAU/oK,EAAWmiI,EAAO9jI,EAAOy4D,GACnD9P,EAAMhnD,GACNrb,EAAKw9I,EAAOwxC,GACZp4B,GAAMl9I,EAAOq1K,EAASxiC,iBACtBqK,GAAMzkF,EAAQ48G,EAASviC,iBAEzB,MAAO,CACLnqF,MAAOA,EACP+hH,YAAaA,EACbnjC,iBAAkB8tC,EAAS9tC,iBAC3BuK,sBAAuBujC,EAASvjC,sBAChCF,qBAAsByjC,EAASzjC,uBAG/B4jC,GAAS,SAAUH,GACrB,IAAII,EAA4B,SAAU/5L,GACxC+Q,GAAO/Q,EAAS25L,EAAS7lJ,YACzB/iC,GAAO/Q,EAAS25L,EAASxiC,iBACzBpmJ,GAAO/Q,EAAS25L,EAASviC,iBAEvB4iC,EAAwB,SAAUh6L,GACpCrE,GAAIqE,EAAS25L,EAAS7lJ,WAAY,MAEhCm5B,EAAQ,SAAUhnD,GACpB,IAAI+vI,EAAO9O,GAAcjhI,EAAW0zK,EAAS9tC,oBAC7CjhJ,EAAKorJ,EAAM+jC,IAET/K,EAAc,SAAU/oK,EAAWmiI,EAAO9jI,EAAOy4D,GACnD9P,EAAMhnD,GACNrb,EAAKw9I,EAAO4xC,GACZr+L,GAAI2oB,EAAOq1K,EAASxiC,gBAAiB,KACrCx7J,GAAIohF,EAAQ48G,EAASviC,eAAgB,MAEvC,MAAO,CACLnqF,MAAOA,EACP+hH,YAAaA,EACbnjC,iBAAkB8tC,EAAS9tC,iBAC3BuK,sBAAuBujC,EAASvjC,sBAChCF,qBAAsByjC,EAASzjC,uBAG/B+jC,GAAsB,CACxBP,QAASA,GACTI,OAAQA,IAGNI,GAAoB,SAAUhwL,GAChC,OAAyE,IAAlEy3J,GAAM14G,GAAQN,QAAQz+C,EAAE6C,QAAS,8BAE1C,SAASotL,GAAiB/9L,EAAQkqL,GAChC,IAAI8T,EAAgBt2C,EAAS,CAC3B,YACA,YACA,UACA,QACA,WACC,IACC08B,EAAWtmK,EAAO5B,OAClB62K,EAAc8K,GAAoBH,OAAOziC,IAC7Cj7J,EAAOsO,GAAG,QAAQ,SAAUR,GAC1B,IAAIo8B,EAAMlqC,EAAOqsL,SACbh/K,EAAOssK,GAAU35K,GACjBspJ,EAAS2P,GAAUj5J,GACnBi+L,EAAgB,WAClB,IAAIhnJ,EAAMj3C,EAAOuL,UACb2c,EAAQ2kC,GAAQN,QAAQtV,EAAI9iC,YAC5B2U,EAAM+jC,GAAQN,QAAQtV,EAAI+4G,UAC1BlrD,EAAS+zD,GAAUd,UAAUpL,GAAYL,MAAO,CAClDpkI,EACAY,IAEFg8E,EAAOtoF,MAAK,WACVu2K,EAAYliH,MAAMxjE,KACjBkO,IAED2iL,EAAgBf,GAAcR,MAAMzyJ,EAAK78B,EAAMi8I,EAAQypC,GACvDoL,EAAchB,GAAcP,SAAS1yJ,EAAK78B,EAAMi8I,EAAQypC,GACxDqL,EAAc,SAAUpwK,GAC1B,OAAgC,IAAzBA,EAAMu0C,MAAMzB,UAEjBu9H,EAAiB,SAAUrwK,EAAOuI,GAC/B6nK,EAAYpwK,KAGbuI,EAASmuJ,QACX12J,EAAM02J,OAERnuJ,EAAShrB,YAAYiD,MAAK,SAAUwgF,GAClC,IAAI48F,EAAWx/H,GAAUw/H,SAAS58F,EAAG9mE,QAAS8mE,EAAGrO,UAC7Cj3D,EAAM8jK,GAAWtjJ,EAAK0hJ,GAC1B5rL,EAAOuL,UAAUwf,OAAOrB,QAGxBwzK,EAAQ,SAAUlvK,GACpB,IAAIswK,EAAeC,EAAUvwK,GAC7B,GAAIswK,EAAa/7H,MAAMzB,UAAY+6H,GAAcD,aAAa0C,EAAa/7H,MAAMy6H,OAAQ,CACvF,IAAItzK,EAAM1pB,EAAOuL,UAAUugB,SACvB5D,EAAQ2kC,GAAQN,QAAQ7iC,EAAII,gBAC5BhB,EAAM+jC,GAAQN,QAAQ7iC,EAAIs/B,cAC9Bm1I,EAAYjB,MAAMoB,EAAcp2K,EAAOwB,EAAIO,YAAanB,EAAKY,EAAIQ,WAAW1b,MAAK,SAAU+nB,GACzF8nK,EAAeC,EAAc/nK,QAI/BumK,EAAU,SAAU9uK,GACtB,IAAIswK,EAAeC,EAAUvwK,GAC7Bk8J,IAAa17K,MAAK,SAAU+jB,GAC1BA,EAAO22J,cAET,IAAIx/J,EAAM1pB,EAAOuL,UAAUugB,SACvBhC,EAAiB+iC,GAAQN,QAAQvsD,EAAOuL,UAAU4I,YAClD+T,EAAQ2kC,GAAQN,QAAQ7iC,EAAII,gBAC5BhB,EAAM+jC,GAAQN,QAAQ7iC,EAAIs/B,cAC1B77C,EAAYktK,GAAU/W,YAAYx5I,GAAgB05I,QAAUq4B,GAAchwJ,IAAMgwJ,GAAc34B,IAClGi7B,EAAYrB,QAAQwB,EAAcp2K,EAAOwB,EAAIO,YAAanB,EAAKY,EAAIQ,UAAW/c,GAAWqB,MAAK,SAAU+nB,GACtG8nK,EAAeC,EAAc/nK,MAE/B2zJ,IAAa17K,MAAK,SAAU+jB,GAC1BA,EAAO42J,eAGPqV,EAAe,SAAUxwK,GAC3B,OAAOA,EAAM7rB,eAAe,MAAQ6rB,EAAM7rB,eAAe,MAEvDo8L,EAAY,SAAUvwK,GACxB,IAAIrd,EAASk8C,GAAQN,QAAQv+B,EAAMrd,QAC/B44I,EAAO,WACTv7H,EAAMyY,mBAEJg+I,EAAU,WACZz2J,EAAM0Y,kBAEJg+I,EAAOn+B,EAAQk+B,EAASl7B,GAC5B,MAAO,CACL54I,OAAQlG,EAASkG,GACjBkF,EAAGpL,EAAS+zL,EAAaxwK,GAASA,EAAMnY,EAAI,MAC5C7Z,EAAGyO,EAAS+zL,EAAaxwK,GAASA,EAAMhyB,EAAI,MAC5CutJ,KAAMA,EACNk7B,QAASA,EACTC,KAAMA,EACNniH,IAAK93D,EAASujB,KAGdywK,EAAc,SAAUl8H,GAC1B,OAAsB,IAAfA,EAAImuC,QAETguF,EAAsB,SAAUn8H,GAClC,YAAoBtlD,IAAhBslD,EAAI9gD,aAGJ1gB,GAASixB,IAAMjxB,GAASixB,IAAM,IAAsB,IAAhBuwC,EAAI9gD,UAGf,KAAP,EAAd8gD,EAAI9gD,WAEVk9K,EAAY,SAAU7wL,GACpB2wL,EAAY3wL,IAAMgwL,GAAkBhwL,IACtCowL,EAAcnV,UAAUwV,EAAUzwL,KAGlC8wL,EAAY,SAAU9wL,GACpB4wL,EAAoB5wL,IAAMgwL,GAAkBhwL,IAC9CowL,EAAcjV,UAAUsV,EAAUzwL,KAGlC+wL,EAAU,SAAU/wL,GAClB2wL,EAAY3wL,IAAMgwL,GAAkBhwL,IACtCowL,EAAc7C,QAAQkD,EAAUzwL,KAGpC9N,EAAOsO,GAAG,YAAaqwL,GACvB3+L,EAAOsO,GAAG,YAAaswL,GACvB5+L,EAAOsO,GAAG,UAAWuwL,GACrB7+L,EAAOsO,GAAG,QAAS4uL,GACnBl9L,EAAOsO,GAAG,UAAWwuL,GACrB98L,EAAOsO,GAAG,aAAc2vL,GACxB7Z,EAAWtmK,EAAOH,KAAKqgL,EAAc,CACnCjV,UAAW4V,EACX1V,UAAW2V,EACXvD,QAASwD,EACT3B,MAAOA,EACPJ,QAASA,QAGb,IAAIj1J,EAAU,WACZu8I,EAAS51K,MAAK,SAAU41K,QAG1B,MAAO,CACLvzG,MAAOkiH,EAAYliH,MACnBhpC,QAASA,GAIb,IAAIi3J,GAAa,SAAU9+L,GACzB,IAAIV,EAAM,WACR,IAAI+N,EAAOssK,GAAU35K,GACrB,OAAO66J,GAAelB,SAAStsJ,EAAM4tJ,GAASxL,oBAAoBjzI,MAAK,WACrE,YAAoCS,IAAhCjd,EAAOuL,UAAU4I,WACZioJ,GAAelgJ,OAEfkgJ,GAAeL,OAAO/7J,EAAOuL,cAErC,SAAUygJ,GACX,OAAOoQ,GAAeN,SAAS9P,OAGnC,MAAO,CAAE1sJ,IAAKA,IAGZy/L,GAASj/L,GAAS0O,KAClBwwL,GAAa,SAAUh/L,GACzB,IAAIg6C,EAAY,GAahB,SAAS3pC,EAAImwD,GACX,OAAO,WACLxgE,EAAOyW,YAAY+pD,IAdvBu+H,GAAO,uDAAuD/kM,MAAM,MAAM,SAAUiE,GACrE,MAATA,EACF+7C,EAAUvzC,KAAK,CAAEnB,KAAM,MAEvB00C,EAAUvzC,KAAKzG,EAAOg6C,UAAU/7C,OAGpC+B,EAAOoQ,UAAU,QAAS,CACxB3O,KAAM,aACNiH,MAAO,QACPmxC,KAAMG,IAORh6C,EAAOoQ,UAAU,aAAc,CAC7B1H,MAAO,mBACPoP,QAASzH,EAAI,iBACbE,KAAM,UAERvQ,EAAOoQ,UAAU,cAAe,CAC9B1H,MAAO,eACPoP,QAASzH,EAAI,oBAEfrQ,EAAOoQ,UAAU,iBAAkB,CACjC1H,MAAO,kBACPoP,QAASzH,EAAI,uBAEfrQ,EAAOoQ,UAAU,kBAAmB,CAClC1H,MAAO,cACPoP,QAASzH,EAAI,wBAEfrQ,EAAOoQ,UAAU,kBAAmB,CAClC1H,MAAO,aACPoP,QAASzH,EAAI,wBAEfrQ,EAAOoQ,UAAU,uBAAwB,CACvC1H,MAAO,oBACPoP,QAASzH,EAAI,6BAEfrQ,EAAOoQ,UAAU,sBAAuB,CACtC1H,MAAO,mBACPoP,QAASzH,EAAI,4BAEfrQ,EAAOoQ,UAAU,iBAAkB,CACjC1H,MAAO,aACPoP,QAASzH,EAAI,uBAEfrQ,EAAOoQ,UAAU,gBAAiB,CAChC1H,MAAO,iBACPoP,QAASzH,EAAI,sBAEfrQ,EAAOoQ,UAAU,cAAe,CAC9B1H,MAAO,UACPoP,QAASzH,EAAI,oBAEfrQ,EAAOoQ,UAAU,eAAgB,CAC/B1H,MAAO,WACPoP,QAASzH,EAAI,qBAEfrQ,EAAOoQ,UAAU,sBAAuB,CACtC1H,MAAO,mBACPoP,QAASzH,EAAI,4BAEfrQ,EAAOoQ,UAAU,qBAAsB,CACrC1H,MAAO,kBACPoP,QAASzH,EAAI,2BAEfrQ,EAAOoQ,UAAU,uBAAwB,CACvC1H,MAAO,uBACPoP,QAASzH,EAAI,6BAEfrQ,EAAOoQ,UAAU,sBAAuB,CACtC1H,MAAO,sBACPoP,QAASzH,EAAI,4BAEfrQ,EAAOoQ,UAAU,iBAAkB,CACjC1H,MAAO,gBACPoP,QAASzH,EAAI,wBAGb4uL,GAAc,SAAUj/L,GAC1B,IAAIiqL,EAAU,SAAU39B,GACtB,IAAI/6G,EAAkBvxC,EAAO4L,IAAIjO,GAAG2uJ,EAAO,UAAYtsJ,EAAO0T,UAAUC,SAAS24I,GACjF,OAAO/6G,GAELqqI,EAAUD,GAAW37K,GACrB47K,EAAQ74K,OAAS,GACnB/C,EAAO+T,kBAAkBk2K,EAASrO,EAAQ30K,KAAK,OAG/CuJ,GAAU,CACZwuL,WAAYA,GACZC,YAAaA,IAGXC,GAAe,SAAUl/L,EAAQq8J,GACnC,IAAIsB,EAAU7/I,EAAO5B,OACjBijL,EAAa,GACbC,EAAY,GACZC,EAAa,GACbC,EAAe,GACfC,EAAkB,SAAUlsL,GAC9BA,EAAKE,UAAS,IAEZisL,EAAa,SAAUnsL,GACzBA,EAAKE,UAAS,IAEZksL,EAAY,WACd,IAAIv+L,EAAOvH,KACXwlM,EAAW14L,KAAKvF,GAChBy8J,EAAQnhJ,MAAK,WACX+iL,EAAgBr+L,MACf,SAAUy8J,GACX6hC,EAAWt+L,OAGXw+L,EAAW,WACb,IAAIx+L,EAAOvH,KACXylM,EAAU34L,KAAKvF,GACfy8J,EAAQnhJ,MAAK,WACX+iL,EAAgBr+L,MACf,SAAUy8J,GACX6hC,EAAWt+L,OAGXy+L,EAAY,WACd,IAAIz+L,EAAOvH,KACX0lM,EAAW54L,KAAKvF,GAChBy8J,EAAQnhJ,MAAK,WACX+iL,EAAgBr+L,MACf,SAAUy8J,GACXz8J,EAAKqS,SAASoqJ,EAAQnB,WAAWngJ,cAGjCujL,EAAc,WAChB,IAAI1+L,EAAOvH,KACX2lM,EAAa74L,KAAKvF,GAClBy8J,EAAQnhJ,MAAK,WACX+iL,EAAgBr+L,MACf,SAAUy8J,GACXz8J,EAAKqS,SAASoqJ,EAAQrB,aAAajgJ,cAGnCwjL,EAAmB,WACrBliC,EAAQnhJ,MAAK,WACXhO,EAAK2wL,EAAYI,GACjB/wL,EAAK4wL,EAAWG,GAChB/wL,EAAK6wL,EAAYE,GACjB/wL,EAAK8wL,EAAcC,MAClB,SAAU5hC,GACXnvJ,EAAK2wL,EAAYK,GACjBhxL,EAAK4wL,EAAWI,GAChBhxL,EAAK6wL,GAAY,SAAUS,GACzBA,EAAUvsL,SAASoqJ,EAAQnB,WAAWngJ,aAExC7N,EAAK8wL,GAAc,SAAUS,GAC3BA,EAAYxsL,SAASoqJ,EAAQrB,aAAajgJ,iBAIhDrc,EAAOsO,GAAG,QAAQ,WAChBtO,EAAOsO,GAAG,cAAc,SAAUR,GAChC,IAAI2vJ,EAAU3/I,EAAO5X,KAAKlG,EAAO4L,IAAIoL,UAAUhX,EAAOuL,UAAU4I,WAAY,UAC5EwpJ,EAAUF,EAAQrgJ,MAAK,SAAU4iL,GAC/B,IAAIj0C,EAAOl/F,GAAQN,QAAQyzI,GACvB1zC,EAAQK,GAAYL,MAAMP,GAC9B,OAAOO,EAAM1qJ,KAAI,SAAU0qJ,GACzB,OAAO2Q,GAAaL,QAAQP,EAAY/P,EAAOP,SAGnD8zC,UAGJ,IAAII,EAAoB,WACtB,IAAIr3L,EAAO,GACXA,EAAO,4EACP,IAAK,IAAI5M,EAAI,EAAGA,EAAI,GAAIA,IAAK,CAC3B4M,GAAQ,OACR,IAAK,IAAIiN,EAAI,EAAGA,EAAI,GAAIA,IACtBjN,GAAQ,oDAA0D,GAAJ5M,EAAS6Z,GAA/D,0BAAqGA,EAAI,iBAAmB7Z,EAAI,cAE1I4M,GAAQ,QAIV,OAFAA,GAAQ,WACRA,GAAQ,+DACDA,GAELs3L,EAAa,SAAUlgM,EAAQmgM,EAAIC,EAAI9sL,GACzC,IACIuC,EAAG7Z,EAAGqkM,EAAWt0C,EAAM3qF,EADvBkrF,EAAQh5I,EAAQ+D,QAAQrH,qBAAqB,SAAS,GAEtD67B,EAAMv4B,EAAQkwJ,SAAoC,UAAzBlwJ,EAAQvP,SAAS+L,IAK9C,IAJAw8I,EAAM3gI,YAAY3mB,UAAYm7L,EAAK,EAAI,OAASC,EAAK,GACjDv0J,IACFs0J,EAAK,EAAIA,GAENnkM,EAAI,EAAGA,EAAI,GAAIA,IAClB,IAAK6Z,EAAI,EAAGA,EAAI,GAAIA,IAClBk2I,EAAOO,EAAM32I,KAAK3Z,GAAGsb,WAAWzB,GAAG0B,WACnC6pD,GAAUv1B,EAAMh2B,GAAKsqL,EAAKtqL,GAAKsqL,IAAOnkM,GAAKokM,EAC3CpgM,EAAO4L,IAAI4rH,YAAYu0B,EAAM,aAAc3qF,GACvCA,IACFi/H,EAAYt0C,GAIlB,OAAOs0C,EAAUn8L,YAEfo8L,GAAuC,IAAzBrlB,GAAaj7K,GAAoB,CACjDsF,KAAM,QACNiL,KAAM,QACNuD,QAAS,QACTgE,QAASzH,EAAI,mBACX,CACF/K,KAAM,QACNiL,KAAM,QACNuD,QAAS,QACTysL,cAAc,EACdzoL,QAAS,SAAUhK,GACbA,EAAE0yL,OACJ7mM,KAAKoK,SAAS08L,UACd3yL,EAAEgmE,2BACF9zE,EAAOyW,YAAY,oBAGvB0rE,OAAQ,WACN+9G,EAAWlgM,EAAQ,EAAG,EAAGrG,KAAKkgD,KAAKv6B,QAAQ,KAE7CijE,OAAQ,WACN,IAAI9+E,EAAW9J,KAAKkgD,KAAKv6B,QAAQ,GAAGjI,QAAQrH,qBAAqB,KACjEhQ,EAAO4L,IAAIs+G,YAAYzmH,EAAU,cACjCzD,EAAO4L,IAAI2+G,SAAS9mH,EAAS,GAAI,eAEnCo2C,KAAM,CAAC,CACHp4C,KAAM,YACNmH,KAAMq3L,IACNpsL,aAAc,WACZla,KAAK+mM,MAAQ/mM,KAAKgnM,MAAQ,GAE5BC,YAAa,SAAU9yL,GACrB,IACI+H,EAAG7Z,EADH2U,EAAS7C,EAAE6C,OAEsB,MAAjCA,EAAOI,QAAQ6rD,gBACjB/mD,EAAInX,SAASiS,EAAO6G,aAAa,cAAe,IAChDxb,EAAI0C,SAASiS,EAAO6G,aAAa,cAAe,KAC5C7d,KAAK6pK,SAAiC,UAAtB7pK,KAAKoK,SAAS+L,OAChC+F,EAAI,EAAIA,GAENA,IAAMlc,KAAK+mM,OAAS1kM,IAAMrC,KAAKgnM,QACjCT,EAAWlgM,EAAQ6V,EAAG7Z,EAAG8R,EAAEwF,SAC3B3Z,KAAK+mM,MAAQ7qL,EACblc,KAAKgnM,MAAQ3kM,KAInB8b,QAAS,SAAUhK,GACjB,IAAI5M,EAAOvH,KAC4B,MAAnCmU,EAAE6C,OAAOI,QAAQ6rD,gBACnB9uD,EAAE44B,iBACF54B,EAAE24B,kBACFvlC,EAAK6C,SAASipC,SACdhtC,EAAO0L,YAAYC,UAAS,WAC1Bo1K,GAAYp+K,OAAO3C,EAAQkB,EAAKw/L,MAAQ,EAAGx/L,EAAKy/L,MAAQ,MAE1D3gM,EAAOm3C,iBAKjB,SAAS9mC,EAAImwD,GACX,OAAO,WACLxgE,EAAOyW,YAAY+pD,IAGvB,IAAIqgI,EAAkB,CACpBv7L,KAAM,mBACNwO,QAAS,QACTD,aAAc4rL,EACd3nL,QAASzH,EAAI,kBAEXywL,EAAc,CAChBx7L,KAAM,eACNwO,QAAS,QACTD,aAAc4rL,EACdpvL,IAAK,kBAEH4oE,EAAM,CACR3zE,KAAM,MACNwO,QAAS,QACT+lC,KAAM,CACJ,CACEv0C,KAAM,oBACNwS,QAASzH,EAAI,2BACbwD,aAAc6rL,GAEhB,CACEp6L,KAAM,mBACNwS,QAASzH,EAAI,0BACbwD,aAAc6rL,GAEhB,CACEp6L,KAAM,aACNwS,QAASzH,EAAI,qBACbwD,aAAc6rL,GAEhB,CACEp6L,KAAM,iBACNwS,QAASzH,EAAI,oBACbwD,aAAc6rL,GAEhB,CAAEp6L,KAAM,KACR,CACEA,KAAM,UACNwS,QAASzH,EAAI,kBACbwD,aAAc6rL,GAEhB,CACEp6L,KAAM,WACNwS,QAASzH,EAAI,mBACbwD,aAAc6rL,GAEhB,CACEp6L,KAAM,mBACNwS,QAASzH,EAAI,0BACbwD,aAAc6rL,GAEhB,CACEp6L,KAAM,kBACNwS,QAASzH,EAAI,yBACbwD,aAAc6rL,KAIhBnwF,EAAS,CACXjqG,KAAM,SACNwO,QAAS,QACT+lC,KAAM,CACJ,CACEv0C,KAAM,uBACNwS,QAASzH,EAAI,2BACbwD,aAAc6rL,GAEhB,CACEp6L,KAAM,sBACNwS,QAASzH,EAAI,0BACbwD,aAAc6rL,GAEhB,CACEp6L,KAAM,gBACNwS,QAASzH,EAAI,qBACbwD,aAAc6rL,KAIhB3zC,EAAO,CACT/6G,UAAW,SACX1rC,KAAM,OACNwO,QAAS,QACT+lC,KAAM,CACJ,CACEv0C,KAAM,kBACNwS,QAASzH,EAAI,qBACbwD,aAAc6rL,GAEhB,CACEp6L,KAAM,cACNwS,QAASzH,EAAI,sBACbwD,aAAc8rL,GAEhB,CACEr6L,KAAM,aACNwS,QAASzH,EAAI,sBACbwD,aAAc+rL,KAIpB5/L,EAAOsQ,YAAY,cAAegwL,GAClCtgM,EAAOsQ,YAAY,aAAcuwL,GACjC7gM,EAAOsQ,YAAY,cAAewwL,GAClC9gM,EAAOsQ,YAAY,MAAO2oE,GAC1Bj5E,EAAOsQ,YAAY,SAAUi/F,GAC7BvvG,EAAOsQ,YAAY,OAAQy7I,IAEzBg1C,GAAY,CAAE7B,aAAcA,IAE5B8B,GAAmB,SAAUjf,GAC/B,OAAOA,EAAcziL,MAAMkd,MAAK,eAE7B,SAAU7G,GACX,OAAO/T,EAAI+T,GAAM,SAAUsjE,GACzB,OAAOA,EAAIrtE,aAIbq1L,GAAmB,SAAUtrL,EAAMosK,GACrC,IAAImf,EAAYt/L,EAAI+T,EAAMk3C,GAAQN,SAClCw1H,EAAcxiL,IAAIue,EAAO5X,KAAKg7L,KAE5BC,GAAS,SAAUnhM,EAAQ+hL,GAC7B,MAAO,CACLue,YAAa,SAAU99I,EAAS7sC,GAC9B,OAAOorK,GAAYp+K,OAAO3C,EAAQwiD,EAAS7sC,IAE7CsrL,iBAAkB,SAAUtrL,GAC1B,OAAOsrL,GAAiBtrL,EAAMosK,IAEhCif,iBAAkB,WAChB,OAAOA,GAAiBjf,MAK9B,SAAStxK,GAAOzQ,GACd,IAAIoqH,EAAgBy/D,GAAc7pL,GAC9Bu9J,EAAgBwgC,GAAgB/9L,EAAQoqH,EAAc8/D,YACtD5sB,EAAU2e,GAAaj8K,EAAQoqH,EAAc8xD,UAC7C7f,EAAayiC,GAAW9+L,GACxB+hL,EAAgB5iL,GAAK2e,EAAO5B,QAmBhC,OAlBA9N,GAAS0zK,iBAAiB9hL,EAAQs9J,EAASC,EAAelB,EAAY0lB,GACtExsG,GAAU8nF,eAAer9J,EAAQq8J,EAAYiB,EAASC,GACtDwjC,GAAU7B,aAAal/L,EAAQq8J,GAC/B7rJ,GAAQwuL,WAAWh/L,GACnBwQ,GAAQyuL,YAAYj/L,GACpBA,EAAOsO,GAAG,WAAW,WACnBtO,EAAO8mD,WAAWs6I,YAAYnmC,GAASF,iBACvC/6J,EAAO8mD,WAAWs6I,YAAYnmC,GAASD,mBAErC4f,GAAiB56K,IACnBA,EAAOsO,GAAG,WAAW,SAAUR,GAC7BqkL,GAAWl+J,OAAOnmB,EAAG9N,EAAQs9J,EAASlzC,EAAc8xD,aAGxDl8K,EAAOsO,GAAG,UAAU,WAClB87G,EAAcviF,UACd01H,EAAc11H,aAETs5J,GAAOnhM,EAAQ+hL,GAGxB,SAASsf,MADT5nM,EAAOsN,IAAI,QAAS0J,KA7iSZ,CAmjSV3P,SApjSF,I,sBCME,SAAUrH,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;IAAI0nM,EAAK1nM,EAAOE,aAAa,KAAM,CAC/BC,OAAQ,gFAAgFC,MACpF,KAEJC,YAAa,kDAAkDD,MAAM,KACrEE,SAAU,4DAA4DF,MAClE,KAEJG,cAAe,8BAA8BH,MAAM,KACnDI,YAAa,mBAAmBJ,MAAM,KACtCye,oBAAoB,EACpBlc,cAAe,QACfwC,KAAM,SAAUP,GACZ,MAA2B,MAApBA,EAAMo7E,OAAO,IAExBl9E,SAAU,SAAUgc,EAAO8B,EAAS5d,GAChC,OAAO8b,EAAQ,GAAK,KAAO,MAE/Bre,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVC,SAAU,CACNC,QAAS,cACTC,QAAS,gBACTC,SAAU,eACVC,QAAS,cACTC,SAAU,wBACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,QACRC,KAAM,aACNC,EAAG,eACHC,GAAI,aACJC,EAAG,aACHC,GAAI,YACJC,EAAG,UACHC,GAAI,SACJC,EAAG,WACHC,GAAI,UACJC,EAAG,WACHC,GAAI,UACJC,EAAG,UACHC,GAAI,WAERgB,uBAAwB,YACxBC,QAAS,MACThB,KAAM,CACFC,IAAK,EACLC,IAAK,KAIb,OAAOklM,M,sBCzEX,aACA,YACC,SAAUpiM,GACP,aAEA,IAAIqc,EAAO,aAEPgrI,EAAU,SAAU74D,EAAI84D,GAC1B,OAAO,WAEL,IADA,IAAIhgJ,EAAO,GACFmV,EAAK,EAAGA,EAAK7Y,UAAUC,OAAQ4Y,IACtCnV,EAAKmV,GAAM7Y,UAAU6Y,GAEvB,OAAO+xE,EAAG84D,EAAG3/I,MAAM,KAAML,MAGzBiE,EAAW,SAAUpL,GACvB,OAAO,WACL,OAAOA,IAGPu6B,EAAW,SAAU/jB,GACvB,OAAOA,GAET,SAAS2F,EAAMC,GAEb,IADA,IAAIC,EAAc,GACTC,EAAK,EAAGA,EAAK7Y,UAAUC,OAAQ4Y,IACtCD,EAAYC,EAAK,GAAK7Y,UAAU6Y,GAElC,OAAO,WAEL,IADA,IAAIC,EAAW,GACND,EAAK,EAAGA,EAAK7Y,UAAUC,OAAQ4Y,IACtCC,EAASD,GAAM7Y,UAAU6Y,GAE3B,IAAI7U,EAAM4U,EAAYG,OAAOD,GAC7B,OAAOH,EAAG5U,MAAM,KAAMC,IAG1B,IAyVI+nD,EAAOglB,EAAQ7hD,EAAIuvK,EAAMC,EAAM5sH,EAAO/1D,EAAK4iL,EAAS3xI,EAAS4xI,EAASC,EAAOC,EAAQC,EAzVrF/lL,EAAM,SAAUC,GAClB,OAAO,WAEL,IADA,IAAIvV,EAAO,GACFmV,EAAK,EAAGA,EAAK7Y,UAAUC,OAAQ4Y,IACtCnV,EAAKmV,GAAM7Y,UAAU6Y,GAEvB,OAAQI,EAAElV,MAAM,KAAML,KAGtBigJ,EAAM,SAAU5pI,GAClB,OAAO,WACL,MAAM,IAAIC,MAAMD,KAGhBb,EAAQvR,GAAS,GACjBwR,EAASxR,GAAS,GAElByR,EAAO,WACT,OAAOC,GAELA,EAAO,WACT,IAAIC,EAAK,SAAUta,GACjB,OAAOA,EAAEua,UAEPna,EAAO,SAAUoa,GACnB,OAAOA,KAELha,EAAK,SAAUlF,GACjB,OAAOA,GAELmf,EAAK,CACPC,KAAM,SAAUpf,EAAG9B,GACjB,OAAO8B,KAETO,GAAIqe,EACJS,OAAQT,EACRK,OAAQJ,EACRS,MAAOpa,EACPqa,WAAYza,EACZ0a,SAAU,SAAUC,GAClB,MAAM,IAAIC,MAAMD,GAAO,oCAEzBE,UAAWtS,EAAS,MACpBuS,eAAgBvS,OAASwS,GACzBC,GAAI5a,EACJ6a,QAASjb,EACTN,IAAKsa,EACL1N,KAAM+M,EACN6B,KAAMlB,EACNmB,OAAQrB,EACRsB,OAAQrB,EACR1N,OAAQ2N,EACRqB,OAAQnB,EACRoB,QAASpB,EACTqB,QAAS,WACP,MAAO,IAETxb,SAAUwI,EAAS,WAKrB,OAHI1I,OAAO2b,QACT3b,OAAO2b,OAAOnB,GAETA,EA1CE,GA4CPoB,EAAO,SAAUlD,GACnB,IAAImD,EAAanT,EAASgQ,GACtBvZ,EAAO,WACT,OAAOqb,GAELa,EAAO,SAAUrB,GACnB,OAAOA,EAAEtB,IAEP8B,EAAK,CACPC,KAAM,SAAUpf,EAAG9B,GACjB,OAAOA,EAAEmf,IAEX9c,GAAI,SAAU6B,GACZ,OAAOib,IAAMjb,GAEfid,OAAQR,EACRI,OAAQL,EACRU,MAAOkB,EACPjB,WAAYiB,EACZhB,SAAUgB,EACVb,UAAWa,EACXZ,eAAgBY,EAChBV,GAAIhc,EACJic,QAASjc,EACTU,IAAK,SAAUma,GACb,OAAO4B,EAAK5B,EAAEtB,KAEhBjM,KAAM,SAAUuN,GACdA,EAAEtB,IAEJ2C,KAAMA,EACNC,OAAQD,EACRE,OAAQF,EACR7O,OAAQ,SAAUwN,GAChB,OAAOA,EAAEtB,GAAK8B,EAAKJ,GAErBsB,QAAS,WACP,MAAO,CAAChD,IAEVxY,SAAU,WACR,MAAO,QAAUwY,EAAI,KAEvB8C,OAAQ,SAAUzb,GAChB,OAAOA,EAAEnE,GAAG8c,IAEd+C,QAAS,SAAU1b,EAAG+b,GACpB,OAAO/b,EAAE0a,KAAKR,GAAO,SAAU7C,GAC7B,OAAO0E,EAAUpD,EAAGtB,QAI1B,OAAOoD,GAELrW,EAAO,SAAU7G,GACnB,OAAiB,OAAVA,QAA4B4d,IAAV5d,EAAsB8c,EAAOwB,EAAKte,IAEzDye,EAAS,CACXH,KAAMA,EACNzB,KAAMA,EACNhW,KAAMA,GAGJ6X,EAAS,SAAUlI,GACrB,GAAU,OAANA,EACF,MAAO,OAET,IAAI9K,SAAW8K,EACf,MAAU,WAAN9K,IAAmBpE,MAAM3E,UAAUgc,cAAcnI,IAAMA,EAAEoI,aAAsC,UAAvBpI,EAAEoI,YAAYhgB,MACjF,QAEC,WAAN8M,IAAmBmT,OAAOlc,UAAUgc,cAAcnI,IAAMA,EAAEoI,aAAsC,WAAvBpI,EAAEoI,YAAYhgB,MAClF,SAEF8M,GAELoT,EAAS,SAAU1c,GACrB,OAAO,SAAUpC,GACf,OAAO0e,EAAO1e,KAAWoC,IAGzBkoD,EAAWxrC,EAAO,UAClBo4E,EAAWp4E,EAAO,UAClBmN,EAAUnN,EAAO,SACjB2jL,EAAS3jL,EAAO,QAChByrC,EAAYzrC,EAAO,WACnBC,EAAaD,EAAO,YACpB0rC,EAAW1rC,EAAO,UAElBE,EAAc1X,MAAM3E,UAAUoE,MAC9BkY,EAAgB3X,MAAM3E,UAAU6F,QAChCiiD,EAAanjD,MAAM3E,UAAUyE,KAC7B8X,EAAa,SAAUC,EAAIzT,GAC7B,OAAOuT,EAAcpc,KAAKsc,EAAIzT,IAE5BlD,EAAU,SAAU4W,EAAI5I,GAC1B,IAAI6I,EAAIH,EAAWE,EAAI5I,GACvB,OAAc,IAAP6I,EAAWZ,EAAO5B,OAAS4B,EAAOH,KAAKe,IAE5C/K,EAAW,SAAU8K,EAAI5I,GAC3B,OAAO0I,EAAWE,EAAI5I,IAAM,GAE1BwH,EAAS,SAAUoB,EAAIE,GACzB,IAAK,IAAItb,EAAI,EAAGgD,EAAMoY,EAAG1b,OAAQM,EAAIgD,EAAKhD,IAAK,CAC7C,IAAIwS,EAAI4I,EAAGpb,GACX,GAAIsb,EAAK9I,EAAGxS,GACV,OAAO,EAGX,OAAO,GAELzB,EAAM,SAAU6c,EAAI1C,GAGtB,IAFA,IAAI1V,EAAMoY,EAAG1b,OACT2b,EAAI,IAAI/X,MAAMN,GACThD,EAAI,EAAGA,EAAIgD,EAAKhD,IAAK,CAC5B,IAAIwS,EAAI4I,EAAGpb,GACXqb,EAAErb,GAAK0Y,EAAElG,EAAGxS,GAEd,OAAOqb,GAELlQ,EAAO,SAAUiQ,EAAI1C,GACvB,IAAK,IAAI1Y,EAAI,EAAGgD,EAAMoY,EAAG1b,OAAQM,EAAIgD,EAAKhD,IAAK,CAC7C,IAAIwS,EAAI4I,EAAGpb,GACX0Y,EAAElG,EAAGxS,KAGLqjJ,EAAQ,SAAUjoI,EAAI1C,GACxB,IAAK,IAAI1Y,EAAIob,EAAG1b,OAAS,EAAGM,GAAK,EAAGA,IAAK,CACvC,IAAIwS,EAAI4I,EAAGpb,GACX0Y,EAAElG,EAAGxS,KAGL0+L,EAAY,SAAUtjL,EAAIE,GAG5B,IAFA,IAAIqjL,EAAO,GACPC,EAAO,GACF5+L,EAAI,EAAGgD,EAAMoY,EAAG1b,OAAQM,EAAIgD,EAAKhD,IAAK,CAC7C,IAAIwS,EAAI4I,EAAGpb,GACPuqE,EAAMjvD,EAAK9I,EAAGxS,GAAK2+L,EAAOC,EAC9Br0H,EAAInnE,KAAKoP,GAEX,MAAO,CACLmsL,KAAMA,EACNC,KAAMA,IAGN1zL,EAAS,SAAUkQ,EAAIE,GAEzB,IADA,IAAID,EAAI,GACCrb,EAAI,EAAGgD,EAAMoY,EAAG1b,OAAQM,EAAIgD,EAAKhD,IAAK,CAC7C,IAAIwS,EAAI4I,EAAGpb,GACPsb,EAAK9I,EAAGxS,IACVqb,EAAEjY,KAAKoP,GAGX,OAAO6I,GAELioI,EAAQ,SAAUloI,EAAI1C,EAAGouC,GAI3B,OAHAu8F,EAAMjoI,GAAI,SAAU5I,GAClBs0C,EAAMpuC,EAAEouC,EAAKt0C,MAERs0C,GAELD,EAAQ,SAAUzrC,EAAI1C,EAAGouC,GAI3B,OAHA37C,EAAKiQ,GAAI,SAAU5I,GACjBs0C,EAAMpuC,EAAEouC,EAAKt0C,MAERs0C,GAELl7C,EAAO,SAAUwP,EAAIE,GACvB,IAAK,IAAItb,EAAI,EAAGgD,EAAMoY,EAAG1b,OAAQM,EAAIgD,EAAKhD,IAAK,CAC7C,IAAIwS,EAAI4I,EAAGpb,GACX,GAAIsb,EAAK9I,EAAGxS,GACV,OAAOya,EAAOH,KAAK9H,GAGvB,OAAOiI,EAAO5B,QAEZ8kD,GAAY,SAAUviD,EAAIE,GAC5B,IAAK,IAAItb,EAAI,EAAGgD,EAAMoY,EAAG1b,OAAQM,EAAIgD,EAAKhD,IAAK,CAC7C,IAAIwS,EAAI4I,EAAGpb,GACX,GAAIsb,EAAK9I,EAAGxS,GACV,OAAOya,EAAOH,KAAKta,GAGvB,OAAOya,EAAO5B,QAEZkuC,GAAU,SAAU3rC,GAEtB,IADA,IAAIC,EAAI,GACCrb,EAAI,EAAGgD,EAAMoY,EAAG1b,OAAQM,EAAIgD,IAAOhD,EAAG,CAC7C,IAAKioB,EAAQ7M,EAAGpb,IACd,MAAM,IAAIyZ,MAAM,oBAAsBzZ,EAAI,6BAA+Bob,GAE3EqrC,EAAWjjD,MAAM6X,EAAGD,EAAGpb,IAEzB,OAAOqb,GAELtB,GAAO,SAAUqB,EAAI1C,GACvB,IAAIjf,EAAS8E,EAAI6c,EAAI1C,GACrB,OAAOquC,GAAQttD,IAEbwgB,GAAS,SAAUmB,EAAIE,GACzB,IAAK,IAAItb,EAAI,EAAGgD,EAAMoY,EAAG1b,OAAQM,EAAIgD,IAAOhD,EAAG,CAC7C,IAAIwS,EAAI4I,EAAGpb,GACX,IAAmB,IAAfsb,EAAK9I,EAAGxS,GACV,OAAO,EAGX,OAAO,GAELyoC,GAAU,SAAUrtB,GACtB,IAAIC,EAAIL,EAAYnc,KAAKuc,EAAI,GAE7B,OADAC,EAAEotB,UACKptB,GAELwjL,GAAa,SAAUC,EAAIC,GAC7B,OAAO7zL,EAAO4zL,GAAI,SAAUtsL,GAC1B,OAAQlC,EAASyuL,EAAIvsL,OAGrBwsL,GAAc,SAAU5jL,EAAI1C,GAE9B,IADA,IAAI2C,EAAI,GACCrb,EAAI,EAAGgD,EAAMoY,EAAG1b,OAAQM,EAAIgD,EAAKhD,IAAK,CAC7C,IAAIwS,EAAI4I,EAAGpb,GACXqb,EAAER,OAAOrI,IAAMkG,EAAElG,EAAGxS,GAEtB,OAAOqb,GAELgJ,GAAO,SAAUjJ,EAAIkJ,GACvB,IAAIC,EAAOvJ,EAAYnc,KAAKuc,EAAI,GAEhC,OADAmJ,EAAKF,KAAKC,GACHC,GAELtE,GAAO,SAAU7E,GACnB,OAAqB,IAAdA,EAAG1b,OAAe+a,EAAO5B,OAAS4B,EAAOH,KAAKc,EAAG,KAEtD7I,GAAO,SAAU6I,GACnB,OAAqB,IAAdA,EAAG1b,OAAe+a,EAAO5B,OAAS4B,EAAOH,KAAKc,EAAGA,EAAG1b,OAAS,KAElEmoE,GAAS9sD,EAAWzX,MAAMT,MAAQS,MAAMT,KAAO,SAAU2P,GAC3D,OAAOwI,EAAYnc,KAAK2T,IAGtB4sB,GAAsC,qBAAtBvjC,EAAW4B,OAAyB5B,EAAW4B,OAAS4hC,SAAS,eAATA,GAExEC,GAAO,SAAUC,EAAOC,GAE1B,IADA,IAAI/gC,OAAcmb,IAAV4lB,GAAiC,OAAVA,EAAiBA,EAAQJ,GAC/Cp/B,EAAI,EAAGA,EAAIu/B,EAAM7/B,aAAgBka,IAANnb,GAAyB,OAANA,IAAcuB,EACnEvB,EAAIA,EAAE8gC,EAAMv/B,IAEd,OAAOvB,GAELjC,GAAU,SAAUijC,EAAGD,GACzB,IAAID,EAAQE,EAAE9oC,MAAM,KACpB,OAAO2oC,GAAKC,EAAOC,IAGjBE,GAAS,SAAU9kC,EAAM4kC,GAC3B,OAAOhjC,GAAQ5B,EAAM4kC,IAEnBjmB,GAAW,SAAU3e,EAAM4kC,GAC7B,IAAIG,EAASD,GAAO9kC,EAAM4kC,GAC1B,QAAe5lB,IAAX+lB,GAAmC,OAAXA,EAC1B,MAAM,IAAIlmB,MAAM7e,EAAO,kCAEzB,OAAO+kC,GAELC,GAAW,CAAErmB,SAAUA,IAEvB1T,GAAM,WACR,OAAO+5B,GAASrmB,SAAS,QAEvB+Y,GAAkB,SAAUH,GAC9B,OAAOtsB,KAAMysB,gBAAgBH,IAE3BkD,GAAkB,SAAU1W,GAC9B9Y,KAAMwvB,gBAAgB1W,IAEpB0T,GAAM,CACRC,gBAAiBA,GACjB+C,gBAAiBA,IAGf4pK,GAAMpjM,EAAW0zD,UAAW3B,GAAYqxI,GAAIrxI,UAE5CsxI,GAAkB,SAAU/nE,GAC9B,MAAO,eAAgBt7H,EAAW4B,QAAS5B,EAAWsjM,WAAWhoE,GAAOhuH,SAE1EqiD,GAAQ,EACRiB,EAAU,UAAU9rD,KAAKitD,IACzB4iB,EAAS,SAAS7vE,KAAKitD,IACvBj/B,GAAM6hD,IAAWhlB,GAAS,SAAS7qD,KAAKitD,KAAc,aAAajtD,KAAKs+L,GAAIG,SAC5EzwK,EAAKA,GAAM,eAAeh1B,KAAKi0D,IAAW,GAC1CswI,GAA0C,IAAnCtwI,GAAUppD,QAAQ,eAAqD,IAA9BopD,GAAUppD,QAAQ,SAAsD,IAArCy6L,GAAIG,QAAQ56L,QAAQ,cAAsB,GAC7H25L,GAAuC,IAAhCvwI,GAAUppD,QAAQ,WAAoBmqB,IAAOuvK,GAAO,GAC3DvvK,EAAKA,GAAMuvK,GAAQC,EACnB5sH,GAASf,IAAW0tH,GAAQ,QAAQv9L,KAAKitD,IACzCpyC,GAAoC,IAA9BoyC,GAAUppD,QAAQ,OACxB45L,EAAU,gBAAgBz9L,KAAKitD,IAC/BywI,EAAU,aAAcxiM,EAAW4B,QAAU,eAAgB5B,EAAW4B,QAAU,QAAS5B,EAAW4B,UAAY40B,GAAIC,gBACtHgsK,EAAQY,GAAgB,+CAAiDzyI,GAAW2xI,GACpFG,EAASW,GAAgB,wCAA0CzyI,GAAW2xI,GAC9EI,GAAuD,IAAxC5wI,GAAUppD,QAAQ,iBAC7B25L,IACF3tH,GAAS,GAEX,IAmMI6uH,GAnMA1zL,IAAmByyL,GAAWC,GAAWhjM,SAASuyD,GAAUxyD,MAAM,sBAAsB,GAAI,KAAO,IACnGkkM,GAAM,CACR9zI,MAAOA,EACPglB,OAAQA,EACR7hD,GAAIA,EACJ4iD,MAAOA,EACP/1D,IAAKA,EACL62D,IAAK+rH,EACL3xI,QAASA,EACT9gD,gBAAiBA,GACjBozD,eAAgB,iFAChBwgI,WAAmB,IAAP5wK,EACZskD,MAAOp3E,EAAW4B,OAAOmvL,cAAgB,UAAW/wL,EAAW4B,OAC/D+hM,aAAc7wK,IAAOwvK,EAAOtiM,EAAWwE,SAASm/L,cAAgB,EAAI,GACpEnB,QAASA,EACTrtE,SAAgB,IAAPriG,GAAgBA,EAAK,EAC9Bg5F,YAAa,KACbnhG,UAAW,KACXi5K,iBAAkB,KAClBC,uBAAuB,EACvBC,YAAmB,IAAPhxK,GAAgBA,EAAK,GACjCixK,SAAUtB,IAAUC,EACpBC,aAAcA,GAGZzuK,GAAU,WACZ,SAAShW,EAAK3B,EAAIuY,GAChB,OAAO,WACLvY,EAAG5U,MAAMmtB,EAASlxB,YAGtB,IAAIwoB,EAAU3kB,MAAM2kB,SAAW,SAAUjsB,GACvC,MAAiD,mBAA1C0C,OAAOC,UAAUC,SAASC,KAAK7C,IAEpCg0B,EAAU,SAAU5X,GACtB,GAAoB,kBAAT9hB,KACT,MAAM,IAAI25B,UAAU,wCAEtB,GAAkB,oBAAP7X,EACT,MAAM,IAAI6X,UAAU,kBAEtB35B,KAAK45B,OAAS,KACd55B,KAAK65B,OAAS,KACd75B,KAAK85B,WAAa,GAClBC,EAAUjY,EAAI2B,EAAKvd,EAASlG,MAAOyjB,EAAKuW,EAAQh6B,QAE9Ci6B,EAAOP,EAAQQ,aAAuC,oBAAjBC,cAA+BA,cAAgB,SAAUrY,GAChGsY,WAAWtY,EAAI,IAEjB,SAASwY,EAAOC,GACd,IAAI3X,EAAK5iB,KACW,OAAhBA,KAAK45B,OAITK,GAAK,WACH,IAAIO,EAAK5X,EAAGgX,OAASW,EAASE,YAAcF,EAASG,WACrD,GAAW,OAAPF,EAAJ,CAIA,IAAIlxB,EACJ,IACEA,EAAMkxB,EAAG5X,EAAGiX,QACZ,MAAO1lB,GAEP,YADAomB,EAASP,OAAO7lB,GAGlBomB,EAASr0B,QAAQoD,QAVdsZ,EAAGgX,OAASW,EAASr0B,QAAUq0B,EAASP,QAAQpX,EAAGiX,WANtD75B,KAAK85B,WAAWhtB,KAAKytB,GAmBzB,SAASr0B,EAAQy0B,GACf,IACE,GAAIA,IAAa36B,KACf,MAAM,IAAI25B,UAAU,6CAEtB,GAAIgB,IAAiC,kBAAbA,GAA6C,oBAAbA,GAA0B,CAChF,IAAIC,EAAOD,EAASC,KACpB,GAAoB,oBAATA,EAET,YADAb,EAAUtW,EAAKmX,EAAMD,GAAWlX,EAAKvd,EAASlG,MAAOyjB,EAAKuW,EAAQh6B,OAItEA,KAAK45B,QAAS,EACd55B,KAAK65B,OAASc,EACdE,EAAOtyB,KAAKvI,MACZ,MAAOmU,GACP6lB,EAAOzxB,KAAKvI,KAAMmU,IAGtB,SAAS6lB,EAAOW,GACd36B,KAAK45B,QAAS,EACd55B,KAAK65B,OAASc,EACdE,EAAOtyB,KAAKvI,MAEd,SAAS66B,IACP,IAAK,IAAInxB,EAAI,EAAGgD,EAAM1M,KAAK85B,WAAW1wB,OAAQM,EAAIgD,EAAKhD,IACrD4wB,EAAO/xB,KAAKvI,KAAMA,KAAK85B,WAAWpwB,IAEpC1J,KAAK85B,WAAa,KAEpB,SAASiB,EAAQN,EAAaC,EAAYx0B,EAAS8zB,GACjDh6B,KAAKy6B,YAAqC,oBAAhBA,EAA6BA,EAAc,KACrEz6B,KAAK06B,WAAmC,oBAAfA,EAA4BA,EAAa,KAClE16B,KAAKkG,QAAUA,EACflG,KAAKg6B,OAASA,EAEhB,SAASD,EAAUjY,EAAI2Y,EAAaC,GAClC,IAAIM,GAAO,EACX,IACElZ,GAAG,SAAUpc,GACPs1B,IAGJA,GAAO,EACPP,EAAY/0B,OACX,SAAUu1B,GACPD,IAGJA,GAAO,EACPN,EAAWO,OAEb,MAAOC,GACP,GAAIF,EACF,OAEFA,GAAO,EACPN,EAAWQ,IA+Df,OA5DAxB,EAAQrxB,UAAU8yB,MAAQ,SAAUT,GAClC,OAAO16B,KAAK46B,KAAK,KAAMF,IAEzBhB,EAAQrxB,UAAUuyB,KAAO,SAAUH,EAAaC,GAC9C,IAAI9X,EAAK5iB,KACT,OAAO,IAAI05B,GAAQ,SAAUxzB,EAAS8zB,GACpCM,EAAO/xB,KAAKqa,EAAI,IAAImY,EAAQN,EAAaC,EAAYx0B,EAAS8zB,QAGlEN,EAAQvsB,IAAM,WACZ,IAAIN,EAAOG,MAAM3E,UAAUoE,MAAMlE,KAA0B,IAArBY,UAAUC,QAAgBuoB,EAAQxoB,UAAU,IAAMA,UAAU,GAAKA,WACvG,OAAO,IAAIuwB,GAAQ,SAAUxzB,EAAS8zB,GACpC,GAAoB,IAAhBntB,EAAKzD,OACP,OAAOlD,EAAQ,IAEjB,IAAIk1B,EAAYvuB,EAAKzD,OACrB,SAASiyB,EAAI3xB,EAAG4xB,GACd,IACE,GAAIA,IAAuB,kBAARA,GAAmC,oBAARA,GAAqB,CACjE,IAAIV,EAAOU,EAAIV,KACf,GAAoB,oBAATA,EAIT,YAHAA,EAAKryB,KAAK+yB,GAAK,SAAUA,GACvBD,EAAI3xB,EAAG4xB,KACNtB,GAIPntB,EAAKnD,GAAK4xB,EACU,MAAdF,GACJl1B,EAAQ2G,GAEV,MAAOquB,GACPlB,EAAOkB,IAGX,IAAK,IAAIxxB,EAAI,EAAGA,EAAImD,EAAKzD,OAAQM,IAC/B2xB,EAAI3xB,EAAGmD,EAAKnD,QAIlBgwB,EAAQxzB,QAAU,SAAUR,GAC1B,OAAIA,GAA0B,kBAAVA,GAAsBA,EAAM4e,cAAgBoV,EACvDh0B,EAEF,IAAIg0B,GAAQ,SAAUxzB,GAC3BA,EAAQR,OAGZg0B,EAAQM,OAAS,SAAUt0B,GACzB,OAAO,IAAIg0B,GAAQ,SAAUxzB,EAAS8zB,GACpCA,EAAOt0B,OAGXg0B,EAAQ6B,KAAO,SAAU1nB,GACvB,OAAO,IAAI6lB,GAAQ,SAAUxzB,EAAS8zB,GACpC,IAAK,IAAItwB,EAAI,EAAGgD,EAAMmH,EAAOzK,OAAQM,EAAIgD,EAAKhD,IAC5CmK,EAAOnK,GAAGkxB,KAAK10B,EAAS8zB,OAIvBN,GAEL6vK,GAAapiM,OAAOuyB,QAAUvyB,OAAOuyB,QAAUD,KAG/C+vK,GAAwB,SAAU//L,EAAUQ,GAC9C,IAAIP,EAAG+/L,EAA4BlkM,EAAW4B,OAAOqiM,sBACjDE,EAAU,CACZ,KACA,MACA,UAEEC,EAAc,SAAUlgM,GAC1BlE,EAAW4B,OAAOizB,WAAW3wB,EAAU,IAEzC,IAAKC,EAAI,EAAGA,EAAIggM,EAAQtgM,SAAWqgM,EAA2B//L,IAC5D+/L,EAA4BlkM,EAAW4B,OAAOuiM,EAAQhgM,GAAK,yBAExD+/L,IACHA,EAA4BE,GAE9BF,EAA0BhgM,EAAUQ,IAElC2/L,GAAoB,SAAUngM,EAAUi4I,GAI1C,MAHoB,kBAATA,IACTA,EAAO,GAEFtnH,WAAW3wB,EAAUi4I,IAE1BmoD,GAAqB,SAAUpgM,EAAUi4I,GAI3C,MAHoB,kBAATA,IACTA,EAAO,GAEF9sE,YAAYnrE,EAAUi4I,IAE3BooD,GAAsB,SAAUnhM,GAClC,OAAOwwC,aAAaxwC,IAElBohM,GAAuB,SAAUphM,GACnC,OAAOksE,cAAclsE,IAEnBqhM,GAAW,SAAUvgM,EAAUi4I,GACjC,IAAImrC,EAAO5kD,EAWX,OAVAA,EAAO,WACL,IAAIp7H,EAAO1D,UACXgwC,aAAa0zI,GACbA,EAAQ+c,IAAkB,WACxBngM,EAASyD,MAAMlN,KAAM6M,KACpB60I,IAELzZ,EAAK2nB,KAAO,WACVz2G,aAAa0zI,IAER5kD,GAELgiE,GAAQ,CACVT,sBAAuB,SAAU//L,EAAUQ,GACrC8+L,GACFA,GAA6BnuK,KAAKnxB,GAGpCs/L,GAA+B,IAAIQ,IAAW,SAAUrjM,GACjD+D,IACHA,EAAU1E,EAAWwE,SAAS2J,MAEhC81L,GAAsBtjM,EAAS+D,MAC9B2wB,KAAKnxB,IAEV2wB,WAAYwvK,GACZh1H,YAAai1H,GACb30K,iBAAkB,SAAU7uB,EAAQoD,EAAUi4I,GAC5C,OAAOkoD,IAAkB,WAClBvjM,EAAO6jC,SACVzgC,MAEDi4I,IAELwoD,kBAAmB,SAAU7jM,EAAQoD,EAAUi4I,GAC7C,IAAImrC,EAQJ,OAPAA,EAAQgd,IAAmB,WACpBxjM,EAAO6jC,QAGV2qC,cAAcg4G,GAFdpjL,MAIDi4I,GACImrC,GAETmd,SAAUA,GACVld,SAAUkd,GACVn1H,cAAek1H,GACf5wJ,aAAc2wJ,IAGZK,GAAqB,YACrBC,GAAe,+BACfC,GAAa,CACfC,YAAa,EACbC,OAAQ,EACRC,OAAQ,EACRC,YAAa,EACbC,gBAAiB,EACjBC,gBAAiB,EACjBC,cAAe,GAEbC,GAAwB,SAAUx2K,GACpC,OAAOA,EAAM+7C,qBAAuB06H,IAAcz2K,EAAM+7C,qBAAuB26H,IAE7EA,GAAc,WAChB,OAAO,GAELD,GAAa,WACf,OAAO,GAELE,GAAW,SAAUh0L,EAAQ1S,EAAMmF,EAAUo4F,GAC3C7qF,EAAOpJ,iBACToJ,EAAOpJ,iBAAiBtJ,EAAMmF,EAAUo4F,IAAW,GAC1C7qF,EAAOi0L,aAChBj0L,EAAOi0L,YAAY,KAAO3mM,EAAMmF,IAGhCyhM,GAAc,SAAUl0L,EAAQ1S,EAAMmF,EAAUo4F,GAC9C7qF,EAAOmlB,oBACTnlB,EAAOmlB,oBAAoB73B,EAAMmF,EAAUo4F,IAAW,GAC7C7qF,EAAOm0L,aAChBn0L,EAAOm0L,YAAY,KAAO7mM,EAAMmF,IAGhC2hM,GAAyB,SAAU/2K,EAAOg3K,GAC5C,GAAIh3K,EAAMi3K,aAAc,CACtB,IAAIA,EAAej3K,EAAMi3K,eACzB,GAAIA,GAAgBA,EAAaliM,OAAS,EACxC,OAAOkiM,EAAa,GAGxB,OAAOD,GAELE,GAAM,SAAUC,EAAepgM,GACjC,IAAI9G,EACA+vB,EAAQjpB,GAAQ,GACpB,IAAK9G,KAAQknM,EACNnB,GAAW/lM,KACd+vB,EAAM/vB,GAAQknM,EAAclnM,IAShC,GANK+vB,EAAMrd,SACTqd,EAAMrd,OAASqd,EAAMo3K,YAAclmM,EAAWwE,UAE5Ci/L,GAAII,wBACN/0K,EAAMrd,OAASo0L,GAAuBI,EAAen3K,EAAMrd,SAEzDw0L,GAAiBpB,GAAa//L,KAAKmhM,EAAc1jM,YAAiCwb,IAAxBkoL,EAActsJ,YAAiD57B,IAA1BkoL,EAAcnsJ,QAAuB,CACtI,IAAIqsJ,EAAWr3K,EAAMrd,OAAOu1B,eAAiBhnC,EAAWwE,SACpD0oB,EAAMi5K,EAAS5iH,gBACfp1E,EAAOg4L,EAASh4L,KACpB2gB,EAAM6qB,MAAQssJ,EAAcnsJ,SAAW5sB,GAAOA,EAAIktB,YAAcjsC,GAAQA,EAAKisC,YAAc,IAAMltB,GAAOA,EAAIy1I,YAAcx0J,GAAQA,EAAKw0J,YAAc,GACrJ7zI,EAAM8qB,MAAQqsJ,EAAclsJ,SAAW7sB,GAAOA,EAAImtB,WAAalsC,GAAQA,EAAKksC,WAAa,IAAMntB,GAAOA,EAAIw1I,WAAav0J,GAAQA,EAAKu0J,WAAa,GAkCnJ,OAhCA5zI,EAAM0Y,eAAiB,WACrB1Y,EAAM+7C,mBAAqB06H,GACvBU,IACEA,EAAcz+J,eAChBy+J,EAAcz+J,iBAEdy+J,EAAcf,aAAc,IAIlCp2K,EAAMyY,gBAAkB,WACtBzY,EAAMs3K,qBAAuBb,GACzBU,IACEA,EAAc1+J,gBAChB0+J,EAAc1+J,kBAEd0+J,EAAcI,cAAe,IAInCv3K,EAAM8lD,yBAA2B,WAC/B9lD,EAAMw3K,8BAAgCf,GACtCz2K,EAAMyY,oBAE6B,IAAjC+9J,GAAsBx2K,KACxBA,EAAM+7C,mBAAqB26H,GAC3B12K,EAAMs3K,qBAAuBZ,GAC7B12K,EAAMw3K,8BAAgCd,IAEX,qBAAlB12K,EAAMw6D,UACfx6D,EAAMw6D,SAAU,GAEXx6D,GAELy3K,GAAc,SAAUv7J,EAAK9mC,EAAUsiM,GACzC,IAAIt5K,EAAM8d,EAAIxmC,SAAUsqB,EAAQ,CAAEvsB,KAAM,SACxC,GAAIikM,EAAWC,UACbviM,EAAS4qB,OADX,CAIA,IAAI43K,EAAa,WACf,MAA0B,aAAnBx5K,EAAIujB,YAAgD,gBAAnBvjB,EAAIujB,YAAgCvjB,EAAI/e,MAE9Ew4L,EAAe,WACZH,EAAWC,YACdD,EAAWC,WAAY,EACvBviM,EAAS4qB,KAGT83K,EAAmB,WACjBF,MACFf,GAAYz4K,EAAK,mBAAoB05K,GACrCD,MAGAE,EAAY,WACd,IACE35K,EAAIq2D,gBAAgBujH,SAAS,QAC7B,MAAOnxK,GAEP,YADA+uK,GAAM7vK,WAAWgyK,GAGnBF,MAEEz5K,EAAI7kB,kBAAsBo7L,GAAI3wK,IAAM2wK,GAAI3wK,GAAK,IAO/C2yK,GAASv4K,EAAK,mBAAoB05K,GAC9B15K,EAAIq2D,gBAAgBujH,UAAY97J,EAAIhpC,OAASgpC,EAAI3C,KACnDw+J,KAREH,IACFC,IAEAlB,GAASz6J,EAAK,mBAAoB27J,GAQtClB,GAASz6J,EAAK,OAAQ27J,KAEpBI,GAAa,WACf,IACiBnwL,EAAOowL,EAASC,EAAYC,EAAoBC,EAD7DnlM,EAAOvH,KACPktL,EAAS,GACbqf,EAAUpC,KAAuB,IAAIzyL,MAAQpP,SAAS,IACtDmkM,EAAqB,iBAAkBlnM,EAAWwE,SAAS++E,gBAC3D0jH,EAAa,cAAejnM,EAAWwE,SAAS++E,gBAChD4jH,EAAkB,CAChBC,WAAY,YACZC,WAAY,YAEdzwL,EAAQ,EACR5U,EAAKykM,WAAY,EACjBzkM,EAAK2lL,OAASA,EACd,IAAI2f,EAAkB,SAAU3hM,EAAKvC,GACnC,IAAImkM,EAAcpjM,EAAG1E,EAAGyE,EACpBymB,EAAYg9J,EAAOvkL,GAEvB,GADAmkM,EAAe58K,GAAaA,EAAUhlB,EAAIpD,MACtCglM,EACF,IAAKpjM,EAAI,EAAG1E,EAAI8nM,EAAa1jM,OAAQM,EAAI1E,EAAG0E,IAK1C,GAJAD,EAAWqjM,EAAapjM,GACpBD,IAAwD,IAA5CA,EAASw+H,KAAK1/H,KAAKkB,EAASy/B,MAAOh+B,IACjDA,EAAI6hC,iBAEF7hC,EAAI2gM,gCACN,QAKRtkM,EAAKkc,KAAO,SAAUzM,EAAQi2F,EAAOxjG,EAAUy/B,GAC7C,IAAIvgC,EAAImkM,EAAcpjM,EAAGpF,EAAMyoM,EAAUC,EAAenrG,EACpDtxD,EAAMhrC,EAAW4B,OACjB8lM,EAAuB,SAAU/hM,GACnC2hM,EAAgBtB,GAAIrgM,GAAOqlC,EAAIlc,OAAQ1rB,IAEzC,GAAKqO,GAA8B,IAApBA,EAAOoZ,UAAsC,IAApBpZ,EAAOoZ,SAA/C,CAGKpZ,EAAOu1L,GAKV5jM,EAAKqO,EAAOu1L,IAJZ5jM,EAAKwT,IACLnF,EAAOu1L,GAAW5jM,EAClBukL,EAAOvkL,GAAM,IAIfugC,EAAQA,GAASlyB,EACjBi2F,EAAQA,EAAM5sG,MAAM,KACpBqJ,EAAIujG,EAAM7jG,OACV,MAAOM,IACLpF,EAAO2oG,EAAMvjG,GACbsjM,EAAgBC,EAChBF,EAAWlrG,GAAU,EACR,qBAATv9F,IACFA,EAAO,SAELiD,EAAKykM,WAAsB,UAAT1nM,GAA0C,aAAtB0S,EAAOg/B,WAC/CvsC,EAASlB,KAAK2gC,EAAOqiK,GAAI,CAAEzjM,KAAMxD,MAG9BmoM,IACHM,EAAWL,EAAgBpoM,GACvByoM,IACFC,EAAgB,SAAU9hM,GACxB,IAAIoqD,EAAS43I,EAGb,GAFA53I,EAAUpqD,EAAIiiM,cACdD,EAAUhiM,EAAIkiM,cACVF,GAAW53I,EAAQt7C,SACrBkzL,EAAU53I,EAAQt7C,SAASkzL,QAE3B,MAAOA,GAAWA,IAAY53I,EAC5B43I,EAAUA,EAAQ3iM,WAGjB2iM,IACHhiM,EAAMqgM,GAAIrgM,GAAOqlC,EAAIlc,OACrBnpB,EAAIpD,KAAoB,aAAboD,EAAIpD,KAAsB,aAAe,aACpDoD,EAAI8L,OAASs+C,EACbu3I,EAAgB3hM,EAAKvC,OAKxB6jM,GAAwB,YAATloM,GAA+B,aAATA,IACxCu9F,GAAU,EACVkrG,EAAoB,YAATzoM,EAAqB,QAAU,OAC1C0oM,EAAgB,SAAU9hM,GACxBA,EAAMqgM,GAAIrgM,GAAOqlC,EAAIlc,OACrBnpB,EAAIpD,KAAoB,UAAboD,EAAIpD,KAAmB,UAAY,WAC9C+kM,EAAgB3hM,EAAKvC,KAGzBmkM,EAAe5f,EAAOvkL,GAAIrE,GACrBwoM,EAcU,UAATxoM,GAAoBiD,EAAKykM,UAC3BviM,EAAS,CAAE3B,KAAMxD,IAEjBwoM,EAAahgM,KAAK,CAChBm7H,KAAMx+H,EACNy/B,MAAOA,KAlBXgkJ,EAAOvkL,GAAIrE,GAAQwoM,EAAe,CAAC,CAC/B7kE,KAAMx+H,EACNy/B,MAAOA,IAEX4jK,EAAaC,SAAWA,EACxBD,EAAajrG,QAAUA,EACvBirG,EAAaE,cAAgBA,EAChB,UAAT1oM,EACFwnM,GAAY90L,EAAQg2L,EAAezlM,GAEnCyjM,GAASh0L,EAAQ+1L,GAAYzoM,EAAM0oM,EAAenrG,KAcxD,OADA7qF,EAAS81L,EAAe,EACjBrjM,IAETlC,EAAK6zE,OAAS,SAAUpkE,EAAQi2F,EAAOxjG,GACrC,IAAId,EAAImkM,EAAcpjM,EAAGwmK,EAAI5rK,EAAM+oM,EACnC,IAAKr2L,GAA8B,IAApBA,EAAOoZ,UAAsC,IAApBpZ,EAAOoZ,SAC7C,OAAO7oB,EAGT,GADAoB,EAAKqO,EAAOu1L,GACR5jM,EAAI,CAEN,GADA0kM,EAAWngB,EAAOvkL,GACdskG,EAAO,CACTA,EAAQA,EAAM5sG,MAAM,KACpBqJ,EAAIujG,EAAM7jG,OACV,MAAOM,IAGL,GAFApF,EAAO2oG,EAAMvjG,GACbojM,EAAeO,EAAS/oM,GACpBwoM,EAAc,CAChB,GAAIrjM,EAAU,CACZymK,EAAK48B,EAAa1jM,OAClB,MAAO8mK,IACL,GAAI48B,EAAa58B,GAAIjoC,OAASx+H,EAAU,CACtC,IAAIujM,EAAgBF,EAAaE,cAC7BD,EAAWD,EAAaC,SAAUlrG,EAAUirG,EAAajrG,QAC7DirG,EAAeA,EAAargM,MAAM,EAAGyjK,GAAIhuJ,OAAO4qL,EAAargM,MAAMyjK,EAAK,IACxE48B,EAAaE,cAAgBA,EAC7BF,EAAaC,SAAWA,EACxBD,EAAajrG,QAAUA,EACvBwrG,EAAS/oM,GAAQwoM,GAIlBrjM,GAAoC,IAAxBqjM,EAAa1jM,gBACrBikM,EAAS/oM,GAChB4mM,GAAYl0L,EAAQ81L,EAAaC,UAAYzoM,EAAMwoM,EAAaE,cAAeF,EAAajrG,eAI7F,CACL,IAAKv9F,KAAQ+oM,EACXP,EAAeO,EAAS/oM,GACxB4mM,GAAYl0L,EAAQ81L,EAAaC,UAAYzoM,EAAMwoM,EAAaE,cAAeF,EAAajrG,SAE9FwrG,EAAW,GAEb,IAAK/oM,KAAQ+oM,EACX,OAAO9lM,SAEF2lL,EAAOvkL,GACd,WACSqO,EAAOu1L,GACd,MAAOrxK,GACPlkB,EAAOu1L,GAAW,MAGtB,OAAOhlM,GAETA,EAAK4kC,KAAO,SAAUn1B,EAAQ1S,EAAMuI,GAClC,IAAIlE,EACJ,IAAKqO,GAA8B,IAApBA,EAAOoZ,UAAsC,IAApBpZ,EAAOoZ,SAC7C,OAAO7oB,EAETsF,EAAO0+L,GAAI,KAAM1+L,GACjBA,EAAK/E,KAAOxD,EACZuI,EAAKmK,OAASA,EACd,GACErO,EAAKqO,EAAOu1L,GACR5jM,GACFkkM,EAAgBhgM,EAAMlE,GAExBqO,EAASA,EAAOzM,YAAcyM,EAAOu1B,eAAiBv1B,EAAO04I,aAAe14I,EAAOouF,mBAC5EpuF,IAAWnK,EAAK8+L,wBACzB,OAAOpkM,GAETA,EAAKouJ,MAAQ,SAAU3+I,GACrB,IAAItN,EAAG8P,EACH4hE,EAAS7zE,EAAK6zE,OAClB,IAAKpkE,GAA8B,IAApBA,EAAOoZ,UAAsC,IAApBpZ,EAAOoZ,SAC7C,OAAO7oB,EAQT,GANIyP,EAAOu1L,IACTnxH,EAAOpkE,GAEJA,EAAOX,uBACVW,EAASA,EAAOjN,UAEdiN,GAAUA,EAAOX,qBAAsB,CACzC+kE,EAAOpkE,GACPwC,EAAWxC,EAAOX,qBAAqB,KACvC3M,EAAI8P,EAASpQ,OACb,MAAOM,IACLsN,EAASwC,EAAS9P,GACdsN,EAAOu1L,IACTnxH,EAAOpkE,GAIb,OAAOzP,GAETA,EAAK2mC,QAAU,WACbg/I,EAAS,IAEX3lL,EAAK8rC,OAAS,SAAUl/B,GAKtB,OAJIA,IACFA,EAAE44B,iBACF54B,EAAEgmE,6BAEG,IAGXmyH,GAAW9hB,MAAQ,IAAI8hB,GACvBA,GAAW9hB,MAAM/mK,KAAKle,EAAW4B,OAAQ,SAAS,eAGlD,IAAIuC,GAAG4jM,GAASC,GAAMr/H,GAASs/H,GAAO5hM,GAAU6hM,GAASt7L,GAAQu7L,GAAkBC,GAAWC,GAAcC,GAAa9jM,GAAU+jM,GAASC,GAAgBC,GAAWC,GAAep7L,GAAS8nD,GAAY4xI,GAAU,UAAY,IAAI70L,KAAQw2L,GAAe3oM,EAAW4B,OAAO4C,SAAUokM,GAAU,EAAGnzK,GAAO,EAAGozK,GAAaC,KAAeC,GAAaD,KAAeE,GAAgBF,KAAeG,GAAY,SAAU1tL,EAAGtB,GAI3Z,OAHIsB,IAAMtB,IACRouL,IAAe,GAEV,GACNa,GAAe,YAAkBC,GAAe,GAAK,GAAIC,GAAS,GAAGnmM,eAAgByrE,GAAM,GAAIqhD,GAAMrhD,GAAIqhD,IAAKs5E,GAAc36H,GAAInnE,KAAMA,GAAOmnE,GAAInnE,KAAML,GAAQwnE,GAAIxnE,MAAOoiM,GAAY56H,GAAI/lE,SAAW,SAAU+rD,GAEhN,IADA,IAAIvwD,EAAI,EAAGgD,EAAM1M,KAAKoJ,OACfM,EAAIgD,EAAKhD,IACd,GAAI1J,KAAK0J,KAAOuwD,EACd,OAAOvwD,EAGX,OAAQ,GACPolM,GAAW,6HAA8H1sG,GAAa,sBAAuB6oB,GAAa,mCAAoCx9G,GAAa,MAAQ20F,GAAa,KAAO6oB,GAAa,OAAS7oB,GAAa,gBAAkBA,GAAa,2DAA6D6oB,GAAa,OAAS7oB,GAAa,OAAQ2sG,GAAU,KAAO9jF,GAAP,wFAAwHx9G,GAAxH,eAA+J60F,GAAQ,IAAIrlD,OAAO,IAAMmlD,GAAa,8BAAgCA,GAAa,KAAM,KAAM4sG,GAAS,IAAI/xJ,OAAO,IAAMmlD,GAAa,KAAOA,GAAa,KAAM6sG,GAAe,IAAIhyJ,OAAO,IAAMmlD,GAAa,WAAaA,GAAa,IAAMA,GAAa,KAAM8sG,GAAmB,IAAIjyJ,OAAO,IAAMmlD,GAAa,iBAAmBA,GAAa,OAAQ,KAAM+sG,GAAU,IAAIlyJ,OAAO8xJ,IAAUK,GAAc,IAAInyJ,OAAO,IAAMguE,GAAa,KAAMokF,GAAY,CACvhCC,GAAI,IAAIryJ,OAAO,MAAQguE,GAAa,KACpCskF,MAAO,IAAItyJ,OAAO,QAAUguE,GAAa,KACzC9Z,IAAK,IAAIl0D,OAAO,KAAOguE,GAAa,SACpCukF,KAAM,IAAIvyJ,OAAO,IAAMxvC,IACvBgiM,OAAQ,IAAIxyJ,OAAO,IAAM8xJ,IACzBW,MAAO,IAAIzyJ,OAAO,yDAA2DmlD,GAAa,+BAAiCA,GAAa,cAAgBA,GAAa,aAAeA,GAAa,SAAU,KAC3MutG,KAAM,IAAI1yJ,OAAO,OAAS6xJ,GAAW,KAAM,KAC3Cc,aAAc,IAAI3yJ,OAAO,IAAMmlD,GAAa,mDAAqDA,GAAa,mBAAqBA,GAAa,mBAAoB,MACnKytG,GAAU,sCAAuCC,GAAU,SAAUC,GAAU,yBAA0BC,GAAa,mCAAoCC,GAAW,OAAQC,GAAU,QAASC,GAAY,IAAIlzJ,OAAO,qBAAuBmlD,GAAa,MAAQA,GAAa,OAAQ,MAAOguG,GAAY,SAAU1oM,EAAG2oM,EAASC,GAClU,IAAIC,EAAO,KAAOF,EAAU,MAC5B,OAAOE,IAASA,GAAQD,EAAoBD,EAAUE,EAAO,EAAIhsL,OAAOssE,aAAa0/G,EAAO,OAAShsL,OAAOssE,aAAa0/G,GAAQ,GAAK,MAAc,KAAPA,EAAc,QAE/J,IACEzjM,GAAKI,MAAM+mE,GAAMxnE,GAAMlE,KAAK2lM,GAAavwL,YAAauwL,GAAavwL,YACnEs2D,GAAIi6H,GAAavwL,WAAWvU,QAAQgnB,SACpC,MAAOjc,IACPrH,GAAO,CACLI,MAAO+mE,GAAI7qE,OAAS,SAAU4N,EAAQw5L,GACpC5B,GAAY1hM,MAAM8J,EAAQvK,GAAMlE,KAAKioM,KACnC,SAAUx5L,EAAQw5L,GACpB,IAAIvkM,EAAI+K,EAAO5N,OAAQM,EAAI,EAC3B,MAAOsN,EAAO/K,KAAOukM,EAAI9mM,MAEzBsN,EAAO5N,OAAS6C,EAAI,IAI1B,IAAIwkM,GAAS,SAAUjhM,EAAU2K,EAAS+mF,EAASwvG,GACjD,IAAI5rM,EAAOm1D,EAAMp4D,EAAGuuB,EAAU1mB,EAAG83F,EAAQl9C,EAAKqsJ,EAAKC,EAAYC,EAM/D,IALK12L,EAAUA,EAAQoyB,eAAiBpyB,EAAU+zL,MAAkBnkM,IAClE8jM,GAAY1zL,GAEdA,EAAUA,GAAWpQ,GACrBm3F,EAAUA,GAAW,IAChB1xF,GAAgC,kBAAbA,EACtB,OAAO0xF,EAET,GAAsC,KAAjC9wE,EAAWjW,EAAQiW,WAAgC,IAAbA,EACzC,MAAO,GAET,GAAI29K,KAAmB2C,EAAM,CAC3B,GAAI5rM,EAAQkrM,GAAW3sM,KAAKmM,GAC1B,GAAI3N,EAAIiD,EAAM,IACZ,GAAiB,IAAbsrB,EAAgB,CAElB,GADA6pC,EAAO9/C,EAAQqwG,eAAe3oH,IAC1Bo4D,IAAQA,EAAK1vD,WAMf,OAAO22F,EALP,GAAIjnC,EAAKtxD,KAAO9G,EAEd,OADAq/F,EAAQp0F,KAAKmtD,GACNinC,OAMX,GAAI/mF,EAAQoyB,gBAAkB0tB,EAAO9/C,EAAQoyB,cAAci+E,eAAe3oH,KAAO84D,GAAWxgD,EAAS8/C,IAASA,EAAKtxD,KAAO9G,EAExH,OADAq/F,EAAQp0F,KAAKmtD,GACNinC,MAGN,IAAIp8F,EAAM,GAEf,OADAgI,GAAKI,MAAMg0F,EAAS/mF,EAAQ9D,qBAAqB7G,IAC1C0xF,EACF,IAAKr/F,EAAIiD,EAAM,KAAOwoM,GAAQwD,uBAEnC,OADAhkM,GAAKI,MAAMg0F,EAAS/mF,EAAQ22L,uBAAuBjvM,IAC5Cq/F,EAGX,GAAIosG,GAAQyD,OAAS/C,KAAcA,GAAU3jM,KAAKmF,IAAY,CAI5D,GAHAmhM,EAAMrsJ,EAAMioJ,GACZqE,EAAaz2L,EACb02L,EAA2B,IAAbzgL,GAAkB5gB,EACf,IAAb4gB,GAAqD,WAAnCjW,EAAQ3P,SAAS+f,cAA4B,CACjEi3E,EAAS51F,GAAS4D,IACd80C,EAAMnqC,EAAQ0D,aAAa,OAC7B8yL,EAAMrsJ,EAAIp8C,QAAQgoM,GAAS,QAE3B/1L,EAAQwC,aAAa,KAAMg0L,GAE7BA,EAAM,QAAWA,EAAM,MACvBjnM,EAAI83F,EAAOp4F,OACX,MAAOM,IACL83F,EAAO93F,GAAKinM,EAAMK,GAAWxvG,EAAO93F,IAEtCknM,EAAaX,GAAS5lM,KAAKmF,IAAayhM,GAAY92L,EAAQ5P,aAAe4P,EAC3E02L,EAAcrvG,EAAOl0F,KAAK,KAE5B,GAAIujM,EACF,IAEE,OADA/jM,GAAKI,MAAMg0F,EAAS0vG,EAAW5mM,iBAAiB6mM,IACzC3vG,EACP,MAAOgwG,IACP,QACK5sJ,GACHnqC,EAAQm7B,gBAAgB,QAMlC,OAAOnjC,GAAO3C,EAAStH,QAAQo6F,GAAO,MAAOnoF,EAAS+mF,EAASwvG,IAEjE,SAASrC,KACP,IAAIxoL,EAAO,GACX,SAAS2wD,EAAM3yE,EAAK6B,GAIlB,OAHImgB,EAAK/Y,KAAKjJ,EAAM,KAAO0pM,GAAK4D,oBACvB36H,EAAM3wD,EAAK41D,SAEbjF,EAAM3yE,EAAM,KAAO6B,EAE5B,OAAO8wE,EAET,SAAS46H,GAAatvL,GAEpB,OADAA,EAAGyqL,KAAW,EACPzqL,EAET,SAASuvL,GAAavwL,EAAGtB,GACvB,IAAI8xL,EAAM9xL,GAAKsB,EAAGsoH,EAAOkoE,GAAsB,IAAfxwL,EAAEsP,UAAiC,IAAf5Q,EAAE4Q,YAAoB5Q,EAAE+xL,aAAe7C,MAAkB5tL,EAAEywL,aAAe7C,IAC9H,GAAItlE,EACF,OAAOA,EAET,GAAIkoE,EACF,MAAOA,EAAMA,EAAIt/K,YACf,GAAIs/K,IAAQ9xL,EACV,OAAQ,EAId,OAAOsB,EAAI,GAAK,EAElB,SAAS0wL,GAAkB1pM,GACzB,OAAO,SAAUmyD,GACf,IAAI31D,EAAO21D,EAAKzvD,SAAS+f,cACzB,MAAgB,UAATjmB,GAAoB21D,EAAKnyD,OAASA,GAG7C,SAAS2pM,GAAmB3pM,GAC1B,OAAO,SAAUmyD,GACf,IAAI31D,EAAO21D,EAAKzvD,SAAS+f,cACzB,OAAiB,UAATjmB,GAA6B,WAATA,IAAsB21D,EAAKnyD,OAASA,GAGpE,SAAS4pM,GAAuB5vL,GAC9B,OAAOsvL,IAAa,SAAU/wG,GAE5B,OADAA,GAAYA,EACL+wG,IAAa,SAAUV,EAAM79L,GAClC,IAAI5G,EAAG0lM,EAAe7vL,EAAG,GAAI4uL,EAAKtnM,OAAQi3F,GAAW32F,EAAIioM,EAAavoM,OACtE,MAAOM,IACDgnM,EAAKzkM,EAAI0lM,EAAajoM,MACxBgnM,EAAKzkM,KAAO4G,EAAQ5G,GAAKykM,EAAKzkM,WAMxC,SAASglM,GAAY92L,GACnB,OAAOA,UAAkBA,EAAQ9D,uBAAyBo4L,IAAgBt0L,EA0f5E,IAAKzQ,MAxfL4jM,GAAUmD,GAAOnD,QAAU,GAC3BE,GAAQiD,GAAOjD,MAAQ,SAAUvzI,GAC/B,IAAI6uB,EAAkB7uB,IAASA,EAAK1tB,eAAiB0tB,GAAM6uB,gBAC3D,QAAOA,GAA+C,SAA7BA,EAAgBt+E,UAE3CqjM,GAAc4C,GAAO5C,YAAc,SAAUl8L,GAC3C,IAAIigM,EAAYn/K,EAAM9gB,EAAOA,EAAK46B,eAAiB56B,EAAOu8L,GAAc9jM,EAASqoB,EAAIi9H,YACrF,SAASiZ,EAAOp4H,GACd,IACE,OAAOA,EAAI3C,IACX,MAAO1S,IAET,OAAO,KAET,OAAIzI,IAAQ1oB,IAA6B,IAAjB0oB,EAAIrC,UAAmBqC,EAAIq2D,iBAGnD/+E,GAAW0oB,EACXq7K,GAAUr7K,EAAIq2D,gBACdilH,IAAkBP,GAAM/6K,GACpBroB,GAAUA,IAAWu+J,EAAOv+J,KAC1BA,EAAOwD,iBACTxD,EAAOwD,iBAAiB,UAAU,WAChCigM,QACC,GACMzjM,EAAO6gM,aAChB7gM,EAAO6gM,YAAY,YAAY,WAC7B4C,SAINP,GAAQ7/L,YAAa,EACrB6/L,GAAQj3L,sBAAuB,EAC/Bi3L,GAAQwD,uBAAyBf,GAAQ1lM,KAAKooB,EAAIq+K,wBAClDxD,GAAQuE,SAAU,EAClBtE,GAAKj4L,KAAKg6L,GAAK,SAAU3mM,EAAIwR,GAC3B,UAAWA,EAAQqwG,iBAAmBikF,IAAgBV,GAAgB,CACpE,IAAIlsM,EAAIsY,EAAQqwG,eAAe7hH,GAC/B,OAAO9G,GAAKA,EAAE0I,WAAa,CAAC1I,GAAK,KAGrC0rM,GAAK34L,OAAO06L,GAAK,SAAU3mM,GACzB,IAAImpM,EAASnpM,EAAGT,QAAQioM,GAAWC,IACnC,OAAO,SAAUn2I,GACf,OAAOA,EAAKp8C,aAAa,QAAUi0L,IAGvCvE,GAAKj4L,KAAK67F,IAAMm8F,GAAQj3L,qBAAuB,SAAU9I,EAAK4M,GAC5D,UAAWA,EAAQ9D,uBAAyBo4L,GAC1C,OAAOt0L,EAAQ9D,qBAAqB9I,IAEpC,SAAUA,EAAK4M,GACjB,IAAI8/C,EAAM0mF,EAAM,GAAIj3I,EAAI,EAAGw3F,EAAU/mF,EAAQ9D,qBAAqB9I,GAClE,GAAY,MAARA,EAAa,CACf,MAAO0sD,EAAOinC,EAAQx3F,KACE,IAAlBuwD,EAAK7pC,UACPuwH,EAAI7zI,KAAKmtD,GAGb,OAAO0mF,EAET,OAAOz/C,GAETqsG,GAAKj4L,KAAKi6L,MAAQjC,GAAQwD,wBAA0B,SAAUxmM,EAAW6P,GACvE,GAAI4zL,GACF,OAAO5zL,EAAQ22L,uBAAuBxmM,IAG1C2jM,GAAgB,GAChBD,GAAY,GACZV,GAAQyE,mBAAoB,EAC5B/D,GAAYA,GAAU5kM,QAAU,IAAI6zC,OAAO+wJ,GAAU1gM,KAAK,MAC1D2gM,GAAgBA,GAAc7kM,QAAU,IAAI6zC,OAAOgxJ,GAAc3gM,KAAK,MACtEskM,EAAa7B,GAAQ1lM,KAAKyjM,GAAQh6I,yBAClC6G,GAAai3I,GAAc7B,GAAQ1lM,KAAKyjM,GAAQ9zL,UAAY,SAAU8G,EAAGtB,GACvE,IAAIwyL,EAAuB,IAAflxL,EAAEsP,SAAiBtP,EAAEgoE,gBAAkBhoE,EAAGmxL,EAAMzyL,GAAKA,EAAEjV,WACnE,OAAOuW,IAAMmxL,MAAUA,GAAwB,IAAjBA,EAAI7hL,YAAmB4hL,EAAMh4L,SAAWg4L,EAAMh4L,SAASi4L,GAAOnxL,EAAEgzC,yBAA4D,GAAjChzC,EAAEgzC,wBAAwBm+I,MACjJ,SAAUnxL,EAAGtB,GACf,GAAIA,EACF,MAAOA,EAAIA,EAAEjV,WACX,GAAIiV,IAAMsB,EACR,OAAO,EAIb,OAAO,GAET0tL,GAAYoD,EAAa,SAAU9wL,EAAGtB,GACpC,GAAIsB,IAAMtB,EAER,OADAouL,IAAe,EACR,EAET,IAAI9hB,GAAWhrK,EAAEgzC,yBAA2Bt0C,EAAEs0C,wBAC9C,OAAIg4H,IAGJA,GAAWhrK,EAAEyrB,eAAiBzrB,MAAQtB,EAAE+sB,eAAiB/sB,GAAKsB,EAAEgzC,wBAAwBt0C,GAAK,EAC/E,EAAVssK,IAAgBwhB,GAAQ4E,cAAgB1yL,EAAEs0C,wBAAwBhzC,KAAOgrK,EACvEhrK,IAAM2R,GAAO3R,EAAEyrB,gBAAkB2hK,IAAgBvzI,GAAWuzI,GAAcptL,IACpE,EAENtB,IAAMiT,GAAOjT,EAAE+sB,gBAAkB2hK,IAAgBvzI,GAAWuzI,GAAc1uL,GACrE,EAEFmuL,GAAYkB,GAAUtmM,KAAKolM,GAAW7sL,GAAK+tL,GAAUtmM,KAAKolM,GAAWnuL,GAAK,EAElE,EAAVssK,GAAe,EAAI,IACxB,SAAUhrK,EAAGtB,GACf,GAAIsB,IAAMtB,EAER,OADAouL,IAAe,EACR,EAET,IAAI0D,EAAK5nM,EAAI,EAAGyoM,EAAMrxL,EAAEvW,WAAY0nM,EAAMzyL,EAAEjV,WAAY6nM,EAAK,CAACtxL,GAAIuxL,EAAK,CAAC7yL,GACxE,IAAK2yL,IAAQF,EACX,OAAOnxL,IAAM2R,GAAO,EAAIjT,IAAMiT,EAAM,EAAI0/K,GAAO,EAAIF,EAAM,EAAItE,GAAYkB,GAAUtmM,KAAKolM,GAAW7sL,GAAK+tL,GAAUtmM,KAAKolM,GAAWnuL,GAAK,EAClI,GAAI2yL,IAAQF,EACjB,OAAOZ,GAAavwL,EAAGtB,GAEzB8xL,EAAMxwL,EACN,MAAOwwL,EAAMA,EAAI/mM,WACf6nM,EAAGrkH,QAAQujH,GAEbA,EAAM9xL,EACN,MAAO8xL,EAAMA,EAAI/mM,WACf8nM,EAAGtkH,QAAQujH,GAEb,MAAOc,EAAG1oM,KAAO2oM,EAAG3oM,GAClBA,IAEF,OAAOA,EAAI2nM,GAAae,EAAG1oM,GAAI2oM,EAAG3oM,IAAM0oM,EAAG1oM,KAAOwkM,IAAgB,EAAImE,EAAG3oM,KAAOwkM,GAAe,EAAI,GAE9Fz7K,GApHE1oB,IAsHX0mM,GAAO59L,QAAU,SAAUy/L,EAAMxoM,GAC/B,OAAO2mM,GAAO6B,EAAM,KAAM,KAAMxoM,IAElC2mM,GAAO8B,gBAAkB,SAAUt4I,EAAMq4I,GAKvC,IAJKr4I,EAAK1tB,eAAiB0tB,KAAUlwD,IACnC8jM,GAAY5zI,GAEdq4I,EAAOA,EAAKpqM,QAAQgnM,GAAkB,UAClC5B,GAAQiF,iBAAmBxE,MAAoBE,KAAkBA,GAAc5jM,KAAKioM,OAAYtE,KAAcA,GAAU3jM,KAAKioM,IAC/H,IACE,IAAIhpM,EAAMuJ,GAAQtK,KAAK0xD,EAAMq4I,GAC7B,GAAIhpM,GAAOgkM,GAAQyE,mBAAqB93I,EAAKlwD,UAAuC,KAA3BkwD,EAAKlwD,SAASqmB,SACrE,OAAO9mB,EAET,MAAO6K,KAGX,OAAOs8L,GAAO6B,EAAMvoM,GAAU,KAAM,CAACkwD,IAAO7wD,OAAS,GAEvDqnM,GAAOz2L,SAAW,SAAUG,EAAS8/C,GAInC,OAHK9/C,EAAQoyB,eAAiBpyB,KAAapQ,IACzC8jM,GAAY1zL,GAEPwgD,GAAWxgD,EAAS8/C,IAE7Bw2I,GAAOz7L,KAAO,SAAUilD,EAAM31D,IACvB21D,EAAK1tB,eAAiB0tB,KAAUlwD,IACnC8jM,GAAY5zI,GAEd,IAAIn4C,EAAKyrL,GAAKiF,WAAWluM,EAAKimB,eAAgB+Q,EAAMxZ,GAAM6sL,GAAOpmM,KAAKglM,GAAKiF,WAAYluM,EAAKimB,eAAiBzI,EAAGm4C,EAAM31D,GAAOypM,SAAkBzqL,EAC/I,YAAeA,IAARgY,EAAoBA,EAAMgyK,GAAQ7/L,aAAesgM,GAAiB9zI,EAAKp8C,aAAavZ,IAASg3B,EAAM2+B,EAAKw4I,iBAAiBnuM,KAAUg3B,EAAIo3K,UAAYp3K,EAAI51B,MAAQ,MAExK+qM,GAAOp0K,MAAQ,SAAUnZ,GACvB,MAAM,IAAIC,MAAM,0CAA4CD,IAE9DutL,GAAOkC,WAAa,SAAUzxG,GAC5B,IAAIjnC,EAAM24I,EAAa,GAAI3mM,EAAI,EAAGvC,EAAI,EAItC,GAHAkkM,IAAgBN,GAAQuF,iBACxBlF,IAAaL,GAAQwF,YAAc5xG,EAAQz0F,MAAM,GACjDy0F,EAAQnzE,KAAKygL,IACTZ,GAAc,CAChB,MAAO3zI,EAAOinC,EAAQx3F,KAChBuwD,IAASinC,EAAQx3F,KACnBuC,EAAI2mM,EAAW9lM,KAAKpD,IAGxB,MAAOuC,IACLi1F,EAAQj0F,OAAO2lM,EAAW3mM,GAAI,GAIlC,OADA0hM,GAAY,KACLzsG,GAEThzB,GAAUuiI,GAAOviI,QAAU,SAAUjU,GACnC,IAAItoD,EAAMrI,EAAM,GAAII,EAAI,EAAG0mB,EAAW6pC,EAAK7pC,SAC3C,GAAKA,GAIE,GAAiB,IAAbA,GAA+B,IAAbA,GAA+B,KAAbA,EAAiB,CAC9D,GAAgC,kBAArB6pC,EAAKvvD,YACd,OAAOuvD,EAAKvvD,YAEZ,IAAKuvD,EAAOA,EAAKr8C,WAAYq8C,EAAMA,EAAOA,EAAKjoC,YAC7C1oB,GAAO4kE,GAAQjU,QAGd,GAAiB,IAAb7pC,GAA+B,IAAbA,EAC3B,OAAO6pC,EAAK0oE,eAZZ,MAAOhxH,EAAOsoD,EAAKvwD,KACjBJ,GAAO4kE,GAAQv8D,GAanB,OAAOrI,GAETikM,GAAOkD,GAAOljK,UAAY,CACxB4jK,YAAa,GACb4B,aAAc3B,GACdtsM,MAAOuqM,GACPmD,WAAY,GACZl9L,KAAM,GACN28K,SAAU,CACR,IAAK,CACHzmK,IAAK,aACLy3E,OAAO,GAET,IAAK,CAAEz3E,IAAK,cACZ,IAAK,CACHA,IAAK,kBACLy3E,OAAO,GAET,IAAK,CAAEz3E,IAAK,oBAEdwnL,UAAW,CACTxD,KAAM,SAAU1qM,GAMd,OALAA,EAAM,GAAKA,EAAM,GAAGoD,QAAQioM,GAAWC,IACvCtrM,EAAM,IAAMA,EAAM,IAAMA,EAAM,IAAMA,EAAM,IAAM,IAAIoD,QAAQioM,GAAWC,IACtD,OAAbtrM,EAAM,KACRA,EAAM,GAAK,IAAMA,EAAM,GAAK,KAEvBA,EAAM2H,MAAM,EAAG,IAExBijM,MAAO,SAAU5qM,GAWf,OAVAA,EAAM,GAAKA,EAAM,GAAGylB,cACS,QAAzBzlB,EAAM,GAAG2H,MAAM,EAAG,IACf3H,EAAM,IACT2rM,GAAOp0K,MAAMv3B,EAAM,IAErBA,EAAM,KAAOA,EAAM,GAAKA,EAAM,IAAMA,EAAM,IAAM,GAAK,GAAkB,SAAbA,EAAM,IAA8B,QAAbA,EAAM,KACvFA,EAAM,KAAOA,EAAM,GAAKA,EAAM,IAAmB,QAAbA,EAAM,KACjCA,EAAM,IACf2rM,GAAOp0K,MAAMv3B,EAAM,IAEdA,GAET2qM,OAAQ,SAAU3qM,GAChB,IAAImuM,EAAQC,GAAYpuM,EAAM,IAAMA,EAAM,GAC1C,OAAIuqM,GAAUK,MAAMrlM,KAAKvF,EAAM,IACtB,MAELA,EAAM,GACRA,EAAM,GAAKA,EAAM,IAAMA,EAAM,IAAM,GAC1BouM,GAAY/D,GAAQ9kM,KAAK6oM,KAAcD,EAASrnM,GAASsnM,GAAU,MAAWD,EAASC,EAAShlM,QAAQ,IAAKglM,EAAS9pM,OAAS6pM,GAAUC,EAAS9pM,UAC3JtE,EAAM,GAAKA,EAAM,GAAG2H,MAAM,EAAGwmM,GAC7BnuM,EAAM,GAAKouM,EAASzmM,MAAM,EAAGwmM,IAExBnuM,EAAM2H,MAAM,EAAG,MAG1BmI,OAAQ,CACNu8F,IAAK,SAAUgiG,GACb,IAAI3oM,EAAW2oM,EAAiBjrM,QAAQioM,GAAWC,IAAW7lL,cAC9D,MAA4B,MAArB4oL,EAA2B,WAChC,OAAO,GACL,SAAUl5I,GACZ,OAAOA,EAAKzvD,UAAYyvD,EAAKzvD,SAAS+f,gBAAkB/f,IAG5D+kM,MAAO,SAAUjlM,GACf,IAAI4B,EAAUkiM,GAAW9jM,EAAY,KACrC,OAAO4B,IAAYA,EAAU,IAAI+wC,OAAO,MAAQmlD,GAAa,IAAM93F,EAAY,IAAM83F,GAAa,SAAWgsG,GAAW9jM,GAAW,SAAU2vD,GAC3I,OAAO/tD,EAAQ7B,KAA+B,kBAAnB4vD,EAAK3vD,WAA0B2vD,EAAK3vD,kBAAoB2vD,EAAKp8C,eAAiB4wL,IAAgBx0I,EAAKp8C,aAAa,UAAY,QAG3J2xL,KAAM,SAAUlrM,EAAMgM,EAAU0hG,GAC9B,OAAO,SAAU/3C,GACf,IAAIl2D,EAAS0sM,GAAOz7L,KAAKilD,EAAM31D,GAC/B,OAAc,MAAVP,EACkB,OAAbuM,GAEJA,IAGLvM,GAAU,GACU,MAAbuM,EAAmBvM,IAAWiuG,EAAqB,OAAb1hG,EAAoBvM,IAAWiuG,EAAqB,OAAb1hG,EAAoB0hG,GAAmC,IAA1BjuG,EAAOmK,QAAQ8jG,GAA4B,OAAb1hG,EAAoB0hG,GAASjuG,EAAOmK,QAAQ8jG,IAAU,EAAiB,OAAb1hG,EAAoB0hG,GAASjuG,EAAO0I,OAAOulG,EAAM5oG,UAAY4oG,EAAqB,OAAb1hG,GAAqB,IAAMvM,EAAS,KAAKmK,QAAQ8jG,IAAU,EAAiB,OAAb1hG,IAAoBvM,IAAWiuG,GAASjuG,EAAO0I,MAAM,EAAGulG,EAAM5oG,OAAS,KAAO4oG,EAAQ,QAGva09F,MAAO,SAAU5nM,EAAMsrM,EAAM/yG,EAAU4C,EAAOhnF,GAC5C,IAAIioF,EAA8B,QAArBp8F,EAAK2E,MAAM,EAAG,GAAcsrL,EAA6B,SAAnBjwL,EAAK2E,OAAO,GAAe4mM,EAAkB,YAATD,EACvF,OAAiB,IAAVnwG,GAAwB,IAAThnF,EAAa,SAAUg+C,GAC3C,QAASA,EAAK1vD,YACZ,SAAU0vD,EAAM9/C,EAASnL,GAC3B,IAAIwnE,EAAO88H,EAAY3hM,EAAMy3H,EAAMt5E,EAAWvhC,EAAO/C,EAAM04E,IAAW6zF,EAAU,cAAgB,kBAAmB3tL,EAAS6vD,EAAK1vD,WAAYjG,EAAO+uM,GAAUp5I,EAAKzvD,SAAS+f,cAAegpL,GAAYvkM,IAAQqkM,EAC/M,GAAIjpM,EAAQ,CACV,GAAI85F,EAAQ,CACV,MAAO14E,EAAK,CACV7Z,EAAOsoD,EACP,MAAOtoD,EAAOA,EAAK6Z,GACjB,GAAI6nL,EAAS1hM,EAAKnH,SAAS+f,gBAAkBjmB,EAAyB,IAAlBqN,EAAKye,SACvD,OAAO,EAGX7B,EAAQ/C,EAAe,SAAT1jB,IAAoBymB,GAAS,cAE7C,OAAO,EAGT,GADAA,EAAQ,CAACwpK,EAAU3tL,EAAOwT,WAAaxT,EAAOikD,WAC1C0pI,GAAWwb,EAAU,CACvBD,EAAalpM,EAAOmiM,MAAaniM,EAAOmiM,IAAW,IACnD/1H,EAAQ88H,EAAWxrM,IAAS,GAC5BgoD,EAAY0mB,EAAM,KAAO23H,IAAW33H,EAAM,GAC1C4yD,EAAO5yD,EAAM,KAAO23H,IAAW33H,EAAM,GACrC7kE,EAAOm+C,GAAa1lD,EAAOuT,WAAWmyC,GACtC,MAAOn+C,IAASm+C,GAAan+C,GAAQA,EAAK6Z,KAAS49G,EAAOt5E,EAAY,IAAMvhC,EAAM+mG,MAChF,GAAsB,IAAlB3jH,EAAKye,YAAoBg5G,GAAQz3H,IAASsoD,EAAM,CAClDq5I,EAAWxrM,GAAQ,CACjBqmM,GACAr+I,EACAs5E,GAEF,YAGC,GAAImqE,IAAa/8H,GAASvc,EAAKsyI,MAAatyI,EAAKsyI,IAAW,KAAKzkM,KAAU0uE,EAAM,KAAO23H,GAC7F/kE,EAAO5yD,EAAM,QAEb,MAAO7kE,IAASm+C,GAAan+C,GAAQA,EAAK6Z,KAAS49G,EAAOt5E,EAAY,IAAMvhC,EAAM+mG,MAChF,IAAK+9E,EAAS1hM,EAAKnH,SAAS+f,gBAAkBjmB,EAAyB,IAAlBqN,EAAKye,aAAqBg5G,IACzEmqE,KACD5hM,EAAK46L,MAAa56L,EAAK46L,IAAW,KAAKzkM,GAAQ,CAC9CqmM,GACA/kE,IAGAz3H,IAASsoD,GACX,MAMR,OADAmvE,GAAQntH,EACDmtH,IAASnmC,GAASmmC,EAAOnmC,IAAU,GAAKmmC,EAAOnmC,GAAS,KAIrEwsG,OAAQ,SAAU+D,EAAQnzG,GACxB,IAAIxzF,EAAMiV,EAAKyrL,GAAKwB,QAAQyE,IAAWjG,GAAKkG,WAAWD,EAAOjpL,gBAAkBkmL,GAAOp0K,MAAM,uBAAyBm3K,GACtH,OAAI1xL,EAAGyqL,IACEzqL,EAAGu+E,GAERv+E,EAAG1Y,OAAS,GACdyD,EAAO,CACL2mM,EACAA,EACA,GACAnzG,GAEKktG,GAAKkG,WAAWjrM,eAAegrM,EAAOjpL,eAAiB6mL,IAAa,SAAUV,EAAM79L,GACzF,IAAIiC,EAAKusF,EAAUv/E,EAAG4uL,EAAMrwG,GAAW32F,EAAI23F,EAAQj4F,OACnD,MAAOM,IACLoL,EAAM+5L,GAAUtmM,KAAKmoM,EAAMrvG,EAAQ33F,IACnCgnM,EAAK57L,KAASjC,EAAQiC,GAAOusF,EAAQ33F,OAEpC,SAAUuwD,GACb,OAAOn4C,EAAGm4C,EAAM,EAAGptD,KAGhBiV,IAGXitL,QAAS,CACP5sL,IAAKivL,IAAa,SAAU5hM,GAC1B,IAAI3K,EAAQ,GAAIq8F,EAAU,GAAItD,EAAU6vG,GAAQj+L,EAAStH,QAAQo6F,GAAO,OACxE,OAAO1E,EAAQ2uG,IAAW6E,IAAa,SAAUV,EAAM79L,EAASsH,EAASnL,GACvE,IAAIirD,EAAMy5I,EAAY91G,EAAQ8yG,EAAM,KAAM1hM,EAAK,IAAKtF,EAAIgnM,EAAKtnM,OAC7D,MAAOM,KACDuwD,EAAOy5I,EAAUhqM,MACnBgnM,EAAKhnM,KAAOmJ,EAAQnJ,GAAKuwD,OAG1B,SAAUA,EAAM9/C,EAASnL,GAG5B,OAFAnK,EAAM,GAAKo1D,EACX2jC,EAAQ/4F,EAAO,KAAMmK,EAAKkyF,IAClBA,EAAQo0B,UAGpBpnG,IAAKkjL,IAAa,SAAU5hM,GAC1B,OAAO,SAAUyqD,GACf,OAAOw2I,GAAOjhM,EAAUyqD,GAAM7wD,OAAS,MAG3C4Q,SAAUo3L,IAAa,SAAUzlM,GAE/B,OADAA,EAAOA,EAAKzD,QAAQioM,GAAWC,IACxB,SAAUn2I,GACf,OAAQA,EAAKvvD,aAAeuvD,EAAK4S,WAAaqB,GAAQjU,IAAO/rD,QAAQvC,IAAS,MAGlFlE,KAAM2pM,IAAa,SAAU3pM,GAK3B,OAJK2nM,GAAY/kM,KAAK5C,GAAQ,KAC5BgpM,GAAOp0K,MAAM,qBAAuB50B,GAEtCA,EAAOA,EAAKS,QAAQioM,GAAWC,IAAW7lL,cACnC,SAAU0vC,GACf,IAAI05I,EACJ,GACE,GAAIA,EAAW5F,GAAiB9zI,EAAKxyD,KAAOwyD,EAAKp8C,aAAa,aAAeo8C,EAAKp8C,aAAa,QAE7F,OADA81L,EAAWA,EAASppL,cACbopL,IAAalsM,GAAyC,IAAjCksM,EAASzlM,QAAQzG,EAAO,YAE9CwyD,EAAOA,EAAK1vD,aAAiC,IAAlB0vD,EAAK7pC,UAC1C,OAAO,MAGXpZ,OAAQ,SAAUijD,GAChB,IAAImuC,EAAO7iG,EAAW4B,OAAOokD,UAAYhmD,EAAW4B,OAAOokD,SAAS68C,KACpE,OAAOA,GAAQA,EAAK37F,MAAM,KAAOwtD,EAAKtxD,IAExCM,KAAM,SAAUgxD,GACd,OAAOA,IAAS6zI,IAElBjzL,MAAO,SAAUo/C,GACf,OAAOA,IAASlwD,GAASg6K,iBAAmBh6K,GAAS6pM,UAAY7pM,GAAS6pM,gBAAkB35I,EAAKnyD,MAAQmyD,EAAK7jD,OAAS6jD,EAAK45I,WAE9HC,QAAS,SAAU75I,GACjB,OAAyB,IAAlBA,EAAKrgD,UAEdA,SAAU,SAAUqgD,GAClB,OAAyB,IAAlBA,EAAKrgD,UAEd64B,QAAS,SAAUwnB,GACjB,IAAIzvD,EAAWyvD,EAAKzvD,SAAS+f,cAC7B,MAAoB,UAAb/f,KAA0ByvD,EAAKxnB,SAAwB,WAAbjoC,KAA2ByvD,EAAKlc,UAEnFA,SAAU,SAAUkc,GAIlB,OAHIA,EAAK1vD,YACP0vD,EAAK1vD,WAAWwpM,eAEO,IAAlB95I,EAAKlc,UAEd7oC,MAAO,SAAU+kD,GACf,IAAKA,EAAOA,EAAKr8C,WAAYq8C,EAAMA,EAAOA,EAAKjoC,YAC7C,GAAIioC,EAAK7pC,SAAW,EAClB,OAAO,EAGX,OAAO,GAEThmB,OAAQ,SAAU6vD,GAChB,OAAQszI,GAAKwB,QAAQ75L,MAAM+kD,IAE7B1sC,OAAQ,SAAU0sC,GAChB,OAAO61I,GAAQzlM,KAAK4vD,EAAKzvD,WAE3B3F,MAAO,SAAUo1D,GACf,OAAO41I,GAAQxlM,KAAK4vD,EAAKzvD,WAE3BusG,OAAQ,SAAU98C,GAChB,IAAI31D,EAAO21D,EAAKzvD,SAAS+f,cACzB,MAAgB,UAATjmB,GAAkC,WAAd21D,EAAKnyD,MAA8B,WAATxD,GAEvDqH,KAAM,SAAUsuD,GACd,IAAIjlD,EACJ,MAAuC,UAAhCilD,EAAKzvD,SAAS+f,eAA2C,SAAd0vC,EAAKnyD,OAA0D,OAArCkN,EAAOilD,EAAKp8C,aAAa,UAA2C,SAAvB7I,EAAKuV,gBAEhI04E,MAAOyuG,IAAuB,WAC5B,MAAO,CAAC,MAEVz1L,KAAMy1L,IAAuB,SAAUC,EAAcvoM,GACnD,MAAO,CAACA,EAAS,MAEnBqZ,GAAIivL,IAAuB,SAAUC,EAAcvoM,EAAQi3F,GACzD,MAAO,CAACA,EAAW,EAAIA,EAAWj3F,EAASi3F,MAE7C2zG,KAAMtC,IAAuB,SAAUC,EAAcvoM,GAEnD,IADA,IAAIM,EAAI,EACDA,EAAIN,EAAQM,GAAK,EACtBioM,EAAa7kM,KAAKpD,GAEpB,OAAOioM,KAETsC,IAAKvC,IAAuB,SAAUC,EAAcvoM,GAElD,IADA,IAAIM,EAAI,EACDA,EAAIN,EAAQM,GAAK,EACtBioM,EAAa7kM,KAAKpD,GAEpB,OAAOioM,KAET97K,GAAI67K,IAAuB,SAAUC,EAAcvoM,EAAQi3F,GAEzD,IADA,IAAI32F,EAAI22F,EAAW,EAAIA,EAAWj3F,EAASi3F,IAClC32F,GAAK,GACZioM,EAAa7kM,KAAKpD,GAEpB,OAAOioM,KAETuC,GAAIxC,IAAuB,SAAUC,EAAcvoM,EAAQi3F,GAEzD,IADA,IAAI32F,EAAI22F,EAAW,EAAIA,EAAWj3F,EAASi3F,IAClC32F,EAAIN,GACXuoM,EAAa7kM,KAAKpD,GAEpB,OAAOioM,OAIbpE,GAAKwB,QAAQoF,IAAM5G,GAAKwB,QAAQtsL,GACtB,CACN2xL,OAAO,EACPC,UAAU,EACVroJ,MAAM,EACNsoJ,UAAU,EACVj7K,OAAO,GAETk0K,GAAKwB,QAAQrlM,IAAK8nM,GAAkB9nM,IAEtC,IAAKA,KAAK,CACNg3E,QAAQ,EACRmF,OAAO,GAET0nH,GAAKwB,QAAQrlM,IAAK+nM,GAAmB/nM,IAEvC,SAAS+pM,MA6CT,SAASzC,GAAWppM,GAElB,IADA,IAAI8B,EAAI,EAAGgD,EAAM9E,EAAOwB,OAAQoG,EAAW,GACpC9F,EAAIgD,EAAKhD,IACd8F,GAAY5H,EAAO8B,GAAGhE,MAExB,OAAO8J,EAET,SAAS+kM,GAAc32G,EAAS42G,EAAYl0D,GAC1C,IAAI90H,EAAMgpL,EAAWhpL,IAAKipL,EAAmBn0D,GAAgB,eAAR90H,EAAsBkpL,EAAW15K,KACtF,OAAOw5K,EAAWvxG,MAAQ,SAAUhpC,EAAM9/C,EAASnL,GACjD,MAAOirD,EAAOA,EAAKzuC,GACjB,GAAsB,IAAlByuC,EAAK7pC,UAAkBqkL,EACzB,OAAO72G,EAAQ3jC,EAAM9/C,EAASnL,IAGhC,SAAUirD,EAAM9/C,EAASnL,GAC3B,IAAI2lM,EAAUrB,EAAYsB,EAAW,CACjCzG,GACAuG,GAEJ,GAAI1lM,GACF,MAAOirD,EAAOA,EAAKzuC,GACjB,IAAsB,IAAlByuC,EAAK7pC,UAAkBqkL,IACrB72G,EAAQ3jC,EAAM9/C,EAASnL,GACzB,OAAO,OAKb,MAAOirD,EAAOA,EAAKzuC,GACjB,GAAsB,IAAlByuC,EAAK7pC,UAAkBqkL,EAAkB,CAE3C,GADAnB,EAAar5I,EAAKsyI,MAAatyI,EAAKsyI,IAAW,KAC1CoI,EAAWrB,EAAW9nL,KAASmpL,EAAS,KAAOxG,IAAWwG,EAAS,KAAOD,EAC7E,OAAOE,EAAS,GAAKD,EAAS,GAG9B,GADArB,EAAW9nL,GAAOopL,EACdA,EAAS,GAAKh3G,EAAQ3jC,EAAM9/C,EAASnL,GACvC,OAAO,IAQrB,SAAS6lM,GAAeC,GACtB,OAAOA,EAAS1rM,OAAS,EAAI,SAAU6wD,EAAM9/C,EAASnL,GACpD,IAAItF,EAAIorM,EAAS1rM,OACjB,MAAOM,IACL,IAAKorM,EAASprM,GAAGuwD,EAAM9/C,EAASnL,GAC9B,OAAO,EAGX,OAAO,GACL8lM,EAAS,GAEf,SAASC,GAAiBvlM,EAAUwlM,EAAU9zG,GAE5C,IADA,IAAIx3F,EAAI,EAAGgD,EAAMsoM,EAAS5rM,OACnBM,EAAIgD,EAAKhD,IACd+mM,GAAOjhM,EAAUwlM,EAAStrM,GAAIw3F,GAEhC,OAAOA,EAET,SAAS+zG,GAASvB,EAAWzrM,EAAK2M,EAAQuF,EAASnL,GAEjD,IADA,IAAIirD,EAAMi7I,EAAe,GAAIxrM,EAAI,EAAGgD,EAAMgnM,EAAUtqM,OAAQ+rM,EAAgB,MAAPltM,EAC9DyB,EAAIgD,EAAKhD,KACVuwD,EAAOy5I,EAAUhqM,MACdkL,IAAUA,EAAOqlD,EAAM9/C,EAASnL,KACnCkmM,EAAapoM,KAAKmtD,GACdk7I,GACFltM,EAAI6E,KAAKpD,KAKjB,OAAOwrM,EAET,SAASE,GAAWpC,EAAWxjM,EAAUouF,EAASy3G,EAAYC,EAAYC,GAOxE,OANIF,IAAeA,EAAW9I,MAC5B8I,EAAaD,GAAWC,IAEtBC,IAAeA,EAAW/I,MAC5B+I,EAAaF,GAAWE,EAAYC,IAE/BnE,IAAa,SAAUV,EAAMxvG,EAAS/mF,EAASnL,GACpD,IAAIm2F,EAAMz7F,EAAGuwD,EAAMu7I,EAAS,GAAIC,EAAU,GAAIC,EAAcx0G,EAAQ93F,OAAQusM,EAAQjF,GAAQqE,GAAiBvlM,GAAY,IAAK2K,EAAQiW,SAAW,CAACjW,GAAWA,EAAS,IAAKy7L,GAAY5C,IAActC,GAASlhM,EAA+DmmM,EAAnDV,GAASU,EAAOH,EAAQxC,EAAW74L,EAASnL,GAAc6mM,EAAaj4G,EAAU03G,IAAe5E,EAAOsC,EAAY0C,GAAeL,GAAc,GAAKn0G,EAAU00G,EAIzX,GAHIh4G,GACFA,EAAQg4G,EAAWC,EAAY17L,EAASnL,GAEtCqmM,EAAY,CACdlwG,EAAO8vG,GAASY,EAAYJ,GAC5BJ,EAAWlwG,EAAM,GAAIhrF,EAASnL,GAC9BtF,EAAIy7F,EAAK/7F,OACT,MAAOM,KACDuwD,EAAOkrC,EAAKz7F,MACdmsM,EAAWJ,EAAQ/rM,MAAQksM,EAAUH,EAAQ/rM,IAAMuwD,IAIzD,GAAIy2I,GACF,GAAI4E,GAActC,EAAW,CAC3B,GAAIsC,EAAY,CACdnwG,EAAO,GACPz7F,EAAImsM,EAAWzsM,OACf,MAAOM,KACDuwD,EAAO47I,EAAWnsM,KACpBy7F,EAAKr4F,KAAK8oM,EAAUlsM,GAAKuwD,GAG7Bq7I,EAAW,KAAMO,EAAa,GAAI1wG,EAAMn2F,GAE1CtF,EAAImsM,EAAWzsM,OACf,MAAOM,KACAuwD,EAAO47I,EAAWnsM,MAAQy7F,EAAOmwG,EAAazG,GAAUtmM,KAAKmoM,EAAMz2I,GAAQu7I,EAAO9rM,KAAO,IAC5FgnM,EAAKvrG,KAAUjE,EAAQiE,GAAQlrC,UAKrC47I,EAAaZ,GAASY,IAAe30G,EAAU20G,EAAW5oM,OAAOyoM,EAAaG,EAAWzsM,QAAUysM,GAC/FP,EACFA,EAAW,KAAMp0G,EAAS20G,EAAY7mM,GAEtClC,GAAKI,MAAMg0F,EAAS20G,MAK5B,SAASC,GAAkBluM,GAQzB,IAPA,IAAImuM,EAAcn4G,EAAS3xF,EAAGS,EAAM9E,EAAOwB,OAAQ4sM,EAAkBzI,GAAKtb,SAASrqL,EAAO,GAAGE,MAAOmuM,EAAmBD,GAAmBzI,GAAKtb,SAAS,KAAMvoL,EAAIssM,EAAkB,EAAI,EAAGE,EAAe3B,IAAc,SAAUt6I,GAC9N,OAAOA,IAAS87I,IACfE,GAAkB,GAAOE,EAAkB5B,IAAc,SAAUt6I,GACpE,OAAO40I,GAAUtmM,KAAKwtM,EAAc97I,IAAS,IAC5Cg8I,GAAkB,GAAOnB,EAAW,CAAC,SAAU76I,EAAM9/C,EAASnL,GAC7D,OAAQgnM,IAAoBhnM,GAAOmL,IAAYuzL,OAAuBqI,EAAe57L,GAASiW,SAAW8lL,EAAaj8I,EAAM9/C,EAASnL,GAAOmnM,EAAgBl8I,EAAM9/C,EAASnL,MAE1KtF,EAAIgD,EAAKhD,IACd,GAAIk0F,EAAU2vG,GAAKtb,SAASrqL,EAAO8B,GAAG5B,MACpCgtM,EAAW,CAACP,GAAcM,GAAeC,GAAWl3G,QAC/C,CAEL,GADAA,EAAU2vG,GAAK34L,OAAOhN,EAAO8B,GAAG5B,MAAMoF,MAAM,KAAMtF,EAAO8B,GAAGmJ,SACxD+qF,EAAQ2uG,IAAU,CAEpB,IADAtgM,IAAMvC,EACCuC,EAAIS,EAAKT,IACd,GAAIshM,GAAKtb,SAASrqL,EAAOqE,GAAGnE,MAC1B,MAGJ,OAAOstM,GAAW1rM,EAAI,GAAKmrM,GAAeC,GAAWprM,EAAI,GAAKsnM,GAAWppM,EAAO6E,MAAM,EAAG/C,EAAI,GAAGwY,OAAO,CAAExc,MAA8B,MAAvBkC,EAAO8B,EAAI,GAAG5B,KAAe,IAAM,MAAOI,QAAQo6F,GAAO,MAAO1E,EAASl0F,EAAIuC,GAAK6pM,GAAkBluM,EAAO6E,MAAM/C,EAAGuC,IAAKA,EAAIS,GAAOopM,GAAkBluM,EAASA,EAAO6E,MAAMR,IAAKA,EAAIS,GAAOskM,GAAWppM,IAEzTktM,EAAShoM,KAAK8wF,GAGlB,OAAOi3G,GAAeC,GAExB,SAASsB,GAAyBC,EAAiBC,GACjD,IAAIC,EAAQD,EAAYltM,OAAS,EAAGotM,EAAYH,EAAgBjtM,OAAS,EAAGqtM,EAAe,SAAU/F,EAAMv2L,EAASnL,EAAKkyF,EAASw1G,GAC9H,IAAIz8I,EAAMhuD,EAAG2xF,EAAS+4G,EAAe,EAAGjtM,EAAI,IAAKgqM,EAAYhD,GAAQ,GAAIkG,EAAa,GAAIC,EAAgBnJ,GAAkBiI,EAAQjF,GAAQ8F,GAAajJ,GAAKj4L,KAAK67F,IAAI,IAAKulG,GAAYI,EAAgB3I,IAA4B,MAAjB0I,EAAwB,EAAIlwM,KAAK6hG,UAAY,GAAK97F,EAAMipM,EAAMvsM,OAIjR,IAHIstM,IACFhJ,GAAmBvzL,IAAYpQ,IAAYoQ,GAEtCzQ,IAAMgD,GAA4B,OAApButD,EAAO07I,EAAMjsM,IAAaA,IAAK,CAClD,GAAI8sM,GAAav8I,EAAM,CACrBhuD,EAAI,EACJ,MAAO2xF,EAAUy4G,EAAgBpqM,KAC/B,GAAI2xF,EAAQ3jC,EAAM9/C,EAASnL,GAAM,CAC/BkyF,EAAQp0F,KAAKmtD,GACb,MAGAy8I,IACFvI,GAAU2I,GAGVP,KACEt8I,GAAQ2jC,GAAW3jC,IACrB08I,IAEEjG,GACFgD,EAAU5mM,KAAKmtD,IAKrB,GADA08I,GAAgBjtM,EACZ6sM,GAAS7sM,IAAMitM,EAAc,CAC/B1qM,EAAI,EACJ,MAAO2xF,EAAU04G,EAAYrqM,KAC3B2xF,EAAQ81G,EAAWkD,EAAYz8L,EAASnL,GAE1C,GAAI0hM,EAAM,CACR,GAAIiG,EAAe,EACjB,MAAOjtM,IACCgqM,EAAUhqM,IAAMktM,EAAWltM,KAC/BktM,EAAWltM,GAAK4rH,GAAI/sH,KAAK24F,IAI/B01G,EAAa3B,GAAS2B,GAExB9pM,GAAKI,MAAMg0F,EAAS01G,GAChBF,IAAchG,GAAQkG,EAAWxtM,OAAS,GAAKutM,EAAeL,EAAYltM,OAAS,GACrFqnM,GAAOkC,WAAWzxG,GAOtB,OAJIw1G,IACFvI,GAAU2I,EACVpJ,GAAmBmJ,GAEdnD,GAEX,OAAO6C,EAAQnF,GAAaqF,GAAgBA,EA7P9ChD,GAAWprM,UAAYklM,GAAKwJ,QAAUxJ,GAAKwB,QAC3CxB,GAAKkG,WAAa,IAAIA,GACtB7nM,GAAW6kM,GAAO7kM,SAAW,SAAU4D,EAAUwnM,GAC/C,IAAI31G,EAASv8F,EAAO8C,EAAQE,EAAMmvM,EAAOz1G,EAAQ01G,EAAY9iJ,EAASk6I,GAAW9+L,EAAW,KAC5F,GAAI4kD,EACF,OAAO4iJ,EAAY,EAAI5iJ,EAAO3nD,MAAM,GAEtCwqM,EAAQznM,EACRgyF,EAAS,GACT01G,EAAa3J,GAAKyF,UAClB,MAAOiE,EAAO,CAgBZ,IAAKnvM,KAfAu5F,KAAYv8F,EAAQkqM,GAAO3rM,KAAK4zM,MAC/BnyM,IACFmyM,EAAQA,EAAMxqM,MAAM3H,EAAM,GAAGsE,SAAW6tM,GAE1Cz1G,EAAO10F,KAAKlF,EAAS,KAEvBy5F,GAAU,GACNv8F,EAAQmqM,GAAa5rM,KAAK4zM,MAC5B51G,EAAUv8F,EAAM22E,QAChB7zE,EAAOkF,KAAK,CACVpH,MAAO27F,EACPv5F,KAAMhD,EAAM,GAAGoD,QAAQo6F,GAAO,OAEhC20G,EAAQA,EAAMxqM,MAAM40F,EAAQj4F,SAEjBmkM,GAAK34L,SACX9P,EAAQuqM,GAAUvnM,GAAMzE,KAAK4zM,KAAaC,EAAWpvM,MAAUhD,EAAQoyM,EAAWpvM,GAAMhD,MAC3Fu8F,EAAUv8F,EAAM22E,QAChB7zE,EAAOkF,KAAK,CACVpH,MAAO27F,EACPv5F,KAAMA,EACN+K,QAAS/N,IAEXmyM,EAAQA,EAAMxqM,MAAM40F,EAAQj4F,SAGhC,IAAKi4F,EACH,MAGJ,OAAO21G,EAAYC,EAAM7tM,OAAS6tM,EAAQxG,GAAOp0K,MAAM7sB,GAAY8+L,GAAW9+L,EAAUgyF,GAAQ/0F,MAAM,IAsNxGghM,GAAUgD,GAAOhD,QAAU,SAAUj+L,EAAU1K,GAC7C,IAAI4E,EAAG4sM,EAAc,GAAID,EAAkB,GAAIjiJ,EAASm6I,GAAc/+L,EAAW,KACjF,IAAK4kD,EAAQ,CACNtvD,IACHA,EAAQ8G,GAAS4D,IAEnB9F,EAAI5E,EAAMsE,OACV,MAAOM,IACL0qD,EAAS0hJ,GAAkBhxM,EAAM4E,IAC7B0qD,EAAOm4I,IACT+J,EAAYxpM,KAAKsnD,GAEjBiiJ,EAAgBvpM,KAAKsnD,GAGzBA,EAASm6I,GAAc/+L,EAAU4mM,GAAyBC,EAAiBC,IAC3EliJ,EAAO5kD,SAAWA,EAEpB,OAAO4kD,GAETjiD,GAASs+L,GAAOt+L,OAAS,SAAU3C,EAAU2K,EAAS+mF,EAASwvG,GAC7D,IAAIhnM,EAAG9B,EAAQ2B,EAAOzB,EAAMwN,EAAM6hM,EAA+B,oBAAb3nM,GAA2BA,EAAU1K,GAAS4rM,GAAQ9kM,GAAS4D,EAAW2nM,EAAS3nM,UAAYA,GAEnJ,GADA0xF,EAAUA,GAAW,GACA,IAAjBp8F,EAAMsE,OAAc,CAEtB,GADAxB,EAAS9C,EAAM,GAAKA,EAAM,GAAG2H,MAAM,GAC/B7E,EAAOwB,OAAS,GAAkC,QAA5BG,EAAQ3B,EAAO,IAAIE,MAAiBwlM,GAAQuE,SAAgC,IAArB13L,EAAQiW,UAAkB29K,IAAkBR,GAAKtb,SAASrqL,EAAO,GAAGE,MAAO,CAE1J,GADAqS,GAAWozL,GAAKj4L,KAAKg6L,GAAG/lM,EAAMsJ,QAAQ,GAAG3K,QAAQioM,GAAWC,IAAYj2L,IAAY,IAAI,IACnFA,EACH,OAAO+mF,EACEi2G,IACTh9L,EAAUA,EAAQ5P,YAEpBiF,EAAWA,EAAS/C,MAAM7E,EAAO6zE,QAAQ/1E,MAAM0D,QAEjDM,EAAI2lM,GAAUO,aAAavlM,KAAKmF,GAAY,EAAI5H,EAAOwB,OACvD,MAAOM,IAAK,CAEV,GADAH,EAAQ3B,EAAO8B,GACX6jM,GAAKtb,SAASnqL,EAAOyB,EAAMzB,MAC7B,MAEF,IAAIwN,EAAOi4L,GAAKj4L,KAAKxN,MACf4oM,EAAOp7L,EAAK/L,EAAMsJ,QAAQ,GAAG3K,QAAQioM,GAAWC,IAAYH,GAAS5lM,KAAKzC,EAAO,GAAGE,OAASmpM,GAAY92L,EAAQ5P,aAAe4P,IAAU,CAG5I,GAFAvS,EAAOqF,OAAOvD,EAAG,GACjB8F,EAAWkhM,EAAKtnM,QAAU4nM,GAAWppM,IAChC4H,EAEH,OADA1C,GAAKI,MAAMg0F,EAASwvG,GACbxvG,EAET,QAMR,OADCi2G,GAAY1J,GAAQj+L,EAAU1K,IAAQ4rM,EAAMv2L,GAAU4zL,GAAgB7sG,EAAS+uG,GAAS5lM,KAAKmF,IAAayhM,GAAY92L,EAAQ5P,aAAe4P,GACvI+mF,GAETosG,GAAQwF,WAAavG,GAAQlsM,MAAM,IAAI0tB,KAAKygL,IAAWlhM,KAAK,MAAQi/L,GACpEe,GAAQuF,mBAAqBjF,GAC7BC,KACAP,GAAQ4E,cAAe,EAEvB,IAAIkF,GAAYpqM,MAAM2kB,QAClB7N,GAAU,SAAUiC,GACtB,IAAiBrc,EAAG1E,EAAhB4tE,EAAQ7sD,EACZ,IAAKqxL,GAAUrxL,GAEb,IADA6sD,EAAQ,GACHlpE,EAAI,EAAG1E,EAAI+gB,EAAI3c,OAAQM,EAAI1E,EAAG0E,IACjCkpE,EAAMlpE,GAAKqc,EAAIrc,GAGnB,OAAOkpE,GAELhf,GAAS,SAAUzrD,EAAGqyB,EAAI74B,GAC5B,IAAI8B,EAAGuB,EACP,IAAKmD,EACH,OAAO,EAGT,GADAxG,EAAIA,GAAKwG,OACQmb,IAAbnb,EAAEiB,QACJ,IAAK3F,EAAI,EAAGuB,EAAImD,EAAEiB,OAAQ3F,EAAIuB,EAAGvB,IAC/B,IAA+B,IAA3B+2B,EAAGjyB,KAAK5G,EAAGwG,EAAE1E,GAAIA,EAAG0E,GACtB,OAAO,OAIX,IAAK1E,KAAK0E,EACR,GAAIA,EAAEK,eAAe/E,KACY,IAA3B+2B,EAAGjyB,KAAK5G,EAAGwG,EAAE1E,GAAIA,EAAG0E,GACtB,OAAO,EAKf,OAAO,GAEL8kJ,GAAQ,SAAUr6E,EAAOnpE,GAC3B,IAAI82B,EAAM,GAIV,OAHAqzB,GAAOgf,GAAO,SAAUxyB,EAAM5zC,GAC5B+zB,EAAIzzB,KAAKrD,EAAS22C,EAAM5zC,EAAOomE,OAE1BryC,GAEL+wC,GAAW,SAAUxwD,EAAGsB,GAC1B,IAAIja,EAAI,GAMR,OALAyrD,GAAO9yC,GAAG,SAAUjb,EAAG2G,GAChB4V,IAAKA,EAAEvc,EAAG2G,EAAOsU,IACpB3Y,EAAE2E,KAAKjH,MAGJsC,GAELkvM,GAAY,SAAUv2L,EAAGjb,GAC3B,IAAI6D,EAAG1E,EACP,GAAI8b,EACF,IAAKpX,EAAI,EAAG1E,EAAI8b,EAAE1X,OAAQM,EAAI1E,EAAG0E,IAC/B,GAAIoX,EAAEpX,KAAO7D,EACX,OAAO6D,EAIb,OAAQ,GAENksC,GAAS,SAAU0hK,EAAYC,EAAUC,EAAan9K,GACxD,IAAI3wB,EAAI,EAIR,IAHIP,UAAUC,OAAS,IACrBouM,EAAcF,EAAW,IAEpB5tM,EAAI4tM,EAAWluM,OAAQM,IAC5B8tM,EAAcD,EAAShvM,KAAK8xB,EAASm9K,EAAaF,EAAW5tM,GAAIA,GAEnE,OAAO8tM,GAELC,GAAc,SAAU7kI,EAAOt+C,EAAW+F,GAC5C,IAAI3wB,EAAG1E,EACP,IAAK0E,EAAI,EAAG1E,EAAI4tE,EAAMxpE,OAAQM,EAAI1E,EAAG0E,IACnC,GAAI4qB,EAAU/rB,KAAK8xB,EAASu4C,EAAMlpE,GAAIA,EAAGkpE,GACvC,OAAOlpE,EAGX,OAAQ,GAEN8qD,GAAS,SAAUoe,EAAOt+C,EAAW+F,GACvC,IAAIvlB,EAAM2iM,GAAY7kI,EAAOt+C,EAAW+F,GACxC,IAAa,IAATvlB,EACF,OAAO89D,EAAM99D,IAIb6hJ,GAAS,SAAU2gD,GACrB,OAAOA,EAAWA,EAAWluM,OAAS,IAEpCsuM,GAAW,CACb/lL,QAASylL,GACTtzL,QAASA,GACTjP,KAAM++C,GACN3rD,IAAKglJ,GACLr4I,OAAQ08D,GACRpjE,QAASmpM,GACTzhK,OAAQA,GACRyxB,UAAWowI,GACXniM,KAAMk/C,GACNv4C,KAAM06I,IAGJghD,GAAmB,aACnB1iM,GAAO,SAAU5I,GACnB,OAAe,OAARA,QAAwBiX,IAARjX,EAAoB,IAAM,GAAKA,GAAKnE,QAAQyvM,GAAkB,KAEnF3zM,GAAK,SAAU+hB,EAAKje,GACtB,OAAKA,IAGQ,UAATA,IAAoB4vM,GAAS/lL,QAAQ5L,YAG3BA,IAAQje,OALLwb,IAARyC,GAOPmnD,GAAU,SAAUvnD,EAAOiyL,EAAO3vM,GACpC,IAAIyB,EACJic,EAAQA,GAAS,GACjBiyL,EAAQA,GAAS,IACI,kBAAVjyL,IACTA,EAAQA,EAAMtlB,MAAMu3M,IAEtB3vM,EAAMA,GAAO,GACbyB,EAAIic,EAAMvc,OACV,MAAOM,IACLzB,EAAI0d,EAAMjc,IAAM,GAElB,OAAOzB,GAELO,GAAiB,SAAUud,EAAKy/G,GAClC,OAAOp9H,OAAOC,UAAUG,eAAeD,KAAKwd,EAAKy/G,IAE/CtvH,GAAS,SAAUvU,EAAGwnC,EAAGlgC,GAC3B,IACI4uM,EAAIxiH,EAAIyiH,EAAIC,EAAK1nM,EADjB9I,EAAOvH,KACai+H,EAAK,EAI7B,GAHAt8H,EAAI,oCAAoC0B,KAAK1B,GAC7Cm2M,EAAKn2M,EAAE,GAAGmD,MAAM,iBAAiB,GACjCuwF,EAAK9tF,EAAKywM,SAASr2M,EAAE,GAAGuG,QAAQ,SAAU,IAAKe,IAC3CosF,EAAGyiH,GAAP,CAGA,GAAa,WAATn2M,EAAE,GAKJ,OAJA0zF,EAAGyiH,GAAM3uK,OACLnpC,KAAKi4M,UACPj4M,KAAKi4M,SAASt2M,EAAE,GAAIA,EAAE,GAAI0zF,EAAGyiH,KAI5B3uK,EAAE2uK,KACL3uK,EAAE2uK,GAAM,aAER75E,EAAK,GAEP5oC,EAAGyiH,GAAM3uK,EAAE2uK,GACXvwM,EAAKmB,OAAO2sF,EAAGyiH,GAAIzvM,UAAW8gC,GAC1BxnC,EAAE,KACJk2M,EAAKtwM,EAAKrB,QAAQvE,EAAE,IAAI0G,UACxB0vM,EAAMp2M,EAAE,GAAGmD,MAAM,aAAa,GAC9BuL,EAAIglF,EAAGyiH,GAELziH,EAAGyiH,GADD75E,EACO,WACP,OAAO45E,EAAGE,GAAK7qM,MAAMlN,KAAMmJ,YAGpB,WAEP,OADAnJ,KAAKoK,OAASytM,EAAGE,GACV1nM,EAAEnD,MAAMlN,KAAMmJ,YAGzBksF,EAAGyiH,GAAIzvM,UAAUyvM,GAAMziH,EAAGyiH,GAC1BvwM,EAAKsN,KAAKgjM,GAAI,SAAUz1L,EAAG3e,GACzB4xF,EAAGyiH,GAAIzvM,UAAU5E,GAAKo0M,EAAGp0M,MAE3B8D,EAAKsN,KAAKs0B,GAAG,SAAU/mB,EAAG3e,GACpBo0M,EAAGp0M,GACL4xF,EAAGyiH,GAAIzvM,UAAU5E,GAAK,WAEpB,OADAzD,KAAKoK,OAASytM,EAAGp0M,GACV2e,EAAElV,MAAMlN,KAAMmJ,YAGnB1F,IAAMq0M,IACRziH,EAAGyiH,GAAIzvM,UAAU5E,GAAK2e,OAK9B7a,EAAKsN,KAAKs0B,EAAE+uK,QAAQ,SAAU91L,EAAG3e,GAC/B4xF,EAAGyiH,GAAIr0M,GAAK2e,OAGZ1Z,GAAS,SAAUqd,EAAKoyL,GAE1B,IADA,IAIIzuM,EAAG1E,EAAGV,EAJN4X,EAAI,GACC8F,EAAK,EAAGA,EAAK7Y,UAAUC,OAAQ4Y,IACtC9F,EAAE8F,EAAK,GAAK7Y,UAAU6Y,GAGxB,IACItc,EADAmH,EAAO1D,UAEX,IAAKO,EAAI,EAAG1E,EAAI6H,EAAKzD,OAAQM,EAAI1E,EAAG0E,IAElC,IAAKpF,KADL6zM,EAAMtrM,EAAKnD,GACEyuM,EACPA,EAAI3vM,eAAelE,KACrBoB,EAAQyyM,EAAI7zM,QACEgf,IAAV5d,IACFqgB,EAAIzhB,GAAQoB,IAKpB,OAAOqgB,GAELonD,GAAO,SAAUhlE,EAAGia,EAAG3e,EAAG9B,GAC5BA,EAAIA,GAAK3B,KACLmI,IACE1E,IACF0E,EAAIA,EAAE1E,IAERi0M,GAAS7iM,KAAK1M,GAAG,SAAUA,EAAGuB,GAC5B,IAA2B,IAAvB0Y,EAAE7Z,KAAK5G,EAAGwG,EAAGuB,EAAGjG,GAClB,OAAO,EAET0pE,GAAKhlE,EAAGia,EAAG3e,EAAG9B,QAIhBq2M,GAAW,SAAUv0M,EAAG0E,GAC1B,IAAIuB,EAAG7D,EAGP,IAFAsC,EAAIA,GAAK5C,EAAW4B,OACpB1D,EAAIA,EAAEpD,MAAM,KACPqJ,EAAI,EAAGA,EAAIjG,EAAE2F,OAAQM,IACxB7D,EAAIpC,EAAEiG,GACDvB,EAAEtC,KACLsC,EAAEtC,GAAK,IAETsC,EAAIA,EAAEtC,GAER,OAAOsC,GAELiwM,GAAY,SAAU30M,EAAG0E,GAC3B,IAAIuB,EAAG1E,EAGP,IAFAmD,EAAIA,GAAK5C,EAAW4B,OACpB1D,EAAIA,EAAEpD,MAAM,KACPqJ,EAAI,EAAG1E,EAAIvB,EAAE2F,OAAQM,EAAI1E,EAAG0E,IAE/B,GADAvB,EAAIA,EAAE1E,EAAEiG,KACHvB,EACH,MAGJ,OAAOA,GAELkwM,GAAU,SAAU12M,EAAGM,GACzB,OAAKN,GAAKqC,GAAGrC,EAAG,SACPA,EAEF+1M,GAASzvM,IAAItG,EAAEtB,MAAM4B,GAAK,KAAMgT,KAErCqjM,GAAkB,SAAU/oM,GAC9B,IAAI8hH,EAAc23E,GAAI33E,YAItB,OAHIA,IACF9hH,KAA8B,IAAtBA,EAAIrB,QAAQ,KAAc,IAAM,KAAOmjH,GAE1C9hH,GAELtJ,GAAQ,CACVgP,KAAMA,GACN0c,QAAS+lL,GAAS/lL,QAClB3tB,GAAIA,GACJ8f,QAAS4zL,GAAS5zL,QAClBopD,QAASA,GACTr4D,KAAM6iM,GAAS7iM,KACf5M,IAAKyvM,GAASzvM,IACd4pB,KAAM6lL,GAAS9iM,OACf0jC,QAASo/J,GAASxpM,QAClBygM,OAAQnmM,GACRE,OAAQA,GACRwN,OAAQA,GACRi3D,KAAMA,GACN6qI,SAAUA,GACV9xM,QAASkyM,GACTC,QAASA,GACTC,gBAAiBA,IAGf7lL,GAAMltB,EAAWwE,SAAUwuM,GAASvrM,MAAM3E,UAAUyE,KAAM0rM,GAAUxrM,MAAM3E,UAAUoE,MACpFgsM,GAAe,2CACfjuB,GAAQ8hB,GAAW9hB,MACnBkuB,GAAczyM,GAAMinE,QAAQ,+BAC5ByrI,GAAY,SAAU5yL,GACxB,MAAsB,qBAARA,GAEZ6yL,GAAa,SAAU7yL,GACzB,MAAsB,kBAARA,GAEZ8yL,GAAW,SAAU9yL,GACvB,OAAOA,GAAOA,IAAQA,EAAI5e,QAExBm4D,GAAiB,SAAUrwD,EAAM6pM,GACnC,IAAIC,EAAMpnM,EAAMue,EAChB4oL,EAAUA,GAAWrmL,GACrBvC,EAAY4oL,EAAQjgL,cAAc,OAClCkgL,EAAOD,EAAQtlJ,yBACftjC,EAAU7kB,UAAY4D,EACtB,MAAO0C,EAAOue,EAAUtS,WACtBm7L,EAAKziM,YAAY3E,GAEnB,OAAOonM,GAELC,GAAgB,SAAUC,EAAaC,EAAYzvM,EAAU0oC,GAC/D,IAAIzoC,EACJ,GAAIkvM,GAAWM,GACbA,EAAa55I,GAAe45I,EAAYC,GAAmBF,EAAY,UAClE,GAAIC,EAAW9vM,SAAW8vM,EAAW9oL,SAAU,CAEpD,GADA8oL,EAAaE,GAASC,UAAUH,GAC5B/mK,EACF,IAAKzoC,EAAIwvM,EAAW9vM,OAAS,EAAGM,GAAK,EAAGA,IACtCsvM,GAAcC,EAAaC,EAAWxvM,GAAID,EAAU0oC,QAGtD,IAAKzoC,EAAI,EAAGA,EAAIwvM,EAAW9vM,OAAQM,IACjCsvM,GAAcC,EAAaC,EAAWxvM,GAAID,EAAU0oC,GAGxD,OAAO8mK,EAET,GAAIC,EAAW9oL,SAAU,CACvB1mB,EAAIuvM,EAAY7vM,OAChB,MAAOM,IACLD,EAASlB,KAAK0wM,EAAYvvM,GAAIwvM,GAGlC,OAAOD,GAEL5gM,GAAW,SAAU1G,EAAMrH,GAC7B,OAAOqH,GAAQrH,IAA8E,KAAhE,IAAMqH,EAAKrH,UAAY,KAAK4D,QAAQ,IAAM5D,EAAY,MAEjFqkE,GAAO,SAAU7kE,EAAUmmJ,EAAS9iJ,GACtC,IAAImsM,EAAYC,EAahB,OAZAtpD,EAAUmpD,GAASnpD,GAAS,GAC5BnmJ,EAAS+K,MAAK,WACZ,IAAItN,EAAOvH,KACNmN,GAAOmsM,IAAe/xM,EAAKgD,aAC9B+uM,EAAa/xM,EAAKgD,WAClBgvM,EAAatpD,EAAQ1yG,WAAU,GAC/Bh2C,EAAKgD,WAAW1B,aAAa0wM,EAAYhyM,IAGzCgyM,EAAWjjM,YAAY/O,MAGpBuC,GAEL0vM,GAAgBvzM,GAAMinE,QAAQ,uEAAwE,KACtGusI,GAAaxzM,GAAMinE,QAAQ,gGAAiG,KAC5HwsI,GAAU,CACZ7xD,IAAK,UACLpiG,MAAO,YACP5rC,SAAU,YAER8/L,GAAS,CAAEC,MAAO,YAClBC,GAAY,GAAIC,GAAW,GAC3BV,GAAW,SAAU5pM,EAAU2K,GACjC,OAAO,IAAIi/L,GAASt3L,GAAG6/G,KAAKnyH,EAAU2K,IAEpCm+B,GAAU,SAAU8H,EAAMwyB,GAC5B,IAAIlpE,EACJ,GAAIkpE,EAAM1kE,QACR,OAAO0kE,EAAM1kE,QAAQkyC,GAEvB12C,EAAIkpE,EAAMxpE,OACV,MAAOM,IACL,GAAIkpE,EAAMlpE,KAAO02C,EACf,OAAO12C,EAGX,OAAQ,GAENqwM,GAAqB,aACrBC,GAAS,SAAU3tM,GACrB,OAAe,OAARA,QAAwBiX,IAARjX,EAAoB,IAAM,GAAKA,GAAKnE,QAAQ6xM,GAAoB,KAErFxrC,GAAS,SAAUxoJ,EAAKtc,GAC1B,IAAIL,EAAQvF,EAAK6F,EAAGhE,EACpB,GAAIqgB,EAEF,GADA3c,EAAS2c,EAAI3c,YACEka,IAAXla,GACF,IAAKvF,KAAOkiB,EACV,GAAIA,EAAIvd,eAAe3E,KACrB6B,EAAQqgB,EAAIliB,IAC6B,IAArC4F,EAASlB,KAAK7C,EAAO7B,EAAK6B,IAC5B,WAKN,IAAKgE,EAAI,EAAGA,EAAIN,EAAQM,IAEtB,GADAhE,EAAQqgB,EAAIrc,IAC2B,IAAnCD,EAASlB,KAAK7C,EAAOgE,EAAGhE,GAC1B,MAKR,OAAOqgB,GAEL8L,GAAO,SAAU+gD,EAAOnpE,GAC1B,IAAI82B,EAAM,GAMV,OALAguI,GAAO37F,GAAO,SAAUlpE,EAAG02C,GACrB32C,EAAS22C,EAAM12C,IACjB62B,EAAIzzB,KAAKszC,MAGN7f,GAEL44K,GAAqB,SAAUlvM,GACjC,OAAKA,EAGoB,IAArBA,EAAQmmB,SACHnmB,EAEFA,EAAQsiC,cALN9Z,IAOX2mL,GAASt3L,GAAKs3L,GAAS/wM,UAAY,CACjCic,YAAa80L,GACb5pM,SAAU,GACV2K,QAAS,KACT/Q,OAAQ,EACRu4H,KAAM,SAAUnyH,EAAU2K,GACxB,IACIrV,EAAO6M,EADPpK,EAAOvH,KAEX,IAAKwP,EACH,OAAOjI,EAET,GAAIiI,EAAS4gB,SAGX,OAFA7oB,EAAK4S,QAAU5S,EAAK,GAAKiI,EACzBjI,EAAK6B,OAAS,EACP7B,EAET,GAAI4S,GAAWA,EAAQiW,SACrB7oB,EAAK4S,QAAUA,MACV,CACL,GAAIA,EACF,OAAOi/L,GAAS5pM,GAAUwF,KAAKmF,GAEjC5S,EAAK4S,QAAUA,EAAU5U,EAAWwE,SAEtC,GAAI6uM,GAAWppM,GAAW,CAWxB,GAVAjI,EAAKiI,SAAWA,EAEd1K,EADyB,MAAvB0K,EAASywE,OAAO,IAAuD,MAAzCzwE,EAASywE,OAAOzwE,EAASpG,OAAS,IAAcoG,EAASpG,QAAU,EAC3F,CACN,KACAoG,EACA,MAGMipM,GAAap1M,KAAKmM,IAExB1K,EAmBF,OAAOs0M,GAASj/L,GAAS7E,KAAK9F,GAlB9B,GAAI1K,EAAM,GAAI,CACZ6M,EAAO2tD,GAAe9vD,EAAU2pM,GAAmBh/L,IAAUyD,WAC7D,MAAOjM,EACL4mM,GAAOhwM,KAAKhB,EAAMoK,GAClBA,EAAOA,EAAKqgB,gBAET,CAEL,GADArgB,EAAOwnM,GAAmBh/L,GAASqwG,eAAe1lH,EAAM,KACnD6M,EACH,OAAOpK,EAET,GAAIoK,EAAKhJ,KAAO7D,EAAM,GACpB,OAAOyC,EAAK+N,KAAK9F,GAEnBjI,EAAK6B,OAAS,EACd7B,EAAK,GAAKoK,QAMd3R,KAAKoN,IAAIoC,GAAU,GAErB,OAAOjI,GAETuc,QAAS,WACP,OAAO7d,GAAM6d,QAAQ9jB,OAEvBoN,IAAK,SAAUuY,EAAOoI,GACpB,IACI7U,EAAOxP,EADPnC,EAAOvH,KAEX,GAAI44M,GAAWjzL,GACb,OAAOpe,EAAK6F,IAAIgsM,GAASzzL,IAE3B,IAAa,IAAToI,EAGF,IAFA7U,EAAQkgM,GAAS3nJ,OAAOlqD,EAAKuc,UAAU5B,OAAOk3L,GAASC,UAAU1zL,KACjEpe,EAAK6B,OAAS8P,EAAM9P,OACfM,EAAI,EAAGA,EAAIwP,EAAM9P,OAAQM,IAC5BnC,EAAKmC,GAAKwP,EAAMxP,QAGlB6uM,GAAOrrM,MAAM3F,EAAM6xM,GAASC,UAAU1zL,IAExC,OAAOpe,GAETyN,KAAM,SAAU1Q,EAAMoB,GACpB,IACIwmH,EADA3kH,EAAOvH,KAEX,GAAoB,kBAATsE,EACTiqK,GAAOjqK,GAAM,SAAUA,EAAMoB,GAC3B6B,EAAKyN,KAAK1Q,EAAMoB,UAEb,KAAIizM,GAAUjzM,GAgBd,CACL,GAAI6B,EAAK,IAA2B,IAArBA,EAAK,GAAG6oB,SAAgB,CAErC,GADA87F,EAAO2tF,GAAUv1M,GACb4nH,GAAQA,EAAKvmH,IACf,OAAOumH,EAAKvmH,IAAI4B,EAAK,GAAIjD,GAE3B,GAAIm1M,GAAWn1M,GACb,OAAOiD,EAAKi+H,KAAKlhI,GAAQA,OAAOgf,EAElC5d,EAAQ6B,EAAK,GAAGsW,aAAavZ,EAAM,GACrB,OAAVoB,IACFA,OAAQ4d,GAGZ,OAAO5d,EA7BP1F,KAAK6U,MAAK,WACR,IAAIq3G,EACJ,GAAsB,IAAlBlsH,KAAKowB,SAAgB,CAEvB,GADA87F,EAAO2tF,GAAUv1M,GACb4nH,GAAQA,EAAKtmH,IAEf,YADAsmH,EAAKtmH,IAAI5F,KAAM0F,GAGH,OAAVA,EACF1F,KAAKs1C,gBAAgBhxC,EAAM,GAE3BtE,KAAK2c,aAAarY,EAAMoB,EAAO,OAoBvC,OAAO6B,GAET+K,WAAY,SAAUhO,GACpB,OAAOtE,KAAKgV,KAAK1Q,EAAM,OAEzBkhI,KAAM,SAAUlhI,EAAMoB,GACpB,IAAI6B,EAAOvH,KAEX,GADAsE,EAAOo1M,GAAQp1M,IAASA,EACJ,kBAATA,EACTiqK,GAAOjqK,GAAM,SAAUA,EAAMoB,GAC3B6B,EAAKi+H,KAAKlhI,EAAMoB,UAEb,KAAIizM,GAAUjzM,GAOnB,OAAI6B,EAAK,IAAMA,EAAK,GAAG6oB,UAAY9rB,KAAQiD,EAAK,GACvCA,EAAK,GAAGjD,GAEVoB,EATP1F,KAAK6U,MAAK,WACc,IAAlB7U,KAAKowB,WACPpwB,KAAKsE,GAAQoB,MASnB,OAAO6B,GAET6H,IAAK,SAAU9K,EAAMoB,GACnB,IACIuI,EAAKi+G,EADL3kH,EAAOvH,KAEPi6M,EAAQ,SAAU31M,GACpB,OAAOA,EAAK4D,QAAQ,UAAU,SAAU4Y,EAAGtB,GACzC,OAAOA,EAAEyjD,kBAGTi3I,EAAS,SAAU51M,GACrB,OAAOA,EAAK4D,QAAQ,UAAU,SAAU4Y,GACtC,MAAO,IAAMA,MAGjB,GAAoB,kBAATxc,EACTiqK,GAAOjqK,GAAM,SAAUA,EAAMoB,GAC3B6B,EAAK6H,IAAI9K,EAAMoB,WAGjB,GAAIizM,GAAUjzM,GACZpB,EAAO21M,EAAM31M,GACQ,kBAAVoB,GAAuB8zM,GAAcl1M,KAC9CoB,EAAQA,EAAM4C,WAAa,MAE7Bf,EAAKsN,MAAK,WACR,IAAIhF,EAAQ7P,KAAK6P,MAEjB,GADAq8G,EAAO4tF,GAASx1M,GACZ4nH,GAAQA,EAAKtmH,IACfsmH,EAAKtmH,IAAI5F,KAAM0F,OADjB,CAIA,IACE1F,KAAK6P,MAAM8pM,GAAOr1M,IAASA,GAAQoB,EACnC,MAAOw1B,IAEK,OAAVx1B,GAA4B,KAAVA,IAChBmK,EAAM8+I,eACR9+I,EAAM8+I,eAAeurD,EAAO51M,IAE5BuL,EAAMylC,gBAAgBhxC,YAIvB,CAGL,GAFA2J,EAAM1G,EAAK,GACX2kH,EAAO4tF,GAASx1M,GACZ4nH,GAAQA,EAAKvmH,IACf,OAAOumH,EAAKvmH,IAAIsI,GAElB,IAAIA,EAAIs+B,cAAcmjH,YAMf,OAAIzhJ,EAAIs1K,aACNt1K,EAAIs1K,aAAa02B,EAAM31M,IAEvB,GARP,IACE,OAAO2J,EAAIs+B,cAAcmjH,YAAYb,iBAAiB5gJ,EAAK,MAAMstD,iBAAiB2+I,EAAO51M,IACzF,MAAO42B,GACP,QASR,OAAO3zB,GAETyT,OAAQ,WACN,IACIrJ,EADApK,EAAOvH,KACD0J,EAAI1J,KAAKoJ,OACnB,MAAOM,IACLiI,EAAOpK,EAAKmC,GACZ8gL,GAAM70B,MAAMhkJ,GACRA,EAAKpH,YACPoH,EAAKpH,WAAW+iB,YAAY3b,GAGhC,OAAO3R,MAETkV,MAAO,WACL,IACIvD,EADApK,EAAOvH,KACD0J,EAAI1J,KAAKoJ,OACnB,MAAOM,IAAK,CACViI,EAAOpK,EAAKmC,GACZ,MAAOiI,EAAKiM,WACVjM,EAAK2b,YAAY3b,EAAKiM,YAG1B,OAAO5d,MAETiP,KAAM,SAAUvJ,GACd,IACIgE,EADAnC,EAAOvH,KAEX,GAAI24M,GAAUjzM,GAAQ,CACpBgE,EAAInC,EAAK6B,OACT,IACE,MAAOM,IACLnC,EAAKmC,GAAG2B,UAAY3F,EAEtB,MAAOw1B,GACPk+K,GAAS7xM,EAAKmC,IAAIwL,QAAQC,OAAOzP,GAEnC,OAAO6B,EAET,OAAOA,EAAK,GAAKA,EAAK,GAAG8D,UAAY,IAEvCM,KAAM,SAAUjG,GACd,IACIgE,EADAnC,EAAOvH,KAEX,GAAI24M,GAAUjzM,GAAQ,CACpBgE,EAAInC,EAAK6B,OACT,MAAOM,IACD,cAAenC,EAAKmC,GACtBnC,EAAKmC,GAAGmjE,UAAYnnE,EAEpB6B,EAAK,GAAGmD,YAAchF,EAG1B,OAAO6B,EAET,OAAOA,EAAK,GAAKA,EAAK,GAAGslE,WAAatlE,EAAK,GAAGmD,YAAc,IAE9DyK,OAAQ,WACN,OAAO6jM,GAAch5M,KAAMmJ,WAAW,SAAUwI,IACxB,IAAlB3R,KAAKowB,UAAkBpwB,KAAKq4C,MAA+B,IAAvBr4C,KAAKq4C,KAAKjoB,WAChDpwB,KAAKsW,YAAY3E,OAIvBo+I,QAAS,WACP,OAAOipD,GAAch5M,KAAMmJ,WAAW,SAAUwI,IACxB,IAAlB3R,KAAKowB,UAAkBpwB,KAAKq4C,MAA+B,IAAvBr4C,KAAKq4C,KAAKjoB,WAChDpwB,KAAK6I,aAAa8I,EAAM3R,KAAK4d,eAE9B,IAEL7U,OAAQ,WACN,IAAIxB,EAAOvH,KACX,OAAIuH,EAAK,IAAMA,EAAK,GAAGgD,WACdyuM,GAAczxM,EAAM4B,WAAW,SAAUwI,GAC9C3R,KAAKuK,WAAW1B,aAAa8I,EAAM3R,SAGhCuH,GAETqF,MAAO,WACL,IAAIrF,EAAOvH,KACX,OAAIuH,EAAK,IAAMA,EAAK,GAAGgD,WACdyuM,GAAczxM,EAAM4B,WAAW,SAAUwI,GAC9C3R,KAAKuK,WAAW1B,aAAa8I,EAAM3R,KAAKgyB,gBACvC,GAEEzqB,GAETklC,SAAU,SAAUnR,GAElB,OADA89K,GAAS99K,GAAKnmB,OAAOnV,MACdA,MAETm6M,UAAW,SAAU7+K,GAEnB,OADA89K,GAAS99K,GAAKy0H,QAAQ/vJ,MACfA,MAETgvC,YAAa,SAAUjnC,GACrB,OAAO/H,KAAK+I,OAAOhB,GAASiT,UAE9B2zD,KAAM,SAAU5mE,GACd,OAAO4mE,GAAK3uE,KAAM+H,IAEpBqyM,QAAS,SAAUryM,GACjB,OAAO4mE,GAAK3uE,KAAM+H,GAAS,IAE7BsyM,UAAW,SAAUtyM,GAInB,OAHA/H,KAAK6U,MAAK,WACRukM,GAASp5M,MAAMu9K,WAAW68B,QAAQryM,MAE7B/H,MAETyvE,OAAQ,WACN,OAAOzvE,KAAKoK,SAASyK,MAAK,WACxBukM,GAASp5M,MAAMgvC,YAAYhvC,KAAK2d,gBAGpC7X,MAAO,WACL,IAAI/B,EAAS,GAIb,OAHA/D,KAAK6U,MAAK,WACR9Q,EAAO+I,KAAK9M,KAAKu9C,WAAU,OAEtB67J,GAASr1M,IAElB6sH,SAAU,SAAUtmH,GAClB,OAAOtK,KAAK69H,YAAYvzH,GAAW,IAErCimH,YAAa,SAAUjmH,GACrB,OAAOtK,KAAK69H,YAAYvzH,GAAW,IAErCuzH,YAAa,SAAUvzH,EAAW2/B,GAChC,IAAI1iC,EAAOvH,KACX,MAAyB,kBAAdsK,KAGqB,IAA5BA,EAAU4D,QAAQ,KACpBqgK,GAAOjkK,EAAUjK,MAAM,MAAM,WAC3BkH,EAAKs2H,YAAY79H,KAAMiqC,MAGzB1iC,EAAKsN,MAAK,SAAUrI,EAAOmF,GACzB,IAAI2oM,EAAmBC,EACvBA,EAAaliM,GAAS1G,EAAMrH,GACxBiwM,IAAetwK,IACjBqwK,EAAoB3oM,EAAKrH,UACrBiwM,EACF5oM,EAAKrH,UAAY0vM,IAAQ,IAAMM,EAAoB,KAAKpyM,QAAQ,IAAMoC,EAAY,IAAK,MAEvFqH,EAAKrH,WAAagwM,EAAoB,IAAMhwM,EAAYA,OAfvD/C,GAsBX8Q,SAAU,SAAU/N,GAClB,OAAO+N,GAASrY,KAAK,GAAIsK,IAE3BuK,KAAM,SAAUpL,GACd,OAAO8kK,GAAOvuK,KAAMyJ,IAEtBkL,GAAI,SAAUrQ,EAAMmF,GAClB,OAAOzJ,KAAK6U,MAAK,WACf21K,GAAM/mK,KAAKzjB,KAAMsE,EAAMmF,OAG3B+vC,IAAK,SAAUl1C,EAAMmF,GACnB,OAAOzJ,KAAK6U,MAAK,WACf21K,GAAMpvG,OAAOp7E,KAAMsE,EAAMmF,OAG7BihL,QAAS,SAAUpmL,GACjB,OAAOtE,KAAK6U,MAAK,WACK,kBAATvQ,EACTkmL,GAAMr+I,KAAKnsC,KAAMsE,EAAKwD,KAAMxD,GAE5BkmL,GAAMr+I,KAAKnsC,KAAMsE,OAIvBkpC,KAAM,WACJ,OAAOxtC,KAAKoP,IAAI,UAAW,KAE7Bq+B,KAAM,WACJ,OAAOztC,KAAKoP,IAAI,UAAW,SAE7B3C,MAAO,WACL,OAAO,IAAI2sM,GAASZ,GAAQtrM,MAAMlN,KAAMmJ,aAE1CsZ,GAAI,SAAUjW,GACZ,OAAkB,IAAXA,EAAexM,KAAKyM,MAAMD,GAASxM,KAAKyM,MAAMD,GAAQA,EAAQ,IAEvEy2F,MAAO,WACL,OAAOjjG,KAAKyiB,GAAG,IAEjBxG,KAAM,WACJ,OAAOjc,KAAKyiB,IAAI,IAElBnN,KAAM,SAAU9F,GACd,IAAI9F,EAAG1E,EACHsE,EAAM,GACV,IAAKI,EAAI,EAAG1E,EAAIhF,KAAKoJ,OAAQM,EAAI1E,EAAG0E,IAClC0vM,GAAS9jM,KAAK9F,EAAUxP,KAAK0J,GAAIJ,GAEnC,OAAO8vM,GAAS9vM,IAElBsL,OAAQ,SAAUpF,GAChB,OACS4pM,GADe,oBAAb5pM,EACOqiB,GAAK7xB,KAAK8jB,WAAW,SAAUs8B,EAAM12C,GACnD,OAAO8F,EAAS9F,EAAG02C,MAGPg5J,GAASxkM,OAAOpF,EAAUxP,KAAK8jB,aAEjDwtI,QAAS,SAAU9hJ,GACjB,IAAIzL,EAAS,GAgBb,OAfIyL,aAAoB4pM,KACtB5pM,EAAWA,EAAS,IAEtBxP,KAAK6U,MAAK,SAAUnL,EAAGiI,GACrB,MAAOA,EAAM,CACX,GAAwB,kBAAbnC,GAAyB4pM,GAASznM,GAAM3N,GAAGwL,GAAW,CAC/DzL,EAAO+I,KAAK6E,GACZ,MACK,GAAIA,IAASnC,EAAU,CAC5BzL,EAAO+I,KAAK6E,GACZ,MAEFA,EAAOA,EAAKpH,eAGT6uM,GAASr1M,IAElBM,OAAQ,SAAUA,GAChB,IAAI4J,EAAKwkB,EAAKugC,EACIlU,EAAd5iC,EAAI,EAAG7Z,EAAI,EACf,OAAKgC,EAgBErE,KAAKoP,IAAI/K,IAfd4J,EAAMjO,KAAK,GACPiO,IACFwkB,EAAMxkB,EAAIs+B,cACVymB,EAASvgC,EAAIq2D,gBACT76E,EAAIs2G,wBACNzlE,EAAM7wC,EAAIs2G,wBACVroG,EAAI4iC,EAAInR,MAAQqlB,EAAOrT,YAAcltB,EAAI/e,KAAKisC,YAAcqT,EAAOk1G,WACnE7lK,EAAIy8C,EAAIlR,KAAOolB,EAAOpT,WAAantB,EAAI/e,KAAKksC,WAAaoT,EAAOi1G,YAG7D,CACLt6H,KAAMzxB,EACN0xB,IAAKvrC,KAKXyK,KAAMyrM,GACNxqL,KAAM,GAAGA,KACT9gB,OAAQ,GAAGA,QAEbhH,GAAMyC,OAAO0wM,GAAU,CACrB1wM,OAAQzC,GAAMyC,OACd2wM,UAAW,SAAU/jH,GACnB,OAAIujH,GAASvjH,IAAWA,EAAOllE,SACtB,CAACklE,GAEHrvF,GAAM6d,QAAQwxE,IAEvBh9C,QAASA,GACT3mB,QAAS1rB,GAAM0rB,QACf9c,KAAM05J,GACNt5J,KAAM+kM,GACNnoL,KAAMA,GACNvc,KAAMm7L,GACN6B,KAAM7B,GAAOljK,UACbkkB,OAAQg/I,GAAOkC,WACfhnM,KAAM8kM,GAAOviI,QACbl0D,SAAUy2L,GAAOz2L,SACjBpF,OAAQ,SAAU09L,EAAMqD,EAAOxzL,GAC7B,IAAIzY,EAAIisM,EAAMvsM,OACV+Y,IACFmwL,EAAO,QAAUA,EAAO,KAE1B,MAAO5oM,IACqB,IAAtBisM,EAAMjsM,GAAG0mB,UACXulL,EAAM1oM,OAAOvD,EAAG,GAQpB,OAJEisM,EADmB,IAAjBA,EAAMvsM,OACAgwM,GAAS9jM,KAAKi9L,gBAAgBoD,EAAM,GAAIrD,GAAQ,CAACqD,EAAM,IAAM,GAE7DyD,GAAS9jM,KAAKzC,QAAQy/L,EAAMqD,GAE/BA,KAGX,IAAInqL,GAAM,SAAUpT,EAAIotH,EAAM/gI,GAC5B,IAAI48F,EAAU,GACViwG,EAAMl5L,EAAGotH,GACQ,kBAAV/gI,GAAsBA,aAAiB20M,KAChD30M,EAAQA,EAAM,IAEhB,MAAO6sM,GAAwB,IAAjBA,EAAIlhL,SAAgB,CAChC,QAAc9M,IAAV7e,EAAqB,CACvB,GAAI6sM,IAAQ7sM,EACV,MAEF,GAAqB,kBAAVA,GAAsB20M,GAAS9H,GAAKttM,GAAGS,GAChD,MAGiB,IAAjB6sM,EAAIlhL,UACNixE,EAAQv0F,KAAKwkM,GAEfA,EAAMA,EAAI9rE,GAEZ,OAAOnkC,GAELl+B,GAAU,SAAUxxD,EAAM6oM,EAAapqL,EAAU3rB,GACnD,IAAIV,EAAS,GAIb,IAHIU,aAAiB20M,KACnB30M,EAAQA,EAAM,IAETkN,EAAMA,EAAOA,EAAK6oM,GACvB,IAAIpqL,GAAYze,EAAKye,WAAaA,EAAlC,CAGA,QAAc9M,IAAV7e,EAAqB,CACvB,GAAIkN,IAASlN,EACX,MAEF,GAAqB,kBAAVA,GAAsB20M,GAASznM,GAAM3N,GAAGS,GACjD,MAGJV,EAAO+I,KAAK6E,GAEd,OAAO5N,GAEL02M,GAAe,SAAU9oM,EAAM6oM,EAAapqL,GAC9C,IAAKze,EAAOA,EAAK6oM,GAAc7oM,EAAMA,EAAOA,EAAK6oM,GAC/C,GAAI7oM,EAAKye,WAAaA,EACpB,OAAOze,EAGX,OAAO,MAET48J,GAAO,CACLnkK,OAAQ,SAAUuH,GAChB,IAAIvH,EAASuH,EAAKpH,WAClB,OAAOH,GAA8B,KAApBA,EAAOgmB,SAAkBhmB,EAAS,MAErDo9D,QAAS,SAAU71D,GACjB,OAAO6Z,GAAI7Z,EAAM,eAEnBqhB,KAAM,SAAUrhB,GACd,OAAO8oM,GAAa9oM,EAAM,cAAe,IAE3C4wH,KAAM,SAAU5wH,GACd,OAAO8oM,GAAa9oM,EAAM,kBAAmB,IAE/C6H,SAAU,SAAU7H,GAClB,OAAOwxD,GAAQxxD,EAAKiM,WAAY,cAAe,IAEjD2/J,SAAU,SAAU5rK,GAClB,OAAO1L,GAAM6d,SAA2B,WAAlBnS,EAAKnH,SAAwBmH,EAAKguD,iBAAmBhuD,EAAKumB,cAAcnuB,SAAW4H,GAAMgM,eAEhH,SAAUrZ,EAAMwd,GACjBs3L,GAASt3L,GAAGxd,GAAQ,SAAUkL,GAC5B,IAAIjI,EAAOvH,KACP+D,EAAS,GAoBb,OAnBAwD,EAAKsN,MAAK,WACR,IAAIqE,EAAQ4I,EAAGvZ,KAAKxE,EAAQ/D,KAAMwP,EAAUzL,GACxCmV,IACEkgM,GAASznL,QAAQzY,GACnBnV,EAAO+I,KAAKI,MAAMnJ,EAAQmV,GAE1BnV,EAAO+I,KAAKoM,OAIdlZ,KAAKoJ,OAAS,IACXsvM,GAAYp0M,KACfP,EAASq1M,GAAS3nJ,OAAO1tD,IAEK,IAA5BO,EAAK4J,QAAQ,aACfnK,EAASA,EAAOouC,YAGpBpuC,EAASq1M,GAASr1M,GACdyL,EACKzL,EAAO6Q,OAAOpF,GAEhBzL,MAGXwqK,GAAO,CACLmsC,aAAc,SAAU/oM,EAAMlN,GAC5B,OAAO+mB,GAAI7Z,EAAM,aAAclN,IAEjCk2M,UAAW,SAAUhpM,EAAMlN,GACzB,OAAO0+D,GAAQxxD,EAAM,cAAe,EAAGlN,GAAOgI,MAAM,IAEtDmuM,UAAW,SAAUjpM,EAAMlN,GACzB,OAAO0+D,GAAQxxD,EAAM,kBAAmB,EAAGlN,GAAOgI,MAAM,MAEzD,SAAUnI,EAAMwd,GACjBs3L,GAASt3L,GAAGxd,GAAQ,SAAUkL,EAAUoF,GACtC,IAAIrN,EAAOvH,KACP+D,EAAS,GAkBb,OAjBAwD,EAAKsN,MAAK,WACR,IAAIqE,EAAQ4I,EAAGvZ,KAAKxE,EAAQ/D,KAAMwP,EAAUzL,GACxCmV,IACEkgM,GAASznL,QAAQzY,GACnBnV,EAAO+I,KAAKI,MAAMnJ,EAAQmV,GAE1BnV,EAAO+I,KAAKoM,OAIdlZ,KAAKoJ,OAAS,IAChBrF,EAASq1M,GAAS3nJ,OAAO1tD,GACO,IAA5BO,EAAK4J,QAAQ,YAA6B,cAAT5J,IACnCP,EAASA,EAAOouC,YAGpBpuC,EAASq1M,GAASr1M,GACd6Q,EACK7Q,EAAO6Q,OAAOA,GAEhB7Q,MAGXq1M,GAASt3L,GAAG9d,GAAK,SAAUwL,GACzB,QAASA,GAAYxP,KAAK4U,OAAOpF,GAAUpG,OAAS,GAEtDgwM,GAASt3L,GAAG6/G,KAAKt5H,UAAY+wM,GAASt3L,GACtCs3L,GAASyB,iBAAmB,SAAUpxM,GACpC,IAAIyiB,EACAgoJ,EAAM,SAAU1kK,EAAU2K,GAQ5B,OAPA+R,EAAWA,GAAYziB,IACE,IAArBN,UAAUC,SACZoG,EAAW0c,EAASjiB,SAEjBkQ,IACHA,EAAU+R,EAAS/R,SAEd,IAAI+5J,EAAIpyJ,GAAG6/G,KAAKnyH,EAAU2K,IAGnC,OADAi/L,GAAS1wM,OAAOwrK,EAAKl0K,MACdk0K,GAET,IAAI4mC,GAAc,SAAUC,EAAav1E,EAAM56H,GAC7C2jK,GAAO3jK,GAAO,SAAUtG,EAAM2jI,GAC5B8yE,EAAYz2M,GAAQy2M,EAAYz2M,IAAS,GACzCy2M,EAAYz2M,GAAMkhI,GAAQyC,MAG1B+gE,GAAI3wK,IAAM2wK,GAAI3wK,GAAK,IACrByiL,GAAYjB,GAAW,MAAO,CAC5BmB,UAAW,SAAU/sM,GACnB,IAAIvI,EAAQuI,EAAIy7C,UAChB,GAAc,aAAVhkD,EAGJ,OAAOA,GAETymB,KAAM,SAAUle,GACd,IAAIvI,EAAQuI,EAAIke,KAChB,GAAc,KAAVzmB,EAGJ,OAAOA,GAET+/C,MAAO,SAAUx3C,GACf,OAAOA,EAAI3D,WAEbuF,MAAO,SAAU5B,GACf,IAAIvI,EAAQuI,EAAI4B,MAAMwd,QACtB,GAAqB,IAAjB3nB,EAAM0D,OAGV,OAAO1D,KAGXo1M,GAAYjB,GAAW,MAAO,CAC5Bp0J,MAAO,SAAUx3C,EAAKvI,GACpBuI,EAAI3D,UAAY5E,GAElBmK,MAAO,SAAU5B,EAAKvI,GACpBuI,EAAI4B,MAAMwd,QAAU3nB,MAItBsjM,GAAI3wK,IAAM2wK,GAAI3wK,GAAK,IACrBshL,GAAOC,MAAQ,aACfkB,GAAYhB,GAAU,MAAO,CAC3BmB,QAAS,SAAUhtM,EAAKvI,GACtB,IAAImK,EAAQ5B,EAAI4B,MACF,OAAVnK,GAA4B,KAAVA,EACpBmK,EAAMylC,gBAAgB,WAEtBzlC,EAAMw/B,KAAO,EACbx/B,EAAM+E,OAAS,iBAA2B,IAARlP,EAAc,SAKxD0zM,GAASS,UAAYA,GACrBT,GAASU,SAAWA,GAEpB,IAAI1lJ,GAAS,SAAUhyC,GACrB,IACI2C,EADAsvC,GAAS,EAEb,OAAO,WAEL,IADA,IAAIxnD,EAAO,GACFmV,EAAK,EAAGA,EAAK7Y,UAAUC,OAAQ4Y,IACtCnV,EAAKmV,GAAM7Y,UAAU6Y,GAMvB,OAJKqyC,IACHA,GAAS,EACTtvC,EAAI3C,EAAElV,MAAM,KAAML,IAEbkY,IAIPuvC,GAAa,SAAUC,EAAS5yD,GAClC,IAAK,IAAI+H,EAAI,EAAGA,EAAI6qD,EAAQnrD,OAAQM,IAAK,CACvC,IAAIwS,EAAIq4C,EAAQ7qD,GAChB,GAAIwS,EAAE7R,KAAK1I,GACT,OAAOua,IAKTg/L,GAAS,SAAU3mJ,EAASE,GAC9B,IAAI1vC,EAAIuvC,GAAWC,EAASE,GAC5B,IAAK1vC,EACH,MAAO,CACLsC,MAAO,EACPC,MAAO,GAGX,IAAIgpC,EAAQ,SAAU5mD,GACpB,OAAOgrD,OAAOD,EAAMvsD,QAAQ6c,EAAG,IAAMrb,KAEvC,OAAOk1C,GAAG0R,EAAM,GAAIA,EAAM,KAExBqE,GAAS,SAAUC,EAAgBH,GACrC,IAAII,EAAetwC,OAAOkwC,GAAOlqC,cACjC,OAA8B,IAA1BqqC,EAAexrD,OACV0rD,KAEFomJ,GAAOtmJ,EAAgBC,IAE5BC,GAAU,WACZ,OAAOlW,GAAG,EAAG,IAEXA,GAAK,SAAUv3B,EAAOC,GACxB,MAAO,CACLD,MAAOA,EACPC,MAAOA,IAGPytC,GAAU,CACZnW,GAAIA,GACJ+V,OAAQA,GACRG,QAASA,IAGPE,GAAO,OACPC,GAAS,SACTkmJ,GAAO,KACPC,GAAU,QACVjmJ,GAAU,UACVC,GAAS,SACTC,GAAY,SAAU/wD,EAAMgxD,GAC9B,OAAO,WACL,OAAOA,IAAYhxD,IAGnBixD,GAAY,WACd,OAAOC,GAAK,CACVF,aAAShyC,EACTkE,QAASutC,GAAQD,aAGjBU,GAAO,SAAUC,GACnB,IAAIH,EAAUG,EAAKH,QACf9tC,EAAUiuC,EAAKjuC,QACnB,MAAO,CACL8tC,QAASA,EACT9tC,QAASA,EACTkuC,OAAQL,GAAUL,GAAMM,GACxBK,SAAUN,GAAUJ,GAAQK,GAC5BM,KAAMP,GAAU8lJ,GAAM7lJ,GACtBO,QAASR,GAAU+lJ,GAAS9lJ,GAC5BQ,UAAWT,GAAUF,GAASG,GAC9BS,SAAUV,GAAUD,GAAQE,KAG5BU,GAAU,CACZlB,QAASS,GACT3W,GAAI4W,GACJR,KAAMlkD,EAASkkD,IACfC,OAAQnkD,EAASmkD,IACjB58B,GAAIvnB,EAASqqM,IACbjmJ,MAAOpkD,EAASsqM,IAChBjmJ,QAASrkD,EAASqkD,IAClBC,OAAQtkD,EAASskD,KAGfa,GAAU,UACVC,GAAM,MACNmlJ,GAAY,UACZjlJ,GAAQ,QACRC,GAAM,MACNC,GAAU,UACVC,GAAU,UACVC,GAAO,SAAUlyD,EAAMgxD,GACzB,OAAO,WACL,OAAOA,IAAYhxD,IAGnBmyD,GAAY,WACd,OAAOC,GAAK,CACVpB,aAAShyC,EACTkE,QAASutC,GAAQD,aAGjB4B,GAAO,SAAUjB,GACnB,IAAIH,EAAUG,EAAKH,QACf9tC,EAAUiuC,EAAKjuC,QACnB,MAAO,CACL8tC,QAASA,EACT9tC,QAASA,EACTmvC,UAAWH,GAAKP,GAASX,GACzBsB,MAAOJ,GAAKN,GAAKZ,GACjBuB,UAAWL,GAAK6kJ,GAAW/lJ,GAC3BwB,MAAON,GAAKH,GAAKf,GACjByB,QAASP,GAAKJ,GAAOd,GACrB0B,UAAWR,GAAKF,GAAShB,GACzB2B,UAAWT,GAAKD,GAASjB,KAGzB4B,GAAkB,CACpBpC,QAAS2B,GACT7X,GAAI8X,GACJT,QAASnlD,EAASmlD,IAClBC,IAAKplD,EAASolD,IACdC,QAASrlD,EAASuqM,IAClBjlJ,MAAOtlD,EAASslD,IAChBC,IAAKvlD,EAASulD,IACdC,QAASxlD,EAASwlD,IAClBC,QAASzlD,EAASylD,KAGhBY,GAAa,SAAUC,EAAIC,EAASC,GACtC,IAAIC,EAASH,EAAGR,UAAuC,IAA5B,QAAQvsD,KAAKitD,GACpCE,EAAWJ,EAAGR,UAAYW,EAC1BE,EAAaL,EAAGP,aAAoC,IAArBO,EAAG5vC,QAAQH,MAC1CqwC,EAAaN,EAAGP,aAAoC,IAArBO,EAAG5vC,QAAQH,MAC1CswC,EAAWJ,GAAUE,GAAcC,IAA4C,IAA9B,UAAUrtD,KAAKitD,GAChEM,EAAUR,EAAGR,SAAWQ,EAAGP,YAC3BgB,EAAUD,IAAYD,EACtBG,EAAaT,EAAQtB,YAAcqB,EAAGR,UAAyC,IAA9B,UAAUvsD,KAAKitD,GACpE,MAAO,CACLC,OAAQzmD,EAASymD,GACjBC,SAAU1mD,EAAS0mD,GACnBG,SAAU7mD,EAAS6mD,GACnBE,QAAS/mD,EAAS+mD,GAClBD,QAAS9mD,EAAS8mD,GAClBf,UAAWO,EAAGP,UACdD,MAAOQ,EAAGR,MACVmB,UAAWjnD,EAASgnD,KAIpBE,GAAW,SAAUC,EAAYX,GACnC,IAAI7C,EAAQlwC,OAAO+yC,GAAW/sC,cAC9B,OAAOjV,EAAK2iD,GAAY,SAAUC,GAChC,OAAOA,EAAUC,OAAO1D,OAGxB2D,GAAgB,SAAUC,EAAUf,GACtC,OAAOU,GAASK,EAAUf,GAAWrvD,KAAI,SAAUovD,GACjD,IAAI7vC,EAAUutC,GAAQJ,OAAO0C,EAAQzC,eAAgB0C,GACrD,MAAO,CACLhC,QAAS+B,EAAQ/yD,KACjBkjB,QAASA,OAIX8wC,GAAW,SAAUC,EAAMjB,GAC7B,OAAOU,GAASO,EAAMjB,GAAWrvD,KAAI,SAAUmvD,GAC7C,IAAI5vC,EAAUutC,GAAQJ,OAAOyC,EAAGxC,eAAgB0C,GAChD,MAAO,CACLhC,QAAS8B,EAAG9yD,KACZkjB,QAASA,OAIXgxC,GAAW,CACbJ,cAAeA,GACfE,SAAUA,IAGRk3F,GAAa,SAAUnjJ,EAAKsjB,GAC9B,OAAgC,IAAzBtjB,EAAI6B,QAAQyhB,IAEjB2rL,GAAS,SAAUjvM,GACrB,OAAOA,EAAInE,QAAQ,aAAc,KAE/BqzM,GAAQ,SAAUlvM,GACpB,OAAOA,EAAInE,QAAQ,QAAS,KAE1BszM,GAAQ,SAAUnvM,GACpB,OAAOA,EAAInE,QAAQ,QAAS,KAG1BuwD,GAAqB,sCACrBC,GAAgB,SAAU1hD,GAC5B,OAAO,SAAU2hD,GACf,OAAO62F,GAAW72F,EAAU3hD,KAG5BqhD,GAAW,CACb,CACE/zD,KAAM,OACNswD,eAAgB,CAAC,kCACjBuD,OAAQ,SAAUQ,GAChB,OAAO62F,GAAW72F,EAAU,UAAY62F,GAAW72F,EAAU,WAAa62F,GAAW72F,EAAU,WAAa62F,GAAW72F,EAAU,iBAGrI,CACEr0D,KAAM,SACNswD,eAAgB,CACd,kCACA6D,IAEFN,OAAQ,SAAUQ,GAChB,OAAO62F,GAAW72F,EAAU,YAAc62F,GAAW72F,EAAU,iBAGnE,CACEr0D,KAAM,KACNswD,eAAgB,CACd,iCACA,8BAEFuD,OAAQ,SAAUQ,GAChB,OAAO62F,GAAW72F,EAAU,SAAW62F,GAAW72F,EAAU,aAGhE,CACEr0D,KAAM,QACNswD,eAAgB,CACd6D,GACA,kCAEFN,OAAQO,GAAc,UAExB,CACEp0D,KAAM,UACNswD,eAAgB,CAAC,uCACjBuD,OAAQO,GAAc,YAExB,CACEp0D,KAAM,SACNswD,eAAgB,CACd6D,GACA,iCAEFN,OAAQ,SAAUQ,GAChB,OAAQ62F,GAAW72F,EAAU,WAAa62F,GAAW72F,EAAU,aAAe62F,GAAW72F,EAAU,kBAIrGJ,GAAO,CACT,CACEj0D,KAAM,UACN6zD,OAAQO,GAAc,OACtB9D,eAAgB,CAAC,0CAEnB,CACEtwD,KAAM,MACN6zD,OAAQ,SAAUQ,GAChB,OAAO62F,GAAW72F,EAAU,WAAa62F,GAAW72F,EAAU,SAEhE/D,eAAgB,CACd,sCACA,+BACA,wCAGJ,CACEtwD,KAAM,UACN6zD,OAAQO,GAAc,WACtB9D,eAAgB,CAAC,sCAEnB,CACEtwD,KAAM,MACN6zD,OAAQO,GAAc,QACtB9D,eAAgB,CAAC,mCAEnB,CACEtwD,KAAM,QACN6zD,OAAQO,GAAc,SACtB9D,eAAgB,IAElB,CACEtwD,KAAM,UACN6zD,OAAQO,GAAc,SACtB9D,eAAgB,IAElB,CACEtwD,KAAM,UACN6zD,OAAQO,GAAc,WACtB9D,eAAgB,KAGhBgE,GAAe,CACjBP,SAAUvnD,EAASunD,IACnBE,KAAMznD,EAASynD,KAGbM,GAAW,SAAUvB,GACvB,IAAIe,EAAWO,GAAaP,WACxBE,EAAOK,GAAaL,OACpBlB,EAAUmB,GAASJ,cAAcC,EAAUf,GAAWz0C,KAAKmzC,GAAQlB,QAASkB,GAAQpX,IACpFwY,EAAKoB,GAASF,SAASC,EAAMjB,GAAWz0C,KAAKq0C,GAAgBpC,QAASoC,GAAgBtY,IACtFka,EAAa3B,GAAWC,EAAIC,EAASC,GACzC,MAAO,CACLD,QAASA,EACTD,GAAIA,EACJ0B,WAAYA,IAGZC,GAAoB,CAAEpE,OAAQkE,IAE9BG,GAAW5E,IAAO,WACpB,IAAIkD,EAAY/xD,EAAW0zD,UAAU3B,UACrC,OAAOyB,GAAkBpE,OAAO2C,MAE9B4B,GAAsB,CAAEvE,OAAQqE,IAEhCtG,GAAW,SAAUzjD,EAAMi6B,GAC7B,IAAIzW,EAAMyW,GAAS3jC,EAAWwE,SAC1B0S,EAAMgW,EAAIoG,cAAc,OAE5B,GADApc,EAAIpR,UAAY4D,GACXwN,EAAIkzC,iBAAmBlzC,EAAIkB,WAAWvU,OAAS,EAElD,MADA7D,EAAWotD,QAAQt2B,MAAM,wCAAyCptB,GAC5D,IAAIkU,MAAM,qCAElB,OAAOyvC,GAAQn2C,EAAIkB,WAAW,KAE5Bk1C,GAAU,SAAUtlD,EAAK27B,GAC3B,IAAIzW,EAAMyW,GAAS3jC,EAAWwE,SAC1B4H,EAAO8gB,EAAIoG,cAActrB,GAC7B,OAAOqlD,GAAQjhD,IAEbmhD,GAAW,SAAUnnD,EAAMu9B,GAC7B,IAAIzW,EAAMyW,GAAS3jC,EAAWwE,SAC1B4H,EAAO8gB,EAAIhd,eAAe9J,GAC9B,OAAOinD,GAAQjhD,IAEbihD,GAAU,SAAUjhD,GACtB,GAAa,OAATA,QAA0B2R,IAAT3R,EACnB,MAAM,IAAIwR,MAAM,oCAElB,MAAO,CAAElR,IAAKnB,EAASa,KAErBohD,GAAY,SAAUC,EAAQ92C,EAAG7Z,GACnC,IAAIowB,EAAMugC,EAAO/gD,MACjB,OAAOkS,EAAO5X,KAAKkmB,EAAIwgC,iBAAiB/2C,EAAG7Z,IAAI4F,IAAI2qD,KAEjDM,GAAU,CACZR,SAAUA,GACVG,QAASA,GACTC,SAAUA,GACVF,QAASA,GACTG,UAAWA,IAMTq7F,IAHY7oJ,EAAW4uD,KAAKiF,eACZ7zD,EAAW4uD,KAAKkF,mBACtB9zD,EAAW4uD,KAAKmF,aACf/zD,EAAW4uD,KAAKoF,eAG3BJ,IAFgB5zD,EAAW4uD,KAAKqF,mBACZj0D,EAAW4uD,KAAKsF,uBAC1Bl0D,EAAW4uD,KAAKuF,cAC1B20F,GAAO9oJ,EAAW4uD,KAAKyF,UAMvBt1D,IALyBiB,EAAW4uD,KAAK0F,4BACtBt0D,EAAW4uD,KAAK2F,sBAC1Bv0D,EAAW4uD,KAAK4F,YACdx0D,EAAW4uD,KAAK6F,cAEpB,SAAU/vD,GACnB,IAAI8a,EAAI9a,EAAQgI,MAAMzH,SACtB,OAAOua,EAAEwF,gBAEPziB,GAAO,SAAUmC,GACnB,OAAOA,EAAQgI,MAAMme,UAEnB8qC,GAAW,SAAU9pD,GACvB,OAAO,SAAUnH,GACf,OAAOnC,GAAKmC,KAAamH,IAGzB+pD,GAAYD,GAAS/B,IACrBpoC,GAASmqC,GAASmzF,IAElBxoI,GAAOzd,OAAOyd,KACd41L,GAAmBrzM,OAAOI,eAC1B0/K,GAAS,SAAUniK,EAAK3D,GAE1B,IADA,IAAIyxC,EAAQhuC,GAAKE,GACR8H,EAAI,EAAGnhB,EAAMmnD,EAAMzqD,OAAQykB,EAAInhB,EAAKmhB,IAAK,CAChD,IAAInkB,EAAImqD,EAAMhmC,GACV3R,EAAI6J,EAAIrc,GACZ0Y,EAAElG,EAAGxS,KAGLgyM,GAAQ,SAAU31L,EAAK3D,GACzB,OAAO8qI,GAASnnI,GAAK,SAAU7J,EAAGxS,GAChC,MAAO,CACLmkB,EAAGnkB,EACH7D,EAAGuc,EAAElG,EAAGxS,QAIVwjJ,GAAW,SAAUnnI,EAAK3D,GAC5B,IAAI2C,EAAI,GAKR,OAJAmjK,GAAOniK,GAAK,SAAU7J,EAAGxS,GACvB,IAAIyjJ,EAAQ/qI,EAAElG,EAAGxS,GACjBqb,EAAEooI,EAAMt/H,GAAKs/H,EAAMtnJ,KAEdkf,GAEL42L,GAAW,SAAU51L,EAAKf,GAC5B,IAAI5T,EAAI,GACJgR,EAAI,GAKR,OAJA8lK,GAAOniK,GAAK,SAAU7J,EAAGxS,GACvB,IAAIkyM,EAAS52L,EAAK9I,EAAGxS,GAAK0H,EAAIgR,EAC9Bw5L,EAAOlyM,GAAKwS,KAEP,CACL9K,EAAGA,EACHgR,EAAGA,IAGH8L,GAAM,SAAUnI,EAAKliB,GACvB,OAAO43M,GAAiBlzM,KAAKwd,EAAKliB,IAGhCy3D,GAAc,SAAUrpD,GAC1B,YAAqBqR,IAAdrR,EAAIpC,OAAuB4U,EAAWxS,EAAIpC,MAAM0rD,mBAGrDkzF,GAAS,SAAUxkJ,GACrB,IAAIgI,EAAM8e,GAAO9mB,GAAWA,EAAQgI,MAAM1H,WAAaN,EAAQgI,MAC/D,YAAeqR,IAARrR,GAA6B,OAARA,GAAgBA,EAAIs6B,cAAc74B,KAAKsG,SAAS/H,IAG1EmpD,GAAS,SAAUnpD,EAAKpO,EAAK6B,GAC/B,KAAIsqD,EAAStqD,IAAUuqD,EAAUvqD,IAAUwqD,EAASxqD,IAIlD,MADAH,EAAWotD,QAAQt2B,MAAM,iCAAkCx4B,EAAK,YAAa6B,EAAO,cAAeuM,GAC7F,IAAIkR,MAAM,kCAHhBlR,EAAI0K,aAAa9Y,EAAK6B,EAAQ,KAM9BE,GAAM,SAAUqE,EAASpG,EAAK6B,GAChC01D,GAAOnxD,EAAQgI,MAAOpO,EAAK6B,IAEzB21D,GAAS,SAAUpxD,EAASosB,GAC9B,IAAIpkB,EAAMhI,EAAQgI,MAClBi2K,GAAO7xJ,GAAO,SAAUxwB,EAAGgoB,GACzButC,GAAOnpD,EAAK4b,EAAGhoB,OAGfF,GAAM,SAAUsE,EAASpG,GAC3B,IAAIgC,EAAIoE,EAAQgI,MAAM4L,aAAaha,GACnC,OAAa,OAANgC,OAAayd,EAAYzd,GAE9B+lK,GAAQ,SAAU3hK,EAASpG,GAC7B,IAAIoO,EAAMhI,EAAQgI,MAClB,SAAOA,IAAOA,EAAIozC,eAAepzC,EAAIozC,aAAaxhD,IAEhDmX,GAAS,SAAU/Q,EAASpG,GAC9BoG,EAAQgI,MAAMqjC,gBAAgBzxC,IAG5B23D,GAAc,SAAUvpD,EAAKvC,EAAUhK,GACzC,IAAKsqD,EAAStqD,GAEZ,MADAH,EAAWotD,QAAQt2B,MAAM,qCAAsC3sB,EAAU,YAAahK,EAAO,cAAeuM,GACtG,IAAIkR,MAAM,+BAAiCzd,GAE/C41D,GAAYrpD,IACdA,EAAIpC,MAAM4rD,YAAY/rD,EAAUhK,IAGhCkpJ,GAAW,SAAU3kJ,EAASmF,GAChC,IAAI6C,EAAMhI,EAAQgI,MAClBi2K,GAAO94K,GAAK,SAAUvJ,EAAGgoB,GACvB2tC,GAAYvpD,EAAK4b,EAAGhoB,OAGpB+oB,GAAQ,SAAU3kB,EAASyF,GAC7B,IAAIuC,EAAMhI,EAAQgI,MACd+a,EAASznB,EAAW4B,OAAO0nJ,iBAAiB58I,GAC5C8S,EAAIiI,EAAOuuC,iBAAiB7rD,GAC5B7J,EAAU,KAANkf,GAAa0pI,GAAOxkJ,GAA8C8a,EAAnC+pI,GAAkB78I,EAAKvC,GAC9D,OAAa,OAAN7J,OAAayd,EAAYzd,GAE9BipJ,GAAoB,SAAU78I,EAAKvC,GACrC,OAAO4rD,GAAYrpD,GAAOA,EAAIpC,MAAM0rD,iBAAiB7rD,GAAY,IAE/Dq/I,GAAS,SAAU9kJ,EAASyF,GAC9B,IAAIuC,EAAMhI,EAAQgI,MACd22D,EAAMkmF,GAAkB78I,EAAKvC,GACjC,OAAOyU,EAAO5X,KAAKq8D,GAAKh0D,QAAO,SAAUmQ,GACvC,OAAOA,EAAE3b,OAAS,MAGlByyM,GAAY,SAAU5xM,GACxB,IAAImF,EAAM,GACN6C,EAAMhI,EAAQgI,MAClB,GAAIqpD,GAAYrpD,GACd,IAAK,IAAIvI,EAAI,EAAGA,EAAIuI,EAAIpC,MAAMzG,OAAQM,IAAK,CACzC,IAAIoyM,EAAW7pM,EAAIpC,MAAMuwC,KAAK12C,GAC9B0F,EAAI0sM,GAAY7pM,EAAIpC,MAAMisM,GAG9B,OAAO1sM,GAGLqkD,GAAY,WAEd,IADA,IAAIC,EAAS,GACJ1xC,EAAK,EAAGA,EAAK7Y,UAAUC,OAAQ4Y,IACtC0xC,EAAO1xC,GAAM7Y,UAAU6Y,GAEzB,OAAO,WAEL,IADA,IAAInO,EAAS,GACJmO,EAAK,EAAGA,EAAK7Y,UAAUC,OAAQ4Y,IACtCnO,EAAOmO,GAAM7Y,UAAU6Y,GAEzB,GAAI0xC,EAAOtqD,SAAWyK,EAAOzK,OAC3B,MAAM,IAAI+Z,MAAM,mDAAqDuwC,EAAOtqD,OAAS,WAAayK,EAAOzK,OAAS,cAEpH,IAAIuqD,EAAS,GAIb,OAHA9+C,EAAK6+C,GAAQ,SAAUpvD,EAAMoF,GAC3BiqD,EAAOrvD,GAAQwM,EAAS+C,EAAOnK,OAE1BiqD,IAIPooJ,GAAY,SAAU/kM,EAAQoL,GAChC,IAAI2C,EAAI,GACJi3L,EAAU,SAAU7nM,GAEtB,OADA4Q,EAAEjY,KAAKqH,GACAiO,EAAEjO,IAEPm9L,EAAMlvL,EAAEpL,GACZ,GACEs6L,EAAMA,EAAI7tL,KAAKu4L,SACR1K,EAAIxuL,UACb,OAAOiC,GAELk3L,GAAU,CAAEn4L,QAASi4L,IAErBpqM,GAAO,WACT,IAAIyQ,EAAIknB,GAASrmB,SAAS,QAC1B,OAAOb,GAEL0xC,GAA0B,SAAUhzC,EAAGtB,EAAG1a,GAC5C,OAAkD,KAA1Cgc,EAAEgzC,wBAAwBt0C,GAAK1a,IAErCivD,GAA4B,SAAUjzC,EAAGtB,GAC3C,OAAOs0C,GAAwBhzC,EAAGtB,EAAG7N,KAAOqiD,8BAE1CC,GAA8B,SAAUnzC,EAAGtB,GAC7C,OAAOs0C,GAAwBhzC,EAAGtB,EAAG7N,KAAOuiD,iCAE1CC,GAAO,CACTJ,0BAA2BA,GAC3BE,4BAA6BA,IAG3B0F,GAAYR,GACZg2F,GAAaf,GACbxzF,GAAO,SAAU3wD,EAASuF,GAC5B,IAAIyC,EAAMhI,EAAQgI,MAClB,GAAIA,EAAIme,WAAaupC,GACnB,OAAO,EAEP,IAAIM,EAAOhoD,EACX,QAAqBqR,IAAjB22C,EAAKpnD,QACP,OAAOonD,EAAKpnD,QAAQrD,GACf,QAA+B8T,IAA3B22C,EAAKC,kBACd,OAAOD,EAAKC,kBAAkB1qD,GACzB,QAAmC8T,IAA/B22C,EAAKE,sBACd,OAAOF,EAAKE,sBAAsB3qD,GAC7B,QAAgC8T,IAA5B22C,EAAKG,mBACd,OAAOH,EAAKG,mBAAmB5qD,GAE/B,MAAM,IAAI2T,MAAM,mCAIlBisI,GAAiB,SAAUn9I,GAC7B,OAAOA,EAAIme,WAAaupC,IAAa1nD,EAAIme,WAAa++H,IAAwC,IAA1Bl9I,EAAIo9I,mBAEtEliJ,GAAM,SAAUqC,EAAU05B,GAC5B,IAAIo3G,OAAiBh9H,IAAV4lB,EAAsB3jC,EAAWwE,SAAWm/B,EAAMj3B,MAC7D,OAAOm9I,GAAe9O,GAAQ,GAAKr4I,EAAIq4I,EAAKt2I,iBAAiBwF,GAAW0jD,GAAQN,UAE9E08F,GAAM,SAAU9/I,EAAU05B,GAC5B,IAAIo3G,OAAiBh9H,IAAV4lB,EAAsB3jC,EAAWwE,SAAWm/B,EAAMj3B,MAC7D,OAAOm9I,GAAe9O,GAAQn8H,EAAO5B,OAAS4B,EAAO5X,KAAK+zI,EAAKiP,cAAc//I,IAAWvH,IAAIirD,GAAQN,UAGlGnwC,GAAK,SAAU43C,EAAIC,GACrB,OAAOD,EAAGpoD,QAAUqoD,EAAGroD,OAErBsoD,GAAkB,SAAUF,EAAIC,GAClC,IAAIE,EAAKH,EAAGpoD,MACRwoD,EAAKH,EAAGroD,MACZ,OAAOuoD,IAAOC,GAAaD,EAAGxgD,SAASygD,IAErCC,GAAa,SAAUL,EAAIC,GAC7B,OAAOnG,GAAKF,4BAA4BoG,EAAGpoD,MAAOqoD,EAAGroD,QAEnDolD,GAAU6B,GAAoBvE,SAAS0C,QACvC6kJ,GAAa7kJ,GAAQzB,OAAS8E,GAAaH,GAE3Ck1F,GAAQ,SAAUxlJ,GACpB,OAAOipD,GAAQN,QAAQ3oD,EAAQgI,MAAMs6B,gBAEnCu8C,GAAkB,SAAU7+E,GAC9B,OAAOipD,GAAQN,QAAQ3oD,EAAQgI,MAAMs6B,cAAcu8C,kBAEjD4mE,GAAc,SAAUzlJ,GAC1B,OAAOipD,GAAQN,QAAQ3oD,EAAQgI,MAAMs6B,cAAcmjH,cAEjDtlJ,GAAS,SAAUH,GACrB,OAAOka,EAAO5X,KAAKtC,EAAQgI,MAAM1H,YAAYtC,IAAIirD,GAAQN,UAEvD4U,GAAU,SAAUv9D,EAAS0lJ,GAC/B,IAAIC,EAAOnrI,EAAWkrI,GAAUA,EAASttI,EACrCpQ,EAAMhI,EAAQgI,MACd3I,EAAM,GACV,MAA0B,OAAnB2I,EAAI1H,iBAA0C+Y,IAAnBrR,EAAI1H,WAA0B,CAC9D,IAAIslJ,EAAY59I,EAAI1H,WAChB4+B,EAAI+pB,GAAQN,QAAQi9F,GAExB,GADAvmJ,EAAIwD,KAAKq8B,IACO,IAAZymH,EAAKzmH,GACP,MAEAl3B,EAAM49I,EAGV,OAAOvmJ,GAELwmJ,GAAc,SAAU7lJ,GAC1B,OAAOka,EAAO5X,KAAKtC,EAAQgI,MAAMy8C,iBAAiBzmD,IAAIirD,GAAQN,UAE5D5gC,GAAc,SAAU/nB,GAC1B,OAAOka,EAAO5X,KAAKtC,EAAQgI,MAAM+f,aAAa/pB,IAAIirD,GAAQN,UAExDupJ,GAAe,SAAUlyM,GAC3B,OAAOkoC,GAAQ8pK,GAAQn4L,QAAQ7Z,EAAS6lJ,MAEtCssD,GAAe,SAAUnyM,GAC3B,OAAOgyM,GAAQn4L,QAAQ7Z,EAAS+nB,KAE9BxY,GAAW,SAAUvP,GACvB,OAAOhC,EAAIgC,EAAQgI,MAAM0L,WAAYu1C,GAAQN,UAE3CiI,GAAQ,SAAU5wD,EAASuC,GAC7B,IAAIg1C,EAAKv3C,EAAQgI,MAAM0L,WACvB,OAAOwG,EAAO5X,KAAKi1C,EAAGh1C,IAAQvE,IAAIirD,GAAQN,UAExCh1C,GAAa,SAAU3T,GACzB,OAAO4wD,GAAM5wD,EAAS,IAEpBokD,GAAY,SAAUpkD,GACxB,OAAO4wD,GAAM5wD,EAASA,EAAQgI,MAAM0L,WAAWvU,OAAS,IAEtDizM,GAAkB,SAAUpyM,GAC9B,OAAOA,EAAQgI,MAAM0L,WAAWvU,QAI9BkzM,IAFO7oJ,GAAU,UAAW,UAEhByF,GAAoBvE,SAAS0C,SACzCklJ,GAAe,SAAUrjM,GAC3B,OAAO5D,EAAK4D,EAAOiiD,KAEjBqhJ,GAAwB,SAAUvuM,GACpC,OAAIquM,GAAUxmJ,aAA6B,UAAdxxD,GAAK2J,GACzBsuM,GAAa/iM,GAASvL,IAAM2G,QAAO,SAAU3G,GAClD,MAAqB,YAAd3J,GAAK2J,MACXwV,MAAK,SAAUkjC,GAChB,OAAO41J,GAAaH,GAAaz1J,IAAU1+C,KAAI,SAAUyL,GACvD,IAAI+oM,EAAU/oM,EAAKzB,MAAMizG,UACrBw3F,EAAa/1J,EAAQ10C,MAAMizG,UAC3By3F,EAAgBh2J,EAAQ10C,MAAM69B,aAClC,OAAO2sK,GAAWC,GAAcC,EAAgB,QAEjD55L,MAAM,GAEF,GAGP28B,GAAS,SAAUhsC,EAAMzF,EAAK2uM,GAChC,IAAkBC,EAEd/9J,EAFA5iC,EAAI,EAAG7Z,EAAI,EACXowB,EAAM/e,EAAK64B,cAGf,GADAqwK,EAAUA,GAAoBlpM,EAC1BzF,EAAK,CACP,GAAI2uM,IAAYlpM,GAAQzF,EAAIs2G,uBAAsE,WAA7C31F,GAAMskC,GAAQN,QAAQl/C,GAAO,YAIhF,OAHAorC,EAAM7wC,EAAIs2G,wBACVroG,EAAI4iC,EAAInR,MAAQlb,EAAIq2D,gBAAgBnpC,YAAcjsC,EAAKisC,YAAcltB,EAAIq2D,gBAAgBo/E,WACzF7lK,EAAIy8C,EAAIlR,KAAOnb,EAAIq2D,gBAAgBlpC,WAAalsC,EAAKksC,WAAantB,EAAIq2D,gBAAgBm/E,UAC/E,CACL/rJ,EAAGA,EACH7Z,EAAGA,GAGPw6M,EAAe5uM,EACf,MAAO4uM,GAAgBA,IAAiBD,GAAWC,EAAazsL,SAC9DlU,GAAK2gM,EAAaz0C,YAAc,EAChC/lK,GAAKw6M,EAAa33F,WAAa,EAC/B23F,EAAeA,EAAaA,aAE9BA,EAAe5uM,EAAI1D,WACnB,MAAOsyM,GAAgBA,IAAiBD,GAAWC,EAAazsL,SAC9DlU,GAAK2gM,EAAal9J,YAAc,EAChCt9C,GAAKw6M,EAAaj9J,WAAa,EAC/Bi9J,EAAeA,EAAatyM,WAE9BlI,GAAKm6M,GAAsBtpJ,GAAQN,QAAQ3kD,IAE7C,MAAO,CACLiO,EAAGA,EACH7Z,EAAGA,IAGHslK,GAAW,CAAEjoH,OAAQA,IAErB8xB,GAAY,GAAIsrI,GAAW,CAAE70I,QAASuJ,KACzC,SAAUC,EAAQxJ,EAASD,EAAQ0J,IACjC,SAAUtvD,GACT,GAAuB,kBAAZ6lD,GAA0C,qBAAXD,EACxCA,EAAOC,QAAU7lD,SACZ,GAAsB,oBAAXqvD,GAAyBA,EAAOE,IAChDF,EAAO,GAAIrvD,OACN,CACL,IAAIggB,EAEFA,EADoB,qBAAXj7B,OACLA,OACuB,qBAAXrH,EACZA,EACqB,qBAATyH,KACZA,KAEAvH,KAENoiC,EAAEwvC,oBAAsBxvD,MAhB5B,EAkBE,WACA,OAAO,WACL,SAAS2C,EAAE5Q,EAAG1Q,EAAG2N,GACf,SAASjJ,EAAEuB,EAAG0Y,GACZ,IAAK3e,EAAEiG,GAAI,CACT,IAAKyK,EAAEzK,GAAI,CACT,IAAI2G,EAAI,mBAAqBqhE,GAAWA,EACxC,IAAKtvD,GAAK/R,EACR,OAAOA,EAAE3G,GAAG,GACd,GAAI2e,EACF,OAAOA,EAAE3e,GAAG,GACd,IAAIoX,EAAI,IAAIqC,MAAM,uBAA0BzZ,EAAI,KAChD,MAAMoX,EAAErW,KAAO,mBAAoBqW,EAErC,IAAIqoB,EAAI1lC,EAAEiG,GAAK,CAAEu+D,QAAS,IAC1B9zD,EAAEzK,GAAG,GAAGnB,KAAK4gC,EAAE8+B,SAAS,SAAUljD,GAChC,IAAIthB,EAAI0Q,EAAEzK,GAAG,GAAGqb,GAChB,OAAO5c,EAAE1E,GAAKshB,KACbokB,EAAGA,EAAE8+B,QAASljD,EAAG5Q,EAAG1Q,EAAG2N,GAE5B,OAAO3N,EAAEiG,GAAGu+D,QAEd,IAAK,IAAI5/C,EAAI,mBAAqBqpD,GAAWA,EAAShoE,EAAI,EAAGA,EAAI0H,EAAEhI,OAAQM,IACzEvB,EAAEiJ,EAAE1H,IACN,OAAOvB,EAET,OAAO4c,EAzBF,GA0BH,CACFrF,EAAG,CACD,SAAUgyD,EAAS1J,EAAQC,GACzB,IACI4J,EACAC,EAFArB,EAAUzI,EAAOC,QAAU,GAG/B,SAAS8J,IACP,MAAM,IAAI5uD,MAAM,mCAElB,SAAS6uD,IACP,MAAM,IAAI7uD,MAAM,qCAsBlB,SAAS8uD,EAAWC,GAClB,GAAIL,IAAqBz3C,WACvB,OAAOA,WAAW83C,EAAK,GAEzB,IAAKL,IAAqBE,IAAqBF,IAAqBz3C,WAElE,OADAy3C,EAAmBz3C,WACZA,WAAW83C,EAAK,GAEzB,IACE,OAAOL,EAAiBK,EAAK,GAC7B,MAAO/9D,IACP,IACE,OAAO09D,EAAiBtpE,KAAK,KAAM2pE,EAAK,GACxC,MAAO/9D,IACP,OAAO09D,EAAiBtpE,KAAKvI,KAAMkyE,EAAK,KAI9C,SAASC,EAAgBrX,GACvB,GAAIgX,IAAuB34B,aACzB,OAAOA,aAAa2hB,GAEtB,IAAKgX,IAAuBE,IAAwBF,IAAuB34B,aAEzE,OADA24B,EAAqB34B,aACdA,aAAa2hB,GAEtB,IACE,OAAOgX,EAAmBhX,GAC1B,MAAO3mD,IACP,IACE,OAAO29D,EAAmBvpE,KAAK,KAAMuyD,GACrC,MAAO3mD,IACP,OAAO29D,EAAmBvpE,KAAKvI,KAAM86D,MApD1C,WACC,IAEI+W,EADwB,oBAAfz3C,WACUA,WAEA23C,EAErB,MAAO59D,IACP09D,EAAmBE,EAErB,IAEID,EAD0B,oBAAjB34B,aACYA,aAEA64B,EAEvB,MAAO79D,IACP29D,EAAqBE,IAjBzB,GAwDA,IAEII,EAFAC,EAAQ,GACRC,GAAW,EAEXC,GAAc,EAClB,SAASC,IACFF,GAAaF,IAGlBE,GAAW,EACPF,EAAahpE,OACfipE,EAAQD,EAAalwD,OAAOmwD,GAE5BE,GAAc,EAEZF,EAAMjpE,QACRqpE,KAGJ,SAASA,IACP,IAAIH,EAAJ,CAGA,IAAII,EAAUT,EAAWO,GACzBF,GAAW,EACX,IAAI5lE,EAAM2lE,EAAMjpE,OAChB,MAAOsD,EAAK,CACV0lE,EAAeC,EACfA,EAAQ,GACR,QAASE,EAAa7lE,EAChB0lE,GACFA,EAAaG,GAAY1nE,MAG7B0nE,GAAc,EACd7lE,EAAM2lE,EAAMjpE,OAEdgpE,EAAe,KACfE,GAAW,EACXH,EAAgBO,IAclB,SAASC,EAAKT,EAAKU,GACjB5yE,KAAKkyE,IAAMA,EACXlyE,KAAK4yE,MAAQA,EAWf,SAAShxD,KAzBT6uD,EAAQoC,SAAW,SAAUX,GAC3B,IAAIrlE,EAAO,IAAIG,MAAM7D,UAAUC,OAAS,GACxC,GAAID,UAAUC,OAAS,EACrB,IAAK,IAAIM,EAAI,EAAGA,EAAIP,UAAUC,OAAQM,IACpCmD,EAAKnD,EAAI,GAAKP,UAAUO,GAG5B2oE,EAAMvlE,KAAK,IAAI6lE,EAAKT,EAAKrlE,IACJ,IAAjBwlE,EAAMjpE,QAAiBkpE,GACzBL,EAAWQ,IAOfE,EAAKtqE,UAAUwC,IAAM,WACnB7K,KAAKkyE,IAAIhlE,MAAM,KAAMlN,KAAK4yE,QAE5BnC,EAAQ1hE,MAAQ,UAChB0hE,EAAQpZ,SAAU,EAClBoZ,EAAQ9lE,IAAM,GACd8lE,EAAQqC,KAAO,GACfrC,EAAQjpD,QAAU,GAClBipD,EAAQsC,SAAW,GAGnBtC,EAAQ97D,GAAKiN,EACb6uD,EAAQuC,YAAcpxD,EACtB6uD,EAAQwC,KAAOrxD,EACf6uD,EAAQj3B,IAAM53B,EACd6uD,EAAQyC,eAAiBtxD,EACzB6uD,EAAQ0C,mBAAqBvxD,EAC7B6uD,EAAQ2C,KAAOxxD,EACf6uD,EAAQ4C,gBAAkBzxD,EAC1B6uD,EAAQ6C,oBAAsB1xD,EAC9B6uD,EAAQ8C,UAAY,SAAUjvE,GAC5B,MAAO,IAETmsE,EAAQ+C,QAAU,SAAUlvE,GAC1B,MAAM,IAAI6e,MAAM,qCAElBstD,EAAQgD,IAAM,WACZ,MAAO,KAEThD,EAAQiD,MAAQ,SAAUloD,GACxB,MAAM,IAAIrI,MAAM,mCAElBstD,EAAQkD,MAAQ,WACd,OAAO,IAGX,IAEF5zD,EAAG,CACD,SAAU2xD,EAAS1J,EAAQC,IACxB,SAAU9tC,IACR,SAAUlxB,GACT,IAAI2qE,EAAiBx5C,WACrB,SAASxY,KAET,SAAS6B,EAAK3B,EAAIuY,GAChB,OAAO,WACLvY,EAAG5U,MAAMmtB,EAASlxB,YAGtB,SAASuwB,EAAQ5X,GACf,GAAoB,kBAAT9hB,KACT,MAAM,IAAI25B,UAAU,wCACtB,GAAkB,oBAAP7X,EACT,MAAM,IAAI6X,UAAU,kBACtB35B,KAAK45B,OAAS,EACd55B,KAAK6zE,UAAW,EAChB7zE,KAAK65B,YAASvW,EACdtjB,KAAK85B,WAAa,GAClBC,EAAUjY,EAAI9hB,MAEhB,SAASs6B,EAAO/yB,EAAMgzB,GACpB,MAAuB,IAAhBhzB,EAAKqyB,OACVryB,EAAOA,EAAKsyB,OAEM,IAAhBtyB,EAAKqyB,QAITryB,EAAKssE,UAAW,EAChBn6C,EAAQo6C,cAAa,WACnB,IAAIt5C,EAAqB,IAAhBjzB,EAAKqyB,OAAeW,EAASE,YAAcF,EAASG,WAC7D,GAAW,OAAPF,EAAJ,CAIA,IAAIlxB,EACJ,IACEA,EAAMkxB,EAAGjzB,EAAKsyB,QACd,MAAO1lB,IAEP,YADA6lB,EAAOO,EAASd,QAAStlB,IAG3BjO,EAAQq0B,EAASd,QAASnwB,QAVP,IAAhB/B,EAAKqyB,OAAe1zB,EAAU8zB,GAAQO,EAASd,QAASlyB,EAAKsyB,YAPhEtyB,EAAKuyB,WAAWhtB,KAAKytB,GAoBzB,SAASr0B,EAAQqB,EAAMozB,GACrB,IACE,GAAIA,IAAapzB,EACf,MAAM,IAAIoyB,UAAU,6CACtB,GAAIgB,IAAiC,kBAAbA,GAA6C,oBAAbA,GAA0B,CAChF,IAAIC,EAAOD,EAASC,KACpB,GAAID,aAAoBjB,EAItB,OAHAnyB,EAAKqyB,OAAS,EACdryB,EAAKsyB,OAASc,OACdE,EAAOtzB,GAEF,GAAoB,oBAATqzB,EAEhB,YADAb,EAAUtW,EAAKmX,EAAMD,GAAWpzB,GAIpCA,EAAKqyB,OAAS,EACdryB,EAAKsyB,OAASc,EACdE,EAAOtzB,GACP,MAAO4M,IACP6lB,EAAOzyB,EAAM4M,KAGjB,SAAS6lB,EAAOzyB,EAAMozB,GACpBpzB,EAAKqyB,OAAS,EACdryB,EAAKsyB,OAASc,EACdE,EAAOtzB,GAET,SAASszB,EAAOtzB,GACM,IAAhBA,EAAKqyB,QAA2C,IAA3BryB,EAAKuyB,WAAW1wB,QACvCswB,EAAQo6C,cAAa,WACdvsE,EAAKssE,UACRn6C,EAAQq6C,sBAAsBxsE,EAAKsyB,WAIzC,IAAK,IAAInwB,EAAI,EAAGgD,EAAMnF,EAAKuyB,WAAW1wB,OAAQM,EAAIgD,EAAKhD,IACrD4wB,EAAO/yB,EAAMA,EAAKuyB,WAAWpwB,IAE/BnC,EAAKuyB,WAAa,KAEpB,SAASiB,EAAQN,EAAaC,EAAYjB,GACxCz5B,KAAKy6B,YAAqC,oBAAhBA,EAA6BA,EAAc,KACrEz6B,KAAK06B,WAAmC,oBAAfA,EAA4BA,EAAa,KAClE16B,KAAKy5B,QAAUA,EAEjB,SAASM,EAAUjY,EAAIva,GACrB,IAAIyzB,GAAO,EACX,IACElZ,GAAG,SAAUpc,GACPs1B,IAEJA,GAAO,EACP90B,EAAQqB,EAAM7B,OACb,SAAUu1B,GACPD,IAEJA,GAAO,EACPhB,EAAOzyB,EAAM0zB,OAEf,MAAOC,GACP,GAAIF,EACF,OACFA,GAAO,EACPhB,EAAOzyB,EAAM2zB,IAGjBxB,EAAQrxB,UAAU,SAAW,SAAUqyB,GACrC,OAAO16B,KAAK46B,KAAK,KAAMF,IAEzBhB,EAAQrxB,UAAUuyB,KAAO,SAAUH,EAAaC,GAC9C,IAAIs5C,EAAO,IAAIh0E,KAAKskB,YAAY1C,GAEhC,OADA0Y,EAAOt6B,KAAM,IAAI+6B,EAAQN,EAAaC,EAAYs5C,IAC3CA,GAETt6C,EAAQvsB,IAAM,SAAU8mE,GACtB,IAAIpnE,EAAOG,MAAM3E,UAAUoE,MAAMlE,KAAK0rE,GACtC,OAAO,IAAIv6C,GAAQ,SAAUxzB,EAAS8zB,GACpC,GAAoB,IAAhBntB,EAAKzD,OACP,OAAOlD,EAAQ,IACjB,IAAIk1B,EAAYvuB,EAAKzD,OACrB,SAASiyB,EAAI3xB,EAAG4xB,GACd,IACE,GAAIA,IAAuB,kBAARA,GAAmC,oBAARA,GAAqB,CACjE,IAAIV,EAAOU,EAAIV,KACf,GAAoB,oBAATA,EAIT,YAHAA,EAAKryB,KAAK+yB,GAAK,SAAUA,GACvBD,EAAI3xB,EAAG4xB,KACNtB,GAIPntB,EAAKnD,GAAK4xB,EACU,MAAdF,GACJl1B,EAAQ2G,GAEV,MAAOquB,GACPlB,EAAOkB,IAGX,IAAK,IAAIxxB,EAAI,EAAGA,EAAImD,EAAKzD,OAAQM,IAC/B2xB,EAAI3xB,EAAGmD,EAAKnD,QAIlBgwB,EAAQxzB,QAAU,SAAUR,GAC1B,OAAIA,GAA0B,kBAAVA,GAAsBA,EAAM4e,cAAgBoV,EACvDh0B,EAEF,IAAIg0B,GAAQ,SAAUxzB,GAC3BA,EAAQR,OAGZg0B,EAAQM,OAAS,SAAUt0B,GACzB,OAAO,IAAIg0B,GAAQ,SAAUxzB,EAAS8zB,GACpCA,EAAOt0B,OAGXg0B,EAAQ6B,KAAO,SAAU1nB,GACvB,OAAO,IAAI6lB,GAAQ,SAAUxzB,EAAS8zB,GACpC,IAAK,IAAItwB,EAAI,EAAGgD,EAAMmH,EAAOzK,OAAQM,EAAIgD,EAAKhD,IAC5CmK,EAAOnK,GAAGkxB,KAAK10B,EAAS8zB,OAI9BN,EAAQo6C,aAAuC,oBAAjB35C,EAA8B,SAAUrY,GACpEqY,EAAarY,IACX,SAAUA,GACZ8xD,EAAe9xD,EAAI,IAErB4X,EAAQq6C,sBAAwB,SAA+B1nB,GACtC,qBAAZsG,SAA2BA,SACpCA,QAAQuhB,KAAK,wCAAyC7nB,IAG1D3yB,EAAQy6C,gBAAkB,SAAyBryD,GACjD4X,EAAQo6C,aAAehyD,GAEzB4X,EAAQ06C,yBAA2B,SAAkCtyD,GACnE4X,EAAQq6C,sBAAwBjyD,GAEZ,qBAAXkmD,GAA0BA,EAAOC,QAC1CD,EAAOC,QAAUvuC,EACPzwB,EAAKywB,UACfzwB,EAAKywB,QAAUA,IA7LnB,CA+LE15B,QACFuI,KAAKvI,KAAM0xE,EAAQ,UAAUv3C,eAEjC,CAAE,OAAU,IAEdha,EAAG,CACD,SAAUuxD,EAAS1J,EAAQC,IACxB,SAAU9tC,EAAck6C,GACvB,IAAIxB,EAAWnB,EAAQ,sBAAsBmB,SACzC3lE,EAAQ67B,SAAS1gC,UAAU6E,MAC3BT,EAAQO,MAAM3E,UAAUoE,MACxB6nE,EAAe,GACfC,EAAkB,EAUtB,SAASC,EAAQ7rE,EAAI8rE,GACnBz0E,KAAK00E,IAAM/rE,EACX3I,KAAK20E,SAAWF,EAXlBxM,EAAQ7tC,WAAa,WACnB,OAAO,IAAIo6C,EAAQtnE,EAAM3E,KAAK6xB,WAAYjzB,OAAQgC,WAAYgwC,eAEhE8uB,EAAQ2M,YAAc,WACpB,OAAO,IAAIJ,EAAQtnE,EAAM3E,KAAKqsE,YAAaztE,OAAQgC,WAAY0rE,gBAEjE5M,EAAQ9uB,aAAe8uB,EAAQ4M,cAAgB,SAAUnC,GACvDA,EAAQ3kE,SAMVymE,EAAQnsE,UAAUysE,MAAQN,EAAQnsE,UAAU0sE,IAAM,aAElDP,EAAQnsE,UAAU0F,MAAQ,WACxB/N,KAAK20E,SAASpsE,KAAKpB,OAAQnH,KAAK00E,MAElCzM,EAAQ+M,OAAS,SAAU50B,EAAM60B,GAC/B97B,aAAaiH,EAAK80B,gBAClB90B,EAAK+0B,aAAeF,GAEtBhN,EAAQmN,SAAW,SAAUh1B,GAC3BjH,aAAaiH,EAAK80B,gBAClB90B,EAAK+0B,cAAgB,GAEvBlN,EAAQoN,aAAepN,EAAQR,OAAS,SAAUrnB,GAChDjH,aAAaiH,EAAK80B,gBAClB,IAAID,EAAQ70B,EAAK+0B,aACbF,GAAS,IACX70B,EAAK80B,eAAiB96C,YAAW,WAC3BgmB,EAAKk1B,YACPl1B,EAAKk1B,eACNL,KAGPhN,EAAQ9tC,aAAuC,oBAAjBA,EAA8BA,EAAe,SAAUrY,GACnF,IAAInZ,EAAK4rE,IACL1nE,IAAO1D,UAAUC,OAAS,IAAYqD,EAAMlE,KAAKY,UAAW,GAYhE,OAXAmrE,EAAa3rE,IAAM,EACnBkqE,GAAS,WACHyB,EAAa3rE,KACXkE,EACFiV,EAAG5U,MAAM,KAAML,GAEfiV,EAAGvZ,KAAK,MAEV0/D,EAAQoM,eAAe1rE,OAGpBA,GAETs/D,EAAQoM,eAA2C,oBAAnBA,EAAgCA,EAAiB,SAAU1rE,UAClF2rE,EAAa3rE,MAEtBJ,KAAKvI,KAAM0xE,EAAQ,UAAUv3C,aAAcu3C,EAAQ,UAAU2C,iBAEjE,CACE,qBAAsB,EACtB,OAAU,IAGdj0D,EAAG,CACD,SAAUsxD,EAAS1J,EAAQC,GACzB,IAAIsN,EAAkB7D,EAAQ,oBAC1B5oC,EAAS,WACX,MAAsB,qBAAX3hC,OACFA,OAEA4hC,SAAS,eAATA,GAJE,GAObi/B,EAAOC,QAAU,CAAEuN,WAAY1sC,EAAOpP,SAAW67C,IAEnD,CAAE,mBAAoB,KAEvB,GAAI,CAAC,GAvdD,CAudK,OA3ehB,MA6eEjyD,EAAWkuD,GAAWsrI,QAAUx5L,GAClC,IAAIoW,GAAUojL,GAAS70I,QAAQuN,WAE3BwnH,GAAO,SAAUvnH,GACnB,IAAIrqE,EAAO+Y,EAAO5B,OACdlV,EAAY,GACZpF,EAAM,SAAUma,GAClB,OAAO46K,IAAK,SAAUtnH,GACpB/vE,GAAI,SAAUyF,GACZsqE,EAAUtzD,EAAEhX,WAIdzF,EAAM,SAAU+vE,GACdC,IACFptE,EAAKmtE,GAELroE,EAAUP,KAAK4oE,IAGf9vE,EAAM,SAAUsW,GAClB9Q,EAAO+Y,EAAOH,KAAK9H,GACnBrR,EAAIwC,GACJA,EAAY,IAEVsoE,EAAU,WACZ,OAAOvqE,EAAK0X,UAEVjY,EAAM,SAAU+qE,GAClB/gE,EAAK+gE,EAAKrtE,IAERA,EAAO,SAAUiyB,GACnBpvB,EAAKyJ,MAAK,SAAUqH,GAClB3W,EAAW60B,YAAW,WACpBI,EAAGte,KACF,OAIP,OADAu5D,EAAO7vE,GACA,CACLD,IAAKA,EACLsC,IAAKA,EACL0tE,QAASA,IAGTE,GAAO,SAAU/0D,GACnB,OAAOk8K,IAAK,SAAUvzL,GACpBA,EAASqX,OAGTg1D,GAAY,CACdl3B,GAAIo+I,GACJnnH,KAAMA,IAGJE,GAAgB,SAAU1pB,GAC5B9mD,EAAW60B,YAAW,WACpB,MAAMiyB,IACL,IAED2pB,GAAO,SAAUnrE,GACnB,IAAIlF,EAAM,SAAU8D,GAClBoB,IAAM+vB,KAAKnxB,EAAUssE,KAEnB9tE,EAAM,SAAUguE,GAClB,OAAOD,IAAK,WACV,OAAOnrE,IAAM+vB,KAAKq7C,OAGlBxyD,EAAO,SAAUyyD,GACnB,OAAOF,IAAK,WACV,OAAOnrE,IAAM+vB,MAAK,SAAU/0B,GAC1B,OAAOqwE,EAASrwE,GAAGswE,mBAIrBC,EAAW,SAAUC,GACvB,OAAOL,IAAK,WACV,OAAOnrE,IAAM+vB,MAAK,WAChB,OAAOy7C,EAAQF,mBAIjBG,EAAS,WACX,OAAOR,GAAUl3B,GAAGj5C,IAElB4wE,EAAW,WACb,IAAIC,EAAQ,KACZ,OAAOR,IAAK,WAIV,OAHc,OAAVQ,IACFA,EAAQ3rE,KAEH2rE,MAGPL,EAAYtrE,EAChB,MAAO,CACL5C,IAAKA,EACLwb,KAAMA,EACN2yD,SAAUA,EACVE,OAAQA,EACRC,SAAUA,EACVJ,UAAWA,EACXxwE,IAAKA,IAGLo3M,GAAO,SAAUtnI,GACnB,OAAOO,IAAK,WACV,OAAO,IAAIt8C,GAAQ+7C,OAGnBgB,GAAS,SAAU31D,GACrB,OAAOk1D,IAAK,WACV,OAAOt8C,GAAQxzB,QAAQ4a,OAGvB41D,GAAS,CACX93B,GAAIm+J,GACJlnI,KAAMY,IAGJE,GAAM,SAAUC,EAAah4B,GAC/B,OAAOA,GAAG,SAAUn1C,GAClB,IAAIsb,EAAI,GACJ5I,EAAQ,EACRqe,EAAK,SAAU9wB,GACjB,OAAO,SAAUhE,GACfqf,EAAErb,GAAKhE,EACPyW,IACIA,GAASy6D,EAAYxtE,QACvBK,EAASsb,KAIY,IAAvB6xD,EAAYxtE,OACdK,EAAS,IAEToL,EAAK+hE,GAAa,SAAUC,EAAYntE,GACtCmtE,EAAWlxE,IAAI60B,EAAG9wB,WAMtBotE,GAAQ,SAAUC,GACpB,OAAOJ,GAAII,EAASL,GAAO93B,KAGzBl5C,GAAQ,SAAUyC,GACpB,IAAInE,EAAK,SAAU6B,GACjB,OAAOsC,IAAMtC,GAEX0d,EAAK,SAAU2qI,GACjB,OAAOxoJ,GAAMyC,IAEXqb,EAAU,SAAUpB,GACtB,OAAO1c,GAAMyC,IAEXF,EAAM,SAAUma,GAClB,OAAO1c,GAAM0c,EAAEja,KAEbypK,EAAW,SAAUxvJ,GACvB,OAAO1c,GAAMyC,IAEX0M,EAAO,SAAUuN,GACnBA,EAAEja,IAEAsb,EAAO,SAAUrB,GACnB,OAAOA,EAAEja,IAEP0a,EAAO,SAAUnb,EAAGmqK,GACtB,OAAOA,EAAQ1pK,IAEbub,EAAS,SAAUtB,GACrB,OAAOA,EAAEja,IAEPwb,EAAS,SAAUvB,GACrB,OAAOA,EAAEja,IAEP2pK,EAAW,WACb,OAAO3tJ,EAAOH,KAAK7b,IAErB,MAAO,CACLnE,GAAIA,EACJyxC,QAASnzB,EACTyvJ,QAAS1vJ,EACTU,MAAOjS,EAAS3I,GAChB6a,WAAYlS,EAAS3I,GACrB8a,SAAUnS,EAAS3I,GACnBob,GAAIA,EACJC,QAASA,EACTX,KAAMA,EACN5a,IAAKA,EACL2pK,SAAUA,EACV/8J,KAAMA,EACN4O,KAAMA,EACNC,OAAQA,EACRC,OAAQA,EACRmuJ,SAAUA,IAGVz1I,GAAQ,SAAUxuB,GACpB,IAAImV,EAAa,SAAUZ,GACzB,OAAOA,KAELa,EAAW,WACb,OAAO6pI,EAAIvoI,OAAO1W,GAAXi/I,IAELvpI,EAAK,SAAU2qI,GACjB,OAAOA,GAEL1qI,EAAU,SAAUpB,GACtB,OAAOA,KAELna,EAAM,SAAUma,GAClB,OAAOia,GAAMxuB,IAEX+jK,EAAW,SAAUxvJ,GACvB,OAAOia,GAAMja,EAAEvU,KAEb4V,EAAO,SAAUrB,GACnB,OAAOia,GAAMxuB,IAEXgV,EAAO,SAAUmvJ,EAAStqK,GAC5B,OAAOsqK,EAAQnkK,IAEjB,MAAO,CACL7J,GAAIqe,EACJozB,QAASpzB,EACT0vJ,QAASzvJ,EACTS,MAAOkd,EACPjd,WAAYA,EACZC,SAAUA,EACVM,GAAIA,EACJC,QAASA,EACTX,KAAMA,EACN5a,IAAKA,EACL2pK,SAAUA,EACV/8J,KAAM+M,EACN6B,KAAMA,EACNC,OAAQrB,EACRsB,OAAQrB,EACRwvJ,SAAU3tJ,EAAO5B,OAGjB0vJ,GAAa,SAAU/jB,EAAK7hG,GAC9B,OAAO6hG,EAAIrrI,MAAK,WACd,OAAOwZ,GAAMgwB,KACZ3mD,KAEDwsK,GAAS,CACXxsK,MAAOA,GACP22B,MAAOA,GACP41I,WAAYA,IAGd,SAAS+qC,GAAiBjzM,EAAUzD,QACjB,IAAbA,IACFA,EAAW,IAEb,IAEI22M,EAFAC,EAAU,EACVC,EAAe,GAEnBF,EAAc32M,EAAS22M,aAAe,IACtC,IAAIG,EAAe,SAAUzrM,GAC3B5H,EAASsM,qBAAqB,QAAQ,GAAGC,YAAY3E,IAEnD6rH,EAAO,SAAUjuH,EAAK8tM,EAAgB/2H,GACxC,IAAI57D,EAAM7a,EAAOytM,EAAWrzK,EACxBszK,EAAS,WACX,IAAIlwM,EAAY48B,EAAMszK,OAClB7zM,EAAI2D,EAAUjE,OAClB,MAAOM,IACL2D,EAAU3D,KAEZugC,EAAMtN,OAAS,EACfsN,EAAMszK,OAAS,GACftzK,EAAMuzK,OAAS,IAEbA,EAAS,WACX,IAAInwM,EAAY48B,EAAMuzK,OAClB9zM,EAAI2D,EAAUjE,OAClB,MAAOM,IACL2D,EAAU3D,KAEZugC,EAAMtN,OAAS,EACfsN,EAAMszK,OAAS,GACftzK,EAAMuzK,OAAS,IAEbC,EAAc,WAChB,IAAIC,EAAen4M,EAAW0zD,UAAU3B,UAAUxyD,MAAM,iBACxD,SAAU44M,GAAgB34M,SAAS24M,EAAa,GAAI,IAAM,MAExDC,EAAO,SAAUC,EAAcC,GAC5BD,OACC,IAAIlmM,MAAOC,UAAY2lM,EAAYL,EACrChT,GAAM7vK,WAAWyjL,GAEjBL,MAIFM,EAA0B,WAC5BH,GAAK,WACH,IACIvwL,EAAoCqiI,EADpCr9B,EAAcroH,EAASqoH,YACX1oH,EAAI0oH,EAAYhpH,OAChC,MAAOM,IAGL,GAFA0jB,EAAaglG,EAAY1oH,GACzB+lJ,EAAQriI,EAAW2wL,UAAY3wL,EAAW2wL,UAAY3wL,EAAW4wL,cAC7DvuD,GAASA,EAAM9mJ,KAAO+hB,EAAK/hB,GAE7B,OADA40M,KACO,IAGVO,IAEDG,EAAyB,WAC3BN,GAAK,WACH,IACE,IAAI1rF,EAAWpiH,EAAMquM,MAAMjsF,SAE3B,OADAsrF,MACStrF,EACT,MAAO/2F,OAER+iL,IAkBL,GAhBA1uM,EAAMtJ,GAAMqyM,gBAAgB/oM,GACvB4tM,EAAa5tM,GAOhB06B,EAAQkzK,EAAa5tM,IANrB06B,EAAQ,CACNszK,OAAQ,GACRC,OAAQ,IAEVL,EAAa5tM,GAAO06B,GAIlBozK,GACFpzK,EAAMszK,OAAOzwM,KAAKuwM,GAEhB/2H,GACFr8C,EAAMuzK,OAAO1wM,KAAKw5E,GAEC,IAAjBr8C,EAAMtN,OAGV,GAAqB,IAAjBsN,EAAMtN,OAIV,GAAqB,IAAjBsN,EAAMtN,OAAV,CAeA,GAXAsN,EAAMtN,OAAS,EACfjS,EAAO3gB,EAAS8uB,cAAc,QAC9BnO,EAAKvU,IAAM,aACXuU,EAAK5iB,KAAO,WACZ4iB,EAAK/hB,GAAK,IAAMu0M,IAChBxyL,EAAK7gB,OAAQ,EACb6gB,EAAKyzL,OAAQ,EACbb,GAAY,IAAI5lM,MAAOC,UACnBrR,EAAS83M,iBACX1zL,EAAK2zL,YAAc,aAEjB,WAAY3zL,IAAS+yL,IACvB/yL,EAAKgS,OAASohL,EACdpzL,EAAKmS,QAAU2gL,MACV,CACL,GAAIj4M,EAAW0zD,UAAU3B,UAAUppD,QAAQ,WAAa,EAKtD,OAJA2B,EAAQ9F,EAAS8uB,cAAc,SAC/BhpB,EAAMnF,YAAc,YAAc6E,EAAM,IACxC0uM,SACAb,EAAavtM,GAGfiuM,IAEFV,EAAa1yL,GACbA,EAAKtU,KAAO7G,OA5BViuM,SAJAD,KAkCAe,EAAQ,SAAU/uM,GACpB,OAAOmnE,GAAO93B,IAAG,SAAU14C,GACzBs3H,EAAKjuH,EAAKq9I,EAAQ1mJ,EAAS4K,EAASohK,GAAOxsK,MAAM6J,KAAQq9I,EAAQ1mJ,EAAS4K,EAASohK,GAAO71I,MAAM9sB,UAGhGgvM,EAAQ,SAAUx6M,GACpB,OAAOA,EAAO8e,KAAKod,EAAUA,IAE3Bu+K,EAAU,SAAUt4L,EAAM42B,EAASiO,GACrC+rB,GAAM7uE,EAAIie,EAAMo4L,IAAQ34M,KAAI,SAAU5B,GACpC,IAAIklC,EAAQm/J,EAAUrkM,GAAQ,SAAUghB,GACtC,OAAOA,EAAE0wB,aAEPxM,EAAMq/J,KAAKl/L,OAAS,EACtB2hD,EAAQ9hB,EAAMq/J,KAAKrgM,IAAIs2M,IAEvBzhK,EAAQ7T,EAAMo/J,KAAKpgM,IAAIs2M,QAI7B,MAAO,CACL/gF,KAAMA,EACNghF,QAASA,GAIb,SAASC,GAAYp8I,EAAWqN,GAC9B,IAAI/9D,EAAO0wD,EACPq8I,EAAc,SAAU/sM,EAAMgtM,EAAWnE,EAAan2J,GACxD,IAAI8e,EAAS/4D,EACb,GAAIuH,EAAM,CACR,IAAK0yC,GAAW1yC,EAAKgtM,GACnB,OAAOhtM,EAAKgtM,GAEd,GAAIhtM,IAAS+9D,EAAU,CAErB,GADAvM,EAAUxxD,EAAK6oM,GACXr3I,EACF,OAAOA,EAET,IAAK/4D,EAASuH,EAAKpH,WAAYH,GAAUA,IAAWslE,EAAUtlE,EAASA,EAAOG,WAE5E,GADA44D,EAAU/4D,EAAOowM,GACbr3I,EACF,OAAOA,KAMby7I,EAAmB,SAAUjtM,EAAMgtM,EAAWnE,EAAan2J,GAC7D,IAAI8e,EAAS/4D,EAAQywD,EACrB,GAAIlpD,EAAM,CAER,GADAwxD,EAAUxxD,EAAK6oM,GACX9qI,GAAYvM,IAAYuM,EAC1B,OAEF,GAAIvM,EAAS,CACX,IAAK9e,EACH,IAAKwW,EAAQsI,EAAQw7I,GAAY9jJ,EAAOA,EAAQA,EAAM8jJ,GACpD,IAAK9jJ,EAAM8jJ,GACT,OAAO9jJ,EAIb,OAAOsI,EAGT,GADA/4D,EAASuH,EAAKpH,WACVH,GAAUA,IAAWslE,EACvB,OAAOtlE,IAIbpK,KAAKs1D,QAAU,WACb,OAAO3jD,GAET3R,KAAKgzB,KAAO,SAAUqxB,GAEpB,OADA1yC,EAAO+sM,EAAY/sM,EAAM,aAAc,cAAe0yC,GAC/C1yC,GAET3R,KAAKuiI,KAAO,SAAUl+E,GAEpB,OADA1yC,EAAO+sM,EAAY/sM,EAAM,YAAa,kBAAmB0yC,GAClD1yC,GAET3R,KAAK6+M,MAAQ,SAAUx6J,GAErB,OADA1yC,EAAOitM,EAAiBjtM,EAAM,YAAa,kBAAmB0yC,GACvD1yC,GAIX,IAwSImtM,GAAeC,GAAcC,GAxS7B1yI,GAAS,CACX,UACA,QACA,UACA,MACA,KACA,aACA,SACA,OACA,WACA,SACA,SACA,OACA,OACA,MACA,UACA,UACA,OACA,IACA,KACA,WACA,KACA,SACA,UACA,SACA,aACA,KACA,KACA,KACA,KACA,KACA,KACA,UACA,MACA,MACA,YACA,OACA,MACA,KACA,KACA,KACA,KACA,QACA,QACA,QACA,QACA,KACA,KACA,KACA,WAEE2yI,GAAQ,CACV,OACA,OACA,WACA,KACA,MACA,QACA,KACA,MACA,QACA,UACA,OACA,OACA,QACA,QACA,SACA,MACA,SAEEC,GAAa,CACf,KACA,MAEEC,GAAgB,CAClB,QACA,QACA,SAEE/8I,GAAa,CACf,KACA,KACA,KACA,KACA,KACA,KACA,IACA,MACA,UACA,MACA,OACA,aACA,SACA,MACA,WACA,SACA,SACA,UACA,UACA,SACA,QACA,MACA,UAEEg9I,GAAW,CACb,KACA,KACA,KACA,KACA,KACA,MAEE54F,GAAY,CACd,KACA,KACA,MAEEn0D,GAAQ,CACV,KACA,KACA,MAEEgtJ,GAAa,CACf,MACA,SACA,WACA,SAEEC,GAAa,SAAU35L,GACzB,IAAIuf,EACJ,OAAO,SAAUvzB,GAEf,OADAuzB,EAASA,GAAkBwjK,GAAY/iL,EAAO7U,GAAS,IAChDo0B,EAAO18B,eAAelE,GAAKqN,MAGlCsqK,GAAYqjC,GAAWF,IACvB7wJ,GAAU+wJ,GAAWhzI,IACrB8vG,GAAW,SAAUzqK,GACvB,OAAOwpD,GAAUxpD,KAAU48C,GAAQ58C,IAEjCu8C,GAAO,SAAUv8C,GACnB,OAAOwpD,GAAUxpD,IAAwB,OAAfrN,GAAKqN,IAE7B28C,GAAcgxJ,GAAWl9I,IACzB5P,GAAS8sJ,GAAWjtJ,IACpB4qH,GAAaqiC,GAAW94F,IACxB+4F,GAASD,GAAWL,IACpBO,GAAiBF,GAAWH,IAC5BM,GAAcH,GAAWJ,IACzBQ,GAAsBJ,GAAWD,IAEjCM,GAAa,SAAU73M,GACzB,OAAO,SAAU6J,GACf,QAASA,GAAQA,EAAKye,WAAatoB,IAGnC83M,GAAmB,SAAUjuM,GAC/B,QAASA,IAASvJ,OAAOy9F,eAAel0F,IAEtCkuM,GAAcF,GAAW,GACzBG,GAAiB,SAAU7yG,GAC7B,IAAItnF,EAAQsnF,EAAM1iF,cAAclqB,MAAM,KACtC,OAAO,SAAUsR,GACf,IAAIjI,EAAGpF,EACP,GAAIqN,GAAQA,EAAKye,SAEf,IADA9rB,EAAOqN,EAAKnH,SAAS+f,cAChB7gB,EAAI,EAAGA,EAAIic,EAAMvc,OAAQM,IAC5B,GAAIpF,IAASqhB,EAAMjc,GACjB,OAAO,EAIb,OAAO,IAGPq2M,GAAmB,SAAUz7M,EAAMuP,GACrC,IAAI8R,EAAQ9R,EAAO0W,cAAclqB,MAAM,KACvC,OAAO,SAAUsR,GACf,IAAIjI,EAAGs2M,EACP,GAAIH,GAAYluM,GACd,IAAKjI,EAAI,EAAGA,EAAIic,EAAMvc,OAAQM,IAAK,CACjC,IAAImxG,EAAWlpG,EAAK46B,cAAcmjH,YAAYb,iBAAiBl9I,EAAM,MAErE,GADAquM,EAAWnlG,EAAWA,EAASt/C,iBAAiBj3D,GAAQ,KACpD07M,IAAar6L,EAAMjc,GACrB,OAAO,EAIb,OAAO,IAGPu2M,GAAe,SAAUC,EAAUC,GACrC,OAAO,SAAUxuM,GACf,OAAOkuM,GAAYluM,IAASA,EAAKuuM,KAAcC,IAG/C96J,GAAe,SAAUo0E,EAAU3zE,GACrC,OAAO,SAAUn0C,GACf,OAAOkuM,GAAYluM,IAASA,EAAK0zC,aAAao0E,KAG9C2mF,GAAoB,SAAU3mF,EAAU3zE,GAC1C,OAAO,SAAUn0C,GACf,OAAOkuM,GAAYluM,IAASA,EAAKkM,aAAa47G,KAAc3zE,IAG5Du6J,GAAU,SAAU1uM,GACtB,OAAOkuM,GAAYluM,IAASA,EAAK0zC,aAAa,mBAE5Ci7J,GAAa,SAAU3uM,GACzB,OAAOkuM,GAAYluM,IAAiD,QAAxCA,EAAKkM,aAAa,mBAE5CyyK,GAAU,SAAU3+K,GACtB,OAAOkuM,GAAYluM,IAA0B,UAAjBA,EAAKyF,SAE/BmpM,GAA0B,SAAU76M,GACtC,OAAO,SAAUiM,GACf,GAAIkuM,GAAYluM,GAAO,CACrB,GAAIA,EAAK0D,kBAAoB3P,EAC3B,OAAO,EAET,GAAIiM,EAAKkM,aAAa,8BAAgCnY,EACpD,OAAO,EAGX,OAAO,IAGP86M,GAAWb,GAAW,GACtBrxD,GAAYqxD,GAAW,GACvBc,GAAad,GAAW,GACxBe,GAAqBf,GAAW,IAChCgB,GAASb,GAAe,MACxBxxB,GAAwBiyB,GAAwB,QAChD58H,GAAyB48H,GAAwB,SACjDzxJ,GAAW,CACb/9B,OAAQyvL,GACRrlJ,UAAW0kJ,GACXvxD,UAAWA,GACXmyD,WAAYA,GACZC,mBAAoBA,GACpBxyJ,KAAMyyJ,GACNryB,sBAAuBA,GACvB3qG,uBAAwBA,GACxBi8H,iBAAkBA,GAClBE,eAAgBA,GAChBG,aAAcA,GACd56J,aAAcA,GACd+6J,kBAAmBA,GACnBL,iBAAkBA,GAClBM,QAASA,GACTC,WAAYA,GACZhwB,QAASA,IAGPswB,GAAoB,SAAUjvM,GAChC,IAAIkvM,EAAiBlvM,EAAK+8C,iBAAqD,SAAlC/8C,EAAK+8C,gBAAgBlkD,SAC9Ds2M,EAAanvM,EAAKqgB,aAA6C,SAA9BrgB,EAAKqgB,YAAYxnB,SACtD,OAAOq2M,GAAkBC,GAEvBt+I,GAAiB,SAAU7wD,GAC7B,OAAOA,GAAyB,SAAjBA,EAAKyF,SAA6D,aAAvCzF,EAAKkM,aAAa,kBAE1DkjM,GAAW,SAAU9uM,EAAKN,GAC5B,IAAIjI,EAAG8P,EAAW7H,EAAKgM,WACvB,IAAImxC,GAASqM,UAAUxpD,KAAS6wD,GAAe7wD,GAA/C,CAGA,IAAKjI,EAAI8P,EAASpQ,OAAS,EAAGM,GAAK,EAAGA,IACpCq3M,GAAS9uM,EAAKuH,EAAS9P,IAEzB,IAAkC,IAA9BolD,GAAS2xJ,WAAW9uM,GAAiB,CACvC,GAAIm9C,GAAS/9B,OAAOpf,IAASA,EAAKgxH,UAAUv5H,OAAS,EAAG,CACtD,IAAI43M,EAAgB/6M,GAAMgP,KAAKtD,EAAKgxH,WAAWv5H,OAC/C,GAAI6I,EAAIs8C,QAAQ58C,EAAKpH,aAAey2M,EAAgB,EAClD,OAEF,GAAsB,IAAlBA,GAAuBJ,GAAkBjvM,GAC3C,YAEG,GAAIm9C,GAASqM,UAAUxpD,KAC5B6H,EAAW7H,EAAKgM,WACQ,IAApBnE,EAASpQ,QAAgBo5D,GAAehpD,EAAS,KACnD7H,EAAKpH,WAAW1B,aAAa2Q,EAAS,GAAI7H,GAExC6H,EAASpQ,QAAUm2M,GAAOrsJ,GAAQN,QAAQjhD,KAC5C,OAGJM,EAAI+I,OAAOrJ,GAEb,OAAOA,IAELsvM,GAAW,CAAEF,SAAUA,IAEvBG,GAAYj7M,GAAMinE,QAElBi0I,GAAmB,0EACnBC,GAAkB,kEAClBC,GAAiB,aACjBC,GAAe,kCACfC,GAAW,CACbC,IAAK,IACLC,IAAK,IACLC,IAAK,IACLC,IAAK,IACLC,IAAK,IACLC,IAAK,IACLC,IAAK,IACLC,IAAK,IACLC,IAAK,IACLC,IAAK,IACLC,IAAK,IACLC,IAAK,IACLC,IAAK,IACLC,IAAK,IACLC,IAAK,IACLC,IAAK,IACLC,IAAK,IACLC,IAAK,IACLC,IAAK,IACLC,IAAK,IACLC,IAAK,IACLC,IAAK,IACLC,IAAK,IACLC,IAAK,IACLC,IAAK,IACLC,IAAK,IACLC,IAAK,KAEPnE,GAAe,CACb,IAAK,SACLoE,IAAM,QACN,IAAK,OACL,IAAK,OACL,IAAK,QACL,IAAK,SAEPnE,GAAkB,CAChB,OAAQ,IACR,OAAQ,IACR,QAAS,IACT,SAAU,IACV,SAAU,KAEZ,IAAIoE,GAAe,SAAUz3M,GAC3B,IAAIsC,EAGJ,OAFAA,EAAMilD,GAAQL,QAAQ,OAAO5gD,MAC7BhE,EAAI5C,UAAYM,EACTsC,EAAIvD,aAAeuD,EAAI4+D,WAAalhE,GAEzC03M,GAAsB,SAAU19L,EAAOyoF,GACzC,IAAI1kG,EAAGkrB,EAAK9lB,EACRo2B,EAAS,GACb,GAAIvf,EAAO,CAGT,IAFAA,EAAQA,EAAMtlB,MAAM,KACpB+tG,EAAQA,GAAS,GACZ1kG,EAAI,EAAGA,EAAIic,EAAMvc,OAAQM,GAAK,EACjCkrB,EAAMrQ,OAAOssE,aAAa9rF,SAAS4gB,EAAMjc,GAAI0kG,IACxC2wG,GAAanqL,KAChB9lB,EAAS,IAAM6W,EAAMjc,EAAI,GAAK,IAC9Bw7B,EAAOtQ,GAAO9lB,EACdo2B,EAAOp2B,GAAU8lB,GAGrB,OAAOsQ,IAGX45K,GAAgBuE,GAAoB,+rEAAwzE,IAC51E,IAAIC,GAAY,SAAU33M,EAAMqJ,GAC9B,OAAOrJ,EAAKzD,QAAQ8M,EAAOmsM,GAAmBC,IAAiB,SAAUxsL,GACvE,OAAOmqL,GAAanqL,IAAQA,MAG5Bw3C,GAAe,SAAUzgE,GAC3B,OAAQ,GAAKA,GAAMzD,QAAQm5M,IAAgB,SAAUzsL,GACnD,OAAOmqL,GAAanqL,IAAQA,MAG5B2uL,GAAgB,SAAU53M,EAAMqJ,GAClC,OAAOrJ,EAAKzD,QAAQ8M,EAAOmsM,GAAmBC,IAAiB,SAAUxsL,GACvE,OAAIA,EAAIxrB,OAAS,EACR,MAAsC,MAA7BwrB,EAAIC,WAAW,GAAK,QAAiBD,EAAIC,WAAW,GAAK,OAAS,OAAS,IAEtFkqL,GAAanqL,IAAQ,KAAOA,EAAIC,WAAW,GAAK,QAGvD2uL,GAAc,SAAU73M,EAAMqJ,EAAMyuM,GAEtC,OADAA,EAAWA,GAAY3E,GAChBnzM,EAAKzD,QAAQ8M,EAAOmsM,GAAmBC,IAAiB,SAAUxsL,GACvE,OAAOmqL,GAAanqL,IAAQ6uL,EAAS7uL,IAAQA,MAG7C8uL,GAAgB,SAAUp/M,EAAMm/M,GAClC,IAAIE,EAAcN,GAAoBI,IAAa3E,GAC/C8E,EAAwB,SAAUj4M,EAAMqJ,GAC1C,OAAOrJ,EAAKzD,QAAQ8M,EAAOmsM,GAAmBC,IAAiB,SAAUxsL,GACvE,YAA0BtR,IAAtBy7L,GAAanqL,GACRmqL,GAAanqL,QAEGtR,IAArBqgM,EAAY/uL,GACP+uL,EAAY/uL,GAEjBA,EAAIxrB,OAAS,EACR,MAAsC,MAA7BwrB,EAAIC,WAAW,GAAK,QAAiBD,EAAIC,WAAW,GAAK,OAAS,OAAS,IAEtF,KAAOD,EAAIC,WAAW,GAAK,QAGlCgvL,EAAoB,SAAUl4M,EAAMqJ,GACtC,OAAOwuM,GAAY73M,EAAMqJ,EAAM2uM,IAE7BG,EAAU5C,GAAU58M,EAAK4D,QAAQ,MAAO,MAC5C,OAAI47M,EAAQC,OAASD,EAAQE,QACpBJ,EAELE,EAAQC,MACNN,EACKI,EAEFL,GAELM,EAAQE,QACHT,GAEFD,IAEL5kI,GAAS,SAAU/yE,GACrB,OAAOA,EAAKzD,QAAQo5M,IAAc,SAAUn0M,EAAK62M,GAC/C,OAAIA,GAEAA,EADsC,MAApCA,EAAQ/jI,OAAO,GAAG11D,cACVxlB,SAASi/M,EAAQr0L,OAAO,GAAI,IAE5B5qB,SAASi/M,EAAS,IAE1BA,EAAU,OACZA,GAAW,MACJz/L,OAAOssE,aAAa,OAASmzH,GAAW,IAAK,OAAmB,KAAVA,KAExDzC,GAASyC,IAAYz/L,OAAOssE,aAAamzH,IAE3ChF,GAAgB7xM,IAAQ2xM,GAAc3xM,IAAQi2M,GAAaj2M,OAGlE82M,GAAW,CACbX,UAAWA,GACXl3I,aAAcA,GACdm3I,cAAeA,GACfC,YAAaA,GACbE,cAAeA,GACfhlI,OAAQA,IAGNwlI,GAAW,GAAIC,GAAW,GAC1BC,GAAYn+M,GAAMinE,QAASk4H,GAASn/L,GAAM4O,KAAMwvM,GAAWp+M,GAAMyC,OAAQ47M,GAAYr+M,GAAMoyM,QAASkM,GAAYt+M,GAAMqyC,QACtHj4C,GAAQ,SAAUslB,EAAOiyL,GAE3B,OADAjyL,EAAQ1f,GAAMgP,KAAK0Q,GACZA,EAAQA,EAAMtlB,MAAMu3M,GAAS,KAAO,IAEzC4M,GAAgB,SAAU18M,GAC5B,IACI28M,EAAkBC,EAClBC,EAAiBC,EAAaC,EAAmBC,EAFjDp9J,EAAS,GAGTt6C,EAAM,SAAU9I,EAAMmJ,EAAY+L,GACpC,IAAIurM,EAAIx1I,EAAiBtlE,EACrB+6M,EAAa,SAAUpyI,EAAO7sD,GAChC,IACIrc,EAAG1E,EADHiD,EAAM,GAEV,IAAKyB,EAAI,EAAG1E,EAAI4tE,EAAMxpE,OAAQM,EAAI1E,EAAG0E,IACnCzB,EAAI2qE,EAAMlpE,IAAMqc,GAAO,GAEzB,OAAO9d,GAETuR,EAAWA,GAAY,GACvB/L,EAAaA,GAAc,GACH,kBAAb+L,IACTA,EAAWnZ,GAAMmZ,IAEnBlV,EAAOjE,GAAMiE,GACbygN,EAAKzgN,EAAK8E,OACV,MAAO27M,IACLx1I,EAAkBlvE,GAAM,CACtBokN,EACAh3M,GACAH,KAAK,MACPrD,EAAU,CACRwD,WAAYu3M,EAAWz1I,GACvBA,gBAAiBA,EACjB/1D,SAAUwrM,EAAWxrM,EAAU2qM,KAEjCz8J,EAAOpjD,EAAKygN,IAAO96M,GAGnBg7M,EAAW,SAAU3gN,EAAMmJ,GAC7B,IAAIs3M,EAAIG,EAAYx7M,EAAG1E,EACvBV,EAAOjE,GAAMiE,GACbygN,EAAKzgN,EAAK8E,OACVqE,EAAapN,GAAMoN,GACnB,MAAOs3M,IAEL,IADAG,EAAax9J,EAAOpjD,EAAKygN,IACpBr7M,EAAI,EAAG1E,EAAIyI,EAAWrE,OAAQM,EAAI1E,EAAG0E,IACxCw7M,EAAWz3M,WAAWA,EAAW/D,IAAM,GACvCw7M,EAAW31I,gBAAgBziE,KAAKW,EAAW/D,KAIjD,OAAIw6M,GAASp8M,GACJo8M,GAASp8M,IAElB28M,EAAmB,wDACnBC,EAAe,sFACfC,EAAkB,wLACL,UAAT78M,IACF28M,GAAoB,8EACpBC,GAAgB,6EAChBC,GAAmB,oGAER,iBAAT78M,IACF28M,GAAoB,YACpBK,EAAuB,6CACvBH,EAAkB,CAChBA,EACAG,GACAx3M,KAAK,KACP83L,GAAO/kM,GAAMykN,IAAuB,SAAUxgN,GAC5C8I,EAAI9I,EAAM,GAAIqgN,MAEhBE,EAAoB,8BACpBH,EAAe,CACbA,EACAG,GACAv3M,KAAK,KACPs3M,EAAc,CACZF,EACAC,GACAr3M,KAAK,KACP83L,GAAO/kM,GAAMwkN,IAAoB,SAAUvgN,GACzC8I,EAAI9I,EAAM,GAAIsgN,OAGlBA,EAAcA,GAAe,CAC3BF,EACAC,GACAr3M,KAAK,KACPF,EAAI,OAAQ,WAAY,aACxBA,EAAI,OAAQ,GAAI,sDAChBA,EAAI,wBACJA,EAAI,OAAQ,eACZA,EAAI,OAAQ,+CACZA,EAAI,OAAQ,mCACZA,EAAI,QAAS,qBACbA,EAAI,SAAU,gCACdA,EAAI,OAAQ,0LAAqMw3M,GACjNx3M,EAAI,4BAA6B,GAAIw3M,GACrCx3M,EAAI,0GAA2G,GAAIu3M,GACnHv3M,EAAI,aAAc,OAAQw3M,GAC1Bx3M,EAAI,KAAM,sBAAuB,MACjCA,EAAI,KAAM,GAAI,MACdA,EAAI,KAAM,QAASw3M,GACnBx3M,EAAI,KAAM,GAAI,SACdA,EAAI,IAAK,sCAAuCu3M,GAChDv3M,EAAI,IAAK,OAAQu3M,GACjBv3M,EAAI,UAAW,gBAAiBw3M,GAChCx3M,EAAI,MAAO,kDACXA,EAAI,SAAU,wBAAyBw3M,GACvCx3M,EAAI,QAAS,yBACbA,EAAI,SAAU,wDAAyD,CACrEw3M,EACA,SACAt3M,KAAK,MACPF,EAAI,QAAS,cACbA,EAAI,MAAO,OAAQ,CACjBw3M,EACA,QACAt3M,KAAK,MACPF,EAAI,OAAQ,wDACZA,EAAI,QAAS,SAAU,yCAAoD,UAATtF,EAAmB,OAAS,KAC9FsF,EAAI,WAAY,OAAQ,OACxBA,EAAI,MAAO,QACXA,EAAI,oBAAqB,GAAI,MAC7BA,EAAI,KAAM,GAAI,SACdA,EAAI,KAAM,0BAA2Bw3M,GACrCx3M,EAAI,KAAM,qCAAsCw3M,GAChDx3M,EAAI,OAAQ,2EAA4Ew3M,GACxFx3M,EAAI,WAAY,qBAAsB,CACpCw3M,EACA,UACAt3M,KAAK,MACPF,EAAI,QAAS,WAAYu3M,GACzBv3M,EAAI,QAAS,0NACbA,EAAI,SAAU,4FAAsG,UAATtF,EAAmB88M,EAAcD,GAC5Iv3M,EAAI,SAAU,4CAA6C,mBAC3DA,EAAI,WAAY,iBAAkB,UAClCA,EAAI,SAAU,iCACdA,EAAI,WAAY,yEAChBA,EAAI,OAAQ,aAAc,CACxBw3M,EACA,MACAt3M,KAAK,MACPF,EAAI,WAAY,GAAIw3M,GACP,UAAT98M,IACFsF,EAAI,OACJA,EAAI,OAAQ,GAAI,CACdu3M,EACA,SACAr3M,KAAK,MACPF,EAAI,aAAc,GAAIw3M,GACtBx3M,EAAI,yBAA0B,GAAIu3M,GAClCv3M,EAAI,SAAU,eAAgBw3M,GAC9Bx3M,EAAI,QAAS,+FAAqG,CAChHw3M,EACA,gBACAt3M,KAAK,MACPF,EAAI,QAAS,kFAAwF,CACnGw3M,EACA,gBACAt3M,KAAK,MACPF,EAAI,UAAW,GAAI,cACnBA,EAAI,SAAU,+BACdA,EAAI,QAAS,kCACbA,EAAI,WAAY,GAAI,CAClBu3M,EACA,UACAr3M,KAAK,MACPF,EAAI,+CAAgD,GAAIw3M,GACxDx3M,EAAI,SAAU,GAAI,qBAClBA,EAAI,SAAU,GAAI,CAChBw3M,EACA,cACAt3M,KAAK,MACPF,EAAI,OAAQ,WAAYu3M,GACxBv3M,EAAI,SAAU,OAAQw3M,GACtBx3M,EAAI,UAAW,uDACfA,EAAI,SAAU,gBAAiBu3M,GAC/Bv3M,EAAI,WAAY,YAAau3M,GAC7Bv3M,EAAI,QAAS,iCAAkCu3M,GAC/Cv3M,EAAI,UAAW,OAAQ,CACrBw3M,EACA,WACAt3M,KAAK,MACPF,EAAI,SAAU,mDAEH,iBAATtF,IACFm9M,EAAS,SAAU,sBACnBA,EAAS,QAAS,aAClBA,EAAS,SAAU,qFACnBA,EAAS,QAAS,4BAClBA,EAAS,QAAS,kBAClBA,EAAS,IAAK,iCACdA,EAAS,KAAM,SACfA,EAAS,SAAU,0EACnBA,EAAS,MAAO,4CAChBA,EAAS,SAAU,iEACnBA,EAAS,gBAAiB,mBAC1BA,EAAS,QAAS,gBAClBA,EAAS,SAAU,YACnBA,EAAS,YACTA,EAAS,yCAA0C,SACnDA,EAAS,KAAM,gBACfA,EAAS,KAAM,QACfA,EAAS,iBAAkB,WAC3BA,EAAS,MAAO,mBAChBA,EAAS,KAAM,4BACfA,EAAS,UAAW,UACpBA,EAAS,QAAS,mEAClBA,EAAS,MAAO,mCAChBA,EAAS,WAAY,mCACrBA,EAAS,QAAS,6BAClBA,EAAS,KAAM,qCACfA,EAAS,KAAM,8DACfA,EAAS,OAAQ,UACjBA,EAAS,KAAM,yEACfA,EAAS,QAAS,6BAClBA,EAAS,QAAS,6BAClBA,EAAS,OAAQ,UACjBA,EAAS,OAAQ,6CAEN,UAATn9M,IACFm9M,EAAS,+BAAgC,aACzCA,EAAS,iBAAkB,eAC3BA,EAAS,IAAK,YACdA,EAAS,kBAAmB,eAC5BA,EAAS,SAAU,qCAErB7f,GAAO/kM,GAAM,8BAA8B,SAAUiE,GAC/CojD,EAAOpjD,WACFojD,EAAOpjD,GAAMkV,SAASlV,aAG1BojD,EAAOf,QAAQntC,SAASm5I,aACxBjrG,EAAOv3C,OACd+zM,GAASp8M,GAAQ4/C,EACVA,IAELy9J,GAAoB,SAAUz/M,EAAOyvF,GACvC,IAAInoE,EAUJ,OATItnB,IACFsnB,EAAS,GACY,kBAAVtnB,IACTA,EAAQ,CAAE,IAAKA,IAEjB0/L,GAAO1/L,GAAO,SAAUA,EAAO7B,GAC7BmpB,EAAOnpB,GAAOmpB,EAAOnpB,EAAIo/D,eAA0B,QAATkyB,EAAiBivH,GAAU1+M,EAAO,QAAU4+M,GAAU5+M,EAAO,YAGpGsnB,GAET,SAASo4L,GAAO9+M,GACd,IAGIwoE,EACAu2I,EACAC,EACAC,EAAuBC,EAAwBxhI,EAAuByhI,EAAaC,EACnF5hI,EAAkB6hI,EAAqBC,EAAmCC,EAAsBC,EAPhGh8M,EAAW,GACX0P,EAAW,GACXusM,EAAkB,GAMlBC,EAAoB,GAAIprF,EAAkB,GAC1CqrF,EAAoB,SAAUC,EAAQC,EAAcC,GACtD,IAAI1gN,EAAQY,EAAS4/M,GAWrB,OAVKxgN,EAQHA,EAAQ0+M,GAAU1+M,EAAO,OAAQ0+M,GAAU1+M,EAAMu9D,cAAe,UAPhEv9D,EAAQw+M,GAASgC,GACZxgN,IACHA,EAAQ0+M,GAAU+B,EAAc,IAAK/B,GAAU+B,EAAaljJ,cAAe,MAC3Ev9D,EAAQ2+M,GAAS3+M,EAAO0gN,GACxBlC,GAASgC,GAAUxgN,IAKhBA,GAETY,EAAWA,GAAY,GACvBg/M,EAAcd,GAAcl+M,EAASohD,SACR,IAAzBphD,EAAS+/M,cACX//M,EAAS+oE,eAAiB,QAE5BP,EAAcq2I,GAAkB7+M,EAASggN,cACzCjB,EAAgBF,GAAkB7+M,EAASigN,eAAgB,OAC3Db,EAAeP,GAAkB7+M,EAASkgN,cAAe,OACzDjB,EAAwBU,EAAkB,sBAAuB,qEACjET,EAAyBS,EAAkB,wBAAyB,mDACpEjiI,EAAwBiiI,EAAkB,uBAAwB,+FAClER,EAAcQ,EAAkB,qBAAsB,iIACtDN,EAAsBM,EAAkB,qBAAsB,kDAAwDjiI,GACtH4hI,EAAoCK,EAAkB,sCAAuC,QAASN,GACtGE,EAAuBI,EAAkB,sBAAuB,sIAChEniI,EAAmBmiI,EAAkB,iBAAkB,iJAA4JJ,GACnNC,EAAwBG,EAAkB,uBAAwB,0EAClE7gB,IAAQ9+L,EAASsvB,SAAW,oEAAoEv1B,MAAM,MAAM,SAAUiE,GACpHs2H,EAAgBt2H,GAAQ,IAAI24C,OAAO,KAAO34C,EAAO,SAAU,SAE7D,IAAImiN,EAAkB,SAAUp6M,GAC9B,OAAO,IAAI4wC,OAAO,IAAM5wC,EAAInE,QAAQ,WAAY,OAAS,MAEvDw+M,EAAmB,SAAUt3I,GAC/B,IAAIu3I,EAAIvuM,EAAIkiH,EAAIssF,EAAI/zM,EAAS5I,EAAS+K,EAAM6xM,EAAUv0F,EAAamH,EAAUqtF,EAAUr5M,EAAY8hE,EAAiBh4D,EAAQwvM,EAAYtC,EAAkBuC,EAAuBnjN,EAAK6B,EAClLuhN,EAAoB,8DAA+DC,EAAiB,oDAAqDC,EAAoB,QACjL,GAAI/3I,EAMF,IALAA,EAAgB/uE,GAAM+uE,EAAe,KACjCtlE,EAAS,OACX26M,EAAmB36M,EAAS,KAAK2D,WACjCu5M,EAAwBl9M,EAAS,KAAKylE,iBAEnCo3I,EAAK,EAAGvuM,EAAKg3D,EAAchmE,OAAQu9M,EAAKvuM,EAAIuuM,IAE/C,GADA9zM,EAAUo0M,EAAkB5jN,KAAK+rE,EAAcu3I,IAC3C9zM,EAAS,CAoBX,GAnBA0E,EAAS1E,EAAQ,GACjBy/G,EAAcz/G,EAAQ,GACtBk0M,EAAal0M,EAAQ,GACrBg0M,EAAWh0M,EAAQ,GACnBpF,EAAa,GACb8hE,EAAkB,GAClBtlE,EAAU,CACRwD,WAAYA,EACZ8hE,gBAAiBA,GAEJ,MAAXh4D,IACFtN,EAAQm9M,WAAY,GAEP,MAAX7vM,IACFtN,EAAQo9M,aAAc,GAEL,MAAfx0M,EAAQ,KACV5I,EAAQq9M,kBAAmB,GAEzB7C,EAAkB,CACpB,IAAK5gN,KAAO4gN,EACVh3M,EAAW5J,GAAO4gN,EAAiB5gN,GAErC0rE,EAAgBziE,KAAKI,MAAMqiE,EAAiBy3I,GAE9C,GAAIH,EAEF,IADAA,EAAWxmN,GAAMwmN,EAAU,KACtBvsF,EAAK,EAAGssF,EAAKC,EAASz9M,OAAQkxH,EAAKssF,EAAItsF,IAE1C,GADAznH,EAAUq0M,EAAe7jN,KAAKwjN,EAASvsF,IACnCznH,EAAS,CAWX,GAVAmC,EAAO,GACP8xM,EAAWj0M,EAAQ,GACnB4mH,EAAW5mH,EAAQ,GAAG3K,QAAQ,UAAW,KACzCqP,EAAS1E,EAAQ,GACjBnN,EAAQmN,EAAQ,GACC,MAAbi0M,IACF78M,EAAQs9M,mBAAqBt9M,EAAQs9M,oBAAsB,GAC3Dt9M,EAAQs9M,mBAAmBz6M,KAAK2sH,GAChCzkH,EAAKq4I,UAAW,GAED,MAAby5D,EAAkB,QACbr5M,EAAWgsH,GAClBlqD,EAAgBtiE,OAAOs3M,GAAUh1I,EAAiBkqD,GAAW,GAC7D,SAEEliH,IACa,MAAXA,IACFtN,EAAQu9M,kBAAoBv9M,EAAQu9M,mBAAqB,GACzDv9M,EAAQu9M,kBAAkB16M,KAAK,CAC7BxI,KAAMm1H,EACN/zH,MAAOA,IAETsP,EAAKmxM,aAAezgN,GAEP,MAAX6R,IACFtN,EAAQw9M,iBAAmBx9M,EAAQw9M,kBAAoB,GACvDx9M,EAAQw9M,iBAAiB36M,KAAK,CAC5BxI,KAAMm1H,EACN/zH,MAAOA,IAETsP,EAAK0yM,YAAchiN,GAEN,MAAX6R,IACFvC,EAAK0pG,YAAc0lG,GAAU1+M,EAAO,OAGpCyhN,EAAkB98M,KAAKovH,IACzBxvH,EAAQ09M,kBAAoB19M,EAAQ09M,mBAAqB,GACzD3yM,EAAK9I,QAAUu6M,EAAgBhtF,GAC/BxvH,EAAQ09M,kBAAkB76M,KAAKkI,KAE1BvH,EAAWgsH,IACdlqD,EAAgBziE,KAAK2sH,GAEvBhsH,EAAWgsH,GAAYzkH,GAK1ByvM,GAAoC,MAAhBnyF,IACvBmyF,EAAmBh3M,EACnBu5M,EAAwBz3I,GAEtBw3I,IACF98M,EAAQ88M,WAAaz0F,EACrBxoH,EAASi9M,GAAc98M,GAErBk9M,EAAkB98M,KAAKioH,IACzBroH,EAAQiC,QAAUu6M,EAAgBn0F,GAClCyzF,EAAgBj5M,KAAK7C,IAErBH,EAASwoH,GAAeroH,IAM9B29M,EAAmB,SAAUx4I,GAC/BtlE,EAAW,GACXi8M,EAAkB,GAClBW,EAAiBt3I,GACjBg2H,GAAOkgB,GAAa,SAAUr7M,EAAS3F,GACrCkV,EAASlV,GAAQ2F,EAAQuP,aAGzBquM,EAAoB,SAAUC,GAChC,IAAIC,EAAsB,aACtBD,IACF5D,GAAS8D,oBAAsB9D,GAAS+D,eAAiB,KACzD7iB,GAAO/kM,GAAMynN,EAAgB,MAAM,SAAUx4M,GAC3C,IAAIuD,EAAUk1M,EAAoB1kN,KAAKiM,GAAO2G,EAAwB,MAAfpD,EAAQ,GAAYq1M,EAAYjyM,EAAS,OAAS,MAAO3R,EAAOuO,EAAQ,GAO/H,GANA2G,EAASlV,GAAQkV,EAAS0uM,GAC1BlC,EAAkB1hN,GAAQ4jN,EACrBjyM,IACH6tE,EAAiBx/E,EAAK2+D,eAAiB,GACvC6gB,EAAiBx/E,GAAQ,KAEtBwF,EAASxF,GAAO,CACnB,IAAI6jN,EAAar+M,EAASo+M,GAC1BC,EAAa9D,GAAS,GAAI8D,UACnBA,EAAWb,wBACXa,EAAWd,YAClBv9M,EAASxF,GAAQ6jN,EAEnB/iB,GAAO5rL,GAAU,SAAUvP,EAASm+M,GAC9Bn+M,EAAQi+M,KACV1uM,EAAS4uM,GAAWn+M,EAAUo6M,GAAS,GAAI7qM,EAAS4uM,IACpDn+M,EAAQ3F,GAAQ2F,EAAQi+M,YAM9BG,EAAmB,SAAUC,GAC/B,IAAIC,EAAkB,8BACtBrE,GAAS59M,EAASohD,QAAU,KACxB4gK,GACFljB,GAAO/kM,GAAMioN,EAAe,MAAM,SAAUh5M,GAC1C,IACIlF,EAAQmN,EADR1E,EAAU01M,EAAgBllN,KAAKiM,GAE/BuD,IACF0E,EAAS1E,EAAQ,GAEfzI,EADEmN,EACOiC,EAAS3G,EAAQ,IAEjB2G,EAAS3G,EAAQ,IAAM,CAAE,WAAY,IAEhDzI,EAASoP,EAAS3G,EAAQ,IAC1BuyL,GAAO/kM,GAAMwS,EAAQ,GAAI,MAAM,SAAUgoD,GACxB,MAAXtjD,SACKnN,EAAOywD,GAEdzwD,EAAOywD,GAAS,WAOxB2tJ,EAAiB,SAAUlkN,GAC7B,IAA8BoF,EAA1BO,EAAUH,EAASxF,GACvB,GAAI2F,EACF,OAAOA,EAETP,EAAIq8M,EAAgB38M,OACpB,MAAOM,IAEL,GADAO,EAAU87M,EAAgBr8M,GACtBO,EAAQiC,QAAQ7B,KAAK/F,GACvB,OAAO2F,GAIR3D,EAAS+oE,eA0BZu4I,EAAiBthN,EAAS+oE,iBAzB1B+1H,GAAOkgB,GAAa,SAAUr7M,EAAS3F,GACrCwF,EAASxF,GAAQ,CACfmJ,WAAYxD,EAAQwD,WACpB8hE,gBAAiBtlE,EAAQslE,iBAE3B/1D,EAASlV,GAAQ2F,EAAQuP,YAEH,UAApBlT,EAASohD,QACX09I,GAAO/kM,GAAM,kBAAkB,SAAU+/C,GACvCA,EAAO//C,GAAM+/C,EAAM,KACnBt2C,EAASs2C,EAAK,IAAI2mK,WAAa3mK,EAAK,MAGxCglJ,GAAO/kM,GAAM,sEAAsE,SAAUiE,GACvFwF,EAASxF,KACXwF,EAASxF,GAAM+iN,aAAc,MAGjCjiB,GAAO/kM,GAAM,yDAAyD,SAAUiE,GAC9EwF,EAASxF,GAAM8iN,WAAY,KAE7BhiB,GAAO/kM,GAAM,SAAS,SAAUiE,GAC9BwF,EAASxF,GAAMgjN,kBAAmB,MAKtCO,EAAkBvhN,EAASmiN,iBAC3BJ,EAAiB/hN,EAASgpE,gBAC1Bo3I,EAAiBpgN,EAASoiN,yBAC1BL,EAAiB,yBACjBjjB,GAAO,CACLljM,GAAI,KACJymN,GAAI,KACJ7qJ,GAAI,QACJszB,GAAI,KACJlwE,GAAI,KACJN,GAAI,oBACJ+lK,MAAO,QACPiiC,MAAO,QACPC,MAAO,QACPC,OAAQ,WACRC,KAAM,MACNC,MAAO,uBACN,SAAUxhJ,EAASpnB,GAChBt2C,EAASs2C,KACXt2C,EAASs2C,GAAM6oK,gBAAkB5oN,GAAMmnE,OAGvClhE,EAAS4iN,kBACX9jB,GAAOkf,GAAUh+M,EAAS4iN,mBAAmB,SAAU9oK,GACjDt2C,EAASs2C,WACJt2C,EAASs2C,MAIjBooK,EAAe,SAClB9B,EAAiB,0BAEnB,IAAIyC,EAAiB,WACnB,OAAOr6I,GAELs6I,EAAmB,WACrB,OAAO/D,GAELgE,EAAkB,WACpB,OAAO3D,GAEL3qF,EAAe,WACjB,OAAO0qF,GAELpmJ,EAAmB,WACrB,OAAOykB,GAELn8B,EAAuB,WACzB,OAAOk+J,GAELyD,EAAwB,WAC1B,OAAOxD,GAEL94I,EAAwB,WAC1B,OAAOgX,GAELulI,EAAyB,WAC3B,OAAO/D,GAEL1gJ,EAAsB,WACxB,OAAO6gJ,GAEL6D,EAAoC,WACtC,OAAO5D,GAEL9/H,EAAwB,WAC1B,OAAOy/H,GAEL1qF,EAAqB,WACvB,OAAOD,GAEL6uF,EAAe,SAAUnlN,EAAMu2D,GACjC,IAAIzwD,EAASoP,EAASlV,EAAKimB,eAC3B,SAAUngB,IAAUA,EAAOywD,EAAMtwC,iBAE/Bo6G,EAAU,SAAUrgI,EAAM0Q,GAC5B,IAAI00M,EAAchgN,EACd4F,EAAOk5M,EAAelkN,GAC1B,GAAIgL,EAAM,CACR,IAAI0F,EAcF,OAAO,EAbP,GAAI1F,EAAK7B,WAAWuH,GAClB,OAAO,EAGT,GADA00M,EAAep6M,EAAKq4M,kBAChB+B,EAAc,CAChBhgN,EAAIggN,EAAatgN,OACjB,MAAOM,IACL,GAAIggN,EAAahgN,GAAGwC,QAAQ7B,KAAK/F,GAC/B,OAAO,GAQjB,OAAO,GAELqlN,EAAoB,WACtB,OAAO3D,GAET,MAAO,CACLxsM,SAAUA,EACV1P,SAAUA,EACVq/M,eAAgBA,EAChBE,gBAAiBA,EACjBhqJ,iBAAkBA,EAClB+pJ,iBAAkBA,EAClBp8I,sBAAuBA,EACvBrlB,qBAAsBA,EACtB2hK,sBAAuBA,EACvBvuF,aAAcA,EACdytF,eAAgBA,EAChBe,uBAAwBA,EACxBzkJ,oBAAqBA,EACrB0kJ,kCAAmCA,EACnC1jI,sBAAuBA,EACvB+0C,mBAAoBA,EACpB4uF,aAAcA,EACd9kF,QAASA,EACTglF,kBAAmBA,EACnBjD,iBAAkBA,EAClBkB,iBAAkBA,EAClBC,kBAAmBA,EACnBQ,iBAAkBA,GAItB,IAAIxpI,GAAQ,SAAU/5E,EAAOigB,EAAGqd,EAAG5iB,GACjC,IAAIoqM,EAAM,SAAUtuL,GAElB,OADAA,EAAMv2B,SAASu2B,EAAK,IAAIhzB,SAAS,IAC1BgzB,EAAIlyB,OAAS,EAAIkyB,EAAM,IAAMA,GAEtC,MAAO,IAAMsuL,EAAI7kM,GAAK6kM,EAAIxnL,GAAKwnL,EAAIpqM,IAErC,SAASqtJ,GAAOvmK,EAAUohD,GACxB,IAIIh+C,EAEAmgN,EACA/6I,EACAu2I,EARAyE,EAAY,2DACZC,EAAiB,+HACjBC,EAAc,2BACdC,EAAkB,OAElBC,EAAiB,GAIjBC,EAAgB,SAOpB,IANA7jN,EAAWA,GAAY,GACnBohD,IACFonB,EAAcpnB,EAAOyhK,iBACrB9D,EAAgB39J,EAAO0hK,oBAEzBS,GAAiB,wBAA0BM,GAAe9pN,MAAM,KAC3DqJ,EAAI,EAAGA,EAAImgN,EAAczgN,OAAQM,IACpCwgN,EAAeL,EAAcngN,IAAMygN,EAAgBzgN,EACnDwgN,EAAeC,EAAgBzgN,GAAKmgN,EAAcngN,GAEpD,MAAO,CACLm1E,MAAO,SAAUtkE,GACf,OAAOA,EAAMrS,QAAQ4hN,EAAWjrI,KAElC/wE,MAAO,SAAUsB,GACf,IACIyD,EAASvO,EAAMoB,EAAO0kN,EADtBp9L,EAAS,GAETq9L,EAAe/jN,EAASgkN,cACxBC,EAAoBjkN,EAASkkN,qBAAuBxqN,KACpDyqN,EAAW,SAAUlzM,EAAQ0rI,EAAQynE,GACvC,IAAI98K,EAAK6uH,EAAOr5G,EAAQzV,EAExB,GADAC,EAAM5gB,EAAOzV,EAAS,OAAS0rI,GAC1Br1G,IAGL6uH,EAAQzvI,EAAOzV,EAAS,SAAW0rI,GAC9BwZ,IAGLr5G,EAASp2B,EAAOzV,EAAS,UAAY0rI,GAChC7/F,IAGLzV,EAAO3gB,EAAOzV,EAAS,QAAU0rI,GAC5Bt1G,KAAL,CAGA,IAAI22E,EAAM,CACR12E,EACA6uH,EACAr5G,EACAzV,GAEFjkC,EAAI46G,EAAIl7G,OAAS,EACjB,MAAOM,IACL,GAAI46G,EAAI56G,KAAO46G,EAAI56G,EAAI,GACrB,MAGAA,GAAK,GAAKghN,IAGd19L,EAAOzV,EAAS0rI,IAAiB,IAAPv5I,EAAW46G,EAAI,GAAKA,EAAIh3G,KAAK,YAChD0f,EAAOzV,EAAS,OAAS0rI,UACzBj2H,EAAOzV,EAAS,SAAW0rI,UAC3Bj2H,EAAOzV,EAAS,UAAY0rI,UAC5Bj2H,EAAOzV,EAAS,QAAU0rI,MAE/B0nE,EAAc,SAAU9mN,GAC1B,IAAyB6F,EAArBhE,EAAQsnB,EAAOnpB,GACnB,GAAK6B,EAAL,CAGAA,EAAQA,EAAMrF,MAAM,KACpBqJ,EAAIhE,EAAM0D,OACV,MAAOM,IACL,GAAIhE,EAAMgE,KAAOhE,EAAM,GACrB,OAAO,EAIX,OADAsnB,EAAOnpB,GAAO6B,EAAM,IACb,IAELklN,EAAY,SAAU5zM,EAAQ8J,EAAGtB,EAAGnP,GACjCs6M,EAAY7pM,IAGZ6pM,EAAYnrM,IAGZmrM,EAAYt6M,KAGjB2c,EAAOhW,GAAUgW,EAAOlM,GAAK,IAAMkM,EAAOxN,GAAK,IAAMwN,EAAO3c,UACrD2c,EAAOlM,UACPkM,EAAOxN,UACPwN,EAAO3c,KAEZ1I,EAAS,SAAU0E,GAErB,OADA+9M,GAAY,EACLF,EAAe79M,IAEpBqyE,EAAS,SAAUryE,EAAKw+M,GAS1B,OARIT,IACF/9M,EAAMA,EAAInE,QAAQ,gBAAgB,SAAUmE,GAC1C,OAAO69M,EAAe79M,OAGrBw+M,IACHx+M,EAAMA,EAAInE,QAAQ,gBAAiB,OAE9BmE,GAELy+M,EAA0B,SAAUC,GACtC,OAAOxmM,OAAOssE,aAAa9rF,SAASgmN,EAAOt+M,MAAM,GAAI,MAEnDu+M,EAAqB,SAAUtlN,GACjC,OAAOA,EAAMwC,QAAQ,gBAAiB4iN,IAEpCG,EAAa,SAAUnmN,EAAOyK,EAAK27M,EAAMC,EAAM9+M,EAAK++M,GAEtD,GADA/+M,EAAMA,GAAO++M,EACT/+M,EAEF,OADAA,EAAMqyE,EAAOryE,GACN,IAAOA,EAAInE,QAAQ,MAAO,OAAU,IAG7C,GADAqH,EAAMmvE,EAAOnvE,GAAO27M,GAAQC,IACvB7kN,EAAS+kN,kBAAmB,CAC/B,IAAIC,EAAY/7M,EAAIrH,QAAQ,aAAc,IAC1C,GAAI,oBAAoBmC,KAAKihN,GAC3B,MAAO,GAET,IAAKhlN,EAASilN,qBAAuB,oBAAoBlhN,KAAKihN,GAC5D,MAAO,GAMX,OAHIjB,IACF96M,EAAM86M,EAAa9hN,KAAKgiN,EAAmBh7M,EAAK,UAE3C,QAAWA,EAAIrH,QAAQ,MAAO,OAAU,MAEjD,GAAIkH,EAAK,CACPA,EAAMA,EAAIlH,QAAQ,mBAAoB,IACtCkH,EAAMA,EAAIlH,QAAQ,oBAAqBP,GAAQO,QAAQ,0BAA0B,SAAUmE,GACzF,OAAOA,EAAInE,QAAQ,QAASP,MAE9B,MAAOkL,EAAUm3M,EAAY3mN,KAAK+L,GAIhC,GAHA46M,EAAY19M,UAAYuG,EAAQrG,MAAQqG,EAAQ,GAAGzJ,OACnD9E,EAAOuO,EAAQ,GAAG3K,QAAQ+hN,EAAiB,IAAI1/L,cAC/C7kB,EAAQmN,EAAQ,GAAG3K,QAAQ+hN,EAAiB,IACxC3lN,GAAQoB,EAAO,CAGjB,GAFApB,EAAO0mN,EAAmB1mN,GAC1BoB,EAAQslN,EAAmBtlN,IACU,IAAjCpB,EAAK4J,QAAQi8M,KAAgD,IAAvB7lN,EAAK4J,QAAQ,KACrD,SAEF,IAAK5H,EAAS+kN,oBAA+B,aAAT/mN,GAAuB,4BAA4B+F,KAAK3E,IAC1F,SAEW,gBAATpB,GAAoC,QAAVoB,EAC5BA,EAAQ,OACU,UAATpB,GAA6B,qBAATA,IAC7BoB,EAAQA,EAAM6kB,eAEhB7kB,EAAQA,EAAMwC,QAAQ4hN,EAAWjrI,IACjCn5E,EAAQA,EAAMwC,QAAQ6hN,EAAgBkB,GACtCj+L,EAAO1oB,GAAQ8lN,EAAY1rI,EAAOh5E,GAAO,GAAQA,EAGrD+kN,EAAS,SAAU,IAAI,GACvBA,EAAS,SAAU,UACnBA,EAAS,SAAU,UACnBA,EAAS,SAAU,UACnBA,EAAS,UAAW,IACpBA,EAAS,SAAU,IACnBG,EAAU,SAAU,eAAgB,eAAgB,gBAC9B,gBAAlB59L,EAAOknB,eACFlnB,EAAOknB,OAEe,SAA3BlnB,EAAO,wBACFA,EAAO,gBAGlB,OAAOA,GAETjB,UAAW,SAAUiB,EAAQslG,GAC3B,IAAchuH,EAAMoB,EAAhB0J,EAAM,GACNo8M,EAAkB,SAAUlnN,GAC9B,IAAImnN,EAAW/hN,EAAG1E,EAAGU,EAErB,GADA+lN,EAAY38I,EAAYxqE,GACpBmnN,EACF,IAAK/hN,EAAI,EAAG1E,EAAIymN,EAAUriN,OAAQM,EAAI1E,EAAG0E,IACvCpF,EAAOmnN,EAAU/hN,GACjBhE,EAAQsnB,EAAO1oB,GACXoB,IACF0J,IAAQA,EAAIhG,OAAS,EAAI,IAAM,IAAM9E,EAAO,KAAOoB,EAAQ,MAK/Di/H,EAAU,SAAUrgI,EAAMguH,GAC5B,IAAIuD,EAEJ,OADAA,EAAWwvF,EAAc,OACrBxvF,IAAYA,EAASvxH,MAGzBuxH,EAAWwvF,EAAc/yF,IACrBuD,IAAYA,EAASvxH,KAK3B,GAAIguH,GAAexjD,EACjB08I,EAAgB,KAChBA,EAAgBl5F,QAEhB,IAAKhuH,KAAQ0oB,EACXtnB,EAAQsnB,EAAO1oB,IACXoB,GAAW2/M,IAAiB1gF,EAAQrgI,EAAMguH,KAC5CljH,IAAQA,EAAIhG,OAAS,EAAI,IAAM,IAAM9E,EAAO,KAAOoB,EAAQ,KAIjE,OAAO0J,IAKb,IAAIs8M,GAASzlN,GAAM4O,KACf82M,GAAS1lN,GAAM4rB,KACf+jC,GAAOozI,GAAI3wK,GACXuzL,GAAmB,mBACnBC,GAAqB,eACrBC,GAAiB,SAAU9+L,EAAQ1mB,EAAU6yB,GAC/C,IAAI0gL,EAAY,GACZkS,EAAazlN,EAAS0lN,YACtBC,EAAc,CAChBrmN,IAAK,SAAUmP,EAAMrP,EAAOpB,GACtBgC,EAASgkN,gBACX5kN,EAAQY,EAASgkN,cAAc/hN,KAAKjC,EAASkkN,qBAAuBrxL,IAAczzB,EAAOpB,EAAMyQ,EAAK,KAEtGA,EAAKC,KAAK,YAAc1Q,EAAMoB,GAAOsP,KAAK1Q,EAAMoB,IAElDC,IAAK,SAAUoP,EAAMzQ,GACnB,OAAOyQ,EAAKC,KAAK,YAAc1Q,IAASyQ,EAAKC,KAAK1Q,KAyBtD,OAtBAu1M,EAAY,CACVhqM,MAAO,CACLjK,IAAK,SAAUmP,EAAMrP,GACL,OAAVA,GAAmC,kBAAVA,GAIzBqmN,GACFh3M,EAAKC,KAAK,iBAAkBtP,GAE9BqP,EAAKC,KAAK,QAAStP,IANjBqP,EAAK3F,IAAI1J,IAQbC,IAAK,SAAUoP,GACb,IAAIrP,EAAQqP,EAAKC,KAAK,mBAAqBD,EAAKC,KAAK,SAErD,OADAtP,EAAQsnB,EAAOjB,UAAUiB,EAAOlf,MAAMpI,GAAQqP,EAAK,GAAGvK,UAC/C9E,KAITqmN,IACFlS,EAAUzjM,KAAOyjM,EAAU7hL,IAAMi0L,GAE5BpS,GAELqS,GAA0B,SAAUl/L,EAAQjY,GAC9C,IAAIo3M,EAAWp3M,EAAKC,KAAK,SACrBtP,EAAQsnB,EAAOjB,UAAUiB,EAAOlf,MAAMq+M,GAAWp3M,EAAK,GAAGvK,UACxD9E,IACHA,EAAQ,MAEVqP,EAAKC,KAAK,iBAAkBtP,IAE1B0mN,GAAgB,SAAUz6M,EAAMy1C,GAClC,IAAailK,EAAcj8L,EAAvBtb,EAAM,EACV,GAAInD,EACF,IAAK06M,EAAe16M,EAAKye,SAAUze,EAAOA,EAAK+8C,gBAAiB/8C,EAAMA,EAAOA,EAAK+8C,gBAChFt+B,EAAWze,EAAKye,WACZg3B,GAA2B,IAAbh3B,GACZA,IAAai8L,GAAiB16M,EAAKgxH,UAAUv5H,UAInD0L,IACAu3M,EAAej8L,GAGnB,OAAOtb,GAET,SAASw3M,GAAS75L,EAAKnsB,GACrB,IAIIuzM,EAJA/8K,EAAQ98B,UACK,IAAbsG,IACFA,EAAW,IAGb,IAAIimN,EAAc,GACdh8K,EAAMhrC,EAAW4B,OACjB8xE,EAAQ,GACRzhE,EAAU,EACVg1M,GAAU,EACVC,GAAW,EACXC,EAAmB1P,GAAiBvqL,EAAK,CAAE2rL,eAAgB93M,EAAS83M,iBACpEuO,EAAc,GACdjlK,EAASphD,EAASohD,OAASphD,EAASohD,OAAS09J,GAAO,IACpDp4L,EAAS6/I,GAAO,CAClBy9C,cAAehkN,EAASgkN,cACxBE,oBAAqBlkN,EAASkkN,qBAC7BlkN,EAASohD,QACRwlI,EAAS5mL,EAASsmN,UAAY,IAAItgB,GAAWhmM,EAAS04F,OAASstG,GAAW9hB,MAC1E1mG,EAAmBp8B,EAAO2X,mBAC1BhtD,EAAI+mM,GAASyB,kBAAiB,WAChC,MAAO,CACL1gM,QAASsY,EACTxoB,QAAS1C,GAAKolD,cAGd4B,EAAU,SAAU58C,GACtB,GAAoB,kBAATA,EACT,QAASmyE,EAAiBnyE,GACrB,GAAIA,EAAM,CACf,IAAI7J,EAAO6J,EAAKye,SAChB,GAAItoB,EACF,QAAmB,IAATA,IAAcg8E,EAAiBnyE,EAAKnH,WAGlD,OAAO,GAEL7E,EAAM,SAAUsI,GAClB,GAAIA,GAAOwkB,GAAsB,kBAARxkB,EAAkB,CACzC,IAAI0D,EAAO8gB,EAAI+3F,eAAev8G,GAC9B,OAAI0D,GAAQA,EAAKhJ,KAAOsF,EACfwkB,EAAIo6L,kBAAkB5+M,GAAK,GAE3B0D,EAGX,OAAO1D,GAEL6+M,EAAK,SAAU7+M,GAIjB,MAHmB,kBAARA,IACTA,EAAMtI,EAAIsI,IAELoE,EAAEpE,IAEPm3C,EAAY,SAAUn3C,EAAK3J,EAAMyoN,GACnC,IAAI7gG,EAAMxmH,EACNqP,EAAO+3M,EAAG7+M,GAYd,OAXI8G,EAAK3L,SACP8iH,EAAO2tF,EAAUv1M,GAEfoB,EADEwmH,GAAQA,EAAKvmH,IACPumH,EAAKvmH,IAAIoP,EAAMzQ,GAEfyQ,EAAKC,KAAK1Q,IAGD,qBAAVoB,IACTA,EAAQqnN,GAAc,IAEjBrnN,GAELsnN,EAAa,SAAU/+M,GACzB,IAAI0D,EAAOhM,EAAIsI,GACf,OAAK0D,EAGEA,EAAKlE,WAFH,IAIPyE,EAAY,SAAUjE,EAAK3J,EAAMoB,GACnC,IAAIunN,EAAe/gG,EACL,KAAVxmH,IACFA,EAAQ,MAEV,IAAIqP,EAAO+3M,EAAG7+M,GACdg/M,EAAgBl4M,EAAKC,KAAK1Q,GACrByQ,EAAK3L,SAGV8iH,EAAO2tF,EAAUv1M,GACb4nH,GAAQA,EAAKtmH,IACfsmH,EAAKtmH,IAAImP,EAAMrP,EAAOpB,GAEtByQ,EAAKC,KAAK1Q,EAAMoB,GAEdunN,IAAkBvnN,GAASY,EAAS4mN,aACtC5mN,EAAS4mN,YAAY,CACnBC,QAASp4M,EACT0kH,SAAUn1H,EACVwhD,UAAWpgD,MAIbI,EAAQ,SAAU6L,EAAMkqD,GAC1B,IAAKjG,IAA0B,IAAlBjkD,EAAKye,UAAkByrC,EAClC,OAAOlqD,EAAK4rC,UAAUse,GAExB,IAAKA,EAAM,CACT,IAAIuxJ,EAAU36L,EAAIoG,cAAclnB,EAAKnH,UAIrC,OAHAkhN,GAAOsB,EAAWr7M,IAAO,SAAUqD,GACjC9C,EAAUk7M,EAASp4M,EAAKxK,SAAU46C,EAAUzzC,EAAMqD,EAAKxK,cAElD4iN,EAET,OAAO,MAELzgK,EAAU,WACZ,OAAOrmD,EAAS+mN,cAAgB56L,EAAI/e,MAElC5M,EAAc,SAAUwmN,GAC1B,IAAIC,EAAUD,GAAS/8K,EACnB9d,EAAM86L,EAAOxjN,SACb6yM,EAAWnqL,EAAIq2D,gBACnB,MAAO,CACL5sE,EAAGqxM,EAAOvlD,aAAe40C,EAAQj9J,WACjCt9C,EAAGkrN,EAAOxlD,aAAe60C,EAAQh9J,UACjC74C,EAAGwmN,EAAOh+F,YAAcqtF,EAAQltK,YAChC3tC,EAAGwrN,EAAO/oG,aAAeo4F,EAAQjtK,eAGjC+P,EAAS,SAAUzxC,EAAK2uM,GAC1B,OAAOj1C,GAASjoH,OAAOjtB,EAAI/e,KAAM/N,EAAIsI,GAAM2uM,IAEzC96I,EAAW,SAAU7zD,EAAK3J,EAAMoB,GAClC,IAAIqP,EAAO+3M,EAAG7+M,GAAKmB,IAAI9K,EAAMoB,GACzBY,EAASknN,eACXtB,GAAwBl/L,EAAQjY,IAGhC0nE,EAAY,SAAUxuE,EAAKw/M,GAC7B,IAAI14M,EAAO+3M,EAAG7+M,GAAKmB,IAAIq+M,GACnBnnN,EAASknN,eACXtB,GAAwBl/L,EAAQjY,IAGhCyqC,EAAW,SAAUvxC,EAAK3J,EAAMu2G,GAClC,IAAI9lG,EAAO+3M,EAAG7+M,GACd,OAAI4sG,EACK9lG,EAAK3F,IAAI9K,IAElBA,EAAOA,EAAK4D,QAAQ,UAAU,SAAU4Y,EAAGtB,GACzC,OAAOA,EAAEyjD,iBAEE,UAAT3+D,IACFA,EAAO0kM,GAAI3wK,IAAM2wK,GAAI3wK,GAAK,GAAK,aAAe,YAEzCtjB,EAAK,IAAMA,EAAK,GAAGlF,MAAQkF,EAAK,GAAGlF,MAAMvL,QAAQgf,IAEtD0iC,EAAU,SAAU/3C,GACtB,IAAIlH,EAAGhF,EAUP,OATAkM,EAAMtI,EAAIsI,GACVlH,EAAIy4C,EAASvxC,EAAK,SAClBlM,EAAIy9C,EAASvxC,EAAK,WACO,IAArBlH,EAAEmH,QAAQ,QACZnH,EAAI,IAEmB,IAArBhF,EAAEmM,QAAQ,QACZnM,EAAI,GAEC,CACLgF,EAAGhC,SAASgC,EAAG,KAAOkH,EAAI4hC,aAAe5hC,EAAIyhC,YAC7C3tC,EAAGgD,SAAShD,EAAG,KAAOkM,EAAI6hC,cAAgB7hC,EAAI0hC,eAG9C0rJ,EAAU,SAAUptL,GACtB,IAAI6wC,EAAK3yB,EAIT,OAHAle,EAAMtI,EAAIsI,GACV6wC,EAAMY,EAAOzxC,GACbke,EAAO65B,EAAQ/3C,GACR,CACLiO,EAAG4iC,EAAI5iC,EACP7Z,EAAGy8C,EAAIz8C,EACP0E,EAAGolB,EAAKplB,EACRhF,EAAGoqB,EAAKpqB,IAGRiC,EAAK,SAAUiK,EAAKuB,GACtB,IAAI9F,EACJ,IAAKuE,EACH,OAAO,EAET,IAAKjB,MAAM2kB,QAAQ1jB,GAAM,CACvB,GAAiB,MAAbuB,EACF,OAAwB,IAAjBvB,EAAImiB,SAEb,GAAIw7L,GAAiBvhN,KAAKmF,GAAW,CACnC,IAAI+9B,EAAY/9B,EAAS+a,cAAclqB,MAAM,KACzC+nN,EAAUn6M,EAAIzD,SAAS+f,cAC3B,IAAK7gB,EAAI6jC,EAAUnkC,OAAS,EAAGM,GAAK,EAAGA,IACrC,GAAI6jC,EAAU7jC,KAAO0+M,EACnB,OAAO,EAGX,OAAO,EAET,GAAIn6M,EAAImiB,UAA6B,IAAjBniB,EAAImiB,SACtB,OAAO,EAGX,IAAIkhC,EAAQtkD,MAAM2kB,QAAQ1jB,GAAeA,EAAR,CAACA,GAClC,OAAOwiM,GAAOjhM,EAAU8hD,EAAK,GAAG/kB,eAAiB+kB,EAAK,GAAI,KAAMA,GAAMloD,OAAS,GAE7E+P,EAAa,SAAUlL,EAAKuB,EAAUvG,EAAMykN,GAC9C,IACIC,EADA5pN,EAAS,GAET4N,EAAOhM,EAAIsI,GACfy/M,OAAsBpqM,IAAZoqM,EACVzkN,EAAOA,IAAgC,SAAvB0jD,IAAUniD,SAAsBmiD,IAAUpiD,WAAa,MACnEtE,GAAMjC,GAAGwL,EAAU,YACrBm+M,EAAcn+M,EAEZA,EADe,MAAbA,EACS,SAAUmC,GACnB,OAAyB,IAAlBA,EAAKye,UAGH,SAAUze,GACnB,OAAO3N,EAAG2N,EAAMg8M,KAItB,MAAOh8M,EAAM,CACX,GAAIA,IAAS1I,IAAS0I,EAAKye,UAA8B,IAAlBze,EAAKye,SAC1C,MAEF,IAAK5gB,GAAgC,oBAAbA,GAA2BA,EAASmC,GAAO,CACjE,IAAI+7M,EAGF,MAAO,CAAC/7M,GAFR5N,EAAO+I,KAAK6E,GAKhBA,EAAOA,EAAKpH,WAEd,OAAOmjN,EAAU3pN,EAAS,MAExBsZ,EAAY,SAAU1L,EAAMnC,EAAUvG,GACxC,IAAIu+D,EAAUruD,EAAWxH,EAAMnC,EAAUvG,GAAM,GAC/C,OAAOu+D,GAAWA,EAAQp+D,OAAS,EAAIo+D,EAAQ,GAAK,MAElDomJ,EAAW,SAAUj8M,EAAMnC,EAAUlL,GACvC,IAAI2jI,EAAOz4H,EACX,GAAImC,EAMF,IALwB,kBAAbnC,IACTy4H,EAAO,SAAUt2H,GACf,OAAO3N,EAAG2N,EAAMnC,KAGfmC,EAAOA,EAAKrN,GAAOqN,EAAMA,EAAOA,EAAKrN,GACxC,GAAoB,oBAAT2jI,GAAuBA,EAAKt2H,GACrC,OAAOA,EAIb,OAAO,MAELk8M,EAAU,SAAUl8M,EAAMnC,GAC5B,OAAOo+M,EAASj8M,EAAMnC,EAAU,gBAE9Bs+M,EAAU,SAAUn8M,EAAMnC,GAC5B,OAAOo+M,EAASj8M,EAAMnC,EAAU,oBAE9B2C,EAAS,SAAU3C,EAAU05B,GAC/B,OAAOunK,GAAOjhM,EAAU7J,EAAIujC,IAAU5iC,EAAS+mN,cAAgB56L,EAAK,KAElE5nB,EAAM,SAAUoD,EAAKg6H,EAAM/+F,GAC7B,IAAInlC,EACA4N,EAAsB,kBAAR1D,EAAmBtI,EAAIsI,GAAOA,EAChD,IAAK0D,EACH,OAAO,EAET,GAAI1L,GAAM0rB,QAAQhgB,KAAUA,EAAKvI,QAA0B,IAAhBuI,EAAKvI,QAU9C,OATArF,EAAS,GACT2nN,GAAO/5M,GAAM,SAAU1D,EAAKvE,GACtBuE,IACiB,kBAARA,IACTA,EAAMtI,EAAIsI,IAEZlK,EAAO+I,KAAKm7H,EAAK1/H,KAAK2gC,EAAOj7B,EAAKvE,QAG/B3F,EAET,IAAIoW,EAAU+uB,GAAgBpM,EAC9B,OAAOmrG,EAAK1/H,KAAK4R,EAASxI,IAExB4Z,EAAa,SAAUtd,EAAKooB,GAC9By2L,EAAG7+M,GAAK4G,MAAK,SAAUnL,EAAGiI,GACxB+5M,GAAOr1L,GAAO,SAAU3wB,EAAOpB,GAC7B4N,EAAUP,EAAMrN,EAAMoB,UAIxBqoN,EAAU,SAAU9/M,EAAKgB,GAC3B,IAAI8F,EAAO+3M,EAAG7+M,GACV2nD,GACF7gD,EAAKF,MAAK,SAAUnL,EAAGsN,GACrB,IAA2B,IAAvBA,EAAOg3M,YAAX,CAGA,MAAOh3M,EAAO4G,WACZ5G,EAAOsW,YAAYtW,EAAO4G,YAE5B,IACE5G,EAAO3L,UAAY,OAAS4D,EAC5B+H,EAAOsW,YAAYtW,EAAO4G,YAC1B,MAAOsd,GACPk+K,GAAS,eAAenqM,KAAK,OAASA,GAAMsuK,WAAW9wK,MAAM,GAAGggC,SAASz1B,GAE3E,OAAO/H,MAGT8F,EAAK9F,KAAKA,IAGV7B,EAAM,SAAUw4K,EAAWthL,EAAM+xB,EAAOpnB,EAAMiH,GAChD,OAAOrL,EAAI+6K,GAAW,SAAUA,GAC9B,IAAIqoC,EAAyB,kBAAT3pN,EAAoBmuB,EAAIoG,cAAcv0B,GAAQA,EASlE,OARAinB,EAAW0iM,EAAQ53L,GACfpnB,IACkB,kBAATA,GAAqBA,EAAKmhB,SACnC69L,EAAO33M,YAAYrH,GACM,kBAATA,GAChB8+M,EAAQE,EAAQh/M,IAGZiH,EAAyC+3M,EAAhCroC,EAAUtvK,YAAY23M,OAGvC/3M,EAAS,SAAU5R,EAAM+xB,EAAOpnB,GAClC,OAAO7B,EAAIqlB,EAAIoG,cAAcv0B,GAAOA,EAAM+xB,EAAOpnB,GAAM,IAErDyvE,EAASulI,GAASvlI,OAClB/2E,EAASs8M,GAAS73I,aAClBsT,EAAa,SAAUp7E,EAAM+xB,EAAOpnB,GACtC,IAAkBpL,EAAdqqN,EAAU,GAEd,IAAKrqN,KADLqqN,GAAW,IAAM5pN,EACL+xB,EACNA,EAAM7tB,eAAe3E,IAAuB,OAAfwyB,EAAMxyB,IAAuC,qBAAfwyB,EAAMxyB,KACnEqqN,GAAW,IAAMrqN,EAAM,KAAO8D,EAAO0uB,EAAMxyB,IAAQ,KAGvD,MAAoB,qBAAToL,EACFi/M,EAAU,IAAMj/M,EAAO,KAAO3K,EAAO,IAEvC4pN,EAAU,OAEf5uJ,EAAiB,SAAUrwD,GAC7B,IAAI0C,EACAue,EAAYuC,EAAIoG,cAAc,OAC9BkgL,EAAOtmL,EAAI+gC,yBACfulJ,EAAKziM,YAAY4Z,GACbjhB,IACFihB,EAAU7kB,UAAY4D,GAExB,MAAO0C,EAAOue,EAAUtS,WACtBm7L,EAAKziM,YAAY3E,GAGnB,OADAonM,EAAKzrL,YAAY4C,GACV6oL,GAEL/9L,EAAS,SAAUrJ,EAAMw8M,GAC3B,IAAIC,EAAQtB,EAAGn7M,GAef,OAdIw8M,EACFC,EAAMv5M,MAAK,WACT,IAAIgmD,EACJ,MAAOA,EAAQ76D,KAAK4d,WACK,IAAnBi9C,EAAMzqC,UAAwC,IAAtByqC,EAAMzvD,KAAKhC,OACrCpJ,KAAKstB,YAAYutC,GAEjB76D,KAAKuK,WAAW1B,aAAagyD,EAAO76D,SAGvCgb,SAEHozM,EAAMpzM,SAEDozM,EAAMhlN,OAAS,EAAIglN,EAAMtqM,UAAYsqM,EAAM,IAEhDC,EAAmB,SAAUl6M,GAC/B,OAAOtJ,EAAIsJ,GAAG,SAAUA,GACtB,IAAIzK,EACA2sB,EAAQliB,EAAE1G,WACd,IAAK/D,EAAI2sB,EAAMjtB,OAAS,EAAGM,GAAK,EAAGA,IACjCyK,EAAEm6M,oBAAoBj4L,EAAM+pB,KAAK12C,QAInC++C,EAAa,SAAUp7B,GACzB,OAAOL,EAAOlf,MAAMuf,IAElBq7B,EAAiB,SAAU+kK,EAAWnpN,GACxC,OAAO0oB,EAAOjB,UAAU0hM,EAAWnpN,IAEjCiqN,EAAW,SAAUlhM,GACvB,IAAI1D,EAAM6kM,EACV,GAAIjnN,KAAS+kN,GAASzlN,KAAO4rB,IAAQltB,EAAWwE,SAAU,CACxD,GAAIwiN,EAAYl/L,GACd,OAEFk/L,EAAYl/L,IAAW,EAEzBmhM,EAAW/7L,EAAI+3F,eAAe,oBACzBgkG,IACHA,EAAW/7L,EAAIoG,cAAc,SAC7B21L,EAAS7lN,GAAK,mBACd6lN,EAAS1mN,KAAO,WAChB6hB,EAAO8I,EAAIpc,qBAAqB,QAAQ,GACpCsT,EAAK/L,WACP+L,EAAK9gB,aAAa2lN,EAAU7kM,EAAK/L,YAEjC+L,EAAKrT,YAAYk4M,IAGjBA,EAASphM,WACXohM,EAASphM,WAAWC,SAAWA,EAE/BmhM,EAASl4M,YAAYmc,EAAIhd,eAAe4X,KAGxCohM,GAAU,SAAUl/M,GACtB,IAAIoa,EACApiB,KAAS+kN,GAASzlN,KAAO4rB,IAAQltB,EAAWwE,UAI3CwF,IACHA,EAAM,IAERoa,EAAO8I,EAAIpc,qBAAqB,QAAQ,GACxCq1M,GAAOn8M,EAAIlP,MAAM,MAAM,SAAUkP,GAC/B,IAAImb,EACJnb,EAAMtJ,GAAMqyM,gBAAgB/oM,GACxB0pE,EAAM1pE,KAGV0pE,EAAM1pE,IAAO,EACbmb,EAAOxU,EAAO,OAAQ,CACpBC,IAAK,aACLC,KAAM7G,IAERoa,EAAKrT,YAAYoU,QAlBjB4hM,GAASzlN,IAAI4nN,QAAQl/M,IAqBrBsuH,GAAc,SAAU5vH,EAAKygN,EAAKzkL,GACpC6iL,EAAG7+M,GAAK4vH,YAAY6wF,EAAKzkL,GAAOp1B,MAAK,WACZ,KAAnB7U,KAAKsK,WACP8uM,GAASp5M,MAAMgV,KAAK,QAAS,UAI/B47G,GAAW,SAAU3iH,EAAKygN,GAC5B5B,EAAG7+M,GAAK2iH,SAAS89F,IAEfn+F,GAAc,SAAUtiH,EAAKygN,GAC/B7wF,GAAY5vH,EAAKygN,GAAK,IAEpBr2M,GAAW,SAAUpK,EAAKygN,GAC5B,OAAO5B,EAAG7+M,GAAKoK,SAASq2M,IAEtBlhL,GAAO,SAAUv/B,GACnB6+M,EAAG7+M,GAAKu/B,QAENC,GAAO,SAAUx/B,GACnB6+M,EAAG7+M,GAAKw/B,QAENkhL,GAAW,SAAU1gN,GACvB,MAAkC,SAA3B6+M,EAAG7+M,GAAKmB,IAAI,YAEjBgN,GAAW,SAAU7E,GACvB,OAASA,GAAS,QAAmBC,KAEnCo3M,GAAe,SAAU3gN,GAC3B,IAAI0D,EAAsB,kBAAR1D,EAAmBtI,EAAIsI,GAAOA,EAChD,OAAO6gD,GAASqM,UAAUxpD,GAAQA,EAAKo2C,UAAYqxJ,GAAS,eAAejkM,OAAOikM,GAASznM,GAAM7L,SAASmJ,QAExG4/M,GAAe,SAAU5gN,EAAKgB,GAChC69M,EAAG7+M,GAAK4G,MAAK,WACX,IACE,GAAI,cAAe7U,KAEjB,YADAA,KAAK+nD,UAAY94C,GAGnB,MAAOisB,IAETlgB,EAAOo+L,GAASp5M,MAAMiP,KAAKA,IAAO,OAGlCyjB,GAAc,SAAU/gB,EAAMm9M,GAChC,IAAIC,EAAgBppN,EAAImpN,GACxB,OAAOjkN,EAAI8G,GAAM,SAAUA,GACzB,IAAIvH,EAAQ4nB,EAQZ,OAPA5nB,EAAS2kN,EAAcxkN,WACvBynB,EAAc+8L,EAAc/8L,YACxBA,EACF5nB,EAAOvB,aAAa8I,EAAMqgB,GAE1B5nB,EAAOkM,YAAY3E,GAEdA,MAGPzJ,GAAU,SAAU+lN,EAAQe,EAAQb,GACtC,OAAOtjN,EAAImkN,GAAQ,SAAUA,GAS3B,OARI/oN,GAAMjC,GAAGgrN,EAAQ,WACnBf,EAASA,EAAO1wK,WAAU,IAExB4wK,GACFzC,GAAOC,GAAOqD,EAAOrxM,aAAa,SAAUhM,GAC1Cs8M,EAAO33M,YAAY3E,MAGhBq9M,EAAOzkN,WAAWgL,aAAa04M,EAAQe,OAG9C5rJ,GAAS,SAAUn1D,EAAK3J,GAC1B,IAAI2pN,EAQJ,OAPIhgN,EAAIzD,WAAalG,EAAK2+D,gBACxBgrJ,EAAS/3M,EAAO5R,GAChBonN,GAAOsB,EAAW/+M,IAAM,SAAUghN,GAChC/8M,EAAU+7M,EAAQgB,EAASzkN,SAAU46C,EAAUn3C,EAAKghN,EAASzkN,cAE/DtC,GAAQ+lN,EAAQhgN,GAAK,IAEhBggN,GAAUhgN,GAEfihN,GAAqB,SAAUpuM,EAAGtB,GACpC,IAAY2vM,EAAR7xD,EAAKx8I,EACT,MAAOw8I,EAAI,CACT6xD,EAAK3vM,EACL,MAAO2vM,GAAM7xD,IAAO6xD,EAClBA,EAAKA,EAAG5kN,WAEV,GAAI+yJ,IAAO6xD,EACT,MAEF7xD,EAAKA,EAAG/yJ,WAEV,OAAK+yJ,GAAMx8I,EAAEyrB,cACJzrB,EAAEyrB,cAAcu8C,gBAElBw0E,GAELz+E,GAAQ,SAAUuwI,GACpB,OAAOpiM,EAAO6xD,MAAM54E,GAAMgP,KAAKm6M,KAE7BjnK,GAAU,SAAUx2C,EAAM7H,GAC5B,IAAIJ,EAAG+D,EAAY3F,EAAMs6F,EAAYrvE,EAAQzuB,EAAM+qN,EAAU,EAE7D,GADA19M,EAAOA,EAAKiM,WACRjM,EAAM,CACRohB,EAAS,IAAI0rL,GAAW9sM,EAAMA,EAAKpH,YACnCT,EAAWA,IAAa49C,EAASA,EAAOod,sBAAwB,MAChEs9B,EAAa16C,EAASA,EAAOo+B,wBAA0B,GACvD,EAAG,CAED,GADAh+E,EAAO6J,EAAKye,SACR0+B,GAASqM,UAAUxpD,GAAO,CAC5B,IAAI29M,EAAW39M,EAAKkM,aAAa,kBACjC,GAAIyxM,EAAU,CACZ39M,EAAOohB,EAAOC,KAAkB,QAAbs8L,GACnB,SAGF,GADAhrN,EAAOqN,EAAKnH,SAAS+f,cACjBzgB,GAAYA,EAASxF,GAAO,CAC9B,GAAa,OAATA,EAAe,CACjB+qN,IACA19M,EAAOohB,EAAOC,OACd,SAEF,OAAO,EAETvlB,EAAau/M,EAAWr7M,GACxBjI,EAAI+D,EAAWrE,OACf,MAAOM,IAEL,GADApF,EAAOmJ,EAAW/D,GAAGc,SACR,SAATlG,GAA4B,sBAATA,EACrB,OAAO,EAIb,GAAa,IAATwD,EACF,OAAO,EAET,GAAa,IAATA,IAAe+jN,GAAmBxhN,KAAKsH,EAAKgxH,WAC9C,OAAO,EAET,GAAa,IAAT76H,GAAc6J,EAAKpH,YAAc63F,EAAWzwF,EAAKpH,WAAWC,WAAaqhN,GAAmBxhN,KAAKsH,EAAKgxH,WACxG,OAAO,EAEThxH,EAAOohB,EAAOC,aACPrhB,GAEX,OAAO09M,GAAW,GAEhBl+L,GAAY,WACd,OAAOsB,EAAIhC,eAETpwB,GAAQ,SAAUulL,EAAW2pC,EAAUC,GACzC,IAAqBC,EAAKC,EAAKC,EAA3B5qM,EAAIoM,KACR,GAAIy0J,GAAa2pC,EAiBf,OAhBAxqM,EAAE2L,SAASk1J,EAAUr7K,WAAY6hN,GAAcxmC,IAC/C7gK,EAAE4L,OAAO4+L,EAAShlN,WAAY6hN,GAAcmD,IAC5CE,EAAM1qM,EAAE+7C,kBACR/7C,EAAIoM,KACJpM,EAAE2L,SAAS6+L,EAAShlN,WAAY6hN,GAAcmD,GAAY,GAC1DxqM,EAAE4L,OAAOi1J,EAAUr7K,WAAY6hN,GAAcxmC,GAAa,GAC1D8pC,EAAM3qM,EAAE+7C,kBACR6uJ,EAAK/pC,EAAUr7K,WACfolN,EAAG9mN,aAAao4M,GAASF,SAASx5M,GAAMkoN,GAAM7pC,GAC1C4pC,EACFG,EAAG9mN,aAAa2mN,EAAgB5pC,GAEhC+pC,EAAG9mN,aAAa0mN,EAAU3pC,GAE5B+pC,EAAG9mN,aAAao4M,GAASF,SAASx5M,GAAMmoN,GAAM9pC,GAC9C5qK,EAAO4qK,GACA4pC,GAAkBD,GAGzB9rM,GAAO,SAAUzM,EAAQ1S,EAAM2jI,EAAM/+F,GACvC,GAAIjjC,GAAM0rB,QAAQ3a,GAAS,CACzB,IAAItN,EAAIsN,EAAO5N,OACf,MAAOM,IACLsN,EAAOtN,GAAK+Z,GAAKzM,EAAOtN,GAAIpF,EAAM2jI,EAAM/+F,GAE1C,OAAOlyB,EAUT,OARI1Q,EAASonN,SAAY12M,IAAWyb,GAAOzb,IAAWu5B,GACpDo8K,EAAY7/M,KAAK,CACfkK,EACA1S,EACA2jI,EACA/+F,IAGGgkJ,EAAOzpK,KAAKzM,EAAQ1S,EAAM2jI,EAAM/+F,GAAS3hC,KAE9C6zE,GAAS,SAAUpkE,EAAQ1S,EAAM2jI,GACnC,IAAIv+H,EACJ,GAAIzD,GAAM0rB,QAAQ3a,GAAS,CACzBtN,EAAIsN,EAAO5N,OACX,MAAOM,IACLsN,EAAOtN,GAAK0xE,GAAOpkE,EAAOtN,GAAIpF,EAAM2jI,GAEtC,OAAOjxH,EAET,GAAI21M,IAAgB31M,IAAWyb,GAAOzb,IAAWu5B,GAAM,CACrD7mC,EAAIijN,EAAYvjN,OAChB,MAAOM,IAAK,CACV,IAAI02C,EAAOusK,EAAYjjN,GACnBsN,IAAWopC,EAAK,IAAQ97C,GAAQA,IAAS87C,EAAK,IAAS6nF,GAAQA,IAAS7nF,EAAK,IAC/E8sI,EAAO9xG,OAAOh7B,EAAK,GAAIA,EAAK,GAAIA,EAAK,KAI3C,OAAO8sI,EAAO9xG,OAAOpkE,EAAQ1S,EAAM2jI,IAEjC97F,GAAO,SAAUn1B,EAAQ1S,EAAM4G,GACjC,OAAOgiL,EAAO/gJ,KAAKn1B,EAAQ1S,EAAM4G,IAE/B83D,GAAqB,SAAUrxD,GACjC,GAAIA,GAAQm9C,GAASqM,UAAUxpD,GAAO,CACpC,IAAI0D,EAAkB1D,EAAKkM,aAAa,4BACxC,OAAIxI,GAAuC,YAApBA,EACdA,EAEuB,YAAzB1D,EAAK0D,gBAAgC1D,EAAK0D,gBAAkB,KAEnE,OAAO,MAGPu6M,GAA2B,SAAUj+M,GAGvC,IAFA,IAAI1I,EAAO0jD,IACP1iB,EAAQ,KACLt4B,GAAQA,IAAS1I,EAAM0I,EAAOA,EAAKpH,WAExC,GADA0/B,EAAQ+4B,GAAmBrxD,GACb,OAAVs4B,EACF,MAGJ,OAAOA,GAELiE,GAAU,WACZ,GAAIy+K,EAAa,CACf,IAAIjjN,EAAIijN,EAAYvjN,OACpB,MAAOM,IAAK,CACV,IAAI02C,EAAOusK,EAAYjjN,GACvBwjL,EAAO9xG,OAAOh7B,EAAK,GAAIA,EAAK,GAAIA,EAAK,KAGrCqwJ,GAAO5C,aACT4C,GAAO5C,eAGPh/I,GAAY,SAAUl9C,EAAMvH,GAC9B,MAAOuH,EAAM,CACX,GAAIvH,IAAWuH,EACb,OAAO,EAETA,EAAOA,EAAKpH,WAEd,OAAO,GAELslN,GAAU,SAAU9qM,GACtB,MAAO,mBAAqBA,EAAEoL,eAAe3lB,SAAW,kBAAoBua,EAAEuL,YAAc,mBAAqBvL,EAAEsqC,aAAa7kD,SAAW,gBAAkBua,EAAEwL,WAE7JhpB,GAAO,CACTkrB,IAAKA,EACLnsB,SAAUA,EACViqC,IAAKA,EACL0oC,MAAOA,EACPuzI,QAASA,EACTC,SAAUA,EACVC,iBAAkBA,EAClBC,YAAaA,EACb3/L,OAAQA,EACR06B,OAAQA,EACRwlI,OAAQA,EACR3+H,QAASA,EACTl8C,EAAGA,EACHy6M,GAAIA,EACJ7jN,KAAM,KACNnD,MAAOA,EACP6mD,QAASA,EACT7lD,YAAaA,EACbu0L,QAASA,EACTr1I,QAASA,EACT3oC,UAAWA,EACXlE,WAAYA,EACZxT,IAAKA,EACLkoN,QAASA,EACTC,QAASA,EACT37M,OAAQA,EACRnO,GAAIA,EACJoJ,IAAKA,EACL8I,OAAQA,EACRwpE,WAAYA,EACZpgB,eAAgBA,EAChBtkD,OAAQA,EACR8mD,SAAUA,EACVtiB,SAAUA,EACVi9B,UAAWA,EACX4xI,iBAAkBA,EAClBn8M,UAAWA,EACXqZ,WAAYA,EACZ65B,UAAWA,EACX1F,OAAQA,EACR+I,WAAYA,EACZC,eAAgBA,EAChB6lK,SAAUA,EACVE,QAASA,GACT79F,SAAUA,GACVL,YAAaA,GACbl4G,SAAUA,GACVwlH,YAAaA,GACbrwF,KAAMA,GACNC,KAAMA,GACNkhL,SAAUA,GACVvyM,SAAUA,GACV2xM,QAASA,EACTa,aAAcA,GACdC,aAAcA,GACdnwI,OAAQA,EACR/2E,OAAQA,EACR+qB,YAAaA,GACbxqB,QAASA,GACTk7D,OAAQA,GACR8rJ,mBAAoBA,GACpBrwI,MAAOA,GACPh0E,IAAKA,EACLmiN,WAAYA,EACZ7kK,QAASA,GACTh3B,UAAWA,GACX2+B,UAAWs8J,GACX/rN,MAAOA,GACPojB,KAAMA,GACN23D,OAAQA,GACRjvC,KAAMA,GACN62B,mBAAoBA,GACpB4sJ,yBAA0BA,GAC1B1hL,QAASA,GACT2gB,UAAWA,GACXghK,QAASA,IAKX,OAHAhW,EAAYiS,GAAe9+L,EAAQ1mB,GAAU,WAC3C,OAAOiB,MAEFA,IAER,SAAU+kN,GACTA,EAASzlN,IAAMylN,EAAS/mN,EAAWwE,UACnCuiN,EAASx8J,UAAYs8J,IAFvB,CAGEE,KAAaA,GAAW,KAC1B,IAAIwD,GAAaxD,GAEbzlN,GAAMipN,GAAWjpN,IACjBkpN,GAAS9pN,GAAM4O,KAAMm7M,GAAS/pN,GAAM4rB,KACpCo+L,GAAe,SAAU7tM,GAC3B,MAAoB,oBAANA,GAEZ8tM,GAAe,WACjB,IAAIC,EAAS,EACTC,EAAU,EACVC,EAAS,EACTC,EAAS,EACTjgL,EAAS,GACTgiC,EAAQ,GACRk+I,EAAwB,GACxBC,EAAuB,GACvB/9H,EAAU,EACVg+H,EAAa,SAAUlhN,EAAKutC,EAASiO,GACvC,IACI98C,EAAKtF,EADLsJ,EAAMpL,GAENm0B,EAAO,WACT/oB,EAAI+I,OAAOrS,GACPsF,IACFA,EAAI8nC,mBAAqB9nC,EAAIyuB,OAASzuB,EAAM,MAE9C6uC,KAEEzgB,EAAQ,WACN4zL,GAAallK,GACfA,IAEuB,qBAAZ4H,SAA2BA,QAAQyW,KAC5CzW,QAAQyW,IAAI,0BAA4B75D,IAI9C5G,EAAKsJ,EAAImK,WACTnO,EAAM1I,EAAWwE,SAAS8uB,cAAc,UACxC5qB,EAAItF,GAAKA,EACTsF,EAAInG,KAAO,kBACXmG,EAAI+pB,IAAM/xB,GAAMqyM,gBAAgB/oM,GAChCtB,EAAIyuB,OAAS1B,EACb/sB,EAAI4uB,QAAUR,GACb92B,EAAWwE,SAASsM,qBAAqB,QAAQ,IAAM9Q,EAAWwE,SAAS2J,MAAM4C,YAAYrI,IAEhGjO,KAAK0wN,OAAS,SAAUnhN,GACtB,OAAO8gC,EAAO9gC,KAAS8gN,GAEzBrwN,KAAK2wN,SAAW,SAAUphN,GACxB8gC,EAAO9gC,GAAO8gN,GAEhBrwN,KAAKoN,IAAMpN,KAAKw9H,KAAO,SAAUjuH,EAAKutC,EAAS5T,EAAO6hB,GACpD,IAAI9gB,EAAQoG,EAAO9gC,QACL+T,IAAV2mB,IACFooC,EAAMvlE,KAAKyC,GACX8gC,EAAO9gC,GAAO4gN,GAEZrzK,IACGyzK,EAAsBhhN,KACzBghN,EAAsBhhN,GAAO,IAE/BghN,EAAsBhhN,GAAKzC,KAAK,CAC9BgwC,QAASA,EACTiO,QAASA,EACT7hB,MAAOA,GAASlpC,SAItBA,KAAKgb,OAAS,SAAUzL,UACf8gC,EAAO9gC,UACPghN,EAAsBhhN,IAE/BvP,KAAK4wN,UAAY,SAAU9zK,EAAS5T,EAAO6hB,GACzC/qD,KAAK6wN,YAAYx+I,EAAOv1B,EAAS5T,EAAO6hB,IAE1C/qD,KAAK6wN,YAAc,SAAUxoH,EAASvrD,EAAS5T,EAAO6hB,GACpD,IAAI8lK,EACAC,EAAW,GACXC,EAAgB,SAAUzsN,EAAMiL,GAClCwgN,GAAOQ,EAAsBhhN,IAAM,SAAU9F,GACvCwmN,GAAaxmN,EAASnF,KACxBmF,EAASnF,GAAMiE,KAAKkB,EAASy/B,UAGjCqnL,EAAsBhhN,QAAO+T,GAE/BktM,EAAqB1jN,KAAK,CACxBgwC,QAASA,EACTiO,QAASA,EACT7hB,MAAOA,GAASlpC,OAElB6wN,EAAc,WACZ,IAAIG,EAAiBhB,GAAO3nH,GA4B5B,GA3BAA,EAAQj/F,OAAS,EACjB2mN,GAAOiB,GAAgB,SAAUzhN,GAC3B8gC,EAAO9gC,KAAS8gN,EAIhBhgL,EAAO9gC,KAAS+gN,EAIhBjgL,EAAO9gC,KAAS6gN,IAClB//K,EAAO9gC,GAAO6gN,EACd39H,IACAg+H,EAAWlhN,GAAK,WACd8gC,EAAO9gC,GAAO8gN,EACd59H,IACAs+H,EAAc,UAAWxhN,GACzBshN,OACC,WACDxgL,EAAO9gC,GAAO+gN,EACd79H,IACAq+H,EAAShkN,KAAKyC,GACdwhN,EAAc,UAAWxhN,GACzBshN,QAhBFE,EAAc,UAAWxhN,GAJzBwhN,EAAc,UAAWxhN,OAwBxBkjF,EAAS,CACZ,IAAIw+H,EAAkBT,EAAqB/jN,MAAM,GACjD+jN,EAAqBpnN,OAAS,EAC9B2mN,GAAOkB,GAAiB,SAAUxnN,GACR,IAApBqnN,EAAS1nN,OACP6mN,GAAaxmN,EAASqzC,UACxBrzC,EAASqzC,QAAQv0C,KAAKkB,EAASy/B,OAG7B+mL,GAAaxmN,EAASshD,UACxBthD,EAASshD,QAAQxiD,KAAKkB,EAASy/B,MAAO4nL,QAMhDD,MAGJX,GAAaA,aAAe,IAAIA,GAEhC,IAAIgB,GAASjrN,GAAM4O,KACnB,SAASs8M,KACP,IAAIr0L,EAAQ98B,KACR2lB,EAAQ,GACRO,EAAO,GACPgf,EAAS,GACTksL,EAAa,GACbzrN,EAAM,SAAUrB,GAClB,GAAI4gC,EAAO5gC,GACT,OAAO4gC,EAAO5gC,GAAM4mC,UAIpBmmL,EAAe,SAAU/sN,GAC3B,IAAIP,EAIJ,OAHImhC,EAAO5gC,KACTP,EAASmhC,EAAO5gC,GAAM+sN,cAEjBttN,GAAU,IAEfutN,EAAkB,SAAUhtN,EAAMmE,GACpC,IAAI0B,EAAWgnN,GAAahnN,SAC5B,GAAIA,IAA0C,IAA9BgnN,GAAaI,aAAwB,CACnD,GAAI9oN,EAEF,GADAA,EAAY,IAAMA,EAAY,KACgC,IAA1DA,EAAUyF,QAAQ,IAAM/D,EAASwlB,OAAO,EAAG,GAAK,KAClDxlB,EAAWA,EAASwlB,OAAO,EAAG,QACzB,IAAiD,IAA7ClnB,EAAUyF,QAAQ,IAAM/D,EAAW,KAC5C,OAGJ+lN,GAAaA,aAAa9iN,IAAI8Y,EAAK5hB,GAAQ,UAAY6F,EAAW,SAGlEiD,EAAM,SAAUzE,EAAI6oN,EAAOH,GAC7B1rM,EAAM7Y,KAAK0kN,GACXtsL,EAAOv8B,GAAM,CACXuiC,SAAUsmL,EACVH,aAAcA,GAEhB,IAAIttN,EAASqkM,EAAUgpB,GAAY,SAAUK,GAC3C,OAAOA,EAASntN,OAASqE,KAM3B,OAJAyoN,EAAartN,EAAOukM,KACpB4oB,GAAOntN,EAAOskM,MAAM,SAAUopB,GAC5BA,EAAShoN,cAEJ+nN,GAELx2M,EAAS,SAAU1W,UACd4hB,EAAK5hB,UACL4gC,EAAO5gC,IAEZotN,EAAY,SAAUC,EAASC,GACjC,MAAmB,kBAARA,EACFA,EAEiB,kBAAZD,EAAuB,CACnCp6M,OAAQ,GACRs6M,SAAUD,EACV3uE,OAAQ,IACN,CACF1rI,OAAQo6M,EAAQp6M,OAChBs6M,SAAUD,EACV3uE,OAAQ0uE,EAAQ1uE,SAGhB6uE,EAAgB,SAAUC,EAAY1pH,GACxC,IAAIzyF,EAAYknB,EAAM5W,KAAK6rM,GAC3Bb,GAAO7oH,GAAS,SAAUl4F,GACxB+/M,GAAaA,aAAa9iN,IAAIwI,EAAY,IAAMzF,OAGhD6hN,EAAmB,SAAU1tN,EAAM2tN,EAAUn1K,EAAS5T,GACxD,IAAIgpL,EAAOb,EAAa/sN,GACxB4sN,GAAOgB,GAAM,SAAUN,GACrB,IAAIr7F,EAASm7F,EAAUO,EAAUL,GACjCp0F,EAAKjH,EAAOs7F,SAAUt7F,OAAQjzG,OAAWA,MAEvCw5B,IACE5T,EACF4T,EAAQv0C,KAAK2gC,GAEb4T,EAAQv0C,KAAK2nN,MAIf1yF,EAAO,SAAUl5H,EAAM2tN,EAAUn1K,EAAS5T,EAAO6hB,GACnD,IAAI7kC,EAAK5hB,GAAT,CAGA,IAAI6tN,EAAgC,kBAAbF,EAAwBA,EAAWA,EAAS16M,OAAS06M,EAASJ,SAAWI,EAAShvE,OAC1E,IAA3BkvE,EAAUjkN,QAAQ,OAA4C,IAA9BikN,EAAUjkN,QAAQ,SACpDikN,EAAYhB,GAAaz/F,QAAU,IAAMygG,GAE3CjsM,EAAK5hB,GAAQ6tN,EAAUhnM,UAAU,EAAGgnM,EAAU5iM,YAAY,MACtD2V,EAAO5gC,GACT0tN,EAAiB1tN,EAAM2tN,EAAUn1K,EAAS5T,GAE1CgnL,GAAaA,aAAa9iN,IAAI+kN,GAAW,WACvC,OAAOH,EAAiB1tN,EAAM2tN,EAAUn1K,EAAS5T,KAChDA,EAAO6hB,KAGVqnK,EAAU,SAAU9tN,EAAMmF,GACxBy7B,EAAO18B,eAAelE,GACxBmF,IAEA2nN,EAAWtkN,KAAK,CACdxI,KAAMA,EACNmF,SAAUA,KAIhB,MAAO,CACLkc,MAAOA,EACPO,KAAMA,EACNgf,OAAQA,EACRksL,WAAYA,EACZzrN,IAAKA,EACL0rN,aAAcA,EACdC,gBAAiBA,EACjBlkN,IAAKA,EACL4N,OAAQA,EACR02M,UAAWA,EACXI,cAAeA,EACft0F,KAAMA,EACN40F,QAASA,IAGZ,SAAUjB,GACTA,EAAakB,cAAgBlB,IAC7BA,EAAamB,aAAenB,KAF9B,CAGEA,KAAiBA,GAAe,KAElC,IAAIpoN,GAAS,SAAU+xD,EAAQ7wD,GAC7B,IAAI8wD,EAAW3wD,GAAO0wD,GACtBC,EAASlmD,MAAK,SAAUhP,GACtBA,EAAEoM,MAAMpJ,aAAaoB,EAAQgI,MAAO6oD,EAAO7oD,WAG3CrF,GAAQ,SAAUkuD,EAAQ7wD,GAC5B,IAAIk5D,EAAUnxC,GAAY8oC,GAC1BqI,EAAQtgD,MAAK,WACX,IAAIk4C,EAAW3wD,GAAO0wD,GACtBC,EAASlmD,MAAK,SAAUhP,GACtBsP,GAAOtP,EAAGoE,SAEX,SAAUpE,GACXkD,GAAOlD,EAAGoE,OAGV8lJ,GAAU,SAAU3lJ,EAAQH,GAC9B,IAAI+lJ,EAAepyI,GAAWxT,GAC9B4lJ,EAAantI,MAAK,WAChB1N,GAAO/K,EAAQH,MACd,SAAUpE,GACXuE,EAAO6H,MAAMpJ,aAAaoB,EAAQgI,MAAOpM,EAAEoM,WAG3CkD,GAAS,SAAU/K,EAAQH,GAC7BG,EAAO6H,MAAMqE,YAAYrM,EAAQgI,QAE/BsgN,GAAS,SAAUtoN,EAASgmJ,GAC9BlnJ,GAAOkB,EAASgmJ,GAChB96I,GAAO86I,EAAShmJ,IAGd+wD,GAAW,SAAUF,EAAQhxD,GAC/B+K,EAAK/K,GAAU,SAAUoS,GACvBnT,GAAO+xD,EAAQ5+C,OAGf++C,GAAW,SAAU7wD,EAAQN,GAC/B+K,EAAK/K,GAAU,SAAUoS,GACvB/G,GAAO/K,EAAQ8R,OAIfhH,GAAQ,SAAUjL,GACpBA,EAAQgI,MAAMvH,YAAc,GAC5BmK,EAAK2E,GAASvP,IAAU,SAAUkmJ,GAChCnB,GAASmB,OAGTnB,GAAW,SAAU/kJ,GACvB,IAAIgI,EAAMhI,EAAQgI,MACK,OAAnBA,EAAI1H,YACN0H,EAAI1H,WAAW+iB,YAAYrb,IAG3Bw9D,GAAS,SAAUwgF,GACrB,IAAIj0F,EAAaxiD,GAASy2I,GACtBj0F,EAAW5yD,OAAS,GACtB4xD,GAASi1F,EAASj0F,GAEpBgzF,GAASiB,IAGPhtD,GAAQ,SAAUnhF,EAAI8qK,GACxB,IAAIC,EAAQ,KACRx5I,EAAS,WACG,OAAVw5I,IACFtnL,EAAW4zC,aAAa0zI,GACxBA,EAAQ,OAGRC,EAAW,WAEb,IADA,IAAIjgL,EAAO,GACFmV,EAAK,EAAGA,EAAK7Y,UAAUC,OAAQ4Y,IACtCnV,EAAKmV,GAAM7Y,UAAU6Y,GAET,OAAV6qK,IACFA,EAAQtnL,EAAW60B,YAAW,WAC5BtY,EAAG5U,MAAM,KAAML,GACfggL,EAAQ,OACPD,KAGP,MAAO,CACLv5I,OAAQA,EACRy5I,SAAUA,IAGVH,GAAS,SAAU7qK,EAAI8qK,GACzB,IAAIC,EAAQ,KACRx5I,EAAS,WACG,OAAVw5I,IACFtnL,EAAW4zC,aAAa0zI,GACxBA,EAAQ,OAGRC,EAAW,WAEb,IADA,IAAIjgL,EAAO,GACFmV,EAAK,EAAGA,EAAK7Y,UAAUC,OAAQ4Y,IACtCnV,EAAKmV,GAAM7Y,UAAU6Y,GAET,OAAV6qK,GACFtnL,EAAW4zC,aAAa0zI,GAE1BA,EAAQtnL,EAAW60B,YAAW,WAC5BtY,EAAG5U,MAAM,KAAML,GACfggL,EAAQ,OACPD,IAEL,MAAO,CACLv5I,OAAQA,EACRy5I,SAAUA,IAIVtnL,GAAO,SAAUC,GACnB,IAAIC,EAAQD,EACRE,EAAM,WACR,OAAOD,GAELE,EAAM,SAAUC,GAClBH,EAAQG,GAENC,EAAQ,WACV,OAAON,GAAKG,MAEd,MAAO,CACLA,IAAKA,EACLC,IAAKA,EACLE,MAAOA,IAIPkhD,GAAO,SAAU/8C,EAAS+K,GAC5B,IAAItP,EAAQC,GAAIsE,EAAS+K,GACzB,YAAiBsO,IAAV5d,GAAiC,KAAVA,EAAe,GAAKA,EAAMrF,MAAM,MAE5D+M,GAAM,SAAUnD,EAAS+K,EAAMrM,GACjC,IAAI27C,EAAM0C,GAAK/8C,EAAS+K,GACpB4pC,EAAK0F,EAAIpiC,OAAO,CAACvZ,IAErB,OADA/C,GAAIqE,EAAS+K,EAAM4pC,EAAGtxC,KAAK,OACpB,GAEL8iJ,GAAW,SAAUnmJ,EAAS+K,EAAMrM,GACtC,IAAIi2C,EAAKhqC,EAAOoyC,GAAK/8C,EAAS+K,IAAO,SAAUnP,GAC7C,OAAOA,IAAM8C,KAOf,OALIi2C,EAAGx1C,OAAS,EACdxD,GAAIqE,EAAS+K,EAAM4pC,EAAGtxC,KAAK,MAE3B0N,GAAO/Q,EAAS+K,IAEX,GAGLq2J,GAAW,SAAUphK,GACvB,YAAmCqZ,IAA5BrZ,EAAQgI,MAAMoyG,WAEnBumC,GAAQ,SAAU3gJ,GACpB,OAAO+8C,GAAK/8C,EAAS,UAEnBw/I,GAAQ,SAAUx/I,EAASshK,GAC7B,OAAOn+J,GAAInD,EAAS,QAASshK,IAE3BH,GAAW,SAAUnhK,EAASshK,GAChC,OAAOnb,GAASnmJ,EAAS,QAASshK,IAGhCE,GAAQ,SAAUxhK,EAASshK,GACzBF,GAASphK,GACXA,EAAQgI,MAAMoyG,UAAUj3G,IAAIm+J,GAE5B9hB,GAAMx/I,EAASshK,IAGfG,GAAa,SAAUzhK,GACzB,IAAIo6G,EAAYgnD,GAASphK,GAAWA,EAAQgI,MAAMoyG,UAAYumC,GAAM3gJ,GAC3C,IAArBo6G,EAAUj7G,QACZ4R,GAAO/Q,EAAS,UAGhBuhK,GAAW,SAAUvhK,EAASshK,GAChC,GAAIF,GAASphK,GAAU,CACrB,IAAIo6G,EAAYp6G,EAAQgI,MAAMoyG,UAC9BA,EAAUrpG,OAAOuwJ,QAEjBH,GAASnhK,EAASshK,GAEpBG,GAAWzhK,IAETuoN,GAAQ,SAAUvoN,EAASshK,GAC7B,OAAOF,GAASphK,IAAYA,EAAQgI,MAAMoyG,UAAUrqG,SAASuxJ,IAG3Dva,GAAc,SAAU9nH,EAAO5U,GACjC,IAAIvwB,EAAS,GAOb,OANA8Q,EAAK2E,GAAS0vB,IAAQ,SAAUhtB,GAC1BoY,EAAUpY,KACZnY,EAASA,EAAOme,OAAO,CAAChG,KAE1BnY,EAASA,EAAOme,OAAO8uI,GAAY90I,EAAGoY,OAEjCvwB,GAGLotJ,GAAgB,SAAUjoH,EAAO15B,GACnC,OAAOrC,GAAIqC,EAAU05B,IAGvB,SAASkoH,GAAmBptJ,EAAIqtJ,EAAUnoH,EAAOpoB,EAAG6uI,GAClD,OAAO3rJ,EAAGklC,EAAOpoB,GAAKqD,EAAOH,KAAKklB,GAASzkB,EAAWkrI,IAAWA,EAAOzmH,GAAS/kB,EAAO5B,OAAS8uI,EAASnoH,EAAOpoB,EAAG6uI,GAGtH,IAAI0B,GAAW,SAAUnoH,EAAO5U,EAAWq7H,GACzC,IAAI1lJ,EAAUi/B,EAAMj3B,MAChB29I,EAAOnrI,EAAWkrI,GAAUA,EAAS7+I,GAAS,GAClD,MAAO7G,EAAQM,WAAY,CACzBN,EAAUA,EAAQM,WAClB,IAAI6N,EAAK86C,GAAQN,QAAQ3oD,GACzB,GAAIqqB,EAAUlc,GACZ,OAAO+L,EAAOH,KAAK5L,GACd,GAAIw3I,EAAKx3I,GACd,MAGJ,OAAO+L,EAAO5B,QAEZ+uI,GAAU,SAAUpoH,EAAO5U,EAAWq7H,GACxC,IAAI3rJ,EAAK,SAAUrC,EAAG0I,GACpB,OAAOA,EAAK1I,IAEd,OAAOyvJ,GAAkBptJ,EAAIqtJ,GAAUnoH,EAAO5U,EAAWq7H,IAGvDgC,GAAa,SAAUzoH,EAAO15B,EAAUmgJ,GAC1C,OAAO0B,GAASnoH,GAAO,SAAU/0B,GAC/B,OAAOymD,GAAKzmD,EAAG3E,KACdmgJ,IAED6B,GAAa,SAAUtoH,EAAO15B,GAChC,OAAO8/I,GAAI9/I,EAAU05B,IAEnB4oH,GAAY,SAAU5oH,EAAO15B,EAAUmgJ,GACzC,OAAOyB,GAAkBx2F,GAAM+2F,GAAYzoH,EAAO15B,EAAUmgJ,IAG1D8iE,GAAa3hN,EAAS,kBACtB4hN,GAAiB5hN,EAAS,uBAC1B6hN,GAAmB7hN,EAAS,2BAE5BuuJ,GAAW,SAAUh5J,EAAQusN,GAC/B,IAAI7iM,EAAM1pB,EAAOuL,UAAUugB,SACvB5D,EAAQ2kC,GAAQN,QAAQ7iC,EAAII,gBAC5BlnB,EAAOiqD,GAAQN,QAAQvsD,EAAO0T,WAC9BvK,EAAWojN,EAAe/vM,MAAK,WACjC,MAAO,IAAM4vM,QACZ,SAAUI,GACX,MAAO,IAAMH,KAAmB,KAAOG,EAAK,QAE1CC,EAAWj4J,GAAMtsC,EAAOwB,EAAIO,aAAavN,MAAMwL,GAC/C+iI,EAAUQ,GAAUghE,EAAUtjN,GAAU,SAAU/L,GACpD,OAAOgf,GAAGhf,EAAGwF,MAEX+gB,EAAU,SAAU3Z,EAAGX,GACzB,OAAIk8J,GAAMv7J,EAAGX,GACJyU,EAAOH,KAAKre,GAAI0K,EAAGX,IAEnByU,EAAO5B,QAGlB,OAAO+uI,EAAQ7tI,MAAK,SAAUpT,GAC5B,OAAO2Z,EAAQ3Z,EAAG,GAAKsiN,MAAoBlvM,MAAK,SAAU2nF,GACxD,OAAOphF,EAAQ3Z,EAAG,GAAKqiN,MAAkBzqN,KAAI,SAAU3D,GACrD,IAAIwF,EAAWipN,GAAY1sN,EAAQ+kG,GACnC,MAAO,CACLA,IAAKA,EACL9mG,KAAMA,EACNwF,SAAUA,aAMhBkpN,GAAe,SAAU/4J,GAC3B,OAAOkB,GAAUlB,IAASu4J,GAAMv4J,EAAMw4J,OAEpCM,GAAc,SAAU1sN,EAAQ+kG,GAClC,IAAI13F,EAAOw/C,GAAQN,QAAQvsD,EAAO0T,WAClC,OAAOo3I,GAAcz9I,EAAM,IAAMi/M,KAAqB,KAAOvnH,EAAM,OAEjE6nH,GAAU,SAAU5sN,EAAQ/B,GAC9B,IAAIoP,EAAOw/C,GAAQN,QAAQvsD,EAAO0T,WAC9Bm5M,EAAU/hE,GAAcz9I,EAAM,IAAMg/M,KAAmB,KAAOpuN,EAAO,MACrE6uN,EAAY,GAMhB,OALAt+M,EAAKq+M,GAAS,SAAUrxN,GACtB,IAAIupG,EAAMzlG,GAAI9D,EAAG8wN,MACbS,EAAeD,EAAU3qN,eAAe4iG,GAAO+nH,EAAU/nH,GAAO,GACpE+nH,EAAU/nH,GAAOgoH,EAAalxM,OAAO,CAACrgB,OAEjCsxN,GAGLz+M,GAAQ,SAAUrO,EAAQukL,GAC5B,IAAIyoC,EAAkB7tN,GAAK,IACvB8tN,EAAW,WACb,MAAO,CACL//I,UAAW,GACX85F,SAAU7nK,GAAK2e,EAAO5B,UAGtBgxM,EAAgB,SAAUjvN,EAAM8d,GAClCoxM,EAAgBlvN,GAAM,SAAU8G,GAE9B,OADAgX,EAAEhX,GACKA,MAGPooN,EAAkB,SAAUlvN,EAAM8d,GACpC,IAAIqxM,EAAcJ,EAAgB1tN,MAC9ByF,EAAOqoN,EAAYjrN,eAAelE,GAAQmvN,EAAYnvN,GAAQgvN,IAC9DI,EAAatxM,EAAEhX,GACnBqoN,EAAYnvN,GAAQovN,EACpBL,EAAgBztN,IAAI6tN,IAElBE,EAAgB,SAAUrvN,EAAM8mG,EAAKthG,GACvCypN,EAAcjvN,GAAM,SAAU8G,GAC5ByJ,EAAKzJ,EAAKmoE,WAAW,SAAUnxD,GAC7B,OAAOA,GAAE,EAAM9d,EAAM,CACnB8mG,IAAKA,EACLlyF,MAAOjR,EAAI6B,GAAU,SAAUmwD,GAC7B,OAAOA,EAAKhoD,kBAMlB2hN,EAAmB,SAAUtvN,GAC/BivN,EAAcjvN,GAAM,SAAU8G,GAC5ByJ,EAAKzJ,EAAKmoE,WAAW,SAAUnxD,GAC7B,OAAOA,GAAE,EAAO9d,UAIlBuvN,EAAelnC,IAAO,WACxB,IAAI8mC,EAAcJ,EAAgB1tN,MAC9ByzL,EAAcrrK,GAAKlI,GAAK4tM,IAC5B5+M,EAAKukL,GAAa,SAAU90L,GAC1BkvN,EAAgBlvN,GAAM,SAAU8G,GAC9B,IAAIm3H,EAAOn3H,EAAKiiK,SAAS1nK,MAazB,OAZA05J,GAASh5J,EAAQ8d,EAAOH,KAAK1f,IAAOue,MAAK,WACnC0/G,EAAKz/G,WACP8wM,EAAiBtvN,GACjB8G,EAAKiiK,SAASznK,IAAIue,EAAO5B,YAE1B,SAAUuY,GACX,IAAIswE,EAAMtwE,EAAGswE,IAAK9mG,EAAOw2B,EAAGx2B,KAAMwF,EAAWgxB,EAAGhxB,SAC3Cy4H,EAAKv+H,GAAGonG,KACXuoH,EAAcrvN,EAAM8mG,EAAKthG,GACzBsB,EAAKiiK,SAASznK,IAAIue,EAAOH,KAAKonF,QAG3B,CACLiiE,SAAUjiK,EAAKiiK,SACf95F,UAAWnoE,EAAKmoE,mBAIrB,IACHltE,EAAOsO,GAAG,UAAU,WAClBk/M,EAAaxgL,YAEfhtC,EAAOsO,GAAG,cAAc,WACtBk/M,EAAa/mC,cAEf,IAAI95G,EAAc,SAAU1uE,EAAM8d,GAChCoxM,EAAgBlvN,GAAM,SAAU8G,GAC9B,MAAO,CACLiiK,SAAUjiK,EAAKiiK,SACf95F,UAAWnoE,EAAKmoE,UAAUrxD,OAAO,CAACE,SAIxC,MAAO,CAAE4wD,YAAaA,IAGpB5L,GAAU,SAAU/gE,EAAQukL,GAC9B,IAAIkpC,EAAqB,SAAUvsI,GACjC,IAAIwsI,EAAgB5vM,EAAO5X,KAAKg7E,EAAK95E,WAAWxF,IAAIyqN,OACpD,OAAOqB,EAActwM,KAAKmnK,EAAS1lJ,SAErC7+B,EAAOsO,GAAG,QAAQ,WAChBtO,EAAO8mD,WAAWD,cAAc,QAAQ,SAAUm6B,GAChDxyE,EAAKwyE,GAAO,SAAUE,GACpBusI,EAAmBvsI,GAAM1yE,MAAK,SAAUvO,IACV,IAAxBA,EAAS0tN,YACXzsI,EAAK9X,sBAQbvwC,GAAW,WACb,IAAIk6J,EAAc,GACdhlL,EAAW,SAAU9P,EAAMgC,GAC7B8yL,EAAY90L,GAAQ,CAClBA,KAAMA,EACNgC,SAAUA,IAGV4+B,EAAS,SAAU5gC,GACrB,OAAO80L,EAAY5wL,eAAelE,GAAQ6f,EAAO5X,KAAK6sL,EAAY90L,IAAO2D,KAAI,SAAU6Y,GACrF,OAAOA,EAAExa,YACN6d,EAAO5B,QAEd,MAAO,CACLnO,SAAUA,EACV8wB,OAAQA,IAIR8kI,GAAW,WAUb,OATAA,GAAW5hK,OAAOw6F,QAAU,SAAkBxxF,GAC5C,IAAK,IAAIzP,EAAG+H,EAAI,EAAGjG,EAAI0F,UAAUC,OAAQM,EAAIjG,EAAGiG,IAE9C,IAAK,IAAIy/B,KADTxnC,EAAIwH,UAAUO,GACA/H,EACRyG,OAAOC,UAAUG,eAAeD,KAAK5G,EAAGwnC,KAC1C/3B,EAAE+3B,GAAKxnC,EAAEwnC,IAEf,OAAO/3B,GAEF44J,GAAS98J,MAAMlN,KAAMmJ,YAE9B,SAAS8qN,GAAOtyN,EAAGwS,GACjB,IAAI/C,EAAI,GACR,IAAK,IAAI+3B,KAAKxnC,EACRyG,OAAOC,UAAUG,eAAeD,KAAK5G,EAAGwnC,IAAMh1B,EAAEjG,QAAQi7B,GAAK,IAC/D/3B,EAAE+3B,GAAKxnC,EAAEwnC,IACb,GAAS,MAALxnC,GAAqD,oBAAjCyG,OAAO41F,sBACxB,KAAIt0F,EAAI,EAAb,IAAgBy/B,EAAI/gC,OAAO41F,sBAAsBr8F,GAAI+H,EAAIy/B,EAAE//B,OAAQM,IAC7DyK,EAAEjG,QAAQi7B,EAAEz/B,IAAM,GAAKtB,OAAOC,UAAUg1F,qBAAqB90F,KAAK5G,EAAGwnC,EAAEz/B,MACzE0H,EAAE+3B,EAAEz/B,IAAM/H,EAAEwnC,EAAEz/B,KAEpB,OAAO0H,EAET,SAASuc,KACP,IAAK,IAAIhsB,EAAI,EAAG+H,EAAI,EAAGkkB,EAAKzkB,UAAUC,OAAQM,EAAIkkB,EAAIlkB,IACpD/H,GAAKwH,UAAUO,GAAGN,OACf,IAAI2b,EAAI/X,MAAMrL,GAAIksB,EAAI,EAA3B,IAA8BnkB,EAAI,EAAGA,EAAIkkB,EAAIlkB,IAC3C,IAAK,IAAIoX,EAAI3X,UAAUO,GAAIuC,EAAI,EAAG6hB,EAAKhN,EAAE1X,OAAQ6C,EAAI6hB,EAAI7hB,IAAK4hB,IAC5D9I,EAAE8I,GAAK/M,EAAE7U,GACb,OAAO8Y,EAGT,IAAI0sC,GAAS,EACTqiG,GAAW,SAAUv8I,GACvB,IAAIwkC,EAAO,IAAIrkC,KACXgqI,EAAO3lG,EAAKpkC,UACZ6wF,EAAS7hG,KAAKi6B,MAAsB,IAAhBj6B,KAAK6hG,UAE7B,OADA/2C,KACOl6C,EAAS,IAAMixF,EAAS/2C,GAASltC,OAAOm9H,IAG7CwyE,GAAQ,SAAUjqN,EAASuD,GAC7BqH,EAAKrH,GAAS,SAAU0O,GACtBuvJ,GAAMxhK,EAASiS,OAIfpW,GAAQ,SAAU61D,EAAUC,GAC9B,OAAO1I,GAAQN,QAAQ+I,EAAS1pD,MAAMsrC,UAAUqe,KAE9CvX,GAAU,SAAUsX,GACtB,OAAO71D,GAAM61D,GAAU,IAErBE,GAAO,SAAUF,GACnB,OAAO71D,GAAM61D,GAAU,IAGrBq8F,GAAa,SAAU/oJ,EAAMi6B,GAC/B,IAAIzW,EAAMyW,GAAS3jC,EAAWwE,SAC1B0S,EAAMgW,EAAIoG,cAAc,OAE5B,OADApc,EAAIpR,UAAY4D,EACTuK,GAAS05C,GAAQN,QAAQn2C,KAG9BgoJ,GAAQ,SAAUx6J,GACpB,OAAOA,EAAQgI,MAAM5G,WAEnBs/H,GAAQ,SAAU1gI,EAASlC,GAC7B,IAAIosN,EAAU1kE,GAAMxlJ,GAChBmqN,EAASD,EAAQliN,MACjBshD,EAAWL,GAAQN,QAAQwhK,EAAO5gK,0BAClC6gK,EAAkBr8D,GAAWjwJ,EAASqsN,GAC1Cn5J,GAAS1H,EAAU8gK,GACnBn/M,GAAMjL,GACNkL,GAAOlL,EAASspD,IAGd+gK,GAAO,SACPC,GAAS,SAAU3/L,GACrB,OAAOA,IAAQ0/L,IAEbE,GAAS,SAAU7oN,GACrB,OAAOA,EAAKzD,QAAQ,IAAI+0C,OAAOq3K,GAAM,KAAM,KAEzCG,GAAO,CACTF,OAAQA,GACRD,KAAMA,GACNr/M,KAAMu/M,IAGJE,GAAc5lK,GAASqM,UACvBw5J,GAAW7lK,GAAS/9B,OACpB6jM,GAAwB,SAAUjjN,GAIpC,OAHIgjN,GAAShjN,KACXA,EAAOA,EAAKpH,YAEPmqN,GAAY/iN,IAASA,EAAK0zC,aAAa,mBAE5CwvK,GAAyB,SAAUljN,GACrC,OAAOgjN,GAAShjN,IAAS8iN,GAAKF,OAAO5iN,EAAKvG,OAExC0pN,GAAmB,SAAUnjN,GAC/B,OAAOijN,GAAsBjjN,IAASkjN,GAAuBljN,IAE3Die,GAAa,SAAUje,GACzB,OAAOA,EAAKiM,aAAejM,EAAK08C,YAAcS,GAASZ,KAAKv8C,EAAKiM,aAE/Dm3M,GAAe,SAAUpjN,EAAM5I,GACjC,IAAI0pB,EAAK0wC,EAASlyC,EAAU1mB,EAI5B,GAHAkoB,EAAM9gB,EAAK46B,cACXtb,EAAWwB,EAAIhd,eAAeg/M,GAAKH,MACnC/pN,EAAaoH,EAAKpH,WACbxB,EAgBE,CAEL,GADAo6D,EAAUxxD,EAAK+8C,gBACXimK,GAASxxJ,GAAU,CACrB,GAAI2xJ,GAAiB3xJ,GACnB,OAAOA,EAET,GAAI6xJ,GAAuB7xJ,GACzB,OAAOA,EAAQ7xC,UAAU6xC,EAAQ/3D,KAAKhC,OAAS,GAGnDmB,EAAW1B,aAAaooB,EAAUtf,OA1BvB,CAEX,GADAwxD,EAAUxxD,EAAKqgB,YACX2iM,GAASxxJ,GAAU,CACrB,GAAI2xJ,GAAiB3xJ,GACnB,OAAOA,EAET,GAAI8xJ,GAAyB9xJ,GAE3B,OADAA,EAAQ7xC,UAAU,GACX6xC,EAGPxxD,EAAKqgB,YACPznB,EAAW1B,aAAaooB,EAAUtf,EAAKqgB,aAEvCznB,EAAW+L,YAAY2a,GAc3B,OAAOA,GAELikM,GAAiB,SAAUp2K,GAC7B,IAAI5uB,EAAY4uB,EAAI5uB,YACpB,SAAK4uB,IAAQgQ,GAAS/9B,OAAOb,MAGtBA,EAAU9kB,KAAK60E,OAAOnhC,EAAIz6C,YAAcowN,GAAKH,MAAQx1K,EAAIq2K,aAAeN,GAAuB3kM,EAAUw+B,mBAE9G0mK,GAAgB,SAAUt2K,GAC5B,IAAI5uB,EAAY4uB,EAAI5uB,YACpB,SAAK4uB,IAAQgQ,GAAS/9B,OAAOb,MAGtBA,EAAU9kB,KAAK60E,OAAOnhC,EAAIz6C,SAAW,KAAOowN,GAAKH,MAAQx1K,EAAIu2K,WAAaR,GAAuB3kM,EAAU8B,eAEhHsjM,GAAgB,WAClB,IAAIxyI,EAAKv9E,EAAWwE,SAAS8uB,cAAc,MAE3C,OADAiqD,EAAGnmE,aAAa,iBAAkB,KAC3BmmE,GAELyyI,GAAc,SAAUp2J,EAAWxtD,EAAM5I,GAC3C,IAAI0pB,EAAK+iM,EAAWjrN,EAgBpB,OAfAkoB,EAAM9gB,EAAK46B,cACXipL,EAAY/iM,EAAIoG,cAAcsmC,GAC9Bq2J,EAAU74M,aAAa,iBAAkB5T,EAAS,SAAW,SAC7DysN,EAAU74M,aAAa,iBAAkB,OACzC64M,EAAUl/M,YAAYg/M,MACtB/qN,EAAaoH,EAAKpH,WACbxB,EAOHwB,EAAW1B,aAAa2sN,EAAW7jN,GAN/BA,EAAKqgB,YACPznB,EAAW1B,aAAa2sN,EAAW7jN,EAAKqgB,aAExCznB,EAAW+L,YAAYk/M,GAKpBA,GAELP,GAA2B,SAAUtjN,GACvC,OAAOgjN,GAAShjN,IAASA,EAAKvG,KAAK,KAAOqpN,GAAKH,MAE7CU,GAAyB,SAAUrjN,GACrC,OAAOgjN,GAAShjN,IAASA,EAAKvG,KAAKuG,EAAKvG,KAAKhC,OAAS,KAAOqrN,GAAKH,MAEhEmB,GAAc,SAAUxnN,GAC1B,IAAIynN,EAAMznN,EAAIoI,qBAAqB,MAC/Bs/M,EAASD,EAAIA,EAAItsN,OAAS,GAC1B0lD,GAASuxJ,QAAQsV,IACnBA,EAAOprN,WAAW+iB,YAAYqoM,IAG9BC,GAA0B,SAAUC,GACtC,OAAIA,GAAkBA,EAAexwK,aAAa,mBAChDowK,GAAYI,GACZA,EAAevgL,gBAAgB,kBAC/BugL,EAAevgL,gBAAgB,kBAC/BugL,EAAevgL,gBAAgB,SAC/BugL,EAAevgL,gBAAgB,eACxBugL,GAEF,MAELC,GAA+B,SAAUn5I,GAC3C,OAAOi4I,GAAsBj4I,EAAMxsD,iBAGjC4lM,GAA0BjnK,GAASw/H,sBACnC0nC,GAA2BlnK,GAAS60B,uBACpCsyI,GAASnnK,GAASZ,KAClBgoK,GAAWpnK,GAAS/9B,OACpBolM,GAAuBrnK,GAASgxJ,eAAe,yBAC/CsW,GAAiBtnK,GAASgxJ,eAAe,mDACzCuW,GAAYvnK,GAASgxJ,eAAe,SACpCwW,GAAqBxB,GACrByB,GAAmB,SAAU5kN,GAC/B,OAAI2kN,GAAmB3kN,KAGnBukN,GAASvkN,IACPwkN,GAAqBxkN,EAAKpH,YAKzB6rN,GAAezkN,IAASskN,GAAOtkN,IAAS0kN,GAAU1kN,IAAS6kN,GAA4B7kN,KAE5F8kN,GAAiB,SAAU9kN,GAC7B,OAAOm9C,GAASqM,UAAUxpD,IAA+C,SAAtCA,EAAKkM,aAAa,iBAEnD24M,GAA8B,SAAU7kN,GAC1C,OAAgC,IAAzB8kN,GAAe9kN,IAAmBqkN,GAAyBrkN,IAEhE+kN,GAAe,SAAU/kN,EAAM1I,GACjC,IAAK0I,EAAOA,EAAKpH,WAAYoH,GAAQA,IAAS1I,EAAM0I,EAAOA,EAAKpH,WAAY,CAC1E,GAAIisN,GAA4B7kN,GAC9B,OAAO,EAET,GAAIokN,GAAwBpkN,GAC1B,OAAO,EAGX,OAAO,GAELglN,GAA+B,SAAUhlN,GAC3C,QAAK6kN,GAA4B7kN,KAKnB,IAFP4+C,EAAMghB,GAAO5/D,EAAK0E,qBAAqB,OAAO,SAAUtS,EAAQkK,GACrE,OAAOlK,GAAUgyN,GAAwB9nN,MACxC,IAED2oN,GAAW,SAAUjlN,GACvB,OAAOykN,GAAezkN,IAASglN,GAA6BhlN,IAE1DklN,GAA2B,SAAUllN,EAAM1I,GAC7C,OAAOstN,GAAiB5kN,IAAS+kN,GAAa/kN,EAAM1I,IAGlDi7B,GAAQv9B,KAAKu9B,MACbw3B,GAAU,SAAU1vB,GACtB,OAAKA,EAUE,CACL2B,KAAMzJ,GAAM8H,EAAK2B,MACjBC,IAAK1J,GAAM8H,EAAK4B,KAChBwV,OAAQlf,GAAM8H,EAAKoX,QACnBq5G,MAAOv4H,GAAM8H,EAAKywH,OAClBhkI,MAAOyL,GAAM8H,EAAKvT,OAClBC,OAAQwL,GAAM8H,EAAKtT,SAfZ,CACLiV,KAAM,EACNC,IAAK,EACLwV,OAAQ,EACRq5G,MAAO,EACPhkI,MAAO,EACPC,OAAQ,IAYVvF,GAAW,SAAU6Y,EAAM8qL,GAS7B,OARA9qL,EAAO0vB,GAAQ1vB,GACX8qL,IAGF9qL,EAAK2B,KAAO3B,EAAK2B,KAAO3B,EAAKvT,OAF7BuT,EAAKywH,MAAQzwH,EAAK2B,KAKpB3B,EAAKvT,MAAQ,EACNuT,GAEL+qL,GAAU,SAAUC,EAAOC,GAC7B,OAAOD,EAAMrpL,OAASspL,EAAMtpL,MAAQqpL,EAAMppL,MAAQqpL,EAAMrpL,KAAOopL,EAAM5zK,SAAW6zK,EAAM7zK,QAAU4zK,EAAMv6D,QAAUw6D,EAAMx6D,OAEpHy6D,GAAkB,SAAUC,EAAWH,EAAOC,GAChD,OAAOE,GAAa,GAAKA,GAAaxwN,KAAKC,IAAIowN,EAAMt+L,OAAQu+L,EAAMv+L,QAAU,GAE3E0+L,GAAU,SAAUJ,EAAOC,GAC7B,IAAII,EAAa1wN,KAAKC,IAAIqwN,EAAMv+L,OAAS,EAAGs+L,EAAMt+L,OAAS,GAC3D,OAAIs+L,EAAM5zK,OAASi0K,EAAaJ,EAAMrpL,OAGlCopL,EAAMppL,IAAMqpL,EAAM7zK,SAGf8zK,GAAgBD,EAAMrpL,IAAMopL,EAAM5zK,OAAQ4zK,EAAOC,IAEtDK,GAAU,SAAUN,EAAOC,GAC7B,OAAID,EAAMppL,IAAMqpL,EAAM7zK,UAGlB4zK,EAAM5zK,OAAS6zK,EAAMrpL,MAGlBspL,GAAgBD,EAAM7zK,OAAS4zK,EAAMppL,IAAKopL,EAAOC,IAEtDM,GAAa,SAAUvrL,EAAMqT,EAASC,GACxC,OAAOD,GAAWrT,EAAK2B,MAAQ0R,GAAWrT,EAAKywH,OAASn9G,GAAWtT,EAAK4B,KAAO0R,GAAWtT,EAAKoX,QAE7Fo0K,GAAY,SAAUl7I,EAAOC,GAC/B,OAAIA,EAAM5uC,KAAO2uC,EAAM3uC,MAAQ4uC,EAAMkgF,MAAQngF,EAAMmgF,MAC1C,EAEAlgF,EAAM5uC,KAAO2uC,EAAM3uC,KAAO4uC,EAAM5uC,KAAO2uC,EAAM3uC,KAAO4uC,EAAMkgF,MAAQngF,EAAMmgF,OAG/E06D,GAAY,SAAU76I,EAAOC,GAC/B,OAAIA,EAAM3uC,IAAM0uC,EAAM1uC,KAAO2uC,EAAMn5B,OAASk5B,EAAMl5B,OACzC,EAEAm5B,EAAM3uC,IAAM0uC,EAAM1uC,IAAM2uC,EAAM3uC,IAAM0uC,EAAM1uC,IAAM2uC,EAAMn5B,OAASk5B,EAAMl5B,QAG5Eq0K,GAAc,SAAUn7I,EAAOC,GACjC,MAAO,CACLrgE,EAAGs7M,GAAUl7I,EAAOC,GACpBl6E,EAAG80N,GAAU76I,EAAOC,KAIpBm7I,GAAkB,SAAU/6I,GAC9B,IAAIxsD,EAAiBwsD,EAAMxsD,eAAgBG,EAAcqsD,EAAMrsD,YAC/D,OAAIH,EAAew/B,iBAAmBgtB,EAAMpsD,YAAcD,EAAc,EAC/DH,EAAexS,WAAW2S,GAE5B,MAELze,GAAU,SAAUqe,EAAW7rB,GAOjC,OAN2B,IAAvB6rB,EAAUE,UAAkBF,EAAUy/B,kBACpCtrD,GAAU6rB,EAAUvS,WAAWvU,SACjC/E,EAAS6rB,EAAUvS,WAAWvU,OAAS,GAEzC8mB,EAAYA,EAAUvS,WAAWtZ,IAE5B6rB,GAGLynM,GAAiB,IAAI16K,OAAO,weAC5B26K,GAAkB,SAAU/jM,GAC9B,MAAqB,kBAAPA,GAAmBA,EAAGgB,WAAW,IAAM,KAAO8iM,GAAettN,KAAKwpB,IAG9Es/B,GAAQ,SAAUC,EAAIC,EAAIjxC,GAC5B,OAAOgxC,EAAGtwC,UAAYuwC,EAAGvwC,SAAWqB,EAAOH,KAAK5B,EAAEgxC,EAAGnwC,WAAYowC,EAAGpwC,aAAekB,EAAO5B,QAExFs1M,GAAQ,SAAUzkK,EAAIC,EAAIykK,EAAI11M,GAChC,OAAOgxC,EAAGtwC,UAAYuwC,EAAGvwC,UAAYg1M,EAAGh1M,SAAWqB,EAAOH,KAAK5B,EAAEgxC,EAAGnwC,WAAYowC,EAAGpwC,WAAY60M,EAAG70M,aAAekB,EAAO5B,QAGtHw1M,GAAU,GAAGtrN,MACb8W,GAAK,WAEP,IADA,IAAIrH,EAAI,GACC8F,EAAK,EAAGA,EAAK7Y,UAAUC,OAAQ4Y,IACtC9F,EAAE8F,GAAM7Y,UAAU6Y,GAEpB,IAAInV,EAAOkrN,GAAQxvN,KAAKY,WACxB,OAAO,SAAU+S,GACf,IAAK,IAAIxS,EAAI,EAAGA,EAAImD,EAAKzD,OAAQM,IAC/B,GAAImD,EAAKnD,GAAGwS,GACV,OAAO,EAGX,OAAO,IAGP87M,GAAM,WAER,IADA,IAAI97M,EAAI,GACC8F,EAAK,EAAGA,EAAK7Y,UAAUC,OAAQ4Y,IACtC9F,EAAE8F,GAAM7Y,UAAU6Y,GAEpB,IAAInV,EAAOkrN,GAAQxvN,KAAKY,WACxB,OAAO,SAAU+S,GACf,IAAK,IAAIxS,EAAI,EAAGA,EAAImD,EAAKzD,OAAQM,IAC/B,IAAKmD,EAAKnD,GAAGwS,GACX,OAAO,EAGX,OAAO,IAGP+7M,GAAY,CACdD,IAAKA,GACLz0M,GAAIA,IAGF20M,GAAcppK,GAASqM,UACvBg9J,GAAqB5B,GACrBh6C,GAAYztH,GAASixJ,iBAAiB,UAAW,eACjDqY,GAAYtpK,GAASixJ,iBAAiB,QAAS,cAC/CsY,GAA+BJ,GAAUD,IAAIE,GAAaC,GAAoBh2M,EAAIi2M,KAClFE,GAAWn2M,EAAI2sC,GAASixJ,iBAAiB,cAAe,0BACxDwY,GAAWzpK,GAAS/9B,OACpBynM,GAAS1pK,GAASZ,KAClB4B,GAAYggK,GAAWhgK,UACvB2oK,GAAe5mN,GACf4e,GAAc,SAAUgC,GAC1B,MAAO,gBAAiBA,EAAMA,EAAIhC,cAAgBq/L,GAAWjpN,IAAIsqB,aAE/DunM,GAAe,SAAU9jM,GAC3B,OAAOA,GAAO,YAAYvqB,KAAKuqB,IAE7B+jM,GAAU,SAAU5oM,GACtB,QAASA,EAAIW,YAAcX,EAAIY,QAE7BioM,GAA0B,SAAUj8I,GACtC,IAEIhxE,EAFAukB,EAAYysD,EAAMxsD,eAClB9rB,EAASs4E,EAAMrsD,YAEnB,SAAIooM,GAAa/7I,EAAMr0E,aAAegwN,GAASpoM,EAAU3lB,aAAeukD,GAAS/9B,OAAOb,KACtFvkB,EAAOukB,EAAU9kB,KACbstN,GAAa/sN,EAAKtH,EAAS,KAAOq0N,GAAa/sN,EAAKtH,EAAS,OAMjEw0N,GAAkB,SAAUC,GAC9B,IAIIC,EAJAtmM,EAAMqmM,EAAOvsL,cACbxc,EAAMU,GAAYgC,GAClBumM,EAAOvmM,EAAIhd,eAAe,KAC1BlL,EAAauuN,EAAOvuN,WAOxB,OALAA,EAAW1B,aAAamwN,EAAMF,GAC9B/oM,EAAIW,SAASsoM,EAAM,GACnBjpM,EAAIY,OAAOqoM,EAAM,GACjBD,EAAar9J,GAAQ3rC,EAAIw0F,yBACzBh6G,EAAW+iB,YAAY0rM,GAChBD,GAELE,GAAkC,SAAUlpM,GAC9C,IAAIspI,EAAKtpI,EAAII,eACT+oM,EAAKnpM,EAAIs/B,aACT8pK,EAAKppM,EAAIO,YACT6wD,EAAKpxD,EAAIQ,UACb,GAAI8oI,IAAO6/D,GAAMpqK,GAAS/9B,OAAOmoM,IAAc,IAAPC,GAAmB,IAAPh4I,EAAU,CAC5D,IAAIjwD,EAASnB,EAAIm/B,aAEjB,OADAh+B,EAAO2vC,YAAYq4J,GACZ30G,GAAsBrzF,GAE7B,OAAO,MAGPkoM,GAAa,SAAUr0M,GACzB,OAAkB,IAAXA,EAAE4oB,MAA0B,IAAZ5oB,EAAE03I,OAAyB,IAAV13I,EAAE6oB,KAA0B,IAAb7oB,EAAEq+B,QAEvDmhE,GAAwB,SAAUnkE,GACpC,IAAI24K,EAAYM,EAOhB,OANAA,EAAcj5K,EAAKgzI,iBAEjB2lC,EADEM,EAAYjwN,OAAS,EACVsyD,GAAQ29J,EAAY,IAEpB39J,GAAQtb,EAAKmkE,0BAEvBo0G,GAAQv4K,IAASo4K,GAAOp4K,IAASg5K,GAAWL,GACxCF,GAAgBz4K,GAErBg5K,GAAWL,IAAeJ,GAAQv4K,GAC7B64K,GAAgC74K,GAElC24K,GAELO,GAA0B,SAAUP,EAAYjC,GAClD,IAAIyC,EAAgBpmM,GAAS4lM,EAAYjC,GAGzC,OAFAyC,EAAc9gM,MAAQ,EACtB8gM,EAAc98D,MAAQ88D,EAAc5rL,KAAO,EACpC4rL,GAELC,GAA8B,SAAUC,GAC1C,IACIC,EAAY/nN,EADZ0nN,EAAc,GAEdM,EAAwB,SAAUZ,GACV,IAAtBA,EAAWrgM,SAGX2gM,EAAYjwN,OAAS,GACnB2tN,GAAQgC,EAAYM,EAAYA,EAAYjwN,OAAS,KAI3DiwN,EAAYvsN,KAAKisN,KAEfa,EAAqB,SAAU1pM,EAAW7rB,GAC5C,IAAIs4E,EAAQlsD,GAAYP,EAAUqc,eAClC,GAAIloC,EAAS6rB,EAAU9kB,KAAKhC,OAAQ,CAClC,GAAIwuN,GAAgB1nM,EAAU9kB,KAAK/G,IACjC,OAAOg1N,EAET,GAAIzB,GAAgB1nM,EAAU9kB,KAAK/G,EAAS,MAC1Cs4E,EAAMjsD,SAASR,EAAW7rB,GAC1Bs4E,EAAMhsD,OAAOT,EAAW7rB,EAAS,IAC5Bu0N,GAAwBj8I,IAE3B,OADAg9I,EAAsBL,GAAwB/0G,GAAsB5nC,IAAQ,IACrE08I,EAITh1N,EAAS,IACXs4E,EAAMjsD,SAASR,EAAW7rB,EAAS,GACnCs4E,EAAMhsD,OAAOT,EAAW7rB,GACnBu0N,GAAwBj8I,IAC3Bg9I,EAAsBL,GAAwB/0G,GAAsB5nC,IAAQ,KAG5Et4E,EAAS6rB,EAAU9kB,KAAKhC,SAC1BuzE,EAAMjsD,SAASR,EAAW7rB,GAC1Bs4E,EAAMhsD,OAAOT,EAAW7rB,EAAS,GAC5Bu0N,GAAwBj8I,IAC3Bg9I,EAAsBL,GAAwB/0G,GAAsB5nC,IAAQ,MAIlF,GAAI47I,GAASkB,EAAcvpM,aAEzB,OADA0pM,EAAmBH,EAAcvpM,YAAaupM,EAAcp1N,UACrDg1N,EAET,GAAInB,GAAYuB,EAAcvpM,aAC5B,GAAIupM,EAAcpE,UAChB1jN,EAAO8mN,GAAagB,EAAcvpM,YAAaupM,EAAcp1N,UACzDk0N,GAAS5mN,IACXioN,EAAmBjoN,EAAMA,EAAKvG,KAAKhC,QAEjCivN,GAA6B1mN,KAAU6mN,GAAO7mN,IAChDgoN,EAAsBL,GAAwB/0G,GAAsB5yG,IAAO,QAExE,CAKL,GAJAA,EAAO8mN,GAAagB,EAAcvpM,YAAaupM,EAAcp1N,UACzDk0N,GAAS5mN,IACXioN,EAAmBjoN,EAAM,GAEvB0mN,GAA6B1mN,IAAS8nN,EAAcpE,UAEtD,OADAsE,EAAsBL,GAAwB/0G,GAAsB5yG,IAAO,IACpE0nN,EAETK,EAAajB,GAAagB,EAAcvpM,YAAaupM,EAAcp1N,SAAW,GAC1Eg0N,GAA6BqB,KAAgBlB,GAAOkB,KAClDn9C,GAAUm9C,IAAen9C,GAAU5qK,KAAU0mN,GAA6B1mN,KAC5EgoN,EAAsBL,GAAwB/0G,GAAsBm1G,IAAa,IAGjFrB,GAA6B1mN,IAC/BgoN,EAAsBL,GAAwB/0G,GAAsB5yG,IAAO,IAIjF,OAAO0nN,GAET,SAASQ,GAAc3pM,EAAW7rB,EAAQg1N,GACxC,IAAIlE,EAAY,WACd,OAAIoD,GAASroM,GACO,IAAX7rB,GAIPgxN,EAAU,WACZ,OAAIkD,GAASroM,GACJ7rB,GAAU6rB,EAAU9kB,KAAKhC,OAE3B/E,GAAU6rB,EAAUvS,WAAWvU,QAEpC0wN,EAAU,WACZ,IAAIn9I,EAIJ,OAHAA,EAAQlsD,GAAYP,EAAUqc,eAC9BowC,EAAMjsD,SAASR,EAAW7rB,GAC1Bs4E,EAAMhsD,OAAOT,EAAW7rB,GACjBs4E,GAELy2G,EAAiB,WAInB,OAHKimC,IACHA,EAAcG,GAA4BK,GAAc3pM,EAAW7rB,KAE9Dg1N,GAELU,EAAY,WACd,OAAO3mC,IAAiBhqL,OAAS,GAE/B2tN,EAAU,SAAU0C,GACtB,OAAOA,GAAiBvpM,IAAcupM,EAAcvpM,aAAe7rB,IAAWo1N,EAAcp1N,UAE1FwN,EAAU,SAAU9I,GACtB,OAAO0vN,GAAavoM,EAAWnnB,EAAS1E,EAAS,EAAIA,IAEvD,MAAO,CACL6rB,UAAWpf,EAASof,GACpB7rB,OAAQyM,EAASzM,GACjBy1N,QAASA,EACT1mC,eAAgBA,EAChB2mC,UAAWA,EACX5E,UAAWA,EACXE,QAASA,EACT0B,QAASA,EACTllN,QAASA,IAGZ,SAAUgoN,GACTA,EAAcG,eAAiB,SAAUr9I,GACvC,OAAOk9I,EAAcl9I,EAAMxsD,eAAgBwsD,EAAMrsD,cAEnDupM,EAAcI,aAAe,SAAUt9I,GACrC,OAAOk9I,EAAcl9I,EAAMttB,aAAcstB,EAAMpsD,YAEjDspM,EAAcjtN,MAAQ,SAAU+E,GAC9B,OAAOkoN,EAAcloN,EAAKpH,WAAYulD,GAAUn+C,GAAQ,IAE1DkoN,EAAc9wN,OAAS,SAAU4I,GAC/B,OAAOkoN,EAAcloN,EAAKpH,WAAYulD,GAAUn+C,KAElDkoN,EAAczC,QAAU,SAAUtiF,EAAMC,GACtC,OAAO5hF,GAAMxpC,GAAKorH,EAAKq+C,kBAAmBn3K,GAAK64H,EAAKs+C,kBAAmBgkC,IAASr0M,OAAM,IAExF82M,EAAcvC,QAAU,SAAUxiF,EAAMC,GACtC,OAAO5hF,GAAMl3C,GAAK84H,EAAKq+C,kBAAmBzpK,GAAKmrH,EAAKs+C,kBAAmBkkC,IAASv0M,OAAM,IAExF82M,EAAc1E,UAAY,SAAUr2K,GAClC,QAAOA,GAAMA,EAAIq2K,aAEnB0E,EAAcxE,QAAU,SAAUv2K,GAChC,QAAOA,GAAMA,EAAIu2K,WAEnBwE,EAAcK,eAAiB,SAAUp7K,GACvC,QAAOA,GAAMgQ,GAAS/9B,OAAO+tB,EAAI5uB,cAEnC2pM,EAAcM,kBAAoB,SAAUr7K,GAC1C,OAA6C,IAAtC+6K,EAAcK,eAAep7K,KA7BxC,CA+BE+6K,KAAkBA,GAAgB,KACpC,IAy0BIO,GAz0BAC,GAAkBR,GAElBS,GAAWxrK,GAAS/9B,OACpBwpM,GAAYzrK,GAASuxJ,QACrBma,GAAc1K,GAAWhgK,UACzB2qK,GAAmB,SAAU9oN,GAC/B,IAAIpH,EAAaoH,EAAKpH,WACtB,OAAIgwN,GAAUhwN,GACLkwN,GAAiBlwN,GAEnBA,GAELmwN,GAAgB,SAAU/oN,GAC5B,OAAKA,EAGE+lM,GAAS9hK,OAAOjkC,EAAKgM,YAAY,SAAU5Z,EAAQ4N,GAMxD,OALI4oN,GAAU5oN,IAA2B,OAAlBA,EAAKnH,SAC1BzG,EAASA,EAAOme,OAAOw4M,GAAc/oN,IAErC5N,EAAO+I,KAAK6E,GAEP5N,IACN,IATM,IAWP42N,GAAuB,SAAUhpN,EAAMtN,GACzC,MAAOsN,EAAOA,EAAK+8C,gBAAiB,CAClC,IAAK4rK,GAAS3oN,GACZ,MAEFtN,GAAUsN,EAAKvG,KAAKhC,OAEtB,OAAO/E,GAELu2N,GAAQ,SAAU95M,GACpB,OAAO,SAAUtB,GACf,OAAOsB,IAAMtB,IAGbq7M,GAAsB,SAAUlpN,GAClC,IAAIuH,EAAO1M,EAAOsuN,EAYlB,OAXA5hN,EAAQwhN,GAAcD,GAAiB9oN,IACvCnF,EAAQkrM,GAASrwI,UAAUnuD,EAAO0hN,GAAMjpN,GAAOA,GAC/CuH,EAAQA,EAAMzM,MAAM,EAAGD,EAAQ,GAC/BsuN,EAAmBpjB,GAAS9hK,OAAO18B,GAAO,SAAUnV,EAAQ4N,EAAMjI,GAIhE,OAHI4wN,GAAS3oN,IAAS2oN,GAASphN,EAAMxP,EAAI,KACvC3F,IAEKA,IACN,GACHmV,EAAQw+L,GAAS9iM,OAAOsE,EAAO41C,GAASgxJ,eAAenuM,EAAKnH,WAC5DgC,EAAQkrM,GAASrwI,UAAUnuD,EAAO0hN,GAAMjpN,GAAOA,GACxCnF,EAAQsuN,GAEbC,GAAiB,SAAUppN,GAC7B,IAAIrN,EAMJ,OAJEA,EADEg2N,GAAS3oN,GACJ,SAEAA,EAAKnH,SAAS+f,cAEhBjmB,EAAO,IAAMu2N,GAAoBlpN,GAAQ,KAE9C+oM,GAAe,SAAUzxM,EAAM0I,EAAM2iB,GACvC,IAAIkzC,EAAU,GACd,IAAK71D,EAAOA,EAAKpH,WAAYoH,IAAS1I,EAAM0I,EAAOA,EAAKpH,WAAY,CAClE,GAAI+pB,GAAaA,EAAU3iB,GACzB,MAEF61D,EAAQ16D,KAAK6E,GAEf,OAAO61D,GAELp5B,GAAW,SAAUnlC,EAAMwwN,GAC7B,IAAIvpM,EAAW7rB,EAAmB22N,EAAcr9M,EAAY6pD,EAArCx+B,EAAO,GAqB9B,OApBA9Y,EAAYupM,EAAcvpM,YAC1B7rB,EAASo1N,EAAcp1N,SACnBi2N,GAASpqM,GACX8qM,EAAeL,GAAqBzqM,EAAW7rB,IAE/CsZ,EAAauS,EAAUvS,WACnBtZ,GAAUsZ,EAAWvU,QACvB4xN,EAAe,QACf32N,EAASsZ,EAAWvU,OAAS,GAE7B4xN,EAAe,SAEjB9qM,EAAYvS,EAAWtZ,IAEzB2kC,EAAKl8B,KAAKiuN,GAAe7qM,IACzBs3C,EAAUkzI,GAAazxM,EAAMinB,GAC7Bs3C,EAAUkwI,GAAS9iM,OAAO4yD,EAASrlD,EAAI2sC,GAASuxJ,UAChDr3K,EAAOA,EAAK9mB,OAAOw1L,GAASzvM,IAAIu/D,GAAS,SAAU71D,GACjD,OAAOopN,GAAeppN,OAEjBq3B,EAAKmJ,UAAU7kC,KAAK,KAAO,IAAM0tN,GAEtCC,GAAkB,SAAUtpN,EAAMrN,EAAMkI,GAC1C,IAAI0M,EAAQwhN,GAAc/oN,GAK1B,OAJAuH,EAAQw+L,GAAS9iM,OAAOsE,GAAO,SAAUvH,EAAMnF,GAC7C,OAAQ8tN,GAAS3oN,KAAU2oN,GAASphN,EAAM1M,EAAQ,OAEpD0M,EAAQw+L,GAAS9iM,OAAOsE,EAAO41C,GAASgxJ,eAAex7M,IAChD4U,EAAM1M,IAEX0uN,GAAmB,SAAUhrM,EAAW7rB,GAC1C,IAAwC82N,EAApCxpN,EAAOue,EAAWkrM,EAAe,EACrC,MAAOd,GAAS3oN,GAAO,CAErB,GADAwpN,EAAUxpN,EAAKvG,KAAKhC,OAChB/E,GAAU+2N,GAAgB/2N,GAAU+2N,EAAeD,EAAS,CAC9DjrM,EAAYve,EACZtN,GAAkB+2N,EAClB,MAEF,IAAKd,GAAS3oN,EAAKqgB,aAAc,CAC/B9B,EAAYve,EACZtN,EAAS82N,EACT,MAEFC,GAAgBD,EAChBxpN,EAAOA,EAAKqgB,YAKd,OAHIsoM,GAASpqM,IAAc7rB,EAAS6rB,EAAU9kB,KAAKhC,SACjD/E,EAAS6rB,EAAU9kB,KAAKhC,QAEnBixN,GAAgBnqM,EAAW7rB,IAEhCg3N,GAAY,SAAUpyN,EAAM+/B,GAC9B,IAAIC,EAAO/Y,EAAW7rB,EACtB,OAAK2kC,GAGLC,EAAQD,EAAK3oC,MAAM,KACnB2oC,EAAOC,EAAM,GAAG5oC,MAAM,KACtBgE,EAAS4kC,EAAM7/B,OAAS,EAAI6/B,EAAM,GAAK,SACvC/Y,EAAYwnL,GAAS9hK,OAAO5M,GAAM,SAAUjlC,EAAQ2B,GAElD,OADAA,EAAQ,4BAA4BrC,KAAKqC,GACpCA,GAGY,WAAbA,EAAM,KACRA,EAAM,GAAK,SAENu1N,GAAgBl3N,EAAQ2B,EAAM,GAAIX,SAASW,EAAM,GAAI,MALnD,OAMRuD,GACEinB,EAGAoqM,GAASpqM,GAQPgrM,GAAiBhrM,EAAWnrB,SAASV,EAAQ,MANhDA,EADa,UAAXA,EACOm2N,GAAYtqM,GAAa,EAEzBsqM,GAAYtqM,GAEhBmqM,GAAgBnqM,EAAU3lB,WAAYlG,IARtC,MAhBA,MA6BPi3N,GAAoB,SAAUrpN,EAAKN,GACjCm9C,GAAS/9B,OAAOpf,IAA8B,IAArBA,EAAKvG,KAAKhC,QACrC6I,EAAI+I,OAAOrJ,IAGX4hB,GAAa,SAAUthB,EAAK8d,EAAKpe,GACnCoe,EAAIwD,WAAW5hB,GACf2pN,GAAkBrpN,EAAKN,EAAK+8C,iBAC5B4sK,GAAkBrpN,EAAKN,EAAKqgB,cAE1BupM,GAAiB,SAAUtpN,EAAK8d,EAAKgpL,GACvC,IAAIn7L,EAAauG,EAAO5X,KAAKwsM,EAAKn7L,YAC9BywC,EAAYlqC,EAAO5X,KAAKwsM,EAAK1qJ,WACjCt+B,EAAIwD,WAAWwlL,GACfn7L,EAAW/I,MAAK,SAAUgmD,GACxB,OAAOygK,GAAkBrpN,EAAK4oD,EAAMnM,oBAEtCL,EAAUx5C,MAAK,SAAUgmD,GACvB,OAAOygK,GAAkBrpN,EAAK4oD,EAAM7oC,iBAGpCwpM,GAAkB,SAAUvpN,EAAK8d,EAAKpe,GACpCm9C,GAAS4xJ,mBAAmB/uM,GAC9B4pN,GAAetpN,EAAK8d,EAAKpe,GAEzB4hB,GAAWthB,EAAK8d,EAAKpe,IAIrB8pN,GAA2B3sK,GAAS60B,uBACpC+3I,GAA0B,SAAUzmN,EAAMib,EAAW7rB,GACvD,IAAIsN,EAAMgqN,EAEV,IADAA,EAAgB1mN,EAAKib,EAAU9kB,KAAKqB,MAAM,EAAGpI,IAAS+E,OACjDuI,EAAOue,EAAUw+B,gBAAiB/8C,GAAQm9C,GAAS/9B,OAAOpf,GAAOA,EAAOA,EAAK+8C,gBAChFitK,GAAiB1mN,EAAKtD,EAAKvG,MAAMhC,OAEnC,OAAOuyN,GAELC,GAAW,SAAU3pN,EAAKgD,EAAMmyC,EAAYr3B,EAAKxB,GACnD,IAGI5Q,EAHAuS,EAAYH,EAAIxB,EAAQ,iBAAmB,gBAC3ClqB,EAAS0rB,EAAIxB,EAAQ,cAAgB,aACrC6uE,EAAQ,GACIxwF,EAAQ,EACpB3D,EAAOgJ,EAAI06C,UAWf,IAVImC,GAAS/9B,OAAOb,GAClBktE,EAAMtwF,KAAKs6C,EAAas0K,GAAwBzmN,EAAMib,EAAW7rB,GAAUA,IAE3EsZ,EAAauS,EAAUvS,WACnBtZ,GAAUsZ,EAAWvU,QAAUuU,EAAWvU,SAC5CwD,EAAQ,EACRvI,EAASsC,KAAKssB,IAAI,EAAGtV,EAAWvU,OAAS,IAE3Cg0F,EAAMtwF,KAAKmF,EAAI69C,UAAUnyC,EAAWtZ,GAAS+iD,GAAcx6C,IAEtDsjB,GAAaA,IAAcjnB,EAAMinB,EAAYA,EAAU3lB,WAC5D6yF,EAAMtwF,KAAKmF,EAAI69C,UAAU5/B,EAAWk3B,IAEtC,OAAOg2C,GAELy+H,GAAc,SAAU5mN,EAAMrD,EAAWw1C,EAAYr3B,GACvD,IAAI9d,EAAML,EAAUK,IAAKu9C,EAAW,GAKpC,OAJAA,EAASjhC,MAAQqtM,GAAS3pN,EAAKgD,EAAMmyC,EAAYr3B,GAAK,GACjDne,EAAU0C,gBACbk7C,EAASrgC,IAAMysM,GAAS3pN,EAAKgD,EAAMmyC,EAAYr3B,GAAK,IAE/Cy/B,GAELssK,GAAc,SAAU7pN,EAAK3N,EAAM2F,GACrC,IAAIkS,EAAQ,EAUZ,OATAlW,GAAM4O,KAAK5C,EAAIE,OAAO7N,IAAO,SAAUqN,GACrC,GAA4C,QAAxCA,EAAKkM,aAAa,kBAGtB,OAAIlM,IAAS1H,QAGbkS,OAEKA,GAEL4/M,GAAe,SAAUhsM,EAAKxB,GAChC,IAAI2B,EAAW7rB,EAAQsZ,EACnBpG,EAASgX,EAAQ,QAAU,MAC/B2B,EAAYH,EAAIxY,EAAS,aACzBlT,EAAS0rB,EAAIxY,EAAS,UAClBu3C,GAASqM,UAAUjrC,IAAqC,OAAvBA,EAAU1lB,WAC7CmT,EAAauS,EAAUvS,WACvBuS,EAAYvS,EAAWhX,KAAKC,IAAI2nB,EAAQlqB,EAASA,EAAS,EAAGsZ,EAAWvU,OAAS,IAC7E8mB,IACF7rB,EAASkqB,EAAQ,EAAI2B,EAAUvS,WAAWvU,OAC1C2mB,EAAI,OAASxB,EAAQ,QAAU,QAAQ2B,EAAW7rB,MAIpD23N,GAA8B,SAAUjsM,GAG1C,OAFAgsM,GAAahsM,GAAK,GAClBgsM,GAAahsM,GAAK,GACXA,GAEL2uL,GAAc,SAAU/sM,EAAMtN,GAChC,IAAI8+D,EACJ,GAAIrU,GAASqM,UAAUxpD,KACrBA,EAAOE,GAAQF,EAAMtN,GACjBo3N,GAAyB9pN,IAC3B,OAAOA,EAGX,GAAImjN,GAAiBnjN,GAAO,CAK1B,GAJIm9C,GAAS/9B,OAAOpf,IAASijN,GAAsBjjN,KACjDA,EAAOA,EAAKpH,YAEd44D,EAAUxxD,EAAK+8C,gBACX+sK,GAAyBt4J,GAC3B,OAAOA,EAGT,GADAA,EAAUxxD,EAAKqgB,YACXypM,GAAyBt4J,GAC3B,OAAOA,IAIT84J,GAAsC,SAAUlsM,GAClD,OAAO2uL,GAAY3uL,EAAII,eAAgBJ,EAAIO,cAAgBouL,GAAY3uL,EAAIs/B,aAAct/B,EAAIQ,YAE3F2rM,GAAoB,SAAUjnN,EAAMmyC,EAAYx1C,GAClD,IAAI3H,EAAU2H,EAAUC,UACpBvN,EAAO2F,EAAUA,EAAQO,SAAW,KACpCulB,EAAMne,EAAUugB,SACpB,GAAIspM,GAAyBxxN,IAAqB,QAAT3F,EACvC,MAAO,CACLA,KAAMA,EACNkI,MAAOsvN,GAAYlqN,EAAUK,IAAK3N,EAAM2F,IAG5C,IAAIk5D,EAAU84J,GAAoClsM,GAClD,OAAIozC,GACF7+D,EAAO6+D,EAAQ/rD,QACR,CACL9S,KAAMA,EACNkI,MAAOsvN,GAAYlqN,EAAUK,IAAK3N,EAAM6+D,KAGrC04J,GAAY5mN,EAAMrD,EAAWw1C,EAAYr3B,IAE9CosM,GAAmB,SAAUvqN,GAC/B,IAAIme,EAAMne,EAAUugB,SACpB,MAAO,CACL5D,MAAO6f,GAASx8B,EAAUK,IAAI06C,UAAW0tK,GAAgBL,eAAejqM,IACxEZ,IAAKif,GAASx8B,EAAUK,IAAI06C,UAAW0tK,GAAgBJ,aAAalqM,MAGpEqsM,GAAmB,SAAUxqN,GAC/B,MAAO,CAAEme,IAAKne,EAAUugB,WAEtBkqM,GAAqB,SAAUpqN,EAAKtJ,EAAI2zN,GAC1C,IAAIzvN,EAAO,CACT,gBAAiB,WACjB,GAAMlE,EACN,MAAS,mCAEX,OAAO2zN,EAASrqN,EAAIiE,OAAO,OAAQrJ,EAAM,YAAcoF,EAAIiE,OAAO,OAAQrJ,IAExE0vN,GAAwB,SAAU3qN,EAAW0qN,GAC/C,IAAIrqN,EAAML,EAAUK,IAChB8d,EAAMne,EAAUugB,SAChBxpB,EAAKsJ,EAAImK,WACT6T,EAAYre,EAAU0C,cACtBrK,EAAU2H,EAAUC,UACpBvN,EAAO2F,EAAQO,SACnB,GAAa,QAATlG,EACF,MAAO,CACLA,KAAMA,EACNkI,MAAOsvN,GAAY7pN,EAAK3N,EAAM2F,IAGlC,IAAIuyN,EAAOR,GAA4BjsM,EAAIm/B,cAC3C,IAAKj/B,EAAW,CACdusM,EAAKrpM,UAAS,GACd,IAAIspM,EAAkBJ,GAAmBpqN,EAAKtJ,EAAK,OAAQ2zN,GAC3Dd,GAAgBvpN,EAAKuqN,EAAMC,GAE7B1sM,EAAMisM,GAA4BjsM,GAClCA,EAAIoD,UAAS,GACb,IAAIupM,EAAoBL,GAAmBpqN,EAAKtJ,EAAK,SAAU2zN,GAM/D,OALAd,GAAgBvpN,EAAK8d,EAAK2sM,GAC1B9qN,EAAU4vD,eAAe,CACvB74D,GAAIA,EACJg0N,KAAM,IAED,CAAEh0N,GAAIA,IAEX44D,GAAc,SAAU3vD,EAAW9J,EAAMs/C,GAC3C,OAAa,IAATt/C,EACKo0N,GAAkBzH,GAAKx/M,KAAMmyC,EAAYx1C,GAC9B,IAAT9J,EACFq0N,GAAiBvqN,GACf9J,EACFs0N,GAAiBxqN,GAEjB2qN,GAAsB3qN,GAAW,IAGxCgrN,GAAc,CAChBr7J,YAAaA,GACbs7J,gBAAiBh7M,EAAMq6M,GAAmBj8L,GAAU,GACpDs8L,sBAAuBA,IAGrBO,GAAW,aACXC,GAAc,SAAUprN,GAC1B,OAAOm9C,GAASqM,UAAUxpD,IAASA,EAAKhJ,KAAOm0N,IAE7CE,GAA0B,SAAUtpN,EAAM/B,GAC5C,MAAOA,GAAQA,IAAS+B,EAAM,CAC5B,GAAI/B,EAAKhJ,KAAOm0N,GACd,OAAOnrN,EAETA,EAAOA,EAAKpH,WAEd,OAAO,MAGL0yN,GAAcnuK,GAASqM,UACvB+hK,GAAWpuK,GAAS/9B,OACpBosM,GAAa,SAAUxrN,GACzB,IAAIpH,EAAaoH,EAAKpH,WAClBA,GACFA,EAAW+iB,YAAY3b,IAGvByrN,GAAe,SAAUzrN,GAC3B,IACE,OAAOA,EAAKgxH,UACZ,MAAOznG,GACP,MAAO,KAGPmiM,GAAe,SAAU1rN,EAAMhG,GACb,IAAhBA,EAAKvC,OACP+zN,GAAWxrN,GAEXA,EAAKgxH,UAAYh3H,GAGjB2xN,GAAY,SAAU3xN,GACxB,IAAI4xN,EAAc9I,GAAKx/M,KAAKtJ,GAC5B,MAAO,CACLwQ,MAAOxQ,EAAKvC,OAASm0N,EAAYn0N,OACjCuC,KAAM4xN,IAGNC,GAAkB,SAAU3H,EAAgB/2K,GAE9C,OADA6sH,GAASkqD,GACF/2K,GAEL2+K,GAA0B,SAAU5H,EAAgB/2K,GACtD,IAAI/1C,EAASu0N,GAAUzH,EAAezqN,KAAKukB,OAAO,EAAGmvB,EAAIz6C,WACrDuI,EAAQ0wN,GAAUzH,EAAezqN,KAAKukB,OAAOmvB,EAAIz6C,WACjDsH,EAAO5C,EAAO4C,KAAOiB,EAAMjB,KAC/B,OAAIA,EAAKvC,OAAS,GAChBi0N,GAAaxH,EAAgBlqN,GACtB0uN,GAAgBxE,EAAgB/2K,EAAIz6C,SAAW0E,EAAOoT,QAEtD2iC,GAGP4+K,GAA6B,SAAU7H,EAAgB/2K,GACzD,IAAIv0C,EAAau0C,EAAI5uB,YACjBytM,EAAczvN,EAAQqjE,GAAOhnE,EAAWoT,YAAak4M,GAAgB5tN,KAAI,SAAUuE,GACrF,OAAOA,EAAQsyC,EAAIz6C,SAAWg2N,GAAgB9vN,EAAYu0C,EAAIz6C,SAAW,GAAKy6C,KAC7E/7B,MAAM+7B,GAET,OADA6sH,GAASkqD,GACF8H,GAELC,GAA2B,SAAU/H,EAAgB/2K,GACvD,OAAOo+K,GAASrH,IAAmB/2K,EAAI5uB,cAAgB2lM,EAAiB4H,GAAwB5H,EAAgB/2K,GAAO0+K,GAAgB3H,EAAgB/2K,IAErJ++K,GAA8B,SAAUhI,EAAgB/2K,GAC1D,OAAOA,EAAI5uB,cAAgB2lM,EAAetrN,WAAamzN,GAA2B7H,EAAgB/2K,GAAO0+K,GAAgB3H,EAAgB/2K,IAEvIg/K,GAAsB,SAAU5tM,EAAW4uB,GAC7C,OAAOu7K,GAAgBH,eAAep7K,GAAO8+K,GAAyB1tM,EAAW4uB,GAAO++K,GAA4B3tM,EAAW4uB,IAE7H6sH,GAAW,SAAUoyD,GAQvB,GAPId,GAAYc,IAAuBjJ,GAAiBiJ,KAClDnuM,GAAWmuM,GACbA,EAAmBzoL,gBAAgB,kBAEnC6nL,GAAWY,IAGXb,GAASa,GAAqB,CAChC,IAAIpyN,EAAO8oN,GAAKx/M,KAAKmoN,GAAaW,IAClCV,GAAaU,EAAoBpyN,KAGjCqyN,GAAuB,CACzBF,oBAAqBA,GACrB9iN,OAAQ2wJ,IAGNsyD,GAAY/kK,GAAoBvE,SAAS0C,QACzC6mK,GAA2BpvK,GAAS60B,uBACpCw6I,GAAgB,SAAUxsN,GAC5B,OAAOm9C,GAASqM,UAAUxpD,IAAS,aAAatH,KAAKsH,EAAKyF,UAExDgnN,GAAwB,SAAUn1N,EAAMgB,EAASlB,GACnD,IACIiqD,EAAQqrK,EAASC,EAASx6K,EAAQy6K,EADlCxF,EAAa5lM,GAASlpB,EAAQs6G,wBAAyBx7G,GAwB3D,MAtBqB,SAAjBE,EAAKmO,SACP47C,EAAS/pD,EAAKsjC,cAAcu8C,gBAC5Bu1I,EAAUp1N,EAAK02C,YAAcqT,EAAOrT,WACpC2+K,EAAUr1N,EAAK22C,WAAaoT,EAAOpT,YAEnC2+K,EAAWt1N,EAAKs7G,wBAChB85G,EAAUp1N,EAAK02C,WAAa4+K,EAAS5wL,KACrC2wL,EAAUr1N,EAAK22C,UAAY2+K,EAAS3wL,KAEtCmrL,EAAWprL,MAAQ0wL,EACnBtF,EAAWt8D,OAAS4hE,EACpBtF,EAAWnrL,KAAO0wL,EAClBvF,EAAW31K,QAAUk7K,EACrBvF,EAAWtgM,MAAQ,EACnBqrB,EAAS75C,EAAQ4lC,YAAc5lC,EAAQylC,YACnCoU,EAAS,IACP/6C,IACF+6C,IAAW,GAEbi1K,EAAWprL,MAAQmW,EACnBi1K,EAAWt8D,OAAS34G,GAEfi1K,GAELyF,GAA4B,SAAUv1N,GACxC,IAAIw1N,EAA2B9sN,EAAMwxD,EAASz5D,EAAG0B,EAEjD,IADAqzN,EAA4BrlB,GAAS,2BAA4BnwM,GAC5DS,EAAI,EAAGA,EAAI+0N,EAA0Br1N,OAAQM,IAChDiI,EAAO8sN,EAA0B/0N,GACjCy5D,EAAUxxD,EAAK+8C,gBACXsmK,GAAuB7xJ,KACzB/3D,EAAO+3D,EAAQ/3D,KACK,IAAhBA,EAAKhC,OACP+5D,EAAQ54D,WAAW+iB,YAAY61C,GAE/BA,EAAQ5xC,WAAWnmB,EAAKhC,OAAS,EAAG,IAGxC+5D,EAAUxxD,EAAKqgB,YACXijM,GAAyB9xJ,KAC3B/3D,EAAO+3D,EAAQ/3D,KACK,IAAhBA,EAAKhC,OACP+5D,EAAQ54D,WAAW+iB,YAAY61C,GAE/BA,EAAQ5xC,WAAW,EAAG,KAK1BmtM,GAAY,SAAUz1N,EAAMslD,EAASqlJ,GACvC,IACI+qB,EAAgBZ,EADhBa,EAAkBp5N,GAAK2e,EAAO5B,QAE9BirB,EAAO,SAAUzkC,EAAQkB,GAC3B,IAAI8uN,EAAYhpM,EAEhB,GADA0d,IACI0wL,GAAcl0N,GAChB,OAAO,KAET,IAAIskD,EAAQtkD,GA6BV,OATA8zN,EAAqBhJ,GAAa9qN,EAASlB,GAC3CgnB,EAAM9lB,EAAQsiC,cAAc9b,cACxBytM,GAAyBH,EAAmB/rM,cAC9CjC,EAAIW,SAASqtM,EAAoB,GACjChuM,EAAIY,OAAOotM,EAAoB,KAE/BhuM,EAAIW,SAASqtM,EAAoB,GACjChuM,EAAIY,OAAOotM,EAAoB,IAE1BhuM,EA5BPguM,EAAqBxI,GAAY,IAAKtrN,EAASlB,GAC/CgwN,EAAaqF,GAAsBn1N,EAAMgB,EAASlB,GAClDqwM,GAAS2kB,GAAoB3uN,IAAI,MAAO2pN,EAAWnrL,KACnD,IAAIsvJ,EAAQkc,GAAS,6DAA6DhqM,IAAI2pN,GAAYtsL,SAASxjC,GAAM,GA2BnH,OA1BE21N,EAAgBh5N,IAAIue,EAAOH,KAAK,CAC9Bk5K,MAAOA,EACPjzL,QAASA,EACTlB,OAAQA,KAEV61N,EAAgBj5N,MAAMkP,MAAK,SAAUgqN,GAC/B91N,GACFqwM,GAASylB,EAAW3hC,OAAOtsE,SAAS,8BAGxCkuG,IACA/uM,EAAM9lB,EAAQsiC,cAAc9b,cAC5BV,EAAIW,SAASqtM,EAAoB,GACjChuM,EAAIY,OAAOotM,EAAoB,GAa1BhuM,GAEL0d,EAAO,WACT+wL,GAA0Bv1N,GACtB80N,IACFC,GAAqBhjN,OAAO+iN,GAC5BA,EAAqB,MAEvBa,EAAgBj5N,MAAMkP,MAAK,SAAUgqN,GACnCzlB,GAASylB,EAAW3hC,OAAOliL,SAC3B4jN,EAAgBh5N,IAAIue,EAAO5B,WAE7BsyD,cAAc8pJ,IAEZG,EAAa,WACfH,EAAiB10B,GAAMr1H,aAAY,WAC7Bg/H,IACFwF,GAAS,uBAAwBnwM,GAAM40H,YAAY,2BAEnDu7E,GAAS,uBAAwBnwM,GAAM2nH,SAAS,6BAEjD,MAEDmuG,EAAa,WACfH,EAAgBj5N,MAAMkP,MAAK,SAAUgqN,GACnC,IAAI9F,EAAaqF,GAAsBn1N,EAAM41N,EAAW50N,QAAS40N,EAAW91N,QAC5EqwM,GAASylB,EAAW3hC,OAAO9tL,IAAI2pN,OAG/B7qL,EAAU,WACZ,OAAO+7J,GAAMp1H,cAAc8pJ,IAEzBK,EAAS,WACX,MAAO,wOAET,MAAO,CACLxxL,KAAMA,EACNC,KAAMA,EACNuxL,OAAQA,EACRD,WAAYA,EACZ7wL,QAASA,IAGT+wL,GAA0B,WAC5B,OAAOhB,GAAUroK,QAAUqoK,GAAUvoK,UAAYuoK,GAAUnoK,aAEzDopK,GAAoB,SAAUvtN,GAChC,OAAOusN,GAAyBvsN,IAASm9C,GAASwhI,QAAQ3+K,IAASstN,MAGjEE,GAA2BrwK,GAAS60B,uBACpCy7I,GAActwK,GAASixJ,iBAAiB,UAAW,kDACnDsf,GAAqBvK,GACrBwK,GAA0B1K,GAC1B2K,GAAczwK,GAASqM,UACvBqkK,GAAqBjJ,GACrBkJ,GAAa,SAAUjsN,GACzB,OAAOA,EAAY,GAEjBksN,GAAc,SAAUlsN,GAC1B,OAAOA,EAAY,GAEjBmsN,GAAsB,SAAUxyJ,EAAM9oB,GACxC,IAAI1yC,EACJ,MAAOA,EAAOw7D,EAAK9oB,GACjB,IAAKi7K,GAAwB3tN,GAC3B,OAAOA,EAGX,OAAO,MAELiuN,GAAW,SAAUjuN,EAAM6B,EAAWpF,EAAashE,EAAUrrB,GAC/D,IAAItxB,EAAS,IAAI0rL,GAAW9sM,EAAM+9D,GAClC,GAAIgwJ,GAAYlsN,GAAY,CAC1B,IAAI2rN,GAAyBxtN,IAAS2tN,GAAwB3tN,MAC5DA,EAAOguN,GAAoB5sM,EAAOwvG,MAAM,GACpCn0H,EAAYuD,IACd,OAAOA,EAGX,MAAOA,EAAOguN,GAAoB5sM,EAAOwvG,KAAMl+E,GAC7C,GAAIj2C,EAAYuD,GACd,OAAOA,EAIb,GAAI8tN,GAAWjsN,GAAY,CACzB,IAAI2rN,GAAyBxtN,IAAS2tN,GAAwB3tN,MAC5DA,EAAOguN,GAAoB5sM,EAAOC,MAAM,GACpC5kB,EAAYuD,IACd,OAAOA,EAGX,MAAOA,EAAOguN,GAAoB5sM,EAAOC,KAAMqxB,GAC7C,GAAIj2C,EAAYuD,GACd,OAAOA,EAIb,OAAO,MAELkuN,GAAiB,SAAUluN,EAAM+9D,GACnC,MAAO/9D,GAAQA,IAAS+9D,EAAU,CAChC,GAAI0vJ,GAAYztN,GACd,OAAOA,EAETA,EAAOA,EAAKpH,WAEd,OAAO,MAELu1N,GAAgB,SAAUC,EAAgBC,EAAgBtwJ,GAC5D,OAAOmwJ,GAAeE,EAAe7vM,YAAaw/C,KAAcmwJ,GAAeG,EAAe9vM,YAAaw/C,IAEzGuwJ,GAA+B,SAAUC,EAAgBzG,GAC3D,IAAIvpM,EAAW7rB,EACf,OAAKo1N,GAGLvpM,EAAYupM,EAAcvpM,YAC1B7rB,EAASo1N,EAAcp1N,SAClBk7N,GAAYrvM,GAGVA,EAAUvS,WAAWtZ,EAAS67N,GAF5B,MALA,MASPC,GAAc,SAAUp3N,EAAQ4I,GAClC,IAAIgrE,EAAQhrE,EAAK46B,cAAc9b,cAQ/B,OAPI1nB,GACF4zE,EAAMgJ,eAAeh0E,GACrBgrE,EAAMm2G,aAAanhL,KAEnBgrE,EAAM/b,cAAcjvD,GACpBgrE,EAAM9b,YAAYlvD,IAEbgrE,GAELyjJ,GAAqB,SAAUn3N,EAAMo3N,EAAOC,GAC9C,OAAOT,GAAeQ,EAAOp3N,KAAU42N,GAAeS,EAAOr3N,IAE3Ds3N,GAAO,SAAU5yL,EAAM1kC,EAAM0I,GAC/B,IAAIwxD,EAASq3I,EAEXA,EADE7sK,EACY,kBAEA,cAEhB,MAAOh8B,GAAQA,IAAS1I,EAAM,CAK5B,GAJAk6D,EAAUxxD,EAAK6oM,GACX6kB,GAAmBl8J,KACrBA,EAAUA,EAAQq3I,IAEhB2kB,GAAyBh8J,GAAU,CACrC,GAAIi9J,GAAmBn3N,EAAMk6D,EAASxxD,GACpC,OAAOwxD,EAET,MAEF,GAAIq8J,GAAmBr8J,GACrB,MAEFxxD,EAAOA,EAAKpH,WAEd,OAAO,MAELqnL,GAAW/vK,EAAMs+M,IAAa,GAC9BjwE,GAAUruI,EAAMs+M,IAAa,GAC7BnxK,GAAiB,SAAUx7C,EAAWvK,EAAM0zE,GAC9C,IAAIhrE,EAAMue,EAAW7rB,EAAQknD,EACzBi1K,EAAW3+M,EAAM0+M,IAAM,EAAMt3N,GAC7Bw3N,EAAY5+M,EAAM0+M,IAAM,EAAOt3N,GAGnC,GAFAinB,EAAYysD,EAAMxsD,eAClB9rB,EAASs4E,EAAMrsD,YACXskM,GAAsB1kM,GAAY,CAKpC,GAJKqvM,GAAYrvM,KACfA,EAAYA,EAAU3lB,YAExBghD,EAAWr7B,EAAUrS,aAAa,kBACjB,WAAb0tC,IACF55C,EAAOue,EAAU8B,YACbktM,GAAkBvtN,IACpB,OAAOigL,GAASjgL,GAGpB,GAAiB,UAAb45C,IACF55C,EAAOue,EAAUw+B,gBACbwwK,GAAkBvtN,IACpB,OAAOu+I,GAAQv+I,GAIrB,IAAKgrE,EAAM1sD,UACT,OAAO0sD,EAET,GAAI7tB,GAAS/9B,OAAOb,GAAY,CAC9B,GAAImvM,GAAmBnvM,GAAY,CACjC,GAAkB,IAAd1c,EAAiB,CAEnB,GADA7B,EAAO8uN,EAAUvwM,GACbve,EACF,OAAOigL,GAASjgL,GAGlB,GADAA,EAAO6uN,EAAStwM,GACZve,EACF,OAAOu+I,GAAQv+I,GAGnB,IAAmB,IAAf6B,EAAkB,CAEpB,GADA7B,EAAO6uN,EAAStwM,GACZve,EACF,OAAOu+I,GAAQv+I,GAGjB,GADAA,EAAO8uN,EAAUvwM,GACbve,EACF,OAAOigL,GAASjgL,GAGpB,OAAOgrE,EAET,GAAIq4I,GAAuB9kM,IAAc7rB,GAAU6rB,EAAU9kB,KAAKhC,OAAS,EACzE,OAAkB,IAAdoK,IACF7B,EAAO8uN,EAAUvwM,GACbve,GACKigL,GAASjgL,GAGbgrE,EAET,GAAIs4I,GAAyB/kM,IAAc7rB,GAAU,EACnD,OAAmB,IAAfmP,IACF7B,EAAO6uN,EAAStwM,GACZve,GACKu+I,GAAQv+I,GAGZgrE,EAET,GAAIt4E,IAAW6rB,EAAU9kB,KAAKhC,OAE5B,OADAuI,EAAO8uN,EAAUvwM,GACbve,EACKigL,GAASjgL,GAEXgrE,EAET,GAAe,IAAXt4E,EAEF,OADAsN,EAAO6uN,EAAStwM,GACZve,EACKu+I,GAAQv+I,GAEVgrE,EAGX,OAAOA,GAEL+jJ,GAAoB,SAAU3oC,EAAS0hC,GACzC,OAAOt1M,EAAO5X,KAAK0zN,GAA6BloC,EAAU,GAAK,EAAG0hC,IAAgB7kN,OAAOuqN,KAEvFwB,GAA6B,SAAUntN,EAAWvK,EAAM0zE,GAC1D,IAAIikJ,EAAkB5xK,GAAex7C,EAAWvK,EAAM0zE,GACtD,OAAmB,IAAfnpE,EACKqmN,GAAcG,eAAe4G,GAE/B/G,GAAcI,aAAa2G,IAEhCC,GAAyB,SAAU/hL,GACrC,OAAO36B,EAAO5X,KAAKuyC,EAAIjtC,WAAW5J,IAAIirD,GAAQN,UAE5CkuK,GAA6B,SAAUhiL,GACzC,OAAO36B,EAAO5X,KAAKuyC,EAAIjtC,SAAQ,IAAO5J,IAAIirD,GAAQN,UAEhDmuK,GAAyB,SAAUC,EAAQvH,GAC7C,MAAOA,EAAgBuH,EAAOvH,GAC5B,GAAIA,EAAcM,YAChB,OAAON,EAGX,OAAOA,GAELwH,GAAwB,SAAU10N,EAAMI,GAC1C,IAAIu0N,EAAcpB,GAAcvzN,EAAMI,GACtC,QAAKu0N,IAAepyK,GAASZ,KAAK3hD,EAAKsF,aAGhCqvN,IAIR,SAAU9G,GACTA,EAAWA,EAAW,cAAgB,GAAK,YAC3CA,EAAWA,EAAW,YAAc,GAAK,YAF3C,CAGEA,KAAeA,GAAa,KAC9B,IAAI+G,GAA2BryK,GAAS60B,uBACpCy9I,GAAWtyK,GAAS/9B,OACpBswM,GAAcvyK,GAASqM,UACvBmmK,GAASxyK,GAASZ,KAClBqzK,GAAqBhL,GACrBiL,GAAa5K,GACb6K,GAA6B5K,GAC7B19M,GAAa,SAAUxH,EAAM1I,GAC/B,IAAIu+D,EAAU,GACd,MAAO71D,GAAQA,IAAS1I,EACtBu+D,EAAQ16D,KAAK6E,GACbA,EAAOA,EAAKpH,WAEd,OAAOi9D,GAELk6J,GAAc,SAAUxxM,EAAW7rB,GACrC,OAAI6rB,EAAUy/B,iBAAmBtrD,EAAS6rB,EAAUvS,WAAWvU,OACtD8mB,EAAUvS,WAAWtZ,GAEvB,MAELs9N,GAA4B,SAAUnuN,EAAW7B,GACnD,GAAI8tN,GAAWjsN,GAAY,CACzB,GAAI+tN,GAAmB5vN,EAAK+8C,mBAAqB0yK,GAASzvN,EAAK+8C,iBAC7D,OAAO2rK,GAAgBtxN,OAAO4I,GAEhC,GAAIyvN,GAASzvN,GACX,OAAO0oN,GAAgB1oN,EAAM,GAGjC,GAAI+tN,GAAYlsN,GAAY,CAC1B,GAAI+tN,GAAmB5vN,EAAKqgB,eAAiBovM,GAASzvN,EAAKqgB,aACzD,OAAOqoM,GAAgBztN,MAAM+E,GAE/B,GAAIyvN,GAASzvN,GACX,OAAO0oN,GAAgB1oN,EAAMA,EAAKvG,KAAKhC,QAG3C,OAAIs2N,GAAYlsN,GACV8tN,GAAO3vN,GACF0oN,GAAgBtxN,OAAO4I,GAEzB0oN,GAAgBztN,MAAM+E,GAExB0oN,GAAgBtxN,OAAO4I,IAE5BiwN,GAAoB,SAAU34N,EAAM44N,GACtC,IAAI7vM,EAAc6vM,EAAS7vM,YAC3B,OAAIA,GAAeuvM,GAAmBvvM,GAChCovM,GAASpvM,GACJqoM,GAAgBroM,EAAa,GAE7BqoM,GAAgBtxN,OAAOipB,GAGzB8vM,GAAkB1H,GAAW2H,SAAU1H,GAAgBztN,MAAMi1N,GAAW54N,IAG/E64N,GAAoB,SAAUtuN,EAAWsZ,EAAU7jB,GACrD,IAAI0I,EAAMkwN,EAAU78I,EAChBg9I,EAA6BvI,EACjC,IAAK4H,GAAYp4N,KAAU6jB,EACzB,OAAO,KAET,GAAIA,EAASiqM,QAAQsD,GAAgBztN,MAAM3D,KAAUA,EAAKolD,WAExD,GADAorK,EAAgBY,GAAgBztN,MAAM3D,EAAKolD,WACvCqxK,GAAYlsN,IAAc+tN,GAAmBt4N,EAAKolD,YAAcgzK,GAAYp4N,EAAKolD,WACnF,OAAOizK,GAAOr4N,EAAKolD,WAAagsK,GAAgBtxN,OAAOE,EAAKolD,WAAaorK,OAG3EA,EAAgB3sM,EAElB,IAAIoD,EAAYupM,EAAcvpM,YAC1B7rB,EAASo1N,EAAcp1N,SAC3B,GAAI+8N,GAASlxM,GAAY,CACvB,GAAIwvM,GAAYlsN,IAAcnP,EAAS,EACrC,OAAOg2N,GAAgBnqM,IAAa7rB,GAEtC,GAAIo7N,GAAWjsN,IAAcnP,EAAS6rB,EAAU9mB,OAC9C,OAAOixN,GAAgBnqM,IAAa7rB,GAEtCsN,EAAOue,MACF,CACL,GAAIwvM,GAAYlsN,IAAcnP,EAAS,IACrCw9N,EAAWH,GAAYxxM,EAAW7rB,EAAS,GACvCk9N,GAAmBM,IACrB,OAAKL,GAAWK,KACd78I,EAAY46I,GAASiC,EAAUruN,EAAWiuN,GAA4BI,GAClE78I,GACEo8I,GAASp8I,GACJq1I,GAAgBr1I,EAAWA,EAAU55E,KAAKhC,QAE5CixN,GAAgBztN,MAAMo4E,GAG7Bo8I,GAASS,GACJxH,GAAgBwH,EAAUA,EAASz2N,KAAKhC,QAE1CixN,GAAgBtxN,OAAO84N,GAGlC,GAAIpC,GAAWjsN,IAAcnP,EAAS6rB,EAAUvS,WAAWvU,SACzDy4N,EAAWH,GAAYxxM,EAAW7rB,GAC9Bk9N,GAAmBM,IACrB,OAAIP,GAAOO,GACFD,GAAkB34N,EAAM44N,IAE5BL,GAAWK,KACd78I,EAAY46I,GAASiC,EAAUruN,EAAWiuN,GAA4BI,GAClE78I,GACEo8I,GAASp8I,GACJq1I,GAAgBr1I,EAAW,GAE7Bq1I,GAAgBtxN,OAAOi8E,GAG9Bo8I,GAASS,GACJxH,GAAgBwH,EAAU,GAE5BxH,GAAgBztN,MAAMi1N,GAGjClwN,EAAOkwN,GAAsBpI,EAAc5nN,UAE7C,OAAI4tN,GAAWjsN,IAAcimN,EAAcpE,WAAaqK,GAAYlsN,IAAcimN,EAActE,eAC9FxjN,EAAOiuN,GAASjuN,EAAM6B,EAAW1C,GAAS,GAAO7H,GAAM,GACnDw4N,GAA2B9vN,EAAM1I,IAC5B04N,GAA0BnuN,EAAW7B,IAGhDkwN,EAAWjC,GAASjuN,EAAM6B,EAAWiuN,GAA4Bx4N,GACjE+4N,EAA8BtqB,GAASz7L,KAAKrH,EAAOuE,GAAW+W,EAAWjnB,GAAOk4N,MAC5Ea,GAAiCH,GAAaG,EAA4BhoN,SAAS6nN,GAQnFA,EACKF,GAA0BnuN,EAAWquN,GAEvC,MATHpI,EADEgG,GAAWjsN,GACG6mN,GAAgBztN,MAAMo1N,GAEtB3H,GAAgBtxN,OAAOi5N,GAElCvI,KAOPwI,GAAc,SAAUh5N,GAC1B,MAAO,CACL+pB,KAAM,SAAUymM,GACd,OAAOqI,GAAkB1H,GAAW2H,SAAUtI,EAAexwN,IAE/Ds5H,KAAM,SAAUk3F,GACd,OAAOqI,GAAkB1H,GAAW8H,UAAWzI,EAAexwN,MAKhEk5N,GAAmB,SAAUpqC,EAAS9uL,EAAMslB,GAC9C,IAAI40B,EAAW40I,EAAUsiC,GAAgBtxN,OAAOwlB,GAAS8rM,GAAgBztN,MAAM2hB,GAC/E,OAAO6zM,GAAarqC,EAAS9uL,EAAMk6C,IAEjCk/K,GAAe,SAAU1wN,GAC3B,OAAOm9C,GAASZ,KAAKv8C,GAAQ0oN,GAAgBtxN,OAAO4I,GAAQ0oN,GAAgBztN,MAAM+E,IAEhF2wN,GAAkB,SAAUn/K,GAC9B,OAAIk3K,GAAgBH,eAAe/2K,GACJ,IAAtBA,EAAS9+C,SAETkyN,GAAiBpzK,EAAStxC,YAGjC0wN,GAAe,SAAUp/K,GAC3B,GAAIk3K,GAAgBH,eAAe/2K,GAAW,CAC5C,IAAIjzB,EAAYizB,EAASjzB,YACzB,OAAOizB,EAAS9+C,WAAa6rB,EAAU9kB,KAAKhC,OAE5C,OAAOmtN,GAAiBpzK,EAAStxC,SAAQ,KAGzC2wN,GAA2B,SAAUj2N,EAAMI,GAC7C,OAAQ0tN,GAAgBH,eAAe3tN,KAAU8tN,GAAgBH,eAAevtN,IAAOJ,EAAKsF,YAAclF,EAAGkF,SAAQ,IAEnH4wN,GAAS,SAAUt/K,GACrB,OAAQk3K,GAAgBH,eAAe/2K,IAAa2L,GAASZ,KAAK/K,EAAStxC,YAEzE6wN,GAAqB,SAAU3qC,EAASxrL,EAAMI,GAChD,OAAIorL,GACMyqC,GAAyBj2N,EAAMI,KAAQ81N,GAAOl2N,IAASg2N,GAAah2N,IAAS+1N,GAAgB31N,IAE7F61N,GAAyB71N,EAAIJ,IAAS+1N,GAAgB/1N,IAASg2N,GAAa51N,IAGpFy1N,GAAe,SAAUrqC,EAAS9uL,EAAM61C,GAC1C,IAAI/rB,EAASkvM,GAAYh5N,GACzB,OAAOkb,EAAO5X,KAAKwrL,EAAUhlK,EAAOC,KAAK8rB,GAAO/rB,EAAOwvG,KAAKzjF,KAE1DkiJ,GAAW,SAAUjJ,EAAS9uL,EAAMsD,GACtC,OAAO61N,GAAarqC,EAAS9uL,EAAMsD,GAAMkX,MAAK,SAAU9W,GACtD,OAAImzN,GAAcvzN,EAAMI,EAAI1D,IAASy5N,GAAmB3qC,EAASxrL,EAAMI,GAC9Dy1N,GAAarqC,EAAS9uL,EAAM0D,GAE5BwX,EAAOH,KAAKrX,OAIrBg2N,GAAiB,SAAU5qC,EAAS9uL,EAAMsD,EAAMq2N,GAClD,OAAO5hC,GAASjJ,EAAS9uL,EAAMsD,GAAMkX,MAAK,SAAUq7B,GAClD,OAAO8jL,EAAa9jL,GAAO6jL,GAAe5qC,EAAS9uL,EAAM61C,EAAK8jL,GAAgBz+M,EAAOH,KAAK86B,OAG1F+jL,GAAa,SAAU9qC,EAAS9tL,GAClC,IAAIo4D,EAAY01H,EAAU9tL,EAAQ2T,WAAa3T,EAAQokD,UACvD,OAAIS,GAAS/9B,OAAOsxC,GACXl+C,EAAOH,KAAKq2M,GAAgBh4J,EAAW01H,EAAU,EAAI11H,EAAUj3D,KAAKhC,SAClEi5D,EACLk0J,GAAiBl0J,GACZl+C,EAAOH,KAAK+zK,EAAUsiC,GAAgBtxN,OAAOs5D,GAAaggK,GAAahgK,IAEvE8/J,GAAiBpqC,EAAS9tL,EAASo4D,GAGrCl+C,EAAO5B,QAGdugN,GAAejhN,EAAMugN,IAAc,GACnCW,GAAelhN,EAAMugN,IAAc,GACnCY,GAAc,CAChBZ,aAAcA,GACdU,aAAcA,GACdC,aAAcA,GACd/hC,SAAUA,GACV2hC,eAAgBA,GAChBE,WAAYA,GACZI,gBAAiBphN,EAAMghN,IAAY,GACnCK,eAAgBrhN,EAAMghN,IAAY,IAGhCM,GAAuB,SAAU3zK,GACnC,MAAiC,kBAAnBA,EAASjhC,OAErB60M,GAAkB,SAAU5zK,GAC9B,OAAOA,EAAShnD,eAAe,QAE7B66N,GAAe,SAAU7zK,GAC3B,OAAOA,EAAShnD,eAAe,OAE7B86N,GAAkB,SAAU9zK,GAC9B,OAAOA,EAAShnD,eAAe,SAE7B+6N,GAAiB,SAAU/zK,GAC7B,OAAOvpD,GAAM0rB,QAAQ69B,EAASjhC,QAG5Bi1M,GAAW,SAAUvxN,EAAKN,GAI5B,OAHIm9C,GAASqM,UAAUxpD,IAASM,EAAIs8C,QAAQ58C,KAAUA,EAAKtG,YAAc29L,GAAI3wK,KAC3E1mB,EAAKtG,UAAY,6BAEZsG,GAEL8xN,GAA+B,SAAUxxN,EAAKu9C,GAChD,IAAIz/B,EAAK+uB,EAMT,OALA/uB,EAAM9d,EAAIkf,YACV2tB,EAAMu8K,GAAUppN,EAAI06C,UAAW6C,EAASjhC,OACxCwB,EAAIW,SAASouB,EAAI5uB,YAAa4uB,EAAIz6C,UAClCy6C,EAAMu8K,GAAUppN,EAAI06C,UAAW6C,EAASrgC,KACxCY,EAAIY,OAAOmuB,EAAI5uB,YAAa4uB,EAAIz6C,UACzB0rB,GAEL2zM,GAAa,SAAU/xN,EAAMoe,GAC/B,IAAIkB,EAAWtf,EAAK46B,cAAc92B,eAAeg/M,GAAKH,MACtD3iN,EAAK2E,YAAY2a,GACjBlB,EAAIW,SAASO,EAAU,GACvBlB,EAAIY,OAAOM,EAAU,IAEnBk3B,GAAU,SAAUx2C,GACtB,OAAgC,IAAzBA,EAAKg+C,iBAEVg0K,GAAuB,SAAUhyN,EAAMoe,GACzC,OAAOizM,GAAYE,eAAevxN,GAAMkR,MAAK,WAC3C,OAAO,KACN,SAAUi8B,GAGX,OAFA/uB,EAAIW,SAASouB,EAAI5uB,YAAa4uB,EAAIz6C,UAClC0rB,EAAIY,OAAOmuB,EAAI5uB,YAAa4uB,EAAIz6C,WACzB,MAGPu/N,GAAyB,SAAU36N,EAAM0I,EAAMoe,GACjD,SAAIo4B,GAAQx2C,KAASqrN,GAAwB/zN,EAAM0I,MACjD+xN,GAAW/xN,EAAMoe,IACV,IAKP8zM,GAAc,SAAU5xN,EAAKsc,EAAOihC,EAAUz/B,GAChD,IACIrmB,EAAGiI,EAAMtN,EAAQmV,EADjB4jF,EAAQ5tC,EAASjhC,EAAQ,QAAU,OAEnCtlB,EAAOgJ,EAAI06C,UACf,GAAIywC,EAAO,CAET,IADA/4F,EAAS+4F,EAAM,GACVzrF,EAAO1I,EAAMS,EAAI0zF,EAAMh0F,OAAS,EAAGM,GAAK,EAAGA,IAAK,CAEnD,GADA8P,EAAW7H,EAAKgM,WACZimN,GAAuB36N,EAAM0I,EAAMoe,GACrC,OAAO,EAET,GAAIqtE,EAAM1zF,GAAK8P,EAASpQ,OAAS,EAC/B,QAAIw6N,GAAuB36N,EAAM0I,EAAMoe,IAGhC4zM,GAAqBhyN,EAAMoe,GAEpCpe,EAAO6H,EAAS4jF,EAAM1zF,IAEF,IAAlBiI,EAAKye,WACP/rB,EAASsC,KAAKC,IAAIw2F,EAAM,GAAIzrF,EAAKgxH,UAAUv5H,SAEvB,IAAlBuI,EAAKye,WACP/rB,EAASsC,KAAKC,IAAIw2F,EAAM,GAAIzrF,EAAKgM,WAAWvU,SAE1CmlB,EACFwB,EAAIW,SAAS/e,EAAMtN,GAEnB0rB,EAAIY,OAAOhf,EAAMtN,GAGrB,OAAO,GAELy/N,GAAkB,SAAUnyN,GAC9B,OAAOm9C,GAAS/9B,OAAOpf,IAASA,EAAKvG,KAAKhC,OAAS,GAEjDymD,GAAkB,SAAU59C,EAAKgxI,EAAQzzF,GAC3C,IAAkD79C,EAAMmD,EAAKke,EAAMuvG,EAE/DryG,EAAW7rB,EAFXy2D,EAAS7oD,EAAItM,IAAI6pD,EAAS7mD,GAAK,IAAMs6I,GACrC05E,EAAOntK,EAASmtK,KAEpB,GAAI7hK,EAAQ,CAwCV,GAvCAnpD,EAAOmpD,EAAOvwD,WACC,UAAX04I,GACG05E,EAGC7hK,EAAOnL,iBACTh+C,EAAOmpD,EAAOl9C,WACd9I,EAAM,GACGgvN,GAAgBhpK,EAAO9oC,cAChCrgB,EAAOmpD,EAAO9oC,YACdld,EAAM,GACGgvN,GAAgBhpK,EAAOpM,kBAChC/8C,EAAOmpD,EAAOpM,gBACd55C,EAAMgmD,EAAOpM,gBAAgBtjD,KAAKhC,SAElCuI,EAAOmpD,EAAOvwD,WACduK,EAAM7C,EAAI69C,UAAUgL,GAAU,GAbhChmD,EAAM7C,EAAI69C,UAAUgL,GAgBtB5qC,EAAYve,EACZtN,EAASyQ,IAEJ6nN,EAGC7hK,EAAOnL,iBACTh+C,EAAOmpD,EAAOl9C,WACd9I,EAAM,GACGgvN,GAAgBhpK,EAAOpM,kBAChC/8C,EAAOmpD,EAAOpM,gBACd55C,EAAMgmD,EAAOpM,gBAAgBtjD,KAAKhC,SAElCuI,EAAOmpD,EAAOvwD,WACduK,EAAM7C,EAAI69C,UAAUgL,IAVtBhmD,EAAM7C,EAAI69C,UAAUgL,GAatB5qC,EAAYve,EACZtN,EAASyQ,IAEN6nN,EAAM,CACTp6F,EAAOznE,EAAOpM,gBACd17B,EAAO8nC,EAAO9oC,YACd/rB,GAAM4O,KAAK5O,GAAM4rB,KAAKipC,EAAOn9C,aAAa,SAAUhM,GAC9Cm9C,GAAS/9B,OAAOpf,KAClBA,EAAKgxH,UAAYhxH,EAAKgxH,UAAUz6H,QAAQ,UAAW,QAGvD,MAAO4yD,EAAS7oD,EAAItM,IAAI6pD,EAAS7mD,GAAK,IAAMs6I,GAC1ChxI,EAAI+I,OAAO8/C,GAAQ,GAEjBynE,GAAQvvG,GAAQuvG,EAAKnyG,WAAa4C,EAAK5C,UAAY0+B,GAAS/9B,OAAOwxG,KAAUymE,GAAI9zI,QACnFpgD,EAAMytH,EAAKI,UAAUv5H,OACrBm5H,EAAKwhG,WAAW/wM,EAAK2vG,WACrB1wH,EAAI+I,OAAOgY,GAET9C,EAAYqyG,EACZl+H,EAASyQ,GAOf,OAAOqP,EAAOH,KAAKq2M,GAAgBnqM,EAAW7rB,IAE9C,OAAO8f,EAAO5B,QAGdmkC,GAAM,SAAUs9K,EAAIC,GACtB,OAAOD,EAAGlhN,SAAWkhN,EAAKC,GAExBC,GAAe,SAAUjyN,EAAKu9C,GAChC,IAAIz/B,EAAM9d,EAAIkf,YACd,OAAI0yM,GAAY5xN,GAAK,EAAMu9C,EAAUz/B,IAAQ8zM,GAAY5xN,GAAK,EAAOu9C,EAAUz/B,GACtE5L,EAAOH,KAAK+L,GAEZ5L,EAAO5B,QAGd4hN,GAAY,SAAUlyN,EAAKu9C,GAC7B,IAAI1iC,EAAW+iC,GAAgB59C,EAAK,QAASu9C,GACzCziC,EAAS8iC,GAAgB59C,EAAK,MAAOu9C,GACzC,OAAO2D,GAAMrmC,EAAU45B,GAAI35B,EAAQD,IAAW,SAAUs3M,EAAMC,GAC5D,IAAIt0M,EAAM9d,EAAIkf,YAGd,OAFApB,EAAIW,SAAS8yM,GAASvxN,EAAKmyN,EAAKl0M,aAAck0M,EAAK//N,UACnD0rB,EAAIY,OAAO6yM,GAASvxN,EAAKoyN,EAAKn0M,aAAcm0M,EAAKhgO,UAC1C0rB,MAGPu0M,GAAiB,SAAUryN,EAAKu9C,GAClC,OAAOrrC,EAAO5X,KAAK0F,EAAIE,OAAOq9C,EAASlrD,MAAMkrD,EAAShjD,QAAQvE,KAAI,SAAUgG,GAC1E,IAAI8hB,EAAM9d,EAAIkf,YAEd,OADApB,EAAIykK,WAAWvmL,GACR8hB,MAGPw0M,GAAY,SAAU3yN,EAAW49C,GACnC,IAAIv9C,EAAML,EAAUK,IACpB,GAAIu9C,EAAU,CACZ,GAAI+zK,GAAe/zK,GACjB,OAAO00K,GAAajyN,EAAKu9C,GACpB,GAAI2zK,GAAqB3zK,GAC9B,OAAOrrC,EAAOH,KAAKy/M,GAA6BxxN,EAAKu9C,IAChD,GAAI6zK,GAAa7zK,GACtB,OAAO20K,GAAUlyN,EAAKu9C,GACjB,GAAI8zK,GAAgB9zK,GACzB,OAAO80K,GAAeryN,EAAKu9C,GACtB,GAAI4zK,GAAgB5zK,GACzB,OAAOrrC,EAAOH,KAAKwrC,EAASz/B,KAGhC,OAAO5L,EAAO5B,QAEZiiN,GAAkB,CAAEt+N,QAASq+N,IAE7BE,GAAgB,SAAU7yN,EAAW9J,EAAMs/C,GAC7C,OAAOw1K,GAAYr7J,YAAY3vD,EAAW9J,EAAMs/C,IAE9Coa,GAAiB,SAAU5vD,EAAW49C,GACxCg1K,GAAgBt+N,QAAQ0L,EAAW49C,GAAU36C,MAAK,SAAUkb,GAC1Dne,EAAUwf,OAAOrB,OAGjB20M,GAAmB,SAAU/yN,GAC/B,OAAOm9C,GAASqM,UAAUxpD,IAA0B,SAAjBA,EAAKyF,SAA6D,aAAvCzF,EAAKkM,aAAa,kBAE9E8mN,GAAY,CACdpjK,YAAakjK,GACbjjK,eAAgBA,GAChBgB,eAAgBkiK,IAGdE,GAAgB,SAAUjzN,GAC5B,OAAOA,GAAQ,UAAUtH,KAAKsH,EAAKnH,WAEjCq6N,GAAY,SAAU5yN,EAAKL,EAAWme,GACxC,IACoCgD,EAAQphB,EAAMuH,EAD9C7U,EAAS0rB,EAAIO,YACbJ,EAAYH,EAAII,eACpB,IAAIJ,EAAII,iBAAmBJ,EAAIs/B,eACzBu1K,GAAc70M,EAAII,eAAexS,WAAWoS,EAAIO,gBAI3B,IAAvBJ,EAAUE,SAUZ,IATAlX,EAAQgX,EAAUvS,WACdtZ,EAAS6U,EAAM9P,QACjB8mB,EAAYhX,EAAM7U,GAClB0uB,EAAS,IAAI0rL,GAAWvuL,EAAWje,EAAIoL,UAAU6S,EAAWje,EAAIs8C,YAEhEr+B,EAAYhX,EAAMA,EAAM9P,OAAS,GACjC2pB,EAAS,IAAI0rL,GAAWvuL,EAAWje,EAAIoL,UAAU6S,EAAWje,EAAIs8C,UAChEx7B,EAAOC,MAAK,IAETrhB,EAAOohB,EAAOuiC,UAAW3jD,EAAMA,EAAOohB,EAAOC,OAChD,GAAsB,IAAlBrhB,EAAKye,WAAmB00M,GAAiBnzN,GAG3C,OAFAoe,EAAIW,SAAS/e,EAAM,QACnBC,EAAUwf,OAAOrB,IAMrBg1M,GAA0B,SAAUpzN,EAAMqhB,EAAMgyM,GAClD,GAAIrzN,EAEF,IADAqhB,EAAOA,EAAO,cAAgB,kBACzBrhB,EAAOqzN,EAAMrzN,EAAOA,EAAKqhB,GAAOrhB,EAAMA,EAAOA,EAAKqhB,GACrD,GAAsB,IAAlBrhB,EAAKye,WAAmB00M,GAAiBnzN,GAC3C,OAAOA,GAKXszN,GAAgB,SAAU5+N,EAAQ/B,GAIpC,OAHIA,EAAK8rB,WACP9rB,EAAOA,EAAKkG,YAELnE,EAAOqhD,OAAOC,uBAAuBrjD,EAAKimB,gBAEjDo6G,GAAU,SAAUugG,EAAI96N,EAAQywD,GAClC,OAAOqqK,EAAGx9K,OAAO+hK,aAAar/M,EAAQywD,IAEpCiqK,GAAmB,SAAUnzN,GAC/B,OAAOA,GAA0B,IAAlBA,EAAKye,UAAkB,kBAAkB/lB,KAAKsH,EAAKgxH,YAEhEwiG,GAAc,SAAUz/N,EAAO0/N,GAQjC,MAPqB,kBAAV1/N,EACTA,EAAQA,EAAM0/N,GACLA,IACT1/N,EAAQA,EAAMwC,QAAQ,WAAW,SAAUmE,EAAK/H,GAC9C,OAAO8gO,EAAK9gO,IAAS+H,MAGlB3G,GAEL2/N,GAAO,SAAUC,EAAMla,GAKzB,OAJAka,EAAOA,GAAQ,GACfla,EAAOA,GAAQ,GACfka,EAAO,IAAMA,EAAK96N,UAAY86N,GAC9Bla,EAAO,IAAMA,EAAK5gN,UAAY4gN,GACvBka,EAAK/6M,gBAAkB6gM,EAAK7gM,eAEjCg7M,GAAsB,SAAUtzN,EAAKvM,EAAOpB,GAU9C,MATa,UAATA,GAA6B,oBAATA,IACtBoB,EAAQuM,EAAI4sE,MAAMn5E,IAEP,eAATpB,GAAmC,MAAVoB,IAC3BA,EAAQ,QAEG,eAATpB,IACFoB,EAAQA,EAAMwC,QAAQ,UAAW,IAAIA,QAAQ,QAAS,MAEjD,GAAKxC,GAEV85C,GAAW,SAAUvtC,EAAKN,EAAMrN,GAClC,OAAOihO,GAAoBtzN,EAAKA,EAAIutC,SAAS7tC,EAAMrN,GAAOA,IAExDkhO,GAAoB,SAAUvzN,EAAKN,GACrC,IAAI8zN,EAKJ,OAJAxzN,EAAIoL,UAAU1L,GAAM,SAAUlO,GAE5B,OADAgiO,EAAaxzN,EAAIutC,SAAS/7C,EAAG,mBACtBgiO,GAA6B,SAAfA,KAEhBA,GAELC,GAAe,SAAUzzN,EAAKN,EAAMnC,GACtC,OAAOyC,EAAIkH,WAAWxH,EAAMnC,EAAUyC,EAAI06C,YAExCg5K,GAAc,CAChBf,cAAeA,GACfC,UAAWA,GACXE,wBAAyBA,GACzBz2K,YAAa22K,GACbtgG,QAASA,GACTmgG,iBAAkBA,GAClBK,YAAaA,GACbE,KAAMA,GACNE,oBAAqBA,GACrB/lL,SAAUA,GACVgmL,kBAAmBA,GACnBrsN,WAAYusN,IAGVE,GAAmBjB,GAAUniK,eAC7BqjK,GAAeF,GAAYxsN,WAAY2sN,GAAqBH,GAAYb,iBAAkBiB,GAAgBJ,GAAYr3K,YACtH03K,GAAW,SAAUr0N,EAAMtN,GACP,qBAAXA,IACTA,EAA2B,IAAlBsN,EAAKye,SAAiBze,EAAKvI,OAASuI,EAAKgM,WAAWvU,QAE/D,MAAOuI,GAAQA,EAAKg+C,gBAClBh+C,EAAOA,EAAKgM,WAAWtZ,GACnBsN,IACFtN,EAA2B,IAAlBsN,EAAKye,SAAiBze,EAAKvI,OAASuI,EAAKgM,WAAWvU,QAGjE,MAAO,CACLuI,KAAMA,EACNtN,OAAQA,IAGR4hO,GAA4B,SAAU52K,EAAc9+B,GACtD,IAAI21M,EAAOF,GAAS32K,EAAc9+B,GAClC,GAAI21M,EAAKv0N,KAAM,CACb,MAAOu0N,EAAKv0N,MAAwB,IAAhBu0N,EAAK7hO,QAAgB6hO,EAAKv0N,KAAK+8C,gBACjDw3K,EAAOF,GAASE,EAAKv0N,KAAK+8C,iBAExBw3K,EAAKv0N,MAAQu0N,EAAK7hO,OAAS,GAA4B,IAAvB6hO,EAAKv0N,KAAKye,UAAkE,MAAhD81M,EAAKv0N,KAAKgxH,UAAU1iD,OAAOimJ,EAAK7hO,OAAS,IACnG6hO,EAAK7hO,OAAS,IAChBgrD,EAAe62K,EAAKv0N,KACpB09C,EAAa/9B,UAAU40M,EAAK7hO,OAAS,IAI3C,OAAOgrD,GAELZ,GAAY,SAAU98C,GACxB,MAAyB,OAAlBA,EAAKnH,UAAqBmH,EAAKkM,aAAa,oBAAsBlM,EAAKqgB,aAE5Em0M,GAA4B,SAAUl0N,EAAKN,GAC7C,IAAIvH,EAASuH,EACb,MAAOvH,EAAQ,CACb,GAAwB,IAApBA,EAAOgmB,UAAkBne,EAAI+wD,mBAAmB54D,GAClD,MAA0C,UAAnC6H,EAAI+wD,mBAAmB54D,GAAsBA,EAASuH,EAE/DvH,EAASA,EAAOG,WAElB,OAAOoH,GAELy0N,GAAY,SAAU73M,EAAOvT,EAAQrJ,EAAMtN,GAC7C,IAAIy6C,EAAKi2F,EACL1oI,EAAMsF,EAAKgxH,UAgBf,MAfsB,qBAAXt+H,IACTA,EAASkqB,EAAQliB,EAAIjD,OAAS,GAE5BmlB,GACFuwB,EAAMzyC,EAAIkjB,YAAY,IAAKlrB,GAC3B0wI,EAAO1oI,EAAIkjB,YAAY,IAAQlrB,GAC/By6C,EAAMA,EAAMi2F,EAAOj2F,EAAMi2F,GACZ,IAATj2F,IAAe9jC,IAAW8jC,EAAMz6C,IAAWkqB,IAAUuwB,GAAOzyC,EAAIjD,QAClE01C,MAGFA,EAAMzyC,EAAI6B,QAAQ,IAAK7J,GACvB0wI,EAAO1oI,EAAI6B,QAAQ,IAAQ7J,GAC3By6C,GAAe,IAATA,KAAyB,IAAVi2F,GAAej2F,EAAMi2F,GAAQj2F,EAAMi2F,GAEnDj2F,GAELunL,GAAmB,SAAUp0N,EAAKyB,EAAMwc,EAAW7rB,EAAQkqB,EAAOvT,GACpE,IAAI+X,EAAQphB,EAAMmtC,EAAKwnL,EACvB,GAA2B,IAAvBp2M,EAAUE,SAAgB,CAE5B,GADA0uB,EAAMsnL,GAAU73M,EAAOvT,EAAQkV,EAAW7rB,IAC7B,IAATy6C,EACF,MAAO,CACL5uB,UAAWA,EACX7rB,OAAQy6C,GAGZwnL,EAAep2M,EAEjB6C,EAAS,IAAI0rL,GAAWvuL,EAAWje,EAAIoL,UAAU6S,EAAWje,EAAIs8C,UAAY76C,GAC5E,MAAO/B,EAAOohB,EAAOxE,EAAQ,OAAS,UACpC,GAAsB,IAAlB5c,EAAKye,UAAmBw1M,GAAiBj0N,EAAKpH,aAS3C,GAAI0H,EAAIs8C,QAAQ58C,IAASg0N,GAAYN,KAAK1zN,EAAM,MACrD,WAPA,GAFA20N,EAAe30N,EACfmtC,EAAMsnL,GAAU73M,EAAOvT,EAAQrJ,IAClB,IAATmtC,EACF,MAAO,CACL5uB,UAAWve,EACXtN,OAAQy6C,GAOhB,GAAIwnL,EAMF,OAJEjiO,EADEkqB,EACO,EAEA+3M,EAAal9N,OAEjB,CACL8mB,UAAWo2M,EACXjiO,OAAQA,IAIVkiO,GAAuB,SAAUt0N,EAAKqI,EAAQyV,EAAKG,EAAWsqL,GAChE,IAAIhzI,EAAS99D,EAAGrH,EAAGmkO,EAKnB,IAJ2B,IAAvBt2M,EAAUE,UAAiD,IAA/BF,EAAUyyG,UAAUv5H,QAAgB8mB,EAAUsqL,KAC5EtqL,EAAYA,EAAUsqL,IAExBhzI,EAAUq+J,GAAa5zN,EAAKie,GACvBxmB,EAAI,EAAGA,EAAI89D,EAAQp+D,OAAQM,IAC9B,IAAKrH,EAAI,EAAGA,EAAIiY,EAAOlR,OAAQ/G,IAE7B,GADAmkO,EAAYlsN,EAAOjY,MACf,cAAemkO,IAAaA,EAAUv2M,YAAcF,EAAIE,YAGxDhe,EAAIjO,GAAGwjE,EAAQ99D,GAAI88N,EAAUh3N,UAC/B,OAAOg4D,EAAQ99D,GAIrB,OAAOwmB,GAELu2M,GAAoB,SAAUpgO,EAAQiU,EAAQ4V,EAAWsqL,GAC3D,IAAI7oM,EACAM,EAAM5L,EAAO4L,IACbhJ,EAAOgJ,EAAI06C,UAIf,GAHKryC,EAAO,GAAG21I,UACbt+I,EAAOM,EAAIoL,UAAU6S,EAAW5V,EAAO,GAAG4Y,MAAOjqB,KAE9C0I,EAAM,CACT,IAAI+0N,EAAYz0N,EAAIoL,UAAU6S,EAAW,YACzCve,EAAOM,EAAIoL,UAAiC,IAAvB6S,EAAUE,SAAiBF,EAAU3lB,WAAa2lB,GAAW,SAAUve,GAC1F,OAAOA,IAAS1I,GAAQ88N,GAAc1/N,EAAQsL,KAC7C+0N,GAKL,GAHI/0N,GAAQ2I,EAAO,GAAG21I,UACpBt+I,EAAOk0N,GAAa5zN,EAAKN,EAAM,SAASwgC,UAAU,IAAMxgC,IAErDA,EAAM,CACTA,EAAOue,EACP,MAAOve,EAAK6oM,KAAiBvoM,EAAIs8C,QAAQ58C,EAAK6oM,IAE5C,GADA7oM,EAAOA,EAAK6oM,GACRmrB,GAAYN,KAAK1zN,EAAM,MACzB,MAIN,OAAOA,GAAQue,GAEby2M,GAAsB,SAAU10N,EAAKqI,EAAQ6V,EAAgBG,EAAa++B,EAAc9+B,EAAWhC,GACrG,IAAI2B,EAAW9lB,EAAQ+4D,EAASq3I,EAAavxM,EAI7C,GAHAinB,EAAY9lB,EAASmkB,EAAQ4B,EAAiBk/B,EAC9CmrJ,EAAcjsL,EAAQ,kBAAoB,cAC1CtlB,EAAOgJ,EAAI06C,UACgB,IAAvBz8B,EAAUE,WAAmB01M,GAAmB51M,KAC9C3B,EAAQ+B,EAAc,EAAIC,EAAYL,EAAUyyG,UAAUv5H,QAC5D,OAAO8mB,EAGX,MAAO,EAAM,CACX,IAAK5V,EAAO,GAAGssN,cAAgB30N,EAAIs8C,QAAQnkD,GACzC,OAAOA,EAET,IAAK+4D,EAAU/4D,EAAOowM,GAAcr3I,EAASA,EAAUA,EAAQq3I,GAC7D,IAAKorB,GAAiBziK,KAAa2iK,GAAmB3iK,KAAa1U,GAAU0U,GAC3E,OAAO/4D,EAGX,GAAIA,IAAWnB,GAAQmB,EAAOG,aAAetB,EAAM,CACjDinB,EAAY9lB,EACZ,MAEFA,EAASA,EAAOG,WAElB,OAAO2lB,GAEL22M,GAAY,SAAUxgO,EAAQ0pB,EAAKzV,EAAQU,GAC7C,IAAI8rN,EAAU32M,EAAiBJ,EAAII,eAAgBG,EAAcP,EAAIO,YAAa++B,EAAet/B,EAAIs/B,aAAc9+B,EAAYR,EAAIQ,UAC/Hte,EAAM5L,EAAO4L,IAoFjB,OAnFgC,IAA5Bke,EAAeC,UAAkBD,EAAew/B,kBAClDx/B,EAAiBte,GAAQse,EAAgBG,GACT,IAA5BH,EAAeC,WACjBE,EAAc,IAGY,IAA1B++B,EAAaj/B,UAAkBi/B,EAAaM,kBAC9CN,EAAex9C,GAAQw9C,EAAct/B,EAAIE,UAAYM,EAAYA,EAAY,GAC/C,IAA1B8+B,EAAaj/B,WACfG,EAAY8+B,EAAaszE,UAAUv5H,SAGvC+mB,EAAiBg2M,GAA0Bl0N,EAAKke,GAChDk/B,EAAe82K,GAA0Bl0N,EAAKo9C,IAC1Cu2K,GAAiBz1M,EAAe5lB,aAAeq7N,GAAiBz1M,MAClEA,EAAiBy1M,GAAiBz1M,GAAkBA,EAAiBA,EAAe5lB,WAElF4lB,EADEJ,EAAIE,UACWE,EAAeu+B,iBAAmBv+B,EAElCA,EAAe6B,aAAe7B,EAEjB,IAA5BA,EAAeC,WACjBE,EAAcP,EAAIE,UAAYE,EAAe/mB,OAAS,KAGtDw8N,GAAiBv2K,EAAa9kD,aAAeq7N,GAAiBv2K,MAChEA,EAAeu2K,GAAiBv2K,GAAgBA,EAAeA,EAAa9kD,WAE1E8kD,EADEt/B,EAAIE,UACSo/B,EAAar9B,aAAeq9B,EAE5BA,EAAaX,iBAAmBW,EAEnB,IAA1BA,EAAaj/B,WACfG,EAAYR,EAAIE,UAAY,EAAIo/B,EAAajmD,SAG7C2mB,EAAIE,YACN62M,EAAWT,GAAiBp0N,EAAK5L,EAAO0T,UAAWoW,EAAgBG,GAAa,EAAMtV,GAClF8rN,IACF32M,EAAiB22M,EAAS52M,UAC1BI,EAAcw2M,EAASziO,QAEzByiO,EAAWT,GAAiBp0N,EAAK5L,EAAO0T,UAAWs1C,EAAc9+B,GAAW,EAAOvV,GAC/E8rN,IACFz3K,EAAey3K,EAAS52M,UACxBK,EAAYu2M,EAASziO,SAGrBiW,EAAO,GAAGrE,SACZo5C,EAAer0C,EAASq0C,EAAe42K,GAA0B52K,EAAc9+B,KAE7EjW,EAAO,GAAGrE,QAAUqE,EAAO,GAAGssN,gBAC3BtsN,EAAO,GAAGrE,QAAuC,IAA5Bka,EAAeC,UAAkC,IAAhBE,IACzDH,EAAiBw2M,GAAoB10N,EAAKqI,EAAQ6V,EAAgBG,EAAa++B,EAAc9+B,GAAW,IAErGjW,EAAO,GAAGrE,QAAqC,IAA1Bo5C,EAAaj/B,UAAkBG,IAAc8+B,EAAaszE,UAAUv5H,SAC5FimD,EAAes3K,GAAoB10N,EAAKqI,EAAQ6V,EAAgBG,EAAa++B,EAAc9+B,GAAW,KAGtGjW,EAAO,GAAG9K,WAAiC,IAArB8K,EAAO,GAAGysN,SAAqBzsN,EAAO,GAAGrE,SACjEka,EAAiBo2M,GAAqBt0N,EAAKqI,EAAQyV,EAAKI,EAAgB,mBACxEk/B,EAAek3K,GAAqBt0N,EAAKqI,EAAQyV,EAAKs/B,EAAc,iBAElE/0C,EAAO,GAAG4Y,OAAS5Y,EAAO,GAAG9K,YAC/B2gB,EAAiBs2M,GAAkBpgO,EAAQiU,EAAQ6V,EAAgB,mBACnEk/B,EAAeo3K,GAAkBpgO,EAAQiU,EAAQ+0C,EAAc,eAC3D/0C,EAAO,GAAG4Y,QACPjhB,EAAIs8C,QAAQp+B,KACfA,EAAiBw2M,GAAoB10N,EAAKqI,EAAQ6V,EAAgBG,EAAa++B,EAAc9+B,GAAW,IAErGte,EAAIs8C,QAAQc,KACfA,EAAes3K,GAAoB10N,EAAKqI,EAAQ6V,EAAgBG,EAAa++B,EAAc9+B,GAAW,MAI5E,IAA5BJ,EAAeC,WACjBE,EAAcre,EAAI69C,UAAU3/B,GAC5BA,EAAiBA,EAAe5lB,YAEJ,IAA1B8kD,EAAaj/B,WACfG,EAAYte,EAAI69C,UAAUT,GAAgB,EAC1CA,EAAeA,EAAa9kD,YAEvB,CACL4lB,eAAgBA,EAChBG,YAAaA,EACb++B,aAAcA,EACd9+B,UAAWA,IAGXy2M,GAAc,CAAEH,UAAWA,IAE3BI,GAAShhO,GAAM4O,KACfqyN,GAAc,SAAUh3M,EAAW1jB,GACrC,IAAImR,EAAauS,EAAUvS,WAO3B,OANAnR,IACIA,EAAQmR,EAAWvU,OAAS,EAC9BoD,EAAQmR,EAAWvU,OAAS,EACnBoD,EAAQ,IACjBA,EAAQ,GAEHmR,EAAWnR,IAAU0jB,GAE1Bi3M,GAAS,SAAUl1N,EAAK8d,EAAKtmB,GAC/B,IAII4nJ,EACA+1E,EACAN,EACAn1N,EACAvH,EACAm4D,EACArpD,EAVAiX,EAAiBJ,EAAII,eACrBG,EAAcP,EAAIO,YAClB++B,EAAet/B,EAAIs/B,aACnB9+B,EAAYR,EAAIQ,UASpB,GADArX,EAAQjH,EAAIE,OAAO,+CACf+G,EAAM9P,OAAS,EACjB69N,GAAO/tN,GAAO,SAAUvH,GACtBlI,EAAS,CAACkI,WAFd,CAMA,IAAI01N,EAAU,SAAUnuN,GACtB,IAAIvH,EASJ,OARAA,EAAOuH,EAAM,GACS,IAAlBvH,EAAKye,UAAkBze,IAASwe,GAAkBG,GAAe3e,EAAKgxH,UAAUv5H,QAClF8P,EAAMjM,OAAO,EAAG,GAElB0E,EAAOuH,EAAMA,EAAM9P,OAAS,GACV,IAAdmnB,GAAmBrX,EAAM9P,OAAS,GAAKuI,IAAS09C,GAAkC,IAAlB19C,EAAKye,UACvElX,EAAMjM,OAAOiM,EAAM9P,OAAS,EAAG,GAE1B8P,GAELouN,EAAkB,SAAU31N,EAAMrN,EAAMg+D,GAE1C,IADA,IAAIC,EAAW,GACR5wD,GAAQA,IAAS2wD,EAAS3wD,EAAOA,EAAKrN,GAC3Ci+D,EAASz1D,KAAK6E,GAEhB,OAAO4wD,GAELglK,EAAe,SAAU51N,EAAM1I,GACjC,EAAG,CACD,GAAI0I,EAAKpH,aAAetB,EACtB,OAAO0I,EAETA,EAAOA,EAAKpH,iBACLoH,IAEP61N,EAAe,SAAUnlK,EAAWC,EAAStvC,GAC/C,IAAIwnL,EAAcxnL,EAAO,cAAgB,kBACzC,IAAKrhB,EAAO0wD,EAAWj4D,EAASuH,EAAKpH,WAAYoH,GAAQA,IAAS2wD,EAAS3wD,EAAOvH,EAChFA,EAASuH,EAAKpH,WACdg4D,EAAW+kK,EAAgB31N,IAAS0wD,EAAY1wD,EAAOA,EAAK6oM,GAAcA,GACtEj4I,EAASn5D,SACN4pB,GACHuvC,EAASpwB,UAEX1oC,EAAS49N,EAAQ9kK,MAUvB,GANgC,IAA5BpyC,EAAeC,UAAkBD,EAAew/B,kBAClDx/B,EAAiBA,EAAexS,WAAW2S,IAEf,IAA1B++B,EAAaj/B,UAAkBi/B,EAAaM,kBAC9CN,EAAe63K,GAAY73K,EAAc9+B,IAEvCJ,IAAmBk/B,EACrB,OAAO5lD,EAAS49N,EAAQ,CAACl3M,KAG3B,IADAkhI,EAAWp/I,EAAIi9M,mBAAmB/+L,EAAgBk/B,GAC7C19C,EAAOwe,EAAgBxe,EAAMA,EAAOA,EAAKpH,WAAY,CACxD,GAAIoH,IAAS09C,EACX,OAAOm4K,EAAar3M,EAAgBkhI,GAAU,GAEhD,GAAI1/I,IAAS0/I,EACX,MAGJ,IAAK1/I,EAAO09C,EAAc19C,EAAMA,EAAOA,EAAKpH,WAAY,CACtD,GAAIoH,IAASwe,EACX,OAAOq3M,EAAan4K,EAAcgiG,GAEpC,GAAI1/I,IAAS0/I,EACX,MAGJ+1E,EAAaG,EAAap3M,EAAgBkhI,IAAalhI,EACvD22M,EAAWS,EAAal4K,EAAcgiG,IAAahiG,EACnDm4K,EAAar3M,EAAgBi3M,GAAY,GACzC7kK,EAAW+kK,EAAgBF,IAAej3M,EAAiBi3M,EAAaA,EAAWp1M,YAAa,cAAe80M,IAAaz3K,EAAey3K,EAAS90M,YAAc80M,GAC9JvkK,EAASn5D,QACXK,EAAS49N,EAAQ9kK,IAEnBilK,EAAan4K,EAAcy3K,KAEzBW,GAAY,CAAEt6J,KAAMg6J,IAEpBO,GAAY,WACd,MAAO,UAGT,SAASzxE,GAAWjyJ,EAAIM,GACtB,IAAIqB,EAAM,SAAUsE,GAClB,IAAKjG,EAAGiG,GACN,MAAM,IAAIkZ,MAAM,gBAAkB7e,EAAO,eAAiBA,EAAO,SAEnE,OAAO4xJ,EAAUjsJ,GAAS8Y,MAAM,KAE9BmzI,EAAY,SAAUjsJ,GACxB,OAAOjG,EAAGiG,GAAWka,EAAO5X,KAAKtC,EAAQgI,MAAM0wH,WAAax+G,EAAO5B,QAEjE3c,EAAM,SAAUqE,EAASvE,GAC3B,IAAK1B,EAAGiG,GACN,MAAM,IAAIkZ,MAAM,oBAAsB7e,EAAO,eAAiBA,EAAO,SAEvE2F,EAAQgI,MAAM0wH,UAAYj9H,GAE5B,MAAO,CACLC,IAAKA,EACLuwJ,UAAWA,EACXtwJ,IAAKA,GAIT,IAAIuwJ,GAAMF,GAAUllI,GAAQ,QACxB4zI,GAAQ,SAAU16J,GACpB,OAAOksJ,GAAIxwJ,IAAIsE,IAGb09N,GAAc,SAAU1tK,GAC1B,OAAOlpC,GAAOkpC,IAAS0qG,GAAM1qG,KAAUytK,MAErCvtN,GAAU,SAAU9T,EAAQ4zD,EAAM2tK,EAAUp9N,GAC9C,OAAOJ,GAAO6vD,GAAMp3C,MAAK,WACvB,MAAO,cACN,SAAUzY,GACX,MAAiB,OAAbI,GAAqBm9N,GAAY1tK,GAC5B,QACE+4J,GAAa/4J,GACf,WACE8iK,GAAY9iK,GACd,QACG0rK,GAAYhhG,QAAQt+H,EAAQuhO,EAAUp9N,IAAcm7N,GAAYhhG,QAAQt+H,EAAQ/B,GAAK8F,GAASw9N,GAGjG,QAFA,oBAOTC,GAA8B,SAAU93M,GAC1C,OAAuC,IAAhCA,EAAII,eAAeC,UAAkBL,EAAII,eAAewyG,UAAUv5H,QAAU2mB,EAAIO,aAAiE,MAAlDP,EAAII,eAAewyG,UAAU5yG,EAAIO,cAErIw3M,GAAgB,SAAUzhO,EAAQ0pB,GACpC,IAAIhL,EAAIiiN,GAAYH,UAAUxgO,EAAQ0pB,EAAK,CAAC,CAAE9Z,QAAQ,IAAS4xN,GAA4B93M,IAC3FA,EAAIW,SAAS3L,EAAEoL,eAAgBpL,EAAEuL,aACjCP,EAAIY,OAAO5L,EAAEsqC,aAActqC,EAAEwL,WAC7BlqB,EAAOuL,UAAUwf,OAAOrB,IAEtBg4M,GAAiB,SAAUC,EAAMltM,EAAI83L,EAAgBqV,GACvD,IAAIC,EAAKptM,EAAGswE,IAAKA,OAAa,IAAP88H,EAAgBp0E,GAAS,kBAAoBo0E,EAAI98N,EAAO6oN,GAAOn5L,EAAI,CAAC,QACvFqtM,EAASj1K,GAAQL,QAAQ,OAAQm1K,GACrCv8D,GAAM08D,EAAQ1V,MACd7sN,GAAIuiO,EAAQ,GAAKxV,KAAoBvnH,GACrCxlG,GAAIuiO,EAAQ,GAAKzV,KAAkBE,GACnC,IAAIx8L,EAAK6xM,EAAS78H,EAAKhgG,GAAO25H,EAAK3uG,EAAG3oB,WAAYA,OAAoB,IAAPs3H,EAAgB,GAAKA,EAAI7vB,EAAK9+E,EAAG5oB,QAASA,OAAiB,IAAP0nG,EAAgB,GAAKA,EAGxI,OAFA75C,GAAO8sK,EAAQ16N,GACfymN,GAAMiU,EAAQ36N,GACP26N,GAELC,GAAW,SAAU/hO,EAAQ0pB,EAAK6iM,EAAgBqV,EAAU78N,GAC9D,IAAIi9N,EAAc,GACdF,EAASJ,GAAe1hO,EAAOmP,SAAUpK,EAAMwnN,EAAgBqV,GAC/Dh4E,EAAUzqJ,GAAK2e,EAAO5B,QACtB+lN,EAAgB,WAClBr4E,EAAQrqJ,IAAIue,EAAO5B,SAEjBgmN,EAAmB,WACrB,OAAOt4E,EAAQtqJ,MAAMqd,YAAW,WAC9B,IAAI47B,EAAKyF,GAAQ8jL,GAGjB,OAFAE,EAAYv7N,KAAK8xC,GACjBqxG,EAAQrqJ,IAAIue,EAAOH,KAAK46B,IACjBA,MAGP4pL,EAAkB,SAAU7yB,GAC9B9gM,EAAK8gM,EAAO8yB,IAEVA,EAAiB,SAAUxuK,GAC7B,IAAIjhC,EAAM7e,GAAQ9T,EAAQ4zD,EAAM,OAAQ31D,GAAK21D,IAC7C,OAAQjhC,GACR,IAAK,gBACDsvM,IACA,IAAItsK,EAAaxiD,GAASygD,GAC1BuuK,EAAgBxsK,GAChBssK,IACA,MAEJ,IAAK,QACD,IAAIvhO,EAAIwhO,IACRhW,GAAOt4J,EAAMlzD,GACb,MAEJ,IAAK,WACL,IAAK,WACL,IAAK,WAGH2hO,EAAe,SAAUxvN,GAC3B,IAAIy8L,EAAQ1tM,EAAIiR,EAAOg6C,GAAQN,SAC/B41K,EAAgB7yB,IAMlB,OAJA8xB,GAAUt6J,KAAK9mE,EAAO4L,IAAK8d,GAAK,SAAU7W,GACxCovN,IACAI,EAAaxvN,MAERmvN,GAELM,GAAuB,SAAUtiO,EAAQ/B,EAAMgC,EAAU8E,GAC3D/E,EAAO0L,YAAYC,UAAS,WAC1B,IAAI42N,EAAaviO,EAAOuL,UAAUugB,SAIlC,GAHIy2M,EAAW34M,WACb63M,GAAczhO,EAAQuiO,GAEpBviO,EAAOuL,UAAUugB,SAASlC,UAAW,CACvC,IAAIggI,EAAU83E,GAAe1hO,EAAOmP,SAAUpK,EAAM9G,EAAMgC,EAAS2hO,UACnEt9F,GAAMslB,EAAS,KACf5pJ,EAAOuL,UAAUugB,SAASoB,WAAW08H,EAAQh+I,OAC7C5L,EAAOuL,UAAUO,OAAO89I,EAAQh+I,WAC3B,CACL,IAAIu9C,EAAWotK,GAAYL,sBAAsBl2N,EAAOuL,WAAW,GAC/Dme,EAAM1pB,EAAOuL,UAAUugB,SAC3Bi2M,GAAS/hO,EAAQ0pB,EAAKzrB,EAAMgC,EAAS2hO,SAAU78N,GAC/C/E,EAAOuL,UAAU4vD,eAAehS,QAKtC,SAASq5K,GAAWxiO,GAClB,IAAIukL,EAAW1rJ,KACfkoC,GAAQ/gE,EAAQukL,GAChB,IAAIk+C,EAAUp0N,GAAMrO,GACpB,MAAO,CACL+N,SAAU,SAAU9P,EAAMgC,GACxBskL,EAASx2K,SAAS9P,EAAMgC,IAE1B8hO,SAAU,SAAU9jO,EAAM8G,GACxBw/K,EAAS1lJ,OAAO5gC,GAAMuQ,MAAK,SAAUvO,GACnCqiO,GAAqBtiO,EAAQ/B,EAAMgC,EAAU8E,OAGjD29N,kBAAmB,SAAUzkO,EAAMmF,GACjCq/N,EAAQ91J,YAAY1uE,EAAMmF,IAE5BuR,OAAQ,SAAU1W,GAChB+6J,GAASh5J,EAAQ8d,EAAOH,KAAK1f,IAAOuQ,MAAK,SAAUimB,GACjD,IAAIhxB,EAAWgxB,EAAGhxB,SAClB+K,EAAK/K,EAAU2lE,QAGnBplD,OAAQ,SAAU/lB,GAChB,IAAI6uN,EAAYF,GAAQ5sN,EAAQ/B,GAChC,OAAOo3M,GAAMyX,GAAW,SAAUxd,GAChC,OAAO1tM,EAAI0tM,GAAO,SAAU17I,GAC1B,OAAOA,EAAKhoD,cAOtB,IAAI+2N,GAAkB,SAAUr3N,GAC9B,OAAOA,EAAKiM,YAAcjM,EAAKiM,aAAejM,EAAK08C,WAEjD46K,GAAgB,SAAUt3N,GAC5B,MAAqB,OAAdA,EAAKrN,MAAgC,MAAfqN,EAAKjM,OAEhCwjO,GAAqB,SAAUxhL,EAAQ/1C,GACzC,IAAI68C,EAAgB9G,EAAO2X,mBAC3B,OAAO7Q,EAAc78C,EAAKrN,OAAS0kO,GAAgBr3N,IAASs3N,GAAct3N,EAAKiM,aAE7EurN,GAAyB,SAAUzhL,EAAQ/1C,GAC7C,IAAIy3N,EAAmB1hL,EAAOod,sBAC9B,OAAOnzD,IAASA,EAAKw2C,QAAQihL,IAAqBF,GAAmBxhL,EAAQ/1C,KAE3E03N,GAAiB,SAAU3hL,EAAQ6L,GACrC,IAAI31C,EAAa21C,EAAS31C,WACtBywC,EAAYkF,EAASlF,UAUzB,OATIzwC,GAAkC,SAApBA,EAAWtZ,OAC3BsZ,EAAaA,EAAWoV,MAEtBq7B,GAAsC,eAAzBA,EAAUr5C,KAAK,QAC9Bq5C,EAAYA,EAAUk0E,MAEpB4mG,GAAuBzhL,EAAQ2G,KACjCA,EAAYA,EAAUk0E,SAEnB3kH,GAAcA,IAAeywC,KAGP,OAApBzwC,EAAWtZ,MAAqC,OAApBsZ,EAAWtZ,OAE5CglO,GAAqB,SAAUC,GACjC,IAAI3rN,EAAa2rN,EAAY3rN,WACzBywC,EAAYk7K,EAAYl7K,UAO5B,OANIzwC,GAAsC,SAAxBA,EAAWpT,UAC3BoT,EAAWrT,WAAW+iB,YAAY1P,GAEhCywC,GAA8B,eAAjBA,EAAU1lD,IACzB0lD,EAAU9jD,WAAW+iB,YAAY+gC,GAE5Bk7K,GAELC,GAAgB,SAAUv3N,EAAKk7C,EAAYoG,GAC7C,IAAItkD,EAAOk+C,EAAWphC,UAAUwnC,GAC5Bg2K,EAAct3N,EAAIqtD,eAAerwD,GACrC,OAAOq6N,GAAmBC,IAExBE,GAAc,SAAUx7N,GAC1B,OAAOhI,GAAM4rB,KAAK5jB,EAAI0P,YAAY,SAAUk9C,GAC1C,MAA0B,OAAnBA,EAAMrwD,aAGbk/N,GAAY,SAAU/3N,GACxB,MAAqB,MAAdA,EAAKvG,MAAmB0jD,GAASZ,KAAKv8C,IAE3Cg4N,GAAmB,SAAUh4N,GAC/B,OAAOA,GAAQA,EAAKiM,YAAcjM,EAAKiM,aAAejM,EAAK08C,WAAaq7K,GAAU/3N,EAAKiM,aAErFgsN,GAAkB,SAAU37N,GAC9B,OAAQA,EAAI2P,YAAc+rN,GAAiB17N,IAEzC47N,GAAgB,SAAUv4K,GAC5B,OAAOA,EAAKloD,OAAS,GAAKwgO,GAAgBt4K,EAAKA,EAAKloD,OAAS,IAAMkoD,EAAK7kD,MAAM,GAAI,GAAK6kD,GAErFw4K,GAAc,SAAU73N,EAAKN,GAC/B,IAAIu0D,EAAcj0D,EAAIoL,UAAU1L,EAAMM,EAAIs8C,SAC1C,OAAO2X,GAAwC,OAAzBA,EAAY17D,SAAoB07D,EAAc,MAElE6jK,GAAkB,SAAU93N,EAAKN,GACnC,QAASm4N,GAAY73N,EAAKN,IAExBq4N,GAAW,SAAUz/N,EAAYwlB,GACnC,IAAIk6M,EAAYl6M,EAAIm/B,aAChBg7K,EAAWn6M,EAAIm/B,aAGnB,OAFA+6K,EAAUtkJ,eAAep7E,GACzB2/N,EAASrpK,YAAYt2D,GACd,CACL0/N,EAAUE,gBACVD,EAASC,kBAGTC,GAAc,SAAUz4N,EAAM+9D,GAChC,IAAI26J,EAAWhQ,GAAgBtxN,OAAO4I,GAClC24N,EAAcrI,GAAYvyJ,GAC1B66J,EAAcD,EAAYt3M,KAAKq3M,GACnC,OAAOE,EAAcA,EAAYzQ,UAAY,MAE3C0Q,GAAa,SAAU74N,EAAM+9D,GAC/B,IAAI26J,EAAWhQ,GAAgBztN,MAAM+E,GACjC24N,EAAcrI,GAAYvyJ,GAC1B66J,EAAcD,EAAY/nG,KAAK8nG,GACnC,OAAOE,EAAcA,EAAYzQ,UAAY,MAE3C2Q,GAAe,SAAUzzN,EAAQs6C,EAAMoe,EAAU3/C,GACnD,IAAIkZ,EAAQ+gM,GAAShzN,EAAQ+Y,GACzB61J,EAAY5uK,EAAOzM,WAOvB,OANAq7K,EAAU/8K,aAAaogC,EAAM,GAAIjyB,GACjC/Q,GAAM4O,KAAKy8C,GAAM,SAAUwM,GACzB8nH,EAAU/8K,aAAai1D,EAAI9mD,MAE7B4uK,EAAU/8K,aAAaogC,EAAM,GAAIjyB,GACjC4uK,EAAUt4J,YAAYtW,GACfwzN,GAAWl5K,EAAKA,EAAKloD,OAAS,GAAIsmE,IAEvC7mE,GAAe,SAAUmO,EAAQs6C,EAAMoe,GACzC,IAAIk2G,EAAY5uK,EAAOzM,WAIvB,OAHAtE,GAAM4O,KAAKy8C,GAAM,SAAUrjD,GACzB23K,EAAU/8K,aAAaoF,EAAK+I,MAEvBozN,GAAYpzN,EAAQ04D,IAEzBh9C,GAAc,SAAU1b,EAAQs6C,EAAMoe,EAAUz9D,GAElD,OADAA,EAAIygB,YAAY4+B,EAAKnf,UAAWn7B,GACzBwzN,GAAWl5K,EAAK,GAAIoe,IAEzBg7J,GAAgB,SAAUv9K,EAAYl7C,EAAK8d,EAAKwjC,GAClD,IAAIg2K,EAAcC,GAAcv3N,EAAKk7C,EAAYoG,GAC7Co3K,EAAWb,GAAY73N,EAAK8d,EAAII,gBAChCy6M,EAASf,GAAcJ,GAAYF,EAAY3rN,aAC/CitN,EAAY,EAAGC,EAAM,EACrBp7J,EAAWz9D,EAAI06C,UACfo+K,EAAO,SAAUx/K,GACnB,IAAI8+K,EAAWhQ,GAAgBL,eAAejqM,GAC1Cu6M,EAAcrI,GAAYhwN,EAAI06C,WAC9Bq+K,EAASz/K,IAAas/K,EAAYP,EAAY/nG,KAAK8nG,GAAYC,EAAYt3M,KAAKq3M,GACpF,OAAOW,GAASlB,GAAY73N,EAAK+4N,EAAOn5N,aAAe84N,GAEzD,OAAII,EAAKF,GACAhiO,GAAa8hO,EAAUC,EAAQl7J,GAC7Bq7J,EAAKD,GACPp4M,GAAYi4M,EAAUC,EAAQl7J,EAAUz9D,GAE1Cw4N,GAAaE,EAAUC,EAAQl7J,EAAU3/C,IAE9Ck7M,GAAa,CACf5B,eAAgBA,GAChBqB,cAAeA,GACfX,gBAAiBA,GACjBF,cAAeA,GACfrjH,UAAWijH,IAGTyB,GAASjlO,GAAM4O,KACfs2N,GAAe,SAAUl5N,GAC3BjS,KAAK8rL,QAAU,SAAUu0C,EAAOC,GAC9B,GAAID,EAAM71N,WAAa81N,EAAM91N,SAC3B,OAAO,EAET,IAAIwiN,EAAa,SAAUr7M,GACzB,IAAI0oH,EAAU,GAOd,OANA6wG,GAAOj5N,EAAI+6M,WAAWr7M,IAAO,SAAUqD,GACrC,IAAI1Q,EAAO0Q,EAAKxK,SAAS+f,cACC,IAAtBjmB,EAAK4J,QAAQ,MAAuB,UAAT5J,GAA8C,IAA1BA,EAAK4J,QAAQ,WAC9DmsH,EAAQ/1H,GAAQ2N,EAAImzC,UAAUzzC,EAAMrN,OAGjC+1H,GAEL+wG,EAAiB,SAAUC,EAAMC,GACnC,IAAI5lO,EAAOpB,EACX,IAAKA,KAAQ+mO,EACX,GAAIA,EAAK7iO,eAAelE,GAAO,CAE7B,GADAoB,EAAQ4lO,EAAKhnO,GACQ,qBAAVoB,EACT,OAAO,EAET,GAAI2lO,EAAK/mO,KAAUoB,EACjB,OAAO,SAEF4lO,EAAKhnO,GAGhB,IAAKA,KAAQgnO,EACX,GAAIA,EAAK9iO,eAAelE,GACtB,OAAO,EAGX,OAAO,GAET,QAAK8mO,EAAepe,EAAWqT,GAAQrT,EAAWsT,QAG7C8K,EAAen5N,EAAIw2C,WAAWx2C,EAAImzC,UAAUi7K,EAAO,UAAWpuN,EAAIw2C,WAAWx2C,EAAImzC,UAAUk7K,EAAO,cAG/FqE,GAAUniK,eAAe69J,KAAWsE,GAAUniK,eAAe89J,OAIrEiL,GAAkB,SAAUt9N,GAC9B,IAAIuL,EAAW,GACXgyN,EAAUv9N,EAAIgE,MAClB,MAAOu5N,EACLhyN,EAAS1M,KAAKomD,GAAQN,QAAQ44K,IAC9BA,EAAUA,EAAQn9K,UAEpB,OAAO70C,GAELiyN,GAAmB,SAAUx9N,GAC/B,IAAIy9N,EAASv6E,GAAcljJ,EAAK,MAC5BynN,EAAM9gN,EAAO22N,GAAgBt9N,GAAKxB,OAAO,GAAIyhD,IAC7Cw9K,EAAOtiO,SAAWssN,EAAItsN,QACxByL,EAAK6gN,EAAK1mE,KAGV28E,GAAoB,SAAU19N,GAChCiH,GAAMjH,GACNkH,GAAOlH,EAAKilD,GAAQR,SAAS,6BAE3Bk5K,GAAoB,SAAU39N,GAChC,OAAO8iB,GAAO9iB,GAAsB,MAAf02J,GAAM12J,GAAkBigD,GAAKjgD,IAEhD49N,GAAkB,SAAU59N,GAC9B,OAA2D,IAApD2G,EAAO4E,GAASvL,GAAM29N,IAAmBxiO,QAE9C0iO,GAAsB,SAAU79N,GAClCogD,GAAUpgD,GAAK4G,MAAK,SAAUw5C,GAC5ByhG,GAAYzhG,GAAWx5C,MAAK,SAAUk3N,GAChCx9K,GAAQtgD,IAAQigD,GAAKG,IAAcE,GAAQw9K,IAC7C/8E,GAAS3gG,UAKb29K,GAAY,CACdP,iBAAkBA,GAClBE,kBAAmBA,GACnBE,gBAAiBA,GACjBC,oBAAqBA,IAGnBG,GAAYhmO,GAAMinE,QACtB,SAASg/J,GAAQ5lO,GACf,IACIqlB,EAAQwgN,EAAcC,EAAazkO,EAAQ0kO,EAD3Cp9N,EAAO,GAQX,OANA3I,EAAWA,GAAY,GACvBqlB,EAASrlB,EAASqlB,OAClBwgN,EAAeF,GAAU3lO,EAASulB,eAAiB,IACnDugN,EAAcH,GAAU3lO,EAASwlB,cAAgB,IACjDnkB,EAASs8M,GAASP,cAAcp9M,EAASgmO,iBAAmB,MAAOhmO,EAASm9M,UAC5E4oB,EAAyC,SAA5B/lO,EAASimO,eACf,CACLh+M,MAAO,SAAUjqB,EAAM+xB,EAAOnhB,GAC5B,IAAIxL,EAAG1E,EAAGgQ,EAAMtP,EAQhB,GAPIimB,GAAUwgN,EAAa7nO,IAAS2K,EAAK7F,OAAS,IAChD1D,EAAQuJ,EAAKA,EAAK7F,OAAS,GACvB1D,EAAM0D,OAAS,GAAe,OAAV1D,GACtBuJ,EAAKnC,KAAK,OAGdmC,EAAKnC,KAAK,IAAKxI,GACX+xB,EACF,IAAK3sB,EAAI,EAAG1E,EAAIqxB,EAAMjtB,OAAQM,EAAI1E,EAAG0E,IACnCsL,EAAOqhB,EAAM3sB,GACbuF,EAAKnC,KAAK,IAAKkI,EAAK1Q,KAAM,KAAMqD,EAAOqN,EAAKtP,OAAO,GAAO,KAI5DuJ,EAAKA,EAAK7F,SADP8L,GAASm3N,EACQ,IAEA,MAElBn3N,GAASyW,GAAUygN,EAAY9nO,IAAS2K,EAAK7F,OAAS,IACxD1D,EAAQuJ,EAAKA,EAAK7F,OAAS,GACvB1D,EAAM0D,OAAS,GAAe,OAAV1D,GACtBuJ,EAAKnC,KAAK,QAIhBqiB,IAAK,SAAU7qB,GACb,IAAIoB,EACJuJ,EAAKnC,KAAK,KAAMxI,EAAM,KAClBqnB,GAAUygN,EAAY9nO,IAAS2K,EAAK7F,OAAS,IAC/C1D,EAAQuJ,EAAKA,EAAK7F,OAAS,GACvB1D,EAAM0D,OAAS,GAAe,OAAV1D,GACtBuJ,EAAKnC,KAAK,QAIhBnB,KAAM,SAAUA,EAAMi9D,GAChBj9D,EAAKvC,OAAS,IAChB6F,EAAKA,EAAK7F,QAAUw/D,EAAMj9D,EAAOhE,EAAOgE,KAG5CgD,MAAO,SAAUhD,GACfsD,EAAKnC,KAAK,YAAanB,EAAM,QAE/B6C,QAAS,SAAU7C,GACjBsD,EAAKnC,KAAK,UAAQnB,EAAM,WAE1B6gO,GAAI,SAAUloO,EAAMqH,GACdA,EACFsD,EAAKnC,KAAK,KAAMxI,EAAM,IAAKqD,EAAOgE,GAAO,MAEzCsD,EAAKnC,KAAK,KAAMxI,EAAM,MAEpBqnB,GACF1c,EAAKnC,KAAK,OAGd4B,QAAS,SAAU/C,GACjBsD,EAAKnC,KAAK,YAAanB,EAAM,IAAKggB,EAAS,KAAO,KAEpDk6D,MAAO,WACL52E,EAAK7F,OAAS,GAEhBwuB,WAAY,WACV,OAAO3oB,EAAK3B,KAAK,IAAIpF,QAAQ,MAAO,MAK1C,SAASukO,GAAgBnmO,EAAUohD,QAClB,IAAXA,IACFA,EAAS09J,MAEX,IAAInvF,EAASi2G,GAAO5lO,GACpBA,EAAWA,GAAY,GACvBA,EAASsjB,WAAW,aAActjB,IAAWA,EAASsjB,SACtD,IAAImC,EAAY,SAAUpa,GACxB,IAAI84K,EAAU7gK,EACdA,EAAWtjB,EAASsjB,SACpB6gK,EAAW,CACTtqK,EAAG,SAAUxO,GACXskH,EAAOtqH,KAAKgG,EAAKjM,MAAOiM,EAAKi3D,MAE/BhpD,EAAG,SAAUjO,GACXskH,EAAOznH,QAAQmD,EAAKjM,QAEtBsa,EAAG,SAAUrO,GACXskH,EAAOu2G,GAAG76N,EAAKrN,KAAMqN,EAAKjM,QAE5B8a,GAAI,SAAU7O,GACZskH,EAAOvnH,QAAQiD,EAAKjM,QAEtB0a,EAAG,SAAUzO,GACXskH,EAAOtnH,MAAMgD,EAAKjM,QAEpBgnO,GAAI,SAAU/6N,GACZ,GAAIA,EAAOA,EAAKiM,WACd,GACEuvD,EAAKx7D,SACEA,EAAOA,EAAKqhB,QAI3BijG,EAAOpwC,QACP,IAAI1Y,EAAO,SAAUx7D,GACnB,IACIrN,EAAM6jD,EAAS9xB,EAAOojG,EAAU3zE,EAAW6mL,EAAajjO,EAAG1E,EAAG4nO,EAD9DjhL,EAAU8+H,EAAS94K,EAAK7J,MAE5B,GAAK6jD,EA4CHA,EAAQh6C,OA5CI,CAIZ,GAHArN,EAAOqN,EAAKrN,KACZ6jD,EAAUx2C,EAAKyZ,WACfiL,EAAQ1kB,EAAKlE,WACTmc,GAAYyM,GAASA,EAAMjtB,OAAS,IACtCujO,EAAc,GACdA,EAAY1kO,IAAM,GAClB2kO,EAAcllL,EAAO8gK,eAAe72M,EAAKrN,MACrCsoO,GAAa,CACf,IAAKljO,EAAI,EAAG1E,EAAI4nO,EAAYr9J,gBAAgBnmE,OAAQM,EAAI1E,EAAG0E,IACzD+vH,EAAWmzG,EAAYr9J,gBAAgB7lE,GACnC+vH,KAAYpjG,EAAMpuB,MACpB69C,EAAYzvB,EAAMpuB,IAAIwxH,GACtBkzG,EAAY1kO,IAAIwxH,GAAY3zE,EAC5B6mL,EAAY7/N,KAAK,CACfxI,KAAMm1H,EACN/zH,MAAOogD,KAIb,IAAKp8C,EAAI,EAAG1E,EAAIqxB,EAAMjtB,OAAQM,EAAI1E,EAAG0E,IACnC+vH,EAAWpjG,EAAM3sB,GAAGpF,KACdm1H,KAAYkzG,EAAY1kO,MAC5B69C,EAAYzvB,EAAMpuB,IAAIwxH,GACtBkzG,EAAY1kO,IAAIwxH,GAAY3zE,EAC5B6mL,EAAY7/N,KAAK,CACfxI,KAAMm1H,EACN/zH,MAAOogD,KAIbzvB,EAAQs2M,EAIZ,GADA12G,EAAO1nG,MAAM5c,EAAKrN,KAAM+xB,EAAO8xB,IAC1BA,EAAS,CACZ,GAAIx2C,EAAOA,EAAKiM,WACd,GACEuvD,EAAKx7D,SACEA,EAAOA,EAAKqhB,MAEvBijG,EAAO9mG,IAAI7qB,MAWjB,OALkB,IAAdqN,EAAK7J,MAAexB,EAASi2E,MAG/BkuG,EAAS,IAAI94K,GAFbw7D,EAAKx7D,GAIAskH,EAAOr+F,cAEhB,MAAO,CAAE7L,UAAWA,GAGtB,IAAI8gN,GAAgB,SAAUxzE,EAAI8/D,EAAID,EAAI/3I,GACxC,IAAIpxD,EAAMxqB,EAAWwE,SAAS0mB,cAG9B,OAFAV,EAAIW,SAAS2oI,EAAI8/D,GACjBppM,EAAIY,OAAOuoM,EAAI/3I,GACRpxD,GAEL+8M,GAA+B,SAAU/8M,GAC3C,IAAIjD,EAAWutM,GAAgBL,eAAejqM,GAC1ChD,EAASstM,GAAgBJ,aAAalqM,GACtC2/C,EAAW3/C,EAAIg9M,wBACnB,OAAO/J,GAAYZ,cAAa,EAAO1yJ,EAAU3iD,GAAQ9kB,KAAI,SAAU+kO,GACrE,OAAKlN,GAAchzM,EAAUC,EAAQ2iD,IAAaowJ,GAAchzM,EAAUkgN,EAAWt9J,GAC5Em9J,GAAc//M,EAASoD,YAAapD,EAASzoB,SAAU2oO,EAAU98M,YAAa88M,EAAU3oO,UAExF0rB,KAERhN,MAAMgN,IAEPu5E,GAAY,SAAUv5E,GACxB,OAAOA,EAAIE,UAAYF,EAAM+8M,GAA6B/8M,IAExDk9M,GAAkB,CAAE3jI,UAAWA,IAE/B4jI,GAAc,SAAUh9M,EAAW7rB,GACrC,OAAOyqD,GAAS/9B,OAAOb,IAAkD,MAApCA,EAAUyyG,UAAUt+H,EAAS,IAEhE8oO,GAAqB,SAAUp9M,EAAK9gB,GACtC,IAAIihB,EAAW7rB,EACf6rB,EAAYH,EAAII,eAChB9rB,EAAS0rB,EAAIO,YACb,IAAI88M,EAAiB,SAAU5yB,GAC7B,OAAOtqL,EAAUsqL,IAAoD,IAApCtqL,EAAUsqL,GAAapqL,UAc1D,OAZ2B,IAAvBF,EAAUE,WACR/rB,EAAS,EACX4K,EAAOA,EAAK/G,QAAQ,UAAW,KACrBklO,EAAe,qBACzBn+N,EAAOA,EAAK/G,QAAQ,KAAM,WAExB7D,EAAS6rB,EAAU9mB,OACrB6F,EAAOA,EAAK/G,QAAQ,iBAAkB,KAC5BklO,EAAe,iBACzBn+N,EAAOA,EAAK/G,QAAQ,qBAAsB,YAGvC+G,GAELo+N,GAAiC,SAAUt9M,EAAKrqB,GAClD,IAAIwqB,EAAW7rB,EAgBf,OAfA6rB,EAAYH,EAAII,eAChB9rB,EAAS0rB,EAAIO,YACc,IAAvBJ,EAAUE,UAAkBL,EAAIE,YACH,MAA3BC,EAAU9kB,KAAK/G,IACjB6rB,EAAUqB,WAAWltB,EAAQ,GACxB,cAAcgG,KAAK3E,KACtBA,GAAS,MAE6B,MAA/BwqB,EAAU9kB,KAAK/G,EAAS,KACjC6rB,EAAUqB,WAAWltB,EAAS,EAAG,GAC5B,cAAcgG,KAAK3E,KACtBA,EAAQ,IAAMA,KAIbA,GAGL4nO,GAAgBx+K,GAASgxJ,eAAe,SACxCytB,GAAsB,SAAUlnO,EAAQ0B,GAC1C,IAAIgoB,EAAM1pB,EAAOuL,UAAUugB,SACvBjC,EAAYH,EAAII,eAChB9rB,EAAS0rB,EAAIO,YACbP,EAAIE,WAAai9M,GAAYh9M,EAAW7rB,IAAWyqD,GAAS/9B,OAAOb,KACrEA,EAAUmD,WAAWhvB,EAAS,EAAG,KACjC6rB,EAAUqB,WAAWltB,EAAQ,GAC7B0rB,EAAIW,SAASR,EAAW7rB,GACxB0rB,EAAIY,OAAOT,EAAW7rB,GACtBgC,EAAOuL,UAAUwf,OAAOrB,IAE1B1pB,EAAOuL,UAAUk2C,WAAW//C,IAE1BylO,GAAiB,SAAUnnO,EAAQX,EAAO6E,GAC5C,GAAkD,QAA9CA,EAAWsT,aAAa,kBAC1BtT,EAAWA,WAAW1B,aAAaxC,EAAO4L,IAAIqtD,eAAe55D,GAAQ6E,OAChE,CACL,IAAIoH,EAAOpH,EAAWqT,WAClB0iN,EAAQ/1N,EAAW8jD,WAClB18C,GAAQA,IAAS2uN,GAA2B,OAAlB3uN,EAAKnH,SAClCnE,EAAO4L,IAAI87M,QAAQxjN,EAAY7E,GAE/B6nO,GAAoBlnO,EAAQX,KAI9B+nO,GAAuB,SAAUx7N,EAAKhE,GACxCkW,EAAO5X,KAAK0F,EAAIoL,UAAUpP,EAAK,UAAUhG,IAAIirD,GAAQN,SAAS/9C,KAAKm3N,GAAUF,sBAE3E4B,GAA2B,SAAUrnO,EAAQs+C,GAC/C,IAAIgpL,EAAqBtnO,EAAOqhD,OAAO4hK,wBACnCr3M,EAAM5L,EAAO4L,IACjB,GAAI0yC,EAAO,CACT,IAAIipL,EAASvnO,EAAO0T,UAAW8zN,EAAiB,IAAI1C,GAAal5N,GACjEhM,GAAM4O,KAAK5C,EAAIE,OAAO,yBAAyB,SAAUR,GACvD,IAAK,IAAIm8N,EAAWn8N,EAAKpH,WAAYujO,GAAYA,IAAaF,EAAQE,EAAWA,EAASvjO,WACpFojO,EAAmBh8N,EAAKnH,SAAS+f,gBAAkBsjN,EAAe/hD,QAAQgiD,EAAUn8N,IACtFM,EAAI+I,OAAOrJ,GAAM,QAMvBo8N,GAAuB,SAAUx6K,GACnC,IAAI5hD,EAAO4hD,EACX,MAAO5hD,EAAOA,EAAKw7D,OACC,IAAdx7D,EAAK7J,MACP6J,EAAKqD,KAAK,oBAAqB,MAIjCg5N,GAAwB,SAAU//N,GACpChI,GAAM4O,KAAK5G,EAAIoI,qBAAqB,MAAM,SAAUpI,GAClDA,EAAIqnC,gBAAgB,yBAGpB24L,GAAmB,SAAUt8N,GAC/B,QAASA,EAAKkM,aAAa,sBAEzBqwN,GAAkB,SAAU7nO,EAAQsL,GACtC,OAAOA,IAAStL,EAAOqhD,OAAOslB,wBAAwBr7D,EAAKnH,WAEzD2jO,GAAwB,SAAU9nO,EAAQy0D,GAC5C,IAAIszK,EAAwBloK,EAAamoK,EAErC18N,EAAM2uN,EADNruN,EAAM5L,EAAO4L,IAAKL,EAAYvL,EAAOuL,UAErC08N,EAAgC,SAAU38N,GAE5C,IADA,IAAI1I,EAAO5C,EAAO0T,UACXpI,GAAQA,IAAS1I,EAAM0I,EAAOA,EAAKpH,WACxC,GAA4C,UAAxClE,EAAO4L,IAAI+wD,mBAAmBrxD,GAChC,OAAOA,EAGX,OAAO,MAET,GAAKmpD,EAAL,CAKA,GAFAz0D,EAAOuL,UAAUo9E,eAAel0B,GAChCszK,EAAyBE,EAA8BxzK,GACnDszK,EAGF,OAFAn8N,EAAI+I,OAAO8/C,QACXlpD,EAAUO,OAAOi8N,GAGnB,IAAIr+M,EAAM9d,EAAIkf,YACdxf,EAAOmpD,EAAOpM,gBACV/8C,GAA0B,IAAlBA,EAAKye,UACfL,EAAIW,SAAS/e,EAAMA,EAAKgxH,UAAUv5H,QAC7B4/L,GAAI3wK,KACPioM,EAAQxlK,EAAO9oC,YACXsuM,GAA4B,IAAnBA,EAAMlwM,WACjBze,EAAKoyN,WAAWzD,EAAMl1N,MACtBk1N,EAAM/1N,WAAW+iB,YAAYgzM,OAIjCvwM,EAAI41D,eAAe7qB,GACnB/qC,EAAI+iK,aAAah4H,IAEnB,IAAIyzK,EAAmB,SAAUx+M,GAC/B,IAAIs6M,EAAWhQ,GAAgBL,eAAejqM,GAC1Cu6M,EAAcrI,GAAY57N,EAAO0T,WAErC,GADAswN,EAAWC,EAAYt3M,KAAKq3M,GACxBA,EACF,OAAOA,EAASvQ,WAGpB5zJ,EAAcj0D,EAAIoL,UAAUy9C,EAAQ7oD,EAAIs8C,SACxCt8C,EAAI+I,OAAO8/C,GACPoL,GAAej0D,EAAIk2C,QAAQ+d,KAC7B7/D,EAAOgM,EAAE6zD,GAAahxD,QACtB6a,EAAIW,SAASw1C,EAAa,GAC1Bn2C,EAAIY,OAAOu1C,EAAa,GACnBonK,GAAcpnK,IAAiB+nK,GAAiB/nK,MAAiBmoK,EAAUE,EAAiBx+M,IAI/F9d,EAAI7E,IAAI84D,EAAaj0D,EAAIiE,OAAO,KAAM,CAAE,iBAAkB,QAH1D6Z,EAAMs+M,EACNp8N,EAAI+I,OAAOkrD,KAKft0D,EAAUwf,OAAOrB,KAEfy+M,GAAoB,SAAUnoO,EAAQX,EAAOuuJ,GAC/C,IAAIhnG,EAAQE,EAAY5iD,EAAYmlE,EAAUnc,EAAU1mD,EACpDiuD,EAAQ/qC,EAAKpe,EAAM88N,EAAc9pL,EACjC/yC,EAAYvL,EAAOuL,UAAWK,EAAM5L,EAAO4L,IAe/C,GAdI,QAAQ5H,KAAK3E,KACfA,EAAQynO,GAAmBv7N,EAAUugB,SAAUzsB,IAEjDunD,EAAS5mD,EAAO4mD,OAChBtI,EAAQsvG,EAAQtvG,MAChBwI,EAAas/K,GAAe,CAAE7iN,SAAUvjB,EAAOC,SAASsjB,UAAYvjB,EAAOqhD,QAC3E+mL,EAAe,yEACf5hO,EAAO,CACL9E,QAASrC,EACT4U,OAAQ,OACR1I,WAAW,EACX++D,MAAOsjF,EAAQtjF,OAEjB9jE,EAAOxG,EAAO8lC,KAAK,mBAAoBt/B,GACnCA,EAAKujE,qBACP/pE,EAAO8lC,KAAK,aAAc,CACxBpkC,QAAS8E,EAAK9E,QACduS,OAAQ,OACR1I,WAAW,EACX++D,MAAOsjF,EAAQtjF,YALnB,CASAjrE,EAAQmH,EAAK9E,SACsB,IAA/BrC,EAAMwI,QAAQ,cAChBxI,GAAS,YAEXA,EAAQA,EAAMwC,QAAQ,cAAeumO,GACrC1+M,EAAMne,EAAUugB,SAChB,IAAIu8M,EAAe3+M,EAAII,iBAAmBJ,EAAI4+M,cAAgB5+M,EAAI4+M,gBAAkB,MAChFj7N,EAAOrN,EAAO0T,UACd20N,IAAiBh7N,GAAQ9B,EAAU0C,eACjCrC,EAAIs8C,QAAQ76C,EAAKkK,aAAeswN,GAAgB7nO,EAAQqN,EAAKkK,aAAe3L,EAAIk2C,QAAQz0C,EAAKkK,cAC/FmS,EAAM9d,EAAIkf,YACVpB,EAAIW,SAAShd,EAAKkK,WAAY,GAC9BmS,EAAIY,OAAOjd,EAAKkK,WAAY,GAC5BhM,EAAUwf,OAAOrB,IAGhBne,EAAU0C,gBACbjO,EAAOuL,UAAUwf,OAAO67M,GAAgB3jI,UAAUjjG,EAAOuL,UAAUugB,WACnE9rB,EAAOmP,SAASsH,YAAY,UAAU,EAAO,MAC7CpX,EAAQ2nO,GAA+BhnO,EAAOuL,UAAUugB,SAAUzsB,IAEpE6E,EAAaqH,EAAUC,UACvB,IAAI+8N,EAAa,CACfz0N,QAAS5P,EAAWC,SAAS+f,cAC7Bnf,KAAM6oJ,EAAQ7oJ,KACdpC,QAAQ,GAGV,GADAuqD,EAAWtG,EAAOn/C,MAAMpI,EAAOkpO,IACT,IAAlB36E,EAAQtjF,OAAkBs6J,GAAW5B,eAAehjO,EAAOqhD,OAAQ6L,IAAa03K,GAAWlB,gBAAgB93N,EAAK1H,GAIlH,OAHAwlB,EAAMk7M,GAAWP,cAAcv9K,EAAYl7C,EAAK5L,EAAOuL,UAAUugB,SAAUohC,GAC3EltD,EAAOuL,UAAUwf,OAAOrB,QACxB1pB,EAAO8lC,KAAK,aAAct/B,GAK5B,GAFAkhO,GAAqBx6K,GACrB5hD,EAAO4hD,EAASlF,UACQ,eAApB18C,EAAKqD,KAAK,MAEZ,IADA8lD,EAASnpD,EACJA,EAAOA,EAAK4wH,KAAM5wH,EAAMA,EAAOA,EAAKw7D,MAAK,GAC5C,GAAkB,IAAdx7D,EAAK7J,OAAemK,EAAIs8C,QAAQ58C,EAAKrN,MAAO,CAC1C+B,EAAOqhD,OAAO+hK,aAAa93M,EAAKvH,OAAO9F,KAAM,SAC/CqN,EAAKvH,OAAOpB,OAAO8xD,EAAQnpD,EAAoB,OAAdA,EAAKrN,MAExC,MAKN,GADA+B,EAAOwoO,oBAAoBC,wBAAwBvkO,GAC9CqkO,EAAW/tF,QAGT,CACL0sF,GAAoBlnO,EAAQooO,GAC5BlkO,EAAaqH,EAAUC,UACvB69D,EAAWrpE,EAAO0T,UACU,IAAxBxP,EAAW6lB,SACb7lB,EAAaoH,EAAO+9D,EAEpB/9D,EAAOpH,EAET,MAAOoH,IAAS+9D,EACdnlE,EAAaoH,EACbA,EAAOA,EAAKpH,WAEd7E,EAAQ6E,IAAemlE,EAAWA,EAASrkE,UAAY4G,EAAI28M,aAAarkN,GACxE7E,EAAQynD,EAAWphC,UAAUkhC,EAAOn/C,MAAMpI,EAAMwC,QAAQ,qDAAqD,WAC3G,OAAOilD,EAAWphC,UAAUwnC,QAE1BhpD,IAAemlE,EACjBz9D,EAAI87M,QAAQr+I,EAAUhqE,GAEtBuM,EAAI48M,aAAatkN,EAAY7E,QAtB/BA,EAAQynD,EAAWphC,UAAUwnC,GAC7Bi6K,GAAennO,EAAQX,EAAO6E,GAwBhCmjO,GAAyBrnO,EAAQs+C,GACjCwpL,GAAsB9nO,EAAQ4L,EAAItM,IAAI,eACtCqoO,GAAsB3nO,EAAO0T,WAC7B0zN,GAAqBpnO,EAAO4L,IAAK5L,EAAOuL,UAAU4I,YAClDnU,EAAO8lC,KAAK,aAAct/B,GAC1BxG,EAAOm3C,cAELuxL,GAAe,SAAUrpO,GAC3B,IAAIuuJ,EACJ,MAAqB,kBAAVvuJ,GACTuuJ,EAAUhuJ,GAAMyC,OAAO,CACrBioE,MAAOjrE,EAAMirE,MACbvlE,KAAM,CAAEulE,MAAOjrE,EAAMirE,QACpBjrE,GACI,CACLqC,QAASrC,EAAMqC,QACfksJ,QAASA,IAGN,CACLlsJ,QAASrC,EACTuuJ,QAAS,KAGT+6E,GAAkB,SAAU3oO,EAAQX,GACtC,IAAI3B,EAASgrO,GAAarpO,GAC1B8oO,GAAkBnoO,EAAQtC,EAAOgE,QAAShE,EAAOkwJ,UAE/Cg7E,GAAgB,CAAEvE,cAAesE,IAEjCE,GAAY,4CACZC,GAAe,SAAUxjO,GAC3B,OAAOujO,GAAU7kO,KAAKsB,IAGpByjO,GAAiB,SAAU/oO,EAAQ/B,EAAM6hN,GAC3C,IAAIzgN,EAAQW,EAAOW,SAAS1C,EAAM6hN,GAClC,IAA4B,IAAxBzgN,EAAMwI,QAAQ,KAAa,CAC7B,IAAImhO,EAAUhpO,EAAOW,SAAS1C,EAAM,GAAI,QACxC,OAAO+qO,EAAQ7mO,eAAenC,EAAOsC,IAAM0mO,EAAQhpO,EAAOsC,IAAMw9M,EAEhE,OAAOzgN,GAGP4pO,GAAiB,SAAUjpO,GAC7B,OAAOA,EAAOW,SAAS,eAAgB,KAErCuoO,GAAa,SAAUlpO,GACzB,OAAOA,EAAOW,SAAS,UAAW,oBAEhCwoO,GAAqB,SAAUnpO,GACjC,OAAOA,EAAOW,SAAS,oBAAqB,KAE1CyoO,GAAY,SAAUppO,GACxB,OAAO+oO,GAAe/oO,EAAQ,UAAW,YAEvCqpO,GAAe,SAAUrpO,GAC3B,OAAO+oO,GAAe/oO,EAAQ,aAAc,KAE1CspO,GAA2B,SAAUtpO,GACvC,OAAOA,EAAOW,SAAS,0BAA2B,KAEhD4oO,GAAmB,SAAUvpO,GAC/B,OAAOA,EAAOW,SAAS,aAAa,IAElC6oO,GAAqB,SAAUxpO,GACjC,GAAIA,EAAOW,SAAS,oBAAoB,GACtC,MAAO,IAET,IAAIksB,EAAQ7sB,EAAOW,SAAS,oBAAqB,KACjD,OAAiB,IAAVksB,EAAkB,GAAKA,GAE5B48M,GAA0B,SAAUzpO,GACtC,OAAOA,EAAOW,SAAS,0BAA2B,KAEhD+oO,GAAuB,SAAU1pO,GACnC,OAAOA,EAAOW,SAAS,sBAAuB,mCAE5CgpO,GAAuB,SAAU3pO,GACnC,OAAOA,EAAOW,SAAS,sBAAuB,KAE5CipO,GAAmB,SAAU5pO,GAC/B,OAAOA,EAAOW,SAAS,eAAe,IAEpCkpO,GAAiC,SAAU7pO,GAC7C,OAAOA,EAAOW,SAAS,gCAAgC,IAErDmpO,GAAqB,SAAU9pO,GACjC,OAAOJ,GAAMoyM,QAAQhyM,EAAOW,SAAS,yBAA0B,MAE7DopO,GAAqB,SAAU/pO,GACjC,OAAOJ,GAAMoyM,QAAQhyM,EAAOW,SAAS,oBAAqB,MAExDqpO,GAAyB,SAAUhqO,GACrC,OAAOA,EAAOW,SAAS,wBAAyB8J,GAAS,GAAO,aAE9Dw/N,GAA4B,SAAUjqO,GACxC,OAAOA,EAAOW,SAAS,qBAAqB,EAAM,YAEhDupO,GAAsB,SAAUlqO,GAClC,OAAOA,EAAOW,SAAS,yBAAyB,EAAO,YAErDwpO,GAAwB,SAAUnqO,GACpC,OAAOA,EAAOW,SAAS,4BAA4B,EAAM,YAEvDypO,GAAoB,SAAUpqO,GAChC,OAAOA,EAAOW,SAAS,oBAAqB,GAAI,WAE9C0pO,GAAyB,SAAUrqO,GACrC,OAAOA,EAAOW,SAAS,0BAA2B,GAAI,WAEpD2pO,GAA6B,SAAUtqO,GACzC,OAAOA,EAAOW,SAAS,6BAA6B,EAAO,YAEzD4pO,GAAyB,SAAUvqO,GACrC,OAAOA,EAAOW,SAAS,wBAAyB,KAAM,aAEpD6pO,GAA0B,SAAUxqO,GACtC,OAAOA,EAAOW,SAAS,oBAAoB,EAAO,YAEhD8pO,GAA4B,SAAUzqO,GACxC,OAAOA,EAAOW,SAAS,6BAA8B,+BAAgC,WAEnFE,GAAW,CACbooO,eAAgBA,GAChBC,WAAYA,GACZC,mBAAoBA,GACpBC,UAAWA,GACXC,aAAcA,GACdC,yBAA0BA,GAC1BC,iBAAkBA,GAClBC,mBAAoBA,GACpBC,wBAAyBA,GACzBC,qBAAsBA,GACtBC,qBAAsBA,GACtBC,iBAAkBA,GAClBC,+BAAgCA,GAChCC,mBAAoBA,GACpBC,mBAAoBA,GACpBC,uBAAwBA,GACxBC,0BAA2BA,GAC3BC,oBAAqBA,GACrBC,sBAAuBA,GACvBC,kBAAmBA,GACnBC,uBAAwBA,GACxBC,2BAA4BA,GAC5BC,uBAAwBA,GACxBC,wBAAyBA,GACzBC,0BAA2BA,IAGzBC,GAAiB,SAAU1qO,EAAQ4H,GACrC,OAAO2sD,GAAK1H,GAAQN,QAAQ3kD,GAAM/G,GAAS4pO,0BAA0BzqO,KAEnEwjK,GAAQ,SAAU5/J,GACpB,MAA+D,QAAxD6lN,GAAWjpN,IAAI24C,SAASv1C,EAAS,aAAa,IAAmBklO,GAAallO,EAAQS,cAE3FsmO,GAAoB,SAAUD,EAAgBrhK,EAAU5wB,GAC1D,OAAOlqC,EAAOk7M,GAAWjpN,IAAIsS,WAAW2lC,EAAI5uB,YAAa,IAAKw/C,GAAWqhK,IAEvEE,GAAiB,SAAUF,EAAgBrhK,EAAU5wB,GACvD,IAAI0oB,EAAUwpK,GAAkBD,EAAgBrhK,EAAU5wB,GAC1D,OAAO36B,EAAO5X,KAAKi7D,EAAQA,EAAQp+D,OAAS,KAE1C8nO,GAAqB,SAAUxhK,EAAU2wJ,EAAOC,GAClD,IAAI6Q,EAAStR,GAAeQ,EAAO3wJ,GAC/B0hK,EAASvR,GAAeS,EAAO5wJ,GACnC,OAAOyhK,GAAUA,IAAWC,GAE1BC,GAAW,SAAUvyL,GACvB,OAAOo2K,GAAep2K,IAAQs2K,GAAct2K,IAE1CwyL,GAAoB,SAAUv5C,EAASj5I,GACzC,IAAKA,EACH,OAAOA,EAET,IAAI5uB,EAAY4uB,EAAI5uB,YAAa7rB,EAASy6C,EAAIz6C,SAC9C,OAAI0zL,EACE88B,GAAuB3kM,GACrB4+B,GAAS/9B,OAAOb,EAAU8B,aACrBqoM,GAAgBnqM,EAAU8B,YAAa,GAEvCqoM,GAAgBztN,MAAMsjB,GAGxBglM,GAAep2K,GAAOu7K,GAAgBnqM,EAAW7rB,EAAS,GAAKy6C,EAGpE+1K,GAAuB3kM,GACrB4+B,GAAS/9B,OAAOb,EAAUw+B,iBACrB2rK,GAAgBnqM,EAAUw+B,gBAAiBx+B,EAAUw+B,gBAAgBtjD,KAAKhC,QAE1EixN,GAAgBtxN,OAAOmnB,GAGzBklM,GAAct2K,GAAOu7K,GAAgBnqM,EAAW7rB,EAAS,GAAKy6C,GAIvEyyL,GAAoB1vN,EAAMyvN,IAAmB,GAC7CE,GAAqB3vN,EAAMyvN,IAAmB,GAC9CG,GAAc,CAChBV,eAAgBA,GAChBE,eAAgBA,GAChBpnE,MAAOA,GACPwnE,SAAUA,GACVC,kBAAmBA,GACnBC,kBAAmBA,GACnBC,mBAAoBA,GACpBN,mBAAoBA,IAGlBQ,GAAe,SAAUhiK,GAC3B,OAAO,SAAUzhE,GACf,OAAOwU,GAAGitD,EAAUxc,GAAQN,QAAQ3kD,EAAIgE,MAAM1H,eAG9ConO,GAAmB,SAAUjiK,EAAUzhE,GACzC,OAAOiuM,GAAWxsI,EAAUzhE,GAAOqjJ,GAAQrjJ,GAAK,SAAUhE,GACxD,OAAOqkD,GAAYrkD,IAAYgzK,GAAWhzK,KACzCynO,GAAahiK,IAAavrD,EAAO5B,QAElCqvN,GAAwB,SAAUvrO,GACpC,IAAIqN,EAAOrN,EAAO0T,UACdpI,EAAO+B,EAAKkK,YAAcvX,EAAO4L,IAAIs8C,QAAQ76C,EAAKkK,YAAclK,EAAKkK,WAAalK,EACtFrN,EAAOuL,UAAUmgB,kBAAkBpgB,EAAM,IAEvCkgO,GAAgB,SAAUxrO,GACxBA,EAAO4L,IAAIk2C,QAAQ9hD,EAAO0T,aAC5B1T,EAAOyhD,WAAW,IAClB8pL,GAAsBvrO,KAGtByrO,GAAkC,SAAU/5C,EAASg6C,EAAS9jO,GAChE,OAAOklD,GAAM6vK,GAAYC,gBAAgBh1N,GAAM+0N,GAAYE,eAAej1N,IAAM,SAAU+jO,EAAUC,GAClG,IAAIC,EAAqBT,GAAYH,mBAAkB,EAAMU,GACzDG,EAAoBV,GAAYH,mBAAkB,EAAOW,GACzDG,EAAoBX,GAAYH,mBAAkB,EAAOS,GAC7D,OAAIh6C,EACKirC,GAAYF,aAAa70N,EAAKmkO,GAAmBnqO,KAAI,SAAUoqO,GACpE,OAAOA,EAAQtb,QAAQob,IAAsBJ,EAAQhb,QAAQmb,MAC5DnvN,OAAM,GAEFigN,GAAYD,aAAa90N,EAAKmkO,GAAmBnqO,KAAI,SAAUqqO,GACpE,OAAOA,EAAQvb,QAAQmb,IAAuBH,EAAQhb,QAAQob,MAC7DpvN,OAAM,MAEVA,OAAM,IAEPwvN,GAAc,CAChB1S,eAAgB8R,GAChBE,cAAeA,GACfC,gCAAiCA,IAG/Bh3C,GAAa,SAAU5xJ,EAAO15B,EAAUmgJ,GAC1C,OAAOgC,GAAWzoH,EAAO15B,EAAUmgJ,GAAQ7sI,UAGzC0vN,GAA8B,SAAU9iK,EAAU/9D,GACpD,IAAI8gO,EAAcv/K,GAAQN,QAAQ8c,GAC9BrN,EAAYnP,GAAQN,QAAQjhD,GAChC,OAAOmpL,GAAWz4H,EAAW,WAAYxgD,EAAMY,GAAIgwN,KAEjDC,GAAe,SAAUhjK,EAAU/9D,GACrC,OAAOm9C,GAAS/9B,OAAOpf,IAAS,eAAetH,KAAKsH,EAAKvG,QAAyD,IAAhDonO,GAA4B9iK,EAAU/9D,IAEtGghO,GAAgB,SAAUhhO,GAC5B,OAAOm9C,GAASqM,UAAUxpD,IAA2B,MAAlBA,EAAKnH,UAAoBmH,EAAK0zC,aAAa,SAE5EutL,GAAY,SAAUljK,EAAU/9D,GAClC,OAAO4kN,GAAiB5kN,KAA0C,IAAjC+gO,GAAahjK,EAAU/9D,IAAmBghO,GAAchhO,IAASkhO,GAAWlhO,IAE3GkhO,GAAa/jL,GAASzJ,aAAa,qBACnCytL,GAAYhkL,GAASzJ,aAAa,kBAClC0tL,GAAejkL,GAASsxJ,kBAAkB,iBAAkB,OAC5D4yB,GAAc,SAAUryK,GAC1B,IAAI5tC,EAAQphB,EAAM09M,EAAU,EAC5B,GAAIujB,GAAUjyK,EAAYA,GACxB,OAAO,EAGP,GADAhvD,EAAOgvD,EAAW/iD,YACbjM,EACH,OAAO,EAETohB,EAAS,IAAI0rL,GAAW9sM,EAAMgvD,GAC9B,GACE,GAAIoyK,GAAaphO,GACfA,EAAOohB,EAAOC,MAAK,QAGrB,GAAI8/M,GAAUnhO,GACZA,EAAOohB,EAAOC,YAGhB,GAAI87B,GAASZ,KAAKv8C,GAChB09M,IACA19M,EAAOohB,EAAOC,WAFhB,CAKA,GAAI4/M,GAAUjyK,EAAYhvD,GACxB,OAAO,EAETA,EAAOohB,EAAOC,cACPrhB,GACT,OAAO09M,GAAW,GAGlB4jB,GAAY,SAAUhlO,GACxB,OAAO+kO,GAAY/kO,EAAIgE,QAErBihO,GAAQ,CAAE/qL,QAAS8qL,IAEnBE,GAAgB1/K,GAAU,QAAS,YACnC2/K,GAAgB3/K,GAAU,OAAQ,MAClC4/K,GAAmB,SAAU3jK,EAAU5wB,GACzC,IAAI89J,EAAU1pJ,GAAQN,QAAQ8c,GAC1BzkC,EAAeioB,GAAQN,QAAQ9T,EAAI5uB,aACvC,OAAOqiN,GAAY1S,eAAejjB,EAAS3xK,GAAchjC,KAAI,SAAUirB,GACrE,OAAOigN,GAAcjgN,EAAO4rB,OAG5Bw0L,GAAoB,SAAUC,GAChC,OAAwE,IAAjE9wN,GAAG8wN,EAAchnO,OAAO2mB,QAASqgN,EAAc5mO,KAAKumB,UAEzDsgN,GAAgB,SAAUD,GAC5B,OAAOnpO,GAAOmpO,EAAchnO,OAAO2mB,SAASzP,MAAK,SAAUgwN,GACzD,OAAOrpO,GAAOmpO,EAAc5mO,KAAKumB,SAASte,QAAO,SAAU8+N,GACzD,OAAOjxN,GAAGgxN,EAASC,SAEpB5wN,UAED6wN,GAAa,SAAUJ,GACzB,OAA+E,IAAxEzkL,GAAS60B,uBAAuB4vJ,EAAchnO,OAAO2mB,QAAQjhB,SAA0F,IAAtE68C,GAAS60B,uBAAuB4vJ,EAAc5mO,KAAKumB,QAAQjhB,QAEjJ2hO,GAAa,SAAUlkK,EAAUqoH,EAAS87C,GAC5C,OAAI/kL,GAASZ,KAAK2lL,EAAc1wL,WAAWtxC,aAAuD,IAAzCqhO,GAAM/qL,QAAQ0rL,EAAc3gN,SAC5E8vM,GAAYH,YAAW,EAAOgR,EAAc3gN,QAAQjhB,OAAOwR,MAAK,SAAUqwN,GAC/E,OAAIA,EAAoB/c,QAAQ8c,EAAc1wL,YACrC6/K,GAAYZ,aAAarqC,EAASroH,EAAUokK,GAAqBrwN,MAAK,SAAU9W,GACrF,OAAO0mO,GAAiB3jK,EAAU/iE,MAG7BwX,EAAOH,KAAK6vN,MAEpB9wN,MAAM8wN,GAEFA,GAGPE,GAAgB,SAAUrkK,EAAUqoH,EAAShoK,GAC/C,IAAIikN,EAAeX,GAAiB3jK,EAAU2qJ,GAAgBL,eAAejqM,IACzEkkN,EAAaD,EAAavwN,MAAK,SAAUywN,GAC3C,OAAOlR,GAAYZ,aAAarqC,EAASroH,EAAUwkK,EAAS/wL,YAAY1/B,MAAK,SAAU9W,GACrF,OAAO0mO,GAAiB3jK,EAAU/iE,GAAI1E,KAAI,SAAUisO,GAClD,OAAON,GAAWlkK,EAAUqoH,EAASm8C,YAI3C,OAAO/gL,GAAM6gL,EAAcC,EAAYb,IAAex+N,QAAO,SAAU2+N,GACrE,OAAOD,GAAkBC,IAAkBC,GAAcD,IAAkBI,GAAWJ,OAGtFY,GAAS,SAAUzkK,EAAUqoH,EAAShoK,GACxC,OAAOA,EAAIE,UAAY8jN,GAAcrkK,EAAUqoH,EAAShoK,GAAO5L,EAAO5B,QAEpE6xN,GAAqB,CAAEptL,KAAMmtL,IAE7BE,GAAW,SAAUvvN,GACvB,OAAOA,EAAGrY,MAAM,GAAI,IAElB6nO,GAAiB,SAAU/lN,EAAOtlB,EAAMqrB,GAC1C,OAAI4nL,GAAWjzM,EAAMslB,GACZ8lN,GAAS7sK,GAAQj5C,GAAO,SAAUtgB,GACvC,OAAOqmB,EAAUrmB,IAAQwU,GAAGxU,EAAKhF,OAG5B,IAGPsrO,GAAY,SAAUhmN,EAAOtlB,GAC/B,OAAOqrO,GAAe/lN,EAAOtlB,EAAM6H,GAAS,KAE1C0jO,GAAiB,SAAUjmN,EAAOtlB,GACpC,MAAO,CAACslB,GAAOrM,OAAOqyN,GAAUhmN,EAAOtlB,KAErCwrO,GAAU,CACZ/5B,aAAc45B,GACd9sK,QAAS+sK,GACTC,eAAgBA,IAGdE,GAAgC,SAAUxhN,GAC5C,IAAI8oC,EAAaxiD,GAAS0Z,GAC1B,OAAOm0C,GAAUrL,EAAYzN,IAAS1rC,MAAK,WACzC,OAAOm5C,KACN,SAAUxvD,GACX,OAAOwvD,EAAWvvD,MAAM,EAAGD,OAG3BmoO,GAAkB,SAAUzhN,GAC9B,IAAI1Z,EAAWk7N,GAA8BxhN,GAE7C,OADAre,EAAK2E,EAAUw1I,IACRx1I,GAELo7N,GAAkB,SAAUllK,EAAUx8C,GACxC,IAAIs0C,EAAUitK,GAAQD,eAAethN,EAAOw8C,GAC5C,OAAOp6D,EAAKkyD,EAAQr1B,UAAW+gM,GAAM/qL,SAAStzC,KAAKm6I,KAEjD6lF,GAAgB,SAAUz8N,GAC5B,OAEc,IAFPxD,EAAOunM,GAAa/jM,IAAK,SAAUA,GACxC,OAAQ86N,GAAM/qL,QAAQ/vC,MACrBhP,QAED0rO,GAAmB,SAAUplK,EAAUqlK,EAAWC,EAASC,GAC7D,GAAI/B,GAAM/qL,QAAQ6sL,GAEhB,OADAhJ,GAAUL,kBAAkBqJ,GACrBhS,GAAYC,gBAAgB+R,EAAQ/iO,OAEzC4iO,GAAcI,IAAmB/B,GAAM/qL,QAAQ4sL,IACjDhsO,GAAOksO,EAAgB/hL,GAAQL,QAAQ,OAEzC,IAAI1P,EAAW6/K,GAAYD,aAAaiS,EAAQ/iO,MAAOooN,GAAgBtxN,OAAOksO,EAAehjO,QAK7F,OAJA4C,EAAK8/N,GAAgBI,IAAY,SAAUl6K,GACzC9xD,GAAOksO,EAAgBp6K,MAEzB+5K,GAAgBllK,EAAUqlK,GACnB5xL,GAEL+xL,GAAqB,SAAUxlK,EAAUqlK,EAAWC,GACtD,GAAI9B,GAAM/qL,QAAQ6sL,GAKhB,OAJAhmF,GAASgmF,GACL9B,GAAM/qL,QAAQ4sL,IAChB/I,GAAUL,kBAAkBoJ,GAEvB/R,GAAYC,gBAAgB8R,EAAU9iO,OAE/C,IAAIkxC,EAAW6/K,GAAYE,eAAe8R,EAAQ/iO,OAKlD,OAJA4C,EAAK8/N,GAAgBI,IAAY,SAAUl6K,GACzC1lD,GAAO6/N,EAASn6K,MAElB+5K,GAAgBllK,EAAUqlK,GACnB5xL,GAELgyL,GAAqB,SAAUH,EAAS9hN,GAC1C,IAAIshN,EAAiBC,GAAQD,eAAethN,EAAO8hN,GACnD,OAAO7wN,EAAO5X,KAAKioO,EAAeA,EAAeprO,OAAS,KAExDgsO,GAAoB,SAAUL,EAAWC,GAC3C,OAAO94B,GAAW84B,EAASD,GAAaI,GAAmBH,EAASD,GAAa5wN,EAAO5B,QAEtF8yN,GAAS,SAAUpyI,EAAO/vE,GAC5B8vM,GAAYH,WAAW5/H,EAAO/vE,EAAMjhB,OAAOhK,KAAI,SAAUk7C,GACvD,OAAOA,EAAStxC,aACf5J,IAAIirD,GAAQN,SAASh+C,OAAOs5C,IAAMr5C,KAAKm6I,KAExCsmF,GAAiB,SAAU5lK,EAAUqlK,EAAWC,GAGlD,OAFAK,IAAO,EAAMN,GACbM,IAAO,EAAOL,GACPI,GAAkBL,EAAWC,GAASnyN,KAAKhB,EAAMqzN,GAAoBxlK,EAAUqlK,EAAWC,GAAUnzN,EAAMizN,GAAkBplK,EAAUqlK,EAAWC,KAEtJO,GAAc,SAAU7lK,EAAUqoH,EAASo5C,EAAQC,GACrD,OAAOr5C,EAAUu9C,GAAe5lK,EAAU0hK,EAAQD,GAAUmE,GAAe5lK,EAAUyhK,EAAQC,IAE3FoE,GAAc,CAAED,YAAaA,IAE7B/uK,GAAkB,SAAUngE,EAAQ0xL,GACtC,IAAI50I,EACAusB,EAAWxc,GAAQN,QAAQvsD,EAAO0T,WAOtC,OANAopC,EAAWixL,GAAmBptL,KAAK0oB,EAASz9D,MAAO8lL,EAAS1xL,EAAOuL,UAAUugB,UAAU1O,MAAK,SAAU8vN,GACpG,OAAOiC,GAAYD,YAAY7lK,EAAUqoH,EAASw7C,EAAchnO,OAAO2mB,QAASqgN,EAAc5mO,KAAKumB,YAErGiwB,EAAStuC,MAAK,SAAUiqC,GACtBz4C,EAAOuL,UAAUwf,OAAO0tB,EAAIg7K,cAEvB32K,EAASrgC,UAEd2yN,GAAsB,CAAEjvK,gBAAiBA,IAEzCkvK,GAAyB,SAAUhmK,EAAU99D,GAC/C,IAAIme,EAAMne,EAAUugB,SACpB,OAAOghC,GAAMo/K,GAAY1S,eAAenwJ,EAAUxc,GAAQN,QAAQ7iC,EAAII,iBAAkBoiN,GAAY1S,eAAenwJ,EAAUxc,GAAQN,QAAQ7iC,EAAIs/B,gBAAgB,SAAU8hL,EAAQC,GACjL,OAA2B,IAAvB3uN,GAAG0uN,EAAQC,KACbrhN,EAAI61D,iBACJ4vJ,GAAYD,YAAY7lK,GAAU,EAAMyhK,EAAQC,GAAQv8N,MAAK,SAAUiqC,GACrEltC,EAAUwf,OAAO0tB,EAAIg7K,eAEhB,MAIR/2M,OAAM,IAEP4yN,GAAmB,SAAU1sO,EAAMuiO,GACrC,IAAI75N,EAAOuhD,GAAQN,QAAQ44K,GACvB77E,EAAS9tI,EAAMY,GAAIxZ,GACvB,OAAOooJ,GAAS1/I,EAAM8tM,GAAa9vD,GAAQ7sI,UAEzC8yN,GAAqB,SAAU3sO,EAAM8mB,GACvC,OAAO4lN,GAAiB1sO,EAAM8mB,EAAII,iBAAmBwlN,GAAiB1sO,EAAM8mB,EAAIs/B,eAE9EwmL,GAAuB,SAAU5sO,EAAM8mB,GACzC,IAAI+lN,EAAa9S,GAAYD,aAAa95N,EAAKgJ,MAAOooN,GAAgBL,eAAejqM,IAAMrN,SACvFqzN,EAAS/S,GAAYF,aAAa75N,EAAKgJ,MAAOooN,GAAgBJ,aAAalqM,IAAMrN,SACrF,OAAQkzN,GAAmB3sO,EAAM8mB,IAAQ+lN,GAAcC,GAErDC,GAAc,SAAU3vO,GAG1B,OAFAA,EAAOyhD,WAAW,IAClBzhD,EAAOuL,UAAUmgB,qBACV,GAELkkN,GAAc,SAAU5vO,GAC1B,IAAIqpE,EAAWxc,GAAQN,QAAQvsD,EAAO0T,WAClCgW,EAAM1pB,EAAOuL,UAAUugB,SAC3B,OAAO0jN,GAAqBnmK,EAAU3/C,GAAOimN,GAAY3vO,GAAUqvO,GAAuBhmK,EAAUrpE,EAAOuL,YAEzGskO,GAAoB,SAAU7vO,EAAQ0xL,GACxC,OAAO1xL,EAAOuL,UAAU0C,eAAwB2hO,GAAY5vO,IAE1D8vO,GAAmB,CAAE3vK,gBAAiB0vK,IAEtC30E,GAAa,SAAUC,GACzB,IAAK7vI,EAAQ6vI,GACX,MAAM,IAAIr+I,MAAM,0BAElB,GAAqB,IAAjBq+I,EAAMp4J,OACR,MAAM,IAAI+Z,MAAM,mCAElB,IAAIs+I,EAAe,GACfC,EAAM,GAyDV,OAxDA7sJ,EAAK2sJ,GAAO,SAAUG,EAAOxlJ,GAC3B,IAAIqK,EAASX,GAAK87I,GAClB,GAAsB,IAAlBn7I,EAAOpd,OACT,MAAM,IAAI+Z,MAAM,kCAElB,IAAItf,EAAM2iB,EAAO,GACb9gB,EAAQi8J,EAAM99J,GAClB,QAAiByf,IAAbo+I,EAAI79J,GACN,MAAM,IAAIsf,MAAM,0BAA4Btf,GACvC,GAAY,SAARA,EACT,MAAM,IAAIsf,MAAM,yCACX,IAAKwO,EAAQjsB,GAClB,MAAM,IAAIyd,MAAM,mCAElBs+I,EAAa30J,KAAKjJ,GAClB69J,EAAI79J,GAAO,WACT,IAAI+9J,EAAYz4J,UAAUC,OAC1B,GAAIw4J,IAAcl8J,EAAM0D,OACtB,MAAM,IAAI+Z,MAAM,qCAAuCtf,EAAM,cAAgB6B,EAAM0D,OAAS,KAAO1D,EAAQ,UAAYk8J,GAGzH,IADA,IAAI/0J,EAAO,IAAIG,MAAM40J,GACZl4J,EAAI,EAAGA,EAAImD,EAAKzD,OAAQM,IAC/BmD,EAAKnD,GAAKP,UAAUO,GAEtB,IAAI5E,EAAQ,SAAU+8J,GACpB,IAAIC,EAAaj8I,GAAKg8I,GACtB,GAAIJ,EAAar4J,SAAW04J,EAAW14J,OACrC,MAAM,IAAI+Z,MAAM,iDAAmDs+I,EAAan0J,KAAK,KAAO,aAAew0J,EAAWx0J,KAAK,MAE7H,IAAI2gJ,EAAUtqI,GAAO89I,GAAc,SAAUM,GAC3C,OAAO/nJ,EAAS8nJ,EAAYC,MAE9B,IAAK9T,EACH,MAAM,IAAI9qI,MAAM,gEAAkE2+I,EAAWx0J,KAAK,MAAQ,eAAiBm0J,EAAan0J,KAAK,OAE/I,OAAOu0J,EAASh+J,GAAKqJ,MAAM,KAAML,IAEnC,MAAO,CACLgW,KAAM,WACJ,GAAI1Z,UAAUC,SAAWo4J,EAAMp4J,OAC7B,MAAM,IAAI+Z,MAAM,+CAAiDq+I,EAAMp4J,OAAS,SAAWD,UAAUC,QAEvG,IAAI4N,EAAS7N,UAAUgT,GACvB,OAAOnF,EAAO9J,MAAM,KAAML,IAE5B/H,MAAOA,EACPskE,IAAK,SAAUz1D,GACbpO,EAAWotD,QAAQyW,IAAIz1D,EAAO,CAC5B8tJ,aAAcA,EACdn9I,YAAazgB,EACbm+J,OAAQn1J,UAMX60J,GAELO,GAAM,CAAEnO,SAAUyN,IAElB60E,GAAS,SAAUt3L,GACrB,OAAO+hL,GAAuB/hL,GAAKp7B,OAAOwqC,KAExCuuI,GAAS,SAAU1E,EAAS9uL,EAAM61C,GACpC,IAAIu3L,EAAezhO,EAAO6/N,GAAQD,eAAethL,GAAQN,QAAQ9T,EAAI5uB,aAAcjnB,GAAOslD,IACtFrlB,EAAQvf,GAAK0sN,GAActzN,MAAM9Z,GACrC,OAAO+5N,GAAYZ,aAAarqC,EAAS7uJ,EAAMj3B,MAAO6sC,GAAKlqC,OAAOwhO,KAEhEE,GAAa,SAAUrtO,EAAM61C,GAC/B,OAAO+hL,GAAuB/hL,GAAKp7B,OAAOwqC,KAASuuI,IAAO,EAAMxzL,EAAM61C,GAAKh8B,UAEzEyzN,GAAY,SAAUttO,EAAM61C,GAC9B,OAAOgiL,GAA2BhiL,GAAKp7B,OAAOwqC,KAASuuI,IAAO,EAAOxzL,EAAM61C,GAAKh8B,UAE9E0zN,GAAiB30N,EAAM46K,IAAQ,GAC/Bg6C,GAAa50N,EAAM46K,IAAQ,GAE3Bi6C,GAAO,SAAUC,GACnB,OAAO,SAAUttM,GACf,OAAOstM,IAAattM,IAGpButM,GAASF,GAAK,KACdG,GAAiB,SAAUjiN,GAC7B,MAAO,cAAcvqB,KAAKuqB,IAExBkiN,GAAc,SAAUliN,GAC1B,OAAQiiN,GAAejiN,KAASgiN,GAAOhiN,IAGrCmiN,GAAS,SAAUh/C,EAASzjK,EAAWwqB,GACzC,OAAO36B,EAAO5X,KAAKuyC,EAAI5uB,aAAatb,OAAOk6C,GAAS/9B,QAAQrN,QAAO,SAAU/X,GAC3E,IAAI8jB,EAAQsoK,EAAU,GAAK,EAC3B,OAAOzjK,EAAU3oB,EAAKP,KAAK60E,OAAOnhC,EAAIz6C,SAAWorB,QAGjDunN,GAAgBn1N,EAAMk1N,IAAQ,EAAMF,IACpCI,GAAep1N,EAAMk1N,IAAQ,EAAOF,IACpCK,GAAc,SAAUp4L,GAC1B,IAAI5uB,EAAY4uB,EAAI5uB,YACpB,OAAO4+B,GAAS/9B,OAAOb,IAAwC,IAA1BA,EAAU9kB,KAAKhC,QAElD+tO,GAA+B,SAAUjX,EAAgBzG,GAC3D,IAAI9nN,EAAOsuN,GAA6BC,EAAgBzG,GACxD,OAAO3qK,GAAS60B,uBAAuBhyE,KAAUm9C,GAASwxJ,WAAW3uM,IAEnEylO,GAA+Bv1N,EAAMs1N,GAA8B,GACnEE,GAA8Bx1N,EAAMs1N,IAA+B,GACnEG,GAAgB,SAAUpX,EAAgBzG,GAC5C,OAAO3qK,GAASwhI,QAAQ2vC,GAA6BC,EAAgBzG,KAEnE8d,GAAgB11N,EAAMy1N,GAAe,GACrCE,GAAe31N,EAAMy1N,IAAgB,GAErCG,GAAoB,SAAU9lO,GAChC,OAAO8tM,GAAYvsJ,GAAQN,QAAQjhD,KAAUsrK,GAAW/pH,GAAQN,QAAQjhD,KAEtE+lO,GAAez1E,GAAInO,SAAS,CAC9B,CAAE94I,OAAQ,CAAC,YACX,CAAE28N,cAAe,CAAC,YAClB,CAAEC,eAAgB,CAAC,eAEjBC,GAAgC,SAAU9/C,EAASxrL,GACrD,IAAI0B,EAAM1B,EAAKsF,SAAoB,IAAZkmL,GACnB+/C,EAAgB//C,EAAU,QAAU,SACxC,OAAOjpI,GAASqM,UAAUltD,IAAQA,EAAI4P,aAAa,oBAAsBi6N,GAEvEC,GAAiC,SAAU9uO,EAAM8uL,EAASxrL,EAAMI,GAClE,IAAIu0N,EAAc,SAAUjzN,GAC1B,OAAOmuK,GAASlpH,GAAQN,QAAQ3kD,MAAU6xN,GAAcvzN,EAAMI,EAAI1D,IAEpE,OAAOy3N,IAAmB3oC,EAASxrL,GAAMsW,MAAK,WAC5C,OAAO69M,GAAkB3oC,EAASprL,GAAIkW,KAAK/R,GAAS,GAAQowN,KAC3DA,IAED8W,GAA8B,SAAU/uO,EAAM8uL,EAASxrL,EAAMI,GAC/D,IAAIsrO,EAAWtrO,EAAGkF,SAAoB,IAAZkmL,GAC1B,OAAOw6C,GAAY1S,eAAe3sK,GAAQN,QAAQ3pD,GAAOiqD,GAAQN,QAAQrmD,EAAKsF,YAAY5J,KAAI,SAAUiwO,GACtG,OAAOhF,GAAM/qL,QAAQ+vL,GAAYR,GAAa18N,OAAOk9N,EAASjmO,OAASylO,GAAaC,cAAcM,MACjGz0N,SAAQ,WACT,OAAOW,EAAOH,KAAK0zN,GAAaC,cAAcM,QAG9CE,GAAkB,SAAUlvO,EAAM8uL,EAASxrL,GAC7C,OAAOy2N,GAAYZ,aAAarqC,EAAS9uL,EAAMsD,GAAMkX,MAAK,SAAU9W,GAClE,OAAI8qO,GAAkB9qO,EAAGkF,YAEdkmO,GAA+B9uO,EAAM8uL,EAASxrL,EAAMI,GADtDwX,EAAO5B,OAGLw1K,GAAWjpI,GAAS60B,uBAAuBh3E,EAAGkF,aAElC,IAAZkmL,GAAqBjpI,GAAS60B,uBAAuBh3E,EAAGkF,SAAQ,IADlEmmO,GAA4B/uO,EAAM8uL,EAASxrL,EAAMI,GAG/CorL,GAAWs/C,GAA4B9qO,KAE3B,IAAZwrL,GAAqBq/C,GAA6B7qO,GADpD4X,EAAOH,KAAK0zN,GAAaE,eAAejrO,IAIxCwX,EAAO5B,WAIhB61N,GAAgC,SAAUrgD,EAAS9pL,GACrD,OAAI8pL,GAAWjpI,GAAS60B,uBAAuB11E,EAAI+jB,aAC1C7N,EAAOH,KAAK0zN,GAAaC,cAAc1pO,EAAI+jB,eAC7B,IAAZ+lK,GAAqBjpI,GAAS60B,uBAAuB11E,EAAIygD,iBAC3DvqC,EAAOH,KAAK0zN,GAAaC,cAAc1pO,EAAIygD,kBAE3CvqC,EAAO5B,QAGd81N,GAAyC,SAAUpvO,EAAMsD,EAAM+rO,GACjE,OAAOA,EAAaz1N,MAAK,SAAU5U,GACjC,OAAOkW,EAAOH,KAAK0zN,GAAa18N,OAAO/M,OACtC,SAAUA,GACX,OAAOkW,EAAOH,KAAK0zN,GAAaC,cAAc1pO,OAC7C,SAAUtB,GACX,OAAImzN,GAAcvzN,EAAMI,EAAI1D,GACnBkb,EAAO5B,OAEP4B,EAAOH,KAAK0zN,GAAaE,eAAejrO,QAIjD4rO,GAA2B,SAAUtvO,EAAM8uL,EAASxrL,GACtD,OAAIsrO,GAA8B9/C,EAASxrL,GAClC6rO,GAA8BrgD,EAASxrL,EAAKsF,SAAoB,IAAZkmL,IAAoBl1K,MAAK,WAClF,OAAOs1N,GAAgBlvO,EAAM8uL,EAASxrL,KACrC4X,EAAOH,MAEHm0N,GAAgBlvO,EAAM8uL,EAASxrL,GAAMkX,MAAK,SAAU60N,GACzD,OAAOD,GAAuCpvO,EAAMsD,EAAM+rO,OAI5DE,GAAS,SAAUvvO,EAAM8uL,EAAShoK,GACpC,IAAI6wM,EAAkB5xK,GAAe+oI,EAAU,GAAK,EAAG9uL,EAAM8mB,GACzDxjB,EAAO8tN,GAAgBL,eAAe4G,GACtC6R,EAAcv/K,GAAQN,QAAQ3pD,GAClC,OAAgB,IAAZ8uL,GAAqBs/C,GAA4B9qO,GAC5C4X,EAAOH,KAAK0zN,GAAa18N,OAAOzO,EAAKsF,SAAQ,KAC3CkmL,GAAWq/C,GAA6B7qO,GAC1C4X,EAAOH,KAAK0zN,GAAa18N,OAAOzO,EAAKsF,aACvB,IAAZkmL,GAAqBq/C,GAA6B7qO,IAASgqO,GAAU9D,EAAalmO,GACpFiqO,GAAe/D,EAAalmO,GAAMtE,KAAI,SAAU66E,GACrD,OAAO40J,GAAa18N,OAAO8nE,EAAGjxE,cAEvBkmL,GAAWs/C,GAA4B9qO,IAAS+pO,GAAW7D,EAAalmO,GAC1EkqO,GAAWhE,EAAalmO,GAAMtE,KAAI,SAAU66E,GACjD,OAAO40J,GAAa18N,OAAO8nE,EAAGjxE,cAGzB0mO,GAAyBtvO,EAAM8uL,EAASxrL,IAI/CksO,GAA0B,SAAUpoO,GACtC,OAAuC,IAAhC,cAAgBnC,QAAQmC,IAE7BqoO,GAAmB,SAAU3wO,EAAS4wO,EAAkBC,GAC1D,IAAI70O,EAASwsD,EAAMxoD,EAAQ1H,MAAM,KAAK,SAAUmwD,EAAKngD,GACnD,OAAIooO,GAAwBpoO,IAAY,MAANA,EAC5BmgD,EAAIqoL,qBAAmC,KAAZroL,EAAInkD,KAAcssO,GAAoBnoL,EAAInkD,IAAIjD,SAAWrB,EAAQqB,OAAS,GAAKwvO,EACrG,CACLC,qBAAqB,EACrBxsO,IAAKmkD,EAAInkD,IAAM,KAGV,CACLwsO,qBAAqB,EACrBxsO,IAAKmkD,EAAInkD,IAAM,KAIZ,CACLwsO,qBAAqB,EACrBxsO,IAAKmkD,EAAInkD,IAAMgE,KAGlB,CACDwoO,qBAAqB,EACrBxsO,IAAK,KAEP,OAAOtI,EAAOsI,KAEZysO,GAAc,SAAUnnO,EAAMtN,EAAQ8X,GACxC,GAAc,IAAVA,EAAJ,CAGA,IAAIimF,EAAazwF,EAAKvG,KAAKqB,MAAMpI,EAAQA,EAAS8X,GAC9Cy8N,EAAiBv0O,EAAS8X,GAASxK,EAAKvG,KAAKhC,OAC7CuvO,EAA8B,IAAXt0O,EACvBsN,EAAKonO,YAAY10O,EAAQ8X,EAAOu8N,GAAiBt2I,EAAYu2I,EAAkBC,MAE7EI,GAA2B,SAAUrnO,EAAMtN,GAC7C,IAAI0D,EAAU4J,EAAKvG,KAAKqB,MAAMpI,GAC1B40O,EAAkBlxO,EAAQqB,OAASmyM,GAAMxzM,GAASqB,OACtD,OAAO0vO,GAAYnnO,EAAMtN,EAAQ40O,IAE/BC,GAA4B,SAAUvnO,EAAMtN,GAC9C,IAAI0D,EAAU4J,EAAKvG,KAAKqB,MAAM,EAAGpI,GAC7B40O,EAAkBlxO,EAAQqB,OAASoyM,GAAMzzM,GAASqB,OACtD,OAAO0vO,GAAYnnO,EAAMtN,EAAS40O,EAAiBA,IAEjDE,GAAiB,SAAUC,EAAUvX,EAAUwX,GACjD,IAAIC,EAAmB99B,GAAM49B,EAAShuO,MAAMhC,OAM5C,OALAgwO,EAASrV,WAAWlC,EAASz2N,MAC7B4jJ,GAAS97F,GAAQN,QAAQivK,IACrBwX,GACFL,GAAyBI,EAAUE,GAE9BF,GAGLG,GAAkB,SAAUz6L,EAAK7wC,GACnC,IAAIiiB,EAAY4uB,EAAI5uB,YAChB7rB,EAASy6C,EAAIz6C,SACjB,OAA+C,IAAxCg2N,GAAgBH,eAAep7K,IAAkB5uB,IAAcjiB,EAAI1D,YAAclG,EAASg2N,GAAgBtxN,OAAOkF,GAAK5J,UAE3H06N,GAAa,SAAU9wN,EAAK6wC,GAC9B,OAAOy6L,GAAgBz6L,EAAK7wC,GAAOosN,GAAgBv7K,EAAI5uB,YAAa4uB,EAAIz6C,SAAW,GAAKy6C,GAEtF06L,GAAkB,SAAU7nO,GAC9B,OAAOm9C,GAAS/9B,OAAOpf,GAAQ0oN,GAAgB1oN,EAAM,GAAK0oN,GAAgBtxN,OAAO4I,IAE/E8nO,GAAe,SAAU9nO,GAC3B,OAAOm9C,GAAS/9B,OAAOpf,GAAQ0oN,GAAgB1oN,EAAMA,EAAKvG,KAAKhC,QAAUixN,GAAgBztN,MAAM+E,IAE7F+nO,GAAkC,SAAUzrO,GAC9C,OAAIsoN,GAAiBtoN,EAAIygD,iBAChBvqC,EAAOH,KAAKy1N,GAAaxrO,EAAIygD,kBAE7BzgD,EAAIygD,gBAAkBs0K,GAAYE,eAAej1N,EAAIygD,iBAAmBvqC,EAAO5B,QAGtFo3N,GAA8B,SAAU1rO,GAC1C,OAAIsoN,GAAiBtoN,EAAI+jB,aAChB7N,EAAOH,KAAKw1N,GAAgBvrO,EAAI+jB,cAEhC/jB,EAAI+jB,YAAcgxM,GAAYC,gBAAgBh1N,EAAI+jB,aAAe7N,EAAO5B,QAG/Eq3N,GAAoC,SAAUnH,EAAaxkO,GAC7D,IAAI4rO,EAAgBxf,GAAgBtxN,OAAOkF,EAAIygD,gBAAkBzgD,EAAIygD,gBAAkBzgD,EAAI1D,YAC3F,OAAOy4N,GAAYD,aAAa0P,EAAaoH,GAAeh3N,MAAK,WAC/D,OAAOmgN,GAAYF,aAAa2P,EAAapY,GAAgBztN,MAAMqB,MAClEkW,EAAOH,OAER81N,GAAmC,SAAUrH,EAAaxkO,GAC5D,OAAO+0N,GAAYF,aAAa2P,EAAapY,GAAgBztN,MAAMqB,IAAM4U,MAAK,WAC5E,OAAOmgN,GAAYD,aAAa0P,EAAapY,GAAgBtxN,OAAOkF,MACnEkW,EAAOH,OAER+1N,GAA6B,SAAUtH,EAAaxkO,GACtD,OAAOyrO,GAAgCzrO,GAAKuV,SAAQ,WAClD,OAAOm2N,GAA4B1rO,MAClCuV,SAAQ,WACT,OAAOo2N,GAAkCnH,EAAaxkO,OAGtD+rO,GAA2B,SAAUvH,EAAaxkO,GACpD,OAAO0rO,GAA4B1rO,GAAKuV,SAAQ,WAC9C,OAAOk2N,GAAgCzrO,MACtCuV,SAAQ,WACT,OAAOs2N,GAAiCrH,EAAaxkO,OAGrDgsO,GAAsB,SAAUliD,EAAS06C,EAAaxkO,GACxD,OAAO8pL,EAAUiiD,GAAyBvH,EAAaxkO,GAAO8rO,GAA2BtH,EAAaxkO,IAEpGisO,GAAoC,SAAUniD,EAAS06C,EAAaxkO,GACtE,OAAOgsO,GAAoBliD,EAAS06C,EAAaxkO,GAAKhG,IAAI4Z,EAAMk9M,GAAY9wN,KAE1E+iB,GAAe,SAAU3qB,EAAQ0xL,EAASj5I,GAC5CA,EAAIj8B,MAAK,WACPxc,EAAOwU,WACN,SAAUikC,GACXz4C,EAAOuL,UAAUwf,OAAO0tB,EAAIg7K,UAAW/hC,OAGvCoiD,GAAY,SAAU3O,GACxB,OAAO,SAAUv9N,GACf,OAAOA,EAAIgE,QAAUu5N,IAGrB4O,GAAY,SAAU/zO,EAAQ4H,GAChC,OAAOA,GAAO5H,EAAOqhD,OAAO2X,mBAAmB72D,eAAelE,GAAK2J,KAEjEosO,GAAiB,SAAUpsO,GAC7B,GAAIilO,GAAM/qL,QAAQl6C,GAAM,CACtB,IAAI60E,EAAK5vB,GAAQR,SAAS,2BAG1B,OAFAx9C,GAAMjH,GACNkH,GAAOlH,EAAK60E,GACL3+D,EAAOH,KAAKq2M,GAAgBtxN,OAAO+5E,EAAG7wE,QAE7C,OAAOkS,EAAO5B,QAGd+3N,GAAmB,SAAUrsO,EAAKssO,EAAmBlB,GACvD,IAAImB,EAAc1qF,GAAY7hJ,GAAK2G,OAAOmc,IACtC0pN,EAAczoN,GAAY/jB,GAAK2G,OAAOmc,IAE1C,OADAi+H,GAAS/gJ,GACF4pN,GAAM2iB,EAAaC,EAAaF,GAAmB,SAAUh4G,EAAMvvG,EAAM8rB,GAC9E,IAAIs6L,EAAW72G,EAAKtwH,MAAO4vN,EAAW7uM,EAAK/gB,MACvC5N,EAAS+0O,EAAShuO,KAAKhC,OAE3B,OADA+vO,GAAeC,EAAUvX,EAAUwX,GAC5Bv6L,EAAI5uB,cAAgB2xM,EAAWxH,GAAgB+e,EAAU/0O,GAAUy6C,KACzEt7B,SAAQ,WAST,OARI61N,IACFmB,EAAY3lO,MAAK,SAAU5G,GACzB,OAAOirO,GAA0BjrO,EAAIgE,MAAOhE,EAAIgE,MAAM7I,WAExDqxO,EAAY5lO,MAAK,SAAU5G,GACzB,OAAO+qO,GAAyB/qO,EAAIgE,MAAO,OAGxCsoO,MAGPG,GAAkB,SAAUr0O,EAAQ4D,GACtC,OAAOikB,GAAI7nB,EAAOqhD,OAAO4hK,wBAAyBhlN,GAAK2F,KAErD0wO,GAAgB,SAAUt0O,EAAQ0xL,EAAS9pL,EAAK2sO,QAChC,IAAdA,IACFA,GAAY,GAEd,IAAIC,EAAiBX,GAAkCniD,EAAS1xL,EAAO0T,UAAW9L,EAAIgE,OAClFi0D,EAAcmrF,GAASpjJ,EAAK4T,EAAMu4N,GAAW/zO,GAAS8zO,GAAU9zO,EAAO0T,YACvE+gO,EAA2BR,GAAiBrsO,EAAK4sO,EAAgBH,GAAgBr0O,EAAQ4H,IACzF5H,EAAO4L,IAAIk2C,QAAQ9hD,EAAO0T,YAC5B1T,EAAOyhD,WAAW,IAClBzhD,EAAOuL,UAAUmgB,qBAEjBm0C,EAAYziD,KAAK42N,IAAgBx3N,MAAK,WAChC+3N,GACF5pN,GAAa3qB,EAAQ0xL,EAAS+iD,MAE/B,SAAUC,GACPH,GACF5pN,GAAa3qB,EAAQ0xL,EAAS5zK,EAAOH,KAAK+2N,QAK9CC,GAAgB,CAAEL,cAAeA,IAEjCM,GAAkB,SAAU50O,EAAQ0xL,GACtC,OAAO,SAAU9tL,GAGf,OAFA5D,EAAOwoO,oBAAoBqM,gBAC3BF,GAAcL,cAAct0O,EAAQ0xL,EAAS7kI,GAAQN,QAAQ3oD,KACtD,IAGP0tO,GAAgB,SAAUtxO,EAAQ0xL,GACpC,OAAO,SAAU9tL,GACf,IAAI60C,EAAMi5I,EAAUsiC,GAAgBtxN,OAAOkB,GAAWowN,GAAgBztN,MAAM3C,GAE5E,OADA5D,EAAOuL,UAAUwf,OAAO0tB,EAAIg7K,YACrB,IAGP8d,GAAiB,SAAUvxO,GAC7B,OAAO,SAAUy4C,GAEf,OADAz4C,EAAOuL,UAAUwf,OAAO0tB,EAAIg7K,YACrB,IAGPzzJ,GAAuB,SAAUhgE,EAAQ0xL,GAC3C,IAAIh0L,EAASy0O,GAAOnyO,EAAO0T,UAAWg+K,EAAS1xL,EAAOuL,UAAUugB,UAAUlqB,KAAI,SAAUqwO,GACtF,OAAOA,EAAaz1N,KAAKo4N,GAAgB50O,EAAQ0xL,GAAU4/C,GAActxO,EAAQ0xL,GAAU6/C,GAAevxO,OAE5G,OAAOtC,EAAOgf,OAAM,IAElBo4N,GAA2B,SAAU1I,GACvC59N,EAAKs8I,GAAcshF,EAAa,4BAA6BzjF,KAE3D1oF,GAAuB,SAAUjgE,EAAQ0xL,GAC3C,IAAIqjD,EAAkB/0O,EAAOuL,UAAUC,UACvC,QAAIi9C,GAAS60B,uBAAuBy3J,KAClCD,GAAyBjoL,GAAQN,QAAQvsD,EAAO0T,YAChDihO,GAAcL,cAAct0O,EAAQ0xL,EAAS7kI,GAAQN,QAAQvsD,EAAOuL,UAAUC,YAC9E0gO,GAAYV,cAAcxrO,IACnB,IAKPg1O,GAAyB,SAAUpyO,EAAM0I,GAC3C,MAAOA,GAAQA,IAAS1I,EAAM,CAC5B,GAAI6lD,GAASw/H,sBAAsB38K,IAASm9C,GAAS60B,uBAAuBhyE,GAC1E,OAAOA,EAETA,EAAOA,EAAKpH,WAEd,OAAO,MAEL+wO,GAAmB,SAAUj1O,GAC/B,IAAIy8E,EACAy4J,EAASF,GAAuBh1O,EAAO0T,UAAW1T,EAAOuL,UAAUC,WAOvE,OANIi9C,GAASw/H,sBAAsBitD,IAAWl1O,EAAO4L,IAAIs8C,QAAQgtL,IAAWl1O,EAAO4L,IAAIk2C,QAAQozL,KAC7Fz4J,EAAKz8E,EAAO4L,IAAIiE,OAAO,KAAM,CAAE,iBAAkB,MACjD7P,EAAO4L,IAAI87M,QAAQwtB,EAAQ,IAC3BA,EAAOjlO,YAAYwsE,GACnBz8E,EAAOuL,UAAUwf,OAAOipM,GAAgBtxN,OAAO+5E,GAAIg3I,aAE9C,GAEL0hB,GAAoB,SAAUn1O,EAAQ0xL,GACxC,OAAI1xL,EAAOuL,UAAU0C,cACZ+xD,GAAqBhgE,EAAQ0xL,GAE7BzxH,GAAqBjgE,EAAQ0xL,IAGpC0jD,GAAY,CACdj1K,gBAAiBg1K,GACjBF,iBAAkBA,IAGhBI,GAAW5sL,GAAS/9B,OACpB4qN,GAA6B,SAAUhqO,GACzC,OAAO+pO,GAAS/pO,IAASA,EAAKvG,KAAK,KAAOqpN,GAAKH,MAE7CsnB,GAA2B,SAAUjqO,GACvC,OAAO+pO,GAAS/pO,IAASA,EAAKvG,KAAKuG,EAAKvG,KAAKhC,OAAS,KAAOqrN,GAAKH,MAEhEunB,GAAa,SAAUlqO,GACzB,OAAOA,EAAK46B,cAAc92B,eAAeg/M,GAAKH,OAE5CwnB,GAAiB,SAAUnqO,GAC7B,GAAI+pO,GAAS/pO,EAAK+8C,iBAChB,OAAIktL,GAAyBjqO,EAAK+8C,kBAGhC/8C,EAAK+8C,gBAAgBq1K,WAAWtP,GAAKH,MAF9B3iN,EAAK+8C,gBAKT,GAAIgtL,GAAS/pO,GAClB,OAAIgqO,GAA2BhqO,IAG7BA,EAAK0hB,WAAW,EAAGohM,GAAKH,MAFjB3iN,EAMT,IAAI2hB,EAAUuoN,GAAWlqO,GAEzB,OADAA,EAAKpH,WAAW1B,aAAayqB,EAAS3hB,GAC/B2hB,GAGPyoN,GAAgB,SAAUpqO,GAC5B,GAAI+pO,GAAS/pO,EAAKqgB,aAChB,OAAI2pN,GAA2BhqO,EAAKqgB,cAGlCrgB,EAAKqgB,YAAYqB,WAAW,EAAGohM,GAAKH,MAF7B3iN,EAAKqgB,YAKT,GAAI0pN,GAAS/pO,GAClB,OAAIiqO,GAAyBjqO,IAG3BA,EAAKoyN,WAAWtP,GAAKH,MAFd3iN,EAMT,IAAI2hB,EAAUuoN,GAAWlqO,GAMzB,OALIA,EAAKqgB,YACPrgB,EAAKpH,WAAW1B,aAAayqB,EAAS3hB,EAAKqgB,aAE3CrgB,EAAKpH,WAAW+L,YAAYgd,GAEvBA,GAGP0oN,GAAiB,SAAUjzO,EAAQ4I,GACrC,OAAO5I,EAAS+yO,GAAenqO,GAAQoqO,GAAcpqO,IAEnDsqO,GAAqBp6N,EAAMm6N,IAAgB,GAC3CE,GAAoBr6N,EAAMm6N,IAAgB,GAE1CG,GAAkB,SAAUr9L,EAAK/1C,GACnC,OAAI+lD,GAAS/9B,OAAO+tB,EAAI5uB,aACf8rN,GAAejzO,EAAQ+1C,EAAI5uB,aAE3B8rN,GAAejzO,EAAQ+1C,EAAIjtC,YAGlCuqO,GAAsB,SAAUt9L,EAAKo+I,GACvC,IAAIm/C,EAAYn/C,EAAMv3L,MACtB,OAAO02O,GAAav9L,EAAI5uB,cAAgBmsN,GAAaxnB,GAAuBwnB,IAE1EC,GAAc,SAAUp/C,EAAO3xI,GACjC,OAAOA,EAAS1oC,MAAK,SAAU5Y,GAC7B+zN,GAAqBhjN,OAAOkiL,EAAMv3L,OAClC,IAAIgG,EAAOswO,GAAmBhyO,GAE9B,OADAizL,EAAMt3L,IAAI+F,GACHwY,EAAOH,KAAKq2M,GAAgB1uN,EAAMA,EAAKvC,OAAS,OACtD,SAAUa,GACX,OAAO+4N,GAAYC,gBAAgBh5N,GAAShC,KAAI,SAAU62C,GACxD,GAAKs9L,GAAoBt9L,EAAKo+I,GAM5B,OAAOm9B,GAAgBn9B,EAAMv3L,MAAO,GALpCq4N,GAAqBhjN,OAAOkiL,EAAMv3L,OAClC,IAAIgG,EAAOwwO,GAAgBr9L,GAAK,GAEhC,OADAo+I,EAAMt3L,IAAI+F,GACH0uN,GAAgB1uN,EAAM,SAKhC,SAAU1B,GACX,OAAO+4N,GAAYE,eAAej5N,GAAShC,KAAI,SAAU62C,GACvD,GAAKs9L,GAAoBt9L,EAAKo+I,GAM5B,OAAOm9B,GAAgBn9B,EAAMv3L,MAAOu3L,EAAMv3L,MAAMyD,OAAS,GALzD40N,GAAqBhjN,OAAOkiL,EAAMv3L,OAClC,IAAIgG,EAAOwwO,GAAgBr9L,GAAK,GAEhC,OADAo+I,EAAMt3L,IAAI+F,GACH0uN,GAAgB1uN,EAAMA,EAAKvC,OAAS,SAK9C,SAAUa,GACX+zN,GAAqBhjN,OAAOkiL,EAAMv3L,OAClC,IAAIgG,EAAOuwO,GAAkBjyO,GAE7B,OADAizL,EAAMt3L,IAAI+F,GACHwY,EAAOH,KAAKq2M,GAAgB1uN,EAAM,QAGzC4wO,GAAgB,CAAED,YAAaA,IAE/BE,GAAgB,SAAUC,EAAK5vO,GACjC,IAAK,IAAInD,EAAI,EAAGA,EAAI+yO,EAAIrzO,OAAQM,IAAK,CACnC,IAAI3F,EAAS04O,EAAI/yO,GAAGwD,MAAM,KAAML,GAChC,GAAI9I,EAAO+e,SACT,OAAO/e,EAGX,OAAOogB,EAAO5B,QAEZm6N,GAAgB,CAAEF,cAAeA,IAEjCG,GAAW16E,GAAInO,SAAS,CAC1B,CAAE/qJ,OAAQ,CAAC,YACX,CAAEwlB,MAAO,CAAC,YACV,CAAEY,IAAK,CAAC,YACR,CAAEviB,MAAO,CAAC,cAERgwO,GAAU,SAAUltK,EAAU/9D,GAChC,IAAIu0D,EAAc25J,GAAeluN,EAAM+9D,GACvC,OAAOxJ,GAA4BwJ,GAEjC2qH,GAAW,SAAU02C,EAAgBrhK,EAAU5wB,GACjD,IAAI+9L,EAAOpL,GAAYF,kBAAkBzyL,GACrC5V,EAAQ0zM,GAAQltK,EAAUmtK,EAAK3sN,aACnC,OAAOuhN,GAAYR,eAAeF,EAAgB7nM,EAAO2zM,GAAMh6N,MAAK,WAClE,OAAOmgN,GAAYF,aAAa55L,EAAO2zM,GAAMp5N,KAAK5B,EAAM4vN,GAAYR,eAAgBF,EAAgB7nM,IAAQjhC,KAAI,SAAUgO,GACxH,OAAO0mO,GAAS5zO,OAAOkN,QAExBkO,EAAO5B,OAERu6N,GAAkC,SAAUptK,EAAUzhE,GACxD,OAAkD,OAA3C+uN,GAAwBttJ,EAAUzhE,IAEvC8uO,GAAuB,SAAUhM,EAAgBrhK,EAAU5wB,GAC7D,OAAO2yL,GAAYR,eAAeF,EAAgBrhK,EAAU5wB,GAAKlqC,OAAOiN,EAAMi7N,GAAiCptK,KAE7GnhD,GAAQ,SAAUwiN,EAAgBrhK,EAAU5wB,GAC9C,IAAI+9L,EAAOpL,GAAYD,mBAAmB1yL,GAC1C,OAAOi+L,GAAqBhM,EAAgBrhK,EAAUmtK,GAAMp5N,MAAK,SAAUxN,GACzE,IAAIq8N,EAAUtP,GAAYD,aAAa9sN,EAAQ4mO,GAC/C,OAAOvK,EAAQ5vN,SAAWyB,EAAOH,KAAK24N,GAASpuN,MAAMtY,IAAWkO,EAAO5B,WAGvE4M,GAAM,SAAU4hN,EAAgBrhK,EAAU5wB,GAC5C,IAAI+9L,EAAOpL,GAAYF,kBAAkBzyL,GACzC,OAAOi+L,GAAqBhM,EAAgBrhK,EAAUmtK,GAAMp5N,MAAK,SAAUxN,GACzE,IAAIo8N,EAAUrP,GAAYF,aAAa7sN,EAAQ4mO,GAC/C,OAAOxK,EAAQ3vN,SAAWyB,EAAOH,KAAK24N,GAASxtN,IAAIlZ,IAAWkO,EAAO5B,WAGrEsvK,GAAU,SAAUk/C,EAAgBrhK,EAAU5wB,GAChD,IAAI+9L,EAAOpL,GAAYD,mBAAmB1yL,GACtC5V,EAAQ0zM,GAAQltK,EAAUmtK,EAAK3sN,aACnC,OAAOuhN,GAAYR,eAAeF,EAAgB7nM,EAAO2zM,GAAMh6N,MAAK,WAClE,OAAOmgN,GAAYD,aAAa75L,EAAO2zM,GAAMp5N,KAAK5B,EAAM4vN,GAAYR,eAAgBF,EAAgB7nM,IAAQjhC,KAAI,SAAUgO,GACxH,OAAO0mO,GAAS/vO,MAAMqJ,QAEvBkO,EAAO5B,OAERy6N,GAAkB,SAAUzxL,GAC9B,OAAmD,IAA5CkmL,GAAY5nE,MAAMozE,GAAW1xL,KAElC2xL,GAAe,SAAUnM,EAAgBrhK,EAAU5wB,GACrD,IAAIyM,EAAWmxL,GAAcF,cAAc,CACzCniD,GACA9rK,GACAY,GACA0iK,IACC,CACDk/C,EACArhK,EACA5wB,IAEF,OAAOyM,EAAS32C,OAAOooO,KAErBC,GAAa,SAAU1xL,GACzB,OAAOA,EAAS1oC,KAAKod,EAAUA,EAAUA,EAAUA,IAEjDk9M,GAAU,SAAU5xL,GACtB,OAAOA,EAAS1oC,KAAK/R,EAAS,UAAWA,EAAS,SAAUA,EAAS,OAAQA,EAAS,WAEpFssO,GAAU,SAAU7xL,GACtB,OAAOA,EAAS1oC,KAAK85N,GAAS5zO,OAAQ4zO,GAAS5zO,OAAQ4zO,GAAS/vO,MAAO+vO,GAAS/vO,QAE9E9D,GAAS,SAAUyiD,GACrB,OAAOA,EAAS1oC,KAAK85N,GAASpuN,MAAOouN,GAASpuN,MAAOouN,GAASxtN,IAAKwtN,GAASxtN,MAE1EkuN,GAAS,SAAUC,EAAWC,GAChC,OAAOJ,GAAQG,KAAeH,GAAQI,IAAcN,GAAWK,KAAeL,GAAWM,IAEvFC,GAAiB,SAAUzlD,EAASg5C,EAAgBrhK,EAAUnjE,EAAMI,EAAI4+C,GAC1E,OAAO4H,GAAMs+K,GAAYR,eAAeF,EAAgBrhK,EAAUnjE,GAAOklO,GAAYR,eAAeF,EAAgBrhK,EAAU/iE,IAAK,SAAU8wO,EAAYC,GACvJ,OAAID,IAAeC,GAAYjM,GAAYP,mBAAmBxhK,EAAU+tK,EAAYC,GAC3Ef,GAAS/vO,MAAMmrL,EAAU0lD,EAAaC,GAEtCnyL,KAERxoC,MAAMwoC,IAEPoyL,GAAiB,SAAUC,EAAcC,GAC3C,OAAOD,EAAa/6N,KAAK/R,GAAS,IAAO,SAAU8sO,GACjD,OAAQP,GAAOO,EAAcC,OAG7BC,GAAuB,SAAU/lD,EAASg5C,EAAgBrhK,EAAUkuK,EAAc9+L,GACpF,IAAIvyC,EAAOklO,GAAYH,kBAAkBv5C,EAASj5I,GAC9CnyC,EAAKq2N,GAAYZ,aAAarqC,EAASroH,EAAUnjE,GAAMtE,IAAI4Z,EAAM4vN,GAAYH,kBAAmBv5C,IAChGxsI,EAAW5+C,EAAGkW,MAAK,WACrB,OAAO+6N,EAAa31O,IAAIm1O,OACvB,SAAUzwO,GACX,OAAOuwO,GAAanM,EAAgBrhK,EAAU/iE,GAAI1E,IAAI4Z,EAAM27N,GAAgBzlD,EAASg5C,EAAgBrhK,EAAUnjE,EAAMI,IAAKiI,OAAOiN,EAAM87N,GAAgBC,OAEzJ,OAAOryL,EAAS32C,OAAOooO,KAErBe,GAAqB,SAAUhmD,EAASxsI,GAC1C,OAAIwsI,EACKxsI,EAAS1oC,KAAK+pI,EAAQzoI,EAAOH,KAAM24N,GAASpuN,OAAQpK,EAAO5B,KAAMqqI,EAAQzoI,EAAOH,KAAM24N,GAAS/vO,OAAQuX,EAAO5B,MAE9GgpC,EAAS1oC,KAAKsB,EAAO5B,KAAMqqI,EAAQzoI,EAAOH,KAAM24N,GAAS5zO,QAASob,EAAO5B,KAAMqqI,EAAQzoI,EAAOH,KAAM24N,GAASxtN,OAGpH6uN,GAAe,SAAUjmD,EAASg5C,EAAgBrhK,EAAU5wB,GAC9D,IAAIvyC,EAAOklO,GAAYH,kBAAkBv5C,EAASj5I,GAC9C8+L,EAAeV,GAAanM,EAAgBrhK,EAAUnjE,GAC1D,OAAO2wO,GAAanM,EAAgBrhK,EAAUnjE,GAAMkX,KAAK5B,EAAMk8N,GAAoBhmD,IAAUv0K,SAAQ,WACnG,OAAOs6N,GAAqB/lD,EAASg5C,EAAgBrhK,EAAUkuK,EAAc9+L,OAG7Em/L,GAAmB,CACrBf,aAAcA,GACdc,aAAcA,GACdE,aAAcr8N,EAAMm8N,IAAc,GAClCG,aAAct8N,EAAMm8N,IAAc,GAClCf,WAAYA,GACZG,QAASA,GACTt0O,OAAQA,IAGNs1O,GAAwB,SAAU/3O,GACpC,OAAOoe,EAAWpe,EAAOuL,UAAUysO,SAASC,SAE1CC,GAAU,SAAUxmD,EAASnmL,EAAWktC,GAC1C,IAAIrvB,EAAQsoK,EAAU,GAAK,EAG3B,OAFAnmL,EAAUwf,OAAOipM,GAAgBv7K,EAAI5uB,YAAa4uB,EAAIz6C,SAAWorB,GAAOqqM,WACxEloN,EAAUysO,SAASC,OAAO,OAAQvmD,EAAU,UAAY,WAAY,SAC7D,GAELymD,GAAa,SAAUzmD,EAAS1xL,GAClC,IAAI0pB,EAAM1pB,EAAOuL,UAAUugB,SACvB2sB,EAAMi5I,EAAUsiC,GAAgBJ,aAAalqM,GAAOsqM,GAAgBL,eAAejqM,GACvF,QAAKquN,GAAsB/3O,KAEhB0xL,GAAWm9B,GAAep2K,GAC5By/L,IAAQ,EAAMl4O,EAAOuL,UAAWktC,KAC7Bi5I,IAAWq9B,GAAct2K,KAC5By/L,IAAQ,EAAOl4O,EAAOuL,UAAWktC,KAKxC2/L,GAAgB,CAClBL,sBAAuBA,GACvBI,WAAYA,IAGVE,GAAmB,SAAUr4O,EAAQy4C,GACvC,IAAI/uB,EAAM1pB,EAAO4L,IAAIkf,YACrBpB,EAAIW,SAASouB,EAAI5uB,YAAa4uB,EAAIz6C,UAClC0rB,EAAIY,OAAOmuB,EAAI5uB,YAAa4uB,EAAIz6C,UAChCgC,EAAOuL,UAAUwf,OAAOrB,IAEtB4uN,GAAmB,SAAUt4O,GAC/B,OAA6C,IAAtCA,EAAOC,SAASs4O,mBAErBC,GAAc,SAAU50M,EAAOh8B,GAC7Bg8B,EACFh8B,EAAI0O,aAAa,oBAAqB,mBAEtC1O,EAAIqnC,gBAAgB,sBAGpBwpM,GAAsB,SAAUz4O,EAAQ62L,EAAO3xI,GACjD,OAAOgxL,GAAcD,YAAYp/C,EAAO3xI,GAAUtjD,KAAI,SAAU62C,GAE9D,OADA4/L,GAAiBr4O,EAAQy4C,GAClByM,MAGPwzL,GAAiB,SAAU14O,EAAQ62L,EAAOnF,GAC5C,IAAIroH,EAAWrpE,EAAO0T,UAClBxN,EAAO8tN,GAAgBL,eAAe3zN,EAAOuL,UAAUugB,UACvD4+M,EAAiBlvN,EAAM4vN,GAAYV,eAAgB1qO,GACnDklD,EAAW0yL,GAAiBD,aAAajmD,EAASg5C,EAAgBrhK,EAAUnjE,GAChF,OAAOg/C,EAAS9nC,MAAK,SAAU8nC,GAC7B,OAAOuzL,GAAoBz4O,EAAQ62L,EAAO3xI,OAG1CyzL,GAAgB,SAAUjO,EAAgB9+N,EAAKq/C,GACjD,IAAI2tL,EAAkBrqO,EAAO3C,EAAIE,OAAO,0CAA2C4+N,GAC/EmO,EAAgBtqO,EAAO08C,EAAMy/K,GACjCl8N,EAAK0zL,GAAW02C,EAAiBC,GAAgBr9N,EAAMg9N,IAAa,IACpEhqO,EAAK0zL,GAAW22C,EAAeD,GAAkBp9N,EAAMg9N,IAAa,KAElEM,GAA2B,SAAU94O,EAAQ62L,GAC/C,GAAI72L,EAAOuL,UAAU0C,gBAAsC,IAArBjO,EAAO+4O,WAAsBliD,EAAMv3L,MAAO,CAC9E,IAAIm5C,EAAMu7K,GAAgBL,eAAe3zN,EAAOuL,UAAUugB,UACtDkoM,GAAgBH,eAAep7K,KAAsC,IAA9B2yL,GAAYJ,SAASvyL,KAC9D4/L,GAAiBr4O,EAAQ23N,GAAqBF,oBAAoB5gC,EAAMv3L,MAAOm5C,IAC/Eo+I,EAAMt3L,IAAI,SAIZy5O,GAA0B,SAAUtO,EAAgB1qO,EAAQ62L,EAAO5rI,GACrE,GAAIjrD,EAAOuL,UAAU0C,cAAe,CAClC,IAAIgrO,EAAU1qO,EAAO08C,EAAMy/K,GAC3Bl8N,EAAKyqO,GAAS,SAAUrpO,GACtB,IAAI6oC,EAAMu7K,GAAgBL,eAAe3zN,EAAOuL,UAAUugB,UAC1D8rN,GAAiBf,aAAanM,EAAgB1qO,EAAO0T,UAAW+kC,GAAKr7B,MAAK,SAAU8nC,GAClF,OAAOuzL,GAAoBz4O,EAAQ62L,EAAO3xI,WAK9CghI,GAAO,SAAUlmL,EAAQ62L,EAAOnF,GAClC,OAAO,WACL,QAAO4mD,GAAiBt4O,IAAU04O,GAAe14O,EAAQ62L,EAAOnF,GAASj1K,WAGzEy8N,GAAW,SAAUxnD,EAAS1xL,EAAQ62L,GACxC,OAAO,WACL,QAAOyhD,GAAiBt4O,IAAUo4O,GAAcD,WAAWzmD,EAAS1xL,KAGpEm5O,GAAqB,SAAUn5O,GACjC,IAAI62L,EAAQ13L,GAAK,MACburO,EAAiBlvN,EAAM4vN,GAAYV,eAAgB1qO,GAQvD,OAPAA,EAAOsO,GAAG,cAAc,SAAUR,GAC5BwqO,GAAiBt4O,KACnB24O,GAAcjO,EAAgB1qO,EAAO4L,IAAKkC,EAAEqzD,SAC5C23K,GAAyB94O,EAAQ62L,GACjCmiD,GAAwBtO,EAAgB1qO,EAAQ62L,EAAO/oL,EAAEqzD,aAGtD01H,GAELuiD,GAAe59N,EAAM09N,IAAU,GAC/BG,GAAe79N,EAAM09N,IAAU,GAC/BI,GAAoB,CACtBpzD,KAAMA,GACNkzD,aAAcA,GACdC,aAAcA,GACdF,mBAAoBA,GACpBd,iBAAkBA,IAGhBkB,GAAqB,SAAUv5O,GACjC,OAA6C,IAAtCA,EAAOC,SAASs4O,mBAErBiB,GAAqB,SAAUtzO,EAAMI,GACvC,IAAIgwE,EAAQp3E,EAAWwE,SAAS0mB,cAGhC,OAFAksD,EAAMjsD,SAASnkB,EAAK2jB,YAAa3jB,EAAKlI,UACtCs4E,EAAMhsD,OAAOhkB,EAAGujB,YAAavjB,EAAGtI,UACzBs4E,GAELmjK,GAAgC,SAAU7xO,GAC5C,OAAOklD,GAAM6vK,GAAYC,gBAAgBh1N,GAAM+0N,GAAYE,eAAej1N,IAAM,SAAU+jO,EAAUC,GAClG,IAAIC,EAAqBT,GAAYH,mBAAkB,EAAMU,GACzDG,EAAoBV,GAAYH,mBAAkB,EAAOW,GAC7D,OAAOjP,GAAYF,aAAa70N,EAAKikO,GAAoBjqO,KAAI,SAAU62C,GACrE,OAAOA,EAAIi4K,QAAQob,MAClBpvN,OAAM,MACRA,OAAM,IAEPg9N,GAAmB,SAAU15O,EAAQ62L,GACvC,OAAO,SAAU3xI,GACf,OAAOgxL,GAAcD,YAAYp/C,EAAO3xI,GAAUtjD,KAAI,SAAU62C,GAE9D,OADA6gM,GAAkBjB,iBAAiBr4O,EAAQy4C,IACpC,KACN/7B,OAAM,KAGTi9N,GAAe,SAAU35O,EAAQ62L,EAAO3wL,EAAMI,GAChD,IAAI+iE,EAAWrpE,EAAO0T,UAClBg3N,EAAiBlvN,EAAM4vN,GAAYV,eAAgB1qO,GACvDA,EAAO0L,YAAYq4J,QAAO,WACxB/jK,EAAOuL,UAAUwf,OAAOyuN,GAAmBtzO,EAAMI,IACjDtG,EAAOyW,YAAY,UACnBmhO,GAAiBf,aAAanM,EAAgBrhK,EAAU2qJ,GAAgBL,eAAe3zN,EAAOuL,UAAUugB,WAAWlqB,IAAIg2O,GAAiBn1O,QAAQb,IAAI83O,GAAiB15O,EAAQ62L,OAE/K72L,EAAOyU,eAELmlO,GAAY,SAAUvwK,EAAU/9D,GAClC,IAAIu0D,EAAc25J,GAAeluN,EAAM+9D,GACvC,OAAOxJ,GAA4BwJ,GAEjCwwK,GAA2B,SAAU75O,EAAQ62L,EAAOnF,EAASxrL,GAC/D,IAAImjE,EAAWuwK,GAAU55O,EAAO0T,UAAWxN,EAAK2jB,aAC5C6gN,EAAiBlvN,EAAM4vN,GAAYV,eAAgB1qO,GACnDu3O,EAAeK,GAAiBf,aAAanM,EAAgBrhK,EAAUnjE,GAC3E,OAAOqxO,EAAan6N,MAAK,SAAU8nC,GACjC,OAAIwsI,EACKxsI,EAAS1oC,KAAK/R,EAASqT,EAAOH,KAAKi6N,GAAiBn1O,OAAOyiD,KAAapnC,EAAO5B,KAAMzR,EAASqT,EAAOH,KAAKi6N,GAAiBb,QAAQ7xL,KAAapnC,EAAO5B,MAEvJgpC,EAAS1oC,KAAKsB,EAAO5B,KAAMzR,EAASqT,EAAOH,KAAKi6N,GAAiBb,QAAQ7xL,KAAapnC,EAAO5B,KAAMzR,EAASqT,EAAOH,KAAKi6N,GAAiBn1O,OAAOyiD,SAExJtjD,IAAI83O,GAAiB15O,EAAQ62L,IAAQl6K,YAAW,WACjD,IAAIm9N,EAAand,GAAYhiC,SAASjJ,EAASroH,EAAUnjE,GACrDsxO,EAAasC,EAAW18N,MAAK,SAAUq7B,GACzC,OAAOm/L,GAAiBf,aAAanM,EAAgBrhK,EAAU5wB,MAEjE,OAAI8+L,EAAa96N,UAAY+6N,EAAW/6N,SAC/B2uN,GAAYR,eAAeF,EAAgBrhK,EAAUnjE,GAAMtE,KAAI,SAAUgG,GAC9E,QAAI6xO,GAA8B7xO,KAChC+sO,GAAcL,cAAct0O,EAAQ0xL,EAAS7kI,GAAQN,QAAQ3kD,KACtD,MAIR8U,OAAM,GAEF86N,EAAWp6N,MAAK,SAAU/b,GAC/B,OAAOy4O,EAAWl4O,KAAI,SAAU0E,GAM9B,OALIorL,EACFioD,GAAa35O,EAAQ62L,EAAO3wL,EAAMI,GAElCqzO,GAAa35O,EAAQ62L,EAAOvwL,EAAIJ,IAE3B,QAERwW,OAAM,OAIXq9N,GAAoB,SAAU/5O,EAAQ62L,EAAOnF,GAC/C,GAAI1xL,EAAOuL,UAAU0C,eAAiBsrO,GAAmBv5O,GAAS,CAChE,IAAIkG,EAAO8tN,GAAgBL,eAAe3zN,EAAOuL,UAAUugB,UAC3D,OAAO+tN,GAAyB75O,EAAQ62L,EAAOnF,EAASxrL,GAE1D,OAAO,GAEL8zO,GAAuB,CAAE75K,gBAAiB45K,IAE1CE,GAAe7sL,GAAU,QAAS,OAClC8sL,GAAiB9sL,GAAU,MAAO,QAAS,SAC3C6kL,GAAer2E,GAAInO,SAAS,CAC9B,CAAE0sF,YAAa,CAAC,YAChB,CAAEC,WAAY,CAAC,YAEbC,GAAoB,SAAUz3O,GAChC,OAAO4Y,EAAMY,GAAIxZ,IAEf03O,GAAiB,SAAUzwN,EAAWy/H,GACxC,OAAOmC,GAAU5+F,GAAQN,QAAQ1iC,GAAY,QAASy/H,IAEpDixF,GAAkB,SAAUxuF,EAAMzC,GACpC,OAAOgC,GAAWS,EAAM,QAASzC,IAE/BkxF,GAAoB,SAAUC,GAChC,OAA8C,IAAvCr+N,GAAGq+N,EAAQvyN,QAASuyN,EAAQ3xN,QAEjC4xN,GAAsB,SAAUD,EAASnxF,GAC3C,OAAOixF,GAAgBE,EAAQvyN,QAASohI,GAAQlsI,MAAK,SAAUu9N,GAC7D,OAAOJ,GAAgBE,EAAQ3xN,MAAOwgI,GAAQlsI,MAAK,SAAUw9N,GAC3D,OAAOx+N,GAAGu+N,EAAkBC,GAAkB98N,EAAOH,KAAKg9N,GAAoB78N,EAAO5B,cAIvF2+N,GAAgB,SAAUvuF,GAC5B,OAAOxB,GAAcwB,EAAO,UAE1BwuF,GAA6B,SAAUL,EAASnxF,GAClD,OAAOixF,GAAgBE,EAAQvyN,QAASohI,GAAQlsI,MAAK,SAAUkvI,GAC7D,OAAO12I,GAAKilO,GAAcvuF,IAAQ1qJ,KAAI,SAAUm5O,GAC9C,OAAOd,GAAaQ,EAAQvyN,QAAS6yN,UAIvCC,GAAmB,SAAU1xF,EAAQ5/H,GACvC,IAAIkpI,EAAY0nF,GAAe5wN,EAAII,eAAgBw/H,GAC/CyxF,EAAUT,GAAe5wN,EAAIs/B,aAAcsgG,GAC/C,OAAO5/H,EAAIE,UAAY9L,EAAO5B,OAAS4wC,GAAM8lG,EAAWmoF,EAASd,IAAcz9N,MAAK,WAClF,OAAOo2I,EAAUp2I,MAAK,WACpB,OAAOu+N,EAAQ39N,MAAK,SAAU29N,GAC5B,OAAOR,GAAgBQ,EAASzxF,GAAQlsI,MAAK,SAAUkvI,GACrD,OAAOhpI,GAAKu3N,GAAcvuF,IAAQ1qJ,KAAI,SAAUgxJ,GAC9C,OAAOqnF,GAAarnF,EAAWmoF,eAIpC,SAAUnoF,GACX,OAAO2nF,GAAgB3nF,EAAWtJ,GAAQlsI,MAAK,SAAUkvI,GACvD,OAAO12I,GAAKilO,GAAcvuF,IAAQ1qJ,KAAI,SAAUm5O,GAC9C,OAAOd,GAAarnF,EAAWmoF,eAIpC,SAAUN,GACX,OAAOQ,GAAkB3xF,EAAQmxF,GAAW38N,EAAO5B,OAAS4+N,GAA2BL,EAASnxF,OAGhG2xF,GAAoB,SAAU3xF,EAAQmxF,GACxC,OAAOC,GAAoBD,EAASnxF,GAAQ7sI,UAE1Cy+N,GAAa,SAAUxxN,EAAK4/H,GAC9B,IAAIsJ,EAAY0nF,GAAe5wN,EAAII,eAAgBw/H,GAC/CyxF,EAAUT,GAAe5wN,EAAIs/B,aAAcsgG,GAC/C,OAAOx8F,GAAM8lG,EAAWmoF,EAASd,IAAc1rO,OAAOisO,IAAmBjsO,QAAO,SAAUksO,GACxF,OAAOQ,GAAkB3xF,EAAQmxF,MAChCt9N,SAAQ,WACT,OAAO69N,GAAiB1xF,EAAQ5/H,OAGhCyxN,GAA+B,SAAUV,EAASnxF,GACpD,OAAOoxF,GAAoBD,EAASnxF,GAAQ1nJ,KAAI,SAAU0qJ,GACxD,OAAO4tF,GAAeO,EAASnuF,EAAOuuF,GAAcvuF,QAGpD8uF,GAA2B,SAAUx4O,EAAM8mB,GAC7C,IAAI4/H,EAAS+wF,GAAkBz3O,GAC/B,OAAOs4O,GAAWxxN,EAAK4/H,GAAQlsI,MAAK,SAAUq9N,GAC5C,OAAOU,GAA6BV,EAASnxF,OAG7C+xF,GAAe,SAAUrvF,EAAOD,GAClC,OAAO/qF,GAAUgrF,GAAO,SAAUn2I,GAChC,OAAOuG,GAAGvG,EAAGk2I,OAGbuvF,GAAmB,SAAUpB,GAC/B,OAAOptL,GAAMuuL,GAAanB,EAAeluF,QAASkuF,EAAexwN,MAAMxB,SAAUmzN,GAAanB,EAAeluF,QAASkuF,EAAexwN,MAAMZ,QAAQ,SAAUquI,EAAYC,GACvK,OAAO8iF,EAAeluF,QAAQ5lJ,MAAM+wJ,EAAYC,EAAW,OAG3DmkF,GAAY,SAAUrB,GACxB,OAAOoB,GAAiBpB,GAAgBt4O,KAAI,SAAU81C,GACpD,IAAIs0G,EAAQkuF,EAAeluF,QAC3B,OAAOt0G,EAAS30C,SAAWipJ,EAAMjpJ,OAASkvO,GAAakI,YAAYD,EAAe5tF,SAAW2lF,GAAamI,WAAW1iM,OAGrH8jM,GAAqB,SAAUxvF,GACjC,OAAOimF,GAAamI,WAAWpuF,IAE7ByvF,GAAqB,SAAU74O,EAAM8mB,GACvC,OAAO0xN,GAAyBx4O,EAAM8mB,GAAKtM,KAAKm+N,KAE9CG,GAAoB,CACtBD,mBAAoBA,GACpBD,mBAAoBA,IAGlBtuD,GAAY,SAAU3hL,GACxB,IAAI6hL,EAAS,GACb,GAAI7hL,EACF,IAAK,IAAIlI,EAAI,EAAGA,EAAIkI,EAAUslL,WAAYxtL,IACxC+pL,EAAO3mL,KAAK8E,EAAUwlL,WAAW1tL,IAGrC,OAAO+pL,GAELuuD,GAAmB,SAAUvuD,GAC/B,OAAOhwK,GAAKgwK,GAAQ,SAAU92G,GAC5B,IAAIhrE,EAAO+lN,GAAgB/6I,GAC3B,OAAOhrE,EAAO,CAACuhD,GAAQN,QAAQjhD,IAAS,OAGxCswO,GAAoB,SAAUrwO,GAChC,OAAO2hL,GAAU3hL,GAAWxI,OAAS,GAEnC84O,GAAa,CACf3uD,UAAWA,GACXyuD,iBAAkBA,GAClBC,kBAAmBA,IAGjBE,GAAqB,SAAU1uD,GACjC,OAAO7+K,EAAOstO,GAAWF,iBAAiBvuD,GAASgsB,KAEjD2iC,GAAsB,SAAUn0O,GAClC,IAAI+0K,EAAgB7xB,GAAcljJ,EAAK,+CACvC,OAAO+0K,GAELq/D,GAA8B,SAAU5uD,EAAQxpL,GAClD,IAAI+4K,EAAgBo/D,GAAoBn4O,GACpCq4O,EAAaH,GAAmB1uD,GACpC,OAAOzQ,EAAc55K,OAAS,EAAI45K,EAAgBs/D,GAEhDC,GAAqB,SAAUl8O,GACjC,OAAOg8O,GAA4BH,GAAW3uD,UAAUltL,EAAOuL,UAAUysO,UAAWnrL,GAAQN,QAAQvsD,EAAO0T,aAEzGyoO,GAAqB,CACvBL,mBAAoBA,GACpBC,oBAAqBA,GACrBC,4BAA6BA,GAC7BE,mBAAoBA,IAGlB9B,GAAa,SAAUp6O,EAAQgsJ,GAGjC,OAFAx9I,EAAKw9I,EAAO25E,GAAUL,mBACtBtlO,EAAOuL,UAAUmgB,kBAAkBsgI,EAAM,GAAGpgJ,MAAO,IAC5C,GAELwwO,GAAqB,SAAUp8O,EAAQssJ,GAEzC,OADAqoF,GAAcL,cAAct0O,GAAQ,EAAOssJ,IACpC,GAEL+vF,GAAkB,SAAUr8O,EAAQu2M,EAAS7sL,GAC/C,OAAOgyN,GAAkBD,mBAAmBllC,EAAS7sL,GAAK9nB,KAAI,SAAUqd,GACtE,OAAOA,EAAOzC,KAAKhB,EAAM4gO,GAAoBp8O,GAASwb,EAAM4+N,GAAYp6O,QAGxEs8O,GAAqB,SAAUt8O,EAAQsgD,GACzC,OAAOi8L,GAAav8O,EAAQsgD,IAE1Bk8L,GAAmB,SAAUx8O,EAAQu2M,EAAS7sL,EAAK+yN,GACrD,OAAOC,GAAiBnmC,EAASkmC,GAAUjgO,MAAK,WAC9C,OAAO6/N,GAAgBr8O,EAAQu2M,EAAS7sL,MACvC,SAAU42B,GACX,OAAOg8L,GAAmBt8O,EAAQsgD,MACjC5jC,OAAM,IAEPigO,GAAgB,SAAU38O,EAAQy8O,GACpC,IAAIpzK,EAAWxc,GAAQN,QAAQvsD,EAAO0T,WAClCgW,EAAM1pB,EAAOuL,UAAUugB,SACvB6wJ,EAAgBw/D,GAAmBD,mBAAmBl8O,GAC1D,OAAgC,IAAzB28K,EAAc55K,OAAeq3O,GAAWp6O,EAAQ28K,GAAiB6/D,GAAiBx8O,EAAQqpE,EAAU3/C,EAAK+yN,IAE9GG,GAAgB,SAAUrmC,EAAS3uM,GACrC,OAAOqH,EAAKm/N,GAAQD,eAAevmO,EAAK2uM,GAAU6C,KAEhDsjC,GAAmB,SAAUnmC,EAAS3uM,GACxC,OAAOqH,EAAKm/N,GAAQD,eAAevmO,EAAK2uM,IAAU,SAAU3uM,GAC1D,MAAqB,YAAd3J,GAAK2J,OAGZi1O,GAAqB,SAAU78O,EAAQu2M,EAAS7kB,EAASorD,EAAU52O,GACrE,OAAOy2N,GAAYhiC,SAASjJ,EAAS1xL,EAAO0T,UAAWxN,GAAMkX,MAAK,SAAU9W,GAC1E,OAAOs2O,GAAcrmC,EAAS1pJ,GAAQN,QAAQjmD,EAAGkF,YAAY5J,KAAI,SAAUm7O,GACzE,OAAgC,IAAzB3gO,GAAG2gO,EAAQD,UAIpBP,GAAe,SAAUv8O,EAAQ4H,GAGnC,OAFA+9N,GAAUL,kBAAkB19N,GAC5B5H,EAAOuL,UAAUmgB,kBAAkB9jB,EAAIgE,MAAO,GACvCkS,EAAOH,MAAK,IAEjBq/N,GAAwB,SAAUC,EAAavrD,EAASxrL,EAAMI,GAChE,OAAOq2N,GAAYC,gBAAgBqgB,EAAYrxO,OAAOwR,MAAK,SAAUw/E,GACnE,OAAO+/H,GAAYE,eAAeogB,EAAYrxO,OAAOhK,KAAI,SAAUgU,GACjE,OAAO87K,EAAUxrL,EAAKwqN,QAAQ9zH,IAAUt2F,EAAGoqN,QAAQ96M,GAAQ1P,EAAKwqN,QAAQ96M,IAAStP,EAAGoqN,QAAQ9zH,SAE7FlgF,OAAM,IAEPwgO,GAAoB,SAAUl9O,EAAQ4H,GACxC,OAAO20O,GAAav8O,EAAQ4H,IAE1Bu1O,GAAuB,SAAU5mC,EAAS0mC,EAAa32O,GACzD,OAAOo2O,GAAiBnmC,EAAS1pJ,GAAQN,QAAQjmD,EAAGkF,YAAY5J,KAAI,SAAUw7O,GAC5E,OAAsC,IAA/BhhO,GAAGghO,EAAWH,OAGrBI,GAA2B,SAAUr9O,EAAQu2M,EAAS7kB,EAASurD,EAAa/2O,GAC9E,OAAOy2N,GAAYhiC,SAASjJ,EAAS1xL,EAAO0T,UAAWxN,GAAMkX,MAAK,SAAU9W,GAC1E,OAAO02O,GAAsBC,EAAavrD,EAASxrL,EAAMI,GAAM42O,GAAkBl9O,EAAQi9O,GAAeE,GAAqB5mC,EAAS0mC,EAAa32O,MAClJ4W,GAAGY,EAAOH,MAAK,KAEhB2/N,GAAmB,SAAUt9O,EAAQ0xL,EAAS6kB,EAASkmC,GACzD,IAAIv2O,EAAO8tN,GAAgBL,eAAe3zN,EAAOuL,UAAUugB,UAC3D,OAAO8wN,GAAcrmC,EAASkmC,GAAUr/N,MAAK,SAAU0/N,GACrD,OAAOjQ,GAAM/qL,QAAQg7L,GAAYP,GAAav8O,EAAQ88O,GAAYD,GAAmB78O,EAAQu2M,EAAS7kB,EAASorD,EAAU52O,OAGzHq3O,GAAqB,SAAUv9O,EAAQ0xL,EAAS6kB,EAAS0mC,GAC3D,IAAI/2O,EAAO8tN,GAAgBL,eAAe3zN,EAAOuL,UAAUugB,UAC3D,OAAO+gN,GAAM/qL,QAAQm7L,GAAeV,GAAav8O,EAAQi9O,GAAeI,GAAyBr9O,EAAQu2M,EAAS7kB,EAASurD,EAAa/2O,IAEtIs3O,GAAc,SAAUx9O,EAAQ0xL,EAAS+qD,GAC3C,IAAIlmC,EAAU1pJ,GAAQN,QAAQvsD,EAAO0T,WACrC,OAAOgpO,GAAiBnmC,EAASkmC,GAAUjgO,MAAK,WAC9C,OAAO8gO,GAAiBt9O,EAAQ0xL,EAAS6kB,EAASkmC,MACjD,SAAUQ,GACX,OAAOM,GAAmBv9O,EAAQ0xL,EAAS6kB,EAAS0mC,MACnDvgO,OAAM,IAEP+gO,GAAoB,SAAUz9O,EAAQ0xL,GACxC,IAAI+qD,EAAW5vL,GAAQN,QAAQvsD,EAAOuL,UAAU4I,UAAS,IACrD63I,EAAQmwF,GAAmBD,mBAAmBl8O,GAClD,OAAOA,EAAOuL,UAAU0C,eAAkC,IAAjB+9I,EAAMjpJ,OAAey6O,GAAYx9O,EAAQ0xL,EAAS+qD,GAAYE,GAAc38O,EAAQy8O,IAE3HiB,GAAc,CAAEv9K,gBAAiBs9K,IAEjCE,GAASre,GAAYN,KACrB4e,GAAmC,SAAU/e,EAAIvzN,EAAMrN,GACzD,IAAI4/O,EAAahf,EAAG3wN,UAAU5O,IAAIrB,GAClC,GAAI4/O,EACF,IAAK,IAAIx6O,EAAI,EAAGA,EAAIw6O,EAAW96O,OAAQM,IACrC,IAA8B,IAA1Bw6O,EAAWx6O,GAAGy6O,SAAqBjf,EAAGjzN,IAAIjO,GAAG2N,EAAMuyO,EAAWx6O,GAAG8F,UACnE,OAAO,EAIb,OAAO,GAEL40O,GAAe,SAAU/9O,EAAQsL,EAAMrN,EAAM8gO,GAC/C,IAAIn8N,EAAO5C,EAAO4L,IAAI06C,UACtB,OAAIh7C,IAAS1I,IAGb0I,EAAOtL,EAAO4L,IAAIoL,UAAU1L,GAAM,SAAUA,GAC1C,QAAIsyO,GAAiC59O,EAAQsL,EAAMrN,KAG5CqN,EAAKpH,aAAetB,KAAUg8K,GAAU5+K,EAAQsL,EAAMrN,EAAM8gO,GAAM,OAEpEngD,GAAU5+K,EAAQsL,EAAMrN,EAAM8gO,KAEnCif,GAAY,SAAUpyO,EAAKN,EAAM2I,GACnC,QAAI0pO,GAAOryO,EAAM2I,EAAOrE,YAGpB+tO,GAAOryO,EAAM2I,EAAO4Y,SAGpB5Y,EAAO9K,SACgB,IAAlBmC,EAAKye,UAAkBne,EAAIjO,GAAG2N,EAAM2I,EAAO9K,eADpD,KAIE80O,GAAa,SAAUryO,EAAKN,EAAM2I,EAAQiqO,EAAUC,EAASpf,GAC/D,IAAIvhO,EAAK6B,EAELgE,EADAic,EAAQrL,EAAOiqO,GAEnB,GAAIjqO,EAAOmqO,QACT,OAAOnqO,EAAOmqO,QAAQ9yO,EAAM2I,EAAQiqO,GAEtC,GAAI5+N,EACF,GAA4B,qBAAjBA,EAAMvc,QACf,IAAKvF,KAAO8hB,EACV,GAAIA,EAAMnd,eAAe3E,GAAM,CAM7B,GAJE6B,EADe,eAAb6+O,EACMtyO,EAAImzC,UAAUzzC,EAAM9N,GAEpB8hO,GAAYnmL,SAASvtC,EAAKN,EAAM9N,GAEtC2gP,IAAY9+O,IAAU4U,EAAO43K,MAC/B,OAEF,KAAMsyD,GAAWlqO,EAAO43K,SAAW8xD,GAAOt+O,EAAOigO,GAAYJ,oBAAoBtzN,EAAK0zN,GAAYR,YAAYx/M,EAAM9hB,GAAMuhO,GAAOvhO,IAC/H,aAKN,IAAK6F,EAAI,EAAGA,EAAIic,EAAMvc,OAAQM,IAC5B,GAAiB,eAAb66O,EAA4BtyO,EAAImzC,UAAUzzC,EAAMgU,EAAMjc,IAAMi8N,GAAYnmL,SAASvtC,EAAKN,EAAMgU,EAAMjc,IACpG,OAAO4Q,EAKf,OAAOA,GAEL2qK,GAAY,SAAUigD,EAAIvzN,EAAMrN,EAAM8gO,EAAMof,GAC9C,IACIlqO,EAAQ5Q,EAAGwS,EAAG1O,EADd02O,EAAahf,EAAG3wN,UAAU5O,IAAIrB,GAE9B2N,EAAMizN,EAAGjzN,IACb,GAAIiyO,GAAcvyO,EAChB,IAAKjI,EAAI,EAAGA,EAAIw6O,EAAW96O,OAAQM,IAEjC,GADA4Q,EAAS4pO,EAAWx6O,GAChB26O,GAAUnf,EAAGjzN,IAAKN,EAAM2I,IAAWgqO,GAAWryO,EAAKN,EAAM2I,EAAQ,aAAckqO,EAASpf,IAASkf,GAAWryO,EAAKN,EAAM2I,EAAQ,SAAUkqO,EAASpf,GAAO,CAC3J,GAAI53N,EAAU8M,EAAO9M,QACnB,IAAK0O,EAAI,EAAGA,EAAI1O,EAAQpE,OAAQ8S,IAC9B,IAAKgpN,EAAGjzN,IAAIoG,SAAS1G,EAAMnE,EAAQ0O,IACjC,OAIN,OAAO5B,IAKXxV,GAAQ,SAAUuB,EAAQ/B,EAAM8gO,EAAMzzN,GACxC,IAAI0wD,EACJ,OAAI1wD,EACKyyO,GAAa/9O,EAAQsL,EAAMrN,EAAM8gO,IAE1CzzN,EAAOtL,EAAOuL,UAAUC,YACpBuyO,GAAa/9O,EAAQsL,EAAMrN,EAAM8gO,KAGrC/iK,EAAYh8D,EAAOuL,UAAU4I,aACzB6nD,IAAc1wD,IACZyyO,GAAa/9O,EAAQg8D,EAAW/9D,EAAM8gO,OAM1CvlH,GAAW,SAAUx5G,EAAQ4mG,EAAOm4H,GACtC,IAAIsf,EACAC,EAAqB,GACrBC,EAAa,GAYjB,OAXAF,EAAer+O,EAAOuL,UAAU4I,WAChCnU,EAAO4L,IAAIoL,UAAUqnO,GAAc,SAAU/yO,GAC3C,IAAIjI,EAAGpF,EACP,IAAKoF,EAAI,EAAGA,EAAIujG,EAAM7jG,OAAQM,IAC5BpF,EAAO2oG,EAAMvjG,IACRk7O,EAAWtgP,IAAS2gL,GAAU5+K,EAAQsL,EAAMrN,EAAM8gO,KACrDwf,EAAWtgP,IAAQ,EACnBqgP,EAAmB73O,KAAKxI,MAG3B+B,EAAO4L,IAAI06C,WACPg4L,GAELE,GAAW,SAAUx+O,EAAQ/B,GAC/B,IACI+9D,EAAWmF,EAAS99D,EAAGwS,EAAG1M,EAD1B00O,EAAa79O,EAAOkO,UAAU5O,IAAIrB,GAElC2N,EAAM5L,EAAO4L,IACjB,GAAIiyO,EAGF,IAFA7hL,EAAYh8D,EAAOuL,UAAU4I,WAC7BgtD,EAAUm+J,GAAYxsN,WAAWlH,EAAKowD,GACjCnmD,EAAIgoO,EAAW96O,OAAS,EAAG8S,GAAK,EAAGA,IAAK,CAE3C,GADA1M,EAAW00O,EAAWhoO,GAAG1M,UACpBA,GAAY00O,EAAWhoO,GAAG4oO,aAC7B,OAAO,EAET,IAAKp7O,EAAI89D,EAAQp+D,OAAS,EAAGM,GAAK,EAAGA,IACnC,GAAIuI,EAAIjO,GAAGwjE,EAAQ99D,GAAI8F,GACrB,OAAO,EAKf,OAAO,GAELu1O,GAAc,CAChB9/D,UAAWA,GACXo/D,UAAWA,GACXv/O,MAAOA,GACP+6G,SAAUA,GACVglI,SAAUA,GACVZ,iCAAkCA,IAGhC3yN,GAAY,SAAU3f,EAAMtN,GAC9B,OAAOsN,EAAK2f,UAAUjtB,IAEpB2gP,GAAU,SAAUj1N,GACtB,IAAII,EAAiBJ,EAAII,eAAgBG,EAAcP,EAAIO,YAAa++B,EAAet/B,EAAIs/B,aAAc9+B,EAAYR,EAAIQ,UAwBzH,OAvBIJ,IAAmBk/B,GAAgBP,GAAS/9B,OAAOZ,GACjDG,EAAc,GAAKA,EAAcH,EAAewyG,UAAUv5H,SAC5DimD,EAAe/9B,GAAUnB,EAAgBG,GACzCH,EAAiBk/B,EAAaX,gBAC1Bn+B,EAAYD,GACdC,GAAwBD,EACxBH,EAAiBk/B,EAAe/9B,GAAU+9B,EAAc9+B,GAAWm+B,gBACnEn+B,EAAY8+B,EAAaszE,UAAUv5H,OACnCknB,EAAc,GAEdC,EAAY,IAIZu+B,GAAS/9B,OAAOZ,IAAmBG,EAAc,GAAKA,EAAcH,EAAewyG,UAAUv5H,SAC/F+mB,EAAiBmB,GAAUnB,EAAgBG,GAC3CA,EAAc,GAEZw+B,GAAS/9B,OAAOs+B,IAAiB9+B,EAAY,GAAKA,EAAY8+B,EAAaszE,UAAUv5H,SACvFimD,EAAe/9B,GAAU+9B,EAAc9+B,GAAWm+B,gBAClDn+B,EAAY8+B,EAAaszE,UAAUv5H,SAGhC,CACL+mB,eAAgBA,EAChBG,YAAaA,EACb++B,aAAcA,EACd9+B,UAAWA,IAGX00N,GAAa,CAAE5kP,MAAO2kP,IAEtBE,GAASzwB,GAAKH,KAAM6wB,GAAa,aACjCC,GAAa,SAAU74M,EAAe56B,GACxC,OAAO46B,EAAc64M,WAAWzzO,GAAM,IAEpC0zO,GAA0B,SAAU1zO,GACtC,IAAIuH,EAAQ,GACZ,MAAOvH,EAAM,CACX,GAAsB,IAAlBA,EAAKye,UAAkBze,EAAKgxH,YAAcuiH,IAAUvzO,EAAKgM,WAAWvU,OAAS,EAC/E,MAAO,GAEa,IAAlBuI,EAAKye,UACPlX,EAAMpM,KAAK6E,GAEbA,EAAOA,EAAKiM,WAEd,OAAO1E,GAELosO,GAAwB,SAAU3zO,GACpC,OAAO0zO,GAAwB1zO,GAAMvI,OAAS,GAE5Cm8O,GAAoB,SAAU5zO,GAChC,IAAIohB,EACJ,GAAIphB,EAEF,IADAohB,EAAS,IAAI0rL,GAAW9sM,EAAMA,GACzBA,EAAOohB,EAAOuiC,UAAW3jD,EAAMA,EAAOohB,EAAOC,OAChD,GAAsB,IAAlBrhB,EAAKye,SACP,OAAOze,EAIb,OAAO,MAEL6zO,GAAuB,SAAU3gK,GACnC,IAAIgxI,EAAiB3iK,GAAQL,QAAQ,QASrC,OARAwI,GAAOw6J,EAAgB,CACrB,GAAMsvB,GACN,iBAAkB,IAClB,gBAAiB,iBAEftgK,GACF1vE,GAAO0gN,EAAgB3iK,GAAQJ,SAASoyL,KAEnCrvB,GAEL4vB,GAA6B,SAAU1nB,GACzC,IAAI9sM,EAAWs0N,GAAkBxnB,GAIjC,OAHI9sM,GAAYA,EAAS0xG,UAAU1iD,OAAO,KAAOilK,IAC/Cj0N,EAASM,WAAW,EAAG,GAElBN,GAELy0N,GAA2B,SAAUr/O,EAAQsL,EAAMipO,QACnC,IAAdA,IACFA,GAAY,GAEd,IAAI3oO,EAAM5L,EAAO4L,IAAKL,EAAYvL,EAAOuL,UACzC,GAAI0zO,GAAsB3zO,GACxBqpO,GAAcL,cAAct0O,GAAQ,EAAO6sD,GAAQN,QAAQjhD,GAAOipO,OAC7D,CACL,IAAI7qN,EAAMne,EAAUugB,SAChBe,EAAQjhB,EAAIoL,UAAU1L,EAAMM,EAAIs8C,SAChCt9B,EAAWw0N,GAA2B9zO,GACtCoe,EAAII,iBAAmBc,GAAYlB,EAAIO,YAAc,GACvDP,EAAIW,SAASO,EAAUlB,EAAIO,YAAc,GAEvCP,EAAIs/B,eAAiBp+B,GAAYlB,EAAIQ,UAAY,GACnDR,EAAIY,OAAOM,EAAUlB,EAAIQ,UAAY,GAEvCte,EAAI+I,OAAOrJ,GAAM,GACbuhB,GAASjhB,EAAIk2C,QAAQj1B,IACvB84M,GAAUL,kBAAkBz4K,GAAQN,QAAQ1/B,IAE9CthB,EAAUwf,OAAOrB,KAGjB41N,GAAuB,SAAUt/O,EAAQsL,EAAMipO,QAC/B,IAAdA,IACFA,GAAY,GAEd,IAAI3oO,EAAM5L,EAAO4L,IAAKL,EAAYvL,EAAOuL,UACzC,GAAKD,EAQH+zO,GAAyBr/O,EAAQsL,EAAMipO,QANvC,GADAjpO,EAAOqrN,GAAwB32N,EAAO0T,UAAWnI,EAAU4I,aACtD7I,EACH,MAAOA,EAAOM,EAAItM,IAAIw/O,IACpBO,GAAyBr/O,EAAQsL,GAAM,IAO3Ci0O,GAA2B,SAAUv/O,EAAQwvN,EAAgBgwB,GAC/D,IAAI5zO,EAAM5L,EAAO4L,IAAKihB,EAAQjhB,EAAIoL,UAAUwoO,EAAYhkO,EAAM8jN,GAAYr3K,YAAajoD,IACnF6sB,GAASjhB,EAAIk2C,QAAQj1B,GACvB2yN,EAAWt7O,WAAWgL,aAAasgN,EAAgBgwB,IAEnD7Z,GAAUP,iBAAiBv4K,GAAQN,QAAQizL,IACvC5zO,EAAIk2C,QAAQ09L,GACdA,EAAWt7O,WAAWgL,aAAasgN,EAAgBgwB,GAEnD5zO,EAAIygB,YAAYmjM,EAAgBgwB,KAIlCC,GAAa,SAAUv7O,EAAYoH,GAErC,OADApH,EAAW+L,YAAY3E,GAChBA,GAELo0O,GAAsC,SAAUC,EAAanwB,GAC/D,IAAIowB,EAAsBj5F,EAAMg5F,GAAa,SAAUz7O,EAAYs7O,GACjE,OAAOC,GAAWv7O,EAAYs7O,EAAWtoM,WAAU,MAClDs4K,GACH,OAAOiwB,GAAWG,EAAqBA,EAAoB15M,cAAc92B,eAAeyvO,MAEtFgB,GAAmB,SAAU7/O,EAAQ/B,EAAM8gO,GAC7C,IAAIr1M,EAAK8lM,EAAgB5kM,EAAU5sB,EAAQmrD,EAAUt/B,EAAWvkB,EAC5DiG,EAAYvL,EAAOuL,UACvBme,EAAMne,EAAUugB,QAAO,GACvB9tB,EAAS0rB,EAAIO,YACbJ,EAAYH,EAAII,eAChBxkB,EAAOukB,EAAUyyG,UACjBkzF,EAAiBmH,GAAwB32N,EAAO0T,UAAWnI,EAAU4I,YACjEq7M,IACF5kM,EAAWs0N,GAAkB1vB,IAE/B,IAAIswB,EAAgB,gCAChBx6O,GAAQtH,EAAS,GAAKA,EAASsH,EAAKvC,QAAU+8O,EAAc97O,KAAKsB,EAAKs0E,OAAO57E,KAAY8hP,EAAc97O,KAAKsB,EAAKs0E,OAAO57E,EAAS,KACnImrD,EAAW59C,EAAU2vD,cACrBxxC,EAAIoD,UAAS,GACbpD,EAAMi3M,GAAYH,UAAUxgO,EAAQ0pB,EAAK1pB,EAAOkO,UAAU5O,IAAIrB,IAC9DyrB,EAAMk1N,GAAW5kP,MAAM0vB,GACvB1pB,EAAOkO,UAAUrH,MAAM5I,EAAM8gO,EAAMr1M,GACnCne,EAAU4vD,eAAehS,KAEpBqmK,GAAkB5kM,EAAS0xG,YAAcuiH,KAC5CrvB,EAAiBuvB,GAAW/+O,EAAOmP,SAAUgwO,IAAqB,GAAMvzO,OACxEgf,EAAW4kM,EAAej4M,WAC1BmS,EAAIwD,WAAWsiM,GACfxxN,EAAS,GAGTgC,EAAOkO,UAAUrH,MAAM5I,EAAM8gO,EAAMvP,GAErCjkN,EAAUmgB,kBAAkBd,EAAU5sB,KAGtC+hP,GAAoB,SAAU//O,EAAQ/B,EAAM8gO,EAAMof,GACpD,IACIt0N,EAAW7rB,EAAQmrD,EACnB62L,EAAiB10O,EAAMk0O,EAEvBhwB,EAJA5jN,EAAM5L,EAAO4L,IAAKL,EAAYvL,EAAOuL,UAGrC41D,EAAU,GAAIz3C,EAAMne,EAAUugB,SAElCjC,EAAYH,EAAII,eAChB9rB,EAAS0rB,EAAIO,YACb3e,EAAOue,EACoB,IAAvBA,EAAUE,WACR/rB,IAAW6rB,EAAUyyG,UAAUv5H,SACjCi9O,GAAkB,GAEpB10O,EAAOA,EAAKpH,YAEd,MAAOoH,EAAM,CACX,GAAIozO,GAAY9/D,UAAU5+K,EAAQsL,EAAMrN,EAAM8gO,EAAMof,GAAU,CAC5DqB,EAAal0O,EACb,MAEEA,EAAKqgB,cACPq0N,GAAkB,GAEpB7+K,EAAQ16D,KAAK6E,GACbA,EAAOA,EAAKpH,WAEd,GAAKs7O,EAGL,GAAIQ,EAAiB,CACnB72L,EAAW59C,EAAU2vD,cACrBxxC,EAAIoD,UAAS,GACb,IAAImzN,EAActf,GAAYH,UAAUxgO,EAAQ0pB,EAAK1pB,EAAOkO,UAAU5O,IAAIrB,IAAO,GACjFgiP,EAAcrB,GAAW5kP,MAAMimP,GAC/BjgP,EAAOkO,UAAUyG,OAAO1W,EAAM8gO,EAAMkhB,GACpC10O,EAAU4vD,eAAehS,OACpB,CACLqmK,EAAiBmH,GAAwB32N,EAAO0T,UAAW8rO,GAC3D,IAAIU,EAAoBf,IAAqB,GAAOvzO,MAChDoqO,EAAY0J,GAAoCv+K,EAAS++K,GAE3DX,GAAyBv/O,EAAQkgP,EAD/B1wB,GAGkDgwB,GAEtDH,GAAyBr/O,EAAQwvN,GAAgB,GACjDjkN,EAAUmgB,kBAAkBsqN,EAAW,GACnCpqO,EAAIk2C,QAAQ09L,IACd5zO,EAAI+I,OAAO6qO,KAIbW,GAAwB,SAAUngP,EAAQmuB,GAC5C,IAAI5iB,EAAYvL,EAAOuL,UAAW8B,EAAOrN,EAAO0T,UAChD4rO,GAAqBt/O,EAAQ,MAAM,GAClB,IAAZmuB,GAA6B,KAAZA,IAAmB5iB,EAAU0C,eAAiB1C,EAAU4I,WAAWnP,YAAc65O,IACrGS,GAAqBt/O,EAAQ22N,GAAwBtpN,EAAM9B,EAAU4I,aAEvD,KAAZga,GAA8B,KAAZA,GACpBmxN,GAAqBt/O,EAAQ22N,GAAwBtpN,EAAM9B,EAAU4I,cAGrEukE,GAAU,SAAU14E,GACtBA,EAAOsO,GAAG,mBAAmB,SAAUR,GACrCqyO,GAAsBngP,EAAQ8N,EAAEqgB,aAGhCiyN,GAAyB,SAAU9lL,EAAYqlL,GACjD,IAAInwB,EAAiB2vB,IAAqB,GACtCkB,EAAYX,GAAoCC,EAAanwB,EAAe5jN,OAGhF,OAFAlJ,GAAOmqD,GAAQN,QAAQ+N,GAAak1J,GACpC7mE,GAAS97F,GAAQN,QAAQ+N,IAClB05J,GAAgBqsB,EAAW,IAEhCC,GAAkB,SAAUtgP,EAAQ4D,GACtC,IAAI28O,EAAiBvgP,EAAOqhD,OAAO4hK,wBACnC,OAAOs9B,EAAep+O,eAAelE,GAAK2F,MAAc8yN,GAAY9yN,EAAQgI,SAAW68C,GAASuxJ,QAAQp2M,EAAQgI,QAE9G40O,GAA4B,SAAU58O,GACxC,OAAO8yN,GAAY9yN,EAAQgI,QAAUqzO,GAAsBr7O,EAAQgI,QAGjE60O,GAAmB,SAAUlqC,EAASkmC,GACxC,IAAIt7K,EAAUitK,GAAQD,eAAesO,EAAUlmC,GAC/C,OAAOv1I,GAAUG,EAASjZ,IAAS1rC,KAAK/R,EAAS02D,IAAU,SAAUh7D,GACnE,OAAOg7D,EAAQ/6D,MAAM,EAAGD,OAGxBu6O,GAAoB,SAAU94O,GAChC,OAAgC,IAAzBuL,GAASvL,GAAK7E,QAEnB49O,GAAqB,SAAUjvD,EAAS1xL,EAAQ2Q,EAAQiwO,GAC1D,IAAIC,EAAoBrlO,EAAM8kO,GAAiBtgP,GAC3C2/O,EAAc/9O,EAAI2M,EAAOqyO,EAAeC,IAAoB,SAAUj5O,GACxE,OAAOA,EAAIgE,SAEb,GAA2B,IAAvB+zO,EAAY58O,OACd4xO,GAAcL,cAAct0O,EAAQ0xL,EAAS/gL,OACxC,CACL,IAAI8nC,EAAM2nM,GAAuBzvO,EAAO/E,MAAO+zO,GAC/C3/O,EAAOuL,UAAUwf,OAAO0tB,EAAIg7K,aAG5BqtB,GAAgB,SAAU9gP,EAAQ0xL,GACpC,IAAI6kB,EAAU1pJ,GAAQN,QAAQvsD,EAAO0T,WACjC+oO,EAAW5vL,GAAQN,QAAQvsD,EAAOuL,UAAU4I,YAC5CysO,EAAgBryO,EAAOkyO,GAAiBlqC,EAASkmC,GAAWiE,IAChE,OAAO9qO,GAAKgrO,GAAeh/O,KAAI,SAAU+O,GACvC,IAAI+6N,EAAU1X,GAAgBL,eAAe3zN,EAAOuL,UAAUugB,UAC9D,SAAIogN,GAAYT,gCAAgC/5C,EAASg6C,EAAS/6N,EAAO/E,QAAW40O,GAA0B7vO,MAC5GgwO,GAAmBjvD,EAAS1xL,EAAQ2Q,EAAQiwO,IACrC,MAIRlkO,OAAM,IAEPqkO,GAAoB,SAAU/gP,EAAQ0xL,GACxC,QAAO1xL,EAAOuL,UAAU0C,eAAgB6yO,GAAc9gP,EAAQ0xL,IAE5DsvD,GAAqB,CAAE7gL,gBAAiB4gL,IAExCE,GAAW,SAAUr5O,GACvB,IAAIiO,EAAI,EAAG7Z,EAAI,EACXw6M,EAAe5uM,EACnB,MAAO4uM,GAAgBA,EAAazsL,SAClClU,GAAK2gM,EAAaz0C,YAAc,EAChC/lK,GAAKw6M,EAAa33F,WAAa,EAC/B23F,EAAeA,EAAaA,aAE9B,MAAO,CACL3gM,EAAGA,EACH7Z,EAAGA,IAGHklP,GAA0B,SAAUlhP,EAAQ4H,EAAKu5O,GACnD,IAAIC,EAAc,CAChBx5O,IAAKA,EACLu5O,WAAYA,GAGd,OADAnhP,EAAO8lC,KAAK,iBAAkBs7M,GACvBA,EAAYr3K,sBAEjBs3K,GAAwB,SAAUrhP,EAAQ4H,EAAKu5O,GACjD,IAAInlP,EAAGslP,EAGHC,EAAWC,EAFX51O,EAAM5L,EAAO4L,IACbhJ,EAAOgJ,EAAI06C,UACWm7L,EAAU,EACpC,IAAIP,GAAwBlhP,EAAQ4H,EAAKu5O,IAGpC14L,GAASqM,UAAUltD,GAAxB,CAMA,IAHmB,IAAfu5O,IACFM,EAAU75O,EAAI6hC,cAEM,SAAlB7mC,EAAKuB,SAAqB,CAC5B,IAAIu9O,EAAkB1hP,EAAOuL,UAAUo2O,qBACvC,GAAID,EAOF,OANA1lP,EAAIilP,GAASr5O,GAAK5L,EAAIilP,GAASS,GAAiB1lP,EAAIylP,EACpDD,EAAYE,EAAgBp4M,aAC5Bi4M,EAAYG,EAAgBnoM,gBACxBv9C,EAAIulP,GAAavlP,EAAI,GAAKulP,EAAYC,KACxCE,EAAgBnoM,UAAYv9C,EAAIulP,EAAYvlP,EAAIA,EAAIwlP,EAAY,KAKtEF,EAAW11O,EAAInL,YAAYT,EAAOqsL,UAClCrwL,EAAI4P,EAAIytC,OAAOzxC,GAAK5L,EAAIylP,EACxBF,EAAYD,EAAStlP,EACrBwlP,EAAYF,EAAS5lP,GACjBM,EAAIslP,EAAStlP,GAAKA,EAAI,GAAKulP,EAAYC,IACzCxhP,EAAOqsL,SAAS/iE,SAAS,EAAGttH,EAAIulP,EAAYvlP,EAAIA,EAAIwlP,EAAY,MAGhEI,GAAkB,SAAU5hP,GAC9B,GAAIA,EAAO4P,OACT,OAAO5P,EAAO0T,UAAUwqG,wBAExB,IAAIh0E,EAAMlqC,EAAOqsL,SACjB,MAAO,CACL/kJ,KAAM,EACN8uH,MAAOlsH,EAAIg/E,WACX3hF,IAAK,EACLwV,OAAQ7S,EAAIi0E,YACZ/rF,MAAO8X,EAAIg/E,WACX72F,OAAQ6X,EAAIi0E,cAIdk7E,GAAW,SAAUr5L,EAAQ04C,EAAIC,GAC/B34C,EAAO4P,QACT5P,EAAO0T,UAAU4lC,YAAcZ,EAC/B14C,EAAO0T,UAAU6lC,WAAaZ,GAE9B34C,EAAOqsL,SAASgN,SAAS3gJ,EAAIC,IAG7BkpM,GAAsB,SAAU7hP,EAAQ0pB,GAC1CpG,GAAKkwM,GAAcG,eAAejqM,GAAKqjK,kBAAkBv+K,MAAK,SAAUszO,GACtE,IAAIC,EAAWH,GAAgB5hP,GAC3Bq2E,EAAW+6I,GAAY2wB,EAAUD,GACjCrkM,EAAS,EACT/E,EAAK29B,EAASxgE,EAAI,EAAIwgE,EAASxgE,EAAI4nC,EAAS44B,EAASxgE,EAAI4nC,EACzD9E,EAAK09B,EAASr6E,EAAI,EAAIq6E,EAASr6E,EAAIyhD,EAAS44B,EAASr6E,EAAIyhD,EAC7D47I,GAASr5L,EAAuB,IAAfq2E,EAASxgE,EAAU6iC,EAAK,EAAkB,IAAf29B,EAASr6E,EAAU28C,EAAK,OAGpEqpM,GAAiB,CACnBX,sBAAuBA,GACvBQ,oBAAqBA,IAGnBI,GAA0Bx5L,GAASw/H,sBACnCi6D,GAA2Bz5L,GAAS60B,uBACpC6kK,GAAY,SAAUh1O,EAAWnN,EAAQsL,EAAM5I,EAAQimF,GACzD,OAAO3oF,EAAOwoO,oBAAoB2Z,UAAUh1O,EAAW7B,EAAM5I,EAAQimF,IAEnEy5J,GAAe,SAAU92O,GAC3B,IAAIoe,EAAMpe,EAAK46B,cAAc9b,cAE7B,OADAV,EAAIykK,WAAW7iL,GACRoe,GAELykK,GAAa,SAAUnuL,EAAQsL,GACjC,IAAIwC,EAAI9N,EAAO8lC,KAAK,uBAAwB,CAAEn1B,OAAQrF,IACtD,OAAIwC,EAAEi8D,qBACG,KAEFq4K,GAAa92O,IAElB+2O,GAAqB,SAAUriP,EAAQs2E,EAAOqS,GAChD,IAAI4xI,EAAkB5xK,GAAe,EAAG3oD,EAAO0T,UAAW4iE,GACtD88I,EAAgBY,GAAgBL,eAAe4G,GAC/C+nB,EAAoBlvB,EAAc5nN,UACtC,GAAI02O,GAAyBI,GAC3B,OAAOH,GAAU,EAAGniP,EAAQsiP,GAAoBlvB,EAAcpE,WAAW,GAE3E,IAAIuzB,EAA0BnvB,EAAc5nN,SAAQ,GACpD,GAAI02O,GAAyBK,GAC3B,OAAOJ,GAAU,EAAGniP,EAAQuiP,GAAyB,GAAO,GAE9D,IAAIrN,EAASl1O,EAAO4L,IAAIoL,UAAUo8M,EAAc5nN,WAAW,SAAUF,GACnE,OAAO42O,GAAyB52O,IAAS22O,GAAwB32O,MAEnE,OAAI42O,GAAyBhN,GACpBiN,GAAU,EAAGniP,EAAQk1O,GAAQ,EAAOvsJ,GAEtC,MAEL65J,GAAmB,SAAUxiP,EAAQs2E,EAAOqS,GAC9C,IAAKrS,IAAUA,EAAM1sD,UACnB,OAAO0sD,EAET,IAAImsK,EAAaJ,GAAmBriP,EAAQs2E,EAAOqS,GACnD,OAAI85J,GAGGnsK,GAELosK,GAAc,SAAU1iP,EAAQ0pB,GAClC1pB,EAAOuL,UAAUwf,OAAOrB,GACxBs4N,GAAeH,oBAAoB7hP,EAAQA,EAAOuL,UAAUugB,WAG1D62N,GAAsB,SAAU/2O,EAAKN,GACnCm9C,GAAS/9B,OAAOpf,IAA8B,IAArBA,EAAKvG,KAAKhC,QACrC6I,EAAI+I,OAAOrJ,IAGXs3O,GAA4B,SAAU5iP,EAAQs2E,EAAOhrE,EAAM6B,EAAWukL,EAASmxD,GACjF,IAAIJ,EAAaN,GAAUh1O,EAAWnN,EAAQ6iP,EAAkBr3O,SAASkmL,GAAUA,GAAS,GAC5F,GAAIp7G,EAAM1sD,UAAW,CACnB,IAAIgmN,EAAct5J,EAAMztB,aACpB6oI,EACFk+C,EAAYtlN,OAAOm4N,EAAW34N,eAAgB24N,EAAWx4N,aAEzD2lN,EAAYvlN,SAASo4N,EAAWz5L,aAAcy5L,EAAWv4N,WAE3D0lN,EAAYrwJ,sBAEZjJ,EAAMiJ,iBAIR,OAFAv/E,EAAOuL,UAAUwf,OAAO03N,GACxBE,GAAoB3iP,EAAO4L,IAAKN,IACzB,GAELw3O,GAAwB,SAAU9iP,EAAQ0xL,GAC5C,IAAIp7G,EAAQt2E,EAAOuL,UAAUugB,SAC7B,IAAK28B,GAAS/9B,OAAO4rD,EAAMowJ,yBACzB,OAAO,EAET,IAAIv5N,EAAYukL,EAAUqiC,GAAW2H,SAAW3H,GAAW8H,UACvDoI,EAAcrI,GAAY57N,EAAO0T,WACjCqvO,EAA6BvnO,EAAMk/M,GAAwBuJ,EAAYt3M,MACvEq2N,EAA6BxnO,EAAMk/M,GAAwBuJ,EAAY/nG,MACvE+mH,EAAevxD,EAAUqxD,EAA6BC,EACtDE,EAAiCxxD,EAAUq/C,GAA+BC,GAC1E5d,EAAgBkH,GAA2BntN,EAAWnN,EAAO0T,UAAW4iE,GACxE6sK,EAAoB/X,GAAYH,kBAAkBv5C,EAASuxD,EAAa7vB,IAC5E,IAAK+vB,EACH,OAAO,EACF,GAAID,EAA+BC,GACxC,OAAOP,GAA0B5iP,EAAQs2E,EAAO88I,EAAc5nN,UAAW2B,EAAWukL,EAASyxD,GAE/F,IAAIN,EAAoBI,EAAaE,GACrC,SAAIN,GAAqBK,EAA+BL,IAClDjoB,GAAsBuoB,EAAmBN,KACpCD,GAA0B5iP,EAAQs2E,EAAO88I,EAAc5nN,UAAW2B,EAAWukL,EAASmxD,IAK/FO,GAAoB,SAAUpjP,EAAQ0xL,GACxC,OAAOoxD,GAAsB9iP,EAAQ0xL,IAEnC2xD,GAAoB,CAAEljL,gBAAiBijL,IAEvCE,GAAgB,SAAUtjP,EAAQwgE,GACpCxgE,EAAOmP,SAASsH,YAAY+pD,GAAS,EAAO,OAE1C+iL,GAAgB,SAAUvjP,GACxBo1O,GAAUj1K,gBAAgBngE,GAAQ,IAE3BqjP,GAAkBljL,gBAAgBngE,GAAQ,IAE1Cg6O,GAAqB75K,gBAAgBngE,GAAQ,IAE7CovO,GAAoBjvK,gBAAgBngE,GAAQ,IAE5C09O,GAAYv9K,gBAAgBngE,IAE5B8vO,GAAiB3vK,gBAAgBngE,GAAQ,IAEzCghP,GAAmB7gL,gBAAgBngE,GAAQ,KAGpDsjP,GAActjP,EAAQ,UACtBksO,GAAYV,cAAcxrO,KAG1BwjP,GAAuB,SAAUxjP,GAC/Bo1O,GAAUj1K,gBAAgBngE,GAAQ,IAE3BqjP,GAAkBljL,gBAAgBngE,GAAQ,IAE1Cg6O,GAAqB75K,gBAAgBngE,GAAQ,IAE7CovO,GAAoBjvK,gBAAgBngE,GAAQ,IAE5C09O,GAAYv9K,gBAAgBngE,IAE5B8vO,GAAiB3vK,gBAAgBngE,GAAQ,IAEzCghP,GAAmB7gL,gBAAgBngE,GAAQ,IAGpDsjP,GAActjP,EAAQ,kBAGtByjP,GAAiB,CACnBF,cAAeA,GACfC,qBAAsBA,IAGpBE,GAAuB,SAAU7pC,EAAUtD,EAAS3uM,GACtD,IAAI+7O,EAAc,SAAU/7O,GAC1B,OAAO8gJ,GAAO9gJ,EAAKiyM,IAEjBvwD,EAAS,SAAU1hJ,GACrB,OAAOwU,GAAGywC,GAAQN,QAAQgqJ,GAAU3uM,IAEtC,OAAOqjJ,GAAQp+F,GAAQN,QAAQ3kD,IAAM,SAAUA,GAC7C,OAAO+7O,EAAY/7O,GAAK6U,WACvB6sI,GAAQlsI,KAAKumO,IAEdC,GAAU,SAAUtmP,EAAQumP,GAC9B,IAAIC,EAASxjP,KAAK0/B,IAAI,GAAI6jN,GAC1B,OAAOvjP,KAAKu9B,MAAMvgC,EAASwmP,GAAUA,GAEnCC,GAAO,SAAUC,EAAUH,GAC7B,MAAI,aAAa7/O,KAAKggP,GACbJ,GAAiC,GAAzBllP,SAASslP,EAAU,IAAW,GAAIH,GAAa,GAAK,KAE9DG,GAELC,GAAsB,SAAUC,GAClC,OAAOA,EAAWriP,QAAQ,YAAa,IAAIA,QAAQ,QAAS,MAE1DsiP,GAAsB,SAAUtqC,EAAUjyM,GAC5C,OAAOkW,EAAO5X,KAAKujN,GAAWjpN,IAAI24C,SAASvxC,EAAKiyM,GAAU,KAExDuqC,GAAc,SAAUvqC,GAC1B,OAAO,SAAUtD,EAAS3uM,GACxB,OAAOkW,EAAO5X,KAAK0B,GAAKhG,IAAIirD,GAAQN,SAASh+C,OAAOumD,IAAW13C,MAAK,SAAUxZ,GAC5E,OAAO8/O,GAAqB7pC,EAAUtD,EAAS3yM,EAAQgI,OAAOsR,GAAGinO,GAAoBtqC,EAAUj2M,EAAQgI,WACtG8Q,MAAM,MAGT2nO,GAAW,CACbC,YAAaF,GAAY,aACzBG,cAAeh+F,EAAQ09F,GAAqBG,GAAY,gBACxDL,KAAMA,IAGJS,GAAwB,SAAUxkP,GACpC,OAAO28N,GAAYC,gBAAgB58N,EAAO0T,WAAW9R,KAAI,SAAUi1L,GACjE,IAAIhtK,EAAYgtK,EAAMhtK,YACtB,OAAO4+B,GAAS/9B,OAAOb,GAAaA,EAAU3lB,WAAa2lB,MAG3D46N,GAAuB,SAAU/6N,EAAK9mB,GACxC,OAAO8mB,EAAII,iBAAmBlnB,GAA4B,IAApB8mB,EAAIO,aAExCy6N,GAAkB,SAAU1kP,GAC9B,OAAO8d,EAAO5X,KAAKlG,EAAOuL,UAAUugB,UAAU1O,MAAK,SAAUsM,GAC3D,IAAI9mB,EAAO5C,EAAO0T,UAClB,OAAO+wO,GAAqB/6N,EAAK9mB,GAAQkb,EAAO5B,OAAS4B,EAAO5X,KAAKlG,EAAOuL,UAAU4I,UAAS,QAG/FwwO,GAAqB,SAAU3kP,EAAQX,GACzC,GAAI,aAAa2E,KAAK3E,GAAQ,CAC5B,IAAIulP,EAAiBlmP,SAASW,EAAO,IACrC,GAAIulP,GAAkB,GAAKA,GAAkB,EAAG,CAC9C,IAAIC,EAAYhkP,GAASipO,mBAAmB9pO,GACxC8kP,EAAcjkP,GAASkpO,mBAAmB/pO,GAC9C,OAAI8kP,EACKA,EAAYF,EAAiB,IAAMvlP,EAEnCwlP,EAAUD,EAAiB,IAAMvlP,EAG1C,OAAOA,EAGT,OAAOA,GAGP0lP,GAAiB,SAAU/kP,EAAQX,GACrCW,EAAOkO,UAAUC,OAAO,WAAY,CAAE9O,MAAOslP,GAAmB3kP,EAAQX,KACxEW,EAAOyU,eAELuwO,GAAgB,SAAUhlP,GAC5B,OAAO0kP,GAAgB1kP,GAAQwc,MAAK,WAClC,OAAOgoO,GAAsBxkP,GAAQ4B,KAAI,SAAUymO,GACjD,OAAOgc,GAASE,cAAcvkP,EAAO0T,UAAW20N,MAC/C3rN,MAAM,OACR,SAAU2rN,GACX,OAAOgc,GAASE,cAAcvkP,EAAO0T,UAAW20N,OAGhD4c,GAAiB,SAAUjlP,EAAQX,GACrCW,EAAOkO,UAAUC,OAAO,WAAY,CAAE9O,MAAOslP,GAAmB3kP,EAAQX,KACxEW,EAAOyU,eAELywO,GAAgB,SAAUllP,GAC5B,OAAO0kP,GAAgB1kP,GAAQwc,MAAK,WAClC,OAAOgoO,GAAsBxkP,GAAQ4B,KAAI,SAAUymO,GACjD,OAAOgc,GAASC,YAAYtkP,EAAO0T,UAAW20N,MAC7C3rN,MAAM,OACR,SAAU2rN,GACX,OAAOgc,GAASC,YAAYtkP,EAAO0T,UAAW20N,OAI9C8c,GAAS,SAAUC,EAAMjvB,GAC3B,OAAOivB,GAAQjvB,GAASivB,EAAKt7N,iBAAmBqsM,EAAKrsM,gBAAkBs7N,EAAKn7N,cAAgBksM,EAAKlsM,aAAiBm7N,EAAKp8L,eAAiBmtK,EAAKntK,cAAgBo8L,EAAKl7N,YAAcisM,EAAKjsM,WAEnLm7N,GAAe,CAAErmB,KAAMmmB,IAEvBG,GAAa,SAAUh6O,EAAM+9D,EAAUp7C,GACzC,MAAO3iB,GAAQA,IAAS+9D,EAAU,CAChC,GAAIp7C,EAAU3iB,GACZ,OAAOA,EAETA,EAAOA,EAAKpH,WAEd,OAAO,MAELqhP,GAAY,SAAUj6O,EAAM+9D,EAAUp7C,GACxC,OAAiD,OAA1Cq3N,GAAWh6O,EAAM+9D,EAAUp7C,IAEhCu3N,GAAoB,SAAUl6O,EAAM+9D,EAAUprE,GAChD,OAAOsnP,GAAUj6O,EAAM+9D,GAAU,SAAU/9D,GACzC,OAAOA,EAAKnH,WAAalG,MAGzBwnP,GAAY,SAAUn6O,GACxB,OAAOA,GAA0B,UAAlBA,EAAKnH,UAElBuhP,GAAgB,SAAUp6O,GAC5B,OAAOA,GAAQ,oBAAoBtH,KAAKsH,EAAKnH,WAE3CwhP,GAA0B,SAAUr6O,EAAM+9D,GAC5C,OAAOolJ,GAAiBnjN,KAAoD,IAA3Ci6O,GAAUj6O,EAAM+9D,EAAUqtJ,KAEzDkvB,GAAmB,SAAUh6O,EAAKN,EAAMg8B,GAC1C,IAAI5a,EAAS,IAAI0rL,GAAW9sM,EAAMM,EAAIoL,UAAU1L,EAAKpH,WAAY0H,EAAIs8C,UAAYt8C,EAAI06C,WACrF,MAAOh7C,EAAOohB,EAAO4a,EAAO,OAAS,UACnC,GAAImhB,GAASZ,KAAKv8C,GAChB,OAAO,GAITu6O,GAAa,SAAUv6O,EAAMrN,GAC/B,OAAOqN,EAAK+8C,iBAAmB/8C,EAAK+8C,gBAAgBlkD,WAAalG,GAE/D6nP,GAAgC,SAAUz4O,EAAM/B,GAClD,MAAOA,GAAQA,IAAS+B,EAAM,CAC5B,GAAIo7C,GAAS60B,uBAAuBhyE,GAClC,OAAO,EAETA,EAAOA,EAAKpH,WAEd,OAAO,GAEL6hP,GAAuB,SAAUn6O,EAAKo6O,EAAap8N,EAAW0d,EAAM00B,GACtE,IAAItvC,EAAQu5N,EAAmBC,EAE3B56O,EADA+B,EAAOzB,EAAI06C,UAEXg5J,EAAsB1zM,EAAIy1C,OAAOod,sBAErC,GADAynL,EAAuBt6O,EAAIoL,UAAUglD,EAAU93D,WAAY0H,EAAIs8C,UAAY76C,EACvEi6B,GAAQmhB,GAASZ,KAAKmU,IAAcgqL,GAAep6O,EAAIk2C,QAAQokM,GACjE,OAAOpoO,EAAOH,KAAK61M,GAAcx3J,EAAU93D,WAAY0H,EAAI69C,UAAUuS,KAEvEtvC,EAAS,IAAI0rL,GAAWp8I,EAAWkqL,GACnC,MAAO56O,EAAOohB,EAAO4a,EAAO,OAAS,UAAW,CAC9C,GAA2C,UAAvC17B,EAAI29M,yBAAyBj+M,IAAqBq6O,GAAwBr6O,EAAM+B,GAClF,OAAOyQ,EAAO5B,OAEhB,GAAIusC,GAAS/9B,OAAOpf,IAASA,EAAKgxH,UAAUv5H,OAAS,EACnD,OAA2C,IAAvCyiP,GAAkBl6O,EAAM+B,EAAM,KACzByQ,EAAOH,KAAK61M,GAAcloN,EAAMg8B,EAAOh8B,EAAKgxH,UAAUv5H,OAAS,IAEjE+a,EAAO5B,OAEhB,GAAItQ,EAAIs8C,QAAQ58C,IAASg0M,EAAoBh0M,EAAKnH,SAAS+f,eACzD,OAAOpG,EAAO5B,OAEhB+pO,EAAoB36O,EAEtB,OAAIse,GAAaq8N,EACRnoO,EAAOH,KAAK61M,GAAcyyB,EAAmB,IAE/CnoO,EAAO5B,QAEZiqO,GAAoB,SAAUv6O,EAAKge,EAAW1B,EAAOwB,GACvD,IAAIG,EAAW7rB,EAAQ0uB,EAEnBphB,EAAMg0M,EACN8mC,EAAeJ,EAFf34O,EAAOzB,EAAI06C,UAEiBvF,GAAa,EAM7C,GALAl3B,EAAYH,GAAKxB,EAAQ,QAAU,OAAS,aAC5ClqB,EAAS0rB,GAAKxB,EAAQ,QAAU,OAAS,UACzC89N,EAAcv9L,GAASqM,UAAUjrC,IAAc7rB,IAAW6rB,EAAUvS,WAAWvU,OAC/Eu8M,EAAsB1zM,EAAIy1C,OAAOod,sBACjC2nL,EAAgBl+N,EACZumM,GAAiB5kM,GACnB,OAAO/L,EAAO5B,OAShB,GAPIusC,GAASqM,UAAUjrC,IAAc7rB,EAAS6rB,EAAUvS,WAAWvU,OAAS,IAC1EqjP,GAAgB,GAEd39L,GAAS2xJ,WAAWvwL,KACtBA,EAAYxc,EACZrP,EAAS,GAEP6rB,IAAcxc,EAAM,CACtB,GAAI+4O,IACF96O,EAAOue,EAAUvS,WAAWtZ,EAAS,EAAIA,EAAS,EAAI,GAClDsN,GAAM,CACR,GAAImjN,GAAiBnjN,GACnB,OAAOwS,EAAO5B,OAEhB,GAAIojM,EAAoBh0M,EAAKnH,WAAashP,GAAUn6O,GAClD,OAAOwS,EAAO5B,OAIpB,GAAI2N,EAAUy/B,gBAAiB,CAI7B,GAHAtrD,EAASsC,KAAKC,KAAK6lP,GAAiBpoP,EAAS,EAAIA,EAAS,EAAIA,EAAQ6rB,EAAUvS,WAAWvU,OAAS,GACpG8mB,EAAYA,EAAUvS,WAAWtZ,GACjCA,EAASyqD,GAAS/9B,OAAOb,IAAcm8N,EAAcn8N,EAAU9kB,KAAKhC,OAAS,GACxE6mB,GAAaC,IAAcxc,EAAK26C,WAAay9L,GAAU57N,GAC1D,OAAO/L,EAAO5B,OAEhB,GAAI4pO,GAA8Bz4O,EAAMwc,IAAc4kM,GAAiB5kM,GACrE,OAAO/L,EAAO5B,OAEhB,GAAI2N,EAAUy/B,kBAA4C,IAAzBm8L,GAAU57N,GAAsB,CAC/Dve,EAAOue,EACP6C,EAAS,IAAI0rL,GAAWvuL,EAAWxc,GACnC,EAAG,CACD,GAAIo7C,GAAS60B,uBAAuBhyE,IAASmjN,GAAiBnjN,GAAO,CACnEy1C,GAAa,EACb,MAEF,GAAI0H,GAAS/9B,OAAOpf,IAASA,EAAKgxH,UAAUv5H,OAAS,EAAG,CACtD/E,EAASooP,EAAgB,EAAI96O,EAAKgxH,UAAUv5H,OAC5C8mB,EAAYve,EACZy1C,GAAa,EACb,MAEF,GAAIu+J,EAAoBh0M,EAAKnH,SAAS+f,iBAAmBwhO,GAAcp6O,GAAO,CAC5EtN,EAAS4N,EAAI69C,UAAUn+C,GACvBue,EAAYve,EAAKpH,WACZkiP,GACHpoP,IAEF+iD,GAAa,EACb,aAEKz1C,EAAO86O,EAAgB15N,EAAOC,OAASD,EAAOwvG,UAiC7D,OA7BItyG,IACE6+B,GAAS/9B,OAAOb,IAAyB,IAAX7rB,GAChC+nP,GAAqBn6O,EAAKo6O,EAAap8N,GAAW,EAAMC,GAAWrb,MAAK,SAAUiqC,GAChF5uB,EAAY4uB,EAAI5uB,YAChB7rB,EAASy6C,EAAIz6C,SACb+iD,GAAa,KAGb0H,GAASqM,UAAUjrC,KACrBve,EAAOue,EAAUvS,WAAWtZ,GACvBsN,IACHA,EAAOue,EAAUvS,WAAWtZ,EAAS,KAEnCsN,IAAQm9C,GAASZ,KAAKv8C,IAAUu6O,GAAWv6O,EAAM,MAASs6O,GAAiBh6O,EAAKN,GAAM,IAAWs6O,GAAiBh6O,EAAKN,GAAM,IAC/Hy6O,GAAqBn6O,EAAKo6O,EAAap8N,GAAW,EAAMte,GAAMkD,MAAK,SAAUiqC,GAC3E5uB,EAAY4uB,EAAI5uB,YAChB7rB,EAASy6C,EAAIz6C,SACb+iD,GAAa,OAKjBqlM,IAAkBx8N,GAAa6+B,GAAS/9B,OAAOb,IAAc7rB,IAAW6rB,EAAUyyG,UAAUv5H,QAC9FgjP,GAAqBn6O,EAAKo6O,EAAap8N,GAAW,EAAOC,GAAWrb,MAAK,SAAUiqC,GACjF5uB,EAAY4uB,EAAI5uB,YAChB7rB,EAASy6C,EAAIz6C,SACb+iD,GAAa,KAGVA,EAAajjC,EAAOH,KAAK61M,GAAc3pM,EAAW7rB,IAAW8f,EAAO5B,QAEzEmqO,GAAc,SAAUz6O,EAAK8d,GAC/B,IAAIE,EAAYF,EAAIE,UAAW08N,EAAU58N,EAAIm/B,aACzCpiC,EAAW+sM,GAAcG,eAAejqM,GAc5C,OAbAy8N,GAAkBv6O,EAAKge,GAAW,EAAM08N,GAAS93O,MAAK,SAAUiqC,GACzD7uB,GAAc4pM,GAAczC,QAAQtqM,EAAUgyB,IACjD6tM,EAAQj8N,SAASouB,EAAI5uB,YAAa4uB,EAAIz6C,aAGrC4rB,GACHu8N,GAAkBv6O,EAAKge,GAAW,EAAO08N,GAAS93O,MAAK,SAAUiqC,GAC/D6tM,EAAQh8N,OAAOmuB,EAAI5uB,YAAa4uB,EAAIz6C,aAGpC4rB,GACF08N,EAAQx5N,UAAS,GAEZu4N,GAAarmB,KAAKt1M,EAAK48N,GAAWxoO,EAAO5B,OAAS4B,EAAOH,KAAK2oO,IAEnEC,GAAiB,CAAEtjJ,UAAWojJ,IAE9BG,GAAsB,SAAUnlM,EAAQx3B,EAAWg2C,GACrD,IACIv0D,EADAohB,EAAS,IAAI0rL,GAAWvuL,EAAWg2C,GAEnCy/I,EAAsBj+J,EAAOod,sBACjC,MAAOnzD,EAAOohB,EAAOC,OACnB,GAAI2yL,EAAoBh0M,EAAKnH,SAAS+f,gBAAkB5Y,EAAKvI,OAAS,EACpE,OAAO,GAIT0jP,GAAa,SAAU76O,EAAKL,EAAWm7O,GACzC,IAAIjyL,EAAS7oD,EAAIiE,OAAO,OAAQ,GAAI,UACpC62O,EAAMxiP,WAAW1B,aAAaiyD,EAAQiyL,GACtCn7O,EAAUo9E,eAAel0B,GACzB7oD,EAAI+I,OAAO8/C,IAETkyL,GAAoB,SAAU/6O,EAAKL,EAAWm7O,EAAOE,GACvD,IAAIl9N,EAAM9d,EAAIkf,YACT87N,GAIHl9N,EAAI41D,eAAeonK,GACnBh9N,EAAI+iK,aAAai6D,KAJjBh9N,EAAI6wC,cAAcmsL,GAClBh9N,EAAI8wC,YAAYksL,IAKlBn7O,EAAUwf,OAAOrB,IAEfm9N,GAAkB,SAAU7mP,EAAQ6E,GACtC,IAGI6hP,EACAE,EAJAr7O,EAAYvL,EAAOuL,UACnBK,EAAM5L,EAAO4L,IACb8d,EAAMne,EAAUugB,SAGpBy6N,GAAetjJ,UAAUr3F,EAAK8d,GAAKlb,MAAK,SAAU83O,GAChD58N,EAAIW,SAASi8N,EAAQx8N,eAAgBw8N,EAAQr8N,aAC7CP,EAAIY,OAAOg8N,EAAQt9L,aAAcs9L,EAAQp8N,cAE3C,IAAIlsB,EAAS0rB,EAAIO,YACbJ,EAAYH,EAAII,eACpB,GAA2B,IAAvBD,EAAUE,UAAkBF,EAAUy/B,gBAAiB,CACzD,IAAIw9L,EAA6B9oP,EAAS6rB,EAAUvS,WAAWvU,OAAS,EACxE8mB,EAAYA,EAAUvS,WAAWhX,KAAKC,IAAIvC,EAAQ6rB,EAAUvS,WAAWvU,OAAS,KAAO8mB,EAErF7rB,EADE8oP,GAAqD,IAAvBj9N,EAAUE,SACjCF,EAAUyyG,UAAUv5H,OAEpB,EAGb,IAAI88D,EAAcj0D,EAAIoL,UAAU6S,EAAWje,EAAIs8C,SAC3C6+L,EAAiBlnL,EAAcj0D,EAAIoL,UAAU6oD,EAAY37D,WAAY0H,EAAIs8C,SAAW,KACpF8+L,EAAqBD,EAAiBA,EAAe5iP,SAASy4D,cAAgB,GAC9EqqL,EAAepiP,GAAOA,EAAIy1C,QACH,OAAvB0sM,GAAgCC,IAClCpnL,EAAcknL,GAEZl9N,GAAoC,IAAvBA,EAAUE,UAAkB/rB,GAAU6rB,EAAUyyG,UAAUv5H,SACpEyjP,GAAoBxmP,EAAOqhD,OAAQx3B,EAAWg2C,KACjD6mL,EAAQ96O,EAAIiE,OAAO,MACnB6Z,EAAIwD,WAAWw5N,GACfh9N,EAAI6wC,cAAcmsL,GAClBh9N,EAAI8wC,YAAYksL,GAChBE,GAAU,IAGdF,EAAQ96O,EAAIiE,OAAO,MACnBslN,GAAgBvpN,EAAK8d,EAAKg9N,GAC1BD,GAAW76O,EAAKL,EAAWm7O,GAC3BC,GAAkB/6O,EAAKL,EAAWm7O,EAAOE,GACzC5mP,EAAO0L,YAAY3E,OAEjBmgP,GAAiB,SAAUlnP,EAAQ4P,GACrC,IAAI6sE,EAAK5vB,GAAQL,QAAQ,MACzB9pD,GAAOmqD,GAAQN,QAAQ38C,GAAS6sE,GAChCz8E,EAAO0L,YAAY3E,OAEjBogP,GAAgB,SAAUnnP,EAAQ4P,GAC/Bw3O,GAAWpnP,EAAO0T,UAAW9D,IAChCrJ,GAAMsmD,GAAQN,QAAQ38C,GAASi9C,GAAQL,QAAQ,OAEjD,IAAIiwB,EAAK5vB,GAAQL,QAAQ,MACzBjmD,GAAMsmD,GAAQN,QAAQ38C,GAAS6sE,GAC/BgqK,GAAWzmP,EAAO4L,IAAK5L,EAAOuL,UAAWkxE,EAAG7wE,OAC5C+6O,GAAkB3mP,EAAO4L,IAAK5L,EAAOuL,UAAWkxE,EAAG7wE,OAAO,GAC1D5L,EAAO0L,YAAY3E,OAEjBsgP,GAAe,SAAU5uM,GAC3B,OAAOgQ,GAASZ,KAAKpP,EAAIjtC,YAEvB47O,GAAa,SAAU/9K,EAAUrN,GACnC,QAAIqrL,GAAarzB,GAAgBztN,MAAMy1D,KAG9B2gK,GAAYF,aAAapzJ,EAAU2qJ,GAAgBztN,MAAMy1D,IAAYp6D,KAAI,SAAU62C,GACxF,OAAOgQ,GAASZ,KAAKpP,EAAIjtC,cACxBkR,OAAM,IAGT4qO,GAAe,SAAU1/O,GAC3B,OAAOA,GAAwB,MAAjBA,EAAIzD,UAAoB,SAAUyD,GAE9C2/O,GAAiB,SAAUriM,GAC7B,OAAOA,EAAS1oC,KAAK/R,GAAS,GAAQ68O,GAAcA,GAAc78O,GAAS,KAEzE+8O,GAA2B,SAAUxnP,GACvC,IAAI0qO,EAAiBlvN,EAAM4vN,GAAYV,eAAgB1qO,GACnD88C,EAAWk3K,GAAgBL,eAAe3zN,EAAOuL,UAAUugB,UAC/D,OAAO8rN,GAAiBf,aAAanM,EAAgB1qO,EAAO0T,UAAWopC,GAAUvuC,OAAOg5O,KAEtFE,GAAwB,SAAUznP,EAAQklD,GAC5CA,EAAS1oC,KAAKjB,EAAMC,EAAM0rO,GAAgBlnP,GAASwb,EAAM2rO,GAAennP,GAASub,IAE/E5Y,GAAS,SAAU3C,EAAQ6E,GAC7B,IAAI6iP,EAAiBF,GAAyBxnP,GAC1C0nP,EAAejrO,SACjBirO,EAAel5O,KAAKgN,EAAMisO,GAAuBznP,IAEjD6mP,GAAgB7mP,EAAQ6E,IAGxB8iP,GAAW,CAAEhlP,OAAQA,IAErBooL,GAAW39H,GAAU,QAAS,UAAW,SAAU,WACnD49H,GAAW,CAAEn7K,OAAQk7K,IAErB1vB,GAAMO,GAAInO,SAAS,CACrB,CAAE/qJ,OAAQ,CAAC,YACX,CACE4L,GAAI,CACF,UACA,WAGJ,CAAE/H,MAAO,CAAC,cAERy1J,GAAO,SAAUprF,EAASu6G,EAAUC,EAAMC,GAC5C,OAAOz6G,EAAQp0D,KAAK2uK,EAAUC,EAAMC,IAElCl3K,GAAW,SAAUm3K,GACvB,OAAOA,EAAK9uK,KAAKod,EAAUA,EAAUA,IAEnCy6J,GAAWh5B,GAAI34J,OACf4L,GAAK+sJ,GAAI/sJ,GACTwhL,GAAUz0B,GAAI90J,MACdklL,GAAO,CACT/oL,OAAQ2xL,GACR/lL,GAAIA,GACJ/H,MAAOupL,GACP9zB,KAAMA,GACN7nJ,SAAUA,IAGRu2K,GAAQ9uB,GAAInO,SAAS,CACvB,CAAEk+B,SAAU,CAAC,QACb,CACEC,SAAU,CACR,YACA,eAGJ,CACEC,MAAO,CACL,QACA,UACA,SACA,cAIFC,GAAiB,SAAUC,GAC7B,OAAOrB,GAAMmB,MAAME,EAAS7jK,QAAS6jK,EAASC,UAAWD,EAASprG,SAAUorG,EAASE,YAEnFC,GAAa,SAAU3gL,GACzB,OAAOA,EAAU9M,MAAM,CACrBktL,SAAU,SAAUjiK,GAClB,OAAOmjC,GAAQN,QAAQ7iC,EAAII,iBAE7B8hK,SAAU,SAAUO,EAAWC,GAC7B,OAAOX,GAAKt3K,SAASg4K,IAEvBN,MAAO,SAAU3jK,EAAO8jK,EAASrrG,EAAQsrG,GACvC,OAAO/jK,MAITyjK,GAAWjB,GAAMiB,SACjBC,GAAWlB,GAAMkB,SACjBC,GAAQnB,GAAMmB,MACdQ,GAAS,SAAU9gL,GACrB,IAAI2c,EAAQgkK,GAAW3gL,GACvB,OAAO89I,GAAYnhI,IAEjBouD,GAAQ00G,GAASn7K,OACjBu8C,GAAY,CACdu/H,SAAUA,GACVC,SAAUA,GACVC,MAAOA,GACPC,eAAgBA,GAChBO,OAAQA,GACR/1G,MAAOA,IAGLsxK,GAAY/0L,GAAoBvE,SAAS0C,QACzCv3B,GAAQ,SAAUz7B,EAAQ4F,GAC5B,IAAIgpB,EAAMlC,GAAO9mB,GAAW06J,GAAM16J,GAASb,OAASoQ,GAASvP,GAASb,OAAS,EAC/E,OAAI/E,EAAS4uB,EACJA,EACE5uB,EAAS,EACX,EAEFA,GAEL6pP,GAAe,SAAUn+N,GAC3B,OAAO0iC,GAAUkqB,MAAM5sD,EAAIxB,QAASuR,GAAM/P,EAAIsiK,UAAWtiK,EAAIxB,SAAUwB,EAAIi3D,SAAUlnD,GAAM/P,EAAIuiK,UAAWviK,EAAIi3D,YAE5GmnK,GAAe,SAAUllP,EAAMgF,GACjC,OAAQ6gD,GAAS8wJ,iBAAiB3xM,EAAIgE,SAAWiqM,GAAWjzM,EAAMgF,IAAQwU,GAAGxZ,EAAMgF,KAEjFmgP,GAAc,SAAUnlP,GAC1B,OAAO,SAAU8mB,GACf,OAAOo+N,GAAallP,EAAM8mB,EAAIxB,UAAY4/N,GAAallP,EAAM8mB,EAAIi3D,YAGjEqnK,GAAc,SAAUhoP,GAC1B,OAAyB,IAAlBA,EAAO4P,QAAmBg4O,GAAUr4L,QAEzC04L,GAA8B,SAAUvpO,GAC1C,OAAO0tC,GAAUkqB,MAAMzpB,GAAQN,QAAQ7tC,EAAEoL,gBAAiBpL,EAAEuL,YAAa4iC,GAAQN,QAAQ7tC,EAAEsqC,cAAetqC,EAAEwL,YAE1G0mK,GAAY,SAAU1mJ,GACxB,IAAI3+B,EAAY2+B,EAAI+lJ,eAChBvmK,EAAOne,GAAsC,IAAzBA,EAAUslL,WAAmC/yK,EAAO5X,KAAKqF,EAAUwlL,WAAW,IAAjDjzK,EAAO5B,OAC5D,OAAOwN,EAAI9nB,IAAIqmP,KAEbC,GAAgB,SAAUtlP,GAC5B,IAAIsnC,EAAMm/G,GAAYzmJ,GACtB,OAAOguL,GAAU1mJ,EAAIt+B,OAAO2C,OAAOw5O,GAAYnlP,KAE7C2gB,GAAW,SAAU3gB,EAAMumD,GAC7B,OAAOrrC,EAAO5X,KAAKijD,GAAU56C,OAAOw5O,GAAYnlP,IAAOhB,IAAIimP,KAEzDM,GAAsB,SAAUh/L,GAClC,IAAIz/B,EAAMxqB,EAAWwE,SAAS0mB,cAC9B,IAGE,OAFAV,EAAIW,SAAS8+B,EAASjhC,QAAQtc,MAAOu9C,EAAS6iI,WAC9CtiK,EAAIY,OAAO6+B,EAASw3B,SAAS/0E,MAAOu9C,EAAS8iI,WACtCnuK,EAAOH,KAAK+L,GACnB,MAAOroB,GACP,OAAOyc,EAAO5B,SAGdw/E,GAAQ,SAAU17F,GACpB,IAAIooP,EAAcJ,GAAYhoP,GAAUkoP,GAAcr7L,GAAQN,QAAQvsD,EAAO0T,YAAcoK,EAAO5B,OAClGlc,EAAOmpD,SAAWi/L,EAAY3rO,SAAW2rO,EAAcpoP,EAAOmpD,UAE5Dk/L,GAAc,SAAUroP,EAAQ0pB,GAClC,IAAI9mB,EAAOiqD,GAAQN,QAAQvsD,EAAO0T,WAC9B4iE,EAAQ0xK,GAAYhoP,GAAU8d,EAAO5X,KAAKwjB,GAAO5L,EAAO5B,OACxDksO,EAAc9xK,EAAM10E,IAAIqmP,IAA6B15O,OAAOw5O,GAAYnlP,IAC5E5C,EAAOmpD,SAAWi/L,EAAY3rO,SAAW2rO,EAAcpoP,EAAOmpD,UAE5Dr9B,GAAS,SAAU9rB,GACrB,IAAImpD,EAAWnpD,EAAOmpD,SAAWnpD,EAAOmpD,SAAWrrC,EAAO5B,OAC1D,OAAOitC,EAAS/rC,KAAK5B,EAAM+H,GAAUspC,GAAQN,QAAQvsD,EAAO0T,aAAa0J,KAAK+qO,KAE5EG,GAAU,SAAUtoP,GACtB8rB,GAAO9rB,GAAQwO,MAAK,SAAUkb,GAC5B1pB,EAAOuL,UAAUwf,OAAOrB,OAGxB6+N,GAAoB,CACtB7sJ,MAAOA,GACP2sJ,YAAaA,GACbz3D,UAAWA,GACX03D,QAASA,GACTx8N,OAAQA,GACRovC,YAAagtL,GACb3kO,SAAUA,IAGRilO,GAAgB,SAAU58O,EAAK40D,EAASioL,EAAWppP,EAAO4jI,EAAMr/H,GAClE,GAAwC,UAApCgI,EAAI+wD,mBAAmB/4D,GAA3B,CAGA,IAAI8kP,EAAkBD,EAAY,SAAW,UAG7C,GAFAC,EAAuC,UAArB9kP,EAAQO,SAAuB,SAAWukP,EAC5DA,GAAgE,QAA7C98O,EAAIutC,SAASv1C,EAAS,aAAa,GAAkB,QAAU,OAClE,YAAZ48D,EAAuB,CACzB,IAAIkI,EAAapoE,KAAKssB,IAAI,EAAGluB,SAASkF,EAAQ4F,MAAMk/O,IAAoB,EAAG,IAAMrpP,GACjFuM,EAAI6vD,SAAS73D,EAAS8kP,EAAiBhgL,EAAaA,EAAau6D,EAAO,QACnE,CACDv6D,EAAahqE,SAASkF,EAAQ4F,MAAMk/O,IAAoB,EAAG,IAAMrpP,EAAQ4jI,EAC7Er3H,EAAI6vD,SAAS73D,EAAS8kP,EAAiBhgL,MAGvCigL,GAAkB,SAAU52O,GAC9B,OAAOo6C,GAAOp6C,IAAO6kK,GAAW7kK,IAE9B62O,GAAwB,SAAU72O,GACpC,OAAOhO,GAAOgO,GAAInQ,IAAI+mP,IAAiBjsO,OAAM,IAE3CmsO,GAAoB,SAAU7oP,GAChC,OAAOuO,EAAO3M,EAAI5B,EAAOuL,UAAUw/C,oBAAqB8B,GAAQN,UAAU,SAAUx6C,GAClF,OAAQ42O,GAAgB52O,KAAQ62O,GAAsB72O,OAGtDkiB,GAAS,SAAUj0B,EAAQwgE,GAC7B,IAAIvgE,EAAWD,EAAOC,SAAU2L,EAAM5L,EAAO4L,IAAKL,EAAYvL,EAAOuL,UAAW2C,EAAYlO,EAAOkO,UAC/F46O,EAAa,YAAY9rP,KAAKiD,EAAS23D,aAAa,GACpDmxL,EAAcrqP,SAASuB,EAAS23D,YAAa,IAC7C6wL,EAAYzoP,EAAOW,SAAS,qBAAqB,GAChDX,EAAOgpP,kBAAkB,wBAA2BhpP,EAAOgpP,kBAAkB,sBAC3E/oP,EAASi5D,mBAAsBttD,EAAIoL,UAAUzL,EAAUC,UAAWI,EAAIs8C,UACzEh6C,EAAUrH,MAAM,OAGpB2H,EAAKq6O,GAAkB7oP,IAAS,SAAU6sB,GACxC27N,GAAc58O,EAAK40D,EAASioL,EAAWM,EAAaD,EAAYj8N,EAAMjhB,WAItEq9O,GAASrpP,GAAM4O,KAAM06O,GAAWtpP,GAAMyC,OACtC8mP,GAAQvpP,GAAMgC,IAAKwnP,GAAYxpP,GAAMqyC,QACzC,SAASo3M,GAAgBrpP,GACvB,IAAI4L,EAAKL,EAAW2C,EAMYi7C,EAL5BmgM,EAAW,CACb1lN,MAAO,GACP5mC,KAAM,GACNqC,MAAO,IAELY,EAAWD,EAAOC,SACtBD,EAAOsO,GAAG,WAAW,WACnB1C,EAAM5L,EAAO4L,IACbL,EAAYvL,EAAOuL,UACnBtL,EAAWD,EAAOC,SAClBiO,EAAYlO,EAAOkO,aAErB,IAAIuI,EAAc,SAAU+pD,EAASxpB,EAAI33C,EAAOmH,GAC9C,IAAIo7H,EAAM2nH,EAAe3lN,GAAQ,EACjC,IAAI5jC,EAAO6jC,QAAX,CAaA,GAVK,mEAAmE7/B,KAAKw8D,IAAch6D,GAASA,EAAKgjP,WAGvGjB,GAAkBD,QAAQtoP,GAF1BA,EAAOwU,QAIThO,EAAOxG,EAAO8lC,KAAK,oBAAqB,CACtC06B,QAASA,EACTxpB,GAAIA,EACJ33C,MAAOA,IAELmH,EAAKujE,qBACP,OAAO,EAGT,GADAw/K,EAAgB/oL,EAAQt8C,cACpB09G,EAAO0nH,EAAStsP,KAAKusP,GAOvB,OANA3nH,EAAK2nH,EAAevyM,EAAI33C,GACxBW,EAAO8lC,KAAK,cAAe,CACzB06B,QAASA,EACTxpB,GAAIA,EACJ33C,MAAOA,KAEF,EAaT,GAXA4pP,GAAOjpP,EAAOsD,SAAS,SAAUw/B,GAC/B,GAAIA,EAAErsB,aAAeqsB,EAAErsB,YAAY+pD,EAASxpB,EAAI33C,GAO9C,OANAW,EAAO8lC,KAAK,cAAe,CACzB06B,QAASA,EACTxpB,GAAIA,EACJ33C,MAAOA,IAETukC,GAAQ,GACD,KAGPA,EACF,OAAOA,EAET,GAAI5jC,EAAOypP,OAASzpP,EAAOypP,MAAMhzO,aAAezW,EAAOypP,MAAMhzO,YAAY+pD,EAASxpB,EAAI33C,GAMpF,OALAW,EAAO8lC,KAAK,cAAe,CACzB06B,QAASA,EACTxpB,GAAIA,EACJ33C,MAAOA,KAEF,EAET,IACEukC,EAAQ5jC,EAAOmP,SAASsH,YAAY+pD,EAASxpB,EAAI33C,GACjD,MAAOw1B,IAET,QAAI+O,IACF5jC,EAAO8lC,KAAK,cAAe,CACzB06B,QAASA,EACTxpB,GAAIA,EACJ33C,MAAOA,KAEF,KAIP2pP,EAAoB,SAAUxoL,GAChC,IAAIohE,EACJ,IAAI5hI,EAAOkjE,OAAOolJ,aAActoN,EAAO6jC,QAAvC,CAIA,GADA28B,EAAUA,EAAQt8C,cACd09G,EAAO0nH,EAAS1lN,MAAM48B,GACxB,OAAOohE,EAAKphE,GAEd,IACE,OAAOxgE,EAAOmP,SAAS65O,kBAAkBxoL,GACzC,MAAO3rC,IAET,OAAO,IAEL60N,EAAoB,SAAUlpL,GAChC,IAAIohE,EACJ,IAAI5hI,EAAOkjE,OAAOolJ,aAActoN,EAAO6jC,QAAvC,CAIA,GADA28B,EAAUA,EAAQt8C,cACd09G,EAAO0nH,EAASjqP,MAAMmhE,GACxB,OAAOohE,EAAKphE,GAEd,IACE,OAAOxgE,EAAOmP,SAASu6O,kBAAkBlpL,GACzC,MAAO3rC,OAGP80N,EAAc,SAAUC,EAAanoP,GACvCA,EAAOA,GAAQ,OACfwnP,GAAOW,GAAa,SAAUxmP,EAAUo9D,GACtCyoL,GAAOzoL,EAAQt8C,cAAclqB,MAAM,MAAM,SAAUwmE,GACjD8oL,EAAS7nP,GAAM++D,GAAWp9D,SAI5B4K,EAAa,SAAUwyD,EAASp9D,EAAUy/B,GAC5C29B,EAAUA,EAAQt8C,cAClBolO,EAAStsP,KAAKwjE,GAAW,SAAUA,EAASxpB,EAAI33C,EAAOmH,GACrD,OAAOpD,EAASlB,KAAK2gC,GAAS7iC,EAAQg3C,EAAI33C,EAAOmH,KAGjDqjP,EAAwB,SAAUrpL,GAEpC,GADAA,EAAUA,EAAQt8C,cACdolO,EAAStsP,KAAKwjE,GAChB,OAAO,EAET,IACE,OAAOxgE,EAAOmP,SAAS06O,sBAAsBrpL,GAC7C,MAAO3rC,IAET,OAAO,GAEL4rC,EAAuB,SAAUD,EAASp9D,EAAUy/B,GACtD29B,EAAUA,EAAQt8C,cAClBolO,EAAS1lN,MAAM48B,GAAW,WACxB,OAAOp9D,EAASlB,KAAK2gC,GAAS7iC,KAG9B8pP,EAAuB,SAAUtpL,EAASp9D,EAAUy/B,GACtD29B,EAAUA,EAAQt8C,cAClBolO,EAASjqP,MAAMmhE,GAAW,WACxB,OAAOp9D,EAASlB,KAAK2gC,GAAS7iC,KAG9B+pP,EAAmB,SAAUvpL,GAE/B,OADAA,EAAUA,EAAQt8C,gBACTolO,EAAStsP,KAAKwjE,IAEzB0oL,GAASvvP,KAAM,CACb8c,YAAaA,EACbuyO,kBAAmBA,EACnBU,kBAAmBA,EACnBG,sBAAuBA,EACvBF,YAAaA,EACb37O,WAAYA,EACZyyD,qBAAsBA,EACtBqpL,qBAAsBA,EACtBC,iBAAkBA,IAEpB,IAAIC,EAAoB,SAAUxpL,EAASxpB,EAAI33C,GAO7C,YANW4d,IAAP+5B,IACFA,GAAK,QAEO/5B,IAAV5d,IACFA,EAAQ,MAEHW,EAAOmP,SAASsH,YAAY+pD,EAASxpB,EAAI33C,IAE9C4qP,EAAgB,SAAUhsP,GAC5B,OAAOiQ,EAAUzP,MAAMR,IAErBisP,EAAe,SAAUjsP,EAAMoB,GACjC6O,EAAUC,OAAOlQ,EAAMoB,EAAQ,CAAEA,MAAOA,QAAU4d,GAClDjd,EAAOyU,eAEL01O,EAAiB,SAAU1oP,GAC7B0nD,EAAW59C,EAAU2vD,YAAYz5D,IAE/B2oP,EAAmB,WACrB7+O,EAAU4vD,eAAehS,IAE3BwgM,EAAY,CACV,uCAAwC,aAExC,kCAAmC,WACjC3pP,EAAO0L,YAAY3E,OAErB,iBAAkB,SAAUy5D,GAC1B,IACI22I,EADA/qL,EAAMpsB,EAAOmP,SAEjB,IACE66O,EAAkBxpL,GAClB,MAAO3rC,GACPsiL,GAAS,EAKX,GAHgB,UAAZ32I,GAAwBp0C,EAAIi+N,oBAAoB7pL,KAClD22I,GAAS,GAEPA,IAAW/qL,EAAIy9N,sBAAsBrpL,GAAU,CACjD,IAAI3jD,EAAM7c,EAAO3C,UAAU,sHACvBslM,GAAI9jL,MACNhC,EAAMA,EAAIhb,QAAQ,UAAW,OAE/B7B,EAAO4xC,oBAAoBjlC,KAAK,CAC9BrH,KAAMuX,EACNpb,KAAM,YAIZ,OAAU,WACR,GAAI8J,EAAU0C,cAAd,CACE,IAAIrG,EAAM5H,EAAO4L,IAAIoL,UAAUhX,EAAOuL,UAAU4I,WAAY,KACxDvM,GACF5H,EAAO4L,IAAI+I,OAAO/M,GAAK,QAI3BsG,EAAUyG,OAAO,SAEnB,iEAAkE,SAAU6rD,GAC1E,IAAIpzD,EAAQozD,EAAQ17C,UAAU,GAChB,SAAV1X,IACFA,EAAQ,WAEV67O,GAAO,4BAA4BjvP,MAAM,MAAM,SAAUiE,GACnDmP,IAAUnP,GACZiQ,EAAUyG,OAAO,QAAU1W,MAGjB,SAAVmP,GACF88O,EAAa,QAAU98O,IAG3B,wCAAyC,SAAUozD,GACjD,IAAIq1D,EAASy0H,EACbN,EAAkBxpL,GAClBq1D,EAAUjqH,EAAIoL,UAAUzL,EAAUC,UAAW,SACzCqqH,IACFy0H,EAAaz0H,EAAQ3xH,WACjB,2BAA2BF,KAAKsmP,EAAWnmP,YAC7CgmP,IACAv+O,EAAI5R,MAAMswP,EAAYz0H,GACtBu0H,OAIN,4DAA6D,SAAU5pL,GACrE0pL,EAAa1pL,IAEf,wBAAyB,SAAUA,EAASxpB,EAAI33C,GAC9C6qP,EAAa1pL,EAASnhE,IAExB,SAAY,SAAUmhE,EAASxpB,EAAI33C,GACjC0lP,GAAe/kP,EAAQX,IAEzB,SAAY,SAAUmhE,EAASxpB,EAAI33C,GACjC4lP,GAAejlP,EAAQX,IAEzB,aAAgB,SAAUmhE,GACxBtyD,EAAUyG,OAAO6rD,IAEnB,cAAiB,WACf0pL,EAAa,eAEf,YAAe,SAAU1pL,EAASxpB,EAAI33C,GACpC,OAAO6qP,EAAa7qP,GAAS,MAE/B,WAAc,WACZ,IAAI8pD,EAAW59C,EAAU2vD,cACzBl7D,EAAOyhD,WAAWzhD,EAAOuxB,cACzBhmB,EAAU4vD,eAAehS,IAE3B,cAAiB,SAAUqX,EAASxpB,EAAI33C,GACtC,IAAIiM,EAAOjM,GAASkM,EAAUC,UAC1BF,IAAStL,EAAO0T,YAClBy2O,IACAnqP,EAAO4L,IAAI+I,OAAOrJ,GAAM,GACxB8+O,MAGJ,mBAAsB,SAAU5pL,EAASxpB,EAAI33C,GAC3C,IAAI8R,EAAU,EACdvF,EAAIoL,UAAUzL,EAAUC,WAAW,SAAUF,GAC3C,GAAsB,IAAlBA,EAAKye,UAAkB5Y,MAAc9R,EAEvC,OADAkM,EAAUO,OAAOR,IACV,IAERtL,EAAO0T,YAEZ,cAAiB,SAAU8sD,EAASxpB,EAAI33C,GACtCkM,EAAUO,OAAOzM,IAEnB,iBAAoB,SAAUmhE,EAASxpB,EAAI33C,GACzCupO,GAAcvE,cAAcrkO,EAAQX,IAEtC,iBAAoB,SAAUmhE,EAASxpB,EAAI33C,GACzCkM,EAAUk2C,WAAW,mBACrB,IAAI//C,EAAU1B,EAAOuxB,aACrBvxB,EAAOyhD,WAAW//C,EAAQG,QAAQ,oBAAoB,WACpD,OAAOxC,OAGX,gBAAmB,SAAUmhE,EAASxpB,EAAI33C,GACxC6qP,EAAa7qP,IAEf,cAAiB,SAAUmhE,EAASxpB,EAAI33C,GACtCW,EAAOyhD,WAAWpiD,IAEpB,iBAAkB,SAAUmhE,GAC1BvsC,GAAOj0B,EAAQwgE,IAEjB,WAAc,aAEd,qBAAwB,WACtBxgE,EAAOyW,YAAY,oBAAoB,EAAO,WAEhD,mBAAsB,WACpBzW,EAAOuqP,WAAavqP,EAAOuqP,UAC3BvqP,EAAOm3C,aAET,kBAAqB,SAAUqpB,EAASxpB,EAAI33C,GAC1CW,EAAOyW,YAAY,oBAAoB,EAAOpX,EAAMwC,QAAQ,mBAAoB0J,EAAUgmB,WAAW,CAAEtd,OAAQ,YAEjH,cAAiB,SAAUusD,EAASxpB,EAAI33C,GACtC,IAAIooF,EACiB,kBAAVpoF,IACTA,EAAQ,CAAE0Q,KAAM1Q,IAElBooF,EAAS77E,EAAIoL,UAAUzL,EAAUC,UAAW,KAC5CnM,EAAM0Q,KAAO1Q,EAAM0Q,KAAKlO,QAAQ,IAAK,OAChC4lF,GAAWpoF,EAAM0Q,MACpB7B,EAAUyG,OAAO,QAEftV,EAAM0Q,MACR7B,EAAUrH,MAAM,OAAQxH,EAAOooF,IAGnC,UAAa,WACX,IAAI+iK,EAAc5+O,EAAIoL,UAAUzL,EAAU4I,WAAYs0C,GAASw/H,uBAC/D,GAAIuiE,EAAa,CACf,IAAI9gO,EAAM9d,EAAIkf,YACdpB,EAAI8sD,mBAAmBg0K,GACvBj/O,EAAUwf,OAAOrB,KAGrB,OAAU,WACR+5N,GAAeF,cAAcvjP,IAE/B,cAAiB,WACfyjP,GAAeD,qBAAqBxjP,IAEtC,eAAkB,WAChBA,EAAOyhD,WAAW,KAEpB,gBAAmB,SAAU+e,EAASxpB,EAAI33C,GAExC,OADAsoP,GAAShlP,OAAO3C,EAAQX,IACjB,KAGX,IAAIorP,EAAc,SAAUxsP,GAC1B,OAAO,WACL,IAAI4U,EAAQtH,EAAU0C,cAAgB,CAACrC,EAAIoL,UAAUzL,EAAUC,UAAWI,EAAIs8C,UAAY38C,EAAUw/C,oBAChGv+C,EAAU28O,GAAMt2O,GAAO,SAAUvH,GACnC,QAAS4C,EAAU0wK,UAAUtzK,EAAMrN,MAErC,OAAqC,IAA9BmrP,GAAU58O,GAAS,KAG9Bm9O,EAAY,CACV,YAAec,EAAY,aAC3B,cAAiBA,EAAY,eAC7B,aAAgBA,EAAY,cAC5B,YAAeA,EAAY,gBAC3B,4DAA6D,SAAUjqL,GACrE,OAAOypL,EAAczpL,IAEvB,cAAiB,WACf,OAAOypL,EAAc,eAEvB,QAAW,WACT,IAAI3+O,EACJ,GAAIrL,EAASyqP,cAAe,CAC1B,IAAKp/O,EAAOM,EAAIoL,UAAUzL,EAAU4I,WAAYvI,EAAIs8C,WAAaxpD,SAAS4M,EAAK9B,MAAMmhP,YAAa,IAAM,EACtG,OAAO,EAET,IAAKr/O,EAAOM,EAAIoL,UAAUzL,EAAUykJ,SAAUpkJ,EAAIs8C,WAAaxpD,SAAS4M,EAAK9B,MAAMmhP,YAAa,IAAM,EACpG,OAAO,EAGX,OAAO3B,EAAkB,wBAA0BA,EAAkB,uBAAyB/oP,EAASyqP,iBAAmB9+O,EAAIoL,UAAUzL,EAAUC,UAAW,eAE/J,wCAAyC,SAAUg1D,GACjD,IAAItU,EAAOtgD,EAAIoL,UAAUzL,EAAUC,UAAW,SAC9C,OAAO0gD,IAAqB,wBAAZsU,GAAsD,OAAjBtU,EAAKn7C,SAAgC,sBAAZyvD,GAAoD,OAAjBtU,EAAKn7C,WAEvH,SACH44O,EAAY,CACViB,KAAM,WACJ5qP,EAAO0L,YAAYo4B,QAErB+mN,KAAM,WACJ7qP,EAAO0L,YAAYs4B,UAGvB8lN,EAAqB,YAAY,WAC/B,OAAO9E,GAAchlP,KACpBrG,MACHmwP,EAAqB,YAAY,WAC/B,OAAO5E,GAAcllP,KACpBrG,MAGL,IAAImxP,GAAelrP,GAAMinE,QAAQ,6VAA6W,KAC1YkkL,GAAa,SAAU9qP,GACzB,IACI4iC,EAAsBmoN,EADtB9pP,EAAOvH,KACAsxP,EAAW,GAClBvmD,EAAc,WAChB,OAAO,GAELD,EAAa,WACf,OAAO,GAETxkM,EAAWA,GAAY,GACvB4iC,EAAQ5iC,EAAS4iC,OAAS3hC,EAC1B8pP,EAAc/qP,EAAS+qP,aAAetmD,EACtC,IAAI5+J,EAAO,SAAU7nC,EAAMuI,GACzB,IAAI49K,EAAU/gL,EAAG1E,EAAGyE,EAyBpB,GAxBAnF,EAAOA,EAAKimB,cACZ1d,EAAOA,GAAQ,GACfA,EAAK/E,KAAOxD,EACPuI,EAAKmK,SACRnK,EAAKmK,OAASkyB,GAEXr8B,EAAKkgC,iBACRlgC,EAAKkgC,eAAiB,WACpBlgC,EAAKujE,mBAAqB06H,GAE5Bj+L,EAAKigC,gBAAkB,WACrBjgC,EAAK8+L,qBAAuBb,GAE9Bj+L,EAAKstE,yBAA2B,WAC9BttE,EAAKg/L,8BAAgCf,GAEvCj+L,EAAKujE,mBAAqB26H,EAC1Bl+L,EAAK8+L,qBAAuBZ,EAC5Bl+L,EAAKg/L,8BAAgCd,GAEnCzkM,EAASirP,YACXjrP,EAASirP,WAAW1kP,GAEtB49K,EAAW6mE,EAAShtP,GAChBmmL,EACF,IAAK/gL,EAAI,EAAG1E,EAAIylL,EAASrhL,OAAQM,EAAI1E,EAAG0E,IAAK,CAK3C,GAJAD,EAAWghL,EAAS/gL,GAChBD,EAASwpE,MACXz5B,EAAIl1C,EAAMmF,EAASw+H,MAEjBp7H,EAAKg/L,gCAEP,OADAh/L,EAAKigC,kBACEjgC,EAET,IAAwC,IAApCpD,EAASw+H,KAAK1/H,KAAK2gC,EAAOr8B,GAE5B,OADAA,EAAKkgC,iBACElgC,EAIb,OAAOA,GAEL8H,EAAK,SAAUrQ,EAAMmF,EAAUsmJ,EAAS/+E,GAC1C,IAAIy5G,EAAUx9E,EAAOvjG,EAIrB,IAHiB,IAAbD,IACFA,EAAWshM,GAETthM,EAAU,CACZA,EAAW,CAAEw+H,KAAMx+H,GACfunE,GACF/qE,GAAMyC,OAAOe,EAAUunE,GAEzBi8B,EAAQ3oG,EAAKimB,cAAclqB,MAAM,KACjCqJ,EAAIujG,EAAM7jG,OACV,MAAOM,IACLpF,EAAO2oG,EAAMvjG,GACb+gL,EAAW6mE,EAAShtP,GACfmmL,IACHA,EAAW6mE,EAAShtP,GAAQ,GAC5B+sP,EAAY/sP,GAAM,IAEhByrJ,EACF06B,EAAS18F,QAAQtkF,GAEjBghL,EAAS39K,KAAKrD,GAIpB,OAAOlC,GAELiyC,EAAM,SAAUl1C,EAAMmF,GACxB,IAAIC,EAAG+gL,EAAU+mE,EAAavkJ,EAAOwkJ,EACrC,GAAIntP,EAAM,CACR2oG,EAAQ3oG,EAAKimB,cAAclqB,MAAM,KACjCqJ,EAAIujG,EAAM7jG,OACV,MAAOM,IAAK,CAGV,GAFApF,EAAO2oG,EAAMvjG,GACb+gL,EAAW6mE,EAAShtP,IACfA,EAAM,CACT,IAAKktP,KAAeF,EAClBD,EAAYG,GAAa,UAClBF,EAASE,GAElB,OAAOjqP,EAET,GAAIkjL,EAAU,CACZ,GAAKhhL,EAEE,CACLgoP,EAAKhnE,EAASrhL,OACd,MAAOqoP,IACDhnE,EAASgnE,GAAIxpH,OAASx+H,IACxBghL,EAAWA,EAASh+K,MAAM,EAAGglP,GAAIvvO,OAAOuoK,EAASh+K,MAAMglP,EAAK,IAC5DH,EAAShtP,GAAQmmL,QANrBA,EAASrhL,OAAS,EAUfqhL,EAASrhL,SACZioP,EAAY/sP,GAAM,UACXgtP,EAAShtP,UAIjB,CACL,IAAKA,KAAQgtP,EACXD,EAAY/sP,GAAM,GAEpBgtP,EAAW,GAEb,OAAO/pP,GAEL0rE,EAAO,SAAU3uE,EAAMmF,EAAUsmJ,GACnC,OAAOp7I,EAAGrQ,EAAMmF,EAAUsmJ,EAAS,CAAE98E,MAAM,KAEzC/kD,EAAM,SAAU5pB,GAElB,OADAA,EAAOA,EAAKimB,iBACF+mO,EAAShtP,IAAmC,IAA1BgtP,EAAShtP,GAAM8E,SAE7C7B,EAAK4kC,KAAOA,EACZ5kC,EAAKoN,GAAKA,EACVpN,EAAKiyC,IAAMA,EACXjyC,EAAK0rE,KAAOA,EACZ1rE,EAAK2mB,IAAMA,GAEbkjO,GAAWM,SAAW,SAAUptP,GAC9B,QAAS6sP,GAAa7sP,EAAKimB,gBAG7B,IAoIIonO,GApIAC,GAAqB,SAAU7rO,GAWjC,OAVKA,EAAI8rO,mBACP9rO,EAAI8rO,iBAAmB,IAAIT,GAAW,CACpCloN,MAAOnjB,EACPsrO,YAAa,SAAU/sP,EAAM2lC,GACvBmnN,GAAWM,SAASptP,IAASyhB,EAAI+rO,mBACnC/rO,EAAI+rO,kBAAkBxtP,EAAM2lC,OAK7BlkB,EAAI8rO,kBAETE,GAAa,CACf5lN,KAAM,SAAU7nC,EAAMuI,EAAM+8I,GAC1B,IAAIriJ,EAAOvH,KACX,GAAIuH,EAAK2iC,SAAoB,WAAT5lC,GAA8B,WAATA,EACvC,OAAOuI,EAGT,GADAA,EAAO+kP,GAAmBrqP,GAAM4kC,KAAK7nC,EAAMuI,EAAM+8I,IAClC,IAAXA,GAAoBriJ,EAAK6C,OAAQ,CACnC,IAAIA,EAAS7C,EAAK6C,SAClB,MAAOA,IAAWyC,EAAK8+L,uBACrBvhM,EAAO+hC,KAAK7nC,EAAMuI,GAAM,GACxBzC,EAASA,EAAOA,SAGpB,OAAOyC,GAET8H,GAAI,SAAUrQ,EAAMmF,EAAUsmJ,GAC5B,OAAO6hG,GAAmB5xP,MAAM2U,GAAGrQ,EAAMmF,EAAUsmJ,IAErDv2G,IAAK,SAAUl1C,EAAMmF,GACnB,OAAOmoP,GAAmB5xP,MAAMw5C,IAAIl1C,EAAMmF,IAE5CwpE,KAAM,SAAU3uE,EAAMmF,GACpB,OAAOmoP,GAAmB5xP,MAAMizE,KAAK3uE,EAAMmF,IAE7C+mE,kBAAmB,SAAUlsE,GAC3B,OAAOstP,GAAmB5xP,MAAMkuB,IAAI5pB,KAIpC0tP,GAAiB,SAAU3rP,EAAQwG,GACrC,OAAOxG,EAAO8lC,KAAK,aAAct/B,IAE/BolP,GAAkB,SAAU5rP,EAAQwG,GACtC,OAAOxG,EAAO8lC,KAAK,cAAet/B,IAEhCqlP,GAAa,SAAU7rP,GACzB,OAAOA,EAAO8lC,KAAK,WAEjBgmN,GAAa,SAAU9rP,GACzB,OAAOA,EAAO8lC,KAAK,WAEjBimN,GAAiB,SAAU/rP,EAAQ8uF,GACrC,OAAO9uF,EAAO8lC,KAAK,aAAc,CAAEgpD,KAAMA,KAEvCitF,GAAwB,SAAU/7K,EAAQ2Q,EAAQyhB,EAAOC,GAC3DryB,EAAO8lC,KAAK,oBAAqB,CAC/Bn1B,OAAQA,EACRyhB,MAAOA,EACPC,OAAQA,KAGR2pJ,GAAoB,SAAUh8K,EAAQ2Q,EAAQyhB,EAAOC,GACvDryB,EAAO8lC,KAAK,gBAAiB,CAC3Bn1B,OAAQA,EACRyhB,MAAOA,EACPC,OAAQA,KAGRsxC,GAAS,CACXgoL,eAAgBA,GAChBC,gBAAiBA,GACjBC,WAAYA,GACZC,WAAYA,GACZC,eAAgBA,GAChBhwE,sBAAuBA,GACvBC,kBAAmBA,IAGjBgwE,GAAwB,SAAUhsP,EAAQqQ,EAAKuzB,GACjD,IACE5jC,EAAOmP,SAASsH,YAAYpG,GAAK,EAAOuzB,GACxC,MAAO/O,MAGP2iG,GAAc,SAAU5vH,EAAKygN,EAAKzkL,GAChCuoL,GAAMvkN,EAAKygN,KAAkB,IAAVzkL,EACrBuhI,GAASv9J,EAAKygN,GACLzkL,GACTwhI,GAAMx9J,EAAKygN,IAGX4jC,GAAiB,SAAUjsP,EAAQ4jC,GACrC4zF,GAAY3qE,GAAQN,QAAQvsD,EAAO0T,WAAY,uBAAwBkwB,GACnEA,GACF5jC,EAAOuL,UAAU2gP,iBAAiBC,iBAClCnsP,EAAOwT,UAAW,EAClBxT,EAAO0T,UAAU1E,gBAAkB,UAEnChP,EAAOwT,UAAW,EAClBxT,EAAO0T,UAAU1E,gBAAkB,OACnCg9O,GAAsBhsP,EAAQ,gBAAgB,GAC9CgsP,GAAsBhsP,EAAQ,4BAA4B,GAC1DgsP,GAAsBhsP,EAAQ,wBAAwB,GACtDA,EAAOwU,QACPxU,EAAOyU,gBAGP23O,GAAU,SAAUpsP,EAAQ8uF,GAC1BA,IAASu9J,GAAQrsP,KAGjBA,EAAOssP,YACTL,GAAejsP,EAAiB,aAAT8uF,GAEvB9uF,EAAOsO,GAAG,QAAQ,WAChB29O,GAAejsP,EAAiB,aAAT8uF,MAG3BnrB,GAAOooL,eAAe/rP,EAAQ8uF,KAE5Bu9J,GAAU,SAAUrsP,GACtB,OAAOA,EAAOwT,SAAW,WAAa,UAEpC+4O,GAAa,SAAUvsP,GACzB,OAA2B,IAApBA,EAAOwT,UAGZumD,GAAQ0vJ,GAAWjpN,IAEnBgsP,GAAiB,SAAUxsP,EAAQysP,GACrC,MAAkB,oBAAdA,EACKzsP,EAAOmP,UAEXnP,EAAO4P,QAAU,uDAAuD5L,KAAKyoP,GACzEzsP,EAAOmP,SAASszE,gBAErBziF,EAAOC,SAASysP,YACb1sP,EAAO2sP,YACV3sP,EAAO2sP,UAAY5yL,GAAMjuD,OAAO9L,EAAOC,SAASysP,YAAY,IAEvD1sP,EAAO2sP,WAET3sP,EAAO0T,WAEZk5O,GAAc,SAAU5sP,GAC1B,OAAQA,EAAO6sP,SAAW7sP,EAAOwT,UAE/Bs5O,GAAY,SAAU9sP,EAAQysP,EAAW3+O,GACvC8+O,GAAY5sP,GACdA,EAAO8lC,KAAK2mN,EAAW3+O,GACdy+O,GAAWvsP,IACpB8N,EAAE44B,kBAGFqmN,GAAoB,SAAU/sP,EAAQysP,GACxC,IAAIO,EAAcllE,EAIlB,GAHK9nL,EAAOitP,YACVjtP,EAAOitP,UAAY,KAEjBjtP,EAAOitP,UAAUR,KAAczsP,EAAO6jC,QAI1C,GADAmpN,EAAeR,GAAexsP,EAAQysP,GAClCzsP,EAAOC,SAASysP,WAAY,CAe9B,GAdKpB,KACHA,GAA2B,GAC3BtrP,EAAOktP,cAAc5+O,GAAG,gBAAgB,WACtC,IAAIrQ,EACJ,IAAK+B,EAAOktP,cAAcC,cACpB7B,GAA0B,CAC5B,IAAKrtP,KAAQqtP,GACXtrP,EAAO4L,IAAImpE,OAAOy3K,GAAexsP,EAAQ/B,IAE3CqtP,GAA2B,UAK/BA,GAAyBmB,GAC3B,OAEF3kE,EAAW,SAAUh6K,GACnB,IAAI6C,EAAS7C,EAAE6C,OACXy8O,EAAUptP,EAAOktP,cAAc5tP,MAC/B+D,EAAI+pP,EAAQrqP,OAChB,MAAOM,IAAK,CACV,IAAIgK,EAAO+/O,EAAQ/pP,GAAGqQ,WAClBrG,IAASsD,GAAUopD,GAAMvR,UAAU73C,EAAQtD,KAC7Cy/O,GAAUM,EAAQ/pP,GAAIopP,EAAW3+O,KAIvCw9O,GAAyBmB,GAAa3kE,EACtC/tH,GAAM38C,KAAK4vO,EAAcP,EAAW3kE,QAEpCA,EAAW,SAAUh6K,GACnBg/O,GAAU9sP,EAAQysP,EAAW3+O,IAE/BisD,GAAM38C,KAAK4vO,EAAcP,EAAW3kE,GACpC9nL,EAAOitP,UAAUR,GAAa3kE,GAG9BulE,GAAmB,CACrBC,0BAA2B,WACzB,IAAIpsP,EAAOvH,KACXiG,GAAM4O,KAAKtN,EAAKqsP,sBAAsB,SAAUtvP,GAC9C8uP,GAAkB7rP,EAAMjD,OAG5BwtP,kBAAmB,SAAUxtP,EAAM2lC,GACjC,IAAI1iC,EAAOvH,KACE,UAATsE,GAA6B,SAATA,IAGpB2lC,EACE1iC,EAAKorP,YACPS,GAAkB7rP,EAAMjD,GAEnBiD,EAAKqsP,qBAGRrsP,EAAKqsP,qBAAqB9mP,KAAKxI,GAF/BiD,EAAKqsP,qBAAuB,CAACtvP,GAKxBiD,EAAKorP,cACdprP,EAAK0K,IAAImpE,OAAOy3K,GAAetrP,EAAMjD,GAAOA,EAAMiD,EAAK+rP,UAAUhvP,WAC1DiD,EAAK+rP,UAAUhvP,MAG1BuvP,sBAAuB,WACrB,IAGIvvP,EAHAiD,EAAOvH,KACP0T,EAAOnM,EAAKwS,UACZ9H,EAAM1K,EAAK0K,IAEf,GAAI1K,EAAK+rP,UAAW,CAClB,IAAKhvP,KAAQiD,EAAK+rP,UAChB/rP,EAAK0K,IAAImpE,OAAOy3K,GAAetrP,EAAMjD,GAAOA,EAAMiD,EAAK+rP,UAAUhvP,WAE5DiD,EAAK+rP,WAET/rP,EAAK0O,QAAUvC,GAAQzB,IAC1ByB,EAAKgpB,OAAS,KACdzqB,EAAImpE,OAAO7zE,EAAKmrL,UAChBzgL,EAAImpE,OAAO7zE,EAAKiO,WAEdvD,IACFA,EAAImpE,OAAO1nE,GACXzB,EAAImpE,OAAO7zE,EAAK2oH,mBAItBwjI,GAAmBztP,GAAMyC,OAAO,GAAIqpP,GAAY2B,IAChD,IAAII,GAAqBJ,GAErBK,GAAgBtgM,GAAU,WAAY,YACtC41C,GAAYnwC,GAAoBvE,SAChCiD,GAAUyxC,GAAUvwC,WAAWlB,UAC/Bo8L,GAAgB,CAClB,QACA,WACA,YAEEC,GAAwB,CAAEnE,MAAO,UACjCoE,GAAmB,SAAUvqP,GAC/B,IAAIwqP,EAAcxiO,EAAQhoB,GAAWA,EAAQ2D,KAAK,KAAO3D,EACrDyqP,EAAiBnsP,EAAI+nD,EAASmkM,GAAeA,EAAY9zP,MAAM,KAAO,GAAIi7M,IAC9E,OAAO1mM,EAAOw/O,GAAgB,SAAUh0M,GACtC,OAAOA,EAAKh3C,OAAS,MAGrBirP,GAAsB,SAAU1qP,GAClC,OAAOiL,EAAOjL,EAASkY,EAAM7H,EAAUg6O,MAErCM,GAAkB,SAAUzuO,EAAMvf,GACpC,IAAIvC,EAAS43M,GAASr1M,GAAU,SAAUZ,EAAO7B,GAC/C,OAAOmW,EAAS6L,EAAMhiB,MAExB,OAAOkwP,GAAchwP,EAAOqN,EAAGrN,EAAOqe,IAEpCmyO,GAAa,SAAUR,EAAezvP,EAAM4nB,GAC9C,IAAIsoO,EAAWT,EAAcS,WACzBC,EAAkBD,EAAShsP,eAAelE,GAAQkwP,EAASlwP,GAAQ,GACvE,OAAO2B,GAAMyC,OAAO,GAAIwjB,EAAUuoO,IAEhCC,GAAa,SAAUX,EAAezvP,GACxC,OAAOyvP,EAAcS,WAAWhsP,eAAelE,IAE7CqwP,GAAqB,SAAUhsP,EAAIisP,EAAiBvuP,GACtD,MAAO,CACLsC,GAAIA,EACJmnP,MAAO,SACP+E,YAAa,EACbC,aAAc,EACdC,UAAW,GACXprP,QAAS,GACTqrP,kBAAmBJ,EACnBK,yBAAyB,EACzBC,cAAc,EACdC,oBAAoB,EACpBC,cAAc,EACdC,eAAe,EACfC,oBAAoB,EACpBC,iBAAiB,EACjB7mP,QAAS,kBACT8mP,QAAQ,EACRC,uBAAwB,uDACxBC,wBAAyB,oDACzBn2L,kBAAmB,IACnBo2L,cAAc,EACdC,WAAW,EACX33L,YAAa,OACb8yL,eAAe,EACf8E,wBAAwB,EACxBlqO,OAAQ,SACRE,cAAe,oMACfC,aAAc,oMACdwgN,gBAAiB,QACjBhiB,cAAejkN,EAAO4jD,WACtBugK,oBAAqBnkN,EACrByvP,YAAY,IAGZC,GAAqB,SAAUC,EAAkB1vP,GACnD,IAAI2vP,EAA6B3vP,EAAS4vP,iBAAmB5vP,EAAS4vP,iBAAmB,GACzF,OAAIF,GAAoBA,EAAiBE,iBAChCjwP,GAAMyC,OAAO,GAAIstP,EAAiBE,iBAAkBD,GAEpDA,GAGPE,GAAiB,SAAUC,EAAezsP,GAC5C,MAAO,GAAGuY,OAAOgyO,GAAiBkC,IAAgBl0O,OAAOgyO,GAAiBvqP,KAExE0sP,GAAiB,SAAUC,EAAevC,EAAewC,EAAyBjwP,GACpF,IAAI8vP,EAAgBlC,GAAiBqC,EAAwB9vO,gBACzD9c,EAAUuqP,GAAiB5tP,EAASqD,SACpC6sP,EAAkBF,GAAiB5B,GAAWX,EAAe,UAAYM,GAAoB1qP,GAAWA,EACxG8sP,EAAkBN,GAAeC,EAAeI,GACpD,OAAOvwP,GAAMyC,OAAOpC,EAAU,CAAEqD,QAAS8sP,EAAgBnpP,KAAK,QAE5DopP,GAAa,SAAUJ,EAAevC,GACxC,IAAI33E,EAAW23E,EAAcztP,WAAW2P,OACxC,OAAOqgP,GAAiB5B,GAAWX,EAAe,YAAc33E,GAE9Du6E,GAAkB,SAAUL,EAAeM,EAAiBL,EAAyBjwP,GACvF,IAAIytP,EAAgBO,GAAgB,CAAC,UAAWhuP,GAC5CuwP,EAAmB5wP,GAAMyC,OAAOkuP,EAAiBL,EAAyBxC,EAAcztP,WAAYowP,GAAWJ,EAAevC,GAAiBQ,GAAWR,EAAe,SAAUE,IAAyB,GAAI,CAClNrqO,UAAU,EACVktO,iBAAkB/C,EAAcztP,WAAW2P,OAC3CigP,iBAAkBH,GAAmBQ,EAAyBxC,EAAcztP,cAE9E,OAAO+vP,GAAeC,EAAevC,EAAewC,EAAyBM,IAE3EE,GAAoB,SAAU1wP,EAAQsC,EAAIisP,EAAiB2B,EAAyBjwP,GACtF,IAAIswP,EAAkBjC,GAAmBhsP,EAAIisP,EAAiBvuP,GAC9D,OAAOswP,GAAgB/+L,GAASg/L,EAAiBL,EAAyBjwP,IAExE0wP,GAAc,SAAU1iO,EAAWjuB,EAAQ/B,GAC7C,OAAO6f,EAAO5X,KAAKlG,EAAOC,SAAShC,IAAOsQ,OAAO0f,IAE/C2iO,GAAiB,SAAUvxP,GAC7B,IAAIvC,EAAS,GAab,MAZqB,kBAAVuC,EACTmP,EAAKnP,EAAMwI,QAAQ,KAAO,EAAIxI,EAAMrF,MAAM,6BAA+BqF,EAAMrF,MAAM,MAAM,SAAUi7B,GACnG,IAAI24C,EAAM34C,EAAIj7B,MAAM,KAChB4zE,EAAI7qE,OAAS,EACfjG,EAAO8C,GAAMgP,KAAKg/D,EAAI,KAAOhuE,GAAMgP,KAAKg/D,EAAI,IAE5C9wE,EAAO8C,GAAMgP,KAAKg/D,EAAI,KAAOhuE,GAAMgP,KAAKg/D,MAI5C9wE,EAASuC,EAEJvC,GAEL+zP,GAAY,SAAU/tN,GACxB,OAAO,SAAUroB,GACf,OAAO6Q,EAAQ7Q,IAAM6C,GAAO7C,EAAGqoB,KAG/BniC,GAAW,SAAUX,EAAQ/B,EAAMyoN,EAAYjlN,GACjD,IAAIpC,EAAQpB,KAAQ+B,EAAOC,SAAWD,EAAOC,SAAShC,GAAQyoN,EAC9D,MAAa,SAATjlN,EACKmvP,GAAevxP,GACJ,WAAToC,EACFkvP,GAAYhnM,EAAU3pD,EAAQ/B,GAAMye,MAAMgqM,GAC/B,WAATjlN,EACFkvP,GAAY9mM,EAAU7pD,EAAQ/B,GAAMye,MAAMgqM,GAC/B,YAATjlN,EACFkvP,GAAY/mM,EAAW5pD,EAAQ/B,GAAMye,MAAMgqM,GAChC,WAATjlN,EACFkvP,GAAYp6J,EAAUv2F,EAAQ/B,GAAMye,MAAMgqM,GAC/B,UAATjlN,EACFkvP,GAAYrlO,EAAStrB,EAAQ/B,GAAMye,MAAMgqM,GAC9B,aAATjlN,EACFkvP,GAAYE,GAAUlnM,GAAW3pD,EAAQ/B,GAAMye,MAAMgqM,GAC1C,aAATjlN,EACFkvP,GAAYvyO,EAAYpe,EAAQ/B,GAAMye,MAAMgqM,GAE5CrnN,GAIPyxP,GAASlxP,GAAM4O,KAAMuiP,GAAYnxP,GAAMoyM,QACvCg/C,GAAgB,CAClBC,GAAI,IACJC,GAAI,IACJC,GAAI,IACJC,GAAI,IACJC,GAAI,IACJC,GAAI,IACJC,GAAI,IACJC,GAAI,IACJC,GAAI,IACJC,IAAK,IACLC,IAAK,IACLC,IAAK,KAEHC,GAAgBjyP,GAAMinE,QAAQ,8BAClC,SAASirL,GAAW9xP,GAClB,IAAIkB,EAAOvH,KACPolB,EAAY,GACZgzO,EAAkB,GAClBC,EAAgB,SAAUnsP,GAC5B,IAAIvD,EAAI9E,EACJwhB,EAAW,GAcf,IAAKxhB,KAbLszP,GAAOC,GAAUlrP,EAAS,MAAM,SAAUxG,GACpCA,KAASwyP,GACX7yO,EAAS3f,IAAS,EAEd,cAAc2E,KAAK3E,GACrB2f,EAASmP,QAAUzvB,SAASW,EAAO,KAEnC2f,EAASyP,SAAWpvB,EAAMmvB,WAAW,GACrCxP,EAASmP,QAAU6iO,GAAc3xP,IAAUA,EAAMu9D,cAAcpuC,WAAW,OAIhFlsB,EAAK,CAAC0c,EAASmP,SACH0jO,GACN7yO,EAASxhB,GACX8E,EAAGmE,KAAKjJ,GAERwhB,EAASxhB,IAAO,EAoBpB,OAjBAwhB,EAAS1c,GAAKA,EAAG2E,KAAK,KAClB+X,EAASF,SACXE,EAASqhC,KAAM,EACXsiJ,GAAI9jL,IACNG,EAAS3L,MAAO,EAEhB2L,EAASo2D,OAAQ,GAGjBp2D,EAASJ,OACP+jL,GAAI9jL,IACNG,EAASJ,MAAO,GAEhBI,EAAS3L,MAAO,EAChB2L,EAASJ,MAAO,IAGbI,GAELizO,EAAiB,SAAUpsP,EAASwmG,EAAM6lJ,EAASrvN,GACrD,IAAI9jB,EAMJ,OALAA,EAAYnf,GAAMgC,IAAImvP,GAAUlrP,EAAS,KAAMmsP,GAC/CjzO,EAAUA,EAAUhc,OAAS,GAAKnD,GAAMyC,OAAO0c,EAAUA,EAAUhc,OAAS,GAAI,CAC9E6+H,KAAMswH,EACNrvN,MAAOA,GAAS7iC,IAEXJ,GAAMyC,OAAO0c,EAAU,GAAI,CAChCstF,KAAMrsG,EAAO3C,UAAUgvG,GACvB8lJ,YAAapzO,EAAU3Y,MAAM,MAG7BgsP,EAAc,SAAUtkP,GAC1B,OAAOA,EAAEy6E,QAAUz6E,EAAEwsC,SAAWxsC,EAAE06E,SAEhC6pK,EAAgB,SAAUvkP,GAC5B,MAAkB,YAAXA,EAAErM,MAAsBqM,EAAEqgB,SAAW,KAAOrgB,EAAEqgB,SAAW,KAE9DmkO,EAAgB,SAAUxkP,EAAGkR,GAC/B,QAAKA,IAGDA,EAAS3L,OAASvF,EAAEwsC,SAAWt7B,EAASJ,OAAS9Q,EAAE06E,UAGnDxpE,EAASqhC,MAAQvyC,EAAEy6E,QAAUvpE,EAASo2D,QAAUtnE,EAAEgzD,cAGlDhzD,EAAEqgB,UAAYnP,EAASmP,SAAWrgB,EAAE2gB,UAAY3gB,EAAE2gB,WAAazP,EAASyP,YAC1E3gB,EAAE44B,kBACK,OAIP6rN,EAAwB,SAAUvzO,GACpC,OAAOA,EAAS4iH,KAAO5iH,EAAS4iH,KAAK1/H,KAAK8c,EAAS6jB,OAAS,MAE9D7iC,EAAOsO,GAAG,0BAA0B,SAAUR,IACvCskP,EAAYtkP,KAAMukP,EAAcvkP,IAAQA,EAAEi8D,uBAC7C+mL,GAAO/xO,GAAW,SAAUC,GAC1B,GAAIszO,EAAcxkP,EAAGkR,GAKnB,OAJA+yO,EAAkB/yO,EAASmzO,YAAY/rP,MAAM,GAC9B,YAAX0H,EAAErM,MACJ8wP,EAAsBvzO,IAEjB,KAGPszO,EAAcxkP,EAAGikP,EAAgB,MACJ,IAA3BA,EAAgBhvP,QACH,YAAX+K,EAAErM,MACJ8wP,EAAsBR,EAAgB,IAG1CA,EAAgB38K,aAItBl0E,EAAK6F,IAAM,SAAUlB,EAASwmG,EAAM6lJ,EAASrvN,GAC3C,IAAIxyB,EAeJ,OAdAA,EAAM6hP,EACiB,kBAAZA,EACTA,EAAU,WACRlyP,EAAOyW,YAAYpG,GAAK,EAAO,OAExBzQ,GAAM0rB,QAAQjb,KACvB6hP,EAAU,WACRlyP,EAAOyW,YAAYpG,EAAI,GAAIA,EAAI,GAAIA,EAAI,MAG3CygP,GAAOC,GAAUnxP,GAAMgP,KAAK/I,EAAQqe,iBAAiB,SAAUre,GAC7D,IAAImZ,EAAWizO,EAAepsP,EAASwmG,EAAM6lJ,EAASrvN,GACtD9jB,EAAUC,EAAS1c,IAAM0c,MAEpB,GAET9d,EAAKyT,OAAS,SAAU9O,GACtB,IAAImZ,EAAWizO,EAAepsP,GAC9B,QAAIkZ,EAAUC,EAAS1c,aACdyc,EAAUC,EAAS1c,KACnB,IAMb,IAAIirM,GAAW,SAAU3pM,GACvB,IAAIwoB,EAAMg9H,GAAMxlJ,GAASgI,MACzB,OAAOhI,EAAQgI,QAAUwgB,EAAIsxJ,eAE3Bt8G,GAAS,SAAUoxL,GACrB,IAAIpmO,OAAenP,IAATu1O,EAAqBA,EAAK5mP,MAAQ1M,EAAWwE,SACvD,OAAOoa,EAAO5X,KAAKkmB,EAAIsxJ,eAAe97K,IAAIirD,GAAQN,UAEhDuF,GAAS,SAAUluD,GACrB,OAAOw9D,GAAOgoF,GAAMxlJ,IAAU2K,QAAO,SAAUT,GAC7C,OAAOlK,EAAQgI,MAAM+H,SAAS7F,EAAElC,WAIhC6mP,GAAyB,SAAUzyP,EAAQsL,GAC7C,OAAOtL,EAAO4L,IAAIoL,UAAU1L,GAAM,SAAUA,GAC1C,MAA+C,SAAxCtL,EAAO4L,IAAI+wD,mBAAmBrxD,OAGrConP,GAAmB,SAAUhpO,GAC/B,OAAOA,EAAIE,UAAY9L,EAAO5X,KAAKsF,GAAQke,EAAII,eAAgBJ,EAAIO,cAAcroB,IAAIirD,GAAQN,SAAWzuC,EAAO5B,QAE7Gy2O,GAAoB,SAAU/vP,EAAM8mB,GACtC,OAAOgpO,GAAiBhpO,GAAKtM,MAAK,SAAU9R,GAC1C,OAAI6tM,GAAe7tM,GACVwS,EAAOH,KAAKrS,IACiB,IAA3BuqM,GAAWjzM,EAAM0I,GACnBwS,EAAOH,KAAK/a,GAEZkb,EAAO5B,WAIhB02O,GAAqB,SAAU5yP,EAAQ0pB,GACzCipO,GAAkB9lM,GAAQN,QAAQvsD,EAAO0T,WAAYgW,GAAKtM,MAAK,SAAUxV,GACvE,OAAO+0N,GAAYC,gBAAgBh1N,EAAIgE,UACtC4Q,MAAK,WACNxc,EAAOuL,UAAU03F,eAEhB,SAAU+gI,GACX,OAAOhkO,EAAOuL,UAAUwf,OAAOi5M,EAASvQ,eAGxCo/B,GAAY,SAAUxlP,GACxB,GAAIA,EAAKylP,UACP,IACEzlP,EAAKylP,YACL,MAAOj+N,GACPxnB,EAAKmH,aAGPnH,EAAKmH,SAGLu+O,GAAkB,SAAUnrP,GAC9B,OAAO2lM,GAAS3lM,IAAQkqD,GAAOlqD,GAAK6U,UAElCu2O,GAAiB,SAAUhzP,GAC7B,OAAOA,EAAOizP,eAAiB1lD,GAAS1gJ,GAAQN,QAAQvsD,EAAOizP,iBAE7DC,GAAiB,SAAUlzP,GAC7B,IAAImzP,EAAUnzP,EAAO0T,UACrB,OAAOy/O,GAAWJ,GAAgBlmM,GAAQN,QAAQ4mM,KAEhDC,GAAa,SAAUpzP,GACzB,OAAOA,EAAO4P,OAASsjP,GAAelzP,GAAUgzP,GAAehzP,IAE7DqzP,GAAc,SAAUrzP,GAC1B,IAAIuL,EAAYvL,EAAOuL,UAAWyD,EAAkBhP,EAAOC,SAASwwP,iBAChEpjP,EAAOrN,EAAO0T,UACdgW,EAAMne,EAAUugB,SACpB9rB,EAAOkjE,OAAOowL,yBACd,IAAIC,EAAsBd,GAAuBzyP,EAAQuL,EAAUC,WACnE,GAAIxL,EAAOgM,EAAE2H,SAAStG,EAAMkmP,GAI1B,OAHAV,GAAUU,GACVX,GAAmB5yP,EAAQ0pB,QAC3B8pO,GAAexzP,QAGOid,IAApBjd,EAAOmpD,WAAiD,IAAvBiqM,GAAWpzP,IAC9CuoP,GAAkBz8N,OAAO9rB,GAAQwO,MAAK,SAAUilP,GAC9CzzP,EAAOuL,UAAUwf,OAAO0oO,GACxB/pO,EAAM+pO,KAGLzkP,IACE2zL,GAAI9zI,OACPgkM,GAAUxlP,GAEZrN,EAAOqsL,SAAS73K,UAEdmuL,GAAI/tH,OAAS5lE,KACf6jP,GAAUxlP,GACVulP,GAAmB5yP,EAAQ0pB,IAE7B8pO,GAAexzP,IAEbwzP,GAAiB,SAAUxzP,GAC7B,OAAOA,EAAOktP,cAAc4F,UAAU9yP,IAEpCwU,GAAQ,SAAUxU,EAAQ0zP,GACxB1zP,EAAO6jC,UAGX6vN,EAAYF,GAAexzP,GAAUqzP,GAAYrzP,KAE/C2zP,GAAc,CAChBn/O,MAAOA,GACP+4L,SAAU6lD,IAGRz0F,GAAU,SAAUk7C,EAAUjyM,GAChC,IAAIgsP,EAAShsP,EAAIgE,MACjB,OAAOgoP,EAAO/5C,IAEZg6C,GAAsB,SAAUh6C,EAAUjyM,GAC5C,OAAOlJ,SAAS6pB,GAAM3gB,EAAKiyM,GAAW,KAEpCi6C,GAAiBt4O,EAAMmjJ,GAAS,eAChCo1F,GAAkBv4O,EAAMmjJ,GAAS,gBACjCq1F,GAAex4O,EAAMq4O,GAAqB,cAC1CI,GAAgBz4O,EAAMq4O,GAAqB,eAC3CK,GAA0B,SAAUtsP,GACtC,OAAOA,EAAIgE,MAAMsyG,yBAEfi2I,GAA6B,SAAUC,EAASp7M,EAASC,GAC3D,IAAI5P,EAAcyqN,GAAeM,GAC7B9qN,EAAeyqN,GAAgBK,GACnC,OAAOp7M,GAAW,GAAKC,GAAW,GAAKD,GAAW3P,GAAe4P,GAAW3P,GAE1EkP,GAAY,SAAU5oC,EAAQhI,EAAKoxC,EAASC,GAC9C,IAAIy5K,EAAawhC,GAAwBtsP,GACrC69B,EAAS71B,EAAS8iN,EAAWprL,KAAO1/B,EAAIgE,MAAMi2J,WAAaoyF,GAAcrsP,GAAO,EAChF89B,EAAS91B,EAAS8iN,EAAWnrL,IAAM3/B,EAAIgE,MAAMg2J,UAAYoyF,GAAapsP,GAAO,EAC7EiO,EAAImjC,EAAUvT,EACdzpC,EAAIi9C,EAAUvT,EAClB,MAAO,CACL7vB,EAAGA,EACH7Z,EAAGA,IAGHq4P,GAAoB,SAAUr0P,EAAQg5C,EAASC,GACjD,IAAIm7M,EAAUvnM,GAAQN,QAAQvsD,EAAO0T,WACjCqrD,EAAY/+D,EAAO4P,OAASwkP,EAAU3xK,GAAgB2xK,GACtDE,EAAkB97M,GAAUx4C,EAAO4P,OAAQmvD,EAAW/lB,EAASC,GACnE,OAAOk7M,GAA2Bp1L,EAAWu1L,EAAgBz+O,EAAGy+O,EAAgBt4P,IAE9Eu4P,GAAc,SAAUjpP,GAC1B,OAAOwS,EAAO5X,KAAKoF,GAAM1J,IAAIirD,GAAQN,UAEnCioM,GAAwB,SAAUx0P,GACpC,IAAIy0P,EAAez0P,EAAO4P,OAAS5P,EAAO0T,UAAY1T,EAAO05C,0BAC7D,OAAO66M,GAAYE,GAAc7yP,KAAI,SAAUioB,GAC7C,OAAOgsL,GAAWzsD,GAAMv/H,GAAYA,MACnCnN,OAAM,IAEPg4O,GAAa,CACfL,kBAAmBA,GACnBG,sBAAuBA,IAGzB,SAASG,KACP,IAAIC,EAAgB,WAClB,MAAM,IAAI93O,MAAM,gEAElB,MAAO,CACLnQ,KAAMioP,EACNltP,MAAOktP,EACPl8B,WAAYk8B,EACZC,QAASD,GAIb,SAASE,GAAqB90P,GAC5B,IAAI+0P,EAAgB,GAChBC,EAAoB,WACtB,IAAIvL,EAAQzpP,EAAOypP,MACnB,OAAOA,GAASA,EAAMwL,2BAA6BxL,EAAMwL,6BAA+BN,MAEtFO,EAAqB,WACvB,OAAOp3O,EAAO5X,KAAK6uP,EAAc,KAE/BrkC,EAAU,SAAUj2M,EAAGtB,GACzB,OAAOsB,EAAEhZ,OAAS0X,EAAE1X,MAAQgZ,EAAEnV,OAAS6T,EAAE7T,OAASmV,EAAE06O,cAAgB16O,EAAE4xD,UAAYlzD,EAAEg8O,cAAgBh8O,EAAEkzD,SAEpGqsJ,EAAa,WACXq8B,EAAchyP,OAAS,GACzBiyP,IAAoBt8B,WAAWq8B,IAG/BK,EAAkB,SAAUC,GAC9BN,EAActuP,KAAK4uP,IAEjBC,EAAoB,SAAUD,GAChCr0L,GAAU+zL,GAAe,SAAUQ,GACjC,OAAOA,IAAsBF,KAC5B7mP,MAAK,SAAUrI,GAChB4uP,EAAcnuP,OAAOT,EAAO,OAG5BwG,EAAO,SAAUnG,GACnB,IAAIxG,EAAO6jC,SAAY6wN,GAAWF,sBAAsBx0P,GAGxD,OAAOiP,EAAK8lP,GAAe,SAAUM,GACnC,OAAO3kC,EAAQskC,IAAoBH,QAAQQ,GAAe7uP,MACzDmW,YAAW,WACZ3c,EAAOktP,cAAc4F,UAAU9yP,GAC/B,IAAIq1P,EAAeL,IAAoBroP,KAAKnG,GAAM,WAChD8uP,EAAkBD,GAClB38B,OAIF,OAFA08B,EAAgBC,GAChB38B,IACO28B,MAGP3tP,EAAQ,WACVwtP,IAAqB1mP,MAAK,SAAU6mP,GAClCL,IAAoBttP,MAAM2tP,GAC1BC,EAAkBD,GAClB38B,QAGA88B,EAAmB,WACrB,OAAOT,GAEL13F,EAAiB,SAAUr9J,GAC7BA,EAAOsO,GAAG,cAAc,WACtB,IAAImnP,EAAiBz1P,EAAOC,SAASy1P,gBACjCD,GACF9oP,EAAK,CACHrH,KAAMmwP,EACNh0P,KAAM,UACN4qE,QAAS,EACT97D,KAAM,QAIZvQ,EAAOsO,GAAG,6BAA6B,WACrCs1L,GAAMT,sBAAsBu1B,MAE9B14N,EAAOsO,GAAG,UAAU,WAClBE,EAAKumP,EAAc3uP,SAAS,SAAUivP,GACpCL,IAAoBttP,MAAM2tP,UAKhC,OADAh4F,EAAer9J,GACR,CACL2M,KAAMA,EACNjF,MAAOA,EACP8tP,iBAAkBA,GAItB,SAASG,KACP,IAAIf,EAAgB,WAClB,MAAM,IAAI93O,MAAM,0DAElB,MAAO,CACLnQ,KAAMioP,EACNtnN,MAAOsnN,EACPhuK,QAASguK,EACTltP,MAAOktP,EACPgB,UAAWhB,EACXiB,UAAWjB,GAIf,SAASkB,GAAe91P,GACtB,IAAI4vD,EAAU,GACVolM,EAAoB,WACtB,IAAIvL,EAAQzpP,EAAOypP,MACnB,OAAOA,GAASA,EAAMsM,qBAAuBtM,EAAMsM,uBAAyBJ,MAE1EK,EAAW,SAAUnzN,EAAO9mB,GAC9B,OAAO,WACL,OAAOA,EAAIA,EAAElV,MAAMg8B,EAAO//B,gBAAama,IAGvCg5O,EAAgB,SAAU/rN,GAC5BlqC,EAAO8lC,KAAK,aAAc,CAAEoE,IAAKA,KAE/BgsN,EAAiB,SAAUhsN,GAC7BlqC,EAAO8lC,KAAK,cAAe,CAAEoE,IAAKA,KAEhCisN,EAAY,SAAUjsN,GACxB0lB,EAAQnpD,KAAKyjC,GACb+rN,EAAc/rN,IAEZksN,EAAc,SAAUlsN,GAC1B82B,GAAUpR,GAAS,SAAUymM,GAC3B,OAAOA,IAAgBnsN,KACtB17B,MAAK,SAAUrI,GAChBypD,EAAQhpD,OAAOT,EAAO,GACtB+vP,EAAehsN,GACQ,IAAnB0lB,EAAQ7sD,QACV/C,EAAOwU,YAIT8hP,EAAe,WACjB,OAAOx4O,EAAO5X,KAAK0pD,EAAQA,EAAQ7sD,OAAS,KAE1C4J,EAAO,SAAUnG,EAAMm1J,GACzB37J,EAAOktP,cAAc4F,UAAU9yP,GAC/BuoP,GAAkB7sJ,MAAM17F,GACxB,IAAIkqC,EAAM8qN,IAAoBroP,KAAKnG,EAAMm1J,EAAQy6F,GAEjD,OADAD,EAAUjsN,GACHA,GAELoD,EAAQ,SAAU9lC,EAASpE,EAAUy/B,GACvC,IAAIqH,EAAM8qN,IAAoB1nN,MAAM9lC,EAASwuP,EAASnzN,GAAgBlpC,KAAMyJ,GAAWgzP,GACvFD,EAAUjsN,IAER08C,EAAU,SAAUp/E,EAASpE,EAAUy/B,GACzC,IAAIqH,EAAM8qN,IAAoBpuK,QAAQp/E,EAASwuP,EAASnzN,GAAgBlpC,KAAMyJ,GAAWgzP,GACzFD,EAAUjsN,IAERxiC,EAAQ,WACV4uP,IAAe9nP,MAAK,SAAU07B,GAC5B8qN,IAAoBttP,MAAMwiC,GAC1BksN,EAAYlsN,OAGZ0rN,EAAY,WACd,OAAOU,IAAe10P,IAAIozP,IAAoBY,WAAWl5O,MAAM,OAE7Dm5O,EAAY,SAAUl6F,GACxB26F,IAAe9nP,MAAK,SAAU07B,GAC5B8qN,IAAoBa,UAAU3rN,EAAKyxH,OAGnC46F,EAAa,WACf,OAAO3mM,GAOT,OALA5vD,EAAOsO,GAAG,UAAU,WAClBE,EAAKohD,EAAQxpD,MAAM,IAAI,SAAU8jC,GAC/B8qN,IAAoBttP,MAAMwiC,SAGvB,CACL0lB,QAASA,EACTjjD,KAAMA,EACN2gC,MAAOA,EACPs5C,QAASA,EACTl/E,MAAOA,EACPkuP,UAAWA,EACXC,UAAWA,EACXU,WAAYA,GAIhB,IAAIxxP,GAAO,GACPX,GAAO,KACPoyP,GAAO,CACTC,QAAS,SAAUC,GACbA,IACFtyP,GAAOsyP,EACP/8P,KAAKkyC,MAAMlyC,KAAKoL,KAAK2xP,IAAuC,QAA5B/8P,KAAKoL,KAAK2xP,GAASC,OAGvDC,QAAS,WACP,OAAOxyP,IAETynC,KAAK,EACL9kC,IAAK,SAAU3C,EAAMkb,GACnB,IAAI2jI,EAAWl+I,GAAKX,GAIpB,IAAK,IAAInG,KAHJglJ,IACHl+I,GAAKX,GAAQ6+I,EAAW,IAET3jI,EACf2jI,EAAShlJ,GAAQqhB,EAAMrhB,GAEzBtE,KAAK88P,QAAQryP,IAEf/G,UAAW,SAAUiI,GACnB,IAAI29I,EAAWl+I,GAAKX,KAAS,GACzBnC,EAAW,SAAUyd,GACvB,OAAI9f,GAAMjC,GAAG+hB,EAAK,YACT3d,OAAOC,UAAUC,SAASC,KAAKwd,GAEhCoiC,EAAQpiC,GAAkB,GAAX,GAAKA,GAE1BoiC,EAAU,SAAUx8C,GACtB,MAAgB,KAATA,GAAwB,OAATA,GAAiB1F,GAAMjC,GAAG2H,EAAM,cAEpDuxP,EAAc,SAAUvxP,GAE1B,OADAA,EAAOrD,EAASqD,GACT1F,GAAM0oM,OAAOrlD,EAAU39I,GAAQrD,EAASghJ,EAAS39I,IAASA,GAEnE,GAAIw8C,EAAQx8C,GACV,MAAO,GAET,GAAI1F,GAAMjC,GAAG2H,EAAM,WAAa1F,GAAM0oM,OAAOhjM,EAAM,OACjD,OAAOrD,EAASqD,EAAKi9D,KAEvB,GAAI3iE,GAAMjC,GAAG2H,EAAM,SAAU,CAC3B,IAAI6vB,EAAW7vB,EAAKc,MAAM,GAC1Bd,EAAOuxP,EAAYvxP,EAAK,IAAIzD,QAAQ,iBAAiB,SAAU6gB,EAAIC,GACjE,OAAO/iB,GAAM0oM,OAAOnzK,EAAUxS,GAAM1gB,EAASkzB,EAASxS,IAAOD,KAGjE,OAAOm0O,EAAYvxP,GAAMzD,QAAQ,iBAAkB,KAErDkD,KAAMA,IAGJinN,GAAgBlB,GAAakB,cAC7B8qC,GAAoB,SAAUC,EAAWn6G,GAC3C,IAAK,IAAI3+I,KAAQ+tN,GAAcnsM,KAAM,CACnC,IAAIm3O,EAAWhrC,GAAcnsM,KAAK5hB,GAAQ,UAAY2+I,EAAS,MAC/D,GAAIo6G,IAAaD,EACf,OAAO94P,EAGX,OAAO,MAELg5P,GAAqB,SAAUj3P,EAAQkJ,GACzC,IAAIo4D,EAASw1L,GAAkB5tP,EAAKlJ,EAAO48I,QAC3C,OAAOt7E,EAASk1L,GAAKn5P,UAAU,CAC7B,0CACAikE,EACAp4D,IACGstP,GAAKn5P,UAAU,CAClB,iCACA6L,KAGA47D,GAAsB,SAAU9kE,EAAQwH,GAC1CxH,EAAO4xC,oBAAoBjlC,KAAK,CAC9BlL,KAAM,QACN6D,KAAMkC,KAGNmqC,GAAe,SAAU3xC,EAAQwH,GAC/BxH,EAAOk3P,YACTpyL,GAAoB9kE,EAAQwH,GAE5BxH,EAAOsO,GAAG,cAAc,WACtBw2D,GAAoB9kE,EAAQwH,OAI9B2vP,GAAc,SAAUn3P,EAAQwH,GAClCmqC,GAAa3xC,EAAQw2P,GAAKn5P,UAAU,CAClC,8BACAmK,MAGA4vP,GAAkB,SAAUp3P,EAAQkJ,GACtCyoC,GAAa3xC,EAAQi3P,GAAmBj3P,EAAQkJ,KAE9CmuP,GAAkB,SAAUr3P,EAAQ/B,EAAM+nD,GAC5C,IAAIx+C,EAAUgvP,GAAKn5P,UAAU,CAC3B,mCACAY,IAEFq5P,GAAU9vP,EAASw+C,GACnBrU,GAAa3xC,EAAQwH,IAEnB8vP,GAAY,SAAU9vP,GAExB,IADA,IAAIqO,EAAI,GACC8F,EAAK,EAAGA,EAAK7Y,UAAUC,OAAQ4Y,IACtC9F,EAAE8F,EAAK,GAAK7Y,UAAU6Y,GAExB,IAAI2wC,EAAUptD,EAAW4B,OAAOwrD,QAC5BA,IACEA,EAAQt2B,MACVs2B,EAAQt2B,MAAMnvB,MAAMylD,EAASxpD,WAE7BwpD,EAAQyW,IAAIl8D,MAAMylD,EAASxpD,aAI7By0P,GAAgB,CAClBH,gBAAiBA,GACjBC,gBAAiBA,GACjBF,YAAaA,GACbxlN,aAAcA,GACd2lN,UAAWA,IAGTE,GAAkB1sC,GAAakB,cAE/BC,GAAenB,GAAamB,aAEhC,SAAS91L,KACP,IAAIpa,EAAIknB,GAASrmB,SAAS,kBAC1B,OAAO,IAAIb,EAGb,SAASyoC,GAAUizM,EAAcx3P,GAC/B,IAAIy3P,EAAkB,GAClBrzM,EAAW,SAAUC,EAAOC,GAC9B,OAAID,EACKA,EAAMziD,QAAQ,MAAO,IAAM,IAAM0iD,EAAM1iD,QAAQ,MAAO,IAExD0iD,GAELE,EAAiB,SAAUpS,EAAUoE,EAASiO,EAASC,GACzD,IAAIzuB,EAAK0uB,EACT1uB,EAAMC,KACND,EAAIvpB,KAAK,OAAQ1M,EAASiJ,KAC1BgtB,EAAIuZ,gBAAkBxvC,EAAS4kD,YAC/B3uB,EAAI4uB,OAAOC,WAAa,SAAUj3C,GAChC62C,EAAS72C,EAAEioB,OAASjoB,EAAEk3C,MAAQ,MAEhC9uB,EAAIM,QAAU,WACZkuB,EAAQ,2DAA6DxuB,EAAII,SAE3EJ,EAAIG,OAAS,WACX,IAAIiZ,EACApZ,EAAII,OAAS,KAAOJ,EAAII,QAAU,IACpCouB,EAAQ,eAAiBxuB,EAAII,SAG/BgZ,EAAOpqC,KAAKuC,MAAMyuB,EAAI+uB,cACjB3V,GAAiC,kBAAlBA,EAAK4V,SAIzBzO,EAAQ4N,EAASpkD,EAASklD,SAAU7V,EAAK4V,WAHvCR,EAAQ,iBAAmBxuB,EAAI+uB,gBAKnCL,EAAW,IAAI1lD,EAAWkmD,SAC1BR,EAAS91C,OAAO,OAAQujC,EAAS7c,OAAQ6c,EAAS1tC,YAClDuxB,EAAIU,KAAKguB,IAEP+yM,EAAW,WACb,OAAO,IAAIz0D,IAAW,SAAUrjM,GAC9BA,EAAQ,QAGR+3P,EAAiB,SAAUvlN,EAAUnpC,GACvC,MAAO,CACLA,IAAKA,EACLmpC,SAAUA,EACV/b,QAAQ,IAGRuhO,EAAiB,SAAUxlN,EAAUrc,GACvC,MAAO,CACL9sB,IAAK,GACLmpC,SAAUA,EACV/b,QAAQ,EACRN,MAAOA,IAGP8hO,EAAiB,SAAU1kN,EAAS11C,GACtCkC,GAAM4O,KAAKkpP,EAAgBtkN,IAAU,SAAUvzC,GAC7CA,EAAQnC,aAEHg6P,EAAgBtkN,IAErB2kN,EAAiB,SAAU1lN,EAAUiT,EAAS0yM,GAEhD,OADAP,EAAaQ,YAAY5lN,EAASe,WAC3B,IAAI8vJ,IAAW,SAAUrjM,GAC9B,IAAIw1P,EAAc1wM,EACdppC,EAAO,aAEX,IACE,IAAI28O,EAAsB,WACpB7C,IACFA,EAAa3tP,QACbi9C,EAAWppC,IAGXk7B,EAAU,SAAUvtC,GACtBgvP,IACAT,EAAaU,aAAa9lN,EAASe,UAAWlqC,GAC9C4uP,EAAezlN,EAASe,UAAWwkN,EAAevlN,EAAUnpC,IAC5DrJ,EAAQ+3P,EAAevlN,EAAUnpC,KAE/Bw7C,EAAU,SAAU1uB,GACtBkiO,IACAT,EAAaW,aAAa/lN,EAASe,WACnC0kN,EAAezlN,EAASe,UAAWykN,EAAexlN,EAAUrc,IAC5Dn2B,EAAQg4P,EAAexlN,EAAUrc,KAEnC2uB,EAAW,SAAU0zM,GACfA,EAAU,GAAKA,EAAU,MAGxBhD,IACHA,EAAe2C,KAEjB3C,EAAaF,YAAY91P,MAAMg5P,KAEjC/yM,EAAQjT,EAAUoE,EAASiO,EAASC,GACpC,MAAO9vB,GACPh1B,EAAQg4P,EAAexlN,EAAUxd,EAAGrtB,eAItC+9C,EAAmB,SAAUD,GAC/B,OAAOA,IAAYb,GAEjB6zM,EAAwB,SAAUjmN,GACpC,IAAIe,EAAUf,EAASe,UACvB,OAAO,IAAI8vJ,IAAW,SAAUrjM,GAC9B63P,EAAgBtkN,GAAWskN,EAAgBtkN,IAAY,GACvDskN,EAAgBtkN,GAAS3sC,KAAK5G,OAG9B04P,EAAc,SAAUC,EAAWR,GAIrC,OAHAQ,EAAY54P,GAAM4rB,KAAKgtO,GAAW,SAAUnmN,GAC1C,OAAQolN,EAAagB,WAAWpmN,EAASe,cAEpC8vJ,GAAWp8L,IAAIlH,GAAMgC,IAAI42P,GAAW,SAAUnmN,GACnD,OAAOolN,EAAaiB,UAAUrmN,EAASe,WAAaklN,EAAsBjmN,GAAY0lN,EAAe1lN,EAAUpyC,EAASqlD,QAAS0yM,QAGjIlzM,EAAS,SAAU0zM,EAAWR,GAChC,OAAQ/3P,EAASiJ,KAAOq8C,EAAiBtlD,EAASqlD,SAAWqyM,IAAaY,EAAYC,EAAWR,IAKnG,OAHqC,IAAjC55O,EAAWne,EAASqlD,WACtBrlD,EAASqlD,QAAUb,GAEd,CAAEK,OAAQA,GAGnB,SAASvsB,KACP,IAAIxc,EAAIknB,GAASrmB,SAAS,cAC1B,OAAO,IAAIb,EAGb,SAAS4b,GAAYi2C,GACnB,IAAI7xD,EAAIknB,GAASrmB,SAAS,cAC1B,OAAO,IAAIb,EAAE6xD,GAGf,IAAI+qL,GAA0B,SAAUv1P,GACtC,IAAI2Y,EAAIknB,GAASrmB,SAAS,yBAC1Bb,EAAE3Y,IAEA+zB,GAAO,SAAUH,GACnB,IAAIjb,EAAIknB,GAASrmB,SAAS,QAC1B,OAAOb,EAAEib,IAEP4hO,GAAS,CACXzhO,KAAMA,GACNgsK,sBAAuBw1D,IAGrBE,GAAgB,SAAU3vP,GAC5B,OAAO,IAAIg6L,IAAW,SAAUrjM,EAAS8zB,GACvC,IAAImlO,EAAkB,WACpBnlO,EAAO,kBAAoBzqB,EAAM,2DAEnC,IACE,IAAIgtB,EAAMC,KACVD,EAAIvpB,KAAK,MAAOzD,GAAK,GACrBgtB,EAAIE,aAAe,OACnBF,EAAIG,OAAS,WACS,MAAhB18B,KAAK28B,OACPz2B,EAAQlG,KAAK48B,UAEbuiO,KAGJ5iO,EAAIM,QAAUsiO,EACd5iO,EAAIU,OACJ,MAAO/B,GACPikO,SAIFC,GAAe,SAAUjiO,GAC3B,IAAIr1B,EAAM+K,EACNwsP,EAAWC,mBAAmBniO,GAAK98B,MAAM,KAK7C,OAJAwS,EAAU,eAAexP,KAAKg8P,EAAS,IACnCxsP,IACF/K,EAAO+K,EAAQ,IAEV,CACL/K,KAAMA,EACNsD,KAAMi0P,EAAS,KAGf3jO,GAAgB,SAAUyB,GAC5B,OAAO,IAAIosK,IAAW,SAAUrjM,GAC9B,IAAImG,EAAK4nE,EAAKvqE,EACV21P,EAAWD,GAAajiO,GAC5B,IACE9wB,EAAM4yP,GAAOzhO,KAAK6hO,EAASj0P,MAC3B,MAAO+I,IAEP,YADAjO,EAAQ,IAAIX,EAAW04B,KAAK,KAI9B,IADAg2C,EAAMj2C,GAAW3xB,EAAIjD,QAChBM,EAAI,EAAGA,EAAIuqE,EAAI7qE,OAAQM,IAC1BuqE,EAAIvqE,GAAK2C,EAAIwoB,WAAWnrB,GAE1BxD,EAAQ,IAAIX,EAAW04B,KAAK,CAACg2C,GAAM,CAAEnsE,KAAMu3P,EAASv3P,YAGpDy3P,GAAY,SAAUhwP,GACxB,OAA6B,IAAzBA,EAAIrB,QAAQ,SACPgxP,GAAc3vP,GAEM,IAAzBA,EAAIrB,QAAQ,SACPwtB,GAAcnsB,GAEhB,MAELmvB,GAAgB,SAAU7C,GAC5B,OAAO,IAAI0tK,IAAW,SAAUrjM,GAC9B,IAAIy4B,EAASC,KACbD,EAAOE,UAAY,WACjB34B,EAAQy4B,EAAO56B,SAEjB46B,EAAOG,cAAcjD,OAGrB2jO,GAAc,CAChBD,UAAWA,GACX7gO,cAAeA,GACf0gO,aAAcA,IAGZjjP,GAAQ,EACRC,GAAW,SAAU7E,GACvB,OAAQA,GAAU,UAAY4E,MAE5BsjP,GAAkB,SAAU7mN,EAAWhK,EAAK1oC,EAAS8zB,GACvD,IAAIqD,EAAQqb,EACZ,GAAiC,IAA7B9J,EAAI5W,IAAI9pB,QAAQ,SAsBlB,OArBAwqC,EAAWE,EAAUC,SAASjK,EAAI5W,UAC9B0gB,EACFxyC,EAAQ,CACNmzB,MAAOuV,EACP8J,SAAUA,IAGZ8mN,GAAYD,UAAU3wN,EAAI5W,KAAK4C,MAAK,SAAUiB,GAC5C2jO,GAAY9gO,cAAc7C,GAAMjB,MAAK,SAAU8kO,GAC7CriO,EAASmiO,GAAYJ,aAAaM,GAASt0P,KAC3CstC,EAAWE,EAAU1iC,OAAOkG,KAAYyf,EAAMwB,GAC9Cub,EAAUxrC,IAAIsrC,GACdxyC,EAAQ,CACNmzB,MAAOuV,EACP8J,SAAUA,UAGb,SAAU2T,GACXryB,EAAOqyB,OAKbhvB,EAASmiO,GAAYJ,aAAaxwN,EAAI5W,KAAK5sB,KAC3CstC,EAAWE,EAAU+/B,WAAU,SAAUC,GACvC,OAAOA,EAAev7C,WAAaA,KAEjCqb,EACFxyC,EAAQ,CACNmzB,MAAOuV,EACP8J,SAAUA,IAGZ8mN,GAAYD,UAAU3wN,EAAI5W,KAAK4C,MAAK,SAAUiB,GAC5C6c,EAAWE,EAAU1iC,OAAOkG,KAAYyf,EAAMwB,GAC9Cub,EAAUxrC,IAAIsrC,GACdxyC,EAAQ,CACNmzB,MAAOuV,EACP8J,SAAUA,OAEX,SAAU2T,GACXryB,EAAOqyB,OAITszM,GAAe,SAAU1xP,GAC3B,OAAOA,EAAMsjE,GAAOtjE,EAAIoI,qBAAqB,QAAU,IAEzD,SAASupP,GAAc9B,EAAcllN,GACnC,IAAIinN,EAAiB,GACjB5sC,EAAU,SAAUhlN,EAAKqmB,GAC3B,IAAI4kD,EACC5kD,IACHA,EAAYxjB,GAAS,IAEvBooE,EAAStkE,EAAO+qP,GAAa1xP,IAAM,SAAU2gC,GAC3C,IAAI5W,EAAM4W,EAAI5W,IACd,QAAKgxK,GAAIjB,WAGLn5J,EAAIyW,aAAa,qBAGjBzW,EAAIyW,aAAa,6BAGhBrtB,GAAOA,IAAQgxK,GAAIvgI,kBAGK,IAAzBzwC,EAAI9pB,QAAQ,UACN4vP,EAAagB,WAAW9mO,IAAQ1D,EAAUsa,GAEvB,IAAzB5W,EAAI9pB,QAAQ,UACPomB,EAAUsa,UAIrB,IAAIkxN,EAAW73P,EAAIixE,GAAQ,SAAUtqC,GACnC,GAAIixN,EAAejxN,EAAI5W,KACrB,OAAO,IAAIuxK,IAAW,SAAUrjM,GAC9B25P,EAAejxN,EAAI5W,KAAK4C,MAAK,SAAUmlO,GACrC,GAAyB,kBAAdA,EACT,OAAOA,EAET75P,EAAQ,CACNmzB,MAAOuV,EACP8J,SAAUqnN,EAAUrnN,iBAK5B,IAAIsnN,EAAa,IAAIz2D,IAAW,SAAUrjM,EAAS8zB,GACjDylO,GAAgB7mN,EAAWhK,EAAK1oC,EAAS8zB,MACxCY,MAAK,SAAU72B,GAEhB,cADO87P,EAAe97P,EAAOs1B,MAAMrB,KAC5Bj0B,KACNo3B,OAAM,SAAUkB,GAEjB,cADOwjO,EAAejxN,EAAI5W,KACnBqE,KAGT,OADAwjO,EAAejxN,EAAI5W,KAAOgoO,EACnBA,KAET,OAAOz2D,GAAWp8L,IAAI2yP,IAExB,MAAO,CAAE7sC,QAASA,GAGpB,IAAIv7K,GAAU,EACVg5J,GAAO,WACT,IAAIuvD,EAAM,WACR,OAAOt5P,KAAKu9B,MAAsB,WAAhBv9B,KAAK6hG,UAAuBlgG,SAAS,KAErDjD,GAAM,IAAIqS,MAAOC,UACrB,MAAO,IAAMtS,EAAIiD,SAAS,IAAM23P,IAAQA,IAAQA,KAE9CC,GAAO,SAAU3oP,GACnB,OAAOA,EAASmgC,KAAYg5J,MAE1ByvD,GAAO,CAAED,KAAMA,IAEnB,SAASE,KACP,IAAI5pL,EAAQ,GACR6pL,EAAY,SAAU9qI,GACxB,IAAIT,EAAQ,CACV,aAAc,MACd,YAAa,MACb,YAAa,MACb,YAAa,OAEf,OAAOA,EAAMS,EAAKhrG,gBAAkB,OAElCrU,EAAS,SAAU/N,EAAG0zB,EAAMwB,EAAQryB,GACtC,GAAIglD,EAAS7nD,GAAI,CACf,IAAIQ,EAAKR,EACT,OAAOm4P,EAAW,CAChB33P,GAAIA,EACJrE,KAAM0G,EACN6wB,KAAMA,EACNwB,OAAQA,IAEL,GAAIu/D,EAASz0F,GAClB,OAAOm4P,EAAWn4P,GAElB,MAAM,IAAIgb,MAAM,uBAGhBm9O,EAAa,SAAUn4P,GACzB,IAAIQ,EAAIrE,EACR,IAAK6D,EAAE0zB,OAAS1zB,EAAEk1B,OAChB,MAAM,IAAIla,MAAM,wFAIlB,OAFAxa,EAAKR,EAAEQ,IAAMw3P,GAAKD,KAAK,UACvB57P,EAAO6D,EAAE7D,MAAQqE,EACV,CACLA,GAAImI,EAASnI,GACbrE,KAAMwM,EAASxM,GACf0G,SAAU8F,EAASxM,EAAO,IAAM+7P,EAAUl4P,EAAE0zB,KAAK/zB,OACjD+zB,KAAM/qB,EAAS3I,EAAE0zB,MACjBwB,OAAQvsB,EAAS3I,EAAEk1B,QACnBoc,QAAS3oC,EAAS3I,EAAEsxC,SAAW1d,GAAIC,gBAAgB7zB,EAAE0zB,OACrDsB,IAAKrsB,EAAS3I,EAAEg1B,OAGhB/vB,EAAM,SAAUsrC,GACb/yC,EAAI+yC,EAAS/vC,OAChB6tE,EAAM1pE,KAAK4rC,IAGX/yC,EAAM,SAAUgD,GAClB,OAAOgwE,GAAU,SAAUC,GACzB,OAAOA,EAAejwE,OAASA,MAG/BgwE,EAAY,SAAUrkD,GACxB,OAAO1f,EAAO4hE,EAAOliD,GAAW,IAE9BukB,EAAW,SAAUY,GACvB,OAAOk/B,GAAU,SAAUjgC,GACzB,OAAOA,EAASe,YAAcA,MAG9B8mN,EAAc,SAAU9mN,GAC1B+8B,EAAQ5hE,EAAO4hE,GAAO,SAAU99B,GAC9B,OAAIA,EAASe,YAAcA,IACzB1d,GAAIgD,gBAAgB2Z,EAASe,YACtB,OAKTvL,EAAU,WACZr5B,EAAK2hE,GAAO,SAAUoC,GACpB78C,GAAIgD,gBAAgB65C,EAAen/B,cAErC+8B,EAAQ,IAEV,MAAO,CACLtgE,OAAQA,EACR9I,IAAKA,EACLzH,IAAKA,EACLkzC,SAAUA,EACV8/B,UAAWA,EACX4nL,YAAaA,EACbryN,QAASA,GAIb,SAASsyN,KACP,IAAIC,EAAU,EAAGC,EAAW,EACxBC,EAAkB,GAClBC,EAAe,SAAUjkO,EAAQkkO,GACnC,MAAO,CACLlkO,OAAQA,EACRkkO,UAAWA,IAGXC,EAAa,SAAUrnN,GACzB,OAAOA,KAAWknN,GAEhBI,EAAe,SAAUtnN,GAC3B,IAAI11C,EAAS48P,EAAgBlnN,GAC7B,OAAO11C,EAASA,EAAO88P,UAAY,MAEjC9B,EAAY,SAAUtlN,GACxB,QAAOqnN,EAAWrnN,IAAWknN,EAAgBlnN,GAAS9c,SAAW8jO,GAE/D3B,EAAa,SAAUrlN,GACzB,QAAOqnN,EAAWrnN,IAAWknN,EAAgBlnN,GAAS9c,SAAW+jO,GAE/DpC,EAAc,SAAU7kN,GAC1BknN,EAAgBlnN,GAAWmnN,EAAaH,EAAS,OAE/CjC,EAAe,SAAU/kN,EAASonN,GACpCF,EAAgBlnN,GAAWmnN,EAAaF,EAAUG,IAEhDpC,EAAe,SAAUhlN,UACpBknN,EAAgBlnN,IAErBvL,EAAU,WACZyyN,EAAkB,IAEpB,MAAO,CACLG,WAAYA,EACZC,aAAcA,EACdhC,UAAWA,EACXD,WAAYA,EACZR,YAAaA,EACbE,aAAcA,EACdC,aAAcA,EACdvwN,QAASA,GAIb,SAAS8yN,GAAc36P,GACrB,IACI4lD,EAAUg1M,EADVroN,EAAYwnN,KAEZtC,EAAe0C,KACfU,EAAa,GACbC,EAAa,SAAU13P,GACzB,OAAO,SAAU1F,GACf,OAAIsC,EAAOuL,UACFnI,EAAS1F,GAEX,KAGPq9P,EAAmB,WACrB,MAAO,KAAM,IAAI1pP,MAAOC,WAEtB0pP,EAAgB,SAAUt5P,EAASowD,EAAQjwD,GAC7C,IAAIsE,EAAQ,EACZ,GACEA,EAAQzE,EAAQmG,QAAQiqD,EAAQ3rD,IACjB,IAAXA,IACFzE,EAAUA,EAAQojB,UAAU,EAAG3e,GAAStE,EAAUH,EAAQ4nB,OAAOnjB,EAAQ2rD,EAAO/uD,QAChFoD,GAAStE,EAAQkB,OAAS+uD,EAAO/uD,OAAS,UAE1B,IAAXoD,GACT,OAAOzE,GAELu5P,EAAkB,SAAUv5P,EAASq1P,EAAWmE,GAGlD,OAFAx5P,EAAUs5P,EAAct5P,EAAS,QAAUq1P,EAAY,IAAK,QAAUmE,EAAiB,KACvFx5P,EAAUs5P,EAAct5P,EAAS,iBAAmBq1P,EAAY,IAAK,iBAAmBmE,EAAiB,KAClGx5P,GAELy5P,EAAwB,SAAUpE,EAAWmE,GAC/C1sP,EAAKxO,EAAO0L,YAAY3G,MAAM,SAAUkN,GACnB,eAAfA,EAAMxQ,KACRwQ,EAAMmpP,UAAYx5P,EAAIqQ,EAAMmpP,WAAW,SAAUluM,GAC/C,OAAO+tM,EAAgB/tM,EAAU6pM,EAAWmE,MAG9CjpP,EAAMvQ,QAAUu5P,EAAgBhpP,EAAMvQ,QAASq1P,EAAWmE,OAI5DlD,EAAmB,WACrB,OAAOh4P,EAAO4xC,oBAAoBjlC,KAAK,CACrCrH,KAAMtF,EAAO3C,UAAU,sBACvBoE,KAAM,OACN4qE,SAAU,EACV8oL,aAAa,KAGbkG,EAAkB,SAAUroO,EAAOwnO,GACrCjoN,EAAU2nN,YAAYlnO,EAAMrB,KAC5BwpO,EAAsBnoO,EAAMrB,IAAK6oO,GACjCx6P,EAAOgM,EAAEgnB,GAAOrkB,KAAK,CACnB,IAAO9N,GAASqpO,oBAAoBlqO,GAAUw6P,EAAYO,IAAqBP,EAC/E,eAAgBx6P,EAAO4jD,WAAW42M,EAAW,UAG7Cc,EAAe,SAAUl4P,GAS3B,OARKwiD,IACHA,EAAWpB,GAASizM,EAAc,CAChCvuP,IAAKrI,GAASupO,kBAAkBpqO,GAChCmlD,SAAUtkD,GAASwpO,uBAAuBrqO,GAC1C6kD,YAAahkD,GAASypO,2BAA2BtqO,GACjDslD,QAASzkD,GAAS0pO,uBAAuBvqO,MAGtCu7P,IAAgBhnO,KAAKumO,GAAW,SAAUU,GAC/C,IAAIhD,EAIJ,OAHAA,EAAY52P,EAAI45P,GAAY,SAAU9B,GACpC,OAAOA,EAAUrnN,YAEZuT,EAASd,OAAO0zM,EAAWR,GAAkBzjO,KAAKumO,GAAW,SAAUp9P,GAC5E,IAAI+9P,EAAiB75P,EAAIlE,GAAQ,SAAUg+P,EAAYv1P,GACrD,IAAI6sB,EAAQwoO,EAAWr1P,GAAO6sB,MAM9B,OALI0oO,EAAWplO,QAAUz1B,GAASspO,sBAAsBnqO,GACtDq7P,EAAgBroO,EAAO0oO,EAAWxyP,KACzBwyP,EAAW1lO,OACpBuhO,GAAcJ,YAAYn3P,EAAQ07P,EAAW1lO,OAExC,CACLpyB,QAASovB,EACTsD,OAAQolO,EAAWplO,WAMvB,OAHIlzB,GACFA,EAASq4P,GAEJA,WAIT7oN,EAAmB,SAAUxvC,GAC/B,GAAIvC,GAASopO,0BAA0BjqO,GACrC,OAAOs7P,EAAal4P,IAGpB4uE,EAAsB,SAAUl0B,GAClC,IAES,IAFLxgC,GAAOu9O,GAAY,SAAUtsP,GAC7B,OAAOA,EAAOuvC,MAEhB,OAAO,EAET,GAAoD,IAAhDA,EAAOtmC,aAAa,OAAO3P,QAAQ,SAAgB,CACrD,IAAI8zP,EAAgB96P,GAASmpO,uBAAuBhqO,GACpD,OAAO27P,EAAc79M,GAEvB,OAAO,GAEL89M,EAAY,SAAUrtP,GACxBssP,EAAWp0P,KAAK8H,IAEdgtP,EAAgB,WAIlB,OAHKX,IACHA,EAAerB,GAAa9B,EAAcllN,IAErCqoN,EAAahuC,QAAQ5sN,EAAO0T,UAAWs+D,GAAqBz9C,KAAKumO,GAAW,SAAUp9P,GAa3F,OAZAA,EAAS6Q,EAAO7Q,GAAQ,SAAUm+P,GAChC,MAA0B,kBAAfA,IACTtE,GAAc5lN,aAAa3xC,EAAQ67P,IAC5B,MAIXrtP,EAAK9Q,GAAQ,SAAUm+P,GACrBV,EAAsBU,EAAW7oO,MAAMrB,IAAKkqO,EAAWxpN,SAASe,WAChEyoN,EAAW7oO,MAAMrB,IAAMkqO,EAAWxpN,SAASe,UAC3CyoN,EAAW7oO,MAAMic,gBAAgB,mBAE5BvxC,OAGPmqC,EAAU,WACZ0K,EAAU1K,UACV4vN,EAAa5vN,UACb+yN,EAAeh1M,EAAW,MAExBk2M,EAAkB,SAAUp6P,GAC9B,OAAOA,EAAQG,QAAQ,uBAAuB,SAAUpD,EAAO20C,GAC7D,IAAIonN,EAAY/C,EAAaiD,aAAatnN,GAC1C,GAAIonN,EACF,MAAO,QAAUA,EAAY,IAE/B,IAAInoN,EAAWE,EAAUC,SAASY,GAMlC,GALKf,IACHA,EAAW6X,EAAMlqD,EAAOktP,cAAc5tP,OAAO,SAAU5B,EAAQsC,GAC7D,OAAOtC,GAAUsC,EAAOsyC,cAAgBtyC,EAAOsyC,aAAaC,UAAUC,SAASY,KAC9E,OAEDf,EAAU,CACZ,IAAI7c,EAAO6c,EAAS7c,OACpB,MAAO,aAAeA,EAAK/zB,KAAO,WAAa4wC,EAASrb,SAAW,IAErE,OAAOv4B,MAiCX,OA9BAuB,EAAOsO,GAAG,cAAc,WAClBzN,GAASopO,0BAA0BjqO,GACrC4yC,IAEA2oN,OAGJv7P,EAAOsO,GAAG,kBAAkB,SAAUR,GACpCA,EAAEpM,QAAUo6P,EAAgBhuP,EAAEpM,YAEhC1B,EAAOsO,GAAG,cAAc,SAAUR,GAC5BA,EAAE8Y,aAA4B,QAAb9Y,EAAEmG,SAGvBnG,EAAEpM,QAAUo6P,EAAgBhuP,EAAEpM,aAEhC1B,EAAOsO,GAAG,cAAc,WACtBtO,EAAO4mD,OAAOC,cAAc,OAAO,SAAUgsB,GAC3CrkE,EAAKqkE,GAAQ,SAAUtqC,GACrB,IAAI5W,EAAM4W,EAAI55B,KAAK,OACnB,IAAI4jC,EAAUC,SAAS7gB,GAAvB,CAGA,IAAI6oO,EAAY/C,EAAaiD,aAAa/oO,GACtC6oO,GACFjyN,EAAI55B,KAAK,MAAO6rP,aAKjB,CACLjoN,UAAWA,EACXqpN,UAAWA,EACXN,aAAcA,EACd1oN,iBAAkBA,EAClB2oN,cAAeA,EACf1zN,QAASA,GAIb,IAAIk0N,GAAiB,SAAU5zM,EAAe78C,GAC5C,OAAO68C,EAAchmD,eAAemJ,EAAKnH,WAEvC63P,GAAgB,SAAU7zM,EAAe78C,GAC3C,QAAIm9C,GAAS/9B,OAAOpf,MAETm9C,GAASqM,UAAUxpD,MACpBywP,GAAe5zM,EAAe78C,KAAUgzN,GAAUniK,eAAe7wD,KAKzE2wP,GAAiB,SAAU9zM,EAAevlD,EAAM0I,GAClD,OAAO+R,EAAO+wN,GAAQjtK,QAAQtU,GAAQN,QAAQjhD,GAAOuhD,GAAQN,QAAQ3pD,KAAQ,SAAUgF,GACrF,OAAOm0P,GAAe5zM,EAAevgD,EAAIgE,WAGzCswP,GAAuB,SAAU/zM,EAAe78C,GAClD,GAAIm9C,GAAS/9B,OAAOpf,GAAO,CACzB,GAA8B,IAA1BA,EAAKgxH,UAAUv5H,OACjB,OAAO,EACF,GAAI,QAAQiB,KAAKsH,EAAKgxH,cAAgBhxH,EAAKqgB,aAAeowO,GAAe5zM,EAAe78C,EAAKqgB,cAClG,OAAO,EAGX,OAAO,GAELwwO,GAAgB,SAAUn8P,GAC5B,IAII0pB,EACAI,EAAgBG,EAAa++B,EAAc9+B,EAAWkyO,EACtDC,EAAU31P,EAAS0jP,EACnBkS,EAAcC,EAPdt8P,EAAWD,EAAOC,SAAU2L,EAAM5L,EAAO4L,IAAKL,EAAYvL,EAAOuL,UACjE81C,EAASrhD,EAAOqhD,OAAQ8G,EAAgB9G,EAAO2X,mBAC/C1tD,EAAOC,EAAU4I,WACjBk1D,EAAWrpE,EAAO0T,UAMtB,GADA6oP,EAAkBt8P,EAASi5D,kBACtB5tD,GAASm9C,GAASqM,UAAUxpD,IAAUixP,IAG3CD,EAAejzL,EAASllE,SAAS+f,cAC5Bm9B,EAAO+hK,aAAak5C,EAAcC,EAAgBr4O,iBAAkB+3O,GAAe9zM,EAAekhB,EAAU/9D,IAAjH,CAGAoe,EAAMne,EAAUugB,SAChBhC,EAAiBJ,EAAII,eACrBG,EAAcP,EAAIO,YAClB++B,EAAet/B,EAAIs/B,aACnB9+B,EAAYR,EAAIQ,UAChBkgO,EAAmBuJ,GAAYpmD,SAASvtM,GACxCsL,EAAO+9D,EAAS9xD,WAChB,MAAOjM,EACL,GAAI0wP,GAAc7zM,EAAe78C,GAAO,CACtC,GAAI4wP,GAAqB/zM,EAAe78C,GAAO,CAC7C+wP,EAAW/wP,EACXA,EAAOA,EAAKqgB,YACZ/f,EAAI+I,OAAO0nP,GACX,SAEGD,IACHA,EAAgBxwP,EAAIiE,OAAO0sP,EAAiBv8P,EAAOC,SAASk5D,yBAC5D7tD,EAAKpH,WAAW1B,aAAa45P,EAAe9wP,GAC5C5E,GAAU,GAEZ21P,EAAW/wP,EACXA,EAAOA,EAAKqgB,YACZywO,EAAcnsP,YAAYosP,QAE1BD,EAAgB,KAChB9wP,EAAOA,EAAKqgB,YAGZjlB,GAAW0jP,IACb1gO,EAAIW,SAASP,EAAgBG,GAC7BP,EAAIY,OAAO0+B,EAAc9+B,GACzB3e,EAAUwf,OAAOrB,GACjB1pB,EAAOyU,iBAGP+nP,GAAU,SAAUx8P,GAClBA,EAAOC,SAASi5D,mBAClBl5D,EAAOsO,GAAG,aAAckN,EAAM2gP,GAAen8P,KAG7Cy8P,GAAc,CAAEpuP,MAAOmuP,IAEvBE,GAAe,SAAUhzO,GAC3B,IAAIspI,EAAKtpI,EAAII,eAAgBgpM,EAAKppM,EAAIO,YACtC,OAAIw+B,GAAS/9B,OAAOsoI,GACJ,IAAP8/D,EAAWh1M,EAAOH,KAAKkvC,GAAQN,QAAQymG,IAAOl1I,EAAO5B,OAErD4B,EAAO5X,KAAK8sJ,EAAG17I,WAAWw7M,IAAKlxN,IAAIirD,GAAQN,UAGlDowM,GAAa,SAAUjzO,GACzB,IAAImpM,EAAKnpM,EAAIs/B,aAAc8xB,EAAKpxD,EAAIQ,UACpC,OAAIu+B,GAAS/9B,OAAOmoM,GACX/3I,IAAO+3I,EAAG9tN,KAAKhC,OAAS+a,EAAOH,KAAKkvC,GAAQN,QAAQsmK,IAAO/0M,EAAO5B,OAElE4B,EAAO5X,KAAK2sN,EAAGv7M,WAAWwjE,EAAK,IAAIl5E,IAAIirD,GAAQN,UAGtDqwM,GAAmB,SAAUtxP,GAC/B,OAAOiM,GAAWjM,GAAMkR,KAAK/R,EAAS,CAACa,KAAQ,SAAUkpD,GACvD,MAAO,CAAClpD,GAAMuQ,OAAO+gP,GAAiBpoM,QAGtCqoM,GAAoB,SAAUvxP,GAChC,OAAO08C,GAAU18C,GAAMkR,KAAK/R,EAAS,CAACa,KAAQ,SAAUkpD,GACtD,MAAoB,OAAhBv2D,GAAKu2D,GACAi1F,GAAYj1F,GAAO5yD,KAAI,SAAUk7D,GACtC,MAAO,CAACxxD,GAAMuQ,OAAOghP,GAAkB//L,OACtCpgD,MAAM,IAEF,CAACpR,GAAMuQ,OAAOghP,GAAkBroM,QAIzCsoM,GAAyB,SAAUl1P,EAAK8hB,GAC1C,OAAOojC,GAAM4vM,GAAahzO,GAAMizO,GAAWjzO,IAAM,SAAUsyC,EAAWC,GACpE,IAAI/zC,EAAQjZ,EAAK2tP,GAAiBh1P,GAAM4T,EAAMY,GAAI4/C,IAC9ClzC,EAAM7Z,EAAK4tP,GAAkBj1P,GAAM4T,EAAMY,GAAI6/C,IACjD,OAAO/zC,EAAMzL,UAAYqM,EAAIrM,YAC5BC,OAAM,IAEPqgP,GAAiB,SAAUnxP,EAAK8d,EAAKpe,EAAM4c,GAC7C,IAAItlB,EAAO0I,EAAMohB,EAAS,IAAI0rL,GAAW9sM,EAAM1I,GAC3C08M,EAAsB1zM,EAAIy1C,OAAOod,sBACrC,EAAG,CACD,GAAsB,IAAlBnzD,EAAKye,UAAwD,IAAtCnqB,GAAMgP,KAAKtD,EAAKgxH,WAAWv5H,OAMpD,YALImlB,EACFwB,EAAIW,SAAS/e,EAAM,GAEnBoe,EAAIY,OAAOhf,EAAMA,EAAKgxH,UAAUv5H,SAIpC,GAAIu8M,EAAoBh0M,EAAKnH,YAAc,YAAYH,KAAKsH,EAAKnH,UAU/D,YATI+jB,EACFwB,EAAI41D,eAAeh0E,GAEG,OAAlBA,EAAKnH,SACPulB,EAAI+iK,aAAanhL,GAEjBoe,EAAI8wC,YAAYlvD,IAKtB,GAAIq3L,GAAI3wK,IAAM2wK,GAAI3wK,GAAK,IAAMpmB,EAAIs8C,QAAQ58C,IAASM,EAAIk2C,QAAQx2C,GAM5D,YALI4c,EACFwB,EAAIW,SAAS/e,EAAM,GAEnBoe,EAAIY,OAAOhf,EAAM,UAIdA,EAAO4c,EAAQwE,EAAOC,OAASD,EAAOwvG,QACzB,SAAlBt5H,EAAKuB,WACH+jB,EACFwB,EAAIW,SAASznB,EAAM,GAEnB8mB,EAAIY,OAAO1nB,EAAMA,EAAK0U,WAAWvU,UAInCi6P,GAAe,SAAUh9P,GAC3B,IAAIi3C,EAAMj3C,EAAOuL,UAAUysO,SAC3B,OAAO/gM,GAAOA,EAAI45I,WAAa,GAGjC,SAASosE,GAAYj9P,GACnB,IAAI80E,EAASooL,EAAW,GACpBC,EAAoB,SAAU1gB,GAChC,IAAIp5O,EAAG+5P,EAEP,GADAA,EAAcp9P,EAAOgM,EAAEywO,GAAUpoC,aAAar0M,EAAO0T,WAAW3M,IAAI01O,GAChE2gB,EAAYr6P,SAAWm6P,EAASn6P,OAAQ,CAC1C,IAAKM,EAAI+5P,EAAYr6P,OAAQM,GAAK,EAAGA,IACnC,GAAI+5P,EAAY/5P,KAAO65P,EAAS75P,GAC9B,MAGJ,IAAW,IAAPA,EAEF,OADA65P,EAAWE,GACJ,EAIX,OADAF,EAAWE,GACJ,GAEH,sBAAuBp9P,EAAOmP,UAClCnP,EAAOsO,GAAG,wCAAwC,SAAUR,GAC1D,IAAIuvP,EAAWC,EACfD,EAAYr9P,EAAOuL,UAAUugB,SAC7BwxO,EAAU,CACRxzO,eAAgBuzO,EAAUvzO,eAC1BG,YAAaozO,EAAUpzO,YACvB++B,aAAcq0M,EAAUr0M,aACxB9+B,UAAWmzO,EAAUnzO,WAER,eAAXpc,EAAErM,MAA0B4jP,GAAarmB,KAAKs+B,EAASxoL,IACzD90E,EAAO8lC,KAAK,mBAEdgvC,EAAUwoL,KAGdt9P,EAAOsO,GAAG,eAAe,WACvBtO,EAAO8lC,KAAK,sBAEd9lC,EAAOsO,GAAG,mBAAmB,WAC3B,IAAImuO,EAAWz8O,EAAOuL,UAAU4I,UAAS,IACpCsoO,IAAa95C,GAAIrsH,OAASt2E,EAAOuL,UAAU0C,eAG5C+uP,GAAah9P,KAAYm9P,EAAkB1gB,IAAaz8O,EAAO4L,IAAI48C,UAAUi0L,EAAUz8O,EAAO0T,YAChG1T,EAAOyU,YAAY,CAAE8oP,iBAAiB,OAG1Cv9P,EAAOsO,GAAG,WAAW,SAAUR,IACxBA,EAAEi8D,sBAAwBizL,GAAah9P,KACE,QAAxCA,EAAOuL,UAAUC,UAAUrH,SAC7By/L,GAAM/0K,iBAAiB7uB,GAAQ,WAC7BA,EAAOyU,iBAGTzU,EAAOyU,kBAIb9a,KAAK8a,YAAc,SAAUjO,GAC3B,IACI8E,EAAM61D,EAASv+D,EADf2I,EAAYvL,EAAOuL,UAEnBvL,EAAOssP,aAAe/gP,IAAcvL,EAAOC,SAASu9P,qBAAuBx9P,EAAOwT,WACpF5Q,EAAO5C,EAAO0T,UACdpI,EAAOC,EAAU4I,UAAS,IAASvR,EAC/B0I,EAAK46B,gBAAkBlmC,EAAOmP,UAAanP,EAAO4L,IAAI48C,UAAUl9C,EAAM1I,KACxE0I,EAAO1I,GAETu+D,EAAU,GACVnhE,EAAO4L,IAAIoL,UAAU1L,GAAM,SAAUA,GACnC,GAAIA,IAAS1I,EACX,OAAO,EAETu+D,EAAQ16D,KAAK6E,MAEf9E,EAAOA,GAAQ,GACfA,EAAK5C,QAAU0H,EACf9E,EAAK26D,QAAUA,EACfnhE,EAAO8lC,KAAK,aAAct/B,KAKhC,IA4CIi3P,GA5CAC,GAAK,CACPt9L,UAAW,EACXC,OAAQ,GACRv5B,KAAM,GACNC,MAAO,GACPJ,KAAM,GACNC,MAAO,GACPI,SAAU,GACV45B,IAAK,EACL/5B,GAAI,GACJ49L,IAAK,GACLk5B,KAAM,GACNvvO,gBAAiB,SAAUtgB,GACzB,OAAOA,EAAEgzD,UAAYhzD,EAAEwsC,SAAWxsC,EAAEy6E,QAAU5uF,KAAKknE,eAAe/yD,IAEpE+yD,eAAgB,SAAU/yD,GACxB,OAAO60L,GAAI9jL,IAAM/Q,EAAE06E,QAAU16E,EAAEwsC,UAAYxsC,EAAEy6E,SAI7Cq1K,GAAqB,SAAUtyP,GACjC,IAAIuyP,EAAkB,SAAU7qC,GAC9B,OAAOpxN,EAAIoxN,GAAa,SAAUN,GAGhC,OAFAA,EAAar9J,GAAQq9J,GACrBA,EAAWpnN,KAAOA,EACXonN,MAGX,GAAIjqK,GAASqM,UAAUxpD,GACrB,OAAOuyP,EAAgBvyP,EAAKyhL,kBAE9B,GAAItkI,GAAS/9B,OAAOpf,GAAO,CACzB,IAAIoe,EAAMpe,EAAK46B,cAAc9b,cAG7B,OAFAV,EAAIW,SAAS/e,EAAM,GACnBoe,EAAIY,OAAOhf,EAAMA,EAAKvG,KAAKhC,QACpB86P,EAAgBn0O,EAAIqjK,oBAG3BA,GAAiB,SAAUzhL,GAC7B,OAAO4+C,EAAM5+C,GAAM,SAAU5N,EAAQ4N,GACnC,OAAO5N,EAAOme,OAAO+hP,GAAmBtyP,MACvC,MAIJ,SAAUmyP,GACTA,EAAWA,EAAW,OAAS,GAAK,KACpCA,EAAWA,EAAW,QAAU,GAAK,QAFvC,CAGEA,KAAeA,GAAa,KAC9B,IAAIK,GAAY,SAAU3wP,EAAWvK,EAAMmF,EAAauD,GACtD,MAAOA,EAAOiuN,GAASjuN,EAAM6B,EAAWqjN,GAA0B5tN,GAChE,GAAImF,EAAYuD,GACd,QAIFyyP,GAAY,SAAU5wP,EAAW6wP,EAAWC,EAAYr7P,EAAMmF,EAAaqrN,GAC7E,IAAc9nN,EAEV4yP,EAFAr8J,EAAO,EACPnkG,EAAS,GAETqJ,EAAM,SAAUuE,GAClB,IAAIjI,EAAGqvN,EAAYM,EAKnB,IAJAA,EAAcjmC,GAAe,CAACzhL,KACX,IAAf6B,IACF6lN,EAAcA,EAAYlnL,WAEvBzoC,EAAI,EAAGA,EAAI2vN,EAAYjwN,OAAQM,IAElC,GADAqvN,EAAaM,EAAY3vN,IACrB46P,EAAWvrC,EAAYwrC,GAA3B,CAOA,GAJIxgQ,EAAOqF,OAAS,GAAKi7P,EAAUtrC,EAAYrhB,GAASz7L,KAAKlY,KAC3DmkG,IAEF6wH,EAAW7wH,KAAOA,EACd95F,EAAY2qN,GACd,OAAO,EAETh1N,EAAO+I,KAAKisN,KAIhB,OADAwrC,EAAmB7sD,GAASz7L,KAAKw9M,EAAcrmC,kBAC1CmxE,GAGL5yP,EAAO8nN,EAAc5nN,UACrBzE,EAAIuE,GACJwyP,GAAU3wP,EAAWvK,EAAMmE,EAAKuE,GACzB5N,GALEA,GAOPygQ,GAAkB,SAAUC,EAAY1rC,GAC1C,OAAOA,EAAW7wH,KAAOu8J,GAEvBC,GAAe,SAAUD,EAAY1rC,GACvC,OAAOA,EAAW7wH,OAASu8J,GAEzBE,GAAU9iP,EAAMuiP,GAAWN,GAAWc,GAAIxtC,GAASE,IACnDutC,GAAYhjP,EAAMuiP,GAAWN,GAAWgB,KAAMxtC,GAASF,IACvD2tC,GAAiB,SAAUvxP,EAAWvK,EAAMmF,EAAauD,GAC3D,IACIqvN,EAAQgkC,EAAWX,EAAW5qC,EAEpBV,EAAYwrC,EAHtBj6B,EAAcrI,GAAYh5N,GAE1BlF,EAAS,GACTmkG,EAAO,EACP+8J,EAAgB,SAAUxrC,GAC5B,OACS/hB,GAASz7L,KAAKw9M,EAAcrmC,mBAIrB,IAAd5/K,GACFwtN,EAASsJ,EAAYt3M,KACrBgyO,EAAY1tC,GACZ+sC,EAAYjtC,GACZqC,EAAgBY,GAAgBztN,MAAM+E,KAEtCqvN,EAASsJ,EAAY/nG,KACrByiI,EAAY5tC,GACZitC,EAAY/sC,GACZmC,EAAgBY,GAAgBtxN,OAAO4I,IAEzC4yP,EAAmBU,EAAcxrC,GACjC,GACE,GAAKA,EAAcM,cAGnBhB,EAAaksC,EAAcxrC,IACvB4qC,EAAUtrC,EAAYwrC,IAA1B,CASA,GANIxgQ,EAAOqF,OAAS,GAAK47P,EAAUjsC,EAAYrhB,GAASz7L,KAAKlY,KAC3DmkG,IAEF6wH,EAAar9J,GAAQq9J,GACrBA,EAAW51K,SAAWs2K,EACtBV,EAAW7wH,KAAOA,EACd95F,EAAY2qN,GACd,OAAOh1N,EAETA,EAAO+I,KAAKisN,UACLU,EAAgBuH,EAAOvH,IAChC,OAAO11N,GAELmhQ,GAAc,SAAUT,GAC1B,OAAO,SAAU1rC,GACf,OAAOyrC,GAAgBC,EAAY1rC,KAGnCosC,GAAS,SAAUV,GACrB,OAAO,SAAU1rC,GACf,OAAO2rC,GAAaD,EAAY1rC,KAIhCqsC,GAA2Bt2M,GAAS60B,uBACpC0hL,GAAazlC,GACb0lC,GAAqB,SAAUvsC,EAAY15K,GAC7C,OAAO14C,KAAKyiH,IAAI2vG,EAAWprL,KAAO0R,IAEhCkmN,GAAsB,SAAUxsC,EAAY15K,GAC9C,OAAO14C,KAAKyiH,IAAI2vG,EAAWt8D,MAAQp9G,IAEjCmmN,GAAW,SAAUnmN,EAAS05K,GAChC,OAAO15K,GAAW05K,EAAWprL,MAAQ0R,GAAW05K,EAAWt8D,OAEzDgpG,GAAwB,SAAUpsC,EAAah6K,GACjD,OAAOq4J,GAAS9hK,OAAOyjL,GAAa,SAAUqsC,EAAe3sC,GAC3D,IAAI4sC,EAAaC,EAGjB,OAFAD,EAAch/P,KAAKC,IAAI0+P,GAAmBI,EAAermN,GAAUkmN,GAAoBG,EAAermN,IACtGumN,EAAcj/P,KAAKC,IAAI0+P,GAAmBvsC,EAAY15K,GAAUkmN,GAAoBxsC,EAAY15K,IAC5FmmN,GAASnmN,EAAS05K,GACbA,EAELysC,GAASnmN,EAASqmN,GACbA,EAELE,IAAgBD,GAAeP,GAAyBrsC,EAAWpnN,OAGnEi0P,EAAcD,EAFT5sC,EAKF2sC,MAGPG,GAAc,SAAUryP,EAAWvK,EAAMmF,EAAauD,GACxD,MAAOA,EAAO0zP,GAAW1zP,EAAM6B,EAAWqjN,GAA0B5tN,GAClE,GAAImF,EAAYuD,GACd,QAIFm0P,GAAoB,SAAU78P,EAAM88P,GACtC,IAAI1sC,EAAc,GACd3L,EAAU,SAAUs4C,EAAYr0P,GAClC,IAAIs0P,EAKJ,OAJAA,EAAYrxP,EAAOw+K,GAAe,CAACzhL,KAAQ,SAAUonN,GACnD,OAAQitC,EAAWjtC,EAAYgtC,MAEjC1sC,EAAcA,EAAYn3M,OAAO+jP,GACL,IAArBA,EAAU78P,QAKnB,OAHAiwN,EAAYvsN,KAAKi5P,GACjBF,GAAY/B,GAAWc,GAAI37P,EAAM4Y,EAAM6rM,EAAS0J,IAAU2uC,EAAep0P,MACzEk0P,GAAY/B,GAAWgB,KAAM77P,EAAM4Y,EAAM6rM,EAAS4J,IAAUyuC,EAAep0P,MACpE0nN,GAEL6sC,GAAsB,SAAUj9P,GAClC,OAAO2L,EAAO28D,GAAOtoE,EAAKoN,qBAAqB,MAAO6oN,KAEpDinC,GAAY,SAAUptC,EAAY15K,GACpC,MAAO,CACL1tC,KAAMonN,EAAWpnN,KACjB5I,OAAQu8P,GAAmBvsC,EAAY15K,GAAWkmN,GAAoBxsC,EAAY15K,KAGlF+mN,GAAe,SAAUn9P,EAAMo2C,EAASC,GAC1C,IAAI+mN,EACAC,EAAgClzE,GAAe8yE,GAAoBj9P,IACnEs9P,EAAkB3xP,EAAO0xP,GAA+B,SAAUt6N,GACpE,OAAOsT,GAAWtT,EAAK4B,KAAO0R,GAAWtT,EAAKoX,UAGhD,OADAijN,EAAkBZ,GAAsBc,EAAiBlnN,GACrDgnN,IACFA,EAAkBZ,GAAsBK,GAAkB78P,EAAMo9P,GAAkBhnN,GAC9EgnN,GAAmBnnC,GAAkBmnC,EAAgB10P,OAChDw0P,GAAUE,EAAiBhnN,GAG/B,MAGLmnN,GAAkB,SAAUnnN,EAASC,EAASq9B,GAChD,GAAIA,EAAM1sD,UACR,OAAO,EAET,GAAI+4K,GAAI3wK,IAAM2wK,GAAI3wK,IAAM,IAAMskD,EAAMrsD,cAAgBqsD,EAAMpsD,UAAY,GAAKosD,EAAMxsD,iBAAmBwsD,EAAMttB,aAAc,CACtH,IAAIphD,EAAM0uE,EAAMxsD,eAAexS,WAAWg/D,EAAMrsD,aAChD,GAAIw+B,GAASqM,UAAUltD,GACrB,OAAOyV,EAAOzV,EAAImlL,kBAAkB,SAAUpnJ,GAC5C,OAAOurL,GAAWvrL,EAAMqT,EAASC,MAIvC,OAAO57B,EAAOi5D,EAAMy2G,kBAAkB,SAAUpnJ,GAC9C,OAAOurL,GAAWvrL,EAAMqT,EAASC,OAGjCmnN,GAAa,CAAED,gBAAiBA,IAEhCE,GAAsB,SAAUz4P,GAClC,IAAIwkB,EAAKq7K,EAASv9J,EAAKwoL,EAKvB,OAJAA,EAAa9qN,EAAIs2G,wBACjB9xF,EAAMxkB,EAAIs+B,cACVuhK,EAAUr7K,EAAIq2D,gBACdv4C,EAAM9d,EAAIi9H,YACH,CACL9hH,IAAKmrL,EAAWnrL,IAAM2C,EAAIw3H,YAAc+lC,EAAQ7lC,UAChDt6H,KAAMorL,EAAWprL,KAAO4C,EAAIy3H,YAAc8lC,EAAQ5lC,aAGlDy+F,GAAkB,SAAUtgQ,GAC9B,OAAOA,EAAO4P,OAASywP,GAAoBrgQ,EAAO0T,WAAa,CAC7D4zB,KAAM,EACNC,IAAK,IAGLg5N,GAAoB,SAAUvgQ,GAChC,IAAIqN,EAAOrN,EAAO0T,UAClB,OAAO1T,EAAO4P,OAAS,CACrB03B,KAAMj6B,EAAKisC,WACX/R,IAAKl6B,EAAKksC,WACR,CACFjS,KAAM,EACNC,IAAK,IAGLi5N,GAAgB,SAAUxgQ,GAC5B,IAAIqN,EAAOrN,EAAO0T,UAAWi5C,EAAS3sD,EAAOmP,SAASszE,gBAClDg+K,EAAe,CACjBn5N,KAAMj6B,EAAKisC,WACX/R,IAAKl6B,EAAKksC,WAERmnN,EAAe,CACjBp5N,KAAMj6B,EAAKisC,YAAcqT,EAAOrT,WAChC/R,IAAKl6B,EAAKksC,WAAaoT,EAAOpT,WAEhC,OAAOv5C,EAAO4P,OAAS6wP,EAAeC,GAEpCC,GAAmB,SAAU3gQ,EAAQguB,GACvC,GAAIA,EAAMrd,OAAOu1B,gBAAkBlmC,EAAOmP,SAAU,CAClD,IAAIyxP,EAAiBP,GAAoBrgQ,EAAO05C,2BAC5CmnN,EAAiBL,GAAcxgQ,GACnC,MAAO,CACLsnC,KAAMtZ,EAAM6qB,MAAQ+nN,EAAet5N,KAAOu5N,EAAev5N,KACzDC,IAAKvZ,EAAM8qB,MAAQ8nN,EAAer5N,IAAMs5N,EAAet5N,KAG3D,MAAO,CACLD,KAAMtZ,EAAM6qB,MACZtR,IAAKvZ,EAAM8qB,QAGXgoN,GAAoB,SAAUC,EAAcF,EAAgBG,GAC9D,MAAO,CACLnoN,MAAOmoN,EAAc15N,KAAOy5N,EAAaz5N,KAAOu5N,EAAev5N,KAC/DwR,MAAOkoN,EAAcz5N,IAAMw5N,EAAax5N,IAAMs5N,EAAet5N,MAG7D05N,GAAO,SAAUjhQ,EAAQguB,GAC3B,OAAO8yO,GAAkBR,GAAgBtgQ,GAASugQ,GAAkBvgQ,GAAS2gQ,GAAiB3gQ,EAAQguB,KAEpGkzO,GAAgB,CAAED,KAAMA,IAExBE,GAA2B14M,GAAS60B,uBAAwB8jL,GAA0B34M,GAASw/H,sBAC/Fo5E,GAAc,SAAU9qD,EAAS3uM,GACnC,OAAOu5P,GAAyBv5P,IAAQA,IAAQ2uM,GAE9C+qD,GAAoB,SAAUthQ,EAAQuhQ,EAAeC,GACvD,OAAID,IAAkBC,IAAexhQ,EAAO4L,IAAI48C,UAAU+4M,EAAeC,KAGrEL,GAAyBI,IAK3BE,GAAe,SAAU75P,GAC3B,IAAI85P,EAAW95P,EAAIsvC,WAAU,GAE7B,OADAwqN,EAASzyN,gBAAgB,qBAClByyN,GAELC,GAAc,SAAU3hQ,EAAQ4H,EAAKwqB,EAAOC,GAC9C,IAAIuvO,EAAYh6P,EAAIsvC,WAAU,GAC9Bl3C,EAAO4L,IAAIwqE,UAAUwrL,EAAW,CAC9BxvO,MAAOA,EACPC,OAAQA,IAEVryB,EAAO4L,IAAIC,UAAU+1P,EAAW,oBAAqB,MACrD,IAAIC,EAAW7hQ,EAAO4L,IAAIiE,OAAO,MAAO,CACtC,MAAS,qBACT,iBAAkB,MAClB,aAAgB,KAChB,gBAAmB,UAiBrB,OAfA7P,EAAO4L,IAAIwqE,UAAUyrL,EAAU,CAC7B/kN,SAAU,WACV83J,QAAS,GACTv+H,SAAU,SACVxoC,OAAQ,EACRjtB,QAAS,EACT68B,OAAQ,EACRrrB,MAAOA,EACPC,OAAQA,IAEVryB,EAAO4L,IAAIwqE,UAAUwrL,EAAW,CAC9BnkN,OAAQ,EACRwhH,UAAW,eAEb4iG,EAAS5xP,YAAY2xP,GACdC,GAELC,GAAoB,SAAUD,EAAUzN,GACtCyN,EAAS39P,aAAekwP,GAC1BA,EAAQnkP,YAAY4xP,IAGpBE,GAAY,SAAUF,EAAU/kN,EAAU1qB,EAAOC,EAAQu7J,EAAMo0E,GACjE,IAAI7wC,EAAY,EAAGL,EAAY,EAC/B+wC,EAASr4P,MAAM89B,KAAOwV,EAASjE,MAAQ,KACvCgpN,EAASr4P,MAAM+9B,IAAMuV,EAAShE,MAAQ,KAClCgE,EAASjE,MAAQzmB,EAAQw7J,IAC3BujC,EAAYr0K,EAASjE,MAAQzmB,EAAQw7J,GAEnC9wI,EAAShE,MAAQzmB,EAAS2vO,IAC5BlxC,EAAYh0K,EAAShE,MAAQzmB,EAAS2vO,GAExCH,EAASr4P,MAAM4oB,MAAQA,EAAQ++L,EAAY,KAC3C0wC,EAASr4P,MAAM6oB,OAASA,EAASy+L,EAAY,MAE3CmxC,GAAgB,SAAUr6P,GACxBA,GAAOA,EAAI1D,YACb0D,EAAI1D,WAAW+iB,YAAYrf,IAG3Bs6P,GAA2B,SAAUp0P,GACvC,OAAoB,IAAbA,EAAE4iG,QAEPyxJ,GAAsB,SAAUv+N,GAClC,OAAOA,EAAMhgC,SAEXw+P,GAAc,SAAUx+N,EAAOkZ,GACjC,MAAO,CACLjE,MAAOiE,EAASjE,MAAQjV,EAAMy+N,KAC9BvpN,MAAOgE,EAAShE,MAAQ,IAGxBwpN,GAAU,SAAU1+N,EAAO5jC,GAC7B,OAAO,SAAU8N,GACf,GAAIo0P,GAAyBp0P,GAAI,CAC/B,IAAIy0P,EAAQtzP,EAAKjP,EAAO4L,IAAIkH,WAAWhF,EAAE6C,QAASihN,GAAU10M,GAAGikP,GAA0BC,KAA0B1kP,MAAM,MACzH,GAAI2kP,GAAYrhQ,EAAO0T,UAAW6uP,GAAQ,CACxC,IAAIC,EAASxiQ,EAAO4L,IAAIytC,OAAOkpN,GAC3BnO,EAAUp0P,EAAO0T,UACjBi5C,EAAS3sD,EAAOmP,SAASszE,gBAC7B7+C,EAAMhgC,QAAU2+P,EAChB3+N,EAAM6+N,QAAU30P,EAAE20P,QAClB7+N,EAAM8+N,QAAU50P,EAAE40P,QAClB9+N,EAAMgqJ,MAAQ5tL,EAAO4P,OAASwkP,EAAQuO,YAAch2M,EAAOnjB,aAAe,EAC1E5F,EAAMo+N,MAAQhiQ,EAAO4P,OAASwkP,EAAQ9vI,aAAe33D,EAAOljB,cAAgB,EAC5E7F,EAAMy+N,KAAOv0P,EAAE+qC,MAAQ2pN,EAAO3sP,EAC9B+tB,EAAMg/N,KAAO90P,EAAEgrC,MAAQ0pN,EAAOxmQ,EAC9B4nC,EAAMxR,MAAQmwO,EAAM/4N,YACpB5F,EAAMvR,OAASkwO,EAAM94N,aACrB7F,EAAMi/N,MAAQlB,GAAY3hQ,EAAQuiQ,EAAO3+N,EAAMxR,MAAOwR,EAAMvR,YAKhEywO,GAAS,SAAUl/N,EAAO5jC,GAC5B,IAAI+iQ,EAAwBn/D,GAAMnd,UAAS,SAAUztI,EAASC,GAC5Dj5C,EAAOwoO,oBAAoBqM,gBAC3B70O,EAAOuL,UAAUy3P,aAAahqN,EAASC,KACtC,GACH,OAAO,SAAUnrC,GACf,IAAIs5K,EAAW9mL,KAAKssB,IAAItsB,KAAKyiH,IAAIj1G,EAAE20P,QAAU7+N,EAAM6+N,SAAUniQ,KAAKyiH,IAAIj1G,EAAE40P,QAAU9+N,EAAM8+N,UACxF,GAAIP,GAAoBv+N,KAAWA,EAAMq/N,UAAY77E,EAAW,GAAI,CAClE,IAAI5gL,EAAOxG,EAAO8lC,KAAK,YAAa,CAAEn1B,OAAQizB,EAAMhgC,UACpD,GAAI4C,EAAKujE,qBACP,OAEFnmC,EAAMq/N,UAAW,EACjBjjQ,EAAOwU,QAET,GAAIovB,EAAMq/N,SAAU,CAClB,IAAIzgL,EAAY4/K,GAAYx+N,EAAOs9N,GAAcD,KAAKjhQ,EAAQ8N,IAC9Dg0P,GAAkBl+N,EAAMi/N,MAAO7iQ,EAAO0T,WACtCquP,GAAUn+N,EAAMi/N,MAAOrgL,EAAW5+C,EAAMxR,MAAOwR,EAAMvR,OAAQuR,EAAMgqJ,KAAMhqJ,EAAMo+N,MAC/Ee,EAAsBj1P,EAAEkrC,QAASlrC,EAAEmrC,YAIrCiqN,GAAe,SAAU33P,GAC3B,IAAIme,EAAMne,EAAUysO,SAASjnD,WAAW,GACpCjnK,EAAiBJ,EAAII,eACzB,OAAmC,IAA5BA,EAAeC,SAAiBD,EAAe5lB,WAAa4lB,GAEjEk8J,GAAO,SAAUpiJ,EAAO5jC,GAC1B,OAAO,SAAU8N,GACf,GAAI81B,EAAMq/N,UACJ3B,GAAkBthQ,EAAQkjQ,GAAaljQ,EAAOuL,WAAYq4B,EAAMhgC,SAAU,CAC5E,IAAIu/P,EAAgB1B,GAAa79N,EAAMhgC,SACnC4C,EAAOxG,EAAO8lC,KAAK,OAAQ,CAC7Bs9N,YAAaD,EACbnqN,QAASlrC,EAAEkrC,QACXC,QAASnrC,EAAEmrC,UAERzyC,EAAKujE,uBACRo5L,EAAgB38P,EAAK48P,YACrBpjQ,EAAO0L,YAAYC,UAAS,WAC1Bs2P,GAAcr+N,EAAMhgC,SACpB5D,EAAO+L,cAAc/L,EAAO4L,IAAI28M,aAAa46C,IAC7CnjQ,EAAOwoO,oBAAoBqM,oBAKnCwuB,GAAgBz/N,KAGhB2lH,GAAO,SAAU3lH,EAAO5jC,GAC1B,OAAO,WACD4jC,EAAMq/N,UACRjjQ,EAAO8lC,KAAK,WAEdu9N,GAAgBz/N,KAGhBy/N,GAAkB,SAAUz/N,GAC9BA,EAAMq/N,UAAW,EACjBr/N,EAAMhgC,QAAU,KAChBq+P,GAAcr+N,EAAMi/N,QAElBS,GAAqB,SAAUtjQ,GACjC,IACIujQ,EAASC,EAAkBC,EAAaC,EAAaC,EAAgBC,EADrEhgO,EAAQ,GAEZ2/N,EAAU95C,GAAWjpN,IACrBojQ,EAAe1kQ,EAAWwE,SAC1B8/P,EAAmBlB,GAAQ1+N,EAAO5jC,GAClCyjQ,EAAcX,GAAOl/N,EAAO5jC,GAC5B0jQ,EAAc19E,GAAKpiJ,EAAO5jC,GAC1B2jQ,EAAiBp6G,GAAK3lH,EAAO5jC,GAC7BA,EAAOsO,GAAG,YAAak1P,GACvBxjQ,EAAOsO,GAAG,YAAam1P,GACvBzjQ,EAAOsO,GAAG,UAAWo1P,GACrBH,EAAQnmP,KAAKwmP,EAAc,YAAaH,GACxCF,EAAQnmP,KAAKwmP,EAAc,UAAWD,GACtC3jQ,EAAOsO,GAAG,UAAU,WAClBi1P,EAAQxuL,OAAO6uL,EAAc,YAAaH,GAC1CF,EAAQxuL,OAAO6uL,EAAc,UAAWD,OAGxCE,GAAc,SAAU7jQ,GAC1BA,EAAOsO,GAAG,QAAQ,SAAUR,GAC1B,IAAIg2P,EAAkC,qBAAdh2P,EAAEkrC,QAA0Bh5C,EAAOmP,SAASy9C,iBAAiB9+C,EAAEkrC,QAASlrC,EAAEmrC,SAAW,MACzGkoN,GAAyB2C,IAAe3C,GAAyBnhQ,EAAO4L,IAAI29M,yBAAyBu6C,MACvGh2P,EAAE44B,qBAIJ40F,GAAO,SAAUt7H,GACnBsjQ,GAAmBtjQ,GACnB6jQ,GAAY7jQ,IAEV+jQ,GAAoB,CAAEzoI,KAAMA,IAE5B0oI,GAAU,SAAUhkQ,GACtB,IAAIikQ,EAAmBrnK,IAAM,WAC3B,IAAK58F,EAAO6jC,QAAS,CACnB,IAAIna,EAAM1pB,EAAOuL,UAAUugB,SAC3B,GAAIpC,EAAIE,UAAW,CACjB,IAAI64N,EAAaD,GAAiBxiP,EAAQA,EAAOuL,UAAUugB,UAAU,GACrE9rB,EAAOuL,UAAUwf,OAAO03N,OAG3B,GACHziP,EAAOsO,GAAG,SAAS,WACjB21P,EAAiBx9E,cAEnBzmL,EAAOsO,GAAG,QAAQ,WAChB21P,EAAiBj3N,aAGjBk3N,GAAW,CAAE71P,MAAO21P,IAEpBG,GAA0B17M,GAASw/H,sBACnCm8E,GAA2B37M,GAAS60B,uBACpC+mL,GAA2B,SAAUrkQ,EAAQsL,GAC/C,IAAI1I,EAAO5C,EAAO0T,UAClB,MAAOpI,GAAQA,IAAS1I,EAAM,CAC5B,GAAIuhQ,GAAwB74P,IAAS84P,GAAyB94P,GAC5D,OAAOA,EAETA,EAAOA,EAAKpH,WAEd,OAAO,MAELogQ,GAAqB,SAAUtkQ,GACjC,IAQIukQ,EARAr8M,EAAU,SAAU58C,GACtB,OAAOtL,EAAO4L,IAAIs8C,QAAQ58C,IAExB+9D,EAAWrpE,EAAO0T,UAClB8wP,EAAYnsC,GAAUr4N,EAAO0T,UAAWw0C,GAAS,WACnD,OAAOyrM,GAAYpmD,SAASvtM,MAE1BykQ,EAAkB,OAASzkQ,EAAO4L,IAAImK,WAEtC2uP,EAAyB,SAAU98P,GACrC,OAAO5H,EAAO4L,IAAIoG,SAASpK,EAAK,4BAE9B+8P,EAA0B,WAC5B,IAAI96O,EAAY7pB,EAAO4L,IAAItM,IAAImlQ,GAC/B,OAAO56O,EAAYA,EAAU7Z,qBAAqB,KAAK,GAAK6Z,GAE1D+6O,EAAW,SAAUtuL,GACnBA,GACFt2E,EAAOuL,UAAUwf,OAAOurD,IAGxBuuL,EAAW,WACb,OAAO7kQ,EAAOuL,UAAUugB,UAEtBq2N,EAAY,SAAUh1O,EAAW7B,EAAM5I,EAAQimF,GAIjD,IAAI76E,EAMJ,YATuB,IAAnB66E,IACFA,GAAiB,GAGnB76E,EAAI9N,EAAO8lC,KAAK,YAAa,CAC3Bn1B,OAAQrF,EACR6B,UAAWA,EACXzK,OAAQA,IAENoL,EAAEi8D,qBACG,MAEL4e,GACF3oF,EAAOuL,UAAUo9E,eAAer9E,GAAqB,IAAf6B,GAEjCq3P,EAAUr9N,KAAKzkC,EAAQ4I,KAE5BgvN,EAA6B,SAAUntN,EAAWmpE,GAEpD,OADAA,EAAQ3tB,GAAex7C,EAAWk8D,EAAUiN,IACzB,IAAfnpE,EACK6mN,GAAgBL,eAAer9I,GAEjC09I,GAAgBJ,aAAat9I,IAElCmyJ,EAA0B,SAAUq8B,GAClCA,EAAoB9lN,aAAa,oBACnCuwK,GAAwBu1C,GACxBF,EAASC,KACT7kQ,EAAOuL,UAAUo9E,eAAem8K,EAAoB,MAGpDznG,EAAiB,WACnBr9J,EAAOsO,GAAG,WAAW,SAAUR,GAC7B,IAAIwoE,EAAQuuL,IACRvuL,EAAM1sD,WAAa8qO,GAAWL,kBAAkBr0P,EAAQ8N,EAAEkrC,QAASlrC,EAAEmrC,UACvE2rN,EAASviB,GAAmBriP,EAAQs2E,GAAO,OAG/Ct2E,EAAOsO,GAAG,SAAS,SAAUR,GAC3B,IAAIi3P,EACJA,EAAsBV,GAAyBrkQ,EAAQ8N,EAAE6C,QACrDo0P,IACEX,GAAyBW,KAC3Bj3P,EAAE44B,iBACF1mC,EAAOwU,SAEL2vP,GAAwBY,IACtB/kQ,EAAO4L,IAAI48C,UAAUu8M,EAAqB/kQ,EAAOuL,UAAUC,YAC7Dw5P,QAKRhlQ,EAAOsO,GAAG,iBAAiB,WACzB02P,OAEFhlQ,EAAOsO,GAAG,uCAAuC,WAC/C,OAAOk2P,EAAU9rC,gBAEnB,IAAIusC,EAAoB,SAAUjlQ,GAChC,IAAIo5L,GAAQ,EACZp5L,EAAOsO,GAAG,cAAc,WACtB8qL,GAAQ,KAEVp5L,EAAOsO,GAAG,aAAa,WACrB8qL,GAAQ,KAEVp5L,EAAOsO,GAAG,YAAY,SAAUR,GAC9B,IAAIi3P,EAAsBV,GAAyBrkQ,EAAQ8N,EAAE6C,QACzDyzP,GAAyBW,KACtB3rE,IACHtrL,EAAE44B,iBACFw+N,EAA4B/2E,GAAWnuL,EAAQ+kQ,UAKnDI,EAAyB,SAAUv9P,GACrC,IAAIq8N,EAAcrI,GAAYh0N,GAC9B,IAAKA,EAAI2P,WACP,OAAO,EAET,IAAIkP,EAAWutM,GAAgBtxN,OAAOkF,EAAI2P,YACtCotN,EAASV,EAAYt3M,KAAKlG,GAC9B,OAAOk+M,IAAWoM,GAA6BpM,KAAYqM,GAA4BrM,IAErFlL,EAAgB,SAAUO,EAAOC,GACnC,IAAI6Q,EAAS9qO,EAAO4L,IAAIoL,UAAUgjN,EAAOh6N,EAAO4L,IAAIs8C,SAChD6iL,EAAS/qO,EAAO4L,IAAIoL,UAAUijN,EAAOj6N,EAAO4L,IAAIs8C,SACpD,OAAO4iL,IAAWC,GAEhBq6B,EAAuB,SAAU9qM,EAAY07K,GAC/C,IAAIqvB,EAAcrlQ,EAAO4L,IAAIoL,UAAUsjD,EAAYt6D,EAAO4L,IAAIs8C,SAC1Do9M,EAAatlQ,EAAO4L,IAAIoL,UAAUg/N,EAAWh2O,EAAO4L,IAAIs8C,SAC5D,SAAIm9M,IAAerlQ,EAAO4L,IAAI48C,UAAU68M,EAAaC,KAA2F,IAA5ElB,GAAyBC,GAAyBrkQ,EAAQqlQ,MAGvHA,IAAgB5rC,EAAc4rC,EAAaC,IAAeH,EAAuBE,IAE1FJ,EAAkBjlQ,GAClBA,EAAOsO,GAAG,aAAa,SAAUR,GAC/B,IAAIi3P,EACAhmM,EAAYjxD,EAAE6C,OAClB,IAAIouD,IAAcsK,GAAmC,SAAvBtK,EAAU56D,UAAwBnE,EAAO4L,IAAI48C,UAAUuW,EAAWsK,MAG7B,IAA/DqrL,GAAWL,kBAAkBr0P,EAAQ8N,EAAEkrC,QAASlrC,EAAEmrC,SAItD,GADA8rN,EAAsBV,GAAyBrkQ,EAAQ++D,GACnDgmM,EACEX,GAAyBW,IAC3Bj3P,EAAE44B,iBACFw+N,EAA4B/2E,GAAWnuL,EAAQ+kQ,MAE/CC,IACMb,GAAwBY,IAAwBj3P,EAAEgzD,UAAcs/L,GAAWD,gBAAgBryP,EAAEkrC,QAASlrC,EAAEmrC,QAASj5C,EAAOuL,UAAUugB,YACtI+oN,IACA70O,EAAOuL,UAAUy3P,aAAal1P,EAAEkrC,QAASlrC,EAAEmrC,gBAG1C,IAAqC,IAAjC4/K,GAAkB95J,GAAsB,CACjDimM,IACAnwB,IACA,IAAIirB,EAAYC,GAAa12L,EAAUv7D,EAAEkrC,QAASlrC,EAAEmrC,SACpD,GAAI6mN,IACGsF,EAAqBt3P,EAAE6C,OAAQmvP,EAAUx0P,MAAO,CACnDwC,EAAE44B,iBACF,IAAI4vC,EAAQ6rK,EAAU,EAAG2d,EAAUx0P,KAAMw0P,EAAUp9P,QAAQ,GAC3D1C,EAAO0T,UAAUc,QACjBowP,EAAStuL,QAKjBt2E,EAAOsO,GAAG,YAAY,SAAUR,GAC9B,IAAI4vP,GAAGtvO,gBAAgBtgB,GAGvB,OAAQA,EAAEqgB,SACV,QACMi2O,GAAyBpkQ,EAAOuL,UAAUC,YAC5CsC,EAAE44B,iBAEJ,UAGJ1mC,EAAOsO,GAAG,qBAAqB,SAAUR,GACvC,IAAI4b,EAAM5b,EAAEwoE,MACZ,GAAIiuL,EAA6B,CAC/B,IAAKA,EAA4BrgQ,WAE/B,YADAqgQ,EAA8B,MAGhC76O,EAAMA,EAAIm/B,aACVn/B,EAAIykK,WAAWo2E,GACfz2P,EAAEwoE,MAAQ5sD,MAGd1pB,EAAOsO,GAAG,qBAAqB,SAAUR,GACvCA,EAAEwoE,MAAQivL,EAAoCz3P,EAAEwoE,OAChD,IAAI5sD,EAAMw7O,EAA4Bp3P,EAAEwoE,MAAOxoE,EAAE4jL,SAC7ChoK,IACF5b,EAAEwoE,MAAQ5sD,MAGd,IAAI2rD,EAAa,SAAU/pE,GACzB,MAAmB,gBAAZA,EAAKhJ,IAEdtC,EAAOsO,GAAG,0BAA0B,SAAUR,GAC5C,IAAI4b,EAAM5b,EAAEwoE,MACPkvL,EAAwB97O,IAAS2rD,EAAW3rD,EAAII,eAAe5lB,aAClE2wO,IAEG6vB,EAAuBh7O,EAAII,eAAe5lB,aAC7C8gQ,OAGJhlQ,EAAOsO,GAAG,QAAQ,SAAUR,GAC1B,IAAI4jE,EAAgB5jE,EAAE4jE,cACtB,IAAK5jE,EAAEi8D,sBAAwBj8D,EAAE4jE,gBAAkBixH,GAAI3wK,GAAI,CACzD,IAAIyzO,EAAuBd,IACvBc,IACF33P,EAAE44B,iBACFgrC,EAAcmE,YACdnE,EAAciE,QAAQ,YAAa8vL,EAAqB/jN,WACxDgwB,EAAciE,QAAQ,aAAc8vL,EAAqBC,gBAI/D3B,GAAkBzoI,KAAKt7H,GACvBkkQ,GAAS71P,MAAMrO,IAEb2lQ,EAAS,WACX,IAAIh/O,EAAS3mB,EAAO4lQ,cAAeC,EAAY,oBAC/Cl/O,EAAOlgB,KAAK+9P,EAAU7rC,UACtBhyM,EAAOlgB,KAAKo/P,6FAA6HA,EAA7HA,+CAAoMA,EAApMA,6CAEVC,EAAyB,SAAUx6P,GACrC,OAAOmjN,GAAiBnjN,IAASsjN,GAAyBtjN,IAASqjN,GAAuBrjN,IAExFk6P,EAA0B,SAAU97O,GACtC,OAAOo8O,EAAuBp8O,EAAII,iBAAmBg8O,EAAuBp8O,EAAIs/B,eAE9Eu8M,EAAsC,SAAU77O,GAClD,IAAIg9C,EAAqB1mE,EAAOqhD,OAAOslB,wBACnC97C,EAAS7qB,EAAO4L,IAAIkf,YACpBhB,EAAiBJ,EAAII,eACrBG,EAAcP,EAAIO,YAClB++B,EAAet/B,EAAIs/B,aACnB9+B,EAAYR,EAAIQ,UAmBpB,OAlBIrC,GAAI6+C,EAAoB58C,EAAe3lB,SAAS+f,eAC9B,IAAhB+F,EACFY,EAAOy0D,eAAex1D,GAEtBe,EAAO0vC,cAAczwC,GAGvBe,EAAOR,SAASP,EAAgBG,GAE9BpC,GAAI6+C,EAAoB1d,EAAa7kD,SAAS+f,eAC9B,IAAdgG,EACFW,EAAO4hK,aAAazjI,GAEpBn+B,EAAO2vC,YAAYxR,GAGrBn+B,EAAOP,OAAO0+B,EAAc9+B,GAEvBW,GAELq6O,EAA8B,SAAU5uL,EAAOo7G,GACjD,IAAIpmL,EAGAy6P,EAAyB9uN,EAAKntB,EAAgBG,EAAaC,EAAWpc,EAAGslN,EAAegwC,EAAa4C,EAFrGh6P,EAAIhM,EAAOgM,EACXJ,EAAM5L,EAAO4L,IAEjB,IAAK0qE,EACH,OAAO,KAET,GAAIA,EAAM1sD,UAAW,CACnB,IAAK47O,EAAwBlvL,GAC3B,IAAgB,IAAZo7G,EAAmB,CAErB,GADA0hC,EAAgBkH,GAA4B,EAAGhkJ,GAC3CuiJ,GAAkBzF,EAAc5nN,SAAQ,IAC1C,OAAO22O,GAAW,EAAG/uB,EAAc5nN,SAAQ,IAAO,GAAO,GAE3D,GAAIqtN,GAAkBzF,EAAc5nN,WAClC,OAAO22O,GAAW,EAAG/uB,EAAc5nN,WAAY4nN,EAAcpE,WAAW,OAErE,CAEL,GADAoE,EAAgBkH,EAA2B,EAAGhkJ,GAC1CuiJ,GAAkBzF,EAAc5nN,WAClC,OAAO22O,EAAU,EAAG/uB,EAAc5nN,WAAY4nN,EAAcpE,WAAW,GAEzE,GAAI6J,GAAkBzF,EAAc5nN,SAAQ,IAC1C,OAAO22O,EAAU,EAAG/uB,EAAc5nN,SAAQ,IAAO,GAAO,GAI9D,OAAO,KAUT,OARAse,EAAiBwsD,EAAMxsD,eACvBG,EAAcqsD,EAAMrsD,YACpBC,EAAYosD,EAAMpsD,UACc,IAA5BJ,EAAeC,UAAkC,IAAhBE,GAAqBm6O,GAAyBt6O,EAAe5lB,cAChG4lB,EAAiBA,EAAe5lB,WAChC+lB,EAAcre,EAAI69C,UAAU3/B,GAC5BA,EAAiBA,EAAe5lB,YAEF,IAA5B4lB,EAAeC,SACV,MAELG,IAAcD,EAAc,GAAKH,IAAmBwsD,EAAMttB,eAC5D19C,EAAOwe,EAAexS,WAAW2S,IAE9Bm6O,GAAyB94P,IAG9B83P,EAAc4C,EAAkB16P,EAAK4rC,WAAU,GAC/CppC,EAAI9N,EAAO8lC,KAAK,iBAAkB,CAChCn1B,OAAQrF,EACR83P,YAAaA,IAEXt1P,EAAEi8D,qBACG,MAETg8L,EAA0B56G,GAAWt+F,GAAQN,QAAQvsD,EAAO0T,WAAY,IAAM+wP,GAAiBjoP,MAAK,WAClG,OAAOxQ,EAAE,OACR,SAAUpE,GACX,OAAOoE,EAAE,CAACpE,EAAIgE,WAEhBw3P,EAAct1P,EAAEs1P,YACuB,IAAnC2C,EAAwBhjQ,SAC1BgjQ,EAA0B/5P,EAAE,oEAAoE2C,KAAK,KAAM81P,GAC3GsB,EAAwB3/N,SAASpmC,EAAO0T,YAE1C4iE,EAAQt2E,EAAO4L,IAAIkf,YACfs4O,IAAgB4C,GAAmBrjE,GAAI3wK,IACzC+zO,EAAwBl3P,QAAQC,OAAO,sDAAyDA,OAAOs0P,GACvG9sL,EAAM/b,cAAcwrM,EAAwB,GAAGxuP,WAAWA,YAC1D++D,EAAM9b,YAAY4oM,KAElB2C,EAAwBl3P,QAAQC,OAAO,KAAQA,OAAOs0P,GAAat0P,OAAO,KAC1EwnE,EAAMjsD,SAAS07O,EAAwB,GAAGxuP,WAAY,GACtD++D,EAAMhsD,OAAOy7O,EAAwB,GAAG/9M,UAAW,IAErD+9M,EAAwBh9P,IAAI,CAAEw+B,IAAK37B,EAAIytC,OAAO/tC,EAAMtL,EAAO0T,WAAW1X,IACtE+pQ,EAAwB,GAAGvxP,QAC3ByiC,EAAMj3C,EAAOuL,UAAUysO,SACvB/gM,EAAIi5I,kBACJj5I,EAAIk5I,SAAS75G,GACb9nE,EAAKs8I,GAAcj+F,GAAQN,QAAQvsD,EAAO0T,WAAY,yBAAyB,SAAU9L,GACvF+M,GAAO/M,EAAK,wBAEd0D,EAAKgL,aAAa,oBAAqB,KACvCiuP,EAA8Bj5P,EAC9BupO,IACOv+J,IAzCE,OA2CP0uL,EAAiC,WAC/BT,IACFA,EAA4Bt1N,gBAAgB,qBAC5Ck8G,GAAWt+F,GAAQN,QAAQvsD,EAAO0T,WAAY,IAAM+wP,GAAiBj2P,KAAKm6I,IAC1E47G,EAA8B,MAEhCp5G,GAAWt+F,GAAQN,QAAQvsD,EAAO0T,WAAY,IAAM+wP,GAAiBj2P,KAAKm6I,IAC1E47G,EAA8B,MAE5B18N,EAAU,WACZ28N,EAAU38N,UACV08N,EAA8B,MAE5B1vB,EAAgB,WAClB2vB,EAAUp9N,QAMZ,OAJIu7J,GAAItuE,UACNgpC,IACAsoG,KAEK,CACLxjB,UAAWA,EACX1Z,wBAAyBA,EACzBoM,cAAeA,EACfhtM,QAASA,IAITo+N,GAAwB,SAAUhoQ,GACpC,OAAiC,IAA1BA,EAAK4J,QAAQ,UAA4C,IAA1B5J,EAAK4J,QAAQ,UAEjDq+P,GAAe,SAAU5gQ,GAC3B,IAAI6gQ,EAAgB7gQ,EACpB,MAAO,cAActB,KAAKmiQ,GACxBA,EAAgBA,EAActkQ,QAAQ,cAAe,IAEvD,OAAOskQ,GAELC,GAAe,SAAUnmQ,EAAU62B,GACrC,OAAI72B,EAASm0E,uBAEF,iBAAiBpwE,KAAK8yB,IACS,IAAjC72B,EAASilN,qBAAiC,yBAAyBlhN,KAAK8yB,GAExE,UAAU9yB,KAAK8yB,KAGtBuvO,GAAkB,SAAUhlN,EAAQz4C,EAAMuuJ,GAC5C,IAAehxJ,EAAOqG,EAAS85P,EAAa5/L,EAAxC5wD,EAAQ,EACZ4wD,EAAqBrlB,EAAOslB,wBAC5B2/L,EAAc,iGACdA,EAAYrgQ,UAAYE,EAAQgxJ,EAChC,MAAO3qJ,EAAU85P,EAAYtpQ,KAAK4L,GAAO,CAEvC,GADAzC,EAAQmgQ,EAAYrgQ,UACD,MAAfuG,EAAQ,GACVsJ,SACK,IAAKtJ,EAAQ,GAAI,CACtB,GAAIA,EAAQ,KAAMk6D,EAChB,SAEF5wD,IAEF,GAAc,IAAVA,EACF,MAGJ,OAAO3P,GAELogQ,GAAsB,SAAUv+L,EAAQw+L,GAC1C,IAAIh6P,EAAUw7D,EAAOhrE,KAAKwpQ,GAC1B,GAAIh6P,EAAS,CACX,IAAIvO,EAAOuO,EAAQ,GACfnN,EAAQmN,EAAQ,GACpB,MAAuB,kBAATvO,GAA4C,mBAAvBA,EAAKimB,cAAqC7kB,EAAQ,KAErF,OAAO,MAGX,SAASonQ,GAAUxmQ,EAAUohD,QACZ,IAAXA,IACFA,EAAS09J,MAEX,IAAIxjM,EAAO,aAEXtb,EAAWA,GAAY,IACW,IAA9BA,EAASymQ,mBACXzmQ,EAASymQ,kBAAmB,GAE9B,IAAIv+P,EAAUlI,EAASkI,QAAUlI,EAASkI,QAAUoT,EAChDjT,EAAQrI,EAASqI,MAAQrI,EAASqI,MAAQiT,EAC1CjW,EAAOrF,EAASqF,KAAOrF,EAASqF,KAAOiW,EACvC2M,EAAQjoB,EAASioB,MAAQjoB,EAASioB,MAAQ3M,EAC1CuN,EAAM7oB,EAAS6oB,IAAM7oB,EAAS6oB,IAAMvN,EACpC4qN,EAAKlmO,EAASkmO,GAAKlmO,EAASkmO,GAAK5qN,EACjClT,EAAUpI,EAASoI,QAAUpI,EAASoI,QAAUkT,EAChD9T,EAAQ,SAAUmB,GACpB,IAAI4D,EAAoBnN,EAAOsnQ,EAE3BC,EAAUvjQ,EAAGwjQ,EAAU5oQ,EACvB6oQ,EAAmBC,EAAwBrgM,EAAoBsgM,EAAcC,EAC7E1jP,EAAUgjN,EAAa2gC,EAAgBv4P,EAAMw4P,EAAcC,EAAoBC,EAC/EnmD,EAAoBC,EAAmBC,EAAkBkmD,EACzDC,EAAuBC,EAAalB,EAAamB,EAAYlzI,EAAiB90E,EAE9EioN,EARSvhQ,EAAQ,EACjBw7F,EAAQ,GAKiFk1G,EAAU,EACnGx+H,EAASulI,GAASvlI,OAElBsvL,EAAmB/nQ,GAAMinE,QAAQ,yDACjC+gM,EAAkB,4BAClBC,EAAgB,SAAU5pQ,GAC5B,IAAIw6C,EAAKp1C,EACTo1C,EAAMkpD,EAAM5+F,OACZ,MAAO01C,IACL,GAAIkpD,EAAMlpD,GAAKx6C,OAASA,EACtB,MAGJ,GAAIw6C,GAAO,EAAG,CACZ,IAAKp1C,EAAIs+F,EAAM5+F,OAAS,EAAGM,GAAKo1C,EAAKp1C,IACnCpF,EAAO0jG,EAAMt+F,GACTpF,EAAK6pQ,OACPh/O,EAAI7qB,EAAKA,MAGb0jG,EAAM5+F,OAAS01C,IAGfsvN,EAAiB,SAAUtpQ,EAAOR,EAAMoB,EAAOu9C,EAAMorN,GACvD,IAAIC,EAAU5kQ,EACV6kQ,EAAa,sBAGjB,GAFAjqQ,EAAOA,EAAKimB,cACZ7kB,EAAQpB,KAAQ+oQ,EAAe/oQ,EAAOo6E,EAAOh5E,GAASu9C,GAAQorN,GAAQ,IAClEzkP,IAAaujP,IAAqD,IAAhCb,GAAsBhoQ,GAAiB,CAE3E,GADAgqQ,EAAWb,EAAmBnpQ,IACzBgqQ,GAAYZ,EAAwB,CACvChkQ,EAAIgkQ,EAAuBtkQ,OAC3B,MAAOM,IAEL,GADA4kQ,EAAWZ,EAAuBhkQ,GAC9B4kQ,EAASpiQ,QAAQ7B,KAAK/F,GACxB,OAGO,IAAPoF,IACF4kQ,EAAW,MAGf,IAAKA,EACH,OAEF,GAAIA,EAAS5vJ,eAAiBh5G,KAAS4oQ,EAAS5vJ,aAC9C,OAGJ,GAAIsvJ,EAAiB1pQ,KAAUgC,EAAS+kN,kBAAmB,CACzD,IAAIluL,EAAMz3B,EAAMwC,QAAQqmQ,EAAY,IACpC,IACEpxO,EAAMmiO,mBAAmBniO,GACzB,MAAOjC,GACPiC,EAAM1Q,SAAS0Q,GAEjB,GAAI8wO,EAAgB5jQ,KAAK8yB,GACvB,OAEF,GAAIsvO,GAAanmQ,EAAU62B,GACzB,OAGAgwO,IAAsB7oQ,KAAQ0pQ,GAA2C,IAAvB1pQ,EAAK4J,QAAQ,SAGnE++P,EAAShlQ,IAAI3D,GAAQoB,EACrBunQ,EAASngQ,KAAK,CACZxI,KAAMA,EACNoB,MAAOA,MAGXinQ,EAAc,IAAI1vN,OAAO,sRAA0T,KACnV6wN,EAAa,iFACb/gM,EAAqBrlB,EAAOslB,wBAC5B6gM,EAAcvnQ,EAASkoQ,uBAAyB9mN,EAAO6hK,yBACvD8jD,EAAe3lN,EAAOqzE,eACtBnxG,EAAWtjB,EAASsjB,SACpBwjP,EAAyB9mQ,EAASmoQ,iBAClCV,EAAiBznQ,EAASymQ,iBAC1BnyI,EAAkBlzE,EAAOmzE,qBACzB8yI,EAAc1+P,EAAO,IACrB,MAAO4D,EAAU85P,EAAYtpQ,KAAKsqQ,GAAc,CAI9C,GAHInhQ,EAAQqG,EAAQrG,OAClBb,EAAK+yE,EAAOzvE,EAAK0gB,OAAOnjB,EAAOqG,EAAQrG,MAAQA,KAE7C9G,EAAQmN,EAAQ,GAClBnN,EAAQA,EAAM6kB,cACU,MAApB7kB,EAAMu6E,OAAO,KACfv6E,EAAQA,EAAMiqB,OAAO,IAEvBu+O,EAAcxoQ,QACT,GAAIA,EAAQmN,EAAQ,GAAI,CAC7B,GAAIA,EAAQrG,MAAQqG,EAAQ,GAAGzJ,OAAS6F,EAAK7F,OAAQ,CACnDuC,EAAK+yE,EAAOzvE,EAAK0gB,OAAO9c,EAAQrG,SAChCA,EAAQqG,EAAQrG,MAAQqG,EAAQ,GAAGzJ,OACnC,SAEF1D,EAAQA,EAAM6kB,cACU,MAApB7kB,EAAMu6E,OAAO,KACfv6E,EAAQA,EAAMiqB,OAAO,IAEvB29O,EAAe5nQ,KAASqnE,EACpBghM,GAAkBF,EAAYnoQ,IAAUsiG,EAAM5+F,OAAS,GAAK4+F,EAAMA,EAAM5+F,OAAS,GAAG9E,OAASoB,GAC/FwoQ,EAAcxoQ,GAEhB,IAAIgpQ,EAAa9B,GAAoBkB,EAAYj7P,EAAQ,IACzD,GAAmB,OAAf67P,EAAqB,CACvB,GAAmB,QAAfA,EAAsB,CACxBliQ,EAAQkgQ,GAAgBhlN,EAAQz4C,EAAM09P,EAAYrgQ,WAClDqgQ,EAAYrgQ,UAAYE,EACxB,SAEF+gQ,GAAiB,EAEnB,IAAK3jP,IAAagjN,EAAcllL,EAAO8gK,eAAe9iN,IAAS,CAkB7D,GAjBA6nQ,GAAiB,EACb3jP,IACF6jP,EAAqB7gC,EAAYn/N,WACjCigQ,EAAyB9gC,EAAYjlB,oBAEnC6lD,EAAe36P,EAAQ,KACzBs6P,GAA+D,IAA3CK,EAAat/P,QAAQ,iBACrCi/P,GAAqBC,IACvBG,GAAiB,GAEnBN,EAAW,GACXA,EAAShlQ,IAAM,GACfulQ,EAAatlQ,QAAQ4lQ,EAAYM,KAEjCnB,EAAW,GACXA,EAAShlQ,IAAM,IAEb2hB,IAAaujP,EAAmB,CAQlC,GAPA5lD,EAAqBqlB,EAAYrlB,mBACjCC,EAAoBolB,EAAYplB,kBAChCC,EAAmBmlB,EAAYnlB,iBAC/BmmD,EAAwBhhC,EAAYtlB,iBAChCsmD,IAA0BX,EAAS7jQ,SACrCmkQ,GAAiB,GAEf9lD,EAAkB,CACpB/9M,EAAI+9M,EAAiBr+M,OACrB,MAAOM,IACLsL,EAAOyyM,EAAiB/9M,GACxBpF,EAAO0Q,EAAK1Q,KACZwhD,EAAY9wC,EAAKtP,MACC,WAAdogD,IACFA,EAAY,OAASo3J,KAEvB+vD,EAAShlQ,IAAI3D,GAAQwhD,EACrBmnN,EAASngQ,KAAK,CACZxI,KAAMA,EACNoB,MAAOogD,IAIb,GAAI0hK,EAAmB,CACrB99M,EAAI89M,EAAkBp+M,OACtB,MAAOM,IACLsL,EAAOwyM,EAAkB99M,GACzBpF,EAAO0Q,EAAK1Q,KACNA,KAAQ2oQ,EAAShlQ,MACrB69C,EAAY9wC,EAAKtP,MACC,WAAdogD,IACFA,EAAY,OAASo3J,KAEvB+vD,EAAShlQ,IAAI3D,GAAQwhD,EACrBmnN,EAASngQ,KAAK,CACZxI,KAAMA,EACNoB,MAAOogD,KAKf,GAAIyhK,EAAoB,CACtB79M,EAAI69M,EAAmBn+M,OACvB,MAAOM,IACL,GAAI69M,EAAmB79M,KAAMujQ,EAAShlQ,IACpC,OAGO,IAAPyB,IACF6jQ,GAAiB,GAGrB,GAAIv4P,EAAOi4P,EAAShlQ,IAAI,kBAAmB,CACzC,GAAa,QAAT+M,EAAgB,CAClBxI,EAAQkgQ,GAAgBhlN,EAAQz4C,EAAM09P,EAAYrgQ,WAClDqgQ,EAAYrgQ,UAAYE,EACxB,SAEF+gQ,GAAiB,GAGjBA,GACFh/O,EAAM7oB,EAAOunQ,EAAUK,QAGzBC,GAAiB,EAEnB,GAAIP,EAAYpyI,EAAgBl1H,GAAQ,CACtCsnQ,EAAU1gQ,UAAYE,EAAQqG,EAAQrG,MAAQqG,EAAQ,GAAGzJ,QACrDyJ,EAAUm6P,EAAU3pQ,KAAK4L,KACvBs+P,IACFL,EAAWj+P,EAAK0gB,OAAOnjB,EAAOqG,EAAQrG,MAAQA,IAEhDA,EAAQqG,EAAQrG,MAAQqG,EAAQ,GAAGzJ,SAEnC8jQ,EAAWj+P,EAAK0gB,OAAOnjB,GACvBA,EAAQyC,EAAK7F,QAEXmkQ,IACEL,EAAS9jQ,OAAS,GACpBuC,EAAKuhQ,GAAU,GAEjB/9O,EAAIzpB,IAENinQ,EAAYrgQ,UAAYE,EACxB,SAEG8gQ,IACEE,GAAgBA,EAAat/P,QAAQ,OAASs/P,EAAapkQ,OAAS,EAK9DmkQ,GACTp+O,EAAIzpB,GALJsiG,EAAMl7F,KAAK,CACTxI,KAAMoB,EACNyoQ,MAAOZ,UAMJ7nQ,EAAQmN,EAAQ,KACD,MAApBnN,EAAMu6E,OAAO,KACfv6E,EAAQ,IAAMA,GAEXY,EAASmuH,4BAAmE,QAArC/uH,EAAMiqB,OAAO,EAAG,GAAGpF,gBAC7D7kB,EAAQ,IAAMA,GAEhB8I,EAAQ9I,KACCA,EAAQmN,EAAQ,IACzBlE,EAAM49P,GAAa7mQ,KACVA,EAAQmN,EAAQ,IACzBnE,EAAQhJ,IACCA,EAAQmN,EAAQ,KACzB25N,EAAG9mO,EAAOmN,EAAQ,IAEpBrG,EAAQqG,EAAQrG,MAAQqG,EAAQ,GAAGzJ,OAKrC,IAHIoD,EAAQyC,EAAK7F,QACfuC,EAAK+yE,EAAOzvE,EAAK0gB,OAAOnjB,KAErB9C,EAAIs+F,EAAM5+F,OAAS,EAAGM,GAAK,EAAGA,IACjChE,EAAQsiG,EAAMt+F,GACVhE,EAAMyoQ,OACRh/O,EAAIzpB,EAAMpB,OAIhB,MAAO,CAAEwJ,MAAOA,IAEjB,SAAUg/P,GACTA,EAAU6B,WAAajC,IADzB,CAEEI,KAAcA,GAAY,KAC5B,IAAI8B,GAAc9B,GAEdz/L,GAAW,SAAUwhM,EAAW5/P,GAClC,IAAI6/P,EAAoB,IAAI7xN,OAAO,CAAC,QAAU4xN,EAAUvhQ,KAAK,KAAO,aAAaA,KAAK,KAAM,MAC5F,OAAO2B,EAAK/G,QAAQ4mQ,EAAmB,KAErCC,GAAe,SAAU5hN,EAAYl+C,GACvC,IAEI+/P,EAAaxiQ,EAAOyiQ,EAAap8P,EAASk6D,EAF1ChlE,EAAUkH,EACVigQ,EAAiB,0CAEjBxnN,EAASyF,EAAWzF,OACxB3/C,EAAUslE,GAASlgB,EAAWgiN,eAAgBpnQ,GAC9CglE,EAAqBrlB,EAAOslB,wBAC5B,MAAOn6D,EAAUq8P,EAAe7rQ,KAAK0E,GACnCyE,EAAQ0iQ,EAAe5iQ,UACvB2iQ,EAAcp8P,EAAQ,GAAGzJ,OAEvB4lQ,EADEjiM,EAAmBl6D,EAAQ,IACfrG,EAEAoiQ,GAAYD,WAAWjnN,EAAQ3/C,EAASyE,GAExDzE,EAAUA,EAAQojB,UAAU,EAAG3e,EAAQyiQ,GAAelnQ,EAAQojB,UAAU6jP,GACxEE,EAAe5iQ,UAAYE,EAAQyiQ,EAErC,OAAOx6C,GAAKx/M,KAAKlN,IAEfqnQ,GAAeL,GACfM,GAAW,CACbD,aAAcA,GACdL,aAAcA,IAGZO,GAAO,EAAGC,GAAS,EAAG7oM,GAAS,EAC/B0iE,GAAO,SAAUz7F,EAAM8uH,GACzB,IAAItwI,EAAOwhB,EAAKvkC,OAASqzJ,EAAMrzJ,OAAS,EACpComQ,EAAQ,IAAIxiQ,MAAMmf,GAClBsjP,EAAM,IAAIziQ,MAAMmf,GAChBujP,EAAQ,SAAUnhP,EAAOY,EAAKwgP,GAChC,MAAO,CACLphP,MAAOA,EACPY,IAAKA,EACLwgP,KAAMA,IAGNC,EAAc,SAAUC,EAAQC,EAAMC,EAAQC,EAAM7/P,GACtD,IAAImmK,EAAS25F,EAAeJ,EAAQC,EAAMC,EAAQC,GAClD,GAAe,OAAX15F,GAAmBA,EAAO/nJ,QAAUuhP,GAAQx5F,EAAOq5F,OAASG,EAAOE,GAAQ15F,EAAOnnJ,MAAQ0gP,GAAUv5F,EAAOq5F,OAASE,EAASE,EAAQ,CACvI,IAAIrmQ,EAAImmQ,EACJ5jQ,EAAI8jQ,EACR,MAAOrmQ,EAAIomQ,GAAQ7jQ,EAAI+jQ,EACjBtmQ,EAAIomQ,GAAQ7jQ,EAAI+jQ,GAAQriO,EAAKjkC,KAAO+yJ,EAAMxwJ,IAC5CkE,EAAOrD,KAAK,CACVwiQ,GACA3hO,EAAKjkC,OAELA,IACAuC,GAEE6jQ,EAAOD,EAASG,EAAOD,GACzB5/P,EAAOrD,KAAK,CACV45D,GACA/4B,EAAKjkC,OAELA,IAEFyG,EAAOrD,KAAK,CACVyiQ,GACA9yG,EAAMxwJ,OAENA,OAIH,CACL2jQ,EAAYC,EAAQv5F,EAAO/nJ,MAAOwhP,EAAQz5F,EAAO/nJ,MAAQ+nJ,EAAOq5F,KAAMx/P,GACtE,IAAK,IAAI+/P,EAAK55F,EAAO/nJ,MAAO2hP,EAAK55F,EAAOnnJ,MAAO+gP,EAC7C//P,EAAOrD,KAAK,CACVwiQ,GACA3hO,EAAKuiO,KAGTN,EAAYt5F,EAAOnnJ,IAAK2gP,EAAMx5F,EAAOnnJ,IAAMmnJ,EAAOq5F,KAAMK,EAAM7/P,KAG9DggQ,EAAa,SAAU5hP,EAAOohP,EAAMG,EAAME,GAC5C,IAAI7gP,EAAMZ,EACV,MAAOY,EAAMwgP,EAAOK,GAAQ7gP,EAAM2gP,GAAQniO,EAAKxe,KAASstI,EAAMttI,EAAMwgP,KAChExgP,EAEJ,OAAOugP,EAAMnhP,EAAOY,EAAKwgP,IAEvBM,EAAiB,SAAUJ,EAAQC,EAAMC,EAAQC,GACnD,IAAInuQ,EAAIiuQ,EAAOD,EACXpsQ,EAAIusQ,EAAOD,EACf,GAAU,IAANluQ,GAAiB,IAAN4B,EACb,OAAO,KAET,IAKIxB,EAAG4rB,EAAGnkB,EAAGwS,EAAG7Z,EALZotB,EAAQ5tB,EAAI4B,EACZ2sQ,EAAM3sQ,EAAI5B,EACVwC,GAAU+rQ,EAAM,IAAM,EAAIA,EAAMA,EAAM,GAAK,EAI/C,IAHAZ,EAAM,EAAInrQ,GAAUwrQ,EACpBJ,EAAI,EAAIprQ,GAAUyrQ,EAAO,EAEpB7tQ,EAAI,EAAGA,GAAKoC,IAAUpC,EAAG,CAC5B,IAAK4rB,GAAK5rB,EAAG4rB,GAAK5rB,EAAG4rB,GAAK,EAAG,CAC3BnkB,EAAImkB,EAAIxpB,EACJwpB,KAAO5rB,GAAK4rB,IAAM5rB,GAAKutQ,EAAM9lQ,EAAI,GAAK8lQ,EAAM9lQ,EAAI,GAClD8lQ,EAAM9lQ,GAAK8lQ,EAAM9lQ,EAAI,GAErB8lQ,EAAM9lQ,GAAK8lQ,EAAM9lQ,EAAI,GAAK,EAE5BwS,EAAIszP,EAAM9lQ,GACVrH,EAAI6Z,EAAI2zP,EAASE,EAASliP,EAC1B,MAAO3R,EAAI4zP,GAAQztQ,EAAI2tQ,GAAQriO,EAAKzxB,KAAOugJ,EAAMp6J,GAC/CmtQ,EAAM9lQ,KAAOwS,IACX7Z,EAEJ,GAAIotB,EAAQ,IAAM,GAAKA,EAAQxtB,GAAK4rB,GAAKA,GAAK4B,EAAQxtB,GAChDwtQ,EAAI/lQ,EAAI+lB,IAAU+/O,EAAM9lQ,GAC1B,OAAOymQ,EAAWV,EAAI/lQ,EAAI+lB,GAAQ5B,EAAIgiP,EAASE,EAAQD,EAAME,GAInE,IAAKniP,EAAI4B,EAAQxtB,EAAG4rB,GAAK4B,EAAQxtB,EAAG4rB,GAAK,EAAG,CAC1CnkB,EAAImkB,EAAIxpB,EAASorB,EACb5B,IAAM4B,EAAQxtB,GAAK4rB,IAAM4B,EAAQxtB,GAAKwtQ,EAAI/lQ,EAAI,IAAM+lQ,EAAI/lQ,EAAI,GAC9D+lQ,EAAI/lQ,GAAK+lQ,EAAI/lQ,EAAI,GAAK,EAEtB+lQ,EAAI/lQ,GAAK+lQ,EAAI/lQ,EAAI,GAEnBwS,EAAIuzP,EAAI/lQ,GAAK,EACbrH,EAAI6Z,EAAI2zP,EAASE,EAASliP,EAC1B,MAAO3R,GAAK2zP,GAAUxtQ,GAAK0tQ,GAAUpiO,EAAKzxB,KAAOugJ,EAAMp6J,GACrDotQ,EAAI/lQ,GAAKwS,IACT7Z,IAEF,GAAIotB,EAAQ,IAAM,IAAMxtB,GAAK4rB,GAAKA,GAAK5rB,GACjCwtQ,EAAI/lQ,IAAM8lQ,EAAM9lQ,EAAI+lB,GACtB,OAAO0gP,EAAWV,EAAI/lQ,GAAImkB,EAAIgiP,EAASE,EAAQD,EAAME,MAM3D7/P,EAAS,GAEb,OADAy/P,EAAY,EAAGjiO,EAAKvkC,OAAQ,EAAGqzJ,EAAMrzJ,OAAQ+G,GACtCA,GAELkgQ,GAAO,CACTf,KAAMA,GACN5oM,OAAQA,GACR6oM,OAAQA,GACRnmI,KAAMA,IAGJknI,GAAe,SAAUriQ,GAC3B,OAAI6gD,GAASqM,UAAUltD,GACdA,EAAI85C,UACF+G,GAAS/9B,OAAO9iB,GAClBg2M,GAASX,UAAUr1M,EAAI7C,MAAM,GAC3B0jD,GAASw/F,UAAUrgJ,GACrB,UAASA,EAAI7C,KAAO,SAEtB,IAELmlQ,GAAmB,SAAUthQ,GAC/B,IAAI8pM,EAAMpnM,EAAMue,EAChBA,EAAY3qB,EAAWwE,SAAS8uB,cAAc,OAC9CkgL,EAAOxzM,EAAWwE,SAASypD,yBACvBvkD,IACFihB,EAAU7kB,UAAY4D,GAExB,MAAO0C,EAAOue,EAAUtS,WACtBm7L,EAAKziM,YAAY3E,GAEnB,OAAOonM,GAELy3D,GAAW,SAAUviQ,EAAKgB,EAAMzC,GAClC,IAAI+mD,EAAWg9M,GAAiBthQ,GAChC,GAAIhB,EAAI0hD,iBAAmBnjD,EAAQyB,EAAI0P,WAAWvU,OAAQ,CACxD,IAAI4N,EAAS/I,EAAI0P,WAAWnR,GAC5BwK,EAAOzM,WAAW1B,aAAa0qD,EAAUv8C,QAEzC/I,EAAIqI,YAAYi9C,IAGhBk9M,GAAW,SAAUxiQ,EAAKzB,GAC5B,GAAIyB,EAAI0hD,iBAAmBnjD,EAAQyB,EAAI0P,WAAWvU,OAAQ,CACxD,IAAI4N,EAAS/I,EAAI0P,WAAWnR,GAC5BwK,EAAOzM,WAAW+iB,YAAYtW,KAG9B05P,GAAY,SAAUtnI,EAAMn7H,GAC9B,IAAIzB,EAAQ,EACZqI,EAAKu0H,GAAM,SAAU9jH,GACfA,EAAO,KAAO+qP,GAAKf,KACrB9iQ,IACS8Y,EAAO,KAAO+qP,GAAKd,QAC5BiB,GAASviQ,EAAKqX,EAAO,GAAI9Y,GACzBA,KACS8Y,EAAO,KAAO+qP,GAAK3pM,QAC5B+pM,GAASxiQ,EAAKzB,OAIhBmkQ,GAAS,SAAU1iQ,GACrB,OAAO2G,EAAO3M,EAAIspE,GAAOtjE,EAAI0P,YAAa2yP,KAAe,SAAUlwN,GACjE,OAAOA,EAAKh3C,OAAS,MAGrB+uB,GAAQ,SAAUspO,EAAWxzP,GAC/B,IAAI2iQ,EAAmB3oQ,EAAIspE,GAAOtjE,EAAI0P,YAAa2yP,IAEnD,OADAI,GAAUL,GAAKjnI,KAAKwnI,EAAkBnP,GAAYxzP,GAC3CA,GAEL4iQ,GAAY,CACd7pN,KAAM2pN,GACNx4O,MAAOA,IAGL24O,GAAoBtrQ,GAAK2e,EAAO5B,QAChCwuP,GAAmB,WACrB,OAAOD,GAAkBnrQ,MAAMqd,YAAW,WACxC,IAAIyP,EAAMltB,EAAWwE,SAASinQ,eAAeC,mBAAmB,QAEhE,OADAH,GAAkBlrQ,IAAIue,EAAOH,KAAKyO,IAC3BA,MAGPy+O,GAAa,SAAUjiQ,GACzB,OAAsC,IAA/BA,EAAKf,QAAQ,cAElBijQ,GAAwB,SAAU1P,GACpC,MAAO,CACL35P,KAAM,aACN25P,UAAWA,EACX15P,QAAS,GACTynD,SAAU,KACV4hN,eAAgB,OAGhBC,GAAsB,SAAUtpQ,GAClC,MAAO,CACLD,KAAM,WACN25P,UAAW,KACX15P,QAASA,EACTynD,SAAU,KACV4hN,eAAgB,OAGhBE,GAAmB,SAAUjrQ,GAC/B,IAAIo7P,EAAW15P,EAASwpQ,EAOxB,OANA9P,EAAYoP,GAAU7pN,KAAK3gD,EAAO0T,WAClCw3P,EAAmB9tP,GAAKg+O,GAAW,SAAUxyP,GAC3C,IAAIuiQ,EAAUnC,GAASN,aAAa1oQ,EAAO8mD,WAAYl+C,GACvD,OAAOuiQ,EAAQpoQ,OAAS,EAAI,CAACooQ,GAAW,MAE1CzpQ,EAAUwpQ,EAAiBjkQ,KAAK,IACzB4jQ,GAAWnpQ,GAAWopQ,GAAsBI,GAAoBF,GAAoBtpQ,IAEzF0pQ,GAAgB,SAAUprQ,EAAQiS,EAAOvP,GACxB,eAAfuP,EAAMxQ,KACR+oQ,GAAU14O,MAAM7f,EAAMmpP,UAAWp7P,EAAO0T,WAExC1T,EAAOyhD,WAAWxvC,EAAMvQ,QAAS,CAAEuS,OAAQ,QAE7CjU,EAAOuL,UAAU4vD,eAAez4D,EAASuP,EAAM84P,eAAiB94P,EAAMk3C,WAEpEkiN,GAAkB,SAAUp5P,GAC9B,MAAsB,eAAfA,EAAMxQ,KAAwBwQ,EAAMmpP,UAAUn0P,KAAK,IAAMgL,EAAMvQ,SAEpE4pQ,GAAuB,SAAUr5P,GACnC,IAAIrK,EAAMilD,GAAQL,QAAQ,OAAQk+M,MAGlC,OAFApmI,GAAM18H,EAAKyjQ,GAAgBp5P,IAC3BzD,EAAKs8I,GAAcljJ,EAAK,qBAAsBwhE,IACvCg1F,GAAMx2J,IAEX2jQ,GAAkB,SAAUC,EAAQC,GACtC,OAAOJ,GAAgBG,KAAYH,GAAgBI,IAEjDC,GAAyB,SAAUF,EAAQC,GAC7C,OAAOH,GAAqBE,KAAYF,GAAqBG,IAE3DE,GAAS,SAAUH,EAAQC,GAC7B,SAAKD,IAAWC,OAELF,GAAgBC,EAAQC,IAG1BC,GAAuBF,EAAQC,KAGtCG,GAAS,CACXd,sBAAuBA,GACvBE,oBAAqBA,GACrBC,iBAAkBA,GAClBG,cAAeA,GACfpsC,KAAM2sC,IAGR,SAASE,GAAa7rQ,GACpB,IAAuC+qQ,EAAgBe,EAAnD5qQ,EAAOvH,KAAMwM,EAAQ,EAAGpB,EAAO,GAA2CgnQ,EAAQ,EAClFC,EAAa,WACf,OAAiB,IAAVD,GAELE,EAAY,SAAUC,GACpBF,MACF9qQ,EAAKgrQ,OAASA,IAGd9xL,EAAW,SAAUx2C,GACvB5jC,EAAOo6E,SAASx2C,IAEduoO,EAAwB,SAAUr+P,GACpCm+P,GAAU,GACV/qQ,EAAK6F,IAAI,GAAI+G,IAEXs+P,EAAY,WACVlrQ,EAAKgrQ,SACPD,GAAU,GACV/qQ,EAAK6F,QAGT/G,EAAOsO,GAAG,QAAQ,WAChBpN,EAAK6F,SAEP/G,EAAOsO,GAAG,qBAAqB,SAAUR,GACvC,IAAIuC,EAAMvC,EAAE0yD,QACA,SAARnwD,GAA0B,SAARA,GAA0B,eAARA,IACtC+7P,IACAlrQ,EAAKmrQ,mBAGTrsQ,EAAOsO,GAAG,eAAe,SAAUR,GACjC,IAAIuC,EAAMvC,EAAE0yD,QACA,SAARnwD,GAA0B,SAARA,GAA0B,eAARA,GACtC87P,EAAsBr+P,MAG1B9N,EAAOsO,GAAG,yBAAyB,WACjCpN,EAAKmrQ,kBAEPrsQ,EAAOsO,GAAG,iCAAkC69P,GAC5CnsQ,EAAOsO,GAAG,UAAW69P,GACrBnsQ,EAAOsO,GAAG,SAAS,SAAUR,GAC3B,IAAIqgB,EAAUrgB,EAAEqgB,QACZrgB,EAAEi8D,wBAGF57C,GAAW,IAAMA,GAAW,IAAMA,GAAW,IAAMA,GAAW,IAAkB,KAAZA,GAAkBrgB,EAAEwsC,WAC1F6xN,IACAnsQ,EAAOyU,eAEO,KAAZ0Z,GAA8B,IAAZA,GACpBnuB,EAAOyU,cAELq3P,GAAyB5qQ,EAAKgrQ,SAAoE,IAA1DN,GAAO5sC,KAAK4sC,GAAOX,iBAAiBjrQ,GAAS+E,EAAK,OACnE,IAArB/E,EAAOk6E,YACTE,GAAS,GACTp6E,EAAO8lC,KAAK,SAAU,CACpB7zB,MAAOlN,EAAK,GACZ6iE,UAAW,QAGf5nE,EAAO8lC,KAAK,cACZgmO,GAAwB,EACxB9rQ,EAAOyU,mBAGXzU,EAAOsO,GAAG,WAAW,SAAUR,GAC7B,IAAIqgB,EAAUrgB,EAAEqgB,QAChB,IAAIrgB,EAAEi8D,qBAGN,GAAI57C,GAAW,IAAMA,GAAW,IAAMA,GAAW,IAAMA,GAAW,IAAkB,KAAZA,EAClEjtB,EAAKgrQ,QACPC,EAAsBr+P,OAF1B,CAMA,IAAIw+P,EAASx+P,EAAEwsC,UAAYxsC,EAAEy6E,QAAUz6E,EAAE06E,UACpCr6D,EAAU,IAAMA,EAAU,KAAmB,MAAZA,GAA+B,KAAZA,GAAmBjtB,EAAKgrQ,QAAWI,IAC1FprQ,EAAKmrQ,eACLJ,GAAU,GACV/qQ,EAAK6F,IAAI,GAAI+G,GACbg+P,GAAwB,OAG5B9rQ,EAAOsO,GAAG,aAAa,SAAUR,GAC3B5M,EAAKgrQ,QACPC,EAAsBr+P,MAG1B,IAAIy+P,EAA0B,SAAUv+O,GACtC,MAA2B,0BAApBA,EAAMw+O,WAEXC,EAAuB,SAAUz+O,GACnC,MAA2B,eAApBA,EAAMw+O,WAA6C,OAAfx+O,EAAMjpB,MAyInD,OAvIA/E,EAAOsO,GAAG,SAAS,SAAUR,GACvBA,EAAE0+P,YAAcD,EAAwBz+P,IAAM2+P,EAAqB3+P,KACrEq+P,EAAsBr+P,MAG1B9N,EAAOw6E,YAAY,SAAU,GAAI,QACjCx6E,EAAOw6E,YAAY,sBAAuB,GAAI,QAC9Cx6E,EAAOsO,GAAG,gCAAgC,SAAUR,GAC7CA,EAAEi8D,sBACL/pE,EAAOyU,iBAGXvT,EAAO,CACL6D,KAAMA,EACNmnQ,QAAQ,EACRG,aAAc,WACRL,MACFjB,EAAiBx0C,GAAYC,gBAAgBx2N,EAAOuL,aAGxDxE,IAAK,SAAUkL,EAAO+b,GACpB,IAAI3qB,EAEAukE,EAAW8kM,EADXzsQ,EAAWD,EAAOC,SAKtB,GAHAysQ,EAAed,GAAOX,iBAAiBjrQ,GACvCiS,EAAQA,GAAS,GACjBA,EAAQrS,GAAMyC,OAAO4P,EAAOy6P,IACP,IAAjBV,KAA0BhsQ,EAAO6jC,QACnC,OAAO,KAGT,GADA+jC,EAAY7iE,EAAKoB,GACbnG,EAAO8lC,KAAK,gBAAiB,CAC7B7zB,MAAOA,EACP21D,UAAWA,EACXu9H,cAAen3K,IACd+7C,qBACH,OAAO,KAET,GAAInC,GAAagkM,GAAO5sC,KAAKp3J,EAAW31D,GACtC,OAAO,KAKT,GAHIlN,EAAKoB,KACPpB,EAAKoB,GAAO4kQ,eAAiBA,GAE3B9qQ,EAAS0sQ,yBACP5nQ,EAAKhC,OAAS9C,EAAS0sQ,wBAAyB,CAClD,IAAKtpQ,EAAI,EAAGA,EAAI0B,EAAKhC,OAAS,EAAGM,IAC/B0B,EAAK1B,GAAK0B,EAAK1B,EAAI,GAErB0B,EAAKhC,SACLoD,EAAQpB,EAAKhC,OAGjBkP,EAAMk3C,SAAWotK,GAAYC,gBAAgBx2N,EAAOuL,WAChDpF,EAAQpB,EAAKhC,OAAS,IACxBgC,EAAKhC,OAASoD,EAAQ,GAExBpB,EAAK0B,KAAKwL,GACV9L,EAAQpB,EAAKhC,OAAS,EACtB,IAAIyD,EAAO,CACTyL,MAAOA,EACP21D,UAAWA,EACXu9H,cAAen3K,GAOjB,OALAhuB,EAAO8lC,KAAK,UAAWt/B,GACnBL,EAAQ,IACVi0E,GAAS,GACTp6E,EAAO8lC,KAAK,SAAUt/B,IAEjByL,GAET6xB,KAAM,WACJ,IAAI7xB,EAYJ,OAXI/Q,EAAKgrQ,SACPhrQ,EAAK6F,MACL7F,EAAKgrQ,QAAS,EACdD,GAAU,IAER9lQ,EAAQ,IACV8L,EAAQlN,IAAOoB,GACfylQ,GAAOR,cAAcprQ,EAAQiS,GAAO,GACpCmoE,GAAS,GACTp6E,EAAO8lC,KAAK,OAAQ,CAAE7zB,MAAOA,KAExBA,GAET+xB,KAAM,WACJ,IAAI/xB,EAOJ,OANI9L,EAAQpB,EAAKhC,OAAS,IACxBkP,EAAQlN,IAAOoB,GACfylQ,GAAOR,cAAcprQ,EAAQiS,GAAO,GACpCmoE,GAAS,GACTp6E,EAAO8lC,KAAK,OAAQ,CAAE7zB,MAAOA,KAExBA,GAET4+D,MAAO,WACL9rE,EAAO,GACPoB,EAAQ,EACRjF,EAAKgrQ,QAAS,EACdhrQ,EAAK6D,KAAOA,EACZ/E,EAAO8lC,KAAK,eAEd8mO,QAAS,WACP,OAAOzmQ,EAAQ,GAAKjF,EAAKgrQ,QAAUnnQ,EAAK,KAAO6mQ,GAAO5sC,KAAK4sC,GAAOX,iBAAiBjrQ,GAAS+E,EAAK,KAEnG8nQ,QAAS,WACP,OAAO1mQ,EAAQpB,EAAKhC,OAAS,IAAM7B,EAAKgrQ,QAE1CvgQ,SAAU,SAAUvI,GAIlB,OAHAgpQ,IACAlrQ,EAAKmrQ,eACLnrQ,EAAK6iK,OAAO3gK,GACLlC,EAAK6F,OAEdg9J,OAAQ,SAAU3gK,GAChB,IACE2oQ,IACA3oQ,IACA,QACA2oQ,MAGJphM,MAAO,SAAUmiM,EAAWC,GAC1B,IAAInlM,EAAWze,EACXjoD,EAAKyK,SAASmhQ,KAChB3jN,EAAWpkD,EAAKoB,GAAOgjD,SACvBye,EAAY7iE,EAAKoB,EAAQ,GACzBylQ,GAAOR,cAAcprQ,EAAQ4nE,GAAW,GACpC1mE,EAAKyK,SAASohQ,KAChBhoQ,EAAKoB,EAAQ,GAAG4kQ,eAAiB5hN,MAKlCjoD,EAGT,IAAI8rQ,GAAmB,GAAIC,GAAW57D,GAAS9iM,OAAQ2+P,GAAS77D,GAAS7iM,KACrE2+P,GAAqB,SAAUlvQ,EAAM4nH,GACvC,IAAIthH,EAAQyoQ,GAAiB/uQ,GACxBsG,IACHyoQ,GAAiB/uQ,GAAQsG,EAAQ,IAEnCyoQ,GAAiB/uQ,GAAMwI,KAAKo/G,IAE1BruC,GAAc,SAAUv5E,EAAM+B,GAChCktQ,GAAOF,GAAiB/uQ,IAAO,SAAU4nH,GACvCA,EAAK7lH,OAGTmtQ,GAAmB,OAAO,SAAUntQ,GAClC,IACIotQ,EAAOnnM,EADPv8C,EAAM1pB,EAAOuL,UAAUugB,SAEvBuhP,EAAgB,SAAUC,GAC5B,OAAOF,EAAME,EAAIjlN,mBAAuE,IAAnDgpJ,GAASxpM,QAAQo+D,EAAQqnM,EAAIjlN,kBAEhEklN,EAAU,SAAUC,EAAMC,GAC5B16D,GAAS06D,GAAM94P,SACfo+L,GAASy6D,GAAM1+P,OAAO,YAAYA,OAAO2+P,EAAKn2P,aAEhD81P,EAAQ3kN,GAASgxJ,eAAe,OAC3B/vL,EAAIE,YACPq8C,EAASjmE,EAAOuL,UAAUw/C,oBAC1BmiN,GAAOD,GAASA,GAAShnM,EAAQmnM,GAAQC,IAAgB,SAAUC,GACjEC,EAAQD,EAAIjlN,gBAAiBilN,UAInC,IAAII,GAAQ,CAAEl2L,YAAaA,IAEvBm2L,GAAc,qBACdC,GAAShuQ,GAAM4O,KACfq/P,GAASvuC,GAAYN,KACrB8uC,GAAgB,SAAUxiQ,GAC5B,MAAO,YAAYtH,KAAKsH,EAAKnH,WAE3B4pQ,GAAwB,SAAUniQ,EAAKN,EAAMvH,GAC/C,OAAO6H,EAAI48C,UAAUl9C,EAAMvH,IAAWuH,IAASvH,IAAW6H,EAAIs8C,QAAQnkD,IAEpE8lH,GAAe,SAAUg1G,EAAIn1M,EAAKxB,GACpC,IAAI2B,EAAW7rB,EAAQgwQ,EAgBvB,OAfAnkP,EAAYH,EAAIxB,EAAQ,iBAAmB,gBAC3ClqB,EAAS0rB,EAAIxB,EAAQ,cAAgB,aACjCugC,GAASqM,UAAUjrC,KACrBmkP,EAAUnkP,EAAUvS,WAAWvU,OAAS,GACnCmlB,GAASlqB,GACZA,IAEF6rB,EAAYA,EAAUvS,WAAWtZ,EAASgwQ,EAAUA,EAAUhwQ,IAE5DyqD,GAAS/9B,OAAOb,IAAc3B,GAASlqB,GAAU6rB,EAAUyyG,UAAUv5H,SACvE8mB,EAAY,IAAIuuL,GAAWvuL,EAAWg1M,EAAGnrN,WAAWiZ,QAAU9C,GAE5D4+B,GAAS/9B,OAAOb,KAAe3B,GAAoB,IAAXlqB,IAC1C6rB,EAAY,IAAIuuL,GAAWvuL,EAAWg1M,EAAGnrN,WAAWwoH,QAAUryG,GAEzDA,GAELokP,GAAS,SAAUriQ,EAAKN,EAAMrN,EAAM+xB,GACtC,IAAI45H,EAAUh+I,EAAIiE,OAAO5R,EAAM+xB,GAG/B,OAFA1kB,EAAKpH,WAAW1B,aAAaonJ,EAASt+I,GACtCs+I,EAAQ35I,YAAY3E,GACbs+I,GAELskH,GAAmB,SAAUtiQ,EAAKN,EAAMqhB,EAAM1uB,EAAM+xB,GACtD,IAAI9H,EAAQ2kC,GAAQN,QAAQjhD,GACxBs+I,EAAU/8F,GAAQN,QAAQ3gD,EAAIiE,OAAO5R,EAAM+xB,IAC3CksC,EAAWvvC,EAAOopL,GAAa7tL,GAAS4tL,GAAa5tL,GASzD,OARA0sC,GAASg1F,EAAS1tF,GACdvvC,GACFjqB,GAAOwlB,EAAO0hI,GACdF,GAAQE,EAAS1hI,KAEjB3hB,GAAM2hB,EAAO0hI,GACb96I,GAAO86I,EAAS1hI,IAEX0hI,EAAQh+I,OAEbuiQ,GAAc,SAAUviQ,EAAKN,EAAM2I,GACrC,QAAI45P,GAAOviQ,EAAM2I,EAAOrE,YAGpBi+P,GAAOviQ,EAAM2I,EAAO4Y,SAGpB5Y,EAAO9K,SACFs/C,GAASqM,UAAUxpD,IAASM,EAAIjO,GAAG2N,EAAM2I,EAAO9K,eADzD,KAIEilQ,GAAyB,SAAU9iQ,EAAM2I,GAC3C,OAAOA,EAAOo6P,OAA0B,MAAjB/iQ,EAAKyF,SAE1Bu9P,GAAS,SAAU1iQ,EAAKN,EAAMqhB,EAAMgyM,GAEtC,OADArzN,EAAOg0N,GAAYZ,wBAAwBpzN,EAAMqhB,EAAMgyM,IAC/CrzN,GAA2B,OAAlBA,EAAKnH,UAAqByH,EAAIs8C,QAAQ58C,IAErDijQ,GAAe,SAAU1vC,EAAIvzN,EAAM2I,GACrC,IACIu6P,EADAtqQ,EAAaoH,EAAKpH,WAElB0H,EAAMizN,EAAGjzN,IAAK2wP,EAAkB19B,EAAG5+N,SAASi5D,kBAC5CjlD,EAAO4Y,QACJ0vO,EAUCr4P,IAAe0H,EAAI06C,YAChBryC,EAAOw6P,YAAeZ,GAAOviQ,EAAM2I,EAAOw6P,aAC7Cb,GAAOhuQ,GAAM4rB,KAAKlgB,EAAKgM,aAAa,SAAUhM,GACxCg0N,GAAYhhG,QAAQugG,EAAI09B,EAAiBjxP,EAAKnH,SAAS+f,eACpDsqP,EAIHA,EAAav+P,YAAY3E,IAHzBkjQ,EAAeP,GAAOriQ,EAAKN,EAAMixP,GACjC3wP,EAAIsZ,WAAWspP,EAAc3vC,EAAG5+N,SAASk5D,0BAK3Cq1M,EAAe,MApBnB5iQ,EAAIs8C,QAAQ58C,KAAUM,EAAIs8C,QAAQhkD,KAC/BoqQ,GAAO1iQ,EAAKN,GAAM,IAAWgjQ,GAAO1iQ,EAAKN,EAAKiM,YAAY,EAAM,IACnEjM,EAAK9I,aAAaoJ,EAAIiE,OAAO,MAAOvE,EAAKiM,YAEtC+2P,GAAO1iQ,EAAKN,GAAM,IAAUgjQ,GAAO1iQ,EAAKN,EAAK08C,WAAW,EAAO,IAClE18C,EAAK2E,YAAYrE,EAAIiE,OAAO,SAsBhCoE,EAAO9K,UAAY8K,EAAOrE,SAAWi+P,GAAO55P,EAAOrE,OAAQtE,IAG/DM,EAAI+I,OAAOrJ,EAAM,IAEfoJ,GAAe,SAAUmqN,EAAI5qN,EAAQ8qN,EAAMzzN,EAAMojQ,GACnD,IAAIrrQ,EAAG2sB,EAAO2+O,EACV/iQ,EAAMizN,EAAGjzN,IACb,IAAKuiQ,GAAYviQ,EAAKN,EAAM2I,KAAYm6P,GAAuB9iQ,EAAM2I,GACnE,OAAO,EAET,GAAsB,QAAlBA,EAAOU,OAuDT,IAtDAi5P,GAAO35P,EAAO0S,QAAQ,SAAUtnB,EAAOpB,GACrCoB,EAAQigO,GAAYJ,oBAAoBtzN,EAAK0zN,GAAYR,YAAYz/N,EAAO0/N,GAAO9gO,GAC/D,kBAATA,IACTA,EAAOoB,EACPqvQ,EAAc,IAEZz6P,EAAO26P,iBAAoBF,GAAeb,GAAOvuC,GAAYnmL,SAASvtC,EAAK8iQ,EAAazwQ,GAAOoB,KACjGuM,EAAI6vD,SAASnwD,EAAMrN,EAAM,IAE3B0wQ,EAAiB,KAEfA,GAAmD,KAAjC/iQ,EAAImzC,UAAUzzC,EAAM,WACxCA,EAAK2jC,gBAAgB,SACrB3jC,EAAK2jC,gBAAgB,mBAEvB2+N,GAAO35P,EAAO7M,YAAY,SAAU/H,EAAOpB,GACzC,IAAI4wQ,EAMJ,GALAxvQ,EAAQigO,GAAYR,YAAYz/N,EAAO0/N,GACnB,kBAAT9gO,IACTA,EAAOoB,EACPqvQ,EAAc,IAEXA,GAAeb,GAAOjiQ,EAAImzC,UAAU2vN,EAAazwQ,GAAOoB,GAAQ,CACnE,GAAa,UAATpB,IACFoB,EAAQuM,EAAImzC,UAAUzzC,EAAMrN,GACxBoB,IACFwvQ,EAAW,GACXjB,GAAOvuQ,EAAMrF,MAAM,QAAQ,SAAUquN,GAC/B,WAAWrkN,KAAKqkN,KAClBwmD,IAAaA,EAAW,IAAM,IAAMxmD,MAGpCwmD,IAEF,YADAjjQ,EAAIC,UAAUP,EAAMrN,EAAM4wQ,GAKnB,UAAT5wQ,GACFqN,EAAK2jC,gBAAgB,aAEnB0+N,GAAY3pQ,KAAK/F,IACnBqN,EAAK2jC,gBAAgB,YAAchxC,GAErCqN,EAAK2jC,gBAAgBhxC,OAGzB2vQ,GAAO35P,EAAO9M,SAAS,SAAU9H,GAC/BA,EAAQigO,GAAYR,YAAYz/N,EAAO0/N,GAClC2vC,IAAe9iQ,EAAIoG,SAAS08P,EAAarvQ,IAC5CuM,EAAIs+G,YAAY5+G,EAAMjM,MAG1B2wB,EAAQpkB,EAAI+6M,WAAWr7M,GAClBjI,EAAI,EAAGA,EAAI2sB,EAAMjtB,OAAQM,IAAK,CACjC,IAAI+vH,EAAWpjG,EAAM3sB,GAAGc,SACxB,GAA8B,IAA1BivH,EAASvrH,QAAQ,MAA4C,IAA9BurH,EAASvrH,QAAQ,SAClD,OAAO,EAIb,MAAsB,SAAlBoM,EAAOU,QACT45P,GAAa1vC,EAAIvzN,EAAM2I,IAChB,QAFT,GAKE66P,GAAiB,SAAU9uQ,EAAQ6pB,EAAW5rB,EAAM8gO,EAAMof,GAC5D,IAAI4wB,EAUJ,OATAnB,GAAOtuC,GAAYxsN,WAAW9S,EAAO4L,IAAKie,EAAU3lB,YAAY4nC,WAAW,SAAU/nC,GACnF,IAAIkQ,EACC86P,GAA4B,WAAdhrQ,EAAOzB,IAAiC,SAAdyB,EAAOzB,KAClD2R,EAASyqO,GAAY9/D,UAAU5+K,EAAQ+D,EAAQ9F,EAAM8gO,EAAMof,GACvDlqO,IAA2B,IAAjBA,EAAOja,QACnB+0Q,EAAahrQ,OAIZgrQ,GAELC,GAAe,SAAUhvQ,EAAQ69O,EAAYkxB,EAAYllP,EAAWlZ,EAAQ3W,EAAOia,EAAQ8qN,GAC7F,IAAIh7N,EAAQtE,EAAOwvQ,EAAWC,EAAY7rQ,EAAG8rQ,EACzCvjQ,EAAM5L,EAAO4L,IACjB,GAAImjQ,EAAY,CAEd,IADAI,EAAmBJ,EAAW7qQ,WACzBH,EAAS8lB,EAAU3lB,WAAYH,GAAUA,IAAWorQ,EAAkBprQ,EAASA,EAAOG,WAAY,CAErG,IADAzE,EAAQmM,EAAInM,MAAMsE,GAAQ,GACrBV,EAAI,EAAGA,EAAIw6O,EAAW96O,OAAQM,IACjC,GAAIqR,GAAa1U,EAAQ69O,EAAWx6O,GAAI07N,EAAMt/N,EAAOA,GAAQ,CAC3DA,EAAQ,EACR,MAGAA,IACEwvQ,GACFxvQ,EAAMwQ,YAAYg/P,GAEfC,IACHA,EAAazvQ,GAEfwvQ,EAAYxvQ,IAGZzF,GAAWia,EAAOm7P,OAAUxjQ,EAAIs8C,QAAQ6mN,KAC1CllP,EAAYje,EAAI5R,MAAM+0Q,EAAYllP,IAEhColP,IACFt+P,EAAOzM,WAAW1B,aAAaysQ,EAAWt+P,GAC1Cu+P,EAAWj/P,YAAYU,IAG3B,OAAOkZ,GAEL8/J,GAAW,SAAUk1C,EAAI5gO,EAAM8gO,EAAMzzN,EAAM6yO,GAC7C,IACIh1L,EAAUz/B,EADVm0N,EAAahf,EAAG3wN,UAAU5O,IAAIrB,GAAOgW,EAAS4pO,EAAW,GAC1C7uO,GAAkB,EACjCpD,EAAMizN,EAAGjzN,IACTL,EAAYszN,EAAGtzN,UACf8jQ,EAAoB,SAAUxlP,GAChC,IAAIklP,EAAaD,GAAejwC,EAAIh1M,EAAW5rB,EAAM8gO,EAAMof,GAC3D,OAAO6wB,GAAanwC,EAAIgf,EAAYkxB,EAAYllP,EAAWA,GAAW,EAAM5V,EAAQ8qN,IAElFuwC,EAAuB,SAAUhkQ,GACnC,OAAOgzN,GAAUniK,eAAe7wD,IAASm9C,GAASqM,UAAUxpD,KAAsB,WAAZA,EAAKhJ,IAA+B,SAAZgJ,EAAKhJ,KAEjG8nE,EAAU,SAAU9+D,GACtB,IAAI6H,EAAU9P,EAAG1E,EAAG4wQ,EAAqBr1D,EAOzC,GANIzxJ,GAASqM,UAAUxpD,IAASM,EAAI+wD,mBAAmBrxD,KACrDikQ,EAAsBvgQ,EACtBA,EAAmD,SAAjCpD,EAAI+wD,mBAAmBrxD,GACzC4uM,GAA0B,GAE5B/mM,EAAWvT,GAAM4rB,KAAKlgB,EAAKgM,YACvBtI,IAAoBkrM,EACtB,IAAK72M,EAAI,EAAG1E,EAAIk/O,EAAW96O,OAAQM,EAAI1E,EAAG0E,IACxC,GAAIqR,GAAamqN,EAAIgf,EAAWx6O,GAAI07N,EAAMzzN,EAAMA,GAC9C,MAIN,GAAI2I,EAAOuhD,MACLriD,EAASpQ,OAAQ,CACnB,IAAKM,EAAI,EAAG1E,EAAIwU,EAASpQ,OAAQM,EAAI1E,EAAG0E,IACtC+mE,EAAQj3D,EAAS9P,IAEf62M,IACFlrM,EAAkBugQ,KAKtBnmM,EAAS,SAAUlhD,GACrB,IAAI5c,EAAOM,EAAItM,IAAI4oB,EAAQ,SAAW,QAClCgS,EAAM5uB,EAAK4c,EAAQ,aAAe,aAQtC,OAPIonP,EAAqBp1O,KACvBA,EAAMA,EAAIhS,EAAQ,aAAe,cAE/BugC,GAAS/9B,OAAOwP,IAA4B,IAApBA,EAAIn1B,KAAKhC,SACnCm3B,EAAMhS,EAAQ5c,EAAK+8C,iBAAmB/8C,EAAKqgB,YAAcrgB,EAAKqgB,aAAergB,EAAK+8C,iBAEpFz8C,EAAI+I,OAAOrJ,GAAM,GACV4uB,GAELs1O,EAAiB,SAAU9lP,GAC7B,IAAII,EAAgBk/B,EAChB09K,EAA0Bh9M,EAAIg9M,wBAElC,GADAh9M,EAAMi3M,GAAYH,UAAU3B,EAAIn1M,EAAKm0N,GAAY,GAC7C5pO,EAAOja,MAAO,CAIhB,GAHA0vB,EAAMk1N,GAAW5kP,MAAM0vB,GACvBI,EAAiB+/F,GAAag1G,EAAIn1M,GAAK,GACvCs/B,EAAe6gE,GAAag1G,EAAIn1M,GAC5BI,IAAmBk/B,EAAc,CAWnC,GAVI,eAAehlD,KAAK8lB,EAAe3lB,WAAa2lB,EAAevS,aAE/DuS,EAD8B,OAA5BA,EAAe3lB,SACA2lB,EAAevS,WAAWA,YAAcuS,EAExCA,EAAevS,YAAcuS,GAG9C48M,GAA2B,wBAAwB1iO,KAAK0iO,EAAwBviO,WAAa2pQ,GAAc9kN,IAAiBA,EAAazxC,aAC3IyxC,EAAeA,EAAazxC,YAAcyxC,GAExC+kN,GAAsBniQ,EAAKke,EAAgBk/B,GAAe,CAC5D,IAAIyL,EAAS32C,EAAO5X,KAAK4jB,EAAevS,YAAYmF,MAAMoN,GAM1D,OALAulP,EAAkBnB,GAAiBtiQ,EAAK6oD,GAAQ,EAAM,OAAQ,CAC5D,GAAM,SACN,gBAAiB,mBAEnB2U,GAAO,GAGT,GAAI2kM,GAAsBniQ,EAAKo9C,EAAcl/B,GAAiB,CACxD2qC,EAAS32C,EAAO5X,KAAK8iD,EAAahB,WAAWtrC,MAAMssC,GAMvD,OALAqmN,EAAkBnB,GAAiBtiQ,EAAK6oD,GAAQ,EAAO,OAAQ,CAC7D,GAAM,OACN,gBAAiB,mBAEnB2U,GAAO,GAGTt/C,EAAiBmkP,GAAOriQ,EAAKke,EAAgB,OAAQ,CACnD,GAAM,SACN,gBAAiB,aAEnBk/B,EAAeilN,GAAOriQ,EAAKo9C,EAAc,OAAQ,CAC/C,GAAM,OACN,gBAAiB,aAEnBqmN,EAAkBvlP,GAClBulP,EAAkBrmN,GAClBl/B,EAAiBs/C,GAAO,GACxBpgB,EAAeogB,SAEft/C,EAAiBk/B,EAAeqmN,EAAkBvlP,GAEpDJ,EAAII,eAAiBA,EAAe5lB,WAAa4lB,EAAe5lB,WAAa4lB,EAC7EJ,EAAIO,YAAcre,EAAI69C,UAAU3/B,GAChCJ,EAAIs/B,aAAeA,EAAa9kD,WAAa8kD,EAAa9kD,WAAa8kD,EACvEt/B,EAAIQ,UAAYte,EAAI69C,UAAUT,GAAgB,EAEhDo4K,GAAUt6J,KAAKl7D,EAAK8d,GAAK,SAAU7W,GACjC+6P,GAAO/6P,GAAO,SAAUvH,GACtB8+D,EAAQ9+D,GACJm9C,GAASqM,UAAUxpD,IAAsD,cAA7CuzN,EAAGjzN,IAAIutC,SAAS7tC,EAAM,oBAAsCA,EAAKpH,YAAsE,cAAxDo7N,GAAYH,kBAAkBvzN,EAAKN,EAAKpH,aACrJwQ,GAAamqN,EAAI,CACfrpK,MAAM,EACNq2H,OAAO,EACPj8K,OAAQ,OACR+W,OAAQ,CAAE8oP,eAAgB,cACzB,KAAMnkQ,UAKjB,GAAIA,EACEA,EAAKye,UACPL,EAAM9d,EAAIkf,YACVpB,EAAI41D,eAAeh0E,GACnBoe,EAAI8wC,YAAYlvD,GAChBkkQ,EAAe9lP,IAEf8lP,EAAelkQ,QAInB,GAAoD,UAAhDM,EAAI+wD,mBAAmBpxD,EAAUC,WAWhCD,EAAU0C,eAAkBgG,EAAOrE,SAAUhE,EAAIE,OAAO,+CAA+C/I,OAS1Gg9O,GAAkBlhB,EAAI5gO,EAAM8gO,EAAMof,IARlCh1L,EAAWotK,GAAYL,sBAAsB2I,EAAGtzN,WAAW,GAC3DikQ,EAAejkQ,EAAUugB,UACzBvgB,EAAU4vD,eAAehS,GACrBl1C,EAAOrE,QAAU8uO,GAAYjgP,MAAMogO,EAAI5gO,EAAM8gO,EAAMxzN,EAAU4I,aAC/DmrN,GAAYd,UAAU5yN,EAAKL,EAAWA,EAAUugB,UAElD+yM,EAAGpqN,mBAlBL,CACEnJ,EAAOC,EAAUC,UACjB,IAAK,IAAInI,EAAI,EAAG1E,EAAIk/O,EAAW96O,OAAQM,EAAI1E,EAAG0E,IAC5C,GAAIw6O,EAAWx6O,GAAGqsQ,iBACZh7P,GAAamqN,EAAIgf,EAAWx6O,GAAI07N,EAAMzzN,EAAMA,GAC9C,QAkBNqkQ,GAAe,CACjBj7P,aAAcA,GACdC,OAAQg1K,IAGNimF,GAAShwQ,GAAM4O,KACfqhQ,GAAgB,SAAUvkQ,GAC5B,OAAOA,GAA0B,IAAlBA,EAAKye,WAAmBu0M,GAAUniK,eAAe7wD,KAAUorN,GAAYprN,KAAUm9C,GAASuxJ,QAAQ1uM,IAE/GwkQ,GAAqB,SAAUxkQ,EAAM6oM,GACvC,IAAIr3I,EACJ,IAAKA,EAAUxxD,EAAMwxD,EAASA,EAAUA,EAAQq3I,GAAc,CAC5D,GAAyB,IAArBr3I,EAAQ/yC,UAA+C,IAA7B+yC,EAAQw/D,UAAUv5H,OAC9C,OAAOuI,EAET,GAAyB,IAArBwxD,EAAQ/yC,WAAmBu0M,GAAUniK,eAAeW,GACtD,OAAOA,EAGX,OAAOxxD,GAELykQ,GAAqB,SAAUnkQ,EAAKswH,EAAMvvG,GAC5C,IAAImwC,EAASkzM,EACTC,EAAe,IAAInrC,GAAal5N,GACpC,GAAIswH,GAAQvvG,IACVuvG,EAAO4zI,GAAmB5zI,EAAM,mBAChCvvG,EAAOmjP,GAAmBnjP,EAAM,eAC5BsjP,EAAaxqF,QAAQvpD,EAAMvvG,IAAO,CACpC,IAAKmwC,EAAUo/D,EAAKvwG,YAAamxC,GAAWA,IAAYnwC,GACtDqjP,EAAalzM,EACbA,EAAUA,EAAQnxC,YAClBuwG,EAAKjsH,YAAY+/P,GAMnB,OAJApkQ,EAAI+I,OAAOgY,GACX/sB,GAAM4O,KAAK5O,GAAM4rB,KAAKmB,EAAKrV,aAAa,SAAUhM,GAChD4wH,EAAKjsH,YAAY3E,MAEZ4wH,EAGX,OAAOvvG,GAELujP,GAAuB,SAAU5kQ,EAAMiD,EAAQ67D,GACjDwlM,GAAOtkQ,EAAKgM,YAAY,SAAUhM,GAC5BukQ,GAAcvkQ,KACZiD,EAAOjD,IACT8+D,EAAQ9+D,GAENA,EAAKg+C,iBACP4mN,GAAqB5kQ,EAAMiD,EAAQ67D,QAKvC+lM,GAAW,SAAUvkQ,EAAK3N,GAC5B,OAAOud,GAAM,SAAUvd,EAAMqN,GAC3B,SAAUA,IAAQg0N,GAAYnmL,SAASvtC,EAAKN,EAAMrN,MACjDA,IAEDmyQ,GAAa,SAAUxkQ,EAAK3N,EAAMoB,GACpC,OAAOmc,GAAM,SAAUvd,EAAMoB,EAAOiM,GAClCM,EAAI6vD,SAASnwD,EAAMrN,EAAMoB,GACU,KAA/BiM,EAAKkM,aAAa,UACpBlM,EAAK2jC,gBAAgB,SAEvBohO,GAAgBzkQ,EAAKN,KACpBrN,EAAMoB,IAEPgxQ,GAAkB,SAAUzkQ,EAAKN,GACb,SAAlBA,EAAKnH,UAAuD,IAAhCyH,EAAI+6M,WAAWr7M,GAAMvI,QACnD6I,EAAI+I,OAAOrJ,GAAM,IAGjBglQ,GAA2B,SAAU1kQ,EAAKN,GAC5C,IAAImkQ,EACkB,IAAlBnkQ,EAAKye,UAAkBze,EAAKpH,YAA2C,IAA7BoH,EAAKpH,WAAW6lB,WAC5D0lP,EAAiBnwC,GAAYH,kBAAkBvzN,EAAKN,EAAKpH,YACrD0H,EAAIutC,SAAS7tC,EAAM,UAAYmkQ,EACjC7jQ,EAAI6vD,SAASnwD,EAAM,kBAAmBmkQ,GAC7B7jQ,EAAIutC,SAAS7tC,EAAM,qBAAuBmkQ,GACnD7jQ,EAAI6vD,SAASnwD,EAAM,kBAAmB,QAIxCilQ,GAAyB,SAAU3kQ,EAAKqI,EAAQ8qN,EAAMzzN,IACpD2I,EAAO0S,OAAOzS,OAASD,EAAO0S,OAAO8oP,kBACvC7vQ,GAAMknE,KAAKx7D,EAAMkQ,EAAM80P,GAA0B1kQ,GAAM,cACvD0kQ,GAAyB1kQ,EAAKN,KAG9BklQ,GAAkC,SAAU5kQ,EAAKqI,EAAQ8qN,EAAMzzN,GAC7D2I,EAAO0S,QAAU1S,EAAO0S,OAAOo3J,iBACjCmyF,GAAqB5kQ,EAAM6kQ,GAASvkQ,EAAK,YAAawkQ,GAAWxkQ,EAAK,kBAAmB0zN,GAAYR,YAAY7qN,EAAO0S,OAAOo3J,gBAAiBghD,MAGhJ0xC,GAAc,SAAU7kQ,EAAKqI,EAAQ8qN,EAAMzzN,GACvB,QAAlB2I,EAAOrE,QAAsC,QAAlBqE,EAAOrE,SACpCsgQ,GAAqB5kQ,EAAM6kQ,GAASvkQ,EAAK,YAAawkQ,GAAWxkQ,EAAK,WAAY,KAClFA,EAAI+I,OAAO/I,EAAIE,OAAyB,QAAlBmI,EAAOrE,OAAmB,MAAQ,MAAOtE,IAAO,KAGtEolQ,GAAgB,SAAU9kQ,EAAKqI,EAAQ8qN,EAAMzzN,GAC3CA,IAAkC,IAA1B2I,EAAO08P,iBACjBrlQ,EAAOykQ,GAAmBnkQ,EAAK0zN,GAAYZ,wBAAwBpzN,GAAOA,GAC1EA,EAAOykQ,GAAmBnkQ,EAAKN,EAAMg0N,GAAYZ,wBAAwBpzN,GAAM,MAG/EslQ,GAAmB,SAAUhlQ,EAAKqI,EAAQ3I,GAC5C,GAAI2I,EAAO48P,mBAAoB,CAC7B,IAAI1nQ,EAAW8K,EAAOo6P,MAAQ,WAAa,IAC3CuB,GAAOhkQ,EAAIE,OAAO3C,EAAUmC,IAAO,SAAUA,GACvCukQ,GAAcvkQ,IAChBskQ,GAAO37P,EAAO0S,QAAQ,SAAUtnB,EAAOpB,GACrC2N,EAAI6vD,SAASnwD,EAAMrN,EAAM,YAM/B6yQ,GAAoB,SAAU9wQ,EAAQ69O,EAAY9e,EAAMzzN,GAC1DskQ,GAAO/xB,GAAY,SAAU5pO,GAC3B27P,GAAO5vQ,EAAO4L,IAAIE,OAAOmI,EAAOrE,OAAQtE,IAAO,SAAUkpD,GAClDq7M,GAAcr7M,IAGnBm7M,GAAaj7P,aAAa1U,EAAQiU,EAAQ8qN,EAAMvqK,EAAOvgD,EAAO43K,MAAQr3H,EAAQ,SAEhFo8M,GAAiB5wQ,EAAO4L,IAAKqI,EAAQ3I,OAGrCylQ,GAAmB,SAAU/wQ,EAAQiU,EAAQhW,EAAM8gO,EAAMzzN,GACvDozO,GAAY9/D,UAAU5+K,EAAQsL,EAAKpH,WAAYjG,EAAM8gO,IACnD4wC,GAAaj7P,aAAa1U,EAAQiU,EAAQ8qN,EAAMzzN,IAIlD2I,EAAO+8P,oBACThxQ,EAAO4L,IAAIoL,UAAU1L,EAAKpH,YAAY,SAAUH,GAC9C,GAAI26O,GAAY9/D,UAAU5+K,EAAQ+D,EAAQ9F,EAAM8gO,GAE9C,OADA4wC,GAAaj7P,aAAa1U,EAAQiU,EAAQ8qN,EAAMzzN,IACzC,MAKX2lQ,GAAe,CACjBH,kBAAmBA,GACnBP,uBAAwBA,GACxBC,gCAAiCA,GACjCC,YAAaA,GACbC,cAAeA,GACfK,iBAAkBA,IAGhBG,GAAStxQ,GAAM4O,KACf2iQ,GAAkB,SAAU7lQ,GAC9B,OAAOA,GAA0B,IAAlBA,EAAKye,WAAmBu0M,GAAUniK,eAAe7wD,KAAUorN,GAAYprN,KAAUm9C,GAASuxJ,QAAQ1uM,IAE/GiJ,GAAc,SAAUsqN,EAAI5gO,EAAM8gO,EAAMzzN,GAC1C,IAEI69C,EAAUz/B,EAFVm0N,EAAahf,EAAG3wN,UAAU5O,IAAIrB,GAC9BgW,EAAS4pO,EAAW,GAEpB5vO,GAAe3C,GAAQuzN,EAAGtzN,UAAU0C,cACpCrC,EAAMizN,EAAGjzN,IAAKL,EAAYszN,EAAGtzN,UAC7B6lQ,EAAmB,SAAUxpQ,EAAK6tC,GAEpC,GADAA,EAAMA,GAAOxhC,EACTrM,EAAK,CAOP,GANI6tC,EAAI47N,UACN57N,EAAI47N,SAASzpQ,EAAK6tC,EAAKspL,EAAMzzN,GAE/B4lQ,GAAOz7N,EAAI9uB,QAAQ,SAAUtnB,EAAOpB,GAClC2N,EAAI6vD,SAAS7zD,EAAK3J,EAAMqhO,GAAYR,YAAYz/N,EAAO0/N,OAErDtpL,EAAI9uB,OAAQ,CACd,IAAI2qP,EAAW1lQ,EAAImzC,UAAUn3C,EAAK,SAC9B0pQ,GACF1pQ,EAAI0O,aAAa,iBAAkBg7P,GAGvCJ,GAAOz7N,EAAIruC,YAAY,SAAU/H,EAAOpB,GACtC2N,EAAIC,UAAUjE,EAAK3J,EAAMqhO,GAAYR,YAAYz/N,EAAO0/N,OAE1DmyC,GAAOz7N,EAAItuC,SAAS,SAAU9H,GAC5BA,EAAQigO,GAAYR,YAAYz/N,EAAO0/N,GAClCnzN,EAAIoG,SAASpK,EAAKvI,IACrBuM,EAAI2+G,SAAS3iH,EAAKvI,QAKtBkyQ,EAAiB,SAAU1zB,EAAYvyO,GACzC,IAAI8f,GAAQ,EACZ,QAAKnX,EAAO9K,WAGZ+nQ,GAAOrzB,GAAY,SAAU5pO,GAC3B,KAAI,cAAeA,IAAUA,EAAO2V,YAAc3b,EAGlD,OAAIrC,EAAIjO,GAAG2N,EAAM2I,EAAO9K,YAAcutN,GAAYprN,IAChD8lQ,EAAiB9lQ,EAAM2I,GACvBmX,GAAQ,GACD,QAHT,KAMKA,IAELomP,EAAgB,SAAU5lQ,EAAK8d,EAAKy/B,EAAUsoN,GAChD,IACIlwC,EAAUmwC,EADV1vC,EAAc,GACKhzN,GAAkB,EACzCuyN,EAAWttN,EAAOrE,QAAUqE,EAAO4Y,MACnC6kP,EAAU9lQ,EAAIiE,OAAO0xN,GACrB6vC,EAAiBM,GACjBtwC,GAAUt6J,KAAKl7D,EAAK8d,GAAK,SAAU7W,GACjC,IAAI8+P,EACAvnM,EAAU,SAAU9+D,GACtB,IAAInH,EAAU2oJ,EAAYotD,EAAyBq1D,EASnD,GARAA,EAAsBvgQ,EACtB7K,EAAWmH,EAAKnH,SAAS+f,cACzB4oI,EAAaxhJ,EAAKpH,WAAWC,SAAS+f,cAChB,IAAlB5Y,EAAKye,UAAkBne,EAAI+wD,mBAAmBrxD,KAChDikQ,EAAsBvgQ,EACtBA,EAAmD,SAAjCpD,EAAI+wD,mBAAmBrxD,GACzC4uM,GAA0B,GAExBolB,GAAYN,KAAK76N,EAAU,MAK7B,OAJAwtQ,EAAiB,OACb19P,EAAO4Y,OACTjhB,EAAI+I,OAAOrJ,IAIf,GAAI2I,EAAO21I,SAAW80F,GAAY9/D,UAAUigD,EAAIvzN,EAAMrN,EAAM8gO,GAC1D4yC,EAAiB,MADnB,CAIA,GAAI3iQ,IAAoBkrM,GAA2BjmM,EAAO4Y,QAAU5Y,EAAO21I,SAAW01E,GAAYr3K,YAAY42K,EAAI16N,IAAam7N,GAAYhhG,QAAQugG,EAAI/xE,EAAYy0E,GAKjK,OAJAj2N,EAAOM,EAAImxD,OAAOzxD,EAAMi2N,GACxB6vC,EAAiB9lQ,GACjB02N,EAAYv7N,KAAK6E,QACjBqmQ,EAAiB,GAGnB,GAAI19P,EAAO9K,SAAU,CACnB,IAAIiiB,EAAQmmP,EAAe1zB,EAAYvyO,GACvC,IAAK2I,EAAOrE,QAAUwb,EAEpB,YADAumP,EAAiB,IAIjB3iQ,GAAoBkrM,IAA2BolB,GAAYhhG,QAAQugG,EAAI0C,EAAUp9N,KAAam7N,GAAYhhG,QAAQugG,EAAI/xE,EAAYy0E,KAAgBkwC,GAAkC,IAAlBnmQ,EAAKye,UAA4C,IAA1Bze,EAAKgxH,UAAUv5H,QAAiD,QAAjCuI,EAAKgxH,UAAU9tG,WAAW,IAAkBkoM,GAAYprN,IAAW2I,EAAOrE,QAAWhE,EAAIs8C,QAAQ58C,IAQ3TqmQ,EAAiB,EACjBT,GAAOtxQ,GAAM4rB,KAAKlgB,EAAKgM,YAAa8yD,GAChC8vI,IACFlrM,EAAkBugQ,GAEpBoC,EAAiB,IAZZA,IACHA,EAAiB/lQ,EAAInM,MAAMiyQ,GAAS,GACpCpmQ,EAAKpH,WAAW1B,aAAamvQ,EAAgBrmQ,GAC7C02N,EAAYv7N,KAAKkrQ,IAEnBA,EAAe1hQ,YAAY3E,MAU/B4lQ,GAAOr+P,EAAOu3D,OAEK,IAAjBn2D,EAAOo6P,OACT6C,GAAOlvC,GAAa,SAAU12N,GAC5B,IAAI8+D,EAAU,SAAU9+D,GACA,MAAlBA,EAAKnH,UACPitQ,EAAiB9lQ,EAAM2I,GAEzBi9P,GAAOtxQ,GAAM4rB,KAAKlgB,EAAKgM,YAAa8yD,IAEtCA,EAAQ9+D,MAGZ4lQ,GAAOlvC,GAAa,SAAU12N,GAC5B,IAAIsmQ,EACAC,EAAgB,SAAUvmQ,GAC5B,IAAIwK,EAAQ,EAMZ,OALAo7P,GAAO5lQ,EAAKgM,YAAY,SAAUhM,GAC3Bg0N,GAAYb,iBAAiBnzN,IAAUgzN,GAAUniK,eAAe7wD,IACnEwK,OAGGA,GAELg8P,EAAsB,SAAUlvQ,GAClC,IAAI4xD,GAAQ,EAOZ,OANA08M,GAAOtuQ,EAAK0U,YAAY,SAAUhM,GAChC,GAAI6lQ,GAAgB7lQ,GAElB,OADAkpD,EAAQlpD,GACD,KAGJkpD,GAELu9M,EAAc,SAAUzmQ,GAC1B,IAAIkpD,EAAO/0D,EAQX,OAPA+0D,EAAQs9M,EAAoBxmQ,GACxBkpD,IAAU8pK,GAAUniK,eAAe3H,IAAUkqL,GAAYV,UAAUpyO,EAAK4oD,EAAOvgD,KACjFxU,EAAQmM,EAAInM,MAAM+0D,GAAO,GACzB48M,EAAiB3xQ,GACjBmM,EAAI/J,QAAQpC,EAAO6L,GAAM,GACzBM,EAAI+I,OAAO6/C,EAAO,IAEb/0D,GAAS6L,GAElBsmQ,EAAaC,EAAcvmQ,KACtB02N,EAAYj/N,OAAS,IAAM6I,EAAIs8C,QAAQ58C,IAAyB,IAAfsmQ,GAIlD39P,EAAOrE,QAAUqE,EAAO21I,WACrB31I,EAAO43K,OAAwB,IAAf+lF,IACnBtmQ,EAAOymQ,EAAYzmQ,IAErB2lQ,GAAaH,kBAAkBjyC,EAAIgf,EAAY9e,EAAMzzN,GACrD2lQ,GAAaF,iBAAiBlyC,EAAI5qN,EAAQhW,EAAM8gO,EAAMzzN,GACtD2lQ,GAAaT,gCAAgC5kQ,EAAKqI,EAAQ8qN,EAAMzzN,GAChE2lQ,GAAaR,YAAY7kQ,EAAKqI,EAAQ8qN,EAAMzzN,GAC5C2lQ,GAAaP,cAAc9kQ,EAAKqI,EAAQ8qN,EAAMzzN,IAX9CM,EAAI+I,OAAOrJ,EAAM,OAevB,GAAoD,UAAhDM,EAAI+wD,mBAAmBpxD,EAAUC,YAUrC,GAAIyI,EAAQ,CACV,GAAI3I,EACEA,EAAKye,SACFwnP,EAAe1zB,EAAYvyO,KAC9Boe,EAAM9d,EAAIkf,YACVpB,EAAI41D,eAAeh0E,GACnBoe,EAAI8wC,YAAYlvD,GAChBkmQ,EAAc5lQ,EAAK+0N,GAAYH,UAAU3B,EAAIn1M,EAAKm0N,GAAa,MAAM,IAGvE2zB,EAAc5lQ,EAAKN,EAAM,MAAM,QAGjC,GAAK2C,GAAgBgG,EAAOrE,SAAUhE,EAAIE,OAAO,+CAA+C/I,OAe9F88O,GAAiBhhB,EAAI5gO,EAAM8gO,OAf2E,CACtG,IAAIizC,EAAanzC,EAAGtzN,UAAUC,UACzBqzN,EAAG5+N,SAASi5D,oBAAqB2kL,EAAW,GAAGY,cAAiB7yO,EAAIoL,UAAUg7P,EAAYpmQ,EAAIs8C,UACjG3zC,GAAYsqN,EAAIgf,EAAW,GAAGY,cAEhC5f,EAAGtzN,UAAUwf,OAAO67M,GAAgB3jI,UAAU47H,EAAGtzN,UAAUugB,WAC3Dq9B,EAAWotK,GAAYL,sBAAsB2I,EAAGtzN,WAAW,GAC3DimQ,EAAc5lQ,EAAK+0N,GAAYH,UAAU3B,EAAItzN,EAAUugB,SAAU+xN,IAC7D5pO,EAAO0S,QACTsqP,GAAaV,uBAAuB3kQ,EAAKqI,EAAQ8qN,EAAMizC,GAEzDzmQ,EAAU4vD,eAAehS,GACzBm2K,GAAYd,UAAU5yN,EAAKL,EAAWA,EAAUugB,UAChD+yM,EAAGpqN,cAKPi5P,GAAMl2L,YAAYv5E,EAAM4gO,QAzC1B,CACEvzN,EAAOC,EAAUC,UACjB,IAAK,IAAInI,EAAI,EAAG1E,EAAIk/O,EAAW96O,OAAQM,EAAI1E,EAAG0E,IAC5C,GAAIw6O,EAAWx6O,GAAGqsQ,iBAAmB9jQ,EAAIjO,GAAG2N,EAAMuyO,EAAWx6O,GAAG8F,UAE9D,YADAioQ,EAAiB9lQ,EAAMuyO,EAAWx6O,MAwCtC4uQ,GAAc,CAAE19P,YAAaA,IAE7B29P,GAAStyQ,GAAM4O,KACf2jQ,GAAU,SAAUC,EAAkBpyQ,GACxC,IAAIqyQ,EAAiB,GACrBD,EAAiB7yQ,IAAI,IACrBS,EAAOsO,GAAG,cAAc,SAAUR,GAChC,IAAIqzD,EAAUm+J,GAAYxsN,WAAW9S,EAAO4L,IAAKkC,EAAElK,SAC/C0uQ,EAAiB,GACrBnxM,EAAUvhE,GAAM4rB,KAAK21C,GAAS,SAAU71D,GACtC,OAAyB,IAAlBA,EAAKye,WAAmBze,EAAKkM,aAAa,qBAEnD06P,GAAOE,EAAiB9yQ,OAAO,SAAU0H,EAAWiN,GAClDi+P,GAAO/wM,GAAS,SAAU71D,GACxB,OAAItL,EAAOkO,UAAU0wK,UAAUtzK,EAAM2I,EAAQ,GAAIjN,EAAUm3O,UACpDk0B,EAAep+P,KAClBi+P,GAAOlrQ,GAAW,SAAU5D,GAC1BA,GAAS,EAAM,CACbkI,KAAMA,EACN2I,OAAQA,EACRktD,QAASA,OAGbkxM,EAAep+P,GAAUjN,GAE3BsrQ,EAAer+P,GAAUjN,GAClB,IAEL03O,GAAYd,iCAAiC59O,EAAQsL,EAAM2I,SAA/D,QAKJi+P,GAAOG,GAAgB,SAAUrrQ,EAAWiN,GACrCq+P,EAAer+P,YACXo+P,EAAep+P,GACtBi+P,GAAOlrQ,GAAW,SAAU5D,GAC1BA,GAAS,EAAO,CACdkI,KAAMwC,EAAElK,QACRqQ,OAAQA,EACRktD,QAASA,eAOjBoxM,GAAe,SAAUH,EAAkBj3L,EAAS/3E,EAAU+6O,GAChE,IAAIq0B,EAAoBJ,EAAiB9yQ,MACzC4yQ,GAAO/2L,EAAQnhF,MAAM,MAAM,SAAUia,GAC9Bu+P,EAAkBv+P,KACrBu+P,EAAkBv+P,GAAU,GAC5Bu+P,EAAkBv+P,GAAQkqO,QAAUA,GAEtCq0B,EAAkBv+P,GAAQxN,KAAKrD,MAEjCgvQ,EAAiB7yQ,IAAIizQ,IAEnBC,GAAgB,SAAUzyQ,EAAQ0yQ,EAAmBv3L,EAAS/3E,EAAU+6O,GAC1C,OAA5Bu0B,EAAkBpzQ,OACpB6yQ,GAAQO,EAAmB1yQ,GAE7BuyQ,GAAaG,EAAmBv3L,EAAS/3E,EAAU+6O,IAEjDw0B,GAAgB,CAAEF,cAAeA,IAEjC3yG,GAAQ,SAAUl0J,GACpB,IAAIuvE,EAAU,CACZy3L,UAAW,CAAC,CACRzpQ,SAAU,QACVwd,OAAQ,CAAEksP,cAAe,SAE7BC,aAAc,CAAC,CACX3pQ,SAAU,QACVwd,OAAQ,CAAEksP,cAAe,YAE7BE,aAAc,CAAC,CACX5pQ,SAAU,QACVwd,OAAQ,CAAEksP,cAAe,YAE7BG,UAAW,CACT,CACE7pQ,SAAU,eACVygB,WAAW,EACXziB,QAAS,aACTuoQ,iBAAiB,EACjBuD,QAAS,yBAEX,CACE9pQ,SAAU,mDACVwd,OAAQ,CAAEusP,UAAW,QACrBp1B,SAAS,EACTm1B,SAAS,EACTx0B,aAAc,OAEhB,CACEt1O,SAAU,YACVygB,WAAW,EACXjD,OAAQ,CAAE4sL,MAAO,QACjB0/D,QAAS,0BAGbE,YAAa,CACX,CACEhqQ,SAAU,mDACVwd,OAAQ,CAAEusP,UAAW,UACrBp1B,SAAS,EACTm1B,QAAS,wBACTx0B,aAAc,OAEhB,CACEt1O,SAAU,eACVygB,WAAW,EACXziB,QAAS,eACTuoQ,iBAAiB,EACjBuD,QAAS,yBAEX,CACE9pQ,SAAU,MACVygB,WAAW,EACXjD,OAAQ,CACN6lE,QAAS,QACThuC,WAAY,OACZC,YAAa,QAEfw0N,SAAS,GAEX,CACE9pQ,SAAU,QACVygB,WAAW,EACXjD,OAAQ,CACN63B,WAAY,OACZC,YAAa,QAEfw0N,QAAS,0BAGbG,WAAY,CACV,CACEjqQ,SAAU,eACVygB,WAAW,EACXziB,QAAS,cACTuoQ,iBAAiB,EACjBuD,QAAS,yBAEX,CACE9pQ,SAAU,mDACVwd,OAAQ,CAAEusP,UAAW,SACrBp1B,SAAS,EACTm1B,QAAS,wBACTx0B,aAAc,OAEhB,CACEt1O,SAAU,YACVygB,WAAW,EACXjD,OAAQ,CAAE4sL,MAAO,SACjB0/D,QAAS,0BAGbI,aAAc,CAAC,CACXlqQ,SAAU,mDACVwd,OAAQ,CAAEusP,UAAW,WACrBp1B,SAAS,EACTW,aAAc,MACdw0B,QAAS,0BAEbK,KAAM,CACJ,CACE1jQ,OAAQ,SACR+E,OAAQ,OAEV,CACE/E,OAAQ,OACR+W,OAAQ,CAAE4sP,WAAY,SAExB,CACE3jQ,OAAQ,IACR+E,OAAQ,QAGZ6+P,OAAQ,CACN,CACE5jQ,OAAQ,KACR+E,OAAQ,OAEV,CACE/E,OAAQ,OACR+W,OAAQ,CAAE8sP,UAAW,WAEvB,CACE7jQ,OAAQ,IACR+E,OAAQ,QAGZ++P,UAAW,CACT,CACE9jQ,OAAQ,OACR+W,OAAQ,CAAE8oP,eAAgB,aAC1B5jF,OAAO,GAET,CACEj8K,OAAQ,IACR+E,OAAQ,QAGZg/P,cAAe,CACb,CACE/jQ,OAAQ,OACR+W,OAAQ,CAAE8oP,eAAgB,gBAC1B5jF,OAAO,GAET,CACEj8K,OAAQ,SACR+E,OAAQ,QAGZi/P,UAAW,CACThkQ,OAAQ,OACR+W,OAAQ,CAAEzS,MAAO,UACjBm6P,OAAO,EACPO,gBAAgB,EAChBiC,oBAAoB,GAEtBgD,YAAa,CACXjkQ,OAAQ,OACR+W,OAAQ,CAAEo3J,gBAAiB,UAC3BswF,OAAO,EACPO,gBAAgB,EAChBiC,oBAAoB,GAEtBiD,SAAU,CACRlkQ,OAAQ,OACRzB,QAAQ,EACRwY,OAAQ,CAAEu9N,WAAY,UACtB2sB,oBAAoB,GAEtBhtP,SAAU,CACRjU,OAAQ,OACRzB,QAAQ,EACRwY,OAAQ,CAAEq9N,SAAU,UACpB6sB,oBAAoB,GAEtBkD,eAAgB,CACdnkQ,OAAQ,OACRxI,WAAY,CAAEg4C,MAAO,WAEvB40N,WAAY,CACVnnP,MAAO,aACP+8H,QAAS,EACTj1I,OAAQ,OAEVs/P,UAAW,CAAErkQ,OAAQ,OACrBskQ,YAAa,CAAEtkQ,OAAQ,OACvBxL,KAAM,CAAEwL,OAAQ,QAChByU,KAAM,CACJzU,OAAQ,IACRzG,SAAU,IACVwL,OAAQ,MACR3a,OAAO,EACPw7D,MAAM,EACN4oL,QAAS,WACP,OAAO,GAETizB,SAAU,SAAUzpQ,EAAK6tC,EAAKspL,GAC5Bn/N,GAAM4O,KAAKuwN,GAAM,SAAU1/N,EAAO7B,GAChCoO,EAAIC,UAAUjE,EAAKpK,EAAK6B,QAI9B80Q,aAAc,CACZ,CACEhrQ,SAAU,gFACVwL,OAAQ,MACR3a,OAAO,EACP0mO,QAAQ,EACRH,cAAc,EACd/qK,MAAM,GAER,CACErsD,SAAU,OACV/B,WAAY,CACV,QACA,SAEFuN,OAAQ,QACR3a,OAAO,EACP0mO,QAAQ,EACRlrK,MAAM,GAER,CACErsD,SAAU,IACV/B,WAAY,CACV,QACA,SAEFpN,OAAO,EACP0mO,QAAQ,EACRlrK,MAAM,KAUZ,OANA51D,GAAM4O,KAAK,qDAAqDxU,MAAM,OAAO,SAAUiE,GACrFk9E,EAAQl9E,GAAQ,CACd4uB,MAAO5uB,EACP0W,OAAQ,UAGLwmE,GAELi5L,GAAiB,CAAE90Q,IAAKwgK,IAE5B,SAASu0G,GAAgBr0Q,GACvB,IAAIm7E,EAAU,GACV77E,EAAM,SAAUrB,GAClB,OAAOA,EAAOk9E,EAAQl9E,GAAQk9E,GAE5BptE,EAAW,SAAU9P,EAAMgW,GACzBhW,IACkB,kBAATA,EACT2B,GAAM4O,KAAKvQ,GAAM,SAAUgW,EAAQhW,GACjC8P,EAAS9P,EAAMgW,OAGjBA,EAASA,EAAOlR,OAASkR,EAAS,CAACA,GACnCrU,GAAM4O,KAAKyF,GAAQ,SAAUA,GACA,qBAAhBA,EAAOuhD,OAChBvhD,EAAOuhD,MAAQvhD,EAAO9K,UAEI,qBAAjB8K,EAAOja,QAChBia,EAAOja,OAASia,EAAO9K,UAAY8K,EAAOrE,QAEf,qBAAlBqE,EAAOU,QAA0BV,EAAO9K,WAAa8K,EAAOrE,SACrEqE,EAAOU,OAAS,QAEdV,EAAO9K,UAAY8K,EAAOrE,SAC5BqE,EAAOm7P,OAAQ,EACfn7P,EAAOssN,cAAe,GAEM,kBAAnBtsN,EAAO9M,UAChB8M,EAAO9M,QAAU8M,EAAO9M,QAAQnN,MAAM,WAG1CmhF,EAAQl9E,GAAQgW,KAIlBqgQ,EAAa,SAAUr2Q,GAIzB,OAHIA,GAAQk9E,EAAQl9E,WACXk9E,EAAQl9E,GAEVk9E,GAIT,OAFAptE,EAASqmQ,GAAe90Q,IAAIU,EAAO4L,MACnCmC,EAAS/N,EAAOC,SAASk7E,SAClB,CACL77E,IAAKA,EACLyO,SAAUA,EACVumQ,WAAYA,GAIhB,IAAIC,GAAS30Q,GAAM4O,KACf5C,GAAM69M,GAAWjpN,IACjBg0Q,GAAuB,SAAUC,EAAUz0Q,GAC7C,IAAI4H,EAAKmyC,EAAMmT,EACX7L,EAASrhD,GAAUA,EAAOqhD,QAAU09J,GAAO,IAC3C6iB,EAAW,SAAUh6N,EAAKmyC,GACxBA,EAAK5yC,QAAQpE,QACf6I,GAAI2+G,SAAS3iH,EAAKmyC,EAAK5yC,QAAQF,KAAK,MAEtC2E,GAAIsZ,WAAWtd,EAAKmyC,EAAK/pB,QAEvBwC,EAAgB,SAAUkiP,GAC5B,IAAI9sQ,EAQJ,OAPAmyC,EAAwB,kBAAV26N,EAAqB,CACjCz2Q,KAAMy2Q,EACNvtQ,QAAS,GACT6oB,MAAO,IACL0kP,EACJ9sQ,EAAMgE,GAAIiE,OAAOkqC,EAAK97C,MACtB2jO,EAASh6N,EAAKmyC,GACPnyC,GAEL+sQ,EAAoB,SAAU/sQ,EAAKiqD,GACrC,IAAI5zD,EAAsB,kBAAR2J,EAAmBA,EAAIzD,SAAS+f,cAAgBtc,EAC9DgtQ,EAAUvzN,EAAO8gK,eAAelkN,GAChC2kN,EAAkBgyD,GAAWA,EAAQhyD,gBACzC,SAAIA,IAAmBA,EAAgB7/M,UAC9B8uD,IAA4D,IAA/CjyD,GAAMqyC,QAAQ2wK,EAAiB/wJ,GAAoBA,EAAY+wJ,EAAgB,KAKnGiyD,EAAa,SAAUjtQ,EAAK6sQ,EAAUv4M,GACxC,IAAIn4D,EAAQ+wQ,EAAiBC,EACzB/pH,EAAWypH,EAAS1xQ,OAAS,GAAK0xQ,EAAS,GAC3CO,EAAehqH,GAAYA,EAAS/sJ,KAExC,GADA82Q,EAAiBJ,EAAkB/sQ,EAAKotQ,GACpCD,EACEC,IAAiBD,GACnBD,EAAkBL,EAAS,GAC3BA,EAAWA,EAASruQ,MAAM,IAE1B0uQ,EAAkBC,OAEf,GAAI/pH,EACT8pH,EAAkBL,EAAS,GAC3BA,EAAWA,EAASruQ,MAAM,QACrB,IAAK81D,EACV,OAAOt0D,EAgBT,OAdIktQ,IACF/wQ,EAASyuB,EAAcsiP,GACvB/wQ,EAAOkM,YAAYrI,IAEjBs0D,IACGn4D,IACHA,EAAS6H,GAAIiE,OAAO,OACpB9L,EAAOkM,YAAYrI,IAErBhI,GAAM4O,KAAK0tD,GAAU,SAAUY,GAC7B,IAAIm4M,EAAaziP,EAAcsqC,GAC/B/4D,EAAOvB,aAAayyQ,EAAYrtQ,OAG7BitQ,EAAW9wQ,EAAQ0wQ,EAAUK,GAAmBA,EAAgB54M,WAEzE,OAAIu4M,GAAYA,EAAS1xQ,QACvBg3C,EAAO06N,EAAS,GAChB7sQ,EAAM4qB,EAAcunB,GACpBmT,EAAWthD,GAAIiE,OAAO,OACtBq9C,EAASj9C,YAAY4kQ,EAAWjtQ,EAAK6sQ,EAASruQ,MAAM,GAAI2zC,EAAKmiB,WACtDhP,GAEA,IAGPgoN,GAAiB,SAAU/rQ,EAAUnJ,GACvC,OAAOw0Q,GAAqBW,GAAchsQ,GAAWnJ,IAEnDo1Q,GAAoB,SAAUr7N,GAChC,IAAIhpC,EACA2O,EAAM,CACRvY,QAAS,GACT6oB,MAAO,IA4BT,OA1BA+pB,EAAOr6B,EAAIvW,SAAWvJ,GAAMgP,KAAKmrC,GACpB,MAATA,IACFhpC,EAAUgpC,EAAKl4C,QAAQ,6CAA6C,SAAU4gB,EAAIC,EAAIC,EAAI0yP,EAAIC,GAC5F,OAAQ5yP,GACR,IAAK,IACHhD,EAAIsQ,MAAM1tB,GAAKqgB,EACf,MACF,IAAK,IACHjD,EAAIvY,QAAQV,KAAKkc,GACjB,MACF,IAAK,KACkF,IAAjF/iB,GAAMqyC,QAAQ,8CAA8Cj4C,MAAM,KAAM2oB,KAC1EjD,EAAIsQ,MAAMrN,GAAMA,GAElB,MAEF,GAAW,MAAP0yP,EAAY,CACd,IAAI75Q,EAAI85Q,EAAG72Q,MAAM,8BACbjD,IACFkkB,EAAIsQ,MAAMx0B,EAAE,IAAMA,EAAE,IAGxB,MAAO,OAGXkkB,EAAIzhB,KAAO8S,GAAW,MACf2O,GAELy1P,GAAgB,SAAUhsQ,GAC5B,OAAKA,GAAgC,kBAAbA,GAGxBA,EAAWA,EAASnP,MAAM,WAAW,GACrCmP,EAAWA,EAAStH,QAAQ,sBAAuB,MAC5CjC,GAAMgC,IAAIuH,EAASnP,MAAM,4BAA4B,SAAU+/C,GACpE,IAAImiB,EAAWt8D,GAAMgC,IAAIm4C,EAAK//C,MAAM,gBAAiBo7Q,IACjD11P,EAAMw8C,EAAS+yD,MAInB,OAHI/yD,EAASn5D,SACX2c,EAAIw8C,SAAWA,GAEVx8C,KACNosB,WAXM,IAaPqY,GAAa,SAAUnkD,EAAQiU,GACjC,IAAIhW,EAAMs3Q,EAAaC,EAAYl2P,EACdm2P,EAAgBC,EAAjCC,EAAa,GAEjB,GADAD,EAAgB11Q,EAAOC,SAAS21Q,gBACV,IAAlBF,EACF,MAAO,GAEoB,kBAAlBA,IACTA,EAAgB,+IAElB,IAAIG,EAAa,SAAU5gP,GACzB,OAAOA,EAAIpzB,QAAQ,UAAW,KAEhC,GAAsB,kBAAXoS,EAAqB,CAE9B,GADAA,EAASjU,EAAOkO,UAAU5O,IAAI2U,IACzBA,EACH,OAEFA,EAASA,EAAO,GAElB,MAAI,YAAaA,IACfyhQ,EAAgBzhQ,EAAOg/P,SACD,IAAlByC,GACK,IAGXz3Q,EAAOgW,EAAO4Y,OAAS5Y,EAAOrE,QAAU,OACxC0P,EAAQ61P,GAAclhQ,EAAO9K,UACzBmW,EAAMvc,QACHuc,EAAM,GAAGrhB,OACZqhB,EAAM,GAAGrhB,KAAOA,GAElBA,EAAOgW,EAAO9K,SACdosQ,EAAcf,GAAqBl1P,EAAOtf,IAE1Cu1Q,EAAcf,GAAqB,CAACv2Q,GAAO+B,GAE7Cw1Q,EAAa5pQ,GAAIE,OAAO7N,EAAMs3Q,GAAa,IAAMA,EAAYh+P,WAC7Dg9P,GAAOtgQ,EAAO0S,QAAQ,SAAUtnB,EAAOpB,GACrCoB,EAAQw2Q,EAAWx2Q,GACfA,GACFuM,GAAI6vD,SAAS+5M,EAAYv3Q,EAAMoB,MAGnCk1Q,GAAOtgQ,EAAO7M,YAAY,SAAU/H,EAAOpB,GACzCoB,EAAQw2Q,EAAWx2Q,GACfA,GACFuM,GAAIC,UAAU2pQ,EAAYv3Q,EAAMoB,MAGpCk1Q,GAAOtgQ,EAAO9M,SAAS,SAAU9H,GAC/BA,EAAQw2Q,EAAWx2Q,GACduM,GAAIoG,SAASwjQ,EAAYn2Q,IAC5BuM,GAAI2+G,SAASirJ,EAAYn2Q,MAG7BW,EAAO8lC,KAAK,kBACZl6B,GAAIwqE,UAAUm/L,EAAa,CACzBz4N,SAAU,WACVxV,MAAO,QAETtnC,EAAO0T,UAAUzD,YAAYslQ,GAC7BE,EAAiB7pQ,GAAIutC,SAASn5C,EAAO0T,UAAW,YAAY,GAC5D+hQ,EAAiB,MAAMzxQ,KAAKyxQ,GAAkB/2Q,SAAS+2Q,EAAgB,IAAM,EAC7ElB,GAAOmB,EAAc17Q,MAAM,MAAM,SAAUiE,GACzC,IAAIoB,EAAQuM,GAAIutC,SAASq8N,EAAYv3Q,GAAM,GAC3C,IAAa,qBAATA,IAA+B,oCAAoC+F,KAAK3E,KAC1EA,EAAQuM,GAAIutC,SAASn5C,EAAO0T,UAAWzV,GAAM,GACN,YAAnC2N,GAAI4sE,MAAMn5E,GAAO6kB,kBAIV,UAATjmB,GACqC,YAAnC2N,GAAI4sE,MAAMn5E,GAAO6kB,eADvB,CAKA,GAAa,cAATjmB,GACE,QAAQ+F,KAAK3E,GAAQ,CACvB,GAAuB,IAAnBo2Q,EACF,OAEF,IAAIK,EAAWn8O,WAAWt6B,IAAU,KAAK2E,KAAK3E,GAAS,IAAM,GAC7DA,EAAQy2Q,EAAWL,EAAiB,KAG3B,WAATx3Q,GAAqBoB,IACvBs2Q,GAAc,kBAEhBA,GAAc13Q,EAAO,IAAMoB,EAAQ,QAErCW,EAAO8lC,KAAK,uBACZl6B,GAAI+I,OAAO4gQ,GACJI,IAELI,GAAU,CACZ5xN,WAAYA,GACZgxN,cAAeA,GACfD,eAAgBA,IAGd/mQ,GAAS,SAAUnO,EAAQm7E,EAASl9E,EAAM8gO,EAAMzzN,GAClD,IAAImqC,EAAM0lC,EAAQ77E,IAAIrB,IAClBygP,GAAYjgP,MAAMuB,EAAQ/B,EAAM8gO,EAAMzzN,IAAY,WAAYmqC,EAAI,KAAOA,EAAI,GAAGtnC,OAGlF8jQ,GAAY19P,YAAYvU,EAAQ/B,EAAM8gO,EAAMzzN,GAF5CqkQ,GAAah7P,OAAO3U,EAAQ/B,EAAM8gO,EAAMzzN,IAKxC0qQ,GAAe,CAAE7nQ,OAAQA,IAEzB8nQ,GAAU,SAAUj2Q,GACtBA,EAAOw6E,YAAY,SAAU,GAAI,QACjCx6E,EAAOw6E,YAAY,SAAU,GAAI,UACjCx6E,EAAOw6E,YAAY,SAAU,GAAI,aACjC,IAAK,IAAIn3E,EAAI,EAAGA,GAAK,EAAGA,IACtBrD,EAAOw6E,YAAY,UAAYn3E,EAAG,GAAI,CACpC,eACA,EACA,IAAMA,IAGVrD,EAAOw6E,YAAY,WAAY,GAAI,CACjC,eACA,EACA,MAEFx6E,EAAOw6E,YAAY,WAAY,GAAI,CACjC,eACA,EACA,QAEFx6E,EAAOw6E,YAAY,WAAY,GAAI,CACjC,eACA,EACA,aAGA07L,GAAkB,CAAE7nQ,MAAO4nQ,IAE/B,SAASE,GAAWn2Q,GAClB,IAAIm7E,EAAUk5L,GAAer0Q,GACzB0yQ,EAAoBvzQ,GAAK,MAG7B,OAFA+2Q,GAAgB7nQ,MAAMrO,GACtB04E,GAAQ14E,GACD,CACLV,IAAK67E,EAAQ77E,IACbyO,SAAUotE,EAAQptE,SAClBumQ,WAAYn5L,EAAQm5L,WACpBztQ,MAAO2U,EAAMy2P,GAAY19P,YAAavU,GACtC2U,OAAQ6G,EAAMm0P,GAAah7P,OAAQ3U,GACnCmO,OAAQqN,EAAMw6P,GAAa7nQ,OAAQnO,EAAQm7E,GAC3C18E,MAAO+c,EAAMkjO,GAAYjgP,MAAOuB,GAChCw5G,SAAUh+F,EAAMkjO,GAAYllI,SAAUx5G,GACtC4+K,UAAWpjK,EAAMkjO,GAAY9/D,UAAW5+K,GACxCw+O,SAAUhjO,EAAMkjO,GAAYF,SAAUx+O,GACtCyyQ,cAAej3P,EAAMm3P,GAAcF,cAAezyQ,EAAQ0yQ,GAC1DvuN,WAAY3oC,EAAMu6P,GAAQ5xN,WAAYnkD,IAI1C,IAAIo2Q,GAAmBr0Q,OAAOC,UAAUG,eACpC6iL,GAAY,SAAU/mI,EAAK1F,GAC7B,OAAOA,GAEL2F,GAAY,SAAUC,GACxB,OAAO,WAEL,IADA,IAAIC,EAAU,IAAIz3C,MAAM7D,UAAUC,QACzBM,EAAI,EAAGA,EAAI+6C,EAAQr7C,OAAQM,IAClC+6C,EAAQ/6C,GAAKP,UAAUO,GAEzB,GAAuB,IAAnB+6C,EAAQr7C,OACV,MAAM,IAAI+Z,MAAM,4BAGlB,IADA,IAAI7Z,EAAM,GACD2C,EAAI,EAAGA,EAAIw4C,EAAQr7C,OAAQ6C,IAAK,CACvC,IAAIy4C,EAAYD,EAAQx4C,GACxB,IAAK,IAAIpI,KAAO6gD,EACV+3N,GAAiBl0Q,KAAKm8C,EAAW7gD,KACnCyF,EAAIzF,GAAO2gD,EAAOl7C,EAAIzF,GAAM6gD,EAAU7gD,KAI5C,OAAOyF,IAGPq7C,GAAQJ,GAAU8mI,IAElBj3K,GAAW,SAAUsoQ,EAAYp2Q,EAAU2L,GAC7CyqQ,EAAWltM,mBAAmB,qBAAqB,SAAUt2D,EAAO5U,GAClE,IAAsBqN,EAAlBjI,EAAIwP,EAAM9P,OACd,MAAOM,IACLiI,EAAOuH,EAAMxP,GACbiI,EAAKqD,KAAK,WAAYrD,EAAKlE,WAAWxF,IAAI,sBAC1C0J,EAAKqD,KAAK1Q,EAAM,SAGpBo4Q,EAAWltM,mBAAmB,kBAAkB,SAAUt2D,EAAO5U,GAC/D,IAAsBqN,EAAMjM,EAAxBgE,EAAIwP,EAAM9P,OACVuzQ,EAAe,YAAcr4Q,EAC7B+lN,EAAe/jN,EAASgkN,cACxBC,EAAoBjkN,EAASkkN,oBACjC,MAAO9gN,IACLiI,EAAOuH,EAAMxP,GACbhE,EAAQiM,EAAKlE,WAAWxF,IAAI00Q,QACdr5P,IAAV5d,GACFiM,EAAKqD,KAAK1Q,EAAMoB,EAAM0D,OAAS,EAAI1D,EAAQ,MAC3CiM,EAAKqD,KAAK2nQ,EAAc,QAExBj3Q,EAAQiM,EAAKlE,WAAWxF,IAAI3D,GACf,UAATA,EACFoB,EAAQuM,EAAIy2C,eAAez2C,EAAIw2C,WAAW/iD,GAAQiM,EAAKrN,MAC9C+lN,IACT3kN,EAAQ2kN,EAAa9hN,KAAKgiN,EAAmB7kN,EAAOpB,EAAMqN,EAAKrN,OAEjEqN,EAAKqD,KAAK1Q,EAAMoB,EAAM0D,OAAS,EAAI1D,EAAQ,UAIjDg3Q,EAAWltM,mBAAmB,SAAS,SAAUt2D,GAC/C,IAAsBvH,EAAMjM,EAAxBgE,EAAIwP,EAAM9P,OACd,MAAOM,IACLiI,EAAOuH,EAAMxP,GACbhE,EAAQiM,EAAKqD,KAAK,SACdtP,IACFA,EAAQiM,EAAKqD,KAAK,SAAS9M,QAAQ,8BAA+B,IAClEyJ,EAAKqD,KAAK,QAAStP,EAAM0D,OAAS,EAAI1D,EAAQ,UAIpDg3Q,EAAWltM,mBAAmB,iBAAiB,SAAUt2D,EAAO5U,EAAMuI,GACpE,IAAsB8E,EAAlBjI,EAAIwP,EAAM9P,OACd,MAAOM,IAEL,GADAiI,EAAOuH,EAAMxP,GACgC,aAAzCiI,EAAKlE,WAAWxF,IAAI,mBAAoC4E,EAAK+vQ,QAAS,CACxE,IAAIC,EAAc14P,EAAO5X,KAAKoF,EAAKiM,YAAY8F,QAAO,SAAU9F,GAC9D,OAAQ62M,GAAKF,OAAO32M,EAAWlY,UAE7Bm3Q,EACFlrQ,EAAK89D,SAEL99D,EAAKqJ,aAKb0hQ,EAAWxvN,cAAc,YAAY,SAAUh0C,GAC7C,IAAsBvH,EAAlBjI,EAAIwP,EAAM9P,OACd,MAAOM,IACLiI,EAAOuH,EAAMxP,GAAGkU,WACZjM,IACFA,EAAKjM,MAAQu+M,GAASvlI,OAAO/sE,EAAKjM,WAIxCg3Q,EAAWxvN,cAAc,gBAAgB,SAAUh0C,EAAO5U,GACxD,IAAsBqN,EAAMjM,EAAOoC,EAA/B4B,EAAIwP,EAAM9P,OACV6L,EAAO,SAAUvP,GACnB,OAAOA,EAAMwC,QAAQ,2BAA4B,MAAMA,QAAQ,qBAAsB,IAAIA,QAAQ,0HAA2H,IAAIA,QAAQ,4GAA6G,KAEvV,MAAOwB,IACLiI,EAAOuH,EAAMxP,GACbhE,EAAQiM,EAAKiM,WAAajM,EAAKiM,WAAWlY,MAAQ,GACrC,WAATpB,GACFwD,EAAO6J,EAAKqD,KAAK,QACblN,GACF6J,EAAKqD,KAAK,OAAiB,gBAATlN,EAAyB,KAAOA,EAAKI,QAAQ,SAAU,KAE3C,UAA5B5B,EAASimO,gBAA8B7mO,EAAM0D,OAAS,IACxDuI,EAAKiM,WAAWlY,MAAQ,iBAAmBuP,EAAKvP,GAAS,aAG3B,UAA5BY,EAASimO,gBAA8B7mO,EAAM0D,OAAS,IACxDuI,EAAKiM,WAAWlY,MAAQ,YAAWuP,EAAKvP,GAAS,eAKzDg3Q,EAAWxvN,cAAc,YAAY,SAAUh0C,GAC7C,IAAsBvH,EAAlBjI,EAAIwP,EAAM9P,OACd,MAAOM,IACLiI,EAAOuH,EAAMxP,GACyB,IAAlCiI,EAAKjM,MAAMwI,QAAQ,YACrByD,EAAKrN,KAAO,SACZqN,EAAK7J,KAAO,EACZ6J,EAAKjM,MAAQiM,EAAKjM,MAAMwC,QAAQ,oBAAqB,KACH,IAAzCyJ,EAAKjM,MAAMwI,QAAQ,oBAC5ByD,EAAKrN,KAAO,QACZqN,EAAK7J,KAAO,EACZ6J,EAAKi3D,KAAM,EACXj3D,EAAKjM,MAAQ+mB,SAAS9a,EAAKjM,OAAOiqB,OAAO,QAI/C+sP,EAAWxvN,cAAc,uBAAuB,SAAUh0C,EAAO5U,GAC/D,IAAsBqN,EAAlBjI,EAAIwP,EAAM9P,OACd,MAAOM,IACLiI,EAAOuH,EAAMxP,GACK,IAAdiI,EAAK7J,KACP6J,EAAKqJ,SACkB,IAAdrJ,EAAK7J,OACD,UAATxD,GAAsB,SAAUqN,EAAKlE,WAAWxF,KAClD0J,EAAKqD,KAAK,OAAQ,YAK1B0nQ,EAAWltM,mBAAmB,iBAAiB,SAAUt2D,GACvDrE,EAAKqE,GAAO,SAAUvH,GACe,iBAA/BA,EAAKqD,KAAK,mBACRrD,EAAKw2C,QAAQu0N,EAAWh1N,OAAOod,uBACjCnzD,EAAKqJ,SAELrJ,EAAK89D,gBAKbitM,EAAWltM,mBAAmB,8GAAwH,SAAUt2D,EAAO5U,GACrK,IAAIoF,EAAIwP,EAAM9P,OACd,MAAOM,IACLwP,EAAMxP,GAAGsL,KAAK1Q,EAAM,UAItBw4Q,GAAiB,SAAUptM,GAC7B,IAAIqtM,EAASC,EACT9uN,EAAO,SAAUv8C,GACnB,OAAOA,GAAsB,OAAdA,EAAKrN,MAEtBy4Q,EAAUrtM,EAASrhB,UACfH,EAAK6uN,KACPC,EAAUD,EAAQx6I,KACdr0E,EAAK8uN,KACPD,EAAQ/hQ,SACRgiQ,EAAQhiQ,YAIViiQ,GAAuB,CACzB7oQ,SAAUA,GACV0oQ,eAAgBA,IAGdntM,GAAa,SAAUtpE,EAAQsL,EAAM9E,GACvC,IAAIqwQ,EAAMzqP,EAAK0qP,EACXlrQ,EAAM5L,EAAO4L,IAoBjB,OAnBAN,EAAOA,EAAK4rC,WAAU,GACtB2/N,EAAO33Q,EAAWwE,SAASinQ,eACvBkM,EAAKjM,qBACPx+O,EAAMyqP,EAAKjM,mBAAmB,IAC9BhrQ,GAAM4O,KAAuB,SAAlBlD,EAAKnH,SAAsBmH,EAAKgM,WAAa,CAAChM,IAAO,SAAUA,GACxE8gB,EAAI/e,KAAK4C,YAAYmc,EAAI2yN,WAAWzzO,GAAM,OAG1CA,EADoB,SAAlBA,EAAKnH,SACAioB,EAAI/e,KAAKkK,WAET6U,EAAI/e,KAEbypQ,EAASlrQ,EAAIwgB,IACbxgB,EAAIwgB,IAAMA,GAEZu3C,GAAOgoL,eAAe3rP,EAAQs+C,GAAM93C,EAAM,CAAE8E,KAAMA,KAC9CwrQ,IACFlrQ,EAAIwgB,IAAM0qP,GAELxrQ,GAELyrQ,GAAkB,SAAU/2Q,EAAQwG,GACtC,OAAOxG,GAAUA,EAAOmqE,kBAAkB,gBAAkB3jE,EAAKwwQ,WAE/D5sM,GAAU,SAAUpqE,EAAQsL,EAAM9E,GACpC,OAAOuwQ,GAAgB/2Q,EAAQwG,GAAQ8iE,GAAWtpE,EAAQsL,EAAM9E,GAAQ8E,GAEtE2rQ,GAA0B,CAAE7sM,QAASA,IAErC8sM,GAAc,SAAU5rQ,EAAMs7F,GAChCp4F,EAAKo4F,GAAO,SAAU3oG,GACpBqN,EAAKqD,KAAK1Q,EAAM,UAGhBk5Q,GAAuB,SAAU1wM,EAAW9/C,EAAQk+N,GACtDp+K,EAAU5f,cAAc,QAAQ,SAAUh0C,GACxCrE,EAAKqE,GAAO,SAAUvH,GACpB,IAAIkiD,EAAQ7mC,EAAOlf,MAAM6D,EAAKqD,KAAK,UAC/BuF,EAAQ5I,EAAKqD,KAAK,SAClByoQ,EAAO9rQ,EAAKqD,KAAK,QACjBmX,EAAOxa,EAAKqD,KAAK,QACjBuF,IACFs5C,EAAMt5C,MAAQA,GAEZkjQ,IACF5pN,EAAM,eAAiB4pN,GAErBtxP,IACF0nC,EAAM,aAAeq3L,EAAUnmP,SAAS4M,EAAKqD,KAAK,QAAS,IAAM,IAEnErD,EAAKrN,KAAO,OACZqN,EAAKqD,KAAK,QAASgY,EAAOjB,UAAU8nC,IACpC0pN,GAAY5rQ,EAAM,CAChB,QACA,OACA,gBAKJ+rQ,GAAwB,SAAU5wM,EAAW9/C,GAC/C8/C,EAAU5f,cAAc,UAAU,SAAUh0C,GAC1CrE,EAAKqE,GAAO,SAAUvH,GACpB,IAAIkiD,EAAQ7mC,EAAOlf,MAAM6D,EAAKqD,KAAK,UACnC6+C,EAAM,mBAAqB,eAC3BliD,EAAKrN,KAAO,OACZqN,EAAKqD,KAAK,QAASgY,EAAOjB,UAAU8nC,WAItC8pN,GAAa,SAAU7wM,EAAWxmE,GACpC,IAAI0mB,EAAS6/I,KACTvmK,EAASuvP,wBACX2nB,GAAqB1wM,EAAW9/C,EAAQ/mB,GAAMoyM,QAAQ/xM,EAASovP,0BAEjEgoB,GAAsB5wM,EAAW9/C,IAE/BxW,GAAa,SAAUs2D,EAAWxmE,GAChCA,EAASyqP,eACX4sB,GAAW7wM,EAAWxmE,IAGtBs3Q,GAAe,CAAExpQ,SAAUoC,IAE3BqnQ,GAAqB,eACrBC,GAAa,CACf,QAAS,EACT,WAAY,EACZ,SAAU,EACV,MAAO,EACP,WAAY,GACZ,qBAAsB,IAEpBC,GAAS,SAAUpsQ,EAAM1I,EAAMs5H,GACjC,IAAIp/D,EACA/4D,EACAu0M,EAAYp8E,EAAO,YAAc,aACjCi4E,EAAcj4E,EAAO,OAAS,OAClC,GAAI5wH,EAAKgtM,GACP,OAAOhtM,EAAKgtM,GAEd,GAAIhtM,IAAS1I,EAAM,CAEjB,GADAk6D,EAAUxxD,EAAK6oM,GACXr3I,EACF,OAAOA,EAET,IAAK/4D,EAASuH,EAAKvH,OAAQA,GAAUA,IAAWnB,EAAMmB,EAASA,EAAOA,OAEpE,GADA+4D,EAAU/4D,EAAOowM,GACbr3I,EACF,OAAOA,IAKX66M,GAAS,WACX,SAAS7pN,EAAK7vD,EAAMwD,GAClB9H,KAAKsE,KAAOA,EACZtE,KAAK8H,KAAOA,EACC,IAATA,IACF9H,KAAKyN,WAAa,GAClBzN,KAAKyN,WAAWxF,IAAM,IAiP1B,OA9OAksD,EAAKj+C,OAAS,SAAU5R,EAAM+xB,GAC5B,IAAI1kB,EAAM8nH,EAEV,GADA9nH,EAAO,IAAIwiD,EAAK7vD,EAAMw5Q,GAAWx5Q,IAAS,GACtC+xB,EACF,IAAKojG,KAAYpjG,EACf1kB,EAAKqD,KAAKykH,EAAUpjG,EAAMojG,IAG9B,OAAO9nH,GAETwiD,EAAK9rD,UAAUH,QAAU,SAAUyJ,GACjC,IAAIpK,EAAOvH,KAMX,OALI2R,EAAKvH,QACPuH,EAAKqJ,SAEPzT,EAAKyB,OAAO2I,EAAMpK,GAClBA,EAAKyT,SACEzT,GAET4sD,EAAK9rD,UAAU2M,KAAO,SAAU1Q,EAAMoB,GACpC,IACI2wB,EAAO3sB,EADPnC,EAAOvH,KAEX,GAAoB,kBAATsE,EAAmB,CAC5B,IAAKoF,KAAKpF,EACRiD,EAAKyN,KAAKtL,EAAGpF,EAAKoF,IAEpB,OAAOnC,EAET,GAAI8uB,EAAQ9uB,EAAKkG,WAAY,CAC3B,QAAc6V,IAAV5d,EAAqB,CACvB,GAAc,OAAVA,EAAgB,CAClB,GAAIpB,KAAQ+xB,EAAMpuB,IAAK,QACdouB,EAAMpuB,IAAI3D,GACjBoF,EAAI2sB,EAAMjtB,OACV,MAAOM,IACL,GAAI2sB,EAAM3sB,GAAGpF,OAASA,EAEpB,OADA+xB,EAAQA,EAAMppB,OAAOvD,EAAG,GACjBnC,EAIb,OAAOA,EAET,GAAIjD,KAAQ+xB,EAAMpuB,IAAK,CACrByB,EAAI2sB,EAAMjtB,OACV,MAAOM,IACL,GAAI2sB,EAAM3sB,GAAGpF,OAASA,EAAM,CAC1B+xB,EAAM3sB,GAAGhE,MAAQA,EACjB,YAIJ2wB,EAAMvpB,KAAK,CACTxI,KAAMA,EACNoB,MAAOA,IAIX,OADA2wB,EAAMpuB,IAAI3D,GAAQoB,EACX6B,EAET,OAAO8uB,EAAMpuB,IAAI3D,KAGrB6vD,EAAK9rD,UAAUvC,MAAQ,WACrB,IAEI4D,EAAG1E,EAAGi5Q,EAAWC,EAAUC,EAF3B52Q,EAAOvH,KACP8F,EAAQ,IAAIquD,EAAK5sD,EAAKjD,KAAMiD,EAAKO,MAErC,GAAIm2Q,EAAY12Q,EAAKkG,WAAY,CAG/B,IAFA0wQ,EAAa,GACbA,EAAWl2Q,IAAM,GACZyB,EAAI,EAAG1E,EAAIi5Q,EAAU70Q,OAAQM,EAAI1E,EAAG0E,IACvCw0Q,EAAWD,EAAUv0Q,GACC,OAAlBw0Q,EAAS55Q,OACX65Q,EAAWA,EAAW/0Q,QAAU,CAC9B9E,KAAM45Q,EAAS55Q,KACfoB,MAAOw4Q,EAASx4Q,OAElBy4Q,EAAWl2Q,IAAIi2Q,EAAS55Q,MAAQ45Q,EAASx4Q,OAG7CI,EAAM2H,WAAa0wQ,EAIrB,OAFAr4Q,EAAMJ,MAAQ6B,EAAK7B,MACnBI,EAAMslB,WAAa7jB,EAAK6jB,WACjBtlB,GAETquD,EAAK9rD,UAAUsmE,KAAO,SAAUshF,GAC9B,IAAI1oJ,EAAOvH,KAGX,OAFAuH,EAAK6C,OAAOpB,OAAOinJ,EAAS1oJ,GAC5B0oJ,EAAQ96I,OAAO5N,GACRA,GAET4sD,EAAK9rD,UAAUonE,OAAS,WACtB,IACI99D,EAAMqhB,EADNzrB,EAAOvH,KAEX,IAAK2R,EAAOpK,EAAKqW,WAAYjM,GAC3BqhB,EAAOrhB,EAAKqhB,KACZzrB,EAAKyB,OAAO2I,EAAMpK,GAAM,GACxBoK,EAAOqhB,EAETzrB,EAAKyT,UAEPm5C,EAAK9rD,UAAU2S,OAAS,WACtB,IAAIzT,EAAOvH,KAAMoK,EAAS7C,EAAK6C,OAAQ4oB,EAAOzrB,EAAKyrB,KAAMuvG,EAAOh7H,EAAKg7H,KAoBrE,OAnBIn4H,IACEA,EAAOwT,aAAerW,GACxB6C,EAAOwT,WAAaoV,EAChBA,IACFA,EAAKuvG,KAAO,OAGdA,EAAKvvG,KAAOA,EAEV5oB,EAAOikD,YAAc9mD,GACvB6C,EAAOikD,UAAYk0E,EACfA,IACFA,EAAKvvG,KAAO,OAGdA,EAAKuvG,KAAOA,EAEdh7H,EAAK6C,OAAS7C,EAAKyrB,KAAOzrB,EAAKg7H,KAAO,MAEjCh7H,GAET4sD,EAAK9rD,UAAU8M,OAAS,SAAUxD,GAChC,IACIsK,EADA1U,EAAOvH,KAcX,OAZI2R,EAAKvH,QACPuH,EAAKqJ,SAEPiB,EAAO1U,EAAK8mD,UACRpyC,GACFA,EAAK+W,KAAOrhB,EACZA,EAAK4wH,KAAOtmH,EACZ1U,EAAK8mD,UAAY18C,GAEjBpK,EAAK8mD,UAAY9mD,EAAKqW,WAAajM,EAErCA,EAAKvH,OAAS7C,EACPoK,GAETwiD,EAAK9rD,UAAUW,OAAS,SAAU2I,EAAMysQ,EAASr1Q,GAC/C,IAAIqB,EAyBJ,OAxBIuH,EAAKvH,QACPuH,EAAKqJ,SAEP5Q,EAASg0Q,EAAQh0Q,QAAUpK,KACvB+I,GACEq1Q,IAAYh0Q,EAAOwT,WACrBxT,EAAOwT,WAAajM,EAEpBysQ,EAAQ77I,KAAKvvG,KAAOrhB,EAEtBA,EAAK4wH,KAAO67I,EAAQ77I,KACpB5wH,EAAKqhB,KAAOorP,EACZA,EAAQ77I,KAAO5wH,IAEXysQ,IAAYh0Q,EAAOikD,UACrBjkD,EAAOikD,UAAY18C,EAEnBysQ,EAAQprP,KAAKuvG,KAAO5wH,EAEtBA,EAAKqhB,KAAOorP,EAAQprP,KACpBrhB,EAAK4wH,KAAO67I,EACZA,EAAQprP,KAAOrhB,GAEjBA,EAAKvH,OAASA,EACPuH,GAETwiD,EAAK9rD,UAAUgiB,OAAS,SAAU/lB,GAChC,IACIqN,EADApK,EAAOvH,KAEPs3M,EAAa,GACjB,IAAK3lM,EAAOpK,EAAKqW,WAAYjM,EAAMA,EAAOosQ,GAAOpsQ,EAAMpK,GACjDoK,EAAKrN,OAASA,GAChBgzM,EAAWxqM,KAAK6E,GAGpB,OAAO2lM,GAETnjJ,EAAK9rD,UAAU6M,MAAQ,WACrB,IACIgE,EAAOxP,EAAGiI,EADVpK,EAAOvH,KAEX,GAAIuH,EAAKqW,WAAY,CAEnB,IADA1E,EAAQ,GACHvH,EAAOpK,EAAKqW,WAAYjM,EAAMA,EAAOosQ,GAAOpsQ,EAAMpK,GACrD2R,EAAMpM,KAAK6E,GAEbjI,EAAIwP,EAAM9P,OACV,MAAOM,IACLiI,EAAOuH,EAAMxP,GACbiI,EAAKvH,OAASuH,EAAKiM,WAAajM,EAAK08C,UAAY18C,EAAKqhB,KAAOrhB,EAAK4wH,KAAO,KAI7E,OADAh7H,EAAKqW,WAAarW,EAAK8mD,UAAY,KAC5B9mD,GAET4sD,EAAK9rD,UAAU8/C,QAAU,SAAUr+C,EAAUs4F,EAAY9tE,GACvD,IAC4B5qB,EAAGpF,EAD3BiD,EAAOvH,KACP2R,EAAOpK,EAAKqW,WAEhB,GADAwkF,EAAaA,GAAc,GACvBzwF,EACF,EAAG,CACD,GAAkB,IAAdA,EAAK7J,KAAY,CACnB,GAAI6J,EAAKlE,WAAWxF,IAAI,kBACtB,SAEF,GAAI6B,EAAS6H,EAAKrN,MAChB,OAAO,EAEToF,EAAIiI,EAAKlE,WAAWrE,OACpB,MAAOM,IAEL,GADApF,EAAOqN,EAAKlE,WAAW/D,GAAGpF,KACb,SAATA,GAAyD,IAAtCA,EAAK4J,QAAQ,qBAClC,OAAO,EAIb,GAAkB,IAAdyD,EAAK7J,KACP,OAAO,EAET,GAAkB,IAAd6J,EAAK7J,OAAe+1Q,GAAmBxzQ,KAAKsH,EAAKjM,OACnD,OAAO,EAET,GAAkB,IAAdiM,EAAK7J,MAAc6J,EAAKvH,QAAUg4F,EAAWzwF,EAAKvH,OAAO9F,OAASu5Q,GAAmBxzQ,KAAKsH,EAAKjM,OACjG,OAAO,EAET,GAAI4uB,GAAaA,EAAU3iB,GACzB,OAAO,QAEFA,EAAOosQ,GAAOpsQ,EAAMpK,IAE/B,OAAO,GAET4sD,EAAK9rD,UAAU8kE,KAAO,SAAUo1D,GAC9B,OAAOw7I,GAAO/9Q,KAAM,KAAMuiI,IAErBpuE,EAvPI,GA0PTkqN,GAAgB,SAAU/3Q,EAAUuG,EAAM2hD,EAAe78C,GAC3D,IAAI2sQ,EAAch4Q,EAASi4Q,oBAAsB1xQ,EAAK7D,OAClDs1Q,GAAe9vN,EAAc78C,EAAKrN,MACpCqN,EAAKuD,QAAQC,OAAO,IAAI6oQ,GAAO,KAAM,IAAI5yP,YAAa,EAEtDzZ,EAAKuD,QAAQC,OAAO,IAAI6oQ,GAAO,QAAS,IAAIt4Q,MAAQ,KAGpD84Q,GAAmB,SAAU7sQ,GAC/B,OAAO8sQ,GAAa9sQ,EAAM,UAAsC,MAA1BA,EAAKiM,WAAWlY,OAEpD+4Q,GAAe,SAAU9sQ,EAAMrN,GACjC,OAAOqN,GAAQA,EAAKiM,YAAcjM,EAAKiM,aAAejM,EAAK08C,WAAa18C,EAAKiM,WAAWtZ,OAASA,GAE/Fo6Q,GAAW,SAAUh3N,EAAQ/1C,GAC/B,IAAIrC,EAAOo4C,EAAO8gK,eAAe72M,EAAKrN,MACtC,OAAOgL,GAAQA,EAAK83M,WAElBu3D,GAAY,SAAUj3N,EAAQ0hL,EAAkBw1C,EAAoBjtQ,GACtE,OAAOA,EAAKw2C,QAAQihL,EAAkBw1C,GAAoB,SAAUjtQ,GAClE,OAAO+sQ,GAASh3N,EAAQ/1C,OAGxBktQ,GAAkB,SAAUltQ,EAAM68C,GACpC,OAAO78C,IAAS68C,EAAc78C,EAAKrN,OAAuB,OAAdqN,EAAKrN,OAG/Cw2C,GAAa,SAAUmS,EAAQ3mD,GACjC,IAAIohD,EAASuF,EAAOvF,OAChBphD,EAASw4Q,qBACX7xN,EAAOC,cAAc,MAAM,SAAUh0C,EAAOxR,EAAGmF,GAC7C,IAAInD,EAEAiI,EAGAvH,EAAQkvM,EAAY/2E,EAAMw8I,EAE1BnyC,EAAa37M,EANbjsB,EAAIkU,EAAM9P,OAEVolD,EAAgBvoD,GAAMyC,OAAO,GAAIg/C,EAAO2X,oBACxC+pK,EAAmB1hL,EAAOod,sBAE1Bk6M,EAAqBt3N,EAAOo+B,wBAGhC,IADAt3B,EAAc96C,KAAO,EAChBhK,EAAI,EAAGA,EAAI1E,EAAG0E,IAGjB,GAFAiI,EAAOuH,EAAMxP,GACbU,EAASuH,EAAKvH,OACVokD,EAAc78C,EAAKvH,OAAO9F,OAASqN,IAASvH,EAAOikD,UAAW,CAChEk0E,EAAO5wH,EAAK4wH,KACZ,MAAOA,EAAM,CAEX,GADAw8I,EAAWx8I,EAAKj+H,KACC,SAAby6Q,GAAsD,aAA/Bx8I,EAAKvtH,KAAK,iBAAiC,CACpE,GAAiB,OAAb+pQ,EACF,MAEF,GAAiB,OAAbA,EAAmB,CACrBptQ,EAAO,KACP,OAGJ4wH,EAAOA,EAAKA,KAEV5wH,IACFA,EAAKqJ,SACD2jQ,GAAUj3N,EAAQ0hL,EAAkB41C,EAAoB50Q,KAC1DwiO,EAAcllL,EAAO8gK,eAAep+M,EAAO9F,MACvCsoO,IACEA,EAAYvlB,YACdj9M,EAAO4Q,SACE4xN,EAAYxlB,WACrBi3D,GAAc/3Q,EAAUuG,EAAM2hD,EAAepkD,UAKhD,CACLkvM,EAAa3nM,EACb,MAAOvH,GAAUA,EAAOwT,aAAe07L,GAAclvM,EAAOikD,YAAcirJ,EAAY,CAEpF,GADAA,EAAalvM,EACTokD,EAAcpkD,EAAO9F,MACvB,MAEF8F,EAASA,EAAOA,OAEdkvM,IAAelvM,IAA0C,IAAhC9D,EAASi4Q,qBACpCttP,EAAW,IAAI+sP,GAAO,QAAS,GAC/B/sP,EAASvrB,MAAQ,IACjBiM,EAAKzJ,QAAQ+oB,QAMvBg8B,EAAOuiB,mBAAmB,QAAQ,SAAUt2D,GAC1C,IAAsBvH,EAAlBjI,EAAIwP,EAAM9P,OACV61Q,EAAY,SAAU9oQ,GACxB,IAAI8yB,EAAQ9yB,EAAI9V,MAAM,KAAKuU,QAAO,SAAUu0B,GAC1C,OAAOA,EAAE//B,OAAS,KAEpB,OAAO6/B,EAAM/mB,OAAO,CAAC,aAAa6L,OAAOzgB,KAAK,MAE5C4xQ,EAAc,SAAU/oQ,GAC1B,IAAIw1E,EAASx1E,EAAMlQ,GAAMgP,KAAKkB,GAAO,GACrC,MAAK,kBAAkB9L,KAAKshF,GAGnBA,EAFAszL,EAAUtzL,IAKrB,IAAKrlF,EAAS2kF,yBACZ,MAAOvhF,IACLiI,EAAOuH,EAAMxP,GACK,MAAdiI,EAAKrN,MAAwC,WAAxBqN,EAAKqD,KAAK,WACjCrD,EAAKqD,KAAK,MAAOkqQ,EAAYvtQ,EAAKqD,KAAK,YAK1C1O,EAAS64Q,4BACZlyN,EAAOuiB,mBAAmB,WAAW,SAAUt2D,GAC7C,IAAsBiqD,EAAS2sF,EAAa1lJ,EAAQuH,EAAhDjI,EAAIwP,EAAM9P,OACd,MAAOM,IAEL,GADAiI,EAAOuH,EAAMxP,GACK,MAAdiI,EAAKrN,MAAgBqN,EAAKiM,aAAejM,EAAKqD,KAAK,QAAS,CAC9D5K,EAASuH,EAAKvH,OACd+4D,EAAUxxD,EAAK08C,UACf,GACEyhG,EAAc3sF,EAAQo/D,KACtBn4H,EAAOpB,OAAOm6D,EAASxxD,GACvBwxD,EAAU2sF,QACH3sF,OAKb78D,EAAS84Q,mBACXnyN,EAAOC,cAAc,SAAS,SAAUh0C,GACtC,IAAsBvH,EAAMpH,EAAxBb,EAAIwP,EAAM9P,OACd,MAAOM,IAGL,GAFAiI,EAAOuH,EAAMxP,GACba,EAAaoH,EAAKvH,OACM,OAApBG,EAAWjG,MAAqC,OAApBiG,EAAWjG,KACzC,GAAIqN,EAAK4wH,MAA2B,OAAnB5wH,EAAK4wH,KAAKj+H,KACzBqN,EAAK4wH,KAAKptH,OAAOxD,OACZ,CACL,IAAImsD,EAAK,IAAIkgN,GAAO,KAAM,GAC1BlgN,EAAG9oD,KAAK,QAAS,yBACjBrD,EAAKg9D,KAAK7Q,OAMhBx3D,EAASsjB,UAAY89B,EAAO2hK,mBAC9Bp8J,EAAOuiB,mBAAmB,SAAS,SAAUt2D,GAC3C,IAAsBvH,EAAM0yG,EAAW6rD,EAAI5lK,EAAW+0Q,EAElDC,EAAiBnR,EAFjBzkQ,EAAIwP,EAAM9P,OACVs8M,EAAeh+J,EAAO2hK,kBAE1B,MAAO3/M,IAAK,CAIV,IAHAiI,EAAOuH,EAAMxP,GACb26G,EAAY1yG,EAAKqD,KAAK,SAAS3U,MAAM,KACrCg/Q,EAAa,GACRnvG,EAAK,EAAGA,EAAK7rD,EAAUj7G,OAAQ8mK,IAClC5lK,EAAY+5G,EAAU6rD,GACtBi+F,GAAQ,EACRmR,EAAkB55D,EAAa,KAC3B45D,GAAmBA,EAAgBh1Q,KACrC6jQ,GAAQ,GAEVmR,EAAkB55D,EAAa/zM,EAAKrN,OAC/B6pQ,GAASmR,GAAmBA,EAAgBh1Q,KAC/C6jQ,GAAQ,GAENA,IACEkR,IACFA,GAAc,KAEhBA,GAAc/0Q,GAGb+0Q,EAAWj2Q,SACdi2Q,EAAa,MAEf1tQ,EAAKqD,KAAK,QAASqqQ,QAMvBE,GAAYt5Q,GAAMinE,QAASsyM,GAASv5Q,GAAM4O,KAAM4qQ,GAAYx5Q,GAAMoyM,QAASqnE,GAAWz5Q,GAAMyC,OAChG,SAASi3Q,GAAWr5Q,EAAUohD,QACb,IAAXA,IACFA,EAAS09J,MAEX,IAAIw6D,EAAc,GACdC,EAAmB,GACnBC,EAAe,GACfC,EAAoB,GACxBz5Q,EAAWA,GAAY,GACvBA,EAASsjB,WAAW,aAActjB,IAAWA,EAASsjB,SACtDtjB,EAASujB,UAAYvjB,EAASujB,WAAa,OAC3C,IAAIm2P,EAAqB,SAAU9mQ,GACjC,IAAI6rM,EAAIpzM,EAAMvH,EAAQo9D,EAASy4M,EAAW7yM,EAAas1L,EAAUwd,EAAWx2Q,EACxE0/N,EAAkBw1C,EAAoBuB,EAAsBC,EAAmBxlJ,EAAiBz3D,EAAS0+J,EAM7G,IALAs+C,EAAuBZ,GAAU,oCACjCn2C,EAAmB1hL,EAAOod,sBAC1B85M,EAAqBl3N,EAAOo+B,wBAC5Bs6L,EAAoB14N,EAAOC,uBAC3BizE,EAAkBlzE,EAAOmzE,qBACpBkqF,EAAK,EAAGA,EAAK7rM,EAAM9P,OAAQ27M,IAE9B,GADApzM,EAAOuH,EAAM6rM,GACRpzM,EAAKvH,SAAUuH,EAAK0uQ,MAGzB,GAAID,EAAkBzuQ,EAAKrN,OAA8B,OAArBqN,EAAKvH,OAAO9F,KAAhD,CACE6+D,EAAUxxD,EAAKqhB,KACf,MAAOmwC,EAAS,CACd,IAAIi9M,EAAkBj9M,EAAQ7+D,MAK5B,MAJA6+D,EAAQ7+D,KAAO,KACf6+D,EAAQk9M,OAAQ,EAChB1uQ,EAAKvH,OAAOpB,OAAOm6D,EAASxxD,EAAKvH,QAInC+4D,EAAUA,EAAQnwC,KAEpBrhB,EAAK89D,OAAO99D,OAZd,CAgBA,IADA61D,EAAU,CAAC71D,GACNvH,EAASuH,EAAKvH,OAAQA,IAAWs9C,EAAO+hK,aAAar/M,EAAO9F,KAAMqN,EAAKrN,QAAU67Q,EAAqB/1Q,EAAO9F,MAAO8F,EAASA,EAAOA,OACvIo9D,EAAQ16D,KAAK1C,GAEf,GAAIA,GAAUo9D,EAAQp+D,OAAS,EAAG,CAGhC,IAFAo+D,EAAQr1B,UACR8tO,EAAY7yM,EAAckzM,EAAW94M,EAAQ,GAAG1hE,SAC3C4D,EAAI,EAAGA,EAAI89D,EAAQp+D,OAAS,EAAGM,IAAK,CAOvC,IANIg+C,EAAO+hK,aAAar8I,EAAY9oE,KAAMkjE,EAAQ99D,GAAGpF,OACnDo+P,EAAW4d,EAAW94M,EAAQ99D,GAAG5D,SACjCsnE,EAAYj4D,OAAOutP,IAEnBA,EAAWt1L,EAER8yM,EAAY14M,EAAQ99D,GAAGkU,WAAYsiQ,GAAaA,IAAc14M,EAAQ99D,EAAI,IAC7Em4N,EAAWq+C,EAAUltP,KACrB0vO,EAASvtP,OAAO+qQ,GAChBA,EAAYr+C,EAEdz0J,EAAcs1L,EAEXic,GAAUj3N,EAAQ0hL,EAAkBw1C,EAAoBqB,GAI3D71Q,EAAOpB,OAAO2I,EAAM61D,EAAQ,IAAI,IAHhCp9D,EAAOpB,OAAOi3Q,EAAWz4M,EAAQ,IAAI,GACrCp9D,EAAOpB,OAAO2I,EAAMsuQ,IAItB71Q,EAASo9D,EAAQ,IACbm3M,GAAUj3N,EAAQ0hL,EAAkBw1C,EAAoBx0Q,IAAWq0Q,GAAar0Q,EAAQ,QAC1FA,EAAO8K,QAAQ8F,cAEZ,GAAIrJ,EAAKvH,OAAQ,CACtB,GAAkB,OAAduH,EAAKrN,KAAe,CAEtB,GADA6+D,EAAUxxD,EAAK4wH,KACXp/D,IAA6B,OAAjBA,EAAQ7+D,MAAkC,OAAjB6+D,EAAQ7+D,MAAgB,CAC/D6+D,EAAQhuD,OAAOxD,GACf,SAGF,GADAwxD,EAAUxxD,EAAKqhB,KACXmwC,IAA6B,OAAjBA,EAAQ7+D,MAAkC,OAAjB6+D,EAAQ7+D,MAAgB,CAC/D6+D,EAAQn6D,OAAO2I,EAAMwxD,EAAQvlD,YAAY,GACzC,SAEFjM,EAAKg9D,KAAK2xM,EAAW,IAAItC,GAAO,KAAM,KACtC,SAEEt2N,EAAO+hK,aAAa93M,EAAKvH,OAAO9F,KAAM,QAAUojD,EAAO+hK,aAAa,MAAO93M,EAAKrN,MAClFqN,EAAKg9D,KAAK2xM,EAAW,IAAItC,GAAO,MAAO,KAEnCpjJ,EAAgBjpH,EAAKrN,MACvBqN,EAAKuD,QAAQ8F,SAEbrJ,EAAK89D,YAMX6wM,EAAa,SAAU3uQ,GACzB,IAAIjI,EAAGpF,EAAMiuD,EACbjuD,EAAOqN,EAAKrN,KACRA,KAAQs7Q,IACVrtN,EAAOutN,EAAax7Q,GAChBiuD,EACFA,EAAKzlD,KAAK6E,GAEVmuQ,EAAax7Q,GAAQ,CAACqN,IAG1BjI,EAAIm2Q,EAAiBz2Q,OACrB,MAAOM,IACLpF,EAAOu7Q,EAAiBn2Q,GAAGpF,KACvBA,KAAQqN,EAAKlE,WAAWxF,MAC1BsqD,EAAOwtN,EAAkBz7Q,GACrBiuD,EACFA,EAAKzlD,KAAK6E,GAEVouQ,EAAkBz7Q,GAAQ,CAACqN,IAIjC,OAAOA,GAELu7C,EAAgB,SAAU5oD,EAAMmF,GAClC+1Q,GAAOC,GAAUn7Q,IAAO,SAAUA,GAChC,IAAIiuD,EAAOqtN,EAAYt7Q,GAClBiuD,IACHqtN,EAAYt7Q,GAAQiuD,EAAO,IAE7BA,EAAKzlD,KAAKrD,OAGV82Q,EAAiB,WACnB,IAAIhgP,EAAM,GACV,IAAK,IAAIj8B,KAAQs7Q,EACXA,EAAYp3Q,eAAelE,IAC7Bi8B,EAAIzzB,KAAK,CACPxI,KAAMA,EACN+I,UAAWuyQ,EAAYt7Q,KAI7B,OAAOi8B,GAELivC,EAAqB,SAAUlrE,EAAMmF,GACvC+1Q,GAAOC,GAAUn7Q,IAAO,SAAUA,GAChC,IAAIoF,EACJ,IAAKA,EAAI,EAAGA,EAAIm2Q,EAAiBz2Q,OAAQM,IACvC,GAAIm2Q,EAAiBn2Q,GAAGpF,OAASA,EAE/B,YADAu7Q,EAAiBn2Q,GAAG2D,UAAUP,KAAKrD,GAIvCo2Q,EAAiB/yQ,KAAK,CACpBxI,KAAMA,EACN+I,UAAW,CAAC5D,SAId+2Q,EAAsB,WACxB,MAAO,GAAGt+P,OAAO29P,IAEf/xQ,EAAQ,SAAUmB,EAAMpC,GAC1B,IAAIogD,EAAQ/zC,EAAOxP,EAAG1E,EAAG2sF,EAAI8uL,EAAIluN,EAAMjuD,EACnCkqD,EAEAkyN,EACA/uQ,EAFAgvQ,EAAkB,GAGtB9zQ,EAAOA,GAAQ,GACfizQ,EAAe,GACfC,EAAoB,GACpBvxN,EAAgBkxN,GAASH,GAAU,gDAAiD73N,EAAO2X,oBAC3F,IAAI+pK,EAAmB1hL,EAAOod,sBAC1BtrD,EAAWkuC,EAAOluC,SAClBoQ,EAAWtjB,EAASsjB,SACpBg3P,EAAgB,sBAAuB/zQ,EAAOA,EAAK0yD,kBAAoBj5D,EAASi5D,kBAChFy/M,EAAqBt3N,EAAOo+B,wBAC5B+6L,EAAwB,cACxBC,EAAsB,cACtBC,EAAsB,cACtBC,EAAwB,eAC5BN,EAAiC1B,EAAmBx2Q,eAAeqE,EAAKsN,UAAY6kQ,EAAmBx2Q,eAAelC,EAASujB,WAC/H,IAAI24O,EAAgB,WAClB,IAAgCxvO,EAAMyvO,EAAlC9wP,EAAO+9D,EAAS9xD,WAChB3I,EAAO,SAAUwtP,GACfA,IACF9wP,EAAO8wP,EAAc7kP,WACjBjM,GAAsB,IAAdA,EAAK7J,OACf6J,EAAKjM,MAAQiM,EAAKjM,MAAMwC,QAAQ24Q,EAAuB,KAEzDlvQ,EAAO8wP,EAAcp0M,UACjB18C,GAAsB,IAAdA,EAAK7J,OACf6J,EAAKjM,MAAQiM,EAAKjM,MAAMwC,QAAQ44Q,EAAqB,OAI3D,GAAKp5N,EAAO+hK,aAAa/5I,EAASprE,KAAMs8Q,EAAcr2P,eAAtD,CAGA,MAAO5Y,EACLqhB,EAAOrhB,EAAKqhB,KACM,IAAdrhB,EAAK7J,MAA4B,IAAd6J,EAAK7J,MAA4B,MAAd6J,EAAKrN,OAAiBkqD,EAAc78C,EAAKrN,QAAUqN,EAAKqD,KAAK,kBAChGytP,IACHA,EAAgBwe,EAAWL,EAAe,GAC1Cne,EAAcztP,KAAK1O,EAASk5D,yBAC5BkQ,EAAS1mE,OAAOy5P,EAAe9wP,IAG/B8wP,EAActtP,OAAOxD,KAGvBsD,EAAKwtP,GACLA,EAAgB,MAElB9wP,EAAOqhB,EAET/d,EAAKwtP,KAEHwe,EAAa,SAAU38Q,EAAMwD,GAC/B,IACIyqD,EADA5gD,EAAO,IAAIqsQ,GAAO15Q,EAAMwD,GAU5B,OARIxD,KAAQs7Q,IACVrtN,EAAOutN,EAAax7Q,GAChBiuD,EACFA,EAAKzlD,KAAK6E,GAEVmuQ,EAAax7Q,GAAQ,CAACqN,IAGnBA,GAELuvQ,EAAyB,SAAUvvQ,GACrC,IAAIsf,EAAUkwP,EAAcC,EAASj+M,EACjC3U,EAAgB9G,EAAO2X,mBAC3B,IAAKpuC,EAAWtf,EAAK4wH,KAAMtxG,GAA8B,IAAlBA,EAASnpB,MAAa,CAE3D,GADAs5Q,EAAUnwP,EAASvrB,MAAMwC,QAAQ44Q,EAAqB,IAClDM,EAAQh4Q,OAAS,EAEnB,YADA6nB,EAASvrB,MAAQ07Q,GAInB,GADAD,EAAelwP,EAAS+B,KACpBmuP,EAAc,CAChB,GAA0B,IAAtBA,EAAar5Q,MAAcq5Q,EAAaz7Q,MAAM0D,OAAQ,CACxD6nB,EAAWA,EAASsxG,KACpB,SAEF,IAAK/zE,EAAc2yN,EAAa78Q,OAA+B,WAAtB68Q,EAAa78Q,MAA2C,UAAtB68Q,EAAa78Q,KAAkB,CACxG2sB,EAAWA,EAASsxG,KACpB,UAGJp/D,EAAUlyC,EAASsxG,KACnBtxG,EAASjW,SACTiW,EAAWkyC,IAGXk+M,EAAwB,SAAUx8Q,GACpC,IAAIP,EACAnB,EAAS,GACb,IAAKmB,KAAQO,EACE,OAATP,GAA0B,MAATA,IACnBnB,EAAOmB,GAAQO,EAAMP,IAGzB,OAAOnB,GAET8pD,EAAS2hN,GAAY,CACnBhlP,SAAUA,EACVyhM,kBAAmB/kN,EAAS+kN,kBAC5B52F,2BAA4BnuH,EAASmuH,2BACrC+5I,sBAAuB6S,EAAsB35N,EAAO6hK,0BACpD56M,MAAO,SAAUhD,GACfgG,EAAKwD,OAAO8rQ,EAAW,SAAU,IAAIv7Q,MAAQiG,GAE/CA,KAAM,SAAUA,EAAMi9D,GACpB,IAAI33C,EACCyvP,IACH/0Q,EAAOA,EAAKzD,QAAQ64Q,EAAqB,KACrClC,GAAgBltQ,EAAK08C,UAAWG,KAClC7iD,EAAOA,EAAKzD,QAAQ24Q,EAAuB,MAG3B,IAAhBl1Q,EAAKvC,SACP6nB,EAAWgwP,EAAW,QAAS,GAC/BhwP,EAAS23C,MAAQA,EACjBj3D,EAAKwD,OAAO8b,GAAUvrB,MAAQiG,IAGlC6C,QAAS,SAAU7C,GACjBgG,EAAKwD,OAAO8rQ,EAAW,WAAY,IAAIv7Q,MAAQiG,GAEjD6gO,GAAI,SAAUloO,EAAMqH,GAClBgG,EAAKwD,OAAO8rQ,EAAW38Q,EAAM,IAAIoB,MAAQiG,EACzCu1Q,EAAuBvvQ,IAEzBjD,QAAS,SAAU/C,GACjB,IAAI2nB,EACJA,EAAU3hB,EAAKwD,OAAO8rQ,EAAW,WAAY,KAC7C3tP,EAAQ5tB,MAAQiG,EAChBu1Q,EAAuBvvQ,IAEzB4c,MAAO,SAAUjqB,EAAM+xB,EAAOnhB,GAC5B,IAAIoe,EAASguP,EAAgB10C,EAAanzG,EAAUrvH,EAEpD,GADAwiO,EAAchjN,EAAW89B,EAAO8gK,eAAelkN,GAAQ,GACnDsoO,EAAa,CACft5M,EAAU2tP,EAAWr0C,EAAY7lB,YAAcziN,EAAM,GACrDgvB,EAAQ7lB,WAAa4oB,EACrB/C,EAAQlI,WAAalW,EACrBvD,EAAKwD,OAAOme,GACZlpB,EAASoP,EAAS7H,EAAKrN,MACnB8F,GAAUoP,EAAS8Z,EAAQhvB,QAAU8F,EAAOkpB,EAAQhvB,OACtDq8Q,EAAgB7zQ,KAAKwmB,GAEvBguP,EAAiBzB,EAAiBz2Q,OAClC,MAAOk4Q,IACL7nJ,EAAWomJ,EAAiByB,GAAgBh9Q,KACxCm1H,KAAYpjG,EAAMpuB,MACpBsqD,EAAOwtN,EAAkBtmJ,GACrBlnE,EACFA,EAAKzlD,KAAKwmB,GAEVysP,EAAkBtmJ,GAAY,CAACnmG,IAIjCk7B,EAAclqD,IAChB48Q,EAAuB5tP,GAEpBpe,IACHvD,EAAO2hB,IAEJotP,GAAkC1B,EAAmB16Q,KACxDo8Q,GAAiC,KAIvCvxP,IAAK,SAAU7qB,GACb,IAAI2sB,EAAU27M,EAAajhO,EAAMw3D,EAASu/L,EAE1C,GADA91B,EAAchjN,EAAW89B,EAAO8gK,eAAelkN,GAAQ,GACnDsoO,EAAa,CACf,GAAIp+K,EAAclqD,KACXo8Q,EAAgC,CAEnC,GADAzvP,EAAWtf,EAAKiM,WACZqT,GAA8B,IAAlBA,EAASnpB,KAEvB,GADA6D,EAAOslB,EAASvrB,MAAMwC,QAAQ24Q,EAAuB,IACjDl1Q,EAAKvC,OAAS,EAChB6nB,EAASvrB,MAAQiG,EACjBslB,EAAWA,EAAS+B,SACf,CACLmwC,EAAUlyC,EAAS+B,KACnB/B,EAASjW,SACTiW,EAAWkyC,EACX,MAAOlyC,GAA8B,IAAlBA,EAASnpB,KAC1B6D,EAAOslB,EAASvrB,MAChBy9D,EAAUlyC,EAAS+B,MACC,IAAhBrnB,EAAKvC,QAAgB43Q,EAAsB32Q,KAAKsB,MAClDslB,EAASjW,SACTiW,EAAWkyC,GAEblyC,EAAWkyC,EAKjB,GADAlyC,EAAWtf,EAAK08C,UACZp9B,GAA8B,IAAlBA,EAASnpB,KAEvB,GADA6D,EAAOslB,EAASvrB,MAAMwC,QAAQ44Q,EAAqB,IAC/Cn1Q,EAAKvC,OAAS,EAChB6nB,EAASvrB,MAAQiG,EACjBslB,EAAWA,EAASsxG,SACf,CACLp/D,EAAUlyC,EAASsxG,KACnBtxG,EAASjW,SACTiW,EAAWkyC,EACX,MAAOlyC,GAA8B,IAAlBA,EAASnpB,KAC1B6D,EAAOslB,EAASvrB,MAChBy9D,EAAUlyC,EAASsxG,MACC,IAAhB52H,EAAKvC,QAAgB43Q,EAAsB32Q,KAAKsB,MAClDslB,EAASjW,SACTiW,EAAWkyC,GAEblyC,EAAWkyC,GASrB,GAHIu9M,GAAkC1B,EAAmB16Q,KACvDo8Q,GAAiC,GAE/B9zC,EAAYvlB,aAAes3D,GAAUj3N,EAAQ0hL,EAAkB41C,EAAoBrtQ,KAChFA,EAAKlE,WAAWxF,IAAI3D,OAASqN,EAAKqD,KAAK,MAQ1C,OAPA0tP,EAAW/wP,EAAKvH,OACZokD,EAAc78C,EAAKrN,MACrBqN,EAAKuD,QAAQ8F,SAEbrJ,EAAK89D,cAEP99D,EAAO+wP,GAIP91B,EAAYxlB,YAAco3D,GAAiB7sQ,IAASgtQ,GAAUj3N,EAAQ0hL,EAAkB41C,EAAoBrtQ,KAC9G0sQ,GAAc/3Q,EAAUuG,EAAM2hD,EAAe78C,GAE/CA,EAAOA,EAAKvH,UAGfs9C,GACH,IAAIgoB,EAAW/9D,EAAO,IAAIqsQ,GAAOnxQ,EAAKsN,SAAW7T,EAASujB,UAAW,IAYrE,GAXAojC,EAAOn/C,MAAMmB,GACT2a,GAAY+2P,EAAgBv3Q,SACzByD,EAAKsN,QAGRtN,EAAKg0I,SAAU,EAFfm/H,EAAmBW,IAKnBC,IAAoC,SAAlBlxM,EAASprE,MAAmBuI,EAAKijE,gBACrD0yL,KAEG31P,EAAKg0I,QAAS,CACjB,IAAKv8I,KAAQw7Q,EAAc,CACzBvtN,EAAOqtN,EAAYt7Q,GACnB4U,EAAQ4mQ,EAAax7Q,GACrBqtF,EAAKz4E,EAAM9P,OACX,MAAOuoF,IACAz4E,EAAMy4E,GAAIvnF,QACb8O,EAAMjM,OAAO0kF,EAAI,GAGrB,IAAKjoF,EAAI,EAAG1E,EAAIutD,EAAKnpD,OAAQM,EAAI1E,EAAG0E,IAClC6oD,EAAK7oD,GAAGwP,EAAO5U,EAAMuI,GAGzB,IAAKnD,EAAI,EAAG1E,EAAI66Q,EAAiBz2Q,OAAQM,EAAI1E,EAAG0E,IAE9C,GADA6oD,EAAOstN,EAAiBn2Q,GACpB6oD,EAAKjuD,QAAQy7Q,EAAmB,CAClC7mQ,EAAQ6mQ,EAAkBxtN,EAAKjuD,MAC/BqtF,EAAKz4E,EAAM9P,OACX,MAAOuoF,IACAz4E,EAAMy4E,GAAIvnF,QACb8O,EAAMjM,OAAO0kF,EAAI,GAGrB,IAAKA,EAAK,EAAG8uL,EAAKluN,EAAKllD,UAAUjE,OAAQuoF,EAAK8uL,EAAI9uL,IAChDp/B,EAAKllD,UAAUskF,GAAIz4E,EAAOq5C,EAAKjuD,KAAMuI,IAK7C,OAAO6iE,GAELzH,EAAU,CACZvgB,OAAQA,EACR8nB,mBAAoBA,EACpBgxM,oBAAqBA,EACrBtzN,cAAeA,EACfqzN,eAAgBA,EAChBD,WAAYA,EACZxyQ,MAAOA,GAIT,OAFAgtC,GAAWmtB,EAAS3hE,GACpBs3Q,GAAaxpQ,SAAS6zD,EAAS3hE,GACxB2hE,EAGT,IAAIw/H,GAAc,SAAUi1E,EAAY7N,EAAWvqQ,IACT,IAApC2B,GAAMqyC,QAAQu2N,EAAWvqQ,KAC3Bo4Q,EAAWltM,mBAAmBlrE,GAAM,SAAU4U,EAAO5U,GACnD,IAAIoF,EAAIwP,EAAM9P,OACd,MAAOM,IACLwP,EAAMxP,GAAGsL,KAAK1Q,EAAM,SAGxBuqQ,EAAU/hQ,KAAKxI,KAGfi9Q,GAAgB,SAAUl7Q,EAAQwG,EAAM9E,GAC1C,IAAK8E,EAAKwwQ,WAAah3Q,EAAQ,CAC7B,IAAIm7Q,EAAUx3M,GAAOioL,gBAAgB5rP,EAAQs+C,GAAM93C,EAAM,CAAE9E,QAASA,KACpE,OAAOy5Q,EAAQz5Q,QAEf,OAAOA,GAGP05Q,GAAkB,SAAUxvQ,EAAKN,EAAM9E,GACzC,IAAIoC,EAAOwlN,GAAKx/M,KAAKpI,EAAK60Q,SAAW/vQ,EAAKtG,UAAY4G,EAAI28M,aAAaj9M,IACvE,OAAO9E,EAAK+E,WAAa8tM,GAAoBxsJ,GAAQN,QAAQjhD,IAAS1C,EAAOhJ,GAAMgP,KAAKhG,IAEtF0yQ,GAAY,SAAUjF,EAAYztQ,EAAMpC,GAC1C,IAAI+hO,EAAa/hO,EAAK+E,UAAY+yC,GAAM,CAAE4a,mBAAmB,GAAS1yD,GAAQA,EAC1E6iE,EAAWgtM,EAAW5uQ,MAAMmB,EAAM2/N,GAEtC,OADAquC,GAAqBH,eAAeptM,GAC7BA,GAELkyM,GAAgB,SAAUt7Q,EAAUohD,EAAQ/1C,GAC9C,IAAIkwQ,EAAiBp1C,GAAenmO,EAAUohD,GAC9C,OAAOm6N,EAAe91P,UAAUpa,IAE9BmwQ,GAAS,SAAUz7Q,EAAQC,EAAUohD,EAAQgoB,EAAU7iE,GACzD,IAAI9E,EAAU65Q,GAAct7Q,EAAUohD,EAAQgoB,GAC9C,OAAO6xM,GAAcl7Q,EAAQwG,EAAM9E,IAErC,SAASg6Q,GAAez7Q,EAAUD,GAChC,IAAI4L,EAAKy1C,EAAQg1N,EACb7N,EAAY,CAAC,qBACjB58P,EAAM5L,GAAUA,EAAO4L,IAAM5L,EAAO4L,IAAM69M,GAAWjpN,IACrD6gD,EAASrhD,GAAUA,EAAOqhD,OAASrhD,EAAOqhD,OAAS09J,GAAO9+M,GAC1DA,EAASgmO,gBAAkBhmO,EAASgmO,iBAAmB,QACvDhmO,EAASw4Q,sBAAsB,wBAAyBx4Q,IAAWA,EAASw4Q,oBAC5EpC,EAAaiD,GAAUr5Q,EAAUohD,GACjCu1N,GAAqB7oQ,SAASsoQ,EAAYp2Q,EAAU2L,GACpD,IAAI8Z,EAAY,SAAUpa,EAAMi9N,GAC9B,IAAI/hO,EAAO83C,GAAM,CAAErqC,OAAQ,QAAUs0N,GAA0B,IAC3DjuK,EAAa28M,GAAwB7sM,QAAQpqE,EAAQsL,EAAM9E,GAC3DoC,EAAOwyQ,GAAgBxvQ,EAAK0uD,EAAY9zD,GACxC6iE,EAAWiyM,GAAUjF,EAAYztQ,EAAMpC,GAC3C,MAAuB,SAAhBA,EAAKyN,OAAoBo1D,EAAWoyM,GAAOz7Q,EAAQC,EAAUohD,EAAQgoB,EAAU7iE,IAExF,MAAO,CACL66C,OAAQA,EACRwF,cAAewvN,EAAWxvN,cAC1BsiB,mBAAoBktM,EAAWltM,mBAC/BzjD,UAAWA,EACXi2P,SAAU,SAAUt2L,GAClBhkC,EAAOg/J,iBAAiBh7H,IAE1Bu2L,SAAU,SAAUv2L,GAClBhkC,EAAOkgK,iBAAiBl8H,IAE1B+7G,YAAa5lL,EAAM4lL,GAAai1E,EAAY7N,GAC5CM,aAAc,WACZ,OAAON,IAKb,SAASqT,GAAiB57Q,EAAUD,GAClC,IAAI87Q,EAAgBJ,GAAcz7Q,EAAUD,GAC5C,MAAO,CACLqhD,OAAQy6N,EAAcz6N,OACtBwF,cAAei1N,EAAcj1N,cAC7BsiB,mBAAoB2yM,EAAc3yM,mBAClCzjD,UAAWo2P,EAAcp2P,UACzBi2P,SAAUG,EAAcH,SACxBC,SAAUE,EAAcF,SACxBx6E,YAAa06E,EAAc16E,YAC3B0nE,aAAcgT,EAAchT,cAIhC,SAASiT,GAAgBxwQ,GACvB,MAAO,CACL2vD,YAAa1/C,EAAM8iN,GAAUpjK,YAAa3vD,GAC1C4vD,eAAgB3/C,EAAM8iN,GAAUnjK,eAAgB5vD,KAGnD,SAAUwwQ,GACTA,EAAgB5/M,eAAiBmiK,GAAUniK,gBAD7C,CAEE4/M,KAAoBA,GAAkB,KACxC,IAsqCIC,GAtqCAC,GAAoBF,GAEpBG,GAA2BzzN,GAAS60B,uBACpC6+L,GAA0B1zN,GAASw/H,sBACnCm0F,GAA2B,SAAUx5Q,EAAM0I,GAC7C,MAAOA,GAAQA,IAAS1I,EAAM,CAC5B,GAAIu5Q,GAAwB7wQ,IAAS4wQ,GAAyB5wQ,GAC5D,OAAOA,EAETA,EAAOA,EAAKpH,WAEd,OAAO,MAELm4Q,GAAmB,SAAU9wQ,EAAWvL,GAC1C,IACI2lF,EAAa22L,EAAkBC,EAAcC,EAAeC,EAC5DC,EAAQC,EAAQC,EAAcC,EAAc/yF,EAAQgzF,EAAQ5pG,EAAO6pG,EACnE3qP,EAAOC,EAGP2qP,EAAkBC,EANlBrxQ,EAAM5L,EAAO4L,IAAK4C,EAAO5O,GAAM4O,KAI/B0uQ,EAAcl9Q,EAAOmP,SAAUy0P,EAAe1kQ,EAAWwE,SACzDq/G,EAAMziH,KAAKyiH,IAAKllF,EAAQv9B,KAAKu9B,MAAOuuM,EAAcpsO,EAAO0T,UAE7D8oQ,EAAgB,CACdW,GAAI,CACF,EACA,GACC,GACA,GAEHviO,GAAI,CACF,EACA,EACA,GACC,GAEHwiO,GAAI,CACF,EACA,EACA,EACA,GAEF/5L,GAAI,CACF,EACA,GACC,EACD,IAGJ,IAAIwiL,EAAY,oBAChB7lQ,EAAO4lQ,cAAcn/P,KAAKo/P,sJAA0MA,EAA1MA,8CAAgRA,EAAY,2BAA6BA,EAAzTA,iEAAuZA,EAAvZA,8CAAwdljE,GAAI/tH,MAAQ,GAAK,8BAAzeixL,wDAAklBA,EAAllBA,+QAC1B,IAAIwX,EAAU,SAAUz1Q,GACtB,OAAOA,IAAyB,QAAjBA,EAAIzD,UAAsBnE,EAAO4L,IAAIjO,GAAGiK,EAAK,kBAE1D01Q,EAA6B,SAAUz4Q,EAAKyxE,GAC9C,OAAO+mM,EAAQx4Q,EAAI8L,UAAYyvP,GAAWD,gBAAgBt7P,EAAIm0C,QAASn0C,EAAIo0C,QAASq9B,IAElFinM,EAAyB,SAAU14Q,GACrC,IAAI8L,EAAS9L,EAAI8L,OACb2sQ,EAA2Bz4Q,EAAK7E,EAAOuL,UAAUugB,YAAcjnB,EAAIklE,sBACrE/pE,EAAOuL,UAAUO,OAAO6E,IAGxB6sQ,EAAkB,SAAU51Q,GAC9B,OAAO5H,EAAO4L,IAAIjO,GAAGiK,EAAK,gBAAkBA,EAAIshJ,cAAc,OAASthJ,GAErE61Q,EAAc,SAAU71Q,GAC1B,IAAIuB,EAAWnJ,EAAOC,SAASivP,gBAC/B,OAAiB,IAAb/lP,IAAsBw5L,GAAIjtH,MAGN,kBAAbvsE,IACTA,EAAW,8BAE+B,UAAxCvB,EAAI4P,aAAa,qBAGjB5P,IAAQ5H,EAAO0T,WAGZ6gD,GAAK1H,GAAQN,QAAQ3kD,GAAMuB,MAEhCu0Q,EAAqB,SAAU5vQ,GACjC,IAAI23B,EAAQC,EAAQi4O,EAChBC,EAAeC,EACnBp4O,EAAS33B,EAAE20P,QAAUia,EACrBh3O,EAAS53B,EAAE40P,QAAUia,EACrBvqP,EAAQqT,EAASg3O,EAAe,GAAK3yF,EACrCz3J,EAASqT,EAAS+2O,EAAe,GAAKK,EACtC1qP,EAAQA,EAAQ,EAAI,EAAIA,EACxBC,EAASA,EAAS,EAAI,EAAIA,EAExBsrP,EADEN,EAAQ13L,KAA4D,IAA5C3lF,EAAOC,SAAS69Q,yBAC1BpgB,GAAGtvO,gBAAgBtgB,GAEpB4vP,GAAGtvO,gBAAgBtgB,IAAMuvQ,EAAQ13L,IAAgB82L,EAAe,GAAKA,EAAe,KAAO,EAExGkB,IACE56J,EAAIt9E,GAAUs9E,EAAIr9E,IACpBrT,EAASwL,EAAMzL,EAAQ8gJ,GACvB9gJ,EAAQyL,EAAMxL,EAAS6gJ,KAEvB9gJ,EAAQyL,EAAMxL,EAAS6gJ,GACvB7gJ,EAASwL,EAAMzL,EAAQ8gJ,KAG3BtnK,EAAIwqE,UAAUonM,EAAgBlB,GAAmB,CAC/ClqP,MAAOA,EACPC,OAAQA,IAEVurP,EAAgBnB,EAAeh2P,SAAS5Q,EAAI4vB,EAC5Co4O,EAAgBpB,EAAeh2P,SAASzqB,EAAI0pC,EAC5Ck4O,EAAgBA,EAAgB,EAAIA,EAAgB,EACpDC,EAAgBA,EAAgB,EAAIA,EAAgB,EACpDjyQ,EAAIwqE,UAAUmmM,EAAc,CAC1Bj1O,KAAMs2O,EACNr2O,IAAKs2O,EACLrxL,QAAS,UAEX+vL,EAAav3Q,UAAYotB,EAAQ,YAAcC,EAC3CoqP,EAAe,GAAK,GAAKH,EAAiBjzO,aAAejX,GAC3DxmB,EAAI6vD,SAAS6gN,EAAkB,OAAQM,GAAgB9yF,EAAS13J,IAE9DqqP,EAAe,GAAK,GAAKH,EAAiBhzO,cAAgBjX,GAC5DzmB,EAAI6vD,SAAS6gN,EAAkB,MAAOO,GAAgBC,EAASzqP,IAEjEoT,EAAS2mM,EAAYu2B,YAAcqa,EACnCt3O,EAAS0mM,EAAY9nH,aAAe24J,EAChCx3O,EAASC,IAAW,GACtB95B,EAAIwqE,UAAUmmM,EAAc,CAC1Bj1O,KAAMs2O,EAAgBn4O,EACtB8B,IAAKs2O,EAAgBn4O,IAGpBq3O,IACHp5M,GAAOo4G,sBAAsB/7K,EAAQ2lF,EAAamkG,EAAQgzF,GAC1DC,GAAgB,IAGhBgB,EAAiB,WACnBhB,GAAgB,EAChB,IAAIiB,EAAc,SAAU//Q,EAAMoB,GAC5BA,IACEsmF,EAAYn8E,MAAMvL,KAAU+B,EAAOqhD,OAAOi9E,QAAQ34C,EAAYxhF,SAAS+f,cAAejmB,GACxF2N,EAAI6vD,SAAS+hN,EAAgB73L,GAAc1nF,EAAMoB,GAEjDuM,EAAIC,UAAU2xQ,EAAgB73L,GAAc1nF,EAAMoB,KAIxD2+Q,EAAY,QAAS5rP,GACrB4rP,EAAY,SAAU3rP,GACtBzmB,EAAImpE,OAAOmoM,EAAa,YAAaQ,GACrC9xQ,EAAImpE,OAAOmoM,EAAa,UAAWa,GAC/Bna,IAAiBsZ,IACnBtxQ,EAAImpE,OAAO6uL,EAAc,YAAa8Z,GACtC9xQ,EAAImpE,OAAO6uL,EAAc,UAAWma,IAEtCnyQ,EAAI+I,OAAO2nQ,GACX1wQ,EAAI+I,OAAO4nQ,GACX0B,EAAet4L,GACfhiB,GAAOq4G,kBAAkBh8K,EAAQ2lF,EAAavzD,EAAOC,GACrDzmB,EAAIC,UAAU85E,EAAa,QAAS/5E,EAAImzC,UAAU4mC,EAAa,UAC/D3lF,EAAOyU,eAELwpQ,EAAiB,SAAUl/M,GAC7B,IAAIjiB,EAAUohO,EAAaC,EAAcrwQ,EAAG63B,EAC5CwmN,IACAiyB,IACAthO,EAAWlxC,EAAIytC,OAAO0lB,EAAWqtK,GACjCwwC,EAAe9/N,EAASjnC,EACxBgnQ,EAAe//N,EAAS9gD,EACxB2pC,EAAOo5B,EAAUm/C,wBACjBggK,EAAcv4O,EAAKvT,OAASuT,EAAKywH,MAAQzwH,EAAK2B,KAC9C62O,EAAex4O,EAAKtT,QAAUsT,EAAKoX,OAASpX,EAAK4B,IAC7Co+C,IAAgB5mB,IAClB4mB,EAAc5mB,EACd3sC,EAAQC,EAAS,GAEnBvkB,EAAI9N,EAAO8lC,KAAK,iBAAkB,CAAEn1B,OAAQouD,IACxC0+M,EAAY1+M,KAAejxD,EAAEi8D,qBAC/Bv7D,EAAKguQ,GAAe,SAAUvoP,EAAQh2B,GACpC,IAAIogR,EACA90F,EAAY,SAAUz7K,GACxB4uQ,EAAS5uQ,EAAE20P,QACXka,EAAS7uQ,EAAE40P,QACX54E,EAAS0zF,EAAgB73L,GAAat8C,YACtCyzO,EAASU,EAAgB73L,GAAar8C,aACtC4pI,EAAQ4pG,EAAShzF,EACjB2yF,EAAiBxoP,EACjBA,EAAOxN,SAAW,CAChB5Q,EAAGqoQ,EAAcjqP,EAAO,GAAK2oP,EAC7B5gR,EAAGmiR,EAAelqP,EAAO,GAAK4oP,GAEhCG,EAAmB5wC,EAAYu2B,YAC/Bsa,EAAoB7wC,EAAY9nH,aAChCg4J,EAAmB32L,EAAYzuC,WAAU,GACzCtrC,EAAI2+G,SAAS+xJ,EAAkB,uBAC/B1wQ,EAAIC,UAAUywQ,EAAkB,iBAAkB,OAClDA,EAAiBttQ,iBAAkB,EACnCstQ,EAAiBgC,aAAc,EAC/B1yQ,EAAIwqE,UAAUkmM,EAAkB,CAC9Bh1O,KAAMs1O,EACNr1O,IAAKs1O,EACLp/N,OAAQ,IAEV6+N,EAAiBrtO,gBAAgB,qBACjCm9L,EAAYn8N,YAAYqsQ,GACxB1wQ,EAAIwR,KAAK8/P,EAAa,YAAaQ,GACnC9xQ,EAAIwR,KAAK8/P,EAAa,UAAWa,GAC7Bna,IAAiBsZ,IACnBtxQ,EAAIwR,KAAKwmP,EAAc,YAAa8Z,GACpC9xQ,EAAIwR,KAAKwmP,EAAc,UAAWma,IAEpCxB,EAAe3wQ,EAAI7E,IAAIqlO,EAAa,MAAO,CACzC,MAAS,oBACT,iBAAkB,OACjBtiD,EAAS,YAAcgzF,IAE5BuB,EAAYzyQ,EAAItM,IAAI,kBAAoBrB,GACpCogR,GACFzyQ,EAAI+I,OAAO0pQ,GAEbA,EAAYzyQ,EAAI7E,IAAIqlO,EAAa,MAAO,CACtC,GAAM,kBAAoBnuO,EAC1B,iBAAkB,MAClB,MAAS,mBACT,cAAgB,EAChB,MAAS,UAAYA,EAAO,iCAEf,KAAX0kM,GAAI3wK,KACNqsP,EAAUrvQ,iBAAkB,GAE9BpD,EAAIwR,KAAKihQ,EAAW,aAAa,SAAUvwQ,GACzCA,EAAEgmE,2BACFhmE,EAAE44B,iBACF6iJ,EAAUz7K,MAEZmmB,EAAOrsB,IAAMy2Q,EACbzyQ,EAAIwqE,UAAUioM,EAAW,CACvB/2O,KAAM42O,EAAcjqP,EAAO,GAAK2oP,EAAeyB,EAAU70O,YAAc,EACvEjC,IAAK42O,EAAelqP,EAAO,GAAK4oP,EAAewB,EAAU50O,aAAe,OAI5E0iN,IAEFxmK,EAAYrvE,aAAa,oBAAqB,MAE5C61O,EAAiB,WACnB,IAAIluP,EAAMogR,EAKV,IAAKpgR,KAJLmgR,IACIz4L,GACFA,EAAY12C,gBAAgB,qBAEjButO,EACX6B,EAAYzyQ,EAAItM,IAAI,kBAAoBrB,GACpCogR,IACFzyQ,EAAImpE,OAAOspM,GACXzyQ,EAAI+I,OAAO0pQ,KAIbE,EAAmB,SAAUzwQ,GAC/B,IAAI2uO,EAAU+hC,EACVC,EAAiB,SAAUnzQ,EAAMvH,GACnC,GAAIuH,EACF,GACE,GAAIA,IAASvH,EACX,OAAO,QAEFuH,EAAOA,EAAKpH,aAGrB64Q,GAAiB/8Q,EAAO6jC,UAG5Br1B,EAAK5C,EAAIE,OAAO,iDAAiD,SAAUy8B,GACzEA,EAAI0G,gBAAgB,wBAEtBuvO,EAAwB,cAAX1wQ,EAAErM,KAAuBqM,EAAE6C,OAASpF,EAAUC,UAC3DgzQ,EAAa5yQ,EAAII,EAAEwyQ,GAAYvzH,QAAQ,6BAA6B,GAChEwzH,EAAeD,EAAYpyC,KAC7BsyC,IACAjiC,EAAWlxO,EAAU4I,UAAS,GAC1BsqQ,EAAehiC,EAAU+hC,IAAeC,EAAelzQ,EAAUykJ,QAAO,GAAOwuH,IACjFP,EAAeO,GAInBryB,MAEEwyB,EAA+B,SAAU/2Q,GAC3C,OAAOs0Q,GAAyBE,GAAyBp8Q,EAAO0T,UAAW9L,KAEzEw2Q,EAA2B,WAC7B,IAAK,IAAIngR,KAAQu+Q,EAAe,CAC9B,IAAIvoP,EAASuoP,EAAcv+Q,GACvBg2B,EAAOrsB,MACTgE,EAAImpE,OAAO9gD,EAAOrsB,YACXqsB,EAAOrsB,OAIhB82Q,EAAqB,WACvB,IACE1+Q,EAAOmP,SAASsH,YAAY,wBAAwB,GAAO,GAC3D,MAAOoe,MAGX70B,EAAOsO,GAAG,QAAQ,WAChBowQ,IACI/7E,GAAI3wK,IAAM2wK,GAAI3wK,IAAM,KACtBhyB,EAAOsO,GAAG,mBAAmB,SAAUR,GACrC,IAAI6C,EAAS7C,EAAE6C,OAAQxM,EAAWwM,EAAOxM,SACpC44Q,IAAiB,mBAAmB/4Q,KAAKG,IAAcw6Q,EAA6BhuQ,KACtE,IAAb7C,EAAE4iG,QACJ1wG,EAAOuL,UAAUO,OAAO6E,EAAqB,UAAbxM,GAEnB,cAAX2J,EAAErM,MACJzB,EAAOyU,kBAIbzU,EAAO4L,IAAIwR,KAAKgvN,EAAa,mBAAmB,SAAUt+N,GACxD,IAAI8wQ,EAAgB,SAAUtzQ,GAC5Bs4L,GAAM/0K,iBAAiB7uB,GAAQ,WAC7BA,EAAOuL,UAAUO,OAAOR,OAG5B,GAAIqzQ,EAA6B7wQ,EAAE6C,QAGjC,OAFA7C,EAAE44B,sBACFk4O,EAAc9wQ,EAAE6C,QAGd,mBAAmB3M,KAAK8J,EAAE6C,OAAOxM,YACnC2J,EAAE44B,iBACuB,QAArB54B,EAAE6C,OAAOI,SACX6tQ,EAAc9wQ,EAAE6C,aAKxB,IAAIkuQ,EAA4Bj7E,GAAMnd,UAAS,SAAU34K,GAClD9N,EAAO+4O,WACVwlC,EAAiBzwQ,MAGrB9N,EAAOsO,GAAG,mEAAoEuwQ,GAC9E7+Q,EAAOsO,GAAG,wBAAwB,SAAUR,GACtC63E,GAAwC,UAAzBA,EAAYxhF,UAC7B06Q,EAA0B/wQ,MAG9B9N,EAAOsO,GAAG,YAAa69O,GACvBnsP,EAAOsO,GAAG,cAAeivQ,MAE3Bv9Q,EAAOsO,GAAG,SAAU8vQ,GACpB,IAAIv2O,EAAU,WACZ89C,EAAc22L,EAAmB,MAEnC,MAAO,CACLmB,YAAaA,EACbQ,eAAgBA,EAChB9xB,eAAgBA,EAChBoyB,iBAAkBA,EAClB12O,QAASA,IAITi3O,GAAgB,SAAUxzQ,GAC5B,OAAOm9C,GAASw/H,sBAAsB38K,IAASm9C,GAAS60B,uBAAuBhyE,IAE7EyzQ,GAAe,SAAUzzQ,EAAM+9D,EAAUp7C,GAC3C,MAAO3iB,GAAQA,IAAS+9D,EAAU,CAChC,GAAIp7C,EAAU3iB,GACZ,OAAOA,EAETA,EAAOA,EAAKpH,WAEd,OAAO,MAEL86Q,GAAqB,SAAUhmO,EAASC,EAAS7sB,GACnD,IAAIxoB,EAAS8lB,EAAKojK,EAalB,GAZAlpL,EAAUwoB,EAAIwgC,iBAAiB5T,EAASC,GACxCvvB,EAAM0C,EAAI/e,KAAK4xQ,kBACVr7Q,GAA+B,SAApBA,EAAQmN,UACtBnN,EAAUwoB,EAAI/e,MAEhBqc,EAAIw1P,kBAAkBt7Q,GACtBkpL,EAAQltL,GAAM6d,QAAQiM,EAAIqjK,kBAC1BD,EAAQA,EAAMplK,MAAK,SAAUjN,EAAGtB,GAG9B,OAFAsB,EAAIna,KAAKyiH,IAAIziH,KAAKssB,IAAInS,EAAE8sB,IAAM0R,EAASx+B,EAAEsiC,OAAS9D,IAClD9/B,EAAI7Y,KAAKyiH,IAAIziH,KAAKssB,IAAIzT,EAAEouB,IAAM0R,EAAS9/B,EAAE4jC,OAAS9D,IAC3Cx+B,EAAItB,KAET2zK,EAAM/pL,OAAS,EAAG,CACpBk2C,GAAW6zI,EAAM,GAAG/vI,OAAS+vI,EAAM,GAAGvlJ,KAAO,EAC7C,IAGE,OAFA7d,EAAIy1P,YAAYnmO,EAASC,GACzBvvB,EAAIoD,UAAS,GACNpD,EACP,MAAOmL,KAGX,OAAO,MAELuqP,GAAgC,SAAU11P,EAAK2/C,GACjD,IAAIi/J,EAAgB5+M,GAAOA,EAAI4+M,cAAgB5+M,EAAI4+M,gBAAkB,KACrE,OAAO7/K,GAAS60B,uBAAuByhM,GAAaz2C,EAAej/J,EAAUy1M,KAAkB,KAAOp1P,GAEpG6lK,GAAc,SAAUv2I,EAASC,EAAS7sB,GAC5C,IAAI1C,EAAKqtE,EACLsoL,EAAWjzP,EACf,GAAIizP,EAASnwF,uBACXn4F,EAAQsoL,EAASnwF,uBAAuBl2I,EAASC,GAC7C89C,IACFrtE,EAAM0C,EAAIhC,cACVV,EAAIW,SAAS0sE,EAAM1tC,WAAY0tC,EAAM/4F,QACrC0rB,EAAIoD,UAAS,SAEV,GAAIV,EAAI+iK,oBACbzlK,EAAM0C,EAAI+iK,oBAAoBn2I,EAASC,QAClC,GAAIomO,EAAShyQ,KAAK4xQ,gBAAiB,CACxCv1P,EAAM21P,EAAShyQ,KAAK4xQ,kBACpB,IACEv1P,EAAIy1P,YAAYnmO,EAASC,GACzBvvB,EAAIoD,UAAS,GACb,MAAO+H,GACPnL,EAAMs1P,GAAmBhmO,EAASC,EAAS7sB,GAE7C,OAAOgzP,GAA8B11P,EAAK0C,EAAI/e,MAEhD,OAAOqc,GAEL41P,GAAsB,CAAE5yN,UAAW6iI,IAEnCgwF,GAAgB,SAAUv/Q,EAAQotL,GACpC,OAAOxrL,EAAIwrL,GAAQ,SAAU92G,GAC3B,IAAIzxE,EAAM7E,EAAO8lC,KAAK,oBAAqB,CAAEwwC,MAAOA,IACpD,OAAOzxE,EAAIyxE,QAAUA,EAAQzxE,EAAIyxE,MAAQA,MAGzCkpM,GAAqB,CAAED,cAAeA,IAEtCtyN,GAAe,SAAUxpD,EAAUo/B,GACrC,IAAIzW,EAAMyW,GAAS3jC,EAAWwE,SAC1BwpD,EAAW9gC,EAAI+gC,yBAInB,OAHA3+C,EAAK/K,GAAU,SAAUG,GACvBspD,EAASj9C,YAAYrM,EAAQgI,UAExBihD,GAAQN,QAAQW,IAGrBuyN,GAAaryN,GAAU,UAAW,QAAS,QAC3C2yH,GAAW3yH,GAAU,UAAW,SAChCsyN,GAAetyN,GAAU,IAAK,KAC9B2yG,GAAU,SAAUh1E,EAAIvtF,GAC1B,IAAI6B,EAAQX,SAASY,GAAIyrF,EAAIvtF,GAAM,IACnC,OAAOylD,MAAM5jD,GAAS,EAAIA,GAExBsgR,GAAU,SAAUrzH,EAAOz2I,EAAG7Z,EAAGue,EAAIwwE,GAIvC,IAHA,IAAIgiE,EAAUgT,GAAQh1E,EAAI,WACtBiiE,EAAU+S,GAAQh1E,EAAI,WACtBp1E,EAAO22I,EAAM32I,OACRiqQ,EAAK5jR,EAAG4jR,EAAK5jR,EAAI+wJ,EAAS6yH,IAAM,CAClCjqQ,EAAKiqQ,KACRjqQ,EAAKiqQ,GAAM7/F,GAASvqH,GAAKj7C,GAAK,KAEhC,IAAK,IAAIslQ,EAAKhqQ,EAAGgqQ,EAAKhqQ,EAAIm3I,EAAS6yH,IAAM,CACvC,IAAI7zH,EAAQr2I,EAAKiqQ,GAAI5zH,QACrBA,EAAM6zH,GAAMD,IAAO5jR,GAAK6jR,IAAOhqQ,EAAIk1E,EAAK/sC,GAAQ+sC,MAIlD+0L,GAAa,SAAUxzH,EAAOz2I,EAAG7Z,GACnC,IAAI2Z,EAAO22I,EAAM32I,OACbq2I,EAAQr2I,EAAK3Z,GAAK2Z,EAAK3Z,GAAGgwJ,QAAU,GACxC,QAASA,EAAMn2I,IAEbkqQ,GAAa,SAAUzzH,EAAOz2I,EAAG7Z,GACnC,MAAO8jR,GAAWxzH,EAAOz2I,EAAG7Z,GAC1B6Z,IAEF,OAAOA,GAELkd,GAAW,SAAUpd,GACvB,OAAOu0C,EAAMv0C,GAAM,SAAUw0C,EAAK8uB,GAChC,OAAOA,EAAI+yE,QAAQjpJ,OAASonD,EAAM8uB,EAAI+yE,QAAQjpJ,OAASonD,IACtD,IAED61N,GAAiB,SAAU1zH,EAAO1oJ,GAEpC,IADA,IAAI+R,EAAO22I,EAAM32I,OACR3Z,EAAI,EAAGA,EAAI2Z,EAAK5S,OAAQ/G,IAE/B,IADA,IAAIgwJ,EAAQr2I,EAAK3Z,GAAGgwJ,QACXn2I,EAAI,EAAGA,EAAIm2I,EAAMjpJ,OAAQ8S,IAChC,GAAIuG,GAAG4vI,EAAMn2I,GAAIjS,GACf,OAAOka,EAAOH,KAAK+hQ,GAAa7pQ,EAAG7Z,IAIzC,OAAO8hB,EAAO5B,QAEZ+jQ,GAAc,SAAU3zH,EAAO4zH,EAAIC,EAAItrP,EAAIurP,GAG7C,IAFA,IAAIp8G,EAAU,GACVruJ,EAAO22I,EAAM32I,OACR3Z,EAAImkR,EAAInkR,GAAKokR,EAAIpkR,IAAK,CAC7B,IAAIgwJ,EAAQr2I,EAAK3Z,GAAGgwJ,QAChB5lJ,EAAQ85Q,EAAKrrP,EAAKm3H,EAAM5lJ,MAAM85Q,EAAIrrP,EAAK,GAAKm3H,EAAM5lJ,MAAMyuB,EAAIqrP,EAAK,GACrEl8G,EAAQv9J,KAAKs5K,GAASpqK,EAAK3Z,GAAG4H,UAAWwC,IAE3C,OAAO49J,GAELq8G,GAAW,SAAU/zH,EAAO7lI,EAAUC,GACxC,IAAIw5P,EAAKz5P,EAAS5Q,IAAKsqQ,EAAK15P,EAASzqB,IACjC64B,EAAKnO,EAAO7Q,IAAKuqQ,EAAK15P,EAAO1qB,IAC7BgoK,EAAUm8G,EAAKC,EAAKH,GAAY3zH,EAAO4zH,EAAIC,EAAItrP,EAAIurP,GAAMH,GAAY3zH,EAAO4zH,EAAIE,EAAIvrP,EAAIsrP,GAC5F,OAAOV,GAAWnzH,EAAM1oJ,UAAWmvB,GAASixI,GAAUA,IAEpDs8G,GAAiB,SAAUh0H,EAAO32I,GACpC,IAAI4qQ,EAAeviO,GAAQsuG,EAAM1oJ,WAC7Bk8K,EAAYjzH,GAAQL,QAAQ,SAGhC,OAFAoI,GAASkrH,EAAWnqK,GACpB7G,GAAOyxQ,EAAczgG,GACdygG,GAELC,GAAqB,SAAUl0H,GACjC,OAAO1qJ,EAAI0qJ,EAAM32I,QAAQ,SAAUsjE,GACjC,IAAI+yE,EAAQpqJ,EAAIq3E,EAAI+yE,SAAS,SAAUD,GACrC,IAAIhhE,EAAKv1B,GAAKu2F,GAGd,OAFAp3I,GAAOo2E,EAAI,WACXp2E,GAAOo2E,EAAI,WACJA,KAELxwE,EAAKyjC,GAAQi7B,EAAIr1E,WAErB,OADAgxD,GAASr6C,EAAIyxI,GACNzxI,MAGPkmQ,GAAY,SAAUtpQ,GACxB,IAAIm1I,EAAQmzH,GAAWzhO,GAAQ7mC,GAAW,EAAG,IAM7C,OALA3I,EAAKs8I,GAAc3zI,EAAU,OAAO,SAAUoD,EAAIve,GAChDwS,EAAKs8I,GAAcvwI,EAAI,UAAU,SAAUwwE,EAAIl1E,GAC7C8pQ,GAAQrzH,EAAOyzH,GAAWzzH,EAAOz2I,EAAG7Z,GAAIA,EAAGue,EAAIwwE,SAG5C00L,GAAWnzH,EAAM1oJ,UAAWmvB,GAASu5H,EAAM32I,QAAS22I,EAAM32I,SAE/D+qQ,GAAQ,SAAUp0H,GACpB,OAAOg0H,GAAeh0H,EAAOk0H,GAAmBl0H,KAE9Cq0H,GAAa,SAAUr0H,EAAO+xF,EAAcuiC,GAC9C,OAAOZ,GAAe1zH,EAAO+xF,GAAcjhO,MAAK,SAAUqJ,GACxD,OAAOu5P,GAAe1zH,EAAOs0H,GAAYh/Q,KAAI,SAAU8kB,GACrD,OAAO25P,GAAS/zH,EAAO7lI,EAAUC,UAInCm6P,GAAmB,CACrBt0N,QAASk0N,GACTC,MAAOA,GACPC,WAAYA,IAGVG,GAA0B,SAAU3/M,GACtC,OAAOlyD,EAAKkyD,GAAS,SAAUv5D,GAC7B,MAAqB,OAAd3J,GAAK2J,IAA+B,OAAd3J,GAAK2J,OAGlCm5Q,GAA+B,SAAU5/M,EAASz3C,GACpD,OAAOza,EAAKkyD,GAAS,SAAUv5D,GAC7B,MAAqB,OAAd3J,GAAK2J,IAAiBk1P,GAAuBl1P,EAAK8hB,MACxDlN,KAAK/R,EAAS,KAAK,SAAUgtD,GAC9B,OAAOqpN,GAAwB3/M,GAASv/D,KAAI,SAAUo/Q,GACpD,MAAO,CACLn0N,GAAQL,QAAQ,MAChBK,GAAQL,QAAQvuD,GAAK+iR,QAEtBtkQ,MAAM,QAGTukQ,GAAS,SAAUC,EAAUj2N,GAC/B,IAAIvkD,EAAUwjD,EAAMe,GAAM,SAAUd,EAAKviD,GAEvC,OADAkH,GAAOlH,EAAKuiD,GACLviD,IACNs5Q,GACH,OAAOj2N,EAAKloD,OAAS,EAAIkqD,GAAa,CAACvmD,IAAYA,GAEjDy6Q,GAAqB,SAAUC,GACjC,OAAIxqG,GAAWwqG,GACNr9Q,GAAOq9Q,GAAuB7yQ,OAAO49C,IAAQ3vC,KAAK/R,EAAS,KAAK,SAAUorH,GAC/E,MAAO,CACLurJ,EACAvrJ,MAIG1pE,GAAOi1N,GAAyB,CAACA,GAAyB,IAGjEC,GAAkB,SAAUh4M,EAAU3/C,GACxC,IAAI03P,EAAwBv0N,GAAQN,QAAQ7iC,EAAIg9M,yBAC5CvlK,EAAUitK,GAAQD,eAAeizC,EAAuB/3M,GACxDi4M,EAAe/yQ,EAAO4yD,GAAS,SAAUv5D,GAC3C,OAAOmuK,GAASnuK,IAAQguK,GAAUhuK,MAEhC25Q,EAAeR,GAA6B5/M,EAASz3C,GACrD83P,EAAcF,EAAazlQ,OAAO0lQ,EAAax+Q,OAASw+Q,EAAeJ,GAAmBC,IAC9F,OAAOx/Q,EAAI4/Q,EAAaxjO,KAEtByjO,GAAgB,WAClB,OAAOx0N,GAAa,KAElBy0N,GAAuB,SAAUr4M,EAAU3/C,GAC7C,OAAOu3P,GAAOp0N,GAAQN,QAAQ7iC,EAAIo6M,iBAAkBu9C,GAAgBh4M,EAAU3/C,KAE5Ei4P,GAAiB,SAAUprE,EAASxqD,GACtC,OAAOT,GAAWS,EAAM,QAASvwI,EAAMY,GAAIm6L,KAEzCqrE,GAAmB,SAAUv4M,EAAUw4M,GACzC,OAAOF,GAAet4M,EAAUw4M,EAAmB,IAAIzkQ,MAAK,SAAUjG,GACpE,IAAIk1I,EAAYw1H,EAAmB,GAC/BttH,EAAWstH,EAAmBA,EAAmB9+Q,OAAS,GAC1D++Q,EAAiBjB,GAAiBt0N,QAAQp1C,GAC9C,OAAO0pQ,GAAiBF,WAAWmB,EAAgBz1H,EAAWkI,GAAU3yJ,KAAI,SAAUmgR,GACpF,OAAO90N,GAAa,CAAC4zN,GAAiBH,MAAMqB,WAE7CplQ,WAAW8kQ,KAEZO,GAAuB,SAAU34M,EAAU+jH,GAC7C,OAAOA,EAAOrqL,OAAS,GAAKqqL,EAAO,GAAGxjK,UAAY63P,KAAkBC,GAAqBr4M,EAAU+jH,EAAO,KAExG60F,GAAS,SAAU54M,EAAU+jH,GAC/B,IAAIzQ,EAAgBw/D,GAAmBH,4BAA4B5uD,EAAQ/jH,GAC3E,OAAOszG,EAAc55K,OAAS,EAAI6+Q,GAAiBv4M,EAAUszG,GAAiBqlG,GAAqB34M,EAAU+jH,IAE3G80F,GAAiB,CAAEvhO,KAAMshO,IAEzB7kH,GAAiB,SAAUp9J,GAC7B,OAAO8d,EAAO5X,KAAKlG,EAAOuL,UAAUugB,UAAUlqB,KAAI,SAAU8nB,GAC1D,IAAIy4P,EAAMniR,EAAO4L,IAAI7E,IAAI/G,EAAO0T,UAAW,MAAO,CAChD,iBAAkB,MAClB,MAAS,iCACRgW,EAAIo6M,iBACHx+N,EAAO8oN,GAAKx/M,KAAKuzQ,EAAI37M,WAEzB,OADAxmE,EAAO4L,IAAI+I,OAAOwtQ,GACX78Q,KACNoX,MAAM,KAEP0lQ,GAAiB,SAAUpiR,EAAQwG,GACrC,IAEI0mD,EAFAxjC,EAAM1pB,EAAOuL,UAAUugB,SAAUu2P,EAASriR,EAAO4L,IAAIiE,OAAO,QAC5DonC,EAAMj3C,EAAOuL,UAAUysO,SAEvB5qD,EAASoyF,GAAmBD,cAAcv/Q,EAAQ67O,GAAW3uD,UAAUj2I,IAK3E,OAJAiW,EAAW1mD,EAAKiwE,WAAayrM,GAAevhO,KAAKkM,GAAQN,QAAQvsD,EAAO0T,WAAY05K,GAAQxhL,MAAQ8d,EAAIo6M,gBACpG52K,GACFm1N,EAAOpyQ,YAAYi9C,GAEdltD,EAAOuL,UAAUu7C,WAAWphC,UAAU28P,EAAQ77Q,IAEnD+qB,GAAa,SAAUvxB,EAAQwG,GAQjC,QAPa,IAATA,IACFA,EAAO,IAETA,EAAKlH,KAAM,EACXkH,EAAKyN,OAASzN,EAAKyN,QAAU,OAC7BzN,EAAK+E,WAAY,EACjB/E,EAAOxG,EAAO8lC,KAAK,mBAAoBt/B,GACnCA,EAAKujE,qBAEP,OADA/pE,EAAO8lC,KAAK,aAAct/B,GACnBA,EAAK9E,QAEd,GAAoB,SAAhB8E,EAAKyN,OACP,OAAOmpJ,GAAep9J,GAEtBwG,EAAK60Q,UAAW,EAChB,IAAI35Q,EAAU0gR,GAAepiR,EAAQwG,GACrC,MAAoB,SAAhBA,EAAKyN,OACAvS,GAEP8E,EAAK9E,QAAU1B,EAAOuL,UAAU0C,cAAgB,GAAKvM,EACrD1B,EAAO8lC,KAAK,aAAct/B,GACnBA,EAAK9E,UAId4gR,GAAsB,CAAE/wP,WAAYA,IAEpCgxP,GAAY,SAAU/7Q,EAAM9E,GAC9B,OAAOiiK,GAASA,GAAS,CAAE1vJ,OAAQ,QAAUzN,GAAO,CAClDjH,KAAK,EACLgM,WAAW,EACX7J,QAASA,KAGT8gR,GAAe,SAAUxiR,EAAQwG,GACnC,GAAoB,QAAhBA,EAAKyN,OAAkB,CACzB,IAAI3I,EAAOtL,EAAO4mD,OAAOn/C,MAAMjB,EAAK9E,QAASiiK,GAAS,CACpDl6F,eAAe,EACfvQ,mBAAmB,GAClB1yD,IACH,OAAO4/N,GAAe,CAAE7iN,SAAUvjB,EAAOujB,UAAYvjB,EAAOqhD,QAAQ37B,UAAUpa,GAE9E,OAAO9E,EAAK9E,SAGZ+/C,GAAa,SAAUzhD,EAAQ0B,EAAS8E,GAC1C,IACqCwvO,EAEjCtjC,EAAM5zG,EAHN2jL,EAAcF,GAAU/7Q,EAAM9E,GAC9BgoB,EAAM1pB,EAAOuL,UAAUugB,SACvBM,EAAMpsB,EAAOmP,SAEjB,GAAKszQ,EAAYzL,YACfyL,EAAcziR,EAAO8lC,KAAK,mBAAoB28O,IAC1CA,EAAY14M,sBAFlB,CAQA,GADAroE,EAAU8gR,GAAaxiR,EAAQyiR,GAC3B/4P,EAAIwD,WAAY,CAClBxrB,GAAW,8BACPgoB,EAAII,iBAAmBsC,GAAO1C,EAAIs/B,eAAiB58B,EACrDA,EAAI/e,KAAKrI,UAAYtD,GAErBgoB,EAAI61D,iBAC+B,IAA/BnzD,EAAI/e,KAAKiK,WAAWvU,OACtBqpB,EAAI/e,KAAKrI,UAAYtD,EAEjBgoB,EAAIg5P,yBACNh5P,EAAIwD,WAAWxD,EAAIg5P,yBAAyBhhR,KAE5CgxM,EAAOtmL,EAAI+gC,yBACX2xC,EAAO1yE,EAAIoG,cAAc,OACzBkgL,EAAKziM,YAAY6uF,GACjBA,EAAKp9C,UAAYhgD,EACjBgoB,EAAIwD,WAAWwlL,KAIrBsjC,EAAYh2O,EAAO4L,IAAItM,IAAI,WAC3BoqB,EAAM0C,EAAIhC,cACVV,EAAI41D,eAAe02J,GACnBtsN,EAAI+iK,aAAaupD,GACjBh2O,EAAOuL,UAAUwf,OAAOrB,GACxB1pB,EAAO4L,IAAI+I,OAAO,WAClB,IACE3U,EAAOuL,UAAUwf,OAAOrB,GACxB,MAAOmL,SAEJ,CACL,IAAI8tP,EAASj5P,EACTi5P,EAAO5oO,OACT3tB,EAAI3V,YAAY,UAAU,EAAO,MACjCksQ,EAAS3iR,EAAOuL,UAAUugB,UAExB,OAAO9nB,KAAKtC,IACdihR,EAAOC,UAAU,gCAAkClhR,GACnD1B,EAAO4L,IAAI+I,OAAO,cAElBguQ,EAAOC,UAAUlhR,GAGhB+gR,EAAYzL,WACfh3Q,EAAO8lC,KAAK,aAAc28O,QAjDxBziR,EAAO8lC,KAAK,aAAc28O,IAoD5BI,GAAsB,CAAEphO,WAAYA,IAEpCqhO,GAAqB,SAAUlgR,EAAM8mB,EAAKxB,EAAO66P,EAAMljR,GACzD,IAAIgqB,EAAY3B,EAAQwB,EAAII,eAAiBJ,EAAIs/B,aAC7ChrD,EAASkqB,EAAQwB,EAAIO,YAAcP,EAAIQ,UAC3C,OAAOpM,EAAO5X,KAAK2jB,GAAWjoB,IAAIirD,GAAQN,SAAS3qD,KAAI,SAAUgG,GAC/D,OAAQm7Q,GAASr5P,EAAIE,UAA0DhiB,EAA9C4sD,GAAM5sD,EAAK/H,EAAQ+H,EAAK5J,IAAS0e,MAAM9U,MACvEwV,MAAK,SAAUxV,GAChB,OAAOktD,GAAUltD,GAAOkW,EAAOH,KAAK/V,GAAO7D,GAAO6D,MACjDhG,KAAI,SAAUgG,GACf,OAAOA,EAAIgE,SACV8Q,MAAM9Z,IAEPogR,GAAa,SAAUpgR,EAAM8mB,EAAKq5P,GACpC,OAAOD,GAAmBlgR,EAAM8mB,GAAK,EAAMq5P,GAAM,SAAUn7Q,EAAK5J,GAC9D,OAAOsC,KAAKC,IAAIy1M,GAAgBpuM,GAAM5J,OAGtCgyJ,GAAS,SAAUptJ,EAAM8mB,EAAKq5P,GAChC,OAAOD,GAAmBlgR,EAAM8mB,GAAK,EAAOq5P,GAAM,SAAUn7Q,EAAK5J,GAC/D,OAAOA,EAAS,EAAIA,EAAS,EAAIA,MAGjCilR,GAAqB,SAAU33Q,EAAM43Q,GACvC,IAAIC,EAAO73Q,EACX,MAAOA,GAAQm9C,GAAS/9B,OAAOpf,IAAyB,IAAhBA,EAAKvI,OAC3CuI,EAAO43Q,EAAW53Q,EAAKqgB,YAAcrgB,EAAK+8C,gBAE5C,OAAO/8C,GAAQ63Q,GAEbC,GAAY,SAAUxgR,EAAM8mB,GAC9B,IAAI9hB,EAAKkiB,EAAgBk/B,EAAc/+B,EAAaC,EACpD,OAAKR,GAGLI,EAAiBJ,EAAII,eACrBk/B,EAAet/B,EAAIs/B,aACnB/+B,EAAcP,EAAIO,YAClBC,EAAYR,EAAIQ,UAChBtiB,EAAM8hB,EAAIg9M,yBACLh9M,EAAIE,YACHE,IAAmBk/B,GACjB9+B,EAAYD,EAAc,GACxBH,EAAew/B,kBACjB1hD,EAAMkiB,EAAexS,WAAW2S,IAIN,IAA5BH,EAAeC,UAA4C,IAA1Bi/B,EAAaj/B,WAE9CD,EADEA,EAAe/mB,SAAWknB,EACXg5P,GAAmBn5P,EAAe6B,aAAa,GAE/C7B,EAAe5lB,WAGhC8kD,EADgB,IAAd9+B,EACa+4P,GAAmBj6N,EAAaX,iBAAiB,GAEjDW,EAAa9kD,WAE1B4lB,GAAkBA,IAAmBk/B,IAChCl/B,EAITliB,GAAwB,IAAjBA,EAAImiB,SACNniB,EAAI1D,WAEN0D,GAlCEhF,GAoCPmoD,GAAoB,SAAUn/C,EAAK8d,EAAK+yN,EAAU4mC,GACpD,IAAI/3Q,EAAM1I,EACNgoD,EAAiB,GAOrB,GANAhoD,EAAOgJ,EAAI06C,UACXm2L,EAAW7wO,EAAIoL,UAAUylO,GAAYumC,GAAWpgR,EAAM8mB,EAAKA,EAAIE,WAAYhe,EAAIs8C,SAC/Em7N,EAASz3Q,EAAIoL,UAAUqsQ,GAAUrzH,GAAOptJ,EAAM8mB,EAAKA,EAAIE,WAAYhe,EAAIs8C,SACnEu0L,GAAYA,IAAa75O,GAC3BgoD,EAAenkD,KAAKg2O,GAElBA,GAAY4mC,GAAU5mC,IAAa4mC,EAAQ,CAC7C/3Q,EAAOmxO,EACP,IAAI/vN,EAAS,IAAI0rL,GAAWqkC,EAAU75O,GACtC,OAAQ0I,EAAOohB,EAAOC,SAAWrhB,IAAS+3Q,EACpCz3Q,EAAIs8C,QAAQ58C,IACds/C,EAAenkD,KAAK6E,GAO1B,OAHI+3Q,GAAU5mC,IAAa4mC,GAAUA,IAAWzgR,GAC9CgoD,EAAenkD,KAAK48Q,GAEfz4N,GAEL04N,GAAW,SAAU13Q,EAAKN,EAAM5J,GAClC,OAAOoc,EAAO5X,KAAKoF,GAAM1J,KAAI,SAAU0J,GACrC,IAAImD,EAAM7C,EAAI69C,UAAUn+C,GACpBoe,EAAM9d,EAAIkf,YAOd,OANApB,EAAIW,SAAS/e,EAAKpH,WAAYuK,GAC9Bib,EAAIY,OAAOhf,EAAKpH,WAAYuK,EAAM,GAC9B/M,IACFq7P,GAAenxP,EAAK8d,EAAKpe,GAAM,GAC/ByxP,GAAenxP,EAAK8d,EAAKpe,GAAM,IAE1Boe,MAIP65P,GAAS3jR,GAAM4O,KACfg1Q,GAAsB,SAAU95P,GAClC,QAASA,EAAI5d,QAEX23Q,GAAkB,SAAUn4Q,GAC9B,SAAUA,IAAQA,EAAK46B,gBAAkB2vK,GAAWhpJ,GAAQN,QAAQjhD,EAAK46B,eAAgB2mB,GAAQN,QAAQjhD,KAEvGo4Q,GAAe,SAAUh6P,GAC3B,QAAKA,MAEM85P,GAAoB95P,IAGtB+5P,GAAgB/5P,EAAII,iBAAmB25P,GAAgB/5P,EAAIs/B,gBAGlE26N,GAAc,SAAU/3Q,EAAKs+B,EAAK4c,EAAY9mD,GAChD,IAAI4jR,EAAiB13B,EACjB23B,EAAeC,EAAeC,EAC9Br4P,EAAoB,SAAUpgB,EAAMtN,GACtC,IAAI0rB,EAAM9d,EAAIkf,YACTxf,GAIHoe,EAAIW,SAAS/e,EAAMtN,GACnB0rB,EAAIY,OAAOhf,EAAMtN,GACjB+sB,EAAOrB,GACPoD,GAAS,KANTiwO,GAAenxP,EAAK8d,EAAK1pB,EAAO0T,WAAW,GAC3CqX,EAAOrB,KAQP6H,EAAa,SAAU/qB,GACzB,OAAO87Q,GAAoB/wP,WAAWvxB,EAAQwG,IAE5Ci7C,EAAa,SAAU//C,EAAS8E,GAClC,OAAOq8Q,GAAoBphO,WAAWzhD,EAAQ0B,EAAS8E,IAErD2N,EAAW,SAAU4uQ,GACvB,OAAOC,GAAWhjR,EAAO0T,UAAWoY,IAAUi3P,IAE5CiB,EAAW,SAAUjB,GACvB,OAAO/yH,GAAOhwJ,EAAO0T,UAAWoY,IAAUi3P,IAExC7nN,EAAc,SAAUz5D,EAAMs/C,GAChC,OAAO6iO,EAAgB1oN,YAAYz5D,EAAMs/C,IAEvCoa,EAAiB,SAAUhS,GAC7B,OAAOy6N,EAAgBzoN,eAAehS,IAEpCr9C,EAAS,SAAUR,EAAM5J,GAE3B,OADA4hR,GAAS13Q,EAAKN,EAAM5J,GAAS8M,KAAKuc,GAC3Bzf,GAEL2C,EAAc,WAChB,IAAIyb,EAAMoC,IAAUmrB,EAAM+gM,IAC1B,SAAKtuN,GAAOA,EAAIqwB,QAGZrwB,EAAIu6P,iBAC6C,IAA5Cv6P,EAAIu6P,iBAAiB,aAAcv6P,IAEpCutB,GAAOvtB,EAAIE,YAEjBkD,EAAW,SAAU2jM,GACvB,IAAI/mM,EAAMoC,IACVpC,EAAIoD,WAAW2jM,GACf1lM,EAAOrB,IAELsuN,EAAS,WACX,OAAO9tM,EAAI+lJ,aAAe/lJ,EAAI+lJ,eAAiB/lJ,EAAIxmC,SAAS6H,WAE1DugB,EAAS,WACX,IAAIvgB,EAAWme,EAAK9hB,EAAKwkB,EACrB83P,EAA2B,SAAUC,EAAKC,EAAaC,GACzD,IACE,OAAOD,EAAYE,sBAAsBH,EAAKE,GAC9C,MAAOxvP,GACP,OAAQ,IAGZ,IAAKqV,EACH,OAAO,KAGT,GADA9d,EAAM8d,EAAIxmC,SACS,qBAAR0oB,GAA+B,OAARA,EAChC,OAAO,KAET,QAAwBnP,IAApBjd,EAAOmpD,WAA2D,IAAjCwqM,GAAYpmD,SAASvtM,GAAmB,CAC3E,IAAImpD,EAAWo/L,GAAkBz8N,OAAO9rB,GACxC,GAAImpD,EAAS1sC,SACX,OAAO0sC,EAASvnD,KAAI,SAAU8c,GAC5B,OAAO8gQ,GAAmBD,cAAcv/Q,EAAQ,CAAC0e,IAAI,MACpDhC,MAAM0P,EAAIhC,eAGjB,KACO7e,EAAYysO,OAAcvvL,GAAS8wJ,iBAAiBhuM,EAAU0lL,cAE/DvnK,EADEne,EAAUslL,WAAa,EACnBtlL,EAAUwlL,WAAW,GAErBxlL,EAAU6e,YAAc7e,EAAU6e,cAAgBgC,EAAIhC,eAGhE,MAAOyK,IAmBT,OAjBAnL,EAAM81P,GAAmBD,cAAcv/Q,EAAQ,CAAC0pB,IAAM,GACjDA,IACHA,EAAM0C,EAAIhC,YAAcgC,EAAIhC,cAAgBgC,EAAI/e,KAAK4xQ,mBAEnDv1P,EAAIW,UAA4C,IAAhCX,EAAII,eAAeC,UAAkBL,EAAIE,YAC3DhiB,EAAMgE,EAAI06C,UACV58B,EAAIW,SAASziB,EAAK,GAClB8hB,EAAIY,OAAO1iB,EAAK,IAEdi8Q,GAAiBC,IACsD,IAArEI,EAAyBx6P,EAAI66P,eAAgB76P,EAAKm6P,IAAyF,IAAjEK,EAAyBx6P,EAAI86P,WAAY96P,EAAKm6P,GAC1Hn6P,EAAMo6P,GAEND,EAAgB,KAChBC,EAAgB,OAGbp6P,GAELqB,EAAS,SAAUrB,EAAKgoK,GAC1B,IAAIz6I,EAAK3rC,EAAMzG,EACf,GAAK6+Q,GAAah6P,GAAlB,CAGA,IAAI+6P,EAAUjB,GAAoB95P,GAAOA,EAAM,KAC/C,GAAI+6P,EAAJ,CACEX,EAAgB,KAChB,IACEW,EAAQ34Q,SACR,MAAO+oB,SAJX,CAcA,GANAoiB,EAAM+gM,IACNnzO,EAAM7E,EAAO8lC,KAAK,oBAAqB,CACrCwwC,MAAO5sD,EACPgoK,QAASA,IAEXhoK,EAAM7kB,EAAIyxE,MACNr/B,EAAK,CACP6sO,EAAgBp6P,EAChB,IACEutB,EAAIi5I,kBACJj5I,EAAIk5I,SAASzmK,GACb,MAAOmL,KAEO,IAAZ68J,GAAqBz6I,EAAI50C,SAC3B40C,EAAInqB,SAASpD,EAAIs/B,aAAct/B,EAAIQ,WACnC+sB,EAAI50C,OAAOqnB,EAAII,eAAgBJ,EAAIO,cAErC45P,EAAgB5sO,EAAI45I,WAAa,EAAI55I,EAAI85I,WAAW,GAAK,KAEtDrnK,EAAIE,WAAaF,EAAII,iBAAmBJ,EAAIs/B,eAAgB/R,EAAIs5I,kBAAqBoS,GAAI3wK,IACxFtI,EAAIQ,UAAYR,EAAIO,YAAc,GAChCP,EAAII,eAAew/B,kBACrBh+C,EAAOoe,EAAII,eAAexS,WAAWoS,EAAIO,aACrC3e,GAAyB,QAAjBA,EAAKyF,UACfkmC,EAAIs5I,iBAAiB7mK,EAAII,eAAgBJ,EAAIO,YAAaP,EAAIs/B,aAAct/B,EAAIQ,WAC5E+sB,EAAIg6I,aAAevnK,EAAII,gBAAkBmtB,EAAIi6I,YAAcxnK,EAAIs/B,cACjE/R,EAAIs5I,iBAAiBjlL,EAAM,EAAGA,EAAM,KAM9CtL,EAAO8lC,KAAK,yBAA0B,CACpCwwC,MAAO5sD,EACPgoK,QAASA,OAGTgzF,EAAU,SAAU98Q,GAEtB,OADA65C,EAAW71C,EAAI28M,aAAa3gN,IACrBA,GAEL4D,EAAU,WACZ,OAAO43Q,GAAUpjR,EAAO0T,UAAWoY,MAEjC64P,EAAsB,SAAUloC,EAAU4mC,GAC5C,OAAOt4N,GAAkBn/C,EAAKkgB,IAAU2wN,EAAU4mC,IAEhD9kN,EAAY,WACd,IACIqmN,EAAaC,EADb5tO,EAAM+gM,IAEV,QAAK/gM,GAAQA,EAAIg6I,YAAeh6I,EAAIi6I,aAGpC0zF,EAAch5Q,EAAIkf,YAClB85P,EAAYv6P,SAAS4sB,EAAIg6I,WAAYh6I,EAAIk6I,cACzCyzF,EAAY93P,UAAS,GACrB+3P,EAAaj5Q,EAAIkf,YACjB+5P,EAAWx6P,SAAS4sB,EAAIi6I,UAAWj6I,EAAIm6I,aACvCyzF,EAAW/3P,UAAS,GACb83P,EAAYN,sBAAsBM,EAAYL,eAAgBM,IAAe,IAElF5hL,EAAY,WACd,IAAIv5E,EAAMoC,IACNmrB,EAAM+gM,IACV,IAAK6D,GAAWD,kBAAkB3kM,IAAQ+lN,GAAah9P,GAAS,CAC9D,IAAIsmP,EAAUC,GAAetjJ,UAAUr3F,EAAK8d,GAI5C,OAHA48N,EAAQ93O,MAAK,SAAU83O,GACrBv7N,EAAOu7N,EAAS/nL,QAEX+nL,EAAQ5pO,MAAMgN,GAEvB,OAAOA,GAELo7P,EAAkB,SAAU37Q,EAAU/F,GACxC,IAAI2hR,EA0CJ,OAzCKhB,IACHA,EAAsB,GACtBgB,EAAmB,GACnB/kR,EAAOsO,GAAG,cAAc,SAAUR,GAChC,IAAIxC,EAAOwC,EAAElK,QAASu9D,EAAUv1D,EAAIkH,WAAWxH,EAAM,KAAMM,EAAI06C,WAAY0+N,EAAmB,GAC9FzB,GAAOQ,GAAqB,SAAU/8Q,EAAWmC,GAC/Co6Q,GAAOpiN,GAAS,SAAU71D,GACxB,GAAIM,EAAIjO,GAAG2N,EAAMnC,GAYf,OAXK47Q,EAAiB57Q,KACpBo6Q,GAAOv8Q,GAAW,SAAU5D,GAC1BA,GAAS,EAAM,CACbkI,KAAMA,EACNnC,SAAUA,EACVg4D,QAASA,OAGb4jN,EAAiB57Q,GAAYnC,GAE/Bg+Q,EAAiB77Q,GAAYnC,GACtB,QAIbu8Q,GAAOwB,GAAkB,SAAU/9Q,EAAWmC,GACvC67Q,EAAiB77Q,YACb47Q,EAAiB57Q,GACxBo6Q,GAAOv8Q,GAAW,SAAU5D,GAC1BA,GAAS,EAAO,CACdkI,KAAMA,EACNnC,SAAUA,EACVg4D,QAASA,eAOhB4iN,EAAoB56Q,KACvB46Q,EAAoB56Q,GAAY,IAElC46Q,EAAoB56Q,GAAU1C,KAAKrD,GAC5Bw+D,GAEL+/K,EAAqB,WACvB,IAAID,EACAp2O,EAAOM,EAAI06C,UACf,MAAOh7C,GAA0B,SAAlBA,EAAKnH,SAAqB,CACvC,GAAImH,EAAKg5G,aAAeh5G,EAAKg+B,aAAc,CACzCo4M,EAAkBp2O,EAClB,MAEFA,EAAOA,EAAKpH,WAEd,OAAOw9O,GAEL/4J,EAAiB,SAAU/gF,EAAKu5O,GAClC,OAAOa,GAAeX,sBAAsBrhP,EAAQ4H,EAAKu5O,IAEvD6hB,EAAe,SAAUhqN,EAASC,GACpC,OAAOluB,EAAOu0P,GAAoB5yN,UAAU1T,EAASC,EAASj5C,EAAOmP,YAEnE+uG,EAAwB,WAC1B,IAAIx0F,EAAMoC,IACV,OAAOpC,EAAIE,UAAYoqM,GAAgBL,eAAejqM,GAAKqjK,iBAAiB,GAAKrjK,EAAIw0F,yBAEnFr2E,EAAU,WACZqC,EAAM25O,EAAgBC,EAAgB,KACtC53B,EAAiBrkN,WAEf+5B,EAAU,CACZgiN,gBAAiB,KACjB13B,iBAAkB,KAClBtgP,IAAKA,EACLs+B,IAAKA,EACL4c,WAAYA,EACZ9mD,OAAQA,EACR8sB,SAAUA,EACVpB,kBAAmBA,EACnB6F,WAAYA,EACZkwB,WAAYA,EACZyZ,YAAaA,EACbC,eAAgBA,EAChBrvD,OAAQA,EACRmC,YAAaA,EACbswD,UAAWA,EACXmmN,QAASA,EACTl5Q,QAASA,EACTwsO,OAAQA,EACRjtN,OAAQA,EACRe,OAAQA,EACR3X,SAAUA,EACV67I,OAAQg0H,EACRj5N,kBAAmB45N,EACnB1hL,UAAWA,EACX6hL,gBAAiBA,EACjBnjC,mBAAoBA,EACpBh5J,eAAgBA,EAChBq6K,aAAcA,EACd9kJ,sBAAuBA,EACvBr2E,QAASA,GAMX,OAJA+7O,EAAkB3H,GAAkBr6M,GACpCsqL,EAAmBmwB,GAAiBz6M,EAAS5hE,GAC7C4hE,EAAQgiN,gBAAkBA,EAC1BhiN,EAAQsqL,iBAAmBA,EACpBtqL,IAIR,SAAUo6M,GACTA,EAAUA,EAAU,MAAQ,GAAK,KACjCA,EAAUA,EAAU,SAAW,GAAK,QACpCA,EAAUA,EAAU,QAAU,GAAK,OACnCA,EAAUA,EAAU,OAAS,GAAK,OAJpC,CAKEA,KAAcA,GAAY,KAC5B,IAAI/6O,GAAO,SAAU9zB,EAAW61J,GAC9B,OAAO71J,IAAc4mN,GAAW8H,UAAY74D,EAAUl3H,UAAYk3H,GAEhEiiH,GAAS,SAAU93Q,EAAW82N,EAAaxrL,GAC7C,OAAOtrC,IAAc4mN,GAAW2H,SAAWuI,EAAYt3M,KAAK8rB,GAAOwrL,EAAY/nG,KAAKzjF,IAElFysO,GAAe,SAAUriP,EAAO11B,EAAWg4Q,EAAYn5C,GACzD,OAAIvjL,GAASZ,KAAKmkL,EAAQxgO,QAAQ2B,IAAc4mN,GAAW2H,WAClDsgD,GAAUoJ,IAC+B,IAAvC3rD,GAAc0rD,EAAYn5C,GAC5BgwC,GAAUqJ,MAEVrJ,GAAUsJ,MAGjBC,GAAoB,SAAUt3P,EAAW9gB,EAAW01B,EAAO3a,GAC7D,IACwB8jN,EADpB/H,EAAcrI,GAAY/4L,GAC1BsiP,EAAaj9P,EACb86I,EAAY,GAChB,MAAOmiH,EAAY,CAEjB,GADAn5C,EAAUi5C,GAAO93Q,EAAW82N,EAAakhD,IACpCn5C,EACH,MAEF,GAAIvjL,GAASZ,KAAKmkL,EAAQxgO,SAAQ,IAChC,OAAI2B,IAAc4mN,GAAW2H,SACpB,CACL14D,UAAW/hI,GAAK9zB,EAAW61J,GAAWnnJ,OAAO,CAACmwN,IAC9Cw5C,UAAWxJ,GAAUoJ,GACrBK,QAAS3nQ,EAAOH,KAAKquN,IAGhB,CACLhpE,UAAW/hI,GAAK9zB,EAAW61J,GAC3BwiH,UAAWxJ,GAAUoJ,GACrBK,QAAS3nQ,EAAOH,KAAKquN,IAI3B,GAAKA,EAAQtY,YAAb,CAIA,GAAIzlM,EAAUk3P,EAAYn5C,GAAU,CAClC,IAAIw5C,EAAYN,GAAariP,EAAO11B,EAAWg4Q,EAAYn5C,GAC3D,MAAO,CACLhpE,UAAW/hI,GAAK9zB,EAAW61J,GAC3BwiH,UAAWA,EACXC,QAAS3nQ,EAAOH,KAAKquN,IAGzBhpE,EAAUv8J,KAAKulO,GACfm5C,EAAan5C,OAZXm5C,EAAan5C,EAcjB,MAAO,CACLhpE,UAAW/hI,GAAK9zB,EAAW61J,GAC3BwiH,UAAWxJ,GAAU0J,IACrBD,QAAS3nQ,EAAO5B,SAGhBypQ,GAA2B,SAAUx4Q,EAAWy4Q,EAAwB/iP,EAAO3a,GACjF,OAAO09P,EAAuB/iP,EAAO3a,GAAOu9P,QAAQ7jR,KAAI,SAAU62C,GAChE,IAAIuqH,EAAY4iH,EAAuB/iP,EAAO4V,GAAKuqH,UACnD,OAAO71J,IAAc4mN,GAAW8H,UAAY74D,EAAUnnJ,OAAO48B,GAAO,CAACA,GAAK58B,OAAOmnJ,MAChFtmJ,MAAM,KAEPmpQ,GAAyC,SAAU7iH,EAAWntJ,GAChE,OAAOq0C,EAAM84G,GAAW,SAAU74G,EAAKw6K,GACrC,OAAOx6K,EAAI3tC,MAAK,WACd,OAAOsB,EAAOH,KAAKgnN,MAClB,SAAUiH,GACX,OAAO9+K,GAAMxpC,GAAKsoN,EAAQ7+C,kBAAmBzpK,GAAKqhN,EAAO53C,mBAAmB,SAAUtkJ,EAAUq9O,GAC9F,IAAIC,EAAWzlR,KAAKyiH,IAAIltG,EAAI4yB,EAASnB,MACjC0+O,EAAU1lR,KAAKyiH,IAAIltG,EAAIiwQ,EAAQx+O,MACnC,OAAO0+O,GAAWD,EAAWphD,EAASiH,KACrC1uN,GAAGitC,QAEPrsC,EAAO5B,SAER+pQ,GAAgC,SAAUjjH,EAAWvqH,GACvD,OAAOn1B,GAAKm1B,EAAIs0I,kBAAkB3vK,MAAK,SAAU8oQ,GAC/C,OAAOL,GAAuC7iH,EAAWkjH,EAAW5+O,UAGpE6+O,GAAgC3qQ,EAAM+pQ,GAAmB/xD,GAAczC,SAAU,GACjFq1D,GAA4B5qQ,EAAM+pQ,GAAmB/xD,GAAcvC,QAAS,GAC5Eo1D,GAAgB,SAAUxjP,EAAO4V,GACnC,OAAO0tO,GAA8BtjP,EAAO4V,GAAKgtO,QAAQppQ,UAEvDiqQ,GAAe,SAAUzjP,EAAO4V,GAClC,OAAO2tO,GAA0BvjP,EAAO4V,GAAKgtO,QAAQppQ,UAEnDkqQ,GAAoB/qQ,EAAMmqQ,IAA2B,EAAGQ,IACxDK,GAAoBhrQ,EAAMmqQ,GAA0B,EAAGS,IACvDK,GAAwB,SAAU5jP,GACpC,OAAO85L,GAAYC,gBAAgB/5L,GAAOjhC,KAAI,SAAU62C,GACtD,MAAO,CAACA,GAAK58B,OAAOuqQ,GAA0BvjP,EAAO4V,GAAKuqH,cACzDtmJ,MAAM,KAEPgqQ,GAAuB,SAAU7jP,GACnC,OAAO85L,GAAYE,eAAeh6L,GAAOjhC,KAAI,SAAU62C,GACrD,OAAO0tO,GAA8BtjP,EAAO4V,GAAKuqH,UAAUnnJ,OAAO48B,MACjE/7B,MAAM,KAGPiqQ,GAA2Bl+N,GAAS60B,uBACpCspM,GAAoBv1D,GACpBw1D,GAA4B,SAAU15Q,EAAWnN,EAAQijP,EAAc3sK,GACzE,IAAI4sM,EAAW/1Q,IAAc4mN,GAAW2H,SACpCwnB,EAAiCggC,EAAWnyC,GAA+BC,GAC/E,IAAK16J,EAAM1sD,UAAW,CACpB,IAAIte,EAAOs7Q,GAAkBtwM,GAC7B,GAAIqwM,GAAyBr7Q,GAC3B,OAAO62O,GAAUh1O,EAAWnN,EAAQsL,EAAM6B,IAAc4mN,GAAW8H,WAAW,GAGlF,IAAIirD,EAA0Br3D,GAA6Bn5I,GACvD88I,EAAgBkH,GAA2BntN,EAAWnN,EAAO0T,UAAW4iE,GAC5E,GAAI4sK,EAA+B9vB,GACjC,OAAOjlC,GAAWnuL,EAAQozN,EAAc5nN,SAAS03Q,IAEnD,IAAI//B,EAAoB/X,GAAYH,kBAAkBi4C,EAAUjgC,EAAa7vB,IAC7E,IAAK+vB,EACH,OAAI2jC,EACKxwM,EAEF,KAET,GAAI4sK,EAA+BC,GACjC,OAAOhB,GAAUh1O,EAAWnN,EAAQmjP,EAAkB33O,SAAS03Q,GAAWA,GAAU,GAEtF,IAAIrgC,EAAoBI,EAAaE,GACrC,OAAIN,GAAqBK,EAA+BL,IAClDjoB,GAAsBuoB,EAAmBN,GACpCV,GAAUh1O,EAAWnN,EAAQ6iP,EAAkBr3O,SAAS03Q,GAAWA,GAAU,GAGpF4D,EACKtkC,GAAiBxiP,EAAQmjP,EAAkB1vB,WAAW,GAExD,MAELszD,GAA0B,SAAU55Q,EAAWnN,EAAQgnR,EAAU1wM,GACnE,IAAI88I,EAAe6zD,EAAeC,EAC9BC,EAAqBC,EAAiBpuO,EACtCquO,EAAOC,EAAOC,EAYlB,GAXAA,EAA2BX,GAAkBtwM,GAC7C88I,EAAgBkH,GAA2BntN,EAAWnN,EAAO0T,UAAW4iE,GACxE2wM,EAAgBD,EAAShnR,EAAO0T,UAAWmrP,GAAY,GAAIzrC,GAC3D8zD,EAAoB34Q,EAAO04Q,EAAenoB,GAAO,IACjDsoB,EAAkB/1E,GAASz7L,KAAKw9M,EAAcrmC,mBAC1CgkD,GAA6B3d,IAAkB8d,GAAc9d,MAC/Dm0D,EAA2Bn0D,EAAc5nN,YAEvCwlO,GAA4B5d,IAAkB+d,GAAa/d,MAC7Dm0D,EAA2Bn0D,EAAc5nN,SAAQ,KAE9C47Q,EACH,OAAO,KAIT,GAFApuO,EAAUouO,EAAgB9/O,KAC1B6/O,EAAsB/nB,GAAsB8nB,EAAmBluO,GAC3DmuO,GACER,GAAyBQ,EAAoB77Q,MAG/C,OAFA+7Q,EAAQ/mR,KAAKyiH,IAAI/pE,EAAUmuO,EAAoB7/O,MAC/CggP,EAAQhnR,KAAKyiH,IAAI/pE,EAAUmuO,EAAoB/wH,OACxC+rF,GAAUh1O,EAAWnN,EAAQmnR,EAAoB77Q,KAAM+7Q,EAAQC,GAAO,GAGjF,GAAIC,EAA0B,CAC5B,IAAIC,EAAiB9oB,GAAevxP,EAAWnN,EAAO0T,UAAWmrP,GAAY,GAAI0oB,GAEjF,GADAJ,EAAsB/nB,GAAsB7wP,EAAOi5Q,EAAgB1oB,GAAO,IAAK9lN,GAC3EmuO,EACF,OAAO3kC,GAAiBxiP,EAAQmnR,EAAoBrqO,SAAS22K,WAAW,GAG1E,GADA0zD,EAAsB91E,GAASz7L,KAAKrH,EAAOi5Q,EAAgB1oB,GAAO,KAC9DqoB,EACF,OAAO3kC,GAAiBxiP,EAAQmnR,EAAoBrqO,SAAS22K,WAAW,KAI1E76J,GAAkB,SAAU54D,GAC9B,IAAIohD,EAAYphD,EAAO4L,IAAIiE,OAAOhP,GAAS2oO,mBAAmBxpO,IAI9D,QAHK2iM,GAAI3wK,IAAM2wK,GAAI3wK,IAAM,MACvBovB,EAAUp8C,UAAY,2BAEjBo8C,GAELqmO,GAAe,SAAUznR,EAAQmN,EAAWmpE,GAC9C,IAAIg3L,EAAKtpC,EAAU5pK,EACf6pK,EAAcrI,GAAY57N,EAAO0T,WACjCqvO,EAA6BvnO,EAAMk/M,GAAwBuJ,EAAYt3M,MACvEq2N,EAA6BxnO,EAAMk/M,GAAwBuJ,EAAY/nG,MAC3E,GAAI5lD,EAAM1sD,WAAa5pB,EAAOC,SAASi5D,kBAAmB,CAExD,GADAo0M,EAAMttQ,EAAO4L,IAAIoL,UAAUs/D,EAAMxsD,eAAgB,QAC5CwjP,EACH,OAGAtpC,EADgB,IAAd72N,EACS41O,EAA2B/uB,GAAgBL,eAAer9I,IAE1D0sK,EAA2BhvB,GAAgBL,eAAer9I,IAElE0tJ,IACH5pK,EAAWxB,GAAgB54D,GACT,IAAdmN,EACFnN,EAAOgM,EAAEshQ,GAAK/mQ,MAAM6zD,GAEpBp6D,EAAOgM,EAAEshQ,GAAK5qQ,OAAO03D,GAEvBp6D,EAAOuL,UAAUO,OAAOsuD,GAAU,GAClCp6D,EAAOuL,UAAUuhB,cAInB46P,GAAqB,SAAU1nR,EAAQ0xL,GACzC,IAGIi2F,EAHA1jD,EAAcrI,GAAY57N,EAAO0T,WACjCqvO,EAA6BvnO,EAAMk/M,GAAwBuJ,EAAYt3M,MACvEq2N,EAA6BxnO,EAAMk/M,GAAwBuJ,EAAY/nG,MAEvE/uH,EAAYukL,EAAUqiC,GAAW2H,SAAW3H,GAAW8H,UACvDonB,EAAevxD,EAAUqxD,EAA6BC,EACtD1sK,EAAQt2E,EAAOuL,UAAUugB,SAE7B,OADA67P,EAAWd,GAA0B15Q,EAAWnN,EAAQijP,EAAc3sK,GAClEqxM,IAGJA,EAAWF,GAAaznR,EAAQmN,EAAWmpE,GACvCqxM,GAGG,OAELC,GAAmB,SAAU5nR,EAAQk1J,GACvC,IAAIyyH,EACAx6Q,EAAY+nJ,EAAO,GAAK,EACxB8xH,EAAW9xH,EAAOspG,GAAYF,GAC9BhoL,EAAQt2E,EAAOuL,UAAUugB,SAE7B,OADA67P,EAAWZ,GAAwB55Q,EAAWnN,EAAQgnR,EAAU1wM,GAC5DqxM,IAGJA,EAAWF,GAAaznR,EAAQmN,EAAWmpE,GACvCqxM,GAGG,OAELE,GAAQ,SAAU7nR,EAAQ0xL,GAC5B,OAAO,WACL,IAAI7mK,EAAS68P,GAAmB1nR,EAAQ0xL,GACxC,QAAI7mK,IACF63N,GAAY1iP,EAAQ6qB,IACb,KAMTi9P,GAAQ,SAAU9nR,EAAQk1J,GAC5B,OAAO,WACL,IAAIrqI,EAAS+8P,GAAiB5nR,EAAQk1J,GACtC,QAAIrqI,IACF63N,GAAY1iP,EAAQ6qB,IACb,KAMTk9P,GAAgB,SAAUr2F,GAC5B,OAAO,SAAUj5I,GACf,OAAOi5I,EAAUs/C,GAA4Bv4L,GAAOs4L,GAA6Bt4L,KAGjFuvO,GAAqB,SAAUhoR,EAAQ0xL,GACzC,OAAO,WACL,IAAIxrL,EAAOwrL,EAAUsiC,GAAgBJ,aAAa5zN,EAAOuL,UAAUugB,UAAYkoM,GAAgBL,eAAe3zN,EAAOuL,UAAUugB,UAC3HpuB,EAASg0L,EAAU00F,GAA0BpmR,EAAO0T,UAAWxN,GAAQigR,GAA8BnmR,EAAO0T,UAAWxN,GACvHI,EAAKorL,EAAU97K,GAAKlY,EAAOslK,WAAa1/I,GAAK5lB,EAAOslK,WACxD,OAAO18J,EAAGiI,OAAOw5Q,GAAcr2F,IAAUl1K,KAAK/R,GAAS,IAAQ,SAAUguC,GAEvE,OADAz4C,EAAOuL,UAAUwf,OAAO0tB,EAAIg7K,YACrB,OAKTw0D,GAAU,SAAUtiP,EAAMvc,GAC5B,MAAO,CACLke,KAAM3B,EAAK2B,KAAOle,EAClBme,IAAK5B,EAAK4B,IAAMne,EAChBgtI,MAAOzwH,EAAKywH,MAAgB,EAARhtI,EACpB2zB,OAAQpX,EAAKoX,OAAiB,EAAR3zB,EACtBgJ,MAAOuT,EAAKvT,MAAQhJ,EACpBiJ,OAAQsT,EAAKtT,OAASjJ,IAGtB8+P,GAAa,SAAUC,EAAeC,GACxC,OAAOhrQ,GAAKgrQ,GAAK,SAAUr9L,GACzB,IAAIplD,EAAOsiP,GAAQ5yN,GAAQ01B,EAAGmzB,0BAA2B,GACzD,MAAO,CACL,CACEroG,EAAG8vB,EAAK2B,KACRtrC,EAAGmsR,EAAcxiP,GACjBomH,KAAMhhE,GAER,CACEl1E,EAAG8vB,EAAKywH,MACRp6J,EAAGmsR,EAAcxiP,GACjBomH,KAAMhhE,QAKVs9L,GAAoB,SAAUC,EAASzyQ,EAAG7Z,GAC5C,OAAOkuD,EAAMo+N,GAAS,SAAUn+N,EAAKo+N,GACnC,OAAOp+N,EAAI3tC,MAAK,WACd,OAAOsB,EAAOH,KAAK4qQ,MAClB,SAAUC,GACX,IAAIC,EAAUnoR,KAAKw9B,KAAKx9B,KAAKyiH,IAAIylK,EAAU3yQ,EAAIA,GAAKvV,KAAKyiH,IAAIylK,EAAUxsR,EAAIA,IACvEgqR,EAAU1lR,KAAKw9B,KAAKx9B,KAAKyiH,IAAIwlK,EAAU1yQ,EAAIA,GAAKvV,KAAKyiH,IAAIwlK,EAAUvsR,EAAIA,IAC3E,OAAO8hB,EAAOH,KAAKqoQ,EAAUyC,EAAUF,EAAYC,QAEpD1qQ,EAAO5B,SAERwsQ,GAAmB,SAAUP,EAAeQ,EAAgBr8H,EAAOz2I,EAAG7Z,GACxE,IAAIgwJ,EAAQlB,GAAcj+F,GAAQN,QAAQ+/F,GAAQ,iBAAiB1qJ,KAAI,SAAUkM,GAC/E,OAAOA,EAAElC,SAEP08Q,EAAU/5Q,EAAO25Q,GAAWC,EAAen8H,IAAQ,SAAU48H,GAC/D,OAAOD,EAAeC,EAAQ5sR,MAEhC,OAAOqsR,GAAkBC,EAASzyQ,EAAG7Z,GAAG4F,KAAI,SAAUgnR,GACpD,OAAOA,EAAO78H,SAGd88H,GAAiB,SAAUljP,GAC7B,OAAOA,EAAKoX,QAEV+rO,GAAc,SAAUnjP,GAC1B,OAAOA,EAAK4B,KAEVwhP,GAAY,SAAUH,EAAQ5sR,GAChC,OAAO4sR,EAAO5sR,EAAIA,GAEhBgtR,GAAY,SAAUJ,EAAQ5sR,GAChC,OAAO4sR,EAAO5sR,EAAIA,GAEhBitR,GAAsBztQ,EAAMktQ,GAAkBG,GAAgBE,IAC9DG,GAAsB1tQ,EAAMktQ,GAAkBI,GAAaE,IAC3DG,GAAiC,SAAU78H,EAAO7zG,GACpD,OAAOn1B,GAAKm1B,EAAIs0I,kBAAkB3vK,MAAK,SAAUuoB,GAC/C,OAAOsjP,GAAoB38H,EAAO3mH,EAAK2B,KAAM3B,EAAK4B,QACjDnqB,MAAK,SAAU2uI,GAChB,OAAOk6H,GAA8BS,GAAqB36H,GAAOtzG,OAGjE2wO,GAAiC,SAAU98H,EAAO7zG,GACpD,OAAO7iC,GAAK6iC,EAAIs0I,kBAAkB3vK,MAAK,SAAUuoB,GAC/C,OAAOujP,GAAoB58H,EAAO3mH,EAAK2B,KAAM3B,EAAK4B,QACjDnqB,MAAK,SAAU2uI,GAChB,OAAOk6H,GAA8BQ,GAAsB16H,GAAOtzG,OAIlE4wO,GAAe,SAAU9D,EAAmB1iP,EAAOymP,GACrD,OAAOA,EAAS7D,QAAQ7jR,KAAI,SAAU2nR,GACpC,OAAOhE,EAAkB1iP,EAAO0mP,GAAU9D,QAAQhpQ,YACjDC,OAAM,IAEP8sQ,GAAsB,SAAUF,GAClC,OAAOA,EAAS9D,YAAcxJ,GAAUsJ,MAAsC,IAA9BgE,EAAStmH,UAAUjgK,QAEjE0mR,GAAoB,SAAUH,GAChC,OAAOA,EAAS9D,YAAcxJ,GAAUoJ,IAAoC,IAA9BkE,EAAStmH,UAAUjgK,QAE/D2mR,GAAoB,SAAUnE,EAAmB1iP,EAAO4V,GAC1D,IAAI6wO,EAAW/D,EAAkB1iP,EAAO4V,GACxC,OAAI+wO,GAAoBF,KAAc7gO,GAASZ,KAAKpP,EAAIjtC,YAAci+Q,GAAkBH,IAC9ED,GAAa9D,EAAmB1iP,EAAOymP,GAExCA,EAAS7D,QAAQppQ,UAGxBstQ,GAAyBnuQ,EAAMkuQ,GAAmBvD,IAClDyD,GAAwBpuQ,EAAMkuQ,GAAmBtD,IACjDyD,GAA6B,SAAUn4F,EAAShoK,EAAK4iI,GACvD,IAAI03E,EAAWhQ,GAAgBL,eAAejqM,GAC9C,OAAOizM,GAAYH,YAAY9qC,EAASplC,GAAO1qJ,KAAI,SAAU62C,GAC3D,OAAOA,EAAIi4K,QAAQsT,MAClBtnN,OAAM,IAEPotQ,GAAuB,SAAU9pR,EAAQ0xL,EAASplC,EAAOvhE,GAC3D,IAAIrhE,EAAM1pB,EAAOuL,UAAUugB,SACvB3e,EAAYukL,EAAU,GAAK,EAC/B,GAAIknC,MAA6BixD,GAA2Bn4F,EAAShoK,EAAK4iI,GAAQ,CAChF,IAAIzhI,EAASs3N,GAAUh1O,EAAWnN,EAAQssJ,GAAQolC,GAAS,GAE3D,OADAgxD,GAAY1iP,EAAQ6qB,IACb,EAET,OAAO,GAELk/P,GAA0B,SAAUnnR,EAAM0pJ,EAAOpkI,GACnD,OAAOihQ,GAA+B78H,EAAOpkI,GAAO/K,SAAQ,WAC1D,OAAOmG,GAAK4E,EAAM6kK,kBAAkB3vK,MAAK,SAAUuoB,GACjD,OAAOkgP,GAAuCU,GAAkB3jR,EAAMoxN,GAAgBtxN,OAAO4pJ,IAAS3mH,EAAK2B,YAE5G5qB,MAAMs3M,GAAgBtxN,OAAO4pJ,KAE9B09H,GAA0B,SAAUpnR,EAAM0pJ,EAAOpkI,GACnD,OAAOkhQ,GAA+B98H,EAAOpkI,GAAO/K,SAAQ,WAC1D,OAAOmG,GAAK4E,EAAM6kK,kBAAkB3vK,MAAK,SAAUuoB,GACjD,OAAOkgP,GAAuCW,GAAkB5jR,EAAMoxN,GAAgBztN,MAAM+lJ,IAAS3mH,EAAK2B,YAE3G5qB,MAAMs3M,GAAgBztN,MAAM+lJ,KAE7B29H,GAAW,SAAUjjH,EAAUvuH,GACjC,IAAIntC,EAAOmtC,EAAIjtC,QAAQw7J,GACvB,OAAOv+G,GAASqM,UAAUxpD,IAA2B,UAAlBA,EAAKnH,SAAuB2Z,EAAOH,KAAKrS,GAAQwS,EAAO5B,QAExFguQ,GAAc,SAAUh1H,EAAMl1J,EAAQssJ,EAAO7zG,GAC/C,IAAI8jN,EAAkB17P,GAAS2oO,mBAAmBxpO,GAC9Cu8P,EACFv8P,EAAO0L,YAAYC,UAAS,WAC1B,IAAI/H,EAAUipD,GAAQL,QAAQ+vM,GAC9BvnM,GAAOpxD,EAAS/C,GAAS4oO,wBAAwBzpO,IACjD8O,GAAOlL,EAASipD,GAAQL,QAAQ,OAC5B0oG,EACF3uJ,GAAMsmD,GAAQN,QAAQ+/F,GAAQ1oJ,GAE9BlB,GAAOmqD,GAAQN,QAAQ+/F,GAAQ1oJ,GAEjC,IAAI8lB,EAAM1pB,EAAO4L,IAAIkf,YACrBpB,EAAIW,SAASzmB,EAAQgI,MAAO,GAC5B8d,EAAIY,OAAO1mB,EAAQgI,MAAO,GAC1B82O,GAAY1iP,EAAQ0pB,MAGtBg5N,GAAY1iP,EAAQy4C,EAAIg7K,YAGxB8gB,GAAY,SAAUv0O,EAAQk1J,EAAMz8G,GACtC,IAAI6zG,EAAe29H,KAAP/0H,EAAsBz8G,GAC9B7iC,GAAgB,IAATs/I,EACX5I,EAAM9vI,MAAK,WACT,OAAOkmO,GAAY1iP,EAAQy4C,EAAIg7K,cAC9B,SAAUnnE,GACX,OAAOqwE,GAAYH,WAAW5mN,EAAM5V,EAAO0T,WAAWnF,QAAO,SAAUq9N,GACrE,OAAOA,EAAQlb,QAAQj4K,MACtBj8B,MAAK,WACN,OAAOkmO,GAAY1iP,EAAQy4C,EAAIg7K,cAC9B,SAAUpyN,GACX,OAAO6oR,GAAYh1H,EAAMl1J,EAAQssJ,EAAO7zG,UAI1C0xO,GAAqB,SAAUnqR,EAAQk1J,EAAM5I,EAAOvhE,GACtD,IAAIrhE,EAAM1pB,EAAOuL,UAAUugB,SACvB2sB,EAAMu7K,GAAgBL,eAAejqM,GACrC9mB,EAAO5C,EAAO0T,UAClB,IAAKwhJ,GAAQy0H,GAAuB5+L,EAAItyC,GAAM,CAC5C,IAAIksL,EAASolD,GAAwBnnR,EAAM0pJ,EAAO7zG,GAElD,OADA87L,GAAUv0O,EAAQk1J,EAAMyvE,IACjB,EACF,GAAIzvE,GAAQ00H,GAAsB7+L,EAAItyC,GAAM,CAC7CksL,EAASqlD,GAAwBpnR,EAAM0pJ,EAAO7zG,GAElD,OADA87L,GAAUv0O,EAAQk1J,EAAMyvE,IACjB,EAEP,OAAO,GAGPylD,GAAU,SAAUpqR,EAAQ0xL,GAC9B,OAAO,WACL,OAAO5zK,EAAO5X,KAAKlG,EAAO4L,IAAIoL,UAAUhX,EAAOuL,UAAUC,UAAW,UAAU4R,MAAK,SAAU2tE,GAC3F,OAAOjtE,EAAO5X,KAAKlG,EAAO4L,IAAIoL,UAAU+zE,EAAI,UAAUnpF,KAAI,SAAU0qJ,GAClE,OAAOw9H,GAAqB9pR,EAAQ0xL,EAASplC,SAE9C5vI,OAAM,KAGT2tQ,GAAU,SAAUrqR,EAAQ0xL,GAC9B,OAAO,WACL,OAAO5zK,EAAO5X,KAAKlG,EAAO4L,IAAIoL,UAAUhX,EAAOuL,UAAUC,UAAW,UAAU4R,MAAK,SAAU2tE,GAC3F,OAAOjtE,EAAO5X,KAAKlG,EAAO4L,IAAIoL,UAAU+zE,EAAI,UAAUnpF,KAAI,SAAU0qJ,GAClE,OAAO69H,GAAmBnqR,EAAQ0xL,EAASplC,EAAOvhE,SAEnDruE,OAAM,KAIT6yJ,GAAW,SAAUjkK,GACvB,OAAOqI,EAAS,CAAC,cAAe1V,GAAKqN,KAEnCg/Q,GAAc,SAAU35Q,GAC1B,IAAI+Y,EAAMxqB,EAAWwE,SAAS0mB,cAG9B,OAFAV,EAAI41D,eAAe3uE,EAAO/E,OAC1B8d,EAAI+iK,aAAa97K,EAAO/E,OACjB8d,GAEL6gQ,GAAgB,SAAU3nR,EAAMgF,EAAK8pL,GACnCA,EACF5iL,GAAOlM,EAAMgF,GAEb8hJ,GAAQ9mJ,EAAMgF,IAGd4iR,GAAW,SAAU5nR,EAAM8uL,GAC7B,IAAIj1G,EAAK5vB,GAAQL,QAAQ,MAEzB,OADA+9N,GAAc3nR,EAAM65E,EAAIi1G,GACjB44F,GAAY7tM,IAEjBguM,GAAgB,SAAU7nR,EAAM8uL,EAAS54H,EAAW9oC,GACtD,IAAInD,EAAQggC,GAAQL,QAAQsM,GACxB2jB,EAAK5vB,GAAQL,QAAQ,MAIzB,OAHAwI,GAAOnoC,EAAOmD,GACdlhB,GAAO+d,EAAO4vD,GACd8tM,GAAc3nR,EAAMiqB,EAAO6kK,GACpB44F,GAAY7tM,IAEjBiuM,GAAkB,SAAU9nR,EAAM23Q,EAAevqP,EAAO0hK,GAC1D,MAAsB,KAAlB6oF,EACKiQ,GAAS5nR,EAAM8uL,GAEf+4F,GAAc7nR,EAAM8uL,EAAS6oF,EAAevqP,IAGnD26P,GAAwB,SAAUlyO,EAAK71C,GACzC,IAAI0mJ,EAAS9tI,EAAMY,GAAIxZ,GACvB,OAAOqoJ,GAAQp+F,GAAQN,QAAQ9T,EAAI5uB,aAAcq+B,GAASohG,GAAQ/6I,OAAOghK,KAEvEq7G,GAAsB,SAAUhoR,EAAM8uL,EAASj5I,GACjD,OAAOi5I,EAAU40F,GAAa1jR,EAAKgJ,MAAO6sC,GAAO4tO,GAAczjR,EAAKgJ,MAAO6sC,IAEzEoyO,GAA0B,SAAU7qR,EAAQ0xL,GAC9C,IAAI9uL,EAAOiqD,GAAQN,QAAQvsD,EAAO0T,WAC9B+kC,EAAMu7K,GAAgBL,eAAe3zN,EAAOuL,UAAUugB,UACtDg/P,EAAYjqR,GAAS2oO,mBAAmBxpO,GACxC+qR,EAAiBlqR,GAAS4oO,wBAAwBzpO,GACtD,OAAO2qR,GAAsBlyO,EAAK71C,GAAMya,QAAO,WAC7C,GAAIutQ,GAAoBhoR,EAAM8uL,EAASj5I,GAAM,CAC3C,IAAI/uB,EAAMghQ,GAAgB9nR,EAAMkoR,EAAWC,EAAgBr5F,GAE3D,OADA1xL,EAAOuL,UAAUwf,OAAOrB,IACjB,EAEP,OAAO,MAITshQ,GAAU,SAAUhrR,EAAQ0xL,GAC9B,OAAO,WACL,QAAI1xL,EAAOuL,UAAU0C,eACZ48Q,GAAwB7qR,EAAQ0xL,KAOzC7oK,GAAkB,SAAUljB,GAC9B,OAAO/D,EAAI+D,GAAU,SAAUE,GAC7B,OAAOy4C,GAAM,CACXwiB,UAAU,EACVynB,QAAQ,EACRjuC,SAAS,EACTkuC,SAAS,EACTr6D,QAAS,EACTlP,OAAQ1D,GACP1V,OAGHolR,GAAe,SAAUplR,EAAShB,GACpC,OAAOA,EAAIspB,UAAYtoB,EAAQsoB,SAAWtpB,EAAIi8D,WAAaj7D,EAAQi7D,UAAYj8D,EAAI0jF,SAAW1iF,EAAQ0iF,QAAU1jF,EAAIy1C,UAAYz0C,EAAQy0C,SAAWz1C,EAAI2jF,UAAY3iF,EAAQ2iF,SAEzK0iM,GAAU,SAAUvlR,EAAUd,GAChC,OAAOuY,GAAKyL,GAAgBljB,IAAW,SAAUE,GAC/C,OAAOolR,GAAaplR,EAAShB,GAAO,CAACgB,GAAW,OAGhDoZ,GAAS,SAAUlD,GAErB,IADA,IAAIlG,EAAI,GACC8F,EAAK,EAAGA,EAAK7Y,UAAUC,OAAQ4Y,IACtC9F,EAAE8F,EAAK,GAAK7Y,UAAU6Y,GAExB,IAAInV,EAAOG,MAAM3E,UAAUoE,MAAMlE,KAAKY,UAAW,GACjD,OAAO,WACL,OAAOiZ,EAAElV,MAAM,KAAML,KAGrB81K,GAAU,SAAU32K,EAAUd,GAChC,OAAOoK,EAAKi8Q,GAAQvlR,EAAUd,IAAM,SAAUgB,GAC5C,OAAOA,EAAQoZ,aAGfksQ,GAAY,CACd1sR,MAAOysR,GACPjsQ,OAAQA,GACRq9J,QAASA,IAGP8uG,GAAyB,SAAUprR,EAAQ62L,EAAOhyL,GACpD,IAAIksD,EAAK8B,GAAoBvE,SAASyC,GACtCo6N,GAAU7uG,QAAQ,CAChB,CACEnuJ,QAASuvO,GAAG92N,MACZ3nB,OAAQ4oQ,GAAM7nR,GAAQ,IAExB,CACEmuB,QAASuvO,GAAG/2N,KACZ1nB,OAAQ4oQ,GAAM7nR,GAAQ,IAExB,CACEmuB,QAASuvO,GAAG72N,GACZ5nB,OAAQ6oQ,GAAM9nR,GAAQ,IAExB,CACEmuB,QAASuvO,GAAG52N,KACZ7nB,OAAQ6oQ,GAAM9nR,GAAQ,IAExB,CACEmuB,QAASuvO,GAAG92N,MACZ3nB,OAAQmrQ,GAAQpqR,GAAQ,IAE1B,CACEmuB,QAASuvO,GAAG/2N,KACZ1nB,OAAQmrQ,GAAQpqR,GAAQ,IAE1B,CACEmuB,QAASuvO,GAAG72N,GACZ5nB,OAAQorQ,GAAQrqR,GAAQ,IAE1B,CACEmuB,QAASuvO,GAAG52N,KACZ7nB,OAAQorQ,GAAQrqR,GAAQ,IAE1B,CACEmuB,QAASuvO,GAAG92N,MACZ3nB,OAAQq6N,GAAkBpzD,KAAKlmL,EAAQ62L,GAAO,IAEhD,CACE1oK,QAASuvO,GAAG/2N,KACZ1nB,OAAQq6N,GAAkBpzD,KAAKlmL,EAAQ62L,GAAO,IAEhD,CACE1oK,QAASuvO,GAAG92N,MACZ0T,SAAUyW,EAAGN,QACb83B,OAAQx3B,EAAGN,QACXxxC,OAAQq6N,GAAkBF,aAAap5O,EAAQ62L,IAEjD,CACE1oK,QAASuvO,GAAG/2N,KACZ2T,SAAUyW,EAAGN,QACb83B,OAAQx3B,EAAGN,QACXxxC,OAAQq6N,GAAkBD,aAAar5O,EAAQ62L,IAEjD,CACE1oK,QAASuvO,GAAG72N,GACZ5nB,OAAQ+rQ,GAAQhrR,GAAQ,IAE1B,CACEmuB,QAASuvO,GAAG52N,KACZ7nB,OAAQ+rQ,GAAQhrR,GAAQ,KAEzB6E,GAAK2J,MAAK,SAAUnN,GACrBwD,EAAI6hC,qBAGJ2kP,GAAU,SAAUrrR,EAAQ62L,GAC9B72L,EAAOsO,GAAG,WAAW,SAAUzJ,IACI,IAA7BA,EAAIklE,sBACNqhN,GAAuBprR,EAAQ62L,EAAOhyL,OAIxCymR,GAAY,CAAEj9Q,MAAOg9Q,IAErBE,GAA2B,SAAUvrR,EAAQ62L,EAAOhyL,GACtDsmR,GAAU7uG,QAAQ,CAChB,CACEnuJ,QAASuvO,GAAGt9L,UACZnhD,OAAQksQ,GAAUlsQ,OAAOm2N,GAAUj1K,gBAAiBngE,GAAQ,IAE9D,CACEmuB,QAASuvO,GAAGr9L,OACZphD,OAAQksQ,GAAUlsQ,OAAOm2N,GAAUj1K,gBAAiBngE,GAAQ,IAE9D,CACEmuB,QAASuvO,GAAGt9L,UACZnhD,OAAQksQ,GAAUlsQ,OAAOokO,GAAkBljL,gBAAiBngE,GAAQ,IAEtE,CACEmuB,QAASuvO,GAAGr9L,OACZphD,OAAQksQ,GAAUlsQ,OAAOokO,GAAkBljL,gBAAiBngE,GAAQ,IAEtE,CACEmuB,QAASuvO,GAAGt9L,UACZnhD,OAAQksQ,GAAUlsQ,OAAO+6N,GAAqB75K,gBAAiBngE,EAAQ62L,GAAO,IAEhF,CACE1oK,QAASuvO,GAAGr9L,OACZphD,OAAQksQ,GAAUlsQ,OAAO+6N,GAAqB75K,gBAAiBngE,EAAQ62L,GAAO,IAEhF,CACE1oK,QAASuvO,GAAGt9L,UACZnhD,OAAQksQ,GAAUlsQ,OAAOy+N,GAAYv9K,gBAAiBngE,GAAQ,IAEhE,CACEmuB,QAASuvO,GAAGr9L,OACZphD,OAAQksQ,GAAUlsQ,OAAOy+N,GAAYv9K,gBAAiBngE,GAAQ,IAEhE,CACEmuB,QAASuvO,GAAGt9L,UACZnhD,OAAQksQ,GAAUlsQ,OAAO6wN,GAAiB3vK,gBAAiBngE,GAAQ,IAErE,CACEmuB,QAASuvO,GAAGr9L,OACZphD,OAAQksQ,GAAUlsQ,OAAO6wN,GAAiB3vK,gBAAiBngE,GAAQ,IAErE,CACEmuB,QAASuvO,GAAGt9L,UACZnhD,OAAQksQ,GAAUlsQ,OAAOmwN,GAAoBjvK,gBAAiBngE,GAAQ,IAExE,CACEmuB,QAASuvO,GAAGr9L,OACZphD,OAAQksQ,GAAUlsQ,OAAOmwN,GAAoBjvK,gBAAiBngE,GAAQ,IAExE,CACEmuB,QAASuvO,GAAGt9L,UACZnhD,OAAQksQ,GAAUlsQ,OAAO+hO,GAAmB7gL,gBAAiBngE,GAAQ,IAEvE,CACEmuB,QAASuvO,GAAGr9L,OACZphD,OAAQksQ,GAAUlsQ,OAAO+hO,GAAmB7gL,gBAAiBngE,GAAQ,KAEtE6E,GAAK2J,MAAK,SAAUnN,GACrBwD,EAAI6hC,qBAGJ8kP,GAAuB,SAAUxrR,EAAQ6E,GAC3CsmR,GAAU7uG,QAAQ,CAChB,CACEnuJ,QAASuvO,GAAGt9L,UACZnhD,OAAQksQ,GAAUlsQ,OAAOm2N,GAAUH,iBAAkBj1O,IAEvD,CACEmuB,QAASuvO,GAAGr9L,OACZphD,OAAQksQ,GAAUlsQ,OAAOm2N,GAAUH,iBAAkBj1O,KAEtD6E,IAED4mR,GAAU,SAAUzrR,EAAQ62L,GAC9B72L,EAAOsO,GAAG,WAAW,SAAUzJ,IACI,IAA7BA,EAAIklE,sBACNwhN,GAAyBvrR,EAAQ62L,EAAOhyL,MAG5C7E,EAAOsO,GAAG,SAAS,SAAUzJ,IACM,IAA7BA,EAAIklE,sBACNyhN,GAAqBxrR,EAAQ6E,OAI/B6mR,GAAsB,CAAEr9Q,MAAOo9Q,IAE/BE,GAAgC,SAAUrgR,GAC5C,MAAOA,EAAM,CACX,GAAsB,IAAlBA,EAAKye,UAAoC,IAAlBze,EAAKye,UAAkBze,EAAKvG,MAAQ,WAAWf,KAAKsH,EAAKvG,MAClF,OAAOuG,EAETA,EAAOA,EAAKqgB,cAGZigQ,GAAsB,SAAU5rR,EAAQ4C,GAC1C,IAAI8pB,EAAQphB,EAAMoe,EAAsBmiQ,EAAjBr6H,EAAW5uJ,EAC9BgJ,EAAM5L,EAAO4L,IACb2zM,EAAoCv/M,EAAOqhD,OAAO8hK,oCACtD,GAAKvgN,EAAL,CAGA,GAAI,eAAeoB,KAAKpB,EAAKuB,UAAW,CACtC,IAAIoT,EAAao0Q,GAA8B/oR,EAAK2U,YAChDA,GAAc,eAAevT,KAAKuT,EAAWpT,WAC/CvB,EAAKJ,aAAaoJ,EAAIwgB,IAAIhd,eAAe,KAASxM,EAAK2U,YAK3D,GAFAmS,EAAM9d,EAAIkf,YACVloB,EAAKqgG,YACDrgG,EAAK0mD,gBAAiB,CACxB58B,EAAS,IAAI0rL,GAAWx1M,EAAMA,GAC9B,MAAO0I,EAAOohB,EAAOuiC,UAAW,CAC9B,GAAIxG,GAAS/9B,OAAOpf,GAAO,CACzBoe,EAAIW,SAAS/e,EAAM,GACnBoe,EAAIY,OAAOhf,EAAM,GACjB,MAEF,GAAIi0M,EAAkCj0M,EAAKnH,SAAS+f,eAAgB,CAClEwF,EAAI41D,eAAeh0E,GACnBoe,EAAI+iK,aAAanhL,GACjB,MAEFkmJ,EAAWlmJ,EACXA,EAAOohB,EAAOC,OAEXrhB,IACHoe,EAAIW,SAASmnI,EAAU,GACvB9nI,EAAIY,OAAOknI,EAAU,SAGnB/oG,GAASZ,KAAKjlD,GACZA,EAAK+oB,aAAe/f,EAAIs8C,QAAQtlD,EAAK+oB,cACvCjC,EAAI41D,eAAe18E,GACnB8mB,EAAI+iK,aAAa7pL,KAEjB8mB,EAAI6wC,cAAc33D,GAClB8mB,EAAI8wC,YAAY53D,KAGlB8mB,EAAIW,SAASznB,EAAM,GACnB8mB,EAAIY,OAAO1nB,EAAM,IAGrB5C,EAAOuL,UAAUwf,OAAOrB,GACxB9d,EAAI+I,OAAOk3Q,GACX7rR,EAAOuL,UAAUo9E,eAAe/lF,KAE9BkpR,GAAkB,SAAUlgR,EAAKN,GACnC,IACIvH,EAAQgoR,EADRnpR,EAAOgJ,EAAI06C,UAEfviD,EAASuH,EACT,MAAOvH,IAAWnB,GAA2C,UAAnCgJ,EAAI+wD,mBAAmB54D,GACR,SAAnC6H,EAAI+wD,mBAAmB54D,KACzBgoR,EAAehoR,GAEjBA,EAASA,EAAOG,WAElB,OAAOH,IAAWnB,EAAOmpR,EAAenpR,GAEtCopR,GAAmB,SAAUhsR,GAC/B,OAAO8d,EAAO5X,KAAKlG,EAAO4L,IAAIoL,UAAUhX,EAAOuL,UAAU4I,UAAS,GAAOnU,EAAO4L,IAAIs8C,WAElF+jO,GAAqB,SAAUjsR,GACjC,OAAOgsR,GAAiBhsR,GAAQwc,KAAK/R,EAAS,KAAK,SAAUo1D,GAC3D,OAAOA,EAAY17D,SAASy4D,kBAG5BsvN,GAAwB,SAAUlsR,GACpC,OAAOgsR,GAAiBhsR,GAAQuO,QAAO,SAAU3G,GAC/C,OAAOgvK,GAAW/pH,GAAQN,QAAQ3kD,OACjC6U,UAED0vQ,GAAe,CACjBP,oBAAqBA,GACrBE,gBAAiBA,GACjBtyD,eAAgBwyD,GAChBC,mBAAoBA,GACpBC,sBAAuBA,IAGrBE,GAAgB,SAAUxkR,EAAK3J,GACjC,OAAO2J,EAAI2P,YAAc3P,EAAI2P,WAAWpT,WAAalG,GAEnDouR,GAAc,SAAUzkR,EAAKklJ,GAC/B,OAAOllJ,GAAOA,EAAI1D,YAAc0D,EAAI1D,WAAWC,WAAa2oJ,GAE1Dw/H,GAAc,SAAU1kR,GAC1B,OAAOA,GAAO,eAAe5D,KAAK4D,EAAIzD,WAEpCooR,GAAe,SAAU3kR,GAC3B,OAAO0kR,GAAY1kR,IAAQ0kR,GAAY1kR,EAAI1D,aAEzCsoR,GAAoB,SAAUzlC,GAChC,IAAI0lC,EAAuB1lC,EAAe7iP,WAC1C,MAAI,eAAeF,KAAKyoR,EAAqBtoR,UACpCsoR,EAEF1lC,GAEL2lC,GAAkB,SAAU3lC,EAAgBlnL,EAAa+8B,GAC3D,IAAItxF,EAAOy7O,EAAenqJ,EAAQ,aAAe,aACjD,MAAOtxF,EAAM,CACX,GAAIm9C,GAASqM,UAAUxpD,GACrB,MAEFA,EAAOA,EAAKsxF,EAAQ,cAAgB,mBAEtC,OAAOtxF,IAASu0D,GAEdihH,GAAW,SAAU9gL,EAAQ2sR,EAAgB5lC,EAAgBlnL,EAAa+sN,GAC5E,IAAIhhR,EAAM5L,EAAO4L,IACb8d,EAAM1pB,EAAOuL,UAAUugB,SAC3B,GAAIi7N,IAAmB/mP,EAAO0T,UAA9B,CAGI64Q,GAAaxlC,KACf6lC,EAAe,MAEjB,IAAIxyN,EAAWwyN,EAAeD,EAAeC,GAAgBhhR,EAAIiE,OAAO,MACxE,GAAI68Q,GAAgB3lC,EAAgBlnL,GAAa,IAAS6sN,GAAgB3lC,EAAgBlnL,GAAa,GACjGwsN,GAAYtlC,EAAgB,MAC9Bn7O,EAAIygB,YAAY+tC,EAAUoyN,GAAkBzlC,IAE5Cn7O,EAAI/J,QAAQu4D,EAAU2sL,QAEnB,GAAI2lC,GAAgB3lC,EAAgBlnL,GAAa,GAClDwsN,GAAYtlC,EAAgB,OAC9Bn7O,EAAIygB,YAAY+tC,EAAUoyN,GAAkBzlC,IAC5C3sL,EAASnqD,YAAYrE,EAAIwgB,IAAIhd,eAAe,MAC5CgrD,EAASnqD,YAAY82O,IAErBA,EAAe7iP,WAAW1B,aAAa43D,EAAU2sL,QAE9C,GAAI2lC,GAAgB3lC,EAAgBlnL,GAAa,GACtDj0D,EAAIygB,YAAY+tC,EAAUoyN,GAAkBzlC,QACvC,CACLA,EAAiBylC,GAAkBzlC,GACnC,IAAI7sL,EAASxwC,EAAIm/B,aACjBqR,EAAOK,cAAcsF,GACrB3F,EAAOM,YAAYusL,GACnB,IAAI75L,EAAWgN,EAAOO,kBACD,OAAjBmyN,GAAyBR,GAAcl/N,EAAU,OACnDkN,EAAWlN,EAAS31C,WACpB3L,EAAIygB,YAAY6gC,EAAU65L,KAE1Bn7O,EAAIygB,YAAY6gC,EAAU65L,GAC1Bn7O,EAAIygB,YAAY+tC,EAAU2sL,IAG9Bn7O,EAAI+I,OAAOkrD,GACXssN,GAAaP,oBAAoB5rR,EAAQo6D,KAEvCyyN,GAAW,CAAElqR,OAAQm+K,IAErBgsG,GAAW,SAAU5/N,GACvB1+C,EAAKm8I,GAAY99F,GAAQN,QAAQW,GAAWxiC,KAAS,SAAUplB,GAC7D,IAAI6/N,EAAU7/N,EAAKsG,MACnBu5N,EAAQ7oG,UAAY8xF,GAAKx/M,KAAKu2N,EAAQ7oG,eAGtCywJ,GAAgB,SAAUnhR,EAAKhE,GACjC,OAAOA,GAAwB,MAAjBA,EAAIzD,UAAoByH,EAAIk2C,QAAQl6C,IAEhDolR,GAAgB,SAAU1hR,GAC5B,OAAOA,GAAQ,oBAAoBtH,KAAKsH,EAAKnH,WAE3C8oR,GAAa,SAAUrlR,GACzBA,EAAI5C,UAAY,2BAEdkoR,GAA0B,SAAUrjQ,EAAW1lB,GACjD,OAAO0lB,EAAU1lB,WAAaA,GAAY0lB,EAAUw+B,iBAAmBx+B,EAAUw+B,gBAAgBlkD,WAAaA,GAE5GgpR,GAAgB,SAAUvhR,EAAKN,GACjC,OAAOA,GAAQM,EAAIs8C,QAAQ58C,KAAU,yBAAyBtH,KAAKsH,EAAKnH,YAAc,qBAAqBH,KAAKsH,EAAK9B,MAAMszC,WAA8C,SAAjClxC,EAAI+wD,mBAAmBrxD,IAE7J8hR,GAAsC,SAAUxhR,EAAK0zM,EAAqBzyL,GAC5E,IAEIxpB,EAFAiI,EAAOuhB,EACPwgQ,EAAc,GAElB,GAAK/hR,EAAL,CAGA,MAAOA,EAAOA,EAAKiM,WAAY,CAC7B,GAAI3L,EAAIs8C,QAAQ58C,GACd,OAEEm9C,GAASqM,UAAUxpD,KAAUg0M,EAAoBh0M,EAAKnH,SAAS+f,gBACjEmpQ,EAAY5mR,KAAK6E,GAGrBjI,EAAIgqR,EAAYtqR,OAChB,MAAOM,IACLiI,EAAO+hR,EAAYhqR,KACdiI,EAAKg+C,iBAAmBh+C,EAAKiM,aAAejM,EAAK08C,WAA2C,KAA9B18C,EAAKiM,WAAW+kH,WAG7EywJ,GAAcnhR,EAAKN,KAFvBM,EAAI+I,OAAOrJ,KAQbgiR,GAAsB,SAAUplQ,EAAO2B,EAAW7rB,GACpD,OAAmC,IAA/ByqD,GAAS/9B,OAAOb,GACX7rB,EACEkqB,EACS,IAAXlqB,GAAgB6rB,EAAU9kB,KAAK60E,OAAO57E,EAAS,KAAOowN,GAAKH,KAAO,EAAIjwN,EAEtEA,IAAW6rB,EAAU9kB,KAAKhC,OAAS,GAAK8mB,EAAU9kB,KAAK60E,OAAO57E,KAAYowN,GAAKH,KAAOpkM,EAAU9kB,KAAKhC,OAAS/E,GAGrHuvR,GAAqB,SAAU7jQ,GACjC,IAAImB,EAASnB,EAAIm/B,aAGjB,OAFAh+B,EAAOR,SAASX,EAAII,eAAgBwjQ,IAAoB,EAAM5jQ,EAAII,eAAgBJ,EAAIO,cACtFY,EAAOP,OAAOZ,EAAIs/B,aAAcskO,IAAoB,EAAO5jQ,EAAIs/B,aAAct/B,EAAIQ,YAC1EW,GAEL2iQ,GAAwB,SAAUliR,GACpC,GACMm9C,GAAS/9B,OAAOpf,KAClBA,EAAKgxH,UAAYhxH,EAAKgxH,UAAUz6H,QAAQ,WAAY,KAEtDyJ,EAAOA,EAAKiM,iBACLjM,IAEPmiR,GAAoB,SAAU7hR,EAAKN,GACrC,IACIvH,EAAQgoR,EADRnpR,EAAOgJ,EAAI06C,UAEfviD,EAASuH,EACT,MAAOvH,IAAWnB,GAA2C,UAAnCgJ,EAAI+wD,mBAAmB54D,GACR,SAAnC6H,EAAI+wD,mBAAmB54D,KACzBgoR,EAAehoR,GAEjBA,EAASA,EAAOG,WAElB,OAAOH,IAAWnB,EAAOmpR,EAAenpR,GAEtC8qR,GAAkB,SAAU1tR,EAAQsL,EAAMqiR,GAC5C7vQ,EAAO5X,KAAKynR,EAAqBnkR,OAAO5H,IAAI5B,EAAO4L,IAAIw2C,YAAY5zC,MAAK,SAAUo/Q,GAChF,IAAIC,EAAgBr4E,GAAU3oJ,GAAQN,QAAQjhD,IAC1CwiR,EAAYnqH,GAASA,GAAS,GAAIkqH,GAAgBD,GACtD5tR,EAAO4L,IAAIwqE,UAAU9qE,EAAMwiR,MAE7B,IAAIC,EAAiBjwQ,EAAO5X,KAAKynR,EAAqBvuO,OAAOx9C,KAAI,SAAUosR,GACzE,OAAOA,EAAYh0R,MAAM,UAEvBi0R,EAAoBnwQ,EAAO5X,KAAKoF,EAAKrH,WAAWrC,KAAI,SAAUssR,GAChE,OAAO3/Q,EAAO2/Q,EAAel0R,MAAM,QAAQ,SAAUkrK,GACnD,MAAiB,KAAVA,QAGXp4G,GAAMihO,EAAgBE,GAAmB,SAAUD,EAAaE,GAC9D,IAAIC,EAAkB5/Q,EAAO2/Q,GAAgB,SAAUhpH,GACrD,OAAQvxJ,EAASq6Q,EAAa9oH,MAE5BkpH,EAAa9mQ,GAAe0mQ,EAAaG,GAC7CnuR,EAAO4L,IAAIC,UAAUP,EAAM,QAAS8iR,EAAWnnR,KAAK,SAEtD,IAAIonR,EAAe,CACjB,QACA,SAEEC,EAAiBh5E,GAASq4E,GAAsB,SAAUtsR,EAAG2uB,GAC/D,OAAQrc,EAAS06Q,EAAcr+P,MAC9BjlB,EACH/K,EAAO4L,IAAIsZ,WAAW5Z,EAAMgjR,IAE1BC,GAAsB,SAAUvuR,EAAQsL,GAC1C,IAAIkjR,EAAsB3tR,GAAS2oO,mBAAmBxpO,GACtD,GAAIwuR,GAAuBA,EAAoBtqQ,gBAAkB5Y,EAAKyF,QAAQmT,cAAe,CAC3F,IAAIypQ,EAAuB9sR,GAAS4oO,wBAAwBzpO,GAC5D0tR,GAAgB1tR,EAAQsL,EAAMqiR,KAG9Bc,GAAoC,SAAUzuR,EAAQ4sR,EAAcljQ,EAAKG,EAAW7rB,GACtF,IAAIo8D,EAAUyF,EAAa7D,EAAW1wD,EAAMqhB,EAAM4tP,EAC9CzhN,EAAY8zN,GAAgB,IAC5BhhR,EAAM5L,EAAO4L,IAAKmgR,EAAe0B,GAAkB7hR,EAAKie,GAE5D,GADAg2C,EAAcj0D,EAAIoL,UAAU6S,EAAWje,EAAIs8C,UACtC2X,IAAgBstN,GAAcvhR,EAAKi0D,GAAc,CAOpD,GANAA,EAAcA,GAAeksN,EAE3BxR,EADE16M,IAAgB7/D,EAAO0T,WAAas5Q,GAAcntN,GACpCA,EAAY17D,SAAS+f,cAErB27C,EAAY37D,WAAWC,SAAS+f,eAE7C27C,EAAYvW,gBAMf,OALA8Q,EAAWxuD,EAAIiE,OAAOipD,GACtBy1N,GAAoBvuR,EAAQo6D,GAC5ByF,EAAY5vD,YAAYmqD,GACxB1wC,EAAIW,SAAS+vC,EAAU,GACvB1wC,EAAIY,OAAO8vC,EAAU,GACdA,EAET9uD,EAAOue,EACP,MAAOve,EAAKpH,aAAe27D,EACzBv0D,EAAOA,EAAKpH,WAEd,MAAOoH,IAASM,EAAIs8C,QAAQ58C,GAC1B0wD,EAAY1wD,EACZA,EAAOA,EAAK+8C,gBAEd,GAAI2T,GAAah8D,EAAOqhD,OAAO+hK,aAAam3D,EAAezhN,EAAU50C,eAAgB,CACnFk2C,EAAWxuD,EAAIiE,OAAOipD,GACtBy1N,GAAoBvuR,EAAQo6D,GAC5B4B,EAAU93D,WAAW1B,aAAa43D,EAAU4B,GAC5C1wD,EAAO0wD,EACP,MAAO1wD,IAASM,EAAIs8C,QAAQ58C,GAC1BqhB,EAAOrhB,EAAKqgB,YACZyuC,EAASnqD,YAAY3E,GACrBA,EAAOqhB,EAETjD,EAAIW,SAASR,EAAW7rB,GACxB0rB,EAAIY,OAAOT,EAAW7rB,IAG1B,OAAO6rB,GAEL6kQ,GAAuB,SAAU9iR,EAAKihB,GACxC,IAAIm7B,EACJn7B,EAAMo2E,YACNj7C,EAAYn7B,EAAMm7B,UACbA,IAAa,mBAAmBhkD,KAAK4H,EAAIutC,SAAS6O,EAAW,SAAS,KACzEp8C,EAAI7E,IAAI8lB,EAAO,OAGf8hQ,GAAW,SAAU3uR,EAAQ6E,GAC/B,IAAIq1D,EAAQ6xN,EAAcliQ,EAAW7rB,EAAQ6hE,EAAaiB,EACtD1G,EAAUlN,EAAU65L,EAAgB6nC,EAAiB5nC,EAAoB4lC,EAAc9lC,EACvFl7O,EAAM5L,EAAO4L,IACby1C,EAASrhD,EAAOqhD,OAAQi+J,EAAsBj+J,EAAOod,sBACrD/0C,EAAM1pB,EAAOuL,UAAUugB,SACvB6gQ,EAAiB,SAAU1uR,GAC7B,IAAsB4uB,EAAOgiQ,EAAY74C,EAArC1qO,EAAOue,EACPy9M,EAAqBjmL,EAAO4hK,wBAOhC,GALEp2L,EADE5uB,GAA4B,UAApB2wR,GAAmD,OAApBA,EACjChjR,EAAIiE,OAAO5R,GAAQ2uR,GAEnB/sN,EAAY3oB,WAAU,GAEhC8+L,EAAYnpN,GAC8B,IAAtChsB,GAAS+oO,iBAAiB5pO,GAC5B4L,EAAIC,UAAUghB,EAAO,QAAS,MAC9BjhB,EAAIC,UAAUghB,EAAO,QAAS,WAE9B,GACE,GAAIy6M,EAAmBh8N,EAAKnH,UAAW,CACrC,GAAIuyN,GAAYprN,IAASgzN,GAAUniK,eAAe7wD,GAChD,SAEFujR,EAAavjR,EAAK4rC,WAAU,GAC5BtrC,EAAIC,UAAUgjR,EAAY,KAAM,IAC5BhiQ,EAAMy8B,iBACRulO,EAAW5+Q,YAAY4c,EAAMtV,YAC7BsV,EAAM5c,YAAY4+Q,KAElB74C,EAAY64C,EACZhiQ,EAAM5c,YAAY4+Q,YAGdvjR,EAAOA,EAAKpH,aAAeoH,IAASygR,GAIhD,OAFAwC,GAAoBvuR,EAAQ6sB,GAC5BogQ,GAAWj3C,GACJnpN,GAELiiQ,EAA6B,SAAU5mQ,GACzC,IAAIwE,EAAQphB,EAAMrN,EAAM8wR,EAExB,GADAA,EAAmBzB,GAAoBplQ,EAAO2B,EAAW7rB,GACrDyqD,GAAS/9B,OAAOb,KAAe3B,EAAQ6mQ,EAAmB,EAAIA,EAAmBllQ,EAAUyyG,UAAUv5H,QACvG,OAAO,EAET,GAAI8mB,EAAU3lB,aAAe27D,GAAeinL,IAA+B5+N,EACzE,OAAO,EAET,GAAIA,GAASugC,GAASqM,UAAUjrC,IAAcA,IAAcg2C,EAAYtoD,WACtE,OAAO,EAET,GAAI21Q,GAAwBrjQ,EAAW,UAAYqjQ,GAAwBrjQ,EAAW,MACpF,OAAOi9N,IAA+B5+N,IAAU4+N,GAA8B5+N,EAEhFwE,EAAS,IAAI0rL,GAAWvuL,EAAWg2C,GAC/BpX,GAAS/9B,OAAOb,KACd3B,GAA8B,IAArB6mQ,EACXriQ,EAAOwvG,OACGh0G,GAAS6mQ,IAAqBllQ,EAAUyyG,UAAUv5H,QAC5D2pB,EAAOC,QAGX,MAAOrhB,EAAOohB,EAAOuiC,UAAW,CAC9B,GAAIxG,GAASqM,UAAUxpD,IACrB,IAAKA,EAAKkM,aAAa,oBACrBvZ,EAAOqN,EAAKnH,SAAS+f,cACjBo7L,EAAoBrhN,IAAkB,OAATA,GAC/B,OAAO,OAGN,GAAIwqD,GAAS/9B,OAAOpf,KAAU,eAAetH,KAAKsH,EAAKgxH,WAC5D,OAAO,EAELp0G,EACFwE,EAAOwvG,OAEPxvG,EAAOC,OAGX,OAAO,GAELqiQ,EAAsB,WAEtB50N,EADE,wBAAwBp2D,KAAK4qR,IAA2C,WAAvB5nC,EACxC2lC,EAAeC,GAEfD,IAET9rR,GAASgpO,+BAA+B7pO,IAAWmtR,GAAcvhR,EAAKm7O,IAAmBn7O,EAAIk2C,QAAQ+d,GACvGzF,EAAWxuD,EAAI5R,MAAM+sP,EAAgBlnL,GAErCj0D,EAAIygB,YAAY+tC,EAAUyF,GAE5BssN,GAAaP,oBAAoB5rR,EAAQo6D,IAE3CmsL,GAAetjJ,UAAUr3F,EAAK8d,GAAKlb,MAAK,SAAU83O,GAChD58N,EAAIW,SAASi8N,EAAQx8N,eAAgBw8N,EAAQr8N,aAC7CP,EAAIY,OAAOg8N,EAAQt9L,aAAcs9L,EAAQp8N,cAE3CL,EAAYH,EAAII,eAChB9rB,EAAS0rB,EAAIO,YACb2iQ,EAAe/rR,GAAS2oO,mBAAmBxpO,GAC3C8gE,EAAWj8D,EAAIi8D,SACXrY,GAASqM,UAAUjrC,IAAcA,EAAUy/B,kBAC7Cw9L,EAA6B9oP,EAAS6rB,EAAUvS,WAAWvU,OAAS,EACpE8mB,EAAYA,EAAUvS,WAAWhX,KAAKC,IAAIvC,EAAQ6rB,EAAUvS,WAAWvU,OAAS,KAAO8mB,EAErF7rB,EADE8oP,GAA8Br+L,GAAS/9B,OAAOb,GACvCA,EAAUyyG,UAAUv5H,OAEpB,GAGbgpR,EAAe0B,GAAkB7hR,EAAKie,GACjCkiQ,KAGDa,IAAiB9rN,IAAa8rN,GAAgB9rN,KAChDj3C,EAAY4kQ,GAAkCzuR,EAAQ4sR,EAAcljQ,EAAKG,EAAW7rB,IAEtF6hE,EAAcj0D,EAAIoL,UAAU6S,EAAWje,EAAIs8C,SAC3C6+L,EAAiBlnL,EAAcj0D,EAAIoL,UAAU6oD,EAAY37D,WAAY0H,EAAIs8C,SAAW,KACpF0mO,EAAkB/uN,EAAcA,EAAY17D,SAASy4D,cAAgB,GACrEoqL,EAAqBD,EAAiBA,EAAe5iP,SAASy4D,cAAgB,GACnD,OAAvBoqL,GAAgCniP,EAAIy1C,UACtCulB,EAAcknL,EACdA,EAAiBA,EAAe7iP,WAChC0qR,EAAkB5nC,GAEhB,eAAehjP,KAAK4qR,IAClBhjR,EAAIk2C,QAAQ+d,GACdgtN,GAASlqR,OAAO3C,EAAQ2sR,EAAgB5lC,EAAgBlnL,EAAa+sN,GAIrEA,GAAgB/sN,IAAgB7/D,EAAO0T,YAG3Ck5Q,EAAeA,GAAgB,IAC3Br+D,GAAsB1uJ,IACxBzF,EAAWm1J,GAAwB1vJ,GAC/Bj0D,EAAIk2C,QAAQ+d,IACdotN,GAAWptN,GAEb0uN,GAAoBvuR,EAAQo6D,GAC5B+xN,GAAaP,oBAAoB5rR,EAAQo6D,IAChC00N,IACTE,IACSF,GAA2B,IACpC10N,EAAWyF,EAAY37D,WAAW1B,aAAamqR,IAAkB9sN,GACjEssN,GAAaP,oBAAoB5rR,EAAQktR,GAAwBrtN,EAAa,MAAQzF,EAAWyF,KAEjG3F,EAASqzN,GAAmB7jQ,GAAKm/B,aACjCqR,EAAOM,YAAYqF,GACnB3S,EAAWgN,EAAOO,kBAClBqyN,GAAS5/N,GACTsgO,GAAsBtgO,GACtBkN,EAAWlN,EAAS31C,WACpB3L,EAAIygB,YAAY6gC,EAAU2S,GAC1ButN,GAAoCxhR,EAAK0zM,EAAqBllJ,GAC9Ds0N,GAAqB9iR,EAAKi0D,GACtBj0D,EAAIk2C,QAAQ+d,IACdotN,GAAWptN,GAEbzF,EAAS6oC,YACLr3F,EAAIk2C,QAAQsY,IACdxuD,EAAI+I,OAAOylD,GACX40N,MAEAT,GAAoBvuR,EAAQo6D,GAC5B+xN,GAAaP,oBAAoB5rR,EAAQo6D,KAG7CxuD,EAAIC,UAAUuuD,EAAU,KAAM,IAC9Bp6D,EAAO8lC,KAAK,WAAY,CAAEs0B,SAAUA,OAElC60N,GAAc,CAAEtsR,OAAQgsR,IAExBziF,GAAkB,SAAUlsM,EAAQmJ,GACtC,OAAOgjR,GAAa3yD,eAAex5N,GAAQuO,QAAO,SAAUsxD,GAC1D,OAAO12D,EAASpG,OAAS,GAAKwxD,GAAK1H,GAAQN,QAAQsT,GAAc12D,MAChEsT,UAEDyyQ,GAAiB,SAAUlvR,GAC7B,OAAOksM,GAAgBlsM,EAAQa,GAAS6oO,qBAAqB1pO,KAE3DmvR,GAAqB,SAAUnvR,GACjC,OAAOksM,GAAgBlsM,EAAQa,GAAS8oO,qBAAqB3pO,KAE3DovR,GAAmB,CACrBF,eAAgBA,GAChBC,mBAAoBA,IAGlBE,GAAgBzzH,GAAInO,SAAS,CAC/B,CAAEhxE,GAAI,IACN,CAAE5vD,MAAO,IACT,CAAE3Q,KAAM,MAENozQ,GAAuB,SAAUtvR,EAAQ8gE,GAC3C,OAAOsuN,GAAiBD,mBAAmBnvR,IAEzCuvR,GAAW,SAAUC,GACvB,OAAO,SAAUxvR,EAAQ8gE,GACvB,IAAI2uN,EAAiD,KAAxC5uR,GAAS2oO,mBAAmBxpO,GACzC,OAAOyvR,IAAWD,IAGlBE,GAAc,SAAUF,GAC1B,OAAO,SAAUxvR,EAAQ8gE,GACvB,OAAOqrN,GAAaD,sBAAsBlsR,KAAYwvR,IAGtDtpH,GAAU,SAAUptG,EAAW02N,GACjC,OAAO,SAAUxvR,EAAQ8gE,GACvB,IAAIl9B,EAAQuoP,GAAaF,mBAAmBjsR,KAAY84D,EAAU8D,cAClE,OAAOh5B,IAAU4rP,IAGjBG,GAAa,SAAUH,GACzB,OAAOtpH,GAAQ,MAAOspH,IAEpBI,GAAiB,WACnB,OAAO1pH,GAAQ,WAAW,IAExB2pH,GAAqB,SAAUL,GACjC,OAAO,SAAUxvR,EAAQ8gE,GACvB,OAAOjgE,GAAS0oO,iBAAiBvpO,KAAYwvR,IAG7CM,GAAc,SAAU9vR,EAAQ8gE,GAClC,OAAOsuN,GAAiBF,eAAelvR,IAErCo+L,GAAc,SAAUp+L,EAAQ8gE,GAClC,OAAOA,GAELivN,GAA4B,SAAU/vR,GACxC,IAAIu8P,EAAkB17P,GAAS2oO,mBAAmBxpO,GAC9CgwR,EAAe7D,GAAaL,gBAAgB9rR,EAAO4L,IAAK5L,EAAOuL,UAAU4I,YAC7E,OAAO67Q,GAAgBhwR,EAAOqhD,OAAO+hK,aAAa4sE,EAAa7rR,SAAUo4P,GAAoC,MAE3G0zB,GAAU,SAAUC,EAAYjxQ,GAClC,OAAO,SAAUjf,EAAQ8gE,GACvB,IAAIqvN,EAAUjmO,EAAMgmO,GAAY,SAAUl7P,EAAK8N,GAC7C,OAAO9N,GAAO8N,EAAE9iC,EAAQ8gE,MACvB,GACH,OAAOqvN,EAAUryQ,EAAOH,KAAKsB,GAAUnB,EAAO5B,SAG9Ck0Q,GAAc,SAAUpwR,EAAQ6E,GAClC,OAAOwxO,GAAcF,cAAc,CACjC85C,GAAQ,CAACX,IAAuBD,GAAcnzQ,QAC9C+zQ,GAAQ,CAACL,MAAmBP,GAAc5yM,MAC1CwzM,GAAQ,CACNN,IAAW,GACXE,IAAmB,GACnBzxF,IACCixF,GAAc5yM,MACjBwzM,GAAQ,CACNN,IAAW,GACXE,IAAmB,IAClBR,GAAcxiQ,SACjBojQ,GAAQ,CACNN,IAAW,GACXE,IAAmB,GACnBzxF,IACCixF,GAAcxiQ,SACjBojQ,GAAQ,CACNN,IAAW,GACXE,IAAmB,IAClBR,GAAc5yM,MACjBwzM,GAAQ,CACNP,IAAY,GACZtxF,IACCixF,GAAc5yM,MACjBwzM,GAAQ,CAACP,IAAY,IAAQL,GAAcxiQ,SAC3CojQ,GAAQ,CACNV,IAAS,GACTnxF,GACA2xF,IACCV,GAAcxiQ,SACjBojQ,GAAQ,CAACV,IAAS,IAAQF,GAAc5yM,MACxCwzM,GAAQ,CAACH,IAAcT,GAAc5yM,MACrCwzM,GAAQ,CACNV,IAAS,GACTnxF,IACCixF,GAAc5yM,MACjBwzM,GAAQ,CAACF,IAA4BV,GAAcxiQ,UAClD,CACD7sB,EACA6E,EAAIi8D,WACHpkD,MAAM2yQ,GAAcnzQ,SAErBm0Q,GAAgB,CAAE90C,UAAW60C,IAE7BE,GAAW,SAAUtwR,EAAQ6E,GAC/BwrR,GAAc90C,UAAUv7O,EAAQ6E,GAAK2X,MAAK,WACxCmrO,GAAShlP,OAAO3C,EAAQ6E,MACvB,WACDoqR,GAAYtsR,OAAO3C,EAAQ6E,KAC1B0W,IAEDg1Q,GAAgB,CAAE5tR,OAAQ2tR,IAE1BE,GAAiB,SAAU9kR,GACzBA,EAAYwgQ,SACdxgQ,EAAYwgQ,QAAS,EACrBxgQ,EAAY3E,QAGZ0pR,GAAsB,SAAUzwR,EAAQguB,GACtCA,EAAM+7C,uBAGV/7C,EAAM0Y,iBACN8pP,GAAexwR,EAAO0L,aACtB1L,EAAO0L,YAAYC,UAAS,YACa,IAAnC3L,EAAOuL,UAAU0C,eACnBjO,EAAOyW,YAAY,UAErB85Q,GAAc5tR,OAAO3C,EAAQguB,QAG7B0iQ,GAAU,SAAU1wR,GACtBA,EAAOsO,GAAG,WAAW,SAAU0f,GACzBA,EAAMG,UAAYuvO,GAAG32N,OACvB0pP,GAAoBzwR,EAAQguB,OAI9B2iQ,GAAW,CAAEtiR,MAAOqiR,IAEpBE,GAAuB,SAAUtrR,EAAMmzC,GACzC,IAAI5uB,EAAY4uB,EAAI5uB,YAChB7rB,EAASy6C,EAAIz6C,SACjB,OAAIyqD,GAAS/9B,OAAOb,IAClBA,EAAUmD,WAAWhvB,EAAQsH,GACtBwY,EAAOH,KAAK61M,GAAc3pM,EAAW7rB,EAASsH,EAAKvC,UAEnDy3N,GAAuB/hL,GAAK72C,KAAI,SAAUgG,GAC/C,IAAIgjB,EAAWiiC,GAAQJ,SAASnnD,GAMhC,OALImzC,EAAIu2K,UACNzoN,GAAMqB,EAAKgjB,GAEXloB,GAAOkF,EAAKgjB,GAEP4oM,GAAc5oM,EAAShf,MAAOtG,EAAKvC,YAI5C8tR,GAAuBr1Q,EAAMo1Q,GAAsB,KACnDE,GAAwBt1Q,EAAMo1Q,GAAsB,KAEpDG,GAA+B,SAAUr/F,EAAS9uL,EAAMsD,GAC1D,OAAOy2N,GAAYL,eAAe5qC,EAAS9uL,EAAMsD,EAAM2qO,KAErDmgD,GAAkB,SAAUpuR,EAAM61C,GACpC,OAAOxpC,EAAKm/N,GAAQD,eAAethL,GAAQN,QAAQ9T,EAAI5uB,aAAcjnB,GAAOslD,KAE1E+oO,GAA+B,SAAUv/F,EAAS9uL,EAAM61C,GAC1D,OAAOs4O,GAA6Br/F,EAAS9uL,EAAKgJ,MAAO6sC,GAAKn7B,QAAO,SAAUqnN,GAC7E,OAAOqsD,GAAgBpuR,EAAM61C,GAAKj8B,MAAK,WACrC,OAAkD,IAA3Ci9M,GAAckL,EAAQlsL,EAAK71C,EAAKgJ,UACtC,SAAU8iO,GACX,OAAkD,IAA3CjV,GAAckL,EAAQlsL,EAAK71C,EAAKgJ,QAAoBiqM,GAAW64B,EAAW7hL,GAAQN,QAAQo4K,EAAO96M,qBAI1GqnQ,GAAoB,SAAUx/F,EAAS9uL,EAAM61C,GAC/C,OAAOu4O,GAAgBpuR,EAAM61C,GAAKj8B,MAAK,WACrC,OAAOu0Q,GAA6Br/F,EAAS9uL,EAAKgJ,MAAO6sC,GAAKn7B,QAAO,SAAUqnN,GAC7E,OAAkD,IAA3ClL,GAAckL,EAAQlsL,EAAK71C,EAAKgJ,aAExC,SAAU7H,GACX,OAAOgtR,GAA6Br/F,EAAS3tL,EAAO6H,MAAO6sC,GAAKp8B,aAGhE80Q,GAAmB31Q,EAAM01Q,IAAmB,GAC5CE,GAAiB51Q,EAAM01Q,IAAmB,GAC1CG,GAAgB71Q,EAAMy1Q,IAA8B,GACpDK,GAAe91Q,EAAMy1Q,IAA8B,GAEnDt+D,GAAO,IACP4+D,GAAmB,SAAU94O,GAC/B,OAAO+6K,GAAcK,eAAep7K,KAASA,EAAIq2K,cAAgBr2K,EAAIu2K,WAEnEwiE,GAAoB,SAAU5uR,EAAM61C,GACtC,IAAIu3L,EAAezhO,EAAO6/N,GAAQD,eAAethL,GAAQN,QAAQ9T,EAAI5uB,aAAcjnB,GAAOslD,IAC1F,OAAO5kC,GAAK0sN,GAActzN,MAAM9Z,IAE9B6uR,GAAiB,SAAU7uR,EAAM61C,GACnC,OAAI84O,GAAiB94O,GACZm4L,GAAan4L,GAEbm4L,GAAan4L,IAAQkkL,GAAYD,aAAa80D,GAAkB5uR,EAAM61C,GAAK7sC,MAAO6sC,GAAKp7B,OAAOuzN,KAGrG8gD,GAAgB,SAAU9uR,EAAM61C,GAClC,OAAI84O,GAAiB94O,GACZk4L,GAAcl4L,GAEdk4L,GAAcl4L,IAAQkkL,GAAYF,aAAa+0D,GAAkB5uR,EAAM61C,GAAK7sC,MAAO6sC,GAAKp7B,OAAOszN,KAGtGghD,GAAa,SAAUtyR,GACzB,OAAOsU,EAAS,CACd,MACA,YACCtU,IAEDuyR,GAAU,SAAUn5O,GACtB,OAAO+hL,GAAuB/hL,GAAKr7B,MAAK,SAAUxV,GAChD,OAAOqjJ,GAAQrjJ,EAAKktD,OACnBz3C,QAAO,SAAUzV,GAClB,OAAO+pR,GAAWppQ,GAAM3gB,EAAK,oBAG7BiqR,GAAsB,SAAUjvR,EAAM61C,GACxC,OAAOkkL,GAAYD,aAAa95N,EAAKgJ,MAAO6sC,GAAKp8B,UAE/Cy1Q,GAAgB,SAAUlvR,EAAM61C,GAClC,OAAOkkL,GAAYF,aAAa75N,EAAKgJ,MAAO6sC,GAAKp8B,UAE/C01Q,GAAmB,SAAUnvR,EAAM61C,GACrC,OAAOo5O,GAAoBjvR,EAAM61C,IAAQq5O,GAAclvR,EAAM61C,IAAQ04O,GAAiBvuR,EAAM61C,IAAQ24O,GAAexuR,EAAM61C,IAAQy3L,GAAUttO,EAAM61C,IAAQw3L,GAAWrtO,EAAM61C,IAExKu5O,GAAkB,SAAUpvR,EAAM61C,GACpC,OAAIm5O,GAAQn5O,KAGHs5O,GAAiBnvR,EAAM61C,IAAQg5O,GAAe7uR,EAAM61C,IAAQi5O,GAAc9uR,EAAM61C,KAGvFw5O,GAAoB,SAAUrvR,EAAM61C,GACtC,OAAIm5O,GAAQn5O,KAGH04O,GAAiBvuR,EAAM61C,IAAQ44O,GAAczuR,EAAM61C,IAAQy3L,GAAUttO,EAAM61C,IAAQg5O,GAAe7uR,EAAM61C,KAG/G2hL,GAAY,SAAU3hL,GACxB,IAAI5uB,EAAY4uB,EAAI5uB,YAChB7rB,EAASy6C,EAAIz6C,SACjB,OAAIyqD,GAAS/9B,OAAOb,IAAc7rB,EAAS6rB,EAAU9kB,KAAKhC,OACjDywN,GAAc3pM,EAAW7rB,EAAS,GAElCy6C,GAGPy5O,GAAqB,SAAUtvR,EAAM61C,GACvC,IAAI05O,EAAW/3D,GAAU3hL,GACzB,OAAIm5O,GAAQO,KAGHf,GAAexuR,EAAMuvR,IAAab,GAAa1uR,EAAMuvR,IAAaliD,GAAWrtO,EAAMuvR,IAAaT,GAAc9uR,EAAMuvR,KAG3HC,GAAgB,SAAUxvR,EAAM61C,GAClC,OAAOw5O,GAAkBrvR,EAAM61C,IAAQy5O,GAAmBtvR,EAAM61C,IAE9D45O,GAAW,SAAU/sR,EAAMtH,GAC7B,OAAOuyO,GAAOjrO,EAAKs0E,OAAO57E,KAExBs0R,GAAU,SAAU75O,GACtB,IAAI5uB,EAAY4uB,EAAI5uB,YACpB,OAAO4+B,GAAS/9B,OAAOb,IAAcs/H,GAAWt/H,EAAU9kB,KAAM4tN,KAE9D4/D,GAAsB,SAAUjtR,GAClC,IAAIgpB,EAAQhpB,EAAKtL,MAAM,IACvB,OAAO4H,EAAI0sB,GAAO,SAAUC,EAAKlrB,GAC/B,OAAIktO,GAAOhiN,IAAQlrB,EAAI,GAAKA,EAAIirB,EAAMvrB,OAAS,GAAK0tO,GAAYniN,EAAMjrB,EAAI,KAAOotO,GAAYniN,EAAMjrB,EAAI,IAC9F,IAEAkrB,KAERtnB,KAAK,KAENurR,GAAuB,SAAU5vR,EAAM0I,GACzC,IAAIhG,EAAOgG,EAAKvG,KACZ4mO,EAAWnY,GAAcloN,EAAM,GACnC,SAAI+mR,GAAS/sR,EAAM,IAAO8sR,GAAcxvR,EAAM+oO,MAC5CrgO,EAAKvG,KAAO,IAAMO,EAAKc,MAAM,IACtB,IAKPqsR,GAAkC,SAAUnnR,GAC9C,IAAIhG,EAAOgG,EAAKvG,KACZ2tR,EAAUH,GAAoBjtR,GAClC,OAAIotR,IAAYptR,IACdgG,EAAKvG,KAAO2tR,GACL,IAKPC,GAAqB,SAAU/vR,EAAM0I,GACvC,IAAIhG,EAAOgG,EAAKvG,KACZ6mO,EAAUpY,GAAcloN,EAAMhG,EAAKvC,OAAS,GAChD,SAAIsvR,GAAS/sR,EAAMA,EAAKvC,OAAS,IAAOqvR,GAAcxvR,EAAMgpO,MAC1DtgO,EAAKvG,KAAOO,EAAKc,MAAM,GAAI,GAAK,KACzB,IAKPwsR,GAAiB,SAAUhwR,EAAM61C,GACnC,OAAO36B,EAAOH,KAAK86B,GAAKlqC,OAAO+jR,IAASl1Q,MAAK,SAAUq7B,GACrD,IAAI5uB,EAAY4uB,EAAI5uB,YAChBk3B,EAAayxO,GAAqB5vR,EAAMinB,IAAc4oQ,GAAgC5oQ,IAAc8oQ,GAAmB/vR,EAAMinB,GACjI,OAAOk3B,EAAajjC,EAAOH,KAAK86B,GAAO36B,EAAO5B,WAG9C22Q,GAAyB,SAAU7yR,GACrC,IAAI4C,EAAOiqD,GAAQN,QAAQvsD,EAAO0T,WAC9B1T,EAAOuL,UAAU0C,eACnB2kR,GAAehwR,EAAM4wN,GAAcG,eAAe3zN,EAAOuL,UAAUugB,WAAWtd,MAAK,SAAUiqC,GAC3Fz4C,EAAOuL,UAAUwf,OAAO0tB,EAAIg7K,eAK9Bq/D,GAA0B,SAAUlwR,GACtC,OAAO,SAAUsiD,GACf,OAAOA,EAAS1oC,MAAK,SAAU5Y,GAC7B,OAAO+4N,GAAYD,aAAa95N,EAAKgJ,MAAOooN,GAAgBtxN,OAAOkB,OAClE,SAAUA,GACX,OAAO+4N,GAAYC,gBAAgBh5N,MAClC,SAAUA,GACX,OAAO+4N,GAAYE,eAAej5N,MACjC,SAAUA,GACX,OAAO+4N,GAAYF,aAAa75N,EAAKgJ,MAAOooN,GAAgBztN,MAAM3C,SAIpEmvR,GAAkC,SAAUnwR,EAAM61C,GACpD,OAAO,SAAUu6O,GACf,OAAOhB,GAAgBpvR,EAAMowR,GAAYnC,GAAqBp4O,GAAOq4O,GAAsBr4O,KAG3Fw6O,GAAiB,SAAUjzR,GAC7B,OAAO,SAAUy4C,GAGf,OAFAz4C,EAAOuL,UAAUwf,OAAO0tB,EAAIg7K,WAC5BzzN,EAAOyU,eACA,IAGPy+Q,GAA+B,SAAUlzR,GAC3C,IAAIy4C,EAAMu7K,GAAgBL,eAAe3zN,EAAOuL,UAAUugB,UACtDlpB,EAAOiqD,GAAQN,QAAQvsD,EAAO0T,WAClC,GAAI1T,EAAOuL,UAAU0C,cAAe,CAClC,IAAIy8N,EAAiBlvN,EAAM4vN,GAAYV,eAAgB1qO,GACnDozN,EAAgBY,GAAgBL,eAAe3zN,EAAOuL,UAAUugB,UACpE,OAAO8rN,GAAiBf,aAAanM,EAAgB1qO,EAAO0T,UAAW0/M,GAAeh2M,KAAK01Q,GAAwBlwR,IAAOwa,KAAK21Q,GAAgCnwR,EAAM61C,IAAMp7B,OAAO41Q,GAAejzR,IAEjM,OAAO,GAIPmzR,GAA2B,SAAUnzR,EAAQ6E,GAC/CsmR,GAAU7uG,QAAQ,CAAC,CACfnuJ,QAASuvO,GAAG12N,SACZ/nB,OAAQksQ,GAAUlsQ,OAAOi0Q,GAA8BlzR,KACrD6E,GAAK2J,MAAK,SAAUnN,GACxBwD,EAAI6hC,qBAGJ0sP,GAAU,SAAUpzR,GACtBA,EAAOsO,GAAG,WAAW,SAAUzJ,IACI,IAA7BA,EAAIklE,sBACNopN,GAAyBnzR,EAAQ6E,OAInCwuR,GAAW,CAAEhlR,MAAO+kR,IAEpBE,GAA0B,SAAUtzR,GACtC,OAAOmrJ,GAAWt+F,GAAQN,QAAQvsD,EAAO0T,WAAY,qBAAqB8I,KAAK/R,EAAS,OAAO,SAAU7C,GACvG,OAAOA,EAAIgE,UAGX2nR,GAAsB,SAAUvzR,GAClCA,EAAOuL,UAAUwf,OAAO/qB,EAAOuL,UAAUugB,WAEvC28M,GAA0B,SAAUzoO,EAAQ8kQ,GAC1CA,EAAoB9lN,aAAa,oBACnCuwK,GAAwBu1C,GACxByuB,GAAoBvzR,GACpBA,EAAOuL,UAAUo9E,eAAem8K,KAGhC0uB,GAAuB,SAAUxzR,EAAQ8N,GAC3C,IAAIg3P,EAAsBwuB,GAAwBtzR,GAClD,GAAK8kQ,EAGL,MAAe,qBAAXh3P,EAAErM,MACJqM,EAAE44B,iBACF54B,EAAE24B,uBACFgiM,GAAwBzoO,EAAQ8kQ,SAG9Bv7O,GAAWu7O,KACbr8B,GAAwBzoO,EAAQ8kQ,GAChC9kQ,EAAO0L,YAAY3E,SAGnB0sR,GAAU,SAAUzzR,GACtBA,EAAOsO,GAAG,yBAA0BkN,EAAMg4Q,GAAsBxzR,KAE9D0zR,GAAsB,CAAErlR,MAAOolR,IAE/BE,GAAY9gO,GAAoBvE,SAAS0C,QACzC4iO,GAAe,SAAU5zR,GAC3B,IAAI6zR,EAAmBj3L,IAAM,WACtB58F,EAAO+4O,WACV85C,GAAuB7yR,KAExB,GACC2zR,GAAUpkO,SACZvvD,EAAOsO,GAAG,YAAY,SAAUR,GAC9B+lR,EAAiBptG,cAEnBzmL,EAAOsO,GAAG,UAAU,SAAUR,GAC5B+lR,EAAiB7mP,cAInB8mP,GAAU,SAAU9zR,GACtB4zR,GAAa5zR,GACbA,EAAOsO,GAAG,SAAS,SAAUR,IACL,IAAlBA,EAAE4yG,aACJmyK,GAAuB7yR,OAKzB+zR,GAA2B,SAAU/zR,EAAQ6E,GAC/CsmR,GAAU7uG,QAAQ,CAChB,CACEnuJ,QAASuvO,GAAGj5B,IACZxlN,OAAQ+oQ,GAAmBhoR,GAAQ,IAErC,CACEmuB,QAASuvO,GAAGC,KACZ1+O,OAAQ+oQ,GAAmBhoR,GAAQ,KAEpC6E,GAAK2J,MAAK,SAAUnN,GACrBwD,EAAI6hC,qBAGJstP,GAAU,SAAUh0R,GACtBA,EAAOsO,GAAG,WAAW,SAAUzJ,IACI,IAA7BA,EAAIklE,sBACNgqN,GAAyB/zR,EAAQ6E,OAInCovR,GAAc,CAAE5lR,MAAO2lR,IAEvBE,GAAU,SAAUl0R,GACtB,IAAI62L,EAAQyiD,GAAkBH,mBAAmBn5O,GACjD0zR,GAAoBrlR,MAAMrO,GAC1BsrR,GAAUj9Q,MAAMrO,EAAQ62L,GACxB60F,GAAoBr9Q,MAAMrO,EAAQ62L,GAClC85F,GAAStiR,MAAMrO,GACfqzR,GAAShlR,MAAMrO,GACf8zR,GAAQ9zR,GACRi0R,GAAY5lR,MAAMrO,IAEhBm0R,GAAoB,CAAE9lR,MAAO6lR,IAEjC,SAASv7M,GAAQ34E,GACf,IAAIwO,EAAO5O,GAAM4O,KACb4xD,EAAYs9L,GAAGt9L,UAAWC,EAASq9L,GAAGr9L,OAAQz0D,EAAM5L,EAAO4L,IAAKL,EAAYvL,EAAOuL,UAAWtL,EAAWD,EAAOC,SAAU2mD,EAAS5mD,EAAO4mD,OAC1IwtO,EAAUzxF,GAAI/tH,MAAOrlB,EAAOozI,GAAI3wK,GAAIqiQ,EAAW1xF,GAAI9uH,OACnD1C,EAAuB,0BACvBmjN,EAAsB/kO,EAAO,OAAS,MACtCy8L,EAAwB,SAAU37O,EAAKuzB,GACzC,IACE5jC,EAAOmP,SAASsH,YAAYpG,GAAK,EAAOuzB,GACxC,MAAO/O,MAGPk1C,EAAqB,SAAUj8D,GACjC,OAAOA,EAAEi8D,sBAEPwqN,EAAwB,SAAUzmR,GACpC,IAAI0mR,EAAeC,EACf3mR,EAAEojE,eACAlxE,EAAOuL,UAAU0C,eAAsC,QAArBH,EAAE6C,OAAOI,SAC7CxF,EAAUO,OAAOgC,EAAE6C,QAErB6jR,EAAgBx0R,EAAOuL,UAAUgmB,aAC7BijQ,EAAczxR,OAAS,IACzB0xR,EAAkBtjN,EAAuBjrD,OAAOlmB,EAAOsC,IAAM,IAAM4jB,OAAOsuQ,GAC1E1mR,EAAEojE,aAAayE,QAAQ2+M,EAAqBG,MAI9CC,EAAwB,SAAU5mR,GACpC,IAAI2mR,EACJ,OAAI3mR,EAAEojE,eACJujN,EAAkB3mR,EAAEojE,aAAaE,QAAQkjN,GACrCG,GAAmBA,EAAgB5sR,QAAQspE,IAAyB,IACtEsjN,EAAkBA,EAAgBnrQ,OAAO6nD,EAAqBpuE,QAAQ/I,MAAM,KACrE,CACLsI,GAAI8jB,SAASquQ,EAAgB,IAC7B7rR,KAAMwd,SAASquQ,EAAgB,MAI9B,MAELE,EAA0B,SAAUjzR,EAAS0hE,GAC3CpjE,EAAO6pP,sBAAsB,6BAC/B7pP,EAAOyW,YAAY,6BAA6B,EAAO,CACrD/U,QAASA,EACT0hE,SAAUA,IAGZpjE,EAAOyW,YAAY,oBAAoB,EAAO/U,IAG9CkzR,EAA0B,WAC5B,IAAIC,EAAe,SAAUnrQ,GAC3B,IAAIrc,EAAOzB,EAAIiE,OAAO,QAClBqnK,EAAWxtJ,EAAIo6M,gBAEnB,OADAz2N,EAAK4C,YAAYinK,GACV3rK,EAAUu7C,WAAWphC,UAAUrY,EAAM,CAAE4G,OAAQ,UAEpD6gR,EAAsB,SAAUprQ,GAClC,IAAIne,EAAYspR,EAAanrQ,GACzBqrQ,EAASnpR,EAAIkf,YACjBiqQ,EAAO5mG,WAAWnuL,EAAO0T,WACzB,IAAIshR,EAAeH,EAAaE,GAChC,OAAOxpR,IAAcypR,GAEvBh1R,EAAOsO,GAAG,WAAW,SAAUR,GAC7B,IACIG,EAAaZ,EADb8gB,EAAUrgB,EAAEqgB,QAEhB,IAAK47C,EAAmBj8D,KAAOqgB,IAAYkyC,GAAUlyC,IAAYiyC,GAAY,CAG3E,GAFAnyD,EAAcjO,EAAOuL,UAAU0C,cAC/BZ,EAAOrN,EAAO0T,UACVzF,IAAgBrC,EAAIk2C,QAAQz0C,GAC9B,OAEF,IAAKY,IAAgB6mR,EAAoB90R,EAAOuL,UAAUugB,UACxD,OAEFhe,EAAE44B,iBACF1mC,EAAOyhD,WAAW,IACdp0C,EAAKkK,YAAc3L,EAAIs8C,QAAQ76C,EAAKkK,YACtCvX,EAAOuL,UAAUmgB,kBAAkBre,EAAKkK,WAAY,GAEpDvX,EAAOuL,UAAUmgB,kBAAkBre,EAAM,GAE3CrN,EAAOyU,mBAITwgR,EAAY,WACdj1R,EAAO+e,UAAUhY,IAAI,SAAU,KAAM,cAEnCmuR,EAAmB,WAChBl1R,EAAOC,SAASwwP,kBACnB7kP,EAAIwR,KAAKpd,EAAOmP,SAAU,qBAAqB,SAAUrB,GACvD,IAAI4b,EACJ,GAAI5b,EAAE6C,SAAW3Q,EAAOmP,SAASszE,gBAG/B,GAFA/4D,EAAMne,EAAUugB,SAChB9rB,EAAO0T,UAAUc,QACF,cAAX1G,EAAErM,KAAsB,CAC1B,GAAIgtN,GAAiB/kM,EAAII,gBACvB,OAEFve,EAAUy3P,aAAal1P,EAAEkrC,QAASlrC,EAAEmrC,cAEpC1tC,EAAUwf,OAAOrB,OAMvByrQ,EAAsB,WACxBn1R,EAAOsO,GAAG,WAAW,SAAUR,GAC7B,IAAKi8D,EAAmBj8D,IAAMA,EAAEqgB,UAAYiyC,EAAW,CACrD,IAAKpgE,EAAO0T,UAAU1D,qBAAqB,MAAMjN,OAC/C,OAEF,GAAIwI,EAAU0C,eAAoD,IAAnC1C,EAAUugB,SAAS7B,YAAmB,CACnE,IAAI3e,EAAOC,EAAUC,UACjB68C,EAAkB/8C,EAAK+8C,gBAC3B,GAAsB,OAAlB/8C,EAAKnH,SAGP,OAFAyH,EAAI+I,OAAOrJ,QACXwC,EAAE44B,iBAGA2hB,GAAmBA,EAAgBlkD,UAAuD,OAA3CkkD,EAAgBlkD,SAAS+f,gBAC1EtY,EAAI+I,OAAO0zC,GACXv6C,EAAE44B,wBAMRmsN,EAAY,WACT3zP,EAAW+pD,MAAMjnD,UAAU+qL,gBAC9B/sL,EAAOsO,GAAG,aAAa,SAAUR,GAC/B,IAAKi8D,EAAmBj8D,IAA4B,SAAtBA,EAAE6C,OAAOxM,SAAqB,CAC1D,IAAI6tL,EAAShyL,EAAO0T,UACpBs+K,EAAOhzE,OACP4kF,GAAM/0K,iBAAiB7uB,GAAQ,WAC7BgyL,EAAOx9K,gBAMb4gR,EAAwB,WAC1Bp1R,EAAOsO,GAAG,SAAS,SAAUR,GAC3B,IAAI6C,EAAS7C,EAAE6C,OACX,aAAa3M,KAAK2M,EAAOxM,WAAsD,UAAzCyH,EAAI29M,yBAAyB54M,KACrE7C,EAAE44B,iBACF1mC,EAAOuL,UAAUO,OAAO6E,GACxB3Q,EAAOyU,eAEe,MAApB9D,EAAOxM,UAAoByH,EAAIoG,SAASrB,EAAQ,qBAClD7C,EAAE44B,iBACFn7B,EAAUO,OAAO6E,QAInB0kR,EAA8C,WAChD,IAAIC,EAA4B,WAC9B,IAAI79O,EAAW7rC,EAAI+6M,WAAWp7M,EAAU4I,WAAW+iC,WAAU,IAC7D,OAAO,WACL,IAAIvmC,EAASpF,EAAU4I,WACnBxD,IAAW3Q,EAAO0T,YACpB9H,EAAIC,UAAU8E,EAAQ,QAAS,MAC/BnC,EAAKipC,GAAU,SAAU9oC,GACvBgC,EAAO4kR,iBAAiB5mR,EAAKuoC,WAAU,UAK3Cs+O,EAA4B,WAC9B,OAAQjqR,EAAU0C,eAAiBrC,EAAIoL,UAAUzL,EAAU4I,WAAYvI,EAAIs8C,WAAat8C,EAAIoL,UAAUzL,EAAUykJ,SAAUpkJ,EAAIs8C,UAEhIloD,EAAOsO,GAAG,YAAY,SAAUR,GAC9B,IAAI4/Q,EACJ,IAAK3jN,EAAmBj8D,KAAqB,IAAdA,EAAEqgB,SAA+B,KAAdrgB,EAAEqgB,UAAmBqnQ,IAKrE,OAJA9H,EAAkB4H,IAClBt1R,EAAOmP,SAASsH,YAAY,UAAU,EAAO,MAC7Ci3Q,IACA5/Q,EAAE44B,kBACK,KAGX96B,EAAIwR,KAAKpd,EAAOmP,SAAU,OAAO,SAAUrB,GACzC,IAAI4/Q,GACC3jN,EAAmBj8D,IAAM0nR,MAC5B9H,EAAkB4H,IAClB1xF,GAAM/0K,iBAAiB7uB,GAAQ,WAC7B0tR,YAKJ+H,EAA6B,WAC/Bz1R,EAAOsO,GAAG,WAAW,SAAUR,GAC7B,IAAKi8D,EAAmBj8D,IAAMA,EAAEqgB,UAAYiyC,GACtC70D,EAAU0C,eAAoD,IAAnC1C,EAAUugB,SAAS7B,YAAmB,CACnE,IAAIo+B,EAAkB98C,EAAUC,UAAU68C,gBAC1C,GAAIA,GAAmBA,EAAgBlkD,UAAuD,UAA3CkkD,EAAgBlkD,SAAS+f,cAE1E,OADApW,EAAE44B,kBACK,OAMbgvP,EAA8B,WAChC11R,EAAOsO,GAAG,WAAW,SAAUR,GAC7B,IAAI4b,EAAKG,EAAW7rB,EAAQ4E,EAAMmB,EAClC,IAAIgmE,EAAmBj8D,IAAMA,EAAEqgB,UAAYuvO,GAAGt9L,YAG9C12C,EAAMne,EAAUugB,SAChBjC,EAAYH,EAAII,eAChB9rB,EAAS0rB,EAAIO,YACbrnB,EAAOgJ,EAAI06C,UACXviD,EAAS8lB,EACJH,EAAIE,WAAwB,IAAX5rB,GAAtB,CAGA,MAAO+F,GAAUA,EAAOG,YAAcH,EAAOG,WAAWqT,aAAexT,GAAUA,EAAOG,aAAetB,EACrGmB,EAASA,EAAOG,WAEK,eAAnBH,EAAOgN,UACT/Q,EAAOkO,UAAUC,OAAO,aAAc,KAAMpK,GAC5C2lB,EAAM9d,EAAIkf,YACVpB,EAAIW,SAASR,EAAW,GACxBH,EAAIY,OAAOT,EAAW,GACtBte,EAAUwf,OAAOrB,SAInBisQ,EAAyB,WAC3B,IAAIC,EAAU,WACZ5pC,EAAsB,gBAAgB,GACtCA,EAAsB,4BAA4B,GAC7C/rP,EAASivP,iBACZlD,EAAsB,wBAAwB,IAG7C/rP,EAASuT,UACZxT,EAAOsO,GAAG,8BAA+BsnR,IAGzCC,EAAsB,WACxB,IAAIC,EAAW,WACbtnR,EAAK5C,EAAIE,OAAO,MAAM,SAAUR,GAC9B,IAAIpH,EAAaoH,EAAKpH,WAClBtB,EAAOgJ,EAAI06C,UACf,GAAIpiD,EAAW8jD,YAAc18C,EAAM,CACjC,MAAOpH,IAAe0H,EAAIs8C,QAAQhkD,GAAa,CAC7C,GAAIA,EAAWA,WAAW8jD,YAAc9jD,GAAcA,IAAetB,EACnE,OAEFsB,EAAaA,EAAWA,WAE1B0H,EAAI7E,IAAI7C,EAAY,KAAM,CAAE,iBAAkB,SAIpDlE,EAAOsO,GAAG,0BAA0B,SAAUR,GAC7B,eAAXA,EAAErM,MAAuC,kBAAdqM,EAAE0yD,SAC/Bs1N,QAIFC,EAAsB,WACpB91R,EAASi5D,mBACXl5D,EAAOsO,GAAG,QAAQ,WAChB09O,EAAsB,4BAA6B/rP,EAASi5D,uBAI9D05L,EAAqB,WACvB5yP,EAAOsO,GAAG,yBAAyB,SAAUR,GACtC4vP,GAAGtvO,gBAAgBtgB,IACtBvC,EAAU03F,eAEX,IAED+yL,EAAsB,WACxBh2R,EAAO4lQ,cAAcn/P,KAAK,oFAExBwvR,EAAwB,WACrBj2R,EAAO4P,QACV5P,EAAOsO,GAAG,WAAW,WACfpP,EAAWwE,SAASg6K,gBAAkBx+K,EAAWwE,SAAS2J,MAC5DrN,EAAOqsL,SAAS73K,YAKpB0hR,EAAa,WACVl2R,EAAO4P,SACV5P,EAAO4lQ,cAAcn/P,KAAK,4BAC1BzG,EAAOsO,GAAG,SAAS,SAAUR,GAC3B,IAAI4b,EACJ,GAA0B,SAAtB5b,EAAE6C,OAAOxM,SAAqB,CAChC,GAAIw+L,GAAI3wK,GAAK,GAEX,YADAhyB,EAAO0T,UAAUc,QAGnBkV,EAAM1pB,EAAOuL,UAAUugB,SACvB9rB,EAAO0T,UAAUc,QACjBxU,EAAOuL,UAAUwf,OAAOrB,GACxB1pB,EAAOuL,UAAU03F,YACjBjjG,EAAOyU,oBAKX0hR,EAA0B,WACxBxzF,GAAI9jL,KACN7e,EAAOsO,GAAG,WAAW,SAAUR,IACzB4vP,GAAG78L,eAAe/yD,IAAOA,EAAEgzD,UAA2B,KAAdhzD,EAAEqgB,SAAgC,KAAdrgB,EAAEqgB,UAChErgB,EAAE44B,iBACF1mC,EAAOuL,UAAUysO,SAASC,OAAO,OAAsB,KAAdnqO,EAAEqgB,QAAiB,WAAa,UAAW,qBAKxFioQ,EAAuB,WACzBpqC,EAAsB,iBAAiB,IAErCqqC,EAAoB,WACtBr2R,EAAOsO,GAAG,SAAS,SAAUR,GAC3B,IAAIlG,EAAMkG,EAAE6C,OACZ,GACE,GAAoB,MAAhB/I,EAAImJ,QAEN,YADAjD,EAAE44B,uBAGG9+B,EAAMA,EAAI1D,eAErBlE,EAAO4lQ,cAAcn/P,KAAK,oDAExB6vR,EAA8B,WAChCt2R,EAAOsO,GAAG,QAAQ,WAChBtO,EAAO4L,IAAIwR,KAAKpd,EAAO0T,UAAW,UAAU,SAAU5F,GACpDA,EAAE44B,wBAIJ6vP,EAA4B,WAC9B3vO,EAAOC,cAAc,MAAM,SAAUh0C,GACnC,IAAIxP,EAAIwP,EAAM9P,OACd,MAAOM,IAC0B,8BAA3BwP,EAAMxP,GAAGsL,KAAK,UAChBkE,EAAMxP,GAAGsR,aAKb6hR,EAAwB,WAC1Bx2R,EAAOsO,GAAG,aAAa,SAAUR,GAC/BymR,EAAsBzmR,MAExB9N,EAAOsO,GAAG,QAAQ,SAAUR,GAC1B,IAAKi8D,EAAmBj8D,GAAI,CAC1B,IAAI2mR,EAAkBC,EAAsB5mR,GAC5C,GAAI2mR,GAAmBA,EAAgBnyR,KAAOtC,EAAOsC,GAAI,CACvDwL,EAAE44B,iBACF,IAAIhd,EAAM41P,GAAoB5yN,UAAU5+C,EAAE+H,EAAG/H,EAAE9R,EAAGgE,EAAOmP,UACzD5D,EAAUwf,OAAOrB,GACjBirQ,EAAwBF,EAAgB7rR,MAAM,SAKlD0qP,EAAyB,aAEzBhrC,EAAW,WACb,IAAIrxK,EACJ,OAAKm9O,GAAWp0R,EAAO6jC,QACd,GAEToT,EAAMj3C,EAAOuL,UAAUysO,UACf/gM,IAAQA,EAAI45I,YAAiC,IAAnB55I,EAAI45I,aAyCxC,OAvCA6kG,IACAd,IACKjyF,GAAId,cACP+wD,IAEEyhC,IACFa,IACAE,IACAW,IACAO,IACAb,IACAc,IACI5zF,GAAIjtH,KACNugN,IACAC,IACAG,KAEApB,KAGAtyF,GAAI3wK,IAAM,KACZkkQ,IACAT,KAEE9yF,GAAI3wK,KACNijQ,IACAmB,IACAI,KAEEpC,IACFe,IACAtiC,IACAwiC,IACAM,IACAE,IACAG,IACAG,IACAV,KAEK,CACLniC,uBAAwBA,EACxBhrC,SAAUA,GAId,IAAImuE,GAAkB,SAAUnrR,GAC9B,OAAOm9C,GAASqM,UAAUxpD,IAAS28C,GAAY4E,GAAQN,QAAQjhD,KAE7DorR,GAAuB,SAAU12R,GACnC,IAAI0pB,EAAM1pB,EAAOuL,UAAUugB,SACvBrF,EAAW+sM,GAAcG,eAAejqM,GACxChD,EAAS8sM,GAAcI,aAAalqM,GACxC,GAAI8pM,GAAcM,kBAAkBrtM,GAAW,CAC7C,IAAIoD,EAAYpD,EAASoD,YACrB4sQ,GAAgB5sQ,IAClB8yM,GAAYC,gBAAgB/yM,GAAWrb,MAAK,SAAUiqC,GACpD,OAAO/uB,EAAIW,SAASouB,EAAI5uB,YAAa4uB,EAAIz6C,aAI/C,GAAIw1N,GAAcM,kBAAkBptM,GAAS,CACvCmD,EAAYpD,EAASoD,YACrB4sQ,GAAgB5sQ,IAClB8yM,GAAYE,eAAehzM,GAAWrb,MAAK,SAAUiqC,GACnD,OAAO/uB,EAAIY,OAAOmuB,EAAI5uB,YAAa4uB,EAAIz6C,aAI7CgC,EAAOuL,UAAUwf,OAAO67M,GAAgB3jI,UAAUv5E,KAEhDitQ,GAAU,SAAU32R,GACtBA,EAAOsO,GAAG,SAAS,SAAUR,GACvBA,EAAE0tD,QAAU,GACdk7N,GAAqB12R,OAKvB42R,GAAuB,SAAU52R,GACnCA,EAAOsO,GAAG,SAAS,SAAUR,GACvB9N,EAAO4L,IAAIoL,UAAUlJ,EAAE6C,OAAQ,YACjC7C,EAAE44B,qBAIJmwP,GAAgB,SAAU72R,GAC5BA,EAAO4mD,OAAOC,cAAc,WAAW,SAAUoE,GAC/Cz8C,EAAKy8C,GAAM,SAAU2iG,GACnBA,EAAQj/I,KAAK,gBAAiBi/I,EAAQj/I,KAAK,SAC3Ci/I,EAAQj/I,KAAK,OAAQ,cAGzB3O,EAAO8mD,WAAWD,cAAc,WAAW,SAAUoE,GACnDz8C,EAAKy8C,GAAM,SAAU2iG,GACnB,IAAIjhJ,EAAOihJ,EAAQj/I,KAAK,iBACxBi/I,EAAQj/I,KAAK,OAAQg7C,EAASh9C,GAAQA,EAAO,MAC7CihJ,EAAQj/I,KAAK,gBAAiB,aAIhCmoR,GAAU,SAAU92R,GACtB42R,GAAqB52R,GACrB62R,GAAc72R,IAGZk+D,GAAQurJ,GAAWjpN,IACnBu2R,GAAc,SAAU/2R,EAAQsF,GAClC,IAAIge,EAAOupC,GAAQN,QAAQvsD,EAAOmP,SAASmU,MACvCpc,EAAM2lD,GAAQL,QAAQ,SAC1BjtD,GAAI2H,EAAK,OAAQ,YACjB4H,GAAO5H,EAAK2lD,GAAQJ,SAASnnD,IAC7BwJ,GAAOwU,EAAMpc,IAEX8vR,GAAe,SAAUh3R,GAC3B,IAAI4mD,EAAS0yN,GAAUt5Q,EAAOC,SAAUD,EAAOqhD,QA0D/C,OAzDAuF,EAAOuiB,mBAAmB,2BAA2B,SAAUt2D,EAAO5U,GACpE,IAAsBqN,EAElBjM,EAAOi3Q,EAFPjzQ,EAAIwP,EAAM9P,OACV6I,EAAM5L,EAAO4L,IAEjB,MAAOvI,IAIL,GAHAiI,EAAOuH,EAAMxP,GACbhE,EAAQiM,EAAKqD,KAAK1Q,GAClBq4Q,EAAe,YAAcr4Q,GACxBqN,EAAKlE,WAAWxF,IAAI00Q,GAAe,CACtC,GAA+B,IAA3Bj3Q,EAAMwI,QAAQ,UAA6C,IAA3BxI,EAAMwI,QAAQ,SAChD,SAEW,UAAT5J,GACFoB,EAAQuM,EAAIy2C,eAAez2C,EAAIw2C,WAAW/iD,GAAQiM,EAAKrN,MAClDoB,EAAM0D,SACT1D,EAAQ,MAEViM,EAAKqD,KAAK2nQ,EAAcj3Q,GACxBiM,EAAKqD,KAAK1Q,EAAMoB,IACE,aAATpB,GACTqN,EAAKqD,KAAK2nQ,EAAcj3Q,GACxBiM,EAAKqD,KAAK1Q,EAAM,OAEhBqN,EAAKqD,KAAK2nQ,EAAct2Q,EAAO4jD,WAAWvkD,EAAOpB,EAAMqN,EAAKrN,WAKpE2oD,EAAOC,cAAc,UAAU,SAAUh0C,GACvC,IAAsBvH,EAAM7J,EAAxB4B,EAAIwP,EAAM9P,OACd,MAAOM,IACLiI,EAAOuH,EAAMxP,GACb5B,EAAO6J,EAAKqD,KAAK,SAAW,UACC,IAAzBlN,EAAKoG,QAAQ,SACfyD,EAAKqD,KAAK,OAAQ,OAASlN,MAIjCmlD,EAAOC,cAAc,UAAU,SAAUh0C,GACvC,IAAsBvH,EAAlBjI,EAAIwP,EAAM9P,OACd,MAAOM,IACLiI,EAAOuH,EAAMxP,GACbiI,EAAK7J,KAAO,EACZ6J,EAAKrN,KAAO,WACZqN,EAAKjM,MAAQ,UAAYiM,EAAKjM,MAAQ,QAG1CunD,EAAOC,cAAc,2BAA2B,SAAUh0C,GACxD,IAAsBvH,EAAlBjI,EAAIwP,EAAM9P,OACVggO,EAAmB/iO,EAAOqhD,OAAOod,sBACrC,MAAOp7D,IACLiI,EAAOuH,EAAMxP,GACTiI,EAAKw2C,QAAQihL,IAAkD,IAA7Bz3N,EAAK0Y,OAAO,MAAMjhB,SACtDuI,EAAKwD,OAAO,IAAI6oQ,GAAO,KAAM,IAAI5yP,YAAa,MAI7C6hC,GAELqwO,GAAY,SAAUj3R,GACpBA,EAAOC,SAASi3R,YAClBtzF,GAAM/0K,iBAAiB7uB,GAAQ,WAC7B,IAAIqzP,EAEFA,GADiC,IAA/BrzP,EAAOC,SAASi3R,WACJl3R,EAEAA,EAAOktP,cAAc5tP,IAAIU,EAAOC,SAASi3R,YAEpD7jC,EAAY8jC,WACf9jC,EAAY7+O,UAEb,MAGH4iR,GAAa,SAAUp3R,GACzBA,EAAOstP,4BACPttP,EAAOssP,aAAc,EACrBtsP,EAAO8lC,KAAK,QACZ9lC,EAAOwU,OAAM,GACbxU,EAAOyU,YAAY,CAAErV,SAAS,IAC9BY,EAAOm6E,aAAa,yBAA0Bn6E,GAC9Ci3R,GAAUj3R,IAERq3R,GAAsB,SAAUr3R,GAClC,OAAOA,EAAO4P,OAASsuD,GAAMmoJ,iBAAmBrmN,EAAO4L,IAAIy6M,kBAEzDixE,GAAkB,SAAUt3R,EAAQu3R,GACtC,IAE2BlqR,EAAMmqR,EAF7Bv3R,EAAWD,EAAOC,SAClB8+D,EAAY/+D,EAAO42O,aACnBxqN,EAAMpsB,EAAOmP,SACZlP,EAAS2P,SACZ5P,EAAO42O,aAAaptO,MAAMqzC,WAAa78C,EAAOy3R,eAE3CF,GAAct3R,EAASwwP,mBAC1BrkO,EAAIzf,OACJyf,EAAI0F,MAAM9xB,EAAO03R,YACjBtrQ,EAAI1kB,SAEFzH,EAASwwP,mBACXzwP,EAAOsO,GAAG,UAAU,WAClB,IAAIqpR,EAASh+R,KAAK+Z,UAClBwqD,GAAMgsD,YAAYytK,EAAQ,oBAC1Bz5N,GAAMgsD,YAAYytK,EAAQ,kBAC1Bz5N,GAAMryD,UAAU8rR,EAAQ,kBAAmB,SAE7Cz5N,GAAMqsD,SAASxrD,EAAW,oBAC1B/+D,EAAOs5D,gBAAkBltC,EAAMnsB,EAAS23R,kBAAoB14R,EAAWwE,SACvE1D,EAAO6xB,cAAgB5xB,EAAS43R,gBAAkB34R,EAAW4B,OAC7Dd,EAAO83R,YAAc/4N,EACrB9+D,EAAS23R,iBAAmB33R,EAAS43R,eAAiB,KACtD53R,EAASujB,UAAYu7C,EAAU56D,SAAS+f,eAE1C7W,EAAOrN,EAAO0T,UACdrG,EAAKkG,UAAW,EAChBvT,EAAOwT,SAAWvT,EAASuT,SACtBxT,EAAOwT,WACNxT,EAAO4P,QAAqD,WAA3CsuD,GAAM/kB,SAAS9rC,EAAM,YAAY,KACpDA,EAAK7D,MAAMszC,SAAW,YAExBzvC,EAAK2B,gBAAkBhP,EAAOW,SAAS,0BAA0B,IAEnE0M,EAAKkG,UAAW,EAChBvT,EAAOsyC,aAAeqoN,GAAa36P,GACnCA,EAAOqhD,OAAS09J,GAAO9+M,GACvBD,EAAO4L,IAAM69M,GAAWr9L,EAAK,CAC3Bu5L,aAAa,EACb1B,cAAejkN,EAAO4jD,WACtBugK,oBAAqBnkN,EACrB+3R,WAAY93R,EAAS+3R,uBACrBC,aAAch4R,EAASg4R,aACvB9wE,eAAe,EACfH,aAAchnN,EAAO4P,OAAS5P,EAAO0T,UAAY,KACjD2zM,QAASpnN,EAASwwP,iBAClBpvM,OAAQrhD,EAAOqhD,OACf02J,eAAgBl3M,GAAS2pO,wBAAwBxqO,GACjD6mN,YAAa,SAAU/4M,GACrB9N,EAAO8lC,KAAK,YAAah4B,MAG7B9N,EAAO4mD,OAASowO,GAAah3R,GAC7BA,EAAO8mD,WAAa+0N,GAAgB57Q,EAAUD,GAC9CA,EAAOuL,UAAYo4Q,GAAY3jR,EAAO4L,IAAK5L,EAAOqsL,SAAUrsL,EAAO8mD,WAAY9mD,GAC/EA,EAAOk4R,UAAY11D,GAAUxiO,GAC7BA,EAAOkO,UAAYioQ,GAAUn2Q,GAC7BA,EAAO0L,YAAcmgQ,GAAY7rQ,GACjCA,EAAOm4R,sBAAwB,IAAIl7B,GAAWj9P,GAC9CA,EAAOwoO,oBAAsB87B,GAAmBtkQ,GAChD82R,GAAQ92R,GACR22R,GAAQ32R,GACRm0R,GAAkB9lR,MAAMrO,GACxBy8P,GAAYpuP,MAAMrO,GAClBA,EAAO8lC,KAAK,WACP7lC,EAASm4R,oBAAuBn4R,EAASo4R,mBAC5CjsQ,EAAI/e,KAAKhG,YAAa,EACtB62D,GAAMryD,UAAUwB,EAAM,aAAc,UAEtCrN,EAAOkjE,OAASyV,GAAO34E,GACvBA,EAAO8lC,KAAK,cACR7lC,EAASqxB,iBACXjkB,EAAK8X,IAAMllB,EAASqxB,gBAElBrxB,EAASq4R,SACXjrR,EAAK7D,MAAM+uR,WAAa,UAEtBt4R,EAASgmB,SACXjmB,EAAOsO,GAAG,oBAAoB,SAAUR,GACtClO,GAAM4O,KAAKvO,EAASgmB,SAAS,SAAUpgB,GACrCiI,EAAEpM,QAAUoM,EAAEpM,QAAQG,QAAQgE,GAAS,SAAUG,GAC/C,MAAO,wBAAuBkgB,OAAOlgB,GAAO,kBAKpDhG,EAAOsO,GAAG,cAAc,WACtBtO,EAAOm3C,UAAUn3C,EAAO0T,cAE1B1T,EAAOm3H,KAAK,CACV/3H,SAAS,EACT6U,OAAQ,SAEVjU,EAAOs6E,aAAet6E,EAAOuxB,WAAW,CAAEtd,OAAQ,QAClDjU,EAAOsO,GAAG,mCAAmC,SAAUR,GACrD9N,EAAO+4O,UAAuB,qBAAXjrO,EAAErM,QAEnBzB,EAAO4lQ,cAAc7iQ,OAAS,IAChCy0R,EAAiB,GACjB53R,GAAM4O,KAAKxO,EAAO4lQ,eAAe,SAAUp8P,GACzCguR,GAAkBhuR,EAAQ,UAE5BxJ,EAAO4L,IAAIs8M,SAASsvE,IAEtBH,GAAoBr3R,GAAQm4M,QAAQn4M,EAAO8wB,YAAY,SAAUzvB,GAC/D+1R,GAAWp3R,MACV,SAAU6f,GACXu3Q,GAAWp3R,MAETC,EAASu4R,eACXzB,GAAY/2R,EAAQC,EAASu4R,gBAG7BC,GAAkB,CAAEnB,gBAAiBA,IAErCoB,GAAQjvE,GAAWjpN,IACnBm4R,GAAc,SAAU34R,EAAQ44R,GAClC,GAAI15R,EAAWwE,SAAS27F,SAAWngG,EAAW4B,OAAOokD,SAAS2zO,UAAYl2F,GAAI3wK,IAAM2wK,GAAI3wK,GAAK,GAAI,CAC/F,IAAI8mQ,EAAWh/B,GAAKD,KAAK,OACzB75P,EAAO84R,GAAY,WACjBL,GAAgBnB,gBAAgBt3R,IAElC,IAAI+4R,EAAiB,2DAAkE75R,EAAWwE,SAAS27F,OAAtF,yCAA+Ir/F,EAAOsC,GAAtJ,wDAA0Nw2R,EAAW,cAE1P,OADAJ,GAAM7sR,UAAU+sR,EAAK,MAAOG,IACrB,EAET,OAAO,GAELC,GAAkB,SAAU3mQ,GAC9B,IAAI4mQ,EAAqC,kBAAX5mQ,EAAsBA,EAAS,KAAOA,EACpE,OAAO4mQ,GAAsC,IAE3CC,GAAsB,SAAU52R,EAAIoG,EAAO2pB,EAAQ8mQ,GACrD,IAAI1nQ,EAASo7B,GAAQL,QAAQ,UAa7B,OAZAwI,GAAOvjC,EAAQ0nQ,GACfnkO,GAAOvjC,EAAQ,CACbnvB,GAAIA,EAAK,OACT82R,YAAa,IACbC,kBAAmB,OACnB3wR,MAAOA,IAET6/I,GAAS92H,EAAQ,CACfW,MAAO,OACPC,OAAQ2mQ,GAAgB3mQ,GACxBm6D,QAAS,UAEJ/6D,GAEL4+F,GAAgB,SAAUrwH,GAC5B,IAAIgxB,EAAQE,EAAWwmQ,EAYvB,OAXAA,EAAa72R,GAASqoO,WAAWlpO,GAAU,eACvCa,GAASsoO,mBAAmBnpO,KAAYA,EAAOuuP,kBACjDmpC,GAAc,eAAiB13R,EAAO4wB,gBAAgBC,SAAW,QAEnE6mQ,GAAc,wEACd1mQ,EAASnwB,GAASuoO,UAAUppO,GAC5BkxB,EAAYrwB,GAASwoO,aAAarpO,GAC9Ba,GAASyoO,yBAAyBtpO,KACpC03R,GAAc,uDAAyD72R,GAASyoO,yBAAyBtpO,GAAU,QAErH03R,GAAc,oBAAsB1mQ,EAAS,6BAA+BE,EAAY,cAAgBlxB,EAAOsC,GAAK,uBAC7Go1R,GAEL4B,GAAe,SAAUt5R,EAAQ8B,GACnC,IAAI4G,EAAQ1I,EAAOktP,cAAc7vP,UAAU,0FACvCu7R,EAAMM,GAAoBl5R,EAAOsC,GAAIoG,EAAO5G,EAAEuwB,OAAQxxB,GAASooO,eAAejpO,IAAS4L,MAC3FgtR,EAAIviQ,OAAS,WACXuiQ,EAAIviQ,OAAS,KACbr2B,EAAO8lC,KAAK,SAEd,IAAIyzP,EAAkBZ,GAAY34R,EAAQ44R,GAK1C,OAJA54R,EAAOw5R,qBAAuB13R,EAAE23R,gBAChCz5R,EAAOizP,cAAgB2lC,EACvB54R,EAAO03R,WAAarnK,GAAcrwH,GAClC04R,GAAM3xR,IAAIjF,EAAE23R,gBAAiBb,GACtBW,GAELG,GAAS,SAAU15R,EAAQ25R,GAC7B,IAAIJ,EAAkBD,GAAat5R,EAAQ25R,GACvCA,EAAQlwK,kBACVivK,GAAMp5R,IAAIq6R,EAAQlwK,iBAAiBjgH,MAAMgjF,QAAUxsF,EAAO45R,WAC1D55R,EAAO6sP,OAAS6rC,GAAMpwE,SAASqxE,EAAQlwK,kBAEzCzpH,EAAO42O,aAAaptO,MAAMgjF,QAAU,OACpCksM,GAAM7sR,UAAU7L,EAAOsC,GAAI,cAAe,QACrCi3R,GACHd,GAAgBnB,gBAAgBt3R,IAGhC65R,GAAa,CAAEv+J,KAAMo+J,IAErBI,GAAQrwE,GAAWjpN,IACnBu5R,GAAa,SAAU/5R,EAAQg6R,EAAoB14N,GACrD,IAAI7wD,EAAS+mP,GAAgBl4P,IAAIgiE,GAC7B/xD,EAAYioP,GAAgB33O,KAAKyhD,IAAWthE,EAAOuuP,gBAAgB1sP,QAAQ,MAAO,IAEtF,GADAy/D,EAAS1hE,GAAMgP,KAAK0yD,GAChB7wD,IAAyD,IAA/C7Q,GAAMqyC,QAAQ+nP,EAAoB14N,GAAgB,CAI9D,GAHA1hE,GAAM4O,KAAKgpP,GAAgBxsC,aAAa1pJ,IAAS,SAAUiqJ,GACzDwuE,GAAW/5R,EAAQg6R,EAAoBzuE,MAErCvrN,EAAOsD,QAAQg+D,GACjB,OAEF,IACE,IAAI24N,EAAiB,IAAIxpR,EAAOzQ,EAAQuP,EAAWvP,EAAOgM,GAC1DhM,EAAOsD,QAAQg+D,GAAU24N,EACrBA,EAAe3+J,OACjB2+J,EAAe3+J,KAAKt7H,EAAQuP,GAC5ByqR,EAAmBvzR,KAAK66D,IAE1B,MAAOxzD,IACPypP,GAAcF,gBAAgBr3P,EAAQshE,EAAQxzD,OAIhDosR,GAAmB,SAAUj8R,GAC/B,OAAOA,EAAK4D,QAAQ,MAAO,KAEzBs4R,GAAc,SAAUn6R,GAC1B,IAAIg6R,EAAqB,GACzBp6R,GAAM4O,KAAKxO,EAAOC,SAASqD,QAAQtJ,MAAM,SAAS,SAAUiE,GAC1D87R,GAAW/5R,EAAQg6R,EAAoBE,GAAiBj8R,QAGxDm8R,GAAY,SAAUp6R,GACxB,IAAIq6R,EACA5wC,EAAQzpP,EAAOC,SAASwpP,MACxB9/L,EAAS8/L,IACXzpP,EAAOC,SAASwpP,MAAQywC,GAAiBzwC,GACzC4wC,EAAQpuE,GAAa3sN,IAAImqP,GACzBzpP,EAAOypP,MAAQ,IAAI4wC,EAAMr6R,EAAQisN,GAAapsM,KAAK4pO,IAC/CzpP,EAAOypP,MAAMnuH,MACft7H,EAAOypP,MAAMnuH,KAAKt7H,EAAQisN,GAAapsM,KAAK4pO,IAAUzpP,EAAOuuP,gBAAgB1sP,QAAQ,MAAO,IAAK7B,EAAOgM,IAG1GhM,EAAOypP,MAAQ,IAGf6wC,GAAwB,SAAUt6R,GACpC,IAAIU,EAAGhF,EAAGmR,EAAW+1F,EAAIxzC,EACrBnvD,EAAWD,EAAOC,SAClB2H,EAAM5H,EAAO42O,aAyBjB,OAxBAl2O,EAAIT,EAASmyB,OAAS0nQ,GAAM3gP,SAASvxC,EAAK,UAAY,OACtDlM,EAAIuE,EAASoyB,QAAUynQ,GAAM3gP,SAASvxC,EAAK,WAAaA,EAAI6hC,aAC5D58B,EAAY5M,EAASs6R,YAAc,IACnC33L,EAAK,mBACDA,EAAG5+F,KAAK,GAAKtD,KACfA,EAAIJ,KAAKssB,IAAIluB,SAASgC,EAAG,IAAK,MAE5BkiG,EAAG5+F,KAAK,GAAKtI,KACfA,EAAI4E,KAAKssB,IAAIluB,SAAShD,EAAG,IAAKmR,IAEhCuiD,EAAOpvD,EAAOypP,MAAM+wC,SAAS,CAC3BlgO,WAAY1yD,EACZwqB,MAAO1xB,EACP2xB,OAAQ32B,EACR++R,WAAYx6R,EAASuuP,YACrBksC,YAAaz6R,EAASwuP,eAEnBxuP,EAASwwP,mBACZ/0P,GAAK0zD,EAAK26D,cAAgBruH,IAAmB,kBAANA,EAAiB0zD,EAAKsrO,aAAe,EAAI,IAC5Eh/R,EAAImR,IACNnR,EAAImR,IAGRuiD,EAAK/8B,OAAS32B,EACP0zD,GAELurO,GAAsB,SAAU36R,GAClC,IAAIovD,EACAxnD,EAAM5H,EAAO42O,aASjB,OARAxnL,EAAOpvD,EAAOC,SAASwpP,MAAMzpP,EAAQ4H,GACjCwnD,EAAKq6D,gBAAgB1/F,WACvBqlC,EAAKq6D,gBAAgBnnH,GAAK8sD,EAAKq6D,gBAAgBnnH,IAAMtC,EAAOsC,GAAK,WAE/D8sD,EAAKqqO,iBAAmBrqO,EAAKqqO,gBAAgB1vQ,WAC/CqlC,EAAKqqO,gBAAgBn3R,GAAK8sD,EAAKqqO,gBAAgBn3R,IAAMtC,EAAOsC,GAAK,oBAEnE8sD,EAAK/8B,OAAS+8B,EAAK26D,aAAe36D,EAAK26D,aAAeniH,EAAI6hC,aACnD2lB,GAELwrO,GAAyB,SAAUh3R,GACrC,MAAO,CACL6lH,gBAAiB7lH,EACjB61R,gBAAiB71R,IAGjBi3R,GAAyB,SAAUt5B,GACrC,IAAIk4B,EAAkBK,GAAMjqR,OAAO,OAEnC,OADAiqR,GAAMztQ,YAAYotQ,EAAiBl4B,GAC5Bq5B,GAAuBnB,IAE5BqB,GAAmB,SAAU96R,GAC/B,IAAIuhQ,EAAgBvhQ,EAAO42O,aAC3B,OAAO52O,EAAO4P,OAASgrR,GAAuB,MAAQC,GAAuBt5B,IAE3Ew5B,GAAgB,SAAU/6R,GAC5B,IAAIC,EAAWD,EAAOC,SAAU2H,EAAM5H,EAAO42O,aAE7C,OADA52O,EAAO45R,WAAahyR,EAAI4B,MAAMgjF,QAC1B7iC,EAAS1pD,EAASwpP,OACb6wC,GAAsBt6R,GACpBoe,EAAWne,EAASwpP,OACtBkxC,GAAoB36R,GAEpB86R,GAAiB96R,IAGxBg7R,GAAS,SAAUh7R,GACrB,IAEI25R,EAFA15R,EAAWD,EAAOC,SAClB2H,EAAM5H,EAAO42O,aAejB,OAbA52O,EAAO6rC,IAAM5rC,EAASg7R,QAAUj7R,EAAOktP,cAAcguC,KAAKrvP,IAC1D7rC,EAAOktP,cAAcguC,KAAKzkC,QAAQx2P,EAAS6D,UAC3C7D,EAASk7R,WAAal7R,EAASk7R,YAAcrB,GAAM/6O,UAAUn3C,EAAK,aAAc5H,EAAOm1C,QAAQ,wBAC/Fn1C,EAAO8lC,KAAK,iBACZs0P,GAAUp6R,GACVm6R,GAAYn6R,GACZ25R,EAAUoB,GAAc/6R,GACxBA,EAAOypH,gBAAkBkwK,EAAQlwK,gBAAkBkwK,EAAQlwK,gBAAkB,KACzExpH,EAASm7R,aACXx7R,GAAM4O,KAAK5O,GAAMoyM,QAAQ/xM,EAASm7R,cAAc,SAAUp5Q,GACxDhiB,EAAO8wB,WAAWrqB,KAAKzG,EAAO4wB,gBAAgBG,WAAW/O,OAGzD/hB,EAASwwP,iBACJgoC,GAAgBnB,gBAAgBt3R,GAEhC65R,GAAWv+J,KAAKt7H,EAAQ25R,IAG/B0B,GAAO,CAAE//J,KAAM0/J,IAEfM,GAAQ7xE,GAAWjpN,IACnB+6R,GAAoB,SAAUt9R,GAChC,MAA0B,MAAnBA,EAAK27E,OAAO,IAEjB4hN,GAAe,SAAUC,EAAcz7R,GACzC,IAAIC,EAAWD,EAAOC,SAClBA,EAAS6D,UAAkC,OAAtB7D,EAAS6D,WAAsB7D,EAASy7R,eAC/Dz7R,EAASy7R,aAAe17R,EAAOktP,cAAc7hI,QAAU,UAAYprH,EAAS6D,SAAW,OAErF7D,EAASy7R,eAAiB17R,EAAOktP,cAAcguC,KAAKn2R,KAAK9E,EAAS6D,WACpE23R,EAAa10R,IAAI9G,EAASy7R,eAG1BC,GAAY,SAAUF,EAAcz7R,EAAQ48I,EAAQx5I,GACtD,IAAInD,EAAWD,EAAOC,SAAUwpP,EAAQxpP,EAASwpP,MACjD,GAAI9/L,EAAS8/L,GAAQ,CACnB,IAAK8xC,GAAkB9xC,KAAWx9B,GAAapsM,KAAK1d,eAAesnP,GAAQ,CACzE,IAAImyC,EAAW37R,EAAS47R,UACpBD,EACF3vE,GAAa90F,KAAKsyH,EAAOzpP,EAAO4wB,gBAAgBG,WAAW6qQ,IAE3D3vE,GAAa90F,KAAKsyH,EAAO,UAAYA,EAAQ,SAAW7sG,EAAS,OAGrE6+I,EAAalxE,WAAU,WACrB0B,GAAaF,QAAQ09B,EAAOrmP,WAG9BA,KAGA04R,GAAc,SAAU77R,EAAU28I,GAChCh9I,GAAM0rB,QAAQrrB,EAASqD,WACzBrD,EAASqD,QAAUrD,EAASqD,QAAQ2D,KAAK,MAE3CrH,GAAM4O,KAAKvO,EAAS4vP,kBAAkB,SAAU3mP,EAAKjL,GACnDu5P,GAAgBrgI,KAAKl5H,EAAMiL,GAC3BjJ,EAASqD,SAAW,IAAMrF,KAE5B2B,GAAM4O,KAAKvO,EAASqD,QAAQtJ,MAAM,SAAS,SAAUsnE,GAEnD,GADAA,EAAS1hE,GAAMgP,KAAK0yD,GAChBA,IAAWk2L,GAAgB33O,KAAKyhD,GAClC,GAAIi6N,GAAkBj6N,GAAS,CAC7BA,EAASA,EAAOh4C,OAAO,EAAGg4C,EAAOv+D,QACjC,IAAIioN,EAAewsC,GAAgBxsC,aAAa1pJ,GAChD1hE,GAAM4O,KAAKw8M,GAAc,SAAUO,GACjC,IAAIglC,EAAkB,CACpBr/O,OAAQ,WACRs6M,SAAUD,EACV3uE,OAAQ,UAAYA,EAAS,OAE/B2uE,EAAMisC,GAAgBnsC,UAAUklC,EAAiBhlC,GACjDisC,GAAgBrgI,KAAKo0F,EAAIC,SAAUD,WAGrCisC,GAAgBrgI,KAAK71D,EAAQ,CAC3BpwD,OAAQ,WACRs6M,SAAUlqJ,EACVs7E,OAAQ,UAAYA,EAAS,YAMnC4tE,GAAc,SAAUxqN,EAAQ48I,GAClC,IAAI6+I,EAAe5xE,GAAaA,aAChC8xE,GAAUF,EAAcz7R,EAAQ48I,GAAQ,WACtC4+I,GAAaC,EAAcz7R,GAC3B87R,GAAY97R,EAAOC,SAAU28I,GAC7B6+I,EAAalxE,WAAU,WAChBvqN,EAAO6jC,SACVw3P,GAAK//J,KAAKt7H,KAEXA,GAAQ,SAAU6f,GACnB03O,GAAcH,gBAAgBp3P,EAAQ6f,EAAK,IACtC7f,EAAO6jC,SACVw3P,GAAK//J,KAAKt7H,UAKd2vB,GAAS,SAAU3vB,GACrB,IAAIC,EAAWD,EAAOC,SAAUqC,EAAKtC,EAAOsC,GACxCujM,EAAe,WACjBy1F,GAAMvmN,OAAO71E,EAAW4B,OAAQ,QAAS+kM,GACzC7lM,EAAO2vB,UAET,GAAKs2K,GAAW9hB,MAAMwhB,WAItB,GAAK3lM,EAAO42O,cAGPj0C,GAAI3zL,gBAAT,CAGK/O,EAAS2P,OAIZ5P,EAAO4P,QAAS,GAHhB5P,EAAOy3R,cAAgBz3R,EAAO42O,aAAaptO,MAAMqzC,WACjD78C,EAAO42O,aAAaptO,MAAMqzC,WAAa,UAIzC,IAAIk/O,EAAO/7R,EAAO42O,aAAamlD,MAAQT,GAAMtkR,UAAU1U,EAAI,QACvDy5R,IACF/7R,EAAOg8R,YAAcD,EACjB97R,EAASqvP,eAAiB,kBAAkBtrP,KAAKhE,EAAO42O,aAAazyO,YACvEm3R,GAAMjvQ,YAAYivQ,GAAMzrR,OAAO,QAAS,CACtCpO,KAAM,SACNxD,KAAMqE,IACJA,GACJtC,EAAOi8R,gBAAiB,GAE1Bj8R,EAAOk8R,kBAAoB,SAAUpuR,GACnC9N,EAAO8lC,KAAKh4B,EAAErM,KAAMqM,IAEtBwtR,GAAMl+Q,KAAK2+Q,EAAM,eAAgB/7R,EAAOk8R,mBACxCl8R,EAAOsO,GAAG,SAAS,WACjBtO,EAAOyhD,WAAWzhD,EAAOs6E,aAAc,CAAErmE,OAAQ,YAE/ChU,EAAS4uP,cAAiBktC,EAAK1hN,OAAOtwD,UAAagyQ,EAAK1hN,OAAOt3E,QAAWg5R,EAAKI,gBACjFJ,EAAKI,cAAgBJ,EAAK1hN,OAC1B0hN,EAAK1hN,OAAS,WAGZ,OAFAr6E,EAAOktP,cAAckvC,cACrBp8R,EAAOo6E,UAAS,GACT2hN,EAAKI,cAAcJ,MAIhC/7R,EAAOiN,cAAgB6oP,GAAc91P,GACrCA,EAAO4xC,oBAAsBkjN,GAAoB90P,GACvB,QAAtBC,EAASo8R,UACXr8R,EAAOsO,GAAG,cAAc,SAAUR,GAC5BA,EAAE4/B,OACJ5/B,EAAEpM,QAAU45R,GAAMh6R,OAAOwM,EAAEpM,aAI7BzB,EAAS2uP,yBACX5uP,EAAOsO,GAAG,UAAU,WACdtO,EAAOssP,aACTtsP,EAAO0tC,UAITztC,EAAS6uP,qBACX9uP,EAAOs8R,cAAgB,YACjBt8R,EAAOssP,aAAgBtsP,EAAOm3R,WAAcn3R,EAAOsoN,YACrDtoN,EAAO0tC,KAAK,CACVz5B,OAAQ,MACR+iQ,WAAW,EACXulB,WAAW,KAIjBv8R,EAAOktP,cAAc5+O,GAAG,eAAgBtO,EAAOs8R,gBAEjDt8R,EAAOktP,cAAcnmP,IAAI/G,GACzBwqN,GAAYxqN,EAAQA,EAAO48I,cAtEzB0+I,GAAMl+Q,KAAKle,EAAW4B,OAAQ,QAAS+kM,IAwEvC22F,GAAS,CAAE7sQ,OAAQA,IAEnB8sQ,GAAQ,SAAUz8R,EAAQ/B,EAAMgC,GAClC,IAAIy8R,EAAW18R,EAAO08R,SAAW18R,EAAO08R,SAAW,GACnDA,EAASj2R,KAAK,CACZxI,KAAMA,EACNgC,SAAUA,IAEZD,EAAO08R,SAAWA,GAEhBC,GAAU,CAAE51R,IAAK01R,IAEjBG,GAASh9R,GAAM4O,KAAMquR,GAASj9R,GAAMgP,KACpCkuR,GAAa,uGAAuG9iS,MAAM,KAC1H+iS,GAAgB,CAClBC,IAAK,GACLC,KAAM,GACNC,MAAO,IACPC,OAAQ,IAENC,GAAM,SAAUl0R,EAAKjJ,GACvB,IACIo9R,EAAS/xE,EADTpqN,EAAOvH,KAKX,GAHAuP,EAAM2zR,GAAO3zR,GACbjJ,EAAWiB,EAAKjB,SAAWA,GAAY,GACvCo9R,EAAUp9R,EAASq9R,SACf,yBAAyBt5R,KAAKkF,IAAQ,QAAQlF,KAAKkF,GACrDhI,EAAK42D,OAAS5uD,MADhB,CAIA,IAAIq0R,EAA2C,IAAtBr0R,EAAIrB,QAAQ,MACZ,IAArBqB,EAAIrB,QAAQ,MAAe01R,IAC7Br0R,GAAOm0R,GAAUA,EAAQG,UAAqB,QAAU,cAAgBt0R,GAErE,iBAAiBlF,KAAKkF,KACzBoiN,EAAUrrN,EAASq9R,SAAWr9R,EAASq9R,SAAS36P,KAAO,IAAIy6P,GAAIl+R,EAAWwE,SAASwhD,SAASn1C,MAAM+8M,UAChE,IAA9B7sN,EAASq9R,SAASE,SACpBt0R,EAAM,aAAehI,EAAKu8R,UAAUnyE,EAASpiN,IAE7CA,EAAM,oBAAoBlM,KAAKkM,GAC/BA,GAAOm0R,GAAWA,EAAQG,UAAY,QAAU,cAAgBt8R,EAAKu8R,UAAUnyE,EAASpiN,EAAI,IAAMA,EAAI,KAG1GA,EAAMA,EAAIrH,QAAQ,MAAO,YACzBqH,EAAM,mMAAmMlM,KAAKkM,GAC9M0zR,GAAOE,IAAY,SAAUt9R,EAAG6D,GAC9B,IAAIq6R,EAAOx0R,EAAI7F,GACXq6R,IACFA,EAAOA,EAAK77R,QAAQ,cAAe,OAErCX,EAAK1B,GAAKk+R,KAERL,IACGn8R,EAAKs8R,WACRt8R,EAAKs8R,SAAWH,EAAQG,UAErBt8R,EAAKy8R,WACRz8R,EAAKy8R,SAAWN,EAAQM,UAErBz8R,EAAK08R,MAAsB,aAAd18R,EAAK8wC,OACrB9wC,EAAK08R,KAAOP,EAAQO,MAEjB18R,EAAK8wC,MAAsB,aAAd9wC,EAAK8wC,OACrB9wC,EAAK8wC,KAAOqrP,EAAQrrP,MAEtB9wC,EAAK42D,OAAS,IAEZylO,IACFr8R,EAAKs8R,SAAW,MAGpBJ,GAAIp7R,UAAY,CACd67R,QAAS,SAAUl7P,GACjB,IAAIzhC,EAAOvH,KACXgpC,EAAO,mBAAmB3lC,KAAK2lC,GAC/BzhC,EAAKyhC,KAAOA,EAAK,GACjBzhC,EAAK4rN,UAAYnqL,EAAK,GACtBzhC,EAAKykD,KAAOhjB,EAAK,GACjBzhC,EAAK42D,OAAS,GACd52D,EAAK2vB,UAEPitQ,WAAY,SAAUhnQ,GACpB,IACIh6B,EADAoE,EAAOvH,KAEX,GAAY,OAARm9B,EACF,OAAOA,EAGT,GADAA,EAAM,IAAIsmQ,GAAItmQ,EAAK,CAAEwmQ,SAAUp8R,IACd,aAAb41B,EAAIkb,MAAuB9wC,EAAK8wC,OAASlb,EAAIkb,MAAQlb,EAAIkb,MAAQ9wC,EAAK08R,OAAS9mQ,EAAI8mQ,MAAQ18R,EAAKs8R,WAAa1mQ,EAAI0mQ,UAA6B,KAAjB1mQ,EAAI0mQ,SACnI,OAAO1mQ,EAAIjG,SAEb,IAAIktQ,EAAK78R,EAAK2vB,SAAUmtQ,EAAKlnQ,EAAIjG,SACjC,OAAIktQ,IAAOC,GAAmC,MAA7BD,EAAGnkN,OAAOmkN,EAAGh7R,OAAS,IAAcg7R,EAAGz0Q,OAAO,EAAGy0Q,EAAGh7R,OAAS,KAAOi7R,EAC5ED,GAETjhS,EAASoE,EAAK+8R,UAAU/8R,EAAKyhC,KAAM7L,EAAI6L,MACnC7L,EAAI0jG,QACN19H,GAAU,IAAMg6B,EAAI0jG,OAElB1jG,EAAI2wD,SACN3qF,GAAU,IAAMg6B,EAAI2wD,QAEf3qF,IAETi0B,WAAY,SAAU+F,EAAKonQ,GAEzB,OADApnQ,EAAM,IAAIsmQ,GAAItmQ,EAAK,CAAEwmQ,SAAU3jS,OACxBm9B,EAAIjG,OAAOqtQ,GAAUvkS,KAAKwkS,aAAarnQ,KAEhDqnQ,aAAc,SAAUrnQ,GACtB,GAAIn9B,KAAKq4C,MAAQlb,EAAIkb,MAAQr4C,KAAK6jS,UAAY1mQ,EAAI0mQ,SAAU,CAC1D,GAAI7jS,KAAKikS,MAAQ9mQ,EAAI8mQ,KACnB,OAAO,EAET,IAAIQ,EAAcrB,GAAcpjS,KAAK6jS,UACrC,GAAIY,IAAgBzkS,KAAKikS,MAAQQ,KAAiBtnQ,EAAI8mQ,MAAQQ,GAC5D,OAAO,EAGX,OAAO,GAETH,UAAW,SAAUhkJ,EAAMt3G,GACzB,IAAIrjB,EAAiCjc,EAAG1E,EAA7B0/R,EAAa,EAAGnkQ,EAAM,GAIjC,GAHA+/G,EAAOA,EAAKn1H,UAAU,EAAGm1H,EAAK/wH,YAAY,MAC1C+wH,EAAOA,EAAKjgJ,MAAM,KAClBslB,EAAQqjB,EAAK3oC,MAAM,KACfigJ,EAAKl3I,QAAUuc,EAAMvc,OACvB,IAAKM,EAAI,EAAG1E,EAAIs7I,EAAKl3I,OAAQM,EAAI1E,EAAG0E,IAClC,GAAIA,GAAKic,EAAMvc,QAAUk3I,EAAK52I,KAAOic,EAAMjc,GAAI,CAC7Cg7R,EAAah7R,EAAI,EACjB,MAIN,GAAI42I,EAAKl3I,OAASuc,EAAMvc,OACtB,IAAKM,EAAI,EAAG1E,EAAI2gB,EAAMvc,OAAQM,EAAI1E,EAAG0E,IACnC,GAAIA,GAAK42I,EAAKl3I,QAAUk3I,EAAK52I,KAAOic,EAAMjc,GAAI,CAC5Cg7R,EAAah7R,EAAI,EACjB,MAIN,GAAmB,IAAfg7R,EACF,OAAO17P,EAET,IAAKt/B,EAAI,EAAG1E,EAAIs7I,EAAKl3I,QAAUs7R,EAAa,GAAIh7R,EAAI1E,EAAG0E,IACrD62B,GAAO,MAET,IAAK72B,EAAIg7R,EAAa,EAAG1/R,EAAI2gB,EAAMvc,OAAQM,EAAI1E,EAAG0E,IAE9C62B,GADE72B,IAAMg7R,EAAa,EACd,IAAM/+Q,EAAMjc,GAEZic,EAAMjc,GAGjB,OAAO62B,GAETujQ,UAAW,SAAUxjJ,EAAMt3G,GACzB,IAAIt/B,EAAmBkX,EAAI+jR,EAApB37M,EAAK,EAAG7gF,EAAI,GAUnB,IATAyY,EAAK,MAAMvW,KAAK2+B,GAAQ,IAAM,GAC9Bs3G,EAAOA,EAAKjgJ,MAAM,KAClB2oC,EAAOA,EAAK3oC,MAAM,KAClB4iS,GAAO3iJ,GAAM,SAAUzyH,GACjBA,GACF1lB,EAAE2E,KAAK+gB,MAGXyyH,EAAOn4I,EACFuB,EAAIs/B,EAAK5/B,OAAS,EAAGjB,EAAI,GAAIuB,GAAK,EAAGA,IACjB,IAAnBs/B,EAAKt/B,GAAGN,QAA4B,MAAZ4/B,EAAKt/B,KAGjB,OAAZs/B,EAAKt/B,GAILs/E,EAAK,EACPA,IAGF7gF,EAAE2E,KAAKk8B,EAAKt/B,IAPVs/E,KAqBJ,OAZAt/E,EAAI42I,EAAKl3I,OAAS4/E,EAEhB27M,EADEj7R,GAAK,EACGvB,EAAEgqC,UAAU7kC,KAAK,KAEjBgzI,EAAK7zI,MAAM,EAAG/C,GAAG4D,KAAK,KAAO,IAAMnF,EAAEgqC,UAAU7kC,KAAK,KAEnC,IAAzBq3R,EAAQz2R,QAAQ,OAClBy2R,EAAU,IAAMA,GAEd/jR,GAAM+jR,EAAQp1Q,YAAY,OAASo1Q,EAAQv7R,OAAS,IACtDu7R,GAAW/jR,GAEN+jR,GAETztQ,OAAQ,SAAU0tQ,GAChB,IAAIjjS,EACA4F,EAAOvH,KA8BX,OA7BKuH,EAAK42D,SAAUymO,IAClBjjS,EAAI,GACCijS,IACCr9R,EAAKs8R,SACPliS,GAAK4F,EAAKs8R,SAAW,MAErBliS,GAAK,KAEH4F,EAAKy8R,WACPriS,GAAK4F,EAAKy8R,SAAW,KAEnBz8R,EAAK8wC,OACP12C,GAAK4F,EAAK8wC,MAER9wC,EAAK08R,OACPtiS,GAAK,IAAM4F,EAAK08R,OAGhB18R,EAAKyhC,OACPrnC,GAAK4F,EAAKyhC,MAERzhC,EAAKs5H,QACPl/H,GAAK,IAAM4F,EAAKs5H,OAEdt5H,EAAKumF,SACPnsF,GAAK,IAAM4F,EAAKumF,QAElBvmF,EAAK42D,OAASx8D,GAET4F,EAAK42D,SAGhBslO,GAAIrkC,aAAe,SAAUjiO,GAC3B,IAAIr1B,EAAM+K,EAMV,OALAsqB,EAAMmiO,mBAAmBniO,GAAK98B,MAAM,KACpCwS,EAAU,eAAexP,KAAK85B,EAAI,IAC9BtqB,IACF/K,EAAO+K,EAAQ,IAEV,CACL/K,KAAMA,EACNsD,KAAM+xB,EAAI,KAGdsmQ,GAAIj0D,mBAAqB,SAAUq1D,GACjC,IAAIlzE,EAYJ,OAVEA,EADmC,IAAjCkzE,EAAIhB,SAAS31R,QAAQ,SAAkC,UAAjB22R,EAAIhB,SAClCgB,EAAIzuR,KAEJyuR,EAAIhB,SAAW,KAAOgB,EAAIxsP,KAAOwsP,EAAIC,SAE7C,yBAAyBz6R,KAAKsnN,KAChCA,EAAUA,EAAQzpN,QAAQ,WAAY,IAAIA,QAAQ,gBAAiB,IAC9D,UAAUmC,KAAKsnN,KAClBA,GAAW,MAGRA,GAGT,IAAIvuE,GAAgB,OAChB2hJ,GAAoB,SAAU1+R,EAAQ4I,GACxC,IAAIkwD,EAAYj4D,GAAS2oO,mBAAmBxpO,GACxC2+R,EAAc,IAAI/nP,OAAO,MAAQkiB,EAAY,4CAAiDA,EAAY,8BAC9G,OAAOlwD,EAAK/G,QAAQ88R,EAAa,KAE/BC,GAAqB,SAAU5+R,EAAQwG,EAAM6G,GAC/C,IAAI3L,EAOJ,GANA8E,EAAKyN,OAASzN,EAAKyN,OAASzN,EAAKyN,OAAS8oI,GAC1Cv2I,EAAKlH,KAAM,EACXkH,EAAK60Q,UAAW,EACX70Q,EAAKwwQ,WACRh3Q,EAAO8lC,KAAK,mBAAoBt/B,GAEd,QAAhBA,EAAKyN,OACPvS,EAAU9B,GAAMgP,KAAKo6P,GAASD,aAAa/oQ,EAAO8mD,WAAYz5C,EAAKrI,iBAC9D,GAAoB,SAAhBwB,EAAKyN,OACdvS,EAAU0sN,GAAKx/M,KAAKvB,EAAKm5D,WAAan5D,EAAKhJ,iBACtC,IAAoB,SAAhBmC,EAAKyN,OACd,OAAOjU,EAAO8mD,WAAWphC,UAAUrY,EAAM7G,GAEzC9E,EAAUg9R,GAAkB1+R,EAAQA,EAAO8mD,WAAWphC,UAAUrY,EAAM7G,IAUxE,MARoB,SAAhBA,EAAKyN,QAAsBolM,GAAoBxsJ,GAAQN,QAAQl/C,IAGjE7G,EAAK9E,QAAUA,EAFf8E,EAAK9E,QAAU9B,GAAMgP,KAAKlN,GAIvB8E,EAAKwwQ,WACRh3Q,EAAO8lC,KAAK,aAAct/B,GAErBA,EAAK9E,SAEVm9R,GAAe,SAAU7+R,EAAQwG,GAInC,YAHa,IAATA,IACFA,EAAO,IAEFsX,EAAO5X,KAAKlG,EAAO0T,WAAW8I,KAAK/R,EAAyB,SAAhBjE,EAAKyN,OAAoB,IAAI0jQ,GAAO,OAAQ,IAAM,KAAK,SAAUtqQ,GAClH,OAAOuxR,GAAmB5+R,EAAQwG,EAAM6G,OAIxCgiC,GAAW,SAAU/jC,EAAMmQ,GAC7BA,EAAGnQ,GACCA,EAAKiM,YACP83B,GAAS/jC,EAAKiM,WAAYkE,GAExBnQ,EAAKqhB,MACP0iB,GAAS/jC,EAAKqhB,KAAMlR,IAGpBqjR,GAAoB,SAAUvlB,EAAaC,EAAkBluQ,GAC/D,IAAIyzR,EAAc,GACdC,EAAc,GACdxyR,EAAU,GA6Bd,IAAK,IAAIvO,KA5BLqN,EAAKiM,YACP83B,GAAS/jC,EAAKiM,YAAY,SAAUjM,GAClCkD,EAAK+qQ,GAAa,SAAUhrQ,GACtBA,EAAOtQ,OAASqN,EAAKrN,OACnB8gS,EAAYxwR,EAAOtQ,MACrB8gS,EAAYxwR,EAAOtQ,MAAM4U,MAAMpM,KAAK6E,GAEpCyzR,EAAYxwR,EAAOtQ,MAAQ,CACzBsQ,OAAQA,EACRsE,MAAO,CAACvH,QAKhBkD,EAAKgrQ,GAAkB,SAAUjrQ,GACO,kBAA3BjD,EAAKqD,KAAKJ,EAAOtQ,QACtB+gS,EAAYzwR,EAAOtQ,MACrB+gS,EAAYzwR,EAAOtQ,MAAM4U,MAAMpM,KAAK6E,GAEpC0zR,EAAYzwR,EAAOtQ,MAAQ,CACzBsQ,OAAQA,EACRsE,MAAO,CAACvH,WAOHyzR,EACXA,EAAY58R,eAAelE,IAC7BuO,EAAQ/F,KAAKs4R,EAAY9gS,IAG7B,IAAK,IAAIA,KAAQ+gS,EACXA,EAAY78R,eAAelE,IAC7BuO,EAAQ/F,KAAKu4R,EAAY/gS,IAG7B,OAAOuO,GAELyyR,GAAW,SAAU1lB,EAAaC,EAAkBluQ,GACtD,IAAIkB,EAAUsyR,GAAkBvlB,EAAaC,EAAkBluQ,GAC/DkD,EAAKhC,GAAS,SAAU/N,GACtB+P,EAAK/P,EAAM8P,OAAOvH,WAAW,SAAU5D,GACrCA,EAAS3E,EAAMoU,MAAOpU,EAAM8P,OAAOtQ,KAAM,WAK3CihS,GAAkB,OAClBC,GAAa,SAAUz9R,GACzB,OAAOA,aAAmBi2Q,IAExBynB,GAAgB,SAAUp/R,GACxB2zP,GAAYpmD,SAASvtM,IACvB28N,GAAYC,gBAAgB58N,EAAO0T,WAAWlF,MAAK,SAAUiqC,GAC3D,IAAIntC,EAAOmtC,EAAIjtC,UACXw4N,EAAWv7K,GAASwhI,QAAQ3+K,GAAQqxN,GAAYC,gBAAgBtxN,GAAMoR,MAAM+7B,GAAOA,EACvFz4C,EAAOuL,UAAUwf,OAAOi5M,EAASvQ,eAInC4rE,GAAgB,SAAUr/R,EAAQ4I,GACpC5I,EAAO4L,IAAI87M,QAAQ1nN,EAAO0T,UAAW9K,GACrCw2R,GAAcp/R,IAEZs/R,GAAmB,SAAUt/R,EAAQqN,EAAM3L,EAAS8E,GACtD,IAAIgoR,EAAqB+Q,EA8BzB,OA7BuB,IAAnB79R,EAAQqB,QAAgB,QAAQiB,KAAKtC,IACvC69R,EAAO,0BACe,UAAlBlyR,EAAKlJ,SACPzC,EAAU,WAAa69R,EAAO,aACrB,YAAYv7R,KAAKqJ,EAAKlJ,YAC/BzC,EAAU,OAAS69R,EAAO,SAE5B/Q,EAAsB3tR,GAAS2oO,mBAAmBxpO,GAC9CwuR,GAAuBxuR,EAAOqhD,OAAO+hK,aAAa/1M,EAAKlJ,SAAS+f,cAAesqQ,EAAoBtqQ,gBACrGxiB,EAAU69R,EACV79R,EAAU1B,EAAO4L,IAAIytE,WAAWm1M,EAAqBxuR,EAAOC,SAASk5D,wBAAyBz3D,IACpFA,IACVA,EAAU,2BAEZ29R,GAAcr/R,EAAQ0B,GACtB1B,EAAO8lC,KAAK,aAAct/B,KAEN,QAAhBA,EAAKyN,SACPvS,EAAU0kO,GAAe,CAAE7iN,SAAUvjB,EAAOujB,UAAYvjB,EAAOqhD,QAAQ37B,UAAU1lB,EAAO4mD,OAAOn/C,MAAM/F,EAAS,CAC5G+nE,eAAe,EACf9mE,QAAQ,MAGZ6D,EAAK9E,QAAU23M,GAAoBxsJ,GAAQN,QAAQl/C,IAAS3L,EAAU9B,GAAMgP,KAAKlN,GACjF29R,GAAcr/R,EAAQwG,EAAK9E,SACtB8E,EAAKwwQ,WACRh3Q,EAAO8lC,KAAK,aAAct/B,IAGvBA,EAAK9E,SAEV89R,GAAiB,SAAUx/R,EAAQqN,EAAM3L,EAAS8E,GACpDy4R,GAASj/R,EAAO4mD,OAAOszN,iBAAkBl6Q,EAAO4mD,OAAOuzN,sBAAuBz4Q,GAC9E,IAAIkH,EAAOw9N,GAAe,CAAE7iN,SAAUvjB,EAAOujB,UAAYvjB,EAAOqhD,QAAQ37B,UAAUhkB,GAMlF,OALA8E,EAAK9E,QAAU23M,GAAoBxsJ,GAAQN,QAAQl/C,IAASzE,EAAOhJ,GAAMgP,KAAKhG,GAC9Ey2R,GAAcr/R,EAAQwG,EAAK9E,SACtB8E,EAAKwwQ,WACRh3Q,EAAO8lC,KAAK,aAAct/B,GAErB9E,GAEL+9R,GAAe,SAAUz/R,EAAQ0B,EAAS8E,GAW5C,YAVa,IAATA,IACFA,EAAO,IAETA,EAAKyN,OAASzN,EAAKyN,OAASzN,EAAKyN,OAASirR,GAC1C14R,EAAKjH,KAAM,EACXiH,EAAK9E,QAAUy9R,GAAWz9R,GAAW,GAAKA,EACrCy9R,GAAWz9R,IAAa8E,EAAKwwQ,YAChCh3Q,EAAO8lC,KAAK,mBAAoBt/B,GAChC9E,EAAU8E,EAAK9E,SAEVoc,EAAO5X,KAAKlG,EAAO0T,WAAW8I,KAAK/R,EAAS/I,IAAU,SAAU2L,GACrE,OAAO8xR,GAAWz9R,GAAW89R,GAAex/R,EAAQqN,EAAM3L,EAAS8E,GAAQ84R,GAAiBt/R,EAAQqN,EAAM3L,EAAS8E,OAInHk5R,GAAQj2E,GAAWjpN,IACnBm/R,GAAwB,SAAU3/R,GACpC0/R,GAAMjkO,SAASz7D,EAAOsC,GAAI,UAAWtC,EAAO45R,aAE1CgG,GAAc,SAAU/pR,GAC1B,OAAOiI,EAAO5X,KAAK2P,GAAGrH,MAAK,SAAUqH,GACnC,OAAOA,EAAEgyB,cAGTg4P,GAAqB,SAAU7/R,GACjCA,EAAOw5R,qBAAuBx5R,EAAOg8R,YAAch8R,EAAO6pB,UAAY7pB,EAAOypH,gBAAkB,KAC/FzpH,EAAO83R,YAAc93R,EAAOs5D,gBAAkBt5D,EAAO6xB,cAAgB,KACrE7xB,EAAOizP,cAAgBjzP,EAAO++D,UAAY,KACtC/+D,EAAOuL,YACTvL,EAAOuL,UAAYvL,EAAOuL,UAAU2+B,IAAMlqC,EAAOuL,UAAUK,IAAM5L,EAAOuL,UAAUK,IAAIwgB,IAAM,OAG5F0zQ,GAAc,SAAU9/R,GAC1B,IAAI+7R,EAAO/7R,EAAOg8R,YACdD,IACEA,EAAKI,gBACPJ,EAAK1hN,OAAS0hN,EAAKI,cACnBJ,EAAKI,cAAgB,MAEvBuD,GAAM3qN,OAAOgnN,EAAM,eAAgB/7R,EAAOk8R,qBAG1C9+F,GAAW,SAAUp9L,GACvB,IAAKA,EAAO6jC,QAAS,CACnB,IAAI2kM,EAAsBxoO,EAAOwoO,oBAAqBl2L,EAAetyC,EAAOsyC,aACxEjlC,EAAOrN,EAAO0T,UACd9P,EAAU5D,EAAO42O,aACjBvpO,GACFrN,EAAO0tC,KAAK,CAAEqyP,aAAa,IAE7B//R,EAAO6jC,SAAU,EACjB7jC,EAAOwtP,wBACHxtP,EAAOi8R,gBAAkBr4R,GAC3B87R,GAAM/qR,OAAO/Q,EAAQ+nB,aAEvBg4C,GAAOkoL,WAAW7rP,GAClBA,EAAOktP,cAAcv4O,OAAO3U,IACvBA,EAAO4P,QAAUvC,GACpBsyR,GAAsB3/R,GAExB2jE,GAAOmoL,WAAW9rP,GAClB0/R,GAAM/qR,OAAO3U,EAAO6pH,gBACpB+1K,GAAYp3D,GACZo3D,GAAYttP,GACZtyC,EAAO6nC,YAGPA,GAAU,SAAU7nC,EAAQggS,GAC9B,IAAIz0R,EAAYvL,EAAOuL,UAAWK,EAAM5L,EAAO4L,IAC3C5L,EAAOm3R,YAGN6I,GAAchgS,EAAO6jC,SAIrBm8P,IACHhgS,EAAOktP,cAAc/5M,IAAI,eAAgBnzC,EAAOs8R,eAC5Ct8R,EAAOypP,OAASzpP,EAAOypP,MAAM5hN,SAC/B7nC,EAAOypP,MAAM5hN,UAEf+3P,GAAYr0R,GACZq0R,GAAYh0R,IAEdk0R,GAAY9/R,GACZ6/R,GAAmB7/R,GACnBA,EAAOm3R,WAAY,GAbjBn3R,EAAO2U,WAgBPsrR,GAAQx2E,GAAWjpN,IACnB0/R,GAAWtgS,GAAMyC,OAAQ89R,GAASvgS,GAAM4O,KACxC4xR,GAAYxgS,GAAMC,QAClBwgS,GAAO19F,GAAI3wK,GACXsuQ,GAAS,SAAUh+R,EAAIrC,EAAUitP,GACnC,IAAIhsP,EAAOvH,KACP40P,EAAkBrtP,EAAKqtP,gBAAkBrB,EAAcqzC,gBACvDlD,EAAUnwC,EAAcszC,QAC5BvgS,EAAWywP,GAAkBxvP,EAAMoB,EAAIisP,EAAiBrB,EAAcqD,gBAAiBtwP,GACvFiB,EAAKjB,SAAWA,EAChB6qN,GAAahnN,SAAW7D,EAAS6D,UAAY,KAC7CgnN,GAAaI,aAAejrN,EAASwgS,cACrC31E,GAAaz/F,QAAU6hI,EAAc7hI,QACrCnqH,EAAKoB,GAAKA,EACVpB,EAAKk5E,UAAS,GACdl5E,EAAKoC,QAAU,GACfpC,EAAK0vB,gBAAkB,IAAIwsQ,GAAIn9R,EAAS0uP,kBAAmB,CAAE2uC,SAAUD,IACvEn8R,EAAKs/R,QAAUnD,EACfn8R,EAAK4vB,WAAa,GAClB5vB,EAAK0kQ,cAAgB,GACrB1kQ,EAAK6d,UAAY,IAAI+yO,GAAU5wP,GAC/BA,EAAKw/R,UAAY,GACjBx/R,EAAKy/R,eAAiB,IAAIt3C,GAAenoP,GACzCA,EAAK07I,OAASswG,EAActwG,OAC5B17I,EAAKgsP,cAAgBA,EACrBhsP,EAAK0O,OAAS3P,EAAS2P,OACvB1O,EAAKugB,QAAU,GACfvgB,EAAK84C,UAAY,GACb/5C,EAAS2gS,eACXj+F,GAAI33E,YAAc/qH,EAAS2gS,aAAa/+R,QAAQ,WAAY,MAE3B,IAA/B5B,EAAS4gS,oBACXl+F,GAAIG,kBAAmB,GAEzBoqD,EAAcpnN,KAAK,cAAe,CAAE9lC,OAAQkB,IAC5CA,EAAKi5E,aAAa,QAASj5E,GAC3BA,EAAK8K,EAAI+mM,GAASyB,kBAAiB,WACjC,MAAO,CACL1gM,QAAS5S,EAAK0O,OAAS1O,EAAKwS,UAAYxS,EAAKiO,SAC7CvL,QAAS1C,EAAKwS,eAIpB4sR,GAAOt+R,UAAY,CACjB2tB,OAAQ,WACN6sQ,GAAO7sQ,OAAOh2B,OAEhB6a,MAAO,SAAUk/O,GACfC,GAAYn/O,MAAM7a,KAAM+5P,IAE1BnmD,SAAU,WACR,OAAOomD,GAAYpmD,SAAS5zM,OAE9BwgF,aAAc,SAAUl8E,GAEtB,IADA,IAAI4X,EAAI,GACC8F,EAAK,EAAGA,EAAK7Y,UAAUC,OAAQ4Y,IACtC9F,EAAE8F,EAAK,GAAK7Y,UAAU6Y,GAExB,IACoCknB,EADhC3hC,EAAOvH,KACPyJ,EAAWlC,EAAKjB,SAAShC,GAC7B,GAAKmF,EAiBL,OAdIlC,EAAK4/R,iBAAmBj+P,EAAQ3hC,EAAK4/R,eAAe7iS,MACtDmF,EAAWy/B,EAAM++F,KACjB/+F,EAAQA,EAAMA,OAEQ,kBAAbz/B,IACTy/B,EAAQz/B,EAASvB,QAAQ,SAAU,IACnCghC,EAAQA,EAAQu9P,GAAUv9P,GAAS,EACnCz/B,EAAWg9R,GAAUh9R,GACrBlC,EAAK4/R,eAAiB5/R,EAAK4/R,gBAAkB,GAC7C5/R,EAAK4/R,eAAe7iS,GAAQ,CAC1B2jI,KAAMx+H,EACNy/B,MAAOA,IAGJz/B,EAASyD,MAAMg8B,GAAS3hC,EAAMyF,MAAM3E,UAAUoE,MAAMlE,KAAKY,UAAW,KAE7EzF,UAAW,SAAUiI,GACnB,GAAIA,GAAQ1F,GAAMjC,GAAG2H,EAAM,UAAW,CACpC,IAAIy7R,EAASpnS,KAAKsG,SAAS6D,UAAY,KAAMk9R,EAASrnS,KAAKuzP,cAAcguC,KACzE51R,EAAO07R,EAAOj8R,KAAKg8R,EAAS,IAAMz7R,IAASA,EAAKzD,QAAQ,mBAAmB,SAAU4Y,EAAGtB,GACtF,OAAO6nR,EAAOj8R,KAAKg8R,EAAS,IAAM5nR,IAAM,KAAOA,EAAI,OAGvD,OAAOxf,KAAKuzP,cAAc7vP,UAAUiI,IAEtC6vC,QAAS,SAAUl3C,EAAMyoN,GACvB,OAAO/sN,KAAKuzP,cAAcguC,KAAKn2R,MAAMpL,KAAKsG,SAAS6D,UAAY,MAAQ,IAAM7F,UAAyBgf,IAAfypM,EAA2BA,EAAa,KAAOzoN,EAAO,MAE/I0C,SAAU,SAAU1C,EAAMyoN,EAAYjlN,GACpC,OAAOd,GAAShH,KAAMsE,EAAMyoN,EAAYjlN,IAE1CgT,YAAa,SAAUjO,GACrB7M,KAAKw+R,sBAAsB1jR,YAAYjO,IAEzC4J,UAAW,SAAUnS,EAAMgC,GACzB,IAAIiB,EAAOvH,KACPsG,EAASoQ,MACXpQ,EAAS6X,QAAU,WACjB5W,EAAKuV,YAAYxW,EAASoQ,OAG1BpQ,EAAS8mD,eAA4C,qBAApB9mD,EAASmhE,SAC5CnhE,EAASmhE,QAAS,GAEfnhE,EAASqF,MAASrF,EAASsQ,OAC9BtQ,EAASsQ,KAAOtS,GAElBgC,EAAS2T,QAAU3T,EAAS2T,SAAW3T,EAASyI,MAChDxH,EAAKugB,QAAQxjB,GAAQgC,GAEvBghS,WAAY,SAAUhjS,EAAMgC,GAC1B,OAAO08R,GAAQ51R,IAAIpN,KAAMsE,EAAMgC,IAEjCqQ,YAAa,SAAUrS,EAAMgC,GAC3B,IAAIiB,EAAOvH,KACPsG,EAASoQ,MACXpQ,EAAS6X,QAAU,WACjB5W,EAAKuV,YAAYxW,EAASoQ,OAG9BnP,EAAK84C,UAAU/7C,GAAQgC,GAEzB8T,kBAAmB,SAAUka,EAAW3O,GACtC,IACInW,EADAjI,EAAOvH,KAEXuH,EAAKggS,gBAAkBhgS,EAAKggS,iBAAmB,GACtB,kBAAdjzQ,IACT9kB,EAAW8kB,EACXA,EAAY,SAAUrmB,GACpB,OAAO1G,EAAK0K,IAAIjO,GAAGiK,EAAKuB,KAG5BjI,EAAKggS,gBAAgBz6R,KAAK,CACxBnE,GAAIw3P,GAAKD,KAAK,QACd5rO,UAAWA,EACX3O,MAAOA,KAGXtR,WAAY,SAAU/P,EAAMmF,EAAUy/B,GACpClpC,KAAKgnS,eAAe3yR,WAAW/P,EAAMmF,EAAUy/B,IAEjD49B,qBAAsB,SAAUxiE,EAAMmF,EAAUy/B,GAC9ClpC,KAAKgnS,eAAelgO,qBAAqBxiE,EAAMmF,EAAUy/B,IAE3DinN,qBAAsB,SAAU7rP,EAAMmF,EAAUy/B,GAC9ClpC,KAAKgnS,eAAe72C,qBAAqB7rP,EAAMmF,EAAUy/B,IAE3D23C,YAAa,SAAU30E,EAASwmG,EAAM6lJ,EAASrvN,GAC7ClpC,KAAKolB,UAAUhY,IAAIlB,EAASwmG,EAAM6lJ,EAASrvN,IAE7CpsB,YAAa,SAAUpG,EAAK2mC,EAAI33C,EAAOmH,GACrC,OAAO7M,KAAKgnS,eAAelqR,YAAYpG,EAAK2mC,EAAI33C,EAAOmH,IAEzDwiP,kBAAmB,SAAU34O,GAC3B,OAAO1W,KAAKgnS,eAAe33C,kBAAkB34O,IAE/Cq5O,kBAAmB,SAAUr5O,GAC3B,OAAO1W,KAAKgnS,eAAej3C,kBAAkBr5O,IAE/Cw5O,sBAAuB,SAAUx5O,GAC/B,OAAO1W,KAAKgnS,eAAe92C,sBAAsBx5O,IAEnD82B,KAAM,WACJ,IAAIjmC,EAAOvH,KACPuH,EAAK2rP,SACP3rP,EAAK2rP,QAAS,EACV3rP,EAAK0O,OACP1O,EAAKwS,UAAU1E,iBAAkB,GAEjCixR,GAAM94P,KAAKjmC,EAAK2oH,gBAChBo2K,GAAM74P,KAAKlmC,EAAKoB,KAElBpB,EAAKi2H,OACLj2H,EAAK4kC,KAAK,UAGdsB,KAAM,WACJ,IAAIlmC,EAAOvH,KAAMyyB,EAAMlrB,EAAKiO,SACvBjO,EAAK2rP,SACJwzC,IAAQj0Q,IAAQlrB,EAAK0O,QACvBwc,EAAI3V,YAAY,aAElBvV,EAAKwsC,OACDxsC,EAAK0O,QACP1O,EAAKwS,UAAU1E,iBAAkB,EAC7B9N,IAASA,EAAKgsP,cAAci0C,gBAC9BjgS,EAAKgsP,cAAci0C,cAAgB,QAGrClB,GAAM74P,KAAKlmC,EAAK2oH,gBAChBo2K,GAAMxkO,SAASv6D,EAAKoB,GAAI,UAAWpB,EAAK04R,aAE1C14R,EAAK2rP,QAAS,EACd3rP,EAAK4kC,KAAK,UAGdwiL,SAAU,WACR,QAAS3uN,KAAKkzP,QAEhBjsK,iBAAkB,SAAUh9C,EAAOy3G,GACjC1hJ,KAAKmsC,KAAK,gBAAiB,CACzBlC,MAAOA,EACPy3G,KAAMA,KAGVlkB,KAAM,SAAU3wH,GACd,IAC6BoC,EADzB1H,EAAOvH,KACPiO,EAAM1G,EAAK01O,aACf,OAAI11O,EAAK2iC,QACA,GAELj8B,GACFpB,EAAOA,GAAQ,GACfA,EAAK2wH,MAAO,EACZvuH,EAAO1H,EAAKugD,gBAAyBxkC,IAAdrV,EAAIvI,MAAsBuI,EAAIvI,MAAQuI,EAAI5C,UAAWwB,GAC5EA,EAAK5C,QAAUgE,EACVpB,EAAKwwQ,WACR91Q,EAAK4kC,KAAK,cAAet/B,GAE3BA,EAAK5C,QAAUgE,EAAM,KACdgB,QATT,GAYF8kC,KAAM,SAAUlnC,GACd,IAC6BoC,EAAMmzR,EAD/B76R,EAAOvH,KACPiO,EAAM1G,EAAK01O,aACf,GAAKhvO,GAAQ1G,EAAKorP,cAAeprP,EAAK2iC,QAiCtC,OA9BAr9B,EAAOA,GAAQ,GACfA,EAAKknC,MAAO,EACZlnC,EAAK5C,QAAUgE,EACfgB,EAAOpC,EAAK9E,QAAUR,EAAKqwB,WAAW/qB,GACjCA,EAAKwwQ,WACR91Q,EAAK4kC,KAAK,cAAet/B,GAEP,QAAhBA,EAAKyN,QACP/S,EAAK4kC,KAAK,iBAAkBt/B,GAE9BoC,EAAOpC,EAAK9E,QACP,kBAAkBsC,KAAK4D,EAAIzD,UAa9ByD,EAAIvI,MAAQuJ,IAZRpC,EAAKu5R,aAAgB7+R,EAAK0O,SAC5BhI,EAAI5C,UAAY4D,IAEdmzR,EAAOkE,GAAMjpR,UAAU9V,EAAKoB,GAAI,UAClC69R,GAAOpE,EAAKt4R,UAAU,SAAUmE,GAC9B,GAAIA,EAAI3J,OAASiD,EAAKoB,GAEpB,OADAsF,EAAIvI,MAAQuJ,GACL,MAOfpC,EAAK5C,QAAUgE,EAAM,MACE,IAAnBpB,EAAK+1R,WACPr7R,EAAKk5E,UAAS,GAETxxE,GAET64C,WAAY,SAAU//C,EAAS8E,GAC7B,OAAOi5R,GAAa9lS,KAAM+H,EAAS8E,IAErC+qB,WAAY,SAAU/qB,GACpB,OAAOq4R,GAAallS,KAAM6M,IAE5BuF,cAAe,SAAUrK,EAAS8E,GAC5BA,IACF9E,EAAUw+R,GAAS,CAAEx+R,QAASA,GAAW8E,IAE3C7M,KAAK8c,YAAY,oBAAoB,EAAO/U,IAE9Cw4E,QAAS,WACP,OAAQvgF,KAAKynS,YAEfhnN,SAAU,SAAUx2C,GAClB,IAAIy9P,GAAY1nS,KAAKynS,WACrBznS,KAAKynS,YAAcx9P,EACfA,GAASA,IAAUy9P,GACrB1nS,KAAKmsC,KAAK,UAGdsmN,QAAS,SAAUt9J,GACjBs9J,GAAQzyP,KAAMm1F,IAEhB+6B,aAAc,WACZ,IAAI3oH,EAAOvH,KAIX,OAHKuH,EAAK2oB,YACR3oB,EAAK2oB,UAAYo2Q,GAAM3gS,IAAI4B,EAAKuoH,iBAAmBvoH,EAAKoB,GAAK,YAExDpB,EAAK2oB,WAEd6vB,wBAAyB,WACvB,OAAO//C,KAAK6/R,sBAEd5iD,WAAY,WAIV,OAHKj9O,KAAKolE,YACRplE,KAAKolE,UAAYkhO,GAAM3gS,IAAI3F,KAAK2I,KAE3B3I,KAAKolE,WAEdstH,OAAQ,WACN,IACIzkL,EADA1G,EAAOvH,KAQX,OANKuH,EAAK2wB,gBACRjqB,EAAM1G,EAAK+xP,cACPrrP,IACF1G,EAAK2wB,cAAgBjqB,EAAIiqB,gBAGtB3wB,EAAK2wB,eAEd1iB,OAAQ,WACN,IACI+6B,EADAhpC,EAAOvH,KAQX,OANKuH,EAAKo4D,kBACRpvB,EAAMhpC,EAAKmrL,SACPniJ,IACFhpC,EAAKo4D,gBAAkBpvB,EAAIxmC,WAGxBxC,EAAKo4D,iBAEd5lD,QAAS,WACP,IAAI0Y,EAAMzyB,KAAKwV,SACf,OAAOxV,KAAKm+R,cAAgB1rQ,EAAMA,EAAI/e,KAAO,OAE/Cu2C,WAAY,SAAU16C,EAAKjL,EAAM2J,GAC/B,IAAI1G,EAAOvH,KAAMsG,EAAWiB,EAAKjB,SACjC,OAAIA,EAASqhS,sBACJpgS,EAAKi5E,aAAa,wBAAyBjxE,EAAKtB,GAAK,EAAM3J,IAE/DgC,EAAS8uP,cAAgBnnP,GAAwB,SAAjBA,EAAIzD,UAAgD,IAAzB+E,EAAIrB,QAAQ,UAAiC,IAAfqB,EAAInG,OACzFmG,EAELjJ,EAAS+uP,cACJ9tP,EAAK0vB,gBAAgBktQ,WAAW50R,IAEzCA,EAAMhI,EAAK0vB,gBAAgBG,WAAW7nB,EAAKjJ,EAASgvP,oBAC7C/lP,IAETiuC,UAAW,SAAUvvC,GACnB,IAGIygN,EAHAnnN,EAAOvH,KACPsG,EAAWiB,EAAKjB,SAChB2L,EAAM1K,EAAK0K,IAEfhE,EAAMA,GAAO1G,EAAKwS,eACKuJ,IAAnB/b,EAAKqpP,YACPrpP,EAAKqpP,UAAYtqP,EAASkvP,QAE5BgxC,GAAOv0R,EAAIE,OAAO,UAAWlE,IAAM,SAAUA,GAC3C,IAAIvI,EACJ,OAAQuI,EAAIzD,UACZ,IAAK,QAQH,OAPAkkN,EAAMpoN,EAASshS,oBAAsB,iBACrCliS,EAAQuM,EAAImzC,UAAUn3C,EAAK,eACrBvI,GAAmB,MAAVA,IAAkB6B,EAAKqpP,UAGpC3+O,EAAIs+G,YAAYtiH,EAAKygN,GAFrBz8M,EAAI2+G,SAAS3iH,EAAKygN,IAKtB,IAAK,IAUH,YATKz8M,EAAImzC,UAAUn3C,EAAK,UACtBvI,EAAQuM,EAAImzC,UAAUn3C,EAAK,SAAWA,EAAItF,GAC1C+lN,EAAMpoN,EAASuhS,qBAAuB,kBAClCniS,GAAS6B,EAAKqpP,UAChB3+O,EAAI2+G,SAAS3iH,EAAKygN,GAElBz8M,EAAIs+G,YAAYtiH,EAAKygN,SAM7BnnN,EAAK4kC,KAAK,YAAa,CACrBliC,QAASgE,EACT2iP,UAAWrpP,EAAKqpP,aAGpB51O,OAAQ,WACNyoL,GAASzjM,OAEXkuC,QAAS,SAAUm4P,GACjBn4P,GAAQluC,KAAMqmS,IAEhB1kC,aAAc,SAAUl4P,GACtB,OAAOzJ,KAAK24C,aAAagpN,aAAal4P,IAExCkwC,eAAgB,WACd,OAAO35C,KAAK24C,aAAaipN,kBAG7B2kC,GAASI,GAAOt+R,UAAWyrP,IAE3B,IAwDIg0C,GAiFqBC,GAAsBC,GAzI3CC,GAAoB,SAAUh6R,GAChC,OAAqD,IAA9CA,EAAI3D,UAAUhC,WAAW4F,QAAQ,SAEtCg6R,GAAe,CAAED,kBAAmBA,IAEpCE,GAAqB,SAAUh0R,GACjC,MAAkB,eAAXA,EAAErM,MAAyBqM,EAAEyvP,iBAElCwkC,GAAsB,SAAU/hS,EAAQgiS,GAC1C,IAAIC,EAAc,WAChBD,EAAev7G,YAEjBgjC,GAAWjpN,IAAI4c,KAAKle,EAAWwE,SAAU,UAAWu+R,GACpDjiS,EAAOsO,GAAG,UAAU,WAClBm7M,GAAWjpN,IAAIu0E,OAAO71E,EAAWwE,SAAU,UAAWu+R,OAGtDC,GAAmB,SAAUliS,GAC/BA,EAAOsO,GAAG,YAAY,WACpBi6O,GAAkB7sJ,MAAM17F,OAGxBmiS,GAAkB,SAAUniS,EAAQgiS,GACtChiS,EAAOsO,GAAG,oBAAoB,SAAUR,GACtCk0R,EAAev7G,eAGf27G,GAAuB,SAAUpiS,EAAQgiS,GAC3C,IAAIhxO,EAAU6B,GAAoBvE,SAAS0C,QACvCA,EAAQzB,OACV2yO,GAAiBliS,GAEjBmiS,GAAgBniS,EAAQgiS,GAE1BhiS,EAAOsO,GAAG,oBAAoB,SAAUR,GACjCg0R,GAAmBh0R,IACtBy6O,GAAkB7sJ,MAAM17F,OAI1BqiS,GAAa,SAAUriS,GACzB,IAAIgiS,EAAiBplM,IAAM,WACzB2rJ,GAAkB7sJ,MAAM17F,KACvB,GACCA,EAAO4P,QACTmyR,GAAoB/hS,EAAQgiS,GAE9BhiS,EAAOsO,GAAG,QAAQ,WAChB8zR,GAAqBpiS,EAAQgiS,MAE/BhiS,EAAOsO,GAAG,UAAU,WAClB0zR,EAAeh1P,aAGfs1P,GAAmB,CAAEv0R,SAAUs0R,IAG/BE,GAAQ94E,GAAWjpN,IACnBgiS,GAAsB,SAAU56R,GAClC,OAAOi6R,GAAaD,kBAAkBh6R,IAEpC66R,GAAc,SAAUziS,EAAQ4H,GAClC,IAAI86R,EAAiB1iS,EAASA,EAAOC,SAAS0iS,mBAAqB,GAC/D5+R,EAASw+R,GAAMvrR,UAAUpP,GAAK,SAAUA,GAC1C,OAAO46R,GAAoB56R,MAAS86R,GAAiB1iS,EAAO4L,IAAIjO,GAAGiK,EAAK86R,MAE1E,OAAkB,OAAX3+R,GAEL6+R,GAAmB,WACrB,IACE,OAAO1jS,EAAWwE,SAASg6K,cAC3B,MAAO7oJ,GACP,OAAO31B,EAAWwE,SAAS2J,OAG3BgwJ,GAAiB,SAAU6vF,EAAep/O,GAC5C,IAAI9N,EAAS8N,EAAE9N,OACfsiS,GAAiBv0R,SAAS/N,GAC1BA,EAAOsO,GAAG,WAAW,WACnB,IAAIpN,EAAOvH,KACPwnS,EAAgBj0C,EAAci0C,cAC9BA,IAAkBjgS,IAChBigS,GACFA,EAAcr7P,KAAK,OAAQ,CAAEq7P,cAAejgS,IAE9CgsP,EAAc4F,UAAU5xP,GACxBgsP,EAAci0C,cAAgBjgS,EAC9BA,EAAK4kC,KAAK,QAAS,CAAE+8P,cAAe1B,IACpCjgS,EAAKsT,OAAM,OAGfxU,EAAOsO,GAAG,YAAY,WACpB,IAAIpN,EAAOvH,KACXiqM,GAAM/0K,iBAAiB3tB,GAAM,WAC3B,IAAIigS,EAAgBj0C,EAAci0C,cAC7BsB,GAAYvhS,EAAM0hS,OAAuBzB,IAAkBjgS,IAC9DA,EAAK4kC,KAAK,OAAQ,CAAEq7P,cAAe,OACnCj0C,EAAci0C,cAAgB,YAI/BM,KACHA,GAAyB,SAAU3zR,GACjC,IACI6C,EADAw8O,EAAeD,EAAcC,aAEjCx8O,EAAS7C,EAAE6C,OACPw8O,GAAgBx8O,EAAOu1B,gBAAkBhnC,EAAWwE,WAClDiN,IAAWzR,EAAWwE,SAAS2J,MAASo1R,GAAYt1C,EAAcx8O,IAAWu8O,EAAci0C,gBAAkBh0C,IAC/GA,EAAarnN,KAAK,OAAQ,CAAEq7P,cAAe,OAC3Cj0C,EAAci0C,cAAgB,QAIpCoB,GAAMnlR,KAAKle,EAAWwE,SAAU,UAAW+9R,MAG3CqB,GAA2B,SAAU51C,EAAep/O,GAClDo/O,EAAci0C,gBAAkBrzR,EAAE9N,SACpCktP,EAAci0C,cAAgB,MAE3Bj0C,EAAcC,eACjBo1C,GAAMxtN,OAAO71E,EAAWwE,SAAU,UAAW+9R,IAC7CA,GAAyB,OAGzBsB,GAAU,SAAU71C,GACtBA,EAAc5+O,GAAG,YAAakN,EAAM6hJ,GAAgB6vF,IACpDA,EAAc5+O,GAAG,eAAgBkN,EAAMsnR,GAA0B51C,KAE/D81C,GAAkB,CACpB30R,MAAO00R,GACPnB,kBAAmBY,GACnBC,YAAaA,IAGXQ,GAAQx5E,GAAWjpN,IACnB0iS,GAAYtjS,GAAMoyM,QAASmxF,GAASvjS,GAAM4O,KAAM40R,GAAWxjS,GAAMyC,OACjEghS,GAAkB,EAAwCC,IAAoB,EAC9EC,GAAgB,GAChBn2C,GAAU,GACVo2C,GAAmB,SAAUlhS,GAC/B,MAAc,WAAPA,GAELmhS,GAAsB,SAAU31R,GAClC,IAAIrM,EAAOqM,EAAErM,KACb0hS,GAAOxB,GAAcriS,OAAO,SAAUU,GACpC,OAAQyB,GACR,IAAK,SACHzB,EAAO8lC,KAAK,eAAgBh4B,GAC5B,MACF,IAAK,SACH9N,EAAO8lC,KAAK,eAAgBh4B,GAC5B,WAIF41R,GAAqB,SAAU9/P,GAC7BA,IAAU0/P,KACR1/P,EACFmvK,GAASjyM,QAAQwN,GAAG,gBAAiBm1R,IAErC1wF,GAASjyM,QAAQqyC,IAAI,gBAAiBswP,IAExCH,GAAoB1/P,IAGpB+/P,GAAuB,SAAUC,GACnC,IAAIC,EAAaz2C,UACVm2C,GAAcK,EAAathS,IAClC,IAAK,IAAIe,EAAI,EAAGA,EAAIkgS,GAAcxgS,OAAQM,IACxC,GAAIkgS,GAAclgS,KAAOugS,EAAc,CACrCL,GAAc38R,OAAOvD,EAAG,GACxB,MAYJ,OATA+pP,GAAU7+O,EAAO6+O,IAAS,SAAUptP,GAClC,OAAO4jS,IAAiB5jS,KAEtB2hS,GAAcx0C,eAAiBy2C,IACjCjC,GAAcx0C,aAAeC,GAAQrqP,OAAS,EAAIqqP,GAAQ,GAAK,MAE7Du0C,GAAcR,gBAAkByC,IAClCjC,GAAcR,cAAgB,MAEzB0C,EAAW9gS,SAAWqqP,GAAQrqP,QAEnC+gS,GAAuB,SAAU9jS,GAQnC,OAPIA,GAAUA,EAAOssP,eAAiBtsP,EAAO6pH,gBAAkB7pH,EAAO0T,WAAWxP,aAC/Ey/R,GAAqB3jS,GACrBA,EAAOwtP,wBACPxtP,EAAO6nC,SAAQ,GACf7nC,EAAO6jC,SAAU,EACjB7jC,EAAS,MAEJA,GAET2hS,GAAgB,CACdpxC,gBAAiB,GACjBvkP,EAAG+mM,GACH3xL,aAAc,IACdC,aAAc,OACd0iR,YAAa,aACb32C,QAASm2C,GACTrI,KAAM1kC,GACNrJ,aAAc,KACdltP,SAAU,GACVoO,MAAO,WACL,IACIg9G,EAASk1K,EADTr/R,EAAOvH,KACmBijJ,EAAS,GACvC2jJ,EAAkBnD,GAAIj0D,mBAAmBjqO,EAAWwE,SAASwhD,UACzD,yBAAyBlhD,KAAKu8R,KAChCA,EAAkBA,EAAgB1+R,QAAQ,WAAY,IAAIA,QAAQ,gBAAiB,IAC9E,UAAUmC,KAAKu8R,KAClBA,GAAmB,MAGvB,IAAIyD,EAAUljS,OAAOpB,SAAWoB,OAAOmjS,eACvC,GAAID,EACF34K,EAAU24K,EAAQ/pJ,MAAQ+pJ,EAAQ34K,QAClCuxB,EAASonJ,EAAQpnJ,WACZ,CAEL,IADA,IAAI56C,EAAU9iG,EAAWwE,SAASsM,qBAAqB,UAC9C3M,EAAI,EAAGA,EAAI2+F,EAAQj/F,OAAQM,IAAK,CACvC,IAAIsuB,EAAMqwE,EAAQ3+F,GAAGsuB,KAAO,GAC5B,GAAY,KAARA,EAAJ,CAGA,IAAIuyQ,EAAYvyQ,EAAI7M,UAAU6M,EAAIzI,YAAY,MAC9C,GAAI,8CAA8CllB,KAAK2tB,GAAM,EACxB,IAA/BuyQ,EAAUr8R,QAAQ,UACpB+0I,EAAS,QAEXvxB,EAAU15F,EAAI7M,UAAU,EAAG6M,EAAIzI,YAAY,MAC3C,QAGJ,IAAKmiG,GAAWnsH,EAAWwE,SAAS09F,cAAe,CAC7CzvE,EAAMzyB,EAAWwE,SAAS09F,cAAczvE,KACf,IAAzBA,EAAI9pB,QAAQ,UACd+0I,EAAS,QAEXvxB,EAAU15F,EAAI7M,UAAU,EAAG6M,EAAIzI,YAAY,OAG/ChoB,EAAKmqH,QAAU,IAAI+xK,GAAImD,GAAiBxvQ,WAAWs6F,GACnDnqH,EAAKq/R,gBAAkBA,EACvBr/R,EAAKs/R,QAAU,IAAIpD,GAAIl8R,EAAKmqH,SAC5BnqH,EAAK07I,OAASA,EACdomJ,GAAgB30R,MAAMnN,IAExBszM,iBAAkB,SAAU+7C,GAC1B,IAAIjlC,EAAS1uE,EACb0uE,EAAUilC,EAAgB4zC,SACtB74E,IACF3xN,KAAK0xH,QAAU,IAAI+xK,GAAIzjS,KAAK4mS,iBAAiBxvQ,WAAWu6L,EAAQzpN,QAAQ,OAAQ,KAChFlI,KAAK6mS,QAAU,IAAIpD,GAAIzjS,KAAK0xH,UAE9BuxB,EAAS2zG,EAAgB3zG,OACrB2zG,EAAgB3zG,SAClBjjJ,KAAKijJ,OAASA,GAEhBjjJ,KAAK42P,gBAAkBA,EACvB,IAAI6zC,EAAiB7zC,EAAgB8zC,iBACrC,IAAK,IAAIpmS,KAAQmmS,EACft5E,GAAakB,cAAcnsM,KAAK5hB,GAAQmmS,EAAenmS,IAG3Dq9H,KAAM,SAAUr7H,GACd,IACIvC,EAAQ4mS,EADRpjS,EAAOvH,KAEX2qS,EAAuB1kS,GAAMinE,QAAQ,iMAAuM,KAC5O,IAAI09N,EAAwB,SAAUtkS,EAAU2H,GAC9C,OAAO3H,EAAS2P,QAAUhI,EAAImJ,QAAQmT,gBAAiBogR,GAErDvyP,EAAW,SAAUnqC,GACvB,IAAItF,EAAKsF,EAAItF,GAUb,OATKA,IACHA,EAAKsF,EAAI3J,KAEPqE,EADEA,IAAO2gS,GAAM3jS,IAAIgD,GACdsF,EAAI3J,KAEJglS,GAAMltR,WAEbnO,EAAI0O,aAAa,KAAMhU,IAElBA,GAEL63E,EAAe,SAAUl8E,GAC3B,IAAImF,EAAWnD,EAAShC,GACxB,GAAKmF,EAGL,OAAOA,EAASyD,MAAM3F,EAAMyF,MAAM3E,UAAUoE,MAAMlE,KAAKY,UAAW,KAEhEkP,EAAW,SAAUpK,EAAK3D,GAC5B,OAAOA,EAAUga,cAAgB24B,OAAS3yC,EAAUD,KAAK4D,EAAI3D,WAAag/R,GAAMjxR,SAASpK,EAAK3D,IAE5FugS,EAAc,SAAUvkS,GAC1B,IAAItB,EAAGg/J,EAAU,GACjB,GAAIglC,GAAI3wK,IAAM2wK,GAAI3wK,GAAK,GAErB,OADAulO,GAAcD,UAAU,kKACjB,GAET,GAAIr3P,EAASqxE,MAIX,OAHA6xN,GAAOljS,EAASqxE,OAAO,SAAU7vE,GAC/Bk8J,EAAUA,EAAQ9hJ,OAAOonR,GAAMn3R,OAAOrK,EAAK0H,cAEtCw0J,EACF,GAAI19J,EAASkJ,SAClB,OAAO85R,GAAMn3R,OAAO7L,EAASkJ,UACxB,GAAIlJ,EAAS0Q,OAClB,MAAO,CAAC1Q,EAAS0Q,QAEnB,OAAQ1Q,EAAS6uF,MACjB,IAAK,QACHnwF,EAAIsB,EAASwD,UAAY,GACrB9E,EAAEoE,OAAS,GACbogS,GAAOD,GAAUvkS,IAAI,SAAU2D,GAC7B,IAAIsF,GACAA,EAAMq7R,GAAM3jS,IAAIgD,IAClBq7J,EAAQl3J,KAAKmB,GAEbu7R,GAAOjkS,EAAWwE,SAAS2e,OAAO,SAAUtG,GAC1ConR,GAAOpnR,EAAEtY,UAAU,SAAUqK,GACvBA,EAAE7P,OAASqE,IACbA,EAAK,cAAgB+gS,KACrBJ,GAAMp3R,UAAUiC,EAAG,KAAMxL,GACzBq7J,EAAQl3J,KAAKqH,aAOzB,MACF,IAAK,YACL,IAAK,qBACHq1R,GAAOF,GAAMn3R,OAAO,aAAa,SAAUlE,GACrC3H,EAASwkS,mBAAqBzyR,EAASpK,EAAK3H,EAASwkS,oBAGpDxkS,EAASykS,kBAAmB1yR,EAASpK,EAAK3H,EAASykS,kBACtD/mI,EAAQl3J,KAAKmB,MAGjB,MAEF,OAAO+1J,GAELgnI,EAAiB,SAAUv3C,GAC7B1vP,EAAS0vP,GAEPw3C,EAAc,WAChB,IAEIjnI,EAFAknI,EAAY,EACZz3C,EAAU,GAEV03C,EAAe,SAAUxiS,EAAIrC,EAAU8+D,GACzC,IAAI/+D,EAAS,IAAIsgS,GAAOh+R,EAAIrC,EAAUiB,GACtCksP,EAAQ3mP,KAAKzG,GACbA,EAAOsO,GAAG,QAAQ,aACVu2R,IAAclnI,EAAQ56J,QAC1B4hS,EAAev3C,MAGnBptP,EAAO++D,UAAY/+D,EAAO++D,WAAaA,EACvC/+D,EAAO2vB,UAETszQ,GAAMluN,OAAOj0E,OAAQ,QAAS8jS,GAC9BzqN,EAAa,cACbwjF,EAAUo1C,GAAS3nJ,OAAOo5O,EAAYvkS,IAClCA,EAASqxE,MACX6xN,GAAOljS,EAASqxE,OAAO,SAAU7vE,GAC/B7B,GAAM4O,KAAKmvJ,GAAS,SAAU/1J,GAC5B,OAAIq7R,GAAMtlS,GAAGiK,EAAKnG,EAAK0H,YACrB27R,EAAa/yP,EAASnqC,GAAMw7R,GAAS,GAAInjS,EAAUwB,GAAOmG,IACnD,UAOfhI,GAAM4O,KAAKmvJ,GAAS,SAAU/1J,GAC5Bk8R,GAAqB5iS,EAAK5B,IAAIsI,EAAItF,QAEpCq7J,EAAU/9J,GAAM4rB,KAAKmyI,GAAS,SAAU/1J,GACtC,OAAQ1G,EAAK5B,IAAIsI,EAAItF,OAEA,IAAnBq7J,EAAQ56J,OACV4hS,EAAe,IAEfxB,GAAOxlI,GAAS,SAAU/1J,GACpB28R,EAAsBtkS,EAAU2H,GAClC2vP,GAAcD,UAAU,sEAAuE1vP,GAE/Fk9R,EAAa/yP,EAASnqC,GAAM3H,EAAU2H,QAO9C,OAFA1G,EAAKjB,SAAWA,EAChBgjS,GAAM7lR,KAAKtc,OAAQ,QAAS8jS,GACrB,IAAI1hG,IAAW,SAAUrjM,GAC1BnC,EACFmC,EAAQnC,GAERinS,EAAiB,SAAUv3C,GACzBvtP,EAAQutP,QAKhB9tP,IAAK,SAAUgD,GACb,OAAyB,IAArBQ,UAAUC,OACLqqP,GAAQhnP,MAAM,GACZujD,EAASrnD,GACX2M,EAAKm+O,IAAS,SAAUptP,GAC7B,OAAOA,EAAOsC,KAAOA,KACpBoa,MAAM,MACAmtC,EAASvnD,IACX8qP,GAAQ9qP,GAAM8qP,GAAQ9qP,GAEtB,MAGXyE,IAAK,SAAU/G,GACb,IACI+kS,EADA7jS,EAAOvH,KAGX,OADAorS,EAAiBxB,GAAcvjS,EAAOsC,IAClCyiS,IAAmB/kS,IAGK,OAAxBkB,EAAK5B,IAAIU,EAAOsC,MACdkhS,GAAiBxjS,EAAOsC,MAC1BihS,GAAcvjS,EAAOsC,IAAMtC,GAE7BujS,GAAc98R,KAAKzG,GACnBotP,GAAQ3mP,KAAKzG,IAEf0jS,IAAmB,GACnBxiS,EAAKisP,aAAentP,EACpBkB,EAAK4kC,KAAK,YAAa,CAAE9lC,OAAQA,IAC5B0hS,KACHA,GAAuB,WACrBxgS,EAAK4kC,KAAK,iBAEZm9P,GAAM7lR,KAAKtc,OAAQ,eAAgB4gS,MAhB5B1hS,GAoBX8kS,aAAc,SAAUxiS,EAAIrC,GAC1B,OAAOtG,KAAKoN,IAAI,IAAIu5R,GAAOh+R,EAAIrC,EAAUtG,QAE3Cgb,OAAQ,SAAUxL,GAChB,IACI9F,EAAGrD,EADHkB,EAAOvH,KAEX,GAAKwP,EAAL,CAMA,IAAIwgD,EAASxgD,GAUb,OADAnJ,EAASmJ,EACL24L,EAAO5gM,EAAK5B,IAAIU,EAAOsC,KAClB,MAELqhS,GAAqB3jS,IACvBkB,EAAK4kC,KAAK,eAAgB,CAAE9lC,OAAQA,IAEf,IAAnBotP,GAAQrqP,QACVkgS,GAAMluN,OAAOj0E,OAAQ,eAAgB4gS,IAEvC1hS,EAAO2U,SACP+uR,GAAmBt2C,GAAQrqP,OAAS,GAC7B/C,GApBLmjS,GAAOF,GAAMn3R,OAAO3C,IAAW,SAAUvB,GACvC5H,EAASkB,EAAK5B,IAAIsI,EAAItF,IAClBtC,GACFkB,EAAKyT,OAAO3U,WAThB,IAAKqD,EAAI+pP,GAAQrqP,OAAS,EAAGM,GAAK,EAAGA,IACnCnC,EAAKyT,OAAOy4O,GAAQ/pP,KA2B1BoT,YAAa,SAAUpG,EAAK2mC,EAAI33C,GAC9B,IAAI6B,EAAOvH,KAAMqG,EAASkB,EAAK5B,IAAID,GACnC,OAAQgR,GACR,IAAK,eAIH,OAHKnP,EAAK5B,IAAID,IACZ,IAAIihS,GAAOjhS,EAAO6B,EAAKjB,SAAUiB,GAAMyuB,UAElC,EACT,IAAK,kBAIH,OAHI3vB,GACFA,EAAO2U,UAEF,EACT,IAAK,kBACH,OAAK3U,GAIDA,EAAOsoN,WACTtoN,EAAOmnC,OAEPnnC,EAAOonC,QAEF,IARLlmC,EAAKuV,YAAY,eAAgB,EAAGpX,IAC7B,GASX,QAAI6B,EAAKisP,cACAjsP,EAAKisP,aAAa12O,YAAYpG,EAAK2mC,EAAI33C,IAIlD+8R,YAAa,WACX+G,GAAO/1C,IAAS,SAAUptP,GACxBA,EAAO0tC,WAGXs3P,QAAS,SAAU5gS,EAAMkb,GACvBk3O,GAAKzvP,IAAI3C,EAAMkb,IAEjBjiB,UAAW,SAAUiI,GACnB,OAAOkxP,GAAKn5P,UAAUiI,IAExBwtP,UAAW,SAAU9yP,GACnB,IAAImtP,EAAexzP,KAAKwzP,aACpBxzP,KAAKwzP,eAAiBntP,IACpBmtP,GACFA,EAAarnN,KAAK,aAAc,CAAEihK,cAAe/mM,IAEnDA,EAAO8lC,KAAK,WAAY,CAAEihK,cAAeomD,KAE3CxzP,KAAKwzP,aAAentP,IAGxBojS,GAASzB,GAAej2C,IACxBi2C,GAActzR,QACd,IAAI42R,GAAkBtD,GAEtB,SAASuD,GAAWt5R,GAClB,IAAIk7D,EAAO,SAAUp9C,EAAKtmB,GACxB,OAAOg+N,GAAUt6J,KAAKl7D,EAAK8d,EAAKtmB,IAE9BpJ,EAAQ4kP,GAAW5kP,MACnBipG,EAAY,SAAUv5E,GACxB,OAAO68N,GAAetjJ,UAAUr3F,EAAK8d,GAAKlN,KAAK/R,GAAS,IAAQ,SAAU06R,GAGxE,OAFAz7Q,EAAIW,SAAS86Q,EAAcr7Q,eAAgBq7Q,EAAcl7Q,aACzDP,EAAIY,OAAO66Q,EAAcn8O,aAAcm8O,EAAcj7Q,YAC9C,MAGX,MAAO,CACL48C,KAAMA,EACN9sE,MAAOA,EACPipG,UAAWA,IAGd,SAAUiiM,GACTA,EAAWE,cAAgB//C,GAAarmB,KACxCkmE,EAAWluN,uBAAyBsoM,GAAoB5yN,UACxDw4O,EAAW7zE,gBAAkBA,GAC7B6zE,EAAW15R,QAAUA,IAJvB,CAKE05R,KAAeA,GAAa,KAC9B,IAgJIG,GAAaC,GAhJbC,GAAeL,GAEf3kS,GAAMD,KAAKC,IAAKqsB,GAAMtsB,KAAKssB,IAAK44Q,GAAUllS,KAAKu9B,MAC/C4nQ,GAAmB,SAAU9/P,EAAMugP,EAAYp2Q,GACjD,IAAI+F,EAAG7Z,EAAG0E,EAAGhF,EAAGgqS,EAASC,EAgCzB,OA/BA9vR,EAAIqwQ,EAAWrwQ,EACf7Z,EAAIkqR,EAAWlqR,EACf0E,EAAIilC,EAAKjlC,EACThF,EAAIiqC,EAAKjqC,EACTgqS,EAAUxf,EAAWxlR,EACrBilS,EAAUzf,EAAWxqR,EACrBoU,GAAOA,GAAO,IAAI9V,MAAM,IACT,MAAX8V,EAAI,KACN9T,GAAK2pS,GAEQ,MAAX71R,EAAI,KACN+F,GAAK6vR,GAEQ,MAAX51R,EAAI,KACN9T,GAAKwpS,GAAQG,EAAU,IAEV,MAAX71R,EAAI,KACN+F,GAAK2vR,GAAQE,EAAU,IAEV,MAAX51R,EAAI,KACN9T,GAAKN,GAEQ,MAAXoU,EAAI,KACN+F,GAAKnV,GAEQ,MAAXoP,EAAI,KACN9T,GAAKwpS,GAAQ9pS,EAAI,IAEJ,MAAXoU,EAAI,KACN+F,GAAK2vR,GAAQ9kS,EAAI,IAEZ0xL,GAASv8K,EAAG7Z,EAAG0E,EAAGhF,IAEvBkqS,GAA2B,SAAUjgQ,EAAMugP,EAAY2f,EAAeC,GACxE,IAAIrtP,EAAKp1C,EACT,IAAKA,EAAI,EAAGA,EAAIyiS,EAAK/iS,OAAQM,IAE3B,GADAo1C,EAAMgtP,GAAiB9/P,EAAMugP,EAAY4f,EAAKziS,IAC1Co1C,EAAI5iC,GAAKgwR,EAAchwR,GAAK4iC,EAAI5iC,EAAI4iC,EAAI/3C,GAAKmlS,EAAcnlS,EAAImlS,EAAchwR,GAAK4iC,EAAIz8C,GAAK6pS,EAAc7pS,GAAKy8C,EAAIz8C,EAAIy8C,EAAI/8C,GAAKmqS,EAAcnqS,EAAImqS,EAAc7pS,EACjK,OAAO8pS,EAAKziS,GAGhB,OAAO,MAELwlC,GAAU,SAAUlD,EAAMjlC,EAAGhF,GAC/B,OAAO02L,GAASzsJ,EAAK9vB,EAAInV,EAAGilC,EAAK3pC,EAAIN,EAAGiqC,EAAKjlC,EAAQ,EAAJA,EAAOilC,EAAKjqC,EAAQ,EAAJA,IAE/DqqS,GAAY,SAAUpgQ,EAAM+D,GAC9B,IAAIs8P,EAAIC,EAAIpmB,EAAID,EAKhB,OAJAomB,EAAKp5Q,GAAI+Y,EAAK9vB,EAAG6zB,EAAS7zB,GAC1BowR,EAAKr5Q,GAAI+Y,EAAK3pC,EAAG0tC,EAAS1tC,GAC1B6jR,EAAKt/Q,GAAIolC,EAAK9vB,EAAI8vB,EAAKjlC,EAAGgpC,EAAS7zB,EAAI6zB,EAAShpC,GAChDk/Q,EAAKr/Q,GAAIolC,EAAK3pC,EAAI2pC,EAAKjqC,EAAGguC,EAAS1tC,EAAI0tC,EAAShuC,GAC5CmkR,EAAKmmB,EAAK,GAAKpmB,EAAKqmB,EAAK,EACpB,KAEF7zG,GAAS4zG,EAAIC,EAAIpmB,EAAKmmB,EAAIpmB,EAAKqmB,IAEpCC,GAAU,SAAUvgQ,EAAMhB,EAAWwhQ,GACvC,IAAIC,EAAaC,EAAaC,EAAYC,EAAYP,EAAIC,EAAIpmB,EAAID,EAAI4mB,EAAKC,EAqB3E,OApBAT,EAAKrgQ,EAAK9vB,EACVowR,EAAKtgQ,EAAK3pC,EACV6jR,EAAKl6O,EAAK9vB,EAAI8vB,EAAKjlC,EACnBk/Q,EAAKj6O,EAAK3pC,EAAI2pC,EAAKjqC,EACnB8qS,EAAM7hQ,EAAU9uB,EAAI8uB,EAAUjkC,EAC9B+lS,EAAM9hQ,EAAU3oC,EAAI2oC,EAAUjpC,EAC9B0qS,EAAcx5Q,GAAI,EAAG+X,EAAU9uB,EAAImwR,GACnCK,EAAcz5Q,GAAI,EAAG+X,EAAU3oC,EAAIiqS,GACnCK,EAAa15Q,GAAI,EAAGizP,EAAK2mB,GACzBD,EAAa35Q,GAAI,EAAGgzP,EAAK6mB,GACzBT,GAAMI,EACNH,GAAMI,EACFF,IACFtmB,GAAMumB,EACNxmB,GAAMymB,EACNL,GAAMM,EACNL,GAAMM,GAER1mB,GAAMymB,EACN1mB,GAAM2mB,EACCn0G,GAAS4zG,EAAIC,EAAIpmB,EAAKmmB,EAAIpmB,EAAKqmB,IAEpC7zG,GAAW,SAAUv8K,EAAG7Z,EAAG0E,EAAGhF,GAChC,MAAO,CACLma,EAAGA,EACH7Z,EAAGA,EACH0E,EAAGA,EACHhF,EAAGA,IAGHgrS,GAAiB,SAAUh0E,GAC7B,OAAOtgC,GAASsgC,EAAWprL,KAAMorL,EAAWnrL,IAAKmrL,EAAWtgM,MAAOsgM,EAAWrgM,SAE5E4pK,GAAO,CACTpzJ,QAASA,GACT48P,iBAAkBA,GAClBG,yBAA0BA,GAC1BG,UAAWA,GACXtsQ,MAAOysQ,GACPr2R,OAAQuiL,GACRs0G,eAAgBA,IAGdp1N,GAAQ,GACRq1N,GAAU,CACZ5/R,IAAK,SAAUtF,EAAMmlS,GACnBt1N,GAAM7vE,EAAKyiB,eAAiB0iR,GAE9B/+Q,IAAK,SAAUpmB,GACb,QAAS6vE,GAAM7vE,EAAKyiB,gBAEtB5kB,IAAK,SAAUmC,GACb,IAAIolS,EAASplS,EAAKyiB,cACd4iR,EAAcx1N,GAAMnvE,eAAe0kS,GAAUv1N,GAAMu1N,GAAU,KACjE,GAAoB,OAAhBC,EACF,MAAM,IAAIhqR,MAAM,mCAAqCrb,GAEvD,OAAOqlS,GAETj3R,OAAQ,SAAUpO,EAAMxB,GACtB,IAAI8mS,EAUJ,GAToB,kBAATtlS,GACTxB,EAAWA,GAAY,GACvBA,EAASwB,KAAOA,IAEhBxB,EAAWwB,EACXA,EAAOxB,EAASwB,MAElBA,EAAOA,EAAKyiB,cACZ6iR,EAAcz1N,GAAM7vE,IACfslS,EACH,MAAM,IAAIjqR,MAAM,mCAAqCrb,GAIvD,OAFAslS,EAAc,IAAIA,EAAY9mS,GAC9B8mS,EAAYtlS,KAAOA,EACZslS,IAIPC,GAASpnS,GAAM4O,KAAMy4R,GAAWrnS,GAAMyC,OAEtC6kS,GAAQ,aAEZA,GAAM7kS,OAASgjS,GAAc,SAAUlmK,GACrC,IAEIn9H,EAAW/D,EAAMkpS,EAFjBjmS,EAAOvH,KACPuvC,EAAShoC,EAAKc,UAEdklS,EAAQ,WACV,IAAI7jS,EAAG+jS,EAAQC,EACXnmS,EAAOvH,KACX,IAAK2rS,KACCpkS,EAAKo6H,MACPp6H,EAAKo6H,KAAKz0H,MAAM3F,EAAM4B,WAExBskS,EAASlmS,EAAKomS,OACVF,GAAQ,CACV/jS,EAAI+jS,EAAOrkS,OACX,MAAOM,IACLgkS,EAAQD,EAAO/jS,GACXgkS,EAAM/rK,MACR+rK,EAAM/rK,KAAKz0H,MAAM3F,EAAM4B,aAM7Bi7F,EAAQ,WACV,OAAOpkG,MAELk/F,EAAe,SAAU56F,EAAMwd,GACjC,OAAO,WACL,IAEIxY,EAFA/B,EAAOvH,KACP2gJ,EAAMp5I,EAAKgoC,OAKf,OAHAhoC,EAAKgoC,OAASA,EAAOjrC,GACrBgF,EAAMwY,EAAG5U,MAAM3F,EAAM4B,WACrB5B,EAAKgoC,OAASoxG,EACPr3I,IA4CX,IAAKhF,KAzCLqnS,IAAe,EACftjS,EAAY,IAAId,EAChBokS,IAAe,EACXnmK,EAAKmoK,SACPN,GAAO7nK,EAAKmoK,QAAQ,SAAUD,GAC5B,IAAK,IAAIE,KAAUF,EACF,SAAXE,IACFpoK,EAAKooK,GAAUF,EAAME,OAIvBr+P,EAAOo+P,SACTnoK,EAAKmoK,OAASp+P,EAAOo+P,OAAOzrR,OAAOsjH,EAAKmoK,UAGxCnoK,EAAKqoK,SACPR,GAAO7nK,EAAKqoK,QAAQxtS,MAAM,MAAM,SAAUiE,GACxCkhI,EAAKlhI,GAAQ8/F,KAGbohC,EAAK7oC,YACP0wM,GAAO7nK,EAAK7oC,WAAWt8F,MAAM,MAAM,SAAUiE,GAC3C,IAAIwpS,EAAY,IAAMxpS,EACtBkhI,EAAKlhI,GAAQ,SAAUoB,GACrB,IAAI6B,EAAOvH,KACX,YAAcsjB,IAAV5d,GACF6B,EAAKumS,GAAapoS,EACX6B,GAEFA,EAAKumS,OAIdtoK,EAAKuoK,SACPV,GAAO7nK,EAAKuoK,SAAS,SAAU9lK,EAAM3jI,GACnCipS,EAAMjpS,GAAQ2jI,KAGdzC,EAAKj3F,UAAYgB,EAAOhB,WAC1Bi3F,EAAKj3F,SAAW++P,GAAS,GAAI/9P,EAAOhB,SAAUi3F,EAAKj3F,WAExCi3F,EACXgoK,EAAShoK,EAAKlhI,GACQ,oBAAXkpS,GAAyBj+P,EAAOjrC,GACzC+D,EAAU/D,GAAQ46F,EAAa56F,EAAMkpS,GAErCnlS,EAAU/D,GAAQkpS,EAMtB,OAHAD,EAAMllS,UAAYA,EAClBklS,EAAMjpR,YAAcipR,EACpBA,EAAM7kS,OAASgjS,GACR6B,GAGT,IAAIS,GAAQrnS,KAAKC,IAAKqnS,GAAQtnS,KAAKssB,IAAKi7Q,GAAUvnS,KAAKu9B,MACnDiqQ,GAAQ,SAAUzoS,GACpB,IAAI6B,EAAO,GACPwd,EAAI,EAAGqd,EAAI,EAAG5iB,EAAI,EAClB4uR,EAAU,SAAUrpR,EAAGqd,EAAG5iB,GAC5B,IAAIzd,EAAGJ,EAAGkE,EAAG5D,EAAGosS,EAAQC,EASxB,OARAvsS,EAAI,EACJJ,EAAI,EACJkE,EAAI,EACJkf,GAAQ,IACRqd,GAAQ,IACR5iB,GAAQ,IACR6uR,EAASL,GAAMjpR,EAAGipR,GAAM5rQ,EAAG5iB,IAC3B8uR,EAASL,GAAMlpR,EAAGkpR,GAAM7rQ,EAAG5iB,IACvB6uR,IAAWC,GACbzoS,EAAIwoS,EACG,CACLtsS,EAAG,EACHJ,EAAG,EACHkE,EAAO,IAAJA,KAGP5D,EAAI8iB,IAAMspR,EAASjsQ,EAAI5iB,EAAIA,IAAM6uR,EAAStpR,EAAIqd,EAAI5iB,EAAIuF,EACtDhjB,EAAIgjB,IAAMspR,EAAS,EAAI7uR,IAAM6uR,EAAS,EAAI,EAC1CtsS,EAAI,IAAMA,EAAIE,GAAKqsS,EAASD,IAC5B1sS,GAAK2sS,EAASD,GAAUC,EACxBzoS,EAAIyoS,EACG,CACLvsS,EAAGmsS,GAAQnsS,GACXJ,EAAGusS,GAAY,IAAJvsS,GACXkE,EAAGqoS,GAAY,IAAJroS,MAGX0oS,EAAW,SAAU3oQ,EAAK4oQ,EAAY7oQ,GACxC,IAAI1B,EAAMwqQ,EAAQvyR,EAAGpX,EAMrB,GALA8gC,GAAO7gC,SAAS6gC,EAAK,KAAO,GAAK,IACjC4oQ,EAAazpS,SAASypS,EAAY,IAAM,IACxC7oQ,EAAa5gC,SAAS4gC,EAAY,IAAM,IACxC6oQ,EAAaP,GAAM,EAAGD,GAAMQ,EAAY,IACxC7oQ,EAAasoQ,GAAM,EAAGD,GAAMroQ,EAAY,IACrB,IAAf6oQ,EAAJ,CAQA,OAJAvqQ,EAAO2B,EAAM,GACb6oQ,EAAS9oQ,EAAa6oQ,EACtBtyR,EAAIuyR,GAAU,EAAI9nS,KAAKyiH,IAAInlF,EAAO,EAAI,IACtCn/B,EAAQ6gC,EAAa8oQ,EACb9nS,KAAKi6B,MAAMqD,IACnB,KAAK,EACHlf,EAAI0pR,EACJrsQ,EAAIlmB,EACJsD,EAAI,EACJ,MACF,KAAK,EACHuF,EAAI7I,EACJkmB,EAAIqsQ,EACJjvR,EAAI,EACJ,MACF,KAAK,EACHuF,EAAI,EACJqd,EAAIqsQ,EACJjvR,EAAItD,EACJ,MACF,KAAK,EACH6I,EAAI,EACJqd,EAAIlmB,EACJsD,EAAIivR,EACJ,MACF,KAAK,EACH1pR,EAAI7I,EACJkmB,EAAI,EACJ5iB,EAAIivR,EACJ,MACF,KAAK,EACH1pR,EAAI0pR,EACJrsQ,EAAI,EACJ5iB,EAAItD,EACJ,MACF,QACE6I,EAAIqd,EAAI5iB,EAAI,EAEduF,EAAImpR,GAAQ,KAAOnpR,EAAIjgB,IACvBs9B,EAAI8rQ,GAAQ,KAAO9rQ,EAAIt9B,IACvB0a,EAAI0uR,GAAQ,KAAO1uR,EAAI1a,SA3CrBigB,EAAIqd,EAAI5iB,EAAI0uR,GAAQ,IAAMvoQ,IA6C1Bk5C,EAAQ,WACV,IAAI+qI,EAAM,SAAUtuL,GAElB,OADAA,EAAMv2B,SAASu2B,EAAK,IAAIhzB,SAAS,IAC1BgzB,EAAIlyB,OAAS,EAAIkyB,EAAM,IAAMA,GAEtC,MAAO,IAAMsuL,EAAI7kM,GAAK6kM,EAAIxnL,GAAKwnL,EAAIpqM,IAEjCkvR,EAAQ,WACV,MAAO,CACL3pR,EAAGA,EACHqd,EAAGA,EACH5iB,EAAGA,IAGHmvR,EAAQ,WACV,OAAOP,EAAQrpR,EAAGqd,EAAG5iB,IAEnB1R,EAAQ,SAAUpI,GACpB,IAAImN,EA2BJ,MA1BqB,kBAAVnN,EACL,MAAOA,GACTqf,EAAIrf,EAAMqf,EACVqd,EAAI18B,EAAM08B,EACV5iB,EAAI9Z,EAAM8Z,GACD,MAAO9Z,GAChB6oS,EAAS7oS,EAAM3D,EAAG2D,EAAM/D,EAAG+D,EAAMG,IAG/BgN,EAAU,8DAA8DxP,KAAKqC,KAC/Eqf,EAAIhgB,SAAS8N,EAAQ,GAAI,IACzBuvB,EAAIr9B,SAAS8N,EAAQ,GAAI,IACzB2M,EAAIza,SAAS8N,EAAQ,GAAI,MAChBA,EAAU,oCAAoCxP,KAAKqC,KAC5Dqf,EAAIhgB,SAAS8N,EAAQ,GAAI,IACzBuvB,EAAIr9B,SAAS8N,EAAQ,GAAI,IACzB2M,EAAIza,SAAS8N,EAAQ,GAAI,MAChBA,EAAU,2BAA2BxP,KAAKqC,MACnDqf,EAAIhgB,SAAS8N,EAAQ,GAAKA,EAAQ,GAAI,IACtCuvB,EAAIr9B,SAAS8N,EAAQ,GAAKA,EAAQ,GAAI,IACtC2M,EAAIza,SAAS8N,EAAQ,GAAKA,EAAQ,GAAI,KAG1CkS,EAAIA,EAAI,EAAI,EAAIA,EAAI,IAAM,IAAMA,EAChCqd,EAAIA,EAAI,EAAI,EAAIA,EAAI,IAAM,IAAMA,EAChC5iB,EAAIA,EAAI,EAAI,EAAIA,EAAI,IAAM,IAAMA,EACzBjY,GAST,OAPI7B,GACFoI,EAAMpI,GAER6B,EAAKmnS,MAAQA,EACbnnS,EAAKonS,MAAQA,EACbpnS,EAAKs3E,MAAQA,EACbt3E,EAAKuG,MAAQA,EACNvG,GAGLwkB,GAAY,SAAU5jB,EAAGymS,GAC3B,IAAIllS,EAAG7D,EAAGuL,EAAG9M,EAEb,GADAsqS,EAAQA,GAAS,IACP,OAANzmS,EACF,MAAO,OAGT,GADAiJ,SAAWjJ,EACD,WAANiJ,EAEF,OADAvL,EAAI,4BACG+oS,EAAQzmS,EAAED,QAAQ,qCAAqC,SAAU4Y,EAAGtB,GACzE,MAAc,MAAVovR,GAAuB,MAAN9tR,EACZA,GAETpX,EAAI7D,EAAEqI,QAAQsR,GACV9V,EAAI,EACC,KAAO7D,EAAEo6E,OAAOv2E,EAAI,IAE7BoX,EAAItB,EAAEqV,aAAavsB,SAAS,IACrB,MAAQ,OAAO6iB,UAAUrK,EAAE1X,QAAU0X,OACzC8tR,EAEP,GAAU,WAANx9R,EAAgB,CAClB,GAAIjJ,EAAEK,gBAAwD,mBAAtCJ,OAAOC,UAAUC,SAASC,KAAKJ,GAAyB,CAC9E,IAAKuB,EAAI,EAAG7D,EAAI,IAAK6D,EAAIvB,EAAEiB,OAAQM,IACjC7D,IAAM6D,EAAI,EAAI,IAAM,IAAMqiB,GAAU5jB,EAAEuB,GAAIklS,GAE5C,OAAO/oS,EAAI,IAGb,IAAKvB,KADLuB,EAAI,IACSsC,EACPA,EAAEK,eAAelE,KACnBuB,GAAwB,oBAAZsC,EAAE7D,IAAwBuB,EAAEuD,OAAS,EAAI,IAAMwlS,EAAQA,GAAStqS,EAAOsqS,EAAQ,IAAM7iR,GAAU5jB,EAAE7D,GAAOsqS,GAAS,IAGjI,OAAO/oS,EAAI,IAEb,MAAO,GAAKsC,GAEV0mS,GAAS,CACX9iR,UAAWA,GACXje,MAAO,SAAUnC,GACf,IACE,OAAOJ,KAAKuC,MAAMnC,GAClB,MAAOuvB,OAKT4zQ,GAAQ,CACVzhS,UAAW,GACX8O,MAAO,EACP8gB,KAAM,SAAU32B,GACd,IAAIiB,EAAOvH,KAAMiS,EAAM69M,GAAWjpN,IAAKsV,OAA2BmH,IAAnBhd,EAAS6V,MAAsB7V,EAAS6V,MAAQ5U,EAAK4U,MAChGxT,EAAK,iBAAmBwT,EAC5B5U,EAAK8F,UAAU8O,GAAS,SAAUw5B,GAChC1jC,EAAI+I,OAAOrS,UACJpB,EAAK8F,UAAU8O,GACtB7V,EAASmD,SAASksC,IAEpB1jC,EAAI7E,IAAI6E,EAAIwgB,IAAI/e,KAAM,SAAU,CAC9B/K,GAAIA,EACJqvB,IAAK1xB,EAASiJ,IACdzH,KAAM,oBAERP,EAAK4U,UAIL4yR,GAAM,CACR9xQ,KAAM,SAAU32B,GACd,IAAIi2B,EAAKpgB,EAAQ,EACb6yR,EAAQ,YACL1oS,EAASuD,OAA4B,IAAnB0yB,EAAIyZ,YAAoB75B,IAAU,KACnD7V,EAASw2C,SAAW3gC,EAAQ,KAAwB,MAAfogB,EAAII,OAC3Cr2B,EAASw2C,QAAQv0C,KAAKjC,EAAS2oS,cAAe,GAAK1yQ,EAAI+uB,aAAc/uB,EAAKj2B,GACjEA,EAAS+1B,OAClB/1B,EAAS+1B,MAAM9zB,KAAKjC,EAAS4oS,YAAa/yR,EAAQ,IAAQ,YAAc,UAAWogB,EAAKj2B,GAE1Fi2B,EAAM,MAENnC,WAAW40Q,EAAO,KAUtB,GAPA1oS,EAAS4iC,MAAQ5iC,EAAS4iC,OAASlpC,KACnCsG,EAAS2oS,cAAgB3oS,EAAS2oS,eAAiB3oS,EAAS4iC,MAC5D5iC,EAAS4oS,YAAc5oS,EAAS4oS,aAAe5oS,EAAS4iC,MACxD5iC,EAASuD,OAA2B,IAAnBvD,EAASuD,MAC1BvD,EAAS8E,KAAO9E,EAAS8E,MAAQ,GACjC2jS,GAAI5iQ,KAAK,mBAAoB,CAAE7lC,SAAUA,IACzCi2B,EAAMC,KACFD,EAAK,CAsBP,GArBIA,EAAI4yQ,kBACN5yQ,EAAI4yQ,iBAAiB7oS,EAASkgF,cAEhCjqD,EAAIvpB,KAAK1M,EAASwB,OAASxB,EAAS8E,KAAO,OAAS,OAAQ9E,EAASiJ,IAAKjJ,EAASuD,OAC/EvD,EAAS8oS,cACX7yQ,EAAIuZ,iBAAkB,GAEpBxvC,EAASkgF,cACXjqD,EAAI0Z,iBAAiB,eAAgB3vC,EAASkgF,cAE5ClgF,EAAS+oS,gBACXppS,GAAM4O,KAAKvO,EAAS+oS,gBAAgB,SAAU9hR,GAC5CgP,EAAI0Z,iBAAiB1oB,EAAO1pB,IAAK0pB,EAAO7nB,UAG5C62B,EAAI0Z,iBAAiB,mBAAoB,kBACzC1Z,EAAMwyQ,GAAI5iQ,KAAK,aAAc,CAC3B5P,IAAKA,EACLj2B,SAAUA,IACTi2B,IACHA,EAAIU,KAAK32B,EAAS8E,OACb9E,EAASuD,MACZ,OAAOmlS,IAET50Q,WAAW40Q,EAAO,OAIxB/oS,GAAMyC,OAAOqmS,GAAKh9C,IAElB,IAAIu9C,GAAWrpS,GAAMyC,OACjB6mS,GAAc,SAAUjpS,GAC1BtG,KAAKsG,SAAWgpS,GAAS,GAAIhpS,GAC7BtG,KAAKmc,MAAQ,GAEfozR,GAAYC,QAAU,SAAUrnS,GAC9B,OAAO,IAAIonS,IAActyQ,KAAK90B,IAEhConS,GAAYlnS,UAAY,CACtB40B,KAAM,SAAUpwB,GACd,IAAI4iS,EAAM5iS,EAAKwvB,MAAOqzQ,EAAM7iS,EAAKiwC,QACjCjwC,EAAOyiS,GAAStvS,KAAKsG,SAAUuG,GAC/BA,EAAKiwC,QAAU,SAAUzsC,EAAG6L,GAC1B7L,EAAIw+R,GAAO/gS,MAAMuC,GACA,qBAANA,IACTA,EAAI,CAAEgsB,MAAO,sBAEXhsB,EAAEgsB,MACJozQ,EAAIlnS,KAAKsE,EAAKqiS,aAAeriS,EAAKq8B,MAAO74B,EAAEgsB,MAAOngB,GAElDwzR,EAAInnS,KAAKsE,EAAKoiS,eAAiBpiS,EAAKq8B,MAAO74B,EAAEtM,SAGjD8I,EAAKwvB,MAAQ,SAAUoqK,EAAIvqL,GACrBuzR,GACFA,EAAIlnS,KAAKsE,EAAKqiS,aAAeriS,EAAKq8B,MAAOu9J,EAAIvqL,IAGjDrP,EAAKzB,KAAOyjS,GAAO9iR,UAAU,CAC3BpjB,GAAIkE,EAAKlE,IAAM,IAAM3I,KAAKmc,QAC1BiqE,OAAQv5E,EAAKu5E,OACb47E,OAAQn1J,EAAKm1J,SAEfn1J,EAAK25E,aAAe,mBACpBuoN,GAAI9xQ,KAAKpwB,KAIb,IAuCI8iS,GAvCAh3G,GAAW,WACb,OAAO,WACL,IAAIvtL,EAAO,GACPya,EAAO,GACP+pR,EAAU,CACZC,QAAS,SAAUhsS,GACjB,IAAIu8C,EAAOh1C,EAAKvH,GAChB,OAAOu8C,GAAc,MAEvB0vP,QAAS,SAAUjsS,EAAK6B,GACtBmgB,EAAK/Y,KAAKjJ,GACVuH,EAAKvH,GAAO0gB,OAAO7e,IAErB7B,IAAK,SAAU2I,GACb,OAAOqZ,EAAKrZ,IAEdujS,WAAY,SAAUlsS,GACpBgiB,EAAOA,EAAKjR,QAAO,SAAUiZ,GAC3B,OAAOA,IAAMhqB,YAERuH,EAAKvH,IAEdqzE,MAAO,WACLrxD,EAAO,GACPza,EAAO,IAEThC,OAAQ,GASV,OAPAhB,OAAO2sF,eAAe66M,EAAS,SAAU,CACvCjqS,IAAK,WACH,OAAOkgB,EAAKzc,QAEdkzF,cAAc,EACdtH,YAAY,IAEP46M,EAlCF,IAuCT,IACED,GAAepqS,EAAW4B,OAAOwoS,aACjC,MAAOx7R,IACPw7R,GAAeh3G,KAEjB,IAAIq3G,GAAeL,GAEf5pS,GAAUulS,GACV2E,GAAY,CACdC,KAAM,CAAE5tG,KAAMA,IACdt8L,KAAM,CACJ0zB,QAAS6vK,GACTU,MAAOA,GACPhkM,MAAOA,GACP89P,GAAIA,GACJ0/B,IAAKA,GACL8J,MAAOA,GACP4C,gBAAiB/+C,GACjBW,WAAYA,GACZ8K,KAAMA,GACNkyC,IAAKA,GACLxjS,KAAMsjS,GACNU,YAAaA,GACbT,MAAOA,GACPkB,aAAcA,GACd7B,MAAOA,IAETl8R,IAAK,CACHq6L,WAAYA,GACZmE,OAAQA,GACR2I,SAAUA,GACVqF,WAAYA,GACZ6N,SAAUwD,GACVI,aAAcA,GACdq7E,WAAYK,GACZwE,WAAYluB,GACZQ,iBAAkBA,GAClBN,gBAAiBE,GACjB7vN,UAAWu3N,GACXx/F,MAAO8hB,GAAW9hB,OAEpBv7K,KAAM,CACJ49J,OAAQA,GACRo3C,SAAUA,GACV9vJ,KAAM6pN,GACN54D,OAAQA,GACR0nD,UAAW8B,GACX+Q,UAAWA,GACXzzC,OAAQA,GACRkkE,WAAY3jE,IAEdpvL,GAAI,CAAE2vP,QAASA,IACfhkG,IAAKA,GACLmoB,aAAcA,GACd0X,UAAWA,GACX2zC,UAAWA,GACXtK,YAAaA,GACbxiB,eAAgBA,GAChByM,cAAeA,GACfhB,oBAAqBA,GACrBzH,iBAAkBI,GAClBqE,UAAWA,GACXwuC,OAAQA,GACRuB,aAAcA,GACdF,cAAesD,GACfzkS,IAAKipN,GAAWjpN,IAChBqpN,aAAcA,GAAaA,aAC3BmC,cAAelB,GAAakB,cAC5BC,aAAcnB,GAAamB,aAC3Br9M,KAAMhP,GAAMgP,KACZ0c,QAAS1rB,GAAM0rB,QACf3tB,GAAIiC,GAAMjC,GACV8f,QAAS7d,GAAM6d,QACfopD,QAASjnE,GAAMinE,QACfr4D,KAAM5O,GAAM4O,KACZ5M,IAAKhC,GAAMgC,IACX4pB,KAAM5rB,GAAM4rB,KACZymB,QAASryC,GAAMqyC,QACf5vC,OAAQzC,GAAMyC,OACdwN,OAAQjQ,GAAMiQ,OACdi3D,KAAMlnE,GAAMknE,KACZ6qI,SAAU/xM,GAAM+xM,SAChB9xM,QAASD,GAAMC,QACfmyM,QAASpyM,GAAMoyM,QACfC,gBAAiBryM,GAAMqyM,gBACvBziJ,QAASmzI,GAAI9zI,MACbwlO,SAAU1xF,GAAI9uH,OACdtkB,KAAMozI,GAAI3wK,GACVoiQ,QAASzxF,GAAI/tH,MACbo1N,MAAOrnG,GAAI9jL,KAEbnf,GAAUE,GAAMyC,OAAO3C,GAASkqS,IAChC,IAAIK,GAAUvqS,GAEVwqS,GAAwB,SAAUxqS,GAElC,IACEiiE,EAAOC,QAAUliE,EACjB,MAAO2B,MAIT8oS,GAAuB,SAAUzqS,GACnCoB,OAAOpB,QAAUA,EACjBoB,OAAOspS,QAAU1qS,GAEnByqS,GAAqBF,IACrBC,GAAsBD,KA1y1B1B,CA4y1BEnpS,SA7y1BF,K,0CCDA,YACsB,WAClB,aAEA,IAAIrH,EAASiG,QAAQC,KAAKC,MAAMC,QAAQ,yBAEpCC,EAAWJ,QAAQC,KAAKC,MAAMC,QAAQ,sBAEtCwqS,EAAS,SAAUrqS,EAAQmlB,GAC7B,IACImlR,EADA1+R,EAAM5L,EAAO4L,IAEbq6D,EAASjmE,EAAOuL,UAAUw/C,oBAC1Bkb,EAAOljE,SACTunS,EAAS1+R,EAAImzC,UAAUknB,EAAO,GAAI,OAClCnmE,EAAS0O,KAAKy3D,GAAQ,SAAUp5C,GACzBjhB,EAAIoL,UAAU6V,EAAM3oB,WAAY,UAAYihB,EAAM,KAAMvZ,EAAI06C,YAC/D16C,EAAIC,UAAUghB,EAAO,MAAOy9Q,IAAWnlR,EAAMA,EAAM,SAGvDnlB,EAAOyU,gBAGP4lK,EAAY,CAAEgwH,OAAQA,GAEtBt8R,EAAW,SAAU/N,GACvBA,EAAOgO,WAAW,mBAAmB,WACnCqsK,EAAUgwH,OAAOrqS,EAAQ,UAE3BA,EAAOgO,WAAW,mBAAmB,WACnCqsK,EAAUgwH,OAAOrqS,EAAQ,WAGzBoO,EAAW,CAAEL,SAAUA,GAEvB0D,EAAmB,SAAU0T,GAC/B,IAAIhc,EAAW,GAIf,OAHArJ,EAAS0O,KAAK,0BAA0BxU,MAAM,MAAM,SAAUiE,GAC5DkL,EAAS1C,KAAKxI,EAAO,QAAUknB,EAAM,QAEhChc,EAASlC,KAAK,MAEnBkJ,EAAa,SAAUnQ,GACzBA,EAAOoQ,UAAU,MAAO,CACtB1H,MAAO,gBACP2H,IAAK,kBACL02C,cAAet1C,EAAiB,SAElCzR,EAAOoQ,UAAU,MAAO,CACtB1H,MAAO,gBACP2H,IAAK,kBACL02C,cAAet1C,EAAiB,UAGhCjB,EAAU,CAAEzC,SAAUoC,GAM1B,SAASM,KAJThX,EAAOsN,IAAI,kBAAkB,SAAU/G,GACrCoO,EAASL,SAAS/N,GAClBwQ,EAAQzC,SAAS/N,OAxDF,IADrB,I,qBCMA,EAAQ,S,oBCNR,YACgB,SAAUd,GACtB,aAEA,IAAIC,EAAO,SAAUC,GACnB,IAAIC,EAAQD,EACRE,EAAM,WACR,OAAOD,GAELE,EAAM,SAAUC,GAClBH,EAAQG,GAENC,EAAQ,WACV,OAAON,EAAKG,MAEd,MAAO,CACLA,IAAKA,EACLC,IAAKA,EACLE,MAAOA,IAIPhG,EAASiG,QAAQC,KAAKC,MAAMC,QAAQ,yBAEpCC,EAAWJ,QAAQC,KAAKC,MAAMC,QAAQ,6BAEtCkB,EAAWrB,QAAQC,KAAKC,MAAMC,QAAQ,sBAEtC0qS,EAAmB,SAAUvqS,GAC/B,OAAOA,EAAO8lC,KAAK,iBAEjB0kQ,EAAiB,SAAUxqS,GAC7B,OAAOA,EAAO8lC,KAAK,eAEjB2kQ,EAAkB,SAAUzqS,GAC9B,OAAOA,EAAO8lC,KAAK,gBAGjBr+B,EAAQ,SAAUijS,EAAYC,GAChC,IAAIC,EAAY,CACdtvS,EAAG,IACHE,EAAG,KAEDqvS,EAAUH,GAAcC,EACxBG,EAAa,iBAAiB9tS,KAAK,GAAK6tS,GAC5C,OAAQC,EAAW,GAAKF,EAAUE,EAAW,IAAM,GAAKpsS,SAASmsS,EAAS,KAGxEE,EAAwB,SAAU/qS,GACpC,OAAOA,EAAOW,SAAS,8BAA8B,IAEnDqqS,EAAoB,SAAUhrS,GAChC,IAAIkR,EAASlR,EAAOW,SAAS,kBAAmB,8CAKhD,OAJAuQ,EAASA,EAAOrP,QAAQ,YAAa3C,EAAWwE,SAASwhD,SAASu5O,UAClEvtR,EAASA,EAAOrP,QAAQ,aAAc3C,EAAWwE,SAASwhD,SAAS4M,QACnE5gD,EAASA,EAAOrP,QAAQ,YAAa3C,EAAWwE,SAASwhD,SAAS68C,MAClE7wF,EAASA,EAAOrP,QAAQ,UAAW7B,EAAOsC,IACnC4O,GAEL+5R,EAAyB,SAAUjrS,GACrC,OAAOA,EAAOW,SAAS,+BAA+B,IAEpDuqS,EAAsB,SAAUlrS,GAClC,OAAOyH,EAAMzH,EAAOC,SAASkrS,kBAAmB,QAE9CC,EAAuB,SAAUprS,GACnC,OAAOyH,EAAMzH,EAAOC,SAASorS,mBAAoB,QAG/CvpP,EAAU,SAAU9hD,EAAQ4I,GAC9B,IAAI4lR,EAAsBxuR,EAAOC,SAASi5D,kBAE1C,OADAtwD,EAAO7H,EAAS6N,KAAqB,qBAAThG,EAAuB5I,EAAO0T,UAAU1O,UAAY4D,GAChE,KAATA,GAAe,IAAIguC,OAAO,KAAO43O,EAAsB,0CAA+CA,EAAsB,UAAW,KAAKxqR,KAAK4E,IAEtJ0iS,EAAW,SAAUtrS,GACvB,IAAIq7I,EAAO38I,SAASoB,EAAS0pS,QAAQwB,EAAkBhrS,GAAU,QAAS,KAAO,EACjF,SAAI,IAAIqR,MAAOC,UAAY+pI,EAAO+vJ,EAAqBprS,MACrDurS,EAAYvrS,GAAQ,IACb,IAIPurS,EAAc,SAAUvrS,EAAQ8lC,GAClC,IAAI50B,EAAS85R,EAAkBhrS,GAC/BF,EAAS4pS,WAAWx4R,EAAS,SAC7BpR,EAAS4pS,WAAWx4R,EAAS,SAChB,IAAT40B,GACF2kQ,EAAgBzqS,IAGhBwrS,EAAa,SAAUxrS,GACzB,IAAIkR,EAAS85R,EAAkBhrS,IAC1B8hD,EAAQ9hD,IAAWA,EAAOk6E,YAC7Bp6E,EAAS2pS,QAAQv4R,EAAS,QAASlR,EAAOuxB,WAAW,CACnDtd,OAAQ,MACR+iQ,WAAW,KAEbl3Q,EAAS2pS,QAAQv4R,EAAS,QAAQ,IAAIG,MAAOC,UAAUrP,YACvDuoS,EAAexqS,KAGfyrS,EAAe,SAAUzrS,GAC3B,IAAIkR,EAAS85R,EAAkBhrS,GAC3BsrS,EAAStrS,KACXA,EAAOyhD,WAAW3hD,EAAS0pS,QAAQt4R,EAAS,SAAU,CAAE+C,OAAQ,QAChEs2R,EAAiBvqS,KAGjB0rS,EAAkB,SAAU1rS,EAAQ2rS,GACtC,IAAI/yL,EAAWsyL,EAAoBlrS,GAC9B2rS,EAAQrsS,QACXivE,aAAY,WACLvuE,EAAO6jC,SACV2nQ,EAAWxrS,KAEZ44G,GACH+yL,EAAQpsS,KAAI,KAGZqsS,EAAmB,SAAU5rS,GAC/BA,EAAO0L,YAAYC,UAAS,WAC1B8/R,EAAazrS,GACburS,EAAYvrS,MAEdA,EAAOwU,SAGT,SAASgH,EAAMC,GAEb,IADA,IAAIC,EAAc,GACTC,EAAK,EAAGA,EAAK7Y,UAAUC,OAAQ4Y,IACtCD,EAAYC,EAAK,GAAK7Y,UAAU6Y,GAElC,OAAO,WAEL,IADA,IAAIC,EAAW,GACND,EAAK,EAAGA,EAAK7Y,UAAUC,OAAQ4Y,IACtCC,EAASD,GAAM7Y,UAAU6Y,GAE3B,IAAI7U,EAAM4U,EAAYG,OAAOD,GAC7B,OAAOH,EAAG5U,MAAM,KAAMC,IAI1B,IAAIxH,EAAM,SAAUU,GAClB,MAAO,CACLsrS,SAAU9vR,EAAM8vR,EAAUtrS,GAC1BwrS,WAAYhwR,EAAMgwR,EAAYxrS,GAC9ByrS,aAAcjwR,EAAMiwR,EAAczrS,GAClCurS,YAAa/vR,EAAM+vR,EAAavrS,GAChC8hD,QAAStmC,EAAMsmC,EAAS9hD,KAIxB4Q,EAAWlR,QAAQC,KAAKC,MAAMC,QAAQ,yBAE1C+Q,EAASi7R,qBAAuB,WAC9B,IAAIhvR,EASJ,OARA9b,EAASyN,KAAKoC,EAAStR,OAAO,SAAUU,GAClCA,EAAOsD,QAAQwoS,UACjB9rS,EAAOsD,QAAQwoS,SAASN,cAErB3uR,GAAO7c,EAAOk6E,WAAa6wN,EAAsB/qS,KACpD6c,EAAM7c,EAAO3C,UAAU,wEAGpBwf,GAET,IAAIxO,EAAQ,SAAUrO,GACpBd,EAAW4B,OAAOirS,eAAiBn7R,EAASi7R,sBAG1C5iQ,EAAa,SAAUjpC,EAAQ2rS,GACjC,OAAO,SAAU79R,GACf,IAAIuF,EAAOvF,EAAEwF,QACbD,EAAKE,UAAU+3R,EAAStrS,IACxBA,EAAOsO,GAAG,uCAAuC,WAC/C+E,EAAKE,UAAU+3R,EAAStrS,OAE1B0rS,EAAgB1rS,EAAQ2rS,KAGxB59R,EAAW,SAAU/N,EAAQ2rS,GAC/B3rS,EAAOoQ,UAAU,eAAgB,CAC/B1H,MAAO,qBACPoP,QAAS,WACP8zR,EAAiB5rS,IAEnB6T,aAAco1B,EAAWjpC,EAAQ2rS,KAEnC3rS,EAAOsQ,YAAY,eAAgB,CACjChL,KAAM,qBACNwS,QAAS,WACP8zR,EAAiB5rS,IAEnB6T,aAAco1B,EAAWjpC,EAAQ2rS,GACjC73R,QAAS,UAeb,SAASrD,KAXThX,EAAOsN,IAAI,YAAY,SAAU/G,GAC/B,IAAI2rS,EAAUxsS,GAAK,GAQnB,OAPAkP,IACAN,EAAS/N,EAAQ2rS,GACjB3rS,EAAOsO,GAAG,QAAQ,WACZ28R,EAAuBjrS,IAAWA,EAAO4L,IAAIk2C,QAAQ9hD,EAAO0T,YAC9D+3R,EAAazrS,MAGVV,EAAIU,OA9MF,CAqNbc,SAtNF,I,oBCAA,YACU,WACN,aAEA,IAAIrH,EAASiG,QAAQC,KAAKC,MAAMC,QAAQ,yBAEpCkO,EAAW,SAAU/N,GACvBA,EAAOgO,WAAW,wBAAwB,WACxChO,EAAOyW,YAAY,oBAAoB,EAAO,cAG9CrI,EAAW,CAAEL,SAAUA,GAEvBoC,EAAa,SAAUnQ,GACzBA,EAAOoQ,UAAU,KAAM,CACrBG,KAAM,KACNqD,QAAS,kBACTvD,IAAK,yBAEPrQ,EAAOsQ,YAAY,KAAM,CACvBC,KAAM,KACNjL,KAAM,kBACN+K,IAAK,uBACLyD,QAAS,YAGTtD,EAAU,CAAEzC,SAAUoC,GAM1B,SAASM,KAJThX,EAAOsN,IAAI,MAAM,SAAU/G,GACzBoO,EAASL,SAAS/N,GAClBwQ,EAAQzC,SAAS/N,OA7Bd,IADT,I,sBCKE,SAAUvG,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;IAAIkhB,EAAa,CACbC,MAAO,CAEHxf,GAAI,CAAC,UAAW,UAAW,WAC3BC,EAAG,CAAC,cAAe,iBACnBC,GAAI,CAAC,QAAS,SAAU,UACxBC,EAAG,CAAC,YAAa,eACjBC,GAAI,CAAC,MAAO,OAAQ,QACpBC,EAAG,CAAC,YAAa,eACjBC,GAAI,CAAC,MAAO,OAAQ,QACpBC,EAAG,CAAC,cAAe,iBACnBC,GAAI,CAAC,QAAS,SAAU,UACxBC,EAAG,CAAC,eAAgB,gBACpBC,GAAI,CAAC,SAAU,SAAU,WAE7B+e,uBAAwB,SAAU1d,EAAQ2d,GACtC,OACI3d,EAAS,IAAM,GACfA,EAAS,IAAM,IACdA,EAAS,IAAM,IAAMA,EAAS,KAAO,IAE/BA,EAAS,KAAO,EAAI2d,EAAQ,GAAKA,EAAQ,GAE7CA,EAAQ,IAEnB5d,UAAW,SAAUC,EAAQC,EAAeC,EAAKC,GAC7C,IACIyd,EADAD,EAAUH,EAAWC,MAAMvd,GAG/B,OAAmB,IAAfA,EAAIuF,OAEQ,MAARvF,GAAeD,EAAsB,eAClCE,GAAYF,EAAgB0d,EAAQ,GAAKA,EAAQ,IAG5DC,EAAOJ,EAAWE,uBAAuB1d,EAAQ2d,GAErC,OAARzd,GAAgBD,GAA0B,WAAT2d,EAC1B5d,EAAS,UAGbA,EAAS,IAAM4d,KAI1B8gL,EAAKpiM,EAAOE,aAAa,KAAM,CAC/BC,OAAQ,mFAAmFC,MACvF,KAEJC,YACI,2DAA2DD,MAAM,KACrEsC,kBAAkB,EAClBpC,SAAU,wDAAwDF,MAC9D,KAEJG,cAAe,qCAAqCH,MAAM,KAC1DI,YAAa,uBAAuBJ,MAAM,KAC1Cye,oBAAoB,EACpBpe,eAAgB,CACZC,GAAI,OACJC,IAAK,UACLC,EAAG,cACHC,GAAI,gBACJC,IAAK,qBACLC,KAAM,4BAEVC,SAAU,CACNC,QAAS,eACTC,QAAS,eACTC,SAAU,WACN,OAAQpB,KAAKyhB,OACT,KAAK,EACD,MAAO,uBACX,KAAK,EACD,MAAO,qBACX,KAAK,EACD,MAAO,sBACX,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACD,MAAO,oBAGnBpgB,QAAS,cACTC,SAAU,WACN,IAAIogB,EAAe,CACf,4BACA,gCACA,4BACA,0BACA,8BACA,2BACA,4BAEJ,OAAOA,EAAa1hB,KAAKyhB,QAE7BlgB,SAAU,KAEdC,aAAc,CACVC,OAAQ,QACRC,KAAM,SACNC,EAAG,mBACHC,GAAIuf,EAAWzd,UACf7B,EAAGsf,EAAWzd,UACd5B,GAAIqf,EAAWzd,UACf3B,EAAGof,EAAWzd,UACd1B,GAAImf,EAAWzd,UACfzB,EAAGkf,EAAWzd,UACdxB,GAAIif,EAAWzd,UACfvB,EAAGgf,EAAWzd,UACdtB,GAAI+e,EAAWzd,UACfrB,EAAG8e,EAAWzd,UACdpB,GAAI6e,EAAWzd,WAEnBJ,uBAAwB,YACxBC,QAAS,MACThB,KAAM,CACFC,IAAK,EACLC,IAAK,KAIb,OAAO4/L,M,sBCpIT,SAAUviM,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAMzB;IAAIoyS,EAAMpyS,EAAOE,aAAa,MAAO,CACjCC,OAAQ,sFAAsFC,MAC1F,KAEJC,YAAa,kDAAkDD,MAAM,KACrEE,SAAU,sDAAsDF,MAAM,KACtEG,cAAe,8BAA8BH,MAAM,KACnDI,YAAa,uBAAuBJ,MAAM,KAC1CK,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,wBACJC,IAAK,8BACLC,KAAM,0CAEV4B,cAAe,aACfwC,KAAM,SAAUP,GACZ,MAAO,QAAUA,EAAM0lB,eAE3BxnB,SAAU,SAAUgc,EAAO8B,EAAS5d,GAChC,OAAI8b,EAAQ,GACD9b,EAAU,MAAQ,MAElBA,EAAU,MAAQ,OAGjChC,SAAU,CACNC,QAAS,cACTC,QAAS,cACTC,SAAU,cACVC,QAAS,eACTC,SAAU,8BACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,YACRC,KAAM,OACNC,EAAGud,EACHtd,GAAIsd,EACJrd,EAAGqd,EACHpd,GAAIod,EACJnd,EAAGmd,EACHld,GAAIkd,EACJjd,EAAGid,EACHhd,GAAIgd,EACJ/c,EAAG+c,EACH9c,GAAI8c,EACJ7c,EAAG6c,EACH5c,GAAI4c,GAER5b,uBAAwB,YACxBC,QAAS,MACThB,KAAM,CACFC,IAAK,EACLC,IAAK,KAIb,SAASyc,EAAoBvb,EAAQC,EAAeC,EAAKC,GACrD,IAAIwW,EAAS,CACT3Y,EAAG,CAAC,kBAAmB,mBACvBC,GAAI,CAAC+B,EAAS,WAAiBA,EAAS,YACxC9B,EAAG,CAAC,UAAW,cACfC,GAAI,CAAC6B,EAAS,SAAeA,EAAS,UACtC5B,EAAG,CAAC,UAAW,eACfC,GAAI,CAAC2B,EAAS,SAAeA,EAAS,UACtC1B,EAAG,CAAC,UAAW,eACfC,GAAI,CAACyB,EAAS,SAAeA,EAAS,UACtCxB,EAAG,CAAC,SAAU,aACdC,GAAI,CAACuB,EAAS,SAAeA,EAAS,UACtCtB,EAAG,CAAC,QAAS,YACbC,GAAI,CAACqB,EAAS,OAAaA,EAAS,SAExC,OAAOG,GAEDF,EADA0W,EAAOzW,GAAK,GAGZyW,EAAOzW,GAAK,GAGtB,OAAOwuS,M,sBC7FT,SAAUvyS,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;IAAIqyS,EAAe,iDAAiDjyS,MAAM,KAE1E,SAASkyS,EAAgBpvS,GACrB,IAAIu+I,EAAOv+I,EASX,OARAu+I,GAC+B,IAA3Bv+I,EAAO+K,QAAQ,OACTwzI,EAAKj1I,MAAM,GAAI,GAAK,OACO,IAA3BtJ,EAAO+K,QAAQ,OACfwzI,EAAKj1I,MAAM,GAAI,GAAK,OACO,IAA3BtJ,EAAO+K,QAAQ,OACfwzI,EAAKj1I,MAAM,GAAI,GAAK,MACpBi1I,EAAO,OACVA,EAGX,SAAS8wJ,EAAcrvS,GACnB,IAAIu+I,EAAOv+I,EASX,OARAu+I,GAC+B,IAA3Bv+I,EAAO+K,QAAQ,OACTwzI,EAAKj1I,MAAM,GAAI,GAAK,OACO,IAA3BtJ,EAAO+K,QAAQ,OACfwzI,EAAKj1I,MAAM,GAAI,GAAK,OACO,IAA3BtJ,EAAO+K,QAAQ,OACfwzI,EAAKj1I,MAAM,GAAI,GAAK,MACpBi1I,EAAO,OACVA,EAGX,SAASh+I,EAAUC,EAAQC,EAAe6L,EAAQ3L,GAC9C,IAAI2uS,EAAaC,EAAa/uS,GAC9B,OAAQ8L,GACJ,IAAK,KACD,OAAOgjS,EAAa,OACxB,IAAK,KACD,OAAOA,EAAa,OACxB,IAAK,KACD,OAAOA,EAAa,OACxB,IAAK,KACD,OAAOA,EAAa,OACxB,IAAK,KACD,OAAOA,EAAa,OACxB,IAAK,KACD,OAAOA,EAAa,QAIhC,SAASC,EAAa/uS,GAClB,IAAIgvS,EAAUhsS,KAAKi6B,MAAOj9B,EAAS,IAAQ,KACvCivS,EAAMjsS,KAAKi6B,MAAOj9B,EAAS,IAAO,IAClC2rJ,EAAM3rJ,EAAS,GACf4d,EAAO,GAUX,OATIoxR,EAAU,IACVpxR,GAAQ+wR,EAAaK,GAAW,SAEhCC,EAAM,IACNrxR,IAAkB,KAATA,EAAc,IAAM,IAAM+wR,EAAaM,GAAO,OAEvDtjJ,EAAM,IACN/tI,IAAkB,KAATA,EAAc,IAAM,IAAM+wR,EAAahjJ,IAEpC,KAAT/tI,EAAc,OAASA,EAGlC,IAAIsxR,EAAM5yS,EAAOE,aAAa,MAAO,CACjCC,OAAQ,kMAAkMC,MACtM,KAEJC,YACI,0HAA0HD,MACtH,KAERsC,kBAAkB,EAClBpC,SAAU,2DAA2DF,MACjE,KAEJG,cACI,2DAA2DH,MAAM,KACrEI,YACI,2DAA2DJ,MAAM,KACrEK,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVC,SAAU,CACNC,QAAS,cACTC,QAAS,cACTC,SAAU,MACVC,QAAS,cACTC,SAAU,MACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ8wS,EACR7wS,KAAM8wS,EACN7wS,EAAG,UACHC,GAAI8B,EACJ7B,EAAG,UACHC,GAAI4B,EACJ3B,EAAG,UACHC,GAAI0B,EACJzB,EAAG,UACHC,GAAIwB,EACJvB,EAAG,UACHC,GAAIsB,EACJrB,EAAG,UACHC,GAAIoB,GAERJ,uBAAwB,YACxBC,QAAS,MACThB,KAAM,CACFC,IAAK,EACLC,IAAK,KAIb,OAAOowS,M,sBChIT,SAAU/yS,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;IAAI+nB,EAAY,CACRtI,EAAG,IACHK,EAAG,IACHI,EAAG,IACHC,EAAG,IACHT,EAAG,IACHW,EAAG,IACHN,EAAG,IACHJ,EAAG,IACHW,EAAG,IACH0H,EAAG,KAEPqN,EAAY,CACR,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,KAGTw9Q,EAAK7yS,EAAOE,aAAa,KAAM,CAC/BC,OAAQ,qJAAqJC,MACzJ,KAEJC,YACI,iEAAiED,MAC7D,KAERoe,iBAAkB,gBAClB9b,kBAAkB,EAClBpC,SACI,gFAAgFF,MAC5E,KAERG,cAAe,oDAAoDH,MAC/D,KAEJI,YAAa,6BAA6BJ,MAAM,KAChDK,eAAgB,CACZC,GAAI,SACJC,IAAK,YACLC,EAAG,aACHC,GAAI,cACJC,IAAK,sBACLC,KAAM,6BAEVC,SAAU,CACNC,QAAS,cACTC,QAAS,cACTC,SAAU,wBACVC,QAAS,YACTC,SAAU,4BACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,QACRC,KAAM,WACNC,EAAG,QACHC,GAAI,YACJC,EAAG,aACHC,GAAI,WACJC,EAAG,cACHC,GAAI,YACJC,EAAG,WACHC,GAAI,UACJC,EAAG,YACHC,GAAI,UACJC,EAAG,UACHC,GAAI,SAERimB,SAAU,SAAU9Y,GAChB,OAAOA,EAAOvH,QAAQ,iBAAiB,SAAUpD,GAC7C,OAAOwwB,EAAUxwB,OAGzB0jB,WAAY,SAAU/Y,GAClB,OAAOA,EAAOvH,QAAQ,OAAO,SAAUpD,GACnC,OAAOkjB,EAAUljB,OAGzBlC,cAAe,wCACfC,aAAc,SAAUC,EAAMC,GAI1B,OAHa,KAATD,IACAA,EAAO,GAGO,WAAbC,GAAyBD,GAAQ,GACpB,YAAbC,GAA0BD,EAAO,GACrB,YAAbC,EAEOD,EAAO,GAEPA,GAGfC,SAAU,SAAUD,EAAME,EAAQC,GAC9B,OAAIH,EAAO,EACA,SACAA,EAAO,GACP,UACAA,EAAO,GACP,UACAA,EAAO,GACP,UAEA,UAGfP,KAAM,CACFC,IAAK,EACLC,IAAK,KAIb,OAAOqwS,M,sBChIT,SAAUhzS,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;IAAI8yS,EAAO9yS,EAAOE,aAAa,QAAS,CACpCC,OAAQ,2FAA2FC,MAC/F,KAEJC,YAAa,kDAAkDD,MAAM,KACrEE,SACI,iFAAiFF,MAC7E,KAERG,cAAe,8BAA8BH,MAAM,KACnDI,YAAa,uBAAuBJ,MAAM,KAC1Cye,oBAAoB,EACpBpe,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,wBACJC,IAAK,mCACLC,KAAM,0CAEVC,SAAU,CACNC,QAAS,eACTC,QAAS,iBACTC,SAAU,eACVC,QAAS,gBACTC,SAAU,WACN,OAAsB,IAAftB,KAAKyhB,OAA8B,IAAfzhB,KAAKyhB,MAC1B,wBACA,yBAEVlgB,SAAU,KAEdC,aAAc,CACVC,OAAQ,QACRC,KAAM,QACNC,EAAG,kBACHC,GAAI,cACJC,EAAG,YACHC,GAAI,aACJC,EAAG,WACHC,GAAI,WACJC,EAAG,SACHC,GAAI,UACJC,EAAG,SACHC,GAAI,WACJC,EAAG,SACHC,GAAI,WAERgB,uBAAwB,WACxBC,QAAS,MACTyuF,YAAa,kBAGjB,OAAO+gN,M,qBClEX/qO,EAAOC,QAAU,IAA0B,2B,oBCA3C,YACmB,SAAU1iE,GACzB,aAEA,IAAIC,EAAO,SAAUC,GACnB,IAAIC,EAAQD,EACRE,EAAM,WACR,OAAOD,GAELE,EAAM,SAAUC,GAClBH,EAAQG,GAENC,EAAQ,WACV,OAAON,EAAKG,MAEd,MAAO,CACLA,IAAKA,EACLC,IAAKA,EACLE,MAAOA,IAIPhG,EAASiG,QAAQC,KAAKC,MAAMC,QAAQ,yBAEpCP,EAAM,SAAU8T,GAClB,IAAIu5R,EAAY,WACd,OAAOv5R,EAAY9T,OAErB,MAAO,CAAEqtS,UAAWA,IAElB/jR,EAAM,CAAEtpB,IAAKA,GAEbstS,EAAkB,SAAU5sS,EAAQ4jC,GACtC,OAAO5jC,EAAO8lC,KAAK,cAAe,CAAElC,MAAOA,KAEzC+/B,EAAS,CAAEipO,gBAAiBA,GAE5BrxR,EAAO,aAEP9Q,EAAW,SAAUpL,GACvB,OAAO,WACL,OAAOA,IAGP2c,EAAQvR,GAAS,GACjBwR,EAASxR,GAAS,GAElByR,EAAO,WACT,OAAOC,GAELA,EAAO,WACT,IAAIC,EAAK,SAAUta,GACjB,OAAOA,EAAEua,UAEPna,EAAO,SAAUoa,GACnB,OAAOA,KAELha,EAAK,SAAUlF,GACjB,OAAOA,GAELmf,EAAK,CACPC,KAAM,SAAUpf,EAAG9B,GACjB,OAAO8B,KAETO,GAAIqe,EACJS,OAAQT,EACRK,OAAQJ,EACRS,MAAOpa,EACPqa,WAAYza,EACZ0a,SAAU,SAAUC,GAClB,MAAM,IAAIC,MAAMD,GAAO,oCAEzBE,UAAWtS,EAAS,MACpBuS,eAAgBvS,OAASwS,GACzBC,GAAI5a,EACJ6a,QAASjb,EACTN,IAAKsa,EACL1N,KAAM+M,EACN6B,KAAMlB,EACNmB,OAAQrB,EACRsB,OAAQrB,EACR1N,OAAQ2N,EACRqB,OAAQnB,EACRoB,QAASpB,EACTqB,QAAS,WACP,MAAO,IAETxb,SAAUwI,EAAS,WAKrB,OAHI1I,OAAO2b,QACT3b,OAAO2b,OAAOnB,GAETA,EA1CE,GA4CPoB,EAAO,SAAUlD,GACnB,IAAImD,EAAanT,EAASgQ,GACtBvZ,EAAO,WACT,OAAOqb,GAELa,EAAO,SAAUrB,GACnB,OAAOA,EAAEtB,IAEP8B,EAAK,CACPC,KAAM,SAAUpf,EAAG9B,GACjB,OAAOA,EAAEmf,IAEX9c,GAAI,SAAU6B,GACZ,OAAOib,IAAMjb,GAEfid,OAAQR,EACRI,OAAQL,EACRU,MAAOkB,EACPjB,WAAYiB,EACZhB,SAAUgB,EACVb,UAAWa,EACXZ,eAAgBY,EAChBV,GAAIhc,EACJic,QAASjc,EACTU,IAAK,SAAUma,GACb,OAAO4B,EAAK5B,EAAEtB,KAEhBjM,KAAM,SAAUuN,GACdA,EAAEtB,IAEJ2C,KAAMA,EACNC,OAAQD,EACRE,OAAQF,EACR7O,OAAQ,SAAUwN,GAChB,OAAOA,EAAEtB,GAAK8B,EAAKJ,GAErBsB,QAAS,WACP,MAAO,CAAChD,IAEVxY,SAAU,WACR,MAAO,QAAUwY,EAAI,KAEvB8C,OAAQ,SAAUzb,GAChB,OAAOA,EAAEnE,GAAG8c,IAEd+C,QAAS,SAAU1b,EAAG+b,GACpB,OAAO/b,EAAE0a,KAAKR,GAAO,SAAU7C,GAC7B,OAAO0E,EAAUpD,EAAGtB,QAI1B,OAAOoD,GAELrW,EAAO,SAAU7G,GACnB,OAAiB,OAAVA,QAA4B4d,IAAV5d,EAAsB8c,EAAOwB,EAAKte,IAEzDye,EAAS,CACXH,KAAMA,EACNzB,KAAMA,EACNhW,KAAMA,GAGJ6X,EAAS,SAAUlI,GACrB,GAAU,OAANA,EACF,MAAO,OAET,IAAI9K,SAAW8K,EACf,MAAU,WAAN9K,IAAmBpE,MAAM3E,UAAUgc,cAAcnI,IAAMA,EAAEoI,aAAsC,UAAvBpI,EAAEoI,YAAYhgB,MACjF,QAEC,WAAN8M,IAAmBmT,OAAOlc,UAAUgc,cAAcnI,IAAMA,EAAEoI,aAAsC,WAAvBpI,EAAEoI,YAAYhgB,MAClF,SAEF8M,GAELoT,EAAS,SAAU1c,GACrB,OAAO,SAAUpC,GACf,OAAO0e,EAAO1e,KAAWoC,IAGzB2c,EAAaD,EAAO,YAEpBE,EAAc1X,MAAM3E,UAAUoE,MAC9BxE,EAAM,SAAU6c,EAAI1C,GAGtB,IAFA,IAAI1V,EAAMoY,EAAG1b,OACT2b,EAAI,IAAI/X,MAAMN,GACThD,EAAI,EAAGA,EAAIgD,EAAKhD,IAAK,CAC5B,IAAIwS,EAAI4I,EAAGpb,GACXqb,EAAErb,GAAK0Y,EAAElG,EAAGxS,GAEd,OAAOqb,GAELlQ,EAAO,SAAUiQ,EAAI1C,GACvB,IAAK,IAAI1Y,EAAI,EAAGgD,EAAMoY,EAAG1b,OAAQM,EAAIgD,EAAKhD,IAAK,CAC7C,IAAIwS,EAAI4I,EAAGpb,GACX0Y,EAAElG,EAAGxS,KAOLgpD,GAJSjuC,EAAWzX,MAAMT,OAAQS,MAAMT,KAI7B,SAAU0C,EAAMi6B,GAC7B,IAAIzW,EAAMyW,GAAS3jC,EAAWwE,SAC1B0S,EAAMgW,EAAIoG,cAAc,OAE5B,GADApc,EAAIpR,UAAY4D,GACXwN,EAAIkzC,iBAAmBlzC,EAAIkB,WAAWvU,OAAS,EAElD,MADA7D,EAAWotD,QAAQt2B,MAAM,wCAAyCptB,GAC5D,IAAIkU,MAAM,qCAElB,OAAOyvC,EAAQn2C,EAAIkB,WAAW,MAE5Bk1C,EAAU,SAAUtlD,EAAK27B,GAC3B,IAAIzW,EAAMyW,GAAS3jC,EAAWwE,SAC1B4H,EAAO8gB,EAAIoG,cAActrB,GAC7B,OAAOqlD,EAAQjhD,IAEbmhD,EAAW,SAAUnnD,EAAMu9B,GAC7B,IAAIzW,EAAMyW,GAAS3jC,EAAWwE,SAC1B4H,EAAO8gB,EAAIhd,eAAe9J,GAC9B,OAAOinD,EAAQjhD,IAEbihD,EAAU,SAAUjhD,GACtB,GAAa,OAATA,QAA0B2R,IAAT3R,EACnB,MAAM,IAAIwR,MAAM,oCAElB,MAAO,CAAElR,IAAKnB,EAASa,KAErBohD,EAAY,SAAUC,EAAQ92C,EAAG7Z,GACnC,IAAIowB,EAAMugC,EAAO/gD,MACjB,OAAOkS,EAAO5X,KAAKkmB,EAAIwgC,iBAAiB/2C,EAAG7Z,IAAI4F,IAAI2qD,IAEjDM,EAAU,CACZR,SAAUA,EACVG,QAASA,EACTC,SAAUA,EACVF,QAASA,EACTG,UAAWA,GAUTs7F,GAPY9oJ,EAAW4uD,KAAKiF,eACZ7zD,EAAW4uD,KAAKkF,mBACtB9zD,EAAW4uD,KAAKmF,aACf/zD,EAAW4uD,KAAKoF,cACXh0D,EAAW4uD,KAAKqF,mBACZj0D,EAAW4uD,KAAKsF,uBAC1Bl0D,EAAW4uD,KAAKuF,aACnBn0D,EAAW4uD,KAAKyF,WAQvB9xD,GAPyBvC,EAAW4uD,KAAK0F,4BACtBt0D,EAAW4uD,KAAK2F,sBAC1Bv0D,EAAW4uD,KAAK4F,YACdx0D,EAAW4uD,KAAK6F,cAEW,qBAAtBz0D,EAAW4B,OAAyB5B,EAAW4B,OAAS4hC,SAAS,eAATA,GAEjE,SAAU9+B,GACnB,OAAOA,EAAQgI,MAAMme,WAEnB1qB,EAAQ,SAAUuE,GACpB,OAAOA,EAAQgI,MAAM0wH,WAEnBznE,EAAW,SAAU9pD,GACvB,OAAO,SAAUnH,GACf,OAAOnC,EAAKmC,KAAamH,IAGzB2f,EAASmqC,EAASmzF,GAElB6kJ,EAAU,CACZ,IAAQ,OACR,IAAQ,OAENC,EAAkB,SAAUD,EAASpzS,GACvC,IAAI+D,EAAKwqE,EAAS,GAClB,IAAKxqE,KAAOqvS,EACV7kO,GAAUxqE,EAEZ,OAAO,IAAIo5C,OAAO,IAAMoxB,EAAS,IAAKvuE,EAAS,IAAM,KAEnDszS,EAAoB,SAAUF,GAChC,IAAIrvS,EAAK2L,EAAW,GACpB,IAAK3L,KAAOqvS,EACN1jS,IACFA,GAAY,KAEdA,GAAY,YAAc0jS,EAAQrvS,GAEpC,OAAO2L,GAEL6jS,EAAO,CACTH,QAASA,EACT7kO,OAAQ8kO,EAAgBD,GACxBI,aAAcH,EAAgBD,GAAS,GACvC1jS,SAAU4jS,EAAkBF,GAC5BC,gBAAiBA,EACjBC,kBAAmBA,GAGjBG,EAAmB,SAAU7tS,GAC/B,MAAO,uCAAyC2tS,EAAKH,QAAQxtS,GAAS,KAAOA,EAAQ,WAEnF8tS,EAAO,CAAED,iBAAkBA,GAE3B/c,EAAU,SAAU/yR,GACtB,IAAIgwS,EAAU/tS,EAAMjC,GACpB,OAAOstB,EAAOttB,SAAkB6f,IAAZmwR,GAAyBJ,EAAKhlO,OAAOhkE,KAAKopS,IAE5DC,EAAoB,SAAUxqQ,EAAO5U,GACvC,IAAIvwB,EAAS,GACTkO,EAAMi3B,EAAMj3B,MACZuH,EAAWvR,EAAIgK,EAAI0L,WAAYu1C,EAAQN,SAO3C,OANA/9C,EAAK2E,GAAU,SAAU0C,GACnBoY,EAAUpY,KACZnY,EAASA,EAAOme,OAAO,CAAChG,KAE1BnY,EAASA,EAAOme,OAAOwxR,EAAkBx3R,EAAGoY,OAEvCvwB,GAEL4vS,EAAgB,SAAU1lS,EAAK2uM,GACjC,MAAO3uM,EAAI1D,WAAY,CACrB,GAAI0D,EAAI1D,aAAeqyM,EACrB,OAAO3uM,EAETA,EAAMA,EAAI1D,aAGVqpS,EAAmB,SAAUjoS,GAC/B,OAAOA,EAAKzD,QAAQmrS,EAAKC,aAAcE,EAAKD,mBAE1C54K,EAAQ,CACV67J,QAASA,EACTkd,kBAAmBA,EACnBC,cAAeA,EACfC,iBAAkBA,GAGhBpmQ,EAAO,SAAUnnC,EAAQu2M,GAC3B,IAAIjrM,EAAM8K,EACNo3R,EAAWl5K,EAAM+4K,kBAAkBxgP,EAAQN,QAAQgqJ,GAAUjiF,EAAM67J,SACvE3hR,EAAKg/R,GAAU,SAAUpwS,GACvB,IAAIqwS,EAAYn5K,EAAMi5K,iBAAiBvtS,EAAO4L,IAAItK,OAAOjC,EAAMjC,KAC/DgZ,EAAMpW,EAAO4L,IAAIiE,OAAO,MAAO,KAAM49R,GACrC,MAAOniS,EAAO8K,EAAI4xC,UAChBhoD,EAAO4L,IAAIygB,YAAY/gB,EAAMlO,EAAEwO,OAEjC5L,EAAO4L,IAAI+I,OAAOvX,EAAEwO,WAGpBw7B,EAAO,SAAUpnC,EAAQqN,GAC3B,IAAImgS,EAAWxtS,EAAO4L,IAAIE,OAAOkhS,EAAK7jS,SAAUkE,GAChDmB,EAAKg/R,GAAU,SAAUliS,GACvBtL,EAAO4L,IAAI+I,OAAOrJ,EAAM,OAGxB6C,EAAS,SAAUnO,GACrB,IAAIqN,EAAOrN,EAAO0T,UACdy1C,EAAWnpD,EAAOuL,UAAU2vD,cAC5Bh3D,EAAaowH,EAAMg5K,cAActtS,EAAOuL,UAAUC,UAAW6B,GACjEnJ,OAA4B+Y,IAAf/Y,EAA2BA,EAAamJ,EACrD+5B,EAAKpnC,EAAQkE,GACbijC,EAAKnnC,EAAQkE,GACblE,EAAOuL,UAAU4vD,eAAehS,IAE9BukP,EAAc,CAChBvmQ,KAAMA,EACNC,KAAMA,EACNj5B,OAAQA,GAGNw/R,EAAoB,SAAU3tS,EAAQoT,GACxC,IAEI+1C,EAFA97C,EAAOrN,EAAO0T,UACdnI,EAAYvL,EAAOuL,UAEvB6H,EAAY7T,KAAK6T,EAAY9T,OAC7BqkE,EAAOipO,gBAAgB5sS,EAAQoT,EAAY9T,OAC3C6pD,EAAW59C,EAAU2vD,eACK,IAAtB9nD,EAAY9T,MACdouS,EAAYvmQ,KAAKnnC,EAAQqN,GAEzBqgS,EAAYtmQ,KAAKpnC,EAAQqN,GAE3B9B,EAAU4vD,eAAehS,IAEvBnV,EAAU,CAAE25P,kBAAmBA,GAE/B5/R,EAAW,SAAU/N,EAAQoT,GAC/BpT,EAAOgO,WAAW,kBAAkB,WAClCgmC,EAAQ25P,kBAAkB3tS,EAAQoT,OAGlChF,EAAW,CAAEL,SAAUA,GAEvBjO,EAAWJ,QAAQC,KAAKC,MAAMC,QAAQ,sBAEtCwO,EAAQ,SAAUrO,EAAQoT,GAC5B,IAAIw6R,EAAkB9tS,EAAS6jM,UAAS,WACtC+pG,EAAYv/R,OAAOnO,KAClB,MACuC,IAAtCA,EAAOC,SAASi5D,mBAClBl5D,EAAOsO,GAAG,WAAW,SAAUR,IACH,IAAtBsF,EAAY9T,QACA,KAAdwO,EAAEqgB,QAAiBu/Q,EAAYv/R,OAAOnO,GAAU4tS,SAKpD9+Q,GAAW,CAAEzgB,MAAOA,GAEpB2oH,GAAqB,SAAUh3H,GACjC,OAAOA,EAAOW,SAAS,6BAA6B,IAElDE,GAAW,CAAEm2H,mBAAoBA,IAEjCj2D,GAAU,SAAU/gE,EAAQoT,GAC9BpT,EAAOsO,GAAG,QAAQ,WAChB,IAAIu/R,GAAoBhtS,GAASm2H,mBAAmBh3H,GACpDoT,EAAY7T,IAAIsuS,GAChB75P,EAAQ25P,kBAAkB3tS,EAAQoT,OAGlCskH,GAAW,CAAErpH,MAAO0yD,IAEpBgoB,GAAoB,SAAU/oF,GAChC,OAAO,SAAU8N,GACf,IAAIuF,EAAOvF,EAAEwF,QACbtT,EAAOsO,GAAG,eAAe,SAAUR,GACjCuF,EAAK+tD,OAAOtzD,EAAE81B,YAIhBzzB,GAAa,SAAUnQ,GACzBA,EAAOoQ,UAAU,cAAe,CAC9BgxD,QAAQ,EACR14D,MAAO,4BACP2H,IAAK,iBACLwD,aAAck1E,GAAkB/oF,KAElCA,EAAOsQ,YAAY,cAAe,CAChChL,KAAM,4BACN+K,IAAK,iBACLwD,aAAck1E,GAAkB/oF,GAChC64E,YAAY,EACZ/kE,QAAS,OACTkzC,kBAAkB,KAYtB,SAASv2C,MARThX,EAAOsN,IAAI,eAAe,SAAU/G,GAClC,IAAIoT,EAAcjU,GAAK,GAKvB,OAJAiP,EAASL,SAAS/N,EAAQoT,GAC1BjD,GAAWnQ,GACX8uB,GAASzgB,MAAMrO,EAAQoT,GACvBskH,GAASrpH,MAAMrO,EAAQoT,GAChBwV,EAAItpB,IAAI8T,OA/bH,CAschBtS,SAvcF,I,oBCAA,YACgB,SAAU5B,GACtB,aAEA,IAAIzF,EAASiG,QAAQC,KAAKC,MAAMC,QAAQ,yBAEpCC,EAAWJ,QAAQC,KAAKC,MAAMC,QAAQ,wBAEtCkB,EAAWrB,QAAQC,KAAKC,MAAMC,QAAQ,yBAEtC+Q,EAAWlR,QAAQC,KAAKC,MAAMC,QAAQ,eAEtC+iB,EAAWljB,QAAQC,KAAKC,MAAMC,QAAQ,sBAEtC4jC,EAAW/jC,QAAQC,KAAKC,MAAMC,QAAQ,sBAEtC6jC,EAAWhkC,QAAQC,KAAKC,MAAMC,QAAQ,mBAEtCiuS,EAAsB,SAAU9tS,GAClC,OAAOA,EAAOW,SAAS,oBAAqB,gBAE1CotS,EAAc,SAAU/tS,GAC1B,OAAOA,EAAOW,SAAS,YAAamtS,EAAoB9tS,KAEtDa,EAAW,CAAEktS,YAAaA,GAE1BvtS,EAAMV,EAASU,IACfwtS,EAAY,SAAUlgS,GACpBA,EAAEqgB,UAAYuV,EAASk9B,KAAQ9yD,EAAEwsC,SAAYxsC,EAAEy6E,QAAWz6E,EAAE06E,SAC9D16E,EAAE44B,kBAGFr4B,EAAQ,SAAUrO,GACpB,SAAS8gH,EAAWhzG,GAClB,IAAI+H,EAAG9D,EAAIvS,EAAG6D,EACd,KAAIyK,EAAEqgB,UAAYuV,EAASk9B,KAAO9yD,EAAEwsC,SAAWxsC,EAAEy6E,QAAUz6E,EAAE06E,SAAW16E,EAAEi8D,wBAgC1EvqE,EAAIikC,EAASuuK,QAAQnxM,EAASktS,YAAY/tS,IACzB,IAAbR,EAAEuD,SACJvD,EAAE,GAAKA,EAAE,GACTA,EAAE,GAAK,SAILuS,EAFAjE,EAAEgzD,SACS,UAATthE,EAAE,GACCyP,GAAM,GAENzO,EAAIlB,IAAIE,EAAE,IAGJ,UAATA,EAAE,GACCyP,EAAK,GAELzO,EAAIlB,IAAIE,EAAE,IAGfuS,GAAI,CACN,IAAIshP,EAActyP,EAASzB,IAAIyS,EAAGzP,IAAMyP,EAAG9T,MACvC8T,EAAGzP,IAAM+wP,EACXA,EAAY7+O,QAEZoO,EAASmR,YAAW,WACbnjB,EAASijE,QACZ30E,EAAW4B,OAAO0T,QAEpBzC,EAAGyC,UACF,IAEL1G,EAAE44B,iBA3DJ,SAASz3B,EAAK9B,GAEZ,SAAS8gS,EAAmBngS,GAC1B,MAAsB,SAAfA,EAAE3J,UAAkC,WAAX2J,EAAErM,MAAyC,SAApBqM,EAAEtE,MAAMgjF,SAA6C,WAAvB1+E,EAAEtE,MAAMqzC,YAA2BoxP,EAAmBngS,EAAE5J,YAE/I,SAASgqS,EAAUn8R,GACjB,MAAO,wBAAwB/N,KAAK+N,EAAGhB,UAAYhQ,EAASzB,IAAIwO,EAAExL,MAAwB,IAAjByP,EAAGy7L,UAAmBygG,EAAmBl8R,GAQpH,GAbAA,EAAKvR,EAAIsL,OAAO,0CAOhB23B,EAASj1B,KAAKuD,GAAI,SAAUjE,EAAGzK,GAC7B,GAAIyK,EAAExL,KAAOtC,EAAOsC,GAElB,OADAuT,EAAIxS,GACG,KAGP8J,EAAY,GACd,IAAK9J,EAAIwS,EAAI,EAAGxS,EAAI0O,EAAGhP,OAAQM,IAC7B,GAAI6qS,EAAUn8R,EAAG1O,IACf,OAAO0O,EAAG1O,QAId,IAAKA,EAAIwS,EAAI,EAAGxS,GAAK,EAAGA,IACtB,GAAI6qS,EAAUn8R,EAAG1O,IACf,OAAO0O,EAAG1O,GAIhB,OAAO,MAmCXrD,EAAOsO,GAAG,QAAQ,WACZtO,EAAO4P,QACTpP,EAAIqL,UAAU7L,EAAO0T,UAAW,WAAY,MAE9C1T,EAAOsO,GAAG,QAAS0/R,GACfp9R,EAASgkE,MACX50E,EAAOsO,GAAG,mBAAoBwyG,GAE9B9gH,EAAOsO,GAAG,UAAWwyG,OAIvBhyF,EAAW,CAAEzgB,MAAOA,GAKxB,SAASoC,KAHThX,EAAOsN,IAAI,YAAY,SAAU/G,GAC/B8uB,EAASzgB,MAAMrO,OAlHN,CAyHbc,SA1HF,I,sBCKE,SAAUrH,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;IAAIu0S,EAAMv0S,EAAOE,aAAa,MAAO,CACjCC,OAAQ,0FAA0FC,MAC9F,KAEJC,YAAa,kDAAkDD,MAAM,KACrEE,SAAU,yDAAyDF,MAC/D,KAEJG,cAAe,8BAA8BH,MAAM,KACnDI,YAAa,wBAAwBJ,MAAM,KAC3CK,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,YACHC,GAAI,eACJC,IAAK,qBACLC,KAAM,6BAEVC,SAAU,CACNC,QAAS,oBACTC,QAAS,gBACTC,SAAU,0BACVC,QAAS,eACTC,SAAU,4BACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,gBACRC,KAAM,mBACNC,EAAG,gBACHC,GAAI,aACJC,EAAG,eACHC,GAAI,YACJC,EAAG,aACHC,GAAI,UACJC,EAAG,aACHC,GAAI,UACJC,EAAG,cACHC,GAAI,WACJC,EAAG,aACHC,GAAI,WAERgB,uBAAwB,UACxBC,QAAS,SAAUI,GACf,OAAOA,GAEXpB,KAAM,CACFC,IAAK,EACLC,IAAK,KAIb,OAAO+xS,M,sBC9DT,SAAU10S,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;IAAIw0S,EAAOx0S,EAAOE,aAAa,QAAS,CACpCC,OAAQ,CACJka,OAAQ,4GAA4Gja,MAChH,KAEJ+e,WACI,gGAAgG/e,MAC5F,MAGZC,YAAa,kDAAkDD,MAAM,KACrEE,SACI,gEAAgEF,MAC5D,KAERG,cAAe,+BAA+BH,MAAM,KACpDI,YAAa,+BAA+BJ,MAAM,KAClDK,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,iBACJC,IAAK,wBACLC,KAAM,+BAEVC,SAAU,CACNC,QAAS,aACTC,QAAS,YACTE,QAAS,YACTD,SAAU,WACN,MAAO,sBAEXE,SAAU,WACN,MAAO,8BAEXC,SAAU,KAEdC,aAAc,CACVC,OAAQ,UACRC,KAAM,UACNC,EAAG,mBACHC,GAAI,cACJC,EAAG,OACHC,GAAI,UACJC,EAAG,MACHC,GAAI,SACJC,EAAG,KACHC,GAAI,QACJC,EAAG,OACHC,GAAI,UACJC,EAAG,OACHC,GAAI,WAERM,cAAe,oCACfwC,KAAM,SAAUP,GACZ,MAAO,uBAAuBwF,KAAKxF,IAEvC9B,SAAU,SAAUD,GAChB,OAAIA,EAAO,EACA,UACAA,EAAO,GACP,WACAA,EAAO,GACP,UAEA,YAGfQ,uBAAwB,0BACxBC,QAAS,SAAUI,EAAQ2B,GACvB,OAAQA,GACJ,IAAK,MACL,IAAK,IACL,IAAK,IACL,IAAK,OACD,OAAe,IAAX3B,EACOA,EAAS,MAEbA,EAAS,MACpB,QACI,OAAOA,IAGnBpB,KAAM,CACFC,IAAK,EACLC,IAAK,KAIb,OAAOgyS,M,oBCtGX,YACiB,WACb,aAEA,IAAI30S,EAASiG,QAAQC,KAAKC,MAAMC,QAAQ,yBAEpCC,EAAWJ,QAAQC,KAAKC,MAAMC,QAAQ,0BAEtCkB,EAAWrB,QAAQC,KAAKC,MAAMC,QAAQ,eAEtCwuS,EAAU,CACZC,QAAS,owBACTC,UAAW,gBACXC,UAAW,aACXC,OAAQ,wBACR9wF,QAAS,4GACT7vD,GAAI,MACJ4gJ,GAAI,MACJC,QAAS,sBACTtsS,OAAQ,yaACR4R,OAAQ,iCACR26R,SAAU,4BACVC,aAAc,qBACdtmS,YAAa,wQAEXumS,EAAmB,CACrBC,QAAS,EACTC,UAAW,EACXC,UAAW,EACXC,OAAQ,EACRC,QAAS,EACTC,GAAI,EACJC,GAAI,EACJC,QAAS,EACTC,OAAQ,EACRC,OAAQ,EACRC,SAAU,GACVC,aAAc,GACdC,GAAI,GACJC,MAAO,IAELC,EAAO,CACT,IAAIj5P,OAAOy3P,EAAQC,SACnB,IAAI13P,OAAOy3P,EAAQE,WACnB,IAAI33P,OAAOy3P,EAAQG,WACnB,IAAI53P,OAAOy3P,EAAQI,QACnB,IAAI73P,OAAOy3P,EAAQ1wF,SACnB,IAAI/mK,OAAOy3P,EAAQvgJ,IACnB,IAAIl3G,OAAOy3P,EAAQK,IACnB,IAAI93P,OAAOy3P,EAAQM,SACnB,IAAI/3P,OAAOy3P,EAAQhsS,QACnB,IAAIu0C,OAAOy3P,EAAQp6R,QACnB,IAAI2iC,OAAOy3P,EAAQO,UACnB,IAAIh4P,OAAOy3P,EAAQQ,cACnB,IAAIj4P,OAAO,MAETk5P,EAAe,GACfC,EAAc,IAAIn5P,OAAO,IAAMy3P,EAAQ9lS,YAAc,KACrDynS,EAAa,QACbC,EAAc,CAChBnB,iBAAkBA,EAClBe,KAAMA,EACNC,aAAcA,EACdC,YAAaA,EACbC,WAAYA,GAGVz0R,EAAO,aAEP9Q,EAAW,SAAUpL,GACvB,OAAO,WACL,OAAOA,IAGP2c,EAAQvR,GAAS,GACjBwR,EAASxR,GAAS,GAElByR,EAAO,WACT,OAAOC,GAELA,EAAO,WACT,IAAIC,EAAK,SAAUta,GACjB,OAAOA,EAAEua,UAEPna,EAAO,SAAUoa,GACnB,OAAOA,KAELha,EAAK,SAAUlF,GACjB,OAAOA,GAELmf,EAAK,CACPC,KAAM,SAAUpf,EAAG9B,GACjB,OAAO8B,KAETO,GAAIqe,EACJS,OAAQT,EACRK,OAAQJ,EACRS,MAAOpa,EACPqa,WAAYza,EACZ0a,SAAU,SAAUC,GAClB,MAAM,IAAIC,MAAMD,GAAO,oCAEzBE,UAAWtS,EAAS,MACpBuS,eAAgBvS,OAASwS,GACzBC,GAAI5a,EACJ6a,QAASjb,EACTN,IAAKsa,EACL1N,KAAM+M,EACN6B,KAAMlB,EACNmB,OAAQrB,EACRsB,OAAQrB,EACR1N,OAAQ2N,EACRqB,OAAQnB,EACRoB,QAASpB,EACTqB,QAAS,WACP,MAAO,IAETxb,SAAUwI,EAAS,WAKrB,OAHI1I,OAAO2b,QACT3b,OAAO2b,OAAOnB,GAETA,EA1CE,GA6CPwB,EAAS,SAAUlI,GACrB,GAAU,OAANA,EACF,MAAO,OAET,IAAI9K,SAAW8K,EACf,MAAU,WAAN9K,IAAmBpE,MAAM3E,UAAUgc,cAAcnI,IAAMA,EAAEoI,aAAsC,UAAvBpI,EAAEoI,YAAYhgB,MACjF,QAEC,WAAN8M,IAAmBmT,OAAOlc,UAAUgc,cAAcnI,IAAMA,EAAEoI,aAAsC,WAAvBpI,EAAEoI,YAAYhgB,MAClF,SAEF8M,GAELoT,EAAS,SAAU1c,GACrB,OAAO,SAAUpC,GACf,OAAO0e,EAAO1e,KAAWoC,IAGzB2c,EAAaD,EAAO,YAEpBE,EAAc1X,MAAM3E,UAAUoE,MAC9BxE,EAAM,SAAU6c,EAAI1C,GAGtB,IAFA,IAAI1V,EAAMoY,EAAG1b,OACT2b,EAAI,IAAI/X,MAAMN,GACThD,EAAI,EAAGA,EAAIgD,EAAKhD,IAAK,CAC5B,IAAIwS,EAAI4I,EAAGpb,GACXqb,EAAErb,GAAK0Y,EAAElG,EAAGxS,GAEd,OAAOqb,GAMLwxR,GAJO9xR,EAAWzX,MAAMT,OAAQS,MAAMT,KAI7B+pS,EAAYJ,MACrBD,EAAQK,EAAYnB,iBAAiBc,MACrC52Q,EAAU,SAAU1L,GACtB,IAAI1nB,EAAGrG,EAAKkC,EAAOmuS,EACfO,EAAaD,EAAOntS,OACxB,IAAK6C,EAAI,EAAGA,EAAIuqS,IAAcvqS,EAE5B,GADArG,EAAM2wS,EAAOtqS,GACTrG,GAAOA,EAAIyE,KAAKspB,GAAO,CACzB7rB,EAAOmE,EACP,MAGJ,OAAOnE,GAEL2uS,EAAU,SAAUxuK,GACtB,IAAIzxD,EAAQ,GACZ,OAAO,SAAU7iD,GACf,GAAI6iD,EAAM7iD,GACR,OAAO6iD,EAAM7iD,GAEb,IAAI5vB,EAASkkI,EAAKt0G,GAElB,OADA6iD,EAAM7iD,GAAQ5vB,EACPA,IAIT2yS,EAAW,SAAUjnS,GACvB,IAAIknS,EAAWF,EAAQp3Q,GACvB,OAAOp3B,EAAIwH,EAAOpP,MAAM,IAAKs2S,IAE3BC,EAAe,CAAEF,SAAUA,GAE3BxmI,EAAKomI,EAAYnB,iBACjB0B,EAAiB,SAAU5uS,EAAKuE,GAClC,IAAIsqS,EAGAC,EAFAjvS,EAAOG,EAAIuE,GACXwqS,EAAW/uS,EAAIuE,EAAQ,GAE3B,QAAIA,EAAQ,GAAKA,EAAQvE,EAAImB,OAAS,GAAe,IAAVoD,MAGvC1E,IAASooK,EAAGklI,SAAW4B,IAAa9mI,EAAGklI,WAG3C2B,EAAe9uS,EAAIuE,EAAQ,IACvB1E,IAASooK,EAAGklI,SAAY4B,IAAa9mI,EAAGolI,WAAa0B,IAAa9mI,EAAGmlI,WAAa2B,IAAa9mI,EAAG8lI,IAAOe,IAAiB7mI,EAAGklI,WAGjI0B,EAAW7uS,EAAIuE,EAAQ,IAClB1E,IAASooK,EAAGolI,WAAaxtS,IAASooK,EAAGmlI,WAAa2B,IAAa9mI,EAAG8lI,IAAOgB,IAAa9mI,EAAGklI,SAAW0B,IAAa5mI,EAAGklI,YAGpHttS,IAASooK,EAAGslI,SAAW1tS,IAASooK,EAAGklI,SAAa4B,IAAa9mI,EAAGslI,SAAWwB,IAAa9mI,EAAGklI,YAG3FttS,IAASooK,EAAGqlI,QAAUztS,IAASooK,EAAGmlI,WAAc2B,IAAa9mI,EAAGslI,SAAWsB,IAAa5mI,EAAGslI,YAG5F1tS,IAASooK,EAAGslI,SAAYwB,IAAa9mI,EAAGqlI,QAAUyB,IAAa9mI,EAAGmlI,WAAc0B,IAAiB7mI,EAAGslI,WAGpG1tS,IAASooK,EAAG0lI,QAAU9tS,IAASooK,EAAG2lI,QAAUiB,IAAa5mI,EAAG0lI,QAAUkB,IAAa5mI,EAAG2lI,QAAUmB,IAAa9mI,EAAG0lI,QAAUoB,IAAa9mI,EAAG2lI,UAG1I/tS,IAASooK,EAAGulI,IAAMuB,IAAa9mI,EAAGwlI,MAGlC5tS,IAASooK,EAAGylI,SAAW7tS,IAASooK,EAAGulI,IAAM3tS,IAASooK,EAAGwlI,KAGrDsB,IAAa9mI,EAAGylI,SAAWqB,IAAa9mI,EAAGulI,IAAMuB,IAAa9mI,EAAGwlI,KAGjE5tS,IAASooK,EAAG4lI,UAAYkB,IAAa9mI,EAAG4lI,aAGxCkB,IAAa9mI,EAAG6lI,cAAiBjuS,IAASooK,EAAGklI,SAAWttS,IAASooK,EAAGslI,SAAW1tS,IAASooK,EAAG4lI,UAAYhuS,IAASooK,EAAG6lI,iBAGnHjuS,IAASooK,EAAG6lI,cAAiBiB,IAAa9mI,EAAGklI,SAAW4B,IAAa9mI,EAAGslI,SAAWwB,IAAa9mI,EAAG4lI,WAGnGhuS,IAASooK,EAAG8lI,gBAKdiB,EAAe,CAAEJ,eAAgBA,GAEjCK,EAAiBZ,EAAYH,aAC7BgB,EAAeb,EAAYD,WAC3Be,EAAgBd,EAAYF,YAC5BiB,EAAa,SAAU91R,GACzB,MAAgB,SAATA,GAA4B,UAATA,GAExB+1R,EAAc,SAAUjrS,EAAKG,GAC/B,IAAI9C,EACJ,IAAKA,EAAI8C,EAAO9C,EAAI2C,EAAIjD,SAAUM,EAAG,CACnC,IAAIkrB,EAAMvoB,EAAI4zE,OAAOv2E,GACrB,GAAIytS,EAAa9sS,KAAKuqB,GACpB,MAGJ,OAAOlrB,GAEL6tS,EAAa,SAAUh2R,EAAMlV,EAAKG,GACpC,IAAIixJ,EAAW65I,EAAYjrS,EAAKG,EAAQ,GACpCgrS,EAAanrS,EAAI8e,UAAU3e,EAAQ,EAAGixJ,GAC1C,MAAgC,QAA5B+5I,EAAW7nR,OAAO,EAAG,GAChB,CACLpO,KAAMA,EAAOi2R,EACbhrS,MAAOixJ,GAGJ,CACLl8I,KAAMA,EACN/U,MAAOA,IAGPirS,EAAa,SAAUprS,EAAKouF,GAC9B,IAKI7lE,EACA8iR,EACAC,EAPAjuS,EAAI,EACJzB,EAAM2uS,EAAaF,SAASrqS,GAC5BK,EAAMzE,EAAImB,OACVmY,EAAO,GACPH,EAAQ,GAYZ,IARKq5E,IACHA,EAAU,IAERA,EAAQ3C,aACVzrF,EAAMA,EAAIke,eAEZmtR,EAAqBj9M,EAAQi9M,mBAC7BC,EAAoBl9M,EAAQk9M,kBACrBjuS,EAAIgD,IAAOhD,EAGhB,GAFAkrB,EAAMvoB,EAAI4zE,OAAOv2E,GACjB6X,EAAKzU,KAAK8nB,GACNqiR,EAAaJ,eAAe5uS,EAAKyB,GAAI,CAEvC,GADA6X,EAAOA,EAAKjU,KAAK4pS,GACb31R,IAASo2R,IAAsBR,EAAa9sS,KAAKkX,MAAWm2R,IAAuBN,EAAc/sS,KAAKkX,IACxG,GAAI81R,EAAW91R,GAAO,CACpB,IAAIwE,EAAMwxR,EAAWh2R,EAAMlV,EAAK3C,GAChC0X,EAAMtU,KAAKiZ,EAAIxE,MACf7X,EAAIqc,EAAIvZ,WAER4U,EAAMtU,KAAKyU,GAGfA,EAAO,GAGX,OAAOH,GAELw2R,EAAW,SAAUvrS,EAAKouF,GAC5B,OAAOg9M,EAAWprS,EAAInE,QAAQ,UAAW,IAAKuyF,IAE5Co9M,EAAa,CAAED,SAAUA,GAEzB1pO,EAAU,SAAUv8D,EAAM+1C,GAC5B,IAAI8G,EAAgB9G,EAAO2X,mBACvB0N,EAAqBrlB,EAAOslB,wBAC5BgyM,EAAqBt3N,EAAOo+B,wBAC5BgyN,EAAc,SAAUnmS,GAC1B,OAAO68C,EAAc78C,EAAKnH,WAAauiE,EAAmBp7D,EAAKnH,WAAaw0Q,EAAmBrtQ,EAAKnH,WAElG2jE,EAAM,GACN4pO,EAAa,IAAI5xS,EAASwL,EAAMA,GACpC,MAAOA,EAAOomS,EAAW/kR,OACD,IAAlBrhB,EAAKye,SACP+9C,GAAOx8D,EAAKvG,KACH0sS,EAAYnmS,KACrBw8D,GAAO,KAGX,OAAOA,GAELtB,EAAY,SAAUl7D,EAAM+1C,GAC9B,OAAOtgD,EAASixB,GAAK61C,EAAQv8D,EAAM+1C,GAAU/1C,EAAKk7D,WAEhD42F,EAAiB,SAAUp9J,GAC7B,OAAOA,EAAO6jC,QAAU,GAAK2iC,EAAUxmE,EAAO0T,UAAW1T,EAAOqhD,SAE9DswP,EAAW,SAAU3xS,GACvB,OAAOwxS,EAAWD,SAASn0I,EAAep9J,IAAS+C,QAEjD6uS,EAAY,CAAED,SAAUA,GAExBryS,EAAM,SAAUU,GAClB,IAAI2xS,EAAW,WACb,OAAOC,EAAUD,SAAS3xS,IAE5B,MAAO,CAAE2xS,SAAUA,IAEjB/oR,EAAM,CAAEtpB,IAAKA,GAEbsR,EAAWlR,QAAQC,KAAKC,MAAMC,QAAQ,sBAEtC+iB,EAAWljB,QAAQC,KAAKC,MAAMC,QAAQ,qBAEtCwO,EAAQ,SAAUrO,GACpB,IAAI6xS,EAAc,SAAU7xS,GAC1B,OAAO4iB,EAASvlB,UAAU,CACxB,YACAu0S,EAAUD,SAAS3xS,MAGnBmuC,EAAS,WACXnuC,EAAOypP,MAAMryO,MAAMnI,KAAK,cAAc3J,KAAKusS,EAAY7xS,KAEzDA,EAAOsO,GAAG,QAAQ,WAChB,IAAIi+B,EAAYvsC,EAAOypP,MAAMryO,OAASpX,EAAOypP,MAAMryO,MAAMnI,KAAK,cAAc,GACxE6iS,EAAkBlhS,EAAS+yL,SAASx1J,EAAQ,KAC5C5B,GACF37B,EAASie,iBAAiB7uB,GAAQ,WAChCusC,EAAU5pC,OAAO,CACflB,KAAM,QACNxD,KAAM,YACNqH,KAAMusS,EAAY7xS,GAClBmH,QAAS,YACToM,SAAUvT,EAAOC,SAASuT,UACzB,GACHxT,EAAOsO,GAAG,2CAA4CwjS,KACrD,OAILC,EAAY,CAAE1jS,MAAOA,GAMzB,SAASoC,KAJThX,EAAOsN,IAAI,aAAa,SAAU/G,GAEhC,OADA+xS,EAAU1jS,MAAMrO,GACT4oB,EAAItpB,IAAIU,OAtYL,IADhB,I,oBCAA,YACmB,WACf,aAEA,IAAIvG,EAASiG,QAAQC,KAAKC,MAAMC,QAAQ,yBAEpCmyS,EAAe,SAAU5oS,EAAQ6oS,GAEnC,IADA,IAAIjsS,EAAM,GACDG,EAAQ,EAAGA,EAAQ8rS,EAAS9rS,IACnCH,GAAOoD,EAET,OAAOpD,GAELksS,EAAuB,SAAUlyS,GACnC,QAAOA,EAAOsD,QAAQ6uS,aAAcnyS,EAAOsD,QAAQ6uS,YAAYxF,aAE7DyF,EAAa,SAAUpyS,EAAQotC,GACjC,IAAIulL,EAAOu/E,EAAqBlyS,GAAU,uCAAyC,SACnFA,EAAO+L,cAAcimS,EAAar/E,EAAMvlL,IACxCptC,EAAO4L,IAAIC,UAAU7L,EAAO4L,IAAIE,OAAO,iBAAkB,iBAAkB,MAEzEkoC,EAAU,CAAEo+P,WAAYA,GAExBrkS,EAAW,SAAU/N,GACvBA,EAAOgO,WAAW,kBAAkB,WAClCgmC,EAAQo+P,WAAWpyS,EAAQ,OAG3BoO,EAAW,CAAEL,SAAUA,GAEvBjO,EAAWJ,QAAQC,KAAKC,MAAMC,QAAQ,mBAEtCwyS,EAAoB,SAAUryS,GAChC,IAAI8oE,EAAS9oE,EAAOW,SAAS,wBAAyB,GACtD,MAAsB,mBAAXmoE,GACS,IAAXA,EAAkB,EAAI,EAEtBA,GAGPjoE,EAAW,CAAEwxS,kBAAmBA,GAEhChkS,EAAQ,SAAUrO,GACpB,IAAI8oE,EAASjoE,EAASwxS,kBAAkBryS,GACpC8oE,EAAS,GACX9oE,EAAOsO,GAAG,WAAW,SAAUR,GAC7B,GAAIA,EAAEqgB,UAAYruB,EAAS8gE,MAAQ9yD,EAAEi8D,qBAAsB,CACzD,GAAIj8D,EAAEgzD,SACJ,OAEFhzD,EAAE44B,iBACF54B,EAAEgmE,2BACF9/B,EAAQo+P,WAAWpyS,EAAQ8oE,QAK/Bh6C,EAAW,CAAEzgB,MAAOA,GAEpB8B,EAAa,SAAUnQ,GACzBA,EAAOoQ,UAAU,cAAe,CAC9B1H,MAAO,oBACP2H,IAAK,mBAEPrQ,EAAOsQ,YAAY,cAAe,CAChCC,KAAM,cACNjL,KAAM,oBACN+K,IAAK,iBACLyD,QAAS,YAGTtD,EAAU,CAAEzC,SAAUoC,GAO1B,SAASM,KALThX,EAAOsN,IAAI,eAAe,SAAU/G,GAClCoO,EAASL,SAAS/N,GAClBwQ,EAAQzC,SAAS/N,GACjB8uB,EAASzgB,MAAMrO,OA3EH,IADlB,I,sBCIE,SAAUvG,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;IAAI04S,EAAK14S,EAAOE,aAAa,KAAM,CAC/BC,OAAQ,CACJgf,WACI,oFAAoF/e,MAChF,KAERia,OAAQ,qHAAqHja,MACzH,KAEJgf,SAAU,mBAEd/e,YACI,8DAA8DD,MAC1D,KAERsC,kBAAkB,EAClBpC,SACI,8DAA8DF,MAC1D,KAERG,cAAe,8BAA8BH,MAAM,KACnDI,YAAa,uBAAuBJ,MAAM,KAC1Cye,oBAAoB,EACpBpe,eAAgB,CACZC,GAAI,OACJC,IAAK,UACLC,EAAG,aACHC,GAAI,mBACJmE,GAAI,aACJlE,IAAK,gCACLmE,IAAK,mBACLlE,KAAM,qCACNmE,KAAM,wBAEVlE,SAAU,CACNC,QAAS,WACL,MAAO,YAA+B,IAAjBlB,KAAK+e,QAAgB,MAAQ,MAAQ,QAE9D5d,QAAS,WACL,MAAO,YAA+B,IAAjBnB,KAAK+e,QAAgB,MAAQ,MAAQ,QAE9D3d,SAAU,WACN,MAAO,YAA+B,IAAjBpB,KAAK+e,QAAgB,MAAQ,MAAQ,QAE9D1d,QAAS,WACL,MAAO,YAA+B,IAAjBrB,KAAK+e,QAAgB,MAAQ,MAAQ,QAE9Dzd,SAAU,WACN,MACI,wBACkB,IAAjBtB,KAAK+e,QAAgB,MAAQ,MAC9B,QAGRxd,SAAU,KAEdC,aAAc,CACVC,OAAQ,YACRC,KAAM,QACNC,EAAG,aACHC,GAAI,YACJC,EAAG,WACHC,GAAI,YACJC,EAAG,WACHC,GAAI,WACJC,EAAG,SACHC,GAAI,UACJC,EAAG,SACHC,GAAI,WACJC,EAAG,SACHC,GAAI,WAERgB,uBAAwB,qBACxBC,QAAS,SAAUI,EAAQ2B,GACvB,IAAInC,EACW,IAAXQ,EACM,IACW,IAAXA,EACA,IACW,IAAXA,EACA,IACW,IAAXA,EACA,IACA,IAIV,MAHe,MAAX2B,GAA6B,MAAXA,IAClBnC,EAAS,KAENQ,EAASR,GAEpBZ,KAAM,CACFC,IAAK,EACLC,IAAK,KAIb,OAAOk2S,M,sBCxGT,SAAU74S,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;IAAI24S,EAAO34S,EAAOE,aAAa,QAAS,CACpCC,OAAQ,uFAAuFC,MAC3F,KAEJC,YACI,iEAAiED,MAC7D,KAERsC,kBAAkB,EAClBpC,SAAU,sDAAsDF,MAAM,KACtEG,cAAe,qCAAqCH,MAAM,KAC1DI,YAAa,uBAAuBJ,MAAM,KAC1Cye,oBAAoB,EACpBpe,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,0BAEVC,SAAU,CACNC,QAAS,qBACTC,QAAS,gBACTC,SAAU,cACVC,QAAS,cACTC,SAAU,sBACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,UACRC,KAAM,YACNC,EAAG,oBACHC,GAAI,cACJC,EAAG,aACHC,GAAI,aACJC,EAAG,YACHC,GAAI,YACJC,EAAG,UACHC,GAAI,WACJC,EAAG,UACHC,GAAI,UACJC,EAAG,QACHC,GAAI,UAERgB,uBAAwB,gBACxBC,QAAS,SAAUI,EAAQ2B,GACvB,OAAQA,GAEJ,QACA,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,MACL,IAAK,IACD,OAAO3B,GAAqB,IAAXA,EAAe,KAAO,KAG3C,IAAK,IACL,IAAK,IACD,OAAOA,GAAqB,IAAXA,EAAe,KAAO,SAKvD,OAAOi1S,M,sBCzET,SAAU94S,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;IAAIqpF,EACI,6DAA6DjpF,MAAM,KACvEkpF,EACI,kDAAkDlpF,MAAM,KAC5Dge,EAAc,CACV,QACA,QACA,iBACA,QACA,SACA,cACA,cACA,QACA,QACA,QACA,QACA,SAEJC,EACI,qKAEJu6R,EAAO54S,EAAOE,aAAa,QAAS,CACpCC,OAAQ,0FAA0FC,MAC9F,KAEJC,YAAa,SAAUuB,EAAGyY,GACtB,OAAKzY,EAEM,QAAQwI,KAAKiQ,GACbivE,EAAuB1nF,EAAE2c,SAEzB8qE,EAAoBznF,EAAE2c,SAJtB8qE,GAQfhrE,YAAaA,EACbG,iBAAkBH,EAClBI,kBACI,4FACJC,uBACI,mFAEJN,YAAaA,EACbO,gBAAiBP,EACjBQ,iBAAkBR,EAElB9d,SACI,6DAA6DF,MAAM,KACvEG,cAAe,8BAA8BH,MAAM,KACnDI,YAAa,uBAAuBJ,MAAM,KAC1Cye,oBAAoB,EACpBpe,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,0BAEVC,SAAU,CACNC,QAAS,kBACTC,QAAS,iBACTC,SAAU,eACVC,QAAS,mBACTC,SAAU,2BACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,UACRC,KAAM,aACNC,EAAG,oBACHC,GAAI,cACJC,EAAG,aACHC,GAAI,aACJC,EAAG,UACHC,GAAI,SACJC,EAAG,UACHC,GAAI,WACJC,EAAG,YACHC,GAAI,aACJC,EAAG,WACHC,GAAI,WAERgB,uBAAwB,kBACxBC,QAAS,SAAUI,GACf,OACIA,GACY,IAAXA,GAA2B,IAAXA,GAAgBA,GAAU,GAAK,MAAQ,OAGhEpB,KAAM,CACFC,IAAK,EACLC,IAAK,KAIb,OAAOo2S,M,qBCxGX,EAAQ,S,oBCNR,YACmB,WACf,aAEA,IAAI/4S,EAASiG,QAAQC,KAAKC,MAAMC,QAAQ,yBAEpCC,EAAWJ,QAAQC,KAAKC,MAAMC,QAAQ,sBAEtC4yS,EAAc,SAAUvoQ,EAAKwoQ,GAC/BxoQ,EAAIj7B,KAAK,YAAY,GAAGoI,QAAQ7N,MAAM6M,WAAaq8R,GAEjDC,EAAW,SAAUzoQ,EAAK7qC,GAC5B,IAAI6U,EAAQpU,EAAST,GAAQuzS,EAAM1+R,EAAMm0R,QACzCn+P,EAAIqoF,SAAS,CACX7zG,EAAGk0R,EAAIl0R,EACPqd,EAAG62Q,EAAI72Q,EACP5iB,EAAGy5R,EAAIz5R,EACPoqM,IAAKrvM,EAAMskE,QAAQlvD,OAAO,KAE5BmpR,EAAYvoQ,EAAKh2B,EAAMskE,UAErB7rE,EAAO,SAAU3M,EAAQoD,EAAU/D,GACrC,IAAI6qC,EAAMlqC,EAAOiN,cAAcN,KAAK,CAClCjE,MAAO,QACP4W,MAAO,CACL7d,KAAM,YACNyL,OAAQ,OACRC,UAAW,MACXC,MAAO,UACPwT,QAAS,EACTC,QAAS,GACTvB,MAAO,CACL,CACE7d,KAAM,cACNpC,MAAOA,EACPsvC,SAAU,WACR,IAAIikQ,EAAMj5S,KAAKi5S,MACX1oQ,IACFA,EAAIj7B,KAAK,MAAM5P,MAAMuzS,EAAIl0R,GACzBwrB,EAAIj7B,KAAK,MAAM5P,MAAMuzS,EAAI72Q,GACzBmO,EAAIj7B,KAAK,MAAM5P,MAAMuzS,EAAIz5R,GACzB+wB,EAAIj7B,KAAK,QAAQ5P,MAAM1F,KAAK0F,QAAQiqB,OAAO,IAC3CmpR,EAAYvoQ,EAAKvwC,KAAK0F,YAI5B,CACEoC,KAAM,OACNmf,QAAS,EACTgtB,SAAU,EACV/nB,SAAU,CACRpkB,KAAM,UACNqkB,KAAM,EACNzmB,MAAO,IACPsO,KAAM,EACNtG,YAAY,EACZsnC,SAAU,WACR,IACI1wC,EAAMoB,EADNwzS,EAAkB3oQ,EAAIj7B,KAAK,eAAe,GAI9C,GAFAhR,EAAOtE,KAAKsE,OACZoB,EAAQ1F,KAAK0F,QACA,QAATpB,EAIF,OAHAoB,EAAQ,IAAMA,EACdszS,EAASzoQ,EAAK7qC,QACdwzS,EAAgBxzS,MAAMA,GAGxBA,EAAQ,CACNqf,EAAGwrB,EAAIj7B,KAAK,MAAM5P,QAClB08B,EAAGmO,EAAIj7B,KAAK,MAAM5P,QAClB8Z,EAAG+wB,EAAIj7B,KAAK,MAAM5P,SAEpBwzS,EAAgBxzS,MAAMA,GACtBszS,EAASzoQ,EAAK7qC,KAGlBigB,MAAO,CACL,CACErhB,KAAM,IACNqP,MAAO,IACPM,UAAW,GAEb,CACE3P,KAAM,IACNqP,MAAO,KAET,CACErP,KAAM,IACNqP,MAAO,KAET,CACErP,KAAM,MACNqP,MAAO,IACPjO,MAAO,UAET,CACEpB,KAAM,UACNwD,KAAM,YACNosC,OAAQ,OAMlBhgC,SAAU,WACRzK,EAAS,IAAM8mC,EAAIiY,SAASohK,QAGhCovF,EAASzoQ,EAAK7qC,IAEZqN,EAAS,CAAEC,KAAMA,GASrB,SAAS8D,KAPThX,EAAOsN,IAAI,eAAe,SAAU/G,GAC7BA,EAAOC,SAAS6yS,wBACnB9yS,EAAOC,SAAS6yS,sBAAwB,SAAU1vS,EAAU/D,GAC1DqN,EAAOC,KAAK3M,EAAQoD,EAAU/D,SAlHtB,IADlB,I,sBCIE,SAAU5F,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;IAAI+nB,EAAY,CACRtI,EAAG,IACHK,EAAG,IACHI,EAAG,IACHC,EAAG,IACHT,EAAG,IACHW,EAAG,IACHN,EAAG,IACHJ,EAAG,IACHW,EAAG,IACH0H,EAAG,KAEPqN,EAAY,CACR,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,KAETjX,EAAc,CACV,OACA,WACA,UACA,UACA,OACA,QACA,QACA,OACA,aACA,UACA,WACA,cAEJQ,EAAmB,CACf,OACA,QACA,UACA,UACA,OACA,QACA,QACA,OACA,QACA,UACA,OACA,SAGJ4yO,EAAKxxP,EAAOE,aAAa,KAAM,CAC/BC,OAAQ,CACJka,OAAQ,8EAA8Eja,MAClF,KAEJ+e,WACI,0EAA0E/e,MACtE,MAGZC,YACI,6DAA6DD,MAAM,KACvEE,SAAU,uDAAuDF,MAAM,KACvEG,cAAe,kCAAkCH,MAAM,KACvDI,YAAa,qBAAqBJ,MAAM,KACxCK,eAAgB,CACZC,GAAI,aACJC,IAAK,gBACLC,EAAG,aACHC,GAAI,cACJC,IAAK,0BACLC,KAAM,iCAGVqd,YAAaA,EACbO,gBAAiBP,EACjBQ,iBAAkBA,EAElBP,YACI,+KAEJG,iBACI,+KAEJC,kBACI,uIAEJC,uBACI,sFAEJ1d,SAAU,CACNC,QAAS,UACTC,QAAS,UACTC,SAAU,WACVC,QAAS,UACTC,SAAU,mBACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,SACRC,KAAM,UACNC,EAAG,cACHC,GAAI,WACJC,EAAG,UACHC,GAAI,UACJC,EAAG,UACHC,GAAI,UACJC,EAAG,SACHC,GAAI,SACJC,EAAG,WACHC,GAAI,WACJC,EAAG,UACHC,GAAI,WAERimB,SAAU,SAAU9Y,GAChB,OAAOA,EAAOvH,QAAQ,iBAAiB,SAAUpD,GAC7C,OAAOwwB,EAAUxwB,OAGzB0jB,WAAY,SAAU/Y,GAClB,OAAOA,EAAOvH,QAAQ,OAAO,SAAUpD,GACnC,OAAOkjB,EAAUljB,OAKzBlC,cAAe,qBACfC,aAAc,SAAUC,EAAMC,GAI1B,OAHa,KAATD,IACAA,EAAO,GAEM,QAAbC,EACOD,EAAO,EAAIA,EAAOA,EAAO,GACZ,SAAbC,EACAD,EACa,UAAbC,EACAD,GAAQ,GAAKA,EAAOA,EAAO,GACd,QAAbC,EACAD,EAAO,QADX,GAIXC,SAAU,SAAUD,EAAME,EAAQC,GAC9B,OAAIH,EAAO,EACA,MACAA,EAAO,GACP,OACAA,EAAO,GACP,QACAA,EAAO,GACP,MAEA,OAGfP,KAAM,CACFC,IAAK,EACLC,IAAK,KAIb,OAAOgvP,M,qBC1KX,EAAQ,S,qBCAR,EAAQ,S,oBCNR,YACa,WACT,aAEA,IAAI3xP,EAASiG,QAAQC,KAAKC,MAAMC,QAAQ,yBAEpCC,EAAWJ,QAAQC,KAAKC,MAAMC,QAAQ,eAEtCkO,EAAW,SAAU/N,GACvBA,EAAOgO,WAAW,YAAY,WACxBlO,EAASkyB,IAAMlyB,EAASkyB,IAAM,GAChChyB,EAAOmP,SAASsH,YAAY,SAAS,EAAO,MAE5CzW,EAAOqsL,SAAS0mH,YAIlB3kS,EAAW,CAAEL,SAAUA,GAEvBoC,EAAa,SAAUnQ,GACzBA,EAAOoQ,UAAU,QAAS,CACxB1H,MAAO,QACP2H,IAAK,aAEPrQ,EAAOsQ,YAAY,QAAS,CAC1BhL,KAAM,QACN+K,IAAK,WACLE,KAAM,WAGNC,EAAU,CAAEzC,SAAUoC,GAO1B,SAASM,KALThX,EAAOsN,IAAI,SAAS,SAAU/G,GAC5BoO,EAASL,SAAS/N,GAClBwQ,EAAQzC,SAAS/N,GACjBA,EAAOw6E,YAAY,SAAU,GAAI,gBAlC3B,IADZ,I,sBCIE,SAAU/gF,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;IAAI+nB,EAAY,CACRtI,EAAG,IACHK,EAAG,IACHI,EAAG,IACHC,EAAG,IACHT,EAAG,IACHW,EAAG,IACHN,EAAG,IACHJ,EAAG,IACHW,EAAG,IACH0H,EAAG,KAEPqN,EAAY,CACR,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,KAGT+jR,EAAKp5S,EAAOE,aAAa,KAAM,CAC/BC,OAAQ,yFAAyFC,MAC7F,KAEJC,YACI,yEAAyED,MACrE,KAERsC,kBAAkB,EAClBpC,SAAU,wDAAwDF,MAC9D,KAEJG,cAAe,mCAAmCH,MAAM,KACxDI,YAAa,qBAAqBJ,MAAM,KACxCK,eAAgB,CACZC,GAAI,gBACJC,IAAK,mBACLC,EAAG,aACHC,GAAI,cACJC,IAAK,6BACLC,KAAM,oCAEVC,SAAU,CACNC,QAAS,UACTC,QAAS,YACTC,SAAU,WACVC,QAAS,cACTC,SAAU,mBACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,QACRC,KAAM,WACNC,EAAG,WACHC,GAAI,WACJC,EAAG,WACHC,GAAI,WACJC,EAAG,UACHC,GAAI,UACJC,EAAG,UACHC,GAAI,UACJC,EAAG,WACHC,GAAI,WACJC,EAAG,UACHC,GAAI,WAERimB,SAAU,SAAU9Y,GAChB,OAAOA,EAAOvH,QAAQ,iBAAiB,SAAUpD,GAC7C,OAAOwwB,EAAUxwB,OAGzB0jB,WAAY,SAAU/Y,GAClB,OAAOA,EAAOvH,QAAQ,OAAO,SAAUpD,GACnC,OAAOkjB,EAAUljB,OAKzBlC,cAAe,qBACfC,aAAc,SAAUC,EAAMC,GAI1B,OAHa,KAATD,IACAA,EAAO,GAEM,QAAbC,EACOD,EAAO,EAAIA,EAAOA,EAAO,GACZ,SAAbC,EACAD,EACa,SAAbC,EACAD,GAAQ,GAAKA,EAAOA,EAAO,GACd,SAAbC,EACAD,EAAO,QADX,GAIXC,SAAU,SAAUD,EAAME,EAAQC,GAC9B,OAAIH,EAAO,EACA,MACAA,EAAO,GACP,OACAA,EAAO,GACP,OACAA,EAAO,GACP,OAEA,OAGfP,KAAM,CACFC,IAAK,EACLC,IAAK,KAIb,OAAO42S,M,sBC9HT,SAAUv5S,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;IAAIq5S,EAAOr5S,EAAOE,aAAa,QAAS,CACpCC,OAAQ,wFAAwFC,MAC5F,KAEJC,YAAa,kDAAkDD,MAAM,KACrEE,SAAU,2DAA2DF,MACjE,KAEJG,cAAe,8BAA8BH,MAAM,KACnDI,YAAa,uBAAuBJ,MAAM,KAC1CK,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,0BAEVC,SAAU,CACNC,QAAS,gBACTC,QAAS,mBACTC,SAAU,eACVC,QAAS,oBACTC,SAAU,sBACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,QACRC,KAAM,SACNC,EAAG,gBACHC,GAAI,aACJC,EAAG,WACHC,GAAI,aACJC,EAAG,UACHC,GAAI,WACJC,EAAG,QACHC,GAAI,UACJC,EAAG,UACHC,GAAI,YACJC,EAAG,SACHC,GAAI,YAERgB,uBAAwB,uBACxBC,QAAS,SAAUI,GACf,IAAI6b,EAAI7b,EAAS,GACbR,EACgC,OAAxBQ,EAAS,IAAO,IACd,KACM,IAAN6b,EACA,KACM,IAANA,EACA,KACM,IAANA,EACA,KACA,KACd,OAAO7b,EAASR,GAEpBZ,KAAM,CACFC,IAAK,EACLC,IAAK,KAIb,OAAO62S,M,oBC5EX,YACkB,WACd,aAEA,IAAI9zS,EAAO,SAAUC,GACnB,IAAIC,EAAQD,EACRE,EAAM,WACR,OAAOD,GAELE,EAAM,SAAUC,GAClBH,EAAQG,GAENC,EAAQ,WACV,OAAON,EAAKG,MAEd,MAAO,CACLA,IAAKA,EACLC,IAAKA,EACLE,MAAOA,IAIPhG,EAASiG,QAAQC,KAAKC,MAAMC,QAAQ,yBAEpCC,EAAWJ,QAAQC,KAAKC,MAAMC,QAAQ,eAEtCkB,EAAWrB,QAAQC,KAAKC,MAAMC,QAAQ,sBAEtCqzS,EAAyB,SAAUlzS,GACrC,OAAOtB,SAASsB,EAAOW,SAAS,wBAAyBX,EAAO42O,aAAantM,cAAe,KAE1F0pQ,EAAyB,SAAUnzS,GACrC,OAAOtB,SAASsB,EAAOW,SAAS,wBAAyB,GAAI,KAE3DyyS,EAA+B,SAAUpzS,GAC3C,OAAOA,EAAOW,SAAS,8BAA+B,IAEpD0yS,EAA4B,SAAUrzS,GACxC,OAAOA,EAAOW,SAAS,2BAA4B,KAEjD2yS,EAAyB,SAAUtzS,GACrC,OAAOA,EAAOW,SAAS,sBAAsB,IAE3CE,EAAW,CACbqyS,uBAAwBA,EACxBC,uBAAwBA,EACxBC,6BAA8BA,EAC9BC,0BAA2BA,EAC3BC,uBAAwBA,GAGtBvqL,EAAe,SAAU/oH,GAC3B,OAAOA,EAAOsD,QAAQiwS,YAAcvzS,EAAOsD,QAAQiwS,WAAWxqL,gBAE5DuuF,EAAO,SAAUt3M,EAAQuiL,EAASn1I,EAAOwrE,EAAUx1G,GACrDrC,EAAS8tB,iBAAiB7uB,GAAQ,WAChCuyB,EAAOvyB,EAAQuiL,GACXn1I,IACFkqK,EAAKt3M,EAAQuiL,EAASn1I,EAAOwrE,EAAUx1G,GAC9BA,GACTA,MAEDw1G,IAED46L,EAAkB,SAAUxzS,EAAQ4jC,GACtC,IAAIv2B,EAAOrN,EAAO0T,UACdrG,IACFA,EAAK7D,MAAMsnN,UAAYltL,EAAQ,GAAK,SAC/BA,IACHv2B,EAAKksC,UAAY,KAInBhnB,EAAS,SAAUvyB,EAAQuiL,GAC7B,IAAIkxH,EAAWrnR,EAAK/e,EAAMqmS,EAAcC,EACpCh1P,EAAWC,EAAcigH,EAAYC,EAAeC,EAAWC,EAC/DpzJ,EAAM5L,EAAO4L,IAEjB,GADAwgB,EAAMpsB,EAAOmP,SACRid,EAGL,GAAI28F,EAAa/oH,GACfwzS,EAAgBxzS,GAAQ,OAD1B,CAIAqN,EAAO+e,EAAI/e,KACXqmS,EAAe7yS,EAASqyS,uBAAuBlzS,GAC/C2+C,EAAY/yC,EAAIutC,SAAS9rC,EAAM,cAAc,GAC7CuxC,EAAehzC,EAAIutC,SAAS9rC,EAAM,iBAAiB,GACnDwxJ,EAAajzJ,EAAIutC,SAAS9rC,EAAM,eAAe,GAC/CyxJ,EAAgBlzJ,EAAIutC,SAAS9rC,EAAM,kBAAkB,GACrD0xJ,EAAYnzJ,EAAIutC,SAAS9rC,EAAM,oBAAoB,GACnD2xJ,EAAepzJ,EAAIutC,SAAS9rC,EAAM,uBAAuB,GACzDsmS,EAAWtmS,EAAKo8B,aAAe/qC,SAASigD,EAAW,IAAMjgD,SAASkgD,EAAc,IAAMlgD,SAASmgK,EAAY,IAAMngK,SAASogK,EAAe,IAAMpgK,SAASqgK,EAAW,IAAMrgK,SAASsgK,EAAc,KAC5L/7G,MAAM0wP,IAAaA,GAAY,KACjCA,EAAW7zS,EAASkyB,GAAK3kB,EAAKi3G,aAAexkH,EAAS+zE,QAAgC,IAAtBxmE,EAAKi8B,aAAqB,EAAIj8B,EAAKo8B,cAEjGkqQ,EAAW9yS,EAASqyS,uBAAuBlzS,KAC7C0zS,EAAeC,GAEjB,IAAIC,EAAY/yS,EAASsyS,uBAAuBnzS,GAC5C4zS,GAAaD,EAAWC,GAC1BF,EAAeE,EACfJ,EAAgBxzS,GAAQ,IAExBwzS,EAAgBxzS,GAAQ,GAEtB0zS,IAAiBnxH,EAAQjjL,QAC3Bm0S,EAAYC,EAAenxH,EAAQjjL,MACnCsM,EAAI6vD,SAASz7D,EAAOizP,cAAe,SAAUygD,EAAe,MAC5DnxH,EAAQhjL,IAAIm0S,GACR5zS,EAAS+zE,QAAU4/N,EAAY,GACjClhR,EAAOvyB,EAAQuiL,MAIjBl0K,EAAQ,SAAUrO,EAAQuiL,GAC5BviL,EAAOsO,GAAG,QAAQ,WAChB,IAAIulS,EAAiBC,EACjBloS,EAAM5L,EAAO4L,IACjBioS,EAAkBhzS,EAASuyS,6BAA6BpzS,GACxD8zS,EAAejzS,EAASwyS,0BAA0BrzS,IAC1B,IAApB6zS,GACFjoS,EAAIwqE,UAAUp2E,EAAO0T,UAAW,CAC9Bi3O,YAAakpD,EACbE,aAAcF,KAGG,IAAjBC,GACFloS,EAAIwqE,UAAUp2E,EAAO0T,UAAW,CAAEorJ,cAAeg1I,OAGrD9zS,EAAOsO,GAAG,sDAAsD,SAAUR,GACxEykB,EAAOvyB,EAAQuiL,MAEb1hL,EAASyyS,uBAAuBtzS,IAClCA,EAAOsO,GAAG,QAAQ,WAChBgpM,EAAKt3M,EAAQuiL,EAAS,GAAI,KAAK,WAC7B+0B,EAAKt3M,EAAQuiL,EAAS,EAAG,YAK7ByxH,EAAS,CACX3lS,MAAOA,EACPkkB,OAAQA,GAGNxkB,EAAW,SAAU/N,EAAQuiL,GAC/BviL,EAAOgO,WAAW,iBAAiB,WACjCgmS,EAAOzhR,OAAOvyB,EAAQuiL,OAGtBn0K,EAAW,CAAEL,SAAUA,GAS3B,SAAS0C,KAPThX,EAAOsN,IAAI,cAAc,SAAU/G,GACjC,IAAKA,EAAO4P,OAAQ,CAClB,IAAI2yK,EAAUpjL,EAAK,GACnBiP,EAASL,SAAS/N,EAAQuiL,GAC1ByxH,EAAO3lS,MAAMrO,EAAQuiL,QA9JZ,IADjB,I,oBCAA,YACqB,WACjB,aAEA,IAAIpjL,EAAO,SAAUC,GACnB,IAAIC,EAAQD,EACRE,EAAM,WACR,OAAOD,GAELE,EAAM,SAAUC,GAClBH,EAAQG,GAENC,EAAQ,WACV,OAAON,EAAKG,MAEd,MAAO,CACLA,IAAKA,EACLC,IAAKA,EACLE,MAAOA,IAIPhG,EAASiG,QAAQC,KAAKC,MAAMC,QAAQ,yBAEpCC,EAAWJ,QAAQC,KAAKC,MAAMC,QAAQ,sBAE1C,SAASy9E,EAAuBhyE,GAC9B,OAAOA,GAA0B,IAAlBA,EAAKye,UAA2C,UAAzBze,EAAK0D,gBAE7C,SAASilS,EAAsBrqS,EAAO0B,EAAM4oS,EAAiBC,EAAc9yP,GACzE,IAAI7lD,EAEA8J,EAAiB8mB,EACjBqxD,EAAkBC,EAAuBC,EAFzCnxE,EAAU,GACJsJ,EAAQ,EAMlB,SAASs+R,EAAgB54S,EAAG24S,GAE1B,GADAA,EAAeA,GAAgB,GAC1B34S,EAAE,GACL,MAAM,IAAIshB,MAAM,2DAElB,IAAI3W,EAAQ3K,EAAE2K,MACd,GAAIguS,EAAe,EAAG,CACpB,IAAIE,EAAK74S,EAAE24S,GACX,IAAKE,EACH,MAAM,IAAIv3R,MAAM,yBAElB3W,GAAS3K,EAAE,GAAGqM,QAAQwsS,GACtB74S,EAAE,GAAK64S,EAET,MAAO,CACLluS,EACAA,EAAQ3K,EAAE,GAAGuH,OACb,CAACvH,EAAE,KAGP,SAASqsE,EAAQv8D,GACf,IAAIw8D,EACJ,GAAsB,IAAlBx8D,EAAKye,SACP,OAAOze,EAAKvG,KAEd,GAAI24E,EAAsBpyE,EAAKnH,YAAcs5E,EAAiBnyE,EAAKnH,UACjE,MAAO,GAGT,GADA2jE,EAAM,GACFwV,EAAuBhyE,GACzB,MAAO,KAKT,IAHImyE,EAAiBnyE,EAAKnH,WAAaw5E,EAAsBryE,EAAKnH,aAChE2jE,GAAO,MAELx8D,EAAOA,EAAKiM,WACd,GACEuwD,GAAOD,EAAQv8D,SACRA,EAAOA,EAAKqgB,aAEvB,OAAOm8C,EAET,SAAS+V,EAAmBvyE,EAAMkB,EAASsxE,GACzC,IAAI9hB,EAAWC,EAAS8hB,EAAgBC,EAAcE,EAAa,GAAIC,EAAU,EAAGC,EAAU9yE,EAAM2yE,EAAgBzxE,EAAQ4oE,QAASiJ,EAAa,EAClJnkD,EACE,MAAO,EAAM,CAiBX,IAhBIujD,EAAiBW,EAAQj6E,WAAaw5E,EAAsBS,EAAQj6E,WAAam5E,EAAuBc,KAC1GD,IAEuB,IAArBC,EAAQr0D,YACLkyC,GAAWmiB,EAAQr7E,OAASo7E,GAAWF,EAAc,IACxDhiB,EAAUmiB,EACVJ,EAAeC,EAAc,GAAKE,GACzBniB,GACTkiB,EAAWz3E,KAAK23E,IAEbpiB,GAAaoiB,EAAQr7E,OAASo7E,EAAUF,EAAc,KACzDjiB,EAAYoiB,EACZL,EAAiBE,EAAc,GAAKE,GAEtCA,GAAWC,EAAQr7E,QAEjBi5D,GAAaC,GAgBf,GAfAmiB,EAAUN,EAAU,CAClB9hB,UAAWA,EACX+hB,eAAgBA,EAChB9hB,QAASA,EACT+hB,aAAcA,EACdE,WAAYA,EACZz/E,MAAOw/E,EAAc,GACrBI,WAAYA,IAEdF,GAAWliB,EAAQl5D,OAASi7E,EAC5BhiB,EAAY,KACZC,EAAU,KACViiB,EAAa,GACbD,EAAgBzxE,EAAQ4oE,QACxBiJ,KACKJ,EACH,WAEG,GAAMP,EAAsBU,EAAQj6E,YAAas5E,EAAiBW,EAAQj6E,YAAci6E,EAAQ7mE,YAKhG,GAAI6mE,EAAQzyD,YAAa,CAC9ByyD,EAAUA,EAAQzyD,YAClB,eANA,IAAK2xD,EAAuBc,GAAU,CACpCA,EAAUA,EAAQ7mE,WAClB,SAMJ,MAAO,EAAM,CACX,GAAI6mE,EAAQzyD,YAAa,CACvByyD,EAAUA,EAAQzyD,YAClB,MACK,GAAIyyD,EAAQl6E,aAAeoH,EAGhC,MAAM4uB,EAFNkkD,EAAUA,EAAQl6E,aAO5B,SAASo6E,EAAYn6E,GACnB,IAAIo6E,EACJ,GAAwB,oBAAbp6E,EAAyB,CAClC,IAAImwS,EAAgBnwS,EAAS4lB,SAAW5lB,EAAWioB,EAAIoG,cAAcruB,GACrEo6E,EAAsB,SAAUC,EAAMH,GACpC,IAAI5+E,EAAQ60S,EAAcp9P,WAAU,GAKpC,OAJAz3C,EAAM6W,aAAa,iBAAkB+nE,GACjCG,GACF/+E,EAAMwQ,YAAYmc,EAAIhd,eAAeovE,IAEhC/+E,QAGT8+E,EAAsBp6E,EAExB,OAAO,SAAUmyE,GACf,IAAI5zE,EACA6D,EACArC,EACA83D,EAAYsa,EAAMta,UAClBC,EAAUqa,EAAMra,QAChBoiB,EAAa/H,EAAM+H,WACvB,GAAIriB,IAAcC,EAAS,CACzB,IAAIkc,EAASnc,EACb93D,EAAai0E,EAAOj0E,WAChBoyE,EAAMyH,eAAiB,IACzBr7E,EAAS0pB,EAAIhd,eAAe+oE,EAAOpzE,KAAK+f,UAAU,EAAGwxD,EAAMyH,iBAC3D75E,EAAW1B,aAAaE,EAAQy1E,IAElC,IAAIpmE,EAAKwsE,EAAoBjI,EAAM73E,MAAM,GAAI4/E,GAO7C,OANAn6E,EAAW1B,aAAauP,EAAIomE,GACxB7B,EAAM0H,aAAe7F,EAAOp1E,SAC9BwD,EAAQ6lB,EAAIhd,eAAe+oE,EAAOpzE,KAAK+f,UAAUwxD,EAAM0H,eACvD95E,EAAW1B,aAAa+D,EAAO4xE,IAEjCA,EAAOj0E,WAAW+iB,YAAYkxD,GACvBpmE,EAETrP,EAAS0pB,EAAIhd,eAAe4sD,EAAUj3D,KAAK+f,UAAU,EAAGwxD,EAAMyH,iBAC9Dx3E,EAAQ6lB,EAAIhd,eAAe6sD,EAAQl3D,KAAK+f,UAAUwxD,EAAM0H,eAExD,IADA,IAAIU,EAAMH,EAAoBviB,EAAUj3D,KAAK+f,UAAUwxD,EAAMyH,gBAAiBM,GACrEh7E,EAAI,EAAG1E,EAAI23E,EAAM4H,WAAWn7E,OAAQM,EAAI1E,IAAK0E,EAAG,CACvD,IAAIs7E,EAAYrI,EAAM4H,WAAW76E,GAC7Bu7E,EAAUL,EAAoBI,EAAU55E,KAAMs5E,GAClDM,EAAUz6E,WAAWgL,aAAa0vE,EAASD,GAE7C,IAAIE,EAAMN,EAAoBtiB,EAAQl3D,KAAK+f,UAAU,EAAGwxD,EAAM0H,cAAeK,GAS7E,OARAn6E,EAAa83D,EAAU93D,WACvBA,EAAW1B,aAAaE,EAAQs5D,GAChC93D,EAAW1B,aAAak8E,EAAK1iB,GAC7B93D,EAAW+iB,YAAY+0C,GACvB93D,EAAa+3D,EAAQ/3D,WACrBA,EAAW1B,aAAaq8E,EAAK5iB,GAC7B/3D,EAAW1B,aAAa+D,EAAO01D,GAC/B/3D,EAAW+iB,YAAYg1C,GAChB4iB,GAIX,GArKAzyD,EAAM9gB,EAAK46B,cACXu3C,EAAmBp8B,EAAO2X,mBAC1B0kB,EAAwBr8B,EAAOo+B,wBAC/B9B,EAAwBt8B,EAAOslB,wBAiK/BrhE,EAAOuiE,EAAQv8D,GACVhG,EAAL,CAGA,GAAIsE,EAAMnQ,OACR,MAAO+B,EAAIoO,EAAM5M,KAAKsI,GACpBkH,EAAQ/F,KAAK2tS,EAAgB54S,EAAG24S,SAGlC34S,EAAI8J,EAAK7G,MAAMmL,GACf4C,EAAQ/F,KAAK2tS,EAAgB54S,EAAG24S,IAMlC,OAJI3nS,EAAQzJ,SACV+S,EAAQtJ,EAAQzJ,OAChB86E,EAAmBvyE,EAAMkB,EAAS8xE,EAAY41N,KAEzCp+R,GAET,IAAIy+R,EAAkB,CAAEN,sBAAuBA,GAE3C9yN,EAAc,SAAUv5E,GAC1B,IAAIvI,EAAQuI,EAAI4P,aAAa,kBAC7B,MAAqB,kBAAVnY,EACF,GAAKA,EAEPA,GAELm1S,EAAiB,SAAUx0S,EAAQy0S,EAAmB7qS,GACxD,IAAI0B,EAAMmpD,EAKV,OAJAA,EAASz0D,EAAO4L,IAAIiE,OAAO,OAAQ,CAAE,iBAAkB,IACvD4kD,EAAOxwD,UAAY,mBACnBqH,EAAOtL,EAAO0T,UACdihB,EAAK30B,EAAQy0S,GAAmB,GACzBF,EAAgBN,sBAAsBrqS,EAAO0B,EAAMmpD,GAAQ,EAAOz0D,EAAOqhD,SAE9E+nB,EAAS,SAAU99D,GACrB,IAAIpH,EAAaoH,EAAKpH,WAClBoH,EAAKiM,YACPrT,EAAW1B,aAAa8I,EAAKiM,WAAYjM,GAE3CA,EAAKpH,WAAW+iB,YAAY3b,IAE1B81E,EAAmB,SAAUphF,EAAQmG,GACvC,IAAI0M,EACAmuE,EAAQ,GAEZ,GADAnuE,EAAQ/S,EAAS2d,QAAQzd,EAAO0T,UAAU1D,qBAAqB,SAC3D6C,EAAM9P,OACR,IAAK,IAAIM,EAAI,EAAGA,EAAIwP,EAAM9P,OAAQM,IAAK,CACrC,IAAIomD,EAAY03B,EAAYtuE,EAAMxP,IAChB,OAAdomD,GAAuBA,EAAU1mD,SAGjC0mD,IAActjD,EAAMlE,YACtB++E,EAAMv6E,KAAKoM,EAAMxP,KAIvB,OAAO29E,GAELo+M,EAAgB,SAAUp/R,EAAQy0S,EAAmB/iH,GACvD,IAAIgjH,EAAYD,EAAkBn1S,MAC9BsM,EAAM5L,EAAO4L,IACjB8lL,GAAsB,IAAZA,EACNA,EACFgjH,IAEAA,IAEF9oS,EAAIs+G,YAAY9oC,EAAiBphF,EAAQy0S,EAAkBn1S,OAAQ,6BACnE,IAAI0hF,EAAQI,EAAiBphF,EAAQ00S,GACrC,OAAI1zN,EAAMj+E,QACR6I,EAAI2+G,SAASnpC,EAAiBphF,EAAQ00S,GAAY,6BAClD10S,EAAOuL,UAAUo9E,eAAe3H,EAAM,IAC/B0zN,IAED,GAEN59E,EAAa,SAAUlrN,EAAKN,GAC9B,IAAIvH,EAASuH,EAAKpH,WAClB0H,EAAI+I,OAAOrJ,GACPM,EAAIk2C,QAAQ/9C,IACd6H,EAAI+I,OAAO5Q,IAGXkL,EAAO,SAAUjP,EAAQy0S,EAAmBnvS,EAAMqvS,EAAWC,GAC/DtvS,EAAOA,EAAKzD,QAAQ,sCAAuC,QAC3DyD,EAAOA,EAAKzD,QAAQ,MAAO,gBAC3ByD,EAAOsvS,EAAY,MAAQtvS,EAAO,MAAQA,EAC1C,IAAIwQ,EAAQ0+R,EAAex0S,EAAQy0S,EAAmB,IAAI79P,OAAOtxC,EAAMqvS,EAAY,IAAM,OAKzF,OAJI7+R,IACF2+R,EAAkBl1S,KAAK,GACvBk1S,EAAkBl1S,IAAI6/R,EAAcp/R,EAAQy0S,GAAmB,KAE1D3+R,GAEL6W,EAAO,SAAU3sB,EAAQy0S,GAC3B,IAAItuS,EAAQi5R,EAAcp/R,EAAQy0S,GAAmB,IACtC,IAAXtuS,GACFsuS,EAAkBl1S,IAAI4G,IAGtB+1H,EAAO,SAAUl8H,EAAQy0S,GAC3B,IAAItuS,EAAQi5R,EAAcp/R,EAAQy0S,GAAmB,IACtC,IAAXtuS,GACFsuS,EAAkBl1S,IAAI4G,IAGtB0uS,EAAc,SAAUvpS,GAC1B,IAAI+yE,EAAa8C,EAAY71E,GAC7B,OAAsB,OAAf+yE,GAAuBA,EAAWt7E,OAAS,GAEhDlB,EAAU,SAAU7B,EAAQy0S,EAAmBnvS,EAAMosL,EAAS5qL,GAChE,IAAIzD,EAAGwP,EAAOvH,EAAM+yE,EAAYy2N,EAAwDC,EAArC5xL,EAAYsxL,EAAkBn1S,MAIjF,IAHAoyL,GAAsB,IAAZA,EACVpmL,EAAOtL,EAAO0T,UACdb,EAAQ/S,EAAS0rB,KAAK1rB,EAAS2d,QAAQnS,EAAK0E,qBAAqB,SAAU6kS,GACtExxS,EAAI,EAAGA,EAAIwP,EAAM9P,OAAQM,IAAK,CACjC,IAAIomD,EAAY03B,EAAYtuE,EAAMxP,IAElC,GADAg7E,EAAay2N,EAAoBp2S,SAAS+qD,EAAW,IACjD3iD,GAAOu3E,IAAeo2N,EAAkBn1S,MAAO,CAC7CgG,EAAKvC,QACP8P,EAAMxP,GAAGkU,WAAW+kH,UAAYh3H,EAChC8jE,EAAOv2D,EAAMxP,KAEbyzN,EAAW92N,EAAO4L,IAAKiH,EAAMxP,IAE/B,MAAOwP,IAAQxP,GAAI,CAEjB,GADAg7E,EAAa3/E,SAASyiF,EAAYtuE,EAAMxP,IAAK,IACzCg7E,IAAey2N,EAEZ,CACLzxS,IACA,MAHAyzN,EAAW92N,EAAO4L,IAAKiH,EAAMxP,IAM7BquL,GACFvuE,SAEO2xL,EAAoBL,EAAkBn1S,OAC/CuT,EAAMxP,GAAGiT,aAAa,iBAAkBw+R,EAAoB,GAWhE,OARAL,EAAkBl1S,IAAI4jH,GAClBuuE,GACFqjH,EAAUC,EAAQh1S,EAAQy0S,GAC1B9nR,EAAK3sB,EAAQy0S,KAEbM,EAAUE,EAAQj1S,EAAQy0S,GAC1Bv4K,EAAKl8H,EAAQy0S,KAEP3tS,GAAOiuS,GAEbpgR,EAAO,SAAU30B,EAAQy0S,EAAmBS,GAC9C,IAAI7xS,EAAGwP,EAAOiX,EAAgBk/B,EAE9B,IADAn2C,EAAQ/S,EAAS2d,QAAQzd,EAAO0T,UAAU1D,qBAAqB,SAC1D3M,EAAI,EAAGA,EAAIwP,EAAM9P,OAAQM,IAAK,CACjC,IAAIomD,EAAY03B,EAAYtuE,EAAMxP,IAChB,OAAdomD,GAAsBA,EAAU1mD,SAC9B0mD,IAAcgrP,EAAkBn1S,MAAM2C,aACnC6nB,IACHA,EAAiBjX,EAAMxP,GAAGkU,YAE5ByxC,EAAen2C,EAAMxP,GAAGkU,YAE1B6xD,EAAOv2D,EAAMxP,KAGjB,GAAIymB,GAAkBk/B,EAAc,CAClC,IAAIt/B,EAAM1pB,EAAO4L,IAAIkf,YAMrB,OALApB,EAAIW,SAASP,EAAgB,GAC7BJ,EAAIY,OAAO0+B,EAAcA,EAAajkD,KAAKhC,SACf,IAAxBmyS,GACFl1S,EAAOuL,UAAUwf,OAAOrB,GAEnBA,IAGPsrR,EAAU,SAAUh1S,EAAQy0S,GAC9B,OAAOrzN,EAAiBphF,EAAQy0S,EAAkBn1S,MAAQ,GAAGyD,OAAS,GAEpEkyS,EAAU,SAAUj1S,EAAQy0S,GAC9B,OAAOrzN,EAAiBphF,EAAQy0S,EAAkBn1S,MAAQ,GAAGyD,OAAS,GAEpEixC,EAAU,CACZrf,KAAMA,EACN1lB,KAAMA,EACN0d,KAAMA,EACNuvG,KAAMA,EACNr6H,QAASA,EACTmzS,QAASA,EACTC,QAASA,GAGP31S,EAAM,SAAUU,EAAQy0S,GAC1B,IAAI9/Q,EAAO,SAAUugR,GACnB,OAAOlhQ,EAAQrf,KAAK30B,EAAQy0S,EAAmBS,IAE7CjmS,EAAO,SAAU3J,EAAMqvS,EAAWC,GACpC,OAAO5gQ,EAAQ/kC,KAAKjP,EAAQy0S,EAAmBnvS,EAAMqvS,EAAWC,IAE9DjoR,EAAO,WACT,OAAOqnB,EAAQrnB,KAAK3sB,EAAQy0S,IAE1Bv4K,EAAO,WACT,OAAOloF,EAAQkoF,KAAKl8H,EAAQy0S,IAE1B5yS,EAAU,SAAUyD,EAAMosL,EAAS5qL,GACrC,OAAOktC,EAAQnyC,QAAQ7B,EAAQy0S,EAAmBnvS,EAAMosL,EAAS5qL,IAEnE,MAAO,CACL6tB,KAAMA,EACN1lB,KAAMA,EACN0d,KAAMA,EACNuvG,KAAMA,EACNr6H,QAASA,IAGT+mB,EAAM,CAAEtpB,IAAKA,GAEbqN,EAAO,SAAU3M,EAAQy0S,GAC3B,IAAeU,EAAXv/R,EAAO,GAGX,SAASw/R,IACPlrQ,EAAIqC,UAAUt9B,KAAK,SAASsE,UAAwD,IAA/CygC,EAAQghQ,QAAQh1S,EAAQy0S,IAC7DvqQ,EAAIqC,UAAUt9B,KAAK,SAASsE,UAAwD,IAA/CygC,EAAQihQ,QAAQj1S,EAAQy0S,IAE/D,SAASY,IACPr1S,EAAOiN,cAAcqgC,MAAM,wCAAwC,WACjEpD,EAAIj7B,KAAK,SAAS,GAAGuF,WARzBxU,EAAO0L,YAAY3E,MACnBouS,EAAer1S,EAAS8O,KAAK5O,EAAOuL,UAAUgmB,WAAW,CAAEtd,OAAQ,UAUnE,IAAIi2B,EAAMlqC,EAAOiN,cAAcN,KAAK,CAClCO,OAAQ,OACR4gC,KAAM,SACN1gC,MAAO,SACPkoS,QAAS,WACPt1S,EAAOwU,QACPw/B,EAAQrf,KAAK30B,EAAQy0S,GACrBz0S,EAAO0L,YAAY3E,OAErB8G,SAAU,SAAUC,GAClB,IAAIgI,EAAOy/R,EAAWjwS,EAAMsvS,EAK5B,OAJA9mS,EAAE44B,iBACF6uQ,EAAYrrQ,EAAIj7B,KAAK,SAASm9B,UAC9BwoQ,EAAY1qQ,EAAIj7B,KAAK,UAAUm9B,UAC/B9mC,EAAO4kC,EAAIj7B,KAAK,SAAS5P,QACpBiG,EAAKvC,OAKN6S,EAAKtQ,OAASA,GAAQsQ,EAAK2/R,YAAcA,GAAa3/R,EAAKg/R,YAAcA,EACtE5gQ,EAAQghQ,QAAQh1S,EAAQy0S,IAI7BzgQ,EAAQrnB,KAAK3sB,EAAQy0S,QACrBW,UAJEC,KAOJv/R,EAAQk+B,EAAQ/kC,KAAKjP,EAAQy0S,EAAmBnvS,EAAMiwS,EAAWX,GAC5D9+R,GACHu/R,IAEFnrQ,EAAIqC,UAAUjtB,QAAQlZ,MAAM,GAAGmN,SAAmB,IAAVuC,GACxCs/R,SACAx/R,EAAO,CACLtQ,KAAMA,EACNiwS,UAAWA,EACXX,UAAWA,MAtBX5gQ,EAAQrf,KAAK30B,EAAQy0S,GAAmB,QACxCvqQ,EAAIqC,UAAUjtB,QAAQlZ,MAAM,GAAGmN,UAAS,KAwB5CkO,QAAS,CACP,CACEnc,KAAM,OACN0oC,QAAS,UACTl2B,QAAS,WACPoyB,EAAImwC,WAGR,CACE/0E,KAAM,UACNiO,UAAU,EACVuE,QAAS,WACFk8B,EAAQnyC,QAAQ7B,EAAQy0S,EAAmBvqQ,EAAIj7B,KAAK,YAAY5P,WACnE6qC,EAAIqC,UAAUjtB,QAAQlZ,MAAM,GAAGmN,UAAS,GACxCkhS,EAAkBl1S,KAAK,GACvBqW,EAAO,MAIb,CACEtQ,KAAM,cACNiO,UAAU,EACVuE,QAAS,WACPk8B,EAAQnyC,QAAQ7B,EAAQy0S,EAAmBvqQ,EAAIj7B,KAAK,YAAY5P,SAAS,GAAM,GAC/E6qC,EAAIqC,UAAUjtB,QAAQlZ,MAAM,GAAGmN,UAAS,GACxCqC,EAAO,KAGX,CACEnU,KAAM,SACNkM,KAAM,GAER,CACErI,KAAM,OACNrH,KAAM,OACNsV,UAAU,EACVuE,QAAS,WACPk8B,EAAQkoF,KAAKl8H,EAAQy0S,GACrBW,MAGJ,CACE9vS,KAAM,OACNrH,KAAM,OACNsV,UAAU,EACVuE,QAAS,WACPk8B,EAAQrnB,KAAK3sB,EAAQy0S,GACrBW,OAIN1sS,MAAO,mBACP4W,MAAO,CACL7d,KAAM,OACNmf,QAAS,GACTgtB,SAAU,GACV/sB,QAAS,GACTvB,MAAO,CACL,CACE7d,KAAM,UACNxD,KAAM,OACN6nB,KAAM,GACNxY,MAAO,OACPjO,MAAO81S,GAET,CACE1zS,KAAM,UACNxD,KAAM,UACN6nB,KAAM,GACNxY,MAAO,gBAET,CACE7L,KAAM,WACNxD,KAAM,OACNqH,KAAM,aACNgI,MAAO,KAET,CACE7L,KAAM,WACNxD,KAAM,QACNqH,KAAM,cACNgI,MAAO,UAMbZ,EAAS,CAAEC,KAAMA,GAEjBoB,EAAW,SAAU/N,EAAQy0S,GAC/Bz0S,EAAOgO,WAAW,iBAAiB,WACjCtB,EAAOC,KAAK3M,EAAQy0S,OAGpBrmS,EAAW,CAAEL,SAAUA,GAEvBgqC,EAAa,SAAU/3C,EAAQy0S,GACjC,OAAO,WACL/nS,EAAOC,KAAK3M,EAAQy0S,KAGpBtkS,EAAa,SAAUnQ,EAAQy0S,GACjCz0S,EAAOsQ,YAAY,gBAAiB,CAClChL,KAAM,mBACN0Z,SAAU,SACVlH,QAASigC,EAAW/3C,EAAQy0S,GAC5BzjQ,UAAW,SACXl9B,QAAS,SAEX9T,EAAOoQ,UAAU,gBAAiB,CAChCwD,QAAS,mBACTkE,QAASigC,EAAW/3C,EAAQy0S,KAE9Bz0S,EAAO+e,UAAUhY,IAAI,SAAU,GAAIgxC,EAAW/3C,EAAQy0S,KAEpDjkS,EAAU,CAAEzC,SAAUoC,GAQ1B,SAASM,KANThX,EAAOsN,IAAI,iBAAiB,SAAU/G,GACpC,IAAIy0S,EAAoBt1S,GAAM,GAG9B,OAFAiP,EAASL,SAAS/N,EAAQy0S,GAC1BjkS,EAAQzC,SAAS/N,EAAQy0S,GAClB7rR,EAAItpB,IAAIU,EAAQy0S,OA/kBT,IADpB,I,qBCMA,EAAQ,S,oBCNR,YACmB,WACf,aAEA,IAAIh7S,EAASiG,QAAQC,KAAKC,MAAMC,QAAQ,yBAEpCC,EAAWJ,QAAQC,KAAKC,MAAMC,QAAQ,sBAEtC21S,EAAsB,SAAUx1S,GAClC,OAAOA,EAAOW,SAAS,gCAAiC,mBAEtD80S,EAAmB,SAAUz1S,GAC/B,OAAOA,EAAOW,SAAS,6BAA8B,gBAEnD+0S,EAAwB,SAAU11S,GACpC,IAAI21S,EAAqB31S,EAAOW,SAAS,qBAAsB,IAC/D,OAAIg1S,GAAsBA,EAAmB13R,cAAgB24B,OACpD,CAAC++P,GAEDA,GAGP90S,EAAW,CACb20S,oBAAqBA,EACrBC,iBAAkBA,EAClBC,sBAAuBA,GAGrB1jS,EAAW,SAAU4jS,GACvB,OAAO,SAAUtqS,GACf,OAAqE,KAA7D,IAAMA,EAAKqD,KAAK,SAAW,KAAK9G,QAAQ+tS,KAGhDC,EAAuB,SAAU71S,EAAQ0B,EAAS2mN,GACpD,OAAO,SAAU5pN,GACf,IAAI+H,EAAO1D,UAAWqD,EAAQK,EAAKA,EAAKzD,OAAS,GAC7C+yS,EAAW3vS,EAAQ,EAAIzE,EAAQk4E,OAAOzzE,EAAQ,GAAK,GACvD,GAAiB,MAAb2vS,EACF,OAAOr3S,EAET,GAAiB,MAAbq3S,EAAkB,CACpB,IAAIC,EAAoBr0S,EAAQwnB,YAAY,IAAK/iB,GACjD,IAA2B,IAAvB4vS,EAA0B,CAC5B,IAAIC,EAAUt0S,EAAQojB,UAAUixR,EAAmB5vS,GACnD,IAAoD,IAAhD6vS,EAAQnuS,QAAQ,2BAClB,OAAOpJ,GAIb,MAAO,gBAAkB4pN,EAAM,uBAAyBroN,EAAO4L,IAAItK,OAAOkF,EAAK,IAAM,KAAOxG,EAAO4L,IAAItK,OAA0B,kBAAZkF,EAAK,GAAkBA,EAAK,GAAKA,EAAK,IAAM,YAGjKyvS,EAA8B,SAAUj2S,EAAQ21S,EAAoB7nS,GACtE,IAAIzK,EAAIsyS,EAAmB5yS,OAAQrB,EAAUoM,EAAEpM,QAC/C,GAAiB,QAAboM,EAAEmG,OAAN,CAGA,MAAO5Q,IACL3B,EAAUA,EAAQG,QAAQ8zS,EAAmBtyS,GAAIwyS,EAAqB71S,EAAQ0B,EAASb,EAAS20S,oBAAoBx1S,KAEtH8N,EAAEpM,QAAUA,IAEV2M,EAAQ,SAAUrO,GACpB,IAAIk2S,EAAWC,EACXC,EAA0B,kBAC9BF,EAAY,IAAMp2S,EAAS8O,KAAK/N,EAAS40S,iBAAiBz1S,IAAW,IACrEm2S,EAAe,IAAMr2S,EAAS8O,KAAK/N,EAAS20S,oBAAoBx1S,IAAW,IAC3E,IAAIq2S,EAAerkS,EAASkkS,GACxBI,EAAkBtkS,EAASmkS,GAC3BR,EAAqB90S,EAAS60S,sBAAsB11S,GACxDA,EAAOsO,GAAG,WAAW,WACfqnS,EAAmB5yS,OAAS,GAC9B/C,EAAOsO,GAAG,oBAAoB,SAAUR,GACtCmoS,EAA4Bj2S,EAAQ21S,EAAoB7nS,MAG5D9N,EAAO4mD,OAAOuiB,mBAAmB,SAAS,SAAUt2D,GAClD,IAAsBvH,EAAlBjI,EAAIwP,EAAM9P,OACd,MAAOM,IACLiI,EAAOuH,EAAMxP,GACTgzS,EAAa/qS,GACfA,EAAKqD,KAAKynS,EAAyB,QAC1BE,EAAgBhrS,IACzBA,EAAKqD,KAAKynS,EAAyB,YAIzCp2S,EAAO8mD,WAAWqiB,mBAAmBitO,GAAyB,SAAUvjS,GACtE,IAAsBvH,EAAlBjI,EAAIwP,EAAM9P,OACd,MAAOM,IACLiI,EAAOuH,EAAMxP,IACRgzS,EAAa/qS,IAAUgrS,EAAgBhrS,MAGxCqqS,EAAmB5yS,OAAS,GAAKuI,EAAKqD,KAAK,qBAC7CrD,EAAKrN,KAAO,QACZqN,EAAK7J,KAAO,EACZ6J,EAAKi3D,KAAM,EACXj3D,EAAKjM,MAAQiM,EAAKqD,KAAK,qBAEvBrD,EAAKqD,KAAKynS,EAAyB,cAMzC/mS,EAAgB,CAAEhB,MAAOA,GAK7B,SAASoC,KAHThX,EAAOsN,IAAI,eAAe,SAAU/G,GAClCqP,EAAchB,MAAMrO,OA5GR,IADlB,I,sBCIE,SAAUvG,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;IAAI+nB,EAAY,CACRtI,EAAG,IACHK,EAAG,IACHI,EAAG,IACHC,EAAG,IACHT,EAAG,IACHW,EAAG,IACHN,EAAG,IACHJ,EAAG,IACHW,EAAG,IACH0H,EAAG,KAEPqN,EAAY,CACR,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,KAGTsnR,EAAK38S,EAAOE,aAAa,KAAM,CAC/BC,OAAQ,yEAAyEC,MAC7E,KAEJC,YACI,yEAAyED,MACrE,KAERE,SAAU,iDAAiDF,MAAM,KACjEG,cAAe,oBAAoBH,MAAM,KACzCI,YAAa,oBAAoBJ,MAAM,KACvCye,oBAAoB,EACpBpe,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEV4B,cAAe,cACfwC,KAAM,SAAUP,GACZ,MAAiB,UAAVA,GAEX9B,SAAU,SAAUD,EAAME,EAAQC,GAC9B,OAAIH,EAAO,GACA,QAEA,SAGf7B,SAAU,CACNC,QAAS,oBACTC,QAAS,kBACTC,SAAU,iBACVC,QAAS,qBACTC,SAAU,8BACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,QACRC,KAAM,QACNC,EAAG,iBACHC,GAAI,YACJC,EAAG,UACHC,GAAI,UACJC,EAAG,UACHC,GAAI,UACJC,EAAG,UACHC,GAAI,UACJC,EAAG,QACHC,GAAI,QACJC,EAAG,WACHC,GAAI,YAERgB,uBAAwB,YACxBC,QAAS,OACTglB,SAAU,SAAU9Y,GAChB,OAAOA,EAAOvH,QAAQ,iBAAiB,SAAUpD,GAC7C,OAAOwwB,EAAUxwB,OAGzB0jB,WAAY,SAAU/Y,GAClB,OAAOA,EAAOvH,QAAQ,OAAO,SAAUpD,GACnC,OAAOkjB,EAAUljB,OAGzBvC,KAAM,CACFC,IAAK,EACLC,IAAK,KAIb,OAAOm6S,M,qBCzGX,EAAQ,S,oBCNR,YACc,SAAUr3S,GACpB,aAEA,IAAIzF,EAASiG,QAAQC,KAAKC,MAAMC,QAAQ,wBAEpCC,EAAWJ,QAAQC,KAAKC,MAAMC,QAAQ,yBAEtCkB,EAAWrB,QAAQC,KAAKC,MAAMC,QAAQ,sBAEtC22S,EAAoB,SAAUx2S,GAChC,OAAOA,EAAOW,SAAS,YAAY,EAAM,YAEvC81S,EAAa,SAAUz2S,GACzB,OAA8B,IAAvB02S,EAAW12S,IAEhB02S,EAAa,SAAU12S,GACzB,OAAOA,EAAOW,SAAS,YAErBg2S,EAAe,SAAU32S,GAC3B,OAAOA,EAAOW,SAAS,aAAa,EAAM,YAExCi2S,EAAiB,SAAU52S,GAC7B,OAAOA,EAAOW,SAAS,uBAErB4rP,EAAa,SAAUvsP,GACzB,OAAOA,EAAOW,SAAS,YAAY,EAAO,YAExCk2S,EAA2B,SAAU72S,GACvC,OAAOA,EAAOW,SAAS,4BAErBm2S,EAAkC,SAAU92S,GAC9C,OAAOA,EAAOW,SAAS,oCAErBo2S,EAAU,SAAU/2S,GACtB,OAAOA,EAAOW,SAAS,SAErBq2S,EAAsB,SAAUh3S,GAClC,OAAOA,EAAOW,SAAS,oBAAqB,KAE1CmtF,EAAc,SAAU9tF,GAC1B,OAAOA,EAAOW,SAAS,YAAa,IAAK,WAEvCotF,EAAe,SAAU/tF,GAC3B,OAAOA,EAAOW,SAAS,aAAc,IAAK,WAExCkxH,EAAc,SAAU7xH,GAC1B,OAAOA,EAAOW,SAAS,YAAa,MAAO,WAEzCmxH,EAAe,SAAU9xH,GAC3B,OAAOA,EAAOW,SAAS,aAAc,MAAO,WAE1Cs2S,EAAiB,SAAUj3S,GAC7B,OAAgC,IAAzBA,EAAOC,SAASirH,MAErB6qD,EAAW,SAAU/1K,GACvB,OAAOA,EAAOW,SAAS,UAAU,EAAO,YAEtCu2S,EAAY,SAAUl3S,GACxB,IAAIuyB,EAASvyB,EAAOW,SAAS,SAAU,YACvC,OAAe,IAAX4xB,EACK,OACa,SAAXA,EACF,OAEA,YAGP4kR,EAAa,SAAUn3S,GACzB,IAAIC,EAAWD,EAAOC,SAClBirH,EAAOjrH,EAASirH,KAChBC,EAAUlrH,EAASmrH,SACvB,IAAa,IAATF,EAAgB,CAClB,IAAIksL,EAAWlsL,GAAc,YAE3BC,EADEA,EACQnrH,EAAO4wB,gBAAgBG,WAAWo6F,GAElCrrH,EAASurH,QAAU,UAAY+rL,EAG7C,OAAOjsL,GAELksL,EAAqB,SAAUp3S,EAAUq3S,GAE3C,IADA,IAAIC,EAAW,GACNl0S,EAAI,EAAGA,EAAI,GAAIA,IAAK,CAC3B,IAAIu4K,EAAU37K,EAAS,UAAYoD,GACnC,IAAKu4K,EACH,MAEF27H,EAAS9wS,KAAKm1K,GAEhB,IAAI47H,EAAcv3S,EAAS27K,QAAU,CAAC37K,EAAS27K,SAAW,CAAC07H,GAC3D,OAAOC,EAASx0S,OAAS,EAAIw0S,EAAWC,GAEtCC,EAAc,SAAUz3S,GAC1B,IAAI47K,EAAU57K,EAAOW,SAAS,WAC1B22S,EAAiB,sIACrB,OAAgB,IAAZ17H,EACK,GACE76K,EAASuqB,QAAQswJ,GACnB76K,EAASyqB,KAAKowJ,GAAS,SAAUA,GACtC,OAAOA,EAAQ74K,OAAS,KAGnBs0S,EAAmBr3S,EAAOC,SAAUq3S,IAI3C1mS,EAAWlR,QAAQC,KAAKC,MAAMC,QAAQ,wBAEtC+iB,EAAWljB,QAAQC,KAAKC,MAAMC,QAAQ,sBAEtC4jC,EAAW/jC,QAAQC,KAAKC,MAAMC,QAAQ,qBAEtC63S,EAAiB,SAAU13S,GAC7B,OAAOA,EAAO8lC,KAAK,eAEjB6xQ,EAAmB,SAAU33S,GAC/B,OAAOA,EAAO8lC,KAAK,iBAEjB8xQ,EAAqB,SAAU53S,GACjC,OAAOA,EAAO8lC,KAAK,mBAEjB69B,EAAS,CACX+zO,eAAgBA,EAChBC,iBAAkBA,EAClBC,mBAAoBA,GAGlBpjS,EAAQ,SAAU4C,EAAO3V,GAC3B,OAAO,WACL,IAAIs4C,EAAO3iC,EAAMnI,KAAKxN,GAAM,GACxBs4C,GACFA,EAAKvlC,OAAM,KAIbqjS,EAAU,SAAU73S,EAAQoX,GAC9BpX,EAAO+e,UAAUhY,IAAI,SAAU,GAAIyN,EAAM4C,EAAO,YAChDpX,EAAO+e,UAAUhY,IAAI,cAAe,GAAIyN,EAAM4C,EAAO,YACrDpX,EAAO+e,UAAUhY,IAAI,UAAW,GAAIyN,EAAM4C,EAAO,gBACjDA,EAAM9I,GAAG,UAAU,WACjBtO,EAAOwU,YAGPsjS,EAAO,CAAED,QAASA,GAElBn0Q,EAAWhkC,QAAQC,KAAKC,MAAMC,QAAQ,qBAEtCqkC,EAAWxkC,QAAQC,KAAKC,MAAMC,QAAQ,sBAEtC0b,EAAO,aAEP9Q,EAAW,SAAUpL,GACvB,OAAO,WACL,OAAOA,IAGP2c,EAAQvR,GAAS,GACjBwR,EAASxR,GAAS,GAElByR,EAAO,WACT,OAAOC,GAELA,EAAO,WACT,IAAIC,EAAK,SAAUta,GACjB,OAAOA,EAAEua,UAEPna,EAAO,SAAUoa,GACnB,OAAOA,KAELha,EAAK,SAAUlF,GACjB,OAAOA,GAELmf,EAAK,CACPC,KAAM,SAAUpf,EAAG9B,GACjB,OAAO8B,KAETO,GAAIqe,EACJS,OAAQT,EACRK,OAAQJ,EACRS,MAAOpa,EACPqa,WAAYza,EACZ0a,SAAU,SAAUC,GAClB,MAAM,IAAIC,MAAMD,GAAO,oCAEzBE,UAAWtS,EAAS,MACpBuS,eAAgBvS,OAASwS,GACzBC,GAAI5a,EACJ6a,QAASjb,EACTN,IAAKsa,EACL1N,KAAM+M,EACN6B,KAAMlB,EACNmB,OAAQrB,EACRsB,OAAQrB,EACR1N,OAAQ2N,EACRqB,OAAQnB,EACRoB,QAASpB,EACTqB,QAAS,WACP,MAAO,IAETxb,SAAUwI,EAAS,WAKrB,OAHI1I,OAAO2b,QACT3b,OAAO2b,OAAOnB,GAETA,EA1CE,GA4CPoB,EAAO,SAAUlD,GACnB,IAAImD,EAAanT,EAASgQ,GACtBvZ,EAAO,WACT,OAAOqb,GAELa,EAAO,SAAUrB,GACnB,OAAOA,EAAEtB,IAEP8B,EAAK,CACPC,KAAM,SAAUpf,EAAG9B,GACjB,OAAOA,EAAEmf,IAEX9c,GAAI,SAAU6B,GACZ,OAAOib,IAAMjb,GAEfid,OAAQR,EACRI,OAAQL,EACRU,MAAOkB,EACPjB,WAAYiB,EACZhB,SAAUgB,EACVb,UAAWa,EACXZ,eAAgBY,EAChBV,GAAIhc,EACJic,QAASjc,EACTU,IAAK,SAAUma,GACb,OAAO4B,EAAK5B,EAAEtB,KAEhBjM,KAAM,SAAUuN,GACdA,EAAEtB,IAEJ2C,KAAMA,EACNC,OAAQD,EACRE,OAAQF,EACR7O,OAAQ,SAAUwN,GAChB,OAAOA,EAAEtB,GAAK8B,EAAKJ,GAErBsB,QAAS,WACP,MAAO,CAAChD,IAEVxY,SAAU,WACR,MAAO,QAAUwY,EAAI,KAEvB8C,OAAQ,SAAUzb,GAChB,OAAOA,EAAEnE,GAAG8c,IAEd+C,QAAS,SAAU1b,EAAG+b,GACpB,OAAO/b,EAAE0a,KAAKR,GAAO,SAAU7C,GAC7B,OAAO0E,EAAUpD,EAAGtB,QAI1B,OAAOoD,GAELrW,EAAO,SAAU7G,GACnB,OAAiB,OAAVA,QAA4B4d,IAAV5d,EAAsB8c,EAAOwB,EAAKte,IAEzDye,EAAS,CACXH,KAAMA,EACNzB,KAAMA,EACNhW,KAAMA,GAGJ6xS,EAAsB,SAAU1kS,GAClC,IAAI4mC,EAAc5B,EAAehlC,GACjC,GAAI4mC,GAAwE,WAAzDrpC,EAASpQ,IAAI24C,SAASc,EAAa,YAAY,GAAoB,CACpF,IAAIb,EAAexoC,EAASpQ,IAAI64C,OAAOY,GACnCvB,EAAKuB,EAAYX,WAAaF,EAAavjC,EAC3C8iC,EAAKsB,EAAYV,UAAYH,EAAap9C,EAC9C,OAAO8hB,EAAOH,KAAK,CACjB9H,EAAG6iC,EACH18C,EAAG28C,IAGL,OAAO76B,EAAO5B,QAGd87R,EAAiB,SAAUh4S,EAAQqT,GACrC,IAAI4mC,EAAcrpC,EAASpQ,IAAIsL,OAAO9L,EAAOC,SAASq4C,cAAc,GACpEjlC,EAAKizC,UAAUrM,YAAcA,GAE3B5B,EAAiB,SAAUhlC,GAC7B,OAAOA,EAAOA,EAAKizC,UAAUrM,YAAc,MAEzCg+P,EAAqB,SAAUC,EAAUC,GAC3C,OAAOA,EAAOl+P,YAAc5B,EAAe6/P,IAEzCE,EAAc,CAChBL,oBAAqBA,EACrBC,eAAgBA,EAChB3/P,eAAgBA,EAChB4/P,mBAAoBA,GAGlBI,EAAgB,SAAUr4S,EAAQsf,EAAOwG,GAC3C,IACIwyR,EADAC,EAAe,GAEnB,GAAKj5R,EA8CL,OA3CAve,EAASyN,KAAK8Q,EAAMtlB,MAAM,SAAS,SAAU+/C,GAC3C,IAAImkM,EACAs6D,EAAsB,WACxB,IAAIjtS,EAAYvL,EAAOuL,UACnBwuC,EAAK95C,SAAS8mD,eAChBx7C,EAAUu5Q,gBAAgB/qO,EAAK95C,SAAS8mD,eAAe,SAAUnjB,GAC/DmW,EAAKqnB,OAAOx9B,MACX,GAEDmW,EAAK95C,SAASw4S,uBAChBltS,EAAUu5Q,gBAAgB/qO,EAAK95C,SAASw4S,uBAAuB,SAAU70Q,GACvEmW,EAAKxmC,SAASqwB,OAIP,MAATmW,EACFu+P,EAAc,MAETA,IACHA,EAAc,CACZ72S,KAAM,cACN6d,MAAO,IAETi5R,EAAa9xS,KAAK6xS,IAEhBt4S,EAAOyhB,QAAQs4B,KACjBmkM,EAAWnkM,EACXA,EAAO/5C,EAAOyhB,QAAQy8N,GACF,oBAATnkM,IACTA,EAAOA,KAETA,EAAKt4C,KAAOs4C,EAAKt4C,MAAQ,SACzBs4C,EAAKj0B,KAAOA,EACZi0B,EAAOn3B,EAAS/S,OAAOkqC,GACvBu+P,EAAYh5R,MAAM7Y,KAAKszC,GACnB/5C,EAAOssP,YACTksD,IAEAx4S,EAAOsO,GAAG,OAAQkqS,QAKnB,CACL/2S,KAAM,UACNyL,OAAQ,OACRoS,MAAOi5R,IAGPG,EAAiB,SAAU14S,EAAQ8lB,GACrC,IAAIyxR,EAAW,GACXoB,EAAa,SAAUr5R,GACrBA,GACFi4R,EAAS9wS,KAAK4xS,EAAcr4S,EAAQsf,EAAOwG,KAM/C,GAHA/kB,EAASyN,KAAKipS,EAAYz3S,IAAS,SAAU47K,GAC3C+8H,EAAW/8H,MAET27H,EAASx0S,OACX,MAAO,CACLtB,KAAM,QACNyL,OAAQ,QACR/F,QAAS,cACTyxS,UAAU,EACV/gS,cAAc,EACdyH,MAAOi4R,IAITsB,EAAU,CACZR,cAAeA,EACfK,eAAgBA,GAGdl4S,EAAMoQ,EAASpQ,IACfs4S,GAAe,SAAUC,GAC3B,MAAO,CACLzxQ,KAAMyxQ,EAASljS,EACf0xB,IAAKwxQ,EAAS/8S,EACdo2B,MAAO2mR,EAASr4S,EAChB2xB,OAAQ0mR,EAASr9S,EACjB06J,MAAO2iJ,EAASljS,EAAIkjS,EAASr4S,EAC7Bq8C,OAAQg8P,EAAS/8S,EAAI+8S,EAASr9S,IAG9Bs9S,GAAwB,SAAUh5S,GACpCe,EAASyN,KAAKxO,EAAOkhS,iBAAiB,SAAUtlH,GAC1CA,EAAQxkK,OACVwkK,EAAQxkK,MAAMgwB,WAIhB6xQ,GAAc,SAAU7hS,EAAOqhC,GACjCrhC,EAAM+iC,OAAO1B,EAAInR,KAAMmR,EAAIlR,MAEzB2xQ,GAAsB,SAAU9hS,EAAO+hS,EAAQlrR,GACjDkrR,EAASA,EAASA,EAAO7vR,OAAO,EAAG,GAAK,GACxCvoB,EAASyN,KAAK,CACZzD,EAAG,OACHoO,EAAG,OACF,SAAUkvM,EAAK5vK,GAChBrhC,EAAMjQ,QAAQgH,OAAO,SAAWk6M,EAAKp6L,EAAUwqB,EAAK0gQ,EAAO7vR,OAAO,EAAG,QAEvEvoB,EAASyN,KAAK,CACZ7P,EAAG,OACH+f,EAAG,UACF,SAAU2pM,EAAK5vK,GAChBrhC,EAAMjQ,QAAQgH,OAAO,SAAWk6M,EAAKp6L,EAAUwqB,EAAK0gQ,EAAO7vR,OAAO,EAAG,SAGrE8vR,GAAgB,SAAU9zP,EAASzvC,EAAG7Z,EAAGq9S,EAAaC,EAAiBC,GAczE,OAbAA,EAAYT,GAAa,CACvBjjS,EAAGA,EACH7Z,EAAGA,EACH0E,EAAG64S,EAAU74S,EACbhF,EAAG69S,EAAU79S,IAEX4pD,IACFi0P,EAAYj0P,EAAQ,CAClB+zP,YAAaP,GAAaO,GAC1BC,gBAAiBR,GAAaQ,GAC9BC,UAAWA,KAGRA,GAELC,GAAwB,SAAUx5S,GACpC,IAAI0hP,EACA+3D,EAAqB,WACvB,OAAOz5S,EAAOkhS,iBAAmB,IAE/BwY,EAAiB,SAAU9xS,GAC7B,IAAI6wC,EAAKytO,EAAYtjR,EAUrB,OATA61C,EAAMj4C,EAAI64C,OAAOr5C,EAAO05C,2BACxBwsO,EAAalmR,EAAO4L,IAAIopL,QAAQptL,GAChChF,EAAO5C,EAAO4L,IAAI06C,UACI,SAAlB1jD,EAAKuB,WACP+hR,EAAWrwQ,GAAKjT,EAAKsjC,cAAcu8C,gBAAgBnpC,YAAc12C,EAAK02C,WACtE4sO,EAAWlqR,GAAK4G,EAAKsjC,cAAcu8C,gBAAgBlpC,WAAa32C,EAAK22C,WAEvE2sO,EAAWrwQ,GAAK4iC,EAAI5iC,EACpBqwQ,EAAWlqR,GAAKy8C,EAAIz8C,EACbkqR,GAELxtD,EAAa,SAAUj6N,EAAOk7S,GAChC,IAAIR,EAAQI,EAAWF,EAAaC,EAAiBliS,EAAOwiS,EAASC,EAAeC,EAChFx0P,EAAUwxP,EAAgC92S,GAC9C,IAAIA,EAAO6jC,QAGX,GAAKplC,GAAUA,EAAMm9K,QAAQxkK,MAA7B,CAIAyiS,EAAgB,CACd,QACA,QACA,QACA,QACA,QACA,SAEFziS,EAAQ3Y,EAAMm9K,QAAQxkK,MAClBuiS,GACFviS,EAAM+vB,OAERkyQ,EAAcK,EAAej7S,EAAMmF,SACnC21S,EAAY/4S,EAAIw0L,QAAQ59K,EAAMC,SAC9BiiS,EAAkB94S,EAAIw0L,QAAQh1L,EAAO05C,2BAA6B15C,EAAO0T,WACzE,IAAI0V,EAAQgvR,EAAYL,oBAAoB3gS,GAAOsF,MAAM,CACvD7G,EAAG,EACH7Z,EAAG,IASL,GAPAq9S,EAAYxjS,GAAKuT,EAAMvT,EACvBwjS,EAAYr9S,GAAKotB,EAAMptB,EACvBu9S,EAAU1jS,GAAKuT,EAAMvT,EACrB0jS,EAAUv9S,GAAKotB,EAAMptB,EACrBs9S,EAAgBzjS,GAAKuT,EAAMvT,EAC3ByjS,EAAgBt9S,GAAKotB,EAAMptB,EAC3B89S,EAA6B,GACwB,WAAjDt5S,EAAI24C,SAAS16C,EAAMmF,QAAS,WAAW,GAAoB,CAC7D,IAAI8uN,EAAaj0N,EAAMmF,QAAQs6G,wBAC/Bm7L,EAAY34S,EAAIgyN,EAAWtgM,MAC3BinR,EAAY39S,EAAIg3N,EAAWrgM,OAExBryB,EAAO4P,SACV0pS,EAAgB54S,EAAIV,EAAOmP,SAASszE,gBAAgBj5C,aAElDxpC,EAAOuL,UAAU2gP,iBAAiBuxB,YAAYh/Q,EAAMmF,UAAYy1S,EAAY34S,EAAIo5S,IAClFT,EAAc31Q,EAASmF,QAAQwwQ,EAAa,EAAG,IAEjDF,EAASz1Q,EAASkiQ,yBAAyB2T,EAAWF,EAAaC,EAAiBO,GACpFR,EAAc31Q,EAASjK,MAAM4/Q,EAAaC,GACtCH,GACFS,EAAUl2Q,EAAS+hQ,iBAAiB8T,EAAWF,EAAaF,GAC5DF,GAAY7hS,EAAOgiS,GAAc9zP,EAASs0P,EAAQ/jS,EAAG+jS,EAAQ59S,EAAGq9S,EAAaC,EAAiBC,MAE9FD,EAAgB59S,GAAK69S,EAAU79S,EAC/B29S,EAAc31Q,EAASqiQ,UAAUuT,EAAiBD,GAC9CA,GACFF,EAASz1Q,EAASkiQ,yBAAyB2T,EAAWF,EAAaC,EAAiB,CAClF,QACA,QACA,UAEEH,GACFS,EAAUl2Q,EAAS+hQ,iBAAiB8T,EAAWF,EAAaF,GAC5DF,GAAY7hS,EAAOgiS,GAAc9zP,EAASs0P,EAAQ/jS,EAAG+jS,EAAQ59S,EAAGq9S,EAAaC,EAAiBC,KAE9FN,GAAY7hS,EAAOgiS,GAAc9zP,EAAS+zP,EAAYxjS,EAAGwjS,EAAYr9S,EAAGq9S,EAAaC,EAAiBC,KAGxGniS,EAAMgwB,QAGV8xQ,GAAoB9hS,EAAO+hS,GAAQ,SAAU1qK,EAAMC,GACjD,OAAOD,IAASC,UAjEhBsqK,GAAsBh5S,IAoEtB+5S,EAAoB,SAAU5yQ,GAChC,OAAO,WACL,IAAIm1I,EAAU,WACRt8K,EAAOuL,WACTmtN,EAAWshF,EAAmBh6S,EAAOuL,UAAUC,WAAY27B,IAG/DjD,EAASi/J,sBAAsB7mB,KAG/B29H,EAAkB,SAAU7iS,GAC9B,IAAKsqO,EAAiB,CACpB,IAAIw4D,EAAeH,GAAkB,GACjCI,EAAgB/B,EAAY//P,eAAejhC,GAC/CsqO,EAAkB1hP,EAAOuL,UAAUo2O,sBAAwB3hP,EAAOqsL,SAClE7rL,EAAI4c,KAAKskO,EAAiB,SAAUw4D,GACpC15S,EAAI4c,KAAK+8R,EAAe,SAAUD,GAClCl6S,EAAOsO,GAAG,UAAU,WAClB9N,EAAIu0E,OAAO2sK,EAAiB,SAAUw4D,GACtC15S,EAAIu0E,OAAOolO,EAAe,SAAUD,QAItCE,EAAqB,SAAU37S,GACjC,IAAI2Y,EACJ,GAAI3Y,EAAMm9K,QAAQxkK,MAGhB,OAFA3Y,EAAMm9K,QAAQxkK,MAAM+vB,YACpBuxL,EAAWj6N,GAGb2Y,EAAQwL,EAAS/S,OAAO,CACtBpO,KAAM,aACNmW,KAAM,SACNzQ,QAAS,+BACTuG,UAAW,iBACXR,OAAQ,OACRC,UAAW,SACXC,MAAO,UACPmsE,UAAU,EACV8gO,SAAS,EACTrgC,OAAO,EACPnsO,OAAQ,EACRvuB,MAAOu5R,EAAQR,cAAcr4S,EAAQvB,EAAMm9K,QAAQt8J,OACnDg7R,SAAU,WACRt6S,EAAOwU,WAGX4jS,EAAYJ,eAAeh4S,EAAQoX,GACnC6iS,EAAgB7iS,GAChB3Y,EAAMm9K,QAAQxkK,MAAQA,EACtBA,EAAM8iC,WAAWqgQ,SACjB7hF,EAAWj6N,IAET+7S,EAAyB,WAC3Bz5S,EAASyN,KAAKirS,KAAsB,SAAU79H,GACxCA,EAAQxkK,OACVwkK,EAAQxkK,MAAMgwB,WAIhB4yQ,EAAqB,SAAUj7O,GACjC,IAAI17D,EAAGrH,EAAGmyO,EACNopE,EAAWkC,IAEf,IADAtrE,EAAiBnuO,EAAOgM,EAAE+yD,GAAWoC,UAAUp6D,IAAIg4D,GAC9C17D,EAAI8qO,EAAeprO,OAAS,EAAGM,GAAK,EAAGA,IAC1C,IAAKrH,EAAIu7S,EAASx0S,OAAS,EAAG/G,GAAK,EAAGA,IACpC,GAAIu7S,EAASv7S,GAAGiyB,UAAUkgN,EAAe9qO,IACvC,MAAO,CACLu4K,QAAS27H,EAASv7S,GAClB4H,QAASuqO,EAAe9qO,IAKhC,OAAO,MAETrD,EAAOsO,GAAG,wCAAwC,SAAUR,IAC3C,eAAXA,EAAErM,MAA0BqM,EAAEvC,YAGlC24B,EAASrV,iBAAiB7uB,GAAQ,WAChC,IAAIvB,EACJA,EAAQu7S,EAAmBh6S,EAAOuL,UAAUC,WACxC/M,GACF+7S,IACAJ,EAAmB37S,IAEnB+7S,UAINx6S,EAAOsO,GAAG,wBAAyBksS,GACnCx6S,EAAOsO,GAAG,qBAAqB,WAC7B,IAAI7P,EAAQu7S,EAAmBh6S,EAAOuL,UAAUC,WAC5C/M,GAASA,EAAMm9K,QAAQxkK,OACzB3Y,EAAMm9K,QAAQxkK,MAAMgwB,UAGxBpnC,EAAOsO,GAAG,4BAA6ByrS,GAAkB,IACzD/5S,EAAOsO,GAAG,aAAcyrS,GAAkB,IAC1C/5S,EAAOsO,GAAG,UAAU,WAClBvN,EAASyN,KAAKirS,KAAsB,SAAU79H,GACxCA,EAAQxkK,OACVwkK,EAAQxkK,MAAMzC,YAGlB3U,EAAOkhS,gBAAkB,MAE3BlhS,EAAO+e,UAAUhY,IAAI,UAAW,IAAI,WAClC,IAAItI,EAAQu7S,EAAmBh6S,EAAOuL,UAAUC,WAC5C/M,GAASA,EAAMm9K,QAAQxkK,OACzB3Y,EAAMm9K,QAAQxkK,MAAMkI,QAAQ,GAAG9K,YAIjCimS,GAAkB,CAAEjB,sBAAuBA,IAE3Cz7R,GAAS,SAAUlI,GACrB,GAAU,OAANA,EACF,MAAO,OAET,IAAI9K,SAAW8K,EACf,MAAU,WAAN9K,IAAmBpE,MAAM3E,UAAUgc,cAAcnI,IAAMA,EAAEoI,aAAsC,UAAvBpI,EAAEoI,YAAYhgB,MACjF,QAEC,WAAN8M,IAAmBmT,OAAOlc,UAAUgc,cAAcnI,IAAMA,EAAEoI,aAAsC,WAAvBpI,EAAEoI,YAAYhgB,MAClF,SAEF8M,GAELoT,GAAS,SAAU1c,GACrB,OAAO,SAAUpC,GACf,OAAO0e,GAAO1e,KAAWoC,IAGzB6pB,GAAUnN,GAAO,SACjBC,GAAaD,GAAO,YACpB0rC,GAAW1rC,GAAO,UAElBE,GAAc1X,MAAM3E,UAAUoE,MAC9BkY,GAAgB3X,MAAM3E,UAAU6F,QAChCiiD,GAAanjD,MAAM3E,UAAUyE,KAC7B8X,GAAa,SAAUC,EAAIzT,GAC7B,OAAOuT,GAAcpc,KAAKsc,EAAIzT,IAE5BlD,GAAU,SAAU4W,EAAI5I,GAC1B,IAAI6I,EAAIH,GAAWE,EAAI5I,GACvB,OAAc,IAAP6I,EAAWZ,EAAO5B,OAAS4B,EAAOH,KAAKe,IAE5CrB,GAAS,SAAUoB,EAAIE,GACzB,IAAK,IAAItb,EAAI,EAAGgD,EAAMoY,EAAG1b,OAAQM,EAAIgD,EAAKhD,IAAK,CAC7C,IAAIwS,EAAI4I,EAAGpb,GACX,GAAIsb,EAAK9I,EAAGxS,GACV,OAAO,EAGX,OAAO,GAELzB,GAAM,SAAU6c,EAAI1C,GAGtB,IAFA,IAAI1V,EAAMoY,EAAG1b,OACT2b,EAAI,IAAI/X,MAAMN,GACThD,EAAI,EAAGA,EAAIgD,EAAKhD,IAAK,CAC5B,IAAIwS,EAAI4I,EAAGpb,GACXqb,EAAErb,GAAK0Y,EAAElG,EAAGxS,GAEd,OAAOqb,GAELlQ,GAAO,SAAUiQ,EAAI1C,GACvB,IAAK,IAAI1Y,EAAI,EAAGgD,EAAMoY,EAAG1b,OAAQM,EAAIgD,EAAKhD,IAAK,CAC7C,IAAIwS,EAAI4I,EAAGpb,GACX0Y,EAAElG,EAAGxS,KAGLkL,GAAS,SAAUkQ,EAAIE,GAEzB,IADA,IAAID,EAAI,GACCrb,EAAI,EAAGgD,EAAMoY,EAAG1b,OAAQM,EAAIgD,EAAKhD,IAAK,CAC7C,IAAIwS,EAAI4I,EAAGpb,GACPsb,EAAK9I,EAAGxS,IACVqb,EAAEjY,KAAKoP,GAGX,OAAO6I,GAELwrC,GAAQ,SAAUzrC,EAAI1C,EAAGouC,GAI3B,OAHA37C,GAAKiQ,GAAI,SAAU5I,GACjBs0C,EAAMpuC,EAAEouC,EAAKt0C,MAERs0C,GAELl7C,GAAO,SAAUwP,EAAIE,GACvB,IAAK,IAAItb,EAAI,EAAGgD,EAAMoY,EAAG1b,OAAQM,EAAIgD,EAAKhD,IAAK,CAC7C,IAAIwS,EAAI4I,EAAGpb,GACX,GAAIsb,EAAK9I,EAAGxS,GACV,OAAOya,EAAOH,KAAK9H,GAGvB,OAAOiI,EAAO5B,QAEZ8kD,GAAY,SAAUviD,EAAIE,GAC5B,IAAK,IAAItb,EAAI,EAAGgD,EAAMoY,EAAG1b,OAAQM,EAAIgD,EAAKhD,IAAK,CAC7C,IAAIwS,EAAI4I,EAAGpb,GACX,GAAIsb,EAAK9I,EAAGxS,GACV,OAAOya,EAAOH,KAAKta,GAGvB,OAAOya,EAAO5B,QAEZkuC,GAAU,SAAU3rC,GAEtB,IADA,IAAIC,EAAI,GACCrb,EAAI,EAAGgD,EAAMoY,EAAG1b,OAAQM,EAAIgD,IAAOhD,EAAG,CAC7C,IAAKioB,GAAQ7M,EAAGpb,IACd,MAAM,IAAIyZ,MAAM,oBAAsBzZ,EAAI,6BAA+Bob,GAE3EqrC,GAAWjjD,MAAM6X,EAAGD,EAAGpb,IAEzB,OAAOqb,GAMLg8R,IAJSt8R,GAAWzX,MAAMT,OAAQS,MAAMT,KAIzB,CACjBy/C,KAAM,CACJj9C,MAAO,OACP4W,MAAO,8CAETsvB,KAAM,CACJlmC,MAAO,OACP4W,MAAO,oDAETwkK,KAAM,CACJp7K,MAAO,OACP4W,MAAO,iFAET3c,OAAQ,CACN+F,MAAO,SACP4W,MAAO,qHAETrL,OAAQ,CACNvL,MAAO,SACP4W,MAAO,4GAETq7R,MAAO,CACLjyS,MAAO,QACP4W,MAAO,sDAETgtI,MAAO,CAAE5jJ,MAAO,SAChBkyS,KAAM,CAAElyS,MAAO,UAEbmyS,GAAwB,WAC1B,MAAO,CACL58S,KAAM,IACN87C,KAAM,CAAEz0C,KAAM,OAGdw1S,GAAyB,SAAU78S,EAAM87C,GAC3C,IAAIsD,EAAWtD,EAAO,CACpB97C,KAAMA,EACN87C,KAAMA,GACJ,KACJ,MAAgB,MAAT97C,EAAe48S,KAA0Bx9P,GAE9C09P,GAAc,SAAUC,EAAgB/8S,GAC1C,OAAO+iE,GAAUg6O,GAAgB,SAAUC,GACzC,OAAOA,EAAch9S,OAASA,KAC7Bwe,UAEDg1R,GAAc,SAAUwJ,GAC1B,OAAOA,GAA6C,MAA5BA,EAAclhQ,KAAKz0C,MAEzC41S,GAAc,SAAUF,EAAgBG,GAC1C,IAAIC,EAAiB7sS,GAAOysS,GAAgB,SAAUC,GACpD,OAA+D,IAAxDE,EAAiBh5S,eAAe84S,EAAch9S,SAEnDo9S,EAAiB9sS,GAAO6sS,GAAgB,SAAUH,EAAe53S,GACnE,OAAQouS,GAAYwJ,KAAmBxJ,GAAY2J,EAAe/3S,EAAI,OAExE,OAAOkL,GAAO8sS,GAAgB,SAAUJ,EAAe53S,GACrD,OAAQouS,GAAYwJ,IAAkB53S,EAAI,GAAKA,EAAIg4S,EAAet4S,OAAS,MAG3Eu4S,GAAa,SAAUC,EAAiBC,EAAOL,EAAkBrnS,GACnE,IAAI2nS,EAAY5hQ,EAAMmhQ,EAAgBU,EAOtC,OANIF,GACF3hQ,EAAO2hQ,EAAM1nS,GACb4nS,GAAgB,GAEhB7hQ,EAAO6gQ,GAAa5mS,GAElB+lC,IACF4hQ,EAAa,CAAEn2S,KAAMu0C,EAAKnxC,OAC1BsyS,EAAiB,GACjBj6S,EAASyN,MAAMqrC,EAAKv6B,OAAS,IAAItlB,MAAM,SAAS,SAAUiE,GACxD,IAAIg9S,EAAgBH,GAAuB78S,EAAMs9S,EAAgBt9S,IAC7Dg9S,GACFD,EAAev0S,KAAKw0S,MAGnBS,GACH36S,EAASyN,KAAK+sS,GAAiB,SAAUxhQ,EAAM97C,GACzC87C,EAAKjmC,UAAYA,GAAYinS,GAAYC,EAAgB/8S,KACpC,WAAnB87C,EAAK/I,WACPgqQ,EAAev0S,KAAKo0S,MAElB9gQ,EAAKiN,iBACPg0P,EAAetzN,QAAQozN,GAAuB78S,EAAM87C,IAEpDihQ,EAAev0S,KAAKq0S,GAAuB78S,EAAM87C,IAE5B,UAAnBA,EAAK/I,WACPgqQ,EAAev0S,KAAKo0S,UAK5BY,EAAW5hQ,KAAOj4C,GAAIs5S,GAAYF,EAAgBG,IAAmB,SAAU99P,GAC7E,OAAOA,EAAStD,SAEb0hQ,EAAW5hQ,KAAK92C,QACZ,KAGJ04S,GAELE,GAAoB,SAAU37S,GAChC,IAAI/B,EACA29S,EAAiB,GACjB/hQ,EAAOk9P,EAAQ/2S,GACnB,GAAI65C,EACF,IAAK57C,KAAQ47C,EACX+hQ,EAAen1S,KAAKxI,QAGtB,IAAKA,KAAQy8S,GACXkB,EAAen1S,KAAKxI,GAGxB,OAAO29S,GAELC,GAAoB,SAAU77S,GAMhC,IALA,IAAI87S,EAAc,GACdF,EAAiBD,GAAkB37S,GACnCm7S,EAAmBp6S,EAAS8lE,QAAQmwO,EAAoBh3S,GAAQhG,MAAM,SACtE+hT,EAAUrF,EAAW12S,GACrBg8S,EAAsC,kBAAZD,EAAuBA,EAAQ/hT,MAAM,QAAU4hT,EACpEv4S,EAAI,EAAGA,EAAI24S,EAAiBj5S,OAAQM,IAAK,CAChD,IAAI22C,EAAYgiQ,EAAiB34S,GAC7Bw2C,EAAOyhQ,GAAWt7S,EAAOg6C,UAAW+8P,EAAQ/2S,GAASm7S,EAAkBnhQ,GACvEH,GACFiiQ,EAAYr1S,KAAKozC,GAGrB,OAAOiiQ,GAELG,GAAU,CAAEJ,kBAAmBA,IAE/B9hP,GAAQnpD,EAASpQ,IACjBm/C,GAAU,SAAU/3C,GACtB,MAAO,CACLwqB,MAAOxqB,EAAIyhC,YACXhX,OAAQzqB,EAAI0hC,eAGZ4yQ,GAAW,SAAUl8S,EAAQoyB,EAAOC,GACtC,IAAIuS,EAActS,EAAW6pR,EAAeC,EAC5Cx3Q,EAAe5kC,EAAO6pH,eACtBv3F,EAAYtyB,EAAO05C,0BAA0BniC,WAC7C4kS,EAAgBx8P,GAAQ/a,GACxBw3Q,EAAaz8P,GAAQrtB,GACP,OAAVF,IACFA,EAAQ9xB,KAAKssB,IAAIkhE,EAAY9tF,GAASoyB,GACtCA,EAAQ9xB,KAAKC,IAAIsxH,EAAY7xH,GAASoyB,GACtC2nC,GAAM0B,SAAS72B,EAAc,QAASxS,GAAS+pR,EAAc/pR,MAAQgqR,EAAWhqR,QAChF2nC,GAAM0B,SAASnpC,EAAW,QAASF,IAErCC,EAAS/xB,KAAKssB,IAAImhE,EAAa/tF,GAASqyB,GACxCA,EAAS/xB,KAAKC,IAAIuxH,EAAa9xH,GAASqyB,GACxC0nC,GAAM0B,SAASnpC,EAAW,SAAUD,GACpCsxC,EAAOg0O,iBAAiB33S,IAEtBq8S,GAAW,SAAUr8S,EAAQs8S,EAAIC,GACnC,IAAI30S,EAAM5H,EAAO05C,0BACjBwiQ,GAASl8S,EAAQ4H,EAAIyhC,YAAcizQ,EAAI10S,EAAI0hC,aAAeizQ,IAExDvI,GAAS,CACXkI,SAAUA,GACVG,SAAUA,IAGRh4Q,GAAW3kC,QAAQC,KAAKC,MAAMC,QAAQ,eAEtCiwJ,GAAM,SAAUloJ,GAClB,MAAO,CACLhE,QAAS,WACP,OAAOgE,KAITy8K,GAAU,SAAUm4H,EAASplS,EAAOqlS,GACtC,IAAIr5S,EAAWo5S,EAAQv8S,SAASw8S,GAC5Br5S,GACFA,EAAS0sJ,GAAI14I,EAAMC,MAAM,WAGzBu1B,GAAa,SAAU3uC,EAAM4rB,EAAW6yQ,GAC1C37R,EAASyN,KAAKkuR,GAAU,SAAU8f,GAChC,IAAIplS,EAAQyS,EAAUvK,QAAQ/Q,OAAO,IAAMiuS,EAAQv+S,MAAM,GACrDmZ,GAASA,EAAMslS,WAAaF,EAAQv+S,OAASA,IAC/ComL,GAAQm4H,EAASplS,EAAO,UACxBA,EAAMslS,SAAQ,QAIhBC,GAAoB,SAAU/gI,GAChCA,EAAQt8J,QAAQ9Q,MAAK,SAAU6E,GAC7BA,EAAK+tD,QAAO,OAGZw7O,GAAc,SAAUlgB,EAAUz+R,GACpC,OAAO8C,EAASyqB,KAAKkxQ,GAAU,SAAU8f,GACvC,OAAOA,EAAQv+S,OAASA,KACvB,IAED4+S,GAAY,SAAU78S,EAAQ/B,EAAMy+R,GACtC,OAAO,SAAU5uR,GACf,IAAIgvS,EAAUhvS,EAAEwF,QACZuW,EAAYizR,EAAQ37O,UAAU5yD,OAAO,SAAS,GAC9C6I,EAAQyS,EAAU5a,KAAK,IAAMhR,GAAM,GACnCu+S,EAAUI,GAAYlgB,EAAUz+R,GACpC2uC,GAAW3uC,EAAM4rB,EAAW6yQ,GAC5BigB,GAAkBG,EAAQ/4S,UACtBqT,GAASA,EAAMslS,WACjBr4H,GAAQm4H,EAASplS,EAAO,UACxBA,EAAMgwB,OACN01Q,EAAQ17O,QAAO,KAEXhqD,GACFA,EAAM+vB,OACNk9I,GAAQm4H,EAASplS,EAAO,YAExBA,EAAQwL,EAAS/S,OAAO,CACtBpO,KAAM,YACNxD,KAAMA,EACNiP,OAAQ,QACR/F,QAAS,gBACTyB,KAAM,KAERihB,EAAU6/H,QAAQtyI,GAClBitK,GAAQm4H,EAASplS,EAAO,YACxBitK,GAAQm4H,EAASplS,EAAO,WAE1B0lS,EAAQ17O,QAAO,IAEjBuC,EAAOg0O,iBAAiB33S,KAGxB+8S,GAAkB,WACpB,OAAQ14Q,GAASrS,IAAMqS,GAASrS,IAAM,IAEpCgrR,GAAa,SAAUh9S,GACzB,SAAO+8S,OAAqB/8S,EAAO08R,WAAW18R,EAAO08R,SAAS35R,OAAS,GAErEk6S,GAAgB,SAAUj9S,GAC5B,IAAIyhB,EAAU1gB,EAASa,IAAI5B,EAAO08R,UAAU,SAAU8f,GACpD,IAAIv8S,EAAWu8S,EAAQv8S,SACvB,MAAO,CACLwB,KAAM,SACN8O,KAAMtQ,EAASsQ,KACfyiB,MAAO/yB,EAAS+yB,MAChBpf,QAAS3T,EAAS2T,QAClBkE,QAAS+kS,GAAU78S,EAAQw8S,EAAQv+S,KAAM+B,EAAO08R,cAGpD,MAAO,CACLj7R,KAAM,QACNxD,KAAM,UACNiP,OAAQ,QACR/F,QAAS,UACTmY,MAAO,CAAC,CACJ7d,KAAM,UACNyL,OAAQ,QACR/F,QAAS,kBACTmY,MAAOmC,MAIXk7Q,GAAU,CACZqgB,WAAYA,GACZC,cAAeA,IAGbC,GAAmB,SAAUl9S,GAC/B,IAAI20B,EAAO,WACT30B,EAAOk3P,aAAc,EACrBvzL,EAAO+zO,eAAe13S,IAExB,OAAO,WACDA,EAAOssP,YACT33N,IAEA30B,EAAOsO,GAAG,OAAQqmB,KAIpBwoR,GAAa,CAAEzF,eAAgBwF,IAE/Bh/O,GAAQttD,EAASpQ,IACjB48S,GAAa,SAAUhmS,GACzB,OAAO,SAAUtJ,GACfsJ,EAAMnI,KAAK,KAAKsE,SAAoB,aAAXzF,EAAEghF,QAG3BuuN,GAAW,SAAUxvQ,GACvB,MAAO,CACLpsC,KAAM,QACNxD,KAAM,SACNiP,OAAQ,QACR/F,QAAS,YACT0mC,OAAQA,EACRjlC,KAAM,KAGN00S,GAAoB,SAAUt9S,GAChC,MAAO,CACLyB,KAAM,QACNyL,OAAQ,QACR/F,QAAS,sBACT0mC,OAAQ,UACRvuB,MAAO,CACL+9R,GAAS,KACT1gB,GAAQsgB,cAAcj9S,MAIxB2vB,GAAS,SAAU3vB,EAAQypP,EAAOjjP,GACpC,IAAI4Q,EAAOmmS,EAAkBC,EAkD7B,IAjD+B,IAA3BvG,EAAej3S,IAAqBwG,EAAKi3S,UAC3Cv/O,GAAMmoJ,iBAAiBlvF,KAAK3wH,EAAKi3S,UAAWN,GAAWzF,eAAe13S,IAEtEm9S,GAAWzF,eAAe13S,EAA1Bm9S,GAEF/lS,EAAQqyO,EAAMryO,MAAQwL,EAAS/S,OAAO,CACpCpO,KAAM,QACNmW,KAAM,cACNzQ,QAAS,UACTqC,MAAO,qBACP0D,OAAQ,QACR2gC,OAAQ,EACRvuB,MAAO,CACL,CACE7d,KAAM,YACN0F,QAAS,WACTmY,MAAO,EACkB,IAAvBm3R,EAAWz2S,GAAoB,KAAO,CACpCyB,KAAM,UACNosC,OAAQ,UACRvuB,MAAO28R,GAAQJ,kBAAkB77S,IAEnC64S,EAAQH,eAAe14S,EAAQ42S,EAAe52S,MAGlD28R,GAAQqgB,WAAWh9S,GAAUs9S,GAAkBt9S,GAAUq9S,GAAS,cAGtEjF,EAAYJ,eAAeh4S,EAAQoX,GACT,SAAtB8/R,EAAUl3S,KACZu9S,EAAmB,CACjB97S,KAAM,eACN0L,UAAW+pS,EAAUl3S,GACrB09S,cAAe,WACb,IAAI91S,EAAM5H,EAAO05C,0BAA0BniC,WAC3CimS,EAAY,CACVprR,MAAOxqB,EAAIyhC,YACXhX,OAAQzqB,EAAI0hC,eAGhBq0Q,SAAU,SAAU7vS,GACQ,SAAtBopS,EAAUl3S,GACZg0S,GAAOkI,SAASl8S,EAAQw9S,EAAUprR,MAAQtkB,EAAE23B,OAAQ+3Q,EAAUnrR,OAASvkB,EAAE43B,QAEzEsuQ,GAAOkI,SAASl8S,EAAQ,KAAMw9S,EAAUnrR,OAASvkB,EAAE43B,WAKvDixQ,EAAa32S,GAAS,CACxB,IAAI49S,EAAW,2LACXh1S,EAAO66B,EAASpmC,UAAU,CAC5B,iBACAugT,IAEEC,EAAgBrH,EAAkBx2S,GAAU,CAC9CyB,KAAM,QACN0F,QAAS,WACTyB,KAAM,IAAMA,GACV,KACJwO,EAAMrQ,IAAI,CACRtF,KAAM,QACNxD,KAAM,YACNkJ,QAAS,YACT+F,OAAQ,OACR2gC,OAAQ,UACR+qQ,UAAU,EACVt5R,MAAO,CACL,CACE7d,KAAM,cACNzB,OAAQA,GAEVu9S,EACAM,KAmBN,OAfAl6O,EAAOi0O,mBAAmB53S,GAC1BA,EAAOsO,GAAG,aAAc8uS,GAAWhmS,IACnCA,EAAM0mS,aAAat3S,EAAK8zD,YAAYigP,SAChChuD,EAAWvsP,IACbA,EAAOosP,QAAQ,YAEb5lP,EAAK4rB,OACP8rC,GAAMzC,SAASrkD,EAAMC,QAAS,QAAS7Q,EAAK4rB,OAE9CpyB,EAAOsO,GAAG,UAAU,WAClB8I,EAAMzC,SACNyC,EAAQ,QAEV0gS,EAAKD,QAAQ73S,EAAQoX,GACrBqjS,GAAgBjB,sBAAsBx5S,GAC/B,CACLy5R,gBAAiBriR,EAAMnI,KAAK,WAAW,GAAGoI,QAC1CoyG,gBAAiBryG,EAAMC,UAGvB0mS,GAAS,CAAEpuR,OAAQA,IAEnB2U,GAAW5kC,QAAQC,KAAKC,MAAMC,QAAQ,wBAEtCiW,GAAQ,EACRkoS,GAAQ,CACV17S,GAAI,WACF,MAAO,QAAUwT,MAEnBjG,OAAQ,SAAU5R,EAAM+xB,EAAO7c,GAC7B,IAAIvL,EAAM1I,EAAWwE,SAAS8uB,cAAcv0B,GAW5C,OAVA2S,EAASpQ,IAAI0kB,WAAWtd,EAAKooB,GACL,kBAAb7c,EACTvL,EAAI5C,UAAYmO,EAEhBpS,EAASyN,KAAK2E,GAAU,SAAUqhD,GAC5BA,EAAMzqC,UACRniB,EAAIqI,YAAYukD,MAIf5sD,GAETqxD,eAAgB,SAAUrwD,GACxB,OAAOgI,EAASpQ,IAAIy4D,eAAerwD,IAErCqgH,cAAe,WACb,OAAOr4G,EAASpQ,IAAIC,eAEtBk/C,QAAS,SAAU/3C,GACjB,IAAIwqB,EAAOC,EACX,GAAIzqB,EAAIs2G,sBAAuB,CAC7B,IAAIv4E,EAAO/9B,EAAIs2G,wBACf9rF,EAAQ9xB,KAAKssB,IAAI+Y,EAAKvT,OAASuT,EAAKywH,MAAQzwH,EAAK2B,KAAM1/B,EAAI4hC,aAC3DnX,EAAS/xB,KAAKssB,IAAI+Y,EAAKtT,QAAUsT,EAAKoX,OAASpX,EAAKoX,OAAQn1C,EAAI6hC,mBAEhErX,EAAQxqB,EAAI4hC,YACZnX,EAASzqB,EAAI6hC,aAEf,MAAO,CACLrX,MAAOA,EACPC,OAAQA,IAGZgnB,OAAQ,SAAUzxC,EAAKhF,GACrB,OAAOgO,EAASpQ,IAAI64C,OAAOzxC,EAAKhF,GAAQo7S,GAAMn0L,iBAEhDA,aAAc,WACZ,OAAOxlF,GAASxa,UAAYwa,GAASxa,UAAY3qB,EAAWwE,SAAS2J,MAEvE5M,YAAa,SAAUypC,GACrB,OAAOt5B,EAASpQ,IAAIC,YAAYypC,IAElC5qC,IAAK,SAAUgD,GACb,OAAOpD,EAAWwE,SAASygH,eAAe7hH,IAE5CioH,SAAU,SAAU3iH,EAAKygN,GACvB,OAAOz3M,EAASpQ,IAAI+pH,SAAS3iH,EAAKygN,IAEpCn+F,YAAa,SAAUtiH,EAAKygN,GAC1B,OAAOz3M,EAASpQ,IAAI0pH,YAAYtiH,EAAKygN,IAEvCr2M,SAAU,SAAUpK,EAAKygN,GACvB,OAAOz3M,EAASpQ,IAAIwR,SAASpK,EAAKygN,IAEpC7wF,YAAa,SAAU5vH,EAAKygN,EAAKzkL,GAC/B,OAAOhzB,EAASpQ,IAAIg3H,YAAY5vH,EAAKygN,EAAKzkL,IAE5C76B,IAAK,SAAUnB,EAAK3J,EAAMoB,GACxB,OAAOuR,EAASpQ,IAAIi7D,SAAS7zD,EAAK3J,EAAMoB,IAE1C4+S,gBAAiB,SAAUr2S,EAAK3J,GAC9B,OAAO2S,EAASpQ,IAAI24C,SAASvxC,EAAK3J,GAAM,IAE1CqQ,GAAI,SAAUqC,EAAQ1S,EAAMmF,EAAUy/B,GACpC,OAAOjyB,EAASpQ,IAAI4c,KAAKzM,EAAQ1S,EAAMmF,EAAUy/B,IAEnDsQ,IAAK,SAAUxiC,EAAQ1S,EAAMmF,GAC3B,OAAOwN,EAASpQ,IAAIu0E,OAAOpkE,EAAQ1S,EAAMmF,IAE3C0iC,KAAM,SAAUn1B,EAAQ1S,EAAMuI,GAC5B,OAAOoK,EAASpQ,IAAIslC,KAAKn1B,EAAQ1S,EAAMuI,IAEzC0tH,UAAW,SAAUtsH,EAAKgB,GACxBgI,EAASpQ,IAAIknN,QAAQ9/M,EAAKgB,KAI1Bs1S,GAAW,SAAUt2S,GACvB,MAAkD,WAA3Co2S,GAAMC,gBAAgBr2S,EAAK,aAEhCu2S,GAAU,SAAU9qS,GACtB,OAAOA,EAAKuwB,MAAMtkC,IAAI,UAExB,SAAS8+S,GAA0B/qS,EAAM0rD,EAAWjvD,GAClD,IAAIuuS,EAAS5lQ,EAAK5iC,EAAG7Z,EAAGsiT,EAAOC,EAAO7Y,EAASC,EAAS7jI,EAAUh8I,EAyClE,OAxCAg8I,EAAW08I,KACX/lQ,EAAMulQ,GAAM3kQ,OAAO0lB,EAAWq5O,EAAY//P,eAAehlC,IACzDwC,EAAI4iC,EAAI5iC,EACR7Z,EAAIy8C,EAAIz8C,EACJmiT,GAAQ9qS,IAAS6qS,GAASh/S,EAAWwE,SAAS2J,QAChDwI,GAAKisJ,EAASjsJ,EACd7Z,GAAK8lK,EAAS9lK,GAEhBqiT,EAAUhrS,EAAKgE,QACfyO,EAAOk4R,GAAMr+P,QAAQ0+P,GACrBC,EAAQx4R,EAAKsM,MACbmsR,EAAQz4R,EAAKuM,OACbvM,EAAOk4R,GAAMr+P,QAAQof,GACrB2mO,EAAU5/Q,EAAKsM,MACfuzQ,EAAU7/Q,EAAKuM,OACfviB,GAAOA,GAAO,IAAI9V,MAAM,IACT,MAAX8V,EAAI,KACN9T,GAAK2pS,GAEQ,MAAX71R,EAAI,KACN+F,GAAK6vR,GAEQ,MAAX51R,EAAI,KACN9T,GAAKsE,KAAKu9B,MAAM8nQ,EAAU,IAEb,MAAX71R,EAAI,KACN+F,GAAKvV,KAAKu9B,MAAM6nQ,EAAU,IAEb,MAAX51R,EAAI,KACN9T,GAAKuiT,GAEQ,MAAXzuS,EAAI,KACN+F,GAAKyoS,GAEQ,MAAXxuS,EAAI,KACN9T,GAAKsE,KAAKu9B,MAAM0gR,EAAQ,IAEX,MAAXzuS,EAAI,KACN+F,GAAKvV,KAAKu9B,MAAMygR,EAAQ,IAEnB,CACLzoS,EAAGA,EACH7Z,EAAGA,EACH0E,EAAG49S,EACH5iT,EAAG6iT,GAGP,IAAIE,GAAyB,SAAUC,GACrC,MAAO,CACL7oS,EAAG,EACH7Z,EAAG,EACH0E,EAAGg+S,EAAkB/7C,YAAc,EACnCjnQ,EAAGgjT,EAAkBp6L,aAAe,IAGpCk6L,GAAoB,WACtB,IAAIt0Q,EAAMhrC,EAAW4B,OACjB+U,EAAIvV,KAAKssB,IAAIsd,EAAIy3H,YAAaziK,EAAWwE,SAAS2J,KAAKisC,WAAYp6C,EAAWwE,SAAS++E,gBAAgBnpC,YACvGt9C,EAAIsE,KAAKssB,IAAIsd,EAAIw3H,YAAaxiK,EAAWwE,SAAS2J,KAAKksC,UAAWr6C,EAAWwE,SAAS++E,gBAAgBlpC,WACtG74C,EAAIwpC,EAAIg/E,YAAchqH,EAAWwE,SAAS++E,gBAAgBp5C,YAC1D3tC,EAAIwuC,EAAIi0E,aAAej/G,EAAWwE,SAAS++E,gBAAgBn5C,aAC/D,MAAO,CACLzzB,EAAGA,EACH7Z,EAAGA,EACH0E,EAAGA,EACHhF,EAAGA,IAGHkmP,GAAkB,SAAUvuO,GAC9B,IAAIqrS,EAAoBtG,EAAY//P,eAAehlC,GACnD,OAAOqrS,IAAsBP,GAAQ9qS,GAAQorS,GAAuBC,GAAqBF,MAEvFG,GAAU,CACZC,YAAa,SAAUh3S,EAAKk+R,GAE1B,IADA,IAAIphQ,EAAek9M,GAAgBjoP,MAC1B0J,EAAI,EAAGA,EAAIyiS,EAAK/iS,OAAQM,IAAK,CACpC,IAAIo1C,EAAM2lQ,GAA0BzkT,KAAMiO,EAAKk+R,EAAKziS,IACpD,GAAI86S,GAAQxkT,OACV,GAAI8+C,EAAI5iC,EAAI,GAAK4iC,EAAI5iC,EAAI4iC,EAAI/3C,EAAIgkC,EAAahkC,GAAK+3C,EAAIz8C,EAAI,GAAKy8C,EAAIz8C,EAAIy8C,EAAI/8C,EAAIgpC,EAAahpC,EAC3F,OAAOoqS,EAAKziS,QAGd,GAAIo1C,EAAI5iC,EAAI6uB,EAAa7uB,GAAK4iC,EAAI5iC,EAAI4iC,EAAI/3C,EAAIgkC,EAAahkC,EAAIgkC,EAAa7uB,GAAK4iC,EAAIz8C,EAAI0oC,EAAa1oC,GAAKy8C,EAAIz8C,EAAIy8C,EAAI/8C,EAAIgpC,EAAahpC,EAAIgpC,EAAa1oC,EACvJ,OAAO8pS,EAAKziS,GAIlB,OAAOyiS,EAAK,IAEd5tD,QAAS,SAAUtwO,EAAKkI,GACH,kBAARA,IACTA,EAAMnW,KAAKilT,YAAYh3S,EAAKkI,IAE9B,IAAI2oC,EAAM2lQ,GAA0BzkT,KAAMiO,EAAKkI,GAC/C,OAAOnW,KAAKwgD,OAAO1B,EAAI5iC,EAAG4iC,EAAIz8C,IAEhCo3J,OAAQ,SAAU16G,EAAIC,GACpB,IAAIz3C,EAAOvH,KAAMgsC,EAAOzkC,EAAK29S,aAE7B,OADA39S,EAAKi5C,OAAOxU,EAAK9vB,EAAI6iC,EAAI/S,EAAK3pC,EAAI28C,GAC3Bz3C,GAETi5C,OAAQ,SAAUtkC,EAAG7Z,GACnB,IAAIkF,EAAOvH,KACX,SAASmlT,EAAUz/S,EAAOutB,EAAK9G,GAC7B,OAAIzmB,EAAQ,EACH,EAELA,EAAQymB,EAAO8G,GACjBvtB,EAAQutB,EAAM9G,EACPzmB,EAAQ,EAAI,EAAIA,GAElBA,EAET,GAAI6B,EAAKjB,SAAS8+S,oBAAqB,CACrC,IAAIr6Q,EAAek9M,GAAgBjoP,MAC/BklT,EAAa39S,EAAK29S,aACtBhpS,EAAIipS,EAAUjpS,EAAG6uB,EAAahkC,EAAIgkC,EAAa7uB,EAAGgpS,EAAWn+S,GAC7D1E,EAAI8iT,EAAU9iT,EAAG0oC,EAAahpC,EAAIgpC,EAAa1oC,EAAG6iT,EAAWnjT,GAE/D,IAAIu+C,EAAcm+P,EAAY//P,eAAen3C,GAsB7C,OArBI+4C,GAAeikQ,GAASjkQ,KAAiBkkQ,GAAQj9S,KACnD2U,GAAKokC,EAAYX,WACjBt9C,GAAKi+C,EAAYV,WAEfU,IACFpkC,GAAK,EACL7Z,GAAK,GAEHkF,EAAK0iC,MAAMtkC,IAAI,YACjB4B,EAAK29S,WAAW,CACdhpS,EAAGA,EACH7Z,EAAGA,IACFsqC,WAEHplC,EAAKjB,SAAS4V,EAAIA,EAClB3U,EAAKjB,SAASjE,EAAIA,GAEpBkF,EAAK4kC,KAAK,OAAQ,CAChBjwB,EAAGA,EACH7Z,EAAGA,IAEEkF,IAIPqjC,GAAW7kC,QAAQC,KAAKC,MAAMC,QAAQ,sBAEtCi3E,GAAWp3E,QAAQC,KAAKC,MAAMC,QAAQ,gCAEtCm/S,GAAW,CACbC,SAAU,SAAU5/S,GAClB,IAAIgH,EACA0hG,EAAQ,GACZ,GAAK1oG,EAGL,MAAqB,kBAAVA,GACTA,EAAQA,GAAS,EACV,CACLkoC,IAAKloC,EACLioC,KAAMjoC,EACN09C,OAAQ19C,EACR+2J,MAAO/2J,KAGXA,EAAQA,EAAMrF,MAAM,KACpBqM,EAAMhH,EAAM0D,OACA,IAARsD,EACFhH,EAAM,GAAKA,EAAM,GAAKA,EAAM,GAAKA,EAAM,GACtB,IAARgH,GACThH,EAAM,GAAKA,EAAM,GACjBA,EAAM,GAAKA,EAAM,IACA,IAARgH,IACThH,EAAM,GAAKA,EAAM,IAEZ,CACLkoC,IAAK7oC,SAASW,EAAM,GAAI0oG,IAAU,EAClCquD,MAAO13J,SAASW,EAAM,GAAI0oG,IAAU,EACpChrD,OAAQr+C,SAASW,EAAM,GAAI0oG,IAAU,EACrCzgE,KAAM5oC,SAASW,EAAM,GAAI0oG,IAAU,KAGvCm3M,WAAY,SAAUt3S,EAAKsJ,GACzB,SAASioC,EAASl7C,GAChB,IAAIorJ,EAAczhJ,EAAIs+B,cAAcmjH,YACpC,GAAIA,EAAa,CACf,IAAI81J,EAAgB91J,EAAYb,iBAAiB5gJ,EAAK,MACtD,OAAIu3S,GACFlhT,EAAOA,EAAK4D,QAAQ,UAAU,SAAU4Y,GACtC,MAAO,IAAMA,KAER0kS,EAAcjqP,iBAAiBj3D,IAE/B,KAGX,OAAO2J,EAAIs1K,aAAaj/K,GAE1B,SAASmhT,EAAQnhT,GACf,IAAIg3B,EAAM0E,WAAWwf,EAASl7C,IAC9B,OAAOglD,MAAMhuB,GAAO,EAAIA,EAE1B,MAAO,CACLsS,IAAK63Q,EAAQluS,EAAS,YACtBklJ,MAAOgpJ,EAAQluS,EAAS,cACxB6rC,OAAQqiQ,EAAQluS,EAAS,eACzBo2B,KAAM83Q,EAAQluS,EAAS,gBAK7B,SAASskE,MAET,SAAS6pO,GAAU1wQ,GACjBh1C,KAAK0uN,IAAM,GACX1uN,KAAK0uN,IAAIi3F,KAAO,GAChB3lT,KAAKg1C,SAAWA,GAAY6mC,GAC5B77E,KAAKuX,OAAS,GA4DhB,SAASk6C,GAAOmhB,GACd,IACsBxyB,EADlBwlQ,EAAc,GACdl8S,EAAIkpE,EAAMxpE,OACd,MAAOM,IACL02C,EAAOwyB,EAAMlpE,GACR02C,EAAKylQ,YACRD,EAAY94S,KAAKszC,GACjBA,EAAKylQ,UAAY,GAGrBn8S,EAAIk8S,EAAYx8S,OAChB,MAAOM,WACEk8S,EAAYl8S,GAAGm8S,UAExB,OAAOD,EAxETx+S,EAASsB,OAAOg9S,GAAUr9S,UAAW,CACnC+E,IAAK,SAAUshN,GAMb,OALIA,IAAQ1uN,KAAKga,SAAS00M,KACxB1uN,KAAK0uN,IAAIi3F,KAAKj3F,IAAO,EACrB1uN,KAAK0uN,IAAI5hN,KAAK4hN,GACd1uN,KAAK8lT,WAEA9lT,MAETgb,OAAQ,SAAU0zM,GAChB,GAAI1uN,KAAKga,SAAS00M,GAAM,CACtB,IAAIhlN,OAAI,EACR,IAAKA,EAAI,EAAGA,EAAI1J,KAAK0uN,IAAItlN,OAAQM,IAC/B,GAAI1J,KAAK0uN,IAAIhlN,KAAOglN,EAClB,MAGJ1uN,KAAK0uN,IAAIzhN,OAAOvD,EAAG,UACZ1J,KAAK0uN,IAAIi3F,KAAKj3F,GACrB1uN,KAAK8lT,UAEP,OAAO9lT,MAETwU,OAAQ,SAAUk6M,EAAKzkL,GACrB,IAAI87Q,EAAW/lT,KAAKga,SAAS00M,GAS7B,OARIq3F,IAAa97Q,IACX87Q,EACF/lT,KAAKgb,OAAO0zM,GAEZ1uN,KAAKoN,IAAIshN,GAEX1uN,KAAK8lT,WAEA9lT,MAETga,SAAU,SAAU00M,GAClB,QAAS1uN,KAAK0uN,IAAIi3F,KAAKj3F,IAEzBo3F,QAAS,kBACA9lT,KAAKgmT,SACZhmT,KAAKg1C,SAASzsC,KAAKvI,SAGvB0lT,GAAUr9S,UAAUC,SAAW,WAC7B,IAAI5C,EACJ,GAAI1F,KAAKgmT,SACP,OAAOhmT,KAAKgmT,SAEdtgT,EAAQ,GACR,IAAK,IAAIgE,EAAI,EAAGA,EAAI1J,KAAK0uN,IAAItlN,OAAQM,IAC/BA,EAAI,IACNhE,GAAS,KAEXA,GAAS1F,KAAKuX,OAASvX,KAAK0uN,IAAIhlN,GAElC,OAAOhE,GAmBT,IAGIuzF,GA+LAgtN,GAAcvqN,GAlMdvJ,GAAa,0GACb+zN,GAAU,sIACVtnB,GAAa,aAEbunB,GAAWv7Q,GAASliC,OAAO,CAC7Bi5H,KAAM,SAAUnyH,GACd,IAAI1K,EAAQ9E,KAAK8E,MACjB,SAASshT,EAAkB9hT,GACzB,GAAIA,EAEF,OADAA,EAAOA,EAAKimB,cACL,SAAU61B,GACf,MAAgB,MAAT97C,GAAgB87C,EAAKt4C,OAASxD,GAI3C,SAAS+hT,EAAgB19S,GACvB,GAAIA,EACF,OAAO,SAAUy3C,GACf,OAAOA,EAAKiH,QAAU1+C,GAI5B,SAAS29S,EAAqB94S,GAC5B,GAAIA,EAEF,OADAA,EAAUA,EAAQnN,MAAM,KACjB,SAAU+/C,GACf,IAAI12C,EAAI8D,EAAQpE,OAChB,MAAOM,IACL,IAAK02C,EAAK5yC,QAAQwM,SAASxM,EAAQ9D,IACjC,OAAO,EAGX,OAAO,GAIb,SAAS68S,EAAkBjiT,EAAMkiT,EAAKx0M,GACpC,GAAI1tG,EACF,OAAO,SAAU87C,GACf,IAAI16C,EAAQ06C,EAAK97C,GAAQ87C,EAAK97C,KAAU,GACxC,OAAQkiT,EAAwB,MAARA,EAAc9gT,IAAUssG,EAAgB,OAARw0M,EAAe9gT,EAAMwI,QAAQ8jG,IAAU,EAAY,OAARw0M,GAAgB,IAAM9gT,EAAQ,KAAKwI,QAAQ,IAAM8jG,EAAQ,MAAQ,EAAY,OAARw0M,EAAe9gT,IAAUssG,EAAgB,OAARw0M,EAAwC,IAAzB9gT,EAAMwI,QAAQ8jG,GAAuB,OAARw0M,GAAe9gT,EAAMiqB,OAAOjqB,EAAM0D,OAAS4oG,EAAM5oG,UAAY4oG,IAAlSA,GAItB,SAASy0M,EAAoBniT,GAC3B,IAAIoiT,EACJ,GAAIpiT,EAEF,OADAA,EAAO,wBAAwBjB,KAAKiB,GAC/BA,EAAK,IAMVoiT,EAAeC,EAAYriT,EAAK,GAAI,IAC7B,SAAU87C,GACf,OAAQt7C,EAAMs7C,EAAMsmQ,MAPpBpiT,EAAOA,EAAK,GACL,SAAU87C,EAAM5zC,EAAOpD,GAC5B,MAAgB,UAAT9E,EAA6B,IAAVkI,EAAuB,SAATlI,EAAkBkI,IAAUpD,EAAS,EAAa,SAAT9E,EAAkBkI,EAAQ,IAAM,EAAa,QAATlI,EAAiBkI,EAAQ,IAAM,IAAI4zC,EAAK97C,IAAQ87C,EAAK97C,OASlL,SAASmpM,EAAQj+L,EAAUunM,EAAS6vG,GAClC,IAAI39Q,EACJ,SAAS77B,EAAIwH,GACPA,GACFmiM,EAAQjqM,KAAK8H,GAWjB,OARAq0B,EAAQkpD,GAAW9uF,KAAKmM,EAAStH,QAAQ02R,GAAY,KACrDxxR,EAAIg5S,EAAkBn9Q,EAAM,KAC5B77B,EAAIi5S,EAAgBp9Q,EAAM,KAC1B77B,EAAIk5S,EAAqBr9Q,EAAM,KAC/B77B,EAAIm5S,EAAkBt9Q,EAAM,GAAIA,EAAM,GAAIA,EAAM,KAChD77B,EAAIq5S,EAAoBx9Q,EAAM,KAC9B8tK,EAAQvD,SAAWvqK,EAAM,GACzB8tK,EAAQ6vG,OAASA,EACV7vG,EAET,SAAS4vG,EAAYn3S,EAAU+9B,GAC7B,IACIyjC,EAAOn+D,EAASnJ,EADhBu/B,EAAQ,GAEZ,GAGE,GAFAi9Q,GAAQ7iT,KAAK,IACbwP,EAAUqzS,GAAQ7iT,KAAKmM,GACnBqD,IACFrD,EAAWqD,EAAQ,GACnBo2B,EAAMn8B,KAAK+F,EAAQ,IACfA,EAAQ,IAAI,CACdm+D,EAAQn+D,EAAQ,GAChB,aAGGA,GAKT,IAJIm+D,GACF21O,EAAY31O,EAAOzjC,GAErB/9B,EAAW,GACN9F,EAAI,EAAGA,EAAIu/B,EAAM7/B,OAAQM,IACX,MAAbu/B,EAAMv/B,IACR8F,EAAS1C,KAAK2gM,EAAQxkK,EAAMv/B,GAAI,GAAqB,MAAjBu/B,EAAMv/B,EAAI,KAIlD,OADA6jC,EAAUzgC,KAAK0C,GACR+9B,EAETvtC,KAAK6mT,WAAaF,EAAYn3S,EAAU,KAE1C1K,MAAO,SAAU6U,EAAS4zB,GACxB,IAAI7jC,EAAG1E,EAAG8hT,EAAIv1N,EAAI/hF,EAAUmiF,EAAI8uL,EAAI1pE,EAASvqM,EAAOpD,EAAQm5D,EAAUpmD,EAAOikC,EAE7E,IADA7S,EAAYA,GAAavtC,KAAK6mT,WACzBn9S,EAAI,EAAG1E,EAAIuoC,EAAUnkC,OAAQM,EAAI1E,EAAG0E,IAAK,CAK5C,IAJA8F,EAAW+9B,EAAU7jC,GACrB6nF,EAAK/hF,EAASpG,OACdg3C,EAAOzmC,EACPwC,EAAQ,EACH2qS,EAAKv1N,EAAK,EAAGu1N,GAAM,EAAGA,IAAM,CAC/B/vG,EAAUvnM,EAASs3S,GACnB,MAAO1mQ,EAAM,CACX,GAAI22J,EAAQvD,OAAQ,CAClBjxI,EAAWniB,EAAKh2C,SAASub,QACzBnZ,EAAQpD,EAASm5D,EAASn5D,OAC1B,MAAOoD,IACL,GAAI+1D,EAAS/1D,KAAW4zC,EACtB,MAIN,IAAKuxC,EAAK,EAAG8uL,EAAK1pE,EAAQ3tM,OAAQuoF,EAAK8uL,EAAI9uL,IACzC,IAAKolH,EAAQplH,GAAIvxC,EAAM5zC,EAAOpD,GAAS,CACrCuoF,EAAK8uL,EAAK,EACV,MAGJ,GAAI9uL,IAAO8uL,EAAI,CACbtkQ,IACA,MAEA,GAAI2qS,IAAOv1N,EAAK,EACd,MAGJnxC,EAAOA,EAAKh2C,UAGhB,GAAI+R,IAAUo1E,EACZ,OAAO,EAGX,OAAO,GAETj8E,KAAM,SAAU4a,GACd,IAAkBxmB,EAAG1E,EAAjB6N,EAAU,GACV06B,EAAYvtC,KAAK6mT,WACrB,SAASn5F,EAAQ/nM,EAAOnW,EAAUhD,GAChC,IAAI9C,EAAG1E,EAAG2sF,EAAI8uL,EAAIrgO,EACd22J,EAAUvnM,EAAShD,GACvB,IAAK9C,EAAI,EAAG1E,EAAI2gB,EAAMvc,OAAQM,EAAI1E,EAAG0E,IAAK,CAExC,IADA02C,EAAOz6B,EAAMjc,GACRioF,EAAK,EAAG8uL,EAAK1pE,EAAQ3tM,OAAQuoF,EAAK8uL,EAAI9uL,IACzC,IAAKolH,EAAQplH,GAAIvxC,EAAM12C,EAAG1E,GAAI,CAC5B2sF,EAAK8uL,EAAK,EACV,MAGJ,GAAI9uL,IAAO8uL,EACLj0Q,IAAUgD,EAASpG,OAAS,EAC9ByJ,EAAQ/F,KAAKszC,GAETA,EAAKz6B,OACP+nM,EAAQttK,EAAKz6B,QAASnW,EAAUhD,EAAQ,QAGvC,GAAIuqM,EAAQ6vG,OACjB,OAEExmQ,EAAKz6B,OACP+nM,EAAQttK,EAAKz6B,QAASnW,EAAUhD,IAItC,GAAI0jB,EAAUvK,MAAO,CACnB,IAAKjc,EAAI,EAAG1E,EAAIuoC,EAAUnkC,OAAQM,EAAI1E,EAAG0E,IACvCgkN,EAAQx9L,EAAUvK,QAAS4nB,EAAU7jC,GAAI,GAEvC1E,EAAI,IACN6N,EAAU4+C,GAAO5+C,IAMrB,OAHKomF,KACHA,GAAaktN,GAASltN,YAEjB,IAAIA,GAAWpmF,MAKtB/F,GAAOE,MAAM3E,UAAUyE,KAAML,GAAQO,MAAM3E,UAAUoE,MACzDivF,GAAQ,CACNtyF,OAAQ,EACRu4H,KAAM,SAAUh8G,GACVA,GACF3lB,KAAKoN,IAAIuY,IAGbvY,IAAK,SAAUuY,GACb,IAAIpe,EAAOvH,KAUX,OATKoH,EAASuqB,QAAQhM,GAOpB7Y,GAAKI,MAAM3F,EAAMoe,GANbA,aAAiBsgS,GACnB1+S,EAAK6F,IAAIuY,EAAM7B,WAEfhX,GAAKvE,KAAKhB,EAAMoe,GAKbpe,GAET3B,IAAK,SAAU+f,GACb,IAEIjc,EAFAnC,EAAOvH,KACP0M,EAAMnF,EAAK6B,OAIf,IAFA7B,EAAK6B,OAAS,EACd7B,EAAK6F,IAAIuY,GACJjc,EAAInC,EAAK6B,OAAQM,EAAIgD,EAAKhD,WACtBnC,EAAKmC,GAEd,OAAOnC,GAETqN,OAAQ,SAAUpF,GAChB,IACI9F,EAAG1E,EAEHo7C,EAAMt7C,EAHNyC,EAAOvH,KAEP6S,EAAU,GAUd,IARwB,kBAAbrD,GACTA,EAAW,IAAI22S,GAAS32S,GACxB1K,EAAQ,SAAUs7C,GAChB,OAAO5wC,EAAS1K,MAAMs7C,KAGxBt7C,EAAQ0K,EAEL9F,EAAI,EAAG1E,EAAIuC,EAAK6B,OAAQM,EAAI1E,EAAG0E,IAClC02C,EAAO74C,EAAKmC,GACR5E,EAAMs7C,IACRvtC,EAAQ/F,KAAKszC,GAGjB,OAAO,IAAI6lQ,GAAapzS,IAE1BpG,MAAO,WACL,OAAO,IAAIw5S,GAAax5S,GAAMS,MAAMlN,KAAMmJ,aAE5CsZ,GAAI,SAAUjW,GACZ,OAAkB,IAAXA,EAAexM,KAAKyM,MAAMD,GAASxM,KAAKyM,MAAMD,GAAQA,EAAQ,IAEvEqI,KAAM,SAAUpL,GAEd,OADArC,EAASyN,KAAK7U,KAAMyJ,GACbzJ,MAET8jB,QAAS,WACP,OAAO1c,EAAS0c,QAAQ9jB,OAE1BkO,QAAS,SAAUwL,GACjB,IAAInS,EAAOvH,KACP0J,EAAInC,EAAK6B,OACb,MAAOM,IACL,GAAInC,EAAKmC,KAAOgQ,EACd,MAGJ,OAAOhQ,GAETyoC,QAAS,WACP,OAAO,IAAI8zQ,GAAa7+S,EAAS0c,QAAQ9jB,MAAMmyC,YAEjD95B,SAAU,SAAUq2M,GAClB,QAAO1uN,KAAK,IAAKA,KAAK,GAAGwN,QAAQwM,SAAS00M,IAE5ClpF,KAAM,SAAUlhI,EAAMoB,GACpB,IACI06C,EADA74C,EAAOvH,KAEX,YAAcsjB,IAAV5d,GACF6B,EAAKsN,MAAK,SAAUurC,GACdA,EAAK97C,IACP87C,EAAK97C,GAAMoB,MAGR6B,IAET64C,EAAO74C,EAAK,GACR64C,GAAQA,EAAK97C,GACR87C,EAAK97C,UADd,IAIFjB,KAAM,SAAUiB,GACd,IAAIiD,EAAOvH,KAAM6M,EAAOzF,EAAS0c,QAAQ3a,WAAWsD,MAAM,GAM1D,OALAlF,EAAKsN,MAAK,SAAUurC,GACdA,EAAK97C,IACP87C,EAAK97C,GAAM4I,MAAMkzC,EAAMvzC,MAGpBtF,GAETyT,OAAQ,WACN,IAAItR,EAAI1J,KAAKoJ,OACb,MAAOM,IACL1J,KAAK0J,GAAGsR,SAEV,OAAOhb,MAET4wH,SAAU,SAAU89F,GAClB,OAAO1uN,KAAK6U,MAAK,SAAUurC,GACzBA,EAAK5yC,QAAQJ,IAAIshN,OAGrBn+F,YAAa,SAAUm+F,GACrB,OAAO1uN,KAAK6U,MAAK,SAAUurC,GACzBA,EAAK5yC,QAAQwN,OAAO0zM,QAI1BtnN,EAASyN,KAAK,2DAA2DxU,MAAM,MAAM,SAAUiE,GAC7Fo3F,GAAMp3F,GAAQ,WACZ,IAAIuI,EAAOzF,EAAS0c,QAAQ3a,WAM5B,OALAnJ,KAAK6U,MAAK,SAAU6E,GACdpV,KAAQoV,GACVA,EAAKpV,GAAM4I,MAAMwM,EAAM7M,MAGpB7M,SAGXoH,EAASyN,KAAK,uEAAuExU,MAAM,MAAM,SAAUiE,GACzGo3F,GAAMp3F,GAAQ,SAAUoB,GACtB,OAAO1F,KAAKwlI,KAAKlhI,EAAMoB,OAG3BugT,GAAer7Q,GAASliC,OAAOgzF,IAC/ByqN,GAASltN,WAAagtN,GACtB,IAAIc,GAAed,GAEfe,GAAU,SAAU1gT,GACtBtG,KAAKkW,OAAS5P,EAAS4P,QAEzB8wS,GAAQ9wS,OAAS,SAAU2oH,EAAOv6H,GAChC,OAAO,IAAI0iT,GAAQ,CACjB9wS,OAAQ,SAAU+wS,EAAYC,GAC5B,IAAI51D,EACA61D,EAAkB,SAAUhzS,GAC9B8yS,EAAWrhT,IAAIshT,EAAW/yS,EAAEzO,QAE1B0hT,EAAkB,SAAUjzS,GAC9B0qH,EAAMj5H,IAAItB,EAAM6P,EAAEzO,QAiBpB,OAfAuhT,EAAWtyS,GAAG,UAAYuyS,EAAWE,GACrCvoL,EAAMlqH,GAAG,UAAYrQ,EAAM6iT,GAC3B71D,EAAW21D,EAAWI,UACjB/1D,IACHA,EAAW21D,EAAWI,UAAY,GAClCJ,EAAWtyS,GAAG,WAAW,WACvB,IAAIjL,EAAI4nP,EAASloP,OACjB,MAAOM,IACL4nP,EAAS5nP,SAIf4nP,EAASxkP,MAAK,WACZ+xH,EAAMrlF,IAAI,UAAYl1C,EAAM6iT,MAEvBtoL,EAAMl5H,IAAIrB,OAKvB,IAAIgjT,GAAWvhT,QAAQC,KAAKC,MAAMC,QAAQ,2BAE1C,SAASqhT,GAAO51S,GACd,OAAOA,EAAKye,SAAW,EAEzB,SAAS2mM,GAAQj2M,EAAGtB,GAClB,IAAIqO,EAAG4kB,EACP,GAAI3xB,IAAMtB,EACR,OAAO,EAET,GAAU,OAANsB,GAAoB,OAANtB,EAChB,OAAOsB,IAAMtB,EAEf,GAAiB,kBAANsB,GAA+B,kBAANtB,EAClC,OAAOsB,IAAMtB,EAEf,GAAIpY,EAASuqB,QAAQnS,GAAI,CACvB,GAAIsB,EAAE1X,SAAWoW,EAAEpW,OACjB,OAAO,EAETykB,EAAI/M,EAAE1X,OACN,MAAOykB,IACL,IAAKkpM,GAAQj2M,EAAE+M,GAAIrO,EAAEqO,IACnB,OAAO,EAIb,GAAI05R,GAAOzmS,IAAMymS,GAAO/nS,GACtB,OAAOsB,IAAMtB,EAGf,IAAKqO,KADL4kB,EAAU,GACAjzB,EAAG,CACX,IAAKu3M,GAAQj2M,EAAE+M,GAAIrO,EAAEqO,IACnB,OAAO,EAET4kB,EAAQ5kB,IAAK,EAEf,IAAKA,KAAK/M,EACR,IAAK2xB,EAAQ5kB,KAAOkpM,GAAQj2M,EAAE+M,GAAIrO,EAAEqO,IAClC,OAAO,EAGX,OAAO,EAET,IAoDqB25R,GAqCjBn5Q,GAzFAo5Q,GAAmB78Q,GAASliC,OAAO,CACrCilS,OAAQ,CAAC2Z,IACT3lL,KAAM,SAAUv2H,GACd,IAAI9G,EAAMoB,EAEV,IAAKpB,KADL8G,EAAOA,GAAQ,GACFA,EACX1F,EAAQ0F,EAAK9G,GACToB,aAAiBshT,KACnB57S,EAAK9G,GAAQoB,EAAMwQ,OAAOlW,KAAMsE,IAGpCtE,KAAKoL,KAAOA,GAEdxF,IAAK,SAAUtB,EAAMoB,GACnB,IAAI7B,EAAKgJ,EACL66S,EAAW1nT,KAAKoL,KAAK9G,GAIzB,GAHIoB,aAAiBshT,KACnBthT,EAAQA,EAAMwQ,OAAOlW,KAAMsE,IAET,kBAATA,EAAmB,CAC5B,IAAKT,KAAOS,EACVtE,KAAK4F,IAAI/B,EAAKS,EAAKT,IAErB,OAAO7D,KAaT,OAXK+2N,GAAQ2wF,EAAUhiT,KACrB1F,KAAKoL,KAAK9G,GAAQoB,EAClBmH,EAAO,CACLmK,OAAQhX,KACRsE,KAAMA,EACNoB,MAAOA,EACPgiT,SAAUA,GAEZ1nT,KAAKmsC,KAAK,UAAY7nC,EAAMuI,GAC5B7M,KAAKmsC,KAAK,SAAUt/B,IAEf7M,MAET2F,IAAK,SAAUrB,GACb,OAAOtE,KAAKoL,KAAK9G,IAEnB4pB,IAAK,SAAU5pB,GACb,OAAOA,KAAQtE,KAAKoL,MAEtBqY,KAAM,SAAUnf,GACd,OAAO0iT,GAAQ9wS,OAAOlW,KAAMsE,IAE9B4pC,QAAS,WACPluC,KAAKmsC,KAAK,cAIVw7Q,GAAa,GACbC,GAAc,CAChBx6S,IAAK,SAAUsM,GACb,IAAItP,EAASsP,EAAKtP,SAClB,GAAIA,EAAQ,CACV,IAAKA,EAAOy9S,SAAWz9S,EAAOy9S,QAAQn2D,WACpC,OAEGi2D,GAAWv9S,EAAOsqE,OACrBizO,GAAWv9S,EAAOsqE,KAAOtqE,GAEtBo9S,KACHA,IAA0B,EAC1Bj9Q,EAASi/J,uBAAsB,WAC7B,IAAI7gM,EAAI+Q,EAER,IAAK/Q,KADL6+S,IAA0B,EACfG,GACTjuS,EAAOiuS,GAAWh/S,GACd+Q,EAAKuwB,MAAMtkC,IAAI,aACjB+T,EAAKknS,SAGT+G,GAAa,KACZpiT,EAAWwE,SAAS2J,SAI7BsH,OAAQ,SAAUtB,GACZiuS,GAAWjuS,EAAKg7D,aACXizO,GAAWjuS,EAAKg7D,OAKzBozO,GAA4B,iBAAkBviT,EAAWwE,SACzDg+S,IAAuB,EACvBC,GAAc,OACLC,GAAY,EACrBv/J,GAAU,CACZqlJ,QAAS,CAAEia,YAAaA,IACxBn+I,MAAO,WACL,OAAOx7H,GAAQ6D,KAEjB81Q,YAAaA,GACbrmL,KAAM,SAAUr7H,GACd,IACIkH,EAAS06S,EADT3gT,EAAOvH,KAEX,SAASmoT,EAAa36S,GACpB,IAAI9D,EAEJ,IADA8D,EAAUA,EAAQnN,MAAM,KACnBqJ,EAAI,EAAGA,EAAI8D,EAAQpE,OAAQM,IAC9BnC,EAAKiG,QAAQJ,IAAII,EAAQ9D,IAG7BnC,EAAKjB,SAAWA,EAAWc,EAASsB,OAAO,GAAInB,EAAKgnC,SAAUjoC,GAC9DiB,EAAKmtE,IAAMpuE,EAASqC,IAAM,QAAUs/S,KACpC1gT,EAAK6gT,MAAQ,CAAEnqS,KAAM3X,EAAS2X,MAC9B1W,EAAK8gT,UAAY,GACjB9gT,EAAK8K,EAAIs4B,GACTpjC,EAAK0iC,MAAQ,IAAIw9Q,GAAiB,CAChC1E,SAAS,EACTt7O,QAAQ,EACR7tD,UAAU,EACVlU,MAAO,KAET6B,EAAK6D,KAAO,IAAIq8S,GAAiBnhT,EAAS8E,MAC1C7D,EAAKiG,QAAU,IAAIk4S,IAAU,WACvBn+S,EAAK0iC,MAAMtkC,IAAI,cACjB4B,EAAKmW,QAAQpT,UAAYtK,KAAKsI,eAGlCf,EAAKiG,QAAQ+J,OAAShQ,EAAKygT,YAC3Bx6S,EAAUlH,EAASkH,QACfA,IACEjG,EAAKgnC,WACP25Q,EAAiB3gT,EAAKgnC,SAAS/gC,QAC3B06S,GAAkB16S,IAAY06S,GAChCC,EAAaD,IAGjBC,EAAa36S,IAEfpG,EAASyN,KAAK,gDAAgDxU,MAAM,MAAM,SAAUiE,GAC9EA,KAAQgC,GACViB,EAAKjD,GAAMgC,EAAShC,OAGxBiD,EAAKoN,GAAG,SAAS,WACf,GAAIpN,EAAKqS,WACP,OAAO,KAGXrS,EAAKjB,SAAWA,EAChBiB,EAAK+gT,UAAYjD,GAASC,SAASh/S,EAAS4tC,QAC5C3sC,EAAKghT,WAAalD,GAASC,SAASh/S,EAAS2gB,SAC7C1f,EAAKihT,UAAYnD,GAASC,SAASh/S,EAASw9C,QACxCx9C,EAAS4sP,QACX3rP,EAAKkmC,QAGTkvD,WAAY,cACZ8rN,gBAAiB,WACf,IAAInoQ,EAAcm+P,EAAY//P,eAAe1+C,MAC7C,OAAOsgD,GAA4B+jQ,GAAMn0L,gBAE3Cw4L,cAAe,SAAUz6S,GACvB,IAAIyL,EACAwrB,EAASllC,KAAK2sD,UAAUg8P,gBAC5B,MAAO16S,GAAOi3B,EAAQ,CAEpB,GADAxrB,EAAOwrB,EAAOj3B,EAAItF,IACd+Q,EACF,MAEFzL,EAAMA,EAAI1D,WAEZ,OAAOmP,GAETkvS,eAAgB,WACd,IAEIN,EAAWpD,EAEXzsR,EAAOC,EAAQzlB,EAAUC,EAAW21S,EACpCC,EAAeC,EAAgBC,EAL/BzhT,EAAOvH,KACPsG,EAAWiB,EAAKjB,SAEhB2H,EAAM1G,EAAKmW,QAGf4qS,EAAY/gT,EAAK+gT,UAAY/gT,EAAK+gT,WAAajD,GAASE,WAAWt3S,EAAK,UACxE1G,EAAKghT,WAAahhT,EAAKghT,YAAclD,GAASE,WAAWt3S,EAAK,WAC9D1G,EAAKihT,UAAYjhT,EAAKihT,WAAanD,GAASE,WAAWt3S,EAAK,UAC5D+6S,EAAc3E,GAAMr+P,QAAQ/3C,GAC5B66S,EAAgBxiT,EAAS2M,SACzB81S,EAAiBziT,EAAS4M,UAC1BD,EAAW61S,GAAiBE,EAAYvwR,MACxCvlB,EAAY61S,GAAkBC,EAAYtwR,OAC1CD,EAAQnyB,EAASmyB,MACjBC,EAASpyB,EAASoyB,OAClBmwR,EAAaviT,EAASuiT,WACtBA,EAAmC,qBAAfA,EAA6BA,GAAcpwR,IAAUC,EACzED,EAAQA,GAASxlB,EACjBylB,EAASA,GAAUxlB,EACnB,IAAI+4B,EAASq8Q,EAAU36Q,KAAO26Q,EAAU7rJ,MACpCvwH,EAASo8Q,EAAU16Q,IAAM06Q,EAAUllQ,OACnC6lQ,EAAO3iT,EAASsN,UAAY,MAC5Bs1S,EAAO5iT,EAAS2zS,WAAa,MAsBjC,OArBA1yS,EAAK4hT,YAAcjE,EAAa,CAC9BhpS,EAAG5V,EAAS4V,GAAK,EACjB7Z,EAAGiE,EAASjE,GAAK,EACjB0E,EAAG0xB,EACH12B,EAAG22B,EACHuT,OAAQA,EACRC,OAAQA,EACRk9Q,SAAU3wR,EAAQwT,EAClBo9Q,SAAU3wR,EAASwT,EACnBo9Q,OAAQ7wR,EAAQwT,EAChBs9Q,OAAQ7wR,EAASwT,EACjB48Q,cAAeA,GAAiB,EAChCC,eAAgBA,GAAkB,EAClCS,KAAM7iT,KAAKC,IAAIqM,EAAUg2S,GACzBQ,KAAM9iT,KAAKC,IAAIsM,EAAWg2S,GAC1BD,KAAMA,EACNC,KAAMA,EACNL,WAAYA,EACZa,QAAS,GAEXniT,EAAKoiT,gBAAkB,GAChBzE,GAETA,WAAY,SAAU/4B,GACpB,IACgCy9B,EAAgBz9R,EAAM20Q,EAAYC,EAAa8oB,EAD3EtiT,EAAOvH,KACP8pT,EAAUviT,EAAK4hT,YAInB,OAHKW,IACHA,EAAUviT,EAAKqhT,kBAEbz8B,GACF2U,EAAagpB,EAAQ79Q,OACrB80P,EAAc+oB,EAAQ59Q,YACJ5oB,IAAd6oQ,EAAQjwQ,IACV4tS,EAAQ5tS,EAAIiwQ,EAAQjwQ,QAEJoH,IAAd6oQ,EAAQ9pR,IACVynT,EAAQznT,EAAI8pR,EAAQ9pR,QAEDihB,IAAjB6oQ,EAAQq9B,OACVM,EAAQN,KAAOr9B,EAAQq9B,WAEJlmS,IAAjB6oQ,EAAQs9B,OACVK,EAAQL,KAAOt9B,EAAQs9B,MAEzBt9R,EAAOggQ,EAAQplR,OACFuc,IAAT6I,IACFA,EAAOA,EAAO29R,EAAQN,KAAOM,EAAQN,KAAOr9R,EAC5CA,EAAOA,EAAO29R,EAAQb,KAAOa,EAAQb,KAAO98R,EAC5C29R,EAAQ/iT,EAAIolB,EACZ29R,EAAQR,OAASn9R,EAAO20Q,GAE1B30Q,EAAOggQ,EAAQpqR,OACFuhB,IAAT6I,IACFA,EAAOA,EAAO29R,EAAQL,KAAOK,EAAQL,KAAOt9R,EAC5CA,EAAOA,EAAO29R,EAAQZ,KAAOY,EAAQZ,KAAO/8R,EAC5C29R,EAAQ/nT,EAAIoqB,EACZ29R,EAAQP,OAASp9R,EAAO40Q,GAE1B50Q,EAAOggQ,EAAQm9B,YACFhmS,IAAT6I,IACFA,EAAOA,EAAO29R,EAAQN,KAAO1oB,EAAagpB,EAAQN,KAAO1oB,EAAa30Q,EACtEA,EAAOA,EAAO29R,EAAQb,KAAOnoB,EAAagpB,EAAQb,KAAOnoB,EAAa30Q,EACtE29R,EAAQR,OAASn9R,EACjB29R,EAAQ/iT,EAAIolB,EAAO20Q,GAErB30Q,EAAOggQ,EAAQo9B,YACFjmS,IAAT6I,IACFA,EAAOA,EAAO29R,EAAQL,KAAO1oB,EAAc+oB,EAAQL,KAAO1oB,EAAc50Q,EACxEA,EAAOA,EAAO29R,EAAQZ,KAAOnoB,EAAc+oB,EAAQZ,KAAOnoB,EAAc50Q,EACxE29R,EAAQP,OAASp9R,EACjB29R,EAAQ/nT,EAAIoqB,EAAO40Q,QAEIz9Q,IAArB6oQ,EAAQi9B,WACVU,EAAQV,SAAWj9B,EAAQi9B,eAEJ9lS,IAArB6oQ,EAAQk9B,WACVS,EAAQT,SAAWl9B,EAAQk9B,UAE7BO,EAAiBriT,EAAKoiT,gBAClBC,EAAe1tS,IAAM4tS,EAAQ5tS,GAAK0tS,EAAevnT,IAAMynT,EAAQznT,GAAKunT,EAAe7iT,IAAM+iT,EAAQ/iT,GAAK6iT,EAAe7nT,IAAM+nT,EAAQ/nT,IACrI8nT,EAAkBx7Q,GAAQw7Q,gBACtBA,GACEA,EAAgB5hT,MAAQ4hT,EAAgB5hT,IAAIV,EAAKmtE,OACnDm1O,EAAgB/8S,KAAKvF,GACrBsiT,EAAgB5hT,IAAIV,EAAKmtE,MAAO,GAGpCk1O,EAAe1tS,EAAI4tS,EAAQ5tS,EAC3B0tS,EAAevnT,EAAIynT,EAAQznT,EAC3BunT,EAAe7iT,EAAI+iT,EAAQ/iT,EAC3B6iT,EAAe7nT,EAAI+nT,EAAQ/nT,GAEtBwF,GAEFuiT,GAETn9Q,QAAS,WACP,IACI98B,EAAOk6S,EAAWtvD,EAASzuN,EAAMs8Q,EACjC0B,EAASC,EAASC,EAAiBhmR,EAAOx+B,EAF1C6B,EAAOvH,KAGXkkC,EAAS3+B,EAAWwE,SAAS0mB,YAA2B,SAAU/qB,GAChE,OAAOA,GADkCiB,KAAKu9B,MAGhDr0B,EAAQtI,EAAKmW,QAAQ7N,MACrBm8B,EAAOzkC,EAAK4hT,YACZe,EAAkB3iT,EAAK4iT,kBAAoB,GAC3C7B,EAAY/gT,EAAK+gT,UACjB0B,EAAU1B,EAAU36Q,KAAO26Q,EAAU7rJ,MACrCwtJ,EAAU3B,EAAU16Q,IAAM06Q,EAAUllQ,OAChCpX,EAAK9vB,IAAMguS,EAAgBhuS,IAC7BrM,EAAM89B,KAAOzJ,EAAM8H,EAAK9vB,GAAK,KAC7BguS,EAAgBhuS,EAAI8vB,EAAK9vB,GAEvB8vB,EAAK3pC,IAAM6nT,EAAgB7nT,IAC7BwN,EAAM+9B,IAAM1J,EAAM8H,EAAK3pC,GAAK,KAC5B6nT,EAAgB7nT,EAAI2pC,EAAK3pC,GAEvB2pC,EAAKjlC,IAAMmjT,EAAgBnjT,IAC7BrB,EAAQw+B,EAAM8H,EAAKjlC,EAAIijT,GACvBn6S,EAAM4oB,OAAS/yB,GAAS,EAAIA,EAAQ,GAAK,KACzCwkT,EAAgBnjT,EAAIilC,EAAKjlC,GAEvBilC,EAAKjqC,IAAMmoT,EAAgBnoT,IAC7B2D,EAAQw+B,EAAM8H,EAAKjqC,EAAIkoT,GACvBp6S,EAAM6oB,QAAUhzB,GAAS,EAAIA,EAAQ,GAAK,KAC1CwkT,EAAgBnoT,EAAIiqC,EAAKjqC,GAEvBwF,EAAK6iT,UAAYp+Q,EAAKs9Q,SAAWY,EAAgBZ,SACnD5jT,EAAQw+B,EAAM8H,EAAKs9Q,QACnB7uD,EAAUlzP,EAAKmW,MAAM,QACjB+8O,IACFsvD,EAAYtvD,EAAQ5qP,MACpBk6S,EAAUtxR,OAAS/yB,GAAS,EAAIA,EAAQ,GAAK,MAE/CwkT,EAAgBZ,OAASt9Q,EAAKs9Q,QAE5B/hT,EAAK6iT,UAAYp+Q,EAAKu9Q,SAAWW,EAAgBX,SACnD7jT,EAAQw+B,EAAM8H,EAAKu9Q,QACnB9uD,EAAUA,GAAWlzP,EAAKmW,MAAM,QAC5B+8O,IACFsvD,EAAYA,GAAatvD,EAAQ5qP,MACjCk6S,EAAUrxR,QAAUhzB,GAAS,EAAIA,EAAQ,GAAK,MAEhDwkT,EAAgBX,OAASv9Q,EAAKu9Q,QAEhChiT,EAAK4iT,iBAAmBD,EACxB3iT,EAAK4kC,KAAK,UAAW,IAAI,IAE3Bk+Q,iBAAkB,WAChB,IAAI9iT,EAAOvH,KACXuH,EAAK6C,SAASkgT,UAAY,KAC1BjG,GAAMj1S,IAAI7H,EAAKmW,QAAS,CACtB+a,MAAO,GACPC,OAAQ,KAEVnxB,EAAK4hT,YAAc5hT,EAAK4iT,iBAAmB5iT,EAAKoiT,gBAAkB,KAClEpiT,EAAKqhT,kBAEPj0S,GAAI,SAAUrQ,EAAMmF,GAClB,IAAIlC,EAAOvH,KACX,SAASuqT,EAAoBjmT,GAC3B,IAAImF,EAAUy/B,EACd,MAAoB,kBAAT5kC,EACFA,EAEF,SAAU6P,GAUf,OATK1K,GACHlC,EAAKitO,iBAAiB3/N,MAAK,SAAU6E,GACnC,IAAIrM,EAAYqM,EAAKpT,SAAS+G,UAC9B,GAAIA,IAAc5D,EAAW4D,EAAU/I,IAErC,OADA4kC,EAAQxvB,GACD,KAIRjQ,EAKEA,EAASlB,KAAK2gC,EAAO/0B,IAJ1BA,EAAEmR,OAAShhB,OACXtE,KAAKmsC,KAAK,UAAWh4B,KAO3B,OADAy9O,GAAmBrqP,GAAMoN,GAAGrQ,EAAMimT,EAAoB9gT,IAC/ClC,GAETiyC,IAAK,SAAUl1C,EAAMmF,GAEnB,OADAmoP,GAAmB5xP,MAAMw5C,IAAIl1C,EAAMmF,GAC5BzJ,MAETmsC,KAAM,SAAU7nC,EAAMuI,EAAM+8I,GAC1B,IAAIriJ,EAAOvH,KAMX,GALA6M,EAAOA,GAAQ,GACVA,EAAK8M,UACR9M,EAAK8M,QAAUpS,GAEjBsF,EAAO+kP,GAAmBrqP,GAAM4kC,KAAK7nC,EAAMuI,IAC5B,IAAX+8I,GAAoBriJ,EAAK6C,OAAQ,CACnC,IAAIA,EAAS7C,EAAK6C,SAClB,MAAOA,IAAWyC,EAAK8+L,uBACrBvhM,EAAO+hC,KAAK7nC,EAAMuI,GAAM,GACxBzC,EAASA,EAAOA,SAGpB,OAAOyC,GAET2jE,kBAAmB,SAAUlsE,GAC3B,OAAOstP,GAAmB5xP,MAAMkuB,IAAI5pB,IAEtCkjE,QAAS,SAAUh4D,GACjB,IACIkK,EADAnS,EAAOvH,KACDwnE,EAAU,IAAIu/O,GACxB,IAAKrtS,EAAOnS,EAAK6C,SAAUsP,EAAMA,EAAOA,EAAKtP,SAC3Co9D,EAAQp6D,IAAIsM,GAKd,OAHIlK,IACFg4D,EAAUA,EAAQ5yD,OAAOpF,IAEpBg4D,GAETgtK,eAAgB,SAAUhlO,GACxB,OAAO,IAAIu3S,GAAa/mT,MAAMoN,IAAIpN,KAAKwnE,QAAQh4D,KAEjDwjB,KAAM,WACJ,IAAIw3R,EAAiBxqT,KAAKoK,SAASub,QACnC,OAAO6kS,EAAeA,EAAet8S,QAAQlO,MAAQ,IAEvDuiI,KAAM,WACJ,IAAIioL,EAAiBxqT,KAAKoK,SAASub,QACnC,OAAO6kS,EAAeA,EAAet8S,QAAQlO,MAAQ,IAEvDu6H,UAAW,SAAUtrH,GAEnB,OADAjP,KAAK+uC,IAAI9/B,KAAKA,GACPjP,MAET0d,MAAO,SAAUulI,GACf,IAAIt6I,EAAKs6I,EAASjjJ,KAAK00E,IAAM,IAAMuuE,EAASjjJ,KAAK00E,IAIjD,OAHK10E,KAAKqoT,UAAU1/S,KAClB3I,KAAKqoT,UAAU1/S,GAAMgiC,GAAS,IAAMhiC,GAAI,IAEnC3I,KAAKqoT,UAAU1/S,IAExB6kC,KAAM,WACJ,OAAOxtC,KAAK+iT,SAAQ,IAEtBt1Q,KAAM,WACJ,OAAOztC,KAAK+iT,SAAQ,IAEtBloS,MAAO,WACL,IACE7a,KAAK0d,QAAQ7C,QACb,MAAOqgB,IAET,OAAOl7B,MAETqlH,KAAM,WAEJ,OADArlH,KAAK0d,QAAQ2nG,OACNrlH,MAET6mM,KAAM,SAAUviM,EAAMoB,GACpB,IAAI6B,EAAOvH,KAAMiO,EAAM1G,EAAKmW,MAAMnW,EAAKkjT,YACvC,MAAqB,qBAAV/kT,EACF6B,EAAK6gT,MAAM9jT,IAEpBiD,EAAK6gT,MAAM9jT,GAAQoB,EACf6B,EAAK0iC,MAAMtkC,IAAI,aACjBsI,EAAI0O,aAAsB,SAATrY,EAAkBA,EAAO,QAAUA,EAAMoB,GAErD6B,IAETI,OAAQ,SAAUgE,EAAMjI,GAItB,OAHkB,IAAdA,IACFiI,EAAO3L,KAAK0D,UAAUiI,KAEhBA,GAAQ,IAAIzD,QAAQ,WAAW,SAAUpD,GAC/C,MAAO,KAAOA,EAAM+vB,WAAW,GAAK,QAGxCnxB,UAAW,SAAUiI,GACnB,OAAO0iC,GAAQ3qC,UAAY2qC,GAAQ3qC,UAAUiI,GAAQA,GAEvD5C,OAAQ,SAAU4c,GAChB,IAAIpe,EAAOvH,KAAMoK,EAAS7C,EAAK6C,SAI/B,OAHIA,GACFA,EAAOpB,OAAO2c,EAAOvb,EAAOub,QAAQzX,QAAQ3G,IAAO,GAE9CA,GAETqF,MAAO,SAAU+Y,GACf,IAAIpe,EAAOvH,KAAMoK,EAAS7C,EAAK6C,SAI/B,OAHIA,GACFA,EAAOpB,OAAO2c,EAAOvb,EAAOub,QAAQzX,QAAQ3G,IAEvCA,GAETyT,OAAQ,WACN,IAGI0vS,EAAUhhT,EAHVnC,EAAOvH,KACPiO,EAAM1G,EAAKmW,QACXtT,EAAS7C,EAAK6C,SAElB,GAAI7C,EAAKoe,MAAO,CACd,IAAIglS,EAAWpjT,EAAKoe,QAAQ7B,UAC5Bpa,EAAIihT,EAASvhT,OACb,MAAOM,IACLihT,EAASjhT,GAAGsR,SAGZ5Q,GAAUA,EAAOub,QACnB+kS,EAAW,GACXtgT,EAAOub,QAAQ9Q,MAAK,SAAUurC,GACxBA,IAAS74C,GACXmjT,EAAS59S,KAAKszC,MAGlBh2C,EAAOub,QAAQ/f,IAAI8kT,GACnBtgT,EAAOkgT,UAAY,MAEjB/iT,EAAKqjT,aAAerjT,EAAKqjT,cAAgBrjT,GAC3CojC,GAAS18B,GAAKurC,MAEhB,IAAItU,EAAS39B,EAAKolD,UAAUg8P,gBAU5B,OATIzjR,UACKA,EAAO39B,EAAKmtE,KAEjBzmE,GAAOA,EAAI1D,YACb0D,EAAI1D,WAAW+iB,YAAYrf,GAE7B1G,EAAK0iC,MAAMrkC,IAAI,YAAY,GAC3B2B,EAAK0iC,MAAMiE,UACX3mC,EAAK4kC,KAAK,UACH5kC,GAET48S,aAAc,SAAUl2S,GAGtB,OAFA08B,GAAS18B,GAAKlF,OAAO/I,KAAK6qT,cAC1B7qT,KAAKsvC,aACEtvC,MAETugD,SAAU,SAAUtyC,GAGlB,OAFA08B,GAAS18B,GAAOjO,KAAKyoT,mBAAmBtzS,OAAOnV,KAAK6qT,cACpD7qT,KAAKsvC,aACEtvC,MAET8qT,UAAW,aAEX90R,OAAQ,aAER60R,WAAY,WACV,MAAO,YAAc7qT,KAAK00E,IAAM,YAAc10E,KAAKwN,QAAU,YAE/D8hC,WAAY,WACV,IAEIrhC,EAAKq2G,EAAKl6G,EAAQ9F,EAAMymT,EAFxBxjT,EAAOvH,KACPsG,EAAWiB,EAAKjB,SAIpB,IAAKhC,KAFLiD,EAAKwnC,IAAMpE,GAASpjC,EAAKmW,SACzBnW,EAAK0iC,MAAMrkC,IAAI,YAAY,GACdU,EACgB,IAAvBhC,EAAK4J,QAAQ,OACf3G,EAAKoN,GAAGrQ,EAAKqrB,OAAO,GAAIrpB,EAAShC,IAGrC,GAAIiD,EAAKqjT,YAAa,CACpB,IAAKxgT,EAAS7C,EAAK6C,UAAW2gT,GAAoB3gT,EAAQA,EAASA,EAAOA,SACxE2gT,EAAmB3gT,EAAOwgT,YAE5B,GAAIG,EACF,IAAKzmT,KAAQymT,EAAiBC,cAC5BzjT,EAAKyjT,cAAc1mT,IAAQ,EAIjC2mT,GAAkB1jT,GACdjB,EAASuJ,QACX5B,EAAM1G,EAAKmW,QACPzP,IACFA,EAAI0O,aAAa,QAASrW,EAASuJ,OACnC5B,EAAI4B,MAAMwd,QAAU/mB,EAASuJ,QAG7BtI,EAAKjB,SAAS4tC,SAChBowE,EAAM/8G,EAAK+gT,UACX/gT,EAAKwnC,IAAI3/B,IAAI,CACX,mBAAoBk1G,EAAI12E,IACxB,qBAAsB02E,EAAIm4C,MAC1B,sBAAuBn4C,EAAIlhE,OAC3B,oBAAqBkhE,EAAI32E,QAG7B,IAAI1kC,EAAO1B,EAAKolD,UAKhB,IAAK,IAAI9oD,KAJJoF,EAAK0/S,kBACR1/S,EAAK0/S,gBAAkB,IAEzB1/S,EAAK0/S,gBAAgBphT,EAAKmtE,KAAOntE,EACjBA,EAAK6gT,MACnB7gT,EAAKs/L,KAAKhjM,EAAK0D,EAAK6gT,MAAMvkT,KAEM,IAA9B0D,EAAK0iC,MAAMtkC,IAAI,aACjB4B,EAAKmW,QAAQ7N,MAAMgjF,QAAU,QAE/BtrF,EAAKyoC,aACLzoC,EAAK0iC,MAAMt1B,GAAG,kBAAkB,SAAUR,GACxC,IACI+2S,EADAjhR,EAAQ91B,EAAEzO,MAEV6B,EAAK0iC,MAAMtkC,IAAI,cACjB4B,EAAKmW,QAAQ7N,MAAMgjF,SAAoB,IAAV5oD,EAAkB,OAAS,GACxD1iC,EAAKmW,QAAQ6mG,yBAEf2mM,EAAa3jT,EAAK6C,SACd8gT,IACFA,EAAWZ,UAAY,MAEzB/iT,EAAK4kC,KAAKlC,EAAQ,OAAS,QAC3B29Q,GAAYx6S,IAAI7F,MAElBA,EAAK4kC,KAAK,aAAc,IAAI,IAE9B6D,WAAY,aAEZg/C,eAAgB,SAAUv7E,GACxB,SAAS0wJ,EAAUl2J,EAAK2uM,GACtB,IAAI1gM,EAAG7Z,EAAG+H,EAAS6D,EACnBiO,EAAI7Z,EAAI,EACR,MAAO+H,GAAUA,IAAWwyM,GAAWxyM,EAAOgmB,SAC5ClU,GAAK9R,EAAOg+J,YAAc,EAC1B/lK,GAAK+H,EAAO86G,WAAa,EACzB96G,EAASA,EAAOyyM,aAElB,MAAO,CACL3gM,EAAGA,EACH7Z,EAAGA,GAGP,IACI6Z,EAAG7Z,EAAGo2B,EAAOC,EAAQyyR,EAAaC,EADlCn9S,EAAMjO,KAAK0d,QAASkoK,EAAY33K,EAAI1D,WAEpCu0C,EAAMqlH,EAAUl2J,EAAK23K,GAgBzB,OAfA1pK,EAAI4iC,EAAI5iC,EACR7Z,EAAIy8C,EAAIz8C,EACRo2B,EAAQxqB,EAAI4hC,YACZnX,EAASzqB,EAAI6hC,aACbq7Q,EAAcvlI,EAAUl2I,YACxB07Q,EAAexlI,EAAUj2I,aACX,QAAVl8B,GACFyI,GAAKivS,EAAc1yR,EACnBp2B,GAAK+oT,EAAe1yR,GACD,WAAVjlB,IACTyI,GAAKivS,EAAc,EAAI1yR,EAAQ,EAC/Bp2B,GAAK+oT,EAAe,EAAI1yR,EAAS,GAEnCktJ,EAAUjmI,WAAazjC,EACvB0pK,EAAUhmI,UAAYv9C,EACfrC,MAET2sD,QAAS,WACP,IAAiBpE,EAAb7uC,EAAO1Z,KACPwnE,EAAU,GACd,MAAO9tD,EAAM,CACX,GAAIA,EAAK6uC,YAAa,CACpBA,EAAc7uC,EAAK6uC,YACnB,MAEFif,EAAQ16D,KAAK4M,GACb6uC,EAAc7uC,EACdA,EAAOA,EAAKtP,SAETm+C,IACHA,EAAcvoD,MAEhB,IAAI0J,EAAI89D,EAAQp+D,OAChB,MAAOM,IACL89D,EAAQ99D,GAAG6+C,YAAcA,EAE3B,OAAOA,GAETq4P,OAAQ,WACNgH,GAAY5sS,OAAOhb,MACnB,IAAIoK,EAASpK,KAAKoK,SAIlB,OAHIA,GAAUA,EAAOy9S,UAAYz9S,EAAOy9S,QAAQn2D,YAC9CtnP,EAAOw2S,SAEF5gT,OAeX,SAAS4xP,GAAmB7rO,GAiB1B,OAhBKA,EAAI8rO,mBACP9rO,EAAI8rO,iBAAmB,IAAI10K,GAAS,CAClCj0C,MAAOnjB,EACPsrO,YAAa,SAAU/sP,EAAM2lC,GACvBA,GAASkzC,GAASu0K,SAASptP,KACxByhB,EAAIilS,gBACPjlS,EAAIilS,cAAgB,IAEtBjlS,EAAIilS,cAAc1mT,IAAQ,EACtByhB,EAAIkkB,MAAMtkC,IAAI,aAChBslT,GAAkBllS,QAMrBA,EAAI8rO,iBAEb,SAASo5D,GAAkBI,GACzB,IAAI3hT,EAAG1E,EAAGwiE,EAAS8jP,EAAen6D,EAAc7sP,EAChD,SAAS6pL,EAASh6K,GAChB,IAAIwF,EAAU0xS,EAAU3C,cAAcv0S,EAAE6C,QACpC2C,GACFA,EAAQwyB,KAAKh4B,EAAErM,KAAMqM,GAGzB,SAASo3S,IACP,IAAI7xS,EAAO4xS,EAAcE,eACrB9xS,IACFA,EAAKyyB,KAAK,aAAc,CAAEn1B,OAAQ0C,EAAKgE,UACvChE,EAAK8tD,UAAU3yD,MAAK,SAAU6E,GAC5BA,EAAKyyB,KAAK,aAAc,CAAEn1B,OAAQ0C,EAAKgE,aAEzC4tS,EAAcE,eAAiB,MAGnC,SAASC,EAAkBt3S,GACzB,IAAgGzK,EAAG89D,EAASkkP,EAAxGhyS,EAAO2xS,EAAU3C,cAAcv0S,EAAE6C,QAAS20S,EAAWL,EAAcE,eAAgB12S,EAAM,EAC7F,GAAI4E,IAASiyS,EAAU,CAIrB,GAHAL,EAAcE,eAAiB9xS,EAC/B8tD,EAAU9tD,EAAK8tD,UAAU1jD,UAAUquB,UACnCq1B,EAAQ16D,KAAK4M,GACTiyS,EAAU,CAGZ,IAFAD,EAAcC,EAASnkP,UAAU1jD,UAAUquB,UAC3Cu5Q,EAAY5+S,KAAK6+S,GACZ72S,EAAM,EAAGA,EAAM42S,EAAYtiT,OAAQ0L,IACtC,GAAI0yD,EAAQ1yD,KAAS42S,EAAY52S,GAC/B,MAGJ,IAAKpL,EAAIgiT,EAAYtiT,OAAS,EAAGM,GAAKoL,EAAKpL,IACzCiiT,EAAWD,EAAYhiT,GACvBiiT,EAASx/Q,KAAK,aAAc,CAAEn1B,OAAQ20S,EAASjuS,UAGnD,IAAKhU,EAAIoL,EAAKpL,EAAI89D,EAAQp+D,OAAQM,IAChCgQ,EAAO8tD,EAAQ99D,GACfgQ,EAAKyyB,KAAK,aAAc,CAAEn1B,OAAQ0C,EAAKgE,WAI7C,SAASkuS,EAAcz3S,GACrBA,EAAE44B,iBACa,eAAX54B,EAAErM,MACJqM,EAAE43B,QAAU,EAAI,GAAK53B,EAAE03S,WACnB13S,EAAE23S,cACJ33S,EAAE23B,QAAU,EAAI,GAAK33B,EAAE23S,eAGzB33S,EAAE23B,OAAS,EACX33B,EAAE43B,OAAS53B,EAAE0tD,QAEf1tD,EAAIk3S,EAAUl/Q,KAAK,QAASh4B,GAG9B,GADAg9O,EAAek6D,EAAUL,cACrB75D,EAAc,CAGhB,IAFA3pL,EAAU6jP,EAAU7jP,UAAU1jD,UAC9B0jD,EAAQumB,QAAQs9N,GACX3hT,EAAI,EAAG1E,EAAIwiE,EAAQp+D,QAASkiT,GAAiB5hT,EAAI1E,EAAG0E,IACvD4hT,EAAgB9jP,EAAQ99D,GAAGkhT,YAM7B,IAJKU,IACHA,EAAgB9jP,EAAQA,EAAQp+D,OAAS,IAAMiiT,GAEjDA,EAAUT,YAAcU,EACnBtmT,EAAI0E,EAAGA,EAAI,EAAGA,EAAI1E,EAAG0E,IACxB89D,EAAQ99D,GAAGkhT,YAAcU,EAE3B,IAAIS,EAAqBT,EAAcU,WAIvC,IAAK1nT,KAHAynT,IACHA,EAAqBT,EAAcU,WAAa,IAErC76D,EAAc,CACzB,IAAKA,EACH,OAAO,EAEI,UAAT7sP,GAAqByjT,IAQZ,eAATzjT,GAAkC,eAATA,EACtBgnT,EAAcW,iBACjBthR,GAAS2gR,EAAc5tS,SAAS/I,GAAG,aAAc42S,GAAmB52S,GAAG,YAAa82S,GACpFH,EAAcW,eAAiB,GAEvBF,EAAmBznT,KAC7BqmC,GAAS2gR,EAAc5tS,SAAS/I,GAAGrQ,EAAM6pL,GACzC49H,EAAmBznT,IAAQ,GAE7B6sP,EAAa7sP,IAAQ,GAhBfwjT,GACFn9Q,GAAS0gR,EAAU3tS,SAAS/I,GAAG,aAAci3S,GAE7CjhR,GAAS0gR,EAAU3tS,SAAS/I,GAAG,iBAAkBi3S,KAjH3DxkT,EAASyN,KAAK,2CAA2CxU,MAAM,MAAM,SAAUiE,GAC7EokJ,GAAQpkJ,GAAQ,SAAUoB,GACxB,OAAyB,IAArByD,UAAUC,OACLpJ,KAAKiqC,MAAMtkC,IAAIrB,IAEH,qBAAVoB,GACT1F,KAAKiqC,MAAMrkC,IAAItB,EAAMoB,GAEhB1F,UAGXquC,GAAUzD,GAASliC,OAAOggJ,IAuH1B,IAAIwjK,GAAY79Q,GAEZ89Q,GAAiB,SAAUl+S,GAC7B,QAAOA,EAAI4P,aAAa,qBAE1B,SAASuuS,GAAoB9lT,GAC3B,IACI+lT,EAAgBC,EADhBrjT,EAAO3C,EAAS2C,KAEpB,SAASkyD,EAAUxpD,GACjB,OAAOA,GAA0B,IAAlBA,EAAKye,SAEtB,IACEi8R,EAAiB9mT,EAAWwE,SAASg6K,cACrC,MAAO7oJ,GACPmxR,EAAiB9mT,EAAWwE,SAAS2J,KAGvC,SAAS64S,EAAQt+S,GAEf,OADAA,EAAMA,GAAOo+S,EACTlxP,EAAUltD,GACLA,EAAI4P,aAAa,QAEnB,KAET,SAAS2uS,EAAcv+S,GACrB,IAAIgQ,EAAM7T,EAAS6D,GAAOo+S,EAC1B,MAAOjiT,EAASA,EAAOG,WACrB,GAAI0T,EAAOsuS,EAAQniT,GACjB,OAAO6T,EAIb,SAASwuS,EAAYnoT,GACnB,IAAI2J,EAAMo+S,EACV,GAAIlxP,EAAUltD,GACZ,OAAOA,EAAI4P,aAAa,QAAUvZ,GAGtC,SAASooT,EAAmBz+S,GAC1B,IAAImJ,EAAUnJ,EAAImJ,QAAQ6rD,cAC1B,MAAmB,UAAZ7rD,GAAmC,aAAZA,GAAsC,WAAZA,EAE1D,SAASu1S,EAAS1+S,GAChB,SAAIy+S,EAAmBz+S,IAASA,EAAIilP,YAGhCi5D,GAAel+S,MAGf,2EAA2E5D,KAAKkiT,EAAQt+S,KAK9F,SAAS2+S,EAAiB3+S,GACxB,IAAInE,EAAW,GACf,SAAS4jN,EAAQz/M,GACf,GAAqB,IAAjBA,EAAImiB,UAAwC,SAAtBniB,EAAI4B,MAAMgjF,UAAsB5kF,EAAI2L,SAA9D,CAGI+yS,EAAS1+S,IACXnE,EAASgD,KAAKmB,GAEhB,IAAK,IAAIvE,EAAI,EAAGA,EAAIuE,EAAI0P,WAAWvU,OAAQM,IACzCgkN,EAAQz/M,EAAI0P,WAAWjU,KAI3B,OADAgkN,EAAQz/M,GAAOhF,EAAKyU,SACb5T,EAET,SAAS+iT,EAAkBC,GACzB,IAAIC,EAAgBpC,EACpBmC,EAAgBA,GAAiBR,EACjC3B,EAAWmC,EAActlP,UAAU1jD,UACnC6mS,EAAS58N,QAAQ++N,GACjB,IAAK,IAAIpjT,EAAI,EAAGA,EAAIihT,EAASvhT,OAAQM,IAEnC,GADAqjT,EAAiBpC,EAASjhT,GACtBqjT,EAAezmT,SAAS24S,SAC1B,MAGJ,OAAO8N,EAET,SAASC,EAAWF,GAClB,IAAIC,EAAiBF,EAAkBC,GACnCG,EAAgBL,EAAiBG,EAAervS,SAChDqvS,EAAezmT,SAAS4X,cAAgB,kBAAmB6uS,EAC7DG,EAAiBH,EAAeI,cAAeF,GAE/CC,EAAiB,EAAGD,GAGxB,SAASC,EAAiBp4S,EAAKhL,GAS7B,OARIgL,EAAM,EACRA,EAAMhL,EAASV,OAAS,EACf0L,GAAOhL,EAASV,SACzB0L,EAAM,GAEJhL,EAASgL,IACXhL,EAASgL,GAAK+F,QAET/F,EAET,SAASs4S,EAAU5hS,EAAK1hB,GACtB,IAAIgL,GAAO,EACPi4S,EAAiBF,IACrB/iT,EAAWA,GAAY8iT,EAAiBG,EAAervS,SACvD,IAAK,IAAIhU,EAAI,EAAGA,EAAII,EAASV,OAAQM,IAC/BI,EAASJ,KAAO2iT,IAClBv3S,EAAMpL,GAGVoL,GAAO0W,EACPuhS,EAAeI,cAAgBD,EAAiBp4S,EAAKhL,GAEvD,SAAS6jC,IACP,IAAI0/Q,EAAab,IACE,YAAfa,EACFD,GAAW,EAAGR,EAAiBP,EAAe9hT,aACrC+hT,EAAeliT,SAASkjT,QACjCj6Q,IAEA+5Q,GAAW,GAGf,SAAS3wJ,IACP,IAAIx+I,EAAOsuS,IAAWc,EAAab,IAChB,YAAfa,EACFD,EAAU,EAAGR,EAAiBP,EAAe9hT,aAC3B,aAAT0T,GAAsC,SAAfovS,GAAyBZ,EAAY,YACrEc,IAEAH,EAAU,GAGd,SAAS9xJ,IACP8xJ,GAAW,GAEb,SAAS7xJ,IACP,IAAIt9I,EAAOsuS,IAAWc,EAAab,IACtB,aAATvuS,GAAsC,YAAfovS,EACzBE,IACkB,WAATtvS,GAAqBwuS,EAAY,YAC1Cc,EAAM,CAAE1pT,IAAK,SAEbupT,EAAU,GAGd,SAASI,EAAIr5S,GACX,IAAIk5S,EAAab,IACjB,GAAmB,YAAfa,EAA0B,CAC5B,IAAIp/S,EAAM2+S,EAAiBN,EAAe5uS,MAAM,SAAS,GACrDzP,GACFA,EAAI4M,aAGNuyS,EAAUj5S,EAAEgzD,UAAY,EAAI,GAGhC,SAAS9zB,IACPi5Q,EAAengR,KAAK,UAEtB,SAASohR,EAAM1mH,GACbA,EAAOA,GAAQ,GACfylH,EAAengR,KAAK,QAAS,CAC3Bn1B,OAAQq1S,EACRxlH,KAAMA,IAiDV,OAvMAylH,EAAiBrjT,EAAKy/S,cAAc2D,GAyJpCpjT,EAAK0L,GAAG,WAAW,SAAUR,GAC3B,SAASs5S,EAAuBt5S,EAAGw3C,GAC7B+gQ,EAAmBL,IAAmBF,GAAeE,IAGzB,WAA5BE,EAAQF,KAGO,IAAf1gQ,EAAQx3C,IACVA,EAAE44B,iBAGN,IAAI54B,EAAEi8D,qBAGN,OAAQj8D,EAAEqgB,SACV,KAAK,GACHi5R,EAAuBt5S,EAAGw5B,GAC1B,MACF,KAAK,GACH8/Q,EAAuBt5S,EAAGsoJ,GAC1B,MACF,KAAK,GACHgxJ,EAAuBt5S,EAAGmnJ,GAC1B,MACF,KAAK,GACHmyJ,EAAuBt5S,EAAGonJ,GAC1B,MACF,KAAK,GACHloH,IACA,MACF,KAAK,GACL,KAAK,GACL,KAAK,GACHo6Q,EAAuBt5S,EAAGo5S,GAC1B,MACF,KAAK,EACHC,EAAIr5S,GACJA,EAAE44B,iBACF,UAGJ9jC,EAAK0L,GAAG,WAAW,SAAUR,GAC3Bk4S,EAAiBl4S,EAAE6C,OACnBs1S,EAAiBn4S,EAAEwF,WAEd,CAAEqzS,WAAYA,GAGvB,IAAIU,GAAgB,GAChBC,GAAYzB,GAAUxjT,OAAO,CAC/Bi5H,KAAM,SAAUr7H,GACd,IAAIiB,EAAOvH,KACXuH,EAAKgoC,OAAOjpC,GACZA,EAAWiB,EAAKjB,SACZA,EAAS+5Q,OACX94Q,EAAK0iC,MAAMrkC,IAAI,SAAS,GAE1B2B,EAAKqmT,OAAS,IAAI7G,GACdx/S,EAAKsiK,SACPtiK,EAAKiG,QAAQJ,IAAI,OAEnB7F,EAAKsmT,YAAc,IAAInI,IAAU,WAC3Bn+S,EAAK0iC,MAAMtkC,IAAI,cACjB4B,EAAKmW,MAAM,QAAQpT,UAAYtK,KAAKsI,eAGxCf,EAAKsmT,YAAYt2S,OAAShQ,EAAKygT,YAC/BzgT,EAAKiG,QAAQJ,IAAI,aACjB7F,EAAKsmT,YAAYzgT,IAAI,kBACjB9G,EAASwnT,cACXvmT,EAAKiG,QAAQJ,IAAI9G,EAASwnT,cAE5BvmT,EAAKsgT,QAAU5+R,EAAS/S,QAAQ5P,EAASiN,QAAU,IAAM,UACrDhM,EAAKjB,SAASqf,MAChBpe,EAAK6F,IAAI7F,EAAKjB,SAASqf,OAEvBpe,EAAK6F,IAAI7F,EAAKyuB,UAEhBzuB,EAAK6iT,UAAW,GAElBzkS,MAAO,WACL,OAAO3lB,KAAK4tT,QAEdt4S,KAAM,SAAU9F,GAEd,OADAA,EAAWk+S,GAAcl+S,GAAYk+S,GAAcl+S,IAAa,IAAI22S,GAAS32S,GACtEA,EAAS8F,KAAKtV,OAEvBoN,IAAK,SAAUuY,GACb,IAAIpe,EAAOvH,KAEX,OADAuH,EAAKoe,QAAQvY,IAAI7F,EAAK2O,OAAOyP,IAAQvb,OAAO7C,GACrCA,GAETsT,MAAO,SAAUooL,GACf,IACI8qH,EAAWC,EAAaroS,EADxBpe,EAAOvH,KAEX,IAAIijM,IACF+qH,EAAczmT,EAAKymT,aAAezmT,EAAKigE,UAAU/kD,IAAI,GAAG,GAAGurS,aACvDA,GAqBN,OAhBAroS,EAAQpe,EAAK+N,KAAK,KACd/N,EAAKqrC,WACPjtB,EAAMvY,IAAI7F,EAAKqrC,UAAUjtB,SAE3BA,EAAM9Q,MAAK,SAAU6E,GACnB,GAAIA,EAAKpT,SAAS2N,UAEhB,OADA85S,EAAY,MACL,EAELr0S,EAAKizS,WACPoB,EAAYA,GAAar0S,MAGzBq0S,GACFA,EAAUlzS,QAELtT,EApBHymT,EAAYhB,WAAWzlT,IAsB7BW,QAAS,SAAU+lT,EAASC,GAC1B,IAAIxJ,EACA/+R,EAAQ3lB,KAAK2lB,QACbjc,EAAIic,EAAMvc,OACd,MAAOM,IACL,GAAIic,EAAMjc,KAAOukT,EAAS,CACxBtoS,EAAMjc,GAAKwkT,EACX,MAGAxkT,GAAK,IACPg7S,EAAUwJ,EAAQxwS,QACdgnS,GACFA,EAAQn6S,WAAW+iB,YAAYo3R,GAEjCA,EAAUuJ,EAAQvwS,QACdgnS,GACFA,EAAQn6S,WAAW+iB,YAAYo3R,IAGnCwJ,EAAQ9jT,OAAOpK,OAEjBkW,OAAQ,SAAUyP,GAChB,IACIrf,EADAiB,EAAOvH,KAEPmuT,EAAY,GAiBhB,OAhBK/mT,EAASuqB,QAAQhM,KACpBA,EAAQ,CAACA,IAEXve,EAASyN,KAAK8Q,GAAO,SAAUy6B,GACzBA,IACIA,aAAgB8rQ,KACA,kBAAT9rQ,IACTA,EAAO,CAAEt4C,KAAMs4C,IAEjB95C,EAAWc,EAASsB,OAAO,GAAInB,EAAKjB,SAAS4lB,SAAUk0B,GACvDA,EAAKt4C,KAAOxB,EAASwB,KAAOxB,EAASwB,MAAQs4C,EAAKt4C,MAAQP,EAAKjB,SAAS8nT,cAAgB9nT,EAAS4lB,SAAW5lB,EAAS4lB,SAASpkB,KAAO,MACrIs4C,EAAOn3B,EAAS/S,OAAO5P,IAEzB6nT,EAAUrhT,KAAKszC,OAGZ+tQ,GAET76L,UAAW,WACT,IAAI/rH,EAAOvH,KAiBX,OAhBAuH,EAAKoe,QAAQ9Q,MAAK,SAAU6E,EAAMlN,GAChC,IAAIy+B,EACJvxB,EAAKtP,OAAO7C,GACPmS,EAAKuwB,MAAMtkC,IAAI,cAClBslC,EAAe1jC,EAAKmW,MAAM,QACtButB,EAAa0kB,iBAAmBnjD,GAASy+B,EAAattB,WAAWvU,OAAS,EAC5EuhC,GAASM,EAAattB,WAAWnR,IAAQzD,OAAO2Q,EAAKmxS,cAErDlgR,GAASM,GAAc91B,OAAOuE,EAAKmxS,cAErCnxS,EAAK41B,aACLs4Q,GAAYx6S,IAAIsM,OAGpBnS,EAAKsgT,QAAQM,aAAa5gT,EAAKoe,QAAQ/Q,OAAO,aAC9CrN,EAAK+iT,UAAY,KACV/iT,GAET4N,OAAQ,SAAUwQ,GAChB,OAAO3lB,KAAKoN,IAAIuY,GAAO2tG,aAEzBy8B,QAAS,SAAUpqI,GACjB,IAAIpe,EAAOvH,KAEX,OADAuH,EAAKoe,QAAQ/f,IAAI2B,EAAK2O,OAAOyP,GAAOzD,OAAO3a,EAAKoe,QAAQ7B,YACjDvc,EAAK+rH,aAEdtqH,OAAQ,SAAU2c,EAAOnZ,EAAOzD,GAC9B,IACIslT,EAAUC,EAAaC,EADvBhnT,EAAOvH,KAYX,OAVA2lB,EAAQpe,EAAK2O,OAAOyP,GACpB0oS,EAAW9mT,EAAKoe,SACX5c,GAAUyD,EAAQ6hT,EAASjlT,OAAS,IACvCoD,GAAS,GAEPA,GAAS,GAAKA,EAAQ6hT,EAASjlT,SACjCklT,EAAcD,EAAS5hT,MAAM,EAAGD,GAAOsX,UACvCyqS,EAAaF,EAAS5hT,MAAMD,GAAOsX,UACnCuqS,EAASzoT,IAAI0oT,EAAYpsS,OAAOyD,EAAO4oS,KAElChnT,EAAK+rH,aAEdsF,SAAU,SAAUxtH,GAClB,IAAI7D,EAAOvH,KACX,IAAK,IAAIsE,KAAQ8G,EACf7D,EAAK+N,KAAK,IAAMhR,GAAMoB,MAAM0F,EAAK9G,IAEnC,OAAOiD,GAETihD,OAAQ,WACN,IAAIjhD,EAAOvH,KAAMoL,EAAO,GAOxB,OANA7D,EAAK+N,KAAK,KAAKT,MAAK,SAAU6E,GAC5B,IAAIpV,EAAOoV,EAAKpV,OAAQoB,EAAQgU,EAAKhU,QACjCpB,GAAyB,qBAAVoB,IACjB0F,EAAK9G,GAAQoB,MAGV0F,GAETy/S,WAAY,WACV,IAAItjT,EAAOvH,KAAMuT,EAAShM,EAAKsgT,QAAS5pS,EAAOje,KAAKsG,SAAS2X,KAG7D,OAFA1W,EAAKujT,YACLv3S,EAAOu3S,UAAUvjT,GACV,YAAcA,EAAKmtE,IAAM,YAAcntE,EAAKiG,QAAU,KAAOyQ,EAAO,UAAYje,KAAKsG,SAAS2X,KAAO,IAAM,IAA3G,aAAqI1W,EAAKmtE,IAAM,iBAAmBntE,EAAKsmT,YAAc,MAAQtmT,EAAKjB,SAAS2I,MAAQ,IAAMsE,EAAOs3S,WAAWtjT,GAA5O,gBAET+nC,WAAY,WACV,IACIg1E,EADA/8G,EAAOvH,KAqBX,OAnBAuH,EAAKoe,QAAQtiB,KAAK,cAClBkE,EAAKgoC,SACLhoC,EAAKsgT,QAAQv4Q,WAAW/nC,GACxBA,EAAK0iC,MAAMrkC,IAAI,YAAY,GACvB2B,EAAKjB,SAASuJ,OAChBtI,EAAKwnC,IAAI3/B,IAAI7H,EAAKjB,SAASuJ,OAEzBtI,EAAKjB,SAAS4tC,SAChBowE,EAAM/8G,EAAK+gT,UACX/gT,EAAKwnC,IAAI3/B,IAAI,CACX,mBAAoBk1G,EAAI12E,IACxB,qBAAsB02E,EAAIm4C,MAC1B,sBAAuBn4C,EAAIlhE,OAC3B,oBAAqBkhE,EAAI32E,QAGxBpmC,EAAK6C,WACR7C,EAAKymT,YAAc5B,GAAmB,CAAEnjT,KAAM1B,KAEzCA,GAETqhT,eAAgB,WACd,IAAIrhT,EAAOvH,KAAMklT,EAAa39S,EAAKgoC,SAEnC,OADAhoC,EAAKsgT,QAAQ2G,OAAOjnT,GACb29S,GAETsJ,OAAQ,WACN,IAAIjnT,EAAOvH,KACPgsC,EAAOzkC,EAAK4hT,YACZr6Q,EAAWvnC,EAAK+iT,UACpB,IAAKx7Q,GAAYA,EAAS/nC,IAAMilC,EAAKjlC,GAAK+nC,EAAS/sC,IAAMiqC,EAAKjqC,EAS5D,OARAwF,EAAKsgT,QAAQ2G,OAAOjnT,GACpBykC,EAAOzkC,EAAK29S,aACZ39S,EAAK+iT,UAAY,CACfpuS,EAAG8vB,EAAK9vB,EACR7Z,EAAG2pC,EAAK3pC,EACR0E,EAAGilC,EAAKjlC,EACRhF,EAAGiqC,EAAKjqC,IAEH,GAGX6+S,OAAQ,WACN,IAAIl3S,EAEJ,GADAk+S,GAAY5sS,OAAOhb,MACfA,KAAK+iT,UAAW,CAClBmJ,GAAUrC,gBAAkB,GAC5BqC,GAAUrC,gBAAgB5hT,IAAM,GAChCjI,KAAKwuT,SACL9kT,EAAIwiT,GAAUrC,gBAAgBzgT,OAC9B,MAAOM,IACLwiT,GAAUrC,gBAAgBngT,GAAGijC,UAEF,SAAzB3sC,KAAKsG,SAASiN,QAA8C,UAAzBvT,KAAKsG,SAASiN,QACnDvT,KAAK2sC,UAEPu/Q,GAAUrC,gBAAkB,GAE9B,OAAO7pT,QAIX,SAASyuT,GAAgBh8R,GACvB,IAAIq2D,EAAiBp1E,EAAMs1P,EAAat5N,EACpCG,EAAa86E,EAAch7E,EAAcG,EACzC7c,EAAMtsB,KAAKssB,IASf,OARA61D,EAAkBr2D,EAAIq2D,gBACtBp1E,EAAO+e,EAAI/e,KACXs1P,EAAc/1O,EAAI61D,EAAgBkgL,YAAat1P,EAAKs1P,aACpDt5N,EAAczc,EAAI61D,EAAgBp5C,YAAah8B,EAAKg8B,aACpDG,EAAc5c,EAAI61D,EAAgBj5C,YAAan8B,EAAKm8B,aACpD86E,EAAe13F,EAAI61D,EAAgB6hC,aAAcj3G,EAAKi3G,cACtDh7E,EAAe1c,EAAI61D,EAAgBn5C,aAAcj8B,EAAKi8B,cACtDG,EAAe7c,EAAI61D,EAAgBh5C,aAAcp8B,EAAKo8B,cAC/C,CACLrX,MAAOuwO,EAAcn5N,EAAcH,EAAcs5N,EACjDtwO,OAAQiyF,EAAe76E,EAAeH,EAAeg7E,GAGzD,SAAS+jM,GAAoBv6S,GAC3B,IAAI0R,EAAMnc,EACV,GAAIyK,EAAEw6S,eAEJ,IADA9oS,EAAO,8CAA8CxlB,MAAM,KACtDqJ,EAAI,EAAGA,EAAImc,EAAKzc,OAAQM,IAC3ByK,EAAE0R,EAAKnc,IAAMyK,EAAEw6S,eAAe,GAAG9oS,EAAKnc,IAI5C,SAAS4iC,GAAY3jC,EAAIrC,GACvB,IAAIsoT,EAEAC,EACAtgS,EAAOqhI,EAAMpjH,EAAMu2O,EAAQC,EAF3BvwP,EAAMnsB,EAASyD,UAAYxE,EAAWwE,SAG1CzD,EAAWA,GAAY,GACvB,IAAIwoT,EAAgBr8R,EAAI+3F,eAAelkH,EAASg0B,QAAU3xB,GAC1D4lB,EAAQ,SAAUpa,GAChB,IACIuwQ,EAAWxzG,EADX69I,EAAUN,GAAgBh8R,GAE9Bi8R,GAAoBv6S,GACpBA,EAAE44B,iBACF8hR,EAAa16S,EAAE4iG,OACf2tK,EAAYoqC,EACZ/rC,EAAS5uQ,EAAE20P,QACXka,EAAS7uQ,EAAE40P,QAET73F,EADE3rK,EAAW4B,OAAO0nJ,iBACXtpJ,EAAW4B,OAAO0nJ,iBAAiB61H,EAAW,MAAMnpN,iBAAiB,UAErEmpN,EAAUsqC,aAAa99I,OAElC09I,EAAgBjkR,GAAS,eAAev7B,IAAI,CAC1C+zC,SAAU,WACVvV,IAAK,EACLD,KAAM,EACNlV,MAAOs2R,EAAQt2R,MACfC,OAAQq2R,EAAQr2R,OAChBu2R,OAAQ,WACRh0G,QAAS,KACT/pC,OAAQA,IACPzkI,SAASha,EAAI/e,MAChBi3B,GAASlY,GAAK9d,GAAG,sBAAuB63B,GAAM73B,GAAG,mBAAoBi7I,GACrEtpJ,EAASioB,MAAMpa,IAEjBq4B,EAAO,SAAUr4B,GAEf,GADAu6S,GAAoBv6S,GAChBA,EAAE4iG,SAAW83M,EACf,OAAOj/J,EAAKz7I,GAEdA,EAAE23B,OAAS33B,EAAE20P,QAAUia,EACvB5uQ,EAAE43B,OAAS53B,EAAE40P,QAAUia,EACvB7uQ,EAAE44B,iBACFzmC,EAASkmC,KAAKr4B,IAEhBy7I,EAAO,SAAUz7I,GACfu6S,GAAoBv6S,GACpBw2B,GAASlY,GAAK+mB,IAAI,sBAAuBhN,GAAMgN,IAAI,mBAAoBo2G,GACvEg/J,EAAc5zS,SACV1U,EAASspJ,MACXtpJ,EAASspJ,KAAKz7I,IAGlBnU,KAAKkuC,QAAU,WACbvD,GAASmkR,GAAet1Q,OAE1B7O,GAASmkR,GAAen6S,GAAG,uBAAwB4Z,GAGrD,IA6II2gS,GAAsBC,GAAuBC,GAG7CC,GAhJAC,GAAa,CACf3tL,KAAM,WACJ,IAAIp6H,EAAOvH,KACXuH,EAAKoN,GAAG,UAAWpN,EAAKgoT,eAE1BA,aAAc,WACZ,IAAIhoT,EAAOvH,KAAM8jD,EAAS,EAC1B,SAAS0rQ,IACP,IAAIC,EAAYC,EAAYj1D,EAC5B,SAASk1D,EAAYC,EAAUC,EAASC,EAAUC,EAAiBC,EAAWC,GAC5E,IAAIhlR,EAAcilR,EAAcC,EAC5B3N,EAAe4N,EAAY72I,EAAOvtI,EAClCqkR,EAAcC,EAElB,GADAJ,EAAe3oT,EAAKmW,MAAM,SAAWkyS,GACjCM,EAAc,CAIhB,GAHAG,EAAeR,EAAQtlS,cACvB+lS,EAAgBR,EAASvlS,cACzBogB,GAASpjC,EAAKmW,MAAM,WAAWtO,IAAIihT,EAAc9oT,EAAK29S,aAAa6K,GAAmB,IACjFC,EAEH,YADArlR,GAASulR,GAAc9gT,IAAI,UAAW,QAGxCu7B,GAASulR,GAAc9gT,IAAI,UAAW,SACtC67B,EAAe1jC,EAAKmW,MAAM,QAC1ByyS,EAAiB5oT,EAAKmW,MAAM,SAAWkyS,EAAW,KAClDpN,EAAgBv3Q,EAAa,SAAW6kR,GAAqB,EAAThsQ,EACpD0+P,GAAiBiN,GAAcC,EAAaQ,EAAa,SAAWD,GAAM,EAC1EG,EAAanlR,EAAa,SAAW6kR,GACrCv2I,EAAQipI,EAAgB4N,EACxBpkR,EAAO,GACPA,EAAKqkR,GAAgBplR,EAAa,SAAW4kR,GAAW/rQ,EACxD9X,EAAKskR,GAAiB9N,EACtB73Q,GAASulR,GAAc9gT,IAAI48B,GAC3BA,EAAO,GACPA,EAAKqkR,GAAgBplR,EAAa,SAAW4kR,GAAWt2I,EACxDvtI,EAAKskR,GAAiB9N,EAAgBjpI,EACtC5uI,GAASwlR,GAAgB/gT,IAAI48B,IAGjCyuN,EAAUlzP,EAAKmW,MAAM,QACrB+xS,EAAah1D,EAAQuO,YAAcvO,EAAQ/qN,YAC3CggR,EAAaj1D,EAAQ9vI,aAAe8vI,EAAQ9qN,aAC5CggR,EAAY,IAAK,OAAQ,QAAS,WAAYF,EAAY,UAC1DE,EAAY,IAAK,MAAO,SAAU,WAAYD,EAAY,SAE5D,SAASa,IACP,SAASC,EAAcZ,EAAUC,EAASC,EAAUW,EAAcR,GAChE,IAAIS,EACAC,EAASppT,EAAKmtE,IAAM,UAAYk7O,EAAUr4S,EAAShQ,EAAKygT,YAC5Dr9Q,GAASpjC,EAAKmW,SAASvI,OAAO,YAAcw7S,EAAS,YAAcp5S,EAAS,aAAeA,EAAS,aAAeq4S,EAArF,cAAqHe,EAAS,aAAep5S,EAA7I,iCAC9BhQ,EAAKqpT,WAAa,IAAItkR,GAAWqkR,EAAS,IAAK,CAC7CpiS,MAAO,WACLmiS,EAAcnpT,EAAKmW,MAAM,QAAQ,SAAWmyS,GAC5CllR,GAAS,IAAMgmR,GAAQ//L,SAASr5G,EAAS,WAE3Ci1B,KAAM,SAAUr4B,GACd,IAAIolK,EAAOk2I,EAAYC,EAAYlN,EAC/B0C,EAAa39S,EAAK29S,aACtBuK,EAAavK,EAAWkE,SAAWlE,EAAWoE,OAC9CoG,EAAaxK,EAAWmE,SAAWnE,EAAWqE,OAC9C/G,EAAgBj7S,EAAKmW,MAAM,QAAQ,SAAWoyS,GAAqB,EAAThsQ,EAC1D0+P,GAAiBiN,GAAcC,EAAanoT,EAAKmW,MAAM,SAAWkyS,GAAU,SAAWK,GAAM,EAC7F12I,EAAQipI,EAAgBj7S,EAAKmW,MAAM,QAAQ,SAAWoyS,GACtDvoT,EAAKmW,MAAM,QAAQ,SAAWmyS,GAAWa,EAAcv8S,EAAE,QAAUs8S,GAAgBl3I,GAErF3pB,KAAM,WACJjlH,GAAS,IAAMgmR,GAAQpgM,YAAYh5G,EAAS,aAIlDhQ,EAAKiG,QAAQJ,IAAI,UACjBojT,EAAc,IAAK,MAAO,SAAU,IAAK,SACzCA,EAAc,IAAK,OAAQ,QAAS,IAAK,UAEvCjpT,EAAKjB,SAASizG,aACXhyG,EAAKspT,aACRtpT,EAAKspT,YAAa,EAClBN,IACAhpT,EAAKoN,GAAG,SAAS,SAAUR,GACzB,IAAI6pR,EAASz2R,EAAKmW,MAAM,QACxBsgR,EAAOr+O,YAAgC,IAAjBxrC,EAAE23B,QAAU,GAClCkyP,EAAOp+O,WAAwB,GAAXzrC,EAAE43B,OACtByjR,OAEF7kR,GAASpjC,EAAKmW,MAAM,SAAS/I,GAAG,SAAU66S,IAE5CA,OAKFsB,GAAQnD,GAAUjlT,OAAO,CAC3B6lC,SAAU,CACRh7B,OAAQ,MACRu6S,aAAc,SAEhBngB,OAAQ,CAAC2hB,IACTzE,WAAY,WACV,IAAItjT,EAAOvH,KACPuT,EAAShM,EAAKsgT,QACdttL,EAAYhzH,EAAKjB,SAAS2I,KAW9B,OAVA1H,EAAKujT,YACLv3S,EAAOu3S,UAAUvjT,GACQ,qBAAdgzH,EACTA,EAAY,YAAchzH,EAAKmtE,IAAM,iBAAmBntE,EAAKsmT,YAAc,KAAOt6S,EAAOs3S,WAAWtjT,GAAQ,UAEnF,oBAAdgzH,IACTA,EAAYA,EAAUhyH,KAAKhB,IAE7BA,EAAK6iT,UAAW,GAEX,YAAc7iT,EAAKmtE,IAAM,YAAcntE,EAAKiG,QAAU,+CAAiDjG,EAAKwpT,cAAgB,IAAMx2L,EAAY,YAIrJy2L,GAAY,CACdC,gBAAiB,WACfjxT,KAAKmpT,YAAYN,YAAa,EAC9B7oT,KAAKsqT,UAAY,KACjBtqT,KAAK4gT,UAEP2B,SAAU,SAAUx7S,EAAGhF,GACrB,GAAIgF,GAAK,GAAKhF,GAAK,EAAG,CACpB,IAAIiqC,EAAOq4Q,GAAM/0L,gBACjBvoH,EAAIA,GAAK,EAAIA,EAAIilC,EAAKjlC,EAAIA,EAC1BhF,EAAIA,GAAK,EAAIA,EAAIiqC,EAAKjqC,EAAIA,EAG5B,OADA/B,KAAKmpT,YAAYN,YAAa,EACvB7oT,KAAKklT,WAAW,CACrBsE,KAAMziT,EACN0iT,KAAM1nT,EACNgF,EAAGA,EACHhF,EAAGA,IACF6+S,UAEL8B,SAAU,SAAUC,EAAIC,GACtB,IAAIr7S,EAAOvH,KAAMgsC,EAAOzkC,EAAK29S,aAC7B,OAAO39S,EAAKg7S,SAASv2Q,EAAKjlC,EAAI47S,EAAI32Q,EAAKjqC,EAAI6gT,KAK3CsO,GAAgB,GAChBC,GAAS,GAEb,SAAStiQ,GAAUn1C,EAAMtP,GACvB,MAAOsP,EAAM,CACX,GAAIA,IAAStP,EACX,OAAO,EAETsP,EAAOA,EAAKtP,UAGhB,SAASgnT,GAAiBj9S,GACxB,IAAIzK,EAAIwnT,GAAc9nT,OACtB,MAAOM,IAAK,CACV,IAAI+T,EAAQyzS,GAAcxnT,GAAI2nT,EAAY5zS,EAAMirS,cAAcv0S,EAAE6C,QAChE,GAAIyG,EAAMnX,SAASs5E,SAAU,CAC3B,GAAIyxO,IACExiQ,GAAUwiQ,EAAW5zS,IAAUA,EAAMrT,WAAainT,GACpD,SAGJl9S,EAAIsJ,EAAM0uB,KAAK,WAAY,CAAEn1B,OAAQ7C,EAAE6C,SAClC7C,EAAEi8D,sBACL3yD,EAAMgwB,SAKd,SAAS6jR,KACFpC,KACHA,GAAuB,SAAU/6S,GACd,IAAbA,EAAE4iG,QAGNq6M,GAAiBj9S,IAEnBw2B,GAASplC,EAAWwE,UAAU4K,GAAG,mBAAoBu6S,KAGzD,SAASqC,KACFpC,KACHA,GAAwB,WACtB,IAAIzlT,EACJA,EAAIwnT,GAAc9nT,OAClB,MAAOM,IACL8nT,GAAgBN,GAAcxnT,KAGlCihC,GAASplC,EAAW4B,QAAQwN,GAAG,SAAUw6S,KAG7C,SAASsC,KACP,IAAKrC,GAAqB,CACxB,IAAIsC,EAAWnsT,EAAWwE,SAAS++E,gBAC/B6oO,EAAgBD,EAAShiR,YAAakiR,EAAiBF,EAAS/hR,aACpEy/Q,GAAsB,WACf7pT,EAAWwE,SAASoD,KAAOwkT,IAAkBD,EAAShiR,aAAekiR,IAAmBF,EAAS/hR,eACpGgiR,EAAgBD,EAAShiR,YACzBkiR,EAAiBF,EAAS/hR,aAC1BkiR,GAAW/qH,YAGfn8J,GAASplC,EAAW4B,QAAQwN,GAAG,SAAUy6S,KAG7C,SAASoC,GAAgB/zS,GACvB,IAAI6gN,EAAU+lF,GAAMv9S,cAAczE,EAClC,SAASyvT,EAAuBzxC,EAAOt0O,GAErC,IADA,IAAI3hC,EACKV,EAAI,EAAGA,EAAIwnT,GAAc9nT,OAAQM,IACxC,GAAIwnT,GAAcxnT,KAAO+T,EAAO,CAC9BrT,EAAS8mT,GAAcxnT,GAAGU,SAC1B,MAAOA,IAAWA,EAASA,EAAOA,UAC5BA,IAAWqT,GACbyzS,GAAcxnT,GAAG22Q,MAAMA,GAAO5mH,OAAO,EAAG1tH,GAAQY,WAMtDlvB,EAAMnX,SAASo6S,UACZjjS,EAAMwsB,MAAMtkC,IAAI,SAOf8X,EAAMs0S,UAAYzzF,IACpB7gN,EAAM4iQ,OAAM,GAAO6kC,WAAW,CAAE7iT,EAAGob,EAAMs0S,YAAaplR,UACtDmlR,GAAuB,EAAOr0S,EAAMs0S,UAAYzzF,KARlD7gN,EAAMs0S,UAAYt0S,EAAMynS,aAAa7iT,EACjCob,EAAMs0S,UAAYzzF,IACpB7gN,EAAM4iQ,OAAM,GAAM6kC,WAAW,CAAE7iT,EAAG,IAAKsqC,UACvCmlR,GAAuB,EAAMxzF,EAAU7gN,EAAMs0S,cAUrD,SAASC,GAAU5kT,EAAKsM,GACtB,IAAIhQ,EAAwCuoT,EAArChD,EAAS4C,GAAW5C,QAAU,MACrC,GAAI7hT,EACF+jT,GAAOrkT,KAAK4M,OACP,CACLhQ,EAAIynT,GAAO/nT,OACX,MAAOM,IACDynT,GAAOznT,KAAOgQ,GAChBy3S,GAAOlkT,OAAOvD,EAAG,GAIvB,GAAIynT,GAAO/nT,OACT,IAAKM,EAAI,EAAGA,EAAIynT,GAAO/nT,OAAQM,IACzBynT,GAAOznT,GAAGwoT,QACZjD,IACAgD,EAAWd,GAAOznT,IAEpBynT,GAAOznT,GAAGgU,QAAQ7N,MAAMo/S,OAASA,EACjCkC,GAAOznT,GAAGulT,OAASA,EACnBA,IAGJ,IAAIkD,EAAexnR,GAAS,IAAMjxB,EAAKsuS,YAAc,cAAetuS,EAAK+uS,mBAAmB,GACxFwJ,EACFtnR,GAASwnR,GAAc/iT,IAAI,UAAW6iT,EAAShD,OAAS,GAC/CkD,IACTA,EAAa5nT,WAAW+iB,YAAY6kS,GACpC9C,IAAW,GAEbwC,GAAWO,cAAgBnD,EAE7B,IAAI4C,GAAaf,GAAMpoT,OAAO,CAC5BilS,OAAQ,CACNqX,GACAgM,IAEFrvL,KAAM,SAAUr7H,GACd,IAAIiB,EAAOvH,KACXuH,EAAKgoC,OAAOjpC,GACZiB,EAAKqjT,YAAcrjT,EACnBA,EAAKiG,QAAQJ,IAAI,cACb9G,EAASs5E,WACX0xO,KACAG,KACAP,GAAcpkT,KAAKvF,IAEjBjB,EAASo6S,UACX6Q,KACAhqT,EAAKoN,GAAG,QAAQ,WACd68S,GAAgBxxT,UAGpBuH,EAAKoN,GAAG,mBAAmB,SAAUR,GACnC,GAAIA,EAAEwF,UAAYpS,EAAM,CACtB,IAAI8qT,EACAC,EAAW/qT,EAAKygT,YAChBzgT,EAAK2qT,QAAU7C,KACjBgD,EAAkB1nR,GAAS,IAAM2nR,EAAW,cAAe/qT,EAAKkhT,mBAC3D4J,EAAgB,KACnBA,EAAkB1nR,GAAS,YAAc2nR,EAAW,uBAAyBA,EAAW,SAAWA,EAAW,gBAAgB7lR,SAASllC,EAAKkhT,oBAE9Il+Q,EAASnQ,YAAW,WAClBi4R,EAAgBzhM,SAAS0hM,EAAW,MACpC3nR,GAASpjC,EAAKmW,SAASkzG,SAAS0hM,EAAW,SAE7CjD,IAAW,GAEb2C,IAAU,EAAMzqT,OAGpBA,EAAKoN,GAAG,QAAQ,WACdpN,EAAKigE,UAAU3yD,MAAK,SAAU6E,GAC5B,GAAIA,EAAKuwB,MAAMtkC,IAAI,SAEjB,OADA4B,EAAK84Q,OAAM,IACJ,QAIT/5Q,EAASisT,UACXhrT,EAAKwpT,aAAe,eAAiBxpT,EAAKygT,YAAc,gBACxDzgT,EAAKiG,QAAQJ,IAAI,WAAWA,IAAI,UAAUA,IAAI7F,EAAKsiK,QAAU,MAAQ,UAEvEtiK,EAAKs/L,KAAK,QAASvgM,EAASyN,WAC5BxM,EAAKs/L,KAAK,aAAct/L,EAAKmtE,KAC7BntE,EAAKs/L,KAAK,cAAet/L,EAAKirT,aAAejrT,EAAKmtE,IAAM,UAE1D2rM,MAAO,SAAUp2O,GACf,IAAI1iC,EAAOvH,KACX,GAAIuH,EAAK0iC,MAAMtkC,IAAI,WAAaskC,EAAO,CACrC,GAAI1iC,EAAK0iC,MAAMtkC,IAAI,YAAa,CAC9B,IAAIwiK,EAAWk8I,GAAMv9S,cACjBmjC,EACF1iC,EAAK29S,aAAa7iT,GAAK8lK,EAAS9lK,EAEhCkF,EAAK29S,aAAa7iT,GAAK8lK,EAAS9lK,EAGpCkF,EAAKiG,QAAQgH,OAAO,QAASy1B,GAC7B1iC,EAAK0iC,MAAMrkC,IAAI,QAASqkC,GAE1B,OAAO1iC,GAETimC,KAAM,WACJ,IACI9jC,EADAnC,EAAOvH,KAEPiqC,EAAQ1iC,EAAKgoC,SACjB7lC,EAAIwnT,GAAc9nT,OAClB,MAAOM,IACL,GAAIwnT,GAAcxnT,KAAOnC,EACvB,MAMJ,OAHW,IAAPmC,GACFwnT,GAAcpkT,KAAKvF,GAEd0iC,GAETwD,KAAM,WAGJ,OAFAglR,GAAmBzyT,MACnBgyT,IAAU,EAAOhyT,MACVA,KAAKuvC,UAEdu3J,QAAS,WACP+qH,GAAW/qH,WAEb/4L,MAAO,WACL,IAAIxG,EAAOvH,KAKX,OAJKuH,EAAK4kC,KAAK,SAASikC,uBACtB7oE,EAAKyT,SACLg3S,IAAU,EAAOzqT,IAEZA,GAETyT,OAAQ,WACNy3S,GAAmBzyT,MACnBA,KAAKuvC,UAEPD,WAAY,WACV,IAAI/nC,EAAOvH,KAIX,OAHIuH,EAAKjB,SAASosT,UAChB1yT,KAAK0d,MAAM,QAAQf,aAAa,OAAQpV,EAAKjB,SAASosT,UAEjDnrT,EAAKgoC,YAahB,SAASkjR,GAAmBh1S,GAC1B,IAAI/T,EACJA,EAAIwnT,GAAc9nT,OAClB,MAAOM,IACDwnT,GAAcxnT,KAAO+T,GACvByzS,GAAcjkT,OAAOvD,EAAG,GAG5BA,EAAIynT,GAAO/nT,OACX,MAAOM,IACDynT,GAAOznT,KAAO+T,GAChB0zS,GAAOlkT,OAAOvD,EAAG,GArBvBmoT,GAAW/qH,QAAU,WACnB,IAAIp9L,EAAIwnT,GAAc9nT,OACtB,MAAOM,IAAK,CACV,IAAI+T,EAAQyzS,GAAcxnT,GACtB+T,GAASA,EAAMnX,SAASs5E,WAC1BniE,EAAMgwB,OACNyjR,GAAcjkT,OAAOvD,EAAG,MAoB9B,IAAIipT,GAAY,SAAUC,EAAwBvsT,GAChD,SAAUusT,GAA2BvsT,EAAOC,SAASq4C,eAEnD4nI,GAAW,SAAUlgL,EAAQypP,EAAOjjP,GACtC,IAAI4Q,EAAOm1S,EACP/rT,EAAMoQ,EAASpQ,IACfgsT,EAAwB3V,EAAyB72S,GACjDwsT,IACFD,EAAyB/rT,EAAIsL,OAAO0gT,GAAuB,IAE7D,IAAI9zF,EAAa,WACf,GAAIthN,GAASA,EAAM8gO,SAAW9gO,EAAMslS,YAActlS,EAAMq1S,OAAQ,CAC9D,IAAI/qE,EAAkB1hP,EAAOuL,UAAUo2O,qBAAsBt0O,EAAOrN,EAAO0T,UACvE+xB,EAAS,EAAGC,EAAS,EACzB,GAAIg8M,EAAiB,CACnB,IAAIgrE,EAAUlsT,EAAI64C,OAAOhsC,GAAOs/S,EAAqBnsT,EAAI64C,OAAOqoM,GAChEj8M,EAASnlC,KAAKssB,IAAI,EAAG+/R,EAAmB92S,EAAI62S,EAAQ72S,GACpD6vB,EAASplC,KAAKssB,IAAI,EAAG+/R,EAAmB3wT,EAAI0wT,EAAQ1wT,GAEtDob,EAAM4iQ,OAAM,GAAO9hC,QAAQ7qO,EAAMrN,EAAO6rC,IAAM,CAC5C,QACA,SACE,CACF,QACA,QACA,UACCunH,OAAO3tH,EAAQC,KAGlByB,EAAO,WACL/vB,IACFA,EAAM+vB,OACNuxL,IACAl4N,EAAI+pH,SAASvqH,EAAO0T,UAAW,oBAG/B0zB,EAAO,WACLhwB,IACFA,EAAMgwB,OACNokR,GAAW/qH,UACXjgM,EAAI0pH,YAAYlqH,EAAO0T,UAAW,oBAGlCic,EAAS,WACPvY,EACGA,EAAMslS,WACTv1Q,KAIJ/vB,EAAQqyO,EAAMryO,MAAQwL,EAAS/S,OAAO,CACpCpO,KAAM8qT,EAAyB,QAAU,aACzC30S,KAAM,cACNzQ,QAAS,yBACT+F,OAAQ,OACRC,UAAW,SACXC,MAAO,UACPmsE,UAAU,EACV8gO,SAAS,EACTrgC,MAAOsyC,GAAUC,EAAwBvsT,GACzC6tC,OAAQ,EACRvuB,MAAO,EACkB,IAAvBm3R,EAAWz2S,GAAoB,KAAO,CACpCyB,KAAM,UACNosC,OAAQ,UACRvuB,MAAO28R,GAAQJ,kBAAkB77S,IAEnC64S,EAAQH,eAAe14S,EAAQ42S,EAAe52S,OAGlDo4S,EAAYJ,eAAeh4S,EAAQoX,GACnCusD,EAAOi0O,mBAAmB53S,GACtBusT,EACFn1S,EAAM8iC,SAASqyQ,GAAwBhS,SAEvCnjS,EAAM8iC,WAAWqgQ,SAEnBzC,EAAKD,QAAQ73S,EAAQoX,GACrB+vB,IACAszQ,GAAgBjB,sBAAsBx5S,GACtCA,EAAOsO,GAAG,aAAcoqN,GACxB14N,EAAOsO,GAAG,eAAgBoqN,GAC1B14N,EAAOsO,GAAG,WAAY64B,GACtBnnC,EAAOsO,GAAG,aAAc84B,GACxBpnC,EAAOyU,gBAsBT,OApBAzU,EAAOC,SAASwwP,kBAAmB,EACnCzwP,EAAOsO,GAAG,SAAS,YACc,IAA3B2oS,EAAej3S,IAAqBwG,EAAKi3S,UAC3Cj9S,EAAI6lN,iBAAiBlvF,KAAK3wH,EAAKi3S,UAAW9tR,EAAQA,GAElDA,OAGJ3vB,EAAOsO,GAAG,YAAa84B,GACvBpnC,EAAOsO,GAAG,UAAU,WACd8I,IACFA,EAAMzC,SACNyC,EAAQ,UAGmB,IAA3B6/R,EAAej3S,IAAqBwG,EAAKi3S,UAC3Cj9S,EAAI6lN,iBAAiBlvF,KAAK3wH,EAAKi3S,UAAWN,GAAWzF,eAAe13S,IAEpEm9S,GAAWzF,eAAe13S,EAA1Bm9S,GAEK,IAELyP,GAAS,CAAEj9R,OAAQuwJ,IAEvB,SAASz6H,GAAU79C,EAAKgI,GACtB,IACIg0B,EAEA4iJ,EAHAtlL,EAAOvH,KAEPgoT,EAAckE,GAAUlE,YAE5BzgT,EAAKimC,KAAO,SAAUk0G,EAAMj4I,GAC1B,SAASusB,IACHiU,IACFU,GAAS18B,GAAKkH,OAAO,eAAiB6yS,EAAc,YAAc/xS,EAAS,IAAM+xS,EAAc,kBAAoB,IAAM,YACrHv+S,GACFA,KAWN,OAPAlC,EAAKkmC,OACLxD,GAAQ,EACJy3G,EACFmrC,EAAQtiJ,EAASnQ,WAAWpE,EAAQ0rH,GAEpC1rH,IAEKzuB,GAETA,EAAKkmC,KAAO,WACV,IAAIotB,EAAQ5sD,EAAIogD,UAMhB,OALA9jB,EAAS4O,aAAa0zI,GAClBhyH,IAAkD,IAAzCA,EAAMvwD,UAAU4D,QAAQ,aACnC2sD,EAAMtwD,WAAW+iB,YAAYutC,GAE/B5wB,GAAQ,EACD1iC,GAIX,IAAImN,GAAQ,SAAUrO,EAAQypP,GAC5B,IAAI/jM,EACJ1lD,EAAOsO,GAAG,iBAAiB,SAAUR,GACnC43C,EAAWA,GAAY,IAAID,GAASgkM,EAAMryO,MAAMC,MAAM,SAClDvJ,EAAE81B,MACJ8hB,EAASve,KAAKr5B,EAAEutI,MAEhB31F,EAASte,WAIXylR,GAAgB,CAAEx+S,MAAOA,IAEzBmsR,GAAW,SAAUx6R,EAAQypP,EAAOjjP,GACtC,IAAI2kH,EAAUgsL,EAAWn3S,GAMzB,OALImrH,IACF3kH,EAAKi3S,UAAYtyL,EAAU,gBAC3BnrH,EAAO8wB,WAAWrqB,KAAK0kH,EAAU,YAAcnrH,EAAO4P,OAAS,UAAY,IAAM,aAEnFi9S,GAAcx+S,MAAMrO,EAAQypP,GACrB1zE,EAAS/1K,GAAU4sT,GAAOj9R,OAAO3vB,EAAQypP,EAAOjjP,GAAQu3S,GAAOpuR,OAAO3vB,EAAQypP,EAAOjjP,IAE1Fg2R,GAAS,CAAEhC,SAAUA,IAErBsyB,GAAUjH,GAAUxjT,OAAO,CAC7BilS,OAAQ,CAACqX,IACTz2Q,SAAU,CAAE/gC,QAAS,4BACrBq9S,WAAY,WACV,IAAItjT,EAAOvH,KAAMuX,EAAShQ,EAAKygT,YAC/B,MAAO,YAAczgT,EAAKmtE,IAAM,YAAcntE,EAAKiG,QAA5C,qCAAkG+J,EAAlG,oCAAsJA,EAAS,kBAAoBhQ,EAAKI,OAAOJ,EAAK0iC,MAAMtkC,IAAI,SAA9M,gBAETqqC,WAAY,WACV,IAAIzoC,EAAOvH,KAIX,OAHAuH,EAAK0iC,MAAMt1B,GAAG,eAAe,SAAUR,GACrC5M,EAAKmW,QAAQ2wC,UAAUhjD,UAAY9D,EAAKI,OAAOwM,EAAEzO,UAE5C6B,EAAKgoC,UAEd5C,QAAS,WACP,IACI98B,EAAOm8B,EADPzkC,EAAOvH,KAEX6P,EAAQtI,EAAKmW,QAAQ7N,MACrBm8B,EAAOzkC,EAAK4hT,YACZt5S,EAAM89B,KAAO3B,EAAK9vB,EAAI,KACtBrM,EAAM+9B,IAAM5B,EAAK3pC,EAAI,KACrBwN,EAAMo/S,OAAS,UAIfmE,GAASlH,GAAUxjT,OAAO,CAC5Bi5H,KAAM,SAAUr7H,GACd,IAAIiB,EAAOvH,KACXuH,EAAKgoC,OAAOjpC,GACZA,EAAWiB,EAAKjB,SAChBiB,EAAKolT,UAAW,EACZrmT,EAAS2T,UAA+B,IAApBm5S,GAAOC,WAC7B9rT,EAAKoN,GAAG,cAAc,SAAUR,GAC9B,IAAI8F,EAAU1S,EAAK0S,UAAUumC,QAAQ,OACrC,GAAIrsC,EAAEwF,UAAYpS,EAAM,CACtB,IAAI4O,EAAM8D,EAAQtO,KAAKrF,EAAS2T,SAASuzB,OAAOy3Q,YAAY19S,EAAKmW,QAAS,CACxE,QACA,QACA,UAEFzD,EAAQzM,QAAQgH,OAAO,YAAqB,UAAR2B,GACpC8D,EAAQzM,QAAQgH,OAAO,aAAsB,UAAR2B,GACrC8D,EAAQzM,QAAQgH,OAAO,aAAsB,UAAR2B,GACrC8D,EAAQskO,QAAQh3O,EAAKmW,QAASvH,QAE9B8D,EAAQwzB,UAGZlmC,EAAKoN,GAAG,8BAA8B,WACpCpN,EAAK0S,UAAUe,SACfzT,EAAK+rT,SAAW,SAGpB/rT,EAAKs/L,KAAK,QAASvgM,EAASyN,WAAazN,EAAS2T,UAEpDA,QAAS,WAMP,OALKja,KAAKszT,WACRtzT,KAAKszT,SAAW,IAAIH,GAAQ,CAAErrT,KAAM,YACpC22S,EAAYH,mBAAmBt+S,KAAMA,KAAKszT,UAC1CtzT,KAAKszT,SAAS/yQ,YAETvgD,KAAKszT,UAEdhkR,WAAY,WACV,IAAI/nC,EAAOvH,KAAMsG,EAAWiB,EAAKjB,SACjCiB,EAAKgoC,SACAhoC,EAAK6C,WAAa9D,EAASmyB,QAASnyB,EAASoyB,SAChDnxB,EAAKqhT,iBACLrhT,EAAKolC,WAEHrmC,EAAS2N,WACX1M,EAAKsT,SAGTm1B,WAAY,WACV,IAAIzoC,EAAOvH,KACX,SAASuzT,EAAQtpR,GACf1iC,EAAKs/L,KAAK,WAAY58J,GACtB1iC,EAAKiG,QAAQgH,OAAO,WAAYy1B,GAElC,SAASw9B,EAAOx9B,GACd1iC,EAAKs/L,KAAK,UAAW58J,GACrB1iC,EAAKiG,QAAQgH,OAAO,SAAUy1B,GAchC,OAZA1iC,EAAK0iC,MAAMt1B,GAAG,mBAAmB,SAAUR,GACzCo/S,EAAQp/S,EAAEzO,UAEZ6B,EAAK0iC,MAAMt1B,GAAG,iBAAiB,SAAUR,GACvCszD,EAAOtzD,EAAEzO,UAEP6B,EAAK0iC,MAAMtkC,IAAI,aACjB4tT,GAAQ,GAENhsT,EAAK0iC,MAAMtkC,IAAI,WACjB8hE,GAAO,GAEFlgE,EAAKgoC,UAEdv0B,OAAQ,WACNhb,KAAKuvC,SACDvvC,KAAKszT,WACPtzT,KAAKszT,SAASt4S,SACdhb,KAAKszT,SAAW,SAKlBE,GAAWJ,GAAO1qT,OAAO,CAC3B6lC,SAAU,CAAE7oC,MAAO,GACnBi8H,KAAM,SAAUr7H,GACd,IAAIiB,EAAOvH,KACXuH,EAAKgoC,OAAOjpC,GACZiB,EAAKiG,QAAQJ,IAAI,YACZ7F,EAAKjB,SAASsO,SACjBrN,EAAKjB,SAASsO,OAAS,SAAUlP,GAC/B,OAAOiB,KAAKu9B,MAAMx+B,MAIxBmlT,WAAY,WACV,IAAItjT,EAAOvH,KAAM2I,EAAKpB,EAAKmtE,IAAKn9D,EAASvX,KAAKgoT,YAC9C,MAAO,YAAcr/S,EAAK,YAAcpB,EAAKiG,QAAtC,iBAAwE+J,EAAxE,8BAAsHA,EAAtH,gCAA2KA,EAA3K,wBAET+3B,WAAY,WACV,IAAI/nC,EAAOvH,KAGX,OAFAuH,EAAKgoC,SACLhoC,EAAK7B,MAAM6B,EAAKjB,SAASZ,OAClB6B,GAETyoC,WAAY,WACV,IAAIzoC,EAAOvH,KACX,SAASyzT,EAAS/tT,GAChBA,EAAQ6B,EAAKjB,SAASsO,OAAOlP,GAC7B6B,EAAKmW,QAAQ2wC,UAAUhjD,UAAY3F,EAAQ,IAC3C6B,EAAKmW,QAAQE,WAAWA,WAAW/N,MAAM4oB,MAAQ/yB,EAAQ,IAM3D,OAJA6B,EAAK0iC,MAAMt1B,GAAG,gBAAgB,SAAUR,GACtCs/S,EAASt/S,EAAEzO,UAEb+tT,EAASlsT,EAAK0iC,MAAMtkC,IAAI,UACjB4B,EAAKgoC,YAIZmkR,GAAmB,SAAU16R,EAAKrtB,GACpCqtB,EAAItb,QAAQ2wC,UAAU3jD,YAAciB,GAAQqtB,EAAIwiO,YAAc,IAAMxiO,EAAIwiO,YAAY91P,QAAU,IAAM,KAElGiuT,GAAezH,GAAUxjT,OAAO,CAClCilS,OAAQ,CAACqX,IACTz2Q,SAAU,CAAE/gC,QAAS,uBACrBm0H,KAAM,SAAUr7H,GACd,IAAIiB,EAAOvH,KACXuH,EAAKgoC,OAAOjpC,GACZiB,EAAKqM,SAAWtN,EAASsN,SACrBtN,EAASqF,MACXpE,EAAKoE,KAAKrF,EAASqF,MAEjBrF,EAASsQ,OACXrP,EAAKqP,KAAOtQ,EAASsQ,MAEnBtQ,EAASiU,QACXhT,EAAKgT,MAAQjU,EAASiU,OAEpBjU,EAASwB,MACXP,EAAKiG,QAAQJ,IAAI,gBAAkB9G,EAASwB,MAE1CxB,EAASosE,UAAYpsE,EAASosE,QAAU,GAAKpsE,EAASosE,QAAU,KAAOpsE,EAASstT,YAClFrsT,EAAKqsT,aAAc,GAEnBrsT,EAAKiG,QAAQJ,IAAI,aACjB7F,EAAKqsT,aAAc,GAEjBttT,EAASk1P,cACXj0P,EAAKi0P,YAAc,IAAIg4D,IAEzBjsT,EAAKoN,GAAG,SAAS,SAAUR,IACuC,IAA5DA,EAAE6C,OAAO1M,UAAU4D,QAAQ3G,EAAKygT,YAAc,UAChDzgT,EAAKwG,YAIX88S,WAAY,WACV,IAAItjT,EAAOvH,KACPuX,EAAShQ,EAAKygT,YACdpxS,EAAO,GAAIg9S,EAAc,GAAIp4D,EAAc,GAAIq4D,EAAoB,GAWvE,OAVItsT,EAAKqP,OACPA,EAAO,aAAeW,EAAf,OAAsCA,EAAS,KAAOhQ,EAAKqP,KAAO,UAE3Ei9S,EAAoB,sBAAwBtsT,EAAKqM,SAAW,OAASrM,EAAKgT,MAAQ,qBAAuBhT,EAAKgT,MAAQ,KAAO,KACzHhT,EAAKqsT,cACPA,EAAc,gCAAkCr8S,EAAS,wCAEvDhQ,EAAKi0P,cACPA,EAAcj0P,EAAKi0P,YAAYqvD,cAE1B,YAActjT,EAAKmtE,IAAM,YAAcntE,EAAKiG,QAAU,IAAMqmT,EAAoB,wBAA0Bj9S,EAAO,eAAiBW,EAAS,uBAAyBhQ,EAAK0iC,MAAMtkC,IAAI,QAAU,SAAW61P,EAAco4D,EAAtN,2LAETtkR,WAAY,WACV,IAAI/nC,EAAOvH,KAKX,OAJAuqC,EAASnQ,YAAW,WAClB7yB,EAAKwnC,IAAI6hF,SAASrpH,EAAKygT,YAAc,MACrC0L,GAAiBnsT,EAAMA,EAAK0iC,MAAMtkC,IAAI,WACrC,KACI4B,EAAKgoC,UAEdS,WAAY,WACV,IAAIzoC,EAAOvH,KAWX,OAVAuH,EAAK0iC,MAAMt1B,GAAG,eAAe,SAAUR,GACrC5M,EAAKmW,QAAQE,WAAWvS,UAAY8I,EAAEzO,MACtCguT,GAAiBnsT,EAAM4M,EAAEzO,UAEvB6B,EAAKi0P,cACPj0P,EAAKi0P,YAAYxrN,aACjBzoC,EAAKi0P,YAAYvxN,MAAMt1B,GAAG,gBAAgB,SAAUR,GAClDu/S,GAAiBnsT,EAAMA,EAAK0iC,MAAMtkC,IAAI,aAGnC4B,EAAKgoC,UAEdxhC,MAAO,WACL,IAAIxG,EAAOvH,KAIX,OAHKuH,EAAK4kC,KAAK,SAASikC,sBACtB7oE,EAAKyT,SAEAzT,GAETolC,QAAS,WACP,IACI98B,EAAOm8B,EADPzkC,EAAOvH,KAEX6P,EAAQtI,EAAKmW,QAAQ7N,MACrBm8B,EAAOzkC,EAAK4hT,YACZt5S,EAAM89B,KAAO3B,EAAK9vB,EAAI,KACtBrM,EAAM+9B,IAAM5B,EAAK3pC,EAAI,KACrBwN,EAAMo/S,OAAS,SAInB,SAASj0D,GAAyB30P,GAChC,IAAIytT,EAAqB,SAAUztT,GACjC,OAAOA,EAAO4P,OAAS5P,EAAO42O,aAAe52O,EAAO05C,2BAElDg0Q,EAAoB,WACtB,IAAI7jS,EAAY4jS,EAAmBztT,GACnC,OAAOg+S,GAAMr+P,QAAQ91B,GAAWuI,OAE9Bu7R,EAA2B,SAAU54D,GACvCvmP,GAAKumP,GAAe,SAAUM,GAC5BA,EAAal7M,OAAO,EAAG,OAGvByzQ,EAAwB,SAAU74D,GACpC,GAAIA,EAAchyP,OAAS,EAAG,CAC5B,IAAI8qT,EAAY94D,EAAc3uP,MAAM,EAAG,GAAG,GACtCyjB,EAAY4jS,EAAmBztT,GACnC6tT,EAAU31E,QAAQruN,EAAW,SAC7Brb,GAAKumP,GAAe,SAAUM,EAAclvP,GACtCA,EAAQ,GACVkvP,EAAand,QAAQ6c,EAAc5uP,EAAQ,GAAGkR,QAAS,cAK3DqhN,EAAa,SAAUq8B,GACzB44D,EAAyB54D,GACzB64D,EAAsB74D,IAEpBpoP,EAAO,SAAUnG,EAAMsnT,GACzB,IAAIC,EAAehtT,EAASsB,OAAOmE,EAAM,CAAE+G,SAAUmgT,MACjDM,EAAQ,IAAIV,GAAaS,GAY7B,OAXAC,EAAMxnT,KAAOunT,EACTA,EAAa1hP,QAAU,IACzB2hP,EAAMxnI,MAAQzyJ,YAAW,WACvBi6R,EAAMtmT,QACNomT,MACCC,EAAa1hP,UAElB2hP,EAAM1/S,GAAG,SAAS,WAChBw/S,OAEFE,EAAM9zQ,WACC8zQ,GAELtmT,EAAQ,SAAU2tP,GACpBA,EAAa3tP,SAEXmtP,EAAU,SAAUQ,GACtB,OAAOA,EAAa7uP,MAEtB,MAAO,CACLmG,KAAMA,EACNjF,MAAOA,EACPgxN,WAAYA,EACZm8B,QAASA,GAIb,IAAIjlM,GAAU,GACVq+P,GAAe,GACnB,SAASC,GAAsBtqR,GAC7B,IACmDuqR,EAD/CC,EAAmB,2FACnBtsJ,EAAWx9H,GAAS,uBAAuB,IACb,IAA9BD,GAASy+J,mBAGRhhC,IACHA,EAAW5iK,EAAWwE,SAAS8uB,cAAc,QAC7CsvI,EAASxrJ,aAAa,OAAQ,YAC9BpX,EAAWwE,SAASsM,qBAAqB,QAAQ,GAAGC,YAAY6xJ,IAElEqsJ,EAAersJ,EAAStqJ,aAAa,WACjC22S,GAAwC,qBAAjBF,KACzBA,GAAeE,GAEjBrsJ,EAASxrJ,aAAa,UAAWstB,EAAQwqR,EAAmBH,KAE9D,SAASI,GAA4B1M,EAAa/9Q,GAC5C0qR,OAAsC,IAAV1qR,GAC9BU,GAAS,CACPplC,EAAWwE,SAAS++E,gBACpBvjF,EAAWwE,SAAS2J,OACnB68G,YAAYy3L,EAAc,cAGjC,SAAS2M,KACP,IAAK,IAAIjrT,EAAI,EAAGA,EAAIusD,GAAQ7sD,OAAQM,IAClC,GAAIusD,GAAQvsD,GAAGkrT,YACb,OAAO,EAGX,OAAO,EAET,SAASC,KACP,IAAKnqR,GAAS4+J,QAAS,CACrB,IAAIwrH,EAAa,CACf/tT,EAAGxB,EAAW4B,OAAOooH,WACrBxtH,EAAGwD,EAAW4B,OAAOq9G,aAEvBj6E,EAASqqC,aAAY,WACnB,IAAI7tE,EAAIxB,EAAW4B,OAAOooH,WAAYxtH,EAAIwD,EAAW4B,OAAOq9G,YACxDswM,EAAW/tT,IAAMA,GAAK+tT,EAAW/yT,IAAMA,IACzC+yT,EAAa,CACX/tT,EAAGA,EACHhF,EAAGA,GAEL4oC,GAASplC,EAAW4B,QAAQujL,QAAQ,aAErC,KAEL,SAASq0C,IACP,IAAIr1N,EAEAw7S,EADAl5Q,EAAOq4Q,GAAM/0L,gBAEjB,IAAK5lH,EAAI,EAAGA,EAAIusD,GAAQ7sD,OAAQM,IAC9Bw7S,EAAajvP,GAAQvsD,GAAGw7S,aACxBjvP,GAAQvsD,GAAG82C,OAAOyV,GAAQvsD,GAAGpD,SAAS4V,GAAKvV,KAAKssB,IAAI,EAAG+Y,EAAKjlC,EAAI,EAAIm+S,EAAWn+S,EAAI,GAAIkvD,GAAQvsD,GAAGpD,SAASjE,GAAKsE,KAAKssB,IAAI,EAAG+Y,EAAKjqC,EAAI,EAAImjT,EAAWnjT,EAAI,IAG5J4oC,GAASplC,EAAW4B,QAAQwN,GAAG,SAAUoqN,GAE3C,IAAIkgC,GAAS4yD,GAAWnpT,OAAO,CAC7BwpT,OAAO,EACP3jR,SAAU,CACR2F,OAAQ,EACR3gC,OAAQ,OACRu6S,aAAc,QACd7vS,KAAM,SACN5Q,UAAW,CACTqzE,OAAQ,WACN1gF,KAAKmsC,KAAK,SAAU,CAAE/gC,KAAMpL,KAAKwoD,YAEnCz6C,MAAO,WACL/N,KAAK+N,WAIX4zH,KAAM,SAAUr7H,GACd,IAAIiB,EAAOvH,KACXuH,EAAKgoC,OAAOjpC,GACRiB,EAAKsiK,SACPtiK,EAAKiG,QAAQJ,IAAI,OAEnB7F,EAAKiG,QAAQJ,IAAI,UACjB7F,EAAKsmT,YAAYzgT,IAAI,eACrB7F,EAAK0iC,MAAMrkC,IAAI,SAAS,GACpBU,EAASwhB,UACXvgB,EAAKqrC,UAAY,IAAIk+Q,GAAM,CACzBv9S,OAAQ,OACR2gC,OAAQ,UACRhtB,QAAS,EACTD,QAAS,GACTxT,MAAO,SACP0gC,KAAM5sC,EAAKsiK,QAAU,QAAU,MAC/B39I,SAAU,CAAEpkB,KAAM,UAClB6d,MAAOrf,EAASwhB,UAElBvgB,EAAKqrC,UAAUplC,QAAQJ,IAAI,QAC3B7F,EAAKqrC,UAAUxoC,OAAO7C,IAExBA,EAAKoN,GAAG,SAAS,SAAUR,GACzB,IAAI4gT,EAAaxtT,EAAKygT,YAAc,SAChC3D,GAAMhsS,SAASlE,EAAE6C,OAAQ+9S,IAAe1Q,GAAMhsS,SAASlE,EAAE6C,OAAOzM,WAAYwqT,KAC9ExtT,EAAKwG,WAGTxG,EAAKoN,GAAG,UAAU,WAChBpN,EAAKwG,WAEPxG,EAAKoN,GAAG,QAAQ,SAAUR,GACpBA,EAAEwF,UAAYpS,GAChBsqT,GAAW/qH,aAGfv/L,EAAKs/L,KAAK,cAAet/L,EAAKirT,aAAejrT,EAAKmtE,IAAM,SACxDntE,EAAKs/L,KAAK,QAASvgM,EAASyI,OAC5BxH,EAAKqtT,aAAc,GAErBpG,OAAQ,WACN,IAEItJ,EAAYzsR,EAAOvc,EAAG84S,EAFtBztT,EAAOvH,KACP4yC,EAAYrrC,EAAKqrC,UAEjBrrC,EAAKqtT,cACPrtT,EAAK29S,WAAWb,GAAM/0L,iBACtB/nH,EAAK29S,aAAamE,SAAW9hT,EAAK29S,aAAaqE,QAEjDhiT,EAAKgoC,SACL21Q,EAAa39S,EAAK29S,aACd39S,EAAKjB,SAASyI,QAAUxH,EAAKqtT,cAC/Bn8R,EAAQysR,EAAW+P,QACfx8R,EAAQysR,EAAWn+S,IACrBmV,EAAIgpS,EAAWhpS,EAAIvV,KAAKssB,IAAI,EAAGwF,EAAQ,GACvClxB,EAAK29S,WAAW,CACdn+S,EAAG0xB,EACHvc,EAAGA,IAEL84S,GAAc,IAGdpiR,IACFA,EAAUsyQ,WAAW,CAAEn+S,EAAGQ,EAAK29S,aAAaoE,SAAUkF,SACtD/1R,EAAQma,EAAUsyQ,aAAasE,KAAOtE,EAAWj5Q,OAC7CxT,EAAQysR,EAAWn+S,IACrBmV,EAAIgpS,EAAWhpS,EAAIvV,KAAKssB,IAAI,EAAGwF,EAAQysR,EAAWn+S,GAClDQ,EAAK29S,WAAW,CACdn+S,EAAG0xB,EACHvc,EAAGA,IAEL84S,GAAc,IAGdA,GACFztT,EAAKinT,UAGT5F,eAAgB,WACd,IAEgBsM,EAFZ3tT,EAAOvH,KACPklT,EAAa39S,EAAKgoC,SAClBrD,EAAS,EACb,GAAI3kC,EAAKjB,SAASyI,QAAUxH,EAAKqtT,YAAa,CAC5CM,EAAS3tT,EAAKmW,MAAM,QACpB,IAAIyO,EAAOk4R,GAAMr+P,QAAQkvQ,GACzBhQ,EAAW+P,QAAU9oS,EAAKsM,MAC1BysR,EAAWiQ,QAAUhpS,EAAKuM,OAC1BwT,GAAUg5Q,EAAWiQ,QAEnB5tT,EAAKqrC,YACP1G,GAAU3kC,EAAKqrC,UAAUsyQ,aAAanjT,GAExCmjT,EAAWh5Q,QAAUA,EACrBg5Q,EAAWuE,MAAQv9Q,EACnBg5Q,EAAWnjT,GAAKmqC,EAChB,IAAIF,EAAOq4Q,GAAM/0L,gBAGjB,OAFA41L,EAAWhpS,EAAI3U,EAAKjB,SAAS4V,GAAKvV,KAAKssB,IAAI,EAAG+Y,EAAKjlC,EAAI,EAAIm+S,EAAWn+S,EAAI,GAC1Em+S,EAAW7iT,EAAIkF,EAAKjB,SAASjE,GAAKsE,KAAKssB,IAAI,EAAG+Y,EAAKjqC,EAAI,EAAImjT,EAAWnjT,EAAI,GACnEmjT,GAET2F,WAAY,WACV,IAAItjT,EAAOvH,KAAMuT,EAAShM,EAAKsgT,QAASl/S,EAAKpB,EAAKmtE,IAAKn9D,EAAShQ,EAAKygT,YACjE1hT,EAAWiB,EAAKjB,SAChB8uT,EAAa,GAAIC,EAAa,GAAIpmT,EAAO3I,EAAS2I,KAetD,OAdA1H,EAAKujT,YACLv3S,EAAOu3S,UAAUvjT,GACbjB,EAASyI,QACXqmT,EAAa,YAAczsT,EAAK,iBAAmB4O,EAAtC,yBAA+E5O,EAAK,kBAAoB4O,EAAS,UAAYhQ,EAAKI,OAAOrB,EAASyI,OAAlJ,kBAAoLpG,EAAK,kBAAoB4O,EAA7M,6CAA0QA,EAA1Q,iFAEXjR,EAASiJ,MACXN,EAAO,gBAAkB3I,EAASiJ,IAAM,6BAEtB,qBAATN,IACTA,EAAOsE,EAAOs3S,WAAWtjT,IAEvBA,EAAKqrC,YACPyiR,EAAa9tT,EAAKqrC,UAAUi4Q,cAEvB,YAAcliT,EAAK,YAAcpB,EAAKiG,QAAtC,+BAAsFjG,EAAKygT,YAAc,6BAA+BoN,EAAa,YAAczsT,EAAK,iBAAmBpB,EAAKsmT,YAAc,KAAO5+S,EAAO,SAAWomT,EAAvO,gBAETzb,WAAY,SAAU3vQ,GACpB,IAEIqrR,EAEApQ,EAJA39S,EAAOvH,KACP8oF,EAAkBvjF,EAAWwE,SAAS++E,gBAEtCvxE,EAAShQ,EAAKygT,YAElB,GAAI/9Q,IAAU1iC,EAAKqtT,YAwBjB,GAvBAjqR,GAASplC,EAAW4B,QAAQwN,GAAG,UAAU,WACvC,IAAI+sI,EACJ,GAAIn6I,EAAKqtT,YACP,GAAKU,EAQE/tT,EAAKguT,SACRhuT,EAAKguT,OAAShrR,EAASnQ,YAAW,WAChC,IAAI4R,EAAOq4Q,GAAM/0L,gBACjB/nH,EAAKi5C,OAAO,EAAG,GAAG+hQ,SAASv2Q,EAAKjlC,EAAGilC,EAAKjqC,GACxCwF,EAAKguT,OAAS,IACb,SAba,CAClB7zK,GAAO,IAAIhqI,MAAOC,UAClB,IAAIq0B,EAAOq4Q,GAAM/0L,gBACjB/nH,EAAKi5C,OAAO,EAAG,GAAG+hQ,SAASv2Q,EAAKjlC,EAAGilC,EAAKjqC,IACpC,IAAI2V,MAAOC,UAAY+pI,EAAO,KAChC4zK,GAAgB,OAaxBpQ,EAAa39S,EAAK29S,aAClB39S,EAAKqtT,YAAc3qR,EACdA,EAUE,CACL1iC,EAAKiuT,SAAW,CACdt5S,EAAGgpS,EAAWhpS,EACd7Z,EAAG6iT,EAAW7iT,EACd0E,EAAGm+S,EAAWn+S,EACdhF,EAAGmjT,EAAWnjT,GAEhBwF,EAAK+gT,UAAYjD,GAASC,SAAS,KACnC/9S,EAAKmW,MAAM,QAAQ7N,MAAMgjF,QAAU,OACnCqyN,EAAWh5Q,QAAUg5Q,EAAWiQ,QAAU,EAC1CxqR,GAAS,CACPm+C,EACAvjF,EAAWwE,SAAS2J,OACnBk9G,SAASr5G,EAAS,cACrBhQ,EAAKiG,QAAQJ,IAAI,cACjB,IAAI4+B,EAAOq4Q,GAAM/0L,gBACjB/nH,EAAKi5C,OAAO,EAAG,GAAG+hQ,SAASv2Q,EAAKjlC,EAAGilC,EAAKjqC,QAzBxCwF,EAAK+gT,UAAYjD,GAASC,SAAS/9S,EAAKjB,SAAS4tC,QACjD3sC,EAAKmW,MAAM,QAAQ7N,MAAMgjF,QAAU,GACnCqyN,EAAWh5Q,QAAUg5Q,EAAWiQ,QAChCxqR,GAAS,CACPm+C,EACAvjF,EAAWwE,SAAS2J,OACnB68G,YAAYh5G,EAAS,cACxBhQ,EAAKiG,QAAQwN,OAAO,cACpBzT,EAAKi5C,OAAOj5C,EAAKiuT,SAASt5S,EAAG3U,EAAKiuT,SAASnzT,GAAGkgT,SAASh7S,EAAKiuT,SAASzuT,EAAGQ,EAAKiuT,SAASzzT,GAoB1F,OAAOwF,EAAKq5S,UAEdtxQ,WAAY,WACV,IACIxiB,EADAvlB,EAAOvH,KAEXo6B,YAAW,WACT7yB,EAAKiG,QAAQJ,IAAI,MACjB7F,EAAK4kC,KAAK,UACT,GACH5kC,EAAKgoC,SACDhoC,EAAKqrC,WACPrrC,EAAKqrC,UAAUtD,aAEjB/nC,EAAKsT,QACL7a,KAAKy1T,WAAa,IAAInpR,GAAW/kC,EAAKmtE,IAAM,SAAU,CACpDnmD,MAAO,WACLzB,EAAW,CACT5Q,EAAG3U,EAAK29S,aAAahpS,EACrB7Z,EAAGkF,EAAK29S,aAAa7iT,IAGzBmqC,KAAM,SAAUr4B,GACd5M,EAAKi5C,OAAO1zB,EAAS5Q,EAAI/H,EAAE23B,OAAQhf,EAASzqB,EAAI8R,EAAE43B,WAGtDxkC,EAAKoN,GAAG,UAAU,SAAUR,GACrBA,EAAEi8D,sBACL7oE,EAAKwG,WAGTkoD,GAAQnpD,KAAKvF,GACbgtT,IAAsB,IAExB7zO,OAAQ,WACN,OAAO1gF,KAAKmsC,KAAK,SAAU,CAAE/gC,KAAMpL,KAAKwoD,YAE1CxtC,OAAQ,WACN,IACItR,EADAnC,EAAOvH,KAEXuH,EAAKkuT,WAAWvnR,UAChB3mC,EAAKgoC,SACDhoC,EAAKqrC,WACP5yC,KAAK4yC,UAAU53B,SAEjB05S,GAA4BntT,EAAKygT,aAAa,GAC9Ct+S,EAAIusD,GAAQ7sD,OACZ,MAAOM,IACDusD,GAAQvsD,KAAOnC,GACjB0uD,GAAQhpD,OAAOvD,EAAG,GAGtB6qT,GAAsBt+P,GAAQ7sD,OAAS,IAEzCssT,iBAAkB,WAChB,IAAIz2B,EAAMj/R,KAAK0d,QAAQrH,qBAAqB,UAAU,GACtD,OAAO4oR,EAAMA,EAAI/mQ,cAAgB,QAGrC28R,KAEA,IAAIc,GAAa12D,GAAOv2P,OAAO,CAC7Bi5H,KAAM,SAAUr7H,GACdA,EAAW,CACT4tC,OAAQ,EACRjtB,QAAS,GACT1T,OAAQ,OACR4gC,KAAM,SACN1gC,MAAO,SACPq6S,aAAc,QACdv0M,YAAY,EACZzxF,QAAS,CACPhgB,KAAM,SACN6D,KAAM,KACN2Z,OAAQ,MAEVK,MAAO,CACL7d,KAAM,QACNgM,WAAW,EACXF,SAAU,IACVqmS,UAAW,MAGfj6S,KAAKuvC,OAAOjpC,IAEdynS,QAAS,CACP6nB,GAAI,EACJC,UAAW,EACXC,OAAQ,EACRC,cAAe,EACfC,OAAQ,SAAU1vT,GAChB,IAAIwhB,EACAre,EAAWnD,EAASmD,UAAY,aAEpC,SAASwsT,EAAatqT,EAAMgxB,EAAQu5R,GAClC,MAAO,CACLpuT,KAAM,SACN6D,KAAMA,EACN0oC,QAAS6hR,EAAU,UAAY,GAC/BC,QAAS,SAAUhiT,GACjBA,EAAEwF,QAAQ6tD,UAAU,GAAGz5D,QACvBtE,EAASkzB,KAIf,OAAQr2B,EAASwhB,SACjB,KAAK6tS,GAAWE,UACd/tS,EAAU,CACRmuS,EAAa,MAAM,GAAM,GACzBA,EAAa,UAAU,IAEzB,MACF,KAAKN,GAAWG,OAChB,KAAKH,GAAWI,cACdjuS,EAAU,CACRmuS,EAAa,MAAO,GAAG,GACvBA,EAAa,KAAM,IAEjB3vT,EAASwhB,UAAY6tS,GAAWI,eAClCjuS,EAAQhb,KAAKmpT,EAAa,UAAW,IAEvC,MACF,QACEnuS,EAAU,CAACmuS,EAAa,MAAM,GAAM,IACpC,MAEF,OAAO,IAAIh3D,GAAO,CAChBh4O,QAAS,GACT/K,EAAG5V,EAAS4V,EACZ7Z,EAAGiE,EAASjE,EACZ4Q,SAAU,IACVC,UAAW,IACXK,OAAQ,OACR4gC,KAAM,SACN1gC,MAAO,SACPqU,QAASA,EACT/Y,MAAOzI,EAASyI,MAChBkP,KAAM,cACN0H,MAAO,CACL7d,KAAM,QACNgM,WAAW,EACXF,SAAU,IACVqmS,UAAW,IACXtuS,KAAMrF,EAASqF,MAEjBuO,aAAc,WACZla,KAAK6mM,KAAK,cAAe7mM,KAAK2lB,QAAQ,GAAG+uD,MAE3CinO,QAASr1S,EAASq1S,QAClBya,SAAU,WACR3sT,GAAS,MAEV82C,SAASh7C,EAAWwE,SAAS2J,MAAMktS,UAExCjtQ,MAAO,SAAUrtC,EAAUmD,GAKzB,MAJwB,kBAAbnD,IACTA,EAAW,CAAEqF,KAAMrF,IAErBA,EAASmD,SAAWA,EACbksT,GAAWK,OAAO1vT,IAE3B2mF,QAAS,SAAU3mF,EAAUmD,GAM3B,MALwB,kBAAbnD,IACTA,EAAW,CAAEqF,KAAMrF,IAErBA,EAASmD,SAAWA,EACpBnD,EAASwhB,QAAU6tS,GAAWE,UACvBF,GAAWK,OAAO1vT,OAK/B,SAAS01P,GAAmB31P,GAC1B,IAAI2M,EAAO,SAAUnG,EAAMm1J,EAAQmyJ,GACjC,IAAI5jR,EAkDJ,OAjDA1jC,EAAKkC,MAAQlC,EAAKkC,OAAS,IAC3BlC,EAAK0C,IAAM1C,EAAK0C,KAAO1C,EAAKm/C,KACxBn/C,EAAK0C,MACP1C,EAAK4rB,MAAQ1zB,SAAS8H,EAAK4rB,OAAS,IAAK,IACzC5rB,EAAK6rB,OAAS3zB,SAAS8H,EAAK6rB,QAAU,IAAK,KAEzC7rB,EAAK6G,OACP7G,EAAK8Y,MAAQ,CACXuG,SAAUrf,EAAKqf,SACfpkB,KAAM+E,EAAKgb,UAAY,OACvBlC,MAAO9Y,EAAK6G,KACZtI,KAAMyB,EAAKzB,KACXiC,UAAWR,EAAK8iP,WAGf9iP,EAAK0C,KAAQ1C,EAAKib,UACrBjb,EAAKib,QAAU,CACb,CACEnc,KAAM,KACN0oC,QAAS,UACTl2B,QAAS,WACPoyB,EAAIj7B,KAAK,QAAQ,GAAGorE,WAGxB,CACE/0E,KAAM,SACNwS,QAAS,WACPoyB,EAAIxiC,YAKZwiC,EAAM,IAAI0uN,GAAOpyP,GACjB0jC,EAAI57B,GAAG,SAAS,WACdw/S,EAAc5jR,MAEZ1jC,EAAKzB,MACPmlC,EAAI57B,GAAG,cAAc,WACnB3U,KAAKsV,KAAK,KAAKT,MAAK,SAAU6E,GAC5B,IAAIpV,EAAOoV,EAAKpV,OACZA,KAAQuI,EAAKzB,MACfsO,EAAKhU,MAAMmH,EAAKzB,KAAK9G,UAK7BisC,EAAI8lR,SAAWxpT,GAAQ,GACvB0jC,EAAIyxH,OAASA,GAAU,GACvBzxH,EAAMA,EAAIgQ,SAASh7C,EAAWwE,SAAS2J,MAAMktS,SACtCrwQ,GAELoD,EAAQ,SAAU9lC,EAASyoT,EAAgBnC,GAC7C,IAAI5jR,EAOJ,OANAA,EAAMolR,GAAWhiR,MAAM9lC,GAAS,WAC9ByoT,OAEF/lR,EAAI57B,GAAG,SAAS,WACdw/S,EAAc5jR,MAETA,GAEL08C,EAAU,SAAUp/E,EAASyoT,EAAgBnC,GAC/C,IAAI5jR,EAOJ,OANAA,EAAMolR,GAAW1oO,QAAQp/E,GAAS,SAAUo8B,GAC1CqsR,EAAersR,MAEjBsG,EAAI57B,GAAG,SAAS,WACdw/S,EAAc5jR,MAETA,GAELxiC,EAAQ,SAAU5G,GACpBA,EAAO4G,SAELkuP,EAAY,SAAU90P,GACxB,OAAOA,EAAO66J,QAEZk6F,EAAY,SAAU/0P,EAAQ66J,GAChC76J,EAAO66J,OAASA,GAElB,MAAO,CACLhvJ,KAAMA,EACN2gC,MAAOA,EACPs5C,QAASA,EACTl/E,MAAOA,EACPkuP,UAAWA,EACXC,UAAWA,GAIf,IAAIv2P,GAAM,SAAUU,GAClB,IAAIw6R,EAAW,SAAUh0R,GACvB,OAAOg2R,GAAOhC,SAASx6R,EAAQrG,KAAM6M,IAEnC01S,EAAW,SAAUx7S,EAAGhF,GAC1B,OAAOs4S,GAAOkI,SAASl8S,EAAQU,EAAGhF,IAEhC2gT,EAAW,SAAUC,EAAIC,GAC3B,OAAOvI,GAAOqI,SAASr8S,EAAQs8S,EAAIC,IAEjCtnD,EAA6B,WAC/B,OAAON,GAAwB30P,IAE7B+1P,EAAuB,WACzB,OAAOJ,MAET,MAAO,CACL6kC,SAAUA,EACV0hB,SAAUA,EACVG,SAAUA,EACVpnD,2BAA4BA,EAC5Bc,qBAAsBA,IAGtBm6D,GAAW,CAAE5wT,IAAKA,IAElB6wT,GAAS5rR,GAASliC,OAAO,CAC3B6lC,SAAU,CACRkoR,kBAAmB,QACnBC,iBAAkB,QAEpB/0L,KAAM,SAAUr7H,GACdtG,KAAKsG,SAAWc,EAASsB,OAAO,GAAI1I,KAAKuuC,SAAUjoC,IAErDwkT,UAAW,SAAU56R,GACnBA,EAAU29R,YAAYzgT,IAAIpN,KAAKsG,SAASqwT,iBAE1CxO,aAAc,SAAUxiS,GACtB,IAEIixS,EAAYC,EAAW3C,EAAW4C,EAFlCvvT,EAAOvH,KACPsG,EAAWiB,EAAKjB,SAEpBswT,EAAatwT,EAASmwT,kBACtBI,EAAYvwT,EAASowT,iBACrB/wS,EAAM9Q,MAAK,SAAUurC,GACnBA,EAAK5yC,QAAQwN,OAAO47S,GAAY57S,OAAO67S,GAAWzpT,IAAI9G,EAASywT,cAC3D32Q,EAAK2iQ,YACFmR,IACHA,EAAY9zQ,GAEd02Q,EAAW12Q,MAGX8zQ,GACFA,EAAU1mT,QAAQJ,IAAIwpT,GAEpBE,GACFA,EAAStpT,QAAQJ,IAAIypT,IAGzBhM,WAAY,SAAU36R,GACpB,IAAI3oB,EAAOvH,KACPiP,EAAO,GAKX,OAJA1H,EAAK4gT,aAAaj4R,EAAUvK,SAC5BuK,EAAUvK,QAAQ9Q,MAAK,SAAUurC,GAC/BnxC,GAAQmxC,EAAKyqQ,gBAER57S,GAETu/S,OAAQ,aAERl/Q,WAAY,aAEZoiN,SAAU,WACR,OAAO,KAIPslE,GAAiBR,GAAO9tT,OAAO,CACjC6lC,SAAU,CACRooR,eAAgB,aAChBI,aAAc,mBAEhBvI,OAAQ,SAAUt+R,GAChBA,EAAUvK,QAAQ/Q,OAAO,YAAYC,MAAK,SAAU6E,GAClD,IAAIpT,EAAWoT,EAAKpT,SACpBoT,EAAKwrS,WAAW,CACdhpS,EAAG5V,EAAS4V,EACZ7Z,EAAGiE,EAASjE,EACZ0E,EAAGT,EAASS,EACZhF,EAAGuE,EAASvE,IAEV2X,EAAK80S,QACP90S,EAAK80S,aAIX3D,WAAY,SAAU36R,GACpB,MAAO,YAAcA,EAAUwkD,IAAM,mBAAqBxkD,EAAU83R,YAAc,kBAAoBhoT,KAAKuvC,OAAOrf,MAIlH+mS,GAAS7D,GAAO1qT,OAAO,CACzB6lC,SAAU,CACR/gC,QAAS,aACTyQ,KAAM,UAER0jH,KAAM,SAAUr7H,GACd,IACI6lB,EADA5kB,EAAOvH,KAEXuH,EAAKgoC,OAAOjpC,GACZA,EAAWiB,EAAKjB,SAChB6lB,EAAO5kB,EAAKjB,SAAS6lB,KACrB5kB,EAAKoN,GAAG,mBAAmB,SAAUR,GACnCA,EAAE44B,oBAEJxlC,EAAKoN,GAAG,cAAc,SAAUR,GAC9B5M,EAAK4kC,KAAK,QAASh4B,GACnBA,EAAE44B,oBAEAzmC,EAAS+tC,SACX9sC,EAAKiG,QAAQJ,IAAI9G,EAAS+tC,SAExBloB,GACF5kB,EAAKiG,QAAQJ,IAAI,OAAS+e,GAExB7lB,EAASsQ,MACXrP,EAAKqP,KAAKtQ,EAASsQ,OAGvBA,KAAM,SAAUA,GACd,OAAKzN,UAAUC,QAGfpJ,KAAKiqC,MAAMrkC,IAAI,OAAQgR,GAChB5W,MAHEA,KAAKiqC,MAAMtkC,IAAI,SAK1BgnC,QAAS,WACP,IACIuqR,EADAC,EAASn3T,KAAK0d,QAAQE,WAEtBu5S,IACFD,EAAWC,EAAOtnT,MAClBqnT,EAASz+R,MAAQy+R,EAASx+R,OAAS,QAErC14B,KAAKuvC,UAEPs7Q,WAAY,WACV,IACmCxxR,EAG/B+9R,EAJA7vT,EAAOvH,KAAM2I,EAAKpB,EAAKmtE,IAAKn9D,EAAShQ,EAAKygT,YAC1CpxS,EAAOrP,EAAK0iC,MAAMtkC,IAAI,QACtBgG,EAAOpE,EAAK0iC,MAAMtkC,IAAI,QACtB0xT,EAAW,GAEX/wT,EAAWiB,EAAKjB,SAiBpB,OAhBA+yB,EAAQ/yB,EAAS+yB,MACbA,GACFziB,EAAO,OACc,kBAAVyiB,IACTA,EAAQ9zB,EAAW4B,OAAOmvL,aAAej9J,EAAM,GAAKA,EAAM,IAE5DA,EAAQ,mCAAqCA,EAAQ,QAErDA,EAAQ,GAEN1tB,IACFpE,EAAKiG,QAAQJ,IAAI,gBACjBiqT,EAAW,gBAAkB9/S,EAAS,QAAUhQ,EAAKI,OAAOgE,GAAQ,WAEtEiL,EAAOA,EAAOW,EAAS,OAASA,EAAS,KAAOX,EAAO,GACvDwgT,EAAyC,mBAApB9wT,EAASmhE,OAAuB,kBAAoBnhE,EAASmhE,OAAS,IAAM,GAC1F,YAAc9+D,EAAK,YAAcpB,EAAKiG,QAAU,kBAAoB4pT,EAApE,gBAAyGzuT,EAAK,6DAA+DiO,EAAO,aAAeA,EAAO,IAAMyiB,EAAQ,QAAU,IAAMg+R,EAAxO,mBAETrnR,WAAY,WACV,IAAIzoC,EAAOvH,KAAMqS,EAAI9K,EAAK8K,EAAGilT,EAAU/vT,EAAKygT,YAAc,MAC1D,SAASuP,EAAc5rT,GACrB,IAAI6rT,EAAQnlT,EAAE,QAAUilT,EAAS/vT,EAAKmW,SAClC/R,GACG6rT,EAAM,KACTnlT,EAAE,eAAgB9K,EAAKmW,SAASvI,OAAO,gBAAkBmiT,EAAU,aACnEE,EAAQnlT,EAAE,QAAUilT,EAAS/vT,EAAKmW,UAEpC85S,EAAMvoT,KAAK1H,EAAKI,OAAOgE,KAEvB6rT,EAAMx8S,SAERzT,EAAKiG,QAAQgH,OAAO,iBAAkB7I,GAuBxC,OArBApE,EAAK0iC,MAAMt1B,GAAG,eAAe,SAAUR,GACrCojT,EAAcpjT,EAAEzO,UAElB6B,EAAK0iC,MAAMt1B,GAAG,eAAe,SAAUR,GACrC,IAAIyC,EAAOzC,EAAEzO,MACT6R,EAAShQ,EAAKygT,YAClBzgT,EAAKjB,SAASsQ,KAAOA,EACrBA,EAAOA,EAAOW,EAAS,OAASA,EAAS,KAAOhQ,EAAKjB,SAASsQ,KAAO,GACrE,IAAIugT,EAAS5vT,EAAKmW,QAAQE,WACtB65S,EAAUN,EAAO9gT,qBAAqB,KAAK,GAC3CO,GACG6gT,GAAWA,IAAYN,EAAOv5S,aACjC65S,EAAUlyT,EAAWwE,SAAS8uB,cAAc,KAC5Cs+R,EAAOtuT,aAAa4uT,EAASN,EAAOv5S,aAEtC65S,EAAQntT,UAAYsM,GACX6gT,GACTN,EAAO7pS,YAAYmqS,GAErBF,EAAchwT,EAAK0iC,MAAMtkC,IAAI,YAExB4B,EAAKgoC,YAIZmoR,GAAeT,GAAOvuT,OAAO,CAC/Bi5H,KAAM,SAAUr7H,GACd,IAAIiB,EAAOvH,KACXsG,EAAWc,EAASsB,OAAO,CACzBiD,KAAM,YACNw2J,UAAU,EACV31G,OAAQ,MACPlmD,GACHiB,EAAKgoC,OAAOjpC,GACZiB,EAAKiG,QAAQJ,IAAI,gBACb9G,EAAS67J,UACX56J,EAAKiG,QAAQJ,IAAI,aAGrBkiC,WAAY,WACV,IAAI/nC,EAAOvH,KACP6E,EAAQw/S,GAAMnuS,OAAO,QAAS,CAChCpO,KAAM,OACNa,GAAIpB,EAAKmtE,IAAM,UACfloB,OAAQjlD,EAAKjB,SAASkmD,SAExBjlD,EAAKgoC,SACL5E,GAAS9lC,GAAO8P,GAAG,UAAU,SAAUR,GACrC,IAAI8kE,EAAQ9kE,EAAE6C,OAAOiiE,MACrB1xE,EAAK7B,MAAQ,WACX,OAAKuzE,EAAM7vE,OAEA7B,EAAKjB,SAAS67J,SAChBlpF,EAEAA,EAAM,GAJN,MAOX9kE,EAAE44B,iBACEksC,EAAM7vE,QACR7B,EAAK4kC,KAAK,SAAUh4B,MAGxBw2B,GAAS9lC,GAAO8P,GAAG,SAAS,SAAUR,GACpCA,EAAE24B,qBAEJnC,GAASpjC,EAAKmW,MAAM,WAAW/I,GAAG,oBAAoB,SAAUR,GAC9DA,EAAE24B,kBACFjoC,EAAM8yT,QACNxjT,EAAE44B,oBAEJxlC,EAAKmW,QAAQpH,YAAYzR,IAE3BmW,OAAQ,WACN2vB,GAAS3qC,KAAK0d,MAAM,WAAW87B,MAC/B7O,GAAS3qC,KAAK0d,MAAM,UAAU87B,MAC9Bx5C,KAAKuvC,YAILqoR,GAAcjK,GAAUjlT,OAAO,CACjC6lC,SAAU,CACR6/Q,YAAa,SACbnwS,KAAM,SAER4sS,WAAY,WACV,IAAItjT,EAAOvH,KAAMuT,EAAShM,EAAKsgT,QAI/B,OAHAtgT,EAAKiG,QAAQJ,IAAI,aACjB7F,EAAKujT,YACLv3S,EAAOu3S,UAAUvjT,GACV,YAAcA,EAAKmtE,IAAM,YAAcntE,EAAKiG,QAA5C,cAA2EjG,EAAKmtE,IAAM,WAAantE,EAAKjB,SAAS2I,MAAQ,IAAMsE,EAAOs3S,WAAWtjT,GAAjJ,kBAIPswT,GAAWzE,GAAO1qT,OAAO,CAC3B6lC,SAAU,CACR/gC,QAAS,WACTyQ,KAAM,WACNw0B,SAAS,GAEXkvF,KAAM,SAAUr7H,GACd,IAAIiB,EAAOvH,KACXuH,EAAKgoC,OAAOjpC,GACZiB,EAAKoN,GAAG,mBAAmB,SAAUR,GACnCA,EAAE44B,oBAEJxlC,EAAKoN,GAAG,SAAS,SAAUR,GACzBA,EAAE44B,iBACGxlC,EAAKqS,YACRrS,EAAKkrC,SAASlrC,EAAKkrC,cAGvBlrC,EAAKkrC,QAAQlrC,EAAKjB,SAASmsC,UAE7BA,QAAS,SAAUxI,GACjB,OAAK9gC,UAAUC,QAGfpJ,KAAKiqC,MAAMrkC,IAAI,UAAWqkC,GACnBjqC,MAHEA,KAAKiqC,MAAMtkC,IAAI,YAK1BD,MAAO,SAAUukC,GACf,OAAK9gC,UAAUC,OAGRpJ,KAAKyyC,QAAQxI,GAFXjqC,KAAKyyC,WAIhBo4Q,WAAY,WACV,IAAItjT,EAAOvH,KAAM2I,EAAKpB,EAAKmtE,IAAKn9D,EAAShQ,EAAKygT,YAC9C,MAAO,YAAcr/S,EAAK,YAAcpB,EAAKiG,QAAU,wCAA0C7E,EAA1F,gCAAsI4O,EAAS,OAASA,EAAxJ,6BAAqM5O,EAAK,eAAiB4O,EAAS,UAAYhQ,EAAKI,OAAOJ,EAAK0iC,MAAMtkC,IAAI,SAA3Q,iBAETqqC,WAAY,WACV,IAAIzoC,EAAOvH,KACX,SAASyyC,EAAQxI,GACf1iC,EAAKiG,QAAQgH,OAAO,UAAWy1B,GAC/B1iC,EAAKs/L,KAAK,UAAW58J,GAgCvB,OA9BA1iC,EAAK0iC,MAAMt1B,GAAG,eAAe,SAAUR,GACrC5M,EAAKmW,MAAM,MAAME,WAAWxS,KAAO7D,EAAK7D,UAAUyQ,EAAEzO,UAEtD6B,EAAK0iC,MAAMt1B,GAAG,+BAA+B,SAAUR,GACrD5M,EAAK4kC,KAAK,UACVsG,EAAQt+B,EAAEzO,UAEZ6B,EAAK0iC,MAAMt1B,GAAG,eAAe,SAAUR,GACrC,IAAIyC,EAAOzC,EAAEzO,MACT6R,EAAShQ,EAAKygT,YAClB,GAAoB,qBAATpxS,EACT,OAAOrP,EAAKjB,SAASsQ,KAEvBrP,EAAKjB,SAASsQ,KAAOA,EACrBA,EAAOA,EAAOW,EAAS,OAASA,EAAS,KAAOhQ,EAAKjB,SAASsQ,KAAO,GACrE,IAAIugT,EAAS5vT,EAAKmW,QAAQE,WACtB65S,EAAUN,EAAO9gT,qBAAqB,KAAK,GAC3CO,GACG6gT,GAAWA,IAAYN,EAAOv5S,aACjC65S,EAAUlyT,EAAWwE,SAAS8uB,cAAc,KAC5Cs+R,EAAOtuT,aAAa4uT,EAASN,EAAOv5S,aAEtC65S,EAAQntT,UAAYsM,GACX6gT,GACTN,EAAO7pS,YAAYmqS,MAGnBlwT,EAAK0iC,MAAMtkC,IAAI,YACjB8sC,GAAQ,GAEHlrC,EAAKgoC,YAIZuoR,GAAW/xT,QAAQC,KAAKC,MAAMC,QAAQ,mBAEtC6xT,GAAW3E,GAAO1qT,OAAO,CAC3Bi5H,KAAM,SAAUr7H,GACd,IAAIiB,EAAOvH,KACXuH,EAAKgoC,OAAOjpC,GACZA,EAAWiB,EAAKjB,SAChBiB,EAAKiG,QAAQJ,IAAI,YACjB7F,EAAKywT,UAAW,EAChBzwT,EAAKkjT,WAAa,MAClBnkT,EAAS45C,KAAO55C,EAAS45C,MAAQ55C,EAASuN,OACtCvN,EAAS45C,OACX55C,EAASsQ,KAAO,SAElBrP,EAAKoN,GAAG,SAAS,SAAUR,GACzB,IAAIlG,EAAMkG,EAAE6C,OACR/N,EAAO1B,EAAKmW,QAChB,GAAKitB,GAAS3wB,SAAS/Q,EAAMgF,IAAQA,IAAQhF,EAG7C,MAAOgF,GAAOA,IAAQhF,EAChBgF,EAAItF,KAAmC,IAA7BsF,EAAItF,GAAGuF,QAAQ,WAC3B3G,EAAK4kC,KAAK,UACN7lC,EAAS45C,OACX34C,EAAK0wT,WACD9jT,EAAE0yL,MACJt/L,EAAK24C,KAAKv6B,QAAQ,GAAG9K,UAI3B5M,EAAMA,EAAI1D,cAGdhD,EAAKoN,GAAG,WAAW,SAAUR,GAC3B,IAAIo0C,EACc,KAAdp0C,EAAEqgB,SAAwC,UAAtBrgB,EAAE6C,OAAOxM,WAC/B2J,EAAE44B,iBACFxlC,EAAKigE,UAAUr1B,UAAUt9B,MAAK,SAAU6E,GACtC,GAAIA,EAAK8uC,OAEP,OADAD,EAAc7uC,GACP,KAGXnS,EAAK4kC,KAAK,SAAU,CAAE/gC,KAAMm9C,EAAYC,eAG5CjhD,EAAKoN,GAAG,SAAS,SAAUR,GACzB,GAA0B,UAAtBA,EAAE6C,OAAOxM,SAAsB,CACjC,IAAIk9S,EAAWngT,EAAK0iC,MAAMtkC,IAAI,SAC1Bg1B,EAAWxmB,EAAE6C,OAAOtR,MACpBi1B,IAAa+sR,IACfngT,EAAK0iC,MAAMrkC,IAAI,QAAS+0B,GACxBpzB,EAAK4kC,KAAK,eAAgBh4B,QAIhC5M,EAAKoN,GAAG,aAAa,SAAUR,GAC7B,IAAI8F,EAAU1S,EAAK0S,UAAUumC,QAAQ,OACrC,GAAIj5C,EAAK2wT,gBAA8E,IAA7D/jT,EAAE6C,OAAO1M,UAAU4D,QAAQ3G,EAAKygT,YAAc,UAAkB,CACxF,IAAImQ,EAAgB5wT,EAAK4wT,iBAAmB,KACxChiT,EAAM8D,EAAQtO,KAAKwsT,GAAe3qR,OAAOy3Q,YAAY9wS,EAAE6C,OAAQ,CACjE,QACA,QACA,UAEFiD,EAAQzM,QAAQgH,OAAO,YAAqB,UAAR2B,GACpC8D,EAAQzM,QAAQgH,OAAO,aAAsB,UAAR2B,GACrC8D,EAAQzM,QAAQgH,OAAO,aAAsB,UAAR2B,GACrC8D,EAAQskO,QAAQpqO,EAAE6C,OAAQb,QAIhC+hT,YAAa,SAAUxyT,GAIrB,OAHIyD,UAAUC,OAAS,GACrBpJ,KAAKiqC,MAAMrkC,IAAI,cAAeF,GAEzB1F,KAAKiqC,MAAMtkC,IAAI,gBAExBwyT,cAAe,SAAUzyT,GAIvB,OAHIyD,UAAUC,OAAS,GACrBpJ,KAAKiqC,MAAMrkC,IAAI,gBAAiBF,GAE3B1F,KAAKiqC,MAAMtkC,IAAI,kBAExBsyT,SAAU,WACR,IAEI/3Q,EAFA34C,EAAOvH,KACPsG,EAAWiB,EAAKjB,SAEfiB,EAAK24C,OACRA,EAAO55C,EAAS45C,MAAQ,GACpBA,EAAK92C,OACP82C,EAAO,CACLp4C,KAAM,OACN6d,MAAOu6B,GAGTA,EAAKp4C,KAAOo4C,EAAKp4C,MAAQ,OAE3BP,EAAK24C,KAAOj3B,EAAS/S,OAAOgqC,GAAM91C,OAAO7C,GAAMg5C,SAASh5C,EAAKkhT,mBAC7DlhT,EAAK4kC,KAAK,cACV5kC,EAAK24C,KAAK0gQ,SACVr5S,EAAK24C,KAAKvrC,GAAG,UAAU,SAAUR,GAC3BA,EAAEwF,UAAYpS,EAAK24C,MACrB34C,EAAKsT,WAGTtT,EAAK24C,KAAKvrC,GAAG,aAAa,SAAUR,GAClCA,EAAEwF,QAAQgM,QAAQ9Q,MAAK,SAAU6E,GAC/BA,EAAK+tD,OAAO/tD,EAAKhU,UAAY6B,EAAK7B,eAEnCymC,KAAK,QACR5kC,EAAK24C,KAAKvrC,GAAG,UAAU,SAAUR,GAC/B5M,EAAK7B,MAAMyO,EAAEwF,QAAQjU,YAEvB6B,EAAKoN,GAAG,WAAW,SAAUR,GACY,UAAnCA,EAAE6C,OAAOI,QAAQ6rD,eACnB17D,EAAK24C,KAAKzS,UAGdlmC,EAAKs/L,KAAK,YAAY,IAExBt/L,EAAK24C,KAAK1S,OACVjmC,EAAK24C,KAAKglQ,WAAW,CAAEn+S,EAAGQ,EAAK29S,aAAan+S,IAC5CQ,EAAK24C,KAAKq+L,QAAQh3O,EAAKmW,QAASnW,EAAKsiK,QAAU,CAC7C,QACA,SACE,CACF,QACA,WAGJhvJ,MAAO,WACL7a,KAAK0d,MAAM,OAAO7C,SAEpB8xB,QAAS,WACP,IACIlU,EAAO2/R,EADP7wT,EAAOvH,KAAMiO,EAAM1G,EAAKmW,QAAS26S,EAAU9wT,EAAKmW,MAAM,QAASsuB,EAAOzkC,EAAK29S,aACxDoT,EAAe,EAClCC,EAAWtqT,EAAI2P,WACfrW,EAAK2wT,eAAwC,SAAvB3wT,EAAK2wT,gBAC7BI,EAAevzT,SAASs/S,GAAMC,gBAAgBiU,EAAU,iBAAkB,IAAMxzT,SAASs/S,GAAMC,gBAAgBiU,EAAU,gBAAiB,KAG1I9/R,EADE4/R,EACMrsR,EAAKjlC,EAAIs9S,GAAMr+P,QAAQqyQ,GAAS5/R,MAAQ,GAExCuT,EAAKjlC,EAAI,GAEnB,IAAI0rB,EAAMltB,EAAWwE,SASrB,OARI0oB,EAAItlB,OAASslB,EAAIy2K,cAAgBz2K,EAAIy2K,cAAgB,KACvDkvH,EAAa7wT,EAAK29S,aAAanjT,EAAI,EAAI,MAEzC4oC,GAAS4tR,GAAUnpT,IAAI,CACrBqpB,MAAOA,EAAQ6/R,EACfF,WAAYA,IAEd7wT,EAAKgoC,SACEhoC,GAET+nC,WAAY,WACV,IAAI/nC,EAAOvH,KAKX,OAJA2qC,GAAS3qC,KAAK0d,MAAM,QAAQ/I,GAAG,UAAU,SAAUR,GACjD5M,EAAK0iC,MAAMrkC,IAAI,QAASuO,EAAE6C,OAAOtR,OACjC6B,EAAK4kC,KAAK,SAAUh4B,MAEf5M,EAAKgoC,UAEds7Q,WAAY,WACV,IAEIj0S,EAAMjL,EAFNpE,EAAOvH,KAAM2I,EAAKpB,EAAKmtE,IAAKpuE,EAAWiB,EAAKjB,SAAUiR,EAAShQ,EAAKygT,YACpEtiT,EAAQ6B,EAAK0iC,MAAMtkC,IAAI,UAAY,GACvB6yT,EAAc,GAAIC,EAAa,GAAIC,EAAa,GA0BhE,MAzBI,eAAgBpyT,IAClBmyT,GAAc,gBAAkBnyT,EAASoH,WAAa,KAEpDpH,EAASojD,YACX+uQ,GAAc,eAAiBnyT,EAASojD,UAAY,KAElDpjD,EAAS6lB,OACXssS,GAAc,UAAYnyT,EAAS6lB,KAAO,KAExC7lB,EAAS+tC,UACXokR,GAAc,UAAYnyT,EAAS+tC,QAAU,KAE/CqkR,EAAa,UAAY/vT,EAAK,iEAC1BpB,EAAKqS,aACP6+S,GAAc,wBAEhB7hT,EAAOtQ,EAASsQ,KACZA,GAAiB,UAATA,IACVA,EAAOW,EAAS,OAASA,EAAS,KAAOjR,EAASsQ,MAEpDjL,EAAOpE,EAAK0iC,MAAMtkC,IAAI,SAClBiR,GAAQjL,KACV6sT,EAAc,YAAc7vT,EAAK,iBAAmB4O,EAAS,OAASA,EAAxD,iDAAyH5O,EAAK,uDAAkE,UAATiO,EAAmB,aAAeA,EAAO,SAAW,aAAeW,EAAS,gBAAkB5L,GAAQiL,EAAO,IAAM,IAAMjL,EAAO,IAAvT,kBACdpE,EAAKiG,QAAQJ,IAAI,aAEZ,YAAczE,EAAK,YAAcpB,EAAKiG,QAAtC,gBAAuE7E,EAAK,gBAAkB4O,EAAS,mBAAqBhQ,EAAKI,OAAOjC,GAAO,GAAS,kBAAoB+yT,EAAa,iBAAmBlxT,EAAKI,OAAOrB,EAASmtG,aAAe,OAASilN,EAAaF,EAAc,UAE7R9yT,MAAO,SAAUA,GACf,OAAIyD,UAAUC,QACZpJ,KAAKiqC,MAAMrkC,IAAI,QAASF,GACjB1F,OAELA,KAAKiqC,MAAMtkC,IAAI,aACjB3F,KAAKiqC,MAAMrkC,IAAI,QAAS5F,KAAK0d,MAAM,OAAOhY,OAErC1F,KAAKiqC,MAAMtkC,IAAI,WAExBgzT,iBAAkB,SAAUhzS,EAAOizS,GACjC,IAAIrxT,EAAOvH,KACX,GAAqB,IAAjB2lB,EAAMvc,OAAV,CAIA,IAAIJ,EAAS,SAAUtD,EAAOqJ,GAC5B,OAAO,WACLxH,EAAK4kC,KAAK,aAAc,CACtBp9B,MAAOA,EACPrJ,MAAOA,MAIT6B,EAAK24C,KACP34C,EAAK24C,KAAKv6B,QAAQ3K,SAElBzT,EAAK24C,KAAOj3B,EAAS/S,OAAO,CAC1BpO,KAAM,OACN0F,QAAS,gBACT+F,OAAQ,SACPnJ,OAAO7C,GAAMg5C,WAElBn5C,EAASyN,KAAK8Q,GAAO,SAAUy6B,GAC7B74C,EAAK24C,KAAK9yC,IAAI,CACZzB,KAAMy0C,EAAKrxC,MACXQ,IAAK6wC,EAAKy4Q,WACV/zT,MAAO8zT,EACPprT,QAAS,qBACT2Q,QAASnV,EAAOo3C,EAAK16C,MAAO06C,EAAKrxC,YAGrCxH,EAAK24C,KAAKozE,YACV/rH,EAAKuxT,WACLvxT,EAAK24C,KAAKvrC,GAAG,UAAU,SAAUR,GAC3BA,EAAEwF,QAAQvP,WAAa7C,EAAK24C,OAC9B/rC,EAAE24B,kBACFvlC,EAAKsT,QACLtT,EAAKuxT,eAGTvxT,EAAK24C,KAAKvrC,GAAG,UAAU,WACrBpN,EAAKsT,WAEP,IAAIouS,EAAO1hT,EAAK29S,aAAan+S,EAC7BQ,EAAK24C,KAAKglQ,WAAW,CACnBn+S,EAAGkiT,EACHO,KAAM,EACNP,KAAMA,IAER1hT,EAAK24C,KAAKvT,UACVplC,EAAK24C,KAAK0gQ,SACVr5S,EAAK24C,KAAK1S,OACVjmC,EAAK24C,KAAKq+L,QAAQh3O,EAAKmW,QAASnW,EAAKsiK,QAAU,CAC7C,QACA,SACE,CACF,QACA,eAvDAtiK,EAAKuxT,YA0DTA,SAAU,WACJ94T,KAAKkgD,MACPlgD,KAAKkgD,KAAKzS,QAGduC,WAAY,WACV,IAAIzoC,EAAOvH,KACXuH,EAAK0iC,MAAMt1B,GAAG,gBAAgB,SAAUR,GAClC5M,EAAKmW,MAAM,OAAOhY,QAAUyO,EAAEzO,QAChC6B,EAAKmW,MAAM,OAAOhY,MAAQyO,EAAEzO,UAGhC6B,EAAK0iC,MAAMt1B,GAAG,mBAAmB,SAAUR,GACzC5M,EAAKmW,MAAM,OAAO9D,SAAWzF,EAAEzO,SAEjC6B,EAAK0iC,MAAMt1B,GAAG,sBAAsB,SAAUR,GAC5C,IAAI4kT,EAAgBxxT,EAAKmW,MAAM,UAC3BnG,EAAShQ,EAAKygT,YAAatiT,EAAQyO,EAAEzO,MACzC2+S,GAAMj1S,IAAI2pT,EAAe,UAAqB,SAAVrzT,EAAmB,OAAS,IAChE2+S,GAAMxmL,YAAYk7L,EAAexhT,EAAS,cAAyB,OAAV7R,GACzD2+S,GAAMxmL,YAAYk7L,EAAexhT,EAAS,YAAuB,SAAV7R,GACvD2+S,GAAMxmL,YAAYk7L,EAAexhT,EAAS,UAAqB,UAAV7R,GACrD6B,EAAKiG,QAAQgH,OAAO,aAAwB,SAAV9O,GAClC6B,EAAKolC,aAEP03Q,GAAM1vS,GAAGpN,EAAKmW,MAAM,UAAW,cAAc,WAC3CnW,EAAK0S,UAAUwzB,UAEjBlmC,EAAKoN,GAAG,UAAU,SAAUR,GACtB5M,EAAK24C,MAAQ34C,EAAK24C,KAAK6iQ,YACzB5uS,EAAE24B,kBACFvlC,EAAKuxT,eAGT,IAAIE,EAAW,SAAUlkT,EAAKorC,GACxBA,GAAQA,EAAKv6B,QAAQvc,OAAS,GAChC82C,EAAKv6B,QAAQlD,GAAG3N,GAAK,GAAG+F,SAgB5B,OAbAtT,EAAKoN,GAAG,WAAW,SAAUR,GAC3B,IAAIqgB,EAAUrgB,EAAEqgB,QACU,UAAtBrgB,EAAE6C,OAAOxM,WACPgqB,IAAYsjS,GAAS3qR,MACvBh5B,EAAE44B,iBACFxlC,EAAK4kC,KAAK,gBACV6sR,EAAS,EAAGzxT,EAAK24C,OACR1rB,IAAYsjS,GAAS5qR,KAC9B/4B,EAAE44B,iBACFisR,GAAU,EAAGzxT,EAAK24C,WAIjB34C,EAAKgoC,UAEdv0B,OAAQ,WACN2vB,GAAS3qC,KAAK0d,MAAM,QAAQ87B,MACxBx5C,KAAKkgD,MACPlgD,KAAKkgD,KAAKllC,SAEZhb,KAAKuvC,YAIL0pR,GAAWlB,GAASrvT,OAAO,CAC7Bi5H,KAAM,SAAUr7H,GACd,IAAIiB,EAAOvH,KACXsG,EAASoH,YAAa,EAClBpH,EAASo+K,WACXp+K,EAASsQ,KAAO,QAElBrP,EAAKgoC,OAAOjpC,GACZiB,EAAKiG,QAAQJ,IAAI,YACjB7F,EAAKoN,GAAG,2BAA2B,WACjCpN,EAAK2xT,aAAa3xT,EAAK7B,aAG3BwzT,aAAc,SAAUxzT,GACtB,IAAI2yT,EAAUr4T,KAAK0d,MAAM,QACrBzP,EAAMoqT,EAAUA,EAAQhiT,qBAAqB,KAAK,GAAK,KAC3D,GAAIpI,EACF,IACEA,EAAI4B,MAAM6M,WAAahX,EACvB,MAAOw1B,MAIb8U,WAAY,WACV,IAAIzoC,EAAOvH,KAMX,OALAuH,EAAK0iC,MAAMt1B,GAAG,gBAAgB,SAAUR,GAClC5M,EAAK0iC,MAAMtkC,IAAI,aACjB4B,EAAK2xT,aAAa/kT,EAAEzO,UAGjB6B,EAAKgoC,YAIZ4pR,GAAclC,GAAOvuT,OAAO,CAC9Bw6S,UAAW,WACT,IAAI37S,EAAOvH,KAAMsG,EAAWiB,EAAKjB,SAEjC,GADAiB,EAAKiG,QAAQJ,IAAI,UACZ7F,EAAKkW,MAsBRlW,EAAKkW,MAAM+vB,WAtBI,CACf,IAAI4rR,EAAgB9yT,EAASmX,MACzB27S,EAActxT,OAChBsxT,EAAgB,CACd7lT,OAAQ,OACRoS,MAAOyzS,IAGXA,EAAcn7S,KAAOm7S,EAAcn7S,MAAQ,SAC3Cm7S,EAAc7G,SAAU,EACxB6G,EAAcx5O,UAAW,EACzBw5O,EAAcna,UAAW,EACzB13S,EAAKkW,MAAQ,IAAIo0S,GAAWuH,GAAezkT,GAAG,QAAQ,WACpDpN,EAAKiG,QAAQwN,OAAO,aACnBrG,GAAG,UAAU,SAAUR,GACxBA,EAAE24B,kBACFvlC,EAAKsT,QACLtT,EAAK4V,eACJ/S,OAAO7C,GAAMg5C,SAASh5C,EAAKkhT,mBAC9BlhT,EAAKkW,MAAM0uB,KAAK,QAChB5kC,EAAKkW,MAAMmjS,SAIb,IAAIyY,EAAU,CACZ,QACA,QACA,SAEEC,EAAU,CACZ,QACA,QACA,QACA,QACA,QACA,SAEEnjT,EAAM5O,EAAKkW,MAAMwnS,YAAY19S,EAAKmW,QAASpX,EAASizT,eAAiBhyT,EAAKsiK,QAAUwvJ,EAAUC,IAClG/xT,EAAKkW,MAAMjQ,QAAQgH,OAAO,QAA4B,MAAnB2B,EAAIwZ,QAAQ,IAC/CpoB,EAAKkW,MAAMjQ,QAAQgH,OAAO,MAA0B,MAAnB2B,EAAIwZ,QAAQ,IAC7C,IAAI0sI,EAA6B,MAArBlmJ,EAAIwZ,OAAO,EAAG,GAC1BpoB,EAAKkW,MAAMjQ,QAAQgH,OAAO,UAAW6nJ,GACrC90J,EAAKkW,MAAMjQ,QAAQgH,OAAO,MAAO6nJ,GACjC90J,EAAKkW,MAAM8gO,QAAQh3O,EAAKmW,QAASvH,IAEnCgH,UAAW,WACT,IAAI5V,EAAOvH,KACPuH,EAAKkW,OACPlW,EAAKkW,MAAMgwB,QAGf6B,WAAY,WACV,IAAI/nC,EAAOvH,KAYX,OAXAuH,EAAKs/L,KAAK,YAAY,GACtBt/L,EAAKoN,GAAG,SAAS,SAAUR,GACrBA,EAAEwF,UAAYpS,IACZA,EAAKkW,OAASlW,EAAKkW,MAAMslS,UAC3Bx7S,EAAK4V,aAEL5V,EAAK27S,YACL37S,EAAKkW,MAAM5C,QAAQ1G,EAAE0yL,WAIpBt/L,EAAKgoC,UAEdv0B,OAAQ,WAKN,OAJIhb,KAAKyd,QACPzd,KAAKyd,MAAMzC,SACXhb,KAAKyd,MAAQ,MAERzd,KAAKuvC,YAIZwvP,GAAQ9nR,EAASpQ,IACjB2yT,GAAcL,GAAYzwT,OAAO,CACnCi5H,KAAM,SAAUr7H,GACdtG,KAAKuvC,OAAOjpC,GACZtG,KAAKwN,QAAQJ,IAAI,YACjBpN,KAAKwN,QAAQJ,IAAI,gBAEnBmN,MAAO,SAAUA,GACf,OAAIA,GACFva,KAAK6c,OAAStC,EACdva,KAAK0d,MAAM,WAAW7N,MAAMu0K,gBAAkB7pK,EACvCva,MAEFA,KAAK6c,QAEdO,WAAY,WAGV,OAFApd,KAAK6c,OAAS,KACd7c,KAAK0d,MAAM,WAAW7N,MAAMu0K,gBAAkB,KACvCpkL,MAET6qT,WAAY,WACV,IAAItjT,EAAOvH,KAAM2I,EAAKpB,EAAKmtE,IAAKn9D,EAAShQ,EAAKygT,YAAar8S,EAAOpE,EAAK0iC,MAAMtkC,IAAI,QAC7EiR,EAAOrP,EAAKjB,SAASsQ,KAAOW,EAAS,OAASA,EAAS,KAAOhQ,EAAKjB,SAASsQ,KAAO,GACnFyiB,EAAQ9xB,EAAKjB,SAAS+yB,MAAQ,mCAAqC9xB,EAAKjB,SAAS+yB,MAAQ,OAAS,GAClGg+R,EAAW,GAKf,OAJI1rT,IACFpE,EAAKiG,QAAQJ,IAAI,gBACjBiqT,EAAW,gBAAkB9/S,EAAS,QAAUhQ,EAAKI,OAAOgE,GAAQ,WAE/D,YAAchD,EAAK,YAAcpB,EAAKiG,QAAtC,6HAAoLoJ,EAAO,aAAeA,EAAO,IAAMyiB,EAAQ,QAAU,IAAM,aAAe1wB,EAAK,oBAAsB4O,EAAS,mBAAqB8/S,EAAvT,yCAAkX9/S,EAAlX,gDAAkbA,EAAlb,8BAET+3B,WAAY,WACV,IAAI/nC,EAAOvH,KAAMy5T,EAAiBlyT,EAAKjB,SAAS6X,QAWhD,OAVA5W,EAAKoN,GAAG,SAAS,SAAUR,GACrBA,EAAE0yL,MAAuB,SAAf1yL,EAAE0yL,KAAKhjM,KAGjBsQ,EAAEwF,UAAYpS,GAASw3R,GAAM1hR,UAAUlJ,EAAE6C,OAAQ,IAAMzP,EAAKygT,YAAc,UAC5E7zS,EAAEgmE,2BACFs/O,EAAelxT,KAAKhB,EAAM4M,cAGvB5M,EAAKjB,SAAS6X,QACd5W,EAAKgoC,YAIZmqR,GAAW3zT,QAAQC,KAAKC,MAAMC,QAAQ,sBAEtCyzT,GAAcvG,GAAO1qT,OAAO,CAC9B6lC,SAAU,CAAE/gC,QAAS,sBACrBm0H,KAAM,SAAUr7H,GACdtG,KAAKuvC,OAAOjpC,IAEdgpC,WAAY,WACV,IAEIsqR,EAAKC,EAAYC,EAAaC,EAAWC,EAFzCzyT,EAAOvH,KACPua,EAAQhT,EAAKgT,QAMjB,SAASmlC,EAAOzxC,EAAKomB,GACnB,IACInY,EAAG7Z,EADHy8C,EAAMulQ,GAAM3kQ,OAAOzxC,GAMvB,OAJAiO,EAAImY,EAAM6qB,MAAQJ,EAAI5iC,EACtB7Z,EAAIgyB,EAAM8qB,MAAQL,EAAIz8C,EACtB6Z,EAAIvV,KAAKssB,IAAI,EAAGtsB,KAAKC,IAAIsV,EAAIjO,EAAIyhC,YAAa,IAC9CrtC,EAAIsE,KAAKssB,IAAI,EAAGtsB,KAAKC,IAAIvE,EAAI4L,EAAI0hC,aAAc,IACxC,CACLzzB,EAAGA,EACH7Z,EAAGA,GAGP,SAAS43T,EAAYL,EAAKM,GACxB,IAAIt0R,GAAO,IAAMg0R,EAAI73T,GAAK,IAC1BsiT,GAAMj1S,IAAI0qT,EAAa,CAAElsR,IAAW,IAANhI,EAAY,MACrCs0R,GACH7V,GAAMj1S,IAAI4qT,EAAY,CACpBrsR,KAAMisR,EAAIj4T,EAAI,IACdisC,IAAK,IAAMgsR,EAAI/zT,EAAI,MAGvBk0T,EAAUlqT,MAAM6M,WAAag9S,GAAS,CACpC/3T,EAAG,IACHkE,EAAG,IACH9D,EAAG63T,EAAI73T,IACN88E,QACHt3E,EAAKgT,QAAQzM,MAAM,CACjBnM,EAAGi4T,EAAIj4T,EACPkE,EAAG+zT,EAAI/zT,EACP9D,EAAG63T,EAAI73T,IAGX,SAASo4T,EAAyBhmT,GAChC,IAAI2qC,EACJA,EAAMY,EAAOq6Q,EAAW5lT,GACxBylT,EAAIj4T,EAAY,IAARm9C,EAAI5iC,EACZ09S,EAAI/zT,EAAkB,KAAb,EAAIi5C,EAAIz8C,GACjB43T,EAAYL,GACZryT,EAAK4kC,KAAK,UAEZ,SAASiuR,EAAUjmT,GACjB,IAAI2qC,EACJA,EAAMY,EAAOm6Q,EAAY1lT,GACzBylT,EAAMr/S,EAAMo0R,QACZirB,EAAI73T,EAAkB,KAAb,EAAI+8C,EAAIz8C,GACjB43T,EAAYL,GAAK,GACjBryT,EAAK4kC,KAAK,UAlDZ0tR,EAAatyT,EAAKmW,MAAM,KACxBo8S,EAAcvyT,EAAKmW,MAAM,MACzBq8S,EAAYxyT,EAAKmW,MAAM,MACvBs8S,EAAazyT,EAAKmW,MAAM,OAiDxBnW,EAAK8yT,SAAW,WACdT,EAAMr/S,EAAMo0R,QACZsrB,EAAYL,IAEdryT,EAAKgoC,SACLhoC,EAAK+yT,cAAgB,IAAIhuR,GAAW/kC,EAAKmtE,IAAM,MAAO,CACpDnmD,MAAO4rS,EACP3tR,KAAM2tR,IAER5yT,EAAKgzT,aAAe,IAAIjuR,GAAW/kC,EAAKmtE,IAAM,KAAM,CAClDnmD,MAAO6rS,EACP5tR,KAAM4tR,IAER7yT,EAAK8yT,YAEPphB,IAAK,WACH,OAAOj5S,KAAKua,QAAQm0R,SAEtBhpS,MAAO,SAAUA,GACf,IAAI6B,EAAOvH,KACX,IAAImJ,UAAUC,OAMZ,OAAO7B,EAAKgT,QAAQskE,QALpBt3E,EAAKgT,QAAQzM,MAAMpI,GACf6B,EAAKizT,WACPjzT,EAAK8yT,YAMX9/S,MAAO,WAIL,OAHKva,KAAK6c,SACR7c,KAAK6c,OAAS68S,MAET15T,KAAK6c,QAEdguS,WAAY,WACV,IAGI4P,EAHAlzT,EAAOvH,KACP2I,EAAKpB,EAAKmtE,IACVn9D,EAAShQ,EAAKygT,YAEd0S,EAAQ,0GACZ,SAASC,IACP,IAAIjxT,EAAG1E,EAAc41T,EAAgBC,EAA3B5rT,EAAO,GAGjB,IAFA2rT,EAAiB,kFACjBC,EAAYH,EAAMr6T,MAAM,KACnBqJ,EAAI,EAAG1E,EAAI61T,EAAUzxT,OAAS,EAAGM,EAAI1E,EAAG0E,IAC3CuF,GAAQ,eAAiBsI,EAAjB,sCAAuE,IAAMvS,EAAI,KAAO41T,EAAiBC,EAAUnxT,GAAK,gBAAkBmxT,EAAUnxT,EAAI,GAAxJ,SAA6KkxT,EAAiBC,EAAUnxT,GAAK,gBAAkBmxT,EAAUnxT,EAAI,GAA7O,YAEV,OAAOuF,EAET,IAAI6rT,EAAkB,uCAAyCJ,EAAzC,2CAAmGA,EAAQ,KAEjI,OADAD,EAAU,YAAc9xT,EAAK,cAAgB4O,EAAS,yBAA2BujT,EAAkB,KAAOH,IAAyB,YAAchyT,EAAK,eAAiB4O,EAA7J,qCACH,YAAc5O,EAAK,YAAcpB,EAAKiG,QAAtC,cAAqE7E,EAAK,eAAiB4O,EAA3F,+BAA0IA,EAA1I,qCAA+LA,EAA/L,kCAAiP5O,EAAK,gBAAkB4O,EAAxQ,sCAA8TA,EAA9T,wDAAqZkjT,EAAU,YAItaM,GAAW3H,GAAO1qT,OAAO,CAC3Bi5H,KAAM,SAAUr7H,GACd,IAAIiB,EAAOvH,KACXsG,EAAWc,EAASsB,OAAO,CACzBgwB,OAAQ,IACR/sB,KAAM,qBACNw2J,UAAU,EACV31G,OAAQ,MACPlmD,GACHiB,EAAKgoC,OAAOjpC,GACZiB,EAAKiG,QAAQJ,IAAI,YACb9G,EAAS67J,UACX56J,EAAKiG,QAAQJ,IAAI,aAGrBy9S,WAAY,WACV,IACIx0R,EAAOpoB,EADP1G,EAAOvH,KAEPg7T,EAAMzzT,EAAKjB,SAaf,OAZA+vB,EAAQ,CACN1tB,GAAIpB,EAAKmtE,IACTumP,UAAW,KAEbhtT,EAAMo2S,GAAMnuS,OAAO,MAAOmgB,EAAO,SAAWr2B,KAAK0D,UAAUs3T,EAAIrvT,MAAQ,WACnEqvT,EAAItiS,QACN2rR,GAAMj1S,IAAInB,EAAK,SAAU+sT,EAAItiS,OAAS,MAEpCsiS,EAAIviS,OACN4rR,GAAMj1S,IAAInB,EAAK,QAAS+sT,EAAIviS,MAAQ,MAEtCxqB,EAAI3D,UAAY/C,EAAKiG,QACdS,EAAI85C,WAEbzY,WAAY,WACV,IAAI/nC,EAAOvH,KACPk7T,EAAkB,SAAU/mT,GAC9BA,EAAE44B,iBACFxlC,EAAKiG,QAAQgH,OAAO,aACpBjN,EAAKmW,QAAQpT,UAAY/C,EAAKiG,SAE5BoH,EAAS,SAAUqkE,GACrB,IAAIzsB,EAASjlD,EAAKjB,SAASkmD,OAC3B,GAAsB,kBAAXA,EACT,OAAOysB,EAET,IAAIgwB,EAAK,IAAIhsD,OAAO,IAAMuP,EAAOnsD,MAAM,WAAWiN,KAAK,KAAO,KAAM,KACpE,OAAOlG,EAASyqB,KAAKonD,GAAO,SAAUjtB,GACpC,OAAOi9C,EAAG5+F,KAAK2hD,EAAK1nD,UAGxBiD,EAAKgoC,SACLhoC,EAAKwnC,IAAIp6B,GAAG,YAAY,SAAUR,GAChCA,EAAE44B,oBAEJxlC,EAAKwnC,IAAIp6B,GAAG,YAAaumT,GACzB3zT,EAAKwnC,IAAIp6B,GAAG,YAAaumT,GACzB3zT,EAAKwnC,IAAIp6B,GAAG,QAAQ,SAAUR,GAE5B,GADAA,EAAE44B,kBACExlC,EAAK0iC,MAAMtkC,IAAI,YAAnB,CAGA,IAAIszE,EAAQrkE,EAAOT,EAAEojE,aAAa0B,OAClC1xE,EAAK7B,MAAQ,WACX,OAAKuzE,EAAM7vE,OAEA7B,EAAKjB,SAAS67J,SAChBlpF,EAEAA,EAAM,GAJN,MAOPA,EAAM7vE,QACR7B,EAAK4kC,KAAK,SAAUh4B,QAI1B6G,OAAQ,WACNhb,KAAK+uC,IAAIyK,MACTx5C,KAAKuvC,YAIL4rR,GAAO/H,GAAO1qT,OAAO,CACvBi5H,KAAM,SAAUr7H,GACd,IAAIiB,EAAOvH,KACNsG,EAASyK,YACZzK,EAASyK,UAAY,KAEvBxJ,EAAKgoC,OAAOjpC,GACZiB,EAAKiG,QAAQJ,IAAI,QACjB7F,EAAKolT,UAAW,EAChBplT,EAAKoN,GAAG,SAAS,SAAUR,GACzB,IAAI3H,EACAwK,EAAS7C,EAAE6C,QACXxK,EAAQwK,EAAO6G,aAAa,gBAC9BtW,EAAK4kC,KAAK,SAAU,CAClBzmC,MAAO6B,EAAK+3E,MAAM9yE,GAClBA,MAAOA,OAIbjF,EAAK+3E,IAAI/3E,EAAKjB,SAASg5E,MAEzBzkE,MAAO,WACL,IAAItT,EAAOvH,KAEX,OADAuH,EAAKmW,QAAQE,WAAW/C,QACjBtT,GAET+3E,IAAK,SAAUA,GACb,OAAKn2E,UAAUC,QAGfpJ,KAAKiqC,MAAMrkC,IAAI,MAAO05E,GACft/E,MAHEA,KAAKiqC,MAAMtkC,IAAI,QAK1BklT,WAAY,WACV,IAAItjT,EAAOvH,KACX,MAAO,YAAcuH,EAAKmtE,IAAM,YAAcntE,EAAKiG,QAAU,KAAOjG,EAAK6zT,iBAAiB7zT,EAAK0iC,MAAMtkC,IAAI,QAAU,UAErHqqC,WAAY,WACV,IAAIzoC,EAAOvH,KAIX,OAHAuH,EAAK0iC,MAAMt1B,GAAG,cAAc,SAAUR,GACpC5M,EAAKgzH,UAAUhzH,EAAK6zT,iBAAiBjnT,EAAEzO,WAElC6B,EAAKgoC,UAEd6rR,iBAAkB,SAAUhwT,GAC1B,IAEI1B,EAAG1E,EAFHuC,EAAOvH,KACPipC,EAAQ79B,GAAQ,GACV6D,EAAO,GACbsI,EAAShQ,EAAKygT,YAClB,IAAKt+S,EAAI,EAAG1E,EAAIikC,EAAM7/B,OAAQM,EAAI1E,EAAG0E,IACnCuF,IAASvF,EAAI,EAAI,eAAiB6N,EAAS,gCAAkChQ,EAAKjB,SAASyK,UAAY,UAAY,IAAM,6BAA+BwG,EAAS,aAAe7N,IAAM1E,EAAI,EAAI,IAAMuS,EAAS,OAAS,IAAM,iBAAmB7N,EAAI,uBAAyBnC,EAAKmtE,IAAM,IAAMhrE,EAAI,kBAAoBA,EAAI,GAAK,KAAOu/B,EAAMv/B,GAAGpF,KAAO,SAKvV,OAHK2K,IACHA,EAAO,eAAiBsI,EAAS,sBAE5BtI,KAIPosT,GAAcF,GAAKzyT,OAAO,CAC5B4mC,WAAY,WACV,IAAI/nC,EAAOvH,KAAMqG,EAASkB,EAAKjB,SAASD,OACxC,SAASsoN,EAAS1gN,GAChB,GAAqB,IAAjBA,EAAImiB,SAAgB,CACtB,GAAqB,OAAjBniB,EAAIzD,UAAuByD,EAAI4P,aAAa,kBAC9C,OAAO,EAET,GAA0C,aAAtC5P,EAAI4P,aAAa,iBACnB,OAAO,EAGX,OAAO,EAgCT,OA9BoC,IAAhCxX,EAAOC,SAASg1T,cAClB/zT,EAAKoN,GAAG,UAAU,SAAUR,GAC1B9N,EAAOwU,QACPxU,EAAOuL,UAAUO,OAAOnS,KAAKs/E,MAAMnrE,EAAE3H,OAAOvC,SAC5C5D,EAAOyU,iBAETzU,EAAOsO,GAAG,cAAc,SAAUR,GAChC,IAAIonT,EAAa,GACb/zP,EAAUrzD,EAAEqzD,QACZ99D,EAAI89D,EAAQp+D,OAChB,MAAOM,IACL,GAA4B,IAAxB89D,EAAQ99D,GAAG0mB,WAAmBu+L,EAASnnJ,EAAQ99D,IAAK,CACtD,IAAImD,EAAOxG,EAAO8lC,KAAK,cAAe,CACpC7nC,KAAMkjE,EAAQ99D,GAAGc,SAAS+f,cAC1BvT,OAAQwwD,EAAQ99D,KAQlB,GANKmD,EAAKujE,sBACRmrP,EAAWzuT,KAAK,CACdxI,KAAMuI,EAAKvI,KACX2F,QAASu9D,EAAQ99D,KAGjBmD,EAAK8+L,uBACP,MAINpkM,EAAK+3E,IAAIi8O,OAGNh0T,EAAKgoC,YAIZisR,GAAW7N,GAAUjlT,OAAO,CAC9B6lC,SAAU,CACRh7B,OAAQ,OACRE,MAAO,SACPyY,SAAU,CAAElY,KAAM,IAEpB62S,WAAY,WACV,IAAItjT,EAAOvH,KAAMuT,EAAShM,EAAKsgT,QAAStwS,EAAShQ,EAAKygT,YAGtD,OAFAzgT,EAAKiG,QAAQJ,IAAI,YACjBmG,EAAOu3S,UAAUvjT,GACV,YAAcA,EAAKmtE,IAAM,YAAcntE,EAAKiG,QAAU,kCAAoCjG,EAAKjB,SAASyI,MAAQ,YAAcxH,EAAKmtE,IAAM,kBAAoBn9D,EAAS,UAAYhQ,EAAKjB,SAASyI,MAAQ,SAAW,IAAM,YAAcxH,EAAKmtE,IAAM,iBAAmBntE,EAAKsmT,YAAc,MAAQtmT,EAAKjB,SAAS2I,MAAQ,IAAMsE,EAAOs3S,WAAWtjT,GAA9U,kBAIPk0T,GAAO9N,GAAUjlT,OAAO,CAC1B6lC,SAAU,CACRu/Q,aAAc,OACdv6S,OAAQ,OACRC,UAAW,SACXC,MAAO,UACPO,KAAM,EACNiT,QAAS,GACTgtB,SAAU,GACV/sB,QAAS,GACT7Z,UAAW,CACTqzE,OAAQ,WACN1gF,KAAK0gF,YAIXoqO,UAAW,WACT,IAAIvjT,EAAOvH,KAAM2lB,EAAQpe,EAAKoe,QACzBpe,EAAKjB,SAASk+K,mBACjBj9K,EAAKjB,SAASk+K,iBAAmB,CAC/BjxK,OAAQ,OACRs1S,WAAY,WACZ38R,SAAU,CAAElY,KAAM,KAGtB2R,EAAM9Q,MAAK,SAAU6E,GACnB,IAAIgiT,EACA/nT,EAAQ+F,EAAKpT,SAASqN,MACtBA,IACF+nT,EAAW,IAAIF,GAASp0T,EAASsB,OAAO,CACtCid,MAAO,CACL7d,KAAM,QACNa,GAAI+Q,EAAKg7D,IAAM,KACf/oE,KAAMgI,EACNK,KAAM,EACNslH,MAAO5/G,EAAKg7D,IACZ96D,SAAUF,EAAKE,aAEhBrS,EAAKjB,SAASk+K,mBACjBk3I,EAAS5zT,KAAO,WAChB4R,EAAKmtL,KAAK,aAAcntL,EAAKg7D,IAAM,MACD,qBAAvBh7D,EAAKpT,SAAS0N,OACvB0F,EAAKpT,SAAS0N,KAAO,GAEvBzM,EAAKW,QAAQwR,EAAMgiT,GACnBA,EAAStuT,IAAIsM,QAInBgnE,OAAQ,WACN,OAAO1gF,KAAKmsC,KAAK,SAAU,CAAE/gC,KAAMpL,KAAKwoD,YAE1ClZ,WAAY,WACV,IAAI/nC,EAAOvH,KACXuH,EAAKgoC,SACLhoC,EAAKqxH,SAASrxH,EAAKjB,SAAS8E,OAE9B4kC,WAAY,WACV,IAAIzoC,EAAOvH,KAEX,SAAS27T,IACP,IAEIjyT,EAAGuqC,EAAUtuB,EAFbi2S,EAAgB,EAChBC,EAAS,GAEb,IAAmC,IAA/Bt0T,EAAKjB,SAAS++K,aAAlB,CAIE1/J,EADiC,aAA/Bpe,EAAKjB,SAAS++K,aACR99K,EAAK+N,KAAK,YAEV/N,EAAKoe,QAEfA,EAAM/Q,OAAO,YAAYC,MAAK,SAAUurC,GACtC,IAAI07Q,EAAY17Q,EAAKz6B,QAAQ,GAAIo2S,EAAaD,EAAUp+S,QAAQgyB,YAChEksR,EAAgBG,EAAaH,EAAgBG,EAAaH,EAC1DC,EAAO/uT,KAAKgvT,MAEd7nR,EAAW1sC,EAAKjB,SAAS2tC,UAAY,EACrCvqC,EAAImyT,EAAOzyT,OACX,MAAOM,IACLmyT,EAAOnyT,GAAGpD,SAAS2M,SAAW2oT,EAAgB3nR,GArBlD1sC,EAAKgoC,SAwBLhoC,EAAKoN,GAAG,OAAQgnT,GAChBA,OAIAK,GAAWP,GAAK/yT,OAAO,CACzB6lC,SAAU,CACRu/Q,aAAc,WACdv6S,OAAQ,OACRC,UAAW,SACXC,MAAO,UACPO,KAAM,EACNiT,QAAS,aACTgtB,SAAU,GACV/sB,QAAS,GACTgtB,OAAQ,GAEV22Q,WAAY,WACV,IAAItjT,EAAOvH,KAAMuT,EAAShM,EAAKsgT,QAAStwS,EAAShQ,EAAKygT,YAGtD,OAFAzgT,EAAKujT,YACLv3S,EAAOu3S,UAAUvjT,GACV,iBAAmBA,EAAKmtE,IAAM,YAAcntE,EAAKiG,QAAU,kCAAoCjG,EAAKjB,SAASyI,MAAQ,eAAiBxH,EAAKmtE,IAAM,kBAAoBn9D,EAAS,mBAAqBhQ,EAAKjB,SAASyI,MAAQ,YAAc,IAAM,YAAcxH,EAAKmtE,IAAM,iBAAmBntE,EAAKsmT,YAAc,MAAQtmT,EAAKjB,SAAS2I,MAAQ,IAAMsE,EAAOs3S,WAAWtjT,GAAlW,uBAIP00T,GAAW,EACXnoK,GAAW,SAAUv8I,GACvB,IAAIwkC,EAAO,IAAIrkC,KACXgqI,EAAO3lG,EAAKpkC,UACZ6wF,EAAS7hG,KAAKi6B,MAAsB,IAAhBj6B,KAAK6hG,UAE7B,OADAyzN,KACO1kT,EAAS,IAAMixF,EAASyzN,GAAW13S,OAAOm9H,IAG/ChvF,GAAW,SAAUzjD,EAAMi6B,GAC7B,IAAIzW,EAAMyW,GAAS3jC,EAAWwE,SAC1B0S,EAAMgW,EAAIoG,cAAc,OAE5B,GADApc,EAAIpR,UAAY4D,GACXwN,EAAIkzC,iBAAmBlzC,EAAIkB,WAAWvU,OAAS,EAElD,MADA7D,EAAWotD,QAAQt2B,MAAM,wCAAyCptB,GAC5D,IAAIkU,MAAM,qCAElB,OAAOyvC,GAAQn2C,EAAIkB,WAAW,KAE5Bk1C,GAAU,SAAUtlD,EAAK27B,GAC3B,IAAIzW,EAAMyW,GAAS3jC,EAAWwE,SAC1B4H,EAAO8gB,EAAIoG,cAActrB,GAC7B,OAAOqlD,GAAQjhD,IAEbmhD,GAAW,SAAUnnD,EAAMu9B,GAC7B,IAAIzW,EAAMyW,GAAS3jC,EAAWwE,SAC1B4H,EAAO8gB,EAAIhd,eAAe9J,GAC9B,OAAOinD,GAAQjhD,IAEbihD,GAAU,SAAUjhD,GACtB,GAAa,OAATA,QAA0B2R,IAAT3R,EACnB,MAAM,IAAIwR,MAAM,oCAElB,MAAO,CAAElR,IAAKnB,EAASa,KAErBohD,GAAY,SAAUC,EAAQ92C,EAAG7Z,GACnC,IAAIowB,EAAMugC,EAAO/gD,MACjB,OAAOkS,EAAO5X,KAAKkmB,EAAIwgC,iBAAiB/2C,EAAG7Z,IAAI4F,IAAI2qD,KAEjDM,GAAU,CACZR,SAAUA,GACVG,QAASA,GACTC,SAAUA,GACVF,QAASA,GACTG,UAAWA,IAGTqB,GAAS,SAAUhyC,GACrB,IACI2C,EADAsvC,GAAS,EAEb,OAAO,WAEL,IADA,IAAIxnD,EAAO,GACFmV,EAAK,EAAGA,EAAK7Y,UAAUC,OAAQ4Y,IACtCnV,EAAKmV,GAAM7Y,UAAU6Y,GAMvB,OAJKqyC,IACHA,GAAS,EACTtvC,EAAI3C,EAAElV,MAAM,KAAML,IAEbkY,IAOPqpI,IAHY7oJ,EAAW4uD,KAAKiF,eACZ7zD,EAAW4uD,KAAKkF,mBACtB9zD,EAAW4uD,KAAKmF,aACf/zD,EAAW4uD,KAAKoF,eAG3BJ,IAFgB5zD,EAAW4uD,KAAKqF,mBACZj0D,EAAW4uD,KAAKsF,uBAC1Bl0D,EAAW4uD,KAAKuF,cAO1B5wB,IANOvjC,EAAW4uD,KAAKyF,UACEr0D,EAAW4uD,KAAK0F,4BACtBt0D,EAAW4uD,KAAK2F,sBAC1Bv0D,EAAW4uD,KAAK4F,YACdx0D,EAAW4uD,KAAK6F,cAEW,qBAAtBz0D,EAAW4B,OAAyB5B,EAAW4B,OAAS4hC,SAAS,eAATA,IAExEC,GAAO,SAAUC,EAAOC,GAE1B,IADA,IAAI/gC,OAAcmb,IAAV4lB,GAAiC,OAAVA,EAAiBA,EAAQJ,GAC/Cp/B,EAAI,EAAGA,EAAIu/B,EAAM7/B,aAAgBka,IAANnb,GAAyB,OAANA,IAAcuB,EACnEvB,EAAIA,EAAE8gC,EAAMv/B,IAEd,OAAOvB,GAELjC,GAAU,SAAUijC,EAAGD,GACzB,IAAID,EAAQE,EAAE9oC,MAAM,KACpB,OAAO2oC,GAAKC,EAAOC,IAGjBE,GAAS,SAAU9kC,EAAM4kC,GAC3B,OAAOhjC,GAAQ5B,EAAM4kC,IAEnBjmB,GAAW,SAAU3e,EAAM4kC,GAC7B,IAAIG,EAASD,GAAO9kC,EAAM4kC,GAC1B,QAAe5lB,IAAX+lB,GAAmC,OAAXA,EAC1B,MAAM,IAAIlmB,MAAM7e,EAAO,kCAEzB,OAAO+kC,GAELC,GAAW,CAAErmB,SAAUA,IAEvBwwC,GAAY,WAEd,IADA,IAAIC,EAAS,GACJ1xC,EAAK,EAAGA,EAAK7Y,UAAUC,OAAQ4Y,IACtC0xC,EAAO1xC,GAAM7Y,UAAU6Y,GAEzB,OAAO,WAEL,IADA,IAAInO,EAAS,GACJmO,EAAK,EAAGA,EAAK7Y,UAAUC,OAAQ4Y,IACtCnO,EAAOmO,GAAM7Y,UAAU6Y,GAEzB,GAAI0xC,EAAOtqD,SAAWyK,EAAOzK,OAC3B,MAAM,IAAI+Z,MAAM,mDAAqDuwC,EAAOtqD,OAAS,WAAayK,EAAOzK,OAAS,cAEpH,IAAIuqD,EAAS,GAIb,OAHA9+C,GAAK6+C,GAAQ,SAAUpvD,EAAMoF,GAC3BiqD,EAAOrvD,GAAQwM,EAAS+C,EAAOnK,OAE1BiqD,IAIPhiD,GAAO,WACT,IAAIyQ,EAAIknB,GAASrmB,SAAS,QAC1B,OAAOb,GAEL0xC,GAA0B,SAAUhzC,EAAGtB,EAAG1a,GAC5C,OAAkD,KAA1Cgc,EAAEgzC,wBAAwBt0C,GAAK1a,IAErCivD,GAA4B,SAAUjzC,EAAGtB,GAC3C,OAAOs0C,GAAwBhzC,EAAGtB,EAAG7N,KAAOqiD,8BAE1CC,GAA8B,SAAUnzC,EAAGtB,GAC7C,OAAOs0C,GAAwBhzC,EAAGtB,EAAG7N,KAAOuiD,iCAE1CC,GAAO,CACTJ,0BAA2BA,GAC3BE,4BAA6BA,IAG3BK,GAAa,SAAUC,EAAS5yD,GAClC,IAAK,IAAI+H,EAAI,EAAGA,EAAI6qD,EAAQnrD,OAAQM,IAAK,CACvC,IAAIwS,EAAIq4C,EAAQ7qD,GAChB,GAAIwS,EAAE7R,KAAK1I,GACT,OAAOua,IAKTs4C,GAAS,SAAUD,EAASE,GAC9B,IAAI1vC,EAAIuvC,GAAWC,EAASE,GAC5B,IAAK1vC,EACH,MAAO,CACLsC,MAAO,EACPC,MAAO,GAGX,IAAIgpC,EAAQ,SAAU5mD,GACpB,OAAOgrD,OAAOD,EAAMvsD,QAAQ6c,EAAG,IAAMrb,KAEvC,OAAOk1C,GAAG0R,EAAM,GAAIA,EAAM,KAExBqE,GAAS,SAAUC,EAAgBH,GACrC,IAAII,EAAetwC,OAAOkwC,GAAOlqC,cACjC,OAA8B,IAA1BqqC,EAAexrD,OACV0rD,KAEFN,GAAOI,EAAgBC,IAE5BC,GAAU,WACZ,OAAOlW,GAAG,EAAG,IAEXA,GAAK,SAAUv3B,EAAOC,GACxB,MAAO,CACLD,MAAOA,EACPC,MAAOA,IAGPytC,GAAU,CACZnW,GAAIA,GACJ+V,OAAQA,GACRG,QAASA,IAGPE,GAAO,OACPC,GAAS,SACT58B,GAAK,KACL68B,GAAQ,QACRC,GAAU,UACVC,GAAS,SACTC,GAAY,SAAU/wD,EAAMgxD,GAC9B,OAAO,WACL,OAAOA,IAAYhxD,IAGnBixD,GAAY,WACd,OAAOC,GAAK,CACVF,aAAShyC,EACTkE,QAASutC,GAAQD,aAGjBU,GAAO,SAAUC,GACnB,IAAIH,EAAUG,EAAKH,QACf9tC,EAAUiuC,EAAKjuC,QACnB,MAAO,CACL8tC,QAASA,EACT9tC,QAASA,EACTkuC,OAAQL,GAAUL,GAAMM,GACxBK,SAAUN,GAAUJ,GAAQK,GAC5BM,KAAMP,GAAUh9B,GAAIi9B,GACpBO,QAASR,GAAUH,GAAOI,GAC1BQ,UAAWT,GAAUF,GAASG,GAC9BS,SAAUV,GAAUD,GAAQE,KAG5BU,GAAU,CACZlB,QAASS,GACT3W,GAAI4W,GACJR,KAAMlkD,EAASkkD,IACfC,OAAQnkD,EAASmkD,IACjB58B,GAAIvnB,EAASunB,IACb68B,MAAOpkD,EAASokD,IAChBC,QAASrkD,EAASqkD,IAClBC,OAAQtkD,EAASskD,KAGf8mQ,GAAY,UACZhmQ,GAAM,MACNC,GAAU,UACVC,GAAQ,QACRC,GAAM,MACNC,GAAU,UACVC,GAAU,UACVC,GAAO,SAAUlyD,EAAMgxD,GACzB,OAAO,WACL,OAAOA,IAAYhxD,IAGnBmyD,GAAY,WACd,OAAOC,GAAK,CACVpB,aAAShyC,EACTkE,QAASutC,GAAQD,aAGjB4B,GAAO,SAAUjB,GACnB,IAAIH,EAAUG,EAAKH,QACf9tC,EAAUiuC,EAAKjuC,QACnB,MAAO,CACL8tC,QAASA,EACT9tC,QAASA,EACTmvC,UAAWH,GAAK0lQ,GAAW5mQ,GAC3BsB,MAAOJ,GAAKN,GAAKZ,GACjBuB,UAAWL,GAAKL,GAASb,GACzBwB,MAAON,GAAKH,GAAKf,GACjByB,QAASP,GAAKJ,GAAOd,GACrB0B,UAAWR,GAAKF,GAAShB,GACzB2B,UAAWT,GAAKD,GAASjB,KAGzB4B,GAAkB,CACpBpC,QAAS2B,GACT7X,GAAI8X,GACJT,QAASnlD,EAASorT,IAClBhmQ,IAAKplD,EAASolD,IACdC,QAASrlD,EAASqlD,IAClBC,MAAOtlD,EAASslD,IAChBC,IAAKvlD,EAASulD,IACdC,QAASxlD,EAASwlD,IAClBC,QAASzlD,EAASylD,KAGhBY,GAAa,SAAUC,EAAIC,EAASC,GACtC,IAAIC,EAASH,EAAGR,UAAuC,IAA5B,QAAQvsD,KAAKitD,GACpCE,EAAWJ,EAAGR,UAAYW,EAC1BE,EAAaL,EAAGP,aAAoC,IAArBO,EAAG5vC,QAAQH,MAC1CqwC,EAAaN,EAAGP,aAAoC,IAArBO,EAAG5vC,QAAQH,MAC1CswC,EAAWJ,GAAUE,GAAcC,IAA4C,IAA9B,UAAUrtD,KAAKitD,GAChEM,EAAUR,EAAGR,SAAWQ,EAAGP,YAC3BgB,EAAUD,IAAYD,EACtBG,EAAaT,EAAQtB,YAAcqB,EAAGR,UAAyC,IAA9B,UAAUvsD,KAAKitD,GACpE,MAAO,CACLC,OAAQzmD,EAASymD,GACjBC,SAAU1mD,EAAS0mD,GACnBG,SAAU7mD,EAAS6mD,GACnBE,QAAS/mD,EAAS+mD,GAClBD,QAAS9mD,EAAS8mD,GAClBf,UAAWO,EAAGP,UACdD,MAAOQ,EAAGR,MACVmB,UAAWjnD,EAASgnD,KAIpBE,GAAW,SAAUC,EAAYX,GACnC,IAAI7C,EAAQlwC,OAAO+yC,GAAW/sC,cAC9B,OAAOjV,GAAK2iD,GAAY,SAAUC,GAChC,OAAOA,EAAUC,OAAO1D,OAGxB2D,GAAgB,SAAUC,EAAUf,GACtC,OAAOU,GAASK,EAAUf,GAAWrvD,KAAI,SAAUovD,GACjD,IAAI7vC,EAAUutC,GAAQJ,OAAO0C,EAAQzC,eAAgB0C,GACrD,MAAO,CACLhC,QAAS+B,EAAQ/yD,KACjBkjB,QAASA,OAIX8wC,GAAW,SAAUC,EAAMjB,GAC7B,OAAOU,GAASO,EAAMjB,GAAWrvD,KAAI,SAAUmvD,GAC7C,IAAI5vC,EAAUutC,GAAQJ,OAAOyC,EAAGxC,eAAgB0C,GAChD,MAAO,CACLhC,QAAS8B,EAAG9yD,KACZkjB,QAASA,OAIXgxC,GAAW,CACbJ,cAAeA,GACfE,SAAUA,IAGRt+C,GAAW,SAAU3N,EAAKsjB,GAC5B,OAAgC,IAAzBtjB,EAAI6B,QAAQyhB,IAGjB8oC,GAAqB,sCACrBC,GAAgB,SAAU1hD,GAC5B,OAAO,SAAU2hD,GACf,OAAO3+C,GAAS2+C,EAAU3hD,KAG1BqhD,GAAW,CACb,CACE/zD,KAAM,OACNswD,eAAgB,CAAC,kCACjBuD,OAAQ,SAAUQ,GAChB,OAAO3+C,GAAS2+C,EAAU,UAAY3+C,GAAS2+C,EAAU,WAAa3+C,GAAS2+C,EAAU,WAAa3+C,GAAS2+C,EAAU,iBAG7H,CACEr0D,KAAM,SACNswD,eAAgB,CACd,kCACA6D,IAEFN,OAAQ,SAAUQ,GAChB,OAAO3+C,GAAS2+C,EAAU,YAAc3+C,GAAS2+C,EAAU,iBAG/D,CACEr0D,KAAM,KACNswD,eAAgB,CACd,iCACA,8BAEFuD,OAAQ,SAAUQ,GAChB,OAAO3+C,GAAS2+C,EAAU,SAAW3+C,GAAS2+C,EAAU,aAG5D,CACEr0D,KAAM,QACNswD,eAAgB,CACd6D,GACA,kCAEFN,OAAQO,GAAc,UAExB,CACEp0D,KAAM,UACNswD,eAAgB,CAAC,uCACjBuD,OAAQO,GAAc,YAExB,CACEp0D,KAAM,SACNswD,eAAgB,CACd6D,GACA,iCAEFN,OAAQ,SAAUQ,GAChB,OAAQ3+C,GAAS2+C,EAAU,WAAa3+C,GAAS2+C,EAAU,aAAe3+C,GAAS2+C,EAAU,kBAI/FJ,GAAO,CACT,CACEj0D,KAAM,UACN6zD,OAAQO,GAAc,OACtB9D,eAAgB,CAAC,0CAEnB,CACEtwD,KAAM,MACN6zD,OAAQ,SAAUQ,GAChB,OAAO3+C,GAAS2+C,EAAU,WAAa3+C,GAAS2+C,EAAU,SAE5D/D,eAAgB,CACd,sCACA,+BACA,wCAGJ,CACEtwD,KAAM,UACN6zD,OAAQO,GAAc,WACtB9D,eAAgB,CAAC,sCAEnB,CACEtwD,KAAM,MACN6zD,OAAQO,GAAc,QACtB9D,eAAgB,CAAC,mCAEnB,CACEtwD,KAAM,QACN6zD,OAAQO,GAAc,SACtB9D,eAAgB,IAElB,CACEtwD,KAAM,UACN6zD,OAAQO,GAAc,SACtB9D,eAAgB,IAElB,CACEtwD,KAAM,UACN6zD,OAAQO,GAAc,WACtB9D,eAAgB,KAGhBgE,GAAe,CACjBP,SAAUvnD,EAASunD,IACnBE,KAAMznD,EAASynD,KAGbM,GAAW,SAAUvB,GACvB,IAAIe,EAAWO,GAAaP,WACxBE,EAAOK,GAAaL,OACpBlB,EAAUmB,GAASJ,cAAcC,EAAUf,GAAWz0C,KAAKmzC,GAAQlB,QAASkB,GAAQpX,IACpFwY,EAAKoB,GAASF,SAASC,EAAMjB,GAAWz0C,KAAKq0C,GAAgBpC,QAASoC,GAAgBtY,IACtFka,EAAa3B,GAAWC,EAAIC,EAASC,GACzC,MAAO,CACLD,QAASA,EACTD,GAAIA,EACJ0B,WAAYA,IAGZC,GAAoB,CAAEpE,OAAQkE,IAE9BG,GAAW5E,IAAO,WACpB,IAAIkD,EAAY/xD,EAAW0zD,UAAU3B,UACrC,OAAOyB,GAAkBpE,OAAO2C,MAE9B4B,GAAsB,CAAEvE,OAAQqE,IAEhCW,GAAYR,GACZg2F,GAAaf,GACbgB,GAAiB,SAAUn9I,GAC7B,OAAOA,EAAIme,WAAaupC,IAAa1nD,EAAIme,WAAa++H,IAAwC,IAA1Bl9I,EAAIo9I,mBAEtEliJ,GAAM,SAAUqC,EAAU05B,GAC5B,IAAIo3G,OAAiBh9H,IAAV4lB,EAAsB3jC,EAAWwE,SAAWm/B,EAAMj3B,MAC7D,OAAOm9I,GAAe9O,GAAQ,GAAKr4I,GAAIq4I,EAAKt2I,iBAAiBwF,GAAW0jD,GAAQN,UAE9E08F,GAAM,SAAU9/I,EAAU05B,GAC5B,IAAIo3G,OAAiBh9H,IAAV4lB,EAAsB3jC,EAAWwE,SAAWm/B,EAAMj3B,MAC7D,OAAOm9I,GAAe9O,GAAQn8H,EAAO5B,OAAS4B,EAAO5X,KAAK+zI,EAAKiP,cAAc//I,IAAWvH,IAAIirD,GAAQN,UAGlG2H,GAAkB,SAAUF,EAAIC,GAClC,IAAIE,EAAKH,EAAGpoD,MACRwoD,EAAKH,EAAGroD,MACZ,OAAOuoD,IAAOC,GAAaD,EAAGxgD,SAASygD,IAErCC,GAAa,SAAUL,EAAIC,GAC7B,OAAOnG,GAAKF,4BAA4BoG,EAAGpoD,MAAOqoD,EAAGroD,QAEnDolD,GAAU6B,GAAoBvE,SAAS0C,QAKvC25F,IAJa35F,GAAQzB,OAEdnC,GAAU,UAAW,UAEd,SAAUvqB,EAAO15B,GACjC,OAAOrC,GAAIqC,EAAU05B,KAGnBj0B,GAAO7N,EAAS6N,KAChBsrM,GAA0B,SAAU76M,GACtC,OAAO,SAAUiM,GACf,GAAIA,GAA0B,IAAlBA,EAAKye,SAAgB,CAC/B,GAAIze,EAAK0D,kBAAoB3P,EAC3B,OAAO,EAET,GAAIiM,EAAKkM,aAAa,8BAAgCnY,EACpD,OAAO,EAGX,OAAO,IAGP4oL,GAAwBiyB,GAAwB,QAChD58H,GAAyB48H,GAAwB,SACjDrqM,GAAS,SAAUpO,EAAMiH,EAAOQ,EAAK+I,EAAOm0E,GAC9C,MAAO,CACL3kF,KAAMA,EACNiH,MAAOA,EACPQ,IAAKA,EACL+I,MAAOA,EACPm0E,OAAQA,IAGR0vO,GAA+B,SAAUxqT,GAC3C,MAAOA,EAAOA,EAAKpH,WAAY,CAC7B,IAAI7E,EAAQiM,EAAK0D,gBACjB,GAAI3P,GAAmB,YAAVA,EACX,OAAO4oL,GAAsB38K,GAGjC,OAAO,GAELQ,GAAS,SAAU3C,EAAUvG,GAC/B,OAAOhB,GAAI+oJ,GAAY99F,GAAQN,QAAQ3pD,GAAOuG,IAAW,SAAUvF,GACjE,OAAOA,EAAQgI,UAGfmqT,GAAiB,SAAUnuT,GAC7B,OAAOA,EAAI4+D,WAAa5+D,EAAIvD,aAE1B2xT,GAAkB,SAAUpuT,GAC9B,OAAOA,EAAItF,GAAKsF,EAAItF,GAAKmrJ,GAAS,MAEhCx4B,GAAW,SAAUrtH,GACvB,OAAOA,GAAwB,MAAjBA,EAAIzD,WAAqByD,EAAItF,IAAMsF,EAAI3J,OAEnDg4T,GAAgB,SAAUruT,GAC5B,OAAOqtH,GAASrtH,IAAQ0lO,GAAW1lO,IAEjCsuT,GAAW,SAAUtuT,GACvB,OAAOA,GAAO,aAAa5D,KAAK4D,EAAIzD,WAElCmpO,GAAa,SAAU1lO,GACzB,OAAOkuT,GAA6BluT,KAAS01E,GAAuB11E,IAElEuuT,GAAgB,SAAUvuT,GAC5B,OAAOsuT,GAAStuT,IAAQ0lO,GAAW1lO,IAEjCwuT,GAAW,SAAUxuT,GACvB,OAAOsuT,GAAStuT,GAAOlJ,SAASkJ,EAAIzD,SAASmlB,OAAO,GAAI,IAAM,GAE5D+sS,GAAe,SAAUzuT,GAC3B,IAAI0uT,EAAWN,GAAgBpuT,GAC3Bw+E,EAAS,WACXx+E,EAAItF,GAAKg0T,GAEX,OAAOzmT,GAAO,SAAUkmT,GAAenuT,GAAM,IAAM0uT,EAAUF,GAASxuT,GAAMw+E,IAE1EmwO,GAAe,SAAU3uT,GAC3B,IAAI4uT,EAAW5uT,EAAItF,IAAMsF,EAAI3J,KACzBw4T,EAAaV,GAAenuT,GAChC,OAAOiI,GAAO,SAAU4mT,GAA0B,IAAMD,EAAU,IAAMA,EAAU,EAAGj7S,IAEnFm7S,GAAmB,SAAUzrQ,GAC/B,OAAOrpD,GAAI2M,GAAO08C,EAAMkrQ,IAAgBE,KAEtCM,GAAmB,SAAU1rQ,GAC/B,OAAOrpD,GAAI2M,GAAO08C,EAAMgrQ,IAAgBM,KAEtCK,GAAoB,SAAUhvT,GAChC,IAAIqjD,EAAOn/C,GAAO,kCAAmClE,GACrD,OAAOqjD,GAEL4rQ,GAAW,SAAUlmT,GACvB,OAAO/B,GAAK+B,EAAOjI,OAAO3F,OAAS,GAEjC8xM,GAAS,SAAUjtM,GACrB,IAAIqjD,EAAO2rQ,GAAkBhvT,GAC7B,OAAO2G,GAAOmoT,GAAiBzrQ,GAAMpvC,OAAO86S,GAAiB1rQ,IAAQ4rQ,KAEnEC,GAAc,CAAE7nT,KAAM4lM,IAEtBkiH,GAAkB,WACpB,OAAOj2T,OAAOpB,QAAUoB,OAAOpB,QAAQytP,aAAertP,EAASqtP,cAE7D6pE,GAAU,GACVC,GAAiB,EACjBC,GAAe,WACjBF,GAAU,IAERG,GAAa,SAAUxmT,GACzB,MAAO,CACLjI,MAAOiI,EAAOjI,MACdrJ,MAAO,CACLqJ,MAAO,CAAE65D,IAAK5xD,EAAOjI,OACrBQ,IAAKyH,EAAOzH,IACZk9E,OAAQz1E,EAAOy1E,UAIjB4vC,GAAc,SAAU2nC,GAC1B,OAAO58J,EAASa,IAAI+7J,EAASw5J,KAE3BC,GAAiB,SAAU1uT,EAAOQ,GACpC,MAAO,CACLR,MAAOA,EACPrJ,MAAO,CACLqJ,MAAOA,EACPQ,IAAKA,EACLk9E,OAAQ7qE,KAIV87S,GAAc,SAAUnuT,EAAKy0J,GAC/B,IAAI25J,EAAcj6S,GAAOsgJ,GAAS,SAAUhtJ,GAC1C,OAAOA,EAAOzH,MAAQA,KAExB,OAAQouT,GAENC,GAAa,SAAUvuS,EAAgB/qB,EAAM6hN,GAC/C,IAAIzgN,EAAQpB,KAAQ+qB,EAAiBA,EAAe/qB,GAAQ6hN,EAC5D,OAAiB,IAAVzgN,EAAkB,KAAOA,GAE9Bu8E,GAAkB,SAAU22O,EAAM50J,EAAS65J,EAAUxuS,GACvD,IAAIgoB,EAAY,CAAEtoC,MAAO,KACrB+uT,EAAuB,SAAUT,GACnC,IAAIU,EAAeV,EAAQ70T,eAAeq1T,GAAYR,EAAQQ,GAAY,GACtEG,EAAgBppT,GAAOmpT,GAAc,SAAUxuT,GACjD,OAAOmuT,GAAYnuT,EAAKy0J,MAE1B,OAAO58J,EAASa,IAAI+1T,GAAe,SAAUzuT,GAC3C,MAAO,CACLR,MAAOQ,EACP7J,MAAO,CACLqJ,MAAOQ,EACPA,IAAKA,EACLk9E,OAAQ7qE,QAKZq8S,EAAgB,SAAUn2T,GAC5B,IAAIo2T,EAAkBtpT,GAAOovJ,GAAS,SAAUhtJ,GAC9C,OAAOA,EAAOlP,OAASA,KAEzB,OAAOu0H,GAAY6hM,IAEjBC,EAAkB,WACpB,IAAIA,EAAkBF,EAAc,UAChCG,EAAYR,GAAWvuS,EAAgB,aAAc,QACrDgvS,EAAcT,GAAWvuS,EAAgB,gBAAiB,WAO9D,OANkB,OAAd+uS,GACFD,EAAgBpwO,QAAQ0vO,GAAe,QAASW,IAE9B,OAAhBC,GACFF,EAAgBrxT,KAAK2wT,GAAe,WAAYY,IAE3CF,GAEL7wT,EAAO,SAAUqY,GACnB,OAAO4qC,GAAM5qC,GAAO,SAAU7E,EAAGtB,GAC/B,IAAI8+S,EAAyB,IAAbx9S,EAAE1X,QAA6B,IAAboW,EAAEpW,OACpC,OAAOk1T,EAAYx9S,EAAEoB,OAAO1C,GAAKsB,EAAEoB,OAAOm1B,EAAW73B,KACpD,KAEL,OAAsC,IAAlC6P,EAAekvS,eACV,GAEW,SAAbV,EAAsBvwT,EAAK,CAChCkxT,GAAc5F,EAAMkF,EAAqBT,KACzCmB,GAAc5F,EAAMqF,EAAc,WAClCO,GAAc5F,EAAMuF,OACjBK,GAAc5F,EAAMkF,EAAqBT,MAE5CoB,GAAe,SAAUlvT,EAAKsuT,GAChC,IAAIl4S,EAAQ03S,GAAQQ,GACf,UAAUxzT,KAAKkF,KAGhBoW,EACEzX,GAAQyX,EAAOpW,GAAKmT,WACtB26S,GAAQQ,GAAYl4S,EAAMlZ,MAAM,EAAG6wT,IAAgBp7S,OAAO3S,IAG5D8tT,GAAQQ,GAAY,CAACtuT,KAGrBivT,GAAgB,SAAU5F,EAAMv4Q,GAClC,IAAIq+Q,EAAgB9F,EAAKruS,cACrBxmB,EAASqD,EAASyqB,KAAKwuB,GAAW,SAAUD,GAC9C,OAA4D,IAArDA,EAAKrxC,MAAMwb,cAAcrc,QAAQwwT,MAE1C,OAAyB,IAAlB36T,EAAOqF,QAAgBrF,EAAO,GAAGgL,QAAU6pT,EAAO,GAAK70T,GAE5D46T,GAAW,SAAUC,GACvB,IAAI7vT,EAAQ6vT,EAAY7vT,MACxB,OAAOA,EAAM65D,IAAM75D,EAAM65D,IAAM75D,GAE7B8vT,GAA2B,SAAUnlT,EAAM2V,EAAgBorO,EAASojE,GACtE,IAAIhqN,EAAe,SAAU+kN,GAC3B,IAAIkG,EAAc3B,GAAY7nT,KAAKmlP,GAC/Bp6M,EAAY4hC,GAAgB22O,EAAMkG,EAAajB,EAAUxuS,GAC7D3V,EAAKi/S,iBAAiBt4Q,EAAWu4Q,IAEnCl/S,EAAK/E,GAAG,gBAAgB,WACtBk/F,EAAan6F,EAAKhU,YAEpBgU,EAAK/E,GAAG,cAAc,SAAUR,GAC9B,IAAIyqT,EAAczqT,EAAEzO,MACpBgU,EAAKhU,MAAMk5T,EAAYrvT,KACvB,IAAIR,EAAQ4vT,GAASC,GACJ,UAAbf,EACFnkT,EAAKyyB,KAAK,SAAU,CAClBlnB,KAAM,CACJyhC,IAAK33C,EACL09E,OAAQmyO,EAAYnyO,UAIxB/yE,EAAKyyB,KAAK,SAAU,CAClBlnB,KAAM,CACJtZ,KAAMoD,EACN09E,OAAQmyO,EAAYnyO,UAI1B/yE,EAAKmB,WAEPnB,EAAK/E,GAAG,SAAS,SAAUR,GACG,IAAxBuF,EAAKhU,QAAQ0D,QAAsC,UAAtB+K,EAAE6C,OAAOxM,UACxCqpG,EAAa,OAGjBn6F,EAAK/E,GAAG,cAAc,WACpB+E,EAAKizC,UAAUh4C,GAAG,UAAU,SAAUR,GAC/BA,EAAEi8D,sBACLquP,GAAa/kT,EAAKhU,QAASm4T,UAK/BkB,GAAkB,SAAUh7T,GAC9B,IAAI44B,EAAS54B,EAAO44B,OAAQ9uB,EAAU9J,EAAO8J,QAC7C,MAAe,UAAX8uB,EACK,CACLA,OAAQ,KACR9uB,QAASA,GAES,YAAX8uB,GAKW,YAAXA,EAJF,CACLA,OAAQ,OACR9uB,QAASA,GAQJ,CACL8uB,OAAQ,OACR9uB,QAAS,KAIXmxT,GAA4B,SAAUtlT,EAAM2V,EAAgBwuS,GAC9D,IAAIoB,EAAmB5vS,EAAe6vS,6BACtC,GAAID,EAAkB,CACpB,IAAIE,EAAgB,SAAU5vT,GACT,IAAfA,EAAInG,OAIR61T,EAAiB,CACf1vT,IAAKA,EACLzH,KAAM+1T,IACL,SAAU95T,GACX,IAAIq7T,EAAUL,GAAgBh7T,GAC9B2V,EAAKy+S,cAAciH,EAAQvxT,SAC3B6L,EAAKw+S,YAAYkH,EAAQziS,WATzBjjB,EAAKw+S,YAAY,SAYrBx+S,EAAKuwB,MAAMt1B,GAAG,gBAAgB,SAAUR,GACtCgrT,EAAchrT,EAAEzO,YAIlB25T,GAAatH,GAASrvT,OAAO,CAC/BqlS,QAAS,CAAEwvB,aAAcA,IACzB57L,KAAM,SAAUr7H,GACd,IACIg5T,EAAgBC,EAAqBC,EADrCj4T,EAAOvH,KAAMqG,EAAS+2T,KAAmB/tS,EAAiBhpB,EAAOC,SAEjEu3T,EAAWv3T,EAAS+jD,SACxB/jD,EAASoH,YAAa,EACtB8xT,EAA2BnwS,EAAeowS,mBAAqBpwS,EAAeqwS,4BAC1EF,IACFA,EAA2Bp4T,EAAS8lE,QAAQsyP,EAA0B,SAEnEA,IAA4BA,EAAyB3B,KACxD0B,EAAsBlwS,EAAeswS,sBACjCJ,GAAyBC,IAA4BA,EAAyB3B,IAShF0B,EAAsBlwS,EAAeuwS,uBACjCL,GAAyBC,IAA4BA,EAAyB3B,KAChFyB,EAAiB,WACfC,EAAoBh4T,EAAKmW,MAAM,OAAO/U,GAAIpB,EAAK7B,QAASm4T,EAAU12T,WAXtEm4T,EAAiB,WACf,IAAIr6S,EAAO1d,EAAK4kC,KAAK,cAAclnB,KACnCA,EAAO7d,EAASsB,OAAO,CAAE2hD,SAAUwzQ,GAAY54S,GAC/Cs6S,EAAoBh3T,KAAKlC,GAAQ,SAAUX,EAAOuf,GAChD1d,EAAK7B,MAAMA,GAAOymC,KAAK,SAAU,CAAElnB,KAAMA,MACxC1d,EAAK7B,QAASuf,KAWnBq6S,IACFh5T,EAASsQ,KAAO,SAChBtQ,EAASo+K,SAAW46I,GAEtB/3T,EAAKgoC,OAAOjpC,GACZiB,EAAKiG,QAAQJ,IAAI,cACjByxT,GAAyBt3T,EAAM8nB,EAAgBhpB,EAAO0T,UAAW8jT,GACjEmB,GAA0Bz3T,EAAM8nB,EAAgBwuS,MAIhDgC,GAAY7I,GAAetuT,OAAO,CACpC8lT,OAAQ,SAAUt+R,GAChB,IAAI4vS,EAAiB5vS,EAAUg1R,aAAcqD,EAAar4R,EAAUq4R,WACpEr4R,EAAUvK,QAAQ/Q,OAAO,YAAYC,MAAK,SAAU6E,GAClDA,EAAKwrS,WAAW,CACdhpS,EAAGqsS,EAAW56Q,KACdtrC,EAAGkmT,EAAW36Q,IACd7mC,EAAG+4T,EAAexW,OAASf,EAAW9rJ,MAAQ8rJ,EAAW56Q,KACzD5rC,EAAG+9T,EAAevW,OAAShB,EAAW36Q,IAAM26Q,EAAWnlQ,SAErD1pC,EAAK80S,QACP90S,EAAK80S,eAMTuR,GAAa/I,GAAetuT,OAAO,CACrC8lT,OAAQ,SAAUt+R,GAChB,IAAIxmB,EAAG1E,EAAG2gB,EAAOm6S,EAAgBE,EAAgBC,EAAcxsT,EAAO0gC,EAAMjtB,EAASg5S,EAAWC,EAAgB3sT,EAC5GkG,EAAM0mT,EAAgBC,EAAcrsT,EAEpCmY,EAAMm0S,EAAS/mJ,EAAOvtI,EAAM8S,EAAKyhR,EACjCzQ,EAAU0Q,EAAa3Q,EAAS4Q,EAAaC,EAAYC,EAAeC,EAAe7Q,EACvF8Q,EAAeC,EAAoBC,EAAeC,EAAkBC,EAAiBC,EACrFC,EAAoBC,EAJpBC,EAAe,GAKfpuS,EAAMtsB,KAAKssB,IAAKrsB,EAAMD,KAAKC,IAkD/B,IAjDA+e,EAAQuK,EAAUvK,QAAQ/Q,OAAO,YACjCkrT,EAAiB5vS,EAAUg1R,aAC3B8a,EAAiB9vS,EAAUq4R,WAC3B0X,EAAe/vS,EAAU5pB,SACzBkN,EAAY0c,EAAU25I,QAAUo2J,EAAazsT,WAAa,eAAiBysT,EAAazsT,UACxFC,EAAQwsT,EAAaxsT,MACrB0gC,EAAOjkB,EAAU25I,QAAUo2J,EAAa9rR,MAAQ,MAAQ8rR,EAAa9rR,KACrEjtB,EAAU+4S,EAAa/4S,SAAW,EAChB,iBAAd1T,GAA8C,mBAAdA,IAClCmS,EAAQA,EAAM/f,IAAI+f,EAAM7B,UAAUquB,WAClC3+B,EAAYA,EAAUnT,MAAM,KAAK,IAEjB,WAAdmT,GACFq8S,EAAU,IACVC,EAAW,IACX0Q,EAAc,OACdC,EAAc,OACdE,EAAgB,SAChBD,EAAa,MACbE,EAAgB,SAChB7Q,EAAkB,WAClBkR,EAAkB,OAClBF,EAAgB,IAChBF,EAAgB,IAChBC,EAAqB,SACrBE,EAAmB,OACnBE,EAAiB,QACjBC,EAAqB,SACrBC,EAAuB,aAEvBvR,EAAU,IACVC,EAAW,IACX0Q,EAAc,OACdC,EAAc,OACdE,EAAgB,SAChBD,EAAa,OACbE,EAAgB,SAChB7Q,EAAkB,WAClBkR,EAAkB,MAClBF,EAAgB,IAChBF,EAAgB,IAChBC,EAAqB,SACrBE,EAAmB,OACnBE,EAAiB,SACjBC,EAAqB,SACrBC,EAAuB,YAEzBjB,EAAiBL,EAAea,GAAiBX,EAAeU,GAAcV,EAAeU,GAC7FH,EAAiBL,EAAY,EACxBx2T,EAAI,EAAG1E,EAAI2gB,EAAMvc,OAAQM,EAAI1E,EAAG0E,IACnCgQ,EAAOiM,EAAMjc,GACb02T,EAAiB1mT,EAAKwrS,aACtBmb,EAAe3mT,EAAKpT,SACpB0N,EAAOqsT,EAAarsT,KACpBmsT,GAAkBz2T,EAAI1E,EAAI,EAAIkiB,EAAU,EACpClT,EAAO,IACTksT,GAAalsT,EACTosT,EAAeK,IACjBY,EAAav0T,KAAK4M,GAEpB0mT,EAAepsT,KAAOA,GAExBmsT,GAAkBC,EAAeI,GACjCr0S,EAAO6zS,EAAeiB,GAAmBb,EAAeY,GAAoBhB,EAAekB,GACvF/0S,EAAOo0S,IACTA,EAAiBp0S,GAgBrB,GAbA6f,EAAO,GAELA,EAAKw0R,GADHL,EAAiB,EACCL,EAAeU,GAAeL,EAAiBL,EAAec,GAE9Dd,EAAea,GAAiBR,EAAiBL,EAAec,GAEtF50R,EAAKg1R,GAAoBT,EAAiBT,EAAeqB,GACzDn1R,EAAK+jR,GAAmB+P,EAAea,GAAiBR,EACxDn0R,EAAKo1R,GAAwBb,EAC7Bv0R,EAAKw9Q,KAAO5iT,EAAIolC,EAAKw9Q,KAAMsW,EAAe7W,MAC1Cj9Q,EAAKy9Q,KAAO7iT,EAAIolC,EAAKy9Q,KAAMqW,EAAe5W,MAC1Cl9Q,EAAKw9Q,KAAOv2R,EAAI+Y,EAAKw9Q,KAAMsW,EAAehX,eAC1C98Q,EAAKy9Q,KAAOx2R,EAAI+Y,EAAKy9Q,KAAMqW,EAAe/W,iBACtC+W,EAAejX,YAAe78Q,EAAKw9Q,OAASsW,EAAetW,MAAQx9Q,EAAKy9Q,OAASqW,EAAerW,KAApG,CAeA,IADAlwI,EAAQ4mJ,EAAiBD,EACpBx2T,EAAI,EAAG1E,EAAIq8T,EAAaj4T,OAAQM,EAAI1E,EAAG0E,IAC1CgQ,EAAO2nT,EAAa33T,GACpB02T,EAAiB1mT,EAAKwrS,aACtBob,EAAUF,EAAeK,GACzBt0S,EAAOi0S,EAAeI,GAAeJ,EAAepsT,KAAOulK,EACvDptJ,EAAOm0S,GACTH,GAAkBC,EAAeK,GAAeL,EAAeI,GAC/DN,GAAaE,EAAepsT,KAC5BosT,EAAepsT,KAAO,EACtBosT,EAAekB,YAAchB,GAE7BF,EAAekB,YAAc,EAoBjC,IAjBA/nJ,EAAQ4mJ,EAAiBD,EACzBphR,EAAMkhR,EAAeU,GACrB10R,EAAO,GACW,IAAdk0R,IACW,QAAT/rR,EACF2K,EAAMqhR,EAAiBH,EAAeU,GACpB,WAATvsR,GACT2K,EAAMn4C,KAAKu9B,MAAM47R,EAAea,GAAiB,GAAKb,EAAea,GAAiBR,GAAkB,GAAKH,EAAeU,GACxH5hR,EAAM,IACRA,EAAMkhR,EAAeU,KAEL,YAATvsR,IACT2K,EAAMkhR,EAAeU,GACrBx5S,EAAUvgB,KAAKi6B,MAAMu/R,GAAkBx6S,EAAMvc,OAAS,MAG1D4iC,EAAK60R,GAAiBb,EAAeiB,GAChCv3T,EAAI,EAAG1E,EAAI2gB,EAAMvc,OAAQM,EAAI1E,EAAG0E,IACnCgQ,EAAOiM,EAAMjc,GACb02T,EAAiB1mT,EAAKwrS,aACtB/4R,EAAOi0S,EAAekB,aAAelB,EAAeI,GACtC,WAAV/sT,EACFu4B,EAAK60R,GAAiBl6T,KAAKu9B,MAAM47R,EAAegB,GAAsB,EAAIV,EAAeW,GAAiB,GACvF,YAAVttT,GACTu4B,EAAK+0R,GAAiB9tS,EAAImtS,EAAeY,IAAqB,EAAGlB,EAAegB,GAAsBd,EAAeiB,GAAmBjB,EAAekB,IACvJl1R,EAAK60R,GAAiBb,EAAeiB,IAClB,QAAVxtT,IACTu4B,EAAK60R,GAAiBf,EAAegB,GAAsBV,EAAeW,GAAiBf,EAAepyR,KAExGwyR,EAAepsT,KAAO,IACxBmY,GAAQi0S,EAAepsT,KAAOulK,GAEhCvtI,EAAK8jR,GAAY3jS,EACjB6f,EAAK6jR,GAAW/wQ,EAChBplC,EAAKwrS,WAAWl5Q,GACZtyB,EAAK80S,QACP90S,EAAK80S,SAEP1vQ,GAAO3yB,EAAOjF,OA9Dd,GAJA8kB,EAAKjlC,EAAIilC,EAAKw9Q,KACdx9Q,EAAKjqC,EAAIiqC,EAAKy9Q,KACdv5R,EAAUg1R,WAAWl5Q,GACrBhsC,KAAKwuT,OAAOt+R,GACgB,OAAxBA,EAAUo6R,UAAoB,CAChC,IAAIY,EAAah7R,EAAU9lB,SACvB8gT,IACFA,EAAWZ,UAAY,KACvBY,EAAWsD,cA+DjB+S,GAAa/K,GAAO9tT,OAAO,CAC7B6lC,SAAU,CACRooR,eAAgB,cAChBI,aAAc,mBACdyK,SAAU,SAEZhT,OAAQ,SAAUt+R,GAChBA,EAAUvK,QAAQ/Q,OAAO,YAAYC,MAAK,SAAU6E,GAC9CA,EAAK80S,QACP90S,EAAK80S,aAIX98D,SAAU,WACR,OAAO,KAIPlgG,GAAa,SAAUtoH,EAAO15B,GAChC,OAAO8/I,GAAI9/I,EAAU05B,IAGnBqnN,GAAe,SAAUlqP,EAAQy1C,GACnC,OAAO,WACLz1C,EAAOyW,YAAY,mBAAmB,EAAOg/B,KAG7C2lR,GAA2B,SAAUp7T,EAAQ/B,EAAMo9T,GACrD,IAAI/1Q,EAAU,SAAU1hB,GACtBy3R,EAAQz3R,EAAO3lC,IAEb+B,EAAOkO,UACTlO,EAAOkO,UAAUukQ,cAAcx0Q,EAAMqnD,GAErCtlD,EAAOsO,GAAG,QAAQ,WAChBtO,EAAOkO,UAAUukQ,cAAcx0Q,EAAMqnD,OAIvCg2Q,GAAyB,SAAUt7T,EAAQ/B,GAC7C,OAAO,SAAU6P,GACfstT,GAAyBp7T,EAAQ/B,GAAM,SAAU2lC,GAC/C91B,EAAEwF,QAAQ8tD,OAAOx9B,QAKnB71B,GAAW,SAAU/N,GACvB,IAAIu7T,EAAe,CACjB,YACA,cACA,aACA,gBAEEC,EAAe,YACfC,EAAiB,CACnB,CACEn2T,KAAM,OACNiL,KAAM,YACNuH,QAASoyO,GAAalqP,EAAQ,cAEhC,CACEsF,KAAM,SACNiL,KAAM,cACNuH,QAASoyO,GAAalqP,EAAQ,gBAEhC,CACEsF,KAAM,QACNiL,KAAM,aACNuH,QAASoyO,GAAalqP,EAAQ,eAEhC,CACEsF,KAAM,UACNiL,KAAM,eACNuH,QAASoyO,GAAalqP,EAAQ,kBAGlCA,EAAOsQ,YAAY,QAAS,CAC1BhL,KAAM,QACNu0C,KAAM4hR,IAERz7T,EAAOoQ,UAAU,QAAS,CACxB3O,KAAM,aACN8O,KAAMirT,EACN3hR,KAAM4hR,EACNC,WAAY,SAAU5tT,GACpB,IAAI+rC,EAAO/rC,EAAEwF,QAAQumC,KACrB94C,EAASyN,KAAK+sT,GAAc,SAAU9vS,EAAYhd,GAChDorC,EAAKv6B,QAAQlD,GAAG3N,GAAKD,MAAK,SAAUurC,GAClC,OAAOA,EAAKqnB,OAAOphE,EAAOkO,UAAUzP,MAAMgtB,WAIhD5X,aAAc,SAAU/F,GACtB,IAAIuF,EAAOvF,EAAEwF,QACbvS,EAASyN,KAAK+sT,GAAc,SAAU9vS,EAAYhd,GAChD2sT,GAAyBp7T,EAAQyrB,GAAY,SAAUmY,GACrDvwB,EAAK9C,KAAKirT,GACN53R,GACFvwB,EAAK9C,KAAKkb,YAMpB1qB,EAASyN,KAAK,CACZwkQ,UAAW,CACT,aACA,eAEFG,YAAa,CACX,eACA,iBAEFC,WAAY,CACV,cACA,gBAEFC,aAAc,CACZ,UACA,eAEFsoD,UAAW,CACT,eACA,iBAED,SAAU5hR,EAAM97C,GACjB+B,EAAOoQ,UAAUnS,EAAM,CACrBmjE,QAAQ,EACRxtD,QAASmmC,EAAK,GACd1pC,IAAK0pC,EAAK,GACVlmC,aAAcynT,GAAuBt7T,EAAQ/B,SAI/C29T,GAAQ,CAAE7tT,SAAUA,IAEpB8tT,GAAe,SAAU33E,GAC3B,OAAOA,EAAaA,EAAWlqP,MAAM,KAAK,GAAK,IAE7C8hU,GAAoB,SAAUx8S,EAAO4kO,GACvC,IACI7kP,EADA08T,EAAO73E,EAAaA,EAAWhgO,cAAgB,GAYnD,OAVAnjB,EAASyN,KAAK8Q,GAAO,SAAUy6B,GACzBA,EAAK16C,MAAM6kB,gBAAkB63S,IAC/B18T,EAAQ06C,EAAK16C,UAGjB0B,EAASyN,KAAK8Q,GAAO,SAAUy6B,GACxB16C,GAASw8T,GAAa9hR,EAAK16C,OAAO6kB,gBAAkB23S,GAAaE,GAAM73S,gBAC1E7kB,EAAQ06C,EAAK16C,UAGVA,GAEL28T,GAAqC,SAAUh8T,EAAQsf,GACzD,OAAO,WACL,IAAIpe,EAAOvH,KACXuH,EAAK0iC,MAAMrkC,IAAI,QAAS,MACxBS,EAAOsO,GAAG,mBAAmB,SAAUR,GACrC,IAAIo2O,EAAalkP,EAAO0pP,kBAAkB,YACtCjrP,EAAQq9T,GAAkBx8S,EAAO4kO,GACrChjP,EAAK7B,MAAMZ,GAAgB,OACtBA,GAASylP,GACZhjP,EAAKoE,KAAKu2T,GAAa33E,SAK3B+3E,GAAgB,SAAU9gP,GAC5BA,EAAUA,EAAQt5E,QAAQ,KAAM,IAAI7H,MAAM,KAC1C,IAAIqJ,EAAI83E,EAAQp4E,OAChB,MAAOM,IACL83E,EAAQ93E,GAAK83E,EAAQ93E,GAAGrJ,MAAM,KAEhC,OAAOmhF,GAEL+gP,GAAe,SAAUl8T,GAC3B,IAAIm8T,EAAsB,ukBACtBC,EAAQH,GAAcj8T,EAAOC,SAASo8T,cAAgBF,GAC1D,OAAOp7T,EAASa,IAAIw6T,GAAO,SAAUL,GACnC,MAAO,CACLz2T,KAAM,CAAEi9D,IAAKw5P,EAAK,IAClB18T,MAAO08T,EAAK,GACZ73Q,WAAyC,IAA9B63Q,EAAK,GAAGl0T,QAAQ,SAAkB,eAAiBk0T,EAAK,GAAK,QAI1EO,GAAkB,SAAUt8T,GAC9BA,EAAOoQ,UAAU,cAAc,WAC7B,IAAIkP,EAAQ48S,GAAal8T,GACzB,MAAO,CACLyB,KAAM,UACN6D,KAAM,cACNsO,QAAS,cACTpG,OAAQ8R,EACRi9S,YAAY,EACZ1oT,aAAcmoT,GAAmCh8T,EAAQsf,GACzDu4B,SAAU,SAAU/pC,GACdA,EAAEwF,QAAQrT,SAASZ,OACrBW,EAAOyW,YAAY,YAAY,EAAO3I,EAAEwF,QAAQrT,SAASZ,aAM/D8Q,GAAa,SAAUnQ,GACzBs8T,GAAgBt8T,IAEdw8T,GAAa,CAAEzuT,SAAUoC,IAEzB0tB,GAAQ,SAAUvgC,EAAQumP,GAC5B,IAAIC,EAASxjP,KAAK0/B,IAAI,GAAI6jN,GAC1B,OAAOvjP,KAAKu9B,MAAMvgC,EAASwmP,GAAUA,GAEnCC,GAAO,SAAUC,EAAUH,GAC7B,MAAI,aAAa7/O,KAAKggP,GACbnmN,GAA+B,GAAzBn/B,SAASslP,EAAU,IAAW,GAAIH,GAAa,GAAK,KAE5DG,GAELy4E,GAAsB,SAAUn9S,EAAOo9S,EAAIh+J,GAC7C,IAAIr/J,EAQJ,OAPA0B,EAASyN,KAAK8Q,GAAO,SAAUy6B,GACzBA,EAAK16C,QAAUq/J,EACjBr/J,EAAQq/J,EACC3kH,EAAK16C,QAAUq9T,IACxBr9T,EAAQq9T,MAGLr9T,GAELs9T,GAAqC,SAAU38T,EAAQsf,GACzD,OAAO,WACL,IAAIpe,EAAOvH,KACXqG,EAAOsO,GAAG,mBAAmB,SAAUR,GACrC,IAAI4wJ,EAAIg+J,EAAI74E,EAAWplP,EAEvB,GADAigK,EAAK1+J,EAAO0pP,kBAAkB,YAC1BhrF,EACF,IAAKmlF,EAAY,GAAIplP,GAASolP,GAAa,EAAGA,IAC5C64E,EAAK34E,GAAKrlF,EAAImlF,GACdplP,EAAQg+T,GAAoBn9S,EAAOo9S,EAAIh+J,GAG3Cx9J,EAAK7B,MAAMZ,GAAgB,MACtBA,GACHyC,EAAKoE,KAAKo3T,QAKdE,GAAmB,SAAU58T,GAC/B,IAAI68T,EAAyB,oCACzBC,EAAkB98T,EAAOC,SAAS88T,kBAAoBF,EAC1D,OAAO97T,EAASa,IAAIk7T,EAAgB9iU,MAAM,MAAM,SAAU+/C,GACxD,IAAIz0C,EAAOy0C,EAAM16C,EAAQ06C,EACrBvsC,EAASusC,EAAK//C,MAAM,KAKxB,OAJIwT,EAAOzK,OAAS,IAClBuC,EAAOkI,EAAO,GACdnO,EAAQmO,EAAO,IAEV,CACLlI,KAAMA,EACNjG,MAAOA,OAIT29T,GAAoB,SAAUh9T,GAChCA,EAAOoQ,UAAU,kBAAkB,WACjC,IAAIkP,EAAQs9S,GAAiB58T,GAC7B,MAAO,CACLyB,KAAM,UACN6D,KAAM,aACNsO,QAAS,aACTpG,OAAQ8R,EACRi9S,YAAY,EACZ1oT,aAAc8oT,GAAmC38T,EAAQsf,GACzDxH,QAAS,SAAUhK,GACbA,EAAEwF,QAAQrT,SAASZ,OACrBW,EAAOyW,YAAY,YAAY,EAAO3I,EAAEwF,QAAQrT,SAASZ,aAM/Do1C,GAAa,SAAUz0C,GACzBg9T,GAAkBh9T,IAEhBi9T,GAAiB,CAAElvT,SAAU0mC,IAE7ByoR,GAAkB,SAAUl9T,EAAQ65C,GACtC,IAAI/jC,EAAQ+jC,EAAK92C,OAajB,OAZAhC,EAASyN,KAAKqrC,GAAM,SAAUE,GACxBA,EAAKF,OACPE,EAAK8yM,OAAgD,IAAvCqwE,GAAgBl9T,EAAQ+5C,EAAKF,OAE7C,IAAIpuB,EAAasuB,EAAK9lC,OAClBwX,IACFsuB,EAAK8yM,QAAU7sP,EAAOkO,UAAUswO,SAAS/yN,IAEvCsuB,EAAK8yM,QACP/2O,OAGGA,GAELqnT,GAAsB,SAAUn9T,EAAQ65C,GAC1C,IAAI/jC,EAAQ+jC,EAAKv6B,QAAQvc,OAgBzB,OAfA82C,EAAKv6B,QAAQ9Q,MAAK,SAAUurC,GACtBA,EAAKF,MACPE,EAAK2iQ,QAAQygB,GAAoBn9T,EAAQ+5C,EAAKF,MAAQ,IAEnDE,EAAKF,MAAQE,EAAK95C,SAAS45C,MAC9BE,EAAK2iQ,QAAQwgB,GAAgBl9T,EAAQ+5C,EAAK95C,SAAS45C,MAAQ,GAE7D,IAAIpuB,EAAasuB,EAAK95C,SAASgU,OAC3BwX,GACFsuB,EAAK2iQ,QAAQ18S,EAAOkO,UAAUswO,SAAS/yN,IAEpCsuB,EAAK2iQ,WACR5mS,OAGGA,GAELsnT,GAAmB,SAAUp9T,GAC/B,IAAI8V,EAAQ,EACRunT,EAAa,GACbC,EAAsB,CACxB,CACE50T,MAAO,WACP4W,MAAO,CACL,CACE5W,MAAO,YACPuL,OAAQ,MAEV,CACEvL,MAAO,YACPuL,OAAQ,MAEV,CACEvL,MAAO,YACPuL,OAAQ,MAEV,CACEvL,MAAO,YACPuL,OAAQ,MAEV,CACEvL,MAAO,YACPuL,OAAQ,MAEV,CACEvL,MAAO,YACPuL,OAAQ,QAId,CACEvL,MAAO,SACP4W,MAAO,CACL,CACE5W,MAAO,OACP6H,KAAM,OACN0D,OAAQ,QAEV,CACEvL,MAAO,SACP6H,KAAM,SACN0D,OAAQ,UAEV,CACEvL,MAAO,YACP6H,KAAM,YACN0D,OAAQ,aAEV,CACEvL,MAAO,gBACP6H,KAAM,gBACN0D,OAAQ,iBAEV,CACEvL,MAAO,cACP6H,KAAM,cACN0D,OAAQ,eAEV,CACEvL,MAAO,YACP6H,KAAM,YACN0D,OAAQ,aAEV,CACEvL,MAAO,OACP6H,KAAM,OACN0D,OAAQ,UAId,CACEvL,MAAO,SACP4W,MAAO,CACL,CACE5W,MAAO,YACPuL,OAAQ,KAEV,CACEvL,MAAO,aACPuL,OAAQ,cAEV,CACEvL,MAAO,MACPuL,OAAQ,OAEV,CACEvL,MAAO,MACPuL,OAAQ,SAId,CACEvL,MAAO,YACP4W,MAAO,CACL,CACE5W,MAAO,OACP6H,KAAM,YACN0D,OAAQ,aAEV,CACEvL,MAAO,SACP6H,KAAM,cACN0D,OAAQ,eAEV,CACEvL,MAAO,QACP6H,KAAM,aACN0D,OAAQ,cAEV,CACEvL,MAAO,UACP6H,KAAM,eACN0D,OAAQ,mBAKZqnS,EAAa,SAAUngO,GACzB,IAAIthC,EAAO,GACX,GAAKshC,EAqBL,OAlBAp6E,EAASyN,KAAK2sE,GAAS,SAAUlnE,GAC/B,IAAIopC,EAAW,CACb/3C,KAAM2O,EAAOvL,MACb6H,KAAM0D,EAAO1D,MAEf,GAAI0D,EAAOqL,MACT+9B,EAASxD,KAAOyhQ,EAAWrnS,EAAOqL,WAC7B,CACL,IAAImM,EAAaxX,EAAOA,QAAU,SAAW6B,IACxC7B,EAAOA,SACVA,EAAOhW,KAAOwtB,EACd4xS,EAAW52T,KAAKwN,IAElBopC,EAASppC,OAASwX,EAClB4xB,EAAShtC,IAAM4D,EAAO5D,IAExBwpC,EAAKpzC,KAAK42C,MAELxD,GAEL0jR,EAAmB,WACrB,IAAI1jR,EAUJ,OAPIA,EAFA75C,EAAOC,SAASu9T,oBACdx9T,EAAOC,SAASw9T,cACXniB,EAAWgiB,EAAoBzhT,OAAO7b,EAAOC,SAASw9T,gBAEtDniB,EAAWgiB,GAGbhiB,EAAWt7S,EAAOC,SAASw9T,eAAiBH,GAE9CzjR,GAOT,OALA75C,EAAOsO,GAAG,QAAQ,WAChBvN,EAASyN,KAAK6uT,GAAY,SAAUppT,GAClCjU,EAAOkO,UAAUH,SAASkG,EAAOhW,KAAMgW,SAGpC,CACLxS,KAAM,OACN6d,MAAOi+S,IACP1pT,aAAc,SAAU/F,GACtB9N,EAAO8lC,KAAK,oBAAqB,CAAExyB,QAASxF,EAAEwF,WAEhDy5G,aAAc,CACZkmJ,SAAS,EACT/uN,UAAW,WACT,GAAIvqD,KAAKsG,SAASgU,OAChB,OAAOjU,EAAOkO,UAAUi2C,WAAWxqD,KAAKsG,SAASgU,SAGrDJ,aAAc,WACZ,IAAI3S,EAAOvH,KACXuH,EAAK6C,SAASuK,GAAG,QAAQ,WACvB,IAAImd,EAAY+0C,EAChB/0C,EAAavqB,EAAKjB,SAASgU,OACvBwX,IACFvqB,EAAKqS,UAAUvT,EAAOkO,UAAUswO,SAAS/yN,IACzCvqB,EAAKkgE,OAAOphE,EAAOkO,UAAUzP,MAAMgtB,KAErC+0C,EAAUt/D,EAAKjB,SAASoQ,IACpBmwD,GACFt/D,EAAKkgE,OAAOphE,EAAOgpP,kBAAkBxoL,QAI3C1oD,QAAS,WACHne,KAAKsG,SAASgU,QAChBi2O,GAAalqP,EAAQrG,KAAKsG,SAASgU,OAAnCi2O,GAEEvwP,KAAKsG,SAASoQ,KAChBrQ,EAAOyW,YAAY9c,KAAKsG,SAASoQ,SAMvCqtT,GAAoB,SAAU19T,EAAQ29T,GACxC39T,EAAOsQ,YAAY,UAAW,CAC5BhL,KAAM,UACNu0C,KAAM8jR,KAGNC,GAAoB,SAAU59T,EAAQ29T,GACxC39T,EAAOoQ,UAAU,cAAe,CAC9B3O,KAAM,aACN6D,KAAM,UACNu0C,KAAM8jR,EACNjC,WAAY,WACN17T,EAAOC,SAAS49T,wBAClBV,GAAoBn9T,EAAQrG,KAAKkgD,UAKrCwoP,GAAa,SAAUriS,GACzB,IAAI29T,EAAaP,GAAiBp9T,GAClC09T,GAAkB19T,EAAQ29T,GAC1BC,GAAkB59T,EAAQ29T,IAExBG,GAAU,CAAE/vT,SAAUs0R,IAEtB07B,GAAgB,6GAChBC,GAAkB,SAAU7iP,GAC9BA,EAAUA,EAAQt5E,QAAQ,KAAM,IAAI7H,MAAM,KAC1C,IAAIqJ,EAAI83E,EAAQp4E,OAChB,MAAOM,IACL83E,EAAQ93E,GAAK83E,EAAQ93E,GAAGrJ,MAAM,KAEhC,OAAOmhF,GAEL8iP,GAA6B,SAAUj+T,EAAQsf,EAAOmM,GACxD,OAAO,WACL,IAAIvqB,EAAOvH,KACXqG,EAAOsO,GAAG,cAAc,SAAUR,GAChC,IAAII,EAAYlO,EAAOkO,UACnB7O,EAAQ,KACZ0B,EAASyN,KAAKV,EAAEqzD,SAAS,SAAU71D,GAejC,GAdAvK,EAASyN,KAAK8Q,GAAO,SAAUy6B,GAU7B,GATItuB,EACEvd,EAAU0wK,UAAUtzK,EAAMmgB,EAAY,CAAEpsB,MAAO06C,EAAK16C,UACtDA,EAAQ06C,EAAK16C,OAGX6O,EAAU0wK,UAAUtzK,EAAMyuC,EAAK16C,SACjCA,EAAQ06C,EAAK16C,OAGbA,EACF,OAAO,KAGPA,EACF,OAAO,KAGX6B,EAAK7B,MAAMA,QAIb6+T,GAA2B,SAAUl+T,EAAQimE,GAC/C,OAAO,WACL,IAAI3mD,EAAQ,GAUZ,OATAve,EAASyN,KAAKy3D,GAAQ,SAAUp5C,GAC9BvN,EAAM7Y,KAAK,CACTnB,KAAMunB,EAAM,GACZxtB,MAAOwtB,EAAM,GACbq3B,UAAW,WACT,OAAOlkD,EAAOkO,UAAUi2C,WAAWt3B,EAAM,UAIxC,CACLprB,KAAM,UACN6D,KAAM2gE,EAAO,GAAG,GAChBz4D,OAAQ8R,EACRi9S,YAAY,EACZ1kR,SAAU,SAAU/pC,GAClB,GAAIA,EAAEwF,QAAS,CACb,IAAImiC,EAAM3nC,EAAEwF,QAAQjU,QACpB6qP,GAAalqP,EAAQy1C,EAArBy0M,KAGJr2O,aAAcoqT,GAA2Bj+T,EAAQsf,MAInDmiE,GAAiB,SAAUzhF,EAAQimE,GACrC,OAAOllE,EAASa,IAAIqkE,GAAQ,SAAUp5C,GACpC,MAAO,CACLvnB,KAAMunB,EAAM,GACZ/U,QAASoyO,GAAalqP,EAAQ6sB,EAAM,IACpCq3B,UAAW,WACT,OAAOlkD,EAAOkO,UAAUi2C,WAAWt3B,EAAM,UAK7CsxS,GAAa,SAAUn+T,GACzB,IAAIimE,EAAS+3P,GAAgBh+T,EAAOC,SAASm+T,eAAiBL,IAC9D/9T,EAAOsQ,YAAY,eAAgB,CACjChL,KAAM,SACNu0C,KAAM4nC,GAAezhF,EAAQimE,KAE/BjmE,EAAOoQ,UAAU,eAAgB8tT,GAAyBl+T,EAAQimE,KAEhEo4P,GAAe,CAAEtwT,SAAUowT,IAE3BG,GAAwB,SAAUt+T,EAAQ4mG,GAC5C,IAAItnF,EAAOi/S,EACX,GAAqB,kBAAV33N,EACT23N,EAAW33N,EAAM5sG,MAAM,UAClB,GAAI+G,EAASuqB,QAAQs7E,GAC1B,OAAOx8C,GAAQrpD,EAASa,IAAIglG,GAAO,SAAUA,GAC3C,OAAO03N,GAAsBt+T,EAAQ4mG,OAMzC,OAHAtnF,EAAQve,EAASyqB,KAAK+yS,GAAU,SAAUtgU,GACxC,MAAgB,MAATA,GAAgBA,KAAQ+B,EAAOg6C,aAEjCj5C,EAASa,IAAI0d,GAAO,SAAUrhB,GACnC,MAAgB,MAATA,EAAe,CAAEqH,KAAM,KAAQtF,EAAOg6C,UAAU/7C,OAGvDugU,GAAgB,SAAUnhR,GAC5B,OAAOA,GAA8B,MAAlBA,EAAS/3C,MAE1Bm5T,GAAgB,SAAUzkR,GAC5B,IAAI0kR,EAAanwT,GAAOyrC,GAAW,SAAUqD,EAAUh6C,GACrD,OAAQm7T,GAAcnhR,KAAcmhR,GAAcxkR,EAAU32C,EAAI,OAElE,OAAOkL,GAAOmwT,GAAY,SAAUrhR,EAAUh6C,GAC5C,OAAQm7T,GAAcnhR,IAAah6C,EAAI,GAAKA,EAAIq7T,EAAW37T,OAAS,MAGpE47T,GAAyB,SAAU3+T,EAAQ8T,GAC7C,IAAI8qT,EAAkB,CAAC,CAAEt5T,KAAM,MAC3B00C,EAAYj5C,EAASyqB,KAAKxrB,EAAOg6C,WAAW,SAAUqD,GACxD,OAAOA,EAASvpC,UAAYA,KAe9B,OAbA/S,EAASyN,KAAKwrC,GAAW,SAAUqD,GACN,WAAvBA,EAASrM,WACX4tR,EAAgBn4T,KAAK,CAAEnB,KAAM,MAE3B+3C,EAAS2J,iBACX43Q,EAAgBl3O,QAAQrqC,GAExBuhR,EAAgBn4T,KAAK42C,GAEI,UAAvBA,EAASrM,WACX4tR,EAAgBn4T,KAAK,CAAEnB,KAAM,SAG1Bs5T,GAELC,GAAmB,SAAU7+T,GAC/B,IAAI8+T,EAAoB9+T,EAAOC,SAAS8+T,oBACxC,OACSN,GADLK,EACmBR,GAAsBt+T,EAAQ8+T,GAE9BH,GAAuB3+T,EAAQ,YAGpDg/T,GAAoB,SAAUh/T,GAChCA,EAAOoQ,UAAU,SAAU,CACzB3O,KAAM,aACN8O,KAAM,SACNspC,KAAM,GACNolR,aAAc,WACZtlU,KAAKkgD,KAAK9yC,IAAI83T,GAAiB7+T,IAC/BrG,KAAKkgD,KAAKozE,gBAIZiyM,GAAa,SAAUl/T,GACzBg/T,GAAkBh/T,IAEhBm/T,GAAe,CAAEpxT,SAAUmxT,IAE3BE,GAAwB,SAAUp/T,GACpCe,EAASyN,KAAK,CACZ8kQ,KAAM,OACNE,OAAQ,SACRE,UAAW,YACXC,cAAe,gBACfM,UAAW,YACXC,YAAa,gBACZ,SAAU5uQ,EAAMrH,GACjB+B,EAAOoQ,UAAUnS,EAAM,CACrBmjE,QAAQ,EACRxtD,QAAStO,EACTuO,aAAcynT,GAAuBt7T,EAAQ/B,GAC7C6Z,QAASoyO,GAAalqP,EAAQ/B,SAIhCohU,GAAyB,SAAUr/T,GACrCe,EAASyN,KAAK,CACZ8wT,QAAS,CACP,kBACA,WAEFh6S,OAAQ,CACN,kBACA,UAEFsxD,IAAK,CACH,MACA,OAEFhvD,KAAM,CACJ,OACA,QAEF0iD,MAAO,CACL,QACA,SAEFswO,KAAM,CACJ,OACA,WAEF2kB,UAAW,CACT,aACA,aAEFC,UAAW,CACT,cACA,sBAEFC,YAAa,CACX,eACA,kBAEFtrD,aAAc,CACZ,mBACA,gBAEFx/P,OAAQ,CACN,SACA,YAED,SAAUolC,EAAM97C,GACjB+B,EAAOoQ,UAAUnS,EAAM,CACrB2V,QAASmmC,EAAK,GACd1pC,IAAK0pC,EAAK,SAIZ2lR,GAA+B,SAAU1/T,GAC3Ce,EAASyN,KAAK,CACZwlQ,WAAY,CACV,aACA,iBAEFC,UAAW,CACT,YACA,aAEFC,YAAa,CACX,cACA,iBAED,SAAUn6N,EAAM97C,GACjB+B,EAAOoQ,UAAUnS,EAAM,CACrBmjE,QAAQ,EACRxtD,QAASmmC,EAAK,GACd1pC,IAAK0pC,EAAK,GACVlmC,aAAcynT,GAAuBt7T,EAAQ/B,SAI/C0hU,GAAoB,SAAU3/T,GAChCo/T,GAAsBp/T,GACtBq/T,GAAuBr/T,GACvB0/T,GAA6B1/T,IAE3B4/T,GAAsB,SAAU5/T,GAClCe,EAASyN,KAAK,CACZ8kQ,KAAM,CACJ,OACA,OACA,UAEFE,OAAQ,CACN,SACA,SACA,UAEFE,UAAW,CACT,YACA,YACA,UAEFC,cAAe,CACb,gBACA,iBAEFM,UAAW,CACT,YACA,aAEFC,YAAa,CACX,cACA,eAEFC,aAAc,CACZ,mBACA,gBAEFsrD,YAAa,CACX,eACA,kBAEF7oP,IAAK,CACH,MACA,MACA,UAEFhvD,KAAM,CACJ,OACA,OACA,UAEF0iD,MAAO,CACL,QACA,QACA,UAEFi1P,UAAW,CACT,aACA,YACA,YAED,SAAUxlR,EAAM97C,GACjB+B,EAAOsQ,YAAYrS,EAAM,CACvBqH,KAAMy0C,EAAK,GACXxpC,KAAMtS,EACN+gB,SAAU+6B,EAAK,GACf1pC,IAAK0pC,EAAK,QAGd/5C,EAAOsQ,YAAY,aAAc,CAC/BhL,KAAM,OACNiL,KAAM,OACNuH,QAASoyO,GAAalqP,EAAQ,WAG9B6/T,GAAa,SAAU7/T,GACzB2/T,GAAkB3/T,GAClB4/T,GAAoB5/T,IAElB8/T,GAAiB,CAAE/xT,SAAU8xT,IAE7BE,GAAsB,SAAU//T,EAAQyB,GAC1C,OAAO,WACL,IAAIP,EAAOvH,KACPqmU,EAAa,WACf,IAAIC,EAAkB,SAATx+T,EAAkB,UAAY,UAC3C,QAAOzB,EAAO0L,aAAc1L,EAAO0L,YAAYu0T,MAEjD/+T,EAAKqS,UAAUysT,KACfhgU,EAAOsO,GAAG,sDAAsD,WAC9DpN,EAAKqS,SAASvT,EAAOwT,WAAawsT,UAIpCE,GAAsB,SAAUlgU,GAClCA,EAAOsQ,YAAY,OAAQ,CACzBhL,KAAM,OACNiL,KAAM,OACNyO,SAAU,SACVnL,aAAcksT,GAAoB//T,EAAQ,QAC1CqQ,IAAK,SAEPrQ,EAAOsQ,YAAY,OAAQ,CACzBhL,KAAM,OACNiL,KAAM,OACNyO,SAAU,SACVnL,aAAcksT,GAAoB//T,EAAQ,QAC1CqQ,IAAK,UAGL8vT,GAAoB,SAAUngU,GAChCA,EAAOoQ,UAAU,OAAQ,CACvBwD,QAAS,OACTC,aAAcksT,GAAoB//T,EAAQ,QAC1CqQ,IAAK,SAEPrQ,EAAOoQ,UAAU,OAAQ,CACvBwD,QAAS,OACTC,aAAcksT,GAAoB//T,EAAQ,QAC1CqQ,IAAK,UAGL+vT,GAAa,SAAUpgU,GACzBkgU,GAAoBlgU,GACpBmgU,GAAkBngU,IAEhBqgU,GAAW,CAAEtyT,SAAUqyT,IAEvBE,GAAuB,SAAUtgU,GACnC,OAAO,WACL,IAAIkB,EAAOvH,KACXqG,EAAOsO,GAAG,aAAa,SAAUR,GAC/B5M,EAAKkgE,OAAOtzD,EAAEy8O,cAEhBrpP,EAAKkgE,OAAOphE,EAAOuqP,aAGnBg2E,GAAsB,SAAUvgU,GAClCA,EAAOsQ,YAAY,YAAa,CAC9BhL,KAAM,cACNuzE,YAAY,EACZhlE,aAAcysT,GAAqBtgU,GACnCqQ,IAAK,wBAGLmwT,GAAa,SAAUxgU,GACzBugU,GAAoBvgU,IAElBygU,GAAY,CAAE1yT,SAAUyyT,IAExBE,GAAmB,WACrB3T,GAAOC,UAAY3oR,GAASqxC,IAC5BmwO,GAAUxoT,UAAY,SAAUiI,GAC9B,OAAOxF,EAASzC,UAAUiI,KAG1Bq7T,GAAmB,SAAU3gU,GAC3BA,EAAOC,SAASq4C,eAClBjU,GAASxa,UAAYshI,GAAWt+F,GAAQN,QAAQrtD,EAAWwE,SAAS2J,MAAOrN,EAAOC,SAASq4C,cAAc97B,KAAK/R,EAAS,OAAO,SAAU7C,GACtI,OAAOA,EAAIgE,WAIbg1T,GAAe,SAAU5gU,GACvBA,EAAO6rC,MACTg6Q,GAAUh6Q,KAAM,IAGhBg1R,GAAuB,SAAU7gU,GACnCA,EAAOsO,GAAG,2BAA2B,WACnCk9S,GAAW/qH,cAGX1/H,GAAU,SAAU/gE,GACtB4gU,GAAa5gU,GACb6gU,GAAqB7gU,GACrB2gU,GAAiB3gU,GACjB0gU,KACArC,GAAatwT,SAAS/N,GACtB47T,GAAM7tT,SAAS/N,GACf8/T,GAAe/xT,SAAS/N,GACxBqgU,GAAStyT,SAAS/N,GAClBi9T,GAAelvT,SAAS/N,GACxBw8T,GAAWzuT,SAAS/N,GACpB89T,GAAQ/vT,SAAS/N,GACjBygU,GAAU1yT,SAAS/N,GACnBm/T,GAAapxT,SAAS/N,IAEpB8gU,GAAiB,CAAEzyT,MAAO0yD,IAE1BggQ,GAAapQ,GAAetuT,OAAO,CACrC8lT,OAAQ,SAAUt+R,GAChB,IAAI5pB,EAAU0V,EAAMD,EAAM4J,EAAOm6S,EAAgBrnS,EAAOC,EAAQsT,EAAMo0R,EAAgB1mT,EAAMwC,EAAG7Z,EAAGglU,EAAMC,EAAMjH,EAAcL,EAAgBvsT,EAAO8zT,EAAUC,EAAU/iJ,EAAQgjJ,EAAQxzI,EAAMo0E,EAGzLq/D,EAAcC,EAAeC,EAAgBC,EAAiBC,EAAahzT,EAF3EizT,EAAY,GACZC,EAAa,GAEjB1hU,EAAW4pB,EAAU5pB,SACrBqf,EAAQuK,EAAUvK,QAAQ/Q,OAAO,YACjCkrT,EAAiB5vS,EAAUg1R,aAC3BnpS,EAAOzV,EAASuiD,SAAWliD,KAAKg3B,KAAKh3B,KAAKw9B,KAAKxe,EAAMvc,SACrD4S,EAAOrV,KAAKg3B,KAAKhY,EAAMvc,OAAS2S,GAChCwrT,EAAWjhU,EAASihU,UAAYjhU,EAAS4gB,SAAW,EACpDsgT,EAAWlhU,EAASkhU,UAAYlhU,EAAS4gB,SAAW,EACpDu9J,EAASn+K,EAASm+K,QAAUn+K,EAASmN,MACrCg0T,EAASnhU,EAASmhU,QAAUnhU,EAASmN,MACrCusT,EAAiB9vS,EAAUq4R,WAC3Buf,EAAc,gBAAiBxhU,EAAWA,EAASwhU,YAAc53S,EAAU25I,QACvE4a,GAA4B,kBAAXA,IACnBA,EAAS,CAACA,IAERgjJ,GAA4B,kBAAXA,IACnBA,EAAS,CAACA,IAEZ,IAAKvrT,EAAI,EAAGA,EAAIH,EAAMG,IACpB6rT,EAAUj7T,KAAK,GAEjB,IAAKzK,EAAI,EAAGA,EAAI2Z,EAAM3Z,IACpB2lU,EAAWl7T,KAAK,GAElB,IAAKzK,EAAI,EAAGA,EAAI2Z,EAAM3Z,IACpB,IAAK6Z,EAAI,EAAGA,EAAIH,EAAMG,IAAK,CAEzB,GADAxC,EAAOiM,EAAMtjB,EAAI0Z,EAAOG,IACnBxC,EACH,MAEF0mT,EAAiB1mT,EAAKwrS,aACtBwiB,EAAetH,EAAe5W,KAC9Bme,EAAgBvH,EAAe3W,KAC/Bse,EAAU7rT,GAAKwrT,EAAeK,EAAU7rT,GAAKwrT,EAAeK,EAAU7rT,GACtE8rT,EAAW3lU,GAAKslU,EAAgBK,EAAW3lU,GAAKslU,EAAgBK,EAAW3lU,GAI/E,IADAulU,EAAiB9H,EAAexW,OAAS0W,EAAeryR,KAAOqyR,EAAevjK,MACzEw3B,EAAO,EAAG/3K,EAAI,EAAGA,EAAIH,EAAMG,IAC9B+3K,GAAQ8zI,EAAU7rT,IAAMA,EAAI,EAAIqrT,EAAW,GAC3CK,IAAmB1rT,EAAI,EAAIqrT,EAAW,GAAKQ,EAAU7rT,GAGvD,IADA2rT,EAAkB/H,EAAevW,OAASyW,EAAepyR,IAAMoyR,EAAe58Q,OACzEilN,EAAO,EAAGhmQ,EAAI,EAAGA,EAAI2Z,EAAM3Z,IAC9BgmQ,GAAQ2/D,EAAW3lU,IAAMA,EAAI,EAAImlU,EAAW,GAC5CK,IAAoBxlU,EAAI,EAAImlU,EAAW,GAAKQ,EAAW3lU,GAazD,GAXA4xL,GAAQ+rI,EAAeryR,KAAOqyR,EAAevjK,MAC7C4rG,GAAQ23D,EAAepyR,IAAMoyR,EAAe58Q,OAC5CpX,EAAO,GACPA,EAAKw9Q,KAAOv1H,GAAQ6rI,EAAe/4T,EAAI+4T,EAAexW,QACtDt9Q,EAAKy9Q,KAAOphD,GAAQy3D,EAAe/9T,EAAI+9T,EAAevW,QACtDv9Q,EAAKo9Q,SAAWp9Q,EAAKw9Q,KAAOsW,EAAe7zR,OAC3CD,EAAKq9Q,SAAWr9Q,EAAKy9Q,KAAOqW,EAAe5zR,OAC3CF,EAAKw9Q,KAAO7iT,KAAKC,IAAIolC,EAAKw9Q,KAAMsW,EAAe7W,MAC/Cj9Q,EAAKy9Q,KAAO9iT,KAAKC,IAAIolC,EAAKy9Q,KAAMqW,EAAe5W,MAC/Cl9Q,EAAKw9Q,KAAO7iT,KAAKssB,IAAI+Y,EAAKw9Q,KAAMsW,EAAehX,eAC/C98Q,EAAKy9Q,KAAO9iT,KAAKssB,IAAI+Y,EAAKy9Q,KAAMqW,EAAe/W,iBAC3C+W,EAAejX,YAAe78Q,EAAKw9Q,OAASsW,EAAetW,MAAQx9Q,EAAKy9Q,OAASqW,EAAerW,KAApG,CAmBA,IAAIwe,EALAnI,EAAejX,aACjB78Q,EAAO9b,EAAUg1R,WAAWl5Q,GAC5BA,EAAKo9Q,SAAWp9Q,EAAKw9Q,KAAOsW,EAAe7zR,OAC3CD,EAAKq9Q,SAAWr9Q,EAAKy9Q,KAAOqW,EAAe5zR,QAI3C+7R,EADqB,UAAnB3hU,EAASsiD,MACH,EAEAi/Q,EAAkB,EAAIlhU,KAAKi6B,MAAMinS,EAAkB7rT,GAAQ,EAErE,IAAIkkT,EAAY,EACZgI,EAAa5hU,EAAS4hU,WAC1B,GAAIA,EACF,IAAKhsT,EAAI,EAAGA,EAAIgsT,EAAW9+T,OAAQ8S,IACjCgkT,GAAagI,EAAWhsT,QAG1BgkT,EAAYnkT,EAEd,IAAIw9J,EAAQquJ,EAAiB1H,EAC7B,IAAKhkT,EAAI,EAAGA,EAAIH,EAAMG,IACpB6rT,EAAU7rT,IAAMgsT,EAAaA,EAAWhsT,GAAKq9J,EAAQA,EAGvD,IADA+tJ,EAAOtH,EAAepyR,IACjBvrC,EAAI,EAAGA,EAAI2Z,EAAM3Z,IAAK,CAGzB,IAFAglU,EAAOrH,EAAeryR,KACtBjV,EAASsvS,EAAW3lU,GAAK4lU,EACpB/rT,EAAI,EAAGA,EAAIH,EAAMG,IAAK,CAOzB,GALEpH,EADEgzT,EACIzlU,EAAI0Z,EAAOA,EAAO,EAAIG,EAEtB7Z,EAAI0Z,EAAOG,EAEnBxC,EAAOiM,EAAM7Q,IACR4E,EACH,MAEF2mT,EAAe3mT,EAAKpT,SACpB85T,EAAiB1mT,EAAKwrS,aACtBzsR,EAAQ9xB,KAAKssB,IAAI80S,EAAU7rT,GAAIkkT,EAAetX,eAC9CsX,EAAelkT,EAAImrT,EACnBjH,EAAe/9T,EAAIilU,EACnB7zT,EAAQ4sT,EAAa57I,SAAWA,EAASA,EAAOvoK,IAAMuoK,EAAO,GAAK,MACpD,WAAVhxK,EACF2sT,EAAelkT,EAAImrT,EAAO5uS,EAAQ,EAAI2nS,EAAer5T,EAAI,EACtC,UAAV0M,EACT2sT,EAAelkT,EAAImrT,EAAO5uS,EAAQ2nS,EAAer5T,EAC9B,YAAV0M,IACT2sT,EAAer5T,EAAI0xB,GAErBhlB,EAAQ4sT,EAAaoH,SAAWA,EAASA,EAAOvrT,IAAMurT,EAAO,GAAK,MACpD,WAAVh0T,EACF2sT,EAAe/9T,EAAIilU,EAAO5uS,EAAS,EAAI0nS,EAAer+T,EAAI,EACvC,WAAV0R,EACT2sT,EAAe/9T,EAAIilU,EAAO5uS,EAAS0nS,EAAer+T,EAC/B,YAAV0R,IACT2sT,EAAer+T,EAAI22B,GAErBhf,EAAKwrS,WAAWkb,GAChBiH,GAAQ5uS,EAAQ8uS,EACZ7tT,EAAK80S,QACP90S,EAAK80S,SAGT8Y,GAAQ5uS,EAAS8uS,QA1EjB,GAJAx7R,EAAKjlC,EAAIilC,EAAKw9Q,KACdx9Q,EAAKjqC,EAAIiqC,EAAKy9Q,KACdv5R,EAAUg1R,WAAWl5Q,GACrBhsC,KAAKwuT,OAAOt+R,GACgB,OAAxBA,EAAUo6R,UAAoB,CAChC,IAAIY,EAAah7R,EAAU9lB,SACvB8gT,IACFA,EAAWZ,UAAY,KACvBY,EAAWsD,cA2EjB2Z,GAAW/U,GAAO1qT,OAAO,CAC3BmiT,WAAY,WACV,IAAItjT,EAAOvH,KAGX,OAFAuH,EAAKiG,QAAQJ,IAAI,UACjB7F,EAAKolT,UAAW,EACT,eAAiBplT,EAAKmtE,IAAM,YAAcntE,EAAKiG,QAAU,yBAA2BjG,EAAKjB,SAASiJ,KAAO,iBAAqB,+BAEvIyoB,IAAK,SAAUA,GACbh4B,KAAK0d,QAAQsa,IAAMA,GAErB/oB,KAAM,SAAUA,EAAMxF,GACpB,IAAIlC,EAAOvH,KAAM0T,EAAO1T,KAAK0d,QAAQwa,cAAcnuB,SAAS2J,KAW5D,OAVKA,GAKHA,EAAKrI,UAAY4D,EACbxF,GACFA,KANF8gC,EAASnQ,YAAW,WAClB7yB,EAAK0H,KAAKA,MAQPjP,QAIPooU,GAAUhV,GAAO1qT,OAAO,CAC1Bi5H,KAAM,SAAUr7H,GACd,IAAIiB,EAAOvH,KACXuH,EAAKgoC,OAAOjpC,GACZiB,EAAKiG,QAAQJ,IAAI,UAAUA,IAAI,WAC/B7F,EAAKolT,UAAW,GAElB0b,SAAU,SAAU/vT,GAClBtY,KAAKwN,QAAQwN,OAAO,SACpBhb,KAAKwN,QAAQwN,OAAO,WACpBhb,KAAKwN,QAAQwN,OAAO,WACpBhb,KAAKwN,QAAQJ,IAAIkL,IAEnB2oS,KAAM,SAAUh3Q,GACdjqC,KAAKiqC,MAAMrkC,IAAI,OAAQqkC,IAEzB4gR,WAAY,WACV,IAAItjT,EAAOvH,KAAMuX,EAAShQ,EAAKygT,YAC/B,MAAO,YAAczgT,EAAKmtE,IAAM,YAAcntE,EAAKiG,QAA5C,cAA2EjG,EAAKmtE,IAAM,UAAYntE,EAAKI,OAAOJ,EAAK0iC,MAAMtkC,IAAI,SAA7H,iDAAgM4R,EAAS,OAASA,EAAlN,qCAETy4B,WAAY,WACV,IAAIzoC,EAAOvH,KAaX,OAZAuH,EAAK0iC,MAAMt1B,GAAG,eAAe,SAAUR,GACrC5M,EAAKmW,MAAM,QAAQE,WAAWxS,KAAO7D,EAAKI,OAAOwM,EAAEzO,OAC/C6B,EAAK0iC,MAAMtkC,IAAI,aACjB4B,EAAK8iT,sBAGT9iT,EAAK0iC,MAAMt1B,GAAG,eAAe,SAAUR,GACrC5M,EAAKiG,QAAQgH,OAAO,WAAYL,EAAEzO,OAC9B6B,EAAK0iC,MAAMtkC,IAAI,aACjB4B,EAAK8iT,sBAGF9iT,EAAKgoC,YAIZ+4R,GAAQlV,GAAO1qT,OAAO,CACxBi5H,KAAM,SAAUr7H,GACd,IAAIiB,EAAOvH,KACXuH,EAAKgoC,OAAOjpC,GACZiB,EAAKiG,QAAQJ,IAAI,UAAUA,IAAI,SAC/B7F,EAAKolT,UAAW,EACZrmT,EAASwN,WACXvM,EAAKiG,QAAQJ,IAAI,cAEf9G,EAASiiU,QACXhhU,EAAKiG,QAAQJ,IAAI,WAGrBw7S,eAAgB,WACd,IAAIrhT,EAAOvH,KAAMklT,EAAa39S,EAAKgoC,SACnC,GAAIhoC,EAAKjB,SAASwN,UAAW,CAC3B,IAAIqY,EAAOk4R,GAAMr+P,QAAQz+C,EAAKmW,SAC1ByO,EAAKsM,MAAQysR,EAAW+D,OAC1B/D,EAAWsE,KAAOtE,EAAW+D,KAC7B1hT,EAAKiG,QAAQJ,IAAI,cAEnB7F,EAAKmW,QAAQ7N,MAAM4oB,MAAQysR,EAAWsE,KAAO,KAC7CtE,EAAWsjB,UAAYtjB,EAAWnjT,EAAImjT,EAAWuE,KAAO9iT,KAAKC,IAAIs+S,EAAWgE,KAAM7E,GAAMr+P,QAAQz+C,EAAKmW,SAASgb,QAEhH,OAAOwsR,GAETv4Q,QAAS,WACP,IAAIplC,EAAOvH,KAIX,OAHKuH,EAAKjB,SAASwN,YACjBvM,EAAKmW,QAAQ7N,MAAMuoT,WAAa7wT,EAAK29S,aAAanjT,EAAI,MAEjDwF,EAAKgoC,UAEd84R,SAAU,SAAU/vT,GAClBtY,KAAKwN,QAAQwN,OAAO,SACpBhb,KAAKwN,QAAQwN,OAAO,WACpBhb,KAAKwN,QAAQwN,OAAO,WACpBhb,KAAKwN,QAAQJ,IAAIkL,IAEnBuyS,WAAY,WACV,IACI4d,EAAYC,EADZnhU,EAAOvH,KACcs5H,EAAQ/xH,EAAKjB,SAASgzH,MAC3C3tH,EAAOpE,EAAKjB,SAAS2I,KAAO1H,EAAKjB,SAAS2I,KAAO1H,EAAKI,OAAOJ,EAAK0iC,MAAMtkC,IAAI,SAOhF,OANK2zH,IAAUovM,EAAUnhU,EAAKjB,SAASoiU,WACrCD,EAAalhU,EAAKolD,UAAUr3C,KAAK,IAAMozT,GAAS,GAC5CD,IACFnvM,EAAQmvM,EAAW/zP,MAGnB4kD,EACK,cAAgB/xH,EAAKmtE,IAAM,YAAcntE,EAAKiG,QAAU,KAAO8rH,EAAQ,SAAWA,EAAQ,IAAM,IAAM,IAAM3tH,EAAO,WAErH,aAAepE,EAAKmtE,IAAM,YAAcntE,EAAKiG,QAAU,KAAO7B,EAAO,WAE9EqkC,WAAY,WACV,IAAIzoC,EAAOvH,KAOX,OANAuH,EAAK0iC,MAAMt1B,GAAG,eAAe,SAAUR,GACrC5M,EAAKgzH,UAAUhzH,EAAKI,OAAOwM,EAAEzO,QACzB6B,EAAK0iC,MAAMtkC,IAAI,aACjB4B,EAAK8iT,sBAGF9iT,EAAKgoC,YAIZo5R,GAAYhb,GAAUjlT,OAAO,CAC/B6lC,SAAU,CACRtwB,KAAM,UACN1K,OAAQ,QAEVouH,KAAM,SAAUr7H,GACd,IAAIiB,EAAOvH,KACXuH,EAAKgoC,OAAOjpC,GACZiB,EAAKiG,QAAQJ,IAAI,YAEnBkiC,WAAY,WACV,IAAI/nC,EAAOvH,KAIX,OAHAuH,EAAKoe,QAAQ9Q,MAAK,SAAU6E,GAC1BA,EAAKlM,QAAQJ,IAAI,mBAEZ7F,EAAKgoC,YAIZq5R,GAAUD,GAAUjgU,OAAO,CAC7B6lC,SAAU,CACRtwB,KAAM,UACN6vS,aAAc,UACd7O,UAAU,EACV/yR,SAAU,CAAEpkB,KAAM,iBAItB,SAAS+gU,GAAYl3T,EAAMvH,GACzB,MAAOuH,EAAM,CACX,GAAIvH,IAAWuH,EACb,OAAO,EAETA,EAAOA,EAAKpH,WAEd,OAAO,EAET,IAAIu+T,GAAa7R,GAAOvuT,OAAO,CAC7Bi5H,KAAM,SAAUr7H,GACd,IAAIiB,EAAOvH,KACXuH,EAAKwhU,aAAc,EACnBxhU,EAAKgoC,OAAOjpC,GACZA,EAAWiB,EAAKjB,SAChBiB,EAAKiG,QAAQJ,IAAI,WACb9G,EAASs8T,YACXr7T,EAAKiG,QAAQJ,IAAI,eAEnB7F,EAAKs/L,KAAK,YAAY,GACtBt/L,EAAK0iC,MAAMrkC,IAAI,OAAQU,EAAS45C,MAAQ34C,EAAKyuB,WAE/CiiS,SAAU,SAAUzjT,GAClB,IACI0rC,EADA34C,EAAOvH,KAEX,GAAIuH,EAAK24C,MAAQ34C,EAAK24C,KAAK6iQ,YAAwB,IAAXvuS,EACtC,OAAOjN,EAAKuxT,WAETvxT,EAAK24C,OACRA,EAAO34C,EAAK0iC,MAAMtkC,IAAI,SAAW,GACjC4B,EAAKiG,QAAQJ,IAAI,UACb8yC,EAAK92C,OACP82C,EAAO,CACLp4C,KAAM,OACNkhU,SAAS,EACTrjT,MAAOu6B,IAGTA,EAAKp4C,KAAOo4C,EAAKp4C,MAAQ,OACzBo4C,EAAK8oR,SAAU,GAEZ9oR,EAAKK,SAGRh5C,EAAK24C,KAAOA,EAAK91C,OAAO7C,GAAMimC,OAAO+S,WAFrCh5C,EAAK24C,KAAOj3B,EAAS/S,OAAOgqC,GAAM91C,OAAO7C,GAAMg5C,WAIjDh5C,EAAK4kC,KAAK,cACV5kC,EAAK24C,KAAK0gQ,SACVr5S,EAAK24C,KAAKvrC,GAAG,UAAU,SAAUR,GAC3BA,EAAEwF,QAAQvP,WAAa7C,EAAK24C,OAC9B/rC,EAAE24B,kBACFvlC,EAAKsT,QACLtT,EAAKuxT,eAGTvxT,EAAK24C,KAAKvrC,GAAG,UAAU,WACrBpN,EAAKsT,WAEPtT,EAAK24C,KAAKvrC,GAAG,aAAa,SAAUR,GACnB,SAAXA,EAAErM,MAAmBqM,EAAEwF,QAAQvP,WAAa7C,GAC9CA,EAAKiG,QAAQwN,OAAO,gBAElB7G,EAAEwF,UAAYpS,EAAK24C,OACrB34C,EAAK0hU,WAAsB,SAAX90T,EAAErM,MAClBP,EAAKiG,QAAQgH,OAAO,SAAqB,SAAXL,EAAErM,OAElCP,EAAKs/L,KAAK,WAAuB,SAAX1yL,EAAErM,SACvBqkC,KAAK,SAEV5kC,EAAK24C,KAAK1S,OACVjmC,EAAK24C,KAAKglQ,WAAW,CAAEn+S,EAAGQ,EAAK29S,aAAan+S,IAC5CQ,EAAK24C,KAAKvT,UACVplC,EAAK24C,KAAKq+L,QAAQh3O,EAAKmW,QAASnW,EAAKsiK,QAAU,CAC7C,QACA,SACE,CACF,QACA,UAEF,IAAIq/J,EAAiB3hU,EAAK24C,KAAKglQ,aAC3BikB,EAAa5hU,EAAKwnC,IAAI1qC,SAASupC,IAAMrmC,EAAK29S,aAAanjT,EACvDonU,EAAaD,EAAe7mU,GAAK8mU,EAAaD,EAAe7mU,EAAI6mU,EAAennU,GAClFwF,EAAKiG,QAAQJ,IAAI,gBAEnB7F,EAAK4kC,KAAK,aAEZ2sR,SAAU,WACR,IAAIvxT,EAAOvH,KACPuH,EAAK24C,OACP34C,EAAK24C,KAAKv6B,QAAQ9Q,MAAK,SAAUurC,GAC3BA,EAAK04Q,UACP14Q,EAAK04Q,cAGTvxT,EAAK24C,KAAKzS,SAGdw7R,WAAY,SAAUh/R,GACpBjqC,KAAKwN,QAAQgH,OAAO,SAAUy1B,IAEhC4gR,WAAY,WACV,IAC+BxxR,EAD3B9xB,EAAOvH,KAAM2I,EAAKpB,EAAKmtE,IAAKn9D,EAAShQ,EAAKygT,YAC1CpxS,EAAOrP,EAAKjB,SAASsQ,KACrBjL,EAAOpE,EAAK0iC,MAAMtkC,IAAI,QACtB0xT,EAAW,GAiBf,OAhBAh+R,EAAQ9xB,EAAKjB,SAAS+yB,MAClBA,GACFziB,EAAO,OACc,kBAAVyiB,IACTA,EAAQ9zB,EAAW4B,OAAOmvL,aAAej9J,EAAM,GAAKA,EAAM,IAE5DA,EAAQ,mCAAqCA,EAAQ,QAErDA,EAAQ,GAEN1tB,IACFpE,EAAKiG,QAAQJ,IAAI,gBACjBiqT,EAAW,gBAAkB9/S,EAAS,QAAUhQ,EAAKI,OAAOgE,GAAQ,WAEtEiL,EAAOrP,EAAKjB,SAASsQ,KAAOW,EAAS,OAASA,EAAS,KAAOX,EAAO,GACrErP,EAAKs/L,KAAK,OAAQt/L,EAAK6C,mBAAoBw+T,GAAU,WAAa,UAC3D,YAAcjgU,EAAK,YAAcpB,EAAKiG,QAAU,oCAAsC7E,EAAtF,iBAAmHA,EAAK,2DAA6DiO,EAAO,aAAeA,EAAO,IAAMyiB,EAAQ,QAAU,IAAMg+R,EAAW,cAAgB9/S,EAA3Q,8BAET+3B,WAAY,WACV,IAAI/nC,EAAOvH,KA6BX,OA5BAuH,EAAKoN,GAAG,SAAS,SAAUR,GACrBA,EAAEwF,UAAYpS,GAAQshU,GAAY10T,EAAE6C,OAAQzP,EAAKmW,WACnDnW,EAAKsT,QACLtT,EAAK0wT,UAAU9jT,EAAE0yL,MACb1yL,EAAE0yL,MACJt/L,EAAK24C,KAAKv6B,QAAQ/Q,OAAO,YAAY,GAAGiG,YAI9CtT,EAAKoN,GAAG,cAAc,SAAUR,GAC9B,IAEIi1T,EAFAC,EAAWl1T,EAAEwF,QACbvP,EAAS7C,EAAK6C,SAEdi/T,GAAYj/T,GAAUi/T,aAAoBP,IAAcO,EAASj/T,WAAaA,IAChFA,EAAOub,QAAQ/Q,OAAO,cAAcC,MAAK,SAAU6E,GAC7CA,EAAKo/S,UAAYp/S,IAAS2vT,IACxB3vT,EAAKwmC,MAAQxmC,EAAKwmC,KAAK6iQ,YACzBqmB,GAAwB,GAE1B1vT,EAAKo/S,eAGLsQ,IACFC,EAASxuT,QACTwuT,EAASpR,gBAIR1wT,EAAKgoC,UAEdS,WAAY,WACV,IAAIzoC,EAAOvH,KAOX,OANAuH,EAAK0iC,MAAMt1B,GAAG,eAAe,WACvBpN,EAAK24C,MACP34C,EAAK24C,KAAKllC,SAEZzT,EAAK24C,KAAO,QAEP34C,EAAKgoC,UAEdv0B,OAAQ,WACNhb,KAAKuvC,SACDvvC,KAAKkgD,MACPlgD,KAAKkgD,KAAKllC,YAKZsuT,GAAOzX,GAAWnpT,OAAO,CAC3B6lC,SAAU,CACR6/Q,YAAa,WACbl6Q,OAAQ,EACR3gC,OAAQ,QACR0K,KAAM,cACNy0S,SAAU,OACVzT,UAAU,GAEZt9K,KAAM,SAAUr7H,GACd,IAAIiB,EAAOvH,KAOX,GANAsG,EAASs5E,UAAW,EACpBt5E,EAAS8+S,qBAAsB,EACD,oBAAnB9+S,EAASqf,QAClBrf,EAASijU,aAAejjU,EAASqf,MACjCrf,EAASqf,MAAQ,IAEfrf,EAAS8sH,aAAc,CACzB,IAAIztG,EAAQrf,EAASqf,MACjBjc,EAAIic,EAAMvc,OACd,MAAOM,IACLic,EAAMjc,GAAKtC,EAASsB,OAAO,GAAIpC,EAAS8sH,aAAcztG,EAAMjc,IAGhEnC,EAAKgoC,OAAOjpC,GACZiB,EAAKiG,QAAQJ,IAAI,QACb9G,EAAS0iU,SAA2B,KAAhBt+R,GAASrS,IAC/B9wB,EAAKiG,QAAQJ,IAAI,YAGrBu/B,QAAS,WAKP,OAJA3sC,KAAKwN,QAAQgH,OAAO,cAAc,GAClCxU,KAAKuvC,SACLvvC,KAAK0d,QAAQ7N,MAAM6oB,OAAS,GAC5B14B,KAAK0d,MAAM,QAAQ7N,MAAM6oB,OAAS,GAC3B14B,MAETqzC,OAAQ,WACN,IAAI9rC,EAAOvH,KACXuH,EAAKu/L,UACLv/L,EAAK4kC,KAAK,WAEZqxF,KAAM,WACJ,IACIkkB,EAAM3hJ,EADNwH,EAAOvH,KAEX,SAASwpU,IACHjiU,EAAKwkD,WACPxkD,EAAKwkD,SAASte,OACdlmC,EAAKwkD,SAAW,MAGpBhsD,EAAUwH,EAAKjB,SAASijU,aACnBxpU,IAGAwH,EAAKwkD,WACRxkD,EAAKwkD,SAAW,IAAID,GAASvkD,EAAKmW,MAAM,SAAS,GACrB,IAAxBnW,EAAKoe,QAAQvc,QACf7B,EAAKwkD,SAASve,OACdjmC,EAAK4kC,KAAK,YAEV5kC,EAAKwkD,SAASve,KAAK,KAAK,WACtBjmC,EAAKoe,QAAQ3K,SACbzT,EAAK4kC,KAAK,cAGd5kC,EAAKoN,GAAG,aAAc60T,IAExBjiU,EAAKkiU,YAAc/nL,GAAO,IAAIhqI,MAAOC,UACrCpQ,EAAKjB,SAASijU,cAAa,SAAU5jT,GACd,IAAjBA,EAAMvc,OAIN7B,EAAKkiU,cAAgB/nL,IAGzBn6I,EAAKmW,QAAQ7N,MAAM4oB,MAAQ,GAC3BlxB,EAAKmW,MAAM,QAAQ7N,MAAM4oB,MAAQ,GACjC+wS,IACAjiU,EAAKoe,QAAQ3K,SACbzT,EAAKmW,MAAM,QAAQrS,UAAY,GAC/B9D,EAAK6F,IAAIuY,GACTpe,EAAK+rH,YACL/rH,EAAK4kC,KAAK,WAbR5kC,EAAKkmC,YAgBXq5J,QAAS,WACP,IAAIv/L,EAAOvH,KAEX,OADAA,KAAKsV,KAAK,YAAYjS,KAAK,YACpBkE,EAAKgoC,UAEdu7Q,UAAW,WACT,IAAIvjT,EAAOvH,KA0BX,OAzBAuH,EAAKoe,QAAQ9Q,MAAK,SAAU6E,GAC1B,IAAIpT,EAAWoT,EAAKpT,SACpB,GAAIA,EAASsQ,MAAQtQ,EAAS+yB,OAAS/yB,EAAS44E,WAE9C,OADA33E,EAAKmiU,WAAY,GACV,KAGPniU,EAAKjB,SAASijU,cAChBhiU,EAAKoN,GAAG,cAAc,WAChBpN,EAAKjB,SAASijU,cAChBhiU,EAAKi2H,UAIXj2H,EAAKoN,GAAG,aAAa,SAAUR,GACzBA,EAAEwF,UAAYpS,IACD,SAAX4M,EAAErM,KACJyiC,EAASnQ,YAAW,WAClB7yB,EAAKiG,QAAQJ,IAAI,QAChB,GAEH7F,EAAKiG,QAAQwN,OAAO,UAInBzT,EAAKgoC,YAIZo6R,GAAUb,GAAWpgU,OAAO,CAC9Bi5H,KAAM,SAAUr7H,GACd,IACIuN,EAAQkqC,EAAUy9P,EAAcouB,EADhCriU,EAAOvH,KAEX,SAAS6+O,EAAYgrF,GACnB,IAAK,IAAIngU,EAAI,EAAGA,EAAImgU,EAAWzgU,OAAQM,IAAK,CAE1C,GADAq0C,EAAW8rR,EAAWngU,GAAGq0C,UAAYz3C,EAASZ,QAAUmkU,EAAWngU,GAAGhE,MAClEq4C,EAGF,OAFAy9P,EAAeA,GAAgBquB,EAAWngU,GAAGiC,KAC7CpE,EAAK0iC,MAAMrkC,IAAI,QAASikU,EAAWngU,GAAGhE,QAC/B,EAET,GAAImkU,EAAWngU,GAAGw2C,MACZ2+L,EAAYgrF,EAAWngU,GAAGw2C,MAC5B,OAAO,GAKf34C,EAAKgoC,OAAOjpC,GACZA,EAAWiB,EAAKjB,SAChBiB,EAAKuiU,QAAUj2T,EAASvN,EAASuN,OAC7BA,IAC4B,qBAAnBvN,EAASZ,OAClBm5O,EAAYhrO,IAETkqC,GAAYlqC,EAAOzK,OAAS,IAC/BoyS,EAAe3nS,EAAO,GAAGlI,KACzBpE,EAAK0iC,MAAMrkC,IAAI,QAASiO,EAAO,GAAGnO,QAEpC6B,EAAK0iC,MAAMrkC,IAAI,OAAQiO,IAEzBtM,EAAK0iC,MAAMrkC,IAAI,OAAQU,EAASqF,MAAQ6vS,GACxCj0S,EAAKiG,QAAQJ,IAAI,WACjB7F,EAAKoN,GAAG,UAAU,SAAUR,GAC1B,IAAIuF,EAAOvF,EAAEwF,QACTiwT,IACFz1T,EAAE04C,YAAc+8Q,GAEdtjU,EAAS67J,SACXzoJ,EAAK+tD,QAAQ/tD,EAAK+tD,UAElBlgE,EAAK7B,MAAMyO,EAAEwF,QAAQjU,SAEvBkkU,EAAelwT,MAGnBhU,MAAO,SAAUA,GACf,GAAyB,IAArByD,UAAUC,OACZ,OAAOpJ,KAAKiqC,MAAMtkC,IAAI,SAExB,GAAqB,qBAAVD,EACT,OAAO1F,KAET,SAAS+pU,EAAYl2T,GACnB,OAAO6P,GAAO7P,GAAQ,SAAUiN,GAC9B,OAAOA,EAAEo/B,KAAO6pR,EAAYjpT,EAAEo/B,MAAQp/B,EAAEpb,QAAUA,KAYtD,OATI1F,KAAKsG,SAASuN,OACZk2T,EAAY/pU,KAAKsG,SAASuN,QAC5B7T,KAAKiqC,MAAMrkC,IAAI,QAASF,GACL,OAAVA,GACT1F,KAAKiqC,MAAMrkC,IAAI,QAAS,MAG1B5F,KAAKiqC,MAAMrkC,IAAI,QAASF,GAEnB1F,MAETgwC,WAAY,WACV,IAAIzoC,EAAOvH,KACX,SAASgqU,EAAyB9pR,EAAMx6C,GAClCw6C,aAAgBopR,IAClBppR,EAAKv6B,QAAQ9Q,MAAK,SAAU6E,GACrBA,EAAKuwT,YACRvwT,EAAK+tD,OAAO/tD,EAAKhU,UAAYA,MAKrC,SAASwkU,EAAgBL,EAAYnkU,GACnC,IAAIykU,EACJ,GAAKN,EAGL,IAAK,IAAIngU,EAAI,EAAGA,EAAImgU,EAAWzgU,OAAQM,IAAK,CAC1C,GAAImgU,EAAWngU,GAAGhE,QAAUA,EAC1B,OAAOmkU,EAAWngU,GAEpB,GAAImgU,EAAWngU,GAAGw2C,OAChBiqR,EAAeD,EAAgBL,EAAWngU,GAAGw2C,KAAMx6C,GAC/CykU,GACF,OAAOA,GAgBf,OAXA5iU,EAAKoN,GAAG,QAAQ,SAAUR,GACxB61T,EAAyB71T,EAAEwF,QAASpS,EAAK7B,YAE3C6B,EAAK0iC,MAAMt1B,GAAG,gBAAgB,SAAUR,GACtC,IAAIg2T,EAAeD,EAAgB3iU,EAAK0iC,MAAMtkC,IAAI,QAASwO,EAAEzO,OACzDykU,EACF5iU,EAAKoE,KAAKw+T,EAAax+T,MAEvBpE,EAAKoE,KAAKpE,EAAKjB,SAASqF,SAGrBpE,EAAKgoC,YAIZ66R,GAAkB,SAAU1wT,EAAMuwB,GACpC,IAAIsgB,EAAY7wC,EAAK2wT,WACrB,GAAI9/Q,EAAW,CACb,IAAI+/Q,EAAU5wT,EAAKgE,MAAM,QACzB4sT,EAAQ3tT,aAAa,QAAS4tC,GAC1BtgB,IACFqgS,EAAQz6T,MAAM0K,MAAQ,GACtB+vT,EAAQz6T,MAAMu0K,gBAAkB,MAIlCmmJ,GAAWnX,GAAO1qT,OAAO,CAC3B6lC,SAAU,CACR2F,OAAQ,EACRj2B,KAAM,YAER0jH,KAAM,SAAUr7H,GACd,IACIqF,EADApE,EAAOvH,KAEXuH,EAAKgoC,OAAOjpC,GACZA,EAAWiB,EAAKjB,SAChBiB,EAAKiG,QAAQJ,IAAI,aACb9G,EAAS45C,MACX34C,EAAKiG,QAAQJ,IAAI,oBAEf9G,EAASgzQ,SACX/xQ,EAAKiG,QAAQJ,IAAI,qBAEnBzB,EAAOpE,EAAK0iC,MAAMtkC,IAAI,QACT,MAATgG,GAAyB,MAATA,IAClBpE,EAAKiG,QAAQJ,IAAI,iBACjB7F,EAAKs/L,KAAK,OAAQ,aAClBt/L,EAAK0iC,MAAMrkC,IAAI,OAAQ,MAErBU,EAAS44E,aACX33E,EAAKs/L,KAAK,OAAQ,oBAClBt/L,EAAKiG,QAAQJ,IAAI,sBACjB9G,EAASsQ,KAAO,YAEbtQ,EAASgzQ,SAAYhzQ,EAAS44E,YACjC33E,EAAKiG,QAAQJ,IAAI,oBAEnB7F,EAAKoN,GAAG,aAAa,SAAUR,GAC7BA,EAAE44B,oBAEAzmC,EAAS45C,OAAS55C,EAASsgM,cAC7Br/L,EAAKs/L,KAAK,YAAY,IAG1BojI,SAAU,WACR,QAASjqU,KAAKsG,SAAS45C,MAEzB+3Q,SAAU,WACR,IAEI/3Q,EAFA34C,EAAOvH,KACPsG,EAAWiB,EAAKjB,SAEhB8D,EAAS7C,EAAK6C,SAMlB,GALAA,EAAOub,QAAQ9Q,MAAK,SAAU6E,GACxBA,IAASnS,GACXmS,EAAKo/S,cAGLxyT,EAAS45C,KAAM,CACjBA,EAAO34C,EAAK24C,KACPA,EAkCHA,EAAK1S,QAjCL0S,EAAO55C,EAAS45C,KACZA,EAAK92C,OACP82C,EAAO,CACLp4C,KAAM,OACN6d,MAAOu6B,GAGTA,EAAKp4C,KAAOo4C,EAAKp4C,MAAQ,OAEvBsC,EAAO9D,SAAS8sH,eAClBlzE,EAAKkzE,aAAehpH,EAAO9D,SAAS8sH,cAEtClzE,EAAO34C,EAAK24C,KAAOj3B,EAAS/S,OAAOgqC,GAAM91C,OAAO7C,GAAMg5C,WACtDL,EAAK0gQ,SACL1gQ,EAAKvrC,GAAG,UAAU,SAAUR,GAC1BA,EAAE24B,kBACFvlC,EAAKsT,QACLqlC,EAAKzS,UAEPyS,EAAKvrC,GAAG,aAAa,SAAUR,GACzBA,EAAEwF,QAAQgM,OACZxR,EAAEwF,QAAQgM,QAAQ9Q,MAAK,SAAU6E,GAC/BA,EAAK+tD,OAAO/tD,EAAKpT,SAASy3C,gBAG7B5R,KAAK,QACR+T,EAAKvrC,GAAG,QAAQ,SAAUR,GACpBA,EAAEwF,UAAYumC,GAChB34C,EAAKiG,QAAQwN,OAAO,eAGxBklC,EAAKotQ,SAAU,GAIjBptQ,EAAKsqR,YAAcpgU,EACnB81C,EAAK1yC,QAAQJ,IAAI,YACjB,IAAI+I,EAAM+pC,EAAK+kQ,YAAY19S,EAAKmW,QAASnW,EAAKsiK,QAAU,CACtD,QACA,QACA,QACA,SACE,CACF,QACA,QACA,QACA,UAEF3pH,EAAKq+L,QAAQh3O,EAAKmW,QAASvH,GAC3B+pC,EAAK/pC,IAAMA,EACXA,EAAM,YAAcA,EACpB+pC,EAAK1yC,QAAQwN,OAAOklC,EAAKuqR,UAAUr9T,IAAI+I,GACvC+pC,EAAKuqR,SAAWt0T,EAChB5O,EAAKiG,QAAQJ,IAAI,YACjB7F,EAAKs/L,KAAK,YAAY,KAG1BiyH,SAAU,WACR,IAAIvxT,EAAOvH,KAUX,OATIuH,EAAK24C,OACP34C,EAAK24C,KAAKv6B,QAAQ9Q,MAAK,SAAUurC,GAC3BA,EAAK04Q,UACP14Q,EAAK04Q,cAGTvxT,EAAK24C,KAAKzS,OACVlmC,EAAKs/L,KAAK,YAAY,IAEjBt/L,GAETsjT,WAAY,WACV,IAAItjT,EAAOvH,KACP2I,EAAKpB,EAAKmtE,IACVpuE,EAAWiB,EAAKjB,SAChBiR,EAAShQ,EAAKygT,YACdr8S,EAAOpE,EAAK0iC,MAAMtkC,IAAI,QACtBiR,EAAOrP,EAAKjB,SAASsQ,KAAMyiB,EAAQ,GAAIhU,EAAW/e,EAAS+e,SAC3D9V,EAAMhI,EAAKI,OAAOrB,EAASiJ,KAAMm7T,EAAW,GAChD,SAASC,EAAgBtlT,GACvB,IAAI3b,EAAGhE,EAAOwC,EAAU,GAYxB,IAVEA,EADEwiC,GAASxlB,IACD,CACRwhC,IAAK,WACLhtC,KAAM,WACN+hE,MAAO,WACPx2D,KAAM,YAGE,CAAEA,KAAM,QAEpBI,EAAWA,EAAShlB,MAAM,KACrBqJ,EAAI,EAAGA,EAAI2b,EAASjc,OAAQM,IAC/BhE,EAAQwC,EAAQmd,EAAS3b,GAAG6gB,eACxB7kB,IACF2f,EAAS3b,GAAKhE,GAGlB,OAAO2f,EAAS/X,KAAK,KAEvB,SAASs9T,EAAav+T,GACpB,OAAOA,EAAInE,QAAQ,sBAAuB,QAE5C,SAAS2iU,EAAYl/T,GACnB,IAAI7G,EAAQwB,EAASxB,OAAS,GAC9B,OAAOA,EAAQ6G,EAAKzD,QAAQ,IAAI+0C,OAAO2tR,EAAa9lU,GAAQ,OAAO,SAAUA,GAC3E,MAAO,cAAgBA,EAAQ,iBAC5B6G,EAEP,SAASm/T,EAAYn/T,GACnB,OAAOA,EAAKzD,QAAQ,IAAI+0C,OAAO2tR,EAAa,eAAgB,KAAM,OAAO1iU,QAAQ,IAAI+0C,OAAO2tR,EAAa,eAAgB,KAAM,QAejI,OAbIh0T,GACFrP,EAAK6C,SAASoD,QAAQJ,IAAI,kBAExB9G,EAAS+yB,QACXA,EAAQ,mCAAqC/yB,EAAS+yB,MAAQ,QAE5DhU,IACFA,EAAWslT,EAAgBtlT,IAE7BzO,EAAOW,EAAS,OAASA,EAAS,MAAQhQ,EAAKjB,SAASsQ,MAAQ,QAChE8zT,EAAoB,MAAT/+T,EAAe,aAAeiL,EAAO,IAAMyiB,EAAQ,SAAc,GAC5E1tB,EAAOm/T,EAAYvjU,EAAKI,OAAOkjU,EAAYl/T,KAC3C4D,EAAMu7T,EAAYvjU,EAAKI,OAAOkjU,EAAYt7T,KACnC,YAAc5G,EAAK,YAAcpB,EAAKiG,QAAU,mBAAqBk9T,GAAqB,MAAT/+T,EAAe,aAAehD,EAAK,iBAAmB4O,EAAS,SAAW5L,EAAO,UAAY,KAAO0Z,EAAW,YAAc1c,EAAK,qBAAuB4O,EAAS,kBAAoB8N,EAAW,SAAW,KAAO/e,EAAS45C,KAAO,eAAiB3oC,EAAS,gBAAkB,KAAOhI,EAAM,eAAiBgI,EAAS,mBAAqBhI,EAAM,SAAW,IAAM,UAE5b+/B,WAAY,WACV,IAAI/nC,EAAOvH,KAAMsG,EAAWiB,EAAKjB,SAC7BikD,EAAYjkD,EAASikD,UAIzB,GAHyB,oBAAdA,IACTA,EAAYA,EAAUhiD,KAAKvI,OAEzBuqD,EAAW,CACb,IAAI+/Q,EAAU/iU,EAAKmW,MAAM,QACrB4sT,IACFA,EAAQ3tT,aAAa,QAAS4tC,GAC9BhjD,EAAK8iU,WAAa9/Q,GAmBtB,OAhBAhjD,EAAKoN,GAAG,oBAAoB,SAAUR,GAChCA,EAAEwF,UAAYpS,IACXjB,EAAS45C,MAAmB,UAAX/rC,EAAErM,MAMtBP,EAAK0wT,WACD9jT,EAAE0yL,MACJt/L,EAAK24C,KAAKrlC,OAAM,KAPlBtT,EAAK4kC,KAAK,UACV5B,EAASi/J,uBAAsB,WAC7BjiM,EAAK6C,SAAS08L,kBAUtBv/L,EAAKgoC,SACEhoC,GAETwjU,MAAO,WACL,IAAIxjU,EAAOvH,KAKX,OAJAuH,EAAK6C,SAASub,QAAQ9Q,MAAK,SAAU6E,GACnCA,EAAKlM,QAAQwN,OAAO,eAEtBzT,EAAKiG,QAAQgH,OAAO,YAAY,GACzBjN,GAETkgE,OAAQ,SAAUx9B,GAKhB,OAJAmgS,GAAgBpqU,KAAMiqC,GACD,qBAAVA,GACTjqC,KAAK6mM,KAAK,UAAW58J,GAEhBjqC,KAAKuvC,OAAOtF,IAErBjvB,OAAQ,WACNhb,KAAKuvC,SACDvvC,KAAKkgD,MACPlgD,KAAKkgD,KAAKllC,YAKZgwT,GAAQnT,GAASnvT,OAAO,CAC1B6lC,SAAU,CACR/gC,QAAS,QACTyQ,KAAM,WAINgtT,GAAe7X,GAAO1qT,OAAO,CAC/BmiT,WAAY,WACV,IAAItjT,EAAOvH,KAAMuX,EAAShQ,EAAKygT,YAM/B,OALAzgT,EAAKiG,QAAQJ,IAAI,gBACe,SAA5B7F,EAAKjB,SAASkN,WAChBjM,EAAKiG,QAAQJ,IAAI,qBAEnB7F,EAAKolT,UAAW,EACT,YAAcplT,EAAKmtE,IAAM,YAAcntE,EAAKiG,QAA5C,eAA4E+J,EAAS,OAASA,EAA9F,wBAET+3B,WAAY,WACV,IAAI/nC,EAAOvH,KACXuH,EAAKgoC,SACLhoC,EAAK2jU,iBAAmB,IAAI5+R,GAAWtsC,KAAK00E,IAAK,CAC/CnmD,MAAO,WACLhnB,EAAK4kC,KAAK,gBAEZK,KAAM,SAAUr4B,GACkB,SAA5B5M,EAAKjB,SAASkN,YAChBW,EAAE23B,OAAS,GAEbvkC,EAAK4kC,KAAK,SAAUh4B,IAEtBy7I,KAAM,WACJroJ,EAAK4kC,KAAK,iBAIhBnxB,OAAQ,WAIN,OAHIhb,KAAKkrU,kBACPlrU,KAAKkrU,iBAAiBh9R,UAEjBluC,KAAKuvC,YAIhB,SAAS47R,GAAc1wO,GACrB,IAAI2wO,EAAa,GACjB,GAAI3wO,EACF,IAAK,IAAI/wF,EAAI,EAAGA,EAAI+wF,EAAQrxF,OAAQM,IAClC0hU,GAAc,kBAAoB3wO,EAAQ/wF,GAAK,KAAO+wF,EAAQ/wF,GAAK,YAGvE,OAAO0hU,EAET,IAAIC,GAAYjY,GAAO1qT,OAAO,CAC5B6lC,SAAU,CACR/gC,QAAS,YACTyQ,KAAM,YACNw8E,QAAS,IAEXknC,KAAM,SAAUr7H,GACd,IAAIiB,EAAOvH,KACXuH,EAAKgoC,OAAOjpC,GACRiB,EAAKjB,SAAS6lB,OAChB5kB,EAAK4kB,KAAO5kB,EAAKjB,SAAS6lB,MAExB5kB,EAAKjB,SAASm0F,UAChBlzF,EAAK+jU,SAAW/jU,EAAKjB,SAASm0F,SAEhClzF,EAAKoN,GAAG,WAAW,SAAUR,GAC3B,IAAIo0C,EACc,KAAdp0C,EAAEqgB,UACJrgB,EAAE44B,iBACFxlC,EAAKigE,UAAUr1B,UAAUt9B,MAAK,SAAU6E,GACtC,GAAIA,EAAK8uC,OAEP,OADAD,EAAc7uC,GACP,KAGXnS,EAAK4kC,KAAK,SAAU,CAAE/gC,KAAMm9C,EAAYC,gBAI9CiyC,QAAS,SAAUxwD,GACjB,OAAK9gC,UAAUC,QAGfpJ,KAAKiqC,MAAMrkC,IAAI,UAAWqkC,GACnBjqC,MAHEA,KAAKiqC,MAAMtkC,IAAI,YAK1BklT,WAAY,WACV,IACIpwN,EADAlzF,EAAOvH,KACEmsB,EAAO,GAKpB,OAJAsuE,EAAU0wO,GAAc5jU,EAAK+jU,UACzB/jU,EAAK4kB,OACPA,EAAO,YAAc5kB,EAAK4kB,KAAO,KAE5B,eAAiB5kB,EAAKmtE,IAAM,YAAcntE,EAAKiG,QAAU,IAAM2e,EAAO,IAAMsuE,EAAU,aAE/FzqD,WAAY,WACV,IAAIzoC,EAAOvH,KAIX,OAHAuH,EAAK0iC,MAAMt1B,GAAG,kBAAkB,SAAUR,GACxC5M,EAAKmW,QAAQrS,UAAY8/T,GAAch3T,EAAEzO,UAEpC6B,EAAKgoC,YAIhB,SAAS41Q,GAAUz/S,EAAO6lU,EAAQC,GAOhC,OANI9lU,EAAQ6lU,IACV7lU,EAAQ6lU,GAEN7lU,EAAQ8lU,IACV9lU,EAAQ8lU,GAEH9lU,EAET,SAAS+lU,GAAYrzT,EAAI9T,EAAMoB,GAC7B0S,EAAGuE,aAAa,QAAUrY,EAAMoB,GAElC,SAASgmU,GAAmBhyT,EAAMhU,GAChC,IAAIimU,EAAcC,EAAe9b,EAAU+b,EAAc98P,EAAY+8P,EACnC,MAA9BpyT,EAAKpT,SAASylU,aAChBF,EAAe,MACf/b,EAAW,SACX8b,EAAgB,MAEhBC,EAAe,OACf/b,EAAW,QACX8b,EAAgB,KAElBE,EAAWpyT,EAAKgE,MAAM,UACtBiuT,GAAgBjyT,EAAKwrS,aAAa0mB,IAAkB,KAAOvnB,GAAMr+P,QAAQ8lR,GAAUhc,GACnF/gP,EAAa48P,IAAiBjmU,EAAQgU,EAAKsyT,YAActyT,EAAKuyT,UAAYvyT,EAAKsyT,YAAc,KAC7FF,EAASj8T,MAAMg8T,GAAgB98P,EAC/B+8P,EAASj8T,MAAM6oB,OAAShf,EAAKwrS,aAAanjT,EAAI,KAC9C0pU,GAAYK,EAAU,WAAYpmU,GAClC+lU,GAAYK,EAAU,YAAa,GAAKpyT,EAAKpT,SAASsuC,cAAclvC,IACpE+lU,GAAYK,EAAU,WAAYpyT,EAAKsyT,WACvCP,GAAYK,EAAU,WAAYpyT,EAAKuyT,WAEzC,IAAIC,GAAS9Y,GAAO1qT,OAAO,CACzBi5H,KAAM,SAAUr7H,GACd,IAAIiB,EAAOvH,KACNsG,EAASsuC,gBACZtuC,EAASsuC,cAAgB,SAAUlvC,GACjC,OAAOiB,KAAKu9B,MAAc,IAARx+B,GAAe,MAGrC6B,EAAKgoC,OAAOjpC,GACZiB,EAAKiG,QAAQJ,IAAI,UACY,MAAzB9G,EAASylU,aACXxkU,EAAKiG,QAAQJ,IAAI,YAEnB7F,EAAKykU,UAAY97Q,GAAS5pD,EAASouC,UAAYpuC,EAASouC,SAAW,EACnEntC,EAAK0kU,UAAY/7Q,GAAS5pD,EAASquC,UAAYruC,EAASquC,SAAW,IACnEptC,EAAK4kU,WAAa5kU,EAAK0iC,MAAMtkC,IAAI,UAEnCklT,WAAY,WACV,IAAItjT,EAAOvH,KAAM2I,EAAKpB,EAAKmtE,IAAKn9D,EAAShQ,EAAKygT,YAC9C,MAAO,YAAcr/S,EAAK,YAAcpB,EAAKiG,QAAtC,cAAqE7E,EAAK,mBAAqB4O,EAA/F,2DAETsuE,MAAO,WACL7lF,KAAK0F,MAAM1F,KAAKmsU,YAAYx/R,WAE9B2C,WAAY,WACV,IACIoF,EAAUC,EAAUy3R,EAAgBP,EAAc/b,EAAU8b,EAD5DrkU,EAAOvH,KAEX,SAASqsU,EAAWzlU,EAAKqsB,EAAKqI,GAC5B,OAAQA,EAAM10B,IAAQqsB,EAAMrsB,GAE9B,SAAS0lU,EAAa1lU,EAAKqsB,EAAKqI,GAC9B,OAAOA,GAAOrI,EAAMrsB,GAAOA,EAE7B,SAAS2lU,EAAe73R,EAAUC,GAChC,SAAS63R,EAAM/8S,GACb,IAAI/pB,EACJA,EAAQ6B,EAAK7B,QACbA,EAAQ4mU,EAAa53R,EAAUC,EAAU03R,EAAW33R,EAAUC,EAAUjvC,GAAiB,IAAR+pB,GACjF/pB,EAAQy/S,GAAUz/S,EAAOgvC,EAAUC,GACnCptC,EAAK7B,MAAMA,GACX6B,EAAK4kC,KAAK,YAAa,CAAEzmC,MAAOA,IAChC6B,EAAK4kC,KAAK,OAAQ,CAAEzmC,MAAOA,IAC3B6B,EAAK4kC,KAAK,UAAW,CAAEzmC,MAAOA,IAEhC6B,EAAKoN,GAAG,WAAW,SAAUR,GAC3B,OAAQA,EAAEqgB,SACV,KAAK,GACL,KAAK,GACHg4S,GAAO,GACP,MACF,KAAK,GACL,KAAK,GACHA,EAAM,GACN,UAIN,SAASC,EAAW/3R,EAAUC,EAAUm3R,GACtC,IAAIh/S,EAAU4/S,EAAgBf,EAAcgB,EAAWjnU,EACvD6B,EAAKqlU,YAAc,IAAItgS,GAAW/kC,EAAKmtE,IAAK,CAC1Cp6C,OAAQ/yB,EAAKmtE,IAAM,UACnBnmD,MAAO,SAAUpa,GACf2Y,EAAW3Y,EAAEi4T,GACbM,EAAiB3nU,SAASwC,EAAKmW,MAAM,UAAU7N,MAAMg8T,GAAe,IACpEF,GAAgBpkU,EAAK29S,aAAa0mB,IAAkB,KAAOvnB,GAAMr+P,QAAQ8lR,GAAUhc,GACnFvoT,EAAK4kC,KAAK,YAAa,CAAEzmC,MAAOA,KAElC8mC,KAAM,SAAUr4B,GACd,IAAIsb,EAAQtb,EAAEi4T,GAAkBt/S,EAChC6/S,EAAYxnB,GAAUunB,EAAiBj9S,EAAO,EAAGk8S,GACjDG,EAASj8T,MAAMg8T,GAAgBc,EAAY,KAC3CjnU,EAAQgvC,EAAWi4R,EAAYhB,GAAgBh3R,EAAWD,GAC1DntC,EAAK7B,MAAMA,GACX6B,EAAK0S,UAAUtO,KAAK,GAAKpE,EAAKjB,SAASsuC,cAAclvC,IAAQ8nC,OAAO+wM,QAAQutF,EAAU,SACtFvkU,EAAK4kC,KAAK,OAAQ,CAAEzmC,MAAOA,KAE7BkqJ,KAAM,WACJroJ,EAAK0S,UAAUwzB,OACflmC,EAAK4kC,KAAK,UAAW,CAAEzmC,MAAOA,OAIpCgvC,EAAWntC,EAAKykU,UAChBr3R,EAAWptC,EAAK0kU,UACkB,MAA9B1kU,EAAKjB,SAASylU,aAChBK,EAAiB,UACjBP,EAAe,MACf/b,EAAW,SACX8b,EAAgB,MAEhBQ,EAAiB,UACjBP,EAAe,OACf/b,EAAW,QACX8b,EAAgB,KAElBrkU,EAAKgoC,SACLg9R,EAAe73R,EAAUC,GACzB83R,EAAW/3R,EAAUC,EAAUptC,EAAKmW,MAAM,YAE5CivB,QAAS,WACP3sC,KAAKuvC,SACLm8R,GAAmB1rU,KAAMA,KAAK0F,UAEhCsqC,WAAY,WACV,IAAIzoC,EAAOvH,KAIX,OAHAuH,EAAK0iC,MAAMt1B,GAAG,gBAAgB,SAAUR,GACtCu3T,GAAmBnkU,EAAM4M,EAAEzO,UAEtB6B,EAAKgoC,YAIZs9R,GAASzZ,GAAO1qT,OAAO,CACzBmiT,WAAY,WACV,IAAItjT,EAAOvH,KAGX,OAFAuH,EAAKiG,QAAQJ,IAAI,UACjB7F,EAAKolT,UAAW,EACT,YAAcplT,EAAKmtE,IAAM,YAAcntE,EAAKiG,QAAU,cAI7Ds/T,GAAchE,GAAWpgU,OAAO,CAClC6lC,SAAU,CACR/gC,QAAS,sBACTyQ,KAAM,UAER0uB,QAAS,WACP,IAGIogS,EAAeC,EAHfzlU,EAAOvH,KACPiO,EAAM1G,EAAKmW,QACXsuB,EAAOzkC,EAAK29S,aAUhB,OARA39S,EAAKgoC,SACLw9R,EAAgB9+T,EAAI2P,WACpBovT,EAAgB/+T,EAAIogD,UACpB1jB,GAASoiS,GAAe39T,IAAI,CAC1BqpB,MAAOuT,EAAKjlC,EAAIs9S,GAAMr+P,QAAQgnR,GAAev0S,MAC7CC,OAAQsT,EAAKjqC,EAAI,IAEnB4oC,GAASqiS,GAAe59T,IAAI,CAAEspB,OAAQsT,EAAKjqC,EAAI,IACxCwF,GAET0hU,WAAY,SAAUh/R,GACpB,IAAI1iC,EAAOvH,KACX2qC,GAASpjC,EAAKmW,QAAQ2wC,WAAWwvE,YAAYt2H,EAAKygT,YAAc,SAAU/9Q,IAE5E4gR,WAAY,WACV,IAGIxxR,EAIe+9R,EAPf7vT,EAAOvH,KACP2I,EAAKpB,EAAKmtE,IACVn9D,EAAShQ,EAAKygT,YAEdpxS,EAAOrP,EAAK0iC,MAAMtkC,IAAI,QACtBgG,EAAOpE,EAAK0iC,MAAMtkC,IAAI,QACtBW,EAAWiB,EAAKjB,SAChB+wT,EAAW,GAiBf,OAhBAh+R,EAAQ/yB,EAAS+yB,MACbA,GACFziB,EAAO,OACc,kBAAVyiB,IACTA,EAAQ9zB,EAAW4B,OAAOmvL,aAAej9J,EAAM,GAAKA,EAAM,IAE5DA,EAAQ,mCAAqCA,EAAQ,QAErDA,EAAQ,GAEVziB,EAAOtQ,EAASsQ,KAAOW,EAAS,OAASA,EAAS,KAAOX,EAAO,GAC5DjL,IACFpE,EAAKiG,QAAQJ,IAAI,gBACjBiqT,EAAW,gBAAkB9/S,EAAS,QAAUhQ,EAAKI,OAAOgE,GAAQ,WAEtEyrT,EAAyC,mBAApB9wT,EAASmhE,OAAuB,kBAAoBnhE,EAASmhE,OAAS,IAAM,GAC1F,YAAc9+D,EAAK,YAAcpB,EAAKiG,QAAU,kBAAoB4pT,EAApE,qEAA8JxgT,EAAO,aAAeA,EAAO,IAAMyiB,EAAQ,QAAU,IAAMg+R,EAAzN,yCAAoR9/S,EAAS,sCAAwChQ,EAAK0lU,cAAgBr2T,EAAO,IAAS,IAAMrP,EAAK0lU,aAAe,IAAM,cAAgB11T,EAA1Z,8BAET+3B,WAAY,WACV,IAAI/nC,EAAOvH,KAAMy5T,EAAiBlyT,EAAKjB,SAAS6X,QAiBhD,OAhBA5W,EAAKoN,GAAG,SAAS,SAAUR,GACzB,IAAIxC,EAAOwC,EAAE6C,OACb,GAAI7C,EAAEwF,UAAY3Z,KAChB,MAAO2R,EAAM,CACX,GAAIwC,EAAE0yL,MAAuB,SAAf1yL,EAAE0yL,KAAKhjM,KAAoC,WAAlB8N,EAAKnH,WAA6D,IAApCmH,EAAKrH,UAAU4D,QAAQ,QAK1F,OAJAiG,EAAEgmE,gCACEs/O,GACFA,EAAelxT,KAAKvI,KAAMmU,IAI9BxC,EAAOA,EAAKpH,sBAIXhD,EAAKjB,SAAS6X,QACd5W,EAAKgoC,YAIZ29R,GAAc3L,GAAW74T,OAAO,CAClC6lC,SAAU,CACRooR,eAAgB,eAChBI,aAAc,oBACdyK,SAAU,SAEZ9vE,SAAU,WACR,OAAO,KAIPy7E,GAAWrc,GAAMpoT,OAAO,CAC1B6lC,SAAU,CACRh7B,OAAQ,WACR2Y,SAAU,CAAEpkB,KAAM,UAEpBskD,YAAa,SAAUt3C,GACrB,IAAIs4T,EACAptU,KAAKqtU,cACPD,EAAeptU,KAAK0d,MAAM1d,KAAKqtU,aAC/B1iS,GAASyiS,GAAc78M,YAAYvwH,KAAKgoT,YAAc,UACtDolB,EAAazwT,aAAa,gBAAiB,UAE7C3c,KAAKqtU,YAAc,IAAMv4T,EACzBs4T,EAAeptU,KAAK0d,MAAM,IAAM5I,GAChCs4T,EAAazwT,aAAa,gBAAiB,QAC3CguB,GAASyiS,GAAcx8M,SAAS5wH,KAAKgoT,YAAc,UACnDhoT,KAAK2lB,QAAQ7Q,GAAK04B,OAAOrB,KAAK,WAC9BnsC,KAAK4gT,SACL5gT,KAAK2lB,QAAQ9Q,MAAK,SAAUurC,EAAM12C,GAC5BoL,IAAQpL,GACV02C,EAAK3S,WAIXo9Q,WAAY,WACV,IAAItjT,EAAOvH,KACPuT,EAAShM,EAAKsgT,QACdylB,EAAW,GACX/1T,EAAShQ,EAAKygT,YASlB,OARAzgT,EAAKujT,YACLv3S,EAAOu3S,UAAUvjT,GACjBA,EAAKoe,QAAQ9Q,MAAK,SAAU6E,EAAMhQ,GAChC,IAAIf,EAAKpB,EAAKmtE,IAAM,KAAOhrE,EAC3BgQ,EAAKmtL,KAAK,OAAQ,YAClBntL,EAAKmtL,KAAK,aAAcl+L,GACxB2kU,GAAY,YAAc3kU,EAAK,YAAc4O,EAAjC,oDAAqGmC,EAAKg7D,IAAM,yCAA2CntE,EAAKI,OAAO+R,EAAKpT,SAASyI,OAAS,YAErM,YAAcxH,EAAKmtE,IAAM,YAAcntE,EAAKiG,QAA5C,0CAAuGjG,EAAKmtE,IAAM,iBAAmBn9D,EAAS,wBAA0B+1T,EAAxK,kBAA4M/lU,EAAKmtE,IAAM,iBAAmBntE,EAAKsmT,YAAc,KAAOt6S,EAAOs3S,WAAWtjT,GAAtR,gBAET+nC,WAAY,WACV,IAAI/nC,EAAOvH,KACXuH,EAAKgoC,SACLhoC,EAAKjB,SAASinU,UAAYhmU,EAAKjB,SAASinU,WAAa,EACrDhmU,EAAK6kD,YAAY7kD,EAAKjB,SAASinU,WAC/BvtU,KAAK2U,GAAG,SAAS,SAAUR,GACzB,IAAIq5T,EAAer5T,EAAE6C,OAAOzM,WAC5B,GAAIijU,GAAgBA,EAAa7kU,KAAOpB,EAAKmtE,IAAM,QAAS,CAC1D,IAAIhrE,EAAI8jU,EAAa7vT,WAAWvU,OAChC,MAAOM,IACD8jU,EAAa7vT,WAAWjU,KAAOyK,EAAE6C,QACnCzP,EAAK6kD,YAAY1iD,QAM3Bk/S,eAAgB,WACd,IACI58Q,EAAMw9Q,EAAMC,EADZliT,EAAOvH,KAEXwpT,EAAOnF,GAAMr+P,QAAQz+C,EAAKmW,MAAM,SAAS+a,MACzC+wR,EAAOA,EAAO,EAAI,EAAIA,EACtBC,EAAO,EACPliT,EAAKoe,QAAQ9Q,MAAK,SAAUurC,GAC1BopQ,EAAO7iT,KAAKssB,IAAIu2R,EAAMppQ,EAAK8kQ,aAAasE,MACxCC,EAAO9iT,KAAKssB,IAAIw2R,EAAMrpQ,EAAK8kQ,aAAauE,SAE1CliT,EAAKoe,QAAQ9Q,MAAK,SAAU6E,GAC1BA,EAAKpT,SAAS4V,EAAI,EAClBxC,EAAKpT,SAASjE,EAAI,EAClBqX,EAAKpT,SAASS,EAAIyiT,EAClB9vS,EAAKpT,SAASvE,EAAI0nT,EAClB/vS,EAAKwrS,WAAW,CACdhpS,EAAG,EACH7Z,EAAG,EACH0E,EAAGyiT,EACHznT,EAAG0nT,OAGP,IAAIgkB,EAAQppB,GAAMr+P,QAAQz+C,EAAKmW,MAAM,SAASgb,OAM9C,OALAnxB,EAAKjB,SAAS2M,SAAWu2S,EACzBjiT,EAAKjB,SAAS4M,UAAYu2S,EAAOgkB,EACjCzhS,EAAOzkC,EAAKgoC,SACZvD,EAAKE,QAAUuhS,EACfzhS,EAAKu9Q,OAASv9Q,EAAKjqC,EAAIiqC,EAAKE,OACrBF,KAIP0hS,GAAUta,GAAO1qT,OAAO,CAC1Bi5H,KAAM,SAAUr7H,GACd,IAAIiB,EAAOvH,KACXuH,EAAKgoC,OAAOjpC,GACZiB,EAAKiG,QAAQJ,IAAI,WACb9G,EAASwN,UACXvM,EAAKiG,QAAQJ,IAAI,cAEjB7F,EAAKoN,GAAG,WAAW,SAAUR,GAC3B,IAAIo0C,EACc,KAAdp0C,EAAEqgB,UACJrgB,EAAE44B,iBACFxlC,EAAKigE,UAAUr1B,UAAUt9B,MAAK,SAAU6E,GACtC,GAAIA,EAAK8uC,OAEP,OADAD,EAAc7uC,GACP,KAGXnS,EAAK4kC,KAAK,SAAU,CAAE/gC,KAAMm9C,EAAYC,eAG5CjhD,EAAKoN,GAAG,SAAS,SAAUR,GACzB5M,EAAK0iC,MAAMrkC,IAAI,QAASuO,EAAE6C,OAAOtR,YAIvCinC,QAAS,WACP,IACI98B,EAAOm8B,EAAMs8Q,EAAW0B,EAAsBE,EAD9C3iT,EAAOvH,KAC0BiqT,EAAU,EAC/Cp6S,EAAQtI,EAAKmW,QAAQ7N,MACrBm8B,EAAOzkC,EAAK4hT,YACZe,EAAkB3iT,EAAK4iT,kBAAoB,GAC3C,IAAI13R,EAAMltB,EAAWwE,SAyBrB,OAxBKxC,EAAKjB,SAASwN,WAAa2e,EAAItlB,OAASslB,EAAIy2K,cAAgBz2K,EAAIy2K,cAAgB,KACnFr5L,EAAMuoT,WAAapsR,EAAKjqC,EAAIkoT,EAAU,MAExC3B,EAAY/gT,EAAK+gT,UACjB0B,EAAU1B,EAAU36Q,KAAO26Q,EAAU7rJ,MAAQ,EAC7CwtJ,EAAU3B,EAAU16Q,IAAM06Q,EAAUllQ,QAAU77C,EAAKjB,SAASwN,UAAY,EAAI,GACxEk4B,EAAK9vB,IAAMguS,EAAgBhuS,IAC7BrM,EAAM89B,KAAO3B,EAAK9vB,EAAI,KACtBguS,EAAgBhuS,EAAI8vB,EAAK9vB,GAEvB8vB,EAAK3pC,IAAM6nT,EAAgB7nT,IAC7BwN,EAAM+9B,IAAM5B,EAAK3pC,EAAI,KACrB6nT,EAAgB7nT,EAAI2pC,EAAK3pC,GAEvB2pC,EAAKjlC,IAAMmjT,EAAgBnjT,IAC7B8I,EAAM4oB,MAAQuT,EAAKjlC,EAAIijT,EAAU,KACjCE,EAAgBnjT,EAAIilC,EAAKjlC,GAEvBilC,EAAKjqC,IAAMmoT,EAAgBnoT,IAC7B8N,EAAM6oB,OAASsT,EAAKjqC,EAAIkoT,EAAU,KAClCC,EAAgBnoT,EAAIiqC,EAAKjqC,GAE3BwF,EAAK4iT,iBAAmBD,EACxB3iT,EAAK4kC,KAAK,UAAW,IAAI,GAClB5kC,GAETsjT,WAAY,WACV,IAEIx0R,EAAOpoB,EAFP1G,EAAOvH,KACPsG,EAAWiB,EAAKjB,SAgCpB,OA9BA+vB,EAAQ,CACN1tB,GAAIpB,EAAKmtE,IACTumP,UAAW,KAEb7zT,EAASyN,KAAK,CACZ,OACA,aACA,YACA,OACA,WACA,MACA,MACA,OACA,OACA,UACA,cACA,WACA,aACC,SAAUvQ,GACX+xB,EAAM/xB,GAAQgC,EAAShC,MAErBiD,EAAKqS,aACPyc,EAAMzc,SAAW,YAEftT,EAAS+tC,UACXhe,EAAMvuB,KAAOxB,EAAS+tC,SAExBpmC,EAAMo2S,GAAMnuS,OAAO5P,EAASwN,UAAY,WAAa,QAASuiB,GAC9DpoB,EAAIvI,MAAQ6B,EAAK0iC,MAAMtkC,IAAI,SAC3BsI,EAAI3D,UAAY/C,EAAKiG,QAAQlF,WACtB2F,EAAI85C,WAEbriD,MAAO,SAAUA,GACf,OAAIyD,UAAUC,QACZpJ,KAAKiqC,MAAMrkC,IAAI,QAASF,GACjB1F,OAELA,KAAKiqC,MAAMtkC,IAAI,aACjB3F,KAAKiqC,MAAMrkC,IAAI,QAAS5F,KAAK0d,QAAQhY,OAEhC1F,KAAKiqC,MAAMtkC,IAAI,WAExB2pC,WAAY,WACV,IAAI/nC,EAAOvH,KACXuH,EAAKmW,QAAQhY,MAAQ6B,EAAK0iC,MAAMtkC,IAAI,SACpC4B,EAAKgoC,SACLhoC,EAAKwnC,IAAIp6B,GAAG,UAAU,SAAUR,GAC9B5M,EAAK0iC,MAAMrkC,IAAI,QAASuO,EAAE6C,OAAOtR,OACjC6B,EAAK4kC,KAAK,SAAUh4B,OAGxB67B,WAAY,WACV,IAAIzoC,EAAOvH,KASX,OARAuH,EAAK0iC,MAAMt1B,GAAG,gBAAgB,SAAUR,GAClC5M,EAAKmW,QAAQhY,QAAUyO,EAAEzO,QAC3B6B,EAAKmW,QAAQhY,MAAQyO,EAAEzO,UAG3B6B,EAAK0iC,MAAMt1B,GAAG,mBAAmB,SAAUR,GACzC5M,EAAKmW,QAAQ9D,SAAWzF,EAAEzO,SAErB6B,EAAKgoC,UAEdv0B,OAAQ,WACNhb,KAAK+uC,IAAIyK,MACTx5C,KAAKuvC,YAILi4J,GAAS,WACX,MAAO,CACL2+G,SAAUA,GACVltN,WAAY8tN,GACZa,YAAaA,GACbv5Q,QAAS69Q,GACTlf,QAAS/jR,EACTmjS,mBAAoBA,GACpBuB,UAAWA,GACXrhR,WAAYA,GACZgjR,WAAYA,GACZwB,MAAOA,GACP9L,QAASA,GACTgM,UAAWA,GACXa,WAAYA,GACZ5yD,OAAQA,GACR02D,WAAYA,GACZxC,QAASA,GACTC,OAAQA,GACRI,SAAUA,GACVG,aAAcA,GACd6C,OAAQA,GACRQ,eAAgBA,GAChBC,OAAQA,GACRW,YAAaA,GACbC,SAAUA,GACVE,SAAUA,GACVkB,SAAUA,GACVE,YAAaA,GACbK,YAAaA,GACbG,YAAaA,GACbwB,KAAMA,GACNE,YAAaA,GACbG,SAAUA,GACVC,KAAMA,GACNO,SAAUA,GACVqD,WAAYA,GACZQ,UAAWA,GACXE,WAAYA,GACZwB,WAAYA,GACZ4F,eAAgBA,GAChBC,WAAYA,GACZhjB,OAAQ+jB,GACRC,QAASA,GACTE,MAAOA,GACPppB,QAASypB,GACTC,QAASA,GACTE,WAAYA,GACZyB,SAAUA,GACVz+Q,SAAUA,GACVw9Q,KAAMA,GACNK,QAASA,GACTqB,MAAOA,GACPC,aAAcA,GACdI,UAAWA,GACXa,OAAQA,GACRW,OAAQA,GACRC,YAAaA,GACbI,YAAaA,GACbC,SAAUA,GACVO,QAASA,GACT3S,SAAUA,GACVrD,aAAcA,KAGdjrR,GAAW,SAAUz1B,GACnBA,EAAOqmC,GACTj2C,EAASyN,KAAK2yL,MAAU,SAAUzyH,EAAKlxE,GACrCmT,EAAOqmC,GAAGx5C,GAAOkxE,KAGnB/9D,EAAOqmC,GAAKmqJ,MAGZmmI,GAAoB,WACtBvmU,EAASyN,KAAK2yL,MAAU,SAAUzyH,EAAKlxE,GACrColB,EAAS7b,IAAIvJ,EAAKkxE,OAGlB9lD,GAAM,CACRwd,SAAUA,GACVkhS,kBAAmBA,IASrB,SAASjtC,MANTzxQ,GAAI0+S,oBACJ1+S,GAAIwd,SAAStlC,OAAOpB,QAAUoB,OAAOpB,QAAU,IAC/CjG,EAAOsN,IAAI,UAAU,SAAU/G,GAE7B,OADA8gU,GAAezyT,MAAMrO,GACdkwT,GAAS5wT,IAAIU,OA73Sb,CAo4SXc,SAr4SF,I,sBCIE,SAAUrH,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;IAAI+vI,EAAK/vI,EAAOE,aAAa,KAAM,CAC/BC,OAAQ,oFAAoFC,MACxF,KAEJC,YAAa,kDAAkDD,MAAM,KACrEE,SAAU,6CAA6CF,MAAM,KAC7DG,cAAe,8BAA8BH,MAAM,KACnDI,YAAa,uBAAuBJ,MAAM,KAC1CK,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,4BACLC,KAAM,mCAEV4B,cAAe,8BACfC,aAAc,SAAUC,EAAMC,GAI1B,OAHa,KAATD,IACAA,EAAO,GAEM,SAAbC,EACOD,EACa,cAAbC,EACAD,GAAQ,GAAKA,EAAOA,EAAO,GACd,WAAbC,GAAsC,UAAbA,EACzBD,EAAO,QADX,GAIXC,SAAU,SAAUgc,EAAO8B,EAAS5d,GAChC,OAAI8b,EAAQ,GACD,OACAA,EAAQ,GACR,YACAA,EAAQ,GACR,SAEA,SAGf9d,SAAU,CACNC,QAAS,sBACTC,QAAS,kBACTC,SAAU,kBACVC,QAAS,sBACTC,SAAU,wBACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,WACRC,KAAM,gBACNC,EAAG,gBACHC,GAAI,UACJC,EAAG,UACHC,GAAI,WACJC,EAAG,QACHC,GAAI,SACJC,EAAG,SACHC,GAAI,UACJC,EAAG,UACHC,GAAI,WACJC,EAAG,UACHC,GAAI,YAERC,KAAM,CACFC,IAAK,EACLC,IAAK,KAIb,OAAOutI,M,sBC9ET,SAAUlwI,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;SAASif,EAAoBvb,EAAQC,EAAeC,EAAKC,GACrD,IAAIwW,EAAS,CACT3Y,EAAG,CAAC,eAAgB,cAAe,iBACnCC,GAAI,CAAC+B,EAAS,UAAWA,EAAS,YAClC9B,EAAG,CAAC,aAAc,aAClBC,GAAI,CAAC6B,EAAS,UAAWA,EAAS,YAClC5B,EAAG,CAAC,YAAa,YAAa,YAC9BC,GAAI,CAAC2B,EAAS,SAAUA,EAAS,UACjC1B,EAAG,CAAC,YAAa,YACjBE,EAAG,CAAC,UAAW,WAAY,WAC3BC,GAAI,CAACuB,EAAS,OAAQA,EAAS,SAC/BtB,EAAG,CAAC,YAAa,QAAS,aAC1BC,GAAI,CAACqB,EAAS,SAAUA,EAAS,YAErC,OAAIC,EACO0W,EAAOzW,GAAK,GAAKyW,EAAOzW,GAAK,GAAKyW,EAAOzW,GAAK,GAElDC,EAAWwW,EAAOzW,GAAK,GAAKyW,EAAOzW,GAAK,GAGnD,IAAI+pU,EAAK3tU,EAAOE,aAAa,KAAM,CAC/BC,OAAQ,6FAA6FC,MACjG,KAEJC,YACI,6DAA6DD,MAAM,KACvEE,SACI,iEAAiEF,MAC7D,KAERG,cAAe,gBAAgBH,MAAM,KACrCI,YAAa,gBAAgBJ,MAAM,KACnCK,eAAgB,CACZC,GAAI,OACJC,IAAK,UACLC,EAAG,aACHC,GAAI,eACJC,IAAK,oBACLC,KAAM,2BAEVC,SAAU,CACNC,QAAS,aACTC,QAAS,cACTC,SAAU,qBACVC,QAAS,aACTC,SAAU,oBACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,YACRC,KAAM,YACNC,EAAGud,EACHtd,GAAIsd,EACJrd,EAAGqd,EACHpd,GAAIod,EACJnd,EAAGmd,EACHld,GAAIkd,EACJjd,EAAGid,EACHhd,GAAI,WACJC,EAAG+c,EACH9c,GAAI8c,EACJ7c,EAAG6c,EACH5c,GAAI4c,GAER5b,uBAAwB,YACxBC,QAAS,MACThB,KAAM,CACFC,IAAK,EACLC,IAAK,KAIb,OAAOmrU,M,sBClFT,SAAU9tU,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;IAAI4tU,EAAO5tU,EAAOE,aAAa,QAAS,CACpCC,OAAQ,wFAAwFC,MAC5F,KAEJC,YAAa,kDAAkDD,MAAM,KACrEE,SAAU,2DAA2DF,MACjE,KAEJG,cAAe,8BAA8BH,MAAM,KACnDI,YAAa,uBAAuBJ,MAAM,KAC1CK,eAAgB,CACZC,GAAI,SACJC,IAAK,YACLC,EAAG,aACHC,GAAI,cACJC,IAAK,qBACLC,KAAM,4BAEVC,SAAU,CACNC,QAAS,gBACTC,QAAS,mBACTC,SAAU,eACVC,QAAS,oBACTC,SAAU,sBACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,QACRC,KAAM,SACNC,EAAG,gBACHC,GAAI,aACJC,EAAG,WACHC,GAAI,aACJC,EAAG,UACHC,GAAI,WACJC,EAAG,QACHC,GAAI,UACJC,EAAG,UACHC,GAAI,YACJC,EAAG,SACHC,GAAI,YAERgB,uBAAwB,uBACxBC,QAAS,SAAUI,GACf,IAAI6b,EAAI7b,EAAS,GACbR,EACgC,OAAxBQ,EAAS,IAAO,IACd,KACM,IAAN6b,EACA,KACM,IAANA,EACA,KACM,IAANA,EACA,KACA,KACd,OAAO7b,EAASR,GAEpBZ,KAAM,CACFC,IAAK,EACLC,IAAK,KAIb,OAAOorU,M,sBCxET,SAAU/tU,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAKzB;IAAI6mT,EAAK7mT,EAAOE,aAAa,KAAM,CAC/BC,OAAQ,kGAAkGC,MACtG,KAEJC,YAAa,wDAAwDD,MACjE,KAEJE,SACI,gEAAgEF,MAC5D,KAERG,cAAe,gCAAgCH,MAAM,KACrDI,YAAa,qBAAqBJ,MAAM,KACxCye,oBAAoB,EACpBpe,eAAgB,CACZC,GAAI,SACJC,IAAK,YACLC,EAAG,aACHC,GAAI,cACJC,IAAK,sBACLC,KAAM,sCAEVC,SAAU,CACNC,QAAS,aACTC,QAAS,cACTC,SAAU,aACVC,QAAS,cACTC,SAAU,sBACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,SACRC,KAAM,WACNC,EAAG,eACHC,GAAI,WACJC,EAAG,YACHC,GAAI,cACJC,EAAG,MACHC,GAAI,SACJC,EAAG,OACHC,GAAI,SACJC,EAAG,OACHC,GAAI,SACJC,EAAG,MACHC,GAAI,UAERgB,uBAAwB,eACxBC,QAAS,SAAUI,GACf,OAAOA,EAAS,SAEpBf,cAAe,4BACfwC,KAAM,SAAUP,GACZ,MAAiB,SAAVA,GAA8B,YAAVA,GAE/B9B,SAAU,SAAUgc,EAAO8B,EAAS5d,GAChC,OAAI8b,EAAQ,GACD9b,EAAU,OAAS,UAEnBA,EAAU,QAAU,aAKvC,OAAO6jT,M,oBC7EX,YACoB,WAChB,aAEA,IAAIhnT,EAASiG,QAAQC,KAAKC,MAAMC,QAAQ,yBAEpCC,EAAWJ,QAAQC,KAAKC,MAAMC,QAAQ,sBAEtC4nU,EAAkB,SAAUznU,GAC9B,IAAI0nU,EAAgB,mDAAoD7iF,EAAY/kP,EAASkyM,QAAQhyM,EAAOC,SAASmvP,wBAAyB/tM,EAASrhD,EAAOqhD,OAC9JrhD,EAAOkO,UAAUH,SAAS,CACxBilQ,UAAW,CACT7pQ,SAAUu+T,EACVtgU,WAAY,CAAEgG,MAAO,SAEvB+lQ,YAAa,CACXhqQ,SAAUu+T,EACVtgU,WAAY,CAAEgG,MAAO,WAEvBgmQ,WAAY,CACVjqQ,SAAUu+T,EACVtgU,WAAY,CAAEgG,MAAO,UAEvBimQ,aAAc,CACZlqQ,SAAUu+T,EACVtgU,WAAY,CAAEgG,MAAO,YAEvBkmQ,KAAM,CACJ,CACE1jQ,OAAQ,IACR+E,OAAQ,OAEV,CACE/E,OAAQ,SACR+E,OAAQ,OAEV,CACE/E,OAAQ,OACR+W,OAAQ,CAAE4sP,WAAY,UAG1BC,OAAQ,CACN,CACE5jQ,OAAQ,IACR+E,OAAQ,OAEV,CACE/E,OAAQ,KACR+E,OAAQ,OAEV,CACE/E,OAAQ,OACR+W,OAAQ,CAAE8sP,UAAW,YAGzBC,UAAW,CACT,CACE9jQ,OAAQ,IACR+E,OAAQ,OAEV,CACE/E,OAAQ,OACR+W,OAAQ,CAAE8oP,eAAgB,aAC1B5jF,OAAO,IAGX8nF,cAAe,CACb,CACE/jQ,OAAQ,SACR+E,OAAQ,OAEV,CACE/E,OAAQ,OACR+W,OAAQ,CAAE8oP,eAAgB,gBAC1B5jF,OAAO,IAGXioF,SAAU,CACRlkQ,OAAQ,OACRxI,WAAY,CAAEgwQ,KAAM,WAEtBvzP,SAAU,CACRjU,OAAQ,OACRxI,WAAY,CACV0e,KAAM,SAAUi5M,GACd,OAAOj/N,EAASmyC,QAAQ4yM,EAAW9lB,EAAK1/N,OAAS,KAIvDu0Q,UAAW,CACThkQ,OAAQ,OACRxI,WAAY,CAAE8M,MAAO,WAEvB2/P,YAAa,CACXjkQ,OAAQ,OACR+W,OAAQ,CAAEo3J,gBAAiB,aAG/Bj+K,EAAS0O,KAAK,eAAexU,MAAM,MAAM,SAAUiE,GACjDojD,EAAOg/J,iBAAiBpiN,EAAO,UAE5BojD,EAAO8gK,eAAe,SACzB9gK,EAAOg/J,iBAAiB,+BAE1BvgN,EAAS0O,KAAKk5T,EAAc1tU,MAAM,MAAM,SAAUiE,GAChD,IAAIgL,EAAOo4C,EAAO8gK,eAAelkN,GAC7BgL,IACGA,EAAK7B,WAAWgG,QACnBnE,EAAK7B,WAAWgG,MAAQ,GACxBnE,EAAKigE,gBAAgBziE,KAAK,eAK9B4H,EAAQ,SAAUrO,GACpBA,EAAOC,SAASyqP,eAAgB,EAChC1qP,EAAOsO,GAAG,QAAQ,WAChBm5T,EAAgBznU,OAGhB89T,EAAU,CAAEzvT,MAAOA,GAEnBN,EAAW,SAAU/N,GACvBA,EAAOoQ,UAAU,kBAAkB,WACjC,IAAIkP,EAAQ,GAAIu9S,EAAyB,kDACrCC,EAAkB98T,EAAOC,SAAS68T,iBAAmBD,EAazD,OAZA78T,EAAOgM,EAAEwC,KAAKsuT,EAAgB9iU,MAAM,MAAM,SAAUqJ,EAAG02C,GACrD,IAAIz0C,EAAOy0C,EAAM16C,EAAQ06C,EACrBvsC,EAASusC,EAAK//C,MAAM,KACpBwT,EAAOzK,OAAS,IAClBuC,EAAOkI,EAAO,GACdnO,EAAQmO,EAAO,IAEjB8R,EAAM7Y,KAAK,CACTnB,KAAMA,EACNjG,MAAOA,OAGJ,CACLoC,KAAM,UACN6D,KAAM,aACNsO,QAAS,aACTpG,OAAQ8R,EACRi9S,YAAY,EACZ1oT,aAAc,WACZ,IAAI3S,EAAOvH,KACXqG,EAAOsO,GAAG,cAAc,WACtB,IAAIq5T,EACJA,EAAU3nU,EAAO4L,IAAIoL,UAAUhX,EAAOuL,UAAUC,UAAW,QACvDm8T,EACFzmU,EAAK7B,MAAMsoU,EAAQ7hT,MAEnB5kB,EAAK7B,MAAM,QAIjByY,QAAS,SAAUhK,GACbA,EAAEwF,QAAQrT,SAASZ,OACrBW,EAAOyW,YAAY,YAAY,EAAO3I,EAAEwF,QAAQrT,SAASZ,YAKjEW,EAAOoQ,UAAU,cAAc,WAC7B,SAAS6rT,EAAc9gP,GACrBA,EAAUA,EAAQt5E,QAAQ,KAAM,IAAI7H,MAAM,KAC1C,IAAIqJ,EAAI83E,EAAQp4E,OAChB,MAAOM,IACL83E,EAAQ93E,GAAK83E,EAAQ93E,GAAGrJ,MAAM,KAEhC,OAAOmhF,EAET,IAAIghP,EAAsB,ukBACtB78S,EAAQ,GAAI88S,EAAQH,EAAcj8T,EAAOC,SAASo8T,cAAgBF,GAQtE,OAPAn8T,EAAOgM,EAAEwC,KAAK4tT,GAAO,SAAU/4T,EAAG04T,GAChCz8S,EAAM7Y,KAAK,CACTnB,KAAM,CAAEi9D,IAAKw5P,EAAK,IAClB18T,MAAO08T,EAAK,GACZ73Q,WAAyC,IAA9B63Q,EAAK,GAAGl0T,QAAQ,SAAkB,eAAiBk0T,EAAK,GAAK,QAGrE,CACLt6T,KAAM,UACN6D,KAAM,cACNsO,QAAS,cACTpG,OAAQ8R,EACRi9S,YAAY,EACZ1oT,aAAc,WACZ,IAAI3S,EAAOvH,KACXqG,EAAOsO,GAAG,cAAc,WACtB,IAAIq5T,EACJA,EAAU3nU,EAAO4L,IAAIoL,UAAUhX,EAAOuL,UAAUC,UAAW,QACvDm8T,EACFzmU,EAAK7B,MAAMsoU,EAAQvwD,MAEnBl2Q,EAAK7B,MAAM,QAIjBw4C,SAAU,SAAU/pC,GACdA,EAAEwF,QAAQrT,SAASZ,OACrBW,EAAOyW,YAAY,YAAY,EAAO3I,EAAEwF,QAAQrT,SAASZ,aAM/DmR,EAAU,CAAEzC,SAAUA,GAM1B,SAAS0C,KAJThX,EAAOsN,IAAI,gBAAgB,SAAU/G,GACnC89T,EAAQzvT,MAAMrO,GACdwQ,EAAQzC,SAAS/N,OAlNJ,IADnB,I,kCCAA,yBAAge,EAAG,G,sBCIje,SAAUvG,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;IAAI8iU,EAAK9iU,EAAOE,aAAa,KAAM,CAC/BC,OAAQ,2FAA2FC,MAC/F,KAEJC,YAAa,kDAAkDD,MAAM,KACrEE,SACI,iFAAiFF,MAC7E,KAERG,cAAe,8BAA8BH,MAAM,KACnDI,YAAa,uBAAuBJ,MAAM,KAC1Cye,oBAAoB,EACpBpe,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,wBACJC,IAAK,8BACLC,KAAM,qCAEVC,SAAU,CACNC,QAAS,eACTC,QAAS,iBACTC,SAAU,eACVC,QAAS,gBACTC,SAAU,WACN,OAAsB,IAAftB,KAAKyhB,OAA8B,IAAfzhB,KAAKyhB,MAC1B,wBACA,yBAEVlgB,SAAU,KAEdC,aAAc,CACVC,OAAQ,QACRC,KAAM,QACNC,EAAG,WACHC,GAAI,cACJC,EAAG,YACHC,GAAI,aACJC,EAAG,WACHC,GAAI,WACJC,EAAG,SACHC,GAAI,UACJ6E,EAAG,aACHiY,GAAI,aACJ7c,EAAG,SACHC,GAAI,WACJC,EAAG,SACHC,GAAI,WAERgB,uBAAwB,WACxBC,QAAS,MACThB,KAAM,CACFC,IAAK,EACLC,IAAK,KAIb,OAAOsgU,M,sBCnET,SAAUjjU,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;IAAI+nB,EAAY,CACRtI,EAAG,IACHK,EAAG,IACHI,EAAG,IACHC,EAAG,IACHT,EAAG,IACHW,EAAG,IACHN,EAAG,IACHJ,EAAG,IACHW,EAAG,IACH0H,EAAG,KAEPqN,EAAY,CACR,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,KAGT24S,EAAOhuU,EAAOE,aAAa,QAAS,CAEpCC,OAAQ,sEAAsEC,MAC1E,KAEJC,YACI,sEAAsED,MAClE,KAERE,SAAU,yDAAyDF,MAC/D,KAEJG,cAAe,iCAAiCH,MAAM,KACtDI,YAAa,iCAAiCJ,MAAM,KACpDK,eAAgB,CACZC,GAAI,aACJC,IAAK,gBACLC,EAAG,aACHC,GAAI,cACJC,IAAK,0BACLC,KAAM,iCAEVC,SAAU,CACNC,QAAS,UACTC,QAAS,UACTC,SAAU,kBACVC,QAAS,UACTC,SAAU,mBACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,UACRC,KAAM,WACNC,EAAG,YACHC,GAAI,WACJC,EAAG,UACHC,GAAI,UACJC,EAAG,WACHC,GAAI,UACJC,EAAG,UACHC,GAAI,SACJC,EAAG,YACHC,GAAI,WACJC,EAAG,UACHC,GAAI,UAERimB,SAAU,SAAU9Y,GAChB,OAAOA,EAAOvH,QAAQ,iBAAiB,SAAUpD,GAC7C,OAAOwwB,EAAUxwB,OAGzB0jB,WAAY,SAAU/Y,GAClB,OAAOA,EAAOvH,QAAQ,OAAO,SAAUpD,GACnC,OAAOkjB,EAAUljB,OAKzBlC,cAAe,uBACfC,aAAc,SAAUC,EAAMC,GAI1B,OAHa,KAATD,IACAA,EAAO,GAEM,QAAbC,EACOD,EAAO,EAAIA,EAAOA,EAAO,GACZ,SAAbC,EACAD,EACa,WAAbC,EACAD,GAAQ,GAAKA,EAAOA,EAAO,GACd,SAAbC,EACAD,EAAO,QADX,GAIXC,SAAU,SAAUD,EAAME,EAAQC,GAC9B,OAAIH,EAAO,EACA,MACAA,EAAO,GACP,OACAA,EAAO,GACP,SACAA,EAAO,GACP,OAEA,OAGfP,KAAM,CACFC,IAAK,EACLC,IAAK,KAIb,OAAOwrU,M,qBC5HX,EAAQ,S,uBCFN,SAAUnuU,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;IAAIG,EAAS,CACL,gBACA,aACA,UACA,aACA,aACA,eACA,cACA,cACA,eACA,aACA,eACA,gBAEJE,EAAc,CACV,OACA,OACA,OACA,OACA,OACA,OACA,OACA,MACA,OACA,OACA,OACA,QAEJC,EAAW,CACP,cACA,UACA,UACA,YACA,YACA,WACA,eAEJC,EAAgB,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,OAC3DC,EAAc,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,MAEnDytU,EAAKjuU,EAAOE,aAAa,KAAM,CAC/BC,OAAQA,EACRE,YAAaA,EACbqC,kBAAkB,EAClBpC,SAAUA,EACVC,cAAeA,EACfC,YAAaA,EACbC,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVC,SAAU,CACNC,QAAS,oBACTC,QAAS,sBACTC,SAAU,gBACVC,QAAS,iBACTC,SAAU,6BACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,YACRC,KAAM,gBACNC,EAAG,gBACHC,GAAI,YACJC,EAAG,UACHC,GAAI,gBACJC,EAAG,OACHC,GAAI,aACJC,EAAG,QACHC,GAAI,WACJC,EAAG,OACHC,GAAI,YACJC,EAAG,WACHC,GAAI,eAERgB,uBAAwB,mBACxBC,QAAS,SAAUI,GACf,IAAIR,EAAoB,IAAXQ,EAAe,IAAMA,EAAS,KAAO,EAAI,KAAO,KAC7D,OAAOA,EAASR,GAEpBZ,KAAM,CACFC,IAAK,EACLC,IAAK,KAIb,OAAOyrU,M,qBCjGX,EAAQ,S,sBCDN,SAAUpuU,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;IAAIqpF,EACI,6DAA6DjpF,MAAM,KACvEkpF,EACI,kDAAkDlpF,MAAM,KAC5Dge,EAAc,CACV,QACA,QACA,iBACA,QACA,SACA,cACA,cACA,QACA,QACA,QACA,QACA,SAEJC,EACI,qKAEJ6vT,EAAKluU,EAAOE,aAAa,KAAM,CAC/BC,OAAQ,0FAA0FC,MAC9F,KAEJC,YAAa,SAAUuB,EAAGyY,GACtB,OAAKzY,EAEM,QAAQwI,KAAKiQ,GACbivE,EAAuB1nF,EAAE2c,SAEzB8qE,EAAoBznF,EAAE2c,SAJtB8qE,GAQfhrE,YAAaA,EACbG,iBAAkBH,EAClBI,kBACI,4FACJC,uBACI,mFAEJN,YAAaA,EACbO,gBAAiBP,EACjBQ,iBAAkBR,EAElB9d,SACI,6DAA6DF,MAAM,KACvEG,cAAe,8BAA8BH,MAAM,KACnDI,YAAa,uBAAuBJ,MAAM,KAC1Cye,oBAAoB,EACpBpe,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,0BAEVC,SAAU,CACNC,QAAS,kBACTC,QAAS,iBACTC,SAAU,eACVC,QAAS,mBACTC,SAAU,2BACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,UACRC,KAAM,aACNC,EAAG,oBACHC,GAAI,cACJC,EAAG,aACHC,GAAI,aACJC,EAAG,UACHC,GAAI,SACJC,EAAG,UACHC,GAAI,WACJ6E,EAAG,WACHiY,GAAI,WACJ7c,EAAG,YACHC,GAAI,aACJC,EAAG,WACHC,GAAI,WAERgB,uBAAwB,kBACxBC,QAAS,SAAUI,GACf,OACIA,GACY,IAAXA,GAA2B,IAAXA,GAAgBA,GAAU,GAAK,MAAQ,OAGhEpB,KAAM,CACFC,IAAK,EACLC,IAAK,KAIb,OAAO0rU,M,qBC1GX,EAAQ,S,sBCFN,SAAUruU,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;IAAImuU,EAAUnuU,EAAOE,aAAa,WAAY,CAC1CC,OAAQ,6GAA6GC,MACjH,KAEJC,YACI,8DAA8DD,MAC1D,KAERsC,kBAAkB,EAClBpC,SACI,yEAAyEF,MACrE,KAERG,cAAe,qCAAqCH,MAAM,KAC1DI,YAAa,4BAA4BJ,MAAM,KAC/Cye,oBAAoB,EACpBpe,eAAgB,CACZC,GAAI,QACJE,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVC,SAAU,CACNC,QAAS,kBACTC,QAAS,sBACTC,SAAU,eACVC,QAAS,uBACTC,SAAU,uBACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,SACRC,KAAM,UACNC,EAAG,mBACHC,GAAI,eACJC,EAAG,aACHC,GAAI,eACJC,EAAG,YACHC,GAAI,YACJC,EAAG,SACHC,GAAI,WACJC,EAAG,YACHC,GAAI,cACJC,EAAG,UACHC,GAAI,aAERgB,uBAAwB,uBACxBC,QAAS,SAAUI,GACf,IAAI6b,EAAI7b,EAAS,GACbR,EACgC,OAAxBQ,EAAS,IAAO,IACd,KACM,IAAN6b,EACA,KACM,IAANA,EACA,KACM,IAANA,EACA,KACA,KACd,OAAO7b,EAASR,GAEpBZ,KAAM,CACFC,IAAK,EACLC,IAAK,KAIb,OAAO2rU,M,qBC3EX,EAAQ,S,sBCFN,SAAUtuU,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;IAAIwjR,EAAKxjR,EAAOE,aAAa,KAAM,CAC/BC,OAAQ,mJAAmJC,MACvJ,KAEJC,YACI,6DAA6DD,MAAM,KACvEE,SACI,6EAA6EF,MACzE,KAERG,cAAe,mCAAmCH,MAAM,KACxDI,YAAa,gBAAgBJ,MAAM,KACnCK,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,oBACJC,IAAK,gCACLC,KAAM,uCAEVC,SAAU,CACNC,QAAS,eACTC,QAAS,iBACTC,SAAU,eACVC,QAAS,eACTC,SAAU,wBACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,YACRC,KAAM,WACNC,EAAG,mBACHC,GAAI,eACJC,EAAG,eACHC,GAAI,cACJC,EAAG,cACHC,GAAI,aACJC,EAAG,cACHC,GAAI,cACJC,EAAG,aACHC,GAAI,WACJC,EAAG,aACHC,GAAI,YAERgB,uBAAwB,YACxBC,QAAS,MACThB,KAAM,CACFC,IAAK,EACLC,IAAK,KAIb,OAAOghR","file":"js/chunk-204051ba.53eeaa76.js","sourcesContent":["// Exports the \"visualchars\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/visualchars')\n// ES2015:\n// import 'tinymce/plugins/visualchars'\nrequire('./plugin.js');","//! moment.js locale configuration\n//! locale : Uzbek Latin [uz-latn]\n//! author : Rasulbek Mirzayev : github.com/Rasulbeeek\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var uzLatn = moment.defineLocale('uz-latn', {\n months: 'Yanvar_Fevral_Mart_Aprel_May_Iyun_Iyul_Avgust_Sentabr_Oktabr_Noyabr_Dekabr'.split(\n '_'\n ),\n monthsShort: 'Yan_Fev_Mar_Apr_May_Iyun_Iyul_Avg_Sen_Okt_Noy_Dek'.split('_'),\n weekdays:\n 'Yakshanba_Dushanba_Seshanba_Chorshanba_Payshanba_Juma_Shanba'.split(\n '_'\n ),\n weekdaysShort: 'Yak_Dush_Sesh_Chor_Pay_Jum_Shan'.split('_'),\n weekdaysMin: 'Ya_Du_Se_Cho_Pa_Ju_Sha'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'D MMMM YYYY, dddd HH:mm',\n },\n calendar: {\n sameDay: '[Bugun soat] LT [da]',\n nextDay: '[Ertaga] LT [da]',\n nextWeek: 'dddd [kuni soat] LT [da]',\n lastDay: '[Kecha soat] LT [da]',\n lastWeek: \"[O'tgan] dddd [kuni soat] LT [da]\",\n sameElse: 'L',\n },\n relativeTime: {\n future: 'Yaqin %s ichida',\n past: 'Bir necha %s oldin',\n s: 'soniya',\n ss: '%d soniya',\n m: 'bir daqiqa',\n mm: '%d daqiqa',\n h: 'bir soat',\n hh: '%d soat',\n d: 'bir kun',\n dd: '%d kun',\n M: 'bir oy',\n MM: '%d oy',\n y: 'bir yil',\n yy: '%d yil',\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 7, // The week that contains Jan 7th is the first week of the year.\n },\n });\n\n return uzLatn;\n\n})));\n","//! moment.js locale configuration\n//! locale : Malayalam [ml]\n//! author : Floyd Pink : https://github.com/floydpink\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var ml = moment.defineLocale('ml', {\n months: 'ജനുവരി_ഫെബ്രുവരി_മാർച്ച്_ഏപ്രിൽ_മേയ്_ജൂൺ_ജൂലൈ_ഓഗസ്റ്റ്_സെപ്റ്റംബർ_ഒക്ടോബർ_നവംബർ_ഡിസംബർ'.split(\n '_'\n ),\n monthsShort:\n 'ജനു._ഫെബ്രു._മാർ._ഏപ്രി._മേയ്_ജൂൺ_ജൂലൈ._ഓഗ._സെപ്റ്റ._ഒക്ടോ._നവം._ഡിസം.'.split(\n '_'\n ),\n monthsParseExact: true,\n weekdays:\n 'ഞായറാഴ്ച_തിങ്കളാഴ്ച_ചൊവ്വാഴ്ച_ബുധനാഴ്ച_വ്യാഴാഴ്ച_വെള്ളിയാഴ്ച_ശനിയാഴ്ച'.split(\n '_'\n ),\n weekdaysShort: 'ഞായർ_തിങ്കൾ_ചൊവ്വ_ബുധൻ_വ്യാഴം_വെള്ളി_ശനി'.split('_'),\n weekdaysMin: 'ഞാ_തി_ചൊ_ബു_വ്യാ_വെ_ശ'.split('_'),\n longDateFormat: {\n LT: 'A h:mm -നു',\n LTS: 'A h:mm:ss -നു',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY, A h:mm -നു',\n LLLL: 'dddd, D MMMM YYYY, A h:mm -നു',\n },\n calendar: {\n sameDay: '[ഇന്ന്] LT',\n nextDay: '[നാളെ] LT',\n nextWeek: 'dddd, LT',\n lastDay: '[ഇന്നലെ] LT',\n lastWeek: '[കഴിഞ്ഞ] dddd, LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%s കഴിഞ്ഞ്',\n past: '%s മുൻപ്',\n s: 'അൽപ നിമിഷങ്ങൾ',\n ss: '%d സെക്കൻഡ്',\n m: 'ഒരു മിനിറ്റ്',\n mm: '%d മിനിറ്റ്',\n h: 'ഒരു മണിക്കൂർ',\n hh: '%d മണിക്കൂർ',\n d: 'ഒരു ദിവസം',\n dd: '%d ദിവസം',\n M: 'ഒരു മാസം',\n MM: '%d മാസം',\n y: 'ഒരു വർഷം',\n yy: '%d വർഷം',\n },\n meridiemParse: /രാത്രി|രാവിലെ|ഉച്ച കഴിഞ്ഞ്|വൈകുന്നേരം|രാത്രി/i,\n meridiemHour: function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (\n (meridiem === 'രാത്രി' && hour >= 4) ||\n meridiem === 'ഉച്ച കഴിഞ്ഞ്' ||\n meridiem === 'വൈകുന്നേരം'\n ) {\n return hour + 12;\n } else {\n return hour;\n }\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 4) {\n return 'രാത്രി';\n } else if (hour < 12) {\n return 'രാവിലെ';\n } else if (hour < 17) {\n return 'ഉച്ച കഴിഞ്ഞ്';\n } else if (hour < 20) {\n return 'വൈകുന്നേരം';\n } else {\n return 'രാത്രി';\n }\n },\n });\n\n return ml;\n\n})));\n","//! moment.js locale configuration\n//! locale : Chuvash [cv]\n//! author : Anatoly Mironov : https://github.com/mirontoli\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var cv = moment.defineLocale('cv', {\n months: 'кӑрлач_нарӑс_пуш_ака_май_ҫӗртме_утӑ_ҫурла_авӑн_юпа_чӳк_раштав'.split(\n '_'\n ),\n monthsShort: 'кӑр_нар_пуш_ака_май_ҫӗр_утӑ_ҫур_авн_юпа_чӳк_раш'.split('_'),\n weekdays:\n 'вырсарникун_тунтикун_ытларикун_юнкун_кӗҫнерникун_эрнекун_шӑматкун'.split(\n '_'\n ),\n weekdaysShort: 'выр_тун_ытл_юн_кӗҫ_эрн_шӑм'.split('_'),\n weekdaysMin: 'вр_тн_ыт_юн_кҫ_эр_шм'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD-MM-YYYY',\n LL: 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ]',\n LLL: 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm',\n LLLL: 'dddd, YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm',\n },\n calendar: {\n sameDay: '[Паян] LT [сехетре]',\n nextDay: '[Ыран] LT [сехетре]',\n lastDay: '[Ӗнер] LT [сехетре]',\n nextWeek: '[Ҫитес] dddd LT [сехетре]',\n lastWeek: '[Иртнӗ] dddd LT [сехетре]',\n sameElse: 'L',\n },\n relativeTime: {\n future: function (output) {\n var affix = /сехет$/i.exec(output)\n ? 'рен'\n : /ҫул$/i.exec(output)\n ? 'тан'\n : 'ран';\n return output + affix;\n },\n past: '%s каялла',\n s: 'пӗр-ик ҫеккунт',\n ss: '%d ҫеккунт',\n m: 'пӗр минут',\n mm: '%d минут',\n h: 'пӗр сехет',\n hh: '%d сехет',\n d: 'пӗр кун',\n dd: '%d кун',\n M: 'пӗр уйӑх',\n MM: '%d уйӑх',\n y: 'пӗр ҫул',\n yy: '%d ҫул',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}-мӗш/,\n ordinal: '%d-мӗш',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 7, // The week that contains Jan 7th is the first week of the year.\n },\n });\n\n return cv;\n\n})));\n","// Exports the \"autoresize\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/autoresize')\n// ES2015:\n// import 'tinymce/plugins/autoresize'\nrequire('./plugin.js');","//! moment.js locale configuration\n//! locale : Icelandic [is]\n//! author : Hinrik Örn Sigurðsson : https://github.com/hinrik\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n function plural(n) {\n if (n % 100 === 11) {\n return true;\n } else if (n % 10 === 1) {\n return false;\n }\n return true;\n }\n function translate(number, withoutSuffix, key, isFuture) {\n var result = number + ' ';\n switch (key) {\n case 's':\n return withoutSuffix || isFuture\n ? 'nokkrar sekúndur'\n : 'nokkrum sekúndum';\n case 'ss':\n if (plural(number)) {\n return (\n result +\n (withoutSuffix || isFuture ? 'sekúndur' : 'sekúndum')\n );\n }\n return result + 'sekúnda';\n case 'm':\n return withoutSuffix ? 'mínúta' : 'mínútu';\n case 'mm':\n if (plural(number)) {\n return (\n result + (withoutSuffix || isFuture ? 'mínútur' : 'mínútum')\n );\n } else if (withoutSuffix) {\n return result + 'mínúta';\n }\n return result + 'mínútu';\n case 'hh':\n if (plural(number)) {\n return (\n result +\n (withoutSuffix || isFuture\n ? 'klukkustundir'\n : 'klukkustundum')\n );\n }\n return result + 'klukkustund';\n case 'd':\n if (withoutSuffix) {\n return 'dagur';\n }\n return isFuture ? 'dag' : 'degi';\n case 'dd':\n if (plural(number)) {\n if (withoutSuffix) {\n return result + 'dagar';\n }\n return result + (isFuture ? 'daga' : 'dögum');\n } else if (withoutSuffix) {\n return result + 'dagur';\n }\n return result + (isFuture ? 'dag' : 'degi');\n case 'M':\n if (withoutSuffix) {\n return 'mánuður';\n }\n return isFuture ? 'mánuð' : 'mánuði';\n case 'MM':\n if (plural(number)) {\n if (withoutSuffix) {\n return result + 'mánuðir';\n }\n return result + (isFuture ? 'mánuði' : 'mánuðum');\n } else if (withoutSuffix) {\n return result + 'mánuður';\n }\n return result + (isFuture ? 'mánuð' : 'mánuði');\n case 'y':\n return withoutSuffix || isFuture ? 'ár' : 'ári';\n case 'yy':\n if (plural(number)) {\n return result + (withoutSuffix || isFuture ? 'ár' : 'árum');\n }\n return result + (withoutSuffix || isFuture ? 'ár' : 'ári');\n }\n }\n\n var is = moment.defineLocale('is', {\n months: 'janúar_febrúar_mars_apríl_maí_júní_júlí_ágúst_september_október_nóvember_desember'.split(\n '_'\n ),\n monthsShort: 'jan_feb_mar_apr_maí_jún_júl_ágú_sep_okt_nóv_des'.split('_'),\n weekdays:\n 'sunnudagur_mánudagur_þriðjudagur_miðvikudagur_fimmtudagur_föstudagur_laugardagur'.split(\n '_'\n ),\n weekdaysShort: 'sun_mán_þri_mið_fim_fös_lau'.split('_'),\n weekdaysMin: 'Su_Má_Þr_Mi_Fi_Fö_La'.split('_'),\n longDateFormat: {\n LT: 'H:mm',\n LTS: 'H:mm:ss',\n L: 'DD.MM.YYYY',\n LL: 'D. MMMM YYYY',\n LLL: 'D. MMMM YYYY [kl.] H:mm',\n LLLL: 'dddd, D. MMMM YYYY [kl.] H:mm',\n },\n calendar: {\n sameDay: '[í dag kl.] LT',\n nextDay: '[á morgun kl.] LT',\n nextWeek: 'dddd [kl.] LT',\n lastDay: '[í gær kl.] LT',\n lastWeek: '[síðasta] dddd [kl.] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'eftir %s',\n past: 'fyrir %s síðan',\n s: translate,\n ss: translate,\n m: translate,\n mm: translate,\n h: 'klukkustund',\n hh: translate,\n d: translate,\n dd: translate,\n M: translate,\n MM: translate,\n y: translate,\n yy: translate,\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal: '%d.',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return is;\n\n})));\n","//! moment.js locale configuration\n//! locale : Faroese [fo]\n//! author : Ragnar Johannesen : https://github.com/ragnar123\n//! author : Kristian Sakarisson : https://github.com/sakarisson\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var fo = moment.defineLocale('fo', {\n months: 'januar_februar_mars_apríl_mai_juni_juli_august_september_oktober_november_desember'.split(\n '_'\n ),\n monthsShort: 'jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'),\n weekdays:\n 'sunnudagur_mánadagur_týsdagur_mikudagur_hósdagur_fríggjadagur_leygardagur'.split(\n '_'\n ),\n weekdaysShort: 'sun_mán_týs_mik_hós_frí_ley'.split('_'),\n weekdaysMin: 'su_má_tý_mi_hó_fr_le'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd D. MMMM, YYYY HH:mm',\n },\n calendar: {\n sameDay: '[Í dag kl.] LT',\n nextDay: '[Í morgin kl.] LT',\n nextWeek: 'dddd [kl.] LT',\n lastDay: '[Í gjár kl.] LT',\n lastWeek: '[síðstu] dddd [kl] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'um %s',\n past: '%s síðani',\n s: 'fá sekund',\n ss: '%d sekundir',\n m: 'ein minuttur',\n mm: '%d minuttir',\n h: 'ein tími',\n hh: '%d tímar',\n d: 'ein dagur',\n dd: '%d dagar',\n M: 'ein mánaður',\n MM: '%d mánaðir',\n y: 'eitt ár',\n yy: '%d ár',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal: '%d.',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return fo;\n\n})));\n","//! moment.js locale configuration\n//! locale : Japanese [ja]\n//! author : LI Long : https://github.com/baryon\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var ja = moment.defineLocale('ja', {\n eras: [\n {\n since: '2019-05-01',\n offset: 1,\n name: '令和',\n narrow: '㋿',\n abbr: 'R',\n },\n {\n since: '1989-01-08',\n until: '2019-04-30',\n offset: 1,\n name: '平成',\n narrow: '㍻',\n abbr: 'H',\n },\n {\n since: '1926-12-25',\n until: '1989-01-07',\n offset: 1,\n name: '昭和',\n narrow: '㍼',\n abbr: 'S',\n },\n {\n since: '1912-07-30',\n until: '1926-12-24',\n offset: 1,\n name: '大正',\n narrow: '㍽',\n abbr: 'T',\n },\n {\n since: '1873-01-01',\n until: '1912-07-29',\n offset: 6,\n name: '明治',\n narrow: '㍾',\n abbr: 'M',\n },\n {\n since: '0001-01-01',\n until: '1873-12-31',\n offset: 1,\n name: '西暦',\n narrow: 'AD',\n abbr: 'AD',\n },\n {\n since: '0000-12-31',\n until: -Infinity,\n offset: 1,\n name: '紀元前',\n narrow: 'BC',\n abbr: 'BC',\n },\n ],\n eraYearOrdinalRegex: /(元|\\d+)年/,\n eraYearOrdinalParse: function (input, match) {\n return match[1] === '元' ? 1 : parseInt(match[1] || input, 10);\n },\n months: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),\n monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split(\n '_'\n ),\n weekdays: '日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日'.split('_'),\n weekdaysShort: '日_月_火_水_木_金_土'.split('_'),\n weekdaysMin: '日_月_火_水_木_金_土'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'YYYY/MM/DD',\n LL: 'YYYY年M月D日',\n LLL: 'YYYY年M月D日 HH:mm',\n LLLL: 'YYYY年M月D日 dddd HH:mm',\n l: 'YYYY/MM/DD',\n ll: 'YYYY年M月D日',\n lll: 'YYYY年M月D日 HH:mm',\n llll: 'YYYY年M月D日(ddd) HH:mm',\n },\n meridiemParse: /午前|午後/i,\n isPM: function (input) {\n return input === '午後';\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 12) {\n return '午前';\n } else {\n return '午後';\n }\n },\n calendar: {\n sameDay: '[今日] LT',\n nextDay: '[明日] LT',\n nextWeek: function (now) {\n if (now.week() !== this.week()) {\n return '[来週]dddd LT';\n } else {\n return 'dddd LT';\n }\n },\n lastDay: '[昨日] LT',\n lastWeek: function (now) {\n if (this.week() !== now.week()) {\n return '[先週]dddd LT';\n } else {\n return 'dddd LT';\n }\n },\n sameElse: 'L',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}日/,\n ordinal: function (number, period) {\n switch (period) {\n case 'y':\n return number === 1 ? '元年' : number + '年';\n case 'd':\n case 'D':\n case 'DDD':\n return number + '日';\n default:\n return number;\n }\n },\n relativeTime: {\n future: '%s後',\n past: '%s前',\n s: '数秒',\n ss: '%d秒',\n m: '1分',\n mm: '%d分',\n h: '1時間',\n hh: '%d時間',\n d: '1日',\n dd: '%d日',\n M: '1ヶ月',\n MM: '%dヶ月',\n y: '1年',\n yy: '%d年',\n },\n });\n\n return ja;\n\n})));\n","(function () {\nvar codesample = (function (domGlobals) {\n 'use strict';\n\n var Cell = function (initial) {\n var value = initial;\n var get = function () {\n return value;\n };\n var set = function (v) {\n value = v;\n };\n var clone = function () {\n return Cell(get());\n };\n return {\n get: get,\n set: set,\n clone: clone\n };\n };\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');\n\n var getContentCss = function (editor) {\n return editor.settings.codesample_content_css;\n };\n var getLanguages = function (editor) {\n return editor.settings.codesample_languages;\n };\n var getDialogMinWidth = function (editor) {\n return Math.min(global$1.DOM.getViewPort().w, editor.getParam('codesample_dialog_width', 800));\n };\n var getDialogMinHeight = function (editor) {\n return Math.min(global$1.DOM.getViewPort().w, editor.getParam('codesample_dialog_height', 650));\n };\n var Settings = {\n getContentCss: getContentCss,\n getLanguages: getLanguages,\n getDialogMinWidth: getDialogMinWidth,\n getDialogMinHeight: getDialogMinHeight\n };\n\n var window = {};\n var global$2 = window;\n var _self = typeof window !== 'undefined' ? window : typeof WorkerGlobalScope !== 'undefined' && domGlobals.self instanceof WorkerGlobalScope ? domGlobals.self : {};\n var Prism = function () {\n var lang = /\\blang(?:uage)?-(?!\\*)(\\w+)\\b/i;\n var _ = _self.Prism = {\n util: {\n encode: function (tokens) {\n if (tokens instanceof Token) {\n return new Token(tokens.type, _.util.encode(tokens.content), tokens.alias);\n } else if (_.util.type(tokens) === 'Array') {\n return tokens.map(_.util.encode);\n } else {\n return tokens.replace(/&/g, '&').replace(/ text.length) {\n break tokenloop;\n }\n if (str instanceof Token) {\n continue;\n }\n pattern.lastIndex = 0;\n var match = pattern.exec(str);\n if (match) {\n if (lookbehind) {\n lookbehindLength = match[1].length;\n }\n var from = match.index - 1 + lookbehindLength;\n match = match[0].slice(lookbehindLength);\n var len = match.length, to = from + len, before = str.slice(0, from + 1), after = str.slice(to + 1);\n var args = [\n i,\n 1\n ];\n if (before) {\n args.push(before);\n }\n var wrapped = new Token(token, inside ? _.tokenize(match, inside) : match, alias);\n args.push(wrapped);\n if (after) {\n args.push(after);\n }\n Array.prototype.splice.apply(strarr, args);\n }\n }\n }\n }\n return strarr;\n },\n hooks: {\n all: {},\n add: function (name, callback) {\n var hooks = _.hooks.all;\n hooks[name] = hooks[name] || [];\n hooks[name].push(callback);\n },\n run: function (name, env) {\n var callbacks = _.hooks.all[name];\n if (!callbacks || !callbacks.length) {\n return;\n }\n for (var i = 0, callback = void 0; callback = callbacks[i++];) {\n callback(env);\n }\n }\n }\n };\n var Token = _.Token = function (type, content, alias) {\n this.type = type;\n this.content = content;\n this.alias = alias;\n };\n Token.stringify = function (o, language, parent) {\n if (typeof o === 'string') {\n return o;\n }\n if (_.util.type(o) === 'Array') {\n return o.map(function (element) {\n return Token.stringify(element, language, o);\n }).join('');\n }\n var env = {\n type: o.type,\n content: Token.stringify(o.content, language, parent),\n tag: 'span',\n classes: [\n 'token',\n o.type\n ],\n attributes: {},\n language: language,\n parent: parent\n };\n if (env.type === 'comment') {\n env.attributes.spellcheck = 'true';\n }\n if (o.alias) {\n var aliases = _.util.type(o.alias) === 'Array' ? o.alias : [o.alias];\n Array.prototype.push.apply(env.classes, aliases);\n }\n _.hooks.run('wrap', env);\n var attributes = '';\n for (var name in env.attributes) {\n attributes += (attributes ? ' ' : '') + name + '=\"' + (env.attributes[name] || '') + '\"';\n }\n return '<' + env.tag + ' class=\"' + env.classes.join(' ') + '\" ' + attributes + '>' + env.content + '' + env.tag + '>';\n };\n if (!_self.document) {\n if (!_self.addEventListener) {\n return _self.Prism;\n }\n _self.addEventListener('message', function (evt) {\n var message = JSON.parse(evt.data), lang = message.language, code = message.code, immediateClose = message.immediateClose;\n _self.postMessage(_.highlight(code, _.languages[lang], lang));\n if (immediateClose) {\n _self.close();\n }\n }, false);\n return _self.Prism;\n }\n }();\n if (typeof global$2 !== 'undefined') {\n global$2.Prism = Prism;\n }\n Prism.languages.markup = {\n comment: //,\n prolog: /<\\?[\\w\\W]+?\\?>/,\n doctype: //,\n cdata: //i,\n tag: {\n pattern: /<\\/?[^\\s>\\/=.]+(?:\\s+[^\\s>\\/=]+(?:=(?:(\"|')(?:\\\\\\1|\\\\?(?!\\1)[\\w\\W])*\\1|[^\\s'\">=]+))?)*\\s*\\/?>/i,\n inside: {\n 'tag': {\n pattern: /^<\\/?[^\\s>\\/]+/i,\n inside: {\n punctuation: /^<\\/?/,\n namespace: /^[^\\s>\\/:]+:/\n }\n },\n 'attr-value': {\n pattern: /=(?:('|\")[\\w\\W]*?(\\1)|[^\\s>]+)/i,\n inside: { punctuation: /[=>\"']/ }\n },\n 'punctuation': /\\/?>/,\n 'attr-name': {\n pattern: /[^\\s>\\/]+/,\n inside: { namespace: /^[^\\s>\\/:]+:/ }\n }\n }\n },\n entity: /?[\\da-z]{1,8};/i\n };\n Prism.hooks.add('wrap', function (env) {\n if (env.type === 'entity') {\n env.attributes.title = env.content.replace(/&/, '&');\n }\n });\n Prism.languages.xml = Prism.languages.markup;\n Prism.languages.html = Prism.languages.markup;\n Prism.languages.mathml = Prism.languages.markup;\n Prism.languages.svg = Prism.languages.markup;\n Prism.languages.css = {\n comment: /\\/\\*[\\w\\W]*?\\*\\//,\n atrule: {\n pattern: /@[\\w-]+?.*?(;|(?=\\s*\\{))/i,\n inside: { rule: /@[\\w-]+/ }\n },\n url: /url\\((?:([\"'])(\\\\(?:\\r\\n|[\\w\\W])|(?!\\1)[^\\\\\\r\\n])*\\1|.*?)\\)/i,\n selector: /[^\\{\\}\\s][^\\{\\};]*?(?=\\s*\\{)/,\n string: /(\"|')(\\\\(?:\\r\\n|[\\w\\W])|(?!\\1)[^\\\\\\r\\n])*\\1/,\n property: /(\\b|\\B)[\\w-]+(?=\\s*:)/i,\n important: /\\B!important\\b/i,\n function: /[-a-z0-9]+(?=\\()/i,\n punctuation: /[(){};:]/\n };\n Prism.languages.css.atrule.inside.rest = Prism.util.clone(Prism.languages.css);\n if (Prism.languages.markup) {\n Prism.languages.insertBefore('markup', 'tag', {\n style: {\n pattern: /\n","import mod from \"-!../../../cache-loader/dist/cjs.js??ref--12-0!../../../thread-loader/dist/cjs.js!../../../babel-loader/lib/index.js!../../../cache-loader/dist/cjs.js??ref--0-0!../../../vue-loader/lib/index.js??vue-loader-options!./TinymceVue.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../cache-loader/dist/cjs.js??ref--12-0!../../../thread-loader/dist/cjs.js!../../../babel-loader/lib/index.js!../../../cache-loader/dist/cjs.js??ref--0-0!../../../vue-loader/lib/index.js??vue-loader-options!./TinymceVue.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./TinymceVue.vue?vue&type=template&id=7a7628c1&scoped=true&\"\nimport script from \"./TinymceVue.vue?vue&type=script&lang=js&\"\nexport * from \"./TinymceVue.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"7a7628c1\",\n null\n \n)\n\nexport default component.exports","import tinymce from './components/TinymceVue'\n\nexport default tinymce\nexport { tinymce }","//! moment.js locale configuration\n//! locale : Uzbek [uz]\n//! author : Sardor Muminov : https://github.com/muminoff\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var uz = moment.defineLocale('uz', {\n months: 'январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр'.split(\n '_'\n ),\n monthsShort: 'янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек'.split('_'),\n weekdays: 'Якшанба_Душанба_Сешанба_Чоршанба_Пайшанба_Жума_Шанба'.split('_'),\n weekdaysShort: 'Якш_Душ_Сеш_Чор_Пай_Жум_Шан'.split('_'),\n weekdaysMin: 'Як_Ду_Се_Чо_Па_Жу_Ша'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'D MMMM YYYY, dddd HH:mm',\n },\n calendar: {\n sameDay: '[Бугун соат] LT [да]',\n nextDay: '[Эртага] LT [да]',\n nextWeek: 'dddd [куни соат] LT [да]',\n lastDay: '[Кеча соат] LT [да]',\n lastWeek: '[Утган] dddd [куни соат] LT [да]',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'Якин %s ичида',\n past: 'Бир неча %s олдин',\n s: 'фурсат',\n ss: '%d фурсат',\n m: 'бир дакика',\n mm: '%d дакика',\n h: 'бир соат',\n hh: '%d соат',\n d: 'бир кун',\n dd: '%d кун',\n M: 'бир ой',\n MM: '%d ой',\n y: 'бир йил',\n yy: '%d йил',\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 7, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return uz;\n\n})));\n","(function () {\nvar preview = (function () {\n 'use strict';\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.Env');\n\n var getPreviewDialogWidth = function (editor) {\n return parseInt(editor.getParam('plugin_preview_width', '650'), 10);\n };\n var getPreviewDialogHeight = function (editor) {\n return parseInt(editor.getParam('plugin_preview_height', '500'), 10);\n };\n var getContentStyle = function (editor) {\n return editor.getParam('content_style', '');\n };\n var Settings = {\n getPreviewDialogWidth: getPreviewDialogWidth,\n getPreviewDialogHeight: getPreviewDialogHeight,\n getContentStyle: getContentStyle\n };\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n var getPreviewHtml = function (editor) {\n var previewHtml;\n var headHtml = '';\n var encode = editor.dom.encode;\n var contentStyle = Settings.getContentStyle(editor);\n headHtml += '
' + FilterContent.getPlaceholderHtml() + '
');\n } else {\n editor.insertContent(FilterContent.getPlaceholderHtml());\n }\n });\n };\n var Commands = { register: register };\n\n var setup$1 = function (editor) {\n editor.on('ResolveName', function (e) {\n if (e.target.nodeName === 'IMG' && editor.dom.hasClass(e.target, FilterContent.getPageBreakClass())) {\n e.name = 'pagebreak';\n }\n });\n };\n var ResolveName = { setup: setup$1 };\n\n var register$1 = function (editor) {\n editor.addButton('pagebreak', {\n title: 'Page break',\n cmd: 'mcePageBreak'\n });\n editor.addMenuItem('pagebreak', {\n text: 'Page break',\n icon: 'pagebreak',\n cmd: 'mcePageBreak',\n context: 'insert'\n });\n };\n var Buttons = { register: register$1 };\n\n global.add('pagebreak', function (editor) {\n Commands.register(editor);\n Buttons.register(editor);\n FilterContent.setup(editor);\n ResolveName.setup(editor);\n });\n function Plugin () {\n }\n\n return Plugin;\n\n}());\n})();\n","// Exports the \"hr\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/hr')\n// ES2015:\n// import 'tinymce/plugins/hr'\nrequire('./plugin.js');","// Exports the \"emoticons\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/emoticons')\n// ES2015:\n// import 'tinymce/plugins/emoticons'\nrequire('./plugin.js');","//! moment.js locale configuration\n//! locale : Indonesian [id]\n//! author : Mohammad Satrio Utomo : https://github.com/tyok\n//! reference: http://id.wikisource.org/wiki/Pedoman_Umum_Ejaan_Bahasa_Indonesia_yang_Disempurnakan\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var id = moment.defineLocale('id', {\n months: 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember'.split(\n '_'\n ),\n monthsShort: 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Agt_Sep_Okt_Nov_Des'.split('_'),\n weekdays: 'Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu'.split('_'),\n weekdaysShort: 'Min_Sen_Sel_Rab_Kam_Jum_Sab'.split('_'),\n weekdaysMin: 'Mg_Sn_Sl_Rb_Km_Jm_Sb'.split('_'),\n longDateFormat: {\n LT: 'HH.mm',\n LTS: 'HH.mm.ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY [pukul] HH.mm',\n LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm',\n },\n meridiemParse: /pagi|siang|sore|malam/,\n meridiemHour: function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === 'pagi') {\n return hour;\n } else if (meridiem === 'siang') {\n return hour >= 11 ? hour : hour + 12;\n } else if (meridiem === 'sore' || meridiem === 'malam') {\n return hour + 12;\n }\n },\n meridiem: function (hours, minutes, isLower) {\n if (hours < 11) {\n return 'pagi';\n } else if (hours < 15) {\n return 'siang';\n } else if (hours < 19) {\n return 'sore';\n } else {\n return 'malam';\n }\n },\n calendar: {\n sameDay: '[Hari ini pukul] LT',\n nextDay: '[Besok pukul] LT',\n nextWeek: 'dddd [pukul] LT',\n lastDay: '[Kemarin pukul] LT',\n lastWeek: 'dddd [lalu pukul] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'dalam %s',\n past: '%s yang lalu',\n s: 'beberapa detik',\n ss: '%d detik',\n m: 'semenit',\n mm: '%d menit',\n h: 'sejam',\n hh: '%d jam',\n d: 'sehari',\n dd: '%d hari',\n M: 'sebulan',\n MM: '%d bulan',\n y: 'setahun',\n yy: '%d tahun',\n },\n week: {\n dow: 0, // Sunday is the first day of the week.\n doy: 6, // The week that contains Jan 6th is the first week of the year.\n },\n });\n\n return id;\n\n})));\n","//! moment.js locale configuration\n//! locale : Irish or Irish Gaelic [ga]\n//! author : André Silva : https://github.com/askpt\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var months = [\n 'Eanáir',\n 'Feabhra',\n 'Márta',\n 'Aibreán',\n 'Bealtaine',\n 'Meitheamh',\n 'Iúil',\n 'Lúnasa',\n 'Meán Fómhair',\n 'Deireadh Fómhair',\n 'Samhain',\n 'Nollaig',\n ],\n monthsShort = [\n 'Ean',\n 'Feabh',\n 'Márt',\n 'Aib',\n 'Beal',\n 'Meith',\n 'Iúil',\n 'Lún',\n 'M.F.',\n 'D.F.',\n 'Samh',\n 'Noll',\n ],\n weekdays = [\n 'Dé Domhnaigh',\n 'Dé Luain',\n 'Dé Máirt',\n 'Dé Céadaoin',\n 'Déardaoin',\n 'Dé hAoine',\n 'Dé Sathairn',\n ],\n weekdaysShort = ['Domh', 'Luan', 'Máirt', 'Céad', 'Déar', 'Aoine', 'Sath'],\n weekdaysMin = ['Do', 'Lu', 'Má', 'Cé', 'Dé', 'A', 'Sa'];\n\n var ga = moment.defineLocale('ga', {\n months: months,\n monthsShort: monthsShort,\n monthsParseExact: true,\n weekdays: weekdays,\n weekdaysShort: weekdaysShort,\n weekdaysMin: weekdaysMin,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd, D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[Inniu ag] LT',\n nextDay: '[Amárach ag] LT',\n nextWeek: 'dddd [ag] LT',\n lastDay: '[Inné ag] LT',\n lastWeek: 'dddd [seo caite] [ag] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'i %s',\n past: '%s ó shin',\n s: 'cúpla soicind',\n ss: '%d soicind',\n m: 'nóiméad',\n mm: '%d nóiméad',\n h: 'uair an chloig',\n hh: '%d uair an chloig',\n d: 'lá',\n dd: '%d lá',\n M: 'mí',\n MM: '%d míonna',\n y: 'bliain',\n yy: '%d bliain',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(d|na|mh)/,\n ordinal: function (number) {\n var output = number === 1 ? 'd' : number % 10 === 2 ? 'na' : 'mh';\n return number + output;\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return ga;\n\n})));\n","//! moment.js locale configuration\n//! locale : Urdu [ur]\n//! author : Sawood Alam : https://github.com/ibnesayeed\n//! author : Zack : https://github.com/ZackVision\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var months = [\n 'جنوری',\n 'فروری',\n 'مارچ',\n 'اپریل',\n 'مئی',\n 'جون',\n 'جولائی',\n 'اگست',\n 'ستمبر',\n 'اکتوبر',\n 'نومبر',\n 'دسمبر',\n ],\n days = ['اتوار', 'پیر', 'منگل', 'بدھ', 'جمعرات', 'جمعہ', 'ہفتہ'];\n\n var ur = moment.defineLocale('ur', {\n months: months,\n monthsShort: months,\n weekdays: days,\n weekdaysShort: days,\n weekdaysMin: days,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd، D MMMM YYYY HH:mm',\n },\n meridiemParse: /صبح|شام/,\n isPM: function (input) {\n return 'شام' === input;\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 12) {\n return 'صبح';\n }\n return 'شام';\n },\n calendar: {\n sameDay: '[آج بوقت] LT',\n nextDay: '[کل بوقت] LT',\n nextWeek: 'dddd [بوقت] LT',\n lastDay: '[گذشتہ روز بوقت] LT',\n lastWeek: '[گذشتہ] dddd [بوقت] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%s بعد',\n past: '%s قبل',\n s: 'چند سیکنڈ',\n ss: '%d سیکنڈ',\n m: 'ایک منٹ',\n mm: '%d منٹ',\n h: 'ایک گھنٹہ',\n hh: '%d گھنٹے',\n d: 'ایک دن',\n dd: '%d دن',\n M: 'ایک ماہ',\n MM: '%d ماہ',\n y: 'ایک سال',\n yy: '%d سال',\n },\n preparse: function (string) {\n return string.replace(/،/g, ',');\n },\n postformat: function (string) {\n return string.replace(/,/g, '،');\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return ur;\n\n})));\n","//! moment.js locale configuration\n//! locale : siSwati [ss]\n//! author : Nicolai Davies' + ' ' + chrText + ' ' + ' | ';\n } else {\n gridHtml += '';\n }\n }\n gridHtml += ' |
B:
\nC:
\nD:
\nE:
\nF:
\nG:
\n]*>/gi, '[quote]');\n rep(/<\\/blockquote>/gi, '[/quote]');\n rep(/
/gi, '\\n');\n rep(/
/gi, '\\n');\n rep(/
/gi, '\\n');\n rep(//gi, '');\n rep(/<\\/p>/gi, '\\n');\n rep(/ |\\u00a0/gi, ' ');\n rep(/"/gi, '\"');\n rep(/</gi, '<');\n rep(/>/gi, '>');\n rep(/&/gi, '&');\n return s;\n };\n var bbcode2html = function (s) {\n s = global$1.trim(s);\n var rep = function (re, str) {\n s = s.replace(re, str);\n };\n rep(/\\n/gi, '
');\n rep(/\\[b\\]/gi, '');\n rep(/\\[\\/b\\]/gi, '');\n rep(/\\[i\\]/gi, '');\n rep(/\\[\\/i\\]/gi, '');\n rep(/\\[u\\]/gi, '');\n rep(/\\[\\/u\\]/gi, '');\n rep(/\\[url=([^\\]]+)\\](.*?)\\[\\/url\\]/gi, '$2');\n rep(/\\[url\\](.*?)\\[\\/url\\]/gi, '$1');\n rep(/\\[img\\](.*?)\\[\\/img\\]/gi, '');\n rep(/\\[color=(.*?)\\](.*?)\\[\\/color\\]/gi, '$2');\n rep(/\\[code\\](.*?)\\[\\/code\\]/gi, '$1 ');\n rep(/\\[quote.*?\\](.*?)\\[\\/quote\\]/gi, '$1 ');\n return s;\n };\n var Convert = {\n html2bbcode: html2bbcode,\n bbcode2html: bbcode2html\n };\n\n global.add('bbcode', function () {\n return {\n init: function (editor) {\n editor.on('beforeSetContent', function (e) {\n e.content = Convert.bbcode2html(e.content);\n });\n editor.on('postProcess', function (e) {\n if (e.set) {\n e.content = Convert.bbcode2html(e.content);\n }\n if (e.get) {\n e.content = Convert.html2bbcode(e.content);\n }\n });\n }\n };\n });\n function Plugin () {\n }\n\n return Plugin;\n\n}());\n})();\n","//! moment.js locale configuration\n//! locale : Latvian [lv]\n//! author : Kristaps Karlsons : https://github.com/skakri\n//! author : Jānis Elmeris : https://github.com/JanisE\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var units = {\n ss: 'sekundes_sekundēm_sekunde_sekundes'.split('_'),\n m: 'minūtes_minūtēm_minūte_minūtes'.split('_'),\n mm: 'minūtes_minūtēm_minūte_minūtes'.split('_'),\n h: 'stundas_stundām_stunda_stundas'.split('_'),\n hh: 'stundas_stundām_stunda_stundas'.split('_'),\n d: 'dienas_dienām_diena_dienas'.split('_'),\n dd: 'dienas_dienām_diena_dienas'.split('_'),\n M: 'mēneša_mēnešiem_mēnesis_mēneši'.split('_'),\n MM: 'mēneša_mēnešiem_mēnesis_mēneši'.split('_'),\n y: 'gada_gadiem_gads_gadi'.split('_'),\n yy: 'gada_gadiem_gads_gadi'.split('_'),\n };\n /**\n * @param withoutSuffix boolean true = a length of time; false = before/after a period of time.\n */\n function format(forms, number, withoutSuffix) {\n if (withoutSuffix) {\n // E.g. \"21 minūte\", \"3 minūtes\".\n return number % 10 === 1 && number % 100 !== 11 ? forms[2] : forms[3];\n } else {\n // E.g. \"21 minūtes\" as in \"pēc 21 minūtes\".\n // E.g. \"3 minūtēm\" as in \"pēc 3 minūtēm\".\n return number % 10 === 1 && number % 100 !== 11 ? forms[0] : forms[1];\n }\n }\n function relativeTimeWithPlural(number, withoutSuffix, key) {\n return number + ' ' + format(units[key], number, withoutSuffix);\n }\n function relativeTimeWithSingular(number, withoutSuffix, key) {\n return format(units[key], number, withoutSuffix);\n }\n function relativeSeconds(number, withoutSuffix) {\n return withoutSuffix ? 'dažas sekundes' : 'dažām sekundēm';\n }\n\n var lv = moment.defineLocale('lv', {\n months: 'janvāris_februāris_marts_aprīlis_maijs_jūnijs_jūlijs_augusts_septembris_oktobris_novembris_decembris'.split(\n '_'\n ),\n monthsShort: 'jan_feb_mar_apr_mai_jūn_jūl_aug_sep_okt_nov_dec'.split('_'),\n weekdays:\n 'svētdiena_pirmdiena_otrdiena_trešdiena_ceturtdiena_piektdiena_sestdiena'.split(\n '_'\n ),\n weekdaysShort: 'Sv_P_O_T_C_Pk_S'.split('_'),\n weekdaysMin: 'Sv_P_O_T_C_Pk_S'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD.MM.YYYY.',\n LL: 'YYYY. [gada] D. MMMM',\n LLL: 'YYYY. [gada] D. MMMM, HH:mm',\n LLLL: 'YYYY. [gada] D. MMMM, dddd, HH:mm',\n },\n calendar: {\n sameDay: '[Šodien pulksten] LT',\n nextDay: '[Rīt pulksten] LT',\n nextWeek: 'dddd [pulksten] LT',\n lastDay: '[Vakar pulksten] LT',\n lastWeek: '[Pagājušā] dddd [pulksten] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'pēc %s',\n past: 'pirms %s',\n s: relativeSeconds,\n ss: relativeTimeWithPlural,\n m: relativeTimeWithSingular,\n mm: relativeTimeWithPlural,\n h: relativeTimeWithSingular,\n hh: relativeTimeWithPlural,\n d: relativeTimeWithSingular,\n dd: relativeTimeWithPlural,\n M: relativeTimeWithSingular,\n MM: relativeTimeWithPlural,\n y: relativeTimeWithSingular,\n yy: relativeTimeWithPlural,\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal: '%d.',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return lv;\n\n})));\n","//! moment.js locale configuration\n//! locale : German (Switzerland) [de-ch]\n//! author : sschueller : https://github.com/sschueller\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n function processRelativeTime(number, withoutSuffix, key, isFuture) {\n var format = {\n m: ['eine Minute', 'einer Minute'],\n h: ['eine Stunde', 'einer Stunde'],\n d: ['ein Tag', 'einem Tag'],\n dd: [number + ' Tage', number + ' Tagen'],\n w: ['eine Woche', 'einer Woche'],\n M: ['ein Monat', 'einem Monat'],\n MM: [number + ' Monate', number + ' Monaten'],\n y: ['ein Jahr', 'einem Jahr'],\n yy: [number + ' Jahre', number + ' Jahren'],\n };\n return withoutSuffix ? format[key][0] : format[key][1];\n }\n\n var deCh = moment.defineLocale('de-ch', {\n months: 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split(\n '_'\n ),\n monthsShort:\n 'Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split('_'),\n monthsParseExact: true,\n weekdays:\n 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split(\n '_'\n ),\n weekdaysShort: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),\n weekdaysMin: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD.MM.YYYY',\n LL: 'D. MMMM YYYY',\n LLL: 'D. MMMM YYYY HH:mm',\n LLLL: 'dddd, D. MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[heute um] LT [Uhr]',\n sameElse: 'L',\n nextDay: '[morgen um] LT [Uhr]',\n nextWeek: 'dddd [um] LT [Uhr]',\n lastDay: '[gestern um] LT [Uhr]',\n lastWeek: '[letzten] dddd [um] LT [Uhr]',\n },\n relativeTime: {\n future: 'in %s',\n past: 'vor %s',\n s: 'ein paar Sekunden',\n ss: '%d Sekunden',\n m: processRelativeTime,\n mm: '%d Minuten',\n h: processRelativeTime,\n hh: '%d Stunden',\n d: processRelativeTime,\n dd: processRelativeTime,\n w: processRelativeTime,\n ww: '%d Wochen',\n M: processRelativeTime,\n MM: processRelativeTime,\n y: processRelativeTime,\n yy: processRelativeTime,\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal: '%d.',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return deCh;\n\n})));\n","(function () {\nvar autolink = (function () {\n 'use strict';\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.Env');\n\n var getAutoLinkPattern = function (editor) {\n return editor.getParam('autolink_pattern', /^(https?:\\/\\/|ssh:\\/\\/|ftp:\\/\\/|file:\\/|www\\.|(?:mailto:)?[A-Z0-9._%+\\-]+@)(.+)$/i);\n };\n var getDefaultLinkTarget = function (editor) {\n return editor.getParam('default_link_target', '');\n };\n var Settings = {\n getAutoLinkPattern: getAutoLinkPattern,\n getDefaultLinkTarget: getDefaultLinkTarget\n };\n\n var rangeEqualsDelimiterOrSpace = function (rangeString, delimiter) {\n return rangeString === delimiter || rangeString === ' ' || rangeString.charCodeAt(0) === 160;\n };\n var handleEclipse = function (editor) {\n parseCurrentLine(editor, -1, '(');\n };\n var handleSpacebar = function (editor) {\n parseCurrentLine(editor, 0, '');\n };\n var handleEnter = function (editor) {\n parseCurrentLine(editor, -1, '');\n };\n var scopeIndex = function (container, index) {\n if (index < 0) {\n index = 0;\n }\n if (container.nodeType === 3) {\n var len = container.data.length;\n if (index > len) {\n index = len;\n }\n }\n return index;\n };\n var setStart = function (rng, container, offset) {\n if (container.nodeType !== 1 || container.hasChildNodes()) {\n rng.setStart(container, scopeIndex(container, offset));\n } else {\n rng.setStartBefore(container);\n }\n };\n var setEnd = function (rng, container, offset) {\n if (container.nodeType !== 1 || container.hasChildNodes()) {\n rng.setEnd(container, scopeIndex(container, offset));\n } else {\n rng.setEndAfter(container);\n }\n };\n var parseCurrentLine = function (editor, endOffset, delimiter) {\n var rng, end, start, endContainer, bookmark, text, matches, prev, len, rngText;\n var autoLinkPattern = Settings.getAutoLinkPattern(editor);\n var defaultLinkTarget = Settings.getDefaultLinkTarget(editor);\n if (editor.selection.getNode().tagName === 'A') {\n return;\n }\n rng = editor.selection.getRng(true).cloneRange();\n if (rng.startOffset < 5) {\n prev = rng.endContainer.previousSibling;\n if (!prev) {\n if (!rng.endContainer.firstChild || !rng.endContainer.firstChild.nextSibling) {\n return;\n }\n prev = rng.endContainer.firstChild.nextSibling;\n }\n len = prev.length;\n setStart(rng, prev, len);\n setEnd(rng, prev, len);\n if (rng.endOffset < 5) {\n return;\n }\n end = rng.endOffset;\n endContainer = prev;\n } else {\n endContainer = rng.endContainer;\n if (endContainer.nodeType !== 3 && endContainer.firstChild) {\n while (endContainer.nodeType !== 3 && endContainer.firstChild) {\n endContainer = endContainer.firstChild;\n }\n if (endContainer.nodeType === 3) {\n setStart(rng, endContainer, 0);\n setEnd(rng, endContainer, endContainer.nodeValue.length);\n }\n }\n if (rng.endOffset === 1) {\n end = 2;\n } else {\n end = rng.endOffset - 1 - endOffset;\n }\n }\n start = end;\n do {\n setStart(rng, endContainer, end >= 2 ? end - 2 : 0);\n setEnd(rng, endContainer, end >= 1 ? end - 1 : 0);\n end -= 1;\n rngText = rng.toString();\n } while (rngText !== ' ' && rngText !== '' && rngText.charCodeAt(0) !== 160 && end - 2 >= 0 && rngText !== delimiter);\n if (rangeEqualsDelimiterOrSpace(rng.toString(), delimiter)) {\n setStart(rng, endContainer, end);\n setEnd(rng, endContainer, start);\n end += 1;\n } else if (rng.startOffset === 0) {\n setStart(rng, endContainer, 0);\n setEnd(rng, endContainer, start);\n } else {\n setStart(rng, endContainer, end);\n setEnd(rng, endContainer, start);\n }\n text = rng.toString();\n if (text.charAt(text.length - 1) === '.') {\n setEnd(rng, endContainer, start - 1);\n }\n text = rng.toString().trim();\n matches = text.match(autoLinkPattern);\n if (matches) {\n if (matches[1] === 'www.') {\n matches[1] = 'http://www.';\n } else if (/@$/.test(matches[1]) && !/^mailto:/.test(matches[1])) {\n matches[1] = 'mailto:' + matches[1];\n }\n bookmark = editor.selection.getBookmark();\n editor.selection.setRng(rng);\n editor.execCommand('createlink', false, matches[1] + matches[2]);\n if (defaultLinkTarget) {\n editor.dom.setAttrib(editor.selection.getNode(), 'target', defaultLinkTarget);\n }\n editor.selection.moveToBookmark(bookmark);\n editor.nodeChanged();\n }\n };\n var setup = function (editor) {\n var autoUrlDetectState;\n editor.on('keydown', function (e) {\n if (e.keyCode === 13) {\n return handleEnter(editor);\n }\n });\n if (global$1.ie) {\n editor.on('focus', function () {\n if (!autoUrlDetectState) {\n autoUrlDetectState = true;\n try {\n editor.execCommand('AutoUrlDetect', false, true);\n } catch (ex) {\n }\n }\n });\n return;\n }\n editor.on('keypress', function (e) {\n if (e.keyCode === 41) {\n return handleEclipse(editor);\n }\n });\n editor.on('keyup', function (e) {\n if (e.keyCode === 32) {\n return handleSpacebar(editor);\n }\n });\n };\n var Keys = { setup: setup };\n\n global.add('autolink', function (editor) {\n Keys.setup(editor);\n });\n function Plugin () {\n }\n\n return Plugin;\n\n}());\n})();\n","//! moment.js locale configuration\n//! locale : Central Atlas Tamazight [tzm]\n//! author : Abdel Said : https://github.com/abdelsaid\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var tzm = moment.defineLocale('tzm', {\n months: 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split(\n '_'\n ),\n monthsShort:\n 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split(\n '_'\n ),\n weekdays: 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),\n weekdaysShort: 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),\n weekdaysMin: 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[ⴰⵙⴷⵅ ⴴ] LT',\n nextDay: '[ⴰⵙⴽⴰ ⴴ] LT',\n nextWeek: 'dddd [ⴴ] LT',\n lastDay: '[ⴰⵚⴰⵏⵜ ⴴ] LT',\n lastWeek: 'dddd [ⴴ] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'ⴷⴰⴷⵅ ⵙ ⵢⴰⵏ %s',\n past: 'ⵢⴰⵏ %s',\n s: 'ⵉⵎⵉⴽ',\n ss: '%d ⵉⵎⵉⴽ',\n m: 'ⵎⵉⵏⵓⴺ',\n mm: '%d ⵎⵉⵏⵓⴺ',\n h: 'ⵙⴰⵄⴰ',\n hh: '%d ⵜⴰⵙⵙⴰⵄⵉⵏ',\n d: 'ⴰⵙⵙ',\n dd: '%d oⵙⵙⴰⵏ',\n M: 'ⴰⵢoⵓⵔ',\n MM: '%d ⵉⵢⵢⵉⵔⵏ',\n y: 'ⴰⵙⴳⴰⵙ',\n yy: '%d ⵉⵙⴳⴰⵙⵏ',\n },\n week: {\n dow: 6, // Saturday is the first day of the week.\n doy: 12, // The week that contains Jan 12th is the first week of the year.\n },\n });\n\n return tzm;\n\n})));\n","// Exports the \"nonbreaking\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/nonbreaking')\n// ES2015:\n// import 'tinymce/plugins/nonbreaking'\nrequire('./plugin.js');","//! moment.js\n//! version : 2.29.4\n//! authors : Tim Wood, Iskren Chernev, Moment.js contributors\n//! license : MIT\n//! momentjs.com\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n global.moment = factory()\n}(this, (function () { 'use strict';\n\n var hookCallback;\n\n function hooks() {\n return hookCallback.apply(null, arguments);\n }\n\n // This is done to register the method called with moment()\n // without creating circular dependencies.\n function setHookCallback(callback) {\n hookCallback = callback;\n }\n\n function isArray(input) {\n return (\n input instanceof Array ||\n Object.prototype.toString.call(input) === '[object Array]'\n );\n }\n\n function isObject(input) {\n // IE8 will treat undefined and null as object if it wasn't for\n // input != null\n return (\n input != null &&\n Object.prototype.toString.call(input) === '[object Object]'\n );\n }\n\n function hasOwnProp(a, b) {\n return Object.prototype.hasOwnProperty.call(a, b);\n }\n\n function isObjectEmpty(obj) {\n if (Object.getOwnPropertyNames) {\n return Object.getOwnPropertyNames(obj).length === 0;\n } else {\n var k;\n for (k in obj) {\n if (hasOwnProp(obj, k)) {\n return false;\n }\n }\n return true;\n }\n }\n\n function isUndefined(input) {\n return input === void 0;\n }\n\n function isNumber(input) {\n return (\n typeof input === 'number' ||\n Object.prototype.toString.call(input) === '[object Number]'\n );\n }\n\n function isDate(input) {\n return (\n input instanceof Date ||\n Object.prototype.toString.call(input) === '[object Date]'\n );\n }\n\n function map(arr, fn) {\n var res = [],\n i,\n arrLen = arr.length;\n for (i = 0; i < arrLen; ++i) {\n res.push(fn(arr[i], i));\n }\n return res;\n }\n\n function extend(a, b) {\n for (var i in b) {\n if (hasOwnProp(b, i)) {\n a[i] = b[i];\n }\n }\n\n if (hasOwnProp(b, 'toString')) {\n a.toString = b.toString;\n }\n\n if (hasOwnProp(b, 'valueOf')) {\n a.valueOf = b.valueOf;\n }\n\n return a;\n }\n\n function createUTC(input, format, locale, strict) {\n return createLocalOrUTC(input, format, locale, strict, true).utc();\n }\n\n function defaultParsingFlags() {\n // We need to deep clone this object.\n return {\n empty: false,\n unusedTokens: [],\n unusedInput: [],\n overflow: -2,\n charsLeftOver: 0,\n nullInput: false,\n invalidEra: null,\n invalidMonth: null,\n invalidFormat: false,\n userInvalidated: false,\n iso: false,\n parsedDateParts: [],\n era: null,\n meridiem: null,\n rfc2822: false,\n weekdayMismatch: false,\n };\n }\n\n function getParsingFlags(m) {\n if (m._pf == null) {\n m._pf = defaultParsingFlags();\n }\n return m._pf;\n }\n\n var some;\n if (Array.prototype.some) {\n some = Array.prototype.some;\n } else {\n some = function (fun) {\n var t = Object(this),\n len = t.length >>> 0,\n i;\n\n for (i = 0; i < len; i++) {\n if (i in t && fun.call(this, t[i], i, t)) {\n return true;\n }\n }\n\n return false;\n };\n }\n\n function isValid(m) {\n if (m._isValid == null) {\n var flags = getParsingFlags(m),\n parsedParts = some.call(flags.parsedDateParts, function (i) {\n return i != null;\n }),\n isNowValid =\n !isNaN(m._d.getTime()) &&\n flags.overflow < 0 &&\n !flags.empty &&\n !flags.invalidEra &&\n !flags.invalidMonth &&\n !flags.invalidWeekday &&\n !flags.weekdayMismatch &&\n !flags.nullInput &&\n !flags.invalidFormat &&\n !flags.userInvalidated &&\n (!flags.meridiem || (flags.meridiem && parsedParts));\n\n if (m._strict) {\n isNowValid =\n isNowValid &&\n flags.charsLeftOver === 0 &&\n flags.unusedTokens.length === 0 &&\n flags.bigHour === undefined;\n }\n\n if (Object.isFrozen == null || !Object.isFrozen(m)) {\n m._isValid = isNowValid;\n } else {\n return isNowValid;\n }\n }\n return m._isValid;\n }\n\n function createInvalid(flags) {\n var m = createUTC(NaN);\n if (flags != null) {\n extend(getParsingFlags(m), flags);\n } else {\n getParsingFlags(m).userInvalidated = true;\n }\n\n return m;\n }\n\n // Plugins that add properties should also add the key here (null value),\n // so we can properly clone ourselves.\n var momentProperties = (hooks.momentProperties = []),\n updateInProgress = false;\n\n function copyConfig(to, from) {\n var i,\n prop,\n val,\n momentPropertiesLen = momentProperties.length;\n\n if (!isUndefined(from._isAMomentObject)) {\n to._isAMomentObject = from._isAMomentObject;\n }\n if (!isUndefined(from._i)) {\n to._i = from._i;\n }\n if (!isUndefined(from._f)) {\n to._f = from._f;\n }\n if (!isUndefined(from._l)) {\n to._l = from._l;\n }\n if (!isUndefined(from._strict)) {\n to._strict = from._strict;\n }\n if (!isUndefined(from._tzm)) {\n to._tzm = from._tzm;\n }\n if (!isUndefined(from._isUTC)) {\n to._isUTC = from._isUTC;\n }\n if (!isUndefined(from._offset)) {\n to._offset = from._offset;\n }\n if (!isUndefined(from._pf)) {\n to._pf = getParsingFlags(from);\n }\n if (!isUndefined(from._locale)) {\n to._locale = from._locale;\n }\n\n if (momentPropertiesLen > 0) {\n for (i = 0; i < momentPropertiesLen; i++) {\n prop = momentProperties[i];\n val = from[prop];\n if (!isUndefined(val)) {\n to[prop] = val;\n }\n }\n }\n\n return to;\n }\n\n // Moment prototype object\n function Moment(config) {\n copyConfig(this, config);\n this._d = new Date(config._d != null ? config._d.getTime() : NaN);\n if (!this.isValid()) {\n this._d = new Date(NaN);\n }\n // Prevent infinite loop in case updateOffset creates new moment\n // objects.\n if (updateInProgress === false) {\n updateInProgress = true;\n hooks.updateOffset(this);\n updateInProgress = false;\n }\n }\n\n function isMoment(obj) {\n return (\n obj instanceof Moment || (obj != null && obj._isAMomentObject != null)\n );\n }\n\n function warn(msg) {\n if (\n hooks.suppressDeprecationWarnings === false &&\n typeof console !== 'undefined' &&\n console.warn\n ) {\n console.warn('Deprecation warning: ' + msg);\n }\n }\n\n function deprecate(msg, fn) {\n var firstTime = true;\n\n return extend(function () {\n if (hooks.deprecationHandler != null) {\n hooks.deprecationHandler(null, msg);\n }\n if (firstTime) {\n var args = [],\n arg,\n i,\n key,\n argLen = arguments.length;\n for (i = 0; i < argLen; i++) {\n arg = '';\n if (typeof arguments[i] === 'object') {\n arg += '\\n[' + i + '] ';\n for (key in arguments[0]) {\n if (hasOwnProp(arguments[0], key)) {\n arg += key + ': ' + arguments[0][key] + ', ';\n }\n }\n arg = arg.slice(0, -2); // Remove trailing comma and space\n } else {\n arg = arguments[i];\n }\n args.push(arg);\n }\n warn(\n msg +\n '\\nArguments: ' +\n Array.prototype.slice.call(args).join('') +\n '\\n' +\n new Error().stack\n );\n firstTime = false;\n }\n return fn.apply(this, arguments);\n }, fn);\n }\n\n var deprecations = {};\n\n function deprecateSimple(name, msg) {\n if (hooks.deprecationHandler != null) {\n hooks.deprecationHandler(name, msg);\n }\n if (!deprecations[name]) {\n warn(msg);\n deprecations[name] = true;\n }\n }\n\n hooks.suppressDeprecationWarnings = false;\n hooks.deprecationHandler = null;\n\n function isFunction(input) {\n return (\n (typeof Function !== 'undefined' && input instanceof Function) ||\n Object.prototype.toString.call(input) === '[object Function]'\n );\n }\n\n function set(config) {\n var prop, i;\n for (i in config) {\n if (hasOwnProp(config, i)) {\n prop = config[i];\n if (isFunction(prop)) {\n this[i] = prop;\n } else {\n this['_' + i] = prop;\n }\n }\n }\n this._config = config;\n // Lenient ordinal parsing accepts just a number in addition to\n // number + (possibly) stuff coming from _dayOfMonthOrdinalParse.\n // TODO: Remove \"ordinalParse\" fallback in next major release.\n this._dayOfMonthOrdinalParseLenient = new RegExp(\n (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) +\n '|' +\n /\\d{1,2}/.source\n );\n }\n\n function mergeConfigs(parentConfig, childConfig) {\n var res = extend({}, parentConfig),\n prop;\n for (prop in childConfig) {\n if (hasOwnProp(childConfig, prop)) {\n if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {\n res[prop] = {};\n extend(res[prop], parentConfig[prop]);\n extend(res[prop], childConfig[prop]);\n } else if (childConfig[prop] != null) {\n res[prop] = childConfig[prop];\n } else {\n delete res[prop];\n }\n }\n }\n for (prop in parentConfig) {\n if (\n hasOwnProp(parentConfig, prop) &&\n !hasOwnProp(childConfig, prop) &&\n isObject(parentConfig[prop])\n ) {\n // make sure changes to properties don't modify parent config\n res[prop] = extend({}, res[prop]);\n }\n }\n return res;\n }\n\n function Locale(config) {\n if (config != null) {\n this.set(config);\n }\n }\n\n var keys;\n\n if (Object.keys) {\n keys = Object.keys;\n } else {\n keys = function (obj) {\n var i,\n res = [];\n for (i in obj) {\n if (hasOwnProp(obj, i)) {\n res.push(i);\n }\n }\n return res;\n };\n }\n\n var defaultCalendar = {\n sameDay: '[Today at] LT',\n nextDay: '[Tomorrow at] LT',\n nextWeek: 'dddd [at] LT',\n lastDay: '[Yesterday at] LT',\n lastWeek: '[Last] dddd [at] LT',\n sameElse: 'L',\n };\n\n function calendar(key, mom, now) {\n var output = this._calendar[key] || this._calendar['sameElse'];\n return isFunction(output) ? output.call(mom, now) : output;\n }\n\n function zeroFill(number, targetLength, forceSign) {\n var absNumber = '' + Math.abs(number),\n zerosToFill = targetLength - absNumber.length,\n sign = number >= 0;\n return (\n (sign ? (forceSign ? '+' : '') : '-') +\n Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) +\n absNumber\n );\n }\n\n var formattingTokens =\n /(\\[[^\\[]*\\])|(\\\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,\n localFormattingTokens = /(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g,\n formatFunctions = {},\n formatTokenFunctions = {};\n\n // token: 'M'\n // padded: ['MM', 2]\n // ordinal: 'Mo'\n // callback: function () { this.month() + 1 }\n function addFormatToken(token, padded, ordinal, callback) {\n var func = callback;\n if (typeof callback === 'string') {\n func = function () {\n return this[callback]();\n };\n }\n if (token) {\n formatTokenFunctions[token] = func;\n }\n if (padded) {\n formatTokenFunctions[padded[0]] = function () {\n return zeroFill(func.apply(this, arguments), padded[1], padded[2]);\n };\n }\n if (ordinal) {\n formatTokenFunctions[ordinal] = function () {\n return this.localeData().ordinal(\n func.apply(this, arguments),\n token\n );\n };\n }\n }\n\n function removeFormattingTokens(input) {\n if (input.match(/\\[[\\s\\S]/)) {\n return input.replace(/^\\[|\\]$/g, '');\n }\n return input.replace(/\\\\/g, '');\n }\n\n function makeFormatFunction(format) {\n var array = format.match(formattingTokens),\n i,\n length;\n\n for (i = 0, length = array.length; i < length; i++) {\n if (formatTokenFunctions[array[i]]) {\n array[i] = formatTokenFunctions[array[i]];\n } else {\n array[i] = removeFormattingTokens(array[i]);\n }\n }\n\n return function (mom) {\n var output = '',\n i;\n for (i = 0; i < length; i++) {\n output += isFunction(array[i])\n ? array[i].call(mom, format)\n : array[i];\n }\n return output;\n };\n }\n\n // format date using native date object\n function formatMoment(m, format) {\n if (!m.isValid()) {\n return m.localeData().invalidDate();\n }\n\n format = expandFormat(format, m.localeData());\n formatFunctions[format] =\n formatFunctions[format] || makeFormatFunction(format);\n\n return formatFunctions[format](m);\n }\n\n function expandFormat(format, locale) {\n var i = 5;\n\n function replaceLongDateFormatTokens(input) {\n return locale.longDateFormat(input) || input;\n }\n\n localFormattingTokens.lastIndex = 0;\n while (i >= 0 && localFormattingTokens.test(format)) {\n format = format.replace(\n localFormattingTokens,\n replaceLongDateFormatTokens\n );\n localFormattingTokens.lastIndex = 0;\n i -= 1;\n }\n\n return format;\n }\n\n var defaultLongDateFormat = {\n LTS: 'h:mm:ss A',\n LT: 'h:mm A',\n L: 'MM/DD/YYYY',\n LL: 'MMMM D, YYYY',\n LLL: 'MMMM D, YYYY h:mm A',\n LLLL: 'dddd, MMMM D, YYYY h:mm A',\n };\n\n function longDateFormat(key) {\n var format = this._longDateFormat[key],\n formatUpper = this._longDateFormat[key.toUpperCase()];\n\n if (format || !formatUpper) {\n return format;\n }\n\n this._longDateFormat[key] = formatUpper\n .match(formattingTokens)\n .map(function (tok) {\n if (\n tok === 'MMMM' ||\n tok === 'MM' ||\n tok === 'DD' ||\n tok === 'dddd'\n ) {\n return tok.slice(1);\n }\n return tok;\n })\n .join('');\n\n return this._longDateFormat[key];\n }\n\n var defaultInvalidDate = 'Invalid date';\n\n function invalidDate() {\n return this._invalidDate;\n }\n\n var defaultOrdinal = '%d',\n defaultDayOfMonthOrdinalParse = /\\d{1,2}/;\n\n function ordinal(number) {\n return this._ordinal.replace('%d', number);\n }\n\n var defaultRelativeTime = {\n future: 'in %s',\n past: '%s ago',\n s: 'a few seconds',\n ss: '%d seconds',\n m: 'a minute',\n mm: '%d minutes',\n h: 'an hour',\n hh: '%d hours',\n d: 'a day',\n dd: '%d days',\n w: 'a week',\n ww: '%d weeks',\n M: 'a month',\n MM: '%d months',\n y: 'a year',\n yy: '%d years',\n };\n\n function relativeTime(number, withoutSuffix, string, isFuture) {\n var output = this._relativeTime[string];\n return isFunction(output)\n ? output(number, withoutSuffix, string, isFuture)\n : output.replace(/%d/i, number);\n }\n\n function pastFuture(diff, output) {\n var format = this._relativeTime[diff > 0 ? 'future' : 'past'];\n return isFunction(format) ? format(output) : format.replace(/%s/i, output);\n }\n\n var aliases = {};\n\n function addUnitAlias(unit, shorthand) {\n var lowerCase = unit.toLowerCase();\n aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit;\n }\n\n function normalizeUnits(units) {\n return typeof units === 'string'\n ? aliases[units] || aliases[units.toLowerCase()]\n : undefined;\n }\n\n function normalizeObjectUnits(inputObject) {\n var normalizedInput = {},\n normalizedProp,\n prop;\n\n for (prop in inputObject) {\n if (hasOwnProp(inputObject, prop)) {\n normalizedProp = normalizeUnits(prop);\n if (normalizedProp) {\n normalizedInput[normalizedProp] = inputObject[prop];\n }\n }\n }\n\n return normalizedInput;\n }\n\n var priorities = {};\n\n function addUnitPriority(unit, priority) {\n priorities[unit] = priority;\n }\n\n function getPrioritizedUnits(unitsObj) {\n var units = [],\n u;\n for (u in unitsObj) {\n if (hasOwnProp(unitsObj, u)) {\n units.push({ unit: u, priority: priorities[u] });\n }\n }\n units.sort(function (a, b) {\n return a.priority - b.priority;\n });\n return units;\n }\n\n function isLeapYear(year) {\n return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n }\n\n function absFloor(number) {\n if (number < 0) {\n // -0 -> 0\n return Math.ceil(number) || 0;\n } else {\n return Math.floor(number);\n }\n }\n\n function toInt(argumentForCoercion) {\n var coercedNumber = +argumentForCoercion,\n value = 0;\n\n if (coercedNumber !== 0 && isFinite(coercedNumber)) {\n value = absFloor(coercedNumber);\n }\n\n return value;\n }\n\n function makeGetSet(unit, keepTime) {\n return function (value) {\n if (value != null) {\n set$1(this, unit, value);\n hooks.updateOffset(this, keepTime);\n return this;\n } else {\n return get(this, unit);\n }\n };\n }\n\n function get(mom, unit) {\n return mom.isValid()\n ? mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]()\n : NaN;\n }\n\n function set$1(mom, unit, value) {\n if (mom.isValid() && !isNaN(value)) {\n if (\n unit === 'FullYear' &&\n isLeapYear(mom.year()) &&\n mom.month() === 1 &&\n mom.date() === 29\n ) {\n value = toInt(value);\n mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](\n value,\n mom.month(),\n daysInMonth(value, mom.month())\n );\n } else {\n mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value);\n }\n }\n }\n\n // MOMENTS\n\n function stringGet(units) {\n units = normalizeUnits(units);\n if (isFunction(this[units])) {\n return this[units]();\n }\n return this;\n }\n\n function stringSet(units, value) {\n if (typeof units === 'object') {\n units = normalizeObjectUnits(units);\n var prioritized = getPrioritizedUnits(units),\n i,\n prioritizedLen = prioritized.length;\n for (i = 0; i < prioritizedLen; i++) {\n this[prioritized[i].unit](units[prioritized[i].unit]);\n }\n } else {\n units = normalizeUnits(units);\n if (isFunction(this[units])) {\n return this[units](value);\n }\n }\n return this;\n }\n\n var match1 = /\\d/, // 0 - 9\n match2 = /\\d\\d/, // 00 - 99\n match3 = /\\d{3}/, // 000 - 999\n match4 = /\\d{4}/, // 0000 - 9999\n match6 = /[+-]?\\d{6}/, // -999999 - 999999\n match1to2 = /\\d\\d?/, // 0 - 99\n match3to4 = /\\d\\d\\d\\d?/, // 999 - 9999\n match5to6 = /\\d\\d\\d\\d\\d\\d?/, // 99999 - 999999\n match1to3 = /\\d{1,3}/, // 0 - 999\n match1to4 = /\\d{1,4}/, // 0 - 9999\n match1to6 = /[+-]?\\d{1,6}/, // -999999 - 999999\n matchUnsigned = /\\d+/, // 0 - inf\n matchSigned = /[+-]?\\d+/, // -inf - inf\n matchOffset = /Z|[+-]\\d\\d:?\\d\\d/gi, // +00:00 -00:00 +0000 -0000 or Z\n matchShortOffset = /Z|[+-]\\d\\d(?::?\\d\\d)?/gi, // +00 -00 +00:00 -00:00 +0000 -0000 or Z\n matchTimestamp = /[+-]?\\d+(\\.\\d{1,3})?/, // 123456789 123456789.123\n // any word (or two) characters or numbers including two/three word month in arabic.\n // includes scottish gaelic two word and hyphenated months\n matchWord =\n /[0-9]{0,256}['a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFF07\\uFF10-\\uFFEF]{1,256}|[\\u0600-\\u06FF\\/]{1,256}(\\s*?[\\u0600-\\u06FF]{1,256}){1,2}/i,\n regexes;\n\n regexes = {};\n\n function addRegexToken(token, regex, strictRegex) {\n regexes[token] = isFunction(regex)\n ? regex\n : function (isStrict, localeData) {\n return isStrict && strictRegex ? strictRegex : regex;\n };\n }\n\n function getParseRegexForToken(token, config) {\n if (!hasOwnProp(regexes, token)) {\n return new RegExp(unescapeFormat(token));\n }\n\n return regexes[token](config._strict, config._locale);\n }\n\n // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript\n function unescapeFormat(s) {\n return regexEscape(\n s\n .replace('\\\\', '')\n .replace(\n /\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g,\n function (matched, p1, p2, p3, p4) {\n return p1 || p2 || p3 || p4;\n }\n )\n );\n }\n\n function regexEscape(s) {\n return s.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n }\n\n var tokens = {};\n\n function addParseToken(token, callback) {\n var i,\n func = callback,\n tokenLen;\n if (typeof token === 'string') {\n token = [token];\n }\n if (isNumber(callback)) {\n func = function (input, array) {\n array[callback] = toInt(input);\n };\n }\n tokenLen = token.length;\n for (i = 0; i < tokenLen; i++) {\n tokens[token[i]] = func;\n }\n }\n\n function addWeekParseToken(token, callback) {\n addParseToken(token, function (input, array, config, token) {\n config._w = config._w || {};\n callback(input, config._w, config, token);\n });\n }\n\n function addTimeToArrayFromToken(token, input, config) {\n if (input != null && hasOwnProp(tokens, token)) {\n tokens[token](input, config._a, config, token);\n }\n }\n\n var YEAR = 0,\n MONTH = 1,\n DATE = 2,\n HOUR = 3,\n MINUTE = 4,\n SECOND = 5,\n MILLISECOND = 6,\n WEEK = 7,\n WEEKDAY = 8;\n\n function mod(n, x) {\n return ((n % x) + x) % x;\n }\n\n var indexOf;\n\n if (Array.prototype.indexOf) {\n indexOf = Array.prototype.indexOf;\n } else {\n indexOf = function (o) {\n // I know\n var i;\n for (i = 0; i < this.length; ++i) {\n if (this[i] === o) {\n return i;\n }\n }\n return -1;\n };\n }\n\n function daysInMonth(year, month) {\n if (isNaN(year) || isNaN(month)) {\n return NaN;\n }\n var modMonth = mod(month, 12);\n year += (month - modMonth) / 12;\n return modMonth === 1\n ? isLeapYear(year)\n ? 29\n : 28\n : 31 - ((modMonth % 7) % 2);\n }\n\n // FORMATTING\n\n addFormatToken('M', ['MM', 2], 'Mo', function () {\n return this.month() + 1;\n });\n\n addFormatToken('MMM', 0, 0, function (format) {\n return this.localeData().monthsShort(this, format);\n });\n\n addFormatToken('MMMM', 0, 0, function (format) {\n return this.localeData().months(this, format);\n });\n\n // ALIASES\n\n addUnitAlias('month', 'M');\n\n // PRIORITY\n\n addUnitPriority('month', 8);\n\n // PARSING\n\n addRegexToken('M', match1to2);\n addRegexToken('MM', match1to2, match2);\n addRegexToken('MMM', function (isStrict, locale) {\n return locale.monthsShortRegex(isStrict);\n });\n addRegexToken('MMMM', function (isStrict, locale) {\n return locale.monthsRegex(isStrict);\n });\n\n addParseToken(['M', 'MM'], function (input, array) {\n array[MONTH] = toInt(input) - 1;\n });\n\n addParseToken(['MMM', 'MMMM'], function (input, array, config, token) {\n var month = config._locale.monthsParse(input, token, config._strict);\n // if we didn't find a month name, mark the date as invalid.\n if (month != null) {\n array[MONTH] = month;\n } else {\n getParsingFlags(config).invalidMonth = input;\n }\n });\n\n // LOCALES\n\n var defaultLocaleMonths =\n 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n '_'\n ),\n defaultLocaleMonthsShort =\n 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n MONTHS_IN_FORMAT = /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?/,\n defaultMonthsShortRegex = matchWord,\n defaultMonthsRegex = matchWord;\n\n function localeMonths(m, format) {\n if (!m) {\n return isArray(this._months)\n ? this._months\n : this._months['standalone'];\n }\n return isArray(this._months)\n ? this._months[m.month()]\n : this._months[\n (this._months.isFormat || MONTHS_IN_FORMAT).test(format)\n ? 'format'\n : 'standalone'\n ][m.month()];\n }\n\n function localeMonthsShort(m, format) {\n if (!m) {\n return isArray(this._monthsShort)\n ? this._monthsShort\n : this._monthsShort['standalone'];\n }\n return isArray(this._monthsShort)\n ? this._monthsShort[m.month()]\n : this._monthsShort[\n MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'\n ][m.month()];\n }\n\n function handleStrictParse(monthName, format, strict) {\n var i,\n ii,\n mom,\n llc = monthName.toLocaleLowerCase();\n if (!this._monthsParse) {\n // this is not used\n this._monthsParse = [];\n this._longMonthsParse = [];\n this._shortMonthsParse = [];\n for (i = 0; i < 12; ++i) {\n mom = createUTC([2000, i]);\n this._shortMonthsParse[i] = this.monthsShort(\n mom,\n ''\n ).toLocaleLowerCase();\n this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();\n }\n }\n\n if (strict) {\n if (format === 'MMM') {\n ii = indexOf.call(this._shortMonthsParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._longMonthsParse, llc);\n return ii !== -1 ? ii : null;\n }\n } else {\n if (format === 'MMM') {\n ii = indexOf.call(this._shortMonthsParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._longMonthsParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._longMonthsParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortMonthsParse, llc);\n return ii !== -1 ? ii : null;\n }\n }\n }\n\n function localeMonthsParse(monthName, format, strict) {\n var i, mom, regex;\n\n if (this._monthsParseExact) {\n return handleStrictParse.call(this, monthName, format, strict);\n }\n\n if (!this._monthsParse) {\n this._monthsParse = [];\n this._longMonthsParse = [];\n this._shortMonthsParse = [];\n }\n\n // TODO: add sorting\n // Sorting makes sure if one month (or abbr) is a prefix of another\n // see sorting in computeMonthsParse\n for (i = 0; i < 12; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, i]);\n if (strict && !this._longMonthsParse[i]) {\n this._longMonthsParse[i] = new RegExp(\n '^' + this.months(mom, '').replace('.', '') + '$',\n 'i'\n );\n this._shortMonthsParse[i] = new RegExp(\n '^' + this.monthsShort(mom, '').replace('.', '') + '$',\n 'i'\n );\n }\n if (!strict && !this._monthsParse[i]) {\n regex =\n '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');\n this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');\n }\n // test the regex\n if (\n strict &&\n format === 'MMMM' &&\n this._longMonthsParse[i].test(monthName)\n ) {\n return i;\n } else if (\n strict &&\n format === 'MMM' &&\n this._shortMonthsParse[i].test(monthName)\n ) {\n return i;\n } else if (!strict && this._monthsParse[i].test(monthName)) {\n return i;\n }\n }\n }\n\n // MOMENTS\n\n function setMonth(mom, value) {\n var dayOfMonth;\n\n if (!mom.isValid()) {\n // No op\n return mom;\n }\n\n if (typeof value === 'string') {\n if (/^\\d+$/.test(value)) {\n value = toInt(value);\n } else {\n value = mom.localeData().monthsParse(value);\n // TODO: Another silent failure?\n if (!isNumber(value)) {\n return mom;\n }\n }\n }\n\n dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value));\n mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth);\n return mom;\n }\n\n function getSetMonth(value) {\n if (value != null) {\n setMonth(this, value);\n hooks.updateOffset(this, true);\n return this;\n } else {\n return get(this, 'Month');\n }\n }\n\n function getDaysInMonth() {\n return daysInMonth(this.year(), this.month());\n }\n\n function monthsShortRegex(isStrict) {\n if (this._monthsParseExact) {\n if (!hasOwnProp(this, '_monthsRegex')) {\n computeMonthsParse.call(this);\n }\n if (isStrict) {\n return this._monthsShortStrictRegex;\n } else {\n return this._monthsShortRegex;\n }\n } else {\n if (!hasOwnProp(this, '_monthsShortRegex')) {\n this._monthsShortRegex = defaultMonthsShortRegex;\n }\n return this._monthsShortStrictRegex && isStrict\n ? this._monthsShortStrictRegex\n : this._monthsShortRegex;\n }\n }\n\n function monthsRegex(isStrict) {\n if (this._monthsParseExact) {\n if (!hasOwnProp(this, '_monthsRegex')) {\n computeMonthsParse.call(this);\n }\n if (isStrict) {\n return this._monthsStrictRegex;\n } else {\n return this._monthsRegex;\n }\n } else {\n if (!hasOwnProp(this, '_monthsRegex')) {\n this._monthsRegex = defaultMonthsRegex;\n }\n return this._monthsStrictRegex && isStrict\n ? this._monthsStrictRegex\n : this._monthsRegex;\n }\n }\n\n function computeMonthsParse() {\n function cmpLenRev(a, b) {\n return b.length - a.length;\n }\n\n var shortPieces = [],\n longPieces = [],\n mixedPieces = [],\n i,\n mom;\n for (i = 0; i < 12; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, i]);\n shortPieces.push(this.monthsShort(mom, ''));\n longPieces.push(this.months(mom, ''));\n mixedPieces.push(this.months(mom, ''));\n mixedPieces.push(this.monthsShort(mom, ''));\n }\n // Sorting makes sure if one month (or abbr) is a prefix of another it\n // will match the longer piece.\n shortPieces.sort(cmpLenRev);\n longPieces.sort(cmpLenRev);\n mixedPieces.sort(cmpLenRev);\n for (i = 0; i < 12; i++) {\n shortPieces[i] = regexEscape(shortPieces[i]);\n longPieces[i] = regexEscape(longPieces[i]);\n }\n for (i = 0; i < 24; i++) {\n mixedPieces[i] = regexEscape(mixedPieces[i]);\n }\n\n this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._monthsShortRegex = this._monthsRegex;\n this._monthsStrictRegex = new RegExp(\n '^(' + longPieces.join('|') + ')',\n 'i'\n );\n this._monthsShortStrictRegex = new RegExp(\n '^(' + shortPieces.join('|') + ')',\n 'i'\n );\n }\n\n // FORMATTING\n\n addFormatToken('Y', 0, 0, function () {\n var y = this.year();\n return y <= 9999 ? zeroFill(y, 4) : '+' + y;\n });\n\n addFormatToken(0, ['YY', 2], 0, function () {\n return this.year() % 100;\n });\n\n addFormatToken(0, ['YYYY', 4], 0, 'year');\n addFormatToken(0, ['YYYYY', 5], 0, 'year');\n addFormatToken(0, ['YYYYYY', 6, true], 0, 'year');\n\n // ALIASES\n\n addUnitAlias('year', 'y');\n\n // PRIORITIES\n\n addUnitPriority('year', 1);\n\n // PARSING\n\n addRegexToken('Y', matchSigned);\n addRegexToken('YY', match1to2, match2);\n addRegexToken('YYYY', match1to4, match4);\n addRegexToken('YYYYY', match1to6, match6);\n addRegexToken('YYYYYY', match1to6, match6);\n\n addParseToken(['YYYYY', 'YYYYYY'], YEAR);\n addParseToken('YYYY', function (input, array) {\n array[YEAR] =\n input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);\n });\n addParseToken('YY', function (input, array) {\n array[YEAR] = hooks.parseTwoDigitYear(input);\n });\n addParseToken('Y', function (input, array) {\n array[YEAR] = parseInt(input, 10);\n });\n\n // HELPERS\n\n function daysInYear(year) {\n return isLeapYear(year) ? 366 : 365;\n }\n\n // HOOKS\n\n hooks.parseTwoDigitYear = function (input) {\n return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);\n };\n\n // MOMENTS\n\n var getSetYear = makeGetSet('FullYear', true);\n\n function getIsLeapYear() {\n return isLeapYear(this.year());\n }\n\n function createDate(y, m, d, h, M, s, ms) {\n // can't just apply() to create a date:\n // https://stackoverflow.com/q/181348\n var date;\n // the date constructor remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n // preserve leap years using a full 400 year cycle, then reset\n date = new Date(y + 400, m, d, h, M, s, ms);\n if (isFinite(date.getFullYear())) {\n date.setFullYear(y);\n }\n } else {\n date = new Date(y, m, d, h, M, s, ms);\n }\n\n return date;\n }\n\n function createUTCDate(y) {\n var date, args;\n // the Date.UTC function remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n args = Array.prototype.slice.call(arguments);\n // preserve leap years using a full 400 year cycle, then reset\n args[0] = y + 400;\n date = new Date(Date.UTC.apply(null, args));\n if (isFinite(date.getUTCFullYear())) {\n date.setUTCFullYear(y);\n }\n } else {\n date = new Date(Date.UTC.apply(null, arguments));\n }\n\n return date;\n }\n\n // start-of-first-week - start-of-year\n function firstWeekOffset(year, dow, doy) {\n var // first-week day -- which january is always in the first week (4 for iso, 1 for other)\n fwd = 7 + dow - doy,\n // first-week day local weekday -- which local weekday is fwd\n fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;\n\n return -fwdlw + fwd - 1;\n }\n\n // https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday\n function dayOfYearFromWeeks(year, week, weekday, dow, doy) {\n var localWeekday = (7 + weekday - dow) % 7,\n weekOffset = firstWeekOffset(year, dow, doy),\n dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,\n resYear,\n resDayOfYear;\n\n if (dayOfYear <= 0) {\n resYear = year - 1;\n resDayOfYear = daysInYear(resYear) + dayOfYear;\n } else if (dayOfYear > daysInYear(year)) {\n resYear = year + 1;\n resDayOfYear = dayOfYear - daysInYear(year);\n } else {\n resYear = year;\n resDayOfYear = dayOfYear;\n }\n\n return {\n year: resYear,\n dayOfYear: resDayOfYear,\n };\n }\n\n function weekOfYear(mom, dow, doy) {\n var weekOffset = firstWeekOffset(mom.year(), dow, doy),\n week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,\n resWeek,\n resYear;\n\n if (week < 1) {\n resYear = mom.year() - 1;\n resWeek = week + weeksInYear(resYear, dow, doy);\n } else if (week > weeksInYear(mom.year(), dow, doy)) {\n resWeek = week - weeksInYear(mom.year(), dow, doy);\n resYear = mom.year() + 1;\n } else {\n resYear = mom.year();\n resWeek = week;\n }\n\n return {\n week: resWeek,\n year: resYear,\n };\n }\n\n function weeksInYear(year, dow, doy) {\n var weekOffset = firstWeekOffset(year, dow, doy),\n weekOffsetNext = firstWeekOffset(year + 1, dow, doy);\n return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;\n }\n\n // FORMATTING\n\n addFormatToken('w', ['ww', 2], 'wo', 'week');\n addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');\n\n // ALIASES\n\n addUnitAlias('week', 'w');\n addUnitAlias('isoWeek', 'W');\n\n // PRIORITIES\n\n addUnitPriority('week', 5);\n addUnitPriority('isoWeek', 5);\n\n // PARSING\n\n addRegexToken('w', match1to2);\n addRegexToken('ww', match1to2, match2);\n addRegexToken('W', match1to2);\n addRegexToken('WW', match1to2, match2);\n\n addWeekParseToken(\n ['w', 'ww', 'W', 'WW'],\n function (input, week, config, token) {\n week[token.substr(0, 1)] = toInt(input);\n }\n );\n\n // HELPERS\n\n // LOCALES\n\n function localeWeek(mom) {\n return weekOfYear(mom, this._week.dow, this._week.doy).week;\n }\n\n var defaultLocaleWeek = {\n dow: 0, // Sunday is the first day of the week.\n doy: 6, // The week that contains Jan 6th is the first week of the year.\n };\n\n function localeFirstDayOfWeek() {\n return this._week.dow;\n }\n\n function localeFirstDayOfYear() {\n return this._week.doy;\n }\n\n // MOMENTS\n\n function getSetWeek(input) {\n var week = this.localeData().week(this);\n return input == null ? week : this.add((input - week) * 7, 'd');\n }\n\n function getSetISOWeek(input) {\n var week = weekOfYear(this, 1, 4).week;\n return input == null ? week : this.add((input - week) * 7, 'd');\n }\n\n // FORMATTING\n\n addFormatToken('d', 0, 'do', 'day');\n\n addFormatToken('dd', 0, 0, function (format) {\n return this.localeData().weekdaysMin(this, format);\n });\n\n addFormatToken('ddd', 0, 0, function (format) {\n return this.localeData().weekdaysShort(this, format);\n });\n\n addFormatToken('dddd', 0, 0, function (format) {\n return this.localeData().weekdays(this, format);\n });\n\n addFormatToken('e', 0, 0, 'weekday');\n addFormatToken('E', 0, 0, 'isoWeekday');\n\n // ALIASES\n\n addUnitAlias('day', 'd');\n addUnitAlias('weekday', 'e');\n addUnitAlias('isoWeekday', 'E');\n\n // PRIORITY\n addUnitPriority('day', 11);\n addUnitPriority('weekday', 11);\n addUnitPriority('isoWeekday', 11);\n\n // PARSING\n\n addRegexToken('d', match1to2);\n addRegexToken('e', match1to2);\n addRegexToken('E', match1to2);\n addRegexToken('dd', function (isStrict, locale) {\n return locale.weekdaysMinRegex(isStrict);\n });\n addRegexToken('ddd', function (isStrict, locale) {\n return locale.weekdaysShortRegex(isStrict);\n });\n addRegexToken('dddd', function (isStrict, locale) {\n return locale.weekdaysRegex(isStrict);\n });\n\n addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {\n var weekday = config._locale.weekdaysParse(input, token, config._strict);\n // if we didn't get a weekday name, mark the date as invalid\n if (weekday != null) {\n week.d = weekday;\n } else {\n getParsingFlags(config).invalidWeekday = input;\n }\n });\n\n addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {\n week[token] = toInt(input);\n });\n\n // HELPERS\n\n function parseWeekday(input, locale) {\n if (typeof input !== 'string') {\n return input;\n }\n\n if (!isNaN(input)) {\n return parseInt(input, 10);\n }\n\n input = locale.weekdaysParse(input);\n if (typeof input === 'number') {\n return input;\n }\n\n return null;\n }\n\n function parseIsoWeekday(input, locale) {\n if (typeof input === 'string') {\n return locale.weekdaysParse(input) % 7 || 7;\n }\n return isNaN(input) ? null : input;\n }\n\n // LOCALES\n function shiftWeekdays(ws, n) {\n return ws.slice(n, 7).concat(ws.slice(0, n));\n }\n\n var defaultLocaleWeekdays =\n 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n defaultWeekdaysRegex = matchWord,\n defaultWeekdaysShortRegex = matchWord,\n defaultWeekdaysMinRegex = matchWord;\n\n function localeWeekdays(m, format) {\n var weekdays = isArray(this._weekdays)\n ? this._weekdays\n : this._weekdays[\n m && m !== true && this._weekdays.isFormat.test(format)\n ? 'format'\n : 'standalone'\n ];\n return m === true\n ? shiftWeekdays(weekdays, this._week.dow)\n : m\n ? weekdays[m.day()]\n : weekdays;\n }\n\n function localeWeekdaysShort(m) {\n return m === true\n ? shiftWeekdays(this._weekdaysShort, this._week.dow)\n : m\n ? this._weekdaysShort[m.day()]\n : this._weekdaysShort;\n }\n\n function localeWeekdaysMin(m) {\n return m === true\n ? shiftWeekdays(this._weekdaysMin, this._week.dow)\n : m\n ? this._weekdaysMin[m.day()]\n : this._weekdaysMin;\n }\n\n function handleStrictParse$1(weekdayName, format, strict) {\n var i,\n ii,\n mom,\n llc = weekdayName.toLocaleLowerCase();\n if (!this._weekdaysParse) {\n this._weekdaysParse = [];\n this._shortWeekdaysParse = [];\n this._minWeekdaysParse = [];\n\n for (i = 0; i < 7; ++i) {\n mom = createUTC([2000, 1]).day(i);\n this._minWeekdaysParse[i] = this.weekdaysMin(\n mom,\n ''\n ).toLocaleLowerCase();\n this._shortWeekdaysParse[i] = this.weekdaysShort(\n mom,\n ''\n ).toLocaleLowerCase();\n this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();\n }\n }\n\n if (strict) {\n if (format === 'dddd') {\n ii = indexOf.call(this._weekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else if (format === 'ddd') {\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n }\n } else {\n if (format === 'dddd') {\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else if (format === 'ddd') {\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._minWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n }\n }\n }\n\n function localeWeekdaysParse(weekdayName, format, strict) {\n var i, mom, regex;\n\n if (this._weekdaysParseExact) {\n return handleStrictParse$1.call(this, weekdayName, format, strict);\n }\n\n if (!this._weekdaysParse) {\n this._weekdaysParse = [];\n this._minWeekdaysParse = [];\n this._shortWeekdaysParse = [];\n this._fullWeekdaysParse = [];\n }\n\n for (i = 0; i < 7; i++) {\n // make the regex if we don't have it already\n\n mom = createUTC([2000, 1]).day(i);\n if (strict && !this._fullWeekdaysParse[i]) {\n this._fullWeekdaysParse[i] = new RegExp(\n '^' + this.weekdays(mom, '').replace('.', '\\\\.?') + '$',\n 'i'\n );\n this._shortWeekdaysParse[i] = new RegExp(\n '^' + this.weekdaysShort(mom, '').replace('.', '\\\\.?') + '$',\n 'i'\n );\n this._minWeekdaysParse[i] = new RegExp(\n '^' + this.weekdaysMin(mom, '').replace('.', '\\\\.?') + '$',\n 'i'\n );\n }\n if (!this._weekdaysParse[i]) {\n regex =\n '^' +\n this.weekdays(mom, '') +\n '|^' +\n this.weekdaysShort(mom, '') +\n '|^' +\n this.weekdaysMin(mom, '');\n this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');\n }\n // test the regex\n if (\n strict &&\n format === 'dddd' &&\n this._fullWeekdaysParse[i].test(weekdayName)\n ) {\n return i;\n } else if (\n strict &&\n format === 'ddd' &&\n this._shortWeekdaysParse[i].test(weekdayName)\n ) {\n return i;\n } else if (\n strict &&\n format === 'dd' &&\n this._minWeekdaysParse[i].test(weekdayName)\n ) {\n return i;\n } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {\n return i;\n }\n }\n }\n\n // MOMENTS\n\n function getSetDayOfWeek(input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay();\n if (input != null) {\n input = parseWeekday(input, this.localeData());\n return this.add(input - day, 'd');\n } else {\n return day;\n }\n }\n\n function getSetLocaleDayOfWeek(input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;\n return input == null ? weekday : this.add(input - weekday, 'd');\n }\n\n function getSetISODayOfWeek(input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n\n // behaves the same as moment#day except\n // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)\n // as a setter, sunday should belong to the previous week.\n\n if (input != null) {\n var weekday = parseIsoWeekday(input, this.localeData());\n return this.day(this.day() % 7 ? weekday : weekday - 7);\n } else {\n return this.day() || 7;\n }\n }\n\n function weekdaysRegex(isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n if (isStrict) {\n return this._weekdaysStrictRegex;\n } else {\n return this._weekdaysRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n this._weekdaysRegex = defaultWeekdaysRegex;\n }\n return this._weekdaysStrictRegex && isStrict\n ? this._weekdaysStrictRegex\n : this._weekdaysRegex;\n }\n }\n\n function weekdaysShortRegex(isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n if (isStrict) {\n return this._weekdaysShortStrictRegex;\n } else {\n return this._weekdaysShortRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysShortRegex')) {\n this._weekdaysShortRegex = defaultWeekdaysShortRegex;\n }\n return this._weekdaysShortStrictRegex && isStrict\n ? this._weekdaysShortStrictRegex\n : this._weekdaysShortRegex;\n }\n }\n\n function weekdaysMinRegex(isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n if (isStrict) {\n return this._weekdaysMinStrictRegex;\n } else {\n return this._weekdaysMinRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysMinRegex')) {\n this._weekdaysMinRegex = defaultWeekdaysMinRegex;\n }\n return this._weekdaysMinStrictRegex && isStrict\n ? this._weekdaysMinStrictRegex\n : this._weekdaysMinRegex;\n }\n }\n\n function computeWeekdaysParse() {\n function cmpLenRev(a, b) {\n return b.length - a.length;\n }\n\n var minPieces = [],\n shortPieces = [],\n longPieces = [],\n mixedPieces = [],\n i,\n mom,\n minp,\n shortp,\n longp;\n for (i = 0; i < 7; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, 1]).day(i);\n minp = regexEscape(this.weekdaysMin(mom, ''));\n shortp = regexEscape(this.weekdaysShort(mom, ''));\n longp = regexEscape(this.weekdays(mom, ''));\n minPieces.push(minp);\n shortPieces.push(shortp);\n longPieces.push(longp);\n mixedPieces.push(minp);\n mixedPieces.push(shortp);\n mixedPieces.push(longp);\n }\n // Sorting makes sure if one weekday (or abbr) is a prefix of another it\n // will match the longer piece.\n minPieces.sort(cmpLenRev);\n shortPieces.sort(cmpLenRev);\n longPieces.sort(cmpLenRev);\n mixedPieces.sort(cmpLenRev);\n\n this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._weekdaysShortRegex = this._weekdaysRegex;\n this._weekdaysMinRegex = this._weekdaysRegex;\n\n this._weekdaysStrictRegex = new RegExp(\n '^(' + longPieces.join('|') + ')',\n 'i'\n );\n this._weekdaysShortStrictRegex = new RegExp(\n '^(' + shortPieces.join('|') + ')',\n 'i'\n );\n this._weekdaysMinStrictRegex = new RegExp(\n '^(' + minPieces.join('|') + ')',\n 'i'\n );\n }\n\n // FORMATTING\n\n function hFormat() {\n return this.hours() % 12 || 12;\n }\n\n function kFormat() {\n return this.hours() || 24;\n }\n\n addFormatToken('H', ['HH', 2], 0, 'hour');\n addFormatToken('h', ['hh', 2], 0, hFormat);\n addFormatToken('k', ['kk', 2], 0, kFormat);\n\n addFormatToken('hmm', 0, 0, function () {\n return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);\n });\n\n addFormatToken('hmmss', 0, 0, function () {\n return (\n '' +\n hFormat.apply(this) +\n zeroFill(this.minutes(), 2) +\n zeroFill(this.seconds(), 2)\n );\n });\n\n addFormatToken('Hmm', 0, 0, function () {\n return '' + this.hours() + zeroFill(this.minutes(), 2);\n });\n\n addFormatToken('Hmmss', 0, 0, function () {\n return (\n '' +\n this.hours() +\n zeroFill(this.minutes(), 2) +\n zeroFill(this.seconds(), 2)\n );\n });\n\n function meridiem(token, lowercase) {\n addFormatToken(token, 0, 0, function () {\n return this.localeData().meridiem(\n this.hours(),\n this.minutes(),\n lowercase\n );\n });\n }\n\n meridiem('a', true);\n meridiem('A', false);\n\n // ALIASES\n\n addUnitAlias('hour', 'h');\n\n // PRIORITY\n addUnitPriority('hour', 13);\n\n // PARSING\n\n function matchMeridiem(isStrict, locale) {\n return locale._meridiemParse;\n }\n\n addRegexToken('a', matchMeridiem);\n addRegexToken('A', matchMeridiem);\n addRegexToken('H', match1to2);\n addRegexToken('h', match1to2);\n addRegexToken('k', match1to2);\n addRegexToken('HH', match1to2, match2);\n addRegexToken('hh', match1to2, match2);\n addRegexToken('kk', match1to2, match2);\n\n addRegexToken('hmm', match3to4);\n addRegexToken('hmmss', match5to6);\n addRegexToken('Hmm', match3to4);\n addRegexToken('Hmmss', match5to6);\n\n addParseToken(['H', 'HH'], HOUR);\n addParseToken(['k', 'kk'], function (input, array, config) {\n var kInput = toInt(input);\n array[HOUR] = kInput === 24 ? 0 : kInput;\n });\n addParseToken(['a', 'A'], function (input, array, config) {\n config._isPm = config._locale.isPM(input);\n config._meridiem = input;\n });\n addParseToken(['h', 'hh'], function (input, array, config) {\n array[HOUR] = toInt(input);\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('hmm', function (input, array, config) {\n var pos = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos));\n array[MINUTE] = toInt(input.substr(pos));\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('hmmss', function (input, array, config) {\n var pos1 = input.length - 4,\n pos2 = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos1));\n array[MINUTE] = toInt(input.substr(pos1, 2));\n array[SECOND] = toInt(input.substr(pos2));\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('Hmm', function (input, array, config) {\n var pos = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos));\n array[MINUTE] = toInt(input.substr(pos));\n });\n addParseToken('Hmmss', function (input, array, config) {\n var pos1 = input.length - 4,\n pos2 = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos1));\n array[MINUTE] = toInt(input.substr(pos1, 2));\n array[SECOND] = toInt(input.substr(pos2));\n });\n\n // LOCALES\n\n function localeIsPM(input) {\n // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays\n // Using charAt should be more compatible.\n return (input + '').toLowerCase().charAt(0) === 'p';\n }\n\n var defaultLocaleMeridiemParse = /[ap]\\.?m?\\.?/i,\n // Setting the hour should keep the time, because the user explicitly\n // specified which hour they want. So trying to maintain the same hour (in\n // a new timezone) makes sense. Adding/subtracting hours does not follow\n // this rule.\n getSetHour = makeGetSet('Hours', true);\n\n function localeMeridiem(hours, minutes, isLower) {\n if (hours > 11) {\n return isLower ? 'pm' : 'PM';\n } else {\n return isLower ? 'am' : 'AM';\n }\n }\n\n var baseConfig = {\n calendar: defaultCalendar,\n longDateFormat: defaultLongDateFormat,\n invalidDate: defaultInvalidDate,\n ordinal: defaultOrdinal,\n dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,\n relativeTime: defaultRelativeTime,\n\n months: defaultLocaleMonths,\n monthsShort: defaultLocaleMonthsShort,\n\n week: defaultLocaleWeek,\n\n weekdays: defaultLocaleWeekdays,\n weekdaysMin: defaultLocaleWeekdaysMin,\n weekdaysShort: defaultLocaleWeekdaysShort,\n\n meridiemParse: defaultLocaleMeridiemParse,\n };\n\n // internal storage for locale config files\n var locales = {},\n localeFamilies = {},\n globalLocale;\n\n function commonPrefix(arr1, arr2) {\n var i,\n minl = Math.min(arr1.length, arr2.length);\n for (i = 0; i < minl; i += 1) {\n if (arr1[i] !== arr2[i]) {\n return i;\n }\n }\n return minl;\n }\n\n function normalizeLocale(key) {\n return key ? key.toLowerCase().replace('_', '-') : key;\n }\n\n // pick the locale from the array\n // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each\n // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root\n function chooseLocale(names) {\n var i = 0,\n j,\n next,\n locale,\n split;\n\n while (i < names.length) {\n split = normalizeLocale(names[i]).split('-');\n j = split.length;\n next = normalizeLocale(names[i + 1]);\n next = next ? next.split('-') : null;\n while (j > 0) {\n locale = loadLocale(split.slice(0, j).join('-'));\n if (locale) {\n return locale;\n }\n if (\n next &&\n next.length >= j &&\n commonPrefix(split, next) >= j - 1\n ) {\n //the next array item is better than a shallower substring of this one\n break;\n }\n j--;\n }\n i++;\n }\n return globalLocale;\n }\n\n function isLocaleNameSane(name) {\n // Prevent names that look like filesystem paths, i.e contain '/' or '\\'\n return name.match('^[^/\\\\\\\\]*$') != null;\n }\n\n function loadLocale(name) {\n var oldLocale = null,\n aliasedRequire;\n // TODO: Find a better way to register and load all the locales in Node\n if (\n locales[name] === undefined &&\n typeof module !== 'undefined' &&\n module &&\n module.exports &&\n isLocaleNameSane(name)\n ) {\n try {\n oldLocale = globalLocale._abbr;\n aliasedRequire = require;\n aliasedRequire('./locale/' + name);\n getSetGlobalLocale(oldLocale);\n } catch (e) {\n // mark as not found to avoid repeating expensive file require call causing high CPU\n // when trying to find en-US, en_US, en-us for every format call\n locales[name] = null; // null means not found\n }\n }\n return locales[name];\n }\n\n // This function will load locale and then set the global locale. If\n // no arguments are passed in, it will simply return the current global\n // locale key.\n function getSetGlobalLocale(key, values) {\n var data;\n if (key) {\n if (isUndefined(values)) {\n data = getLocale(key);\n } else {\n data = defineLocale(key, values);\n }\n\n if (data) {\n // moment.duration._locale = moment._locale = data;\n globalLocale = data;\n } else {\n if (typeof console !== 'undefined' && console.warn) {\n //warn user if arguments are passed but the locale could not be set\n console.warn(\n 'Locale ' + key + ' not found. Did you forget to load it?'\n );\n }\n }\n }\n\n return globalLocale._abbr;\n }\n\n function defineLocale(name, config) {\n if (config !== null) {\n var locale,\n parentConfig = baseConfig;\n config.abbr = name;\n if (locales[name] != null) {\n deprecateSimple(\n 'defineLocaleOverride',\n 'use moment.updateLocale(localeName, config) to change ' +\n 'an existing locale. moment.defineLocale(localeName, ' +\n 'config) should only be used for creating a new locale ' +\n 'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.'\n );\n parentConfig = locales[name]._config;\n } else if (config.parentLocale != null) {\n if (locales[config.parentLocale] != null) {\n parentConfig = locales[config.parentLocale]._config;\n } else {\n locale = loadLocale(config.parentLocale);\n if (locale != null) {\n parentConfig = locale._config;\n } else {\n if (!localeFamilies[config.parentLocale]) {\n localeFamilies[config.parentLocale] = [];\n }\n localeFamilies[config.parentLocale].push({\n name: name,\n config: config,\n });\n return null;\n }\n }\n }\n locales[name] = new Locale(mergeConfigs(parentConfig, config));\n\n if (localeFamilies[name]) {\n localeFamilies[name].forEach(function (x) {\n defineLocale(x.name, x.config);\n });\n }\n\n // backwards compat for now: also set the locale\n // make sure we set the locale AFTER all child locales have been\n // created, so we won't end up with the child locale set.\n getSetGlobalLocale(name);\n\n return locales[name];\n } else {\n // useful for testing\n delete locales[name];\n return null;\n }\n }\n\n function updateLocale(name, config) {\n if (config != null) {\n var locale,\n tmpLocale,\n parentConfig = baseConfig;\n\n if (locales[name] != null && locales[name].parentLocale != null) {\n // Update existing child locale in-place to avoid memory-leaks\n locales[name].set(mergeConfigs(locales[name]._config, config));\n } else {\n // MERGE\n tmpLocale = loadLocale(name);\n if (tmpLocale != null) {\n parentConfig = tmpLocale._config;\n }\n config = mergeConfigs(parentConfig, config);\n if (tmpLocale == null) {\n // updateLocale is called for creating a new locale\n // Set abbr so it will have a name (getters return\n // undefined otherwise).\n config.abbr = name;\n }\n locale = new Locale(config);\n locale.parentLocale = locales[name];\n locales[name] = locale;\n }\n\n // backwards compat for now: also set the locale\n getSetGlobalLocale(name);\n } else {\n // pass null for config to unupdate, useful for tests\n if (locales[name] != null) {\n if (locales[name].parentLocale != null) {\n locales[name] = locales[name].parentLocale;\n if (name === getSetGlobalLocale()) {\n getSetGlobalLocale(name);\n }\n } else if (locales[name] != null) {\n delete locales[name];\n }\n }\n }\n return locales[name];\n }\n\n // returns locale data\n function getLocale(key) {\n var locale;\n\n if (key && key._locale && key._locale._abbr) {\n key = key._locale._abbr;\n }\n\n if (!key) {\n return globalLocale;\n }\n\n if (!isArray(key)) {\n //short-circuit everything else\n locale = loadLocale(key);\n if (locale) {\n return locale;\n }\n key = [key];\n }\n\n return chooseLocale(key);\n }\n\n function listLocales() {\n return keys(locales);\n }\n\n function checkOverflow(m) {\n var overflow,\n a = m._a;\n\n if (a && getParsingFlags(m).overflow === -2) {\n overflow =\n a[MONTH] < 0 || a[MONTH] > 11\n ? MONTH\n : a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH])\n ? DATE\n : a[HOUR] < 0 ||\n a[HOUR] > 24 ||\n (a[HOUR] === 24 &&\n (a[MINUTE] !== 0 ||\n a[SECOND] !== 0 ||\n a[MILLISECOND] !== 0))\n ? HOUR\n : a[MINUTE] < 0 || a[MINUTE] > 59\n ? MINUTE\n : a[SECOND] < 0 || a[SECOND] > 59\n ? SECOND\n : a[MILLISECOND] < 0 || a[MILLISECOND] > 999\n ? MILLISECOND\n : -1;\n\n if (\n getParsingFlags(m)._overflowDayOfYear &&\n (overflow < YEAR || overflow > DATE)\n ) {\n overflow = DATE;\n }\n if (getParsingFlags(m)._overflowWeeks && overflow === -1) {\n overflow = WEEK;\n }\n if (getParsingFlags(m)._overflowWeekday && overflow === -1) {\n overflow = WEEKDAY;\n }\n\n getParsingFlags(m).overflow = overflow;\n }\n\n return m;\n }\n\n // iso 8601 regex\n // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)\n var extendedIsoRegex =\n /^\\s*((?:[+-]\\d{6}|\\d{4})-(?:\\d\\d-\\d\\d|W\\d\\d-\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?::\\d\\d(?::\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,\n basicIsoRegex =\n /^\\s*((?:[+-]\\d{6}|\\d{4})(?:\\d\\d\\d\\d|W\\d\\d\\d|W\\d\\d|\\d\\d\\d|\\d\\d|))(?:(T| )(\\d\\d(?:\\d\\d(?:\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,\n tzRegex = /Z|[+-]\\d\\d(?::?\\d\\d)?/,\n isoDates = [\n ['YYYYYY-MM-DD', /[+-]\\d{6}-\\d\\d-\\d\\d/],\n ['YYYY-MM-DD', /\\d{4}-\\d\\d-\\d\\d/],\n ['GGGG-[W]WW-E', /\\d{4}-W\\d\\d-\\d/],\n ['GGGG-[W]WW', /\\d{4}-W\\d\\d/, false],\n ['YYYY-DDD', /\\d{4}-\\d{3}/],\n ['YYYY-MM', /\\d{4}-\\d\\d/, false],\n ['YYYYYYMMDD', /[+-]\\d{10}/],\n ['YYYYMMDD', /\\d{8}/],\n ['GGGG[W]WWE', /\\d{4}W\\d{3}/],\n ['GGGG[W]WW', /\\d{4}W\\d{2}/, false],\n ['YYYYDDD', /\\d{7}/],\n ['YYYYMM', /\\d{6}/, false],\n ['YYYY', /\\d{4}/, false],\n ],\n // iso time formats and regexes\n isoTimes = [\n ['HH:mm:ss.SSSS', /\\d\\d:\\d\\d:\\d\\d\\.\\d+/],\n ['HH:mm:ss,SSSS', /\\d\\d:\\d\\d:\\d\\d,\\d+/],\n ['HH:mm:ss', /\\d\\d:\\d\\d:\\d\\d/],\n ['HH:mm', /\\d\\d:\\d\\d/],\n ['HHmmss.SSSS', /\\d\\d\\d\\d\\d\\d\\.\\d+/],\n ['HHmmss,SSSS', /\\d\\d\\d\\d\\d\\d,\\d+/],\n ['HHmmss', /\\d\\d\\d\\d\\d\\d/],\n ['HHmm', /\\d\\d\\d\\d/],\n ['HH', /\\d\\d/],\n ],\n aspNetJsonRegex = /^\\/?Date\\((-?\\d+)/i,\n // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3\n rfc2822 =\n /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\\d{4}))$/,\n obsOffsets = {\n UT: 0,\n GMT: 0,\n EDT: -4 * 60,\n EST: -5 * 60,\n CDT: -5 * 60,\n CST: -6 * 60,\n MDT: -6 * 60,\n MST: -7 * 60,\n PDT: -7 * 60,\n PST: -8 * 60,\n };\n\n // date from iso format\n function configFromISO(config) {\n var i,\n l,\n string = config._i,\n match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),\n allowTime,\n dateFormat,\n timeFormat,\n tzFormat,\n isoDatesLen = isoDates.length,\n isoTimesLen = isoTimes.length;\n\n if (match) {\n getParsingFlags(config).iso = true;\n for (i = 0, l = isoDatesLen; i < l; i++) {\n if (isoDates[i][1].exec(match[1])) {\n dateFormat = isoDates[i][0];\n allowTime = isoDates[i][2] !== false;\n break;\n }\n }\n if (dateFormat == null) {\n config._isValid = false;\n return;\n }\n if (match[3]) {\n for (i = 0, l = isoTimesLen; i < l; i++) {\n if (isoTimes[i][1].exec(match[3])) {\n // match[2] should be 'T' or space\n timeFormat = (match[2] || ' ') + isoTimes[i][0];\n break;\n }\n }\n if (timeFormat == null) {\n config._isValid = false;\n return;\n }\n }\n if (!allowTime && timeFormat != null) {\n config._isValid = false;\n return;\n }\n if (match[4]) {\n if (tzRegex.exec(match[4])) {\n tzFormat = 'Z';\n } else {\n config._isValid = false;\n return;\n }\n }\n config._f = dateFormat + (timeFormat || '') + (tzFormat || '');\n configFromStringAndFormat(config);\n } else {\n config._isValid = false;\n }\n }\n\n function extractFromRFC2822Strings(\n yearStr,\n monthStr,\n dayStr,\n hourStr,\n minuteStr,\n secondStr\n ) {\n var result = [\n untruncateYear(yearStr),\n defaultLocaleMonthsShort.indexOf(monthStr),\n parseInt(dayStr, 10),\n parseInt(hourStr, 10),\n parseInt(minuteStr, 10),\n ];\n\n if (secondStr) {\n result.push(parseInt(secondStr, 10));\n }\n\n return result;\n }\n\n function untruncateYear(yearStr) {\n var year = parseInt(yearStr, 10);\n if (year <= 49) {\n return 2000 + year;\n } else if (year <= 999) {\n return 1900 + year;\n }\n return year;\n }\n\n function preprocessRFC2822(s) {\n // Remove comments and folding whitespace and replace multiple-spaces with a single space\n return s\n .replace(/\\([^()]*\\)|[\\n\\t]/g, ' ')\n .replace(/(\\s\\s+)/g, ' ')\n .replace(/^\\s\\s*/, '')\n .replace(/\\s\\s*$/, '');\n }\n\n function checkWeekday(weekdayStr, parsedInput, config) {\n if (weekdayStr) {\n // TODO: Replace the vanilla JS Date object with an independent day-of-week check.\n var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr),\n weekdayActual = new Date(\n parsedInput[0],\n parsedInput[1],\n parsedInput[2]\n ).getDay();\n if (weekdayProvided !== weekdayActual) {\n getParsingFlags(config).weekdayMismatch = true;\n config._isValid = false;\n return false;\n }\n }\n return true;\n }\n\n function calculateOffset(obsOffset, militaryOffset, numOffset) {\n if (obsOffset) {\n return obsOffsets[obsOffset];\n } else if (militaryOffset) {\n // the only allowed military tz is Z\n return 0;\n } else {\n var hm = parseInt(numOffset, 10),\n m = hm % 100,\n h = (hm - m) / 100;\n return h * 60 + m;\n }\n }\n\n // date and time from ref 2822 format\n function configFromRFC2822(config) {\n var match = rfc2822.exec(preprocessRFC2822(config._i)),\n parsedArray;\n if (match) {\n parsedArray = extractFromRFC2822Strings(\n match[4],\n match[3],\n match[2],\n match[5],\n match[6],\n match[7]\n );\n if (!checkWeekday(match[1], parsedArray, config)) {\n return;\n }\n\n config._a = parsedArray;\n config._tzm = calculateOffset(match[8], match[9], match[10]);\n\n config._d = createUTCDate.apply(null, config._a);\n config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n\n getParsingFlags(config).rfc2822 = true;\n } else {\n config._isValid = false;\n }\n }\n\n // date from 1) ASP.NET, 2) ISO, 3) RFC 2822 formats, or 4) optional fallback if parsing isn't strict\n function configFromString(config) {\n var matched = aspNetJsonRegex.exec(config._i);\n if (matched !== null) {\n config._d = new Date(+matched[1]);\n return;\n }\n\n configFromISO(config);\n if (config._isValid === false) {\n delete config._isValid;\n } else {\n return;\n }\n\n configFromRFC2822(config);\n if (config._isValid === false) {\n delete config._isValid;\n } else {\n return;\n }\n\n if (config._strict) {\n config._isValid = false;\n } else {\n // Final attempt, use Input Fallback\n hooks.createFromInputFallback(config);\n }\n }\n\n hooks.createFromInputFallback = deprecate(\n 'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' +\n 'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' +\n 'discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.',\n function (config) {\n config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));\n }\n );\n\n // Pick the first defined of two or three arguments.\n function defaults(a, b, c) {\n if (a != null) {\n return a;\n }\n if (b != null) {\n return b;\n }\n return c;\n }\n\n function currentDateArray(config) {\n // hooks is actually the exported moment object\n var nowValue = new Date(hooks.now());\n if (config._useUTC) {\n return [\n nowValue.getUTCFullYear(),\n nowValue.getUTCMonth(),\n nowValue.getUTCDate(),\n ];\n }\n return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];\n }\n\n // convert an array to a date.\n // the array should mirror the parameters below\n // note: all values past the year are optional and will default to the lowest possible value.\n // [year, month, day , hour, minute, second, millisecond]\n function configFromArray(config) {\n var i,\n date,\n input = [],\n currentDate,\n expectedWeekday,\n yearToUse;\n\n if (config._d) {\n return;\n }\n\n currentDate = currentDateArray(config);\n\n //compute day of the year from weeks and weekdays\n if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {\n dayOfYearFromWeekInfo(config);\n }\n\n //if the day of the year is set, figure out what it is\n if (config._dayOfYear != null) {\n yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);\n\n if (\n config._dayOfYear > daysInYear(yearToUse) ||\n config._dayOfYear === 0\n ) {\n getParsingFlags(config)._overflowDayOfYear = true;\n }\n\n date = createUTCDate(yearToUse, 0, config._dayOfYear);\n config._a[MONTH] = date.getUTCMonth();\n config._a[DATE] = date.getUTCDate();\n }\n\n // Default to current date.\n // * if no year, month, day of month are given, default to today\n // * if day of month is given, default month and year\n // * if month is given, default only year\n // * if year is given, don't default anything\n for (i = 0; i < 3 && config._a[i] == null; ++i) {\n config._a[i] = input[i] = currentDate[i];\n }\n\n // Zero out whatever was not defaulted, including time\n for (; i < 7; i++) {\n config._a[i] = input[i] =\n config._a[i] == null ? (i === 2 ? 1 : 0) : config._a[i];\n }\n\n // Check for 24:00:00.000\n if (\n config._a[HOUR] === 24 &&\n config._a[MINUTE] === 0 &&\n config._a[SECOND] === 0 &&\n config._a[MILLISECOND] === 0\n ) {\n config._nextDay = true;\n config._a[HOUR] = 0;\n }\n\n config._d = (config._useUTC ? createUTCDate : createDate).apply(\n null,\n input\n );\n expectedWeekday = config._useUTC\n ? config._d.getUTCDay()\n : config._d.getDay();\n\n // Apply timezone offset from input. The actual utcOffset can be changed\n // with parseZone.\n if (config._tzm != null) {\n config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n }\n\n if (config._nextDay) {\n config._a[HOUR] = 24;\n }\n\n // check for mismatching day of week\n if (\n config._w &&\n typeof config._w.d !== 'undefined' &&\n config._w.d !== expectedWeekday\n ) {\n getParsingFlags(config).weekdayMismatch = true;\n }\n }\n\n function dayOfYearFromWeekInfo(config) {\n var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow, curWeek;\n\n w = config._w;\n if (w.GG != null || w.W != null || w.E != null) {\n dow = 1;\n doy = 4;\n\n // TODO: We need to take the current isoWeekYear, but that depends on\n // how we interpret now (local, utc, fixed offset). So create\n // a now version of current config (take local/utc/offset flags, and\n // create now).\n weekYear = defaults(\n w.GG,\n config._a[YEAR],\n weekOfYear(createLocal(), 1, 4).year\n );\n week = defaults(w.W, 1);\n weekday = defaults(w.E, 1);\n if (weekday < 1 || weekday > 7) {\n weekdayOverflow = true;\n }\n } else {\n dow = config._locale._week.dow;\n doy = config._locale._week.doy;\n\n curWeek = weekOfYear(createLocal(), dow, doy);\n\n weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);\n\n // Default to current week.\n week = defaults(w.w, curWeek.week);\n\n if (w.d != null) {\n // weekday -- low day numbers are considered next week\n weekday = w.d;\n if (weekday < 0 || weekday > 6) {\n weekdayOverflow = true;\n }\n } else if (w.e != null) {\n // local weekday -- counting starts from beginning of week\n weekday = w.e + dow;\n if (w.e < 0 || w.e > 6) {\n weekdayOverflow = true;\n }\n } else {\n // default to beginning of week\n weekday = dow;\n }\n }\n if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {\n getParsingFlags(config)._overflowWeeks = true;\n } else if (weekdayOverflow != null) {\n getParsingFlags(config)._overflowWeekday = true;\n } else {\n temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);\n config._a[YEAR] = temp.year;\n config._dayOfYear = temp.dayOfYear;\n }\n }\n\n // constant that refers to the ISO standard\n hooks.ISO_8601 = function () {};\n\n // constant that refers to the RFC 2822 form\n hooks.RFC_2822 = function () {};\n\n // date from string and format string\n function configFromStringAndFormat(config) {\n // TODO: Move this to another part of the creation flow to prevent circular deps\n if (config._f === hooks.ISO_8601) {\n configFromISO(config);\n return;\n }\n if (config._f === hooks.RFC_2822) {\n configFromRFC2822(config);\n return;\n }\n config._a = [];\n getParsingFlags(config).empty = true;\n\n // This array is used to make a Date, either with `new Date` or `Date.UTC`\n var string = '' + config._i,\n i,\n parsedInput,\n tokens,\n token,\n skipped,\n stringLength = string.length,\n totalParsedInputLength = 0,\n era,\n tokenLen;\n\n tokens =\n expandFormat(config._f, config._locale).match(formattingTokens) || [];\n tokenLen = tokens.length;\n for (i = 0; i < tokenLen; i++) {\n token = tokens[i];\n parsedInput = (string.match(getParseRegexForToken(token, config)) ||\n [])[0];\n if (parsedInput) {\n skipped = string.substr(0, string.indexOf(parsedInput));\n if (skipped.length > 0) {\n getParsingFlags(config).unusedInput.push(skipped);\n }\n string = string.slice(\n string.indexOf(parsedInput) + parsedInput.length\n );\n totalParsedInputLength += parsedInput.length;\n }\n // don't parse if it's not a known token\n if (formatTokenFunctions[token]) {\n if (parsedInput) {\n getParsingFlags(config).empty = false;\n } else {\n getParsingFlags(config).unusedTokens.push(token);\n }\n addTimeToArrayFromToken(token, parsedInput, config);\n } else if (config._strict && !parsedInput) {\n getParsingFlags(config).unusedTokens.push(token);\n }\n }\n\n // add remaining unparsed input length to the string\n getParsingFlags(config).charsLeftOver =\n stringLength - totalParsedInputLength;\n if (string.length > 0) {\n getParsingFlags(config).unusedInput.push(string);\n }\n\n // clear _12h flag if hour is <= 12\n if (\n config._a[HOUR] <= 12 &&\n getParsingFlags(config).bigHour === true &&\n config._a[HOUR] > 0\n ) {\n getParsingFlags(config).bigHour = undefined;\n }\n\n getParsingFlags(config).parsedDateParts = config._a.slice(0);\n getParsingFlags(config).meridiem = config._meridiem;\n // handle meridiem\n config._a[HOUR] = meridiemFixWrap(\n config._locale,\n config._a[HOUR],\n config._meridiem\n );\n\n // handle era\n era = getParsingFlags(config).era;\n if (era !== null) {\n config._a[YEAR] = config._locale.erasConvertYear(era, config._a[YEAR]);\n }\n\n configFromArray(config);\n checkOverflow(config);\n }\n\n function meridiemFixWrap(locale, hour, meridiem) {\n var isPm;\n\n if (meridiem == null) {\n // nothing to do\n return hour;\n }\n if (locale.meridiemHour != null) {\n return locale.meridiemHour(hour, meridiem);\n } else if (locale.isPM != null) {\n // Fallback\n isPm = locale.isPM(meridiem);\n if (isPm && hour < 12) {\n hour += 12;\n }\n if (!isPm && hour === 12) {\n hour = 0;\n }\n return hour;\n } else {\n // this is not supposed to happen\n return hour;\n }\n }\n\n // date from string and array of format strings\n function configFromStringAndArray(config) {\n var tempConfig,\n bestMoment,\n scoreToBeat,\n i,\n currentScore,\n validFormatFound,\n bestFormatIsValid = false,\n configfLen = config._f.length;\n\n if (configfLen === 0) {\n getParsingFlags(config).invalidFormat = true;\n config._d = new Date(NaN);\n return;\n }\n\n for (i = 0; i < configfLen; i++) {\n currentScore = 0;\n validFormatFound = false;\n tempConfig = copyConfig({}, config);\n if (config._useUTC != null) {\n tempConfig._useUTC = config._useUTC;\n }\n tempConfig._f = config._f[i];\n configFromStringAndFormat(tempConfig);\n\n if (isValid(tempConfig)) {\n validFormatFound = true;\n }\n\n // if there is any input that was not parsed add a penalty for that format\n currentScore += getParsingFlags(tempConfig).charsLeftOver;\n\n //or tokens\n currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;\n\n getParsingFlags(tempConfig).score = currentScore;\n\n if (!bestFormatIsValid) {\n if (\n scoreToBeat == null ||\n currentScore < scoreToBeat ||\n validFormatFound\n ) {\n scoreToBeat = currentScore;\n bestMoment = tempConfig;\n if (validFormatFound) {\n bestFormatIsValid = true;\n }\n }\n } else {\n if (currentScore < scoreToBeat) {\n scoreToBeat = currentScore;\n bestMoment = tempConfig;\n }\n }\n }\n\n extend(config, bestMoment || tempConfig);\n }\n\n function configFromObject(config) {\n if (config._d) {\n return;\n }\n\n var i = normalizeObjectUnits(config._i),\n dayOrDate = i.day === undefined ? i.date : i.day;\n config._a = map(\n [i.year, i.month, dayOrDate, i.hour, i.minute, i.second, i.millisecond],\n function (obj) {\n return obj && parseInt(obj, 10);\n }\n );\n\n configFromArray(config);\n }\n\n function createFromConfig(config) {\n var res = new Moment(checkOverflow(prepareConfig(config)));\n if (res._nextDay) {\n // Adding is smart enough around DST\n res.add(1, 'd');\n res._nextDay = undefined;\n }\n\n return res;\n }\n\n function prepareConfig(config) {\n var input = config._i,\n format = config._f;\n\n config._locale = config._locale || getLocale(config._l);\n\n if (input === null || (format === undefined && input === '')) {\n return createInvalid({ nullInput: true });\n }\n\n if (typeof input === 'string') {\n config._i = input = config._locale.preparse(input);\n }\n\n if (isMoment(input)) {\n return new Moment(checkOverflow(input));\n } else if (isDate(input)) {\n config._d = input;\n } else if (isArray(format)) {\n configFromStringAndArray(config);\n } else if (format) {\n configFromStringAndFormat(config);\n } else {\n configFromInput(config);\n }\n\n if (!isValid(config)) {\n config._d = null;\n }\n\n return config;\n }\n\n function configFromInput(config) {\n var input = config._i;\n if (isUndefined(input)) {\n config._d = new Date(hooks.now());\n } else if (isDate(input)) {\n config._d = new Date(input.valueOf());\n } else if (typeof input === 'string') {\n configFromString(config);\n } else if (isArray(input)) {\n config._a = map(input.slice(0), function (obj) {\n return parseInt(obj, 10);\n });\n configFromArray(config);\n } else if (isObject(input)) {\n configFromObject(config);\n } else if (isNumber(input)) {\n // from milliseconds\n config._d = new Date(input);\n } else {\n hooks.createFromInputFallback(config);\n }\n }\n\n function createLocalOrUTC(input, format, locale, strict, isUTC) {\n var c = {};\n\n if (format === true || format === false) {\n strict = format;\n format = undefined;\n }\n\n if (locale === true || locale === false) {\n strict = locale;\n locale = undefined;\n }\n\n if (\n (isObject(input) && isObjectEmpty(input)) ||\n (isArray(input) && input.length === 0)\n ) {\n input = undefined;\n }\n // object construction must be done this way.\n // https://github.com/moment/moment/issues/1423\n c._isAMomentObject = true;\n c._useUTC = c._isUTC = isUTC;\n c._l = locale;\n c._i = input;\n c._f = format;\n c._strict = strict;\n\n return createFromConfig(c);\n }\n\n function createLocal(input, format, locale, strict) {\n return createLocalOrUTC(input, format, locale, strict, false);\n }\n\n var prototypeMin = deprecate(\n 'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/',\n function () {\n var other = createLocal.apply(null, arguments);\n if (this.isValid() && other.isValid()) {\n return other < this ? this : other;\n } else {\n return createInvalid();\n }\n }\n ),\n prototypeMax = deprecate(\n 'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',\n function () {\n var other = createLocal.apply(null, arguments);\n if (this.isValid() && other.isValid()) {\n return other > this ? this : other;\n } else {\n return createInvalid();\n }\n }\n );\n\n // Pick a moment m from moments so that m[fn](other) is true for all\n // other. This relies on the function fn to be transitive.\n //\n // moments should either be an array of moment objects or an array, whose\n // first element is an array of moment objects.\n function pickBy(fn, moments) {\n var res, i;\n if (moments.length === 1 && isArray(moments[0])) {\n moments = moments[0];\n }\n if (!moments.length) {\n return createLocal();\n }\n res = moments[0];\n for (i = 1; i < moments.length; ++i) {\n if (!moments[i].isValid() || moments[i][fn](res)) {\n res = moments[i];\n }\n }\n return res;\n }\n\n // TODO: Use [].sort instead?\n function min() {\n var args = [].slice.call(arguments, 0);\n\n return pickBy('isBefore', args);\n }\n\n function max() {\n var args = [].slice.call(arguments, 0);\n\n return pickBy('isAfter', args);\n }\n\n var now = function () {\n return Date.now ? Date.now() : +new Date();\n };\n\n var ordering = [\n 'year',\n 'quarter',\n 'month',\n 'week',\n 'day',\n 'hour',\n 'minute',\n 'second',\n 'millisecond',\n ];\n\n function isDurationValid(m) {\n var key,\n unitHasDecimal = false,\n i,\n orderLen = ordering.length;\n for (key in m) {\n if (\n hasOwnProp(m, key) &&\n !(\n indexOf.call(ordering, key) !== -1 &&\n (m[key] == null || !isNaN(m[key]))\n )\n ) {\n return false;\n }\n }\n\n for (i = 0; i < orderLen; ++i) {\n if (m[ordering[i]]) {\n if (unitHasDecimal) {\n return false; // only allow non-integers for smallest unit\n }\n if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {\n unitHasDecimal = true;\n }\n }\n }\n\n return true;\n }\n\n function isValid$1() {\n return this._isValid;\n }\n\n function createInvalid$1() {\n return createDuration(NaN);\n }\n\n function Duration(duration) {\n var normalizedInput = normalizeObjectUnits(duration),\n years = normalizedInput.year || 0,\n quarters = normalizedInput.quarter || 0,\n months = normalizedInput.month || 0,\n weeks = normalizedInput.week || normalizedInput.isoWeek || 0,\n days = normalizedInput.day || 0,\n hours = normalizedInput.hour || 0,\n minutes = normalizedInput.minute || 0,\n seconds = normalizedInput.second || 0,\n milliseconds = normalizedInput.millisecond || 0;\n\n this._isValid = isDurationValid(normalizedInput);\n\n // representation for dateAddRemove\n this._milliseconds =\n +milliseconds +\n seconds * 1e3 + // 1000\n minutes * 6e4 + // 1000 * 60\n hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978\n // Because of dateAddRemove treats 24 hours as different from a\n // day when working around DST, we need to store them separately\n this._days = +days + weeks * 7;\n // It is impossible to translate months into days without knowing\n // which months you are are talking about, so we have to store\n // it separately.\n this._months = +months + quarters * 3 + years * 12;\n\n this._data = {};\n\n this._locale = getLocale();\n\n this._bubble();\n }\n\n function isDuration(obj) {\n return obj instanceof Duration;\n }\n\n function absRound(number) {\n if (number < 0) {\n return Math.round(-1 * number) * -1;\n } else {\n return Math.round(number);\n }\n }\n\n // compare two arrays, return the number of differences\n function compareArrays(array1, array2, dontConvert) {\n var len = Math.min(array1.length, array2.length),\n lengthDiff = Math.abs(array1.length - array2.length),\n diffs = 0,\n i;\n for (i = 0; i < len; i++) {\n if (\n (dontConvert && array1[i] !== array2[i]) ||\n (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))\n ) {\n diffs++;\n }\n }\n return diffs + lengthDiff;\n }\n\n // FORMATTING\n\n function offset(token, separator) {\n addFormatToken(token, 0, 0, function () {\n var offset = this.utcOffset(),\n sign = '+';\n if (offset < 0) {\n offset = -offset;\n sign = '-';\n }\n return (\n sign +\n zeroFill(~~(offset / 60), 2) +\n separator +\n zeroFill(~~offset % 60, 2)\n );\n });\n }\n\n offset('Z', ':');\n offset('ZZ', '');\n\n // PARSING\n\n addRegexToken('Z', matchShortOffset);\n addRegexToken('ZZ', matchShortOffset);\n addParseToken(['Z', 'ZZ'], function (input, array, config) {\n config._useUTC = true;\n config._tzm = offsetFromString(matchShortOffset, input);\n });\n\n // HELPERS\n\n // timezone chunker\n // '+10:00' > ['10', '00']\n // '-1530' > ['-15', '30']\n var chunkOffset = /([\\+\\-]|\\d\\d)/gi;\n\n function offsetFromString(matcher, string) {\n var matches = (string || '').match(matcher),\n chunk,\n parts,\n minutes;\n\n if (matches === null) {\n return null;\n }\n\n chunk = matches[matches.length - 1] || [];\n parts = (chunk + '').match(chunkOffset) || ['-', 0, 0];\n minutes = +(parts[1] * 60) + toInt(parts[2]);\n\n return minutes === 0 ? 0 : parts[0] === '+' ? minutes : -minutes;\n }\n\n // Return a moment from input, that is local/utc/zone equivalent to model.\n function cloneWithOffset(input, model) {\n var res, diff;\n if (model._isUTC) {\n res = model.clone();\n diff =\n (isMoment(input) || isDate(input)\n ? input.valueOf()\n : createLocal(input).valueOf()) - res.valueOf();\n // Use low-level api, because this fn is low-level api.\n res._d.setTime(res._d.valueOf() + diff);\n hooks.updateOffset(res, false);\n return res;\n } else {\n return createLocal(input).local();\n }\n }\n\n function getDateOffset(m) {\n // On Firefox.24 Date#getTimezoneOffset returns a floating point.\n // https://github.com/moment/moment/pull/1871\n return -Math.round(m._d.getTimezoneOffset());\n }\n\n // HOOKS\n\n // This function will be called whenever a moment is mutated.\n // It is intended to keep the offset in sync with the timezone.\n hooks.updateOffset = function () {};\n\n // MOMENTS\n\n // keepLocalTime = true means only change the timezone, without\n // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->\n // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset\n // +0200, so we adjust the time as needed, to be valid.\n //\n // Keeping the time actually adds/subtracts (one hour)\n // from the actual represented time. That is why we call updateOffset\n // a second time. In case it wants us to change the offset again\n // _changeInProgress == true case, then we have to adjust, because\n // there is no such time in the given timezone.\n function getSetOffset(input, keepLocalTime, keepMinutes) {\n var offset = this._offset || 0,\n localAdjust;\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n if (input != null) {\n if (typeof input === 'string') {\n input = offsetFromString(matchShortOffset, input);\n if (input === null) {\n return this;\n }\n } else if (Math.abs(input) < 16 && !keepMinutes) {\n input = input * 60;\n }\n if (!this._isUTC && keepLocalTime) {\n localAdjust = getDateOffset(this);\n }\n this._offset = input;\n this._isUTC = true;\n if (localAdjust != null) {\n this.add(localAdjust, 'm');\n }\n if (offset !== input) {\n if (!keepLocalTime || this._changeInProgress) {\n addSubtract(\n this,\n createDuration(input - offset, 'm'),\n 1,\n false\n );\n } else if (!this._changeInProgress) {\n this._changeInProgress = true;\n hooks.updateOffset(this, true);\n this._changeInProgress = null;\n }\n }\n return this;\n } else {\n return this._isUTC ? offset : getDateOffset(this);\n }\n }\n\n function getSetZone(input, keepLocalTime) {\n if (input != null) {\n if (typeof input !== 'string') {\n input = -input;\n }\n\n this.utcOffset(input, keepLocalTime);\n\n return this;\n } else {\n return -this.utcOffset();\n }\n }\n\n function setOffsetToUTC(keepLocalTime) {\n return this.utcOffset(0, keepLocalTime);\n }\n\n function setOffsetToLocal(keepLocalTime) {\n if (this._isUTC) {\n this.utcOffset(0, keepLocalTime);\n this._isUTC = false;\n\n if (keepLocalTime) {\n this.subtract(getDateOffset(this), 'm');\n }\n }\n return this;\n }\n\n function setOffsetToParsedOffset() {\n if (this._tzm != null) {\n this.utcOffset(this._tzm, false, true);\n } else if (typeof this._i === 'string') {\n var tZone = offsetFromString(matchOffset, this._i);\n if (tZone != null) {\n this.utcOffset(tZone);\n } else {\n this.utcOffset(0, true);\n }\n }\n return this;\n }\n\n function hasAlignedHourOffset(input) {\n if (!this.isValid()) {\n return false;\n }\n input = input ? createLocal(input).utcOffset() : 0;\n\n return (this.utcOffset() - input) % 60 === 0;\n }\n\n function isDaylightSavingTime() {\n return (\n this.utcOffset() > this.clone().month(0).utcOffset() ||\n this.utcOffset() > this.clone().month(5).utcOffset()\n );\n }\n\n function isDaylightSavingTimeShifted() {\n if (!isUndefined(this._isDSTShifted)) {\n return this._isDSTShifted;\n }\n\n var c = {},\n other;\n\n copyConfig(c, this);\n c = prepareConfig(c);\n\n if (c._a) {\n other = c._isUTC ? createUTC(c._a) : createLocal(c._a);\n this._isDSTShifted =\n this.isValid() && compareArrays(c._a, other.toArray()) > 0;\n } else {\n this._isDSTShifted = false;\n }\n\n return this._isDSTShifted;\n }\n\n function isLocal() {\n return this.isValid() ? !this._isUTC : false;\n }\n\n function isUtcOffset() {\n return this.isValid() ? this._isUTC : false;\n }\n\n function isUtc() {\n return this.isValid() ? this._isUTC && this._offset === 0 : false;\n }\n\n // ASP.NET json date format regex\n var aspNetRegex = /^(-|\\+)?(?:(\\d*)[. ])?(\\d+):(\\d+)(?::(\\d+)(\\.\\d*)?)?$/,\n // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html\n // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere\n // and further modified to allow for strings containing both week and day\n isoRegex =\n /^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;\n\n function createDuration(input, key) {\n var duration = input,\n // matching against regexp is expensive, do it on demand\n match = null,\n sign,\n ret,\n diffRes;\n\n if (isDuration(input)) {\n duration = {\n ms: input._milliseconds,\n d: input._days,\n M: input._months,\n };\n } else if (isNumber(input) || !isNaN(+input)) {\n duration = {};\n if (key) {\n duration[key] = +input;\n } else {\n duration.milliseconds = +input;\n }\n } else if ((match = aspNetRegex.exec(input))) {\n sign = match[1] === '-' ? -1 : 1;\n duration = {\n y: 0,\n d: toInt(match[DATE]) * sign,\n h: toInt(match[HOUR]) * sign,\n m: toInt(match[MINUTE]) * sign,\n s: toInt(match[SECOND]) * sign,\n ms: toInt(absRound(match[MILLISECOND] * 1000)) * sign, // the millisecond decimal point is included in the match\n };\n } else if ((match = isoRegex.exec(input))) {\n sign = match[1] === '-' ? -1 : 1;\n duration = {\n y: parseIso(match[2], sign),\n M: parseIso(match[3], sign),\n w: parseIso(match[4], sign),\n d: parseIso(match[5], sign),\n h: parseIso(match[6], sign),\n m: parseIso(match[7], sign),\n s: parseIso(match[8], sign),\n };\n } else if (duration == null) {\n // checks for null or undefined\n duration = {};\n } else if (\n typeof duration === 'object' &&\n ('from' in duration || 'to' in duration)\n ) {\n diffRes = momentsDifference(\n createLocal(duration.from),\n createLocal(duration.to)\n );\n\n duration = {};\n duration.ms = diffRes.milliseconds;\n duration.M = diffRes.months;\n }\n\n ret = new Duration(duration);\n\n if (isDuration(input) && hasOwnProp(input, '_locale')) {\n ret._locale = input._locale;\n }\n\n if (isDuration(input) && hasOwnProp(input, '_isValid')) {\n ret._isValid = input._isValid;\n }\n\n return ret;\n }\n\n createDuration.fn = Duration.prototype;\n createDuration.invalid = createInvalid$1;\n\n function parseIso(inp, sign) {\n // We'd normally use ~~inp for this, but unfortunately it also\n // converts floats to ints.\n // inp may be undefined, so careful calling replace on it.\n var res = inp && parseFloat(inp.replace(',', '.'));\n // apply sign while we're at it\n return (isNaN(res) ? 0 : res) * sign;\n }\n\n function positiveMomentsDifference(base, other) {\n var res = {};\n\n res.months =\n other.month() - base.month() + (other.year() - base.year()) * 12;\n if (base.clone().add(res.months, 'M').isAfter(other)) {\n --res.months;\n }\n\n res.milliseconds = +other - +base.clone().add(res.months, 'M');\n\n return res;\n }\n\n function momentsDifference(base, other) {\n var res;\n if (!(base.isValid() && other.isValid())) {\n return { milliseconds: 0, months: 0 };\n }\n\n other = cloneWithOffset(other, base);\n if (base.isBefore(other)) {\n res = positiveMomentsDifference(base, other);\n } else {\n res = positiveMomentsDifference(other, base);\n res.milliseconds = -res.milliseconds;\n res.months = -res.months;\n }\n\n return res;\n }\n\n // TODO: remove 'name' arg after deprecation is removed\n function createAdder(direction, name) {\n return function (val, period) {\n var dur, tmp;\n //invert the arguments, but complain about it\n if (period !== null && !isNaN(+period)) {\n deprecateSimple(\n name,\n 'moment().' +\n name +\n '(period, number) is deprecated. Please use moment().' +\n name +\n '(number, period). ' +\n 'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.'\n );\n tmp = val;\n val = period;\n period = tmp;\n }\n\n dur = createDuration(val, period);\n addSubtract(this, dur, direction);\n return this;\n };\n }\n\n function addSubtract(mom, duration, isAdding, updateOffset) {\n var milliseconds = duration._milliseconds,\n days = absRound(duration._days),\n months = absRound(duration._months);\n\n if (!mom.isValid()) {\n // No op\n return;\n }\n\n updateOffset = updateOffset == null ? true : updateOffset;\n\n if (months) {\n setMonth(mom, get(mom, 'Month') + months * isAdding);\n }\n if (days) {\n set$1(mom, 'Date', get(mom, 'Date') + days * isAdding);\n }\n if (milliseconds) {\n mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);\n }\n if (updateOffset) {\n hooks.updateOffset(mom, days || months);\n }\n }\n\n var add = createAdder(1, 'add'),\n subtract = createAdder(-1, 'subtract');\n\n function isString(input) {\n return typeof input === 'string' || input instanceof String;\n }\n\n // type MomentInput = Moment | Date | string | number | (number | string)[] | MomentInputObject | void; // null | undefined\n function isMomentInput(input) {\n return (\n isMoment(input) ||\n isDate(input) ||\n isString(input) ||\n isNumber(input) ||\n isNumberOrStringArray(input) ||\n isMomentInputObject(input) ||\n input === null ||\n input === undefined\n );\n }\n\n function isMomentInputObject(input) {\n var objectTest = isObject(input) && !isObjectEmpty(input),\n propertyTest = false,\n properties = [\n 'years',\n 'year',\n 'y',\n 'months',\n 'month',\n 'M',\n 'days',\n 'day',\n 'd',\n 'dates',\n 'date',\n 'D',\n 'hours',\n 'hour',\n 'h',\n 'minutes',\n 'minute',\n 'm',\n 'seconds',\n 'second',\n 's',\n 'milliseconds',\n 'millisecond',\n 'ms',\n ],\n i,\n property,\n propertyLen = properties.length;\n\n for (i = 0; i < propertyLen; i += 1) {\n property = properties[i];\n propertyTest = propertyTest || hasOwnProp(input, property);\n }\n\n return objectTest && propertyTest;\n }\n\n function isNumberOrStringArray(input) {\n var arrayTest = isArray(input),\n dataTypeTest = false;\n if (arrayTest) {\n dataTypeTest =\n input.filter(function (item) {\n return !isNumber(item) && isString(input);\n }).length === 0;\n }\n return arrayTest && dataTypeTest;\n }\n\n function isCalendarSpec(input) {\n var objectTest = isObject(input) && !isObjectEmpty(input),\n propertyTest = false,\n properties = [\n 'sameDay',\n 'nextDay',\n 'lastDay',\n 'nextWeek',\n 'lastWeek',\n 'sameElse',\n ],\n i,\n property;\n\n for (i = 0; i < properties.length; i += 1) {\n property = properties[i];\n propertyTest = propertyTest || hasOwnProp(input, property);\n }\n\n return objectTest && propertyTest;\n }\n\n function getCalendarFormat(myMoment, now) {\n var diff = myMoment.diff(now, 'days', true);\n return diff < -6\n ? 'sameElse'\n : diff < -1\n ? 'lastWeek'\n : diff < 0\n ? 'lastDay'\n : diff < 1\n ? 'sameDay'\n : diff < 2\n ? 'nextDay'\n : diff < 7\n ? 'nextWeek'\n : 'sameElse';\n }\n\n function calendar$1(time, formats) {\n // Support for single parameter, formats only overload to the calendar function\n if (arguments.length === 1) {\n if (!arguments[0]) {\n time = undefined;\n formats = undefined;\n } else if (isMomentInput(arguments[0])) {\n time = arguments[0];\n formats = undefined;\n } else if (isCalendarSpec(arguments[0])) {\n formats = arguments[0];\n time = undefined;\n }\n }\n // We want to compare the start of today, vs this.\n // Getting start-of-today depends on whether we're local/utc/offset or not.\n var now = time || createLocal(),\n sod = cloneWithOffset(now, this).startOf('day'),\n format = hooks.calendarFormat(this, sod) || 'sameElse',\n output =\n formats &&\n (isFunction(formats[format])\n ? formats[format].call(this, now)\n : formats[format]);\n\n return this.format(\n output || this.localeData().calendar(format, this, createLocal(now))\n );\n }\n\n function clone() {\n return new Moment(this);\n }\n\n function isAfter(input, units) {\n var localInput = isMoment(input) ? input : createLocal(input);\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(units) || 'millisecond';\n if (units === 'millisecond') {\n return this.valueOf() > localInput.valueOf();\n } else {\n return localInput.valueOf() < this.clone().startOf(units).valueOf();\n }\n }\n\n function isBefore(input, units) {\n var localInput = isMoment(input) ? input : createLocal(input);\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(units) || 'millisecond';\n if (units === 'millisecond') {\n return this.valueOf() < localInput.valueOf();\n } else {\n return this.clone().endOf(units).valueOf() < localInput.valueOf();\n }\n }\n\n function isBetween(from, to, units, inclusivity) {\n var localFrom = isMoment(from) ? from : createLocal(from),\n localTo = isMoment(to) ? to : createLocal(to);\n if (!(this.isValid() && localFrom.isValid() && localTo.isValid())) {\n return false;\n }\n inclusivity = inclusivity || '()';\n return (\n (inclusivity[0] === '('\n ? this.isAfter(localFrom, units)\n : !this.isBefore(localFrom, units)) &&\n (inclusivity[1] === ')'\n ? this.isBefore(localTo, units)\n : !this.isAfter(localTo, units))\n );\n }\n\n function isSame(input, units) {\n var localInput = isMoment(input) ? input : createLocal(input),\n inputMs;\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(units) || 'millisecond';\n if (units === 'millisecond') {\n return this.valueOf() === localInput.valueOf();\n } else {\n inputMs = localInput.valueOf();\n return (\n this.clone().startOf(units).valueOf() <= inputMs &&\n inputMs <= this.clone().endOf(units).valueOf()\n );\n }\n }\n\n function isSameOrAfter(input, units) {\n return this.isSame(input, units) || this.isAfter(input, units);\n }\n\n function isSameOrBefore(input, units) {\n return this.isSame(input, units) || this.isBefore(input, units);\n }\n\n function diff(input, units, asFloat) {\n var that, zoneDelta, output;\n\n if (!this.isValid()) {\n return NaN;\n }\n\n that = cloneWithOffset(input, this);\n\n if (!that.isValid()) {\n return NaN;\n }\n\n zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;\n\n units = normalizeUnits(units);\n\n switch (units) {\n case 'year':\n output = monthDiff(this, that) / 12;\n break;\n case 'month':\n output = monthDiff(this, that);\n break;\n case 'quarter':\n output = monthDiff(this, that) / 3;\n break;\n case 'second':\n output = (this - that) / 1e3;\n break; // 1000\n case 'minute':\n output = (this - that) / 6e4;\n break; // 1000 * 60\n case 'hour':\n output = (this - that) / 36e5;\n break; // 1000 * 60 * 60\n case 'day':\n output = (this - that - zoneDelta) / 864e5;\n break; // 1000 * 60 * 60 * 24, negate dst\n case 'week':\n output = (this - that - zoneDelta) / 6048e5;\n break; // 1000 * 60 * 60 * 24 * 7, negate dst\n default:\n output = this - that;\n }\n\n return asFloat ? output : absFloor(output);\n }\n\n function monthDiff(a, b) {\n if (a.date() < b.date()) {\n // end-of-month calculations work correct when the start month has more\n // days than the end month.\n return -monthDiff(b, a);\n }\n // difference in months\n var wholeMonthDiff = (b.year() - a.year()) * 12 + (b.month() - a.month()),\n // b is in (anchor - 1 month, anchor + 1 month)\n anchor = a.clone().add(wholeMonthDiff, 'months'),\n anchor2,\n adjust;\n\n if (b - anchor < 0) {\n anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');\n // linear across the month\n adjust = (b - anchor) / (anchor - anchor2);\n } else {\n anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');\n // linear across the month\n adjust = (b - anchor) / (anchor2 - anchor);\n }\n\n //check for negative zero, return zero if negative zero\n return -(wholeMonthDiff + adjust) || 0;\n }\n\n hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';\n hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';\n\n function toString() {\n return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');\n }\n\n function toISOString(keepOffset) {\n if (!this.isValid()) {\n return null;\n }\n var utc = keepOffset !== true,\n m = utc ? this.clone().utc() : this;\n if (m.year() < 0 || m.year() > 9999) {\n return formatMoment(\n m,\n utc\n ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]'\n : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ'\n );\n }\n if (isFunction(Date.prototype.toISOString)) {\n // native implementation is ~50x faster, use it when we can\n if (utc) {\n return this.toDate().toISOString();\n } else {\n return new Date(this.valueOf() + this.utcOffset() * 60 * 1000)\n .toISOString()\n .replace('Z', formatMoment(m, 'Z'));\n }\n }\n return formatMoment(\n m,\n utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ'\n );\n }\n\n /**\n * Return a human readable representation of a moment that can\n * also be evaluated to get a new moment which is the same\n *\n * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects\n */\n function inspect() {\n if (!this.isValid()) {\n return 'moment.invalid(/* ' + this._i + ' */)';\n }\n var func = 'moment',\n zone = '',\n prefix,\n year,\n datetime,\n suffix;\n if (!this.isLocal()) {\n func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';\n zone = 'Z';\n }\n prefix = '[' + func + '(\"]';\n year = 0 <= this.year() && this.year() <= 9999 ? 'YYYY' : 'YYYYYY';\n datetime = '-MM-DD[T]HH:mm:ss.SSS';\n suffix = zone + '[\")]';\n\n return this.format(prefix + year + datetime + suffix);\n }\n\n function format(inputString) {\n if (!inputString) {\n inputString = this.isUtc()\n ? hooks.defaultFormatUtc\n : hooks.defaultFormat;\n }\n var output = formatMoment(this, inputString);\n return this.localeData().postformat(output);\n }\n\n function from(time, withoutSuffix) {\n if (\n this.isValid() &&\n ((isMoment(time) && time.isValid()) || createLocal(time).isValid())\n ) {\n return createDuration({ to: this, from: time })\n .locale(this.locale())\n .humanize(!withoutSuffix);\n } else {\n return this.localeData().invalidDate();\n }\n }\n\n function fromNow(withoutSuffix) {\n return this.from(createLocal(), withoutSuffix);\n }\n\n function to(time, withoutSuffix) {\n if (\n this.isValid() &&\n ((isMoment(time) && time.isValid()) || createLocal(time).isValid())\n ) {\n return createDuration({ from: this, to: time })\n .locale(this.locale())\n .humanize(!withoutSuffix);\n } else {\n return this.localeData().invalidDate();\n }\n }\n\n function toNow(withoutSuffix) {\n return this.to(createLocal(), withoutSuffix);\n }\n\n // If passed a locale key, it will set the locale for this\n // instance. Otherwise, it will return the locale configuration\n // variables for this instance.\n function locale(key) {\n var newLocaleData;\n\n if (key === undefined) {\n return this._locale._abbr;\n } else {\n newLocaleData = getLocale(key);\n if (newLocaleData != null) {\n this._locale = newLocaleData;\n }\n return this;\n }\n }\n\n var lang = deprecate(\n 'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',\n function (key) {\n if (key === undefined) {\n return this.localeData();\n } else {\n return this.locale(key);\n }\n }\n );\n\n function localeData() {\n return this._locale;\n }\n\n var MS_PER_SECOND = 1000,\n MS_PER_MINUTE = 60 * MS_PER_SECOND,\n MS_PER_HOUR = 60 * MS_PER_MINUTE,\n MS_PER_400_YEARS = (365 * 400 + 97) * 24 * MS_PER_HOUR;\n\n // actual modulo - handles negative numbers (for dates before 1970):\n function mod$1(dividend, divisor) {\n return ((dividend % divisor) + divisor) % divisor;\n }\n\n function localStartOfDate(y, m, d) {\n // the date constructor remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n // preserve leap years using a full 400 year cycle, then reset\n return new Date(y + 400, m, d) - MS_PER_400_YEARS;\n } else {\n return new Date(y, m, d).valueOf();\n }\n }\n\n function utcStartOfDate(y, m, d) {\n // Date.UTC remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n // preserve leap years using a full 400 year cycle, then reset\n return Date.UTC(y + 400, m, d) - MS_PER_400_YEARS;\n } else {\n return Date.UTC(y, m, d);\n }\n }\n\n function startOf(units) {\n var time, startOfDate;\n units = normalizeUnits(units);\n if (units === undefined || units === 'millisecond' || !this.isValid()) {\n return this;\n }\n\n startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n switch (units) {\n case 'year':\n time = startOfDate(this.year(), 0, 1);\n break;\n case 'quarter':\n time = startOfDate(\n this.year(),\n this.month() - (this.month() % 3),\n 1\n );\n break;\n case 'month':\n time = startOfDate(this.year(), this.month(), 1);\n break;\n case 'week':\n time = startOfDate(\n this.year(),\n this.month(),\n this.date() - this.weekday()\n );\n break;\n case 'isoWeek':\n time = startOfDate(\n this.year(),\n this.month(),\n this.date() - (this.isoWeekday() - 1)\n );\n break;\n case 'day':\n case 'date':\n time = startOfDate(this.year(), this.month(), this.date());\n break;\n case 'hour':\n time = this._d.valueOf();\n time -= mod$1(\n time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),\n MS_PER_HOUR\n );\n break;\n case 'minute':\n time = this._d.valueOf();\n time -= mod$1(time, MS_PER_MINUTE);\n break;\n case 'second':\n time = this._d.valueOf();\n time -= mod$1(time, MS_PER_SECOND);\n break;\n }\n\n this._d.setTime(time);\n hooks.updateOffset(this, true);\n return this;\n }\n\n function endOf(units) {\n var time, startOfDate;\n units = normalizeUnits(units);\n if (units === undefined || units === 'millisecond' || !this.isValid()) {\n return this;\n }\n\n startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n switch (units) {\n case 'year':\n time = startOfDate(this.year() + 1, 0, 1) - 1;\n break;\n case 'quarter':\n time =\n startOfDate(\n this.year(),\n this.month() - (this.month() % 3) + 3,\n 1\n ) - 1;\n break;\n case 'month':\n time = startOfDate(this.year(), this.month() + 1, 1) - 1;\n break;\n case 'week':\n time =\n startOfDate(\n this.year(),\n this.month(),\n this.date() - this.weekday() + 7\n ) - 1;\n break;\n case 'isoWeek':\n time =\n startOfDate(\n this.year(),\n this.month(),\n this.date() - (this.isoWeekday() - 1) + 7\n ) - 1;\n break;\n case 'day':\n case 'date':\n time = startOfDate(this.year(), this.month(), this.date() + 1) - 1;\n break;\n case 'hour':\n time = this._d.valueOf();\n time +=\n MS_PER_HOUR -\n mod$1(\n time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),\n MS_PER_HOUR\n ) -\n 1;\n break;\n case 'minute':\n time = this._d.valueOf();\n time += MS_PER_MINUTE - mod$1(time, MS_PER_MINUTE) - 1;\n break;\n case 'second':\n time = this._d.valueOf();\n time += MS_PER_SECOND - mod$1(time, MS_PER_SECOND) - 1;\n break;\n }\n\n this._d.setTime(time);\n hooks.updateOffset(this, true);\n return this;\n }\n\n function valueOf() {\n return this._d.valueOf() - (this._offset || 0) * 60000;\n }\n\n function unix() {\n return Math.floor(this.valueOf() / 1000);\n }\n\n function toDate() {\n return new Date(this.valueOf());\n }\n\n function toArray() {\n var m = this;\n return [\n m.year(),\n m.month(),\n m.date(),\n m.hour(),\n m.minute(),\n m.second(),\n m.millisecond(),\n ];\n }\n\n function toObject() {\n var m = this;\n return {\n years: m.year(),\n months: m.month(),\n date: m.date(),\n hours: m.hours(),\n minutes: m.minutes(),\n seconds: m.seconds(),\n milliseconds: m.milliseconds(),\n };\n }\n\n function toJSON() {\n // new Date(NaN).toJSON() === null\n return this.isValid() ? this.toISOString() : null;\n }\n\n function isValid$2() {\n return isValid(this);\n }\n\n function parsingFlags() {\n return extend({}, getParsingFlags(this));\n }\n\n function invalidAt() {\n return getParsingFlags(this).overflow;\n }\n\n function creationData() {\n return {\n input: this._i,\n format: this._f,\n locale: this._locale,\n isUTC: this._isUTC,\n strict: this._strict,\n };\n }\n\n addFormatToken('N', 0, 0, 'eraAbbr');\n addFormatToken('NN', 0, 0, 'eraAbbr');\n addFormatToken('NNN', 0, 0, 'eraAbbr');\n addFormatToken('NNNN', 0, 0, 'eraName');\n addFormatToken('NNNNN', 0, 0, 'eraNarrow');\n\n addFormatToken('y', ['y', 1], 'yo', 'eraYear');\n addFormatToken('y', ['yy', 2], 0, 'eraYear');\n addFormatToken('y', ['yyy', 3], 0, 'eraYear');\n addFormatToken('y', ['yyyy', 4], 0, 'eraYear');\n\n addRegexToken('N', matchEraAbbr);\n addRegexToken('NN', matchEraAbbr);\n addRegexToken('NNN', matchEraAbbr);\n addRegexToken('NNNN', matchEraName);\n addRegexToken('NNNNN', matchEraNarrow);\n\n addParseToken(\n ['N', 'NN', 'NNN', 'NNNN', 'NNNNN'],\n function (input, array, config, token) {\n var era = config._locale.erasParse(input, token, config._strict);\n if (era) {\n getParsingFlags(config).era = era;\n } else {\n getParsingFlags(config).invalidEra = input;\n }\n }\n );\n\n addRegexToken('y', matchUnsigned);\n addRegexToken('yy', matchUnsigned);\n addRegexToken('yyy', matchUnsigned);\n addRegexToken('yyyy', matchUnsigned);\n addRegexToken('yo', matchEraYearOrdinal);\n\n addParseToken(['y', 'yy', 'yyy', 'yyyy'], YEAR);\n addParseToken(['yo'], function (input, array, config, token) {\n var match;\n if (config._locale._eraYearOrdinalRegex) {\n match = input.match(config._locale._eraYearOrdinalRegex);\n }\n\n if (config._locale.eraYearOrdinalParse) {\n array[YEAR] = config._locale.eraYearOrdinalParse(input, match);\n } else {\n array[YEAR] = parseInt(input, 10);\n }\n });\n\n function localeEras(m, format) {\n var i,\n l,\n date,\n eras = this._eras || getLocale('en')._eras;\n for (i = 0, l = eras.length; i < l; ++i) {\n switch (typeof eras[i].since) {\n case 'string':\n // truncate time\n date = hooks(eras[i].since).startOf('day');\n eras[i].since = date.valueOf();\n break;\n }\n\n switch (typeof eras[i].until) {\n case 'undefined':\n eras[i].until = +Infinity;\n break;\n case 'string':\n // truncate time\n date = hooks(eras[i].until).startOf('day').valueOf();\n eras[i].until = date.valueOf();\n break;\n }\n }\n return eras;\n }\n\n function localeErasParse(eraName, format, strict) {\n var i,\n l,\n eras = this.eras(),\n name,\n abbr,\n narrow;\n eraName = eraName.toUpperCase();\n\n for (i = 0, l = eras.length; i < l; ++i) {\n name = eras[i].name.toUpperCase();\n abbr = eras[i].abbr.toUpperCase();\n narrow = eras[i].narrow.toUpperCase();\n\n if (strict) {\n switch (format) {\n case 'N':\n case 'NN':\n case 'NNN':\n if (abbr === eraName) {\n return eras[i];\n }\n break;\n\n case 'NNNN':\n if (name === eraName) {\n return eras[i];\n }\n break;\n\n case 'NNNNN':\n if (narrow === eraName) {\n return eras[i];\n }\n break;\n }\n } else if ([name, abbr, narrow].indexOf(eraName) >= 0) {\n return eras[i];\n }\n }\n }\n\n function localeErasConvertYear(era, year) {\n var dir = era.since <= era.until ? +1 : -1;\n if (year === undefined) {\n return hooks(era.since).year();\n } else {\n return hooks(era.since).year() + (year - era.offset) * dir;\n }\n }\n\n function getEraName() {\n var i,\n l,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (eras[i].since <= val && val <= eras[i].until) {\n return eras[i].name;\n }\n if (eras[i].until <= val && val <= eras[i].since) {\n return eras[i].name;\n }\n }\n\n return '';\n }\n\n function getEraNarrow() {\n var i,\n l,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (eras[i].since <= val && val <= eras[i].until) {\n return eras[i].narrow;\n }\n if (eras[i].until <= val && val <= eras[i].since) {\n return eras[i].narrow;\n }\n }\n\n return '';\n }\n\n function getEraAbbr() {\n var i,\n l,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (eras[i].since <= val && val <= eras[i].until) {\n return eras[i].abbr;\n }\n if (eras[i].until <= val && val <= eras[i].since) {\n return eras[i].abbr;\n }\n }\n\n return '';\n }\n\n function getEraYear() {\n var i,\n l,\n dir,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n dir = eras[i].since <= eras[i].until ? +1 : -1;\n\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (\n (eras[i].since <= val && val <= eras[i].until) ||\n (eras[i].until <= val && val <= eras[i].since)\n ) {\n return (\n (this.year() - hooks(eras[i].since).year()) * dir +\n eras[i].offset\n );\n }\n }\n\n return this.year();\n }\n\n function erasNameRegex(isStrict) {\n if (!hasOwnProp(this, '_erasNameRegex')) {\n computeErasParse.call(this);\n }\n return isStrict ? this._erasNameRegex : this._erasRegex;\n }\n\n function erasAbbrRegex(isStrict) {\n if (!hasOwnProp(this, '_erasAbbrRegex')) {\n computeErasParse.call(this);\n }\n return isStrict ? this._erasAbbrRegex : this._erasRegex;\n }\n\n function erasNarrowRegex(isStrict) {\n if (!hasOwnProp(this, '_erasNarrowRegex')) {\n computeErasParse.call(this);\n }\n return isStrict ? this._erasNarrowRegex : this._erasRegex;\n }\n\n function matchEraAbbr(isStrict, locale) {\n return locale.erasAbbrRegex(isStrict);\n }\n\n function matchEraName(isStrict, locale) {\n return locale.erasNameRegex(isStrict);\n }\n\n function matchEraNarrow(isStrict, locale) {\n return locale.erasNarrowRegex(isStrict);\n }\n\n function matchEraYearOrdinal(isStrict, locale) {\n return locale._eraYearOrdinalRegex || matchUnsigned;\n }\n\n function computeErasParse() {\n var abbrPieces = [],\n namePieces = [],\n narrowPieces = [],\n mixedPieces = [],\n i,\n l,\n eras = this.eras();\n\n for (i = 0, l = eras.length; i < l; ++i) {\n namePieces.push(regexEscape(eras[i].name));\n abbrPieces.push(regexEscape(eras[i].abbr));\n narrowPieces.push(regexEscape(eras[i].narrow));\n\n mixedPieces.push(regexEscape(eras[i].name));\n mixedPieces.push(regexEscape(eras[i].abbr));\n mixedPieces.push(regexEscape(eras[i].narrow));\n }\n\n this._erasRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._erasNameRegex = new RegExp('^(' + namePieces.join('|') + ')', 'i');\n this._erasAbbrRegex = new RegExp('^(' + abbrPieces.join('|') + ')', 'i');\n this._erasNarrowRegex = new RegExp(\n '^(' + narrowPieces.join('|') + ')',\n 'i'\n );\n }\n\n // FORMATTING\n\n addFormatToken(0, ['gg', 2], 0, function () {\n return this.weekYear() % 100;\n });\n\n addFormatToken(0, ['GG', 2], 0, function () {\n return this.isoWeekYear() % 100;\n });\n\n function addWeekYearFormatToken(token, getter) {\n addFormatToken(0, [token, token.length], 0, getter);\n }\n\n addWeekYearFormatToken('gggg', 'weekYear');\n addWeekYearFormatToken('ggggg', 'weekYear');\n addWeekYearFormatToken('GGGG', 'isoWeekYear');\n addWeekYearFormatToken('GGGGG', 'isoWeekYear');\n\n // ALIASES\n\n addUnitAlias('weekYear', 'gg');\n addUnitAlias('isoWeekYear', 'GG');\n\n // PRIORITY\n\n addUnitPriority('weekYear', 1);\n addUnitPriority('isoWeekYear', 1);\n\n // PARSING\n\n addRegexToken('G', matchSigned);\n addRegexToken('g', matchSigned);\n addRegexToken('GG', match1to2, match2);\n addRegexToken('gg', match1to2, match2);\n addRegexToken('GGGG', match1to4, match4);\n addRegexToken('gggg', match1to4, match4);\n addRegexToken('GGGGG', match1to6, match6);\n addRegexToken('ggggg', match1to6, match6);\n\n addWeekParseToken(\n ['gggg', 'ggggg', 'GGGG', 'GGGGG'],\n function (input, week, config, token) {\n week[token.substr(0, 2)] = toInt(input);\n }\n );\n\n addWeekParseToken(['gg', 'GG'], function (input, week, config, token) {\n week[token] = hooks.parseTwoDigitYear(input);\n });\n\n // MOMENTS\n\n function getSetWeekYear(input) {\n return getSetWeekYearHelper.call(\n this,\n input,\n this.week(),\n this.weekday(),\n this.localeData()._week.dow,\n this.localeData()._week.doy\n );\n }\n\n function getSetISOWeekYear(input) {\n return getSetWeekYearHelper.call(\n this,\n input,\n this.isoWeek(),\n this.isoWeekday(),\n 1,\n 4\n );\n }\n\n function getISOWeeksInYear() {\n return weeksInYear(this.year(), 1, 4);\n }\n\n function getISOWeeksInISOWeekYear() {\n return weeksInYear(this.isoWeekYear(), 1, 4);\n }\n\n function getWeeksInYear() {\n var weekInfo = this.localeData()._week;\n return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);\n }\n\n function getWeeksInWeekYear() {\n var weekInfo = this.localeData()._week;\n return weeksInYear(this.weekYear(), weekInfo.dow, weekInfo.doy);\n }\n\n function getSetWeekYearHelper(input, week, weekday, dow, doy) {\n var weeksTarget;\n if (input == null) {\n return weekOfYear(this, dow, doy).year;\n } else {\n weeksTarget = weeksInYear(input, dow, doy);\n if (week > weeksTarget) {\n week = weeksTarget;\n }\n return setWeekAll.call(this, input, week, weekday, dow, doy);\n }\n }\n\n function setWeekAll(weekYear, week, weekday, dow, doy) {\n var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),\n date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);\n\n this.year(date.getUTCFullYear());\n this.month(date.getUTCMonth());\n this.date(date.getUTCDate());\n return this;\n }\n\n // FORMATTING\n\n addFormatToken('Q', 0, 'Qo', 'quarter');\n\n // ALIASES\n\n addUnitAlias('quarter', 'Q');\n\n // PRIORITY\n\n addUnitPriority('quarter', 7);\n\n // PARSING\n\n addRegexToken('Q', match1);\n addParseToken('Q', function (input, array) {\n array[MONTH] = (toInt(input) - 1) * 3;\n });\n\n // MOMENTS\n\n function getSetQuarter(input) {\n return input == null\n ? Math.ceil((this.month() + 1) / 3)\n : this.month((input - 1) * 3 + (this.month() % 3));\n }\n\n // FORMATTING\n\n addFormatToken('D', ['DD', 2], 'Do', 'date');\n\n // ALIASES\n\n addUnitAlias('date', 'D');\n\n // PRIORITY\n addUnitPriority('date', 9);\n\n // PARSING\n\n addRegexToken('D', match1to2);\n addRegexToken('DD', match1to2, match2);\n addRegexToken('Do', function (isStrict, locale) {\n // TODO: Remove \"ordinalParse\" fallback in next major release.\n return isStrict\n ? locale._dayOfMonthOrdinalParse || locale._ordinalParse\n : locale._dayOfMonthOrdinalParseLenient;\n });\n\n addParseToken(['D', 'DD'], DATE);\n addParseToken('Do', function (input, array) {\n array[DATE] = toInt(input.match(match1to2)[0]);\n });\n\n // MOMENTS\n\n var getSetDayOfMonth = makeGetSet('Date', true);\n\n // FORMATTING\n\n addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');\n\n // ALIASES\n\n addUnitAlias('dayOfYear', 'DDD');\n\n // PRIORITY\n addUnitPriority('dayOfYear', 4);\n\n // PARSING\n\n addRegexToken('DDD', match1to3);\n addRegexToken('DDDD', match3);\n addParseToken(['DDD', 'DDDD'], function (input, array, config) {\n config._dayOfYear = toInt(input);\n });\n\n // HELPERS\n\n // MOMENTS\n\n function getSetDayOfYear(input) {\n var dayOfYear =\n Math.round(\n (this.clone().startOf('day') - this.clone().startOf('year')) / 864e5\n ) + 1;\n return input == null ? dayOfYear : this.add(input - dayOfYear, 'd');\n }\n\n // FORMATTING\n\n addFormatToken('m', ['mm', 2], 0, 'minute');\n\n // ALIASES\n\n addUnitAlias('minute', 'm');\n\n // PRIORITY\n\n addUnitPriority('minute', 14);\n\n // PARSING\n\n addRegexToken('m', match1to2);\n addRegexToken('mm', match1to2, match2);\n addParseToken(['m', 'mm'], MINUTE);\n\n // MOMENTS\n\n var getSetMinute = makeGetSet('Minutes', false);\n\n // FORMATTING\n\n addFormatToken('s', ['ss', 2], 0, 'second');\n\n // ALIASES\n\n addUnitAlias('second', 's');\n\n // PRIORITY\n\n addUnitPriority('second', 15);\n\n // PARSING\n\n addRegexToken('s', match1to2);\n addRegexToken('ss', match1to2, match2);\n addParseToken(['s', 'ss'], SECOND);\n\n // MOMENTS\n\n var getSetSecond = makeGetSet('Seconds', false);\n\n // FORMATTING\n\n addFormatToken('S', 0, 0, function () {\n return ~~(this.millisecond() / 100);\n });\n\n addFormatToken(0, ['SS', 2], 0, function () {\n return ~~(this.millisecond() / 10);\n });\n\n addFormatToken(0, ['SSS', 3], 0, 'millisecond');\n addFormatToken(0, ['SSSS', 4], 0, function () {\n return this.millisecond() * 10;\n });\n addFormatToken(0, ['SSSSS', 5], 0, function () {\n return this.millisecond() * 100;\n });\n addFormatToken(0, ['SSSSSS', 6], 0, function () {\n return this.millisecond() * 1000;\n });\n addFormatToken(0, ['SSSSSSS', 7], 0, function () {\n return this.millisecond() * 10000;\n });\n addFormatToken(0, ['SSSSSSSS', 8], 0, function () {\n return this.millisecond() * 100000;\n });\n addFormatToken(0, ['SSSSSSSSS', 9], 0, function () {\n return this.millisecond() * 1000000;\n });\n\n // ALIASES\n\n addUnitAlias('millisecond', 'ms');\n\n // PRIORITY\n\n addUnitPriority('millisecond', 16);\n\n // PARSING\n\n addRegexToken('S', match1to3, match1);\n addRegexToken('SS', match1to3, match2);\n addRegexToken('SSS', match1to3, match3);\n\n var token, getSetMillisecond;\n for (token = 'SSSS'; token.length <= 9; token += 'S') {\n addRegexToken(token, matchUnsigned);\n }\n\n function parseMs(input, array) {\n array[MILLISECOND] = toInt(('0.' + input) * 1000);\n }\n\n for (token = 'S'; token.length <= 9; token += 'S') {\n addParseToken(token, parseMs);\n }\n\n getSetMillisecond = makeGetSet('Milliseconds', false);\n\n // FORMATTING\n\n addFormatToken('z', 0, 0, 'zoneAbbr');\n addFormatToken('zz', 0, 0, 'zoneName');\n\n // MOMENTS\n\n function getZoneAbbr() {\n return this._isUTC ? 'UTC' : '';\n }\n\n function getZoneName() {\n return this._isUTC ? 'Coordinated Universal Time' : '';\n }\n\n var proto = Moment.prototype;\n\n proto.add = add;\n proto.calendar = calendar$1;\n proto.clone = clone;\n proto.diff = diff;\n proto.endOf = endOf;\n proto.format = format;\n proto.from = from;\n proto.fromNow = fromNow;\n proto.to = to;\n proto.toNow = toNow;\n proto.get = stringGet;\n proto.invalidAt = invalidAt;\n proto.isAfter = isAfter;\n proto.isBefore = isBefore;\n proto.isBetween = isBetween;\n proto.isSame = isSame;\n proto.isSameOrAfter = isSameOrAfter;\n proto.isSameOrBefore = isSameOrBefore;\n proto.isValid = isValid$2;\n proto.lang = lang;\n proto.locale = locale;\n proto.localeData = localeData;\n proto.max = prototypeMax;\n proto.min = prototypeMin;\n proto.parsingFlags = parsingFlags;\n proto.set = stringSet;\n proto.startOf = startOf;\n proto.subtract = subtract;\n proto.toArray = toArray;\n proto.toObject = toObject;\n proto.toDate = toDate;\n proto.toISOString = toISOString;\n proto.inspect = inspect;\n if (typeof Symbol !== 'undefined' && Symbol.for != null) {\n proto[Symbol.for('nodejs.util.inspect.custom')] = function () {\n return 'Moment<' + this.format() + '>';\n };\n }\n proto.toJSON = toJSON;\n proto.toString = toString;\n proto.unix = unix;\n proto.valueOf = valueOf;\n proto.creationData = creationData;\n proto.eraName = getEraName;\n proto.eraNarrow = getEraNarrow;\n proto.eraAbbr = getEraAbbr;\n proto.eraYear = getEraYear;\n proto.year = getSetYear;\n proto.isLeapYear = getIsLeapYear;\n proto.weekYear = getSetWeekYear;\n proto.isoWeekYear = getSetISOWeekYear;\n proto.quarter = proto.quarters = getSetQuarter;\n proto.month = getSetMonth;\n proto.daysInMonth = getDaysInMonth;\n proto.week = proto.weeks = getSetWeek;\n proto.isoWeek = proto.isoWeeks = getSetISOWeek;\n proto.weeksInYear = getWeeksInYear;\n proto.weeksInWeekYear = getWeeksInWeekYear;\n proto.isoWeeksInYear = getISOWeeksInYear;\n proto.isoWeeksInISOWeekYear = getISOWeeksInISOWeekYear;\n proto.date = getSetDayOfMonth;\n proto.day = proto.days = getSetDayOfWeek;\n proto.weekday = getSetLocaleDayOfWeek;\n proto.isoWeekday = getSetISODayOfWeek;\n proto.dayOfYear = getSetDayOfYear;\n proto.hour = proto.hours = getSetHour;\n proto.minute = proto.minutes = getSetMinute;\n proto.second = proto.seconds = getSetSecond;\n proto.millisecond = proto.milliseconds = getSetMillisecond;\n proto.utcOffset = getSetOffset;\n proto.utc = setOffsetToUTC;\n proto.local = setOffsetToLocal;\n proto.parseZone = setOffsetToParsedOffset;\n proto.hasAlignedHourOffset = hasAlignedHourOffset;\n proto.isDST = isDaylightSavingTime;\n proto.isLocal = isLocal;\n proto.isUtcOffset = isUtcOffset;\n proto.isUtc = isUtc;\n proto.isUTC = isUtc;\n proto.zoneAbbr = getZoneAbbr;\n proto.zoneName = getZoneName;\n proto.dates = deprecate(\n 'dates accessor is deprecated. Use date instead.',\n getSetDayOfMonth\n );\n proto.months = deprecate(\n 'months accessor is deprecated. Use month instead',\n getSetMonth\n );\n proto.years = deprecate(\n 'years accessor is deprecated. Use year instead',\n getSetYear\n );\n proto.zone = deprecate(\n 'moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/',\n getSetZone\n );\n proto.isDSTShifted = deprecate(\n 'isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information',\n isDaylightSavingTimeShifted\n );\n\n function createUnix(input) {\n return createLocal(input * 1000);\n }\n\n function createInZone() {\n return createLocal.apply(null, arguments).parseZone();\n }\n\n function preParsePostFormat(string) {\n return string;\n }\n\n var proto$1 = Locale.prototype;\n\n proto$1.calendar = calendar;\n proto$1.longDateFormat = longDateFormat;\n proto$1.invalidDate = invalidDate;\n proto$1.ordinal = ordinal;\n proto$1.preparse = preParsePostFormat;\n proto$1.postformat = preParsePostFormat;\n proto$1.relativeTime = relativeTime;\n proto$1.pastFuture = pastFuture;\n proto$1.set = set;\n proto$1.eras = localeEras;\n proto$1.erasParse = localeErasParse;\n proto$1.erasConvertYear = localeErasConvertYear;\n proto$1.erasAbbrRegex = erasAbbrRegex;\n proto$1.erasNameRegex = erasNameRegex;\n proto$1.erasNarrowRegex = erasNarrowRegex;\n\n proto$1.months = localeMonths;\n proto$1.monthsShort = localeMonthsShort;\n proto$1.monthsParse = localeMonthsParse;\n proto$1.monthsRegex = monthsRegex;\n proto$1.monthsShortRegex = monthsShortRegex;\n proto$1.week = localeWeek;\n proto$1.firstDayOfYear = localeFirstDayOfYear;\n proto$1.firstDayOfWeek = localeFirstDayOfWeek;\n\n proto$1.weekdays = localeWeekdays;\n proto$1.weekdaysMin = localeWeekdaysMin;\n proto$1.weekdaysShort = localeWeekdaysShort;\n proto$1.weekdaysParse = localeWeekdaysParse;\n\n proto$1.weekdaysRegex = weekdaysRegex;\n proto$1.weekdaysShortRegex = weekdaysShortRegex;\n proto$1.weekdaysMinRegex = weekdaysMinRegex;\n\n proto$1.isPM = localeIsPM;\n proto$1.meridiem = localeMeridiem;\n\n function get$1(format, index, field, setter) {\n var locale = getLocale(),\n utc = createUTC().set(setter, index);\n return locale[field](utc, format);\n }\n\n function listMonthsImpl(format, index, field) {\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n\n if (index != null) {\n return get$1(format, index, field, 'month');\n }\n\n var i,\n out = [];\n for (i = 0; i < 12; i++) {\n out[i] = get$1(format, i, field, 'month');\n }\n return out;\n }\n\n // ()\n // (5)\n // (fmt, 5)\n // (fmt)\n // (true)\n // (true, 5)\n // (true, fmt, 5)\n // (true, fmt)\n function listWeekdaysImpl(localeSorted, format, index, field) {\n if (typeof localeSorted === 'boolean') {\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n } else {\n format = localeSorted;\n index = format;\n localeSorted = false;\n\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n }\n\n var locale = getLocale(),\n shift = localeSorted ? locale._week.dow : 0,\n i,\n out = [];\n\n if (index != null) {\n return get$1(format, (index + shift) % 7, field, 'day');\n }\n\n for (i = 0; i < 7; i++) {\n out[i] = get$1(format, (i + shift) % 7, field, 'day');\n }\n return out;\n }\n\n function listMonths(format, index) {\n return listMonthsImpl(format, index, 'months');\n }\n\n function listMonthsShort(format, index) {\n return listMonthsImpl(format, index, 'monthsShort');\n }\n\n function listWeekdays(localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdays');\n }\n\n function listWeekdaysShort(localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');\n }\n\n function listWeekdaysMin(localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');\n }\n\n getSetGlobalLocale('en', {\n eras: [\n {\n since: '0001-01-01',\n until: +Infinity,\n offset: 1,\n name: 'Anno Domini',\n narrow: 'AD',\n abbr: 'AD',\n },\n {\n since: '0000-12-31',\n until: -Infinity,\n offset: 1,\n name: 'Before Christ',\n narrow: 'BC',\n abbr: 'BC',\n },\n ],\n dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n ordinal: function (number) {\n var b = number % 10,\n output =\n toInt((number % 100) / 10) === 1\n ? 'th'\n : b === 1\n ? 'st'\n : b === 2\n ? 'nd'\n : b === 3\n ? 'rd'\n : 'th';\n return number + output;\n },\n });\n\n // Side effect imports\n\n hooks.lang = deprecate(\n 'moment.lang is deprecated. Use moment.locale instead.',\n getSetGlobalLocale\n );\n hooks.langData = deprecate(\n 'moment.langData is deprecated. Use moment.localeData instead.',\n getLocale\n );\n\n var mathAbs = Math.abs;\n\n function abs() {\n var data = this._data;\n\n this._milliseconds = mathAbs(this._milliseconds);\n this._days = mathAbs(this._days);\n this._months = mathAbs(this._months);\n\n data.milliseconds = mathAbs(data.milliseconds);\n data.seconds = mathAbs(data.seconds);\n data.minutes = mathAbs(data.minutes);\n data.hours = mathAbs(data.hours);\n data.months = mathAbs(data.months);\n data.years = mathAbs(data.years);\n\n return this;\n }\n\n function addSubtract$1(duration, input, value, direction) {\n var other = createDuration(input, value);\n\n duration._milliseconds += direction * other._milliseconds;\n duration._days += direction * other._days;\n duration._months += direction * other._months;\n\n return duration._bubble();\n }\n\n // supports only 2.0-style add(1, 's') or add(duration)\n function add$1(input, value) {\n return addSubtract$1(this, input, value, 1);\n }\n\n // supports only 2.0-style subtract(1, 's') or subtract(duration)\n function subtract$1(input, value) {\n return addSubtract$1(this, input, value, -1);\n }\n\n function absCeil(number) {\n if (number < 0) {\n return Math.floor(number);\n } else {\n return Math.ceil(number);\n }\n }\n\n function bubble() {\n var milliseconds = this._milliseconds,\n days = this._days,\n months = this._months,\n data = this._data,\n seconds,\n minutes,\n hours,\n years,\n monthsFromDays;\n\n // if we have a mix of positive and negative values, bubble down first\n // check: https://github.com/moment/moment/issues/2166\n if (\n !(\n (milliseconds >= 0 && days >= 0 && months >= 0) ||\n (milliseconds <= 0 && days <= 0 && months <= 0)\n )\n ) {\n milliseconds += absCeil(monthsToDays(months) + days) * 864e5;\n days = 0;\n months = 0;\n }\n\n // The following code bubbles up values, see the tests for\n // examples of what that means.\n data.milliseconds = milliseconds % 1000;\n\n seconds = absFloor(milliseconds / 1000);\n data.seconds = seconds % 60;\n\n minutes = absFloor(seconds / 60);\n data.minutes = minutes % 60;\n\n hours = absFloor(minutes / 60);\n data.hours = hours % 24;\n\n days += absFloor(hours / 24);\n\n // convert days to months\n monthsFromDays = absFloor(daysToMonths(days));\n months += monthsFromDays;\n days -= absCeil(monthsToDays(monthsFromDays));\n\n // 12 months -> 1 year\n years = absFloor(months / 12);\n months %= 12;\n\n data.days = days;\n data.months = months;\n data.years = years;\n\n return this;\n }\n\n function daysToMonths(days) {\n // 400 years have 146097 days (taking into account leap year rules)\n // 400 years have 12 months === 4800\n return (days * 4800) / 146097;\n }\n\n function monthsToDays(months) {\n // the reverse of daysToMonths\n return (months * 146097) / 4800;\n }\n\n function as(units) {\n if (!this.isValid()) {\n return NaN;\n }\n var days,\n months,\n milliseconds = this._milliseconds;\n\n units = normalizeUnits(units);\n\n if (units === 'month' || units === 'quarter' || units === 'year') {\n days = this._days + milliseconds / 864e5;\n months = this._months + daysToMonths(days);\n switch (units) {\n case 'month':\n return months;\n case 'quarter':\n return months / 3;\n case 'year':\n return months / 12;\n }\n } else {\n // handle milliseconds separately because of floating point math errors (issue #1867)\n days = this._days + Math.round(monthsToDays(this._months));\n switch (units) {\n case 'week':\n return days / 7 + milliseconds / 6048e5;\n case 'day':\n return days + milliseconds / 864e5;\n case 'hour':\n return days * 24 + milliseconds / 36e5;\n case 'minute':\n return days * 1440 + milliseconds / 6e4;\n case 'second':\n return days * 86400 + milliseconds / 1000;\n // Math.floor prevents floating point math errors here\n case 'millisecond':\n return Math.floor(days * 864e5) + milliseconds;\n default:\n throw new Error('Unknown unit ' + units);\n }\n }\n }\n\n // TODO: Use this.as('ms')?\n function valueOf$1() {\n if (!this.isValid()) {\n return NaN;\n }\n return (\n this._milliseconds +\n this._days * 864e5 +\n (this._months % 12) * 2592e6 +\n toInt(this._months / 12) * 31536e6\n );\n }\n\n function makeAs(alias) {\n return function () {\n return this.as(alias);\n };\n }\n\n var asMilliseconds = makeAs('ms'),\n asSeconds = makeAs('s'),\n asMinutes = makeAs('m'),\n asHours = makeAs('h'),\n asDays = makeAs('d'),\n asWeeks = makeAs('w'),\n asMonths = makeAs('M'),\n asQuarters = makeAs('Q'),\n asYears = makeAs('y');\n\n function clone$1() {\n return createDuration(this);\n }\n\n function get$2(units) {\n units = normalizeUnits(units);\n return this.isValid() ? this[units + 's']() : NaN;\n }\n\n function makeGetter(name) {\n return function () {\n return this.isValid() ? this._data[name] : NaN;\n };\n }\n\n var milliseconds = makeGetter('milliseconds'),\n seconds = makeGetter('seconds'),\n minutes = makeGetter('minutes'),\n hours = makeGetter('hours'),\n days = makeGetter('days'),\n months = makeGetter('months'),\n years = makeGetter('years');\n\n function weeks() {\n return absFloor(this.days() / 7);\n }\n\n var round = Math.round,\n thresholds = {\n ss: 44, // a few seconds to seconds\n s: 45, // seconds to minute\n m: 45, // minutes to hour\n h: 22, // hours to day\n d: 26, // days to month/week\n w: null, // weeks to month\n M: 11, // months to year\n };\n\n // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize\n function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {\n return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);\n }\n\n function relativeTime$1(posNegDuration, withoutSuffix, thresholds, locale) {\n var duration = createDuration(posNegDuration).abs(),\n seconds = round(duration.as('s')),\n minutes = round(duration.as('m')),\n hours = round(duration.as('h')),\n days = round(duration.as('d')),\n months = round(duration.as('M')),\n weeks = round(duration.as('w')),\n years = round(duration.as('y')),\n a =\n (seconds <= thresholds.ss && ['s', seconds]) ||\n (seconds < thresholds.s && ['ss', seconds]) ||\n (minutes <= 1 && ['m']) ||\n (minutes < thresholds.m && ['mm', minutes]) ||\n (hours <= 1 && ['h']) ||\n (hours < thresholds.h && ['hh', hours]) ||\n (days <= 1 && ['d']) ||\n (days < thresholds.d && ['dd', days]);\n\n if (thresholds.w != null) {\n a =\n a ||\n (weeks <= 1 && ['w']) ||\n (weeks < thresholds.w && ['ww', weeks]);\n }\n a = a ||\n (months <= 1 && ['M']) ||\n (months < thresholds.M && ['MM', months]) ||\n (years <= 1 && ['y']) || ['yy', years];\n\n a[2] = withoutSuffix;\n a[3] = +posNegDuration > 0;\n a[4] = locale;\n return substituteTimeAgo.apply(null, a);\n }\n\n // This function allows you to set the rounding function for relative time strings\n function getSetRelativeTimeRounding(roundingFunction) {\n if (roundingFunction === undefined) {\n return round;\n }\n if (typeof roundingFunction === 'function') {\n round = roundingFunction;\n return true;\n }\n return false;\n }\n\n // This function allows you to set a threshold for relative time strings\n function getSetRelativeTimeThreshold(threshold, limit) {\n if (thresholds[threshold] === undefined) {\n return false;\n }\n if (limit === undefined) {\n return thresholds[threshold];\n }\n thresholds[threshold] = limit;\n if (threshold === 's') {\n thresholds.ss = limit - 1;\n }\n return true;\n }\n\n function humanize(argWithSuffix, argThresholds) {\n if (!this.isValid()) {\n return this.localeData().invalidDate();\n }\n\n var withSuffix = false,\n th = thresholds,\n locale,\n output;\n\n if (typeof argWithSuffix === 'object') {\n argThresholds = argWithSuffix;\n argWithSuffix = false;\n }\n if (typeof argWithSuffix === 'boolean') {\n withSuffix = argWithSuffix;\n }\n if (typeof argThresholds === 'object') {\n th = Object.assign({}, thresholds, argThresholds);\n if (argThresholds.s != null && argThresholds.ss == null) {\n th.ss = argThresholds.s - 1;\n }\n }\n\n locale = this.localeData();\n output = relativeTime$1(this, !withSuffix, th, locale);\n\n if (withSuffix) {\n output = locale.pastFuture(+this, output);\n }\n\n return locale.postformat(output);\n }\n\n var abs$1 = Math.abs;\n\n function sign(x) {\n return (x > 0) - (x < 0) || +x;\n }\n\n function toISOString$1() {\n // for ISO strings we do not use the normal bubbling rules:\n // * milliseconds bubble up until they become hours\n // * days do not bubble at all\n // * months bubble up until they become years\n // This is because there is no context-free conversion between hours and days\n // (think of clock changes)\n // and also not between days and months (28-31 days per month)\n if (!this.isValid()) {\n return this.localeData().invalidDate();\n }\n\n var seconds = abs$1(this._milliseconds) / 1000,\n days = abs$1(this._days),\n months = abs$1(this._months),\n minutes,\n hours,\n years,\n s,\n total = this.asSeconds(),\n totalSign,\n ymSign,\n daysSign,\n hmsSign;\n\n if (!total) {\n // this is the same as C#'s (Noda) and python (isodate)...\n // but not other JS (goog.date)\n return 'P0D';\n }\n\n // 3600 seconds -> 60 minutes -> 1 hour\n minutes = absFloor(seconds / 60);\n hours = absFloor(minutes / 60);\n seconds %= 60;\n minutes %= 60;\n\n // 12 months -> 1 year\n years = absFloor(months / 12);\n months %= 12;\n\n // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js\n s = seconds ? seconds.toFixed(3).replace(/\\.?0+$/, '') : '';\n\n totalSign = total < 0 ? '-' : '';\n ymSign = sign(this._months) !== sign(total) ? '-' : '';\n daysSign = sign(this._days) !== sign(total) ? '-' : '';\n hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : '';\n\n return (\n totalSign +\n 'P' +\n (years ? ymSign + years + 'Y' : '') +\n (months ? ymSign + months + 'M' : '') +\n (days ? daysSign + days + 'D' : '') +\n (hours || minutes || seconds ? 'T' : '') +\n (hours ? hmsSign + hours + 'H' : '') +\n (minutes ? hmsSign + minutes + 'M' : '') +\n (seconds ? hmsSign + s + 'S' : '')\n );\n }\n\n var proto$2 = Duration.prototype;\n\n proto$2.isValid = isValid$1;\n proto$2.abs = abs;\n proto$2.add = add$1;\n proto$2.subtract = subtract$1;\n proto$2.as = as;\n proto$2.asMilliseconds = asMilliseconds;\n proto$2.asSeconds = asSeconds;\n proto$2.asMinutes = asMinutes;\n proto$2.asHours = asHours;\n proto$2.asDays = asDays;\n proto$2.asWeeks = asWeeks;\n proto$2.asMonths = asMonths;\n proto$2.asQuarters = asQuarters;\n proto$2.asYears = asYears;\n proto$2.valueOf = valueOf$1;\n proto$2._bubble = bubble;\n proto$2.clone = clone$1;\n proto$2.get = get$2;\n proto$2.milliseconds = milliseconds;\n proto$2.seconds = seconds;\n proto$2.minutes = minutes;\n proto$2.hours = hours;\n proto$2.days = days;\n proto$2.weeks = weeks;\n proto$2.months = months;\n proto$2.years = years;\n proto$2.humanize = humanize;\n proto$2.toISOString = toISOString$1;\n proto$2.toString = toISOString$1;\n proto$2.toJSON = toISOString$1;\n proto$2.locale = locale;\n proto$2.localeData = localeData;\n\n proto$2.toIsoString = deprecate(\n 'toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)',\n toISOString$1\n );\n proto$2.lang = lang;\n\n // FORMATTING\n\n addFormatToken('X', 0, 0, 'unix');\n addFormatToken('x', 0, 0, 'valueOf');\n\n // PARSING\n\n addRegexToken('x', matchSigned);\n addRegexToken('X', matchTimestamp);\n addParseToken('X', function (input, array, config) {\n config._d = new Date(parseFloat(input) * 1000);\n });\n addParseToken('x', function (input, array, config) {\n config._d = new Date(toInt(input));\n });\n\n //! moment.js\n\n hooks.version = '2.29.4';\n\n setHookCallback(createLocal);\n\n hooks.fn = proto;\n hooks.min = min;\n hooks.max = max;\n hooks.now = now;\n hooks.utc = createUTC;\n hooks.unix = createUnix;\n hooks.months = listMonths;\n hooks.isDate = isDate;\n hooks.locale = getSetGlobalLocale;\n hooks.invalid = createInvalid;\n hooks.duration = createDuration;\n hooks.isMoment = isMoment;\n hooks.weekdays = listWeekdays;\n hooks.parseZone = createInZone;\n hooks.localeData = getLocale;\n hooks.isDuration = isDuration;\n hooks.monthsShort = listMonthsShort;\n hooks.weekdaysMin = listWeekdaysMin;\n hooks.defineLocale = defineLocale;\n hooks.updateLocale = updateLocale;\n hooks.locales = listLocales;\n hooks.weekdaysShort = listWeekdaysShort;\n hooks.normalizeUnits = normalizeUnits;\n hooks.relativeTimeRounding = getSetRelativeTimeRounding;\n hooks.relativeTimeThreshold = getSetRelativeTimeThreshold;\n hooks.calendarFormat = getCalendarFormat;\n hooks.prototype = proto;\n\n // currently HTML5 input type only supports 24-hour formats\n hooks.HTML5_FMT = {\n DATETIME_LOCAL: 'YYYY-MM-DDTHH:mm', // \n DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss', // \n DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS', // \n DATE: 'YYYY-MM-DD', // \n TIME: 'HH:mm', // \n TIME_SECONDS: 'HH:mm:ss', // \n TIME_MS: 'HH:mm:ss.SSS', // \n WEEK: 'GGGG-[W]WW', // \n MONTH: 'YYYY-MM', // \n };\n\n return hooks;\n\n})));\n","// Exports the \"advlist\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/advlist')\n// ES2015:\n// import 'tinymce/plugins/advlist'\nrequire('./plugin.js');","// Exports the \"link\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/link')\n// ES2015:\n// import 'tinymce/plugins/link'\nrequire('./plugin.js');","//! moment.js locale configuration\n//! locale : Hebrew [he]\n//! author : Tomer Cohen : https://github.com/tomer\n//! author : Moshe Simantov : https://github.com/DevelopmentIL\n//! author : Tal Ater : https://github.com/TalAter\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var he = moment.defineLocale('he', {\n months: 'ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר'.split(\n '_'\n ),\n monthsShort:\n 'ינו׳_פבר׳_מרץ_אפר׳_מאי_יוני_יולי_אוג׳_ספט׳_אוק׳_נוב׳_דצמ׳'.split('_'),\n weekdays: 'ראשון_שני_שלישי_רביעי_חמישי_שישי_שבת'.split('_'),\n weekdaysShort: 'א׳_ב׳_ג׳_ד׳_ה׳_ו׳_ש׳'.split('_'),\n weekdaysMin: 'א_ב_ג_ד_ה_ו_ש'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D [ב]MMMM YYYY',\n LLL: 'D [ב]MMMM YYYY HH:mm',\n LLLL: 'dddd, D [ב]MMMM YYYY HH:mm',\n l: 'D/M/YYYY',\n ll: 'D MMM YYYY',\n lll: 'D MMM YYYY HH:mm',\n llll: 'ddd, D MMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[היום ב־]LT',\n nextDay: '[מחר ב־]LT',\n nextWeek: 'dddd [בשעה] LT',\n lastDay: '[אתמול ב־]LT',\n lastWeek: '[ביום] dddd [האחרון בשעה] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'בעוד %s',\n past: 'לפני %s',\n s: 'מספר שניות',\n ss: '%d שניות',\n m: 'דקה',\n mm: '%d דקות',\n h: 'שעה',\n hh: function (number) {\n if (number === 2) {\n return 'שעתיים';\n }\n return number + ' שעות';\n },\n d: 'יום',\n dd: function (number) {\n if (number === 2) {\n return 'יומיים';\n }\n return number + ' ימים';\n },\n M: 'חודש',\n MM: function (number) {\n if (number === 2) {\n return 'חודשיים';\n }\n return number + ' חודשים';\n },\n y: 'שנה',\n yy: function (number) {\n if (number === 2) {\n return 'שנתיים';\n } else if (number % 10 === 0 && number !== 10) {\n return number + ' שנה';\n }\n return number + ' שנים';\n },\n },\n meridiemParse:\n /אחה\"צ|לפנה\"צ|אחרי הצהריים|לפני הצהריים|לפנות בוקר|בבוקר|בערב/i,\n isPM: function (input) {\n return /^(אחה\"צ|אחרי הצהריים|בערב)$/.test(input);\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 5) {\n return 'לפנות בוקר';\n } else if (hour < 10) {\n return 'בבוקר';\n } else if (hour < 12) {\n return isLower ? 'לפנה\"צ' : 'לפני הצהריים';\n } else if (hour < 18) {\n return isLower ? 'אחה\"צ' : 'אחרי הצהריים';\n } else {\n return 'בערב';\n }\n },\n });\n\n return he;\n\n})));\n","(function () {\nvar table = (function (domGlobals) {\n 'use strict';\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var noop = function () {\n };\n var compose = function (fa, fb) {\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return fa(fb.apply(null, args));\n };\n };\n var constant = function (value) {\n return function () {\n return value;\n };\n };\n var identity = function (x) {\n return x;\n };\n function curry(fn) {\n var initialArgs = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n initialArgs[_i - 1] = arguments[_i];\n }\n return function () {\n var restArgs = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n restArgs[_i] = arguments[_i];\n }\n var all = initialArgs.concat(restArgs);\n return fn.apply(null, all);\n };\n }\n var not = function (f) {\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return !f.apply(null, args);\n };\n };\n var die = function (msg) {\n return function () {\n throw new Error(msg);\n };\n };\n var never = constant(false);\n var always = constant(true);\n\n var none = function () {\n return NONE;\n };\n var NONE = function () {\n var eq = function (o) {\n return o.isNone();\n };\n var call = function (thunk) {\n return thunk();\n };\n var id = function (n) {\n return n;\n };\n var me = {\n fold: function (n, s) {\n return n();\n },\n is: never,\n isSome: never,\n isNone: always,\n getOr: id,\n getOrThunk: call,\n getOrDie: function (msg) {\n throw new Error(msg || 'error: getOrDie called on none.');\n },\n getOrNull: constant(null),\n getOrUndefined: constant(undefined),\n or: id,\n orThunk: call,\n map: none,\n each: noop,\n bind: none,\n exists: never,\n forall: always,\n filter: none,\n equals: eq,\n equals_: eq,\n toArray: function () {\n return [];\n },\n toString: constant('none()')\n };\n if (Object.freeze) {\n Object.freeze(me);\n }\n return me;\n }();\n var some = function (a) {\n var constant_a = constant(a);\n var self = function () {\n return me;\n };\n var bind = function (f) {\n return f(a);\n };\n var me = {\n fold: function (n, s) {\n return s(a);\n },\n is: function (v) {\n return a === v;\n },\n isSome: always,\n isNone: never,\n getOr: constant_a,\n getOrThunk: constant_a,\n getOrDie: constant_a,\n getOrNull: constant_a,\n getOrUndefined: constant_a,\n or: self,\n orThunk: self,\n map: function (f) {\n return some(f(a));\n },\n each: function (f) {\n f(a);\n },\n bind: bind,\n exists: bind,\n forall: bind,\n filter: function (f) {\n return f(a) ? me : NONE;\n },\n toArray: function () {\n return [a];\n },\n toString: function () {\n return 'some(' + a + ')';\n },\n equals: function (o) {\n return o.is(a);\n },\n equals_: function (o, elementEq) {\n return o.fold(never, function (b) {\n return elementEq(a, b);\n });\n }\n };\n return me;\n };\n var from = function (value) {\n return value === null || value === undefined ? NONE : some(value);\n };\n var Option = {\n some: some,\n none: none,\n from: from\n };\n\n var typeOf = function (x) {\n if (x === null) {\n return 'null';\n }\n var t = typeof x;\n if (t === 'object' && (Array.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'Array')) {\n return 'array';\n }\n if (t === 'object' && (String.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'String')) {\n return 'string';\n }\n return t;\n };\n var isType = function (type) {\n return function (value) {\n return typeOf(value) === type;\n };\n };\n var isString = isType('string');\n var isArray = isType('array');\n var isBoolean = isType('boolean');\n var isFunction = isType('function');\n var isNumber = isType('number');\n\n var nativeSlice = Array.prototype.slice;\n var nativeIndexOf = Array.prototype.indexOf;\n var nativePush = Array.prototype.push;\n var rawIndexOf = function (ts, t) {\n return nativeIndexOf.call(ts, t);\n };\n var contains = function (xs, x) {\n return rawIndexOf(xs, x) > -1;\n };\n var exists = function (xs, pred) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n if (pred(x, i)) {\n return true;\n }\n }\n return false;\n };\n var map = function (xs, f) {\n var len = xs.length;\n var r = new Array(len);\n for (var i = 0; i < len; i++) {\n var x = xs[i];\n r[i] = f(x, i);\n }\n return r;\n };\n var each = function (xs, f) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n f(x, i);\n }\n };\n var eachr = function (xs, f) {\n for (var i = xs.length - 1; i >= 0; i--) {\n var x = xs[i];\n f(x, i);\n }\n };\n var filter = function (xs, pred) {\n var r = [];\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n if (pred(x, i)) {\n r.push(x);\n }\n }\n return r;\n };\n var foldr = function (xs, f, acc) {\n eachr(xs, function (x) {\n acc = f(acc, x);\n });\n return acc;\n };\n var foldl = function (xs, f, acc) {\n each(xs, function (x) {\n acc = f(acc, x);\n });\n return acc;\n };\n var find = function (xs, pred) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n if (pred(x, i)) {\n return Option.some(x);\n }\n }\n return Option.none();\n };\n var findIndex = function (xs, pred) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n if (pred(x, i)) {\n return Option.some(i);\n }\n }\n return Option.none();\n };\n var flatten = function (xs) {\n var r = [];\n for (var i = 0, len = xs.length; i < len; ++i) {\n if (!isArray(xs[i])) {\n throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs);\n }\n nativePush.apply(r, xs[i]);\n }\n return r;\n };\n var bind = function (xs, f) {\n var output = map(xs, f);\n return flatten(output);\n };\n var forall = function (xs, pred) {\n for (var i = 0, len = xs.length; i < len; ++i) {\n var x = xs[i];\n if (pred(x, i) !== true) {\n return false;\n }\n }\n return true;\n };\n var reverse = function (xs) {\n var r = nativeSlice.call(xs, 0);\n r.reverse();\n return r;\n };\n var last = function (xs) {\n return xs.length === 0 ? Option.none() : Option.some(xs[xs.length - 1]);\n };\n var from$1 = isFunction(Array.from) ? Array.from : function (x) {\n return nativeSlice.call(x);\n };\n\n var keys = Object.keys;\n var each$1 = function (obj, f) {\n var props = keys(obj);\n for (var k = 0, len = props.length; k < len; k++) {\n var i = props[k];\n var x = obj[i];\n f(x, i);\n }\n };\n var map$1 = function (obj, f) {\n return tupleMap(obj, function (x, i) {\n return {\n k: i,\n v: f(x, i)\n };\n });\n };\n var tupleMap = function (obj, f) {\n var r = {};\n each$1(obj, function (x, i) {\n var tuple = f(x, i);\n r[tuple.k] = tuple.v;\n });\n return r;\n };\n\n var Immutable = function () {\n var fields = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n fields[_i] = arguments[_i];\n }\n return function () {\n var values = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n values[_i] = arguments[_i];\n }\n if (fields.length !== values.length) {\n throw new Error('Wrong number of arguments to struct. Expected \"[' + fields.length + ']\", got ' + values.length + ' arguments');\n }\n var struct = {};\n each(fields, function (name, i) {\n struct[name] = constant(values[i]);\n });\n return struct;\n };\n };\n\n var sort = function (arr) {\n return arr.slice(0).sort();\n };\n var reqMessage = function (required, keys) {\n throw new Error('All required keys (' + sort(required).join(', ') + ') were not specified. Specified keys were: ' + sort(keys).join(', ') + '.');\n };\n var unsuppMessage = function (unsupported) {\n throw new Error('Unsupported keys for object: ' + sort(unsupported).join(', '));\n };\n var validateStrArr = function (label, array) {\n if (!isArray(array)) {\n throw new Error('The ' + label + ' fields must be an array. Was: ' + array + '.');\n }\n each(array, function (a) {\n if (!isString(a)) {\n throw new Error('The value ' + a + ' in the ' + label + ' fields was not a string.');\n }\n });\n };\n var invalidTypeMessage = function (incorrect, type) {\n throw new Error('All values need to be of type: ' + type + '. Keys (' + sort(incorrect).join(', ') + ') were not.');\n };\n var checkDupes = function (everything) {\n var sorted = sort(everything);\n var dupe = find(sorted, function (s, i) {\n return i < sorted.length - 1 && s === sorted[i + 1];\n });\n dupe.each(function (d) {\n throw new Error('The field: ' + d + ' occurs more than once in the combined fields: [' + sorted.join(', ') + '].');\n });\n };\n\n var MixedBag = function (required, optional) {\n var everything = required.concat(optional);\n if (everything.length === 0) {\n throw new Error('You must specify at least one required or optional field.');\n }\n validateStrArr('required', required);\n validateStrArr('optional', optional);\n checkDupes(everything);\n return function (obj) {\n var keys$1 = keys(obj);\n var allReqd = forall(required, function (req) {\n return contains(keys$1, req);\n });\n if (!allReqd) {\n reqMessage(required, keys$1);\n }\n var unsupported = filter(keys$1, function (key) {\n return !contains(everything, key);\n });\n if (unsupported.length > 0) {\n unsuppMessage(unsupported);\n }\n var r = {};\n each(required, function (req) {\n r[req] = constant(obj[req]);\n });\n each(optional, function (opt) {\n r[opt] = constant(Object.prototype.hasOwnProperty.call(obj, opt) ? Option.some(obj[opt]) : Option.none());\n });\n return r;\n };\n };\n\n var ATTRIBUTE = domGlobals.Node.ATTRIBUTE_NODE;\n var CDATA_SECTION = domGlobals.Node.CDATA_SECTION_NODE;\n var COMMENT = domGlobals.Node.COMMENT_NODE;\n var DOCUMENT = domGlobals.Node.DOCUMENT_NODE;\n var DOCUMENT_TYPE = domGlobals.Node.DOCUMENT_TYPE_NODE;\n var DOCUMENT_FRAGMENT = domGlobals.Node.DOCUMENT_FRAGMENT_NODE;\n var ELEMENT = domGlobals.Node.ELEMENT_NODE;\n var TEXT = domGlobals.Node.TEXT_NODE;\n var PROCESSING_INSTRUCTION = domGlobals.Node.PROCESSING_INSTRUCTION_NODE;\n var ENTITY_REFERENCE = domGlobals.Node.ENTITY_REFERENCE_NODE;\n var ENTITY = domGlobals.Node.ENTITY_NODE;\n var NOTATION = domGlobals.Node.NOTATION_NODE;\n\n var Global = typeof domGlobals.window !== 'undefined' ? domGlobals.window : Function('return this;')();\n\n var path = function (parts, scope) {\n var o = scope !== undefined && scope !== null ? scope : Global;\n for (var i = 0; i < parts.length && o !== undefined && o !== null; ++i) {\n o = o[parts[i]];\n }\n return o;\n };\n var resolve = function (p, scope) {\n var parts = p.split('.');\n return path(parts, scope);\n };\n\n var unsafe = function (name, scope) {\n return resolve(name, scope);\n };\n var getOrDie = function (name, scope) {\n var actual = unsafe(name, scope);\n if (actual === undefined || actual === null) {\n throw new Error(name + ' not available on this browser');\n }\n return actual;\n };\n var Global$1 = { getOrDie: getOrDie };\n\n var name = function (element) {\n var r = element.dom().nodeName;\n return r.toLowerCase();\n };\n var type = function (element) {\n return element.dom().nodeType;\n };\n var isType$1 = function (t) {\n return function (element) {\n return type(element) === t;\n };\n };\n var isComment = function (element) {\n return type(element) === COMMENT || name(element) === '#comment';\n };\n var isElement = isType$1(ELEMENT);\n var isText = isType$1(TEXT);\n\n var rawSet = function (dom, key, value) {\n if (isString(value) || isBoolean(value) || isNumber(value)) {\n dom.setAttribute(key, value + '');\n } else {\n domGlobals.console.error('Invalid call to Attr.set. Key ', key, ':: Value ', value, ':: Element ', dom);\n throw new Error('Attribute value was not simple');\n }\n };\n var set = function (element, key, value) {\n rawSet(element.dom(), key, value);\n };\n var setAll = function (element, attrs) {\n var dom = element.dom();\n each$1(attrs, function (v, k) {\n rawSet(dom, k, v);\n });\n };\n var get = function (element, key) {\n var v = element.dom().getAttribute(key);\n return v === null ? undefined : v;\n };\n var has = function (element, key) {\n var dom = element.dom();\n return dom && dom.hasAttribute ? dom.hasAttribute(key) : false;\n };\n var remove = function (element, key) {\n element.dom().removeAttribute(key);\n };\n var clone = function (element) {\n return foldl(element.dom().attributes, function (acc, attr) {\n acc[attr.name] = attr.value;\n return acc;\n }, {});\n };\n\n var checkRange = function (str, substr, start) {\n if (substr === '') {\n return true;\n }\n if (str.length < substr.length) {\n return false;\n }\n var x = str.substr(start, start + substr.length);\n return x === substr;\n };\n var contains$1 = function (str, substr) {\n return str.indexOf(substr) !== -1;\n };\n var endsWith = function (str, suffix) {\n return checkRange(str, suffix, str.length - suffix.length);\n };\n var trim = function (str) {\n return str.replace(/^\\s+|\\s+$/g, '');\n };\n\n var isSupported = function (dom) {\n return dom.style !== undefined && isFunction(dom.style.getPropertyValue);\n };\n\n var cached = function (f) {\n var called = false;\n var r;\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (!called) {\n called = true;\n r = f.apply(null, args);\n }\n return r;\n };\n };\n\n var fromHtml = function (html, scope) {\n var doc = scope || domGlobals.document;\n var div = doc.createElement('div');\n div.innerHTML = html;\n if (!div.hasChildNodes() || div.childNodes.length > 1) {\n domGlobals.console.error('HTML does not have a single root node', html);\n throw new Error('HTML must have a single root node');\n }\n return fromDom(div.childNodes[0]);\n };\n var fromTag = function (tag, scope) {\n var doc = scope || domGlobals.document;\n var node = doc.createElement(tag);\n return fromDom(node);\n };\n var fromText = function (text, scope) {\n var doc = scope || domGlobals.document;\n var node = doc.createTextNode(text);\n return fromDom(node);\n };\n var fromDom = function (node) {\n if (node === null || node === undefined) {\n throw new Error('Node cannot be null or undefined');\n }\n return { dom: constant(node) };\n };\n var fromPoint = function (docElm, x, y) {\n var doc = docElm.dom();\n return Option.from(doc.elementFromPoint(x, y)).map(fromDom);\n };\n var Element = {\n fromHtml: fromHtml,\n fromTag: fromTag,\n fromText: fromText,\n fromDom: fromDom,\n fromPoint: fromPoint\n };\n\n var inBody = function (element) {\n var dom = isText(element) ? element.dom().parentNode : element.dom();\n return dom !== undefined && dom !== null && dom.ownerDocument.body.contains(dom);\n };\n var body = cached(function () {\n return getBody(Element.fromDom(domGlobals.document));\n });\n var getBody = function (doc) {\n var b = doc.dom().body;\n if (b === null || b === undefined) {\n throw new Error('Body is not available yet');\n }\n return Element.fromDom(b);\n };\n\n var internalSet = function (dom, property, value) {\n if (!isString(value)) {\n domGlobals.console.error('Invalid call to CSS.set. Property ', property, ':: Value ', value, ':: Element ', dom);\n throw new Error('CSS value must be a string: ' + value);\n }\n if (isSupported(dom)) {\n dom.style.setProperty(property, value);\n }\n };\n var internalRemove = function (dom, property) {\n if (isSupported(dom)) {\n dom.style.removeProperty(property);\n }\n };\n var set$1 = function (element, property, value) {\n var dom = element.dom();\n internalSet(dom, property, value);\n };\n var setAll$1 = function (element, css) {\n var dom = element.dom();\n each$1(css, function (v, k) {\n internalSet(dom, k, v);\n });\n };\n var get$1 = function (element, property) {\n var dom = element.dom();\n var styles = domGlobals.window.getComputedStyle(dom);\n var r = styles.getPropertyValue(property);\n var v = r === '' && !inBody(element) ? getUnsafeProperty(dom, property) : r;\n return v === null ? undefined : v;\n };\n var getUnsafeProperty = function (dom, property) {\n return isSupported(dom) ? dom.style.getPropertyValue(property) : '';\n };\n var getRaw = function (element, property) {\n var dom = element.dom();\n var raw = getUnsafeProperty(dom, property);\n return Option.from(raw).filter(function (r) {\n return r.length > 0;\n });\n };\n var remove$1 = function (element, property) {\n var dom = element.dom();\n internalRemove(dom, property);\n if (has(element, 'style') && trim(get(element, 'style')) === '') {\n remove(element, 'style');\n }\n };\n var copy = function (source, target) {\n var sourceDom = source.dom();\n var targetDom = target.dom();\n if (isSupported(sourceDom) && isSupported(targetDom)) {\n targetDom.style.cssText = sourceDom.style.cssText;\n }\n };\n\n var node = function () {\n var f = Global$1.getOrDie('Node');\n return f;\n };\n var compareDocumentPosition = function (a, b, match) {\n return (a.compareDocumentPosition(b) & match) !== 0;\n };\n var documentPositionPreceding = function (a, b) {\n return compareDocumentPosition(a, b, node().DOCUMENT_POSITION_PRECEDING);\n };\n var documentPositionContainedBy = function (a, b) {\n return compareDocumentPosition(a, b, node().DOCUMENT_POSITION_CONTAINED_BY);\n };\n var Node = {\n documentPositionPreceding: documentPositionPreceding,\n documentPositionContainedBy: documentPositionContainedBy\n };\n\n var firstMatch = function (regexes, s) {\n for (var i = 0; i < regexes.length; i++) {\n var x = regexes[i];\n if (x.test(s)) {\n return x;\n }\n }\n return undefined;\n };\n var find$1 = function (regexes, agent) {\n var r = firstMatch(regexes, agent);\n if (!r) {\n return {\n major: 0,\n minor: 0\n };\n }\n var group = function (i) {\n return Number(agent.replace(r, '$' + i));\n };\n return nu(group(1), group(2));\n };\n var detect = function (versionRegexes, agent) {\n var cleanedAgent = String(agent).toLowerCase();\n if (versionRegexes.length === 0) {\n return unknown();\n }\n return find$1(versionRegexes, cleanedAgent);\n };\n var unknown = function () {\n return nu(0, 0);\n };\n var nu = function (major, minor) {\n return {\n major: major,\n minor: minor\n };\n };\n var Version = {\n nu: nu,\n detect: detect,\n unknown: unknown\n };\n\n var edge = 'Edge';\n var chrome = 'Chrome';\n var ie = 'IE';\n var opera = 'Opera';\n var firefox = 'Firefox';\n var safari = 'Safari';\n var isBrowser = function (name, current) {\n return function () {\n return current === name;\n };\n };\n var unknown$1 = function () {\n return nu$1({\n current: undefined,\n version: Version.unknown()\n });\n };\n var nu$1 = function (info) {\n var current = info.current;\n var version = info.version;\n return {\n current: current,\n version: version,\n isEdge: isBrowser(edge, current),\n isChrome: isBrowser(chrome, current),\n isIE: isBrowser(ie, current),\n isOpera: isBrowser(opera, current),\n isFirefox: isBrowser(firefox, current),\n isSafari: isBrowser(safari, current)\n };\n };\n var Browser = {\n unknown: unknown$1,\n nu: nu$1,\n edge: constant(edge),\n chrome: constant(chrome),\n ie: constant(ie),\n opera: constant(opera),\n firefox: constant(firefox),\n safari: constant(safari)\n };\n\n var windows = 'Windows';\n var ios = 'iOS';\n var android = 'Android';\n var linux = 'Linux';\n var osx = 'OSX';\n var solaris = 'Solaris';\n var freebsd = 'FreeBSD';\n var isOS = function (name, current) {\n return function () {\n return current === name;\n };\n };\n var unknown$2 = function () {\n return nu$2({\n current: undefined,\n version: Version.unknown()\n });\n };\n var nu$2 = function (info) {\n var current = info.current;\n var version = info.version;\n return {\n current: current,\n version: version,\n isWindows: isOS(windows, current),\n isiOS: isOS(ios, current),\n isAndroid: isOS(android, current),\n isOSX: isOS(osx, current),\n isLinux: isOS(linux, current),\n isSolaris: isOS(solaris, current),\n isFreeBSD: isOS(freebsd, current)\n };\n };\n var OperatingSystem = {\n unknown: unknown$2,\n nu: nu$2,\n windows: constant(windows),\n ios: constant(ios),\n android: constant(android),\n linux: constant(linux),\n osx: constant(osx),\n solaris: constant(solaris),\n freebsd: constant(freebsd)\n };\n\n var DeviceType = function (os, browser, userAgent) {\n var isiPad = os.isiOS() && /ipad/i.test(userAgent) === true;\n var isiPhone = os.isiOS() && !isiPad;\n var isAndroid3 = os.isAndroid() && os.version.major === 3;\n var isAndroid4 = os.isAndroid() && os.version.major === 4;\n var isTablet = isiPad || isAndroid3 || isAndroid4 && /mobile/i.test(userAgent) === true;\n var isTouch = os.isiOS() || os.isAndroid();\n var isPhone = isTouch && !isTablet;\n var iOSwebview = browser.isSafari() && os.isiOS() && /safari/i.test(userAgent) === false;\n return {\n isiPad: constant(isiPad),\n isiPhone: constant(isiPhone),\n isTablet: constant(isTablet),\n isPhone: constant(isPhone),\n isTouch: constant(isTouch),\n isAndroid: os.isAndroid,\n isiOS: os.isiOS,\n isWebView: constant(iOSwebview)\n };\n };\n\n var detect$1 = function (candidates, userAgent) {\n var agent = String(userAgent).toLowerCase();\n return find(candidates, function (candidate) {\n return candidate.search(agent);\n });\n };\n var detectBrowser = function (browsers, userAgent) {\n return detect$1(browsers, userAgent).map(function (browser) {\n var version = Version.detect(browser.versionRegexes, userAgent);\n return {\n current: browser.name,\n version: version\n };\n });\n };\n var detectOs = function (oses, userAgent) {\n return detect$1(oses, userAgent).map(function (os) {\n var version = Version.detect(os.versionRegexes, userAgent);\n return {\n current: os.name,\n version: version\n };\n });\n };\n var UaString = {\n detectBrowser: detectBrowser,\n detectOs: detectOs\n };\n\n var normalVersionRegex = /.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/;\n var checkContains = function (target) {\n return function (uastring) {\n return contains$1(uastring, target);\n };\n };\n var browsers = [\n {\n name: 'Edge',\n versionRegexes: [/.*?edge\\/ ?([0-9]+)\\.([0-9]+)$/],\n search: function (uastring) {\n return contains$1(uastring, 'edge/') && contains$1(uastring, 'chrome') && contains$1(uastring, 'safari') && contains$1(uastring, 'applewebkit');\n }\n },\n {\n name: 'Chrome',\n versionRegexes: [\n /.*?chrome\\/([0-9]+)\\.([0-9]+).*/,\n normalVersionRegex\n ],\n search: function (uastring) {\n return contains$1(uastring, 'chrome') && !contains$1(uastring, 'chromeframe');\n }\n },\n {\n name: 'IE',\n versionRegexes: [\n /.*?msie\\ ?([0-9]+)\\.([0-9]+).*/,\n /.*?rv:([0-9]+)\\.([0-9]+).*/\n ],\n search: function (uastring) {\n return contains$1(uastring, 'msie') || contains$1(uastring, 'trident');\n }\n },\n {\n name: 'Opera',\n versionRegexes: [\n normalVersionRegex,\n /.*?opera\\/([0-9]+)\\.([0-9]+).*/\n ],\n search: checkContains('opera')\n },\n {\n name: 'Firefox',\n versionRegexes: [/.*?firefox\\/\\ ?([0-9]+)\\.([0-9]+).*/],\n search: checkContains('firefox')\n },\n {\n name: 'Safari',\n versionRegexes: [\n normalVersionRegex,\n /.*?cpu os ([0-9]+)_([0-9]+).*/\n ],\n search: function (uastring) {\n return (contains$1(uastring, 'safari') || contains$1(uastring, 'mobile/')) && contains$1(uastring, 'applewebkit');\n }\n }\n ];\n var oses = [\n {\n name: 'Windows',\n search: checkContains('win'),\n versionRegexes: [/.*?windows\\ nt\\ ?([0-9]+)\\.([0-9]+).*/]\n },\n {\n name: 'iOS',\n search: function (uastring) {\n return contains$1(uastring, 'iphone') || contains$1(uastring, 'ipad');\n },\n versionRegexes: [\n /.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/,\n /.*cpu os ([0-9]+)_([0-9]+).*/,\n /.*cpu iphone os ([0-9]+)_([0-9]+).*/\n ]\n },\n {\n name: 'Android',\n search: checkContains('android'),\n versionRegexes: [/.*?android\\ ?([0-9]+)\\.([0-9]+).*/]\n },\n {\n name: 'OSX',\n search: checkContains('os x'),\n versionRegexes: [/.*?os\\ x\\ ?([0-9]+)_([0-9]+).*/]\n },\n {\n name: 'Linux',\n search: checkContains('linux'),\n versionRegexes: []\n },\n {\n name: 'Solaris',\n search: checkContains('sunos'),\n versionRegexes: []\n },\n {\n name: 'FreeBSD',\n search: checkContains('freebsd'),\n versionRegexes: []\n }\n ];\n var PlatformInfo = {\n browsers: constant(browsers),\n oses: constant(oses)\n };\n\n var detect$2 = function (userAgent) {\n var browsers = PlatformInfo.browsers();\n var oses = PlatformInfo.oses();\n var browser = UaString.detectBrowser(browsers, userAgent).fold(Browser.unknown, Browser.nu);\n var os = UaString.detectOs(oses, userAgent).fold(OperatingSystem.unknown, OperatingSystem.nu);\n var deviceType = DeviceType(os, browser, userAgent);\n return {\n browser: browser,\n os: os,\n deviceType: deviceType\n };\n };\n var PlatformDetection = { detect: detect$2 };\n\n var detect$3 = cached(function () {\n var userAgent = domGlobals.navigator.userAgent;\n return PlatformDetection.detect(userAgent);\n });\n var PlatformDetection$1 = { detect: detect$3 };\n\n var ELEMENT$1 = ELEMENT;\n var DOCUMENT$1 = DOCUMENT;\n var is = function (element, selector) {\n var dom = element.dom();\n if (dom.nodeType !== ELEMENT$1) {\n return false;\n } else {\n var elem = dom;\n if (elem.matches !== undefined) {\n return elem.matches(selector);\n } else if (elem.msMatchesSelector !== undefined) {\n return elem.msMatchesSelector(selector);\n } else if (elem.webkitMatchesSelector !== undefined) {\n return elem.webkitMatchesSelector(selector);\n } else if (elem.mozMatchesSelector !== undefined) {\n return elem.mozMatchesSelector(selector);\n } else {\n throw new Error('Browser lacks native selectors');\n }\n }\n };\n var bypassSelector = function (dom) {\n return dom.nodeType !== ELEMENT$1 && dom.nodeType !== DOCUMENT$1 || dom.childElementCount === 0;\n };\n var all = function (selector, scope) {\n var base = scope === undefined ? domGlobals.document : scope.dom();\n return bypassSelector(base) ? [] : map(base.querySelectorAll(selector), Element.fromDom);\n };\n var one = function (selector, scope) {\n var base = scope === undefined ? domGlobals.document : scope.dom();\n return bypassSelector(base) ? Option.none() : Option.from(base.querySelector(selector)).map(Element.fromDom);\n };\n\n var eq = function (e1, e2) {\n return e1.dom() === e2.dom();\n };\n var regularContains = function (e1, e2) {\n var d1 = e1.dom();\n var d2 = e2.dom();\n return d1 === d2 ? false : d1.contains(d2);\n };\n var ieContains = function (e1, e2) {\n return Node.documentPositionContainedBy(e1.dom(), e2.dom());\n };\n var browser = PlatformDetection$1.detect().browser;\n var contains$2 = browser.isIE() ? ieContains : regularContains;\n var is$1 = is;\n\n var owner = function (element) {\n return Element.fromDom(element.dom().ownerDocument);\n };\n var defaultView = function (element) {\n return Element.fromDom(element.dom().ownerDocument.defaultView);\n };\n var parent = function (element) {\n return Option.from(element.dom().parentNode).map(Element.fromDom);\n };\n var parents = function (element, isRoot) {\n var stop = isFunction(isRoot) ? isRoot : never;\n var dom = element.dom();\n var ret = [];\n while (dom.parentNode !== null && dom.parentNode !== undefined) {\n var rawParent = dom.parentNode;\n var p = Element.fromDom(rawParent);\n ret.push(p);\n if (stop(p) === true) {\n break;\n } else {\n dom = rawParent;\n }\n }\n return ret;\n };\n var prevSibling = function (element) {\n return Option.from(element.dom().previousSibling).map(Element.fromDom);\n };\n var nextSibling = function (element) {\n return Option.from(element.dom().nextSibling).map(Element.fromDom);\n };\n var children = function (element) {\n return map(element.dom().childNodes, Element.fromDom);\n };\n var child = function (element, index) {\n var cs = element.dom().childNodes;\n return Option.from(cs[index]).map(Element.fromDom);\n };\n var firstChild = function (element) {\n return child(element, 0);\n };\n var spot = Immutable('element', 'offset');\n\n var before = function (marker, element) {\n var parent$1 = parent(marker);\n parent$1.each(function (v) {\n v.dom().insertBefore(element.dom(), marker.dom());\n });\n };\n var after = function (marker, element) {\n var sibling = nextSibling(marker);\n sibling.fold(function () {\n var parent$1 = parent(marker);\n parent$1.each(function (v) {\n append(v, element);\n });\n }, function (v) {\n before(v, element);\n });\n };\n var prepend = function (parent, element) {\n var firstChild$1 = firstChild(parent);\n firstChild$1.fold(function () {\n append(parent, element);\n }, function (v) {\n parent.dom().insertBefore(element.dom(), v.dom());\n });\n };\n var append = function (parent, element) {\n parent.dom().appendChild(element.dom());\n };\n var wrap = function (element, wrapper) {\n before(element, wrapper);\n append(wrapper, element);\n };\n\n var before$1 = function (marker, elements) {\n each(elements, function (x) {\n before(marker, x);\n });\n };\n var after$1 = function (marker, elements) {\n each(elements, function (x, i) {\n var e = i === 0 ? marker : elements[i - 1];\n after(e, x);\n });\n };\n var append$1 = function (parent, elements) {\n each(elements, function (x) {\n append(parent, x);\n });\n };\n\n var empty = function (element) {\n element.dom().textContent = '';\n each(children(element), function (rogue) {\n remove$2(rogue);\n });\n };\n var remove$2 = function (element) {\n var dom = element.dom();\n if (dom.parentNode !== null) {\n dom.parentNode.removeChild(dom);\n }\n };\n var unwrap = function (wrapper) {\n var children$1 = children(wrapper);\n if (children$1.length > 0) {\n before$1(wrapper, children$1);\n }\n remove$2(wrapper);\n };\n\n var dimension = Immutable('width', 'height');\n var dimensions = Immutable('width', 'height');\n var grid = Immutable('rows', 'columns');\n var address = Immutable('row', 'column');\n var coords = Immutable('x', 'y');\n var detail = Immutable('element', 'rowspan', 'colspan');\n var detailnew = Immutable('element', 'rowspan', 'colspan', 'isNew');\n var extended = Immutable('element', 'rowspan', 'colspan', 'row', 'column');\n var rowdata = Immutable('element', 'cells', 'section');\n var elementnew = Immutable('element', 'isNew');\n var rowdatanew = Immutable('element', 'cells', 'section', 'isNew');\n var rowcells = Immutable('cells', 'section');\n var rowdetails = Immutable('details', 'section');\n var bounds = Immutable('startRow', 'startCol', 'finishRow', 'finishCol');\n\n var ancestors = function (scope, predicate, isRoot) {\n return filter(parents(scope, isRoot), predicate);\n };\n var children$1 = function (scope, predicate) {\n return filter(children(scope), predicate);\n };\n var descendants = function (scope, predicate) {\n var result = [];\n each(children(scope), function (x) {\n if (predicate(x)) {\n result = result.concat([x]);\n }\n result = result.concat(descendants(x, predicate));\n });\n return result;\n };\n\n var ancestors$1 = function (scope, selector, isRoot) {\n return ancestors(scope, function (e) {\n return is(e, selector);\n }, isRoot);\n };\n var children$2 = function (scope, selector) {\n return children$1(scope, function (e) {\n return is(e, selector);\n });\n };\n var descendants$1 = function (scope, selector) {\n return all(selector, scope);\n };\n\n function ClosestOrAncestor (is, ancestor, scope, a, isRoot) {\n return is(scope, a) ? Option.some(scope) : isFunction(isRoot) && isRoot(scope) ? Option.none() : ancestor(scope, a, isRoot);\n }\n\n var ancestor = function (scope, predicate, isRoot) {\n var element = scope.dom();\n var stop = isFunction(isRoot) ? isRoot : constant(false);\n while (element.parentNode) {\n element = element.parentNode;\n var el = Element.fromDom(element);\n if (predicate(el)) {\n return Option.some(el);\n } else if (stop(el)) {\n break;\n }\n }\n return Option.none();\n };\n var closest = function (scope, predicate, isRoot) {\n var is = function (s, test) {\n return test(s);\n };\n return ClosestOrAncestor(is, ancestor, scope, predicate, isRoot);\n };\n var child$1 = function (scope, predicate) {\n var pred = function (node) {\n return predicate(Element.fromDom(node));\n };\n var result = find(scope.dom().childNodes, pred);\n return result.map(Element.fromDom);\n };\n var descendant = function (scope, predicate) {\n var descend = function (node) {\n for (var i = 0; i < node.childNodes.length; i++) {\n var child_1 = Element.fromDom(node.childNodes[i]);\n if (predicate(child_1)) {\n return Option.some(child_1);\n }\n var res = descend(node.childNodes[i]);\n if (res.isSome()) {\n return res;\n }\n }\n return Option.none();\n };\n return descend(scope.dom());\n };\n\n var ancestor$1 = function (scope, selector, isRoot) {\n return ancestor(scope, function (e) {\n return is(e, selector);\n }, isRoot);\n };\n var child$2 = function (scope, selector) {\n return child$1(scope, function (e) {\n return is(e, selector);\n });\n };\n var descendant$1 = function (scope, selector) {\n return one(selector, scope);\n };\n var closest$1 = function (scope, selector, isRoot) {\n return ClosestOrAncestor(is, ancestor$1, scope, selector, isRoot);\n };\n\n var firstLayer = function (scope, selector) {\n return filterFirstLayer(scope, selector, constant(true));\n };\n var filterFirstLayer = function (scope, selector, predicate) {\n return bind(children(scope), function (x) {\n return is(x, selector) ? predicate(x) ? [x] : [] : filterFirstLayer(x, selector, predicate);\n });\n };\n var LayerSelector = {\n firstLayer: firstLayer,\n filterFirstLayer: filterFirstLayer\n };\n\n var lookup = function (tags, element, isRoot) {\n if (isRoot === void 0) {\n isRoot = never;\n }\n if (isRoot(element)) {\n return Option.none();\n }\n if (contains(tags, name(element))) {\n return Option.some(element);\n }\n var isRootOrUpperTable = function (elm) {\n return is(elm, 'table') || isRoot(elm);\n };\n return ancestor$1(element, tags.join(','), isRootOrUpperTable);\n };\n var cell = function (element, isRoot) {\n return lookup([\n 'td',\n 'th'\n ], element, isRoot);\n };\n var cells = function (ancestor) {\n return LayerSelector.firstLayer(ancestor, 'th,td');\n };\n var notCell = function (element, isRoot) {\n return lookup([\n 'caption',\n 'tr',\n 'tbody',\n 'tfoot',\n 'thead'\n ], element, isRoot);\n };\n var neighbours = function (selector, element) {\n return parent(element).map(function (parent) {\n return children$2(parent, selector);\n });\n };\n var neighbourCells = curry(neighbours, 'th,td');\n var neighbourRows = curry(neighbours, 'tr');\n var firstCell = function (ancestor) {\n return descendant$1(ancestor, 'th,td');\n };\n var table = function (element, isRoot) {\n return closest$1(element, 'table', isRoot);\n };\n var row = function (element, isRoot) {\n return lookup(['tr'], element, isRoot);\n };\n var rows = function (ancestor) {\n return LayerSelector.firstLayer(ancestor, 'tr');\n };\n var attr = function (element, property) {\n return parseInt(get(element, property), 10);\n };\n var grid$1 = function (element, rowProp, colProp) {\n var rowsCount = attr(element, rowProp);\n var cols = attr(element, colProp);\n return grid(rowsCount, cols);\n };\n var TableLookup = {\n cell: cell,\n firstCell: firstCell,\n cells: cells,\n neighbourCells: neighbourCells,\n table: table,\n row: row,\n rows: rows,\n notCell: notCell,\n neighbourRows: neighbourRows,\n attr: attr,\n grid: grid$1\n };\n\n var fromTable = function (table) {\n var rows = TableLookup.rows(table);\n return map(rows, function (row) {\n var element = row;\n var parent$1 = parent(element);\n var parentSection = parent$1.map(function (p) {\n var parentName = name(p);\n return parentName === 'tfoot' || parentName === 'thead' || parentName === 'tbody' ? parentName : 'tbody';\n }).getOr('tbody');\n var cells = map(TableLookup.cells(row), function (cell) {\n var rowspan = has(cell, 'rowspan') ? parseInt(get(cell, 'rowspan'), 10) : 1;\n var colspan = has(cell, 'colspan') ? parseInt(get(cell, 'colspan'), 10) : 1;\n return detail(cell, rowspan, colspan);\n });\n return rowdata(element, cells, parentSection);\n });\n };\n var fromPastedRows = function (rows, example) {\n return map(rows, function (row) {\n var cells = map(TableLookup.cells(row), function (cell) {\n var rowspan = has(cell, 'rowspan') ? parseInt(get(cell, 'rowspan'), 10) : 1;\n var colspan = has(cell, 'colspan') ? parseInt(get(cell, 'colspan'), 10) : 1;\n return detail(cell, rowspan, colspan);\n });\n return rowdata(row, cells, example.section());\n });\n };\n var DetailsList = {\n fromTable: fromTable,\n fromPastedRows: fromPastedRows\n };\n\n var key = function (row, column) {\n return row + ',' + column;\n };\n var getAt = function (warehouse, row, column) {\n var raw = warehouse.access()[key(row, column)];\n return raw !== undefined ? Option.some(raw) : Option.none();\n };\n var findItem = function (warehouse, item, comparator) {\n var filtered = filterItems(warehouse, function (detail) {\n return comparator(item, detail.element());\n });\n return filtered.length > 0 ? Option.some(filtered[0]) : Option.none();\n };\n var filterItems = function (warehouse, predicate) {\n var all = bind(warehouse.all(), function (r) {\n return r.cells();\n });\n return filter(all, predicate);\n };\n var generate = function (list) {\n var access = {};\n var cells = [];\n var maxRows = list.length;\n var maxColumns = 0;\n each(list, function (details, r) {\n var currentRow = [];\n each(details.cells(), function (detail) {\n var start = 0;\n while (access[key(r, start)] !== undefined) {\n start++;\n }\n var current = extended(detail.element(), detail.rowspan(), detail.colspan(), r, start);\n for (var i = 0; i < detail.colspan(); i++) {\n for (var j = 0; j < detail.rowspan(); j++) {\n var cr = r + j;\n var cc = start + i;\n var newpos = key(cr, cc);\n access[newpos] = current;\n maxColumns = Math.max(maxColumns, cc + 1);\n }\n }\n currentRow.push(current);\n });\n cells.push(rowdata(details.element(), currentRow, details.section()));\n });\n var grid$1 = grid(maxRows, maxColumns);\n return {\n grid: constant(grid$1),\n access: constant(access),\n all: constant(cells)\n };\n };\n var justCells = function (warehouse) {\n var rows = map(warehouse.all(), function (w) {\n return w.cells();\n });\n return flatten(rows);\n };\n var Warehouse = {\n generate: generate,\n getAt: getAt,\n findItem: findItem,\n filterItems: filterItems,\n justCells: justCells\n };\n\n var statsStruct = Immutable('minRow', 'minCol', 'maxRow', 'maxCol');\n var findSelectedStats = function (house, isSelected) {\n var totalColumns = house.grid().columns();\n var totalRows = house.grid().rows();\n var minRow = totalRows;\n var minCol = totalColumns;\n var maxRow = 0;\n var maxCol = 0;\n each$1(house.access(), function (detail) {\n if (isSelected(detail)) {\n var startRow = detail.row();\n var endRow = startRow + detail.rowspan() - 1;\n var startCol = detail.column();\n var endCol = startCol + detail.colspan() - 1;\n if (startRow < minRow) {\n minRow = startRow;\n } else if (endRow > maxRow) {\n maxRow = endRow;\n }\n if (startCol < minCol) {\n minCol = startCol;\n } else if (endCol > maxCol) {\n maxCol = endCol;\n }\n }\n });\n return statsStruct(minRow, minCol, maxRow, maxCol);\n };\n var makeCell = function (list, seenSelected, rowIndex) {\n var row = list[rowIndex].element();\n var td = Element.fromTag('td');\n append(td, Element.fromTag('br'));\n var f = seenSelected ? append : prepend;\n f(row, td);\n };\n var fillInGaps = function (list, house, stats, isSelected) {\n var totalColumns = house.grid().columns();\n var totalRows = house.grid().rows();\n for (var i = 0; i < totalRows; i++) {\n var seenSelected = false;\n for (var j = 0; j < totalColumns; j++) {\n if (!(i < stats.minRow() || i > stats.maxRow() || j < stats.minCol() || j > stats.maxCol())) {\n var needCell = Warehouse.getAt(house, i, j).filter(isSelected).isNone();\n if (needCell) {\n makeCell(list, seenSelected, i);\n } else {\n seenSelected = true;\n }\n }\n }\n }\n };\n var clean = function (table, stats) {\n var emptyRows = filter(LayerSelector.firstLayer(table, 'tr'), function (row) {\n return row.dom().childElementCount === 0;\n });\n each(emptyRows, remove$2);\n if (stats.minCol() === stats.maxCol() || stats.minRow() === stats.maxRow()) {\n each(LayerSelector.firstLayer(table, 'th,td'), function (cell) {\n remove(cell, 'rowspan');\n remove(cell, 'colspan');\n });\n }\n remove(table, 'width');\n remove(table, 'height');\n remove$1(table, 'width');\n remove$1(table, 'height');\n };\n var extract = function (table, selectedSelector) {\n var isSelected = function (detail) {\n return is(detail.element(), selectedSelector);\n };\n var list = DetailsList.fromTable(table);\n var house = Warehouse.generate(list);\n var stats = findSelectedStats(house, isSelected);\n var selector = 'th:not(' + selectedSelector + ')' + ',td:not(' + selectedSelector + ')';\n var unselectedCells = LayerSelector.filterFirstLayer(table, 'th,td', function (cell) {\n return is(cell, selector);\n });\n each(unselectedCells, remove$2);\n fillInGaps(list, house, stats, isSelected);\n clean(table, stats);\n return table;\n };\n var CopySelected = { extract: extract };\n\n function NodeValue (is, name) {\n var get = function (element) {\n if (!is(element)) {\n throw new Error('Can only get ' + name + ' value of a ' + name + ' node');\n }\n return getOption(element).getOr('');\n };\n var getOption = function (element) {\n return is(element) ? Option.from(element.dom().nodeValue) : Option.none();\n };\n var set = function (element, value) {\n if (!is(element)) {\n throw new Error('Can only set raw ' + name + ' value of a ' + name + ' node');\n }\n element.dom().nodeValue = value;\n };\n return {\n get: get,\n getOption: getOption,\n set: set\n };\n }\n\n var api = NodeValue(isText, 'text');\n var get$2 = function (element) {\n return api.get(element);\n };\n var getOption = function (element) {\n return api.getOption(element);\n };\n var set$2 = function (element, value) {\n api.set(element, value);\n };\n\n var getEnd = function (element) {\n return name(element) === 'img' ? 1 : getOption(element).fold(function () {\n return children(element).length;\n }, function (v) {\n return v.length;\n });\n };\n var NBSP = '\\xA0';\n var isTextNodeWithCursorPosition = function (el) {\n return getOption(el).filter(function (text) {\n return text.trim().length !== 0 || text.indexOf(NBSP) > -1;\n }).isSome();\n };\n var elementsWithCursorPosition = [\n 'img',\n 'br'\n ];\n var isCursorPosition = function (elem) {\n var hasCursorPosition = isTextNodeWithCursorPosition(elem);\n return hasCursorPosition || contains(elementsWithCursorPosition, name(elem));\n };\n\n var first = function (element) {\n return descendant(element, isCursorPosition);\n };\n var last$1 = function (element) {\n return descendantRtl(element, isCursorPosition);\n };\n var descendantRtl = function (scope, predicate) {\n var descend = function (element) {\n var children$1 = children(element);\n for (var i = children$1.length - 1; i >= 0; i--) {\n var child = children$1[i];\n if (predicate(child)) {\n return Option.some(child);\n }\n var res = descend(child);\n if (res.isSome()) {\n return res;\n }\n }\n return Option.none();\n };\n return descend(scope);\n };\n\n var clone$1 = function (original, isDeep) {\n return Element.fromDom(original.dom().cloneNode(isDeep));\n };\n var shallow = function (original) {\n return clone$1(original, false);\n };\n var deep = function (original) {\n return clone$1(original, true);\n };\n var shallowAs = function (original, tag) {\n var nu = Element.fromTag(tag);\n var attributes = clone(original);\n setAll(nu, attributes);\n return nu;\n };\n var copy$1 = function (original, tag) {\n var nu = shallowAs(original, tag);\n var cloneChildren = children(deep(original));\n append$1(nu, cloneChildren);\n return nu;\n };\n\n var createCell = function () {\n var td = Element.fromTag('td');\n append(td, Element.fromTag('br'));\n return td;\n };\n var replace = function (cell, tag, attrs) {\n var replica = copy$1(cell, tag);\n each$1(attrs, function (v, k) {\n if (v === null) {\n remove(replica, k);\n } else {\n set(replica, k, v);\n }\n });\n return replica;\n };\n var pasteReplace = function (cell) {\n return cell;\n };\n var newRow = function (doc) {\n return function () {\n return Element.fromTag('tr', doc.dom());\n };\n };\n var cloneFormats = function (oldCell, newCell, formats) {\n var first$1 = first(oldCell);\n return first$1.map(function (firstText) {\n var formatSelector = formats.join(',');\n var parents = ancestors$1(firstText, formatSelector, function (element) {\n return eq(element, oldCell);\n });\n return foldr(parents, function (last, parent) {\n var clonedFormat = shallow(parent);\n remove(clonedFormat, 'contenteditable');\n append(last, clonedFormat);\n return clonedFormat;\n }, newCell);\n }).getOr(newCell);\n };\n var cellOperations = function (mutate, doc, formatsToClone) {\n var newCell = function (prev) {\n var docu = owner(prev.element());\n var td = Element.fromTag(name(prev.element()), docu.dom());\n var formats = formatsToClone.getOr([\n 'strong',\n 'em',\n 'b',\n 'i',\n 'span',\n 'font',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'p',\n 'div'\n ]);\n var lastNode = formats.length > 0 ? cloneFormats(prev.element(), td, formats) : td;\n append(lastNode, Element.fromTag('br'));\n copy(prev.element(), td);\n remove$1(td, 'height');\n if (prev.colspan() !== 1) {\n remove$1(prev.element(), 'width');\n }\n mutate(prev.element(), td);\n return td;\n };\n return {\n row: newRow(doc),\n cell: newCell,\n replace: replace,\n gap: createCell\n };\n };\n var paste = function (doc) {\n return {\n row: newRow(doc),\n cell: createCell,\n replace: pasteReplace,\n gap: createCell\n };\n };\n var TableFill = {\n cellOperations: cellOperations,\n paste: paste\n };\n\n var fromHtml$1 = function (html, scope) {\n var doc = scope || domGlobals.document;\n var div = doc.createElement('div');\n div.innerHTML = html;\n return children(Element.fromDom(div));\n };\n\n var inSelection = function (bounds, detail) {\n var leftEdge = detail.column();\n var rightEdge = detail.column() + detail.colspan() - 1;\n var topEdge = detail.row();\n var bottomEdge = detail.row() + detail.rowspan() - 1;\n return leftEdge <= bounds.finishCol() && rightEdge >= bounds.startCol() && (topEdge <= bounds.finishRow() && bottomEdge >= bounds.startRow());\n };\n var isWithin = function (bounds, detail) {\n return detail.column() >= bounds.startCol() && detail.column() + detail.colspan() - 1 <= bounds.finishCol() && detail.row() >= bounds.startRow() && detail.row() + detail.rowspan() - 1 <= bounds.finishRow();\n };\n var isRectangular = function (warehouse, bounds) {\n var isRect = true;\n var detailIsWithin = curry(isWithin, bounds);\n for (var i = bounds.startRow(); i <= bounds.finishRow(); i++) {\n for (var j = bounds.startCol(); j <= bounds.finishCol(); j++) {\n isRect = isRect && Warehouse.getAt(warehouse, i, j).exists(detailIsWithin);\n }\n }\n return isRect ? Option.some(bounds) : Option.none();\n };\n var CellBounds = {\n inSelection: inSelection,\n isWithin: isWithin,\n isRectangular: isRectangular\n };\n\n var getBounds = function (detailA, detailB) {\n return bounds(Math.min(detailA.row(), detailB.row()), Math.min(detailA.column(), detailB.column()), Math.max(detailA.row() + detailA.rowspan() - 1, detailB.row() + detailB.rowspan() - 1), Math.max(detailA.column() + detailA.colspan() - 1, detailB.column() + detailB.colspan() - 1));\n };\n var getAnyBox = function (warehouse, startCell, finishCell) {\n var startCoords = Warehouse.findItem(warehouse, startCell, eq);\n var finishCoords = Warehouse.findItem(warehouse, finishCell, eq);\n return startCoords.bind(function (sc) {\n return finishCoords.map(function (fc) {\n return getBounds(sc, fc);\n });\n });\n };\n var getBox = function (warehouse, startCell, finishCell) {\n return getAnyBox(warehouse, startCell, finishCell).bind(function (bounds) {\n return CellBounds.isRectangular(warehouse, bounds);\n });\n };\n var CellGroup = {\n getAnyBox: getAnyBox,\n getBox: getBox\n };\n\n var moveBy = function (warehouse, cell, row, column) {\n return Warehouse.findItem(warehouse, cell, eq).bind(function (detail) {\n var startRow = row > 0 ? detail.row() + detail.rowspan() - 1 : detail.row();\n var startCol = column > 0 ? detail.column() + detail.colspan() - 1 : detail.column();\n var dest = Warehouse.getAt(warehouse, startRow + row, startCol + column);\n return dest.map(function (d) {\n return d.element();\n });\n });\n };\n var intercepts = function (warehouse, start, finish) {\n return CellGroup.getAnyBox(warehouse, start, finish).map(function (bounds) {\n var inside = Warehouse.filterItems(warehouse, curry(CellBounds.inSelection, bounds));\n return map(inside, function (detail) {\n return detail.element();\n });\n });\n };\n var parentCell = function (warehouse, innerCell) {\n var isContainedBy = function (c1, c2) {\n return contains$2(c2, c1);\n };\n return Warehouse.findItem(warehouse, innerCell, isContainedBy).map(function (detail) {\n return detail.element();\n });\n };\n var CellFinder = {\n moveBy: moveBy,\n intercepts: intercepts,\n parentCell: parentCell\n };\n\n var moveBy$1 = function (cell, deltaRow, deltaColumn) {\n return TableLookup.table(cell).bind(function (table) {\n var warehouse = getWarehouse(table);\n return CellFinder.moveBy(warehouse, cell, deltaRow, deltaColumn);\n });\n };\n var intercepts$1 = function (table, first, last) {\n var warehouse = getWarehouse(table);\n return CellFinder.intercepts(warehouse, first, last);\n };\n var nestedIntercepts = function (table, first, firstTable, last, lastTable) {\n var warehouse = getWarehouse(table);\n var optStartCell = eq(table, firstTable) ? Option.some(first) : CellFinder.parentCell(warehouse, first);\n var optLastCell = eq(table, lastTable) ? Option.some(last) : CellFinder.parentCell(warehouse, last);\n return optStartCell.bind(function (startCell) {\n return optLastCell.bind(function (lastCell) {\n return CellFinder.intercepts(warehouse, startCell, lastCell);\n });\n });\n };\n var getBox$1 = function (table, first, last) {\n var warehouse = getWarehouse(table);\n return CellGroup.getBox(warehouse, first, last);\n };\n var getWarehouse = function (table) {\n var list = DetailsList.fromTable(table);\n return Warehouse.generate(list);\n };\n var TablePositions = {\n moveBy: moveBy$1,\n intercepts: intercepts$1,\n nestedIntercepts: nestedIntercepts,\n getBox: getBox$1\n };\n\n var TagBoundaries = [\n 'body',\n 'p',\n 'div',\n 'article',\n 'aside',\n 'figcaption',\n 'figure',\n 'footer',\n 'header',\n 'nav',\n 'section',\n 'ol',\n 'ul',\n 'li',\n 'table',\n 'thead',\n 'tbody',\n 'tfoot',\n 'caption',\n 'tr',\n 'td',\n 'th',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'blockquote',\n 'pre',\n 'address'\n ];\n\n function DomUniverse () {\n var clone$1 = function (element) {\n return Element.fromDom(element.dom().cloneNode(false));\n };\n var document = function (element) {\n return element.dom().ownerDocument;\n };\n var isBoundary = function (element) {\n if (!isElement(element)) {\n return false;\n }\n if (name(element) === 'body') {\n return true;\n }\n return contains(TagBoundaries, name(element));\n };\n var isEmptyTag = function (element) {\n if (!isElement(element)) {\n return false;\n }\n return contains([\n 'br',\n 'img',\n 'hr',\n 'input'\n ], name(element));\n };\n var comparePosition = function (element, other) {\n return element.dom().compareDocumentPosition(other.dom());\n };\n var copyAttributesTo = function (source, destination) {\n var as = clone(source);\n setAll(destination, as);\n };\n return {\n up: constant({\n selector: ancestor$1,\n closest: closest$1,\n predicate: ancestor,\n all: parents\n }),\n down: constant({\n selector: descendants$1,\n predicate: descendants\n }),\n styles: constant({\n get: get$1,\n getRaw: getRaw,\n set: set$1,\n remove: remove$1\n }),\n attrs: constant({\n get: get,\n set: set,\n remove: remove,\n copyTo: copyAttributesTo\n }),\n insert: constant({\n before: before,\n after: after,\n afterAll: after$1,\n append: append,\n appendAll: append$1,\n prepend: prepend,\n wrap: wrap\n }),\n remove: constant({\n unwrap: unwrap,\n remove: remove$2\n }),\n create: constant({\n nu: Element.fromTag,\n clone: clone$1,\n text: Element.fromText\n }),\n query: constant({\n comparePosition: comparePosition,\n prevSibling: prevSibling,\n nextSibling: nextSibling\n }),\n property: constant({\n children: children,\n name: name,\n parent: parent,\n document: document,\n isText: isText,\n isComment: isComment,\n isElement: isElement,\n getText: get$2,\n setText: set$2,\n isBoundary: isBoundary,\n isEmptyTag: isEmptyTag\n }),\n eq: eq,\n is: is$1\n };\n }\n\n var leftRight = Immutable('left', 'right');\n var brokenPath = Immutable('first', 'second', 'splits');\n var bisect = function (universe, parent, child) {\n var children = universe.property().children(parent);\n var index = findIndex(children, curry(universe.eq, child));\n return index.map(function (ind) {\n return {\n before: constant(children.slice(0, ind)),\n after: constant(children.slice(ind + 1))\n };\n });\n };\n var breakToRight = function (universe, parent, child) {\n return bisect(universe, parent, child).map(function (parts) {\n var second = universe.create().clone(parent);\n universe.insert().appendAll(second, parts.after());\n universe.insert().after(parent, second);\n return leftRight(parent, second);\n });\n };\n var breakToLeft = function (universe, parent, child) {\n return bisect(universe, parent, child).map(function (parts) {\n var prior = universe.create().clone(parent);\n universe.insert().appendAll(prior, parts.before().concat([child]));\n universe.insert().appendAll(parent, parts.after());\n universe.insert().before(parent, prior);\n return leftRight(prior, parent);\n });\n };\n var breakPath = function (universe, item, isTop, breaker) {\n var next = function (child, group, splits) {\n var fallback = brokenPath(child, Option.none(), splits);\n if (isTop(child)) {\n return brokenPath(child, group, splits);\n } else {\n return universe.property().parent(child).bind(function (parent) {\n return breaker(universe, parent, child).map(function (breakage) {\n var extra = [{\n first: breakage.left,\n second: breakage.right\n }];\n var nextChild = isTop(parent) ? parent : breakage.left();\n return next(nextChild, Option.some(breakage.right()), splits.concat(extra));\n });\n }).getOr(fallback);\n }\n };\n return next(item, Option.none(), []);\n };\n\n var all$1 = function (universe, look, elements, f) {\n var head = elements[0];\n var tail = elements.slice(1);\n return f(universe, look, head, tail);\n };\n var oneAll = function (universe, look, elements) {\n return elements.length > 0 ? all$1(universe, look, elements, unsafeOne) : Option.none();\n };\n var unsafeOne = function (universe, look, head, tail) {\n var start = look(universe, head);\n return foldr(tail, function (b, a) {\n var current = look(universe, a);\n return commonElement(universe, b, current);\n }, start);\n };\n var commonElement = function (universe, start, end) {\n return start.bind(function (s) {\n return end.filter(curry(universe.eq, s));\n });\n };\n\n var eq$1 = function (universe, item) {\n return curry(universe.eq, item);\n };\n var unsafeSubset = function (universe, common, ps1, ps2) {\n var children = universe.property().children(common);\n if (universe.eq(common, ps1[0])) {\n return Option.some([ps1[0]]);\n }\n if (universe.eq(common, ps2[0])) {\n return Option.some([ps2[0]]);\n }\n var finder = function (ps) {\n var topDown = reverse(ps);\n var index = findIndex(topDown, eq$1(universe, common)).getOr(-1);\n var item = index < topDown.length - 1 ? topDown[index + 1] : topDown[index];\n return findIndex(children, eq$1(universe, item));\n };\n var startIndex = finder(ps1);\n var endIndex = finder(ps2);\n return startIndex.bind(function (sIndex) {\n return endIndex.map(function (eIndex) {\n var first = Math.min(sIndex, eIndex);\n var last = Math.max(sIndex, eIndex);\n return children.slice(first, last + 1);\n });\n });\n };\n var ancestors$2 = function (universe, start, end, isRoot) {\n if (isRoot === void 0) {\n isRoot = never;\n }\n var ps1 = [start].concat(universe.up().all(start));\n var ps2 = [end].concat(universe.up().all(end));\n var prune = function (path) {\n var index = findIndex(path, isRoot);\n return index.fold(function () {\n return path;\n }, function (ind) {\n return path.slice(0, ind + 1);\n });\n };\n var pruned1 = prune(ps1);\n var pruned2 = prune(ps2);\n var shared = find(pruned1, function (x) {\n return exists(pruned2, eq$1(universe, x));\n });\n return {\n firstpath: constant(pruned1),\n secondpath: constant(pruned2),\n shared: constant(shared)\n };\n };\n var subset = function (universe, start, end) {\n var ancs = ancestors$2(universe, start, end);\n return ancs.shared().bind(function (shared) {\n return unsafeSubset(universe, shared, ancs.firstpath(), ancs.secondpath());\n });\n };\n var SubsetFn = {\n subset: subset,\n ancestors: ancestors$2\n };\n\n var sharedOne = oneAll;\n var subset$1 = SubsetFn.subset;\n var ancestors$3 = SubsetFn.ancestors;\n var breakToLeft$1 = breakToLeft;\n var breakToRight$1 = breakToRight;\n var breakPath$1 = breakPath;\n var Parent = {\n sharedOne: sharedOne,\n subset: subset$1,\n ancestors: ancestors$3,\n breakToLeft: breakToLeft$1,\n breakToRight: breakToRight$1,\n breakPath: breakPath$1\n };\n\n var universe = DomUniverse();\n var sharedOne$1 = function (look, elements) {\n return Parent.sharedOne(universe, function (_universe, element) {\n return look(element);\n }, elements);\n };\n var subset$2 = function (start, finish) {\n return Parent.subset(universe, start, finish);\n };\n var ancestors$4 = function (start, finish, isRoot) {\n return Parent.ancestors(universe, start, finish, isRoot);\n };\n var breakToLeft$2 = function (parent, child) {\n return Parent.breakToLeft(universe, parent, child);\n };\n var breakToRight$2 = function (parent, child) {\n return Parent.breakToRight(universe, parent, child);\n };\n var breakPath$2 = function (child, isTop, breaker) {\n return Parent.breakPath(universe, child, isTop, function (u, p, c) {\n return breaker(p, c);\n });\n };\n var DomParent = {\n sharedOne: sharedOne$1,\n subset: subset$2,\n ancestors: ancestors$4,\n breakToLeft: breakToLeft$2,\n breakToRight: breakToRight$2,\n breakPath: breakPath$2\n };\n\n var create = MixedBag([\n 'boxes',\n 'start',\n 'finish'\n ], []);\n var Identified = { create: create };\n\n var lookupTable = function (container) {\n return ancestor$1(container, 'table');\n };\n var identify = function (start, finish, isRoot) {\n var getIsRoot = function (rootTable) {\n return function (element) {\n return isRoot !== undefined && isRoot(element) || eq(element, rootTable);\n };\n };\n if (eq(start, finish)) {\n return Option.some(Identified.create({\n boxes: Option.some([start]),\n start: start,\n finish: finish\n }));\n } else {\n return lookupTable(start).bind(function (startTable) {\n return lookupTable(finish).bind(function (finishTable) {\n if (eq(startTable, finishTable)) {\n return Option.some(Identified.create({\n boxes: TablePositions.intercepts(startTable, start, finish),\n start: start,\n finish: finish\n }));\n } else if (contains$2(startTable, finishTable)) {\n var ancestorCells = ancestors$1(finish, 'td,th', getIsRoot(startTable));\n var finishCell = ancestorCells.length > 0 ? ancestorCells[ancestorCells.length - 1] : finish;\n return Option.some(Identified.create({\n boxes: TablePositions.nestedIntercepts(startTable, start, startTable, finish, finishTable),\n start: start,\n finish: finishCell\n }));\n } else if (contains$2(finishTable, startTable)) {\n var ancestorCells = ancestors$1(start, 'td,th', getIsRoot(finishTable));\n var startCell = ancestorCells.length > 0 ? ancestorCells[ancestorCells.length - 1] : start;\n return Option.some(Identified.create({\n boxes: TablePositions.nestedIntercepts(finishTable, start, startTable, finish, finishTable),\n start: start,\n finish: startCell\n }));\n } else {\n return DomParent.ancestors(start, finish).shared().bind(function (lca) {\n return closest$1(lca, 'table', isRoot).bind(function (lcaTable) {\n var finishAncestorCells = ancestors$1(finish, 'td,th', getIsRoot(lcaTable));\n var finishCell = finishAncestorCells.length > 0 ? finishAncestorCells[finishAncestorCells.length - 1] : finish;\n var startAncestorCells = ancestors$1(start, 'td,th', getIsRoot(lcaTable));\n var startCell = startAncestorCells.length > 0 ? startAncestorCells[startAncestorCells.length - 1] : start;\n return Option.some(Identified.create({\n boxes: TablePositions.nestedIntercepts(lcaTable, start, startTable, finish, finishTable),\n start: startCell,\n finish: finishCell\n }));\n });\n });\n }\n });\n });\n }\n };\n var retrieve = function (container, selector) {\n var sels = descendants$1(container, selector);\n return sels.length > 0 ? Option.some(sels) : Option.none();\n };\n var getLast = function (boxes, lastSelectedSelector) {\n return find(boxes, function (box) {\n return is(box, lastSelectedSelector);\n });\n };\n var getEdges = function (container, firstSelectedSelector, lastSelectedSelector) {\n return descendant$1(container, firstSelectedSelector).bind(function (first) {\n return descendant$1(container, lastSelectedSelector).bind(function (last) {\n return DomParent.sharedOne(lookupTable, [\n first,\n last\n ]).map(function (tbl) {\n return {\n first: constant(first),\n last: constant(last),\n table: constant(tbl)\n };\n });\n });\n });\n };\n var expandTo = function (finish, firstSelectedSelector) {\n return ancestor$1(finish, 'table').bind(function (table) {\n return descendant$1(table, firstSelectedSelector).bind(function (start) {\n return identify(start, finish).bind(function (identified) {\n return identified.boxes().map(function (boxes) {\n return {\n boxes: constant(boxes),\n start: constant(identified.start()),\n finish: constant(identified.finish())\n };\n });\n });\n });\n });\n };\n var shiftSelection = function (boxes, deltaRow, deltaColumn, firstSelectedSelector, lastSelectedSelector) {\n return getLast(boxes, lastSelectedSelector).bind(function (last) {\n return TablePositions.moveBy(last, deltaRow, deltaColumn).bind(function (finish) {\n return expandTo(finish, firstSelectedSelector);\n });\n });\n };\n var CellSelection = {\n identify: identify,\n retrieve: retrieve,\n shiftSelection: shiftSelection,\n getEdges: getEdges\n };\n\n var retrieve$1 = function (container, selector) {\n return CellSelection.retrieve(container, selector);\n };\n var retrieveBox = function (container, firstSelectedSelector, lastSelectedSelector) {\n return CellSelection.getEdges(container, firstSelectedSelector, lastSelectedSelector).bind(function (edges) {\n var isRoot = function (ancestor) {\n return eq(container, ancestor);\n };\n var firstAncestor = ancestor$1(edges.first(), 'thead,tfoot,tbody,table', isRoot);\n var lastAncestor = ancestor$1(edges.last(), 'thead,tfoot,tbody,table', isRoot);\n return firstAncestor.bind(function (fA) {\n return lastAncestor.bind(function (lA) {\n return eq(fA, lA) ? TablePositions.getBox(edges.table(), edges.first(), edges.last()) : Option.none();\n });\n });\n });\n };\n var TableSelection = {\n retrieve: retrieve$1,\n retrieveBox: retrieveBox\n };\n\n var selected = 'data-mce-selected';\n var selectedSelector = 'td[' + selected + '],th[' + selected + ']';\n var attributeSelector = '[' + selected + ']';\n var firstSelected = 'data-mce-first-selected';\n var firstSelectedSelector = 'td[' + firstSelected + '],th[' + firstSelected + ']';\n var lastSelected = 'data-mce-last-selected';\n var lastSelectedSelector = 'td[' + lastSelected + '],th[' + lastSelected + ']';\n var Ephemera = {\n selected: constant(selected),\n selectedSelector: constant(selectedSelector),\n attributeSelector: constant(attributeSelector),\n firstSelected: constant(firstSelected),\n firstSelectedSelector: constant(firstSelectedSelector),\n lastSelected: constant(lastSelected),\n lastSelectedSelector: constant(lastSelectedSelector)\n };\n\n var generate$1 = function (cases) {\n if (!isArray(cases)) {\n throw new Error('cases must be an array');\n }\n if (cases.length === 0) {\n throw new Error('there must be at least one case');\n }\n var constructors = [];\n var adt = {};\n each(cases, function (acase, count) {\n var keys$1 = keys(acase);\n if (keys$1.length !== 1) {\n throw new Error('one and only one name per case');\n }\n var key = keys$1[0];\n var value = acase[key];\n if (adt[key] !== undefined) {\n throw new Error('duplicate key detected:' + key);\n } else if (key === 'cata') {\n throw new Error('cannot have a case named cata (sorry)');\n } else if (!isArray(value)) {\n throw new Error('case arguments must be an array');\n }\n constructors.push(key);\n adt[key] = function () {\n var argLength = arguments.length;\n if (argLength !== value.length) {\n throw new Error('Wrong number of arguments to case ' + key + '. Expected ' + value.length + ' (' + value + '), got ' + argLength);\n }\n var args = new Array(argLength);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i];\n }\n var match = function (branches) {\n var branchKeys = keys(branches);\n if (constructors.length !== branchKeys.length) {\n throw new Error('Wrong number of arguments to match. Expected: ' + constructors.join(',') + '\\nActual: ' + branchKeys.join(','));\n }\n var allReqd = forall(constructors, function (reqKey) {\n return contains(branchKeys, reqKey);\n });\n if (!allReqd) {\n throw new Error('Not all branches were specified when using match. Specified: ' + branchKeys.join(', ') + '\\nRequired: ' + constructors.join(', '));\n }\n return branches[key].apply(null, args);\n };\n return {\n fold: function () {\n if (arguments.length !== cases.length) {\n throw new Error('Wrong number of arguments to fold. Expected ' + cases.length + ', got ' + arguments.length);\n }\n var target = arguments[count];\n return target.apply(null, args);\n },\n match: match,\n log: function (label) {\n domGlobals.console.log(label, {\n constructors: constructors,\n constructor: key,\n params: args\n });\n }\n };\n };\n });\n return adt;\n };\n var Adt = { generate: generate$1 };\n\n var type$1 = Adt.generate([\n { none: [] },\n { multiple: ['elements'] },\n { single: ['selection'] }\n ]);\n var cata = function (subject, onNone, onMultiple, onSingle) {\n return subject.fold(onNone, onMultiple, onSingle);\n };\n var SelectionTypes = {\n cata: cata,\n none: type$1.none,\n multiple: type$1.multiple,\n single: type$1.single\n };\n\n var selection = function (cell, selections) {\n return SelectionTypes.cata(selections.get(), constant([]), identity, constant([cell]));\n };\n var unmergable = function (cell, selections) {\n var hasSpan = function (elem) {\n return has(elem, 'rowspan') && parseInt(get(elem, 'rowspan'), 10) > 1 || has(elem, 'colspan') && parseInt(get(elem, 'colspan'), 10) > 1;\n };\n var candidates = selection(cell, selections);\n return candidates.length > 0 && forall(candidates, hasSpan) ? Option.some(candidates) : Option.none();\n };\n var mergable = function (table, selections) {\n return SelectionTypes.cata(selections.get(), Option.none, function (cells, _env) {\n if (cells.length === 0) {\n return Option.none();\n }\n return TableSelection.retrieveBox(table, Ephemera.firstSelectedSelector(), Ephemera.lastSelectedSelector()).bind(function (bounds) {\n return cells.length > 1 ? Option.some({\n bounds: constant(bounds),\n cells: constant(cells)\n }) : Option.none();\n });\n }, Option.none);\n };\n var CellOperations = {\n mergable: mergable,\n unmergable: unmergable,\n selection: selection\n };\n\n var noMenu = function (cell) {\n return {\n element: constant(cell),\n mergable: Option.none,\n unmergable: Option.none,\n selection: constant([cell])\n };\n };\n var forMenu = function (selections, table, cell) {\n return {\n element: constant(cell),\n mergable: constant(CellOperations.mergable(table, selections)),\n unmergable: constant(CellOperations.unmergable(cell, selections)),\n selection: constant(CellOperations.selection(cell, selections))\n };\n };\n var notCell$1 = function (element) {\n return noMenu(element);\n };\n var paste$1 = Immutable('element', 'clipboard', 'generators');\n var pasteRows = function (selections, table, cell, clipboard, generators) {\n return {\n element: constant(cell),\n mergable: Option.none,\n unmergable: Option.none,\n selection: constant(CellOperations.selection(cell, selections)),\n clipboard: constant(clipboard),\n generators: constant(generators)\n };\n };\n var TableTargets = {\n noMenu: noMenu,\n forMenu: forMenu,\n notCell: notCell$1,\n paste: paste$1,\n pasteRows: pasteRows\n };\n\n var extractSelected = function (cells) {\n return TableLookup.table(cells[0]).map(deep).map(function (replica) {\n return [CopySelected.extract(replica, Ephemera.attributeSelector())];\n });\n };\n var serializeElements = function (editor, elements) {\n return map(elements, function (elm) {\n return editor.selection.serializer.serialize(elm.dom(), {});\n }).join('');\n };\n var getTextContent = function (elements) {\n return map(elements, function (element) {\n return element.dom().innerText;\n }).join('');\n };\n var registerEvents = function (editor, selections, actions, cellSelection) {\n editor.on('BeforeGetContent', function (e) {\n var multiCellContext = function (cells) {\n e.preventDefault();\n extractSelected(cells).each(function (elements) {\n e.content = e.format === 'text' ? getTextContent(elements) : serializeElements(editor, elements);\n });\n };\n if (e.selection === true) {\n SelectionTypes.cata(selections.get(), noop, multiCellContext, noop);\n }\n });\n editor.on('BeforeSetContent', function (e) {\n if (e.selection === true && e.paste === true) {\n var cellOpt = Option.from(editor.dom.getParent(editor.selection.getStart(), 'th,td'));\n cellOpt.each(function (domCell) {\n var cell = Element.fromDom(domCell);\n TableLookup.table(cell).each(function (table) {\n var elements = filter(fromHtml$1(e.content), function (content) {\n return name(content) !== 'meta';\n });\n if (elements.length === 1 && name(elements[0]) === 'table') {\n e.preventDefault();\n var doc = Element.fromDom(editor.getDoc());\n var generators = TableFill.paste(doc);\n var targets = TableTargets.paste(cell, elements[0], generators);\n actions.pasteCells(table, targets).each(function (rng) {\n editor.selection.setRng(rng);\n editor.focus();\n cellSelection.clear(table);\n });\n }\n });\n });\n }\n });\n };\n var Clipboard = { registerEvents: registerEvents };\n\n function Dimension (name, getOffset) {\n var set = function (element, h) {\n if (!isNumber(h) && !h.match(/^[0-9]+$/)) {\n throw new Error(name + '.set accepts only positive integer values. Value was ' + h);\n }\n var dom = element.dom();\n if (isSupported(dom)) {\n dom.style[name] = h + 'px';\n }\n };\n var get = function (element) {\n var r = getOffset(element);\n if (r <= 0 || r === null) {\n var css = get$1(element, name);\n return parseFloat(css) || 0;\n }\n return r;\n };\n var getOuter = get;\n var aggregate = function (element, properties) {\n return foldl(properties, function (acc, property) {\n var val = get$1(element, property);\n var value = val === undefined ? 0 : parseInt(val, 10);\n return isNaN(value) ? acc : acc + value;\n }, 0);\n };\n var max = function (element, value, properties) {\n var cumulativeInclusions = aggregate(element, properties);\n var absoluteMax = value > cumulativeInclusions ? value - cumulativeInclusions : 0;\n return absoluteMax;\n };\n return {\n set: set,\n get: get,\n getOuter: getOuter,\n aggregate: aggregate,\n max: max\n };\n }\n\n var api$1 = Dimension('height', function (element) {\n var dom = element.dom();\n return inBody(element) ? dom.getBoundingClientRect().height : dom.offsetHeight;\n });\n var get$3 = function (element) {\n return api$1.get(element);\n };\n var getOuter = function (element) {\n return api$1.getOuter(element);\n };\n\n var api$2 = Dimension('width', function (element) {\n return element.dom().offsetWidth;\n });\n var get$4 = function (element) {\n return api$2.get(element);\n };\n var getOuter$1 = function (element) {\n return api$2.getOuter(element);\n };\n\n var platform = PlatformDetection$1.detect();\n var needManualCalc = function () {\n return platform.browser.isIE() || platform.browser.isEdge();\n };\n var toNumber = function (px, fallback) {\n var num = parseFloat(px);\n return isNaN(num) ? fallback : num;\n };\n var getProp = function (elm, name, fallback) {\n return toNumber(get$1(elm, name), fallback);\n };\n var getCalculatedHeight = function (cell) {\n var paddingTop = getProp(cell, 'padding-top', 0);\n var paddingBottom = getProp(cell, 'padding-bottom', 0);\n var borderTop = getProp(cell, 'border-top-width', 0);\n var borderBottom = getProp(cell, 'border-bottom-width', 0);\n var height = cell.dom().getBoundingClientRect().height;\n var boxSizing = get$1(cell, 'box-sizing');\n var borders = borderTop + borderBottom;\n return boxSizing === 'border-box' ? height : height - paddingTop - paddingBottom - borders;\n };\n var getWidth = function (cell) {\n return getProp(cell, 'width', get$4(cell));\n };\n var getHeight = function (cell) {\n return needManualCalc() ? getCalculatedHeight(cell) : getProp(cell, 'height', get$3(cell));\n };\n var RuntimeSize = {\n getWidth: getWidth,\n getHeight: getHeight\n };\n\n var genericSizeRegex = /(\\d+(\\.\\d+)?)(\\w|%)*/;\n var percentageBasedSizeRegex = /(\\d+(\\.\\d+)?)%/;\n var pixelBasedSizeRegex = /(\\d+(\\.\\d+)?)px|em/;\n var setPixelWidth = function (cell, amount) {\n set$1(cell, 'width', amount + 'px');\n };\n var setPercentageWidth = function (cell, amount) {\n set$1(cell, 'width', amount + '%');\n };\n var setHeight = function (cell, amount) {\n set$1(cell, 'height', amount + 'px');\n };\n var getHeightValue = function (cell) {\n return getRaw(cell, 'height').getOrThunk(function () {\n return RuntimeSize.getHeight(cell) + 'px';\n });\n };\n var convert = function (cell, number, getter, setter) {\n var newSize = TableLookup.table(cell).map(function (table) {\n var total = getter(table);\n return Math.floor(number / 100 * total);\n }).getOr(number);\n setter(cell, newSize);\n return newSize;\n };\n var normalizePixelSize = function (value, cell, getter, setter) {\n var number = parseInt(value, 10);\n return endsWith(value, '%') && name(cell) !== 'table' ? convert(cell, number, getter, setter) : number;\n };\n var getTotalHeight = function (cell) {\n var value = getHeightValue(cell);\n if (!value) {\n return get$3(cell);\n }\n return normalizePixelSize(value, cell, get$3, setHeight);\n };\n var get$5 = function (cell, type, f) {\n var v = f(cell);\n var span = getSpan(cell, type);\n return v / span;\n };\n var getSpan = function (cell, type) {\n return has(cell, type) ? parseInt(get(cell, type), 10) : 1;\n };\n var getRawWidth = function (element) {\n var cssWidth = getRaw(element, 'width');\n return cssWidth.fold(function () {\n return Option.from(get(element, 'width'));\n }, function (width) {\n return Option.some(width);\n });\n };\n var normalizePercentageWidth = function (cellWidth, tableSize) {\n return cellWidth / tableSize.pixelWidth() * 100;\n };\n var choosePercentageSize = function (element, width, tableSize) {\n var percentMatch = percentageBasedSizeRegex.exec(width);\n if (percentMatch !== null) {\n return parseFloat(percentMatch[1]);\n } else {\n var intWidth = get$4(element);\n return normalizePercentageWidth(intWidth, tableSize);\n }\n };\n var getPercentageWidth = function (cell, tableSize) {\n var width = getRawWidth(cell);\n return width.fold(function () {\n var intWidth = get$4(cell);\n return normalizePercentageWidth(intWidth, tableSize);\n }, function (w) {\n return choosePercentageSize(cell, w, tableSize);\n });\n };\n var normalizePixelWidth = function (cellWidth, tableSize) {\n return cellWidth / 100 * tableSize.pixelWidth();\n };\n var choosePixelSize = function (element, width, tableSize) {\n var pixelMatch = pixelBasedSizeRegex.exec(width);\n if (pixelMatch !== null) {\n return parseInt(pixelMatch[1], 10);\n }\n var percentMatch = percentageBasedSizeRegex.exec(width);\n if (percentMatch !== null) {\n var floatWidth = parseFloat(percentMatch[1]);\n return normalizePixelWidth(floatWidth, tableSize);\n }\n return get$4(element);\n };\n var getPixelWidth = function (cell, tableSize) {\n var width = getRawWidth(cell);\n return width.fold(function () {\n return get$4(cell);\n }, function (w) {\n return choosePixelSize(cell, w, tableSize);\n });\n };\n var getHeight$1 = function (cell) {\n return get$5(cell, 'rowspan', getTotalHeight);\n };\n var getGenericWidth = function (cell) {\n var width = getRawWidth(cell);\n return width.bind(function (w) {\n var match = genericSizeRegex.exec(w);\n if (match !== null) {\n return Option.some({\n width: constant(parseFloat(match[1])),\n unit: constant(match[3])\n });\n } else {\n return Option.none();\n }\n });\n };\n var setGenericWidth = function (cell, amount, unit) {\n set$1(cell, 'width', amount + unit);\n };\n var Sizes = {\n percentageBasedSizeRegex: constant(percentageBasedSizeRegex),\n pixelBasedSizeRegex: constant(pixelBasedSizeRegex),\n setPixelWidth: setPixelWidth,\n setPercentageWidth: setPercentageWidth,\n setHeight: setHeight,\n getPixelWidth: getPixelWidth,\n getPercentageWidth: getPercentageWidth,\n getGenericWidth: getGenericWidth,\n setGenericWidth: setGenericWidth,\n getHeight: getHeight$1,\n getRawWidth: getRawWidth\n };\n\n var halve = function (main, other) {\n var width = Sizes.getGenericWidth(main);\n width.each(function (w) {\n var newWidth = w.width() / 2;\n Sizes.setGenericWidth(main, newWidth, w.unit());\n Sizes.setGenericWidth(other, newWidth, w.unit());\n });\n };\n var CellMutations = { halve: halve };\n\n var r = function (left, top) {\n var translate = function (x, y) {\n return r(left + x, top + y);\n };\n return {\n left: constant(left),\n top: constant(top),\n translate: translate\n };\n };\n var Position = r;\n\n var boxPosition = function (dom) {\n var box = dom.getBoundingClientRect();\n return Position(box.left, box.top);\n };\n var firstDefinedOrZero = function (a, b) {\n return a !== undefined ? a : b !== undefined ? b : 0;\n };\n var absolute = function (element) {\n var doc = element.dom().ownerDocument;\n var body = doc.body;\n var win = doc.defaultView;\n var html = doc.documentElement;\n var scrollTop = firstDefinedOrZero(win.pageYOffset, html.scrollTop);\n var scrollLeft = firstDefinedOrZero(win.pageXOffset, html.scrollLeft);\n var clientTop = firstDefinedOrZero(html.clientTop, body.clientTop);\n var clientLeft = firstDefinedOrZero(html.clientLeft, body.clientLeft);\n return viewport(element).translate(scrollLeft - clientLeft, scrollTop - clientTop);\n };\n var viewport = function (element) {\n var dom = element.dom();\n var doc = dom.ownerDocument;\n var body = doc.body;\n if (body === dom) {\n return Position(body.offsetLeft, body.offsetTop);\n }\n if (!inBody(element)) {\n return Position(0, 0);\n }\n return boxPosition(dom);\n };\n\n var rowInfo = Immutable('row', 'y');\n var colInfo = Immutable('col', 'x');\n var rtlEdge = function (cell) {\n var pos = absolute(cell);\n return pos.left() + getOuter$1(cell);\n };\n var ltrEdge = function (cell) {\n return absolute(cell).left();\n };\n var getLeftEdge = function (index, cell) {\n return colInfo(index, ltrEdge(cell));\n };\n var getRightEdge = function (index, cell) {\n return colInfo(index, rtlEdge(cell));\n };\n var getTop = function (cell) {\n return absolute(cell).top();\n };\n var getTopEdge = function (index, cell) {\n return rowInfo(index, getTop(cell));\n };\n var getBottomEdge = function (index, cell) {\n return rowInfo(index, getTop(cell) + getOuter(cell));\n };\n var findPositions = function (getInnerEdge, getOuterEdge, array) {\n if (array.length === 0) {\n return [];\n }\n var lines = map(array.slice(1), function (cellOption, index) {\n return cellOption.map(function (cell) {\n return getInnerEdge(index, cell);\n });\n });\n var lastLine = array[array.length - 1].map(function (cell) {\n return getOuterEdge(array.length - 1, cell);\n });\n return lines.concat([lastLine]);\n };\n var negate = function (step) {\n return -step;\n };\n var height = {\n delta: identity,\n positions: function (optElements) {\n return findPositions(getTopEdge, getBottomEdge, optElements);\n },\n edge: getTop\n };\n var ltr = {\n delta: identity,\n edge: ltrEdge,\n positions: function (optElements) {\n return findPositions(getLeftEdge, getRightEdge, optElements);\n }\n };\n var rtl = {\n delta: negate,\n edge: rtlEdge,\n positions: function (optElements) {\n return findPositions(getRightEdge, getLeftEdge, optElements);\n }\n };\n var BarPositions = {\n height: height,\n rtl: rtl,\n ltr: ltr\n };\n\n var ResizeDirection = {\n ltr: BarPositions.ltr,\n rtl: BarPositions.rtl\n };\n\n function TableDirection (directionAt) {\n var auto = function (table) {\n return directionAt(table).isRtl() ? ResizeDirection.rtl : ResizeDirection.ltr;\n };\n var delta = function (amount, table) {\n return auto(table).delta(amount, table);\n };\n var positions = function (cols, table) {\n return auto(table).positions(cols, table);\n };\n var edge = function (cell) {\n return auto(cell).edge(cell);\n };\n return {\n delta: delta,\n edge: edge,\n positions: positions\n };\n }\n\n var getGridSize = function (table) {\n var input = DetailsList.fromTable(table);\n var warehouse = Warehouse.generate(input);\n return warehouse.grid();\n };\n var TableGridSize = { getGridSize: getGridSize };\n\n var __assign = function () {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s)\n if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n };\n\n var cat = function (arr) {\n var r = [];\n var push = function (x) {\n r.push(x);\n };\n for (var i = 0; i < arr.length; i++) {\n arr[i].each(push);\n }\n return r;\n };\n var findMap = function (arr, f) {\n for (var i = 0; i < arr.length; i++) {\n var r = f(arr[i], i);\n if (r.isSome()) {\n return r;\n }\n }\n return Option.none();\n };\n\n var setIfNot = function (element, property, value, ignore) {\n if (value === ignore) {\n remove(element, property);\n } else {\n set(element, property, value);\n }\n };\n var render = function (table, grid) {\n var newRows = [];\n var newCells = [];\n var renderSection = function (gridSection, sectionName) {\n var section = child$2(table, sectionName).getOrThunk(function () {\n var tb = Element.fromTag(sectionName, owner(table).dom());\n append(table, tb);\n return tb;\n });\n empty(section);\n var rows = map(gridSection, function (row) {\n if (row.isNew()) {\n newRows.push(row.element());\n }\n var tr = row.element();\n empty(tr);\n each(row.cells(), function (cell) {\n if (cell.isNew()) {\n newCells.push(cell.element());\n }\n setIfNot(cell.element(), 'colspan', cell.colspan(), 1);\n setIfNot(cell.element(), 'rowspan', cell.rowspan(), 1);\n append(tr, cell.element());\n });\n return tr;\n });\n append$1(section, rows);\n };\n var removeSection = function (sectionName) {\n child$2(table, sectionName).each(remove$2);\n };\n var renderOrRemoveSection = function (gridSection, sectionName) {\n if (gridSection.length > 0) {\n renderSection(gridSection, sectionName);\n } else {\n removeSection(sectionName);\n }\n };\n var headSection = [];\n var bodySection = [];\n var footSection = [];\n each(grid, function (row) {\n switch (row.section()) {\n case 'thead':\n headSection.push(row);\n break;\n case 'tbody':\n bodySection.push(row);\n break;\n case 'tfoot':\n footSection.push(row);\n break;\n }\n });\n renderOrRemoveSection(headSection, 'thead');\n renderOrRemoveSection(bodySection, 'tbody');\n renderOrRemoveSection(footSection, 'tfoot');\n return {\n newRows: constant(newRows),\n newCells: constant(newCells)\n };\n };\n var copy$2 = function (grid) {\n var rows = map(grid, function (row) {\n var tr = shallow(row.element());\n each(row.cells(), function (cell) {\n var clonedCell = deep(cell.element());\n setIfNot(clonedCell, 'colspan', cell.colspan(), 1);\n setIfNot(clonedCell, 'rowspan', cell.rowspan(), 1);\n append(tr, clonedCell);\n });\n return tr;\n });\n return rows;\n };\n var Redraw = {\n render: render,\n copy: copy$2\n };\n\n var read = function (element, attr) {\n var value = get(element, attr);\n return value === undefined || value === '' ? [] : value.split(' ');\n };\n var add = function (element, attr, id) {\n var old = read(element, attr);\n var nu = old.concat([id]);\n set(element, attr, nu.join(' '));\n return true;\n };\n var remove$3 = function (element, attr, id) {\n var nu = filter(read(element, attr), function (v) {\n return v !== id;\n });\n if (nu.length > 0) {\n set(element, attr, nu.join(' '));\n } else {\n remove(element, attr);\n }\n return false;\n };\n\n var supports = function (element) {\n return element.dom().classList !== undefined;\n };\n var get$6 = function (element) {\n return read(element, 'class');\n };\n var add$1 = function (element, clazz) {\n return add(element, 'class', clazz);\n };\n var remove$4 = function (element, clazz) {\n return remove$3(element, 'class', clazz);\n };\n\n var add$2 = function (element, clazz) {\n if (supports(element)) {\n element.dom().classList.add(clazz);\n } else {\n add$1(element, clazz);\n }\n };\n var cleanClass = function (element) {\n var classList = supports(element) ? element.dom().classList : get$6(element);\n if (classList.length === 0) {\n remove(element, 'class');\n }\n };\n var remove$5 = function (element, clazz) {\n if (supports(element)) {\n var classList = element.dom().classList;\n classList.remove(clazz);\n } else {\n remove$4(element, clazz);\n }\n cleanClass(element);\n };\n var has$1 = function (element, clazz) {\n return supports(element) && element.dom().classList.contains(clazz);\n };\n\n var repeat = function (repititions, f) {\n var r = [];\n for (var i = 0; i < repititions; i++) {\n r.push(f(i));\n }\n return r;\n };\n var range = function (start, end) {\n var r = [];\n for (var i = start; i < end; i++) {\n r.push(i);\n }\n return r;\n };\n var deduce = function (xs, index) {\n if (index < 0 || index >= xs.length - 1) {\n return Option.none();\n }\n var current = xs[index].fold(function () {\n var rest = reverse(xs.slice(0, index));\n return findMap(rest, function (a, i) {\n return a.map(function (aa) {\n return {\n value: aa,\n delta: i + 1\n };\n });\n });\n }, function (c) {\n return Option.some({\n value: c,\n delta: 0\n });\n });\n var next = xs[index + 1].fold(function () {\n var rest = xs.slice(index + 1);\n return findMap(rest, function (a, i) {\n return a.map(function (aa) {\n return {\n value: aa,\n delta: i + 1\n };\n });\n });\n }, function (n) {\n return Option.some({\n value: n,\n delta: 1\n });\n });\n return current.bind(function (c) {\n return next.map(function (n) {\n var extras = n.delta + c.delta;\n return Math.abs(n.value - c.value) / extras;\n });\n });\n };\n\n var columns = function (warehouse) {\n var grid = warehouse.grid();\n var cols = range(0, grid.columns());\n var rowsArr = range(0, grid.rows());\n return map(cols, function (col) {\n var getBlock = function () {\n return bind(rowsArr, function (r) {\n return Warehouse.getAt(warehouse, r, col).filter(function (detail) {\n return detail.column() === col;\n }).fold(constant([]), function (detail) {\n return [detail];\n });\n });\n };\n var isSingle = function (detail) {\n return detail.colspan() === 1;\n };\n var getFallback = function () {\n return Warehouse.getAt(warehouse, 0, col);\n };\n return decide(getBlock, isSingle, getFallback);\n });\n };\n var decide = function (getBlock, isSingle, getFallback) {\n var inBlock = getBlock();\n var singleInBlock = find(inBlock, isSingle);\n var detailOption = singleInBlock.orThunk(function () {\n return Option.from(inBlock[0]).orThunk(getFallback);\n });\n return detailOption.map(function (detail) {\n return detail.element();\n });\n };\n var rows$1 = function (warehouse) {\n var grid = warehouse.grid();\n var rowsArr = range(0, grid.rows());\n var cols = range(0, grid.columns());\n return map(rowsArr, function (row) {\n var getBlock = function () {\n return bind(cols, function (c) {\n return Warehouse.getAt(warehouse, row, c).filter(function (detail) {\n return detail.row() === row;\n }).fold(constant([]), function (detail) {\n return [detail];\n });\n });\n };\n var isSingle = function (detail) {\n return detail.rowspan() === 1;\n };\n var getFallback = function () {\n return Warehouse.getAt(warehouse, row, 0);\n };\n return decide(getBlock, isSingle, getFallback);\n });\n };\n var Blocks = {\n columns: columns,\n rows: rows$1\n };\n\n var css = function (namespace) {\n var dashNamespace = namespace.replace(/\\./g, '-');\n var resolve = function (str) {\n return dashNamespace + '-' + str;\n };\n return { resolve: resolve };\n };\n\n var styles = css('ephox-snooker');\n var Styles = { resolve: styles.resolve };\n\n var col = function (column, x, y, w, h) {\n var blocker = Element.fromTag('div');\n setAll$1(blocker, {\n position: 'absolute',\n left: x - w / 2 + 'px',\n top: y + 'px',\n height: h + 'px',\n width: w + 'px'\n });\n setAll(blocker, {\n 'data-column': column,\n 'role': 'presentation'\n });\n return blocker;\n };\n var row$1 = function (r, x, y, w, h) {\n var blocker = Element.fromTag('div');\n setAll$1(blocker, {\n position: 'absolute',\n left: x + 'px',\n top: y - h / 2 + 'px',\n height: h + 'px',\n width: w + 'px'\n });\n setAll(blocker, {\n 'data-row': r,\n 'role': 'presentation'\n });\n return blocker;\n };\n var Bar = {\n col: col,\n row: row$1\n };\n\n var resizeBar = Styles.resolve('resizer-bar');\n var resizeRowBar = Styles.resolve('resizer-rows');\n var resizeColBar = Styles.resolve('resizer-cols');\n var BAR_THICKNESS = 7;\n var destroy = function (wire) {\n var previous = descendants$1(wire.parent(), '.' + resizeBar);\n each(previous, remove$2);\n };\n var drawBar = function (wire, positions, create) {\n var origin = wire.origin();\n each(positions, function (cpOption, i) {\n cpOption.each(function (cp) {\n var bar = create(origin, cp);\n add$2(bar, resizeBar);\n append(wire.parent(), bar);\n });\n });\n };\n var refreshCol = function (wire, colPositions, position, tableHeight) {\n drawBar(wire, colPositions, function (origin, cp) {\n var colBar = Bar.col(cp.col(), cp.x() - origin.left(), position.top() - origin.top(), BAR_THICKNESS, tableHeight);\n add$2(colBar, resizeColBar);\n return colBar;\n });\n };\n var refreshRow = function (wire, rowPositions, position, tableWidth) {\n drawBar(wire, rowPositions, function (origin, cp) {\n var rowBar = Bar.row(cp.row(), position.left() - origin.left(), cp.y() - origin.top(), tableWidth, BAR_THICKNESS);\n add$2(rowBar, resizeRowBar);\n return rowBar;\n });\n };\n var refreshGrid = function (wire, table, rows, cols, hdirection, vdirection) {\n var position = absolute(table);\n var rowPositions = rows.length > 0 ? hdirection.positions(rows, table) : [];\n refreshRow(wire, rowPositions, position, getOuter$1(table));\n var colPositions = cols.length > 0 ? vdirection.positions(cols, table) : [];\n refreshCol(wire, colPositions, position, getOuter(table));\n };\n var refresh = function (wire, table, hdirection, vdirection) {\n destroy(wire);\n var list = DetailsList.fromTable(table);\n var warehouse = Warehouse.generate(list);\n var rows = Blocks.rows(warehouse);\n var cols = Blocks.columns(warehouse);\n refreshGrid(wire, table, rows, cols, hdirection, vdirection);\n };\n var each$2 = function (wire, f) {\n var bars = descendants$1(wire.parent(), '.' + resizeBar);\n each(bars, f);\n };\n var hide = function (wire) {\n each$2(wire, function (bar) {\n set$1(bar, 'display', 'none');\n });\n };\n var show = function (wire) {\n each$2(wire, function (bar) {\n set$1(bar, 'display', 'block');\n });\n };\n var isRowBar = function (element) {\n return has$1(element, resizeRowBar);\n };\n var isColBar = function (element) {\n return has$1(element, resizeColBar);\n };\n var Bars = {\n refresh: refresh,\n hide: hide,\n show: show,\n destroy: destroy,\n isRowBar: isRowBar,\n isColBar: isColBar\n };\n\n var addCell = function (gridRow, index, cell) {\n var cells = gridRow.cells();\n var before = cells.slice(0, index);\n var after = cells.slice(index);\n var newCells = before.concat([cell]).concat(after);\n return setCells(gridRow, newCells);\n };\n var mutateCell = function (gridRow, index, cell) {\n var cells = gridRow.cells();\n cells[index] = cell;\n };\n var setCells = function (gridRow, cells) {\n return rowcells(cells, gridRow.section());\n };\n var mapCells = function (gridRow, f) {\n var cells = gridRow.cells();\n var r = map(cells, f);\n return rowcells(r, gridRow.section());\n };\n var getCell = function (gridRow, index) {\n return gridRow.cells()[index];\n };\n var getCellElement = function (gridRow, index) {\n return getCell(gridRow, index).element();\n };\n var cellLength = function (gridRow) {\n return gridRow.cells().length;\n };\n var GridRow = {\n addCell: addCell,\n setCells: setCells,\n mutateCell: mutateCell,\n getCell: getCell,\n getCellElement: getCellElement,\n mapCells: mapCells,\n cellLength: cellLength\n };\n\n var getColumn = function (grid, index) {\n return map(grid, function (row) {\n return GridRow.getCell(row, index);\n });\n };\n var getRow = function (grid, index) {\n return grid[index];\n };\n var findDiff = function (xs, comp) {\n if (xs.length === 0) {\n return 0;\n }\n var first = xs[0];\n var index = findIndex(xs, function (x) {\n return !comp(first.element(), x.element());\n });\n return index.fold(function () {\n return xs.length;\n }, function (ind) {\n return ind;\n });\n };\n var subgrid = function (grid, row, column, comparator) {\n var restOfRow = getRow(grid, row).cells().slice(column);\n var endColIndex = findDiff(restOfRow, comparator);\n var restOfColumn = getColumn(grid, column).slice(row);\n var endRowIndex = findDiff(restOfColumn, comparator);\n return {\n colspan: constant(endColIndex),\n rowspan: constant(endRowIndex)\n };\n };\n var TableGrid = { subgrid: subgrid };\n\n var toDetails = function (grid, comparator) {\n var seen = map(grid, function (row, ri) {\n return map(row.cells(), function (col, ci) {\n return false;\n });\n });\n var updateSeen = function (ri, ci, rowspan, colspan) {\n for (var r = ri; r < ri + rowspan; r++) {\n for (var c = ci; c < ci + colspan; c++) {\n seen[r][c] = true;\n }\n }\n };\n return map(grid, function (row, ri) {\n var details = bind(row.cells(), function (cell, ci) {\n if (seen[ri][ci] === false) {\n var result = TableGrid.subgrid(grid, ri, ci, comparator);\n updateSeen(ri, ci, result.rowspan(), result.colspan());\n return [detailnew(cell.element(), result.rowspan(), result.colspan(), cell.isNew())];\n } else {\n return [];\n }\n });\n return rowdetails(details, row.section());\n });\n };\n var toGrid = function (warehouse, generators, isNew) {\n var grid = [];\n for (var i = 0; i < warehouse.grid().rows(); i++) {\n var rowCells = [];\n for (var j = 0; j < warehouse.grid().columns(); j++) {\n var element = Warehouse.getAt(warehouse, i, j).map(function (item) {\n return elementnew(item.element(), isNew);\n }).getOrThunk(function () {\n return elementnew(generators.gap(), true);\n });\n rowCells.push(element);\n }\n var row = rowcells(rowCells, warehouse.all()[i].section());\n grid.push(row);\n }\n return grid;\n };\n var Transitions = {\n toDetails: toDetails,\n toGrid: toGrid\n };\n\n var fromWarehouse = function (warehouse, generators) {\n return Transitions.toGrid(warehouse, generators, false);\n };\n var deriveRows = function (rendered, generators) {\n var findRow = function (details) {\n var rowOfCells = findMap(details, function (detail) {\n return parent(detail.element()).map(function (row) {\n var isNew = parent(row).isNone();\n return elementnew(row, isNew);\n });\n });\n return rowOfCells.getOrThunk(function () {\n return elementnew(generators.row(), true);\n });\n };\n return map(rendered, function (details) {\n var row = findRow(details.details());\n return rowdatanew(row.element(), details.details(), details.section(), row.isNew());\n });\n };\n var toDetailList = function (grid, generators) {\n var rendered = Transitions.toDetails(grid, eq);\n return deriveRows(rendered, generators);\n };\n var findInWarehouse = function (warehouse, element) {\n var all = flatten(map(warehouse.all(), function (r) {\n return r.cells();\n }));\n return find(all, function (e) {\n return eq(element, e.element());\n });\n };\n var run = function (operation, extract, adjustment, postAction, genWrappers) {\n return function (wire, table, target, generators, direction) {\n var input = DetailsList.fromTable(table);\n var warehouse = Warehouse.generate(input);\n var output = extract(warehouse, target).map(function (info) {\n var model = fromWarehouse(warehouse, generators);\n var result = operation(model, info, eq, genWrappers(generators));\n var grid = toDetailList(result.grid(), generators);\n return {\n grid: constant(grid),\n cursor: result.cursor\n };\n });\n return output.fold(function () {\n return Option.none();\n }, function (out) {\n var newElements = Redraw.render(table, out.grid());\n adjustment(table, out.grid(), direction);\n postAction(table);\n Bars.refresh(wire, table, BarPositions.height, direction);\n return Option.some({\n cursor: out.cursor,\n newRows: newElements.newRows,\n newCells: newElements.newCells\n });\n });\n };\n };\n var onCell = function (warehouse, target) {\n return TableLookup.cell(target.element()).bind(function (cell) {\n return findInWarehouse(warehouse, cell);\n });\n };\n var onPaste = function (warehouse, target) {\n return TableLookup.cell(target.element()).bind(function (cell) {\n return findInWarehouse(warehouse, cell).map(function (details) {\n var value = __assign(__assign({}, details), {\n generators: target.generators,\n clipboard: target.clipboard\n });\n return value;\n });\n });\n };\n var onPasteRows = function (warehouse, target) {\n var details = map(target.selection(), function (cell) {\n return TableLookup.cell(cell).bind(function (lc) {\n return findInWarehouse(warehouse, lc);\n });\n });\n var cells = cat(details);\n return cells.length > 0 ? Option.some({\n cells: cells,\n generators: target.generators,\n clipboard: target.clipboard\n }) : Option.none();\n };\n var onMergable = function (_warehouse, target) {\n return target.mergable();\n };\n var onUnmergable = function (_warehouse, target) {\n return target.unmergable();\n };\n var onCells = function (warehouse, target) {\n var details = map(target.selection(), function (cell) {\n return TableLookup.cell(cell).bind(function (lc) {\n return findInWarehouse(warehouse, lc);\n });\n });\n var cells = cat(details);\n return cells.length > 0 ? Option.some(cells) : Option.none();\n };\n\n var value = function (o) {\n var is = function (v) {\n return o === v;\n };\n var or = function (opt) {\n return value(o);\n };\n var orThunk = function (f) {\n return value(o);\n };\n var map = function (f) {\n return value(f(o));\n };\n var mapError = function (f) {\n return value(o);\n };\n var each = function (f) {\n f(o);\n };\n var bind = function (f) {\n return f(o);\n };\n var fold = function (_, onValue) {\n return onValue(o);\n };\n var exists = function (f) {\n return f(o);\n };\n var forall = function (f) {\n return f(o);\n };\n var toOption = function () {\n return Option.some(o);\n };\n return {\n is: is,\n isValue: always,\n isError: never,\n getOr: constant(o),\n getOrThunk: constant(o),\n getOrDie: constant(o),\n or: or,\n orThunk: orThunk,\n fold: fold,\n map: map,\n mapError: mapError,\n each: each,\n bind: bind,\n exists: exists,\n forall: forall,\n toOption: toOption\n };\n };\n var error = function (message) {\n var getOrThunk = function (f) {\n return f();\n };\n var getOrDie = function () {\n return die(String(message))();\n };\n var or = function (opt) {\n return opt;\n };\n var orThunk = function (f) {\n return f();\n };\n var map = function (f) {\n return error(message);\n };\n var mapError = function (f) {\n return error(f(message));\n };\n var bind = function (f) {\n return error(message);\n };\n var fold = function (onError, _) {\n return onError(message);\n };\n return {\n is: never,\n isValue: never,\n isError: always,\n getOr: identity,\n getOrThunk: getOrThunk,\n getOrDie: getOrDie,\n or: or,\n orThunk: orThunk,\n fold: fold,\n map: map,\n mapError: mapError,\n each: noop,\n bind: bind,\n exists: never,\n forall: always,\n toOption: Option.none\n };\n };\n var fromOption = function (opt, err) {\n return opt.fold(function () {\n return error(err);\n }, value);\n };\n var Result = {\n value: value,\n error: error,\n fromOption: fromOption\n };\n\n var measure = function (startAddress, gridA, gridB) {\n if (startAddress.row() >= gridA.length || startAddress.column() > GridRow.cellLength(gridA[0])) {\n return Result.error('invalid start address out of table bounds, row: ' + startAddress.row() + ', column: ' + startAddress.column());\n }\n var rowRemainder = gridA.slice(startAddress.row());\n var colRemainder = rowRemainder[0].cells().slice(startAddress.column());\n var colRequired = GridRow.cellLength(gridB[0]);\n var rowRequired = gridB.length;\n return Result.value({\n rowDelta: constant(rowRemainder.length - rowRequired),\n colDelta: constant(colRemainder.length - colRequired)\n });\n };\n var measureWidth = function (gridA, gridB) {\n var colLengthA = GridRow.cellLength(gridA[0]);\n var colLengthB = GridRow.cellLength(gridB[0]);\n return {\n rowDelta: constant(0),\n colDelta: constant(colLengthA - colLengthB)\n };\n };\n var fill = function (cells, generator) {\n return map(cells, function () {\n return elementnew(generator.cell(), true);\n });\n };\n var rowFill = function (grid, amount, generator) {\n return grid.concat(repeat(amount, function (_row) {\n return GridRow.setCells(grid[grid.length - 1], fill(grid[grid.length - 1].cells(), generator));\n }));\n };\n var colFill = function (grid, amount, generator) {\n return map(grid, function (row) {\n return GridRow.setCells(row, row.cells().concat(fill(range(0, amount), generator)));\n });\n };\n var tailor = function (gridA, delta, generator) {\n var fillCols = delta.colDelta() < 0 ? colFill : identity;\n var fillRows = delta.rowDelta() < 0 ? rowFill : identity;\n var modifiedCols = fillCols(gridA, Math.abs(delta.colDelta()), generator);\n var tailoredGrid = fillRows(modifiedCols, Math.abs(delta.rowDelta()), generator);\n return tailoredGrid;\n };\n var Fitment = {\n measure: measure,\n measureWidth: measureWidth,\n tailor: tailor\n };\n\n var merge = function (grid, bounds, comparator, substitution) {\n if (grid.length === 0) {\n return grid;\n }\n for (var i = bounds.startRow(); i <= bounds.finishRow(); i++) {\n for (var j = bounds.startCol(); j <= bounds.finishCol(); j++) {\n GridRow.mutateCell(grid[i], j, elementnew(substitution(), false));\n }\n }\n return grid;\n };\n var unmerge = function (grid, target, comparator, substitution) {\n var first = true;\n for (var i = 0; i < grid.length; i++) {\n for (var j = 0; j < GridRow.cellLength(grid[0]); j++) {\n var current = GridRow.getCellElement(grid[i], j);\n var isToReplace = comparator(current, target);\n if (isToReplace === true && first === false) {\n GridRow.mutateCell(grid[i], j, elementnew(substitution(), true));\n } else if (isToReplace === true) {\n first = false;\n }\n }\n }\n return grid;\n };\n var uniqueCells = function (row, comparator) {\n return foldl(row, function (rest, cell) {\n return exists(rest, function (currentCell) {\n return comparator(currentCell.element(), cell.element());\n }) ? rest : rest.concat([cell]);\n }, []);\n };\n var splitRows = function (grid, index, comparator, substitution) {\n if (index > 0 && index < grid.length) {\n var rowPrevCells = grid[index - 1].cells();\n var cells = uniqueCells(rowPrevCells, comparator);\n each(cells, function (cell) {\n var replacement = Option.none();\n var _loop_1 = function (i) {\n var _loop_2 = function (j) {\n var current = grid[i].cells()[j];\n var isToReplace = comparator(current.element(), cell.element());\n if (isToReplace) {\n if (replacement.isNone()) {\n replacement = Option.some(substitution());\n }\n replacement.each(function (sub) {\n GridRow.mutateCell(grid[i], j, elementnew(sub, true));\n });\n }\n };\n for (var j = 0; j < GridRow.cellLength(grid[0]); j++) {\n _loop_2(j);\n }\n };\n for (var i = index; i < grid.length; i++) {\n _loop_1(i);\n }\n });\n }\n return grid;\n };\n var MergingOperations = {\n merge: merge,\n unmerge: unmerge,\n splitRows: splitRows\n };\n\n var isSpanning = function (grid, row, col, comparator) {\n var candidate = GridRow.getCell(grid[row], col);\n var matching = curry(comparator, candidate.element());\n var currentRow = grid[row];\n return grid.length > 1 && GridRow.cellLength(currentRow) > 1 && (col > 0 && matching(GridRow.getCellElement(currentRow, col - 1)) || col < currentRow.cells().length - 1 && matching(GridRow.getCellElement(currentRow, col + 1)) || row > 0 && matching(GridRow.getCellElement(grid[row - 1], col)) || row < grid.length - 1 && matching(GridRow.getCellElement(grid[row + 1], col)));\n };\n var mergeTables = function (startAddress, gridA, gridB, generator, comparator) {\n var startRow = startAddress.row();\n var startCol = startAddress.column();\n var mergeHeight = gridB.length;\n var mergeWidth = GridRow.cellLength(gridB[0]);\n var endRow = startRow + mergeHeight;\n var endCol = startCol + mergeWidth;\n for (var r = startRow; r < endRow; r++) {\n for (var c = startCol; c < endCol; c++) {\n if (isSpanning(gridA, r, c, comparator)) {\n MergingOperations.unmerge(gridA, GridRow.getCellElement(gridA[r], c), comparator, generator.cell);\n }\n var newCell = GridRow.getCellElement(gridB[r - startRow], c - startCol);\n var replacement = generator.replace(newCell);\n GridRow.mutateCell(gridA[r], c, elementnew(replacement, true));\n }\n }\n return gridA;\n };\n var merge$1 = function (startAddress, gridA, gridB, generator, comparator) {\n var result = Fitment.measure(startAddress, gridA, gridB);\n return result.map(function (delta) {\n var fittedGrid = Fitment.tailor(gridA, delta, generator);\n return mergeTables(startAddress, fittedGrid, gridB, generator, comparator);\n });\n };\n var insert = function (index, gridA, gridB, generator, comparator) {\n MergingOperations.splitRows(gridA, index, comparator, generator.cell);\n var delta = Fitment.measureWidth(gridB, gridA);\n var fittedNewGrid = Fitment.tailor(gridB, delta, generator);\n var secondDelta = Fitment.measureWidth(gridA, fittedNewGrid);\n var fittedOldGrid = Fitment.tailor(gridA, secondDelta, generator);\n return fittedOldGrid.slice(0, index).concat(fittedNewGrid).concat(fittedOldGrid.slice(index, fittedOldGrid.length));\n };\n var TableMerge = {\n merge: merge$1,\n insert: insert\n };\n\n var insertRowAt = function (grid, index, example, comparator, substitution) {\n var before = grid.slice(0, index);\n var after = grid.slice(index);\n var between = GridRow.mapCells(grid[example], function (ex, c) {\n var withinSpan = index > 0 && index < grid.length && comparator(GridRow.getCellElement(grid[index - 1], c), GridRow.getCellElement(grid[index], c));\n var ret = withinSpan ? GridRow.getCell(grid[index], c) : elementnew(substitution(ex.element(), comparator), true);\n return ret;\n });\n return before.concat([between]).concat(after);\n };\n var insertColumnAt = function (grid, index, example, comparator, substitution) {\n return map(grid, function (row) {\n var withinSpan = index > 0 && index < GridRow.cellLength(row) && comparator(GridRow.getCellElement(row, index - 1), GridRow.getCellElement(row, index));\n var sub = withinSpan ? GridRow.getCell(row, index) : elementnew(substitution(GridRow.getCellElement(row, example), comparator), true);\n return GridRow.addCell(row, index, sub);\n });\n };\n var splitCellIntoColumns = function (grid, exampleRow, exampleCol, comparator, substitution) {\n var index = exampleCol + 1;\n return map(grid, function (row, i) {\n var isTargetCell = i === exampleRow;\n var sub = isTargetCell ? elementnew(substitution(GridRow.getCellElement(row, exampleCol), comparator), true) : GridRow.getCell(row, exampleCol);\n return GridRow.addCell(row, index, sub);\n });\n };\n var splitCellIntoRows = function (grid, exampleRow, exampleCol, comparator, substitution) {\n var index = exampleRow + 1;\n var before = grid.slice(0, index);\n var after = grid.slice(index);\n var between = GridRow.mapCells(grid[exampleRow], function (ex, i) {\n var isTargetCell = i === exampleCol;\n return isTargetCell ? elementnew(substitution(ex.element(), comparator), true) : ex;\n });\n return before.concat([between]).concat(after);\n };\n var deleteColumnsAt = function (grid, start, finish) {\n var rows = map(grid, function (row) {\n var cells = row.cells().slice(0, start).concat(row.cells().slice(finish + 1));\n return rowcells(cells, row.section());\n });\n return filter(rows, function (row) {\n return row.cells().length > 0;\n });\n };\n var deleteRowsAt = function (grid, start, finish) {\n return grid.slice(0, start).concat(grid.slice(finish + 1));\n };\n var ModificationOperations = {\n insertRowAt: insertRowAt,\n insertColumnAt: insertColumnAt,\n splitCellIntoColumns: splitCellIntoColumns,\n splitCellIntoRows: splitCellIntoRows,\n deleteRowsAt: deleteRowsAt,\n deleteColumnsAt: deleteColumnsAt\n };\n\n var replaceIn = function (grid, targets, comparator, substitution) {\n var isTarget = function (cell) {\n return exists(targets, function (target) {\n return comparator(cell.element(), target.element());\n });\n };\n return map(grid, function (row) {\n return GridRow.mapCells(row, function (cell) {\n return isTarget(cell) ? elementnew(substitution(cell.element(), comparator), true) : cell;\n });\n });\n };\n var notStartRow = function (grid, rowIndex, colIndex, comparator) {\n return GridRow.getCellElement(grid[rowIndex], colIndex) !== undefined && (rowIndex > 0 && comparator(GridRow.getCellElement(grid[rowIndex - 1], colIndex), GridRow.getCellElement(grid[rowIndex], colIndex)));\n };\n var notStartColumn = function (row, index, comparator) {\n return index > 0 && comparator(GridRow.getCellElement(row, index - 1), GridRow.getCellElement(row, index));\n };\n var replaceColumn = function (grid, index, comparator, substitution) {\n var targets = bind(grid, function (row, i) {\n var alreadyAdded = notStartRow(grid, i, index, comparator) || notStartColumn(row, index, comparator);\n return alreadyAdded ? [] : [GridRow.getCell(row, index)];\n });\n return replaceIn(grid, targets, comparator, substitution);\n };\n var replaceRow = function (grid, index, comparator, substitution) {\n var targetRow = grid[index];\n var targets = bind(targetRow.cells(), function (item, i) {\n var alreadyAdded = notStartRow(grid, index, i, comparator) || notStartColumn(targetRow, i, comparator);\n return alreadyAdded ? [] : [item];\n });\n return replaceIn(grid, targets, comparator, substitution);\n };\n var TransformOperations = {\n replaceColumn: replaceColumn,\n replaceRow: replaceRow\n };\n\n var adt = Adt.generate([\n { none: [] },\n { only: ['index'] },\n {\n left: [\n 'index',\n 'next'\n ]\n },\n {\n middle: [\n 'prev',\n 'index',\n 'next'\n ]\n },\n {\n right: [\n 'prev',\n 'index'\n ]\n }\n ]);\n var ColumnContext = __assign({}, adt);\n\n var neighbours$1 = function (input, index) {\n if (input.length === 0) {\n return ColumnContext.none();\n }\n if (input.length === 1) {\n return ColumnContext.only(0);\n }\n if (index === 0) {\n return ColumnContext.left(0, 1);\n }\n if (index === input.length - 1) {\n return ColumnContext.right(index - 1, index);\n }\n if (index > 0 && index < input.length - 1) {\n return ColumnContext.middle(index - 1, index, index + 1);\n }\n return ColumnContext.none();\n };\n var determine = function (input, column, step, tableSize) {\n var result = input.slice(0);\n var context = neighbours$1(input, column);\n var zero = function (array) {\n return map(array, constant(0));\n };\n var onNone = constant(zero(result));\n var onOnly = function (index) {\n return tableSize.singleColumnWidth(result[index], step);\n };\n var onChange = function (index, next) {\n if (step >= 0) {\n var newNext = Math.max(tableSize.minCellWidth(), result[next] - step);\n return zero(result.slice(0, index)).concat([\n step,\n newNext - result[next]\n ]).concat(zero(result.slice(next + 1)));\n } else {\n var newThis = Math.max(tableSize.minCellWidth(), result[index] + step);\n var diffx = result[index] - newThis;\n return zero(result.slice(0, index)).concat([\n newThis - result[index],\n diffx\n ]).concat(zero(result.slice(next + 1)));\n }\n };\n var onLeft = onChange;\n var onMiddle = function (_prev, index, next) {\n return onChange(index, next);\n };\n var onRight = function (_prev, index) {\n if (step >= 0) {\n return zero(result.slice(0, index)).concat([step]);\n } else {\n var size = Math.max(tableSize.minCellWidth(), result[index] + step);\n return zero(result.slice(0, index)).concat([size - result[index]]);\n }\n };\n return context.fold(onNone, onOnly, onLeft, onMiddle, onRight);\n };\n var Deltas = { determine: determine };\n\n var getSpan$1 = function (cell, type) {\n return has(cell, type) && parseInt(get(cell, type), 10) > 1;\n };\n var hasColspan = function (cell) {\n return getSpan$1(cell, 'colspan');\n };\n var hasRowspan = function (cell) {\n return getSpan$1(cell, 'rowspan');\n };\n var getInt = function (element, property) {\n return parseInt(get$1(element, property), 10);\n };\n var CellUtils = {\n hasColspan: hasColspan,\n hasRowspan: hasRowspan,\n minWidth: constant(10),\n minHeight: constant(10),\n getInt: getInt\n };\n\n var getRaw$1 = function (cell, property, getter) {\n return getRaw(cell, property).fold(function () {\n return getter(cell) + 'px';\n }, function (raw) {\n return raw;\n });\n };\n var getRawW = function (cell, tableSize) {\n return getRaw$1(cell, 'width', function (e) {\n return Sizes.getPixelWidth(e, tableSize);\n });\n };\n var getRawH = function (cell) {\n return getRaw$1(cell, 'height', Sizes.getHeight);\n };\n var getWidthFrom = function (warehouse, direction, getWidth, fallback, tableSize) {\n var columns = Blocks.columns(warehouse);\n var backups = map(columns, function (cellOption) {\n return cellOption.map(direction.edge);\n });\n return map(columns, function (cellOption, c) {\n var columnCell = cellOption.filter(not(CellUtils.hasColspan));\n return columnCell.fold(function () {\n var deduced = deduce(backups, c);\n return fallback(deduced);\n }, function (cell) {\n return getWidth(cell, tableSize);\n });\n });\n };\n var getDeduced = function (deduced) {\n return deduced.map(function (d) {\n return d + 'px';\n }).getOr('');\n };\n var getRawWidths = function (warehouse, direction, tableSize) {\n return getWidthFrom(warehouse, direction, getRawW, getDeduced, tableSize);\n };\n var getPercentageWidths = function (warehouse, direction, tableSize) {\n return getWidthFrom(warehouse, direction, Sizes.getPercentageWidth, function (deduced) {\n return deduced.fold(function () {\n return tableSize.minCellWidth();\n }, function (cellWidth) {\n return cellWidth / tableSize.pixelWidth() * 100;\n });\n }, tableSize);\n };\n var getPixelWidths = function (warehouse, direction, tableSize) {\n return getWidthFrom(warehouse, direction, Sizes.getPixelWidth, function (deduced) {\n return deduced.getOrThunk(tableSize.minCellWidth);\n }, tableSize);\n };\n var getHeightFrom = function (warehouse, direction, getHeight, fallback) {\n var rows = Blocks.rows(warehouse);\n var backups = map(rows, function (cellOption) {\n return cellOption.map(direction.edge);\n });\n return map(rows, function (cellOption, c) {\n var rowCell = cellOption.filter(not(CellUtils.hasRowspan));\n return rowCell.fold(function () {\n var deduced = deduce(backups, c);\n return fallback(deduced);\n }, function (cell) {\n return getHeight(cell);\n });\n });\n };\n var getPixelHeights = function (warehouse, direction) {\n return getHeightFrom(warehouse, direction, Sizes.getHeight, function (deduced) {\n return deduced.getOrThunk(CellUtils.minHeight);\n });\n };\n var getRawHeights = function (warehouse, direction) {\n return getHeightFrom(warehouse, direction, getRawH, getDeduced);\n };\n var ColumnSizes = {\n getRawWidths: getRawWidths,\n getPixelWidths: getPixelWidths,\n getPercentageWidths: getPercentageWidths,\n getPixelHeights: getPixelHeights,\n getRawHeights: getRawHeights\n };\n\n var total = function (start, end, measures) {\n var r = 0;\n for (var i = start; i < end; i++) {\n r += measures[i] !== undefined ? measures[i] : 0;\n }\n return r;\n };\n var recalculateWidth = function (warehouse, widths) {\n var all = Warehouse.justCells(warehouse);\n return map(all, function (cell) {\n var width = total(cell.column(), cell.column() + cell.colspan(), widths);\n return {\n element: cell.element,\n width: constant(width),\n colspan: cell.colspan\n };\n });\n };\n var recalculateHeight = function (warehouse, heights) {\n var all = Warehouse.justCells(warehouse);\n return map(all, function (cell) {\n var height = total(cell.row(), cell.row() + cell.rowspan(), heights);\n return {\n element: cell.element,\n height: constant(height),\n rowspan: cell.rowspan\n };\n });\n };\n var matchRowHeight = function (warehouse, heights) {\n return map(warehouse.all(), function (row, i) {\n return {\n element: row.element,\n height: constant(heights[i])\n };\n });\n };\n var Recalculations = {\n recalculateWidth: recalculateWidth,\n recalculateHeight: recalculateHeight,\n matchRowHeight: matchRowHeight\n };\n\n var percentageSize = function (width, element) {\n var floatWidth = parseFloat(width);\n var pixelWidth = get$4(element);\n var getCellDelta = function (delta) {\n return delta / pixelWidth * 100;\n };\n var singleColumnWidth = function (w, _delta) {\n return [100 - w];\n };\n var minCellWidth = function () {\n return CellUtils.minWidth() / pixelWidth * 100;\n };\n var setTableWidth = function (table, _newWidths, delta) {\n var ratio = delta / 100;\n var change = ratio * floatWidth;\n Sizes.setPercentageWidth(table, floatWidth + change);\n };\n return {\n width: constant(floatWidth),\n pixelWidth: constant(pixelWidth),\n getWidths: ColumnSizes.getPercentageWidths,\n getCellDelta: getCellDelta,\n singleColumnWidth: singleColumnWidth,\n minCellWidth: minCellWidth,\n setElementWidth: Sizes.setPercentageWidth,\n setTableWidth: setTableWidth\n };\n };\n var pixelSize = function (width) {\n var getCellDelta = identity;\n var singleColumnWidth = function (w, delta) {\n var newNext = Math.max(CellUtils.minWidth(), w + delta);\n return [newNext - w];\n };\n var setTableWidth = function (table, newWidths, _delta) {\n var total = foldr(newWidths, function (b, a) {\n return b + a;\n }, 0);\n Sizes.setPixelWidth(table, total);\n };\n return {\n width: constant(width),\n pixelWidth: constant(width),\n getWidths: ColumnSizes.getPixelWidths,\n getCellDelta: getCellDelta,\n singleColumnWidth: singleColumnWidth,\n minCellWidth: CellUtils.minWidth,\n setElementWidth: Sizes.setPixelWidth,\n setTableWidth: setTableWidth\n };\n };\n var chooseSize = function (element, width) {\n var percentMatch = Sizes.percentageBasedSizeRegex().exec(width);\n if (percentMatch !== null) {\n return percentageSize(percentMatch[1], element);\n }\n var pixelMatch = Sizes.pixelBasedSizeRegex().exec(width);\n if (pixelMatch !== null) {\n var intWidth = parseInt(pixelMatch[1], 10);\n return pixelSize(intWidth);\n }\n var fallbackWidth = get$4(element);\n return pixelSize(fallbackWidth);\n };\n var getTableSize = function (element) {\n var width = Sizes.getRawWidth(element);\n return width.fold(function () {\n var fallbackWidth = get$4(element);\n return pixelSize(fallbackWidth);\n }, function (w) {\n return chooseSize(element, w);\n });\n };\n var TableSize = { getTableSize: getTableSize };\n\n var getWarehouse$1 = function (list) {\n return Warehouse.generate(list);\n };\n var sumUp = function (newSize) {\n return foldr(newSize, function (b, a) {\n return b + a;\n }, 0);\n };\n var getTableWarehouse = function (table) {\n var list = DetailsList.fromTable(table);\n return getWarehouse$1(list);\n };\n var adjustWidth = function (table, delta, index, direction) {\n var tableSize = TableSize.getTableSize(table);\n var step = tableSize.getCellDelta(delta);\n var warehouse = getTableWarehouse(table);\n var widths = tableSize.getWidths(warehouse, direction, tableSize);\n var deltas = Deltas.determine(widths, index, step, tableSize);\n var newWidths = map(deltas, function (dx, i) {\n return dx + widths[i];\n });\n var newSizes = Recalculations.recalculateWidth(warehouse, newWidths);\n each(newSizes, function (cell) {\n tableSize.setElementWidth(cell.element(), cell.width());\n });\n if (index === warehouse.grid().columns() - 1) {\n tableSize.setTableWidth(table, newWidths, step);\n }\n };\n var adjustHeight = function (table, delta, index, direction) {\n var warehouse = getTableWarehouse(table);\n var heights = ColumnSizes.getPixelHeights(warehouse, direction);\n var newHeights = map(heights, function (dy, i) {\n return index === i ? Math.max(delta + dy, CellUtils.minHeight()) : dy;\n });\n var newCellSizes = Recalculations.recalculateHeight(warehouse, newHeights);\n var newRowSizes = Recalculations.matchRowHeight(warehouse, newHeights);\n each(newRowSizes, function (row) {\n Sizes.setHeight(row.element(), row.height());\n });\n each(newCellSizes, function (cell) {\n Sizes.setHeight(cell.element(), cell.height());\n });\n var total = sumUp(newHeights);\n Sizes.setHeight(table, total);\n };\n var adjustWidthTo = function (table, list, direction) {\n var tableSize = TableSize.getTableSize(table);\n var warehouse = getWarehouse$1(list);\n var widths = tableSize.getWidths(warehouse, direction, tableSize);\n var newSizes = Recalculations.recalculateWidth(warehouse, widths);\n each(newSizes, function (cell) {\n tableSize.setElementWidth(cell.element(), cell.width());\n });\n if (newSizes.length > 0) {\n tableSize.setTableWidth(table, widths, tableSize.getCellDelta(0));\n }\n };\n var Adjustments = {\n adjustWidth: adjustWidth,\n adjustHeight: adjustHeight,\n adjustWidthTo: adjustWidthTo\n };\n\n var Cell = function (initial) {\n var value = initial;\n var get = function () {\n return value;\n };\n var set = function (v) {\n value = v;\n };\n var clone = function () {\n return Cell(get());\n };\n return {\n get: get,\n set: set,\n clone: clone\n };\n };\n\n var base = function (handleUnsupported, required) {\n return baseWith(handleUnsupported, required, {\n validate: isFunction,\n label: 'function'\n });\n };\n var baseWith = function (handleUnsupported, required, pred) {\n if (required.length === 0) {\n throw new Error('You must specify at least one required field.');\n }\n validateStrArr('required', required);\n checkDupes(required);\n return function (obj) {\n var keys$1 = keys(obj);\n var allReqd = forall(required, function (req) {\n return contains(keys$1, req);\n });\n if (!allReqd) {\n reqMessage(required, keys$1);\n }\n handleUnsupported(required, keys$1);\n var invalidKeys = filter(required, function (key) {\n return !pred.validate(obj[key], key);\n });\n if (invalidKeys.length > 0) {\n invalidTypeMessage(invalidKeys, pred.label);\n }\n return obj;\n };\n };\n var handleExact = function (required, keys) {\n var unsupported = filter(keys, function (key) {\n return !contains(required, key);\n });\n if (unsupported.length > 0) {\n unsuppMessage(unsupported);\n }\n };\n var exactly = function (required) {\n return base(handleExact, required);\n };\n\n var verifyGenerators = exactly([\n 'cell',\n 'row',\n 'replace',\n 'gap'\n ]);\n var elementToData = function (element) {\n var colspan = has(element, 'colspan') ? parseInt(get(element, 'colspan'), 10) : 1;\n var rowspan = has(element, 'rowspan') ? parseInt(get(element, 'rowspan'), 10) : 1;\n return {\n element: constant(element),\n colspan: constant(colspan),\n rowspan: constant(rowspan)\n };\n };\n var modification = function (generators, toData) {\n if (toData === void 0) {\n toData = elementToData;\n }\n verifyGenerators(generators);\n var position = Cell(Option.none());\n var nu = function (data) {\n return generators.cell(data);\n };\n var nuFrom = function (element) {\n var data = toData(element);\n return nu(data);\n };\n var add = function (element) {\n var replacement = nuFrom(element);\n if (position.get().isNone()) {\n position.set(Option.some(replacement));\n }\n recent = Option.some({\n item: element,\n replacement: replacement\n });\n return replacement;\n };\n var recent = Option.none();\n var getOrInit = function (element, comparator) {\n return recent.fold(function () {\n return add(element);\n }, function (p) {\n return comparator(element, p.item) ? p.replacement : add(element);\n });\n };\n return {\n getOrInit: getOrInit,\n cursor: position.get\n };\n };\n var transform = function (scope, tag) {\n return function (generators) {\n var position = Cell(Option.none());\n verifyGenerators(generators);\n var list = [];\n var find$1 = function (element, comparator) {\n return find(list, function (x) {\n return comparator(x.item, element);\n });\n };\n var makeNew = function (element) {\n var attrs = { scope: scope };\n var cell = generators.replace(element, tag, attrs);\n list.push({\n item: element,\n sub: cell\n });\n if (position.get().isNone()) {\n position.set(Option.some(cell));\n }\n return cell;\n };\n var replaceOrInit = function (element, comparator) {\n return find$1(element, comparator).fold(function () {\n return makeNew(element);\n }, function (p) {\n return comparator(element, p.item) ? p.sub : makeNew(element);\n });\n };\n return {\n replaceOrInit: replaceOrInit,\n cursor: position.get\n };\n };\n };\n var merging = function (generators) {\n verifyGenerators(generators);\n var position = Cell(Option.none());\n var combine = function (cell) {\n if (position.get().isNone()) {\n position.set(Option.some(cell));\n }\n return function () {\n var raw = generators.cell({\n element: constant(cell),\n colspan: constant(1),\n rowspan: constant(1)\n });\n remove$1(raw, 'width');\n remove$1(cell, 'width');\n return raw;\n };\n };\n return {\n combine: combine,\n cursor: position.get\n };\n };\n var Generators = {\n modification: modification,\n transform: transform,\n merging: merging\n };\n\n var blockList = [\n 'body',\n 'p',\n 'div',\n 'article',\n 'aside',\n 'figcaption',\n 'figure',\n 'footer',\n 'header',\n 'nav',\n 'section',\n 'ol',\n 'ul',\n 'table',\n 'thead',\n 'tfoot',\n 'tbody',\n 'caption',\n 'tr',\n 'td',\n 'th',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'blockquote',\n 'pre',\n 'address'\n ];\n var isList = function (universe, item) {\n var tagName = universe.property().name(item);\n return contains([\n 'ol',\n 'ul'\n ], tagName);\n };\n var isBlock = function (universe, item) {\n var tagName = universe.property().name(item);\n return contains(blockList, tagName);\n };\n var isFormatting = function (universe, item) {\n var tagName = universe.property().name(item);\n return contains([\n 'address',\n 'pre',\n 'p',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6'\n ], tagName);\n };\n var isHeading = function (universe, item) {\n var tagName = universe.property().name(item);\n return contains([\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6'\n ], tagName);\n };\n var isContainer = function (universe, item) {\n return contains([\n 'div',\n 'li',\n 'td',\n 'th',\n 'blockquote',\n 'body',\n 'caption'\n ], universe.property().name(item));\n };\n var isEmptyTag = function (universe, item) {\n return contains([\n 'br',\n 'img',\n 'hr',\n 'input'\n ], universe.property().name(item));\n };\n var isFrame = function (universe, item) {\n return universe.property().name(item) === 'iframe';\n };\n var isInline = function (universe, item) {\n return !(isBlock(universe, item) || isEmptyTag(universe, item)) && universe.property().name(item) !== 'li';\n };\n var Structure = {\n isBlock: isBlock,\n isList: isList,\n isFormatting: isFormatting,\n isHeading: isHeading,\n isContainer: isContainer,\n isEmptyTag: isEmptyTag,\n isFrame: isFrame,\n isInline: isInline\n };\n\n var universe$1 = DomUniverse();\n var isBlock$1 = function (element) {\n return Structure.isBlock(universe$1, element);\n };\n var isList$1 = function (element) {\n return Structure.isList(universe$1, element);\n };\n var isFormatting$1 = function (element) {\n return Structure.isFormatting(universe$1, element);\n };\n var isHeading$1 = function (element) {\n return Structure.isHeading(universe$1, element);\n };\n var isContainer$1 = function (element) {\n return Structure.isContainer(universe$1, element);\n };\n var isEmptyTag$1 = function (element) {\n return Structure.isEmptyTag(universe$1, element);\n };\n var isFrame$1 = function (element) {\n return Structure.isFrame(universe$1, element);\n };\n var isInline$1 = function (element) {\n return Structure.isInline(universe$1, element);\n };\n var DomStructure = {\n isBlock: isBlock$1,\n isList: isList$1,\n isFormatting: isFormatting$1,\n isHeading: isHeading$1,\n isContainer: isContainer$1,\n isEmptyTag: isEmptyTag$1,\n isFrame: isFrame$1,\n isInline: isInline$1\n };\n\n var merge$2 = function (cells) {\n var isBr = function (el) {\n return name(el) === 'br';\n };\n var advancedBr = function (children) {\n return forall(children, function (c) {\n return isBr(c) || isText(c) && get$2(c).trim().length === 0;\n });\n };\n var isListItem = function (el) {\n return name(el) === 'li' || ancestor(el, DomStructure.isList).isSome();\n };\n var siblingIsBlock = function (el) {\n return nextSibling(el).map(function (rightSibling) {\n if (DomStructure.isBlock(rightSibling)) {\n return true;\n }\n if (DomStructure.isEmptyTag(rightSibling)) {\n return name(rightSibling) === 'img' ? false : true;\n }\n return false;\n }).getOr(false);\n };\n var markCell = function (cell) {\n return last$1(cell).bind(function (rightEdge) {\n var rightSiblingIsBlock = siblingIsBlock(rightEdge);\n return parent(rightEdge).map(function (parent) {\n return rightSiblingIsBlock === true || isListItem(parent) || isBr(rightEdge) || DomStructure.isBlock(parent) && !eq(cell, parent) ? [] : [Element.fromTag('br')];\n });\n }).getOr([]);\n };\n var markContent = function () {\n var content = bind(cells, function (cell) {\n var children$1 = children(cell);\n return advancedBr(children$1) ? [] : children$1.concat(markCell(cell));\n });\n return content.length === 0 ? [Element.fromTag('br')] : content;\n };\n var contents = markContent();\n empty(cells[0]);\n append$1(cells[0], contents);\n };\n var TableContent = { merge: merge$2 };\n\n var prune = function (table) {\n var cells = TableLookup.cells(table);\n if (cells.length === 0) {\n remove$2(table);\n }\n };\n var outcome = Immutable('grid', 'cursor');\n var elementFromGrid = function (grid, row, column) {\n return findIn(grid, row, column).orThunk(function () {\n return findIn(grid, 0, 0);\n });\n };\n var findIn = function (grid, row, column) {\n return Option.from(grid[row]).bind(function (r) {\n return Option.from(r.cells()[column]).bind(function (c) {\n return Option.from(c.element());\n });\n });\n };\n var bundle = function (grid, row, column) {\n return outcome(grid, findIn(grid, row, column));\n };\n var uniqueRows = function (details) {\n return foldl(details, function (rest, detail) {\n return exists(rest, function (currentDetail) {\n return currentDetail.row() === detail.row();\n }) ? rest : rest.concat([detail]);\n }, []).sort(function (detailA, detailB) {\n return detailA.row() - detailB.row();\n });\n };\n var uniqueColumns = function (details) {\n return foldl(details, function (rest, detail) {\n return exists(rest, function (currentDetail) {\n return currentDetail.column() === detail.column();\n }) ? rest : rest.concat([detail]);\n }, []).sort(function (detailA, detailB) {\n return detailA.column() - detailB.column();\n });\n };\n var insertRowBefore = function (grid, detail, comparator, genWrappers) {\n var example = detail.row();\n var targetIndex = detail.row();\n var newGrid = ModificationOperations.insertRowAt(grid, targetIndex, example, comparator, genWrappers.getOrInit);\n return bundle(newGrid, targetIndex, detail.column());\n };\n var insertRowsBefore = function (grid, details, comparator, genWrappers) {\n var example = details[0].row();\n var targetIndex = details[0].row();\n var rows = uniqueRows(details);\n var newGrid = foldl(rows, function (newG, _row) {\n return ModificationOperations.insertRowAt(newG, targetIndex, example, comparator, genWrappers.getOrInit);\n }, grid);\n return bundle(newGrid, targetIndex, details[0].column());\n };\n var insertRowAfter = function (grid, detail, comparator, genWrappers) {\n var example = detail.row();\n var targetIndex = detail.row() + detail.rowspan();\n var newGrid = ModificationOperations.insertRowAt(grid, targetIndex, example, comparator, genWrappers.getOrInit);\n return bundle(newGrid, targetIndex, detail.column());\n };\n var insertRowsAfter = function (grid, details, comparator, genWrappers) {\n var rows = uniqueRows(details);\n var example = rows[rows.length - 1].row();\n var targetIndex = rows[rows.length - 1].row() + rows[rows.length - 1].rowspan();\n var newGrid = foldl(rows, function (newG, _row) {\n return ModificationOperations.insertRowAt(newG, targetIndex, example, comparator, genWrappers.getOrInit);\n }, grid);\n return bundle(newGrid, targetIndex, details[0].column());\n };\n var insertColumnBefore = function (grid, detail, comparator, genWrappers) {\n var example = detail.column();\n var targetIndex = detail.column();\n var newGrid = ModificationOperations.insertColumnAt(grid, targetIndex, example, comparator, genWrappers.getOrInit);\n return bundle(newGrid, detail.row(), targetIndex);\n };\n var insertColumnsBefore = function (grid, details, comparator, genWrappers) {\n var columns = uniqueColumns(details);\n var example = columns[0].column();\n var targetIndex = columns[0].column();\n var newGrid = foldl(columns, function (newG, _row) {\n return ModificationOperations.insertColumnAt(newG, targetIndex, example, comparator, genWrappers.getOrInit);\n }, grid);\n return bundle(newGrid, details[0].row(), targetIndex);\n };\n var insertColumnAfter = function (grid, detail, comparator, genWrappers) {\n var example = detail.column();\n var targetIndex = detail.column() + detail.colspan();\n var newGrid = ModificationOperations.insertColumnAt(grid, targetIndex, example, comparator, genWrappers.getOrInit);\n return bundle(newGrid, detail.row(), targetIndex);\n };\n var insertColumnsAfter = function (grid, details, comparator, genWrappers) {\n var example = details[details.length - 1].column();\n var targetIndex = details[details.length - 1].column() + details[details.length - 1].colspan();\n var columns = uniqueColumns(details);\n var newGrid = foldl(columns, function (newG, _row) {\n return ModificationOperations.insertColumnAt(newG, targetIndex, example, comparator, genWrappers.getOrInit);\n }, grid);\n return bundle(newGrid, details[0].row(), targetIndex);\n };\n var makeRowHeader = function (grid, detail, comparator, genWrappers) {\n var newGrid = TransformOperations.replaceRow(grid, detail.row(), comparator, genWrappers.replaceOrInit);\n return bundle(newGrid, detail.row(), detail.column());\n };\n var makeColumnHeader = function (grid, detail, comparator, genWrappers) {\n var newGrid = TransformOperations.replaceColumn(grid, detail.column(), comparator, genWrappers.replaceOrInit);\n return bundle(newGrid, detail.row(), detail.column());\n };\n var unmakeRowHeader = function (grid, detail, comparator, genWrappers) {\n var newGrid = TransformOperations.replaceRow(grid, detail.row(), comparator, genWrappers.replaceOrInit);\n return bundle(newGrid, detail.row(), detail.column());\n };\n var unmakeColumnHeader = function (grid, detail, comparator, genWrappers) {\n var newGrid = TransformOperations.replaceColumn(grid, detail.column(), comparator, genWrappers.replaceOrInit);\n return bundle(newGrid, detail.row(), detail.column());\n };\n var splitCellIntoColumns$1 = function (grid, detail, comparator, genWrappers) {\n var newGrid = ModificationOperations.splitCellIntoColumns(grid, detail.row(), detail.column(), comparator, genWrappers.getOrInit);\n return bundle(newGrid, detail.row(), detail.column());\n };\n var splitCellIntoRows$1 = function (grid, detail, comparator, genWrappers) {\n var newGrid = ModificationOperations.splitCellIntoRows(grid, detail.row(), detail.column(), comparator, genWrappers.getOrInit);\n return bundle(newGrid, detail.row(), detail.column());\n };\n var eraseColumns = function (grid, details, _comparator, _genWrappers) {\n var columns = uniqueColumns(details);\n var newGrid = ModificationOperations.deleteColumnsAt(grid, columns[0].column(), columns[columns.length - 1].column());\n var cursor = elementFromGrid(newGrid, details[0].row(), details[0].column());\n return outcome(newGrid, cursor);\n };\n var eraseRows = function (grid, details, _comparator, _genWrappers) {\n var rows = uniqueRows(details);\n var newGrid = ModificationOperations.deleteRowsAt(grid, rows[0].row(), rows[rows.length - 1].row());\n var cursor = elementFromGrid(newGrid, details[0].row(), details[0].column());\n return outcome(newGrid, cursor);\n };\n var mergeCells = function (grid, mergable, comparator, _genWrappers) {\n var cells = mergable.cells();\n TableContent.merge(cells);\n var newGrid = MergingOperations.merge(grid, mergable.bounds(), comparator, constant(cells[0]));\n return outcome(newGrid, Option.from(cells[0]));\n };\n var unmergeCells = function (grid, unmergable, comparator, genWrappers) {\n var newGrid = foldr(unmergable, function (b, cell) {\n return MergingOperations.unmerge(b, cell, comparator, genWrappers.combine(cell));\n }, grid);\n return outcome(newGrid, Option.from(unmergable[0]));\n };\n var pasteCells = function (grid, pasteDetails, comparator, _genWrappers) {\n var gridify = function (table, generators) {\n var list = DetailsList.fromTable(table);\n var wh = Warehouse.generate(list);\n return Transitions.toGrid(wh, generators, true);\n };\n var gridB = gridify(pasteDetails.clipboard(), pasteDetails.generators());\n var startAddress = address(pasteDetails.row(), pasteDetails.column());\n var mergedGrid = TableMerge.merge(startAddress, grid, gridB, pasteDetails.generators(), comparator);\n return mergedGrid.fold(function () {\n return outcome(grid, Option.some(pasteDetails.element()));\n }, function (nuGrid) {\n var cursor = elementFromGrid(nuGrid, pasteDetails.row(), pasteDetails.column());\n return outcome(nuGrid, cursor);\n });\n };\n var gridifyRows = function (rows, generators, example) {\n var pasteDetails = DetailsList.fromPastedRows(rows, example);\n var wh = Warehouse.generate(pasteDetails);\n return Transitions.toGrid(wh, generators, true);\n };\n var pasteRowsBefore = function (grid, pasteDetails, comparator, _genWrappers) {\n var example = grid[pasteDetails.cells[0].row()];\n var index = pasteDetails.cells[0].row();\n var gridB = gridifyRows(pasteDetails.clipboard(), pasteDetails.generators(), example);\n var mergedGrid = TableMerge.insert(index, grid, gridB, pasteDetails.generators(), comparator);\n var cursor = elementFromGrid(mergedGrid, pasteDetails.cells[0].row(), pasteDetails.cells[0].column());\n return outcome(mergedGrid, cursor);\n };\n var pasteRowsAfter = function (grid, pasteDetails, comparator, _genWrappers) {\n var example = grid[pasteDetails.cells[0].row()];\n var index = pasteDetails.cells[pasteDetails.cells.length - 1].row() + pasteDetails.cells[pasteDetails.cells.length - 1].rowspan();\n var gridB = gridifyRows(pasteDetails.clipboard(), pasteDetails.generators(), example);\n var mergedGrid = TableMerge.insert(index, grid, gridB, pasteDetails.generators(), comparator);\n var cursor = elementFromGrid(mergedGrid, pasteDetails.cells[0].row(), pasteDetails.cells[0].column());\n return outcome(mergedGrid, cursor);\n };\n var resize = Adjustments.adjustWidthTo;\n var TableOperations = {\n insertRowBefore: run(insertRowBefore, onCell, noop, noop, Generators.modification),\n insertRowsBefore: run(insertRowsBefore, onCells, noop, noop, Generators.modification),\n insertRowAfter: run(insertRowAfter, onCell, noop, noop, Generators.modification),\n insertRowsAfter: run(insertRowsAfter, onCells, noop, noop, Generators.modification),\n insertColumnBefore: run(insertColumnBefore, onCell, resize, noop, Generators.modification),\n insertColumnsBefore: run(insertColumnsBefore, onCells, resize, noop, Generators.modification),\n insertColumnAfter: run(insertColumnAfter, onCell, resize, noop, Generators.modification),\n insertColumnsAfter: run(insertColumnsAfter, onCells, resize, noop, Generators.modification),\n splitCellIntoColumns: run(splitCellIntoColumns$1, onCell, resize, noop, Generators.modification),\n splitCellIntoRows: run(splitCellIntoRows$1, onCell, noop, noop, Generators.modification),\n eraseColumns: run(eraseColumns, onCells, resize, prune, Generators.modification),\n eraseRows: run(eraseRows, onCells, noop, prune, Generators.modification),\n makeColumnHeader: run(makeColumnHeader, onCell, noop, noop, Generators.transform('row', 'th')),\n unmakeColumnHeader: run(unmakeColumnHeader, onCell, noop, noop, Generators.transform(null, 'td')),\n makeRowHeader: run(makeRowHeader, onCell, noop, noop, Generators.transform('col', 'th')),\n unmakeRowHeader: run(unmakeRowHeader, onCell, noop, noop, Generators.transform(null, 'td')),\n mergeCells: run(mergeCells, onMergable, noop, noop, Generators.merging),\n unmergeCells: run(unmergeCells, onUnmergable, resize, noop, Generators.merging),\n pasteCells: run(pasteCells, onPaste, resize, noop, Generators.modification),\n pasteRowsBefore: run(pasteRowsBefore, onPasteRows, noop, noop, Generators.modification),\n pasteRowsAfter: run(pasteRowsAfter, onPasteRows, noop, noop, Generators.modification)\n };\n\n var getBody$1 = function (editor) {\n return Element.fromDom(editor.getBody());\n };\n var getPixelWidth$1 = function (elm) {\n return elm.getBoundingClientRect().width;\n };\n var getPixelHeight = function (elm) {\n return elm.getBoundingClientRect().height;\n };\n var getIsRoot = function (editor) {\n return function (element) {\n return eq(element, getBody$1(editor));\n };\n };\n var removePxSuffix = function (size) {\n return size ? size.replace(/px$/, '') : '';\n };\n var addSizeSuffix = function (size) {\n if (/^[0-9]+$/.test(size)) {\n size += 'px';\n }\n return size;\n };\n var removeDataStyle = function (table) {\n var dataStyleCells = descendants$1(table, 'td[data-mce-style],th[data-mce-style]');\n remove(table, 'data-mce-style');\n each(dataStyleCells, function (cell) {\n remove(cell, 'data-mce-style');\n });\n };\n\n var getDirection = function (element) {\n return get$1(element, 'direction') === 'rtl' ? 'rtl' : 'ltr';\n };\n\n var ltr$1 = { isRtl: constant(false) };\n var rtl$1 = { isRtl: constant(true) };\n var directionAt = function (element) {\n var dir = getDirection(element);\n return dir === 'rtl' ? rtl$1 : ltr$1;\n };\n var Direction = { directionAt: directionAt };\n\n var defaultTableToolbar = [\n 'tableprops',\n 'tabledelete',\n '|',\n 'tableinsertrowbefore',\n 'tableinsertrowafter',\n 'tabledeleterow',\n '|',\n 'tableinsertcolbefore',\n 'tableinsertcolafter',\n 'tabledeletecol'\n ];\n var defaultStyles = {\n 'border-collapse': 'collapse',\n 'width': '100%'\n };\n var defaultAttributes = { border: '1' };\n var getDefaultAttributes = function (editor) {\n return editor.getParam('table_default_attributes', defaultAttributes, 'object');\n };\n var getDefaultStyles = function (editor) {\n return editor.getParam('table_default_styles', defaultStyles, 'object');\n };\n var hasTableResizeBars = function (editor) {\n return editor.getParam('table_resize_bars', true, 'boolean');\n };\n var hasTabNavigation = function (editor) {\n return editor.getParam('table_tab_navigation', true, 'boolean');\n };\n var hasAdvancedCellTab = function (editor) {\n return editor.getParam('table_cell_advtab', true, 'boolean');\n };\n var hasAdvancedRowTab = function (editor) {\n return editor.getParam('table_row_advtab', true, 'boolean');\n };\n var hasAdvancedTableTab = function (editor) {\n return editor.getParam('table_advtab', true, 'boolean');\n };\n var hasAppearanceOptions = function (editor) {\n return editor.getParam('table_appearance_options', true, 'boolean');\n };\n var hasTableGrid = function (editor) {\n return editor.getParam('table_grid', true, 'boolean');\n };\n var shouldStyleWithCss = function (editor) {\n return editor.getParam('table_style_by_css', false, 'boolean');\n };\n var getCellClassList = function (editor) {\n return editor.getParam('table_cell_class_list', [], 'array');\n };\n var getRowClassList = function (editor) {\n return editor.getParam('table_row_class_list', [], 'array');\n };\n var getTableClassList = function (editor) {\n return editor.getParam('table_class_list', [], 'array');\n };\n var getColorPickerCallback = function (editor) {\n return editor.getParam('color_picker_callback');\n };\n var isPixelsForced = function (editor) {\n return editor.getParam('table_responsive_width') === false;\n };\n var getCloneElements = function (editor) {\n var cloneElements = editor.getParam('table_clone_elements');\n if (isString(cloneElements)) {\n return Option.some(cloneElements.split(/[ ,]/));\n } else if (Array.isArray(cloneElements)) {\n return Option.some(cloneElements);\n } else {\n return Option.none();\n }\n };\n var hasObjectResizing = function (editor) {\n var objectResizing = editor.getParam('object_resizing', true);\n return objectResizing === 'table' || objectResizing;\n };\n var getToolbar = function (editor) {\n var toolbar = editor.getParam('table_toolbar', defaultTableToolbar);\n if (toolbar === '' || toolbar === false) {\n return [];\n } else if (isString(toolbar)) {\n return toolbar.split(/[ ,]/);\n } else if (isArray(toolbar)) {\n return toolbar;\n } else {\n return [];\n }\n };\n\n var fireNewRow = function (editor, row) {\n return editor.fire('newrow', { node: row });\n };\n var fireNewCell = function (editor, cell) {\n return editor.fire('newcell', { node: cell });\n };\n var fireObjectResizeStart = function (editor, target, width, height) {\n editor.fire('ObjectResizeStart', {\n target: target,\n width: width,\n height: height\n });\n };\n var fireObjectResized = function (editor, target, width, height) {\n editor.fire('ObjectResized', {\n target: target,\n width: width,\n height: height\n });\n };\n\n var TableActions = function (editor, lazyWire) {\n var isTableBody = function (editor) {\n return name(getBody$1(editor)) === 'table';\n };\n var lastRowGuard = function (table) {\n var size = TableGridSize.getGridSize(table);\n return isTableBody(editor) === false || size.rows() > 1;\n };\n var lastColumnGuard = function (table) {\n var size = TableGridSize.getGridSize(table);\n return isTableBody(editor) === false || size.columns() > 1;\n };\n var cloneFormats = getCloneElements(editor);\n var execute = function (operation, guard, mutate, lazyWire) {\n return function (table, target) {\n removeDataStyle(table);\n var wire = lazyWire();\n var doc = Element.fromDom(editor.getDoc());\n var direction = TableDirection(Direction.directionAt);\n var generators = TableFill.cellOperations(mutate, doc, cloneFormats);\n return guard(table) ? operation(wire, table, target, generators, direction).bind(function (result) {\n each(result.newRows(), function (row) {\n fireNewRow(editor, row.dom());\n });\n each(result.newCells(), function (cell) {\n fireNewCell(editor, cell.dom());\n });\n return result.cursor().map(function (cell) {\n var rng = editor.dom.createRng();\n rng.setStart(cell.dom(), 0);\n rng.setEnd(cell.dom(), 0);\n return rng;\n });\n }) : Option.none();\n };\n };\n var deleteRow = execute(TableOperations.eraseRows, lastRowGuard, noop, lazyWire);\n var deleteColumn = execute(TableOperations.eraseColumns, lastColumnGuard, noop, lazyWire);\n var insertRowsBefore = execute(TableOperations.insertRowsBefore, always, noop, lazyWire);\n var insertRowsAfter = execute(TableOperations.insertRowsAfter, always, noop, lazyWire);\n var insertColumnsBefore = execute(TableOperations.insertColumnsBefore, always, CellMutations.halve, lazyWire);\n var insertColumnsAfter = execute(TableOperations.insertColumnsAfter, always, CellMutations.halve, lazyWire);\n var mergeCells = execute(TableOperations.mergeCells, always, noop, lazyWire);\n var unmergeCells = execute(TableOperations.unmergeCells, always, noop, lazyWire);\n var pasteRowsBefore = execute(TableOperations.pasteRowsBefore, always, noop, lazyWire);\n var pasteRowsAfter = execute(TableOperations.pasteRowsAfter, always, noop, lazyWire);\n var pasteCells = execute(TableOperations.pasteCells, always, noop, lazyWire);\n return {\n deleteRow: deleteRow,\n deleteColumn: deleteColumn,\n insertRowsBefore: insertRowsBefore,\n insertRowsAfter: insertRowsAfter,\n insertColumnsBefore: insertColumnsBefore,\n insertColumnsAfter: insertColumnsAfter,\n mergeCells: mergeCells,\n unmergeCells: unmergeCells,\n pasteRowsBefore: pasteRowsBefore,\n pasteRowsAfter: pasteRowsAfter,\n pasteCells: pasteCells\n };\n };\n\n var copyRows = function (table, target, generators) {\n var list = DetailsList.fromTable(table);\n var house = Warehouse.generate(list);\n var details = onCells(house, target);\n return details.map(function (selectedCells) {\n var grid = Transitions.toGrid(house, generators, false);\n var slicedGrid = grid.slice(selectedCells[0].row(), selectedCells[selectedCells.length - 1].row() + selectedCells[selectedCells.length - 1].rowspan());\n var slicedDetails = toDetailList(slicedGrid, generators);\n return Redraw.copy(slicedDetails);\n });\n };\n var CopyRows = { copyRows: copyRows };\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n var getTDTHOverallStyle = function (dom, elm, name) {\n var cells = dom.select('td,th', elm);\n var firstChildStyle;\n var checkChildren = function (firstChildStyle, elms) {\n for (var i = 0; i < elms.length; i++) {\n var currentStyle = dom.getStyle(elms[i], name);\n if (typeof firstChildStyle === 'undefined') {\n firstChildStyle = currentStyle;\n }\n if (firstChildStyle !== currentStyle) {\n return '';\n }\n }\n return firstChildStyle;\n };\n firstChildStyle = checkChildren(firstChildStyle, cells);\n return firstChildStyle;\n };\n var applyAlign = function (editor, elm, name) {\n if (name) {\n editor.formatter.apply('align' + name, {}, elm);\n }\n };\n var applyVAlign = function (editor, elm, name) {\n if (name) {\n editor.formatter.apply('valign' + name, {}, elm);\n }\n };\n var unApplyAlign = function (editor, elm) {\n global$1.each('left center right'.split(' '), function (name) {\n editor.formatter.remove('align' + name, {}, elm);\n });\n };\n var unApplyVAlign = function (editor, elm) {\n global$1.each('top middle bottom'.split(' '), function (name) {\n editor.formatter.remove('valign' + name, {}, elm);\n });\n };\n var Styles$1 = {\n applyAlign: applyAlign,\n applyVAlign: applyVAlign,\n unApplyAlign: unApplyAlign,\n unApplyVAlign: unApplyVAlign,\n getTDTHOverallStyle: getTDTHOverallStyle\n };\n\n var buildListItems = function (inputList, itemCallback, startItems) {\n var appendItems = function (values, output) {\n output = output || [];\n global$1.each(values, function (item) {\n var menuItem = { text: item.text || item.title };\n if (item.menu) {\n menuItem.menu = appendItems(item.menu);\n } else {\n menuItem.value = item.value;\n if (itemCallback) {\n itemCallback(menuItem);\n }\n }\n output.push(menuItem);\n });\n return output;\n };\n return appendItems(inputList, startItems || []);\n };\n function styleFieldHasFocus(e) {\n return e.control.rootControl.find('#style')[0].getEl().isEqualNode(domGlobals.document.activeElement);\n }\n var syncAdvancedStyleFields = function (editor, evt) {\n if (styleFieldHasFocus(evt)) {\n updateAdvancedFields(editor, evt);\n } else {\n updateStyleField(editor, evt);\n }\n };\n var updateStyleField = function (editor, evt) {\n var dom = editor.dom;\n var rootControl = evt.control.rootControl;\n var data = rootControl.toJSON();\n var css = dom.parseStyle(data.style);\n css['border-style'] = data.borderStyle;\n css['border-color'] = data.borderColor;\n css['background-color'] = data.backgroundColor;\n css.width = data.width ? addSizeSuffix(data.width) : '';\n css.height = data.height ? addSizeSuffix(data.height) : '';\n rootControl.find('#style').value(dom.serializeStyle(dom.parseStyle(dom.serializeStyle(css))));\n };\n var updateAdvancedFields = function (editor, evt) {\n var dom = editor.dom;\n var rootControl = evt.control.rootControl;\n var data = rootControl.toJSON();\n var css = dom.parseStyle(data.style);\n rootControl.find('#borderStyle').value(css['border-style'] || '');\n rootControl.find('#borderColor').value(css['border-color'] || '');\n rootControl.find('#backgroundColor').value(css['background-color'] || '');\n rootControl.find('#width').value(css.width || '');\n rootControl.find('#height').value(css.height || '');\n };\n var extractAdvancedStyles = function (dom, elm) {\n var css = dom.parseStyle(dom.getAttrib(elm, 'style'));\n var data = {};\n if (css['border-style']) {\n data.borderStyle = css['border-style'];\n }\n if (css['border-color']) {\n data.borderColor = css['border-color'];\n }\n if (css['background-color']) {\n data.backgroundColor = css['background-color'];\n }\n data.style = dom.serializeStyle(css);\n return data;\n };\n var createStyleForm = function (editor) {\n var createColorPickAction = function () {\n var colorPickerCallback = getColorPickerCallback(editor);\n if (colorPickerCallback) {\n return function (evt) {\n return colorPickerCallback.call(editor, function (value) {\n evt.control.value(value).fire('change');\n }, evt.control.value());\n };\n }\n };\n return {\n title: 'Advanced',\n type: 'form',\n defaults: { onchange: curry(updateStyleField, editor) },\n items: [\n {\n label: 'Style',\n name: 'style',\n type: 'textbox',\n onchange: curry(updateAdvancedFields, editor)\n },\n {\n type: 'form',\n padding: 0,\n formItemDefaults: {\n layout: 'grid',\n alignH: [\n 'start',\n 'right'\n ]\n },\n defaults: { size: 7 },\n items: [\n {\n label: 'Border style',\n type: 'listbox',\n name: 'borderStyle',\n width: 90,\n onselect: curry(updateStyleField, editor),\n values: [\n {\n text: 'Select...',\n value: ''\n },\n {\n text: 'Solid',\n value: 'solid'\n },\n {\n text: 'Dotted',\n value: 'dotted'\n },\n {\n text: 'Dashed',\n value: 'dashed'\n },\n {\n text: 'Double',\n value: 'double'\n },\n {\n text: 'Groove',\n value: 'groove'\n },\n {\n text: 'Ridge',\n value: 'ridge'\n },\n {\n text: 'Inset',\n value: 'inset'\n },\n {\n text: 'Outset',\n value: 'outset'\n },\n {\n text: 'None',\n value: 'none'\n },\n {\n text: 'Hidden',\n value: 'hidden'\n }\n ]\n },\n {\n label: 'Border color',\n type: 'colorbox',\n name: 'borderColor',\n onaction: createColorPickAction()\n },\n {\n label: 'Background color',\n type: 'colorbox',\n name: 'backgroundColor',\n onaction: createColorPickAction()\n }\n ]\n }\n ]\n };\n };\n var Helpers = {\n createStyleForm: createStyleForm,\n buildListItems: buildListItems,\n updateStyleField: updateStyleField,\n extractAdvancedStyles: extractAdvancedStyles,\n updateAdvancedFields: updateAdvancedFields,\n syncAdvancedStyleFields: syncAdvancedStyleFields\n };\n\n var updateStyles = function (elm, cssText) {\n delete elm.dataset.mceStyle;\n elm.style.cssText += ';' + cssText;\n };\n var extractDataFromElement = function (editor, elm) {\n var dom = editor.dom;\n var data = {\n width: dom.getStyle(elm, 'width') || dom.getAttrib(elm, 'width'),\n height: dom.getStyle(elm, 'height') || dom.getAttrib(elm, 'height'),\n scope: dom.getAttrib(elm, 'scope'),\n class: dom.getAttrib(elm, 'class'),\n type: elm.nodeName.toLowerCase(),\n style: '',\n align: '',\n valign: ''\n };\n global$1.each('left center right'.split(' '), function (name) {\n if (editor.formatter.matchNode(elm, 'align' + name)) {\n data.align = name;\n }\n });\n global$1.each('top middle bottom'.split(' '), function (name) {\n if (editor.formatter.matchNode(elm, 'valign' + name)) {\n data.valign = name;\n }\n });\n if (hasAdvancedCellTab(editor)) {\n global$1.extend(data, Helpers.extractAdvancedStyles(dom, elm));\n }\n return data;\n };\n var onSubmitCellForm = function (editor, cells, evt) {\n var dom = editor.dom;\n var data;\n function setAttrib(elm, name, value) {\n if (cells.length === 1 || value) {\n dom.setAttrib(elm, name, value);\n }\n }\n function setStyle(elm, name, value) {\n if (cells.length === 1 || value) {\n dom.setStyle(elm, name, value);\n }\n }\n if (hasAdvancedCellTab(editor)) {\n Helpers.syncAdvancedStyleFields(editor, evt);\n }\n data = evt.control.rootControl.toJSON();\n editor.undoManager.transact(function () {\n global$1.each(cells, function (cellElm) {\n setAttrib(cellElm, 'scope', data.scope);\n if (cells.length === 1) {\n setAttrib(cellElm, 'style', data.style);\n } else {\n updateStyles(cellElm, data.style);\n }\n setAttrib(cellElm, 'class', data.class);\n setStyle(cellElm, 'width', addSizeSuffix(data.width));\n setStyle(cellElm, 'height', addSizeSuffix(data.height));\n if (data.type && cellElm.nodeName.toLowerCase() !== data.type) {\n cellElm = dom.rename(cellElm, data.type);\n }\n if (cells.length === 1) {\n Styles$1.unApplyAlign(editor, cellElm);\n Styles$1.unApplyVAlign(editor, cellElm);\n }\n if (data.align) {\n Styles$1.applyAlign(editor, cellElm, data.align);\n }\n if (data.valign) {\n Styles$1.applyVAlign(editor, cellElm, data.valign);\n }\n });\n editor.focus();\n });\n };\n var open = function (editor) {\n var cellElm, data, classListCtrl, cells = [];\n cells = editor.dom.select('td[data-mce-selected],th[data-mce-selected]');\n cellElm = editor.dom.getParent(editor.selection.getStart(), 'td,th');\n if (!cells.length && cellElm) {\n cells.push(cellElm);\n }\n cellElm = cellElm || cells[0];\n if (!cellElm) {\n return;\n }\n if (cells.length > 1) {\n data = {\n width: '',\n height: '',\n scope: '',\n class: '',\n align: '',\n valign: '',\n style: '',\n type: cellElm.nodeName.toLowerCase()\n };\n } else {\n data = extractDataFromElement(editor, cellElm);\n }\n if (getCellClassList(editor).length > 0) {\n classListCtrl = {\n name: 'class',\n type: 'listbox',\n label: 'Class',\n values: Helpers.buildListItems(getCellClassList(editor), function (item) {\n if (item.value) {\n item.textStyle = function () {\n return editor.formatter.getCssText({\n block: 'td',\n classes: [item.value]\n });\n };\n }\n })\n };\n }\n var generalCellForm = {\n type: 'form',\n layout: 'flex',\n direction: 'column',\n labelGapCalc: 'children',\n padding: 0,\n items: [\n {\n type: 'form',\n layout: 'grid',\n columns: 2,\n labelGapCalc: false,\n padding: 0,\n defaults: {\n type: 'textbox',\n maxWidth: 50\n },\n items: [\n {\n label: 'Width',\n name: 'width',\n onchange: curry(Helpers.updateStyleField, editor)\n },\n {\n label: 'Height',\n name: 'height',\n onchange: curry(Helpers.updateStyleField, editor)\n },\n {\n label: 'Cell type',\n name: 'type',\n type: 'listbox',\n text: 'None',\n minWidth: 90,\n maxWidth: null,\n values: [\n {\n text: 'Cell',\n value: 'td'\n },\n {\n text: 'Header cell',\n value: 'th'\n }\n ]\n },\n {\n label: 'Scope',\n name: 'scope',\n type: 'listbox',\n text: 'None',\n minWidth: 90,\n maxWidth: null,\n values: [\n {\n text: 'None',\n value: ''\n },\n {\n text: 'Row',\n value: 'row'\n },\n {\n text: 'Column',\n value: 'col'\n },\n {\n text: 'Row group',\n value: 'rowgroup'\n },\n {\n text: 'Column group',\n value: 'colgroup'\n }\n ]\n },\n {\n label: 'H Align',\n name: 'align',\n type: 'listbox',\n text: 'None',\n minWidth: 90,\n maxWidth: null,\n values: [\n {\n text: 'None',\n value: ''\n },\n {\n text: 'Left',\n value: 'left'\n },\n {\n text: 'Center',\n value: 'center'\n },\n {\n text: 'Right',\n value: 'right'\n }\n ]\n },\n {\n label: 'V Align',\n name: 'valign',\n type: 'listbox',\n text: 'None',\n minWidth: 90,\n maxWidth: null,\n values: [\n {\n text: 'None',\n value: ''\n },\n {\n text: 'Top',\n value: 'top'\n },\n {\n text: 'Middle',\n value: 'middle'\n },\n {\n text: 'Bottom',\n value: 'bottom'\n }\n ]\n }\n ]\n },\n classListCtrl\n ]\n };\n if (hasAdvancedCellTab(editor)) {\n editor.windowManager.open({\n title: 'Cell properties',\n bodyType: 'tabpanel',\n data: data,\n body: [\n {\n title: 'General',\n type: 'form',\n items: generalCellForm\n },\n Helpers.createStyleForm(editor)\n ],\n onsubmit: curry(onSubmitCellForm, editor, cells)\n });\n } else {\n editor.windowManager.open({\n title: 'Cell properties',\n data: data,\n body: generalCellForm,\n onsubmit: curry(onSubmitCellForm, editor, cells)\n });\n }\n };\n var CellDialog = { open: open };\n\n var extractDataFromElement$1 = function (editor, elm) {\n var dom = editor.dom;\n var data = {\n height: dom.getStyle(elm, 'height') || dom.getAttrib(elm, 'height'),\n scope: dom.getAttrib(elm, 'scope'),\n class: dom.getAttrib(elm, 'class'),\n align: '',\n style: '',\n type: elm.parentNode.nodeName.toLowerCase()\n };\n global$1.each('left center right'.split(' '), function (name) {\n if (editor.formatter.matchNode(elm, 'align' + name)) {\n data.align = name;\n }\n });\n if (hasAdvancedRowTab(editor)) {\n global$1.extend(data, Helpers.extractAdvancedStyles(dom, elm));\n }\n return data;\n };\n var switchRowType = function (dom, rowElm, toType) {\n var tableElm = dom.getParent(rowElm, 'table');\n var oldParentElm = rowElm.parentNode;\n var parentElm = dom.select(toType, tableElm)[0];\n if (!parentElm) {\n parentElm = dom.create(toType);\n if (tableElm.firstChild) {\n if (tableElm.firstChild.nodeName === 'CAPTION') {\n dom.insertAfter(parentElm, tableElm.firstChild);\n } else {\n tableElm.insertBefore(parentElm, tableElm.firstChild);\n }\n } else {\n tableElm.appendChild(parentElm);\n }\n }\n parentElm.appendChild(rowElm);\n if (!oldParentElm.hasChildNodes()) {\n dom.remove(oldParentElm);\n }\n };\n function onSubmitRowForm(editor, rows, oldData, evt) {\n var dom = editor.dom;\n function setAttrib(elm, name, value) {\n if (rows.length === 1 || value) {\n dom.setAttrib(elm, name, value);\n }\n }\n function setStyle(elm, name, value) {\n if (rows.length === 1 || value) {\n dom.setStyle(elm, name, value);\n }\n }\n if (hasAdvancedRowTab(editor)) {\n Helpers.syncAdvancedStyleFields(editor, evt);\n }\n var data = evt.control.rootControl.toJSON();\n editor.undoManager.transact(function () {\n global$1.each(rows, function (rowElm) {\n setAttrib(rowElm, 'scope', data.scope);\n setAttrib(rowElm, 'style', data.style);\n setAttrib(rowElm, 'class', data.class);\n setStyle(rowElm, 'height', addSizeSuffix(data.height));\n if (data.type !== rowElm.parentNode.nodeName.toLowerCase()) {\n switchRowType(editor.dom, rowElm, data.type);\n }\n if (data.align !== oldData.align) {\n Styles$1.unApplyAlign(editor, rowElm);\n Styles$1.applyAlign(editor, rowElm, data.align);\n }\n });\n editor.focus();\n });\n }\n var open$1 = function (editor) {\n var dom = editor.dom;\n var tableElm, cellElm, rowElm, classListCtrl, data;\n var rows = [];\n var generalRowForm;\n tableElm = dom.getParent(editor.selection.getStart(), 'table');\n cellElm = dom.getParent(editor.selection.getStart(), 'td,th');\n global$1.each(tableElm.rows, function (row) {\n global$1.each(row.cells, function (cell) {\n if (dom.getAttrib(cell, 'data-mce-selected') || cell === cellElm) {\n rows.push(row);\n return false;\n }\n });\n });\n rowElm = rows[0];\n if (!rowElm) {\n return;\n }\n if (rows.length > 1) {\n data = {\n height: '',\n scope: '',\n style: '',\n class: '',\n align: '',\n type: rowElm.parentNode.nodeName.toLowerCase()\n };\n } else {\n data = extractDataFromElement$1(editor, rowElm);\n }\n if (getRowClassList(editor).length > 0) {\n classListCtrl = {\n name: 'class',\n type: 'listbox',\n label: 'Class',\n values: Helpers.buildListItems(getRowClassList(editor), function (item) {\n if (item.value) {\n item.textStyle = function () {\n return editor.formatter.getCssText({\n block: 'tr',\n classes: [item.value]\n });\n };\n }\n })\n };\n }\n generalRowForm = {\n type: 'form',\n columns: 2,\n padding: 0,\n defaults: { type: 'textbox' },\n items: [\n {\n type: 'listbox',\n name: 'type',\n label: 'Row type',\n text: 'Header',\n maxWidth: null,\n values: [\n {\n text: 'Header',\n value: 'thead'\n },\n {\n text: 'Body',\n value: 'tbody'\n },\n {\n text: 'Footer',\n value: 'tfoot'\n }\n ]\n },\n {\n type: 'listbox',\n name: 'align',\n label: 'Alignment',\n text: 'None',\n maxWidth: null,\n values: [\n {\n text: 'None',\n value: ''\n },\n {\n text: 'Left',\n value: 'left'\n },\n {\n text: 'Center',\n value: 'center'\n },\n {\n text: 'Right',\n value: 'right'\n }\n ]\n },\n {\n label: 'Height',\n name: 'height'\n },\n classListCtrl\n ]\n };\n if (hasAdvancedRowTab(editor)) {\n editor.windowManager.open({\n title: 'Row properties',\n data: data,\n bodyType: 'tabpanel',\n body: [\n {\n title: 'General',\n type: 'form',\n items: generalRowForm\n },\n Helpers.createStyleForm(editor)\n ],\n onsubmit: curry(onSubmitRowForm, editor, rows, data)\n });\n } else {\n editor.windowManager.open({\n title: 'Row properties',\n data: data,\n body: generalRowForm,\n onsubmit: curry(onSubmitRowForm, editor, rows, data)\n });\n }\n };\n var RowDialog = { open: open$1 };\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.Env');\n\n var DefaultRenderOptions = {\n styles: {\n 'border-collapse': 'collapse',\n 'width': '100%'\n },\n attributes: { border: '1' },\n percentages: true\n };\n var makeTable = function () {\n return Element.fromTag('table');\n };\n var tableBody = function () {\n return Element.fromTag('tbody');\n };\n var tableRow = function () {\n return Element.fromTag('tr');\n };\n var tableHeaderCell = function () {\n return Element.fromTag('th');\n };\n var tableCell = function () {\n return Element.fromTag('td');\n };\n var render$1 = function (rows, columns, rowHeaders, columnHeaders, renderOpts) {\n if (renderOpts === void 0) {\n renderOpts = DefaultRenderOptions;\n }\n var table = makeTable();\n setAll$1(table, renderOpts.styles);\n setAll(table, renderOpts.attributes);\n var tbody = tableBody();\n append(table, tbody);\n var trs = [];\n for (var i = 0; i < rows; i++) {\n var tr = tableRow();\n for (var j = 0; j < columns; j++) {\n var td = i < rowHeaders || j < columnHeaders ? tableHeaderCell() : tableCell();\n if (j < columnHeaders) {\n set(td, 'scope', 'row');\n }\n if (i < rowHeaders) {\n set(td, 'scope', 'col');\n }\n append(td, Element.fromTag('br'));\n if (renderOpts.percentages) {\n set$1(td, 'width', 100 / columns + '%');\n }\n append(tr, td);\n }\n trs.push(tr);\n }\n append$1(tbody, trs);\n return table;\n };\n\n var get$7 = function (element) {\n return element.dom().innerHTML;\n };\n var getOuter$2 = function (element) {\n var container = Element.fromTag('div');\n var clone = Element.fromDom(element.dom().cloneNode(true));\n append(container, clone);\n return get$7(container);\n };\n\n var placeCaretInCell = function (editor, cell) {\n editor.selection.select(cell.dom(), true);\n editor.selection.collapse(true);\n };\n var selectFirstCellInTable = function (editor, tableElm) {\n descendant$1(tableElm, 'td,th').each(curry(placeCaretInCell, editor));\n };\n var fireEvents = function (editor, table) {\n each(descendants$1(table, 'tr'), function (row) {\n fireNewRow(editor, row.dom());\n each(descendants$1(row, 'th,td'), function (cell) {\n fireNewCell(editor, cell.dom());\n });\n });\n };\n var isPercentage = function (width) {\n return isString(width) && width.indexOf('%') !== -1;\n };\n var insert$1 = function (editor, columns, rows) {\n var defaultStyles = getDefaultStyles(editor);\n var options = {\n styles: defaultStyles,\n attributes: getDefaultAttributes(editor),\n percentages: isPercentage(defaultStyles.width) && !isPixelsForced(editor)\n };\n var table = render$1(rows, columns, 0, 0, options);\n set(table, 'data-mce-id', '__mce');\n var html = getOuter$2(table);\n editor.insertContent(html);\n return descendant$1(getBody$1(editor), 'table[data-mce-id=\"__mce\"]').map(function (table) {\n if (isPixelsForced(editor)) {\n set$1(table, 'width', get$1(table, 'width'));\n }\n remove(table, 'data-mce-id');\n fireEvents(editor, table);\n selectFirstCellInTable(editor, table);\n return table.dom();\n }).getOr(null);\n };\n var InsertTable = { insert: insert$1 };\n\n function styleTDTH(dom, elm, name, value) {\n if (elm.tagName === 'TD' || elm.tagName === 'TH') {\n dom.setStyle(elm, name, value);\n } else {\n if (elm.children) {\n for (var i = 0; i < elm.children.length; i++) {\n styleTDTH(dom, elm.children[i], name, value);\n }\n }\n }\n }\n var extractDataFromElement$2 = function (editor, tableElm) {\n var dom = editor.dom;\n var data = {\n width: dom.getStyle(tableElm, 'width') || dom.getAttrib(tableElm, 'width'),\n height: dom.getStyle(tableElm, 'height') || dom.getAttrib(tableElm, 'height'),\n cellspacing: dom.getStyle(tableElm, 'border-spacing') || dom.getAttrib(tableElm, 'cellspacing'),\n cellpadding: dom.getAttrib(tableElm, 'data-mce-cell-padding') || dom.getAttrib(tableElm, 'cellpadding') || Styles$1.getTDTHOverallStyle(editor.dom, tableElm, 'padding'),\n border: dom.getAttrib(tableElm, 'data-mce-border') || dom.getAttrib(tableElm, 'border') || Styles$1.getTDTHOverallStyle(editor.dom, tableElm, 'border'),\n borderColor: dom.getAttrib(tableElm, 'data-mce-border-color'),\n caption: !!dom.select('caption', tableElm)[0],\n class: dom.getAttrib(tableElm, 'class')\n };\n global$1.each('left center right'.split(' '), function (name) {\n if (editor.formatter.matchNode(tableElm, 'align' + name)) {\n data.align = name;\n }\n });\n if (hasAdvancedTableTab(editor)) {\n global$1.extend(data, Helpers.extractAdvancedStyles(dom, tableElm));\n }\n return data;\n };\n var applyDataToElement = function (editor, tableElm, data) {\n var dom = editor.dom;\n var attrs = {};\n var styles = {};\n attrs.class = data.class;\n styles.height = addSizeSuffix(data.height);\n if (dom.getAttrib(tableElm, 'width') && !shouldStyleWithCss(editor)) {\n attrs.width = removePxSuffix(data.width);\n } else {\n styles.width = addSizeSuffix(data.width);\n }\n if (shouldStyleWithCss(editor)) {\n styles['border-width'] = addSizeSuffix(data.border);\n styles['border-spacing'] = addSizeSuffix(data.cellspacing);\n global$1.extend(attrs, {\n 'data-mce-border-color': data.borderColor,\n 'data-mce-cell-padding': data.cellpadding,\n 'data-mce-border': data.border\n });\n } else {\n global$1.extend(attrs, {\n border: data.border,\n cellpadding: data.cellpadding,\n cellspacing: data.cellspacing\n });\n }\n if (shouldStyleWithCss(editor)) {\n if (tableElm.children) {\n for (var i = 0; i < tableElm.children.length; i++) {\n styleTDTH(dom, tableElm.children[i], {\n 'border-width': addSizeSuffix(data.border),\n 'border-color': data.borderColor,\n 'padding': addSizeSuffix(data.cellpadding)\n });\n }\n }\n }\n if (data.style) {\n global$1.extend(styles, dom.parseStyle(data.style));\n } else {\n styles = global$1.extend({}, dom.parseStyle(dom.getAttrib(tableElm, 'style')), styles);\n }\n attrs.style = dom.serializeStyle(styles);\n dom.setAttribs(tableElm, attrs);\n };\n var onSubmitTableForm = function (editor, tableElm, evt) {\n var dom = editor.dom;\n var captionElm;\n var data;\n if (hasAdvancedTableTab(editor)) {\n Helpers.syncAdvancedStyleFields(editor, evt);\n }\n data = evt.control.rootControl.toJSON();\n if (data.class === false) {\n delete data.class;\n }\n editor.undoManager.transact(function () {\n if (!tableElm) {\n tableElm = InsertTable.insert(editor, data.cols || 1, data.rows || 1);\n }\n applyDataToElement(editor, tableElm, data);\n captionElm = dom.select('caption', tableElm)[0];\n if (captionElm && !data.caption) {\n dom.remove(captionElm);\n }\n if (!captionElm && data.caption) {\n captionElm = dom.create('caption');\n captionElm.innerHTML = !global$2.ie ? '
' : '\\xA0';\n tableElm.insertBefore(captionElm, tableElm.firstChild);\n }\n Styles$1.unApplyAlign(editor, tableElm);\n if (data.align) {\n Styles$1.applyAlign(editor, tableElm, data.align);\n }\n editor.focus();\n editor.addVisual();\n });\n };\n var open$2 = function (editor, isProps) {\n var dom = editor.dom;\n var tableElm, colsCtrl, rowsCtrl, classListCtrl, data = {}, generalTableForm;\n if (isProps === true) {\n tableElm = dom.getParent(editor.selection.getStart(), 'table');\n if (tableElm) {\n data = extractDataFromElement$2(editor, tableElm);\n }\n } else {\n colsCtrl = {\n label: 'Cols',\n name: 'cols'\n };\n rowsCtrl = {\n label: 'Rows',\n name: 'rows'\n };\n }\n if (getTableClassList(editor).length > 0) {\n if (data.class) {\n data.class = data.class.replace(/\\s*mce\\-item\\-table\\s*/g, '');\n }\n classListCtrl = {\n name: 'class',\n type: 'listbox',\n label: 'Class',\n values: Helpers.buildListItems(getTableClassList(editor), function (item) {\n if (item.value) {\n item.textStyle = function () {\n return editor.formatter.getCssText({\n block: 'table',\n classes: [item.value]\n });\n };\n }\n })\n };\n }\n generalTableForm = {\n type: 'form',\n layout: 'flex',\n direction: 'column',\n labelGapCalc: 'children',\n padding: 0,\n items: [\n {\n type: 'form',\n labelGapCalc: false,\n padding: 0,\n layout: 'grid',\n columns: 2,\n defaults: {\n type: 'textbox',\n maxWidth: 50\n },\n items: hasAppearanceOptions(editor) ? [\n colsCtrl,\n rowsCtrl,\n {\n label: 'Width',\n name: 'width',\n onchange: curry(Helpers.updateStyleField, editor)\n },\n {\n label: 'Height',\n name: 'height',\n onchange: curry(Helpers.updateStyleField, editor)\n },\n {\n label: 'Cell spacing',\n name: 'cellspacing'\n },\n {\n label: 'Cell padding',\n name: 'cellpadding'\n },\n {\n label: 'Border',\n name: 'border'\n },\n {\n label: 'Caption',\n name: 'caption',\n type: 'checkbox'\n }\n ] : [\n colsCtrl,\n rowsCtrl,\n {\n label: 'Width',\n name: 'width',\n onchange: curry(Helpers.updateStyleField, editor)\n },\n {\n label: 'Height',\n name: 'height',\n onchange: curry(Helpers.updateStyleField, editor)\n }\n ]\n },\n {\n label: 'Alignment',\n name: 'align',\n type: 'listbox',\n text: 'None',\n values: [\n {\n text: 'None',\n value: ''\n },\n {\n text: 'Left',\n value: 'left'\n },\n {\n text: 'Center',\n value: 'center'\n },\n {\n text: 'Right',\n value: 'right'\n }\n ]\n },\n classListCtrl\n ]\n };\n if (hasAdvancedTableTab(editor)) {\n editor.windowManager.open({\n title: 'Table properties',\n data: data,\n bodyType: 'tabpanel',\n body: [\n {\n title: 'General',\n type: 'form',\n items: generalTableForm\n },\n Helpers.createStyleForm(editor)\n ],\n onsubmit: curry(onSubmitTableForm, editor, tableElm)\n });\n } else {\n editor.windowManager.open({\n title: 'Table properties',\n data: data,\n body: generalTableForm,\n onsubmit: curry(onSubmitTableForm, editor, tableElm)\n });\n }\n };\n var TableDialog = { open: open$2 };\n\n var each$3 = global$1.each;\n var registerCommands = function (editor, actions, cellSelection, selections, clipboardRows) {\n var isRoot = getIsRoot(editor);\n var eraseTable = function () {\n getSelectionStartCell().orThunk(getSelectionStartCaption).each(function (cellOrCaption) {\n var table = TableLookup.table(cellOrCaption, isRoot);\n table.filter(not(isRoot)).each(function (table) {\n var cursor = Element.fromText('');\n after(table, cursor);\n remove$2(table);\n var rng = editor.dom.createRng();\n rng.setStart(cursor.dom(), 0);\n rng.setEnd(cursor.dom(), 0);\n editor.selection.setRng(rng);\n });\n });\n };\n var getSelectionStartFromSelector = function (selector) {\n return function () {\n return Option.from(editor.dom.getParent(editor.selection.getStart(), selector)).map(Element.fromDom);\n };\n };\n var getSelectionStartCaption = getSelectionStartFromSelector('caption');\n var getSelectionStartCell = getSelectionStartFromSelector('th,td');\n var getTableFromCell = function (cell) {\n return TableLookup.table(cell, isRoot);\n };\n var getSize = function (table) {\n return {\n width: getPixelWidth$1(table.dom()),\n height: getPixelWidth$1(table.dom())\n };\n };\n var resizeChange = function (editor, oldSize, table) {\n var newSize = getSize(table);\n if (oldSize.width !== newSize.width || oldSize.height !== newSize.height) {\n fireObjectResizeStart(editor, table.dom(), oldSize.width, oldSize.height);\n fireObjectResized(editor, table.dom(), newSize.width, newSize.height);\n }\n };\n var actOnSelection = function (execute) {\n getSelectionStartCell().each(function (cell) {\n getTableFromCell(cell).each(function (table) {\n var targets = TableTargets.forMenu(selections, table, cell);\n var beforeSize = getSize(table);\n execute(table, targets).each(function (rng) {\n resizeChange(editor, beforeSize, table);\n editor.selection.setRng(rng);\n editor.focus();\n cellSelection.clear(table);\n removeDataStyle(table);\n });\n });\n });\n };\n var copyRowSelection = function (execute) {\n return getSelectionStartCell().bind(function (cell) {\n return getTableFromCell(cell).bind(function (table) {\n var doc = Element.fromDom(editor.getDoc());\n var targets = TableTargets.forMenu(selections, table, cell);\n var generators = TableFill.cellOperations(noop, doc, Option.none());\n return CopyRows.copyRows(table, targets, generators);\n });\n });\n };\n var pasteOnSelection = function (execute) {\n clipboardRows.get().each(function (rows) {\n var clonedRows = map(rows, function (row) {\n return deep(row);\n });\n getSelectionStartCell().each(function (cell) {\n getTableFromCell(cell).each(function (table) {\n var doc = Element.fromDom(editor.getDoc());\n var generators = TableFill.paste(doc);\n var targets = TableTargets.pasteRows(selections, table, cell, clonedRows, generators);\n execute(table, targets).each(function (rng) {\n editor.selection.setRng(rng);\n editor.focus();\n cellSelection.clear(table);\n });\n });\n });\n });\n };\n each$3({\n mceTableSplitCells: function () {\n actOnSelection(actions.unmergeCells);\n },\n mceTableMergeCells: function () {\n actOnSelection(actions.mergeCells);\n },\n mceTableInsertRowBefore: function () {\n actOnSelection(actions.insertRowsBefore);\n },\n mceTableInsertRowAfter: function () {\n actOnSelection(actions.insertRowsAfter);\n },\n mceTableInsertColBefore: function () {\n actOnSelection(actions.insertColumnsBefore);\n },\n mceTableInsertColAfter: function () {\n actOnSelection(actions.insertColumnsAfter);\n },\n mceTableDeleteCol: function () {\n actOnSelection(actions.deleteColumn);\n },\n mceTableDeleteRow: function () {\n actOnSelection(actions.deleteRow);\n },\n mceTableCutRow: function (grid) {\n clipboardRows.set(copyRowSelection());\n actOnSelection(actions.deleteRow);\n },\n mceTableCopyRow: function (grid) {\n clipboardRows.set(copyRowSelection());\n },\n mceTablePasteRowBefore: function (grid) {\n pasteOnSelection(actions.pasteRowsBefore);\n },\n mceTablePasteRowAfter: function (grid) {\n pasteOnSelection(actions.pasteRowsAfter);\n },\n mceTableDelete: eraseTable\n }, function (func, name) {\n editor.addCommand(name, func);\n });\n each$3({\n mceInsertTable: curry(TableDialog.open, editor),\n mceTableProps: curry(TableDialog.open, editor, true),\n mceTableRowProps: curry(RowDialog.open, editor),\n mceTableCellProps: curry(CellDialog.open, editor)\n }, function (func, name) {\n editor.addCommand(name, function (ui, val) {\n func(val);\n });\n });\n };\n var Commands = { registerCommands: registerCommands };\n\n var only = function (element) {\n var parent = Option.from(element.dom().documentElement).map(Element.fromDom).getOr(element);\n return {\n parent: constant(parent),\n view: constant(element),\n origin: constant(Position(0, 0))\n };\n };\n var detached = function (editable, chrome) {\n var origin = function () {\n return absolute(chrome);\n };\n return {\n parent: constant(chrome),\n view: constant(editable),\n origin: origin\n };\n };\n var body$1 = function (editable, chrome) {\n return {\n parent: constant(chrome),\n view: constant(editable),\n origin: constant(Position(0, 0))\n };\n };\n var ResizeWire = {\n only: only,\n detached: detached,\n body: body$1\n };\n\n var Event = function (fields) {\n var struct = Immutable.apply(null, fields);\n var handlers = [];\n var bind = function (handler) {\n if (handler === undefined) {\n throw new Error('Event bind error: undefined handler');\n }\n handlers.push(handler);\n };\n var unbind = function (handler) {\n handlers = filter(handlers, function (h) {\n return h !== handler;\n });\n };\n var trigger = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var event = struct.apply(null, args);\n each(handlers, function (handler) {\n handler(event);\n });\n };\n return {\n bind: bind,\n unbind: unbind,\n trigger: trigger\n };\n };\n\n var create$1 = function (typeDefs) {\n var registry = map$1(typeDefs, function (event) {\n return {\n bind: event.bind,\n unbind: event.unbind\n };\n });\n var trigger = map$1(typeDefs, function (event) {\n return event.trigger;\n });\n return {\n registry: registry,\n trigger: trigger\n };\n };\n var Events = { create: create$1 };\n\n var mkEvent = function (target, x, y, stop, prevent, kill, raw) {\n return {\n target: constant(target),\n x: constant(x),\n y: constant(y),\n stop: stop,\n prevent: prevent,\n kill: kill,\n raw: constant(raw)\n };\n };\n var handle = function (filter, handler) {\n return function (rawEvent) {\n if (!filter(rawEvent)) {\n return;\n }\n var target = Element.fromDom(rawEvent.target);\n var stop = function () {\n rawEvent.stopPropagation();\n };\n var prevent = function () {\n rawEvent.preventDefault();\n };\n var kill = compose(prevent, stop);\n var evt = mkEvent(target, rawEvent.clientX, rawEvent.clientY, stop, prevent, kill, rawEvent);\n handler(evt);\n };\n };\n var binder = function (element, event, filter, handler, useCapture) {\n var wrapped = handle(filter, handler);\n element.dom().addEventListener(event, wrapped, useCapture);\n return { unbind: curry(unbind, element, event, wrapped, useCapture) };\n };\n var bind$1 = function (element, event, filter, handler) {\n return binder(element, event, filter, handler, false);\n };\n var unbind = function (element, event, handler, useCapture) {\n element.dom().removeEventListener(event, handler, useCapture);\n };\n\n var filter$1 = constant(true);\n var bind$2 = function (element, event, handler) {\n return bind$1(element, event, filter$1, handler);\n };\n\n var hasOwnProperty = Object.prototype.hasOwnProperty;\n var shallow$1 = function (old, nu) {\n return nu;\n };\n var baseMerge = function (merger) {\n return function () {\n var objects = new Array(arguments.length);\n for (var i = 0; i < objects.length; i++) {\n objects[i] = arguments[i];\n }\n if (objects.length === 0) {\n throw new Error('Can\\'t merge zero objects');\n }\n var ret = {};\n for (var j = 0; j < objects.length; j++) {\n var curObject = objects[j];\n for (var key in curObject) {\n if (hasOwnProperty.call(curObject, key)) {\n ret[key] = merger(ret[key], curObject[key]);\n }\n }\n }\n return ret;\n };\n };\n var merge$3 = baseMerge(shallow$1);\n\n var styles$1 = css('ephox-dragster');\n var Styles$2 = { resolve: styles$1.resolve };\n\n var Blocker = function (options) {\n var settings = merge$3({ layerClass: Styles$2.resolve('blocker') }, options);\n var div = Element.fromTag('div');\n set(div, 'role', 'presentation');\n setAll$1(div, {\n position: 'fixed',\n left: '0px',\n top: '0px',\n width: '100%',\n height: '100%'\n });\n add$2(div, Styles$2.resolve('blocker'));\n add$2(div, settings.layerClass);\n var element = function () {\n return div;\n };\n var destroy = function () {\n remove$2(div);\n };\n return {\n element: element,\n destroy: destroy\n };\n };\n\n var DragMode = exactly([\n 'compare',\n 'extract',\n 'mutate',\n 'sink'\n ]);\n var DragSink = exactly([\n 'element',\n 'start',\n 'stop',\n 'destroy'\n ]);\n var DragApi = exactly([\n 'forceDrop',\n 'drop',\n 'move',\n 'delayDrop'\n ]);\n\n var compare = function (old, nu) {\n return Position(nu.left() - old.left(), nu.top() - old.top());\n };\n var extract$1 = function (event) {\n return Option.some(Position(event.x(), event.y()));\n };\n var mutate = function (mutation, info) {\n mutation.mutate(info.left(), info.top());\n };\n var sink = function (dragApi, settings) {\n var blocker = Blocker(settings);\n var mdown = bind$2(blocker.element(), 'mousedown', dragApi.forceDrop);\n var mup = bind$2(blocker.element(), 'mouseup', dragApi.drop);\n var mmove = bind$2(blocker.element(), 'mousemove', dragApi.move);\n var mout = bind$2(blocker.element(), 'mouseout', dragApi.delayDrop);\n var destroy = function () {\n blocker.destroy();\n mup.unbind();\n mmove.unbind();\n mout.unbind();\n mdown.unbind();\n };\n var start = function (parent) {\n append(parent, blocker.element());\n };\n var stop = function () {\n remove$2(blocker.element());\n };\n return DragSink({\n element: blocker.element,\n start: start,\n stop: stop,\n destroy: destroy\n });\n };\n var MouseDrag = DragMode({\n compare: compare,\n extract: extract$1,\n sink: sink,\n mutate: mutate\n });\n\n var last$2 = function (fn, rate) {\n var timer = null;\n var cancel = function () {\n if (timer !== null) {\n domGlobals.clearTimeout(timer);\n timer = null;\n }\n };\n var throttle = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (timer !== null) {\n domGlobals.clearTimeout(timer);\n }\n timer = domGlobals.setTimeout(function () {\n fn.apply(null, args);\n timer = null;\n }, rate);\n };\n return {\n cancel: cancel,\n throttle: throttle\n };\n };\n\n function InDrag () {\n var previous = Option.none();\n var reset = function () {\n previous = Option.none();\n };\n var update = function (mode, nu) {\n var result = previous.map(function (old) {\n return mode.compare(old, nu);\n });\n previous = Option.some(nu);\n return result;\n };\n var onEvent = function (event, mode) {\n var dataOption = mode.extract(event);\n dataOption.each(function (data) {\n var offset = update(mode, data);\n offset.each(function (d) {\n events.trigger.move(d);\n });\n });\n };\n var events = Events.create({ move: Event(['info']) });\n return {\n onEvent: onEvent,\n reset: reset,\n events: events.registry\n };\n }\n\n function NoDrag () {\n return {\n onEvent: noop,\n reset: noop\n };\n }\n\n function Movement () {\n var noDragState = NoDrag();\n var inDragState = InDrag();\n var dragState = noDragState;\n var on = function () {\n dragState.reset();\n dragState = inDragState;\n };\n var off = function () {\n dragState.reset();\n dragState = noDragState;\n };\n var onEvent = function (event, mode) {\n dragState.onEvent(event, mode);\n };\n var isOn = function () {\n return dragState === inDragState;\n };\n return {\n on: on,\n off: off,\n isOn: isOn,\n onEvent: onEvent,\n events: inDragState.events\n };\n }\n\n var setup = function (mutation, mode, settings) {\n var active = false;\n var events = Events.create({\n start: Event([]),\n stop: Event([])\n });\n var movement = Movement();\n var drop = function () {\n sink.stop();\n if (movement.isOn()) {\n movement.off();\n events.trigger.stop();\n }\n };\n var throttledDrop = last$2(drop, 200);\n var go = function (parent) {\n sink.start(parent);\n movement.on();\n events.trigger.start();\n };\n var mousemove = function (event) {\n throttledDrop.cancel();\n movement.onEvent(event, mode);\n };\n movement.events.move.bind(function (event) {\n mode.mutate(mutation, event.info());\n });\n var on = function () {\n active = true;\n };\n var off = function () {\n active = false;\n };\n var runIfActive = function (f) {\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (active) {\n f.apply(null, args);\n }\n };\n };\n var sink = mode.sink(DragApi({\n forceDrop: drop,\n drop: runIfActive(drop),\n move: runIfActive(mousemove),\n delayDrop: runIfActive(throttledDrop.throttle)\n }), settings);\n var destroy = function () {\n sink.destroy();\n };\n return {\n element: sink.element,\n go: go,\n on: on,\n off: off,\n destroy: destroy,\n events: events.registry\n };\n };\n var Dragging = { setup: setup };\n\n var transform$1 = function (mutation, settings) {\n if (settings === void 0) {\n settings = {};\n }\n var mode = settings.mode !== undefined ? settings.mode : MouseDrag;\n return Dragging.setup(mutation, mode, settings);\n };\n var Dragger = { transform: transform$1 };\n\n var Mutation = function () {\n var events = Events.create({\n drag: Event([\n 'xDelta',\n 'yDelta'\n ])\n });\n var mutate = function (x, y) {\n events.trigger.drag(x, y);\n };\n return {\n mutate: mutate,\n events: events.registry\n };\n };\n\n var BarMutation = function () {\n var events = Events.create({\n drag: Event([\n 'xDelta',\n 'yDelta',\n 'target'\n ])\n });\n var target = Option.none();\n var delegate = Mutation();\n delegate.events.drag.bind(function (event) {\n target.each(function (t) {\n events.trigger.drag(event.xDelta(), event.yDelta(), t);\n });\n });\n var assign = function (t) {\n target = Option.some(t);\n };\n var get = function () {\n return target;\n };\n return {\n assign: assign,\n get: get,\n mutate: delegate.mutate,\n events: events.registry\n };\n };\n\n var isContentEditableTrue = function (elm) {\n return get(elm, 'contenteditable') === 'true';\n };\n var findClosestContentEditable = function (target, isRoot) {\n return closest$1(target, '[contenteditable]', isRoot);\n };\n\n var resizeBarDragging = Styles.resolve('resizer-bar-dragging');\n var BarManager = function (wire, direction, hdirection) {\n var mutation = BarMutation();\n var resizing = Dragger.transform(mutation, {});\n var hoverTable = Option.none();\n var getResizer = function (element, type) {\n return Option.from(get(element, type));\n };\n mutation.events.drag.bind(function (event) {\n getResizer(event.target(), 'data-row').each(function (_dataRow) {\n var currentRow = CellUtils.getInt(event.target(), 'top');\n set$1(event.target(), 'top', currentRow + event.yDelta() + 'px');\n });\n getResizer(event.target(), 'data-column').each(function (_dataCol) {\n var currentCol = CellUtils.getInt(event.target(), 'left');\n set$1(event.target(), 'left', currentCol + event.xDelta() + 'px');\n });\n });\n var getDelta = function (target, dir) {\n var newX = CellUtils.getInt(target, dir);\n var oldX = parseInt(get(target, 'data-initial-' + dir), 10);\n return newX - oldX;\n };\n resizing.events.stop.bind(function () {\n mutation.get().each(function (target) {\n hoverTable.each(function (table) {\n getResizer(target, 'data-row').each(function (row) {\n var delta = getDelta(target, 'top');\n remove(target, 'data-initial-top');\n events.trigger.adjustHeight(table, delta, parseInt(row, 10));\n });\n getResizer(target, 'data-column').each(function (column) {\n var delta = getDelta(target, 'left');\n remove(target, 'data-initial-left');\n events.trigger.adjustWidth(table, delta, parseInt(column, 10));\n });\n Bars.refresh(wire, table, hdirection, direction);\n });\n });\n });\n var handler = function (target, dir) {\n events.trigger.startAdjust();\n mutation.assign(target);\n set(target, 'data-initial-' + dir, parseInt(get$1(target, dir), 10));\n add$2(target, resizeBarDragging);\n set$1(target, 'opacity', '0.2');\n resizing.go(wire.parent());\n };\n var mousedown = bind$2(wire.parent(), 'mousedown', function (event) {\n if (Bars.isRowBar(event.target())) {\n handler(event.target(), 'top');\n }\n if (Bars.isColBar(event.target())) {\n handler(event.target(), 'left');\n }\n });\n var isRoot = function (e) {\n return eq(e, wire.view());\n };\n var findClosestEditableTable = function (target) {\n return closest$1(target, 'table', isRoot).filter(function (table) {\n return findClosestContentEditable(table, isRoot).exists(isContentEditableTrue);\n });\n };\n var mouseover = bind$2(wire.view(), 'mouseover', function (event) {\n findClosestEditableTable(event.target()).fold(function () {\n if (inBody(event.target())) {\n Bars.destroy(wire);\n }\n }, function (table) {\n hoverTable = Option.some(table);\n Bars.refresh(wire, table, hdirection, direction);\n });\n });\n var destroy = function () {\n mousedown.unbind();\n mouseover.unbind();\n resizing.destroy();\n Bars.destroy(wire);\n };\n var refresh = function (tbl) {\n Bars.refresh(wire, tbl, hdirection, direction);\n };\n var events = Events.create({\n adjustHeight: Event([\n 'table',\n 'delta',\n 'row'\n ]),\n adjustWidth: Event([\n 'table',\n 'delta',\n 'column'\n ]),\n startAdjust: Event([])\n });\n return {\n destroy: destroy,\n refresh: refresh,\n on: resizing.on,\n off: resizing.off,\n hideBars: curry(Bars.hide, wire),\n showBars: curry(Bars.show, wire),\n events: events.registry\n };\n };\n\n var create$2 = function (wire, vdirection) {\n var hdirection = BarPositions.height;\n var manager = BarManager(wire, vdirection, hdirection);\n var events = Events.create({\n beforeResize: Event(['table']),\n afterResize: Event(['table']),\n startDrag: Event([])\n });\n manager.events.adjustHeight.bind(function (event) {\n events.trigger.beforeResize(event.table());\n var delta = hdirection.delta(event.delta(), event.table());\n Adjustments.adjustHeight(event.table(), delta, event.row(), hdirection);\n events.trigger.afterResize(event.table());\n });\n manager.events.startAdjust.bind(function (event) {\n events.trigger.startDrag();\n });\n manager.events.adjustWidth.bind(function (event) {\n events.trigger.beforeResize(event.table());\n var delta = vdirection.delta(event.delta(), event.table());\n Adjustments.adjustWidth(event.table(), delta, event.column(), vdirection);\n events.trigger.afterResize(event.table());\n });\n return {\n on: manager.on,\n off: manager.off,\n hideBars: manager.hideBars,\n showBars: manager.showBars,\n destroy: manager.destroy,\n events: events.registry\n };\n };\n var TableResize = { create: create$2 };\n\n var createContainer = function () {\n var container = Element.fromTag('div');\n setAll$1(container, {\n position: 'static',\n height: '0',\n width: '0',\n padding: '0',\n margin: '0',\n border: '0'\n });\n append(body(), container);\n return container;\n };\n var get$8 = function (editor, container) {\n return editor.inline ? ResizeWire.body(getBody$1(editor), createContainer()) : ResizeWire.only(Element.fromDom(editor.getDoc()));\n };\n var remove$6 = function (editor, wire) {\n if (editor.inline) {\n remove$2(wire.parent());\n }\n };\n var TableWire = {\n get: get$8,\n remove: remove$6\n };\n\n var ResizeHandler = function (editor) {\n var selectionRng = Option.none();\n var resize = Option.none();\n var wire = Option.none();\n var percentageBasedSizeRegex = /(\\d+(\\.\\d+)?)%/;\n var startW, startRawW;\n var isTable = function (elm) {\n return elm.nodeName === 'TABLE';\n };\n var getRawWidth = function (elm) {\n return editor.dom.getStyle(elm, 'width') || editor.dom.getAttrib(elm, 'width');\n };\n var lazyResize = function () {\n return resize;\n };\n var lazyWire = function () {\n return wire.getOr(ResizeWire.only(Element.fromDom(editor.getBody())));\n };\n var destroy = function () {\n resize.each(function (sz) {\n sz.destroy();\n });\n wire.each(function (w) {\n TableWire.remove(editor, w);\n });\n };\n editor.on('init', function () {\n var direction = TableDirection(Direction.directionAt);\n var rawWire = TableWire.get(editor);\n wire = Option.some(rawWire);\n if (hasObjectResizing(editor) && hasTableResizeBars(editor)) {\n var sz = TableResize.create(rawWire, direction);\n sz.on();\n sz.events.startDrag.bind(function (event) {\n selectionRng = Option.some(editor.selection.getRng());\n });\n sz.events.beforeResize.bind(function (event) {\n var rawTable = event.table().dom();\n fireObjectResizeStart(editor, rawTable, getPixelWidth$1(rawTable), getPixelHeight(rawTable));\n });\n sz.events.afterResize.bind(function (event) {\n var table = event.table();\n var rawTable = table.dom();\n removeDataStyle(table);\n selectionRng.each(function (rng) {\n editor.selection.setRng(rng);\n editor.focus();\n });\n fireObjectResized(editor, rawTable, getPixelWidth$1(rawTable), getPixelHeight(rawTable));\n editor.undoManager.add();\n });\n resize = Option.some(sz);\n }\n });\n editor.on('ObjectResizeStart', function (e) {\n var targetElm = e.target;\n if (isTable(targetElm)) {\n startW = e.width;\n startRawW = getRawWidth(targetElm);\n }\n });\n editor.on('ObjectResized', function (e) {\n var targetElm = e.target;\n if (isTable(targetElm)) {\n var table = targetElm;\n if (percentageBasedSizeRegex.test(startRawW)) {\n var percentW = parseFloat(percentageBasedSizeRegex.exec(startRawW)[1]);\n var targetPercentW = e.width * percentW / startW;\n editor.dom.setStyle(table, 'width', targetPercentW + '%');\n } else {\n var newCellSizes_1 = [];\n global$1.each(table.rows, function (row) {\n global$1.each(row.cells, function (cell) {\n var width = editor.dom.getStyle(cell, 'width', true);\n newCellSizes_1.push({\n cell: cell,\n width: width\n });\n });\n });\n global$1.each(newCellSizes_1, function (newCellSize) {\n editor.dom.setStyle(newCellSize.cell, 'width', newCellSize.width);\n editor.dom.setAttrib(newCellSize.cell, 'width', null);\n });\n }\n }\n });\n return {\n lazyResize: lazyResize,\n lazyWire: lazyWire,\n destroy: destroy\n };\n };\n\n var adt$1 = Adt.generate([\n { none: ['current'] },\n { first: ['current'] },\n {\n middle: [\n 'current',\n 'target'\n ]\n },\n { last: ['current'] }\n ]);\n var none$1 = function (current) {\n if (current === void 0) {\n current = undefined;\n }\n return adt$1.none(current);\n };\n var CellLocation = __assign(__assign({}, adt$1), { none: none$1 });\n\n var detect$4 = function (current, isRoot) {\n return TableLookup.table(current, isRoot).bind(function (table) {\n var all = TableLookup.cells(table);\n var index = findIndex(all, function (x) {\n return eq(current, x);\n });\n return index.map(function (ind) {\n return {\n index: constant(ind),\n all: constant(all)\n };\n });\n });\n };\n var next = function (current, isRoot) {\n var detection = detect$4(current, isRoot);\n return detection.fold(function () {\n return CellLocation.none(current);\n }, function (info) {\n return info.index() + 1 < info.all().length ? CellLocation.middle(current, info.all()[info.index() + 1]) : CellLocation.last(current);\n });\n };\n var prev = function (current, isRoot) {\n var detection = detect$4(current, isRoot);\n return detection.fold(function () {\n return CellLocation.none();\n }, function (info) {\n return info.index() - 1 >= 0 ? CellLocation.middle(current, info.all()[info.index() - 1]) : CellLocation.first(current);\n });\n };\n var CellNavigation = {\n next: next,\n prev: prev\n };\n\n var create$3 = Immutable('start', 'soffset', 'finish', 'foffset');\n var SimRange = { create: create$3 };\n\n var adt$2 = Adt.generate([\n { before: ['element'] },\n {\n on: [\n 'element',\n 'offset'\n ]\n },\n { after: ['element'] }\n ]);\n var cata$1 = function (subject, onBefore, onOn, onAfter) {\n return subject.fold(onBefore, onOn, onAfter);\n };\n var getStart = function (situ) {\n return situ.fold(identity, identity, identity);\n };\n var before$2 = adt$2.before;\n var on = adt$2.on;\n var after$2 = adt$2.after;\n var Situ = {\n before: before$2,\n on: on,\n after: after$2,\n cata: cata$1,\n getStart: getStart\n };\n\n var adt$3 = Adt.generate([\n { domRange: ['rng'] },\n {\n relative: [\n 'startSitu',\n 'finishSitu'\n ]\n },\n {\n exact: [\n 'start',\n 'soffset',\n 'finish',\n 'foffset'\n ]\n }\n ]);\n var exactFromRange = function (simRange) {\n return adt$3.exact(simRange.start(), simRange.soffset(), simRange.finish(), simRange.foffset());\n };\n var getStart$1 = function (selection) {\n return selection.match({\n domRange: function (rng) {\n return Element.fromDom(rng.startContainer);\n },\n relative: function (startSitu, finishSitu) {\n return Situ.getStart(startSitu);\n },\n exact: function (start, soffset, finish, foffset) {\n return start;\n }\n });\n };\n var domRange = adt$3.domRange;\n var relative = adt$3.relative;\n var exact = adt$3.exact;\n var getWin = function (selection) {\n var start = getStart$1(selection);\n return defaultView(start);\n };\n var range$1 = SimRange.create;\n var Selection = {\n domRange: domRange,\n relative: relative,\n exact: exact,\n exactFromRange: exactFromRange,\n getWin: getWin,\n range: range$1\n };\n\n var selectNodeContents = function (win, element) {\n var rng = win.document.createRange();\n selectNodeContentsUsing(rng, element);\n return rng;\n };\n var selectNodeContentsUsing = function (rng, element) {\n rng.selectNodeContents(element.dom());\n };\n var setStart = function (rng, situ) {\n situ.fold(function (e) {\n rng.setStartBefore(e.dom());\n }, function (e, o) {\n rng.setStart(e.dom(), o);\n }, function (e) {\n rng.setStartAfter(e.dom());\n });\n };\n var setFinish = function (rng, situ) {\n situ.fold(function (e) {\n rng.setEndBefore(e.dom());\n }, function (e, o) {\n rng.setEnd(e.dom(), o);\n }, function (e) {\n rng.setEndAfter(e.dom());\n });\n };\n var relativeToNative = function (win, startSitu, finishSitu) {\n var range = win.document.createRange();\n setStart(range, startSitu);\n setFinish(range, finishSitu);\n return range;\n };\n var exactToNative = function (win, start, soffset, finish, foffset) {\n var rng = win.document.createRange();\n rng.setStart(start.dom(), soffset);\n rng.setEnd(finish.dom(), foffset);\n return rng;\n };\n var toRect = function (rect) {\n return {\n left: constant(rect.left),\n top: constant(rect.top),\n right: constant(rect.right),\n bottom: constant(rect.bottom),\n width: constant(rect.width),\n height: constant(rect.height)\n };\n };\n var getFirstRect = function (rng) {\n var rects = rng.getClientRects();\n var rect = rects.length > 0 ? rects[0] : rng.getBoundingClientRect();\n return rect.width > 0 || rect.height > 0 ? Option.some(rect).map(toRect) : Option.none();\n };\n\n var adt$4 = Adt.generate([\n {\n ltr: [\n 'start',\n 'soffset',\n 'finish',\n 'foffset'\n ]\n },\n {\n rtl: [\n 'start',\n 'soffset',\n 'finish',\n 'foffset'\n ]\n }\n ]);\n var fromRange = function (win, type, range) {\n return type(Element.fromDom(range.startContainer), range.startOffset, Element.fromDom(range.endContainer), range.endOffset);\n };\n var getRanges = function (win, selection) {\n return selection.match({\n domRange: function (rng) {\n return {\n ltr: constant(rng),\n rtl: Option.none\n };\n },\n relative: function (startSitu, finishSitu) {\n return {\n ltr: cached(function () {\n return relativeToNative(win, startSitu, finishSitu);\n }),\n rtl: cached(function () {\n return Option.some(relativeToNative(win, finishSitu, startSitu));\n })\n };\n },\n exact: function (start, soffset, finish, foffset) {\n return {\n ltr: cached(function () {\n return exactToNative(win, start, soffset, finish, foffset);\n }),\n rtl: cached(function () {\n return Option.some(exactToNative(win, finish, foffset, start, soffset));\n })\n };\n }\n });\n };\n var doDiagnose = function (win, ranges) {\n var rng = ranges.ltr();\n if (rng.collapsed) {\n var reversed = ranges.rtl().filter(function (rev) {\n return rev.collapsed === false;\n });\n return reversed.map(function (rev) {\n return adt$4.rtl(Element.fromDom(rev.endContainer), rev.endOffset, Element.fromDom(rev.startContainer), rev.startOffset);\n }).getOrThunk(function () {\n return fromRange(win, adt$4.ltr, rng);\n });\n } else {\n return fromRange(win, adt$4.ltr, rng);\n }\n };\n var diagnose = function (win, selection) {\n var ranges = getRanges(win, selection);\n return doDiagnose(win, ranges);\n };\n var asLtrRange = function (win, selection) {\n var diagnosis = diagnose(win, selection);\n return diagnosis.match({\n ltr: function (start, soffset, finish, foffset) {\n var rng = win.document.createRange();\n rng.setStart(start.dom(), soffset);\n rng.setEnd(finish.dom(), foffset);\n return rng;\n },\n rtl: function (start, soffset, finish, foffset) {\n var rng = win.document.createRange();\n rng.setStart(finish.dom(), foffset);\n rng.setEnd(start.dom(), soffset);\n return rng;\n }\n });\n };\n\n var searchForPoint = function (rectForOffset, x, y, maxX, length) {\n if (length === 0) {\n return 0;\n } else if (x === maxX) {\n return length - 1;\n }\n var xDelta = maxX;\n for (var i = 1; i < length; i++) {\n var rect = rectForOffset(i);\n var curDeltaX = Math.abs(x - rect.left);\n if (y <= rect.bottom) {\n if (y < rect.top || curDeltaX > xDelta) {\n return i - 1;\n } else {\n xDelta = curDeltaX;\n }\n }\n }\n return 0;\n };\n var inRect = function (rect, x, y) {\n return x >= rect.left && x <= rect.right && y >= rect.top && y <= rect.bottom;\n };\n\n var locateOffset = function (doc, textnode, x, y, rect) {\n var rangeForOffset = function (o) {\n var r = doc.dom().createRange();\n r.setStart(textnode.dom(), o);\n r.collapse(true);\n return r;\n };\n var rectForOffset = function (o) {\n var r = rangeForOffset(o);\n return r.getBoundingClientRect();\n };\n var length = get$2(textnode).length;\n var offset = searchForPoint(rectForOffset, x, y, rect.right, length);\n return rangeForOffset(offset);\n };\n var locate = function (doc, node, x, y) {\n var r = doc.dom().createRange();\n r.selectNode(node.dom());\n var rects = r.getClientRects();\n var foundRect = findMap(rects, function (rect) {\n return inRect(rect, x, y) ? Option.some(rect) : Option.none();\n });\n return foundRect.map(function (rect) {\n return locateOffset(doc, node, x, y, rect);\n });\n };\n\n var searchInChildren = function (doc, node, x, y) {\n var r = doc.dom().createRange();\n var nodes = children(node);\n return findMap(nodes, function (n) {\n r.selectNode(n.dom());\n return inRect(r.getBoundingClientRect(), x, y) ? locateNode(doc, n, x, y) : Option.none();\n });\n };\n var locateNode = function (doc, node, x, y) {\n return isText(node) ? locate(doc, node, x, y) : searchInChildren(doc, node, x, y);\n };\n var locate$1 = function (doc, node, x, y) {\n var r = doc.dom().createRange();\n r.selectNode(node.dom());\n var rect = r.getBoundingClientRect();\n var boundedX = Math.max(rect.left, Math.min(rect.right, x));\n var boundedY = Math.max(rect.top, Math.min(rect.bottom, y));\n return locateNode(doc, node, boundedX, boundedY);\n };\n\n var COLLAPSE_TO_LEFT = true;\n var COLLAPSE_TO_RIGHT = false;\n var getCollapseDirection = function (rect, x) {\n return x - rect.left < rect.right - x ? COLLAPSE_TO_LEFT : COLLAPSE_TO_RIGHT;\n };\n var createCollapsedNode = function (doc, target, collapseDirection) {\n var r = doc.dom().createRange();\n r.selectNode(target.dom());\n r.collapse(collapseDirection);\n return r;\n };\n var locateInElement = function (doc, node, x) {\n var cursorRange = doc.dom().createRange();\n cursorRange.selectNode(node.dom());\n var rect = cursorRange.getBoundingClientRect();\n var collapseDirection = getCollapseDirection(rect, x);\n var f = collapseDirection === COLLAPSE_TO_LEFT ? first : last$1;\n return f(node).map(function (target) {\n return createCollapsedNode(doc, target, collapseDirection);\n });\n };\n var locateInEmpty = function (doc, node, x) {\n var rect = node.dom().getBoundingClientRect();\n var collapseDirection = getCollapseDirection(rect, x);\n return Option.some(createCollapsedNode(doc, node, collapseDirection));\n };\n var search = function (doc, node, x) {\n var f = children(node).length === 0 ? locateInEmpty : locateInElement;\n return f(doc, node, x);\n };\n\n var caretPositionFromPoint = function (doc, x, y) {\n return Option.from(doc.dom().caretPositionFromPoint(x, y)).bind(function (pos) {\n if (pos.offsetNode === null) {\n return Option.none();\n }\n var r = doc.dom().createRange();\n r.setStart(pos.offsetNode, pos.offset);\n r.collapse();\n return Option.some(r);\n });\n };\n var caretRangeFromPoint = function (doc, x, y) {\n return Option.from(doc.dom().caretRangeFromPoint(x, y));\n };\n var searchTextNodes = function (doc, node, x, y) {\n var r = doc.dom().createRange();\n r.selectNode(node.dom());\n var rect = r.getBoundingClientRect();\n var boundedX = Math.max(rect.left, Math.min(rect.right, x));\n var boundedY = Math.max(rect.top, Math.min(rect.bottom, y));\n return locate$1(doc, node, boundedX, boundedY);\n };\n var searchFromPoint = function (doc, x, y) {\n return Element.fromPoint(doc, x, y).bind(function (elem) {\n var fallback = function () {\n return search(doc, elem, x);\n };\n return children(elem).length === 0 ? fallback() : searchTextNodes(doc, elem, x, y).orThunk(fallback);\n });\n };\n var availableSearch = document.caretPositionFromPoint ? caretPositionFromPoint : document.caretRangeFromPoint ? caretRangeFromPoint : searchFromPoint;\n var fromPoint$1 = function (win, x, y) {\n var doc = Element.fromDom(win.document);\n return availableSearch(doc, x, y).map(function (rng) {\n return SimRange.create(Element.fromDom(rng.startContainer), rng.startOffset, Element.fromDom(rng.endContainer), rng.endOffset);\n });\n };\n\n var beforeSpecial = function (element, offset) {\n var name$1 = name(element);\n if ('input' === name$1) {\n return Situ.after(element);\n } else if (!contains([\n 'br',\n 'img'\n ], name$1)) {\n return Situ.on(element, offset);\n } else {\n return offset === 0 ? Situ.before(element) : Situ.after(element);\n }\n };\n var preprocessRelative = function (startSitu, finishSitu) {\n var start = startSitu.fold(Situ.before, beforeSpecial, Situ.after);\n var finish = finishSitu.fold(Situ.before, beforeSpecial, Situ.after);\n return Selection.relative(start, finish);\n };\n var preprocessExact = function (start, soffset, finish, foffset) {\n var startSitu = beforeSpecial(start, soffset);\n var finishSitu = beforeSpecial(finish, foffset);\n return Selection.relative(startSitu, finishSitu);\n };\n var preprocess = function (selection) {\n return selection.match({\n domRange: function (rng) {\n var start = Element.fromDom(rng.startContainer);\n var finish = Element.fromDom(rng.endContainer);\n return preprocessExact(start, rng.startOffset, finish, rng.endOffset);\n },\n relative: preprocessRelative,\n exact: preprocessExact\n });\n };\n\n var makeRange = function (start, soffset, finish, foffset) {\n var doc = owner(start);\n var rng = doc.dom().createRange();\n rng.setStart(start.dom(), soffset);\n rng.setEnd(finish.dom(), foffset);\n return rng;\n };\n var after$3 = function (start, soffset, finish, foffset) {\n var r = makeRange(start, soffset, finish, foffset);\n var same = eq(start, finish) && soffset === foffset;\n return r.collapsed && !same;\n };\n\n var doSetNativeRange = function (win, rng) {\n Option.from(win.getSelection()).each(function (selection) {\n selection.removeAllRanges();\n selection.addRange(rng);\n });\n };\n var doSetRange = function (win, start, soffset, finish, foffset) {\n var rng = exactToNative(win, start, soffset, finish, foffset);\n doSetNativeRange(win, rng);\n };\n var setLegacyRtlRange = function (win, selection, start, soffset, finish, foffset) {\n selection.collapse(start.dom(), soffset);\n selection.extend(finish.dom(), foffset);\n };\n var setRangeFromRelative = function (win, relative) {\n return diagnose(win, relative).match({\n ltr: function (start, soffset, finish, foffset) {\n doSetRange(win, start, soffset, finish, foffset);\n },\n rtl: function (start, soffset, finish, foffset) {\n var selection = win.getSelection();\n if (selection.setBaseAndExtent) {\n selection.setBaseAndExtent(start.dom(), soffset, finish.dom(), foffset);\n } else if (selection.extend) {\n try {\n setLegacyRtlRange(win, selection, start, soffset, finish, foffset);\n } catch (e) {\n doSetRange(win, finish, foffset, start, soffset);\n }\n } else {\n doSetRange(win, finish, foffset, start, soffset);\n }\n }\n });\n };\n var setExact = function (win, start, soffset, finish, foffset) {\n var relative = preprocessExact(start, soffset, finish, foffset);\n setRangeFromRelative(win, relative);\n };\n var setRelative = function (win, startSitu, finishSitu) {\n var relative = preprocessRelative(startSitu, finishSitu);\n setRangeFromRelative(win, relative);\n };\n var toNative = function (selection) {\n var win = Selection.getWin(selection).dom();\n var getDomRange = function (start, soffset, finish, foffset) {\n return exactToNative(win, start, soffset, finish, foffset);\n };\n var filtered = preprocess(selection);\n return diagnose(win, filtered).match({\n ltr: getDomRange,\n rtl: getDomRange\n });\n };\n var readRange = function (selection) {\n if (selection.rangeCount > 0) {\n var firstRng = selection.getRangeAt(0);\n var lastRng = selection.getRangeAt(selection.rangeCount - 1);\n return Option.some(SimRange.create(Element.fromDom(firstRng.startContainer), firstRng.startOffset, Element.fromDom(lastRng.endContainer), lastRng.endOffset));\n } else {\n return Option.none();\n }\n };\n var doGetExact = function (selection) {\n var anchor = Element.fromDom(selection.anchorNode);\n var focus = Element.fromDom(selection.focusNode);\n return after$3(anchor, selection.anchorOffset, focus, selection.focusOffset) ? Option.some(SimRange.create(anchor, selection.anchorOffset, focus, selection.focusOffset)) : readRange(selection);\n };\n var setToElement = function (win, element) {\n var rng = selectNodeContents(win, element);\n doSetNativeRange(win, rng);\n };\n var getExact = function (win) {\n return Option.from(win.getSelection()).filter(function (sel) {\n return sel.rangeCount > 0;\n }).bind(doGetExact);\n };\n var get$9 = function (win) {\n return getExact(win).map(function (range) {\n return Selection.exact(range.start(), range.soffset(), range.finish(), range.foffset());\n });\n };\n var getFirstRect$1 = function (win, selection) {\n var rng = asLtrRange(win, selection);\n return getFirstRect(rng);\n };\n var getAtPoint = function (win, x, y) {\n return fromPoint$1(win, x, y);\n };\n var clear = function (win) {\n var selection = win.getSelection();\n selection.removeAllRanges();\n };\n\n var global$3 = tinymce.util.Tools.resolve('tinymce.util.VK');\n\n var forward = function (editor, isRoot, cell, lazyWire) {\n return go(editor, isRoot, CellNavigation.next(cell), lazyWire);\n };\n var backward = function (editor, isRoot, cell, lazyWire) {\n return go(editor, isRoot, CellNavigation.prev(cell), lazyWire);\n };\n var getCellFirstCursorPosition = function (editor, cell) {\n var selection = Selection.exact(cell, 0, cell, 0);\n return toNative(selection);\n };\n var getNewRowCursorPosition = function (editor, table) {\n var rows = descendants$1(table, 'tr');\n return last(rows).bind(function (last) {\n return descendant$1(last, 'td,th').map(function (first) {\n return getCellFirstCursorPosition(editor, first);\n });\n });\n };\n var go = function (editor, isRoot, cell, actions, lazyWire) {\n return cell.fold(Option.none, Option.none, function (current, next) {\n return first(next).map(function (cell) {\n return getCellFirstCursorPosition(editor, cell);\n });\n }, function (current) {\n return TableLookup.table(current, isRoot).bind(function (table) {\n var targets = TableTargets.noMenu(current);\n editor.undoManager.transact(function () {\n actions.insertRowsAfter(table, targets);\n });\n return getNewRowCursorPosition(editor, table);\n });\n });\n };\n var rootElements = [\n 'table',\n 'li',\n 'dl'\n ];\n var handle$1 = function (event, editor, actions, lazyWire) {\n if (event.keyCode === global$3.TAB) {\n var body_1 = getBody$1(editor);\n var isRoot_1 = function (element) {\n var name$1 = name(element);\n return eq(element, body_1) || contains(rootElements, name$1);\n };\n var rng = editor.selection.getRng();\n if (rng.collapsed) {\n var start = Element.fromDom(rng.startContainer);\n TableLookup.cell(start, isRoot_1).each(function (cell) {\n event.preventDefault();\n var navigation = event.shiftKey ? backward : forward;\n var rng = navigation(editor, isRoot_1, cell, actions, lazyWire);\n rng.each(function (range) {\n editor.selection.setRng(range);\n });\n });\n }\n }\n };\n var TabContext = { handle: handle$1 };\n\n var create$4 = Immutable('selection', 'kill');\n var Response = { create: create$4 };\n\n var create$5 = function (start, soffset, finish, foffset) {\n return {\n start: constant(Situ.on(start, soffset)),\n finish: constant(Situ.on(finish, foffset))\n };\n };\n var Situs = { create: create$5 };\n\n var convertToRange = function (win, selection) {\n var rng = asLtrRange(win, selection);\n return SimRange.create(Element.fromDom(rng.startContainer), rng.startOffset, Element.fromDom(rng.endContainer), rng.endOffset);\n };\n var makeSitus = Situs.create;\n var Util = {\n convertToRange: convertToRange,\n makeSitus: makeSitus\n };\n\n var sync = function (container, isRoot, start, soffset, finish, foffset, selectRange) {\n if (!(eq(start, finish) && soffset === foffset)) {\n return closest$1(start, 'td,th', isRoot).bind(function (s) {\n return closest$1(finish, 'td,th', isRoot).bind(function (f) {\n return detect$5(container, isRoot, s, f, selectRange);\n });\n });\n } else {\n return Option.none();\n }\n };\n var detect$5 = function (container, isRoot, start, finish, selectRange) {\n if (!eq(start, finish)) {\n return CellSelection.identify(start, finish, isRoot).bind(function (cellSel) {\n var boxes = cellSel.boxes().getOr([]);\n if (boxes.length > 0) {\n selectRange(container, boxes, cellSel.start(), cellSel.finish());\n return Option.some(Response.create(Option.some(Util.makeSitus(start, 0, start, getEnd(start))), true));\n } else {\n return Option.none();\n }\n });\n } else {\n return Option.none();\n }\n };\n var update = function (rows, columns, container, selected, annotations) {\n var updateSelection = function (newSels) {\n annotations.clear(container);\n annotations.selectRange(container, newSels.boxes(), newSels.start(), newSels.finish());\n return newSels.boxes();\n };\n return CellSelection.shiftSelection(selected, rows, columns, annotations.firstSelectedSelector(), annotations.lastSelectedSelector()).map(updateSelection);\n };\n var KeySelection = {\n sync: sync,\n detect: detect$5,\n update: update\n };\n\n var traverse = Immutable('item', 'mode');\n var backtrack = function (universe, item, _direction, transition) {\n if (transition === void 0) {\n transition = sidestep;\n }\n return universe.property().parent(item).map(function (p) {\n return traverse(p, transition);\n });\n };\n var sidestep = function (universe, item, direction, transition) {\n if (transition === void 0) {\n transition = advance;\n }\n return direction.sibling(universe, item).map(function (p) {\n return traverse(p, transition);\n });\n };\n var advance = function (universe, item, direction, transition) {\n if (transition === void 0) {\n transition = advance;\n }\n var children = universe.property().children(item);\n var result = direction.first(children);\n return result.map(function (r) {\n return traverse(r, transition);\n });\n };\n var successors = [\n {\n current: backtrack,\n next: sidestep,\n fallback: Option.none()\n },\n {\n current: sidestep,\n next: advance,\n fallback: Option.some(backtrack)\n },\n {\n current: advance,\n next: advance,\n fallback: Option.some(sidestep)\n }\n ];\n var go$1 = function (universe, item, mode, direction, rules) {\n if (rules === void 0) {\n rules = successors;\n }\n var ruleOpt = find(rules, function (succ) {\n return succ.current === mode;\n });\n return ruleOpt.bind(function (rule) {\n return rule.current(universe, item, direction, rule.next).orThunk(function () {\n return rule.fallback.bind(function (fb) {\n return go$1(universe, item, fb, direction);\n });\n });\n });\n };\n\n var left = function () {\n var sibling = function (universe, item) {\n return universe.query().prevSibling(item);\n };\n var first = function (children) {\n return children.length > 0 ? Option.some(children[children.length - 1]) : Option.none();\n };\n return {\n sibling: sibling,\n first: first\n };\n };\n var right = function () {\n var sibling = function (universe, item) {\n return universe.query().nextSibling(item);\n };\n var first = function (children) {\n return children.length > 0 ? Option.some(children[0]) : Option.none();\n };\n return {\n sibling: sibling,\n first: first\n };\n };\n var Walkers = {\n left: left,\n right: right\n };\n\n var hone = function (universe, item, predicate, mode, direction, isRoot) {\n var next = go$1(universe, item, mode, direction);\n return next.bind(function (n) {\n if (isRoot(n.item())) {\n return Option.none();\n } else {\n return predicate(n.item()) ? Option.some(n.item()) : hone(universe, n.item(), predicate, n.mode(), direction, isRoot);\n }\n });\n };\n var left$1 = function (universe, item, predicate, isRoot) {\n return hone(universe, item, predicate, sidestep, Walkers.left(), isRoot);\n };\n var right$1 = function (universe, item, predicate, isRoot) {\n return hone(universe, item, predicate, sidestep, Walkers.right(), isRoot);\n };\n\n var isLeaf = function (universe) {\n return function (element) {\n return universe.property().children(element).length === 0;\n };\n };\n var before$3 = function (universe, item, isRoot) {\n return seekLeft(universe, item, isLeaf(universe), isRoot);\n };\n var after$4 = function (universe, item, isRoot) {\n return seekRight(universe, item, isLeaf(universe), isRoot);\n };\n var seekLeft = left$1;\n var seekRight = right$1;\n\n var universe$2 = DomUniverse();\n var before$4 = function (element, isRoot) {\n return before$3(universe$2, element, isRoot);\n };\n var after$5 = function (element, isRoot) {\n return after$4(universe$2, element, isRoot);\n };\n var seekLeft$1 = function (element, predicate, isRoot) {\n return seekLeft(universe$2, element, predicate, isRoot);\n };\n var seekRight$1 = function (element, predicate, isRoot) {\n return seekRight(universe$2, element, predicate, isRoot);\n };\n\n var ancestor$2 = function (scope, predicate, isRoot) {\n return ancestor(scope, predicate, isRoot).isSome();\n };\n\n var point = Immutable('element', 'offset');\n var delta = Immutable('element', 'deltaOffset');\n var range$2 = Immutable('element', 'start', 'finish');\n var points = Immutable('begin', 'end');\n var text = Immutable('element', 'text');\n\n var adt$5 = Adt.generate([\n { none: ['message'] },\n { success: [] },\n { failedUp: ['cell'] },\n { failedDown: ['cell'] }\n ]);\n var isOverlapping = function (bridge, before, after) {\n var beforeBounds = bridge.getRect(before);\n var afterBounds = bridge.getRect(after);\n return afterBounds.right > beforeBounds.left && afterBounds.left < beforeBounds.right;\n };\n var isRow = function (elem) {\n return closest$1(elem, 'tr');\n };\n var verify = function (bridge, before, beforeOffset, after, afterOffset, failure, isRoot) {\n return closest$1(after, 'td,th', isRoot).bind(function (afterCell) {\n return closest$1(before, 'td,th', isRoot).map(function (beforeCell) {\n if (!eq(afterCell, beforeCell)) {\n return DomParent.sharedOne(isRow, [\n afterCell,\n beforeCell\n ]).fold(function () {\n return isOverlapping(bridge, beforeCell, afterCell) ? adt$5.success() : failure(beforeCell);\n }, function (_sharedRow) {\n return failure(beforeCell);\n });\n } else {\n return eq(after, afterCell) && getEnd(afterCell) === afterOffset ? failure(beforeCell) : adt$5.none('in same cell');\n }\n });\n }).getOr(adt$5.none('default'));\n };\n var cata$2 = function (subject, onNone, onSuccess, onFailedUp, onFailedDown) {\n return subject.fold(onNone, onSuccess, onFailedUp, onFailedDown);\n };\n var BeforeAfter = __assign(__assign({}, adt$5), {\n verify: verify,\n cata: cata$2\n });\n\n var inAncestor = Immutable('ancestor', 'descendants', 'element', 'index');\n var inParent = Immutable('parent', 'children', 'element', 'index');\n var indexInParent = function (element) {\n return parent(element).bind(function (parent) {\n var children$1 = children(parent);\n return indexOf(children$1, element).map(function (index) {\n return inParent(parent, children$1, element, index);\n });\n });\n };\n var indexOf = function (elements, element) {\n return findIndex(elements, curry(eq, element));\n };\n\n var isBr = function (elem) {\n return name(elem) === 'br';\n };\n var gatherer = function (cand, gather, isRoot) {\n return gather(cand, isRoot).bind(function (target) {\n return isText(target) && get$2(target).trim().length === 0 ? gatherer(target, gather, isRoot) : Option.some(target);\n });\n };\n var handleBr = function (isRoot, element, direction) {\n return direction.traverse(element).orThunk(function () {\n return gatherer(element, direction.gather, isRoot);\n }).map(direction.relative);\n };\n var findBr = function (element, offset) {\n return child(element, offset).filter(isBr).orThunk(function () {\n return child(element, offset - 1).filter(isBr);\n });\n };\n var handleParent = function (isRoot, element, offset, direction) {\n return findBr(element, offset).bind(function (br) {\n return direction.traverse(br).fold(function () {\n return gatherer(br, direction.gather, isRoot).map(direction.relative);\n }, function (adjacent) {\n return indexInParent(adjacent).map(function (info) {\n return Situ.on(info.parent(), info.index());\n });\n });\n });\n };\n var tryBr = function (isRoot, element, offset, direction) {\n var target = isBr(element) ? handleBr(isRoot, element, direction) : handleParent(isRoot, element, offset, direction);\n return target.map(function (tgt) {\n return {\n start: constant(tgt),\n finish: constant(tgt)\n };\n });\n };\n var process = function (analysis) {\n return BeforeAfter.cata(analysis, function (message) {\n return Option.none();\n }, function () {\n return Option.none();\n }, function (cell) {\n return Option.some(point(cell, 0));\n }, function (cell) {\n return Option.some(point(cell, getEnd(cell)));\n });\n };\n var BrTags = {\n tryBr: tryBr,\n process: process\n };\n\n var nu$3 = MixedBag([\n 'left',\n 'top',\n 'right',\n 'bottom'\n ], []);\n var moveDown = function (caret, amount) {\n return nu$3({\n left: caret.left(),\n top: caret.top() + amount,\n right: caret.right(),\n bottom: caret.bottom() + amount\n });\n };\n var moveUp = function (caret, amount) {\n return nu$3({\n left: caret.left(),\n top: caret.top() - amount,\n right: caret.right(),\n bottom: caret.bottom() - amount\n });\n };\n var moveBottomTo = function (caret, bottom) {\n var height = caret.bottom() - caret.top();\n return nu$3({\n left: caret.left(),\n top: bottom - height,\n right: caret.right(),\n bottom: bottom\n });\n };\n var moveTopTo = function (caret, top) {\n var height = caret.bottom() - caret.top();\n return nu$3({\n left: caret.left(),\n top: top,\n right: caret.right(),\n bottom: top + height\n });\n };\n var translate = function (caret, xDelta, yDelta) {\n return nu$3({\n left: caret.left() + xDelta,\n top: caret.top() + yDelta,\n right: caret.right() + xDelta,\n bottom: caret.bottom() + yDelta\n });\n };\n var getTop$1 = function (caret) {\n return caret.top();\n };\n var getBottom = function (caret) {\n return caret.bottom();\n };\n var toString = function (caret) {\n return '(' + caret.left() + ', ' + caret.top() + ') -> (' + caret.right() + ', ' + caret.bottom() + ')';\n };\n var Carets = {\n nu: nu$3,\n moveUp: moveUp,\n moveDown: moveDown,\n moveBottomTo: moveBottomTo,\n moveTopTo: moveTopTo,\n getTop: getTop$1,\n getBottom: getBottom,\n translate: translate,\n toString: toString\n };\n\n var getPartialBox = function (bridge, element, offset) {\n if (offset >= 0 && offset < getEnd(element)) {\n return bridge.getRangedRect(element, offset, element, offset + 1);\n } else if (offset > 0) {\n return bridge.getRangedRect(element, offset - 1, element, offset);\n }\n return Option.none();\n };\n var toCaret = function (rect) {\n return Carets.nu({\n left: rect.left,\n top: rect.top,\n right: rect.right,\n bottom: rect.bottom\n });\n };\n var getElemBox = function (bridge, element) {\n return Option.some(bridge.getRect(element));\n };\n var getBoxAt = function (bridge, element, offset) {\n if (isElement(element)) {\n return getElemBox(bridge, element).map(toCaret);\n } else if (isText(element)) {\n return getPartialBox(bridge, element, offset).map(toCaret);\n } else {\n return Option.none();\n }\n };\n var getEntireBox = function (bridge, element) {\n if (isElement(element)) {\n return getElemBox(bridge, element).map(toCaret);\n } else if (isText(element)) {\n return bridge.getRangedRect(element, 0, element, getEnd(element)).map(toCaret);\n } else {\n return Option.none();\n }\n };\n var Rectangles = {\n getBoxAt: getBoxAt,\n getEntireBox: getEntireBox\n };\n\n var JUMP_SIZE = 5;\n var NUM_RETRIES = 100;\n var adt$6 = Adt.generate([\n { none: [] },\n { retry: ['caret'] }\n ]);\n var isOutside = function (caret, box) {\n return caret.left() < box.left() || Math.abs(box.right() - caret.left()) < 1 || caret.left() > box.right();\n };\n var inOutsideBlock = function (bridge, element, caret) {\n return closest(element, DomStructure.isBlock).fold(constant(false), function (cell) {\n return Rectangles.getEntireBox(bridge, cell).exists(function (box) {\n return isOutside(caret, box);\n });\n });\n };\n var adjustDown = function (bridge, element, guessBox, original, caret) {\n var lowerCaret = Carets.moveDown(caret, JUMP_SIZE);\n if (Math.abs(guessBox.bottom() - original.bottom()) < 1) {\n return adt$6.retry(lowerCaret);\n } else if (guessBox.top() > caret.bottom()) {\n return adt$6.retry(lowerCaret);\n } else if (guessBox.top() === caret.bottom()) {\n return adt$6.retry(Carets.moveDown(caret, 1));\n } else {\n return inOutsideBlock(bridge, element, caret) ? adt$6.retry(Carets.translate(lowerCaret, JUMP_SIZE, 0)) : adt$6.none();\n }\n };\n var adjustUp = function (bridge, element, guessBox, original, caret) {\n var higherCaret = Carets.moveUp(caret, JUMP_SIZE);\n if (Math.abs(guessBox.top() - original.top()) < 1) {\n return adt$6.retry(higherCaret);\n } else if (guessBox.bottom() < caret.top()) {\n return adt$6.retry(higherCaret);\n } else if (guessBox.bottom() === caret.top()) {\n return adt$6.retry(Carets.moveUp(caret, 1));\n } else {\n return inOutsideBlock(bridge, element, caret) ? adt$6.retry(Carets.translate(higherCaret, JUMP_SIZE, 0)) : adt$6.none();\n }\n };\n var upMovement = {\n point: Carets.getTop,\n adjuster: adjustUp,\n move: Carets.moveUp,\n gather: before$4\n };\n var downMovement = {\n point: Carets.getBottom,\n adjuster: adjustDown,\n move: Carets.moveDown,\n gather: after$5\n };\n var isAtTable = function (bridge, x, y) {\n return bridge.elementFromPoint(x, y).filter(function (elm) {\n return name(elm) === 'table';\n }).isSome();\n };\n var adjustForTable = function (bridge, movement, original, caret, numRetries) {\n return adjustTil(bridge, movement, original, movement.move(caret, JUMP_SIZE), numRetries);\n };\n var adjustTil = function (bridge, movement, original, caret, numRetries) {\n if (numRetries === 0) {\n return Option.some(caret);\n }\n if (isAtTable(bridge, caret.left(), movement.point(caret))) {\n return adjustForTable(bridge, movement, original, caret, numRetries - 1);\n }\n return bridge.situsFromPoint(caret.left(), movement.point(caret)).bind(function (guess) {\n return guess.start().fold(Option.none, function (element) {\n return Rectangles.getEntireBox(bridge, element).bind(function (guessBox) {\n return movement.adjuster(bridge, element, guessBox, original, caret).fold(Option.none, function (newCaret) {\n return adjustTil(bridge, movement, original, newCaret, numRetries - 1);\n });\n }).orThunk(function () {\n return Option.some(caret);\n });\n }, Option.none);\n });\n };\n var ieTryDown = function (bridge, caret) {\n return bridge.situsFromPoint(caret.left(), caret.bottom() + JUMP_SIZE);\n };\n var ieTryUp = function (bridge, caret) {\n return bridge.situsFromPoint(caret.left(), caret.top() - JUMP_SIZE);\n };\n var checkScroll = function (movement, adjusted, bridge) {\n if (movement.point(adjusted) > bridge.getInnerHeight()) {\n return Option.some(movement.point(adjusted) - bridge.getInnerHeight());\n } else if (movement.point(adjusted) < 0) {\n return Option.some(-movement.point(adjusted));\n } else {\n return Option.none();\n }\n };\n var retry = function (movement, bridge, caret) {\n var moved = movement.move(caret, JUMP_SIZE);\n var adjusted = adjustTil(bridge, movement, caret, moved, NUM_RETRIES).getOr(moved);\n return checkScroll(movement, adjusted, bridge).fold(function () {\n return bridge.situsFromPoint(adjusted.left(), movement.point(adjusted));\n }, function (delta) {\n bridge.scrollBy(0, delta);\n return bridge.situsFromPoint(adjusted.left(), movement.point(adjusted) - delta);\n });\n };\n var Retries = {\n tryUp: curry(retry, upMovement),\n tryDown: curry(retry, downMovement),\n ieTryUp: ieTryUp,\n ieTryDown: ieTryDown,\n getJumpSize: constant(JUMP_SIZE)\n };\n\n var MAX_RETRIES = 20;\n var platform$1 = PlatformDetection$1.detect();\n var findSpot = function (bridge, isRoot, direction) {\n return bridge.getSelection().bind(function (sel) {\n return BrTags.tryBr(isRoot, sel.finish(), sel.foffset(), direction).fold(function () {\n return Option.some(point(sel.finish(), sel.foffset()));\n }, function (brNeighbour) {\n var range = bridge.fromSitus(brNeighbour);\n var analysis = BeforeAfter.verify(bridge, sel.finish(), sel.foffset(), range.finish(), range.foffset(), direction.failure, isRoot);\n return BrTags.process(analysis);\n });\n });\n };\n var scan = function (bridge, isRoot, element, offset, direction, numRetries) {\n if (numRetries === 0) {\n return Option.none();\n }\n return tryCursor(bridge, isRoot, element, offset, direction).bind(function (situs) {\n var range = bridge.fromSitus(situs);\n var analysis = BeforeAfter.verify(bridge, element, offset, range.finish(), range.foffset(), direction.failure, isRoot);\n return BeforeAfter.cata(analysis, function () {\n return Option.none();\n }, function () {\n return Option.some(situs);\n }, function (cell) {\n if (eq(element, cell) && offset === 0) {\n return tryAgain(bridge, element, offset, Carets.moveUp, direction);\n } else {\n return scan(bridge, isRoot, cell, 0, direction, numRetries - 1);\n }\n }, function (cell) {\n if (eq(element, cell) && offset === getEnd(cell)) {\n return tryAgain(bridge, element, offset, Carets.moveDown, direction);\n } else {\n return scan(bridge, isRoot, cell, getEnd(cell), direction, numRetries - 1);\n }\n });\n });\n };\n var tryAgain = function (bridge, element, offset, move, direction) {\n return Rectangles.getBoxAt(bridge, element, offset).bind(function (box) {\n return tryAt(bridge, direction, move(box, Retries.getJumpSize()));\n });\n };\n var tryAt = function (bridge, direction, box) {\n if (platform$1.browser.isChrome() || platform$1.browser.isSafari() || platform$1.browser.isFirefox() || platform$1.browser.isEdge()) {\n return direction.otherRetry(bridge, box);\n } else if (platform$1.browser.isIE()) {\n return direction.ieRetry(bridge, box);\n } else {\n return Option.none();\n }\n };\n var tryCursor = function (bridge, isRoot, element, offset, direction) {\n return Rectangles.getBoxAt(bridge, element, offset).bind(function (box) {\n return tryAt(bridge, direction, box);\n });\n };\n var handle$2 = function (bridge, isRoot, direction) {\n return findSpot(bridge, isRoot, direction).bind(function (spot) {\n return scan(bridge, isRoot, spot.element(), spot.offset(), direction, MAX_RETRIES).map(bridge.fromSitus);\n });\n };\n var TableKeys = { handle: handle$2 };\n\n var detection = PlatformDetection$1.detect();\n var inSameTable = function (elem, table) {\n return ancestor$2(elem, function (e) {\n return parent(e).exists(function (p) {\n return eq(p, table);\n });\n });\n };\n var simulate = function (bridge, isRoot, direction, initial, anchor) {\n return closest$1(initial, 'td,th', isRoot).bind(function (start) {\n return closest$1(start, 'table', isRoot).bind(function (table) {\n if (!inSameTable(anchor, table)) {\n return Option.none();\n }\n return TableKeys.handle(bridge, isRoot, direction).bind(function (range) {\n return closest$1(range.finish(), 'td,th', isRoot).map(function (finish) {\n return {\n start: constant(start),\n finish: constant(finish),\n range: constant(range)\n };\n });\n });\n });\n });\n };\n var navigate = function (bridge, isRoot, direction, initial, anchor, precheck) {\n if (detection.browser.isIE()) {\n return Option.none();\n } else {\n return precheck(initial, isRoot).orThunk(function () {\n return simulate(bridge, isRoot, direction, initial, anchor).map(function (info) {\n var range = info.range();\n return Response.create(Option.some(Util.makeSitus(range.start(), range.soffset(), range.finish(), range.foffset())), true);\n });\n });\n }\n };\n var firstUpCheck = function (initial, isRoot) {\n return closest$1(initial, 'tr', isRoot).bind(function (startRow) {\n return closest$1(startRow, 'table', isRoot).bind(function (table) {\n var rows = descendants$1(table, 'tr');\n if (eq(startRow, rows[0])) {\n return seekLeft$1(table, function (element) {\n return last$1(element).isSome();\n }, isRoot).map(function (last) {\n var lastOffset = getEnd(last);\n return Response.create(Option.some(Util.makeSitus(last, lastOffset, last, lastOffset)), true);\n });\n } else {\n return Option.none();\n }\n });\n });\n };\n var lastDownCheck = function (initial, isRoot) {\n return closest$1(initial, 'tr', isRoot).bind(function (startRow) {\n return closest$1(startRow, 'table', isRoot).bind(function (table) {\n var rows = descendants$1(table, 'tr');\n if (eq(startRow, rows[rows.length - 1])) {\n return seekRight$1(table, function (element) {\n return first(element).isSome();\n }, isRoot).map(function (first) {\n return Response.create(Option.some(Util.makeSitus(first, 0, first, 0)), true);\n });\n } else {\n return Option.none();\n }\n });\n });\n };\n var select = function (bridge, container, isRoot, direction, initial, anchor, selectRange) {\n return simulate(bridge, isRoot, direction, initial, anchor).bind(function (info) {\n return KeySelection.detect(container, isRoot, info.start(), info.finish(), selectRange);\n });\n };\n var VerticalMovement = {\n navigate: navigate,\n select: select,\n firstUpCheck: firstUpCheck,\n lastDownCheck: lastDownCheck\n };\n\n var findCell = function (target, isRoot) {\n return closest$1(target, 'td,th', isRoot);\n };\n function MouseSelection (bridge, container, isRoot, annotations) {\n var cursor = Option.none();\n var clearState = function () {\n cursor = Option.none();\n };\n var mousedown = function (event) {\n annotations.clear(container);\n cursor = findCell(event.target(), isRoot);\n };\n var mouseover = function (event) {\n cursor.each(function (start) {\n annotations.clear(container);\n findCell(event.target(), isRoot).each(function (finish) {\n CellSelection.identify(start, finish, isRoot).each(function (cellSel) {\n var boxes = cellSel.boxes().getOr([]);\n if (boxes.length > 1 || boxes.length === 1 && !eq(start, finish)) {\n annotations.selectRange(container, boxes, cellSel.start(), cellSel.finish());\n bridge.selectContents(finish);\n }\n });\n });\n });\n };\n var mouseup = function (_event) {\n cursor.each(clearState);\n };\n return {\n mousedown: mousedown,\n mouseover: mouseover,\n mouseup: mouseup\n };\n }\n\n var down = {\n traverse: nextSibling,\n gather: after$5,\n relative: Situ.before,\n otherRetry: Retries.tryDown,\n ieRetry: Retries.ieTryDown,\n failure: BeforeAfter.failedDown\n };\n var up = {\n traverse: prevSibling,\n gather: before$4,\n relative: Situ.before,\n otherRetry: Retries.tryUp,\n ieRetry: Retries.ieTryUp,\n failure: BeforeAfter.failedUp\n };\n var KeyDirection = {\n down: down,\n up: up\n };\n\n var isKey = function (key) {\n return function (keycode) {\n return keycode === key;\n };\n };\n var isUp = isKey(38);\n var isDown = isKey(40);\n var isNavigation = function (keycode) {\n return keycode >= 37 && keycode <= 40;\n };\n var SelectionKeys = {\n ltr: {\n isBackward: isKey(37),\n isForward: isKey(39)\n },\n rtl: {\n isBackward: isKey(39),\n isForward: isKey(37)\n },\n isUp: isUp,\n isDown: isDown,\n isNavigation: isNavigation\n };\n\n var toRaw = function (sr) {\n return {\n left: sr.left(),\n top: sr.top(),\n right: sr.right(),\n bottom: sr.bottom(),\n width: sr.width(),\n height: sr.height()\n };\n };\n var Rect = { toRaw: toRaw };\n\n var isSafari = PlatformDetection$1.detect().browser.isSafari();\n var get$a = function (_DOC) {\n var doc = _DOC !== undefined ? _DOC.dom() : domGlobals.document;\n var x = doc.body.scrollLeft || doc.documentElement.scrollLeft;\n var y = doc.body.scrollTop || doc.documentElement.scrollTop;\n return Position(x, y);\n };\n var by = function (x, y, _DOC) {\n var doc = _DOC !== undefined ? _DOC.dom() : domGlobals.document;\n var win = doc.defaultView;\n win.scrollBy(x, y);\n };\n\n var WindowBridge = function (win) {\n var elementFromPoint = function (x, y) {\n return Element.fromPoint(Element.fromDom(win.document), x, y);\n };\n var getRect = function (element) {\n return element.dom().getBoundingClientRect();\n };\n var getRangedRect = function (start, soffset, finish, foffset) {\n var sel = Selection.exact(start, soffset, finish, foffset);\n return getFirstRect$1(win, sel).map(Rect.toRaw);\n };\n var getSelection = function () {\n return get$9(win).map(function (exactAdt) {\n return Util.convertToRange(win, exactAdt);\n });\n };\n var fromSitus = function (situs) {\n var relative = Selection.relative(situs.start(), situs.finish());\n return Util.convertToRange(win, relative);\n };\n var situsFromPoint = function (x, y) {\n return getAtPoint(win, x, y).map(function (exact) {\n return Situs.create(exact.start(), exact.soffset(), exact.finish(), exact.foffset());\n });\n };\n var clearSelection = function () {\n clear(win);\n };\n var selectContents = function (element) {\n setToElement(win, element);\n };\n var setSelection = function (sel) {\n setExact(win, sel.start(), sel.soffset(), sel.finish(), sel.foffset());\n };\n var setRelativeSelection = function (start, finish) {\n setRelative(win, start, finish);\n };\n var getInnerHeight = function () {\n return win.innerHeight;\n };\n var getScrollY = function () {\n var pos = get$a(Element.fromDom(win.document));\n return pos.top();\n };\n var scrollBy = function (x, y) {\n by(x, y, Element.fromDom(win.document));\n };\n return {\n elementFromPoint: elementFromPoint,\n getRect: getRect,\n getRangedRect: getRangedRect,\n getSelection: getSelection,\n fromSitus: fromSitus,\n situsFromPoint: situsFromPoint,\n clearSelection: clearSelection,\n setSelection: setSelection,\n setRelativeSelection: setRelativeSelection,\n selectContents: selectContents,\n getInnerHeight: getInnerHeight,\n getScrollY: getScrollY,\n scrollBy: scrollBy\n };\n };\n\n var rc = Immutable('rows', 'cols');\n var mouse = function (win, container, isRoot, annotations) {\n var bridge = WindowBridge(win);\n var handlers = MouseSelection(bridge, container, isRoot, annotations);\n return {\n mousedown: handlers.mousedown,\n mouseover: handlers.mouseover,\n mouseup: handlers.mouseup\n };\n };\n var keyboard = function (win, container, isRoot, annotations) {\n var bridge = WindowBridge(win);\n var clearToNavigate = function () {\n annotations.clear(container);\n return Option.none();\n };\n var keydown = function (event, start, soffset, finish, foffset, direction) {\n var realEvent = event.raw();\n var keycode = realEvent.which;\n var shiftKey = realEvent.shiftKey === true;\n var handler = CellSelection.retrieve(container, annotations.selectedSelector()).fold(function () {\n if (SelectionKeys.isDown(keycode) && shiftKey) {\n return curry(VerticalMovement.select, bridge, container, isRoot, KeyDirection.down, finish, start, annotations.selectRange);\n } else if (SelectionKeys.isUp(keycode) && shiftKey) {\n return curry(VerticalMovement.select, bridge, container, isRoot, KeyDirection.up, finish, start, annotations.selectRange);\n } else if (SelectionKeys.isDown(keycode)) {\n return curry(VerticalMovement.navigate, bridge, isRoot, KeyDirection.down, finish, start, VerticalMovement.lastDownCheck);\n } else if (SelectionKeys.isUp(keycode)) {\n return curry(VerticalMovement.navigate, bridge, isRoot, KeyDirection.up, finish, start, VerticalMovement.firstUpCheck);\n } else {\n return Option.none;\n }\n }, function (selected) {\n var update = function (attempts) {\n return function () {\n var navigation = findMap(attempts, function (delta) {\n return KeySelection.update(delta.rows(), delta.cols(), container, selected, annotations);\n });\n return navigation.fold(function () {\n return CellSelection.getEdges(container, annotations.firstSelectedSelector(), annotations.lastSelectedSelector()).map(function (edges) {\n var relative = SelectionKeys.isDown(keycode) || direction.isForward(keycode) ? Situ.after : Situ.before;\n bridge.setRelativeSelection(Situ.on(edges.first(), 0), relative(edges.table()));\n annotations.clear(container);\n return Response.create(Option.none(), true);\n });\n }, function (_) {\n return Option.some(Response.create(Option.none(), true));\n });\n };\n };\n if (SelectionKeys.isDown(keycode) && shiftKey) {\n return update([rc(+1, 0)]);\n } else if (SelectionKeys.isUp(keycode) && shiftKey) {\n return update([rc(-1, 0)]);\n } else if (direction.isBackward(keycode) && shiftKey) {\n return update([\n rc(0, -1),\n rc(-1, 0)\n ]);\n } else if (direction.isForward(keycode) && shiftKey) {\n return update([\n rc(0, +1),\n rc(+1, 0)\n ]);\n } else if (SelectionKeys.isNavigation(keycode) && shiftKey === false) {\n return clearToNavigate;\n } else {\n return Option.none;\n }\n });\n return handler();\n };\n var keyup = function (event, start, soffset, finish, foffset) {\n return CellSelection.retrieve(container, annotations.selectedSelector()).fold(function () {\n var realEvent = event.raw();\n var keycode = realEvent.which;\n var shiftKey = realEvent.shiftKey === true;\n if (shiftKey === false) {\n return Option.none();\n }\n if (SelectionKeys.isNavigation(keycode)) {\n return KeySelection.sync(container, isRoot, start, soffset, finish, foffset, annotations.selectRange);\n } else {\n return Option.none();\n }\n }, Option.none);\n };\n return {\n keydown: keydown,\n keyup: keyup\n };\n };\n var InputHandlers = {\n mouse: mouse,\n keyboard: keyboard\n };\n\n var remove$7 = function (element, classes) {\n each(classes, function (x) {\n remove$5(element, x);\n });\n };\n\n var addClass = function (clazz) {\n return function (element) {\n add$2(element, clazz);\n };\n };\n var removeClasses = function (classes) {\n return function (element) {\n remove$7(element, classes);\n };\n };\n\n var byClass = function (ephemera) {\n var addSelectionClass = addClass(ephemera.selected());\n var removeSelectionClasses = removeClasses([\n ephemera.selected(),\n ephemera.lastSelected(),\n ephemera.firstSelected()\n ]);\n var clear = function (container) {\n var sels = descendants$1(container, ephemera.selectedSelector());\n each(sels, removeSelectionClasses);\n };\n var selectRange = function (container, cells, start, finish) {\n clear(container);\n each(cells, addSelectionClass);\n add$2(start, ephemera.firstSelected());\n add$2(finish, ephemera.lastSelected());\n };\n return {\n clear: clear,\n selectRange: selectRange,\n selectedSelector: ephemera.selectedSelector,\n firstSelectedSelector: ephemera.firstSelectedSelector,\n lastSelectedSelector: ephemera.lastSelectedSelector\n };\n };\n var byAttr = function (ephemera) {\n var removeSelectionAttributes = function (element) {\n remove(element, ephemera.selected());\n remove(element, ephemera.firstSelected());\n remove(element, ephemera.lastSelected());\n };\n var addSelectionAttribute = function (element) {\n set(element, ephemera.selected(), '1');\n };\n var clear = function (container) {\n var sels = descendants$1(container, ephemera.selectedSelector());\n each(sels, removeSelectionAttributes);\n };\n var selectRange = function (container, cells, start, finish) {\n clear(container);\n each(cells, addSelectionAttribute);\n set(start, ephemera.firstSelected(), '1');\n set(finish, ephemera.lastSelected(), '1');\n };\n return {\n clear: clear,\n selectRange: selectRange,\n selectedSelector: ephemera.selectedSelector,\n firstSelectedSelector: ephemera.firstSelectedSelector,\n lastSelectedSelector: ephemera.lastSelectedSelector\n };\n };\n var SelectionAnnotation = {\n byClass: byClass,\n byAttr: byAttr\n };\n\n var hasInternalTarget = function (e) {\n return has$1(Element.fromDom(e.target), 'ephox-snooker-resizer-bar') === false;\n };\n function CellSelection$1 (editor, lazyResize) {\n var handlerStruct = MixedBag([\n 'mousedown',\n 'mouseover',\n 'mouseup',\n 'keyup',\n 'keydown'\n ], []);\n var handlers = Option.none();\n var annotations = SelectionAnnotation.byAttr(Ephemera);\n editor.on('init', function (e) {\n var win = editor.getWin();\n var body = getBody$1(editor);\n var isRoot = getIsRoot(editor);\n var syncSelection = function () {\n var sel = editor.selection;\n var start = Element.fromDom(sel.getStart());\n var end = Element.fromDom(sel.getEnd());\n var shared = DomParent.sharedOne(TableLookup.table, [\n start,\n end\n ]);\n shared.fold(function () {\n annotations.clear(body);\n }, noop);\n };\n var mouseHandlers = InputHandlers.mouse(win, body, isRoot, annotations);\n var keyHandlers = InputHandlers.keyboard(win, body, isRoot, annotations);\n var hasShiftKey = function (event) {\n return event.raw().shiftKey === true;\n };\n var handleResponse = function (event, response) {\n if (!hasShiftKey(event)) {\n return;\n }\n if (response.kill()) {\n event.kill();\n }\n response.selection().each(function (ns) {\n var relative = Selection.relative(ns.start(), ns.finish());\n var rng = asLtrRange(win, relative);\n editor.selection.setRng(rng);\n });\n };\n var keyup = function (event) {\n var wrappedEvent = wrapEvent(event);\n if (wrappedEvent.raw().shiftKey && SelectionKeys.isNavigation(wrappedEvent.raw().which)) {\n var rng = editor.selection.getRng();\n var start = Element.fromDom(rng.startContainer);\n var end = Element.fromDom(rng.endContainer);\n keyHandlers.keyup(wrappedEvent, start, rng.startOffset, end, rng.endOffset).each(function (response) {\n handleResponse(wrappedEvent, response);\n });\n }\n };\n var keydown = function (event) {\n var wrappedEvent = wrapEvent(event);\n lazyResize().each(function (resize) {\n resize.hideBars();\n });\n var rng = editor.selection.getRng();\n var startContainer = Element.fromDom(editor.selection.getStart());\n var start = Element.fromDom(rng.startContainer);\n var end = Element.fromDom(rng.endContainer);\n var direction = Direction.directionAt(startContainer).isRtl() ? SelectionKeys.rtl : SelectionKeys.ltr;\n keyHandlers.keydown(wrappedEvent, start, rng.startOffset, end, rng.endOffset, direction).each(function (response) {\n handleResponse(wrappedEvent, response);\n });\n lazyResize().each(function (resize) {\n resize.showBars();\n });\n };\n var isMouseEvent = function (event) {\n return event.hasOwnProperty('x') && event.hasOwnProperty('y');\n };\n var wrapEvent = function (event) {\n var target = Element.fromDom(event.target);\n var stop = function () {\n event.stopPropagation();\n };\n var prevent = function () {\n event.preventDefault();\n };\n var kill = compose(prevent, stop);\n return {\n target: constant(target),\n x: constant(isMouseEvent(event) ? event.x : null),\n y: constant(isMouseEvent(event) ? event.y : null),\n stop: stop,\n prevent: prevent,\n kill: kill,\n raw: constant(event)\n };\n };\n var isLeftMouse = function (raw) {\n return raw.button === 0;\n };\n var isLeftButtonPressed = function (raw) {\n if (raw.buttons === undefined) {\n return true;\n }\n if (global$2.ie && global$2.ie >= 12 && raw.buttons === 0) {\n return true;\n }\n return (raw.buttons & 1) !== 0;\n };\n var mouseDown = function (e) {\n if (isLeftMouse(e) && hasInternalTarget(e)) {\n mouseHandlers.mousedown(wrapEvent(e));\n }\n };\n var mouseOver = function (e) {\n if (isLeftButtonPressed(e) && hasInternalTarget(e)) {\n mouseHandlers.mouseover(wrapEvent(e));\n }\n };\n var mouseUp = function (e) {\n if (isLeftMouse(e) && hasInternalTarget(e)) {\n mouseHandlers.mouseup(wrapEvent(e));\n }\n };\n editor.on('mousedown', mouseDown);\n editor.on('mouseover', mouseOver);\n editor.on('mouseup', mouseUp);\n editor.on('keyup', keyup);\n editor.on('keydown', keydown);\n editor.on('nodechange', syncSelection);\n handlers = Option.some(handlerStruct({\n mousedown: mouseDown,\n mouseover: mouseOver,\n mouseup: mouseUp,\n keyup: keyup,\n keydown: keydown\n }));\n });\n var destroy = function () {\n handlers.each(function (handlers) {\n });\n };\n return {\n clear: annotations.clear,\n destroy: destroy\n };\n }\n\n var Selections = function (editor) {\n var get = function () {\n var body = getBody$1(editor);\n return TableSelection.retrieve(body, Ephemera.selectedSelector()).fold(function () {\n if (editor.selection.getStart() === undefined) {\n return SelectionTypes.none();\n } else {\n return SelectionTypes.single(editor.selection);\n }\n }, function (cells) {\n return SelectionTypes.multiple(cells);\n });\n };\n return { get: get };\n };\n\n var each$4 = global$1.each;\n var addButtons = function (editor) {\n var menuItems = [];\n each$4('inserttable tableprops deletetable | cell row column'.split(' '), function (name) {\n if (name === '|') {\n menuItems.push({ text: '-' });\n } else {\n menuItems.push(editor.menuItems[name]);\n }\n });\n editor.addButton('table', {\n type: 'menubutton',\n title: 'Table',\n menu: menuItems\n });\n function cmd(command) {\n return function () {\n editor.execCommand(command);\n };\n }\n editor.addButton('tableprops', {\n title: 'Table properties',\n onclick: cmd('mceTableProps'),\n icon: 'table'\n });\n editor.addButton('tabledelete', {\n title: 'Delete table',\n onclick: cmd('mceTableDelete')\n });\n editor.addButton('tablecellprops', {\n title: 'Cell properties',\n onclick: cmd('mceTableCellProps')\n });\n editor.addButton('tablemergecells', {\n title: 'Merge cells',\n onclick: cmd('mceTableMergeCells')\n });\n editor.addButton('tablesplitcells', {\n title: 'Split cell',\n onclick: cmd('mceTableSplitCells')\n });\n editor.addButton('tableinsertrowbefore', {\n title: 'Insert row before',\n onclick: cmd('mceTableInsertRowBefore')\n });\n editor.addButton('tableinsertrowafter', {\n title: 'Insert row after',\n onclick: cmd('mceTableInsertRowAfter')\n });\n editor.addButton('tabledeleterow', {\n title: 'Delete row',\n onclick: cmd('mceTableDeleteRow')\n });\n editor.addButton('tablerowprops', {\n title: 'Row properties',\n onclick: cmd('mceTableRowProps')\n });\n editor.addButton('tablecutrow', {\n title: 'Cut row',\n onclick: cmd('mceTableCutRow')\n });\n editor.addButton('tablecopyrow', {\n title: 'Copy row',\n onclick: cmd('mceTableCopyRow')\n });\n editor.addButton('tablepasterowbefore', {\n title: 'Paste row before',\n onclick: cmd('mceTablePasteRowBefore')\n });\n editor.addButton('tablepasterowafter', {\n title: 'Paste row after',\n onclick: cmd('mceTablePasteRowAfter')\n });\n editor.addButton('tableinsertcolbefore', {\n title: 'Insert column before',\n onclick: cmd('mceTableInsertColBefore')\n });\n editor.addButton('tableinsertcolafter', {\n title: 'Insert column after',\n onclick: cmd('mceTableInsertColAfter')\n });\n editor.addButton('tabledeletecol', {\n title: 'Delete column',\n onclick: cmd('mceTableDeleteCol')\n });\n };\n var addToolbars = function (editor) {\n var isTable = function (table) {\n var selectorMatched = editor.dom.is(table, 'table') && editor.getBody().contains(table);\n return selectorMatched;\n };\n var toolbar = getToolbar(editor);\n if (toolbar.length > 0) {\n editor.addContextToolbar(isTable, toolbar.join(' '));\n }\n };\n var Buttons = {\n addButtons: addButtons,\n addToolbars: addToolbars\n };\n\n var addMenuItems = function (editor, selections) {\n var targets = Option.none();\n var tableCtrls = [];\n var cellCtrls = [];\n var mergeCtrls = [];\n var unmergeCtrls = [];\n var noTargetDisable = function (ctrl) {\n ctrl.disabled(true);\n };\n var ctrlEnable = function (ctrl) {\n ctrl.disabled(false);\n };\n var pushTable = function () {\n var self = this;\n tableCtrls.push(self);\n targets.fold(function () {\n noTargetDisable(self);\n }, function (targets) {\n ctrlEnable(self);\n });\n };\n var pushCell = function () {\n var self = this;\n cellCtrls.push(self);\n targets.fold(function () {\n noTargetDisable(self);\n }, function (targets) {\n ctrlEnable(self);\n });\n };\n var pushMerge = function () {\n var self = this;\n mergeCtrls.push(self);\n targets.fold(function () {\n noTargetDisable(self);\n }, function (targets) {\n self.disabled(targets.mergable().isNone());\n });\n };\n var pushUnmerge = function () {\n var self = this;\n unmergeCtrls.push(self);\n targets.fold(function () {\n noTargetDisable(self);\n }, function (targets) {\n self.disabled(targets.unmergable().isNone());\n });\n };\n var setDisabledCtrls = function () {\n targets.fold(function () {\n each(tableCtrls, noTargetDisable);\n each(cellCtrls, noTargetDisable);\n each(mergeCtrls, noTargetDisable);\n each(unmergeCtrls, noTargetDisable);\n }, function (targets) {\n each(tableCtrls, ctrlEnable);\n each(cellCtrls, ctrlEnable);\n each(mergeCtrls, function (mergeCtrl) {\n mergeCtrl.disabled(targets.mergable().isNone());\n });\n each(unmergeCtrls, function (unmergeCtrl) {\n unmergeCtrl.disabled(targets.unmergable().isNone());\n });\n });\n };\n editor.on('init', function () {\n editor.on('nodechange', function (e) {\n var cellOpt = Option.from(editor.dom.getParent(editor.selection.getStart(), 'th,td'));\n targets = cellOpt.bind(function (cellDom) {\n var cell = Element.fromDom(cellDom);\n var table = TableLookup.table(cell);\n return table.map(function (table) {\n return TableTargets.forMenu(selections, table, cell);\n });\n });\n setDisabledCtrls();\n });\n });\n var generateTableGrid = function () {\n var html = '';\n html = '';\n for (var y = 0; y < 10; y++) {\n html += '
';\n html += '';\n for (var x = 0; x < 10; x++) {\n html += ' ';\n }\n html += '';\n }\n html += ' 1 x 1';\n return html;\n };\n var selectGrid = function (editor, tx, ty, control) {\n var table = control.getEl().getElementsByTagName('table')[0];\n var x, y, focusCell, cell, active;\n var rtl = control.isRtl() || control.parent().rel === 'tl-tr';\n table.nextSibling.innerHTML = tx + 1 + ' x ' + (ty + 1);\n if (rtl) {\n tx = 9 - tx;\n }\n for (y = 0; y < 10; y++) {\n for (x = 0; x < 10; x++) {\n cell = table.rows[y].childNodes[x].firstChild;\n active = (rtl ? x >= tx : x <= tx) && y <= ty;\n editor.dom.toggleClass(cell, 'mce-active', active);\n if (active) {\n focusCell = cell;\n }\n }\n }\n return focusCell.parentNode;\n };\n var insertTable = hasTableGrid(editor) === false ? {\n text: 'Table',\n icon: 'table',\n context: 'table',\n onclick: cmd('mceInsertTable')\n } : {\n text: 'Table',\n icon: 'table',\n context: 'table',\n ariaHideMenu: true,\n onclick: function (e) {\n if (e.aria) {\n this.parent().hideAll();\n e.stopImmediatePropagation();\n editor.execCommand('mceInsertTable');\n }\n },\n onshow: function () {\n selectGrid(editor, 0, 0, this.menu.items()[0]);\n },\n onhide: function () {\n var elements = this.menu.items()[0].getEl().getElementsByTagName('a');\n editor.dom.removeClass(elements, 'mce-active');\n editor.dom.addClass(elements[0], 'mce-active');\n },\n menu: [{\n type: 'container',\n html: generateTableGrid(),\n onPostRender: function () {\n this.lastX = this.lastY = 0;\n },\n onmousemove: function (e) {\n var target = e.target;\n var x, y;\n if (target.tagName.toUpperCase() === 'A') {\n x = parseInt(target.getAttribute('data-mce-x'), 10);\n y = parseInt(target.getAttribute('data-mce-y'), 10);\n if (this.isRtl() || this.parent().rel === 'tl-tr') {\n x = 9 - x;\n }\n if (x !== this.lastX || y !== this.lastY) {\n selectGrid(editor, x, y, e.control);\n this.lastX = x;\n this.lastY = y;\n }\n }\n },\n onclick: function (e) {\n var self = this;\n if (e.target.tagName.toUpperCase() === 'A') {\n e.preventDefault();\n e.stopPropagation();\n self.parent().cancel();\n editor.undoManager.transact(function () {\n InsertTable.insert(editor, self.lastX + 1, self.lastY + 1);\n });\n editor.addVisual();\n }\n }\n }]\n };\n function cmd(command) {\n return function () {\n editor.execCommand(command);\n };\n }\n var tableProperties = {\n text: 'Table properties',\n context: 'table',\n onPostRender: pushTable,\n onclick: cmd('mceTableProps')\n };\n var deleteTable = {\n text: 'Delete table',\n context: 'table',\n onPostRender: pushTable,\n cmd: 'mceTableDelete'\n };\n var row = {\n text: 'Row',\n context: 'table',\n menu: [\n {\n text: 'Insert row before',\n onclick: cmd('mceTableInsertRowBefore'),\n onPostRender: pushCell\n },\n {\n text: 'Insert row after',\n onclick: cmd('mceTableInsertRowAfter'),\n onPostRender: pushCell\n },\n {\n text: 'Delete row',\n onclick: cmd('mceTableDeleteRow'),\n onPostRender: pushCell\n },\n {\n text: 'Row properties',\n onclick: cmd('mceTableRowProps'),\n onPostRender: pushCell\n },\n { text: '-' },\n {\n text: 'Cut row',\n onclick: cmd('mceTableCutRow'),\n onPostRender: pushCell\n },\n {\n text: 'Copy row',\n onclick: cmd('mceTableCopyRow'),\n onPostRender: pushCell\n },\n {\n text: 'Paste row before',\n onclick: cmd('mceTablePasteRowBefore'),\n onPostRender: pushCell\n },\n {\n text: 'Paste row after',\n onclick: cmd('mceTablePasteRowAfter'),\n onPostRender: pushCell\n }\n ]\n };\n var column = {\n text: 'Column',\n context: 'table',\n menu: [\n {\n text: 'Insert column before',\n onclick: cmd('mceTableInsertColBefore'),\n onPostRender: pushCell\n },\n {\n text: 'Insert column after',\n onclick: cmd('mceTableInsertColAfter'),\n onPostRender: pushCell\n },\n {\n text: 'Delete column',\n onclick: cmd('mceTableDeleteCol'),\n onPostRender: pushCell\n }\n ]\n };\n var cell = {\n separator: 'before',\n text: 'Cell',\n context: 'table',\n menu: [\n {\n text: 'Cell properties',\n onclick: cmd('mceTableCellProps'),\n onPostRender: pushCell\n },\n {\n text: 'Merge cells',\n onclick: cmd('mceTableMergeCells'),\n onPostRender: pushMerge\n },\n {\n text: 'Split cell',\n onclick: cmd('mceTableSplitCells'),\n onPostRender: pushUnmerge\n }\n ]\n };\n editor.addMenuItem('inserttable', insertTable);\n editor.addMenuItem('tableprops', tableProperties);\n editor.addMenuItem('deletetable', deleteTable);\n editor.addMenuItem('row', row);\n editor.addMenuItem('column', column);\n editor.addMenuItem('cell', cell);\n };\n var MenuItems = { addMenuItems: addMenuItems };\n\n var getClipboardRows = function (clipboardRows) {\n return clipboardRows.get().fold(function () {\n return;\n }, function (rows) {\n return map(rows, function (row) {\n return row.dom();\n });\n });\n };\n var setClipboardRows = function (rows, clipboardRows) {\n var sugarRows = map(rows, Element.fromDom);\n clipboardRows.set(Option.from(sugarRows));\n };\n var getApi = function (editor, clipboardRows) {\n return {\n insertTable: function (columns, rows) {\n return InsertTable.insert(editor, columns, rows);\n },\n setClipboardRows: function (rows) {\n return setClipboardRows(rows, clipboardRows);\n },\n getClipboardRows: function () {\n return getClipboardRows(clipboardRows);\n }\n };\n };\n\n function Plugin(editor) {\n var resizeHandler = ResizeHandler(editor);\n var cellSelection = CellSelection$1(editor, resizeHandler.lazyResize);\n var actions = TableActions(editor, resizeHandler.lazyWire);\n var selections = Selections(editor);\n var clipboardRows = Cell(Option.none());\n Commands.registerCommands(editor, actions, cellSelection, selections, clipboardRows);\n Clipboard.registerEvents(editor, selections, actions, cellSelection);\n MenuItems.addMenuItems(editor, selections);\n Buttons.addButtons(editor);\n Buttons.addToolbars(editor);\n editor.on('PreInit', function () {\n editor.serializer.addTempAttr(Ephemera.firstSelected());\n editor.serializer.addTempAttr(Ephemera.lastSelected());\n });\n if (hasTabNavigation(editor)) {\n editor.on('keydown', function (e) {\n TabContext.handle(e, editor, actions, resizeHandler.lazyWire);\n });\n }\n editor.on('remove', function () {\n resizeHandler.destroy();\n cellSelection.destroy();\n });\n return getApi(editor, clipboardRows);\n }\n global.add('table', Plugin);\n function Plugin$1 () {\n }\n\n return Plugin$1;\n\n}(window));\n})();\n","//! moment.js locale configuration\n//! locale : Albanian [sq]\n//! author : Flakërim Ismani : https://github.com/flakerimi\n//! author : Menelion Elensúle : https://github.com/Oire\n//! author : Oerd Cukalla : https://github.com/oerd\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var sq = moment.defineLocale('sq', {\n months: 'Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_Nëntor_Dhjetor'.split(\n '_'\n ),\n monthsShort: 'Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_Nën_Dhj'.split('_'),\n weekdays: 'E Diel_E Hënë_E Martë_E Mërkurë_E Enjte_E Premte_E Shtunë'.split(\n '_'\n ),\n weekdaysShort: 'Die_Hën_Mar_Mër_Enj_Pre_Sht'.split('_'),\n weekdaysMin: 'D_H_Ma_Më_E_P_Sh'.split('_'),\n weekdaysParseExact: true,\n meridiemParse: /PD|MD/,\n isPM: function (input) {\n return input.charAt(0) === 'M';\n },\n meridiem: function (hours, minutes, isLower) {\n return hours < 12 ? 'PD' : 'MD';\n },\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd, D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[Sot në] LT',\n nextDay: '[Nesër në] LT',\n nextWeek: 'dddd [në] LT',\n lastDay: '[Dje në] LT',\n lastWeek: 'dddd [e kaluar në] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'në %s',\n past: '%s më parë',\n s: 'disa sekonda',\n ss: '%d sekonda',\n m: 'një minutë',\n mm: '%d minuta',\n h: 'një orë',\n hh: '%d orë',\n d: 'një ditë',\n dd: '%d ditë',\n M: 'një muaj',\n MM: '%d muaj',\n y: 'një vit',\n yy: '%d vite',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal: '%d.',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return sq;\n\n})));\n","// 4.9.11 (2020-07-13)\n(function () {\n(function (domGlobals) {\n 'use strict';\n\n var noop = function () {\n };\n var compose = function (fa, fb) {\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return fa(fb.apply(null, args));\n };\n };\n var constant = function (value) {\n return function () {\n return value;\n };\n };\n var identity = function (x) {\n return x;\n };\n function curry(fn) {\n var initialArgs = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n initialArgs[_i - 1] = arguments[_i];\n }\n return function () {\n var restArgs = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n restArgs[_i] = arguments[_i];\n }\n var all = initialArgs.concat(restArgs);\n return fn.apply(null, all);\n };\n }\n var not = function (f) {\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return !f.apply(null, args);\n };\n };\n var die = function (msg) {\n return function () {\n throw new Error(msg);\n };\n };\n var never = constant(false);\n var always = constant(true);\n\n var none = function () {\n return NONE;\n };\n var NONE = function () {\n var eq = function (o) {\n return o.isNone();\n };\n var call = function (thunk) {\n return thunk();\n };\n var id = function (n) {\n return n;\n };\n var me = {\n fold: function (n, s) {\n return n();\n },\n is: never,\n isSome: never,\n isNone: always,\n getOr: id,\n getOrThunk: call,\n getOrDie: function (msg) {\n throw new Error(msg || 'error: getOrDie called on none.');\n },\n getOrNull: constant(null),\n getOrUndefined: constant(undefined),\n or: id,\n orThunk: call,\n map: none,\n each: noop,\n bind: none,\n exists: never,\n forall: always,\n filter: none,\n equals: eq,\n equals_: eq,\n toArray: function () {\n return [];\n },\n toString: constant('none()')\n };\n if (Object.freeze) {\n Object.freeze(me);\n }\n return me;\n }();\n var some = function (a) {\n var constant_a = constant(a);\n var self = function () {\n return me;\n };\n var bind = function (f) {\n return f(a);\n };\n var me = {\n fold: function (n, s) {\n return s(a);\n },\n is: function (v) {\n return a === v;\n },\n isSome: always,\n isNone: never,\n getOr: constant_a,\n getOrThunk: constant_a,\n getOrDie: constant_a,\n getOrNull: constant_a,\n getOrUndefined: constant_a,\n or: self,\n orThunk: self,\n map: function (f) {\n return some(f(a));\n },\n each: function (f) {\n f(a);\n },\n bind: bind,\n exists: bind,\n forall: bind,\n filter: function (f) {\n return f(a) ? me : NONE;\n },\n toArray: function () {\n return [a];\n },\n toString: function () {\n return 'some(' + a + ')';\n },\n equals: function (o) {\n return o.is(a);\n },\n equals_: function (o, elementEq) {\n return o.fold(never, function (b) {\n return elementEq(a, b);\n });\n }\n };\n return me;\n };\n var from = function (value) {\n return value === null || value === undefined ? NONE : some(value);\n };\n var Option = {\n some: some,\n none: none,\n from: from\n };\n\n var typeOf = function (x) {\n if (x === null) {\n return 'null';\n }\n var t = typeof x;\n if (t === 'object' && (Array.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'Array')) {\n return 'array';\n }\n if (t === 'object' && (String.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'String')) {\n return 'string';\n }\n return t;\n };\n var isType = function (type) {\n return function (value) {\n return typeOf(value) === type;\n };\n };\n var isString = isType('string');\n var isObject = isType('object');\n var isArray = isType('array');\n var isNull = isType('null');\n var isBoolean = isType('boolean');\n var isFunction = isType('function');\n var isNumber = isType('number');\n\n var nativeSlice = Array.prototype.slice;\n var nativeIndexOf = Array.prototype.indexOf;\n var nativePush = Array.prototype.push;\n var rawIndexOf = function (ts, t) {\n return nativeIndexOf.call(ts, t);\n };\n var indexOf = function (xs, x) {\n var r = rawIndexOf(xs, x);\n return r === -1 ? Option.none() : Option.some(r);\n };\n var contains = function (xs, x) {\n return rawIndexOf(xs, x) > -1;\n };\n var exists = function (xs, pred) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n if (pred(x, i)) {\n return true;\n }\n }\n return false;\n };\n var map = function (xs, f) {\n var len = xs.length;\n var r = new Array(len);\n for (var i = 0; i < len; i++) {\n var x = xs[i];\n r[i] = f(x, i);\n }\n return r;\n };\n var each = function (xs, f) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n f(x, i);\n }\n };\n var eachr = function (xs, f) {\n for (var i = xs.length - 1; i >= 0; i--) {\n var x = xs[i];\n f(x, i);\n }\n };\n var partition = function (xs, pred) {\n var pass = [];\n var fail = [];\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n var arr = pred(x, i) ? pass : fail;\n arr.push(x);\n }\n return {\n pass: pass,\n fail: fail\n };\n };\n var filter = function (xs, pred) {\n var r = [];\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n if (pred(x, i)) {\n r.push(x);\n }\n }\n return r;\n };\n var foldr = function (xs, f, acc) {\n eachr(xs, function (x) {\n acc = f(acc, x);\n });\n return acc;\n };\n var foldl = function (xs, f, acc) {\n each(xs, function (x) {\n acc = f(acc, x);\n });\n return acc;\n };\n var find = function (xs, pred) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n if (pred(x, i)) {\n return Option.some(x);\n }\n }\n return Option.none();\n };\n var findIndex = function (xs, pred) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n if (pred(x, i)) {\n return Option.some(i);\n }\n }\n return Option.none();\n };\n var flatten = function (xs) {\n var r = [];\n for (var i = 0, len = xs.length; i < len; ++i) {\n if (!isArray(xs[i])) {\n throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs);\n }\n nativePush.apply(r, xs[i]);\n }\n return r;\n };\n var bind = function (xs, f) {\n var output = map(xs, f);\n return flatten(output);\n };\n var forall = function (xs, pred) {\n for (var i = 0, len = xs.length; i < len; ++i) {\n var x = xs[i];\n if (pred(x, i) !== true) {\n return false;\n }\n }\n return true;\n };\n var reverse = function (xs) {\n var r = nativeSlice.call(xs, 0);\n r.reverse();\n return r;\n };\n var difference = function (a1, a2) {\n return filter(a1, function (x) {\n return !contains(a2, x);\n });\n };\n var mapToObject = function (xs, f) {\n var r = {};\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n r[String(x)] = f(x, i);\n }\n return r;\n };\n var sort = function (xs, comparator) {\n var copy = nativeSlice.call(xs, 0);\n copy.sort(comparator);\n return copy;\n };\n var head = function (xs) {\n return xs.length === 0 ? Option.none() : Option.some(xs[0]);\n };\n var last = function (xs) {\n return xs.length === 0 ? Option.none() : Option.some(xs[xs.length - 1]);\n };\n var from$1 = isFunction(Array.from) ? Array.from : function (x) {\n return nativeSlice.call(x);\n };\n\n var Global = typeof domGlobals.window !== 'undefined' ? domGlobals.window : Function('return this;')();\n\n var path = function (parts, scope) {\n var o = scope !== undefined && scope !== null ? scope : Global;\n for (var i = 0; i < parts.length && o !== undefined && o !== null; ++i) {\n o = o[parts[i]];\n }\n return o;\n };\n var resolve = function (p, scope) {\n var parts = p.split('.');\n return path(parts, scope);\n };\n\n var unsafe = function (name, scope) {\n return resolve(name, scope);\n };\n var getOrDie = function (name, scope) {\n var actual = unsafe(name, scope);\n if (actual === undefined || actual === null) {\n throw new Error(name + ' not available on this browser');\n }\n return actual;\n };\n var Global$1 = { getOrDie: getOrDie };\n\n var url = function () {\n return Global$1.getOrDie('URL');\n };\n var createObjectURL = function (blob) {\n return url().createObjectURL(blob);\n };\n var revokeObjectURL = function (u) {\n url().revokeObjectURL(u);\n };\n var URL = {\n createObjectURL: createObjectURL,\n revokeObjectURL: revokeObjectURL\n };\n\n var nav = domGlobals.navigator, userAgent = nav.userAgent;\n var opera, webkit, ie, ie11, ie12, gecko, mac, iDevice, android, fileApi, phone, tablet, windowsPhone;\n var matchMediaQuery = function (query) {\n return 'matchMedia' in domGlobals.window ? domGlobals.matchMedia(query).matches : false;\n };\n opera = false;\n android = /Android/.test(userAgent);\n webkit = /WebKit/.test(userAgent);\n ie = !webkit && !opera && /MSIE/gi.test(userAgent) && /Explorer/gi.test(nav.appName);\n ie = ie && /MSIE (\\w+)\\./.exec(userAgent)[1];\n ie11 = userAgent.indexOf('Trident/') !== -1 && (userAgent.indexOf('rv:') !== -1 || nav.appName.indexOf('Netscape') !== -1) ? 11 : false;\n ie12 = userAgent.indexOf('Edge/') !== -1 && !ie && !ie11 ? 12 : false;\n ie = ie || ie11 || ie12;\n gecko = !webkit && !ie11 && /Gecko/.test(userAgent);\n mac = userAgent.indexOf('Mac') !== -1;\n iDevice = /(iPad|iPhone)/.test(userAgent);\n fileApi = 'FormData' in domGlobals.window && 'FileReader' in domGlobals.window && 'URL' in domGlobals.window && !!URL.createObjectURL;\n phone = matchMediaQuery('only screen and (max-device-width: 480px)') && (android || iDevice);\n tablet = matchMediaQuery('only screen and (min-width: 800px)') && (android || iDevice);\n windowsPhone = userAgent.indexOf('Windows Phone') !== -1;\n if (ie12) {\n webkit = false;\n }\n var contentEditable = !iDevice || fileApi || parseInt(userAgent.match(/AppleWebKit\\/(\\d*)/)[1], 10) >= 534;\n var Env = {\n opera: opera,\n webkit: webkit,\n ie: ie,\n gecko: gecko,\n mac: mac,\n iOS: iDevice,\n android: android,\n contentEditable: contentEditable,\n transparentSrc: 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7',\n caretAfter: ie !== 8,\n range: domGlobals.window.getSelection && 'Range' in domGlobals.window,\n documentMode: ie && !ie12 ? domGlobals.document.documentMode || 7 : 10,\n fileApi: fileApi,\n ceFalse: ie === false || ie > 8,\n cacheSuffix: null,\n container: null,\n overrideViewPort: null,\n experimentalShadowDom: false,\n canHaveCSP: ie === false || ie > 11,\n desktop: !phone && !tablet,\n windowsPhone: windowsPhone\n };\n\n var promise = function () {\n function bind(fn, thisArg) {\n return function () {\n fn.apply(thisArg, arguments);\n };\n }\n var isArray = Array.isArray || function (value) {\n return Object.prototype.toString.call(value) === '[object Array]';\n };\n var Promise = function (fn) {\n if (typeof this !== 'object') {\n throw new TypeError('Promises must be constructed via new');\n }\n if (typeof fn !== 'function') {\n throw new TypeError('not a function');\n }\n this._state = null;\n this._value = null;\n this._deferreds = [];\n doResolve(fn, bind(resolve, this), bind(reject, this));\n };\n var asap = Promise.immediateFn || typeof setImmediate === 'function' && setImmediate || function (fn) {\n setTimeout(fn, 1);\n };\n function handle(deferred) {\n var me = this;\n if (this._state === null) {\n this._deferreds.push(deferred);\n return;\n }\n asap(function () {\n var cb = me._state ? deferred.onFulfilled : deferred.onRejected;\n if (cb === null) {\n (me._state ? deferred.resolve : deferred.reject)(me._value);\n return;\n }\n var ret;\n try {\n ret = cb(me._value);\n } catch (e) {\n deferred.reject(e);\n return;\n }\n deferred.resolve(ret);\n });\n }\n function resolve(newValue) {\n try {\n if (newValue === this) {\n throw new TypeError('A promise cannot be resolved with itself.');\n }\n if (newValue && (typeof newValue === 'object' || typeof newValue === 'function')) {\n var then = newValue.then;\n if (typeof then === 'function') {\n doResolve(bind(then, newValue), bind(resolve, this), bind(reject, this));\n return;\n }\n }\n this._state = true;\n this._value = newValue;\n finale.call(this);\n } catch (e) {\n reject.call(this, e);\n }\n }\n function reject(newValue) {\n this._state = false;\n this._value = newValue;\n finale.call(this);\n }\n function finale() {\n for (var i = 0, len = this._deferreds.length; i < len; i++) {\n handle.call(this, this._deferreds[i]);\n }\n this._deferreds = null;\n }\n function Handler(onFulfilled, onRejected, resolve, reject) {\n this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null;\n this.onRejected = typeof onRejected === 'function' ? onRejected : null;\n this.resolve = resolve;\n this.reject = reject;\n }\n function doResolve(fn, onFulfilled, onRejected) {\n var done = false;\n try {\n fn(function (value) {\n if (done) {\n return;\n }\n done = true;\n onFulfilled(value);\n }, function (reason) {\n if (done) {\n return;\n }\n done = true;\n onRejected(reason);\n });\n } catch (ex) {\n if (done) {\n return;\n }\n done = true;\n onRejected(ex);\n }\n }\n Promise.prototype.catch = function (onRejected) {\n return this.then(null, onRejected);\n };\n Promise.prototype.then = function (onFulfilled, onRejected) {\n var me = this;\n return new Promise(function (resolve, reject) {\n handle.call(me, new Handler(onFulfilled, onRejected, resolve, reject));\n });\n };\n Promise.all = function () {\n var args = Array.prototype.slice.call(arguments.length === 1 && isArray(arguments[0]) ? arguments[0] : arguments);\n return new Promise(function (resolve, reject) {\n if (args.length === 0) {\n return resolve([]);\n }\n var remaining = args.length;\n function res(i, val) {\n try {\n if (val && (typeof val === 'object' || typeof val === 'function')) {\n var then = val.then;\n if (typeof then === 'function') {\n then.call(val, function (val) {\n res(i, val);\n }, reject);\n return;\n }\n }\n args[i] = val;\n if (--remaining === 0) {\n resolve(args);\n }\n } catch (ex) {\n reject(ex);\n }\n }\n for (var i = 0; i < args.length; i++) {\n res(i, args[i]);\n }\n });\n };\n Promise.resolve = function (value) {\n if (value && typeof value === 'object' && value.constructor === Promise) {\n return value;\n }\n return new Promise(function (resolve) {\n resolve(value);\n });\n };\n Promise.reject = function (value) {\n return new Promise(function (resolve, reject) {\n reject(value);\n });\n };\n Promise.race = function (values) {\n return new Promise(function (resolve, reject) {\n for (var i = 0, len = values.length; i < len; i++) {\n values[i].then(resolve, reject);\n }\n });\n };\n return Promise;\n };\n var promiseObj = window.Promise ? window.Promise : promise();\n\n var requestAnimationFramePromise;\n var requestAnimationFrame = function (callback, element) {\n var i, requestAnimationFrameFunc = domGlobals.window.requestAnimationFrame;\n var vendors = [\n 'ms',\n 'moz',\n 'webkit'\n ];\n var featurefill = function (callback) {\n domGlobals.window.setTimeout(callback, 0);\n };\n for (i = 0; i < vendors.length && !requestAnimationFrameFunc; i++) {\n requestAnimationFrameFunc = domGlobals.window[vendors[i] + 'RequestAnimationFrame'];\n }\n if (!requestAnimationFrameFunc) {\n requestAnimationFrameFunc = featurefill;\n }\n requestAnimationFrameFunc(callback, element);\n };\n var wrappedSetTimeout = function (callback, time) {\n if (typeof time !== 'number') {\n time = 0;\n }\n return setTimeout(callback, time);\n };\n var wrappedSetInterval = function (callback, time) {\n if (typeof time !== 'number') {\n time = 1;\n }\n return setInterval(callback, time);\n };\n var wrappedClearTimeout = function (id) {\n return clearTimeout(id);\n };\n var wrappedClearInterval = function (id) {\n return clearInterval(id);\n };\n var debounce = function (callback, time) {\n var timer, func;\n func = function () {\n var args = arguments;\n clearTimeout(timer);\n timer = wrappedSetTimeout(function () {\n callback.apply(this, args);\n }, time);\n };\n func.stop = function () {\n clearTimeout(timer);\n };\n return func;\n };\n var Delay = {\n requestAnimationFrame: function (callback, element) {\n if (requestAnimationFramePromise) {\n requestAnimationFramePromise.then(callback);\n return;\n }\n requestAnimationFramePromise = new promiseObj(function (resolve) {\n if (!element) {\n element = domGlobals.document.body;\n }\n requestAnimationFrame(resolve, element);\n }).then(callback);\n },\n setTimeout: wrappedSetTimeout,\n setInterval: wrappedSetInterval,\n setEditorTimeout: function (editor, callback, time) {\n return wrappedSetTimeout(function () {\n if (!editor.removed) {\n callback();\n }\n }, time);\n },\n setEditorInterval: function (editor, callback, time) {\n var timer;\n timer = wrappedSetInterval(function () {\n if (!editor.removed) {\n callback();\n } else {\n clearInterval(timer);\n }\n }, time);\n return timer;\n },\n debounce: debounce,\n throttle: debounce,\n clearInterval: wrappedClearInterval,\n clearTimeout: wrappedClearTimeout\n };\n\n var eventExpandoPrefix = 'mce-data-';\n var mouseEventRe = /^(?:mouse|contextmenu)|click/;\n var deprecated = {\n keyLocation: 1,\n layerX: 1,\n layerY: 1,\n returnValue: 1,\n webkitMovementX: 1,\n webkitMovementY: 1,\n keyIdentifier: 1\n };\n var hasIsDefaultPrevented = function (event) {\n return event.isDefaultPrevented === returnTrue || event.isDefaultPrevented === returnFalse;\n };\n var returnFalse = function () {\n return false;\n };\n var returnTrue = function () {\n return true;\n };\n var addEvent = function (target, name, callback, capture) {\n if (target.addEventListener) {\n target.addEventListener(name, callback, capture || false);\n } else if (target.attachEvent) {\n target.attachEvent('on' + name, callback);\n }\n };\n var removeEvent = function (target, name, callback, capture) {\n if (target.removeEventListener) {\n target.removeEventListener(name, callback, capture || false);\n } else if (target.detachEvent) {\n target.detachEvent('on' + name, callback);\n }\n };\n var getTargetFromShadowDom = function (event, defaultTarget) {\n if (event.composedPath) {\n var composedPath = event.composedPath();\n if (composedPath && composedPath.length > 0) {\n return composedPath[0];\n }\n }\n return defaultTarget;\n };\n var fix = function (originalEvent, data) {\n var name;\n var event = data || {};\n for (name in originalEvent) {\n if (!deprecated[name]) {\n event[name] = originalEvent[name];\n }\n }\n if (!event.target) {\n event.target = event.srcElement || domGlobals.document;\n }\n if (Env.experimentalShadowDom) {\n event.target = getTargetFromShadowDom(originalEvent, event.target);\n }\n if (originalEvent && mouseEventRe.test(originalEvent.type) && originalEvent.pageX === undefined && originalEvent.clientX !== undefined) {\n var eventDoc = event.target.ownerDocument || domGlobals.document;\n var doc = eventDoc.documentElement;\n var body = eventDoc.body;\n event.pageX = originalEvent.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc && doc.clientLeft || body && body.clientLeft || 0);\n event.pageY = originalEvent.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc && doc.clientTop || body && body.clientTop || 0);\n }\n event.preventDefault = function () {\n event.isDefaultPrevented = returnTrue;\n if (originalEvent) {\n if (originalEvent.preventDefault) {\n originalEvent.preventDefault();\n } else {\n originalEvent.returnValue = false;\n }\n }\n };\n event.stopPropagation = function () {\n event.isPropagationStopped = returnTrue;\n if (originalEvent) {\n if (originalEvent.stopPropagation) {\n originalEvent.stopPropagation();\n } else {\n originalEvent.cancelBubble = true;\n }\n }\n };\n event.stopImmediatePropagation = function () {\n event.isImmediatePropagationStopped = returnTrue;\n event.stopPropagation();\n };\n if (hasIsDefaultPrevented(event) === false) {\n event.isDefaultPrevented = returnFalse;\n event.isPropagationStopped = returnFalse;\n event.isImmediatePropagationStopped = returnFalse;\n }\n if (typeof event.metaKey === 'undefined') {\n event.metaKey = false;\n }\n return event;\n };\n var bindOnReady = function (win, callback, eventUtils) {\n var doc = win.document, event = { type: 'ready' };\n if (eventUtils.domLoaded) {\n callback(event);\n return;\n }\n var isDocReady = function () {\n return doc.readyState === 'complete' || doc.readyState === 'interactive' && doc.body;\n };\n var readyHandler = function () {\n if (!eventUtils.domLoaded) {\n eventUtils.domLoaded = true;\n callback(event);\n }\n };\n var waitForDomLoaded = function () {\n if (isDocReady()) {\n removeEvent(doc, 'readystatechange', waitForDomLoaded);\n readyHandler();\n }\n };\n var tryScroll = function () {\n try {\n doc.documentElement.doScroll('left');\n } catch (ex) {\n Delay.setTimeout(tryScroll);\n return;\n }\n readyHandler();\n };\n if (doc.addEventListener && !(Env.ie && Env.ie < 11)) {\n if (isDocReady()) {\n readyHandler();\n } else {\n addEvent(win, 'DOMContentLoaded', readyHandler);\n }\n } else {\n addEvent(doc, 'readystatechange', waitForDomLoaded);\n if (doc.documentElement.doScroll && win.self === win.top) {\n tryScroll();\n }\n }\n addEvent(win, 'load', readyHandler);\n };\n var EventUtils = function () {\n var self = this;\n var events = {}, count, expando, hasFocusIn, hasMouseEnterLeave, mouseEnterLeave;\n expando = eventExpandoPrefix + (+new Date()).toString(32);\n hasMouseEnterLeave = 'onmouseenter' in domGlobals.document.documentElement;\n hasFocusIn = 'onfocusin' in domGlobals.document.documentElement;\n mouseEnterLeave = {\n mouseenter: 'mouseover',\n mouseleave: 'mouseout'\n };\n count = 1;\n self.domLoaded = false;\n self.events = events;\n var executeHandlers = function (evt, id) {\n var callbackList, i, l, callback;\n var container = events[id];\n callbackList = container && container[evt.type];\n if (callbackList) {\n for (i = 0, l = callbackList.length; i < l; i++) {\n callback = callbackList[i];\n if (callback && callback.func.call(callback.scope, evt) === false) {\n evt.preventDefault();\n }\n if (evt.isImmediatePropagationStopped()) {\n return;\n }\n }\n }\n };\n self.bind = function (target, names, callback, scope) {\n var id, callbackList, i, name, fakeName, nativeHandler, capture;\n var win = domGlobals.window;\n var defaultNativeHandler = function (evt) {\n executeHandlers(fix(evt || win.event), id);\n };\n if (!target || target.nodeType === 3 || target.nodeType === 8) {\n return;\n }\n if (!target[expando]) {\n id = count++;\n target[expando] = id;\n events[id] = {};\n } else {\n id = target[expando];\n }\n scope = scope || target;\n names = names.split(' ');\n i = names.length;\n while (i--) {\n name = names[i];\n nativeHandler = defaultNativeHandler;\n fakeName = capture = false;\n if (name === 'DOMContentLoaded') {\n name = 'ready';\n }\n if (self.domLoaded && name === 'ready' && target.readyState === 'complete') {\n callback.call(scope, fix({ type: name }));\n continue;\n }\n if (!hasMouseEnterLeave) {\n fakeName = mouseEnterLeave[name];\n if (fakeName) {\n nativeHandler = function (evt) {\n var current, related;\n current = evt.currentTarget;\n related = evt.relatedTarget;\n if (related && current.contains) {\n related = current.contains(related);\n } else {\n while (related && related !== current) {\n related = related.parentNode;\n }\n }\n if (!related) {\n evt = fix(evt || win.event);\n evt.type = evt.type === 'mouseout' ? 'mouseleave' : 'mouseenter';\n evt.target = current;\n executeHandlers(evt, id);\n }\n };\n }\n }\n if (!hasFocusIn && (name === 'focusin' || name === 'focusout')) {\n capture = true;\n fakeName = name === 'focusin' ? 'focus' : 'blur';\n nativeHandler = function (evt) {\n evt = fix(evt || win.event);\n evt.type = evt.type === 'focus' ? 'focusin' : 'focusout';\n executeHandlers(evt, id);\n };\n }\n callbackList = events[id][name];\n if (!callbackList) {\n events[id][name] = callbackList = [{\n func: callback,\n scope: scope\n }];\n callbackList.fakeName = fakeName;\n callbackList.capture = capture;\n callbackList.nativeHandler = nativeHandler;\n if (name === 'ready') {\n bindOnReady(target, nativeHandler, self);\n } else {\n addEvent(target, fakeName || name, nativeHandler, capture);\n }\n } else {\n if (name === 'ready' && self.domLoaded) {\n callback({ type: name });\n } else {\n callbackList.push({\n func: callback,\n scope: scope\n });\n }\n }\n }\n target = callbackList = 0;\n return callback;\n };\n self.unbind = function (target, names, callback) {\n var id, callbackList, i, ci, name, eventMap;\n if (!target || target.nodeType === 3 || target.nodeType === 8) {\n return self;\n }\n id = target[expando];\n if (id) {\n eventMap = events[id];\n if (names) {\n names = names.split(' ');\n i = names.length;\n while (i--) {\n name = names[i];\n callbackList = eventMap[name];\n if (callbackList) {\n if (callback) {\n ci = callbackList.length;\n while (ci--) {\n if (callbackList[ci].func === callback) {\n var nativeHandler = callbackList.nativeHandler;\n var fakeName = callbackList.fakeName, capture = callbackList.capture;\n callbackList = callbackList.slice(0, ci).concat(callbackList.slice(ci + 1));\n callbackList.nativeHandler = nativeHandler;\n callbackList.fakeName = fakeName;\n callbackList.capture = capture;\n eventMap[name] = callbackList;\n }\n }\n }\n if (!callback || callbackList.length === 0) {\n delete eventMap[name];\n removeEvent(target, callbackList.fakeName || name, callbackList.nativeHandler, callbackList.capture);\n }\n }\n }\n } else {\n for (name in eventMap) {\n callbackList = eventMap[name];\n removeEvent(target, callbackList.fakeName || name, callbackList.nativeHandler, callbackList.capture);\n }\n eventMap = {};\n }\n for (name in eventMap) {\n return self;\n }\n delete events[id];\n try {\n delete target[expando];\n } catch (ex) {\n target[expando] = null;\n }\n }\n return self;\n };\n self.fire = function (target, name, args) {\n var id;\n if (!target || target.nodeType === 3 || target.nodeType === 8) {\n return self;\n }\n args = fix(null, args);\n args.type = name;\n args.target = target;\n do {\n id = target[expando];\n if (id) {\n executeHandlers(args, id);\n }\n target = target.parentNode || target.ownerDocument || target.defaultView || target.parentWindow;\n } while (target && !args.isPropagationStopped());\n return self;\n };\n self.clean = function (target) {\n var i, children;\n var unbind = self.unbind;\n if (!target || target.nodeType === 3 || target.nodeType === 8) {\n return self;\n }\n if (target[expando]) {\n unbind(target);\n }\n if (!target.getElementsByTagName) {\n target = target.document;\n }\n if (target && target.getElementsByTagName) {\n unbind(target);\n children = target.getElementsByTagName('*');\n i = children.length;\n while (i--) {\n target = children[i];\n if (target[expando]) {\n unbind(target);\n }\n }\n }\n return self;\n };\n self.destroy = function () {\n events = {};\n };\n self.cancel = function (e) {\n if (e) {\n e.preventDefault();\n e.stopImmediatePropagation();\n }\n return false;\n };\n };\n EventUtils.Event = new EventUtils();\n EventUtils.Event.bind(domGlobals.window, 'ready', function () {\n });\n\n var i, support, Expr, getText, isXML, tokenize, compile, select, outermostContext, sortInput, hasDuplicate, setDocument, document, docElem, documentIsHTML, rbuggyQSA, rbuggyMatches, matches, contains$1, expando = 'sizzle' + -new Date(), preferredDoc = domGlobals.window.document, dirruns = 0, done = 0, classCache = createCache(), tokenCache = createCache(), compilerCache = createCache(), sortOrder = function (a, b) {\n if (a === b) {\n hasDuplicate = true;\n }\n return 0;\n }, strundefined = typeof undefined, MAX_NEGATIVE = 1 << 31, hasOwn = {}.hasOwnProperty, arr = [], pop = arr.pop, push_native = arr.push, push = arr.push, slice = arr.slice, indexOf$1 = arr.indexOf || function (elem) {\n var i = 0, len = this.length;\n for (; i < len; i++) {\n if (this[i] === elem) {\n return i;\n }\n }\n return -1;\n }, booleans = 'checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped', whitespace = '[\\\\x20\\\\t\\\\r\\\\n\\\\f]', identifier = '(?:\\\\\\\\.|[\\\\w-]|[^\\\\x00-\\\\xa0])+', attributes = '\\\\[' + whitespace + '*(' + identifier + ')(?:' + whitespace + '*([*^$|!~]?=)' + whitespace + '*(?:\\'((?:\\\\\\\\.|[^\\\\\\\\\\'])*)\\'|\"((?:\\\\\\\\.|[^\\\\\\\\\"])*)\"|(' + identifier + '))|)' + whitespace + '*\\\\]', pseudos = ':(' + identifier + ')(?:\\\\((' + '(\\'((?:\\\\\\\\.|[^\\\\\\\\\\'])*)\\'|\"((?:\\\\\\\\.|[^\\\\\\\\\"])*)\")|' + '((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|' + attributes + ')*)|' + '.*' + ')\\\\)|)', rtrim = new RegExp('^' + whitespace + '+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)' + whitespace + '+$', 'g'), rcomma = new RegExp('^' + whitespace + '*,' + whitespace + '*'), rcombinators = new RegExp('^' + whitespace + '*([>+~]|' + whitespace + ')' + whitespace + '*'), rattributeQuotes = new RegExp('=' + whitespace + '*([^\\\\]\\'\"]*?)' + whitespace + '*\\\\]', 'g'), rpseudo = new RegExp(pseudos), ridentifier = new RegExp('^' + identifier + '$'), matchExpr = {\n ID: new RegExp('^#(' + identifier + ')'),\n CLASS: new RegExp('^\\\\.(' + identifier + ')'),\n TAG: new RegExp('^(' + identifier + '|[*])'),\n ATTR: new RegExp('^' + attributes),\n PSEUDO: new RegExp('^' + pseudos),\n CHILD: new RegExp('^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(' + whitespace + '*(even|odd|(([+-]|)(\\\\d*)n|)' + whitespace + '*(?:([+-]|)' + whitespace + '*(\\\\d+)|))' + whitespace + '*\\\\)|)', 'i'),\n bool: new RegExp('^(?:' + booleans + ')$', 'i'),\n needsContext: new RegExp('^' + whitespace + '*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(' + whitespace + '*((?:-\\\\d)?\\\\d*)' + whitespace + '*\\\\)|)(?=[^-]|$)', 'i')\n }, rinputs = /^(?:input|select|textarea|button)$/i, rheader = /^h\\d$/i, rnative = /^[^{]+\\{\\s*\\[native \\w/, rquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/, rsibling = /[+~]/, rescape = /'|\\\\/g, runescape = new RegExp('\\\\\\\\([\\\\da-f]{1,6}' + whitespace + '?|(' + whitespace + ')|.)', 'ig'), funescape = function (_, escaped, escapedWhitespace) {\n var high = '0x' + escaped - 65536;\n return high !== high || escapedWhitespace ? escaped : high < 0 ? String.fromCharCode(high + 65536) : String.fromCharCode(high >> 10 | 55296, high & 1023 | 56320);\n };\n try {\n push.apply(arr = slice.call(preferredDoc.childNodes), preferredDoc.childNodes);\n arr[preferredDoc.childNodes.length].nodeType;\n } catch (e) {\n push = {\n apply: arr.length ? function (target, els) {\n push_native.apply(target, slice.call(els));\n } : function (target, els) {\n var j = target.length, i = 0;\n while (target[j++] = els[i++]) {\n }\n target.length = j - 1;\n }\n };\n }\n var Sizzle = function (selector, context, results, seed) {\n var match, elem, m, nodeType, i, groups, old, nid, newContext, newSelector;\n if ((context ? context.ownerDocument || context : preferredDoc) !== document) {\n setDocument(context);\n }\n context = context || document;\n results = results || [];\n if (!selector || typeof selector !== 'string') {\n return results;\n }\n if ((nodeType = context.nodeType) !== 1 && nodeType !== 9) {\n return [];\n }\n if (documentIsHTML && !seed) {\n if (match = rquickExpr.exec(selector)) {\n if (m = match[1]) {\n if (nodeType === 9) {\n elem = context.getElementById(m);\n if (elem && elem.parentNode) {\n if (elem.id === m) {\n results.push(elem);\n return results;\n }\n } else {\n return results;\n }\n } else {\n if (context.ownerDocument && (elem = context.ownerDocument.getElementById(m)) && contains$1(context, elem) && elem.id === m) {\n results.push(elem);\n return results;\n }\n }\n } else if (match[2]) {\n push.apply(results, context.getElementsByTagName(selector));\n return results;\n } else if ((m = match[3]) && support.getElementsByClassName) {\n push.apply(results, context.getElementsByClassName(m));\n return results;\n }\n }\n if (support.qsa && (!rbuggyQSA || !rbuggyQSA.test(selector))) {\n nid = old = expando;\n newContext = context;\n newSelector = nodeType === 9 && selector;\n if (nodeType === 1 && context.nodeName.toLowerCase() !== 'object') {\n groups = tokenize(selector);\n if (old = context.getAttribute('id')) {\n nid = old.replace(rescape, '\\\\$&');\n } else {\n context.setAttribute('id', nid);\n }\n nid = '[id=\\'' + nid + '\\'] ';\n i = groups.length;\n while (i--) {\n groups[i] = nid + toSelector(groups[i]);\n }\n newContext = rsibling.test(selector) && testContext(context.parentNode) || context;\n newSelector = groups.join(',');\n }\n if (newSelector) {\n try {\n push.apply(results, newContext.querySelectorAll(newSelector));\n return results;\n } catch (qsaError) {\n } finally {\n if (!old) {\n context.removeAttribute('id');\n }\n }\n }\n }\n }\n return select(selector.replace(rtrim, '$1'), context, results, seed);\n };\n function createCache() {\n var keys = [];\n function cache(key, value) {\n if (keys.push(key + ' ') > Expr.cacheLength) {\n delete cache[keys.shift()];\n }\n return cache[key + ' '] = value;\n }\n return cache;\n }\n function markFunction(fn) {\n fn[expando] = true;\n return fn;\n }\n function siblingCheck(a, b) {\n var cur = b && a, diff = cur && a.nodeType === 1 && b.nodeType === 1 && (~b.sourceIndex || MAX_NEGATIVE) - (~a.sourceIndex || MAX_NEGATIVE);\n if (diff) {\n return diff;\n }\n if (cur) {\n while (cur = cur.nextSibling) {\n if (cur === b) {\n return -1;\n }\n }\n }\n return a ? 1 : -1;\n }\n function createInputPseudo(type) {\n return function (elem) {\n var name = elem.nodeName.toLowerCase();\n return name === 'input' && elem.type === type;\n };\n }\n function createButtonPseudo(type) {\n return function (elem) {\n var name = elem.nodeName.toLowerCase();\n return (name === 'input' || name === 'button') && elem.type === type;\n };\n }\n function createPositionalPseudo(fn) {\n return markFunction(function (argument) {\n argument = +argument;\n return markFunction(function (seed, matches) {\n var j, matchIndexes = fn([], seed.length, argument), i = matchIndexes.length;\n while (i--) {\n if (seed[j = matchIndexes[i]]) {\n seed[j] = !(matches[j] = seed[j]);\n }\n }\n });\n });\n }\n function testContext(context) {\n return context && typeof context.getElementsByTagName !== strundefined && context;\n }\n support = Sizzle.support = {};\n isXML = Sizzle.isXML = function (elem) {\n var documentElement = elem && (elem.ownerDocument || elem).documentElement;\n return documentElement ? documentElement.nodeName !== 'HTML' : false;\n };\n setDocument = Sizzle.setDocument = function (node) {\n var hasCompare, doc = node ? node.ownerDocument || node : preferredDoc, parent = doc.defaultView;\n function getTop(win) {\n try {\n return win.top;\n } catch (ex) {\n }\n return null;\n }\n if (doc === document || doc.nodeType !== 9 || !doc.documentElement) {\n return document;\n }\n document = doc;\n docElem = doc.documentElement;\n documentIsHTML = !isXML(doc);\n if (parent && parent !== getTop(parent)) {\n if (parent.addEventListener) {\n parent.addEventListener('unload', function () {\n setDocument();\n }, false);\n } else if (parent.attachEvent) {\n parent.attachEvent('onunload', function () {\n setDocument();\n });\n }\n }\n support.attributes = true;\n support.getElementsByTagName = true;\n support.getElementsByClassName = rnative.test(doc.getElementsByClassName);\n support.getById = true;\n Expr.find.ID = function (id, context) {\n if (typeof context.getElementById !== strundefined && documentIsHTML) {\n var m = context.getElementById(id);\n return m && m.parentNode ? [m] : [];\n }\n };\n Expr.filter.ID = function (id) {\n var attrId = id.replace(runescape, funescape);\n return function (elem) {\n return elem.getAttribute('id') === attrId;\n };\n };\n Expr.find.TAG = support.getElementsByTagName ? function (tag, context) {\n if (typeof context.getElementsByTagName !== strundefined) {\n return context.getElementsByTagName(tag);\n }\n } : function (tag, context) {\n var elem, tmp = [], i = 0, results = context.getElementsByTagName(tag);\n if (tag === '*') {\n while (elem = results[i++]) {\n if (elem.nodeType === 1) {\n tmp.push(elem);\n }\n }\n return tmp;\n }\n return results;\n };\n Expr.find.CLASS = support.getElementsByClassName && function (className, context) {\n if (documentIsHTML) {\n return context.getElementsByClassName(className);\n }\n };\n rbuggyMatches = [];\n rbuggyQSA = [];\n support.disconnectedMatch = true;\n rbuggyQSA = rbuggyQSA.length && new RegExp(rbuggyQSA.join('|'));\n rbuggyMatches = rbuggyMatches.length && new RegExp(rbuggyMatches.join('|'));\n hasCompare = rnative.test(docElem.compareDocumentPosition);\n contains$1 = hasCompare || rnative.test(docElem.contains) ? function (a, b) {\n var adown = a.nodeType === 9 ? a.documentElement : a, bup = b && b.parentNode;\n return a === bup || !!(bup && bup.nodeType === 1 && (adown.contains ? adown.contains(bup) : a.compareDocumentPosition && a.compareDocumentPosition(bup) & 16));\n } : function (a, b) {\n if (b) {\n while (b = b.parentNode) {\n if (b === a) {\n return true;\n }\n }\n }\n return false;\n };\n sortOrder = hasCompare ? function (a, b) {\n if (a === b) {\n hasDuplicate = true;\n return 0;\n }\n var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n if (compare) {\n return compare;\n }\n compare = (a.ownerDocument || a) === (b.ownerDocument || b) ? a.compareDocumentPosition(b) : 1;\n if (compare & 1 || !support.sortDetached && b.compareDocumentPosition(a) === compare) {\n if (a === doc || a.ownerDocument === preferredDoc && contains$1(preferredDoc, a)) {\n return -1;\n }\n if (b === doc || b.ownerDocument === preferredDoc && contains$1(preferredDoc, b)) {\n return 1;\n }\n return sortInput ? indexOf$1.call(sortInput, a) - indexOf$1.call(sortInput, b) : 0;\n }\n return compare & 4 ? -1 : 1;\n } : function (a, b) {\n if (a === b) {\n hasDuplicate = true;\n return 0;\n }\n var cur, i = 0, aup = a.parentNode, bup = b.parentNode, ap = [a], bp = [b];\n if (!aup || !bup) {\n return a === doc ? -1 : b === doc ? 1 : aup ? -1 : bup ? 1 : sortInput ? indexOf$1.call(sortInput, a) - indexOf$1.call(sortInput, b) : 0;\n } else if (aup === bup) {\n return siblingCheck(a, b);\n }\n cur = a;\n while (cur = cur.parentNode) {\n ap.unshift(cur);\n }\n cur = b;\n while (cur = cur.parentNode) {\n bp.unshift(cur);\n }\n while (ap[i] === bp[i]) {\n i++;\n }\n return i ? siblingCheck(ap[i], bp[i]) : ap[i] === preferredDoc ? -1 : bp[i] === preferredDoc ? 1 : 0;\n };\n return doc;\n };\n Sizzle.matches = function (expr, elements) {\n return Sizzle(expr, null, null, elements);\n };\n Sizzle.matchesSelector = function (elem, expr) {\n if ((elem.ownerDocument || elem) !== document) {\n setDocument(elem);\n }\n expr = expr.replace(rattributeQuotes, '=\\'$1\\']');\n if (support.matchesSelector && documentIsHTML && (!rbuggyMatches || !rbuggyMatches.test(expr)) && (!rbuggyQSA || !rbuggyQSA.test(expr))) {\n try {\n var ret = matches.call(elem, expr);\n if (ret || support.disconnectedMatch || elem.document && elem.document.nodeType !== 11) {\n return ret;\n }\n } catch (e) {\n }\n }\n return Sizzle(expr, document, null, [elem]).length > 0;\n };\n Sizzle.contains = function (context, elem) {\n if ((context.ownerDocument || context) !== document) {\n setDocument(context);\n }\n return contains$1(context, elem);\n };\n Sizzle.attr = function (elem, name) {\n if ((elem.ownerDocument || elem) !== document) {\n setDocument(elem);\n }\n var fn = Expr.attrHandle[name.toLowerCase()], val = fn && hasOwn.call(Expr.attrHandle, name.toLowerCase()) ? fn(elem, name, !documentIsHTML) : undefined;\n return val !== undefined ? val : support.attributes || !documentIsHTML ? elem.getAttribute(name) : (val = elem.getAttributeNode(name)) && val.specified ? val.value : null;\n };\n Sizzle.error = function (msg) {\n throw new Error('Syntax error, unrecognized expression: ' + msg);\n };\n Sizzle.uniqueSort = function (results) {\n var elem, duplicates = [], j = 0, i = 0;\n hasDuplicate = !support.detectDuplicates;\n sortInput = !support.sortStable && results.slice(0);\n results.sort(sortOrder);\n if (hasDuplicate) {\n while (elem = results[i++]) {\n if (elem === results[i]) {\n j = duplicates.push(i);\n }\n }\n while (j--) {\n results.splice(duplicates[j], 1);\n }\n }\n sortInput = null;\n return results;\n };\n getText = Sizzle.getText = function (elem) {\n var node, ret = '', i = 0, nodeType = elem.nodeType;\n if (!nodeType) {\n while (node = elem[i++]) {\n ret += getText(node);\n }\n } else if (nodeType === 1 || nodeType === 9 || nodeType === 11) {\n if (typeof elem.textContent === 'string') {\n return elem.textContent;\n } else {\n for (elem = elem.firstChild; elem; elem = elem.nextSibling) {\n ret += getText(elem);\n }\n }\n } else if (nodeType === 3 || nodeType === 4) {\n return elem.nodeValue;\n }\n return ret;\n };\n Expr = Sizzle.selectors = {\n cacheLength: 50,\n createPseudo: markFunction,\n match: matchExpr,\n attrHandle: {},\n find: {},\n relative: {\n '>': {\n dir: 'parentNode',\n first: true\n },\n ' ': { dir: 'parentNode' },\n '+': {\n dir: 'previousSibling',\n first: true\n },\n '~': { dir: 'previousSibling' }\n },\n preFilter: {\n ATTR: function (match) {\n match[1] = match[1].replace(runescape, funescape);\n match[3] = (match[3] || match[4] || match[5] || '').replace(runescape, funescape);\n if (match[2] === '~=') {\n match[3] = ' ' + match[3] + ' ';\n }\n return match.slice(0, 4);\n },\n CHILD: function (match) {\n match[1] = match[1].toLowerCase();\n if (match[1].slice(0, 3) === 'nth') {\n if (!match[3]) {\n Sizzle.error(match[0]);\n }\n match[4] = +(match[4] ? match[5] + (match[6] || 1) : 2 * (match[3] === 'even' || match[3] === 'odd'));\n match[5] = +(match[7] + match[8] || match[3] === 'odd');\n } else if (match[3]) {\n Sizzle.error(match[0]);\n }\n return match;\n },\n PSEUDO: function (match) {\n var excess, unquoted = !match[6] && match[2];\n if (matchExpr.CHILD.test(match[0])) {\n return null;\n }\n if (match[3]) {\n match[2] = match[4] || match[5] || '';\n } else if (unquoted && rpseudo.test(unquoted) && (excess = tokenize(unquoted, true)) && (excess = unquoted.indexOf(')', unquoted.length - excess) - unquoted.length)) {\n match[0] = match[0].slice(0, excess);\n match[2] = unquoted.slice(0, excess);\n }\n return match.slice(0, 3);\n }\n },\n filter: {\n TAG: function (nodeNameSelector) {\n var nodeName = nodeNameSelector.replace(runescape, funescape).toLowerCase();\n return nodeNameSelector === '*' ? function () {\n return true;\n } : function (elem) {\n return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n };\n },\n CLASS: function (className) {\n var pattern = classCache[className + ' '];\n return pattern || (pattern = new RegExp('(^|' + whitespace + ')' + className + '(' + whitespace + '|$)')) && classCache(className, function (elem) {\n return pattern.test(typeof elem.className === 'string' && elem.className || typeof elem.getAttribute !== strundefined && elem.getAttribute('class') || '');\n });\n },\n ATTR: function (name, operator, check) {\n return function (elem) {\n var result = Sizzle.attr(elem, name);\n if (result == null) {\n return operator === '!=';\n }\n if (!operator) {\n return true;\n }\n result += '';\n return operator === '=' ? result === check : operator === '!=' ? result !== check : operator === '^=' ? check && result.indexOf(check) === 0 : operator === '*=' ? check && result.indexOf(check) > -1 : operator === '$=' ? check && result.slice(-check.length) === check : operator === '~=' ? (' ' + result + ' ').indexOf(check) > -1 : operator === '|=' ? result === check || result.slice(0, check.length + 1) === check + '-' : false;\n };\n },\n CHILD: function (type, what, argument, first, last) {\n var simple = type.slice(0, 3) !== 'nth', forward = type.slice(-4) !== 'last', ofType = what === 'of-type';\n return first === 1 && last === 0 ? function (elem) {\n return !!elem.parentNode;\n } : function (elem, context, xml) {\n var cache, outerCache, node, diff, nodeIndex, start, dir = simple !== forward ? 'nextSibling' : 'previousSibling', parent = elem.parentNode, name = ofType && elem.nodeName.toLowerCase(), useCache = !xml && !ofType;\n if (parent) {\n if (simple) {\n while (dir) {\n node = elem;\n while (node = node[dir]) {\n if (ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1) {\n return false;\n }\n }\n start = dir = type === 'only' && !start && 'nextSibling';\n }\n return true;\n }\n start = [forward ? parent.firstChild : parent.lastChild];\n if (forward && useCache) {\n outerCache = parent[expando] || (parent[expando] = {});\n cache = outerCache[type] || [];\n nodeIndex = cache[0] === dirruns && cache[1];\n diff = cache[0] === dirruns && cache[2];\n node = nodeIndex && parent.childNodes[nodeIndex];\n while (node = ++nodeIndex && node && node[dir] || (diff = nodeIndex = 0) || start.pop()) {\n if (node.nodeType === 1 && ++diff && node === elem) {\n outerCache[type] = [\n dirruns,\n nodeIndex,\n diff\n ];\n break;\n }\n }\n } else if (useCache && (cache = (elem[expando] || (elem[expando] = {}))[type]) && cache[0] === dirruns) {\n diff = cache[1];\n } else {\n while (node = ++nodeIndex && node && node[dir] || (diff = nodeIndex = 0) || start.pop()) {\n if ((ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1) && ++diff) {\n if (useCache) {\n (node[expando] || (node[expando] = {}))[type] = [\n dirruns,\n diff\n ];\n }\n if (node === elem) {\n break;\n }\n }\n }\n }\n diff -= last;\n return diff === first || diff % first === 0 && diff / first >= 0;\n }\n };\n },\n PSEUDO: function (pseudo, argument) {\n var args, fn = Expr.pseudos[pseudo] || Expr.setFilters[pseudo.toLowerCase()] || Sizzle.error('unsupported pseudo: ' + pseudo);\n if (fn[expando]) {\n return fn(argument);\n }\n if (fn.length > 1) {\n args = [\n pseudo,\n pseudo,\n '',\n argument\n ];\n return Expr.setFilters.hasOwnProperty(pseudo.toLowerCase()) ? markFunction(function (seed, matches) {\n var idx, matched = fn(seed, argument), i = matched.length;\n while (i--) {\n idx = indexOf$1.call(seed, matched[i]);\n seed[idx] = !(matches[idx] = matched[i]);\n }\n }) : function (elem) {\n return fn(elem, 0, args);\n };\n }\n return fn;\n }\n },\n pseudos: {\n not: markFunction(function (selector) {\n var input = [], results = [], matcher = compile(selector.replace(rtrim, '$1'));\n return matcher[expando] ? markFunction(function (seed, matches, context, xml) {\n var elem, unmatched = matcher(seed, null, xml, []), i = seed.length;\n while (i--) {\n if (elem = unmatched[i]) {\n seed[i] = !(matches[i] = elem);\n }\n }\n }) : function (elem, context, xml) {\n input[0] = elem;\n matcher(input, null, xml, results);\n return !results.pop();\n };\n }),\n has: markFunction(function (selector) {\n return function (elem) {\n return Sizzle(selector, elem).length > 0;\n };\n }),\n contains: markFunction(function (text) {\n text = text.replace(runescape, funescape);\n return function (elem) {\n return (elem.textContent || elem.innerText || getText(elem)).indexOf(text) > -1;\n };\n }),\n lang: markFunction(function (lang) {\n if (!ridentifier.test(lang || '')) {\n Sizzle.error('unsupported lang: ' + lang);\n }\n lang = lang.replace(runescape, funescape).toLowerCase();\n return function (elem) {\n var elemLang;\n do {\n if (elemLang = documentIsHTML ? elem.lang : elem.getAttribute('xml:lang') || elem.getAttribute('lang')) {\n elemLang = elemLang.toLowerCase();\n return elemLang === lang || elemLang.indexOf(lang + '-') === 0;\n }\n } while ((elem = elem.parentNode) && elem.nodeType === 1);\n return false;\n };\n }),\n target: function (elem) {\n var hash = domGlobals.window.location && domGlobals.window.location.hash;\n return hash && hash.slice(1) === elem.id;\n },\n root: function (elem) {\n return elem === docElem;\n },\n focus: function (elem) {\n return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);\n },\n enabled: function (elem) {\n return elem.disabled === false;\n },\n disabled: function (elem) {\n return elem.disabled === true;\n },\n checked: function (elem) {\n var nodeName = elem.nodeName.toLowerCase();\n return nodeName === 'input' && !!elem.checked || nodeName === 'option' && !!elem.selected;\n },\n selected: function (elem) {\n if (elem.parentNode) {\n elem.parentNode.selectedIndex;\n }\n return elem.selected === true;\n },\n empty: function (elem) {\n for (elem = elem.firstChild; elem; elem = elem.nextSibling) {\n if (elem.nodeType < 6) {\n return false;\n }\n }\n return true;\n },\n parent: function (elem) {\n return !Expr.pseudos.empty(elem);\n },\n header: function (elem) {\n return rheader.test(elem.nodeName);\n },\n input: function (elem) {\n return rinputs.test(elem.nodeName);\n },\n button: function (elem) {\n var name = elem.nodeName.toLowerCase();\n return name === 'input' && elem.type === 'button' || name === 'button';\n },\n text: function (elem) {\n var attr;\n return elem.nodeName.toLowerCase() === 'input' && elem.type === 'text' && ((attr = elem.getAttribute('type')) == null || attr.toLowerCase() === 'text');\n },\n first: createPositionalPseudo(function () {\n return [0];\n }),\n last: createPositionalPseudo(function (matchIndexes, length) {\n return [length - 1];\n }),\n eq: createPositionalPseudo(function (matchIndexes, length, argument) {\n return [argument < 0 ? argument + length : argument];\n }),\n even: createPositionalPseudo(function (matchIndexes, length) {\n var i = 0;\n for (; i < length; i += 2) {\n matchIndexes.push(i);\n }\n return matchIndexes;\n }),\n odd: createPositionalPseudo(function (matchIndexes, length) {\n var i = 1;\n for (; i < length; i += 2) {\n matchIndexes.push(i);\n }\n return matchIndexes;\n }),\n lt: createPositionalPseudo(function (matchIndexes, length, argument) {\n var i = argument < 0 ? argument + length : argument;\n for (; --i >= 0;) {\n matchIndexes.push(i);\n }\n return matchIndexes;\n }),\n gt: createPositionalPseudo(function (matchIndexes, length, argument) {\n var i = argument < 0 ? argument + length : argument;\n for (; ++i < length;) {\n matchIndexes.push(i);\n }\n return matchIndexes;\n })\n }\n };\n Expr.pseudos.nth = Expr.pseudos.eq;\n for (i in {\n radio: true,\n checkbox: true,\n file: true,\n password: true,\n image: true\n }) {\n Expr.pseudos[i] = createInputPseudo(i);\n }\n for (i in {\n submit: true,\n reset: true\n }) {\n Expr.pseudos[i] = createButtonPseudo(i);\n }\n function setFilters() {\n }\n setFilters.prototype = Expr.filters = Expr.pseudos;\n Expr.setFilters = new setFilters();\n tokenize = Sizzle.tokenize = function (selector, parseOnly) {\n var matched, match, tokens, type, soFar, groups, preFilters, cached = tokenCache[selector + ' '];\n if (cached) {\n return parseOnly ? 0 : cached.slice(0);\n }\n soFar = selector;\n groups = [];\n preFilters = Expr.preFilter;\n while (soFar) {\n if (!matched || (match = rcomma.exec(soFar))) {\n if (match) {\n soFar = soFar.slice(match[0].length) || soFar;\n }\n groups.push(tokens = []);\n }\n matched = false;\n if (match = rcombinators.exec(soFar)) {\n matched = match.shift();\n tokens.push({\n value: matched,\n type: match[0].replace(rtrim, ' ')\n });\n soFar = soFar.slice(matched.length);\n }\n for (type in Expr.filter) {\n if ((match = matchExpr[type].exec(soFar)) && (!preFilters[type] || (match = preFilters[type](match)))) {\n matched = match.shift();\n tokens.push({\n value: matched,\n type: type,\n matches: match\n });\n soFar = soFar.slice(matched.length);\n }\n }\n if (!matched) {\n break;\n }\n }\n return parseOnly ? soFar.length : soFar ? Sizzle.error(selector) : tokenCache(selector, groups).slice(0);\n };\n function toSelector(tokens) {\n var i = 0, len = tokens.length, selector = '';\n for (; i < len; i++) {\n selector += tokens[i].value;\n }\n return selector;\n }\n function addCombinator(matcher, combinator, base) {\n var dir = combinator.dir, checkNonElements = base && dir === 'parentNode', doneName = done++;\n return combinator.first ? function (elem, context, xml) {\n while (elem = elem[dir]) {\n if (elem.nodeType === 1 || checkNonElements) {\n return matcher(elem, context, xml);\n }\n }\n } : function (elem, context, xml) {\n var oldCache, outerCache, newCache = [\n dirruns,\n doneName\n ];\n if (xml) {\n while (elem = elem[dir]) {\n if (elem.nodeType === 1 || checkNonElements) {\n if (matcher(elem, context, xml)) {\n return true;\n }\n }\n }\n } else {\n while (elem = elem[dir]) {\n if (elem.nodeType === 1 || checkNonElements) {\n outerCache = elem[expando] || (elem[expando] = {});\n if ((oldCache = outerCache[dir]) && oldCache[0] === dirruns && oldCache[1] === doneName) {\n return newCache[2] = oldCache[2];\n } else {\n outerCache[dir] = newCache;\n if (newCache[2] = matcher(elem, context, xml)) {\n return true;\n }\n }\n }\n }\n }\n };\n }\n function elementMatcher(matchers) {\n return matchers.length > 1 ? function (elem, context, xml) {\n var i = matchers.length;\n while (i--) {\n if (!matchers[i](elem, context, xml)) {\n return false;\n }\n }\n return true;\n } : matchers[0];\n }\n function multipleContexts(selector, contexts, results) {\n var i = 0, len = contexts.length;\n for (; i < len; i++) {\n Sizzle(selector, contexts[i], results);\n }\n return results;\n }\n function condense(unmatched, map, filter, context, xml) {\n var elem, newUnmatched = [], i = 0, len = unmatched.length, mapped = map != null;\n for (; i < len; i++) {\n if (elem = unmatched[i]) {\n if (!filter || filter(elem, context, xml)) {\n newUnmatched.push(elem);\n if (mapped) {\n map.push(i);\n }\n }\n }\n }\n return newUnmatched;\n }\n function setMatcher(preFilter, selector, matcher, postFilter, postFinder, postSelector) {\n if (postFilter && !postFilter[expando]) {\n postFilter = setMatcher(postFilter);\n }\n if (postFinder && !postFinder[expando]) {\n postFinder = setMatcher(postFinder, postSelector);\n }\n return markFunction(function (seed, results, context, xml) {\n var temp, i, elem, preMap = [], postMap = [], preexisting = results.length, elems = seed || multipleContexts(selector || '*', context.nodeType ? [context] : context, []), matcherIn = preFilter && (seed || !selector) ? condense(elems, preMap, preFilter, context, xml) : elems, matcherOut = matcher ? postFinder || (seed ? preFilter : preexisting || postFilter) ? [] : results : matcherIn;\n if (matcher) {\n matcher(matcherIn, matcherOut, context, xml);\n }\n if (postFilter) {\n temp = condense(matcherOut, postMap);\n postFilter(temp, [], context, xml);\n i = temp.length;\n while (i--) {\n if (elem = temp[i]) {\n matcherOut[postMap[i]] = !(matcherIn[postMap[i]] = elem);\n }\n }\n }\n if (seed) {\n if (postFinder || preFilter) {\n if (postFinder) {\n temp = [];\n i = matcherOut.length;\n while (i--) {\n if (elem = matcherOut[i]) {\n temp.push(matcherIn[i] = elem);\n }\n }\n postFinder(null, matcherOut = [], temp, xml);\n }\n i = matcherOut.length;\n while (i--) {\n if ((elem = matcherOut[i]) && (temp = postFinder ? indexOf$1.call(seed, elem) : preMap[i]) > -1) {\n seed[temp] = !(results[temp] = elem);\n }\n }\n }\n } else {\n matcherOut = condense(matcherOut === results ? matcherOut.splice(preexisting, matcherOut.length) : matcherOut);\n if (postFinder) {\n postFinder(null, results, matcherOut, xml);\n } else {\n push.apply(results, matcherOut);\n }\n }\n });\n }\n function matcherFromTokens(tokens) {\n var checkContext, matcher, j, len = tokens.length, leadingRelative = Expr.relative[tokens[0].type], implicitRelative = leadingRelative || Expr.relative[' '], i = leadingRelative ? 1 : 0, matchContext = addCombinator(function (elem) {\n return elem === checkContext;\n }, implicitRelative, true), matchAnyContext = addCombinator(function (elem) {\n return indexOf$1.call(checkContext, elem) > -1;\n }, implicitRelative, true), matchers = [function (elem, context, xml) {\n return !leadingRelative && (xml || context !== outermostContext) || ((checkContext = context).nodeType ? matchContext(elem, context, xml) : matchAnyContext(elem, context, xml));\n }];\n for (; i < len; i++) {\n if (matcher = Expr.relative[tokens[i].type]) {\n matchers = [addCombinator(elementMatcher(matchers), matcher)];\n } else {\n matcher = Expr.filter[tokens[i].type].apply(null, tokens[i].matches);\n if (matcher[expando]) {\n j = ++i;\n for (; j < len; j++) {\n if (Expr.relative[tokens[j].type]) {\n break;\n }\n }\n return setMatcher(i > 1 && elementMatcher(matchers), i > 1 && toSelector(tokens.slice(0, i - 1).concat({ value: tokens[i - 2].type === ' ' ? '*' : '' })).replace(rtrim, '$1'), matcher, i < j && matcherFromTokens(tokens.slice(i, j)), j < len && matcherFromTokens(tokens = tokens.slice(j)), j < len && toSelector(tokens));\n }\n matchers.push(matcher);\n }\n }\n return elementMatcher(matchers);\n }\n function matcherFromGroupMatchers(elementMatchers, setMatchers) {\n var bySet = setMatchers.length > 0, byElement = elementMatchers.length > 0, superMatcher = function (seed, context, xml, results, outermost) {\n var elem, j, matcher, matchedCount = 0, i = '0', unmatched = seed && [], setMatched = [], contextBackup = outermostContext, elems = seed || byElement && Expr.find.TAG('*', outermost), dirrunsUnique = dirruns += contextBackup == null ? 1 : Math.random() || 0.1, len = elems.length;\n if (outermost) {\n outermostContext = context !== document && context;\n }\n for (; i !== len && (elem = elems[i]) != null; i++) {\n if (byElement && elem) {\n j = 0;\n while (matcher = elementMatchers[j++]) {\n if (matcher(elem, context, xml)) {\n results.push(elem);\n break;\n }\n }\n if (outermost) {\n dirruns = dirrunsUnique;\n }\n }\n if (bySet) {\n if (elem = !matcher && elem) {\n matchedCount--;\n }\n if (seed) {\n unmatched.push(elem);\n }\n }\n }\n matchedCount += i;\n if (bySet && i !== matchedCount) {\n j = 0;\n while (matcher = setMatchers[j++]) {\n matcher(unmatched, setMatched, context, xml);\n }\n if (seed) {\n if (matchedCount > 0) {\n while (i--) {\n if (!(unmatched[i] || setMatched[i])) {\n setMatched[i] = pop.call(results);\n }\n }\n }\n setMatched = condense(setMatched);\n }\n push.apply(results, setMatched);\n if (outermost && !seed && setMatched.length > 0 && matchedCount + setMatchers.length > 1) {\n Sizzle.uniqueSort(results);\n }\n }\n if (outermost) {\n dirruns = dirrunsUnique;\n outermostContext = contextBackup;\n }\n return unmatched;\n };\n return bySet ? markFunction(superMatcher) : superMatcher;\n }\n compile = Sizzle.compile = function (selector, match) {\n var i, setMatchers = [], elementMatchers = [], cached = compilerCache[selector + ' '];\n if (!cached) {\n if (!match) {\n match = tokenize(selector);\n }\n i = match.length;\n while (i--) {\n cached = matcherFromTokens(match[i]);\n if (cached[expando]) {\n setMatchers.push(cached);\n } else {\n elementMatchers.push(cached);\n }\n }\n cached = compilerCache(selector, matcherFromGroupMatchers(elementMatchers, setMatchers));\n cached.selector = selector;\n }\n return cached;\n };\n select = Sizzle.select = function (selector, context, results, seed) {\n var i, tokens, token, type, find, compiled = typeof selector === 'function' && selector, match = !seed && tokenize(selector = compiled.selector || selector);\n results = results || [];\n if (match.length === 1) {\n tokens = match[0] = match[0].slice(0);\n if (tokens.length > 2 && (token = tokens[0]).type === 'ID' && support.getById && context.nodeType === 9 && documentIsHTML && Expr.relative[tokens[1].type]) {\n context = (Expr.find.ID(token.matches[0].replace(runescape, funescape), context) || [])[0];\n if (!context) {\n return results;\n } else if (compiled) {\n context = context.parentNode;\n }\n selector = selector.slice(tokens.shift().value.length);\n }\n i = matchExpr.needsContext.test(selector) ? 0 : tokens.length;\n while (i--) {\n token = tokens[i];\n if (Expr.relative[type = token.type]) {\n break;\n }\n if (find = Expr.find[type]) {\n if (seed = find(token.matches[0].replace(runescape, funescape), rsibling.test(tokens[0].type) && testContext(context.parentNode) || context)) {\n tokens.splice(i, 1);\n selector = seed.length && toSelector(tokens);\n if (!selector) {\n push.apply(results, seed);\n return results;\n }\n break;\n }\n }\n }\n }\n (compiled || compile(selector, match))(seed, context, !documentIsHTML, results, rsibling.test(selector) && testContext(context.parentNode) || context);\n return results;\n };\n support.sortStable = expando.split('').sort(sortOrder).join('') === expando;\n support.detectDuplicates = !!hasDuplicate;\n setDocument();\n support.sortDetached = true;\n\n var isArray$1 = Array.isArray;\n var toArray = function (obj) {\n var array = obj, i, l;\n if (!isArray$1(obj)) {\n array = [];\n for (i = 0, l = obj.length; i < l; i++) {\n array[i] = obj[i];\n }\n }\n return array;\n };\n var each$1 = function (o, cb, s) {\n var n, l;\n if (!o) {\n return 0;\n }\n s = s || o;\n if (o.length !== undefined) {\n for (n = 0, l = o.length; n < l; n++) {\n if (cb.call(s, o[n], n, o) === false) {\n return 0;\n }\n }\n } else {\n for (n in o) {\n if (o.hasOwnProperty(n)) {\n if (cb.call(s, o[n], n, o) === false) {\n return 0;\n }\n }\n }\n }\n return 1;\n };\n var map$1 = function (array, callback) {\n var out = [];\n each$1(array, function (item, index) {\n out.push(callback(item, index, array));\n });\n return out;\n };\n var filter$1 = function (a, f) {\n var o = [];\n each$1(a, function (v, index) {\n if (!f || f(v, index, a)) {\n o.push(v);\n }\n });\n return o;\n };\n var indexOf$2 = function (a, v) {\n var i, l;\n if (a) {\n for (i = 0, l = a.length; i < l; i++) {\n if (a[i] === v) {\n return i;\n }\n }\n }\n return -1;\n };\n var reduce = function (collection, iteratee, accumulator, thisArg) {\n var i = 0;\n if (arguments.length < 3) {\n accumulator = collection[0];\n }\n for (; i < collection.length; i++) {\n accumulator = iteratee.call(thisArg, accumulator, collection[i], i);\n }\n return accumulator;\n };\n var findIndex$1 = function (array, predicate, thisArg) {\n var i, l;\n for (i = 0, l = array.length; i < l; i++) {\n if (predicate.call(thisArg, array[i], i, array)) {\n return i;\n }\n }\n return -1;\n };\n var find$1 = function (array, predicate, thisArg) {\n var idx = findIndex$1(array, predicate, thisArg);\n if (idx !== -1) {\n return array[idx];\n }\n return undefined;\n };\n var last$1 = function (collection) {\n return collection[collection.length - 1];\n };\n var ArrUtils = {\n isArray: isArray$1,\n toArray: toArray,\n each: each$1,\n map: map$1,\n filter: filter$1,\n indexOf: indexOf$2,\n reduce: reduce,\n findIndex: findIndex$1,\n find: find$1,\n last: last$1\n };\n\n var whiteSpaceRegExp = /^\\s*|\\s*$/g;\n var trim = function (str) {\n return str === null || str === undefined ? '' : ('' + str).replace(whiteSpaceRegExp, '');\n };\n var is = function (obj, type) {\n if (!type) {\n return obj !== undefined;\n }\n if (type === 'array' && ArrUtils.isArray(obj)) {\n return true;\n }\n return typeof obj === type;\n };\n var makeMap = function (items, delim, map) {\n var i;\n items = items || [];\n delim = delim || ',';\n if (typeof items === 'string') {\n items = items.split(delim);\n }\n map = map || {};\n i = items.length;\n while (i--) {\n map[items[i]] = {};\n }\n return map;\n };\n var hasOwnProperty = function (obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n };\n var create = function (s, p, root) {\n var self = this;\n var sp, ns, cn, scn, c, de = 0;\n s = /^((static) )?([\\w.]+)(:([\\w.]+))?/.exec(s);\n cn = s[3].match(/(^|\\.)(\\w+)$/i)[2];\n ns = self.createNS(s[3].replace(/\\.\\w+$/, ''), root);\n if (ns[cn]) {\n return;\n }\n if (s[2] === 'static') {\n ns[cn] = p;\n if (this.onCreate) {\n this.onCreate(s[2], s[3], ns[cn]);\n }\n return;\n }\n if (!p[cn]) {\n p[cn] = function () {\n };\n de = 1;\n }\n ns[cn] = p[cn];\n self.extend(ns[cn].prototype, p);\n if (s[5]) {\n sp = self.resolve(s[5]).prototype;\n scn = s[5].match(/\\.(\\w+)$/i)[1];\n c = ns[cn];\n if (de) {\n ns[cn] = function () {\n return sp[scn].apply(this, arguments);\n };\n } else {\n ns[cn] = function () {\n this.parent = sp[scn];\n return c.apply(this, arguments);\n };\n }\n ns[cn].prototype[cn] = ns[cn];\n self.each(sp, function (f, n) {\n ns[cn].prototype[n] = sp[n];\n });\n self.each(p, function (f, n) {\n if (sp[n]) {\n ns[cn].prototype[n] = function () {\n this.parent = sp[n];\n return f.apply(this, arguments);\n };\n } else {\n if (n !== cn) {\n ns[cn].prototype[n] = f;\n }\n }\n });\n }\n self.each(p.static, function (f, n) {\n ns[cn][n] = f;\n });\n };\n var extend = function (obj, ext) {\n var x = [];\n for (var _i = 2; _i < arguments.length; _i++) {\n x[_i - 2] = arguments[_i];\n }\n var i, l, name;\n var args = arguments;\n var value;\n for (i = 1, l = args.length; i < l; i++) {\n ext = args[i];\n for (name in ext) {\n if (ext.hasOwnProperty(name)) {\n value = ext[name];\n if (value !== undefined) {\n obj[name] = value;\n }\n }\n }\n }\n return obj;\n };\n var walk = function (o, f, n, s) {\n s = s || this;\n if (o) {\n if (n) {\n o = o[n];\n }\n ArrUtils.each(o, function (o, i) {\n if (f.call(s, o, i, n) === false) {\n return false;\n }\n walk(o, f, n, s);\n });\n }\n };\n var createNS = function (n, o) {\n var i, v;\n o = o || domGlobals.window;\n n = n.split('.');\n for (i = 0; i < n.length; i++) {\n v = n[i];\n if (!o[v]) {\n o[v] = {};\n }\n o = o[v];\n }\n return o;\n };\n var resolve$1 = function (n, o) {\n var i, l;\n o = o || domGlobals.window;\n n = n.split('.');\n for (i = 0, l = n.length; i < l; i++) {\n o = o[n[i]];\n if (!o) {\n break;\n }\n }\n return o;\n };\n var explode = function (s, d) {\n if (!s || is(s, 'array')) {\n return s;\n }\n return ArrUtils.map(s.split(d || ','), trim);\n };\n var _addCacheSuffix = function (url) {\n var cacheSuffix = Env.cacheSuffix;\n if (cacheSuffix) {\n url += (url.indexOf('?') === -1 ? '?' : '&') + cacheSuffix;\n }\n return url;\n };\n var Tools = {\n trim: trim,\n isArray: ArrUtils.isArray,\n is: is,\n toArray: ArrUtils.toArray,\n makeMap: makeMap,\n each: ArrUtils.each,\n map: ArrUtils.map,\n grep: ArrUtils.filter,\n inArray: ArrUtils.indexOf,\n hasOwn: hasOwnProperty,\n extend: extend,\n create: create,\n walk: walk,\n createNS: createNS,\n resolve: resolve$1,\n explode: explode,\n _addCacheSuffix: _addCacheSuffix\n };\n\n var doc = domGlobals.document, push$1 = Array.prototype.push, slice$1 = Array.prototype.slice;\n var rquickExpr$1 = /^(?:[^#<]*(<[\\w\\W]+>)[^>]*$|#([\\w\\-]*)$)/;\n var Event = EventUtils.Event;\n var skipUniques = Tools.makeMap('children,contents,next,prev');\n var isDefined = function (obj) {\n return typeof obj !== 'undefined';\n };\n var isString$1 = function (obj) {\n return typeof obj === 'string';\n };\n var isWindow = function (obj) {\n return obj && obj === obj.window;\n };\n var createFragment = function (html, fragDoc) {\n var frag, node, container;\n fragDoc = fragDoc || doc;\n container = fragDoc.createElement('div');\n frag = fragDoc.createDocumentFragment();\n container.innerHTML = html;\n while (node = container.firstChild) {\n frag.appendChild(node);\n }\n return frag;\n };\n var domManipulate = function (targetNodes, sourceItem, callback, reverse) {\n var i;\n if (isString$1(sourceItem)) {\n sourceItem = createFragment(sourceItem, getElementDocument(targetNodes[0]));\n } else if (sourceItem.length && !sourceItem.nodeType) {\n sourceItem = DomQuery.makeArray(sourceItem);\n if (reverse) {\n for (i = sourceItem.length - 1; i >= 0; i--) {\n domManipulate(targetNodes, sourceItem[i], callback, reverse);\n }\n } else {\n for (i = 0; i < sourceItem.length; i++) {\n domManipulate(targetNodes, sourceItem[i], callback, reverse);\n }\n }\n return targetNodes;\n }\n if (sourceItem.nodeType) {\n i = targetNodes.length;\n while (i--) {\n callback.call(targetNodes[i], sourceItem);\n }\n }\n return targetNodes;\n };\n var hasClass = function (node, className) {\n return node && className && (' ' + node.className + ' ').indexOf(' ' + className + ' ') !== -1;\n };\n var wrap = function (elements, wrapper, all) {\n var lastParent, newWrapper;\n wrapper = DomQuery(wrapper)[0];\n elements.each(function () {\n var self = this;\n if (!all || lastParent !== self.parentNode) {\n lastParent = self.parentNode;\n newWrapper = wrapper.cloneNode(false);\n self.parentNode.insertBefore(newWrapper, self);\n newWrapper.appendChild(self);\n } else {\n newWrapper.appendChild(self);\n }\n });\n return elements;\n };\n var numericCssMap = Tools.makeMap('fillOpacity fontWeight lineHeight opacity orphans widows zIndex zoom', ' ');\n var booleanMap = Tools.makeMap('checked compact declare defer disabled ismap multiple nohref noshade nowrap readonly selected', ' ');\n var propFix = {\n for: 'htmlFor',\n class: 'className',\n readonly: 'readOnly'\n };\n var cssFix = { float: 'cssFloat' };\n var attrHooks = {}, cssHooks = {};\n var DomQuery = function (selector, context) {\n return new DomQuery.fn.init(selector, context);\n };\n var inArray = function (item, array) {\n var i;\n if (array.indexOf) {\n return array.indexOf(item);\n }\n i = array.length;\n while (i--) {\n if (array[i] === item) {\n return i;\n }\n }\n return -1;\n };\n var whiteSpaceRegExp$1 = /^\\s*|\\s*$/g;\n var trim$1 = function (str) {\n return str === null || str === undefined ? '' : ('' + str).replace(whiteSpaceRegExp$1, '');\n };\n var each$2 = function (obj, callback) {\n var length, key, i, value;\n if (obj) {\n length = obj.length;\n if (length === undefined) {\n for (key in obj) {\n if (obj.hasOwnProperty(key)) {\n value = obj[key];\n if (callback.call(value, key, value) === false) {\n break;\n }\n }\n }\n } else {\n for (i = 0; i < length; i++) {\n value = obj[i];\n if (callback.call(value, i, value) === false) {\n break;\n }\n }\n }\n }\n return obj;\n };\n var grep = function (array, callback) {\n var out = [];\n each$2(array, function (i, item) {\n if (callback(item, i)) {\n out.push(item);\n }\n });\n return out;\n };\n var getElementDocument = function (element) {\n if (!element) {\n return doc;\n }\n if (element.nodeType === 9) {\n return element;\n }\n return element.ownerDocument;\n };\n DomQuery.fn = DomQuery.prototype = {\n constructor: DomQuery,\n selector: '',\n context: null,\n length: 0,\n init: function (selector, context) {\n var self = this;\n var match, node;\n if (!selector) {\n return self;\n }\n if (selector.nodeType) {\n self.context = self[0] = selector;\n self.length = 1;\n return self;\n }\n if (context && context.nodeType) {\n self.context = context;\n } else {\n if (context) {\n return DomQuery(selector).attr(context);\n }\n self.context = context = domGlobals.document;\n }\n if (isString$1(selector)) {\n self.selector = selector;\n if (selector.charAt(0) === '<' && selector.charAt(selector.length - 1) === '>' && selector.length >= 3) {\n match = [\n null,\n selector,\n null\n ];\n } else {\n match = rquickExpr$1.exec(selector);\n }\n if (match) {\n if (match[1]) {\n node = createFragment(selector, getElementDocument(context)).firstChild;\n while (node) {\n push$1.call(self, node);\n node = node.nextSibling;\n }\n } else {\n node = getElementDocument(context).getElementById(match[2]);\n if (!node) {\n return self;\n }\n if (node.id !== match[2]) {\n return self.find(selector);\n }\n self.length = 1;\n self[0] = node;\n }\n } else {\n return DomQuery(context).find(selector);\n }\n } else {\n this.add(selector, false);\n }\n return self;\n },\n toArray: function () {\n return Tools.toArray(this);\n },\n add: function (items, sort) {\n var self = this;\n var nodes, i;\n if (isString$1(items)) {\n return self.add(DomQuery(items));\n }\n if (sort !== false) {\n nodes = DomQuery.unique(self.toArray().concat(DomQuery.makeArray(items)));\n self.length = nodes.length;\n for (i = 0; i < nodes.length; i++) {\n self[i] = nodes[i];\n }\n } else {\n push$1.apply(self, DomQuery.makeArray(items));\n }\n return self;\n },\n attr: function (name, value) {\n var self = this;\n var hook;\n if (typeof name === 'object') {\n each$2(name, function (name, value) {\n self.attr(name, value);\n });\n } else if (isDefined(value)) {\n this.each(function () {\n var hook;\n if (this.nodeType === 1) {\n hook = attrHooks[name];\n if (hook && hook.set) {\n hook.set(this, value);\n return;\n }\n if (value === null) {\n this.removeAttribute(name, 2);\n } else {\n this.setAttribute(name, value, 2);\n }\n }\n });\n } else {\n if (self[0] && self[0].nodeType === 1) {\n hook = attrHooks[name];\n if (hook && hook.get) {\n return hook.get(self[0], name);\n }\n if (booleanMap[name]) {\n return self.prop(name) ? name : undefined;\n }\n value = self[0].getAttribute(name, 2);\n if (value === null) {\n value = undefined;\n }\n }\n return value;\n }\n return self;\n },\n removeAttr: function (name) {\n return this.attr(name, null);\n },\n prop: function (name, value) {\n var self = this;\n name = propFix[name] || name;\n if (typeof name === 'object') {\n each$2(name, function (name, value) {\n self.prop(name, value);\n });\n } else if (isDefined(value)) {\n this.each(function () {\n if (this.nodeType === 1) {\n this[name] = value;\n }\n });\n } else {\n if (self[0] && self[0].nodeType && name in self[0]) {\n return self[0][name];\n }\n return value;\n }\n return self;\n },\n css: function (name, value) {\n var self = this;\n var elm, hook;\n var camel = function (name) {\n return name.replace(/-(\\D)/g, function (a, b) {\n return b.toUpperCase();\n });\n };\n var dashed = function (name) {\n return name.replace(/[A-Z]/g, function (a) {\n return '-' + a;\n });\n };\n if (typeof name === 'object') {\n each$2(name, function (name, value) {\n self.css(name, value);\n });\n } else {\n if (isDefined(value)) {\n name = camel(name);\n if (typeof value === 'number' && !numericCssMap[name]) {\n value = value.toString() + 'px';\n }\n self.each(function () {\n var style = this.style;\n hook = cssHooks[name];\n if (hook && hook.set) {\n hook.set(this, value);\n return;\n }\n try {\n this.style[cssFix[name] || name] = value;\n } catch (ex) {\n }\n if (value === null || value === '') {\n if (style.removeProperty) {\n style.removeProperty(dashed(name));\n } else {\n style.removeAttribute(name);\n }\n }\n });\n } else {\n elm = self[0];\n hook = cssHooks[name];\n if (hook && hook.get) {\n return hook.get(elm);\n }\n if (elm.ownerDocument.defaultView) {\n try {\n return elm.ownerDocument.defaultView.getComputedStyle(elm, null).getPropertyValue(dashed(name));\n } catch (ex) {\n return undefined;\n }\n } else if (elm.currentStyle) {\n return elm.currentStyle[camel(name)];\n } else {\n return '';\n }\n }\n }\n return self;\n },\n remove: function () {\n var self = this;\n var node, i = this.length;\n while (i--) {\n node = self[i];\n Event.clean(node);\n if (node.parentNode) {\n node.parentNode.removeChild(node);\n }\n }\n return this;\n },\n empty: function () {\n var self = this;\n var node, i = this.length;\n while (i--) {\n node = self[i];\n while (node.firstChild) {\n node.removeChild(node.firstChild);\n }\n }\n return this;\n },\n html: function (value) {\n var self = this;\n var i;\n if (isDefined(value)) {\n i = self.length;\n try {\n while (i--) {\n self[i].innerHTML = value;\n }\n } catch (ex) {\n DomQuery(self[i]).empty().append(value);\n }\n return self;\n }\n return self[0] ? self[0].innerHTML : '';\n },\n text: function (value) {\n var self = this;\n var i;\n if (isDefined(value)) {\n i = self.length;\n while (i--) {\n if ('innerText' in self[i]) {\n self[i].innerText = value;\n } else {\n self[0].textContent = value;\n }\n }\n return self;\n }\n return self[0] ? self[0].innerText || self[0].textContent : '';\n },\n append: function () {\n return domManipulate(this, arguments, function (node) {\n if (this.nodeType === 1 || this.host && this.host.nodeType === 1) {\n this.appendChild(node);\n }\n });\n },\n prepend: function () {\n return domManipulate(this, arguments, function (node) {\n if (this.nodeType === 1 || this.host && this.host.nodeType === 1) {\n this.insertBefore(node, this.firstChild);\n }\n }, true);\n },\n before: function () {\n var self = this;\n if (self[0] && self[0].parentNode) {\n return domManipulate(self, arguments, function (node) {\n this.parentNode.insertBefore(node, this);\n });\n }\n return self;\n },\n after: function () {\n var self = this;\n if (self[0] && self[0].parentNode) {\n return domManipulate(self, arguments, function (node) {\n this.parentNode.insertBefore(node, this.nextSibling);\n }, true);\n }\n return self;\n },\n appendTo: function (val) {\n DomQuery(val).append(this);\n return this;\n },\n prependTo: function (val) {\n DomQuery(val).prepend(this);\n return this;\n },\n replaceWith: function (content) {\n return this.before(content).remove();\n },\n wrap: function (content) {\n return wrap(this, content);\n },\n wrapAll: function (content) {\n return wrap(this, content, true);\n },\n wrapInner: function (content) {\n this.each(function () {\n DomQuery(this).contents().wrapAll(content);\n });\n return this;\n },\n unwrap: function () {\n return this.parent().each(function () {\n DomQuery(this).replaceWith(this.childNodes);\n });\n },\n clone: function () {\n var result = [];\n this.each(function () {\n result.push(this.cloneNode(true));\n });\n return DomQuery(result);\n },\n addClass: function (className) {\n return this.toggleClass(className, true);\n },\n removeClass: function (className) {\n return this.toggleClass(className, false);\n },\n toggleClass: function (className, state) {\n var self = this;\n if (typeof className !== 'string') {\n return self;\n }\n if (className.indexOf(' ') !== -1) {\n each$2(className.split(' '), function () {\n self.toggleClass(this, state);\n });\n } else {\n self.each(function (index, node) {\n var existingClassName, classState;\n classState = hasClass(node, className);\n if (classState !== state) {\n existingClassName = node.className;\n if (classState) {\n node.className = trim$1((' ' + existingClassName + ' ').replace(' ' + className + ' ', ' '));\n } else {\n node.className += existingClassName ? ' ' + className : className;\n }\n }\n });\n }\n return self;\n },\n hasClass: function (className) {\n return hasClass(this[0], className);\n },\n each: function (callback) {\n return each$2(this, callback);\n },\n on: function (name, callback) {\n return this.each(function () {\n Event.bind(this, name, callback);\n });\n },\n off: function (name, callback) {\n return this.each(function () {\n Event.unbind(this, name, callback);\n });\n },\n trigger: function (name) {\n return this.each(function () {\n if (typeof name === 'object') {\n Event.fire(this, name.type, name);\n } else {\n Event.fire(this, name);\n }\n });\n },\n show: function () {\n return this.css('display', '');\n },\n hide: function () {\n return this.css('display', 'none');\n },\n slice: function () {\n return new DomQuery(slice$1.apply(this, arguments));\n },\n eq: function (index) {\n return index === -1 ? this.slice(index) : this.slice(index, +index + 1);\n },\n first: function () {\n return this.eq(0);\n },\n last: function () {\n return this.eq(-1);\n },\n find: function (selector) {\n var i, l;\n var ret = [];\n for (i = 0, l = this.length; i < l; i++) {\n DomQuery.find(selector, this[i], ret);\n }\n return DomQuery(ret);\n },\n filter: function (selector) {\n if (typeof selector === 'function') {\n return DomQuery(grep(this.toArray(), function (item, i) {\n return selector(i, item);\n }));\n }\n return DomQuery(DomQuery.filter(selector, this.toArray()));\n },\n closest: function (selector) {\n var result = [];\n if (selector instanceof DomQuery) {\n selector = selector[0];\n }\n this.each(function (i, node) {\n while (node) {\n if (typeof selector === 'string' && DomQuery(node).is(selector)) {\n result.push(node);\n break;\n } else if (node === selector) {\n result.push(node);\n break;\n }\n node = node.parentNode;\n }\n });\n return DomQuery(result);\n },\n offset: function (offset) {\n var elm, doc, docElm;\n var x = 0, y = 0, pos;\n if (!offset) {\n elm = this[0];\n if (elm) {\n doc = elm.ownerDocument;\n docElm = doc.documentElement;\n if (elm.getBoundingClientRect) {\n pos = elm.getBoundingClientRect();\n x = pos.left + (docElm.scrollLeft || doc.body.scrollLeft) - docElm.clientLeft;\n y = pos.top + (docElm.scrollTop || doc.body.scrollTop) - docElm.clientTop;\n }\n }\n return {\n left: x,\n top: y\n };\n }\n return this.css(offset);\n },\n push: push$1,\n sort: [].sort,\n splice: [].splice\n };\n Tools.extend(DomQuery, {\n extend: Tools.extend,\n makeArray: function (object) {\n if (isWindow(object) || object.nodeType) {\n return [object];\n }\n return Tools.toArray(object);\n },\n inArray: inArray,\n isArray: Tools.isArray,\n each: each$2,\n trim: trim$1,\n grep: grep,\n find: Sizzle,\n expr: Sizzle.selectors,\n unique: Sizzle.uniqueSort,\n text: Sizzle.getText,\n contains: Sizzle.contains,\n filter: function (expr, elems, not) {\n var i = elems.length;\n if (not) {\n expr = ':not(' + expr + ')';\n }\n while (i--) {\n if (elems[i].nodeType !== 1) {\n elems.splice(i, 1);\n }\n }\n if (elems.length === 1) {\n elems = DomQuery.find.matchesSelector(elems[0], expr) ? [elems[0]] : [];\n } else {\n elems = DomQuery.find.matches(expr, elems);\n }\n return elems;\n }\n });\n var dir = function (el, prop, until) {\n var matched = [];\n var cur = el[prop];\n if (typeof until !== 'string' && until instanceof DomQuery) {\n until = until[0];\n }\n while (cur && cur.nodeType !== 9) {\n if (until !== undefined) {\n if (cur === until) {\n break;\n }\n if (typeof until === 'string' && DomQuery(cur).is(until)) {\n break;\n }\n }\n if (cur.nodeType === 1) {\n matched.push(cur);\n }\n cur = cur[prop];\n }\n return matched;\n };\n var sibling = function (node, siblingName, nodeType, until) {\n var result = [];\n if (until instanceof DomQuery) {\n until = until[0];\n }\n for (; node; node = node[siblingName]) {\n if (nodeType && node.nodeType !== nodeType) {\n continue;\n }\n if (until !== undefined) {\n if (node === until) {\n break;\n }\n if (typeof until === 'string' && DomQuery(node).is(until)) {\n break;\n }\n }\n result.push(node);\n }\n return result;\n };\n var firstSibling = function (node, siblingName, nodeType) {\n for (node = node[siblingName]; node; node = node[siblingName]) {\n if (node.nodeType === nodeType) {\n return node;\n }\n }\n return null;\n };\n each$2({\n parent: function (node) {\n var parent = node.parentNode;\n return parent && parent.nodeType !== 11 ? parent : null;\n },\n parents: function (node) {\n return dir(node, 'parentNode');\n },\n next: function (node) {\n return firstSibling(node, 'nextSibling', 1);\n },\n prev: function (node) {\n return firstSibling(node, 'previousSibling', 1);\n },\n children: function (node) {\n return sibling(node.firstChild, 'nextSibling', 1);\n },\n contents: function (node) {\n return Tools.toArray((node.nodeName === 'iframe' ? node.contentDocument || node.contentWindow.document : node).childNodes);\n }\n }, function (name, fn) {\n DomQuery.fn[name] = function (selector) {\n var self = this;\n var result = [];\n self.each(function () {\n var nodes = fn.call(result, this, selector, result);\n if (nodes) {\n if (DomQuery.isArray(nodes)) {\n result.push.apply(result, nodes);\n } else {\n result.push(nodes);\n }\n }\n });\n if (this.length > 1) {\n if (!skipUniques[name]) {\n result = DomQuery.unique(result);\n }\n if (name.indexOf('parents') === 0) {\n result = result.reverse();\n }\n }\n result = DomQuery(result);\n if (selector) {\n return result.filter(selector);\n }\n return result;\n };\n });\n each$2({\n parentsUntil: function (node, until) {\n return dir(node, 'parentNode', until);\n },\n nextUntil: function (node, until) {\n return sibling(node, 'nextSibling', 1, until).slice(1);\n },\n prevUntil: function (node, until) {\n return sibling(node, 'previousSibling', 1, until).slice(1);\n }\n }, function (name, fn) {\n DomQuery.fn[name] = function (selector, filter) {\n var self = this;\n var result = [];\n self.each(function () {\n var nodes = fn.call(result, this, selector, result);\n if (nodes) {\n if (DomQuery.isArray(nodes)) {\n result.push.apply(result, nodes);\n } else {\n result.push(nodes);\n }\n }\n });\n if (this.length > 1) {\n result = DomQuery.unique(result);\n if (name.indexOf('parents') === 0 || name === 'prevUntil') {\n result = result.reverse();\n }\n }\n result = DomQuery(result);\n if (filter) {\n return result.filter(filter);\n }\n return result;\n };\n });\n DomQuery.fn.is = function (selector) {\n return !!selector && this.filter(selector).length > 0;\n };\n DomQuery.fn.init.prototype = DomQuery.fn;\n DomQuery.overrideDefaults = function (callback) {\n var defaults;\n var sub = function (selector, context) {\n defaults = defaults || callback();\n if (arguments.length === 0) {\n selector = defaults.element;\n }\n if (!context) {\n context = defaults.context;\n }\n return new sub.fn.init(selector, context);\n };\n DomQuery.extend(sub, this);\n return sub;\n };\n var appendHooks = function (targetHooks, prop, hooks) {\n each$2(hooks, function (name, func) {\n targetHooks[name] = targetHooks[name] || {};\n targetHooks[name][prop] = func;\n });\n };\n if (Env.ie && Env.ie < 8) {\n appendHooks(attrHooks, 'get', {\n maxlength: function (elm) {\n var value = elm.maxLength;\n if (value === 2147483647) {\n return undefined;\n }\n return value;\n },\n size: function (elm) {\n var value = elm.size;\n if (value === 20) {\n return undefined;\n }\n return value;\n },\n class: function (elm) {\n return elm.className;\n },\n style: function (elm) {\n var value = elm.style.cssText;\n if (value.length === 0) {\n return undefined;\n }\n return value;\n }\n });\n appendHooks(attrHooks, 'set', {\n class: function (elm, value) {\n elm.className = value;\n },\n style: function (elm, value) {\n elm.style.cssText = value;\n }\n });\n }\n if (Env.ie && Env.ie < 9) {\n cssFix.float = 'styleFloat';\n appendHooks(cssHooks, 'set', {\n opacity: function (elm, value) {\n var style = elm.style;\n if (value === null || value === '') {\n style.removeAttribute('filter');\n } else {\n style.zoom = 1;\n style.filter = 'alpha(opacity=' + value * 100 + ')';\n }\n }\n });\n }\n DomQuery.attrHooks = attrHooks;\n DomQuery.cssHooks = cssHooks;\n\n var cached = function (f) {\n var called = false;\n var r;\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (!called) {\n called = true;\n r = f.apply(null, args);\n }\n return r;\n };\n };\n\n var firstMatch = function (regexes, s) {\n for (var i = 0; i < regexes.length; i++) {\n var x = regexes[i];\n if (x.test(s)) {\n return x;\n }\n }\n return undefined;\n };\n var find$2 = function (regexes, agent) {\n var r = firstMatch(regexes, agent);\n if (!r) {\n return {\n major: 0,\n minor: 0\n };\n }\n var group = function (i) {\n return Number(agent.replace(r, '$' + i));\n };\n return nu(group(1), group(2));\n };\n var detect = function (versionRegexes, agent) {\n var cleanedAgent = String(agent).toLowerCase();\n if (versionRegexes.length === 0) {\n return unknown();\n }\n return find$2(versionRegexes, cleanedAgent);\n };\n var unknown = function () {\n return nu(0, 0);\n };\n var nu = function (major, minor) {\n return {\n major: major,\n minor: minor\n };\n };\n var Version = {\n nu: nu,\n detect: detect,\n unknown: unknown\n };\n\n var edge = 'Edge';\n var chrome = 'Chrome';\n var ie$1 = 'IE';\n var opera$1 = 'Opera';\n var firefox = 'Firefox';\n var safari = 'Safari';\n var isBrowser = function (name, current) {\n return function () {\n return current === name;\n };\n };\n var unknown$1 = function () {\n return nu$1({\n current: undefined,\n version: Version.unknown()\n });\n };\n var nu$1 = function (info) {\n var current = info.current;\n var version = info.version;\n return {\n current: current,\n version: version,\n isEdge: isBrowser(edge, current),\n isChrome: isBrowser(chrome, current),\n isIE: isBrowser(ie$1, current),\n isOpera: isBrowser(opera$1, current),\n isFirefox: isBrowser(firefox, current),\n isSafari: isBrowser(safari, current)\n };\n };\n var Browser = {\n unknown: unknown$1,\n nu: nu$1,\n edge: constant(edge),\n chrome: constant(chrome),\n ie: constant(ie$1),\n opera: constant(opera$1),\n firefox: constant(firefox),\n safari: constant(safari)\n };\n\n var windows = 'Windows';\n var ios = 'iOS';\n var android$1 = 'Android';\n var linux = 'Linux';\n var osx = 'OSX';\n var solaris = 'Solaris';\n var freebsd = 'FreeBSD';\n var isOS = function (name, current) {\n return function () {\n return current === name;\n };\n };\n var unknown$2 = function () {\n return nu$2({\n current: undefined,\n version: Version.unknown()\n });\n };\n var nu$2 = function (info) {\n var current = info.current;\n var version = info.version;\n return {\n current: current,\n version: version,\n isWindows: isOS(windows, current),\n isiOS: isOS(ios, current),\n isAndroid: isOS(android$1, current),\n isOSX: isOS(osx, current),\n isLinux: isOS(linux, current),\n isSolaris: isOS(solaris, current),\n isFreeBSD: isOS(freebsd, current)\n };\n };\n var OperatingSystem = {\n unknown: unknown$2,\n nu: nu$2,\n windows: constant(windows),\n ios: constant(ios),\n android: constant(android$1),\n linux: constant(linux),\n osx: constant(osx),\n solaris: constant(solaris),\n freebsd: constant(freebsd)\n };\n\n var DeviceType = function (os, browser, userAgent) {\n var isiPad = os.isiOS() && /ipad/i.test(userAgent) === true;\n var isiPhone = os.isiOS() && !isiPad;\n var isAndroid3 = os.isAndroid() && os.version.major === 3;\n var isAndroid4 = os.isAndroid() && os.version.major === 4;\n var isTablet = isiPad || isAndroid3 || isAndroid4 && /mobile/i.test(userAgent) === true;\n var isTouch = os.isiOS() || os.isAndroid();\n var isPhone = isTouch && !isTablet;\n var iOSwebview = browser.isSafari() && os.isiOS() && /safari/i.test(userAgent) === false;\n return {\n isiPad: constant(isiPad),\n isiPhone: constant(isiPhone),\n isTablet: constant(isTablet),\n isPhone: constant(isPhone),\n isTouch: constant(isTouch),\n isAndroid: os.isAndroid,\n isiOS: os.isiOS,\n isWebView: constant(iOSwebview)\n };\n };\n\n var detect$1 = function (candidates, userAgent) {\n var agent = String(userAgent).toLowerCase();\n return find(candidates, function (candidate) {\n return candidate.search(agent);\n });\n };\n var detectBrowser = function (browsers, userAgent) {\n return detect$1(browsers, userAgent).map(function (browser) {\n var version = Version.detect(browser.versionRegexes, userAgent);\n return {\n current: browser.name,\n version: version\n };\n });\n };\n var detectOs = function (oses, userAgent) {\n return detect$1(oses, userAgent).map(function (os) {\n var version = Version.detect(os.versionRegexes, userAgent);\n return {\n current: os.name,\n version: version\n };\n });\n };\n var UaString = {\n detectBrowser: detectBrowser,\n detectOs: detectOs\n };\n\n var contains$2 = function (str, substr) {\n return str.indexOf(substr) !== -1;\n };\n var trim$2 = function (str) {\n return str.replace(/^\\s+|\\s+$/g, '');\n };\n var lTrim = function (str) {\n return str.replace(/^\\s+/g, '');\n };\n var rTrim = function (str) {\n return str.replace(/\\s+$/g, '');\n };\n\n var normalVersionRegex = /.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/;\n var checkContains = function (target) {\n return function (uastring) {\n return contains$2(uastring, target);\n };\n };\n var browsers = [\n {\n name: 'Edge',\n versionRegexes: [/.*?edge\\/ ?([0-9]+)\\.([0-9]+)$/],\n search: function (uastring) {\n return contains$2(uastring, 'edge/') && contains$2(uastring, 'chrome') && contains$2(uastring, 'safari') && contains$2(uastring, 'applewebkit');\n }\n },\n {\n name: 'Chrome',\n versionRegexes: [\n /.*?chrome\\/([0-9]+)\\.([0-9]+).*/,\n normalVersionRegex\n ],\n search: function (uastring) {\n return contains$2(uastring, 'chrome') && !contains$2(uastring, 'chromeframe');\n }\n },\n {\n name: 'IE',\n versionRegexes: [\n /.*?msie\\ ?([0-9]+)\\.([0-9]+).*/,\n /.*?rv:([0-9]+)\\.([0-9]+).*/\n ],\n search: function (uastring) {\n return contains$2(uastring, 'msie') || contains$2(uastring, 'trident');\n }\n },\n {\n name: 'Opera',\n versionRegexes: [\n normalVersionRegex,\n /.*?opera\\/([0-9]+)\\.([0-9]+).*/\n ],\n search: checkContains('opera')\n },\n {\n name: 'Firefox',\n versionRegexes: [/.*?firefox\\/\\ ?([0-9]+)\\.([0-9]+).*/],\n search: checkContains('firefox')\n },\n {\n name: 'Safari',\n versionRegexes: [\n normalVersionRegex,\n /.*?cpu os ([0-9]+)_([0-9]+).*/\n ],\n search: function (uastring) {\n return (contains$2(uastring, 'safari') || contains$2(uastring, 'mobile/')) && contains$2(uastring, 'applewebkit');\n }\n }\n ];\n var oses = [\n {\n name: 'Windows',\n search: checkContains('win'),\n versionRegexes: [/.*?windows\\ nt\\ ?([0-9]+)\\.([0-9]+).*/]\n },\n {\n name: 'iOS',\n search: function (uastring) {\n return contains$2(uastring, 'iphone') || contains$2(uastring, 'ipad');\n },\n versionRegexes: [\n /.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/,\n /.*cpu os ([0-9]+)_([0-9]+).*/,\n /.*cpu iphone os ([0-9]+)_([0-9]+).*/\n ]\n },\n {\n name: 'Android',\n search: checkContains('android'),\n versionRegexes: [/.*?android\\ ?([0-9]+)\\.([0-9]+).*/]\n },\n {\n name: 'OSX',\n search: checkContains('os x'),\n versionRegexes: [/.*?os\\ x\\ ?([0-9]+)_([0-9]+).*/]\n },\n {\n name: 'Linux',\n search: checkContains('linux'),\n versionRegexes: []\n },\n {\n name: 'Solaris',\n search: checkContains('sunos'),\n versionRegexes: []\n },\n {\n name: 'FreeBSD',\n search: checkContains('freebsd'),\n versionRegexes: []\n }\n ];\n var PlatformInfo = {\n browsers: constant(browsers),\n oses: constant(oses)\n };\n\n var detect$2 = function (userAgent) {\n var browsers = PlatformInfo.browsers();\n var oses = PlatformInfo.oses();\n var browser = UaString.detectBrowser(browsers, userAgent).fold(Browser.unknown, Browser.nu);\n var os = UaString.detectOs(oses, userAgent).fold(OperatingSystem.unknown, OperatingSystem.nu);\n var deviceType = DeviceType(os, browser, userAgent);\n return {\n browser: browser,\n os: os,\n deviceType: deviceType\n };\n };\n var PlatformDetection = { detect: detect$2 };\n\n var detect$3 = cached(function () {\n var userAgent = domGlobals.navigator.userAgent;\n return PlatformDetection.detect(userAgent);\n });\n var PlatformDetection$1 = { detect: detect$3 };\n\n var fromHtml = function (html, scope) {\n var doc = scope || domGlobals.document;\n var div = doc.createElement('div');\n div.innerHTML = html;\n if (!div.hasChildNodes() || div.childNodes.length > 1) {\n domGlobals.console.error('HTML does not have a single root node', html);\n throw new Error('HTML must have a single root node');\n }\n return fromDom(div.childNodes[0]);\n };\n var fromTag = function (tag, scope) {\n var doc = scope || domGlobals.document;\n var node = doc.createElement(tag);\n return fromDom(node);\n };\n var fromText = function (text, scope) {\n var doc = scope || domGlobals.document;\n var node = doc.createTextNode(text);\n return fromDom(node);\n };\n var fromDom = function (node) {\n if (node === null || node === undefined) {\n throw new Error('Node cannot be null or undefined');\n }\n return { dom: constant(node) };\n };\n var fromPoint = function (docElm, x, y) {\n var doc = docElm.dom();\n return Option.from(doc.elementFromPoint(x, y)).map(fromDom);\n };\n var Element = {\n fromHtml: fromHtml,\n fromTag: fromTag,\n fromText: fromText,\n fromDom: fromDom,\n fromPoint: fromPoint\n };\n\n var ATTRIBUTE = domGlobals.Node.ATTRIBUTE_NODE;\n var CDATA_SECTION = domGlobals.Node.CDATA_SECTION_NODE;\n var COMMENT = domGlobals.Node.COMMENT_NODE;\n var DOCUMENT = domGlobals.Node.DOCUMENT_NODE;\n var DOCUMENT_TYPE = domGlobals.Node.DOCUMENT_TYPE_NODE;\n var DOCUMENT_FRAGMENT = domGlobals.Node.DOCUMENT_FRAGMENT_NODE;\n var ELEMENT = domGlobals.Node.ELEMENT_NODE;\n var TEXT = domGlobals.Node.TEXT_NODE;\n var PROCESSING_INSTRUCTION = domGlobals.Node.PROCESSING_INSTRUCTION_NODE;\n var ENTITY_REFERENCE = domGlobals.Node.ENTITY_REFERENCE_NODE;\n var ENTITY = domGlobals.Node.ENTITY_NODE;\n var NOTATION = domGlobals.Node.NOTATION_NODE;\n\n var name = function (element) {\n var r = element.dom().nodeName;\n return r.toLowerCase();\n };\n var type = function (element) {\n return element.dom().nodeType;\n };\n var isType$1 = function (t) {\n return function (element) {\n return type(element) === t;\n };\n };\n var isElement = isType$1(ELEMENT);\n var isText = isType$1(TEXT);\n\n var keys = Object.keys;\n var hasOwnProperty$1 = Object.hasOwnProperty;\n var each$3 = function (obj, f) {\n var props = keys(obj);\n for (var k = 0, len = props.length; k < len; k++) {\n var i = props[k];\n var x = obj[i];\n f(x, i);\n }\n };\n var map$2 = function (obj, f) {\n return tupleMap(obj, function (x, i) {\n return {\n k: i,\n v: f(x, i)\n };\n });\n };\n var tupleMap = function (obj, f) {\n var r = {};\n each$3(obj, function (x, i) {\n var tuple = f(x, i);\n r[tuple.k] = tuple.v;\n });\n return r;\n };\n var bifilter = function (obj, pred) {\n var t = {};\n var f = {};\n each$3(obj, function (x, i) {\n var branch = pred(x, i) ? t : f;\n branch[i] = x;\n });\n return {\n t: t,\n f: f\n };\n };\n var has = function (obj, key) {\n return hasOwnProperty$1.call(obj, key);\n };\n\n var isSupported = function (dom) {\n return dom.style !== undefined && isFunction(dom.style.getPropertyValue);\n };\n\n var inBody = function (element) {\n var dom = isText(element) ? element.dom().parentNode : element.dom();\n return dom !== undefined && dom !== null && dom.ownerDocument.body.contains(dom);\n };\n\n var rawSet = function (dom, key, value) {\n if (isString(value) || isBoolean(value) || isNumber(value)) {\n dom.setAttribute(key, value + '');\n } else {\n domGlobals.console.error('Invalid call to Attr.set. Key ', key, ':: Value ', value, ':: Element ', dom);\n throw new Error('Attribute value was not simple');\n }\n };\n var set = function (element, key, value) {\n rawSet(element.dom(), key, value);\n };\n var setAll = function (element, attrs) {\n var dom = element.dom();\n each$3(attrs, function (v, k) {\n rawSet(dom, k, v);\n });\n };\n var get = function (element, key) {\n var v = element.dom().getAttribute(key);\n return v === null ? undefined : v;\n };\n var has$1 = function (element, key) {\n var dom = element.dom();\n return dom && dom.hasAttribute ? dom.hasAttribute(key) : false;\n };\n var remove = function (element, key) {\n element.dom().removeAttribute(key);\n };\n\n var internalSet = function (dom, property, value) {\n if (!isString(value)) {\n domGlobals.console.error('Invalid call to CSS.set. Property ', property, ':: Value ', value, ':: Element ', dom);\n throw new Error('CSS value must be a string: ' + value);\n }\n if (isSupported(dom)) {\n dom.style.setProperty(property, value);\n }\n };\n var setAll$1 = function (element, css) {\n var dom = element.dom();\n each$3(css, function (v, k) {\n internalSet(dom, k, v);\n });\n };\n var get$1 = function (element, property) {\n var dom = element.dom();\n var styles = domGlobals.window.getComputedStyle(dom);\n var r = styles.getPropertyValue(property);\n var v = r === '' && !inBody(element) ? getUnsafeProperty(dom, property) : r;\n return v === null ? undefined : v;\n };\n var getUnsafeProperty = function (dom, property) {\n return isSupported(dom) ? dom.style.getPropertyValue(property) : '';\n };\n var getRaw = function (element, property) {\n var dom = element.dom();\n var raw = getUnsafeProperty(dom, property);\n return Option.from(raw).filter(function (r) {\n return r.length > 0;\n });\n };\n var getAllRaw = function (element) {\n var css = {};\n var dom = element.dom();\n if (isSupported(dom)) {\n for (var i = 0; i < dom.style.length; i++) {\n var ruleName = dom.style.item(i);\n css[ruleName] = dom.style[ruleName];\n }\n }\n return css;\n };\n\n var Immutable = function () {\n var fields = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n fields[_i] = arguments[_i];\n }\n return function () {\n var values = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n values[_i] = arguments[_i];\n }\n if (fields.length !== values.length) {\n throw new Error('Wrong number of arguments to struct. Expected \"[' + fields.length + ']\", got ' + values.length + ' arguments');\n }\n var struct = {};\n each(fields, function (name, i) {\n struct[name] = constant(values[i]);\n });\n return struct;\n };\n };\n\n var toArray$1 = function (target, f) {\n var r = [];\n var recurse = function (e) {\n r.push(e);\n return f(e);\n };\n var cur = f(target);\n do {\n cur = cur.bind(recurse);\n } while (cur.isSome());\n return r;\n };\n var Recurse = { toArray: toArray$1 };\n\n var node = function () {\n var f = Global$1.getOrDie('Node');\n return f;\n };\n var compareDocumentPosition = function (a, b, match) {\n return (a.compareDocumentPosition(b) & match) !== 0;\n };\n var documentPositionPreceding = function (a, b) {\n return compareDocumentPosition(a, b, node().DOCUMENT_POSITION_PRECEDING);\n };\n var documentPositionContainedBy = function (a, b) {\n return compareDocumentPosition(a, b, node().DOCUMENT_POSITION_CONTAINED_BY);\n };\n var Node = {\n documentPositionPreceding: documentPositionPreceding,\n documentPositionContainedBy: documentPositionContainedBy\n };\n\n var ELEMENT$1 = ELEMENT;\n var DOCUMENT$1 = DOCUMENT;\n var is$1 = function (element, selector) {\n var dom = element.dom();\n if (dom.nodeType !== ELEMENT$1) {\n return false;\n } else {\n var elem = dom;\n if (elem.matches !== undefined) {\n return elem.matches(selector);\n } else if (elem.msMatchesSelector !== undefined) {\n return elem.msMatchesSelector(selector);\n } else if (elem.webkitMatchesSelector !== undefined) {\n return elem.webkitMatchesSelector(selector);\n } else if (elem.mozMatchesSelector !== undefined) {\n return elem.mozMatchesSelector(selector);\n } else {\n throw new Error('Browser lacks native selectors');\n }\n }\n };\n var bypassSelector = function (dom) {\n return dom.nodeType !== ELEMENT$1 && dom.nodeType !== DOCUMENT$1 || dom.childElementCount === 0;\n };\n var all = function (selector, scope) {\n var base = scope === undefined ? domGlobals.document : scope.dom();\n return bypassSelector(base) ? [] : map(base.querySelectorAll(selector), Element.fromDom);\n };\n var one = function (selector, scope) {\n var base = scope === undefined ? domGlobals.document : scope.dom();\n return bypassSelector(base) ? Option.none() : Option.from(base.querySelector(selector)).map(Element.fromDom);\n };\n\n var eq = function (e1, e2) {\n return e1.dom() === e2.dom();\n };\n var regularContains = function (e1, e2) {\n var d1 = e1.dom();\n var d2 = e2.dom();\n return d1 === d2 ? false : d1.contains(d2);\n };\n var ieContains = function (e1, e2) {\n return Node.documentPositionContainedBy(e1.dom(), e2.dom());\n };\n var browser = PlatformDetection$1.detect().browser;\n var contains$3 = browser.isIE() ? ieContains : regularContains;\n\n var owner = function (element) {\n return Element.fromDom(element.dom().ownerDocument);\n };\n var documentElement = function (element) {\n return Element.fromDom(element.dom().ownerDocument.documentElement);\n };\n var defaultView = function (element) {\n return Element.fromDom(element.dom().ownerDocument.defaultView);\n };\n var parent = function (element) {\n return Option.from(element.dom().parentNode).map(Element.fromDom);\n };\n var parents = function (element, isRoot) {\n var stop = isFunction(isRoot) ? isRoot : never;\n var dom = element.dom();\n var ret = [];\n while (dom.parentNode !== null && dom.parentNode !== undefined) {\n var rawParent = dom.parentNode;\n var p = Element.fromDom(rawParent);\n ret.push(p);\n if (stop(p) === true) {\n break;\n } else {\n dom = rawParent;\n }\n }\n return ret;\n };\n var prevSibling = function (element) {\n return Option.from(element.dom().previousSibling).map(Element.fromDom);\n };\n var nextSibling = function (element) {\n return Option.from(element.dom().nextSibling).map(Element.fromDom);\n };\n var prevSiblings = function (element) {\n return reverse(Recurse.toArray(element, prevSibling));\n };\n var nextSiblings = function (element) {\n return Recurse.toArray(element, nextSibling);\n };\n var children = function (element) {\n return map(element.dom().childNodes, Element.fromDom);\n };\n var child = function (element, index) {\n var cs = element.dom().childNodes;\n return Option.from(cs[index]).map(Element.fromDom);\n };\n var firstChild = function (element) {\n return child(element, 0);\n };\n var lastChild = function (element) {\n return child(element, element.dom().childNodes.length - 1);\n };\n var childNodesCount = function (element) {\n return element.dom().childNodes.length;\n };\n var spot = Immutable('element', 'offset');\n\n var browser$1 = PlatformDetection$1.detect().browser;\n var firstElement = function (nodes) {\n return find(nodes, isElement);\n };\n var getTableCaptionDeltaY = function (elm) {\n if (browser$1.isFirefox() && name(elm) === 'table') {\n return firstElement(children(elm)).filter(function (elm) {\n return name(elm) === 'caption';\n }).bind(function (caption) {\n return firstElement(nextSiblings(caption)).map(function (body) {\n var bodyTop = body.dom().offsetTop;\n var captionTop = caption.dom().offsetTop;\n var captionHeight = caption.dom().offsetHeight;\n return bodyTop <= captionTop ? -captionHeight : 0;\n });\n }).getOr(0);\n } else {\n return 0;\n }\n };\n var getPos = function (body, elm, rootElm) {\n var x = 0, y = 0, offsetParent;\n var doc = body.ownerDocument;\n var pos;\n rootElm = rootElm ? rootElm : body;\n if (elm) {\n if (rootElm === body && elm.getBoundingClientRect && get$1(Element.fromDom(body), 'position') === 'static') {\n pos = elm.getBoundingClientRect();\n x = pos.left + (doc.documentElement.scrollLeft || body.scrollLeft) - doc.documentElement.clientLeft;\n y = pos.top + (doc.documentElement.scrollTop || body.scrollTop) - doc.documentElement.clientTop;\n return {\n x: x,\n y: y\n };\n }\n offsetParent = elm;\n while (offsetParent && offsetParent !== rootElm && offsetParent.nodeType) {\n x += offsetParent.offsetLeft || 0;\n y += offsetParent.offsetTop || 0;\n offsetParent = offsetParent.offsetParent;\n }\n offsetParent = elm.parentNode;\n while (offsetParent && offsetParent !== rootElm && offsetParent.nodeType) {\n x -= offsetParent.scrollLeft || 0;\n y -= offsetParent.scrollTop || 0;\n offsetParent = offsetParent.parentNode;\n }\n y += getTableCaptionDeltaY(Element.fromDom(elm));\n }\n return {\n x: x,\n y: y\n };\n };\n var Position = { getPos: getPos };\n\n var exports$1 = {}, module$1 = { exports: exports$1 };\n (function (define, exports, module, require) {\n (function (f) {\n if (typeof exports === 'object' && typeof module !== 'undefined') {\n module.exports = f();\n } else if (typeof define === 'function' && define.amd) {\n define([], f);\n } else {\n var g;\n if (typeof window !== 'undefined') {\n g = window;\n } else if (typeof global !== 'undefined') {\n g = global;\n } else if (typeof self !== 'undefined') {\n g = self;\n } else {\n g = this;\n }\n g.EphoxContactWrapper = f();\n }\n }(function () {\n return function () {\n function r(e, n, t) {\n function o(i, f) {\n if (!n[i]) {\n if (!e[i]) {\n var c = 'function' == typeof require && require;\n if (!f && c)\n return c(i, !0);\n if (u)\n return u(i, !0);\n var a = new Error('Cannot find module \\'' + i + '\\'');\n throw a.code = 'MODULE_NOT_FOUND', a;\n }\n var p = n[i] = { exports: {} };\n e[i][0].call(p.exports, function (r) {\n var n = e[i][1][r];\n return o(n || r);\n }, p, p.exports, r, e, n, t);\n }\n return n[i].exports;\n }\n for (var u = 'function' == typeof require && require, i = 0; i < t.length; i++)\n o(t[i]);\n return o;\n }\n return r;\n }()({\n 1: [\n function (require, module, exports) {\n var process = module.exports = {};\n var cachedSetTimeout;\n var cachedClearTimeout;\n function defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n }\n function defaultClearTimeout() {\n throw new Error('clearTimeout has not been defined');\n }\n (function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n }());\n function runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n return setTimeout(fun, 0);\n }\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n return cachedSetTimeout(fun, 0);\n } catch (e) {\n try {\n return cachedSetTimeout.call(null, fun, 0);\n } catch (e) {\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n }\n function runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n return clearTimeout(marker);\n }\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n return cachedClearTimeout(marker);\n } catch (e) {\n try {\n return cachedClearTimeout.call(null, marker);\n } catch (e) {\n return cachedClearTimeout.call(this, marker);\n }\n }\n }\n var queue = [];\n var draining = false;\n var currentQueue;\n var queueIndex = -1;\n function cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n }\n function drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n var len = queue.length;\n while (len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n }\n process.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n };\n function Item(fun, array) {\n this.fun = fun;\n this.array = array;\n }\n Item.prototype.run = function () {\n this.fun.apply(null, this.array);\n };\n process.title = 'browser';\n process.browser = true;\n process.env = {};\n process.argv = [];\n process.version = '';\n process.versions = {};\n function noop() {\n }\n process.on = noop;\n process.addListener = noop;\n process.once = noop;\n process.off = noop;\n process.removeListener = noop;\n process.removeAllListeners = noop;\n process.emit = noop;\n process.prependListener = noop;\n process.prependOnceListener = noop;\n process.listeners = function (name) {\n return [];\n };\n process.binding = function (name) {\n throw new Error('process.binding is not supported');\n };\n process.cwd = function () {\n return '/';\n };\n process.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n };\n process.umask = function () {\n return 0;\n };\n },\n {}\n ],\n 2: [\n function (require, module, exports) {\n (function (setImmediate) {\n (function (root) {\n var setTimeoutFunc = setTimeout;\n function noop() {\n }\n function bind(fn, thisArg) {\n return function () {\n fn.apply(thisArg, arguments);\n };\n }\n function Promise(fn) {\n if (typeof this !== 'object')\n throw new TypeError('Promises must be constructed via new');\n if (typeof fn !== 'function')\n throw new TypeError('not a function');\n this._state = 0;\n this._handled = false;\n this._value = undefined;\n this._deferreds = [];\n doResolve(fn, this);\n }\n function handle(self, deferred) {\n while (self._state === 3) {\n self = self._value;\n }\n if (self._state === 0) {\n self._deferreds.push(deferred);\n return;\n }\n self._handled = true;\n Promise._immediateFn(function () {\n var cb = self._state === 1 ? deferred.onFulfilled : deferred.onRejected;\n if (cb === null) {\n (self._state === 1 ? resolve : reject)(deferred.promise, self._value);\n return;\n }\n var ret;\n try {\n ret = cb(self._value);\n } catch (e) {\n reject(deferred.promise, e);\n return;\n }\n resolve(deferred.promise, ret);\n });\n }\n function resolve(self, newValue) {\n try {\n if (newValue === self)\n throw new TypeError('A promise cannot be resolved with itself.');\n if (newValue && (typeof newValue === 'object' || typeof newValue === 'function')) {\n var then = newValue.then;\n if (newValue instanceof Promise) {\n self._state = 3;\n self._value = newValue;\n finale(self);\n return;\n } else if (typeof then === 'function') {\n doResolve(bind(then, newValue), self);\n return;\n }\n }\n self._state = 1;\n self._value = newValue;\n finale(self);\n } catch (e) {\n reject(self, e);\n }\n }\n function reject(self, newValue) {\n self._state = 2;\n self._value = newValue;\n finale(self);\n }\n function finale(self) {\n if (self._state === 2 && self._deferreds.length === 0) {\n Promise._immediateFn(function () {\n if (!self._handled) {\n Promise._unhandledRejectionFn(self._value);\n }\n });\n }\n for (var i = 0, len = self._deferreds.length; i < len; i++) {\n handle(self, self._deferreds[i]);\n }\n self._deferreds = null;\n }\n function Handler(onFulfilled, onRejected, promise) {\n this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null;\n this.onRejected = typeof onRejected === 'function' ? onRejected : null;\n this.promise = promise;\n }\n function doResolve(fn, self) {\n var done = false;\n try {\n fn(function (value) {\n if (done)\n return;\n done = true;\n resolve(self, value);\n }, function (reason) {\n if (done)\n return;\n done = true;\n reject(self, reason);\n });\n } catch (ex) {\n if (done)\n return;\n done = true;\n reject(self, ex);\n }\n }\n Promise.prototype['catch'] = function (onRejected) {\n return this.then(null, onRejected);\n };\n Promise.prototype.then = function (onFulfilled, onRejected) {\n var prom = new this.constructor(noop);\n handle(this, new Handler(onFulfilled, onRejected, prom));\n return prom;\n };\n Promise.all = function (arr) {\n var args = Array.prototype.slice.call(arr);\n return new Promise(function (resolve, reject) {\n if (args.length === 0)\n return resolve([]);\n var remaining = args.length;\n function res(i, val) {\n try {\n if (val && (typeof val === 'object' || typeof val === 'function')) {\n var then = val.then;\n if (typeof then === 'function') {\n then.call(val, function (val) {\n res(i, val);\n }, reject);\n return;\n }\n }\n args[i] = val;\n if (--remaining === 0) {\n resolve(args);\n }\n } catch (ex) {\n reject(ex);\n }\n }\n for (var i = 0; i < args.length; i++) {\n res(i, args[i]);\n }\n });\n };\n Promise.resolve = function (value) {\n if (value && typeof value === 'object' && value.constructor === Promise) {\n return value;\n }\n return new Promise(function (resolve) {\n resolve(value);\n });\n };\n Promise.reject = function (value) {\n return new Promise(function (resolve, reject) {\n reject(value);\n });\n };\n Promise.race = function (values) {\n return new Promise(function (resolve, reject) {\n for (var i = 0, len = values.length; i < len; i++) {\n values[i].then(resolve, reject);\n }\n });\n };\n Promise._immediateFn = typeof setImmediate === 'function' ? function (fn) {\n setImmediate(fn);\n } : function (fn) {\n setTimeoutFunc(fn, 0);\n };\n Promise._unhandledRejectionFn = function _unhandledRejectionFn(err) {\n if (typeof console !== 'undefined' && console) {\n console.warn('Possible Unhandled Promise Rejection:', err);\n }\n };\n Promise._setImmediateFn = function _setImmediateFn(fn) {\n Promise._immediateFn = fn;\n };\n Promise._setUnhandledRejectionFn = function _setUnhandledRejectionFn(fn) {\n Promise._unhandledRejectionFn = fn;\n };\n if (typeof module !== 'undefined' && module.exports) {\n module.exports = Promise;\n } else if (!root.Promise) {\n root.Promise = Promise;\n }\n }(this));\n }.call(this, require('timers').setImmediate));\n },\n { 'timers': 3 }\n ],\n 3: [\n function (require, module, exports) {\n (function (setImmediate, clearImmediate) {\n var nextTick = require('process/browser.js').nextTick;\n var apply = Function.prototype.apply;\n var slice = Array.prototype.slice;\n var immediateIds = {};\n var nextImmediateId = 0;\n exports.setTimeout = function () {\n return new Timeout(apply.call(setTimeout, window, arguments), clearTimeout);\n };\n exports.setInterval = function () {\n return new Timeout(apply.call(setInterval, window, arguments), clearInterval);\n };\n exports.clearTimeout = exports.clearInterval = function (timeout) {\n timeout.close();\n };\n function Timeout(id, clearFn) {\n this._id = id;\n this._clearFn = clearFn;\n }\n Timeout.prototype.unref = Timeout.prototype.ref = function () {\n };\n Timeout.prototype.close = function () {\n this._clearFn.call(window, this._id);\n };\n exports.enroll = function (item, msecs) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = msecs;\n };\n exports.unenroll = function (item) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = -1;\n };\n exports._unrefActive = exports.active = function (item) {\n clearTimeout(item._idleTimeoutId);\n var msecs = item._idleTimeout;\n if (msecs >= 0) {\n item._idleTimeoutId = setTimeout(function onTimeout() {\n if (item._onTimeout)\n item._onTimeout();\n }, msecs);\n }\n };\n exports.setImmediate = typeof setImmediate === 'function' ? setImmediate : function (fn) {\n var id = nextImmediateId++;\n var args = arguments.length < 2 ? false : slice.call(arguments, 1);\n immediateIds[id] = true;\n nextTick(function onNextTick() {\n if (immediateIds[id]) {\n if (args) {\n fn.apply(null, args);\n } else {\n fn.call(null);\n }\n exports.clearImmediate(id);\n }\n });\n return id;\n };\n exports.clearImmediate = typeof clearImmediate === 'function' ? clearImmediate : function (id) {\n delete immediateIds[id];\n };\n }.call(this, require('timers').setImmediate, require('timers').clearImmediate));\n },\n {\n 'process/browser.js': 1,\n 'timers': 3\n }\n ],\n 4: [\n function (require, module, exports) {\n var promisePolyfill = require('promise-polyfill');\n var Global = function () {\n if (typeof window !== 'undefined') {\n return window;\n } else {\n return Function('return this;')();\n }\n }();\n module.exports = { boltExport: Global.Promise || promisePolyfill };\n },\n { 'promise-polyfill': 2 }\n ]\n }, {}, [4])(4);\n }));\n }(undefined, exports$1, module$1, undefined));\n var Promise = module$1.exports.boltExport;\n\n var nu$3 = function (baseFn) {\n var data = Option.none();\n var callbacks = [];\n var map = function (f) {\n return nu$3(function (nCallback) {\n get(function (data) {\n nCallback(f(data));\n });\n });\n };\n var get = function (nCallback) {\n if (isReady()) {\n call(nCallback);\n } else {\n callbacks.push(nCallback);\n }\n };\n var set = function (x) {\n data = Option.some(x);\n run(callbacks);\n callbacks = [];\n };\n var isReady = function () {\n return data.isSome();\n };\n var run = function (cbs) {\n each(cbs, call);\n };\n var call = function (cb) {\n data.each(function (x) {\n domGlobals.setTimeout(function () {\n cb(x);\n }, 0);\n });\n };\n baseFn(set);\n return {\n get: get,\n map: map,\n isReady: isReady\n };\n };\n var pure = function (a) {\n return nu$3(function (callback) {\n callback(a);\n });\n };\n var LazyValue = {\n nu: nu$3,\n pure: pure\n };\n\n var errorReporter = function (err) {\n domGlobals.setTimeout(function () {\n throw err;\n }, 0);\n };\n var make = function (run) {\n var get = function (callback) {\n run().then(callback, errorReporter);\n };\n var map = function (fab) {\n return make(function () {\n return run().then(fab);\n });\n };\n var bind = function (aFutureB) {\n return make(function () {\n return run().then(function (v) {\n return aFutureB(v).toPromise();\n });\n });\n };\n var anonBind = function (futureB) {\n return make(function () {\n return run().then(function () {\n return futureB.toPromise();\n });\n });\n };\n var toLazy = function () {\n return LazyValue.nu(get);\n };\n var toCached = function () {\n var cache = null;\n return make(function () {\n if (cache === null) {\n cache = run();\n }\n return cache;\n });\n };\n var toPromise = run;\n return {\n map: map,\n bind: bind,\n anonBind: anonBind,\n toLazy: toLazy,\n toCached: toCached,\n toPromise: toPromise,\n get: get\n };\n };\n var nu$4 = function (baseFn) {\n return make(function () {\n return new Promise(baseFn);\n });\n };\n var pure$1 = function (a) {\n return make(function () {\n return Promise.resolve(a);\n });\n };\n var Future = {\n nu: nu$4,\n pure: pure$1\n };\n\n var par = function (asyncValues, nu) {\n return nu(function (callback) {\n var r = [];\n var count = 0;\n var cb = function (i) {\n return function (value) {\n r[i] = value;\n count++;\n if (count >= asyncValues.length) {\n callback(r);\n }\n };\n };\n if (asyncValues.length === 0) {\n callback([]);\n } else {\n each(asyncValues, function (asyncValue, i) {\n asyncValue.get(cb(i));\n });\n }\n });\n };\n\n var par$1 = function (futures) {\n return par(futures, Future.nu);\n };\n\n var value = function (o) {\n var is = function (v) {\n return o === v;\n };\n var or = function (opt) {\n return value(o);\n };\n var orThunk = function (f) {\n return value(o);\n };\n var map = function (f) {\n return value(f(o));\n };\n var mapError = function (f) {\n return value(o);\n };\n var each = function (f) {\n f(o);\n };\n var bind = function (f) {\n return f(o);\n };\n var fold = function (_, onValue) {\n return onValue(o);\n };\n var exists = function (f) {\n return f(o);\n };\n var forall = function (f) {\n return f(o);\n };\n var toOption = function () {\n return Option.some(o);\n };\n return {\n is: is,\n isValue: always,\n isError: never,\n getOr: constant(o),\n getOrThunk: constant(o),\n getOrDie: constant(o),\n or: or,\n orThunk: orThunk,\n fold: fold,\n map: map,\n mapError: mapError,\n each: each,\n bind: bind,\n exists: exists,\n forall: forall,\n toOption: toOption\n };\n };\n var error = function (message) {\n var getOrThunk = function (f) {\n return f();\n };\n var getOrDie = function () {\n return die(String(message))();\n };\n var or = function (opt) {\n return opt;\n };\n var orThunk = function (f) {\n return f();\n };\n var map = function (f) {\n return error(message);\n };\n var mapError = function (f) {\n return error(f(message));\n };\n var bind = function (f) {\n return error(message);\n };\n var fold = function (onError, _) {\n return onError(message);\n };\n return {\n is: never,\n isValue: never,\n isError: always,\n getOr: identity,\n getOrThunk: getOrThunk,\n getOrDie: getOrDie,\n or: or,\n orThunk: orThunk,\n fold: fold,\n map: map,\n mapError: mapError,\n each: noop,\n bind: bind,\n exists: never,\n forall: always,\n toOption: Option.none\n };\n };\n var fromOption = function (opt, err) {\n return opt.fold(function () {\n return error(err);\n }, value);\n };\n var Result = {\n value: value,\n error: error,\n fromOption: fromOption\n };\n\n function StyleSheetLoader(document, settings) {\n if (settings === void 0) {\n settings = {};\n }\n var idCount = 0;\n var loadedStates = {};\n var maxLoadTime;\n maxLoadTime = settings.maxLoadTime || 5000;\n var appendToHead = function (node) {\n document.getElementsByTagName('head')[0].appendChild(node);\n };\n var load = function (url, loadedCallback, errorCallback) {\n var link, style, startTime, state;\n var passed = function () {\n var callbacks = state.passed;\n var i = callbacks.length;\n while (i--) {\n callbacks[i]();\n }\n state.status = 2;\n state.passed = [];\n state.failed = [];\n };\n var failed = function () {\n var callbacks = state.failed;\n var i = callbacks.length;\n while (i--) {\n callbacks[i]();\n }\n state.status = 3;\n state.passed = [];\n state.failed = [];\n };\n var isOldWebKit = function () {\n var webKitChunks = domGlobals.navigator.userAgent.match(/WebKit\\/(\\d*)/);\n return !!(webKitChunks && parseInt(webKitChunks[1], 10) < 536);\n };\n var wait = function (testCallback, waitCallback) {\n if (!testCallback()) {\n if (new Date().getTime() - startTime < maxLoadTime) {\n Delay.setTimeout(waitCallback);\n } else {\n failed();\n }\n }\n };\n var waitForWebKitLinkLoaded = function () {\n wait(function () {\n var styleSheets = document.styleSheets;\n var styleSheet, i = styleSheets.length, owner;\n while (i--) {\n styleSheet = styleSheets[i];\n owner = styleSheet.ownerNode ? styleSheet.ownerNode : styleSheet.owningElement;\n if (owner && owner.id === link.id) {\n passed();\n return true;\n }\n }\n }, waitForWebKitLinkLoaded);\n };\n var waitForGeckoLinkLoaded = function () {\n wait(function () {\n try {\n var cssRules = style.sheet.cssRules;\n passed();\n return !!cssRules;\n } catch (ex) {\n }\n }, waitForGeckoLinkLoaded);\n };\n url = Tools._addCacheSuffix(url);\n if (!loadedStates[url]) {\n state = {\n passed: [],\n failed: []\n };\n loadedStates[url] = state;\n } else {\n state = loadedStates[url];\n }\n if (loadedCallback) {\n state.passed.push(loadedCallback);\n }\n if (errorCallback) {\n state.failed.push(errorCallback);\n }\n if (state.status === 1) {\n return;\n }\n if (state.status === 2) {\n passed();\n return;\n }\n if (state.status === 3) {\n failed();\n return;\n }\n state.status = 1;\n link = document.createElement('link');\n link.rel = 'stylesheet';\n link.type = 'text/css';\n link.id = 'u' + idCount++;\n link.async = false;\n link.defer = false;\n startTime = new Date().getTime();\n if (settings.contentCssCors) {\n link.crossOrigin = 'anonymous';\n }\n if ('onload' in link && !isOldWebKit()) {\n link.onload = waitForWebKitLinkLoaded;\n link.onerror = failed;\n } else {\n if (domGlobals.navigator.userAgent.indexOf('Firefox') > 0) {\n style = document.createElement('style');\n style.textContent = '@import \"' + url + '\"';\n waitForGeckoLinkLoaded();\n appendToHead(style);\n return;\n }\n waitForWebKitLinkLoaded();\n }\n appendToHead(link);\n link.href = url;\n };\n var loadF = function (url) {\n return Future.nu(function (resolve) {\n load(url, compose(resolve, constant(Result.value(url))), compose(resolve, constant(Result.error(url))));\n });\n };\n var unbox = function (result) {\n return result.fold(identity, identity);\n };\n var loadAll = function (urls, success, failure) {\n par$1(map(urls, loadF)).get(function (result) {\n var parts = partition(result, function (r) {\n return r.isValue();\n });\n if (parts.fail.length > 0) {\n failure(parts.fail.map(unbox));\n } else {\n success(parts.pass.map(unbox));\n }\n });\n };\n return {\n load: load,\n loadAll: loadAll\n };\n }\n\n function TreeWalker (startNode, rootNode) {\n var node = startNode;\n var findSibling = function (node, startName, siblingName, shallow) {\n var sibling, parent;\n if (node) {\n if (!shallow && node[startName]) {\n return node[startName];\n }\n if (node !== rootNode) {\n sibling = node[siblingName];\n if (sibling) {\n return sibling;\n }\n for (parent = node.parentNode; parent && parent !== rootNode; parent = parent.parentNode) {\n sibling = parent[siblingName];\n if (sibling) {\n return sibling;\n }\n }\n }\n }\n };\n var findPreviousNode = function (node, startName, siblingName, shallow) {\n var sibling, parent, child;\n if (node) {\n sibling = node[siblingName];\n if (rootNode && sibling === rootNode) {\n return;\n }\n if (sibling) {\n if (!shallow) {\n for (child = sibling[startName]; child; child = child[startName]) {\n if (!child[startName]) {\n return child;\n }\n }\n }\n return sibling;\n }\n parent = node.parentNode;\n if (parent && parent !== rootNode) {\n return parent;\n }\n }\n };\n this.current = function () {\n return node;\n };\n this.next = function (shallow) {\n node = findSibling(node, 'firstChild', 'nextSibling', shallow);\n return node;\n };\n this.prev = function (shallow) {\n node = findSibling(node, 'lastChild', 'previousSibling', shallow);\n return node;\n };\n this.prev2 = function (shallow) {\n node = findPreviousNode(node, 'lastChild', 'previousSibling', shallow);\n return node;\n };\n }\n\n var blocks = [\n 'article',\n 'aside',\n 'details',\n 'div',\n 'dt',\n 'figcaption',\n 'footer',\n 'form',\n 'fieldset',\n 'header',\n 'hgroup',\n 'html',\n 'main',\n 'nav',\n 'section',\n 'summary',\n 'body',\n 'p',\n 'dl',\n 'multicol',\n 'dd',\n 'figure',\n 'address',\n 'center',\n 'blockquote',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'listing',\n 'xmp',\n 'pre',\n 'plaintext',\n 'menu',\n 'dir',\n 'ul',\n 'ol',\n 'li',\n 'hr',\n 'table',\n 'tbody',\n 'thead',\n 'tfoot',\n 'th',\n 'tr',\n 'td',\n 'caption'\n ];\n var voids = [\n 'area',\n 'base',\n 'basefont',\n 'br',\n 'col',\n 'frame',\n 'hr',\n 'img',\n 'input',\n 'isindex',\n 'link',\n 'meta',\n 'param',\n 'embed',\n 'source',\n 'wbr',\n 'track'\n ];\n var tableCells = [\n 'td',\n 'th'\n ];\n var tableSections = [\n 'thead',\n 'tbody',\n 'tfoot'\n ];\n var textBlocks = [\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'p',\n 'div',\n 'address',\n 'pre',\n 'form',\n 'blockquote',\n 'center',\n 'dir',\n 'fieldset',\n 'header',\n 'footer',\n 'article',\n 'section',\n 'hgroup',\n 'aside',\n 'nav',\n 'figure'\n ];\n var headings = [\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6'\n ];\n var listItems = [\n 'li',\n 'dd',\n 'dt'\n ];\n var lists = [\n 'ul',\n 'ol',\n 'dl'\n ];\n var wsElements = [\n 'pre',\n 'script',\n 'textarea',\n 'style'\n ];\n var lazyLookup = function (items) {\n var lookup;\n return function (node) {\n lookup = lookup ? lookup : mapToObject(items, constant(true));\n return lookup.hasOwnProperty(name(node));\n };\n };\n var isHeading = lazyLookup(headings);\n var isBlock = lazyLookup(blocks);\n var isInline = function (node) {\n return isElement(node) && !isBlock(node);\n };\n var isBr = function (node) {\n return isElement(node) && name(node) === 'br';\n };\n var isTextBlock = lazyLookup(textBlocks);\n var isList = lazyLookup(lists);\n var isListItem = lazyLookup(listItems);\n var isVoid = lazyLookup(voids);\n var isTableSection = lazyLookup(tableSections);\n var isTableCell = lazyLookup(tableCells);\n var isWsPreserveElement = lazyLookup(wsElements);\n\n var isNodeType = function (type) {\n return function (node) {\n return !!node && node.nodeType === type;\n };\n };\n var isRestrictedNode = function (node) {\n return !!node && !Object.getPrototypeOf(node);\n };\n var isElement$1 = isNodeType(1);\n var matchNodeNames = function (names) {\n var items = names.toLowerCase().split(' ');\n return function (node) {\n var i, name;\n if (node && node.nodeType) {\n name = node.nodeName.toLowerCase();\n for (i = 0; i < items.length; i++) {\n if (name === items[i]) {\n return true;\n }\n }\n }\n return false;\n };\n };\n var matchStyleValues = function (name, values) {\n var items = values.toLowerCase().split(' ');\n return function (node) {\n var i, cssValue;\n if (isElement$1(node)) {\n for (i = 0; i < items.length; i++) {\n var computed = node.ownerDocument.defaultView.getComputedStyle(node, null);\n cssValue = computed ? computed.getPropertyValue(name) : null;\n if (cssValue === items[i]) {\n return true;\n }\n }\n }\n return false;\n };\n };\n var hasPropValue = function (propName, propValue) {\n return function (node) {\n return isElement$1(node) && node[propName] === propValue;\n };\n };\n var hasAttribute = function (attrName, attrValue) {\n return function (node) {\n return isElement$1(node) && node.hasAttribute(attrName);\n };\n };\n var hasAttributeValue = function (attrName, attrValue) {\n return function (node) {\n return isElement$1(node) && node.getAttribute(attrName) === attrValue;\n };\n };\n var isBogus = function (node) {\n return isElement$1(node) && node.hasAttribute('data-mce-bogus');\n };\n var isBogusAll = function (node) {\n return isElement$1(node) && node.getAttribute('data-mce-bogus') === 'all';\n };\n var isTable = function (node) {\n return isElement$1(node) && node.tagName === 'TABLE';\n };\n var hasContentEditableState = function (value) {\n return function (node) {\n if (isElement$1(node)) {\n if (node.contentEditable === value) {\n return true;\n }\n if (node.getAttribute('data-mce-contenteditable') === value) {\n return true;\n }\n }\n return false;\n };\n };\n var isText$1 = isNodeType(3);\n var isComment = isNodeType(8);\n var isDocument = isNodeType(9);\n var isDocumentFragment = isNodeType(11);\n var isBr$1 = matchNodeNames('br');\n var isContentEditableTrue = hasContentEditableState('true');\n var isContentEditableFalse = hasContentEditableState('false');\n var NodeType = {\n isText: isText$1,\n isElement: isElement$1,\n isComment: isComment,\n isDocument: isDocument,\n isDocumentFragment: isDocumentFragment,\n isBr: isBr$1,\n isContentEditableTrue: isContentEditableTrue,\n isContentEditableFalse: isContentEditableFalse,\n isRestrictedNode: isRestrictedNode,\n matchNodeNames: matchNodeNames,\n hasPropValue: hasPropValue,\n hasAttribute: hasAttribute,\n hasAttributeValue: hasAttributeValue,\n matchStyleValues: matchStyleValues,\n isBogus: isBogus,\n isBogusAll: isBogusAll,\n isTable: isTable\n };\n\n var surroundedBySpans = function (node) {\n var previousIsSpan = node.previousSibling && node.previousSibling.nodeName === 'SPAN';\n var nextIsSpan = node.nextSibling && node.nextSibling.nodeName === 'SPAN';\n return previousIsSpan && nextIsSpan;\n };\n var isBookmarkNode = function (node) {\n return node && node.tagName === 'SPAN' && node.getAttribute('data-mce-type') === 'bookmark';\n };\n var trimNode = function (dom, node) {\n var i, children = node.childNodes;\n if (NodeType.isElement(node) && isBookmarkNode(node)) {\n return;\n }\n for (i = children.length - 1; i >= 0; i--) {\n trimNode(dom, children[i]);\n }\n if (NodeType.isDocument(node) === false) {\n if (NodeType.isText(node) && node.nodeValue.length > 0) {\n var trimmedLength = Tools.trim(node.nodeValue).length;\n if (dom.isBlock(node.parentNode) || trimmedLength > 0) {\n return;\n }\n if (trimmedLength === 0 && surroundedBySpans(node)) {\n return;\n }\n } else if (NodeType.isElement(node)) {\n children = node.childNodes;\n if (children.length === 1 && isBookmarkNode(children[0])) {\n node.parentNode.insertBefore(children[0], node);\n }\n if (children.length || isVoid(Element.fromDom(node))) {\n return;\n }\n }\n dom.remove(node);\n }\n return node;\n };\n var TrimNode = { trimNode: trimNode };\n\n var makeMap$1 = Tools.makeMap;\n var namedEntities, baseEntities, reverseEntities;\n var attrsCharsRegExp = /[&<>\\\"\\u0060\\u007E-\\uD7FF\\uE000-\\uFFEF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g;\n var textCharsRegExp = /[<>&\\u007E-\\uD7FF\\uE000-\\uFFEF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g;\n var rawCharsRegExp = /[<>&\\\"\\']/g;\n var entityRegExp = /([a-z0-9]+);?|&([a-z0-9]+);/gi;\n var asciiMap = {\n 128: '\\u20AC',\n 130: '\\u201A',\n 131: '\\u0192',\n 132: '\\u201E',\n 133: '\\u2026',\n 134: '\\u2020',\n 135: '\\u2021',\n 136: '\\u02c6',\n 137: '\\u2030',\n 138: '\\u0160',\n 139: '\\u2039',\n 140: '\\u0152',\n 142: '\\u017d',\n 145: '\\u2018',\n 146: '\\u2019',\n 147: '\\u201C',\n 148: '\\u201D',\n 149: '\\u2022',\n 150: '\\u2013',\n 151: '\\u2014',\n 152: '\\u02DC',\n 153: '\\u2122',\n 154: '\\u0161',\n 155: '\\u203A',\n 156: '\\u0153',\n 158: '\\u017e',\n 159: '\\u0178'\n };\n baseEntities = {\n '\"': '"',\n '\\'': ''',\n '<': '<',\n '>': '>',\n '&': '&',\n '`': '`'\n };\n reverseEntities = {\n '<': '<',\n '>': '>',\n '&': '&',\n '"': '\"',\n ''': '\\''\n };\n var nativeDecode = function (text) {\n var elm;\n elm = Element.fromTag('div').dom();\n elm.innerHTML = text;\n return elm.textContent || elm.innerText || text;\n };\n var buildEntitiesLookup = function (items, radix) {\n var i, chr, entity;\n var lookup = {};\n if (items) {\n items = items.split(',');\n radix = radix || 10;\n for (i = 0; i < items.length; i += 2) {\n chr = String.fromCharCode(parseInt(items[i], radix));\n if (!baseEntities[chr]) {\n entity = '&' + items[i + 1] + ';';\n lookup[chr] = entity;\n lookup[entity] = chr;\n }\n }\n return lookup;\n }\n };\n namedEntities = buildEntitiesLookup('50,nbsp,51,iexcl,52,cent,53,pound,54,curren,55,yen,56,brvbar,57,sect,58,uml,59,copy,' + '5a,ordf,5b,laquo,5c,not,5d,shy,5e,reg,5f,macr,5g,deg,5h,plusmn,5i,sup2,5j,sup3,5k,acute,' + '5l,micro,5m,para,5n,middot,5o,cedil,5p,sup1,5q,ordm,5r,raquo,5s,frac14,5t,frac12,5u,frac34,' + '5v,iquest,60,Agrave,61,Aacute,62,Acirc,63,Atilde,64,Auml,65,Aring,66,AElig,67,Ccedil,' + '68,Egrave,69,Eacute,6a,Ecirc,6b,Euml,6c,Igrave,6d,Iacute,6e,Icirc,6f,Iuml,6g,ETH,6h,Ntilde,' + '6i,Ograve,6j,Oacute,6k,Ocirc,6l,Otilde,6m,Ouml,6n,times,6o,Oslash,6p,Ugrave,6q,Uacute,' + '6r,Ucirc,6s,Uuml,6t,Yacute,6u,THORN,6v,szlig,70,agrave,71,aacute,72,acirc,73,atilde,74,auml,' + '75,aring,76,aelig,77,ccedil,78,egrave,79,eacute,7a,ecirc,7b,euml,7c,igrave,7d,iacute,7e,icirc,' + '7f,iuml,7g,eth,7h,ntilde,7i,ograve,7j,oacute,7k,ocirc,7l,otilde,7m,ouml,7n,divide,7o,oslash,' + '7p,ugrave,7q,uacute,7r,ucirc,7s,uuml,7t,yacute,7u,thorn,7v,yuml,ci,fnof,sh,Alpha,si,Beta,' + 'sj,Gamma,sk,Delta,sl,Epsilon,sm,Zeta,sn,Eta,so,Theta,sp,Iota,sq,Kappa,sr,Lambda,ss,Mu,' + 'st,Nu,su,Xi,sv,Omicron,t0,Pi,t1,Rho,t3,Sigma,t4,Tau,t5,Upsilon,t6,Phi,t7,Chi,t8,Psi,' + 't9,Omega,th,alpha,ti,beta,tj,gamma,tk,delta,tl,epsilon,tm,zeta,tn,eta,to,theta,tp,iota,' + 'tq,kappa,tr,lambda,ts,mu,tt,nu,tu,xi,tv,omicron,u0,pi,u1,rho,u2,sigmaf,u3,sigma,u4,tau,' + 'u5,upsilon,u6,phi,u7,chi,u8,psi,u9,omega,uh,thetasym,ui,upsih,um,piv,812,bull,816,hellip,' + '81i,prime,81j,Prime,81u,oline,824,frasl,88o,weierp,88h,image,88s,real,892,trade,89l,alefsym,' + '8cg,larr,8ch,uarr,8ci,rarr,8cj,darr,8ck,harr,8dl,crarr,8eg,lArr,8eh,uArr,8ei,rArr,8ej,dArr,' + '8ek,hArr,8g0,forall,8g2,part,8g3,exist,8g5,empty,8g7,nabla,8g8,isin,8g9,notin,8gb,ni,8gf,prod,' + '8gh,sum,8gi,minus,8gn,lowast,8gq,radic,8gt,prop,8gu,infin,8h0,ang,8h7,and,8h8,or,8h9,cap,8ha,cup,' + '8hb,int,8hk,there4,8hs,sim,8i5,cong,8i8,asymp,8j0,ne,8j1,equiv,8j4,le,8j5,ge,8k2,sub,8k3,sup,8k4,' + 'nsub,8k6,sube,8k7,supe,8kl,oplus,8kn,otimes,8l5,perp,8m5,sdot,8o8,lceil,8o9,rceil,8oa,lfloor,8ob,' + 'rfloor,8p9,lang,8pa,rang,9ea,loz,9j0,spades,9j3,clubs,9j5,hearts,9j6,diams,ai,OElig,aj,oelig,b0,' + 'Scaron,b1,scaron,bo,Yuml,m6,circ,ms,tilde,802,ensp,803,emsp,809,thinsp,80c,zwnj,80d,zwj,80e,lrm,' + '80f,rlm,80j,ndash,80k,mdash,80o,lsquo,80p,rsquo,80q,sbquo,80s,ldquo,80t,rdquo,80u,bdquo,810,dagger,' + '811,Dagger,81g,permil,81p,lsaquo,81q,rsaquo,85c,euro', 32);\n var encodeRaw = function (text, attr) {\n return text.replace(attr ? attrsCharsRegExp : textCharsRegExp, function (chr) {\n return baseEntities[chr] || chr;\n });\n };\n var encodeAllRaw = function (text) {\n return ('' + text).replace(rawCharsRegExp, function (chr) {\n return baseEntities[chr] || chr;\n });\n };\n var encodeNumeric = function (text, attr) {\n return text.replace(attr ? attrsCharsRegExp : textCharsRegExp, function (chr) {\n if (chr.length > 1) {\n return '' + ((chr.charCodeAt(0) - 55296) * 1024 + (chr.charCodeAt(1) - 56320) + 65536) + ';';\n }\n return baseEntities[chr] || '' + chr.charCodeAt(0) + ';';\n });\n };\n var encodeNamed = function (text, attr, entities) {\n entities = entities || namedEntities;\n return text.replace(attr ? attrsCharsRegExp : textCharsRegExp, function (chr) {\n return baseEntities[chr] || entities[chr] || chr;\n });\n };\n var getEncodeFunc = function (name, entities) {\n var entitiesMap = buildEntitiesLookup(entities) || namedEntities;\n var encodeNamedAndNumeric = function (text, attr) {\n return text.replace(attr ? attrsCharsRegExp : textCharsRegExp, function (chr) {\n if (baseEntities[chr] !== undefined) {\n return baseEntities[chr];\n }\n if (entitiesMap[chr] !== undefined) {\n return entitiesMap[chr];\n }\n if (chr.length > 1) {\n return '' + ((chr.charCodeAt(0) - 55296) * 1024 + (chr.charCodeAt(1) - 56320) + 65536) + ';';\n }\n return '' + chr.charCodeAt(0) + ';';\n });\n };\n var encodeCustomNamed = function (text, attr) {\n return encodeNamed(text, attr, entitiesMap);\n };\n var nameMap = makeMap$1(name.replace(/\\+/g, ','));\n if (nameMap.named && nameMap.numeric) {\n return encodeNamedAndNumeric;\n }\n if (nameMap.named) {\n if (entities) {\n return encodeCustomNamed;\n }\n return encodeNamed;\n }\n if (nameMap.numeric) {\n return encodeNumeric;\n }\n return encodeRaw;\n };\n var decode = function (text) {\n return text.replace(entityRegExp, function (all, numeric) {\n if (numeric) {\n if (numeric.charAt(0).toLowerCase() === 'x') {\n numeric = parseInt(numeric.substr(1), 16);\n } else {\n numeric = parseInt(numeric, 10);\n }\n if (numeric > 65535) {\n numeric -= 65536;\n return String.fromCharCode(55296 + (numeric >> 10), 56320 + (numeric & 1023));\n }\n return asciiMap[numeric] || String.fromCharCode(numeric);\n }\n return reverseEntities[all] || namedEntities[all] || nativeDecode(all);\n });\n };\n var Entities = {\n encodeRaw: encodeRaw,\n encodeAllRaw: encodeAllRaw,\n encodeNumeric: encodeNumeric,\n encodeNamed: encodeNamed,\n getEncodeFunc: getEncodeFunc,\n decode: decode\n };\n\n var mapCache = {}, dummyObj = {};\n var makeMap$2 = Tools.makeMap, each$4 = Tools.each, extend$1 = Tools.extend, explode$1 = Tools.explode, inArray$1 = Tools.inArray;\n var split = function (items, delim) {\n items = Tools.trim(items);\n return items ? items.split(delim || ' ') : [];\n };\n var compileSchema = function (type) {\n var schema = {};\n var globalAttributes, blockContent;\n var phrasingContent, flowContent, html4BlockContent, html4PhrasingContent;\n var add = function (name, attributes, children) {\n var ni, attributesOrder, element;\n var arrayToMap = function (array, obj) {\n var map = {};\n var i, l;\n for (i = 0, l = array.length; i < l; i++) {\n map[array[i]] = obj || {};\n }\n return map;\n };\n children = children || [];\n attributes = attributes || '';\n if (typeof children === 'string') {\n children = split(children);\n }\n name = split(name);\n ni = name.length;\n while (ni--) {\n attributesOrder = split([\n globalAttributes,\n attributes\n ].join(' '));\n element = {\n attributes: arrayToMap(attributesOrder),\n attributesOrder: attributesOrder,\n children: arrayToMap(children, dummyObj)\n };\n schema[name[ni]] = element;\n }\n };\n var addAttrs = function (name, attributes) {\n var ni, schemaItem, i, l;\n name = split(name);\n ni = name.length;\n attributes = split(attributes);\n while (ni--) {\n schemaItem = schema[name[ni]];\n for (i = 0, l = attributes.length; i < l; i++) {\n schemaItem.attributes[attributes[i]] = {};\n schemaItem.attributesOrder.push(attributes[i]);\n }\n }\n };\n if (mapCache[type]) {\n return mapCache[type];\n }\n globalAttributes = 'id accesskey class dir lang style tabindex title role';\n blockContent = 'address blockquote div dl fieldset form h1 h2 h3 h4 h5 h6 hr menu ol p pre table ul';\n phrasingContent = 'a abbr b bdo br button cite code del dfn em embed i iframe img input ins kbd ' + 'label map noscript object q s samp script select small span strong sub sup ' + 'textarea u var #text #comment';\n if (type !== 'html4') {\n globalAttributes += ' contenteditable contextmenu draggable dropzone ' + 'hidden spellcheck translate';\n blockContent += ' article aside details dialog figure main header footer hgroup section nav';\n phrasingContent += ' audio canvas command datalist mark meter output picture ' + 'progress time wbr video ruby bdi keygen';\n }\n if (type !== 'html5-strict') {\n globalAttributes += ' xml:lang';\n html4PhrasingContent = 'acronym applet basefont big font strike tt';\n phrasingContent = [\n phrasingContent,\n html4PhrasingContent\n ].join(' ');\n each$4(split(html4PhrasingContent), function (name) {\n add(name, '', phrasingContent);\n });\n html4BlockContent = 'center dir isindex noframes';\n blockContent = [\n blockContent,\n html4BlockContent\n ].join(' ');\n flowContent = [\n blockContent,\n phrasingContent\n ].join(' ');\n each$4(split(html4BlockContent), function (name) {\n add(name, '', flowContent);\n });\n }\n flowContent = flowContent || [\n blockContent,\n phrasingContent\n ].join(' ');\n add('html', 'manifest', 'head body');\n add('head', '', 'base command link meta noscript script style title');\n add('title hr noscript br');\n add('base', 'href target');\n add('link', 'href rel media hreflang type sizes hreflang');\n add('meta', 'name http-equiv content charset');\n add('style', 'media type scoped');\n add('script', 'src async defer type charset');\n add('body', 'onafterprint onbeforeprint onbeforeunload onblur onerror onfocus ' + 'onhashchange onload onmessage onoffline ononline onpagehide onpageshow ' + 'onpopstate onresize onscroll onstorage onunload', flowContent);\n add('address dt dd div caption', '', flowContent);\n add('h1 h2 h3 h4 h5 h6 pre p abbr code var samp kbd sub sup i b u bdo span legend em strong small s cite dfn', '', phrasingContent);\n add('blockquote', 'cite', flowContent);\n add('ol', 'reversed start type', 'li');\n add('ul', '', 'li');\n add('li', 'value', flowContent);\n add('dl', '', 'dt dd');\n add('a', 'href target rel media hreflang type', phrasingContent);\n add('q', 'cite', phrasingContent);\n add('ins del', 'cite datetime', flowContent);\n add('img', 'src sizes srcset alt usemap ismap width height');\n add('iframe', 'src name width height', flowContent);\n add('embed', 'src type width height');\n add('object', 'data type typemustmatch name usemap form width height', [\n flowContent,\n 'param'\n ].join(' '));\n add('param', 'name value');\n add('map', 'name', [\n flowContent,\n 'area'\n ].join(' '));\n add('area', 'alt coords shape href target rel media hreflang type');\n add('table', 'border', 'caption colgroup thead tfoot tbody tr' + (type === 'html4' ? ' col' : ''));\n add('colgroup', 'span', 'col');\n add('col', 'span');\n add('tbody thead tfoot', '', 'tr');\n add('tr', '', 'td th');\n add('td', 'colspan rowspan headers', flowContent);\n add('th', 'colspan rowspan headers scope abbr', flowContent);\n add('form', 'accept-charset action autocomplete enctype method name novalidate target', flowContent);\n add('fieldset', 'disabled form name', [\n flowContent,\n 'legend'\n ].join(' '));\n add('label', 'form for', phrasingContent);\n add('input', 'accept alt autocomplete checked dirname disabled form formaction formenctype formmethod formnovalidate ' + 'formtarget height list max maxlength min multiple name pattern readonly required size src step type value width');\n add('button', 'disabled form formaction formenctype formmethod formnovalidate formtarget name type value', type === 'html4' ? flowContent : phrasingContent);\n add('select', 'disabled form multiple name required size', 'option optgroup');\n add('optgroup', 'disabled label', 'option');\n add('option', 'disabled label selected value');\n add('textarea', 'cols dirname disabled form maxlength name readonly required rows wrap');\n add('menu', 'type label', [\n flowContent,\n 'li'\n ].join(' '));\n add('noscript', '', flowContent);\n if (type !== 'html4') {\n add('wbr');\n add('ruby', '', [\n phrasingContent,\n 'rt rp'\n ].join(' '));\n add('figcaption', '', flowContent);\n add('mark rt rp summary bdi', '', phrasingContent);\n add('canvas', 'width height', flowContent);\n add('video', 'src crossorigin poster preload autoplay mediagroup loop ' + 'muted controls width height buffered', [\n flowContent,\n 'track source'\n ].join(' '));\n add('audio', 'src crossorigin preload autoplay mediagroup loop muted controls ' + 'buffered volume', [\n flowContent,\n 'track source'\n ].join(' '));\n add('picture', '', 'img source');\n add('source', 'src srcset type media sizes');\n add('track', 'kind src srclang label default');\n add('datalist', '', [\n phrasingContent,\n 'option'\n ].join(' '));\n add('article section nav aside main header footer', '', flowContent);\n add('hgroup', '', 'h1 h2 h3 h4 h5 h6');\n add('figure', '', [\n flowContent,\n 'figcaption'\n ].join(' '));\n add('time', 'datetime', phrasingContent);\n add('dialog', 'open', flowContent);\n add('command', 'type label icon disabled checked radiogroup command');\n add('output', 'for form name', phrasingContent);\n add('progress', 'value max', phrasingContent);\n add('meter', 'value min max low high optimum', phrasingContent);\n add('details', 'open', [\n flowContent,\n 'summary'\n ].join(' '));\n add('keygen', 'autofocus challenge disabled form keytype name');\n }\n if (type !== 'html5-strict') {\n addAttrs('script', 'language xml:space');\n addAttrs('style', 'xml:space');\n addAttrs('object', 'declare classid code codebase codetype archive standby align border hspace vspace');\n addAttrs('embed', 'align name hspace vspace');\n addAttrs('param', 'valuetype type');\n addAttrs('a', 'charset name rev shape coords');\n addAttrs('br', 'clear');\n addAttrs('applet', 'codebase archive code object alt name width height align hspace vspace');\n addAttrs('img', 'name longdesc align border hspace vspace');\n addAttrs('iframe', 'longdesc frameborder marginwidth marginheight scrolling align');\n addAttrs('font basefont', 'size color face');\n addAttrs('input', 'usemap align');\n addAttrs('select', 'onchange');\n addAttrs('textarea');\n addAttrs('h1 h2 h3 h4 h5 h6 div p legend caption', 'align');\n addAttrs('ul', 'type compact');\n addAttrs('li', 'type');\n addAttrs('ol dl menu dir', 'compact');\n addAttrs('pre', 'width xml:space');\n addAttrs('hr', 'align noshade size width');\n addAttrs('isindex', 'prompt');\n addAttrs('table', 'summary width frame rules cellspacing cellpadding align bgcolor');\n addAttrs('col', 'width align char charoff valign');\n addAttrs('colgroup', 'width align char charoff valign');\n addAttrs('thead', 'align char charoff valign');\n addAttrs('tr', 'align char charoff valign bgcolor');\n addAttrs('th', 'axis align char charoff valign nowrap bgcolor width height');\n addAttrs('form', 'accept');\n addAttrs('td', 'abbr axis scope align char charoff valign nowrap bgcolor width height');\n addAttrs('tfoot', 'align char charoff valign');\n addAttrs('tbody', 'align char charoff valign');\n addAttrs('area', 'nohref');\n addAttrs('body', 'background bgcolor text link vlink alink');\n }\n if (type !== 'html4') {\n addAttrs('input button select textarea', 'autofocus');\n addAttrs('input textarea', 'placeholder');\n addAttrs('a', 'download');\n addAttrs('link script img', 'crossorigin');\n addAttrs('iframe', 'sandbox seamless allowfullscreen');\n }\n each$4(split('a form meter progress dfn'), function (name) {\n if (schema[name]) {\n delete schema[name].children[name];\n }\n });\n delete schema.caption.children.table;\n delete schema.script;\n mapCache[type] = schema;\n return schema;\n };\n var compileElementMap = function (value, mode) {\n var styles;\n if (value) {\n styles = {};\n if (typeof value === 'string') {\n value = { '*': value };\n }\n each$4(value, function (value, key) {\n styles[key] = styles[key.toUpperCase()] = mode === 'map' ? makeMap$2(value, /[, ]/) : explode$1(value, /[, ]/);\n });\n }\n return styles;\n };\n function Schema(settings) {\n var elements = {};\n var children = {};\n var patternElements = [];\n var validStyles;\n var invalidStyles;\n var schemaItems;\n var whiteSpaceElementsMap, selfClosingElementsMap, shortEndedElementsMap, boolAttrMap, validClasses;\n var blockElementsMap, nonEmptyElementsMap, moveCaretBeforeOnEnterElementsMap, textBlockElementsMap, textInlineElementsMap;\n var customElementsMap = {}, specialElements = {};\n var createLookupTable = function (option, defaultValue, extendWith) {\n var value = settings[option];\n if (!value) {\n value = mapCache[option];\n if (!value) {\n value = makeMap$2(defaultValue, ' ', makeMap$2(defaultValue.toUpperCase(), ' '));\n value = extend$1(value, extendWith);\n mapCache[option] = value;\n }\n } else {\n value = makeMap$2(value, /[, ]/, makeMap$2(value.toUpperCase(), /[, ]/));\n }\n return value;\n };\n settings = settings || {};\n schemaItems = compileSchema(settings.schema);\n if (settings.verify_html === false) {\n settings.valid_elements = '*[*]';\n }\n validStyles = compileElementMap(settings.valid_styles);\n invalidStyles = compileElementMap(settings.invalid_styles, 'map');\n validClasses = compileElementMap(settings.valid_classes, 'map');\n whiteSpaceElementsMap = createLookupTable('whitespace_elements', 'pre script noscript style textarea video audio iframe object code');\n selfClosingElementsMap = createLookupTable('self_closing_elements', 'colgroup dd dt li option p td tfoot th thead tr');\n shortEndedElementsMap = createLookupTable('short_ended_elements', 'area base basefont br col frame hr img input isindex link ' + 'meta param embed source wbr track');\n boolAttrMap = createLookupTable('boolean_attributes', 'checked compact declare defer disabled ismap multiple nohref noresize ' + 'noshade nowrap readonly selected autoplay loop controls');\n nonEmptyElementsMap = createLookupTable('non_empty_elements', 'td th iframe video audio object ' + 'script pre code', shortEndedElementsMap);\n moveCaretBeforeOnEnterElementsMap = createLookupTable('move_caret_before_on_enter_elements', 'table', nonEmptyElementsMap);\n textBlockElementsMap = createLookupTable('text_block_elements', 'h1 h2 h3 h4 h5 h6 p div address pre form ' + 'blockquote center dir fieldset header footer article section hgroup aside main nav figure');\n blockElementsMap = createLookupTable('block_elements', 'hr table tbody thead tfoot ' + 'th tr td li ol ul caption dl dt dd noscript menu isindex option ' + 'datalist select optgroup figcaption details summary', textBlockElementsMap);\n textInlineElementsMap = createLookupTable('text_inline_elements', 'span strong b em i font strike u var cite ' + 'dfn code mark q sup sub samp');\n each$4((settings.special || 'script noscript iframe noframes noembed title style textarea xmp').split(' '), function (name) {\n specialElements[name] = new RegExp('' + name + '[^>]*>', 'gi');\n });\n var patternToRegExp = function (str) {\n return new RegExp('^' + str.replace(/([?+*])/g, '.$1') + '$');\n };\n var addValidElements = function (validElements) {\n var ei, el, ai, al, matches, element, attr, attrData, elementName, attrName, attrType, attributes, attributesOrder, prefix, outputName, globalAttributes, globalAttributesOrder, key, value;\n var elementRuleRegExp = /^([#+\\-])?([^\\[!\\/]+)(?:\\/([^\\[!]+))?(?:(!?)\\[([^\\]]+)\\])?$/, attrRuleRegExp = /^([!\\-])?(\\w+[\\\\:]:\\w+|[^=:<]+)?(?:([=:<])(.*))?$/, hasPatternsRegExp = /[*?+]/;\n if (validElements) {\n validElements = split(validElements, ',');\n if (elements['@']) {\n globalAttributes = elements['@'].attributes;\n globalAttributesOrder = elements['@'].attributesOrder;\n }\n for (ei = 0, el = validElements.length; ei < el; ei++) {\n matches = elementRuleRegExp.exec(validElements[ei]);\n if (matches) {\n prefix = matches[1];\n elementName = matches[2];\n outputName = matches[3];\n attrData = matches[5];\n attributes = {};\n attributesOrder = [];\n element = {\n attributes: attributes,\n attributesOrder: attributesOrder\n };\n if (prefix === '#') {\n element.paddEmpty = true;\n }\n if (prefix === '-') {\n element.removeEmpty = true;\n }\n if (matches[4] === '!') {\n element.removeEmptyAttrs = true;\n }\n if (globalAttributes) {\n for (key in globalAttributes) {\n attributes[key] = globalAttributes[key];\n }\n attributesOrder.push.apply(attributesOrder, globalAttributesOrder);\n }\n if (attrData) {\n attrData = split(attrData, '|');\n for (ai = 0, al = attrData.length; ai < al; ai++) {\n matches = attrRuleRegExp.exec(attrData[ai]);\n if (matches) {\n attr = {};\n attrType = matches[1];\n attrName = matches[2].replace(/[\\\\:]:/g, ':');\n prefix = matches[3];\n value = matches[4];\n if (attrType === '!') {\n element.attributesRequired = element.attributesRequired || [];\n element.attributesRequired.push(attrName);\n attr.required = true;\n }\n if (attrType === '-') {\n delete attributes[attrName];\n attributesOrder.splice(inArray$1(attributesOrder, attrName), 1);\n continue;\n }\n if (prefix) {\n if (prefix === '=') {\n element.attributesDefault = element.attributesDefault || [];\n element.attributesDefault.push({\n name: attrName,\n value: value\n });\n attr.defaultValue = value;\n }\n if (prefix === ':') {\n element.attributesForced = element.attributesForced || [];\n element.attributesForced.push({\n name: attrName,\n value: value\n });\n attr.forcedValue = value;\n }\n if (prefix === '<') {\n attr.validValues = makeMap$2(value, '?');\n }\n }\n if (hasPatternsRegExp.test(attrName)) {\n element.attributePatterns = element.attributePatterns || [];\n attr.pattern = patternToRegExp(attrName);\n element.attributePatterns.push(attr);\n } else {\n if (!attributes[attrName]) {\n attributesOrder.push(attrName);\n }\n attributes[attrName] = attr;\n }\n }\n }\n }\n if (!globalAttributes && elementName === '@') {\n globalAttributes = attributes;\n globalAttributesOrder = attributesOrder;\n }\n if (outputName) {\n element.outputName = elementName;\n elements[outputName] = element;\n }\n if (hasPatternsRegExp.test(elementName)) {\n element.pattern = patternToRegExp(elementName);\n patternElements.push(element);\n } else {\n elements[elementName] = element;\n }\n }\n }\n }\n };\n var setValidElements = function (validElements) {\n elements = {};\n patternElements = [];\n addValidElements(validElements);\n each$4(schemaItems, function (element, name) {\n children[name] = element.children;\n });\n };\n var addCustomElements = function (customElements) {\n var customElementRegExp = /^(~)?(.+)$/;\n if (customElements) {\n mapCache.text_block_elements = mapCache.block_elements = null;\n each$4(split(customElements, ','), function (rule) {\n var matches = customElementRegExp.exec(rule), inline = matches[1] === '~', cloneName = inline ? 'span' : 'div', name = matches[2];\n children[name] = children[cloneName];\n customElementsMap[name] = cloneName;\n if (!inline) {\n blockElementsMap[name.toUpperCase()] = {};\n blockElementsMap[name] = {};\n }\n if (!elements[name]) {\n var customRule = elements[cloneName];\n customRule = extend$1({}, customRule);\n delete customRule.removeEmptyAttrs;\n delete customRule.removeEmpty;\n elements[name] = customRule;\n }\n each$4(children, function (element, elmName) {\n if (element[cloneName]) {\n children[elmName] = element = extend$1({}, children[elmName]);\n element[name] = element[cloneName];\n }\n });\n });\n }\n };\n var addValidChildren = function (validChildren) {\n var childRuleRegExp = /^([+\\-]?)(\\w+)\\[([^\\]]+)\\]$/;\n mapCache[settings.schema] = null;\n if (validChildren) {\n each$4(split(validChildren, ','), function (rule) {\n var matches = childRuleRegExp.exec(rule);\n var parent, prefix;\n if (matches) {\n prefix = matches[1];\n if (prefix) {\n parent = children[matches[2]];\n } else {\n parent = children[matches[2]] = { '#comment': {} };\n }\n parent = children[matches[2]];\n each$4(split(matches[3], '|'), function (child) {\n if (prefix === '-') {\n delete parent[child];\n } else {\n parent[child] = {};\n }\n });\n }\n });\n }\n };\n var getElementRule = function (name) {\n var element = elements[name], i;\n if (element) {\n return element;\n }\n i = patternElements.length;\n while (i--) {\n element = patternElements[i];\n if (element.pattern.test(name)) {\n return element;\n }\n }\n };\n if (!settings.valid_elements) {\n each$4(schemaItems, function (element, name) {\n elements[name] = {\n attributes: element.attributes,\n attributesOrder: element.attributesOrder\n };\n children[name] = element.children;\n });\n if (settings.schema !== 'html5') {\n each$4(split('strong/b em/i'), function (item) {\n item = split(item, '/');\n elements[item[1]].outputName = item[0];\n });\n }\n each$4(split('ol ul sub sup blockquote span font a table tbody tr strong em b i'), function (name) {\n if (elements[name]) {\n elements[name].removeEmpty = true;\n }\n });\n each$4(split('p h1 h2 h3 h4 h5 h6 th td pre div address caption li'), function (name) {\n elements[name].paddEmpty = true;\n });\n each$4(split('span'), function (name) {\n elements[name].removeEmptyAttrs = true;\n });\n } else {\n setValidElements(settings.valid_elements);\n }\n addCustomElements(settings.custom_elements);\n addValidChildren(settings.valid_children);\n addValidElements(settings.extended_valid_elements);\n addValidChildren('+ol[ul|ol],+ul[ul|ol]');\n each$4({\n dd: 'dl',\n dt: 'dl',\n li: 'ul ol',\n td: 'tr',\n th: 'tr',\n tr: 'tbody thead tfoot',\n tbody: 'table',\n thead: 'table',\n tfoot: 'table',\n legend: 'fieldset',\n area: 'map',\n param: 'video audio object'\n }, function (parents, item) {\n if (elements[item]) {\n elements[item].parentsRequired = split(parents);\n }\n });\n if (settings.invalid_elements) {\n each$4(explode$1(settings.invalid_elements), function (item) {\n if (elements[item]) {\n delete elements[item];\n }\n });\n }\n if (!getElementRule('span')) {\n addValidElements('span[!data-mce-type|*]');\n }\n var getValidStyles = function () {\n return validStyles;\n };\n var getInvalidStyles = function () {\n return invalidStyles;\n };\n var getValidClasses = function () {\n return validClasses;\n };\n var getBoolAttrs = function () {\n return boolAttrMap;\n };\n var getBlockElements = function () {\n return blockElementsMap;\n };\n var getTextBlockElements = function () {\n return textBlockElementsMap;\n };\n var getTextInlineElements = function () {\n return textInlineElementsMap;\n };\n var getShortEndedElements = function () {\n return shortEndedElementsMap;\n };\n var getSelfClosingElements = function () {\n return selfClosingElementsMap;\n };\n var getNonEmptyElements = function () {\n return nonEmptyElementsMap;\n };\n var getMoveCaretBeforeOnEnterElements = function () {\n return moveCaretBeforeOnEnterElementsMap;\n };\n var getWhiteSpaceElements = function () {\n return whiteSpaceElementsMap;\n };\n var getSpecialElements = function () {\n return specialElements;\n };\n var isValidChild = function (name, child) {\n var parent = children[name.toLowerCase()];\n return !!(parent && parent[child.toLowerCase()]);\n };\n var isValid = function (name, attr) {\n var attrPatterns, i;\n var rule = getElementRule(name);\n if (rule) {\n if (attr) {\n if (rule.attributes[attr]) {\n return true;\n }\n attrPatterns = rule.attributePatterns;\n if (attrPatterns) {\n i = attrPatterns.length;\n while (i--) {\n if (attrPatterns[i].pattern.test(name)) {\n return true;\n }\n }\n }\n } else {\n return true;\n }\n }\n return false;\n };\n var getCustomElements = function () {\n return customElementsMap;\n };\n return {\n children: children,\n elements: elements,\n getValidStyles: getValidStyles,\n getValidClasses: getValidClasses,\n getBlockElements: getBlockElements,\n getInvalidStyles: getInvalidStyles,\n getShortEndedElements: getShortEndedElements,\n getTextBlockElements: getTextBlockElements,\n getTextInlineElements: getTextInlineElements,\n getBoolAttrs: getBoolAttrs,\n getElementRule: getElementRule,\n getSelfClosingElements: getSelfClosingElements,\n getNonEmptyElements: getNonEmptyElements,\n getMoveCaretBeforeOnEnterElements: getMoveCaretBeforeOnEnterElements,\n getWhiteSpaceElements: getWhiteSpaceElements,\n getSpecialElements: getSpecialElements,\n isValidChild: isValidChild,\n isValid: isValid,\n getCustomElements: getCustomElements,\n addValidElements: addValidElements,\n setValidElements: setValidElements,\n addCustomElements: addCustomElements,\n addValidChildren: addValidChildren\n };\n }\n\n var toHex = function (match, r, g, b) {\n var hex = function (val) {\n val = parseInt(val, 10).toString(16);\n return val.length > 1 ? val : '0' + val;\n };\n return '#' + hex(r) + hex(g) + hex(b);\n };\n function Styles(settings, schema) {\n var rgbRegExp = /rgb\\s*\\(\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*\\)/gi;\n var urlOrStrRegExp = /(?:url(?:(?:\\(\\s*\\\"([^\\\"]+)\\\"\\s*\\))|(?:\\(\\s*\\'([^\\']+)\\'\\s*\\))|(?:\\(\\s*([^)\\s]+)\\s*\\))))|(?:\\'([^\\']+)\\')|(?:\\\"([^\\\"]+)\\\")/gi;\n var styleRegExp = /\\s*([^:]+):\\s*([^;]+);?/g;\n var trimRightRegExp = /\\s+$/;\n var i;\n var encodingLookup = {};\n var encodingItems;\n var validStyles;\n var invalidStyles;\n var invisibleChar = '\\uFEFF';\n settings = settings || {};\n if (schema) {\n validStyles = schema.getValidStyles();\n invalidStyles = schema.getInvalidStyles();\n }\n encodingItems = ('\\\\\" \\\\\\' \\\\; \\\\: ; : ' + invisibleChar).split(' ');\n for (i = 0; i < encodingItems.length; i++) {\n encodingLookup[encodingItems[i]] = invisibleChar + i;\n encodingLookup[invisibleChar + i] = encodingItems[i];\n }\n return {\n toHex: function (color) {\n return color.replace(rgbRegExp, toHex);\n },\n parse: function (css) {\n var styles = {};\n var matches, name, value, isEncoded;\n var urlConverter = settings.url_converter;\n var urlConverterScope = settings.url_converter_scope || this;\n var compress = function (prefix, suffix, noJoin) {\n var top, right, bottom, left;\n top = styles[prefix + '-top' + suffix];\n if (!top) {\n return;\n }\n right = styles[prefix + '-right' + suffix];\n if (!right) {\n return;\n }\n bottom = styles[prefix + '-bottom' + suffix];\n if (!bottom) {\n return;\n }\n left = styles[prefix + '-left' + suffix];\n if (!left) {\n return;\n }\n var box = [\n top,\n right,\n bottom,\n left\n ];\n i = box.length - 1;\n while (i--) {\n if (box[i] !== box[i + 1]) {\n break;\n }\n }\n if (i > -1 && noJoin) {\n return;\n }\n styles[prefix + suffix] = i === -1 ? box[0] : box.join(' ');\n delete styles[prefix + '-top' + suffix];\n delete styles[prefix + '-right' + suffix];\n delete styles[prefix + '-bottom' + suffix];\n delete styles[prefix + '-left' + suffix];\n };\n var canCompress = function (key) {\n var value = styles[key], i;\n if (!value) {\n return;\n }\n value = value.split(' ');\n i = value.length;\n while (i--) {\n if (value[i] !== value[0]) {\n return false;\n }\n }\n styles[key] = value[0];\n return true;\n };\n var compress2 = function (target, a, b, c) {\n if (!canCompress(a)) {\n return;\n }\n if (!canCompress(b)) {\n return;\n }\n if (!canCompress(c)) {\n return;\n }\n styles[target] = styles[a] + ' ' + styles[b] + ' ' + styles[c];\n delete styles[a];\n delete styles[b];\n delete styles[c];\n };\n var encode = function (str) {\n isEncoded = true;\n return encodingLookup[str];\n };\n var decode = function (str, keepSlashes) {\n if (isEncoded) {\n str = str.replace(/\\uFEFF[0-9]/g, function (str) {\n return encodingLookup[str];\n });\n }\n if (!keepSlashes) {\n str = str.replace(/\\\\([\\'\\\";:])/g, '$1');\n }\n return str;\n };\n var decodeSingleHexSequence = function (escSeq) {\n return String.fromCharCode(parseInt(escSeq.slice(1), 16));\n };\n var decodeHexSequences = function (value) {\n return value.replace(/\\\\[0-9a-f]+/gi, decodeSingleHexSequence);\n };\n var processUrl = function (match, url, url2, url3, str, str2) {\n str = str || str2;\n if (str) {\n str = decode(str);\n return '\\'' + str.replace(/\\'/g, '\\\\\\'') + '\\'';\n }\n url = decode(url || url2 || url3);\n if (!settings.allow_script_urls) {\n var scriptUrl = url.replace(/[\\s\\r\\n]+/g, '');\n if (/(java|vb)script:/i.test(scriptUrl)) {\n return '';\n }\n if (!settings.allow_svg_data_urls && /^data:image\\/svg/i.test(scriptUrl)) {\n return '';\n }\n }\n if (urlConverter) {\n url = urlConverter.call(urlConverterScope, url, 'style');\n }\n return 'url(\\'' + url.replace(/\\'/g, '\\\\\\'') + '\\')';\n };\n if (css) {\n css = css.replace(/[\\u0000-\\u001F]/g, '');\n css = css.replace(/\\\\[\\\"\\';:\\uFEFF]/g, encode).replace(/\\\"[^\\\"]+\\\"|\\'[^\\']+\\'/g, function (str) {\n return str.replace(/[;:]/g, encode);\n });\n while (matches = styleRegExp.exec(css)) {\n styleRegExp.lastIndex = matches.index + matches[0].length;\n name = matches[1].replace(trimRightRegExp, '').toLowerCase();\n value = matches[2].replace(trimRightRegExp, '');\n if (name && value) {\n name = decodeHexSequences(name);\n value = decodeHexSequences(value);\n if (name.indexOf(invisibleChar) !== -1 || name.indexOf('\"') !== -1) {\n continue;\n }\n if (!settings.allow_script_urls && (name === 'behavior' || /expression\\s*\\(|\\/\\*|\\*\\//.test(value))) {\n continue;\n }\n if (name === 'font-weight' && value === '700') {\n value = 'bold';\n } else if (name === 'color' || name === 'background-color') {\n value = value.toLowerCase();\n }\n value = value.replace(rgbRegExp, toHex);\n value = value.replace(urlOrStrRegExp, processUrl);\n styles[name] = isEncoded ? decode(value, true) : value;\n }\n }\n compress('border', '', true);\n compress('border', '-width');\n compress('border', '-color');\n compress('border', '-style');\n compress('padding', '');\n compress('margin', '');\n compress2('border', 'border-width', 'border-style', 'border-color');\n if (styles.border === 'medium none') {\n delete styles.border;\n }\n if (styles['border-image'] === 'none') {\n delete styles['border-image'];\n }\n }\n return styles;\n },\n serialize: function (styles, elementName) {\n var css = '', name, value;\n var serializeStyles = function (name) {\n var styleList, i, l, value;\n styleList = validStyles[name];\n if (styleList) {\n for (i = 0, l = styleList.length; i < l; i++) {\n name = styleList[i];\n value = styles[name];\n if (value) {\n css += (css.length > 0 ? ' ' : '') + name + ': ' + value + ';';\n }\n }\n }\n };\n var isValid = function (name, elementName) {\n var styleMap;\n styleMap = invalidStyles['*'];\n if (styleMap && styleMap[name]) {\n return false;\n }\n styleMap = invalidStyles[elementName];\n if (styleMap && styleMap[name]) {\n return false;\n }\n return true;\n };\n if (elementName && validStyles) {\n serializeStyles('*');\n serializeStyles(elementName);\n } else {\n for (name in styles) {\n value = styles[name];\n if (value && (!invalidStyles || isValid(name, elementName))) {\n css += (css.length > 0 ? ' ' : '') + name + ': ' + value + ';';\n }\n }\n }\n return css;\n }\n };\n }\n\n var each$5 = Tools.each;\n var grep$1 = Tools.grep;\n var isIE = Env.ie;\n var simpleSelectorRe = /^([a-z0-9],?)+$/i;\n var whiteSpaceRegExp$2 = /^[ \\t\\r\\n]*$/;\n var setupAttrHooks = function (styles, settings, getContext) {\n var attrHooks = {};\n var keepValues = settings.keep_values;\n var keepUrlHook = {\n set: function ($elm, value, name) {\n if (settings.url_converter) {\n value = settings.url_converter.call(settings.url_converter_scope || getContext(), value, name, $elm[0]);\n }\n $elm.attr('data-mce-' + name, value).attr(name, value);\n },\n get: function ($elm, name) {\n return $elm.attr('data-mce-' + name) || $elm.attr(name);\n }\n };\n attrHooks = {\n style: {\n set: function ($elm, value) {\n if (value !== null && typeof value === 'object') {\n $elm.css(value);\n return;\n }\n if (keepValues) {\n $elm.attr('data-mce-style', value);\n }\n $elm.attr('style', value);\n },\n get: function ($elm) {\n var value = $elm.attr('data-mce-style') || $elm.attr('style');\n value = styles.serialize(styles.parse(value), $elm[0].nodeName);\n return value;\n }\n }\n };\n if (keepValues) {\n attrHooks.href = attrHooks.src = keepUrlHook;\n }\n return attrHooks;\n };\n var updateInternalStyleAttr = function (styles, $elm) {\n var rawValue = $elm.attr('style');\n var value = styles.serialize(styles.parse(rawValue), $elm[0].nodeName);\n if (!value) {\n value = null;\n }\n $elm.attr('data-mce-style', value);\n };\n var findNodeIndex = function (node, normalized) {\n var idx = 0, lastNodeType, nodeType;\n if (node) {\n for (lastNodeType = node.nodeType, node = node.previousSibling; node; node = node.previousSibling) {\n nodeType = node.nodeType;\n if (normalized && nodeType === 3) {\n if (nodeType === lastNodeType || !node.nodeValue.length) {\n continue;\n }\n }\n idx++;\n lastNodeType = nodeType;\n }\n }\n return idx;\n };\n function DOMUtils(doc, settings) {\n var _this = this;\n if (settings === void 0) {\n settings = {};\n }\n var attrHooks;\n var addedStyles = {};\n var win = domGlobals.window;\n var files = {};\n var counter = 0;\n var stdMode = true;\n var boxModel = true;\n var styleSheetLoader = StyleSheetLoader(doc, { contentCssCors: settings.contentCssCors });\n var boundEvents = [];\n var schema = settings.schema ? settings.schema : Schema({});\n var styles = Styles({\n url_converter: settings.url_converter,\n url_converter_scope: settings.url_converter_scope\n }, settings.schema);\n var events = settings.ownEvents ? new EventUtils(settings.proxy) : EventUtils.Event;\n var blockElementsMap = schema.getBlockElements();\n var $ = DomQuery.overrideDefaults(function () {\n return {\n context: doc,\n element: self.getRoot()\n };\n });\n var isBlock = function (node) {\n if (typeof node === 'string') {\n return !!blockElementsMap[node];\n } else if (node) {\n var type = node.nodeType;\n if (type) {\n return !!(type === 1 && blockElementsMap[node.nodeName]);\n }\n }\n return false;\n };\n var get = function (elm) {\n if (elm && doc && typeof elm === 'string') {\n var node = doc.getElementById(elm);\n if (node && node.id !== elm) {\n return doc.getElementsByName(elm)[1];\n } else {\n return node;\n }\n }\n return elm;\n };\n var $$ = function (elm) {\n if (typeof elm === 'string') {\n elm = get(elm);\n }\n return $(elm);\n };\n var getAttrib = function (elm, name, defaultVal) {\n var hook, value;\n var $elm = $$(elm);\n if ($elm.length) {\n hook = attrHooks[name];\n if (hook && hook.get) {\n value = hook.get($elm, name);\n } else {\n value = $elm.attr(name);\n }\n }\n if (typeof value === 'undefined') {\n value = defaultVal || '';\n }\n return value;\n };\n var getAttribs = function (elm) {\n var node = get(elm);\n if (!node) {\n return [];\n }\n return node.attributes;\n };\n var setAttrib = function (elm, name, value) {\n var originalValue, hook;\n if (value === '') {\n value = null;\n }\n var $elm = $$(elm);\n originalValue = $elm.attr(name);\n if (!$elm.length) {\n return;\n }\n hook = attrHooks[name];\n if (hook && hook.set) {\n hook.set($elm, value, name);\n } else {\n $elm.attr(name, value);\n }\n if (originalValue !== value && settings.onSetAttrib) {\n settings.onSetAttrib({\n attrElm: $elm,\n attrName: name,\n attrValue: value\n });\n }\n };\n var clone = function (node, deep) {\n if (!isIE || node.nodeType !== 1 || deep) {\n return node.cloneNode(deep);\n }\n if (!deep) {\n var clone_1 = doc.createElement(node.nodeName);\n each$5(getAttribs(node), function (attr) {\n setAttrib(clone_1, attr.nodeName, getAttrib(node, attr.nodeName));\n });\n return clone_1;\n }\n return null;\n };\n var getRoot = function () {\n return settings.root_element || doc.body;\n };\n var getViewPort = function (argWin) {\n var actWin = !argWin ? win : argWin;\n var doc = actWin.document;\n var rootElm = doc.documentElement ;\n return {\n x: actWin.pageXOffset || rootElm.scrollLeft,\n y: actWin.pageYOffset || rootElm.scrollTop,\n w: actWin.innerWidth || rootElm.clientWidth,\n h: actWin.innerHeight || rootElm.clientHeight\n };\n };\n var getPos = function (elm, rootElm) {\n return Position.getPos(doc.body, get(elm), rootElm);\n };\n var setStyle = function (elm, name, value) {\n var $elm = $$(elm).css(name, value);\n if (settings.update_styles) {\n updateInternalStyleAttr(styles, $elm);\n }\n };\n var setStyles = function (elm, stylesArg) {\n var $elm = $$(elm).css(stylesArg);\n if (settings.update_styles) {\n updateInternalStyleAttr(styles, $elm);\n }\n };\n var getStyle = function (elm, name, computed) {\n var $elm = $$(elm);\n if (computed) {\n return $elm.css(name);\n }\n name = name.replace(/-(\\D)/g, function (a, b) {\n return b.toUpperCase();\n });\n if (name === 'float') {\n name = Env.ie && Env.ie < 12 ? 'styleFloat' : 'cssFloat';\n }\n return $elm[0] && $elm[0].style ? $elm[0].style[name] : undefined;\n };\n var getSize = function (elm) {\n var w, h;\n elm = get(elm);\n w = getStyle(elm, 'width');\n h = getStyle(elm, 'height');\n if (w.indexOf('px') === -1) {\n w = 0;\n }\n if (h.indexOf('px') === -1) {\n h = 0;\n }\n return {\n w: parseInt(w, 10) || elm.offsetWidth || elm.clientWidth,\n h: parseInt(h, 10) || elm.offsetHeight || elm.clientHeight\n };\n };\n var getRect = function (elm) {\n var pos, size;\n elm = get(elm);\n pos = getPos(elm);\n size = getSize(elm);\n return {\n x: pos.x,\n y: pos.y,\n w: size.w,\n h: size.h\n };\n };\n var is = function (elm, selector) {\n var i;\n if (!elm) {\n return false;\n }\n if (!Array.isArray(elm)) {\n if (selector === '*') {\n return elm.nodeType === 1;\n }\n if (simpleSelectorRe.test(selector)) {\n var selectors = selector.toLowerCase().split(/,/);\n var elmName = elm.nodeName.toLowerCase();\n for (i = selectors.length - 1; i >= 0; i--) {\n if (selectors[i] === elmName) {\n return true;\n }\n }\n return false;\n }\n if (elm.nodeType && elm.nodeType !== 1) {\n return false;\n }\n }\n var elms = !Array.isArray(elm) ? [elm] : elm;\n return Sizzle(selector, elms[0].ownerDocument || elms[0], null, elms).length > 0;\n };\n var getParents = function (elm, selector, root, collect) {\n var result = [];\n var selectorVal;\n var node = get(elm);\n collect = collect === undefined;\n root = root || (getRoot().nodeName !== 'BODY' ? getRoot().parentNode : null);\n if (Tools.is(selector, 'string')) {\n selectorVal = selector;\n if (selector === '*') {\n selector = function (node) {\n return node.nodeType === 1;\n };\n } else {\n selector = function (node) {\n return is(node, selectorVal);\n };\n }\n }\n while (node) {\n if (node === root || !node.nodeType || node.nodeType === 9) {\n break;\n }\n if (!selector || typeof selector === 'function' && selector(node)) {\n if (collect) {\n result.push(node);\n } else {\n return [node];\n }\n }\n node = node.parentNode;\n }\n return collect ? result : null;\n };\n var getParent = function (node, selector, root) {\n var parents = getParents(node, selector, root, false);\n return parents && parents.length > 0 ? parents[0] : null;\n };\n var _findSib = function (node, selector, name) {\n var func = selector;\n if (node) {\n if (typeof selector === 'string') {\n func = function (node) {\n return is(node, selector);\n };\n }\n for (node = node[name]; node; node = node[name]) {\n if (typeof func === 'function' && func(node)) {\n return node;\n }\n }\n }\n return null;\n };\n var getNext = function (node, selector) {\n return _findSib(node, selector, 'nextSibling');\n };\n var getPrev = function (node, selector) {\n return _findSib(node, selector, 'previousSibling');\n };\n var select = function (selector, scope) {\n return Sizzle(selector, get(scope) || settings.root_element || doc, []);\n };\n var run = function (elm, func, scope) {\n var result;\n var node = typeof elm === 'string' ? get(elm) : elm;\n if (!node) {\n return false;\n }\n if (Tools.isArray(node) && (node.length || node.length === 0)) {\n result = [];\n each$5(node, function (elm, i) {\n if (elm) {\n if (typeof elm === 'string') {\n elm = get(elm);\n }\n result.push(func.call(scope, elm, i));\n }\n });\n return result;\n }\n var context = scope ? scope : _this;\n return func.call(context, node);\n };\n var setAttribs = function (elm, attrs) {\n $$(elm).each(function (i, node) {\n each$5(attrs, function (value, name) {\n setAttrib(node, name, value);\n });\n });\n };\n var setHTML = function (elm, html) {\n var $elm = $$(elm);\n if (isIE) {\n $elm.each(function (i, target) {\n if (target.canHaveHTML === false) {\n return;\n }\n while (target.firstChild) {\n target.removeChild(target.firstChild);\n }\n try {\n target.innerHTML = '
' + html;\n target.removeChild(target.firstChild);\n } catch (ex) {\n DomQuery('').html('
' + html).contents().slice(1).appendTo(target);\n }\n return html;\n });\n } else {\n $elm.html(html);\n }\n };\n var add = function (parentElm, name, attrs, html, create) {\n return run(parentElm, function (parentElm) {\n var newElm = typeof name === 'string' ? doc.createElement(name) : name;\n setAttribs(newElm, attrs);\n if (html) {\n if (typeof html !== 'string' && html.nodeType) {\n newElm.appendChild(html);\n } else if (typeof html === 'string') {\n setHTML(newElm, html);\n }\n }\n return !create ? parentElm.appendChild(newElm) : newElm;\n });\n };\n var create = function (name, attrs, html) {\n return add(doc.createElement(name), name, attrs, html, true);\n };\n var decode = Entities.decode;\n var encode = Entities.encodeAllRaw;\n var createHTML = function (name, attrs, html) {\n var outHtml = '', key;\n outHtml += '<' + name;\n for (key in attrs) {\n if (attrs.hasOwnProperty(key) && attrs[key] !== null && typeof attrs[key] !== 'undefined') {\n outHtml += ' ' + key + '=\"' + encode(attrs[key]) + '\"';\n }\n }\n if (typeof html !== 'undefined') {\n return outHtml + '>' + html + '' + name + '>';\n }\n return outHtml + ' />';\n };\n var createFragment = function (html) {\n var node;\n var container = doc.createElement('div');\n var frag = doc.createDocumentFragment();\n frag.appendChild(container);\n if (html) {\n container.innerHTML = html;\n }\n while (node = container.firstChild) {\n frag.appendChild(node);\n }\n frag.removeChild(container);\n return frag;\n };\n var remove = function (node, keepChildren) {\n var $node = $$(node);\n if (keepChildren) {\n $node.each(function () {\n var child;\n while (child = this.firstChild) {\n if (child.nodeType === 3 && child.data.length === 0) {\n this.removeChild(child);\n } else {\n this.parentNode.insertBefore(child, this);\n }\n }\n }).remove();\n } else {\n $node.remove();\n }\n return $node.length > 1 ? $node.toArray() : $node[0];\n };\n var removeAllAttribs = function (e) {\n return run(e, function (e) {\n var i;\n var attrs = e.attributes;\n for (i = attrs.length - 1; i >= 0; i--) {\n e.removeAttributeNode(attrs.item(i));\n }\n });\n };\n var parseStyle = function (cssText) {\n return styles.parse(cssText);\n };\n var serializeStyle = function (stylesArg, name) {\n return styles.serialize(stylesArg, name);\n };\n var addStyle = function (cssText) {\n var head, styleElm;\n if (self !== DOMUtils.DOM && doc === domGlobals.document) {\n if (addedStyles[cssText]) {\n return;\n }\n addedStyles[cssText] = true;\n }\n styleElm = doc.getElementById('mceDefaultStyles');\n if (!styleElm) {\n styleElm = doc.createElement('style');\n styleElm.id = 'mceDefaultStyles';\n styleElm.type = 'text/css';\n head = doc.getElementsByTagName('head')[0];\n if (head.firstChild) {\n head.insertBefore(styleElm, head.firstChild);\n } else {\n head.appendChild(styleElm);\n }\n }\n if (styleElm.styleSheet) {\n styleElm.styleSheet.cssText += cssText;\n } else {\n styleElm.appendChild(doc.createTextNode(cssText));\n }\n };\n var loadCSS = function (url) {\n var head;\n if (self !== DOMUtils.DOM && doc === domGlobals.document) {\n DOMUtils.DOM.loadCSS(url);\n return;\n }\n if (!url) {\n url = '';\n }\n head = doc.getElementsByTagName('head')[0];\n each$5(url.split(','), function (url) {\n var link;\n url = Tools._addCacheSuffix(url);\n if (files[url]) {\n return;\n }\n files[url] = true;\n link = create('link', {\n rel: 'stylesheet',\n href: url\n });\n head.appendChild(link);\n });\n };\n var toggleClass = function (elm, cls, state) {\n $$(elm).toggleClass(cls, state).each(function () {\n if (this.className === '') {\n DomQuery(this).attr('class', null);\n }\n });\n };\n var addClass = function (elm, cls) {\n $$(elm).addClass(cls);\n };\n var removeClass = function (elm, cls) {\n toggleClass(elm, cls, false);\n };\n var hasClass = function (elm, cls) {\n return $$(elm).hasClass(cls);\n };\n var show = function (elm) {\n $$(elm).show();\n };\n var hide = function (elm) {\n $$(elm).hide();\n };\n var isHidden = function (elm) {\n return $$(elm).css('display') === 'none';\n };\n var uniqueId = function (prefix) {\n return (!prefix ? 'mce_' : prefix) + counter++;\n };\n var getOuterHTML = function (elm) {\n var node = typeof elm === 'string' ? get(elm) : elm;\n return NodeType.isElement(node) ? node.outerHTML : DomQuery('').append(DomQuery(node).clone()).html();\n };\n var setOuterHTML = function (elm, html) {\n $$(elm).each(function () {\n try {\n if ('outerHTML' in this) {\n this.outerHTML = html;\n return;\n }\n } catch (ex) {\n }\n remove(DomQuery(this).html(html), true);\n });\n };\n var insertAfter = function (node, reference) {\n var referenceNode = get(reference);\n return run(node, function (node) {\n var parent, nextSibling;\n parent = referenceNode.parentNode;\n nextSibling = referenceNode.nextSibling;\n if (nextSibling) {\n parent.insertBefore(node, nextSibling);\n } else {\n parent.appendChild(node);\n }\n return node;\n });\n };\n var replace = function (newElm, oldElm, keepChildren) {\n return run(oldElm, function (oldElm) {\n if (Tools.is(oldElm, 'array')) {\n newElm = newElm.cloneNode(true);\n }\n if (keepChildren) {\n each$5(grep$1(oldElm.childNodes), function (node) {\n newElm.appendChild(node);\n });\n }\n return oldElm.parentNode.replaceChild(newElm, oldElm);\n });\n };\n var rename = function (elm, name) {\n var newElm;\n if (elm.nodeName !== name.toUpperCase()) {\n newElm = create(name);\n each$5(getAttribs(elm), function (attrNode) {\n setAttrib(newElm, attrNode.nodeName, getAttrib(elm, attrNode.nodeName));\n });\n replace(newElm, elm, true);\n }\n return newElm || elm;\n };\n var findCommonAncestor = function (a, b) {\n var ps = a, pe;\n while (ps) {\n pe = b;\n while (pe && ps !== pe) {\n pe = pe.parentNode;\n }\n if (ps === pe) {\n break;\n }\n ps = ps.parentNode;\n }\n if (!ps && a.ownerDocument) {\n return a.ownerDocument.documentElement;\n }\n return ps;\n };\n var toHex = function (rgbVal) {\n return styles.toHex(Tools.trim(rgbVal));\n };\n var isEmpty = function (node, elements) {\n var i, attributes, type, whitespace, walker, name, brCount = 0;\n node = node.firstChild;\n if (node) {\n walker = new TreeWalker(node, node.parentNode);\n elements = elements || (schema ? schema.getNonEmptyElements() : null);\n whitespace = schema ? schema.getWhiteSpaceElements() : {};\n do {\n type = node.nodeType;\n if (NodeType.isElement(node)) {\n var bogusVal = node.getAttribute('data-mce-bogus');\n if (bogusVal) {\n node = walker.next(bogusVal === 'all');\n continue;\n }\n name = node.nodeName.toLowerCase();\n if (elements && elements[name]) {\n if (name === 'br') {\n brCount++;\n node = walker.next();\n continue;\n }\n return false;\n }\n attributes = getAttribs(node);\n i = attributes.length;\n while (i--) {\n name = attributes[i].nodeName;\n if (name === 'name' || name === 'data-mce-bookmark') {\n return false;\n }\n }\n }\n if (type === 8) {\n return false;\n }\n if (type === 3 && !whiteSpaceRegExp$2.test(node.nodeValue)) {\n return false;\n }\n if (type === 3 && node.parentNode && whitespace[node.parentNode.nodeName] && whiteSpaceRegExp$2.test(node.nodeValue)) {\n return false;\n }\n node = walker.next();\n } while (node);\n }\n return brCount <= 1;\n };\n var createRng = function () {\n return doc.createRange();\n };\n var split = function (parentElm, splitElm, replacementElm) {\n var r = createRng(), bef, aft, pa;\n if (parentElm && splitElm) {\n r.setStart(parentElm.parentNode, findNodeIndex(parentElm));\n r.setEnd(splitElm.parentNode, findNodeIndex(splitElm));\n bef = r.extractContents();\n r = createRng();\n r.setStart(splitElm.parentNode, findNodeIndex(splitElm) + 1);\n r.setEnd(parentElm.parentNode, findNodeIndex(parentElm) + 1);\n aft = r.extractContents();\n pa = parentElm.parentNode;\n pa.insertBefore(TrimNode.trimNode(self, bef), parentElm);\n if (replacementElm) {\n pa.insertBefore(replacementElm, parentElm);\n } else {\n pa.insertBefore(splitElm, parentElm);\n }\n pa.insertBefore(TrimNode.trimNode(self, aft), parentElm);\n remove(parentElm);\n return replacementElm || splitElm;\n }\n };\n var bind = function (target, name, func, scope) {\n if (Tools.isArray(target)) {\n var i = target.length;\n while (i--) {\n target[i] = bind(target[i], name, func, scope);\n }\n return target;\n }\n if (settings.collect && (target === doc || target === win)) {\n boundEvents.push([\n target,\n name,\n func,\n scope\n ]);\n }\n return events.bind(target, name, func, scope || self);\n };\n var unbind = function (target, name, func) {\n var i;\n if (Tools.isArray(target)) {\n i = target.length;\n while (i--) {\n target[i] = unbind(target[i], name, func);\n }\n return target;\n }\n if (boundEvents && (target === doc || target === win)) {\n i = boundEvents.length;\n while (i--) {\n var item = boundEvents[i];\n if (target === item[0] && (!name || name === item[1]) && (!func || func === item[2])) {\n events.unbind(item[0], item[1], item[2]);\n }\n }\n }\n return events.unbind(target, name, func);\n };\n var fire = function (target, name, evt) {\n return events.fire(target, name, evt);\n };\n var getContentEditable = function (node) {\n if (node && NodeType.isElement(node)) {\n var contentEditable = node.getAttribute('data-mce-contenteditable');\n if (contentEditable && contentEditable !== 'inherit') {\n return contentEditable;\n }\n return node.contentEditable !== 'inherit' ? node.contentEditable : null;\n } else {\n return null;\n }\n };\n var getContentEditableParent = function (node) {\n var root = getRoot();\n var state = null;\n for (; node && node !== root; node = node.parentNode) {\n state = getContentEditable(node);\n if (state !== null) {\n break;\n }\n }\n return state;\n };\n var destroy = function () {\n if (boundEvents) {\n var i = boundEvents.length;\n while (i--) {\n var item = boundEvents[i];\n events.unbind(item[0], item[1], item[2]);\n }\n }\n if (Sizzle.setDocument) {\n Sizzle.setDocument();\n }\n };\n var isChildOf = function (node, parent) {\n while (node) {\n if (parent === node) {\n return true;\n }\n node = node.parentNode;\n }\n return false;\n };\n var dumpRng = function (r) {\n return 'startContainer: ' + r.startContainer.nodeName + ', startOffset: ' + r.startOffset + ', endContainer: ' + r.endContainer.nodeName + ', endOffset: ' + r.endOffset;\n };\n var self = {\n doc: doc,\n settings: settings,\n win: win,\n files: files,\n stdMode: stdMode,\n boxModel: boxModel,\n styleSheetLoader: styleSheetLoader,\n boundEvents: boundEvents,\n styles: styles,\n schema: schema,\n events: events,\n isBlock: isBlock,\n $: $,\n $$: $$,\n root: null,\n clone: clone,\n getRoot: getRoot,\n getViewPort: getViewPort,\n getRect: getRect,\n getSize: getSize,\n getParent: getParent,\n getParents: getParents,\n get: get,\n getNext: getNext,\n getPrev: getPrev,\n select: select,\n is: is,\n add: add,\n create: create,\n createHTML: createHTML,\n createFragment: createFragment,\n remove: remove,\n setStyle: setStyle,\n getStyle: getStyle,\n setStyles: setStyles,\n removeAllAttribs: removeAllAttribs,\n setAttrib: setAttrib,\n setAttribs: setAttribs,\n getAttrib: getAttrib,\n getPos: getPos,\n parseStyle: parseStyle,\n serializeStyle: serializeStyle,\n addStyle: addStyle,\n loadCSS: loadCSS,\n addClass: addClass,\n removeClass: removeClass,\n hasClass: hasClass,\n toggleClass: toggleClass,\n show: show,\n hide: hide,\n isHidden: isHidden,\n uniqueId: uniqueId,\n setHTML: setHTML,\n getOuterHTML: getOuterHTML,\n setOuterHTML: setOuterHTML,\n decode: decode,\n encode: encode,\n insertAfter: insertAfter,\n replace: replace,\n rename: rename,\n findCommonAncestor: findCommonAncestor,\n toHex: toHex,\n run: run,\n getAttribs: getAttribs,\n isEmpty: isEmpty,\n createRng: createRng,\n nodeIndex: findNodeIndex,\n split: split,\n bind: bind,\n unbind: unbind,\n fire: fire,\n getContentEditable: getContentEditable,\n getContentEditableParent: getContentEditableParent,\n destroy: destroy,\n isChildOf: isChildOf,\n dumpRng: dumpRng\n };\n attrHooks = setupAttrHooks(styles, settings, function () {\n return self;\n });\n return self;\n }\n (function (DOMUtils) {\n DOMUtils.DOM = DOMUtils(domGlobals.document);\n DOMUtils.nodeIndex = findNodeIndex;\n }(DOMUtils || (DOMUtils = {})));\n var DOMUtils$1 = DOMUtils;\n\n var DOM = DOMUtils$1.DOM;\n var each$6 = Tools.each, grep$2 = Tools.grep;\n var isFunction$1 = function (f) {\n return typeof f === 'function';\n };\n var ScriptLoader = function () {\n var QUEUED = 0;\n var LOADING = 1;\n var LOADED = 2;\n var FAILED = 3;\n var states = {};\n var queue = [];\n var scriptLoadedCallbacks = {};\n var queueLoadedCallbacks = [];\n var loading = 0;\n var loadScript = function (url, success, failure) {\n var dom = DOM;\n var elm, id;\n var done = function () {\n dom.remove(id);\n if (elm) {\n elm.onreadystatechange = elm.onload = elm = null;\n }\n success();\n };\n var error = function () {\n if (isFunction$1(failure)) {\n failure();\n } else {\n if (typeof console !== 'undefined' && console.log) {\n console.log('Failed to load script: ' + url);\n }\n }\n };\n id = dom.uniqueId();\n elm = domGlobals.document.createElement('script');\n elm.id = id;\n elm.type = 'text/javascript';\n elm.src = Tools._addCacheSuffix(url);\n elm.onload = done;\n elm.onerror = error;\n (domGlobals.document.getElementsByTagName('head')[0] || domGlobals.document.body).appendChild(elm);\n };\n this.isDone = function (url) {\n return states[url] === LOADED;\n };\n this.markDone = function (url) {\n states[url] = LOADED;\n };\n this.add = this.load = function (url, success, scope, failure) {\n var state = states[url];\n if (state === undefined) {\n queue.push(url);\n states[url] = QUEUED;\n }\n if (success) {\n if (!scriptLoadedCallbacks[url]) {\n scriptLoadedCallbacks[url] = [];\n }\n scriptLoadedCallbacks[url].push({\n success: success,\n failure: failure,\n scope: scope || this\n });\n }\n };\n this.remove = function (url) {\n delete states[url];\n delete scriptLoadedCallbacks[url];\n };\n this.loadQueue = function (success, scope, failure) {\n this.loadScripts(queue, success, scope, failure);\n };\n this.loadScripts = function (scripts, success, scope, failure) {\n var loadScripts;\n var failures = [];\n var execCallbacks = function (name, url) {\n each$6(scriptLoadedCallbacks[url], function (callback) {\n if (isFunction$1(callback[name])) {\n callback[name].call(callback.scope);\n }\n });\n scriptLoadedCallbacks[url] = undefined;\n };\n queueLoadedCallbacks.push({\n success: success,\n failure: failure,\n scope: scope || this\n });\n loadScripts = function () {\n var loadingScripts = grep$2(scripts);\n scripts.length = 0;\n each$6(loadingScripts, function (url) {\n if (states[url] === LOADED) {\n execCallbacks('success', url);\n return;\n }\n if (states[url] === FAILED) {\n execCallbacks('failure', url);\n return;\n }\n if (states[url] !== LOADING) {\n states[url] = LOADING;\n loading++;\n loadScript(url, function () {\n states[url] = LOADED;\n loading--;\n execCallbacks('success', url);\n loadScripts();\n }, function () {\n states[url] = FAILED;\n loading--;\n failures.push(url);\n execCallbacks('failure', url);\n loadScripts();\n });\n }\n });\n if (!loading) {\n var notifyCallbacks = queueLoadedCallbacks.slice(0);\n queueLoadedCallbacks.length = 0;\n each$6(notifyCallbacks, function (callback) {\n if (failures.length === 0) {\n if (isFunction$1(callback.success)) {\n callback.success.call(callback.scope);\n }\n } else {\n if (isFunction$1(callback.failure)) {\n callback.failure.call(callback.scope, failures);\n }\n }\n });\n }\n };\n loadScripts();\n };\n };\n ScriptLoader.ScriptLoader = new ScriptLoader();\n\n var each$7 = Tools.each;\n function AddOnManager() {\n var _this = this;\n var items = [];\n var urls = {};\n var lookup = {};\n var _listeners = [];\n var get = function (name) {\n if (lookup[name]) {\n return lookup[name].instance;\n }\n return undefined;\n };\n var dependencies = function (name) {\n var result;\n if (lookup[name]) {\n result = lookup[name].dependencies;\n }\n return result || [];\n };\n var requireLangPack = function (name, languages) {\n var language = AddOnManager.language;\n if (language && AddOnManager.languageLoad !== false) {\n if (languages) {\n languages = ',' + languages + ',';\n if (languages.indexOf(',' + language.substr(0, 2) + ',') !== -1) {\n language = language.substr(0, 2);\n } else if (languages.indexOf(',' + language + ',') === -1) {\n return;\n }\n }\n ScriptLoader.ScriptLoader.add(urls[name] + '/langs/' + language + '.js');\n }\n };\n var add = function (id, addOn, dependencies) {\n items.push(addOn);\n lookup[id] = {\n instance: addOn,\n dependencies: dependencies\n };\n var result = partition(_listeners, function (listener) {\n return listener.name === id;\n });\n _listeners = result.fail;\n each$7(result.pass, function (listener) {\n listener.callback();\n });\n return addOn;\n };\n var remove = function (name) {\n delete urls[name];\n delete lookup[name];\n };\n var createUrl = function (baseUrl, dep) {\n if (typeof dep === 'object') {\n return dep;\n }\n return typeof baseUrl === 'string' ? {\n prefix: '',\n resource: dep,\n suffix: ''\n } : {\n prefix: baseUrl.prefix,\n resource: dep,\n suffix: baseUrl.suffix\n };\n };\n var addComponents = function (pluginName, scripts) {\n var pluginUrl = _this.urls[pluginName];\n each$7(scripts, function (script) {\n ScriptLoader.ScriptLoader.add(pluginUrl + '/' + script);\n });\n };\n var loadDependencies = function (name, addOnUrl, success, scope) {\n var deps = dependencies(name);\n each$7(deps, function (dep) {\n var newUrl = createUrl(addOnUrl, dep);\n load(newUrl.resource, newUrl, undefined, undefined);\n });\n if (success) {\n if (scope) {\n success.call(scope);\n } else {\n success.call(ScriptLoader);\n }\n }\n };\n var load = function (name, addOnUrl, success, scope, failure) {\n if (urls[name]) {\n return;\n }\n var urlString = typeof addOnUrl === 'string' ? addOnUrl : addOnUrl.prefix + addOnUrl.resource + addOnUrl.suffix;\n if (urlString.indexOf('/') !== 0 && urlString.indexOf('://') === -1) {\n urlString = AddOnManager.baseURL + '/' + urlString;\n }\n urls[name] = urlString.substring(0, urlString.lastIndexOf('/'));\n if (lookup[name]) {\n loadDependencies(name, addOnUrl, success, scope);\n } else {\n ScriptLoader.ScriptLoader.add(urlString, function () {\n return loadDependencies(name, addOnUrl, success, scope);\n }, scope, failure);\n }\n };\n var waitFor = function (name, callback) {\n if (lookup.hasOwnProperty(name)) {\n callback();\n } else {\n _listeners.push({\n name: name,\n callback: callback\n });\n }\n };\n return {\n items: items,\n urls: urls,\n lookup: lookup,\n _listeners: _listeners,\n get: get,\n dependencies: dependencies,\n requireLangPack: requireLangPack,\n add: add,\n remove: remove,\n createUrl: createUrl,\n addComponents: addComponents,\n load: load,\n waitFor: waitFor\n };\n }\n (function (AddOnManager) {\n AddOnManager.PluginManager = AddOnManager();\n AddOnManager.ThemeManager = AddOnManager();\n }(AddOnManager || (AddOnManager = {})));\n\n var before = function (marker, element) {\n var parent$1 = parent(marker);\n parent$1.each(function (v) {\n v.dom().insertBefore(element.dom(), marker.dom());\n });\n };\n var after = function (marker, element) {\n var sibling = nextSibling(marker);\n sibling.fold(function () {\n var parent$1 = parent(marker);\n parent$1.each(function (v) {\n append(v, element);\n });\n }, function (v) {\n before(v, element);\n });\n };\n var prepend = function (parent, element) {\n var firstChild$1 = firstChild(parent);\n firstChild$1.fold(function () {\n append(parent, element);\n }, function (v) {\n parent.dom().insertBefore(element.dom(), v.dom());\n });\n };\n var append = function (parent, element) {\n parent.dom().appendChild(element.dom());\n };\n var wrap$1 = function (element, wrapper) {\n before(element, wrapper);\n append(wrapper, element);\n };\n\n var before$1 = function (marker, elements) {\n each(elements, function (x) {\n before(marker, x);\n });\n };\n var append$1 = function (parent, elements) {\n each(elements, function (x) {\n append(parent, x);\n });\n };\n\n var empty = function (element) {\n element.dom().textContent = '';\n each(children(element), function (rogue) {\n remove$1(rogue);\n });\n };\n var remove$1 = function (element) {\n var dom = element.dom();\n if (dom.parentNode !== null) {\n dom.parentNode.removeChild(dom);\n }\n };\n var unwrap = function (wrapper) {\n var children$1 = children(wrapper);\n if (children$1.length > 0) {\n before$1(wrapper, children$1);\n }\n remove$1(wrapper);\n };\n\n var first = function (fn, rate) {\n var timer = null;\n var cancel = function () {\n if (timer !== null) {\n domGlobals.clearTimeout(timer);\n timer = null;\n }\n };\n var throttle = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (timer === null) {\n timer = domGlobals.setTimeout(function () {\n fn.apply(null, args);\n timer = null;\n }, rate);\n }\n };\n return {\n cancel: cancel,\n throttle: throttle\n };\n };\n var last$2 = function (fn, rate) {\n var timer = null;\n var cancel = function () {\n if (timer !== null) {\n domGlobals.clearTimeout(timer);\n timer = null;\n }\n };\n var throttle = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (timer !== null) {\n domGlobals.clearTimeout(timer);\n }\n timer = domGlobals.setTimeout(function () {\n fn.apply(null, args);\n timer = null;\n }, rate);\n };\n return {\n cancel: cancel,\n throttle: throttle\n };\n };\n\n var Cell = function (initial) {\n var value = initial;\n var get = function () {\n return value;\n };\n var set = function (v) {\n value = v;\n };\n var clone = function () {\n return Cell(get());\n };\n return {\n get: get,\n set: set,\n clone: clone\n };\n };\n\n var read = function (element, attr) {\n var value = get(element, attr);\n return value === undefined || value === '' ? [] : value.split(' ');\n };\n var add = function (element, attr, id) {\n var old = read(element, attr);\n var nu = old.concat([id]);\n set(element, attr, nu.join(' '));\n return true;\n };\n var remove$2 = function (element, attr, id) {\n var nu = filter(read(element, attr), function (v) {\n return v !== id;\n });\n if (nu.length > 0) {\n set(element, attr, nu.join(' '));\n } else {\n remove(element, attr);\n }\n return false;\n };\n\n var supports = function (element) {\n return element.dom().classList !== undefined;\n };\n var get$2 = function (element) {\n return read(element, 'class');\n };\n var add$1 = function (element, clazz) {\n return add(element, 'class', clazz);\n };\n var remove$3 = function (element, clazz) {\n return remove$2(element, 'class', clazz);\n };\n\n var add$2 = function (element, clazz) {\n if (supports(element)) {\n element.dom().classList.add(clazz);\n } else {\n add$1(element, clazz);\n }\n };\n var cleanClass = function (element) {\n var classList = supports(element) ? element.dom().classList : get$2(element);\n if (classList.length === 0) {\n remove(element, 'class');\n }\n };\n var remove$4 = function (element, clazz) {\n if (supports(element)) {\n var classList = element.dom().classList;\n classList.remove(clazz);\n } else {\n remove$3(element, clazz);\n }\n cleanClass(element);\n };\n var has$2 = function (element, clazz) {\n return supports(element) && element.dom().classList.contains(clazz);\n };\n\n var descendants = function (scope, predicate) {\n var result = [];\n each(children(scope), function (x) {\n if (predicate(x)) {\n result = result.concat([x]);\n }\n result = result.concat(descendants(x, predicate));\n });\n return result;\n };\n\n var descendants$1 = function (scope, selector) {\n return all(selector, scope);\n };\n\n function ClosestOrAncestor (is, ancestor, scope, a, isRoot) {\n return is(scope, a) ? Option.some(scope) : isFunction(isRoot) && isRoot(scope) ? Option.none() : ancestor(scope, a, isRoot);\n }\n\n var ancestor = function (scope, predicate, isRoot) {\n var element = scope.dom();\n var stop = isFunction(isRoot) ? isRoot : constant(false);\n while (element.parentNode) {\n element = element.parentNode;\n var el = Element.fromDom(element);\n if (predicate(el)) {\n return Option.some(el);\n } else if (stop(el)) {\n break;\n }\n }\n return Option.none();\n };\n var closest = function (scope, predicate, isRoot) {\n var is = function (s, test) {\n return test(s);\n };\n return ClosestOrAncestor(is, ancestor, scope, predicate, isRoot);\n };\n\n var ancestor$1 = function (scope, selector, isRoot) {\n return ancestor(scope, function (e) {\n return is$1(e, selector);\n }, isRoot);\n };\n var descendant = function (scope, selector) {\n return one(selector, scope);\n };\n var closest$1 = function (scope, selector, isRoot) {\n return ClosestOrAncestor(is$1, ancestor$1, scope, selector, isRoot);\n };\n\n var annotation = constant('mce-annotation');\n var dataAnnotation = constant('data-mce-annotation');\n var dataAnnotationId = constant('data-mce-annotation-uid');\n\n var identify = function (editor, annotationName) {\n var rng = editor.selection.getRng();\n var start = Element.fromDom(rng.startContainer);\n var root = Element.fromDom(editor.getBody());\n var selector = annotationName.fold(function () {\n return '.' + annotation();\n }, function (an) {\n return '[' + dataAnnotation() + '=\"' + an + '\"]';\n });\n var newStart = child(start, rng.startOffset).getOr(start);\n var closest = closest$1(newStart, selector, function (n) {\n return eq(n, root);\n });\n var getAttr = function (c, property) {\n if (has$1(c, property)) {\n return Option.some(get(c, property));\n } else {\n return Option.none();\n }\n };\n return closest.bind(function (c) {\n return getAttr(c, '' + dataAnnotationId()).bind(function (uid) {\n return getAttr(c, '' + dataAnnotation()).map(function (name) {\n var elements = findMarkers(editor, uid);\n return {\n uid: uid,\n name: name,\n elements: elements\n };\n });\n });\n });\n };\n var isAnnotation = function (elem) {\n return isElement(elem) && has$2(elem, annotation());\n };\n var findMarkers = function (editor, uid) {\n var body = Element.fromDom(editor.getBody());\n return descendants$1(body, '[' + dataAnnotationId() + '=\"' + uid + '\"]');\n };\n var findAll = function (editor, name) {\n var body = Element.fromDom(editor.getBody());\n var markers = descendants$1(body, '[' + dataAnnotation() + '=\"' + name + '\"]');\n var directory = {};\n each(markers, function (m) {\n var uid = get(m, dataAnnotationId());\n var nodesAlready = directory.hasOwnProperty(uid) ? directory[uid] : [];\n directory[uid] = nodesAlready.concat([m]);\n });\n return directory;\n };\n\n var setup = function (editor, registry) {\n var changeCallbacks = Cell({});\n var initData = function () {\n return {\n listeners: [],\n previous: Cell(Option.none())\n };\n };\n var withCallbacks = function (name, f) {\n updateCallbacks(name, function (data) {\n f(data);\n return data;\n });\n };\n var updateCallbacks = function (name, f) {\n var callbackMap = changeCallbacks.get();\n var data = callbackMap.hasOwnProperty(name) ? callbackMap[name] : initData();\n var outputData = f(data);\n callbackMap[name] = outputData;\n changeCallbacks.set(callbackMap);\n };\n var fireCallbacks = function (name, uid, elements) {\n withCallbacks(name, function (data) {\n each(data.listeners, function (f) {\n return f(true, name, {\n uid: uid,\n nodes: map(elements, function (elem) {\n return elem.dom();\n })\n });\n });\n });\n };\n var fireNoAnnotation = function (name) {\n withCallbacks(name, function (data) {\n each(data.listeners, function (f) {\n return f(false, name);\n });\n });\n };\n var onNodeChange = last$2(function () {\n var callbackMap = changeCallbacks.get();\n var annotations = sort(keys(callbackMap));\n each(annotations, function (name) {\n updateCallbacks(name, function (data) {\n var prev = data.previous.get();\n identify(editor, Option.some(name)).fold(function () {\n if (prev.isSome()) {\n fireNoAnnotation(name);\n data.previous.set(Option.none());\n }\n }, function (_a) {\n var uid = _a.uid, name = _a.name, elements = _a.elements;\n if (!prev.is(uid)) {\n fireCallbacks(name, uid, elements);\n data.previous.set(Option.some(uid));\n }\n });\n return {\n previous: data.previous,\n listeners: data.listeners\n };\n });\n });\n }, 30);\n editor.on('remove', function () {\n onNodeChange.cancel();\n });\n editor.on('nodeChange', function () {\n onNodeChange.throttle();\n });\n var addListener = function (name, f) {\n updateCallbacks(name, function (data) {\n return {\n previous: data.previous,\n listeners: data.listeners.concat([f])\n };\n });\n };\n return { addListener: addListener };\n };\n\n var setup$1 = function (editor, registry) {\n var identifyParserNode = function (span) {\n var optAnnotation = Option.from(span.attributes.map[dataAnnotation()]);\n return optAnnotation.bind(registry.lookup);\n };\n editor.on('init', function () {\n editor.serializer.addNodeFilter('span', function (spans) {\n each(spans, function (span) {\n identifyParserNode(span).each(function (settings) {\n if (settings.persistent === false) {\n span.unwrap();\n }\n });\n });\n });\n });\n };\n\n var create$1 = function () {\n var annotations = {};\n var register = function (name, settings) {\n annotations[name] = {\n name: name,\n settings: settings\n };\n };\n var lookup = function (name) {\n return annotations.hasOwnProperty(name) ? Option.from(annotations[name]).map(function (a) {\n return a.settings;\n }) : Option.none();\n };\n return {\n register: register,\n lookup: lookup\n };\n };\n\n var __assign = function () {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s)\n if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n };\n function __rest(s, e) {\n var t = {};\n for (var p in s)\n if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === 'function')\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n }\n function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++)\n s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n }\n\n var unique = 0;\n var generate = function (prefix) {\n var date = new Date();\n var time = date.getTime();\n var random = Math.floor(Math.random() * 1000000000);\n unique++;\n return prefix + '_' + random + unique + String(time);\n };\n\n var add$3 = function (element, classes) {\n each(classes, function (x) {\n add$2(element, x);\n });\n };\n\n var clone = function (original, isDeep) {\n return Element.fromDom(original.dom().cloneNode(isDeep));\n };\n var shallow = function (original) {\n return clone(original, false);\n };\n var deep = function (original) {\n return clone(original, true);\n };\n\n var fromHtml$1 = function (html, scope) {\n var doc = scope || domGlobals.document;\n var div = doc.createElement('div');\n div.innerHTML = html;\n return children(Element.fromDom(div));\n };\n\n var get$3 = function (element) {\n return element.dom().innerHTML;\n };\n var set$1 = function (element, content) {\n var owner$1 = owner(element);\n var docDom = owner$1.dom();\n var fragment = Element.fromDom(docDom.createDocumentFragment());\n var contentElements = fromHtml$1(content, docDom);\n append$1(fragment, contentElements);\n empty(element);\n append(element, fragment);\n };\n\n var ZWSP = '\\uFEFF';\n var isZwsp = function (chr) {\n return chr === ZWSP;\n };\n var trim$3 = function (text) {\n return text.replace(new RegExp(ZWSP, 'g'), '');\n };\n var Zwsp = {\n isZwsp: isZwsp,\n ZWSP: ZWSP,\n trim: trim$3\n };\n\n var isElement$2 = NodeType.isElement;\n var isText$2 = NodeType.isText;\n var isCaretContainerBlock = function (node) {\n if (isText$2(node)) {\n node = node.parentNode;\n }\n return isElement$2(node) && node.hasAttribute('data-mce-caret');\n };\n var isCaretContainerInline = function (node) {\n return isText$2(node) && Zwsp.isZwsp(node.data);\n };\n var isCaretContainer = function (node) {\n return isCaretContainerBlock(node) || isCaretContainerInline(node);\n };\n var hasContent = function (node) {\n return node.firstChild !== node.lastChild || !NodeType.isBr(node.firstChild);\n };\n var insertInline = function (node, before) {\n var doc, sibling, textNode, parentNode;\n doc = node.ownerDocument;\n textNode = doc.createTextNode(Zwsp.ZWSP);\n parentNode = node.parentNode;\n if (!before) {\n sibling = node.nextSibling;\n if (isText$2(sibling)) {\n if (isCaretContainer(sibling)) {\n return sibling;\n }\n if (startsWithCaretContainer(sibling)) {\n sibling.splitText(1);\n return sibling;\n }\n }\n if (node.nextSibling) {\n parentNode.insertBefore(textNode, node.nextSibling);\n } else {\n parentNode.appendChild(textNode);\n }\n } else {\n sibling = node.previousSibling;\n if (isText$2(sibling)) {\n if (isCaretContainer(sibling)) {\n return sibling;\n }\n if (endsWithCaretContainer(sibling)) {\n return sibling.splitText(sibling.data.length - 1);\n }\n }\n parentNode.insertBefore(textNode, node);\n }\n return textNode;\n };\n var isBeforeInline = function (pos) {\n var container = pos.container();\n if (!pos || !NodeType.isText(container)) {\n return false;\n }\n return container.data.charAt(pos.offset()) === Zwsp.ZWSP || pos.isAtStart() && isCaretContainerInline(container.previousSibling);\n };\n var isAfterInline = function (pos) {\n var container = pos.container();\n if (!pos || !NodeType.isText(container)) {\n return false;\n }\n return container.data.charAt(pos.offset() - 1) === Zwsp.ZWSP || pos.isAtEnd() && isCaretContainerInline(container.nextSibling);\n };\n var createBogusBr = function () {\n var br = domGlobals.document.createElement('br');\n br.setAttribute('data-mce-bogus', '1');\n return br;\n };\n var insertBlock = function (blockName, node, before) {\n var doc, blockNode, parentNode;\n doc = node.ownerDocument;\n blockNode = doc.createElement(blockName);\n blockNode.setAttribute('data-mce-caret', before ? 'before' : 'after');\n blockNode.setAttribute('data-mce-bogus', 'all');\n blockNode.appendChild(createBogusBr());\n parentNode = node.parentNode;\n if (!before) {\n if (node.nextSibling) {\n parentNode.insertBefore(blockNode, node.nextSibling);\n } else {\n parentNode.appendChild(blockNode);\n }\n } else {\n parentNode.insertBefore(blockNode, node);\n }\n return blockNode;\n };\n var startsWithCaretContainer = function (node) {\n return isText$2(node) && node.data[0] === Zwsp.ZWSP;\n };\n var endsWithCaretContainer = function (node) {\n return isText$2(node) && node.data[node.data.length - 1] === Zwsp.ZWSP;\n };\n var trimBogusBr = function (elm) {\n var brs = elm.getElementsByTagName('br');\n var lastBr = brs[brs.length - 1];\n if (NodeType.isBogus(lastBr)) {\n lastBr.parentNode.removeChild(lastBr);\n }\n };\n var showCaretContainerBlock = function (caretContainer) {\n if (caretContainer && caretContainer.hasAttribute('data-mce-caret')) {\n trimBogusBr(caretContainer);\n caretContainer.removeAttribute('data-mce-caret');\n caretContainer.removeAttribute('data-mce-bogus');\n caretContainer.removeAttribute('style');\n caretContainer.removeAttribute('_moz_abspos');\n return caretContainer;\n }\n return null;\n };\n var isRangeInCaretContainerBlock = function (range) {\n return isCaretContainerBlock(range.startContainer);\n };\n\n var isContentEditableTrue$1 = NodeType.isContentEditableTrue;\n var isContentEditableFalse$1 = NodeType.isContentEditableFalse;\n var isBr$2 = NodeType.isBr;\n var isText$3 = NodeType.isText;\n var isInvalidTextElement = NodeType.matchNodeNames('script style textarea');\n var isAtomicInline = NodeType.matchNodeNames('img input textarea hr iframe video audio object');\n var isTable$1 = NodeType.matchNodeNames('table');\n var isCaretContainer$1 = isCaretContainer;\n var isCaretCandidate = function (node) {\n if (isCaretContainer$1(node)) {\n return false;\n }\n if (isText$3(node)) {\n if (isInvalidTextElement(node.parentNode)) {\n return false;\n }\n return true;\n }\n return isAtomicInline(node) || isBr$2(node) || isTable$1(node) || isNonUiContentEditableFalse(node);\n };\n var isUnselectable = function (node) {\n return NodeType.isElement(node) && node.getAttribute('unselectable') === 'true';\n };\n var isNonUiContentEditableFalse = function (node) {\n return isUnselectable(node) === false && isContentEditableFalse$1(node);\n };\n var isInEditable = function (node, root) {\n for (node = node.parentNode; node && node !== root; node = node.parentNode) {\n if (isNonUiContentEditableFalse(node)) {\n return false;\n }\n if (isContentEditableTrue$1(node)) {\n return true;\n }\n }\n return true;\n };\n var isAtomicContentEditableFalse = function (node) {\n if (!isNonUiContentEditableFalse(node)) {\n return false;\n }\n return foldl(from$1(node.getElementsByTagName('*')), function (result, elm) {\n return result || isContentEditableTrue$1(elm);\n }, false) !== true;\n };\n var isAtomic = function (node) {\n return isAtomicInline(node) || isAtomicContentEditableFalse(node);\n };\n var isEditableCaretCandidate = function (node, root) {\n return isCaretCandidate(node) && isInEditable(node, root);\n };\n\n var round = Math.round;\n var clone$1 = function (rect) {\n if (!rect) {\n return {\n left: 0,\n top: 0,\n bottom: 0,\n right: 0,\n width: 0,\n height: 0\n };\n }\n return {\n left: round(rect.left),\n top: round(rect.top),\n bottom: round(rect.bottom),\n right: round(rect.right),\n width: round(rect.width),\n height: round(rect.height)\n };\n };\n var collapse = function (rect, toStart) {\n rect = clone$1(rect);\n if (toStart) {\n rect.right = rect.left;\n } else {\n rect.left = rect.left + rect.width;\n rect.right = rect.left;\n }\n rect.width = 0;\n return rect;\n };\n var isEqual = function (rect1, rect2) {\n return rect1.left === rect2.left && rect1.top === rect2.top && rect1.bottom === rect2.bottom && rect1.right === rect2.right;\n };\n var isValidOverflow = function (overflowY, rect1, rect2) {\n return overflowY >= 0 && overflowY <= Math.min(rect1.height, rect2.height) / 2;\n };\n var isAbove = function (rect1, rect2) {\n var halfHeight = Math.min(rect2.height / 2, rect1.height / 2);\n if (rect1.bottom - halfHeight < rect2.top) {\n return true;\n }\n if (rect1.top > rect2.bottom) {\n return false;\n }\n return isValidOverflow(rect2.top - rect1.bottom, rect1, rect2);\n };\n var isBelow = function (rect1, rect2) {\n if (rect1.top > rect2.bottom) {\n return true;\n }\n if (rect1.bottom < rect2.top) {\n return false;\n }\n return isValidOverflow(rect2.bottom - rect1.top, rect1, rect2);\n };\n var containsXY = function (rect, clientX, clientY) {\n return clientX >= rect.left && clientX <= rect.right && clientY >= rect.top && clientY <= rect.bottom;\n };\n var overflowX = function (outer, inner) {\n if (inner.left > outer.left && inner.right < outer.right) {\n return 0;\n } else {\n return inner.left < outer.left ? inner.left - outer.left : inner.right - outer.right;\n }\n };\n var overflowY = function (outer, inner) {\n if (inner.top > outer.top && inner.bottom < outer.bottom) {\n return 0;\n } else {\n return inner.top < outer.top ? inner.top - outer.top : inner.bottom - outer.bottom;\n }\n };\n var getOverflow = function (outer, inner) {\n return {\n x: overflowX(outer, inner),\n y: overflowY(outer, inner)\n };\n };\n\n var getSelectedNode = function (range) {\n var startContainer = range.startContainer, startOffset = range.startOffset;\n if (startContainer.hasChildNodes() && range.endOffset === startOffset + 1) {\n return startContainer.childNodes[startOffset];\n }\n return null;\n };\n var getNode = function (container, offset) {\n if (container.nodeType === 1 && container.hasChildNodes()) {\n if (offset >= container.childNodes.length) {\n offset = container.childNodes.length - 1;\n }\n container = container.childNodes[offset];\n }\n return container;\n };\n\n var extendingChars = new RegExp('[\\u0300-\\u036f\\u0483-\\u0487\\u0488-\\u0489\\u0591-\\u05bd\\u05bf\\u05c1-\\u05c2\\u05c4-\\u05c5\\u05c7\\u0610-\\u061a' + '\\u064b-\\u065f\\u0670\\u06d6-\\u06dc\\u06df-\\u06e4\\u06e7-\\u06e8\\u06ea-\\u06ed\\u0711\\u0730-\\u074a\\u07a6-\\u07b0' + '\\u07eb-\\u07f3\\u0816-\\u0819\\u081b-\\u0823\\u0825-\\u0827\\u0829-\\u082d\\u0859-\\u085b\\u08e3-\\u0902\\u093a\\u093c' + '\\u0941-\\u0948\\u094d\\u0951-\\u0957\\u0962-\\u0963\\u0981\\u09bc\\u09be\\u09c1-\\u09c4\\u09cd\\u09d7\\u09e2-\\u09e3' + '\\u0a01-\\u0a02\\u0a3c\\u0a41-\\u0a42\\u0a47-\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a70-\\u0a71\\u0a75\\u0a81-\\u0a82\\u0abc' + '\\u0ac1-\\u0ac5\\u0ac7-\\u0ac8\\u0acd\\u0ae2-\\u0ae3\\u0b01\\u0b3c\\u0b3e\\u0b3f\\u0b41-\\u0b44\\u0b4d\\u0b56\\u0b57' + '\\u0b62-\\u0b63\\u0b82\\u0bbe\\u0bc0\\u0bcd\\u0bd7\\u0c00\\u0c3e-\\u0c40\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55-\\u0c56' + '\\u0c62-\\u0c63\\u0c81\\u0cbc\\u0cbf\\u0cc2\\u0cc6\\u0ccc-\\u0ccd\\u0cd5-\\u0cd6\\u0ce2-\\u0ce3\\u0d01\\u0d3e\\u0d41-\\u0d44' + '\\u0d4d\\u0d57\\u0d62-\\u0d63\\u0dca\\u0dcf\\u0dd2-\\u0dd4\\u0dd6\\u0ddf\\u0e31\\u0e34-\\u0e3a\\u0e47-\\u0e4e\\u0eb1\\u0eb4-\\u0eb9' + '\\u0ebb-\\u0ebc\\u0ec8-\\u0ecd\\u0f18-\\u0f19\\u0f35\\u0f37\\u0f39\\u0f71-\\u0f7e\\u0f80-\\u0f84\\u0f86-\\u0f87\\u0f8d-\\u0f97' + '\\u0f99-\\u0fbc\\u0fc6\\u102d-\\u1030\\u1032-\\u1037\\u1039-\\u103a\\u103d-\\u103e\\u1058-\\u1059\\u105e-\\u1060\\u1071-\\u1074' + '\\u1082\\u1085-\\u1086\\u108d\\u109d\\u135d-\\u135f\\u1712-\\u1714\\u1732-\\u1734\\u1752-\\u1753\\u1772-\\u1773\\u17b4-\\u17b5' + '\\u17b7-\\u17bd\\u17c6\\u17c9-\\u17d3\\u17dd\\u180b-\\u180d\\u18a9\\u1920-\\u1922\\u1927-\\u1928\\u1932\\u1939-\\u193b\\u1a17-\\u1a18' + '\\u1a1b\\u1a56\\u1a58-\\u1a5e\\u1a60\\u1a62\\u1a65-\\u1a6c\\u1a73-\\u1a7c\\u1a7f\\u1ab0-\\u1abd\\u1ABE\\u1b00-\\u1b03\\u1b34' + '\\u1b36-\\u1b3a\\u1b3c\\u1b42\\u1b6b-\\u1b73\\u1b80-\\u1b81\\u1ba2-\\u1ba5\\u1ba8-\\u1ba9\\u1bab-\\u1bad\\u1be6\\u1be8-\\u1be9' + '\\u1bed\\u1bef-\\u1bf1\\u1c2c-\\u1c33\\u1c36-\\u1c37\\u1cd0-\\u1cd2\\u1cd4-\\u1ce0\\u1ce2-\\u1ce8\\u1ced\\u1cf4\\u1cf8-\\u1cf9' + '\\u1dc0-\\u1df5\\u1dfc-\\u1dff\\u200c-\\u200d\\u20d0-\\u20dc\\u20DD-\\u20E0\\u20e1\\u20E2-\\u20E4\\u20e5-\\u20f0\\u2cef-\\u2cf1' + '\\u2d7f\\u2de0-\\u2dff\\u302a-\\u302d\\u302e-\\u302f\\u3099-\\u309a\\ua66f\\uA670-\\uA672\\ua674-\\ua67d\\ua69e-\\ua69f\\ua6f0-\\ua6f1' + '\\ua802\\ua806\\ua80b\\ua825-\\ua826\\ua8c4\\ua8e0-\\ua8f1\\ua926-\\ua92d\\ua947-\\ua951\\ua980-\\ua982\\ua9b3\\ua9b6-\\ua9b9\\ua9bc' + '\\ua9e5\\uaa29-\\uaa2e\\uaa31-\\uaa32\\uaa35-\\uaa36\\uaa43\\uaa4c\\uaa7c\\uaab0\\uaab2-\\uaab4\\uaab7-\\uaab8\\uaabe-\\uaabf\\uaac1' + '\\uaaec-\\uaaed\\uaaf6\\uabe5\\uabe8\\uabed\\ufb1e\\ufe00-\\ufe0f\\ufe20-\\ufe2f\\uff9e-\\uff9f]');\n var isExtendingChar = function (ch) {\n return typeof ch === 'string' && ch.charCodeAt(0) >= 768 && extendingChars.test(ch);\n };\n\n var lift2 = function (oa, ob, f) {\n return oa.isSome() && ob.isSome() ? Option.some(f(oa.getOrDie(), ob.getOrDie())) : Option.none();\n };\n var lift3 = function (oa, ob, oc, f) {\n return oa.isSome() && ob.isSome() && oc.isSome() ? Option.some(f(oa.getOrDie(), ob.getOrDie(), oc.getOrDie())) : Option.none();\n };\n\n var slice$2 = [].slice;\n var or = function () {\n var x = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n x[_i] = arguments[_i];\n }\n var args = slice$2.call(arguments);\n return function (x) {\n for (var i = 0; i < args.length; i++) {\n if (args[i](x)) {\n return true;\n }\n }\n return false;\n };\n };\n var and = function () {\n var x = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n x[_i] = arguments[_i];\n }\n var args = slice$2.call(arguments);\n return function (x) {\n for (var i = 0; i < args.length; i++) {\n if (!args[i](x)) {\n return false;\n }\n }\n return true;\n };\n };\n var Predicate = {\n and: and,\n or: or\n };\n\n var isElement$3 = NodeType.isElement;\n var isCaretCandidate$1 = isCaretCandidate;\n var isBlock$1 = NodeType.matchStyleValues('display', 'block table');\n var isFloated = NodeType.matchStyleValues('float', 'left right');\n var isValidElementCaretCandidate = Predicate.and(isElement$3, isCaretCandidate$1, not(isFloated));\n var isNotPre = not(NodeType.matchStyleValues('white-space', 'pre pre-line pre-wrap'));\n var isText$4 = NodeType.isText;\n var isBr$3 = NodeType.isBr;\n var nodeIndex = DOMUtils$1.nodeIndex;\n var resolveIndex = getNode;\n var createRange = function (doc) {\n return 'createRange' in doc ? doc.createRange() : DOMUtils$1.DOM.createRng();\n };\n var isWhiteSpace = function (chr) {\n return chr && /[\\r\\n\\t ]/.test(chr);\n };\n var isRange = function (rng) {\n return !!rng.setStart && !!rng.setEnd;\n };\n var isHiddenWhiteSpaceRange = function (range) {\n var container = range.startContainer;\n var offset = range.startOffset;\n var text;\n if (isWhiteSpace(range.toString()) && isNotPre(container.parentNode) && NodeType.isText(container)) {\n text = container.data;\n if (isWhiteSpace(text[offset - 1]) || isWhiteSpace(text[offset + 1])) {\n return true;\n }\n }\n return false;\n };\n var getBrClientRect = function (brNode) {\n var doc = brNode.ownerDocument;\n var rng = createRange(doc);\n var nbsp = doc.createTextNode('\\xA0');\n var parentNode = brNode.parentNode;\n var clientRect;\n parentNode.insertBefore(nbsp, brNode);\n rng.setStart(nbsp, 0);\n rng.setEnd(nbsp, 1);\n clientRect = clone$1(rng.getBoundingClientRect());\n parentNode.removeChild(nbsp);\n return clientRect;\n };\n var getBoundingClientRectWebKitText = function (rng) {\n var sc = rng.startContainer;\n var ec = rng.endContainer;\n var so = rng.startOffset;\n var eo = rng.endOffset;\n if (sc === ec && NodeType.isText(ec) && so === 0 && eo === 1) {\n var newRng = rng.cloneRange();\n newRng.setEndAfter(ec);\n return getBoundingClientRect(newRng);\n } else {\n return null;\n }\n };\n var isZeroRect = function (r) {\n return r.left === 0 && r.right === 0 && r.top === 0 && r.bottom === 0;\n };\n var getBoundingClientRect = function (item) {\n var clientRect, clientRects;\n clientRects = item.getClientRects();\n if (clientRects.length > 0) {\n clientRect = clone$1(clientRects[0]);\n } else {\n clientRect = clone$1(item.getBoundingClientRect());\n }\n if (!isRange(item) && isBr$3(item) && isZeroRect(clientRect)) {\n return getBrClientRect(item);\n }\n if (isZeroRect(clientRect) && isRange(item)) {\n return getBoundingClientRectWebKitText(item);\n }\n return clientRect;\n };\n var collapseAndInflateWidth = function (clientRect, toStart) {\n var newClientRect = collapse(clientRect, toStart);\n newClientRect.width = 1;\n newClientRect.right = newClientRect.left + 1;\n return newClientRect;\n };\n var getCaretPositionClientRects = function (caretPosition) {\n var clientRects = [];\n var beforeNode, node;\n var addUniqueAndValidRect = function (clientRect) {\n if (clientRect.height === 0) {\n return;\n }\n if (clientRects.length > 0) {\n if (isEqual(clientRect, clientRects[clientRects.length - 1])) {\n return;\n }\n }\n clientRects.push(clientRect);\n };\n var addCharacterOffset = function (container, offset) {\n var range = createRange(container.ownerDocument);\n if (offset < container.data.length) {\n if (isExtendingChar(container.data[offset])) {\n return clientRects;\n }\n if (isExtendingChar(container.data[offset - 1])) {\n range.setStart(container, offset);\n range.setEnd(container, offset + 1);\n if (!isHiddenWhiteSpaceRange(range)) {\n addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect(range), false));\n return clientRects;\n }\n }\n }\n if (offset > 0) {\n range.setStart(container, offset - 1);\n range.setEnd(container, offset);\n if (!isHiddenWhiteSpaceRange(range)) {\n addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect(range), false));\n }\n }\n if (offset < container.data.length) {\n range.setStart(container, offset);\n range.setEnd(container, offset + 1);\n if (!isHiddenWhiteSpaceRange(range)) {\n addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect(range), true));\n }\n }\n };\n if (isText$4(caretPosition.container())) {\n addCharacterOffset(caretPosition.container(), caretPosition.offset());\n return clientRects;\n }\n if (isElement$3(caretPosition.container())) {\n if (caretPosition.isAtEnd()) {\n node = resolveIndex(caretPosition.container(), caretPosition.offset());\n if (isText$4(node)) {\n addCharacterOffset(node, node.data.length);\n }\n if (isValidElementCaretCandidate(node) && !isBr$3(node)) {\n addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect(node), false));\n }\n } else {\n node = resolveIndex(caretPosition.container(), caretPosition.offset());\n if (isText$4(node)) {\n addCharacterOffset(node, 0);\n }\n if (isValidElementCaretCandidate(node) && caretPosition.isAtEnd()) {\n addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect(node), false));\n return clientRects;\n }\n beforeNode = resolveIndex(caretPosition.container(), caretPosition.offset() - 1);\n if (isValidElementCaretCandidate(beforeNode) && !isBr$3(beforeNode)) {\n if (isBlock$1(beforeNode) || isBlock$1(node) || !isValidElementCaretCandidate(node)) {\n addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect(beforeNode), false));\n }\n }\n if (isValidElementCaretCandidate(node)) {\n addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect(node), true));\n }\n }\n }\n return clientRects;\n };\n function CaretPosition(container, offset, clientRects) {\n var isAtStart = function () {\n if (isText$4(container)) {\n return offset === 0;\n }\n return offset === 0;\n };\n var isAtEnd = function () {\n if (isText$4(container)) {\n return offset >= container.data.length;\n }\n return offset >= container.childNodes.length;\n };\n var toRange = function () {\n var range;\n range = createRange(container.ownerDocument);\n range.setStart(container, offset);\n range.setEnd(container, offset);\n return range;\n };\n var getClientRects = function () {\n if (!clientRects) {\n clientRects = getCaretPositionClientRects(CaretPosition(container, offset));\n }\n return clientRects;\n };\n var isVisible = function () {\n return getClientRects().length > 0;\n };\n var isEqual = function (caretPosition) {\n return caretPosition && container === caretPosition.container() && offset === caretPosition.offset();\n };\n var getNode = function (before) {\n return resolveIndex(container, before ? offset - 1 : offset);\n };\n return {\n container: constant(container),\n offset: constant(offset),\n toRange: toRange,\n getClientRects: getClientRects,\n isVisible: isVisible,\n isAtStart: isAtStart,\n isAtEnd: isAtEnd,\n isEqual: isEqual,\n getNode: getNode\n };\n }\n (function (CaretPosition) {\n CaretPosition.fromRangeStart = function (range) {\n return CaretPosition(range.startContainer, range.startOffset);\n };\n CaretPosition.fromRangeEnd = function (range) {\n return CaretPosition(range.endContainer, range.endOffset);\n };\n CaretPosition.after = function (node) {\n return CaretPosition(node.parentNode, nodeIndex(node) + 1);\n };\n CaretPosition.before = function (node) {\n return CaretPosition(node.parentNode, nodeIndex(node));\n };\n CaretPosition.isAbove = function (pos1, pos2) {\n return lift2(head(pos2.getClientRects()), last(pos1.getClientRects()), isAbove).getOr(false);\n };\n CaretPosition.isBelow = function (pos1, pos2) {\n return lift2(last(pos2.getClientRects()), head(pos1.getClientRects()), isBelow).getOr(false);\n };\n CaretPosition.isAtStart = function (pos) {\n return pos ? pos.isAtStart() : false;\n };\n CaretPosition.isAtEnd = function (pos) {\n return pos ? pos.isAtEnd() : false;\n };\n CaretPosition.isTextPosition = function (pos) {\n return pos ? NodeType.isText(pos.container()) : false;\n };\n CaretPosition.isElementPosition = function (pos) {\n return CaretPosition.isTextPosition(pos) === false;\n };\n }(CaretPosition || (CaretPosition = {})));\n var CaretPosition$1 = CaretPosition;\n\n var isText$5 = NodeType.isText;\n var isBogus$1 = NodeType.isBogus;\n var nodeIndex$1 = DOMUtils$1.nodeIndex;\n var normalizedParent = function (node) {\n var parentNode = node.parentNode;\n if (isBogus$1(parentNode)) {\n return normalizedParent(parentNode);\n }\n return parentNode;\n };\n var getChildNodes = function (node) {\n if (!node) {\n return [];\n }\n return ArrUtils.reduce(node.childNodes, function (result, node) {\n if (isBogus$1(node) && node.nodeName !== 'BR') {\n result = result.concat(getChildNodes(node));\n } else {\n result.push(node);\n }\n return result;\n }, []);\n };\n var normalizedTextOffset = function (node, offset) {\n while (node = node.previousSibling) {\n if (!isText$5(node)) {\n break;\n }\n offset += node.data.length;\n }\n return offset;\n };\n var equal = function (a) {\n return function (b) {\n return a === b;\n };\n };\n var normalizedNodeIndex = function (node) {\n var nodes, index, numTextFragments;\n nodes = getChildNodes(normalizedParent(node));\n index = ArrUtils.findIndex(nodes, equal(node), node);\n nodes = nodes.slice(0, index + 1);\n numTextFragments = ArrUtils.reduce(nodes, function (result, node, i) {\n if (isText$5(node) && isText$5(nodes[i - 1])) {\n result++;\n }\n return result;\n }, 0);\n nodes = ArrUtils.filter(nodes, NodeType.matchNodeNames(node.nodeName));\n index = ArrUtils.findIndex(nodes, equal(node), node);\n return index - numTextFragments;\n };\n var createPathItem = function (node) {\n var name;\n if (isText$5(node)) {\n name = 'text()';\n } else {\n name = node.nodeName.toLowerCase();\n }\n return name + '[' + normalizedNodeIndex(node) + ']';\n };\n var parentsUntil = function (root, node, predicate) {\n var parents = [];\n for (node = node.parentNode; node !== root; node = node.parentNode) {\n if (predicate && predicate(node)) {\n break;\n }\n parents.push(node);\n }\n return parents;\n };\n var create$2 = function (root, caretPosition) {\n var container, offset, path = [], outputOffset, childNodes, parents;\n container = caretPosition.container();\n offset = caretPosition.offset();\n if (isText$5(container)) {\n outputOffset = normalizedTextOffset(container, offset);\n } else {\n childNodes = container.childNodes;\n if (offset >= childNodes.length) {\n outputOffset = 'after';\n offset = childNodes.length - 1;\n } else {\n outputOffset = 'before';\n }\n container = childNodes[offset];\n }\n path.push(createPathItem(container));\n parents = parentsUntil(root, container);\n parents = ArrUtils.filter(parents, not(NodeType.isBogus));\n path = path.concat(ArrUtils.map(parents, function (node) {\n return createPathItem(node);\n }));\n return path.reverse().join('/') + ',' + outputOffset;\n };\n var resolvePathItem = function (node, name, index) {\n var nodes = getChildNodes(node);\n nodes = ArrUtils.filter(nodes, function (node, index) {\n return !isText$5(node) || !isText$5(nodes[index - 1]);\n });\n nodes = ArrUtils.filter(nodes, NodeType.matchNodeNames(name));\n return nodes[index];\n };\n var findTextPosition = function (container, offset) {\n var node = container, targetOffset = 0, dataLen;\n while (isText$5(node)) {\n dataLen = node.data.length;\n if (offset >= targetOffset && offset <= targetOffset + dataLen) {\n container = node;\n offset = offset - targetOffset;\n break;\n }\n if (!isText$5(node.nextSibling)) {\n container = node;\n offset = dataLen;\n break;\n }\n targetOffset += dataLen;\n node = node.nextSibling;\n }\n if (isText$5(container) && offset > container.data.length) {\n offset = container.data.length;\n }\n return CaretPosition$1(container, offset);\n };\n var resolve$2 = function (root, path) {\n var parts, container, offset;\n if (!path) {\n return null;\n }\n parts = path.split(',');\n path = parts[0].split('/');\n offset = parts.length > 1 ? parts[1] : 'before';\n container = ArrUtils.reduce(path, function (result, value) {\n value = /([\\w\\-\\(\\)]+)\\[([0-9]+)\\]/.exec(value);\n if (!value) {\n return null;\n }\n if (value[1] === 'text()') {\n value[1] = '#text';\n }\n return resolvePathItem(result, value[1], parseInt(value[2], 10));\n }, root);\n if (!container) {\n return null;\n }\n if (!isText$5(container)) {\n if (offset === 'after') {\n offset = nodeIndex$1(container) + 1;\n } else {\n offset = nodeIndex$1(container);\n }\n return CaretPosition$1(container.parentNode, offset);\n }\n return findTextPosition(container, parseInt(offset, 10));\n };\n\n var trimEmptyTextNode = function (dom, node) {\n if (NodeType.isText(node) && node.data.length === 0) {\n dom.remove(node);\n }\n };\n var insertNode = function (dom, rng, node) {\n rng.insertNode(node);\n trimEmptyTextNode(dom, node.previousSibling);\n trimEmptyTextNode(dom, node.nextSibling);\n };\n var insertFragment = function (dom, rng, frag) {\n var firstChild = Option.from(frag.firstChild);\n var lastChild = Option.from(frag.lastChild);\n rng.insertNode(frag);\n firstChild.each(function (child) {\n return trimEmptyTextNode(dom, child.previousSibling);\n });\n lastChild.each(function (child) {\n return trimEmptyTextNode(dom, child.nextSibling);\n });\n };\n var rangeInsertNode = function (dom, rng, node) {\n if (NodeType.isDocumentFragment(node)) {\n insertFragment(dom, rng, node);\n } else {\n insertNode(dom, rng, node);\n }\n };\n\n var isContentEditableFalse$2 = NodeType.isContentEditableFalse;\n var getNormalizedTextOffset = function (trim, container, offset) {\n var node, trimmedOffset;\n trimmedOffset = trim(container.data.slice(0, offset)).length;\n for (node = container.previousSibling; node && NodeType.isText(node); node = node.previousSibling) {\n trimmedOffset += trim(node.data).length;\n }\n return trimmedOffset;\n };\n var getPoint = function (dom, trim, normalized, rng, start) {\n var container = rng[start ? 'startContainer' : 'endContainer'];\n var offset = rng[start ? 'startOffset' : 'endOffset'];\n var point = [];\n var childNodes, after = 0;\n var root = dom.getRoot();\n if (NodeType.isText(container)) {\n point.push(normalized ? getNormalizedTextOffset(trim, container, offset) : offset);\n } else {\n childNodes = container.childNodes;\n if (offset >= childNodes.length && childNodes.length) {\n after = 1;\n offset = Math.max(0, childNodes.length - 1);\n }\n point.push(dom.nodeIndex(childNodes[offset], normalized) + after);\n }\n for (; container && container !== root; container = container.parentNode) {\n point.push(dom.nodeIndex(container, normalized));\n }\n return point;\n };\n var getLocation = function (trim, selection, normalized, rng) {\n var dom = selection.dom, bookmark = {};\n bookmark.start = getPoint(dom, trim, normalized, rng, true);\n if (!selection.isCollapsed()) {\n bookmark.end = getPoint(dom, trim, normalized, rng, false);\n }\n return bookmark;\n };\n var findIndex$2 = function (dom, name, element) {\n var count = 0;\n Tools.each(dom.select(name), function (node) {\n if (node.getAttribute('data-mce-bogus') === 'all') {\n return;\n }\n if (node === element) {\n return false;\n }\n count++;\n });\n return count;\n };\n var moveEndPoint = function (rng, start) {\n var container, offset, childNodes;\n var prefix = start ? 'start' : 'end';\n container = rng[prefix + 'Container'];\n offset = rng[prefix + 'Offset'];\n if (NodeType.isElement(container) && container.nodeName === 'TR') {\n childNodes = container.childNodes;\n container = childNodes[Math.min(start ? offset : offset - 1, childNodes.length - 1)];\n if (container) {\n offset = start ? 0 : container.childNodes.length;\n rng['set' + (start ? 'Start' : 'End')](container, offset);\n }\n }\n };\n var normalizeTableCellSelection = function (rng) {\n moveEndPoint(rng, true);\n moveEndPoint(rng, false);\n return rng;\n };\n var findSibling = function (node, offset) {\n var sibling;\n if (NodeType.isElement(node)) {\n node = getNode(node, offset);\n if (isContentEditableFalse$2(node)) {\n return node;\n }\n }\n if (isCaretContainer(node)) {\n if (NodeType.isText(node) && isCaretContainerBlock(node)) {\n node = node.parentNode;\n }\n sibling = node.previousSibling;\n if (isContentEditableFalse$2(sibling)) {\n return sibling;\n }\n sibling = node.nextSibling;\n if (isContentEditableFalse$2(sibling)) {\n return sibling;\n }\n }\n };\n var findAdjacentContentEditableFalseElm = function (rng) {\n return findSibling(rng.startContainer, rng.startOffset) || findSibling(rng.endContainer, rng.endOffset);\n };\n var getOffsetBookmark = function (trim, normalized, selection) {\n var element = selection.getNode();\n var name = element ? element.nodeName : null;\n var rng = selection.getRng();\n if (isContentEditableFalse$2(element) || name === 'IMG') {\n return {\n name: name,\n index: findIndex$2(selection.dom, name, element)\n };\n }\n var sibling = findAdjacentContentEditableFalseElm(rng);\n if (sibling) {\n name = sibling.tagName;\n return {\n name: name,\n index: findIndex$2(selection.dom, name, sibling)\n };\n }\n return getLocation(trim, selection, normalized, rng);\n };\n var getCaretBookmark = function (selection) {\n var rng = selection.getRng();\n return {\n start: create$2(selection.dom.getRoot(), CaretPosition$1.fromRangeStart(rng)),\n end: create$2(selection.dom.getRoot(), CaretPosition$1.fromRangeEnd(rng))\n };\n };\n var getRangeBookmark = function (selection) {\n return { rng: selection.getRng() };\n };\n var createBookmarkSpan = function (dom, id, filled) {\n var args = {\n 'data-mce-type': 'bookmark',\n 'id': id,\n 'style': 'overflow:hidden;line-height:0px'\n };\n return filled ? dom.create('span', args, '') : dom.create('span', args);\n };\n var getPersistentBookmark = function (selection, filled) {\n var dom = selection.dom;\n var rng = selection.getRng();\n var id = dom.uniqueId();\n var collapsed = selection.isCollapsed();\n var element = selection.getNode();\n var name = element.nodeName;\n if (name === 'IMG') {\n return {\n name: name,\n index: findIndex$2(dom, name, element)\n };\n }\n var rng2 = normalizeTableCellSelection(rng.cloneRange());\n if (!collapsed) {\n rng2.collapse(false);\n var endBookmarkNode = createBookmarkSpan(dom, id + '_end', filled);\n rangeInsertNode(dom, rng2, endBookmarkNode);\n }\n rng = normalizeTableCellSelection(rng);\n rng.collapse(true);\n var startBookmarkNode = createBookmarkSpan(dom, id + '_start', filled);\n rangeInsertNode(dom, rng, startBookmarkNode);\n selection.moveToBookmark({\n id: id,\n keep: 1\n });\n return { id: id };\n };\n var getBookmark = function (selection, type, normalized) {\n if (type === 2) {\n return getOffsetBookmark(Zwsp.trim, normalized, selection);\n } else if (type === 3) {\n return getCaretBookmark(selection);\n } else if (type) {\n return getRangeBookmark(selection);\n } else {\n return getPersistentBookmark(selection, false);\n }\n };\n var GetBookmark = {\n getBookmark: getBookmark,\n getUndoBookmark: curry(getOffsetBookmark, identity, true),\n getPersistentBookmark: getPersistentBookmark\n };\n\n var CARET_ID = '_mce_caret';\n var isCaretNode = function (node) {\n return NodeType.isElement(node) && node.id === CARET_ID;\n };\n var getParentCaretContainer = function (body, node) {\n while (node && node !== body) {\n if (node.id === CARET_ID) {\n return node;\n }\n node = node.parentNode;\n }\n return null;\n };\n\n var isElement$4 = NodeType.isElement;\n var isText$6 = NodeType.isText;\n var removeNode = function (node) {\n var parentNode = node.parentNode;\n if (parentNode) {\n parentNode.removeChild(node);\n }\n };\n var getNodeValue = function (node) {\n try {\n return node.nodeValue;\n } catch (ex) {\n return '';\n }\n };\n var setNodeValue = function (node, text) {\n if (text.length === 0) {\n removeNode(node);\n } else {\n node.nodeValue = text;\n }\n };\n var trimCount = function (text) {\n var trimmedText = Zwsp.trim(text);\n return {\n count: text.length - trimmedText.length,\n text: trimmedText\n };\n };\n var removeUnchanged = function (caretContainer, pos) {\n remove$5(caretContainer);\n return pos;\n };\n var removeTextAndReposition = function (caretContainer, pos) {\n var before = trimCount(caretContainer.data.substr(0, pos.offset()));\n var after = trimCount(caretContainer.data.substr(pos.offset()));\n var text = before.text + after.text;\n if (text.length > 0) {\n setNodeValue(caretContainer, text);\n return CaretPosition$1(caretContainer, pos.offset() - before.count);\n } else {\n return pos;\n }\n };\n var removeElementAndReposition = function (caretContainer, pos) {\n var parentNode = pos.container();\n var newPosition = indexOf(from$1(parentNode.childNodes), caretContainer).map(function (index) {\n return index < pos.offset() ? CaretPosition$1(parentNode, pos.offset() - 1) : pos;\n }).getOr(pos);\n remove$5(caretContainer);\n return newPosition;\n };\n var removeTextCaretContainer = function (caretContainer, pos) {\n return isText$6(caretContainer) && pos.container() === caretContainer ? removeTextAndReposition(caretContainer, pos) : removeUnchanged(caretContainer, pos);\n };\n var removeElementCaretContainer = function (caretContainer, pos) {\n return pos.container() === caretContainer.parentNode ? removeElementAndReposition(caretContainer, pos) : removeUnchanged(caretContainer, pos);\n };\n var removeAndReposition = function (container, pos) {\n return CaretPosition$1.isTextPosition(pos) ? removeTextCaretContainer(container, pos) : removeElementCaretContainer(container, pos);\n };\n var remove$5 = function (caretContainerNode) {\n if (isElement$4(caretContainerNode) && isCaretContainer(caretContainerNode)) {\n if (hasContent(caretContainerNode)) {\n caretContainerNode.removeAttribute('data-mce-caret');\n } else {\n removeNode(caretContainerNode);\n }\n }\n if (isText$6(caretContainerNode)) {\n var text = Zwsp.trim(getNodeValue(caretContainerNode));\n setNodeValue(caretContainerNode, text);\n }\n };\n var CaretContainerRemove = {\n removeAndReposition: removeAndReposition,\n remove: remove$5\n };\n\n var browser$2 = PlatformDetection$1.detect().browser;\n var isContentEditableFalse$3 = NodeType.isContentEditableFalse;\n var isTableCell$1 = function (node) {\n return NodeType.isElement(node) && /^(TD|TH)$/i.test(node.tagName);\n };\n var getAbsoluteClientRect = function (root, element, before) {\n var clientRect = collapse(element.getBoundingClientRect(), before);\n var docElm, scrollX, scrollY, margin, rootRect;\n if (root.tagName === 'BODY') {\n docElm = root.ownerDocument.documentElement;\n scrollX = root.scrollLeft || docElm.scrollLeft;\n scrollY = root.scrollTop || docElm.scrollTop;\n } else {\n rootRect = root.getBoundingClientRect();\n scrollX = root.scrollLeft - rootRect.left;\n scrollY = root.scrollTop - rootRect.top;\n }\n clientRect.left += scrollX;\n clientRect.right += scrollX;\n clientRect.top += scrollY;\n clientRect.bottom += scrollY;\n clientRect.width = 1;\n margin = element.offsetWidth - element.clientWidth;\n if (margin > 0) {\n if (before) {\n margin *= -1;\n }\n clientRect.left += margin;\n clientRect.right += margin;\n }\n return clientRect;\n };\n var trimInlineCaretContainers = function (root) {\n var contentEditableFalseNodes, node, sibling, i, data;\n contentEditableFalseNodes = DomQuery('*[contentEditable=false]', root);\n for (i = 0; i < contentEditableFalseNodes.length; i++) {\n node = contentEditableFalseNodes[i];\n sibling = node.previousSibling;\n if (endsWithCaretContainer(sibling)) {\n data = sibling.data;\n if (data.length === 1) {\n sibling.parentNode.removeChild(sibling);\n } else {\n sibling.deleteData(data.length - 1, 1);\n }\n }\n sibling = node.nextSibling;\n if (startsWithCaretContainer(sibling)) {\n data = sibling.data;\n if (data.length === 1) {\n sibling.parentNode.removeChild(sibling);\n } else {\n sibling.deleteData(0, 1);\n }\n }\n }\n };\n var FakeCaret = function (root, isBlock, hasFocus) {\n var lastVisualCaret = Cell(Option.none());\n var cursorInterval, caretContainerNode;\n var show = function (before, element) {\n var clientRect, rng;\n hide();\n if (isTableCell$1(element)) {\n return null;\n }\n if (isBlock(element)) {\n caretContainerNode = insertBlock('p', element, before);\n clientRect = getAbsoluteClientRect(root, element, before);\n DomQuery(caretContainerNode).css('top', clientRect.top);\n var caret = DomQuery('').css(clientRect).appendTo(root)[0];\n lastVisualCaret.set(Option.some({\n caret: caret,\n element: element,\n before: before\n }));\n lastVisualCaret.get().each(function (caretState) {\n if (before) {\n DomQuery(caretState.caret).addClass('mce-visual-caret-before');\n }\n });\n startBlink();\n rng = element.ownerDocument.createRange();\n rng.setStart(caretContainerNode, 0);\n rng.setEnd(caretContainerNode, 0);\n } else {\n caretContainerNode = insertInline(element, before);\n rng = element.ownerDocument.createRange();\n if (isContentEditableFalse$3(caretContainerNode.nextSibling)) {\n rng.setStart(caretContainerNode, 0);\n rng.setEnd(caretContainerNode, 0);\n } else {\n rng.setStart(caretContainerNode, 1);\n rng.setEnd(caretContainerNode, 1);\n }\n return rng;\n }\n return rng;\n };\n var hide = function () {\n trimInlineCaretContainers(root);\n if (caretContainerNode) {\n CaretContainerRemove.remove(caretContainerNode);\n caretContainerNode = null;\n }\n lastVisualCaret.get().each(function (caretState) {\n DomQuery(caretState.caret).remove();\n lastVisualCaret.set(Option.none());\n });\n clearInterval(cursorInterval);\n };\n var startBlink = function () {\n cursorInterval = Delay.setInterval(function () {\n if (hasFocus()) {\n DomQuery('div.mce-visual-caret', root).toggleClass('mce-visual-caret-hidden');\n } else {\n DomQuery('div.mce-visual-caret', root).addClass('mce-visual-caret-hidden');\n }\n }, 500);\n };\n var reposition = function () {\n lastVisualCaret.get().each(function (caretState) {\n var clientRect = getAbsoluteClientRect(root, caretState.element, caretState.before);\n DomQuery(caretState.caret).css(clientRect);\n });\n };\n var destroy = function () {\n return Delay.clearInterval(cursorInterval);\n };\n var getCss = function () {\n return '.mce-visual-caret {' + 'position: absolute;' + 'background-color: black;' + 'background-color: currentcolor;' + '}' + '.mce-visual-caret-hidden {' + 'display: none;' + '}' + '*[data-mce-caret] {' + 'position: absolute;' + 'left: -1000px;' + 'right: auto;' + 'top: 0;' + 'margin: 0;' + 'padding: 0;' + '}';\n };\n return {\n show: show,\n hide: hide,\n getCss: getCss,\n reposition: reposition,\n destroy: destroy\n };\n };\n var isFakeCaretTableBrowser = function () {\n return browser$2.isIE() || browser$2.isEdge() || browser$2.isFirefox();\n };\n var isFakeCaretTarget = function (node) {\n return isContentEditableFalse$3(node) || NodeType.isTable(node) && isFakeCaretTableBrowser();\n };\n\n var isContentEditableFalse$4 = NodeType.isContentEditableFalse;\n var isBlockLike = NodeType.matchStyleValues('display', 'block table table-cell table-caption list-item');\n var isCaretContainer$2 = isCaretContainer;\n var isCaretContainerBlock$1 = isCaretContainerBlock;\n var isElement$5 = NodeType.isElement;\n var isCaretCandidate$2 = isCaretCandidate;\n var isForwards = function (direction) {\n return direction > 0;\n };\n var isBackwards = function (direction) {\n return direction < 0;\n };\n var skipCaretContainers = function (walk, shallow) {\n var node;\n while (node = walk(shallow)) {\n if (!isCaretContainerBlock$1(node)) {\n return node;\n }\n }\n return null;\n };\n var findNode = function (node, direction, predicateFn, rootNode, shallow) {\n var walker = new TreeWalker(node, rootNode);\n if (isBackwards(direction)) {\n if (isContentEditableFalse$4(node) || isCaretContainerBlock$1(node)) {\n node = skipCaretContainers(walker.prev, true);\n if (predicateFn(node)) {\n return node;\n }\n }\n while (node = skipCaretContainers(walker.prev, shallow)) {\n if (predicateFn(node)) {\n return node;\n }\n }\n }\n if (isForwards(direction)) {\n if (isContentEditableFalse$4(node) || isCaretContainerBlock$1(node)) {\n node = skipCaretContainers(walker.next, true);\n if (predicateFn(node)) {\n return node;\n }\n }\n while (node = skipCaretContainers(walker.next, shallow)) {\n if (predicateFn(node)) {\n return node;\n }\n }\n }\n return null;\n };\n var getParentBlock = function (node, rootNode) {\n while (node && node !== rootNode) {\n if (isBlockLike(node)) {\n return node;\n }\n node = node.parentNode;\n }\n return null;\n };\n var isInSameBlock = function (caretPosition1, caretPosition2, rootNode) {\n return getParentBlock(caretPosition1.container(), rootNode) === getParentBlock(caretPosition2.container(), rootNode);\n };\n var getChildNodeAtRelativeOffset = function (relativeOffset, caretPosition) {\n var container, offset;\n if (!caretPosition) {\n return null;\n }\n container = caretPosition.container();\n offset = caretPosition.offset();\n if (!isElement$5(container)) {\n return null;\n }\n return container.childNodes[offset + relativeOffset];\n };\n var beforeAfter = function (before, node) {\n var range = node.ownerDocument.createRange();\n if (before) {\n range.setStartBefore(node);\n range.setEndBefore(node);\n } else {\n range.setStartAfter(node);\n range.setEndAfter(node);\n }\n return range;\n };\n var isNodesInSameBlock = function (root, node1, node2) {\n return getParentBlock(node1, root) === getParentBlock(node2, root);\n };\n var lean = function (left, root, node) {\n var sibling, siblingName;\n if (left) {\n siblingName = 'previousSibling';\n } else {\n siblingName = 'nextSibling';\n }\n while (node && node !== root) {\n sibling = node[siblingName];\n if (isCaretContainer$2(sibling)) {\n sibling = sibling[siblingName];\n }\n if (isContentEditableFalse$4(sibling)) {\n if (isNodesInSameBlock(root, sibling, node)) {\n return sibling;\n }\n break;\n }\n if (isCaretCandidate$2(sibling)) {\n break;\n }\n node = node.parentNode;\n }\n return null;\n };\n var before$2 = curry(beforeAfter, true);\n var after$1 = curry(beforeAfter, false);\n var normalizeRange = function (direction, root, range) {\n var node, container, offset, location;\n var leanLeft = curry(lean, true, root);\n var leanRight = curry(lean, false, root);\n container = range.startContainer;\n offset = range.startOffset;\n if (isCaretContainerBlock(container)) {\n if (!isElement$5(container)) {\n container = container.parentNode;\n }\n location = container.getAttribute('data-mce-caret');\n if (location === 'before') {\n node = container.nextSibling;\n if (isFakeCaretTarget(node)) {\n return before$2(node);\n }\n }\n if (location === 'after') {\n node = container.previousSibling;\n if (isFakeCaretTarget(node)) {\n return after$1(node);\n }\n }\n }\n if (!range.collapsed) {\n return range;\n }\n if (NodeType.isText(container)) {\n if (isCaretContainer$2(container)) {\n if (direction === 1) {\n node = leanRight(container);\n if (node) {\n return before$2(node);\n }\n node = leanLeft(container);\n if (node) {\n return after$1(node);\n }\n }\n if (direction === -1) {\n node = leanLeft(container);\n if (node) {\n return after$1(node);\n }\n node = leanRight(container);\n if (node) {\n return before$2(node);\n }\n }\n return range;\n }\n if (endsWithCaretContainer(container) && offset >= container.data.length - 1) {\n if (direction === 1) {\n node = leanRight(container);\n if (node) {\n return before$2(node);\n }\n }\n return range;\n }\n if (startsWithCaretContainer(container) && offset <= 1) {\n if (direction === -1) {\n node = leanLeft(container);\n if (node) {\n return after$1(node);\n }\n }\n return range;\n }\n if (offset === container.data.length) {\n node = leanRight(container);\n if (node) {\n return before$2(node);\n }\n return range;\n }\n if (offset === 0) {\n node = leanLeft(container);\n if (node) {\n return after$1(node);\n }\n return range;\n }\n }\n return range;\n };\n var getRelativeCefElm = function (forward, caretPosition) {\n return Option.from(getChildNodeAtRelativeOffset(forward ? 0 : -1, caretPosition)).filter(isContentEditableFalse$4);\n };\n var getNormalizedRangeEndPoint = function (direction, root, range) {\n var normalizedRange = normalizeRange(direction, root, range);\n if (direction === -1) {\n return CaretPosition.fromRangeStart(normalizedRange);\n }\n return CaretPosition.fromRangeEnd(normalizedRange);\n };\n var getElementFromPosition = function (pos) {\n return Option.from(pos.getNode()).map(Element.fromDom);\n };\n var getElementFromPrevPosition = function (pos) {\n return Option.from(pos.getNode(true)).map(Element.fromDom);\n };\n var getVisualCaretPosition = function (walkFn, caretPosition) {\n while (caretPosition = walkFn(caretPosition)) {\n if (caretPosition.isVisible()) {\n return caretPosition;\n }\n }\n return caretPosition;\n };\n var isMoveInsideSameBlock = function (from, to) {\n var inSameBlock = isInSameBlock(from, to);\n if (!inSameBlock && NodeType.isBr(from.getNode())) {\n return true;\n }\n return inSameBlock;\n };\n\n var HDirection;\n (function (HDirection) {\n HDirection[HDirection['Backwards'] = -1] = 'Backwards';\n HDirection[HDirection['Forwards'] = 1] = 'Forwards';\n }(HDirection || (HDirection = {})));\n var isContentEditableFalse$5 = NodeType.isContentEditableFalse;\n var isText$7 = NodeType.isText;\n var isElement$6 = NodeType.isElement;\n var isBr$4 = NodeType.isBr;\n var isCaretCandidate$3 = isCaretCandidate;\n var isAtomic$1 = isAtomic;\n var isEditableCaretCandidate$1 = isEditableCaretCandidate;\n var getParents = function (node, root) {\n var parents = [];\n while (node && node !== root) {\n parents.push(node);\n node = node.parentNode;\n }\n return parents;\n };\n var nodeAtIndex = function (container, offset) {\n if (container.hasChildNodes() && offset < container.childNodes.length) {\n return container.childNodes[offset];\n }\n return null;\n };\n var getCaretCandidatePosition = function (direction, node) {\n if (isForwards(direction)) {\n if (isCaretCandidate$3(node.previousSibling) && !isText$7(node.previousSibling)) {\n return CaretPosition$1.before(node);\n }\n if (isText$7(node)) {\n return CaretPosition$1(node, 0);\n }\n }\n if (isBackwards(direction)) {\n if (isCaretCandidate$3(node.nextSibling) && !isText$7(node.nextSibling)) {\n return CaretPosition$1.after(node);\n }\n if (isText$7(node)) {\n return CaretPosition$1(node, node.data.length);\n }\n }\n if (isBackwards(direction)) {\n if (isBr$4(node)) {\n return CaretPosition$1.before(node);\n }\n return CaretPosition$1.after(node);\n }\n return CaretPosition$1.before(node);\n };\n var moveForwardFromBr = function (root, nextNode) {\n var nextSibling = nextNode.nextSibling;\n if (nextSibling && isCaretCandidate$3(nextSibling)) {\n if (isText$7(nextSibling)) {\n return CaretPosition$1(nextSibling, 0);\n } else {\n return CaretPosition$1.before(nextSibling);\n }\n } else {\n return findCaretPosition(HDirection.Forwards, CaretPosition$1.after(nextNode), root);\n }\n };\n var findCaretPosition = function (direction, startPos, root) {\n var node, nextNode, innerNode;\n var rootContentEditableFalseElm, caretPosition;\n if (!isElement$6(root) || !startPos) {\n return null;\n }\n if (startPos.isEqual(CaretPosition$1.after(root)) && root.lastChild) {\n caretPosition = CaretPosition$1.after(root.lastChild);\n if (isBackwards(direction) && isCaretCandidate$3(root.lastChild) && isElement$6(root.lastChild)) {\n return isBr$4(root.lastChild) ? CaretPosition$1.before(root.lastChild) : caretPosition;\n }\n } else {\n caretPosition = startPos;\n }\n var container = caretPosition.container();\n var offset = caretPosition.offset();\n if (isText$7(container)) {\n if (isBackwards(direction) && offset > 0) {\n return CaretPosition$1(container, --offset);\n }\n if (isForwards(direction) && offset < container.length) {\n return CaretPosition$1(container, ++offset);\n }\n node = container;\n } else {\n if (isBackwards(direction) && offset > 0) {\n nextNode = nodeAtIndex(container, offset - 1);\n if (isCaretCandidate$3(nextNode)) {\n if (!isAtomic$1(nextNode)) {\n innerNode = findNode(nextNode, direction, isEditableCaretCandidate$1, nextNode);\n if (innerNode) {\n if (isText$7(innerNode)) {\n return CaretPosition$1(innerNode, innerNode.data.length);\n }\n return CaretPosition$1.after(innerNode);\n }\n }\n if (isText$7(nextNode)) {\n return CaretPosition$1(nextNode, nextNode.data.length);\n }\n return CaretPosition$1.before(nextNode);\n }\n }\n if (isForwards(direction) && offset < container.childNodes.length) {\n nextNode = nodeAtIndex(container, offset);\n if (isCaretCandidate$3(nextNode)) {\n if (isBr$4(nextNode)) {\n return moveForwardFromBr(root, nextNode);\n }\n if (!isAtomic$1(nextNode)) {\n innerNode = findNode(nextNode, direction, isEditableCaretCandidate$1, nextNode);\n if (innerNode) {\n if (isText$7(innerNode)) {\n return CaretPosition$1(innerNode, 0);\n }\n return CaretPosition$1.before(innerNode);\n }\n }\n if (isText$7(nextNode)) {\n return CaretPosition$1(nextNode, 0);\n }\n return CaretPosition$1.after(nextNode);\n }\n }\n node = nextNode ? nextNode : caretPosition.getNode();\n }\n if (isForwards(direction) && caretPosition.isAtEnd() || isBackwards(direction) && caretPosition.isAtStart()) {\n node = findNode(node, direction, constant(true), root, true);\n if (isEditableCaretCandidate$1(node, root)) {\n return getCaretCandidatePosition(direction, node);\n }\n }\n nextNode = findNode(node, direction, isEditableCaretCandidate$1, root);\n rootContentEditableFalseElm = ArrUtils.last(filter(getParents(container, root), isContentEditableFalse$5));\n if (rootContentEditableFalseElm && (!nextNode || !rootContentEditableFalseElm.contains(nextNode))) {\n if (isForwards(direction)) {\n caretPosition = CaretPosition$1.after(rootContentEditableFalseElm);\n } else {\n caretPosition = CaretPosition$1.before(rootContentEditableFalseElm);\n }\n return caretPosition;\n }\n if (nextNode) {\n return getCaretCandidatePosition(direction, nextNode);\n }\n return null;\n };\n var CaretWalker = function (root) {\n return {\n next: function (caretPosition) {\n return findCaretPosition(HDirection.Forwards, caretPosition, root);\n },\n prev: function (caretPosition) {\n return findCaretPosition(HDirection.Backwards, caretPosition, root);\n }\n };\n };\n\n var walkToPositionIn = function (forward, root, start) {\n var position = forward ? CaretPosition$1.before(start) : CaretPosition$1.after(start);\n return fromPosition(forward, root, position);\n };\n var afterElement = function (node) {\n return NodeType.isBr(node) ? CaretPosition$1.before(node) : CaretPosition$1.after(node);\n };\n var isBeforeOrStart = function (position) {\n if (CaretPosition$1.isTextPosition(position)) {\n return position.offset() === 0;\n } else {\n return isCaretCandidate(position.getNode());\n }\n };\n var isAfterOrEnd = function (position) {\n if (CaretPosition$1.isTextPosition(position)) {\n var container = position.container();\n return position.offset() === container.data.length;\n } else {\n return isCaretCandidate(position.getNode(true));\n }\n };\n var isBeforeAfterSameElement = function (from, to) {\n return !CaretPosition$1.isTextPosition(from) && !CaretPosition$1.isTextPosition(to) && from.getNode() === to.getNode(true);\n };\n var isAtBr = function (position) {\n return !CaretPosition$1.isTextPosition(position) && NodeType.isBr(position.getNode());\n };\n var shouldSkipPosition = function (forward, from, to) {\n if (forward) {\n return !isBeforeAfterSameElement(from, to) && !isAtBr(from) && isAfterOrEnd(from) && isBeforeOrStart(to);\n } else {\n return !isBeforeAfterSameElement(to, from) && isBeforeOrStart(from) && isAfterOrEnd(to);\n }\n };\n var fromPosition = function (forward, root, pos) {\n var walker = CaretWalker(root);\n return Option.from(forward ? walker.next(pos) : walker.prev(pos));\n };\n var navigate = function (forward, root, from) {\n return fromPosition(forward, root, from).bind(function (to) {\n if (isInSameBlock(from, to, root) && shouldSkipPosition(forward, from, to)) {\n return fromPosition(forward, root, to);\n } else {\n return Option.some(to);\n }\n });\n };\n var navigateIgnore = function (forward, root, from, ignoreFilter) {\n return navigate(forward, root, from).bind(function (pos) {\n return ignoreFilter(pos) ? navigateIgnore(forward, root, pos, ignoreFilter) : Option.some(pos);\n });\n };\n var positionIn = function (forward, element) {\n var startNode = forward ? element.firstChild : element.lastChild;\n if (NodeType.isText(startNode)) {\n return Option.some(CaretPosition$1(startNode, forward ? 0 : startNode.data.length));\n } else if (startNode) {\n if (isCaretCandidate(startNode)) {\n return Option.some(forward ? CaretPosition$1.before(startNode) : afterElement(startNode));\n } else {\n return walkToPositionIn(forward, element, startNode);\n }\n } else {\n return Option.none();\n }\n };\n var nextPosition = curry(fromPosition, true);\n var prevPosition = curry(fromPosition, false);\n var CaretFinder = {\n fromPosition: fromPosition,\n nextPosition: nextPosition,\n prevPosition: prevPosition,\n navigate: navigate,\n navigateIgnore: navigateIgnore,\n positionIn: positionIn,\n firstPositionIn: curry(positionIn, true),\n lastPositionIn: curry(positionIn, false)\n };\n\n var isStringPathBookmark = function (bookmark) {\n return typeof bookmark.start === 'string';\n };\n var isRangeBookmark = function (bookmark) {\n return bookmark.hasOwnProperty('rng');\n };\n var isIdBookmark = function (bookmark) {\n return bookmark.hasOwnProperty('id');\n };\n var isIndexBookmark = function (bookmark) {\n return bookmark.hasOwnProperty('name');\n };\n var isPathBookmark = function (bookmark) {\n return Tools.isArray(bookmark.start);\n };\n\n var addBogus = function (dom, node) {\n if (NodeType.isElement(node) && dom.isBlock(node) && !node.innerHTML && !Env.ie) {\n node.innerHTML = '
';\n }\n return node;\n };\n var resolveCaretPositionBookmark = function (dom, bookmark) {\n var rng, pos;\n rng = dom.createRng();\n pos = resolve$2(dom.getRoot(), bookmark.start);\n rng.setStart(pos.container(), pos.offset());\n pos = resolve$2(dom.getRoot(), bookmark.end);\n rng.setEnd(pos.container(), pos.offset());\n return rng;\n };\n var insertZwsp = function (node, rng) {\n var textNode = node.ownerDocument.createTextNode(Zwsp.ZWSP);\n node.appendChild(textNode);\n rng.setStart(textNode, 0);\n rng.setEnd(textNode, 0);\n };\n var isEmpty = function (node) {\n return node.hasChildNodes() === false;\n };\n var tryFindRangePosition = function (node, rng) {\n return CaretFinder.lastPositionIn(node).fold(function () {\n return false;\n }, function (pos) {\n rng.setStart(pos.container(), pos.offset());\n rng.setEnd(pos.container(), pos.offset());\n return true;\n });\n };\n var padEmptyCaretContainer = function (root, node, rng) {\n if (isEmpty(node) && getParentCaretContainer(root, node)) {\n insertZwsp(node, rng);\n return true;\n } else {\n return false;\n }\n };\n var setEndPoint = function (dom, start, bookmark, rng) {\n var point = bookmark[start ? 'start' : 'end'];\n var i, node, offset, children;\n var root = dom.getRoot();\n if (point) {\n offset = point[0];\n for (node = root, i = point.length - 1; i >= 1; i--) {\n children = node.childNodes;\n if (padEmptyCaretContainer(root, node, rng)) {\n return true;\n }\n if (point[i] > children.length - 1) {\n if (padEmptyCaretContainer(root, node, rng)) {\n return true;\n }\n return tryFindRangePosition(node, rng);\n }\n node = children[point[i]];\n }\n if (node.nodeType === 3) {\n offset = Math.min(point[0], node.nodeValue.length);\n }\n if (node.nodeType === 1) {\n offset = Math.min(point[0], node.childNodes.length);\n }\n if (start) {\n rng.setStart(node, offset);\n } else {\n rng.setEnd(node, offset);\n }\n }\n return true;\n };\n var isValidTextNode = function (node) {\n return NodeType.isText(node) && node.data.length > 0;\n };\n var restoreEndPoint = function (dom, suffix, bookmark) {\n var marker = dom.get(bookmark.id + '_' + suffix), node, idx, next, prev;\n var keep = bookmark.keep;\n var container, offset;\n if (marker) {\n node = marker.parentNode;\n if (suffix === 'start') {\n if (!keep) {\n idx = dom.nodeIndex(marker);\n } else {\n if (marker.hasChildNodes()) {\n node = marker.firstChild;\n idx = 1;\n } else if (isValidTextNode(marker.nextSibling)) {\n node = marker.nextSibling;\n idx = 0;\n } else if (isValidTextNode(marker.previousSibling)) {\n node = marker.previousSibling;\n idx = marker.previousSibling.data.length;\n } else {\n node = marker.parentNode;\n idx = dom.nodeIndex(marker) + 1;\n }\n }\n container = node;\n offset = idx;\n } else {\n if (!keep) {\n idx = dom.nodeIndex(marker);\n } else {\n if (marker.hasChildNodes()) {\n node = marker.firstChild;\n idx = 1;\n } else if (isValidTextNode(marker.previousSibling)) {\n node = marker.previousSibling;\n idx = marker.previousSibling.data.length;\n } else {\n node = marker.parentNode;\n idx = dom.nodeIndex(marker);\n }\n }\n container = node;\n offset = idx;\n }\n if (!keep) {\n prev = marker.previousSibling;\n next = marker.nextSibling;\n Tools.each(Tools.grep(marker.childNodes), function (node) {\n if (NodeType.isText(node)) {\n node.nodeValue = node.nodeValue.replace(/\\uFEFF/g, '');\n }\n });\n while (marker = dom.get(bookmark.id + '_' + suffix)) {\n dom.remove(marker, true);\n }\n if (prev && next && prev.nodeType === next.nodeType && NodeType.isText(prev) && !Env.opera) {\n idx = prev.nodeValue.length;\n prev.appendData(next.nodeValue);\n dom.remove(next);\n if (suffix === 'start') {\n container = prev;\n offset = idx;\n } else {\n container = prev;\n offset = idx;\n }\n }\n }\n return Option.some(CaretPosition$1(container, offset));\n } else {\n return Option.none();\n }\n };\n var alt = function (o1, o2) {\n return o1.isSome() ? o1 : o2;\n };\n var resolvePaths = function (dom, bookmark) {\n var rng = dom.createRng();\n if (setEndPoint(dom, true, bookmark, rng) && setEndPoint(dom, false, bookmark, rng)) {\n return Option.some(rng);\n } else {\n return Option.none();\n }\n };\n var resolveId = function (dom, bookmark) {\n var startPos = restoreEndPoint(dom, 'start', bookmark);\n var endPos = restoreEndPoint(dom, 'end', bookmark);\n return lift2(startPos, alt(endPos, startPos), function (spos, epos) {\n var rng = dom.createRng();\n rng.setStart(addBogus(dom, spos.container()), spos.offset());\n rng.setEnd(addBogus(dom, epos.container()), epos.offset());\n return rng;\n });\n };\n var resolveIndex$1 = function (dom, bookmark) {\n return Option.from(dom.select(bookmark.name)[bookmark.index]).map(function (elm) {\n var rng = dom.createRng();\n rng.selectNode(elm);\n return rng;\n });\n };\n var resolve$3 = function (selection, bookmark) {\n var dom = selection.dom;\n if (bookmark) {\n if (isPathBookmark(bookmark)) {\n return resolvePaths(dom, bookmark);\n } else if (isStringPathBookmark(bookmark)) {\n return Option.some(resolveCaretPositionBookmark(dom, bookmark));\n } else if (isIdBookmark(bookmark)) {\n return resolveId(dom, bookmark);\n } else if (isIndexBookmark(bookmark)) {\n return resolveIndex$1(dom, bookmark);\n } else if (isRangeBookmark(bookmark)) {\n return Option.some(bookmark.rng);\n }\n }\n return Option.none();\n };\n var ResolveBookmark = { resolve: resolve$3 };\n\n var getBookmark$1 = function (selection, type, normalized) {\n return GetBookmark.getBookmark(selection, type, normalized);\n };\n var moveToBookmark = function (selection, bookmark) {\n ResolveBookmark.resolve(selection, bookmark).each(function (rng) {\n selection.setRng(rng);\n });\n };\n var isBookmarkNode$1 = function (node) {\n return NodeType.isElement(node) && node.tagName === 'SPAN' && node.getAttribute('data-mce-type') === 'bookmark';\n };\n var Bookmarks = {\n getBookmark: getBookmark$1,\n moveToBookmark: moveToBookmark,\n isBookmarkNode: isBookmarkNode$1\n };\n\n var isInlineBlock = function (node) {\n return node && /^(IMG)$/.test(node.nodeName);\n };\n var moveStart = function (dom, selection, rng) {\n var offset = rng.startOffset;\n var container = rng.startContainer, walker, node, nodes;\n if (rng.startContainer === rng.endContainer) {\n if (isInlineBlock(rng.startContainer.childNodes[rng.startOffset])) {\n return;\n }\n }\n if (container.nodeType === 1) {\n nodes = container.childNodes;\n if (offset < nodes.length) {\n container = nodes[offset];\n walker = new TreeWalker(container, dom.getParent(container, dom.isBlock));\n } else {\n container = nodes[nodes.length - 1];\n walker = new TreeWalker(container, dom.getParent(container, dom.isBlock));\n walker.next(true);\n }\n for (node = walker.current(); node; node = walker.next()) {\n if (node.nodeType === 3 && !isWhiteSpaceNode(node)) {\n rng.setStart(node, 0);\n selection.setRng(rng);\n return;\n }\n }\n }\n };\n var getNonWhiteSpaceSibling = function (node, next, inc) {\n if (node) {\n next = next ? 'nextSibling' : 'previousSibling';\n for (node = inc ? node : node[next]; node; node = node[next]) {\n if (node.nodeType === 1 || !isWhiteSpaceNode(node)) {\n return node;\n }\n }\n }\n };\n var isTextBlock$1 = function (editor, name) {\n if (name.nodeType) {\n name = name.nodeName;\n }\n return !!editor.schema.getTextBlockElements()[name.toLowerCase()];\n };\n var isValid = function (ed, parent, child) {\n return ed.schema.isValidChild(parent, child);\n };\n var isWhiteSpaceNode = function (node) {\n return node && node.nodeType === 3 && /^([\\t \\r\\n]+|)$/.test(node.nodeValue);\n };\n var replaceVars = function (value, vars) {\n if (typeof value !== 'string') {\n value = value(vars);\n } else if (vars) {\n value = value.replace(/%(\\w+)/g, function (str, name) {\n return vars[name] || str;\n });\n }\n return value;\n };\n var isEq = function (str1, str2) {\n str1 = str1 || '';\n str2 = str2 || '';\n str1 = '' + (str1.nodeName || str1);\n str2 = '' + (str2.nodeName || str2);\n return str1.toLowerCase() === str2.toLowerCase();\n };\n var normalizeStyleValue = function (dom, value, name) {\n if (name === 'color' || name === 'backgroundColor') {\n value = dom.toHex(value);\n }\n if (name === 'fontWeight' && value === 700) {\n value = 'bold';\n }\n if (name === 'fontFamily') {\n value = value.replace(/[\\'\\\"]/g, '').replace(/,\\s+/g, ',');\n }\n return '' + value;\n };\n var getStyle = function (dom, node, name) {\n return normalizeStyleValue(dom, dom.getStyle(node, name), name);\n };\n var getTextDecoration = function (dom, node) {\n var decoration;\n dom.getParent(node, function (n) {\n decoration = dom.getStyle(n, 'text-decoration');\n return decoration && decoration !== 'none';\n });\n return decoration;\n };\n var getParents$1 = function (dom, node, selector) {\n return dom.getParents(node, selector, dom.getRoot());\n };\n var FormatUtils = {\n isInlineBlock: isInlineBlock,\n moveStart: moveStart,\n getNonWhiteSpaceSibling: getNonWhiteSpaceSibling,\n isTextBlock: isTextBlock$1,\n isValid: isValid,\n isWhiteSpaceNode: isWhiteSpaceNode,\n replaceVars: replaceVars,\n isEq: isEq,\n normalizeStyleValue: normalizeStyleValue,\n getStyle: getStyle,\n getTextDecoration: getTextDecoration,\n getParents: getParents$1\n };\n\n var isBookmarkNode$2 = Bookmarks.isBookmarkNode;\n var getParents$2 = FormatUtils.getParents, isWhiteSpaceNode$1 = FormatUtils.isWhiteSpaceNode, isTextBlock$2 = FormatUtils.isTextBlock;\n var findLeaf = function (node, offset) {\n if (typeof offset === 'undefined') {\n offset = node.nodeType === 3 ? node.length : node.childNodes.length;\n }\n while (node && node.hasChildNodes()) {\n node = node.childNodes[offset];\n if (node) {\n offset = node.nodeType === 3 ? node.length : node.childNodes.length;\n }\n }\n return {\n node: node,\n offset: offset\n };\n };\n var excludeTrailingWhitespace = function (endContainer, endOffset) {\n var leaf = findLeaf(endContainer, endOffset);\n if (leaf.node) {\n while (leaf.node && leaf.offset === 0 && leaf.node.previousSibling) {\n leaf = findLeaf(leaf.node.previousSibling);\n }\n if (leaf.node && leaf.offset > 0 && leaf.node.nodeType === 3 && leaf.node.nodeValue.charAt(leaf.offset - 1) === ' ') {\n if (leaf.offset > 1) {\n endContainer = leaf.node;\n endContainer.splitText(leaf.offset - 1);\n }\n }\n }\n return endContainer;\n };\n var isBogusBr = function (node) {\n return node.nodeName === 'BR' && node.getAttribute('data-mce-bogus') && !node.nextSibling;\n };\n var findParentContentEditable = function (dom, node) {\n var parent = node;\n while (parent) {\n if (parent.nodeType === 1 && dom.getContentEditable(parent)) {\n return dom.getContentEditable(parent) === 'false' ? parent : node;\n }\n parent = parent.parentNode;\n }\n return node;\n };\n var findSpace = function (start, remove, node, offset) {\n var pos, pos2;\n var str = node.nodeValue;\n if (typeof offset === 'undefined') {\n offset = start ? str.length : 0;\n }\n if (start) {\n pos = str.lastIndexOf(' ', offset);\n pos2 = str.lastIndexOf('\\xA0', offset);\n pos = pos > pos2 ? pos : pos2;\n if (pos !== -1 && !remove && (pos < offset || !start) && pos <= str.length) {\n pos++;\n }\n } else {\n pos = str.indexOf(' ', offset);\n pos2 = str.indexOf('\\xA0', offset);\n pos = pos !== -1 && (pos2 === -1 || pos < pos2) ? pos : pos2;\n }\n return pos;\n };\n var findWordEndPoint = function (dom, body, container, offset, start, remove) {\n var walker, node, pos, lastTextNode;\n if (container.nodeType === 3) {\n pos = findSpace(start, remove, container, offset);\n if (pos !== -1) {\n return {\n container: container,\n offset: pos\n };\n }\n lastTextNode = container;\n }\n walker = new TreeWalker(container, dom.getParent(container, dom.isBlock) || body);\n while (node = walker[start ? 'prev' : 'next']()) {\n if (node.nodeType === 3 && !isBookmarkNode$2(node.parentNode)) {\n lastTextNode = node;\n pos = findSpace(start, remove, node);\n if (pos !== -1) {\n return {\n container: node,\n offset: pos\n };\n }\n } else if (dom.isBlock(node) || FormatUtils.isEq(node, 'BR')) {\n break;\n }\n }\n if (lastTextNode) {\n if (start) {\n offset = 0;\n } else {\n offset = lastTextNode.length;\n }\n return {\n container: lastTextNode,\n offset: offset\n };\n }\n };\n var findSelectorEndPoint = function (dom, format, rng, container, siblingName) {\n var parents, i, y, curFormat;\n if (container.nodeType === 3 && container.nodeValue.length === 0 && container[siblingName]) {\n container = container[siblingName];\n }\n parents = getParents$2(dom, container);\n for (i = 0; i < parents.length; i++) {\n for (y = 0; y < format.length; y++) {\n curFormat = format[y];\n if ('collapsed' in curFormat && curFormat.collapsed !== rng.collapsed) {\n continue;\n }\n if (dom.is(parents[i], curFormat.selector)) {\n return parents[i];\n }\n }\n }\n return container;\n };\n var findBlockEndPoint = function (editor, format, container, siblingName) {\n var node;\n var dom = editor.dom;\n var root = dom.getRoot();\n if (!format[0].wrapper) {\n node = dom.getParent(container, format[0].block, root);\n }\n if (!node) {\n var scopeRoot = dom.getParent(container, 'LI,TD,TH');\n node = dom.getParent(container.nodeType === 3 ? container.parentNode : container, function (node) {\n return node !== root && isTextBlock$2(editor, node);\n }, scopeRoot);\n }\n if (node && format[0].wrapper) {\n node = getParents$2(dom, node, 'ul,ol').reverse()[0] || node;\n }\n if (!node) {\n node = container;\n while (node[siblingName] && !dom.isBlock(node[siblingName])) {\n node = node[siblingName];\n if (FormatUtils.isEq(node, 'br')) {\n break;\n }\n }\n }\n return node || container;\n };\n var findParentContainer = function (dom, format, startContainer, startOffset, endContainer, endOffset, start) {\n var container, parent, sibling, siblingName, root;\n container = parent = start ? startContainer : endContainer;\n siblingName = start ? 'previousSibling' : 'nextSibling';\n root = dom.getRoot();\n if (container.nodeType === 3 && !isWhiteSpaceNode$1(container)) {\n if (start ? startOffset > 0 : endOffset < container.nodeValue.length) {\n return container;\n }\n }\n while (true) {\n if (!format[0].block_expand && dom.isBlock(parent)) {\n return parent;\n }\n for (sibling = parent[siblingName]; sibling; sibling = sibling[siblingName]) {\n if (!isBookmarkNode$2(sibling) && !isWhiteSpaceNode$1(sibling) && !isBogusBr(sibling)) {\n return parent;\n }\n }\n if (parent === root || parent.parentNode === root) {\n container = parent;\n break;\n }\n parent = parent.parentNode;\n }\n return container;\n };\n var expandRng = function (editor, rng, format, remove) {\n var endPoint, startContainer = rng.startContainer, startOffset = rng.startOffset, endContainer = rng.endContainer, endOffset = rng.endOffset;\n var dom = editor.dom;\n if (startContainer.nodeType === 1 && startContainer.hasChildNodes()) {\n startContainer = getNode(startContainer, startOffset);\n if (startContainer.nodeType === 3) {\n startOffset = 0;\n }\n }\n if (endContainer.nodeType === 1 && endContainer.hasChildNodes()) {\n endContainer = getNode(endContainer, rng.collapsed ? endOffset : endOffset - 1);\n if (endContainer.nodeType === 3) {\n endOffset = endContainer.nodeValue.length;\n }\n }\n startContainer = findParentContentEditable(dom, startContainer);\n endContainer = findParentContentEditable(dom, endContainer);\n if (isBookmarkNode$2(startContainer.parentNode) || isBookmarkNode$2(startContainer)) {\n startContainer = isBookmarkNode$2(startContainer) ? startContainer : startContainer.parentNode;\n if (rng.collapsed) {\n startContainer = startContainer.previousSibling || startContainer;\n } else {\n startContainer = startContainer.nextSibling || startContainer;\n }\n if (startContainer.nodeType === 3) {\n startOffset = rng.collapsed ? startContainer.length : 0;\n }\n }\n if (isBookmarkNode$2(endContainer.parentNode) || isBookmarkNode$2(endContainer)) {\n endContainer = isBookmarkNode$2(endContainer) ? endContainer : endContainer.parentNode;\n if (rng.collapsed) {\n endContainer = endContainer.nextSibling || endContainer;\n } else {\n endContainer = endContainer.previousSibling || endContainer;\n }\n if (endContainer.nodeType === 3) {\n endOffset = rng.collapsed ? 0 : endContainer.length;\n }\n }\n if (rng.collapsed) {\n endPoint = findWordEndPoint(dom, editor.getBody(), startContainer, startOffset, true, remove);\n if (endPoint) {\n startContainer = endPoint.container;\n startOffset = endPoint.offset;\n }\n endPoint = findWordEndPoint(dom, editor.getBody(), endContainer, endOffset, false, remove);\n if (endPoint) {\n endContainer = endPoint.container;\n endOffset = endPoint.offset;\n }\n }\n if (format[0].inline) {\n endContainer = remove ? endContainer : excludeTrailingWhitespace(endContainer, endOffset);\n }\n if (format[0].inline || format[0].block_expand) {\n if (!format[0].inline || (startContainer.nodeType !== 3 || startOffset === 0)) {\n startContainer = findParentContainer(dom, format, startContainer, startOffset, endContainer, endOffset, true);\n }\n if (!format[0].inline || (endContainer.nodeType !== 3 || endOffset === endContainer.nodeValue.length)) {\n endContainer = findParentContainer(dom, format, startContainer, startOffset, endContainer, endOffset, false);\n }\n }\n if (format[0].selector && format[0].expand !== false && !format[0].inline) {\n startContainer = findSelectorEndPoint(dom, format, rng, startContainer, 'previousSibling');\n endContainer = findSelectorEndPoint(dom, format, rng, endContainer, 'nextSibling');\n }\n if (format[0].block || format[0].selector) {\n startContainer = findBlockEndPoint(editor, format, startContainer, 'previousSibling');\n endContainer = findBlockEndPoint(editor, format, endContainer, 'nextSibling');\n if (format[0].block) {\n if (!dom.isBlock(startContainer)) {\n startContainer = findParentContainer(dom, format, startContainer, startOffset, endContainer, endOffset, true);\n }\n if (!dom.isBlock(endContainer)) {\n endContainer = findParentContainer(dom, format, startContainer, startOffset, endContainer, endOffset, false);\n }\n }\n }\n if (startContainer.nodeType === 1) {\n startOffset = dom.nodeIndex(startContainer);\n startContainer = startContainer.parentNode;\n }\n if (endContainer.nodeType === 1) {\n endOffset = dom.nodeIndex(endContainer) + 1;\n endContainer = endContainer.parentNode;\n }\n return {\n startContainer: startContainer,\n startOffset: startOffset,\n endContainer: endContainer,\n endOffset: endOffset\n };\n };\n var ExpandRange = { expandRng: expandRng };\n\n var each$8 = Tools.each;\n var getEndChild = function (container, index) {\n var childNodes = container.childNodes;\n index--;\n if (index > childNodes.length - 1) {\n index = childNodes.length - 1;\n } else if (index < 0) {\n index = 0;\n }\n return childNodes[index] || container;\n };\n var walk$1 = function (dom, rng, callback) {\n var startContainer = rng.startContainer;\n var startOffset = rng.startOffset;\n var endContainer = rng.endContainer;\n var endOffset = rng.endOffset;\n var ancestor;\n var startPoint;\n var endPoint;\n var node;\n var parent;\n var siblings;\n var nodes;\n nodes = dom.select('td[data-mce-selected],th[data-mce-selected]');\n if (nodes.length > 0) {\n each$8(nodes, function (node) {\n callback([node]);\n });\n return;\n }\n var exclude = function (nodes) {\n var node;\n node = nodes[0];\n if (node.nodeType === 3 && node === startContainer && startOffset >= node.nodeValue.length) {\n nodes.splice(0, 1);\n }\n node = nodes[nodes.length - 1];\n if (endOffset === 0 && nodes.length > 0 && node === endContainer && node.nodeType === 3) {\n nodes.splice(nodes.length - 1, 1);\n }\n return nodes;\n };\n var collectSiblings = function (node, name, endNode) {\n var siblings = [];\n for (; node && node !== endNode; node = node[name]) {\n siblings.push(node);\n }\n return siblings;\n };\n var findEndPoint = function (node, root) {\n do {\n if (node.parentNode === root) {\n return node;\n }\n node = node.parentNode;\n } while (node);\n };\n var walkBoundary = function (startNode, endNode, next) {\n var siblingName = next ? 'nextSibling' : 'previousSibling';\n for (node = startNode, parent = node.parentNode; node && node !== endNode; node = parent) {\n parent = node.parentNode;\n siblings = collectSiblings(node === startNode ? node : node[siblingName], siblingName);\n if (siblings.length) {\n if (!next) {\n siblings.reverse();\n }\n callback(exclude(siblings));\n }\n }\n };\n if (startContainer.nodeType === 1 && startContainer.hasChildNodes()) {\n startContainer = startContainer.childNodes[startOffset];\n }\n if (endContainer.nodeType === 1 && endContainer.hasChildNodes()) {\n endContainer = getEndChild(endContainer, endOffset);\n }\n if (startContainer === endContainer) {\n return callback(exclude([startContainer]));\n }\n ancestor = dom.findCommonAncestor(startContainer, endContainer);\n for (node = startContainer; node; node = node.parentNode) {\n if (node === endContainer) {\n return walkBoundary(startContainer, ancestor, true);\n }\n if (node === ancestor) {\n break;\n }\n }\n for (node = endContainer; node; node = node.parentNode) {\n if (node === startContainer) {\n return walkBoundary(endContainer, ancestor);\n }\n if (node === ancestor) {\n break;\n }\n }\n startPoint = findEndPoint(startContainer, ancestor) || startContainer;\n endPoint = findEndPoint(endContainer, ancestor) || endContainer;\n walkBoundary(startContainer, startPoint, true);\n siblings = collectSiblings(startPoint === startContainer ? startPoint : startPoint.nextSibling, 'nextSibling', endPoint === endContainer ? endPoint.nextSibling : endPoint);\n if (siblings.length) {\n callback(exclude(siblings));\n }\n walkBoundary(endContainer, endPoint);\n };\n var RangeWalk = { walk: walk$1 };\n\n var zeroWidth = function () {\n return '\\uFEFF';\n };\n\n function NodeValue (is, name) {\n var get = function (element) {\n if (!is(element)) {\n throw new Error('Can only get ' + name + ' value of a ' + name + ' node');\n }\n return getOption(element).getOr('');\n };\n var getOption = function (element) {\n return is(element) ? Option.from(element.dom().nodeValue) : Option.none();\n };\n var set = function (element, value) {\n if (!is(element)) {\n throw new Error('Can only set raw ' + name + ' value of a ' + name + ' node');\n }\n element.dom().nodeValue = value;\n };\n return {\n get: get,\n getOption: getOption,\n set: set\n };\n }\n\n var api = NodeValue(isText, 'text');\n var get$4 = function (element) {\n return api.get(element);\n };\n\n var isZeroWidth = function (elem) {\n return isText(elem) && get$4(elem) === zeroWidth();\n };\n var context = function (editor, elem, wrapName, nodeName) {\n return parent(elem).fold(function () {\n return 'skipping';\n }, function (parent) {\n if (nodeName === 'br' || isZeroWidth(elem)) {\n return 'valid';\n } else if (isAnnotation(elem)) {\n return 'existing';\n } else if (isCaretNode(elem)) {\n return 'caret';\n } else if (!FormatUtils.isValid(editor, wrapName, nodeName) || !FormatUtils.isValid(editor, name(parent), wrapName)) {\n return 'invalid-child';\n } else {\n return 'valid';\n }\n });\n };\n\n var shouldApplyToTrailingSpaces = function (rng) {\n return rng.startContainer.nodeType === 3 && rng.startContainer.nodeValue.length >= rng.startOffset && rng.startContainer.nodeValue[rng.startOffset] === '\\xA0';\n };\n var applyWordGrab = function (editor, rng) {\n var r = ExpandRange.expandRng(editor, rng, [{ inline: true }], shouldApplyToTrailingSpaces(rng));\n rng.setStart(r.startContainer, r.startOffset);\n rng.setEnd(r.endContainer, r.endOffset);\n editor.selection.setRng(rng);\n };\n var makeAnnotation = function (eDoc, _a, annotationName, decorate) {\n var _b = _a.uid, uid = _b === void 0 ? generate('mce-annotation') : _b, data = __rest(_a, ['uid']);\n var master = Element.fromTag('span', eDoc);\n add$2(master, annotation());\n set(master, '' + dataAnnotationId(), uid);\n set(master, '' + dataAnnotation(), annotationName);\n var _c = decorate(uid, data), _d = _c.attributes, attributes = _d === void 0 ? {} : _d, _e = _c.classes, classes = _e === void 0 ? [] : _e;\n setAll(master, attributes);\n add$3(master, classes);\n return master;\n };\n var annotate = function (editor, rng, annotationName, decorate, data) {\n var newWrappers = [];\n var master = makeAnnotation(editor.getDoc(), data, annotationName, decorate);\n var wrapper = Cell(Option.none());\n var finishWrapper = function () {\n wrapper.set(Option.none());\n };\n var getOrOpenWrapper = function () {\n return wrapper.get().getOrThunk(function () {\n var nu = shallow(master);\n newWrappers.push(nu);\n wrapper.set(Option.some(nu));\n return nu;\n });\n };\n var processElements = function (elems) {\n each(elems, processElement);\n };\n var processElement = function (elem) {\n var ctx = context(editor, elem, 'span', name(elem));\n switch (ctx) {\n case 'invalid-child': {\n finishWrapper();\n var children$1 = children(elem);\n processElements(children$1);\n finishWrapper();\n break;\n }\n case 'valid': {\n var w = getOrOpenWrapper();\n wrap$1(elem, w);\n break;\n }\n case 'skipping':\n case 'existing':\n case 'caret':\n }\n };\n var processNodes = function (nodes) {\n var elems = map(nodes, Element.fromDom);\n processElements(elems);\n };\n RangeWalk.walk(editor.dom, rng, function (nodes) {\n finishWrapper();\n processNodes(nodes);\n });\n return newWrappers;\n };\n var annotateWithBookmark = function (editor, name, settings, data) {\n editor.undoManager.transact(function () {\n var initialRng = editor.selection.getRng();\n if (initialRng.collapsed) {\n applyWordGrab(editor, initialRng);\n }\n if (editor.selection.getRng().collapsed) {\n var wrapper = makeAnnotation(editor.getDoc(), data, name, settings.decorate);\n set$1(wrapper, '\\xA0');\n editor.selection.getRng().insertNode(wrapper.dom());\n editor.selection.select(wrapper.dom());\n } else {\n var bookmark = GetBookmark.getPersistentBookmark(editor.selection, false);\n var rng = editor.selection.getRng();\n annotate(editor, rng, name, settings.decorate, data);\n editor.selection.moveToBookmark(bookmark);\n }\n });\n };\n\n function Annotator (editor) {\n var registry = create$1();\n setup$1(editor, registry);\n var changes = setup(editor);\n return {\n register: function (name, settings) {\n registry.register(name, settings);\n },\n annotate: function (name, data) {\n registry.lookup(name).each(function (settings) {\n annotateWithBookmark(editor, name, settings, data);\n });\n },\n annotationChanged: function (name, callback) {\n changes.addListener(name, callback);\n },\n remove: function (name) {\n identify(editor, Option.some(name)).each(function (_a) {\n var elements = _a.elements;\n each(elements, unwrap);\n });\n },\n getAll: function (name) {\n var directory = findAll(editor, name);\n return map$2(directory, function (elems) {\n return map(elems, function (elem) {\n return elem.dom();\n });\n });\n }\n };\n }\n\n var hasOnlyOneChild = function (node) {\n return node.firstChild && node.firstChild === node.lastChild;\n };\n var isPaddingNode = function (node) {\n return node.name === 'br' || node.value === '\\xA0';\n };\n var isPaddedEmptyBlock = function (schema, node) {\n var blockElements = schema.getBlockElements();\n return blockElements[node.name] && hasOnlyOneChild(node) && isPaddingNode(node.firstChild);\n };\n var isEmptyFragmentElement = function (schema, node) {\n var nonEmptyElements = schema.getNonEmptyElements();\n return node && (node.isEmpty(nonEmptyElements) || isPaddedEmptyBlock(schema, node));\n };\n var isListFragment = function (schema, fragment) {\n var firstChild = fragment.firstChild;\n var lastChild = fragment.lastChild;\n if (firstChild && firstChild.name === 'meta') {\n firstChild = firstChild.next;\n }\n if (lastChild && lastChild.attr('id') === 'mce_marker') {\n lastChild = lastChild.prev;\n }\n if (isEmptyFragmentElement(schema, lastChild)) {\n lastChild = lastChild.prev;\n }\n if (!firstChild || firstChild !== lastChild) {\n return false;\n }\n return firstChild.name === 'ul' || firstChild.name === 'ol';\n };\n var cleanupDomFragment = function (domFragment) {\n var firstChild = domFragment.firstChild;\n var lastChild = domFragment.lastChild;\n if (firstChild && firstChild.nodeName === 'META') {\n firstChild.parentNode.removeChild(firstChild);\n }\n if (lastChild && lastChild.id === 'mce_marker') {\n lastChild.parentNode.removeChild(lastChild);\n }\n return domFragment;\n };\n var toDomFragment = function (dom, serializer, fragment) {\n var html = serializer.serialize(fragment);\n var domFragment = dom.createFragment(html);\n return cleanupDomFragment(domFragment);\n };\n var listItems$1 = function (elm) {\n return Tools.grep(elm.childNodes, function (child) {\n return child.nodeName === 'LI';\n });\n };\n var isPadding = function (node) {\n return node.data === '\\xA0' || NodeType.isBr(node);\n };\n var isListItemPadded = function (node) {\n return node && node.firstChild && node.firstChild === node.lastChild && isPadding(node.firstChild);\n };\n var isEmptyOrPadded = function (elm) {\n return !elm.firstChild || isListItemPadded(elm);\n };\n var trimListItems = function (elms) {\n return elms.length > 0 && isEmptyOrPadded(elms[elms.length - 1]) ? elms.slice(0, -1) : elms;\n };\n var getParentLi = function (dom, node) {\n var parentBlock = dom.getParent(node, dom.isBlock);\n return parentBlock && parentBlock.nodeName === 'LI' ? parentBlock : null;\n };\n var isParentBlockLi = function (dom, node) {\n return !!getParentLi(dom, node);\n };\n var getSplit = function (parentNode, rng) {\n var beforeRng = rng.cloneRange();\n var afterRng = rng.cloneRange();\n beforeRng.setStartBefore(parentNode);\n afterRng.setEndAfter(parentNode);\n return [\n beforeRng.cloneContents(),\n afterRng.cloneContents()\n ];\n };\n var findFirstIn = function (node, rootNode) {\n var caretPos = CaretPosition$1.before(node);\n var caretWalker = CaretWalker(rootNode);\n var newCaretPos = caretWalker.next(caretPos);\n return newCaretPos ? newCaretPos.toRange() : null;\n };\n var findLastOf = function (node, rootNode) {\n var caretPos = CaretPosition$1.after(node);\n var caretWalker = CaretWalker(rootNode);\n var newCaretPos = caretWalker.prev(caretPos);\n return newCaretPos ? newCaretPos.toRange() : null;\n };\n var insertMiddle = function (target, elms, rootNode, rng) {\n var parts = getSplit(target, rng);\n var parentElm = target.parentNode;\n parentElm.insertBefore(parts[0], target);\n Tools.each(elms, function (li) {\n parentElm.insertBefore(li, target);\n });\n parentElm.insertBefore(parts[1], target);\n parentElm.removeChild(target);\n return findLastOf(elms[elms.length - 1], rootNode);\n };\n var insertBefore = function (target, elms, rootNode) {\n var parentElm = target.parentNode;\n Tools.each(elms, function (elm) {\n parentElm.insertBefore(elm, target);\n });\n return findFirstIn(target, rootNode);\n };\n var insertAfter = function (target, elms, rootNode, dom) {\n dom.insertAfter(elms.reverse(), target);\n return findLastOf(elms[0], rootNode);\n };\n var insertAtCaret = function (serializer, dom, rng, fragment) {\n var domFragment = toDomFragment(dom, serializer, fragment);\n var liTarget = getParentLi(dom, rng.startContainer);\n var liElms = trimListItems(listItems$1(domFragment.firstChild));\n var BEGINNING = 1, END = 2;\n var rootNode = dom.getRoot();\n var isAt = function (location) {\n var caretPos = CaretPosition$1.fromRangeStart(rng);\n var caretWalker = CaretWalker(dom.getRoot());\n var newPos = location === BEGINNING ? caretWalker.prev(caretPos) : caretWalker.next(caretPos);\n return newPos ? getParentLi(dom, newPos.getNode()) !== liTarget : true;\n };\n if (isAt(BEGINNING)) {\n return insertBefore(liTarget, liElms, rootNode);\n } else if (isAt(END)) {\n return insertAfter(liTarget, liElms, rootNode, dom);\n }\n return insertMiddle(liTarget, liElms, rootNode, rng);\n };\n var InsertList = {\n isListFragment: isListFragment,\n insertAtCaret: insertAtCaret,\n isParentBlockLi: isParentBlockLi,\n trimListItems: trimListItems,\n listItems: listItems$1\n };\n\n var each$9 = Tools.each;\n var ElementUtils = function (dom) {\n this.compare = function (node1, node2) {\n if (node1.nodeName !== node2.nodeName) {\n return false;\n }\n var getAttribs = function (node) {\n var attribs = {};\n each$9(dom.getAttribs(node), function (attr) {\n var name = attr.nodeName.toLowerCase();\n if (name.indexOf('_') !== 0 && name !== 'style' && name.indexOf('data-') !== 0) {\n attribs[name] = dom.getAttrib(node, name);\n }\n });\n return attribs;\n };\n var compareObjects = function (obj1, obj2) {\n var value, name;\n for (name in obj1) {\n if (obj1.hasOwnProperty(name)) {\n value = obj2[name];\n if (typeof value === 'undefined') {\n return false;\n }\n if (obj1[name] !== value) {\n return false;\n }\n delete obj2[name];\n }\n }\n for (name in obj2) {\n if (obj2.hasOwnProperty(name)) {\n return false;\n }\n }\n return true;\n };\n if (!compareObjects(getAttribs(node1), getAttribs(node2))) {\n return false;\n }\n if (!compareObjects(dom.parseStyle(dom.getAttrib(node1, 'style')), dom.parseStyle(dom.getAttrib(node2, 'style')))) {\n return false;\n }\n return !Bookmarks.isBookmarkNode(node1) && !Bookmarks.isBookmarkNode(node2);\n };\n };\n\n var getLastChildren = function (elm) {\n var children = [];\n var rawNode = elm.dom();\n while (rawNode) {\n children.push(Element.fromDom(rawNode));\n rawNode = rawNode.lastChild;\n }\n return children;\n };\n var removeTrailingBr = function (elm) {\n var allBrs = descendants$1(elm, 'br');\n var brs = filter(getLastChildren(elm).slice(-1), isBr);\n if (allBrs.length === brs.length) {\n each(brs, remove$1);\n }\n };\n var fillWithPaddingBr = function (elm) {\n empty(elm);\n append(elm, Element.fromHtml('
'));\n };\n var isPaddingContents = function (elm) {\n return isText(elm) ? get$4(elm) === '\\xA0' : isBr(elm);\n };\n var isPaddedElement = function (elm) {\n return filter(children(elm), isPaddingContents).length === 1;\n };\n var trimBlockTrailingBr = function (elm) {\n lastChild(elm).each(function (lastChild) {\n prevSibling(lastChild).each(function (lastChildPrevSibling) {\n if (isBlock(elm) && isBr(lastChild) && isBlock(lastChildPrevSibling)) {\n remove$1(lastChild);\n }\n });\n });\n };\n var PaddingBr = {\n removeTrailingBr: removeTrailingBr,\n fillWithPaddingBr: fillWithPaddingBr,\n isPaddedElement: isPaddedElement,\n trimBlockTrailingBr: trimBlockTrailingBr\n };\n\n var makeMap$3 = Tools.makeMap;\n function Writer (settings) {\n var html = [];\n var indent, indentBefore, indentAfter, encode, htmlOutput;\n settings = settings || {};\n indent = settings.indent;\n indentBefore = makeMap$3(settings.indent_before || '');\n indentAfter = makeMap$3(settings.indent_after || '');\n encode = Entities.getEncodeFunc(settings.entity_encoding || 'raw', settings.entities);\n htmlOutput = settings.element_format === 'html';\n return {\n start: function (name, attrs, empty) {\n var i, l, attr, value;\n if (indent && indentBefore[name] && html.length > 0) {\n value = html[html.length - 1];\n if (value.length > 0 && value !== '\\n') {\n html.push('\\n');\n }\n }\n html.push('<', name);\n if (attrs) {\n for (i = 0, l = attrs.length; i < l; i++) {\n attr = attrs[i];\n html.push(' ', attr.name, '=\"', encode(attr.value, true), '\"');\n }\n }\n if (!empty || htmlOutput) {\n html[html.length] = '>';\n } else {\n html[html.length] = ' />';\n }\n if (empty && indent && indentAfter[name] && html.length > 0) {\n value = html[html.length - 1];\n if (value.length > 0 && value !== '\\n') {\n html.push('\\n');\n }\n }\n },\n end: function (name) {\n var value;\n html.push('', name, '>');\n if (indent && indentAfter[name] && html.length > 0) {\n value = html[html.length - 1];\n if (value.length > 0 && value !== '\\n') {\n html.push('\\n');\n }\n }\n },\n text: function (text, raw) {\n if (text.length > 0) {\n html[html.length] = raw ? text : encode(text);\n }\n },\n cdata: function (text) {\n html.push('');\n },\n comment: function (text) {\n html.push('');\n },\n pi: function (name, text) {\n if (text) {\n html.push('', name, ' ', encode(text), '?>');\n } else {\n html.push('', name, '?>');\n }\n if (indent) {\n html.push('\\n');\n }\n },\n doctype: function (text) {\n html.push('', indent ? '\\n' : '');\n },\n reset: function () {\n html.length = 0;\n },\n getContent: function () {\n return html.join('').replace(/\\n$/, '');\n }\n };\n }\n\n function HtmlSerializer (settings, schema) {\n if (schema === void 0) {\n schema = Schema();\n }\n var writer = Writer(settings);\n settings = settings || {};\n settings.validate = 'validate' in settings ? settings.validate : true;\n var serialize = function (node) {\n var handlers, validate;\n validate = settings.validate;\n handlers = {\n 3: function (node) {\n writer.text(node.value, node.raw);\n },\n 8: function (node) {\n writer.comment(node.value);\n },\n 7: function (node) {\n writer.pi(node.name, node.value);\n },\n 10: function (node) {\n writer.doctype(node.value);\n },\n 4: function (node) {\n writer.cdata(node.value);\n },\n 11: function (node) {\n if (node = node.firstChild) {\n do {\n walk(node);\n } while (node = node.next);\n }\n }\n };\n writer.reset();\n var walk = function (node) {\n var handler = handlers[node.type];\n var name, isEmpty, attrs, attrName, attrValue, sortedAttrs, i, l, elementRule;\n if (!handler) {\n name = node.name;\n isEmpty = node.shortEnded;\n attrs = node.attributes;\n if (validate && attrs && attrs.length > 1) {\n sortedAttrs = [];\n sortedAttrs.map = {};\n elementRule = schema.getElementRule(node.name);\n if (elementRule) {\n for (i = 0, l = elementRule.attributesOrder.length; i < l; i++) {\n attrName = elementRule.attributesOrder[i];\n if (attrName in attrs.map) {\n attrValue = attrs.map[attrName];\n sortedAttrs.map[attrName] = attrValue;\n sortedAttrs.push({\n name: attrName,\n value: attrValue\n });\n }\n }\n for (i = 0, l = attrs.length; i < l; i++) {\n attrName = attrs[i].name;\n if (!(attrName in sortedAttrs.map)) {\n attrValue = attrs.map[attrName];\n sortedAttrs.map[attrName] = attrValue;\n sortedAttrs.push({\n name: attrName,\n value: attrValue\n });\n }\n }\n attrs = sortedAttrs;\n }\n }\n writer.start(node.name, attrs, isEmpty);\n if (!isEmpty) {\n if (node = node.firstChild) {\n do {\n walk(node);\n } while (node = node.next);\n }\n writer.end(name);\n }\n } else {\n handler(node);\n }\n };\n if (node.type === 1 && !settings.inner) {\n walk(node);\n } else {\n handlers[11](node);\n }\n return writer.getContent();\n };\n return { serialize: serialize };\n }\n\n var createRange$1 = function (sc, so, ec, eo) {\n var rng = domGlobals.document.createRange();\n rng.setStart(sc, so);\n rng.setEnd(ec, eo);\n return rng;\n };\n var normalizeBlockSelectionRange = function (rng) {\n var startPos = CaretPosition$1.fromRangeStart(rng);\n var endPos = CaretPosition$1.fromRangeEnd(rng);\n var rootNode = rng.commonAncestorContainer;\n return CaretFinder.fromPosition(false, rootNode, endPos).map(function (newEndPos) {\n if (!isInSameBlock(startPos, endPos, rootNode) && isInSameBlock(startPos, newEndPos, rootNode)) {\n return createRange$1(startPos.container(), startPos.offset(), newEndPos.container(), newEndPos.offset());\n } else {\n return rng;\n }\n }).getOr(rng);\n };\n var normalize = function (rng) {\n return rng.collapsed ? rng : normalizeBlockSelectionRange(rng);\n };\n var RangeNormalizer = { normalize: normalize };\n\n var isAfterNbsp = function (container, offset) {\n return NodeType.isText(container) && container.nodeValue[offset - 1] === '\\xA0';\n };\n var trimOrPadLeftRight = function (rng, html) {\n var container, offset;\n container = rng.startContainer;\n offset = rng.startOffset;\n var hasSiblingText = function (siblingName) {\n return container[siblingName] && container[siblingName].nodeType === 3;\n };\n if (container.nodeType === 3) {\n if (offset > 0) {\n html = html.replace(/^ /, ' ');\n } else if (!hasSiblingText('previousSibling')) {\n html = html.replace(/^ /, ' ');\n }\n if (offset < container.length) {\n html = html.replace(/ (
|)$/, ' ');\n } else if (!hasSiblingText('nextSibling')) {\n html = html.replace(/( | )(
|)$/, ' ');\n }\n }\n return html;\n };\n var trimNbspAfterDeleteAndPadValue = function (rng, value) {\n var container, offset;\n container = rng.startContainer;\n offset = rng.startOffset;\n if (container.nodeType === 3 && rng.collapsed) {\n if (container.data[offset] === '\\xA0') {\n container.deleteData(offset, 1);\n if (!/[\\u00a0| ]$/.test(value)) {\n value += ' ';\n }\n } else if (container.data[offset - 1] === '\\xA0') {\n container.deleteData(offset - 1, 1);\n if (!/[\\u00a0| ]$/.test(value)) {\n value = ' ' + value;\n }\n }\n }\n return value;\n };\n\n var isTableCell$2 = NodeType.matchNodeNames('td th');\n var selectionSetContent = function (editor, content) {\n var rng = editor.selection.getRng();\n var container = rng.startContainer;\n var offset = rng.startOffset;\n if (rng.collapsed && isAfterNbsp(container, offset) && NodeType.isText(container)) {\n container.insertData(offset - 1, ' ');\n container.deleteData(offset, 1);\n rng.setStart(container, offset);\n rng.setEnd(container, offset);\n editor.selection.setRng(rng);\n }\n editor.selection.setContent(content);\n };\n var validInsertion = function (editor, value, parentNode) {\n if (parentNode.getAttribute('data-mce-bogus') === 'all') {\n parentNode.parentNode.insertBefore(editor.dom.createFragment(value), parentNode);\n } else {\n var node = parentNode.firstChild;\n var node2 = parentNode.lastChild;\n if (!node || node === node2 && node.nodeName === 'BR') {\n editor.dom.setHTML(parentNode, value);\n } else {\n selectionSetContent(editor, value);\n }\n }\n };\n var trimBrsFromTableCell = function (dom, elm) {\n Option.from(dom.getParent(elm, 'td,th')).map(Element.fromDom).each(PaddingBr.trimBlockTrailingBr);\n };\n var reduceInlineTextElements = function (editor, merge) {\n var textInlineElements = editor.schema.getTextInlineElements();\n var dom = editor.dom;\n if (merge) {\n var root_1 = editor.getBody(), elementUtils_1 = new ElementUtils(dom);\n Tools.each(dom.select('*[data-mce-fragment]'), function (node) {\n for (var testNode = node.parentNode; testNode && testNode !== root_1; testNode = testNode.parentNode) {\n if (textInlineElements[node.nodeName.toLowerCase()] && elementUtils_1.compare(testNode, node)) {\n dom.remove(node, true);\n }\n }\n });\n }\n };\n var markFragmentElements = function (fragment) {\n var node = fragment;\n while (node = node.walk()) {\n if (node.type === 1) {\n node.attr('data-mce-fragment', '1');\n }\n }\n };\n var umarkFragmentElements = function (elm) {\n Tools.each(elm.getElementsByTagName('*'), function (elm) {\n elm.removeAttribute('data-mce-fragment');\n });\n };\n var isPartOfFragment = function (node) {\n return !!node.getAttribute('data-mce-fragment');\n };\n var canHaveChildren = function (editor, node) {\n return node && !editor.schema.getShortEndedElements()[node.nodeName];\n };\n var moveSelectionToMarker = function (editor, marker) {\n var parentEditableFalseElm, parentBlock, nextRng;\n var dom = editor.dom, selection = editor.selection;\n var node, node2;\n var getContentEditableFalseParent = function (node) {\n var root = editor.getBody();\n for (; node && node !== root; node = node.parentNode) {\n if (editor.dom.getContentEditable(node) === 'false') {\n return node;\n }\n }\n return null;\n };\n if (!marker) {\n return;\n }\n editor.selection.scrollIntoView(marker);\n parentEditableFalseElm = getContentEditableFalseParent(marker);\n if (parentEditableFalseElm) {\n dom.remove(marker);\n selection.select(parentEditableFalseElm);\n return;\n }\n var rng = dom.createRng();\n node = marker.previousSibling;\n if (node && node.nodeType === 3) {\n rng.setStart(node, node.nodeValue.length);\n if (!Env.ie) {\n node2 = marker.nextSibling;\n if (node2 && node2.nodeType === 3) {\n node.appendData(node2.data);\n node2.parentNode.removeChild(node2);\n }\n }\n } else {\n rng.setStartBefore(marker);\n rng.setEndBefore(marker);\n }\n var findNextCaretRng = function (rng) {\n var caretPos = CaretPosition$1.fromRangeStart(rng);\n var caretWalker = CaretWalker(editor.getBody());\n caretPos = caretWalker.next(caretPos);\n if (caretPos) {\n return caretPos.toRange();\n }\n };\n parentBlock = dom.getParent(marker, dom.isBlock);\n dom.remove(marker);\n if (parentBlock && dom.isEmpty(parentBlock)) {\n editor.$(parentBlock).empty();\n rng.setStart(parentBlock, 0);\n rng.setEnd(parentBlock, 0);\n if (!isTableCell$2(parentBlock) && !isPartOfFragment(parentBlock) && (nextRng = findNextCaretRng(rng))) {\n rng = nextRng;\n dom.remove(parentBlock);\n } else {\n dom.add(parentBlock, dom.create('br', { 'data-mce-bogus': '1' }));\n }\n }\n selection.setRng(rng);\n };\n var insertHtmlAtCaret = function (editor, value, details) {\n var parser, serializer, parentNode, rootNode, fragment, args;\n var marker, rng, node, bookmarkHtml, merge;\n var selection = editor.selection, dom = editor.dom;\n if (/^ | $/.test(value)) {\n value = trimOrPadLeftRight(selection.getRng(), value);\n }\n parser = editor.parser;\n merge = details.merge;\n serializer = HtmlSerializer({ validate: editor.settings.validate }, editor.schema);\n bookmarkHtml = '';\n args = {\n content: value,\n format: 'html',\n selection: true,\n paste: details.paste\n };\n args = editor.fire('BeforeSetContent', args);\n if (args.isDefaultPrevented()) {\n editor.fire('SetContent', {\n content: args.content,\n format: 'html',\n selection: true,\n paste: details.paste\n });\n return;\n }\n value = args.content;\n if (value.indexOf('{$caret}') === -1) {\n value += '{$caret}';\n }\n value = value.replace(/\\{\\$caret\\}/, bookmarkHtml);\n rng = selection.getRng();\n var caretElement = rng.startContainer || (rng.parentElement ? rng.parentElement() : null);\n var body = editor.getBody();\n if (caretElement === body && selection.isCollapsed()) {\n if (dom.isBlock(body.firstChild) && canHaveChildren(editor, body.firstChild) && dom.isEmpty(body.firstChild)) {\n rng = dom.createRng();\n rng.setStart(body.firstChild, 0);\n rng.setEnd(body.firstChild, 0);\n selection.setRng(rng);\n }\n }\n if (!selection.isCollapsed()) {\n editor.selection.setRng(RangeNormalizer.normalize(editor.selection.getRng()));\n editor.getDoc().execCommand('Delete', false, null);\n value = trimNbspAfterDeleteAndPadValue(editor.selection.getRng(), value);\n }\n parentNode = selection.getNode();\n var parserArgs = {\n context: parentNode.nodeName.toLowerCase(),\n data: details.data,\n insert: true\n };\n fragment = parser.parse(value, parserArgs);\n if (details.paste === true && InsertList.isListFragment(editor.schema, fragment) && InsertList.isParentBlockLi(dom, parentNode)) {\n rng = InsertList.insertAtCaret(serializer, dom, editor.selection.getRng(), fragment);\n editor.selection.setRng(rng);\n editor.fire('SetContent', args);\n return;\n }\n markFragmentElements(fragment);\n node = fragment.lastChild;\n if (node.attr('id') === 'mce_marker') {\n marker = node;\n for (node = node.prev; node; node = node.walk(true)) {\n if (node.type === 3 || !dom.isBlock(node.name)) {\n if (editor.schema.isValidChild(node.parent.name, 'span')) {\n node.parent.insert(marker, node, node.name === 'br');\n }\n break;\n }\n }\n }\n editor._selectionOverrides.showBlockCaretContainer(parentNode);\n if (!parserArgs.invalid) {\n value = serializer.serialize(fragment);\n validInsertion(editor, value, parentNode);\n } else {\n selectionSetContent(editor, bookmarkHtml);\n parentNode = selection.getNode();\n rootNode = editor.getBody();\n if (parentNode.nodeType === 9) {\n parentNode = node = rootNode;\n } else {\n node = parentNode;\n }\n while (node !== rootNode) {\n parentNode = node;\n node = node.parentNode;\n }\n value = parentNode === rootNode ? rootNode.innerHTML : dom.getOuterHTML(parentNode);\n value = serializer.serialize(parser.parse(value.replace(//i, function () {\n return serializer.serialize(fragment);\n })));\n if (parentNode === rootNode) {\n dom.setHTML(rootNode, value);\n } else {\n dom.setOuterHTML(parentNode, value);\n }\n }\n reduceInlineTextElements(editor, merge);\n moveSelectionToMarker(editor, dom.get('mce_marker'));\n umarkFragmentElements(editor.getBody());\n trimBrsFromTableCell(editor.dom, editor.selection.getStart());\n editor.fire('SetContent', args);\n editor.addVisual();\n };\n var processValue = function (value) {\n var details;\n if (typeof value !== 'string') {\n details = Tools.extend({\n paste: value.paste,\n data: { paste: value.paste }\n }, value);\n return {\n content: value.content,\n details: details\n };\n }\n return {\n content: value,\n details: {}\n };\n };\n var insertAtCaret$1 = function (editor, value) {\n var result = processValue(value);\n insertHtmlAtCaret(editor, result.content, result.details);\n };\n var InsertContent = { insertAtCaret: insertAtCaret$1 };\n\n var strongRtl = /[\\u0591-\\u07FF\\uFB1D-\\uFDFF\\uFE70-\\uFEFC]/;\n var hasStrongRtl = function (text) {\n return strongRtl.test(text);\n };\n\n var getBodySetting = function (editor, name, defaultValue) {\n var value = editor.getParam(name, defaultValue);\n if (value.indexOf('=') !== -1) {\n var bodyObj = editor.getParam(name, '', 'hash');\n return bodyObj.hasOwnProperty(editor.id) ? bodyObj[editor.id] : defaultValue;\n } else {\n return value;\n }\n };\n var getIframeAttrs = function (editor) {\n return editor.getParam('iframe_attrs', {});\n };\n var getDocType = function (editor) {\n return editor.getParam('doctype', '');\n };\n var getDocumentBaseUrl = function (editor) {\n return editor.getParam('document_base_url', '');\n };\n var getBodyId = function (editor) {\n return getBodySetting(editor, 'body_id', 'tinymce');\n };\n var getBodyClass = function (editor) {\n return getBodySetting(editor, 'body_class', '');\n };\n var getContentSecurityPolicy = function (editor) {\n return editor.getParam('content_security_policy', '');\n };\n var shouldPutBrInPre = function (editor) {\n return editor.getParam('br_in_pre', true);\n };\n var getForcedRootBlock = function (editor) {\n if (editor.getParam('force_p_newlines', false)) {\n return 'p';\n }\n var block = editor.getParam('forced_root_block', 'p');\n return block === false ? '' : block;\n };\n var getForcedRootBlockAttrs = function (editor) {\n return editor.getParam('forced_root_block_attrs', {});\n };\n var getBrNewLineSelector = function (editor) {\n return editor.getParam('br_newline_selector', '.mce-toc h2,figcaption,caption');\n };\n var getNoNewLineSelector = function (editor) {\n return editor.getParam('no_newline_selector', '');\n };\n var shouldKeepStyles = function (editor) {\n return editor.getParam('keep_styles', true);\n };\n var shouldEndContainerOnEmptyBlock = function (editor) {\n return editor.getParam('end_container_on_empty_block', false);\n };\n var getFontStyleValues = function (editor) {\n return Tools.explode(editor.getParam('font_size_style_values', ''));\n };\n var getFontSizeClasses = function (editor) {\n return Tools.explode(editor.getParam('font_size_classes', ''));\n };\n var getImagesDataImgFilter = function (editor) {\n return editor.getParam('images_dataimg_filter', constant(true), 'function');\n };\n var isAutomaticUploadsEnabled = function (editor) {\n return editor.getParam('automatic_uploads', true, 'boolean');\n };\n var shouldReuseFileName = function (editor) {\n return editor.getParam('images_reuse_filename', false, 'boolean');\n };\n var shouldReplaceBlobUris = function (editor) {\n return editor.getParam('images_replace_blob_uris', true, 'boolean');\n };\n var getImageUploadUrl = function (editor) {\n return editor.getParam('images_upload_url', '', 'string');\n };\n var getImageUploadBasePath = function (editor) {\n return editor.getParam('images_upload_base_path', '', 'string');\n };\n var getImagesUploadCredentials = function (editor) {\n return editor.getParam('images_upload_credentials', false, 'boolean');\n };\n var getImagesUploadHandler = function (editor) {\n return editor.getParam('images_upload_handler', null, 'function');\n };\n var shouldUseContentCssCors = function (editor) {\n return editor.getParam('content_css_cors', false, 'boolean');\n };\n var getInlineBoundarySelector = function (editor) {\n return editor.getParam('inline_boundaries_selector', 'a[href],code,.mce-annotation', 'string');\n };\n var Settings = {\n getIframeAttrs: getIframeAttrs,\n getDocType: getDocType,\n getDocumentBaseUrl: getDocumentBaseUrl,\n getBodyId: getBodyId,\n getBodyClass: getBodyClass,\n getContentSecurityPolicy: getContentSecurityPolicy,\n shouldPutBrInPre: shouldPutBrInPre,\n getForcedRootBlock: getForcedRootBlock,\n getForcedRootBlockAttrs: getForcedRootBlockAttrs,\n getBrNewLineSelector: getBrNewLineSelector,\n getNoNewLineSelector: getNoNewLineSelector,\n shouldKeepStyles: shouldKeepStyles,\n shouldEndContainerOnEmptyBlock: shouldEndContainerOnEmptyBlock,\n getFontStyleValues: getFontStyleValues,\n getFontSizeClasses: getFontSizeClasses,\n getImagesDataImgFilter: getImagesDataImgFilter,\n isAutomaticUploadsEnabled: isAutomaticUploadsEnabled,\n shouldReuseFileName: shouldReuseFileName,\n shouldReplaceBlobUris: shouldReplaceBlobUris,\n getImageUploadUrl: getImageUploadUrl,\n getImageUploadBasePath: getImageUploadBasePath,\n getImagesUploadCredentials: getImagesUploadCredentials,\n getImagesUploadHandler: getImagesUploadHandler,\n shouldUseContentCssCors: shouldUseContentCssCors,\n getInlineBoundarySelector: getInlineBoundarySelector\n };\n\n var isInlineTarget = function (editor, elm) {\n return is$1(Element.fromDom(elm), Settings.getInlineBoundarySelector(editor));\n };\n var isRtl = function (element) {\n return DOMUtils$1.DOM.getStyle(element, 'direction', true) === 'rtl' || hasStrongRtl(element.textContent);\n };\n var findInlineParents = function (isInlineTarget, rootNode, pos) {\n return filter(DOMUtils$1.DOM.getParents(pos.container(), '*', rootNode), isInlineTarget);\n };\n var findRootInline = function (isInlineTarget, rootNode, pos) {\n var parents = findInlineParents(isInlineTarget, rootNode, pos);\n return Option.from(parents[parents.length - 1]);\n };\n var hasSameParentBlock = function (rootNode, node1, node2) {\n var block1 = getParentBlock(node1, rootNode);\n var block2 = getParentBlock(node2, rootNode);\n return block1 && block1 === block2;\n };\n var isAtZwsp = function (pos) {\n return isBeforeInline(pos) || isAfterInline(pos);\n };\n var normalizePosition = function (forward, pos) {\n if (!pos) {\n return pos;\n }\n var container = pos.container(), offset = pos.offset();\n if (forward) {\n if (isCaretContainerInline(container)) {\n if (NodeType.isText(container.nextSibling)) {\n return CaretPosition$1(container.nextSibling, 0);\n } else {\n return CaretPosition$1.after(container);\n }\n } else {\n return isBeforeInline(pos) ? CaretPosition$1(container, offset + 1) : pos;\n }\n } else {\n if (isCaretContainerInline(container)) {\n if (NodeType.isText(container.previousSibling)) {\n return CaretPosition$1(container.previousSibling, container.previousSibling.data.length);\n } else {\n return CaretPosition$1.before(container);\n }\n } else {\n return isAfterInline(pos) ? CaretPosition$1(container, offset - 1) : pos;\n }\n }\n };\n var normalizeForwards = curry(normalizePosition, true);\n var normalizeBackwards = curry(normalizePosition, false);\n var InlineUtils = {\n isInlineTarget: isInlineTarget,\n findRootInline: findRootInline,\n isRtl: isRtl,\n isAtZwsp: isAtZwsp,\n normalizePosition: normalizePosition,\n normalizeForwards: normalizeForwards,\n normalizeBackwards: normalizeBackwards,\n hasSameParentBlock: hasSameParentBlock\n };\n\n var isBeforeRoot = function (rootNode) {\n return function (elm) {\n return eq(rootNode, Element.fromDom(elm.dom().parentNode));\n };\n };\n var getParentBlock$1 = function (rootNode, elm) {\n return contains$3(rootNode, elm) ? closest(elm, function (element) {\n return isTextBlock(element) || isListItem(element);\n }, isBeforeRoot(rootNode)) : Option.none();\n };\n var placeCaretInEmptyBody = function (editor) {\n var body = editor.getBody();\n var node = body.firstChild && editor.dom.isBlock(body.firstChild) ? body.firstChild : body;\n editor.selection.setCursorLocation(node, 0);\n };\n var paddEmptyBody = function (editor) {\n if (editor.dom.isEmpty(editor.getBody())) {\n editor.setContent('');\n placeCaretInEmptyBody(editor);\n }\n };\n var willDeleteLastPositionInElement = function (forward, fromPos, elm) {\n return lift2(CaretFinder.firstPositionIn(elm), CaretFinder.lastPositionIn(elm), function (firstPos, lastPos) {\n var normalizedFirstPos = InlineUtils.normalizePosition(true, firstPos);\n var normalizedLastPos = InlineUtils.normalizePosition(false, lastPos);\n var normalizedFromPos = InlineUtils.normalizePosition(false, fromPos);\n if (forward) {\n return CaretFinder.nextPosition(elm, normalizedFromPos).map(function (nextPos) {\n return nextPos.isEqual(normalizedLastPos) && fromPos.isEqual(normalizedFirstPos);\n }).getOr(false);\n } else {\n return CaretFinder.prevPosition(elm, normalizedFromPos).map(function (prevPos) {\n return prevPos.isEqual(normalizedFirstPos) && fromPos.isEqual(normalizedLastPos);\n }).getOr(false);\n }\n }).getOr(true);\n };\n var DeleteUtils = {\n getParentBlock: getParentBlock$1,\n paddEmptyBody: paddEmptyBody,\n willDeleteLastPositionInElement: willDeleteLastPositionInElement\n };\n\n var ancestor$2 = function (scope, selector, isRoot) {\n return ancestor$1(scope, selector, isRoot).isSome();\n };\n\n var hasWhitespacePreserveParent = function (rootNode, node) {\n var rootElement = Element.fromDom(rootNode);\n var startNode = Element.fromDom(node);\n return ancestor$2(startNode, 'pre,code', curry(eq, rootElement));\n };\n var isWhitespace = function (rootNode, node) {\n return NodeType.isText(node) && /^[ \\t\\r\\n]*$/.test(node.data) && hasWhitespacePreserveParent(rootNode, node) === false;\n };\n var isNamedAnchor = function (node) {\n return NodeType.isElement(node) && node.nodeName === 'A' && node.hasAttribute('name');\n };\n var isContent = function (rootNode, node) {\n return isCaretCandidate(node) && isWhitespace(rootNode, node) === false || isNamedAnchor(node) || isBookmark(node);\n };\n var isBookmark = NodeType.hasAttribute('data-mce-bookmark');\n var isBogus$2 = NodeType.hasAttribute('data-mce-bogus');\n var isBogusAll$1 = NodeType.hasAttributeValue('data-mce-bogus', 'all');\n var isEmptyNode = function (targetNode) {\n var walker, node, brCount = 0;\n if (isContent(targetNode, targetNode)) {\n return false;\n } else {\n node = targetNode.firstChild;\n if (!node) {\n return true;\n }\n walker = new TreeWalker(node, targetNode);\n do {\n if (isBogusAll$1(node)) {\n node = walker.next(true);\n continue;\n }\n if (isBogus$2(node)) {\n node = walker.next();\n continue;\n }\n if (NodeType.isBr(node)) {\n brCount++;\n node = walker.next();\n continue;\n }\n if (isContent(targetNode, node)) {\n return false;\n }\n node = walker.next();\n } while (node);\n return brCount <= 1;\n }\n };\n var isEmpty$1 = function (elm) {\n return isEmptyNode(elm.dom());\n };\n var Empty = { isEmpty: isEmpty$1 };\n\n var BlockPosition = Immutable('block', 'position');\n var BlockBoundary = Immutable('from', 'to');\n var getBlockPosition = function (rootNode, pos) {\n var rootElm = Element.fromDom(rootNode);\n var containerElm = Element.fromDom(pos.container());\n return DeleteUtils.getParentBlock(rootElm, containerElm).map(function (block) {\n return BlockPosition(block, pos);\n });\n };\n var isDifferentBlocks = function (blockBoundary) {\n return eq(blockBoundary.from().block(), blockBoundary.to().block()) === false;\n };\n var hasSameParent = function (blockBoundary) {\n return parent(blockBoundary.from().block()).bind(function (parent1) {\n return parent(blockBoundary.to().block()).filter(function (parent2) {\n return eq(parent1, parent2);\n });\n }).isSome();\n };\n var isEditable = function (blockBoundary) {\n return NodeType.isContentEditableFalse(blockBoundary.from().block().dom()) === false && NodeType.isContentEditableFalse(blockBoundary.to().block().dom()) === false;\n };\n var skipLastBr = function (rootNode, forward, blockPosition) {\n if (NodeType.isBr(blockPosition.position().getNode()) && Empty.isEmpty(blockPosition.block()) === false) {\n return CaretFinder.positionIn(false, blockPosition.block().dom()).bind(function (lastPositionInBlock) {\n if (lastPositionInBlock.isEqual(blockPosition.position())) {\n return CaretFinder.fromPosition(forward, rootNode, lastPositionInBlock).bind(function (to) {\n return getBlockPosition(rootNode, to);\n });\n } else {\n return Option.some(blockPosition);\n }\n }).getOr(blockPosition);\n } else {\n return blockPosition;\n }\n };\n var readFromRange = function (rootNode, forward, rng) {\n var fromBlockPos = getBlockPosition(rootNode, CaretPosition$1.fromRangeStart(rng));\n var toBlockPos = fromBlockPos.bind(function (blockPos) {\n return CaretFinder.fromPosition(forward, rootNode, blockPos.position()).bind(function (to) {\n return getBlockPosition(rootNode, to).map(function (blockPos) {\n return skipLastBr(rootNode, forward, blockPos);\n });\n });\n });\n return lift2(fromBlockPos, toBlockPos, BlockBoundary).filter(function (blockBoundary) {\n return isDifferentBlocks(blockBoundary) && hasSameParent(blockBoundary) && isEditable(blockBoundary);\n });\n };\n var read$1 = function (rootNode, forward, rng) {\n return rng.collapsed ? readFromRange(rootNode, forward, rng) : Option.none();\n };\n var BlockMergeBoundary = { read: read$1 };\n\n var dropLast = function (xs) {\n return xs.slice(0, -1);\n };\n var parentsUntil$1 = function (start, root, predicate) {\n if (contains$3(root, start)) {\n return dropLast(parents(start, function (elm) {\n return predicate(elm) || eq(elm, root);\n }));\n } else {\n return [];\n }\n };\n var parents$1 = function (start, root) {\n return parentsUntil$1(start, root, constant(false));\n };\n var parentsAndSelf = function (start, root) {\n return [start].concat(parents$1(start, root));\n };\n var Parents = {\n parentsUntil: parentsUntil$1,\n parents: parents$1,\n parentsAndSelf: parentsAndSelf\n };\n\n var getChildrenUntilBlockBoundary = function (block) {\n var children$1 = children(block);\n return findIndex(children$1, isBlock).fold(function () {\n return children$1;\n }, function (index) {\n return children$1.slice(0, index);\n });\n };\n var extractChildren = function (block) {\n var children = getChildrenUntilBlockBoundary(block);\n each(children, remove$1);\n return children;\n };\n var removeEmptyRoot = function (rootNode, block) {\n var parents = Parents.parentsAndSelf(block, rootNode);\n return find(parents.reverse(), Empty.isEmpty).each(remove$1);\n };\n var isEmptyBefore = function (el) {\n return filter(prevSiblings(el), function (el) {\n return !Empty.isEmpty(el);\n }).length === 0;\n };\n var nestedBlockMerge = function (rootNode, fromBlock, toBlock, insertionPoint) {\n if (Empty.isEmpty(toBlock)) {\n PaddingBr.fillWithPaddingBr(toBlock);\n return CaretFinder.firstPositionIn(toBlock.dom());\n }\n if (isEmptyBefore(insertionPoint) && Empty.isEmpty(fromBlock)) {\n before(insertionPoint, Element.fromTag('br'));\n }\n var position = CaretFinder.prevPosition(toBlock.dom(), CaretPosition$1.before(insertionPoint.dom()));\n each(extractChildren(fromBlock), function (child) {\n before(insertionPoint, child);\n });\n removeEmptyRoot(rootNode, fromBlock);\n return position;\n };\n var sidelongBlockMerge = function (rootNode, fromBlock, toBlock) {\n if (Empty.isEmpty(toBlock)) {\n remove$1(toBlock);\n if (Empty.isEmpty(fromBlock)) {\n PaddingBr.fillWithPaddingBr(fromBlock);\n }\n return CaretFinder.firstPositionIn(fromBlock.dom());\n }\n var position = CaretFinder.lastPositionIn(toBlock.dom());\n each(extractChildren(fromBlock), function (child) {\n append(toBlock, child);\n });\n removeEmptyRoot(rootNode, fromBlock);\n return position;\n };\n var findInsertionPoint = function (toBlock, block) {\n var parentsAndSelf = Parents.parentsAndSelf(block, toBlock);\n return Option.from(parentsAndSelf[parentsAndSelf.length - 1]);\n };\n var getInsertionPoint = function (fromBlock, toBlock) {\n return contains$3(toBlock, fromBlock) ? findInsertionPoint(toBlock, fromBlock) : Option.none();\n };\n var trimBr = function (first, block) {\n CaretFinder.positionIn(first, block.dom()).map(function (position) {\n return position.getNode();\n }).map(Element.fromDom).filter(isBr).each(remove$1);\n };\n var mergeBlockInto = function (rootNode, fromBlock, toBlock) {\n trimBr(true, fromBlock);\n trimBr(false, toBlock);\n return getInsertionPoint(fromBlock, toBlock).fold(curry(sidelongBlockMerge, rootNode, fromBlock, toBlock), curry(nestedBlockMerge, rootNode, fromBlock, toBlock));\n };\n var mergeBlocks = function (rootNode, forward, block1, block2) {\n return forward ? mergeBlockInto(rootNode, block2, block1) : mergeBlockInto(rootNode, block1, block2);\n };\n var MergeBlocks = { mergeBlocks: mergeBlocks };\n\n var backspaceDelete = function (editor, forward) {\n var position;\n var rootNode = Element.fromDom(editor.getBody());\n position = BlockMergeBoundary.read(rootNode.dom(), forward, editor.selection.getRng()).bind(function (blockBoundary) {\n return MergeBlocks.mergeBlocks(rootNode, forward, blockBoundary.from().block(), blockBoundary.to().block());\n });\n position.each(function (pos) {\n editor.selection.setRng(pos.toRange());\n });\n return position.isSome();\n };\n var BlockBoundaryDelete = { backspaceDelete: backspaceDelete };\n\n var deleteRangeMergeBlocks = function (rootNode, selection) {\n var rng = selection.getRng();\n return lift2(DeleteUtils.getParentBlock(rootNode, Element.fromDom(rng.startContainer)), DeleteUtils.getParentBlock(rootNode, Element.fromDom(rng.endContainer)), function (block1, block2) {\n if (eq(block1, block2) === false) {\n rng.deleteContents();\n MergeBlocks.mergeBlocks(rootNode, true, block1, block2).each(function (pos) {\n selection.setRng(pos.toRange());\n });\n return true;\n } else {\n return false;\n }\n }).getOr(false);\n };\n var isRawNodeInTable = function (root, rawNode) {\n var node = Element.fromDom(rawNode);\n var isRoot = curry(eq, root);\n return ancestor(node, isTableCell, isRoot).isSome();\n };\n var isSelectionInTable = function (root, rng) {\n return isRawNodeInTable(root, rng.startContainer) || isRawNodeInTable(root, rng.endContainer);\n };\n var isEverythingSelected = function (root, rng) {\n var noPrevious = CaretFinder.prevPosition(root.dom(), CaretPosition$1.fromRangeStart(rng)).isNone();\n var noNext = CaretFinder.nextPosition(root.dom(), CaretPosition$1.fromRangeEnd(rng)).isNone();\n return !isSelectionInTable(root, rng) && noPrevious && noNext;\n };\n var emptyEditor = function (editor) {\n editor.setContent('');\n editor.selection.setCursorLocation();\n return true;\n };\n var deleteRange = function (editor) {\n var rootNode = Element.fromDom(editor.getBody());\n var rng = editor.selection.getRng();\n return isEverythingSelected(rootNode, rng) ? emptyEditor(editor) : deleteRangeMergeBlocks(rootNode, editor.selection);\n };\n var backspaceDelete$1 = function (editor, forward) {\n return editor.selection.isCollapsed() ? false : deleteRange(editor);\n };\n var BlockRangeDelete = { backspaceDelete: backspaceDelete$1 };\n\n var generate$1 = function (cases) {\n if (!isArray(cases)) {\n throw new Error('cases must be an array');\n }\n if (cases.length === 0) {\n throw new Error('there must be at least one case');\n }\n var constructors = [];\n var adt = {};\n each(cases, function (acase, count) {\n var keys$1 = keys(acase);\n if (keys$1.length !== 1) {\n throw new Error('one and only one name per case');\n }\n var key = keys$1[0];\n var value = acase[key];\n if (adt[key] !== undefined) {\n throw new Error('duplicate key detected:' + key);\n } else if (key === 'cata') {\n throw new Error('cannot have a case named cata (sorry)');\n } else if (!isArray(value)) {\n throw new Error('case arguments must be an array');\n }\n constructors.push(key);\n adt[key] = function () {\n var argLength = arguments.length;\n if (argLength !== value.length) {\n throw new Error('Wrong number of arguments to case ' + key + '. Expected ' + value.length + ' (' + value + '), got ' + argLength);\n }\n var args = new Array(argLength);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i];\n }\n var match = function (branches) {\n var branchKeys = keys(branches);\n if (constructors.length !== branchKeys.length) {\n throw new Error('Wrong number of arguments to match. Expected: ' + constructors.join(',') + '\\nActual: ' + branchKeys.join(','));\n }\n var allReqd = forall(constructors, function (reqKey) {\n return contains(branchKeys, reqKey);\n });\n if (!allReqd) {\n throw new Error('Not all branches were specified when using match. Specified: ' + branchKeys.join(', ') + '\\nRequired: ' + constructors.join(', '));\n }\n return branches[key].apply(null, args);\n };\n return {\n fold: function () {\n if (arguments.length !== cases.length) {\n throw new Error('Wrong number of arguments to fold. Expected ' + cases.length + ', got ' + arguments.length);\n }\n var target = arguments[count];\n return target.apply(null, args);\n },\n match: match,\n log: function (label) {\n domGlobals.console.log(label, {\n constructors: constructors,\n constructor: key,\n params: args\n });\n }\n };\n };\n });\n return adt;\n };\n var Adt = { generate: generate$1 };\n\n var isBr$5 = function (pos) {\n return getElementFromPosition(pos).exists(isBr);\n };\n var findBr = function (forward, root, pos) {\n var parentBlocks = filter(Parents.parentsAndSelf(Element.fromDom(pos.container()), root), isBlock);\n var scope = head(parentBlocks).getOr(root);\n return CaretFinder.fromPosition(forward, scope.dom(), pos).filter(isBr$5);\n };\n var isBeforeBr = function (root, pos) {\n return getElementFromPosition(pos).exists(isBr) || findBr(true, root, pos).isSome();\n };\n var isAfterBr = function (root, pos) {\n return getElementFromPrevPosition(pos).exists(isBr) || findBr(false, root, pos).isSome();\n };\n var findPreviousBr = curry(findBr, false);\n var findNextBr = curry(findBr, true);\n\n var is$2 = function (expected) {\n return function (actual) {\n return expected === actual;\n };\n };\n var isNbsp = is$2('\\xA0');\n var isWhiteSpace$1 = function (chr) {\n return /^[\\r\\n\\t ]$/.test(chr);\n };\n var isContent$1 = function (chr) {\n return !isWhiteSpace$1(chr) && !isNbsp(chr);\n };\n\n var isChar = function (forward, predicate, pos) {\n return Option.from(pos.container()).filter(NodeType.isText).exists(function (text) {\n var delta = forward ? 0 : -1;\n return predicate(text.data.charAt(pos.offset() + delta));\n });\n };\n var isBeforeSpace = curry(isChar, true, isWhiteSpace$1);\n var isAfterSpace = curry(isChar, false, isWhiteSpace$1);\n var isEmptyText = function (pos) {\n var container = pos.container();\n return NodeType.isText(container) && container.data.length === 0;\n };\n var isNextToContentEditableFalse = function (relativeOffset, caretPosition) {\n var node = getChildNodeAtRelativeOffset(relativeOffset, caretPosition);\n return NodeType.isContentEditableFalse(node) && !NodeType.isBogusAll(node);\n };\n var isBeforeContentEditableFalse = curry(isNextToContentEditableFalse, 0);\n var isAfterContentEditableFalse = curry(isNextToContentEditableFalse, -1);\n var isNextToTable = function (relativeOffset, caretPosition) {\n return NodeType.isTable(getChildNodeAtRelativeOffset(relativeOffset, caretPosition));\n };\n var isBeforeTable = curry(isNextToTable, 0);\n var isAfterTable = curry(isNextToTable, -1);\n\n var isCompoundElement = function (node) {\n return isTableCell(Element.fromDom(node)) || isListItem(Element.fromDom(node));\n };\n var DeleteAction = Adt.generate([\n { remove: ['element'] },\n { moveToElement: ['element'] },\n { moveToPosition: ['position'] }\n ]);\n var isAtContentEditableBlockCaret = function (forward, from) {\n var elm = from.getNode(forward === false);\n var caretLocation = forward ? 'after' : 'before';\n return NodeType.isElement(elm) && elm.getAttribute('data-mce-caret') === caretLocation;\n };\n var isDeleteFromCefDifferentBlocks = function (root, forward, from, to) {\n var inSameBlock = function (elm) {\n return isInline(Element.fromDom(elm)) && !isInSameBlock(from, to, root);\n };\n return getRelativeCefElm(!forward, from).fold(function () {\n return getRelativeCefElm(forward, to).fold(constant(false), inSameBlock);\n }, inSameBlock);\n };\n var deleteEmptyBlockOrMoveToCef = function (root, forward, from, to) {\n var toCefElm = to.getNode(forward === false);\n return DeleteUtils.getParentBlock(Element.fromDom(root), Element.fromDom(from.getNode())).map(function (blockElm) {\n return Empty.isEmpty(blockElm) ? DeleteAction.remove(blockElm.dom()) : DeleteAction.moveToElement(toCefElm);\n }).orThunk(function () {\n return Option.some(DeleteAction.moveToElement(toCefElm));\n });\n };\n var findCefPosition = function (root, forward, from) {\n return CaretFinder.fromPosition(forward, root, from).bind(function (to) {\n if (isCompoundElement(to.getNode())) {\n return Option.none();\n } else if (isDeleteFromCefDifferentBlocks(root, forward, from, to)) {\n return Option.none();\n } else if (forward && NodeType.isContentEditableFalse(to.getNode())) {\n return deleteEmptyBlockOrMoveToCef(root, forward, from, to);\n } else if (forward === false && NodeType.isContentEditableFalse(to.getNode(true))) {\n return deleteEmptyBlockOrMoveToCef(root, forward, from, to);\n } else if (forward && isAfterContentEditableFalse(from)) {\n return Option.some(DeleteAction.moveToPosition(to));\n } else if (forward === false && isBeforeContentEditableFalse(from)) {\n return Option.some(DeleteAction.moveToPosition(to));\n } else {\n return Option.none();\n }\n });\n };\n var getContentEditableBlockAction = function (forward, elm) {\n if (forward && NodeType.isContentEditableFalse(elm.nextSibling)) {\n return Option.some(DeleteAction.moveToElement(elm.nextSibling));\n } else if (forward === false && NodeType.isContentEditableFalse(elm.previousSibling)) {\n return Option.some(DeleteAction.moveToElement(elm.previousSibling));\n } else {\n return Option.none();\n }\n };\n var skipMoveToActionFromInlineCefToContent = function (root, from, deleteAction) {\n return deleteAction.fold(function (elm) {\n return Option.some(DeleteAction.remove(elm));\n }, function (elm) {\n return Option.some(DeleteAction.moveToElement(elm));\n }, function (to) {\n if (isInSameBlock(from, to, root)) {\n return Option.none();\n } else {\n return Option.some(DeleteAction.moveToPosition(to));\n }\n });\n };\n var getContentEditableAction = function (root, forward, from) {\n if (isAtContentEditableBlockCaret(forward, from)) {\n return getContentEditableBlockAction(forward, from.getNode(forward === false)).fold(function () {\n return findCefPosition(root, forward, from);\n }, Option.some);\n } else {\n return findCefPosition(root, forward, from).bind(function (deleteAction) {\n return skipMoveToActionFromInlineCefToContent(root, from, deleteAction);\n });\n }\n };\n var read$2 = function (root, forward, rng) {\n var normalizedRange = normalizeRange(forward ? 1 : -1, root, rng);\n var from = CaretPosition$1.fromRangeStart(normalizedRange);\n var rootElement = Element.fromDom(root);\n if (forward === false && isAfterContentEditableFalse(from)) {\n return Option.some(DeleteAction.remove(from.getNode(true)));\n } else if (forward && isBeforeContentEditableFalse(from)) {\n return Option.some(DeleteAction.remove(from.getNode()));\n } else if (forward === false && isBeforeContentEditableFalse(from) && isAfterBr(rootElement, from)) {\n return findPreviousBr(rootElement, from).map(function (br) {\n return DeleteAction.remove(br.getNode());\n });\n } else if (forward && isAfterContentEditableFalse(from) && isBeforeBr(rootElement, from)) {\n return findNextBr(rootElement, from).map(function (br) {\n return DeleteAction.remove(br.getNode());\n });\n } else {\n return getContentEditableAction(root, forward, from);\n }\n };\n\n var isCollapsibleWhitespace = function (c) {\n return ' \\f\\n\\r\\t\\x0B'.indexOf(c) !== -1;\n };\n var normalizeContent = function (content, isStartOfContent, isEndOfContent) {\n var result = foldl(content.split(''), function (acc, c) {\n if (isCollapsibleWhitespace(c) || c === '\\xA0') {\n if (acc.previousCharIsSpace || acc.str === '' && isStartOfContent || acc.str.length === content.length - 1 && isEndOfContent) {\n return {\n previousCharIsSpace: false,\n str: acc.str + '\\xA0'\n };\n } else {\n return {\n previousCharIsSpace: true,\n str: acc.str + ' '\n };\n }\n } else {\n return {\n previousCharIsSpace: false,\n str: acc.str + c\n };\n }\n }, {\n previousCharIsSpace: false,\n str: ''\n });\n return result.str;\n };\n var normalize$1 = function (node, offset, count) {\n if (count === 0) {\n return;\n }\n var whitespace = node.data.slice(offset, offset + count);\n var isEndOfContent = offset + count >= node.data.length;\n var isStartOfContent = offset === 0;\n node.replaceData(offset, count, normalizeContent(whitespace, isStartOfContent, isEndOfContent));\n };\n var normalizeWhitespaceAfter = function (node, offset) {\n var content = node.data.slice(offset);\n var whitespaceCount = content.length - lTrim(content).length;\n return normalize$1(node, offset, whitespaceCount);\n };\n var normalizeWhitespaceBefore = function (node, offset) {\n var content = node.data.slice(0, offset);\n var whitespaceCount = content.length - rTrim(content).length;\n return normalize$1(node, offset - whitespaceCount, whitespaceCount);\n };\n var mergeTextNodes = function (prevNode, nextNode, normalizeWhitespace) {\n var whitespaceOffset = rTrim(prevNode.data).length;\n prevNode.appendData(nextNode.data);\n remove$1(Element.fromDom(nextNode));\n if (normalizeWhitespace) {\n normalizeWhitespaceAfter(prevNode, whitespaceOffset);\n }\n return prevNode;\n };\n\n var needsReposition = function (pos, elm) {\n var container = pos.container();\n var offset = pos.offset();\n return CaretPosition$1.isTextPosition(pos) === false && container === elm.parentNode && offset > CaretPosition$1.before(elm).offset();\n };\n var reposition = function (elm, pos) {\n return needsReposition(pos, elm) ? CaretPosition$1(pos.container(), pos.offset() - 1) : pos;\n };\n var beforeOrStartOf = function (node) {\n return NodeType.isText(node) ? CaretPosition$1(node, 0) : CaretPosition$1.before(node);\n };\n var afterOrEndOf = function (node) {\n return NodeType.isText(node) ? CaretPosition$1(node, node.data.length) : CaretPosition$1.after(node);\n };\n var getPreviousSiblingCaretPosition = function (elm) {\n if (isCaretCandidate(elm.previousSibling)) {\n return Option.some(afterOrEndOf(elm.previousSibling));\n } else {\n return elm.previousSibling ? CaretFinder.lastPositionIn(elm.previousSibling) : Option.none();\n }\n };\n var getNextSiblingCaretPosition = function (elm) {\n if (isCaretCandidate(elm.nextSibling)) {\n return Option.some(beforeOrStartOf(elm.nextSibling));\n } else {\n return elm.nextSibling ? CaretFinder.firstPositionIn(elm.nextSibling) : Option.none();\n }\n };\n var findCaretPositionBackwardsFromElm = function (rootElement, elm) {\n var startPosition = CaretPosition$1.before(elm.previousSibling ? elm.previousSibling : elm.parentNode);\n return CaretFinder.prevPosition(rootElement, startPosition).fold(function () {\n return CaretFinder.nextPosition(rootElement, CaretPosition$1.after(elm));\n }, Option.some);\n };\n var findCaretPositionForwardsFromElm = function (rootElement, elm) {\n return CaretFinder.nextPosition(rootElement, CaretPosition$1.after(elm)).fold(function () {\n return CaretFinder.prevPosition(rootElement, CaretPosition$1.before(elm));\n }, Option.some);\n };\n var findCaretPositionBackwards = function (rootElement, elm) {\n return getPreviousSiblingCaretPosition(elm).orThunk(function () {\n return getNextSiblingCaretPosition(elm);\n }).orThunk(function () {\n return findCaretPositionBackwardsFromElm(rootElement, elm);\n });\n };\n var findCaretPositionForward = function (rootElement, elm) {\n return getNextSiblingCaretPosition(elm).orThunk(function () {\n return getPreviousSiblingCaretPosition(elm);\n }).orThunk(function () {\n return findCaretPositionForwardsFromElm(rootElement, elm);\n });\n };\n var findCaretPosition$1 = function (forward, rootElement, elm) {\n return forward ? findCaretPositionForward(rootElement, elm) : findCaretPositionBackwards(rootElement, elm);\n };\n var findCaretPosOutsideElmAfterDelete = function (forward, rootElement, elm) {\n return findCaretPosition$1(forward, rootElement, elm).map(curry(reposition, elm));\n };\n var setSelection = function (editor, forward, pos) {\n pos.fold(function () {\n editor.focus();\n }, function (pos) {\n editor.selection.setRng(pos.toRange(), forward);\n });\n };\n var eqRawNode = function (rawNode) {\n return function (elm) {\n return elm.dom() === rawNode;\n };\n };\n var isBlock$2 = function (editor, elm) {\n return elm && editor.schema.getBlockElements().hasOwnProperty(name(elm));\n };\n var paddEmptyBlock = function (elm) {\n if (Empty.isEmpty(elm)) {\n var br = Element.fromHtml('
');\n empty(elm);\n append(elm, br);\n return Option.some(CaretPosition$1.before(br.dom()));\n } else {\n return Option.none();\n }\n };\n var deleteNormalized = function (elm, afterDeletePosOpt, normalizeWhitespace) {\n var prevTextOpt = prevSibling(elm).filter(isText);\n var nextTextOpt = nextSibling(elm).filter(isText);\n remove$1(elm);\n return lift3(prevTextOpt, nextTextOpt, afterDeletePosOpt, function (prev, next, pos) {\n var prevNode = prev.dom(), nextNode = next.dom();\n var offset = prevNode.data.length;\n mergeTextNodes(prevNode, nextNode, normalizeWhitespace);\n return pos.container() === nextNode ? CaretPosition$1(prevNode, offset) : pos;\n }).orThunk(function () {\n if (normalizeWhitespace) {\n prevTextOpt.each(function (elm) {\n return normalizeWhitespaceBefore(elm.dom(), elm.dom().length);\n });\n nextTextOpt.each(function (elm) {\n return normalizeWhitespaceAfter(elm.dom(), 0);\n });\n }\n return afterDeletePosOpt;\n });\n };\n var isInlineElement = function (editor, element) {\n return has(editor.schema.getTextInlineElements(), name(element));\n };\n var deleteElement = function (editor, forward, elm, moveCaret) {\n if (moveCaret === void 0) {\n moveCaret = true;\n }\n var afterDeletePos = findCaretPosOutsideElmAfterDelete(forward, editor.getBody(), elm.dom());\n var parentBlock = ancestor(elm, curry(isBlock$2, editor), eqRawNode(editor.getBody()));\n var normalizedAfterDeletePos = deleteNormalized(elm, afterDeletePos, isInlineElement(editor, elm));\n if (editor.dom.isEmpty(editor.getBody())) {\n editor.setContent('');\n editor.selection.setCursorLocation();\n } else {\n parentBlock.bind(paddEmptyBlock).fold(function () {\n if (moveCaret) {\n setSelection(editor, forward, normalizedAfterDeletePos);\n }\n }, function (paddPos) {\n if (moveCaret) {\n setSelection(editor, forward, Option.some(paddPos));\n }\n });\n }\n };\n var DeleteElement = { deleteElement: deleteElement };\n\n var deleteElement$1 = function (editor, forward) {\n return function (element) {\n editor._selectionOverrides.hideFakeCaret();\n DeleteElement.deleteElement(editor, forward, Element.fromDom(element));\n return true;\n };\n };\n var moveToElement = function (editor, forward) {\n return function (element) {\n var pos = forward ? CaretPosition$1.before(element) : CaretPosition$1.after(element);\n editor.selection.setRng(pos.toRange());\n return true;\n };\n };\n var moveToPosition = function (editor) {\n return function (pos) {\n editor.selection.setRng(pos.toRange());\n return true;\n };\n };\n var backspaceDeleteCaret = function (editor, forward) {\n var result = read$2(editor.getBody(), forward, editor.selection.getRng()).map(function (deleteAction) {\n return deleteAction.fold(deleteElement$1(editor, forward), moveToElement(editor, forward), moveToPosition(editor));\n });\n return result.getOr(false);\n };\n var deleteOffscreenSelection = function (rootElement) {\n each(descendants$1(rootElement, '.mce-offscreen-selection'), remove$1);\n };\n var backspaceDeleteRange = function (editor, forward) {\n var selectedElement = editor.selection.getNode();\n if (NodeType.isContentEditableFalse(selectedElement)) {\n deleteOffscreenSelection(Element.fromDom(editor.getBody()));\n DeleteElement.deleteElement(editor, forward, Element.fromDom(editor.selection.getNode()));\n DeleteUtils.paddEmptyBody(editor);\n return true;\n } else {\n return false;\n }\n };\n var getContentEditableRoot = function (root, node) {\n while (node && node !== root) {\n if (NodeType.isContentEditableTrue(node) || NodeType.isContentEditableFalse(node)) {\n return node;\n }\n node = node.parentNode;\n }\n return null;\n };\n var paddEmptyElement = function (editor) {\n var br;\n var ceRoot = getContentEditableRoot(editor.getBody(), editor.selection.getNode());\n if (NodeType.isContentEditableTrue(ceRoot) && editor.dom.isBlock(ceRoot) && editor.dom.isEmpty(ceRoot)) {\n br = editor.dom.create('br', { 'data-mce-bogus': '1' });\n editor.dom.setHTML(ceRoot, '');\n ceRoot.appendChild(br);\n editor.selection.setRng(CaretPosition$1.before(br).toRange());\n }\n return true;\n };\n var backspaceDelete$2 = function (editor, forward) {\n if (editor.selection.isCollapsed()) {\n return backspaceDeleteCaret(editor, forward);\n } else {\n return backspaceDeleteRange(editor, forward);\n }\n };\n var CefDelete = {\n backspaceDelete: backspaceDelete$2,\n paddEmptyElement: paddEmptyElement\n };\n\n var isText$8 = NodeType.isText;\n var startsWithCaretContainer$1 = function (node) {\n return isText$8(node) && node.data[0] === Zwsp.ZWSP;\n };\n var endsWithCaretContainer$1 = function (node) {\n return isText$8(node) && node.data[node.data.length - 1] === Zwsp.ZWSP;\n };\n var createZwsp = function (node) {\n return node.ownerDocument.createTextNode(Zwsp.ZWSP);\n };\n var insertBefore$1 = function (node) {\n if (isText$8(node.previousSibling)) {\n if (endsWithCaretContainer$1(node.previousSibling)) {\n return node.previousSibling;\n } else {\n node.previousSibling.appendData(Zwsp.ZWSP);\n return node.previousSibling;\n }\n } else if (isText$8(node)) {\n if (startsWithCaretContainer$1(node)) {\n return node;\n } else {\n node.insertData(0, Zwsp.ZWSP);\n return node;\n }\n } else {\n var newNode = createZwsp(node);\n node.parentNode.insertBefore(newNode, node);\n return newNode;\n }\n };\n var insertAfter$1 = function (node) {\n if (isText$8(node.nextSibling)) {\n if (startsWithCaretContainer$1(node.nextSibling)) {\n return node.nextSibling;\n } else {\n node.nextSibling.insertData(0, Zwsp.ZWSP);\n return node.nextSibling;\n }\n } else if (isText$8(node)) {\n if (endsWithCaretContainer$1(node)) {\n return node;\n } else {\n node.appendData(Zwsp.ZWSP);\n return node;\n }\n } else {\n var newNode = createZwsp(node);\n if (node.nextSibling) {\n node.parentNode.insertBefore(newNode, node.nextSibling);\n } else {\n node.parentNode.appendChild(newNode);\n }\n return newNode;\n }\n };\n var insertInline$1 = function (before, node) {\n return before ? insertBefore$1(node) : insertAfter$1(node);\n };\n var insertInlineBefore = curry(insertInline$1, true);\n var insertInlineAfter = curry(insertInline$1, false);\n\n var insertInlinePos = function (pos, before) {\n if (NodeType.isText(pos.container())) {\n return insertInline$1(before, pos.container());\n } else {\n return insertInline$1(before, pos.getNode());\n }\n };\n var isPosCaretContainer = function (pos, caret) {\n var caretNode = caret.get();\n return caretNode && pos.container() === caretNode && isCaretContainerInline(caretNode);\n };\n var renderCaret = function (caret, location) {\n return location.fold(function (element) {\n CaretContainerRemove.remove(caret.get());\n var text = insertInlineBefore(element);\n caret.set(text);\n return Option.some(CaretPosition$1(text, text.length - 1));\n }, function (element) {\n return CaretFinder.firstPositionIn(element).map(function (pos) {\n if (!isPosCaretContainer(pos, caret)) {\n CaretContainerRemove.remove(caret.get());\n var text = insertInlinePos(pos, true);\n caret.set(text);\n return CaretPosition$1(text, 1);\n } else {\n return CaretPosition$1(caret.get(), 1);\n }\n });\n }, function (element) {\n return CaretFinder.lastPositionIn(element).map(function (pos) {\n if (!isPosCaretContainer(pos, caret)) {\n CaretContainerRemove.remove(caret.get());\n var text = insertInlinePos(pos, false);\n caret.set(text);\n return CaretPosition$1(text, text.length - 1);\n } else {\n return CaretPosition$1(caret.get(), caret.get().length - 1);\n }\n });\n }, function (element) {\n CaretContainerRemove.remove(caret.get());\n var text = insertInlineAfter(element);\n caret.set(text);\n return Option.some(CaretPosition$1(text, 1));\n });\n };\n var BoundaryCaret = { renderCaret: renderCaret };\n\n var evaluateUntil = function (fns, args) {\n for (var i = 0; i < fns.length; i++) {\n var result = fns[i].apply(null, args);\n if (result.isSome()) {\n return result;\n }\n }\n return Option.none();\n };\n var LazyEvaluator = { evaluateUntil: evaluateUntil };\n\n var Location = Adt.generate([\n { before: ['element'] },\n { start: ['element'] },\n { end: ['element'] },\n { after: ['element'] }\n ]);\n var rescope = function (rootNode, node) {\n var parentBlock = getParentBlock(node, rootNode);\n return parentBlock ? parentBlock : rootNode;\n };\n var before$3 = function (isInlineTarget, rootNode, pos) {\n var nPos = InlineUtils.normalizeForwards(pos);\n var scope = rescope(rootNode, nPos.container());\n return InlineUtils.findRootInline(isInlineTarget, scope, nPos).fold(function () {\n return CaretFinder.nextPosition(scope, nPos).bind(curry(InlineUtils.findRootInline, isInlineTarget, scope)).map(function (inline) {\n return Location.before(inline);\n });\n }, Option.none);\n };\n var isNotInsideFormatCaretContainer = function (rootNode, elm) {\n return getParentCaretContainer(rootNode, elm) === null;\n };\n var findInsideRootInline = function (isInlineTarget, rootNode, pos) {\n return InlineUtils.findRootInline(isInlineTarget, rootNode, pos).filter(curry(isNotInsideFormatCaretContainer, rootNode));\n };\n var start = function (isInlineTarget, rootNode, pos) {\n var nPos = InlineUtils.normalizeBackwards(pos);\n return findInsideRootInline(isInlineTarget, rootNode, nPos).bind(function (inline) {\n var prevPos = CaretFinder.prevPosition(inline, nPos);\n return prevPos.isNone() ? Option.some(Location.start(inline)) : Option.none();\n });\n };\n var end = function (isInlineTarget, rootNode, pos) {\n var nPos = InlineUtils.normalizeForwards(pos);\n return findInsideRootInline(isInlineTarget, rootNode, nPos).bind(function (inline) {\n var nextPos = CaretFinder.nextPosition(inline, nPos);\n return nextPos.isNone() ? Option.some(Location.end(inline)) : Option.none();\n });\n };\n var after$2 = function (isInlineTarget, rootNode, pos) {\n var nPos = InlineUtils.normalizeBackwards(pos);\n var scope = rescope(rootNode, nPos.container());\n return InlineUtils.findRootInline(isInlineTarget, scope, nPos).fold(function () {\n return CaretFinder.prevPosition(scope, nPos).bind(curry(InlineUtils.findRootInline, isInlineTarget, scope)).map(function (inline) {\n return Location.after(inline);\n });\n }, Option.none);\n };\n var isValidLocation = function (location) {\n return InlineUtils.isRtl(getElement(location)) === false;\n };\n var readLocation = function (isInlineTarget, rootNode, pos) {\n var location = LazyEvaluator.evaluateUntil([\n before$3,\n start,\n end,\n after$2\n ], [\n isInlineTarget,\n rootNode,\n pos\n ]);\n return location.filter(isValidLocation);\n };\n var getElement = function (location) {\n return location.fold(identity, identity, identity, identity);\n };\n var getName = function (location) {\n return location.fold(constant('before'), constant('start'), constant('end'), constant('after'));\n };\n var outside = function (location) {\n return location.fold(Location.before, Location.before, Location.after, Location.after);\n };\n var inside = function (location) {\n return location.fold(Location.start, Location.start, Location.end, Location.end);\n };\n var isEq$1 = function (location1, location2) {\n return getName(location1) === getName(location2) && getElement(location1) === getElement(location2);\n };\n var betweenInlines = function (forward, isInlineTarget, rootNode, from, to, location) {\n return lift2(InlineUtils.findRootInline(isInlineTarget, rootNode, from), InlineUtils.findRootInline(isInlineTarget, rootNode, to), function (fromInline, toInline) {\n if (fromInline !== toInline && InlineUtils.hasSameParentBlock(rootNode, fromInline, toInline)) {\n return Location.after(forward ? fromInline : toInline);\n } else {\n return location;\n }\n }).getOr(location);\n };\n var skipNoMovement = function (fromLocation, toLocation) {\n return fromLocation.fold(constant(true), function (fromLocation) {\n return !isEq$1(fromLocation, toLocation);\n });\n };\n var findLocationTraverse = function (forward, isInlineTarget, rootNode, fromLocation, pos) {\n var from = InlineUtils.normalizePosition(forward, pos);\n var to = CaretFinder.fromPosition(forward, rootNode, from).map(curry(InlineUtils.normalizePosition, forward));\n var location = to.fold(function () {\n return fromLocation.map(outside);\n }, function (to) {\n return readLocation(isInlineTarget, rootNode, to).map(curry(betweenInlines, forward, isInlineTarget, rootNode, from, to)).filter(curry(skipNoMovement, fromLocation));\n });\n return location.filter(isValidLocation);\n };\n var findLocationSimple = function (forward, location) {\n if (forward) {\n return location.fold(compose(Option.some, Location.start), Option.none, compose(Option.some, Location.after), Option.none);\n } else {\n return location.fold(Option.none, compose(Option.some, Location.before), Option.none, compose(Option.some, Location.end));\n }\n };\n var findLocation = function (forward, isInlineTarget, rootNode, pos) {\n var from = InlineUtils.normalizePosition(forward, pos);\n var fromLocation = readLocation(isInlineTarget, rootNode, from);\n return readLocation(isInlineTarget, rootNode, from).bind(curry(findLocationSimple, forward)).orThunk(function () {\n return findLocationTraverse(forward, isInlineTarget, rootNode, fromLocation, pos);\n });\n };\n var BoundaryLocation = {\n readLocation: readLocation,\n findLocation: findLocation,\n prevLocation: curry(findLocation, false),\n nextLocation: curry(findLocation, true),\n getElement: getElement,\n outside: outside,\n inside: inside\n };\n\n var hasSelectionModifyApi = function (editor) {\n return isFunction(editor.selection.getSel().modify);\n };\n var moveRel = function (forward, selection, pos) {\n var delta = forward ? 1 : -1;\n selection.setRng(CaretPosition$1(pos.container(), pos.offset() + delta).toRange());\n selection.getSel().modify('move', forward ? 'forward' : 'backward', 'word');\n return true;\n };\n var moveByWord = function (forward, editor) {\n var rng = editor.selection.getRng();\n var pos = forward ? CaretPosition$1.fromRangeEnd(rng) : CaretPosition$1.fromRangeStart(rng);\n if (!hasSelectionModifyApi(editor)) {\n return false;\n } else if (forward && isBeforeInline(pos)) {\n return moveRel(true, editor.selection, pos);\n } else if (!forward && isAfterInline(pos)) {\n return moveRel(false, editor.selection, pos);\n } else {\n return false;\n }\n };\n var WordSelection = {\n hasSelectionModifyApi: hasSelectionModifyApi,\n moveByWord: moveByWord\n };\n\n var setCaretPosition = function (editor, pos) {\n var rng = editor.dom.createRng();\n rng.setStart(pos.container(), pos.offset());\n rng.setEnd(pos.container(), pos.offset());\n editor.selection.setRng(rng);\n };\n var isFeatureEnabled = function (editor) {\n return editor.settings.inline_boundaries !== false;\n };\n var setSelected = function (state, elm) {\n if (state) {\n elm.setAttribute('data-mce-selected', 'inline-boundary');\n } else {\n elm.removeAttribute('data-mce-selected');\n }\n };\n var renderCaretLocation = function (editor, caret, location) {\n return BoundaryCaret.renderCaret(caret, location).map(function (pos) {\n setCaretPosition(editor, pos);\n return location;\n });\n };\n var findLocation$1 = function (editor, caret, forward) {\n var rootNode = editor.getBody();\n var from = CaretPosition$1.fromRangeStart(editor.selection.getRng());\n var isInlineTarget = curry(InlineUtils.isInlineTarget, editor);\n var location = BoundaryLocation.findLocation(forward, isInlineTarget, rootNode, from);\n return location.bind(function (location) {\n return renderCaretLocation(editor, caret, location);\n });\n };\n var toggleInlines = function (isInlineTarget, dom, elms) {\n var selectedInlines = filter(dom.select('*[data-mce-selected=\"inline-boundary\"]'), isInlineTarget);\n var targetInlines = filter(elms, isInlineTarget);\n each(difference(selectedInlines, targetInlines), curry(setSelected, false));\n each(difference(targetInlines, selectedInlines), curry(setSelected, true));\n };\n var safeRemoveCaretContainer = function (editor, caret) {\n if (editor.selection.isCollapsed() && editor.composing !== true && caret.get()) {\n var pos = CaretPosition$1.fromRangeStart(editor.selection.getRng());\n if (CaretPosition$1.isTextPosition(pos) && InlineUtils.isAtZwsp(pos) === false) {\n setCaretPosition(editor, CaretContainerRemove.removeAndReposition(caret.get(), pos));\n caret.set(null);\n }\n }\n };\n var renderInsideInlineCaret = function (isInlineTarget, editor, caret, elms) {\n if (editor.selection.isCollapsed()) {\n var inlines = filter(elms, isInlineTarget);\n each(inlines, function (inline) {\n var pos = CaretPosition$1.fromRangeStart(editor.selection.getRng());\n BoundaryLocation.readLocation(isInlineTarget, editor.getBody(), pos).bind(function (location) {\n return renderCaretLocation(editor, caret, location);\n });\n });\n }\n };\n var move = function (editor, caret, forward) {\n return function () {\n return isFeatureEnabled(editor) ? findLocation$1(editor, caret, forward).isSome() : false;\n };\n };\n var moveWord = function (forward, editor, caret) {\n return function () {\n return isFeatureEnabled(editor) ? WordSelection.moveByWord(forward, editor) : false;\n };\n };\n var setupSelectedState = function (editor) {\n var caret = Cell(null);\n var isInlineTarget = curry(InlineUtils.isInlineTarget, editor);\n editor.on('NodeChange', function (e) {\n if (isFeatureEnabled(editor)) {\n toggleInlines(isInlineTarget, editor.dom, e.parents);\n safeRemoveCaretContainer(editor, caret);\n renderInsideInlineCaret(isInlineTarget, editor, caret, e.parents);\n }\n });\n return caret;\n };\n var moveNextWord = curry(moveWord, true);\n var movePrevWord = curry(moveWord, false);\n var BoundarySelection = {\n move: move,\n moveNextWord: moveNextWord,\n movePrevWord: movePrevWord,\n setupSelectedState: setupSelectedState,\n setCaretPosition: setCaretPosition\n };\n\n var isFeatureEnabled$1 = function (editor) {\n return editor.settings.inline_boundaries !== false;\n };\n var rangeFromPositions = function (from, to) {\n var range = domGlobals.document.createRange();\n range.setStart(from.container(), from.offset());\n range.setEnd(to.container(), to.offset());\n return range;\n };\n var hasOnlyTwoOrLessPositionsLeft = function (elm) {\n return lift2(CaretFinder.firstPositionIn(elm), CaretFinder.lastPositionIn(elm), function (firstPos, lastPos) {\n var normalizedFirstPos = InlineUtils.normalizePosition(true, firstPos);\n var normalizedLastPos = InlineUtils.normalizePosition(false, lastPos);\n return CaretFinder.nextPosition(elm, normalizedFirstPos).map(function (pos) {\n return pos.isEqual(normalizedLastPos);\n }).getOr(true);\n }).getOr(true);\n };\n var setCaretLocation = function (editor, caret) {\n return function (location) {\n return BoundaryCaret.renderCaret(caret, location).map(function (pos) {\n BoundarySelection.setCaretPosition(editor, pos);\n return true;\n }).getOr(false);\n };\n };\n var deleteFromTo = function (editor, caret, from, to) {\n var rootNode = editor.getBody();\n var isInlineTarget = curry(InlineUtils.isInlineTarget, editor);\n editor.undoManager.ignore(function () {\n editor.selection.setRng(rangeFromPositions(from, to));\n editor.execCommand('Delete');\n BoundaryLocation.readLocation(isInlineTarget, rootNode, CaretPosition$1.fromRangeStart(editor.selection.getRng())).map(BoundaryLocation.inside).map(setCaretLocation(editor, caret));\n });\n editor.nodeChanged();\n };\n var rescope$1 = function (rootNode, node) {\n var parentBlock = getParentBlock(node, rootNode);\n return parentBlock ? parentBlock : rootNode;\n };\n var backspaceDeleteCollapsed = function (editor, caret, forward, from) {\n var rootNode = rescope$1(editor.getBody(), from.container());\n var isInlineTarget = curry(InlineUtils.isInlineTarget, editor);\n var fromLocation = BoundaryLocation.readLocation(isInlineTarget, rootNode, from);\n return fromLocation.bind(function (location) {\n if (forward) {\n return location.fold(constant(Option.some(BoundaryLocation.inside(location))), Option.none, constant(Option.some(BoundaryLocation.outside(location))), Option.none);\n } else {\n return location.fold(Option.none, constant(Option.some(BoundaryLocation.outside(location))), Option.none, constant(Option.some(BoundaryLocation.inside(location))));\n }\n }).map(setCaretLocation(editor, caret)).getOrThunk(function () {\n var toPosition = CaretFinder.navigate(forward, rootNode, from);\n var toLocation = toPosition.bind(function (pos) {\n return BoundaryLocation.readLocation(isInlineTarget, rootNode, pos);\n });\n if (fromLocation.isSome() && toLocation.isSome()) {\n return InlineUtils.findRootInline(isInlineTarget, rootNode, from).map(function (elm) {\n if (hasOnlyTwoOrLessPositionsLeft(elm)) {\n DeleteElement.deleteElement(editor, forward, Element.fromDom(elm));\n return true;\n } else {\n return false;\n }\n }).getOr(false);\n } else {\n return toLocation.bind(function (_) {\n return toPosition.map(function (to) {\n if (forward) {\n deleteFromTo(editor, caret, from, to);\n } else {\n deleteFromTo(editor, caret, to, from);\n }\n return true;\n });\n }).getOr(false);\n }\n });\n };\n var backspaceDelete$3 = function (editor, caret, forward) {\n if (editor.selection.isCollapsed() && isFeatureEnabled$1(editor)) {\n var from = CaretPosition$1.fromRangeStart(editor.selection.getRng());\n return backspaceDeleteCollapsed(editor, caret, forward, from);\n }\n return false;\n };\n var InlineBoundaryDelete = { backspaceDelete: backspaceDelete$3 };\n\n var tableCellRng = Immutable('start', 'end');\n var tableSelection = Immutable('rng', 'table', 'cells');\n var deleteAction = Adt.generate([\n { removeTable: ['element'] },\n { emptyCells: ['cells'] }\n ]);\n var isRootFromElement = function (root) {\n return curry(eq, root);\n };\n var getClosestCell = function (container, isRoot) {\n return closest$1(Element.fromDom(container), 'td,th', isRoot);\n };\n var getClosestTable = function (cell, isRoot) {\n return ancestor$1(cell, 'table', isRoot);\n };\n var isExpandedCellRng = function (cellRng) {\n return eq(cellRng.start(), cellRng.end()) === false;\n };\n var getTableFromCellRng = function (cellRng, isRoot) {\n return getClosestTable(cellRng.start(), isRoot).bind(function (startParentTable) {\n return getClosestTable(cellRng.end(), isRoot).bind(function (endParentTable) {\n return eq(startParentTable, endParentTable) ? Option.some(startParentTable) : Option.none();\n });\n });\n };\n var getTableCells = function (table) {\n return descendants$1(table, 'td,th');\n };\n var getCellRangeFromStartTable = function (cellRng, isRoot) {\n return getClosestTable(cellRng.start(), isRoot).bind(function (table) {\n return last(getTableCells(table)).map(function (endCell) {\n return tableCellRng(cellRng.start(), endCell);\n });\n });\n };\n var partialSelection = function (isRoot, rng) {\n var startCell = getClosestCell(rng.startContainer, isRoot);\n var endCell = getClosestCell(rng.endContainer, isRoot);\n return rng.collapsed ? Option.none() : lift2(startCell, endCell, tableCellRng).fold(function () {\n return startCell.fold(function () {\n return endCell.bind(function (endCell) {\n return getClosestTable(endCell, isRoot).bind(function (table) {\n return head(getTableCells(table)).map(function (startCell) {\n return tableCellRng(startCell, endCell);\n });\n });\n });\n }, function (startCell) {\n return getClosestTable(startCell, isRoot).bind(function (table) {\n return last(getTableCells(table)).map(function (endCell) {\n return tableCellRng(startCell, endCell);\n });\n });\n });\n }, function (cellRng) {\n return isWithinSameTable(isRoot, cellRng) ? Option.none() : getCellRangeFromStartTable(cellRng, isRoot);\n });\n };\n var isWithinSameTable = function (isRoot, cellRng) {\n return getTableFromCellRng(cellRng, isRoot).isSome();\n };\n var getCellRng = function (rng, isRoot) {\n var startCell = getClosestCell(rng.startContainer, isRoot);\n var endCell = getClosestCell(rng.endContainer, isRoot);\n return lift2(startCell, endCell, tableCellRng).filter(isExpandedCellRng).filter(function (cellRng) {\n return isWithinSameTable(isRoot, cellRng);\n }).orThunk(function () {\n return partialSelection(isRoot, rng);\n });\n };\n var getTableSelectionFromCellRng = function (cellRng, isRoot) {\n return getTableFromCellRng(cellRng, isRoot).map(function (table) {\n return tableSelection(cellRng, table, getTableCells(table));\n });\n };\n var getTableSelectionFromRng = function (root, rng) {\n var isRoot = isRootFromElement(root);\n return getCellRng(rng, isRoot).bind(function (cellRng) {\n return getTableSelectionFromCellRng(cellRng, isRoot);\n });\n };\n var getCellIndex = function (cells, cell) {\n return findIndex(cells, function (x) {\n return eq(x, cell);\n });\n };\n var getSelectedCells = function (tableSelection) {\n return lift2(getCellIndex(tableSelection.cells(), tableSelection.rng().start()), getCellIndex(tableSelection.cells(), tableSelection.rng().end()), function (startIndex, endIndex) {\n return tableSelection.cells().slice(startIndex, endIndex + 1);\n });\n };\n var getAction = function (tableSelection) {\n return getSelectedCells(tableSelection).map(function (selected) {\n var cells = tableSelection.cells();\n return selected.length === cells.length ? deleteAction.removeTable(tableSelection.table()) : deleteAction.emptyCells(selected);\n });\n };\n var getActionFromCells = function (cells) {\n return deleteAction.emptyCells(cells);\n };\n var getActionFromRange = function (root, rng) {\n return getTableSelectionFromRng(root, rng).bind(getAction);\n };\n var TableDeleteAction = {\n getActionFromRange: getActionFromRange,\n getActionFromCells: getActionFromCells\n };\n\n var getRanges = function (selection) {\n var ranges = [];\n if (selection) {\n for (var i = 0; i < selection.rangeCount; i++) {\n ranges.push(selection.getRangeAt(i));\n }\n }\n return ranges;\n };\n var getSelectedNodes = function (ranges) {\n return bind(ranges, function (range) {\n var node = getSelectedNode(range);\n return node ? [Element.fromDom(node)] : [];\n });\n };\n var hasMultipleRanges = function (selection) {\n return getRanges(selection).length > 1;\n };\n var MultiRange = {\n getRanges: getRanges,\n getSelectedNodes: getSelectedNodes,\n hasMultipleRanges: hasMultipleRanges\n };\n\n var getCellsFromRanges = function (ranges) {\n return filter(MultiRange.getSelectedNodes(ranges), isTableCell);\n };\n var getCellsFromElement = function (elm) {\n var selectedCells = descendants$1(elm, 'td[data-mce-selected],th[data-mce-selected]');\n return selectedCells;\n };\n var getCellsFromElementOrRanges = function (ranges, element) {\n var selectedCells = getCellsFromElement(element);\n var rangeCells = getCellsFromRanges(ranges);\n return selectedCells.length > 0 ? selectedCells : rangeCells;\n };\n var getCellsFromEditor = function (editor) {\n return getCellsFromElementOrRanges(MultiRange.getRanges(editor.selection.getSel()), Element.fromDom(editor.getBody()));\n };\n var TableCellSelection = {\n getCellsFromRanges: getCellsFromRanges,\n getCellsFromElement: getCellsFromElement,\n getCellsFromElementOrRanges: getCellsFromElementOrRanges,\n getCellsFromEditor: getCellsFromEditor\n };\n\n var emptyCells = function (editor, cells) {\n each(cells, PaddingBr.fillWithPaddingBr);\n editor.selection.setCursorLocation(cells[0].dom(), 0);\n return true;\n };\n var deleteTableElement = function (editor, table) {\n DeleteElement.deleteElement(editor, false, table);\n return true;\n };\n var deleteCellRange = function (editor, rootElm, rng) {\n return TableDeleteAction.getActionFromRange(rootElm, rng).map(function (action) {\n return action.fold(curry(deleteTableElement, editor), curry(emptyCells, editor));\n });\n };\n var deleteCaptionRange = function (editor, caption) {\n return emptyElement(editor, caption);\n };\n var deleteTableRange = function (editor, rootElm, rng, startElm) {\n return getParentCaption(rootElm, startElm).fold(function () {\n return deleteCellRange(editor, rootElm, rng);\n }, function (caption) {\n return deleteCaptionRange(editor, caption);\n }).getOr(false);\n };\n var deleteRange$1 = function (editor, startElm) {\n var rootNode = Element.fromDom(editor.getBody());\n var rng = editor.selection.getRng();\n var selectedCells = TableCellSelection.getCellsFromEditor(editor);\n return selectedCells.length !== 0 ? emptyCells(editor, selectedCells) : deleteTableRange(editor, rootNode, rng, startElm);\n };\n var getParentCell = function (rootElm, elm) {\n return find(Parents.parentsAndSelf(elm, rootElm), isTableCell);\n };\n var getParentCaption = function (rootElm, elm) {\n return find(Parents.parentsAndSelf(elm, rootElm), function (elm) {\n return name(elm) === 'caption';\n });\n };\n var deleteBetweenCells = function (editor, rootElm, forward, fromCell, from) {\n return CaretFinder.navigate(forward, editor.getBody(), from).bind(function (to) {\n return getParentCell(rootElm, Element.fromDom(to.getNode())).map(function (toCell) {\n return eq(toCell, fromCell) === false;\n });\n });\n };\n var emptyElement = function (editor, elm) {\n PaddingBr.fillWithPaddingBr(elm);\n editor.selection.setCursorLocation(elm.dom(), 0);\n return Option.some(true);\n };\n var isDeleteOfLastCharPos = function (fromCaption, forward, from, to) {\n return CaretFinder.firstPositionIn(fromCaption.dom()).bind(function (first) {\n return CaretFinder.lastPositionIn(fromCaption.dom()).map(function (last) {\n return forward ? from.isEqual(first) && to.isEqual(last) : from.isEqual(last) && to.isEqual(first);\n });\n }).getOr(true);\n };\n var emptyCaretCaption = function (editor, elm) {\n return emptyElement(editor, elm);\n };\n var validateCaretCaption = function (rootElm, fromCaption, to) {\n return getParentCaption(rootElm, Element.fromDom(to.getNode())).map(function (toCaption) {\n return eq(toCaption, fromCaption) === false;\n });\n };\n var deleteCaretInsideCaption = function (editor, rootElm, forward, fromCaption, from) {\n return CaretFinder.navigate(forward, editor.getBody(), from).bind(function (to) {\n return isDeleteOfLastCharPos(fromCaption, forward, from, to) ? emptyCaretCaption(editor, fromCaption) : validateCaretCaption(rootElm, fromCaption, to);\n }).or(Option.some(true));\n };\n var deleteCaretCells = function (editor, forward, rootElm, startElm) {\n var from = CaretPosition$1.fromRangeStart(editor.selection.getRng());\n return getParentCell(rootElm, startElm).bind(function (fromCell) {\n return Empty.isEmpty(fromCell) ? emptyElement(editor, fromCell) : deleteBetweenCells(editor, rootElm, forward, fromCell, from);\n });\n };\n var deleteCaretCaption = function (editor, forward, rootElm, fromCaption) {\n var from = CaretPosition$1.fromRangeStart(editor.selection.getRng());\n return Empty.isEmpty(fromCaption) ? emptyElement(editor, fromCaption) : deleteCaretInsideCaption(editor, rootElm, forward, fromCaption, from);\n };\n var deleteCaret = function (editor, forward, startElm) {\n var rootElm = Element.fromDom(editor.getBody());\n return getParentCaption(rootElm, startElm).fold(function () {\n return deleteCaretCells(editor, forward, rootElm, startElm);\n }, function (fromCaption) {\n return deleteCaretCaption(editor, forward, rootElm, fromCaption);\n }).getOr(false);\n };\n var backspaceDelete$4 = function (editor, forward) {\n var startElm = Element.fromDom(editor.selection.getStart(true));\n var cells = TableCellSelection.getCellsFromEditor(editor);\n return editor.selection.isCollapsed() && cells.length === 0 ? deleteCaret(editor, forward, startElm) : deleteRange$1(editor, startElm);\n };\n var TableDelete = { backspaceDelete: backspaceDelete$4 };\n\n var isEq$2 = FormatUtils.isEq;\n var matchesUnInheritedFormatSelector = function (ed, node, name) {\n var formatList = ed.formatter.get(name);\n if (formatList) {\n for (var i = 0; i < formatList.length; i++) {\n if (formatList[i].inherit === false && ed.dom.is(node, formatList[i].selector)) {\n return true;\n }\n }\n }\n return false;\n };\n var matchParents = function (editor, node, name, vars) {\n var root = editor.dom.getRoot();\n if (node === root) {\n return false;\n }\n node = editor.dom.getParent(node, function (node) {\n if (matchesUnInheritedFormatSelector(editor, node, name)) {\n return true;\n }\n return node.parentNode === root || !!matchNode(editor, node, name, vars, true);\n });\n return matchNode(editor, node, name, vars);\n };\n var matchName = function (dom, node, format) {\n if (isEq$2(node, format.inline)) {\n return true;\n }\n if (isEq$2(node, format.block)) {\n return true;\n }\n if (format.selector) {\n return node.nodeType === 1 && dom.is(node, format.selector);\n }\n };\n var matchItems = function (dom, node, format, itemName, similar, vars) {\n var key, value;\n var items = format[itemName];\n var i;\n if (format.onmatch) {\n return format.onmatch(node, format, itemName);\n }\n if (items) {\n if (typeof items.length === 'undefined') {\n for (key in items) {\n if (items.hasOwnProperty(key)) {\n if (itemName === 'attributes') {\n value = dom.getAttrib(node, key);\n } else {\n value = FormatUtils.getStyle(dom, node, key);\n }\n if (similar && !value && !format.exact) {\n return;\n }\n if ((!similar || format.exact) && !isEq$2(value, FormatUtils.normalizeStyleValue(dom, FormatUtils.replaceVars(items[key], vars), key))) {\n return;\n }\n }\n }\n } else {\n for (i = 0; i < items.length; i++) {\n if (itemName === 'attributes' ? dom.getAttrib(node, items[i]) : FormatUtils.getStyle(dom, node, items[i])) {\n return format;\n }\n }\n }\n }\n return format;\n };\n var matchNode = function (ed, node, name, vars, similar) {\n var formatList = ed.formatter.get(name);\n var format, i, x, classes;\n var dom = ed.dom;\n if (formatList && node) {\n for (i = 0; i < formatList.length; i++) {\n format = formatList[i];\n if (matchName(ed.dom, node, format) && matchItems(dom, node, format, 'attributes', similar, vars) && matchItems(dom, node, format, 'styles', similar, vars)) {\n if (classes = format.classes) {\n for (x = 0; x < classes.length; x++) {\n if (!ed.dom.hasClass(node, classes[x])) {\n return;\n }\n }\n }\n return format;\n }\n }\n }\n };\n var match = function (editor, name, vars, node) {\n var startNode;\n if (node) {\n return matchParents(editor, node, name, vars);\n }\n node = editor.selection.getNode();\n if (matchParents(editor, node, name, vars)) {\n return true;\n }\n startNode = editor.selection.getStart();\n if (startNode !== node) {\n if (matchParents(editor, startNode, name, vars)) {\n return true;\n }\n }\n return false;\n };\n var matchAll = function (editor, names, vars) {\n var startElement;\n var matchedFormatNames = [];\n var checkedMap = {};\n startElement = editor.selection.getStart();\n editor.dom.getParent(startElement, function (node) {\n var i, name;\n for (i = 0; i < names.length; i++) {\n name = names[i];\n if (!checkedMap[name] && matchNode(editor, node, name, vars)) {\n checkedMap[name] = true;\n matchedFormatNames.push(name);\n }\n }\n }, editor.dom.getRoot());\n return matchedFormatNames;\n };\n var canApply = function (editor, name) {\n var formatList = editor.formatter.get(name);\n var startNode, parents, i, x, selector;\n var dom = editor.dom;\n if (formatList) {\n startNode = editor.selection.getStart();\n parents = FormatUtils.getParents(dom, startNode);\n for (x = formatList.length - 1; x >= 0; x--) {\n selector = formatList[x].selector;\n if (!selector || formatList[x].defaultBlock) {\n return true;\n }\n for (i = parents.length - 1; i >= 0; i--) {\n if (dom.is(parents[i], selector)) {\n return true;\n }\n }\n }\n }\n return false;\n };\n var MatchFormat = {\n matchNode: matchNode,\n matchName: matchName,\n match: match,\n matchAll: matchAll,\n canApply: canApply,\n matchesUnInheritedFormatSelector: matchesUnInheritedFormatSelector\n };\n\n var splitText = function (node, offset) {\n return node.splitText(offset);\n };\n var split$1 = function (rng) {\n var startContainer = rng.startContainer, startOffset = rng.startOffset, endContainer = rng.endContainer, endOffset = rng.endOffset;\n if (startContainer === endContainer && NodeType.isText(startContainer)) {\n if (startOffset > 0 && startOffset < startContainer.nodeValue.length) {\n endContainer = splitText(startContainer, startOffset);\n startContainer = endContainer.previousSibling;\n if (endOffset > startOffset) {\n endOffset = endOffset - startOffset;\n startContainer = endContainer = splitText(endContainer, endOffset).previousSibling;\n endOffset = endContainer.nodeValue.length;\n startOffset = 0;\n } else {\n endOffset = 0;\n }\n }\n } else {\n if (NodeType.isText(startContainer) && startOffset > 0 && startOffset < startContainer.nodeValue.length) {\n startContainer = splitText(startContainer, startOffset);\n startOffset = 0;\n }\n if (NodeType.isText(endContainer) && endOffset > 0 && endOffset < endContainer.nodeValue.length) {\n endContainer = splitText(endContainer, endOffset).previousSibling;\n endOffset = endContainer.nodeValue.length;\n }\n }\n return {\n startContainer: startContainer,\n startOffset: startOffset,\n endContainer: endContainer,\n endOffset: endOffset\n };\n };\n var SplitRange = { split: split$1 };\n\n var ZWSP$1 = Zwsp.ZWSP, CARET_ID$1 = '_mce_caret';\n var importNode = function (ownerDocument, node) {\n return ownerDocument.importNode(node, true);\n };\n var getEmptyCaretContainers = function (node) {\n var nodes = [];\n while (node) {\n if (node.nodeType === 3 && node.nodeValue !== ZWSP$1 || node.childNodes.length > 1) {\n return [];\n }\n if (node.nodeType === 1) {\n nodes.push(node);\n }\n node = node.firstChild;\n }\n return nodes;\n };\n var isCaretContainerEmpty = function (node) {\n return getEmptyCaretContainers(node).length > 0;\n };\n var findFirstTextNode = function (node) {\n var walker;\n if (node) {\n walker = new TreeWalker(node, node);\n for (node = walker.current(); node; node = walker.next()) {\n if (node.nodeType === 3) {\n return node;\n }\n }\n }\n return null;\n };\n var createCaretContainer = function (fill) {\n var caretContainer = Element.fromTag('span');\n setAll(caretContainer, {\n 'id': CARET_ID$1,\n 'data-mce-bogus': '1',\n 'data-mce-type': 'format-caret'\n });\n if (fill) {\n append(caretContainer, Element.fromText(ZWSP$1));\n }\n return caretContainer;\n };\n var trimZwspFromCaretContainer = function (caretContainerNode) {\n var textNode = findFirstTextNode(caretContainerNode);\n if (textNode && textNode.nodeValue.charAt(0) === ZWSP$1) {\n textNode.deleteData(0, 1);\n }\n return textNode;\n };\n var removeCaretContainerNode = function (editor, node, moveCaret) {\n if (moveCaret === void 0) {\n moveCaret = true;\n }\n var dom = editor.dom, selection = editor.selection;\n if (isCaretContainerEmpty(node)) {\n DeleteElement.deleteElement(editor, false, Element.fromDom(node), moveCaret);\n } else {\n var rng = selection.getRng();\n var block = dom.getParent(node, dom.isBlock);\n var textNode = trimZwspFromCaretContainer(node);\n if (rng.startContainer === textNode && rng.startOffset > 0) {\n rng.setStart(textNode, rng.startOffset - 1);\n }\n if (rng.endContainer === textNode && rng.endOffset > 0) {\n rng.setEnd(textNode, rng.endOffset - 1);\n }\n dom.remove(node, true);\n if (block && dom.isEmpty(block)) {\n PaddingBr.fillWithPaddingBr(Element.fromDom(block));\n }\n selection.setRng(rng);\n }\n };\n var removeCaretContainer = function (editor, node, moveCaret) {\n if (moveCaret === void 0) {\n moveCaret = true;\n }\n var dom = editor.dom, selection = editor.selection;\n if (!node) {\n node = getParentCaretContainer(editor.getBody(), selection.getStart());\n if (!node) {\n while (node = dom.get(CARET_ID$1)) {\n removeCaretContainerNode(editor, node, false);\n }\n }\n } else {\n removeCaretContainerNode(editor, node, moveCaret);\n }\n };\n var insertCaretContainerNode = function (editor, caretContainer, formatNode) {\n var dom = editor.dom, block = dom.getParent(formatNode, curry(FormatUtils.isTextBlock, editor));\n if (block && dom.isEmpty(block)) {\n formatNode.parentNode.replaceChild(caretContainer, formatNode);\n } else {\n PaddingBr.removeTrailingBr(Element.fromDom(formatNode));\n if (dom.isEmpty(formatNode)) {\n formatNode.parentNode.replaceChild(caretContainer, formatNode);\n } else {\n dom.insertAfter(caretContainer, formatNode);\n }\n }\n };\n var appendNode = function (parentNode, node) {\n parentNode.appendChild(node);\n return node;\n };\n var insertFormatNodesIntoCaretContainer = function (formatNodes, caretContainer) {\n var innerMostFormatNode = foldr(formatNodes, function (parentNode, formatNode) {\n return appendNode(parentNode, formatNode.cloneNode(false));\n }, caretContainer);\n return appendNode(innerMostFormatNode, innerMostFormatNode.ownerDocument.createTextNode(ZWSP$1));\n };\n var applyCaretFormat = function (editor, name, vars) {\n var rng, caretContainer, textNode, offset, bookmark, container, text;\n var selection = editor.selection;\n rng = selection.getRng(true);\n offset = rng.startOffset;\n container = rng.startContainer;\n text = container.nodeValue;\n caretContainer = getParentCaretContainer(editor.getBody(), selection.getStart());\n if (caretContainer) {\n textNode = findFirstTextNode(caretContainer);\n }\n var wordcharRegex = /[^\\s\\u00a0\\u00ad\\u200b\\ufeff]/;\n if (text && offset > 0 && offset < text.length && wordcharRegex.test(text.charAt(offset)) && wordcharRegex.test(text.charAt(offset - 1))) {\n bookmark = selection.getBookmark();\n rng.collapse(true);\n rng = ExpandRange.expandRng(editor, rng, editor.formatter.get(name));\n rng = SplitRange.split(rng);\n editor.formatter.apply(name, vars, rng);\n selection.moveToBookmark(bookmark);\n } else {\n if (!caretContainer || textNode.nodeValue !== ZWSP$1) {\n caretContainer = importNode(editor.getDoc(), createCaretContainer(true).dom());\n textNode = caretContainer.firstChild;\n rng.insertNode(caretContainer);\n offset = 1;\n editor.formatter.apply(name, vars, caretContainer);\n } else {\n editor.formatter.apply(name, vars, caretContainer);\n }\n selection.setCursorLocation(textNode, offset);\n }\n };\n var removeCaretFormat = function (editor, name, vars, similar) {\n var dom = editor.dom, selection = editor.selection;\n var container, offset, bookmark;\n var hasContentAfter, node, formatNode;\n var parents = [], rng = selection.getRng();\n var caretContainer;\n container = rng.startContainer;\n offset = rng.startOffset;\n node = container;\n if (container.nodeType === 3) {\n if (offset !== container.nodeValue.length) {\n hasContentAfter = true;\n }\n node = node.parentNode;\n }\n while (node) {\n if (MatchFormat.matchNode(editor, node, name, vars, similar)) {\n formatNode = node;\n break;\n }\n if (node.nextSibling) {\n hasContentAfter = true;\n }\n parents.push(node);\n node = node.parentNode;\n }\n if (!formatNode) {\n return;\n }\n if (hasContentAfter) {\n bookmark = selection.getBookmark();\n rng.collapse(true);\n var expandedRng = ExpandRange.expandRng(editor, rng, editor.formatter.get(name), true);\n expandedRng = SplitRange.split(expandedRng);\n editor.formatter.remove(name, vars, expandedRng);\n selection.moveToBookmark(bookmark);\n } else {\n caretContainer = getParentCaretContainer(editor.getBody(), formatNode);\n var newCaretContainer = createCaretContainer(false).dom();\n var caretNode = insertFormatNodesIntoCaretContainer(parents, newCaretContainer);\n if (caretContainer) {\n insertCaretContainerNode(editor, newCaretContainer, caretContainer);\n } else {\n insertCaretContainerNode(editor, newCaretContainer, formatNode);\n }\n removeCaretContainerNode(editor, caretContainer, false);\n selection.setCursorLocation(caretNode, 1);\n if (dom.isEmpty(formatNode)) {\n dom.remove(formatNode);\n }\n }\n };\n var disableCaretContainer = function (editor, keyCode) {\n var selection = editor.selection, body = editor.getBody();\n removeCaretContainer(editor, null, false);\n if ((keyCode === 8 || keyCode === 46) && selection.isCollapsed() && selection.getStart().innerHTML === ZWSP$1) {\n removeCaretContainer(editor, getParentCaretContainer(body, selection.getStart()));\n }\n if (keyCode === 37 || keyCode === 39) {\n removeCaretContainer(editor, getParentCaretContainer(body, selection.getStart()));\n }\n };\n var setup$2 = function (editor) {\n editor.on('mouseup keydown', function (e) {\n disableCaretContainer(editor, e.keyCode);\n });\n };\n var replaceWithCaretFormat = function (targetNode, formatNodes) {\n var caretContainer = createCaretContainer(false);\n var innerMost = insertFormatNodesIntoCaretContainer(formatNodes, caretContainer.dom());\n before(Element.fromDom(targetNode), caretContainer);\n remove$1(Element.fromDom(targetNode));\n return CaretPosition$1(innerMost, 0);\n };\n var isFormatElement = function (editor, element) {\n var inlineElements = editor.schema.getTextInlineElements();\n return inlineElements.hasOwnProperty(name(element)) && !isCaretNode(element.dom()) && !NodeType.isBogus(element.dom());\n };\n var isEmptyCaretFormatElement = function (element) {\n return isCaretNode(element.dom()) && isCaretContainerEmpty(element.dom());\n };\n\n var getParentInlines = function (rootElm, startElm) {\n var parents = Parents.parentsAndSelf(startElm, rootElm);\n return findIndex(parents, isBlock).fold(constant(parents), function (index) {\n return parents.slice(0, index);\n });\n };\n var hasOnlyOneChild$1 = function (elm) {\n return children(elm).length === 1;\n };\n var deleteLastPosition = function (forward, editor, target, parentInlines) {\n var isFormatElement$1 = curry(isFormatElement, editor);\n var formatNodes = map(filter(parentInlines, isFormatElement$1), function (elm) {\n return elm.dom();\n });\n if (formatNodes.length === 0) {\n DeleteElement.deleteElement(editor, forward, target);\n } else {\n var pos = replaceWithCaretFormat(target.dom(), formatNodes);\n editor.selection.setRng(pos.toRange());\n }\n };\n var deleteCaret$1 = function (editor, forward) {\n var rootElm = Element.fromDom(editor.getBody());\n var startElm = Element.fromDom(editor.selection.getStart());\n var parentInlines = filter(getParentInlines(rootElm, startElm), hasOnlyOneChild$1);\n return last(parentInlines).map(function (target) {\n var fromPos = CaretPosition$1.fromRangeStart(editor.selection.getRng());\n if (DeleteUtils.willDeleteLastPositionInElement(forward, fromPos, target.dom()) && !isEmptyCaretFormatElement(target)) {\n deleteLastPosition(forward, editor, target, parentInlines);\n return true;\n } else {\n return false;\n }\n }).getOr(false);\n };\n var backspaceDelete$5 = function (editor, forward) {\n return editor.selection.isCollapsed() ? deleteCaret$1(editor, forward) : false;\n };\n var InlineFormatDelete = { backspaceDelete: backspaceDelete$5 };\n\n var getPos$1 = function (elm) {\n var x = 0, y = 0;\n var offsetParent = elm;\n while (offsetParent && offsetParent.nodeType) {\n x += offsetParent.offsetLeft || 0;\n y += offsetParent.offsetTop || 0;\n offsetParent = offsetParent.offsetParent;\n }\n return {\n x: x,\n y: y\n };\n };\n var fireScrollIntoViewEvent = function (editor, elm, alignToTop) {\n var scrollEvent = {\n elm: elm,\n alignToTop: alignToTop\n };\n editor.fire('scrollIntoView', scrollEvent);\n return scrollEvent.isDefaultPrevented();\n };\n var scrollElementIntoView = function (editor, elm, alignToTop) {\n var y, viewPort;\n var dom = editor.dom;\n var root = dom.getRoot();\n var viewPortY, viewPortH, offsetY = 0;\n if (fireScrollIntoViewEvent(editor, elm, alignToTop)) {\n return;\n }\n if (!NodeType.isElement(elm)) {\n return;\n }\n if (alignToTop === false) {\n offsetY = elm.offsetHeight;\n }\n if (root.nodeName !== 'BODY') {\n var scrollContainer = editor.selection.getScrollContainer();\n if (scrollContainer) {\n y = getPos$1(elm).y - getPos$1(scrollContainer).y + offsetY;\n viewPortH = scrollContainer.clientHeight;\n viewPortY = scrollContainer.scrollTop;\n if (y < viewPortY || y + 25 > viewPortY + viewPortH) {\n scrollContainer.scrollTop = y < viewPortY ? y : y - viewPortH + 25;\n }\n return;\n }\n }\n viewPort = dom.getViewPort(editor.getWin());\n y = dom.getPos(elm).y + offsetY;\n viewPortY = viewPort.y;\n viewPortH = viewPort.h;\n if (y < viewPort.y || y + 25 > viewPortY + viewPortH) {\n editor.getWin().scrollTo(0, y < viewPortY ? y : y - viewPortH + 25);\n }\n };\n var getViewPortRect = function (editor) {\n if (editor.inline) {\n return editor.getBody().getBoundingClientRect();\n } else {\n var win = editor.getWin();\n return {\n left: 0,\n right: win.innerWidth,\n top: 0,\n bottom: win.innerHeight,\n width: win.innerWidth,\n height: win.innerHeight\n };\n }\n };\n var scrollBy = function (editor, dx, dy) {\n if (editor.inline) {\n editor.getBody().scrollLeft += dx;\n editor.getBody().scrollTop += dy;\n } else {\n editor.getWin().scrollBy(dx, dy);\n }\n };\n var scrollRangeIntoView = function (editor, rng) {\n head(CaretPosition.fromRangeStart(rng).getClientRects()).each(function (rngRect) {\n var bodyRect = getViewPortRect(editor);\n var overflow = getOverflow(bodyRect, rngRect);\n var margin = 4;\n var dx = overflow.x > 0 ? overflow.x + margin : overflow.x - margin;\n var dy = overflow.y > 0 ? overflow.y + margin : overflow.y - margin;\n scrollBy(editor, overflow.x !== 0 ? dx : 0, overflow.y !== 0 ? dy : 0);\n });\n };\n var ScrollIntoView = {\n scrollElementIntoView: scrollElementIntoView,\n scrollRangeIntoView: scrollRangeIntoView\n };\n\n var isContentEditableTrue$2 = NodeType.isContentEditableTrue;\n var isContentEditableFalse$6 = NodeType.isContentEditableFalse;\n var showCaret = function (direction, editor, node, before, scrollIntoView) {\n return editor._selectionOverrides.showCaret(direction, node, before, scrollIntoView);\n };\n var getNodeRange = function (node) {\n var rng = node.ownerDocument.createRange();\n rng.selectNode(node);\n return rng;\n };\n var selectNode = function (editor, node) {\n var e = editor.fire('BeforeObjectSelected', { target: node });\n if (e.isDefaultPrevented()) {\n return null;\n }\n return getNodeRange(node);\n };\n var renderCaretAtRange = function (editor, range, scrollIntoView) {\n var normalizedRange = normalizeRange(1, editor.getBody(), range);\n var caretPosition = CaretPosition$1.fromRangeStart(normalizedRange);\n var caretPositionNode = caretPosition.getNode();\n if (isContentEditableFalse$6(caretPositionNode)) {\n return showCaret(1, editor, caretPositionNode, !caretPosition.isAtEnd(), false);\n }\n var caretPositionBeforeNode = caretPosition.getNode(true);\n if (isContentEditableFalse$6(caretPositionBeforeNode)) {\n return showCaret(1, editor, caretPositionBeforeNode, false, false);\n }\n var ceRoot = editor.dom.getParent(caretPosition.getNode(), function (node) {\n return isContentEditableFalse$6(node) || isContentEditableTrue$2(node);\n });\n if (isContentEditableFalse$6(ceRoot)) {\n return showCaret(1, editor, ceRoot, false, scrollIntoView);\n }\n return null;\n };\n var renderRangeCaret = function (editor, range, scrollIntoView) {\n if (!range || !range.collapsed) {\n return range;\n }\n var caretRange = renderCaretAtRange(editor, range, scrollIntoView);\n if (caretRange) {\n return caretRange;\n }\n return range;\n };\n var moveToRange = function (editor, rng) {\n editor.selection.setRng(rng);\n ScrollIntoView.scrollRangeIntoView(editor, editor.selection.getRng());\n };\n\n var trimEmptyTextNode$1 = function (dom, node) {\n if (NodeType.isText(node) && node.data.length === 0) {\n dom.remove(node);\n }\n };\n var deleteContentAndShowCaret = function (editor, range, node, direction, forward, peekCaretPosition) {\n var caretRange = showCaret(direction, editor, peekCaretPosition.getNode(!forward), forward, true);\n if (range.collapsed) {\n var deleteRange = range.cloneRange();\n if (forward) {\n deleteRange.setEnd(caretRange.startContainer, caretRange.startOffset);\n } else {\n deleteRange.setStart(caretRange.endContainer, caretRange.endOffset);\n }\n deleteRange.deleteContents();\n } else {\n range.deleteContents();\n }\n editor.selection.setRng(caretRange);\n trimEmptyTextNode$1(editor.dom, node);\n return true;\n };\n var deleteCefBoundaryText = function (editor, forward) {\n var range = editor.selection.getRng();\n if (!NodeType.isText(range.commonAncestorContainer)) {\n return false;\n }\n var direction = forward ? HDirection.Forwards : HDirection.Backwards;\n var caretWalker = CaretWalker(editor.getBody());\n var getNextVisualCaretPosition = curry(getVisualCaretPosition, caretWalker.next);\n var getPrevVisualCaretPosition = curry(getVisualCaretPosition, caretWalker.prev);\n var getNextPosFn = forward ? getNextVisualCaretPosition : getPrevVisualCaretPosition;\n var isBeforeContentEditableFalseFn = forward ? isBeforeContentEditableFalse : isAfterContentEditableFalse;\n var caretPosition = getNormalizedRangeEndPoint(direction, editor.getBody(), range);\n var nextCaretPosition = InlineUtils.normalizePosition(forward, getNextPosFn(caretPosition));\n if (!nextCaretPosition) {\n return false;\n } else if (isBeforeContentEditableFalseFn(nextCaretPosition)) {\n return deleteContentAndShowCaret(editor, range, caretPosition.getNode(), direction, forward, nextCaretPosition);\n }\n var peekCaretPosition = getNextPosFn(nextCaretPosition);\n if (peekCaretPosition && isBeforeContentEditableFalseFn(peekCaretPosition)) {\n if (isMoveInsideSameBlock(nextCaretPosition, peekCaretPosition)) {\n return deleteContentAndShowCaret(editor, range, caretPosition.getNode(), direction, forward, peekCaretPosition);\n }\n }\n return false;\n };\n var backspaceDelete$6 = function (editor, forward) {\n return deleteCefBoundaryText(editor, forward);\n };\n var CefBoundaryDelete = { backspaceDelete: backspaceDelete$6 };\n\n var nativeCommand = function (editor, command) {\n editor.getDoc().execCommand(command, false, null);\n };\n var deleteCommand = function (editor) {\n if (CefDelete.backspaceDelete(editor, false)) {\n return;\n } else if (CefBoundaryDelete.backspaceDelete(editor, false)) {\n return;\n } else if (InlineBoundaryDelete.backspaceDelete(editor, false)) {\n return;\n } else if (BlockBoundaryDelete.backspaceDelete(editor, false)) {\n return;\n } else if (TableDelete.backspaceDelete(editor)) {\n return;\n } else if (BlockRangeDelete.backspaceDelete(editor, false)) {\n return;\n } else if (InlineFormatDelete.backspaceDelete(editor, false)) {\n return;\n } else {\n nativeCommand(editor, 'Delete');\n DeleteUtils.paddEmptyBody(editor);\n }\n };\n var forwardDeleteCommand = function (editor) {\n if (CefDelete.backspaceDelete(editor, true)) {\n return;\n } else if (CefBoundaryDelete.backspaceDelete(editor, true)) {\n return;\n } else if (InlineBoundaryDelete.backspaceDelete(editor, true)) {\n return;\n } else if (BlockBoundaryDelete.backspaceDelete(editor, true)) {\n return;\n } else if (TableDelete.backspaceDelete(editor)) {\n return;\n } else if (BlockRangeDelete.backspaceDelete(editor, true)) {\n return;\n } else if (InlineFormatDelete.backspaceDelete(editor, true)) {\n return;\n } else {\n nativeCommand(editor, 'ForwardDelete');\n }\n };\n var DeleteCommands = {\n deleteCommand: deleteCommand,\n forwardDeleteCommand: forwardDeleteCommand\n };\n\n var getSpecifiedFontProp = function (propName, rootElm, elm) {\n var getProperty = function (elm) {\n return getRaw(elm, propName);\n };\n var isRoot = function (elm) {\n return eq(Element.fromDom(rootElm), elm);\n };\n return closest(Element.fromDom(elm), function (elm) {\n return getProperty(elm).isSome();\n }, isRoot).bind(getProperty);\n };\n var round$1 = function (number, precision) {\n var factor = Math.pow(10, precision);\n return Math.round(number * factor) / factor;\n };\n var toPt = function (fontSize, precision) {\n if (/[0-9.]+px$/.test(fontSize)) {\n return round$1(parseInt(fontSize, 10) * 72 / 96, precision || 0) + 'pt';\n }\n return fontSize;\n };\n var normalizeFontFamily = function (fontFamily) {\n return fontFamily.replace(/[\\'\\\"\\\\]/g, '').replace(/,\\s+/g, ',');\n };\n var getComputedFontProp = function (propName, elm) {\n return Option.from(DOMUtils$1.DOM.getStyle(elm, propName, true));\n };\n var getFontProp = function (propName) {\n return function (rootElm, elm) {\n return Option.from(elm).map(Element.fromDom).filter(isElement).bind(function (element) {\n return getSpecifiedFontProp(propName, rootElm, element.dom()).or(getComputedFontProp(propName, element.dom()));\n }).getOr('');\n };\n };\n var FontInfo = {\n getFontSize: getFontProp('font-size'),\n getFontFamily: compose(normalizeFontFamily, getFontProp('font-family')),\n toPt: toPt\n };\n\n var findFirstCaretElement = function (editor) {\n return CaretFinder.firstPositionIn(editor.getBody()).map(function (caret) {\n var container = caret.container();\n return NodeType.isText(container) ? container.parentNode : container;\n });\n };\n var isRangeAtStartOfNode = function (rng, root) {\n return rng.startContainer === root && rng.startOffset === 0;\n };\n var getCaretElement = function (editor) {\n return Option.from(editor.selection.getRng()).bind(function (rng) {\n var root = editor.getBody();\n return isRangeAtStartOfNode(rng, root) ? Option.none() : Option.from(editor.selection.getStart(true));\n });\n };\n var fromFontSizeNumber = function (editor, value) {\n if (/^[0-9\\.]+$/.test(value)) {\n var fontSizeNumber = parseInt(value, 10);\n if (fontSizeNumber >= 1 && fontSizeNumber <= 7) {\n var fontSizes = Settings.getFontStyleValues(editor);\n var fontClasses = Settings.getFontSizeClasses(editor);\n if (fontClasses) {\n return fontClasses[fontSizeNumber - 1] || value;\n } else {\n return fontSizes[fontSizeNumber - 1] || value;\n }\n } else {\n return value;\n }\n } else {\n return value;\n }\n };\n var fontNameAction = function (editor, value) {\n editor.formatter.toggle('fontname', { value: fromFontSizeNumber(editor, value) });\n editor.nodeChanged();\n };\n var fontNameQuery = function (editor) {\n return getCaretElement(editor).fold(function () {\n return findFirstCaretElement(editor).map(function (caretElement) {\n return FontInfo.getFontFamily(editor.getBody(), caretElement);\n }).getOr('');\n }, function (caretElement) {\n return FontInfo.getFontFamily(editor.getBody(), caretElement);\n });\n };\n var fontSizeAction = function (editor, value) {\n editor.formatter.toggle('fontsize', { value: fromFontSizeNumber(editor, value) });\n editor.nodeChanged();\n };\n var fontSizeQuery = function (editor) {\n return getCaretElement(editor).fold(function () {\n return findFirstCaretElement(editor).map(function (caretElement) {\n return FontInfo.getFontSize(editor.getBody(), caretElement);\n }).getOr('');\n }, function (caretElement) {\n return FontInfo.getFontSize(editor.getBody(), caretElement);\n });\n };\n\n var isEq$3 = function (rng1, rng2) {\n return rng1 && rng2 && (rng1.startContainer === rng2.startContainer && rng1.startOffset === rng2.startOffset) && (rng1.endContainer === rng2.endContainer && rng1.endOffset === rng2.endOffset);\n };\n var RangeCompare = { isEq: isEq$3 };\n\n var findParent = function (node, rootNode, predicate) {\n while (node && node !== rootNode) {\n if (predicate(node)) {\n return node;\n }\n node = node.parentNode;\n }\n return null;\n };\n var hasParent = function (node, rootNode, predicate) {\n return findParent(node, rootNode, predicate) !== null;\n };\n var hasParentWithName = function (node, rootNode, name) {\n return hasParent(node, rootNode, function (node) {\n return node.nodeName === name;\n });\n };\n var isTable$2 = function (node) {\n return node && node.nodeName === 'TABLE';\n };\n var isTableCell$3 = function (node) {\n return node && /^(TD|TH|CAPTION)$/.test(node.nodeName);\n };\n var isCeFalseCaretContainer = function (node, rootNode) {\n return isCaretContainer(node) && hasParent(node, rootNode, isCaretNode) === false;\n };\n var hasBrBeforeAfter = function (dom, node, left) {\n var walker = new TreeWalker(node, dom.getParent(node.parentNode, dom.isBlock) || dom.getRoot());\n while (node = walker[left ? 'prev' : 'next']()) {\n if (NodeType.isBr(node)) {\n return true;\n }\n }\n };\n var isPrevNode = function (node, name) {\n return node.previousSibling && node.previousSibling.nodeName === name;\n };\n var hasContentEditableFalseParent = function (body, node) {\n while (node && node !== body) {\n if (NodeType.isContentEditableFalse(node)) {\n return true;\n }\n node = node.parentNode;\n }\n return false;\n };\n var findTextNodeRelative = function (dom, isAfterNode, collapsed, left, startNode) {\n var walker, lastInlineElement, parentBlockContainer;\n var body = dom.getRoot();\n var node;\n var nonEmptyElementsMap = dom.schema.getNonEmptyElements();\n parentBlockContainer = dom.getParent(startNode.parentNode, dom.isBlock) || body;\n if (left && NodeType.isBr(startNode) && isAfterNode && dom.isEmpty(parentBlockContainer)) {\n return Option.some(CaretPosition(startNode.parentNode, dom.nodeIndex(startNode)));\n }\n walker = new TreeWalker(startNode, parentBlockContainer);\n while (node = walker[left ? 'prev' : 'next']()) {\n if (dom.getContentEditableParent(node) === 'false' || isCeFalseCaretContainer(node, body)) {\n return Option.none();\n }\n if (NodeType.isText(node) && node.nodeValue.length > 0) {\n if (hasParentWithName(node, body, 'A') === false) {\n return Option.some(CaretPosition(node, left ? node.nodeValue.length : 0));\n }\n return Option.none();\n }\n if (dom.isBlock(node) || nonEmptyElementsMap[node.nodeName.toLowerCase()]) {\n return Option.none();\n }\n lastInlineElement = node;\n }\n if (collapsed && lastInlineElement) {\n return Option.some(CaretPosition(lastInlineElement, 0));\n }\n return Option.none();\n };\n var normalizeEndPoint = function (dom, collapsed, start, rng) {\n var container, offset, walker;\n var body = dom.getRoot();\n var node, nonEmptyElementsMap;\n var directionLeft, isAfterNode, normalized = false;\n container = rng[(start ? 'start' : 'end') + 'Container'];\n offset = rng[(start ? 'start' : 'end') + 'Offset'];\n isAfterNode = NodeType.isElement(container) && offset === container.childNodes.length;\n nonEmptyElementsMap = dom.schema.getNonEmptyElements();\n directionLeft = start;\n if (isCaretContainer(container)) {\n return Option.none();\n }\n if (NodeType.isElement(container) && offset > container.childNodes.length - 1) {\n directionLeft = false;\n }\n if (NodeType.isDocument(container)) {\n container = body;\n offset = 0;\n }\n if (container === body) {\n if (directionLeft) {\n node = container.childNodes[offset > 0 ? offset - 1 : 0];\n if (node) {\n if (isCaretContainer(node)) {\n return Option.none();\n }\n if (nonEmptyElementsMap[node.nodeName] || isTable$2(node)) {\n return Option.none();\n }\n }\n }\n if (container.hasChildNodes()) {\n offset = Math.min(!directionLeft && offset > 0 ? offset - 1 : offset, container.childNodes.length - 1);\n container = container.childNodes[offset];\n offset = NodeType.isText(container) && isAfterNode ? container.data.length : 0;\n if (!collapsed && container === body.lastChild && isTable$2(container)) {\n return Option.none();\n }\n if (hasContentEditableFalseParent(body, container) || isCaretContainer(container)) {\n return Option.none();\n }\n if (container.hasChildNodes() && isTable$2(container) === false) {\n node = container;\n walker = new TreeWalker(container, body);\n do {\n if (NodeType.isContentEditableFalse(node) || isCaretContainer(node)) {\n normalized = false;\n break;\n }\n if (NodeType.isText(node) && node.nodeValue.length > 0) {\n offset = directionLeft ? 0 : node.nodeValue.length;\n container = node;\n normalized = true;\n break;\n }\n if (nonEmptyElementsMap[node.nodeName.toLowerCase()] && !isTableCell$3(node)) {\n offset = dom.nodeIndex(node);\n container = node.parentNode;\n if (!directionLeft) {\n offset++;\n }\n normalized = true;\n break;\n }\n } while (node = directionLeft ? walker.next() : walker.prev());\n }\n }\n }\n if (collapsed) {\n if (NodeType.isText(container) && offset === 0) {\n findTextNodeRelative(dom, isAfterNode, collapsed, true, container).each(function (pos) {\n container = pos.container();\n offset = pos.offset();\n normalized = true;\n });\n }\n if (NodeType.isElement(container)) {\n node = container.childNodes[offset];\n if (!node) {\n node = container.childNodes[offset - 1];\n }\n if (node && NodeType.isBr(node) && !isPrevNode(node, 'A') && !hasBrBeforeAfter(dom, node, false) && !hasBrBeforeAfter(dom, node, true)) {\n findTextNodeRelative(dom, isAfterNode, collapsed, true, node).each(function (pos) {\n container = pos.container();\n offset = pos.offset();\n normalized = true;\n });\n }\n }\n }\n if (directionLeft && !collapsed && NodeType.isText(container) && offset === container.nodeValue.length) {\n findTextNodeRelative(dom, isAfterNode, collapsed, false, container).each(function (pos) {\n container = pos.container();\n offset = pos.offset();\n normalized = true;\n });\n }\n return normalized ? Option.some(CaretPosition(container, offset)) : Option.none();\n };\n var normalize$2 = function (dom, rng) {\n var collapsed = rng.collapsed, normRng = rng.cloneRange();\n var startPos = CaretPosition.fromRangeStart(rng);\n normalizeEndPoint(dom, collapsed, true, normRng).each(function (pos) {\n if (!collapsed || !CaretPosition.isAbove(startPos, pos)) {\n normRng.setStart(pos.container(), pos.offset());\n }\n });\n if (!collapsed) {\n normalizeEndPoint(dom, collapsed, false, normRng).each(function (pos) {\n normRng.setEnd(pos.container(), pos.offset());\n });\n }\n if (collapsed) {\n normRng.collapse(true);\n }\n return RangeCompare.isEq(rng, normRng) ? Option.none() : Option.some(normRng);\n };\n var NormalizeRange = { normalize: normalize$2 };\n\n var hasRightSideContent = function (schema, container, parentBlock) {\n var walker = new TreeWalker(container, parentBlock);\n var node;\n var nonEmptyElementsMap = schema.getNonEmptyElements();\n while (node = walker.next()) {\n if (nonEmptyElementsMap[node.nodeName.toLowerCase()] || node.length > 0) {\n return true;\n }\n }\n };\n var scrollToBr = function (dom, selection, brElm) {\n var marker = dom.create('span', {}, ' ');\n brElm.parentNode.insertBefore(marker, brElm);\n selection.scrollIntoView(marker);\n dom.remove(marker);\n };\n var moveSelectionToBr = function (dom, selection, brElm, extraBr) {\n var rng = dom.createRng();\n if (!extraBr) {\n rng.setStartAfter(brElm);\n rng.setEndAfter(brElm);\n } else {\n rng.setStartBefore(brElm);\n rng.setEndBefore(brElm);\n }\n selection.setRng(rng);\n };\n var insertBrAtCaret = function (editor, evt) {\n var selection = editor.selection;\n var dom = editor.dom;\n var rng = selection.getRng();\n var brElm;\n var extraBr;\n NormalizeRange.normalize(dom, rng).each(function (normRng) {\n rng.setStart(normRng.startContainer, normRng.startOffset);\n rng.setEnd(normRng.endContainer, normRng.endOffset);\n });\n var offset = rng.startOffset;\n var container = rng.startContainer;\n if (container.nodeType === 1 && container.hasChildNodes()) {\n var isAfterLastNodeInContainer = offset > container.childNodes.length - 1;\n container = container.childNodes[Math.min(offset, container.childNodes.length - 1)] || container;\n if (isAfterLastNodeInContainer && container.nodeType === 3) {\n offset = container.nodeValue.length;\n } else {\n offset = 0;\n }\n }\n var parentBlock = dom.getParent(container, dom.isBlock);\n var containerBlock = parentBlock ? dom.getParent(parentBlock.parentNode, dom.isBlock) : null;\n var containerBlockName = containerBlock ? containerBlock.nodeName.toUpperCase() : '';\n var isControlKey = evt && evt.ctrlKey;\n if (containerBlockName === 'LI' && !isControlKey) {\n parentBlock = containerBlock;\n }\n if (container && container.nodeType === 3 && offset >= container.nodeValue.length) {\n if (!hasRightSideContent(editor.schema, container, parentBlock)) {\n brElm = dom.create('br');\n rng.insertNode(brElm);\n rng.setStartAfter(brElm);\n rng.setEndAfter(brElm);\n extraBr = true;\n }\n }\n brElm = dom.create('br');\n rangeInsertNode(dom, rng, brElm);\n scrollToBr(dom, selection, brElm);\n moveSelectionToBr(dom, selection, brElm, extraBr);\n editor.undoManager.add();\n };\n var insertBrBefore = function (editor, inline) {\n var br = Element.fromTag('br');\n before(Element.fromDom(inline), br);\n editor.undoManager.add();\n };\n var insertBrAfter = function (editor, inline) {\n if (!hasBrAfter(editor.getBody(), inline)) {\n after(Element.fromDom(inline), Element.fromTag('br'));\n }\n var br = Element.fromTag('br');\n after(Element.fromDom(inline), br);\n scrollToBr(editor.dom, editor.selection, br.dom());\n moveSelectionToBr(editor.dom, editor.selection, br.dom(), false);\n editor.undoManager.add();\n };\n var isBeforeBr$1 = function (pos) {\n return NodeType.isBr(pos.getNode());\n };\n var hasBrAfter = function (rootNode, startNode) {\n if (isBeforeBr$1(CaretPosition$1.after(startNode))) {\n return true;\n } else {\n return CaretFinder.nextPosition(rootNode, CaretPosition$1.after(startNode)).map(function (pos) {\n return NodeType.isBr(pos.getNode());\n }).getOr(false);\n }\n };\n var isAnchorLink = function (elm) {\n return elm && elm.nodeName === 'A' && 'href' in elm;\n };\n var isInsideAnchor = function (location) {\n return location.fold(constant(false), isAnchorLink, isAnchorLink, constant(false));\n };\n var readInlineAnchorLocation = function (editor) {\n var isInlineTarget = curry(InlineUtils.isInlineTarget, editor);\n var position = CaretPosition$1.fromRangeStart(editor.selection.getRng());\n return BoundaryLocation.readLocation(isInlineTarget, editor.getBody(), position).filter(isInsideAnchor);\n };\n var insertBrOutsideAnchor = function (editor, location) {\n location.fold(noop, curry(insertBrBefore, editor), curry(insertBrAfter, editor), noop);\n };\n var insert = function (editor, evt) {\n var anchorLocation = readInlineAnchorLocation(editor);\n if (anchorLocation.isSome()) {\n anchorLocation.each(curry(insertBrOutsideAnchor, editor));\n } else {\n insertBrAtCaret(editor, evt);\n }\n };\n var InsertBr = { insert: insert };\n\n var create$3 = Immutable('start', 'soffset', 'finish', 'foffset');\n var SimRange = { create: create$3 };\n\n var adt = Adt.generate([\n { before: ['element'] },\n {\n on: [\n 'element',\n 'offset'\n ]\n },\n { after: ['element'] }\n ]);\n var cata = function (subject, onBefore, onOn, onAfter) {\n return subject.fold(onBefore, onOn, onAfter);\n };\n var getStart = function (situ) {\n return situ.fold(identity, identity, identity);\n };\n var before$4 = adt.before;\n var on = adt.on;\n var after$3 = adt.after;\n var Situ = {\n before: before$4,\n on: on,\n after: after$3,\n cata: cata,\n getStart: getStart\n };\n\n var adt$1 = Adt.generate([\n { domRange: ['rng'] },\n {\n relative: [\n 'startSitu',\n 'finishSitu'\n ]\n },\n {\n exact: [\n 'start',\n 'soffset',\n 'finish',\n 'foffset'\n ]\n }\n ]);\n var exactFromRange = function (simRange) {\n return adt$1.exact(simRange.start(), simRange.soffset(), simRange.finish(), simRange.foffset());\n };\n var getStart$1 = function (selection) {\n return selection.match({\n domRange: function (rng) {\n return Element.fromDom(rng.startContainer);\n },\n relative: function (startSitu, finishSitu) {\n return Situ.getStart(startSitu);\n },\n exact: function (start, soffset, finish, foffset) {\n return start;\n }\n });\n };\n var domRange = adt$1.domRange;\n var relative = adt$1.relative;\n var exact = adt$1.exact;\n var getWin = function (selection) {\n var start = getStart$1(selection);\n return defaultView(start);\n };\n var range = SimRange.create;\n var Selection = {\n domRange: domRange,\n relative: relative,\n exact: exact,\n exactFromRange: exactFromRange,\n getWin: getWin,\n range: range\n };\n\n var browser$3 = PlatformDetection$1.detect().browser;\n var clamp = function (offset, element) {\n var max = isText(element) ? get$4(element).length : children(element).length + 1;\n if (offset > max) {\n return max;\n } else if (offset < 0) {\n return 0;\n }\n return offset;\n };\n var normalizeRng = function (rng) {\n return Selection.range(rng.start(), clamp(rng.soffset(), rng.start()), rng.finish(), clamp(rng.foffset(), rng.finish()));\n };\n var isOrContains = function (root, elm) {\n return !NodeType.isRestrictedNode(elm.dom()) && (contains$3(root, elm) || eq(root, elm));\n };\n var isRngInRoot = function (root) {\n return function (rng) {\n return isOrContains(root, rng.start()) && isOrContains(root, rng.finish());\n };\n };\n var shouldStore = function (editor) {\n return editor.inline === true || browser$3.isIE();\n };\n var nativeRangeToSelectionRange = function (r) {\n return Selection.range(Element.fromDom(r.startContainer), r.startOffset, Element.fromDom(r.endContainer), r.endOffset);\n };\n var readRange = function (win) {\n var selection = win.getSelection();\n var rng = !selection || selection.rangeCount === 0 ? Option.none() : Option.from(selection.getRangeAt(0));\n return rng.map(nativeRangeToSelectionRange);\n };\n var getBookmark$2 = function (root) {\n var win = defaultView(root);\n return readRange(win.dom()).filter(isRngInRoot(root));\n };\n var validate = function (root, bookmark) {\n return Option.from(bookmark).filter(isRngInRoot(root)).map(normalizeRng);\n };\n var bookmarkToNativeRng = function (bookmark) {\n var rng = domGlobals.document.createRange();\n try {\n rng.setStart(bookmark.start().dom(), bookmark.soffset());\n rng.setEnd(bookmark.finish().dom(), bookmark.foffset());\n return Option.some(rng);\n } catch (_) {\n return Option.none();\n }\n };\n var store = function (editor) {\n var newBookmark = shouldStore(editor) ? getBookmark$2(Element.fromDom(editor.getBody())) : Option.none();\n editor.bookmark = newBookmark.isSome() ? newBookmark : editor.bookmark;\n };\n var storeNative = function (editor, rng) {\n var root = Element.fromDom(editor.getBody());\n var range = shouldStore(editor) ? Option.from(rng) : Option.none();\n var newBookmark = range.map(nativeRangeToSelectionRange).filter(isRngInRoot(root));\n editor.bookmark = newBookmark.isSome() ? newBookmark : editor.bookmark;\n };\n var getRng = function (editor) {\n var bookmark = editor.bookmark ? editor.bookmark : Option.none();\n return bookmark.bind(curry(validate, Element.fromDom(editor.getBody()))).bind(bookmarkToNativeRng);\n };\n var restore = function (editor) {\n getRng(editor).each(function (rng) {\n editor.selection.setRng(rng);\n });\n };\n var SelectionBookmark = {\n store: store,\n storeNative: storeNative,\n readRange: readRange,\n restore: restore,\n getRng: getRng,\n getBookmark: getBookmark$2,\n validate: validate\n };\n\n var indentElement = function (dom, command, useMargin, value, unit, element) {\n if (dom.getContentEditable(element) === 'false') {\n return;\n }\n var indentStyleName = useMargin ? 'margin' : 'padding';\n indentStyleName = element.nodeName === 'TABLE' ? 'margin' : indentStyleName;\n indentStyleName += dom.getStyle(element, 'direction', true) === 'rtl' ? 'Right' : 'Left';\n if (command === 'outdent') {\n var styleValue = Math.max(0, parseInt(element.style[indentStyleName] || 0, 10) - value);\n dom.setStyle(element, indentStyleName, styleValue ? styleValue + unit : '');\n } else {\n var styleValue = parseInt(element.style[indentStyleName] || 0, 10) + value + unit;\n dom.setStyle(element, indentStyleName, styleValue);\n }\n };\n var isListComponent = function (el) {\n return isList(el) || isListItem(el);\n };\n var parentIsListComponent = function (el) {\n return parent(el).map(isListComponent).getOr(false);\n };\n var getBlocksToIndent = function (editor) {\n return filter(map(editor.selection.getSelectedBlocks(), Element.fromDom), function (el) {\n return !isListComponent(el) && !parentIsListComponent(el);\n });\n };\n var handle = function (editor, command) {\n var settings = editor.settings, dom = editor.dom, selection = editor.selection, formatter = editor.formatter;\n var indentUnit = /[a-z%]+$/i.exec(settings.indentation)[0];\n var indentValue = parseInt(settings.indentation, 10);\n var useMargin = editor.getParam('indent_use_margin', false);\n if (!editor.queryCommandState('InsertUnorderedList') && !editor.queryCommandState('InsertOrderedList')) {\n if (!settings.forced_root_block && !dom.getParent(selection.getNode(), dom.isBlock)) {\n formatter.apply('div');\n }\n }\n each(getBlocksToIndent(editor), function (block) {\n indentElement(dom, command, useMargin, indentValue, indentUnit, block.dom());\n });\n };\n\n var each$a = Tools.each, extend$2 = Tools.extend;\n var map$3 = Tools.map, inArray$2 = Tools.inArray;\n function EditorCommands (editor) {\n var dom, selection, formatter;\n var commands = {\n state: {},\n exec: {},\n value: {}\n };\n var settings = editor.settings, bookmark;\n editor.on('PreInit', function () {\n dom = editor.dom;\n selection = editor.selection;\n settings = editor.settings;\n formatter = editor.formatter;\n });\n var execCommand = function (command, ui, value, args) {\n var func, customCommand, state = false;\n if (editor.removed) {\n return;\n }\n if (!/^(mceAddUndoLevel|mceEndUndoLevel|mceBeginUndoLevel|mceRepaint)$/.test(command) && (!args || !args.skip_focus)) {\n editor.focus();\n } else {\n SelectionBookmark.restore(editor);\n }\n args = editor.fire('BeforeExecCommand', {\n command: command,\n ui: ui,\n value: value\n });\n if (args.isDefaultPrevented()) {\n return false;\n }\n customCommand = command.toLowerCase();\n if (func = commands.exec[customCommand]) {\n func(customCommand, ui, value);\n editor.fire('ExecCommand', {\n command: command,\n ui: ui,\n value: value\n });\n return true;\n }\n each$a(editor.plugins, function (p) {\n if (p.execCommand && p.execCommand(command, ui, value)) {\n editor.fire('ExecCommand', {\n command: command,\n ui: ui,\n value: value\n });\n state = true;\n return false;\n }\n });\n if (state) {\n return state;\n }\n if (editor.theme && editor.theme.execCommand && editor.theme.execCommand(command, ui, value)) {\n editor.fire('ExecCommand', {\n command: command,\n ui: ui,\n value: value\n });\n return true;\n }\n try {\n state = editor.getDoc().execCommand(command, ui, value);\n } catch (ex) {\n }\n if (state) {\n editor.fire('ExecCommand', {\n command: command,\n ui: ui,\n value: value\n });\n return true;\n }\n return false;\n };\n var queryCommandState = function (command) {\n var func;\n if (editor.quirks.isHidden() || editor.removed) {\n return;\n }\n command = command.toLowerCase();\n if (func = commands.state[command]) {\n return func(command);\n }\n try {\n return editor.getDoc().queryCommandState(command);\n } catch (ex) {\n }\n return false;\n };\n var queryCommandValue = function (command) {\n var func;\n if (editor.quirks.isHidden() || editor.removed) {\n return;\n }\n command = command.toLowerCase();\n if (func = commands.value[command]) {\n return func(command);\n }\n try {\n return editor.getDoc().queryCommandValue(command);\n } catch (ex) {\n }\n };\n var addCommands = function (commandList, type) {\n type = type || 'exec';\n each$a(commandList, function (callback, command) {\n each$a(command.toLowerCase().split(','), function (command) {\n commands[type][command] = callback;\n });\n });\n };\n var addCommand = function (command, callback, scope) {\n command = command.toLowerCase();\n commands.exec[command] = function (command, ui, value, args) {\n return callback.call(scope || editor, ui, value, args);\n };\n };\n var queryCommandSupported = function (command) {\n command = command.toLowerCase();\n if (commands.exec[command]) {\n return true;\n }\n try {\n return editor.getDoc().queryCommandSupported(command);\n } catch (ex) {\n }\n return false;\n };\n var addQueryStateHandler = function (command, callback, scope) {\n command = command.toLowerCase();\n commands.state[command] = function () {\n return callback.call(scope || editor);\n };\n };\n var addQueryValueHandler = function (command, callback, scope) {\n command = command.toLowerCase();\n commands.value[command] = function () {\n return callback.call(scope || editor);\n };\n };\n var hasCustomCommand = function (command) {\n command = command.toLowerCase();\n return !!commands.exec[command];\n };\n extend$2(this, {\n execCommand: execCommand,\n queryCommandState: queryCommandState,\n queryCommandValue: queryCommandValue,\n queryCommandSupported: queryCommandSupported,\n addCommands: addCommands,\n addCommand: addCommand,\n addQueryStateHandler: addQueryStateHandler,\n addQueryValueHandler: addQueryValueHandler,\n hasCustomCommand: hasCustomCommand\n });\n var execNativeCommand = function (command, ui, value) {\n if (ui === undefined) {\n ui = false;\n }\n if (value === undefined) {\n value = null;\n }\n return editor.getDoc().execCommand(command, ui, value);\n };\n var isFormatMatch = function (name) {\n return formatter.match(name);\n };\n var toggleFormat = function (name, value) {\n formatter.toggle(name, value ? { value: value } : undefined);\n editor.nodeChanged();\n };\n var storeSelection = function (type) {\n bookmark = selection.getBookmark(type);\n };\n var restoreSelection = function () {\n selection.moveToBookmark(bookmark);\n };\n addCommands({\n 'mceResetDesignMode,mceBeginUndoLevel': function () {\n },\n 'mceEndUndoLevel,mceAddUndoLevel': function () {\n editor.undoManager.add();\n },\n 'Cut,Copy,Paste': function (command) {\n var doc = editor.getDoc();\n var failed;\n try {\n execNativeCommand(command);\n } catch (ex) {\n failed = true;\n }\n if (command === 'paste' && !doc.queryCommandEnabled(command)) {\n failed = true;\n }\n if (failed || !doc.queryCommandSupported(command)) {\n var msg = editor.translate('Your browser doesn\\'t support direct access to the clipboard. ' + 'Please use the Ctrl+X/C/V keyboard shortcuts instead.');\n if (Env.mac) {\n msg = msg.replace(/Ctrl\\+/g, '\\u2318+');\n }\n editor.notificationManager.open({\n text: msg,\n type: 'error'\n });\n }\n },\n 'unlink': function () {\n if (selection.isCollapsed()) {\n var elm = editor.dom.getParent(editor.selection.getStart(), 'a');\n if (elm) {\n editor.dom.remove(elm, true);\n }\n return;\n }\n formatter.remove('link');\n },\n 'JustifyLeft,JustifyCenter,JustifyRight,JustifyFull,JustifyNone': function (command) {\n var align = command.substring(7);\n if (align === 'full') {\n align = 'justify';\n }\n each$a('left,center,right,justify'.split(','), function (name) {\n if (align !== name) {\n formatter.remove('align' + name);\n }\n });\n if (align !== 'none') {\n toggleFormat('align' + align);\n }\n },\n 'InsertUnorderedList,InsertOrderedList': function (command) {\n var listElm, listParent;\n execNativeCommand(command);\n listElm = dom.getParent(selection.getNode(), 'ol,ul');\n if (listElm) {\n listParent = listElm.parentNode;\n if (/^(H[1-6]|P|ADDRESS|PRE)$/.test(listParent.nodeName)) {\n storeSelection();\n dom.split(listParent, listElm);\n restoreSelection();\n }\n }\n },\n 'Bold,Italic,Underline,Strikethrough,Superscript,Subscript': function (command) {\n toggleFormat(command);\n },\n 'ForeColor,HiliteColor': function (command, ui, value) {\n toggleFormat(command, value);\n },\n 'FontName': function (command, ui, value) {\n fontNameAction(editor, value);\n },\n 'FontSize': function (command, ui, value) {\n fontSizeAction(editor, value);\n },\n 'RemoveFormat': function (command) {\n formatter.remove(command);\n },\n 'mceBlockQuote': function () {\n toggleFormat('blockquote');\n },\n 'FormatBlock': function (command, ui, value) {\n return toggleFormat(value || 'p');\n },\n 'mceCleanup': function () {\n var bookmark = selection.getBookmark();\n editor.setContent(editor.getContent());\n selection.moveToBookmark(bookmark);\n },\n 'mceRemoveNode': function (command, ui, value) {\n var node = value || selection.getNode();\n if (node !== editor.getBody()) {\n storeSelection();\n editor.dom.remove(node, true);\n restoreSelection();\n }\n },\n 'mceSelectNodeDepth': function (command, ui, value) {\n var counter = 0;\n dom.getParent(selection.getNode(), function (node) {\n if (node.nodeType === 1 && counter++ === value) {\n selection.select(node);\n return false;\n }\n }, editor.getBody());\n },\n 'mceSelectNode': function (command, ui, value) {\n selection.select(value);\n },\n 'mceInsertContent': function (command, ui, value) {\n InsertContent.insertAtCaret(editor, value);\n },\n 'mceInsertRawHTML': function (command, ui, value) {\n selection.setContent('tiny_mce_marker');\n var content = editor.getContent();\n editor.setContent(content.replace(/tiny_mce_marker/g, function () {\n return value;\n }));\n },\n 'mceToggleFormat': function (command, ui, value) {\n toggleFormat(value);\n },\n 'mceSetContent': function (command, ui, value) {\n editor.setContent(value);\n },\n 'Indent,Outdent': function (command) {\n handle(editor, command);\n },\n 'mceRepaint': function () {\n },\n 'InsertHorizontalRule': function () {\n editor.execCommand('mceInsertContent', false, '
');\n },\n 'mceToggleVisualAid': function () {\n editor.hasVisual = !editor.hasVisual;\n editor.addVisual();\n },\n 'mceReplaceContent': function (command, ui, value) {\n editor.execCommand('mceInsertContent', false, value.replace(/\\{\\$selection\\}/g, selection.getContent({ format: 'text' })));\n },\n 'mceInsertLink': function (command, ui, value) {\n var anchor;\n if (typeof value === 'string') {\n value = { href: value };\n }\n anchor = dom.getParent(selection.getNode(), 'a');\n value.href = value.href.replace(' ', '%20');\n if (!anchor || !value.href) {\n formatter.remove('link');\n }\n if (value.href) {\n formatter.apply('link', value, anchor);\n }\n },\n 'selectAll': function () {\n var editingHost = dom.getParent(selection.getStart(), NodeType.isContentEditableTrue);\n if (editingHost) {\n var rng = dom.createRng();\n rng.selectNodeContents(editingHost);\n selection.setRng(rng);\n }\n },\n 'delete': function () {\n DeleteCommands.deleteCommand(editor);\n },\n 'forwardDelete': function () {\n DeleteCommands.forwardDeleteCommand(editor);\n },\n 'mceNewDocument': function () {\n editor.setContent('');\n },\n 'InsertLineBreak': function (command, ui, value) {\n InsertBr.insert(editor, value);\n return true;\n }\n });\n var alignStates = function (name) {\n return function () {\n var nodes = selection.isCollapsed() ? [dom.getParent(selection.getNode(), dom.isBlock)] : selection.getSelectedBlocks();\n var matches = map$3(nodes, function (node) {\n return !!formatter.matchNode(node, name);\n });\n return inArray$2(matches, true) !== -1;\n };\n };\n addCommands({\n 'JustifyLeft': alignStates('alignleft'),\n 'JustifyCenter': alignStates('aligncenter'),\n 'JustifyRight': alignStates('alignright'),\n 'JustifyFull': alignStates('alignjustify'),\n 'Bold,Italic,Underline,Strikethrough,Superscript,Subscript': function (command) {\n return isFormatMatch(command);\n },\n 'mceBlockQuote': function () {\n return isFormatMatch('blockquote');\n },\n 'Outdent': function () {\n var node;\n if (settings.inline_styles) {\n if ((node = dom.getParent(selection.getStart(), dom.isBlock)) && parseInt(node.style.paddingLeft, 10) > 0) {\n return true;\n }\n if ((node = dom.getParent(selection.getEnd(), dom.isBlock)) && parseInt(node.style.paddingLeft, 10) > 0) {\n return true;\n }\n }\n return queryCommandState('InsertUnorderedList') || queryCommandState('InsertOrderedList') || !settings.inline_styles && !!dom.getParent(selection.getNode(), 'BLOCKQUOTE');\n },\n 'InsertUnorderedList,InsertOrderedList': function (command) {\n var list = dom.getParent(selection.getNode(), 'ul,ol');\n return list && (command === 'insertunorderedlist' && list.tagName === 'UL' || command === 'insertorderedlist' && list.tagName === 'OL');\n }\n }, 'state');\n addCommands({\n Undo: function () {\n editor.undoManager.undo();\n },\n Redo: function () {\n editor.undoManager.redo();\n }\n });\n addQueryValueHandler('FontName', function () {\n return fontNameQuery(editor);\n }, this);\n addQueryValueHandler('FontSize', function () {\n return fontSizeQuery(editor);\n }, this);\n }\n\n var nativeEvents = Tools.makeMap('focus blur focusin focusout click dblclick mousedown mouseup mousemove mouseover beforepaste paste cut copy selectionchange ' + 'mouseout mouseenter mouseleave wheel keydown keypress keyup input contextmenu dragstart dragend dragover ' + 'draggesture dragdrop drop drag submit ' + 'compositionstart compositionend compositionupdate touchstart touchmove touchend', ' ');\n var Dispatcher = function (settings) {\n var self = this;\n var scope, bindings = {}, toggleEvent;\n var returnFalse = function () {\n return false;\n };\n var returnTrue = function () {\n return true;\n };\n settings = settings || {};\n scope = settings.scope || self;\n toggleEvent = settings.toggleEvent || returnFalse;\n var fire = function (name, args) {\n var handlers, i, l, callback;\n name = name.toLowerCase();\n args = args || {};\n args.type = name;\n if (!args.target) {\n args.target = scope;\n }\n if (!args.preventDefault) {\n args.preventDefault = function () {\n args.isDefaultPrevented = returnTrue;\n };\n args.stopPropagation = function () {\n args.isPropagationStopped = returnTrue;\n };\n args.stopImmediatePropagation = function () {\n args.isImmediatePropagationStopped = returnTrue;\n };\n args.isDefaultPrevented = returnFalse;\n args.isPropagationStopped = returnFalse;\n args.isImmediatePropagationStopped = returnFalse;\n }\n if (settings.beforeFire) {\n settings.beforeFire(args);\n }\n handlers = bindings[name];\n if (handlers) {\n for (i = 0, l = handlers.length; i < l; i++) {\n callback = handlers[i];\n if (callback.once) {\n off(name, callback.func);\n }\n if (args.isImmediatePropagationStopped()) {\n args.stopPropagation();\n return args;\n }\n if (callback.func.call(scope, args) === false) {\n args.preventDefault();\n return args;\n }\n }\n }\n return args;\n };\n var on = function (name, callback, prepend, extra) {\n var handlers, names, i;\n if (callback === false) {\n callback = returnFalse;\n }\n if (callback) {\n callback = { func: callback };\n if (extra) {\n Tools.extend(callback, extra);\n }\n names = name.toLowerCase().split(' ');\n i = names.length;\n while (i--) {\n name = names[i];\n handlers = bindings[name];\n if (!handlers) {\n handlers = bindings[name] = [];\n toggleEvent(name, true);\n }\n if (prepend) {\n handlers.unshift(callback);\n } else {\n handlers.push(callback);\n }\n }\n }\n return self;\n };\n var off = function (name, callback) {\n var i, handlers, bindingName, names, hi;\n if (name) {\n names = name.toLowerCase().split(' ');\n i = names.length;\n while (i--) {\n name = names[i];\n handlers = bindings[name];\n if (!name) {\n for (bindingName in bindings) {\n toggleEvent(bindingName, false);\n delete bindings[bindingName];\n }\n return self;\n }\n if (handlers) {\n if (!callback) {\n handlers.length = 0;\n } else {\n hi = handlers.length;\n while (hi--) {\n if (handlers[hi].func === callback) {\n handlers = handlers.slice(0, hi).concat(handlers.slice(hi + 1));\n bindings[name] = handlers;\n }\n }\n }\n if (!handlers.length) {\n toggleEvent(name, false);\n delete bindings[name];\n }\n }\n }\n } else {\n for (name in bindings) {\n toggleEvent(name, false);\n }\n bindings = {};\n }\n return self;\n };\n var once = function (name, callback, prepend) {\n return on(name, callback, prepend, { once: true });\n };\n var has = function (name) {\n name = name.toLowerCase();\n return !(!bindings[name] || bindings[name].length === 0);\n };\n self.fire = fire;\n self.on = on;\n self.off = off;\n self.once = once;\n self.has = has;\n };\n Dispatcher.isNative = function (name) {\n return !!nativeEvents[name.toLowerCase()];\n };\n\n var getEventDispatcher = function (obj) {\n if (!obj._eventDispatcher) {\n obj._eventDispatcher = new Dispatcher({\n scope: obj,\n toggleEvent: function (name, state) {\n if (Dispatcher.isNative(name) && obj.toggleNativeEvent) {\n obj.toggleNativeEvent(name, state);\n }\n }\n });\n }\n return obj._eventDispatcher;\n };\n var Observable = {\n fire: function (name, args, bubble) {\n var self = this;\n if (self.removed && name !== 'remove' && name !== 'detach') {\n return args;\n }\n args = getEventDispatcher(self).fire(name, args, bubble);\n if (bubble !== false && self.parent) {\n var parent = self.parent();\n while (parent && !args.isPropagationStopped()) {\n parent.fire(name, args, false);\n parent = parent.parent();\n }\n }\n return args;\n },\n on: function (name, callback, prepend) {\n return getEventDispatcher(this).on(name, callback, prepend);\n },\n off: function (name, callback) {\n return getEventDispatcher(this).off(name, callback);\n },\n once: function (name, callback) {\n return getEventDispatcher(this).once(name, callback);\n },\n hasEventListeners: function (name) {\n return getEventDispatcher(this).has(name);\n }\n };\n\n var firePreProcess = function (editor, args) {\n return editor.fire('PreProcess', args);\n };\n var firePostProcess = function (editor, args) {\n return editor.fire('PostProcess', args);\n };\n var fireRemove = function (editor) {\n return editor.fire('remove');\n };\n var fireDetach = function (editor) {\n return editor.fire('detach');\n };\n var fireSwitchMode = function (editor, mode) {\n return editor.fire('SwitchMode', { mode: mode });\n };\n var fireObjectResizeStart = function (editor, target, width, height) {\n editor.fire('ObjectResizeStart', {\n target: target,\n width: width,\n height: height\n });\n };\n var fireObjectResized = function (editor, target, width, height) {\n editor.fire('ObjectResized', {\n target: target,\n width: width,\n height: height\n });\n };\n var Events = {\n firePreProcess: firePreProcess,\n firePostProcess: firePostProcess,\n fireRemove: fireRemove,\n fireDetach: fireDetach,\n fireSwitchMode: fireSwitchMode,\n fireObjectResizeStart: fireObjectResizeStart,\n fireObjectResized: fireObjectResized\n };\n\n var setEditorCommandState = function (editor, cmd, state) {\n try {\n editor.getDoc().execCommand(cmd, false, state);\n } catch (ex) {\n }\n };\n var toggleClass = function (elm, cls, state) {\n if (has$2(elm, cls) && state === false) {\n remove$4(elm, cls);\n } else if (state) {\n add$2(elm, cls);\n }\n };\n var toggleReadOnly = function (editor, state) {\n toggleClass(Element.fromDom(editor.getBody()), 'mce-content-readonly', state);\n if (state) {\n editor.selection.controlSelection.hideResizeRect();\n editor.readonly = true;\n editor.getBody().contentEditable = 'false';\n } else {\n editor.readonly = false;\n editor.getBody().contentEditable = 'true';\n setEditorCommandState(editor, 'StyleWithCSS', false);\n setEditorCommandState(editor, 'enableInlineTableEditing', false);\n setEditorCommandState(editor, 'enableObjectResizing', false);\n editor.focus();\n editor.nodeChanged();\n }\n };\n var setMode = function (editor, mode) {\n if (mode === getMode(editor)) {\n return;\n }\n if (editor.initialized) {\n toggleReadOnly(editor, mode === 'readonly');\n } else {\n editor.on('init', function () {\n toggleReadOnly(editor, mode === 'readonly');\n });\n }\n Events.fireSwitchMode(editor, mode);\n };\n var getMode = function (editor) {\n return editor.readonly ? 'readonly' : 'design';\n };\n var isReadOnly = function (editor) {\n return editor.readonly === true;\n };\n\n var DOM$1 = DOMUtils$1.DOM;\n var customEventRootDelegates;\n var getEventTarget = function (editor, eventName) {\n if (eventName === 'selectionchange') {\n return editor.getDoc();\n }\n if (!editor.inline && /^mouse|touch|click|contextmenu|drop|dragover|dragend/.test(eventName)) {\n return editor.getDoc().documentElement;\n }\n if (editor.settings.event_root) {\n if (!editor.eventRoot) {\n editor.eventRoot = DOM$1.select(editor.settings.event_root)[0];\n }\n return editor.eventRoot;\n }\n return editor.getBody();\n };\n var isListening = function (editor) {\n return !editor.hidden && !editor.readonly;\n };\n var fireEvent = function (editor, eventName, e) {\n if (isListening(editor)) {\n editor.fire(eventName, e);\n } else if (isReadOnly(editor)) {\n e.preventDefault();\n }\n };\n var bindEventDelegate = function (editor, eventName) {\n var eventRootElm, delegate;\n if (!editor.delegates) {\n editor.delegates = {};\n }\n if (editor.delegates[eventName] || editor.removed) {\n return;\n }\n eventRootElm = getEventTarget(editor, eventName);\n if (editor.settings.event_root) {\n if (!customEventRootDelegates) {\n customEventRootDelegates = {};\n editor.editorManager.on('removeEditor', function () {\n var name;\n if (!editor.editorManager.activeEditor) {\n if (customEventRootDelegates) {\n for (name in customEventRootDelegates) {\n editor.dom.unbind(getEventTarget(editor, name));\n }\n customEventRootDelegates = null;\n }\n }\n });\n }\n if (customEventRootDelegates[eventName]) {\n return;\n }\n delegate = function (e) {\n var target = e.target;\n var editors = editor.editorManager.get();\n var i = editors.length;\n while (i--) {\n var body = editors[i].getBody();\n if (body === target || DOM$1.isChildOf(target, body)) {\n fireEvent(editors[i], eventName, e);\n }\n }\n };\n customEventRootDelegates[eventName] = delegate;\n DOM$1.bind(eventRootElm, eventName, delegate);\n } else {\n delegate = function (e) {\n fireEvent(editor, eventName, e);\n };\n DOM$1.bind(eventRootElm, eventName, delegate);\n editor.delegates[eventName] = delegate;\n }\n };\n var EditorObservable = {\n bindPendingEventDelegates: function () {\n var self = this;\n Tools.each(self._pendingNativeEvents, function (name) {\n bindEventDelegate(self, name);\n });\n },\n toggleNativeEvent: function (name, state) {\n var self = this;\n if (name === 'focus' || name === 'blur') {\n return;\n }\n if (state) {\n if (self.initialized) {\n bindEventDelegate(self, name);\n } else {\n if (!self._pendingNativeEvents) {\n self._pendingNativeEvents = [name];\n } else {\n self._pendingNativeEvents.push(name);\n }\n }\n } else if (self.initialized) {\n self.dom.unbind(getEventTarget(self, name), name, self.delegates[name]);\n delete self.delegates[name];\n }\n },\n unbindAllNativeEvents: function () {\n var self = this;\n var body = self.getBody();\n var dom = self.dom;\n var name;\n if (self.delegates) {\n for (name in self.delegates) {\n self.dom.unbind(getEventTarget(self, name), name, self.delegates[name]);\n }\n delete self.delegates;\n }\n if (!self.inline && body && dom) {\n body.onload = null;\n dom.unbind(self.getWin());\n dom.unbind(self.getDoc());\n }\n if (dom) {\n dom.unbind(body);\n dom.unbind(self.getContainer());\n }\n }\n };\n EditorObservable = Tools.extend({}, Observable, EditorObservable);\n var EditorObservable$1 = EditorObservable;\n\n var sectionResult = Immutable('sections', 'settings');\n var detection = PlatformDetection$1.detect();\n var isTouch = detection.deviceType.isTouch();\n var mobilePlugins = [\n 'lists',\n 'autolink',\n 'autosave'\n ];\n var defaultMobileSettings = { theme: 'mobile' };\n var normalizePlugins = function (plugins) {\n var pluginNames = isArray(plugins) ? plugins.join(' ') : plugins;\n var trimmedPlugins = map(isString(pluginNames) ? pluginNames.split(' ') : [], trim$2);\n return filter(trimmedPlugins, function (item) {\n return item.length > 0;\n });\n };\n var filterMobilePlugins = function (plugins) {\n return filter(plugins, curry(contains, mobilePlugins));\n };\n var extractSections = function (keys, settings) {\n var result = bifilter(settings, function (value, key) {\n return contains(keys, key);\n });\n return sectionResult(result.t, result.f);\n };\n var getSection = function (sectionResult, name, defaults) {\n var sections = sectionResult.sections();\n var sectionSettings = sections.hasOwnProperty(name) ? sections[name] : {};\n return Tools.extend({}, defaults, sectionSettings);\n };\n var hasSection = function (sectionResult, name) {\n return sectionResult.sections().hasOwnProperty(name);\n };\n var getDefaultSettings = function (id, documentBaseUrl, editor) {\n return {\n id: id,\n theme: 'modern',\n delta_width: 0,\n delta_height: 0,\n popup_css: '',\n plugins: '',\n document_base_url: documentBaseUrl,\n add_form_submit_trigger: true,\n submit_patch: true,\n add_unload_trigger: true,\n convert_urls: true,\n relative_urls: true,\n remove_script_host: true,\n object_resizing: true,\n doctype: '',\n visual: true,\n font_size_style_values: 'xx-small,x-small,small,medium,large,x-large,xx-large',\n font_size_legacy_values: 'xx-small,small,medium,large,x-large,xx-large,300%',\n forced_root_block: 'p',\n hidden_input: true,\n render_ui: true,\n indentation: '40px',\n inline_styles: true,\n convert_fonts_to_spans: true,\n indent: 'simple',\n indent_before: 'p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,th,ul,ol,li,dl,dt,dd,area,table,thead,' + 'tfoot,tbody,tr,section,summary,article,hgroup,aside,figure,figcaption,option,optgroup,datalist',\n indent_after: 'p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,th,ul,ol,li,dl,dt,dd,area,table,thead,' + 'tfoot,tbody,tr,section,summary,article,hgroup,aside,figure,figcaption,option,optgroup,datalist',\n entity_encoding: 'named',\n url_converter: editor.convertURL,\n url_converter_scope: editor,\n ie7_compat: true\n };\n };\n var getExternalPlugins = function (overrideSettings, settings) {\n var userDefinedExternalPlugins = settings.external_plugins ? settings.external_plugins : {};\n if (overrideSettings && overrideSettings.external_plugins) {\n return Tools.extend({}, overrideSettings.external_plugins, userDefinedExternalPlugins);\n } else {\n return userDefinedExternalPlugins;\n }\n };\n var combinePlugins = function (forcedPlugins, plugins) {\n return [].concat(normalizePlugins(forcedPlugins)).concat(normalizePlugins(plugins));\n };\n var processPlugins = function (isTouchDevice, sectionResult, defaultOverrideSettings, settings) {\n var forcedPlugins = normalizePlugins(defaultOverrideSettings.forced_plugins);\n var plugins = normalizePlugins(settings.plugins);\n var platformPlugins = isTouchDevice && hasSection(sectionResult, 'mobile') ? filterMobilePlugins(plugins) : plugins;\n var combinedPlugins = combinePlugins(forcedPlugins, platformPlugins);\n return Tools.extend(settings, { plugins: combinedPlugins.join(' ') });\n };\n var isOnMobile = function (isTouchDevice, sectionResult) {\n var isInline = sectionResult.settings().inline;\n return isTouchDevice && hasSection(sectionResult, 'mobile') && !isInline;\n };\n var combineSettings = function (isTouchDevice, defaultSettings, defaultOverrideSettings, settings) {\n var sectionResult = extractSections(['mobile'], settings);\n var extendedSettings = Tools.extend(defaultSettings, defaultOverrideSettings, sectionResult.settings(), isOnMobile(isTouchDevice, sectionResult) ? getSection(sectionResult, 'mobile', defaultMobileSettings) : {}, {\n validate: true,\n content_editable: sectionResult.settings().inline,\n external_plugins: getExternalPlugins(defaultOverrideSettings, sectionResult.settings())\n });\n return processPlugins(isTouchDevice, sectionResult, defaultOverrideSettings, extendedSettings);\n };\n var getEditorSettings = function (editor, id, documentBaseUrl, defaultOverrideSettings, settings) {\n var defaultSettings = getDefaultSettings(id, documentBaseUrl, editor);\n return combineSettings(isTouch, defaultSettings, defaultOverrideSettings, settings);\n };\n var getFiltered = function (predicate, editor, name) {\n return Option.from(editor.settings[name]).filter(predicate);\n };\n var getParamObject = function (value) {\n var output = {};\n if (typeof value === 'string') {\n each(value.indexOf('=') > 0 ? value.split(/[;,](?![^=;,]*(?:[;,]|$))/) : value.split(','), function (val) {\n var arr = val.split('=');\n if (arr.length > 1) {\n output[Tools.trim(arr[0])] = Tools.trim(arr[1]);\n } else {\n output[Tools.trim(arr[0])] = Tools.trim(arr);\n }\n });\n } else {\n output = value;\n }\n return output;\n };\n var isArrayOf = function (p) {\n return function (a) {\n return isArray(a) && forall(a, p);\n };\n };\n var getParam = function (editor, name, defaultVal, type) {\n var value = name in editor.settings ? editor.settings[name] : defaultVal;\n if (type === 'hash') {\n return getParamObject(value);\n } else if (type === 'string') {\n return getFiltered(isString, editor, name).getOr(defaultVal);\n } else if (type === 'number') {\n return getFiltered(isNumber, editor, name).getOr(defaultVal);\n } else if (type === 'boolean') {\n return getFiltered(isBoolean, editor, name).getOr(defaultVal);\n } else if (type === 'object') {\n return getFiltered(isObject, editor, name).getOr(defaultVal);\n } else if (type === 'array') {\n return getFiltered(isArray, editor, name).getOr(defaultVal);\n } else if (type === 'string[]') {\n return getFiltered(isArrayOf(isString), editor, name).getOr(defaultVal);\n } else if (type === 'function') {\n return getFiltered(isFunction, editor, name).getOr(defaultVal);\n } else {\n return value;\n }\n };\n\n var each$b = Tools.each, explode$2 = Tools.explode;\n var keyCodeLookup = {\n f1: 112,\n f2: 113,\n f3: 114,\n f4: 115,\n f5: 116,\n f6: 117,\n f7: 118,\n f8: 119,\n f9: 120,\n f10: 121,\n f11: 122,\n f12: 123\n };\n var modifierNames = Tools.makeMap('alt,ctrl,shift,meta,access');\n function Shortcuts (editor) {\n var self = this;\n var shortcuts = {};\n var pendingPatterns = [];\n var parseShortcut = function (pattern) {\n var id, key;\n var shortcut = {};\n each$b(explode$2(pattern, '+'), function (value) {\n if (value in modifierNames) {\n shortcut[value] = true;\n } else {\n if (/^[0-9]{2,}$/.test(value)) {\n shortcut.keyCode = parseInt(value, 10);\n } else {\n shortcut.charCode = value.charCodeAt(0);\n shortcut.keyCode = keyCodeLookup[value] || value.toUpperCase().charCodeAt(0);\n }\n }\n });\n id = [shortcut.keyCode];\n for (key in modifierNames) {\n if (shortcut[key]) {\n id.push(key);\n } else {\n shortcut[key] = false;\n }\n }\n shortcut.id = id.join(',');\n if (shortcut.access) {\n shortcut.alt = true;\n if (Env.mac) {\n shortcut.ctrl = true;\n } else {\n shortcut.shift = true;\n }\n }\n if (shortcut.meta) {\n if (Env.mac) {\n shortcut.meta = true;\n } else {\n shortcut.ctrl = true;\n shortcut.meta = false;\n }\n }\n return shortcut;\n };\n var createShortcut = function (pattern, desc, cmdFunc, scope) {\n var shortcuts;\n shortcuts = Tools.map(explode$2(pattern, '>'), parseShortcut);\n shortcuts[shortcuts.length - 1] = Tools.extend(shortcuts[shortcuts.length - 1], {\n func: cmdFunc,\n scope: scope || editor\n });\n return Tools.extend(shortcuts[0], {\n desc: editor.translate(desc),\n subpatterns: shortcuts.slice(1)\n });\n };\n var hasModifier = function (e) {\n return e.altKey || e.ctrlKey || e.metaKey;\n };\n var isFunctionKey = function (e) {\n return e.type === 'keydown' && e.keyCode >= 112 && e.keyCode <= 123;\n };\n var matchShortcut = function (e, shortcut) {\n if (!shortcut) {\n return false;\n }\n if (shortcut.ctrl !== e.ctrlKey || shortcut.meta !== e.metaKey) {\n return false;\n }\n if (shortcut.alt !== e.altKey || shortcut.shift !== e.shiftKey) {\n return false;\n }\n if (e.keyCode === shortcut.keyCode || e.charCode && e.charCode === shortcut.charCode) {\n e.preventDefault();\n return true;\n }\n return false;\n };\n var executeShortcutAction = function (shortcut) {\n return shortcut.func ? shortcut.func.call(shortcut.scope) : null;\n };\n editor.on('keyup keypress keydown', function (e) {\n if ((hasModifier(e) || isFunctionKey(e)) && !e.isDefaultPrevented()) {\n each$b(shortcuts, function (shortcut) {\n if (matchShortcut(e, shortcut)) {\n pendingPatterns = shortcut.subpatterns.slice(0);\n if (e.type === 'keydown') {\n executeShortcutAction(shortcut);\n }\n return true;\n }\n });\n if (matchShortcut(e, pendingPatterns[0])) {\n if (pendingPatterns.length === 1) {\n if (e.type === 'keydown') {\n executeShortcutAction(pendingPatterns[0]);\n }\n }\n pendingPatterns.shift();\n }\n }\n });\n self.add = function (pattern, desc, cmdFunc, scope) {\n var cmd;\n cmd = cmdFunc;\n if (typeof cmdFunc === 'string') {\n cmdFunc = function () {\n editor.execCommand(cmd, false, null);\n };\n } else if (Tools.isArray(cmd)) {\n cmdFunc = function () {\n editor.execCommand(cmd[0], cmd[1], cmd[2]);\n };\n }\n each$b(explode$2(Tools.trim(pattern.toLowerCase())), function (pattern) {\n var shortcut = createShortcut(pattern, desc, cmdFunc, scope);\n shortcuts[shortcut.id] = shortcut;\n });\n return true;\n };\n self.remove = function (pattern) {\n var shortcut = createShortcut(pattern);\n if (shortcuts[shortcut.id]) {\n delete shortcuts[shortcut.id];\n return true;\n }\n return false;\n };\n }\n\n var hasFocus = function (element) {\n var doc = owner(element).dom();\n return element.dom() === doc.activeElement;\n };\n var active = function (_doc) {\n var doc = _doc !== undefined ? _doc.dom() : domGlobals.document;\n return Option.from(doc.activeElement).map(Element.fromDom);\n };\n var search = function (element) {\n return active(owner(element)).filter(function (e) {\n return element.dom().contains(e.dom());\n });\n };\n\n var getContentEditableHost = function (editor, node) {\n return editor.dom.getParent(node, function (node) {\n return editor.dom.getContentEditable(node) === 'true';\n });\n };\n var getCollapsedNode = function (rng) {\n return rng.collapsed ? Option.from(getNode(rng.startContainer, rng.startOffset)).map(Element.fromDom) : Option.none();\n };\n var getFocusInElement = function (root, rng) {\n return getCollapsedNode(rng).bind(function (node) {\n if (isTableSection(node)) {\n return Option.some(node);\n } else if (contains$3(root, node) === false) {\n return Option.some(root);\n } else {\n return Option.none();\n }\n });\n };\n var normalizeSelection = function (editor, rng) {\n getFocusInElement(Element.fromDom(editor.getBody()), rng).bind(function (elm) {\n return CaretFinder.firstPositionIn(elm.dom());\n }).fold(function () {\n editor.selection.normalize();\n return;\n }, function (caretPos) {\n return editor.selection.setRng(caretPos.toRange());\n });\n };\n var focusBody = function (body) {\n if (body.setActive) {\n try {\n body.setActive();\n } catch (ex) {\n body.focus();\n }\n } else {\n body.focus();\n }\n };\n var hasElementFocus = function (elm) {\n return hasFocus(elm) || search(elm).isSome();\n };\n var hasIframeFocus = function (editor) {\n return editor.iframeElement && hasFocus(Element.fromDom(editor.iframeElement));\n };\n var hasInlineFocus = function (editor) {\n var rawBody = editor.getBody();\n return rawBody && hasElementFocus(Element.fromDom(rawBody));\n };\n var hasFocus$1 = function (editor) {\n return editor.inline ? hasInlineFocus(editor) : hasIframeFocus(editor);\n };\n var focusEditor = function (editor) {\n var selection = editor.selection, contentEditable = editor.settings.content_editable;\n var body = editor.getBody();\n var rng = selection.getRng();\n editor.quirks.refreshContentEditable();\n var contentEditableHost = getContentEditableHost(editor, selection.getNode());\n if (editor.$.contains(body, contentEditableHost)) {\n focusBody(contentEditableHost);\n normalizeSelection(editor, rng);\n activateEditor(editor);\n return;\n }\n if (editor.bookmark !== undefined && hasFocus$1(editor) === false) {\n SelectionBookmark.getRng(editor).each(function (bookmarkRng) {\n editor.selection.setRng(bookmarkRng);\n rng = bookmarkRng;\n });\n }\n if (!contentEditable) {\n if (!Env.opera) {\n focusBody(body);\n }\n editor.getWin().focus();\n }\n if (Env.gecko || contentEditable) {\n focusBody(body);\n normalizeSelection(editor, rng);\n }\n activateEditor(editor);\n };\n var activateEditor = function (editor) {\n return editor.editorManager.setActive(editor);\n };\n var focus = function (editor, skipFocus) {\n if (editor.removed) {\n return;\n }\n skipFocus ? activateEditor(editor) : focusEditor(editor);\n };\n var EditorFocus = {\n focus: focus,\n hasFocus: hasFocus$1\n };\n\n var getProp = function (propName, elm) {\n var rawElm = elm.dom();\n return rawElm[propName];\n };\n var getComputedSizeProp = function (propName, elm) {\n return parseInt(get$1(elm, propName), 10);\n };\n var getClientWidth = curry(getProp, 'clientWidth');\n var getClientHeight = curry(getProp, 'clientHeight');\n var getMarginTop = curry(getComputedSizeProp, 'margin-top');\n var getMarginLeft = curry(getComputedSizeProp, 'margin-left');\n var getBoundingClientRect$1 = function (elm) {\n return elm.dom().getBoundingClientRect();\n };\n var isInsideElementContentArea = function (bodyElm, clientX, clientY) {\n var clientWidth = getClientWidth(bodyElm);\n var clientHeight = getClientHeight(bodyElm);\n return clientX >= 0 && clientY >= 0 && clientX <= clientWidth && clientY <= clientHeight;\n };\n var transpose = function (inline, elm, clientX, clientY) {\n var clientRect = getBoundingClientRect$1(elm);\n var deltaX = inline ? clientRect.left + elm.dom().clientLeft + getMarginLeft(elm) : 0;\n var deltaY = inline ? clientRect.top + elm.dom().clientTop + getMarginTop(elm) : 0;\n var x = clientX - deltaX;\n var y = clientY - deltaY;\n return {\n x: x,\n y: y\n };\n };\n var isXYInContentArea = function (editor, clientX, clientY) {\n var bodyElm = Element.fromDom(editor.getBody());\n var targetElm = editor.inline ? bodyElm : documentElement(bodyElm);\n var transposedPoint = transpose(editor.inline, targetElm, clientX, clientY);\n return isInsideElementContentArea(targetElm, transposedPoint.x, transposedPoint.y);\n };\n var fromDomSafe = function (node) {\n return Option.from(node).map(Element.fromDom);\n };\n var isEditorAttachedToDom = function (editor) {\n var rawContainer = editor.inline ? editor.getBody() : editor.getContentAreaContainer();\n return fromDomSafe(rawContainer).map(function (container) {\n return contains$3(owner(container), container);\n }).getOr(false);\n };\n var EditorView = {\n isXYInContentArea: isXYInContentArea,\n isEditorAttachedToDom: isEditorAttachedToDom\n };\n\n function NotificationManagerImpl () {\n var unimplemented = function () {\n throw new Error('Theme did not provide a NotificationManager implementation.');\n };\n return {\n open: unimplemented,\n close: unimplemented,\n reposition: unimplemented,\n getArgs: unimplemented\n };\n }\n\n function NotificationManager (editor) {\n var notifications = [];\n var getImplementation = function () {\n var theme = editor.theme;\n return theme && theme.getNotificationManagerImpl ? theme.getNotificationManagerImpl() : NotificationManagerImpl();\n };\n var getTopNotification = function () {\n return Option.from(notifications[0]);\n };\n var isEqual = function (a, b) {\n return a.type === b.type && a.text === b.text && !a.progressBar && !a.timeout && !b.progressBar && !b.timeout;\n };\n var reposition = function () {\n if (notifications.length > 0) {\n getImplementation().reposition(notifications);\n }\n };\n var addNotification = function (notification) {\n notifications.push(notification);\n };\n var closeNotification = function (notification) {\n findIndex(notifications, function (otherNotification) {\n return otherNotification === notification;\n }).each(function (index) {\n notifications.splice(index, 1);\n });\n };\n var open = function (args) {\n if (editor.removed || !EditorView.isEditorAttachedToDom(editor)) {\n return;\n }\n return find(notifications, function (notification) {\n return isEqual(getImplementation().getArgs(notification), args);\n }).getOrThunk(function () {\n editor.editorManager.setActive(editor);\n var notification = getImplementation().open(args, function () {\n closeNotification(notification);\n reposition();\n });\n addNotification(notification);\n reposition();\n return notification;\n });\n };\n var close = function () {\n getTopNotification().each(function (notification) {\n getImplementation().close(notification);\n closeNotification(notification);\n reposition();\n });\n };\n var getNotifications = function () {\n return notifications;\n };\n var registerEvents = function (editor) {\n editor.on('SkinLoaded', function () {\n var serviceMessage = editor.settings.service_message;\n if (serviceMessage) {\n open({\n text: serviceMessage,\n type: 'warning',\n timeout: 0,\n icon: ''\n });\n }\n });\n editor.on('ResizeEditor ResizeWindow', function () {\n Delay.requestAnimationFrame(reposition);\n });\n editor.on('remove', function () {\n each(notifications.slice(), function (notification) {\n getImplementation().close(notification);\n });\n });\n };\n registerEvents(editor);\n return {\n open: open,\n close: close,\n getNotifications: getNotifications\n };\n }\n\n function WindowManagerImpl () {\n var unimplemented = function () {\n throw new Error('Theme did not provide a WindowManager implementation.');\n };\n return {\n open: unimplemented,\n alert: unimplemented,\n confirm: unimplemented,\n close: unimplemented,\n getParams: unimplemented,\n setParams: unimplemented\n };\n }\n\n function WindowManager (editor) {\n var windows = [];\n var getImplementation = function () {\n var theme = editor.theme;\n return theme && theme.getWindowManagerImpl ? theme.getWindowManagerImpl() : WindowManagerImpl();\n };\n var funcBind = function (scope, f) {\n return function () {\n return f ? f.apply(scope, arguments) : undefined;\n };\n };\n var fireOpenEvent = function (win) {\n editor.fire('OpenWindow', { win: win });\n };\n var fireCloseEvent = function (win) {\n editor.fire('CloseWindow', { win: win });\n };\n var addWindow = function (win) {\n windows.push(win);\n fireOpenEvent(win);\n };\n var closeWindow = function (win) {\n findIndex(windows, function (otherWindow) {\n return otherWindow === win;\n }).each(function (index) {\n windows.splice(index, 1);\n fireCloseEvent(win);\n if (windows.length === 0) {\n editor.focus();\n }\n });\n };\n var getTopWindow = function () {\n return Option.from(windows[windows.length - 1]);\n };\n var open = function (args, params) {\n editor.editorManager.setActive(editor);\n SelectionBookmark.store(editor);\n var win = getImplementation().open(args, params, closeWindow);\n addWindow(win);\n return win;\n };\n var alert = function (message, callback, scope) {\n var win = getImplementation().alert(message, funcBind(scope ? scope : this, callback), closeWindow);\n addWindow(win);\n };\n var confirm = function (message, callback, scope) {\n var win = getImplementation().confirm(message, funcBind(scope ? scope : this, callback), closeWindow);\n addWindow(win);\n };\n var close = function () {\n getTopWindow().each(function (win) {\n getImplementation().close(win);\n closeWindow(win);\n });\n };\n var getParams = function () {\n return getTopWindow().map(getImplementation().getParams).getOr(null);\n };\n var setParams = function (params) {\n getTopWindow().each(function (win) {\n getImplementation().setParams(win, params);\n });\n };\n var getWindows = function () {\n return windows;\n };\n editor.on('remove', function () {\n each(windows.slice(0), function (win) {\n getImplementation().close(win);\n });\n });\n return {\n windows: windows,\n open: open,\n alert: alert,\n confirm: confirm,\n close: close,\n getParams: getParams,\n setParams: setParams,\n getWindows: getWindows\n };\n }\n\n var data = {};\n var code = 'en';\n var I18n = {\n setCode: function (newCode) {\n if (newCode) {\n code = newCode;\n this.rtl = this.data[newCode] ? this.data[newCode]._dir === 'rtl' : false;\n }\n },\n getCode: function () {\n return code;\n },\n rtl: false,\n add: function (code, items) {\n var langData = data[code];\n if (!langData) {\n data[code] = langData = {};\n }\n for (var name in items) {\n langData[name] = items[name];\n }\n this.setCode(code);\n },\n translate: function (text) {\n var langData = data[code] || {};\n var toString = function (obj) {\n if (Tools.is(obj, 'function')) {\n return Object.prototype.toString.call(obj);\n }\n return !isEmpty(obj) ? '' + obj : '';\n };\n var isEmpty = function (text) {\n return text === '' || text === null || Tools.is(text, 'undefined');\n };\n var getLangData = function (text) {\n text = toString(text);\n return Tools.hasOwn(langData, text) ? toString(langData[text]) : text;\n };\n if (isEmpty(text)) {\n return '';\n }\n if (Tools.is(text, 'object') && Tools.hasOwn(text, 'raw')) {\n return toString(text.raw);\n }\n if (Tools.is(text, 'array')) {\n var values_1 = text.slice(1);\n text = getLangData(text[0]).replace(/\\{([0-9]+)\\}/g, function ($1, $2) {\n return Tools.hasOwn(values_1, $2) ? toString(values_1[$2]) : $1;\n });\n }\n return getLangData(text).replace(/{context:\\w+}$/, '');\n },\n data: data\n };\n\n var PluginManager = AddOnManager.PluginManager;\n var resolvePluginName = function (targetUrl, suffix) {\n for (var name in PluginManager.urls) {\n var matchUrl = PluginManager.urls[name] + '/plugin' + suffix + '.js';\n if (matchUrl === targetUrl) {\n return name;\n }\n }\n return null;\n };\n var pluginUrlToMessage = function (editor, url) {\n var plugin = resolvePluginName(url, editor.suffix);\n return plugin ? I18n.translate([\n 'Failed to load plugin: {0} from url {1}',\n plugin,\n url\n ]) : I18n.translate([\n 'Failed to load plugin url: {0}',\n url\n ]);\n };\n var displayNotification = function (editor, message) {\n editor.notificationManager.open({\n type: 'error',\n text: message\n });\n };\n var displayError = function (editor, message) {\n if (editor._skinLoaded) {\n displayNotification(editor, message);\n } else {\n editor.on('SkinLoaded', function () {\n displayNotification(editor, message);\n });\n }\n };\n var uploadError = function (editor, message) {\n displayError(editor, I18n.translate([\n 'Failed to upload image: {0}',\n message\n ]));\n };\n var pluginLoadError = function (editor, url) {\n displayError(editor, pluginUrlToMessage(editor, url));\n };\n var pluginInitError = function (editor, name, err) {\n var message = I18n.translate([\n 'Failed to initialize plugin: {0}',\n name\n ]);\n initError(message, err);\n displayError(editor, message);\n };\n var initError = function (message) {\n var x = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n x[_i - 1] = arguments[_i];\n }\n var console = domGlobals.window.console;\n if (console) {\n if (console.error) {\n console.error.apply(console, arguments);\n } else {\n console.log.apply(console, arguments);\n }\n }\n };\n var ErrorReporter = {\n pluginLoadError: pluginLoadError,\n pluginInitError: pluginInitError,\n uploadError: uploadError,\n displayError: displayError,\n initError: initError\n };\n\n var PluginManager$1 = AddOnManager.PluginManager;\n\n var ThemeManager = AddOnManager.ThemeManager;\n\n function XMLHttpRequest () {\n var f = Global$1.getOrDie('XMLHttpRequest');\n return new f();\n }\n\n function Uploader (uploadStatus, settings) {\n var pendingPromises = {};\n var pathJoin = function (path1, path2) {\n if (path1) {\n return path1.replace(/\\/$/, '') + '/' + path2.replace(/^\\//, '');\n }\n return path2;\n };\n var defaultHandler = function (blobInfo, success, failure, progress) {\n var xhr, formData;\n xhr = XMLHttpRequest();\n xhr.open('POST', settings.url);\n xhr.withCredentials = settings.credentials;\n xhr.upload.onprogress = function (e) {\n progress(e.loaded / e.total * 100);\n };\n xhr.onerror = function () {\n failure('Image upload failed due to a XHR Transport error. Code: ' + xhr.status);\n };\n xhr.onload = function () {\n var json;\n if (xhr.status < 200 || xhr.status >= 300) {\n failure('HTTP Error: ' + xhr.status);\n return;\n }\n json = JSON.parse(xhr.responseText);\n if (!json || typeof json.location !== 'string') {\n failure('Invalid JSON: ' + xhr.responseText);\n return;\n }\n success(pathJoin(settings.basePath, json.location));\n };\n formData = new domGlobals.FormData();\n formData.append('file', blobInfo.blob(), blobInfo.filename());\n xhr.send(formData);\n };\n var noUpload = function () {\n return new promiseObj(function (resolve) {\n resolve([]);\n });\n };\n var handlerSuccess = function (blobInfo, url) {\n return {\n url: url,\n blobInfo: blobInfo,\n status: true\n };\n };\n var handlerFailure = function (blobInfo, error) {\n return {\n url: '',\n blobInfo: blobInfo,\n status: false,\n error: error\n };\n };\n var resolvePending = function (blobUri, result) {\n Tools.each(pendingPromises[blobUri], function (resolve) {\n resolve(result);\n });\n delete pendingPromises[blobUri];\n };\n var uploadBlobInfo = function (blobInfo, handler, openNotification) {\n uploadStatus.markPending(blobInfo.blobUri());\n return new promiseObj(function (resolve) {\n var notification, progress;\n var noop = function () {\n };\n try {\n var closeNotification_1 = function () {\n if (notification) {\n notification.close();\n progress = noop;\n }\n };\n var success = function (url) {\n closeNotification_1();\n uploadStatus.markUploaded(blobInfo.blobUri(), url);\n resolvePending(blobInfo.blobUri(), handlerSuccess(blobInfo, url));\n resolve(handlerSuccess(blobInfo, url));\n };\n var failure = function (error) {\n closeNotification_1();\n uploadStatus.removeFailed(blobInfo.blobUri());\n resolvePending(blobInfo.blobUri(), handlerFailure(blobInfo, error));\n resolve(handlerFailure(blobInfo, error));\n };\n progress = function (percent) {\n if (percent < 0 || percent > 100) {\n return;\n }\n if (!notification) {\n notification = openNotification();\n }\n notification.progressBar.value(percent);\n };\n handler(blobInfo, success, failure, progress);\n } catch (ex) {\n resolve(handlerFailure(blobInfo, ex.message));\n }\n });\n };\n var isDefaultHandler = function (handler) {\n return handler === defaultHandler;\n };\n var pendingUploadBlobInfo = function (blobInfo) {\n var blobUri = blobInfo.blobUri();\n return new promiseObj(function (resolve) {\n pendingPromises[blobUri] = pendingPromises[blobUri] || [];\n pendingPromises[blobUri].push(resolve);\n });\n };\n var uploadBlobs = function (blobInfos, openNotification) {\n blobInfos = Tools.grep(blobInfos, function (blobInfo) {\n return !uploadStatus.isUploaded(blobInfo.blobUri());\n });\n return promiseObj.all(Tools.map(blobInfos, function (blobInfo) {\n return uploadStatus.isPending(blobInfo.blobUri()) ? pendingUploadBlobInfo(blobInfo) : uploadBlobInfo(blobInfo, settings.handler, openNotification);\n }));\n };\n var upload = function (blobInfos, openNotification) {\n return !settings.url && isDefaultHandler(settings.handler) ? noUpload() : uploadBlobs(blobInfos, openNotification);\n };\n if (isFunction(settings.handler) === false) {\n settings.handler = defaultHandler;\n }\n return { upload: upload };\n }\n\n function FileReader () {\n var f = Global$1.getOrDie('FileReader');\n return new f();\n }\n\n function Uint8Array (arr) {\n var f = Global$1.getOrDie('Uint8Array');\n return new f(arr);\n }\n\n var requestAnimationFrame$1 = function (callback) {\n var f = Global$1.getOrDie('requestAnimationFrame');\n f(callback);\n };\n var atob = function (base64) {\n var f = Global$1.getOrDie('atob');\n return f(base64);\n };\n var Window = {\n atob: atob,\n requestAnimationFrame: requestAnimationFrame$1\n };\n\n var blobUriToBlob = function (url) {\n return new promiseObj(function (resolve, reject) {\n var rejectWithError = function () {\n reject('Cannot convert ' + url + ' to Blob. Resource might not exist or is inaccessible.');\n };\n try {\n var xhr = XMLHttpRequest();\n xhr.open('GET', url, true);\n xhr.responseType = 'blob';\n xhr.onload = function () {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n rejectWithError();\n }\n };\n xhr.onerror = rejectWithError;\n xhr.send();\n } catch (ex) {\n rejectWithError();\n }\n });\n };\n var parseDataUri = function (uri) {\n var type, matches;\n var uriParts = decodeURIComponent(uri).split(',');\n matches = /data:([^;]+)/.exec(uriParts[0]);\n if (matches) {\n type = matches[1];\n }\n return {\n type: type,\n data: uriParts[1]\n };\n };\n var dataUriToBlob = function (uri) {\n return new promiseObj(function (resolve) {\n var str, arr, i;\n var uriParts = parseDataUri(uri);\n try {\n str = Window.atob(uriParts.data);\n } catch (e) {\n resolve(new domGlobals.Blob([]));\n return;\n }\n arr = Uint8Array(str.length);\n for (i = 0; i < arr.length; i++) {\n arr[i] = str.charCodeAt(i);\n }\n resolve(new domGlobals.Blob([arr], { type: uriParts.type }));\n });\n };\n var uriToBlob = function (url) {\n if (url.indexOf('blob:') === 0) {\n return blobUriToBlob(url);\n }\n if (url.indexOf('data:') === 0) {\n return dataUriToBlob(url);\n }\n return null;\n };\n var blobToDataUri = function (blob) {\n return new promiseObj(function (resolve) {\n var reader = FileReader();\n reader.onloadend = function () {\n resolve(reader.result);\n };\n reader.readAsDataURL(blob);\n });\n };\n var Conversions = {\n uriToBlob: uriToBlob,\n blobToDataUri: blobToDataUri,\n parseDataUri: parseDataUri\n };\n\n var count = 0;\n var uniqueId = function (prefix) {\n return (prefix || 'blobid') + count++;\n };\n var imageToBlobInfo = function (blobCache, img, resolve, reject) {\n var base64, blobInfo;\n if (img.src.indexOf('blob:') === 0) {\n blobInfo = blobCache.getByUri(img.src);\n if (blobInfo) {\n resolve({\n image: img,\n blobInfo: blobInfo\n });\n } else {\n Conversions.uriToBlob(img.src).then(function (blob) {\n Conversions.blobToDataUri(blob).then(function (dataUri) {\n base64 = Conversions.parseDataUri(dataUri).data;\n blobInfo = blobCache.create(uniqueId(), blob, base64);\n blobCache.add(blobInfo);\n resolve({\n image: img,\n blobInfo: blobInfo\n });\n });\n }, function (err) {\n reject(err);\n });\n }\n return;\n }\n base64 = Conversions.parseDataUri(img.src).data;\n blobInfo = blobCache.findFirst(function (cachedBlobInfo) {\n return cachedBlobInfo.base64() === base64;\n });\n if (blobInfo) {\n resolve({\n image: img,\n blobInfo: blobInfo\n });\n } else {\n Conversions.uriToBlob(img.src).then(function (blob) {\n blobInfo = blobCache.create(uniqueId(), blob, base64);\n blobCache.add(blobInfo);\n resolve({\n image: img,\n blobInfo: blobInfo\n });\n }, function (err) {\n reject(err);\n });\n }\n };\n var getAllImages = function (elm) {\n return elm ? from$1(elm.getElementsByTagName('img')) : [];\n };\n function ImageScanner (uploadStatus, blobCache) {\n var cachedPromises = {};\n var findAll = function (elm, predicate) {\n var images;\n if (!predicate) {\n predicate = constant(true);\n }\n images = filter(getAllImages(elm), function (img) {\n var src = img.src;\n if (!Env.fileApi) {\n return false;\n }\n if (img.hasAttribute('data-mce-bogus')) {\n return false;\n }\n if (img.hasAttribute('data-mce-placeholder')) {\n return false;\n }\n if (!src || src === Env.transparentSrc) {\n return false;\n }\n if (src.indexOf('blob:') === 0) {\n return !uploadStatus.isUploaded(src) && predicate(img);\n }\n if (src.indexOf('data:') === 0) {\n return predicate(img);\n }\n return false;\n });\n var promises = map(images, function (img) {\n if (cachedPromises[img.src]) {\n return new promiseObj(function (resolve) {\n cachedPromises[img.src].then(function (imageInfo) {\n if (typeof imageInfo === 'string') {\n return imageInfo;\n }\n resolve({\n image: img,\n blobInfo: imageInfo.blobInfo\n });\n });\n });\n }\n var newPromise = new promiseObj(function (resolve, reject) {\n imageToBlobInfo(blobCache, img, resolve, reject);\n }).then(function (result) {\n delete cachedPromises[result.image.src];\n return result;\n }).catch(function (error) {\n delete cachedPromises[img.src];\n return error;\n });\n cachedPromises[img.src] = newPromise;\n return newPromise;\n });\n return promiseObj.all(promises);\n };\n return { findAll: findAll };\n }\n\n var count$1 = 0;\n var seed = function () {\n var rnd = function () {\n return Math.round(Math.random() * 4294967295).toString(36);\n };\n var now = new Date().getTime();\n return 's' + now.toString(36) + rnd() + rnd() + rnd();\n };\n var uuid = function (prefix) {\n return prefix + count$1++ + seed();\n };\n var Uuid = { uuid: uuid };\n\n function BlobCache () {\n var cache = [];\n var mimeToExt = function (mime) {\n var mimes = {\n 'image/jpeg': 'jpg',\n 'image/jpg': 'jpg',\n 'image/gif': 'gif',\n 'image/png': 'png'\n };\n return mimes[mime.toLowerCase()] || 'dat';\n };\n var create = function (o, blob, base64, filename) {\n if (isString(o)) {\n var id = o;\n return toBlobInfo({\n id: id,\n name: filename,\n blob: blob,\n base64: base64\n });\n } else if (isObject(o)) {\n return toBlobInfo(o);\n } else {\n throw new Error('Unknown input type');\n }\n };\n var toBlobInfo = function (o) {\n var id, name;\n if (!o.blob || !o.base64) {\n throw new Error('blob and base64 representations of the image are required for BlobInfo to be created');\n }\n id = o.id || Uuid.uuid('blobid');\n name = o.name || id;\n return {\n id: constant(id),\n name: constant(name),\n filename: constant(name + '.' + mimeToExt(o.blob.type)),\n blob: constant(o.blob),\n base64: constant(o.base64),\n blobUri: constant(o.blobUri || URL.createObjectURL(o.blob)),\n uri: constant(o.uri)\n };\n };\n var add = function (blobInfo) {\n if (!get(blobInfo.id())) {\n cache.push(blobInfo);\n }\n };\n var get = function (id) {\n return findFirst(function (cachedBlobInfo) {\n return cachedBlobInfo.id() === id;\n });\n };\n var findFirst = function (predicate) {\n return filter(cache, predicate)[0];\n };\n var getByUri = function (blobUri) {\n return findFirst(function (blobInfo) {\n return blobInfo.blobUri() === blobUri;\n });\n };\n var removeByUri = function (blobUri) {\n cache = filter(cache, function (blobInfo) {\n if (blobInfo.blobUri() === blobUri) {\n URL.revokeObjectURL(blobInfo.blobUri());\n return false;\n }\n return true;\n });\n };\n var destroy = function () {\n each(cache, function (cachedBlobInfo) {\n URL.revokeObjectURL(cachedBlobInfo.blobUri());\n });\n cache = [];\n };\n return {\n create: create,\n add: add,\n get: get,\n getByUri: getByUri,\n findFirst: findFirst,\n removeByUri: removeByUri,\n destroy: destroy\n };\n }\n\n function UploadStatus () {\n var PENDING = 1, UPLOADED = 2;\n var blobUriStatuses = {};\n var createStatus = function (status, resultUri) {\n return {\n status: status,\n resultUri: resultUri\n };\n };\n var hasBlobUri = function (blobUri) {\n return blobUri in blobUriStatuses;\n };\n var getResultUri = function (blobUri) {\n var result = blobUriStatuses[blobUri];\n return result ? result.resultUri : null;\n };\n var isPending = function (blobUri) {\n return hasBlobUri(blobUri) ? blobUriStatuses[blobUri].status === PENDING : false;\n };\n var isUploaded = function (blobUri) {\n return hasBlobUri(blobUri) ? blobUriStatuses[blobUri].status === UPLOADED : false;\n };\n var markPending = function (blobUri) {\n blobUriStatuses[blobUri] = createStatus(PENDING, null);\n };\n var markUploaded = function (blobUri, resultUri) {\n blobUriStatuses[blobUri] = createStatus(UPLOADED, resultUri);\n };\n var removeFailed = function (blobUri) {\n delete blobUriStatuses[blobUri];\n };\n var destroy = function () {\n blobUriStatuses = {};\n };\n return {\n hasBlobUri: hasBlobUri,\n getResultUri: getResultUri,\n isPending: isPending,\n isUploaded: isUploaded,\n markPending: markPending,\n markUploaded: markUploaded,\n removeFailed: removeFailed,\n destroy: destroy\n };\n }\n\n function EditorUpload (editor) {\n var blobCache = BlobCache();\n var uploader, imageScanner;\n var uploadStatus = UploadStatus();\n var urlFilters = [];\n var aliveGuard = function (callback) {\n return function (result) {\n if (editor.selection) {\n return callback(result);\n }\n return [];\n };\n };\n var cacheInvalidator = function () {\n return '?' + new Date().getTime();\n };\n var replaceString = function (content, search, replace) {\n var index = 0;\n do {\n index = content.indexOf(search, index);\n if (index !== -1) {\n content = content.substring(0, index) + replace + content.substr(index + search.length);\n index += replace.length - search.length + 1;\n }\n } while (index !== -1);\n return content;\n };\n var replaceImageUrl = function (content, targetUrl, replacementUrl) {\n content = replaceString(content, 'src=\"' + targetUrl + '\"', 'src=\"' + replacementUrl + '\"');\n content = replaceString(content, 'data-mce-src=\"' + targetUrl + '\"', 'data-mce-src=\"' + replacementUrl + '\"');\n return content;\n };\n var replaceUrlInUndoStack = function (targetUrl, replacementUrl) {\n each(editor.undoManager.data, function (level) {\n if (level.type === 'fragmented') {\n level.fragments = map(level.fragments, function (fragment) {\n return replaceImageUrl(fragment, targetUrl, replacementUrl);\n });\n } else {\n level.content = replaceImageUrl(level.content, targetUrl, replacementUrl);\n }\n });\n };\n var openNotification = function () {\n return editor.notificationManager.open({\n text: editor.translate('Image uploading...'),\n type: 'info',\n timeout: -1,\n progressBar: true\n });\n };\n var replaceImageUri = function (image, resultUri) {\n blobCache.removeByUri(image.src);\n replaceUrlInUndoStack(image.src, resultUri);\n editor.$(image).attr({\n 'src': Settings.shouldReuseFileName(editor) ? resultUri + cacheInvalidator() : resultUri,\n 'data-mce-src': editor.convertURL(resultUri, 'src')\n });\n };\n var uploadImages = function (callback) {\n if (!uploader) {\n uploader = Uploader(uploadStatus, {\n url: Settings.getImageUploadUrl(editor),\n basePath: Settings.getImageUploadBasePath(editor),\n credentials: Settings.getImagesUploadCredentials(editor),\n handler: Settings.getImagesUploadHandler(editor)\n });\n }\n return scanForImages().then(aliveGuard(function (imageInfos) {\n var blobInfos;\n blobInfos = map(imageInfos, function (imageInfo) {\n return imageInfo.blobInfo;\n });\n return uploader.upload(blobInfos, openNotification).then(aliveGuard(function (result) {\n var filteredResult = map(result, function (uploadInfo, index) {\n var image = imageInfos[index].image;\n if (uploadInfo.status && Settings.shouldReplaceBlobUris(editor)) {\n replaceImageUri(image, uploadInfo.url);\n } else if (uploadInfo.error) {\n ErrorReporter.uploadError(editor, uploadInfo.error);\n }\n return {\n element: image,\n status: uploadInfo.status\n };\n });\n if (callback) {\n callback(filteredResult);\n }\n return filteredResult;\n }));\n }));\n };\n var uploadImagesAuto = function (callback) {\n if (Settings.isAutomaticUploadsEnabled(editor)) {\n return uploadImages(callback);\n }\n };\n var isValidDataUriImage = function (imgElm) {\n if (forall(urlFilters, function (filter) {\n return filter(imgElm);\n }) === false) {\n return false;\n }\n if (imgElm.getAttribute('src').indexOf('data:') === 0) {\n var dataImgFilter = Settings.getImagesDataImgFilter(editor);\n return dataImgFilter(imgElm);\n }\n return true;\n };\n var addFilter = function (filter) {\n urlFilters.push(filter);\n };\n var scanForImages = function () {\n if (!imageScanner) {\n imageScanner = ImageScanner(uploadStatus, blobCache);\n }\n return imageScanner.findAll(editor.getBody(), isValidDataUriImage).then(aliveGuard(function (result) {\n result = filter(result, function (resultItem) {\n if (typeof resultItem === 'string') {\n ErrorReporter.displayError(editor, resultItem);\n return false;\n }\n return true;\n });\n each(result, function (resultItem) {\n replaceUrlInUndoStack(resultItem.image.src, resultItem.blobInfo.blobUri());\n resultItem.image.src = resultItem.blobInfo.blobUri();\n resultItem.image.removeAttribute('data-mce-src');\n });\n return result;\n }));\n };\n var destroy = function () {\n blobCache.destroy();\n uploadStatus.destroy();\n imageScanner = uploader = null;\n };\n var replaceBlobUris = function (content) {\n return content.replace(/src=\"(blob:[^\"]+)\"/g, function (match, blobUri) {\n var resultUri = uploadStatus.getResultUri(blobUri);\n if (resultUri) {\n return 'src=\"' + resultUri + '\"';\n }\n var blobInfo = blobCache.getByUri(blobUri);\n if (!blobInfo) {\n blobInfo = foldl(editor.editorManager.get(), function (result, editor) {\n return result || editor.editorUpload && editor.editorUpload.blobCache.getByUri(blobUri);\n }, null);\n }\n if (blobInfo) {\n var blob = blobInfo.blob();\n return 'src=\"data:' + blob.type + ';base64,' + blobInfo.base64() + '\"';\n }\n return match;\n });\n };\n editor.on('setContent', function () {\n if (Settings.isAutomaticUploadsEnabled(editor)) {\n uploadImagesAuto();\n } else {\n scanForImages();\n }\n });\n editor.on('RawSaveContent', function (e) {\n e.content = replaceBlobUris(e.content);\n });\n editor.on('getContent', function (e) {\n if (e.source_view || e.format === 'raw') {\n return;\n }\n e.content = replaceBlobUris(e.content);\n });\n editor.on('PostRender', function () {\n editor.parser.addNodeFilter('img', function (images) {\n each(images, function (img) {\n var src = img.attr('src');\n if (blobCache.getByUri(src)) {\n return;\n }\n var resultUri = uploadStatus.getResultUri(src);\n if (resultUri) {\n img.attr('src', resultUri);\n }\n });\n });\n });\n return {\n blobCache: blobCache,\n addFilter: addFilter,\n uploadImages: uploadImages,\n uploadImagesAuto: uploadImagesAuto,\n scanForImages: scanForImages,\n destroy: destroy\n };\n }\n\n var isBlockElement = function (blockElements, node) {\n return blockElements.hasOwnProperty(node.nodeName);\n };\n var isValidTarget = function (blockElements, node) {\n if (NodeType.isText(node)) {\n return true;\n } else if (NodeType.isElement(node)) {\n return !isBlockElement(blockElements, node) && !Bookmarks.isBookmarkNode(node);\n } else {\n return false;\n }\n };\n var hasBlockParent = function (blockElements, root, node) {\n return exists(Parents.parents(Element.fromDom(node), Element.fromDom(root)), function (elm) {\n return isBlockElement(blockElements, elm.dom());\n });\n };\n var shouldRemoveTextNode = function (blockElements, node) {\n if (NodeType.isText(node)) {\n if (node.nodeValue.length === 0) {\n return true;\n } else if (/^\\s+$/.test(node.nodeValue) && (!node.nextSibling || isBlockElement(blockElements, node.nextSibling))) {\n return true;\n }\n }\n return false;\n };\n var addRootBlocks = function (editor) {\n var settings = editor.settings, dom = editor.dom, selection = editor.selection;\n var schema = editor.schema, blockElements = schema.getBlockElements();\n var node = selection.getStart();\n var rootNode = editor.getBody();\n var rng;\n var startContainer, startOffset, endContainer, endOffset, rootBlockNode;\n var tempNode, wrapped, restoreSelection;\n var rootNodeName, forcedRootBlock;\n forcedRootBlock = settings.forced_root_block;\n if (!node || !NodeType.isElement(node) || !forcedRootBlock) {\n return;\n }\n rootNodeName = rootNode.nodeName.toLowerCase();\n if (!schema.isValidChild(rootNodeName, forcedRootBlock.toLowerCase()) || hasBlockParent(blockElements, rootNode, node)) {\n return;\n }\n rng = selection.getRng();\n startContainer = rng.startContainer;\n startOffset = rng.startOffset;\n endContainer = rng.endContainer;\n endOffset = rng.endOffset;\n restoreSelection = EditorFocus.hasFocus(editor);\n node = rootNode.firstChild;\n while (node) {\n if (isValidTarget(blockElements, node)) {\n if (shouldRemoveTextNode(blockElements, node)) {\n tempNode = node;\n node = node.nextSibling;\n dom.remove(tempNode);\n continue;\n }\n if (!rootBlockNode) {\n rootBlockNode = dom.create(forcedRootBlock, editor.settings.forced_root_block_attrs);\n node.parentNode.insertBefore(rootBlockNode, node);\n wrapped = true;\n }\n tempNode = node;\n node = node.nextSibling;\n rootBlockNode.appendChild(tempNode);\n } else {\n rootBlockNode = null;\n node = node.nextSibling;\n }\n }\n if (wrapped && restoreSelection) {\n rng.setStart(startContainer, startOffset);\n rng.setEnd(endContainer, endOffset);\n selection.setRng(rng);\n editor.nodeChanged();\n }\n };\n var setup$3 = function (editor) {\n if (editor.settings.forced_root_block) {\n editor.on('NodeChange', curry(addRootBlocks, editor));\n }\n };\n var ForceBlocks = { setup: setup$3 };\n\n var getStartNode = function (rng) {\n var sc = rng.startContainer, so = rng.startOffset;\n if (NodeType.isText(sc)) {\n return so === 0 ? Option.some(Element.fromDom(sc)) : Option.none();\n } else {\n return Option.from(sc.childNodes[so]).map(Element.fromDom);\n }\n };\n var getEndNode = function (rng) {\n var ec = rng.endContainer, eo = rng.endOffset;\n if (NodeType.isText(ec)) {\n return eo === ec.data.length ? Option.some(Element.fromDom(ec)) : Option.none();\n } else {\n return Option.from(ec.childNodes[eo - 1]).map(Element.fromDom);\n }\n };\n var getFirstChildren = function (node) {\n return firstChild(node).fold(constant([node]), function (child) {\n return [node].concat(getFirstChildren(child));\n });\n };\n var getLastChildren$1 = function (node) {\n return lastChild(node).fold(constant([node]), function (child) {\n if (name(child) === 'br') {\n return prevSibling(child).map(function (sibling) {\n return [node].concat(getLastChildren$1(sibling));\n }).getOr([]);\n } else {\n return [node].concat(getLastChildren$1(child));\n }\n });\n };\n var hasAllContentsSelected = function (elm, rng) {\n return lift2(getStartNode(rng), getEndNode(rng), function (startNode, endNode) {\n var start = find(getFirstChildren(elm), curry(eq, startNode));\n var end = find(getLastChildren$1(elm), curry(eq, endNode));\n return start.isSome() && end.isSome();\n }).getOr(false);\n };\n var moveEndPoint$1 = function (dom, rng, node, start) {\n var root = node, walker = new TreeWalker(node, root);\n var nonEmptyElementsMap = dom.schema.getNonEmptyElements();\n do {\n if (node.nodeType === 3 && Tools.trim(node.nodeValue).length !== 0) {\n if (start) {\n rng.setStart(node, 0);\n } else {\n rng.setEnd(node, node.nodeValue.length);\n }\n return;\n }\n if (nonEmptyElementsMap[node.nodeName] && !/^(TD|TH)$/.test(node.nodeName)) {\n if (start) {\n rng.setStartBefore(node);\n } else {\n if (node.nodeName === 'BR') {\n rng.setEndBefore(node);\n } else {\n rng.setEndAfter(node);\n }\n }\n return;\n }\n if (Env.ie && Env.ie < 11 && dom.isBlock(node) && dom.isEmpty(node)) {\n if (start) {\n rng.setStart(node, 0);\n } else {\n rng.setEnd(node, 0);\n }\n return;\n }\n } while (node = start ? walker.next() : walker.prev());\n if (root.nodeName === 'BODY') {\n if (start) {\n rng.setStart(root, 0);\n } else {\n rng.setEnd(root, root.childNodes.length);\n }\n }\n };\n var hasAnyRanges = function (editor) {\n var sel = editor.selection.getSel();\n return sel && sel.rangeCount > 0;\n };\n\n function NodeChange (editor) {\n var lastRng, lastPath = [];\n var isSameElementPath = function (startElm) {\n var i, currentPath;\n currentPath = editor.$(startElm).parentsUntil(editor.getBody()).add(startElm);\n if (currentPath.length === lastPath.length) {\n for (i = currentPath.length; i >= 0; i--) {\n if (currentPath[i] !== lastPath[i]) {\n break;\n }\n }\n if (i === -1) {\n lastPath = currentPath;\n return true;\n }\n }\n lastPath = currentPath;\n return false;\n };\n if (!('onselectionchange' in editor.getDoc())) {\n editor.on('NodeChange Click MouseUp KeyUp Focus', function (e) {\n var nativeRng, fakeRng;\n nativeRng = editor.selection.getRng();\n fakeRng = {\n startContainer: nativeRng.startContainer,\n startOffset: nativeRng.startOffset,\n endContainer: nativeRng.endContainer,\n endOffset: nativeRng.endOffset\n };\n if (e.type === 'nodechange' || !RangeCompare.isEq(fakeRng, lastRng)) {\n editor.fire('SelectionChange');\n }\n lastRng = fakeRng;\n });\n }\n editor.on('contextmenu', function () {\n editor.fire('SelectionChange');\n });\n editor.on('SelectionChange', function () {\n var startElm = editor.selection.getStart(true);\n if (!startElm || !Env.range && editor.selection.isCollapsed()) {\n return;\n }\n if (hasAnyRanges(editor) && !isSameElementPath(startElm) && editor.dom.isChildOf(startElm, editor.getBody())) {\n editor.nodeChanged({ selectionChange: true });\n }\n });\n editor.on('MouseUp', function (e) {\n if (!e.isDefaultPrevented() && hasAnyRanges(editor)) {\n if (editor.selection.getNode().nodeName === 'IMG') {\n Delay.setEditorTimeout(editor, function () {\n editor.nodeChanged();\n });\n } else {\n editor.nodeChanged();\n }\n }\n });\n this.nodeChanged = function (args) {\n var selection = editor.selection;\n var node, parents, root;\n if (editor.initialized && selection && !editor.settings.disable_nodechange && !editor.readonly) {\n root = editor.getBody();\n node = selection.getStart(true) || root;\n if (node.ownerDocument !== editor.getDoc() || !editor.dom.isChildOf(node, root)) {\n node = root;\n }\n parents = [];\n editor.dom.getParent(node, function (node) {\n if (node === root) {\n return true;\n }\n parents.push(node);\n });\n args = args || {};\n args.element = node;\n args.parents = parents;\n editor.fire('NodeChange', args);\n }\n };\n }\n\n var VK = {\n BACKSPACE: 8,\n DELETE: 46,\n DOWN: 40,\n ENTER: 13,\n LEFT: 37,\n RIGHT: 39,\n SPACEBAR: 32,\n TAB: 9,\n UP: 38,\n END: 35,\n HOME: 36,\n modifierPressed: function (e) {\n return e.shiftKey || e.ctrlKey || e.altKey || this.metaKeyPressed(e);\n },\n metaKeyPressed: function (e) {\n return Env.mac ? e.metaKey : e.ctrlKey && !e.altKey;\n }\n };\n\n var getNodeClientRects = function (node) {\n var toArrayWithNode = function (clientRects) {\n return map(clientRects, function (clientRect) {\n clientRect = clone$1(clientRect);\n clientRect.node = node;\n return clientRect;\n });\n };\n if (NodeType.isElement(node)) {\n return toArrayWithNode(node.getClientRects());\n }\n if (NodeType.isText(node)) {\n var rng = node.ownerDocument.createRange();\n rng.setStart(node, 0);\n rng.setEnd(node, node.data.length);\n return toArrayWithNode(rng.getClientRects());\n }\n };\n var getClientRects = function (node) {\n return foldl(node, function (result, node) {\n return result.concat(getNodeClientRects(node));\n }, []);\n };\n\n var VDirection;\n (function (VDirection) {\n VDirection[VDirection['Up'] = -1] = 'Up';\n VDirection[VDirection['Down'] = 1] = 'Down';\n }(VDirection || (VDirection = {})));\n var findUntil = function (direction, root, predicateFn, node) {\n while (node = findNode(node, direction, isEditableCaretCandidate, root)) {\n if (predicateFn(node)) {\n return;\n }\n }\n };\n var walkUntil = function (direction, isAboveFn, isBeflowFn, root, predicateFn, caretPosition) {\n var line = 0, node;\n var result = [];\n var targetClientRect;\n var add = function (node) {\n var i, clientRect, clientRects;\n clientRects = getClientRects([node]);\n if (direction === -1) {\n clientRects = clientRects.reverse();\n }\n for (i = 0; i < clientRects.length; i++) {\n clientRect = clientRects[i];\n if (isBeflowFn(clientRect, targetClientRect)) {\n continue;\n }\n if (result.length > 0 && isAboveFn(clientRect, ArrUtils.last(result))) {\n line++;\n }\n clientRect.line = line;\n if (predicateFn(clientRect)) {\n return true;\n }\n result.push(clientRect);\n }\n };\n targetClientRect = ArrUtils.last(caretPosition.getClientRects());\n if (!targetClientRect) {\n return result;\n }\n node = caretPosition.getNode();\n add(node);\n findUntil(direction, root, add, node);\n return result;\n };\n var aboveLineNumber = function (lineNumber, clientRect) {\n return clientRect.line > lineNumber;\n };\n var isLineNumber = function (lineNumber, clientRect) {\n return clientRect.line === lineNumber;\n };\n var upUntil = curry(walkUntil, VDirection.Up, isAbove, isBelow);\n var downUntil = curry(walkUntil, VDirection.Down, isBelow, isAbove);\n var positionsUntil = function (direction, root, predicateFn, node) {\n var caretWalker = CaretWalker(root);\n var walkFn, isBelowFn, isAboveFn, caretPosition;\n var result = [];\n var line = 0, clientRect, targetClientRect;\n var getClientRect = function (caretPosition) {\n if (direction === 1) {\n return ArrUtils.last(caretPosition.getClientRects());\n }\n return ArrUtils.last(caretPosition.getClientRects());\n };\n if (direction === 1) {\n walkFn = caretWalker.next;\n isBelowFn = isBelow;\n isAboveFn = isAbove;\n caretPosition = CaretPosition$1.after(node);\n } else {\n walkFn = caretWalker.prev;\n isBelowFn = isAbove;\n isAboveFn = isBelow;\n caretPosition = CaretPosition$1.before(node);\n }\n targetClientRect = getClientRect(caretPosition);\n do {\n if (!caretPosition.isVisible()) {\n continue;\n }\n clientRect = getClientRect(caretPosition);\n if (isAboveFn(clientRect, targetClientRect)) {\n continue;\n }\n if (result.length > 0 && isBelowFn(clientRect, ArrUtils.last(result))) {\n line++;\n }\n clientRect = clone$1(clientRect);\n clientRect.position = caretPosition;\n clientRect.line = line;\n if (predicateFn(clientRect)) {\n return result;\n }\n result.push(clientRect);\n } while (caretPosition = walkFn(caretPosition));\n return result;\n };\n var isAboveLine = function (lineNumber) {\n return function (clientRect) {\n return aboveLineNumber(lineNumber, clientRect);\n };\n };\n var isLine = function (lineNumber) {\n return function (clientRect) {\n return isLineNumber(lineNumber, clientRect);\n };\n };\n\n var isContentEditableFalse$7 = NodeType.isContentEditableFalse;\n var findNode$1 = findNode;\n var distanceToRectLeft = function (clientRect, clientX) {\n return Math.abs(clientRect.left - clientX);\n };\n var distanceToRectRight = function (clientRect, clientX) {\n return Math.abs(clientRect.right - clientX);\n };\n var isInside = function (clientX, clientRect) {\n return clientX >= clientRect.left && clientX <= clientRect.right;\n };\n var findClosestClientRect = function (clientRects, clientX) {\n return ArrUtils.reduce(clientRects, function (oldClientRect, clientRect) {\n var oldDistance, newDistance;\n oldDistance = Math.min(distanceToRectLeft(oldClientRect, clientX), distanceToRectRight(oldClientRect, clientX));\n newDistance = Math.min(distanceToRectLeft(clientRect, clientX), distanceToRectRight(clientRect, clientX));\n if (isInside(clientX, clientRect)) {\n return clientRect;\n }\n if (isInside(clientX, oldClientRect)) {\n return oldClientRect;\n }\n if (newDistance === oldDistance && isContentEditableFalse$7(clientRect.node)) {\n return clientRect;\n }\n if (newDistance < oldDistance) {\n return clientRect;\n }\n return oldClientRect;\n });\n };\n var walkUntil$1 = function (direction, root, predicateFn, node) {\n while (node = findNode$1(node, direction, isEditableCaretCandidate, root)) {\n if (predicateFn(node)) {\n return;\n }\n }\n };\n var findLineNodeRects = function (root, targetNodeRect) {\n var clientRects = [];\n var collect = function (checkPosFn, node) {\n var lineRects;\n lineRects = filter(getClientRects([node]), function (clientRect) {\n return !checkPosFn(clientRect, targetNodeRect);\n });\n clientRects = clientRects.concat(lineRects);\n return lineRects.length === 0;\n };\n clientRects.push(targetNodeRect);\n walkUntil$1(VDirection.Up, root, curry(collect, isAbove), targetNodeRect.node);\n walkUntil$1(VDirection.Down, root, curry(collect, isBelow), targetNodeRect.node);\n return clientRects;\n };\n var getFakeCaretTargets = function (root) {\n return filter(from$1(root.getElementsByTagName('*')), isFakeCaretTarget);\n };\n var caretInfo = function (clientRect, clientX) {\n return {\n node: clientRect.node,\n before: distanceToRectLeft(clientRect, clientX) < distanceToRectRight(clientRect, clientX)\n };\n };\n var closestCaret = function (root, clientX, clientY) {\n var closestNodeRect;\n var contentEditableFalseNodeRects = getClientRects(getFakeCaretTargets(root));\n var targetNodeRects = filter(contentEditableFalseNodeRects, function (rect) {\n return clientY >= rect.top && clientY <= rect.bottom;\n });\n closestNodeRect = findClosestClientRect(targetNodeRects, clientX);\n if (closestNodeRect) {\n closestNodeRect = findClosestClientRect(findLineNodeRects(root, closestNodeRect), clientX);\n if (closestNodeRect && isFakeCaretTarget(closestNodeRect.node)) {\n return caretInfo(closestNodeRect, clientX);\n }\n }\n return null;\n };\n\n var isXYWithinRange = function (clientX, clientY, range) {\n if (range.collapsed) {\n return false;\n }\n if (Env.ie && Env.ie <= 11 && range.startOffset === range.endOffset - 1 && range.startContainer === range.endContainer) {\n var elm = range.startContainer.childNodes[range.startOffset];\n if (NodeType.isElement(elm)) {\n return exists(elm.getClientRects(), function (rect) {\n return containsXY(rect, clientX, clientY);\n });\n }\n }\n return exists(range.getClientRects(), function (rect) {\n return containsXY(rect, clientX, clientY);\n });\n };\n var RangePoint = { isXYWithinRange: isXYWithinRange };\n\n var getAbsolutePosition = function (elm) {\n var doc, docElem, win, clientRect;\n clientRect = elm.getBoundingClientRect();\n doc = elm.ownerDocument;\n docElem = doc.documentElement;\n win = doc.defaultView;\n return {\n top: clientRect.top + win.pageYOffset - docElem.clientTop,\n left: clientRect.left + win.pageXOffset - docElem.clientLeft\n };\n };\n var getBodyPosition = function (editor) {\n return editor.inline ? getAbsolutePosition(editor.getBody()) : {\n left: 0,\n top: 0\n };\n };\n var getScrollPosition = function (editor) {\n var body = editor.getBody();\n return editor.inline ? {\n left: body.scrollLeft,\n top: body.scrollTop\n } : {\n left: 0,\n top: 0\n };\n };\n var getBodyScroll = function (editor) {\n var body = editor.getBody(), docElm = editor.getDoc().documentElement;\n var inlineScroll = {\n left: body.scrollLeft,\n top: body.scrollTop\n };\n var iframeScroll = {\n left: body.scrollLeft || docElm.scrollLeft,\n top: body.scrollTop || docElm.scrollTop\n };\n return editor.inline ? inlineScroll : iframeScroll;\n };\n var getMousePosition = function (editor, event) {\n if (event.target.ownerDocument !== editor.getDoc()) {\n var iframePosition = getAbsolutePosition(editor.getContentAreaContainer());\n var scrollPosition = getBodyScroll(editor);\n return {\n left: event.pageX - iframePosition.left + scrollPosition.left,\n top: event.pageY - iframePosition.top + scrollPosition.top\n };\n }\n return {\n left: event.pageX,\n top: event.pageY\n };\n };\n var calculatePosition = function (bodyPosition, scrollPosition, mousePosition) {\n return {\n pageX: mousePosition.left - bodyPosition.left + scrollPosition.left,\n pageY: mousePosition.top - bodyPosition.top + scrollPosition.top\n };\n };\n var calc = function (editor, event) {\n return calculatePosition(getBodyPosition(editor), getScrollPosition(editor), getMousePosition(editor, event));\n };\n var MousePosition = { calc: calc };\n\n var isContentEditableFalse$8 = NodeType.isContentEditableFalse, isContentEditableTrue$3 = NodeType.isContentEditableTrue;\n var isDraggable = function (rootElm, elm) {\n return isContentEditableFalse$8(elm) && elm !== rootElm;\n };\n var isValidDropTarget = function (editor, targetElement, dragElement) {\n if (targetElement === dragElement || editor.dom.isChildOf(targetElement, dragElement)) {\n return false;\n }\n if (isContentEditableFalse$8(targetElement)) {\n return false;\n }\n return true;\n };\n var cloneElement = function (elm) {\n var cloneElm = elm.cloneNode(true);\n cloneElm.removeAttribute('data-mce-selected');\n return cloneElm;\n };\n var createGhost = function (editor, elm, width, height) {\n var clonedElm = elm.cloneNode(true);\n editor.dom.setStyles(clonedElm, {\n width: width,\n height: height\n });\n editor.dom.setAttrib(clonedElm, 'data-mce-selected', null);\n var ghostElm = editor.dom.create('div', {\n 'class': 'mce-drag-container',\n 'data-mce-bogus': 'all',\n 'unselectable': 'on',\n 'contenteditable': 'false'\n });\n editor.dom.setStyles(ghostElm, {\n position: 'absolute',\n opacity: 0.5,\n overflow: 'hidden',\n border: 0,\n padding: 0,\n margin: 0,\n width: width,\n height: height\n });\n editor.dom.setStyles(clonedElm, {\n margin: 0,\n boxSizing: 'border-box'\n });\n ghostElm.appendChild(clonedElm);\n return ghostElm;\n };\n var appendGhostToBody = function (ghostElm, bodyElm) {\n if (ghostElm.parentNode !== bodyElm) {\n bodyElm.appendChild(ghostElm);\n }\n };\n var moveGhost = function (ghostElm, position, width, height, maxX, maxY) {\n var overflowX = 0, overflowY = 0;\n ghostElm.style.left = position.pageX + 'px';\n ghostElm.style.top = position.pageY + 'px';\n if (position.pageX + width > maxX) {\n overflowX = position.pageX + width - maxX;\n }\n if (position.pageY + height > maxY) {\n overflowY = position.pageY + height - maxY;\n }\n ghostElm.style.width = width - overflowX + 'px';\n ghostElm.style.height = height - overflowY + 'px';\n };\n var removeElement = function (elm) {\n if (elm && elm.parentNode) {\n elm.parentNode.removeChild(elm);\n }\n };\n var isLeftMouseButtonPressed = function (e) {\n return e.button === 0;\n };\n var hasDraggableElement = function (state) {\n return state.element;\n };\n var applyRelPos = function (state, position) {\n return {\n pageX: position.pageX - state.relX,\n pageY: position.pageY + 5\n };\n };\n var start$1 = function (state, editor) {\n return function (e) {\n if (isLeftMouseButtonPressed(e)) {\n var ceElm = find(editor.dom.getParents(e.target), Predicate.or(isContentEditableFalse$8, isContentEditableTrue$3)).getOr(null);\n if (isDraggable(editor.getBody(), ceElm)) {\n var elmPos = editor.dom.getPos(ceElm);\n var bodyElm = editor.getBody();\n var docElm = editor.getDoc().documentElement;\n state.element = ceElm;\n state.screenX = e.screenX;\n state.screenY = e.screenY;\n state.maxX = (editor.inline ? bodyElm.scrollWidth : docElm.offsetWidth) - 2;\n state.maxY = (editor.inline ? bodyElm.scrollHeight : docElm.offsetHeight) - 2;\n state.relX = e.pageX - elmPos.x;\n state.relY = e.pageY - elmPos.y;\n state.width = ceElm.offsetWidth;\n state.height = ceElm.offsetHeight;\n state.ghost = createGhost(editor, ceElm, state.width, state.height);\n }\n }\n };\n };\n var move$1 = function (state, editor) {\n var throttledPlaceCaretAt = Delay.throttle(function (clientX, clientY) {\n editor._selectionOverrides.hideFakeCaret();\n editor.selection.placeCaretAt(clientX, clientY);\n }, 0);\n return function (e) {\n var movement = Math.max(Math.abs(e.screenX - state.screenX), Math.abs(e.screenY - state.screenY));\n if (hasDraggableElement(state) && !state.dragging && movement > 10) {\n var args = editor.fire('dragstart', { target: state.element });\n if (args.isDefaultPrevented()) {\n return;\n }\n state.dragging = true;\n editor.focus();\n }\n if (state.dragging) {\n var targetPos = applyRelPos(state, MousePosition.calc(editor, e));\n appendGhostToBody(state.ghost, editor.getBody());\n moveGhost(state.ghost, targetPos, state.width, state.height, state.maxX, state.maxY);\n throttledPlaceCaretAt(e.clientX, e.clientY);\n }\n };\n };\n var getRawTarget = function (selection) {\n var rng = selection.getSel().getRangeAt(0);\n var startContainer = rng.startContainer;\n return startContainer.nodeType === 3 ? startContainer.parentNode : startContainer;\n };\n var drop = function (state, editor) {\n return function (e) {\n if (state.dragging) {\n if (isValidDropTarget(editor, getRawTarget(editor.selection), state.element)) {\n var targetClone_1 = cloneElement(state.element);\n var args = editor.fire('drop', {\n targetClone: targetClone_1,\n clientX: e.clientX,\n clientY: e.clientY\n });\n if (!args.isDefaultPrevented()) {\n targetClone_1 = args.targetClone;\n editor.undoManager.transact(function () {\n removeElement(state.element);\n editor.insertContent(editor.dom.getOuterHTML(targetClone_1));\n editor._selectionOverrides.hideFakeCaret();\n });\n }\n }\n }\n removeDragState(state);\n };\n };\n var stop = function (state, editor) {\n return function () {\n if (state.dragging) {\n editor.fire('dragend');\n }\n removeDragState(state);\n };\n };\n var removeDragState = function (state) {\n state.dragging = false;\n state.element = null;\n removeElement(state.ghost);\n };\n var bindFakeDragEvents = function (editor) {\n var state = {};\n var pageDom, dragStartHandler, dragHandler, dropHandler, dragEndHandler, rootDocument;\n pageDom = DOMUtils$1.DOM;\n rootDocument = domGlobals.document;\n dragStartHandler = start$1(state, editor);\n dragHandler = move$1(state, editor);\n dropHandler = drop(state, editor);\n dragEndHandler = stop(state, editor);\n editor.on('mousedown', dragStartHandler);\n editor.on('mousemove', dragHandler);\n editor.on('mouseup', dropHandler);\n pageDom.bind(rootDocument, 'mousemove', dragHandler);\n pageDom.bind(rootDocument, 'mouseup', dragEndHandler);\n editor.on('remove', function () {\n pageDom.unbind(rootDocument, 'mousemove', dragHandler);\n pageDom.unbind(rootDocument, 'mouseup', dragEndHandler);\n });\n };\n var blockIeDrop = function (editor) {\n editor.on('drop', function (e) {\n var realTarget = typeof e.clientX !== 'undefined' ? editor.getDoc().elementFromPoint(e.clientX, e.clientY) : null;\n if (isContentEditableFalse$8(realTarget) || isContentEditableFalse$8(editor.dom.getContentEditableParent(realTarget))) {\n e.preventDefault();\n }\n });\n };\n var init = function (editor) {\n bindFakeDragEvents(editor);\n blockIeDrop(editor);\n };\n var DragDropOverrides = { init: init };\n\n var setup$4 = function (editor) {\n var renderFocusCaret = first(function () {\n if (!editor.removed) {\n var rng = editor.selection.getRng();\n if (rng.collapsed) {\n var caretRange = renderRangeCaret(editor, editor.selection.getRng(), false);\n editor.selection.setRng(caretRange);\n }\n }\n }, 0);\n editor.on('focus', function () {\n renderFocusCaret.throttle();\n });\n editor.on('blur', function () {\n renderFocusCaret.cancel();\n });\n };\n var CefFocus = { setup: setup$4 };\n\n var isContentEditableTrue$4 = NodeType.isContentEditableTrue;\n var isContentEditableFalse$9 = NodeType.isContentEditableFalse;\n var getContentEditableRoot$1 = function (editor, node) {\n var root = editor.getBody();\n while (node && node !== root) {\n if (isContentEditableTrue$4(node) || isContentEditableFalse$9(node)) {\n return node;\n }\n node = node.parentNode;\n }\n return null;\n };\n var SelectionOverrides = function (editor) {\n var isBlock = function (node) {\n return editor.dom.isBlock(node);\n };\n var rootNode = editor.getBody();\n var fakeCaret = FakeCaret(editor.getBody(), isBlock, function () {\n return EditorFocus.hasFocus(editor);\n });\n var realSelectionId = 'sel-' + editor.dom.uniqueId();\n var selectedContentEditableNode;\n var isFakeSelectionElement = function (elm) {\n return editor.dom.hasClass(elm, 'mce-offscreen-selection');\n };\n var getRealSelectionElement = function () {\n var container = editor.dom.get(realSelectionId);\n return container ? container.getElementsByTagName('*')[0] : container;\n };\n var setRange = function (range) {\n if (range) {\n editor.selection.setRng(range);\n }\n };\n var getRange = function () {\n return editor.selection.getRng();\n };\n var showCaret = function (direction, node, before, scrollIntoView) {\n if (scrollIntoView === void 0) {\n scrollIntoView = true;\n }\n var e;\n e = editor.fire('ShowCaret', {\n target: node,\n direction: direction,\n before: before\n });\n if (e.isDefaultPrevented()) {\n return null;\n }\n if (scrollIntoView) {\n editor.selection.scrollIntoView(node, direction === -1);\n }\n return fakeCaret.show(before, node);\n };\n var getNormalizedRangeEndPoint = function (direction, range) {\n range = normalizeRange(direction, rootNode, range);\n if (direction === -1) {\n return CaretPosition$1.fromRangeStart(range);\n }\n return CaretPosition$1.fromRangeEnd(range);\n };\n var showBlockCaretContainer = function (blockCaretContainer) {\n if (blockCaretContainer.hasAttribute('data-mce-caret')) {\n showCaretContainerBlock(blockCaretContainer);\n setRange(getRange());\n editor.selection.scrollIntoView(blockCaretContainer[0]);\n }\n };\n var registerEvents = function () {\n editor.on('mouseup', function (e) {\n var range = getRange();\n if (range.collapsed && EditorView.isXYInContentArea(editor, e.clientX, e.clientY)) {\n setRange(renderCaretAtRange(editor, range, false));\n }\n });\n editor.on('click', function (e) {\n var contentEditableRoot;\n contentEditableRoot = getContentEditableRoot$1(editor, e.target);\n if (contentEditableRoot) {\n if (isContentEditableFalse$9(contentEditableRoot)) {\n e.preventDefault();\n editor.focus();\n }\n if (isContentEditableTrue$4(contentEditableRoot)) {\n if (editor.dom.isChildOf(contentEditableRoot, editor.selection.getNode())) {\n removeContentEditableSelection();\n }\n }\n }\n });\n editor.on('blur NewBlock', function () {\n removeContentEditableSelection();\n });\n editor.on('ResizeWindow FullscreenStateChanged', function () {\n return fakeCaret.reposition();\n });\n var handleTouchSelect = function (editor) {\n var moved = false;\n editor.on('touchstart', function () {\n moved = false;\n });\n editor.on('touchmove', function () {\n moved = true;\n });\n editor.on('touchend', function (e) {\n var contentEditableRoot = getContentEditableRoot$1(editor, e.target);\n if (isContentEditableFalse$9(contentEditableRoot)) {\n if (!moved) {\n e.preventDefault();\n setContentEditableSelection(selectNode(editor, contentEditableRoot));\n }\n }\n });\n };\n var hasNormalCaretPosition = function (elm) {\n var caretWalker = CaretWalker(elm);\n if (!elm.firstChild) {\n return false;\n }\n var startPos = CaretPosition$1.before(elm.firstChild);\n var newPos = caretWalker.next(startPos);\n return newPos && !isBeforeContentEditableFalse(newPos) && !isAfterContentEditableFalse(newPos);\n };\n var isInSameBlock = function (node1, node2) {\n var block1 = editor.dom.getParent(node1, editor.dom.isBlock);\n var block2 = editor.dom.getParent(node2, editor.dom.isBlock);\n return block1 === block2;\n };\n var hasBetterMouseTarget = function (targetNode, caretNode) {\n var targetBlock = editor.dom.getParent(targetNode, editor.dom.isBlock);\n var caretBlock = editor.dom.getParent(caretNode, editor.dom.isBlock);\n if (targetBlock && editor.dom.isChildOf(targetBlock, caretBlock) && isContentEditableFalse$9(getContentEditableRoot$1(editor, targetBlock)) === false) {\n return true;\n }\n return targetBlock && !isInSameBlock(targetBlock, caretBlock) && hasNormalCaretPosition(targetBlock);\n };\n handleTouchSelect(editor);\n editor.on('mousedown', function (e) {\n var contentEditableRoot;\n var targetElm = e.target;\n if (targetElm !== rootNode && targetElm.nodeName !== 'HTML' && !editor.dom.isChildOf(targetElm, rootNode)) {\n return;\n }\n if (EditorView.isXYInContentArea(editor, e.clientX, e.clientY) === false) {\n return;\n }\n contentEditableRoot = getContentEditableRoot$1(editor, targetElm);\n if (contentEditableRoot) {\n if (isContentEditableFalse$9(contentEditableRoot)) {\n e.preventDefault();\n setContentEditableSelection(selectNode(editor, contentEditableRoot));\n } else {\n removeContentEditableSelection();\n if (!(isContentEditableTrue$4(contentEditableRoot) && e.shiftKey) && !RangePoint.isXYWithinRange(e.clientX, e.clientY, editor.selection.getRng())) {\n hideFakeCaret();\n editor.selection.placeCaretAt(e.clientX, e.clientY);\n }\n }\n } else if (isFakeCaretTarget(targetElm) === false) {\n removeContentEditableSelection();\n hideFakeCaret();\n var caretInfo = closestCaret(rootNode, e.clientX, e.clientY);\n if (caretInfo) {\n if (!hasBetterMouseTarget(e.target, caretInfo.node)) {\n e.preventDefault();\n var range = showCaret(1, caretInfo.node, caretInfo.before, false);\n editor.getBody().focus();\n setRange(range);\n }\n }\n }\n });\n editor.on('keypress', function (e) {\n if (VK.modifierPressed(e)) {\n return;\n }\n switch (e.keyCode) {\n default:\n if (isContentEditableFalse$9(editor.selection.getNode())) {\n e.preventDefault();\n }\n break;\n }\n });\n editor.on('getSelectionRange', function (e) {\n var rng = e.range;\n if (selectedContentEditableNode) {\n if (!selectedContentEditableNode.parentNode) {\n selectedContentEditableNode = null;\n return;\n }\n rng = rng.cloneRange();\n rng.selectNode(selectedContentEditableNode);\n e.range = rng;\n }\n });\n editor.on('setSelectionRange', function (e) {\n e.range = normalizeShortEndedElementSelection(e.range);\n var rng = setContentEditableSelection(e.range, e.forward);\n if (rng) {\n e.range = rng;\n }\n });\n var isPasteBin = function (node) {\n return node.id === 'mcepastebin';\n };\n editor.on('AfterSetSelectionRange', function (e) {\n var rng = e.range;\n if (!isRangeInCaretContainer(rng) && !isPasteBin(rng.startContainer.parentNode)) {\n hideFakeCaret();\n }\n if (!isFakeSelectionElement(rng.startContainer.parentNode)) {\n removeContentEditableSelection();\n }\n });\n editor.on('copy', function (e) {\n var clipboardData = e.clipboardData;\n if (!e.isDefaultPrevented() && e.clipboardData && !Env.ie) {\n var realSelectionElement = getRealSelectionElement();\n if (realSelectionElement) {\n e.preventDefault();\n clipboardData.clearData();\n clipboardData.setData('text/html', realSelectionElement.outerHTML);\n clipboardData.setData('text/plain', realSelectionElement.outerText);\n }\n }\n });\n DragDropOverrides.init(editor);\n CefFocus.setup(editor);\n };\n var addCss = function () {\n var styles = editor.contentStyles, rootClass = '.mce-content-body';\n styles.push(fakeCaret.getCss());\n styles.push(rootClass + ' .mce-offscreen-selection {' + 'position: absolute;' + 'left: -9999999999px;' + 'max-width: 1000000px;' + '}' + rootClass + ' *[contentEditable=false] {' + 'cursor: default;' + '}' + rootClass + ' *[contentEditable=true] {' + 'cursor: text;' + '}');\n };\n var isWithinCaretContainer = function (node) {\n return isCaretContainer(node) || startsWithCaretContainer(node) || endsWithCaretContainer(node);\n };\n var isRangeInCaretContainer = function (rng) {\n return isWithinCaretContainer(rng.startContainer) || isWithinCaretContainer(rng.endContainer);\n };\n var normalizeShortEndedElementSelection = function (rng) {\n var shortEndedElements = editor.schema.getShortEndedElements();\n var newRng = editor.dom.createRng();\n var startContainer = rng.startContainer;\n var startOffset = rng.startOffset;\n var endContainer = rng.endContainer;\n var endOffset = rng.endOffset;\n if (has(shortEndedElements, startContainer.nodeName.toLowerCase())) {\n if (startOffset === 0) {\n newRng.setStartBefore(startContainer);\n } else {\n newRng.setStartAfter(startContainer);\n }\n } else {\n newRng.setStart(startContainer, startOffset);\n }\n if (has(shortEndedElements, endContainer.nodeName.toLowerCase())) {\n if (endOffset === 0) {\n newRng.setEndBefore(endContainer);\n } else {\n newRng.setEndAfter(endContainer);\n }\n } else {\n newRng.setEnd(endContainer, endOffset);\n }\n return newRng;\n };\n var setContentEditableSelection = function (range, forward) {\n var node;\n var $ = editor.$;\n var dom = editor.dom;\n var $realSelectionContainer, sel, startContainer, startOffset, endOffset, e, caretPosition, targetClone, origTargetClone;\n if (!range) {\n return null;\n }\n if (range.collapsed) {\n if (!isRangeInCaretContainer(range)) {\n if (forward === false) {\n caretPosition = getNormalizedRangeEndPoint(-1, range);\n if (isFakeCaretTarget(caretPosition.getNode(true))) {\n return showCaret(-1, caretPosition.getNode(true), false, false);\n }\n if (isFakeCaretTarget(caretPosition.getNode())) {\n return showCaret(-1, caretPosition.getNode(), !caretPosition.isAtEnd(), false);\n }\n } else {\n caretPosition = getNormalizedRangeEndPoint(1, range);\n if (isFakeCaretTarget(caretPosition.getNode())) {\n return showCaret(1, caretPosition.getNode(), !caretPosition.isAtEnd(), false);\n }\n if (isFakeCaretTarget(caretPosition.getNode(true))) {\n return showCaret(1, caretPosition.getNode(true), false, false);\n }\n }\n }\n return null;\n }\n startContainer = range.startContainer;\n startOffset = range.startOffset;\n endOffset = range.endOffset;\n if (startContainer.nodeType === 3 && startOffset === 0 && isContentEditableFalse$9(startContainer.parentNode)) {\n startContainer = startContainer.parentNode;\n startOffset = dom.nodeIndex(startContainer);\n startContainer = startContainer.parentNode;\n }\n if (startContainer.nodeType !== 1) {\n return null;\n }\n if (endOffset === startOffset + 1 && startContainer === range.endContainer) {\n node = startContainer.childNodes[startOffset];\n }\n if (!isContentEditableFalse$9(node)) {\n return null;\n }\n targetClone = origTargetClone = node.cloneNode(true);\n e = editor.fire('ObjectSelected', {\n target: node,\n targetClone: targetClone\n });\n if (e.isDefaultPrevented()) {\n return null;\n }\n $realSelectionContainer = descendant(Element.fromDom(editor.getBody()), '#' + realSelectionId).fold(function () {\n return $([]);\n }, function (elm) {\n return $([elm.dom()]);\n });\n targetClone = e.targetClone;\n if ($realSelectionContainer.length === 0) {\n $realSelectionContainer = $('').attr('id', realSelectionId);\n $realSelectionContainer.appendTo(editor.getBody());\n }\n range = editor.dom.createRng();\n if (targetClone === origTargetClone && Env.ie) {\n $realSelectionContainer.empty().append('\\xA0
').append(targetClone);\n range.setStartAfter($realSelectionContainer[0].firstChild.firstChild);\n range.setEndAfter(targetClone);\n } else {\n $realSelectionContainer.empty().append('\\xA0').append(targetClone).append('\\xA0');\n range.setStart($realSelectionContainer[0].firstChild, 1);\n range.setEnd($realSelectionContainer[0].lastChild, 0);\n }\n $realSelectionContainer.css({ top: dom.getPos(node, editor.getBody()).y });\n $realSelectionContainer[0].focus();\n sel = editor.selection.getSel();\n sel.removeAllRanges();\n sel.addRange(range);\n each(descendants$1(Element.fromDom(editor.getBody()), '*[data-mce-selected]'), function (elm) {\n remove(elm, 'data-mce-selected');\n });\n node.setAttribute('data-mce-selected', '1');\n selectedContentEditableNode = node;\n hideFakeCaret();\n return range;\n };\n var removeContentEditableSelection = function () {\n if (selectedContentEditableNode) {\n selectedContentEditableNode.removeAttribute('data-mce-selected');\n descendant(Element.fromDom(editor.getBody()), '#' + realSelectionId).each(remove$1);\n selectedContentEditableNode = null;\n }\n descendant(Element.fromDom(editor.getBody()), '#' + realSelectionId).each(remove$1);\n selectedContentEditableNode = null;\n };\n var destroy = function () {\n fakeCaret.destroy();\n selectedContentEditableNode = null;\n };\n var hideFakeCaret = function () {\n fakeCaret.hide();\n };\n if (Env.ceFalse) {\n registerEvents();\n addCss();\n }\n return {\n showCaret: showCaret,\n showBlockCaretContainer: showBlockCaretContainer,\n hideFakeCaret: hideFakeCaret,\n destroy: destroy\n };\n };\n\n var isValidPrefixAttrName = function (name) {\n return name.indexOf('data-') === 0 || name.indexOf('aria-') === 0;\n };\n var trimComments = function (text) {\n var sanitizedText = text;\n while (/';\n }\n return '';\n };\n var createFragment$1 = function (html) {\n var frag, node, container;\n container = domGlobals.document.createElement('div');\n frag = domGlobals.document.createDocumentFragment();\n if (html) {\n container.innerHTML = html;\n }\n while (node = container.firstChild) {\n frag.appendChild(node);\n }\n return frag;\n };\n var insertAt = function (elm, html, index) {\n var fragment = createFragment$1(html);\n if (elm.hasChildNodes() && index < elm.childNodes.length) {\n var target = elm.childNodes[index];\n target.parentNode.insertBefore(fragment, target);\n } else {\n elm.appendChild(fragment);\n }\n };\n var removeAt = function (elm, index) {\n if (elm.hasChildNodes() && index < elm.childNodes.length) {\n var target = elm.childNodes[index];\n target.parentNode.removeChild(target);\n }\n };\n var applyDiff = function (diff, elm) {\n var index = 0;\n each(diff, function (action) {\n if (action[0] === Diff.KEEP) {\n index++;\n } else if (action[0] === Diff.INSERT) {\n insertAt(elm, action[1], index);\n index++;\n } else if (action[0] === Diff.DELETE) {\n removeAt(elm, index);\n }\n });\n };\n var read$3 = function (elm) {\n return filter(map(from$1(elm.childNodes), getOuterHtml), function (item) {\n return item.length > 0;\n });\n };\n var write = function (fragments, elm) {\n var currentFragments = map(from$1(elm.childNodes), getOuterHtml);\n applyDiff(Diff.diff(currentFragments, fragments), elm);\n return elm;\n };\n var Fragments = {\n read: read$3,\n write: write\n };\n\n var undoLevelDocument = Cell(Option.none());\n var lazyTempDocument = function () {\n return undoLevelDocument.get().getOrThunk(function () {\n var doc = domGlobals.document.implementation.createHTMLDocument('undo');\n undoLevelDocument.set(Option.some(doc));\n return doc;\n });\n };\n var hasIframes = function (html) {\n return html.indexOf('') !== -1;\n };\n var createFragmentedLevel = function (fragments) {\n return {\n type: 'fragmented',\n fragments: fragments,\n content: '',\n bookmark: null,\n beforeBookmark: null\n };\n };\n var createCompleteLevel = function (content) {\n return {\n type: 'complete',\n fragments: null,\n content: content,\n bookmark: null,\n beforeBookmark: null\n };\n };\n var createFromEditor = function (editor) {\n var fragments, content, trimmedFragments;\n fragments = Fragments.read(editor.getBody());\n trimmedFragments = bind(fragments, function (html) {\n var trimmed = TrimHtml.trimInternal(editor.serializer, html);\n return trimmed.length > 0 ? [trimmed] : [];\n });\n content = trimmedFragments.join('');\n return hasIframes(content) ? createFragmentedLevel(trimmedFragments) : createCompleteLevel(content);\n };\n var applyToEditor = function (editor, level, before) {\n if (level.type === 'fragmented') {\n Fragments.write(level.fragments, editor.getBody());\n } else {\n editor.setContent(level.content, { format: 'raw' });\n }\n editor.selection.moveToBookmark(before ? level.beforeBookmark : level.bookmark);\n };\n var getLevelContent = function (level) {\n return level.type === 'fragmented' ? level.fragments.join('') : level.content;\n };\n var getCleanLevelContent = function (level) {\n var elm = Element.fromTag('body', lazyTempDocument());\n set$1(elm, getLevelContent(level));\n each(descendants$1(elm, '*[data-mce-bogus]'), unwrap);\n return get$3(elm);\n };\n var hasEqualContent = function (level1, level2) {\n return getLevelContent(level1) === getLevelContent(level2);\n };\n var hasEqualCleanedContent = function (level1, level2) {\n return getCleanLevelContent(level1) === getCleanLevelContent(level2);\n };\n var isEq$4 = function (level1, level2) {\n if (!level1 || !level2) {\n return false;\n } else if (hasEqualContent(level1, level2)) {\n return true;\n } else {\n return hasEqualCleanedContent(level1, level2);\n }\n };\n var Levels = {\n createFragmentedLevel: createFragmentedLevel,\n createCompleteLevel: createCompleteLevel,\n createFromEditor: createFromEditor,\n applyToEditor: applyToEditor,\n isEq: isEq$4\n };\n\n function UndoManager (editor) {\n var self = this, index = 0, data = [], beforeBookmark, isFirstTypedCharacter, locks = 0;\n var isUnlocked = function () {\n return locks === 0;\n };\n var setTyping = function (typing) {\n if (isUnlocked()) {\n self.typing = typing;\n }\n };\n var setDirty = function (state) {\n editor.setDirty(state);\n };\n var addNonTypingUndoLevel = function (e) {\n setTyping(false);\n self.add({}, e);\n };\n var endTyping = function () {\n if (self.typing) {\n setTyping(false);\n self.add();\n }\n };\n editor.on('init', function () {\n self.add();\n });\n editor.on('BeforeExecCommand', function (e) {\n var cmd = e.command;\n if (cmd !== 'Undo' && cmd !== 'Redo' && cmd !== 'mceRepaint') {\n endTyping();\n self.beforeChange();\n }\n });\n editor.on('ExecCommand', function (e) {\n var cmd = e.command;\n if (cmd !== 'Undo' && cmd !== 'Redo' && cmd !== 'mceRepaint') {\n addNonTypingUndoLevel(e);\n }\n });\n editor.on('ObjectResizeStart Cut', function () {\n self.beforeChange();\n });\n editor.on('SaveContent ObjectResized blur', addNonTypingUndoLevel);\n editor.on('DragEnd', addNonTypingUndoLevel);\n editor.on('KeyUp', function (e) {\n var keyCode = e.keyCode;\n if (e.isDefaultPrevented()) {\n return;\n }\n if (keyCode >= 33 && keyCode <= 36 || keyCode >= 37 && keyCode <= 40 || keyCode === 45 || e.ctrlKey) {\n addNonTypingUndoLevel();\n editor.nodeChanged();\n }\n if (keyCode === 46 || keyCode === 8) {\n editor.nodeChanged();\n }\n if (isFirstTypedCharacter && self.typing && Levels.isEq(Levels.createFromEditor(editor), data[0]) === false) {\n if (editor.isDirty() === false) {\n setDirty(true);\n editor.fire('change', {\n level: data[0],\n lastLevel: null\n });\n }\n editor.fire('TypingUndo');\n isFirstTypedCharacter = false;\n editor.nodeChanged();\n }\n });\n editor.on('KeyDown', function (e) {\n var keyCode = e.keyCode;\n if (e.isDefaultPrevented()) {\n return;\n }\n if (keyCode >= 33 && keyCode <= 36 || keyCode >= 37 && keyCode <= 40 || keyCode === 45) {\n if (self.typing) {\n addNonTypingUndoLevel(e);\n }\n return;\n }\n var modKey = e.ctrlKey && !e.altKey || e.metaKey;\n if ((keyCode < 16 || keyCode > 20) && keyCode !== 224 && keyCode !== 91 && !self.typing && !modKey) {\n self.beforeChange();\n setTyping(true);\n self.add({}, e);\n isFirstTypedCharacter = true;\n }\n });\n editor.on('MouseDown', function (e) {\n if (self.typing) {\n addNonTypingUndoLevel(e);\n }\n });\n var isInsertReplacementText = function (event) {\n return event.inputType === 'insertReplacementText';\n };\n var isInsertTextDataNull = function (event) {\n return event.inputType === 'insertText' && event.data === null;\n };\n editor.on('input', function (e) {\n if (e.inputType && (isInsertReplacementText(e) || isInsertTextDataNull(e))) {\n addNonTypingUndoLevel(e);\n }\n });\n editor.addShortcut('meta+z', '', 'Undo');\n editor.addShortcut('meta+y,meta+shift+z', '', 'Redo');\n editor.on('AddUndo Undo Redo ClearUndos', function (e) {\n if (!e.isDefaultPrevented()) {\n editor.nodeChanged();\n }\n });\n self = {\n data: data,\n typing: false,\n beforeChange: function () {\n if (isUnlocked()) {\n beforeBookmark = GetBookmark.getUndoBookmark(editor.selection);\n }\n },\n add: function (level, event) {\n var i;\n var settings = editor.settings;\n var lastLevel, currentLevel;\n currentLevel = Levels.createFromEditor(editor);\n level = level || {};\n level = Tools.extend(level, currentLevel);\n if (isUnlocked() === false || editor.removed) {\n return null;\n }\n lastLevel = data[index];\n if (editor.fire('BeforeAddUndo', {\n level: level,\n lastLevel: lastLevel,\n originalEvent: event\n }).isDefaultPrevented()) {\n return null;\n }\n if (lastLevel && Levels.isEq(lastLevel, level)) {\n return null;\n }\n if (data[index]) {\n data[index].beforeBookmark = beforeBookmark;\n }\n if (settings.custom_undo_redo_levels) {\n if (data.length > settings.custom_undo_redo_levels) {\n for (i = 0; i < data.length - 1; i++) {\n data[i] = data[i + 1];\n }\n data.length--;\n index = data.length;\n }\n }\n level.bookmark = GetBookmark.getUndoBookmark(editor.selection);\n if (index < data.length - 1) {\n data.length = index + 1;\n }\n data.push(level);\n index = data.length - 1;\n var args = {\n level: level,\n lastLevel: lastLevel,\n originalEvent: event\n };\n editor.fire('AddUndo', args);\n if (index > 0) {\n setDirty(true);\n editor.fire('change', args);\n }\n return level;\n },\n undo: function () {\n var level;\n if (self.typing) {\n self.add();\n self.typing = false;\n setTyping(false);\n }\n if (index > 0) {\n level = data[--index];\n Levels.applyToEditor(editor, level, true);\n setDirty(true);\n editor.fire('undo', { level: level });\n }\n return level;\n },\n redo: function () {\n var level;\n if (index < data.length - 1) {\n level = data[++index];\n Levels.applyToEditor(editor, level, false);\n setDirty(true);\n editor.fire('redo', { level: level });\n }\n return level;\n },\n clear: function () {\n data = [];\n index = 0;\n self.typing = false;\n self.data = data;\n editor.fire('ClearUndos');\n },\n hasUndo: function () {\n return index > 0 || self.typing && data[0] && !Levels.isEq(Levels.createFromEditor(editor), data[0]);\n },\n hasRedo: function () {\n return index < data.length - 1 && !self.typing;\n },\n transact: function (callback) {\n endTyping();\n self.beforeChange();\n self.ignore(callback);\n return self.add();\n },\n ignore: function (callback) {\n try {\n locks++;\n callback();\n } finally {\n locks--;\n }\n },\n extra: function (callback1, callback2) {\n var lastLevel, bookmark;\n if (self.transact(callback1)) {\n bookmark = data[index].bookmark;\n lastLevel = data[index - 1];\n Levels.applyToEditor(editor, lastLevel, true);\n if (self.transact(callback2)) {\n data[index - 1].beforeBookmark = bookmark;\n }\n }\n }\n };\n return self;\n }\n\n var postProcessHooks = {}, filter$2 = ArrUtils.filter, each$c = ArrUtils.each;\n var addPostProcessHook = function (name, hook) {\n var hooks = postProcessHooks[name];\n if (!hooks) {\n postProcessHooks[name] = hooks = [];\n }\n postProcessHooks[name].push(hook);\n };\n var postProcess = function (name, editor) {\n each$c(postProcessHooks[name], function (hook) {\n hook(editor);\n });\n };\n addPostProcessHook('pre', function (editor) {\n var rng = editor.selection.getRng();\n var isPre, blocks;\n var hasPreSibling = function (pre) {\n return isPre(pre.previousSibling) && ArrUtils.indexOf(blocks, pre.previousSibling) !== -1;\n };\n var joinPre = function (pre1, pre2) {\n DomQuery(pre2).remove();\n DomQuery(pre1).append('
').append(pre2.childNodes);\n };\n isPre = NodeType.matchNodeNames('pre');\n if (!rng.collapsed) {\n blocks = editor.selection.getSelectedBlocks();\n each$c(filter$2(filter$2(blocks, isPre), hasPreSibling), function (pre) {\n joinPre(pre.previousSibling, pre);\n });\n }\n });\n var Hooks = { postProcess: postProcess };\n\n var MCE_ATTR_RE = /^(src|href|style)$/;\n var each$d = Tools.each;\n var isEq$5 = FormatUtils.isEq;\n var isTableCell$4 = function (node) {\n return /^(TH|TD)$/.test(node.nodeName);\n };\n var isChildOfInlineParent = function (dom, node, parent) {\n return dom.isChildOf(node, parent) && node !== parent && !dom.isBlock(parent);\n };\n var getContainer = function (ed, rng, start) {\n var container, offset, lastIdx;\n container = rng[start ? 'startContainer' : 'endContainer'];\n offset = rng[start ? 'startOffset' : 'endOffset'];\n if (NodeType.isElement(container)) {\n lastIdx = container.childNodes.length - 1;\n if (!start && offset) {\n offset--;\n }\n container = container.childNodes[offset > lastIdx ? lastIdx : offset];\n }\n if (NodeType.isText(container) && start && offset >= container.nodeValue.length) {\n container = new TreeWalker(container, ed.getBody()).next() || container;\n }\n if (NodeType.isText(container) && !start && offset === 0) {\n container = new TreeWalker(container, ed.getBody()).prev() || container;\n }\n return container;\n };\n var wrap$2 = function (dom, node, name, attrs) {\n var wrapper = dom.create(name, attrs);\n node.parentNode.insertBefore(wrapper, node);\n wrapper.appendChild(node);\n return wrapper;\n };\n var wrapWithSiblings = function (dom, node, next, name, attrs) {\n var start = Element.fromDom(node);\n var wrapper = Element.fromDom(dom.create(name, attrs));\n var siblings = next ? nextSiblings(start) : prevSiblings(start);\n append$1(wrapper, siblings);\n if (next) {\n before(start, wrapper);\n prepend(wrapper, start);\n } else {\n after(start, wrapper);\n append(wrapper, start);\n }\n return wrapper.dom();\n };\n var matchName$1 = function (dom, node, format) {\n if (isEq$5(node, format.inline)) {\n return true;\n }\n if (isEq$5(node, format.block)) {\n return true;\n }\n if (format.selector) {\n return NodeType.isElement(node) && dom.is(node, format.selector);\n }\n };\n var isColorFormatAndAnchor = function (node, format) {\n return format.links && node.tagName === 'A';\n };\n var find$3 = function (dom, node, next, inc) {\n node = FormatUtils.getNonWhiteSpaceSibling(node, next, inc);\n return !node || (node.nodeName === 'BR' || dom.isBlock(node));\n };\n var removeNode$1 = function (ed, node, format) {\n var parentNode = node.parentNode;\n var rootBlockElm;\n var dom = ed.dom, forcedRootBlock = ed.settings.forced_root_block;\n if (format.block) {\n if (!forcedRootBlock) {\n if (dom.isBlock(node) && !dom.isBlock(parentNode)) {\n if (!find$3(dom, node, false) && !find$3(dom, node.firstChild, true, 1)) {\n node.insertBefore(dom.create('br'), node.firstChild);\n }\n if (!find$3(dom, node, true) && !find$3(dom, node.lastChild, false, 1)) {\n node.appendChild(dom.create('br'));\n }\n }\n } else {\n if (parentNode === dom.getRoot()) {\n if (!format.list_block || !isEq$5(node, format.list_block)) {\n each$d(Tools.grep(node.childNodes), function (node) {\n if (FormatUtils.isValid(ed, forcedRootBlock, node.nodeName.toLowerCase())) {\n if (!rootBlockElm) {\n rootBlockElm = wrap$2(dom, node, forcedRootBlock);\n dom.setAttribs(rootBlockElm, ed.settings.forced_root_block_attrs);\n } else {\n rootBlockElm.appendChild(node);\n }\n } else {\n rootBlockElm = 0;\n }\n });\n }\n }\n }\n }\n if (format.selector && format.inline && !isEq$5(format.inline, node)) {\n return;\n }\n dom.remove(node, 1);\n };\n var removeFormat = function (ed, format, vars, node, compareNode) {\n var i, attrs, stylesModified;\n var dom = ed.dom;\n if (!matchName$1(dom, node, format) && !isColorFormatAndAnchor(node, format)) {\n return false;\n }\n if (format.remove !== 'all') {\n each$d(format.styles, function (value, name) {\n value = FormatUtils.normalizeStyleValue(dom, FormatUtils.replaceVars(value, vars), name);\n if (typeof name === 'number') {\n name = value;\n compareNode = 0;\n }\n if (format.remove_similar || (!compareNode || isEq$5(FormatUtils.getStyle(dom, compareNode, name), value))) {\n dom.setStyle(node, name, '');\n }\n stylesModified = 1;\n });\n if (stylesModified && dom.getAttrib(node, 'style') === '') {\n node.removeAttribute('style');\n node.removeAttribute('data-mce-style');\n }\n each$d(format.attributes, function (value, name) {\n var valueOut;\n value = FormatUtils.replaceVars(value, vars);\n if (typeof name === 'number') {\n name = value;\n compareNode = 0;\n }\n if (!compareNode || isEq$5(dom.getAttrib(compareNode, name), value)) {\n if (name === 'class') {\n value = dom.getAttrib(node, name);\n if (value) {\n valueOut = '';\n each$d(value.split(/\\s+/), function (cls) {\n if (/mce\\-\\w+/.test(cls)) {\n valueOut += (valueOut ? ' ' : '') + cls;\n }\n });\n if (valueOut) {\n dom.setAttrib(node, name, valueOut);\n return;\n }\n }\n }\n if (name === 'class') {\n node.removeAttribute('className');\n }\n if (MCE_ATTR_RE.test(name)) {\n node.removeAttribute('data-mce-' + name);\n }\n node.removeAttribute(name);\n }\n });\n each$d(format.classes, function (value) {\n value = FormatUtils.replaceVars(value, vars);\n if (!compareNode || dom.hasClass(compareNode, value)) {\n dom.removeClass(node, value);\n }\n });\n attrs = dom.getAttribs(node);\n for (i = 0; i < attrs.length; i++) {\n var attrName = attrs[i].nodeName;\n if (attrName.indexOf('_') !== 0 && attrName.indexOf('data-') !== 0) {\n return false;\n }\n }\n }\n if (format.remove !== 'none') {\n removeNode$1(ed, node, format);\n return true;\n }\n };\n var findFormatRoot = function (editor, container, name, vars, similar) {\n var formatRoot;\n each$d(FormatUtils.getParents(editor.dom, container.parentNode).reverse(), function (parent) {\n var format;\n if (!formatRoot && parent.id !== '_start' && parent.id !== '_end') {\n format = MatchFormat.matchNode(editor, parent, name, vars, similar);\n if (format && format.split !== false) {\n formatRoot = parent;\n }\n }\n });\n return formatRoot;\n };\n var wrapAndSplit = function (editor, formatList, formatRoot, container, target, split, format, vars) {\n var parent, clone, lastClone, firstClone, i, formatRootParent;\n var dom = editor.dom;\n if (formatRoot) {\n formatRootParent = formatRoot.parentNode;\n for (parent = container.parentNode; parent && parent !== formatRootParent; parent = parent.parentNode) {\n clone = dom.clone(parent, false);\n for (i = 0; i < formatList.length; i++) {\n if (removeFormat(editor, formatList[i], vars, clone, clone)) {\n clone = 0;\n break;\n }\n }\n if (clone) {\n if (lastClone) {\n clone.appendChild(lastClone);\n }\n if (!firstClone) {\n firstClone = clone;\n }\n lastClone = clone;\n }\n }\n if (split && (!format.mixed || !dom.isBlock(formatRoot))) {\n container = dom.split(formatRoot, container);\n }\n if (lastClone) {\n target.parentNode.insertBefore(lastClone, target);\n firstClone.appendChild(target);\n }\n }\n return container;\n };\n var remove$6 = function (ed, name, vars, node, similar) {\n var formatList = ed.formatter.get(name), format = formatList[0];\n var bookmark, rng, contentEditable = true;\n var dom = ed.dom;\n var selection = ed.selection;\n var splitToFormatRoot = function (container) {\n var formatRoot = findFormatRoot(ed, container, name, vars, similar);\n return wrapAndSplit(ed, formatList, formatRoot, container, container, true, format, vars);\n };\n var isRemoveBookmarkNode = function (node) {\n return Bookmarks.isBookmarkNode(node) && NodeType.isElement(node) && (node.id === '_start' || node.id === '_end');\n };\n var process = function (node) {\n var children, i, l, lastContentEditable, hasContentEditableState;\n if (NodeType.isElement(node) && dom.getContentEditable(node)) {\n lastContentEditable = contentEditable;\n contentEditable = dom.getContentEditable(node) === 'true';\n hasContentEditableState = true;\n }\n children = Tools.grep(node.childNodes);\n if (contentEditable && !hasContentEditableState) {\n for (i = 0, l = formatList.length; i < l; i++) {\n if (removeFormat(ed, formatList[i], vars, node, node)) {\n break;\n }\n }\n }\n if (format.deep) {\n if (children.length) {\n for (i = 0, l = children.length; i < l; i++) {\n process(children[i]);\n }\n if (hasContentEditableState) {\n contentEditable = lastContentEditable;\n }\n }\n }\n };\n var unwrap = function (start) {\n var node = dom.get(start ? '_start' : '_end');\n var out = node[start ? 'firstChild' : 'lastChild'];\n if (isRemoveBookmarkNode(out)) {\n out = out[start ? 'firstChild' : 'lastChild'];\n }\n if (NodeType.isText(out) && out.data.length === 0) {\n out = start ? node.previousSibling || node.nextSibling : node.nextSibling || node.previousSibling;\n }\n dom.remove(node, true);\n return out;\n };\n var removeRngStyle = function (rng) {\n var startContainer, endContainer;\n var commonAncestorContainer = rng.commonAncestorContainer;\n rng = ExpandRange.expandRng(ed, rng, formatList, true);\n if (format.split) {\n rng = SplitRange.split(rng);\n startContainer = getContainer(ed, rng, true);\n endContainer = getContainer(ed, rng);\n if (startContainer !== endContainer) {\n if (/^(TR|TH|TD)$/.test(startContainer.nodeName) && startContainer.firstChild) {\n if (startContainer.nodeName === 'TR') {\n startContainer = startContainer.firstChild.firstChild || startContainer;\n } else {\n startContainer = startContainer.firstChild || startContainer;\n }\n }\n if (commonAncestorContainer && /^T(HEAD|BODY|FOOT|R)$/.test(commonAncestorContainer.nodeName) && isTableCell$4(endContainer) && endContainer.firstChild) {\n endContainer = endContainer.firstChild || endContainer;\n }\n if (isChildOfInlineParent(dom, startContainer, endContainer)) {\n var marker = Option.from(startContainer.firstChild).getOr(startContainer);\n splitToFormatRoot(wrapWithSiblings(dom, marker, true, 'span', {\n 'id': '_start',\n 'data-mce-type': 'bookmark'\n }));\n unwrap(true);\n return;\n }\n if (isChildOfInlineParent(dom, endContainer, startContainer)) {\n var marker = Option.from(endContainer.lastChild).getOr(endContainer);\n splitToFormatRoot(wrapWithSiblings(dom, marker, false, 'span', {\n 'id': '_end',\n 'data-mce-type': 'bookmark'\n }));\n unwrap(false);\n return;\n }\n startContainer = wrap$2(dom, startContainer, 'span', {\n 'id': '_start',\n 'data-mce-type': 'bookmark'\n });\n endContainer = wrap$2(dom, endContainer, 'span', {\n 'id': '_end',\n 'data-mce-type': 'bookmark'\n });\n splitToFormatRoot(startContainer);\n splitToFormatRoot(endContainer);\n startContainer = unwrap(true);\n endContainer = unwrap();\n } else {\n startContainer = endContainer = splitToFormatRoot(startContainer);\n }\n rng.startContainer = startContainer.parentNode ? startContainer.parentNode : startContainer;\n rng.startOffset = dom.nodeIndex(startContainer);\n rng.endContainer = endContainer.parentNode ? endContainer.parentNode : endContainer;\n rng.endOffset = dom.nodeIndex(endContainer) + 1;\n }\n RangeWalk.walk(dom, rng, function (nodes) {\n each$d(nodes, function (node) {\n process(node);\n if (NodeType.isElement(node) && ed.dom.getStyle(node, 'text-decoration') === 'underline' && node.parentNode && FormatUtils.getTextDecoration(dom, node.parentNode) === 'underline') {\n removeFormat(ed, {\n deep: false,\n exact: true,\n inline: 'span',\n styles: { textDecoration: 'underline' }\n }, null, node);\n }\n });\n });\n };\n if (node) {\n if (node.nodeType) {\n rng = dom.createRng();\n rng.setStartBefore(node);\n rng.setEndAfter(node);\n removeRngStyle(rng);\n } else {\n removeRngStyle(node);\n }\n return;\n }\n if (dom.getContentEditable(selection.getNode()) === 'false') {\n node = selection.getNode();\n for (var i = 0, l = formatList.length; i < l; i++) {\n if (formatList[i].ceFalseOverride) {\n if (removeFormat(ed, formatList[i], vars, node, node)) {\n break;\n }\n }\n }\n return;\n }\n if (!selection.isCollapsed() || !format.inline || dom.select('td[data-mce-selected],th[data-mce-selected]').length) {\n bookmark = GetBookmark.getPersistentBookmark(ed.selection, true);\n removeRngStyle(selection.getRng());\n selection.moveToBookmark(bookmark);\n if (format.inline && MatchFormat.match(ed, name, vars, selection.getStart())) {\n FormatUtils.moveStart(dom, selection, selection.getRng());\n }\n ed.nodeChanged();\n } else {\n removeCaretFormat(ed, name, vars, similar);\n }\n };\n var RemoveFormat = {\n removeFormat: removeFormat,\n remove: remove$6\n };\n\n var each$e = Tools.each;\n var isElementNode = function (node) {\n return node && node.nodeType === 1 && !Bookmarks.isBookmarkNode(node) && !isCaretNode(node) && !NodeType.isBogus(node);\n };\n var findElementSibling = function (node, siblingName) {\n var sibling;\n for (sibling = node; sibling; sibling = sibling[siblingName]) {\n if (sibling.nodeType === 3 && sibling.nodeValue.length !== 0) {\n return node;\n }\n if (sibling.nodeType === 1 && !Bookmarks.isBookmarkNode(sibling)) {\n return sibling;\n }\n }\n return node;\n };\n var mergeSiblingsNodes = function (dom, prev, next) {\n var sibling, tmpSibling;\n var elementUtils = new ElementUtils(dom);\n if (prev && next) {\n prev = findElementSibling(prev, 'previousSibling');\n next = findElementSibling(next, 'nextSibling');\n if (elementUtils.compare(prev, next)) {\n for (sibling = prev.nextSibling; sibling && sibling !== next;) {\n tmpSibling = sibling;\n sibling = sibling.nextSibling;\n prev.appendChild(tmpSibling);\n }\n dom.remove(next);\n Tools.each(Tools.grep(next.childNodes), function (node) {\n prev.appendChild(node);\n });\n return prev;\n }\n }\n return next;\n };\n var processChildElements = function (node, filter, process) {\n each$e(node.childNodes, function (node) {\n if (isElementNode(node)) {\n if (filter(node)) {\n process(node);\n }\n if (node.hasChildNodes()) {\n processChildElements(node, filter, process);\n }\n }\n });\n };\n var hasStyle = function (dom, name) {\n return curry(function (name, node) {\n return !!(node && FormatUtils.getStyle(dom, node, name));\n }, name);\n };\n var applyStyle = function (dom, name, value) {\n return curry(function (name, value, node) {\n dom.setStyle(node, name, value);\n if (node.getAttribute('style') === '') {\n node.removeAttribute('style');\n }\n unwrapEmptySpan(dom, node);\n }, name, value);\n };\n var unwrapEmptySpan = function (dom, node) {\n if (node.nodeName === 'SPAN' && dom.getAttribs(node).length === 0) {\n dom.remove(node, true);\n }\n };\n var processUnderlineAndColor = function (dom, node) {\n var textDecoration;\n if (node.nodeType === 1 && node.parentNode && node.parentNode.nodeType === 1) {\n textDecoration = FormatUtils.getTextDecoration(dom, node.parentNode);\n if (dom.getStyle(node, 'color') && textDecoration) {\n dom.setStyle(node, 'text-decoration', textDecoration);\n } else if (dom.getStyle(node, 'text-decoration') === textDecoration) {\n dom.setStyle(node, 'text-decoration', null);\n }\n }\n };\n var mergeUnderlineAndColor = function (dom, format, vars, node) {\n if (format.styles.color || format.styles.textDecoration) {\n Tools.walk(node, curry(processUnderlineAndColor, dom), 'childNodes');\n processUnderlineAndColor(dom, node);\n }\n };\n var mergeBackgroundColorAndFontSize = function (dom, format, vars, node) {\n if (format.styles && format.styles.backgroundColor) {\n processChildElements(node, hasStyle(dom, 'fontSize'), applyStyle(dom, 'backgroundColor', FormatUtils.replaceVars(format.styles.backgroundColor, vars)));\n }\n };\n var mergeSubSup = function (dom, format, vars, node) {\n if (format.inline === 'sub' || format.inline === 'sup') {\n processChildElements(node, hasStyle(dom, 'fontSize'), applyStyle(dom, 'fontSize', ''));\n dom.remove(dom.select(format.inline === 'sup' ? 'sub' : 'sup', node), true);\n }\n };\n var mergeSiblings = function (dom, format, vars, node) {\n if (node && format.merge_siblings !== false) {\n node = mergeSiblingsNodes(dom, FormatUtils.getNonWhiteSpaceSibling(node), node);\n node = mergeSiblingsNodes(dom, node, FormatUtils.getNonWhiteSpaceSibling(node, true));\n }\n };\n var clearChildStyles = function (dom, format, node) {\n if (format.clear_child_styles) {\n var selector = format.links ? '*:not(a)' : '*';\n each$e(dom.select(selector, node), function (node) {\n if (isElementNode(node)) {\n each$e(format.styles, function (value, name) {\n dom.setStyle(node, name, '');\n });\n }\n });\n }\n };\n var mergeWithChildren = function (editor, formatList, vars, node) {\n each$e(formatList, function (format) {\n each$e(editor.dom.select(format.inline, node), function (child) {\n if (!isElementNode(child)) {\n return;\n }\n RemoveFormat.removeFormat(editor, format, vars, child, format.exact ? child : null);\n });\n clearChildStyles(editor.dom, format, node);\n });\n };\n var mergeWithParents = function (editor, format, name, vars, node) {\n if (MatchFormat.matchNode(editor, node.parentNode, name, vars)) {\n if (RemoveFormat.removeFormat(editor, format, vars, node)) {\n return;\n }\n }\n if (format.merge_with_parents) {\n editor.dom.getParent(node.parentNode, function (parent) {\n if (MatchFormat.matchNode(editor, parent, name, vars)) {\n RemoveFormat.removeFormat(editor, format, vars, node);\n return true;\n }\n });\n }\n };\n var MergeFormats = {\n mergeWithChildren: mergeWithChildren,\n mergeUnderlineAndColor: mergeUnderlineAndColor,\n mergeBackgroundColorAndFontSize: mergeBackgroundColorAndFontSize,\n mergeSubSup: mergeSubSup,\n mergeSiblings: mergeSiblings,\n mergeWithParents: mergeWithParents\n };\n\n var each$f = Tools.each;\n var isElementNode$1 = function (node) {\n return node && node.nodeType === 1 && !Bookmarks.isBookmarkNode(node) && !isCaretNode(node) && !NodeType.isBogus(node);\n };\n var applyFormat = function (ed, name, vars, node) {\n var formatList = ed.formatter.get(name);\n var format = formatList[0];\n var bookmark, rng;\n var isCollapsed = !node && ed.selection.isCollapsed();\n var dom = ed.dom, selection = ed.selection;\n var setElementFormat = function (elm, fmt) {\n fmt = fmt || format;\n if (elm) {\n if (fmt.onformat) {\n fmt.onformat(elm, fmt, vars, node);\n }\n each$f(fmt.styles, function (value, name) {\n dom.setStyle(elm, name, FormatUtils.replaceVars(value, vars));\n });\n if (fmt.styles) {\n var styleVal = dom.getAttrib(elm, 'style');\n if (styleVal) {\n elm.setAttribute('data-mce-style', styleVal);\n }\n }\n each$f(fmt.attributes, function (value, name) {\n dom.setAttrib(elm, name, FormatUtils.replaceVars(value, vars));\n });\n each$f(fmt.classes, function (value) {\n value = FormatUtils.replaceVars(value, vars);\n if (!dom.hasClass(elm, value)) {\n dom.addClass(elm, value);\n }\n });\n }\n };\n var applyNodeStyle = function (formatList, node) {\n var found = false;\n if (!format.selector) {\n return false;\n }\n each$f(formatList, function (format) {\n if ('collapsed' in format && format.collapsed !== isCollapsed) {\n return;\n }\n if (dom.is(node, format.selector) && !isCaretNode(node)) {\n setElementFormat(node, format);\n found = true;\n return false;\n }\n });\n return found;\n };\n var applyRngStyle = function (dom, rng, bookmark, nodeSpecific) {\n var newWrappers = [];\n var wrapName, wrapElm, contentEditable = true;\n wrapName = format.inline || format.block;\n wrapElm = dom.create(wrapName);\n setElementFormat(wrapElm);\n RangeWalk.walk(dom, rng, function (nodes) {\n var currentWrapElm;\n var process = function (node) {\n var nodeName, parentName, hasContentEditableState, lastContentEditable;\n lastContentEditable = contentEditable;\n nodeName = node.nodeName.toLowerCase();\n parentName = node.parentNode.nodeName.toLowerCase();\n if (node.nodeType === 1 && dom.getContentEditable(node)) {\n lastContentEditable = contentEditable;\n contentEditable = dom.getContentEditable(node) === 'true';\n hasContentEditableState = true;\n }\n if (FormatUtils.isEq(nodeName, 'br')) {\n currentWrapElm = 0;\n if (format.block) {\n dom.remove(node);\n }\n return;\n }\n if (format.wrapper && MatchFormat.matchNode(ed, node, name, vars)) {\n currentWrapElm = 0;\n return;\n }\n if (contentEditable && !hasContentEditableState && format.block && !format.wrapper && FormatUtils.isTextBlock(ed, nodeName) && FormatUtils.isValid(ed, parentName, wrapName)) {\n node = dom.rename(node, wrapName);\n setElementFormat(node);\n newWrappers.push(node);\n currentWrapElm = 0;\n return;\n }\n if (format.selector) {\n var found = applyNodeStyle(formatList, node);\n if (!format.inline || found) {\n currentWrapElm = 0;\n return;\n }\n }\n if (contentEditable && !hasContentEditableState && FormatUtils.isValid(ed, wrapName, nodeName) && FormatUtils.isValid(ed, parentName, wrapName) && !(!nodeSpecific && node.nodeType === 3 && node.nodeValue.length === 1 && node.nodeValue.charCodeAt(0) === 65279) && !isCaretNode(node) && (!format.inline || !dom.isBlock(node))) {\n if (!currentWrapElm) {\n currentWrapElm = dom.clone(wrapElm, false);\n node.parentNode.insertBefore(currentWrapElm, node);\n newWrappers.push(currentWrapElm);\n }\n currentWrapElm.appendChild(node);\n } else {\n currentWrapElm = 0;\n each$f(Tools.grep(node.childNodes), process);\n if (hasContentEditableState) {\n contentEditable = lastContentEditable;\n }\n currentWrapElm = 0;\n }\n };\n each$f(nodes, process);\n });\n if (format.links === true) {\n each$f(newWrappers, function (node) {\n var process = function (node) {\n if (node.nodeName === 'A') {\n setElementFormat(node, format);\n }\n each$f(Tools.grep(node.childNodes), process);\n };\n process(node);\n });\n }\n each$f(newWrappers, function (node) {\n var childCount;\n var getChildCount = function (node) {\n var count = 0;\n each$f(node.childNodes, function (node) {\n if (!FormatUtils.isWhiteSpaceNode(node) && !Bookmarks.isBookmarkNode(node)) {\n count++;\n }\n });\n return count;\n };\n var getChildElementNode = function (root) {\n var child = false;\n each$f(root.childNodes, function (node) {\n if (isElementNode$1(node)) {\n child = node;\n return false;\n }\n });\n return child;\n };\n var mergeStyles = function (node) {\n var child, clone;\n child = getChildElementNode(node);\n if (child && !Bookmarks.isBookmarkNode(child) && MatchFormat.matchName(dom, child, format)) {\n clone = dom.clone(child, false);\n setElementFormat(clone);\n dom.replace(clone, node, true);\n dom.remove(child, 1);\n }\n return clone || node;\n };\n childCount = getChildCount(node);\n if ((newWrappers.length > 1 || !dom.isBlock(node)) && childCount === 0) {\n dom.remove(node, 1);\n return;\n }\n if (format.inline || format.wrapper) {\n if (!format.exact && childCount === 1) {\n node = mergeStyles(node);\n }\n MergeFormats.mergeWithChildren(ed, formatList, vars, node);\n MergeFormats.mergeWithParents(ed, format, name, vars, node);\n MergeFormats.mergeBackgroundColorAndFontSize(dom, format, vars, node);\n MergeFormats.mergeSubSup(dom, format, vars, node);\n MergeFormats.mergeSiblings(dom, format, vars, node);\n }\n });\n };\n if (dom.getContentEditable(selection.getNode()) === 'false') {\n node = selection.getNode();\n for (var i = 0, l = formatList.length; i < l; i++) {\n if (formatList[i].ceFalseOverride && dom.is(node, formatList[i].selector)) {\n setElementFormat(node, formatList[i]);\n return;\n }\n }\n return;\n }\n if (format) {\n if (node) {\n if (node.nodeType) {\n if (!applyNodeStyle(formatList, node)) {\n rng = dom.createRng();\n rng.setStartBefore(node);\n rng.setEndAfter(node);\n applyRngStyle(dom, ExpandRange.expandRng(ed, rng, formatList), null, true);\n }\n } else {\n applyRngStyle(dom, node, null, true);\n }\n } else {\n if (!isCollapsed || !format.inline || dom.select('td[data-mce-selected],th[data-mce-selected]').length) {\n var curSelNode = ed.selection.getNode();\n if (!ed.settings.forced_root_block && formatList[0].defaultBlock && !dom.getParent(curSelNode, dom.isBlock)) {\n applyFormat(ed, formatList[0].defaultBlock);\n }\n ed.selection.setRng(RangeNormalizer.normalize(ed.selection.getRng()));\n bookmark = GetBookmark.getPersistentBookmark(ed.selection, true);\n applyRngStyle(dom, ExpandRange.expandRng(ed, selection.getRng(), formatList));\n if (format.styles) {\n MergeFormats.mergeUnderlineAndColor(dom, format, vars, curSelNode);\n }\n selection.moveToBookmark(bookmark);\n FormatUtils.moveStart(dom, selection, selection.getRng());\n ed.nodeChanged();\n } else {\n applyCaretFormat(ed, name, vars);\n }\n }\n Hooks.postProcess(name, ed);\n }\n };\n var ApplyFormat = { applyFormat: applyFormat };\n\n var each$g = Tools.each;\n var setup$5 = function (formatChangeData, editor) {\n var currentFormats = {};\n formatChangeData.set({});\n editor.on('NodeChange', function (e) {\n var parents = FormatUtils.getParents(editor.dom, e.element);\n var matchedFormats = {};\n parents = Tools.grep(parents, function (node) {\n return node.nodeType === 1 && !node.getAttribute('data-mce-bogus');\n });\n each$g(formatChangeData.get(), function (callbacks, format) {\n each$g(parents, function (node) {\n if (editor.formatter.matchNode(node, format, {}, callbacks.similar)) {\n if (!currentFormats[format]) {\n each$g(callbacks, function (callback) {\n callback(true, {\n node: node,\n format: format,\n parents: parents\n });\n });\n currentFormats[format] = callbacks;\n }\n matchedFormats[format] = callbacks;\n return false;\n }\n if (MatchFormat.matchesUnInheritedFormatSelector(editor, node, format)) {\n return false;\n }\n });\n });\n each$g(currentFormats, function (callbacks, format) {\n if (!matchedFormats[format]) {\n delete currentFormats[format];\n each$g(callbacks, function (callback) {\n callback(false, {\n node: e.element,\n format: format,\n parents: parents\n });\n });\n }\n });\n });\n };\n var addListeners = function (formatChangeData, formats, callback, similar) {\n var formatChangeItems = formatChangeData.get();\n each$g(formats.split(','), function (format) {\n if (!formatChangeItems[format]) {\n formatChangeItems[format] = [];\n formatChangeItems[format].similar = similar;\n }\n formatChangeItems[format].push(callback);\n });\n formatChangeData.set(formatChangeItems);\n };\n var formatChanged = function (editor, formatChangeState, formats, callback, similar) {\n if (formatChangeState.get() === null) {\n setup$5(formatChangeState, editor);\n }\n addListeners(formatChangeState, formats, callback, similar);\n };\n var FormatChanged = { formatChanged: formatChanged };\n\n var get$5 = function (dom) {\n var formats = {\n valigntop: [{\n selector: 'td,th',\n styles: { verticalAlign: 'top' }\n }],\n valignmiddle: [{\n selector: 'td,th',\n styles: { verticalAlign: 'middle' }\n }],\n valignbottom: [{\n selector: 'td,th',\n styles: { verticalAlign: 'bottom' }\n }],\n alignleft: [\n {\n selector: 'figure.image',\n collapsed: false,\n classes: 'align-left',\n ceFalseOverride: true,\n preview: 'font-family font-size'\n },\n {\n selector: 'figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li',\n styles: { textAlign: 'left' },\n inherit: false,\n preview: false,\n defaultBlock: 'div'\n },\n {\n selector: 'img,table',\n collapsed: false,\n styles: { float: 'left' },\n preview: 'font-family font-size'\n }\n ],\n aligncenter: [\n {\n selector: 'figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li',\n styles: { textAlign: 'center' },\n inherit: false,\n preview: 'font-family font-size',\n defaultBlock: 'div'\n },\n {\n selector: 'figure.image',\n collapsed: false,\n classes: 'align-center',\n ceFalseOverride: true,\n preview: 'font-family font-size'\n },\n {\n selector: 'img',\n collapsed: false,\n styles: {\n display: 'block',\n marginLeft: 'auto',\n marginRight: 'auto'\n },\n preview: false\n },\n {\n selector: 'table',\n collapsed: false,\n styles: {\n marginLeft: 'auto',\n marginRight: 'auto'\n },\n preview: 'font-family font-size'\n }\n ],\n alignright: [\n {\n selector: 'figure.image',\n collapsed: false,\n classes: 'align-right',\n ceFalseOverride: true,\n preview: 'font-family font-size'\n },\n {\n selector: 'figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li',\n styles: { textAlign: 'right' },\n inherit: false,\n preview: 'font-family font-size',\n defaultBlock: 'div'\n },\n {\n selector: 'img,table',\n collapsed: false,\n styles: { float: 'right' },\n preview: 'font-family font-size'\n }\n ],\n alignjustify: [{\n selector: 'figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li',\n styles: { textAlign: 'justify' },\n inherit: false,\n defaultBlock: 'div',\n preview: 'font-family font-size'\n }],\n bold: [\n {\n inline: 'strong',\n remove: 'all'\n },\n {\n inline: 'span',\n styles: { fontWeight: 'bold' }\n },\n {\n inline: 'b',\n remove: 'all'\n }\n ],\n italic: [\n {\n inline: 'em',\n remove: 'all'\n },\n {\n inline: 'span',\n styles: { fontStyle: 'italic' }\n },\n {\n inline: 'i',\n remove: 'all'\n }\n ],\n underline: [\n {\n inline: 'span',\n styles: { textDecoration: 'underline' },\n exact: true\n },\n {\n inline: 'u',\n remove: 'all'\n }\n ],\n strikethrough: [\n {\n inline: 'span',\n styles: { textDecoration: 'line-through' },\n exact: true\n },\n {\n inline: 'strike',\n remove: 'all'\n }\n ],\n forecolor: {\n inline: 'span',\n styles: { color: '%value' },\n links: true,\n remove_similar: true,\n clear_child_styles: true\n },\n hilitecolor: {\n inline: 'span',\n styles: { backgroundColor: '%value' },\n links: true,\n remove_similar: true,\n clear_child_styles: true\n },\n fontname: {\n inline: 'span',\n toggle: false,\n styles: { fontFamily: '%value' },\n clear_child_styles: true\n },\n fontsize: {\n inline: 'span',\n toggle: false,\n styles: { fontSize: '%value' },\n clear_child_styles: true\n },\n fontsize_class: {\n inline: 'span',\n attributes: { class: '%value' }\n },\n blockquote: {\n block: 'blockquote',\n wrapper: 1,\n remove: 'all'\n },\n subscript: { inline: 'sub' },\n superscript: { inline: 'sup' },\n code: { inline: 'code' },\n link: {\n inline: 'a',\n selector: 'a',\n remove: 'all',\n split: true,\n deep: true,\n onmatch: function () {\n return true;\n },\n onformat: function (elm, fmt, vars) {\n Tools.each(vars, function (value, key) {\n dom.setAttrib(elm, key, value);\n });\n }\n },\n removeformat: [\n {\n selector: 'b,strong,em,i,font,u,strike,sub,sup,dfn,code,samp,kbd,var,cite,mark,q,del,ins',\n remove: 'all',\n split: true,\n expand: false,\n block_expand: true,\n deep: true\n },\n {\n selector: 'span',\n attributes: [\n 'style',\n 'class'\n ],\n remove: 'empty',\n split: true,\n expand: false,\n deep: true\n },\n {\n selector: '*',\n attributes: [\n 'style',\n 'class'\n ],\n split: false,\n expand: false,\n deep: true\n }\n ]\n };\n Tools.each('p h1 h2 h3 h4 h5 h6 div address pre div dt dd samp'.split(/\\s/), function (name) {\n formats[name] = {\n block: name,\n remove: 'all'\n };\n });\n return formats;\n };\n var DefaultFormats = { get: get$5 };\n\n function FormatRegistry (editor) {\n var formats = {};\n var get = function (name) {\n return name ? formats[name] : formats;\n };\n var register = function (name, format) {\n if (name) {\n if (typeof name !== 'string') {\n Tools.each(name, function (format, name) {\n register(name, format);\n });\n } else {\n format = format.length ? format : [format];\n Tools.each(format, function (format) {\n if (typeof format.deep === 'undefined') {\n format.deep = !format.selector;\n }\n if (typeof format.split === 'undefined') {\n format.split = !format.selector || format.inline;\n }\n if (typeof format.remove === 'undefined' && format.selector && !format.inline) {\n format.remove = 'none';\n }\n if (format.selector && format.inline) {\n format.mixed = true;\n format.block_expand = true;\n }\n if (typeof format.classes === 'string') {\n format.classes = format.classes.split(/\\s+/);\n }\n });\n formats[name] = format;\n }\n }\n };\n var unregister = function (name) {\n if (name && formats[name]) {\n delete formats[name];\n }\n return formats;\n };\n register(DefaultFormats.get(editor.dom));\n register(editor.settings.formats);\n return {\n get: get,\n register: register,\n unregister: unregister\n };\n }\n\n var each$h = Tools.each;\n var dom = DOMUtils$1.DOM;\n var parsedSelectorToHtml = function (ancestry, editor) {\n var elm, item, fragment;\n var schema = editor && editor.schema || Schema({});\n var decorate = function (elm, item) {\n if (item.classes.length) {\n dom.addClass(elm, item.classes.join(' '));\n }\n dom.setAttribs(elm, item.attrs);\n };\n var createElement = function (sItem) {\n var elm;\n item = typeof sItem === 'string' ? {\n name: sItem,\n classes: [],\n attrs: {}\n } : sItem;\n elm = dom.create(item.name);\n decorate(elm, item);\n return elm;\n };\n var getRequiredParent = function (elm, candidate) {\n var name = typeof elm !== 'string' ? elm.nodeName.toLowerCase() : elm;\n var elmRule = schema.getElementRule(name);\n var parentsRequired = elmRule && elmRule.parentsRequired;\n if (parentsRequired && parentsRequired.length) {\n return candidate && Tools.inArray(parentsRequired, candidate) !== -1 ? candidate : parentsRequired[0];\n } else {\n return false;\n }\n };\n var wrapInHtml = function (elm, ancestry, siblings) {\n var parent, parentCandidate, parentRequired;\n var ancestor = ancestry.length > 0 && ancestry[0];\n var ancestorName = ancestor && ancestor.name;\n parentRequired = getRequiredParent(elm, ancestorName);\n if (parentRequired) {\n if (ancestorName === parentRequired) {\n parentCandidate = ancestry[0];\n ancestry = ancestry.slice(1);\n } else {\n parentCandidate = parentRequired;\n }\n } else if (ancestor) {\n parentCandidate = ancestry[0];\n ancestry = ancestry.slice(1);\n } else if (!siblings) {\n return elm;\n }\n if (parentCandidate) {\n parent = createElement(parentCandidate);\n parent.appendChild(elm);\n }\n if (siblings) {\n if (!parent) {\n parent = dom.create('div');\n parent.appendChild(elm);\n }\n Tools.each(siblings, function (sibling) {\n var siblingElm = createElement(sibling);\n parent.insertBefore(siblingElm, elm);\n });\n }\n return wrapInHtml(parent, ancestry, parentCandidate && parentCandidate.siblings);\n };\n if (ancestry && ancestry.length) {\n item = ancestry[0];\n elm = createElement(item);\n fragment = dom.create('div');\n fragment.appendChild(wrapInHtml(elm, ancestry.slice(1), item.siblings));\n return fragment;\n } else {\n return '';\n }\n };\n var selectorToHtml = function (selector, editor) {\n return parsedSelectorToHtml(parseSelector(selector), editor);\n };\n var parseSelectorItem = function (item) {\n var tagName;\n var obj = {\n classes: [],\n attrs: {}\n };\n item = obj.selector = Tools.trim(item);\n if (item !== '*') {\n tagName = item.replace(/(?:([#\\.]|::?)([\\w\\-]+)|(\\[)([^\\]]+)\\]?)/g, function ($0, $1, $2, $3, $4) {\n switch ($1) {\n case '#':\n obj.attrs.id = $2;\n break;\n case '.':\n obj.classes.push($2);\n break;\n case ':':\n if (Tools.inArray('checked disabled enabled read-only required'.split(' '), $2) !== -1) {\n obj.attrs[$2] = $2;\n }\n break;\n }\n if ($3 === '[') {\n var m = $4.match(/([\\w\\-]+)(?:\\=\\\"([^\\\"]+))?/);\n if (m) {\n obj.attrs[m[1]] = m[2];\n }\n }\n return '';\n });\n }\n obj.name = tagName || 'div';\n return obj;\n };\n var parseSelector = function (selector) {\n if (!selector || typeof selector !== 'string') {\n return [];\n }\n selector = selector.split(/\\s*,\\s*/)[0];\n selector = selector.replace(/\\s*(~\\+|~|\\+|>)\\s*/g, '$1');\n return Tools.map(selector.split(/(?:>|\\s+(?![^\\[\\]]+\\]))/), function (item) {\n var siblings = Tools.map(item.split(/(?:~\\+|~|\\+)/), parseSelectorItem);\n var obj = siblings.pop();\n if (siblings.length) {\n obj.siblings = siblings;\n }\n return obj;\n }).reverse();\n };\n var getCssText = function (editor, format) {\n var name, previewFrag, previewElm, items;\n var previewCss = '', parentFontSize, previewStyles;\n previewStyles = editor.settings.preview_styles;\n if (previewStyles === false) {\n return '';\n }\n if (typeof previewStyles !== 'string') {\n previewStyles = 'font-family font-size font-weight font-style text-decoration ' + 'text-transform color background-color border border-radius outline text-shadow';\n }\n var removeVars = function (val) {\n return val.replace(/%(\\w+)/g, '');\n };\n if (typeof format === 'string') {\n format = editor.formatter.get(format);\n if (!format) {\n return;\n }\n format = format[0];\n }\n if ('preview' in format) {\n previewStyles = format.preview;\n if (previewStyles === false) {\n return '';\n }\n }\n name = format.block || format.inline || 'span';\n items = parseSelector(format.selector);\n if (items.length) {\n if (!items[0].name) {\n items[0].name = name;\n }\n name = format.selector;\n previewFrag = parsedSelectorToHtml(items, editor);\n } else {\n previewFrag = parsedSelectorToHtml([name], editor);\n }\n previewElm = dom.select(name, previewFrag)[0] || previewFrag.firstChild;\n each$h(format.styles, function (value, name) {\n value = removeVars(value);\n if (value) {\n dom.setStyle(previewElm, name, value);\n }\n });\n each$h(format.attributes, function (value, name) {\n value = removeVars(value);\n if (value) {\n dom.setAttrib(previewElm, name, value);\n }\n });\n each$h(format.classes, function (value) {\n value = removeVars(value);\n if (!dom.hasClass(previewElm, value)) {\n dom.addClass(previewElm, value);\n }\n });\n editor.fire('PreviewFormats');\n dom.setStyles(previewFrag, {\n position: 'absolute',\n left: -65535\n });\n editor.getBody().appendChild(previewFrag);\n parentFontSize = dom.getStyle(editor.getBody(), 'fontSize', true);\n parentFontSize = /px$/.test(parentFontSize) ? parseInt(parentFontSize, 10) : 0;\n each$h(previewStyles.split(' '), function (name) {\n var value = dom.getStyle(previewElm, name, true);\n if (name === 'background-color' && /transparent|rgba\\s*\\([^)]+,\\s*0\\)/.test(value)) {\n value = dom.getStyle(editor.getBody(), name, true);\n if (dom.toHex(value).toLowerCase() === '#ffffff') {\n return;\n }\n }\n if (name === 'color') {\n if (dom.toHex(value).toLowerCase() === '#000000') {\n return;\n }\n }\n if (name === 'font-size') {\n if (/em|%$/.test(value)) {\n if (parentFontSize === 0) {\n return;\n }\n var numValue = parseFloat(value) / (/%$/.test(value) ? 100 : 1);\n value = numValue * parentFontSize + 'px';\n }\n }\n if (name === 'border' && value) {\n previewCss += 'padding:0 2px;';\n }\n previewCss += name + ':' + value + ';';\n });\n editor.fire('AfterPreviewFormats');\n dom.remove(previewFrag);\n return previewCss;\n };\n var Preview = {\n getCssText: getCssText,\n parseSelector: parseSelector,\n selectorToHtml: selectorToHtml\n };\n\n var toggle = function (editor, formats, name, vars, node) {\n var fmt = formats.get(name);\n if (MatchFormat.match(editor, name, vars, node) && (!('toggle' in fmt[0]) || fmt[0].toggle)) {\n RemoveFormat.remove(editor, name, vars, node);\n } else {\n ApplyFormat.applyFormat(editor, name, vars, node);\n }\n };\n var ToggleFormat = { toggle: toggle };\n\n var setup$6 = function (editor) {\n editor.addShortcut('meta+b', '', 'Bold');\n editor.addShortcut('meta+i', '', 'Italic');\n editor.addShortcut('meta+u', '', 'Underline');\n for (var i = 1; i <= 6; i++) {\n editor.addShortcut('access+' + i, '', [\n 'FormatBlock',\n false,\n 'h' + i\n ]);\n }\n editor.addShortcut('access+7', '', [\n 'FormatBlock',\n false,\n 'p'\n ]);\n editor.addShortcut('access+8', '', [\n 'FormatBlock',\n false,\n 'div'\n ]);\n editor.addShortcut('access+9', '', [\n 'FormatBlock',\n false,\n 'address'\n ]);\n };\n var FormatShortcuts = { setup: setup$6 };\n\n function Formatter (editor) {\n var formats = FormatRegistry(editor);\n var formatChangeState = Cell(null);\n FormatShortcuts.setup(editor);\n setup$2(editor);\n return {\n get: formats.get,\n register: formats.register,\n unregister: formats.unregister,\n apply: curry(ApplyFormat.applyFormat, editor),\n remove: curry(RemoveFormat.remove, editor),\n toggle: curry(ToggleFormat.toggle, editor, formats),\n match: curry(MatchFormat.match, editor),\n matchAll: curry(MatchFormat.matchAll, editor),\n matchNode: curry(MatchFormat.matchNode, editor),\n canApply: curry(MatchFormat.canApply, editor),\n formatChanged: curry(FormatChanged.formatChanged, editor, formatChangeState),\n getCssText: curry(Preview.getCssText, editor)\n };\n }\n\n var hasOwnProperty$2 = Object.prototype.hasOwnProperty;\n var shallow$1 = function (old, nu) {\n return nu;\n };\n var baseMerge = function (merger) {\n return function () {\n var objects = new Array(arguments.length);\n for (var i = 0; i < objects.length; i++) {\n objects[i] = arguments[i];\n }\n if (objects.length === 0) {\n throw new Error('Can\\'t merge zero objects');\n }\n var ret = {};\n for (var j = 0; j < objects.length; j++) {\n var curObject = objects[j];\n for (var key in curObject) {\n if (hasOwnProperty$2.call(curObject, key)) {\n ret[key] = merger(ret[key], curObject[key]);\n }\n }\n }\n return ret;\n };\n };\n var merge = baseMerge(shallow$1);\n\n var register = function (htmlParser, settings, dom) {\n htmlParser.addAttributeFilter('data-mce-tabindex', function (nodes, name) {\n var i = nodes.length, node;\n while (i--) {\n node = nodes[i];\n node.attr('tabindex', node.attributes.map['data-mce-tabindex']);\n node.attr(name, null);\n }\n });\n htmlParser.addAttributeFilter('src,href,style', function (nodes, name) {\n var i = nodes.length, node, value;\n var internalName = 'data-mce-' + name;\n var urlConverter = settings.url_converter;\n var urlConverterScope = settings.url_converter_scope;\n while (i--) {\n node = nodes[i];\n value = node.attributes.map[internalName];\n if (value !== undefined) {\n node.attr(name, value.length > 0 ? value : null);\n node.attr(internalName, null);\n } else {\n value = node.attributes.map[name];\n if (name === 'style') {\n value = dom.serializeStyle(dom.parseStyle(value), node.name);\n } else if (urlConverter) {\n value = urlConverter.call(urlConverterScope, value, name, node.name);\n }\n node.attr(name, value.length > 0 ? value : null);\n }\n }\n });\n htmlParser.addAttributeFilter('class', function (nodes) {\n var i = nodes.length, node, value;\n while (i--) {\n node = nodes[i];\n value = node.attr('class');\n if (value) {\n value = node.attr('class').replace(/(?:^|\\s)mce-item-\\w+(?!\\S)/g, '');\n node.attr('class', value.length > 0 ? value : null);\n }\n }\n });\n htmlParser.addAttributeFilter('data-mce-type', function (nodes, name, args) {\n var i = nodes.length, node;\n while (i--) {\n node = nodes[i];\n if (node.attributes.map['data-mce-type'] === 'bookmark' && !args.cleanup) {\n var hasChildren = Option.from(node.firstChild).exists(function (firstChild) {\n return !Zwsp.isZwsp(firstChild.value);\n });\n if (hasChildren) {\n node.unwrap();\n } else {\n node.remove();\n }\n }\n }\n });\n htmlParser.addNodeFilter('noscript', function (nodes) {\n var i = nodes.length, node;\n while (i--) {\n node = nodes[i].firstChild;\n if (node) {\n node.value = Entities.decode(node.value);\n }\n }\n });\n htmlParser.addNodeFilter('script,style', function (nodes, name) {\n var i = nodes.length, node, value, type;\n var trim = function (value) {\n return value.replace(/()/g, '\\n').replace(/^[\\r\\n]*|[\\r\\n]*$/g, '').replace(/^\\s*(()?|\\s*\\/\\/\\s*\\]\\]>(-->)?|\\/\\/\\s*(-->)?|\\]\\]>|\\/\\*\\s*-->\\s*\\*\\/|\\s*-->\\s*)\\s*$/g, '');\n };\n while (i--) {\n node = nodes[i];\n value = node.firstChild ? node.firstChild.value : '';\n if (name === 'script') {\n type = node.attr('type');\n if (type) {\n node.attr('type', type === 'mce-no/type' ? null : type.replace(/^mce\\-/, ''));\n }\n if (settings.element_format === 'xhtml' && value.length > 0) {\n node.firstChild.value = '// ';\n }\n } else {\n if (settings.element_format === 'xhtml' && value.length > 0) {\n node.firstChild.value = '';\n }\n }\n }\n });\n htmlParser.addNodeFilter('#comment', function (nodes) {\n var i = nodes.length, node;\n while (i--) {\n node = nodes[i];\n if (node.value.indexOf('[CDATA[') === 0) {\n node.name = '#cdata';\n node.type = 4;\n node.value = node.value.replace(/^\\[CDATA\\[|\\]\\]$/g, '');\n } else if (node.value.indexOf('mce:protected ') === 0) {\n node.name = '#text';\n node.type = 3;\n node.raw = true;\n node.value = unescape(node.value).substr(14);\n }\n }\n });\n htmlParser.addNodeFilter('xml:namespace,input', function (nodes, name) {\n var i = nodes.length, node;\n while (i--) {\n node = nodes[i];\n if (node.type === 7) {\n node.remove();\n } else if (node.type === 1) {\n if (name === 'input' && !('type' in node.attributes.map)) {\n node.attr('type', 'text');\n }\n }\n }\n });\n htmlParser.addAttributeFilter('data-mce-type', function (nodes) {\n each(nodes, function (node) {\n if (node.attr('data-mce-type') === 'format-caret') {\n if (node.isEmpty(htmlParser.schema.getNonEmptyElements())) {\n node.remove();\n } else {\n node.unwrap();\n }\n }\n });\n });\n htmlParser.addAttributeFilter('data-mce-src,data-mce-href,data-mce-style,' + 'data-mce-selected,data-mce-expando,' + 'data-mce-type,data-mce-resize', function (nodes, name) {\n var i = nodes.length;\n while (i--) {\n nodes[i].attr(name, null);\n }\n });\n };\n var trimTrailingBr = function (rootNode) {\n var brNode1, brNode2;\n var isBr = function (node) {\n return node && node.name === 'br';\n };\n brNode1 = rootNode.lastChild;\n if (isBr(brNode1)) {\n brNode2 = brNode1.prev;\n if (isBr(brNode2)) {\n brNode1.remove();\n brNode2.remove();\n }\n }\n };\n var DomSerializerFilters = {\n register: register,\n trimTrailingBr: trimTrailingBr\n };\n\n var preProcess = function (editor, node, args) {\n var impl, doc, oldDoc;\n var dom = editor.dom;\n node = node.cloneNode(true);\n impl = domGlobals.document.implementation;\n if (impl.createHTMLDocument) {\n doc = impl.createHTMLDocument('');\n Tools.each(node.nodeName === 'BODY' ? node.childNodes : [node], function (node) {\n doc.body.appendChild(doc.importNode(node, true));\n });\n if (node.nodeName !== 'BODY') {\n node = doc.body.firstChild;\n } else {\n node = doc.body;\n }\n oldDoc = dom.doc;\n dom.doc = doc;\n }\n Events.firePreProcess(editor, merge(args, { node: node }));\n if (oldDoc) {\n dom.doc = oldDoc;\n }\n return node;\n };\n var shouldFireEvent = function (editor, args) {\n return editor && editor.hasEventListeners('PreProcess') && !args.no_events;\n };\n var process = function (editor, node, args) {\n return shouldFireEvent(editor, args) ? preProcess(editor, node, args) : node;\n };\n var DomSerializerPreProcess = { process: process };\n\n var removeAttrs = function (node, names) {\n each(names, function (name) {\n node.attr(name, null);\n });\n };\n var addFontToSpansFilter = function (domParser, styles, fontSizes) {\n domParser.addNodeFilter('font', function (nodes) {\n each(nodes, function (node) {\n var props = styles.parse(node.attr('style'));\n var color = node.attr('color');\n var face = node.attr('face');\n var size = node.attr('size');\n if (color) {\n props.color = color;\n }\n if (face) {\n props['font-family'] = face;\n }\n if (size) {\n props['font-size'] = fontSizes[parseInt(node.attr('size'), 10) - 1];\n }\n node.name = 'span';\n node.attr('style', styles.serialize(props));\n removeAttrs(node, [\n 'color',\n 'face',\n 'size'\n ]);\n });\n });\n };\n var addStrikeToSpanFilter = function (domParser, styles) {\n domParser.addNodeFilter('strike', function (nodes) {\n each(nodes, function (node) {\n var props = styles.parse(node.attr('style'));\n props['text-decoration'] = 'line-through';\n node.name = 'span';\n node.attr('style', styles.serialize(props));\n });\n });\n };\n var addFilters = function (domParser, settings) {\n var styles = Styles();\n if (settings.convert_fonts_to_spans) {\n addFontToSpansFilter(domParser, styles, Tools.explode(settings.font_size_legacy_values));\n }\n addStrikeToSpanFilter(domParser, styles);\n };\n var register$1 = function (domParser, settings) {\n if (settings.inline_styles) {\n addFilters(domParser, settings);\n }\n };\n var LegacyFilter = { register: register$1 };\n\n var whiteSpaceRegExp$3 = /^[ \\t\\r\\n]*$/;\n var typeLookup = {\n '#text': 3,\n '#comment': 8,\n '#cdata': 4,\n '#pi': 7,\n '#doctype': 10,\n '#document-fragment': 11\n };\n var walk$2 = function (node, root, prev) {\n var sibling;\n var parent;\n var startName = prev ? 'lastChild' : 'firstChild';\n var siblingName = prev ? 'prev' : 'next';\n if (node[startName]) {\n return node[startName];\n }\n if (node !== root) {\n sibling = node[siblingName];\n if (sibling) {\n return sibling;\n }\n for (parent = node.parent; parent && parent !== root; parent = parent.parent) {\n sibling = parent[siblingName];\n if (sibling) {\n return sibling;\n }\n }\n }\n };\n var Node$1 = function () {\n function Node(name, type) {\n this.name = name;\n this.type = type;\n if (type === 1) {\n this.attributes = [];\n this.attributes.map = {};\n }\n }\n Node.create = function (name, attrs) {\n var node, attrName;\n node = new Node(name, typeLookup[name] || 1);\n if (attrs) {\n for (attrName in attrs) {\n node.attr(attrName, attrs[attrName]);\n }\n }\n return node;\n };\n Node.prototype.replace = function (node) {\n var self = this;\n if (node.parent) {\n node.remove();\n }\n self.insert(node, self);\n self.remove();\n return self;\n };\n Node.prototype.attr = function (name, value) {\n var self = this;\n var attrs, i;\n if (typeof name !== 'string') {\n for (i in name) {\n self.attr(i, name[i]);\n }\n return self;\n }\n if (attrs = self.attributes) {\n if (value !== undefined) {\n if (value === null) {\n if (name in attrs.map) {\n delete attrs.map[name];\n i = attrs.length;\n while (i--) {\n if (attrs[i].name === name) {\n attrs = attrs.splice(i, 1);\n return self;\n }\n }\n }\n return self;\n }\n if (name in attrs.map) {\n i = attrs.length;\n while (i--) {\n if (attrs[i].name === name) {\n attrs[i].value = value;\n break;\n }\n }\n } else {\n attrs.push({\n name: name,\n value: value\n });\n }\n attrs.map[name] = value;\n return self;\n }\n return attrs.map[name];\n }\n };\n Node.prototype.clone = function () {\n var self = this;\n var clone = new Node(self.name, self.type);\n var i, l, selfAttrs, selfAttr, cloneAttrs;\n if (selfAttrs = self.attributes) {\n cloneAttrs = [];\n cloneAttrs.map = {};\n for (i = 0, l = selfAttrs.length; i < l; i++) {\n selfAttr = selfAttrs[i];\n if (selfAttr.name !== 'id') {\n cloneAttrs[cloneAttrs.length] = {\n name: selfAttr.name,\n value: selfAttr.value\n };\n cloneAttrs.map[selfAttr.name] = selfAttr.value;\n }\n }\n clone.attributes = cloneAttrs;\n }\n clone.value = self.value;\n clone.shortEnded = self.shortEnded;\n return clone;\n };\n Node.prototype.wrap = function (wrapper) {\n var self = this;\n self.parent.insert(wrapper, self);\n wrapper.append(self);\n return self;\n };\n Node.prototype.unwrap = function () {\n var self = this;\n var node, next;\n for (node = self.firstChild; node;) {\n next = node.next;\n self.insert(node, self, true);\n node = next;\n }\n self.remove();\n };\n Node.prototype.remove = function () {\n var self = this, parent = self.parent, next = self.next, prev = self.prev;\n if (parent) {\n if (parent.firstChild === self) {\n parent.firstChild = next;\n if (next) {\n next.prev = null;\n }\n } else {\n prev.next = next;\n }\n if (parent.lastChild === self) {\n parent.lastChild = prev;\n if (prev) {\n prev.next = null;\n }\n } else {\n next.prev = prev;\n }\n self.parent = self.next = self.prev = null;\n }\n return self;\n };\n Node.prototype.append = function (node) {\n var self = this;\n var last;\n if (node.parent) {\n node.remove();\n }\n last = self.lastChild;\n if (last) {\n last.next = node;\n node.prev = last;\n self.lastChild = node;\n } else {\n self.lastChild = self.firstChild = node;\n }\n node.parent = self;\n return node;\n };\n Node.prototype.insert = function (node, refNode, before) {\n var parent;\n if (node.parent) {\n node.remove();\n }\n parent = refNode.parent || this;\n if (before) {\n if (refNode === parent.firstChild) {\n parent.firstChild = node;\n } else {\n refNode.prev.next = node;\n }\n node.prev = refNode.prev;\n node.next = refNode;\n refNode.prev = node;\n } else {\n if (refNode === parent.lastChild) {\n parent.lastChild = node;\n } else {\n refNode.next.prev = node;\n }\n node.next = refNode.next;\n node.prev = refNode;\n refNode.next = node;\n }\n node.parent = parent;\n return node;\n };\n Node.prototype.getAll = function (name) {\n var self = this;\n var node;\n var collection = [];\n for (node = self.firstChild; node; node = walk$2(node, self)) {\n if (node.name === name) {\n collection.push(node);\n }\n }\n return collection;\n };\n Node.prototype.empty = function () {\n var self = this;\n var nodes, i, node;\n if (self.firstChild) {\n nodes = [];\n for (node = self.firstChild; node; node = walk$2(node, self)) {\n nodes.push(node);\n }\n i = nodes.length;\n while (i--) {\n node = nodes[i];\n node.parent = node.firstChild = node.lastChild = node.next = node.prev = null;\n }\n }\n self.firstChild = self.lastChild = null;\n return self;\n };\n Node.prototype.isEmpty = function (elements, whitespace, predicate) {\n var self = this;\n var node = self.firstChild, i, name;\n whitespace = whitespace || {};\n if (node) {\n do {\n if (node.type === 1) {\n if (node.attributes.map['data-mce-bogus']) {\n continue;\n }\n if (elements[node.name]) {\n return false;\n }\n i = node.attributes.length;\n while (i--) {\n name = node.attributes[i].name;\n if (name === 'name' || name.indexOf('data-mce-bookmark') === 0) {\n return false;\n }\n }\n }\n if (node.type === 8) {\n return false;\n }\n if (node.type === 3 && !whiteSpaceRegExp$3.test(node.value)) {\n return false;\n }\n if (node.type === 3 && node.parent && whitespace[node.parent.name] && whiteSpaceRegExp$3.test(node.value)) {\n return false;\n }\n if (predicate && predicate(node)) {\n return false;\n }\n } while (node = walk$2(node, self));\n }\n return true;\n };\n Node.prototype.walk = function (prev) {\n return walk$2(this, null, prev);\n };\n return Node;\n }();\n\n var paddEmptyNode = function (settings, args, blockElements, node) {\n var brPreferred = settings.padd_empty_with_br || args.insert;\n if (brPreferred && blockElements[node.name]) {\n node.empty().append(new Node$1('br', 1)).shortEnded = true;\n } else {\n node.empty().append(new Node$1('#text', 3)).value = '\\xA0';\n }\n };\n var isPaddedWithNbsp = function (node) {\n return hasOnlyChild(node, '#text') && node.firstChild.value === '\\xA0';\n };\n var hasOnlyChild = function (node, name) {\n return node && node.firstChild && node.firstChild === node.lastChild && node.firstChild.name === name;\n };\n var isPadded = function (schema, node) {\n var rule = schema.getElementRule(node.name);\n return rule && rule.paddEmpty;\n };\n var isEmpty$2 = function (schema, nonEmptyElements, whitespaceElements, node) {\n return node.isEmpty(nonEmptyElements, whitespaceElements, function (node) {\n return isPadded(schema, node);\n });\n };\n var isLineBreakNode = function (node, blockElements) {\n return node && (blockElements[node.name] || node.name === 'br');\n };\n\n var register$2 = function (parser, settings) {\n var schema = parser.schema;\n if (settings.remove_trailing_brs) {\n parser.addNodeFilter('br', function (nodes, _, args) {\n var i;\n var l = nodes.length;\n var node;\n var blockElements = Tools.extend({}, schema.getBlockElements());\n var nonEmptyElements = schema.getNonEmptyElements();\n var parent, lastParent, prev, prevName;\n var whiteSpaceElements = schema.getWhiteSpaceElements();\n var elementRule, textNode;\n blockElements.body = 1;\n for (i = 0; i < l; i++) {\n node = nodes[i];\n parent = node.parent;\n if (blockElements[node.parent.name] && node === parent.lastChild) {\n prev = node.prev;\n while (prev) {\n prevName = prev.name;\n if (prevName !== 'span' || prev.attr('data-mce-type') !== 'bookmark') {\n if (prevName !== 'br') {\n break;\n }\n if (prevName === 'br') {\n node = null;\n break;\n }\n }\n prev = prev.prev;\n }\n if (node) {\n node.remove();\n if (isEmpty$2(schema, nonEmptyElements, whiteSpaceElements, parent)) {\n elementRule = schema.getElementRule(parent.name);\n if (elementRule) {\n if (elementRule.removeEmpty) {\n parent.remove();\n } else if (elementRule.paddEmpty) {\n paddEmptyNode(settings, args, blockElements, parent);\n }\n }\n }\n }\n } else {\n lastParent = node;\n while (parent && parent.firstChild === lastParent && parent.lastChild === lastParent) {\n lastParent = parent;\n if (blockElements[parent.name]) {\n break;\n }\n parent = parent.parent;\n }\n if (lastParent === parent && settings.padd_empty_with_br !== true) {\n textNode = new Node$1('#text', 3);\n textNode.value = '\\xA0';\n node.replace(textNode);\n }\n }\n }\n });\n }\n parser.addAttributeFilter('href', function (nodes) {\n var i = nodes.length, node;\n var appendRel = function (rel) {\n var parts = rel.split(' ').filter(function (p) {\n return p.length > 0;\n });\n return parts.concat(['noopener']).sort().join(' ');\n };\n var addNoOpener = function (rel) {\n var newRel = rel ? Tools.trim(rel) : '';\n if (!/\\b(noopener)\\b/g.test(newRel)) {\n return appendRel(newRel);\n } else {\n return newRel;\n }\n };\n if (!settings.allow_unsafe_link_target) {\n while (i--) {\n node = nodes[i];\n if (node.name === 'a' && node.attr('target') === '_blank') {\n node.attr('rel', addNoOpener(node.attr('rel')));\n }\n }\n }\n });\n if (!settings.allow_html_in_named_anchor) {\n parser.addAttributeFilter('id,name', function (nodes) {\n var i = nodes.length, sibling, prevSibling, parent, node;\n while (i--) {\n node = nodes[i];\n if (node.name === 'a' && node.firstChild && !node.attr('href')) {\n parent = node.parent;\n sibling = node.lastChild;\n do {\n prevSibling = sibling.prev;\n parent.insert(sibling, node);\n sibling = prevSibling;\n } while (sibling);\n }\n }\n });\n }\n if (settings.fix_list_elements) {\n parser.addNodeFilter('ul,ol', function (nodes) {\n var i = nodes.length, node, parentNode;\n while (i--) {\n node = nodes[i];\n parentNode = node.parent;\n if (parentNode.name === 'ul' || parentNode.name === 'ol') {\n if (node.prev && node.prev.name === 'li') {\n node.prev.append(node);\n } else {\n var li = new Node$1('li', 1);\n li.attr('style', 'list-style-type: none');\n node.wrap(li);\n }\n }\n }\n });\n }\n if (settings.validate && schema.getValidClasses()) {\n parser.addAttributeFilter('class', function (nodes) {\n var i = nodes.length, node, classList, ci, className, classValue;\n var validClasses = schema.getValidClasses();\n var validClassesMap, valid;\n while (i--) {\n node = nodes[i];\n classList = node.attr('class').split(' ');\n classValue = '';\n for (ci = 0; ci < classList.length; ci++) {\n className = classList[ci];\n valid = false;\n validClassesMap = validClasses['*'];\n if (validClassesMap && validClassesMap[className]) {\n valid = true;\n }\n validClassesMap = validClasses[node.name];\n if (!valid && validClassesMap && validClassesMap[className]) {\n valid = true;\n }\n if (valid) {\n if (classValue) {\n classValue += ' ';\n }\n classValue += className;\n }\n }\n if (!classValue.length) {\n classValue = null;\n }\n node.attr('class', classValue);\n }\n });\n }\n };\n\n var makeMap$4 = Tools.makeMap, each$i = Tools.each, explode$3 = Tools.explode, extend$3 = Tools.extend;\n function DomParser (settings, schema) {\n if (schema === void 0) {\n schema = Schema();\n }\n var nodeFilters = {};\n var attributeFilters = [];\n var matchedNodes = {};\n var matchedAttributes = {};\n settings = settings || {};\n settings.validate = 'validate' in settings ? settings.validate : true;\n settings.root_name = settings.root_name || 'body';\n var fixInvalidChildren = function (nodes) {\n var ni, node, parent, parents, newParent, currentNode, tempNode, childNode, i;\n var nonEmptyElements, whitespaceElements, nonSplitableElements, textBlockElements, specialElements, sibling, nextNode;\n nonSplitableElements = makeMap$4('tr,td,th,tbody,thead,tfoot,table');\n nonEmptyElements = schema.getNonEmptyElements();\n whitespaceElements = schema.getWhiteSpaceElements();\n textBlockElements = schema.getTextBlockElements();\n specialElements = schema.getSpecialElements();\n for (ni = 0; ni < nodes.length; ni++) {\n node = nodes[ni];\n if (!node.parent || node.fixed) {\n continue;\n }\n if (textBlockElements[node.name] && node.parent.name === 'li') {\n sibling = node.next;\n while (sibling) {\n if (textBlockElements[sibling.name]) {\n sibling.name = 'li';\n sibling.fixed = true;\n node.parent.insert(sibling, node.parent);\n } else {\n break;\n }\n sibling = sibling.next;\n }\n node.unwrap(node);\n continue;\n }\n parents = [node];\n for (parent = node.parent; parent && !schema.isValidChild(parent.name, node.name) && !nonSplitableElements[parent.name]; parent = parent.parent) {\n parents.push(parent);\n }\n if (parent && parents.length > 1) {\n parents.reverse();\n newParent = currentNode = filterNode(parents[0].clone());\n for (i = 0; i < parents.length - 1; i++) {\n if (schema.isValidChild(currentNode.name, parents[i].name)) {\n tempNode = filterNode(parents[i].clone());\n currentNode.append(tempNode);\n } else {\n tempNode = currentNode;\n }\n for (childNode = parents[i].firstChild; childNode && childNode !== parents[i + 1];) {\n nextNode = childNode.next;\n tempNode.append(childNode);\n childNode = nextNode;\n }\n currentNode = tempNode;\n }\n if (!isEmpty$2(schema, nonEmptyElements, whitespaceElements, newParent)) {\n parent.insert(newParent, parents[0], true);\n parent.insert(node, newParent);\n } else {\n parent.insert(node, parents[0], true);\n }\n parent = parents[0];\n if (isEmpty$2(schema, nonEmptyElements, whitespaceElements, parent) || hasOnlyChild(parent, 'br')) {\n parent.empty().remove();\n }\n } else if (node.parent) {\n if (node.name === 'li') {\n sibling = node.prev;\n if (sibling && (sibling.name === 'ul' || sibling.name === 'ul')) {\n sibling.append(node);\n continue;\n }\n sibling = node.next;\n if (sibling && (sibling.name === 'ul' || sibling.name === 'ul')) {\n sibling.insert(node, sibling.firstChild, true);\n continue;\n }\n node.wrap(filterNode(new Node$1('ul', 1)));\n continue;\n }\n if (schema.isValidChild(node.parent.name, 'div') && schema.isValidChild('div', node.name)) {\n node.wrap(filterNode(new Node$1('div', 1)));\n } else {\n if (specialElements[node.name]) {\n node.empty().remove();\n } else {\n node.unwrap();\n }\n }\n }\n }\n };\n var filterNode = function (node) {\n var i, name, list;\n name = node.name;\n if (name in nodeFilters) {\n list = matchedNodes[name];\n if (list) {\n list.push(node);\n } else {\n matchedNodes[name] = [node];\n }\n }\n i = attributeFilters.length;\n while (i--) {\n name = attributeFilters[i].name;\n if (name in node.attributes.map) {\n list = matchedAttributes[name];\n if (list) {\n list.push(node);\n } else {\n matchedAttributes[name] = [node];\n }\n }\n }\n return node;\n };\n var addNodeFilter = function (name, callback) {\n each$i(explode$3(name), function (name) {\n var list = nodeFilters[name];\n if (!list) {\n nodeFilters[name] = list = [];\n }\n list.push(callback);\n });\n };\n var getNodeFilters = function () {\n var out = [];\n for (var name in nodeFilters) {\n if (nodeFilters.hasOwnProperty(name)) {\n out.push({\n name: name,\n callbacks: nodeFilters[name]\n });\n }\n }\n return out;\n };\n var addAttributeFilter = function (name, callback) {\n each$i(explode$3(name), function (name) {\n var i;\n for (i = 0; i < attributeFilters.length; i++) {\n if (attributeFilters[i].name === name) {\n attributeFilters[i].callbacks.push(callback);\n return;\n }\n }\n attributeFilters.push({\n name: name,\n callbacks: [callback]\n });\n });\n };\n var getAttributeFilters = function () {\n return [].concat(attributeFilters);\n };\n var parse = function (html, args) {\n var parser, nodes, i, l, fi, fl, list, name;\n var blockElements;\n var invalidChildren = [];\n var isInWhiteSpacePreservedElement;\n var node;\n args = args || {};\n matchedNodes = {};\n matchedAttributes = {};\n blockElements = extend$3(makeMap$4('script,style,head,html,body,title,meta,param'), schema.getBlockElements());\n var nonEmptyElements = schema.getNonEmptyElements();\n var children = schema.children;\n var validate = settings.validate;\n var rootBlockName = 'forced_root_block' in args ? args.forced_root_block : settings.forced_root_block;\n var whiteSpaceElements = schema.getWhiteSpaceElements();\n var startWhiteSpaceRegExp = /^[ \\t\\r\\n]+/;\n var endWhiteSpaceRegExp = /[ \\t\\r\\n]+$/;\n var allWhiteSpaceRegExp = /[ \\t\\r\\n]+/g;\n var isAllWhiteSpaceRegExp = /^[ \\t\\r\\n]+$/;\n isInWhiteSpacePreservedElement = whiteSpaceElements.hasOwnProperty(args.context) || whiteSpaceElements.hasOwnProperty(settings.root_name);\n var addRootBlocks = function () {\n var node = rootNode.firstChild, next, rootBlockNode;\n var trim = function (rootBlockNode) {\n if (rootBlockNode) {\n node = rootBlockNode.firstChild;\n if (node && node.type === 3) {\n node.value = node.value.replace(startWhiteSpaceRegExp, '');\n }\n node = rootBlockNode.lastChild;\n if (node && node.type === 3) {\n node.value = node.value.replace(endWhiteSpaceRegExp, '');\n }\n }\n };\n if (!schema.isValidChild(rootNode.name, rootBlockName.toLowerCase())) {\n return;\n }\n while (node) {\n next = node.next;\n if (node.type === 3 || node.type === 1 && node.name !== 'p' && !blockElements[node.name] && !node.attr('data-mce-type')) {\n if (!rootBlockNode) {\n rootBlockNode = createNode(rootBlockName, 1);\n rootBlockNode.attr(settings.forced_root_block_attrs);\n rootNode.insert(rootBlockNode, node);\n rootBlockNode.append(node);\n } else {\n rootBlockNode.append(node);\n }\n } else {\n trim(rootBlockNode);\n rootBlockNode = null;\n }\n node = next;\n }\n trim(rootBlockNode);\n };\n var createNode = function (name, type) {\n var node = new Node$1(name, type);\n var list;\n if (name in nodeFilters) {\n list = matchedNodes[name];\n if (list) {\n list.push(node);\n } else {\n matchedNodes[name] = [node];\n }\n }\n return node;\n };\n var removeWhitespaceBefore = function (node) {\n var textNode, textNodeNext, textVal, sibling;\n var blockElements = schema.getBlockElements();\n for (textNode = node.prev; textNode && textNode.type === 3;) {\n textVal = textNode.value.replace(endWhiteSpaceRegExp, '');\n if (textVal.length > 0) {\n textNode.value = textVal;\n return;\n }\n textNodeNext = textNode.next;\n if (textNodeNext) {\n if (textNodeNext.type === 3 && textNodeNext.value.length) {\n textNode = textNode.prev;\n continue;\n }\n if (!blockElements[textNodeNext.name] && textNodeNext.name !== 'script' && textNodeNext.name !== 'style') {\n textNode = textNode.prev;\n continue;\n }\n }\n sibling = textNode.prev;\n textNode.remove();\n textNode = sibling;\n }\n };\n var cloneAndExcludeBlocks = function (input) {\n var name;\n var output = {};\n for (name in input) {\n if (name !== 'li' && name !== 'p') {\n output[name] = input[name];\n }\n }\n return output;\n };\n parser = SaxParser$1({\n validate: validate,\n allow_script_urls: settings.allow_script_urls,\n allow_conditional_comments: settings.allow_conditional_comments,\n self_closing_elements: cloneAndExcludeBlocks(schema.getSelfClosingElements()),\n cdata: function (text) {\n node.append(createNode('#cdata', 4)).value = text;\n },\n text: function (text, raw) {\n var textNode;\n if (!isInWhiteSpacePreservedElement) {\n text = text.replace(allWhiteSpaceRegExp, ' ');\n if (isLineBreakNode(node.lastChild, blockElements)) {\n text = text.replace(startWhiteSpaceRegExp, '');\n }\n }\n if (text.length !== 0) {\n textNode = createNode('#text', 3);\n textNode.raw = !!raw;\n node.append(textNode).value = text;\n }\n },\n comment: function (text) {\n node.append(createNode('#comment', 8)).value = text;\n },\n pi: function (name, text) {\n node.append(createNode(name, 7)).value = text;\n removeWhitespaceBefore(node);\n },\n doctype: function (text) {\n var newNode;\n newNode = node.append(createNode('#doctype', 10));\n newNode.value = text;\n removeWhitespaceBefore(node);\n },\n start: function (name, attrs, empty) {\n var newNode, attrFiltersLen, elementRule, attrName, parent;\n elementRule = validate ? schema.getElementRule(name) : {};\n if (elementRule) {\n newNode = createNode(elementRule.outputName || name, 1);\n newNode.attributes = attrs;\n newNode.shortEnded = empty;\n node.append(newNode);\n parent = children[node.name];\n if (parent && children[newNode.name] && !parent[newNode.name]) {\n invalidChildren.push(newNode);\n }\n attrFiltersLen = attributeFilters.length;\n while (attrFiltersLen--) {\n attrName = attributeFilters[attrFiltersLen].name;\n if (attrName in attrs.map) {\n list = matchedAttributes[attrName];\n if (list) {\n list.push(newNode);\n } else {\n matchedAttributes[attrName] = [newNode];\n }\n }\n }\n if (blockElements[name]) {\n removeWhitespaceBefore(newNode);\n }\n if (!empty) {\n node = newNode;\n }\n if (!isInWhiteSpacePreservedElement && whiteSpaceElements[name]) {\n isInWhiteSpacePreservedElement = true;\n }\n }\n },\n end: function (name) {\n var textNode, elementRule, text, sibling, tempNode;\n elementRule = validate ? schema.getElementRule(name) : {};\n if (elementRule) {\n if (blockElements[name]) {\n if (!isInWhiteSpacePreservedElement) {\n textNode = node.firstChild;\n if (textNode && textNode.type === 3) {\n text = textNode.value.replace(startWhiteSpaceRegExp, '');\n if (text.length > 0) {\n textNode.value = text;\n textNode = textNode.next;\n } else {\n sibling = textNode.next;\n textNode.remove();\n textNode = sibling;\n while (textNode && textNode.type === 3) {\n text = textNode.value;\n sibling = textNode.next;\n if (text.length === 0 || isAllWhiteSpaceRegExp.test(text)) {\n textNode.remove();\n textNode = sibling;\n }\n textNode = sibling;\n }\n }\n }\n textNode = node.lastChild;\n if (textNode && textNode.type === 3) {\n text = textNode.value.replace(endWhiteSpaceRegExp, '');\n if (text.length > 0) {\n textNode.value = text;\n textNode = textNode.prev;\n } else {\n sibling = textNode.prev;\n textNode.remove();\n textNode = sibling;\n while (textNode && textNode.type === 3) {\n text = textNode.value;\n sibling = textNode.prev;\n if (text.length === 0 || isAllWhiteSpaceRegExp.test(text)) {\n textNode.remove();\n textNode = sibling;\n }\n textNode = sibling;\n }\n }\n }\n }\n }\n if (isInWhiteSpacePreservedElement && whiteSpaceElements[name]) {\n isInWhiteSpacePreservedElement = false;\n }\n if (elementRule.removeEmpty && isEmpty$2(schema, nonEmptyElements, whiteSpaceElements, node)) {\n if (!node.attributes.map.name && !node.attr('id')) {\n tempNode = node.parent;\n if (blockElements[node.name]) {\n node.empty().remove();\n } else {\n node.unwrap();\n }\n node = tempNode;\n return;\n }\n }\n if (elementRule.paddEmpty && (isPaddedWithNbsp(node) || isEmpty$2(schema, nonEmptyElements, whiteSpaceElements, node))) {\n paddEmptyNode(settings, args, blockElements, node);\n }\n node = node.parent;\n }\n }\n }, schema);\n var rootNode = node = new Node$1(args.context || settings.root_name, 11);\n parser.parse(html);\n if (validate && invalidChildren.length) {\n if (!args.context) {\n fixInvalidChildren(invalidChildren);\n } else {\n args.invalid = true;\n }\n }\n if (rootBlockName && (rootNode.name === 'body' || args.isRootContent)) {\n addRootBlocks();\n }\n if (!args.invalid) {\n for (name in matchedNodes) {\n list = nodeFilters[name];\n nodes = matchedNodes[name];\n fi = nodes.length;\n while (fi--) {\n if (!nodes[fi].parent) {\n nodes.splice(fi, 1);\n }\n }\n for (i = 0, l = list.length; i < l; i++) {\n list[i](nodes, name, args);\n }\n }\n for (i = 0, l = attributeFilters.length; i < l; i++) {\n list = attributeFilters[i];\n if (list.name in matchedAttributes) {\n nodes = matchedAttributes[list.name];\n fi = nodes.length;\n while (fi--) {\n if (!nodes[fi].parent) {\n nodes.splice(fi, 1);\n }\n }\n for (fi = 0, fl = list.callbacks.length; fi < fl; fi++) {\n list.callbacks[fi](nodes, list.name, args);\n }\n }\n }\n }\n return rootNode;\n };\n var exports = {\n schema: schema,\n addAttributeFilter: addAttributeFilter,\n getAttributeFilters: getAttributeFilters,\n addNodeFilter: addNodeFilter,\n getNodeFilters: getNodeFilters,\n filterNode: filterNode,\n parse: parse\n };\n register$2(exports, settings);\n LegacyFilter.register(exports, settings);\n return exports;\n }\n\n var addTempAttr = function (htmlParser, tempAttrs, name) {\n if (Tools.inArray(tempAttrs, name) === -1) {\n htmlParser.addAttributeFilter(name, function (nodes, name) {\n var i = nodes.length;\n while (i--) {\n nodes[i].attr(name, null);\n }\n });\n tempAttrs.push(name);\n }\n };\n var postProcess$1 = function (editor, args, content) {\n if (!args.no_events && editor) {\n var outArgs = Events.firePostProcess(editor, merge(args, { content: content }));\n return outArgs.content;\n } else {\n return content;\n }\n };\n var getHtmlFromNode = function (dom, node, args) {\n var html = Zwsp.trim(args.getInner ? node.innerHTML : dom.getOuterHTML(node));\n return args.selection || isWsPreserveElement(Element.fromDom(node)) ? html : Tools.trim(html);\n };\n var parseHtml = function (htmlParser, html, args) {\n var parserArgs = args.selection ? merge({ forced_root_block: false }, args) : args;\n var rootNode = htmlParser.parse(html, parserArgs);\n DomSerializerFilters.trimTrailingBr(rootNode);\n return rootNode;\n };\n var serializeNode = function (settings, schema, node) {\n var htmlSerializer = HtmlSerializer(settings, schema);\n return htmlSerializer.serialize(node);\n };\n var toHtml = function (editor, settings, schema, rootNode, args) {\n var content = serializeNode(settings, schema, rootNode);\n return postProcess$1(editor, args, content);\n };\n function DomSerializer (settings, editor) {\n var dom, schema, htmlParser;\n var tempAttrs = ['data-mce-selected'];\n dom = editor && editor.dom ? editor.dom : DOMUtils$1.DOM;\n schema = editor && editor.schema ? editor.schema : Schema(settings);\n settings.entity_encoding = settings.entity_encoding || 'named';\n settings.remove_trailing_brs = 'remove_trailing_brs' in settings ? settings.remove_trailing_brs : true;\n htmlParser = DomParser(settings, schema);\n DomSerializerFilters.register(htmlParser, settings, dom);\n var serialize = function (node, parserArgs) {\n var args = merge({ format: 'html' }, parserArgs ? parserArgs : {});\n var targetNode = DomSerializerPreProcess.process(editor, node, args);\n var html = getHtmlFromNode(dom, targetNode, args);\n var rootNode = parseHtml(htmlParser, html, args);\n return args.format === 'tree' ? rootNode : toHtml(editor, settings, schema, rootNode, args);\n };\n return {\n schema: schema,\n addNodeFilter: htmlParser.addNodeFilter,\n addAttributeFilter: htmlParser.addAttributeFilter,\n serialize: serialize,\n addRules: function (rules) {\n schema.addValidElements(rules);\n },\n setRules: function (rules) {\n schema.setValidElements(rules);\n },\n addTempAttr: curry(addTempAttr, htmlParser, tempAttrs),\n getTempAttrs: function () {\n return tempAttrs;\n }\n };\n }\n\n function DomSerializer$1 (settings, editor) {\n var domSerializer = DomSerializer(settings, editor);\n return {\n schema: domSerializer.schema,\n addNodeFilter: domSerializer.addNodeFilter,\n addAttributeFilter: domSerializer.addAttributeFilter,\n serialize: domSerializer.serialize,\n addRules: domSerializer.addRules,\n setRules: domSerializer.setRules,\n addTempAttr: domSerializer.addTempAttr,\n getTempAttrs: domSerializer.getTempAttrs\n };\n }\n\n function BookmarkManager(selection) {\n return {\n getBookmark: curry(Bookmarks.getBookmark, selection),\n moveToBookmark: curry(Bookmarks.moveToBookmark, selection)\n };\n }\n (function (BookmarkManager) {\n BookmarkManager.isBookmarkNode = Bookmarks.isBookmarkNode;\n }(BookmarkManager || (BookmarkManager = {})));\n var BookmarkManager$1 = BookmarkManager;\n\n var isContentEditableFalse$a = NodeType.isContentEditableFalse;\n var isContentEditableTrue$5 = NodeType.isContentEditableTrue;\n var getContentEditableRoot$2 = function (root, node) {\n while (node && node !== root) {\n if (isContentEditableTrue$5(node) || isContentEditableFalse$a(node)) {\n return node;\n }\n node = node.parentNode;\n }\n return null;\n };\n var ControlSelection = function (selection, editor) {\n var dom = editor.dom, each = Tools.each;\n var selectedElm, selectedElmGhost, resizeHelper, resizeHandles, selectedHandle;\n var startX, startY, selectedElmX, selectedElmY, startW, startH, ratio, resizeStarted;\n var width, height;\n var editableDoc = editor.getDoc(), rootDocument = domGlobals.document;\n var abs = Math.abs, round = Math.round, rootElement = editor.getBody();\n var startScrollWidth, startScrollHeight;\n resizeHandles = {\n nw: [\n 0,\n 0,\n -1,\n -1\n ],\n ne: [\n 1,\n 0,\n 1,\n -1\n ],\n se: [\n 1,\n 1,\n 1,\n 1\n ],\n sw: [\n 0,\n 1,\n -1,\n 1\n ]\n };\n var rootClass = '.mce-content-body';\n editor.contentStyles.push(rootClass + ' div.mce-resizehandle {' + 'position: absolute;' + 'border: 1px solid black;' + 'box-sizing: content-box;' + 'background: #FFF;' + 'width: 7px;' + 'height: 7px;' + 'z-index: 10000' + '}' + rootClass + ' .mce-resizehandle:hover {' + 'background: #000' + '}' + rootClass + ' img[data-mce-selected],' + rootClass + ' hr[data-mce-selected] {' + 'outline: 1px solid black;' + 'resize: none' + '}' + rootClass + ' .mce-clonedresizable {' + 'position: absolute;' + (Env.gecko ? '' : 'outline: 1px dashed black;') + 'opacity: .5;' + 'filter: alpha(opacity=50);' + 'z-index: 10000' + '}' + rootClass + ' .mce-resize-helper {' + 'background: #555;' + 'background: rgba(0,0,0,0.75);' + 'border-radius: 3px;' + 'border: 1px;' + 'color: white;' + 'display: none;' + 'font-family: sans-serif;' + 'font-size: 12px;' + 'white-space: nowrap;' + 'line-height: 14px;' + 'margin: 5px 10px;' + 'padding: 5px;' + 'position: absolute;' + 'z-index: 10001' + '}');\n var isImage = function (elm) {\n return elm && (elm.nodeName === 'IMG' || editor.dom.is(elm, 'figure.image'));\n };\n var isEventOnImageOutsideRange = function (evt, range) {\n return isImage(evt.target) && !RangePoint.isXYWithinRange(evt.clientX, evt.clientY, range);\n };\n var contextMenuSelectImage = function (evt) {\n var target = evt.target;\n if (isEventOnImageOutsideRange(evt, editor.selection.getRng()) && !evt.isDefaultPrevented()) {\n editor.selection.select(target);\n }\n };\n var getResizeTarget = function (elm) {\n return editor.dom.is(elm, 'figure.image') ? elm.querySelector('img') : elm;\n };\n var isResizable = function (elm) {\n var selector = editor.settings.object_resizing;\n if (selector === false || Env.iOS) {\n return false;\n }\n if (typeof selector !== 'string') {\n selector = 'table,img,figure.image,div';\n }\n if (elm.getAttribute('data-mce-resize') === 'false') {\n return false;\n }\n if (elm === editor.getBody()) {\n return false;\n }\n return is$1(Element.fromDom(elm), selector);\n };\n var resizeGhostElement = function (e) {\n var deltaX, deltaY, proportional;\n var resizeHelperX, resizeHelperY;\n deltaX = e.screenX - startX;\n deltaY = e.screenY - startY;\n width = deltaX * selectedHandle[2] + startW;\n height = deltaY * selectedHandle[3] + startH;\n width = width < 5 ? 5 : width;\n height = height < 5 ? 5 : height;\n if (isImage(selectedElm) && editor.settings.resize_img_proportional !== false) {\n proportional = !VK.modifierPressed(e);\n } else {\n proportional = VK.modifierPressed(e) || isImage(selectedElm) && selectedHandle[2] * selectedHandle[3] !== 0;\n }\n if (proportional) {\n if (abs(deltaX) > abs(deltaY)) {\n height = round(width * ratio);\n width = round(height / ratio);\n } else {\n width = round(height / ratio);\n height = round(width * ratio);\n }\n }\n dom.setStyles(getResizeTarget(selectedElmGhost), {\n width: width,\n height: height\n });\n resizeHelperX = selectedHandle.startPos.x + deltaX;\n resizeHelperY = selectedHandle.startPos.y + deltaY;\n resizeHelperX = resizeHelperX > 0 ? resizeHelperX : 0;\n resizeHelperY = resizeHelperY > 0 ? resizeHelperY : 0;\n dom.setStyles(resizeHelper, {\n left: resizeHelperX,\n top: resizeHelperY,\n display: 'block'\n });\n resizeHelper.innerHTML = width + ' × ' + height;\n if (selectedHandle[2] < 0 && selectedElmGhost.clientWidth <= width) {\n dom.setStyle(selectedElmGhost, 'left', selectedElmX + (startW - width));\n }\n if (selectedHandle[3] < 0 && selectedElmGhost.clientHeight <= height) {\n dom.setStyle(selectedElmGhost, 'top', selectedElmY + (startH - height));\n }\n deltaX = rootElement.scrollWidth - startScrollWidth;\n deltaY = rootElement.scrollHeight - startScrollHeight;\n if (deltaX + deltaY !== 0) {\n dom.setStyles(resizeHelper, {\n left: resizeHelperX - deltaX,\n top: resizeHelperY - deltaY\n });\n }\n if (!resizeStarted) {\n Events.fireObjectResizeStart(editor, selectedElm, startW, startH);\n resizeStarted = true;\n }\n };\n var endGhostResize = function () {\n resizeStarted = false;\n var setSizeProp = function (name, value) {\n if (value) {\n if (selectedElm.style[name] || !editor.schema.isValid(selectedElm.nodeName.toLowerCase(), name)) {\n dom.setStyle(getResizeTarget(selectedElm), name, value);\n } else {\n dom.setAttrib(getResizeTarget(selectedElm), name, value);\n }\n }\n };\n setSizeProp('width', width);\n setSizeProp('height', height);\n dom.unbind(editableDoc, 'mousemove', resizeGhostElement);\n dom.unbind(editableDoc, 'mouseup', endGhostResize);\n if (rootDocument !== editableDoc) {\n dom.unbind(rootDocument, 'mousemove', resizeGhostElement);\n dom.unbind(rootDocument, 'mouseup', endGhostResize);\n }\n dom.remove(selectedElmGhost);\n dom.remove(resizeHelper);\n showResizeRect(selectedElm);\n Events.fireObjectResized(editor, selectedElm, width, height);\n dom.setAttrib(selectedElm, 'style', dom.getAttrib(selectedElm, 'style'));\n editor.nodeChanged();\n };\n var showResizeRect = function (targetElm) {\n var position, targetWidth, targetHeight, e, rect;\n hideResizeRect();\n unbindResizeHandleEvents();\n position = dom.getPos(targetElm, rootElement);\n selectedElmX = position.x;\n selectedElmY = position.y;\n rect = targetElm.getBoundingClientRect();\n targetWidth = rect.width || rect.right - rect.left;\n targetHeight = rect.height || rect.bottom - rect.top;\n if (selectedElm !== targetElm) {\n selectedElm = targetElm;\n width = height = 0;\n }\n e = editor.fire('ObjectSelected', { target: targetElm });\n if (isResizable(targetElm) && !e.isDefaultPrevented()) {\n each(resizeHandles, function (handle, name) {\n var handleElm;\n var startDrag = function (e) {\n startX = e.screenX;\n startY = e.screenY;\n startW = getResizeTarget(selectedElm).clientWidth;\n startH = getResizeTarget(selectedElm).clientHeight;\n ratio = startH / startW;\n selectedHandle = handle;\n handle.startPos = {\n x: targetWidth * handle[0] + selectedElmX,\n y: targetHeight * handle[1] + selectedElmY\n };\n startScrollWidth = rootElement.scrollWidth;\n startScrollHeight = rootElement.scrollHeight;\n selectedElmGhost = selectedElm.cloneNode(true);\n dom.addClass(selectedElmGhost, 'mce-clonedresizable');\n dom.setAttrib(selectedElmGhost, 'data-mce-bogus', 'all');\n selectedElmGhost.contentEditable = false;\n selectedElmGhost.unSelectabe = true;\n dom.setStyles(selectedElmGhost, {\n left: selectedElmX,\n top: selectedElmY,\n margin: 0\n });\n selectedElmGhost.removeAttribute('data-mce-selected');\n rootElement.appendChild(selectedElmGhost);\n dom.bind(editableDoc, 'mousemove', resizeGhostElement);\n dom.bind(editableDoc, 'mouseup', endGhostResize);\n if (rootDocument !== editableDoc) {\n dom.bind(rootDocument, 'mousemove', resizeGhostElement);\n dom.bind(rootDocument, 'mouseup', endGhostResize);\n }\n resizeHelper = dom.add(rootElement, 'div', {\n 'class': 'mce-resize-helper',\n 'data-mce-bogus': 'all'\n }, startW + ' × ' + startH);\n };\n handleElm = dom.get('mceResizeHandle' + name);\n if (handleElm) {\n dom.remove(handleElm);\n }\n handleElm = dom.add(rootElement, 'div', {\n 'id': 'mceResizeHandle' + name,\n 'data-mce-bogus': 'all',\n 'class': 'mce-resizehandle',\n 'unselectable': true,\n 'style': 'cursor:' + name + '-resize; margin:0; padding:0'\n });\n if (Env.ie === 11) {\n handleElm.contentEditable = false;\n }\n dom.bind(handleElm, 'mousedown', function (e) {\n e.stopImmediatePropagation();\n e.preventDefault();\n startDrag(e);\n });\n handle.elm = handleElm;\n dom.setStyles(handleElm, {\n left: targetWidth * handle[0] + selectedElmX - handleElm.offsetWidth / 2,\n top: targetHeight * handle[1] + selectedElmY - handleElm.offsetHeight / 2\n });\n });\n } else {\n hideResizeRect();\n }\n selectedElm.setAttribute('data-mce-selected', '1');\n };\n var hideResizeRect = function () {\n var name, handleElm;\n unbindResizeHandleEvents();\n if (selectedElm) {\n selectedElm.removeAttribute('data-mce-selected');\n }\n for (name in resizeHandles) {\n handleElm = dom.get('mceResizeHandle' + name);\n if (handleElm) {\n dom.unbind(handleElm);\n dom.remove(handleElm);\n }\n }\n };\n var updateResizeRect = function (e) {\n var startElm, controlElm;\n var isChildOrEqual = function (node, parent) {\n if (node) {\n do {\n if (node === parent) {\n return true;\n }\n } while (node = node.parentNode);\n }\n };\n if (resizeStarted || editor.removed) {\n return;\n }\n each(dom.select('img[data-mce-selected],hr[data-mce-selected]'), function (img) {\n img.removeAttribute('data-mce-selected');\n });\n controlElm = e.type === 'mousedown' ? e.target : selection.getNode();\n controlElm = dom.$(controlElm).closest('table,img,figure.image,hr')[0];\n if (isChildOrEqual(controlElm, rootElement)) {\n disableGeckoResize();\n startElm = selection.getStart(true);\n if (isChildOrEqual(startElm, controlElm) && isChildOrEqual(selection.getEnd(true), controlElm)) {\n showResizeRect(controlElm);\n return;\n }\n }\n hideResizeRect();\n };\n var isWithinContentEditableFalse = function (elm) {\n return isContentEditableFalse$a(getContentEditableRoot$2(editor.getBody(), elm));\n };\n var unbindResizeHandleEvents = function () {\n for (var name in resizeHandles) {\n var handle = resizeHandles[name];\n if (handle.elm) {\n dom.unbind(handle.elm);\n delete handle.elm;\n }\n }\n };\n var disableGeckoResize = function () {\n try {\n editor.getDoc().execCommand('enableObjectResizing', false, false);\n } catch (ex) {\n }\n };\n editor.on('init', function () {\n disableGeckoResize();\n if (Env.ie && Env.ie >= 11) {\n editor.on('mousedown click', function (e) {\n var target = e.target, nodeName = target.nodeName;\n if (!resizeStarted && /^(TABLE|IMG|HR)$/.test(nodeName) && !isWithinContentEditableFalse(target)) {\n if (e.button !== 2) {\n editor.selection.select(target, nodeName === 'TABLE');\n }\n if (e.type === 'mousedown') {\n editor.nodeChanged();\n }\n }\n });\n editor.dom.bind(rootElement, 'mscontrolselect', function (e) {\n var delayedSelect = function (node) {\n Delay.setEditorTimeout(editor, function () {\n editor.selection.select(node);\n });\n };\n if (isWithinContentEditableFalse(e.target)) {\n e.preventDefault();\n delayedSelect(e.target);\n return;\n }\n if (/^(TABLE|IMG|HR)$/.test(e.target.nodeName)) {\n e.preventDefault();\n if (e.target.tagName === 'IMG') {\n delayedSelect(e.target);\n }\n }\n });\n }\n var throttledUpdateResizeRect = Delay.throttle(function (e) {\n if (!editor.composing) {\n updateResizeRect(e);\n }\n });\n editor.on('nodechange ResizeEditor ResizeWindow drop FullscreenStateChanged', throttledUpdateResizeRect);\n editor.on('keyup compositionend', function (e) {\n if (selectedElm && selectedElm.nodeName === 'TABLE') {\n throttledUpdateResizeRect(e);\n }\n });\n editor.on('hide blur', hideResizeRect);\n editor.on('contextmenu', contextMenuSelectImage);\n });\n editor.on('remove', unbindResizeHandleEvents);\n var destroy = function () {\n selectedElm = selectedElmGhost = null;\n };\n return {\n isResizable: isResizable,\n showResizeRect: showResizeRect,\n hideResizeRect: hideResizeRect,\n updateResizeRect: updateResizeRect,\n destroy: destroy\n };\n };\n\n var hasCeProperty = function (node) {\n return NodeType.isContentEditableTrue(node) || NodeType.isContentEditableFalse(node);\n };\n var findParent$1 = function (node, rootNode, predicate) {\n while (node && node !== rootNode) {\n if (predicate(node)) {\n return node;\n }\n node = node.parentNode;\n }\n return null;\n };\n var findClosestIeRange = function (clientX, clientY, doc) {\n var element, rng, rects;\n element = doc.elementFromPoint(clientX, clientY);\n rng = doc.body.createTextRange();\n if (!element || element.tagName === 'HTML') {\n element = doc.body;\n }\n rng.moveToElementText(element);\n rects = Tools.toArray(rng.getClientRects());\n rects = rects.sort(function (a, b) {\n a = Math.abs(Math.max(a.top - clientY, a.bottom - clientY));\n b = Math.abs(Math.max(b.top - clientY, b.bottom - clientY));\n return a - b;\n });\n if (rects.length > 0) {\n clientY = (rects[0].bottom + rects[0].top) / 2;\n try {\n rng.moveToPoint(clientX, clientY);\n rng.collapse(true);\n return rng;\n } catch (ex) {\n }\n }\n return null;\n };\n var moveOutOfContentEditableFalse = function (rng, rootNode) {\n var parentElement = rng && rng.parentElement ? rng.parentElement() : null;\n return NodeType.isContentEditableFalse(findParent$1(parentElement, rootNode, hasCeProperty)) ? null : rng;\n };\n var fromPoint$1 = function (clientX, clientY, doc) {\n var rng, point;\n var pointDoc = doc;\n if (pointDoc.caretPositionFromPoint) {\n point = pointDoc.caretPositionFromPoint(clientX, clientY);\n if (point) {\n rng = doc.createRange();\n rng.setStart(point.offsetNode, point.offset);\n rng.collapse(true);\n }\n } else if (doc.caretRangeFromPoint) {\n rng = doc.caretRangeFromPoint(clientX, clientY);\n } else if (pointDoc.body.createTextRange) {\n rng = pointDoc.body.createTextRange();\n try {\n rng.moveToPoint(clientX, clientY);\n rng.collapse(true);\n } catch (ex) {\n rng = findClosestIeRange(clientX, clientY, doc);\n }\n return moveOutOfContentEditableFalse(rng, doc.body);\n }\n return rng;\n };\n var CaretRangeFromPoint = { fromPoint: fromPoint$1 };\n\n var processRanges = function (editor, ranges) {\n return map(ranges, function (range) {\n var evt = editor.fire('GetSelectionRange', { range: range });\n return evt.range !== range ? evt.range : range;\n });\n };\n var EventProcessRanges = { processRanges: processRanges };\n\n var fromElements = function (elements, scope) {\n var doc = scope || domGlobals.document;\n var fragment = doc.createDocumentFragment();\n each(elements, function (element) {\n fragment.appendChild(element.dom());\n });\n return Element.fromDom(fragment);\n };\n\n var tableModel = Immutable('element', 'width', 'rows');\n var tableRow = Immutable('element', 'cells');\n var cellPosition = Immutable('x', 'y');\n var getSpan = function (td, key) {\n var value = parseInt(get(td, key), 10);\n return isNaN(value) ? 1 : value;\n };\n var fillout = function (table, x, y, tr, td) {\n var rowspan = getSpan(td, 'rowspan');\n var colspan = getSpan(td, 'colspan');\n var rows = table.rows();\n for (var y2 = y; y2 < y + rowspan; y2++) {\n if (!rows[y2]) {\n rows[y2] = tableRow(deep(tr), []);\n }\n for (var x2 = x; x2 < x + colspan; x2++) {\n var cells = rows[y2].cells();\n cells[x2] = y2 === y && x2 === x ? td : shallow(td);\n }\n }\n };\n var cellExists = function (table, x, y) {\n var rows = table.rows();\n var cells = rows[y] ? rows[y].cells() : [];\n return !!cells[x];\n };\n var skipCellsX = function (table, x, y) {\n while (cellExists(table, x, y)) {\n x++;\n }\n return x;\n };\n var getWidth = function (rows) {\n return foldl(rows, function (acc, row) {\n return row.cells().length > acc ? row.cells().length : acc;\n }, 0);\n };\n var findElementPos = function (table, element) {\n var rows = table.rows();\n for (var y = 0; y < rows.length; y++) {\n var cells = rows[y].cells();\n for (var x = 0; x < cells.length; x++) {\n if (eq(cells[x], element)) {\n return Option.some(cellPosition(x, y));\n }\n }\n }\n return Option.none();\n };\n var extractRows = function (table, sx, sy, ex, ey) {\n var newRows = [];\n var rows = table.rows();\n for (var y = sy; y <= ey; y++) {\n var cells = rows[y].cells();\n var slice = sx < ex ? cells.slice(sx, ex + 1) : cells.slice(ex, sx + 1);\n newRows.push(tableRow(rows[y].element(), slice));\n }\n return newRows;\n };\n var subTable = function (table, startPos, endPos) {\n var sx = startPos.x(), sy = startPos.y();\n var ex = endPos.x(), ey = endPos.y();\n var newRows = sy < ey ? extractRows(table, sx, sy, ex, ey) : extractRows(table, sx, ey, ex, sy);\n return tableModel(table.element(), getWidth(newRows), newRows);\n };\n var createDomTable = function (table, rows) {\n var tableElement = shallow(table.element());\n var tableBody = Element.fromTag('tbody');\n append$1(tableBody, rows);\n append(tableElement, tableBody);\n return tableElement;\n };\n var modelRowsToDomRows = function (table) {\n return map(table.rows(), function (row) {\n var cells = map(row.cells(), function (cell) {\n var td = deep(cell);\n remove(td, 'colspan');\n remove(td, 'rowspan');\n return td;\n });\n var tr = shallow(row.element());\n append$1(tr, cells);\n return tr;\n });\n };\n var fromDom$1 = function (tableElm) {\n var table = tableModel(shallow(tableElm), 0, []);\n each(descendants$1(tableElm, 'tr'), function (tr, y) {\n each(descendants$1(tr, 'td,th'), function (td, x) {\n fillout(table, skipCellsX(table, x, y), y, tr, td);\n });\n });\n return tableModel(table.element(), getWidth(table.rows()), table.rows());\n };\n var toDom = function (table) {\n return createDomTable(table, modelRowsToDomRows(table));\n };\n var subsection = function (table, startElement, endElement) {\n return findElementPos(table, startElement).bind(function (startPos) {\n return findElementPos(table, endElement).map(function (endPos) {\n return subTable(table, startPos, endPos);\n });\n });\n };\n var SimpleTableModel = {\n fromDom: fromDom$1,\n toDom: toDom,\n subsection: subsection\n };\n\n var findParentListContainer = function (parents) {\n return find(parents, function (elm) {\n return name(elm) === 'ul' || name(elm) === 'ol';\n });\n };\n var getFullySelectedListWrappers = function (parents, rng) {\n return find(parents, function (elm) {\n return name(elm) === 'li' && hasAllContentsSelected(elm, rng);\n }).fold(constant([]), function (li) {\n return findParentListContainer(parents).map(function (listCont) {\n return [\n Element.fromTag('li'),\n Element.fromTag(name(listCont))\n ];\n }).getOr([]);\n });\n };\n var wrap$3 = function (innerElm, elms) {\n var wrapped = foldl(elms, function (acc, elm) {\n append(elm, acc);\n return elm;\n }, innerElm);\n return elms.length > 0 ? fromElements([wrapped]) : wrapped;\n };\n var directListWrappers = function (commonAnchorContainer) {\n if (isListItem(commonAnchorContainer)) {\n return parent(commonAnchorContainer).filter(isList).fold(constant([]), function (listElm) {\n return [\n commonAnchorContainer,\n listElm\n ];\n });\n } else {\n return isList(commonAnchorContainer) ? [commonAnchorContainer] : [];\n }\n };\n var getWrapElements = function (rootNode, rng) {\n var commonAnchorContainer = Element.fromDom(rng.commonAncestorContainer);\n var parents = Parents.parentsAndSelf(commonAnchorContainer, rootNode);\n var wrapElements = filter(parents, function (elm) {\n return isInline(elm) || isHeading(elm);\n });\n var listWrappers = getFullySelectedListWrappers(parents, rng);\n var allWrappers = wrapElements.concat(listWrappers.length ? listWrappers : directListWrappers(commonAnchorContainer));\n return map(allWrappers, shallow);\n };\n var emptyFragment = function () {\n return fromElements([]);\n };\n var getFragmentFromRange = function (rootNode, rng) {\n return wrap$3(Element.fromDom(rng.cloneContents()), getWrapElements(rootNode, rng));\n };\n var getParentTable = function (rootElm, cell) {\n return ancestor$1(cell, 'table', curry(eq, rootElm));\n };\n var getTableFragment = function (rootNode, selectedTableCells) {\n return getParentTable(rootNode, selectedTableCells[0]).bind(function (tableElm) {\n var firstCell = selectedTableCells[0];\n var lastCell = selectedTableCells[selectedTableCells.length - 1];\n var fullTableModel = SimpleTableModel.fromDom(tableElm);\n return SimpleTableModel.subsection(fullTableModel, firstCell, lastCell).map(function (sectionedTableModel) {\n return fromElements([SimpleTableModel.toDom(sectionedTableModel)]);\n });\n }).getOrThunk(emptyFragment);\n };\n var getSelectionFragment = function (rootNode, ranges) {\n return ranges.length > 0 && ranges[0].collapsed ? emptyFragment() : getFragmentFromRange(rootNode, ranges[0]);\n };\n var read$4 = function (rootNode, ranges) {\n var selectedCells = TableCellSelection.getCellsFromElementOrRanges(ranges, rootNode);\n return selectedCells.length > 0 ? getTableFragment(rootNode, selectedCells) : getSelectionFragment(rootNode, ranges);\n };\n var FragmentReader = { read: read$4 };\n\n var getTextContent = function (editor) {\n return Option.from(editor.selection.getRng()).map(function (rng) {\n var bin = editor.dom.add(editor.getBody(), 'div', {\n 'data-mce-bogus': 'all',\n 'style': 'overflow: hidden; opacity: 0;'\n }, rng.cloneContents());\n var text = Zwsp.trim(bin.innerText);\n editor.dom.remove(bin);\n return text;\n }).getOr('');\n };\n var getHtmlContent = function (editor, args) {\n var rng = editor.selection.getRng(), tmpElm = editor.dom.create('body');\n var sel = editor.selection.getSel();\n var fragment;\n var ranges = EventProcessRanges.processRanges(editor, MultiRange.getRanges(sel));\n fragment = args.contextual ? FragmentReader.read(Element.fromDom(editor.getBody()), ranges).dom() : rng.cloneContents();\n if (fragment) {\n tmpElm.appendChild(fragment);\n }\n return editor.selection.serializer.serialize(tmpElm, args);\n };\n var getContent = function (editor, args) {\n if (args === void 0) {\n args = {};\n }\n args.get = true;\n args.format = args.format || 'html';\n args.selection = true;\n args = editor.fire('BeforeGetContent', args);\n if (args.isDefaultPrevented()) {\n editor.fire('GetContent', args);\n return args.content;\n }\n if (args.format === 'text') {\n return getTextContent(editor);\n } else {\n args.getInner = true;\n var content = getHtmlContent(editor, args);\n if (args.format === 'tree') {\n return content;\n } else {\n args.content = editor.selection.isCollapsed() ? '' : content;\n editor.fire('GetContent', args);\n return args.content;\n }\n }\n };\n var GetSelectionContent = { getContent: getContent };\n\n var setupArgs = function (args, content) {\n return __assign(__assign({ format: 'html' }, args), {\n set: true,\n selection: true,\n content: content\n });\n };\n var cleanContent = function (editor, args) {\n if (args.format !== 'raw') {\n var node = editor.parser.parse(args.content, __assign({\n isRootContent: true,\n forced_root_block: false\n }, args));\n return HtmlSerializer({ validate: editor.validate }, editor.schema).serialize(node);\n } else {\n return args.content;\n }\n };\n var setContent = function (editor, content, args) {\n var contentArgs = setupArgs(args, content);\n var rng = editor.selection.getRng(), caretNode;\n var doc = editor.getDoc();\n var frag, temp;\n if (!contentArgs.no_events) {\n contentArgs = editor.fire('BeforeSetContent', contentArgs);\n if (contentArgs.isDefaultPrevented()) {\n editor.fire('SetContent', contentArgs);\n return;\n }\n }\n content = cleanContent(editor, contentArgs);\n if (rng.insertNode) {\n content += '_';\n if (rng.startContainer === doc && rng.endContainer === doc) {\n doc.body.innerHTML = content;\n } else {\n rng.deleteContents();\n if (doc.body.childNodes.length === 0) {\n doc.body.innerHTML = content;\n } else {\n if (rng.createContextualFragment) {\n rng.insertNode(rng.createContextualFragment(content));\n } else {\n frag = doc.createDocumentFragment();\n temp = doc.createElement('div');\n frag.appendChild(temp);\n temp.outerHTML = content;\n rng.insertNode(frag);\n }\n }\n }\n caretNode = editor.dom.get('__caret');\n rng = doc.createRange();\n rng.setStartBefore(caretNode);\n rng.setEndBefore(caretNode);\n editor.selection.setRng(rng);\n editor.dom.remove('__caret');\n try {\n editor.selection.setRng(rng);\n } catch (ex) {\n }\n } else {\n var anyRng = rng;\n if (anyRng.item) {\n doc.execCommand('Delete', false, null);\n anyRng = editor.selection.getRng();\n }\n if (/^\\s+/.test(content)) {\n anyRng.pasteHTML('_' + content);\n editor.dom.remove('__mce_tmp');\n } else {\n anyRng.pasteHTML(content);\n }\n }\n if (!contentArgs.no_events) {\n editor.fire('SetContent', contentArgs);\n }\n };\n var SetSelectionContent = { setContent: setContent };\n\n var getEndpointElement = function (root, rng, start, real, resolve) {\n var container = start ? rng.startContainer : rng.endContainer;\n var offset = start ? rng.startOffset : rng.endOffset;\n return Option.from(container).map(Element.fromDom).map(function (elm) {\n return !real || !rng.collapsed ? child(elm, resolve(elm, offset)).getOr(elm) : elm;\n }).bind(function (elm) {\n return isElement(elm) ? Option.some(elm) : parent(elm);\n }).map(function (elm) {\n return elm.dom();\n }).getOr(root);\n };\n var getStart$2 = function (root, rng, real) {\n return getEndpointElement(root, rng, true, real, function (elm, offset) {\n return Math.min(childNodesCount(elm), offset);\n });\n };\n var getEnd = function (root, rng, real) {\n return getEndpointElement(root, rng, false, real, function (elm, offset) {\n return offset > 0 ? offset - 1 : offset;\n });\n };\n var skipEmptyTextNodes = function (node, forwards) {\n var orig = node;\n while (node && NodeType.isText(node) && node.length === 0) {\n node = forwards ? node.nextSibling : node.previousSibling;\n }\n return node || orig;\n };\n var getNode$1 = function (root, rng) {\n var elm, startContainer, endContainer, startOffset, endOffset;\n if (!rng) {\n return root;\n }\n startContainer = rng.startContainer;\n endContainer = rng.endContainer;\n startOffset = rng.startOffset;\n endOffset = rng.endOffset;\n elm = rng.commonAncestorContainer;\n if (!rng.collapsed) {\n if (startContainer === endContainer) {\n if (endOffset - startOffset < 2) {\n if (startContainer.hasChildNodes()) {\n elm = startContainer.childNodes[startOffset];\n }\n }\n }\n if (startContainer.nodeType === 3 && endContainer.nodeType === 3) {\n if (startContainer.length === startOffset) {\n startContainer = skipEmptyTextNodes(startContainer.nextSibling, true);\n } else {\n startContainer = startContainer.parentNode;\n }\n if (endOffset === 0) {\n endContainer = skipEmptyTextNodes(endContainer.previousSibling, false);\n } else {\n endContainer = endContainer.parentNode;\n }\n if (startContainer && startContainer === endContainer) {\n return startContainer;\n }\n }\n }\n if (elm && elm.nodeType === 3) {\n return elm.parentNode;\n }\n return elm;\n };\n var getSelectedBlocks = function (dom, rng, startElm, endElm) {\n var node, root;\n var selectedBlocks = [];\n root = dom.getRoot();\n startElm = dom.getParent(startElm || getStart$2(root, rng, rng.collapsed), dom.isBlock);\n endElm = dom.getParent(endElm || getEnd(root, rng, rng.collapsed), dom.isBlock);\n if (startElm && startElm !== root) {\n selectedBlocks.push(startElm);\n }\n if (startElm && endElm && startElm !== endElm) {\n node = startElm;\n var walker = new TreeWalker(startElm, root);\n while ((node = walker.next()) && node !== endElm) {\n if (dom.isBlock(node)) {\n selectedBlocks.push(node);\n }\n }\n }\n if (endElm && startElm !== endElm && endElm !== root) {\n selectedBlocks.push(endElm);\n }\n return selectedBlocks;\n };\n var select$1 = function (dom, node, content) {\n return Option.from(node).map(function (node) {\n var idx = dom.nodeIndex(node);\n var rng = dom.createRng();\n rng.setStart(node.parentNode, idx);\n rng.setEnd(node.parentNode, idx + 1);\n if (content) {\n moveEndPoint$1(dom, rng, node, true);\n moveEndPoint$1(dom, rng, node, false);\n }\n return rng;\n });\n };\n\n var each$j = Tools.each;\n var isNativeIeSelection = function (rng) {\n return !!rng.select;\n };\n var isAttachedToDom = function (node) {\n return !!(node && node.ownerDocument) && contains$3(Element.fromDom(node.ownerDocument), Element.fromDom(node));\n };\n var isValidRange = function (rng) {\n if (!rng) {\n return false;\n } else if (isNativeIeSelection(rng)) {\n return true;\n } else {\n return isAttachedToDom(rng.startContainer) && isAttachedToDom(rng.endContainer);\n }\n };\n var Selection$1 = function (dom, win, serializer, editor) {\n var bookmarkManager, controlSelection;\n var selectedRange, explicitRange, selectorChangedData;\n var setCursorLocation = function (node, offset) {\n var rng = dom.createRng();\n if (!node) {\n moveEndPoint$1(dom, rng, editor.getBody(), true);\n setRng(rng);\n } else {\n rng.setStart(node, offset);\n rng.setEnd(node, offset);\n setRng(rng);\n collapse(false);\n }\n };\n var getContent = function (args) {\n return GetSelectionContent.getContent(editor, args);\n };\n var setContent = function (content, args) {\n return SetSelectionContent.setContent(editor, content, args);\n };\n var getStart = function (real) {\n return getStart$2(editor.getBody(), getRng(), real);\n };\n var getEnd$1 = function (real) {\n return getEnd(editor.getBody(), getRng(), real);\n };\n var getBookmark = function (type, normalized) {\n return bookmarkManager.getBookmark(type, normalized);\n };\n var moveToBookmark = function (bookmark) {\n return bookmarkManager.moveToBookmark(bookmark);\n };\n var select = function (node, content) {\n select$1(dom, node, content).each(setRng);\n return node;\n };\n var isCollapsed = function () {\n var rng = getRng(), sel = getSel();\n if (!rng || rng.item) {\n return false;\n }\n if (rng.compareEndPoints) {\n return rng.compareEndPoints('StartToEnd', rng) === 0;\n }\n return !sel || rng.collapsed;\n };\n var collapse = function (toStart) {\n var rng = getRng();\n rng.collapse(!!toStart);\n setRng(rng);\n };\n var getSel = function () {\n return win.getSelection ? win.getSelection() : win.document.selection;\n };\n var getRng = function () {\n var selection, rng, elm, doc;\n var tryCompareBoundaryPoints = function (how, sourceRange, destinationRange) {\n try {\n return sourceRange.compareBoundaryPoints(how, destinationRange);\n } catch (ex) {\n return -1;\n }\n };\n if (!win) {\n return null;\n }\n doc = win.document;\n if (typeof doc === 'undefined' || doc === null) {\n return null;\n }\n if (editor.bookmark !== undefined && EditorFocus.hasFocus(editor) === false) {\n var bookmark = SelectionBookmark.getRng(editor);\n if (bookmark.isSome()) {\n return bookmark.map(function (r) {\n return EventProcessRanges.processRanges(editor, [r])[0];\n }).getOr(doc.createRange());\n }\n }\n try {\n if ((selection = getSel()) && !NodeType.isRestrictedNode(selection.anchorNode)) {\n if (selection.rangeCount > 0) {\n rng = selection.getRangeAt(0);\n } else {\n rng = selection.createRange ? selection.createRange() : doc.createRange();\n }\n }\n } catch (ex) {\n }\n rng = EventProcessRanges.processRanges(editor, [rng])[0];\n if (!rng) {\n rng = doc.createRange ? doc.createRange() : doc.body.createTextRange();\n }\n if (rng.setStart && rng.startContainer.nodeType === 9 && rng.collapsed) {\n elm = dom.getRoot();\n rng.setStart(elm, 0);\n rng.setEnd(elm, 0);\n }\n if (selectedRange && explicitRange) {\n if (tryCompareBoundaryPoints(rng.START_TO_START, rng, selectedRange) === 0 && tryCompareBoundaryPoints(rng.END_TO_END, rng, selectedRange) === 0) {\n rng = explicitRange;\n } else {\n selectedRange = null;\n explicitRange = null;\n }\n }\n return rng;\n };\n var setRng = function (rng, forward) {\n var sel, node, evt;\n if (!isValidRange(rng)) {\n return;\n }\n var ieRange = isNativeIeSelection(rng) ? rng : null;\n if (ieRange) {\n explicitRange = null;\n try {\n ieRange.select();\n } catch (ex) {\n }\n return;\n }\n sel = getSel();\n evt = editor.fire('SetSelectionRange', {\n range: rng,\n forward: forward\n });\n rng = evt.range;\n if (sel) {\n explicitRange = rng;\n try {\n sel.removeAllRanges();\n sel.addRange(rng);\n } catch (ex) {\n }\n if (forward === false && sel.extend) {\n sel.collapse(rng.endContainer, rng.endOffset);\n sel.extend(rng.startContainer, rng.startOffset);\n }\n selectedRange = sel.rangeCount > 0 ? sel.getRangeAt(0) : null;\n }\n if (!rng.collapsed && rng.startContainer === rng.endContainer && sel.setBaseAndExtent && !Env.ie) {\n if (rng.endOffset - rng.startOffset < 2) {\n if (rng.startContainer.hasChildNodes()) {\n node = rng.startContainer.childNodes[rng.startOffset];\n if (node && node.tagName === 'IMG') {\n sel.setBaseAndExtent(rng.startContainer, rng.startOffset, rng.endContainer, rng.endOffset);\n if (sel.anchorNode !== rng.startContainer || sel.focusNode !== rng.endContainer) {\n sel.setBaseAndExtent(node, 0, node, 1);\n }\n }\n }\n }\n }\n editor.fire('AfterSetSelectionRange', {\n range: rng,\n forward: forward\n });\n };\n var setNode = function (elm) {\n setContent(dom.getOuterHTML(elm));\n return elm;\n };\n var getNode = function () {\n return getNode$1(editor.getBody(), getRng());\n };\n var getSelectedBlocks$1 = function (startElm, endElm) {\n return getSelectedBlocks(dom, getRng(), startElm, endElm);\n };\n var isForward = function () {\n var sel = getSel();\n var anchorRange, focusRange;\n if (!sel || !sel.anchorNode || !sel.focusNode) {\n return true;\n }\n anchorRange = dom.createRng();\n anchorRange.setStart(sel.anchorNode, sel.anchorOffset);\n anchorRange.collapse(true);\n focusRange = dom.createRng();\n focusRange.setStart(sel.focusNode, sel.focusOffset);\n focusRange.collapse(true);\n return anchorRange.compareBoundaryPoints(anchorRange.START_TO_START, focusRange) <= 0;\n };\n var normalize = function () {\n var rng = getRng();\n var sel = getSel();\n if (!MultiRange.hasMultipleRanges(sel) && hasAnyRanges(editor)) {\n var normRng = NormalizeRange.normalize(dom, rng);\n normRng.each(function (normRng) {\n setRng(normRng, isForward());\n });\n return normRng.getOr(rng);\n }\n return rng;\n };\n var selectorChanged = function (selector, callback) {\n var currentSelectors;\n if (!selectorChangedData) {\n selectorChangedData = {};\n currentSelectors = {};\n editor.on('NodeChange', function (e) {\n var node = e.element, parents = dom.getParents(node, null, dom.getRoot()), matchedSelectors = {};\n each$j(selectorChangedData, function (callbacks, selector) {\n each$j(parents, function (node) {\n if (dom.is(node, selector)) {\n if (!currentSelectors[selector]) {\n each$j(callbacks, function (callback) {\n callback(true, {\n node: node,\n selector: selector,\n parents: parents\n });\n });\n currentSelectors[selector] = callbacks;\n }\n matchedSelectors[selector] = callbacks;\n return false;\n }\n });\n });\n each$j(currentSelectors, function (callbacks, selector) {\n if (!matchedSelectors[selector]) {\n delete currentSelectors[selector];\n each$j(callbacks, function (callback) {\n callback(false, {\n node: node,\n selector: selector,\n parents: parents\n });\n });\n }\n });\n });\n }\n if (!selectorChangedData[selector]) {\n selectorChangedData[selector] = [];\n }\n selectorChangedData[selector].push(callback);\n return exports;\n };\n var getScrollContainer = function () {\n var scrollContainer;\n var node = dom.getRoot();\n while (node && node.nodeName !== 'BODY') {\n if (node.scrollHeight > node.clientHeight) {\n scrollContainer = node;\n break;\n }\n node = node.parentNode;\n }\n return scrollContainer;\n };\n var scrollIntoView = function (elm, alignToTop) {\n return ScrollIntoView.scrollElementIntoView(editor, elm, alignToTop);\n };\n var placeCaretAt = function (clientX, clientY) {\n return setRng(CaretRangeFromPoint.fromPoint(clientX, clientY, editor.getDoc()));\n };\n var getBoundingClientRect = function () {\n var rng = getRng();\n return rng.collapsed ? CaretPosition$1.fromRangeStart(rng).getClientRects()[0] : rng.getBoundingClientRect();\n };\n var destroy = function () {\n win = selectedRange = explicitRange = null;\n controlSelection.destroy();\n };\n var exports = {\n bookmarkManager: null,\n controlSelection: null,\n dom: dom,\n win: win,\n serializer: serializer,\n editor: editor,\n collapse: collapse,\n setCursorLocation: setCursorLocation,\n getContent: getContent,\n setContent: setContent,\n getBookmark: getBookmark,\n moveToBookmark: moveToBookmark,\n select: select,\n isCollapsed: isCollapsed,\n isForward: isForward,\n setNode: setNode,\n getNode: getNode,\n getSel: getSel,\n setRng: setRng,\n getRng: getRng,\n getStart: getStart,\n getEnd: getEnd$1,\n getSelectedBlocks: getSelectedBlocks$1,\n normalize: normalize,\n selectorChanged: selectorChanged,\n getScrollContainer: getScrollContainer,\n scrollIntoView: scrollIntoView,\n placeCaretAt: placeCaretAt,\n getBoundingClientRect: getBoundingClientRect,\n destroy: destroy\n };\n bookmarkManager = BookmarkManager$1(exports);\n controlSelection = ControlSelection(exports, editor);\n exports.bookmarkManager = bookmarkManager;\n exports.controlSelection = controlSelection;\n return exports;\n };\n\n var BreakType;\n (function (BreakType) {\n BreakType[BreakType['Br'] = 0] = 'Br';\n BreakType[BreakType['Block'] = 1] = 'Block';\n BreakType[BreakType['Wrap'] = 2] = 'Wrap';\n BreakType[BreakType['Eol'] = 3] = 'Eol';\n }(BreakType || (BreakType = {})));\n var flip = function (direction, positions) {\n return direction === HDirection.Backwards ? positions.reverse() : positions;\n };\n var walk$3 = function (direction, caretWalker, pos) {\n return direction === HDirection.Forwards ? caretWalker.next(pos) : caretWalker.prev(pos);\n };\n var getBreakType = function (scope, direction, currentPos, nextPos) {\n if (NodeType.isBr(nextPos.getNode(direction === HDirection.Forwards))) {\n return BreakType.Br;\n } else if (isInSameBlock(currentPos, nextPos) === false) {\n return BreakType.Block;\n } else {\n return BreakType.Wrap;\n }\n };\n var getPositionsUntil = function (predicate, direction, scope, start) {\n var caretWalker = CaretWalker(scope);\n var currentPos = start, nextPos;\n var positions = [];\n while (currentPos) {\n nextPos = walk$3(direction, caretWalker, currentPos);\n if (!nextPos) {\n break;\n }\n if (NodeType.isBr(nextPos.getNode(false))) {\n if (direction === HDirection.Forwards) {\n return {\n positions: flip(direction, positions).concat([nextPos]),\n breakType: BreakType.Br,\n breakAt: Option.some(nextPos)\n };\n } else {\n return {\n positions: flip(direction, positions),\n breakType: BreakType.Br,\n breakAt: Option.some(nextPos)\n };\n }\n }\n if (!nextPos.isVisible()) {\n currentPos = nextPos;\n continue;\n }\n if (predicate(currentPos, nextPos)) {\n var breakType = getBreakType(scope, direction, currentPos, nextPos);\n return {\n positions: flip(direction, positions),\n breakType: breakType,\n breakAt: Option.some(nextPos)\n };\n }\n positions.push(nextPos);\n currentPos = nextPos;\n }\n return {\n positions: flip(direction, positions),\n breakType: BreakType.Eol,\n breakAt: Option.none()\n };\n };\n var getAdjacentLinePositions = function (direction, getPositionsUntilBreak, scope, start) {\n return getPositionsUntilBreak(scope, start).breakAt.map(function (pos) {\n var positions = getPositionsUntilBreak(scope, pos).positions;\n return direction === HDirection.Backwards ? positions.concat(pos) : [pos].concat(positions);\n }).getOr([]);\n };\n var findClosestHorizontalPositionFromPoint = function (positions, x) {\n return foldl(positions, function (acc, newPos) {\n return acc.fold(function () {\n return Option.some(newPos);\n }, function (lastPos) {\n return lift2(head(lastPos.getClientRects()), head(newPos.getClientRects()), function (lastRect, newRect) {\n var lastDist = Math.abs(x - lastRect.left);\n var newDist = Math.abs(x - newRect.left);\n return newDist <= lastDist ? newPos : lastPos;\n }).or(acc);\n });\n }, Option.none());\n };\n var findClosestHorizontalPosition = function (positions, pos) {\n return head(pos.getClientRects()).bind(function (targetRect) {\n return findClosestHorizontalPositionFromPoint(positions, targetRect.left);\n });\n };\n var getPositionsUntilPreviousLine = curry(getPositionsUntil, CaretPosition.isAbove, -1);\n var getPositionsUntilNextLine = curry(getPositionsUntil, CaretPosition.isBelow, 1);\n var isAtFirstLine = function (scope, pos) {\n return getPositionsUntilPreviousLine(scope, pos).breakAt.isNone();\n };\n var isAtLastLine = function (scope, pos) {\n return getPositionsUntilNextLine(scope, pos).breakAt.isNone();\n };\n var getPositionsAbove = curry(getAdjacentLinePositions, -1, getPositionsUntilPreviousLine);\n var getPositionsBelow = curry(getAdjacentLinePositions, 1, getPositionsUntilNextLine);\n var getFirstLinePositions = function (scope) {\n return CaretFinder.firstPositionIn(scope).map(function (pos) {\n return [pos].concat(getPositionsUntilNextLine(scope, pos).positions);\n }).getOr([]);\n };\n var getLastLinePositions = function (scope) {\n return CaretFinder.lastPositionIn(scope).map(function (pos) {\n return getPositionsUntilPreviousLine(scope, pos).positions.concat(pos);\n }).getOr([]);\n };\n\n var isContentEditableFalse$b = NodeType.isContentEditableFalse;\n var getSelectedNode$1 = getSelectedNode;\n var moveToCeFalseHorizontally = function (direction, editor, getNextPosFn, range) {\n var forwards = direction === HDirection.Forwards;\n var isBeforeContentEditableFalseFn = forwards ? isBeforeContentEditableFalse : isAfterContentEditableFalse;\n if (!range.collapsed) {\n var node = getSelectedNode$1(range);\n if (isContentEditableFalse$b(node)) {\n return showCaret(direction, editor, node, direction === HDirection.Backwards, true);\n }\n }\n var rangeIsInContainerBlock = isRangeInCaretContainerBlock(range);\n var caretPosition = getNormalizedRangeEndPoint(direction, editor.getBody(), range);\n if (isBeforeContentEditableFalseFn(caretPosition)) {\n return selectNode(editor, caretPosition.getNode(!forwards));\n }\n var nextCaretPosition = InlineUtils.normalizePosition(forwards, getNextPosFn(caretPosition));\n if (!nextCaretPosition) {\n if (rangeIsInContainerBlock) {\n return range;\n }\n return null;\n }\n if (isBeforeContentEditableFalseFn(nextCaretPosition)) {\n return showCaret(direction, editor, nextCaretPosition.getNode(!forwards), forwards, true);\n }\n var peekCaretPosition = getNextPosFn(nextCaretPosition);\n if (peekCaretPosition && isBeforeContentEditableFalseFn(peekCaretPosition)) {\n if (isMoveInsideSameBlock(nextCaretPosition, peekCaretPosition)) {\n return showCaret(direction, editor, peekCaretPosition.getNode(!forwards), forwards, true);\n }\n }\n if (rangeIsInContainerBlock) {\n return renderRangeCaret(editor, nextCaretPosition.toRange(), true);\n }\n return null;\n };\n var moveToCeFalseVertically = function (direction, editor, walkerFn, range) {\n var caretPosition, linePositions, nextLinePositions;\n var closestNextLineRect, caretClientRect, clientX;\n var dist1, dist2, contentEditableFalseNode;\n contentEditableFalseNode = getSelectedNode$1(range);\n caretPosition = getNormalizedRangeEndPoint(direction, editor.getBody(), range);\n linePositions = walkerFn(editor.getBody(), isAboveLine(1), caretPosition);\n nextLinePositions = filter(linePositions, isLine(1));\n caretClientRect = ArrUtils.last(caretPosition.getClientRects());\n if (isBeforeContentEditableFalse(caretPosition) || isBeforeTable(caretPosition)) {\n contentEditableFalseNode = caretPosition.getNode();\n }\n if (isAfterContentEditableFalse(caretPosition) || isAfterTable(caretPosition)) {\n contentEditableFalseNode = caretPosition.getNode(true);\n }\n if (!caretClientRect) {\n return null;\n }\n clientX = caretClientRect.left;\n closestNextLineRect = findClosestClientRect(nextLinePositions, clientX);\n if (closestNextLineRect) {\n if (isContentEditableFalse$b(closestNextLineRect.node)) {\n dist1 = Math.abs(clientX - closestNextLineRect.left);\n dist2 = Math.abs(clientX - closestNextLineRect.right);\n return showCaret(direction, editor, closestNextLineRect.node, dist1 < dist2, true);\n }\n }\n if (contentEditableFalseNode) {\n var caretPositions = positionsUntil(direction, editor.getBody(), isAboveLine(1), contentEditableFalseNode);\n closestNextLineRect = findClosestClientRect(filter(caretPositions, isLine(1)), clientX);\n if (closestNextLineRect) {\n return renderRangeCaret(editor, closestNextLineRect.position.toRange(), true);\n }\n closestNextLineRect = ArrUtils.last(filter(caretPositions, isLine(0)));\n if (closestNextLineRect) {\n return renderRangeCaret(editor, closestNextLineRect.position.toRange(), true);\n }\n }\n };\n var createTextBlock = function (editor) {\n var textBlock = editor.dom.create(Settings.getForcedRootBlock(editor));\n if (!Env.ie || Env.ie >= 11) {\n textBlock.innerHTML = '
';\n }\n return textBlock;\n };\n var exitPreBlock = function (editor, direction, range) {\n var pre, caretPos, newBlock;\n var caretWalker = CaretWalker(editor.getBody());\n var getNextVisualCaretPosition = curry(getVisualCaretPosition, caretWalker.next);\n var getPrevVisualCaretPosition = curry(getVisualCaretPosition, caretWalker.prev);\n if (range.collapsed && editor.settings.forced_root_block) {\n pre = editor.dom.getParent(range.startContainer, 'PRE');\n if (!pre) {\n return;\n }\n if (direction === 1) {\n caretPos = getNextVisualCaretPosition(CaretPosition$1.fromRangeStart(range));\n } else {\n caretPos = getPrevVisualCaretPosition(CaretPosition$1.fromRangeStart(range));\n }\n if (!caretPos) {\n newBlock = createTextBlock(editor);\n if (direction === 1) {\n editor.$(pre).after(newBlock);\n } else {\n editor.$(pre).before(newBlock);\n }\n editor.selection.select(newBlock, true);\n editor.selection.collapse();\n }\n }\n };\n var getHorizontalRange = function (editor, forward) {\n var caretWalker = CaretWalker(editor.getBody());\n var getNextVisualCaretPosition = curry(getVisualCaretPosition, caretWalker.next);\n var getPrevVisualCaretPosition = curry(getVisualCaretPosition, caretWalker.prev);\n var newRange;\n var direction = forward ? HDirection.Forwards : HDirection.Backwards;\n var getNextPosFn = forward ? getNextVisualCaretPosition : getPrevVisualCaretPosition;\n var range = editor.selection.getRng();\n newRange = moveToCeFalseHorizontally(direction, editor, getNextPosFn, range);\n if (newRange) {\n return newRange;\n }\n newRange = exitPreBlock(editor, direction, range);\n if (newRange) {\n return newRange;\n }\n return null;\n };\n var getVerticalRange = function (editor, down) {\n var newRange;\n var direction = down ? 1 : -1;\n var walkerFn = down ? downUntil : upUntil;\n var range = editor.selection.getRng();\n newRange = moveToCeFalseVertically(direction, editor, walkerFn, range);\n if (newRange) {\n return newRange;\n }\n newRange = exitPreBlock(editor, direction, range);\n if (newRange) {\n return newRange;\n }\n return null;\n };\n var moveH = function (editor, forward) {\n return function () {\n var newRng = getHorizontalRange(editor, forward);\n if (newRng) {\n moveToRange(editor, newRng);\n return true;\n } else {\n return false;\n }\n };\n };\n var moveV = function (editor, down) {\n return function () {\n var newRng = getVerticalRange(editor, down);\n if (newRng) {\n moveToRange(editor, newRng);\n return true;\n } else {\n return false;\n }\n };\n };\n var isCefPosition = function (forward) {\n return function (pos) {\n return forward ? isAfterContentEditableFalse(pos) : isBeforeContentEditableFalse(pos);\n };\n };\n var moveToLineEndPoint = function (editor, forward) {\n return function () {\n var from = forward ? CaretPosition$1.fromRangeEnd(editor.selection.getRng()) : CaretPosition$1.fromRangeStart(editor.selection.getRng());\n var result = forward ? getPositionsUntilNextLine(editor.getBody(), from) : getPositionsUntilPreviousLine(editor.getBody(), from);\n var to = forward ? last(result.positions) : head(result.positions);\n return to.filter(isCefPosition(forward)).fold(constant(false), function (pos) {\n editor.selection.setRng(pos.toRange());\n return true;\n });\n };\n };\n\n var deflate = function (rect, delta) {\n return {\n left: rect.left - delta,\n top: rect.top - delta,\n right: rect.right + delta * 2,\n bottom: rect.bottom + delta * 2,\n width: rect.width + delta,\n height: rect.height + delta\n };\n };\n var getCorners = function (getYAxisValue, tds) {\n return bind(tds, function (td) {\n var rect = deflate(clone$1(td.getBoundingClientRect()), -1);\n return [\n {\n x: rect.left,\n y: getYAxisValue(rect),\n cell: td\n },\n {\n x: rect.right,\n y: getYAxisValue(rect),\n cell: td\n }\n ];\n });\n };\n var findClosestCorner = function (corners, x, y) {\n return foldl(corners, function (acc, newCorner) {\n return acc.fold(function () {\n return Option.some(newCorner);\n }, function (oldCorner) {\n var oldDist = Math.sqrt(Math.abs(oldCorner.x - x) + Math.abs(oldCorner.y - y));\n var newDist = Math.sqrt(Math.abs(newCorner.x - x) + Math.abs(newCorner.y - y));\n return Option.some(newDist < oldDist ? newCorner : oldCorner);\n });\n }, Option.none());\n };\n var getClosestCell$1 = function (getYAxisValue, isTargetCorner, table, x, y) {\n var cells = descendants$1(Element.fromDom(table), 'td,th,caption').map(function (e) {\n return e.dom();\n });\n var corners = filter(getCorners(getYAxisValue, cells), function (corner) {\n return isTargetCorner(corner, y);\n });\n return findClosestCorner(corners, x, y).map(function (corner) {\n return corner.cell;\n });\n };\n var getBottomValue = function (rect) {\n return rect.bottom;\n };\n var getTopValue = function (rect) {\n return rect.top;\n };\n var isAbove$1 = function (corner, y) {\n return corner.y < y;\n };\n var isBelow$1 = function (corner, y) {\n return corner.y > y;\n };\n var getClosestCellAbove = curry(getClosestCell$1, getBottomValue, isAbove$1);\n var getClosestCellBelow = curry(getClosestCell$1, getTopValue, isBelow$1);\n var findClosestPositionInAboveCell = function (table, pos) {\n return head(pos.getClientRects()).bind(function (rect) {\n return getClosestCellAbove(table, rect.left, rect.top);\n }).bind(function (cell) {\n return findClosestHorizontalPosition(getLastLinePositions(cell), pos);\n });\n };\n var findClosestPositionInBelowCell = function (table, pos) {\n return last(pos.getClientRects()).bind(function (rect) {\n return getClosestCellBelow(table, rect.left, rect.top);\n }).bind(function (cell) {\n return findClosestHorizontalPosition(getFirstLinePositions(cell), pos);\n });\n };\n\n var hasNextBreak = function (getPositionsUntil, scope, lineInfo) {\n return lineInfo.breakAt.map(function (breakPos) {\n return getPositionsUntil(scope, breakPos).breakAt.isSome();\n }).getOr(false);\n };\n var startsWithWrapBreak = function (lineInfo) {\n return lineInfo.breakType === BreakType.Wrap && lineInfo.positions.length === 0;\n };\n var startsWithBrBreak = function (lineInfo) {\n return lineInfo.breakType === BreakType.Br && lineInfo.positions.length === 1;\n };\n var isAtTableCellLine = function (getPositionsUntil, scope, pos) {\n var lineInfo = getPositionsUntil(scope, pos);\n if (startsWithWrapBreak(lineInfo) || !NodeType.isBr(pos.getNode()) && startsWithBrBreak(lineInfo)) {\n return !hasNextBreak(getPositionsUntil, scope, lineInfo);\n } else {\n return lineInfo.breakAt.isNone();\n }\n };\n var isAtFirstTableCellLine = curry(isAtTableCellLine, getPositionsUntilPreviousLine);\n var isAtLastTableCellLine = curry(isAtTableCellLine, getPositionsUntilNextLine);\n var isCaretAtStartOrEndOfTable = function (forward, rng, table) {\n var caretPos = CaretPosition$1.fromRangeStart(rng);\n return CaretFinder.positionIn(!forward, table).map(function (pos) {\n return pos.isEqual(caretPos);\n }).getOr(false);\n };\n var navigateHorizontally = function (editor, forward, table, td) {\n var rng = editor.selection.getRng();\n var direction = forward ? 1 : -1;\n if (isFakeCaretTableBrowser() && isCaretAtStartOrEndOfTable(forward, rng, table)) {\n var newRng = showCaret(direction, editor, table, !forward, true);\n moveToRange(editor, newRng);\n return true;\n }\n return false;\n };\n var getClosestAbovePosition = function (root, table, start) {\n return findClosestPositionInAboveCell(table, start).orThunk(function () {\n return head(start.getClientRects()).bind(function (rect) {\n return findClosestHorizontalPositionFromPoint(getPositionsAbove(root, CaretPosition$1.before(table)), rect.left);\n });\n }).getOr(CaretPosition$1.before(table));\n };\n var getClosestBelowPosition = function (root, table, start) {\n return findClosestPositionInBelowCell(table, start).orThunk(function () {\n return head(start.getClientRects()).bind(function (rect) {\n return findClosestHorizontalPositionFromPoint(getPositionsBelow(root, CaretPosition$1.after(table)), rect.left);\n });\n }).getOr(CaretPosition$1.after(table));\n };\n var getTable = function (previous, pos) {\n var node = pos.getNode(previous);\n return NodeType.isElement(node) && node.nodeName === 'TABLE' ? Option.some(node) : Option.none();\n };\n var renderBlock = function (down, editor, table, pos) {\n var forcedRootBlock = Settings.getForcedRootBlock(editor);\n if (forcedRootBlock) {\n editor.undoManager.transact(function () {\n var element = Element.fromTag(forcedRootBlock);\n setAll(element, Settings.getForcedRootBlockAttrs(editor));\n append(element, Element.fromTag('br'));\n if (down) {\n after(Element.fromDom(table), element);\n } else {\n before(Element.fromDom(table), element);\n }\n var rng = editor.dom.createRng();\n rng.setStart(element.dom(), 0);\n rng.setEnd(element.dom(), 0);\n moveToRange(editor, rng);\n });\n } else {\n moveToRange(editor, pos.toRange());\n }\n };\n var moveCaret = function (editor, down, pos) {\n var table = down ? getTable(true, pos) : getTable(false, pos);\n var last = down === false;\n table.fold(function () {\n return moveToRange(editor, pos.toRange());\n }, function (table) {\n return CaretFinder.positionIn(last, editor.getBody()).filter(function (lastPos) {\n return lastPos.isEqual(pos);\n }).fold(function () {\n return moveToRange(editor, pos.toRange());\n }, function (_) {\n return renderBlock(down, editor, table, pos);\n });\n });\n };\n var navigateVertically = function (editor, down, table, td) {\n var rng = editor.selection.getRng();\n var pos = CaretPosition$1.fromRangeStart(rng);\n var root = editor.getBody();\n if (!down && isAtFirstTableCellLine(td, pos)) {\n var newPos = getClosestAbovePosition(root, table, pos);\n moveCaret(editor, down, newPos);\n return true;\n } else if (down && isAtLastTableCellLine(td, pos)) {\n var newPos = getClosestBelowPosition(root, table, pos);\n moveCaret(editor, down, newPos);\n return true;\n } else {\n return false;\n }\n };\n var moveH$1 = function (editor, forward) {\n return function () {\n return Option.from(editor.dom.getParent(editor.selection.getNode(), 'td,th')).bind(function (td) {\n return Option.from(editor.dom.getParent(td, 'table')).map(function (table) {\n return navigateHorizontally(editor, forward, table);\n });\n }).getOr(false);\n };\n };\n var moveV$1 = function (editor, forward) {\n return function () {\n return Option.from(editor.dom.getParent(editor.selection.getNode(), 'td,th')).bind(function (td) {\n return Option.from(editor.dom.getParent(td, 'table')).map(function (table) {\n return navigateVertically(editor, forward, table, td);\n });\n }).getOr(false);\n };\n };\n\n var isTarget = function (node) {\n return contains(['figcaption'], name(node));\n };\n var rangeBefore = function (target) {\n var rng = domGlobals.document.createRange();\n rng.setStartBefore(target.dom());\n rng.setEndBefore(target.dom());\n return rng;\n };\n var insertElement = function (root, elm, forward) {\n if (forward) {\n append(root, elm);\n } else {\n prepend(root, elm);\n }\n };\n var insertBr = function (root, forward) {\n var br = Element.fromTag('br');\n insertElement(root, br, forward);\n return rangeBefore(br);\n };\n var insertBlock$1 = function (root, forward, blockName, attrs) {\n var block = Element.fromTag(blockName);\n var br = Element.fromTag('br');\n setAll(block, attrs);\n append(block, br);\n insertElement(root, block, forward);\n return rangeBefore(br);\n };\n var insertEmptyLine = function (root, rootBlockName, attrs, forward) {\n if (rootBlockName === '') {\n return insertBr(root, forward);\n } else {\n return insertBlock$1(root, forward, rootBlockName, attrs);\n }\n };\n var getClosestTargetBlock = function (pos, root) {\n var isRoot = curry(eq, root);\n return closest(Element.fromDom(pos.container()), isBlock, isRoot).filter(isTarget);\n };\n var isAtFirstOrLastLine = function (root, forward, pos) {\n return forward ? isAtLastLine(root.dom(), pos) : isAtFirstLine(root.dom(), pos);\n };\n var moveCaretToNewEmptyLine = function (editor, forward) {\n var root = Element.fromDom(editor.getBody());\n var pos = CaretPosition$1.fromRangeStart(editor.selection.getRng());\n var rootBlock = Settings.getForcedRootBlock(editor);\n var rootBlockAttrs = Settings.getForcedRootBlockAttrs(editor);\n return getClosestTargetBlock(pos, root).exists(function () {\n if (isAtFirstOrLastLine(root, forward, pos)) {\n var rng = insertEmptyLine(root, rootBlock, rootBlockAttrs, forward);\n editor.selection.setRng(rng);\n return true;\n } else {\n return false;\n }\n });\n };\n var moveV$2 = function (editor, forward) {\n return function () {\n if (editor.selection.isCollapsed()) {\n return moveCaretToNewEmptyLine(editor, forward);\n } else {\n return false;\n }\n };\n };\n\n var defaultPatterns = function (patterns) {\n return map(patterns, function (pattern) {\n return merge({\n shiftKey: false,\n altKey: false,\n ctrlKey: false,\n metaKey: false,\n keyCode: 0,\n action: noop\n }, pattern);\n });\n };\n var matchesEvent = function (pattern, evt) {\n return evt.keyCode === pattern.keyCode && evt.shiftKey === pattern.shiftKey && evt.altKey === pattern.altKey && evt.ctrlKey === pattern.ctrlKey && evt.metaKey === pattern.metaKey;\n };\n var match$1 = function (patterns, evt) {\n return bind(defaultPatterns(patterns), function (pattern) {\n return matchesEvent(pattern, evt) ? [pattern] : [];\n });\n };\n var action = function (f) {\n var x = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n x[_i - 1] = arguments[_i];\n }\n var args = Array.prototype.slice.call(arguments, 1);\n return function () {\n return f.apply(null, args);\n };\n };\n var execute = function (patterns, evt) {\n return find(match$1(patterns, evt), function (pattern) {\n return pattern.action();\n });\n };\n var MatchKeys = {\n match: match$1,\n action: action,\n execute: execute\n };\n\n var executeKeydownOverride = function (editor, caret, evt) {\n var os = PlatformDetection$1.detect().os;\n MatchKeys.execute([\n {\n keyCode: VK.RIGHT,\n action: moveH(editor, true)\n },\n {\n keyCode: VK.LEFT,\n action: moveH(editor, false)\n },\n {\n keyCode: VK.UP,\n action: moveV(editor, false)\n },\n {\n keyCode: VK.DOWN,\n action: moveV(editor, true)\n },\n {\n keyCode: VK.RIGHT,\n action: moveH$1(editor, true)\n },\n {\n keyCode: VK.LEFT,\n action: moveH$1(editor, false)\n },\n {\n keyCode: VK.UP,\n action: moveV$1(editor, false)\n },\n {\n keyCode: VK.DOWN,\n action: moveV$1(editor, true)\n },\n {\n keyCode: VK.RIGHT,\n action: BoundarySelection.move(editor, caret, true)\n },\n {\n keyCode: VK.LEFT,\n action: BoundarySelection.move(editor, caret, false)\n },\n {\n keyCode: VK.RIGHT,\n ctrlKey: !os.isOSX(),\n altKey: os.isOSX(),\n action: BoundarySelection.moveNextWord(editor, caret)\n },\n {\n keyCode: VK.LEFT,\n ctrlKey: !os.isOSX(),\n altKey: os.isOSX(),\n action: BoundarySelection.movePrevWord(editor, caret)\n },\n {\n keyCode: VK.UP,\n action: moveV$2(editor, false)\n },\n {\n keyCode: VK.DOWN,\n action: moveV$2(editor, true)\n }\n ], evt).each(function (_) {\n evt.preventDefault();\n });\n };\n var setup$7 = function (editor, caret) {\n editor.on('keydown', function (evt) {\n if (evt.isDefaultPrevented() === false) {\n executeKeydownOverride(editor, caret, evt);\n }\n });\n };\n var ArrowKeys = { setup: setup$7 };\n\n var executeKeydownOverride$1 = function (editor, caret, evt) {\n MatchKeys.execute([\n {\n keyCode: VK.BACKSPACE,\n action: MatchKeys.action(CefDelete.backspaceDelete, editor, false)\n },\n {\n keyCode: VK.DELETE,\n action: MatchKeys.action(CefDelete.backspaceDelete, editor, true)\n },\n {\n keyCode: VK.BACKSPACE,\n action: MatchKeys.action(CefBoundaryDelete.backspaceDelete, editor, false)\n },\n {\n keyCode: VK.DELETE,\n action: MatchKeys.action(CefBoundaryDelete.backspaceDelete, editor, true)\n },\n {\n keyCode: VK.BACKSPACE,\n action: MatchKeys.action(InlineBoundaryDelete.backspaceDelete, editor, caret, false)\n },\n {\n keyCode: VK.DELETE,\n action: MatchKeys.action(InlineBoundaryDelete.backspaceDelete, editor, caret, true)\n },\n {\n keyCode: VK.BACKSPACE,\n action: MatchKeys.action(TableDelete.backspaceDelete, editor, false)\n },\n {\n keyCode: VK.DELETE,\n action: MatchKeys.action(TableDelete.backspaceDelete, editor, true)\n },\n {\n keyCode: VK.BACKSPACE,\n action: MatchKeys.action(BlockRangeDelete.backspaceDelete, editor, false)\n },\n {\n keyCode: VK.DELETE,\n action: MatchKeys.action(BlockRangeDelete.backspaceDelete, editor, true)\n },\n {\n keyCode: VK.BACKSPACE,\n action: MatchKeys.action(BlockBoundaryDelete.backspaceDelete, editor, false)\n },\n {\n keyCode: VK.DELETE,\n action: MatchKeys.action(BlockBoundaryDelete.backspaceDelete, editor, true)\n },\n {\n keyCode: VK.BACKSPACE,\n action: MatchKeys.action(InlineFormatDelete.backspaceDelete, editor, false)\n },\n {\n keyCode: VK.DELETE,\n action: MatchKeys.action(InlineFormatDelete.backspaceDelete, editor, true)\n }\n ], evt).each(function (_) {\n evt.preventDefault();\n });\n };\n var executeKeyupOverride = function (editor, evt) {\n MatchKeys.execute([\n {\n keyCode: VK.BACKSPACE,\n action: MatchKeys.action(CefDelete.paddEmptyElement, editor)\n },\n {\n keyCode: VK.DELETE,\n action: MatchKeys.action(CefDelete.paddEmptyElement, editor)\n }\n ], evt);\n };\n var setup$8 = function (editor, caret) {\n editor.on('keydown', function (evt) {\n if (evt.isDefaultPrevented() === false) {\n executeKeydownOverride$1(editor, caret, evt);\n }\n });\n editor.on('keyup', function (evt) {\n if (evt.isDefaultPrevented() === false) {\n executeKeyupOverride(editor, evt);\n }\n });\n };\n var DeleteBackspaceKeys = { setup: setup$8 };\n\n var firstNonWhiteSpaceNodeSibling = function (node) {\n while (node) {\n if (node.nodeType === 1 || node.nodeType === 3 && node.data && /[\\r\\n\\s]/.test(node.data)) {\n return node;\n }\n node = node.nextSibling;\n }\n };\n var moveToCaretPosition = function (editor, root) {\n var walker, node, rng, lastNode = root, tempElm;\n var dom = editor.dom;\n var moveCaretBeforeOnEnterElementsMap = editor.schema.getMoveCaretBeforeOnEnterElements();\n if (!root) {\n return;\n }\n if (/^(LI|DT|DD)$/.test(root.nodeName)) {\n var firstChild = firstNonWhiteSpaceNodeSibling(root.firstChild);\n if (firstChild && /^(UL|OL|DL)$/.test(firstChild.nodeName)) {\n root.insertBefore(dom.doc.createTextNode('\\xA0'), root.firstChild);\n }\n }\n rng = dom.createRng();\n root.normalize();\n if (root.hasChildNodes()) {\n walker = new TreeWalker(root, root);\n while (node = walker.current()) {\n if (NodeType.isText(node)) {\n rng.setStart(node, 0);\n rng.setEnd(node, 0);\n break;\n }\n if (moveCaretBeforeOnEnterElementsMap[node.nodeName.toLowerCase()]) {\n rng.setStartBefore(node);\n rng.setEndBefore(node);\n break;\n }\n lastNode = node;\n node = walker.next();\n }\n if (!node) {\n rng.setStart(lastNode, 0);\n rng.setEnd(lastNode, 0);\n }\n } else {\n if (NodeType.isBr(root)) {\n if (root.nextSibling && dom.isBlock(root.nextSibling)) {\n rng.setStartBefore(root);\n rng.setEndBefore(root);\n } else {\n rng.setStartAfter(root);\n rng.setEndAfter(root);\n }\n } else {\n rng.setStart(root, 0);\n rng.setEnd(root, 0);\n }\n }\n editor.selection.setRng(rng);\n dom.remove(tempElm);\n editor.selection.scrollIntoView(root);\n };\n var getEditableRoot = function (dom, node) {\n var root = dom.getRoot();\n var parent, editableRoot;\n parent = node;\n while (parent !== root && dom.getContentEditable(parent) !== 'false') {\n if (dom.getContentEditable(parent) === 'true') {\n editableRoot = parent;\n }\n parent = parent.parentNode;\n }\n return parent !== root ? editableRoot : root;\n };\n var getParentBlock$2 = function (editor) {\n return Option.from(editor.dom.getParent(editor.selection.getStart(true), editor.dom.isBlock));\n };\n var getParentBlockName = function (editor) {\n return getParentBlock$2(editor).fold(constant(''), function (parentBlock) {\n return parentBlock.nodeName.toUpperCase();\n });\n };\n var isListItemParentBlock = function (editor) {\n return getParentBlock$2(editor).filter(function (elm) {\n return isListItem(Element.fromDom(elm));\n }).isSome();\n };\n var NewLineUtils = {\n moveToCaretPosition: moveToCaretPosition,\n getEditableRoot: getEditableRoot,\n getParentBlock: getParentBlock$2,\n getParentBlockName: getParentBlockName,\n isListItemParentBlock: isListItemParentBlock\n };\n\n var hasFirstChild = function (elm, name) {\n return elm.firstChild && elm.firstChild.nodeName === name;\n };\n var hasParent$1 = function (elm, parentName) {\n return elm && elm.parentNode && elm.parentNode.nodeName === parentName;\n };\n var isListBlock = function (elm) {\n return elm && /^(OL|UL|LI)$/.test(elm.nodeName);\n };\n var isNestedList = function (elm) {\n return isListBlock(elm) && isListBlock(elm.parentNode);\n };\n var getContainerBlock = function (containerBlock) {\n var containerBlockParent = containerBlock.parentNode;\n if (/^(LI|DT|DD)$/.test(containerBlockParent.nodeName)) {\n return containerBlockParent;\n }\n return containerBlock;\n };\n var isFirstOrLastLi = function (containerBlock, parentBlock, first) {\n var node = containerBlock[first ? 'firstChild' : 'lastChild'];\n while (node) {\n if (NodeType.isElement(node)) {\n break;\n }\n node = node[first ? 'nextSibling' : 'previousSibling'];\n }\n return node === parentBlock;\n };\n var insert$1 = function (editor, createNewBlock, containerBlock, parentBlock, newBlockName) {\n var dom = editor.dom;\n var rng = editor.selection.getRng();\n if (containerBlock === editor.getBody()) {\n return;\n }\n if (isNestedList(containerBlock)) {\n newBlockName = 'LI';\n }\n var newBlock = newBlockName ? createNewBlock(newBlockName) : dom.create('BR');\n if (isFirstOrLastLi(containerBlock, parentBlock, true) && isFirstOrLastLi(containerBlock, parentBlock, false)) {\n if (hasParent$1(containerBlock, 'LI')) {\n dom.insertAfter(newBlock, getContainerBlock(containerBlock));\n } else {\n dom.replace(newBlock, containerBlock);\n }\n } else if (isFirstOrLastLi(containerBlock, parentBlock, true)) {\n if (hasParent$1(containerBlock, 'LI')) {\n dom.insertAfter(newBlock, getContainerBlock(containerBlock));\n newBlock.appendChild(dom.doc.createTextNode(' '));\n newBlock.appendChild(containerBlock);\n } else {\n containerBlock.parentNode.insertBefore(newBlock, containerBlock);\n }\n } else if (isFirstOrLastLi(containerBlock, parentBlock, false)) {\n dom.insertAfter(newBlock, getContainerBlock(containerBlock));\n } else {\n containerBlock = getContainerBlock(containerBlock);\n var tmpRng = rng.cloneRange();\n tmpRng.setStartAfter(parentBlock);\n tmpRng.setEndAfter(containerBlock);\n var fragment = tmpRng.extractContents();\n if (newBlockName === 'LI' && hasFirstChild(fragment, 'LI')) {\n newBlock = fragment.firstChild;\n dom.insertAfter(fragment, containerBlock);\n } else {\n dom.insertAfter(fragment, containerBlock);\n dom.insertAfter(newBlock, containerBlock);\n }\n }\n dom.remove(parentBlock);\n NewLineUtils.moveToCaretPosition(editor, newBlock);\n };\n var InsertLi = { insert: insert$1 };\n\n var trimZwsp = function (fragment) {\n each(descendants(Element.fromDom(fragment), isText), function (text) {\n var rawNode = text.dom();\n rawNode.nodeValue = Zwsp.trim(rawNode.nodeValue);\n });\n };\n var isEmptyAnchor = function (dom, elm) {\n return elm && elm.nodeName === 'A' && dom.isEmpty(elm);\n };\n var isTableCell$5 = function (node) {\n return node && /^(TD|TH|CAPTION)$/.test(node.nodeName);\n };\n var emptyBlock = function (elm) {\n elm.innerHTML = '
';\n };\n var containerAndSiblingName = function (container, nodeName) {\n return container.nodeName === nodeName || container.previousSibling && container.previousSibling.nodeName === nodeName;\n };\n var canSplitBlock = function (dom, node) {\n return node && dom.isBlock(node) && !/^(TD|TH|CAPTION|FORM)$/.test(node.nodeName) && !/^(fixed|absolute)/i.test(node.style.position) && dom.getContentEditable(node) !== 'true';\n };\n var trimInlineElementsOnLeftSideOfBlock = function (dom, nonEmptyElementsMap, block) {\n var node = block;\n var firstChilds = [];\n var i;\n if (!node) {\n return;\n }\n while (node = node.firstChild) {\n if (dom.isBlock(node)) {\n return;\n }\n if (NodeType.isElement(node) && !nonEmptyElementsMap[node.nodeName.toLowerCase()]) {\n firstChilds.push(node);\n }\n }\n i = firstChilds.length;\n while (i--) {\n node = firstChilds[i];\n if (!node.hasChildNodes() || node.firstChild === node.lastChild && node.firstChild.nodeValue === '') {\n dom.remove(node);\n } else {\n if (isEmptyAnchor(dom, node)) {\n dom.remove(node);\n }\n }\n }\n };\n var normalizeZwspOffset = function (start, container, offset) {\n if (NodeType.isText(container) === false) {\n return offset;\n } else if (start) {\n return offset === 1 && container.data.charAt(offset - 1) === Zwsp.ZWSP ? 0 : offset;\n } else {\n return offset === container.data.length - 1 && container.data.charAt(offset) === Zwsp.ZWSP ? container.data.length : offset;\n }\n };\n var includeZwspInRange = function (rng) {\n var newRng = rng.cloneRange();\n newRng.setStart(rng.startContainer, normalizeZwspOffset(true, rng.startContainer, rng.startOffset));\n newRng.setEnd(rng.endContainer, normalizeZwspOffset(false, rng.endContainer, rng.endOffset));\n return newRng;\n };\n var trimLeadingLineBreaks = function (node) {\n do {\n if (NodeType.isText(node)) {\n node.nodeValue = node.nodeValue.replace(/^[\\r\\n]+/, '');\n }\n node = node.firstChild;\n } while (node);\n };\n var getEditableRoot$1 = function (dom, node) {\n var root = dom.getRoot();\n var parent, editableRoot;\n parent = node;\n while (parent !== root && dom.getContentEditable(parent) !== 'false') {\n if (dom.getContentEditable(parent) === 'true') {\n editableRoot = parent;\n }\n parent = parent.parentNode;\n }\n return parent !== root ? editableRoot : root;\n };\n var applyAttributes = function (editor, node, forcedRootBlockAttrs) {\n Option.from(forcedRootBlockAttrs.style).map(editor.dom.parseStyle).each(function (attrStyles) {\n var currentStyles = getAllRaw(Element.fromDom(node));\n var newStyles = __assign(__assign({}, currentStyles), attrStyles);\n editor.dom.setStyles(node, newStyles);\n });\n var attrClassesOpt = Option.from(forcedRootBlockAttrs.class).map(function (attrClasses) {\n return attrClasses.split(/\\s+/);\n });\n var currentClassesOpt = Option.from(node.className).map(function (currentClasses) {\n return filter(currentClasses.split(/\\s+/), function (clazz) {\n return clazz !== '';\n });\n });\n lift2(attrClassesOpt, currentClassesOpt, function (attrClasses, currentClasses) {\n var filteredClasses = filter(currentClasses, function (clazz) {\n return !contains(attrClasses, clazz);\n });\n var newClasses = __spreadArrays(attrClasses, filteredClasses);\n editor.dom.setAttrib(node, 'class', newClasses.join(' '));\n });\n var appliedAttrs = [\n 'style',\n 'class'\n ];\n var remainingAttrs = bifilter(forcedRootBlockAttrs, function (_, attrs) {\n return !contains(appliedAttrs, attrs);\n }).t;\n editor.dom.setAttribs(node, remainingAttrs);\n };\n var setForcedBlockAttrs = function (editor, node) {\n var forcedRootBlockName = Settings.getForcedRootBlock(editor);\n if (forcedRootBlockName && forcedRootBlockName.toLowerCase() === node.tagName.toLowerCase()) {\n var forcedRootBlockAttrs = Settings.getForcedRootBlockAttrs(editor);\n applyAttributes(editor, node, forcedRootBlockAttrs);\n }\n };\n var wrapSelfAndSiblingsInDefaultBlock = function (editor, newBlockName, rng, container, offset) {\n var newBlock, parentBlock, startNode, node, next, rootBlockName;\n var blockName = newBlockName || 'P';\n var dom = editor.dom, editableRoot = getEditableRoot$1(dom, container);\n parentBlock = dom.getParent(container, dom.isBlock);\n if (!parentBlock || !canSplitBlock(dom, parentBlock)) {\n parentBlock = parentBlock || editableRoot;\n if (parentBlock === editor.getBody() || isTableCell$5(parentBlock)) {\n rootBlockName = parentBlock.nodeName.toLowerCase();\n } else {\n rootBlockName = parentBlock.parentNode.nodeName.toLowerCase();\n }\n if (!parentBlock.hasChildNodes()) {\n newBlock = dom.create(blockName);\n setForcedBlockAttrs(editor, newBlock);\n parentBlock.appendChild(newBlock);\n rng.setStart(newBlock, 0);\n rng.setEnd(newBlock, 0);\n return newBlock;\n }\n node = container;\n while (node.parentNode !== parentBlock) {\n node = node.parentNode;\n }\n while (node && !dom.isBlock(node)) {\n startNode = node;\n node = node.previousSibling;\n }\n if (startNode && editor.schema.isValidChild(rootBlockName, blockName.toLowerCase())) {\n newBlock = dom.create(blockName);\n setForcedBlockAttrs(editor, newBlock);\n startNode.parentNode.insertBefore(newBlock, startNode);\n node = startNode;\n while (node && !dom.isBlock(node)) {\n next = node.nextSibling;\n newBlock.appendChild(node);\n node = next;\n }\n rng.setStart(container, offset);\n rng.setEnd(container, offset);\n }\n }\n return container;\n };\n var addBrToBlockIfNeeded = function (dom, block) {\n var lastChild;\n block.normalize();\n lastChild = block.lastChild;\n if (!lastChild || /^(left|right)$/gi.test(dom.getStyle(lastChild, 'float', true))) {\n dom.add(block, 'br');\n }\n };\n var insert$2 = function (editor, evt) {\n var tmpRng, editableRoot, container, offset, parentBlock, shiftKey;\n var newBlock, fragment, containerBlock, parentBlockName, containerBlockName, newBlockName, isAfterLastNodeInContainer;\n var dom = editor.dom;\n var schema = editor.schema, nonEmptyElementsMap = schema.getNonEmptyElements();\n var rng = editor.selection.getRng();\n var createNewBlock = function (name) {\n var node = container, block, clonedNode, caretNode;\n var textInlineElements = schema.getTextInlineElements();\n if (name || parentBlockName === 'TABLE' || parentBlockName === 'HR') {\n block = dom.create(name || newBlockName);\n } else {\n block = parentBlock.cloneNode(false);\n }\n caretNode = block;\n if (Settings.shouldKeepStyles(editor) === false) {\n dom.setAttrib(block, 'style', null);\n dom.setAttrib(block, 'class', null);\n } else {\n do {\n if (textInlineElements[node.nodeName]) {\n if (isCaretNode(node) || Bookmarks.isBookmarkNode(node)) {\n continue;\n }\n clonedNode = node.cloneNode(false);\n dom.setAttrib(clonedNode, 'id', '');\n if (block.hasChildNodes()) {\n clonedNode.appendChild(block.firstChild);\n block.appendChild(clonedNode);\n } else {\n caretNode = clonedNode;\n block.appendChild(clonedNode);\n }\n }\n } while ((node = node.parentNode) && node !== editableRoot);\n }\n setForcedBlockAttrs(editor, block);\n emptyBlock(caretNode);\n return block;\n };\n var isCaretAtStartOrEndOfBlock = function (start) {\n var walker, node, name, normalizedOffset;\n normalizedOffset = normalizeZwspOffset(start, container, offset);\n if (NodeType.isText(container) && (start ? normalizedOffset > 0 : normalizedOffset < container.nodeValue.length)) {\n return false;\n }\n if (container.parentNode === parentBlock && isAfterLastNodeInContainer && !start) {\n return true;\n }\n if (start && NodeType.isElement(container) && container === parentBlock.firstChild) {\n return true;\n }\n if (containerAndSiblingName(container, 'TABLE') || containerAndSiblingName(container, 'HR')) {\n return isAfterLastNodeInContainer && !start || !isAfterLastNodeInContainer && start;\n }\n walker = new TreeWalker(container, parentBlock);\n if (NodeType.isText(container)) {\n if (start && normalizedOffset === 0) {\n walker.prev();\n } else if (!start && normalizedOffset === container.nodeValue.length) {\n walker.next();\n }\n }\n while (node = walker.current()) {\n if (NodeType.isElement(node)) {\n if (!node.getAttribute('data-mce-bogus')) {\n name = node.nodeName.toLowerCase();\n if (nonEmptyElementsMap[name] && name !== 'br') {\n return false;\n }\n }\n } else if (NodeType.isText(node) && !/^[ \\t\\r\\n]*$/.test(node.nodeValue)) {\n return false;\n }\n if (start) {\n walker.prev();\n } else {\n walker.next();\n }\n }\n return true;\n };\n var insertNewBlockAfter = function () {\n if (/^(H[1-6]|PRE|FIGURE)$/.test(parentBlockName) && containerBlockName !== 'HGROUP') {\n newBlock = createNewBlock(newBlockName);\n } else {\n newBlock = createNewBlock();\n }\n if (Settings.shouldEndContainerOnEmptyBlock(editor) && canSplitBlock(dom, containerBlock) && dom.isEmpty(parentBlock)) {\n newBlock = dom.split(containerBlock, parentBlock);\n } else {\n dom.insertAfter(newBlock, parentBlock);\n }\n NewLineUtils.moveToCaretPosition(editor, newBlock);\n };\n NormalizeRange.normalize(dom, rng).each(function (normRng) {\n rng.setStart(normRng.startContainer, normRng.startOffset);\n rng.setEnd(normRng.endContainer, normRng.endOffset);\n });\n container = rng.startContainer;\n offset = rng.startOffset;\n newBlockName = Settings.getForcedRootBlock(editor);\n shiftKey = evt.shiftKey;\n if (NodeType.isElement(container) && container.hasChildNodes()) {\n isAfterLastNodeInContainer = offset > container.childNodes.length - 1;\n container = container.childNodes[Math.min(offset, container.childNodes.length - 1)] || container;\n if (isAfterLastNodeInContainer && NodeType.isText(container)) {\n offset = container.nodeValue.length;\n } else {\n offset = 0;\n }\n }\n editableRoot = getEditableRoot$1(dom, container);\n if (!editableRoot) {\n return;\n }\n if (newBlockName && !shiftKey || !newBlockName && shiftKey) {\n container = wrapSelfAndSiblingsInDefaultBlock(editor, newBlockName, rng, container, offset);\n }\n parentBlock = dom.getParent(container, dom.isBlock);\n containerBlock = parentBlock ? dom.getParent(parentBlock.parentNode, dom.isBlock) : null;\n parentBlockName = parentBlock ? parentBlock.nodeName.toUpperCase() : '';\n containerBlockName = containerBlock ? containerBlock.nodeName.toUpperCase() : '';\n if (containerBlockName === 'LI' && !evt.ctrlKey) {\n parentBlock = containerBlock;\n containerBlock = containerBlock.parentNode;\n parentBlockName = containerBlockName;\n }\n if (/^(LI|DT|DD)$/.test(parentBlockName)) {\n if (dom.isEmpty(parentBlock)) {\n InsertLi.insert(editor, createNewBlock, containerBlock, parentBlock, newBlockName);\n return;\n }\n }\n if (newBlockName && parentBlock === editor.getBody()) {\n return;\n }\n newBlockName = newBlockName || 'P';\n if (isCaretContainerBlock(parentBlock)) {\n newBlock = showCaretContainerBlock(parentBlock);\n if (dom.isEmpty(parentBlock)) {\n emptyBlock(parentBlock);\n }\n setForcedBlockAttrs(editor, newBlock);\n NewLineUtils.moveToCaretPosition(editor, newBlock);\n } else if (isCaretAtStartOrEndOfBlock()) {\n insertNewBlockAfter();\n } else if (isCaretAtStartOrEndOfBlock(true)) {\n newBlock = parentBlock.parentNode.insertBefore(createNewBlock(), parentBlock);\n NewLineUtils.moveToCaretPosition(editor, containerAndSiblingName(parentBlock, 'HR') ? newBlock : parentBlock);\n } else {\n tmpRng = includeZwspInRange(rng).cloneRange();\n tmpRng.setEndAfter(parentBlock);\n fragment = tmpRng.extractContents();\n trimZwsp(fragment);\n trimLeadingLineBreaks(fragment);\n newBlock = fragment.firstChild;\n dom.insertAfter(fragment, parentBlock);\n trimInlineElementsOnLeftSideOfBlock(dom, nonEmptyElementsMap, newBlock);\n addBrToBlockIfNeeded(dom, parentBlock);\n if (dom.isEmpty(parentBlock)) {\n emptyBlock(parentBlock);\n }\n newBlock.normalize();\n if (dom.isEmpty(newBlock)) {\n dom.remove(newBlock);\n insertNewBlockAfter();\n } else {\n setForcedBlockAttrs(editor, newBlock);\n NewLineUtils.moveToCaretPosition(editor, newBlock);\n }\n }\n dom.setAttrib(newBlock, 'id', '');\n editor.fire('NewBlock', { newBlock: newBlock });\n };\n var InsertBlock = { insert: insert$2 };\n\n var matchesSelector = function (editor, selector) {\n return NewLineUtils.getParentBlock(editor).filter(function (parentBlock) {\n return selector.length > 0 && is$1(Element.fromDom(parentBlock), selector);\n }).isSome();\n };\n var shouldInsertBr = function (editor) {\n return matchesSelector(editor, Settings.getBrNewLineSelector(editor));\n };\n var shouldBlockNewLine = function (editor) {\n return matchesSelector(editor, Settings.getNoNewLineSelector(editor));\n };\n var ContextSelectors = {\n shouldInsertBr: shouldInsertBr,\n shouldBlockNewLine: shouldBlockNewLine\n };\n\n var newLineAction = Adt.generate([\n { br: [] },\n { block: [] },\n { none: [] }\n ]);\n var shouldBlockNewLine$1 = function (editor, shiftKey) {\n return ContextSelectors.shouldBlockNewLine(editor);\n };\n var isBrMode = function (requiredState) {\n return function (editor, shiftKey) {\n var brMode = Settings.getForcedRootBlock(editor) === '';\n return brMode === requiredState;\n };\n };\n var inListBlock = function (requiredState) {\n return function (editor, shiftKey) {\n return NewLineUtils.isListItemParentBlock(editor) === requiredState;\n };\n };\n var inBlock = function (blockName, requiredState) {\n return function (editor, shiftKey) {\n var state = NewLineUtils.getParentBlockName(editor) === blockName.toUpperCase();\n return state === requiredState;\n };\n };\n var inPreBlock = function (requiredState) {\n return inBlock('pre', requiredState);\n };\n var inSummaryBlock = function () {\n return inBlock('summary', true);\n };\n var shouldPutBrInPre$1 = function (requiredState) {\n return function (editor, shiftKey) {\n return Settings.shouldPutBrInPre(editor) === requiredState;\n };\n };\n var inBrContext = function (editor, shiftKey) {\n return ContextSelectors.shouldInsertBr(editor);\n };\n var hasShiftKey = function (editor, shiftKey) {\n return shiftKey;\n };\n var canInsertIntoEditableRoot = function (editor) {\n var forcedRootBlock = Settings.getForcedRootBlock(editor);\n var rootEditable = NewLineUtils.getEditableRoot(editor.dom, editor.selection.getStart());\n return rootEditable && editor.schema.isValidChild(rootEditable.nodeName, forcedRootBlock ? forcedRootBlock : 'P');\n };\n var match$2 = function (predicates, action) {\n return function (editor, shiftKey) {\n var isMatch = foldl(predicates, function (res, p) {\n return res && p(editor, shiftKey);\n }, true);\n return isMatch ? Option.some(action) : Option.none();\n };\n };\n var getAction$1 = function (editor, evt) {\n return LazyEvaluator.evaluateUntil([\n match$2([shouldBlockNewLine$1], newLineAction.none()),\n match$2([inSummaryBlock()], newLineAction.br()),\n match$2([\n inPreBlock(true),\n shouldPutBrInPre$1(false),\n hasShiftKey\n ], newLineAction.br()),\n match$2([\n inPreBlock(true),\n shouldPutBrInPre$1(false)\n ], newLineAction.block()),\n match$2([\n inPreBlock(true),\n shouldPutBrInPre$1(true),\n hasShiftKey\n ], newLineAction.block()),\n match$2([\n inPreBlock(true),\n shouldPutBrInPre$1(true)\n ], newLineAction.br()),\n match$2([\n inListBlock(true),\n hasShiftKey\n ], newLineAction.br()),\n match$2([inListBlock(true)], newLineAction.block()),\n match$2([\n isBrMode(true),\n hasShiftKey,\n canInsertIntoEditableRoot\n ], newLineAction.block()),\n match$2([isBrMode(true)], newLineAction.br()),\n match$2([inBrContext], newLineAction.br()),\n match$2([\n isBrMode(false),\n hasShiftKey\n ], newLineAction.br()),\n match$2([canInsertIntoEditableRoot], newLineAction.block())\n ], [\n editor,\n evt.shiftKey\n ]).getOr(newLineAction.none());\n };\n var NewLineAction = { getAction: getAction$1 };\n\n var insert$3 = function (editor, evt) {\n NewLineAction.getAction(editor, evt).fold(function () {\n InsertBr.insert(editor, evt);\n }, function () {\n InsertBlock.insert(editor, evt);\n }, noop);\n };\n var InsertNewLine = { insert: insert$3 };\n\n var endTypingLevel = function (undoManager) {\n if (undoManager.typing) {\n undoManager.typing = false;\n undoManager.add();\n }\n };\n var handleEnterKeyEvent = function (editor, event) {\n if (event.isDefaultPrevented()) {\n return;\n }\n event.preventDefault();\n endTypingLevel(editor.undoManager);\n editor.undoManager.transact(function () {\n if (editor.selection.isCollapsed() === false) {\n editor.execCommand('Delete');\n }\n InsertNewLine.insert(editor, event);\n });\n };\n var setup$9 = function (editor) {\n editor.on('keydown', function (event) {\n if (event.keyCode === VK.ENTER) {\n handleEnterKeyEvent(editor, event);\n }\n });\n };\n var EnterKey = { setup: setup$9 };\n\n var insertTextAtPosition = function (text, pos) {\n var container = pos.container();\n var offset = pos.offset();\n if (NodeType.isText(container)) {\n container.insertData(offset, text);\n return Option.some(CaretPosition(container, offset + text.length));\n } else {\n return getElementFromPosition(pos).map(function (elm) {\n var textNode = Element.fromText(text);\n if (pos.isAtEnd()) {\n after(elm, textNode);\n } else {\n before(elm, textNode);\n }\n return CaretPosition(textNode.dom(), text.length);\n });\n }\n };\n var insertNbspAtPosition = curry(insertTextAtPosition, '\\xA0');\n var insertSpaceAtPosition = curry(insertTextAtPosition, ' ');\n\n var navigateIgnoreEmptyTextNodes = function (forward, root, from) {\n return CaretFinder.navigateIgnore(forward, root, from, isEmptyText);\n };\n var getClosestBlock = function (root, pos) {\n return find(Parents.parentsAndSelf(Element.fromDom(pos.container()), root), isBlock);\n };\n var isAtBeforeAfterBlockBoundary = function (forward, root, pos) {\n return navigateIgnoreEmptyTextNodes(forward, root.dom(), pos).forall(function (newPos) {\n return getClosestBlock(root, pos).fold(function () {\n return isInSameBlock(newPos, pos, root.dom()) === false;\n }, function (fromBlock) {\n return isInSameBlock(newPos, pos, root.dom()) === false && contains$3(fromBlock, Element.fromDom(newPos.container()));\n });\n });\n };\n var isAtBlockBoundary = function (forward, root, pos) {\n return getClosestBlock(root, pos).fold(function () {\n return navigateIgnoreEmptyTextNodes(forward, root.dom(), pos).forall(function (newPos) {\n return isInSameBlock(newPos, pos, root.dom()) === false;\n });\n }, function (parent) {\n return navigateIgnoreEmptyTextNodes(forward, parent.dom(), pos).isNone();\n });\n };\n var isAtStartOfBlock = curry(isAtBlockBoundary, false);\n var isAtEndOfBlock = curry(isAtBlockBoundary, true);\n var isBeforeBlock = curry(isAtBeforeAfterBlockBoundary, false);\n var isAfterBlock = curry(isAtBeforeAfterBlockBoundary, true);\n\n var nbsp = '\\xA0';\n var isInMiddleOfText = function (pos) {\n return CaretPosition.isTextPosition(pos) && !pos.isAtStart() && !pos.isAtEnd();\n };\n var getClosestBlock$1 = function (root, pos) {\n var parentBlocks = filter(Parents.parentsAndSelf(Element.fromDom(pos.container()), root), isBlock);\n return head(parentBlocks).getOr(root);\n };\n var hasSpaceBefore = function (root, pos) {\n if (isInMiddleOfText(pos)) {\n return isAfterSpace(pos);\n } else {\n return isAfterSpace(pos) || CaretFinder.prevPosition(getClosestBlock$1(root, pos).dom(), pos).exists(isAfterSpace);\n }\n };\n var hasSpaceAfter = function (root, pos) {\n if (isInMiddleOfText(pos)) {\n return isBeforeSpace(pos);\n } else {\n return isBeforeSpace(pos) || CaretFinder.nextPosition(getClosestBlock$1(root, pos).dom(), pos).exists(isBeforeSpace);\n }\n };\n var isPreValue = function (value) {\n return contains([\n 'pre',\n 'pre-wrap'\n ], value);\n };\n var isInPre = function (pos) {\n return getElementFromPosition(pos).bind(function (elm) {\n return closest(elm, isElement);\n }).exists(function (elm) {\n return isPreValue(get$1(elm, 'white-space'));\n });\n };\n var isAtBeginningOfBody = function (root, pos) {\n return CaretFinder.prevPosition(root.dom(), pos).isNone();\n };\n var isAtEndOfBody = function (root, pos) {\n return CaretFinder.nextPosition(root.dom(), pos).isNone();\n };\n var isAtLineBoundary = function (root, pos) {\n return isAtBeginningOfBody(root, pos) || isAtEndOfBody(root, pos) || isAtStartOfBlock(root, pos) || isAtEndOfBlock(root, pos) || isAfterBr(root, pos) || isBeforeBr(root, pos);\n };\n var needsToHaveNbsp = function (root, pos) {\n if (isInPre(pos)) {\n return false;\n } else {\n return isAtLineBoundary(root, pos) || hasSpaceBefore(root, pos) || hasSpaceAfter(root, pos);\n }\n };\n var needsToBeNbspLeft = function (root, pos) {\n if (isInPre(pos)) {\n return false;\n } else {\n return isAtStartOfBlock(root, pos) || isBeforeBlock(root, pos) || isAfterBr(root, pos) || hasSpaceBefore(root, pos);\n }\n };\n var leanRight = function (pos) {\n var container = pos.container();\n var offset = pos.offset();\n if (NodeType.isText(container) && offset < container.data.length) {\n return CaretPosition(container, offset + 1);\n } else {\n return pos;\n }\n };\n var needsToBeNbspRight = function (root, pos) {\n var afterPos = leanRight(pos);\n if (isInPre(afterPos)) {\n return false;\n } else {\n return isAtEndOfBlock(root, afterPos) || isAfterBlock(root, afterPos) || isBeforeBr(root, afterPos) || hasSpaceAfter(root, afterPos);\n }\n };\n var needsToBeNbsp = function (root, pos) {\n return needsToBeNbspLeft(root, pos) || needsToBeNbspRight(root, pos);\n };\n var isNbspAt = function (text, offset) {\n return isNbsp(text.charAt(offset));\n };\n var hasNbsp = function (pos) {\n var container = pos.container();\n return NodeType.isText(container) && contains$2(container.data, nbsp);\n };\n var normalizeNbspMiddle = function (text) {\n var chars = text.split('');\n return map(chars, function (chr, i) {\n if (isNbsp(chr) && i > 0 && i < chars.length - 1 && isContent$1(chars[i - 1]) && isContent$1(chars[i + 1])) {\n return ' ';\n } else {\n return chr;\n }\n }).join('');\n };\n var normalizeNbspAtStart = function (root, node) {\n var text = node.data;\n var firstPos = CaretPosition(node, 0);\n if (isNbspAt(text, 0) && !needsToBeNbsp(root, firstPos)) {\n node.data = ' ' + text.slice(1);\n return true;\n } else {\n return false;\n }\n };\n var normalizeNbspInMiddleOfTextNode = function (node) {\n var text = node.data;\n var newText = normalizeNbspMiddle(text);\n if (newText !== text) {\n node.data = newText;\n return true;\n } else {\n return false;\n }\n };\n var normalizeNbspAtEnd = function (root, node) {\n var text = node.data;\n var lastPos = CaretPosition(node, text.length - 1);\n if (isNbspAt(text, text.length - 1) && !needsToBeNbsp(root, lastPos)) {\n node.data = text.slice(0, -1) + ' ';\n return true;\n } else {\n return false;\n }\n };\n var normalizeNbsps = function (root, pos) {\n return Option.some(pos).filter(hasNbsp).bind(function (pos) {\n var container = pos.container();\n var normalized = normalizeNbspAtStart(root, container) || normalizeNbspInMiddleOfTextNode(container) || normalizeNbspAtEnd(root, container);\n return normalized ? Option.some(pos) : Option.none();\n });\n };\n var normalizeNbspsInEditor = function (editor) {\n var root = Element.fromDom(editor.getBody());\n if (editor.selection.isCollapsed()) {\n normalizeNbsps(root, CaretPosition.fromRangeStart(editor.selection.getRng())).each(function (pos) {\n editor.selection.setRng(pos.toRange());\n });\n }\n };\n\n var locationToCaretPosition = function (root) {\n return function (location) {\n return location.fold(function (element) {\n return CaretFinder.prevPosition(root.dom(), CaretPosition$1.before(element));\n }, function (element) {\n return CaretFinder.firstPositionIn(element);\n }, function (element) {\n return CaretFinder.lastPositionIn(element);\n }, function (element) {\n return CaretFinder.nextPosition(root.dom(), CaretPosition$1.after(element));\n });\n };\n };\n var insertInlineBoundarySpaceOrNbsp = function (root, pos) {\n return function (checkPos) {\n return needsToHaveNbsp(root, checkPos) ? insertNbspAtPosition(pos) : insertSpaceAtPosition(pos);\n };\n };\n var setSelection$1 = function (editor) {\n return function (pos) {\n editor.selection.setRng(pos.toRange());\n editor.nodeChanged();\n return true;\n };\n };\n var insertSpaceOrNbspAtSelection = function (editor) {\n var pos = CaretPosition$1.fromRangeStart(editor.selection.getRng());\n var root = Element.fromDom(editor.getBody());\n if (editor.selection.isCollapsed()) {\n var isInlineTarget = curry(InlineUtils.isInlineTarget, editor);\n var caretPosition = CaretPosition$1.fromRangeStart(editor.selection.getRng());\n return BoundaryLocation.readLocation(isInlineTarget, editor.getBody(), caretPosition).bind(locationToCaretPosition(root)).bind(insertInlineBoundarySpaceOrNbsp(root, pos)).exists(setSelection$1(editor));\n } else {\n return false;\n }\n };\n\n var executeKeydownOverride$2 = function (editor, evt) {\n MatchKeys.execute([{\n keyCode: VK.SPACEBAR,\n action: MatchKeys.action(insertSpaceOrNbspAtSelection, editor)\n }], evt).each(function (_) {\n evt.preventDefault();\n });\n };\n var setup$a = function (editor) {\n editor.on('keydown', function (evt) {\n if (evt.isDefaultPrevented() === false) {\n executeKeydownOverride$2(editor, evt);\n }\n });\n };\n var SpaceKey = { setup: setup$a };\n\n var findBlockCaretContainer = function (editor) {\n return descendant(Element.fromDom(editor.getBody()), '*[data-mce-caret]').fold(constant(null), function (elm) {\n return elm.dom();\n });\n };\n var removeIeControlRect = function (editor) {\n editor.selection.setRng(editor.selection.getRng());\n };\n var showBlockCaretContainer = function (editor, blockCaretContainer) {\n if (blockCaretContainer.hasAttribute('data-mce-caret')) {\n showCaretContainerBlock(blockCaretContainer);\n removeIeControlRect(editor);\n editor.selection.scrollIntoView(blockCaretContainer);\n }\n };\n var handleBlockContainer = function (editor, e) {\n var blockCaretContainer = findBlockCaretContainer(editor);\n if (!blockCaretContainer) {\n return;\n }\n if (e.type === 'compositionstart') {\n e.preventDefault();\n e.stopPropagation();\n showBlockCaretContainer(editor, blockCaretContainer);\n return;\n }\n if (hasContent(blockCaretContainer)) {\n showBlockCaretContainer(editor, blockCaretContainer);\n editor.undoManager.add();\n }\n };\n var setup$b = function (editor) {\n editor.on('keyup compositionstart', curry(handleBlockContainer, editor));\n };\n var CaretContainerInput = { setup: setup$b };\n\n var browser$4 = PlatformDetection$1.detect().browser;\n var setupIeInput = function (editor) {\n var keypressThrotter = first(function () {\n if (!editor.composing) {\n normalizeNbspsInEditor(editor);\n }\n }, 0);\n if (browser$4.isIE()) {\n editor.on('keypress', function (e) {\n keypressThrotter.throttle();\n });\n editor.on('remove', function (e) {\n keypressThrotter.cancel();\n });\n }\n };\n var setup$c = function (editor) {\n setupIeInput(editor);\n editor.on('input', function (e) {\n if (e.isComposing === false) {\n normalizeNbspsInEditor(editor);\n }\n });\n };\n\n var executeKeydownOverride$3 = function (editor, evt) {\n MatchKeys.execute([\n {\n keyCode: VK.END,\n action: moveToLineEndPoint(editor, true)\n },\n {\n keyCode: VK.HOME,\n action: moveToLineEndPoint(editor, false)\n }\n ], evt).each(function (_) {\n evt.preventDefault();\n });\n };\n var setup$d = function (editor) {\n editor.on('keydown', function (evt) {\n if (evt.isDefaultPrevented() === false) {\n executeKeydownOverride$3(editor, evt);\n }\n });\n };\n var HomeEndKeys = { setup: setup$d };\n\n var setup$e = function (editor) {\n var caret = BoundarySelection.setupSelectedState(editor);\n CaretContainerInput.setup(editor);\n ArrowKeys.setup(editor, caret);\n DeleteBackspaceKeys.setup(editor, caret);\n EnterKey.setup(editor);\n SpaceKey.setup(editor);\n setup$c(editor);\n HomeEndKeys.setup(editor);\n };\n var KeyboardOverrides = { setup: setup$e };\n\n function Quirks (editor) {\n var each = Tools.each;\n var BACKSPACE = VK.BACKSPACE, DELETE = VK.DELETE, dom = editor.dom, selection = editor.selection, settings = editor.settings, parser = editor.parser;\n var isGecko = Env.gecko, isIE = Env.ie, isWebKit = Env.webkit;\n var mceInternalUrlPrefix = 'data:text/mce-internal,';\n var mceInternalDataType = isIE ? 'Text' : 'URL';\n var setEditorCommandState = function (cmd, state) {\n try {\n editor.getDoc().execCommand(cmd, false, state);\n } catch (ex) {\n }\n };\n var isDefaultPrevented = function (e) {\n return e.isDefaultPrevented();\n };\n var setMceInternalContent = function (e) {\n var selectionHtml, internalContent;\n if (e.dataTransfer) {\n if (editor.selection.isCollapsed() && e.target.tagName === 'IMG') {\n selection.select(e.target);\n }\n selectionHtml = editor.selection.getContent();\n if (selectionHtml.length > 0) {\n internalContent = mceInternalUrlPrefix + escape(editor.id) + ',' + escape(selectionHtml);\n e.dataTransfer.setData(mceInternalDataType, internalContent);\n }\n }\n };\n var getMceInternalContent = function (e) {\n var internalContent;\n if (e.dataTransfer) {\n internalContent = e.dataTransfer.getData(mceInternalDataType);\n if (internalContent && internalContent.indexOf(mceInternalUrlPrefix) >= 0) {\n internalContent = internalContent.substr(mceInternalUrlPrefix.length).split(',');\n return {\n id: unescape(internalContent[0]),\n html: unescape(internalContent[1])\n };\n }\n }\n return null;\n };\n var insertClipboardContents = function (content, internal) {\n if (editor.queryCommandSupported('mceInsertClipboardContent')) {\n editor.execCommand('mceInsertClipboardContent', false, {\n content: content,\n internal: internal\n });\n } else {\n editor.execCommand('mceInsertContent', false, content);\n }\n };\n var emptyEditorWhenDeleting = function () {\n var serializeRng = function (rng) {\n var body = dom.create('body');\n var contents = rng.cloneContents();\n body.appendChild(contents);\n return selection.serializer.serialize(body, { format: 'html' });\n };\n var allContentsSelected = function (rng) {\n var selection = serializeRng(rng);\n var allRng = dom.createRng();\n allRng.selectNode(editor.getBody());\n var allSelection = serializeRng(allRng);\n return selection === allSelection;\n };\n editor.on('keydown', function (e) {\n var keyCode = e.keyCode;\n var isCollapsed, body;\n if (!isDefaultPrevented(e) && (keyCode === DELETE || keyCode === BACKSPACE)) {\n isCollapsed = editor.selection.isCollapsed();\n body = editor.getBody();\n if (isCollapsed && !dom.isEmpty(body)) {\n return;\n }\n if (!isCollapsed && !allContentsSelected(editor.selection.getRng())) {\n return;\n }\n e.preventDefault();\n editor.setContent('');\n if (body.firstChild && dom.isBlock(body.firstChild)) {\n editor.selection.setCursorLocation(body.firstChild, 0);\n } else {\n editor.selection.setCursorLocation(body, 0);\n }\n editor.nodeChanged();\n }\n });\n };\n var selectAll = function () {\n editor.shortcuts.add('meta+a', null, 'SelectAll');\n };\n var inputMethodFocus = function () {\n if (!editor.settings.content_editable) {\n dom.bind(editor.getDoc(), 'mousedown mouseup', function (e) {\n var rng;\n if (e.target === editor.getDoc().documentElement) {\n rng = selection.getRng();\n editor.getBody().focus();\n if (e.type === 'mousedown') {\n if (isCaretContainer(rng.startContainer)) {\n return;\n }\n selection.placeCaretAt(e.clientX, e.clientY);\n } else {\n selection.setRng(rng);\n }\n }\n });\n }\n };\n var removeHrOnBackspace = function () {\n editor.on('keydown', function (e) {\n if (!isDefaultPrevented(e) && e.keyCode === BACKSPACE) {\n if (!editor.getBody().getElementsByTagName('hr').length) {\n return;\n }\n if (selection.isCollapsed() && selection.getRng().startOffset === 0) {\n var node = selection.getNode();\n var previousSibling = node.previousSibling;\n if (node.nodeName === 'HR') {\n dom.remove(node);\n e.preventDefault();\n return;\n }\n if (previousSibling && previousSibling.nodeName && previousSibling.nodeName.toLowerCase() === 'hr') {\n dom.remove(previousSibling);\n e.preventDefault();\n }\n }\n }\n });\n };\n var focusBody = function () {\n if (!domGlobals.Range.prototype.getClientRects) {\n editor.on('mousedown', function (e) {\n if (!isDefaultPrevented(e) && e.target.nodeName === 'HTML') {\n var body_1 = editor.getBody();\n body_1.blur();\n Delay.setEditorTimeout(editor, function () {\n body_1.focus();\n });\n }\n });\n }\n };\n var selectControlElements = function () {\n editor.on('click', function (e) {\n var target = e.target;\n if (/^(IMG|HR)$/.test(target.nodeName) && dom.getContentEditableParent(target) !== 'false') {\n e.preventDefault();\n editor.selection.select(target);\n editor.nodeChanged();\n }\n if (target.nodeName === 'A' && dom.hasClass(target, 'mce-item-anchor')) {\n e.preventDefault();\n selection.select(target);\n }\n });\n };\n var removeStylesWhenDeletingAcrossBlockElements = function () {\n var getAttributeApplyFunction = function () {\n var template = dom.getAttribs(selection.getStart().cloneNode(false));\n return function () {\n var target = selection.getStart();\n if (target !== editor.getBody()) {\n dom.setAttrib(target, 'style', null);\n each(template, function (attr) {\n target.setAttributeNode(attr.cloneNode(true));\n });\n }\n };\n };\n var isSelectionAcrossElements = function () {\n return !selection.isCollapsed() && dom.getParent(selection.getStart(), dom.isBlock) !== dom.getParent(selection.getEnd(), dom.isBlock);\n };\n editor.on('keypress', function (e) {\n var applyAttributes;\n if (!isDefaultPrevented(e) && (e.keyCode === 8 || e.keyCode === 46) && isSelectionAcrossElements()) {\n applyAttributes = getAttributeApplyFunction();\n editor.getDoc().execCommand('delete', false, null);\n applyAttributes();\n e.preventDefault();\n return false;\n }\n });\n dom.bind(editor.getDoc(), 'cut', function (e) {\n var applyAttributes;\n if (!isDefaultPrevented(e) && isSelectionAcrossElements()) {\n applyAttributes = getAttributeApplyFunction();\n Delay.setEditorTimeout(editor, function () {\n applyAttributes();\n });\n }\n });\n };\n var disableBackspaceIntoATable = function () {\n editor.on('keydown', function (e) {\n if (!isDefaultPrevented(e) && e.keyCode === BACKSPACE) {\n if (selection.isCollapsed() && selection.getRng().startOffset === 0) {\n var previousSibling = selection.getNode().previousSibling;\n if (previousSibling && previousSibling.nodeName && previousSibling.nodeName.toLowerCase() === 'table') {\n e.preventDefault();\n return false;\n }\n }\n }\n });\n };\n var removeBlockQuoteOnBackSpace = function () {\n editor.on('keydown', function (e) {\n var rng, container, offset, root, parent;\n if (isDefaultPrevented(e) || e.keyCode !== VK.BACKSPACE) {\n return;\n }\n rng = selection.getRng();\n container = rng.startContainer;\n offset = rng.startOffset;\n root = dom.getRoot();\n parent = container;\n if (!rng.collapsed || offset !== 0) {\n return;\n }\n while (parent && parent.parentNode && parent.parentNode.firstChild === parent && parent.parentNode !== root) {\n parent = parent.parentNode;\n }\n if (parent.tagName === 'BLOCKQUOTE') {\n editor.formatter.toggle('blockquote', null, parent);\n rng = dom.createRng();\n rng.setStart(container, 0);\n rng.setEnd(container, 0);\n selection.setRng(rng);\n }\n });\n };\n var setGeckoEditingOptions = function () {\n var setOpts = function () {\n setEditorCommandState('StyleWithCSS', false);\n setEditorCommandState('enableInlineTableEditing', false);\n if (!settings.object_resizing) {\n setEditorCommandState('enableObjectResizing', false);\n }\n };\n if (!settings.readonly) {\n editor.on('BeforeExecCommand MouseDown', setOpts);\n }\n };\n var addBrAfterLastLinks = function () {\n var fixLinks = function () {\n each(dom.select('a'), function (node) {\n var parentNode = node.parentNode;\n var root = dom.getRoot();\n if (parentNode.lastChild === node) {\n while (parentNode && !dom.isBlock(parentNode)) {\n if (parentNode.parentNode.lastChild !== parentNode || parentNode === root) {\n return;\n }\n parentNode = parentNode.parentNode;\n }\n dom.add(parentNode, 'br', { 'data-mce-bogus': 1 });\n }\n });\n };\n editor.on('SetContent ExecCommand', function (e) {\n if (e.type === 'setcontent' || e.command === 'mceInsertLink') {\n fixLinks();\n }\n });\n };\n var setDefaultBlockType = function () {\n if (settings.forced_root_block) {\n editor.on('init', function () {\n setEditorCommandState('DefaultParagraphSeparator', settings.forced_root_block);\n });\n }\n };\n var normalizeSelection = function () {\n editor.on('keyup focusin mouseup', function (e) {\n if (!VK.modifierPressed(e)) {\n selection.normalize();\n }\n }, true);\n };\n var showBrokenImageIcon = function () {\n editor.contentStyles.push('img:-moz-broken {' + '-moz-force-broken-image-icon:1;' + 'min-width:24px;' + 'min-height:24px' + '}');\n };\n var restoreFocusOnKeyDown = function () {\n if (!editor.inline) {\n editor.on('keydown', function () {\n if (domGlobals.document.activeElement === domGlobals.document.body) {\n editor.getWin().focus();\n }\n });\n }\n };\n var bodyHeight = function () {\n if (!editor.inline) {\n editor.contentStyles.push('body {min-height: 150px}');\n editor.on('click', function (e) {\n var rng;\n if (e.target.nodeName === 'HTML') {\n if (Env.ie > 11) {\n editor.getBody().focus();\n return;\n }\n rng = editor.selection.getRng();\n editor.getBody().focus();\n editor.selection.setRng(rng);\n editor.selection.normalize();\n editor.nodeChanged();\n }\n });\n }\n };\n var blockCmdArrowNavigation = function () {\n if (Env.mac) {\n editor.on('keydown', function (e) {\n if (VK.metaKeyPressed(e) && !e.shiftKey && (e.keyCode === 37 || e.keyCode === 39)) {\n e.preventDefault();\n editor.selection.getSel().modify('move', e.keyCode === 37 ? 'backward' : 'forward', 'lineboundary');\n }\n });\n }\n };\n var disableAutoUrlDetect = function () {\n setEditorCommandState('AutoUrlDetect', false);\n };\n var tapLinksAndImages = function () {\n editor.on('click', function (e) {\n var elm = e.target;\n do {\n if (elm.tagName === 'A') {\n e.preventDefault();\n return;\n }\n } while (elm = elm.parentNode);\n });\n editor.contentStyles.push('.mce-content-body {-webkit-touch-callout: none}');\n };\n var blockFormSubmitInsideEditor = function () {\n editor.on('init', function () {\n editor.dom.bind(editor.getBody(), 'submit', function (e) {\n e.preventDefault();\n });\n });\n };\n var removeAppleInterchangeBrs = function () {\n parser.addNodeFilter('br', function (nodes) {\n var i = nodes.length;\n while (i--) {\n if (nodes[i].attr('class') === 'Apple-interchange-newline') {\n nodes[i].remove();\n }\n }\n });\n };\n var ieInternalDragAndDrop = function () {\n editor.on('dragstart', function (e) {\n setMceInternalContent(e);\n });\n editor.on('drop', function (e) {\n if (!isDefaultPrevented(e)) {\n var internalContent = getMceInternalContent(e);\n if (internalContent && internalContent.id !== editor.id) {\n e.preventDefault();\n var rng = CaretRangeFromPoint.fromPoint(e.x, e.y, editor.getDoc());\n selection.setRng(rng);\n insertClipboardContents(internalContent.html, true);\n }\n }\n });\n };\n var refreshContentEditable = function () {\n };\n var isHidden = function () {\n var sel;\n if (!isGecko || editor.removed) {\n return 0;\n }\n sel = editor.selection.getSel();\n return !sel || !sel.rangeCount || sel.rangeCount === 0;\n };\n removeBlockQuoteOnBackSpace();\n emptyEditorWhenDeleting();\n if (!Env.windowsPhone) {\n normalizeSelection();\n }\n if (isWebKit) {\n inputMethodFocus();\n selectControlElements();\n setDefaultBlockType();\n blockFormSubmitInsideEditor();\n disableBackspaceIntoATable();\n removeAppleInterchangeBrs();\n if (Env.iOS) {\n restoreFocusOnKeyDown();\n bodyHeight();\n tapLinksAndImages();\n } else {\n selectAll();\n }\n }\n if (Env.ie >= 11) {\n bodyHeight();\n disableBackspaceIntoATable();\n }\n if (Env.ie) {\n selectAll();\n disableAutoUrlDetect();\n ieInternalDragAndDrop();\n }\n if (isGecko) {\n removeHrOnBackspace();\n focusBody();\n removeStylesWhenDeletingAcrossBlockElements();\n setGeckoEditingOptions();\n addBrAfterLastLinks();\n showBrokenImageIcon();\n blockCmdArrowNavigation();\n disableBackspaceIntoATable();\n }\n return {\n refreshContentEditable: refreshContentEditable,\n isHidden: isHidden\n };\n }\n\n var isTextBlockNode = function (node) {\n return NodeType.isElement(node) && isTextBlock(Element.fromDom(node));\n };\n var normalizeSelection$1 = function (editor) {\n var rng = editor.selection.getRng();\n var startPos = CaretPosition.fromRangeStart(rng);\n var endPos = CaretPosition.fromRangeEnd(rng);\n if (CaretPosition.isElementPosition(startPos)) {\n var container = startPos.container();\n if (isTextBlockNode(container)) {\n CaretFinder.firstPositionIn(container).each(function (pos) {\n return rng.setStart(pos.container(), pos.offset());\n });\n }\n }\n if (CaretPosition.isElementPosition(endPos)) {\n var container = startPos.container();\n if (isTextBlockNode(container)) {\n CaretFinder.lastPositionIn(container).each(function (pos) {\n return rng.setEnd(pos.container(), pos.offset());\n });\n }\n }\n editor.selection.setRng(RangeNormalizer.normalize(rng));\n };\n var setup$f = function (editor) {\n editor.on('click', function (e) {\n if (e.detail >= 3) {\n normalizeSelection$1(editor);\n }\n });\n };\n\n var preventSummaryToggle = function (editor) {\n editor.on('click', function (e) {\n if (editor.dom.getParent(e.target, 'details')) {\n e.preventDefault();\n }\n });\n };\n var filterDetails = function (editor) {\n editor.parser.addNodeFilter('details', function (elms) {\n each(elms, function (details) {\n details.attr('data-mce-open', details.attr('open'));\n details.attr('open', 'open');\n });\n });\n editor.serializer.addNodeFilter('details', function (elms) {\n each(elms, function (details) {\n var open = details.attr('data-mce-open');\n details.attr('open', isString(open) ? open : null);\n details.attr('data-mce-open', null);\n });\n });\n };\n var setup$g = function (editor) {\n preventSummaryToggle(editor);\n filterDetails(editor);\n };\n\n var DOM$2 = DOMUtils$1.DOM;\n var appendStyle = function (editor, text) {\n var head = Element.fromDom(editor.getDoc().head);\n var tag = Element.fromTag('style');\n set(tag, 'type', 'text/css');\n append(tag, Element.fromText(text));\n append(head, tag);\n };\n var createParser = function (editor) {\n var parser = DomParser(editor.settings, editor.schema);\n parser.addAttributeFilter('src,href,style,tabindex', function (nodes, name) {\n var i = nodes.length, node;\n var dom = editor.dom;\n var value, internalName;\n while (i--) {\n node = nodes[i];\n value = node.attr(name);\n internalName = 'data-mce-' + name;\n if (!node.attributes.map[internalName]) {\n if (value.indexOf('data:') === 0 || value.indexOf('blob:') === 0) {\n continue;\n }\n if (name === 'style') {\n value = dom.serializeStyle(dom.parseStyle(value), node.name);\n if (!value.length) {\n value = null;\n }\n node.attr(internalName, value);\n node.attr(name, value);\n } else if (name === 'tabindex') {\n node.attr(internalName, value);\n node.attr(name, null);\n } else {\n node.attr(internalName, editor.convertURL(value, name, node.name));\n }\n }\n }\n });\n parser.addNodeFilter('script', function (nodes) {\n var i = nodes.length, node, type;\n while (i--) {\n node = nodes[i];\n type = node.attr('type') || 'no/type';\n if (type.indexOf('mce-') !== 0) {\n node.attr('type', 'mce-' + type);\n }\n }\n });\n parser.addNodeFilter('#cdata', function (nodes) {\n var i = nodes.length, node;\n while (i--) {\n node = nodes[i];\n node.type = 8;\n node.name = '#comment';\n node.value = '[CDATA[' + node.value + ']]';\n }\n });\n parser.addNodeFilter('p,h1,h2,h3,h4,h5,h6,div', function (nodes) {\n var i = nodes.length, node;\n var nonEmptyElements = editor.schema.getNonEmptyElements();\n while (i--) {\n node = nodes[i];\n if (node.isEmpty(nonEmptyElements) && node.getAll('br').length === 0) {\n node.append(new Node$1('br', 1)).shortEnded = true;\n }\n }\n });\n return parser;\n };\n var autoFocus = function (editor) {\n if (editor.settings.auto_focus) {\n Delay.setEditorTimeout(editor, function () {\n var focusEditor;\n if (editor.settings.auto_focus === true) {\n focusEditor = editor;\n } else {\n focusEditor = editor.editorManager.get(editor.settings.auto_focus);\n }\n if (!focusEditor.destroyed) {\n focusEditor.focus();\n }\n }, 100);\n }\n };\n var initEditor = function (editor) {\n editor.bindPendingEventDelegates();\n editor.initialized = true;\n editor.fire('init');\n editor.focus(true);\n editor.nodeChanged({ initial: true });\n editor.execCallback('init_instance_callback', editor);\n autoFocus(editor);\n };\n var getStyleSheetLoader = function (editor) {\n return editor.inline ? DOM$2.styleSheetLoader : editor.dom.styleSheetLoader;\n };\n var initContentBody = function (editor, skipWrite) {\n var settings = editor.settings;\n var targetElm = editor.getElement();\n var doc = editor.getDoc(), body, contentCssText;\n if (!settings.inline) {\n editor.getElement().style.visibility = editor.orgVisibility;\n }\n if (!skipWrite && !settings.content_editable) {\n doc.open();\n doc.write(editor.iframeHTML);\n doc.close();\n }\n if (settings.content_editable) {\n editor.on('remove', function () {\n var bodyEl = this.getBody();\n DOM$2.removeClass(bodyEl, 'mce-content-body');\n DOM$2.removeClass(bodyEl, 'mce-edit-focus');\n DOM$2.setAttrib(bodyEl, 'contentEditable', null);\n });\n DOM$2.addClass(targetElm, 'mce-content-body');\n editor.contentDocument = doc = settings.content_document || domGlobals.document;\n editor.contentWindow = settings.content_window || domGlobals.window;\n editor.bodyElement = targetElm;\n settings.content_document = settings.content_window = null;\n settings.root_name = targetElm.nodeName.toLowerCase();\n }\n body = editor.getBody();\n body.disabled = true;\n editor.readonly = settings.readonly;\n if (!editor.readonly) {\n if (editor.inline && DOM$2.getStyle(body, 'position', true) === 'static') {\n body.style.position = 'relative';\n }\n body.contentEditable = editor.getParam('content_editable_state', true);\n }\n body.disabled = false;\n editor.editorUpload = EditorUpload(editor);\n editor.schema = Schema(settings);\n editor.dom = DOMUtils$1(doc, {\n keep_values: true,\n url_converter: editor.convertURL,\n url_converter_scope: editor,\n hex_colors: settings.force_hex_style_colors,\n class_filter: settings.class_filter,\n update_styles: true,\n root_element: editor.inline ? editor.getBody() : null,\n collect: settings.content_editable,\n schema: editor.schema,\n contentCssCors: Settings.shouldUseContentCssCors(editor),\n onSetAttrib: function (e) {\n editor.fire('SetAttrib', e);\n }\n });\n editor.parser = createParser(editor);\n editor.serializer = DomSerializer$1(settings, editor);\n editor.selection = Selection$1(editor.dom, editor.getWin(), editor.serializer, editor);\n editor.annotator = Annotator(editor);\n editor.formatter = Formatter(editor);\n editor.undoManager = UndoManager(editor);\n editor._nodeChangeDispatcher = new NodeChange(editor);\n editor._selectionOverrides = SelectionOverrides(editor);\n setup$g(editor);\n setup$f(editor);\n KeyboardOverrides.setup(editor);\n ForceBlocks.setup(editor);\n editor.fire('PreInit');\n if (!settings.browser_spellcheck && !settings.gecko_spellcheck) {\n doc.body.spellcheck = false;\n DOM$2.setAttrib(body, 'spellcheck', 'false');\n }\n editor.quirks = Quirks(editor);\n editor.fire('PostRender');\n if (settings.directionality) {\n body.dir = settings.directionality;\n }\n if (settings.nowrap) {\n body.style.whiteSpace = 'nowrap';\n }\n if (settings.protect) {\n editor.on('BeforeSetContent', function (e) {\n Tools.each(settings.protect, function (pattern) {\n e.content = e.content.replace(pattern, function (str) {\n return '';\n });\n });\n });\n }\n editor.on('SetContent', function () {\n editor.addVisual(editor.getBody());\n });\n editor.load({\n initial: true,\n format: 'html'\n });\n editor.startContent = editor.getContent({ format: 'raw' });\n editor.on('compositionstart compositionend', function (e) {\n editor.composing = e.type === 'compositionstart';\n });\n if (editor.contentStyles.length > 0) {\n contentCssText = '';\n Tools.each(editor.contentStyles, function (style) {\n contentCssText += style + '\\r\\n';\n });\n editor.dom.addStyle(contentCssText);\n }\n getStyleSheetLoader(editor).loadAll(editor.contentCSS, function (_) {\n initEditor(editor);\n }, function (urls) {\n initEditor(editor);\n });\n if (settings.content_style) {\n appendStyle(editor, settings.content_style);\n }\n };\n var InitContentBody = { initContentBody: initContentBody };\n\n var DOM$3 = DOMUtils$1.DOM;\n var relaxDomain = function (editor, ifr) {\n if (domGlobals.document.domain !== domGlobals.window.location.hostname && Env.ie && Env.ie < 12) {\n var bodyUuid = Uuid.uuid('mce');\n editor[bodyUuid] = function () {\n InitContentBody.initContentBody(editor);\n };\n var domainRelaxUrl = 'javascript:(function(){' + 'document.open();document.domain=\"' + domGlobals.document.domain + '\";' + 'var ed = window.parent.tinymce.get(\"' + editor.id + '\");document.write(ed.iframeHTML);' + 'document.close();ed.' + bodyUuid + '(true);})()';\n DOM$3.setAttrib(ifr, 'src', domainRelaxUrl);\n return true;\n }\n return false;\n };\n var normalizeHeight = function (height) {\n var normalizedHeight = typeof height === 'number' ? height + 'px' : height;\n return normalizedHeight ? normalizedHeight : '';\n };\n var createIframeElement = function (id, title, height, customAttrs) {\n var iframe = Element.fromTag('iframe');\n setAll(iframe, customAttrs);\n setAll(iframe, {\n id: id + '_ifr',\n frameBorder: '0',\n allowTransparency: 'true',\n title: title\n });\n setAll$1(iframe, {\n width: '100%',\n height: normalizeHeight(height),\n display: 'block'\n });\n return iframe;\n };\n var getIframeHtml = function (editor) {\n var bodyId, bodyClass, iframeHTML;\n iframeHTML = Settings.getDocType(editor) + '';\n if (Settings.getDocumentBaseUrl(editor) !== editor.documentBaseUrl) {\n iframeHTML += '';\n }\n iframeHTML += '';\n bodyId = Settings.getBodyId(editor);\n bodyClass = Settings.getBodyClass(editor);\n if (Settings.getContentSecurityPolicy(editor)) {\n iframeHTML += '';\n }\n iframeHTML += '
';\n return iframeHTML;\n };\n var createIframe = function (editor, o) {\n var title = editor.editorManager.translate('Rich Text Area. Press ALT-F9 for menu. ' + 'Press ALT-F10 for toolbar. Press ALT-0 for help');\n var ifr = createIframeElement(editor.id, title, o.height, Settings.getIframeAttrs(editor)).dom();\n ifr.onload = function () {\n ifr.onload = null;\n editor.fire('load');\n };\n var isDomainRelaxed = relaxDomain(editor, ifr);\n editor.contentAreaContainer = o.iframeContainer;\n editor.iframeElement = ifr;\n editor.iframeHTML = getIframeHtml(editor);\n DOM$3.add(o.iframeContainer, ifr);\n return isDomainRelaxed;\n };\n var init$1 = function (editor, boxInfo) {\n var isDomainRelaxed = createIframe(editor, boxInfo);\n if (boxInfo.editorContainer) {\n DOM$3.get(boxInfo.editorContainer).style.display = editor.orgDisplay;\n editor.hidden = DOM$3.isHidden(boxInfo.editorContainer);\n }\n editor.getElement().style.display = 'none';\n DOM$3.setAttrib(editor.id, 'aria-hidden', 'true');\n if (!isDomainRelaxed) {\n InitContentBody.initContentBody(editor);\n }\n };\n var InitIframe = { init: init$1 };\n\n var DOM$4 = DOMUtils$1.DOM;\n var initPlugin = function (editor, initializedPlugins, plugin) {\n var Plugin = PluginManager$1.get(plugin);\n var pluginUrl = PluginManager$1.urls[plugin] || editor.documentBaseUrl.replace(/\\/$/, '');\n plugin = Tools.trim(plugin);\n if (Plugin && Tools.inArray(initializedPlugins, plugin) === -1) {\n Tools.each(PluginManager$1.dependencies(plugin), function (dep) {\n initPlugin(editor, initializedPlugins, dep);\n });\n if (editor.plugins[plugin]) {\n return;\n }\n try {\n var pluginInstance = new Plugin(editor, pluginUrl, editor.$);\n editor.plugins[plugin] = pluginInstance;\n if (pluginInstance.init) {\n pluginInstance.init(editor, pluginUrl);\n initializedPlugins.push(plugin);\n }\n } catch (e) {\n ErrorReporter.pluginInitError(editor, plugin, e);\n }\n }\n };\n var trimLegacyPrefix = function (name) {\n return name.replace(/^\\-/, '');\n };\n var initPlugins = function (editor) {\n var initializedPlugins = [];\n Tools.each(editor.settings.plugins.split(/[ ,]/), function (name) {\n initPlugin(editor, initializedPlugins, trimLegacyPrefix(name));\n });\n };\n var initTheme = function (editor) {\n var Theme;\n var theme = editor.settings.theme;\n if (isString(theme)) {\n editor.settings.theme = trimLegacyPrefix(theme);\n Theme = ThemeManager.get(theme);\n editor.theme = new Theme(editor, ThemeManager.urls[theme]);\n if (editor.theme.init) {\n editor.theme.init(editor, ThemeManager.urls[theme] || editor.documentBaseUrl.replace(/\\/$/, ''), editor.$);\n }\n } else {\n editor.theme = {};\n }\n };\n var renderFromLoadedTheme = function (editor) {\n var w, h, minHeight, re, info;\n var settings = editor.settings;\n var elm = editor.getElement();\n w = settings.width || DOM$4.getStyle(elm, 'width') || '100%';\n h = settings.height || DOM$4.getStyle(elm, 'height') || elm.offsetHeight;\n minHeight = settings.min_height || 100;\n re = /^[0-9\\.]+(|px)$/i;\n if (re.test('' + w)) {\n w = Math.max(parseInt(w, 10), 100);\n }\n if (re.test('' + h)) {\n h = Math.max(parseInt(h, 10), minHeight);\n }\n info = editor.theme.renderUI({\n targetNode: elm,\n width: w,\n height: h,\n deltaWidth: settings.delta_width,\n deltaHeight: settings.delta_height\n });\n if (!settings.content_editable) {\n h = (info.iframeHeight || h) + (typeof h === 'number' ? info.deltaHeight || 0 : '');\n if (h < minHeight) {\n h = minHeight;\n }\n }\n info.height = h;\n return info;\n };\n var renderFromThemeFunc = function (editor) {\n var info;\n var elm = editor.getElement();\n info = editor.settings.theme(editor, elm);\n if (info.editorContainer.nodeType) {\n info.editorContainer.id = info.editorContainer.id || editor.id + '_parent';\n }\n if (info.iframeContainer && info.iframeContainer.nodeType) {\n info.iframeContainer.id = info.iframeContainer.id || editor.id + '_iframecontainer';\n }\n info.height = info.iframeHeight ? info.iframeHeight : elm.offsetHeight;\n return info;\n };\n var createThemeFalseResult = function (element) {\n return {\n editorContainer: element,\n iframeContainer: element\n };\n };\n var renderThemeFalseIframe = function (targetElement) {\n var iframeContainer = DOM$4.create('div');\n DOM$4.insertAfter(iframeContainer, targetElement);\n return createThemeFalseResult(iframeContainer);\n };\n var renderThemeFalse = function (editor) {\n var targetElement = editor.getElement();\n return editor.inline ? createThemeFalseResult(null) : renderThemeFalseIframe(targetElement);\n };\n var renderThemeUi = function (editor) {\n var settings = editor.settings, elm = editor.getElement();\n editor.orgDisplay = elm.style.display;\n if (isString(settings.theme)) {\n return renderFromLoadedTheme(editor);\n } else if (isFunction(settings.theme)) {\n return renderFromThemeFunc(editor);\n } else {\n return renderThemeFalse(editor);\n }\n };\n var init$2 = function (editor) {\n var settings = editor.settings;\n var elm = editor.getElement();\n var boxInfo;\n editor.rtl = settings.rtl_ui || editor.editorManager.i18n.rtl;\n editor.editorManager.i18n.setCode(settings.language);\n settings.aria_label = settings.aria_label || DOM$4.getAttrib(elm, 'aria-label', editor.getLang('aria.rich_text_area'));\n editor.fire('ScriptsLoaded');\n initTheme(editor);\n initPlugins(editor);\n boxInfo = renderThemeUi(editor);\n editor.editorContainer = boxInfo.editorContainer ? boxInfo.editorContainer : null;\n if (settings.content_css) {\n Tools.each(Tools.explode(settings.content_css), function (u) {\n editor.contentCSS.push(editor.documentBaseURI.toAbsolute(u));\n });\n }\n if (settings.content_editable) {\n return InitContentBody.initContentBody(editor);\n } else {\n return InitIframe.init(editor, boxInfo);\n }\n };\n var Init = { init: init$2 };\n\n var DOM$5 = DOMUtils$1.DOM;\n var hasSkipLoadPrefix = function (name) {\n return name.charAt(0) === '-';\n };\n var loadLanguage = function (scriptLoader, editor) {\n var settings = editor.settings;\n if (settings.language && settings.language !== 'en' && !settings.language_url) {\n settings.language_url = editor.editorManager.baseURL + '/langs/' + settings.language + '.js';\n }\n if (settings.language_url && !editor.editorManager.i18n.data[settings.language]) {\n scriptLoader.add(settings.language_url);\n }\n };\n var loadTheme = function (scriptLoader, editor, suffix, callback) {\n var settings = editor.settings, theme = settings.theme;\n if (isString(theme)) {\n if (!hasSkipLoadPrefix(theme) && !ThemeManager.urls.hasOwnProperty(theme)) {\n var themeUrl = settings.theme_url;\n if (themeUrl) {\n ThemeManager.load(theme, editor.documentBaseURI.toAbsolute(themeUrl));\n } else {\n ThemeManager.load(theme, 'themes/' + theme + '/theme' + suffix + '.js');\n }\n }\n scriptLoader.loadQueue(function () {\n ThemeManager.waitFor(theme, callback);\n });\n } else {\n callback();\n }\n };\n var loadPlugins = function (settings, suffix) {\n if (Tools.isArray(settings.plugins)) {\n settings.plugins = settings.plugins.join(' ');\n }\n Tools.each(settings.external_plugins, function (url, name) {\n PluginManager$1.load(name, url);\n settings.plugins += ' ' + name;\n });\n Tools.each(settings.plugins.split(/[ ,]/), function (plugin) {\n plugin = Tools.trim(plugin);\n if (plugin && !PluginManager$1.urls[plugin]) {\n if (hasSkipLoadPrefix(plugin)) {\n plugin = plugin.substr(1, plugin.length);\n var dependencies = PluginManager$1.dependencies(plugin);\n Tools.each(dependencies, function (dep) {\n var defaultSettings = {\n prefix: 'plugins/',\n resource: dep,\n suffix: '/plugin' + suffix + '.js'\n };\n dep = PluginManager$1.createUrl(defaultSettings, dep);\n PluginManager$1.load(dep.resource, dep);\n });\n } else {\n PluginManager$1.load(plugin, {\n prefix: 'plugins/',\n resource: plugin,\n suffix: '/plugin' + suffix + '.js'\n });\n }\n }\n });\n };\n var loadScripts = function (editor, suffix) {\n var scriptLoader = ScriptLoader.ScriptLoader;\n loadTheme(scriptLoader, editor, suffix, function () {\n loadLanguage(scriptLoader, editor);\n loadPlugins(editor.settings, suffix);\n scriptLoader.loadQueue(function () {\n if (!editor.removed) {\n Init.init(editor);\n }\n }, editor, function (urls) {\n ErrorReporter.pluginLoadError(editor, urls[0]);\n if (!editor.removed) {\n Init.init(editor);\n }\n });\n });\n };\n var render = function (editor) {\n var settings = editor.settings, id = editor.id;\n var readyHandler = function () {\n DOM$5.unbind(domGlobals.window, 'ready', readyHandler);\n editor.render();\n };\n if (!EventUtils.Event.domLoaded) {\n DOM$5.bind(domGlobals.window, 'ready', readyHandler);\n return;\n }\n if (!editor.getElement()) {\n return;\n }\n if (!Env.contentEditable) {\n return;\n }\n if (!settings.inline) {\n editor.orgVisibility = editor.getElement().style.visibility;\n editor.getElement().style.visibility = 'hidden';\n } else {\n editor.inline = true;\n }\n var form = editor.getElement().form || DOM$5.getParent(id, 'form');\n if (form) {\n editor.formElement = form;\n if (settings.hidden_input && !/TEXTAREA|INPUT/i.test(editor.getElement().nodeName)) {\n DOM$5.insertAfter(DOM$5.create('input', {\n type: 'hidden',\n name: id\n }), id);\n editor.hasHiddenInput = true;\n }\n editor.formEventDelegate = function (e) {\n editor.fire(e.type, e);\n };\n DOM$5.bind(form, 'submit reset', editor.formEventDelegate);\n editor.on('reset', function () {\n editor.setContent(editor.startContent, { format: 'raw' });\n });\n if (settings.submit_patch && !form.submit.nodeType && !form.submit.length && !form._mceOldSubmit) {\n form._mceOldSubmit = form.submit;\n form.submit = function () {\n editor.editorManager.triggerSave();\n editor.setDirty(false);\n return form._mceOldSubmit(form);\n };\n }\n }\n editor.windowManager = WindowManager(editor);\n editor.notificationManager = NotificationManager(editor);\n if (settings.encoding === 'xml') {\n editor.on('GetContent', function (e) {\n if (e.save) {\n e.content = DOM$5.encode(e.content);\n }\n });\n }\n if (settings.add_form_submit_trigger) {\n editor.on('submit', function () {\n if (editor.initialized) {\n editor.save();\n }\n });\n }\n if (settings.add_unload_trigger) {\n editor._beforeUnload = function () {\n if (editor.initialized && !editor.destroyed && !editor.isHidden()) {\n editor.save({\n format: 'raw',\n no_events: true,\n set_dirty: false\n });\n }\n };\n editor.editorManager.on('BeforeUnload', editor._beforeUnload);\n }\n editor.editorManager.add(editor);\n loadScripts(editor, editor.suffix);\n };\n var Render = { render: render };\n\n var add$4 = function (editor, name, settings) {\n var sidebars = editor.sidebars ? editor.sidebars : [];\n sidebars.push({\n name: name,\n settings: settings\n });\n editor.sidebars = sidebars;\n };\n var Sidebar = { add: add$4 };\n\n var each$k = Tools.each, trim$4 = Tools.trim;\n var queryParts = 'source protocol authority userInfo user password host port relative path directory file query anchor'.split(' ');\n var DEFAULT_PORTS = {\n ftp: 21,\n http: 80,\n https: 443,\n mailto: 25\n };\n var URI = function (url, settings) {\n var self = this;\n var baseUri, baseUrl;\n url = trim$4(url);\n settings = self.settings = settings || {};\n baseUri = settings.base_uri;\n if (/^([\\w\\-]+):([^\\/]{2})/i.test(url) || /^\\s*#/.test(url)) {\n self.source = url;\n return;\n }\n var isProtocolRelative = url.indexOf('//') === 0;\n if (url.indexOf('/') === 0 && !isProtocolRelative) {\n url = (baseUri ? baseUri.protocol || 'http' : 'http') + '://mce_host' + url;\n }\n if (!/^[\\w\\-]*:?\\/\\//.test(url)) {\n baseUrl = settings.base_uri ? settings.base_uri.path : new URI(domGlobals.document.location.href).directory;\n if (settings.base_uri.protocol == '') {\n url = '//mce_host' + self.toAbsPath(baseUrl, url);\n } else {\n url = /([^#?]*)([#?]?.*)/.exec(url);\n url = (baseUri && baseUri.protocol || 'http') + '://mce_host' + self.toAbsPath(baseUrl, url[1]) + url[2];\n }\n }\n url = url.replace(/@@/g, '(mce_at)');\n url = /^(?:(?![^:@]+:[^:@\\/]*@)([^:\\/?#.]+):)?(?:\\/\\/)?((?:(([^:@\\/]*):?([^:@\\/]*))?@)?([^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/.exec(url);\n each$k(queryParts, function (v, i) {\n var part = url[i];\n if (part) {\n part = part.replace(/\\(mce_at\\)/g, '@@');\n }\n self[v] = part;\n });\n if (baseUri) {\n if (!self.protocol) {\n self.protocol = baseUri.protocol;\n }\n if (!self.userInfo) {\n self.userInfo = baseUri.userInfo;\n }\n if (!self.port && self.host === 'mce_host') {\n self.port = baseUri.port;\n }\n if (!self.host || self.host === 'mce_host') {\n self.host = baseUri.host;\n }\n self.source = '';\n }\n if (isProtocolRelative) {\n self.protocol = '';\n }\n };\n URI.prototype = {\n setPath: function (path) {\n var self = this;\n path = /^(.*?)\\/?(\\w+)?$/.exec(path);\n self.path = path[0];\n self.directory = path[1];\n self.file = path[2];\n self.source = '';\n self.getURI();\n },\n toRelative: function (uri) {\n var self = this;\n var output;\n if (uri === './') {\n return uri;\n }\n uri = new URI(uri, { base_uri: self });\n if (uri.host !== 'mce_host' && self.host !== uri.host && uri.host || self.port !== uri.port || self.protocol !== uri.protocol && uri.protocol !== '') {\n return uri.getURI();\n }\n var tu = self.getURI(), uu = uri.getURI();\n if (tu === uu || tu.charAt(tu.length - 1) === '/' && tu.substr(0, tu.length - 1) === uu) {\n return tu;\n }\n output = self.toRelPath(self.path, uri.path);\n if (uri.query) {\n output += '?' + uri.query;\n }\n if (uri.anchor) {\n output += '#' + uri.anchor;\n }\n return output;\n },\n toAbsolute: function (uri, noHost) {\n uri = new URI(uri, { base_uri: this });\n return uri.getURI(noHost && this.isSameOrigin(uri));\n },\n isSameOrigin: function (uri) {\n if (this.host == uri.host && this.protocol == uri.protocol) {\n if (this.port == uri.port) {\n return true;\n }\n var defaultPort = DEFAULT_PORTS[this.protocol];\n if (defaultPort && (this.port || defaultPort) == (uri.port || defaultPort)) {\n return true;\n }\n }\n return false;\n },\n toRelPath: function (base, path) {\n var items, breakPoint = 0, out = '', i, l;\n base = base.substring(0, base.lastIndexOf('/'));\n base = base.split('/');\n items = path.split('/');\n if (base.length >= items.length) {\n for (i = 0, l = base.length; i < l; i++) {\n if (i >= items.length || base[i] !== items[i]) {\n breakPoint = i + 1;\n break;\n }\n }\n }\n if (base.length < items.length) {\n for (i = 0, l = items.length; i < l; i++) {\n if (i >= base.length || base[i] !== items[i]) {\n breakPoint = i + 1;\n break;\n }\n }\n }\n if (breakPoint === 1) {\n return path;\n }\n for (i = 0, l = base.length - (breakPoint - 1); i < l; i++) {\n out += '../';\n }\n for (i = breakPoint - 1, l = items.length; i < l; i++) {\n if (i !== breakPoint - 1) {\n out += '/' + items[i];\n } else {\n out += items[i];\n }\n }\n return out;\n },\n toAbsPath: function (base, path) {\n var i, nb = 0, o = [], tr, outPath;\n tr = /\\/$/.test(path) ? '/' : '';\n base = base.split('/');\n path = path.split('/');\n each$k(base, function (k) {\n if (k) {\n o.push(k);\n }\n });\n base = o;\n for (i = path.length - 1, o = []; i >= 0; i--) {\n if (path[i].length === 0 || path[i] === '.') {\n continue;\n }\n if (path[i] === '..') {\n nb++;\n continue;\n }\n if (nb > 0) {\n nb--;\n continue;\n }\n o.push(path[i]);\n }\n i = base.length - nb;\n if (i <= 0) {\n outPath = o.reverse().join('/');\n } else {\n outPath = base.slice(0, i).join('/') + '/' + o.reverse().join('/');\n }\n if (outPath.indexOf('/') !== 0) {\n outPath = '/' + outPath;\n }\n if (tr && outPath.lastIndexOf('/') !== outPath.length - 1) {\n outPath += tr;\n }\n return outPath;\n },\n getURI: function (noProtoHost) {\n var s;\n var self = this;\n if (!self.source || noProtoHost) {\n s = '';\n if (!noProtoHost) {\n if (self.protocol) {\n s += self.protocol + '://';\n } else {\n s += '//';\n }\n if (self.userInfo) {\n s += self.userInfo + '@';\n }\n if (self.host) {\n s += self.host;\n }\n if (self.port) {\n s += ':' + self.port;\n }\n }\n if (self.path) {\n s += self.path;\n }\n if (self.query) {\n s += '?' + self.query;\n }\n if (self.anchor) {\n s += '#' + self.anchor;\n }\n self.source = s;\n }\n return self.source;\n }\n };\n URI.parseDataUri = function (uri) {\n var type, matches;\n uri = decodeURIComponent(uri).split(',');\n matches = /data:([^;]+)/.exec(uri[0]);\n if (matches) {\n type = matches[1];\n }\n return {\n type: type,\n data: uri[1]\n };\n };\n URI.getDocumentBaseUrl = function (loc) {\n var baseUrl;\n if (loc.protocol.indexOf('http') !== 0 && loc.protocol !== 'file:') {\n baseUrl = loc.href;\n } else {\n baseUrl = loc.protocol + '//' + loc.host + loc.pathname;\n }\n if (/^[^:]+:\\/\\/\\/?[^\\/]+\\//.test(baseUrl)) {\n baseUrl = baseUrl.replace(/[\\?#].*$/, '').replace(/[\\/\\\\][^\\/]+$/, '');\n if (!/[\\/\\\\]$/.test(baseUrl)) {\n baseUrl += '/';\n }\n }\n return baseUrl;\n };\n\n var defaultFormat = 'html';\n var trimEmptyContents = function (editor, html) {\n var blockName = Settings.getForcedRootBlock(editor);\n var emptyRegExp = new RegExp('^(<' + blockName + '[^>]*>( | |\\\\s|\\xA0|
|)<\\\\/' + blockName + '>[\\r\\n]*|
[\\r\\n]*)$');\n return html.replace(emptyRegExp, '');\n };\n var getContentFromBody = function (editor, args, body) {\n var content;\n args.format = args.format ? args.format : defaultFormat;\n args.get = true;\n args.getInner = true;\n if (!args.no_events) {\n editor.fire('BeforeGetContent', args);\n }\n if (args.format === 'raw') {\n content = Tools.trim(TrimHtml.trimExternal(editor.serializer, body.innerHTML));\n } else if (args.format === 'text') {\n content = Zwsp.trim(body.innerText || body.textContent);\n } else if (args.format === 'tree') {\n return editor.serializer.serialize(body, args);\n } else {\n content = trimEmptyContents(editor, editor.serializer.serialize(body, args));\n }\n if (args.format !== 'text' && !isWsPreserveElement(Element.fromDom(body))) {\n args.content = Tools.trim(content);\n } else {\n args.content = content;\n }\n if (!args.no_events) {\n editor.fire('GetContent', args);\n }\n return args.content;\n };\n var getContent$1 = function (editor, args) {\n if (args === void 0) {\n args = {};\n }\n return Option.from(editor.getBody()).fold(constant(args.format === 'tree' ? new Node$1('body', 11) : ''), function (body) {\n return getContentFromBody(editor, args, body);\n });\n };\n\n var traverse = function (node, fn) {\n fn(node);\n if (node.firstChild) {\n traverse(node.firstChild, fn);\n }\n if (node.next) {\n traverse(node.next, fn);\n }\n };\n var findMatchingNodes = function (nodeFilters, attributeFilters, node) {\n var nodeMatches = {};\n var attrMatches = {};\n var matches = [];\n if (node.firstChild) {\n traverse(node.firstChild, function (node) {\n each(nodeFilters, function (filter) {\n if (filter.name === node.name) {\n if (nodeMatches[filter.name]) {\n nodeMatches[filter.name].nodes.push(node);\n } else {\n nodeMatches[filter.name] = {\n filter: filter,\n nodes: [node]\n };\n }\n }\n });\n each(attributeFilters, function (filter) {\n if (typeof node.attr(filter.name) === 'string') {\n if (attrMatches[filter.name]) {\n attrMatches[filter.name].nodes.push(node);\n } else {\n attrMatches[filter.name] = {\n filter: filter,\n nodes: [node]\n };\n }\n }\n });\n });\n }\n for (var name in nodeMatches) {\n if (nodeMatches.hasOwnProperty(name)) {\n matches.push(nodeMatches[name]);\n }\n }\n for (var name in attrMatches) {\n if (attrMatches.hasOwnProperty(name)) {\n matches.push(attrMatches[name]);\n }\n }\n return matches;\n };\n var filter$3 = function (nodeFilters, attributeFilters, node) {\n var matches = findMatchingNodes(nodeFilters, attributeFilters, node);\n each(matches, function (match) {\n each(match.filter.callbacks, function (callback) {\n callback(match.nodes, match.filter.name, {});\n });\n });\n };\n\n var defaultFormat$1 = 'html';\n var isTreeNode = function (content) {\n return content instanceof Node$1;\n };\n var moveSelection = function (editor) {\n if (EditorFocus.hasFocus(editor)) {\n CaretFinder.firstPositionIn(editor.getBody()).each(function (pos) {\n var node = pos.getNode();\n var caretPos = NodeType.isTable(node) ? CaretFinder.firstPositionIn(node).getOr(pos) : pos;\n editor.selection.setRng(caretPos.toRange());\n });\n }\n };\n var setEditorHtml = function (editor, html) {\n editor.dom.setHTML(editor.getBody(), html);\n moveSelection(editor);\n };\n var setContentString = function (editor, body, content, args) {\n var forcedRootBlockName, padd;\n if (content.length === 0 || /^\\s+$/.test(content)) {\n padd = '
';\n if (body.nodeName === 'TABLE') {\n content = '';\n } else if (/^(UL|OL)$/.test(body.nodeName)) {\n content = ' ' + padd + ' ' + padd + ' ';\n }\n forcedRootBlockName = Settings.getForcedRootBlock(editor);\n if (forcedRootBlockName && editor.schema.isValidChild(body.nodeName.toLowerCase(), forcedRootBlockName.toLowerCase())) {\n content = padd;\n content = editor.dom.createHTML(forcedRootBlockName, editor.settings.forced_root_block_attrs, content);\n } else if (!content) {\n content = '
';\n }\n setEditorHtml(editor, content);\n editor.fire('SetContent', args);\n } else {\n if (args.format !== 'raw') {\n content = HtmlSerializer({ validate: editor.validate }, editor.schema).serialize(editor.parser.parse(content, {\n isRootContent: true,\n insert: true\n }));\n }\n args.content = isWsPreserveElement(Element.fromDom(body)) ? content : Tools.trim(content);\n setEditorHtml(editor, args.content);\n if (!args.no_events) {\n editor.fire('SetContent', args);\n }\n }\n return args.content;\n };\n var setContentTree = function (editor, body, content, args) {\n filter$3(editor.parser.getNodeFilters(), editor.parser.getAttributeFilters(), content);\n var html = HtmlSerializer({ validate: editor.validate }, editor.schema).serialize(content);\n args.content = isWsPreserveElement(Element.fromDom(body)) ? html : Tools.trim(html);\n setEditorHtml(editor, args.content);\n if (!args.no_events) {\n editor.fire('SetContent', args);\n }\n return content;\n };\n var setContent$1 = function (editor, content, args) {\n if (args === void 0) {\n args = {};\n }\n args.format = args.format ? args.format : defaultFormat$1;\n args.set = true;\n args.content = isTreeNode(content) ? '' : content;\n if (!isTreeNode(content) && !args.no_events) {\n editor.fire('BeforeSetContent', args);\n content = args.content;\n }\n return Option.from(editor.getBody()).fold(constant(content), function (body) {\n return isTreeNode(content) ? setContentTree(editor, body, content, args) : setContentString(editor, body, content, args);\n });\n };\n\n var DOM$6 = DOMUtils$1.DOM;\n var restoreOriginalStyles = function (editor) {\n DOM$6.setStyle(editor.id, 'display', editor.orgDisplay);\n };\n var safeDestroy = function (x) {\n return Option.from(x).each(function (x) {\n return x.destroy();\n });\n };\n var clearDomReferences = function (editor) {\n editor.contentAreaContainer = editor.formElement = editor.container = editor.editorContainer = null;\n editor.bodyElement = editor.contentDocument = editor.contentWindow = null;\n editor.iframeElement = editor.targetElm = null;\n if (editor.selection) {\n editor.selection = editor.selection.win = editor.selection.dom = editor.selection.dom.doc = null;\n }\n };\n var restoreForm = function (editor) {\n var form = editor.formElement;\n if (form) {\n if (form._mceOldSubmit) {\n form.submit = form._mceOldSubmit;\n form._mceOldSubmit = null;\n }\n DOM$6.unbind(form, 'submit reset', editor.formEventDelegate);\n }\n };\n var remove$7 = function (editor) {\n if (!editor.removed) {\n var _selectionOverrides = editor._selectionOverrides, editorUpload = editor.editorUpload;\n var body = editor.getBody();\n var element = editor.getElement();\n if (body) {\n editor.save({ is_removing: true });\n }\n editor.removed = true;\n editor.unbindAllNativeEvents();\n if (editor.hasHiddenInput && element) {\n DOM$6.remove(element.nextSibling);\n }\n Events.fireRemove(editor);\n editor.editorManager.remove(editor);\n if (!editor.inline && body) {\n restoreOriginalStyles(editor);\n }\n Events.fireDetach(editor);\n DOM$6.remove(editor.getContainer());\n safeDestroy(_selectionOverrides);\n safeDestroy(editorUpload);\n editor.destroy();\n }\n };\n var destroy = function (editor, automatic) {\n var selection = editor.selection, dom = editor.dom;\n if (editor.destroyed) {\n return;\n }\n if (!automatic && !editor.removed) {\n editor.remove();\n return;\n }\n if (!automatic) {\n editor.editorManager.off('beforeunload', editor._beforeUnload);\n if (editor.theme && editor.theme.destroy) {\n editor.theme.destroy();\n }\n safeDestroy(selection);\n safeDestroy(dom);\n }\n restoreForm(editor);\n clearDomReferences(editor);\n editor.destroyed = true;\n };\n\n var DOM$7 = DOMUtils$1.DOM;\n var extend$4 = Tools.extend, each$l = Tools.each;\n var resolve$4 = Tools.resolve;\n var ie$2 = Env.ie;\n var Editor = function (id, settings, editorManager) {\n var self = this;\n var documentBaseUrl = self.documentBaseUrl = editorManager.documentBaseURL;\n var baseUri = editorManager.baseURI;\n settings = getEditorSettings(self, id, documentBaseUrl, editorManager.defaultSettings, settings);\n self.settings = settings;\n AddOnManager.language = settings.language || 'en';\n AddOnManager.languageLoad = settings.language_load;\n AddOnManager.baseURL = editorManager.baseURL;\n self.id = id;\n self.setDirty(false);\n self.plugins = {};\n self.documentBaseURI = new URI(settings.document_base_url, { base_uri: baseUri });\n self.baseURI = baseUri;\n self.contentCSS = [];\n self.contentStyles = [];\n self.shortcuts = new Shortcuts(self);\n self.loadedCSS = {};\n self.editorCommands = new EditorCommands(self);\n self.suffix = editorManager.suffix;\n self.editorManager = editorManager;\n self.inline = settings.inline;\n self.buttons = {};\n self.menuItems = {};\n if (settings.cache_suffix) {\n Env.cacheSuffix = settings.cache_suffix.replace(/^[\\?\\&]+/, '');\n }\n if (settings.override_viewport === false) {\n Env.overrideViewPort = false;\n }\n editorManager.fire('SetupEditor', { editor: self });\n self.execCallback('setup', self);\n self.$ = DomQuery.overrideDefaults(function () {\n return {\n context: self.inline ? self.getBody() : self.getDoc(),\n element: self.getBody()\n };\n });\n };\n Editor.prototype = {\n render: function () {\n Render.render(this);\n },\n focus: function (skipFocus) {\n EditorFocus.focus(this, skipFocus);\n },\n hasFocus: function () {\n return EditorFocus.hasFocus(this);\n },\n execCallback: function (name) {\n var x = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n x[_i - 1] = arguments[_i];\n }\n var self = this;\n var callback = self.settings[name], scope;\n if (!callback) {\n return;\n }\n if (self.callbackLookup && (scope = self.callbackLookup[name])) {\n callback = scope.func;\n scope = scope.scope;\n }\n if (typeof callback === 'string') {\n scope = callback.replace(/\\.\\w+$/, '');\n scope = scope ? resolve$4(scope) : 0;\n callback = resolve$4(callback);\n self.callbackLookup = self.callbackLookup || {};\n self.callbackLookup[name] = {\n func: callback,\n scope: scope\n };\n }\n return callback.apply(scope || self, Array.prototype.slice.call(arguments, 1));\n },\n translate: function (text) {\n if (text && Tools.is(text, 'string')) {\n var lang_1 = this.settings.language || 'en', i18n_1 = this.editorManager.i18n;\n text = i18n_1.data[lang_1 + '.' + text] || text.replace(/\\{\\#([^\\}]+)\\}/g, function (a, b) {\n return i18n_1.data[lang_1 + '.' + b] || '{#' + b + '}';\n });\n }\n return this.editorManager.translate(text);\n },\n getLang: function (name, defaultVal) {\n return this.editorManager.i18n.data[(this.settings.language || 'en') + '.' + name] || (defaultVal !== undefined ? defaultVal : '{#' + name + '}');\n },\n getParam: function (name, defaultVal, type) {\n return getParam(this, name, defaultVal, type);\n },\n nodeChanged: function (args) {\n this._nodeChangeDispatcher.nodeChanged(args);\n },\n addButton: function (name, settings) {\n var self = this;\n if (settings.cmd) {\n settings.onclick = function () {\n self.execCommand(settings.cmd);\n };\n }\n if (settings.stateSelector && typeof settings.active === 'undefined') {\n settings.active = false;\n }\n if (!settings.text && !settings.icon) {\n settings.icon = name;\n }\n settings.tooltip = settings.tooltip || settings.title;\n self.buttons[name] = settings;\n },\n addSidebar: function (name, settings) {\n return Sidebar.add(this, name, settings);\n },\n addMenuItem: function (name, settings) {\n var self = this;\n if (settings.cmd) {\n settings.onclick = function () {\n self.execCommand(settings.cmd);\n };\n }\n self.menuItems[name] = settings;\n },\n addContextToolbar: function (predicate, items) {\n var self = this;\n var selector;\n self.contextToolbars = self.contextToolbars || [];\n if (typeof predicate === 'string') {\n selector = predicate;\n predicate = function (elm) {\n return self.dom.is(elm, selector);\n };\n }\n self.contextToolbars.push({\n id: Uuid.uuid('mcet'),\n predicate: predicate,\n items: items\n });\n },\n addCommand: function (name, callback, scope) {\n this.editorCommands.addCommand(name, callback, scope);\n },\n addQueryStateHandler: function (name, callback, scope) {\n this.editorCommands.addQueryStateHandler(name, callback, scope);\n },\n addQueryValueHandler: function (name, callback, scope) {\n this.editorCommands.addQueryValueHandler(name, callback, scope);\n },\n addShortcut: function (pattern, desc, cmdFunc, scope) {\n this.shortcuts.add(pattern, desc, cmdFunc, scope);\n },\n execCommand: function (cmd, ui, value, args) {\n return this.editorCommands.execCommand(cmd, ui, value, args);\n },\n queryCommandState: function (cmd) {\n return this.editorCommands.queryCommandState(cmd);\n },\n queryCommandValue: function (cmd) {\n return this.editorCommands.queryCommandValue(cmd);\n },\n queryCommandSupported: function (cmd) {\n return this.editorCommands.queryCommandSupported(cmd);\n },\n show: function () {\n var self = this;\n if (self.hidden) {\n self.hidden = false;\n if (self.inline) {\n self.getBody().contentEditable = true;\n } else {\n DOM$7.show(self.getContainer());\n DOM$7.hide(self.id);\n }\n self.load();\n self.fire('show');\n }\n },\n hide: function () {\n var self = this, doc = self.getDoc();\n if (!self.hidden) {\n if (ie$2 && doc && !self.inline) {\n doc.execCommand('SelectAll');\n }\n self.save();\n if (self.inline) {\n self.getBody().contentEditable = false;\n if (self === self.editorManager.focusedEditor) {\n self.editorManager.focusedEditor = null;\n }\n } else {\n DOM$7.hide(self.getContainer());\n DOM$7.setStyle(self.id, 'display', self.orgDisplay);\n }\n self.hidden = true;\n self.fire('hide');\n }\n },\n isHidden: function () {\n return !!this.hidden;\n },\n setProgressState: function (state, time) {\n this.fire('ProgressState', {\n state: state,\n time: time\n });\n },\n load: function (args) {\n var self = this;\n var elm = self.getElement(), html;\n if (self.removed) {\n return '';\n }\n if (elm) {\n args = args || {};\n args.load = true;\n html = self.setContent(elm.value !== undefined ? elm.value : elm.innerHTML, args);\n args.element = elm;\n if (!args.no_events) {\n self.fire('LoadContent', args);\n }\n args.element = elm = null;\n return html;\n }\n },\n save: function (args) {\n var self = this;\n var elm = self.getElement(), html, form;\n if (!elm || !self.initialized || self.removed) {\n return;\n }\n args = args || {};\n args.save = true;\n args.element = elm;\n html = args.content = self.getContent(args);\n if (!args.no_events) {\n self.fire('SaveContent', args);\n }\n if (args.format === 'raw') {\n self.fire('RawSaveContent', args);\n }\n html = args.content;\n if (!/TEXTAREA|INPUT/i.test(elm.nodeName)) {\n if (args.is_removing || !self.inline) {\n elm.innerHTML = html;\n }\n if (form = DOM$7.getParent(self.id, 'form')) {\n each$l(form.elements, function (elm) {\n if (elm.name === self.id) {\n elm.value = html;\n return false;\n }\n });\n }\n } else {\n elm.value = html;\n }\n args.element = elm = null;\n if (args.set_dirty !== false) {\n self.setDirty(false);\n }\n return html;\n },\n setContent: function (content, args) {\n return setContent$1(this, content, args);\n },\n getContent: function (args) {\n return getContent$1(this, args);\n },\n insertContent: function (content, args) {\n if (args) {\n content = extend$4({ content: content }, args);\n }\n this.execCommand('mceInsertContent', false, content);\n },\n isDirty: function () {\n return !this.isNotDirty;\n },\n setDirty: function (state) {\n var oldState = !this.isNotDirty;\n this.isNotDirty = !state;\n if (state && state !== oldState) {\n this.fire('dirty');\n }\n },\n setMode: function (mode) {\n setMode(this, mode);\n },\n getContainer: function () {\n var self = this;\n if (!self.container) {\n self.container = DOM$7.get(self.editorContainer || self.id + '_parent');\n }\n return self.container;\n },\n getContentAreaContainer: function () {\n return this.contentAreaContainer;\n },\n getElement: function () {\n if (!this.targetElm) {\n this.targetElm = DOM$7.get(this.id);\n }\n return this.targetElm;\n },\n getWin: function () {\n var self = this;\n var elm;\n if (!self.contentWindow) {\n elm = self.iframeElement;\n if (elm) {\n self.contentWindow = elm.contentWindow;\n }\n }\n return self.contentWindow;\n },\n getDoc: function () {\n var self = this;\n var win;\n if (!self.contentDocument) {\n win = self.getWin();\n if (win) {\n self.contentDocument = win.document;\n }\n }\n return self.contentDocument;\n },\n getBody: function () {\n var doc = this.getDoc();\n return this.bodyElement || (doc ? doc.body : null);\n },\n convertURL: function (url, name, elm) {\n var self = this, settings = self.settings;\n if (settings.urlconverter_callback) {\n return self.execCallback('urlconverter_callback', url, elm, true, name);\n }\n if (!settings.convert_urls || elm && elm.nodeName === 'LINK' || url.indexOf('file:') === 0 || url.length === 0) {\n return url;\n }\n if (settings.relative_urls) {\n return self.documentBaseURI.toRelative(url);\n }\n url = self.documentBaseURI.toAbsolute(url, settings.remove_script_host);\n return url;\n },\n addVisual: function (elm) {\n var self = this;\n var settings = self.settings;\n var dom = self.dom;\n var cls;\n elm = elm || self.getBody();\n if (self.hasVisual === undefined) {\n self.hasVisual = settings.visual;\n }\n each$l(dom.select('table,a', elm), function (elm) {\n var value;\n switch (elm.nodeName) {\n case 'TABLE':\n cls = settings.visual_table_class || 'mce-item-table';\n value = dom.getAttrib(elm, 'border');\n if ((!value || value === '0') && self.hasVisual) {\n dom.addClass(elm, cls);\n } else {\n dom.removeClass(elm, cls);\n }\n return;\n case 'A':\n if (!dom.getAttrib(elm, 'href')) {\n value = dom.getAttrib(elm, 'name') || elm.id;\n cls = settings.visual_anchor_class || 'mce-item-anchor';\n if (value && self.hasVisual) {\n dom.addClass(elm, cls);\n } else {\n dom.removeClass(elm, cls);\n }\n }\n return;\n }\n });\n self.fire('VisualAid', {\n element: elm,\n hasVisual: self.hasVisual\n });\n },\n remove: function () {\n remove$7(this);\n },\n destroy: function (automatic) {\n destroy(this, automatic);\n },\n uploadImages: function (callback) {\n return this.editorUpload.uploadImages(callback);\n },\n _scanForImages: function () {\n return this.editorUpload.scanForImages();\n }\n };\n extend$4(Editor.prototype, EditorObservable$1);\n\n var isEditorUIElement = function (elm) {\n return elm.className.toString().indexOf('mce-') !== -1;\n };\n var FocusManager = { isEditorUIElement: isEditorUIElement };\n\n var isManualNodeChange = function (e) {\n return e.type === 'nodechange' && e.selectionChange;\n };\n var registerPageMouseUp = function (editor, throttledStore) {\n var mouseUpPage = function () {\n throttledStore.throttle();\n };\n DOMUtils$1.DOM.bind(domGlobals.document, 'mouseup', mouseUpPage);\n editor.on('remove', function () {\n DOMUtils$1.DOM.unbind(domGlobals.document, 'mouseup', mouseUpPage);\n });\n };\n var registerFocusOut = function (editor) {\n editor.on('focusout', function () {\n SelectionBookmark.store(editor);\n });\n };\n var registerMouseUp = function (editor, throttledStore) {\n editor.on('mouseup touchend', function (e) {\n throttledStore.throttle();\n });\n };\n var registerEditorEvents = function (editor, throttledStore) {\n var browser = PlatformDetection$1.detect().browser;\n if (browser.isIE()) {\n registerFocusOut(editor);\n } else {\n registerMouseUp(editor, throttledStore);\n }\n editor.on('keyup nodechange', function (e) {\n if (!isManualNodeChange(e)) {\n SelectionBookmark.store(editor);\n }\n });\n };\n var register$3 = function (editor) {\n var throttledStore = first(function () {\n SelectionBookmark.store(editor);\n }, 0);\n if (editor.inline) {\n registerPageMouseUp(editor, throttledStore);\n }\n editor.on('init', function () {\n registerEditorEvents(editor, throttledStore);\n });\n editor.on('remove', function () {\n throttledStore.cancel();\n });\n };\n var SelectionRestore = { register: register$3 };\n\n var documentFocusInHandler;\n var DOM$8 = DOMUtils$1.DOM;\n var isEditorUIElement$1 = function (elm) {\n return FocusManager.isEditorUIElement(elm);\n };\n var isUIElement = function (editor, elm) {\n var customSelector = editor ? editor.settings.custom_ui_selector : '';\n var parent = DOM$8.getParent(elm, function (elm) {\n return isEditorUIElement$1(elm) || (customSelector ? editor.dom.is(elm, customSelector) : false);\n });\n return parent !== null;\n };\n var getActiveElement = function () {\n try {\n return domGlobals.document.activeElement;\n } catch (ex) {\n return domGlobals.document.body;\n }\n };\n var registerEvents = function (editorManager, e) {\n var editor = e.editor;\n SelectionRestore.register(editor);\n editor.on('focusin', function () {\n var self = this;\n var focusedEditor = editorManager.focusedEditor;\n if (focusedEditor !== self) {\n if (focusedEditor) {\n focusedEditor.fire('blur', { focusedEditor: self });\n }\n editorManager.setActive(self);\n editorManager.focusedEditor = self;\n self.fire('focus', { blurredEditor: focusedEditor });\n self.focus(true);\n }\n });\n editor.on('focusout', function () {\n var self = this;\n Delay.setEditorTimeout(self, function () {\n var focusedEditor = editorManager.focusedEditor;\n if (!isUIElement(self, getActiveElement()) && focusedEditor === self) {\n self.fire('blur', { focusedEditor: null });\n editorManager.focusedEditor = null;\n }\n });\n });\n if (!documentFocusInHandler) {\n documentFocusInHandler = function (e) {\n var activeEditor = editorManager.activeEditor;\n var target;\n target = e.target;\n if (activeEditor && target.ownerDocument === domGlobals.document) {\n if (target !== domGlobals.document.body && !isUIElement(activeEditor, target) && editorManager.focusedEditor === activeEditor) {\n activeEditor.fire('blur', { focusedEditor: null });\n editorManager.focusedEditor = null;\n }\n }\n };\n DOM$8.bind(domGlobals.document, 'focusin', documentFocusInHandler);\n }\n };\n var unregisterDocumentEvents = function (editorManager, e) {\n if (editorManager.focusedEditor === e.editor) {\n editorManager.focusedEditor = null;\n }\n if (!editorManager.activeEditor) {\n DOM$8.unbind(domGlobals.document, 'focusin', documentFocusInHandler);\n documentFocusInHandler = null;\n }\n };\n var setup$h = function (editorManager) {\n editorManager.on('AddEditor', curry(registerEvents, editorManager));\n editorManager.on('RemoveEditor', curry(unregisterDocumentEvents, editorManager));\n };\n var FocusController = {\n setup: setup$h,\n isEditorUIElement: isEditorUIElement$1,\n isUIElement: isUIElement\n };\n\n var DOM$9 = DOMUtils$1.DOM;\n var explode$4 = Tools.explode, each$m = Tools.each, extend$5 = Tools.extend;\n var instanceCounter = 0, beforeUnloadDelegate, EditorManager, boundGlobalEvents = false;\n var legacyEditors = [];\n var editors = [];\n var isValidLegacyKey = function (id) {\n return id !== 'length';\n };\n var globalEventDelegate = function (e) {\n var type = e.type;\n each$m(EditorManager.get(), function (editor) {\n switch (type) {\n case 'scroll':\n editor.fire('ScrollWindow', e);\n break;\n case 'resize':\n editor.fire('ResizeWindow', e);\n break;\n }\n });\n };\n var toggleGlobalEvents = function (state) {\n if (state !== boundGlobalEvents) {\n if (state) {\n DomQuery(window).on('resize scroll', globalEventDelegate);\n } else {\n DomQuery(window).off('resize scroll', globalEventDelegate);\n }\n boundGlobalEvents = state;\n }\n };\n var removeEditorFromList = function (targetEditor) {\n var oldEditors = editors;\n delete legacyEditors[targetEditor.id];\n for (var i = 0; i < legacyEditors.length; i++) {\n if (legacyEditors[i] === targetEditor) {\n legacyEditors.splice(i, 1);\n break;\n }\n }\n editors = filter(editors, function (editor) {\n return targetEditor !== editor;\n });\n if (EditorManager.activeEditor === targetEditor) {\n EditorManager.activeEditor = editors.length > 0 ? editors[0] : null;\n }\n if (EditorManager.focusedEditor === targetEditor) {\n EditorManager.focusedEditor = null;\n }\n return oldEditors.length !== editors.length;\n };\n var purgeDestroyedEditor = function (editor) {\n if (editor && editor.initialized && !(editor.getContainer() || editor.getBody()).parentNode) {\n removeEditorFromList(editor);\n editor.unbindAllNativeEvents();\n editor.destroy(true);\n editor.removed = true;\n editor = null;\n }\n return editor;\n };\n EditorManager = {\n defaultSettings: {},\n $: DomQuery,\n majorVersion: '4',\n minorVersion: '9.11',\n releaseDate: '2020-07-13',\n editors: legacyEditors,\n i18n: I18n,\n activeEditor: null,\n settings: {},\n setup: function () {\n var self = this;\n var baseURL, documentBaseURL, suffix = '';\n documentBaseURL = URI.getDocumentBaseUrl(domGlobals.document.location);\n if (/^[^:]+:\\/\\/\\/?[^\\/]+\\//.test(documentBaseURL)) {\n documentBaseURL = documentBaseURL.replace(/[\\?#].*$/, '').replace(/[\\/\\\\][^\\/]+$/, '');\n if (!/[\\/\\\\]$/.test(documentBaseURL)) {\n documentBaseURL += '/';\n }\n }\n var preInit = window.tinymce || window.tinyMCEPreInit;\n if (preInit) {\n baseURL = preInit.base || preInit.baseURL;\n suffix = preInit.suffix;\n } else {\n var scripts = domGlobals.document.getElementsByTagName('script');\n for (var i = 0; i < scripts.length; i++) {\n var src = scripts[i].src || '';\n if (src === '') {\n continue;\n }\n var srcScript = src.substring(src.lastIndexOf('/'));\n if (/tinymce(\\.full|\\.jquery|)(\\.min|\\.dev|)\\.js/.test(src)) {\n if (srcScript.indexOf('.min') !== -1) {\n suffix = '.min';\n }\n baseURL = src.substring(0, src.lastIndexOf('/'));\n break;\n }\n }\n if (!baseURL && domGlobals.document.currentScript) {\n var src = domGlobals.document.currentScript.src;\n if (src.indexOf('.min') !== -1) {\n suffix = '.min';\n }\n baseURL = src.substring(0, src.lastIndexOf('/'));\n }\n }\n self.baseURL = new URI(documentBaseURL).toAbsolute(baseURL);\n self.documentBaseURL = documentBaseURL;\n self.baseURI = new URI(self.baseURL);\n self.suffix = suffix;\n FocusController.setup(self);\n },\n overrideDefaults: function (defaultSettings) {\n var baseUrl, suffix;\n baseUrl = defaultSettings.base_url;\n if (baseUrl) {\n this.baseURL = new URI(this.documentBaseURL).toAbsolute(baseUrl.replace(/\\/+$/, ''));\n this.baseURI = new URI(this.baseURL);\n }\n suffix = defaultSettings.suffix;\n if (defaultSettings.suffix) {\n this.suffix = suffix;\n }\n this.defaultSettings = defaultSettings;\n var pluginBaseUrls = defaultSettings.plugin_base_urls;\n for (var name in pluginBaseUrls) {\n AddOnManager.PluginManager.urls[name] = pluginBaseUrls[name];\n }\n },\n init: function (settings) {\n var self = this;\n var result, invalidInlineTargets;\n invalidInlineTargets = Tools.makeMap('area base basefont br col frame hr img input isindex link meta param embed source wbr track ' + 'colgroup option tbody tfoot thead tr script noscript style textarea video audio iframe object menu', ' ');\n var isInvalidInlineTarget = function (settings, elm) {\n return settings.inline && elm.tagName.toLowerCase() in invalidInlineTargets;\n };\n var createId = function (elm) {\n var id = elm.id;\n if (!id) {\n id = elm.name;\n if (id && !DOM$9.get(id)) {\n id = elm.name;\n } else {\n id = DOM$9.uniqueId();\n }\n elm.setAttribute('id', id);\n }\n return id;\n };\n var execCallback = function (name) {\n var callback = settings[name];\n if (!callback) {\n return;\n }\n return callback.apply(self, Array.prototype.slice.call(arguments, 2));\n };\n var hasClass = function (elm, className) {\n return className.constructor === RegExp ? className.test(elm.className) : DOM$9.hasClass(elm, className);\n };\n var findTargets = function (settings) {\n var l, targets = [];\n if (Env.ie && Env.ie < 11) {\n ErrorReporter.initError('TinyMCE does not support the browser you are using. For a list of supported' + ' browsers please see: https://www.tinymce.com/docs/get-started/system-requirements/');\n return [];\n }\n if (settings.types) {\n each$m(settings.types, function (type) {\n targets = targets.concat(DOM$9.select(type.selector));\n });\n return targets;\n } else if (settings.selector) {\n return DOM$9.select(settings.selector);\n } else if (settings.target) {\n return [settings.target];\n }\n switch (settings.mode) {\n case 'exact':\n l = settings.elements || '';\n if (l.length > 0) {\n each$m(explode$4(l), function (id) {\n var elm;\n if (elm = DOM$9.get(id)) {\n targets.push(elm);\n } else {\n each$m(domGlobals.document.forms, function (f) {\n each$m(f.elements, function (e) {\n if (e.name === id) {\n id = 'mce_editor_' + instanceCounter++;\n DOM$9.setAttrib(e, 'id', id);\n targets.push(e);\n }\n });\n });\n }\n });\n }\n break;\n case 'textareas':\n case 'specific_textareas':\n each$m(DOM$9.select('textarea'), function (elm) {\n if (settings.editor_deselector && hasClass(elm, settings.editor_deselector)) {\n return;\n }\n if (!settings.editor_selector || hasClass(elm, settings.editor_selector)) {\n targets.push(elm);\n }\n });\n break;\n }\n return targets;\n };\n var provideResults = function (editors) {\n result = editors;\n };\n var initEditors = function () {\n var initCount = 0;\n var editors = [];\n var targets;\n var createEditor = function (id, settings, targetElm) {\n var editor = new Editor(id, settings, self);\n editors.push(editor);\n editor.on('init', function () {\n if (++initCount === targets.length) {\n provideResults(editors);\n }\n });\n editor.targetElm = editor.targetElm || targetElm;\n editor.render();\n };\n DOM$9.unbind(window, 'ready', initEditors);\n execCallback('onpageload');\n targets = DomQuery.unique(findTargets(settings));\n if (settings.types) {\n each$m(settings.types, function (type) {\n Tools.each(targets, function (elm) {\n if (DOM$9.is(elm, type.selector)) {\n createEditor(createId(elm), extend$5({}, settings, type), elm);\n return false;\n }\n return true;\n });\n });\n return;\n }\n Tools.each(targets, function (elm) {\n purgeDestroyedEditor(self.get(elm.id));\n });\n targets = Tools.grep(targets, function (elm) {\n return !self.get(elm.id);\n });\n if (targets.length === 0) {\n provideResults([]);\n } else {\n each$m(targets, function (elm) {\n if (isInvalidInlineTarget(settings, elm)) {\n ErrorReporter.initError('Could not initialize inline editor on invalid inline target element', elm);\n } else {\n createEditor(createId(elm), settings, elm);\n }\n });\n }\n };\n self.settings = settings;\n DOM$9.bind(window, 'ready', initEditors);\n return new promiseObj(function (resolve) {\n if (result) {\n resolve(result);\n } else {\n provideResults = function (editors) {\n resolve(editors);\n };\n }\n });\n },\n get: function (id) {\n if (arguments.length === 0) {\n return editors.slice(0);\n } else if (isString(id)) {\n return find(editors, function (editor) {\n return editor.id === id;\n }).getOr(null);\n } else if (isNumber(id)) {\n return editors[id] ? editors[id] : null;\n } else {\n return null;\n }\n },\n add: function (editor) {\n var self = this;\n var existingEditor;\n existingEditor = legacyEditors[editor.id];\n if (existingEditor === editor) {\n return editor;\n }\n if (self.get(editor.id) === null) {\n if (isValidLegacyKey(editor.id)) {\n legacyEditors[editor.id] = editor;\n }\n legacyEditors.push(editor);\n editors.push(editor);\n }\n toggleGlobalEvents(true);\n self.activeEditor = editor;\n self.fire('AddEditor', { editor: editor });\n if (!beforeUnloadDelegate) {\n beforeUnloadDelegate = function () {\n self.fire('BeforeUnload');\n };\n DOM$9.bind(window, 'beforeunload', beforeUnloadDelegate);\n }\n return editor;\n },\n createEditor: function (id, settings) {\n return this.add(new Editor(id, settings, this));\n },\n remove: function (selector) {\n var self = this;\n var i, editor;\n if (!selector) {\n for (i = editors.length - 1; i >= 0; i--) {\n self.remove(editors[i]);\n }\n return;\n }\n if (isString(selector)) {\n each$m(DOM$9.select(selector), function (elm) {\n editor = self.get(elm.id);\n if (editor) {\n self.remove(editor);\n }\n });\n return;\n }\n editor = selector;\n if (isNull(self.get(editor.id))) {\n return null;\n }\n if (removeEditorFromList(editor)) {\n self.fire('RemoveEditor', { editor: editor });\n }\n if (editors.length === 0) {\n DOM$9.unbind(window, 'beforeunload', beforeUnloadDelegate);\n }\n editor.remove();\n toggleGlobalEvents(editors.length > 0);\n return editor;\n },\n execCommand: function (cmd, ui, value) {\n var self = this, editor = self.get(value);\n switch (cmd) {\n case 'mceAddEditor':\n if (!self.get(value)) {\n new Editor(value, self.settings, self).render();\n }\n return true;\n case 'mceRemoveEditor':\n if (editor) {\n editor.remove();\n }\n return true;\n case 'mceToggleEditor':\n if (!editor) {\n self.execCommand('mceAddEditor', 0, value);\n return true;\n }\n if (editor.isHidden()) {\n editor.show();\n } else {\n editor.hide();\n }\n return true;\n }\n if (self.activeEditor) {\n return self.activeEditor.execCommand(cmd, ui, value);\n }\n return false;\n },\n triggerSave: function () {\n each$m(editors, function (editor) {\n editor.save();\n });\n },\n addI18n: function (code, items) {\n I18n.add(code, items);\n },\n translate: function (text) {\n return I18n.translate(text);\n },\n setActive: function (editor) {\n var activeEditor = this.activeEditor;\n if (this.activeEditor !== editor) {\n if (activeEditor) {\n activeEditor.fire('deactivate', { relatedTarget: editor });\n }\n editor.fire('activate', { relatedTarget: activeEditor });\n }\n this.activeEditor = editor;\n }\n };\n extend$5(EditorManager, Observable);\n EditorManager.setup();\n var EditorManager$1 = EditorManager;\n\n function RangeUtils(dom) {\n var walk = function (rng, callback) {\n return RangeWalk.walk(dom, rng, callback);\n };\n var split = SplitRange.split;\n var normalize = function (rng) {\n return NormalizeRange.normalize(dom, rng).fold(constant(false), function (normalizedRng) {\n rng.setStart(normalizedRng.startContainer, normalizedRng.startOffset);\n rng.setEnd(normalizedRng.endContainer, normalizedRng.endOffset);\n return true;\n });\n };\n return {\n walk: walk,\n split: split,\n normalize: normalize\n };\n }\n (function (RangeUtils) {\n RangeUtils.compareRanges = RangeCompare.isEq;\n RangeUtils.getCaretRangeFromPoint = CaretRangeFromPoint.fromPoint;\n RangeUtils.getSelectedNode = getSelectedNode;\n RangeUtils.getNode = getNode;\n }(RangeUtils || (RangeUtils = {})));\n var RangeUtils$1 = RangeUtils;\n\n var min = Math.min, max = Math.max, round$2 = Math.round;\n var relativePosition = function (rect, targetRect, rel) {\n var x, y, w, h, targetW, targetH;\n x = targetRect.x;\n y = targetRect.y;\n w = rect.w;\n h = rect.h;\n targetW = targetRect.w;\n targetH = targetRect.h;\n rel = (rel || '').split('');\n if (rel[0] === 'b') {\n y += targetH;\n }\n if (rel[1] === 'r') {\n x += targetW;\n }\n if (rel[0] === 'c') {\n y += round$2(targetH / 2);\n }\n if (rel[1] === 'c') {\n x += round$2(targetW / 2);\n }\n if (rel[3] === 'b') {\n y -= h;\n }\n if (rel[4] === 'r') {\n x -= w;\n }\n if (rel[3] === 'c') {\n y -= round$2(h / 2);\n }\n if (rel[4] === 'c') {\n x -= round$2(w / 2);\n }\n return create$4(x, y, w, h);\n };\n var findBestRelativePosition = function (rect, targetRect, constrainRect, rels) {\n var pos, i;\n for (i = 0; i < rels.length; i++) {\n pos = relativePosition(rect, targetRect, rels[i]);\n if (pos.x >= constrainRect.x && pos.x + pos.w <= constrainRect.w + constrainRect.x && pos.y >= constrainRect.y && pos.y + pos.h <= constrainRect.h + constrainRect.y) {\n return rels[i];\n }\n }\n return null;\n };\n var inflate = function (rect, w, h) {\n return create$4(rect.x - w, rect.y - h, rect.w + w * 2, rect.h + h * 2);\n };\n var intersect = function (rect, cropRect) {\n var x1, y1, x2, y2;\n x1 = max(rect.x, cropRect.x);\n y1 = max(rect.y, cropRect.y);\n x2 = min(rect.x + rect.w, cropRect.x + cropRect.w);\n y2 = min(rect.y + rect.h, cropRect.y + cropRect.h);\n if (x2 - x1 < 0 || y2 - y1 < 0) {\n return null;\n }\n return create$4(x1, y1, x2 - x1, y2 - y1);\n };\n var clamp$1 = function (rect, clampRect, fixedSize) {\n var underflowX1, underflowY1, overflowX2, overflowY2, x1, y1, x2, y2, cx2, cy2;\n x1 = rect.x;\n y1 = rect.y;\n x2 = rect.x + rect.w;\n y2 = rect.y + rect.h;\n cx2 = clampRect.x + clampRect.w;\n cy2 = clampRect.y + clampRect.h;\n underflowX1 = max(0, clampRect.x - x1);\n underflowY1 = max(0, clampRect.y - y1);\n overflowX2 = max(0, x2 - cx2);\n overflowY2 = max(0, y2 - cy2);\n x1 += underflowX1;\n y1 += underflowY1;\n if (fixedSize) {\n x2 += underflowX1;\n y2 += underflowY1;\n x1 -= overflowX2;\n y1 -= overflowY2;\n }\n x2 -= overflowX2;\n y2 -= overflowY2;\n return create$4(x1, y1, x2 - x1, y2 - y1);\n };\n var create$4 = function (x, y, w, h) {\n return {\n x: x,\n y: y,\n w: w,\n h: h\n };\n };\n var fromClientRect = function (clientRect) {\n return create$4(clientRect.left, clientRect.top, clientRect.width, clientRect.height);\n };\n var Rect = {\n inflate: inflate,\n relativePosition: relativePosition,\n findBestRelativePosition: findBestRelativePosition,\n intersect: intersect,\n clamp: clamp$1,\n create: create$4,\n fromClientRect: fromClientRect\n };\n\n var types = {};\n var Factory = {\n add: function (type, typeClass) {\n types[type.toLowerCase()] = typeClass;\n },\n has: function (type) {\n return !!types[type.toLowerCase()];\n },\n get: function (type) {\n var lctype = type.toLowerCase();\n var controlType = types.hasOwnProperty(lctype) ? types[lctype] : null;\n if (controlType === null) {\n throw new Error('Could not find module for type: ' + type);\n }\n return controlType;\n },\n create: function (type, settings) {\n var ControlType;\n if (typeof type === 'string') {\n settings = settings || {};\n settings.type = type;\n } else {\n settings = type;\n type = settings.type;\n }\n type = type.toLowerCase();\n ControlType = types[type];\n if (!ControlType) {\n throw new Error('Could not find control by type: ' + type);\n }\n ControlType = new ControlType(settings);\n ControlType.type = type;\n return ControlType;\n }\n };\n\n var each$n = Tools.each, extend$6 = Tools.extend;\n var extendClass, initializing;\n var Class = function () {\n };\n Class.extend = extendClass = function (prop) {\n var self = this;\n var _super = self.prototype;\n var prototype, name, member;\n var Class = function () {\n var i, mixins, mixin;\n var self = this;\n if (!initializing) {\n if (self.init) {\n self.init.apply(self, arguments);\n }\n mixins = self.Mixins;\n if (mixins) {\n i = mixins.length;\n while (i--) {\n mixin = mixins[i];\n if (mixin.init) {\n mixin.init.apply(self, arguments);\n }\n }\n }\n }\n };\n var dummy = function () {\n return this;\n };\n var createMethod = function (name, fn) {\n return function () {\n var self = this;\n var tmp = self._super;\n var ret;\n self._super = _super[name];\n ret = fn.apply(self, arguments);\n self._super = tmp;\n return ret;\n };\n };\n initializing = true;\n prototype = new self();\n initializing = false;\n if (prop.Mixins) {\n each$n(prop.Mixins, function (mixin) {\n for (var name_1 in mixin) {\n if (name_1 !== 'init') {\n prop[name_1] = mixin[name_1];\n }\n }\n });\n if (_super.Mixins) {\n prop.Mixins = _super.Mixins.concat(prop.Mixins);\n }\n }\n if (prop.Methods) {\n each$n(prop.Methods.split(','), function (name) {\n prop[name] = dummy;\n });\n }\n if (prop.Properties) {\n each$n(prop.Properties.split(','), function (name) {\n var fieldName = '_' + name;\n prop[name] = function (value) {\n var self = this;\n if (value !== undefined) {\n self[fieldName] = value;\n return self;\n }\n return self[fieldName];\n };\n });\n }\n if (prop.Statics) {\n each$n(prop.Statics, function (func, name) {\n Class[name] = func;\n });\n }\n if (prop.Defaults && _super.Defaults) {\n prop.Defaults = extend$6({}, _super.Defaults, prop.Defaults);\n }\n for (name in prop) {\n member = prop[name];\n if (typeof member === 'function' && _super[name]) {\n prototype[name] = createMethod(name, member);\n } else {\n prototype[name] = member;\n }\n }\n Class.prototype = prototype;\n Class.constructor = Class;\n Class.extend = extendClass;\n return Class;\n };\n\n var min$1 = Math.min, max$1 = Math.max, round$3 = Math.round;\n var Color = function (value) {\n var self = {};\n var r = 0, g = 0, b = 0;\n var rgb2hsv = function (r, g, b) {\n var h, s, v, d, minRGB, maxRGB;\n h = 0;\n s = 0;\n v = 0;\n r = r / 255;\n g = g / 255;\n b = b / 255;\n minRGB = min$1(r, min$1(g, b));\n maxRGB = max$1(r, max$1(g, b));\n if (minRGB === maxRGB) {\n v = minRGB;\n return {\n h: 0,\n s: 0,\n v: v * 100\n };\n }\n d = r === minRGB ? g - b : b === minRGB ? r - g : b - r;\n h = r === minRGB ? 3 : b === minRGB ? 1 : 5;\n h = 60 * (h - d / (maxRGB - minRGB));\n s = (maxRGB - minRGB) / maxRGB;\n v = maxRGB;\n return {\n h: round$3(h),\n s: round$3(s * 100),\n v: round$3(v * 100)\n };\n };\n var hsvToRgb = function (hue, saturation, brightness) {\n var side, chroma, x, match;\n hue = (parseInt(hue, 10) || 0) % 360;\n saturation = parseInt(saturation, 10) / 100;\n brightness = parseInt(brightness, 10) / 100;\n saturation = max$1(0, min$1(saturation, 1));\n brightness = max$1(0, min$1(brightness, 1));\n if (saturation === 0) {\n r = g = b = round$3(255 * brightness);\n return;\n }\n side = hue / 60;\n chroma = brightness * saturation;\n x = chroma * (1 - Math.abs(side % 2 - 1));\n match = brightness - chroma;\n switch (Math.floor(side)) {\n case 0:\n r = chroma;\n g = x;\n b = 0;\n break;\n case 1:\n r = x;\n g = chroma;\n b = 0;\n break;\n case 2:\n r = 0;\n g = chroma;\n b = x;\n break;\n case 3:\n r = 0;\n g = x;\n b = chroma;\n break;\n case 4:\n r = x;\n g = 0;\n b = chroma;\n break;\n case 5:\n r = chroma;\n g = 0;\n b = x;\n break;\n default:\n r = g = b = 0;\n }\n r = round$3(255 * (r + match));\n g = round$3(255 * (g + match));\n b = round$3(255 * (b + match));\n };\n var toHex = function () {\n var hex = function (val) {\n val = parseInt(val, 10).toString(16);\n return val.length > 1 ? val : '0' + val;\n };\n return '#' + hex(r) + hex(g) + hex(b);\n };\n var toRgb = function () {\n return {\n r: r,\n g: g,\n b: b\n };\n };\n var toHsv = function () {\n return rgb2hsv(r, g, b);\n };\n var parse = function (value) {\n var matches;\n if (typeof value === 'object') {\n if ('r' in value) {\n r = value.r;\n g = value.g;\n b = value.b;\n } else if ('v' in value) {\n hsvToRgb(value.h, value.s, value.v);\n }\n } else {\n if (matches = /rgb\\s*\\(\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*,\\s*([0-9]+)[^\\)]*\\)/gi.exec(value)) {\n r = parseInt(matches[1], 10);\n g = parseInt(matches[2], 10);\n b = parseInt(matches[3], 10);\n } else if (matches = /#([0-F]{2})([0-F]{2})([0-F]{2})/gi.exec(value)) {\n r = parseInt(matches[1], 16);\n g = parseInt(matches[2], 16);\n b = parseInt(matches[3], 16);\n } else if (matches = /#([0-F])([0-F])([0-F])/gi.exec(value)) {\n r = parseInt(matches[1] + matches[1], 16);\n g = parseInt(matches[2] + matches[2], 16);\n b = parseInt(matches[3] + matches[3], 16);\n }\n }\n r = r < 0 ? 0 : r > 255 ? 255 : r;\n g = g < 0 ? 0 : g > 255 ? 255 : g;\n b = b < 0 ? 0 : b > 255 ? 255 : b;\n return self;\n };\n if (value) {\n parse(value);\n }\n self.toRgb = toRgb;\n self.toHsv = toHsv;\n self.toHex = toHex;\n self.parse = parse;\n return self;\n };\n\n var serialize = function (o, quote) {\n var i, v, t, name;\n quote = quote || '\"';\n if (o === null) {\n return 'null';\n }\n t = typeof o;\n if (t === 'string') {\n v = '\\bb\\tt\\nn\\ff\\rr\"\"\\'\\'\\\\\\\\';\n return quote + o.replace(/([\\u0080-\\uFFFF\\x00-\\x1f\\\"\\'\\\\])/g, function (a, b) {\n if (quote === '\"' && a === '\\'') {\n return a;\n }\n i = v.indexOf(b);\n if (i + 1) {\n return '\\\\' + v.charAt(i + 1);\n }\n a = b.charCodeAt().toString(16);\n return '\\\\u' + '0000'.substring(a.length) + a;\n }) + quote;\n }\n if (t === 'object') {\n if (o.hasOwnProperty && Object.prototype.toString.call(o) === '[object Array]') {\n for (i = 0, v = '['; i < o.length; i++) {\n v += (i > 0 ? ',' : '') + serialize(o[i], quote);\n }\n return v + ']';\n }\n v = '{';\n for (name in o) {\n if (o.hasOwnProperty(name)) {\n v += typeof o[name] !== 'function' ? (v.length > 1 ? ',' + quote : quote) + name + quote + ':' + serialize(o[name], quote) : '';\n }\n }\n return v + '}';\n }\n return '' + o;\n };\n var JSON$1 = {\n serialize: serialize,\n parse: function (text) {\n try {\n return JSON.parse(text);\n } catch (ex) {\n }\n }\n };\n\n var JSONP = {\n callbacks: {},\n count: 0,\n send: function (settings) {\n var self = this, dom = DOMUtils$1.DOM, count = settings.count !== undefined ? settings.count : self.count;\n var id = 'tinymce_jsonp_' + count;\n self.callbacks[count] = function (json) {\n dom.remove(id);\n delete self.callbacks[count];\n settings.callback(json);\n };\n dom.add(dom.doc.body, 'script', {\n id: id,\n src: settings.url,\n type: 'text/javascript'\n });\n self.count++;\n }\n };\n\n var XHR = {\n send: function (settings) {\n var xhr, count = 0;\n var ready = function () {\n if (!settings.async || xhr.readyState === 4 || count++ > 10000) {\n if (settings.success && count < 10000 && xhr.status === 200) {\n settings.success.call(settings.success_scope, '' + xhr.responseText, xhr, settings);\n } else if (settings.error) {\n settings.error.call(settings.error_scope, count > 10000 ? 'TIMED_OUT' : 'GENERAL', xhr, settings);\n }\n xhr = null;\n } else {\n setTimeout(ready, 10);\n }\n };\n settings.scope = settings.scope || this;\n settings.success_scope = settings.success_scope || settings.scope;\n settings.error_scope = settings.error_scope || settings.scope;\n settings.async = settings.async === false ? false : true;\n settings.data = settings.data || '';\n XHR.fire('beforeInitialize', { settings: settings });\n xhr = XMLHttpRequest();\n if (xhr) {\n if (xhr.overrideMimeType) {\n xhr.overrideMimeType(settings.content_type);\n }\n xhr.open(settings.type || (settings.data ? 'POST' : 'GET'), settings.url, settings.async);\n if (settings.crossDomain) {\n xhr.withCredentials = true;\n }\n if (settings.content_type) {\n xhr.setRequestHeader('Content-Type', settings.content_type);\n }\n if (settings.requestheaders) {\n Tools.each(settings.requestheaders, function (header) {\n xhr.setRequestHeader(header.key, header.value);\n });\n }\n xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\n xhr = XHR.fire('beforeSend', {\n xhr: xhr,\n settings: settings\n }).xhr;\n xhr.send(settings.data);\n if (!settings.async) {\n return ready();\n }\n setTimeout(ready, 10);\n }\n }\n };\n Tools.extend(XHR, Observable);\n\n var extend$7 = Tools.extend;\n var JSONRequest = function (settings) {\n this.settings = extend$7({}, settings);\n this.count = 0;\n };\n JSONRequest.sendRPC = function (o) {\n return new JSONRequest().send(o);\n };\n JSONRequest.prototype = {\n send: function (args) {\n var ecb = args.error, scb = args.success;\n args = extend$7(this.settings, args);\n args.success = function (c, x) {\n c = JSON$1.parse(c);\n if (typeof c === 'undefined') {\n c = { error: 'JSON Parse error.' };\n }\n if (c.error) {\n ecb.call(args.error_scope || args.scope, c.error, x);\n } else {\n scb.call(args.success_scope || args.scope, c.result);\n }\n };\n args.error = function (ty, x) {\n if (ecb) {\n ecb.call(args.error_scope || args.scope, ty, x);\n }\n };\n args.data = JSON$1.serialize({\n id: args.id || 'c' + this.count++,\n method: args.method,\n params: args.params\n });\n args.content_type = 'application/json';\n XHR.send(args);\n }\n };\n\n var create$5 = function () {\n return function () {\n var data = {};\n var keys = [];\n var storage = {\n getItem: function (key) {\n var item = data[key];\n return item ? item : null;\n },\n setItem: function (key, value) {\n keys.push(key);\n data[key] = String(value);\n },\n key: function (index) {\n return keys[index];\n },\n removeItem: function (key) {\n keys = keys.filter(function (k) {\n return k === key;\n });\n delete data[key];\n },\n clear: function () {\n keys = [];\n data = {};\n },\n length: 0\n };\n Object.defineProperty(storage, 'length', {\n get: function () {\n return keys.length;\n },\n configurable: false,\n enumerable: false\n });\n return storage;\n }();\n };\n\n var localStorage;\n try {\n localStorage = domGlobals.window.localStorage;\n } catch (e) {\n localStorage = create$5();\n }\n var LocalStorage = localStorage;\n\n var tinymce = EditorManager$1;\n var publicApi = {\n geom: { Rect: Rect },\n util: {\n Promise: promiseObj,\n Delay: Delay,\n Tools: Tools,\n VK: VK,\n URI: URI,\n Class: Class,\n EventDispatcher: Dispatcher,\n Observable: Observable,\n I18n: I18n,\n XHR: XHR,\n JSON: JSON$1,\n JSONRequest: JSONRequest,\n JSONP: JSONP,\n LocalStorage: LocalStorage,\n Color: Color\n },\n dom: {\n EventUtils: EventUtils,\n Sizzle: Sizzle,\n DomQuery: DomQuery,\n TreeWalker: TreeWalker,\n DOMUtils: DOMUtils$1,\n ScriptLoader: ScriptLoader,\n RangeUtils: RangeUtils$1,\n Serializer: DomSerializer$1,\n ControlSelection: ControlSelection,\n BookmarkManager: BookmarkManager$1,\n Selection: Selection$1,\n Event: EventUtils.Event\n },\n html: {\n Styles: Styles,\n Entities: Entities,\n Node: Node$1,\n Schema: Schema,\n SaxParser: SaxParser$1,\n DomParser: DomParser,\n Writer: Writer,\n Serializer: HtmlSerializer\n },\n ui: { Factory: Factory },\n Env: Env,\n AddOnManager: AddOnManager,\n Annotator: Annotator,\n Formatter: Formatter,\n UndoManager: UndoManager,\n EditorCommands: EditorCommands,\n WindowManager: WindowManager,\n NotificationManager: NotificationManager,\n EditorObservable: EditorObservable$1,\n Shortcuts: Shortcuts,\n Editor: Editor,\n FocusManager: FocusManager,\n EditorManager: EditorManager$1,\n DOM: DOMUtils$1.DOM,\n ScriptLoader: ScriptLoader.ScriptLoader,\n PluginManager: AddOnManager.PluginManager,\n ThemeManager: AddOnManager.ThemeManager,\n trim: Tools.trim,\n isArray: Tools.isArray,\n is: Tools.is,\n toArray: Tools.toArray,\n makeMap: Tools.makeMap,\n each: Tools.each,\n map: Tools.map,\n grep: Tools.grep,\n inArray: Tools.inArray,\n extend: Tools.extend,\n create: Tools.create,\n walk: Tools.walk,\n createNS: Tools.createNS,\n resolve: Tools.resolve,\n explode: Tools.explode,\n _addCacheSuffix: Tools._addCacheSuffix,\n isOpera: Env.opera,\n isWebKit: Env.webkit,\n isIE: Env.ie,\n isGecko: Env.gecko,\n isMac: Env.mac\n };\n tinymce = Tools.extend(tinymce, publicApi);\n var Tinymce = tinymce;\n\n var exportToModuleLoaders = function (tinymce) {\n if (typeof module === 'object') {\n try {\n module.exports = tinymce;\n } catch (_) {\n }\n }\n };\n var exportToWindowGlobal = function (tinymce) {\n window.tinymce = tinymce;\n window.tinyMCE = tinymce;\n };\n exportToWindowGlobal(Tinymce);\n exportToModuleLoaders(Tinymce);\n\n}(window));\n})();\n","(function () {\nvar directionality = (function () {\n 'use strict';\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n var setDir = function (editor, dir) {\n var dom = editor.dom;\n var curDir;\n var blocks = editor.selection.getSelectedBlocks();\n if (blocks.length) {\n curDir = dom.getAttrib(blocks[0], 'dir');\n global$1.each(blocks, function (block) {\n if (!dom.getParent(block.parentNode, '*[dir=\"' + dir + '\"]', dom.getRoot())) {\n dom.setAttrib(block, 'dir', curDir !== dir ? dir : null);\n }\n });\n editor.nodeChanged();\n }\n };\n var Direction = { setDir: setDir };\n\n var register = function (editor) {\n editor.addCommand('mceDirectionLTR', function () {\n Direction.setDir(editor, 'ltr');\n });\n editor.addCommand('mceDirectionRTL', function () {\n Direction.setDir(editor, 'rtl');\n });\n };\n var Commands = { register: register };\n\n var generateSelector = function (dir) {\n var selector = [];\n global$1.each('h1 h2 h3 h4 h5 h6 div p'.split(' '), function (name) {\n selector.push(name + '[dir=' + dir + ']');\n });\n return selector.join(',');\n };\n var register$1 = function (editor) {\n editor.addButton('ltr', {\n title: 'Left to right',\n cmd: 'mceDirectionLTR',\n stateSelector: generateSelector('ltr')\n });\n editor.addButton('rtl', {\n title: 'Right to left',\n cmd: 'mceDirectionRTL',\n stateSelector: generateSelector('rtl')\n });\n };\n var Buttons = { register: register$1 };\n\n global.add('directionality', function (editor) {\n Commands.register(editor);\n Buttons.register(editor);\n });\n function Plugin () {\n }\n\n return Plugin;\n\n}());\n})();\n","// Exports the \"noneditable\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/noneditable')\n// ES2015:\n// import 'tinymce/plugins/noneditable'\nrequire('./plugin.js');","(function () {\nvar autosave = (function (domGlobals) {\n 'use strict';\n\n var Cell = function (initial) {\n var value = initial;\n var get = function () {\n return value;\n };\n var set = function (v) {\n value = v;\n };\n var clone = function () {\n return Cell(get());\n };\n return {\n get: get,\n set: set,\n clone: clone\n };\n };\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.util.LocalStorage');\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n var fireRestoreDraft = function (editor) {\n return editor.fire('RestoreDraft');\n };\n var fireStoreDraft = function (editor) {\n return editor.fire('StoreDraft');\n };\n var fireRemoveDraft = function (editor) {\n return editor.fire('RemoveDraft');\n };\n\n var parse = function (timeString, defaultTime) {\n var multiples = {\n s: 1000,\n m: 60000\n };\n var toParse = timeString || defaultTime;\n var parsedTime = /^(\\d+)([ms]?)$/.exec('' + toParse);\n return (parsedTime[2] ? multiples[parsedTime[2]] : 1) * parseInt(toParse, 10);\n };\n\n var shouldAskBeforeUnload = function (editor) {\n return editor.getParam('autosave_ask_before_unload', true);\n };\n var getAutoSavePrefix = function (editor) {\n var prefix = editor.getParam('autosave_prefix', 'tinymce-autosave-{path}{query}{hash}-{id}-');\n prefix = prefix.replace(/\\{path\\}/g, domGlobals.document.location.pathname);\n prefix = prefix.replace(/\\{query\\}/g, domGlobals.document.location.search);\n prefix = prefix.replace(/\\{hash\\}/g, domGlobals.document.location.hash);\n prefix = prefix.replace(/\\{id\\}/g, editor.id);\n return prefix;\n };\n var shouldRestoreWhenEmpty = function (editor) {\n return editor.getParam('autosave_restore_when_empty', false);\n };\n var getAutoSaveInterval = function (editor) {\n return parse(editor.settings.autosave_interval, '30s');\n };\n var getAutoSaveRetention = function (editor) {\n return parse(editor.settings.autosave_retention, '20m');\n };\n\n var isEmpty = function (editor, html) {\n var forcedRootBlockName = editor.settings.forced_root_block;\n html = global$2.trim(typeof html === 'undefined' ? editor.getBody().innerHTML : html);\n return html === '' || new RegExp('^<' + forcedRootBlockName + '[^>]*>((\\xA0| |[ \\t]|
]*>)+?|)' + forcedRootBlockName + '>|
$', 'i').test(html);\n };\n var hasDraft = function (editor) {\n var time = parseInt(global$1.getItem(getAutoSavePrefix(editor) + 'time'), 10) || 0;\n if (new Date().getTime() - time > getAutoSaveRetention(editor)) {\n removeDraft(editor, false);\n return false;\n }\n return true;\n };\n var removeDraft = function (editor, fire) {\n var prefix = getAutoSavePrefix(editor);\n global$1.removeItem(prefix + 'draft');\n global$1.removeItem(prefix + 'time');\n if (fire !== false) {\n fireRemoveDraft(editor);\n }\n };\n var storeDraft = function (editor) {\n var prefix = getAutoSavePrefix(editor);\n if (!isEmpty(editor) && editor.isDirty()) {\n global$1.setItem(prefix + 'draft', editor.getContent({\n format: 'raw',\n no_events: true\n }));\n global$1.setItem(prefix + 'time', new Date().getTime().toString());\n fireStoreDraft(editor);\n }\n };\n var restoreDraft = function (editor) {\n var prefix = getAutoSavePrefix(editor);\n if (hasDraft(editor)) {\n editor.setContent(global$1.getItem(prefix + 'draft'), { format: 'raw' });\n fireRestoreDraft(editor);\n }\n };\n var startStoreDraft = function (editor, started) {\n var interval = getAutoSaveInterval(editor);\n if (!started.get()) {\n setInterval(function () {\n if (!editor.removed) {\n storeDraft(editor);\n }\n }, interval);\n started.set(true);\n }\n };\n var restoreLastDraft = function (editor) {\n editor.undoManager.transact(function () {\n restoreDraft(editor);\n removeDraft(editor);\n });\n editor.focus();\n };\n\n function curry(fn) {\n var initialArgs = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n initialArgs[_i - 1] = arguments[_i];\n }\n return function () {\n var restArgs = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n restArgs[_i] = arguments[_i];\n }\n var all = initialArgs.concat(restArgs);\n return fn.apply(null, all);\n };\n }\n\n var get = function (editor) {\n return {\n hasDraft: curry(hasDraft, editor),\n storeDraft: curry(storeDraft, editor),\n restoreDraft: curry(restoreDraft, editor),\n removeDraft: curry(removeDraft, editor),\n isEmpty: curry(isEmpty, editor)\n };\n };\n\n var global$3 = tinymce.util.Tools.resolve('tinymce.EditorManager');\n\n global$3._beforeUnloadHandler = function () {\n var msg;\n global$2.each(global$3.get(), function (editor) {\n if (editor.plugins.autosave) {\n editor.plugins.autosave.storeDraft();\n }\n if (!msg && editor.isDirty() && shouldAskBeforeUnload(editor)) {\n msg = editor.translate('You have unsaved changes are you sure you want to navigate away?');\n }\n });\n return msg;\n };\n var setup = function (editor) {\n domGlobals.window.onbeforeunload = global$3._beforeUnloadHandler;\n };\n\n var postRender = function (editor, started) {\n return function (e) {\n var ctrl = e.control;\n ctrl.disabled(!hasDraft(editor));\n editor.on('StoreDraft RestoreDraft RemoveDraft', function () {\n ctrl.disabled(!hasDraft(editor));\n });\n startStoreDraft(editor, started);\n };\n };\n var register = function (editor, started) {\n editor.addButton('restoredraft', {\n title: 'Restore last draft',\n onclick: function () {\n restoreLastDraft(editor);\n },\n onPostRender: postRender(editor, started)\n });\n editor.addMenuItem('restoredraft', {\n text: 'Restore last draft',\n onclick: function () {\n restoreLastDraft(editor);\n },\n onPostRender: postRender(editor, started),\n context: 'file'\n });\n };\n\n global.add('autosave', function (editor) {\n var started = Cell(false);\n setup();\n register(editor, started);\n editor.on('init', function () {\n if (shouldRestoreWhenEmpty(editor) && editor.dom.isEmpty(editor.getBody())) {\n restoreDraft(editor);\n }\n });\n return get(editor);\n });\n function Plugin () {\n }\n\n return Plugin;\n\n}(window));\n})();\n","(function () {\nvar hr = (function () {\n 'use strict';\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var register = function (editor) {\n editor.addCommand('InsertHorizontalRule', function () {\n editor.execCommand('mceInsertContent', false, '
');\n });\n };\n var Commands = { register: register };\n\n var register$1 = function (editor) {\n editor.addButton('hr', {\n icon: 'hr',\n tooltip: 'Horizontal line',\n cmd: 'InsertHorizontalRule'\n });\n editor.addMenuItem('hr', {\n icon: 'hr',\n text: 'Horizontal line',\n cmd: 'InsertHorizontalRule',\n context: 'insert'\n });\n };\n var Buttons = { register: register$1 };\n\n global.add('hr', function (editor) {\n Commands.register(editor);\n Buttons.register(editor);\n });\n function Plugin () {\n }\n\n return Plugin;\n\n}());\n})();\n","//! moment.js locale configuration\n//! locale : Serbian [sr]\n//! author : Milan Janačković: https://github.com/milan-j\n//! author : Stefan Crnjaković : https://github.com/crnjakovic\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var translator = {\n words: {\n //Different grammatical cases\n ss: ['sekunda', 'sekunde', 'sekundi'],\n m: ['jedan minut', 'jednog minuta'],\n mm: ['minut', 'minuta', 'minuta'],\n h: ['jedan sat', 'jednog sata'],\n hh: ['sat', 'sata', 'sati'],\n d: ['jedan dan', 'jednog dana'],\n dd: ['dan', 'dana', 'dana'],\n M: ['jedan mesec', 'jednog meseca'],\n MM: ['mesec', 'meseca', 'meseci'],\n y: ['jednu godinu', 'jedne godine'],\n yy: ['godinu', 'godine', 'godina'],\n },\n correctGrammaticalCase: function (number, wordKey) {\n if (\n number % 10 >= 1 &&\n number % 10 <= 4 &&\n (number % 100 < 10 || number % 100 >= 20)\n ) {\n return number % 10 === 1 ? wordKey[0] : wordKey[1];\n }\n return wordKey[2];\n },\n translate: function (number, withoutSuffix, key, isFuture) {\n var wordKey = translator.words[key],\n word;\n\n if (key.length === 1) {\n // Nominativ\n if (key === 'y' && withoutSuffix) return 'jedna godina';\n return isFuture || withoutSuffix ? wordKey[0] : wordKey[1];\n }\n\n word = translator.correctGrammaticalCase(number, wordKey);\n // Nominativ\n if (key === 'yy' && withoutSuffix && word === 'godinu') {\n return number + ' godina';\n }\n\n return number + ' ' + word;\n },\n };\n\n var sr = moment.defineLocale('sr', {\n months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split(\n '_'\n ),\n monthsShort:\n 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split('_'),\n monthsParseExact: true,\n weekdays: 'nedelja_ponedeljak_utorak_sreda_četvrtak_petak_subota'.split(\n '_'\n ),\n weekdaysShort: 'ned._pon._uto._sre._čet._pet._sub.'.split('_'),\n weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'H:mm',\n LTS: 'H:mm:ss',\n L: 'D. M. YYYY.',\n LL: 'D. MMMM YYYY.',\n LLL: 'D. MMMM YYYY. H:mm',\n LLLL: 'dddd, D. MMMM YYYY. H:mm',\n },\n calendar: {\n sameDay: '[danas u] LT',\n nextDay: '[sutra u] LT',\n nextWeek: function () {\n switch (this.day()) {\n case 0:\n return '[u] [nedelju] [u] LT';\n case 3:\n return '[u] [sredu] [u] LT';\n case 6:\n return '[u] [subotu] [u] LT';\n case 1:\n case 2:\n case 4:\n case 5:\n return '[u] dddd [u] LT';\n }\n },\n lastDay: '[juče u] LT',\n lastWeek: function () {\n var lastWeekDays = [\n '[prošle] [nedelje] [u] LT',\n '[prošlog] [ponedeljka] [u] LT',\n '[prošlog] [utorka] [u] LT',\n '[prošle] [srede] [u] LT',\n '[prošlog] [četvrtka] [u] LT',\n '[prošlog] [petka] [u] LT',\n '[prošle] [subote] [u] LT',\n ];\n return lastWeekDays[this.day()];\n },\n sameElse: 'L',\n },\n relativeTime: {\n future: 'za %s',\n past: 'pre %s',\n s: 'nekoliko sekundi',\n ss: translator.translate,\n m: translator.translate,\n mm: translator.translate,\n h: translator.translate,\n hh: translator.translate,\n d: translator.translate,\n dd: translator.translate,\n M: translator.translate,\n MM: translator.translate,\n y: translator.translate,\n yy: translator.translate,\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal: '%d.',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 7, // The week that contains Jan 7th is the first week of the year.\n },\n });\n\n return sr;\n\n})));\n","//! moment.js locale configuration\n//! locale : Talossan [tzl]\n//! author : Robin van der Vliet : https://github.com/robin0van0der0v\n//! author : Iustì Canun\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n // After the year there should be a slash and the amount of years since December 26, 1979 in Roman numerals.\n // This is currently too difficult (maybe even impossible) to add.\n var tzl = moment.defineLocale('tzl', {\n months: 'Januar_Fevraglh_Març_Avrïu_Mai_Gün_Julia_Guscht_Setemvar_Listopäts_Noemvar_Zecemvar'.split(\n '_'\n ),\n monthsShort: 'Jan_Fev_Mar_Avr_Mai_Gün_Jul_Gus_Set_Lis_Noe_Zec'.split('_'),\n weekdays: 'Súladi_Lúneçi_Maitzi_Márcuri_Xhúadi_Viénerçi_Sáturi'.split('_'),\n weekdaysShort: 'Súl_Lún_Mai_Már_Xhú_Vié_Sát'.split('_'),\n weekdaysMin: 'Sú_Lú_Ma_Má_Xh_Vi_Sá'.split('_'),\n longDateFormat: {\n LT: 'HH.mm',\n LTS: 'HH.mm.ss',\n L: 'DD.MM.YYYY',\n LL: 'D. MMMM [dallas] YYYY',\n LLL: 'D. MMMM [dallas] YYYY HH.mm',\n LLLL: 'dddd, [li] D. MMMM [dallas] YYYY HH.mm',\n },\n meridiemParse: /d\\'o|d\\'a/i,\n isPM: function (input) {\n return \"d'o\" === input.toLowerCase();\n },\n meridiem: function (hours, minutes, isLower) {\n if (hours > 11) {\n return isLower ? \"d'o\" : \"D'O\";\n } else {\n return isLower ? \"d'a\" : \"D'A\";\n }\n },\n calendar: {\n sameDay: '[oxhi à] LT',\n nextDay: '[demà à] LT',\n nextWeek: 'dddd [à] LT',\n lastDay: '[ieiri à] LT',\n lastWeek: '[sür el] dddd [lasteu à] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'osprei %s',\n past: 'ja%s',\n s: processRelativeTime,\n ss: processRelativeTime,\n m: processRelativeTime,\n mm: processRelativeTime,\n h: processRelativeTime,\n hh: processRelativeTime,\n d: processRelativeTime,\n dd: processRelativeTime,\n M: processRelativeTime,\n MM: processRelativeTime,\n y: processRelativeTime,\n yy: processRelativeTime,\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal: '%d.',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n function processRelativeTime(number, withoutSuffix, key, isFuture) {\n var format = {\n s: ['viensas secunds', \"'iensas secunds\"],\n ss: [number + ' secunds', '' + number + ' secunds'],\n m: [\"'n míut\", \"'iens míut\"],\n mm: [number + ' míuts', '' + number + ' míuts'],\n h: [\"'n þora\", \"'iensa þora\"],\n hh: [number + ' þoras', '' + number + ' þoras'],\n d: [\"'n ziua\", \"'iensa ziua\"],\n dd: [number + ' ziuas', '' + number + ' ziuas'],\n M: [\"'n mes\", \"'iens mes\"],\n MM: [number + ' mesen', '' + number + ' mesen'],\n y: [\"'n ar\", \"'iens ar\"],\n yy: [number + ' ars', '' + number + ' ars'],\n };\n return isFuture\n ? format[key][0]\n : withoutSuffix\n ? format[key][0]\n : format[key][1];\n }\n\n return tzl;\n\n})));\n","//! moment.js locale configuration\n//! locale : Klingon [tlh]\n//! author : Dominika Kruk : https://github.com/amaranthrose\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var numbersNouns = 'pagh_wa’_cha’_wej_loS_vagh_jav_Soch_chorgh_Hut'.split('_');\n\n function translateFuture(output) {\n var time = output;\n time =\n output.indexOf('jaj') !== -1\n ? time.slice(0, -3) + 'leS'\n : output.indexOf('jar') !== -1\n ? time.slice(0, -3) + 'waQ'\n : output.indexOf('DIS') !== -1\n ? time.slice(0, -3) + 'nem'\n : time + ' pIq';\n return time;\n }\n\n function translatePast(output) {\n var time = output;\n time =\n output.indexOf('jaj') !== -1\n ? time.slice(0, -3) + 'Hu’'\n : output.indexOf('jar') !== -1\n ? time.slice(0, -3) + 'wen'\n : output.indexOf('DIS') !== -1\n ? time.slice(0, -3) + 'ben'\n : time + ' ret';\n return time;\n }\n\n function translate(number, withoutSuffix, string, isFuture) {\n var numberNoun = numberAsNoun(number);\n switch (string) {\n case 'ss':\n return numberNoun + ' lup';\n case 'mm':\n return numberNoun + ' tup';\n case 'hh':\n return numberNoun + ' rep';\n case 'dd':\n return numberNoun + ' jaj';\n case 'MM':\n return numberNoun + ' jar';\n case 'yy':\n return numberNoun + ' DIS';\n }\n }\n\n function numberAsNoun(number) {\n var hundred = Math.floor((number % 1000) / 100),\n ten = Math.floor((number % 100) / 10),\n one = number % 10,\n word = '';\n if (hundred > 0) {\n word += numbersNouns[hundred] + 'vatlh';\n }\n if (ten > 0) {\n word += (word !== '' ? ' ' : '') + numbersNouns[ten] + 'maH';\n }\n if (one > 0) {\n word += (word !== '' ? ' ' : '') + numbersNouns[one];\n }\n return word === '' ? 'pagh' : word;\n }\n\n var tlh = moment.defineLocale('tlh', {\n months: 'tera’ jar wa’_tera’ jar cha’_tera’ jar wej_tera’ jar loS_tera’ jar vagh_tera’ jar jav_tera’ jar Soch_tera’ jar chorgh_tera’ jar Hut_tera’ jar wa’maH_tera’ jar wa’maH wa’_tera’ jar wa’maH cha’'.split(\n '_'\n ),\n monthsShort:\n 'jar wa’_jar cha’_jar wej_jar loS_jar vagh_jar jav_jar Soch_jar chorgh_jar Hut_jar wa’maH_jar wa’maH wa’_jar wa’maH cha’'.split(\n '_'\n ),\n monthsParseExact: true,\n weekdays: 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split(\n '_'\n ),\n weekdaysShort:\n 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'),\n weekdaysMin:\n 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD.MM.YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd, D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[DaHjaj] LT',\n nextDay: '[wa’leS] LT',\n nextWeek: 'LLL',\n lastDay: '[wa’Hu’] LT',\n lastWeek: 'LLL',\n sameElse: 'L',\n },\n relativeTime: {\n future: translateFuture,\n past: translatePast,\n s: 'puS lup',\n ss: translate,\n m: 'wa’ tup',\n mm: translate,\n h: 'wa’ rep',\n hh: translate,\n d: 'wa’ jaj',\n dd: translate,\n M: 'wa’ jar',\n MM: translate,\n y: 'wa’ DIS',\n yy: translate,\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal: '%d.',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return tlh;\n\n})));\n","//! moment.js locale configuration\n//! locale : Tibetan [bo]\n//! author : Thupten N. Chakrishar : https://github.com/vajradog\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var symbolMap = {\n 1: '༡',\n 2: '༢',\n 3: '༣',\n 4: '༤',\n 5: '༥',\n 6: '༦',\n 7: '༧',\n 8: '༨',\n 9: '༩',\n 0: '༠',\n },\n numberMap = {\n '༡': '1',\n '༢': '2',\n '༣': '3',\n '༤': '4',\n '༥': '5',\n '༦': '6',\n '༧': '7',\n '༨': '8',\n '༩': '9',\n '༠': '0',\n };\n\n var bo = moment.defineLocale('bo', {\n months: 'ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ'.split(\n '_'\n ),\n monthsShort:\n 'ཟླ་1_ཟླ་2_ཟླ་3_ཟླ་4_ཟླ་5_ཟླ་6_ཟླ་7_ཟླ་8_ཟླ་9_ཟླ་10_ཟླ་11_ཟླ་12'.split(\n '_'\n ),\n monthsShortRegex: /^(ཟླ་\\d{1,2})/,\n monthsParseExact: true,\n weekdays:\n 'གཟའ་ཉི་མ་_གཟའ་ཟླ་བ་_གཟའ་མིག་དམར་_གཟའ་ལྷག་པ་_གཟའ་ཕུར་བུ_གཟའ་པ་སངས་_གཟའ་སྤེན་པ་'.split(\n '_'\n ),\n weekdaysShort: 'ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་'.split(\n '_'\n ),\n weekdaysMin: 'ཉི_ཟླ_མིག_ལྷག_ཕུར_སངས_སྤེན'.split('_'),\n longDateFormat: {\n LT: 'A h:mm',\n LTS: 'A h:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY, A h:mm',\n LLLL: 'dddd, D MMMM YYYY, A h:mm',\n },\n calendar: {\n sameDay: '[དི་རིང] LT',\n nextDay: '[སང་ཉིན] LT',\n nextWeek: '[བདུན་ཕྲག་རྗེས་མ], LT',\n lastDay: '[ཁ་སང] LT',\n lastWeek: '[བདུན་ཕྲག་མཐའ་མ] dddd, LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%s ལ་',\n past: '%s སྔན་ལ',\n s: 'ལམ་སང',\n ss: '%d སྐར་ཆ།',\n m: 'སྐར་མ་གཅིག',\n mm: '%d སྐར་མ',\n h: 'ཆུ་ཚོད་གཅིག',\n hh: '%d ཆུ་ཚོད',\n d: 'ཉིན་གཅིག',\n dd: '%d ཉིན་',\n M: 'ཟླ་བ་གཅིག',\n MM: '%d ཟླ་བ',\n y: 'ལོ་གཅིག',\n yy: '%d ལོ',\n },\n preparse: function (string) {\n return string.replace(/[༡༢༣༤༥༦༧༨༩༠]/g, function (match) {\n return numberMap[match];\n });\n },\n postformat: function (string) {\n return string.replace(/\\d/g, function (match) {\n return symbolMap[match];\n });\n },\n meridiemParse: /མཚན་མོ|ཞོགས་ཀས|ཉིན་གུང|དགོང་དག|མཚན་མོ/,\n meridiemHour: function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (\n (meridiem === 'མཚན་མོ' && hour >= 4) ||\n (meridiem === 'ཉིན་གུང' && hour < 5) ||\n meridiem === 'དགོང་དག'\n ) {\n return hour + 12;\n } else {\n return hour;\n }\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 4) {\n return 'མཚན་མོ';\n } else if (hour < 10) {\n return 'ཞོགས་ཀས';\n } else if (hour < 17) {\n return 'ཉིན་གུང';\n } else if (hour < 20) {\n return 'དགོང་དག';\n } else {\n return 'མཚན་མོ';\n }\n },\n week: {\n dow: 0, // Sunday is the first day of the week.\n doy: 6, // The week that contains Jan 6th is the first week of the year.\n },\n });\n\n return bo;\n\n})));\n","//! moment.js locale configuration\n//! locale : Portuguese (Brazil) [pt-br]\n//! author : Caio Ribeiro Pereira : https://github.com/caio-ribeiro-pereira\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var ptBr = moment.defineLocale('pt-br', {\n months: 'janeiro_fevereiro_março_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro'.split(\n '_'\n ),\n monthsShort: 'jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez'.split('_'),\n weekdays:\n 'domingo_segunda-feira_terça-feira_quarta-feira_quinta-feira_sexta-feira_sábado'.split(\n '_'\n ),\n weekdaysShort: 'dom_seg_ter_qua_qui_sex_sáb'.split('_'),\n weekdaysMin: 'do_2ª_3ª_4ª_5ª_6ª_sá'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D [de] MMMM [de] YYYY',\n LLL: 'D [de] MMMM [de] YYYY [às] HH:mm',\n LLLL: 'dddd, D [de] MMMM [de] YYYY [às] HH:mm',\n },\n calendar: {\n sameDay: '[Hoje às] LT',\n nextDay: '[Amanhã às] LT',\n nextWeek: 'dddd [às] LT',\n lastDay: '[Ontem às] LT',\n lastWeek: function () {\n return this.day() === 0 || this.day() === 6\n ? '[Último] dddd [às] LT' // Saturday + Sunday\n : '[Última] dddd [às] LT'; // Monday - Friday\n },\n sameElse: 'L',\n },\n relativeTime: {\n future: 'em %s',\n past: 'há %s',\n s: 'poucos segundos',\n ss: '%d segundos',\n m: 'um minuto',\n mm: '%d minutos',\n h: 'uma hora',\n hh: '%d horas',\n d: 'um dia',\n dd: '%d dias',\n M: 'um mês',\n MM: '%d meses',\n y: 'um ano',\n yy: '%d anos',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}º/,\n ordinal: '%dº',\n invalidDate: 'Data inválida',\n });\n\n return ptBr;\n\n})));\n","module.exports = __webpack_public_path__ + \"img/bgApps.16703050.jpg\";","(function () {\nvar visualchars = (function (domGlobals) {\n 'use strict';\n\n var Cell = function (initial) {\n var value = initial;\n var get = function () {\n return value;\n };\n var set = function (v) {\n value = v;\n };\n var clone = function () {\n return Cell(get());\n };\n return {\n get: get,\n set: set,\n clone: clone\n };\n };\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var get = function (toggleState) {\n var isEnabled = function () {\n return toggleState.get();\n };\n return { isEnabled: isEnabled };\n };\n var Api = { get: get };\n\n var fireVisualChars = function (editor, state) {\n return editor.fire('VisualChars', { state: state });\n };\n var Events = { fireVisualChars: fireVisualChars };\n\n var noop = function () {\n };\n var constant = function (value) {\n return function () {\n return value;\n };\n };\n var never = constant(false);\n var always = constant(true);\n\n var none = function () {\n return NONE;\n };\n var NONE = function () {\n var eq = function (o) {\n return o.isNone();\n };\n var call = function (thunk) {\n return thunk();\n };\n var id = function (n) {\n return n;\n };\n var me = {\n fold: function (n, s) {\n return n();\n },\n is: never,\n isSome: never,\n isNone: always,\n getOr: id,\n getOrThunk: call,\n getOrDie: function (msg) {\n throw new Error(msg || 'error: getOrDie called on none.');\n },\n getOrNull: constant(null),\n getOrUndefined: constant(undefined),\n or: id,\n orThunk: call,\n map: none,\n each: noop,\n bind: none,\n exists: never,\n forall: always,\n filter: none,\n equals: eq,\n equals_: eq,\n toArray: function () {\n return [];\n },\n toString: constant('none()')\n };\n if (Object.freeze) {\n Object.freeze(me);\n }\n return me;\n }();\n var some = function (a) {\n var constant_a = constant(a);\n var self = function () {\n return me;\n };\n var bind = function (f) {\n return f(a);\n };\n var me = {\n fold: function (n, s) {\n return s(a);\n },\n is: function (v) {\n return a === v;\n },\n isSome: always,\n isNone: never,\n getOr: constant_a,\n getOrThunk: constant_a,\n getOrDie: constant_a,\n getOrNull: constant_a,\n getOrUndefined: constant_a,\n or: self,\n orThunk: self,\n map: function (f) {\n return some(f(a));\n },\n each: function (f) {\n f(a);\n },\n bind: bind,\n exists: bind,\n forall: bind,\n filter: function (f) {\n return f(a) ? me : NONE;\n },\n toArray: function () {\n return [a];\n },\n toString: function () {\n return 'some(' + a + ')';\n },\n equals: function (o) {\n return o.is(a);\n },\n equals_: function (o, elementEq) {\n return o.fold(never, function (b) {\n return elementEq(a, b);\n });\n }\n };\n return me;\n };\n var from = function (value) {\n return value === null || value === undefined ? NONE : some(value);\n };\n var Option = {\n some: some,\n none: none,\n from: from\n };\n\n var typeOf = function (x) {\n if (x === null) {\n return 'null';\n }\n var t = typeof x;\n if (t === 'object' && (Array.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'Array')) {\n return 'array';\n }\n if (t === 'object' && (String.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'String')) {\n return 'string';\n }\n return t;\n };\n var isType = function (type) {\n return function (value) {\n return typeOf(value) === type;\n };\n };\n var isFunction = isType('function');\n\n var nativeSlice = Array.prototype.slice;\n var map = function (xs, f) {\n var len = xs.length;\n var r = new Array(len);\n for (var i = 0; i < len; i++) {\n var x = xs[i];\n r[i] = f(x, i);\n }\n return r;\n };\n var each = function (xs, f) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n f(x, i);\n }\n };\n var from$1 = isFunction(Array.from) ? Array.from : function (x) {\n return nativeSlice.call(x);\n };\n\n var fromHtml = function (html, scope) {\n var doc = scope || domGlobals.document;\n var div = doc.createElement('div');\n div.innerHTML = html;\n if (!div.hasChildNodes() || div.childNodes.length > 1) {\n domGlobals.console.error('HTML does not have a single root node', html);\n throw new Error('HTML must have a single root node');\n }\n return fromDom(div.childNodes[0]);\n };\n var fromTag = function (tag, scope) {\n var doc = scope || domGlobals.document;\n var node = doc.createElement(tag);\n return fromDom(node);\n };\n var fromText = function (text, scope) {\n var doc = scope || domGlobals.document;\n var node = doc.createTextNode(text);\n return fromDom(node);\n };\n var fromDom = function (node) {\n if (node === null || node === undefined) {\n throw new Error('Node cannot be null or undefined');\n }\n return { dom: constant(node) };\n };\n var fromPoint = function (docElm, x, y) {\n var doc = docElm.dom();\n return Option.from(doc.elementFromPoint(x, y)).map(fromDom);\n };\n var Element = {\n fromHtml: fromHtml,\n fromTag: fromTag,\n fromText: fromText,\n fromDom: fromDom,\n fromPoint: fromPoint\n };\n\n var ATTRIBUTE = domGlobals.Node.ATTRIBUTE_NODE;\n var CDATA_SECTION = domGlobals.Node.CDATA_SECTION_NODE;\n var COMMENT = domGlobals.Node.COMMENT_NODE;\n var DOCUMENT = domGlobals.Node.DOCUMENT_NODE;\n var DOCUMENT_TYPE = domGlobals.Node.DOCUMENT_TYPE_NODE;\n var DOCUMENT_FRAGMENT = domGlobals.Node.DOCUMENT_FRAGMENT_NODE;\n var ELEMENT = domGlobals.Node.ELEMENT_NODE;\n var TEXT = domGlobals.Node.TEXT_NODE;\n var PROCESSING_INSTRUCTION = domGlobals.Node.PROCESSING_INSTRUCTION_NODE;\n var ENTITY_REFERENCE = domGlobals.Node.ENTITY_REFERENCE_NODE;\n var ENTITY = domGlobals.Node.ENTITY_NODE;\n var NOTATION = domGlobals.Node.NOTATION_NODE;\n\n var Global = typeof domGlobals.window !== 'undefined' ? domGlobals.window : Function('return this;')();\n\n var type = function (element) {\n return element.dom().nodeType;\n };\n var value = function (element) {\n return element.dom().nodeValue;\n };\n var isType$1 = function (t) {\n return function (element) {\n return type(element) === t;\n };\n };\n var isText = isType$1(TEXT);\n\n var charMap = {\n '\\xA0': 'nbsp',\n '\\xAD': 'shy'\n };\n var charMapToRegExp = function (charMap, global) {\n var key, regExp = '';\n for (key in charMap) {\n regExp += key;\n }\n return new RegExp('[' + regExp + ']', global ? 'g' : '');\n };\n var charMapToSelector = function (charMap) {\n var key, selector = '';\n for (key in charMap) {\n if (selector) {\n selector += ',';\n }\n selector += 'span.mce-' + charMap[key];\n }\n return selector;\n };\n var Data = {\n charMap: charMap,\n regExp: charMapToRegExp(charMap),\n regExpGlobal: charMapToRegExp(charMap, true),\n selector: charMapToSelector(charMap),\n charMapToRegExp: charMapToRegExp,\n charMapToSelector: charMapToSelector\n };\n\n var wrapCharWithSpan = function (value) {\n return '' + value + '';\n };\n var Html = { wrapCharWithSpan: wrapCharWithSpan };\n\n var isMatch = function (n) {\n var value$1 = value(n);\n return isText(n) && value$1 !== undefined && Data.regExp.test(value$1);\n };\n var filterDescendants = function (scope, predicate) {\n var result = [];\n var dom = scope.dom();\n var children = map(dom.childNodes, Element.fromDom);\n each(children, function (x) {\n if (predicate(x)) {\n result = result.concat([x]);\n }\n result = result.concat(filterDescendants(x, predicate));\n });\n return result;\n };\n var findParentElm = function (elm, rootElm) {\n while (elm.parentNode) {\n if (elm.parentNode === rootElm) {\n return elm;\n }\n elm = elm.parentNode;\n }\n };\n var replaceWithSpans = function (text) {\n return text.replace(Data.regExpGlobal, Html.wrapCharWithSpan);\n };\n var Nodes = {\n isMatch: isMatch,\n filterDescendants: filterDescendants,\n findParentElm: findParentElm,\n replaceWithSpans: replaceWithSpans\n };\n\n var show = function (editor, rootElm) {\n var node, div;\n var nodeList = Nodes.filterDescendants(Element.fromDom(rootElm), Nodes.isMatch);\n each(nodeList, function (n) {\n var withSpans = Nodes.replaceWithSpans(editor.dom.encode(value(n)));\n div = editor.dom.create('div', null, withSpans);\n while (node = div.lastChild) {\n editor.dom.insertAfter(node, n.dom());\n }\n editor.dom.remove(n.dom());\n });\n };\n var hide = function (editor, body) {\n var nodeList = editor.dom.select(Data.selector, body);\n each(nodeList, function (node) {\n editor.dom.remove(node, 1);\n });\n };\n var toggle = function (editor) {\n var body = editor.getBody();\n var bookmark = editor.selection.getBookmark();\n var parentNode = Nodes.findParentElm(editor.selection.getNode(), body);\n parentNode = parentNode !== undefined ? parentNode : body;\n hide(editor, parentNode);\n show(editor, parentNode);\n editor.selection.moveToBookmark(bookmark);\n };\n var VisualChars = {\n show: show,\n hide: hide,\n toggle: toggle\n };\n\n var toggleVisualChars = function (editor, toggleState) {\n var body = editor.getBody();\n var selection = editor.selection;\n var bookmark;\n toggleState.set(!toggleState.get());\n Events.fireVisualChars(editor, toggleState.get());\n bookmark = selection.getBookmark();\n if (toggleState.get() === true) {\n VisualChars.show(editor, body);\n } else {\n VisualChars.hide(editor, body);\n }\n selection.moveToBookmark(bookmark);\n };\n var Actions = { toggleVisualChars: toggleVisualChars };\n\n var register = function (editor, toggleState) {\n editor.addCommand('mceVisualChars', function () {\n Actions.toggleVisualChars(editor, toggleState);\n });\n };\n var Commands = { register: register };\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.util.Delay');\n\n var setup = function (editor, toggleState) {\n var debouncedToggle = global$1.debounce(function () {\n VisualChars.toggle(editor);\n }, 300);\n if (editor.settings.forced_root_block !== false) {\n editor.on('keydown', function (e) {\n if (toggleState.get() === true) {\n e.keyCode === 13 ? VisualChars.toggle(editor) : debouncedToggle();\n }\n });\n }\n };\n var Keyboard = { setup: setup };\n\n var isEnabledByDefault = function (editor) {\n return editor.getParam('visualchars_default_state', false);\n };\n var Settings = { isEnabledByDefault: isEnabledByDefault };\n\n var setup$1 = function (editor, toggleState) {\n editor.on('init', function () {\n var valueForToggling = !Settings.isEnabledByDefault(editor);\n toggleState.set(valueForToggling);\n Actions.toggleVisualChars(editor, toggleState);\n });\n };\n var Bindings = { setup: setup$1 };\n\n var toggleActiveState = function (editor) {\n return function (e) {\n var ctrl = e.control;\n editor.on('VisualChars', function (e) {\n ctrl.active(e.state);\n });\n };\n };\n var register$1 = function (editor) {\n editor.addButton('visualchars', {\n active: false,\n title: 'Show invisible characters',\n cmd: 'mceVisualChars',\n onPostRender: toggleActiveState(editor)\n });\n editor.addMenuItem('visualchars', {\n text: 'Show invisible characters',\n cmd: 'mceVisualChars',\n onPostRender: toggleActiveState(editor),\n selectable: true,\n context: 'view',\n prependToContext: true\n });\n };\n\n global.add('visualchars', function (editor) {\n var toggleState = Cell(false);\n Commands.register(editor, toggleState);\n register$1(editor);\n Keyboard.setup(editor, toggleState);\n Bindings.setup(editor, toggleState);\n return Api.get(toggleState);\n });\n function Plugin () {\n }\n\n return Plugin;\n\n}(window));\n})();\n","(function () {\nvar tabfocus = (function (domGlobals) {\n 'use strict';\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.EditorManager');\n\n var global$3 = tinymce.util.Tools.resolve('tinymce.Env');\n\n var global$4 = tinymce.util.Tools.resolve('tinymce.util.Delay');\n\n var global$5 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n var global$6 = tinymce.util.Tools.resolve('tinymce.util.VK');\n\n var getTabFocusElements = function (editor) {\n return editor.getParam('tabfocus_elements', ':prev,:next');\n };\n var getTabFocus = function (editor) {\n return editor.getParam('tab_focus', getTabFocusElements(editor));\n };\n var Settings = { getTabFocus: getTabFocus };\n\n var DOM = global$1.DOM;\n var tabCancel = function (e) {\n if (e.keyCode === global$6.TAB && !e.ctrlKey && !e.altKey && !e.metaKey) {\n e.preventDefault();\n }\n };\n var setup = function (editor) {\n function tabHandler(e) {\n var x, el, v, i;\n if (e.keyCode !== global$6.TAB || e.ctrlKey || e.altKey || e.metaKey || e.isDefaultPrevented()) {\n return;\n }\n function find(direction) {\n el = DOM.select(':input:enabled,*[tabindex]:not(iframe)');\n function canSelectRecursive(e) {\n return e.nodeName === 'BODY' || e.type !== 'hidden' && e.style.display !== 'none' && e.style.visibility !== 'hidden' && canSelectRecursive(e.parentNode);\n }\n function canSelect(el) {\n return /INPUT|TEXTAREA|BUTTON/.test(el.tagName) && global$2.get(e.id) && el.tabIndex !== -1 && canSelectRecursive(el);\n }\n global$5.each(el, function (e, i) {\n if (e.id === editor.id) {\n x = i;\n return false;\n }\n });\n if (direction > 0) {\n for (i = x + 1; i < el.length; i++) {\n if (canSelect(el[i])) {\n return el[i];\n }\n }\n } else {\n for (i = x - 1; i >= 0; i--) {\n if (canSelect(el[i])) {\n return el[i];\n }\n }\n }\n return null;\n }\n v = global$5.explode(Settings.getTabFocus(editor));\n if (v.length === 1) {\n v[1] = v[0];\n v[0] = ':prev';\n }\n if (e.shiftKey) {\n if (v[0] === ':prev') {\n el = find(-1);\n } else {\n el = DOM.get(v[0]);\n }\n } else {\n if (v[1] === ':next') {\n el = find(1);\n } else {\n el = DOM.get(v[1]);\n }\n }\n if (el) {\n var focusEditor = global$2.get(el.id || el.name);\n if (el.id && focusEditor) {\n focusEditor.focus();\n } else {\n global$4.setTimeout(function () {\n if (!global$3.webkit) {\n domGlobals.window.focus();\n }\n el.focus();\n }, 10);\n }\n e.preventDefault();\n }\n }\n editor.on('init', function () {\n if (editor.inline) {\n DOM.setAttrib(editor.getBody(), 'tabIndex', null);\n }\n editor.on('keyup', tabCancel);\n if (global$3.gecko) {\n editor.on('keypress keydown', tabHandler);\n } else {\n editor.on('keydown', tabHandler);\n }\n });\n };\n var Keyboard = { setup: setup };\n\n global.add('tabfocus', function (editor) {\n Keyboard.setup(editor);\n });\n function Plugin () {\n }\n\n return Plugin;\n\n}(window));\n})();\n","//! moment.js locale configuration\n//! locale : Filipino [fil]\n//! author : Dan Hagman : https://github.com/hagmandan\n//! author : Matthew Co : https://github.com/matthewdeeco\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var fil = moment.defineLocale('fil', {\n months: 'Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre'.split(\n '_'\n ),\n monthsShort: 'Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis'.split('_'),\n weekdays: 'Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado'.split(\n '_'\n ),\n weekdaysShort: 'Lin_Lun_Mar_Miy_Huw_Biy_Sab'.split('_'),\n weekdaysMin: 'Li_Lu_Ma_Mi_Hu_Bi_Sab'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'MM/D/YYYY',\n LL: 'MMMM D, YYYY',\n LLL: 'MMMM D, YYYY HH:mm',\n LLLL: 'dddd, MMMM DD, YYYY HH:mm',\n },\n calendar: {\n sameDay: 'LT [ngayong araw]',\n nextDay: '[Bukas ng] LT',\n nextWeek: 'LT [sa susunod na] dddd',\n lastDay: 'LT [kahapon]',\n lastWeek: 'LT [noong nakaraang] dddd',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'sa loob ng %s',\n past: '%s ang nakalipas',\n s: 'ilang segundo',\n ss: '%d segundo',\n m: 'isang minuto',\n mm: '%d minuto',\n h: 'isang oras',\n hh: '%d oras',\n d: 'isang araw',\n dd: '%d araw',\n M: 'isang buwan',\n MM: '%d buwan',\n y: 'isang taon',\n yy: '%d taon',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}/,\n ordinal: function (number) {\n return number;\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return fil;\n\n})));\n","//! moment.js locale configuration\n//! locale : Armenian [hy-am]\n//! author : Armendarabyan : https://github.com/armendarabyan\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var hyAm = moment.defineLocale('hy-am', {\n months: {\n format: 'հունվարի_փետրվարի_մարտի_ապրիլի_մայիսի_հունիսի_հուլիսի_օգոստոսի_սեպտեմբերի_հոկտեմբերի_նոյեմբերի_դեկտեմբերի'.split(\n '_'\n ),\n standalone:\n 'հունվար_փետրվար_մարտ_ապրիլ_մայիս_հունիս_հուլիս_օգոստոս_սեպտեմբեր_հոկտեմբեր_նոյեմբեր_դեկտեմբեր'.split(\n '_'\n ),\n },\n monthsShort: 'հնվ_փտր_մրտ_ապր_մյս_հնս_հլս_օգս_սպտ_հկտ_նմբ_դկտ'.split('_'),\n weekdays:\n 'կիրակի_երկուշաբթի_երեքշաբթի_չորեքշաբթի_հինգշաբթի_ուրբաթ_շաբաթ'.split(\n '_'\n ),\n weekdaysShort: 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'),\n weekdaysMin: 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD.MM.YYYY',\n LL: 'D MMMM YYYY թ.',\n LLL: 'D MMMM YYYY թ., HH:mm',\n LLLL: 'dddd, D MMMM YYYY թ., HH:mm',\n },\n calendar: {\n sameDay: '[այսօր] LT',\n nextDay: '[վաղը] LT',\n lastDay: '[երեկ] LT',\n nextWeek: function () {\n return 'dddd [օրը ժամը] LT';\n },\n lastWeek: function () {\n return '[անցած] dddd [օրը ժամը] LT';\n },\n sameElse: 'L',\n },\n relativeTime: {\n future: '%s հետո',\n past: '%s առաջ',\n s: 'մի քանի վայրկյան',\n ss: '%d վայրկյան',\n m: 'րոպե',\n mm: '%d րոպե',\n h: 'ժամ',\n hh: '%d ժամ',\n d: 'օր',\n dd: '%d օր',\n M: 'ամիս',\n MM: '%d ամիս',\n y: 'տարի',\n yy: '%d տարի',\n },\n meridiemParse: /գիշերվա|առավոտվա|ցերեկվա|երեկոյան/,\n isPM: function (input) {\n return /^(ցերեկվա|երեկոյան)$/.test(input);\n },\n meridiem: function (hour) {\n if (hour < 4) {\n return 'գիշերվա';\n } else if (hour < 12) {\n return 'առավոտվա';\n } else if (hour < 17) {\n return 'ցերեկվա';\n } else {\n return 'երեկոյան';\n }\n },\n dayOfMonthOrdinalParse: /\\d{1,2}|\\d{1,2}-(ին|րդ)/,\n ordinal: function (number, period) {\n switch (period) {\n case 'DDD':\n case 'w':\n case 'W':\n case 'DDDo':\n if (number === 1) {\n return number + '-ին';\n }\n return number + '-րդ';\n default:\n return number;\n }\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 7, // The week that contains Jan 7th is the first week of the year.\n },\n });\n\n return hyAm;\n\n})));\n","(function () {\nvar wordcount = (function () {\n 'use strict';\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.dom.TreeWalker');\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.Env');\n\n var regExps = {\n aletter: '[A-Za-z\\xaa\\xb5\\xba\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02c1\\u02c6-\\u02d1\\u02e0-\\u02e4\\u02ec\\u02ee\\u0370-\\u0374\\u0376\\u0377\\u037a-\\u037d\\u0386\\u0388-\\u038a\\u038c\\u038e-\\u03a1\\u03a3-\\u03f5\\u03f7-\\u0481\\u048a-\\u0527\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05d0-\\u05ea\\u05f0-\\u05F3\\u0620-\\u064a\\u066e\\u066f\\u0671-\\u06d3\\u06d5\\u06e5\\u06e6\\u06ee\\u06ef\\u06fa-\\u06fc\\u06ff\\u0710\\u0712-\\u072f\\u074d-\\u07a5\\u07b1\\u07ca-\\u07ea\\u07f4\\u07f5\\u07fa\\u0800-\\u0815\\u081a\\u0824\\u0828\\u0840-\\u0858\\u0904-\\u0939\\u093d\\u0950\\u0958-\\u0961\\u0971-\\u0977\\u0979-\\u097f\\u0985-\\u098c\\u098f\\u0990\\u0993-\\u09a8\\u09aa-\\u09b0\\u09b2\\u09b6-\\u09b9\\u09bd\\u09ce\\u09dc\\u09dd\\u09df-\\u09e1\\u09f0\\u09f1\\u0a05-\\u0a0a\\u0a0f\\u0a10\\u0a13-\\u0a28\\u0a2a-\\u0a30\\u0a32\\u0a33\\u0a35\\u0a36\\u0a38\\u0a39\\u0a59-\\u0a5c\\u0a5e\\u0a72-\\u0a74\\u0a85-\\u0a8d\\u0a8f-\\u0a91\\u0a93-\\u0aa8\\u0aaa-\\u0ab0\\u0ab2\\u0ab3\\u0ab5-\\u0ab9\\u0abd\\u0ad0\\u0ae0\\u0ae1\\u0b05-\\u0b0c\\u0b0f\\u0b10\\u0b13-\\u0b28\\u0b2a-\\u0b30\\u0b32\\u0b33\\u0b35-\\u0b39\\u0b3d\\u0b5c\\u0b5d\\u0b5f-\\u0b61\\u0b71\\u0b83\\u0b85-\\u0b8a\\u0b8e-\\u0b90\\u0b92-\\u0b95\\u0b99\\u0b9a\\u0b9c\\u0b9e\\u0b9f\\u0ba3\\u0ba4\\u0ba8-\\u0baa\\u0bae-\\u0bb9\\u0bd0\\u0c05-\\u0c0c\\u0c0e-\\u0c10\\u0c12-\\u0c28\\u0c2a-\\u0c33\\u0c35-\\u0c39\\u0c3d\\u0c58\\u0c59\\u0c60\\u0c61\\u0c85-\\u0c8c\\u0c8e-\\u0c90\\u0c92-\\u0ca8\\u0caa-\\u0cb3\\u0cb5-\\u0cb9\\u0cbd\\u0cde\\u0ce0\\u0ce1\\u0cf1\\u0cf2\\u0d05-\\u0d0c\\u0d0e-\\u0d10\\u0d12-\\u0d3a\\u0d3d\\u0d4e\\u0d60\\u0d61\\u0d7a-\\u0d7f\\u0d85-\\u0d96\\u0d9a-\\u0db1\\u0db3-\\u0dbb\\u0dbd\\u0dc0-\\u0dc6\\u0f00\\u0f40-\\u0f47\\u0f49-\\u0f6c\\u0f88-\\u0f8c\\u10a0-\\u10c5\\u10d0-\\u10fa\\u10fc\\u1100-\\u1248\\u124a-\\u124d\\u1250-\\u1256\\u1258\\u125a-\\u125d\\u1260-\\u1288\\u128a-\\u128d\\u1290-\\u12b0\\u12b2-\\u12b5\\u12b8-\\u12be\\u12c0\\u12c2-\\u12c5\\u12c8-\\u12d6\\u12d8-\\u1310\\u1312-\\u1315\\u1318-\\u135a\\u1380-\\u138f\\u13a0-\\u13f4\\u1401-\\u166c\\u166f-\\u167f\\u1681-\\u169a\\u16a0-\\u16ea\\u16ee-\\u16f0\\u1700-\\u170c\\u170e-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176c\\u176e-\\u1770\\u1820-\\u1877\\u1880-\\u18a8\\u18aa\\u18b0-\\u18f5\\u1900-\\u191c\\u1a00-\\u1a16\\u1b05-\\u1b33\\u1b45-\\u1b4b\\u1b83-\\u1ba0\\u1bae\\u1baf\\u1bc0-\\u1be5\\u1c00-\\u1c23\\u1c4d-\\u1c4f\\u1c5a-\\u1c7d\\u1ce9-\\u1cec\\u1cee-\\u1cf1\\u1d00-\\u1dbf\\u1e00-\\u1f15\\u1f18-\\u1f1d\\u1f20-\\u1f45\\u1f48-\\u1f4d\\u1f50-\\u1f57\\u1f59\\u1f5b\\u1f5d\\u1f5f-\\u1f7d\\u1f80-\\u1fb4\\u1fb6-\\u1fbc\\u1fbe\\u1fc2-\\u1fc4\\u1fc6-\\u1fcc\\u1fd0-\\u1fd3\\u1fd6-\\u1fdb\\u1fe0-\\u1fec\\u1ff2-\\u1ff4\\u1ff6-\\u1ffc\\u2071\\u207f\\u2090-\\u209c\\u2102\\u2107\\u210a-\\u2113\\u2115\\u2119-\\u211d\\u2124\\u2126\\u2128\\u212a-\\u212d\\u212f-\\u2139\\u213c-\\u213f\\u2145-\\u2149\\u214e\\u2160-\\u2188\\u24B6-\\u24E9\\u2c00-\\u2c2e\\u2c30-\\u2c5e\\u2c60-\\u2ce4\\u2ceb-\\u2cee\\u2d00-\\u2d25\\u2d30-\\u2d65\\u2d6f\\u2d80-\\u2d96\\u2da0-\\u2da6\\u2da8-\\u2dae\\u2db0-\\u2db6\\u2db8-\\u2dbe\\u2dc0-\\u2dc6\\u2dc8-\\u2dce\\u2dd0-\\u2dd6\\u2dd8-\\u2dde\\u2e2f\\u3005\\u303b\\u303c\\u3105-\\u312d\\u3131-\\u318e\\u31a0-\\u31ba\\ua000-\\ua48c\\ua4d0-\\ua4fd\\ua500-\\ua60c\\ua610-\\ua61f\\ua62a\\ua62b\\ua640-\\ua66e\\ua67f-\\ua697\\ua6a0-\\ua6ef\\ua717-\\ua71f\\ua722-\\ua788\\ua78b-\\ua78e\\ua790\\ua791\\ua7a0-\\ua7a9\\ua7fa-\\ua801\\ua803-\\ua805\\ua807-\\ua80a\\ua80c-\\ua822\\ua840-\\ua873\\ua882-\\ua8b3\\ua8f2-\\ua8f7\\ua8fb\\ua90a-\\ua925\\ua930-\\ua946\\ua960-\\ua97c\\ua984-\\ua9b2\\ua9cf\\uaa00-\\uaa28\\uaa40-\\uaa42\\uaa44-\\uaa4b\\uab01-\\uab06\\uab09-\\uab0e\\uab11-\\uab16\\uab20-\\uab26\\uab28-\\uab2e\\uabc0-\\uabe2\\uac00-\\ud7a3\\ud7b0-\\ud7c6\\ud7cb-\\ud7fb\\ufb00-\\ufb06\\ufb13-\\ufb17\\ufb1d\\ufb1f-\\ufb28\\ufb2a-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40\\ufb41\\ufb43\\ufb44\\ufb46-\\ufbb1\\ufbd3-\\ufd3d\\ufd50-\\ufd8f\\ufd92-\\ufdc7\\ufdf0-\\ufdfb\\ufe70-\\ufe74\\ufe76-\\ufefc\\uff21-\\uff3a\\uff41-\\uff5a\\uffa0-\\uffbe\\uffc2-\\uffc7\\uffca-\\uffcf\\uffd2-\\uffd7\\uffda-\\uffdc]',\n midnumlet: '[-\\'\\\\.\\u2018\\u2019\\u2024\\uFE52\\uFF07\\uFF0E]',\n midletter: '[:\\xB7\\xB7\\u05F4\\u2027\\uFE13\\uFE55\\uFF1A]',\n midnum: '[\\xB1+*/,;;\\u0589\\u060C\\u060D\\u066C\\u07F8\\u2044\\uFE10\\uFE14\\uFE50\\uFE54\\uFF0C\\uFF1B]',\n numeric: '[0-9\\u0660-\\u0669\\u066B\\u06f0-\\u06f9\\u07c0-\\u07c9\\u0966-\\u096f\\u09e6-\\u09ef\\u0a66-\\u0a6f\\u0ae6-\\u0aef\\u0b66-\\u0b6f\\u0be6-\\u0bef\\u0c66-\\u0c6f\\u0ce6-\\u0cef\\u0d66-\\u0d6f\\u0e50-\\u0e59\\u0ed0-\\u0ed9\\u0f20-\\u0f29\\u1040-\\u1049\\u1090-\\u1099\\u17e0-\\u17e9\\u1810-\\u1819\\u1946-\\u194f\\u19d0-\\u19d9\\u1a80-\\u1a89\\u1a90-\\u1a99\\u1b50-\\u1b59\\u1bb0-\\u1bb9\\u1c40-\\u1c49\\u1c50-\\u1c59\\ua620-\\ua629\\ua8d0-\\ua8d9\\ua900-\\ua909\\ua9d0-\\ua9d9\\uaa50-\\uaa59\\uabf0-\\uabf9]',\n cr: '\\\\r',\n lf: '\\\\n',\n newline: '[\\x0B\\f\\x85\\u2028\\u2029]',\n extend: '[\\u0300-\\u036f\\u0483-\\u0489\\u0591-\\u05bd\\u05bf\\u05c1\\u05c2\\u05c4\\u05c5\\u05c7\\u0610-\\u061a\\u064b-\\u065f\\u0670\\u06d6-\\u06dc\\u06df-\\u06e4\\u06e7\\u06e8\\u06ea-\\u06ed\\u0711\\u0730-\\u074a\\u07a6-\\u07b0\\u07eb-\\u07f3\\u0816-\\u0819\\u081b-\\u0823\\u0825-\\u0827\\u0829-\\u082d\\u0859-\\u085b\\u0900-\\u0903\\u093a-\\u093c\\u093e-\\u094f\\u0951-\\u0957\\u0962\\u0963\\u0981-\\u0983\\u09bc\\u09be-\\u09c4\\u09c7\\u09c8\\u09cb-\\u09cd\\u09d7\\u09e2\\u09e3\\u0a01-\\u0a03\\u0a3c\\u0a3e-\\u0a42\\u0a47\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a70\\u0a71\\u0a75\\u0a81-\\u0a83\\u0abc\\u0abe-\\u0ac5\\u0ac7-\\u0ac9\\u0acb-\\u0acd\\u0ae2\\u0ae3\\u0b01-\\u0b03\\u0b3c\\u0b3e-\\u0b44\\u0b47\\u0b48\\u0b4b-\\u0b4d\\u0b56\\u0b57\\u0b62\\u0b63\\u0b82\\u0bbe-\\u0bc2\\u0bc6-\\u0bc8\\u0bca-\\u0bcd\\u0bd7\\u0c01-\\u0c03\\u0c3e-\\u0c44\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55\\u0c56\\u0c62\\u0c63\\u0c82\\u0c83\\u0cbc\\u0cbe-\\u0cc4\\u0cc6-\\u0cc8\\u0cca-\\u0ccd\\u0cd5\\u0cd6\\u0ce2\\u0ce3\\u0d02\\u0d03\\u0d3e-\\u0d44\\u0d46-\\u0d48\\u0d4a-\\u0d4d\\u0d57\\u0d62\\u0d63\\u0d82\\u0d83\\u0dca\\u0dcf-\\u0dd4\\u0dd6\\u0dd8-\\u0ddf\\u0df2\\u0df3\\u0e31\\u0e34-\\u0e3a\\u0e47-\\u0e4e\\u0eb1\\u0eb4-\\u0eb9\\u0ebb\\u0ebc\\u0ec8-\\u0ecd\\u0f18\\u0f19\\u0f35\\u0f37\\u0f39\\u0f3e\\u0f3f\\u0f71-\\u0f84\\u0f86\\u0f87\\u0f8d-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u102b-\\u103e\\u1056-\\u1059\\u105e-\\u1060\\u1062-\\u1064\\u1067-\\u106d\\u1071-\\u1074\\u1082-\\u108d\\u108f\\u109a-\\u109d\\u135d-\\u135f\\u1712-\\u1714\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17b6-\\u17d3\\u17dd\\u180b-\\u180d\\u18a9\\u1920-\\u192b\\u1930-\\u193b\\u19b0-\\u19c0\\u19c8\\u19c9\\u1a17-\\u1a1b\\u1a55-\\u1a5e\\u1a60-\\u1a7c\\u1a7f\\u1b00-\\u1b04\\u1b34-\\u1b44\\u1b6b-\\u1b73\\u1b80-\\u1b82\\u1ba1-\\u1baa\\u1be6-\\u1bf3\\u1c24-\\u1c37\\u1cd0-\\u1cd2\\u1cd4-\\u1ce8\\u1ced\\u1cf2\\u1dc0-\\u1de6\\u1dfc-\\u1dff\\u200c\\u200d\\u20d0-\\u20f0\\u2cef-\\u2cf1\\u2d7f\\u2de0-\\u2dff\\u302a-\\u302f\\u3099\\u309a\\ua66f-\\uA672\\ua67c\\ua67d\\ua6f0\\ua6f1\\ua802\\ua806\\ua80b\\ua823-\\ua827\\ua880\\ua881\\ua8b4-\\ua8c4\\ua8e0-\\ua8f1\\ua926-\\ua92d\\ua947-\\ua953\\ua980-\\ua983\\ua9b3-\\ua9c0\\uaa29-\\uaa36\\uaa43\\uaa4c\\uaa4d\\uaa7b\\uaab0\\uaab2-\\uaab4\\uaab7\\uaab8\\uaabe\\uaabf\\uaac1\\uabe3-\\uabea\\uabec\\uabed\\ufb1e\\ufe00-\\ufe0f\\ufe20-\\ufe26\\uff9e\\uff9f]',\n format: '[\\xAD\\u0600-\\u0603\\u06DD\\u070F\\u17b4\\u17b5\\u200E\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u206A-\\u206F\\uFEFF\\uFFF9-\\uFFFB]',\n katakana: '[\\u3031-\\u3035\\u309B\\u309C\\u30A0-\\u30fa\\u30fc-\\u30ff\\u31f0-\\u31ff\\u32D0-\\u32FE\\u3300-\\u3357\\uff66-\\uff9d]',\n extendnumlet: '[=_\\u203f\\u2040\\u2054\\ufe33\\ufe34\\ufe4d-\\ufe4f\\uff3f\\u2200-\\u22FF<>]',\n punctuation: '[!-#%-*,-\\\\/:;?@\\\\[-\\\\]_{}\\xA1\\xAB\\xB7\\xBB\\xBF;\\xB7\\u055A-\\u055F\\u0589\\u058A\\u05BE\\u05C0\\u05C3\\u05C6\\u05F3\\u05F4\\u0609\\u060A\\u060C\\u060D\\u061B\\u061E\\u061F\\u066A-\\u066D\\u06D4\\u0700-\\u070D\\u07F7-\\u07F9\\u0830-\\u083E\\u085E\\u0964\\u0965\\u0970\\u0DF4\\u0E4F\\u0E5A\\u0E5B\\u0F04-\\u0F12\\u0F3A-\\u0F3D\\u0F85\\u0FD0-\\u0FD4\\u0FD9\\u0FDA\\u104A-\\u104F\\u10FB\\u1361-\\u1368\\u1400\\u166D\\u166E\\u169B\\u169C\\u16EB-\\u16ED\\u1735\\u1736\\u17D4-\\u17D6\\u17D8-\\u17DA\\u1800-\\u180A\\u1944\\u1945\\u1A1E\\u1A1F\\u1AA0-\\u1AA6\\u1AA8-\\u1AAD\\u1B5A-\\u1B60\\u1BFC-\\u1BFF\\u1C3B-\\u1C3F\\u1C7E\\u1C7F\\u1CD3\\u2010-\\u2027\\u2030-\\u2043\\u2045-\\u2051\\u2053-\\u205E\\u207D\\u207E\\u208D\\u208E\\u3008\\u3009\\u2768-\\u2775\\u27C5\\u27C6\\u27E6-\\u27EF\\u2983-\\u2998\\u29D8-\\u29DB\\u29FC\\u29FD\\u2CF9-\\u2CFC\\u2CFE\\u2CFF\\u2D70\\u2E00-\\u2E2E\\u2E30\\u2E31\\u3001-\\u3003\\u3008-\\u3011\\u3014-\\u301F\\u3030\\u303D\\u30A0\\u30FB\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA673\\uA67E\\uA6F2-\\uA6F7\\uA874-\\uA877\\uA8CE\\uA8CF\\uA8F8-\\uA8FA\\uA92E\\uA92F\\uA95F\\uA9C1-\\uA9CD\\uA9DE\\uA9DF\\uAA5C-\\uAA5F\\uAADE\\uAADF\\uABEB\\uFD3E\\uFD3F\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE61\\uFE63\\uFE68\\uFE6A\\uFE6B\\uFF01-\\uFF03\\uFF05-\\uFF0A\\uFF0C-\\uFF0F\\uFF1A\\uFF1B\\uFF1F\\uFF20\\uFF3B-\\uFF3D\\uff3f\\uFF5B\\uFF5D\\uFF5F-\\uFF65]'\n };\n var characterIndices = {\n ALETTER: 0,\n MIDNUMLET: 1,\n MIDLETTER: 2,\n MIDNUM: 3,\n NUMERIC: 4,\n CR: 5,\n LF: 6,\n NEWLINE: 7,\n EXTEND: 8,\n FORMAT: 9,\n KATAKANA: 10,\n EXTENDNUMLET: 11,\n AT: 12,\n OTHER: 13\n };\n var SETS = [\n new RegExp(regExps.aletter),\n new RegExp(regExps.midnumlet),\n new RegExp(regExps.midletter),\n new RegExp(regExps.midnum),\n new RegExp(regExps.numeric),\n new RegExp(regExps.cr),\n new RegExp(regExps.lf),\n new RegExp(regExps.newline),\n new RegExp(regExps.extend),\n new RegExp(regExps.format),\n new RegExp(regExps.katakana),\n new RegExp(regExps.extendnumlet),\n new RegExp('@')\n ];\n var EMPTY_STRING = '';\n var PUNCTUATION = new RegExp('^' + regExps.punctuation + '$');\n var WHITESPACE = /^\\s+$/;\n var UnicodeData = {\n characterIndices: characterIndices,\n SETS: SETS,\n EMPTY_STRING: EMPTY_STRING,\n PUNCTUATION: PUNCTUATION,\n WHITESPACE: WHITESPACE\n };\n\n var noop = function () {\n };\n var constant = function (value) {\n return function () {\n return value;\n };\n };\n var never = constant(false);\n var always = constant(true);\n\n var none = function () {\n return NONE;\n };\n var NONE = function () {\n var eq = function (o) {\n return o.isNone();\n };\n var call = function (thunk) {\n return thunk();\n };\n var id = function (n) {\n return n;\n };\n var me = {\n fold: function (n, s) {\n return n();\n },\n is: never,\n isSome: never,\n isNone: always,\n getOr: id,\n getOrThunk: call,\n getOrDie: function (msg) {\n throw new Error(msg || 'error: getOrDie called on none.');\n },\n getOrNull: constant(null),\n getOrUndefined: constant(undefined),\n or: id,\n orThunk: call,\n map: none,\n each: noop,\n bind: none,\n exists: never,\n forall: always,\n filter: none,\n equals: eq,\n equals_: eq,\n toArray: function () {\n return [];\n },\n toString: constant('none()')\n };\n if (Object.freeze) {\n Object.freeze(me);\n }\n return me;\n }();\n\n var typeOf = function (x) {\n if (x === null) {\n return 'null';\n }\n var t = typeof x;\n if (t === 'object' && (Array.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'Array')) {\n return 'array';\n }\n if (t === 'object' && (String.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'String')) {\n return 'string';\n }\n return t;\n };\n var isType = function (type) {\n return function (value) {\n return typeOf(value) === type;\n };\n };\n var isFunction = isType('function');\n\n var nativeSlice = Array.prototype.slice;\n var map = function (xs, f) {\n var len = xs.length;\n var r = new Array(len);\n for (var i = 0; i < len; i++) {\n var x = xs[i];\n r[i] = f(x, i);\n }\n return r;\n };\n var from = isFunction(Array.from) ? Array.from : function (x) {\n return nativeSlice.call(x);\n };\n\n var SETS$1 = UnicodeData.SETS;\n var OTHER = UnicodeData.characterIndices.OTHER;\n var getType = function (char) {\n var j, set, type = OTHER;\n var setsLength = SETS$1.length;\n for (j = 0; j < setsLength; ++j) {\n set = SETS$1[j];\n if (set && set.test(char)) {\n type = j;\n break;\n }\n }\n return type;\n };\n var memoize = function (func) {\n var cache = {};\n return function (char) {\n if (cache[char]) {\n return cache[char];\n } else {\n var result = func(char);\n cache[char] = result;\n return result;\n }\n };\n };\n var classify = function (string) {\n var memoized = memoize(getType);\n return map(string.split(''), memoized);\n };\n var StringMapper = { classify: classify };\n\n var ci = UnicodeData.characterIndices;\n var isWordBoundary = function (map, index) {\n var prevType;\n var type = map[index];\n var nextType = map[index + 1];\n var nextNextType;\n if (index < 0 || index > map.length - 1 && index !== 0) {\n return false;\n }\n if (type === ci.ALETTER && nextType === ci.ALETTER) {\n return false;\n }\n nextNextType = map[index + 2];\n if (type === ci.ALETTER && (nextType === ci.MIDLETTER || nextType === ci.MIDNUMLET || nextType === ci.AT) && nextNextType === ci.ALETTER) {\n return false;\n }\n prevType = map[index - 1];\n if ((type === ci.MIDLETTER || type === ci.MIDNUMLET || nextType === ci.AT) && nextType === ci.ALETTER && prevType === ci.ALETTER) {\n return false;\n }\n if ((type === ci.NUMERIC || type === ci.ALETTER) && (nextType === ci.NUMERIC || nextType === ci.ALETTER)) {\n return false;\n }\n if ((type === ci.MIDNUM || type === ci.MIDNUMLET) && nextType === ci.NUMERIC && prevType === ci.NUMERIC) {\n return false;\n }\n if (type === ci.NUMERIC && (nextType === ci.MIDNUM || nextType === ci.MIDNUMLET) && nextNextType === ci.NUMERIC) {\n return false;\n }\n if (type === ci.EXTEND || type === ci.FORMAT || prevType === ci.EXTEND || prevType === ci.FORMAT || nextType === ci.EXTEND || nextType === ci.FORMAT) {\n return false;\n }\n if (type === ci.CR && nextType === ci.LF) {\n return false;\n }\n if (type === ci.NEWLINE || type === ci.CR || type === ci.LF) {\n return true;\n }\n if (nextType === ci.NEWLINE || nextType === ci.CR || nextType === ci.LF) {\n return true;\n }\n if (type === ci.KATAKANA && nextType === ci.KATAKANA) {\n return false;\n }\n if (nextType === ci.EXTENDNUMLET && (type === ci.ALETTER || type === ci.NUMERIC || type === ci.KATAKANA || type === ci.EXTENDNUMLET)) {\n return false;\n }\n if (type === ci.EXTENDNUMLET && (nextType === ci.ALETTER || nextType === ci.NUMERIC || nextType === ci.KATAKANA)) {\n return false;\n }\n if (type === ci.AT) {\n return false;\n }\n return true;\n };\n var WordBoundary = { isWordBoundary: isWordBoundary };\n\n var EMPTY_STRING$1 = UnicodeData.EMPTY_STRING;\n var WHITESPACE$1 = UnicodeData.WHITESPACE;\n var PUNCTUATION$1 = UnicodeData.PUNCTUATION;\n var isProtocol = function (word) {\n return word === 'http' || word === 'https';\n };\n var findWordEnd = function (str, index) {\n var i;\n for (i = index; i < str.length; ++i) {\n var chr = str.charAt(i);\n if (WHITESPACE$1.test(chr)) {\n break;\n }\n }\n return i;\n };\n var extractUrl = function (word, str, index) {\n var endIndex = findWordEnd(str, index + 1);\n var peakedWord = str.substring(index + 1, endIndex);\n if (peakedWord.substr(0, 3) === '://') {\n return {\n word: word + peakedWord,\n index: endIndex\n };\n }\n return {\n word: word,\n index: index\n };\n };\n var doGetWords = function (str, options) {\n var i = 0;\n var map = StringMapper.classify(str);\n var len = map.length;\n var word = [];\n var words = [];\n var chr;\n var includePunctuation;\n var includeWhitespace;\n if (!options) {\n options = {};\n }\n if (options.ignoreCase) {\n str = str.toLowerCase();\n }\n includePunctuation = options.includePunctuation;\n includeWhitespace = options.includeWhitespace;\n for (; i < len; ++i) {\n chr = str.charAt(i);\n word.push(chr);\n if (WordBoundary.isWordBoundary(map, i)) {\n word = word.join(EMPTY_STRING$1);\n if (word && (includeWhitespace || !WHITESPACE$1.test(word)) && (includePunctuation || !PUNCTUATION$1.test(word))) {\n if (isProtocol(word)) {\n var obj = extractUrl(word, str, i);\n words.push(obj.word);\n i = obj.index;\n } else {\n words.push(word);\n }\n }\n word = [];\n }\n }\n return words;\n };\n var getWords = function (str, options) {\n return doGetWords(str.replace(/\\ufeff/g, ''), options);\n };\n var WordGetter = { getWords: getWords };\n\n var getText = function (node, schema) {\n var blockElements = schema.getBlockElements();\n var shortEndedElements = schema.getShortEndedElements();\n var whiteSpaceElements = schema.getWhiteSpaceElements();\n var isSeparator = function (node) {\n return blockElements[node.nodeName] || shortEndedElements[node.nodeName] || whiteSpaceElements[node.nodeName];\n };\n var txt = '';\n var treeWalker = new global$1(node, node);\n while (node = treeWalker.next()) {\n if (node.nodeType === 3) {\n txt += node.data;\n } else if (isSeparator(node)) {\n txt += ' ';\n }\n }\n return txt;\n };\n var innerText = function (node, schema) {\n return global$2.ie ? getText(node, schema) : node.innerText;\n };\n var getTextContent = function (editor) {\n return editor.removed ? '' : innerText(editor.getBody(), editor.schema);\n };\n var getCount = function (editor) {\n return WordGetter.getWords(getTextContent(editor)).length;\n };\n var WordCount = { getCount: getCount };\n\n var get = function (editor) {\n var getCount = function () {\n return WordCount.getCount(editor);\n };\n return { getCount: getCount };\n };\n var Api = { get: get };\n\n var global$3 = tinymce.util.Tools.resolve('tinymce.util.Delay');\n\n var global$4 = tinymce.util.Tools.resolve('tinymce.util.I18n');\n\n var setup = function (editor) {\n var wordsToText = function (editor) {\n return global$4.translate([\n '{0} words',\n WordCount.getCount(editor)\n ]);\n };\n var update = function () {\n editor.theme.panel.find('#wordcount').text(wordsToText(editor));\n };\n editor.on('init', function () {\n var statusbar = editor.theme.panel && editor.theme.panel.find('#statusbar')[0];\n var debouncedUpdate = global$3.debounce(update, 300);\n if (statusbar) {\n global$3.setEditorTimeout(editor, function () {\n statusbar.insert({\n type: 'label',\n name: 'wordcount',\n text: wordsToText(editor),\n classes: 'wordcount',\n disabled: editor.settings.readonly\n }, 0);\n editor.on('setcontent beforeaddundo undo redo keyup', debouncedUpdate);\n }, 0);\n }\n });\n };\n var Statusbar = { setup: setup };\n\n global.add('wordcount', function (editor) {\n Statusbar.setup(editor);\n return Api.get(editor);\n });\n function Plugin () {\n }\n\n return Plugin;\n\n}());\n})();\n","(function () {\nvar nonbreaking = (function () {\n 'use strict';\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var stringRepeat = function (string, repeats) {\n var str = '';\n for (var index = 0; index < repeats; index++) {\n str += string;\n }\n return str;\n };\n var isVisualCharsEnabled = function (editor) {\n return editor.plugins.visualchars ? editor.plugins.visualchars.isEnabled() : false;\n };\n var insertNbsp = function (editor, times) {\n var nbsp = isVisualCharsEnabled(editor) ? ' ' : ' ';\n editor.insertContent(stringRepeat(nbsp, times));\n editor.dom.setAttrib(editor.dom.select('span.mce-nbsp'), 'data-mce-bogus', '1');\n };\n var Actions = { insertNbsp: insertNbsp };\n\n var register = function (editor) {\n editor.addCommand('mceNonBreaking', function () {\n Actions.insertNbsp(editor, 1);\n });\n };\n var Commands = { register: register };\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.util.VK');\n\n var getKeyboardSpaces = function (editor) {\n var spaces = editor.getParam('nonbreaking_force_tab', 0);\n if (typeof spaces === 'boolean') {\n return spaces === true ? 3 : 0;\n } else {\n return spaces;\n }\n };\n var Settings = { getKeyboardSpaces: getKeyboardSpaces };\n\n var setup = function (editor) {\n var spaces = Settings.getKeyboardSpaces(editor);\n if (spaces > 0) {\n editor.on('keydown', function (e) {\n if (e.keyCode === global$1.TAB && !e.isDefaultPrevented()) {\n if (e.shiftKey) {\n return;\n }\n e.preventDefault();\n e.stopImmediatePropagation();\n Actions.insertNbsp(editor, spaces);\n }\n });\n }\n };\n var Keyboard = { setup: setup };\n\n var register$1 = function (editor) {\n editor.addButton('nonbreaking', {\n title: 'Nonbreaking space',\n cmd: 'mceNonBreaking'\n });\n editor.addMenuItem('nonbreaking', {\n icon: 'nonbreaking',\n text: 'Nonbreaking space',\n cmd: 'mceNonBreaking',\n context: 'insert'\n });\n };\n var Buttons = { register: register$1 };\n\n global.add('nonbreaking', function (editor) {\n Commands.register(editor);\n Buttons.register(editor);\n Keyboard.setup(editor);\n });\n function Plugin () {\n }\n\n return Plugin;\n\n}());\n})();\n","//! moment.js locale configuration\n//! locale : Catalan [ca]\n//! author : Juan G. Hurtado : https://github.com/juanghurtado\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var ca = moment.defineLocale('ca', {\n months: {\n standalone:\n 'gener_febrer_març_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre'.split(\n '_'\n ),\n format: \"de gener_de febrer_de març_d'abril_de maig_de juny_de juliol_d'agost_de setembre_d'octubre_de novembre_de desembre\".split(\n '_'\n ),\n isFormat: /D[oD]?(\\s)+MMMM/,\n },\n monthsShort:\n 'gen._febr._març_abr._maig_juny_jul._ag._set._oct._nov._des.'.split(\n '_'\n ),\n monthsParseExact: true,\n weekdays:\n 'diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte'.split(\n '_'\n ),\n weekdaysShort: 'dg._dl._dt._dc._dj._dv._ds.'.split('_'),\n weekdaysMin: 'dg_dl_dt_dc_dj_dv_ds'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'H:mm',\n LTS: 'H:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM [de] YYYY',\n ll: 'D MMM YYYY',\n LLL: 'D MMMM [de] YYYY [a les] H:mm',\n lll: 'D MMM YYYY, H:mm',\n LLLL: 'dddd D MMMM [de] YYYY [a les] H:mm',\n llll: 'ddd D MMM YYYY, H:mm',\n },\n calendar: {\n sameDay: function () {\n return '[avui a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';\n },\n nextDay: function () {\n return '[demà a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';\n },\n nextWeek: function () {\n return 'dddd [a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';\n },\n lastDay: function () {\n return '[ahir a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';\n },\n lastWeek: function () {\n return (\n '[el] dddd [passat a ' +\n (this.hours() !== 1 ? 'les' : 'la') +\n '] LT'\n );\n },\n sameElse: 'L',\n },\n relativeTime: {\n future: \"d'aquí %s\",\n past: 'fa %s',\n s: 'uns segons',\n ss: '%d segons',\n m: 'un minut',\n mm: '%d minuts',\n h: 'una hora',\n hh: '%d hores',\n d: 'un dia',\n dd: '%d dies',\n M: 'un mes',\n MM: '%d mesos',\n y: 'un any',\n yy: '%d anys',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(r|n|t|è|a)/,\n ordinal: function (number, period) {\n var output =\n number === 1\n ? 'r'\n : number === 2\n ? 'n'\n : number === 3\n ? 'r'\n : number === 4\n ? 't'\n : 'è';\n if (period === 'w' || period === 'W') {\n output = 'a';\n }\n return number + output;\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return ca;\n\n})));\n","//! moment.js locale configuration\n//! locale : French (Canada) [fr-ca]\n//! author : Jonathan Abourbih : https://github.com/jonbca\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var frCa = moment.defineLocale('fr-ca', {\n months: 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split(\n '_'\n ),\n monthsShort:\n 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split(\n '_'\n ),\n monthsParseExact: true,\n weekdays: 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),\n weekdaysShort: 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),\n weekdaysMin: 'di_lu_ma_me_je_ve_sa'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'YYYY-MM-DD',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[Aujourd’hui à] LT',\n nextDay: '[Demain à] LT',\n nextWeek: 'dddd [à] LT',\n lastDay: '[Hier à] LT',\n lastWeek: 'dddd [dernier à] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'dans %s',\n past: 'il y a %s',\n s: 'quelques secondes',\n ss: '%d secondes',\n m: 'une minute',\n mm: '%d minutes',\n h: 'une heure',\n hh: '%d heures',\n d: 'un jour',\n dd: '%d jours',\n M: 'un mois',\n MM: '%d mois',\n y: 'un an',\n yy: '%d ans',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(er|e)/,\n ordinal: function (number, period) {\n switch (period) {\n // Words with masculine grammatical gender: mois, trimestre, jour\n default:\n case 'M':\n case 'Q':\n case 'D':\n case 'DDD':\n case 'd':\n return number + (number === 1 ? 'er' : 'e');\n\n // Words with feminine grammatical gender: semaine\n case 'w':\n case 'W':\n return number + (number === 1 ? 're' : 'e');\n }\n },\n });\n\n return frCa;\n\n})));\n","//! moment.js locale configuration\n//! locale : Dutch (Belgium) [nl-be]\n//! author : Joris Röling : https://github.com/jorisroling\n//! author : Jacob Middag : https://github.com/middagj\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var monthsShortWithDots =\n 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split('_'),\n monthsShortWithoutDots =\n 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split('_'),\n monthsParse = [\n /^jan/i,\n /^feb/i,\n /^maart|mrt.?$/i,\n /^apr/i,\n /^mei$/i,\n /^jun[i.]?$/i,\n /^jul[i.]?$/i,\n /^aug/i,\n /^sep/i,\n /^okt/i,\n /^nov/i,\n /^dec/i,\n ],\n monthsRegex =\n /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\\.?|feb\\.?|mrt\\.?|apr\\.?|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i;\n\n var nlBe = moment.defineLocale('nl-be', {\n months: 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split(\n '_'\n ),\n monthsShort: function (m, format) {\n if (!m) {\n return monthsShortWithDots;\n } else if (/-MMM-/.test(format)) {\n return monthsShortWithoutDots[m.month()];\n } else {\n return monthsShortWithDots[m.month()];\n }\n },\n\n monthsRegex: monthsRegex,\n monthsShortRegex: monthsRegex,\n monthsStrictRegex:\n /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,\n monthsShortStrictRegex:\n /^(jan\\.?|feb\\.?|mrt\\.?|apr\\.?|mei|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i,\n\n monthsParse: monthsParse,\n longMonthsParse: monthsParse,\n shortMonthsParse: monthsParse,\n\n weekdays:\n 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split('_'),\n weekdaysShort: 'zo._ma._di._wo._do._vr._za.'.split('_'),\n weekdaysMin: 'zo_ma_di_wo_do_vr_za'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[vandaag om] LT',\n nextDay: '[morgen om] LT',\n nextWeek: 'dddd [om] LT',\n lastDay: '[gisteren om] LT',\n lastWeek: '[afgelopen] dddd [om] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'over %s',\n past: '%s geleden',\n s: 'een paar seconden',\n ss: '%d seconden',\n m: 'één minuut',\n mm: '%d minuten',\n h: 'één uur',\n hh: '%d uur',\n d: 'één dag',\n dd: '%d dagen',\n M: 'één maand',\n MM: '%d maanden',\n y: 'één jaar',\n yy: '%d jaar',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n ordinal: function (number) {\n return (\n number +\n (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de')\n );\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return nlBe;\n\n})));\n","// Exports the \"lists\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/lists')\n// ES2015:\n// import 'tinymce/plugins/lists'\nrequire('./plugin.js');","(function () {\nvar colorpicker = (function () {\n 'use strict';\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.util.Color');\n\n var showPreview = function (win, hexColor) {\n win.find('#preview')[0].getEl().style.background = hexColor;\n };\n var setColor = function (win, value) {\n var color = global$1(value), rgb = color.toRgb();\n win.fromJSON({\n r: rgb.r,\n g: rgb.g,\n b: rgb.b,\n hex: color.toHex().substr(1)\n });\n showPreview(win, color.toHex());\n };\n var open = function (editor, callback, value) {\n var win = editor.windowManager.open({\n title: 'Color',\n items: {\n type: 'container',\n layout: 'flex',\n direction: 'row',\n align: 'stretch',\n padding: 5,\n spacing: 10,\n items: [\n {\n type: 'colorpicker',\n value: value,\n onchange: function () {\n var rgb = this.rgb();\n if (win) {\n win.find('#r').value(rgb.r);\n win.find('#g').value(rgb.g);\n win.find('#b').value(rgb.b);\n win.find('#hex').value(this.value().substr(1));\n showPreview(win, this.value());\n }\n }\n },\n {\n type: 'form',\n padding: 0,\n labelGap: 5,\n defaults: {\n type: 'textbox',\n size: 7,\n value: '0',\n flex: 1,\n spellcheck: false,\n onchange: function () {\n var colorPickerCtrl = win.find('colorpicker')[0];\n var name, value;\n name = this.name();\n value = this.value();\n if (name === 'hex') {\n value = '#' + value;\n setColor(win, value);\n colorPickerCtrl.value(value);\n return;\n }\n value = {\n r: win.find('#r').value(),\n g: win.find('#g').value(),\n b: win.find('#b').value()\n };\n colorPickerCtrl.value(value);\n setColor(win, value);\n }\n },\n items: [\n {\n name: 'r',\n label: 'R',\n autofocus: 1\n },\n {\n name: 'g',\n label: 'G'\n },\n {\n name: 'b',\n label: 'B'\n },\n {\n name: 'hex',\n label: '#',\n value: '000000'\n },\n {\n name: 'preview',\n type: 'container',\n border: 1\n }\n ]\n }\n ]\n },\n onSubmit: function () {\n callback('#' + win.toJSON().hex);\n }\n });\n setColor(win, value);\n };\n var Dialog = { open: open };\n\n global.add('colorpicker', function (editor) {\n if (!editor.settings.color_picker_callback) {\n editor.settings.color_picker_callback = function (callback, value) {\n Dialog.open(editor, callback, value);\n };\n }\n });\n function Plugin () {\n }\n\n return Plugin;\n\n}());\n})();\n","//! moment.js locale configuration\n//! locale : Hindi [hi]\n//! author : Mayank Singhal : https://github.com/mayanksinghal\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var symbolMap = {\n 1: '१',\n 2: '२',\n 3: '३',\n 4: '४',\n 5: '५',\n 6: '६',\n 7: '७',\n 8: '८',\n 9: '९',\n 0: '०',\n },\n numberMap = {\n '१': '1',\n '२': '2',\n '३': '3',\n '४': '4',\n '५': '5',\n '६': '6',\n '७': '7',\n '८': '8',\n '९': '9',\n '०': '0',\n },\n monthsParse = [\n /^जन/i,\n /^फ़र|फर/i,\n /^मार्च/i,\n /^अप्रै/i,\n /^मई/i,\n /^जून/i,\n /^जुल/i,\n /^अग/i,\n /^सितं|सित/i,\n /^अक्टू/i,\n /^नव|नवं/i,\n /^दिसं|दिस/i,\n ],\n shortMonthsParse = [\n /^जन/i,\n /^फ़र/i,\n /^मार्च/i,\n /^अप्रै/i,\n /^मई/i,\n /^जून/i,\n /^जुल/i,\n /^अग/i,\n /^सित/i,\n /^अक्टू/i,\n /^नव/i,\n /^दिस/i,\n ];\n\n var hi = moment.defineLocale('hi', {\n months: {\n format: 'जनवरी_फ़रवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितम्बर_अक्टूबर_नवम्बर_दिसम्बर'.split(\n '_'\n ),\n standalone:\n 'जनवरी_फरवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितंबर_अक्टूबर_नवंबर_दिसंबर'.split(\n '_'\n ),\n },\n monthsShort:\n 'जन._फ़र._मार्च_अप्रै._मई_जून_जुल._अग._सित._अक्टू._नव._दिस.'.split('_'),\n weekdays: 'रविवार_सोमवार_मंगलवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'),\n weekdaysShort: 'रवि_सोम_मंगल_बुध_गुरू_शुक्र_शनि'.split('_'),\n weekdaysMin: 'र_सो_मं_बु_गु_शु_श'.split('_'),\n longDateFormat: {\n LT: 'A h:mm बजे',\n LTS: 'A h:mm:ss बजे',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY, A h:mm बजे',\n LLLL: 'dddd, D MMMM YYYY, A h:mm बजे',\n },\n\n monthsParse: monthsParse,\n longMonthsParse: monthsParse,\n shortMonthsParse: shortMonthsParse,\n\n monthsRegex:\n /^(जनवरी|जन\\.?|फ़रवरी|फरवरी|फ़र\\.?|मार्च?|अप्रैल|अप्रै\\.?|मई?|जून?|जुलाई|जुल\\.?|अगस्त|अग\\.?|सितम्बर|सितंबर|सित\\.?|अक्टूबर|अक्टू\\.?|नवम्बर|नवंबर|नव\\.?|दिसम्बर|दिसंबर|दिस\\.?)/i,\n\n monthsShortRegex:\n /^(जनवरी|जन\\.?|फ़रवरी|फरवरी|फ़र\\.?|मार्च?|अप्रैल|अप्रै\\.?|मई?|जून?|जुलाई|जुल\\.?|अगस्त|अग\\.?|सितम्बर|सितंबर|सित\\.?|अक्टूबर|अक्टू\\.?|नवम्बर|नवंबर|नव\\.?|दिसम्बर|दिसंबर|दिस\\.?)/i,\n\n monthsStrictRegex:\n /^(जनवरी?|फ़रवरी|फरवरी?|मार्च?|अप्रैल?|मई?|जून?|जुलाई?|अगस्त?|सितम्बर|सितंबर|सित?\\.?|अक्टूबर|अक्टू\\.?|नवम्बर|नवंबर?|दिसम्बर|दिसंबर?)/i,\n\n monthsShortStrictRegex:\n /^(जन\\.?|फ़र\\.?|मार्च?|अप्रै\\.?|मई?|जून?|जुल\\.?|अग\\.?|सित\\.?|अक्टू\\.?|नव\\.?|दिस\\.?)/i,\n\n calendar: {\n sameDay: '[आज] LT',\n nextDay: '[कल] LT',\n nextWeek: 'dddd, LT',\n lastDay: '[कल] LT',\n lastWeek: '[पिछले] dddd, LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%s में',\n past: '%s पहले',\n s: 'कुछ ही क्षण',\n ss: '%d सेकंड',\n m: 'एक मिनट',\n mm: '%d मिनट',\n h: 'एक घंटा',\n hh: '%d घंटे',\n d: 'एक दिन',\n dd: '%d दिन',\n M: 'एक महीने',\n MM: '%d महीने',\n y: 'एक वर्ष',\n yy: '%d वर्ष',\n },\n preparse: function (string) {\n return string.replace(/[१२३४५६७८९०]/g, function (match) {\n return numberMap[match];\n });\n },\n postformat: function (string) {\n return string.replace(/\\d/g, function (match) {\n return symbolMap[match];\n });\n },\n // Hindi notation for meridiems are quite fuzzy in practice. While there exists\n // a rigid notion of a 'Pahar' it is not used as rigidly in modern Hindi.\n meridiemParse: /रात|सुबह|दोपहर|शाम/,\n meridiemHour: function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === 'रात') {\n return hour < 4 ? hour : hour + 12;\n } else if (meridiem === 'सुबह') {\n return hour;\n } else if (meridiem === 'दोपहर') {\n return hour >= 10 ? hour : hour + 12;\n } else if (meridiem === 'शाम') {\n return hour + 12;\n }\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 4) {\n return 'रात';\n } else if (hour < 10) {\n return 'सुबह';\n } else if (hour < 17) {\n return 'दोपहर';\n } else if (hour < 20) {\n return 'शाम';\n } else {\n return 'रात';\n }\n },\n week: {\n dow: 0, // Sunday is the first day of the week.\n doy: 6, // The week that contains Jan 6th is the first week of the year.\n },\n });\n\n return hi;\n\n})));\n","// Exports the \"directionality\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/directionality')\n// ES2015:\n// import 'tinymce/plugins/directionality'\nrequire('./plugin.js');","// Exports the \"textpattern\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/textpattern')\n// ES2015:\n// import 'tinymce/plugins/textpattern'\nrequire('./plugin.js');","(function () {\nvar print = (function () {\n 'use strict';\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.Env');\n\n var register = function (editor) {\n editor.addCommand('mcePrint', function () {\n if (global$1.ie && global$1.ie <= 11) {\n editor.getDoc().execCommand('print', false, null);\n } else {\n editor.getWin().print();\n }\n });\n };\n var Commands = { register: register };\n\n var register$1 = function (editor) {\n editor.addButton('print', {\n title: 'Print',\n cmd: 'mcePrint'\n });\n editor.addMenuItem('print', {\n text: 'Print',\n cmd: 'mcePrint',\n icon: 'print'\n });\n };\n var Buttons = { register: register$1 };\n\n global.add('print', function (editor) {\n Commands.register(editor);\n Buttons.register(editor);\n editor.addShortcut('Meta+P', '', 'mcePrint');\n });\n function Plugin () {\n }\n\n return Plugin;\n\n}());\n})();\n","//! moment.js locale configuration\n//! locale : Gujarati [gu]\n//! author : Kaushik Thanki : https://github.com/Kaushik1987\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var symbolMap = {\n 1: '૧',\n 2: '૨',\n 3: '૩',\n 4: '૪',\n 5: '૫',\n 6: '૬',\n 7: '૭',\n 8: '૮',\n 9: '૯',\n 0: '૦',\n },\n numberMap = {\n '૧': '1',\n '૨': '2',\n '૩': '3',\n '૪': '4',\n '૫': '5',\n '૬': '6',\n '૭': '7',\n '૮': '8',\n '૯': '9',\n '૦': '0',\n };\n\n var gu = moment.defineLocale('gu', {\n months: 'જાન્યુઆરી_ફેબ્રુઆરી_માર્ચ_એપ્રિલ_મે_જૂન_જુલાઈ_ઑગસ્ટ_સપ્ટેમ્બર_ઑક્ટ્બર_નવેમ્બર_ડિસેમ્બર'.split(\n '_'\n ),\n monthsShort:\n 'જાન્યુ._ફેબ્રુ._માર્ચ_એપ્રિ._મે_જૂન_જુલા._ઑગ._સપ્ટે._ઑક્ટ્._નવે._ડિસે.'.split(\n '_'\n ),\n monthsParseExact: true,\n weekdays: 'રવિવાર_સોમવાર_મંગળવાર_બુધ્વાર_ગુરુવાર_શુક્રવાર_શનિવાર'.split(\n '_'\n ),\n weekdaysShort: 'રવિ_સોમ_મંગળ_બુધ્_ગુરુ_શુક્ર_શનિ'.split('_'),\n weekdaysMin: 'ર_સો_મં_બુ_ગુ_શુ_શ'.split('_'),\n longDateFormat: {\n LT: 'A h:mm વાગ્યે',\n LTS: 'A h:mm:ss વાગ્યે',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY, A h:mm વાગ્યે',\n LLLL: 'dddd, D MMMM YYYY, A h:mm વાગ્યે',\n },\n calendar: {\n sameDay: '[આજ] LT',\n nextDay: '[કાલે] LT',\n nextWeek: 'dddd, LT',\n lastDay: '[ગઇકાલે] LT',\n lastWeek: '[પાછલા] dddd, LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%s મા',\n past: '%s પહેલા',\n s: 'અમુક પળો',\n ss: '%d સેકંડ',\n m: 'એક મિનિટ',\n mm: '%d મિનિટ',\n h: 'એક કલાક',\n hh: '%d કલાક',\n d: 'એક દિવસ',\n dd: '%d દિવસ',\n M: 'એક મહિનો',\n MM: '%d મહિનો',\n y: 'એક વર્ષ',\n yy: '%d વર્ષ',\n },\n preparse: function (string) {\n return string.replace(/[૧૨૩૪૫૬૭૮૯૦]/g, function (match) {\n return numberMap[match];\n });\n },\n postformat: function (string) {\n return string.replace(/\\d/g, function (match) {\n return symbolMap[match];\n });\n },\n // Gujarati notation for meridiems are quite fuzzy in practice. While there exists\n // a rigid notion of a 'Pahar' it is not used as rigidly in modern Gujarati.\n meridiemParse: /રાત|બપોર|સવાર|સાંજ/,\n meridiemHour: function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === 'રાત') {\n return hour < 4 ? hour : hour + 12;\n } else if (meridiem === 'સવાર') {\n return hour;\n } else if (meridiem === 'બપોર') {\n return hour >= 10 ? hour : hour + 12;\n } else if (meridiem === 'સાંજ') {\n return hour + 12;\n }\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 4) {\n return 'રાત';\n } else if (hour < 10) {\n return 'સવાર';\n } else if (hour < 17) {\n return 'બપોર';\n } else if (hour < 20) {\n return 'સાંજ';\n } else {\n return 'રાત';\n }\n },\n week: {\n dow: 0, // Sunday is the first day of the week.\n doy: 6, // The week that contains Jan 6th is the first week of the year.\n },\n });\n\n return gu;\n\n})));\n","//! moment.js locale configuration\n//! locale : English (Ireland) [en-ie]\n//! author : Chris Cartlidge : https://github.com/chriscartlidge\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var enIe = moment.defineLocale('en-ie', {\n months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n '_'\n ),\n monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(\n '_'\n ),\n weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[Today at] LT',\n nextDay: '[Tomorrow at] LT',\n nextWeek: 'dddd [at] LT',\n lastDay: '[Yesterday at] LT',\n lastWeek: '[Last] dddd [at] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'in %s',\n past: '%s ago',\n s: 'a few seconds',\n ss: '%d seconds',\n m: 'a minute',\n mm: '%d minutes',\n h: 'an hour',\n hh: '%d hours',\n d: 'a day',\n dd: '%d days',\n M: 'a month',\n MM: '%d months',\n y: 'a year',\n yy: '%d years',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n ordinal: function (number) {\n var b = number % 10,\n output =\n ~~((number % 100) / 10) === 1\n ? 'th'\n : b === 1\n ? 'st'\n : b === 2\n ? 'nd'\n : b === 3\n ? 'rd'\n : 'th';\n return number + output;\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return enIe;\n\n})));\n","(function () {\nvar autoresize = (function () {\n 'use strict';\n\n var Cell = function (initial) {\n var value = initial;\n var get = function () {\n return value;\n };\n var set = function (v) {\n value = v;\n };\n var clone = function () {\n return Cell(get());\n };\n return {\n get: get,\n set: set,\n clone: clone\n };\n };\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.Env');\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.util.Delay');\n\n var getAutoResizeMinHeight = function (editor) {\n return parseInt(editor.getParam('autoresize_min_height', editor.getElement().offsetHeight), 10);\n };\n var getAutoResizeMaxHeight = function (editor) {\n return parseInt(editor.getParam('autoresize_max_height', 0), 10);\n };\n var getAutoResizeOverflowPadding = function (editor) {\n return editor.getParam('autoresize_overflow_padding', 1);\n };\n var getAutoResizeBottomMargin = function (editor) {\n return editor.getParam('autoresize_bottom_margin', 50);\n };\n var shouldAutoResizeOnInit = function (editor) {\n return editor.getParam('autoresize_on_init', true);\n };\n var Settings = {\n getAutoResizeMinHeight: getAutoResizeMinHeight,\n getAutoResizeMaxHeight: getAutoResizeMaxHeight,\n getAutoResizeOverflowPadding: getAutoResizeOverflowPadding,\n getAutoResizeBottomMargin: getAutoResizeBottomMargin,\n shouldAutoResizeOnInit: shouldAutoResizeOnInit\n };\n\n var isFullscreen = function (editor) {\n return editor.plugins.fullscreen && editor.plugins.fullscreen.isFullscreen();\n };\n var wait = function (editor, oldSize, times, interval, callback) {\n global$2.setEditorTimeout(editor, function () {\n resize(editor, oldSize);\n if (times--) {\n wait(editor, oldSize, times, interval, callback);\n } else if (callback) {\n callback();\n }\n }, interval);\n };\n var toggleScrolling = function (editor, state) {\n var body = editor.getBody();\n if (body) {\n body.style.overflowY = state ? '' : 'hidden';\n if (!state) {\n body.scrollTop = 0;\n }\n }\n };\n var resize = function (editor, oldSize) {\n var deltaSize, doc, body, resizeHeight, myHeight;\n var marginTop, marginBottom, paddingTop, paddingBottom, borderTop, borderBottom;\n var dom = editor.dom;\n doc = editor.getDoc();\n if (!doc) {\n return;\n }\n if (isFullscreen(editor)) {\n toggleScrolling(editor, true);\n return;\n }\n body = doc.body;\n resizeHeight = Settings.getAutoResizeMinHeight(editor);\n marginTop = dom.getStyle(body, 'margin-top', true);\n marginBottom = dom.getStyle(body, 'margin-bottom', true);\n paddingTop = dom.getStyle(body, 'padding-top', true);\n paddingBottom = dom.getStyle(body, 'padding-bottom', true);\n borderTop = dom.getStyle(body, 'border-top-width', true);\n borderBottom = dom.getStyle(body, 'border-bottom-width', true);\n myHeight = body.offsetHeight + parseInt(marginTop, 10) + parseInt(marginBottom, 10) + parseInt(paddingTop, 10) + parseInt(paddingBottom, 10) + parseInt(borderTop, 10) + parseInt(borderBottom, 10);\n if (isNaN(myHeight) || myHeight <= 0) {\n myHeight = global$1.ie ? body.scrollHeight : global$1.webkit && body.clientHeight === 0 ? 0 : body.offsetHeight;\n }\n if (myHeight > Settings.getAutoResizeMinHeight(editor)) {\n resizeHeight = myHeight;\n }\n var maxHeight = Settings.getAutoResizeMaxHeight(editor);\n if (maxHeight && myHeight > maxHeight) {\n resizeHeight = maxHeight;\n toggleScrolling(editor, true);\n } else {\n toggleScrolling(editor, false);\n }\n if (resizeHeight !== oldSize.get()) {\n deltaSize = resizeHeight - oldSize.get();\n dom.setStyle(editor.iframeElement, 'height', resizeHeight + 'px');\n oldSize.set(resizeHeight);\n if (global$1.webkit && deltaSize < 0) {\n resize(editor, oldSize);\n }\n }\n };\n var setup = function (editor, oldSize) {\n editor.on('init', function () {\n var overflowPadding, bottomMargin;\n var dom = editor.dom;\n overflowPadding = Settings.getAutoResizeOverflowPadding(editor);\n bottomMargin = Settings.getAutoResizeBottomMargin(editor);\n if (overflowPadding !== false) {\n dom.setStyles(editor.getBody(), {\n paddingLeft: overflowPadding,\n paddingRight: overflowPadding\n });\n }\n if (bottomMargin !== false) {\n dom.setStyles(editor.getBody(), { paddingBottom: bottomMargin });\n }\n });\n editor.on('nodechange setcontent keyup FullscreenStateChanged', function (e) {\n resize(editor, oldSize);\n });\n if (Settings.shouldAutoResizeOnInit(editor)) {\n editor.on('init', function () {\n wait(editor, oldSize, 20, 100, function () {\n wait(editor, oldSize, 5, 1000);\n });\n });\n }\n };\n var Resize = {\n setup: setup,\n resize: resize\n };\n\n var register = function (editor, oldSize) {\n editor.addCommand('mceAutoResize', function () {\n Resize.resize(editor, oldSize);\n });\n };\n var Commands = { register: register };\n\n global.add('autoresize', function (editor) {\n if (!editor.inline) {\n var oldSize = Cell(0);\n Commands.register(editor, oldSize);\n Resize.setup(editor, oldSize);\n }\n });\n function Plugin () {\n }\n\n return Plugin;\n\n}());\n})();\n","(function () {\nvar searchreplace = (function () {\n 'use strict';\n\n var Cell = function (initial) {\n var value = initial;\n var get = function () {\n return value;\n };\n var set = function (v) {\n value = v;\n };\n var clone = function () {\n return Cell(get());\n };\n return {\n get: get,\n set: set,\n clone: clone\n };\n };\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n function isContentEditableFalse(node) {\n return node && node.nodeType === 1 && node.contentEditable === 'false';\n }\n function findAndReplaceDOMText(regex, node, replacementNode, captureGroup, schema) {\n var m;\n var matches = [];\n var text, count = 0, doc;\n var blockElementsMap, hiddenTextElementsMap, shortEndedElementsMap;\n doc = node.ownerDocument;\n blockElementsMap = schema.getBlockElements();\n hiddenTextElementsMap = schema.getWhiteSpaceElements();\n shortEndedElementsMap = schema.getShortEndedElements();\n function getMatchIndexes(m, captureGroup) {\n captureGroup = captureGroup || 0;\n if (!m[0]) {\n throw new Error('findAndReplaceDOMText cannot handle zero-length matches');\n }\n var index = m.index;\n if (captureGroup > 0) {\n var cg = m[captureGroup];\n if (!cg) {\n throw new Error('Invalid capture group');\n }\n index += m[0].indexOf(cg);\n m[0] = cg;\n }\n return [\n index,\n index + m[0].length,\n [m[0]]\n ];\n }\n function getText(node) {\n var txt;\n if (node.nodeType === 3) {\n return node.data;\n }\n if (hiddenTextElementsMap[node.nodeName] && !blockElementsMap[node.nodeName]) {\n return '';\n }\n txt = '';\n if (isContentEditableFalse(node)) {\n return '\\n';\n }\n if (blockElementsMap[node.nodeName] || shortEndedElementsMap[node.nodeName]) {\n txt += '\\n';\n }\n if (node = node.firstChild) {\n do {\n txt += getText(node);\n } while (node = node.nextSibling);\n }\n return txt;\n }\n function stepThroughMatches(node, matches, replaceFn) {\n var startNode, endNode, startNodeIndex, endNodeIndex, innerNodes = [], atIndex = 0, curNode = node, matchLocation = matches.shift(), matchIndex = 0;\n out:\n while (true) {\n if (blockElementsMap[curNode.nodeName] || shortEndedElementsMap[curNode.nodeName] || isContentEditableFalse(curNode)) {\n atIndex++;\n }\n if (curNode.nodeType === 3) {\n if (!endNode && curNode.length + atIndex >= matchLocation[1]) {\n endNode = curNode;\n endNodeIndex = matchLocation[1] - atIndex;\n } else if (startNode) {\n innerNodes.push(curNode);\n }\n if (!startNode && curNode.length + atIndex > matchLocation[0]) {\n startNode = curNode;\n startNodeIndex = matchLocation[0] - atIndex;\n }\n atIndex += curNode.length;\n }\n if (startNode && endNode) {\n curNode = replaceFn({\n startNode: startNode,\n startNodeIndex: startNodeIndex,\n endNode: endNode,\n endNodeIndex: endNodeIndex,\n innerNodes: innerNodes,\n match: matchLocation[2],\n matchIndex: matchIndex\n });\n atIndex -= endNode.length - endNodeIndex;\n startNode = null;\n endNode = null;\n innerNodes = [];\n matchLocation = matches.shift();\n matchIndex++;\n if (!matchLocation) {\n break;\n }\n } else if ((!hiddenTextElementsMap[curNode.nodeName] || blockElementsMap[curNode.nodeName]) && curNode.firstChild) {\n if (!isContentEditableFalse(curNode)) {\n curNode = curNode.firstChild;\n continue;\n }\n } else if (curNode.nextSibling) {\n curNode = curNode.nextSibling;\n continue;\n }\n while (true) {\n if (curNode.nextSibling) {\n curNode = curNode.nextSibling;\n break;\n } else if (curNode.parentNode !== node) {\n curNode = curNode.parentNode;\n } else {\n break out;\n }\n }\n }\n }\n function genReplacer(nodeName) {\n var makeReplacementNode;\n if (typeof nodeName !== 'function') {\n var stencilNode_1 = nodeName.nodeType ? nodeName : doc.createElement(nodeName);\n makeReplacementNode = function (fill, matchIndex) {\n var clone = stencilNode_1.cloneNode(false);\n clone.setAttribute('data-mce-index', matchIndex);\n if (fill) {\n clone.appendChild(doc.createTextNode(fill));\n }\n return clone;\n };\n } else {\n makeReplacementNode = nodeName;\n }\n return function (range) {\n var before;\n var after;\n var parentNode;\n var startNode = range.startNode;\n var endNode = range.endNode;\n var matchIndex = range.matchIndex;\n if (startNode === endNode) {\n var node_1 = startNode;\n parentNode = node_1.parentNode;\n if (range.startNodeIndex > 0) {\n before = doc.createTextNode(node_1.data.substring(0, range.startNodeIndex));\n parentNode.insertBefore(before, node_1);\n }\n var el = makeReplacementNode(range.match[0], matchIndex);\n parentNode.insertBefore(el, node_1);\n if (range.endNodeIndex < node_1.length) {\n after = doc.createTextNode(node_1.data.substring(range.endNodeIndex));\n parentNode.insertBefore(after, node_1);\n }\n node_1.parentNode.removeChild(node_1);\n return el;\n }\n before = doc.createTextNode(startNode.data.substring(0, range.startNodeIndex));\n after = doc.createTextNode(endNode.data.substring(range.endNodeIndex));\n var elA = makeReplacementNode(startNode.data.substring(range.startNodeIndex), matchIndex);\n for (var i = 0, l = range.innerNodes.length; i < l; ++i) {\n var innerNode = range.innerNodes[i];\n var innerEl = makeReplacementNode(innerNode.data, matchIndex);\n innerNode.parentNode.replaceChild(innerEl, innerNode);\n }\n var elB = makeReplacementNode(endNode.data.substring(0, range.endNodeIndex), matchIndex);\n parentNode = startNode.parentNode;\n parentNode.insertBefore(before, startNode);\n parentNode.insertBefore(elA, startNode);\n parentNode.removeChild(startNode);\n parentNode = endNode.parentNode;\n parentNode.insertBefore(elB, endNode);\n parentNode.insertBefore(after, endNode);\n parentNode.removeChild(endNode);\n return elB;\n };\n }\n text = getText(node);\n if (!text) {\n return;\n }\n if (regex.global) {\n while (m = regex.exec(text)) {\n matches.push(getMatchIndexes(m, captureGroup));\n }\n } else {\n m = text.match(regex);\n matches.push(getMatchIndexes(m, captureGroup));\n }\n if (matches.length) {\n count = matches.length;\n stepThroughMatches(node, matches, genReplacer(replacementNode));\n }\n return count;\n }\n var FindReplaceText = { findAndReplaceDOMText: findAndReplaceDOMText };\n\n var getElmIndex = function (elm) {\n var value = elm.getAttribute('data-mce-index');\n if (typeof value === 'number') {\n return '' + value;\n }\n return value;\n };\n var markAllMatches = function (editor, currentIndexState, regex) {\n var node, marker;\n marker = editor.dom.create('span', { 'data-mce-bogus': 1 });\n marker.className = 'mce-match-marker';\n node = editor.getBody();\n done(editor, currentIndexState, false);\n return FindReplaceText.findAndReplaceDOMText(regex, node, marker, false, editor.schema);\n };\n var unwrap = function (node) {\n var parentNode = node.parentNode;\n if (node.firstChild) {\n parentNode.insertBefore(node.firstChild, node);\n }\n node.parentNode.removeChild(node);\n };\n var findSpansByIndex = function (editor, index) {\n var nodes;\n var spans = [];\n nodes = global$1.toArray(editor.getBody().getElementsByTagName('span'));\n if (nodes.length) {\n for (var i = 0; i < nodes.length; i++) {\n var nodeIndex = getElmIndex(nodes[i]);\n if (nodeIndex === null || !nodeIndex.length) {\n continue;\n }\n if (nodeIndex === index.toString()) {\n spans.push(nodes[i]);\n }\n }\n }\n return spans;\n };\n var moveSelection = function (editor, currentIndexState, forward) {\n var testIndex = currentIndexState.get();\n var dom = editor.dom;\n forward = forward !== false;\n if (forward) {\n testIndex++;\n } else {\n testIndex--;\n }\n dom.removeClass(findSpansByIndex(editor, currentIndexState.get()), 'mce-match-marker-selected');\n var spans = findSpansByIndex(editor, testIndex);\n if (spans.length) {\n dom.addClass(findSpansByIndex(editor, testIndex), 'mce-match-marker-selected');\n editor.selection.scrollIntoView(spans[0]);\n return testIndex;\n }\n return -1;\n };\n var removeNode = function (dom, node) {\n var parent = node.parentNode;\n dom.remove(node);\n if (dom.isEmpty(parent)) {\n dom.remove(parent);\n }\n };\n var find = function (editor, currentIndexState, text, matchCase, wholeWord) {\n text = text.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, '\\\\$&');\n text = text.replace(/\\s/g, '[^\\\\S\\\\r\\\\n]');\n text = wholeWord ? '\\\\b' + text + '\\\\b' : text;\n var count = markAllMatches(editor, currentIndexState, new RegExp(text, matchCase ? 'g' : 'gi'));\n if (count) {\n currentIndexState.set(-1);\n currentIndexState.set(moveSelection(editor, currentIndexState, true));\n }\n return count;\n };\n var next = function (editor, currentIndexState) {\n var index = moveSelection(editor, currentIndexState, true);\n if (index !== -1) {\n currentIndexState.set(index);\n }\n };\n var prev = function (editor, currentIndexState) {\n var index = moveSelection(editor, currentIndexState, false);\n if (index !== -1) {\n currentIndexState.set(index);\n }\n };\n var isMatchSpan = function (node) {\n var matchIndex = getElmIndex(node);\n return matchIndex !== null && matchIndex.length > 0;\n };\n var replace = function (editor, currentIndexState, text, forward, all) {\n var i, nodes, node, matchIndex, currentMatchIndex, nextIndex = currentIndexState.get(), hasMore;\n forward = forward !== false;\n node = editor.getBody();\n nodes = global$1.grep(global$1.toArray(node.getElementsByTagName('span')), isMatchSpan);\n for (i = 0; i < nodes.length; i++) {\n var nodeIndex = getElmIndex(nodes[i]);\n matchIndex = currentMatchIndex = parseInt(nodeIndex, 10);\n if (all || matchIndex === currentIndexState.get()) {\n if (text.length) {\n nodes[i].firstChild.nodeValue = text;\n unwrap(nodes[i]);\n } else {\n removeNode(editor.dom, nodes[i]);\n }\n while (nodes[++i]) {\n matchIndex = parseInt(getElmIndex(nodes[i]), 10);\n if (matchIndex === currentMatchIndex) {\n removeNode(editor.dom, nodes[i]);\n } else {\n i--;\n break;\n }\n }\n if (forward) {\n nextIndex--;\n }\n } else if (currentMatchIndex > currentIndexState.get()) {\n nodes[i].setAttribute('data-mce-index', currentMatchIndex - 1);\n }\n }\n currentIndexState.set(nextIndex);\n if (forward) {\n hasMore = hasNext(editor, currentIndexState);\n next(editor, currentIndexState);\n } else {\n hasMore = hasPrev(editor, currentIndexState);\n prev(editor, currentIndexState);\n }\n return !all && hasMore;\n };\n var done = function (editor, currentIndexState, keepEditorSelection) {\n var i, nodes, startContainer, endContainer;\n nodes = global$1.toArray(editor.getBody().getElementsByTagName('span'));\n for (i = 0; i < nodes.length; i++) {\n var nodeIndex = getElmIndex(nodes[i]);\n if (nodeIndex !== null && nodeIndex.length) {\n if (nodeIndex === currentIndexState.get().toString()) {\n if (!startContainer) {\n startContainer = nodes[i].firstChild;\n }\n endContainer = nodes[i].firstChild;\n }\n unwrap(nodes[i]);\n }\n }\n if (startContainer && endContainer) {\n var rng = editor.dom.createRng();\n rng.setStart(startContainer, 0);\n rng.setEnd(endContainer, endContainer.data.length);\n if (keepEditorSelection !== false) {\n editor.selection.setRng(rng);\n }\n return rng;\n }\n };\n var hasNext = function (editor, currentIndexState) {\n return findSpansByIndex(editor, currentIndexState.get() + 1).length > 0;\n };\n var hasPrev = function (editor, currentIndexState) {\n return findSpansByIndex(editor, currentIndexState.get() - 1).length > 0;\n };\n var Actions = {\n done: done,\n find: find,\n next: next,\n prev: prev,\n replace: replace,\n hasNext: hasNext,\n hasPrev: hasPrev\n };\n\n var get = function (editor, currentIndexState) {\n var done = function (keepEditorSelection) {\n return Actions.done(editor, currentIndexState, keepEditorSelection);\n };\n var find = function (text, matchCase, wholeWord) {\n return Actions.find(editor, currentIndexState, text, matchCase, wholeWord);\n };\n var next = function () {\n return Actions.next(editor, currentIndexState);\n };\n var prev = function () {\n return Actions.prev(editor, currentIndexState);\n };\n var replace = function (text, forward, all) {\n return Actions.replace(editor, currentIndexState, text, forward, all);\n };\n return {\n done: done,\n find: find,\n next: next,\n prev: prev,\n replace: replace\n };\n };\n var Api = { get: get };\n\n var open = function (editor, currentIndexState) {\n var last = {}, selectedText;\n editor.undoManager.add();\n selectedText = global$1.trim(editor.selection.getContent({ format: 'text' }));\n function updateButtonStates() {\n win.statusbar.find('#next').disabled(Actions.hasNext(editor, currentIndexState) === false);\n win.statusbar.find('#prev').disabled(Actions.hasPrev(editor, currentIndexState) === false);\n }\n function notFoundAlert() {\n editor.windowManager.alert('Could not find the specified string.', function () {\n win.find('#find')[0].focus();\n });\n }\n var win = editor.windowManager.open({\n layout: 'flex',\n pack: 'center',\n align: 'center',\n onClose: function () {\n editor.focus();\n Actions.done(editor, currentIndexState);\n editor.undoManager.add();\n },\n onSubmit: function (e) {\n var count, caseState, text, wholeWord;\n e.preventDefault();\n caseState = win.find('#case').checked();\n wholeWord = win.find('#words').checked();\n text = win.find('#find').value();\n if (!text.length) {\n Actions.done(editor, currentIndexState, false);\n win.statusbar.items().slice(1).disabled(true);\n return;\n }\n if (last.text === text && last.caseState === caseState && last.wholeWord === wholeWord) {\n if (!Actions.hasNext(editor, currentIndexState)) {\n notFoundAlert();\n return;\n }\n Actions.next(editor, currentIndexState);\n updateButtonStates();\n return;\n }\n count = Actions.find(editor, currentIndexState, text, caseState, wholeWord);\n if (!count) {\n notFoundAlert();\n }\n win.statusbar.items().slice(1).disabled(count === 0);\n updateButtonStates();\n last = {\n text: text,\n caseState: caseState,\n wholeWord: wholeWord\n };\n },\n buttons: [\n {\n text: 'Find',\n subtype: 'primary',\n onclick: function () {\n win.submit();\n }\n },\n {\n text: 'Replace',\n disabled: true,\n onclick: function () {\n if (!Actions.replace(editor, currentIndexState, win.find('#replace').value())) {\n win.statusbar.items().slice(1).disabled(true);\n currentIndexState.set(-1);\n last = {};\n }\n }\n },\n {\n text: 'Replace all',\n disabled: true,\n onclick: function () {\n Actions.replace(editor, currentIndexState, win.find('#replace').value(), true, true);\n win.statusbar.items().slice(1).disabled(true);\n last = {};\n }\n },\n {\n type: 'spacer',\n flex: 1\n },\n {\n text: 'Prev',\n name: 'prev',\n disabled: true,\n onclick: function () {\n Actions.prev(editor, currentIndexState);\n updateButtonStates();\n }\n },\n {\n text: 'Next',\n name: 'next',\n disabled: true,\n onclick: function () {\n Actions.next(editor, currentIndexState);\n updateButtonStates();\n }\n }\n ],\n title: 'Find and replace',\n items: {\n type: 'form',\n padding: 20,\n labelGap: 30,\n spacing: 10,\n items: [\n {\n type: 'textbox',\n name: 'find',\n size: 40,\n label: 'Find',\n value: selectedText\n },\n {\n type: 'textbox',\n name: 'replace',\n size: 40,\n label: 'Replace with'\n },\n {\n type: 'checkbox',\n name: 'case',\n text: 'Match case',\n label: ' '\n },\n {\n type: 'checkbox',\n name: 'words',\n text: 'Whole words',\n label: ' '\n }\n ]\n }\n });\n };\n var Dialog = { open: open };\n\n var register = function (editor, currentIndexState) {\n editor.addCommand('SearchReplace', function () {\n Dialog.open(editor, currentIndexState);\n });\n };\n var Commands = { register: register };\n\n var showDialog = function (editor, currentIndexState) {\n return function () {\n Dialog.open(editor, currentIndexState);\n };\n };\n var register$1 = function (editor, currentIndexState) {\n editor.addMenuItem('searchreplace', {\n text: 'Find and replace',\n shortcut: 'Meta+F',\n onclick: showDialog(editor, currentIndexState),\n separator: 'before',\n context: 'edit'\n });\n editor.addButton('searchreplace', {\n tooltip: 'Find and replace',\n onclick: showDialog(editor, currentIndexState)\n });\n editor.shortcuts.add('Meta+F', '', showDialog(editor, currentIndexState));\n };\n var Buttons = { register: register$1 };\n\n global.add('searchreplace', function (editor) {\n var currentIndexState = Cell(-1);\n Commands.register(editor, currentIndexState);\n Buttons.register(editor, currentIndexState);\n return Api.get(editor, currentIndexState);\n });\n function Plugin () {\n }\n\n return Plugin;\n\n}());\n})();\n","// Exports the \"media\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/media')\n// ES2015:\n// import 'tinymce/plugins/media'\nrequire('./plugin.js');","(function () {\nvar noneditable = (function () {\n 'use strict';\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n var getNonEditableClass = function (editor) {\n return editor.getParam('noneditable_noneditable_class', 'mceNonEditable');\n };\n var getEditableClass = function (editor) {\n return editor.getParam('noneditable_editable_class', 'mceEditable');\n };\n var getNonEditableRegExps = function (editor) {\n var nonEditableRegExps = editor.getParam('noneditable_regexp', []);\n if (nonEditableRegExps && nonEditableRegExps.constructor === RegExp) {\n return [nonEditableRegExps];\n } else {\n return nonEditableRegExps;\n }\n };\n var Settings = {\n getNonEditableClass: getNonEditableClass,\n getEditableClass: getEditableClass,\n getNonEditableRegExps: getNonEditableRegExps\n };\n\n var hasClass = function (checkClassName) {\n return function (node) {\n return (' ' + node.attr('class') + ' ').indexOf(checkClassName) !== -1;\n };\n };\n var replaceMatchWithSpan = function (editor, content, cls) {\n return function (match) {\n var args = arguments, index = args[args.length - 2];\n var prevChar = index > 0 ? content.charAt(index - 1) : '';\n if (prevChar === '\"') {\n return match;\n }\n if (prevChar === '>') {\n var findStartTagIndex = content.lastIndexOf('<', index);\n if (findStartTagIndex !== -1) {\n var tagHtml = content.substring(findStartTagIndex, index);\n if (tagHtml.indexOf('contenteditable=\"false\"') !== -1) {\n return match;\n }\n }\n }\n return '' + editor.dom.encode(typeof args[1] === 'string' ? args[1] : args[0]) + '';\n };\n };\n var convertRegExpsToNonEditable = function (editor, nonEditableRegExps, e) {\n var i = nonEditableRegExps.length, content = e.content;\n if (e.format === 'raw') {\n return;\n }\n while (i--) {\n content = content.replace(nonEditableRegExps[i], replaceMatchWithSpan(editor, content, Settings.getNonEditableClass(editor)));\n }\n e.content = content;\n };\n var setup = function (editor) {\n var editClass, nonEditClass;\n var contentEditableAttrName = 'contenteditable';\n editClass = ' ' + global$1.trim(Settings.getEditableClass(editor)) + ' ';\n nonEditClass = ' ' + global$1.trim(Settings.getNonEditableClass(editor)) + ' ';\n var hasEditClass = hasClass(editClass);\n var hasNonEditClass = hasClass(nonEditClass);\n var nonEditableRegExps = Settings.getNonEditableRegExps(editor);\n editor.on('PreInit', function () {\n if (nonEditableRegExps.length > 0) {\n editor.on('BeforeSetContent', function (e) {\n convertRegExpsToNonEditable(editor, nonEditableRegExps, e);\n });\n }\n editor.parser.addAttributeFilter('class', function (nodes) {\n var i = nodes.length, node;\n while (i--) {\n node = nodes[i];\n if (hasEditClass(node)) {\n node.attr(contentEditableAttrName, 'true');\n } else if (hasNonEditClass(node)) {\n node.attr(contentEditableAttrName, 'false');\n }\n }\n });\n editor.serializer.addAttributeFilter(contentEditableAttrName, function (nodes) {\n var i = nodes.length, node;\n while (i--) {\n node = nodes[i];\n if (!hasEditClass(node) && !hasNonEditClass(node)) {\n continue;\n }\n if (nonEditableRegExps.length > 0 && node.attr('data-mce-content')) {\n node.name = '#text';\n node.type = 3;\n node.raw = true;\n node.value = node.attr('data-mce-content');\n } else {\n node.attr(contentEditableAttrName, null);\n }\n }\n });\n });\n };\n var FilterContent = { setup: setup };\n\n global.add('noneditable', function (editor) {\n FilterContent.setup(editor);\n });\n function Plugin () {\n }\n\n return Plugin;\n\n}());\n})();\n","//! moment.js locale configuration\n//! locale : Cambodian [km]\n//! author : Kruy Vanna : https://github.com/kruyvanna\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var symbolMap = {\n 1: '១',\n 2: '២',\n 3: '៣',\n 4: '៤',\n 5: '៥',\n 6: '៦',\n 7: '៧',\n 8: '៨',\n 9: '៩',\n 0: '០',\n },\n numberMap = {\n '១': '1',\n '២': '2',\n '៣': '3',\n '៤': '4',\n '៥': '5',\n '៦': '6',\n '៧': '7',\n '៨': '8',\n '៩': '9',\n '០': '0',\n };\n\n var km = moment.defineLocale('km', {\n months: 'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split(\n '_'\n ),\n monthsShort:\n 'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split(\n '_'\n ),\n weekdays: 'អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍'.split('_'),\n weekdaysShort: 'អា_ច_អ_ព_ព្រ_សុ_ស'.split('_'),\n weekdaysMin: 'អា_ច_អ_ព_ព្រ_សុ_ស'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd, D MMMM YYYY HH:mm',\n },\n meridiemParse: /ព្រឹក|ល្ងាច/,\n isPM: function (input) {\n return input === 'ល្ងាច';\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 12) {\n return 'ព្រឹក';\n } else {\n return 'ល្ងាច';\n }\n },\n calendar: {\n sameDay: '[ថ្ងៃនេះ ម៉ោង] LT',\n nextDay: '[ស្អែក ម៉ោង] LT',\n nextWeek: 'dddd [ម៉ោង] LT',\n lastDay: '[ម្សិលមិញ ម៉ោង] LT',\n lastWeek: 'dddd [សប្តាហ៍មុន] [ម៉ោង] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%sទៀត',\n past: '%sមុន',\n s: 'ប៉ុន្មានវិនាទី',\n ss: '%d វិនាទី',\n m: 'មួយនាទី',\n mm: '%d នាទី',\n h: 'មួយម៉ោង',\n hh: '%d ម៉ោង',\n d: 'មួយថ្ងៃ',\n dd: '%d ថ្ងៃ',\n M: 'មួយខែ',\n MM: '%d ខែ',\n y: 'មួយឆ្នាំ',\n yy: '%d ឆ្នាំ',\n },\n dayOfMonthOrdinalParse: /ទី\\d{1,2}/,\n ordinal: 'ទី%d',\n preparse: function (string) {\n return string.replace(/[១២៣៤៥៦៧៨៩០]/g, function (match) {\n return numberMap[match];\n });\n },\n postformat: function (string) {\n return string.replace(/\\d/g, function (match) {\n return symbolMap[match];\n });\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return km;\n\n})));\n","// Exports the \"importcss\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/importcss')\n// ES2015:\n// import 'tinymce/plugins/importcss'\nrequire('./plugin.js');","(function () {\nvar modern = (function (domGlobals) {\n 'use strict';\n\n var global = tinymce.util.Tools.resolve('tinymce.ThemeManager');\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.EditorManager');\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n var isBrandingEnabled = function (editor) {\n return editor.getParam('branding', true, 'boolean');\n };\n var hasMenubar = function (editor) {\n return getMenubar(editor) !== false;\n };\n var getMenubar = function (editor) {\n return editor.getParam('menubar');\n };\n var hasStatusbar = function (editor) {\n return editor.getParam('statusbar', true, 'boolean');\n };\n var getToolbarSize = function (editor) {\n return editor.getParam('toolbar_items_size');\n };\n var isReadOnly = function (editor) {\n return editor.getParam('readonly', false, 'boolean');\n };\n var getFixedToolbarContainer = function (editor) {\n return editor.getParam('fixed_toolbar_container');\n };\n var getInlineToolbarPositionHandler = function (editor) {\n return editor.getParam('inline_toolbar_position_handler');\n };\n var getMenu = function (editor) {\n return editor.getParam('menu');\n };\n var getRemovedMenuItems = function (editor) {\n return editor.getParam('removed_menuitems', '');\n };\n var getMinWidth = function (editor) {\n return editor.getParam('min_width', 100, 'number');\n };\n var getMinHeight = function (editor) {\n return editor.getParam('min_height', 100, 'number');\n };\n var getMaxWidth = function (editor) {\n return editor.getParam('max_width', 65535, 'number');\n };\n var getMaxHeight = function (editor) {\n return editor.getParam('max_height', 65535, 'number');\n };\n var isSkinDisabled = function (editor) {\n return editor.settings.skin === false;\n };\n var isInline = function (editor) {\n return editor.getParam('inline', false, 'boolean');\n };\n var getResize = function (editor) {\n var resize = editor.getParam('resize', 'vertical');\n if (resize === false) {\n return 'none';\n } else if (resize === 'both') {\n return 'both';\n } else {\n return 'vertical';\n }\n };\n var getSkinUrl = function (editor) {\n var settings = editor.settings;\n var skin = settings.skin;\n var skinUrl = settings.skin_url;\n if (skin !== false) {\n var skinName = skin ? skin : 'lightgray';\n if (skinUrl) {\n skinUrl = editor.documentBaseURI.toAbsolute(skinUrl);\n } else {\n skinUrl = global$1.baseURL + '/skins/' + skinName;\n }\n }\n return skinUrl;\n };\n var getIndexedToolbars = function (settings, defaultToolbar) {\n var toolbars = [];\n for (var i = 1; i < 10; i++) {\n var toolbar = settings['toolbar' + i];\n if (!toolbar) {\n break;\n }\n toolbars.push(toolbar);\n }\n var mainToolbar = settings.toolbar ? [settings.toolbar] : [defaultToolbar];\n return toolbars.length > 0 ? toolbars : mainToolbar;\n };\n var getToolbars = function (editor) {\n var toolbar = editor.getParam('toolbar');\n var defaultToolbar = 'undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image';\n if (toolbar === false) {\n return [];\n } else if (global$2.isArray(toolbar)) {\n return global$2.grep(toolbar, function (toolbar) {\n return toolbar.length > 0;\n });\n } else {\n return getIndexedToolbars(editor.settings, defaultToolbar);\n }\n };\n\n var global$3 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');\n\n var global$4 = tinymce.util.Tools.resolve('tinymce.ui.Factory');\n\n var global$5 = tinymce.util.Tools.resolve('tinymce.util.I18n');\n\n var fireSkinLoaded = function (editor) {\n return editor.fire('SkinLoaded');\n };\n var fireResizeEditor = function (editor) {\n return editor.fire('ResizeEditor');\n };\n var fireBeforeRenderUI = function (editor) {\n return editor.fire('BeforeRenderUI');\n };\n var Events = {\n fireSkinLoaded: fireSkinLoaded,\n fireResizeEditor: fireResizeEditor,\n fireBeforeRenderUI: fireBeforeRenderUI\n };\n\n var focus = function (panel, type) {\n return function () {\n var item = panel.find(type)[0];\n if (item) {\n item.focus(true);\n }\n };\n };\n var addKeys = function (editor, panel) {\n editor.shortcuts.add('Alt+F9', '', focus(panel, 'menubar'));\n editor.shortcuts.add('Alt+F10,F10', '', focus(panel, 'toolbar'));\n editor.shortcuts.add('Alt+F11', '', focus(panel, 'elementpath'));\n panel.on('cancel', function () {\n editor.focus();\n });\n };\n var A11y = { addKeys: addKeys };\n\n var global$6 = tinymce.util.Tools.resolve('tinymce.geom.Rect');\n\n var global$7 = tinymce.util.Tools.resolve('tinymce.util.Delay');\n\n var noop = function () {\n };\n var constant = function (value) {\n return function () {\n return value;\n };\n };\n var never = constant(false);\n var always = constant(true);\n\n var none = function () {\n return NONE;\n };\n var NONE = function () {\n var eq = function (o) {\n return o.isNone();\n };\n var call = function (thunk) {\n return thunk();\n };\n var id = function (n) {\n return n;\n };\n var me = {\n fold: function (n, s) {\n return n();\n },\n is: never,\n isSome: never,\n isNone: always,\n getOr: id,\n getOrThunk: call,\n getOrDie: function (msg) {\n throw new Error(msg || 'error: getOrDie called on none.');\n },\n getOrNull: constant(null),\n getOrUndefined: constant(undefined),\n or: id,\n orThunk: call,\n map: none,\n each: noop,\n bind: none,\n exists: never,\n forall: always,\n filter: none,\n equals: eq,\n equals_: eq,\n toArray: function () {\n return [];\n },\n toString: constant('none()')\n };\n if (Object.freeze) {\n Object.freeze(me);\n }\n return me;\n }();\n var some = function (a) {\n var constant_a = constant(a);\n var self = function () {\n return me;\n };\n var bind = function (f) {\n return f(a);\n };\n var me = {\n fold: function (n, s) {\n return s(a);\n },\n is: function (v) {\n return a === v;\n },\n isSome: always,\n isNone: never,\n getOr: constant_a,\n getOrThunk: constant_a,\n getOrDie: constant_a,\n getOrNull: constant_a,\n getOrUndefined: constant_a,\n or: self,\n orThunk: self,\n map: function (f) {\n return some(f(a));\n },\n each: function (f) {\n f(a);\n },\n bind: bind,\n exists: bind,\n forall: bind,\n filter: function (f) {\n return f(a) ? me : NONE;\n },\n toArray: function () {\n return [a];\n },\n toString: function () {\n return 'some(' + a + ')';\n },\n equals: function (o) {\n return o.is(a);\n },\n equals_: function (o, elementEq) {\n return o.fold(never, function (b) {\n return elementEq(a, b);\n });\n }\n };\n return me;\n };\n var from = function (value) {\n return value === null || value === undefined ? NONE : some(value);\n };\n var Option = {\n some: some,\n none: none,\n from: from\n };\n\n var getUiContainerDelta = function (ctrl) {\n var uiContainer = getUiContainer(ctrl);\n if (uiContainer && global$3.DOM.getStyle(uiContainer, 'position', true) !== 'static') {\n var containerPos = global$3.DOM.getPos(uiContainer);\n var dx = uiContainer.scrollLeft - containerPos.x;\n var dy = uiContainer.scrollTop - containerPos.y;\n return Option.some({\n x: dx,\n y: dy\n });\n } else {\n return Option.none();\n }\n };\n var setUiContainer = function (editor, ctrl) {\n var uiContainer = global$3.DOM.select(editor.settings.ui_container)[0];\n ctrl.getRoot().uiContainer = uiContainer;\n };\n var getUiContainer = function (ctrl) {\n return ctrl ? ctrl.getRoot().uiContainer : null;\n };\n var inheritUiContainer = function (fromCtrl, toCtrl) {\n return toCtrl.uiContainer = getUiContainer(fromCtrl);\n };\n var UiContainer = {\n getUiContainerDelta: getUiContainerDelta,\n setUiContainer: setUiContainer,\n getUiContainer: getUiContainer,\n inheritUiContainer: inheritUiContainer\n };\n\n var createToolbar = function (editor, items, size) {\n var toolbarItems = [];\n var buttonGroup;\n if (!items) {\n return;\n }\n global$2.each(items.split(/[ ,]/), function (item) {\n var itemName;\n var bindSelectorChanged = function () {\n var selection = editor.selection;\n if (item.settings.stateSelector) {\n selection.selectorChanged(item.settings.stateSelector, function (state) {\n item.active(state);\n }, true);\n }\n if (item.settings.disabledStateSelector) {\n selection.selectorChanged(item.settings.disabledStateSelector, function (state) {\n item.disabled(state);\n });\n }\n };\n if (item === '|') {\n buttonGroup = null;\n } else {\n if (!buttonGroup) {\n buttonGroup = {\n type: 'buttongroup',\n items: []\n };\n toolbarItems.push(buttonGroup);\n }\n if (editor.buttons[item]) {\n itemName = item;\n item = editor.buttons[itemName];\n if (typeof item === 'function') {\n item = item();\n }\n item.type = item.type || 'button';\n item.size = size;\n item = global$4.create(item);\n buttonGroup.items.push(item);\n if (editor.initialized) {\n bindSelectorChanged();\n } else {\n editor.on('init', bindSelectorChanged);\n }\n }\n }\n });\n return {\n type: 'toolbar',\n layout: 'flow',\n items: toolbarItems\n };\n };\n var createToolbars = function (editor, size) {\n var toolbars = [];\n var addToolbar = function (items) {\n if (items) {\n toolbars.push(createToolbar(editor, items, size));\n }\n };\n global$2.each(getToolbars(editor), function (toolbar) {\n addToolbar(toolbar);\n });\n if (toolbars.length) {\n return {\n type: 'panel',\n layout: 'stack',\n classes: 'toolbar-grp',\n ariaRoot: true,\n ariaRemember: true,\n items: toolbars\n };\n }\n };\n var Toolbar = {\n createToolbar: createToolbar,\n createToolbars: createToolbars\n };\n\n var DOM = global$3.DOM;\n var toClientRect = function (geomRect) {\n return {\n left: geomRect.x,\n top: geomRect.y,\n width: geomRect.w,\n height: geomRect.h,\n right: geomRect.x + geomRect.w,\n bottom: geomRect.y + geomRect.h\n };\n };\n var hideAllFloatingPanels = function (editor) {\n global$2.each(editor.contextToolbars, function (toolbar) {\n if (toolbar.panel) {\n toolbar.panel.hide();\n }\n });\n };\n var movePanelTo = function (panel, pos) {\n panel.moveTo(pos.left, pos.top);\n };\n var togglePositionClass = function (panel, relPos, predicate) {\n relPos = relPos ? relPos.substr(0, 2) : '';\n global$2.each({\n t: 'down',\n b: 'up'\n }, function (cls, pos) {\n panel.classes.toggle('arrow-' + cls, predicate(pos, relPos.substr(0, 1)));\n });\n global$2.each({\n l: 'left',\n r: 'right'\n }, function (cls, pos) {\n panel.classes.toggle('arrow-' + cls, predicate(pos, relPos.substr(1, 1)));\n });\n };\n var userConstrain = function (handler, x, y, elementRect, contentAreaRect, panelRect) {\n panelRect = toClientRect({\n x: x,\n y: y,\n w: panelRect.w,\n h: panelRect.h\n });\n if (handler) {\n panelRect = handler({\n elementRect: toClientRect(elementRect),\n contentAreaRect: toClientRect(contentAreaRect),\n panelRect: panelRect\n });\n }\n return panelRect;\n };\n var addContextualToolbars = function (editor) {\n var scrollContainer;\n var getContextToolbars = function () {\n return editor.contextToolbars || [];\n };\n var getElementRect = function (elm) {\n var pos, targetRect, root;\n pos = DOM.getPos(editor.getContentAreaContainer());\n targetRect = editor.dom.getRect(elm);\n root = editor.dom.getRoot();\n if (root.nodeName === 'BODY') {\n targetRect.x -= root.ownerDocument.documentElement.scrollLeft || root.scrollLeft;\n targetRect.y -= root.ownerDocument.documentElement.scrollTop || root.scrollTop;\n }\n targetRect.x += pos.x;\n targetRect.y += pos.y;\n return targetRect;\n };\n var reposition = function (match, shouldShow) {\n var relPos, panelRect, elementRect, contentAreaRect, panel, relRect, testPositions, smallElementWidthThreshold;\n var handler = getInlineToolbarPositionHandler(editor);\n if (editor.removed) {\n return;\n }\n if (!match || !match.toolbar.panel) {\n hideAllFloatingPanels(editor);\n return;\n }\n testPositions = [\n 'bc-tc',\n 'tc-bc',\n 'tl-bl',\n 'bl-tl',\n 'tr-br',\n 'br-tr'\n ];\n panel = match.toolbar.panel;\n if (shouldShow) {\n panel.show();\n }\n elementRect = getElementRect(match.element);\n panelRect = DOM.getRect(panel.getEl());\n contentAreaRect = DOM.getRect(editor.getContentAreaContainer() || editor.getBody());\n var delta = UiContainer.getUiContainerDelta(panel).getOr({\n x: 0,\n y: 0\n });\n elementRect.x += delta.x;\n elementRect.y += delta.y;\n panelRect.x += delta.x;\n panelRect.y += delta.y;\n contentAreaRect.x += delta.x;\n contentAreaRect.y += delta.y;\n smallElementWidthThreshold = 25;\n if (DOM.getStyle(match.element, 'display', true) !== 'inline') {\n var clientRect = match.element.getBoundingClientRect();\n elementRect.w = clientRect.width;\n elementRect.h = clientRect.height;\n }\n if (!editor.inline) {\n contentAreaRect.w = editor.getDoc().documentElement.offsetWidth;\n }\n if (editor.selection.controlSelection.isResizable(match.element) && elementRect.w < smallElementWidthThreshold) {\n elementRect = global$6.inflate(elementRect, 0, 8);\n }\n relPos = global$6.findBestRelativePosition(panelRect, elementRect, contentAreaRect, testPositions);\n elementRect = global$6.clamp(elementRect, contentAreaRect);\n if (relPos) {\n relRect = global$6.relativePosition(panelRect, elementRect, relPos);\n movePanelTo(panel, userConstrain(handler, relRect.x, relRect.y, elementRect, contentAreaRect, panelRect));\n } else {\n contentAreaRect.h += panelRect.h;\n elementRect = global$6.intersect(contentAreaRect, elementRect);\n if (elementRect) {\n relPos = global$6.findBestRelativePosition(panelRect, elementRect, contentAreaRect, [\n 'bc-tc',\n 'bl-tl',\n 'br-tr'\n ]);\n if (relPos) {\n relRect = global$6.relativePosition(panelRect, elementRect, relPos);\n movePanelTo(panel, userConstrain(handler, relRect.x, relRect.y, elementRect, contentAreaRect, panelRect));\n } else {\n movePanelTo(panel, userConstrain(handler, elementRect.x, elementRect.y, elementRect, contentAreaRect, panelRect));\n }\n } else {\n panel.hide();\n }\n }\n togglePositionClass(panel, relPos, function (pos1, pos2) {\n return pos1 === pos2;\n });\n };\n var repositionHandler = function (show) {\n return function () {\n var execute = function () {\n if (editor.selection) {\n reposition(findFrontMostMatch(editor.selection.getNode()), show);\n }\n };\n global$7.requestAnimationFrame(execute);\n };\n };\n var bindScrollEvent = function (panel) {\n if (!scrollContainer) {\n var reposition_1 = repositionHandler(true);\n var uiContainer_1 = UiContainer.getUiContainer(panel);\n scrollContainer = editor.selection.getScrollContainer() || editor.getWin();\n DOM.bind(scrollContainer, 'scroll', reposition_1);\n DOM.bind(uiContainer_1, 'scroll', reposition_1);\n editor.on('remove', function () {\n DOM.unbind(scrollContainer, 'scroll', reposition_1);\n DOM.unbind(uiContainer_1, 'scroll', reposition_1);\n });\n }\n };\n var showContextToolbar = function (match) {\n var panel;\n if (match.toolbar.panel) {\n match.toolbar.panel.show();\n reposition(match);\n return;\n }\n panel = global$4.create({\n type: 'floatpanel',\n role: 'dialog',\n classes: 'tinymce tinymce-inline arrow',\n ariaLabel: 'Inline toolbar',\n layout: 'flex',\n direction: 'column',\n align: 'stretch',\n autohide: false,\n autofix: true,\n fixed: true,\n border: 1,\n items: Toolbar.createToolbar(editor, match.toolbar.items),\n oncancel: function () {\n editor.focus();\n }\n });\n UiContainer.setUiContainer(editor, panel);\n bindScrollEvent(panel);\n match.toolbar.panel = panel;\n panel.renderTo().reflow();\n reposition(match);\n };\n var hideAllContextToolbars = function () {\n global$2.each(getContextToolbars(), function (toolbar) {\n if (toolbar.panel) {\n toolbar.panel.hide();\n }\n });\n };\n var findFrontMostMatch = function (targetElm) {\n var i, y, parentsAndSelf;\n var toolbars = getContextToolbars();\n parentsAndSelf = editor.$(targetElm).parents().add(targetElm);\n for (i = parentsAndSelf.length - 1; i >= 0; i--) {\n for (y = toolbars.length - 1; y >= 0; y--) {\n if (toolbars[y].predicate(parentsAndSelf[i])) {\n return {\n toolbar: toolbars[y],\n element: parentsAndSelf[i]\n };\n }\n }\n }\n return null;\n };\n editor.on('click keyup setContent ObjectResized', function (e) {\n if (e.type === 'setcontent' && !e.selection) {\n return;\n }\n global$7.setEditorTimeout(editor, function () {\n var match;\n match = findFrontMostMatch(editor.selection.getNode());\n if (match) {\n hideAllContextToolbars();\n showContextToolbar(match);\n } else {\n hideAllContextToolbars();\n }\n });\n });\n editor.on('blur hide contextmenu', hideAllContextToolbars);\n editor.on('ObjectResizeStart', function () {\n var match = findFrontMostMatch(editor.selection.getNode());\n if (match && match.toolbar.panel) {\n match.toolbar.panel.hide();\n }\n });\n editor.on('ResizeEditor ResizeWindow', repositionHandler(true));\n editor.on('nodeChange', repositionHandler(false));\n editor.on('remove', function () {\n global$2.each(getContextToolbars(), function (toolbar) {\n if (toolbar.panel) {\n toolbar.panel.remove();\n }\n });\n editor.contextToolbars = {};\n });\n editor.shortcuts.add('ctrl+F9', '', function () {\n var match = findFrontMostMatch(editor.selection.getNode());\n if (match && match.toolbar.panel) {\n match.toolbar.panel.items()[0].focus();\n }\n });\n };\n var ContextToolbars = { addContextualToolbars: addContextualToolbars };\n\n var typeOf = function (x) {\n if (x === null) {\n return 'null';\n }\n var t = typeof x;\n if (t === 'object' && (Array.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'Array')) {\n return 'array';\n }\n if (t === 'object' && (String.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'String')) {\n return 'string';\n }\n return t;\n };\n var isType = function (type) {\n return function (value) {\n return typeOf(value) === type;\n };\n };\n var isArray = isType('array');\n var isFunction = isType('function');\n var isNumber = isType('number');\n\n var nativeSlice = Array.prototype.slice;\n var nativeIndexOf = Array.prototype.indexOf;\n var nativePush = Array.prototype.push;\n var rawIndexOf = function (ts, t) {\n return nativeIndexOf.call(ts, t);\n };\n var indexOf = function (xs, x) {\n var r = rawIndexOf(xs, x);\n return r === -1 ? Option.none() : Option.some(r);\n };\n var exists = function (xs, pred) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n if (pred(x, i)) {\n return true;\n }\n }\n return false;\n };\n var map = function (xs, f) {\n var len = xs.length;\n var r = new Array(len);\n for (var i = 0; i < len; i++) {\n var x = xs[i];\n r[i] = f(x, i);\n }\n return r;\n };\n var each = function (xs, f) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n f(x, i);\n }\n };\n var filter = function (xs, pred) {\n var r = [];\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n if (pred(x, i)) {\n r.push(x);\n }\n }\n return r;\n };\n var foldl = function (xs, f, acc) {\n each(xs, function (x) {\n acc = f(acc, x);\n });\n return acc;\n };\n var find = function (xs, pred) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n if (pred(x, i)) {\n return Option.some(x);\n }\n }\n return Option.none();\n };\n var findIndex = function (xs, pred) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n if (pred(x, i)) {\n return Option.some(i);\n }\n }\n return Option.none();\n };\n var flatten = function (xs) {\n var r = [];\n for (var i = 0, len = xs.length; i < len; ++i) {\n if (!isArray(xs[i])) {\n throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs);\n }\n nativePush.apply(r, xs[i]);\n }\n return r;\n };\n var from$1 = isFunction(Array.from) ? Array.from : function (x) {\n return nativeSlice.call(x);\n };\n\n var defaultMenus = {\n file: {\n title: 'File',\n items: 'newdocument restoredraft | preview | print'\n },\n edit: {\n title: 'Edit',\n items: 'undo redo | cut copy paste pastetext | selectall'\n },\n view: {\n title: 'View',\n items: 'code | visualaid visualchars visualblocks | spellchecker | preview fullscreen'\n },\n insert: {\n title: 'Insert',\n items: 'image link media template codesample inserttable | charmap hr | pagebreak nonbreaking anchor toc | insertdatetime'\n },\n format: {\n title: 'Format',\n items: 'bold italic underline strikethrough superscript subscript codeformat | blockformats align | removeformat'\n },\n tools: {\n title: 'Tools',\n items: 'spellchecker spellcheckerlanguage | a11ycheck code'\n },\n table: { title: 'Table' },\n help: { title: 'Help' }\n };\n var delimiterMenuNamePair = function () {\n return {\n name: '|',\n item: { text: '|' }\n };\n };\n var createMenuNameItemPair = function (name, item) {\n var menuItem = item ? {\n name: name,\n item: item\n } : null;\n return name === '|' ? delimiterMenuNamePair() : menuItem;\n };\n var hasItemName = function (namedMenuItems, name) {\n return findIndex(namedMenuItems, function (namedMenuItem) {\n return namedMenuItem.name === name;\n }).isSome();\n };\n var isSeparator = function (namedMenuItem) {\n return namedMenuItem && namedMenuItem.item.text === '|';\n };\n var cleanupMenu = function (namedMenuItems, removedMenuItems) {\n var menuItemsPass1 = filter(namedMenuItems, function (namedMenuItem) {\n return removedMenuItems.hasOwnProperty(namedMenuItem.name) === false;\n });\n var menuItemsPass2 = filter(menuItemsPass1, function (namedMenuItem, i) {\n return !isSeparator(namedMenuItem) || !isSeparator(menuItemsPass1[i - 1]);\n });\n return filter(menuItemsPass2, function (namedMenuItem, i) {\n return !isSeparator(namedMenuItem) || i > 0 && i < menuItemsPass2.length - 1;\n });\n };\n var createMenu = function (editorMenuItems, menus, removedMenuItems, context) {\n var menuButton, menu, namedMenuItems, isUserDefined;\n if (menus) {\n menu = menus[context];\n isUserDefined = true;\n } else {\n menu = defaultMenus[context];\n }\n if (menu) {\n menuButton = { text: menu.title };\n namedMenuItems = [];\n global$2.each((menu.items || '').split(/[ ,]/), function (name) {\n var namedMenuItem = createMenuNameItemPair(name, editorMenuItems[name]);\n if (namedMenuItem) {\n namedMenuItems.push(namedMenuItem);\n }\n });\n if (!isUserDefined) {\n global$2.each(editorMenuItems, function (item, name) {\n if (item.context === context && !hasItemName(namedMenuItems, name)) {\n if (item.separator === 'before') {\n namedMenuItems.push(delimiterMenuNamePair());\n }\n if (item.prependToContext) {\n namedMenuItems.unshift(createMenuNameItemPair(name, item));\n } else {\n namedMenuItems.push(createMenuNameItemPair(name, item));\n }\n if (item.separator === 'after') {\n namedMenuItems.push(delimiterMenuNamePair());\n }\n }\n });\n }\n menuButton.menu = map(cleanupMenu(namedMenuItems, removedMenuItems), function (menuItem) {\n return menuItem.item;\n });\n if (!menuButton.menu.length) {\n return null;\n }\n }\n return menuButton;\n };\n var getDefaultMenubar = function (editor) {\n var name;\n var defaultMenuBar = [];\n var menu = getMenu(editor);\n if (menu) {\n for (name in menu) {\n defaultMenuBar.push(name);\n }\n } else {\n for (name in defaultMenus) {\n defaultMenuBar.push(name);\n }\n }\n return defaultMenuBar;\n };\n var createMenuButtons = function (editor) {\n var menuButtons = [];\n var defaultMenuBar = getDefaultMenubar(editor);\n var removedMenuItems = global$2.makeMap(getRemovedMenuItems(editor).split(/[ ,]/));\n var menubar = getMenubar(editor);\n var enabledMenuNames = typeof menubar === 'string' ? menubar.split(/[ ,]/) : defaultMenuBar;\n for (var i = 0; i < enabledMenuNames.length; i++) {\n var menuItems = enabledMenuNames[i];\n var menu = createMenu(editor.menuItems, getMenu(editor), removedMenuItems, menuItems);\n if (menu) {\n menuButtons.push(menu);\n }\n }\n return menuButtons;\n };\n var Menubar = { createMenuButtons: createMenuButtons };\n\n var DOM$1 = global$3.DOM;\n var getSize = function (elm) {\n return {\n width: elm.clientWidth,\n height: elm.clientHeight\n };\n };\n var resizeTo = function (editor, width, height) {\n var containerElm, iframeElm, containerSize, iframeSize;\n containerElm = editor.getContainer();\n iframeElm = editor.getContentAreaContainer().firstChild;\n containerSize = getSize(containerElm);\n iframeSize = getSize(iframeElm);\n if (width !== null) {\n width = Math.max(getMinWidth(editor), width);\n width = Math.min(getMaxWidth(editor), width);\n DOM$1.setStyle(containerElm, 'width', width + (containerSize.width - iframeSize.width));\n DOM$1.setStyle(iframeElm, 'width', width);\n }\n height = Math.max(getMinHeight(editor), height);\n height = Math.min(getMaxHeight(editor), height);\n DOM$1.setStyle(iframeElm, 'height', height);\n Events.fireResizeEditor(editor);\n };\n var resizeBy = function (editor, dw, dh) {\n var elm = editor.getContentAreaContainer();\n resizeTo(editor, elm.clientWidth + dw, elm.clientHeight + dh);\n };\n var Resize = {\n resizeTo: resizeTo,\n resizeBy: resizeBy\n };\n\n var global$8 = tinymce.util.Tools.resolve('tinymce.Env');\n\n var api = function (elm) {\n return {\n element: function () {\n return elm;\n }\n };\n };\n var trigger = function (sidebar, panel, callbackName) {\n var callback = sidebar.settings[callbackName];\n if (callback) {\n callback(api(panel.getEl('body')));\n }\n };\n var hidePanels = function (name, container, sidebars) {\n global$2.each(sidebars, function (sidebar) {\n var panel = container.items().filter('#' + sidebar.name)[0];\n if (panel && panel.visible() && sidebar.name !== name) {\n trigger(sidebar, panel, 'onhide');\n panel.visible(false);\n }\n });\n };\n var deactivateButtons = function (toolbar) {\n toolbar.items().each(function (ctrl) {\n ctrl.active(false);\n });\n };\n var findSidebar = function (sidebars, name) {\n return global$2.grep(sidebars, function (sidebar) {\n return sidebar.name === name;\n })[0];\n };\n var showPanel = function (editor, name, sidebars) {\n return function (e) {\n var btnCtrl = e.control;\n var container = btnCtrl.parents().filter('panel')[0];\n var panel = container.find('#' + name)[0];\n var sidebar = findSidebar(sidebars, name);\n hidePanels(name, container, sidebars);\n deactivateButtons(btnCtrl.parent());\n if (panel && panel.visible()) {\n trigger(sidebar, panel, 'onhide');\n panel.hide();\n btnCtrl.active(false);\n } else {\n if (panel) {\n panel.show();\n trigger(sidebar, panel, 'onshow');\n } else {\n panel = global$4.create({\n type: 'container',\n name: name,\n layout: 'stack',\n classes: 'sidebar-panel',\n html: ''\n });\n container.prepend(panel);\n trigger(sidebar, panel, 'onrender');\n trigger(sidebar, panel, 'onshow');\n }\n btnCtrl.active(true);\n }\n Events.fireResizeEditor(editor);\n };\n };\n var isModernBrowser = function () {\n return !global$8.ie || global$8.ie >= 11;\n };\n var hasSidebar = function (editor) {\n return isModernBrowser() && editor.sidebars ? editor.sidebars.length > 0 : false;\n };\n var createSidebar = function (editor) {\n var buttons = global$2.map(editor.sidebars, function (sidebar) {\n var settings = sidebar.settings;\n return {\n type: 'button',\n icon: settings.icon,\n image: settings.image,\n tooltip: settings.tooltip,\n onclick: showPanel(editor, sidebar.name, editor.sidebars)\n };\n });\n return {\n type: 'panel',\n name: 'sidebar',\n layout: 'stack',\n classes: 'sidebar',\n items: [{\n type: 'toolbar',\n layout: 'stack',\n classes: 'sidebar-toolbar',\n items: buttons\n }]\n };\n };\n var Sidebar = {\n hasSidebar: hasSidebar,\n createSidebar: createSidebar\n };\n\n var fireSkinLoaded$1 = function (editor) {\n var done = function () {\n editor._skinLoaded = true;\n Events.fireSkinLoaded(editor);\n };\n return function () {\n if (editor.initialized) {\n done();\n } else {\n editor.on('init', done);\n }\n };\n };\n var SkinLoaded = { fireSkinLoaded: fireSkinLoaded$1 };\n\n var DOM$2 = global$3.DOM;\n var switchMode = function (panel) {\n return function (e) {\n panel.find('*').disabled(e.mode === 'readonly');\n };\n };\n var editArea = function (border) {\n return {\n type: 'panel',\n name: 'iframe',\n layout: 'stack',\n classes: 'edit-area',\n border: border,\n html: ''\n };\n };\n var editAreaContainer = function (editor) {\n return {\n type: 'panel',\n layout: 'stack',\n classes: 'edit-aria-container',\n border: '1 0 0 0',\n items: [\n editArea('0'),\n Sidebar.createSidebar(editor)\n ]\n };\n };\n var render = function (editor, theme, args) {\n var panel, resizeHandleCtrl, startSize;\n if (isSkinDisabled(editor) === false && args.skinUiCss) {\n DOM$2.styleSheetLoader.load(args.skinUiCss, SkinLoaded.fireSkinLoaded(editor));\n } else {\n SkinLoaded.fireSkinLoaded(editor)();\n }\n panel = theme.panel = global$4.create({\n type: 'panel',\n role: 'application',\n classes: 'tinymce',\n style: 'visibility: hidden',\n layout: 'stack',\n border: 1,\n items: [\n {\n type: 'container',\n classes: 'top-part',\n items: [\n hasMenubar(editor) === false ? null : {\n type: 'menubar',\n border: '0 0 1 0',\n items: Menubar.createMenuButtons(editor)\n },\n Toolbar.createToolbars(editor, getToolbarSize(editor))\n ]\n },\n Sidebar.hasSidebar(editor) ? editAreaContainer(editor) : editArea('1 0 0 0')\n ]\n });\n UiContainer.setUiContainer(editor, panel);\n if (getResize(editor) !== 'none') {\n resizeHandleCtrl = {\n type: 'resizehandle',\n direction: getResize(editor),\n onResizeStart: function () {\n var elm = editor.getContentAreaContainer().firstChild;\n startSize = {\n width: elm.clientWidth,\n height: elm.clientHeight\n };\n },\n onResize: function (e) {\n if (getResize(editor) === 'both') {\n Resize.resizeTo(editor, startSize.width + e.deltaX, startSize.height + e.deltaY);\n } else {\n Resize.resizeTo(editor, null, startSize.height + e.deltaY);\n }\n }\n };\n }\n if (hasStatusbar(editor)) {\n var linkHtml = 'Tiny';\n var html = global$5.translate([\n 'Powered by {0}',\n linkHtml\n ]);\n var brandingLabel = isBrandingEnabled(editor) ? {\n type: 'label',\n classes: 'branding',\n html: ' ' + html\n } : null;\n panel.add({\n type: 'panel',\n name: 'statusbar',\n classes: 'statusbar',\n layout: 'flow',\n border: '1 0 0 0',\n ariaRoot: true,\n items: [\n {\n type: 'elementpath',\n editor: editor\n },\n resizeHandleCtrl,\n brandingLabel\n ]\n });\n }\n Events.fireBeforeRenderUI(editor);\n editor.on('SwitchMode', switchMode(panel));\n panel.renderBefore(args.targetNode).reflow();\n if (isReadOnly(editor)) {\n editor.setMode('readonly');\n }\n if (args.width) {\n DOM$2.setStyle(panel.getEl(), 'width', args.width);\n }\n editor.on('remove', function () {\n panel.remove();\n panel = null;\n });\n A11y.addKeys(editor, panel);\n ContextToolbars.addContextualToolbars(editor);\n return {\n iframeContainer: panel.find('#iframe')[0].getEl(),\n editorContainer: panel.getEl()\n };\n };\n var Iframe = { render: render };\n\n var global$9 = tinymce.util.Tools.resolve('tinymce.dom.DomQuery');\n\n var count = 0;\n var funcs = {\n id: function () {\n return 'mceu_' + count++;\n },\n create: function (name, attrs, children) {\n var elm = domGlobals.document.createElement(name);\n global$3.DOM.setAttribs(elm, attrs);\n if (typeof children === 'string') {\n elm.innerHTML = children;\n } else {\n global$2.each(children, function (child) {\n if (child.nodeType) {\n elm.appendChild(child);\n }\n });\n }\n return elm;\n },\n createFragment: function (html) {\n return global$3.DOM.createFragment(html);\n },\n getWindowSize: function () {\n return global$3.DOM.getViewPort();\n },\n getSize: function (elm) {\n var width, height;\n if (elm.getBoundingClientRect) {\n var rect = elm.getBoundingClientRect();\n width = Math.max(rect.width || rect.right - rect.left, elm.offsetWidth);\n height = Math.max(rect.height || rect.bottom - rect.bottom, elm.offsetHeight);\n } else {\n width = elm.offsetWidth;\n height = elm.offsetHeight;\n }\n return {\n width: width,\n height: height\n };\n },\n getPos: function (elm, root) {\n return global$3.DOM.getPos(elm, root || funcs.getContainer());\n },\n getContainer: function () {\n return global$8.container ? global$8.container : domGlobals.document.body;\n },\n getViewPort: function (win) {\n return global$3.DOM.getViewPort(win);\n },\n get: function (id) {\n return domGlobals.document.getElementById(id);\n },\n addClass: function (elm, cls) {\n return global$3.DOM.addClass(elm, cls);\n },\n removeClass: function (elm, cls) {\n return global$3.DOM.removeClass(elm, cls);\n },\n hasClass: function (elm, cls) {\n return global$3.DOM.hasClass(elm, cls);\n },\n toggleClass: function (elm, cls, state) {\n return global$3.DOM.toggleClass(elm, cls, state);\n },\n css: function (elm, name, value) {\n return global$3.DOM.setStyle(elm, name, value);\n },\n getRuntimeStyle: function (elm, name) {\n return global$3.DOM.getStyle(elm, name, true);\n },\n on: function (target, name, callback, scope) {\n return global$3.DOM.bind(target, name, callback, scope);\n },\n off: function (target, name, callback) {\n return global$3.DOM.unbind(target, name, callback);\n },\n fire: function (target, name, args) {\n return global$3.DOM.fire(target, name, args);\n },\n innerHtml: function (elm, html) {\n global$3.DOM.setHTML(elm, html);\n }\n };\n\n var isStatic = function (elm) {\n return funcs.getRuntimeStyle(elm, 'position') === 'static';\n };\n var isFixed = function (ctrl) {\n return ctrl.state.get('fixed');\n };\n function calculateRelativePosition(ctrl, targetElm, rel) {\n var ctrlElm, pos, x, y, selfW, selfH, targetW, targetH, viewport, size;\n viewport = getWindowViewPort();\n pos = funcs.getPos(targetElm, UiContainer.getUiContainer(ctrl));\n x = pos.x;\n y = pos.y;\n if (isFixed(ctrl) && isStatic(domGlobals.document.body)) {\n x -= viewport.x;\n y -= viewport.y;\n }\n ctrlElm = ctrl.getEl();\n size = funcs.getSize(ctrlElm);\n selfW = size.width;\n selfH = size.height;\n size = funcs.getSize(targetElm);\n targetW = size.width;\n targetH = size.height;\n rel = (rel || '').split('');\n if (rel[0] === 'b') {\n y += targetH;\n }\n if (rel[1] === 'r') {\n x += targetW;\n }\n if (rel[0] === 'c') {\n y += Math.round(targetH / 2);\n }\n if (rel[1] === 'c') {\n x += Math.round(targetW / 2);\n }\n if (rel[3] === 'b') {\n y -= selfH;\n }\n if (rel[4] === 'r') {\n x -= selfW;\n }\n if (rel[3] === 'c') {\n y -= Math.round(selfH / 2);\n }\n if (rel[4] === 'c') {\n x -= Math.round(selfW / 2);\n }\n return {\n x: x,\n y: y,\n w: selfW,\n h: selfH\n };\n }\n var getUiContainerViewPort = function (customUiContainer) {\n return {\n x: 0,\n y: 0,\n w: customUiContainer.scrollWidth - 1,\n h: customUiContainer.scrollHeight - 1\n };\n };\n var getWindowViewPort = function () {\n var win = domGlobals.window;\n var x = Math.max(win.pageXOffset, domGlobals.document.body.scrollLeft, domGlobals.document.documentElement.scrollLeft);\n var y = Math.max(win.pageYOffset, domGlobals.document.body.scrollTop, domGlobals.document.documentElement.scrollTop);\n var w = win.innerWidth || domGlobals.document.documentElement.clientWidth;\n var h = win.innerHeight || domGlobals.document.documentElement.clientHeight;\n return {\n x: x,\n y: y,\n w: w,\n h: h\n };\n };\n var getViewPortRect = function (ctrl) {\n var customUiContainer = UiContainer.getUiContainer(ctrl);\n return customUiContainer && !isFixed(ctrl) ? getUiContainerViewPort(customUiContainer) : getWindowViewPort();\n };\n var Movable = {\n testMoveRel: function (elm, rels) {\n var viewPortRect = getViewPortRect(this);\n for (var i = 0; i < rels.length; i++) {\n var pos = calculateRelativePosition(this, elm, rels[i]);\n if (isFixed(this)) {\n if (pos.x > 0 && pos.x + pos.w < viewPortRect.w && pos.y > 0 && pos.y + pos.h < viewPortRect.h) {\n return rels[i];\n }\n } else {\n if (pos.x > viewPortRect.x && pos.x + pos.w < viewPortRect.w + viewPortRect.x && pos.y > viewPortRect.y && pos.y + pos.h < viewPortRect.h + viewPortRect.y) {\n return rels[i];\n }\n }\n }\n return rels[0];\n },\n moveRel: function (elm, rel) {\n if (typeof rel !== 'string') {\n rel = this.testMoveRel(elm, rel);\n }\n var pos = calculateRelativePosition(this, elm, rel);\n return this.moveTo(pos.x, pos.y);\n },\n moveBy: function (dx, dy) {\n var self = this, rect = self.layoutRect();\n self.moveTo(rect.x + dx, rect.y + dy);\n return self;\n },\n moveTo: function (x, y) {\n var self = this;\n function constrain(value, max, size) {\n if (value < 0) {\n return 0;\n }\n if (value + size > max) {\n value = max - size;\n return value < 0 ? 0 : value;\n }\n return value;\n }\n if (self.settings.constrainToViewport) {\n var viewPortRect = getViewPortRect(this);\n var layoutRect = self.layoutRect();\n x = constrain(x, viewPortRect.w + viewPortRect.x, layoutRect.w);\n y = constrain(y, viewPortRect.h + viewPortRect.y, layoutRect.h);\n }\n var uiContainer = UiContainer.getUiContainer(self);\n if (uiContainer && isStatic(uiContainer) && !isFixed(self)) {\n x -= uiContainer.scrollLeft;\n y -= uiContainer.scrollTop;\n }\n if (uiContainer) {\n x += 1;\n y += 1;\n }\n if (self.state.get('rendered')) {\n self.layoutRect({\n x: x,\n y: y\n }).repaint();\n } else {\n self.settings.x = x;\n self.settings.y = y;\n }\n self.fire('move', {\n x: x,\n y: y\n });\n return self;\n }\n };\n\n var global$a = tinymce.util.Tools.resolve('tinymce.util.Class');\n\n var global$b = tinymce.util.Tools.resolve('tinymce.util.EventDispatcher');\n\n var BoxUtils = {\n parseBox: function (value) {\n var len;\n var radix = 10;\n if (!value) {\n return;\n }\n if (typeof value === 'number') {\n value = value || 0;\n return {\n top: value,\n left: value,\n bottom: value,\n right: value\n };\n }\n value = value.split(' ');\n len = value.length;\n if (len === 1) {\n value[1] = value[2] = value[3] = value[0];\n } else if (len === 2) {\n value[2] = value[0];\n value[3] = value[1];\n } else if (len === 3) {\n value[3] = value[1];\n }\n return {\n top: parseInt(value[0], radix) || 0,\n right: parseInt(value[1], radix) || 0,\n bottom: parseInt(value[2], radix) || 0,\n left: parseInt(value[3], radix) || 0\n };\n },\n measureBox: function (elm, prefix) {\n function getStyle(name) {\n var defaultView = elm.ownerDocument.defaultView;\n if (defaultView) {\n var computedStyle = defaultView.getComputedStyle(elm, null);\n if (computedStyle) {\n name = name.replace(/[A-Z]/g, function (a) {\n return '-' + a;\n });\n return computedStyle.getPropertyValue(name);\n } else {\n return null;\n }\n }\n return elm.currentStyle[name];\n }\n function getSide(name) {\n var val = parseFloat(getStyle(name));\n return isNaN(val) ? 0 : val;\n }\n return {\n top: getSide(prefix + 'TopWidth'),\n right: getSide(prefix + 'RightWidth'),\n bottom: getSide(prefix + 'BottomWidth'),\n left: getSide(prefix + 'LeftWidth')\n };\n }\n };\n\n function noop$1() {\n }\n function ClassList(onchange) {\n this.cls = [];\n this.cls._map = {};\n this.onchange = onchange || noop$1;\n this.prefix = '';\n }\n global$2.extend(ClassList.prototype, {\n add: function (cls) {\n if (cls && !this.contains(cls)) {\n this.cls._map[cls] = true;\n this.cls.push(cls);\n this._change();\n }\n return this;\n },\n remove: function (cls) {\n if (this.contains(cls)) {\n var i = void 0;\n for (i = 0; i < this.cls.length; i++) {\n if (this.cls[i] === cls) {\n break;\n }\n }\n this.cls.splice(i, 1);\n delete this.cls._map[cls];\n this._change();\n }\n return this;\n },\n toggle: function (cls, state) {\n var curState = this.contains(cls);\n if (curState !== state) {\n if (curState) {\n this.remove(cls);\n } else {\n this.add(cls);\n }\n this._change();\n }\n return this;\n },\n contains: function (cls) {\n return !!this.cls._map[cls];\n },\n _change: function () {\n delete this.clsValue;\n this.onchange.call(this);\n }\n });\n ClassList.prototype.toString = function () {\n var value;\n if (this.clsValue) {\n return this.clsValue;\n }\n value = '';\n for (var i = 0; i < this.cls.length; i++) {\n if (i > 0) {\n value += ' ';\n }\n value += this.prefix + this.cls[i];\n }\n return value;\n };\n\n function unique(array) {\n var uniqueItems = [];\n var i = array.length, item;\n while (i--) {\n item = array[i];\n if (!item.__checked) {\n uniqueItems.push(item);\n item.__checked = 1;\n }\n }\n i = uniqueItems.length;\n while (i--) {\n delete uniqueItems[i].__checked;\n }\n return uniqueItems;\n }\n var expression = /^([\\w\\\\*]+)?(?:#([\\w\\-\\\\]+))?(?:\\.([\\w\\\\\\.]+))?(?:\\[\\@?([\\w\\\\]+)([\\^\\$\\*!~]?=)([\\w\\\\]+)\\])?(?:\\:(.+))?/i;\n var chunker = /((?:\\((?:\\([^()]+\\)|[^()]+)+\\)|\\[(?:\\[[^\\[\\]]*\\]|['\"][^'\"]*['\"]|[^\\[\\]'\"]+)+\\]|\\\\.|[^ >+~,(\\[\\\\]+)+|[>+~])(\\s*,\\s*)?((?:.|\\r|\\n)*)/g;\n var whiteSpace = /^\\s*|\\s*$/g;\n var Collection;\n var Selector = global$a.extend({\n init: function (selector) {\n var match = this.match;\n function compileNameFilter(name) {\n if (name) {\n name = name.toLowerCase();\n return function (item) {\n return name === '*' || item.type === name;\n };\n }\n }\n function compileIdFilter(id) {\n if (id) {\n return function (item) {\n return item._name === id;\n };\n }\n }\n function compileClassesFilter(classes) {\n if (classes) {\n classes = classes.split('.');\n return function (item) {\n var i = classes.length;\n while (i--) {\n if (!item.classes.contains(classes[i])) {\n return false;\n }\n }\n return true;\n };\n }\n }\n function compileAttrFilter(name, cmp, check) {\n if (name) {\n return function (item) {\n var value = item[name] ? item[name]() : '';\n return !cmp ? !!check : cmp === '=' ? value === check : cmp === '*=' ? value.indexOf(check) >= 0 : cmp === '~=' ? (' ' + value + ' ').indexOf(' ' + check + ' ') >= 0 : cmp === '!=' ? value !== check : cmp === '^=' ? value.indexOf(check) === 0 : cmp === '$=' ? value.substr(value.length - check.length) === check : false;\n };\n }\n }\n function compilePsuedoFilter(name) {\n var notSelectors;\n if (name) {\n name = /(?:not\\((.+)\\))|(.+)/i.exec(name);\n if (!name[1]) {\n name = name[2];\n return function (item, index, length) {\n return name === 'first' ? index === 0 : name === 'last' ? index === length - 1 : name === 'even' ? index % 2 === 0 : name === 'odd' ? index % 2 === 1 : item[name] ? item[name]() : false;\n };\n }\n notSelectors = parseChunks(name[1], []);\n return function (item) {\n return !match(item, notSelectors);\n };\n }\n }\n function compile(selector, filters, direct) {\n var parts;\n function add(filter) {\n if (filter) {\n filters.push(filter);\n }\n }\n parts = expression.exec(selector.replace(whiteSpace, ''));\n add(compileNameFilter(parts[1]));\n add(compileIdFilter(parts[2]));\n add(compileClassesFilter(parts[3]));\n add(compileAttrFilter(parts[4], parts[5], parts[6]));\n add(compilePsuedoFilter(parts[7]));\n filters.pseudo = !!parts[7];\n filters.direct = direct;\n return filters;\n }\n function parseChunks(selector, selectors) {\n var parts = [];\n var extra, matches, i;\n do {\n chunker.exec('');\n matches = chunker.exec(selector);\n if (matches) {\n selector = matches[3];\n parts.push(matches[1]);\n if (matches[2]) {\n extra = matches[3];\n break;\n }\n }\n } while (matches);\n if (extra) {\n parseChunks(extra, selectors);\n }\n selector = [];\n for (i = 0; i < parts.length; i++) {\n if (parts[i] !== '>') {\n selector.push(compile(parts[i], [], parts[i - 1] === '>'));\n }\n }\n selectors.push(selector);\n return selectors;\n }\n this._selectors = parseChunks(selector, []);\n },\n match: function (control, selectors) {\n var i, l, si, sl, selector, fi, fl, filters, index, length, siblings, count, item;\n selectors = selectors || this._selectors;\n for (i = 0, l = selectors.length; i < l; i++) {\n selector = selectors[i];\n sl = selector.length;\n item = control;\n count = 0;\n for (si = sl - 1; si >= 0; si--) {\n filters = selector[si];\n while (item) {\n if (filters.pseudo) {\n siblings = item.parent().items();\n index = length = siblings.length;\n while (index--) {\n if (siblings[index] === item) {\n break;\n }\n }\n }\n for (fi = 0, fl = filters.length; fi < fl; fi++) {\n if (!filters[fi](item, index, length)) {\n fi = fl + 1;\n break;\n }\n }\n if (fi === fl) {\n count++;\n break;\n } else {\n if (si === sl - 1) {\n break;\n }\n }\n item = item.parent();\n }\n }\n if (count === sl) {\n return true;\n }\n }\n return false;\n },\n find: function (container) {\n var matches = [], i, l;\n var selectors = this._selectors;\n function collect(items, selector, index) {\n var i, l, fi, fl, item;\n var filters = selector[index];\n for (i = 0, l = items.length; i < l; i++) {\n item = items[i];\n for (fi = 0, fl = filters.length; fi < fl; fi++) {\n if (!filters[fi](item, i, l)) {\n fi = fl + 1;\n break;\n }\n }\n if (fi === fl) {\n if (index === selector.length - 1) {\n matches.push(item);\n } else {\n if (item.items) {\n collect(item.items(), selector, index + 1);\n }\n }\n } else if (filters.direct) {\n return;\n }\n if (item.items) {\n collect(item.items(), selector, index);\n }\n }\n }\n if (container.items) {\n for (i = 0, l = selectors.length; i < l; i++) {\n collect(container.items(), selectors[i], 0);\n }\n if (l > 1) {\n matches = unique(matches);\n }\n }\n if (!Collection) {\n Collection = Selector.Collection;\n }\n return new Collection(matches);\n }\n });\n\n var Collection$1, proto;\n var push = Array.prototype.push, slice = Array.prototype.slice;\n proto = {\n length: 0,\n init: function (items) {\n if (items) {\n this.add(items);\n }\n },\n add: function (items) {\n var self = this;\n if (!global$2.isArray(items)) {\n if (items instanceof Collection$1) {\n self.add(items.toArray());\n } else {\n push.call(self, items);\n }\n } else {\n push.apply(self, items);\n }\n return self;\n },\n set: function (items) {\n var self = this;\n var len = self.length;\n var i;\n self.length = 0;\n self.add(items);\n for (i = self.length; i < len; i++) {\n delete self[i];\n }\n return self;\n },\n filter: function (selector) {\n var self = this;\n var i, l;\n var matches = [];\n var item, match;\n if (typeof selector === 'string') {\n selector = new Selector(selector);\n match = function (item) {\n return selector.match(item);\n };\n } else {\n match = selector;\n }\n for (i = 0, l = self.length; i < l; i++) {\n item = self[i];\n if (match(item)) {\n matches.push(item);\n }\n }\n return new Collection$1(matches);\n },\n slice: function () {\n return new Collection$1(slice.apply(this, arguments));\n },\n eq: function (index) {\n return index === -1 ? this.slice(index) : this.slice(index, +index + 1);\n },\n each: function (callback) {\n global$2.each(this, callback);\n return this;\n },\n toArray: function () {\n return global$2.toArray(this);\n },\n indexOf: function (ctrl) {\n var self = this;\n var i = self.length;\n while (i--) {\n if (self[i] === ctrl) {\n break;\n }\n }\n return i;\n },\n reverse: function () {\n return new Collection$1(global$2.toArray(this).reverse());\n },\n hasClass: function (cls) {\n return this[0] ? this[0].classes.contains(cls) : false;\n },\n prop: function (name, value) {\n var self = this;\n var item;\n if (value !== undefined) {\n self.each(function (item) {\n if (item[name]) {\n item[name](value);\n }\n });\n return self;\n }\n item = self[0];\n if (item && item[name]) {\n return item[name]();\n }\n },\n exec: function (name) {\n var self = this, args = global$2.toArray(arguments).slice(1);\n self.each(function (item) {\n if (item[name]) {\n item[name].apply(item, args);\n }\n });\n return self;\n },\n remove: function () {\n var i = this.length;\n while (i--) {\n this[i].remove();\n }\n return this;\n },\n addClass: function (cls) {\n return this.each(function (item) {\n item.classes.add(cls);\n });\n },\n removeClass: function (cls) {\n return this.each(function (item) {\n item.classes.remove(cls);\n });\n }\n };\n global$2.each('fire on off show hide append prepend before after reflow'.split(' '), function (name) {\n proto[name] = function () {\n var args = global$2.toArray(arguments);\n this.each(function (ctrl) {\n if (name in ctrl) {\n ctrl[name].apply(ctrl, args);\n }\n });\n return this;\n };\n });\n global$2.each('text name disabled active selected checked visible parent value data'.split(' '), function (name) {\n proto[name] = function (value) {\n return this.prop(name, value);\n };\n });\n Collection$1 = global$a.extend(proto);\n Selector.Collection = Collection$1;\n var Collection$2 = Collection$1;\n\n var Binding = function (settings) {\n this.create = settings.create;\n };\n Binding.create = function (model, name) {\n return new Binding({\n create: function (otherModel, otherName) {\n var bindings;\n var fromSelfToOther = function (e) {\n otherModel.set(otherName, e.value);\n };\n var fromOtherToSelf = function (e) {\n model.set(name, e.value);\n };\n otherModel.on('change:' + otherName, fromOtherToSelf);\n model.on('change:' + name, fromSelfToOther);\n bindings = otherModel._bindings;\n if (!bindings) {\n bindings = otherModel._bindings = [];\n otherModel.on('destroy', function () {\n var i = bindings.length;\n while (i--) {\n bindings[i]();\n }\n });\n }\n bindings.push(function () {\n model.off('change:' + name, fromSelfToOther);\n });\n return model.get(name);\n }\n });\n };\n\n var global$c = tinymce.util.Tools.resolve('tinymce.util.Observable');\n\n function isNode(node) {\n return node.nodeType > 0;\n }\n function isEqual(a, b) {\n var k, checked;\n if (a === b) {\n return true;\n }\n if (a === null || b === null) {\n return a === b;\n }\n if (typeof a !== 'object' || typeof b !== 'object') {\n return a === b;\n }\n if (global$2.isArray(b)) {\n if (a.length !== b.length) {\n return false;\n }\n k = a.length;\n while (k--) {\n if (!isEqual(a[k], b[k])) {\n return false;\n }\n }\n }\n if (isNode(a) || isNode(b)) {\n return a === b;\n }\n checked = {};\n for (k in b) {\n if (!isEqual(a[k], b[k])) {\n return false;\n }\n checked[k] = true;\n }\n for (k in a) {\n if (!checked[k] && !isEqual(a[k], b[k])) {\n return false;\n }\n }\n return true;\n }\n var ObservableObject = global$a.extend({\n Mixins: [global$c],\n init: function (data) {\n var name, value;\n data = data || {};\n for (name in data) {\n value = data[name];\n if (value instanceof Binding) {\n data[name] = value.create(this, name);\n }\n }\n this.data = data;\n },\n set: function (name, value) {\n var key, args;\n var oldValue = this.data[name];\n if (value instanceof Binding) {\n value = value.create(this, name);\n }\n if (typeof name === 'object') {\n for (key in name) {\n this.set(key, name[key]);\n }\n return this;\n }\n if (!isEqual(oldValue, value)) {\n this.data[name] = value;\n args = {\n target: this,\n name: name,\n value: value,\n oldValue: oldValue\n };\n this.fire('change:' + name, args);\n this.fire('change', args);\n }\n return this;\n },\n get: function (name) {\n return this.data[name];\n },\n has: function (name) {\n return name in this.data;\n },\n bind: function (name) {\n return Binding.create(this, name);\n },\n destroy: function () {\n this.fire('destroy');\n }\n });\n\n var dirtyCtrls = {}, animationFrameRequested;\n var ReflowQueue = {\n add: function (ctrl) {\n var parent = ctrl.parent();\n if (parent) {\n if (!parent._layout || parent._layout.isNative()) {\n return;\n }\n if (!dirtyCtrls[parent._id]) {\n dirtyCtrls[parent._id] = parent;\n }\n if (!animationFrameRequested) {\n animationFrameRequested = true;\n global$7.requestAnimationFrame(function () {\n var id, ctrl;\n animationFrameRequested = false;\n for (id in dirtyCtrls) {\n ctrl = dirtyCtrls[id];\n if (ctrl.state.get('rendered')) {\n ctrl.reflow();\n }\n }\n dirtyCtrls = {};\n }, domGlobals.document.body);\n }\n }\n },\n remove: function (ctrl) {\n if (dirtyCtrls[ctrl._id]) {\n delete dirtyCtrls[ctrl._id];\n }\n }\n };\n\n var hasMouseWheelEventSupport = 'onmousewheel' in domGlobals.document;\n var hasWheelEventSupport = false;\n var classPrefix = 'mce-';\n var Control, idCounter = 0;\n var proto$1 = {\n Statics: { classPrefix: classPrefix },\n isRtl: function () {\n return Control.rtl;\n },\n classPrefix: classPrefix,\n init: function (settings) {\n var self = this;\n var classes, defaultClasses;\n function applyClasses(classes) {\n var i;\n classes = classes.split(' ');\n for (i = 0; i < classes.length; i++) {\n self.classes.add(classes[i]);\n }\n }\n self.settings = settings = global$2.extend({}, self.Defaults, settings);\n self._id = settings.id || 'mceu_' + idCounter++;\n self._aria = { role: settings.role };\n self._elmCache = {};\n self.$ = global$9;\n self.state = new ObservableObject({\n visible: true,\n active: false,\n disabled: false,\n value: ''\n });\n self.data = new ObservableObject(settings.data);\n self.classes = new ClassList(function () {\n if (self.state.get('rendered')) {\n self.getEl().className = this.toString();\n }\n });\n self.classes.prefix = self.classPrefix;\n classes = settings.classes;\n if (classes) {\n if (self.Defaults) {\n defaultClasses = self.Defaults.classes;\n if (defaultClasses && classes !== defaultClasses) {\n applyClasses(defaultClasses);\n }\n }\n applyClasses(classes);\n }\n global$2.each('title text name visible disabled active value'.split(' '), function (name) {\n if (name in settings) {\n self[name](settings[name]);\n }\n });\n self.on('click', function () {\n if (self.disabled()) {\n return false;\n }\n });\n self.settings = settings;\n self.borderBox = BoxUtils.parseBox(settings.border);\n self.paddingBox = BoxUtils.parseBox(settings.padding);\n self.marginBox = BoxUtils.parseBox(settings.margin);\n if (settings.hidden) {\n self.hide();\n }\n },\n Properties: 'parent,name',\n getContainerElm: function () {\n var uiContainer = UiContainer.getUiContainer(this);\n return uiContainer ? uiContainer : funcs.getContainer();\n },\n getParentCtrl: function (elm) {\n var ctrl;\n var lookup = this.getRoot().controlIdLookup;\n while (elm && lookup) {\n ctrl = lookup[elm.id];\n if (ctrl) {\n break;\n }\n elm = elm.parentNode;\n }\n return ctrl;\n },\n initLayoutRect: function () {\n var self = this;\n var settings = self.settings;\n var borderBox, layoutRect;\n var elm = self.getEl();\n var width, height, minWidth, minHeight, autoResize;\n var startMinWidth, startMinHeight, initialSize;\n borderBox = self.borderBox = self.borderBox || BoxUtils.measureBox(elm, 'border');\n self.paddingBox = self.paddingBox || BoxUtils.measureBox(elm, 'padding');\n self.marginBox = self.marginBox || BoxUtils.measureBox(elm, 'margin');\n initialSize = funcs.getSize(elm);\n startMinWidth = settings.minWidth;\n startMinHeight = settings.minHeight;\n minWidth = startMinWidth || initialSize.width;\n minHeight = startMinHeight || initialSize.height;\n width = settings.width;\n height = settings.height;\n autoResize = settings.autoResize;\n autoResize = typeof autoResize !== 'undefined' ? autoResize : !width && !height;\n width = width || minWidth;\n height = height || minHeight;\n var deltaW = borderBox.left + borderBox.right;\n var deltaH = borderBox.top + borderBox.bottom;\n var maxW = settings.maxWidth || 65535;\n var maxH = settings.maxHeight || 65535;\n self._layoutRect = layoutRect = {\n x: settings.x || 0,\n y: settings.y || 0,\n w: width,\n h: height,\n deltaW: deltaW,\n deltaH: deltaH,\n contentW: width - deltaW,\n contentH: height - deltaH,\n innerW: width - deltaW,\n innerH: height - deltaH,\n startMinWidth: startMinWidth || 0,\n startMinHeight: startMinHeight || 0,\n minW: Math.min(minWidth, maxW),\n minH: Math.min(minHeight, maxH),\n maxW: maxW,\n maxH: maxH,\n autoResize: autoResize,\n scrollW: 0\n };\n self._lastLayoutRect = {};\n return layoutRect;\n },\n layoutRect: function (newRect) {\n var self = this;\n var curRect = self._layoutRect, lastLayoutRect, size, deltaWidth, deltaHeight, repaintControls;\n if (!curRect) {\n curRect = self.initLayoutRect();\n }\n if (newRect) {\n deltaWidth = curRect.deltaW;\n deltaHeight = curRect.deltaH;\n if (newRect.x !== undefined) {\n curRect.x = newRect.x;\n }\n if (newRect.y !== undefined) {\n curRect.y = newRect.y;\n }\n if (newRect.minW !== undefined) {\n curRect.minW = newRect.minW;\n }\n if (newRect.minH !== undefined) {\n curRect.minH = newRect.minH;\n }\n size = newRect.w;\n if (size !== undefined) {\n size = size < curRect.minW ? curRect.minW : size;\n size = size > curRect.maxW ? curRect.maxW : size;\n curRect.w = size;\n curRect.innerW = size - deltaWidth;\n }\n size = newRect.h;\n if (size !== undefined) {\n size = size < curRect.minH ? curRect.minH : size;\n size = size > curRect.maxH ? curRect.maxH : size;\n curRect.h = size;\n curRect.innerH = size - deltaHeight;\n }\n size = newRect.innerW;\n if (size !== undefined) {\n size = size < curRect.minW - deltaWidth ? curRect.minW - deltaWidth : size;\n size = size > curRect.maxW - deltaWidth ? curRect.maxW - deltaWidth : size;\n curRect.innerW = size;\n curRect.w = size + deltaWidth;\n }\n size = newRect.innerH;\n if (size !== undefined) {\n size = size < curRect.minH - deltaHeight ? curRect.minH - deltaHeight : size;\n size = size > curRect.maxH - deltaHeight ? curRect.maxH - deltaHeight : size;\n curRect.innerH = size;\n curRect.h = size + deltaHeight;\n }\n if (newRect.contentW !== undefined) {\n curRect.contentW = newRect.contentW;\n }\n if (newRect.contentH !== undefined) {\n curRect.contentH = newRect.contentH;\n }\n lastLayoutRect = self._lastLayoutRect;\n if (lastLayoutRect.x !== curRect.x || lastLayoutRect.y !== curRect.y || lastLayoutRect.w !== curRect.w || lastLayoutRect.h !== curRect.h) {\n repaintControls = Control.repaintControls;\n if (repaintControls) {\n if (repaintControls.map && !repaintControls.map[self._id]) {\n repaintControls.push(self);\n repaintControls.map[self._id] = true;\n }\n }\n lastLayoutRect.x = curRect.x;\n lastLayoutRect.y = curRect.y;\n lastLayoutRect.w = curRect.w;\n lastLayoutRect.h = curRect.h;\n }\n return self;\n }\n return curRect;\n },\n repaint: function () {\n var self = this;\n var style, bodyStyle, bodyElm, rect, borderBox;\n var borderW, borderH, lastRepaintRect, round, value;\n round = !domGlobals.document.createRange ? Math.round : function (value) {\n return value;\n };\n style = self.getEl().style;\n rect = self._layoutRect;\n lastRepaintRect = self._lastRepaintRect || {};\n borderBox = self.borderBox;\n borderW = borderBox.left + borderBox.right;\n borderH = borderBox.top + borderBox.bottom;\n if (rect.x !== lastRepaintRect.x) {\n style.left = round(rect.x) + 'px';\n lastRepaintRect.x = rect.x;\n }\n if (rect.y !== lastRepaintRect.y) {\n style.top = round(rect.y) + 'px';\n lastRepaintRect.y = rect.y;\n }\n if (rect.w !== lastRepaintRect.w) {\n value = round(rect.w - borderW);\n style.width = (value >= 0 ? value : 0) + 'px';\n lastRepaintRect.w = rect.w;\n }\n if (rect.h !== lastRepaintRect.h) {\n value = round(rect.h - borderH);\n style.height = (value >= 0 ? value : 0) + 'px';\n lastRepaintRect.h = rect.h;\n }\n if (self._hasBody && rect.innerW !== lastRepaintRect.innerW) {\n value = round(rect.innerW);\n bodyElm = self.getEl('body');\n if (bodyElm) {\n bodyStyle = bodyElm.style;\n bodyStyle.width = (value >= 0 ? value : 0) + 'px';\n }\n lastRepaintRect.innerW = rect.innerW;\n }\n if (self._hasBody && rect.innerH !== lastRepaintRect.innerH) {\n value = round(rect.innerH);\n bodyElm = bodyElm || self.getEl('body');\n if (bodyElm) {\n bodyStyle = bodyStyle || bodyElm.style;\n bodyStyle.height = (value >= 0 ? value : 0) + 'px';\n }\n lastRepaintRect.innerH = rect.innerH;\n }\n self._lastRepaintRect = lastRepaintRect;\n self.fire('repaint', {}, false);\n },\n updateLayoutRect: function () {\n var self = this;\n self.parent()._lastRect = null;\n funcs.css(self.getEl(), {\n width: '',\n height: ''\n });\n self._layoutRect = self._lastRepaintRect = self._lastLayoutRect = null;\n self.initLayoutRect();\n },\n on: function (name, callback) {\n var self = this;\n function resolveCallbackName(name) {\n var callback, scope;\n if (typeof name !== 'string') {\n return name;\n }\n return function (e) {\n if (!callback) {\n self.parentsAndSelf().each(function (ctrl) {\n var callbacks = ctrl.settings.callbacks;\n if (callbacks && (callback = callbacks[name])) {\n scope = ctrl;\n return false;\n }\n });\n }\n if (!callback) {\n e.action = name;\n this.fire('execute', e);\n return;\n }\n return callback.call(scope, e);\n };\n }\n getEventDispatcher(self).on(name, resolveCallbackName(callback));\n return self;\n },\n off: function (name, callback) {\n getEventDispatcher(this).off(name, callback);\n return this;\n },\n fire: function (name, args, bubble) {\n var self = this;\n args = args || {};\n if (!args.control) {\n args.control = self;\n }\n args = getEventDispatcher(self).fire(name, args);\n if (bubble !== false && self.parent) {\n var parent = self.parent();\n while (parent && !args.isPropagationStopped()) {\n parent.fire(name, args, false);\n parent = parent.parent();\n }\n }\n return args;\n },\n hasEventListeners: function (name) {\n return getEventDispatcher(this).has(name);\n },\n parents: function (selector) {\n var self = this;\n var ctrl, parents = new Collection$2();\n for (ctrl = self.parent(); ctrl; ctrl = ctrl.parent()) {\n parents.add(ctrl);\n }\n if (selector) {\n parents = parents.filter(selector);\n }\n return parents;\n },\n parentsAndSelf: function (selector) {\n return new Collection$2(this).add(this.parents(selector));\n },\n next: function () {\n var parentControls = this.parent().items();\n return parentControls[parentControls.indexOf(this) + 1];\n },\n prev: function () {\n var parentControls = this.parent().items();\n return parentControls[parentControls.indexOf(this) - 1];\n },\n innerHtml: function (html) {\n this.$el.html(html);\n return this;\n },\n getEl: function (suffix) {\n var id = suffix ? this._id + '-' + suffix : this._id;\n if (!this._elmCache[id]) {\n this._elmCache[id] = global$9('#' + id)[0];\n }\n return this._elmCache[id];\n },\n show: function () {\n return this.visible(true);\n },\n hide: function () {\n return this.visible(false);\n },\n focus: function () {\n try {\n this.getEl().focus();\n } catch (ex) {\n }\n return this;\n },\n blur: function () {\n this.getEl().blur();\n return this;\n },\n aria: function (name, value) {\n var self = this, elm = self.getEl(self.ariaTarget);\n if (typeof value === 'undefined') {\n return self._aria[name];\n }\n self._aria[name] = value;\n if (self.state.get('rendered')) {\n elm.setAttribute(name === 'role' ? name : 'aria-' + name, value);\n }\n return self;\n },\n encode: function (text, translate) {\n if (translate !== false) {\n text = this.translate(text);\n }\n return (text || '').replace(/[&<>\"]/g, function (match) {\n return '' + match.charCodeAt(0) + ';';\n });\n },\n translate: function (text) {\n return Control.translate ? Control.translate(text) : text;\n },\n before: function (items) {\n var self = this, parent = self.parent();\n if (parent) {\n parent.insert(items, parent.items().indexOf(self), true);\n }\n return self;\n },\n after: function (items) {\n var self = this, parent = self.parent();\n if (parent) {\n parent.insert(items, parent.items().indexOf(self));\n }\n return self;\n },\n remove: function () {\n var self = this;\n var elm = self.getEl();\n var parent = self.parent();\n var newItems, i;\n if (self.items) {\n var controls = self.items().toArray();\n i = controls.length;\n while (i--) {\n controls[i].remove();\n }\n }\n if (parent && parent.items) {\n newItems = [];\n parent.items().each(function (item) {\n if (item !== self) {\n newItems.push(item);\n }\n });\n parent.items().set(newItems);\n parent._lastRect = null;\n }\n if (self._eventsRoot && self._eventsRoot === self) {\n global$9(elm).off();\n }\n var lookup = self.getRoot().controlIdLookup;\n if (lookup) {\n delete lookup[self._id];\n }\n if (elm && elm.parentNode) {\n elm.parentNode.removeChild(elm);\n }\n self.state.set('rendered', false);\n self.state.destroy();\n self.fire('remove');\n return self;\n },\n renderBefore: function (elm) {\n global$9(elm).before(this.renderHtml());\n this.postRender();\n return this;\n },\n renderTo: function (elm) {\n global$9(elm || this.getContainerElm()).append(this.renderHtml());\n this.postRender();\n return this;\n },\n preRender: function () {\n },\n render: function () {\n },\n renderHtml: function () {\n return '';\n },\n postRender: function () {\n var self = this;\n var settings = self.settings;\n var elm, box, parent, name, parentEventsRoot;\n self.$el = global$9(self.getEl());\n self.state.set('rendered', true);\n for (name in settings) {\n if (name.indexOf('on') === 0) {\n self.on(name.substr(2), settings[name]);\n }\n }\n if (self._eventsRoot) {\n for (parent = self.parent(); !parentEventsRoot && parent; parent = parent.parent()) {\n parentEventsRoot = parent._eventsRoot;\n }\n if (parentEventsRoot) {\n for (name in parentEventsRoot._nativeEvents) {\n self._nativeEvents[name] = true;\n }\n }\n }\n bindPendingEvents(self);\n if (settings.style) {\n elm = self.getEl();\n if (elm) {\n elm.setAttribute('style', settings.style);\n elm.style.cssText = settings.style;\n }\n }\n if (self.settings.border) {\n box = self.borderBox;\n self.$el.css({\n 'border-top-width': box.top,\n 'border-right-width': box.right,\n 'border-bottom-width': box.bottom,\n 'border-left-width': box.left\n });\n }\n var root = self.getRoot();\n if (!root.controlIdLookup) {\n root.controlIdLookup = {};\n }\n root.controlIdLookup[self._id] = self;\n for (var key in self._aria) {\n self.aria(key, self._aria[key]);\n }\n if (self.state.get('visible') === false) {\n self.getEl().style.display = 'none';\n }\n self.bindStates();\n self.state.on('change:visible', function (e) {\n var state = e.value;\n var parentCtrl;\n if (self.state.get('rendered')) {\n self.getEl().style.display = state === false ? 'none' : '';\n self.getEl().getBoundingClientRect();\n }\n parentCtrl = self.parent();\n if (parentCtrl) {\n parentCtrl._lastRect = null;\n }\n self.fire(state ? 'show' : 'hide');\n ReflowQueue.add(self);\n });\n self.fire('postrender', {}, false);\n },\n bindStates: function () {\n },\n scrollIntoView: function (align) {\n function getOffset(elm, rootElm) {\n var x, y, parent = elm;\n x = y = 0;\n while (parent && parent !== rootElm && parent.nodeType) {\n x += parent.offsetLeft || 0;\n y += parent.offsetTop || 0;\n parent = parent.offsetParent;\n }\n return {\n x: x,\n y: y\n };\n }\n var elm = this.getEl(), parentElm = elm.parentNode;\n var x, y, width, height, parentWidth, parentHeight;\n var pos = getOffset(elm, parentElm);\n x = pos.x;\n y = pos.y;\n width = elm.offsetWidth;\n height = elm.offsetHeight;\n parentWidth = parentElm.clientWidth;\n parentHeight = parentElm.clientHeight;\n if (align === 'end') {\n x -= parentWidth - width;\n y -= parentHeight - height;\n } else if (align === 'center') {\n x -= parentWidth / 2 - width / 2;\n y -= parentHeight / 2 - height / 2;\n }\n parentElm.scrollLeft = x;\n parentElm.scrollTop = y;\n return this;\n },\n getRoot: function () {\n var ctrl = this, rootControl;\n var parents = [];\n while (ctrl) {\n if (ctrl.rootControl) {\n rootControl = ctrl.rootControl;\n break;\n }\n parents.push(ctrl);\n rootControl = ctrl;\n ctrl = ctrl.parent();\n }\n if (!rootControl) {\n rootControl = this;\n }\n var i = parents.length;\n while (i--) {\n parents[i].rootControl = rootControl;\n }\n return rootControl;\n },\n reflow: function () {\n ReflowQueue.remove(this);\n var parent = this.parent();\n if (parent && parent._layout && !parent._layout.isNative()) {\n parent.reflow();\n }\n return this;\n }\n };\n global$2.each('text title visible disabled active value'.split(' '), function (name) {\n proto$1[name] = function (value) {\n if (arguments.length === 0) {\n return this.state.get(name);\n }\n if (typeof value !== 'undefined') {\n this.state.set(name, value);\n }\n return this;\n };\n });\n Control = global$a.extend(proto$1);\n function getEventDispatcher(obj) {\n if (!obj._eventDispatcher) {\n obj._eventDispatcher = new global$b({\n scope: obj,\n toggleEvent: function (name, state) {\n if (state && global$b.isNative(name)) {\n if (!obj._nativeEvents) {\n obj._nativeEvents = {};\n }\n obj._nativeEvents[name] = true;\n if (obj.state.get('rendered')) {\n bindPendingEvents(obj);\n }\n }\n }\n });\n }\n return obj._eventDispatcher;\n }\n function bindPendingEvents(eventCtrl) {\n var i, l, parents, eventRootCtrl, nativeEvents, name;\n function delegate(e) {\n var control = eventCtrl.getParentCtrl(e.target);\n if (control) {\n control.fire(e.type, e);\n }\n }\n function mouseLeaveHandler() {\n var ctrl = eventRootCtrl._lastHoverCtrl;\n if (ctrl) {\n ctrl.fire('mouseleave', { target: ctrl.getEl() });\n ctrl.parents().each(function (ctrl) {\n ctrl.fire('mouseleave', { target: ctrl.getEl() });\n });\n eventRootCtrl._lastHoverCtrl = null;\n }\n }\n function mouseEnterHandler(e) {\n var ctrl = eventCtrl.getParentCtrl(e.target), lastCtrl = eventRootCtrl._lastHoverCtrl, idx = 0, i, parents, lastParents;\n if (ctrl !== lastCtrl) {\n eventRootCtrl._lastHoverCtrl = ctrl;\n parents = ctrl.parents().toArray().reverse();\n parents.push(ctrl);\n if (lastCtrl) {\n lastParents = lastCtrl.parents().toArray().reverse();\n lastParents.push(lastCtrl);\n for (idx = 0; idx < lastParents.length; idx++) {\n if (parents[idx] !== lastParents[idx]) {\n break;\n }\n }\n for (i = lastParents.length - 1; i >= idx; i--) {\n lastCtrl = lastParents[i];\n lastCtrl.fire('mouseleave', { target: lastCtrl.getEl() });\n }\n }\n for (i = idx; i < parents.length; i++) {\n ctrl = parents[i];\n ctrl.fire('mouseenter', { target: ctrl.getEl() });\n }\n }\n }\n function fixWheelEvent(e) {\n e.preventDefault();\n if (e.type === 'mousewheel') {\n e.deltaY = -1 / 40 * e.wheelDelta;\n if (e.wheelDeltaX) {\n e.deltaX = -1 / 40 * e.wheelDeltaX;\n }\n } else {\n e.deltaX = 0;\n e.deltaY = e.detail;\n }\n e = eventCtrl.fire('wheel', e);\n }\n nativeEvents = eventCtrl._nativeEvents;\n if (nativeEvents) {\n parents = eventCtrl.parents().toArray();\n parents.unshift(eventCtrl);\n for (i = 0, l = parents.length; !eventRootCtrl && i < l; i++) {\n eventRootCtrl = parents[i]._eventsRoot;\n }\n if (!eventRootCtrl) {\n eventRootCtrl = parents[parents.length - 1] || eventCtrl;\n }\n eventCtrl._eventsRoot = eventRootCtrl;\n for (l = i, i = 0; i < l; i++) {\n parents[i]._eventsRoot = eventRootCtrl;\n }\n var eventRootDelegates = eventRootCtrl._delegates;\n if (!eventRootDelegates) {\n eventRootDelegates = eventRootCtrl._delegates = {};\n }\n for (name in nativeEvents) {\n if (!nativeEvents) {\n return false;\n }\n if (name === 'wheel' && !hasWheelEventSupport) {\n if (hasMouseWheelEventSupport) {\n global$9(eventCtrl.getEl()).on('mousewheel', fixWheelEvent);\n } else {\n global$9(eventCtrl.getEl()).on('DOMMouseScroll', fixWheelEvent);\n }\n continue;\n }\n if (name === 'mouseenter' || name === 'mouseleave') {\n if (!eventRootCtrl._hasMouseEnter) {\n global$9(eventRootCtrl.getEl()).on('mouseleave', mouseLeaveHandler).on('mouseover', mouseEnterHandler);\n eventRootCtrl._hasMouseEnter = 1;\n }\n } else if (!eventRootDelegates[name]) {\n global$9(eventRootCtrl.getEl()).on(name, delegate);\n eventRootDelegates[name] = true;\n }\n nativeEvents[name] = false;\n }\n }\n }\n var Control$1 = Control;\n\n var hasTabstopData = function (elm) {\n return elm.getAttribute('data-mce-tabstop') ? true : false;\n };\n function KeyboardNavigation (settings) {\n var root = settings.root;\n var focusedElement, focusedControl;\n function isElement(node) {\n return node && node.nodeType === 1;\n }\n try {\n focusedElement = domGlobals.document.activeElement;\n } catch (ex) {\n focusedElement = domGlobals.document.body;\n }\n focusedControl = root.getParentCtrl(focusedElement);\n function getRole(elm) {\n elm = elm || focusedElement;\n if (isElement(elm)) {\n return elm.getAttribute('role');\n }\n return null;\n }\n function getParentRole(elm) {\n var role, parent = elm || focusedElement;\n while (parent = parent.parentNode) {\n if (role = getRole(parent)) {\n return role;\n }\n }\n }\n function getAriaProp(name) {\n var elm = focusedElement;\n if (isElement(elm)) {\n return elm.getAttribute('aria-' + name);\n }\n }\n function isTextInputElement(elm) {\n var tagName = elm.tagName.toUpperCase();\n return tagName === 'INPUT' || tagName === 'TEXTAREA' || tagName === 'SELECT';\n }\n function canFocus(elm) {\n if (isTextInputElement(elm) && !elm.hidden) {\n return true;\n }\n if (hasTabstopData(elm)) {\n return true;\n }\n if (/^(button|menuitem|checkbox|tab|menuitemcheckbox|option|gridcell|slider)$/.test(getRole(elm))) {\n return true;\n }\n return false;\n }\n function getFocusElements(elm) {\n var elements = [];\n function collect(elm) {\n if (elm.nodeType !== 1 || elm.style.display === 'none' || elm.disabled) {\n return;\n }\n if (canFocus(elm)) {\n elements.push(elm);\n }\n for (var i = 0; i < elm.childNodes.length; i++) {\n collect(elm.childNodes[i]);\n }\n }\n collect(elm || root.getEl());\n return elements;\n }\n function getNavigationRoot(targetControl) {\n var navigationRoot, controls;\n targetControl = targetControl || focusedControl;\n controls = targetControl.parents().toArray();\n controls.unshift(targetControl);\n for (var i = 0; i < controls.length; i++) {\n navigationRoot = controls[i];\n if (navigationRoot.settings.ariaRoot) {\n break;\n }\n }\n return navigationRoot;\n }\n function focusFirst(targetControl) {\n var navigationRoot = getNavigationRoot(targetControl);\n var focusElements = getFocusElements(navigationRoot.getEl());\n if (navigationRoot.settings.ariaRemember && 'lastAriaIndex' in navigationRoot) {\n moveFocusToIndex(navigationRoot.lastAriaIndex, focusElements);\n } else {\n moveFocusToIndex(0, focusElements);\n }\n }\n function moveFocusToIndex(idx, elements) {\n if (idx < 0) {\n idx = elements.length - 1;\n } else if (idx >= elements.length) {\n idx = 0;\n }\n if (elements[idx]) {\n elements[idx].focus();\n }\n return idx;\n }\n function moveFocus(dir, elements) {\n var idx = -1;\n var navigationRoot = getNavigationRoot();\n elements = elements || getFocusElements(navigationRoot.getEl());\n for (var i = 0; i < elements.length; i++) {\n if (elements[i] === focusedElement) {\n idx = i;\n }\n }\n idx += dir;\n navigationRoot.lastAriaIndex = moveFocusToIndex(idx, elements);\n }\n function left() {\n var parentRole = getParentRole();\n if (parentRole === 'tablist') {\n moveFocus(-1, getFocusElements(focusedElement.parentNode));\n } else if (focusedControl.parent().submenu) {\n cancel();\n } else {\n moveFocus(-1);\n }\n }\n function right() {\n var role = getRole(), parentRole = getParentRole();\n if (parentRole === 'tablist') {\n moveFocus(1, getFocusElements(focusedElement.parentNode));\n } else if (role === 'menuitem' && parentRole === 'menu' && getAriaProp('haspopup')) {\n enter();\n } else {\n moveFocus(1);\n }\n }\n function up() {\n moveFocus(-1);\n }\n function down() {\n var role = getRole(), parentRole = getParentRole();\n if (role === 'menuitem' && parentRole === 'menubar') {\n enter();\n } else if (role === 'button' && getAriaProp('haspopup')) {\n enter({ key: 'down' });\n } else {\n moveFocus(1);\n }\n }\n function tab(e) {\n var parentRole = getParentRole();\n if (parentRole === 'tablist') {\n var elm = getFocusElements(focusedControl.getEl('body'))[0];\n if (elm) {\n elm.focus();\n }\n } else {\n moveFocus(e.shiftKey ? -1 : 1);\n }\n }\n function cancel() {\n focusedControl.fire('cancel');\n }\n function enter(aria) {\n aria = aria || {};\n focusedControl.fire('click', {\n target: focusedElement,\n aria: aria\n });\n }\n root.on('keydown', function (e) {\n function handleNonTabOrEscEvent(e, handler) {\n if (isTextInputElement(focusedElement) || hasTabstopData(focusedElement)) {\n return;\n }\n if (getRole(focusedElement) === 'slider') {\n return;\n }\n if (handler(e) !== false) {\n e.preventDefault();\n }\n }\n if (e.isDefaultPrevented()) {\n return;\n }\n switch (e.keyCode) {\n case 37:\n handleNonTabOrEscEvent(e, left);\n break;\n case 39:\n handleNonTabOrEscEvent(e, right);\n break;\n case 38:\n handleNonTabOrEscEvent(e, up);\n break;\n case 40:\n handleNonTabOrEscEvent(e, down);\n break;\n case 27:\n cancel();\n break;\n case 14:\n case 13:\n case 32:\n handleNonTabOrEscEvent(e, enter);\n break;\n case 9:\n tab(e);\n e.preventDefault();\n break;\n }\n });\n root.on('focusin', function (e) {\n focusedElement = e.target;\n focusedControl = e.control;\n });\n return { focusFirst: focusFirst };\n }\n\n var selectorCache = {};\n var Container = Control$1.extend({\n init: function (settings) {\n var self = this;\n self._super(settings);\n settings = self.settings;\n if (settings.fixed) {\n self.state.set('fixed', true);\n }\n self._items = new Collection$2();\n if (self.isRtl()) {\n self.classes.add('rtl');\n }\n self.bodyClasses = new ClassList(function () {\n if (self.state.get('rendered')) {\n self.getEl('body').className = this.toString();\n }\n });\n self.bodyClasses.prefix = self.classPrefix;\n self.classes.add('container');\n self.bodyClasses.add('container-body');\n if (settings.containerCls) {\n self.classes.add(settings.containerCls);\n }\n self._layout = global$4.create((settings.layout || '') + 'layout');\n if (self.settings.items) {\n self.add(self.settings.items);\n } else {\n self.add(self.render());\n }\n self._hasBody = true;\n },\n items: function () {\n return this._items;\n },\n find: function (selector) {\n selector = selectorCache[selector] = selectorCache[selector] || new Selector(selector);\n return selector.find(this);\n },\n add: function (items) {\n var self = this;\n self.items().add(self.create(items)).parent(self);\n return self;\n },\n focus: function (keyboard) {\n var self = this;\n var focusCtrl, keyboardNav, items;\n if (keyboard) {\n keyboardNav = self.keyboardNav || self.parents().eq(-1)[0].keyboardNav;\n if (keyboardNav) {\n keyboardNav.focusFirst(self);\n return;\n }\n }\n items = self.find('*');\n if (self.statusbar) {\n items.add(self.statusbar.items());\n }\n items.each(function (ctrl) {\n if (ctrl.settings.autofocus) {\n focusCtrl = null;\n return false;\n }\n if (ctrl.canFocus) {\n focusCtrl = focusCtrl || ctrl;\n }\n });\n if (focusCtrl) {\n focusCtrl.focus();\n }\n return self;\n },\n replace: function (oldItem, newItem) {\n var ctrlElm;\n var items = this.items();\n var i = items.length;\n while (i--) {\n if (items[i] === oldItem) {\n items[i] = newItem;\n break;\n }\n }\n if (i >= 0) {\n ctrlElm = newItem.getEl();\n if (ctrlElm) {\n ctrlElm.parentNode.removeChild(ctrlElm);\n }\n ctrlElm = oldItem.getEl();\n if (ctrlElm) {\n ctrlElm.parentNode.removeChild(ctrlElm);\n }\n }\n newItem.parent(this);\n },\n create: function (items) {\n var self = this;\n var settings;\n var ctrlItems = [];\n if (!global$2.isArray(items)) {\n items = [items];\n }\n global$2.each(items, function (item) {\n if (item) {\n if (!(item instanceof Control$1)) {\n if (typeof item === 'string') {\n item = { type: item };\n }\n settings = global$2.extend({}, self.settings.defaults, item);\n item.type = settings.type = settings.type || item.type || self.settings.defaultType || (settings.defaults ? settings.defaults.type : null);\n item = global$4.create(settings);\n }\n ctrlItems.push(item);\n }\n });\n return ctrlItems;\n },\n renderNew: function () {\n var self = this;\n self.items().each(function (ctrl, index) {\n var containerElm;\n ctrl.parent(self);\n if (!ctrl.state.get('rendered')) {\n containerElm = self.getEl('body');\n if (containerElm.hasChildNodes() && index <= containerElm.childNodes.length - 1) {\n global$9(containerElm.childNodes[index]).before(ctrl.renderHtml());\n } else {\n global$9(containerElm).append(ctrl.renderHtml());\n }\n ctrl.postRender();\n ReflowQueue.add(ctrl);\n }\n });\n self._layout.applyClasses(self.items().filter(':visible'));\n self._lastRect = null;\n return self;\n },\n append: function (items) {\n return this.add(items).renderNew();\n },\n prepend: function (items) {\n var self = this;\n self.items().set(self.create(items).concat(self.items().toArray()));\n return self.renderNew();\n },\n insert: function (items, index, before) {\n var self = this;\n var curItems, beforeItems, afterItems;\n items = self.create(items);\n curItems = self.items();\n if (!before && index < curItems.length - 1) {\n index += 1;\n }\n if (index >= 0 && index < curItems.length) {\n beforeItems = curItems.slice(0, index).toArray();\n afterItems = curItems.slice(index).toArray();\n curItems.set(beforeItems.concat(items, afterItems));\n }\n return self.renderNew();\n },\n fromJSON: function (data) {\n var self = this;\n for (var name in data) {\n self.find('#' + name).value(data[name]);\n }\n return self;\n },\n toJSON: function () {\n var self = this, data = {};\n self.find('*').each(function (ctrl) {\n var name = ctrl.name(), value = ctrl.value();\n if (name && typeof value !== 'undefined') {\n data[name] = value;\n }\n });\n return data;\n },\n renderHtml: function () {\n var self = this, layout = self._layout, role = this.settings.role;\n self.preRender();\n layout.preRender(self);\n return ' ' + '';\n },\n postRender: function () {\n var self = this;\n var box;\n self.items().exec('postRender');\n self._super();\n self._layout.postRender(self);\n self.state.set('rendered', true);\n if (self.settings.style) {\n self.$el.css(self.settings.style);\n }\n if (self.settings.border) {\n box = self.borderBox;\n self.$el.css({\n 'border-top-width': box.top,\n 'border-right-width': box.right,\n 'border-bottom-width': box.bottom,\n 'border-left-width': box.left\n });\n }\n if (!self.parent()) {\n self.keyboardNav = KeyboardNavigation({ root: self });\n }\n return self;\n },\n initLayoutRect: function () {\n var self = this, layoutRect = self._super();\n self._layout.recalc(self);\n return layoutRect;\n },\n recalc: function () {\n var self = this;\n var rect = self._layoutRect;\n var lastRect = self._lastRect;\n if (!lastRect || lastRect.w !== rect.w || lastRect.h !== rect.h) {\n self._layout.recalc(self);\n rect = self.layoutRect();\n self._lastRect = {\n x: rect.x,\n y: rect.y,\n w: rect.w,\n h: rect.h\n };\n return true;\n }\n },\n reflow: function () {\n var i;\n ReflowQueue.remove(this);\n if (this.visible()) {\n Control$1.repaintControls = [];\n Control$1.repaintControls.map = {};\n this.recalc();\n i = Control$1.repaintControls.length;\n while (i--) {\n Control$1.repaintControls[i].repaint();\n }\n if (this.settings.layout !== 'flow' && this.settings.layout !== 'stack') {\n this.repaint();\n }\n Control$1.repaintControls = [];\n }\n return this;\n }\n });\n\n function getDocumentSize(doc) {\n var documentElement, body, scrollWidth, clientWidth;\n var offsetWidth, scrollHeight, clientHeight, offsetHeight;\n var max = Math.max;\n documentElement = doc.documentElement;\n body = doc.body;\n scrollWidth = max(documentElement.scrollWidth, body.scrollWidth);\n clientWidth = max(documentElement.clientWidth, body.clientWidth);\n offsetWidth = max(documentElement.offsetWidth, body.offsetWidth);\n scrollHeight = max(documentElement.scrollHeight, body.scrollHeight);\n clientHeight = max(documentElement.clientHeight, body.clientHeight);\n offsetHeight = max(documentElement.offsetHeight, body.offsetHeight);\n return {\n width: scrollWidth < offsetWidth ? clientWidth : scrollWidth,\n height: scrollHeight < offsetHeight ? clientHeight : scrollHeight\n };\n }\n function updateWithTouchData(e) {\n var keys, i;\n if (e.changedTouches) {\n keys = 'screenX screenY pageX pageY clientX clientY'.split(' ');\n for (i = 0; i < keys.length; i++) {\n e[keys[i]] = e.changedTouches[0][keys[i]];\n }\n }\n }\n function DragHelper (id, settings) {\n var $eventOverlay;\n var doc = settings.document || domGlobals.document;\n var downButton;\n var start, stop, drag, startX, startY;\n settings = settings || {};\n var handleElement = doc.getElementById(settings.handle || id);\n start = function (e) {\n var docSize = getDocumentSize(doc);\n var handleElm, cursor;\n updateWithTouchData(e);\n e.preventDefault();\n downButton = e.button;\n handleElm = handleElement;\n startX = e.screenX;\n startY = e.screenY;\n if (domGlobals.window.getComputedStyle) {\n cursor = domGlobals.window.getComputedStyle(handleElm, null).getPropertyValue('cursor');\n } else {\n cursor = handleElm.runtimeStyle.cursor;\n }\n $eventOverlay = global$9('').css({\n position: 'absolute',\n top: 0,\n left: 0,\n width: docSize.width,\n height: docSize.height,\n zIndex: 2147483647,\n opacity: 0.0001,\n cursor: cursor\n }).appendTo(doc.body);\n global$9(doc).on('mousemove touchmove', drag).on('mouseup touchend', stop);\n settings.start(e);\n };\n drag = function (e) {\n updateWithTouchData(e);\n if (e.button !== downButton) {\n return stop(e);\n }\n e.deltaX = e.screenX - startX;\n e.deltaY = e.screenY - startY;\n e.preventDefault();\n settings.drag(e);\n };\n stop = function (e) {\n updateWithTouchData(e);\n global$9(doc).off('mousemove touchmove', drag).off('mouseup touchend', stop);\n $eventOverlay.remove();\n if (settings.stop) {\n settings.stop(e);\n }\n };\n this.destroy = function () {\n global$9(handleElement).off();\n };\n global$9(handleElement).on('mousedown touchstart', start);\n }\n\n var Scrollable = {\n init: function () {\n var self = this;\n self.on('repaint', self.renderScroll);\n },\n renderScroll: function () {\n var self = this, margin = 2;\n function repaintScroll() {\n var hasScrollH, hasScrollV, bodyElm;\n function repaintAxis(axisName, posName, sizeName, contentSizeName, hasScroll, ax) {\n var containerElm, scrollBarElm, scrollThumbElm;\n var containerSize, scrollSize, ratio, rect;\n var posNameLower, sizeNameLower;\n scrollBarElm = self.getEl('scroll' + axisName);\n if (scrollBarElm) {\n posNameLower = posName.toLowerCase();\n sizeNameLower = sizeName.toLowerCase();\n global$9(self.getEl('absend')).css(posNameLower, self.layoutRect()[contentSizeName] - 1);\n if (!hasScroll) {\n global$9(scrollBarElm).css('display', 'none');\n return;\n }\n global$9(scrollBarElm).css('display', 'block');\n containerElm = self.getEl('body');\n scrollThumbElm = self.getEl('scroll' + axisName + 't');\n containerSize = containerElm['client' + sizeName] - margin * 2;\n containerSize -= hasScrollH && hasScrollV ? scrollBarElm['client' + ax] : 0;\n scrollSize = containerElm['scroll' + sizeName];\n ratio = containerSize / scrollSize;\n rect = {};\n rect[posNameLower] = containerElm['offset' + posName] + margin;\n rect[sizeNameLower] = containerSize;\n global$9(scrollBarElm).css(rect);\n rect = {};\n rect[posNameLower] = containerElm['scroll' + posName] * ratio;\n rect[sizeNameLower] = containerSize * ratio;\n global$9(scrollThumbElm).css(rect);\n }\n }\n bodyElm = self.getEl('body');\n hasScrollH = bodyElm.scrollWidth > bodyElm.clientWidth;\n hasScrollV = bodyElm.scrollHeight > bodyElm.clientHeight;\n repaintAxis('h', 'Left', 'Width', 'contentW', hasScrollH, 'Height');\n repaintAxis('v', 'Top', 'Height', 'contentH', hasScrollV, 'Width');\n }\n function addScroll() {\n function addScrollAxis(axisName, posName, sizeName, deltaPosName, ax) {\n var scrollStart;\n var axisId = self._id + '-scroll' + axisName, prefix = self.classPrefix;\n global$9(self.getEl()).append('' + (self.settings.html || '') + layout.renderHtml(self) + '' + '' + '' + '');\n self.draghelper = new DragHelper(axisId + 't', {\n start: function () {\n scrollStart = self.getEl('body')['scroll' + posName];\n global$9('#' + axisId).addClass(prefix + 'active');\n },\n drag: function (e) {\n var ratio, hasScrollH, hasScrollV, containerSize;\n var layoutRect = self.layoutRect();\n hasScrollH = layoutRect.contentW > layoutRect.innerW;\n hasScrollV = layoutRect.contentH > layoutRect.innerH;\n containerSize = self.getEl('body')['client' + sizeName] - margin * 2;\n containerSize -= hasScrollH && hasScrollV ? self.getEl('scroll' + axisName)['client' + ax] : 0;\n ratio = containerSize / self.getEl('body')['scroll' + sizeName];\n self.getEl('body')['scroll' + posName] = scrollStart + e['delta' + deltaPosName] / ratio;\n },\n stop: function () {\n global$9('#' + axisId).removeClass(prefix + 'active');\n }\n });\n }\n self.classes.add('scroll');\n addScrollAxis('v', 'Top', 'Height', 'Y', 'Width');\n addScrollAxis('h', 'Left', 'Width', 'X', 'Height');\n }\n if (self.settings.autoScroll) {\n if (!self._hasScroll) {\n self._hasScroll = true;\n addScroll();\n self.on('wheel', function (e) {\n var bodyEl = self.getEl('body');\n bodyEl.scrollLeft += (e.deltaX || 0) * 10;\n bodyEl.scrollTop += e.deltaY * 10;\n repaintScroll();\n });\n global$9(self.getEl('body')).on('scroll', repaintScroll);\n }\n repaintScroll();\n }\n }\n };\n\n var Panel = Container.extend({\n Defaults: {\n layout: 'fit',\n containerCls: 'panel'\n },\n Mixins: [Scrollable],\n renderHtml: function () {\n var self = this;\n var layout = self._layout;\n var innerHtml = self.settings.html;\n self.preRender();\n layout.preRender(self);\n if (typeof innerHtml === 'undefined') {\n innerHtml = '' + layout.renderHtml(self) + '';\n } else {\n if (typeof innerHtml === 'function') {\n innerHtml = innerHtml.call(self);\n }\n self._hasBody = false;\n }\n return '' + (self._preBodyHtml || '') + innerHtml + '';\n }\n });\n\n var Resizable = {\n resizeToContent: function () {\n this._layoutRect.autoResize = true;\n this._lastRect = null;\n this.reflow();\n },\n resizeTo: function (w, h) {\n if (w <= 1 || h <= 1) {\n var rect = funcs.getWindowSize();\n w = w <= 1 ? w * rect.w : w;\n h = h <= 1 ? h * rect.h : h;\n }\n this._layoutRect.autoResize = false;\n return this.layoutRect({\n minW: w,\n minH: h,\n w: w,\n h: h\n }).reflow();\n },\n resizeBy: function (dw, dh) {\n var self = this, rect = self.layoutRect();\n return self.resizeTo(rect.w + dw, rect.h + dh);\n }\n };\n\n var documentClickHandler, documentScrollHandler, windowResizeHandler;\n var visiblePanels = [];\n var zOrder = [];\n var hasModal;\n function isChildOf(ctrl, parent) {\n while (ctrl) {\n if (ctrl === parent) {\n return true;\n }\n ctrl = ctrl.parent();\n }\n }\n function skipOrHidePanels(e) {\n var i = visiblePanels.length;\n while (i--) {\n var panel = visiblePanels[i], clickCtrl = panel.getParentCtrl(e.target);\n if (panel.settings.autohide) {\n if (clickCtrl) {\n if (isChildOf(clickCtrl, panel) || panel.parent() === clickCtrl) {\n continue;\n }\n }\n e = panel.fire('autohide', { target: e.target });\n if (!e.isDefaultPrevented()) {\n panel.hide();\n }\n }\n }\n }\n function bindDocumentClickHandler() {\n if (!documentClickHandler) {\n documentClickHandler = function (e) {\n if (e.button === 2) {\n return;\n }\n skipOrHidePanels(e);\n };\n global$9(domGlobals.document).on('click touchstart', documentClickHandler);\n }\n }\n function bindDocumentScrollHandler() {\n if (!documentScrollHandler) {\n documentScrollHandler = function () {\n var i;\n i = visiblePanels.length;\n while (i--) {\n repositionPanel(visiblePanels[i]);\n }\n };\n global$9(domGlobals.window).on('scroll', documentScrollHandler);\n }\n }\n function bindWindowResizeHandler() {\n if (!windowResizeHandler) {\n var docElm_1 = domGlobals.document.documentElement;\n var clientWidth_1 = docElm_1.clientWidth, clientHeight_1 = docElm_1.clientHeight;\n windowResizeHandler = function () {\n if (!domGlobals.document.all || clientWidth_1 !== docElm_1.clientWidth || clientHeight_1 !== docElm_1.clientHeight) {\n clientWidth_1 = docElm_1.clientWidth;\n clientHeight_1 = docElm_1.clientHeight;\n FloatPanel.hideAll();\n }\n };\n global$9(domGlobals.window).on('resize', windowResizeHandler);\n }\n }\n function repositionPanel(panel) {\n var scrollY = funcs.getViewPort().y;\n function toggleFixedChildPanels(fixed, deltaY) {\n var parent;\n for (var i = 0; i < visiblePanels.length; i++) {\n if (visiblePanels[i] !== panel) {\n parent = visiblePanels[i].parent();\n while (parent && (parent = parent.parent())) {\n if (parent === panel) {\n visiblePanels[i].fixed(fixed).moveBy(0, deltaY).repaint();\n }\n }\n }\n }\n }\n if (panel.settings.autofix) {\n if (!panel.state.get('fixed')) {\n panel._autoFixY = panel.layoutRect().y;\n if (panel._autoFixY < scrollY) {\n panel.fixed(true).layoutRect({ y: 0 }).repaint();\n toggleFixedChildPanels(true, scrollY - panel._autoFixY);\n }\n } else {\n if (panel._autoFixY > scrollY) {\n panel.fixed(false).layoutRect({ y: panel._autoFixY }).repaint();\n toggleFixedChildPanels(false, panel._autoFixY - scrollY);\n }\n }\n }\n }\n function addRemove(add, ctrl) {\n var i, zIndex = FloatPanel.zIndex || 65535, topModal;\n if (add) {\n zOrder.push(ctrl);\n } else {\n i = zOrder.length;\n while (i--) {\n if (zOrder[i] === ctrl) {\n zOrder.splice(i, 1);\n }\n }\n }\n if (zOrder.length) {\n for (i = 0; i < zOrder.length; i++) {\n if (zOrder[i].modal) {\n zIndex++;\n topModal = zOrder[i];\n }\n zOrder[i].getEl().style.zIndex = zIndex;\n zOrder[i].zIndex = zIndex;\n zIndex++;\n }\n }\n var modalBlockEl = global$9('#' + ctrl.classPrefix + 'modal-block', ctrl.getContainerElm())[0];\n if (topModal) {\n global$9(modalBlockEl).css('z-index', topModal.zIndex - 1);\n } else if (modalBlockEl) {\n modalBlockEl.parentNode.removeChild(modalBlockEl);\n hasModal = false;\n }\n FloatPanel.currentZIndex = zIndex;\n }\n var FloatPanel = Panel.extend({\n Mixins: [\n Movable,\n Resizable\n ],\n init: function (settings) {\n var self = this;\n self._super(settings);\n self._eventsRoot = self;\n self.classes.add('floatpanel');\n if (settings.autohide) {\n bindDocumentClickHandler();\n bindWindowResizeHandler();\n visiblePanels.push(self);\n }\n if (settings.autofix) {\n bindDocumentScrollHandler();\n self.on('move', function () {\n repositionPanel(this);\n });\n }\n self.on('postrender show', function (e) {\n if (e.control === self) {\n var $modalBlockEl_1;\n var prefix_1 = self.classPrefix;\n if (self.modal && !hasModal) {\n $modalBlockEl_1 = global$9('#' + prefix_1 + 'modal-block', self.getContainerElm());\n if (!$modalBlockEl_1[0]) {\n $modalBlockEl_1 = global$9('').appendTo(self.getContainerElm());\n }\n global$7.setTimeout(function () {\n $modalBlockEl_1.addClass(prefix_1 + 'in');\n global$9(self.getEl()).addClass(prefix_1 + 'in');\n });\n hasModal = true;\n }\n addRemove(true, self);\n }\n });\n self.on('show', function () {\n self.parents().each(function (ctrl) {\n if (ctrl.state.get('fixed')) {\n self.fixed(true);\n return false;\n }\n });\n });\n if (settings.popover) {\n self._preBodyHtml = '';\n self.classes.add('popover').add('bottom').add(self.isRtl() ? 'end' : 'start');\n }\n self.aria('label', settings.ariaLabel);\n self.aria('labelledby', self._id);\n self.aria('describedby', self.describedBy || self._id + '-none');\n },\n fixed: function (state) {\n var self = this;\n if (self.state.get('fixed') !== state) {\n if (self.state.get('rendered')) {\n var viewport = funcs.getViewPort();\n if (state) {\n self.layoutRect().y -= viewport.y;\n } else {\n self.layoutRect().y += viewport.y;\n }\n }\n self.classes.toggle('fixed', state);\n self.state.set('fixed', state);\n }\n return self;\n },\n show: function () {\n var self = this;\n var i;\n var state = self._super();\n i = visiblePanels.length;\n while (i--) {\n if (visiblePanels[i] === self) {\n break;\n }\n }\n if (i === -1) {\n visiblePanels.push(self);\n }\n return state;\n },\n hide: function () {\n removeVisiblePanel(this);\n addRemove(false, this);\n return this._super();\n },\n hideAll: function () {\n FloatPanel.hideAll();\n },\n close: function () {\n var self = this;\n if (!self.fire('close').isDefaultPrevented()) {\n self.remove();\n addRemove(false, self);\n }\n return self;\n },\n remove: function () {\n removeVisiblePanel(this);\n this._super();\n },\n postRender: function () {\n var self = this;\n if (self.settings.bodyRole) {\n this.getEl('body').setAttribute('role', self.settings.bodyRole);\n }\n return self._super();\n }\n });\n FloatPanel.hideAll = function () {\n var i = visiblePanels.length;\n while (i--) {\n var panel = visiblePanels[i];\n if (panel && panel.settings.autohide) {\n panel.hide();\n visiblePanels.splice(i, 1);\n }\n }\n };\n function removeVisiblePanel(panel) {\n var i;\n i = visiblePanels.length;\n while (i--) {\n if (visiblePanels[i] === panel) {\n visiblePanels.splice(i, 1);\n }\n }\n i = zOrder.length;\n while (i--) {\n if (zOrder[i] === panel) {\n zOrder.splice(i, 1);\n }\n }\n }\n\n var isFixed$1 = function (inlineToolbarContainer, editor) {\n return !!(inlineToolbarContainer && !editor.settings.ui_container);\n };\n var render$1 = function (editor, theme, args) {\n var panel, inlineToolbarContainer;\n var DOM = global$3.DOM;\n var fixedToolbarContainer = getFixedToolbarContainer(editor);\n if (fixedToolbarContainer) {\n inlineToolbarContainer = DOM.select(fixedToolbarContainer)[0];\n }\n var reposition = function () {\n if (panel && panel.moveRel && panel.visible() && !panel._fixed) {\n var scrollContainer = editor.selection.getScrollContainer(), body = editor.getBody();\n var deltaX = 0, deltaY = 0;\n if (scrollContainer) {\n var bodyPos = DOM.getPos(body), scrollContainerPos = DOM.getPos(scrollContainer);\n deltaX = Math.max(0, scrollContainerPos.x - bodyPos.x);\n deltaY = Math.max(0, scrollContainerPos.y - bodyPos.y);\n }\n panel.fixed(false).moveRel(body, editor.rtl ? [\n 'tr-br',\n 'br-tr'\n ] : [\n 'tl-bl',\n 'bl-tl',\n 'tr-br'\n ]).moveBy(deltaX, deltaY);\n }\n };\n var show = function () {\n if (panel) {\n panel.show();\n reposition();\n DOM.addClass(editor.getBody(), 'mce-edit-focus');\n }\n };\n var hide = function () {\n if (panel) {\n panel.hide();\n FloatPanel.hideAll();\n DOM.removeClass(editor.getBody(), 'mce-edit-focus');\n }\n };\n var render = function () {\n if (panel) {\n if (!panel.visible()) {\n show();\n }\n return;\n }\n panel = theme.panel = global$4.create({\n type: inlineToolbarContainer ? 'panel' : 'floatpanel',\n role: 'application',\n classes: 'tinymce tinymce-inline',\n layout: 'flex',\n direction: 'column',\n align: 'stretch',\n autohide: false,\n autofix: true,\n fixed: isFixed$1(inlineToolbarContainer, editor),\n border: 1,\n items: [\n hasMenubar(editor) === false ? null : {\n type: 'menubar',\n border: '0 0 1 0',\n items: Menubar.createMenuButtons(editor)\n },\n Toolbar.createToolbars(editor, getToolbarSize(editor))\n ]\n });\n UiContainer.setUiContainer(editor, panel);\n Events.fireBeforeRenderUI(editor);\n if (inlineToolbarContainer) {\n panel.renderTo(inlineToolbarContainer).reflow();\n } else {\n panel.renderTo().reflow();\n }\n A11y.addKeys(editor, panel);\n show();\n ContextToolbars.addContextualToolbars(editor);\n editor.on('nodeChange', reposition);\n editor.on('ResizeWindow', reposition);\n editor.on('activate', show);\n editor.on('deactivate', hide);\n editor.nodeChanged();\n };\n editor.settings.content_editable = true;\n editor.on('focus', function () {\n if (isSkinDisabled(editor) === false && args.skinUiCss) {\n DOM.styleSheetLoader.load(args.skinUiCss, render, render);\n } else {\n render();\n }\n });\n editor.on('blur hide', hide);\n editor.on('remove', function () {\n if (panel) {\n panel.remove();\n panel = null;\n }\n });\n if (isSkinDisabled(editor) === false && args.skinUiCss) {\n DOM.styleSheetLoader.load(args.skinUiCss, SkinLoaded.fireSkinLoaded(editor));\n } else {\n SkinLoaded.fireSkinLoaded(editor)();\n }\n return {};\n };\n var Inline = { render: render$1 };\n\n function Throbber (elm, inline) {\n var self = this;\n var state;\n var classPrefix = Control$1.classPrefix;\n var timer;\n self.show = function (time, callback) {\n function render() {\n if (state) {\n global$9(elm).append('');\n if (callback) {\n callback();\n }\n }\n }\n self.hide();\n state = true;\n if (time) {\n timer = global$7.setTimeout(render, time);\n } else {\n render();\n }\n return self;\n };\n self.hide = function () {\n var child = elm.lastChild;\n global$7.clearTimeout(timer);\n if (child && child.className.indexOf('throbber') !== -1) {\n child.parentNode.removeChild(child);\n }\n state = false;\n return self;\n };\n }\n\n var setup = function (editor, theme) {\n var throbber;\n editor.on('ProgressState', function (e) {\n throbber = throbber || new Throbber(theme.panel.getEl('body'));\n if (e.state) {\n throbber.show(e.time);\n } else {\n throbber.hide();\n }\n });\n };\n var ProgressState = { setup: setup };\n\n var renderUI = function (editor, theme, args) {\n var skinUrl = getSkinUrl(editor);\n if (skinUrl) {\n args.skinUiCss = skinUrl + '/skin.min.css';\n editor.contentCSS.push(skinUrl + '/content' + (editor.inline ? '.inline' : '') + '.min.css');\n }\n ProgressState.setup(editor, theme);\n return isInline(editor) ? Inline.render(editor, theme, args) : Iframe.render(editor, theme, args);\n };\n var Render = { renderUI: renderUI };\n\n var Tooltip = Control$1.extend({\n Mixins: [Movable],\n Defaults: { classes: 'widget tooltip tooltip-n' },\n renderHtml: function () {\n var self = this, prefix = self.classPrefix;\n return '' + '' + '';\n },\n bindStates: function () {\n var self = this;\n self.state.on('change:text', function (e) {\n self.getEl().lastChild.innerHTML = self.encode(e.value);\n });\n return self._super();\n },\n repaint: function () {\n var self = this;\n var style, rect;\n style = self.getEl().style;\n rect = self._layoutRect;\n style.left = rect.x + 'px';\n style.top = rect.y + 'px';\n style.zIndex = 65535 + 65535;\n }\n });\n\n var Widget = Control$1.extend({\n init: function (settings) {\n var self = this;\n self._super(settings);\n settings = self.settings;\n self.canFocus = true;\n if (settings.tooltip && Widget.tooltips !== false) {\n self.on('mouseenter', function (e) {\n var tooltip = self.tooltip().moveTo(-65535);\n if (e.control === self) {\n var rel = tooltip.text(settings.tooltip).show().testMoveRel(self.getEl(), [\n 'bc-tc',\n 'bc-tl',\n 'bc-tr'\n ]);\n tooltip.classes.toggle('tooltip-n', rel === 'bc-tc');\n tooltip.classes.toggle('tooltip-nw', rel === 'bc-tl');\n tooltip.classes.toggle('tooltip-ne', rel === 'bc-tr');\n tooltip.moveRel(self.getEl(), rel);\n } else {\n tooltip.hide();\n }\n });\n self.on('mouseleave mousedown click', function () {\n self.tooltip().remove();\n self._tooltip = null;\n });\n }\n self.aria('label', settings.ariaLabel || settings.tooltip);\n },\n tooltip: function () {\n if (!this._tooltip) {\n this._tooltip = new Tooltip({ type: 'tooltip' });\n UiContainer.inheritUiContainer(this, this._tooltip);\n this._tooltip.renderTo();\n }\n return this._tooltip;\n },\n postRender: function () {\n var self = this, settings = self.settings;\n self._super();\n if (!self.parent() && (settings.width || settings.height)) {\n self.initLayoutRect();\n self.repaint();\n }\n if (settings.autofocus) {\n self.focus();\n }\n },\n bindStates: function () {\n var self = this;\n function disable(state) {\n self.aria('disabled', state);\n self.classes.toggle('disabled', state);\n }\n function active(state) {\n self.aria('pressed', state);\n self.classes.toggle('active', state);\n }\n self.state.on('change:disabled', function (e) {\n disable(e.value);\n });\n self.state.on('change:active', function (e) {\n active(e.value);\n });\n if (self.state.get('disabled')) {\n disable(true);\n }\n if (self.state.get('active')) {\n active(true);\n }\n return self._super();\n },\n remove: function () {\n this._super();\n if (this._tooltip) {\n this._tooltip.remove();\n this._tooltip = null;\n }\n }\n });\n\n var Progress = Widget.extend({\n Defaults: { value: 0 },\n init: function (settings) {\n var self = this;\n self._super(settings);\n self.classes.add('progress');\n if (!self.settings.filter) {\n self.settings.filter = function (value) {\n return Math.round(value);\n };\n }\n },\n renderHtml: function () {\n var self = this, id = self._id, prefix = this.classPrefix;\n return '' + self.encode(self.state.get('text')) + '' + '' + '';\n },\n postRender: function () {\n var self = this;\n self._super();\n self.value(self.settings.value);\n return self;\n },\n bindStates: function () {\n var self = this;\n function setValue(value) {\n value = self.settings.filter(value);\n self.getEl().lastChild.innerHTML = value + '%';\n self.getEl().firstChild.firstChild.style.width = value + '%';\n }\n self.state.on('change:value', function (e) {\n setValue(e.value);\n });\n setValue(self.state.get('value'));\n return self._super();\n }\n });\n\n var updateLiveRegion = function (ctx, text) {\n ctx.getEl().lastChild.textContent = text + (ctx.progressBar ? ' ' + ctx.progressBar.value() + '%' : '');\n };\n var Notification = Control$1.extend({\n Mixins: [Movable],\n Defaults: { classes: 'widget notification' },\n init: function (settings) {\n var self = this;\n self._super(settings);\n self.maxWidth = settings.maxWidth;\n if (settings.text) {\n self.text(settings.text);\n }\n if (settings.icon) {\n self.icon = settings.icon;\n }\n if (settings.color) {\n self.color = settings.color;\n }\n if (settings.type) {\n self.classes.add('notification-' + settings.type);\n }\n if (settings.timeout && (settings.timeout < 0 || settings.timeout > 0) && !settings.closeButton) {\n self.closeButton = false;\n } else {\n self.classes.add('has-close');\n self.closeButton = true;\n }\n if (settings.progressBar) {\n self.progressBar = new Progress();\n }\n self.on('click', function (e) {\n if (e.target.className.indexOf(self.classPrefix + 'close') !== -1) {\n self.close();\n }\n });\n },\n renderHtml: function () {\n var self = this;\n var prefix = self.classPrefix;\n var icon = '', closeButton = '', progressBar = '', notificationStyle = '';\n if (self.icon) {\n icon = '';\n }\n notificationStyle = ' style=\"max-width: ' + self.maxWidth + 'px;' + (self.color ? 'background-color: ' + self.color + ';\"' : '\"');\n if (self.closeButton) {\n closeButton = '';\n }\n if (self.progressBar) {\n progressBar = self.progressBar.renderHtml();\n }\n return '' + '' + '' + '0%' + '' + icon + '';\n },\n postRender: function () {\n var self = this;\n global$7.setTimeout(function () {\n self.$el.addClass(self.classPrefix + 'in');\n updateLiveRegion(self, self.state.get('text'));\n }, 100);\n return self._super();\n },\n bindStates: function () {\n var self = this;\n self.state.on('change:text', function (e) {\n self.getEl().firstChild.innerHTML = e.value;\n updateLiveRegion(self, e.value);\n });\n if (self.progressBar) {\n self.progressBar.bindStates();\n self.progressBar.state.on('change:value', function (e) {\n updateLiveRegion(self, self.state.get('text'));\n });\n }\n return self._super();\n },\n close: function () {\n var self = this;\n if (!self.fire('close').isDefaultPrevented()) {\n self.remove();\n }\n return self;\n },\n repaint: function () {\n var self = this;\n var style, rect;\n style = self.getEl().style;\n rect = self._layoutRect;\n style.left = rect.x + 'px';\n style.top = rect.y + 'px';\n style.zIndex = 65535 - 1;\n }\n });\n\n function NotificationManagerImpl (editor) {\n var getEditorContainer = function (editor) {\n return editor.inline ? editor.getElement() : editor.getContentAreaContainer();\n };\n var getContainerWidth = function () {\n var container = getEditorContainer(editor);\n return funcs.getSize(container).width;\n };\n var prePositionNotifications = function (notifications) {\n each(notifications, function (notification) {\n notification.moveTo(0, 0);\n });\n };\n var positionNotifications = function (notifications) {\n if (notifications.length > 0) {\n var firstItem = notifications.slice(0, 1)[0];\n var container = getEditorContainer(editor);\n firstItem.moveRel(container, 'tc-tc');\n each(notifications, function (notification, index) {\n if (index > 0) {\n notification.moveRel(notifications[index - 1].getEl(), 'bc-tc');\n }\n });\n }\n };\n var reposition = function (notifications) {\n prePositionNotifications(notifications);\n positionNotifications(notifications);\n };\n var open = function (args, closeCallback) {\n var extendedArgs = global$2.extend(args, { maxWidth: getContainerWidth() });\n var notif = new Notification(extendedArgs);\n notif.args = extendedArgs;\n if (extendedArgs.timeout > 0) {\n notif.timer = setTimeout(function () {\n notif.close();\n closeCallback();\n }, extendedArgs.timeout);\n }\n notif.on('close', function () {\n closeCallback();\n });\n notif.renderTo();\n return notif;\n };\n var close = function (notification) {\n notification.close();\n };\n var getArgs = function (notification) {\n return notification.args;\n };\n return {\n open: open,\n close: close,\n reposition: reposition,\n getArgs: getArgs\n };\n }\n\n var windows = [];\n var oldMetaValue = '';\n function toggleFullScreenState(state) {\n var noScaleMetaValue = 'width=device-width,initial-scale=1.0,user-scalable=0,minimum-scale=1.0,maximum-scale=1.0';\n var viewport = global$9('meta[name=viewport]')[0], contentValue;\n if (global$8.overrideViewPort === false) {\n return;\n }\n if (!viewport) {\n viewport = domGlobals.document.createElement('meta');\n viewport.setAttribute('name', 'viewport');\n domGlobals.document.getElementsByTagName('head')[0].appendChild(viewport);\n }\n contentValue = viewport.getAttribute('content');\n if (contentValue && typeof oldMetaValue !== 'undefined') {\n oldMetaValue = contentValue;\n }\n viewport.setAttribute('content', state ? noScaleMetaValue : oldMetaValue);\n }\n function toggleBodyFullScreenClasses(classPrefix, state) {\n if (checkFullscreenWindows() && state === false) {\n global$9([\n domGlobals.document.documentElement,\n domGlobals.document.body\n ]).removeClass(classPrefix + 'fullscreen');\n }\n }\n function checkFullscreenWindows() {\n for (var i = 0; i < windows.length; i++) {\n if (windows[i]._fullscreen) {\n return true;\n }\n }\n return false;\n }\n function handleWindowResize() {\n if (!global$8.desktop) {\n var lastSize_1 = {\n w: domGlobals.window.innerWidth,\n h: domGlobals.window.innerHeight\n };\n global$7.setInterval(function () {\n var w = domGlobals.window.innerWidth, h = domGlobals.window.innerHeight;\n if (lastSize_1.w !== w || lastSize_1.h !== h) {\n lastSize_1 = {\n w: w,\n h: h\n };\n global$9(domGlobals.window).trigger('resize');\n }\n }, 100);\n }\n function reposition() {\n var i;\n var rect = funcs.getWindowSize();\n var layoutRect;\n for (i = 0; i < windows.length; i++) {\n layoutRect = windows[i].layoutRect();\n windows[i].moveTo(windows[i].settings.x || Math.max(0, rect.w / 2 - layoutRect.w / 2), windows[i].settings.y || Math.max(0, rect.h / 2 - layoutRect.h / 2));\n }\n }\n global$9(domGlobals.window).on('resize', reposition);\n }\n var Window = FloatPanel.extend({\n modal: true,\n Defaults: {\n border: 1,\n layout: 'flex',\n containerCls: 'panel',\n role: 'dialog',\n callbacks: {\n submit: function () {\n this.fire('submit', { data: this.toJSON() });\n },\n close: function () {\n this.close();\n }\n }\n },\n init: function (settings) {\n var self = this;\n self._super(settings);\n if (self.isRtl()) {\n self.classes.add('rtl');\n }\n self.classes.add('window');\n self.bodyClasses.add('window-body');\n self.state.set('fixed', true);\n if (settings.buttons) {\n self.statusbar = new Panel({\n layout: 'flex',\n border: '1 0 0 0',\n spacing: 3,\n padding: 10,\n align: 'center',\n pack: self.isRtl() ? 'start' : 'end',\n defaults: { type: 'button' },\n items: settings.buttons\n });\n self.statusbar.classes.add('foot');\n self.statusbar.parent(self);\n }\n self.on('click', function (e) {\n var closeClass = self.classPrefix + 'close';\n if (funcs.hasClass(e.target, closeClass) || funcs.hasClass(e.target.parentNode, closeClass)) {\n self.close();\n }\n });\n self.on('cancel', function () {\n self.close();\n });\n self.on('move', function (e) {\n if (e.control === self) {\n FloatPanel.hideAll();\n }\n });\n self.aria('describedby', self.describedBy || self._id + '-none');\n self.aria('label', settings.title);\n self._fullscreen = false;\n },\n recalc: function () {\n var self = this;\n var statusbar = self.statusbar;\n var layoutRect, width, x, needsRecalc;\n if (self._fullscreen) {\n self.layoutRect(funcs.getWindowSize());\n self.layoutRect().contentH = self.layoutRect().innerH;\n }\n self._super();\n layoutRect = self.layoutRect();\n if (self.settings.title && !self._fullscreen) {\n width = layoutRect.headerW;\n if (width > layoutRect.w) {\n x = layoutRect.x - Math.max(0, width / 2);\n self.layoutRect({\n w: width,\n x: x\n });\n needsRecalc = true;\n }\n }\n if (statusbar) {\n statusbar.layoutRect({ w: self.layoutRect().innerW }).recalc();\n width = statusbar.layoutRect().minW + layoutRect.deltaW;\n if (width > layoutRect.w) {\n x = layoutRect.x - Math.max(0, width - layoutRect.w);\n self.layoutRect({\n w: width,\n x: x\n });\n needsRecalc = true;\n }\n }\n if (needsRecalc) {\n self.recalc();\n }\n },\n initLayoutRect: function () {\n var self = this;\n var layoutRect = self._super();\n var deltaH = 0, headEl;\n if (self.settings.title && !self._fullscreen) {\n headEl = self.getEl('head');\n var size = funcs.getSize(headEl);\n layoutRect.headerW = size.width;\n layoutRect.headerH = size.height;\n deltaH += layoutRect.headerH;\n }\n if (self.statusbar) {\n deltaH += self.statusbar.layoutRect().h;\n }\n layoutRect.deltaH += deltaH;\n layoutRect.minH += deltaH;\n layoutRect.h += deltaH;\n var rect = funcs.getWindowSize();\n layoutRect.x = self.settings.x || Math.max(0, rect.w / 2 - layoutRect.w / 2);\n layoutRect.y = self.settings.y || Math.max(0, rect.h / 2 - layoutRect.h / 2);\n return layoutRect;\n },\n renderHtml: function () {\n var self = this, layout = self._layout, id = self._id, prefix = self.classPrefix;\n var settings = self.settings;\n var headerHtml = '', footerHtml = '', html = settings.html;\n self.preRender();\n layout.preRender(self);\n if (settings.title) {\n headerHtml = '' + self.state.get('text') + '' + progressBar + closeButton + '' + '' + '';\n }\n if (settings.url) {\n html = '';\n }\n if (typeof html === 'undefined') {\n html = layout.renderHtml(self);\n }\n if (self.statusbar) {\n footerHtml = self.statusbar.renderHtml();\n }\n return '' + self.encode(settings.title) + '' + '' + '' + '' + '';\n },\n fullscreen: function (state) {\n var self = this;\n var documentElement = domGlobals.document.documentElement;\n var slowRendering;\n var prefix = self.classPrefix;\n var layoutRect;\n if (state !== self._fullscreen) {\n global$9(domGlobals.window).on('resize', function () {\n var time;\n if (self._fullscreen) {\n if (!slowRendering) {\n time = new Date().getTime();\n var rect = funcs.getWindowSize();\n self.moveTo(0, 0).resizeTo(rect.w, rect.h);\n if (new Date().getTime() - time > 50) {\n slowRendering = true;\n }\n } else {\n if (!self._timer) {\n self._timer = global$7.setTimeout(function () {\n var rect = funcs.getWindowSize();\n self.moveTo(0, 0).resizeTo(rect.w, rect.h);\n self._timer = 0;\n }, 50);\n }\n }\n }\n });\n layoutRect = self.layoutRect();\n self._fullscreen = state;\n if (!state) {\n self.borderBox = BoxUtils.parseBox(self.settings.border);\n self.getEl('head').style.display = '';\n layoutRect.deltaH += layoutRect.headerH;\n global$9([\n documentElement,\n domGlobals.document.body\n ]).removeClass(prefix + 'fullscreen');\n self.classes.remove('fullscreen');\n self.moveTo(self._initial.x, self._initial.y).resizeTo(self._initial.w, self._initial.h);\n } else {\n self._initial = {\n x: layoutRect.x,\n y: layoutRect.y,\n w: layoutRect.w,\n h: layoutRect.h\n };\n self.borderBox = BoxUtils.parseBox('0');\n self.getEl('head').style.display = 'none';\n layoutRect.deltaH -= layoutRect.headerH + 2;\n global$9([\n documentElement,\n domGlobals.document.body\n ]).addClass(prefix + 'fullscreen');\n self.classes.add('fullscreen');\n var rect = funcs.getWindowSize();\n self.moveTo(0, 0).resizeTo(rect.w, rect.h);\n }\n }\n return self.reflow();\n },\n postRender: function () {\n var self = this;\n var startPos;\n setTimeout(function () {\n self.classes.add('in');\n self.fire('open');\n }, 0);\n self._super();\n if (self.statusbar) {\n self.statusbar.postRender();\n }\n self.focus();\n this.dragHelper = new DragHelper(self._id + '-dragh', {\n start: function () {\n startPos = {\n x: self.layoutRect().x,\n y: self.layoutRect().y\n };\n },\n drag: function (e) {\n self.moveTo(startPos.x + e.deltaX, startPos.y + e.deltaY);\n }\n });\n self.on('submit', function (e) {\n if (!e.isDefaultPrevented()) {\n self.close();\n }\n });\n windows.push(self);\n toggleFullScreenState(true);\n },\n submit: function () {\n return this.fire('submit', { data: this.toJSON() });\n },\n remove: function () {\n var self = this;\n var i;\n self.dragHelper.destroy();\n self._super();\n if (self.statusbar) {\n this.statusbar.remove();\n }\n toggleBodyFullScreenClasses(self.classPrefix, false);\n i = windows.length;\n while (i--) {\n if (windows[i] === self) {\n windows.splice(i, 1);\n }\n }\n toggleFullScreenState(windows.length > 0);\n },\n getContentWindow: function () {\n var ifr = this.getEl().getElementsByTagName('iframe')[0];\n return ifr ? ifr.contentWindow : null;\n }\n });\n handleWindowResize();\n\n var MessageBox = Window.extend({\n init: function (settings) {\n settings = {\n border: 1,\n padding: 20,\n layout: 'flex',\n pack: 'center',\n align: 'center',\n containerCls: 'panel',\n autoScroll: true,\n buttons: {\n type: 'button',\n text: 'Ok',\n action: 'ok'\n },\n items: {\n type: 'label',\n multiline: true,\n maxWidth: 500,\n maxHeight: 200\n }\n };\n this._super(settings);\n },\n Statics: {\n OK: 1,\n OK_CANCEL: 2,\n YES_NO: 3,\n YES_NO_CANCEL: 4,\n msgBox: function (settings) {\n var buttons;\n var callback = settings.callback || function () {\n };\n function createButton(text, status, primary) {\n return {\n type: 'button',\n text: text,\n subtype: primary ? 'primary' : '',\n onClick: function (e) {\n e.control.parents()[1].close();\n callback(status);\n }\n };\n }\n switch (settings.buttons) {\n case MessageBox.OK_CANCEL:\n buttons = [\n createButton('Ok', true, true),\n createButton('Cancel', false)\n ];\n break;\n case MessageBox.YES_NO:\n case MessageBox.YES_NO_CANCEL:\n buttons = [\n createButton('Yes', 1, true),\n createButton('No', 0)\n ];\n if (settings.buttons === MessageBox.YES_NO_CANCEL) {\n buttons.push(createButton('Cancel', -1));\n }\n break;\n default:\n buttons = [createButton('Ok', true, true)];\n break;\n }\n return new Window({\n padding: 20,\n x: settings.x,\n y: settings.y,\n minWidth: 300,\n minHeight: 100,\n layout: 'flex',\n pack: 'center',\n align: 'center',\n buttons: buttons,\n title: settings.title,\n role: 'alertdialog',\n items: {\n type: 'label',\n multiline: true,\n maxWidth: 500,\n maxHeight: 200,\n text: settings.text\n },\n onPostRender: function () {\n this.aria('describedby', this.items()[0]._id);\n },\n onClose: settings.onClose,\n onCancel: function () {\n callback(false);\n }\n }).renderTo(domGlobals.document.body).reflow();\n },\n alert: function (settings, callback) {\n if (typeof settings === 'string') {\n settings = { text: settings };\n }\n settings.callback = callback;\n return MessageBox.msgBox(settings);\n },\n confirm: function (settings, callback) {\n if (typeof settings === 'string') {\n settings = { text: settings };\n }\n settings.callback = callback;\n settings.buttons = MessageBox.OK_CANCEL;\n return MessageBox.msgBox(settings);\n }\n }\n });\n\n function WindowManagerImpl (editor) {\n var open = function (args, params, closeCallback) {\n var win;\n args.title = args.title || ' ';\n args.url = args.url || args.file;\n if (args.url) {\n args.width = parseInt(args.width || 320, 10);\n args.height = parseInt(args.height || 240, 10);\n }\n if (args.body) {\n args.items = {\n defaults: args.defaults,\n type: args.bodyType || 'form',\n items: args.body,\n data: args.data,\n callbacks: args.commands\n };\n }\n if (!args.url && !args.buttons) {\n args.buttons = [\n {\n text: 'Ok',\n subtype: 'primary',\n onclick: function () {\n win.find('form')[0].submit();\n }\n },\n {\n text: 'Cancel',\n onclick: function () {\n win.close();\n }\n }\n ];\n }\n win = new Window(args);\n win.on('close', function () {\n closeCallback(win);\n });\n if (args.data) {\n win.on('postRender', function () {\n this.find('*').each(function (ctrl) {\n var name = ctrl.name();\n if (name in args.data) {\n ctrl.value(args.data[name]);\n }\n });\n });\n }\n win.features = args || {};\n win.params = params || {};\n win = win.renderTo(domGlobals.document.body).reflow();\n return win;\n };\n var alert = function (message, choiceCallback, closeCallback) {\n var win;\n win = MessageBox.alert(message, function () {\n choiceCallback();\n });\n win.on('close', function () {\n closeCallback(win);\n });\n return win;\n };\n var confirm = function (message, choiceCallback, closeCallback) {\n var win;\n win = MessageBox.confirm(message, function (state) {\n choiceCallback(state);\n });\n win.on('close', function () {\n closeCallback(win);\n });\n return win;\n };\n var close = function (window) {\n window.close();\n };\n var getParams = function (window) {\n return window.params;\n };\n var setParams = function (window, params) {\n window.params = params;\n };\n return {\n open: open,\n alert: alert,\n confirm: confirm,\n close: close,\n getParams: getParams,\n setParams: setParams\n };\n }\n\n var get = function (editor) {\n var renderUI = function (args) {\n return Render.renderUI(editor, this, args);\n };\n var resizeTo = function (w, h) {\n return Resize.resizeTo(editor, w, h);\n };\n var resizeBy = function (dw, dh) {\n return Resize.resizeBy(editor, dw, dh);\n };\n var getNotificationManagerImpl = function () {\n return NotificationManagerImpl(editor);\n };\n var getWindowManagerImpl = function () {\n return WindowManagerImpl();\n };\n return {\n renderUI: renderUI,\n resizeTo: resizeTo,\n resizeBy: resizeBy,\n getNotificationManagerImpl: getNotificationManagerImpl,\n getWindowManagerImpl: getWindowManagerImpl\n };\n };\n var ThemeApi = { get: get };\n\n var Layout = global$a.extend({\n Defaults: {\n firstControlClass: 'first',\n lastControlClass: 'last'\n },\n init: function (settings) {\n this.settings = global$2.extend({}, this.Defaults, settings);\n },\n preRender: function (container) {\n container.bodyClasses.add(this.settings.containerClass);\n },\n applyClasses: function (items) {\n var self = this;\n var settings = self.settings;\n var firstClass, lastClass, firstItem, lastItem;\n firstClass = settings.firstControlClass;\n lastClass = settings.lastControlClass;\n items.each(function (item) {\n item.classes.remove(firstClass).remove(lastClass).add(settings.controlClass);\n if (item.visible()) {\n if (!firstItem) {\n firstItem = item;\n }\n lastItem = item;\n }\n });\n if (firstItem) {\n firstItem.classes.add(firstClass);\n }\n if (lastItem) {\n lastItem.classes.add(lastClass);\n }\n },\n renderHtml: function (container) {\n var self = this;\n var html = '';\n self.applyClasses(container.items());\n container.items().each(function (item) {\n html += item.renderHtml();\n });\n return html;\n },\n recalc: function () {\n },\n postRender: function () {\n },\n isNative: function () {\n return false;\n }\n });\n\n var AbsoluteLayout = Layout.extend({\n Defaults: {\n containerClass: 'abs-layout',\n controlClass: 'abs-layout-item'\n },\n recalc: function (container) {\n container.items().filter(':visible').each(function (ctrl) {\n var settings = ctrl.settings;\n ctrl.layoutRect({\n x: settings.x,\n y: settings.y,\n w: settings.w,\n h: settings.h\n });\n if (ctrl.recalc) {\n ctrl.recalc();\n }\n });\n },\n renderHtml: function (container) {\n return '' + this._super(container);\n }\n });\n\n var Button = Widget.extend({\n Defaults: {\n classes: 'widget btn',\n role: 'button'\n },\n init: function (settings) {\n var self = this;\n var size;\n self._super(settings);\n settings = self.settings;\n size = self.settings.size;\n self.on('click mousedown', function (e) {\n e.preventDefault();\n });\n self.on('touchstart', function (e) {\n self.fire('click', e);\n e.preventDefault();\n });\n if (settings.subtype) {\n self.classes.add(settings.subtype);\n }\n if (size) {\n self.classes.add('btn-' + size);\n }\n if (settings.icon) {\n self.icon(settings.icon);\n }\n },\n icon: function (icon) {\n if (!arguments.length) {\n return this.state.get('icon');\n }\n this.state.set('icon', icon);\n return this;\n },\n repaint: function () {\n var btnElm = this.getEl().firstChild;\n var btnStyle;\n if (btnElm) {\n btnStyle = btnElm.style;\n btnStyle.width = btnStyle.height = '100%';\n }\n this._super();\n },\n renderHtml: function () {\n var self = this, id = self._id, prefix = self.classPrefix;\n var icon = self.state.get('icon'), image;\n var text = self.state.get('text');\n var textHtml = '';\n var ariaPressed;\n var settings = self.settings;\n image = settings.image;\n if (image) {\n icon = 'none';\n if (typeof image !== 'string') {\n image = domGlobals.window.getSelection ? image[0] : image[1];\n }\n image = ' style=\"background-image: url(\\'' + image + '\\')\"';\n } else {\n image = '';\n }\n if (text) {\n self.classes.add('btn-has-text');\n textHtml = '' + self.encode(text) + '';\n }\n icon = icon ? prefix + 'ico ' + prefix + 'i-' + icon : '';\n ariaPressed = typeof settings.active === 'boolean' ? ' aria-pressed=\"' + settings.active + '\"' : '';\n return '' + headerHtml + '' + '' + html + '' + footerHtml + '' + '' + '';\n },\n bindStates: function () {\n var self = this, $ = self.$, textCls = self.classPrefix + 'txt';\n function setButtonText(text) {\n var $span = $('span.' + textCls, self.getEl());\n if (text) {\n if (!$span[0]) {\n $('button:first', self.getEl()).append('');\n $span = $('span.' + textCls, self.getEl());\n }\n $span.html(self.encode(text));\n } else {\n $span.remove();\n }\n self.classes.toggle('btn-has-text', !!text);\n }\n self.state.on('change:text', function (e) {\n setButtonText(e.value);\n });\n self.state.on('change:icon', function (e) {\n var icon = e.value;\n var prefix = self.classPrefix;\n self.settings.icon = icon;\n icon = icon ? prefix + 'ico ' + prefix + 'i-' + self.settings.icon : '';\n var btnElm = self.getEl().firstChild;\n var iconElm = btnElm.getElementsByTagName('i')[0];\n if (icon) {\n if (!iconElm || iconElm !== btnElm.firstChild) {\n iconElm = domGlobals.document.createElement('i');\n btnElm.insertBefore(iconElm, btnElm.firstChild);\n }\n iconElm.className = icon;\n } else if (iconElm) {\n btnElm.removeChild(iconElm);\n }\n setButtonText(self.state.get('text'));\n });\n return self._super();\n }\n });\n\n var BrowseButton = Button.extend({\n init: function (settings) {\n var self = this;\n settings = global$2.extend({\n text: 'Browse...',\n multiple: false,\n accept: null\n }, settings);\n self._super(settings);\n self.classes.add('browsebutton');\n if (settings.multiple) {\n self.classes.add('multiple');\n }\n },\n postRender: function () {\n var self = this;\n var input = funcs.create('input', {\n type: 'file',\n id: self._id + '-browse',\n accept: self.settings.accept\n });\n self._super();\n global$9(input).on('change', function (e) {\n var files = e.target.files;\n self.value = function () {\n if (!files.length) {\n return null;\n } else if (self.settings.multiple) {\n return files;\n } else {\n return files[0];\n }\n };\n e.preventDefault();\n if (files.length) {\n self.fire('change', e);\n }\n });\n global$9(input).on('click', function (e) {\n e.stopPropagation();\n });\n global$9(self.getEl('button')).on('click touchstart', function (e) {\n e.stopPropagation();\n input.click();\n e.preventDefault();\n });\n self.getEl().appendChild(input);\n },\n remove: function () {\n global$9(this.getEl('button')).off();\n global$9(this.getEl('input')).off();\n this._super();\n }\n });\n\n var ButtonGroup = Container.extend({\n Defaults: {\n defaultType: 'button',\n role: 'group'\n },\n renderHtml: function () {\n var self = this, layout = self._layout;\n self.classes.add('btn-group');\n self.preRender();\n layout.preRender(self);\n return '' + '';\n }\n });\n\n var Checkbox = Widget.extend({\n Defaults: {\n classes: 'checkbox',\n role: 'checkbox',\n checked: false\n },\n init: function (settings) {\n var self = this;\n self._super(settings);\n self.on('click mousedown', function (e) {\n e.preventDefault();\n });\n self.on('click', function (e) {\n e.preventDefault();\n if (!self.disabled()) {\n self.checked(!self.checked());\n }\n });\n self.checked(self.settings.checked);\n },\n checked: function (state) {\n if (!arguments.length) {\n return this.state.get('checked');\n }\n this.state.set('checked', state);\n return this;\n },\n value: function (state) {\n if (!arguments.length) {\n return this.checked();\n }\n return this.checked(state);\n },\n renderHtml: function () {\n var self = this, id = self._id, prefix = self.classPrefix;\n return '' + (self.settings.html || '') + layout.renderHtml(self) + '' + '' + '' + '' + self.encode(self.state.get('text')) + '' + '';\n },\n bindStates: function () {\n var self = this;\n function checked(state) {\n self.classes.toggle('checked', state);\n self.aria('checked', state);\n }\n self.state.on('change:text', function (e) {\n self.getEl('al').firstChild.data = self.translate(e.value);\n });\n self.state.on('change:checked change:value', function (e) {\n self.fire('change');\n checked(e.value);\n });\n self.state.on('change:icon', function (e) {\n var icon = e.value;\n var prefix = self.classPrefix;\n if (typeof icon === 'undefined') {\n return self.settings.icon;\n }\n self.settings.icon = icon;\n icon = icon ? prefix + 'ico ' + prefix + 'i-' + self.settings.icon : '';\n var btnElm = self.getEl().firstChild;\n var iconElm = btnElm.getElementsByTagName('i')[0];\n if (icon) {\n if (!iconElm || iconElm !== btnElm.firstChild) {\n iconElm = domGlobals.document.createElement('i');\n btnElm.insertBefore(iconElm, btnElm.firstChild);\n }\n iconElm.className = icon;\n } else if (iconElm) {\n btnElm.removeChild(iconElm);\n }\n });\n if (self.state.get('checked')) {\n checked(true);\n }\n return self._super();\n }\n });\n\n var global$d = tinymce.util.Tools.resolve('tinymce.util.VK');\n\n var ComboBox = Widget.extend({\n init: function (settings) {\n var self = this;\n self._super(settings);\n settings = self.settings;\n self.classes.add('combobox');\n self.subinput = true;\n self.ariaTarget = 'inp';\n settings.menu = settings.menu || settings.values;\n if (settings.menu) {\n settings.icon = 'caret';\n }\n self.on('click', function (e) {\n var elm = e.target;\n var root = self.getEl();\n if (!global$9.contains(root, elm) && elm !== root) {\n return;\n }\n while (elm && elm !== root) {\n if (elm.id && elm.id.indexOf('-open') !== -1) {\n self.fire('action');\n if (settings.menu) {\n self.showMenu();\n if (e.aria) {\n self.menu.items()[0].focus();\n }\n }\n }\n elm = elm.parentNode;\n }\n });\n self.on('keydown', function (e) {\n var rootControl;\n if (e.keyCode === 13 && e.target.nodeName === 'INPUT') {\n e.preventDefault();\n self.parents().reverse().each(function (ctrl) {\n if (ctrl.toJSON) {\n rootControl = ctrl;\n return false;\n }\n });\n self.fire('submit', { data: rootControl.toJSON() });\n }\n });\n self.on('keyup', function (e) {\n if (e.target.nodeName === 'INPUT') {\n var oldValue = self.state.get('value');\n var newValue = e.target.value;\n if (newValue !== oldValue) {\n self.state.set('value', newValue);\n self.fire('autocomplete', e);\n }\n }\n });\n self.on('mouseover', function (e) {\n var tooltip = self.tooltip().moveTo(-65535);\n if (self.statusLevel() && e.target.className.indexOf(self.classPrefix + 'status') !== -1) {\n var statusMessage = self.statusMessage() || 'Ok';\n var rel = tooltip.text(statusMessage).show().testMoveRel(e.target, [\n 'bc-tc',\n 'bc-tl',\n 'bc-tr'\n ]);\n tooltip.classes.toggle('tooltip-n', rel === 'bc-tc');\n tooltip.classes.toggle('tooltip-nw', rel === 'bc-tl');\n tooltip.classes.toggle('tooltip-ne', rel === 'bc-tr');\n tooltip.moveRel(e.target, rel);\n }\n });\n },\n statusLevel: function (value) {\n if (arguments.length > 0) {\n this.state.set('statusLevel', value);\n }\n return this.state.get('statusLevel');\n },\n statusMessage: function (value) {\n if (arguments.length > 0) {\n this.state.set('statusMessage', value);\n }\n return this.state.get('statusMessage');\n },\n showMenu: function () {\n var self = this;\n var settings = self.settings;\n var menu;\n if (!self.menu) {\n menu = settings.menu || [];\n if (menu.length) {\n menu = {\n type: 'menu',\n items: menu\n };\n } else {\n menu.type = menu.type || 'menu';\n }\n self.menu = global$4.create(menu).parent(self).renderTo(self.getContainerElm());\n self.fire('createmenu');\n self.menu.reflow();\n self.menu.on('cancel', function (e) {\n if (e.control === self.menu) {\n self.focus();\n }\n });\n self.menu.on('show hide', function (e) {\n e.control.items().each(function (ctrl) {\n ctrl.active(ctrl.value() === self.value());\n });\n }).fire('show');\n self.menu.on('select', function (e) {\n self.value(e.control.value());\n });\n self.on('focusin', function (e) {\n if (e.target.tagName.toUpperCase() === 'INPUT') {\n self.menu.hide();\n }\n });\n self.aria('expanded', true);\n }\n self.menu.show();\n self.menu.layoutRect({ w: self.layoutRect().w });\n self.menu.moveRel(self.getEl(), self.isRtl() ? [\n 'br-tr',\n 'tr-br'\n ] : [\n 'bl-tl',\n 'tl-bl'\n ]);\n },\n focus: function () {\n this.getEl('inp').focus();\n },\n repaint: function () {\n var self = this, elm = self.getEl(), openElm = self.getEl('open'), rect = self.layoutRect();\n var width, lineHeight, innerPadding = 0;\n var inputElm = elm.firstChild;\n if (self.statusLevel() && self.statusLevel() !== 'none') {\n innerPadding = parseInt(funcs.getRuntimeStyle(inputElm, 'padding-right'), 10) - parseInt(funcs.getRuntimeStyle(inputElm, 'padding-left'), 10);\n }\n if (openElm) {\n width = rect.w - funcs.getSize(openElm).width - 10;\n } else {\n width = rect.w - 10;\n }\n var doc = domGlobals.document;\n if (doc.all && (!doc.documentMode || doc.documentMode <= 8)) {\n lineHeight = self.layoutRect().h - 2 + 'px';\n }\n global$9(inputElm).css({\n width: width - innerPadding,\n lineHeight: lineHeight\n });\n self._super();\n return self;\n },\n postRender: function () {\n var self = this;\n global$9(this.getEl('inp')).on('change', function (e) {\n self.state.set('value', e.target.value);\n self.fire('change', e);\n });\n return self._super();\n },\n renderHtml: function () {\n var self = this, id = self._id, settings = self.settings, prefix = self.classPrefix;\n var value = self.state.get('value') || '';\n var icon, text, openBtnHtml = '', extraAttrs = '', statusHtml = '';\n if ('spellcheck' in settings) {\n extraAttrs += ' spellcheck=\"' + settings.spellcheck + '\"';\n }\n if (settings.maxLength) {\n extraAttrs += ' maxlength=\"' + settings.maxLength + '\"';\n }\n if (settings.size) {\n extraAttrs += ' size=\"' + settings.size + '\"';\n }\n if (settings.subtype) {\n extraAttrs += ' type=\"' + settings.subtype + '\"';\n }\n statusHtml = '';\n if (self.disabled()) {\n extraAttrs += ' disabled=\"disabled\"';\n }\n icon = settings.icon;\n if (icon && icon !== 'caret') {\n icon = prefix + 'ico ' + prefix + 'i-' + settings.icon;\n }\n text = self.state.get('text');\n if (icon || text) {\n openBtnHtml = '' + '' + '';\n self.classes.add('has-open');\n }\n return '' + '' + statusHtml + openBtnHtml + '';\n },\n value: function (value) {\n if (arguments.length) {\n this.state.set('value', value);\n return this;\n }\n if (this.state.get('rendered')) {\n this.state.set('value', this.getEl('inp').value);\n }\n return this.state.get('value');\n },\n showAutoComplete: function (items, term) {\n var self = this;\n if (items.length === 0) {\n self.hideMenu();\n return;\n }\n var insert = function (value, title) {\n return function () {\n self.fire('selectitem', {\n title: title,\n value: value\n });\n };\n };\n if (self.menu) {\n self.menu.items().remove();\n } else {\n self.menu = global$4.create({\n type: 'menu',\n classes: 'combobox-menu',\n layout: 'flow'\n }).parent(self).renderTo();\n }\n global$2.each(items, function (item) {\n self.menu.add({\n text: item.title,\n url: item.previewUrl,\n match: term,\n classes: 'menu-item-ellipsis',\n onclick: insert(item.value, item.title)\n });\n });\n self.menu.renderNew();\n self.hideMenu();\n self.menu.on('cancel', function (e) {\n if (e.control.parent() === self.menu) {\n e.stopPropagation();\n self.focus();\n self.hideMenu();\n }\n });\n self.menu.on('select', function () {\n self.focus();\n });\n var maxW = self.layoutRect().w;\n self.menu.layoutRect({\n w: maxW,\n minW: 0,\n maxW: maxW\n });\n self.menu.repaint();\n self.menu.reflow();\n self.menu.show();\n self.menu.moveRel(self.getEl(), self.isRtl() ? [\n 'br-tr',\n 'tr-br'\n ] : [\n 'bl-tl',\n 'tl-bl'\n ]);\n },\n hideMenu: function () {\n if (this.menu) {\n this.menu.hide();\n }\n },\n bindStates: function () {\n var self = this;\n self.state.on('change:value', function (e) {\n if (self.getEl('inp').value !== e.value) {\n self.getEl('inp').value = e.value;\n }\n });\n self.state.on('change:disabled', function (e) {\n self.getEl('inp').disabled = e.value;\n });\n self.state.on('change:statusLevel', function (e) {\n var statusIconElm = self.getEl('status');\n var prefix = self.classPrefix, value = e.value;\n funcs.css(statusIconElm, 'display', value === 'none' ? 'none' : '');\n funcs.toggleClass(statusIconElm, prefix + 'i-checkmark', value === 'ok');\n funcs.toggleClass(statusIconElm, prefix + 'i-warning', value === 'warn');\n funcs.toggleClass(statusIconElm, prefix + 'i-error', value === 'error');\n self.classes.toggle('has-status', value !== 'none');\n self.repaint();\n });\n funcs.on(self.getEl('status'), 'mouseleave', function () {\n self.tooltip().hide();\n });\n self.on('cancel', function (e) {\n if (self.menu && self.menu.visible()) {\n e.stopPropagation();\n self.hideMenu();\n }\n });\n var focusIdx = function (idx, menu) {\n if (menu && menu.items().length > 0) {\n menu.items().eq(idx)[0].focus();\n }\n };\n self.on('keydown', function (e) {\n var keyCode = e.keyCode;\n if (e.target.nodeName === 'INPUT') {\n if (keyCode === global$d.DOWN) {\n e.preventDefault();\n self.fire('autocomplete');\n focusIdx(0, self.menu);\n } else if (keyCode === global$d.UP) {\n e.preventDefault();\n focusIdx(-1, self.menu);\n }\n }\n });\n return self._super();\n },\n remove: function () {\n global$9(this.getEl('inp')).off();\n if (this.menu) {\n this.menu.remove();\n }\n this._super();\n }\n });\n\n var ColorBox = ComboBox.extend({\n init: function (settings) {\n var self = this;\n settings.spellcheck = false;\n if (settings.onaction) {\n settings.icon = 'none';\n }\n self._super(settings);\n self.classes.add('colorbox');\n self.on('change keyup postrender', function () {\n self.repaintColor(self.value());\n });\n },\n repaintColor: function (value) {\n var openElm = this.getEl('open');\n var elm = openElm ? openElm.getElementsByTagName('i')[0] : null;\n if (elm) {\n try {\n elm.style.background = value;\n } catch (ex) {\n }\n }\n },\n bindStates: function () {\n var self = this;\n self.state.on('change:value', function (e) {\n if (self.state.get('rendered')) {\n self.repaintColor(e.value);\n }\n });\n return self._super();\n }\n });\n\n var PanelButton = Button.extend({\n showPanel: function () {\n var self = this, settings = self.settings;\n self.classes.add('opened');\n if (!self.panel) {\n var panelSettings = settings.panel;\n if (panelSettings.type) {\n panelSettings = {\n layout: 'grid',\n items: panelSettings\n };\n }\n panelSettings.role = panelSettings.role || 'dialog';\n panelSettings.popover = true;\n panelSettings.autohide = true;\n panelSettings.ariaRoot = true;\n self.panel = new FloatPanel(panelSettings).on('hide', function () {\n self.classes.remove('opened');\n }).on('cancel', function (e) {\n e.stopPropagation();\n self.focus();\n self.hidePanel();\n }).parent(self).renderTo(self.getContainerElm());\n self.panel.fire('show');\n self.panel.reflow();\n } else {\n self.panel.show();\n }\n var rtlRels = [\n 'bc-tc',\n 'bc-tl',\n 'bc-tr'\n ];\n var ltrRels = [\n 'bc-tc',\n 'bc-tr',\n 'bc-tl',\n 'tc-bc',\n 'tc-br',\n 'tc-bl'\n ];\n var rel = self.panel.testMoveRel(self.getEl(), settings.popoverAlign || (self.isRtl() ? rtlRels : ltrRels));\n self.panel.classes.toggle('start', rel.substr(-1) === 'l');\n self.panel.classes.toggle('end', rel.substr(-1) === 'r');\n var isTop = rel.substr(0, 1) === 't';\n self.panel.classes.toggle('bottom', !isTop);\n self.panel.classes.toggle('top', isTop);\n self.panel.moveRel(self.getEl(), rel);\n },\n hidePanel: function () {\n var self = this;\n if (self.panel) {\n self.panel.hide();\n }\n },\n postRender: function () {\n var self = this;\n self.aria('haspopup', true);\n self.on('click', function (e) {\n if (e.control === self) {\n if (self.panel && self.panel.visible()) {\n self.hidePanel();\n } else {\n self.showPanel();\n self.panel.focus(!!e.aria);\n }\n }\n });\n return self._super();\n },\n remove: function () {\n if (this.panel) {\n this.panel.remove();\n this.panel = null;\n }\n return this._super();\n }\n });\n\n var DOM$3 = global$3.DOM;\n var ColorButton = PanelButton.extend({\n init: function (settings) {\n this._super(settings);\n this.classes.add('splitbtn');\n this.classes.add('colorbutton');\n },\n color: function (color) {\n if (color) {\n this._color = color;\n this.getEl('preview').style.backgroundColor = color;\n return this;\n }\n return this._color;\n },\n resetColor: function () {\n this._color = null;\n this.getEl('preview').style.backgroundColor = null;\n return this;\n },\n renderHtml: function () {\n var self = this, id = self._id, prefix = self.classPrefix, text = self.state.get('text');\n var icon = self.settings.icon ? prefix + 'ico ' + prefix + 'i-' + self.settings.icon : '';\n var image = self.settings.image ? ' style=\"background-image: url(\\'' + self.settings.image + '\\')\"' : '';\n var textHtml = '';\n if (text) {\n self.classes.add('btn-has-text');\n textHtml = '' + self.encode(text) + '';\n }\n return '' + '' + '' + '';\n },\n postRender: function () {\n var self = this, onClickHandler = self.settings.onclick;\n self.on('click', function (e) {\n if (e.aria && e.aria.key === 'down') {\n return;\n }\n if (e.control === self && !DOM$3.getParent(e.target, '.' + self.classPrefix + 'open')) {\n e.stopImmediatePropagation();\n onClickHandler.call(self, e);\n }\n });\n delete self.settings.onclick;\n return self._super();\n }\n });\n\n var global$e = tinymce.util.Tools.resolve('tinymce.util.Color');\n\n var ColorPicker = Widget.extend({\n Defaults: { classes: 'widget colorpicker' },\n init: function (settings) {\n this._super(settings);\n },\n postRender: function () {\n var self = this;\n var color = self.color();\n var hsv, hueRootElm, huePointElm, svRootElm, svPointElm;\n hueRootElm = self.getEl('h');\n huePointElm = self.getEl('hp');\n svRootElm = self.getEl('sv');\n svPointElm = self.getEl('svp');\n function getPos(elm, event) {\n var pos = funcs.getPos(elm);\n var x, y;\n x = event.pageX - pos.x;\n y = event.pageY - pos.y;\n x = Math.max(0, Math.min(x / elm.clientWidth, 1));\n y = Math.max(0, Math.min(y / elm.clientHeight, 1));\n return {\n x: x,\n y: y\n };\n }\n function updateColor(hsv, hueUpdate) {\n var hue = (360 - hsv.h) / 360;\n funcs.css(huePointElm, { top: hue * 100 + '%' });\n if (!hueUpdate) {\n funcs.css(svPointElm, {\n left: hsv.s + '%',\n top: 100 - hsv.v + '%'\n });\n }\n svRootElm.style.background = global$e({\n s: 100,\n v: 100,\n h: hsv.h\n }).toHex();\n self.color().parse({\n s: hsv.s,\n v: hsv.v,\n h: hsv.h\n });\n }\n function updateSaturationAndValue(e) {\n var pos;\n pos = getPos(svRootElm, e);\n hsv.s = pos.x * 100;\n hsv.v = (1 - pos.y) * 100;\n updateColor(hsv);\n self.fire('change');\n }\n function updateHue(e) {\n var pos;\n pos = getPos(hueRootElm, e);\n hsv = color.toHsv();\n hsv.h = (1 - pos.y) * 360;\n updateColor(hsv, true);\n self.fire('change');\n }\n self._repaint = function () {\n hsv = color.toHsv();\n updateColor(hsv);\n };\n self._super();\n self._svdraghelper = new DragHelper(self._id + '-sv', {\n start: updateSaturationAndValue,\n drag: updateSaturationAndValue\n });\n self._hdraghelper = new DragHelper(self._id + '-h', {\n start: updateHue,\n drag: updateHue\n });\n self._repaint();\n },\n rgb: function () {\n return this.color().toRgb();\n },\n value: function (value) {\n var self = this;\n if (arguments.length) {\n self.color().parse(value);\n if (self._rendered) {\n self._repaint();\n }\n } else {\n return self.color().toHex();\n }\n },\n color: function () {\n if (!this._color) {\n this._color = global$e();\n }\n return this._color;\n },\n renderHtml: function () {\n var self = this;\n var id = self._id;\n var prefix = self.classPrefix;\n var hueHtml;\n var stops = '#ff0000,#ff0080,#ff00ff,#8000ff,#0000ff,#0080ff,#00ffff,#00ff80,#00ff00,#80ff00,#ffff00,#ff8000,#ff0000';\n function getOldIeFallbackHtml() {\n var i, l, html = '', gradientPrefix, stopsList;\n gradientPrefix = 'filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr=';\n stopsList = stops.split(',');\n for (i = 0, l = stopsList.length - 1; i < l; i++) {\n html += '';\n }\n return html;\n }\n var gradientCssText = 'background: -ms-linear-gradient(top,' + stops + ');' + 'background: linear-gradient(to bottom,' + stops + ');';\n hueHtml = '' + getOldIeFallbackHtml() + '' + '';\n return '' + '';\n }\n });\n\n var DropZone = Widget.extend({\n init: function (settings) {\n var self = this;\n settings = global$2.extend({\n height: 100,\n text: 'Drop an image here',\n multiple: false,\n accept: null\n }, settings);\n self._super(settings);\n self.classes.add('dropzone');\n if (settings.multiple) {\n self.classes.add('multiple');\n }\n },\n renderHtml: function () {\n var self = this;\n var attrs, elm;\n var cfg = self.settings;\n attrs = {\n id: self._id,\n hidefocus: '1'\n };\n elm = funcs.create('div', attrs, '' + this.translate(cfg.text) + '');\n if (cfg.height) {\n funcs.css(elm, 'height', cfg.height + 'px');\n }\n if (cfg.width) {\n funcs.css(elm, 'width', cfg.width + 'px');\n }\n elm.className = self.classes;\n return elm.outerHTML;\n },\n postRender: function () {\n var self = this;\n var toggleDragClass = function (e) {\n e.preventDefault();\n self.classes.toggle('dragenter');\n self.getEl().className = self.classes;\n };\n var filter = function (files) {\n var accept = self.settings.accept;\n if (typeof accept !== 'string') {\n return files;\n }\n var re = new RegExp('(' + accept.split(/\\s*,\\s*/).join('|') + ')$', 'i');\n return global$2.grep(files, function (file) {\n return re.test(file.name);\n });\n };\n self._super();\n self.$el.on('dragover', function (e) {\n e.preventDefault();\n });\n self.$el.on('dragenter', toggleDragClass);\n self.$el.on('dragleave', toggleDragClass);\n self.$el.on('drop', function (e) {\n e.preventDefault();\n if (self.state.get('disabled')) {\n return;\n }\n var files = filter(e.dataTransfer.files);\n self.value = function () {\n if (!files.length) {\n return null;\n } else if (self.settings.multiple) {\n return files;\n } else {\n return files[0];\n }\n };\n if (files.length) {\n self.fire('change', e);\n }\n });\n },\n remove: function () {\n this.$el.off();\n this._super();\n }\n });\n\n var Path = Widget.extend({\n init: function (settings) {\n var self = this;\n if (!settings.delimiter) {\n settings.delimiter = '\\xBB';\n }\n self._super(settings);\n self.classes.add('path');\n self.canFocus = true;\n self.on('click', function (e) {\n var index;\n var target = e.target;\n if (index = target.getAttribute('data-index')) {\n self.fire('select', {\n value: self.row()[index],\n index: index\n });\n }\n });\n self.row(self.settings.row);\n },\n focus: function () {\n var self = this;\n self.getEl().firstChild.focus();\n return self;\n },\n row: function (row) {\n if (!arguments.length) {\n return this.state.get('row');\n }\n this.state.set('row', row);\n return this;\n },\n renderHtml: function () {\n var self = this;\n return '' + '' + hueHtml + '' + '' + '' + '' + '' + '' + '' + '' + self._getDataPathHtml(self.state.get('row')) + '';\n },\n bindStates: function () {\n var self = this;\n self.state.on('change:row', function (e) {\n self.innerHtml(self._getDataPathHtml(e.value));\n });\n return self._super();\n },\n _getDataPathHtml: function (data) {\n var self = this;\n var parts = data || [];\n var i, l, html = '';\n var prefix = self.classPrefix;\n for (i = 0, l = parts.length; i < l; i++) {\n html += (i > 0 ? '' + self.settings.delimiter + '' : '') + '' + parts[i].name + '';\n }\n if (!html) {\n html = '\\xA0';\n }\n return html;\n }\n });\n\n var ElementPath = Path.extend({\n postRender: function () {\n var self = this, editor = self.settings.editor;\n function isHidden(elm) {\n if (elm.nodeType === 1) {\n if (elm.nodeName === 'BR' || !!elm.getAttribute('data-mce-bogus')) {\n return true;\n }\n if (elm.getAttribute('data-mce-type') === 'bookmark') {\n return true;\n }\n }\n return false;\n }\n if (editor.settings.elementpath !== false) {\n self.on('select', function (e) {\n editor.focus();\n editor.selection.select(this.row()[e.index].element);\n editor.nodeChanged();\n });\n editor.on('nodeChange', function (e) {\n var outParents = [];\n var parents = e.parents;\n var i = parents.length;\n while (i--) {\n if (parents[i].nodeType === 1 && !isHidden(parents[i])) {\n var args = editor.fire('ResolveName', {\n name: parents[i].nodeName.toLowerCase(),\n target: parents[i]\n });\n if (!args.isDefaultPrevented()) {\n outParents.push({\n name: args.name,\n element: parents[i]\n });\n }\n if (args.isPropagationStopped()) {\n break;\n }\n }\n }\n self.row(outParents);\n });\n }\n return self._super();\n }\n });\n\n var FormItem = Container.extend({\n Defaults: {\n layout: 'flex',\n align: 'center',\n defaults: { flex: 1 }\n },\n renderHtml: function () {\n var self = this, layout = self._layout, prefix = self.classPrefix;\n self.classes.add('formitem');\n layout.preRender(self);\n return '' + (self.settings.title ? '';\n }\n });\n\n var Form = Container.extend({\n Defaults: {\n containerCls: 'form',\n layout: 'flex',\n direction: 'column',\n align: 'stretch',\n flex: 1,\n padding: 15,\n labelGap: 30,\n spacing: 10,\n callbacks: {\n submit: function () {\n this.submit();\n }\n }\n },\n preRender: function () {\n var self = this, items = self.items();\n if (!self.settings.formItemDefaults) {\n self.settings.formItemDefaults = {\n layout: 'flex',\n autoResize: 'overflow',\n defaults: { flex: 1 }\n };\n }\n items.each(function (ctrl) {\n var formItem;\n var label = ctrl.settings.label;\n if (label) {\n formItem = new FormItem(global$2.extend({\n items: {\n type: 'label',\n id: ctrl._id + '-l',\n text: label,\n flex: 0,\n forId: ctrl._id,\n disabled: ctrl.disabled()\n }\n }, self.settings.formItemDefaults));\n formItem.type = 'formitem';\n ctrl.aria('labelledby', ctrl._id + '-l');\n if (typeof ctrl.settings.flex === 'undefined') {\n ctrl.settings.flex = 1;\n }\n self.replace(ctrl, formItem);\n formItem.add(ctrl);\n }\n });\n },\n submit: function () {\n return this.fire('submit', { data: this.toJSON() });\n },\n postRender: function () {\n var self = this;\n self._super();\n self.fromJSON(self.settings.data);\n },\n bindStates: function () {\n var self = this;\n self._super();\n function recalcLabels() {\n var maxLabelWidth = 0;\n var labels = [];\n var i, labelGap, items;\n if (self.settings.labelGapCalc === false) {\n return;\n }\n if (self.settings.labelGapCalc === 'children') {\n items = self.find('formitem');\n } else {\n items = self.items();\n }\n items.filter('formitem').each(function (item) {\n var labelCtrl = item.items()[0], labelWidth = labelCtrl.getEl().clientWidth;\n maxLabelWidth = labelWidth > maxLabelWidth ? labelWidth : maxLabelWidth;\n labels.push(labelCtrl);\n });\n labelGap = self.settings.labelGap || 0;\n i = labels.length;\n while (i--) {\n labels[i].settings.minWidth = maxLabelWidth + labelGap;\n }\n }\n self.on('show', recalcLabels);\n recalcLabels();\n }\n });\n\n var FieldSet = Form.extend({\n Defaults: {\n containerCls: 'fieldset',\n layout: 'flex',\n direction: 'column',\n align: 'stretch',\n flex: 1,\n padding: '25 15 5 15',\n labelGap: 30,\n spacing: 10,\n border: 1\n },\n renderHtml: function () {\n var self = this, layout = self._layout, prefix = self.classPrefix;\n self.preRender();\n layout.preRender(self);\n return '';\n }\n });\n\n var unique$1 = 0;\n var generate = function (prefix) {\n var date = new Date();\n var time = date.getTime();\n var random = Math.floor(Math.random() * 1000000000);\n unique$1++;\n return prefix + '_' + random + unique$1 + String(time);\n };\n\n var fromHtml = function (html, scope) {\n var doc = scope || domGlobals.document;\n var div = doc.createElement('div');\n div.innerHTML = html;\n if (!div.hasChildNodes() || div.childNodes.length > 1) {\n domGlobals.console.error('HTML does not have a single root node', html);\n throw new Error('HTML must have a single root node');\n }\n return fromDom(div.childNodes[0]);\n };\n var fromTag = function (tag, scope) {\n var doc = scope || domGlobals.document;\n var node = doc.createElement(tag);\n return fromDom(node);\n };\n var fromText = function (text, scope) {\n var doc = scope || domGlobals.document;\n var node = doc.createTextNode(text);\n return fromDom(node);\n };\n var fromDom = function (node) {\n if (node === null || node === undefined) {\n throw new Error('Node cannot be null or undefined');\n }\n return { dom: constant(node) };\n };\n var fromPoint = function (docElm, x, y) {\n var doc = docElm.dom();\n return Option.from(doc.elementFromPoint(x, y)).map(fromDom);\n };\n var Element = {\n fromHtml: fromHtml,\n fromTag: fromTag,\n fromText: fromText,\n fromDom: fromDom,\n fromPoint: fromPoint\n };\n\n var cached = function (f) {\n var called = false;\n var r;\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (!called) {\n called = true;\n r = f.apply(null, args);\n }\n return r;\n };\n };\n\n var ATTRIBUTE = domGlobals.Node.ATTRIBUTE_NODE;\n var CDATA_SECTION = domGlobals.Node.CDATA_SECTION_NODE;\n var COMMENT = domGlobals.Node.COMMENT_NODE;\n var DOCUMENT = domGlobals.Node.DOCUMENT_NODE;\n var DOCUMENT_TYPE = domGlobals.Node.DOCUMENT_TYPE_NODE;\n var DOCUMENT_FRAGMENT = domGlobals.Node.DOCUMENT_FRAGMENT_NODE;\n var ELEMENT = domGlobals.Node.ELEMENT_NODE;\n var TEXT = domGlobals.Node.TEXT_NODE;\n var PROCESSING_INSTRUCTION = domGlobals.Node.PROCESSING_INSTRUCTION_NODE;\n var ENTITY_REFERENCE = domGlobals.Node.ENTITY_REFERENCE_NODE;\n var ENTITY = domGlobals.Node.ENTITY_NODE;\n var NOTATION = domGlobals.Node.NOTATION_NODE;\n\n var Global = typeof domGlobals.window !== 'undefined' ? domGlobals.window : Function('return this;')();\n\n var path = function (parts, scope) {\n var o = scope !== undefined && scope !== null ? scope : Global;\n for (var i = 0; i < parts.length && o !== undefined && o !== null; ++i) {\n o = o[parts[i]];\n }\n return o;\n };\n var resolve = function (p, scope) {\n var parts = p.split('.');\n return path(parts, scope);\n };\n\n var unsafe = function (name, scope) {\n return resolve(name, scope);\n };\n var getOrDie = function (name, scope) {\n var actual = unsafe(name, scope);\n if (actual === undefined || actual === null) {\n throw new Error(name + ' not available on this browser');\n }\n return actual;\n };\n var Global$1 = { getOrDie: getOrDie };\n\n var Immutable = function () {\n var fields = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n fields[_i] = arguments[_i];\n }\n return function () {\n var values = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n values[_i] = arguments[_i];\n }\n if (fields.length !== values.length) {\n throw new Error('Wrong number of arguments to struct. Expected \"[' + fields.length + ']\", got ' + values.length + ' arguments');\n }\n var struct = {};\n each(fields, function (name, i) {\n struct[name] = constant(values[i]);\n });\n return struct;\n };\n };\n\n var node = function () {\n var f = Global$1.getOrDie('Node');\n return f;\n };\n var compareDocumentPosition = function (a, b, match) {\n return (a.compareDocumentPosition(b) & match) !== 0;\n };\n var documentPositionPreceding = function (a, b) {\n return compareDocumentPosition(a, b, node().DOCUMENT_POSITION_PRECEDING);\n };\n var documentPositionContainedBy = function (a, b) {\n return compareDocumentPosition(a, b, node().DOCUMENT_POSITION_CONTAINED_BY);\n };\n var Node = {\n documentPositionPreceding: documentPositionPreceding,\n documentPositionContainedBy: documentPositionContainedBy\n };\n\n var firstMatch = function (regexes, s) {\n for (var i = 0; i < regexes.length; i++) {\n var x = regexes[i];\n if (x.test(s)) {\n return x;\n }\n }\n return undefined;\n };\n var find$1 = function (regexes, agent) {\n var r = firstMatch(regexes, agent);\n if (!r) {\n return {\n major: 0,\n minor: 0\n };\n }\n var group = function (i) {\n return Number(agent.replace(r, '$' + i));\n };\n return nu(group(1), group(2));\n };\n var detect = function (versionRegexes, agent) {\n var cleanedAgent = String(agent).toLowerCase();\n if (versionRegexes.length === 0) {\n return unknown();\n }\n return find$1(versionRegexes, cleanedAgent);\n };\n var unknown = function () {\n return nu(0, 0);\n };\n var nu = function (major, minor) {\n return {\n major: major,\n minor: minor\n };\n };\n var Version = {\n nu: nu,\n detect: detect,\n unknown: unknown\n };\n\n var edge = 'Edge';\n var chrome = 'Chrome';\n var ie = 'IE';\n var opera = 'Opera';\n var firefox = 'Firefox';\n var safari = 'Safari';\n var isBrowser = function (name, current) {\n return function () {\n return current === name;\n };\n };\n var unknown$1 = function () {\n return nu$1({\n current: undefined,\n version: Version.unknown()\n });\n };\n var nu$1 = function (info) {\n var current = info.current;\n var version = info.version;\n return {\n current: current,\n version: version,\n isEdge: isBrowser(edge, current),\n isChrome: isBrowser(chrome, current),\n isIE: isBrowser(ie, current),\n isOpera: isBrowser(opera, current),\n isFirefox: isBrowser(firefox, current),\n isSafari: isBrowser(safari, current)\n };\n };\n var Browser = {\n unknown: unknown$1,\n nu: nu$1,\n edge: constant(edge),\n chrome: constant(chrome),\n ie: constant(ie),\n opera: constant(opera),\n firefox: constant(firefox),\n safari: constant(safari)\n };\n\n var windows$1 = 'Windows';\n var ios = 'iOS';\n var android = 'Android';\n var linux = 'Linux';\n var osx = 'OSX';\n var solaris = 'Solaris';\n var freebsd = 'FreeBSD';\n var isOS = function (name, current) {\n return function () {\n return current === name;\n };\n };\n var unknown$2 = function () {\n return nu$2({\n current: undefined,\n version: Version.unknown()\n });\n };\n var nu$2 = function (info) {\n var current = info.current;\n var version = info.version;\n return {\n current: current,\n version: version,\n isWindows: isOS(windows$1, current),\n isiOS: isOS(ios, current),\n isAndroid: isOS(android, current),\n isOSX: isOS(osx, current),\n isLinux: isOS(linux, current),\n isSolaris: isOS(solaris, current),\n isFreeBSD: isOS(freebsd, current)\n };\n };\n var OperatingSystem = {\n unknown: unknown$2,\n nu: nu$2,\n windows: constant(windows$1),\n ios: constant(ios),\n android: constant(android),\n linux: constant(linux),\n osx: constant(osx),\n solaris: constant(solaris),\n freebsd: constant(freebsd)\n };\n\n var DeviceType = function (os, browser, userAgent) {\n var isiPad = os.isiOS() && /ipad/i.test(userAgent) === true;\n var isiPhone = os.isiOS() && !isiPad;\n var isAndroid3 = os.isAndroid() && os.version.major === 3;\n var isAndroid4 = os.isAndroid() && os.version.major === 4;\n var isTablet = isiPad || isAndroid3 || isAndroid4 && /mobile/i.test(userAgent) === true;\n var isTouch = os.isiOS() || os.isAndroid();\n var isPhone = isTouch && !isTablet;\n var iOSwebview = browser.isSafari() && os.isiOS() && /safari/i.test(userAgent) === false;\n return {\n isiPad: constant(isiPad),\n isiPhone: constant(isiPhone),\n isTablet: constant(isTablet),\n isPhone: constant(isPhone),\n isTouch: constant(isTouch),\n isAndroid: os.isAndroid,\n isiOS: os.isiOS,\n isWebView: constant(iOSwebview)\n };\n };\n\n var detect$1 = function (candidates, userAgent) {\n var agent = String(userAgent).toLowerCase();\n return find(candidates, function (candidate) {\n return candidate.search(agent);\n });\n };\n var detectBrowser = function (browsers, userAgent) {\n return detect$1(browsers, userAgent).map(function (browser) {\n var version = Version.detect(browser.versionRegexes, userAgent);\n return {\n current: browser.name,\n version: version\n };\n });\n };\n var detectOs = function (oses, userAgent) {\n return detect$1(oses, userAgent).map(function (os) {\n var version = Version.detect(os.versionRegexes, userAgent);\n return {\n current: os.name,\n version: version\n };\n });\n };\n var UaString = {\n detectBrowser: detectBrowser,\n detectOs: detectOs\n };\n\n var contains = function (str, substr) {\n return str.indexOf(substr) !== -1;\n };\n\n var normalVersionRegex = /.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/;\n var checkContains = function (target) {\n return function (uastring) {\n return contains(uastring, target);\n };\n };\n var browsers = [\n {\n name: 'Edge',\n versionRegexes: [/.*?edge\\/ ?([0-9]+)\\.([0-9]+)$/],\n search: function (uastring) {\n return contains(uastring, 'edge/') && contains(uastring, 'chrome') && contains(uastring, 'safari') && contains(uastring, 'applewebkit');\n }\n },\n {\n name: 'Chrome',\n versionRegexes: [\n /.*?chrome\\/([0-9]+)\\.([0-9]+).*/,\n normalVersionRegex\n ],\n search: function (uastring) {\n return contains(uastring, 'chrome') && !contains(uastring, 'chromeframe');\n }\n },\n {\n name: 'IE',\n versionRegexes: [\n /.*?msie\\ ?([0-9]+)\\.([0-9]+).*/,\n /.*?rv:([0-9]+)\\.([0-9]+).*/\n ],\n search: function (uastring) {\n return contains(uastring, 'msie') || contains(uastring, 'trident');\n }\n },\n {\n name: 'Opera',\n versionRegexes: [\n normalVersionRegex,\n /.*?opera\\/([0-9]+)\\.([0-9]+).*/\n ],\n search: checkContains('opera')\n },\n {\n name: 'Firefox',\n versionRegexes: [/.*?firefox\\/\\ ?([0-9]+)\\.([0-9]+).*/],\n search: checkContains('firefox')\n },\n {\n name: 'Safari',\n versionRegexes: [\n normalVersionRegex,\n /.*?cpu os ([0-9]+)_([0-9]+).*/\n ],\n search: function (uastring) {\n return (contains(uastring, 'safari') || contains(uastring, 'mobile/')) && contains(uastring, 'applewebkit');\n }\n }\n ];\n var oses = [\n {\n name: 'Windows',\n search: checkContains('win'),\n versionRegexes: [/.*?windows\\ nt\\ ?([0-9]+)\\.([0-9]+).*/]\n },\n {\n name: 'iOS',\n search: function (uastring) {\n return contains(uastring, 'iphone') || contains(uastring, 'ipad');\n },\n versionRegexes: [\n /.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/,\n /.*cpu os ([0-9]+)_([0-9]+).*/,\n /.*cpu iphone os ([0-9]+)_([0-9]+).*/\n ]\n },\n {\n name: 'Android',\n search: checkContains('android'),\n versionRegexes: [/.*?android\\ ?([0-9]+)\\.([0-9]+).*/]\n },\n {\n name: 'OSX',\n search: checkContains('os x'),\n versionRegexes: [/.*?os\\ x\\ ?([0-9]+)_([0-9]+).*/]\n },\n {\n name: 'Linux',\n search: checkContains('linux'),\n versionRegexes: []\n },\n {\n name: 'Solaris',\n search: checkContains('sunos'),\n versionRegexes: []\n },\n {\n name: 'FreeBSD',\n search: checkContains('freebsd'),\n versionRegexes: []\n }\n ];\n var PlatformInfo = {\n browsers: constant(browsers),\n oses: constant(oses)\n };\n\n var detect$2 = function (userAgent) {\n var browsers = PlatformInfo.browsers();\n var oses = PlatformInfo.oses();\n var browser = UaString.detectBrowser(browsers, userAgent).fold(Browser.unknown, Browser.nu);\n var os = UaString.detectOs(oses, userAgent).fold(OperatingSystem.unknown, OperatingSystem.nu);\n var deviceType = DeviceType(os, browser, userAgent);\n return {\n browser: browser,\n os: os,\n deviceType: deviceType\n };\n };\n var PlatformDetection = { detect: detect$2 };\n\n var detect$3 = cached(function () {\n var userAgent = domGlobals.navigator.userAgent;\n return PlatformDetection.detect(userAgent);\n });\n var PlatformDetection$1 = { detect: detect$3 };\n\n var ELEMENT$1 = ELEMENT;\n var DOCUMENT$1 = DOCUMENT;\n var bypassSelector = function (dom) {\n return dom.nodeType !== ELEMENT$1 && dom.nodeType !== DOCUMENT$1 || dom.childElementCount === 0;\n };\n var all = function (selector, scope) {\n var base = scope === undefined ? domGlobals.document : scope.dom();\n return bypassSelector(base) ? [] : map(base.querySelectorAll(selector), Element.fromDom);\n };\n var one = function (selector, scope) {\n var base = scope === undefined ? domGlobals.document : scope.dom();\n return bypassSelector(base) ? Option.none() : Option.from(base.querySelector(selector)).map(Element.fromDom);\n };\n\n var regularContains = function (e1, e2) {\n var d1 = e1.dom();\n var d2 = e2.dom();\n return d1 === d2 ? false : d1.contains(d2);\n };\n var ieContains = function (e1, e2) {\n return Node.documentPositionContainedBy(e1.dom(), e2.dom());\n };\n var browser = PlatformDetection$1.detect().browser;\n var contains$1 = browser.isIE() ? ieContains : regularContains;\n\n var spot = Immutable('element', 'offset');\n\n var descendants = function (scope, selector) {\n return all(selector, scope);\n };\n\n var trim = global$2.trim;\n var hasContentEditableState = function (value) {\n return function (node) {\n if (node && node.nodeType === 1) {\n if (node.contentEditable === value) {\n return true;\n }\n if (node.getAttribute('data-mce-contenteditable') === value) {\n return true;\n }\n }\n return false;\n };\n };\n var isContentEditableTrue = hasContentEditableState('true');\n var isContentEditableFalse = hasContentEditableState('false');\n var create = function (type, title, url, level, attach) {\n return {\n type: type,\n title: title,\n url: url,\n level: level,\n attach: attach\n };\n };\n var isChildOfContentEditableTrue = function (node) {\n while (node = node.parentNode) {\n var value = node.contentEditable;\n if (value && value !== 'inherit') {\n return isContentEditableTrue(node);\n }\n }\n return false;\n };\n var select = function (selector, root) {\n return map(descendants(Element.fromDom(root), selector), function (element) {\n return element.dom();\n });\n };\n var getElementText = function (elm) {\n return elm.innerText || elm.textContent;\n };\n var getOrGenerateId = function (elm) {\n return elm.id ? elm.id : generate('h');\n };\n var isAnchor = function (elm) {\n return elm && elm.nodeName === 'A' && (elm.id || elm.name);\n };\n var isValidAnchor = function (elm) {\n return isAnchor(elm) && isEditable(elm);\n };\n var isHeader = function (elm) {\n return elm && /^(H[1-6])$/.test(elm.nodeName);\n };\n var isEditable = function (elm) {\n return isChildOfContentEditableTrue(elm) && !isContentEditableFalse(elm);\n };\n var isValidHeader = function (elm) {\n return isHeader(elm) && isEditable(elm);\n };\n var getLevel = function (elm) {\n return isHeader(elm) ? parseInt(elm.nodeName.substr(1), 10) : 0;\n };\n var headerTarget = function (elm) {\n var headerId = getOrGenerateId(elm);\n var attach = function () {\n elm.id = headerId;\n };\n return create('header', getElementText(elm), '#' + headerId, getLevel(elm), attach);\n };\n var anchorTarget = function (elm) {\n var anchorId = elm.id || elm.name;\n var anchorText = getElementText(elm);\n return create('anchor', anchorText ? anchorText : '#' + anchorId, '#' + anchorId, 0, noop);\n };\n var getHeaderTargets = function (elms) {\n return map(filter(elms, isValidHeader), headerTarget);\n };\n var getAnchorTargets = function (elms) {\n return map(filter(elms, isValidAnchor), anchorTarget);\n };\n var getTargetElements = function (elm) {\n var elms = select('h1,h2,h3,h4,h5,h6,a:not([href])', elm);\n return elms;\n };\n var hasTitle = function (target) {\n return trim(target.title).length > 0;\n };\n var find$2 = function (elm) {\n var elms = getTargetElements(elm);\n return filter(getHeaderTargets(elms).concat(getAnchorTargets(elms)), hasTitle);\n };\n var LinkTargets = { find: find$2 };\n\n var getActiveEditor = function () {\n return window.tinymce ? window.tinymce.activeEditor : global$1.activeEditor;\n };\n var history = {};\n var HISTORY_LENGTH = 5;\n var clearHistory = function () {\n history = {};\n };\n var toMenuItem = function (target) {\n return {\n title: target.title,\n value: {\n title: { raw: target.title },\n url: target.url,\n attach: target.attach\n }\n };\n };\n var toMenuItems = function (targets) {\n return global$2.map(targets, toMenuItem);\n };\n var staticMenuItem = function (title, url) {\n return {\n title: title,\n value: {\n title: title,\n url: url,\n attach: noop\n }\n };\n };\n var isUniqueUrl = function (url, targets) {\n var foundTarget = exists(targets, function (target) {\n return target.url === url;\n });\n return !foundTarget;\n };\n var getSetting = function (editorSettings, name, defaultValue) {\n var value = name in editorSettings ? editorSettings[name] : defaultValue;\n return value === false ? null : value;\n };\n var createMenuItems = function (term, targets, fileType, editorSettings) {\n var separator = { title: '-' };\n var fromHistoryMenuItems = function (history) {\n var historyItems = history.hasOwnProperty(fileType) ? history[fileType] : [];\n var uniqueHistory = filter(historyItems, function (url) {\n return isUniqueUrl(url, targets);\n });\n return global$2.map(uniqueHistory, function (url) {\n return {\n title: url,\n value: {\n title: url,\n url: url,\n attach: noop\n }\n };\n });\n };\n var fromMenuItems = function (type) {\n var filteredTargets = filter(targets, function (target) {\n return target.type === type;\n });\n return toMenuItems(filteredTargets);\n };\n var anchorMenuItems = function () {\n var anchorMenuItems = fromMenuItems('anchor');\n var topAnchor = getSetting(editorSettings, 'anchor_top', '#top');\n var bottomAchor = getSetting(editorSettings, 'anchor_bottom', '#bottom');\n if (topAnchor !== null) {\n anchorMenuItems.unshift(staticMenuItem('' + self.settings.title + '' : '') + '' + (self.settings.html || '') + layout.renderHtml(self) + '' + '', topAnchor));\n }\n if (bottomAchor !== null) {\n anchorMenuItems.push(staticMenuItem(' ', bottomAchor));\n }\n return anchorMenuItems;\n };\n var join = function (items) {\n return foldl(items, function (a, b) {\n var bothEmpty = a.length === 0 || b.length === 0;\n return bothEmpty ? a.concat(b) : a.concat(separator, b);\n }, []);\n };\n if (editorSettings.typeahead_urls === false) {\n return [];\n }\n return fileType === 'file' ? join([\n filterByQuery(term, fromHistoryMenuItems(history)),\n filterByQuery(term, fromMenuItems('header')),\n filterByQuery(term, anchorMenuItems())\n ]) : filterByQuery(term, fromHistoryMenuItems(history));\n };\n var addToHistory = function (url, fileType) {\n var items = history[fileType];\n if (!/^https?/.test(url)) {\n return;\n }\n if (items) {\n if (indexOf(items, url).isNone()) {\n history[fileType] = items.slice(0, HISTORY_LENGTH).concat(url);\n }\n } else {\n history[fileType] = [url];\n }\n };\n var filterByQuery = function (term, menuItems) {\n var lowerCaseTerm = term.toLowerCase();\n var result = global$2.grep(menuItems, function (item) {\n return item.title.toLowerCase().indexOf(lowerCaseTerm) !== -1;\n });\n return result.length === 1 && result[0].title === term ? [] : result;\n };\n var getTitle = function (linkDetails) {\n var title = linkDetails.title;\n return title.raw ? title.raw : title;\n };\n var setupAutoCompleteHandler = function (ctrl, editorSettings, bodyElm, fileType) {\n var autocomplete = function (term) {\n var linkTargets = LinkTargets.find(bodyElm);\n var menuItems = createMenuItems(term, linkTargets, fileType, editorSettings);\n ctrl.showAutoComplete(menuItems, term);\n };\n ctrl.on('autocomplete', function () {\n autocomplete(ctrl.value());\n });\n ctrl.on('selectitem', function (e) {\n var linkDetails = e.value;\n ctrl.value(linkDetails.url);\n var title = getTitle(linkDetails);\n if (fileType === 'image') {\n ctrl.fire('change', {\n meta: {\n alt: title,\n attach: linkDetails.attach\n }\n });\n } else {\n ctrl.fire('change', {\n meta: {\n text: title,\n attach: linkDetails.attach\n }\n });\n }\n ctrl.focus();\n });\n ctrl.on('click', function (e) {\n if (ctrl.value().length === 0 && e.target.nodeName === 'INPUT') {\n autocomplete('');\n }\n });\n ctrl.on('PostRender', function () {\n ctrl.getRoot().on('submit', function (e) {\n if (!e.isDefaultPrevented()) {\n addToHistory(ctrl.value(), fileType);\n }\n });\n });\n };\n var statusToUiState = function (result) {\n var status = result.status, message = result.message;\n if (status === 'valid') {\n return {\n status: 'ok',\n message: message\n };\n } else if (status === 'unknown') {\n return {\n status: 'warn',\n message: message\n };\n } else if (status === 'invalid') {\n return {\n status: 'warn',\n message: message\n };\n } else {\n return {\n status: 'none',\n message: ''\n };\n }\n };\n var setupLinkValidatorHandler = function (ctrl, editorSettings, fileType) {\n var validatorHandler = editorSettings.filepicker_validator_handler;\n if (validatorHandler) {\n var validateUrl_1 = function (url) {\n if (url.length === 0) {\n ctrl.statusLevel('none');\n return;\n }\n validatorHandler({\n url: url,\n type: fileType\n }, function (result) {\n var uiState = statusToUiState(result);\n ctrl.statusMessage(uiState.message);\n ctrl.statusLevel(uiState.status);\n });\n };\n ctrl.state.on('change:value', function (e) {\n validateUrl_1(e.value);\n });\n }\n };\n var FilePicker = ComboBox.extend({\n Statics: { clearHistory: clearHistory },\n init: function (settings) {\n var self = this, editor = getActiveEditor(), editorSettings = editor.settings;\n var actionCallback, fileBrowserCallback, fileBrowserCallbackTypes;\n var fileType = settings.filetype;\n settings.spellcheck = false;\n fileBrowserCallbackTypes = editorSettings.file_picker_types || editorSettings.file_browser_callback_types;\n if (fileBrowserCallbackTypes) {\n fileBrowserCallbackTypes = global$2.makeMap(fileBrowserCallbackTypes, /[, ]/);\n }\n if (!fileBrowserCallbackTypes || fileBrowserCallbackTypes[fileType]) {\n fileBrowserCallback = editorSettings.file_picker_callback;\n if (fileBrowserCallback && (!fileBrowserCallbackTypes || fileBrowserCallbackTypes[fileType])) {\n actionCallback = function () {\n var meta = self.fire('beforecall').meta;\n meta = global$2.extend({ filetype: fileType }, meta);\n fileBrowserCallback.call(editor, function (value, meta) {\n self.value(value).fire('change', { meta: meta });\n }, self.value(), meta);\n };\n } else {\n fileBrowserCallback = editorSettings.file_browser_callback;\n if (fileBrowserCallback && (!fileBrowserCallbackTypes || fileBrowserCallbackTypes[fileType])) {\n actionCallback = function () {\n fileBrowserCallback(self.getEl('inp').id, self.value(), fileType, window);\n };\n }\n }\n }\n if (actionCallback) {\n settings.icon = 'browse';\n settings.onaction = actionCallback;\n }\n self._super(settings);\n self.classes.add('filepicker');\n setupAutoCompleteHandler(self, editorSettings, editor.getBody(), fileType);\n setupLinkValidatorHandler(self, editorSettings, fileType);\n }\n });\n\n var FitLayout = AbsoluteLayout.extend({\n recalc: function (container) {\n var contLayoutRect = container.layoutRect(), paddingBox = container.paddingBox;\n container.items().filter(':visible').each(function (ctrl) {\n ctrl.layoutRect({\n x: paddingBox.left,\n y: paddingBox.top,\n w: contLayoutRect.innerW - paddingBox.right - paddingBox.left,\n h: contLayoutRect.innerH - paddingBox.top - paddingBox.bottom\n });\n if (ctrl.recalc) {\n ctrl.recalc();\n }\n });\n }\n });\n\n var FlexLayout = AbsoluteLayout.extend({\n recalc: function (container) {\n var i, l, items, contLayoutRect, contPaddingBox, contSettings, align, pack, spacing, totalFlex, availableSpace, direction;\n var ctrl, ctrlLayoutRect, ctrlSettings, flex;\n var maxSizeItems = [];\n var size, maxSize, ratio, rect, pos, maxAlignEndPos;\n var sizeName, minSizeName, posName, maxSizeName, beforeName, innerSizeName, deltaSizeName, contentSizeName;\n var alignAxisName, alignInnerSizeName, alignSizeName, alignMinSizeName, alignBeforeName, alignAfterName;\n var alignDeltaSizeName, alignContentSizeName;\n var max = Math.max, min = Math.min;\n items = container.items().filter(':visible');\n contLayoutRect = container.layoutRect();\n contPaddingBox = container.paddingBox;\n contSettings = container.settings;\n direction = container.isRtl() ? contSettings.direction || 'row-reversed' : contSettings.direction;\n align = contSettings.align;\n pack = container.isRtl() ? contSettings.pack || 'end' : contSettings.pack;\n spacing = contSettings.spacing || 0;\n if (direction === 'row-reversed' || direction === 'column-reverse') {\n items = items.set(items.toArray().reverse());\n direction = direction.split('-')[0];\n }\n if (direction === 'column') {\n posName = 'y';\n sizeName = 'h';\n minSizeName = 'minH';\n maxSizeName = 'maxH';\n innerSizeName = 'innerH';\n beforeName = 'top';\n deltaSizeName = 'deltaH';\n contentSizeName = 'contentH';\n alignBeforeName = 'left';\n alignSizeName = 'w';\n alignAxisName = 'x';\n alignInnerSizeName = 'innerW';\n alignMinSizeName = 'minW';\n alignAfterName = 'right';\n alignDeltaSizeName = 'deltaW';\n alignContentSizeName = 'contentW';\n } else {\n posName = 'x';\n sizeName = 'w';\n minSizeName = 'minW';\n maxSizeName = 'maxW';\n innerSizeName = 'innerW';\n beforeName = 'left';\n deltaSizeName = 'deltaW';\n contentSizeName = 'contentW';\n alignBeforeName = 'top';\n alignSizeName = 'h';\n alignAxisName = 'y';\n alignInnerSizeName = 'innerH';\n alignMinSizeName = 'minH';\n alignAfterName = 'bottom';\n alignDeltaSizeName = 'deltaH';\n alignContentSizeName = 'contentH';\n }\n availableSpace = contLayoutRect[innerSizeName] - contPaddingBox[beforeName] - contPaddingBox[beforeName];\n maxAlignEndPos = totalFlex = 0;\n for (i = 0, l = items.length; i < l; i++) {\n ctrl = items[i];\n ctrlLayoutRect = ctrl.layoutRect();\n ctrlSettings = ctrl.settings;\n flex = ctrlSettings.flex;\n availableSpace -= i < l - 1 ? spacing : 0;\n if (flex > 0) {\n totalFlex += flex;\n if (ctrlLayoutRect[maxSizeName]) {\n maxSizeItems.push(ctrl);\n }\n ctrlLayoutRect.flex = flex;\n }\n availableSpace -= ctrlLayoutRect[minSizeName];\n size = contPaddingBox[alignBeforeName] + ctrlLayoutRect[alignMinSizeName] + contPaddingBox[alignAfterName];\n if (size > maxAlignEndPos) {\n maxAlignEndPos = size;\n }\n }\n rect = {};\n if (availableSpace < 0) {\n rect[minSizeName] = contLayoutRect[minSizeName] - availableSpace + contLayoutRect[deltaSizeName];\n } else {\n rect[minSizeName] = contLayoutRect[innerSizeName] - availableSpace + contLayoutRect[deltaSizeName];\n }\n rect[alignMinSizeName] = maxAlignEndPos + contLayoutRect[alignDeltaSizeName];\n rect[contentSizeName] = contLayoutRect[innerSizeName] - availableSpace;\n rect[alignContentSizeName] = maxAlignEndPos;\n rect.minW = min(rect.minW, contLayoutRect.maxW);\n rect.minH = min(rect.minH, contLayoutRect.maxH);\n rect.minW = max(rect.minW, contLayoutRect.startMinWidth);\n rect.minH = max(rect.minH, contLayoutRect.startMinHeight);\n if (contLayoutRect.autoResize && (rect.minW !== contLayoutRect.minW || rect.minH !== contLayoutRect.minH)) {\n rect.w = rect.minW;\n rect.h = rect.minH;\n container.layoutRect(rect);\n this.recalc(container);\n if (container._lastRect === null) {\n var parentCtrl = container.parent();\n if (parentCtrl) {\n parentCtrl._lastRect = null;\n parentCtrl.recalc();\n }\n }\n return;\n }\n ratio = availableSpace / totalFlex;\n for (i = 0, l = maxSizeItems.length; i < l; i++) {\n ctrl = maxSizeItems[i];\n ctrlLayoutRect = ctrl.layoutRect();\n maxSize = ctrlLayoutRect[maxSizeName];\n size = ctrlLayoutRect[minSizeName] + ctrlLayoutRect.flex * ratio;\n if (size > maxSize) {\n availableSpace -= ctrlLayoutRect[maxSizeName] - ctrlLayoutRect[minSizeName];\n totalFlex -= ctrlLayoutRect.flex;\n ctrlLayoutRect.flex = 0;\n ctrlLayoutRect.maxFlexSize = maxSize;\n } else {\n ctrlLayoutRect.maxFlexSize = 0;\n }\n }\n ratio = availableSpace / totalFlex;\n pos = contPaddingBox[beforeName];\n rect = {};\n if (totalFlex === 0) {\n if (pack === 'end') {\n pos = availableSpace + contPaddingBox[beforeName];\n } else if (pack === 'center') {\n pos = Math.round(contLayoutRect[innerSizeName] / 2 - (contLayoutRect[innerSizeName] - availableSpace) / 2) + contPaddingBox[beforeName];\n if (pos < 0) {\n pos = contPaddingBox[beforeName];\n }\n } else if (pack === 'justify') {\n pos = contPaddingBox[beforeName];\n spacing = Math.floor(availableSpace / (items.length - 1));\n }\n }\n rect[alignAxisName] = contPaddingBox[alignBeforeName];\n for (i = 0, l = items.length; i < l; i++) {\n ctrl = items[i];\n ctrlLayoutRect = ctrl.layoutRect();\n size = ctrlLayoutRect.maxFlexSize || ctrlLayoutRect[minSizeName];\n if (align === 'center') {\n rect[alignAxisName] = Math.round(contLayoutRect[alignInnerSizeName] / 2 - ctrlLayoutRect[alignSizeName] / 2);\n } else if (align === 'stretch') {\n rect[alignSizeName] = max(ctrlLayoutRect[alignMinSizeName] || 0, contLayoutRect[alignInnerSizeName] - contPaddingBox[alignBeforeName] - contPaddingBox[alignAfterName]);\n rect[alignAxisName] = contPaddingBox[alignBeforeName];\n } else if (align === 'end') {\n rect[alignAxisName] = contLayoutRect[alignInnerSizeName] - ctrlLayoutRect[alignSizeName] - contPaddingBox.top;\n }\n if (ctrlLayoutRect.flex > 0) {\n size += ctrlLayoutRect.flex * ratio;\n }\n rect[sizeName] = size;\n rect[posName] = pos;\n ctrl.layoutRect(rect);\n if (ctrl.recalc) {\n ctrl.recalc();\n }\n pos += size + spacing;\n }\n }\n });\n\n var FlowLayout = Layout.extend({\n Defaults: {\n containerClass: 'flow-layout',\n controlClass: 'flow-layout-item',\n endClass: 'break'\n },\n recalc: function (container) {\n container.items().filter(':visible').each(function (ctrl) {\n if (ctrl.recalc) {\n ctrl.recalc();\n }\n });\n },\n isNative: function () {\n return true;\n }\n });\n\n var descendant = function (scope, selector) {\n return one(selector, scope);\n };\n\n var toggleFormat = function (editor, fmt) {\n return function () {\n editor.execCommand('mceToggleFormat', false, fmt);\n };\n };\n var addFormatChangedListener = function (editor, name, changed) {\n var handler = function (state) {\n changed(state, name);\n };\n if (editor.formatter) {\n editor.formatter.formatChanged(name, handler);\n } else {\n editor.on('init', function () {\n editor.formatter.formatChanged(name, handler);\n });\n }\n };\n var postRenderFormatToggle = function (editor, name) {\n return function (e) {\n addFormatChangedListener(editor, name, function (state) {\n e.control.active(state);\n });\n };\n };\n\n var register = function (editor) {\n var alignFormats = [\n 'alignleft',\n 'aligncenter',\n 'alignright',\n 'alignjustify'\n ];\n var defaultAlign = 'alignleft';\n var alignMenuItems = [\n {\n text: 'Left',\n icon: 'alignleft',\n onclick: toggleFormat(editor, 'alignleft')\n },\n {\n text: 'Center',\n icon: 'aligncenter',\n onclick: toggleFormat(editor, 'aligncenter')\n },\n {\n text: 'Right',\n icon: 'alignright',\n onclick: toggleFormat(editor, 'alignright')\n },\n {\n text: 'Justify',\n icon: 'alignjustify',\n onclick: toggleFormat(editor, 'alignjustify')\n }\n ];\n editor.addMenuItem('align', {\n text: 'Align',\n menu: alignMenuItems\n });\n editor.addButton('align', {\n type: 'menubutton',\n icon: defaultAlign,\n menu: alignMenuItems,\n onShowMenu: function (e) {\n var menu = e.control.menu;\n global$2.each(alignFormats, function (formatName, idx) {\n menu.items().eq(idx).each(function (item) {\n return item.active(editor.formatter.match(formatName));\n });\n });\n },\n onPostRender: function (e) {\n var ctrl = e.control;\n global$2.each(alignFormats, function (formatName, idx) {\n addFormatChangedListener(editor, formatName, function (state) {\n ctrl.icon(defaultAlign);\n if (state) {\n ctrl.icon(formatName);\n }\n });\n });\n }\n });\n global$2.each({\n alignleft: [\n 'Align left',\n 'JustifyLeft'\n ],\n aligncenter: [\n 'Align center',\n 'JustifyCenter'\n ],\n alignright: [\n 'Align right',\n 'JustifyRight'\n ],\n alignjustify: [\n 'Justify',\n 'JustifyFull'\n ],\n alignnone: [\n 'No alignment',\n 'JustifyNone'\n ]\n }, function (item, name) {\n editor.addButton(name, {\n active: false,\n tooltip: item[0],\n cmd: item[1],\n onPostRender: postRenderFormatToggle(editor, name)\n });\n });\n };\n var Align = { register: register };\n\n var getFirstFont = function (fontFamily) {\n return fontFamily ? fontFamily.split(',')[0] : '';\n };\n var findMatchingValue = function (items, fontFamily) {\n var font = fontFamily ? fontFamily.toLowerCase() : '';\n var value;\n global$2.each(items, function (item) {\n if (item.value.toLowerCase() === font) {\n value = item.value;\n }\n });\n global$2.each(items, function (item) {\n if (!value && getFirstFont(item.value).toLowerCase() === getFirstFont(font).toLowerCase()) {\n value = item.value;\n }\n });\n return value;\n };\n var createFontNameListBoxChangeHandler = function (editor, items) {\n return function () {\n var self = this;\n self.state.set('value', null);\n editor.on('init nodeChange', function (e) {\n var fontFamily = editor.queryCommandValue('FontName');\n var match = findMatchingValue(items, fontFamily);\n self.value(match ? match : null);\n if (!match && fontFamily) {\n self.text(getFirstFont(fontFamily));\n }\n });\n };\n };\n var createFormats = function (formats) {\n formats = formats.replace(/;$/, '').split(';');\n var i = formats.length;\n while (i--) {\n formats[i] = formats[i].split('=');\n }\n return formats;\n };\n var getFontItems = function (editor) {\n var defaultFontsFormats = 'Andale Mono=andale mono,monospace;' + 'Arial=arial,helvetica,sans-serif;' + 'Arial Black=arial black,sans-serif;' + 'Book Antiqua=book antiqua,palatino,serif;' + 'Comic Sans MS=comic sans ms,sans-serif;' + 'Courier New=courier new,courier,monospace;' + 'Georgia=georgia,palatino,serif;' + 'Helvetica=helvetica,arial,sans-serif;' + 'Impact=impact,sans-serif;' + 'Symbol=symbol;' + 'Tahoma=tahoma,arial,helvetica,sans-serif;' + 'Terminal=terminal,monaco,monospace;' + 'Times New Roman=times new roman,times,serif;' + 'Trebuchet MS=trebuchet ms,geneva,sans-serif;' + 'Verdana=verdana,geneva,sans-serif;' + 'Webdings=webdings;' + 'Wingdings=wingdings,zapf dingbats';\n var fonts = createFormats(editor.settings.font_formats || defaultFontsFormats);\n return global$2.map(fonts, function (font) {\n return {\n text: { raw: font[0] },\n value: font[1],\n textStyle: font[1].indexOf('dings') === -1 ? 'font-family:' + font[1] : ''\n };\n });\n };\n var registerButtons = function (editor) {\n editor.addButton('fontselect', function () {\n var items = getFontItems(editor);\n return {\n type: 'listbox',\n text: 'Font Family',\n tooltip: 'Font Family',\n values: items,\n fixedWidth: true,\n onPostRender: createFontNameListBoxChangeHandler(editor, items),\n onselect: function (e) {\n if (e.control.settings.value) {\n editor.execCommand('FontName', false, e.control.settings.value);\n }\n }\n };\n });\n };\n var register$1 = function (editor) {\n registerButtons(editor);\n };\n var FontSelect = { register: register$1 };\n\n var round = function (number, precision) {\n var factor = Math.pow(10, precision);\n return Math.round(number * factor) / factor;\n };\n var toPt = function (fontSize, precision) {\n if (/[0-9.]+px$/.test(fontSize)) {\n return round(parseInt(fontSize, 10) * 72 / 96, precision || 0) + 'pt';\n }\n return fontSize;\n };\n var findMatchingValue$1 = function (items, pt, px) {\n var value;\n global$2.each(items, function (item) {\n if (item.value === px) {\n value = px;\n } else if (item.value === pt) {\n value = pt;\n }\n });\n return value;\n };\n var createFontSizeListBoxChangeHandler = function (editor, items) {\n return function () {\n var self = this;\n editor.on('init nodeChange', function (e) {\n var px, pt, precision, match;\n px = editor.queryCommandValue('FontSize');\n if (px) {\n for (precision = 3; !match && precision >= 0; precision--) {\n pt = toPt(px, precision);\n match = findMatchingValue$1(items, pt, px);\n }\n }\n self.value(match ? match : null);\n if (!match) {\n self.text(pt);\n }\n });\n };\n };\n var getFontSizeItems = function (editor) {\n var defaultFontsizeFormats = '8pt 10pt 12pt 14pt 18pt 24pt 36pt';\n var fontsizeFormats = editor.settings.fontsize_formats || defaultFontsizeFormats;\n return global$2.map(fontsizeFormats.split(' '), function (item) {\n var text = item, value = item;\n var values = item.split('=');\n if (values.length > 1) {\n text = values[0];\n value = values[1];\n }\n return {\n text: text,\n value: value\n };\n });\n };\n var registerButtons$1 = function (editor) {\n editor.addButton('fontsizeselect', function () {\n var items = getFontSizeItems(editor);\n return {\n type: 'listbox',\n text: 'Font Sizes',\n tooltip: 'Font Sizes',\n values: items,\n fixedWidth: true,\n onPostRender: createFontSizeListBoxChangeHandler(editor, items),\n onclick: function (e) {\n if (e.control.settings.value) {\n editor.execCommand('FontSize', false, e.control.settings.value);\n }\n }\n };\n });\n };\n var register$2 = function (editor) {\n registerButtons$1(editor);\n };\n var FontSizeSelect = { register: register$2 };\n\n var hideMenuObjects = function (editor, menu) {\n var count = menu.length;\n global$2.each(menu, function (item) {\n if (item.menu) {\n item.hidden = hideMenuObjects(editor, item.menu) === 0;\n }\n var formatName = item.format;\n if (formatName) {\n item.hidden = !editor.formatter.canApply(formatName);\n }\n if (item.hidden) {\n count--;\n }\n });\n return count;\n };\n var hideFormatMenuItems = function (editor, menu) {\n var count = menu.items().length;\n menu.items().each(function (item) {\n if (item.menu) {\n item.visible(hideFormatMenuItems(editor, item.menu) > 0);\n }\n if (!item.menu && item.settings.menu) {\n item.visible(hideMenuObjects(editor, item.settings.menu) > 0);\n }\n var formatName = item.settings.format;\n if (formatName) {\n item.visible(editor.formatter.canApply(formatName));\n }\n if (!item.visible()) {\n count--;\n }\n });\n return count;\n };\n var createFormatMenu = function (editor) {\n var count = 0;\n var newFormats = [];\n var defaultStyleFormats = [\n {\n title: 'Headings',\n items: [\n {\n title: 'Heading 1',\n format: 'h1'\n },\n {\n title: 'Heading 2',\n format: 'h2'\n },\n {\n title: 'Heading 3',\n format: 'h3'\n },\n {\n title: 'Heading 4',\n format: 'h4'\n },\n {\n title: 'Heading 5',\n format: 'h5'\n },\n {\n title: 'Heading 6',\n format: 'h6'\n }\n ]\n },\n {\n title: 'Inline',\n items: [\n {\n title: 'Bold',\n icon: 'bold',\n format: 'bold'\n },\n {\n title: 'Italic',\n icon: 'italic',\n format: 'italic'\n },\n {\n title: 'Underline',\n icon: 'underline',\n format: 'underline'\n },\n {\n title: 'Strikethrough',\n icon: 'strikethrough',\n format: 'strikethrough'\n },\n {\n title: 'Superscript',\n icon: 'superscript',\n format: 'superscript'\n },\n {\n title: 'Subscript',\n icon: 'subscript',\n format: 'subscript'\n },\n {\n title: 'Code',\n icon: 'code',\n format: 'code'\n }\n ]\n },\n {\n title: 'Blocks',\n items: [\n {\n title: 'Paragraph',\n format: 'p'\n },\n {\n title: 'Blockquote',\n format: 'blockquote'\n },\n {\n title: 'Div',\n format: 'div'\n },\n {\n title: 'Pre',\n format: 'pre'\n }\n ]\n },\n {\n title: 'Alignment',\n items: [\n {\n title: 'Left',\n icon: 'alignleft',\n format: 'alignleft'\n },\n {\n title: 'Center',\n icon: 'aligncenter',\n format: 'aligncenter'\n },\n {\n title: 'Right',\n icon: 'alignright',\n format: 'alignright'\n },\n {\n title: 'Justify',\n icon: 'alignjustify',\n format: 'alignjustify'\n }\n ]\n }\n ];\n var createMenu = function (formats) {\n var menu = [];\n if (!formats) {\n return;\n }\n global$2.each(formats, function (format) {\n var menuItem = {\n text: format.title,\n icon: format.icon\n };\n if (format.items) {\n menuItem.menu = createMenu(format.items);\n } else {\n var formatName = format.format || 'custom' + count++;\n if (!format.format) {\n format.name = formatName;\n newFormats.push(format);\n }\n menuItem.format = formatName;\n menuItem.cmd = format.cmd;\n }\n menu.push(menuItem);\n });\n return menu;\n };\n var createStylesMenu = function () {\n var menu;\n if (editor.settings.style_formats_merge) {\n if (editor.settings.style_formats) {\n menu = createMenu(defaultStyleFormats.concat(editor.settings.style_formats));\n } else {\n menu = createMenu(defaultStyleFormats);\n }\n } else {\n menu = createMenu(editor.settings.style_formats || defaultStyleFormats);\n }\n return menu;\n };\n editor.on('init', function () {\n global$2.each(newFormats, function (format) {\n editor.formatter.register(format.name, format);\n });\n });\n return {\n type: 'menu',\n items: createStylesMenu(),\n onPostRender: function (e) {\n editor.fire('renderFormatsMenu', { control: e.control });\n },\n itemDefaults: {\n preview: true,\n textStyle: function () {\n if (this.settings.format) {\n return editor.formatter.getCssText(this.settings.format);\n }\n },\n onPostRender: function () {\n var self = this;\n self.parent().on('show', function () {\n var formatName, command;\n formatName = self.settings.format;\n if (formatName) {\n self.disabled(!editor.formatter.canApply(formatName));\n self.active(editor.formatter.match(formatName));\n }\n command = self.settings.cmd;\n if (command) {\n self.active(editor.queryCommandState(command));\n }\n });\n },\n onclick: function () {\n if (this.settings.format) {\n toggleFormat(editor, this.settings.format)();\n }\n if (this.settings.cmd) {\n editor.execCommand(this.settings.cmd);\n }\n }\n }\n };\n };\n var registerMenuItems = function (editor, formatMenu) {\n editor.addMenuItem('formats', {\n text: 'Formats',\n menu: formatMenu\n });\n };\n var registerButtons$2 = function (editor, formatMenu) {\n editor.addButton('styleselect', {\n type: 'menubutton',\n text: 'Formats',\n menu: formatMenu,\n onShowMenu: function () {\n if (editor.settings.style_formats_autohide) {\n hideFormatMenuItems(editor, this.menu);\n }\n }\n });\n };\n var register$3 = function (editor) {\n var formatMenu = createFormatMenu(editor);\n registerMenuItems(editor, formatMenu);\n registerButtons$2(editor, formatMenu);\n };\n var Formats = { register: register$3 };\n\n var defaultBlocks = 'Paragraph=p;' + 'Heading 1=h1;' + 'Heading 2=h2;' + 'Heading 3=h3;' + 'Heading 4=h4;' + 'Heading 5=h5;' + 'Heading 6=h6;' + 'Preformatted=pre';\n var createFormats$1 = function (formats) {\n formats = formats.replace(/;$/, '').split(';');\n var i = formats.length;\n while (i--) {\n formats[i] = formats[i].split('=');\n }\n return formats;\n };\n var createListBoxChangeHandler = function (editor, items, formatName) {\n return function () {\n var self = this;\n editor.on('nodeChange', function (e) {\n var formatter = editor.formatter;\n var value = null;\n global$2.each(e.parents, function (node) {\n global$2.each(items, function (item) {\n if (formatName) {\n if (formatter.matchNode(node, formatName, { value: item.value })) {\n value = item.value;\n }\n } else {\n if (formatter.matchNode(node, item.value)) {\n value = item.value;\n }\n }\n if (value) {\n return false;\n }\n });\n if (value) {\n return false;\n }\n });\n self.value(value);\n });\n };\n };\n var lazyFormatSelectBoxItems = function (editor, blocks) {\n return function () {\n var items = [];\n global$2.each(blocks, function (block) {\n items.push({\n text: block[0],\n value: block[1],\n textStyle: function () {\n return editor.formatter.getCssText(block[1]);\n }\n });\n });\n return {\n type: 'listbox',\n text: blocks[0][0],\n values: items,\n fixedWidth: true,\n onselect: function (e) {\n if (e.control) {\n var fmt = e.control.value();\n toggleFormat(editor, fmt)();\n }\n },\n onPostRender: createListBoxChangeHandler(editor, items)\n };\n };\n };\n var buildMenuItems = function (editor, blocks) {\n return global$2.map(blocks, function (block) {\n return {\n text: block[0],\n onclick: toggleFormat(editor, block[1]),\n textStyle: function () {\n return editor.formatter.getCssText(block[1]);\n }\n };\n });\n };\n var register$4 = function (editor) {\n var blocks = createFormats$1(editor.settings.block_formats || defaultBlocks);\n editor.addMenuItem('blockformats', {\n text: 'Blocks',\n menu: buildMenuItems(editor, blocks)\n });\n editor.addButton('formatselect', lazyFormatSelectBoxItems(editor, blocks));\n };\n var FormatSelect = { register: register$4 };\n\n var createCustomMenuItems = function (editor, names) {\n var items, nameList;\n if (typeof names === 'string') {\n nameList = names.split(' ');\n } else if (global$2.isArray(names)) {\n return flatten(global$2.map(names, function (names) {\n return createCustomMenuItems(editor, names);\n }));\n }\n items = global$2.grep(nameList, function (name) {\n return name === '|' || name in editor.menuItems;\n });\n return global$2.map(items, function (name) {\n return name === '|' ? { text: '-' } : editor.menuItems[name];\n });\n };\n var isSeparator$1 = function (menuItem) {\n return menuItem && menuItem.text === '-';\n };\n var trimMenuItems = function (menuItems) {\n var menuItems2 = filter(menuItems, function (menuItem, i) {\n return !isSeparator$1(menuItem) || !isSeparator$1(menuItems[i - 1]);\n });\n return filter(menuItems2, function (menuItem, i) {\n return !isSeparator$1(menuItem) || i > 0 && i < menuItems2.length - 1;\n });\n };\n var createContextMenuItems = function (editor, context) {\n var outputMenuItems = [{ text: '-' }];\n var menuItems = global$2.grep(editor.menuItems, function (menuItem) {\n return menuItem.context === context;\n });\n global$2.each(menuItems, function (menuItem) {\n if (menuItem.separator === 'before') {\n outputMenuItems.push({ text: '|' });\n }\n if (menuItem.prependToContext) {\n outputMenuItems.unshift(menuItem);\n } else {\n outputMenuItems.push(menuItem);\n }\n if (menuItem.separator === 'after') {\n outputMenuItems.push({ text: '|' });\n }\n });\n return outputMenuItems;\n };\n var createInsertMenu = function (editor) {\n var insertButtonItems = editor.settings.insert_button_items;\n if (insertButtonItems) {\n return trimMenuItems(createCustomMenuItems(editor, insertButtonItems));\n } else {\n return trimMenuItems(createContextMenuItems(editor, 'insert'));\n }\n };\n var registerButtons$3 = function (editor) {\n editor.addButton('insert', {\n type: 'menubutton',\n icon: 'insert',\n menu: [],\n oncreatemenu: function () {\n this.menu.add(createInsertMenu(editor));\n this.menu.renderNew();\n }\n });\n };\n var register$5 = function (editor) {\n registerButtons$3(editor);\n };\n var InsertButton = { register: register$5 };\n\n var registerFormatButtons = function (editor) {\n global$2.each({\n bold: 'Bold',\n italic: 'Italic',\n underline: 'Underline',\n strikethrough: 'Strikethrough',\n subscript: 'Subscript',\n superscript: 'Superscript'\n }, function (text, name) {\n editor.addButton(name, {\n active: false,\n tooltip: text,\n onPostRender: postRenderFormatToggle(editor, name),\n onclick: toggleFormat(editor, name)\n });\n });\n };\n var registerCommandButtons = function (editor) {\n global$2.each({\n outdent: [\n 'Decrease indent',\n 'Outdent'\n ],\n indent: [\n 'Increase indent',\n 'Indent'\n ],\n cut: [\n 'Cut',\n 'Cut'\n ],\n copy: [\n 'Copy',\n 'Copy'\n ],\n paste: [\n 'Paste',\n 'Paste'\n ],\n help: [\n 'Help',\n 'mceHelp'\n ],\n selectall: [\n 'Select all',\n 'SelectAll'\n ],\n visualaid: [\n 'Visual aids',\n 'mceToggleVisualAid'\n ],\n newdocument: [\n 'New document',\n 'mceNewDocument'\n ],\n removeformat: [\n 'Clear formatting',\n 'RemoveFormat'\n ],\n remove: [\n 'Remove',\n 'Delete'\n ]\n }, function (item, name) {\n editor.addButton(name, {\n tooltip: item[0],\n cmd: item[1]\n });\n });\n };\n var registerCommandToggleButtons = function (editor) {\n global$2.each({\n blockquote: [\n 'Blockquote',\n 'mceBlockQuote'\n ],\n subscript: [\n 'Subscript',\n 'Subscript'\n ],\n superscript: [\n 'Superscript',\n 'Superscript'\n ]\n }, function (item, name) {\n editor.addButton(name, {\n active: false,\n tooltip: item[0],\n cmd: item[1],\n onPostRender: postRenderFormatToggle(editor, name)\n });\n });\n };\n var registerButtons$4 = function (editor) {\n registerFormatButtons(editor);\n registerCommandButtons(editor);\n registerCommandToggleButtons(editor);\n };\n var registerMenuItems$1 = function (editor) {\n global$2.each({\n bold: [\n 'Bold',\n 'Bold',\n 'Meta+B'\n ],\n italic: [\n 'Italic',\n 'Italic',\n 'Meta+I'\n ],\n underline: [\n 'Underline',\n 'Underline',\n 'Meta+U'\n ],\n strikethrough: [\n 'Strikethrough',\n 'Strikethrough'\n ],\n subscript: [\n 'Subscript',\n 'Subscript'\n ],\n superscript: [\n 'Superscript',\n 'Superscript'\n ],\n removeformat: [\n 'Clear formatting',\n 'RemoveFormat'\n ],\n newdocument: [\n 'New document',\n 'mceNewDocument'\n ],\n cut: [\n 'Cut',\n 'Cut',\n 'Meta+X'\n ],\n copy: [\n 'Copy',\n 'Copy',\n 'Meta+C'\n ],\n paste: [\n 'Paste',\n 'Paste',\n 'Meta+V'\n ],\n selectall: [\n 'Select all',\n 'SelectAll',\n 'Meta+A'\n ]\n }, function (item, name) {\n editor.addMenuItem(name, {\n text: item[0],\n icon: name,\n shortcut: item[2],\n cmd: item[1]\n });\n });\n editor.addMenuItem('codeformat', {\n text: 'Code',\n icon: 'code',\n onclick: toggleFormat(editor, 'code')\n });\n };\n var register$6 = function (editor) {\n registerButtons$4(editor);\n registerMenuItems$1(editor);\n };\n var SimpleControls = { register: register$6 };\n\n var toggleUndoRedoState = function (editor, type) {\n return function () {\n var self = this;\n var checkState = function () {\n var typeFn = type === 'redo' ? 'hasRedo' : 'hasUndo';\n return editor.undoManager ? editor.undoManager[typeFn]() : false;\n };\n self.disabled(!checkState());\n editor.on('Undo Redo AddUndo TypingUndo ClearUndos SwitchMode', function () {\n self.disabled(editor.readonly || !checkState());\n });\n };\n };\n var registerMenuItems$2 = function (editor) {\n editor.addMenuItem('undo', {\n text: 'Undo',\n icon: 'undo',\n shortcut: 'Meta+Z',\n onPostRender: toggleUndoRedoState(editor, 'undo'),\n cmd: 'undo'\n });\n editor.addMenuItem('redo', {\n text: 'Redo',\n icon: 'redo',\n shortcut: 'Meta+Y',\n onPostRender: toggleUndoRedoState(editor, 'redo'),\n cmd: 'redo'\n });\n };\n var registerButtons$5 = function (editor) {\n editor.addButton('undo', {\n tooltip: 'Undo',\n onPostRender: toggleUndoRedoState(editor, 'undo'),\n cmd: 'undo'\n });\n editor.addButton('redo', {\n tooltip: 'Redo',\n onPostRender: toggleUndoRedoState(editor, 'redo'),\n cmd: 'redo'\n });\n };\n var register$7 = function (editor) {\n registerMenuItems$2(editor);\n registerButtons$5(editor);\n };\n var UndoRedo = { register: register$7 };\n\n var toggleVisualAidState = function (editor) {\n return function () {\n var self = this;\n editor.on('VisualAid', function (e) {\n self.active(e.hasVisual);\n });\n self.active(editor.hasVisual);\n };\n };\n var registerMenuItems$3 = function (editor) {\n editor.addMenuItem('visualaid', {\n text: 'Visual aids',\n selectable: true,\n onPostRender: toggleVisualAidState(editor),\n cmd: 'mceToggleVisualAid'\n });\n };\n var register$8 = function (editor) {\n registerMenuItems$3(editor);\n };\n var VisualAid = { register: register$8 };\n\n var setupEnvironment = function () {\n Widget.tooltips = !global$8.iOS;\n Control$1.translate = function (text) {\n return global$1.translate(text);\n };\n };\n var setupUiContainer = function (editor) {\n if (editor.settings.ui_container) {\n global$8.container = descendant(Element.fromDom(domGlobals.document.body), editor.settings.ui_container).fold(constant(null), function (elm) {\n return elm.dom();\n });\n }\n };\n var setupRtlMode = function (editor) {\n if (editor.rtl) {\n Control$1.rtl = true;\n }\n };\n var setupHideFloatPanels = function (editor) {\n editor.on('mousedown progressstate', function () {\n FloatPanel.hideAll();\n });\n };\n var setup$1 = function (editor) {\n setupRtlMode(editor);\n setupHideFloatPanels(editor);\n setupUiContainer(editor);\n setupEnvironment();\n FormatSelect.register(editor);\n Align.register(editor);\n SimpleControls.register(editor);\n UndoRedo.register(editor);\n FontSizeSelect.register(editor);\n FontSelect.register(editor);\n Formats.register(editor);\n VisualAid.register(editor);\n InsertButton.register(editor);\n };\n var FormatControls = { setup: setup$1 };\n\n var GridLayout = AbsoluteLayout.extend({\n recalc: function (container) {\n var settings, rows, cols, items, contLayoutRect, width, height, rect, ctrlLayoutRect, ctrl, x, y, posX, posY, ctrlSettings, contPaddingBox, align, spacingH, spacingV, alignH, alignV, maxX, maxY;\n var colWidths = [];\n var rowHeights = [];\n var ctrlMinWidth, ctrlMinHeight, availableWidth, availableHeight, reverseRows, idx;\n settings = container.settings;\n items = container.items().filter(':visible');\n contLayoutRect = container.layoutRect();\n cols = settings.columns || Math.ceil(Math.sqrt(items.length));\n rows = Math.ceil(items.length / cols);\n spacingH = settings.spacingH || settings.spacing || 0;\n spacingV = settings.spacingV || settings.spacing || 0;\n alignH = settings.alignH || settings.align;\n alignV = settings.alignV || settings.align;\n contPaddingBox = container.paddingBox;\n reverseRows = 'reverseRows' in settings ? settings.reverseRows : container.isRtl();\n if (alignH && typeof alignH === 'string') {\n alignH = [alignH];\n }\n if (alignV && typeof alignV === 'string') {\n alignV = [alignV];\n }\n for (x = 0; x < cols; x++) {\n colWidths.push(0);\n }\n for (y = 0; y < rows; y++) {\n rowHeights.push(0);\n }\n for (y = 0; y < rows; y++) {\n for (x = 0; x < cols; x++) {\n ctrl = items[y * cols + x];\n if (!ctrl) {\n break;\n }\n ctrlLayoutRect = ctrl.layoutRect();\n ctrlMinWidth = ctrlLayoutRect.minW;\n ctrlMinHeight = ctrlLayoutRect.minH;\n colWidths[x] = ctrlMinWidth > colWidths[x] ? ctrlMinWidth : colWidths[x];\n rowHeights[y] = ctrlMinHeight > rowHeights[y] ? ctrlMinHeight : rowHeights[y];\n }\n }\n availableWidth = contLayoutRect.innerW - contPaddingBox.left - contPaddingBox.right;\n for (maxX = 0, x = 0; x < cols; x++) {\n maxX += colWidths[x] + (x > 0 ? spacingH : 0);\n availableWidth -= (x > 0 ? spacingH : 0) + colWidths[x];\n }\n availableHeight = contLayoutRect.innerH - contPaddingBox.top - contPaddingBox.bottom;\n for (maxY = 0, y = 0; y < rows; y++) {\n maxY += rowHeights[y] + (y > 0 ? spacingV : 0);\n availableHeight -= (y > 0 ? spacingV : 0) + rowHeights[y];\n }\n maxX += contPaddingBox.left + contPaddingBox.right;\n maxY += contPaddingBox.top + contPaddingBox.bottom;\n rect = {};\n rect.minW = maxX + (contLayoutRect.w - contLayoutRect.innerW);\n rect.minH = maxY + (contLayoutRect.h - contLayoutRect.innerH);\n rect.contentW = rect.minW - contLayoutRect.deltaW;\n rect.contentH = rect.minH - contLayoutRect.deltaH;\n rect.minW = Math.min(rect.minW, contLayoutRect.maxW);\n rect.minH = Math.min(rect.minH, contLayoutRect.maxH);\n rect.minW = Math.max(rect.minW, contLayoutRect.startMinWidth);\n rect.minH = Math.max(rect.minH, contLayoutRect.startMinHeight);\n if (contLayoutRect.autoResize && (rect.minW !== contLayoutRect.minW || rect.minH !== contLayoutRect.minH)) {\n rect.w = rect.minW;\n rect.h = rect.minH;\n container.layoutRect(rect);\n this.recalc(container);\n if (container._lastRect === null) {\n var parentCtrl = container.parent();\n if (parentCtrl) {\n parentCtrl._lastRect = null;\n parentCtrl.recalc();\n }\n }\n return;\n }\n if (contLayoutRect.autoResize) {\n rect = container.layoutRect(rect);\n rect.contentW = rect.minW - contLayoutRect.deltaW;\n rect.contentH = rect.minH - contLayoutRect.deltaH;\n }\n var flexV;\n if (settings.packV === 'start') {\n flexV = 0;\n } else {\n flexV = availableHeight > 0 ? Math.floor(availableHeight / rows) : 0;\n }\n var totalFlex = 0;\n var flexWidths = settings.flexWidths;\n if (flexWidths) {\n for (x = 0; x < flexWidths.length; x++) {\n totalFlex += flexWidths[x];\n }\n } else {\n totalFlex = cols;\n }\n var ratio = availableWidth / totalFlex;\n for (x = 0; x < cols; x++) {\n colWidths[x] += flexWidths ? flexWidths[x] * ratio : ratio;\n }\n posY = contPaddingBox.top;\n for (y = 0; y < rows; y++) {\n posX = contPaddingBox.left;\n height = rowHeights[y] + flexV;\n for (x = 0; x < cols; x++) {\n if (reverseRows) {\n idx = y * cols + cols - 1 - x;\n } else {\n idx = y * cols + x;\n }\n ctrl = items[idx];\n if (!ctrl) {\n break;\n }\n ctrlSettings = ctrl.settings;\n ctrlLayoutRect = ctrl.layoutRect();\n width = Math.max(colWidths[x], ctrlLayoutRect.startMinWidth);\n ctrlLayoutRect.x = posX;\n ctrlLayoutRect.y = posY;\n align = ctrlSettings.alignH || (alignH ? alignH[x] || alignH[0] : null);\n if (align === 'center') {\n ctrlLayoutRect.x = posX + width / 2 - ctrlLayoutRect.w / 2;\n } else if (align === 'right') {\n ctrlLayoutRect.x = posX + width - ctrlLayoutRect.w;\n } else if (align === 'stretch') {\n ctrlLayoutRect.w = width;\n }\n align = ctrlSettings.alignV || (alignV ? alignV[x] || alignV[0] : null);\n if (align === 'center') {\n ctrlLayoutRect.y = posY + height / 2 - ctrlLayoutRect.h / 2;\n } else if (align === 'bottom') {\n ctrlLayoutRect.y = posY + height - ctrlLayoutRect.h;\n } else if (align === 'stretch') {\n ctrlLayoutRect.h = height;\n }\n ctrl.layoutRect(ctrlLayoutRect);\n posX += width + spacingH;\n if (ctrl.recalc) {\n ctrl.recalc();\n }\n }\n posY += height + spacingV;\n }\n }\n });\n\n var Iframe$1 = Widget.extend({\n renderHtml: function () {\n var self = this;\n self.classes.add('iframe');\n self.canFocus = false;\n return '';\n },\n src: function (src) {\n this.getEl().src = src;\n },\n html: function (html, callback) {\n var self = this, body = this.getEl().contentWindow.document.body;\n if (!body) {\n global$7.setTimeout(function () {\n self.html(html);\n });\n } else {\n body.innerHTML = html;\n if (callback) {\n callback();\n }\n }\n return this;\n }\n });\n\n var InfoBox = Widget.extend({\n init: function (settings) {\n var self = this;\n self._super(settings);\n self.classes.add('widget').add('infobox');\n self.canFocus = false;\n },\n severity: function (level) {\n this.classes.remove('error');\n this.classes.remove('warning');\n this.classes.remove('success');\n this.classes.add(level);\n },\n help: function (state) {\n this.state.set('help', state);\n },\n renderHtml: function () {\n var self = this, prefix = self.classPrefix;\n return ' ' + '';\n },\n bindStates: function () {\n var self = this;\n self.state.on('change:text', function (e) {\n self.getEl('body').firstChild.data = self.encode(e.value);\n if (self.state.get('rendered')) {\n self.updateLayoutRect();\n }\n });\n self.state.on('change:help', function (e) {\n self.classes.toggle('has-help', e.value);\n if (self.state.get('rendered')) {\n self.updateLayoutRect();\n }\n });\n return self._super();\n }\n });\n\n var Label = Widget.extend({\n init: function (settings) {\n var self = this;\n self._super(settings);\n self.classes.add('widget').add('label');\n self.canFocus = false;\n if (settings.multiline) {\n self.classes.add('autoscroll');\n }\n if (settings.strong) {\n self.classes.add('strong');\n }\n },\n initLayoutRect: function () {\n var self = this, layoutRect = self._super();\n if (self.settings.multiline) {\n var size = funcs.getSize(self.getEl());\n if (size.width > layoutRect.maxW) {\n layoutRect.minW = layoutRect.maxW;\n self.classes.add('multiline');\n }\n self.getEl().style.width = layoutRect.minW + 'px';\n layoutRect.startMinH = layoutRect.h = layoutRect.minH = Math.min(layoutRect.maxH, funcs.getSize(self.getEl()).height);\n }\n return layoutRect;\n },\n repaint: function () {\n var self = this;\n if (!self.settings.multiline) {\n self.getEl().style.lineHeight = self.layoutRect().h + 'px';\n }\n return self._super();\n },\n severity: function (level) {\n this.classes.remove('error');\n this.classes.remove('warning');\n this.classes.remove('success');\n this.classes.add(level);\n },\n renderHtml: function () {\n var self = this;\n var targetCtrl, forName, forId = self.settings.forId;\n var text = self.settings.html ? self.settings.html : self.encode(self.state.get('text'));\n if (!forId && (forName = self.settings.forName)) {\n targetCtrl = self.getRoot().find('#' + forName)[0];\n if (targetCtrl) {\n forId = targetCtrl._id;\n }\n }\n if (forId) {\n return '';\n }\n return '' + text + '';\n },\n bindStates: function () {\n var self = this;\n self.state.on('change:text', function (e) {\n self.innerHtml(self.encode(e.value));\n if (self.state.get('rendered')) {\n self.updateLayoutRect();\n }\n });\n return self._super();\n }\n });\n\n var Toolbar$1 = Container.extend({\n Defaults: {\n role: 'toolbar',\n layout: 'flow'\n },\n init: function (settings) {\n var self = this;\n self._super(settings);\n self.classes.add('toolbar');\n },\n postRender: function () {\n var self = this;\n self.items().each(function (ctrl) {\n ctrl.classes.add('toolbar-item');\n });\n return self._super();\n }\n });\n\n var MenuBar = Toolbar$1.extend({\n Defaults: {\n role: 'menubar',\n containerCls: 'menubar',\n ariaRoot: true,\n defaults: { type: 'menubutton' }\n }\n });\n\n function isChildOf$1(node, parent) {\n while (node) {\n if (parent === node) {\n return true;\n }\n node = node.parentNode;\n }\n return false;\n }\n var MenuButton = Button.extend({\n init: function (settings) {\n var self = this;\n self._renderOpen = true;\n self._super(settings);\n settings = self.settings;\n self.classes.add('menubtn');\n if (settings.fixedWidth) {\n self.classes.add('fixed-width');\n }\n self.aria('haspopup', true);\n self.state.set('menu', settings.menu || self.render());\n },\n showMenu: function (toggle) {\n var self = this;\n var menu;\n if (self.menu && self.menu.visible() && toggle !== false) {\n return self.hideMenu();\n }\n if (!self.menu) {\n menu = self.state.get('menu') || [];\n self.classes.add('opened');\n if (menu.length) {\n menu = {\n type: 'menu',\n animate: true,\n items: menu\n };\n } else {\n menu.type = menu.type || 'menu';\n menu.animate = true;\n }\n if (!menu.renderTo) {\n self.menu = global$4.create(menu).parent(self).renderTo();\n } else {\n self.menu = menu.parent(self).show().renderTo();\n }\n self.fire('createmenu');\n self.menu.reflow();\n self.menu.on('cancel', function (e) {\n if (e.control.parent() === self.menu) {\n e.stopPropagation();\n self.focus();\n self.hideMenu();\n }\n });\n self.menu.on('select', function () {\n self.focus();\n });\n self.menu.on('show hide', function (e) {\n if (e.type === 'hide' && e.control.parent() === self) {\n self.classes.remove('opened-under');\n }\n if (e.control === self.menu) {\n self.activeMenu(e.type === 'show');\n self.classes.toggle('opened', e.type === 'show');\n }\n self.aria('expanded', e.type === 'show');\n }).fire('show');\n }\n self.menu.show();\n self.menu.layoutRect({ w: self.layoutRect().w });\n self.menu.repaint();\n self.menu.moveRel(self.getEl(), self.isRtl() ? [\n 'br-tr',\n 'tr-br'\n ] : [\n 'bl-tl',\n 'tl-bl'\n ]);\n var menuLayoutRect = self.menu.layoutRect();\n var selfBottom = self.$el.offset().top + self.layoutRect().h;\n if (selfBottom > menuLayoutRect.y && selfBottom < menuLayoutRect.y + menuLayoutRect.h) {\n self.classes.add('opened-under');\n }\n self.fire('showmenu');\n },\n hideMenu: function () {\n var self = this;\n if (self.menu) {\n self.menu.items().each(function (item) {\n if (item.hideMenu) {\n item.hideMenu();\n }\n });\n self.menu.hide();\n }\n },\n activeMenu: function (state) {\n this.classes.toggle('active', state);\n },\n renderHtml: function () {\n var self = this, id = self._id, prefix = self.classPrefix;\n var icon = self.settings.icon, image;\n var text = self.state.get('text');\n var textHtml = '';\n image = self.settings.image;\n if (image) {\n icon = 'none';\n if (typeof image !== 'string') {\n image = domGlobals.window.getSelection ? image[0] : image[1];\n }\n image = ' style=\"background-image: url(\\'' + image + '\\')\"';\n } else {\n image = '';\n }\n if (text) {\n self.classes.add('btn-has-text');\n textHtml = '' + self.encode(text) + '';\n }\n icon = self.settings.icon ? prefix + 'ico ' + prefix + 'i-' + icon : '';\n self.aria('role', self.parent() instanceof MenuBar ? 'menuitem' : 'button');\n return '' + self.encode(self.state.get('text')) + '' + '' + '' + '' + '';\n },\n postRender: function () {\n var self = this;\n self.on('click', function (e) {\n if (e.control === self && isChildOf$1(e.target, self.getEl())) {\n self.focus();\n self.showMenu(!e.aria);\n if (e.aria) {\n self.menu.items().filter(':visible')[0].focus();\n }\n }\n });\n self.on('mouseenter', function (e) {\n var overCtrl = e.control;\n var parent = self.parent();\n var hasVisibleSiblingMenu;\n if (overCtrl && parent && overCtrl instanceof MenuButton && overCtrl.parent() === parent) {\n parent.items().filter('MenuButton').each(function (ctrl) {\n if (ctrl.hideMenu && ctrl !== overCtrl) {\n if (ctrl.menu && ctrl.menu.visible()) {\n hasVisibleSiblingMenu = true;\n }\n ctrl.hideMenu();\n }\n });\n if (hasVisibleSiblingMenu) {\n overCtrl.focus();\n overCtrl.showMenu();\n }\n }\n });\n return self._super();\n },\n bindStates: function () {\n var self = this;\n self.state.on('change:menu', function () {\n if (self.menu) {\n self.menu.remove();\n }\n self.menu = null;\n });\n return self._super();\n },\n remove: function () {\n this._super();\n if (this.menu) {\n this.menu.remove();\n }\n }\n });\n\n var Menu = FloatPanel.extend({\n Defaults: {\n defaultType: 'menuitem',\n border: 1,\n layout: 'stack',\n role: 'application',\n bodyRole: 'menu',\n ariaRoot: true\n },\n init: function (settings) {\n var self = this;\n settings.autohide = true;\n settings.constrainToViewport = true;\n if (typeof settings.items === 'function') {\n settings.itemsFactory = settings.items;\n settings.items = [];\n }\n if (settings.itemDefaults) {\n var items = settings.items;\n var i = items.length;\n while (i--) {\n items[i] = global$2.extend({}, settings.itemDefaults, items[i]);\n }\n }\n self._super(settings);\n self.classes.add('menu');\n if (settings.animate && global$8.ie !== 11) {\n self.classes.add('animate');\n }\n },\n repaint: function () {\n this.classes.toggle('menu-align', true);\n this._super();\n this.getEl().style.height = '';\n this.getEl('body').style.height = '';\n return this;\n },\n cancel: function () {\n var self = this;\n self.hideAll();\n self.fire('select');\n },\n load: function () {\n var self = this;\n var time, factory;\n function hideThrobber() {\n if (self.throbber) {\n self.throbber.hide();\n self.throbber = null;\n }\n }\n factory = self.settings.itemsFactory;\n if (!factory) {\n return;\n }\n if (!self.throbber) {\n self.throbber = new Throbber(self.getEl('body'), true);\n if (self.items().length === 0) {\n self.throbber.show();\n self.fire('loading');\n } else {\n self.throbber.show(100, function () {\n self.items().remove();\n self.fire('loading');\n });\n }\n self.on('hide close', hideThrobber);\n }\n self.requestTime = time = new Date().getTime();\n self.settings.itemsFactory(function (items) {\n if (items.length === 0) {\n self.hide();\n return;\n }\n if (self.requestTime !== time) {\n return;\n }\n self.getEl().style.width = '';\n self.getEl('body').style.width = '';\n hideThrobber();\n self.items().remove();\n self.getEl('body').innerHTML = '';\n self.add(items);\n self.renderNew();\n self.fire('loaded');\n });\n },\n hideAll: function () {\n var self = this;\n this.find('menuitem').exec('hideMenu');\n return self._super();\n },\n preRender: function () {\n var self = this;\n self.items().each(function (ctrl) {\n var settings = ctrl.settings;\n if (settings.icon || settings.image || settings.selectable) {\n self._hasIcons = true;\n return false;\n }\n });\n if (self.settings.itemsFactory) {\n self.on('postrender', function () {\n if (self.settings.itemsFactory) {\n self.load();\n }\n });\n }\n self.on('show hide', function (e) {\n if (e.control === self) {\n if (e.type === 'show') {\n global$7.setTimeout(function () {\n self.classes.add('in');\n }, 0);\n } else {\n self.classes.remove('in');\n }\n }\n });\n return self._super();\n }\n });\n\n var ListBox = MenuButton.extend({\n init: function (settings) {\n var self = this;\n var values, selected, selectedText, lastItemCtrl;\n function setSelected(menuValues) {\n for (var i = 0; i < menuValues.length; i++) {\n selected = menuValues[i].selected || settings.value === menuValues[i].value;\n if (selected) {\n selectedText = selectedText || menuValues[i].text;\n self.state.set('value', menuValues[i].value);\n return true;\n }\n if (menuValues[i].menu) {\n if (setSelected(menuValues[i].menu)) {\n return true;\n }\n }\n }\n }\n self._super(settings);\n settings = self.settings;\n self._values = values = settings.values;\n if (values) {\n if (typeof settings.value !== 'undefined') {\n setSelected(values);\n }\n if (!selected && values.length > 0) {\n selectedText = values[0].text;\n self.state.set('value', values[0].value);\n }\n self.state.set('menu', values);\n }\n self.state.set('text', settings.text || selectedText);\n self.classes.add('listbox');\n self.on('select', function (e) {\n var ctrl = e.control;\n if (lastItemCtrl) {\n e.lastControl = lastItemCtrl;\n }\n if (settings.multiple) {\n ctrl.active(!ctrl.active());\n } else {\n self.value(e.control.value());\n }\n lastItemCtrl = ctrl;\n });\n },\n value: function (value) {\n if (arguments.length === 0) {\n return this.state.get('value');\n }\n if (typeof value === 'undefined') {\n return this;\n }\n function valueExists(values) {\n return exists(values, function (a) {\n return a.menu ? valueExists(a.menu) : a.value === value;\n });\n }\n if (this.settings.values) {\n if (valueExists(this.settings.values)) {\n this.state.set('value', value);\n } else if (value === null) {\n this.state.set('value', null);\n }\n } else {\n this.state.set('value', value);\n }\n return this;\n },\n bindStates: function () {\n var self = this;\n function activateMenuItemsByValue(menu, value) {\n if (menu instanceof Menu) {\n menu.items().each(function (ctrl) {\n if (!ctrl.hasMenus()) {\n ctrl.active(ctrl.value() === value);\n }\n });\n }\n }\n function getSelectedItem(menuValues, value) {\n var selectedItem;\n if (!menuValues) {\n return;\n }\n for (var i = 0; i < menuValues.length; i++) {\n if (menuValues[i].value === value) {\n return menuValues[i];\n }\n if (menuValues[i].menu) {\n selectedItem = getSelectedItem(menuValues[i].menu, value);\n if (selectedItem) {\n return selectedItem;\n }\n }\n }\n }\n self.on('show', function (e) {\n activateMenuItemsByValue(e.control, self.value());\n });\n self.state.on('change:value', function (e) {\n var selectedItem = getSelectedItem(self.state.get('menu'), e.value);\n if (selectedItem) {\n self.text(selectedItem.text);\n } else {\n self.text(self.settings.text);\n }\n });\n return self._super();\n }\n });\n\n var toggleTextStyle = function (ctrl, state) {\n var textStyle = ctrl._textStyle;\n if (textStyle) {\n var textElm = ctrl.getEl('text');\n textElm.setAttribute('style', textStyle);\n if (state) {\n textElm.style.color = '';\n textElm.style.backgroundColor = '';\n }\n }\n };\n var MenuItem = Widget.extend({\n Defaults: {\n border: 0,\n role: 'menuitem'\n },\n init: function (settings) {\n var self = this;\n var text;\n self._super(settings);\n settings = self.settings;\n self.classes.add('menu-item');\n if (settings.menu) {\n self.classes.add('menu-item-expand');\n }\n if (settings.preview) {\n self.classes.add('menu-item-preview');\n }\n text = self.state.get('text');\n if (text === '-' || text === '|') {\n self.classes.add('menu-item-sep');\n self.aria('role', 'separator');\n self.state.set('text', '-');\n }\n if (settings.selectable) {\n self.aria('role', 'menuitemcheckbox');\n self.classes.add('menu-item-checkbox');\n settings.icon = 'selected';\n }\n if (!settings.preview && !settings.selectable) {\n self.classes.add('menu-item-normal');\n }\n self.on('mousedown', function (e) {\n e.preventDefault();\n });\n if (settings.menu && !settings.ariaHideMenu) {\n self.aria('haspopup', true);\n }\n },\n hasMenus: function () {\n return !!this.settings.menu;\n },\n showMenu: function () {\n var self = this;\n var settings = self.settings;\n var menu;\n var parent = self.parent();\n parent.items().each(function (ctrl) {\n if (ctrl !== self) {\n ctrl.hideMenu();\n }\n });\n if (settings.menu) {\n menu = self.menu;\n if (!menu) {\n menu = settings.menu;\n if (menu.length) {\n menu = {\n type: 'menu',\n items: menu\n };\n } else {\n menu.type = menu.type || 'menu';\n }\n if (parent.settings.itemDefaults) {\n menu.itemDefaults = parent.settings.itemDefaults;\n }\n menu = self.menu = global$4.create(menu).parent(self).renderTo();\n menu.reflow();\n menu.on('cancel', function (e) {\n e.stopPropagation();\n self.focus();\n menu.hide();\n });\n menu.on('show hide', function (e) {\n if (e.control.items) {\n e.control.items().each(function (ctrl) {\n ctrl.active(ctrl.settings.selected);\n });\n }\n }).fire('show');\n menu.on('hide', function (e) {\n if (e.control === menu) {\n self.classes.remove('selected');\n }\n });\n menu.submenu = true;\n } else {\n menu.show();\n }\n menu._parentMenu = parent;\n menu.classes.add('menu-sub');\n var rel = menu.testMoveRel(self.getEl(), self.isRtl() ? [\n 'tl-tr',\n 'bl-br',\n 'tr-tl',\n 'br-bl'\n ] : [\n 'tr-tl',\n 'br-bl',\n 'tl-tr',\n 'bl-br'\n ]);\n menu.moveRel(self.getEl(), rel);\n menu.rel = rel;\n rel = 'menu-sub-' + rel;\n menu.classes.remove(menu._lastRel).add(rel);\n menu._lastRel = rel;\n self.classes.add('selected');\n self.aria('expanded', true);\n }\n },\n hideMenu: function () {\n var self = this;\n if (self.menu) {\n self.menu.items().each(function (item) {\n if (item.hideMenu) {\n item.hideMenu();\n }\n });\n self.menu.hide();\n self.aria('expanded', false);\n }\n return self;\n },\n renderHtml: function () {\n var self = this;\n var id = self._id;\n var settings = self.settings;\n var prefix = self.classPrefix;\n var text = self.state.get('text');\n var icon = self.settings.icon, image = '', shortcut = settings.shortcut;\n var url = self.encode(settings.url), iconHtml = '';\n function convertShortcut(shortcut) {\n var i, value, replace = {};\n if (global$8.mac) {\n replace = {\n alt: '⌥',\n ctrl: '⌘',\n shift: '⇧',\n meta: '⌘'\n };\n } else {\n replace = { meta: 'Ctrl' };\n }\n shortcut = shortcut.split('+');\n for (i = 0; i < shortcut.length; i++) {\n value = replace[shortcut[i].toLowerCase()];\n if (value) {\n shortcut[i] = value;\n }\n }\n return shortcut.join('+');\n }\n function escapeRegExp(str) {\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n }\n function markMatches(text) {\n var match = settings.match || '';\n return match ? text.replace(new RegExp(escapeRegExp(match), 'gi'), function (match) {\n return '!mce~match[' + match + ']mce~match!';\n }) : text;\n }\n function boldMatches(text) {\n return text.replace(new RegExp(escapeRegExp('!mce~match['), 'g'), '').replace(new RegExp(escapeRegExp(']mce~match!'), 'g'), '');\n }\n if (icon) {\n self.parent().classes.add('menu-has-icons');\n }\n if (settings.image) {\n image = ' style=\"background-image: url(\\'' + settings.image + '\\')\"';\n }\n if (shortcut) {\n shortcut = convertShortcut(shortcut);\n }\n icon = prefix + 'ico ' + prefix + 'i-' + (self.settings.icon || 'none');\n iconHtml = text !== '-' ? '\\xA0' : '';\n text = boldMatches(self.encode(markMatches(text)));\n url = boldMatches(self.encode(markMatches(url)));\n return '' + iconHtml + (text !== '-' ? '' + text + '' : '') + (shortcut ? '';\n },\n postRender: function () {\n var self = this, settings = self.settings;\n var textStyle = settings.textStyle;\n if (typeof textStyle === 'function') {\n textStyle = textStyle.call(this);\n }\n if (textStyle) {\n var textElm = self.getEl('text');\n if (textElm) {\n textElm.setAttribute('style', textStyle);\n self._textStyle = textStyle;\n }\n }\n self.on('mouseenter click', function (e) {\n if (e.control === self) {\n if (!settings.menu && e.type === 'click') {\n self.fire('select');\n global$7.requestAnimationFrame(function () {\n self.parent().hideAll();\n });\n } else {\n self.showMenu();\n if (e.aria) {\n self.menu.focus(true);\n }\n }\n }\n });\n self._super();\n return self;\n },\n hover: function () {\n var self = this;\n self.parent().items().each(function (ctrl) {\n ctrl.classes.remove('selected');\n });\n self.classes.toggle('selected', true);\n return self;\n },\n active: function (state) {\n toggleTextStyle(this, state);\n if (typeof state !== 'undefined') {\n this.aria('checked', state);\n }\n return this._super(state);\n },\n remove: function () {\n this._super();\n if (this.menu) {\n this.menu.remove();\n }\n }\n });\n\n var Radio = Checkbox.extend({\n Defaults: {\n classes: 'radio',\n role: 'radio'\n }\n });\n\n var ResizeHandle = Widget.extend({\n renderHtml: function () {\n var self = this, prefix = self.classPrefix;\n self.classes.add('resizehandle');\n if (self.settings.direction === 'both') {\n self.classes.add('resizehandle-both');\n }\n self.canFocus = false;\n return '' + shortcut + '' : '') + (settings.menu ? '' : '') + (url ? '' + url + '' : '') + '' + '' + '';\n },\n postRender: function () {\n var self = this;\n self._super();\n self.resizeDragHelper = new DragHelper(this._id, {\n start: function () {\n self.fire('ResizeStart');\n },\n drag: function (e) {\n if (self.settings.direction !== 'both') {\n e.deltaX = 0;\n }\n self.fire('Resize', e);\n },\n stop: function () {\n self.fire('ResizeEnd');\n }\n });\n },\n remove: function () {\n if (this.resizeDragHelper) {\n this.resizeDragHelper.destroy();\n }\n return this._super();\n }\n });\n\n function createOptions(options) {\n var strOptions = '';\n if (options) {\n for (var i = 0; i < options.length; i++) {\n strOptions += '';\n }\n }\n return strOptions;\n }\n var SelectBox = Widget.extend({\n Defaults: {\n classes: 'selectbox',\n role: 'selectbox',\n options: []\n },\n init: function (settings) {\n var self = this;\n self._super(settings);\n if (self.settings.size) {\n self.size = self.settings.size;\n }\n if (self.settings.options) {\n self._options = self.settings.options;\n }\n self.on('keydown', function (e) {\n var rootControl;\n if (e.keyCode === 13) {\n e.preventDefault();\n self.parents().reverse().each(function (ctrl) {\n if (ctrl.toJSON) {\n rootControl = ctrl;\n return false;\n }\n });\n self.fire('submit', { data: rootControl.toJSON() });\n }\n });\n },\n options: function (state) {\n if (!arguments.length) {\n return this.state.get('options');\n }\n this.state.set('options', state);\n return this;\n },\n renderHtml: function () {\n var self = this;\n var options, size = '';\n options = createOptions(self._options);\n if (self.size) {\n size = ' size = \"' + self.size + '\"';\n }\n return '';\n },\n bindStates: function () {\n var self = this;\n self.state.on('change:options', function (e) {\n self.getEl().innerHTML = createOptions(e.value);\n });\n return self._super();\n }\n });\n\n function constrain(value, minVal, maxVal) {\n if (value < minVal) {\n value = minVal;\n }\n if (value > maxVal) {\n value = maxVal;\n }\n return value;\n }\n function setAriaProp(el, name, value) {\n el.setAttribute('aria-' + name, value);\n }\n function updateSliderHandle(ctrl, value) {\n var maxHandlePos, shortSizeName, sizeName, stylePosName, styleValue, handleEl;\n if (ctrl.settings.orientation === 'v') {\n stylePosName = 'top';\n sizeName = 'height';\n shortSizeName = 'h';\n } else {\n stylePosName = 'left';\n sizeName = 'width';\n shortSizeName = 'w';\n }\n handleEl = ctrl.getEl('handle');\n maxHandlePos = (ctrl.layoutRect()[shortSizeName] || 100) - funcs.getSize(handleEl)[sizeName];\n styleValue = maxHandlePos * ((value - ctrl._minValue) / (ctrl._maxValue - ctrl._minValue)) + 'px';\n handleEl.style[stylePosName] = styleValue;\n handleEl.style.height = ctrl.layoutRect().h + 'px';\n setAriaProp(handleEl, 'valuenow', value);\n setAriaProp(handleEl, 'valuetext', '' + ctrl.settings.previewFilter(value));\n setAriaProp(handleEl, 'valuemin', ctrl._minValue);\n setAriaProp(handleEl, 'valuemax', ctrl._maxValue);\n }\n var Slider = Widget.extend({\n init: function (settings) {\n var self = this;\n if (!settings.previewFilter) {\n settings.previewFilter = function (value) {\n return Math.round(value * 100) / 100;\n };\n }\n self._super(settings);\n self.classes.add('slider');\n if (settings.orientation === 'v') {\n self.classes.add('vertical');\n }\n self._minValue = isNumber(settings.minValue) ? settings.minValue : 0;\n self._maxValue = isNumber(settings.maxValue) ? settings.maxValue : 100;\n self._initValue = self.state.get('value');\n },\n renderHtml: function () {\n var self = this, id = self._id, prefix = self.classPrefix;\n return '' + '' + '';\n },\n reset: function () {\n this.value(this._initValue).repaint();\n },\n postRender: function () {\n var self = this;\n var minValue, maxValue, screenCordName, stylePosName, sizeName, shortSizeName;\n function toFraction(min, max, val) {\n return (val + min) / (max - min);\n }\n function fromFraction(min, max, val) {\n return val * (max - min) - min;\n }\n function handleKeyboard(minValue, maxValue) {\n function alter(delta) {\n var value;\n value = self.value();\n value = fromFraction(minValue, maxValue, toFraction(minValue, maxValue, value) + delta * 0.05);\n value = constrain(value, minValue, maxValue);\n self.value(value);\n self.fire('dragstart', { value: value });\n self.fire('drag', { value: value });\n self.fire('dragend', { value: value });\n }\n self.on('keydown', function (e) {\n switch (e.keyCode) {\n case 37:\n case 38:\n alter(-1);\n break;\n case 39:\n case 40:\n alter(1);\n break;\n }\n });\n }\n function handleDrag(minValue, maxValue, handleEl) {\n var startPos, startHandlePos, maxHandlePos, handlePos, value;\n self._dragHelper = new DragHelper(self._id, {\n handle: self._id + '-handle',\n start: function (e) {\n startPos = e[screenCordName];\n startHandlePos = parseInt(self.getEl('handle').style[stylePosName], 10);\n maxHandlePos = (self.layoutRect()[shortSizeName] || 100) - funcs.getSize(handleEl)[sizeName];\n self.fire('dragstart', { value: value });\n },\n drag: function (e) {\n var delta = e[screenCordName] - startPos;\n handlePos = constrain(startHandlePos + delta, 0, maxHandlePos);\n handleEl.style[stylePosName] = handlePos + 'px';\n value = minValue + handlePos / maxHandlePos * (maxValue - minValue);\n self.value(value);\n self.tooltip().text('' + self.settings.previewFilter(value)).show().moveRel(handleEl, 'bc tc');\n self.fire('drag', { value: value });\n },\n stop: function () {\n self.tooltip().hide();\n self.fire('dragend', { value: value });\n }\n });\n }\n minValue = self._minValue;\n maxValue = self._maxValue;\n if (self.settings.orientation === 'v') {\n screenCordName = 'screenY';\n stylePosName = 'top';\n sizeName = 'height';\n shortSizeName = 'h';\n } else {\n screenCordName = 'screenX';\n stylePosName = 'left';\n sizeName = 'width';\n shortSizeName = 'w';\n }\n self._super();\n handleKeyboard(minValue, maxValue);\n handleDrag(minValue, maxValue, self.getEl('handle'));\n },\n repaint: function () {\n this._super();\n updateSliderHandle(this, this.value());\n },\n bindStates: function () {\n var self = this;\n self.state.on('change:value', function (e) {\n updateSliderHandle(self, e.value);\n });\n return self._super();\n }\n });\n\n var Spacer = Widget.extend({\n renderHtml: function () {\n var self = this;\n self.classes.add('spacer');\n self.canFocus = false;\n return '';\n }\n });\n\n var SplitButton = MenuButton.extend({\n Defaults: {\n classes: 'widget btn splitbtn',\n role: 'button'\n },\n repaint: function () {\n var self = this;\n var elm = self.getEl();\n var rect = self.layoutRect();\n var mainButtonElm, menuButtonElm;\n self._super();\n mainButtonElm = elm.firstChild;\n menuButtonElm = elm.lastChild;\n global$9(mainButtonElm).css({\n width: rect.w - funcs.getSize(menuButtonElm).width,\n height: rect.h - 2\n });\n global$9(menuButtonElm).css({ height: rect.h - 2 });\n return self;\n },\n activeMenu: function (state) {\n var self = this;\n global$9(self.getEl().lastChild).toggleClass(self.classPrefix + 'active', state);\n },\n renderHtml: function () {\n var self = this;\n var id = self._id;\n var prefix = self.classPrefix;\n var image;\n var icon = self.state.get('icon');\n var text = self.state.get('text');\n var settings = self.settings;\n var textHtml = '', ariaPressed;\n image = settings.image;\n if (image) {\n icon = 'none';\n if (typeof image !== 'string') {\n image = domGlobals.window.getSelection ? image[0] : image[1];\n }\n image = ' style=\"background-image: url(\\'' + image + '\\')\"';\n } else {\n image = '';\n }\n icon = settings.icon ? prefix + 'ico ' + prefix + 'i-' + icon : '';\n if (text) {\n self.classes.add('btn-has-text');\n textHtml = '' + self.encode(text) + '';\n }\n ariaPressed = typeof settings.active === 'boolean' ? ' aria-pressed=\"' + settings.active + '\"' : '';\n return '' + '' + '' + '';\n },\n postRender: function () {\n var self = this, onClickHandler = self.settings.onclick;\n self.on('click', function (e) {\n var node = e.target;\n if (e.control === this) {\n while (node) {\n if (e.aria && e.aria.key !== 'down' || node.nodeName === 'BUTTON' && node.className.indexOf('open') === -1) {\n e.stopImmediatePropagation();\n if (onClickHandler) {\n onClickHandler.call(this, e);\n }\n return;\n }\n node = node.parentNode;\n }\n }\n });\n delete self.settings.onclick;\n return self._super();\n }\n });\n\n var StackLayout = FlowLayout.extend({\n Defaults: {\n containerClass: 'stack-layout',\n controlClass: 'stack-layout-item',\n endClass: 'break'\n },\n isNative: function () {\n return true;\n }\n });\n\n var TabPanel = Panel.extend({\n Defaults: {\n layout: 'absolute',\n defaults: { type: 'panel' }\n },\n activateTab: function (idx) {\n var activeTabElm;\n if (this.activeTabId) {\n activeTabElm = this.getEl(this.activeTabId);\n global$9(activeTabElm).removeClass(this.classPrefix + 'active');\n activeTabElm.setAttribute('aria-selected', 'false');\n }\n this.activeTabId = 't' + idx;\n activeTabElm = this.getEl('t' + idx);\n activeTabElm.setAttribute('aria-selected', 'true');\n global$9(activeTabElm).addClass(this.classPrefix + 'active');\n this.items()[idx].show().fire('showtab');\n this.reflow();\n this.items().each(function (item, i) {\n if (idx !== i) {\n item.hide();\n }\n });\n },\n renderHtml: function () {\n var self = this;\n var layout = self._layout;\n var tabsHtml = '';\n var prefix = self.classPrefix;\n self.preRender();\n layout.preRender(self);\n self.items().each(function (ctrl, i) {\n var id = self._id + '-t' + i;\n ctrl.aria('role', 'tabpanel');\n ctrl.aria('labelledby', id);\n tabsHtml += '' + self.encode(ctrl.settings.title) + '';\n });\n return '' + '';\n },\n postRender: function () {\n var self = this;\n self._super();\n self.settings.activeTab = self.settings.activeTab || 0;\n self.activateTab(self.settings.activeTab);\n this.on('click', function (e) {\n var targetParent = e.target.parentNode;\n if (targetParent && targetParent.id === self._id + '-head') {\n var i = targetParent.childNodes.length;\n while (i--) {\n if (targetParent.childNodes[i] === e.target) {\n self.activateTab(i);\n }\n }\n }\n });\n },\n initLayoutRect: function () {\n var self = this;\n var rect, minW, minH;\n minW = funcs.getSize(self.getEl('head')).width;\n minW = minW < 0 ? 0 : minW;\n minH = 0;\n self.items().each(function (item) {\n minW = Math.max(minW, item.layoutRect().minW);\n minH = Math.max(minH, item.layoutRect().minH);\n });\n self.items().each(function (ctrl) {\n ctrl.settings.x = 0;\n ctrl.settings.y = 0;\n ctrl.settings.w = minW;\n ctrl.settings.h = minH;\n ctrl.layoutRect({\n x: 0,\n y: 0,\n w: minW,\n h: minH\n });\n });\n var headH = funcs.getSize(self.getEl('head')).height;\n self.settings.minWidth = minW;\n self.settings.minHeight = minH + headH;\n rect = self._super();\n rect.deltaH += headH;\n rect.innerH = rect.h - rect.deltaH;\n return rect;\n }\n });\n\n var TextBox = Widget.extend({\n init: function (settings) {\n var self = this;\n self._super(settings);\n self.classes.add('textbox');\n if (settings.multiline) {\n self.classes.add('multiline');\n } else {\n self.on('keydown', function (e) {\n var rootControl;\n if (e.keyCode === 13) {\n e.preventDefault();\n self.parents().reverse().each(function (ctrl) {\n if (ctrl.toJSON) {\n rootControl = ctrl;\n return false;\n }\n });\n self.fire('submit', { data: rootControl.toJSON() });\n }\n });\n self.on('keyup', function (e) {\n self.state.set('value', e.target.value);\n });\n }\n },\n repaint: function () {\n var self = this;\n var style, rect, borderBox, borderW, borderH = 0, lastRepaintRect;\n style = self.getEl().style;\n rect = self._layoutRect;\n lastRepaintRect = self._lastRepaintRect || {};\n var doc = domGlobals.document;\n if (!self.settings.multiline && doc.all && (!doc.documentMode || doc.documentMode <= 8)) {\n style.lineHeight = rect.h - borderH + 'px';\n }\n borderBox = self.borderBox;\n borderW = borderBox.left + borderBox.right + 8;\n borderH = borderBox.top + borderBox.bottom + (self.settings.multiline ? 8 : 0);\n if (rect.x !== lastRepaintRect.x) {\n style.left = rect.x + 'px';\n lastRepaintRect.x = rect.x;\n }\n if (rect.y !== lastRepaintRect.y) {\n style.top = rect.y + 'px';\n lastRepaintRect.y = rect.y;\n }\n if (rect.w !== lastRepaintRect.w) {\n style.width = rect.w - borderW + 'px';\n lastRepaintRect.w = rect.w;\n }\n if (rect.h !== lastRepaintRect.h) {\n style.height = rect.h - borderH + 'px';\n lastRepaintRect.h = rect.h;\n }\n self._lastRepaintRect = lastRepaintRect;\n self.fire('repaint', {}, false);\n return self;\n },\n renderHtml: function () {\n var self = this;\n var settings = self.settings;\n var attrs, elm;\n attrs = {\n id: self._id,\n hidefocus: '1'\n };\n global$2.each([\n 'rows',\n 'spellcheck',\n 'maxLength',\n 'size',\n 'readonly',\n 'min',\n 'max',\n 'step',\n 'list',\n 'pattern',\n 'placeholder',\n 'required',\n 'multiple'\n ], function (name) {\n attrs[name] = settings[name];\n });\n if (self.disabled()) {\n attrs.disabled = 'disabled';\n }\n if (settings.subtype) {\n attrs.type = settings.subtype;\n }\n elm = funcs.create(settings.multiline ? 'textarea' : 'input', attrs);\n elm.value = self.state.get('value');\n elm.className = self.classes.toString();\n return elm.outerHTML;\n },\n value: function (value) {\n if (arguments.length) {\n this.state.set('value', value);\n return this;\n }\n if (this.state.get('rendered')) {\n this.state.set('value', this.getEl().value);\n }\n return this.state.get('value');\n },\n postRender: function () {\n var self = this;\n self.getEl().value = self.state.get('value');\n self._super();\n self.$el.on('change', function (e) {\n self.state.set('value', e.target.value);\n self.fire('change', e);\n });\n },\n bindStates: function () {\n var self = this;\n self.state.on('change:value', function (e) {\n if (self.getEl().value !== e.value) {\n self.getEl().value = e.value;\n }\n });\n self.state.on('change:disabled', function (e) {\n self.getEl().disabled = e.value;\n });\n return self._super();\n },\n remove: function () {\n this.$el.off();\n this._super();\n }\n });\n\n var getApi = function () {\n return {\n Selector: Selector,\n Collection: Collection$2,\n ReflowQueue: ReflowQueue,\n Control: Control$1,\n Factory: global$4,\n KeyboardNavigation: KeyboardNavigation,\n Container: Container,\n DragHelper: DragHelper,\n Scrollable: Scrollable,\n Panel: Panel,\n Movable: Movable,\n Resizable: Resizable,\n FloatPanel: FloatPanel,\n Window: Window,\n MessageBox: MessageBox,\n Tooltip: Tooltip,\n Widget: Widget,\n Progress: Progress,\n Notification: Notification,\n Layout: Layout,\n AbsoluteLayout: AbsoluteLayout,\n Button: Button,\n ButtonGroup: ButtonGroup,\n Checkbox: Checkbox,\n ComboBox: ComboBox,\n ColorBox: ColorBox,\n PanelButton: PanelButton,\n ColorButton: ColorButton,\n ColorPicker: ColorPicker,\n Path: Path,\n ElementPath: ElementPath,\n FormItem: FormItem,\n Form: Form,\n FieldSet: FieldSet,\n FilePicker: FilePicker,\n FitLayout: FitLayout,\n FlexLayout: FlexLayout,\n FlowLayout: FlowLayout,\n FormatControls: FormatControls,\n GridLayout: GridLayout,\n Iframe: Iframe$1,\n InfoBox: InfoBox,\n Label: Label,\n Toolbar: Toolbar$1,\n MenuBar: MenuBar,\n MenuButton: MenuButton,\n MenuItem: MenuItem,\n Throbber: Throbber,\n Menu: Menu,\n ListBox: ListBox,\n Radio: Radio,\n ResizeHandle: ResizeHandle,\n SelectBox: SelectBox,\n Slider: Slider,\n Spacer: Spacer,\n SplitButton: SplitButton,\n StackLayout: StackLayout,\n TabPanel: TabPanel,\n TextBox: TextBox,\n DropZone: DropZone,\n BrowseButton: BrowseButton\n };\n };\n var appendTo = function (target) {\n if (target.ui) {\n global$2.each(getApi(), function (ref, key) {\n target.ui[key] = ref;\n });\n } else {\n target.ui = getApi();\n }\n };\n var registerToFactory = function () {\n global$2.each(getApi(), function (ref, key) {\n global$4.add(key, ref);\n });\n };\n var Api = {\n appendTo: appendTo,\n registerToFactory: registerToFactory\n };\n\n Api.registerToFactory();\n Api.appendTo(window.tinymce ? window.tinymce : {});\n global.add('modern', function (editor) {\n FormatControls.setup(editor);\n return ThemeApi.get(editor);\n });\n function Theme () {\n }\n\n return Theme;\n\n}(window));\n})();\n","//! moment.js locale configuration\n//! locale : Malay [ms]\n//! author : Weldan Jamili : https://github.com/weldan\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var ms = moment.defineLocale('ms', {\n months: 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split(\n '_'\n ),\n monthsShort: 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'),\n weekdays: 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'),\n weekdaysShort: 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'),\n weekdaysMin: 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'),\n longDateFormat: {\n LT: 'HH.mm',\n LTS: 'HH.mm.ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY [pukul] HH.mm',\n LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm',\n },\n meridiemParse: /pagi|tengahari|petang|malam/,\n meridiemHour: function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === 'pagi') {\n return hour;\n } else if (meridiem === 'tengahari') {\n return hour >= 11 ? hour : hour + 12;\n } else if (meridiem === 'petang' || meridiem === 'malam') {\n return hour + 12;\n }\n },\n meridiem: function (hours, minutes, isLower) {\n if (hours < 11) {\n return 'pagi';\n } else if (hours < 15) {\n return 'tengahari';\n } else if (hours < 19) {\n return 'petang';\n } else {\n return 'malam';\n }\n },\n calendar: {\n sameDay: '[Hari ini pukul] LT',\n nextDay: '[Esok pukul] LT',\n nextWeek: 'dddd [pukul] LT',\n lastDay: '[Kelmarin pukul] LT',\n lastWeek: 'dddd [lepas pukul] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'dalam %s',\n past: '%s yang lepas',\n s: 'beberapa saat',\n ss: '%d saat',\n m: 'seminit',\n mm: '%d minit',\n h: 'sejam',\n hh: '%d jam',\n d: 'sehari',\n dd: '%d hari',\n M: 'sebulan',\n MM: '%d bulan',\n y: 'setahun',\n yy: '%d tahun',\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 7, // The week that contains Jan 7th is the first week of the year.\n },\n });\n\n return ms;\n\n})));\n","//! moment.js locale configuration\n//! locale : Estonian [et]\n//! author : Henry Kehlmann : https://github.com/madhenry\n//! improvements : Illimar Tambek : https://github.com/ragulka\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n function processRelativeTime(number, withoutSuffix, key, isFuture) {\n var format = {\n s: ['mõne sekundi', 'mõni sekund', 'paar sekundit'],\n ss: [number + 'sekundi', number + 'sekundit'],\n m: ['ühe minuti', 'üks minut'],\n mm: [number + ' minuti', number + ' minutit'],\n h: ['ühe tunni', 'tund aega', 'üks tund'],\n hh: [number + ' tunni', number + ' tundi'],\n d: ['ühe päeva', 'üks päev'],\n M: ['kuu aja', 'kuu aega', 'üks kuu'],\n MM: [number + ' kuu', number + ' kuud'],\n y: ['ühe aasta', 'aasta', 'üks aasta'],\n yy: [number + ' aasta', number + ' aastat'],\n };\n if (withoutSuffix) {\n return format[key][2] ? format[key][2] : format[key][1];\n }\n return isFuture ? format[key][0] : format[key][1];\n }\n\n var et = moment.defineLocale('et', {\n months: 'jaanuar_veebruar_märts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember'.split(\n '_'\n ),\n monthsShort:\n 'jaan_veebr_märts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets'.split('_'),\n weekdays:\n 'pühapäev_esmaspäev_teisipäev_kolmapäev_neljapäev_reede_laupäev'.split(\n '_'\n ),\n weekdaysShort: 'P_E_T_K_N_R_L'.split('_'),\n weekdaysMin: 'P_E_T_K_N_R_L'.split('_'),\n longDateFormat: {\n LT: 'H:mm',\n LTS: 'H:mm:ss',\n L: 'DD.MM.YYYY',\n LL: 'D. MMMM YYYY',\n LLL: 'D. MMMM YYYY H:mm',\n LLLL: 'dddd, D. MMMM YYYY H:mm',\n },\n calendar: {\n sameDay: '[Täna,] LT',\n nextDay: '[Homme,] LT',\n nextWeek: '[Järgmine] dddd LT',\n lastDay: '[Eile,] LT',\n lastWeek: '[Eelmine] dddd LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%s pärast',\n past: '%s tagasi',\n s: processRelativeTime,\n ss: processRelativeTime,\n m: processRelativeTime,\n mm: processRelativeTime,\n h: processRelativeTime,\n hh: processRelativeTime,\n d: processRelativeTime,\n dd: '%d päeva',\n M: processRelativeTime,\n MM: processRelativeTime,\n y: processRelativeTime,\n yy: processRelativeTime,\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal: '%d.',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return et;\n\n})));\n","//! moment.js locale configuration\n//! locale : English (India) [en-in]\n//! author : Jatin Agrawal : https://github.com/jatinag22\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var enIn = moment.defineLocale('en-in', {\n months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n '_'\n ),\n monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(\n '_'\n ),\n weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n longDateFormat: {\n LT: 'h:mm A',\n LTS: 'h:mm:ss A',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY h:mm A',\n LLLL: 'dddd, D MMMM YYYY h:mm A',\n },\n calendar: {\n sameDay: '[Today at] LT',\n nextDay: '[Tomorrow at] LT',\n nextWeek: 'dddd [at] LT',\n lastDay: '[Yesterday at] LT',\n lastWeek: '[Last] dddd [at] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'in %s',\n past: '%s ago',\n s: 'a few seconds',\n ss: '%d seconds',\n m: 'a minute',\n mm: '%d minutes',\n h: 'an hour',\n hh: '%d hours',\n d: 'a day',\n dd: '%d days',\n M: 'a month',\n MM: '%d months',\n y: 'a year',\n yy: '%d years',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n ordinal: function (number) {\n var b = number % 10,\n output =\n ~~((number % 100) / 10) === 1\n ? 'th'\n : b === 1\n ? 'st'\n : b === 2\n ? 'nd'\n : b === 3\n ? 'rd'\n : 'th';\n return number + output;\n },\n week: {\n dow: 0, // Sunday is the first day of the week.\n doy: 6, // The week that contains Jan 1st is the first week of the year.\n },\n });\n\n return enIn;\n\n})));\n","//! moment.js locale configuration\n//! locale : Sinhalese [si]\n//! author : Sampath Sitinamaluwa : https://github.com/sampathsris\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n /*jshint -W100*/\n var si = moment.defineLocale('si', {\n months: 'ජනවාරි_පෙබරවාරි_මාර්තු_අප්රේල්_මැයි_ජූනි_ජූලි_අගෝස්තු_සැප්තැම්බර්_ඔක්තෝබර්_නොවැම්බර්_දෙසැම්බර්'.split(\n '_'\n ),\n monthsShort: 'ජන_පෙබ_මාර්_අප්_මැයි_ජූනි_ජූලි_අගෝ_සැප්_ඔක්_නොවැ_දෙසැ'.split(\n '_'\n ),\n weekdays:\n 'ඉරිදා_සඳුදා_අඟහරුවාදා_බදාදා_බ්රහස්පතින්දා_සිකුරාදා_සෙනසුරාදා'.split(\n '_'\n ),\n weekdaysShort: 'ඉරි_සඳු_අඟ_බදා_බ්රහ_සිකු_සෙන'.split('_'),\n weekdaysMin: 'ඉ_ස_අ_බ_බ්ර_සි_සෙ'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'a h:mm',\n LTS: 'a h:mm:ss',\n L: 'YYYY/MM/DD',\n LL: 'YYYY MMMM D',\n LLL: 'YYYY MMMM D, a h:mm',\n LLLL: 'YYYY MMMM D [වැනි] dddd, a h:mm:ss',\n },\n calendar: {\n sameDay: '[අද] LT[ට]',\n nextDay: '[හෙට] LT[ට]',\n nextWeek: 'dddd LT[ට]',\n lastDay: '[ඊයේ] LT[ට]',\n lastWeek: '[පසුගිය] dddd LT[ට]',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%sකින්',\n past: '%sකට පෙර',\n s: 'තත්පර කිහිපය',\n ss: 'තත්පර %d',\n m: 'මිනිත්තුව',\n mm: 'මිනිත්තු %d',\n h: 'පැය',\n hh: 'පැය %d',\n d: 'දිනය',\n dd: 'දින %d',\n M: 'මාසය',\n MM: 'මාස %d',\n y: 'වසර',\n yy: 'වසර %d',\n },\n dayOfMonthOrdinalParse: /\\d{1,2} වැනි/,\n ordinal: function (number) {\n return number + ' වැනි';\n },\n meridiemParse: /පෙර වරු|පස් වරු|පෙ.ව|ප.ව./,\n isPM: function (input) {\n return input === 'ප.ව.' || input === 'පස් වරු';\n },\n meridiem: function (hours, minutes, isLower) {\n if (hours > 11) {\n return isLower ? 'ප.ව.' : 'පස් වරු';\n } else {\n return isLower ? 'පෙ.ව.' : 'පෙර වරු';\n }\n },\n });\n\n return si;\n\n})));\n","(function () {\nvar legacyoutput = (function () {\n 'use strict';\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n var overrideFormats = function (editor) {\n var alignElements = 'p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li,table,img', fontSizes = global$1.explode(editor.settings.font_size_style_values), schema = editor.schema;\n editor.formatter.register({\n alignleft: {\n selector: alignElements,\n attributes: { align: 'left' }\n },\n aligncenter: {\n selector: alignElements,\n attributes: { align: 'center' }\n },\n alignright: {\n selector: alignElements,\n attributes: { align: 'right' }\n },\n alignjustify: {\n selector: alignElements,\n attributes: { align: 'justify' }\n },\n bold: [\n {\n inline: 'b',\n remove: 'all'\n },\n {\n inline: 'strong',\n remove: 'all'\n },\n {\n inline: 'span',\n styles: { fontWeight: 'bold' }\n }\n ],\n italic: [\n {\n inline: 'i',\n remove: 'all'\n },\n {\n inline: 'em',\n remove: 'all'\n },\n {\n inline: 'span',\n styles: { fontStyle: 'italic' }\n }\n ],\n underline: [\n {\n inline: 'u',\n remove: 'all'\n },\n {\n inline: 'span',\n styles: { textDecoration: 'underline' },\n exact: true\n }\n ],\n strikethrough: [\n {\n inline: 'strike',\n remove: 'all'\n },\n {\n inline: 'span',\n styles: { textDecoration: 'line-through' },\n exact: true\n }\n ],\n fontname: {\n inline: 'font',\n attributes: { face: '%value' }\n },\n fontsize: {\n inline: 'font',\n attributes: {\n size: function (vars) {\n return global$1.inArray(fontSizes, vars.value) + 1;\n }\n }\n },\n forecolor: {\n inline: 'font',\n attributes: { color: '%value' }\n },\n hilitecolor: {\n inline: 'font',\n styles: { backgroundColor: '%value' }\n }\n });\n global$1.each('b,i,u,strike'.split(','), function (name) {\n schema.addValidElements(name + '[*]');\n });\n if (!schema.getElementRule('font')) {\n schema.addValidElements('font[face|size|color|style]');\n }\n global$1.each(alignElements.split(','), function (name) {\n var rule = schema.getElementRule(name);\n if (rule) {\n if (!rule.attributes.align) {\n rule.attributes.align = {};\n rule.attributesOrder.push('align');\n }\n }\n });\n };\n var setup = function (editor) {\n editor.settings.inline_styles = false;\n editor.on('init', function () {\n overrideFormats(editor);\n });\n };\n var Formats = { setup: setup };\n\n var register = function (editor) {\n editor.addButton('fontsizeselect', function () {\n var items = [], defaultFontsizeFormats = '8pt=1 10pt=2 12pt=3 14pt=4 18pt=5 24pt=6 36pt=7';\n var fontsizeFormats = editor.settings.fontsizeFormats || defaultFontsizeFormats;\n editor.$.each(fontsizeFormats.split(' '), function (i, item) {\n var text = item, value = item;\n var values = item.split('=');\n if (values.length > 1) {\n text = values[0];\n value = values[1];\n }\n items.push({\n text: text,\n value: value\n });\n });\n return {\n type: 'listbox',\n text: 'Font Sizes',\n tooltip: 'Font Sizes',\n values: items,\n fixedWidth: true,\n onPostRender: function () {\n var self = this;\n editor.on('NodeChange', function () {\n var fontElm;\n fontElm = editor.dom.getParent(editor.selection.getNode(), 'font');\n if (fontElm) {\n self.value(fontElm.size);\n } else {\n self.value('');\n }\n });\n },\n onclick: function (e) {\n if (e.control.settings.value) {\n editor.execCommand('FontSize', false, e.control.settings.value);\n }\n }\n };\n });\n editor.addButton('fontselect', function () {\n function createFormats(formats) {\n formats = formats.replace(/;$/, '').split(';');\n var i = formats.length;\n while (i--) {\n formats[i] = formats[i].split('=');\n }\n return formats;\n }\n var defaultFontsFormats = 'Andale Mono=andale mono,monospace;' + 'Arial=arial,helvetica,sans-serif;' + 'Arial Black=arial black,sans-serif;' + 'Book Antiqua=book antiqua,palatino,serif;' + 'Comic Sans MS=comic sans ms,sans-serif;' + 'Courier New=courier new,courier,monospace;' + 'Georgia=georgia,palatino,serif;' + 'Helvetica=helvetica,arial,sans-serif;' + 'Impact=impact,sans-serif;' + 'Symbol=symbol;' + 'Tahoma=tahoma,arial,helvetica,sans-serif;' + 'Terminal=terminal,monaco,monospace;' + 'Times New Roman=times new roman,times,serif;' + 'Trebuchet MS=trebuchet ms,geneva,sans-serif;' + 'Verdana=verdana,geneva,sans-serif;' + 'Webdings=webdings;' + 'Wingdings=wingdings,zapf dingbats';\n var items = [], fonts = createFormats(editor.settings.font_formats || defaultFontsFormats);\n editor.$.each(fonts, function (i, font) {\n items.push({\n text: { raw: font[0] },\n value: font[1],\n textStyle: font[1].indexOf('dings') === -1 ? 'font-family:' + font[1] : ''\n });\n });\n return {\n type: 'listbox',\n text: 'Font Family',\n tooltip: 'Font Family',\n values: items,\n fixedWidth: true,\n onPostRender: function () {\n var self = this;\n editor.on('NodeChange', function () {\n var fontElm;\n fontElm = editor.dom.getParent(editor.selection.getNode(), 'font');\n if (fontElm) {\n self.value(fontElm.face);\n } else {\n self.value('');\n }\n });\n },\n onselect: function (e) {\n if (e.control.settings.value) {\n editor.execCommand('FontName', false, e.control.settings.value);\n }\n }\n };\n });\n };\n var Buttons = { register: register };\n\n global.add('legacyoutput', function (editor) {\n Formats.setup(editor);\n Buttons.register(editor);\n });\n function Plugin () {\n }\n\n return Plugin;\n\n}());\n})();\n","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./QuizTeacherCreateQuestion.vue?vue&type=style&index=0&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./QuizTeacherCreateQuestion.vue?vue&type=style&index=0&lang=css&\"","//! moment.js locale configuration\n//! locale : Portuguese [pt]\n//! author : Jefferson : https://github.com/jalex79\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var pt = moment.defineLocale('pt', {\n months: 'janeiro_fevereiro_março_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro'.split(\n '_'\n ),\n monthsShort: 'jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez'.split('_'),\n weekdays:\n 'Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado'.split(\n '_'\n ),\n weekdaysShort: 'Dom_Seg_Ter_Qua_Qui_Sex_Sáb'.split('_'),\n weekdaysMin: 'Do_2ª_3ª_4ª_5ª_6ª_Sá'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D [de] MMMM [de] YYYY',\n LLL: 'D [de] MMMM [de] YYYY HH:mm',\n LLLL: 'dddd, D [de] MMMM [de] YYYY HH:mm',\n },\n calendar: {\n sameDay: '[Hoje às] LT',\n nextDay: '[Amanhã às] LT',\n nextWeek: 'dddd [às] LT',\n lastDay: '[Ontem às] LT',\n lastWeek: function () {\n return this.day() === 0 || this.day() === 6\n ? '[Último] dddd [às] LT' // Saturday + Sunday\n : '[Última] dddd [às] LT'; // Monday - Friday\n },\n sameElse: 'L',\n },\n relativeTime: {\n future: 'em %s',\n past: 'há %s',\n s: 'segundos',\n ss: '%d segundos',\n m: 'um minuto',\n mm: '%d minutos',\n h: 'uma hora',\n hh: '%d horas',\n d: 'um dia',\n dd: '%d dias',\n w: 'uma semana',\n ww: '%d semanas',\n M: 'um mês',\n MM: '%d meses',\n y: 'um ano',\n yy: '%d anos',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}º/,\n ordinal: '%dº',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return pt;\n\n})));\n","//! moment.js locale configuration\n//! locale : Punjabi (India) [pa-in]\n//! author : Harpreet Singh : https://github.com/harpreetkhalsagtbit\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var symbolMap = {\n 1: '੧',\n 2: '੨',\n 3: '੩',\n 4: '੪',\n 5: '੫',\n 6: '੬',\n 7: '੭',\n 8: '੮',\n 9: '੯',\n 0: '੦',\n },\n numberMap = {\n '੧': '1',\n '੨': '2',\n '੩': '3',\n '੪': '4',\n '੫': '5',\n '੬': '6',\n '੭': '7',\n '੮': '8',\n '੯': '9',\n '੦': '0',\n };\n\n var paIn = moment.defineLocale('pa-in', {\n // There are months name as per Nanakshahi Calendar but they are not used as rigidly in modern Punjabi.\n months: 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split(\n '_'\n ),\n monthsShort:\n 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split(\n '_'\n ),\n weekdays: 'ਐਤਵਾਰ_ਸੋਮਵਾਰ_ਮੰਗਲਵਾਰ_ਬੁਧਵਾਰ_ਵੀਰਵਾਰ_ਸ਼ੁੱਕਰਵਾਰ_ਸ਼ਨੀਚਰਵਾਰ'.split(\n '_'\n ),\n weekdaysShort: 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'),\n weekdaysMin: 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'),\n longDateFormat: {\n LT: 'A h:mm ਵਜੇ',\n LTS: 'A h:mm:ss ਵਜੇ',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY, A h:mm ਵਜੇ',\n LLLL: 'dddd, D MMMM YYYY, A h:mm ਵਜੇ',\n },\n calendar: {\n sameDay: '[ਅਜ] LT',\n nextDay: '[ਕਲ] LT',\n nextWeek: '[ਅਗਲਾ] dddd, LT',\n lastDay: '[ਕਲ] LT',\n lastWeek: '[ਪਿਛਲੇ] dddd, LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%s ਵਿੱਚ',\n past: '%s ਪਿਛਲੇ',\n s: 'ਕੁਝ ਸਕਿੰਟ',\n ss: '%d ਸਕਿੰਟ',\n m: 'ਇਕ ਮਿੰਟ',\n mm: '%d ਮਿੰਟ',\n h: 'ਇੱਕ ਘੰਟਾ',\n hh: '%d ਘੰਟੇ',\n d: 'ਇੱਕ ਦਿਨ',\n dd: '%d ਦਿਨ',\n M: 'ਇੱਕ ਮਹੀਨਾ',\n MM: '%d ਮਹੀਨੇ',\n y: 'ਇੱਕ ਸਾਲ',\n yy: '%d ਸਾਲ',\n },\n preparse: function (string) {\n return string.replace(/[੧੨੩੪੫੬੭੮੯੦]/g, function (match) {\n return numberMap[match];\n });\n },\n postformat: function (string) {\n return string.replace(/\\d/g, function (match) {\n return symbolMap[match];\n });\n },\n // Punjabi notation for meridiems are quite fuzzy in practice. While there exists\n // a rigid notion of a 'Pahar' it is not used as rigidly in modern Punjabi.\n meridiemParse: /ਰਾਤ|ਸਵੇਰ|ਦੁਪਹਿਰ|ਸ਼ਾਮ/,\n meridiemHour: function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === 'ਰਾਤ') {\n return hour < 4 ? hour : hour + 12;\n } else if (meridiem === 'ਸਵੇਰ') {\n return hour;\n } else if (meridiem === 'ਦੁਪਹਿਰ') {\n return hour >= 10 ? hour : hour + 12;\n } else if (meridiem === 'ਸ਼ਾਮ') {\n return hour + 12;\n }\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 4) {\n return 'ਰਾਤ';\n } else if (hour < 10) {\n return 'ਸਵੇਰ';\n } else if (hour < 17) {\n return 'ਦੁਪਹਿਰ';\n } else if (hour < 20) {\n return 'ਸ਼ਾਮ';\n } else {\n return 'ਰਾਤ';\n }\n },\n week: {\n dow: 0, // Sunday is the first day of the week.\n doy: 6, // The week that contains Jan 6th is the first week of the year.\n },\n });\n\n return paIn;\n\n})));\n","// Exports the \"autosave\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/autosave')\n// ES2015:\n// import 'tinymce/plugins/autosave'\nrequire('./plugin.js');","//! moment.js locale configuration\n//! locale : Scottish Gaelic [gd]\n//! author : Jon Ashdown : https://github.com/jonashdown\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var months = [\n 'Am Faoilleach',\n 'An Gearran',\n 'Am Màrt',\n 'An Giblean',\n 'An Cèitean',\n 'An t-Ògmhios',\n 'An t-Iuchar',\n 'An Lùnastal',\n 'An t-Sultain',\n 'An Dàmhair',\n 'An t-Samhain',\n 'An Dùbhlachd',\n ],\n monthsShort = [\n 'Faoi',\n 'Gear',\n 'Màrt',\n 'Gibl',\n 'Cèit',\n 'Ògmh',\n 'Iuch',\n 'Lùn',\n 'Sult',\n 'Dàmh',\n 'Samh',\n 'Dùbh',\n ],\n weekdays = [\n 'Didòmhnaich',\n 'Diluain',\n 'Dimàirt',\n 'Diciadain',\n 'Diardaoin',\n 'Dihaoine',\n 'Disathairne',\n ],\n weekdaysShort = ['Did', 'Dil', 'Dim', 'Dic', 'Dia', 'Dih', 'Dis'],\n weekdaysMin = ['Dò', 'Lu', 'Mà', 'Ci', 'Ar', 'Ha', 'Sa'];\n\n var gd = moment.defineLocale('gd', {\n months: months,\n monthsShort: monthsShort,\n monthsParseExact: true,\n weekdays: weekdays,\n weekdaysShort: weekdaysShort,\n weekdaysMin: weekdaysMin,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd, D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[An-diugh aig] LT',\n nextDay: '[A-màireach aig] LT',\n nextWeek: 'dddd [aig] LT',\n lastDay: '[An-dè aig] LT',\n lastWeek: 'dddd [seo chaidh] [aig] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'ann an %s',\n past: 'bho chionn %s',\n s: 'beagan diogan',\n ss: '%d diogan',\n m: 'mionaid',\n mm: '%d mionaidean',\n h: 'uair',\n hh: '%d uairean',\n d: 'latha',\n dd: '%d latha',\n M: 'mìos',\n MM: '%d mìosan',\n y: 'bliadhna',\n yy: '%d bliadhna',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(d|na|mh)/,\n ordinal: function (number) {\n var output = number === 1 ? 'd' : number % 10 === 2 ? 'na' : 'mh';\n return number + output;\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return gd;\n\n})));\n","// Exports the \"pagebreak\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/pagebreak')\n// ES2015:\n// import 'tinymce/plugins/pagebreak'\nrequire('./plugin.js');","//! moment.js locale configuration\n//! locale : Dutch [nl]\n//! author : Joris Röling : https://github.com/jorisroling\n//! author : Jacob Middag : https://github.com/middagj\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var monthsShortWithDots =\n 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split('_'),\n monthsShortWithoutDots =\n 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split('_'),\n monthsParse = [\n /^jan/i,\n /^feb/i,\n /^maart|mrt.?$/i,\n /^apr/i,\n /^mei$/i,\n /^jun[i.]?$/i,\n /^jul[i.]?$/i,\n /^aug/i,\n /^sep/i,\n /^okt/i,\n /^nov/i,\n /^dec/i,\n ],\n monthsRegex =\n /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\\.?|feb\\.?|mrt\\.?|apr\\.?|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i;\n\n var nl = moment.defineLocale('nl', {\n months: 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split(\n '_'\n ),\n monthsShort: function (m, format) {\n if (!m) {\n return monthsShortWithDots;\n } else if (/-MMM-/.test(format)) {\n return monthsShortWithoutDots[m.month()];\n } else {\n return monthsShortWithDots[m.month()];\n }\n },\n\n monthsRegex: monthsRegex,\n monthsShortRegex: monthsRegex,\n monthsStrictRegex:\n /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,\n monthsShortStrictRegex:\n /^(jan\\.?|feb\\.?|mrt\\.?|apr\\.?|mei|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i,\n\n monthsParse: monthsParse,\n longMonthsParse: monthsParse,\n shortMonthsParse: monthsParse,\n\n weekdays:\n 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split('_'),\n weekdaysShort: 'zo._ma._di._wo._do._vr._za.'.split('_'),\n weekdaysMin: 'zo_ma_di_wo_do_vr_za'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD-MM-YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[vandaag om] LT',\n nextDay: '[morgen om] LT',\n nextWeek: 'dddd [om] LT',\n lastDay: '[gisteren om] LT',\n lastWeek: '[afgelopen] dddd [om] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'over %s',\n past: '%s geleden',\n s: 'een paar seconden',\n ss: '%d seconden',\n m: 'één minuut',\n mm: '%d minuten',\n h: 'één uur',\n hh: '%d uur',\n d: 'één dag',\n dd: '%d dagen',\n w: 'één week',\n ww: '%d weken',\n M: 'één maand',\n MM: '%d maanden',\n y: 'één jaar',\n yy: '%d jaar',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n ordinal: function (number) {\n return (\n number +\n (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de')\n );\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return nl;\n\n})));\n","// Exports the \"table\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/table')\n// ES2015:\n// import 'tinymce/plugins/table'\nrequire('./plugin.js');","//! moment.js locale configuration\n//! locale : Pseudo [x-pseudo]\n//! author : Andrew Hood : https://github.com/andrewhood125\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var xPseudo = moment.defineLocale('x-pseudo', {\n months: 'J~áñúá~rý_F~ébrú~árý_~Márc~h_Áp~ríl_~Máý_~Júñé~_Júl~ý_Áú~gúst~_Sép~témb~ér_Ó~ctób~ér_Ñ~óvém~bér_~Décé~mbér'.split(\n '_'\n ),\n monthsShort:\n 'J~áñ_~Féb_~Már_~Ápr_~Máý_~Júñ_~Júl_~Áúg_~Sép_~Óct_~Ñóv_~Déc'.split(\n '_'\n ),\n monthsParseExact: true,\n weekdays:\n 'S~úñdá~ý_Mó~ñdáý~_Túé~sdáý~_Wéd~ñésd~áý_T~húrs~dáý_~Fríd~áý_S~átúr~dáý'.split(\n '_'\n ),\n weekdaysShort: 'S~úñ_~Móñ_~Túé_~Wéd_~Thú_~Frí_~Sát'.split('_'),\n weekdaysMin: 'S~ú_Mó~_Tú_~Wé_T~h_Fr~_Sá'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'HH:mm',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd, D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[T~ódá~ý át] LT',\n nextDay: '[T~ómó~rró~w át] LT',\n nextWeek: 'dddd [át] LT',\n lastDay: '[Ý~ést~érdá~ý át] LT',\n lastWeek: '[L~ást] dddd [át] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'í~ñ %s',\n past: '%s á~gó',\n s: 'á ~féw ~sécó~ñds',\n ss: '%d s~écóñ~ds',\n m: 'á ~míñ~úté',\n mm: '%d m~íñú~tés',\n h: 'á~ñ hó~úr',\n hh: '%d h~óúrs',\n d: 'á ~dáý',\n dd: '%d d~áýs',\n M: 'á ~móñ~th',\n MM: '%d m~óñt~hs',\n y: 'á ~ýéár',\n yy: '%d ý~éárs',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n ordinal: function (number) {\n var b = number % 10,\n output =\n ~~((number % 100) / 10) === 1\n ? 'th'\n : b === 1\n ? 'st'\n : b === 2\n ? 'nd'\n : b === 3\n ? 'rd'\n : 'th';\n return number + output;\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return xPseudo;\n\n})));\n","// Exports the \"code\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/code')\n// ES2015:\n// import 'tinymce/plugins/code'\nrequire('./plugin.js');","//! moment.js locale configuration\n//! locale : Northern Sami [se]\n//! authors : Bård Rolstad Henriksen : https://github.com/karamell\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var se = moment.defineLocale('se', {\n months: 'ođđajagemánnu_guovvamánnu_njukčamánnu_cuoŋománnu_miessemánnu_geassemánnu_suoidnemánnu_borgemánnu_čakčamánnu_golggotmánnu_skábmamánnu_juovlamánnu'.split(\n '_'\n ),\n monthsShort:\n 'ođđj_guov_njuk_cuo_mies_geas_suoi_borg_čakč_golg_skáb_juov'.split('_'),\n weekdays:\n 'sotnabeaivi_vuossárga_maŋŋebárga_gaskavahkku_duorastat_bearjadat_lávvardat'.split(\n '_'\n ),\n weekdaysShort: 'sotn_vuos_maŋ_gask_duor_bear_láv'.split('_'),\n weekdaysMin: 's_v_m_g_d_b_L'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD.MM.YYYY',\n LL: 'MMMM D. [b.] YYYY',\n LLL: 'MMMM D. [b.] YYYY [ti.] HH:mm',\n LLLL: 'dddd, MMMM D. [b.] YYYY [ti.] HH:mm',\n },\n calendar: {\n sameDay: '[otne ti] LT',\n nextDay: '[ihttin ti] LT',\n nextWeek: 'dddd [ti] LT',\n lastDay: '[ikte ti] LT',\n lastWeek: '[ovddit] dddd [ti] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%s geažes',\n past: 'maŋit %s',\n s: 'moadde sekunddat',\n ss: '%d sekunddat',\n m: 'okta minuhta',\n mm: '%d minuhtat',\n h: 'okta diimmu',\n hh: '%d diimmut',\n d: 'okta beaivi',\n dd: '%d beaivvit',\n M: 'okta mánnu',\n MM: '%d mánut',\n y: 'okta jahki',\n yy: '%d jagit',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal: '%d.',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return se;\n\n})));\n"],"sourceRoot":""}' + tabsHtml + '' + '' + layout.renderHtml(self) + '' + '