{"version":3,"sources":["webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/plugins/visualchars/index.js","webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/plugins/autoresize/index.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/vue-tinymce-editor/node_modules/tinymce/plugins/codesample/index.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/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/vue-tinymce-editor/node_modules/tinymce/plugins/colorpicker/index.js","webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/plugins/save/index.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/vue-tinymce-editor/node_modules/tinymce/plugins/searchreplace/index.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/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/vue-tinymce-editor/node_modules/tinymce/plugins/textcolor/index.js","webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/plugins/toc/index.js","webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/plugins/image/plugin.js","webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/plugins/lists/plugin.js","webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/plugins/tabfocus/index.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/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/vue-tinymce-editor/node_modules/tinymce/plugins/emoticons/plugin.js","webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/plugins/save/plugin.js","webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/plugins/print/index.js","webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/plugins/insertdatetime/plugin.js","webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/plugins/spellchecker/plugin.js","webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/plugins/spellchecker/index.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/vue-tinymce-editor/node_modules/tinymce/plugins/fullscreen/index.js","webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/plugins/bbcode/index.js","webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/plugins/image/index.js","webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/plugins/insertdatetime/index.js","webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/plugins/fullpage/index.js","webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/plugins/code/plugin.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/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/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/vue-tinymce-editor/node_modules/tinymce/plugins/visualblocks/plugin.js","webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/plugins/bbcode/plugin.js","webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/plugins/autolink/plugin.js","webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/plugins/nonbreaking/index.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/vue-tinymce-editor/node_modules/tinymce/plugins/table/plugin.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/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/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/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/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/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/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/vue-tinymce-editor/node_modules/tinymce/plugins/legacyoutput/plugin.js","webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/plugins/autosave/index.js","webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/plugins/pagebreak/index.js","webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/plugins/table/index.js","webpack:///./node_modules/vue-tinymce-editor/node_modules/tinymce/plugins/code/index.js"],"names":["domGlobals","Cell","initial","value","get","set","v","clone","global","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","match","key","hasOwnProperty","languages","extend","id","redef","insertBefore","inside","before","insert","root","grammar","arguments","length","newToken","ret","token","DFS","this","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","exec","from","index","slice","len","to","after","args","push","wrapped","Array","splice","apply","all","add","name","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","number","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","parseInt","prefix","counter","guid","Date","getTime","Guid","tocId","generateSelector","hasHeaders","readHeaders","tocClass","headerTag","headers","el","hasClass","h","level","getMinLevel","minLevel","generateTitle","openTag","closeTag","generateTocHtml","generateTocContentHtml","ii","nextLevel","prevLevel","translate","isEmptyOrOffscren","nodes","getParents","insertToc","$tocElm","updateToc","Toc","children","toggleState","ctrl","control","disabled","readonly","isToc","is","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","y","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","noop","curry","fn","initialArgs","_i","restArgs","concat","not","f","never","always","none","NONE","eq","isNone","thunk","n","me","fold","s","isSome","getOr","getOrThunk","getOrDie","msg","Error","getOrNull","getOrUndefined","undefined","or","orThunk","bind","exists","forall","equals","equals_","toArray","freeze","some","a","constant_a","elementEq","b","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","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","split","currentStyleSheetsMap","stylesheet","setAttribs","dir","vLink","aLink","indent","apply_source_formatting","indent_before","indent_after","serialize","Parser","headState","defaults","size","headHtml","protectHtml","protect","escape","unprotectHtml","m","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","offset","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","render","_vm","_h","$createElement","_c","attrs","_v","_s","staticRenderFns","component","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","result","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","u","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","monthsShort","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","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","output","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","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","cs","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","getSeparatorHtml","shouldSplitBlock","getPageBreakClass","getPlaceholderHtml","transparentSrc","separatorHtml","pageBreakSeparatorRegExp","raw","pagebreak_split_block","ResolveName","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","module","exports","define","require","amd","EphoxContactWrapper","1","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","2","setTimeoutFunc","_handled","_immediateFn","_unhandledRejectionFn","prom","arr","warn","_setImmediateFn","_setUnhandledRejectionFn","3","clearImmediate","immediateIds","nextImmediateId","Timeout","clearFn","_id","_clearFn","setInterval","clearInterval","unref","ref","enroll","msecs","_idleTimeoutId","_idleTimeout","unenroll","_unrefActive","_onTimeout","4","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","emoticons","emoticonsHtml","row","emoticonUrl","PanelHtml","insertEmoticon","createHTML","panelHtml","autohide","enableWhenDirty","hasOnSaveCallback","hasOnCancelCallback","displayErrorMessage","formObj","isDirty","execCallback","setDirty","submit","startContent","stateToggle","addShortcut","getDateFormat","getTimeFormat","getFormats","getDefaultDateTime","formats","shouldInsertTimeElement","updateElement","timeElm","computerTime","userTime","newTimeElm","datetime","insertDateTime","createMenuItems","lastFormatState","lastFormat","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","l","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","word","spans","ignoreWord","span","getElmIndex","findSpansByIndex","suggestions","hasDictionarySupport","words","dictionary","getWordCharPattern","buildMenuItems","languageValues","languageValue","updateSelection","selectedLanguage","getItems","langPair","languageMenuItems","startSpellchecking","buttonArgs","onshow","showSuggestions","suggestion","onautohide","onhide","targetPos","documentElement","SuggestionsMenu","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","getMinWidth","getMinHeight","Content","fullscreenState","isFullscreen","fireFullscreenStateChanged","getWindowSize","innerWidth","innerHeight","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","groups","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","special","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","onChange","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","applyListFormat","getNumberStyles","getBulletStyles","getSelectedStyleType","listElm","ListUtils","styleValueToText","toMenuItems","ListStyles","listStyleType","addSplitButton","addControl","fireVisualBlocks","isEnabledByDefault","visualblocks_content_css","cssId","load","linkElements","matchingLinkElms","toggleVisualBlocks","enabledState","toggleClass","VisualBlocks","Bindings","html2bbcode","rep","re","bbcode2html","Convert","init","getAutoLinkPattern","rangeEqualsDelimiterOrSpace","rangeString","handleEclipse","parseCurrentLine","handleSpacebar","scopeIndex","prev","rngText","autoLinkPattern","defaultLinkTarget","nodeValue","charAt","autoUrlDetectState","Keys","compose","fa","fb","die","eachr","foldr","map$1","tupleMap","tuple","reqMessage","required","unsuppMessage","unsupported","validateStrArr","invalidTypeMessage","incorrect","checkDupes","everything","sorted","dupe","d","MixedBag","optional","allReqd","req","opt","COMMENT","DOCUMENT","TEXT","isComment","checkRange","endsWith","suffix","inBody","internalRemove","removeProperty","set$1","setAll$1","getComputedStyle","getUnsafeProperty","getRaw","remove$1","sourceDom","targetDom","DOCUMENT$1","bypassSelector","childElementCount","base","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","section","DetailsList","column","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","get$2","set$2","getEnd","NBSP","isTextNodeWithCursorPosition","elementsWithCursorPosition","isCursorPosition","hasCursorPosition","first","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","other","copyAttributesTo","destination","as","up","down","copyTo","afterAll","appendAll","query","setText","leftRight","brokenPath","bisect","universe","ind","breakToRight","second","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","sIndex","eIndex","ancestors$2","prune","pruned1","pruned2","shared","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","box","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","properties","cumulativeInclusions","absoluteMax","api$1","getBoundingClientRect","get$3","api$2","get$4","getOuter$1","platform","needManualCalc","toNumber","px","num","getProp","getCalculatedHeight","paddingTop","paddingBottom","borderTop","borderBottom","boxSizing","borders","RuntimeSize","genericSizeRegex","percentageBasedSizeRegex","pixelBasedSizeRegex","setPixelWidth","amount","setPercentageWidth","setHeight","getHeightValue","getter","setter","normalizePixelSize","getTotalHeight","get$5","getSpan","getRawWidth","cssWidth","normalizePercentageWidth","cellWidth","tableSize","pixelWidth","choosePercentageSize","percentMatch","intWidth","getPercentageWidth","normalizePixelWidth","choosePixelSize","pixelMatch","floatWidth","getPixelWidth","getHeight$1","getGenericWidth","unit","setGenericWidth","Sizes","halve","main","CellMutations","Position","boxPosition","firstDefinedOrZero","absolute","pageYOffset","pageXOffset","clientTop","clientLeft","viewport","offsetLeft","offsetTop","rowInfo","colInfo","rtlEdge","ltrEdge","getLeftEdge","getRightEdge","getTop","getTopEdge","getBottomEdge","findPositions","getInnerEdge","getOuterEdge","lines","cellOption","lastLine","negate","step","positions","optElements","ltr","BarPositions","ResizeDirection","TableDirection","directionAt","auto","isRtl","getGridSize","input","TableGridSize","__assign","assign","cat","findMap","setIfNot","ignore","newRows","newCells","renderSection","gridSection","sectionName","tb","isNew","tr","removeSection","renderOrRemoveSection","headSection","bodySection","footSection","copy$2","clonedCell","Redraw","remove$3","supports","classList","get$6","add$1","clazz","remove$4","add$2","cleanClass","remove$5","has$1","repeat","repititions","deduce","aa","extras","abs","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","model","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","options","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","func","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","mutation","sink","dragApi","mdown","forceDrop","mup","drop","mmove","move","mout","delayDrop","MouseDrag","last$2","rate","timer","throttle","InDrag","mode","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","detection","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","point","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","br","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","ns","wrappedEvent","wrapEvent","isMouseEvent","isLeftMouse","button","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","ie11","ie12","iDevice","fileApi","phone","tablet","windowsPhone","isObject","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","time","wrappedSetInterval","wrappedClearTimeout","wrappedClearInterval","debounce","Delay","setEditorInterval","eventExpandoPrefix","mouseEventRe","deprecated","keyLocation","layerX","layerY","returnValue","webkitMovementX","webkitMovementY","keyIdentifier","hasIsDefaultPrevented","returnTrue","returnFalse","addEvent","capture","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","names","fakeName","nativeHandler","defaultNativeHandler","related","currentTarget","relatedTarget","eventMap","parentWindow","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","whitespace","identifier","pseudos","rtrim","rcomma","rcombinators","rattributeQuotes","rpseudo","ridentifier","matchExpr","ID","CLASS","TAG","ATTR","PSEUDO","CHILD","bool","needsContext","rinputs","rheader","rnative","rquickExpr","rsibling","rescape","runescape","funescape","escaped","escapedWhitespace","high","els","Sizzle","results","seed","nid","newContext","newSelector","getElementById","getElementsByClassName","qsa","toSelector","testContext","qsaError","cacheLength","markFunction","siblingCheck","cur","diff","sourceIndex","createInputPseudo","createButtonPseudo","createPositionalPseudo","argument","matchIndexes","hasCompare","getById","attrId","tmp","disconnectedMatch","adown","bup","sortDetached","aup","ap","bp","expr","matchesSelector","attrHandle","getAttributeNode","specified","uniqueSort","duplicates","detectDuplicates","sortStable","createPseudo","preFilter","excess","unquoted","nodeNameSelector","check","what","simple","ofType","outerCache","useCache","pseudo","setFilters","matched","matcher","unmatched","elemLang","hash","hasFocus","tabIndex","enabled","selectedIndex","even","odd","lt","gt","nth","radio","checkbox","password","addCombinator","combinator","checkNonElements","doneName","oldCache","newCache","elementMatcher","matchers","multipleContexts","contexts","condense","newUnmatched","mapped","setMatcher","postFilter","postFinder","postSelector","temp","preMap","postMap","preexisting","elems","matcherIn","matcherOut","matcherFromTokens","checkContext","leadingRelative","implicitRelative","matchContext","matchAnyContext","matcherFromGroupMatchers","elementMatchers","setMatchers","bySet","byElement","superMatcher","outermost","matchedCount","setMatched","contextBackup","dirrunsUnique","random","filters","parseOnly","soFar","preFilters","compiled","isArray$1","indexOf$2","collection","iteratee","accumulator","findIndex$1","ArrUtils","whiteSpaceRegExp","delim","prop","sp","cn","scn","de","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","for","cssFix","float","attrHooks","cssHooks","whiteSpaceRegExp$1","trim$1","hook","camel","dashed","prependTo","wrapAll","wrapInner","existingClassName","classState","object","until","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","listItems","wsElements","lazyLookup","isVoid","isTableSection","isTableCell","isWsPreserveElement","isNodeType","isRestrictedNode","getPrototypeOf","isElement$1","matchNodeNames","matchStyleValues","cssValue","computed","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","radix","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","validValues","attributePatterns","setValidElements","addCustomElements","customElements","customElementRegExp","text_block_elements","block_elements","cloneName","customRule","elmName","addValidChildren","validChildren","childRuleRegExp","getElementRule","custom_elements","extended_valid_elements","dd","dt","th","thead","tfoot","legend","area","param","parentsRequired","invalid_elements","getValidStyles","getInvalidStyles","getValidClasses","getTextInlineElements","getSelfClosingElements","getMoveCaretBeforeOnEnterElements","isValidChild","isValid","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","proxy","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","loading","loadScript","isDone","markDone","loadQueue","loadScripts","scripts","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","uid","findMarkers","isAnnotation","findAll","markers","directory","nodesAlready","changeCallbacks","initData","withCallbacks","updateCallbacks","callbackMap","outputData","fireCallbacks","fireNoAnnotation","onNodeChange","identifyParserNode","optAnnotation","persistent","__rest","getOwnPropertySymbols","propertyIsEnumerable","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","eo","isZeroRect","clientRects","collapseAndInflateWidth","newClientRect","getCaretPositionClientRects","caretPosition","beforeNode","addUniqueAndValidRect","addCharacterOffset","CaretPosition","toRange","isVisible","fromRangeStart","fromRangeEnd","pos1","pos2","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","_d","_e","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","8","7","10","11","sortedAttrs","elementRule","createRange$1","normalizeBlockSelectionRange","commonAncestorContainer","newEndPos","normalize","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","invalid","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","matchAll","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","store","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","bubble","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","desc","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","langData","getLangData","$1","$2","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","now","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","line","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","scrollHeight","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","stack","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","display","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","$0","$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","fi","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","ne","se","sw","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","isComposing","executeKeydownOverride$3","setup$d","HomeEndKeys","setup$e","KeyboardOverrides","isGecko","isWebKit","mceInternalDataType","setMceInternalContent","selectionHtml","internalContent","getMceInternalContent","insertClipboardContents","emptyEditorWhenDeleting","serializeRng","allContentsSelected","allRng","allSelection","selectAll","inputMethodFocus","removeHrOnBackspace","blur","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","domain","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","nb","noProtoHost","loc","pathname","defaultFormat","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","currentScript","base_url","pluginBaseUrls","plugin_base_urls","invalidInlineTargets","isInvalidInlineTarget","findTargets","forms","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","dummy","createMethod","name_1","Methods","Properties","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","defineProperty","configurable","enumerable","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","interval","restoreLastDraft","_beforeUnloadHandler","autosave","onbeforeunload","isEnabled","fireVisualChars","charMap","charMapToRegExp","charMapToSelector","Data","regExpGlobal","wrapCharWithSpan","Html","value$1","filterDescendants","findParentElm","replaceWithSpans","nodeList","withSpans","VisualChars","toggleVisualChars","debouncedToggle","valueForToggling","getTabFocusElements","getTabFocus","tabCancel","tabHandler","canSelectRecursive","canSelect","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","ignoreCase","getWords","WordGetter","isSeparator","treeWalker","getCount","WordCount","wordsToText","debouncedUpdate","Statusbar","stringRepeat","repeats","isVisualCharsEnabled","visualchars","insertNbsp","getKeyboardSpaces","showPreview","hexColor","setColor","rgb","colorPickerCtrl","color_picker_callback","print","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","nextIndex","hasNext","hasPrev","keepEditorSelection","selectedText","updateButtonStates","notFoundAlert","onClose","caseState","getNonEditableClass","getEditableClass","getNonEditableRegExps","nonEditableRegExps","checkClassName","replaceMatchWithSpan","prevChar","findStartTagIndex","tagHtml","convertRegExpsToNonEditable","editClass","nonEditClass","contentEditableAttrName","hasEditClass","hasNonEditClass","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","Collection$1","proto","expression","chunker","Selector","compileNameFilter","compileIdFilter","compileClassesFilter","compileAttrFilter","cmp","compilePsuedoFilter","notSelectors","parseChunks","direct","_selectors","si","sl","Collection$2","Binding","otherModel","otherName","fromSelfToOther","fromOtherToSelf","_bindings","global$c","isNode","animationFrameRequested","ObservableObject","oldValue","dirtyCtrls","ReflowQueue","_layout","hasMouseWheelEventSupport","hasWheelEventSupport","classPrefix","idCounter","proto$1","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","autoScroll","_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","placeholder","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","autocomplete","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","factory","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","overrideFormats","alignElements","fontElm"],"mappings":"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,GAAU,EAAIJ,GAAQM,EAASN,EACtC,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,IAGJ,SAASQ,EAAiBf,EAAQ52B,GAEhC,OADAA,EAAQi2B,EAAM,IAAMj2B,GAAQ,IAAK,KAC1Bs2B,EAASM,EAAQ,CACtB,EACA,EACA,EACA,EACA52B,EACA,EACA,EACA,EACA,EACAA,EACA,EACA,EACA,EACA,EACAA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,IAGJ,SAAS43B,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,EAAQ52B,GAE3B,OADAA,EAAQi2B,EAAMj2B,EAAO,EAAG,GACjBs2B,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,GACC32B,IAEL,SAASi4B,EAAgBrB,EAAQ52B,GAE/B,OADAA,EAAQi2B,EAAMj2B,EAAO,EAAG,GACjBs2B,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,GACC32B,IAGL,SAASk4B,EAAYC,EAAIvB,GACvB,OAAOuB,EAAGrC,WAAWhF,MAAK,SAAU9B,GAClC,OAAOoJ,EAAiBpJ,EAAQmJ,EAAG3C,UAAWoB,MAGlD,SAASwB,EAAiBpJ,EAAQ3sB,EAAMu0B,GACtC,IAAIxhB,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CE,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,OAAO7hF,EAASkoB,KAAK25D,GAAS,SAAU9rC,GACtC,OAAO/tB,EAAQ+tB,IAAyB,IAAhBA,EAAK5yC,WAG7B++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Cd,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,WAEEt9D,GAAS,SAAUk8C,EAAUltD,GAC/B,IAAIxkC,EAAU0xF,EAASr5F,WAAWtC,KAAKyuC,GACvC,OAAOxhC,EAAS,CACd,KACA,MACChD,IAEDuxC,GAAU,SAAUmgD,EAAUltD,GAChC,IAAIxkC,EAAU0xF,EAASr5F,WAAWtC,KAAKyuC,GACvC,OAAOxhC,EAAS8vG,GAAW9yG,IAEzB+yG,GAAe,SAAUrhB,EAAUltD,GACrC,IAAIxkC,EAAU0xF,EAASr5F,WAAWtC,KAAKyuC,GACvC,OAAOxhC,EAAS,CACd,UACA,MACA,IACA,KACA,KACA,KACA,KACA,KACA,MACChD,IAEDgzG,GAAY,SAAUthB,EAAUltD,GAClC,IAAIxkC,EAAU0xF,EAASr5F,WAAWtC,KAAKyuC,GACvC,OAAOxhC,EAAS,CACd,KACA,KACA,KACA,KACA,KACA,MACChD,IAEDizG,GAAc,SAAUvhB,EAAUltD,GACpC,OAAOxhC,EAAS,CACd,MACA,KACA,KACA,KACA,aACA,OACA,WACC0uF,EAASr5F,WAAWtC,KAAKyuC,KAE1BksD,GAAa,SAAUgB,EAAUltD,GACnC,OAAOxhC,EAAS,CACd,KACA,MACA,KACA,SACC0uF,EAASr5F,WAAWtC,KAAKyuC,KAE1B0uE,GAAU,SAAUxhB,EAAUltD,GAChC,MAA0C,WAAnCktD,EAASr5F,WAAWtC,KAAKyuC,IAE9B2uE,GAAW,SAAUzhB,EAAUltD,GACjC,QAAS+M,GAAQmgD,EAAUltD,IAASksD,GAAWgB,EAAUltD,KAA6C,OAAnCktD,EAASr5F,WAAWtC,KAAKyuC,IAE1F4uE,GAAY,CACd7hE,QAASA,GACTiE,OAAQA,GACRu9D,aAAcA,GACdC,UAAWA,GACXC,YAAaA,GACbviB,WAAYA,GACZwiB,QAASA,GACTC,SAAUA,IAGRE,GAAa7iB,KACb8iB,GAAY,SAAU5gH,G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AAYt9I,EAAM,aAAc,cAAeotC,GAC/CptC,GAETtI,KAAKivF,KAAO,SAAUv5C,GAEpB,OADAptC,EAAOs9I,EAAYt9I,EAAM,YAAa,kBAAmBotC,GAClDptC,GAETtI,KAAK+lJ,MAAQ,SAAUrwG,GAErB,OADAptC,EAAOw9I,EAAiBx9I,EAAM,YAAa,kBAAmBotC,GACvDptC,GAIX,IAwSI09I,GAAeC,GAAcC,GAxS7BzpF,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,WAEE0pF,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,SAEEjzF,GAAa,CACf,KACA,KACA,KACA,KACA,KACA,KACA,IACA,MACA,UACA,MACA,OACA,aACA,SACA,MACA,WACA,SACA,SACA,UACA,UACA,SACA,QACA,MACA,UAEEkzF,GAAW,CACb,KACA,KACA,KACA,KACA,KACA,MAEEC,GAAY,CACd,KACA,KACA,MAEEnjG,GAAQ,CACV,KACA,KACA,MAEEojG,GAAa,CACf,MACA,SACA,WACA,SAEEC,GAAa,SAAUltI,GACzB,IAAI4d,EACJ,OAAO,SAAU7uB,GAEf,OADA6uB,EAASA,GAAkB82G,GAAY10H,EAAO9R,GAAS,IAChD0vB,EAAOp4B,eAAe+E,GAAKwE,MAGlCy4G,GAAY0lC,GAAWH,IACvBhnG,GAAUmnG,GAAWhqF,IACrBykD,GAAW,SAAU54G,GACvB,OAAO6jD,GAAU7jD,KAAUg3C,GAAQh3C,IAEjC22C,GAAO,SAAU32C,GACnB,OAAO6jD,GAAU7jD,IAAwB,OAAfxE,GAAKwE,IAE7B+2C,GAAconG,GAAWrzF,IACzB7P,GAASkjG,GAAWrjG,IACpB2+D,GAAa0kC,GAAWF,IACxBG,GAASD,GAAWN,IACpBQ,GAAiBF,GAAWJ,IAC5BO,GAAcH,GAAWL,IACzBS,GAAsBJ,GAAWD,IAEjCM,GAAa,SAAU3oJ,GACzB,OAAO,SAAUmK,GACf,QAASA,GAAQA,EAAK2a,WAAa9kB,IAGnC4oJ,GAAmB,SAAUz+I,GAC/B,QAASA,IAAS7J,OAAOuoJ,eAAe1+I,IAEtC2+I,GAAcH,GAAW,GACzBI,GAAiB,SAAU1U,GAC7B,IAAIj5H,EAAQi5H,EAAMv1H,cAAcc,MAAM,KACtC,OAAO,SAAUzV,GACf,IAAIpI,EAAG4D,EACP,GAAIwE,GAAQA,EAAK2a,SAEf,IADAnf,EAAOwE,EAAKtH,SAASic,cAChB/c,EAAI,EAAGA,EAAIqZ,EAAM5Z,OAAQO,IAC5B,GAAI4D,IAASyV,EAAMrZ,GACjB,OAAO,EAIb,OAAO,IAGPinJ,GAAmB,SAAUrjJ,EAAM0G,GACrC,IAAI+O,EAAQ/O,EAAOyS,cAAcc,MAAM,KACvC,OAAO,SAAUzV,GACf,IAAIpI,EAAGknJ,EACP,GAAIH,GAAY3+I,GACd,IAAKpI,EAAI,EAAGA,EAAIqZ,EAAM5Z,OAAQO,IAAK,CACjC,IAAImnJ,EAAW/+I,EAAKm2B,cAAco0D,YAAYd,iBAAiBzpF,EAAM,MAErE,GADA8+I,EAAWC,EAAWA,EAAS96F,iBAAiBzoD,GAAQ,KACpDsjJ,IAAa7tI,EAAMrZ,GACrB,OAAO,EAIb,OAAO,IAGPonJ,GAAe,SAAUC,EAAUC,GACrC,OAAO,SAAUl/I,GACf,OAAO2+I,GAAY3+I,IAASA,EAAKi/I,KAAcC,IAG/C9wG,GAAe,SAAU8zC,EAAUrzC,GACrC,OAAO,SAAU7uC,GACf,OAAO2+I,GAAY3+I,IAASA,EAAKouC,aAAa8zC,KAG9Ci9D,GAAoB,SAAUj9D,EAAUrzC,GAC1C,OAAO,SAAU7uC,GACf,OAAO2+I,GAAY3+I,IAASA,EAAKuM,aAAa21E,KAAcrzC,IAG5DuwG,GAAU,SAAUp/I,GACtB,OAAO2+I,GAAY3+I,IAASA,EAAKouC,aAAa,mBAE5CixG,GAAa,SAAUr/I,GACzB,OAAO2+I,GAAY3+I,IAAiD,QAAxCA,EAAKuM,aAAa,mBAE5C2gH,GAAU,SAAUltH,GACtB,OAAO2+I,GAAY3+I,IAA0B,UAAjBA,EAAKyF,SAE/B65I,GAA0B,SAAU9rJ,GACtC,OAAO,SAAUwM,GACf,GAAI2+I,GAAY3+I,GAAO,CACrB,GAAIA,EAAK0D,kBAAoBlQ,EAC3B,OAAO,EAET,GAAIwM,EAAKuM,aAAa,8BAAgC/Y,EACpD,OAAO,EAGX,OAAO,IAGP+rJ,GAAWf,GAAW,GACtBx1D,GAAYw1D,GAAW,GACvBgB,GAAahB,GAAW,GACxBiB,GAAqBjB,GAAW,IAChCkB,GAASd,GAAe,MACxB1zB,GAAwBo0B,GAAwB,QAChDn1E,GAAyBm1E,GAAwB,SACjD/nG,GAAW,CACbj8B,OAAQikI,GACR17F,UAAW86F,GACX31D,UAAWA,GACXw2D,WAAYA,GACZC,mBAAoBA,GACpB9oG,KAAM+oG,GACNx0B,sBAAuBA,GACvB/gD,uBAAwBA,GACxBs0E,iBAAkBA,GAClBG,eAAgBA,GAChBI,aAAcA,GACd5wG,aAAcA,GACd+wG,kBAAmBA,GACnBN,iBAAkBA,GAClBO,QAASA,GACTC,WAAYA,GACZnyB,QAASA,IAGPyyB,GAAoB,SAAU3/I,GAChC,IAAI4/I,EAAiB5/I,EAAKm3C,iBAAqD,SAAlCn3C,EAAKm3C,gBAAgBz+C,SAC9DmnJ,EAAa7/I,EAAKuc,aAA6C,SAA9Bvc,EAAKuc,YAAY7jB,SACtD,OAAOknJ,GAAkBC,GAEvB30F,GAAiB,SAAUlrD,GAC7B,OAAOA,GAAyB,SAAjBA,EAAKyF,SAA6D,aAAvCzF,EAAKuM,aAAa,kBAE1DuzI,GAAW,SAAUx/I,EAAKN,GAC5B,IAAIpI,EAAGoQ,EAAWhI,EAAKqM,WACvB,IAAIkrC,GAASsM,UAAU7jD,KAASkrD,GAAelrD,GAA/C,CAGA,IAAKpI,EAAIoQ,EAAS3Q,OAAS,EAAGO,GAAK,EAAGA,IACpCkoJ,GAASx/I,EAAK0H,EAASpQ,IAEzB,IAAkC,IAA9B2/C,GAASioG,WAAWx/I,GAAiB,CACvC,GAAIu3C,GAASj8B,OAAOtb,IAASA,EAAK+mF,UAAU1vF,OAAS,EAAG,CACtD,IAAI0oJ,EAAgB/rJ,GAAMsP,KAAKtD,EAAK+mF,WAAW1vF,OAC/C,GAAIiJ,EAAI02C,QAAQh3C,EAAKvH,aAAesnJ,EAAgB,EAClD,OAEF,GAAsB,IAAlBA,GAAuBJ,GAAkB3/I,GAC3C,YAEG,GAAIu3C,GAASsM,UAAU7jD,KAC5BgI,EAAWhI,EAAKqM,WACQ,IAApBrE,EAAS3Q,QAAgB6zD,GAAeljD,EAAS,KACnDhI,EAAKvH,WAAW3B,aAAakR,EAAS,GAAIhI,GAExCgI,EAAS3Q,QAAU+mJ,GAAOziG,GAAQN,QAAQr7C,KAC5C,OAGJM,EAAImJ,OAAOzJ,GAEb,OAAOA,IAELggJ,GAAW,CAAEF,SAAUA,IAEvBG,GAAYjsJ,GAAM+gE,QAElBmrF,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,KAEPtE,GAAe,CACb,IAAK,SACLuE,IAAM,QACN,IAAK,OACL,IAAK,OACL,IAAK,QACL,IAAK,SAEPtE,GAAkB,CAChB,OAAQ,IACR,OAAQ,IACR,QAAS,IACT,SAAU,IACV,SAAU,KAEZ,IAAIuE,GAAe,SAAUtoJ,GAC3B,IAAIwC,EAGJ,OAFAA,EAAMs/C,GAAQL,QAAQ,OAAOh7C,MAC7BjE,EAAI9C,UAAYM,EACTwC,EAAIzD,aAAeyD,EAAIq4D,WAAa76D,GAEzCuoJ,GAAsB,SAAUnxI,EAAOoxI,GACzC,IAAIzqJ,EAAGunB,EAAKjiB,EACR2xB,EAAS,GACb,GAAI5d,EAAO,CAGT,IAFAA,EAAQA,EAAMwE,MAAM,KACpB4sI,EAAQA,GAAS,GACZzqJ,EAAI,EAAGA,EAAIqZ,EAAM5Z,OAAQO,GAAK,EACjCunB,EAAMtP,OAAOgnE,aAAajxE,SAASqL,EAAMrZ,GAAIyqJ,IACxC1E,GAAax+H,KAChBjiB,EAAS,IAAM+T,EAAMrZ,EAAI,GAAK,IAC9Bi3B,EAAO1P,GAAOjiB,EACd2xB,EAAO3xB,GAAUiiB,GAGrB,OAAO0P,IAGX6uH,GAAgB0E,GAAoB,+rEAAwzE,IAC51E,IAAIE,GAAY,SAAUzoJ,EAAMwJ,GAC9B,OAAOxJ,EAAK5D,QAAQoN,EAAO68I,GAAmBC,IAAiB,SAAUhhI,GACvE,OAAOw+H,GAAax+H,IAAQA,MAG5B80C,GAAe,SAAUp6D,GAC3B,OAAQ,GAAKA,GAAM5D,QAAQmqJ,IAAgB,SAAUjhI,GACnD,OAAOw+H,GAAax+H,IAAQA,MAG5BojI,GAAgB,SAAU1oJ,EAAMwJ,GAClC,OAAOxJ,EAAK5D,QAAQoN,EAAO68I,GAAmBC,IAAiB,SAAUhhI,GACvE,OAAIA,EAAI9nB,OAAS,EACR,MAAsC,MAA7B8nB,EAAIC,WAAW,GAAK,QAAiBD,EAAIC,WAAW,GAAK,OAAS,OAAS,IAEtFu+H,GAAax+H,IAAQ,KAAOA,EAAIC,WAAW,GAAK,QAGvDojI,GAAc,SAAU3oJ,EAAMwJ,EAAMo/I,GAEtC,OADAA,EAAWA,GAAY/E,GAChB7jJ,EAAK5D,QAAQoN,EAAO68I,GAAmBC,IAAiB,SAAUhhI,GACvE,OAAOw+H,GAAax+H,IAAQsjI,EAAStjI,IAAQA,MAG7CujI,GAAgB,SAAUlnJ,EAAMinJ,GAClC,IAAIE,EAAcP,GAAoBK,IAAa/E,GAC/CkF,EAAwB,SAAU/oJ,EAAMwJ,GAC1C,OAAOxJ,EAAK5D,QAAQoN,EAAO68I,GAAmBC,IAAiB,SAAUhhI,GACvE,YAA0BzQ,IAAtBivI,GAAax+H,GACRw+H,GAAax+H,QAEGzQ,IAArBi0I,EAAYxjI,GACPwjI,EAAYxjI,GAEjBA,EAAI9nB,OAAS,EACR,MAAsC,MAA7B8nB,EAAIC,WAAW,GAAK,QAAiBD,EAAIC,WAAW,GAAK,OAAS,OAAS,IAEtF,KAAOD,EAAIC,WAAW,GAAK,QAGlCyjI,EAAoB,SAAUhpJ,EAAMwJ,GACtC,OAAOm/I,GAAY3oJ,EAAMwJ,EAAMs/I,IAE7BG,EAAU7C,GAAUzkJ,EAAKvF,QAAQ,MAAO,MAC5C,OAAI6sJ,EAAQC,OAASD,EAAQE,QACpBJ,EAELE,EAAQC,MACNN,EACKI,EAEFL,GAELM,EAAQE,QACHT,GAEFD,IAELz7E,GAAS,SAAUhtE,GACrB,OAAOA,EAAK5D,QAAQoqJ,IAAc,SAAU/kJ,EAAK0nJ,GAC/C,OAAIA,GAEAA,EADsC,MAApCA,EAAQh8D,OAAO,GAAGryE,cACV/O,SAASo9I,EAAQ9oI,OAAO,GAAI,IAE5BtU,SAASo9I,EAAS,IAE1BA,EAAU,OACZA,GAAW,MACJnzI,OAAOgnE,aAAa,OAASmsE,GAAW,IAAK,OAAmB,KAAVA,KAExD1C,GAAS0C,IAAYnzI,OAAOgnE,aAAamsE,IAE3CpF,GAAgBtiJ,IAAQoiJ,GAAcpiJ,IAAQ6mJ,GAAa7mJ,OAGlE2nJ,GAAW,CACbX,UAAWA,GACXruF,aAAcA,GACdsuF,cAAeA,GACfC,YAAaA,GACbE,cAAeA,GACf77E,OAAQA,IAGNq8E,GAAW,GAAIC,GAAW,GAC1BC,GAAYpvJ,GAAM+gE,QAASstE,GAASruI,GAAMkP,KAAMmgJ,GAAWrvJ,GAAM2C,OAAQ2sJ,GAAYtvJ,GAAM6iJ,QAAS0M,GAAYvvJ,GAAMkuC,QACtHzsB,GAAQ,SAAUxE,EAAOilI,GAE3B,OADAjlI,EAAQjd,GAAMsP,KAAK2N,GACZA,EAAQA,EAAMwE,MAAMygI,GAAS,KAAO,IAEzCsN,GAAgB,SAAU3tJ,GAC5B,IACI4tJ,EAAkBC,EAClBC,EAAiBC,EAAaC,EAAmBC,EAFjDrzG,EAAS,GAGTl1C,EAAM,SAAUC,EAAMK,EAAYmM,GACpC,IAAI+7I,EAAI3sF,EAAiBj/D,EACrB6rJ,EAAa,SAAUppF,EAAOvpD,GAChC,IACIzZ,EAAG4zE,EADHx1E,EAAM,GAEV,IAAK4B,EAAI,EAAG4zE,EAAI5Q,EAAMvjE,OAAQO,EAAI4zE,EAAG5zE,IACnC5B,EAAI4kE,EAAMhjE,IAAMyZ,GAAO,GAEzB,OAAOrb,GAETgS,EAAWA,GAAY,GACvBnM,EAAaA,GAAc,GACH,kBAAbmM,IACTA,EAAWyN,GAAMzN,IAEnBxM,EAAOia,GAAMja,GACbuoJ,EAAKvoJ,EAAKnE,OACV,MAAO0sJ,IACL3sF,EAAkB3hD,GAAM,CACtBguI,EACA5nJ,GACAH,KAAK,MACPvD,EAAU,CACR0D,WAAYmoJ,EAAW5sF,GACvBA,gBAAiBA,EACjBpvD,SAAUg8I,EAAWh8I,EAAUm7I,KAEjC1yG,EAAOj1C,EAAKuoJ,IAAO5rJ,GAGnB8rJ,EAAW,SAAUzoJ,EAAMK,GAC7B,IAAIkoJ,EAAIG,EAAYtsJ,EAAG4zE,EACvBhwE,EAAOia,GAAMja,GACbuoJ,EAAKvoJ,EAAKnE,OACVwE,EAAa4Z,GAAM5Z,GACnB,MAAOkoJ,IAEL,IADAG,EAAazzG,EAAOj1C,EAAKuoJ,IACpBnsJ,EAAI,EAAG4zE,EAAI3vE,EAAWxE,OAAQO,EAAI4zE,EAAG5zE,IACxCssJ,EAAWroJ,WAAWA,EAAWjE,IAAM,GACvCssJ,EAAW9sF,gBAAgBn8D,KAAKY,EAAWjE,KAIjD,OAAIsrJ,GAASrtJ,GACJqtJ,GAASrtJ,IAElB4tJ,EAAmB,wDACnBC,EAAe,sFACfC,EAAkB,wLACL,UAAT9tJ,IACF4tJ,GAAoB,8EACpBC,GAAgB,6EAChBC,GAAmB,oGAER,iBAAT9tJ,IACF4tJ,GAAoB,YACpBK,EAAuB,6CACvBH,EAAkB,CAChBA,EACAG,GACApoJ,KAAK,KACP2mI,GAAO5sH,GAAMquI,IAAuB,SAAUtoJ,GAC5CD,EAAIC,EAAM,GAAImoJ,MAEhBE,EAAoB,8BACpBH,EAAe,CACbA,EACAG,GACAnoJ,KAAK,KACPkoJ,EAAc,CACZF,EACAC,GACAjoJ,KAAK,KACP2mI,GAAO5sH,GAAMouI,IAAoB,SAAUroJ,GACzCD,EAAIC,EAAM,GAAIooJ,OAGlBA,EAAcA,GAAe,CAC3BF,EACAC,GACAjoJ,KAAK,KACPH,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,0LAAqMqoJ,GACjNroJ,EAAI,4BAA6B,GAAIqoJ,GACrCroJ,EAAI,0GAA2G,GAAIooJ,GACnHpoJ,EAAI,aAAc,OAAQqoJ,GAC1BroJ,EAAI,KAAM,sBAAuB,MACjCA,EAAI,KAAM,GAAI,MACdA,EAAI,KAAM,QAASqoJ,GACnBroJ,EAAI,KAAM,GAAI,SACdA,EAAI,IAAK,sCAAuCooJ,GAChDpoJ,EAAI,IAAK,OAAQooJ,GACjBpoJ,EAAI,UAAW,gBAAiBqoJ,GAChCroJ,EAAI,MAAO,kDACXA,EAAI,SAAU,wBAAyBqoJ,GACvCroJ,EAAI,QAAS,yBACbA,EAAI,SAAU,wDAAyD,CACrEqoJ,EACA,SACAloJ,KAAK,MACPH,EAAI,QAAS,cACbA,EAAI,MAAO,OAAQ,CACjBqoJ,EACA,QACAloJ,KAAK,MACPH,EAAI,OAAQ,wDACZA,EAAI,QAAS,SAAU,yCAAoD,UAAT1F,EAAmB,OAAS,KAC9F0F,EAAI,WAAY,OAAQ,OACxBA,EAAI,MAAO,QACXA,EAAI,oBAAqB,GAAI,MAC7BA,EAAI,KAAM,GAAI,SACdA,EAAI,KAAM,0BAA2BqoJ,GACrCroJ,EAAI,KAAM,qCAAsCqoJ,GAChDroJ,EAAI,OAAQ,2EAA4EqoJ,GACxFroJ,EAAI,WAAY,qBAAsB,CACpCqoJ,EACA,UACAloJ,KAAK,MACPH,EAAI,QAAS,WAAYooJ,GACzBpoJ,EAAI,QAAS,0NACbA,EAAI,SAAU,4FAAsG,UAAT1F,EAAmB+tJ,EAAcD,GAC5IpoJ,EAAI,SAAU,4CAA6C,mBAC3DA,EAAI,WAAY,iBAAkB,UAClCA,EAAI,SAAU,iCACdA,EAAI,WAAY,yEAChBA,EAAI,OAAQ,aAAc,CACxBqoJ,EACA,MACAloJ,KAAK,MACPH,EAAI,WAAY,GAAIqoJ,GACP,UAAT/tJ,IACF0F,EAAI,OACJA,EAAI,OAAQ,GAAI,CACdooJ,EACA,SACAjoJ,KAAK,MACPH,EAAI,aAAc,GAAIqoJ,GACtBroJ,EAAI,yBAA0B,GAAIooJ,GAClCpoJ,EAAI,SAAU,eAAgBqoJ,GAC9BroJ,EAAI,QAAS,+FAAqG,CAChHqoJ,EACA,gBACAloJ,KAAK,MACPH,EAAI,QAAS,kFAAwF,CACnGqoJ,EACA,gBACAloJ,KAAK,MACPH,EAAI,UAAW,GAAI,cACnBA,EAAI,SAAU,+BACdA,EAAI,QAAS,kCACbA,EAAI,WAAY,GAAI,CAClBooJ,EACA,UACAjoJ,KAAK,MACPH,EAAI,+CAAgD,GAAIqoJ,GACxDroJ,EAAI,SAAU,GAAI,qBAClBA,EAAI,SAAU,GAAI,CAChBqoJ,EACA,cACAloJ,KAAK,MACPH,EAAI,OAAQ,WAAYooJ,GACxBpoJ,EAAI,SAAU,OAAQqoJ,GACtBroJ,EAAI,UAAW,uDACfA,EAAI,SAAU,gBAAiBooJ,GAC/BpoJ,EAAI,WAAY,YAAaooJ,GAC7BpoJ,EAAI,QAAS,iCAAkCooJ,GAC/CpoJ,EAAI,UAAW,OAAQ,CACrBqoJ,EACA,WACAloJ,KAAK,MACPH,EAAI,SAAU,mDAEH,iBAAT1F,IACFouJ,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,UAATpuJ,IACFouJ,EAAS,+BAAgC,aACzCA,EAAS,iBAAkB,eAC3BA,EAAS,IAAK,YACdA,EAAS,kBAAmB,eAC5BA,EAAS,SAAU,qCAErB5hB,GAAO5sH,GAAM,8BAA8B,SAAUja,GAC/Ci1C,EAAOj1C,WACFi1C,EAAOj1C,GAAMwM,SAASxM,aAG1Bi1C,EAAOf,QAAQ1nC,SAASwlF,aACxB/8C,EAAOjyC,OACd0kJ,GAASrtJ,GAAQ46C,EACVA,IAEL0zG,GAAoB,SAAU3wJ,EAAOm2H,GACvC,IAAIryG,EAUJ,OATI9jB,IACF8jB,EAAS,GACY,kBAAV9jB,IACTA,EAAQ,CAAE,IAAKA,IAEjB6uI,GAAO7uI,GAAO,SAAUA,EAAOgD,GAC7B8gB,EAAO9gB,GAAO8gB,EAAO9gB,EAAIm1D,eAA0B,QAATg+D,EAAiBy5B,GAAU5vJ,EAAO,QAAU8vJ,GAAU9vJ,EAAO,YAGpG8jB,GAET,SAAS8sI,GAAO/vJ,GACd,IAGIsiE,EACA0tF,EACAC,EACAC,EAAuBC,EAAwBh6E,EAAuBi6E,EAAaC,EACnFp6E,EAAkBq6E,EAAqBC,EAAmCC,EAAsBC,EAPhG9sJ,EAAW,GACXgQ,EAAW,GACX+8I,EAAkB,GAMlBC,EAAoB,GAAI3hE,EAAkB,GAC1C4hE,EAAoB,SAAUC,EAAQC,EAAcC,GACtD,IAAI5xJ,EAAQa,EAAS6wJ,GAWrB,OAVK1xJ,EAQHA,EAAQ4vJ,GAAU5vJ,EAAO,OAAQ4vJ,GAAU5vJ,EAAMm4D,cAAe,UAPhEn4D,EAAQ0vJ,GAASgC,GACZ1xJ,IACHA,EAAQ4vJ,GAAU+B,EAAc,IAAK/B,GAAU+B,EAAax5F,cAAe,MAC3En4D,EAAQ6vJ,GAAS7vJ,EAAO4xJ,GACxBlC,GAASgC,GAAU1xJ,IAKhBA,GAETa,EAAWA,GAAY,GACvBiwJ,EAAcd,GAAcnvJ,EAASo8C,SACR,IAAzBp8C,EAASgxJ,cACXhxJ,EAAS6iE,eAAiB,QAE5BP,EAAcwtF,GAAkB9vJ,EAASixJ,cACzCjB,EAAgBF,GAAkB9vJ,EAASkxJ,eAAgB,OAC3Db,EAAeP,GAAkB9vJ,EAASmxJ,cAAe,OACzDjB,EAAwBU,EAAkB,sBAAuB,qEACjET,EAAyBS,EAAkB,wBAAyB,mDACpEz6E,EAAwBy6E,EAAkB,uBAAwB,+FAClER,EAAcQ,EAAkB,qBAAsB,iIACtDN,EAAsBM,EAAkB,qBAAsB,kDAAwDz6E,GACtHo6E,EAAoCK,EAAkB,sCAAuC,QAASN,GACtGE,EAAuBI,EAAkB,sBAAuB,sIAChE36E,EAAmB26E,EAAkB,iBAAkB,iJAA4JJ,GACnNC,EAAwBG,EAAkB,uBAAwB,0EAClE5iB,IAAQhuI,EAAS4oF,SAAW,oEAAoExnE,MAAM,MAAM,SAAUja,GACpH6nF,EAAgB7nF,GAAQ,IAAIsrC,OAAO,KAAOtrC,EAAO,SAAU,SAE7D,IAAIiqJ,EAAkB,SAAUlrJ,GAC9B,OAAO,IAAIusC,OAAO,IAAMvsC,EAAItE,QAAQ,WAAY,OAAS,MAEvDyvJ,EAAmB,SAAUzuF,GAC/B,IAAI0uF,EAAIj/I,EAAIq8E,EAAI6iE,EAAI1kJ,EAAS/I,EAASkL,EAAMwiJ,EAAUjrE,EAAasH,EAAU4jE,EAAUjqJ,EAAYu7D,EAAiBvxD,EAAQkgJ,EAAYtC,EAAkBuC,EAAuBxvJ,EAAKhD,EAClLyyJ,EAAoB,8DAA+DC,EAAiB,oDAAqDC,EAAoB,QACjL,GAAIlvF,EAMF,IALAA,EAAgBxhD,GAAMwhD,EAAe,KACjCj/D,EAAS,OACXyrJ,EAAmBzrJ,EAAS,KAAK6D,WACjCmqJ,EAAwBhuJ,EAAS,KAAKo/D,iBAEnCuuF,EAAK,EAAGj/I,EAAKuwD,EAAc5/D,OAAQsuJ,EAAKj/I,EAAIi/I,IAE/C,GADAzkJ,EAAU+kJ,EAAkBxrJ,KAAKw8D,EAAc0uF,IAC3CzkJ,EAAS,CAoBX,GAnBA2E,EAAS3E,EAAQ,GACjB05E,EAAc15E,EAAQ,GACtB6kJ,EAAa7kJ,EAAQ,GACrB2kJ,EAAW3kJ,EAAQ,GACnBrF,EAAa,GACbu7D,EAAkB,GAClBj/D,EAAU,CACR0D,WAAYA,EACZu7D,gBAAiBA,GAEJ,MAAXvxD,IACF1N,EAAQiuJ,WAAY,GAEP,MAAXvgJ,IACF1N,EAAQkuJ,aAAc,GAEL,MAAfnlJ,EAAQ,KACV/I,EAAQmuJ,kBAAmB,GAEzB7C,EAAkB,CACpB,IAAKjtJ,KAAOitJ,EACV5nJ,EAAWrF,GAAOitJ,EAAiBjtJ,GAErC4gE,EAAgBn8D,KAAKI,MAAM+7D,EAAiB4uF,GAE9C,GAAIH,EAEF,IADAA,EAAWpwI,GAAMowI,EAAU,KACtB9iE,EAAK,EAAG6iE,EAAKC,EAASxuJ,OAAQ0rF,EAAK6iE,EAAI7iE,IAE1C,GADA7hF,EAAUglJ,EAAezrJ,KAAKorJ,EAAS9iE,IACnC7hF,EAAS,CAWX,GAVAmC,EAAO,GACPyiJ,EAAW5kJ,EAAQ,GACnBghF,EAAWhhF,EAAQ,GAAGjL,QAAQ,UAAW,KACzC4P,EAAS3E,EAAQ,GACjB1N,EAAQ0N,EAAQ,GACC,MAAb4kJ,IACF3tJ,EAAQouJ,mBAAqBpuJ,EAAQouJ,oBAAsB,GAC3DpuJ,EAAQouJ,mBAAmBtrJ,KAAKinF,GAChC7+E,EAAKwkF,UAAW,GAED,MAAbi+D,EAAkB,QACbjqJ,EAAWqmF,GAClB9qB,EAAgBh8D,OAAOmoJ,GAAUnsF,EAAiB8qB,GAAW,GAC7D,SAEEr8E,IACa,MAAXA,IACF1N,EAAQquJ,kBAAoBruJ,EAAQquJ,mBAAqB,GACzDruJ,EAAQquJ,kBAAkBvrJ,KAAK,CAC7BO,KAAM0mF,EACN1uF,MAAOA,IAET6P,EAAK8hJ,aAAe3xJ,GAEP,MAAXqS,IACF1N,EAAQsuJ,iBAAmBtuJ,EAAQsuJ,kBAAoB,GACvDtuJ,EAAQsuJ,iBAAiBxrJ,KAAK,CAC5BO,KAAM0mF,EACN1uF,MAAOA,IAET6P,EAAKqjJ,YAAclzJ,GAEN,MAAXqS,IACFxC,EAAKsjJ,YAAcvD,GAAU5vJ,EAAO,OAGpC2yJ,EAAkB5tJ,KAAK2pF,IACzB/pF,EAAQyuJ,kBAAoBzuJ,EAAQyuJ,mBAAqB,GACzDvjJ,EAAKjJ,QAAUqrJ,EAAgBvjE,GAC/B/pF,EAAQyuJ,kBAAkB3rJ,KAAKoI,KAE1BxH,EAAWqmF,IACd9qB,EAAgBn8D,KAAKinF,GAEvBrmF,EAAWqmF,GAAY7+E,GAK1BogJ,GAAoC,MAAhB7oE,IACvB6oE,EAAmB5nJ,EACnBmqJ,EAAwB5uF,GAEtB2uF,IACF5tJ,EAAQ4tJ,WAAanrE,EACrB5iF,EAAS+tJ,GAAc5tJ,GAErBguJ,EAAkB5tJ,KAAKqiF,IACzBziF,EAAQiC,QAAUqrJ,EAAgB7qE,GAClCmqE,EAAgB9pJ,KAAK9C,IAErBH,EAAS4iF,GAAeziF,IAM9B0uJ,EAAmB,SAAU5vF,GAC/Bj/D,EAAW,GACX+sJ,EAAkB,GAClBW,EAAiBzuF,GACjBorE,GAAOiiB,GAAa,SAAUnsJ,EAASqD,GACrCwM,EAASxM,GAAQrD,EAAQ6P,aAGzB8+I,EAAoB,SAAUC,GAChC,IAAIC,EAAsB,aACtBD,IACF7D,GAAS+D,oBAAsB/D,GAASgE,eAAiB,KACzD7kB,GAAO5sH,GAAMsxI,EAAgB,MAAM,SAAUrpJ,GAC3C,IAAIwD,EAAU8lJ,EAAoBvsJ,KAAKiD,GAAO4G,EAAwB,MAAfpD,EAAQ,GAAYimJ,EAAY7iJ,EAAS,OAAS,MAAO9I,EAAO0F,EAAQ,GAO/H,GANA8G,EAASxM,GAAQwM,EAASm/I,GAC1BnC,EAAkBxpJ,GAAQ2rJ,EACrB7iJ,IACHgmE,EAAiB9uE,EAAKmwD,eAAiB,GACvC2e,EAAiB9uE,GAAQ,KAEtBxD,EAASwD,GAAO,CACnB,IAAI4rJ,EAAapvJ,EAASmvJ,GAC1BC,EAAa/D,GAAS,GAAI+D,UACnBA,EAAWd,wBACXc,EAAWf,YAClBruJ,EAASwD,GAAQ4rJ,EAEnB/kB,GAAOr6H,GAAU,SAAU7P,EAASkvJ,GAC9BlvJ,EAAQgvJ,KACVn/I,EAASq/I,GAAWlvJ,EAAUkrJ,GAAS,GAAIr7I,EAASq/I,IACpDlvJ,EAAQqD,GAAQrD,EAAQgvJ,YAM9BG,EAAmB,SAAUC,GAC/B,IAAIC,EAAkB,8BACtBtE,GAAS7uJ,EAASo8C,QAAU,KACxB82G,GACFllB,GAAO5sH,GAAM8xI,EAAe,MAAM,SAAU7pJ,GAC1C,IACIpF,EAAQuN,EADR3E,EAAUsmJ,EAAgB/sJ,KAAKiD,GAE/BwD,IACF2E,EAAS3E,EAAQ,GAEf5I,EADEuN,EACOmC,EAAS9G,EAAQ,IAEjB8G,EAAS9G,EAAQ,IAAM,CAAE,WAAY,IAEhD5I,EAAS0P,EAAS9G,EAAQ,IAC1BmhI,GAAO5sH,GAAMvU,EAAQ,GAAI,MAAM,SAAUoiD,GACxB,MAAXz9C,SACKvN,EAAOgrD,GAEdhrD,EAAOgrD,GAAS,WAOxBmkG,EAAiB,SAAUjsJ,GAC7B,IAA8B5D,EAA1BO,EAAUH,EAASwD,GACvB,GAAIrD,EACF,OAAOA,EAETP,EAAImtJ,EAAgB1tJ,OACpB,MAAOO,IAEL,GADAO,EAAU4sJ,EAAgBntJ,GACtBO,EAAQiC,QAAQ7B,KAAKiD,GACvB,OAAOrD,GAIR9D,EAAS6iE,eA0BZ2vF,EAAiBxyJ,EAAS6iE,iBAzB1BmrE,GAAOiiB,GAAa,SAAUnsJ,EAASqD,GACrCxD,EAASwD,GAAQ,CACfK,WAAY1D,EAAQ0D,WACpBu7D,gBAAiBj/D,EAAQi/D,iBAE3BpvD,EAASxM,GAAQrD,EAAQ6P,YAEH,UAApB3T,EAASo8C,QACX4xF,GAAO5sH,GAAM,kBAAkB,SAAUw0B,GACvCA,EAAOx0B,GAAMw0B,EAAM,KACnBjyC,EAASiyC,EAAK,IAAI87G,WAAa97G,EAAK,MAGxCo4F,GAAO5sH,GAAM,sEAAsE,SAAUja,GACvFxD,EAASwD,KACXxD,EAASwD,GAAM6qJ,aAAc,MAGjChkB,GAAO5sH,GAAM,yDAAyD,SAAUja,GAC9ExD,EAASwD,GAAM4qJ,WAAY,KAE7B/jB,GAAO5sH,GAAM,SAAS,SAAUja,GAC9BxD,EAASwD,GAAM8qJ,kBAAmB,MAKtCQ,EAAkBzyJ,EAASqzJ,iBAC3BJ,EAAiBjzJ,EAAS8iE,gBAC1BuuF,EAAiBrxJ,EAASszJ,yBAC1BL,EAAiB,yBACjBjlB,GAAO,CACLulB,GAAI,KACJC,GAAI,KACJrhG,GAAI,QACJ4wB,GAAI,KACJ0wE,GAAI,KACJ/gD,GAAI,oBACJoc,MAAO,QACP4kC,MAAO,QACPC,MAAO,QACPC,OAAQ,WACRC,KAAM,MACNC,MAAO,uBACN,SAAUj4F,EAASjmB,GAChBjyC,EAASiyC,KACXjyC,EAASiyC,GAAMm+G,gBAAkB3yI,GAAMy6C,OAGvC77D,EAASg0J,kBACXhmB,GAAOihB,GAAUjvJ,EAASg0J,mBAAmB,SAAUp+G,GACjDjyC,EAASiyC,WACJjyC,EAASiyC,MAIjBw9G,EAAe,SAClB/B,EAAiB,0BAEnB,IAAI4C,EAAiB,WACnB,OAAO3xF,GAEL4xF,EAAmB,WACrB,OAAOlE,GAELmE,EAAkB,WACpB,OAAO9D,GAELlhE,EAAe,WACjB,OAAOihE,GAEL18F,EAAmB,WACrB,OAAOuiB,GAEL55B,EAAuB,WACzB,OAAOm0G,GAEL4D,EAAwB,WAC1B,OAAO3D,GAELjwF,EAAwB,WAC1B,OAAO2V,GAELk+E,EAAyB,WAC3B,OAAOlE,GAELh3F,EAAsB,WACxB,OAAOm3F,GAELgE,EAAoC,WACtC,OAAO/D,GAELr4E,EAAwB,WAC1B,OAAOg4E,GAELjhE,EAAqB,WACvB,OAAOD,GAELulE,EAAe,SAAUptJ,EAAM8nD,GACjC,IAAIhrD,EAAS0P,EAASxM,EAAKmZ,eAC3B,SAAUrc,IAAUA,EAAOgrD,EAAM3uC,iBAE/Bk0I,EAAU,SAAUrtJ,EAAM6H,GAC5B,IAAIylJ,EAAclxJ,EACd8F,EAAO+pJ,EAAejsJ,GAC1B,GAAIkC,EAAM,CACR,IAAI2F,EAcF,OAAO,EAbP,GAAI3F,EAAK7B,WAAWwH,GAClB,OAAO,EAGT,GADAylJ,EAAeprJ,EAAKkpJ,kBAChBkC,EAAc,CAChBlxJ,EAAIkxJ,EAAazxJ,OACjB,MAAOO,IACL,GAAIkxJ,EAAalxJ,GAAGwC,QAAQ7B,KAAKiD,GAC/B,OAAO,GAQjB,OAAO,GAELutJ,EAAoB,WACtB,OAAO/D,GAET,MAAO,CACLh9I,SAAUA,EACVhQ,SAAUA,EACVswJ,eAAgBA,EAChBE,gBAAiBA,EACjBzgG,iBAAkBA,EAClBwgG,iBAAkBA,EAClB1zF,sBAAuBA,EACvBnkB,qBAAsBA,EACtB+3G,sBAAuBA,EACvBjlE,aAAcA,EACdikE,eAAgBA,EAChBiB,uBAAwBA,EACxBl7F,oBAAqBA,EACrBm7F,kCAAmCA,EACnCp8E,sBAAuBA,EACvB+W,mBAAoBA,EACpBslE,aAAcA,EACdC,QAASA,EACTE,kBAAmBA,EACnBrD,iBAAkBA,EAClBmB,iBAAkBA,EAClBC,kBAAmBA,EACnBQ,iBAAkBA,GAItB,IAAItgF,GAAQ,SAAUzwE,EAAO8Z,EAAG0b,EAAGvc,GACjC,IAAIw5I,EAAM,SAAUhkI,GAElB,OADAA,EAAMpf,SAASof,EAAK,IAAI3uB,SAAS,IAC1B2uB,EAAI3tB,OAAS,EAAI2tB,EAAM,IAAMA,GAEtC,MAAO,IAAMgkI,EAAI34I,GAAK24I,EAAIj9H,GAAKi9H,EAAIx5I,IAErC,SAAS45F,GAAO/0G,EAAUo8C,GACxB,IAII74C,EAEAqxJ,EACAtyF,EACA0tF,EARA6E,EAAY,2DACZC,EAAiB,+HACjBC,EAAc,2BACdC,EAAkB,OAElBC,EAAiB,GAIjBC,EAAgB,SAOpB,IANAl1J,EAAWA,GAAY,GACnBo8C,IACFkmB,EAAclmB,EAAO63G,iBACrBjE,EAAgB5zG,EAAO83G,oBAEzBU,GAAiB,wBAA0BM,GAAe9zI,MAAM,KAC3D7d,EAAI,EAAGA,EAAIqxJ,EAAc5xJ,OAAQO,IACpC0xJ,EAAeL,EAAcrxJ,IAAM2xJ,EAAgB3xJ,EACnD0xJ,EAAeC,EAAgB3xJ,GAAKqxJ,EAAcrxJ,GAEpD,MAAO,CACLovE,MAAO,SAAUh+D,GACf,OAAOA,EAAM/S,QAAQizJ,EAAWliF,KAElC9qE,MAAO,SAAUsB,GACf,IACI0D,EAAS1F,EAAMhI,EAAOg2J,EADtBlyI,EAAS,GAETmyI,EAAep1J,EAASq1J,cACxBC,EAAoBt1J,EAASu1J,qBAAuBlyJ,KACpDmyJ,EAAW,SAAUhkJ,EAAQsjF,EAAQ2gE,GACvC,IAAItyH,EAAKsgE,EAAO5rD,EAAQ3U,EAExB,GADAC,EAAMlgB,EAAOzR,EAAS,OAASsjF,GAC1B3xD,IAGLsgE,EAAQxgF,EAAOzR,EAAS,SAAWsjF,GAC9B2O,IAGL5rD,EAAS50B,EAAOzR,EAAS,UAAYsjF,GAChCj9C,IAGL3U,EAAOjgB,EAAOzR,EAAS,QAAUsjF,GAC5B5xD,KAAL,CAGA,IAAIokE,EAAM,CACRnkE,EACAsgE,EACA5rD,EACA3U,GAEF3/B,EAAI+jG,EAAItkG,OAAS,EACjB,MAAOO,IACL,GAAI+jG,EAAI/jG,KAAO+jG,EAAI/jG,EAAI,GACrB,MAGAA,GAAK,GAAKkyJ,IAGdxyI,EAAOzR,EAASsjF,IAAiB,IAAPvxF,EAAW+jG,EAAI,GAAKA,EAAIjgG,KAAK,YAChD4b,EAAOzR,EAAS,OAASsjF,UACzB7xE,EAAOzR,EAAS,SAAWsjF,UAC3B7xE,EAAOzR,EAAS,UAAYsjF,UAC5B7xE,EAAOzR,EAAS,QAAUsjF,MAE/B4gE,EAAc,SAAUvzJ,GAC1B,IAAyBoB,EAArBpE,EAAQ8jB,EAAO9gB,GACnB,GAAKhD,EAAL,CAGAA,EAAQA,EAAMiiB,MAAM,KACpB7d,EAAIpE,EAAM6D,OACV,MAAOO,IACL,GAAIpE,EAAMoE,KAAOpE,EAAM,GACrB,OAAO,EAIX,OADA8jB,EAAO9gB,GAAOhD,EAAM,IACb,IAELw2J,EAAY,SAAU3kJ,EAAQgK,EAAGG,EAAG9Q,GACjCqrJ,EAAY16I,IAGZ06I,EAAYv6I,IAGZu6I,EAAYrrJ,KAGjB4Y,EAAOjS,GAAUiS,EAAOjI,GAAK,IAAMiI,EAAO9H,GAAK,IAAM8H,EAAO5Y,UACrD4Y,EAAOjI,UACPiI,EAAO9H,UACP8H,EAAO5Y,KAEZhJ,EAAS,SAAU6E,GAErB,OADAivJ,GAAY,EACLF,EAAe/uJ,IAEpBssE,EAAS,SAAUtsE,EAAK0vJ,GAS1B,OARIT,IACFjvJ,EAAMA,EAAItE,QAAQ,gBAAgB,SAAUsE,GAC1C,OAAO+uJ,EAAe/uJ,OAGrB0vJ,IACH1vJ,EAAMA,EAAItE,QAAQ,gBAAiB,OAE9BsE,GAEL2vJ,EAA0B,SAAUC,GACtC,OAAOt6I,OAAOgnE,aAAajxE,SAASukJ,EAAOvvJ,MAAM,GAAI,MAEnDwvJ,EAAqB,SAAU52J,GACjC,OAAOA,EAAMyC,QAAQ,gBAAiBi0J,IAEpCG,EAAa,SAAU9zJ,EAAOoH,EAAK2sJ,EAAMC,EAAMhwJ,EAAKiwJ,GAEtD,GADAjwJ,EAAMA,GAAOiwJ,EACTjwJ,EAEF,OADAA,EAAMssE,EAAOtsE,GACN,IAAOA,EAAItE,QAAQ,MAAO,OAAU,IAG7C,GADA0H,EAAMkpE,EAAOlpE,GAAO2sJ,GAAQC,IACvBl2J,EAASo2J,kBAAmB,CAC/B,IAAIC,EAAY/sJ,EAAI1H,QAAQ,aAAc,IAC1C,GAAI,oBAAoBsC,KAAKmyJ,GAC3B,MAAO,GAET,IAAKr2J,EAASs2J,qBAAuB,oBAAoBpyJ,KAAKmyJ,GAC5D,MAAO,GAMX,OAHIjB,IACF9rJ,EAAM8rJ,EAAanzJ,KAAKqzJ,EAAmBhsJ,EAAK,UAE3C,QAAWA,EAAI1H,QAAQ,MAAO,OAAU,MAEjD,GAAIuH,EAAK,CACPA,EAAMA,EAAIvH,QAAQ,mBAAoB,IACtCuH,EAAMA,EAAIvH,QAAQ,oBAAqBP,GAAQO,QAAQ,0BAA0B,SAAUsE,GACzF,OAAOA,EAAItE,QAAQ,QAASP,MAE9B,MAAOwL,EAAUkoJ,EAAY3uJ,KAAK+C,GAIhC,GAHA4rJ,EAAY5uJ,UAAY0G,EAAQvG,MAAQuG,EAAQ,GAAG7J,OACnDmE,EAAO0F,EAAQ,GAAGjL,QAAQozJ,EAAiB,IAAI10I,cAC/CnhB,EAAQ0N,EAAQ,GAAGjL,QAAQozJ,EAAiB,IACxC7tJ,GAAQhI,EAAO,CAGjB,GAFAgI,EAAO4uJ,EAAmB5uJ,GAC1BhI,EAAQ42J,EAAmB52J,IACU,IAAjCgI,EAAKc,QAAQitJ,KAAgD,IAAvB/tJ,EAAKc,QAAQ,KACrD,SAEF,IAAKjI,EAASo2J,oBAA+B,aAATjvJ,GAAuB,4BAA4BjD,KAAK/E,IAC1F,SAEW,gBAATgI,GAAoC,QAAVhI,EAC5BA,EAAQ,OACU,UAATgI,GAA6B,qBAATA,IAC7BhI,EAAQA,EAAMmhB,eAEhBnhB,EAAQA,EAAMyC,QAAQizJ,EAAWliF,IACjCxzE,EAAQA,EAAMyC,QAAQkzJ,EAAgBkB,GACtC/yI,EAAO9b,GAAQguJ,EAAY3iF,EAAOrzE,GAAO,GAAQA,EAGrDq2J,EAAS,SAAU,IAAI,GACvBA,EAAS,SAAU,UACnBA,EAAS,SAAU,UACnBA,EAAS,SAAU,UACnBA,EAAS,UAAW,IACpBA,EAAS,SAAU,IACnBG,EAAU,SAAU,eAAgB,eAAgB,gBAC9B,gBAAlB1yI,EAAOwmB,eACFxmB,EAAOwmB,OAEe,SAA3BxmB,EAAO,wBACFA,EAAO,gBAGlB,OAAOA,GAETlB,UAAW,SAAUkB,EAAQsjE,GAC3B,IAAcp/E,EAAMhI,EAAhBgK,EAAM,GACNotJ,EAAkB,SAAUpvJ,GAC9B,IAAIqvJ,EAAWjzJ,EAAG4zE,EAAGh4E,EAErB,GADAq3J,EAAYl0F,EAAYn7D,GACpBqvJ,EACF,IAAKjzJ,EAAI,EAAG4zE,EAAIq/E,EAAUxzJ,OAAQO,EAAI4zE,EAAG5zE,IACvC4D,EAAOqvJ,EAAUjzJ,GACjBpE,EAAQ8jB,EAAO9b,GACXhI,IACFgK,IAAQA,EAAInG,OAAS,EAAI,IAAM,IAAMmE,EAAO,KAAOhI,EAAQ,MAK/Dq1J,EAAU,SAAUrtJ,EAAMo/E,GAC5B,IAAIyD,EAEJ,OADAA,EAAWgmE,EAAc,OACrBhmE,IAAYA,EAAS7iF,MAGzB6iF,EAAWgmE,EAAczpE,IACrByD,IAAYA,EAAS7iF,KAK3B,GAAIo/E,GAAejkB,EACjBi0F,EAAgB,KAChBA,EAAgBhwE,QAEhB,IAAKp/E,KAAQ8b,EACX9jB,EAAQ8jB,EAAO9b,IACXhI,GAAW6wJ,IAAiBwE,EAAQrtJ,EAAMo/E,KAC5Cp9E,IAAQA,EAAInG,OAAS,EAAI,IAAM,IAAMmE,EAAO,KAAOhI,EAAQ,KAIjE,OAAOgK,IAKb,IAAIstJ,GAAS92J,GAAMkP,KACf6nJ,GAAS/2J,GAAMooB,KACfiiC,GAAO4nF,GAAIlkH,GACXipI,GAAmB,mBACnBC,GAAqB,eACrBC,GAAiB,SAAU5zI,EAAQjjB,EAAUwuB,GAC/C,IAAIy1H,EAAY,GACZ6S,EAAa92J,EAAS+2J,YACtBC,EAAc,CAChB33J,IAAK,SAAU0P,EAAM5P,EAAOgI,GACtBnH,EAASq1J,gBACXl2J,EAAQa,EAASq1J,cAAcpzJ,KAAKjC,EAASu1J,qBAAuB/mI,IAAcrvB,EAAOgI,EAAM4H,EAAK,KAEtGA,EAAKC,KAAK,YAAc7H,EAAMhI,GAAO6P,KAAK7H,EAAMhI,IAElDC,IAAK,SAAU2P,EAAM5H,GACnB,OAAO4H,EAAKC,KAAK,YAAc7H,IAAS4H,EAAKC,KAAK7H,KAyBtD,OAtBA88I,EAAY,CACVr6I,MAAO,CACLvK,IAAK,SAAU0P,EAAM5P,GACL,OAAVA,GAAmC,kBAAVA,GAIzB23J,GACF/nJ,EAAKC,KAAK,iBAAkB7P,GAE9B4P,EAAKC,KAAK,QAAS7P,IANjB4P,EAAK5F,IAAIhK,IAQbC,IAAK,SAAU2P,GACb,IAAI5P,EAAQ4P,EAAKC,KAAK,mBAAqBD,EAAKC,KAAK,SAErD,OADA7P,EAAQ8jB,EAAOlB,UAAUkB,EAAOpb,MAAM1I,GAAQ4P,EAAK,GAAG1K,UAC/ClF,KAIT23J,IACF7S,EAAU7zI,KAAO6zI,EAAU52H,IAAM2pI,GAE5B/S,GAELgT,GAA0B,SAAUh0I,EAAQlU,GAC9C,IAAImoJ,EAAWnoJ,EAAKC,KAAK,SACrB7P,EAAQ8jB,EAAOlB,UAAUkB,EAAOpb,MAAMqvJ,GAAWnoJ,EAAK,GAAG1K,UACxDlF,IACHA,EAAQ,MAEV4P,EAAKC,KAAK,iBAAkB7P,IAE1Bg4J,GAAgB,SAAUxrJ,EAAMmwC,GAClC,IAAas7G,EAAc9wI,EAAvBxX,EAAM,EACV,GAAInD,EACF,IAAKyrJ,EAAezrJ,EAAK2a,SAAU3a,EAAOA,EAAKm3C,gBAAiBn3C,EAAMA,EAAOA,EAAKm3C,gBAChFx8B,EAAW3a,EAAK2a,WACZw1B,GAA2B,IAAbx1B,GACZA,IAAa8wI,GAAiBzrJ,EAAK+mF,UAAU1vF,UAInD8L,IACAsoJ,EAAe9wI,GAGnB,OAAOxX,GAET,SAASuoJ,GAAS1uI,EAAK3oB,GACrB,IAIIikJ,EAJA9xH,EAAQ9uB,UACK,IAAbrD,IACFA,EAAW,IAGb,IAAIs3J,EAAc,GACdxxH,EAAM9mC,EAAW6B,OACjBksE,EAAQ,GACRt7D,EAAU,EACV8lJ,GAAU,EACVC,GAAW,EACXC,EAAmBlQ,GAAiB5+H,EAAK,CAAEggI,eAAgB3oJ,EAAS2oJ,iBACpE+O,EAAc,GACdt7G,EAASp8C,EAASo8C,OAASp8C,EAASo8C,OAAS2zG,GAAO,IACpD9sI,EAAS8xF,GAAO,CAClBsgD,cAAer1J,EAASq1J,cACxBE,oBAAqBv1J,EAASu1J,qBAC7Bv1J,EAASo8C,QACRq5E,EAASz1H,EAAS23J,UAAY,IAAIviB,GAAWp1I,EAAS43J,OAASxiB,GAAWviB,MAC1E58C,EAAmB75B,EAAOsX,mBAC1BrnD,EAAIk3I,GAAS6B,kBAAiB,WAChC,MAAO,CACL7wI,QAASoU,EACT7kB,QAAS7C,GAAKogD,cAGdsB,EAAU,SAAUh3C,GACtB,GAAoB,kBAATA,EACT,QAASsqE,EAAiBtqE,GACrB,GAAIA,EAAM,CACf,IAAInK,EAAOmK,EAAK2a,SAChB,GAAI9kB,EACF,QAAmB,IAATA,IAAcy0E,EAAiBtqE,EAAKtH,WAGlD,OAAO,GAELjF,EAAM,SAAU4I,GAClB,GAAIA,GAAO2gB,GAAsB,kBAAR3gB,EAAkB,CACzC,IAAI2D,EAAOgd,EAAIwxH,eAAenyI,GAC9B,OAAI2D,GAAQA,EAAKpJ,KAAOyF,EACf2gB,EAAIkvI,kBAAkB7vJ,GAAK,GAE3B2D,EAGX,OAAO3D,GAEL8vJ,EAAK,SAAU9vJ,GAIjB,MAHmB,kBAARA,IACTA,EAAM5I,EAAI4I,IAELqE,EAAErE,IAEP8xC,EAAY,SAAU9xC,EAAKb,EAAM4wJ,GACnC,IAAI1T,EAAMllJ,EACN4P,EAAO+oJ,EAAG9vJ,GAYd,OAXI+G,EAAK/L,SACPqhJ,EAAOJ,EAAU98I,GAEfhI,EADEklJ,GAAQA,EAAKjlJ,IACPilJ,EAAKjlJ,IAAI2P,EAAM5H,GAEf4H,EAAKC,KAAK7H,IAGD,qBAAVhI,IACTA,EAAQ44J,GAAc,IAEjB54J,GAEL64J,EAAa,SAAUhwJ,GACzB,IAAI2D,EAAOvM,EAAI4I,GACf,OAAK2D,EAGEA,EAAKnE,WAFH,IAIP0E,EAAY,SAAUlE,EAAKb,EAAMhI,GACnC,IAAI84J,EAAe5T,EACL,KAAVllJ,IACFA,EAAQ,MAEV,IAAI4P,EAAO+oJ,EAAG9vJ,GACdiwJ,EAAgBlpJ,EAAKC,KAAK7H,GACrB4H,EAAK/L,SAGVqhJ,EAAOJ,EAAU98I,GACbk9I,GAAQA,EAAKhlJ,IACfglJ,EAAKhlJ,IAAI0P,EAAM5P,EAAOgI,GAEtB4H,EAAKC,KAAK7H,EAAMhI,GAEd84J,IAAkB94J,GAASa,EAASk4J,aACtCl4J,EAASk4J,YAAY,CACnBC,QAASppJ,EACT8+E,SAAU1mF,EACVqzC,UAAWr7C,MAIbI,EAAQ,SAAUoM,EAAMukD,GAC1B,IAAKlG,IAA0B,IAAlBr+C,EAAK2a,UAAkB4pC,EAClC,OAAOvkD,EAAKonC,UAAUmd,GAExB,IAAKA,EAAM,CACT,IAAIkoG,EAAUzvI,EAAIuF,cAAcviB,EAAKtH,UAIrC,OAHAoyJ,GAAOuB,EAAWrsJ,IAAO,SAAUqD,GACjC9C,EAAUksJ,EAASppJ,EAAK3K,SAAUy1C,EAAUnuC,EAAMqD,EAAK3K,cAElD+zJ,EAET,OAAO,MAEL/2G,EAAU,WACZ,OAAOrhD,EAASq4J,cAAgB1vI,EAAIjb,MAElClN,EAAc,SAAU83J,GAC1B,IAAIC,EAAUD,GAASxyH,EACnBnd,EAAM4vI,EAAO30J,SACbujJ,EAAWx+H,EAAIyyD,gBACnB,MAAO,CACL9kE,EAAGiiJ,EAAO7oD,aAAey3C,EAAQhyG,WACjC5+B,EAAGgiJ,EAAO9oD,aAAe03C,EAAQ/xG,UACjC30C,EAAG83J,EAAOh1E,YAAc4jE,EAAQliH,YAChC1yB,EAAGgmJ,EAAO/0E,aAAe2jE,EAAQjiH,eAGjCgQ,EAAS,SAAUltC,EAAKm/I,GAC1B,OAAO93C,GAASn6D,OAAOvsB,EAAIjb,KAAMtO,EAAI4I,GAAMm/I,IAEzChxF,EAAW,SAAUnuD,EAAKb,EAAMhI,GAClC,IAAI4P,EAAO+oJ,EAAG9vJ,GAAKmB,IAAIhC,EAAMhI,GACzBa,EAASw4J,eACXvB,GAAwBh0I,EAAQlU,IAGhCwhE,EAAY,SAAUvoE,EAAKywJ,GAC7B,IAAI1pJ,EAAO+oJ,EAAG9vJ,GAAKmB,IAAIsvJ,GACnBz4J,EAASw4J,eACXvB,GAAwBh0I,EAAQlU,IAGhCimC,EAAW,SAAUhtC,EAAKb,EAAMujJ,GAClC,IAAI37I,EAAO+oJ,EAAG9vJ,GACd,OAAI0iJ,EACK37I,EAAK5F,IAAIhC,IAElBA,EAAOA,EAAKvF,QAAQ,UAAU,SAAUoZ,EAAGG,GACzC,OAAOA,EAAEm8C,iBAEE,UAATnwD,IACFA,EAAOyqI,GAAIlkH,IAAMkkH,GAAIlkH,GAAK,GAAK,aAAe,YAEzC3e,EAAK,IAAMA,EAAK,GAAGnF,MAAQmF,EAAK,GAAGnF,MAAMzC,QAAQkT,IAEtDqgC,EAAU,SAAU1yC,GACtB,IAAIvH,EAAG8R,EAUP,OATAvK,EAAM5I,EAAI4I,GACVvH,EAAIu0C,EAAShtC,EAAK,SAClBuK,EAAIyiC,EAAShtC,EAAK,WACO,IAArBvH,EAAEwH,QAAQ,QACZxH,EAAI,IAEmB,IAArB8R,EAAEtK,QAAQ,QACZsK,EAAI,GAEC,CACL9R,EAAG8Q,SAAS9Q,EAAG,KAAOuH,EAAIo9B,aAAep9B,EAAIi9B,YAC7C1yB,EAAGhB,SAASgB,EAAG,KAAOvK,EAAIq9B,cAAgBr9B,EAAIk9B,eAG9C4+F,EAAU,SAAU97H,GACtB,IAAIssC,EAAKnyB,EAIT,OAHAna,EAAM5I,EAAI4I,GACVssC,EAAMY,EAAOltC,GACbma,EAAOu4B,EAAQ1yC,GACR,CACLsO,EAAGg+B,EAAIh+B,EACPC,EAAG+9B,EAAI/9B,EACP9V,EAAG0hB,EAAK1hB,EACR8R,EAAG4P,EAAK5P,IAGR2B,EAAK,SAAUlM,EAAKuB,GACtB,IAAIhG,EACJ,IAAKyE,EACH,OAAO,EAET,IAAKlB,MAAM+gB,QAAQ7f,GAAM,CACvB,GAAiB,MAAbuB,EACF,OAAwB,IAAjBvB,EAAIse,SAEb,GAAIqwI,GAAiBzyJ,KAAKqF,GAAW,CACnC,IAAIu5B,EAAYv5B,EAAS+W,cAAcc,MAAM,KACzC4xI,EAAUhrJ,EAAI3D,SAASic,cAC3B,IAAK/c,EAAIu/B,EAAU9/B,OAAS,EAAGO,GAAK,EAAGA,IACrC,GAAIu/B,EAAUv/B,KAAOyvJ,EACnB,OAAO,EAGX,OAAO,EAET,GAAIhrJ,EAAIse,UAA6B,IAAjBte,EAAIse,SACtB,OAAO,EAGX,IAAIo/B,EAAQ5+C,MAAM+gB,QAAQ7f,GAAeA,EAAR,CAACA,GAClC,OAAO6xI,GAAOtwI,EAAUm8C,EAAK,GAAG5jB,eAAiB4jB,EAAK,GAAI,KAAMA,GAAM1iD,OAAS,GAE7EsQ,EAAa,SAAUtL,EAAKuB,EAAU1G,EAAM61J,GAC9C,IACIC,EADAxkI,EAAS,GAETxoB,EAAOvM,EAAI4I,GACf0wJ,OAAsBr+I,IAAZq+I,EACV71J,EAAOA,IAAgC,SAAvBw+C,IAAUh9C,SAAsBg9C,IAAUj9C,WAAa,MACnEzE,GAAMuU,GAAG3K,EAAU,YACrBovJ,EAAcpvJ,EAEZA,EADe,MAAbA,EACS,SAAUoC,GACnB,OAAyB,IAAlBA,EAAK2a,UAGH,SAAU3a,GACnB,OAAOuI,EAAGvI,EAAMgtJ,KAItB,MAAOhtJ,EAAM,CACX,GAAIA,IAAS9I,IAAS8I,EAAK2a,UAA8B,IAAlB3a,EAAK2a,SAC1C,MAEF,IAAK/c,GAAgC,oBAAbA,GAA2BA,EAASoC,GAAO,CACjE,IAAI+sJ,EAGF,MAAO,CAAC/sJ,GAFRwoB,EAAOvtB,KAAK+E,GAKhBA,EAAOA,EAAKvH,WAEd,OAAOs0J,EAAUvkI,EAAS,MAExBzc,EAAY,SAAU/L,EAAMpC,EAAU1G,GACxC,IAAIg5D,EAAUvoD,EAAW3H,EAAMpC,EAAU1G,GAAM,GAC/C,OAAOg5D,GAAWA,EAAQ74D,OAAS,EAAI64D,EAAQ,GAAK,MAElD+8F,EAAW,SAAUjtJ,EAAMpC,EAAUpC,GACvC,IAAIgrH,EAAO5oH,EACX,GAAIoC,EAMF,IALwB,kBAAbpC,IACT4oH,EAAO,SAAUxmH,GACf,OAAOuI,EAAGvI,EAAMpC,KAGfoC,EAAOA,EAAKxE,GAAOwE,EAAMA,EAAOA,EAAKxE,GACxC,GAAoB,oBAATgrH,GAAuBA,EAAKxmH,GACrC,OAAOA,EAIb,OAAO,MAELktJ,EAAU,SAAUltJ,EAAMpC,GAC5B,OAAOqvJ,EAASjtJ,EAAMpC,EAAU,gBAE9BuvJ,EAAU,SAAUntJ,EAAMpC,GAC5B,OAAOqvJ,EAASjtJ,EAAMpC,EAAU,oBAE9B4C,EAAS,SAAU5C,EAAUi1B,GAC/B,OAAOq7G,GAAOtwI,EAAUnK,EAAIo/B,IAAUx+B,EAASq4J,cAAgB1vI,EAAK,KAElEjkB,EAAM,SAAUsD,EAAKmqH,EAAM3zF,GAC7B,IAAIrK,EACAxoB,EAAsB,kBAAR3D,EAAmB5I,EAAI4I,GAAOA,EAChD,IAAK2D,EACH,OAAO,EAET,GAAIhM,GAAMkoB,QAAQlc,KAAUA,EAAK3I,QAA0B,IAAhB2I,EAAK3I,QAU9C,OATAmxB,EAAS,GACTsiI,GAAO9qJ,GAAM,SAAU3D,EAAKzE,GACtByE,IACiB,kBAARA,IACTA,EAAM5I,EAAI4I,IAEZmsB,EAAOvtB,KAAKurH,EAAKlwH,KAAKu8B,EAAOx2B,EAAKzE,QAG/B4wB,EAET,IAAI5f,EAAUiqB,GAAgBrM,EAC9B,OAAOggG,EAAKlwH,KAAKsS,EAAS5I,IAExB4V,EAAa,SAAUvZ,EAAK2jB,GAC9BmsI,EAAG9vJ,GAAK6G,MAAK,SAAUtL,EAAGoI,GACxB8qJ,GAAO9qI,GAAO,SAAUxsB,EAAOgI,GAC7B+E,EAAUP,EAAMxE,EAAMhI,UAIxB45J,EAAU,SAAU/wJ,EAAKgB,GAC3B,IAAI+F,EAAO+oJ,EAAG9vJ,GACVgiD,GACFj7C,EAAKF,MAAK,SAAUtL,EAAGyN,GACrB,IAA2B,IAAvBA,EAAOgoJ,YAAX,CAGA,MAAOhoJ,EAAOiH,WACZjH,EAAOuS,YAAYvS,EAAOiH,YAE5B,IACEjH,EAAO9L,UAAY,OAAS8D,EAC5BgI,EAAOuS,YAAYvS,EAAOiH,YAC1B,MAAOsY,GACPgzH,GAAS,eAAev6I,KAAK,OAASA,GAAM08G,WAAWn/G,MAAM,GAAGy7B,SAAShxB,GAE3E,OAAOhI,MAGT+F,EAAK/F,KAAKA,IAGV9B,EAAM,SAAU6mH,EAAW5mH,EAAMwkB,EAAO3iB,EAAMkH,GAChD,OAAOxL,EAAIqpH,GAAW,SAAUA,GAC9B,IAAIkrC,EAAyB,kBAAT9xJ,EAAoBwhB,EAAIuF,cAAc/mB,GAAQA,EASlE,OARAoa,EAAW03I,EAAQttI,GACf3iB,IACkB,kBAATA,GAAqBA,EAAKsd,SACnC2yI,EAAO3oJ,YAAYtH,GACM,kBAATA,GAChB+vJ,EAAQE,EAAQjwJ,IAGZkH,EAAyC+oJ,EAAhClrC,EAAUz9G,YAAY2oJ,OAGvC/oJ,EAAS,SAAU/I,EAAMwkB,EAAO3iB,GAClC,OAAO9B,EAAIyhB,EAAIuF,cAAc/mB,GAAOA,EAAMwkB,EAAO3iB,GAAM,IAErDwpE,EAASo8E,GAASp8E,OAClBnxE,EAASutJ,GAAShvF,aAClB2T,EAAa,SAAUpsE,EAAMwkB,EAAO3iB,GACtC,IAAkB7G,EAAd+2J,EAAU,GAEd,IAAK/2J,KADL+2J,GAAW,IAAM/xJ,EACLwkB,EACNA,EAAMvpB,eAAeD,IAAuB,OAAfwpB,EAAMxpB,IAAuC,qBAAfwpB,EAAMxpB,KACnE+2J,GAAW,IAAM/2J,EAAM,KAAOd,EAAOsqB,EAAMxpB,IAAQ,KAGvD,MAAoB,qBAAT6G,EACFkwJ,EAAU,IAAMlwJ,EAAO,KAAO7B,EAAO,IAEvC+xJ,EAAU,OAEfvlG,EAAiB,SAAU3qD,GAC7B,IAAI2C,EACAya,EAAYuC,EAAIuF,cAAc,OAC9Bg1H,EAAOv6H,EAAIi/B,yBACfs7F,EAAK5yI,YAAY8V,GACbpd,IACFod,EAAUlhB,UAAY8D,GAExB,MAAO2C,EAAOya,EAAUnO,WACtBirI,EAAK5yI,YAAY3E,GAGnB,OADAu3I,EAAK3/H,YAAY6C,GACV88H,GAEL9tI,EAAS,SAAUzJ,EAAMwtJ,GAC3B,IAAIC,EAAQtB,EAAGnsJ,GAef,OAdIwtJ,EACFC,EAAMvqJ,MAAK,WACT,IAAIogD,EACJ,MAAOA,EAAQ5rD,KAAK4U,WACK,IAAnBg3C,EAAM3oC,UAAwC,IAAtB2oC,EAAMhqD,KAAKjC,OACrCK,KAAKkgB,YAAY0rC,GAEjB5rD,KAAKe,WAAW3B,aAAawsD,EAAO5rD,SAGvC+R,SAEHgkJ,EAAMhkJ,SAEDgkJ,EAAMp2J,OAAS,EAAIo2J,EAAMv+I,UAAYu+I,EAAM,IAEhDC,EAAmB,SAAUlrJ,GAC/B,OAAOzJ,EAAIyJ,GAAG,SAAUA,GACtB,IAAI5K,EACAooB,EAAQxd,EAAE3G,WACd,IAAKjE,EAAIooB,EAAM3oB,OAAS,EAAGO,GAAK,EAAGA,IACjC4K,EAAEmrJ,oBAAoB3tI,EAAMiqB,KAAKryC,QAInC45C,EAAa,SAAU75B,GACzB,OAAOL,EAAOpb,MAAMyb,IAElB85B,EAAiB,SAAUq7G,EAAWtxJ,GACxC,OAAO8b,EAAOlB,UAAU02I,EAAWtxJ,IAEjCoyJ,EAAW,SAAUj2I,GACvB,IAAI5D,EAAM85I,EACV,GAAIv4J,KAASo2J,GAAS92J,KAAOooB,IAAQ3pB,EAAW4E,SAAU,CACxD,GAAI0zJ,EAAYh0I,GACd,OAEFg0I,EAAYh0I,IAAW,EAEzBk2I,EAAW7wI,EAAIwxH,eAAe,oBACzBqf,IACHA,EAAW7wI,EAAIuF,cAAc,SAC7BsrI,EAASj3J,GAAK,mBACdi3J,EAASh4J,KAAO,WAChBke,EAAOiJ,EAAItY,qBAAqB,QAAQ,GACpCqP,EAAKzH,WACPyH,EAAKjd,aAAa+2J,EAAU95I,EAAKzH,YAEjCyH,EAAKpP,YAAYkpJ,IAGjBA,EAASn2I,WACXm2I,EAASn2I,WAAWC,SAAWA,EAE/Bk2I,EAASlpJ,YAAYqY,EAAIlZ,eAAe6T,KAGxCm2I,GAAU,SAAUnwJ,GACtB,IAAIoW,EACAze,KAASo2J,GAAS92J,KAAOooB,IAAQ3pB,EAAW4E,UAI3C0F,IACHA,EAAM,IAERoW,EAAOiJ,EAAItY,qBAAqB,QAAQ,GACxComJ,GAAOntJ,EAAI8X,MAAM,MAAM,SAAU9X,GAC/B,IAAImX,EACJnX,EAAM3J,GAAM8iJ,gBAAgBn5I,GACxByjE,EAAMzjE,KAGVyjE,EAAMzjE,IAAO,EACbmX,EAAOvQ,EAAO,OAAQ,CACpBC,IAAK,aACLC,KAAM9G,IAERoW,EAAKpP,YAAYmQ,QAlBjB42I,GAAS92J,IAAIk5J,QAAQnwJ,IAqBrBgoF,GAAc,SAAUtpF,EAAK0xJ,EAAKl6H,GACpCs4H,EAAG9vJ,GAAKspF,YAAYooE,EAAKl6H,GAAO3wB,MAAK,WACZ,KAAnBxL,KAAKc,WACPo/I,GAASlgJ,MAAM2L,KAAK,QAAS,UAI/B61E,GAAW,SAAU78E,EAAK0xJ,GAC5B5B,EAAG9vJ,GAAK68E,SAAS60E,IAEfl1E,GAAc,SAAUx8E,EAAK0xJ,GAC/BpoE,GAAYtpF,EAAK0xJ,GAAK,IAEpBpnJ,GAAW,SAAUtK,EAAK0xJ,GAC5B,OAAO5B,EAAG9vJ,GAAKsK,SAASonJ,IAEtB32H,GAAO,SAAU/6B,GACnB8vJ,EAAG9vJ,GAAK+6B,QAENC,GAAO,SAAUh7B,GACnB8vJ,EAAG9vJ,GAAKg7B,QAEN22H,GAAW,SAAU3xJ,GACvB,MAAkC,SAA3B8vJ,EAAG9vJ,GAAKmB,IAAI,YAEjBsN,GAAW,SAAUjF,GACvB,OAASA,GAAS,QAAmBC,KAEnCmoJ,GAAe,SAAU5xJ,GAC3B,IAAI2D,EAAsB,kBAAR3D,EAAmB5I,EAAI4I,GAAOA,EAChD,OAAOk7C,GAASsM,UAAU7jD,GAAQA,EAAK8wC,UAAY8mG,GAAS,eAAep0I,OAAOo0I,GAAS53I,GAAMpM,SAASyJ,QAExG6wJ,GAAe,SAAU7xJ,EAAKgB,GAChC8uJ,EAAG9vJ,GAAK6G,MAAK,WACX,IACE,GAAI,cAAexL,KAEjB,YADAA,KAAKo5C,UAAYzzC,GAGnB,MAAOunB,IAETnb,EAAOmuI,GAASlgJ,MAAM2F,KAAKA,IAAO,OAGlC4f,GAAc,SAAUjd,EAAMmuJ,GAChC,IAAIC,EAAgB36J,EAAI06J,GACxB,OAAOp1J,EAAIiH,GAAM,SAAUA,GACzB,IAAI1H,EAAQikB,EAQZ,OAPAjkB,EAAS81J,EAAc31J,WACvB8jB,EAAc6xI,EAAc7xI,YACxBA,EACFjkB,EAAOxB,aAAakJ,EAAMuc,GAE1BjkB,EAAOqM,YAAY3E,GAEdA,MAGP/J,GAAU,SAAUq3J,EAAQe,EAAQb,GACtC,OAAOz0J,EAAIs1J,GAAQ,SAAUA,GAS3B,OARIr6J,GAAMuU,GAAG8lJ,EAAQ,WACnBf,EAASA,EAAOlmH,WAAU,IAExBomH,GACF1C,GAAOC,GAAOsD,EAAOhiJ,aAAa,SAAUrM,GAC1CstJ,EAAO3oJ,YAAY3E,MAGhBquJ,EAAO51J,WAAWmL,aAAa0pJ,EAAQe,OAG9CviG,GAAS,SAAUzvD,EAAKb,GAC1B,IAAI8xJ,EAQJ,OAPIjxJ,EAAI3D,WAAa8C,EAAKmwD,gBACxB2hG,EAAS/oJ,EAAO/I,GAChBsvJ,GAAOuB,EAAWhwJ,IAAM,SAAUiyJ,GAChC/tJ,EAAU+sJ,EAAQgB,EAAS51J,SAAUy1C,EAAU9xC,EAAKiyJ,EAAS51J,cAE/DzC,GAAQq3J,EAAQjxJ,GAAK,IAEhBixJ,GAAUjxJ,GAEfkyJ,GAAqB,SAAUl/I,EAAGG,GACpC,IAAYg/I,EAAR71D,EAAKtpF,EACT,MAAOspF,EAAI,CACT61D,EAAKh/I,EACL,MAAOg/I,GAAM71D,IAAO61D,EAClBA,EAAKA,EAAG/1J,WAEV,GAAIkgG,IAAO61D,EACT,MAEF71D,EAAKA,EAAGlgG,WAEV,OAAKkgG,GAAMtpF,EAAE8mB,cACJ9mB,EAAE8mB,cAAcs5C,gBAElBkpB,GAEL3xB,GAAQ,SAAUynF,GACpB,OAAOn3I,EAAO0vD,MAAMhzE,GAAMsP,KAAKmrJ,KAE7Bv9G,GAAU,SAAUlxC,EAAMhI,GAC5B,IAAIJ,EAAGiE,EAAYhG,EAAMu2I,EAAY9uH,EAAQ9hB,EAAMkzJ,EAAU,EAE7D,GADA1uJ,EAAOA,EAAKsM,WACRtM,EAAM,CACRsd,EAAS,IAAI+/H,GAAWr9I,EAAMA,EAAKvH,YACnCT,EAAWA,IAAay4C,EAASA,EAAO+c,sBAAwB,MAChE4+E,EAAa37F,EAASA,EAAO87B,wBAA0B,GACvD,EAAG,CAED,GADA12E,EAAOmK,EAAK2a,SACR48B,GAASsM,UAAU7jD,GAAO,CAC5B,IAAI2uJ,EAAW3uJ,EAAKuM,aAAa,kBACjC,GAAIoiJ,EAAU,CACZ3uJ,EAAOsd,EAAOC,KAAkB,QAAboxI,GACnB,SAGF,GADAnzJ,EAAOwE,EAAKtH,SAASic,cACjB3c,GAAYA,EAASwD,GAAO,CAC9B,GAAa,OAATA,EAAe,CACjBkzJ,IACA1uJ,EAAOsd,EAAOC,OACd,SAEF,OAAO,EAET1hB,EAAawwJ,EAAWrsJ,GACxBpI,EAAIiE,EAAWxE,OACf,MAAOO,IAEL,GADA4D,EAAOK,EAAWjE,GAAGc,SACR,SAAT8C,GAA4B,sBAATA,EACrB,OAAO,EAIb,GAAa,IAAT3F,EACF,OAAO,EAET,GAAa,IAATA,IAAeo1J,GAAmB1yJ,KAAKyH,EAAK+mF,WAC9C,OAAO,EAET,GAAa,IAATlxF,GAAcmK,EAAKvH,YAAc2zI,EAAWpsI,EAAKvH,WAAWC,WAAauyJ,GAAmB1yJ,KAAKyH,EAAK+mF,WACxG,OAAO,EAET/mF,EAAOsd,EAAOC,aACPvd,GAEX,OAAO0uJ,GAAW,GAEhBhzI,GAAY,WACd,OAAOsB,EAAIhC,eAETvF,GAAQ,SAAU2sG,EAAWwsC,EAAUC,GACzC,IAAqBC,EAAKC,EAAKC,EAA3B3+I,EAAIqL,KACR,GAAI0mG,GAAawsC,EAiBf,OAhBAv+I,EAAE4K,SAASmnG,EAAU3pH,WAAY+yJ,GAAcppC,IAC/C/xG,EAAE6K,OAAO0zI,EAASn2J,WAAY+yJ,GAAcoD,IAC5CE,EAAMz+I,EAAEm5C,kBACRn5C,EAAIqL,KACJrL,EAAE4K,SAAS2zI,EAASn2J,WAAY+yJ,GAAcoD,GAAY,GAC1Dv+I,EAAE6K,OAAOknG,EAAU3pH,WAAY+yJ,GAAcppC,GAAa,GAC1D2sC,EAAM1+I,EAAEm5C,kBACRwlG,EAAK5sC,EAAU3pH,WACfu2J,EAAGl4J,aAAakpJ,GAASF,SAASxqJ,GAAMw5J,GAAM1sC,GAC1CysC,EACFG,EAAGl4J,aAAa+3J,EAAgBzsC,GAEhC4sC,EAAGl4J,aAAa83J,EAAUxsC,GAE5B4sC,EAAGl4J,aAAakpJ,GAASF,SAASxqJ,GAAMy5J,GAAM3sC,GAC9C34G,EAAO24G,GACAysC,GAAkBD,GAGzB//I,GAAO,SAAUxJ,EAAQ7J,EAAMgrH,EAAM3zF,GACvC,GAAI7+B,GAAMkoB,QAAQ7W,GAAS,CACzB,IAAIzN,EAAIyN,EAAOhO,OACf,MAAOO,IACLyN,EAAOzN,GAAKiX,GAAKxJ,EAAOzN,GAAI4D,EAAMgrH,EAAM3zF,GAE1C,OAAOxtB,EAUT,OARIhR,EAAS04J,SAAY1nJ,IAAW2X,GAAO3X,IAAW80B,GACpD4xH,EAAY9wJ,KAAK,CACfoK,EACA7J,EACAgrH,EACA3zF,IAGGi3F,EAAOj7G,KAAKxJ,EAAQ7J,EAAMgrH,EAAM3zF,GAASv9B,KAE9CiuE,GAAS,SAAUl+D,EAAQ7J,EAAMgrH,GACnC,IAAI5uH,EACJ,GAAI5D,GAAMkoB,QAAQ7W,GAAS,CACzBzN,EAAIyN,EAAOhO,OACX,MAAOO,IACLyN,EAAOzN,GAAK2rE,GAAOl+D,EAAOzN,GAAI4D,EAAMgrH,GAEtC,OAAOnhH,EAET,GAAI0mJ,IAAgB1mJ,IAAW2X,GAAO3X,IAAW80B,GAAM,CACrDviC,EAAIm0J,EAAY10J,OAChB,MAAOO,IAAK,CACV,IAAIqyC,EAAO8hH,EAAYn0J,GACnByN,IAAW4kC,EAAK,IAAQzuC,GAAQA,IAASyuC,EAAK,IAASu8E,GAAQA,IAASv8E,EAAK,IAC/E6/E,EAAOvmD,OAAOt5B,EAAK,GAAIA,EAAK,GAAIA,EAAK,KAI3C,OAAO6/E,EAAOvmD,OAAOl+D,EAAQ7J,EAAMgrH,IAEjCzwF,GAAO,SAAU1wB,EAAQ7J,EAAMpC,GACjC,OAAO0wH,EAAO/zF,KAAK1wB,EAAQ7J,EAAMpC,IAE/BsyD,GAAqB,SAAU1rD,GACjC,GAAIA,GAAQu3C,GAASsM,UAAU7jD,GAAO,CACpC,IAAI0D,EAAkB1D,EAAKuM,aAAa,4BACxC,OAAI7I,GAAuC,YAApBA,EACdA,EAEuB,YAAzB1D,EAAK0D,gBAAgC1D,EAAK0D,gBAAkB,KAEnE,OAAO,MAGPurJ,GAA2B,SAAUjvJ,GAGvC,IAFA,IAAI9I,EAAOw+C,IACP7hB,EAAQ,KACL7zB,GAAQA,IAAS9I,EAAM8I,EAAOA,EAAKvH,WAExC,GADAo7B,EAAQ63B,GAAmB1rD,GACb,OAAV6zB,EACF,MAGJ,OAAOA,GAELiE,GAAU,WACZ,GAAIi0H,EAAa,CACf,IAAIn0J,EAAIm0J,EAAY10J,OACpB,MAAOO,IAAK,CACV,IAAIqyC,EAAO8hH,EAAYn0J,GACvBkyH,EAAOvmD,OAAOt5B,EAAK,GAAIA,EAAK,GAAIA,EAAK,KAGrCikG,GAAOhD,aACTgD,GAAOhD,eAGP5zF,GAAY,SAAUt3C,EAAM1H,GAC9B,MAAO0H,EAAM,CACX,GAAI1H,IAAW0H,EACb,OAAO,EAETA,EAAOA,EAAKvH,WAEd,OAAO,GAELy2J,GAAU,SAAU7+I,GACtB,MAAO,mBAAqBA,EAAEqK,eAAehiB,SAAW,kBAAoB2X,EAAEwK,YAAc,mBAAqBxK,EAAEynC,aAAap/C,SAAW,gBAAkB2X,EAAEyK,WAE7JxlB,GAAO,CACT0nB,IAAKA,EACL3oB,SAAUA,EACV8lC,IAAKA,EACLinC,MAAOA,EACPwqF,QAASA,EACTC,SAAUA,EACVC,iBAAkBA,EAClBC,YAAaA,EACbz0I,OAAQA,EACRm5B,OAAQA,EACRq5E,OAAQA,EACR9yE,QAASA,EACTt2C,EAAGA,EACHyrJ,GAAIA,EACJj1J,KAAM,KACNtD,MAAOA,EACP8hD,QAASA,EACT7gD,YAAaA,EACbsjI,QAASA,EACTppF,QAASA,EACThjC,UAAWA,EACXpE,WAAYA,EACZlU,IAAKA,EACLy5J,QAASA,EACTC,QAASA,EACT3sJ,OAAQA,EACR+H,GAAIA,EACJhN,IAAKA,EACLgJ,OAAQA,EACRqjE,WAAYA,EACZ5f,eAAgBA,EAChBv+C,OAAQA,EACR+gD,SAAUA,EACVnhB,SAAUA,EACVu7B,UAAWA,EACX8oF,iBAAkBA,EAClBntJ,UAAWA,EACXqV,WAAYA,EACZu4B,UAAWA,EACX5E,OAAQA,EACRiI,WAAYA,EACZC,eAAgBA,EAChBm8G,SAAUA,EACVE,QAASA,GACT50E,SAAUA,GACVL,YAAaA,GACblyE,SAAUA,GACVg/E,YAAaA,GACbvuD,KAAMA,GACNC,KAAMA,GACN22H,SAAUA,GACVljJ,SAAUA,GACVsiJ,QAASA,EACTa,aAAcA,GACdC,aAAcA,GACdrnF,OAAQA,EACRnxE,OAAQA,EACRunB,YAAaA,GACbhnB,QAASA,GACT61D,OAAQA,GACRyiG,mBAAoBA,GACpBvnF,MAAOA,GACPjuE,IAAKA,EACLszJ,WAAYA,EACZn7G,QAASA,GACTx1B,UAAWA,GACX68B,UAAWizG,GACX/1I,MAAOA,GACP5G,KAAMA,GACN00D,OAAQA,GACRxtC,KAAMA,GACN21B,mBAAoBA,GACpBujG,yBAA0BA,GAC1Bn3H,QAASA,GACTwf,UAAWA,GACX43G,QAASA,IAKX,OAHA5W,EAAY4S,GAAe5zI,EAAQjjB,GAAU,WAC3C,OAAOiB,MAEFA,IAER,SAAUo2J,GACTA,EAAS92J,IAAM82J,EAASr4J,EAAW4E,UACnCyzJ,EAASnzG,UAAYizG,IAFvB,CAGEE,KAAaA,GAAW,KAC1B,IAAIyD,GAAazD,GAEb92J,GAAMu6J,GAAWv6J,IACjBw6J,GAASp7J,GAAMkP,KAAMmsJ,GAASr7J,GAAMooB,KACpCkzI,GAAe,SAAUhiJ,GAC3B,MAAoB,oBAANA,GAEZiiJ,GAAe,WACjB,IAAIC,EAAS,EACTC,EAAU,EACVC,EAAS,EACTC,EAAS,EACT11H,EAAS,GACTogC,EAAQ,GACRu1F,EAAwB,GACxBC,EAAuB,GACvBC,EAAU,EACVC,EAAa,SAAUpyJ,EAAKgpC,EAASmN,GACvC,IACIz3C,EAAKzF,EADL0J,EAAM1L,GAEN8vB,EAAO,WACTpkB,EAAImJ,OAAO7S,GACPyF,IACFA,EAAIsjC,mBAAqBtjC,EAAI+pB,OAAS/pB,EAAM,MAE9CsqC,KAEE5gB,EAAQ,WACNupI,GAAax7G,GACfA,IAEuB,qBAAZsH,SAA2BA,QAAQ6V,KAC5C7V,QAAQ6V,IAAI,0BAA4BtzD,IAI9C/G,EAAK0J,EAAIwK,WACTzO,EAAMhJ,EAAW4E,SAASsqB,cAAc,UACxClmB,EAAIzF,GAAKA,EACTyF,EAAIxG,KAAO,kBACXwG,EAAIqlB,IAAM1tB,GAAM8iJ,gBAAgBn5I,GAChCtB,EAAI+pB,OAAS1B,EACbroB,EAAIkqB,QAAUR,GACb1yB,EAAW4E,SAASyM,qBAAqB,QAAQ,IAAMrR,EAAW4E,SAAS8J,MAAM4C,YAAYtI,IAEhG3E,KAAKs4J,OAAS,SAAUryJ,GACtB,OAAOs8B,EAAOt8B,KAAS+xJ,GAEzBh4J,KAAKu4J,SAAW,SAAUtyJ,GACxBs8B,EAAOt8B,GAAO+xJ,GAEhBh4J,KAAK6D,IAAM7D,KAAK4tF,KAAO,SAAU3nF,EAAKgpC,EAAS9T,EAAOihB,GACpD,IAAIjgB,EAAQoG,EAAOt8B,QACL+Q,IAAVmlB,IACFwmC,EAAMp/D,KAAK0C,GACXs8B,EAAOt8B,GAAO6xJ,GAEZ7oH,IACGipH,EAAsBjyJ,KACzBiyJ,EAAsBjyJ,GAAO,IAE/BiyJ,EAAsBjyJ,GAAK1C,KAAK,CAC9B0rC,QAASA,EACTmN,QAASA,EACTjhB,MAAOA,GAASn7B,SAItBA,KAAK+R,OAAS,SAAU9L,UACfs8B,EAAOt8B,UACPiyJ,EAAsBjyJ,IAE/BjG,KAAKw4J,UAAY,SAAUvpH,EAAS9T,EAAOihB,GACzCp8C,KAAKy4J,YAAY91F,EAAO1zB,EAAS9T,EAAOihB,IAE1Cp8C,KAAKy4J,YAAc,SAAUC,EAASzpH,EAAS9T,EAAOihB,GACpD,IAAIq8G,EACAE,EAAW,GACXC,EAAgB,SAAU90J,EAAMmC,GAClCyxJ,GAAOQ,EAAsBjyJ,IAAM,SAAUhG,GACvC23J,GAAa33J,EAAS6D,KACxB7D,EAAS6D,GAAMlF,KAAKqB,EAASk7B,UAGjC+8H,EAAsBjyJ,QAAO+Q,GAE/BmhJ,EAAqB50J,KAAK,CACxB0rC,QAASA,EACTmN,QAASA,EACTjhB,MAAOA,GAASn7B,OAElBy4J,EAAc,WACZ,IAAII,EAAiBlB,GAAOe,GA4B5B,GA3BAA,EAAQ/4J,OAAS,EACjB+3J,GAAOmB,GAAgB,SAAU5yJ,GAC3Bs8B,EAAOt8B,KAAS+xJ,EAIhBz1H,EAAOt8B,KAASgyJ,EAIhB11H,EAAOt8B,KAAS8xJ,IAClBx1H,EAAOt8B,GAAO8xJ,EACdK,IACAC,EAAWpyJ,GAAK,WACds8B,EAAOt8B,GAAO+xJ,EACdI,IACAQ,EAAc,UAAW3yJ,GACzBwyJ,OACC,WACDl2H,EAAOt8B,GAAOgyJ,EACdG,IACAO,EAASp1J,KAAK0C,GACd2yJ,EAAc,UAAW3yJ,GACzBwyJ,QAhBFG,EAAc,UAAW3yJ,GAJzB2yJ,EAAc,UAAW3yJ,OAwBxBmyJ,EAAS,CACZ,IAAIU,EAAkBX,EAAqBj1J,MAAM,GACjDi1J,EAAqBx4J,OAAS,EAC9B+3J,GAAOoB,GAAiB,SAAU74J,GACR,IAApB04J,EAASh5J,OACPi4J,GAAa33J,EAASgvC,UACxBhvC,EAASgvC,QAAQrwC,KAAKqB,EAASk7B,OAG7By8H,GAAa33J,EAASm8C,UACxBn8C,EAASm8C,QAAQx9C,KAAKqB,EAASk7B,MAAOw9H,QAMhDF,MAGJZ,GAAaA,aAAe,IAAIA,GAEhC,IAAIkB,GAASz8J,GAAMkP,KACnB,SAASwtJ,KACP,IAAIlqI,EAAQ9uB,KACRuZ,EAAQ,GACRO,EAAO,GACPqd,EAAS,GACT8hI,EAAa,GACbl9J,EAAM,SAAU+H,GAClB,GAAIqzB,EAAOrzB,GACT,OAAOqzB,EAAOrzB,GAAMs5B,UAIpB87H,EAAe,SAAUp1J,GAC3B,IAAIgtB,EAIJ,OAHIqG,EAAOrzB,KACTgtB,EAASqG,EAAOrzB,GAAMo1J,cAEjBpoI,GAAU,IAEfqoI,EAAkB,SAAUr1J,EAAM9E,GACpC,IAAI2B,EAAWq4J,GAAar4J,SAC5B,GAAIA,IAA0C,IAA9Bq4J,GAAaI,aAAwB,CACnD,GAAIp6J,EAEF,GADAA,EAAY,IAAMA,EAAY,KACgC,IAA1DA,EAAU4F,QAAQ,IAAMjE,EAAS6hB,OAAO,EAAG,GAAK,KAClD7hB,EAAWA,EAAS6hB,OAAO,EAAG,QACzB,IAAiD,IAA7CxjB,EAAU4F,QAAQ,IAAMjE,EAAW,KAC5C,OAGJk3J,GAAaA,aAAah0J,IAAIiW,EAAKhW,GAAQ,UAAYnD,EAAW,SAGlEkD,EAAM,SAAU3E,EAAIm6J,EAAOH,GAC7B3/I,EAAMhW,KAAK81J,GACXliI,EAAOj4B,GAAM,CACXk+B,SAAUi8H,EACVH,aAAcA,GAEhB,IAAIpoI,EAAS68G,EAAUsrB,GAAY,SAAUK,GAC3C,OAAOA,EAASx1J,OAAS5E,KAM3B,OAJA+5J,EAAanoI,EAAO+8G,KACpBkrB,GAAOjoI,EAAO88G,MAAM,SAAU0rB,GAC5BA,EAASr5J,cAEJo5J,GAELtnJ,EAAS,SAAUjO,UACdgW,EAAKhW,UACLqzB,EAAOrzB,IAEZy1J,EAAY,SAAUC,EAASC,GACjC,MAAmB,kBAARA,EACFA,EAEiB,kBAAZD,EAAuB,CACnCrrJ,OAAQ,GACRurJ,SAAUD,EACVhoE,OAAQ,IACN,CACFtjF,OAAQqrJ,EAAQrrJ,OAChBurJ,SAAUD,EACVhoE,OAAQ+nE,EAAQ/nE,SAGhBkoE,EAAgB,SAAUC,EAAYlB,GACxC,IAAInsJ,EAAYuiB,EAAMhV,KAAK8/I,GAC3Bb,GAAOL,GAAS,SAAU5xJ,GACxB+wJ,GAAaA,aAAah0J,IAAI0I,EAAY,IAAMzF,OAGhD+yJ,EAAmB,SAAU/1J,EAAMg2J,EAAU7qH,EAAS9T,GACxD,IAAI4+H,EAAOb,EAAap1J,GACxBi1J,GAAOgB,GAAM,SAAUN,GACrB,IAAIpyE,EAASkyE,EAAUO,EAAUL,GACjC7rE,EAAKvG,EAAOqyE,SAAUryE,OAAQrwE,OAAWA,MAEvCi4B,IACE9T,EACF8T,EAAQrwC,KAAKu8B,GAEb8T,EAAQrwC,KAAKi5J,MAIfjqE,EAAO,SAAU9pF,EAAMg2J,EAAU7qH,EAAS9T,EAAOihB,GACnD,IAAItiC,EAAKhW,GAAT,CAGA,IAAIk2J,EAAgC,kBAAbF,EAAwBA,EAAWA,EAAS3rJ,OAAS2rJ,EAASJ,SAAWI,EAASroE,OAC1E,IAA3BuoE,EAAUp1J,QAAQ,OAA4C,IAA9Bo1J,EAAUp1J,QAAQ,SACpDo1J,EAAYhB,GAAa12E,QAAU,IAAM03E,GAE3ClgJ,EAAKhW,GAAQk2J,EAAUn8I,UAAU,EAAGm8I,EAAU73I,YAAY,MACtDgV,EAAOrzB,GACT+1J,EAAiB/1J,EAAMg2J,EAAU7qH,EAAS9T,GAE1C08H,GAAaA,aAAah0J,IAAIm2J,GAAW,WACvC,OAAOH,EAAiB/1J,EAAMg2J,EAAU7qH,EAAS9T,KAChDA,EAAOihB,KAGV69G,EAAU,SAAUn2J,EAAM7D,GACxBk3B,EAAOp4B,eAAe+E,GACxB7D,IAEAg5J,EAAW11J,KAAK,CACdO,KAAMA,EACN7D,SAAUA,KAIhB,MAAO,CACLsZ,MAAOA,EACPO,KAAMA,EACNqd,OAAQA,EACR8hI,WAAYA,EACZl9J,IAAKA,EACLm9J,aAAcA,EACdC,gBAAiBA,EACjBt1J,IAAKA,EACLkO,OAAQA,EACRwnJ,UAAWA,EACXI,cAAeA,EACf/rE,KAAMA,EACNqsE,QAASA,IAGZ,SAAUjB,GACTA,EAAakB,cAAgBlB,IAC7BA,EAAamB,aAAenB,KAF9B,CAGEA,KAAiBA,GAAe,KAElC,IAAI15J,GAAS,SAAUwsD,EAAQrrD,GAC7B,IAAIsrD,EAAWnrD,GAAOkrD,GACtBC,EAASvgD,MAAK,SAAUvP,GACtBA,EAAE2M,MAAMxJ,aAAaqB,EAAQmI,MAAOkjD,EAAOljD,WAG3CvF,GAAQ,SAAUyoD,EAAQrrD,GAC5B,IAAI0zD,EAAUtvC,GAAYinC,GAC1BqI,EAAQ79C,MAAK,WACX,IAAIy1C,EAAWnrD,GAAOkrD,GACtBC,EAASvgD,MAAK,SAAUvP,GACtB6P,GAAO7P,EAAGwE,SAEX,SAAUxE,GACXqD,GAAOrD,EAAGwE,OAGVyyF,GAAU,SAAUtyF,EAAQH,GAC9B,IAAI0yF,EAAev+E,GAAWhU,GAC9BuyF,EAAa78E,MAAK,WAChBxK,GAAOlL,EAAQH,MACd,SAAUxE,GACX2E,EAAOgI,MAAMxJ,aAAaqB,EAAQmI,MAAO3M,EAAE2M,WAG3CkD,GAAS,SAAUlL,EAAQH,GAC7BG,EAAOgI,MAAMqE,YAAYxM,EAAQmI,QAE/BwxJ,GAAS,SAAU35J,EAAS2yF,GAC9B9zF,GAAOmB,EAAS2yF,GAChBtnF,GAAOsnF,EAAS3yF,IAGdurD,GAAW,SAAUF,EAAQxrD,GAC/BkL,EAAKlL,GAAU,SAAU2S,GACvB3T,GAAOwsD,EAAQ74C,OAGfg5C,GAAW,SAAUrrD,EAAQN,GAC/BkL,EAAKlL,GAAU,SAAU2S,GACvBnH,GAAOlL,EAAQqS,OAIfpH,GAAQ,SAAUpL,GACpBA,EAAQmI,MAAM1H,YAAc,GAC5BsK,EAAK8E,GAAS7P,IAAU,SAAU6yF,GAChCpB,GAASoB,OAGTpB,GAAW,SAAUzxF,GACvB,IAAImI,EAAMnI,EAAQmI,MACK,OAAnBA,EAAI7H,YACN6H,EAAI7H,WAAWmf,YAAYtX,IAG3Bg3D,GAAS,SAAUwzB,GACrB,IAAIpmC,EAAa18C,GAAS8iF,GACtBpmC,EAAWrtD,OAAS,GACtBqsD,GAASonC,EAASpmC,GAEpBklC,GAASkB,IAGP6G,GAAQ,SAAU3kF,EAAIu8G,GACxB,IAAIC,EAAQ,KACRvsF,EAAS,WACG,OAAVusF,IACFn2H,EAAW0vC,aAAaymF,GACxBA,EAAQ,OAGRC,EAAW,WAEb,IADA,IAAIzuH,EAAO,GACFkS,EAAK,EAAGA,EAAK9V,UAAUC,OAAQ6V,IACtClS,EAAKkS,GAAM9V,UAAU8V,GAET,OAAVs8G,IACFA,EAAQn2H,EAAWywB,YAAW,WAC5B9W,EAAG3R,MAAM,KAAML,GACfwuH,EAAQ,OACPD,KAGP,MAAO,CACLtsF,OAAQA,EACRwsF,SAAUA,IAGVH,GAAS,SAAUt8G,EAAIu8G,GACzB,IAAIC,EAAQ,KACRvsF,EAAS,WACG,OAAVusF,IACFn2H,EAAW0vC,aAAaymF,GACxBA,EAAQ,OAGRC,EAAW,WAEb,IADA,IAAIzuH,EAAO,GACFkS,EAAK,EAAGA,EAAK9V,UAAUC,OAAQ6V,IACtClS,EAAKkS,GAAM9V,UAAU8V,GAET,OAAVs8G,GACFn2H,EAAW0vC,aAAaymF,GAE1BA,EAAQn2H,EAAWywB,YAAW,WAC5B9W,EAAG3R,MAAM,KAAML,GACfwuH,EAAQ,OACPD,IAEL,MAAO,CACLtsF,OAAQA,EACRwsF,SAAUA,IAIVn2H,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,IAIPm8C,GAAO,SAAU53C,EAASkL,GAC5B,IAAI7P,EAAQC,GAAI0E,EAASkL,GACzB,YAAiBqL,IAAVlb,GAAiC,KAAVA,EAAe,GAAKA,EAAMiiB,MAAM,MAE5Dla,GAAM,SAAUpD,EAASkL,EAAMzM,GACjC,IAAIy2C,EAAM0C,GAAK53C,EAASkL,GACpBolC,EAAK4E,EAAIjgC,OAAO,CAACxW,IAErB,OADAlD,GAAIyE,EAASkL,EAAMolC,EAAG/sC,KAAK,OACpB,GAELuvF,GAAW,SAAU9yF,EAASkL,EAAMzM,GACtC,IAAI6xC,EAAKxlC,EAAO8sC,GAAK53C,EAASkL,IAAO,SAAU1P,GAC7C,OAAOA,IAAMiD,KAOf,OALI6xC,EAAGpxC,OAAS,EACd3D,GAAIyE,EAASkL,EAAMolC,EAAG/sC,KAAK,MAE3B+N,GAAOtR,EAASkL,IAEX,GAGLokG,GAAW,SAAUtvG,GACvB,YAAmCuW,IAA5BvW,EAAQmI,MAAMonG,WAEnBvW,GAAQ,SAAUh5F,GACpB,OAAO43C,GAAK53C,EAAS,UAEnByvG,GAAQ,SAAUzvG,EAAS0vG,GAC7B,OAAOtsG,GAAIpD,EAAS,QAAS0vG,IAE3BL,GAAW,SAAUrvG,EAAS0vG,GAChC,OAAO5c,GAAS9yF,EAAS,QAAS0vG,IAGhCE,GAAQ,SAAU5vG,EAAS0vG,GACzBJ,GAAStvG,GACXA,EAAQmI,MAAMonG,UAAUnsG,IAAIssG,GAE5BD,GAAMzvG,EAAS0vG,IAGfG,GAAa,SAAU7vG,GACzB,IAAIuvG,EAAYD,GAAStvG,GAAWA,EAAQmI,MAAMonG,UAAYvW,GAAMh5F,GAC3C,IAArBuvG,EAAUrwG,QACZoS,GAAOtR,EAAS,UAGhB2vG,GAAW,SAAU3vG,EAAS0vG,GAChC,GAAIJ,GAAStvG,GAAU,CACrB,IAAIuvG,EAAYvvG,EAAQmI,MAAMonG,UAC9BA,EAAUj+F,OAAOo+F,QAEjBL,GAASrvG,EAAS0vG,GAEpBG,GAAW7vG,IAET45J,GAAQ,SAAU55J,EAAS0vG,GAC7B,OAAOJ,GAAStvG,IAAYA,EAAQmI,MAAMonG,UAAUj/F,SAASo/F,IAG3Dhc,GAAc,SAAUh5D,EAAOhU,GACjC,IAAI2J,EAAS,GAOb,OANAtlB,EAAK8E,GAAS6qB,IAAQ,SAAUloB,GAC1BkU,EAAUlU,KACZ6d,EAASA,EAAOpb,OAAO,CAACzC,KAE1B6d,EAASA,EAAOpb,OAAOy+E,GAAYlhF,EAAGkU,OAEjC2J,GAGLwjE,GAAgB,SAAUn5D,EAAOj1B,GACnC,OAAOtC,GAAIsC,EAAUi1B,IAGvB,SAASo5D,GAAmB1jF,EAAI2jF,EAAUr5D,EAAOxjB,EAAGm7E,GAClD,OAAOjiF,EAAGsqB,EAAOxjB,GAAKI,EAAOL,KAAKyjB,GAAS9iB,EAAWy6E,IAAWA,EAAO33D,GAASpjB,EAAOhC,OAASy+E,EAASr5D,EAAOxjB,EAAGm7E,GAGtH,IAAI0B,GAAW,SAAUr5D,EAAOhU,EAAW2rE,GACzC,IAAIryF,EAAU06B,EAAMvyB,MAChBmqF,EAAO16E,EAAWy6E,GAAUA,EAASrrF,GAAS,GAClD,MAAOhH,EAAQM,WAAY,CACzBN,EAAUA,EAAQM,WAClB,IAAIiO,EAAKi1C,GAAQN,QAAQljD,GACzB,GAAI0mB,EAAUnY,GACZ,OAAO+I,EAAOL,KAAK1I,GACd,GAAI+jF,EAAK/jF,GACd,MAGJ,OAAO+I,EAAOhC,QAEZ0+E,GAAU,SAAUt5D,EAAOhU,EAAW2rE,GACxC,IAAIjiF,EAAK,SAAU0F,EAAG1V,GACpB,OAAOA,EAAK0V,IAEd,OAAOg+E,GAAkB1jF,EAAI2jF,GAAUr5D,EAAOhU,EAAW2rE,IAGvDgC,GAAa,SAAU35D,EAAOj1B,EAAU4sF,GAC1C,OAAO0B,GAASr5D,GAAO,SAAUrwB,GAC/B,OAAO6gD,GAAK7gD,EAAG5E,KACd4sF,IAED6B,GAAa,SAAUx5D,EAAOj1B,GAChC,OAAOusF,GAAIvsF,EAAUi1B,IAEnB85D,GAAY,SAAU95D,EAAOj1B,EAAU4sF,GACzC,OAAOyB,GAAkB5oC,GAAMmpC,GAAY35D,EAAOj1B,EAAU4sF,IAG1DwnE,GAAa7yJ,EAAS,kBACtB8yJ,GAAiB9yJ,EAAS,uBAC1B+yJ,GAAmB/yJ,EAAS,2BAE5By7F,GAAW,SAAUxmG,EAAQ+9J,GAC/B,IAAI73I,EAAMlmB,EAAO6L,UAAUyc,SACvB7D,EAAQ8iC,GAAQN,QAAQ/gC,EAAII,gBAC5BxjB,EAAOykD,GAAQN,QAAQjnD,EAAOoU,WAC9B5K,EAAWu0J,EAAenkJ,MAAK,WACjC,MAAO,IAAMgkJ,QACZ,SAAUI,GACX,MAAO,IAAMH,KAAmB,KAAOG,EAAK,QAE1CC,EAAW/uG,GAAMzqC,EAAOyB,EAAIO,aAAa1M,MAAM0K,GAC/CszE,EAAUQ,GAAU0lE,EAAUz0J,GAAU,SAAUkQ,GACpD,OAAOH,GAAGG,EAAG5W,MAEXkd,EAAU,SAAU1V,EAAGZ,GACzB,OAAIoqG,GAAMxpG,EAAGZ,GACJ2R,EAAOL,KAAK3b,GAAIiL,EAAGZ,IAEnB2R,EAAOhC,QAGlB,OAAO0+E,EAAQt9E,MAAK,SAAUnQ,GAC5B,OAAO0V,EAAQ1V,EAAG,GAAKwzJ,MAAoBrjJ,MAAK,SAAUyjJ,GACxD,OAAOl+I,EAAQ1V,EAAG,GAAKuzJ,MAAkBj8J,KAAI,SAAUwF,GACrD,IAAIxD,EAAWu6J,GAAYn+J,EAAQk+J,GACnC,MAAO,CACLA,IAAKA,EACL92J,KAAMA,EACNxD,SAAUA,aAMhBw6J,GAAe,SAAU9vG,GAC3B,OAAOmB,GAAUnB,IAASqvG,GAAMrvG,EAAMsvG,OAEpCO,GAAc,SAAUn+J,EAAQk+J,GAClC,IAAIvwJ,EAAO45C,GAAQN,QAAQjnD,EAAOoU,WAClC,OAAOwjF,GAAcjqF,EAAM,IAAMmwJ,KAAqB,KAAOI,EAAM,OAEjEG,GAAU,SAAUr+J,EAAQoH,GAC9B,IAAIuG,EAAO45C,GAAQN,QAAQjnD,EAAOoU,WAC9BkqJ,EAAU1mE,GAAcjqF,EAAM,IAAMkwJ,KAAmB,KAAOz2J,EAAO,MACrEm3J,EAAY,GAMhB,OALAzvJ,EAAKwvJ,GAAS,SAAU57I,GACtB,IAAIw7I,EAAM7+J,GAAIqjB,EAAGo7I,MACbU,EAAeD,EAAUl8J,eAAe67J,GAAOK,EAAUL,GAAO,GACpEK,EAAUL,GAAOM,EAAaxlJ,OAAO,CAAC0J,OAEjC67I,GAGL5vJ,GAAQ,SAAU3O,EAAQkzH,GAC5B,IAAIurC,EAAkBv/J,GAAK,IACvBw/J,EAAW,WACb,MAAO,CACLv3F,UAAW,GACXquC,SAAUt2G,GAAKmc,EAAOhC,UAGtBslJ,EAAgB,SAAUv3J,EAAM8R,GAClC0lJ,EAAgBx3J,GAAM,SAAUlC,GAE9B,OADAgU,EAAEhU,GACKA,MAGP05J,EAAkB,SAAUx3J,EAAM8R,GACpC,IAAI2lJ,EAAcJ,EAAgBp/J,MAC9B6F,EAAO25J,EAAYx8J,eAAe+E,GAAQy3J,EAAYz3J,GAAQs3J,IAC9DI,EAAa5lJ,EAAEhU,GACnB25J,EAAYz3J,GAAQ03J,EACpBL,EAAgBn/J,IAAIu/J,IAElBE,EAAgB,SAAU33J,EAAM82J,EAAKt6J,GACvC+6J,EAAcv3J,GAAM,SAAUlC,GAC5B4J,EAAK5J,EAAKiiE,WAAW,SAAUjuD,GAC7B,OAAOA,GAAE,EAAM9R,EAAM,CACnB82J,IAAKA,EACL5qJ,MAAO1R,EAAIgC,GAAU,SAAU0qD,GAC7B,OAAOA,EAAKpiD,kBAMlB8yJ,EAAmB,SAAU53J,GAC/Bu3J,EAAcv3J,GAAM,SAAUlC,GAC5B4J,EAAK5J,EAAKiiE,WAAW,SAAUjuD,GAC7B,OAAOA,GAAE,EAAO9R,UAIlB63J,EAAe/pC,IAAO,WACxB,IAAI2pC,EAAcJ,EAAgBp/J,MAC9BwiI,EAAc59G,GAAKlH,GAAK8hJ,IAC5B/vJ,EAAK+yH,GAAa,SAAUz6H,GAC1Bw3J,EAAgBx3J,GAAM,SAAUlC,GAC9B,IAAIqtF,EAAOrtF,EAAKswG,SAASn2G,MAazB,OAZAmnG,GAASxmG,EAAQqb,EAAOL,KAAK5T,IAAOwS,MAAK,WACnC24E,EAAKz4E,WACPklJ,EAAiB53J,GACjBlC,EAAKswG,SAASl2G,IAAI+b,EAAOhC,YAE1B,SAAU+W,GACX,IAAI8tI,EAAM9tI,EAAG8tI,IAAK92J,EAAOgpB,EAAGhpB,KAAMxD,EAAWwsB,EAAGxsB,SAC3C2uF,EAAKp+E,GAAG+pJ,KACXa,EAAc33J,EAAM82J,EAAKt6J,GACzBsB,EAAKswG,SAASl2G,IAAI+b,EAAOL,KAAKkjJ,QAG3B,CACL1oD,SAAUtwG,EAAKswG,SACfruC,UAAWjiE,EAAKiiE,mBAIrB,IACHnnE,EAAO4O,GAAG,UAAU,WAClBqwJ,EAAap2H,YAEf7oC,EAAO4O,GAAG,cAAc,WACtBqwJ,EAAa5pC,cAEf,IAAIzuD,EAAc,SAAUx/D,EAAM8R,GAChC0lJ,EAAgBx3J,GAAM,SAAUlC,GAC9B,MAAO,CACLswG,SAAUtwG,EAAKswG,SACfruC,UAAWjiE,EAAKiiE,UAAUnuD,OAAO,CAACE,SAIxC,MAAO,CAAE0tD,YAAaA,IAGpBlL,GAAU,SAAU17D,EAAQkzH,GAC9B,IAAIgsC,EAAqB,SAAUrlF,GACjC,IAAIslF,EAAgB9jJ,EAAO/U,KAAKuzE,EAAKpyE,WAAW7F,IAAIi8J,OACpD,OAAOsB,EAAc1kJ,KAAKy4G,EAASz4F,SAErCz6B,EAAO4O,GAAG,QAAQ,WAChB5O,EAAO8hD,WAAWD,cAAc,QAAQ,SAAU83B,GAChD7qE,EAAK6qE,GAAO,SAAUE,GACpBqlF,EAAmBrlF,GAAM/qE,MAAK,SAAU7O,IACV,IAAxBA,EAASm/J,YACXvlF,EAAK3W,sBAQbzuC,GAAW,WACb,IAAIotG,EAAc,GACdxzH,EAAW,SAAUjH,EAAMnH,GAC7B4hI,EAAYz6H,GAAQ,CAClBA,KAAMA,EACNnH,SAAUA,IAGVw6B,EAAS,SAAUrzB,GACrB,OAAOy6H,EAAYx/H,eAAe+E,GAAQiU,EAAO/U,KAAKu7H,EAAYz6H,IAAOxF,KAAI,SAAUqZ,GACrF,OAAOA,EAAEhb,YACNob,EAAOhC,QAEd,MAAO,CACLhL,SAAUA,EACVosB,OAAQA,IAIRq3E,GAAW,WAUb,OATAA,GAAW/vG,OAAOgwG,QAAU,SAAkB1mG,GAC5C,IAAK,IAAIwO,EAAGrW,EAAI,EAAGkW,EAAI1W,UAAUC,OAAQO,EAAIkW,EAAGlW,IAE9C,IAAK,IAAIk7B,KADT7kB,EAAI7W,UAAUQ,GACAqW,EACR9X,OAAOC,UAAUK,eAAeH,KAAK2X,EAAG6kB,KAC1CrzB,EAAEqzB,GAAK7kB,EAAE6kB,IAEf,OAAOrzB,GAEFymG,GAAS7qG,MAAM3D,KAAMN,YAE9B,SAASq8J,GAAOxlJ,EAAGzL,GACjB,IAAI/C,EAAI,GACR,IAAK,IAAIqzB,KAAK7kB,EACR9X,OAAOC,UAAUK,eAAeH,KAAK2X,EAAG6kB,IAAMtwB,EAAElG,QAAQw2B,GAAK,IAC/DrzB,EAAEqzB,GAAK7kB,EAAE6kB,IACb,GAAS,MAAL7kB,GAAqD,oBAAjC9X,OAAOu9J,sBACxB,KAAI97J,EAAI,EAAb,IAAgBk7B,EAAI38B,OAAOu9J,sBAAsBzlJ,GAAIrW,EAAIk7B,EAAEz7B,OAAQO,IAC7D4K,EAAElG,QAAQw2B,EAAEl7B,IAAM,GAAKzB,OAAOC,UAAUu9J,qBAAqBr9J,KAAK2X,EAAG6kB,EAAEl7B,MACzE6H,EAAEqzB,EAAEl7B,IAAMqW,EAAE6kB,EAAEl7B,KAEpB,OAAO6H,EAET,SAASwY,KACP,IAAK,IAAIhK,EAAI,EAAGrW,EAAI,EAAGsgB,EAAK9gB,UAAUC,OAAQO,EAAIsgB,EAAItgB,IACpDqW,GAAK7W,UAAUQ,GAAGP,OACf,IAAIgZ,EAAIlV,MAAM8S,GAAIkK,EAAI,EAA3B,IAA8BvgB,EAAI,EAAGA,EAAIsgB,EAAItgB,IAC3C,IAAK,IAAIyX,EAAIjY,UAAUQ,GAAIuC,EAAI,EAAGie,EAAK/I,EAAEhY,OAAQ8C,EAAIie,EAAIje,IAAKge,IAC5D9H,EAAE8H,GAAK9I,EAAElV,GACb,OAAOkW,EAGT,IAAI6pC,GAAS,EACT20C,GAAW,SAAUhpF,GACvB,IAAI8/B,EAAO,IAAI3/B,KACX8gI,EAAOnhG,EAAK1/B,UACZmvI,EAAS1gJ,KAAK61B,MAAsB,IAAhB71B,KAAK0gJ,UAE7B,OADAl7F,KACOr0C,EAAS,IAAMuvI,EAASl7F,GAASrqC,OAAOi3H,IAG7C8sB,GAAQ,SAAUz7J,EAASyD,GAC7BsH,EAAKtH,GAAS,SAAU+O,GACtBo9F,GAAM5vG,EAASwS,OAIf/W,GAAQ,SAAUywD,EAAUC,GAC9B,OAAO3I,GAAQN,QAAQgJ,EAAS/jD,MAAM8mC,UAAUkd,KAE9ClX,GAAU,SAAUiX,GACtB,OAAOzwD,GAAMywD,GAAU,IAErBE,GAAO,SAAUF,GACnB,OAAOzwD,GAAMywD,GAAU,IAGrB4uC,GAAa,SAAU51F,EAAMw1B,GAC/B,IAAI7V,EAAM6V,GAASx/B,EAAW4E,SAC1BkT,EAAM6R,EAAIuF,cAAc,OAE5B,OADApX,EAAI5R,UAAY8D,EACT2K,GAAS2zC,GAAQN,QAAQlwC,KAG9Bg1F,GAAQ,SAAUhoG,GACpB,OAAOA,EAAQmI,MAAM/G,WAEnBgwF,GAAQ,SAAUpxF,EAASrC,GAC7B,IAAI+9J,EAAUvpE,GAAMnyF,GAChB27J,EAASD,EAAQvzJ,MACjB07C,EAAWL,GAAQN,QAAQy4G,EAAO73G,0BAClC83G,EAAkB9gE,GAAWn9F,EAASg+J,GAC1CnwG,GAAS3H,EAAU+3G,GACnBxwJ,GAAMpL,GACNqL,GAAOrL,EAAS6jD,IAGdg4G,GAAO,SACPC,GAAS,SAAU90I,GACrB,OAAOA,IAAQ60I,IAEbE,GAAS,SAAUr6J,GACrB,OAAOA,EAAK5D,QAAQ,IAAI6wC,OAAOktH,GAAM,KAAM,KAEzCG,GAAO,CACTF,OAAQA,GACRD,KAAMA,GACN1wJ,KAAM4wJ,IAGJE,GAAc78G,GAASsM,UACvBwwG,GAAW98G,GAASj8B,OACpBg5I,GAAwB,SAAUt0J,GAIpC,OAHIq0J,GAASr0J,KACXA,EAAOA,EAAKvH,YAEP27J,GAAYp0J,IAASA,EAAKouC,aAAa,mBAE5CmmH,GAAyB,SAAUv0J,GACrC,OAAOq0J,GAASr0J,IAASm0J,GAAKF,OAAOj0J,EAAK1G,OAExCk7J,GAAmB,SAAUx0J,GAC/B,OAAOs0J,GAAsBt0J,IAASu0J,GAAuBv0J,IAE3Dma,GAAa,SAAUna,GACzB,OAAOA,EAAKsM,aAAetM,EAAK82C,YAAcS,GAASZ,KAAK32C,EAAKsM,aAE/DmoJ,GAAe,SAAUz0J,EAAMhJ,GACjC,IAAIgmB,EAAK6uC,EAASrwC,EAAU/iB,EAI5B,GAHAukB,EAAMhd,EAAKm2B,cACX3a,EAAWwB,EAAIlZ,eAAeqwJ,GAAKH,MACnCv7J,EAAauH,EAAKvH,WACbzB,EAgBE,CAEL,GADA60D,EAAU7rD,EAAKm3C,gBACXk9G,GAASxoG,GAAU,CACrB,GAAI2oG,GAAiB3oG,GACnB,OAAOA,EAET,GAAI6oG,GAAuB7oG,GACzB,OAAOA,EAAQhwC,UAAUgwC,EAAQvyD,KAAKjC,OAAS,GAGnDoB,EAAW3B,aAAa0kB,EAAUxb,OA1BvB,CAEX,GADA6rD,EAAU7rD,EAAKuc,YACX83I,GAASxoG,GAAU,CACrB,GAAI2oG,GAAiB3oG,GACnB,OAAOA,EAET,GAAI8oG,GAAyB9oG,GAE3B,OADAA,EAAQhwC,UAAU,GACXgwC,EAGP7rD,EAAKuc,YACP9jB,EAAW3B,aAAa0kB,EAAUxb,EAAKuc,aAEvC9jB,EAAWkM,YAAY6W,GAc3B,OAAOA,GAELo5I,GAAiB,SAAUjsH,GAC7B,IAAIluB,EAAYkuB,EAAIluB,YACpB,SAAKkuB,IAAQ4O,GAASj8B,OAAOb,MAGtBA,EAAUnhB,KAAK0tF,OAAOr+C,EAAI5uB,YAAco6I,GAAKH,MAAQrrH,EAAIksH,aAAeN,GAAuB95I,EAAU08B,mBAE9G29G,GAAgB,SAAUnsH,GAC5B,IAAIluB,EAAYkuB,EAAIluB,YACpB,SAAKkuB,IAAQ4O,GAASj8B,OAAOb,MAGtBA,EAAUnhB,KAAK0tF,OAAOr+C,EAAI5uB,SAAW,KAAOo6I,GAAKH,MAAQrrH,EAAIosH,WAAaR,GAAuB95I,EAAU8B,eAEhHy4I,GAAgB,WAClB,IAAIv7B,EAAKpmI,EAAW4E,SAASsqB,cAAc,MAE3C,OADAk3G,EAAGpuH,aAAa,iBAAkB,KAC3BouH,GAELw7B,GAAc,SAAUptG,EAAW7nD,EAAMhJ,GAC3C,IAAIgmB,EAAKk4I,EAAWz8J,EAgBpB,OAfAukB,EAAMhd,EAAKm2B,cACX++H,EAAYl4I,EAAIuF,cAAcslC,GAC9BqtG,EAAU7pJ,aAAa,iBAAkBrU,EAAS,SAAW,SAC7Dk+J,EAAU7pJ,aAAa,iBAAkB,OACzC6pJ,EAAUvwJ,YAAYqwJ,MACtBv8J,EAAauH,EAAKvH,WACbzB,EAOHyB,EAAW3B,aAAao+J,EAAWl1J,GAN/BA,EAAKuc,YACP9jB,EAAW3B,aAAao+J,EAAWl1J,EAAKuc,aAExC9jB,EAAWkM,YAAYuwJ,GAKpBA,GAELP,GAA2B,SAAU30J,GACvC,OAAOq0J,GAASr0J,IAASA,EAAK1G,KAAK,KAAO66J,GAAKH,MAE7CU,GAAyB,SAAU10J,GACrC,OAAOq0J,GAASr0J,IAASA,EAAK1G,KAAK0G,EAAK1G,KAAKjC,OAAS,KAAO88J,GAAKH,MAEhEmB,GAAc,SAAU94J,GAC1B,IAAI+4J,EAAM/4J,EAAIqI,qBAAqB,MAC/B2wJ,EAASD,EAAIA,EAAI/9J,OAAS,GAC1BkgD,GAAS6nG,QAAQiW,IACnBA,EAAO58J,WAAWmf,YAAYy9I,IAG9BC,GAA0B,SAAUC,GACtC,OAAIA,GAAkBA,EAAennH,aAAa,mBAChD+mH,GAAYI,GACZA,EAAer2H,gBAAgB,kBAC/Bq2H,EAAer2H,gBAAgB,kBAC/Bq2H,EAAer2H,gBAAgB,SAC/Bq2H,EAAer2H,gBAAgB,eACxBq2H,GAEF,MAELC,GAA+B,SAAU1wF,GAC3C,OAAOwvF,GAAsBxvF,EAAMpqD,iBAGjC+6I,GAA0Bl+G,GAAS2zE,sBACnCwqC,GAA2Bn+G,GAAS4yB,uBACpCwrF,GAASp+G,GAASZ,KAClBi/G,GAAWr+G,GAASj8B,OACpBu6I,GAAuBt+G,GAASqnG,eAAe,yBAC/CkX,GAAiBv+G,GAASqnG,eAAe,mDACzCmX,GAAYx+G,GAASqnG,eAAe,SACpCoX,GAAqBxB,GACrByB,GAAmB,SAAUj2J,GAC/B,OAAIg2J,GAAmBh2J,KAGnB41J,GAAS51J,IACP61J,GAAqB71J,EAAKvH,YAKzBq9J,GAAe91J,IAAS21J,GAAO31J,IAAS+1J,GAAU/1J,IAASk2J,GAA4Bl2J,KAE5Fm2J,GAAiB,SAAUn2J,GAC7B,OAAOu3C,GAASsM,UAAU7jD,IAA+C,SAAtCA,EAAKuM,aAAa,iBAEnD2pJ,GAA8B,SAAUl2J,GAC1C,OAAgC,IAAzBm2J,GAAen2J,IAAmB01J,GAAyB11J,IAEhEo2J,GAAe,SAAUp2J,EAAM9I,GACjC,IAAK8I,EAAOA,EAAKvH,WAAYuH,GAAQA,IAAS9I,EAAM8I,EAAOA,EAAKvH,WAAY,CAC1E,GAAIy9J,GAA4Bl2J,GAC9B,OAAO,EAET,GAAIy1J,GAAwBz1J,GAC1B,OAAO,EAGX,OAAO,GAELq2J,GAA+B,SAAUr2J,GAC3C,QAAKk2J,GAA4Bl2J,KAKnB,IAFPg5C,EAAMogB,GAAOp5D,EAAK0E,qBAAqB,OAAO,SAAU8jB,EAAQnsB,GACrE,OAAOmsB,GAAUitI,GAAwBp5J,MACxC,IAEDi6J,GAAW,SAAUt2J,GACvB,OAAO81J,GAAe91J,IAASq2J,GAA6Br2J,IAE1Du2J,GAA2B,SAAUv2J,EAAM9I,GAC7C,OAAO++J,GAAiBj2J,IAASo2J,GAAap2J,EAAM9I,IAGlD22B,GAAQn5B,KAAKm5B,MACbu2B,GAAU,SAAUxuB,GACtB,OAAKA,EAUE,CACL2B,KAAM1J,GAAM+H,EAAK2B,MACjBC,IAAK3J,GAAM+H,EAAK4B,KAChB0U,OAAQre,GAAM+H,EAAKsW,QACnB4rD,MAAOjqE,GAAM+H,EAAKkiE,OAClB31E,MAAO0L,GAAM+H,EAAKzT,OAClBC,OAAQyL,GAAM+H,EAAKxT,SAfZ,CACLmV,KAAM,EACNC,IAAK,EACL0U,OAAQ,EACR4rD,MAAO,EACP31E,MAAO,EACPC,OAAQ,IAYV1E,GAAW,SAAUkY,EAAM4gI,GAS7B,OARA5gI,EAAOwuB,GAAQxuB,GACX4gI,IAGF5gI,EAAK2B,KAAO3B,EAAK2B,KAAO3B,EAAKzT,OAF7ByT,EAAKkiE,MAAQliE,EAAK2B,KAKpB3B,EAAKzT,MAAQ,EACNyT,GAEL6gI,GAAU,SAAUC,EAAOC,GAC7B,OAAOD,EAAMn/H,OAASo/H,EAAMp/H,MAAQm/H,EAAMl/H,MAAQm/H,EAAMn/H,KAAOk/H,EAAMxqH,SAAWyqH,EAAMzqH,QAAUwqH,EAAM5+D,QAAU6+D,EAAM7+D,OAEpH8+D,GAAkB,SAAUC,EAAWH,EAAOC,GAChD,OAAOE,GAAa,GAAKA,GAAaniK,KAAKC,IAAI+hK,EAAMt0I,OAAQu0I,EAAMv0I,QAAU,GAE3E00I,GAAU,SAAUJ,EAAOC,GAC7B,IAAII,EAAariK,KAAKC,IAAIgiK,EAAMv0I,OAAS,EAAGs0I,EAAMt0I,OAAS,GAC3D,OAAIs0I,EAAMxqH,OAAS6qH,EAAaJ,EAAMn/H,OAGlCk/H,EAAMl/H,IAAMm/H,EAAMzqH,SAGf0qH,GAAgBD,EAAMn/H,IAAMk/H,EAAMxqH,OAAQwqH,EAAOC,IAEtDK,GAAU,SAAUN,EAAOC,GAC7B,OAAID,EAAMl/H,IAAMm/H,EAAMzqH,UAGlBwqH,EAAMxqH,OAASyqH,EAAMn/H,MAGlBo/H,GAAgBD,EAAMzqH,OAASwqH,EAAMl/H,IAAKk/H,EAAOC,IAEtDM,GAAa,SAAUrhI,EAAMsT,EAASC,GACxC,OAAOD,GAAWtT,EAAK2B,MAAQ2R,GAAWtT,EAAKkiE,OAAS3uD,GAAWvT,EAAK4B,KAAO2R,GAAWvT,EAAKsW,QAE7FgrH,GAAY,SAAUzyF,EAAOC,GAC/B,OAAIA,EAAMntC,KAAOktC,EAAMltC,MAAQmtC,EAAMozB,MAAQrzB,EAAMqzB,MAC1C,EAEApzB,EAAMntC,KAAOktC,EAAMltC,KAAOmtC,EAAMntC,KAAOktC,EAAMltC,KAAOmtC,EAAMozB,MAAQrzB,EAAMqzB,OAG/E++D,GAAY,SAAUpyF,EAAOC,GAC/B,OAAIA,EAAMltC,IAAMitC,EAAMjtC,KAAOktC,EAAMx4B,OAASu4B,EAAMv4B,OACzC,EAEAw4B,EAAMltC,IAAMitC,EAAMjtC,IAAMktC,EAAMltC,IAAMitC,EAAMjtC,IAAMktC,EAAMx4B,OAASu4B,EAAMv4B,QAG5EirH,GAAc,SAAU1yF,EAAOC,GACjC,MAAO,CACL/5D,EAAGusJ,GAAUzyF,EAAOC,GACpB95D,EAAGisJ,GAAUpyF,EAAOC,KAIpB0yF,GAAkB,SAAUtyF,GAC9B,IAAIpqD,EAAiBoqD,EAAMpqD,eAAgBG,EAAciqD,EAAMjqD,YAC/D,OAAIH,EAAe09B,iBAAmB0sB,EAAMhqD,YAAcD,EAAc,EAC/DH,EAAerO,WAAWwO,GAE5B,MAEL3a,GAAU,SAAUua,EAAWV,GAOjC,OAN2B,IAAvBU,EAAUE,UAAkBF,EAAU29B,kBACpCr+B,GAAUU,EAAUpO,WAAWhV,SACjC0iB,EAASU,EAAUpO,WAAWhV,OAAS,GAEzCojB,EAAYA,EAAUpO,WAAW0N,IAE5BU,GAGL48I,GAAiB,IAAIvwH,OAAO,weAC5BwwH,GAAkB,SAAUl5I,GAC9B,MAAqB,kBAAPA,GAAmBA,EAAGgB,WAAW,IAAM,KAAOi4I,GAAe9+J,KAAK6lB,IAG9Ew9B,GAAQ,SAAUC,EAAIC,EAAIxuC,GAC5B,OAAOuuC,EAAG3tC,UAAY4tC,EAAG5tC,SAAWuB,EAAOL,KAAK9B,EAAEuuC,EAAGxtC,WAAYytC,EAAGztC,aAAeoB,EAAOhC,QAExF8pJ,GAAQ,SAAU17G,EAAIC,EAAI07G,EAAIlqJ,GAChC,OAAOuuC,EAAG3tC,UAAY4tC,EAAG5tC,UAAYspJ,EAAGtpJ,SAAWuB,EAAOL,KAAK9B,EAAEuuC,EAAGxtC,WAAYytC,EAAGztC,WAAYmpJ,EAAGnpJ,aAAeoB,EAAOhC,QAGtHgqJ,GAAU,GAAG78J,MACb+T,GAAK,WAEP,IADA,IAAIhE,EAAI,GACCuC,EAAK,EAAGA,EAAK9V,UAAUC,OAAQ6V,IACtCvC,EAAEuC,GAAM9V,UAAU8V,GAEpB,IAAIlS,EAAOy8J,GAAQnhK,KAAKc,WACxB,OAAO,SAAUuT,GACf,IAAK,IAAI/S,EAAI,EAAGA,EAAIoD,EAAK3D,OAAQO,IAC/B,GAAIoD,EAAKpD,GAAG+S,GACV,OAAO,EAGX,OAAO,IAGP+sJ,GAAM,WAER,IADA,IAAI/sJ,EAAI,GACCuC,EAAK,EAAGA,EAAK9V,UAAUC,OAAQ6V,IACtCvC,EAAEuC,GAAM9V,UAAU8V,GAEpB,IAAIlS,EAAOy8J,GAAQnhK,KAAKc,WACxB,OAAO,SAAUuT,GACf,IAAK,IAAI/S,EAAI,EAAGA,EAAIoD,EAAK3D,OAAQO,IAC/B,IAAKoD,EAAKpD,GAAG+S,GACX,OAAO,EAGX,OAAO,IAGPgtJ,GAAY,CACdD,IAAKA,GACL/oJ,GAAIA,IAGFipJ,GAAcrgH,GAASsM,UACvBg0G,GAAqB5B,GACrBl9C,GAAYxhE,GAASsnG,iBAAiB,UAAW,eACjDiZ,GAAYvgH,GAASsnG,iBAAiB,QAAS,cAC/CkZ,GAA+BJ,GAAUD,IAAIE,GAAaC,GAAoBxqJ,EAAIyqJ,KAClFE,GAAW3qJ,EAAIkqC,GAASsnG,iBAAiB,cAAe,0BACxDoZ,GAAW1gH,GAASj8B,OACpB48I,GAAS3gH,GAASZ,KAClB4B,GAAY42G,GAAW52G,UACvB4/G,GAAej4J,GACf8a,GAAc,SAAUgC,GAC1B,MAAO,gBAAiBA,EAAMA,EAAIhC,cAAgBm0I,GAAWv6J,IAAI8mB,aAE/D08I,GAAe,SAAUj5I,GAC3B,OAAOA,GAAO,YAAY5mB,KAAK4mB,IAE7Bk5I,GAAU,SAAU/9I,GACtB,QAASA,EAAIW,YAAcX,EAAIY,QAE7Bo9I,GAA0B,SAAUxzF,GACtC,IAEIjrE,EAFA4gB,EAAYqqD,EAAMpqD,eAClBX,EAAS+qD,EAAMjqD,YAEnB,SAAIu9I,GAAatzF,EAAMzuE,aAAe2hK,GAASv9I,EAAUhiB,aAAe8+C,GAASj8B,OAAOb,KACtF5gB,EAAO4gB,EAAUnhB,KACb8+J,GAAav+J,EAAKkgB,EAAS,KAAOq+I,GAAav+J,EAAKkgB,EAAS,OAMjEw+I,GAAkB,SAAUC,GAC9B,IAIIC,EAJAz7I,EAAMw7I,EAAOriI,cACb7b,EAAMU,GAAYgC,GAClB07I,EAAO17I,EAAIlZ,eAAe,KAC1BrL,EAAa+/J,EAAO//J,WAOxB,OALAA,EAAW3B,aAAa4hK,EAAMF,GAC9Bl+I,EAAIW,SAASy9I,EAAM,GACnBp+I,EAAIY,OAAOw9I,EAAM,GACjBD,EAAar0G,GAAQ9pC,EAAI4lF,yBACzBznG,EAAWmf,YAAY8gJ,GAChBD,GAELE,GAAkC,SAAUr+I,GAC9C,IAAIg6E,EAAKh6E,EAAII,eACTk+I,EAAKt+I,EAAIw9B,aACT+gH,EAAKv+I,EAAIO,YACTi+I,EAAKx+I,EAAIQ,UACb,GAAIw5E,IAAOskE,GAAMrhH,GAASj8B,OAAOs9I,IAAc,IAAPC,GAAmB,IAAPC,EAAU,CAC5D,IAAIr9I,EAASnB,EAAIq9B,aAEjB,OADAl8B,EAAO8tC,YAAYqvG,GACZ14D,GAAsBzkF,GAE7B,OAAO,MAGPs9I,GAAa,SAAU1oJ,GACzB,OAAkB,IAAXA,EAAEknB,MAA0B,IAAZlnB,EAAEynF,OAAyB,IAAVznF,EAAEmnB,KAA0B,IAAbnnB,EAAE67B,QAEvDg0D,GAAwB,SAAUj2D,GACpC,IAAIwuH,EAAYO,EAOhB,OANAA,EAAc/uH,EAAKgmF,iBAEjBwoC,EADEO,EAAY3hK,OAAS,EACV+sD,GAAQ40G,EAAY,IAEpB50G,GAAQna,EAAKi2D,0BAEvBm4D,GAAQpuH,IAASiuH,GAAOjuH,IAAS8uH,GAAWN,GACxCF,GAAgBtuH,GAErB8uH,GAAWN,IAAeJ,GAAQpuH,GAC7B0uH,GAAgC1uH,GAElCwuH,GAELQ,GAA0B,SAAUR,EAAYjC,GAClD,IAAI0C,EAAgBx7I,GAAS+6I,EAAYjC,GAGzC,OAFA0C,EAAc/2I,MAAQ,EACtB+2I,EAAcphE,MAAQohE,EAAc3hI,KAAO,EACpC2hI,GAELC,GAA8B,SAAUC,GAC1C,IACIC,EAAYr5J,EADZg5J,EAAc,GAEdM,EAAwB,SAAUb,GACV,IAAtBA,EAAWr2I,SAGX42I,EAAY3hK,OAAS,GACnBo/J,GAAQgC,EAAYO,EAAYA,EAAY3hK,OAAS,KAI3D2hK,EAAY/9J,KAAKw9J,KAEfc,EAAqB,SAAU9+I,EAAWV,GAC5C,IAAI+qD,EAAQ9pD,GAAYP,EAAU0b,eAClC,GAAIpc,EAASU,EAAUnhB,KAAKjC,OAAQ,CAClC,GAAIigK,GAAgB78I,EAAUnhB,KAAKygB,IACjC,OAAOi/I,EAET,GAAI1B,GAAgB78I,EAAUnhB,KAAKygB,EAAS,MAC1C+qD,EAAM7pD,SAASR,EAAWV,GAC1B+qD,EAAM5pD,OAAOT,EAAWV,EAAS,IAC5Bu+I,GAAwBxzF,IAE3B,OADAw0F,EAAsBL,GAAwB/4D,GAAsBp7B,IAAQ,IACrEk0F,EAITj/I,EAAS,IACX+qD,EAAM7pD,SAASR,EAAWV,EAAS,GACnC+qD,EAAM5pD,OAAOT,EAAWV,GACnBu+I,GAAwBxzF,IAC3Bw0F,EAAsBL,GAAwB/4D,GAAsBp7B,IAAQ,KAG5E/qD,EAASU,EAAUnhB,KAAKjC,SAC1BytE,EAAM7pD,SAASR,EAAWV,GAC1B+qD,EAAM5pD,OAAOT,EAAWV,EAAS,GAC5Bu+I,GAAwBxzF,IAC3Bw0F,EAAsBL,GAAwB/4D,GAAsBp7B,IAAQ,MAIlF,GAAImzF,GAASmB,EAAc3+I,aAEzB,OADA8+I,EAAmBH,EAAc3+I,YAAa2+I,EAAcr/I,UACrDi/I,EAET,GAAIpB,GAAYwB,EAAc3+I,aAC5B,GAAI2+I,EAAcrE,UAChB/0J,EAAOm4J,GAAaiB,EAAc3+I,YAAa2+I,EAAcr/I,UACzDk+I,GAASj4J,IACXu5J,EAAmBv5J,EAAMA,EAAK1G,KAAKjC,QAEjC0gK,GAA6B/3J,KAAUk4J,GAAOl4J,IAChDs5J,EAAsBL,GAAwB/4D,GAAsBlgG,IAAO,QAExE,CAKL,GAJAA,EAAOm4J,GAAaiB,EAAc3+I,YAAa2+I,EAAcr/I,UACzDk+I,GAASj4J,IACXu5J,EAAmBv5J,EAAM,GAEvB+3J,GAA6B/3J,IAASo5J,EAAcrE,UAEtD,OADAuE,EAAsBL,GAAwB/4D,GAAsBlgG,IAAO,IACpEg5J,EAETK,EAAalB,GAAaiB,EAAc3+I,YAAa2+I,EAAcr/I,SAAW,GAC1Eg+I,GAA6BsB,KAAgBnB,GAAOmB,KAClDtgD,GAAUsgD,IAAetgD,GAAU/4G,KAAU+3J,GAA6B/3J,KAC5Es5J,EAAsBL,GAAwB/4D,GAAsBm5D,IAAa,IAGjFtB,GAA6B/3J,IAC/Bs5J,EAAsBL,GAAwB/4D,GAAsBlgG,IAAO,IAIjF,OAAOg5J,GAET,SAASQ,GAAc/+I,EAAWV,EAAQi/I,GACxC,IAAInE,EAAY,WACd,OAAIoD,GAASx9I,GACO,IAAXV,GAIPg7I,EAAU,WACZ,OAAIkD,GAASx9I,GACJV,GAAUU,EAAUnhB,KAAKjC,OAE3B0iB,GAAUU,EAAUpO,WAAWhV,QAEpCoiK,EAAU,WACZ,IAAI30F,EAIJ,OAHAA,EAAQ9pD,GAAYP,EAAU0b,eAC9B2uC,EAAM7pD,SAASR,EAAWV,GAC1B+qD,EAAM5pD,OAAOT,EAAWV,GACjB+qD,GAELmrD,EAAiB,WAInB,OAHK+oC,IACHA,EAAcG,GAA4BK,GAAc/+I,EAAWV,KAE9Di/I,GAELU,EAAY,WACd,OAAOzpC,IAAiB54H,OAAS,GAE/Bo/J,EAAU,SAAU2C,GACtB,OAAOA,GAAiB3+I,IAAc2+I,EAAc3+I,aAAeV,IAAWq/I,EAAcr/I,UAE1F7Z,EAAU,SAAUlJ,GACtB,OAAOmhK,GAAa19I,EAAWzjB,EAAS+iB,EAAS,EAAIA,IAEvD,MAAO,CACLU,UAAWtb,EAASsb,GACpBV,OAAQ5a,EAAS4a,GACjB0/I,QAASA,EACTxpC,eAAgBA,EAChBypC,UAAWA,EACX7E,UAAWA,EACXE,QAASA,EACT0B,QAASA,EACTv2J,QAASA,IAGZ,SAAUs5J,GACTA,EAAcG,eAAiB,SAAU70F,GACvC,OAAO00F,EAAc10F,EAAMpqD,eAAgBoqD,EAAMjqD,cAEnD2+I,EAAcI,aAAe,SAAU90F,GACrC,OAAO00F,EAAc10F,EAAMhtB,aAAcgtB,EAAMhqD,YAEjD0+I,EAAcz+J,MAAQ,SAAUiF,GAC9B,OAAOw5J,EAAcx5J,EAAKvH,WAAY8/C,GAAUv4C,GAAQ,IAE1Dw5J,EAAcxiK,OAAS,SAAUgJ,GAC/B,OAAOw5J,EAAcx5J,EAAKvH,WAAY8/C,GAAUv4C,KAElDw5J,EAAc1C,QAAU,SAAU+C,EAAMC,GACtC,OAAOl+G,GAAM7nC,GAAK+lJ,EAAK7pC,kBAAmBvlH,GAAKmvJ,EAAK5pC,kBAAmB6mC,IAAS3oJ,OAAM,IAExFqrJ,EAAcxC,QAAU,SAAU6C,EAAMC,GACtC,OAAOl+G,GAAMlxC,GAAKovJ,EAAK7pC,kBAAmBl8G,GAAK8lJ,EAAK5pC,kBAAmB+mC,IAAS7oJ,OAAM,IAExFqrJ,EAAc3E,UAAY,SAAUlsH,GAClC,QAAOA,GAAMA,EAAIksH,aAEnB2E,EAAczE,QAAU,SAAUpsH,GAChC,QAAOA,GAAMA,EAAIosH,WAEnByE,EAAcO,eAAiB,SAAUpxH,GACvC,QAAOA,GAAM4O,GAASj8B,OAAOqtB,EAAIluB,cAEnC++I,EAAcQ,kBAAoB,SAAUrxH,GAC1C,OAA6C,IAAtC6wH,EAAcO,eAAepxH,KA7BxC,CA+BE6wH,KAAkBA,GAAgB,KACpC,IAy0BIS,GAz0BAC,GAAkBV,GAElBW,GAAW5iH,GAASj8B,OACpB8+I,GAAY7iH,GAAS6nG,QACrBib,GAAclL,GAAW52G,UACzB+hH,GAAmB,SAAUt6J,GAC/B,IAAIvH,EAAauH,EAAKvH,WACtB,OAAI2hK,GAAU3hK,GACL6hK,GAAiB7hK,GAEnBA,GAEL8hK,GAAgB,SAAUv6J,GAC5B,OAAKA,EAGEg2I,GAASx2G,OAAOx/B,EAAKqM,YAAY,SAAUmc,EAAQxoB,GAMxD,OALIo6J,GAAUp6J,IAA2B,OAAlBA,EAAKtH,SAC1B8vB,EAASA,EAAOpb,OAAOmtJ,GAAcv6J,IAErCwoB,EAAOvtB,KAAK+E,GAEPwoB,IACN,IATM,IAWPgyI,GAAuB,SAAUx6J,EAAM+Z,GACzC,MAAO/Z,EAAOA,EAAKm3C,gBAAiB,CAClC,IAAKgjH,GAASn6J,GACZ,MAEF+Z,GAAU/Z,EAAK1G,KAAKjC,OAEtB,OAAO0iB,GAEL0gJ,GAAQ,SAAUprJ,GACpB,OAAO,SAAUG,GACf,OAAOH,IAAMG,IAGbkrJ,GAAsB,SAAU16J,GAClC,IAAI0H,EAAO/M,EAAOggK,EAYlB,OAXAjzJ,EAAQ6yJ,GAAcD,GAAiBt6J,IACvCrF,EAAQq7I,GAASjmF,UAAUroD,EAAO+yJ,GAAMz6J,GAAOA,GAC/C0H,EAAQA,EAAM9M,MAAM,EAAGD,EAAQ,GAC/BggK,EAAmB3kB,GAASx2G,OAAO93B,GAAO,SAAU8gB,EAAQxoB,EAAMpI,GAIhE,OAHIuiK,GAASn6J,IAASm6J,GAASzyJ,EAAM9P,EAAI,KACvC4wB,IAEKA,IACN,GACH9gB,EAAQsuI,GAAS/yI,OAAOyE,EAAO6vC,GAASqnG,eAAe5+I,EAAKtH,WAC5DiC,EAAQq7I,GAASjmF,UAAUroD,EAAO+yJ,GAAMz6J,GAAOA,GACxCrF,EAAQggK,GAEbC,GAAiB,SAAU56J,GAC7B,IAAIxE,EAMJ,OAJEA,EADE2+J,GAASn6J,GACJ,SAEAA,EAAKtH,SAASic,cAEhBnZ,EAAO,IAAMk/J,GAAoB16J,GAAQ,KAE9Cs5I,GAAe,SAAUpiJ,EAAM8I,EAAM6e,GACvC,IAAIqxC,EAAU,GACd,IAAKlwD,EAAOA,EAAKvH,WAAYuH,IAAS9I,EAAM8I,EAAOA,EAAKvH,WAAY,CAClE,GAAIomB,GAAaA,EAAU7e,GACzB,MAEFkwD,EAAQj1D,KAAK+E,GAEf,OAAOkwD,GAELl4B,GAAW,SAAU9gC,EAAMkiK,GAC7B,IAAI3+I,EAAWV,EAAmB8gJ,EAAcxuJ,EAAY6jD,EAArCv9B,EAAO,GAqB9B,OApBAlY,EAAY2+I,EAAc3+I,YAC1BV,EAASq/I,EAAcr/I,SACnBogJ,GAAS1/I,GACXogJ,EAAeL,GAAqB//I,EAAWV,IAE/C1N,EAAaoO,EAAUpO,WACnB0N,GAAU1N,EAAWhV,QACvBwjK,EAAe,QACf9gJ,EAAS1N,EAAWhV,OAAS,GAE7BwjK,EAAe,SAEjBpgJ,EAAYpO,EAAW0N,IAEzB4Y,EAAK13B,KAAK2/J,GAAengJ,IACzBy1C,EAAUopF,GAAapiJ,EAAMujB,GAC7By1C,EAAU8lF,GAAS/yI,OAAOitD,EAAS7iD,EAAIkqC,GAAS6nG,UAChDzsH,EAAOA,EAAKvlB,OAAO4oI,GAAShgJ,IAAIk6D,GAAS,SAAUlwD,GACjD,OAAO46J,GAAe56J,OAEjB2yB,EAAKoJ,UAAUrgC,KAAK,KAAO,IAAMm/J,GAEtCC,GAAkB,SAAU96J,EAAMxE,EAAMb,GAC1C,IAAI+M,EAAQ6yJ,GAAcv6J,GAK1B,OAJA0H,EAAQsuI,GAAS/yI,OAAOyE,GAAO,SAAU1H,EAAMrF,GAC7C,OAAQw/J,GAASn6J,KAAUm6J,GAASzyJ,EAAM/M,EAAQ,OAEpD+M,EAAQsuI,GAAS/yI,OAAOyE,EAAO6vC,GAASqnG,eAAepjJ,IAChDkM,EAAM/M,IAEXogK,GAAmB,SAAUtgJ,EAAWV,GAC1C,IAAwCihJ,EAApCh7J,EAAOya,EAAWwgJ,EAAe,EACrC,MAAOd,GAASn6J,GAAO,CAErB,GADAg7J,EAAUh7J,EAAK1G,KAAKjC,OAChB0iB,GAAUkhJ,GAAgBlhJ,GAAUkhJ,EAAeD,EAAS,CAC9DvgJ,EAAYza,EACZ+Z,GAAkBkhJ,EAClB,MAEF,IAAKd,GAASn6J,EAAKuc,aAAc,CAC/B9B,EAAYza,EACZ+Z,EAASihJ,EACT,MAEFC,GAAgBD,EAChBh7J,EAAOA,EAAKuc,YAKd,OAHI49I,GAAS1/I,IAAcV,EAASU,EAAUnhB,KAAKjC,SACjD0iB,EAASU,EAAUnhB,KAAKjC,QAEnB6iK,GAAgBz/I,EAAWV,IAEhCmhJ,GAAY,SAAUhkK,EAAMy7B,GAC9B,IAAIC,EAAOnY,EAAWV,EACtB,OAAK4Y,GAGLC,EAAQD,EAAKld,MAAM,KACnBkd,EAAOC,EAAM,GAAGnd,MAAM,KACtBsE,EAAS6Y,EAAMv7B,OAAS,EAAIu7B,EAAM,GAAK,SACvCnY,EAAYu7H,GAASx2G,OAAO7M,GAAM,SAAUnK,EAAQh1B,GAElD,OADAA,EAAQ,4BAA4BiH,KAAKjH,GACpCA,GAGY,WAAbA,EAAM,KACRA,EAAM,GAAK,SAENsnK,GAAgBtyI,EAAQh1B,EAAM,GAAIoS,SAASpS,EAAM,GAAI,MALnD,OAMR0D,GACEujB,EAGA0/I,GAAS1/I,GAQPsgJ,GAAiBtgJ,EAAW7U,SAASmU,EAAQ,MANhDA,EADa,UAAXA,EACOsgJ,GAAY5/I,GAAa,EAEzB4/I,GAAY5/I,GAEhBy/I,GAAgBz/I,EAAUhiB,WAAYshB,IARtC,MAhBA,MA6BPohJ,GAAoB,SAAU76J,EAAKN,GACjCu3C,GAASj8B,OAAOtb,IAA8B,IAArBA,EAAK1G,KAAKjC,QACrCiJ,EAAImJ,OAAOzJ,IAGX8d,GAAa,SAAUxd,EAAKga,EAAKta,GACnCsa,EAAIwD,WAAW9d,GACfm7J,GAAkB76J,EAAKN,EAAKm3C,iBAC5BgkH,GAAkB76J,EAAKN,EAAKuc,cAE1B6+I,GAAiB,SAAU96J,EAAKga,EAAKi9H,GACvC,IAAIjrI,EAAamD,EAAO/U,KAAK68I,EAAKjrI,YAC9BwqC,EAAYrnC,EAAO/U,KAAK68I,EAAKzgG,WACjCx8B,EAAIwD,WAAWy5H,GACfjrI,EAAWpJ,MAAK,SAAUogD,GACxB,OAAO63G,GAAkB76J,EAAKgjD,EAAMnM,oBAEtCL,EAAU5zC,MAAK,SAAUogD,GACvB,OAAO63G,GAAkB76J,EAAKgjD,EAAM/mC,iBAGpC8+I,GAAkB,SAAU/6J,EAAKga,EAAKta,GACpCu3C,GAASkoG,mBAAmBz/I,GAC9Bo7J,GAAe96J,EAAKga,EAAKta,GAEzB8d,GAAWxd,EAAKga,EAAKta,IAIrBs7J,GAA2B/jH,GAAS4yB,uBACpCoxF,GAA0B,SAAUj4J,EAAMmX,EAAWV,GACvD,IAAI/Z,EAAMw7J,EAEV,IADAA,EAAgBl4J,EAAKmX,EAAUnhB,KAAKsB,MAAM,EAAGmf,IAAS1iB,OACjD2I,EAAOya,EAAU08B,gBAAiBn3C,GAAQu3C,GAASj8B,OAAOtb,GAAOA,EAAOA,EAAKm3C,gBAChFqkH,GAAiBl4J,EAAKtD,EAAK1G,MAAMjC,OAEnC,OAAOmkK,GAELC,GAAW,SAAUn7J,EAAKgD,EAAM6sC,EAAY71B,EAAKzB,GACnD,IAGIxM,EAHAoO,EAAYH,EAAIzB,EAAQ,iBAAmB,gBAC3CkB,EAASO,EAAIzB,EAAQ,cAAgB,aACrC++G,EAAQ,GACI78H,EAAQ,EACpB7D,EAAOoJ,EAAIo1C,UAWf,IAVI6B,GAASj8B,OAAOb,GAClBm9G,EAAM38H,KAAKk1C,EAAaorH,GAAwBj4J,EAAMmX,EAAWV,GAAUA,IAE3E1N,EAAaoO,EAAUpO,WACnB0N,GAAU1N,EAAWhV,QAAUgV,EAAWhV,SAC5C0D,EAAQ,EACRgf,EAASrlB,KAAK8oB,IAAI,EAAGnR,EAAWhV,OAAS,IAE3CugI,EAAM38H,KAAKqF,EAAIi4C,UAAUlsC,EAAW0N,GAASo2B,GAAcp1C,IAEtD0f,GAAaA,IAAcvjB,EAAMujB,EAAYA,EAAUhiB,WAC5Dm/H,EAAM38H,KAAKqF,EAAIi4C,UAAU99B,EAAW01B,IAEtC,OAAOynF,GAEL8jC,GAAc,SAAUp4J,EAAMrD,EAAWkwC,EAAY71B,GACvD,IAAIha,EAAML,EAAUK,IAAK23C,EAAW,GAKpC,OAJAA,EAASp/B,MAAQ4iJ,GAASn7J,EAAKgD,EAAM6sC,EAAY71B,GAAK,GACjDra,EAAU0C,gBACbs1C,EAASx+B,IAAMgiJ,GAASn7J,EAAKgD,EAAM6sC,EAAY71B,GAAK,IAE/C29B,GAEL0jH,GAAc,SAAUr7J,EAAK9E,EAAMrD,GACrC,IAAI0S,EAAQ,EAUZ,OATA7W,GAAMkP,KAAK5C,EAAIE,OAAOhF,IAAO,SAAUwE,GACrC,GAA4C,QAAxCA,EAAKuM,aAAa,kBAGtB,OAAIvM,IAAS7H,QAGb0S,OAEKA,GAEL+wJ,GAAe,SAAUthJ,EAAKzB,GAChC,IAAI4B,EAAWV,EAAQ1N,EACnBxG,EAASgT,EAAQ,QAAU,MAC/B4B,EAAYH,EAAIzU,EAAS,aACzBkU,EAASO,EAAIzU,EAAS,UAClB0xC,GAASsM,UAAUppC,IAAqC,OAAvBA,EAAU/hB,WAC7C2T,EAAaoO,EAAUpO,WACvBoO,EAAYpO,EAAW3X,KAAKC,IAAIkkB,EAAQkB,EAASA,EAAS,EAAG1N,EAAWhV,OAAS,IAC7EojB,IACFV,EAASlB,EAAQ,EAAI4B,EAAUpO,WAAWhV,OAC1CijB,EAAI,OAASzB,EAAQ,QAAU,QAAQ4B,EAAWV,MAIpD8hJ,GAA8B,SAAUvhJ,GAG1C,OAFAshJ,GAAathJ,GAAK,GAClBshJ,GAAathJ,GAAK,GACXA,GAELgjI,GAAc,SAAUt9I,EAAM+Z,GAChC,IAAI8xC,EACJ,GAAItU,GAASsM,UAAU7jD,KACrBA,EAAOE,GAAQF,EAAM+Z,GACjBuhJ,GAAyBt7J,IAC3B,OAAOA,EAGX,GAAIw0J,GAAiBx0J,GAAO,CAK1B,GAJIu3C,GAASj8B,OAAOtb,IAASs0J,GAAsBt0J,KACjDA,EAAOA,EAAKvH,YAEdozD,EAAU7rD,EAAKm3C,gBACXmkH,GAAyBzvG,GAC3B,OAAOA,EAGT,GADAA,EAAU7rD,EAAKuc,YACX++I,GAAyBzvG,GAC3B,OAAOA,IAITiwG,GAAsC,SAAUxhJ,GAClD,OAAOgjI,GAAYhjI,EAAII,eAAgBJ,EAAIO,cAAgByiI,GAAYhjI,EAAIw9B,aAAcx9B,EAAIQ,YAE3FihJ,GAAoB,SAAUz4J,EAAM6sC,EAAYlwC,GAClD,IAAI9H,EAAU8H,EAAUC,UACpB1E,EAAOrD,EAAUA,EAAQO,SAAW,KACpC4hB,EAAMra,EAAUyc,SACpB,GAAI4+I,GAAyBnjK,IAAqB,QAATqD,EACvC,MAAO,CACLA,KAAMA,EACNb,MAAOghK,GAAY17J,EAAUK,IAAK9E,EAAMrD,IAG5C,IAAI0zD,EAAUiwG,GAAoCxhJ,GAClD,OAAIuxC,GACFrwD,EAAOqwD,EAAQpmD,QACR,CACLjK,KAAMA,EACNb,MAAOghK,GAAY17J,EAAUK,IAAK9E,EAAMqwD,KAGrC6vG,GAAYp4J,EAAMrD,EAAWkwC,EAAY71B,IAE9C0hJ,GAAmB,SAAU/7J,GAC/B,IAAIqa,EAAMra,EAAUyc,SACpB,MAAO,CACL7D,MAAOmf,GAAS/3B,EAAUK,IAAIo1C,UAAWwkH,GAAgBP,eAAer/I,IACxEb,IAAKue,GAAS/3B,EAAUK,IAAIo1C,UAAWwkH,GAAgBN,aAAat/I,MAGpE2hJ,GAAmB,SAAUh8J,GAC/B,MAAO,CAAEqa,IAAKra,EAAUyc,WAEtBw/I,GAAqB,SAAU57J,EAAK1J,EAAIulK,GAC1C,IAAInhK,EAAO,CACT,gBAAiB,WACjB,GAAMpE,EACN,MAAS,mCAEX,OAAOulK,EAAS77J,EAAIiE,OAAO,OAAQvJ,EAAM,YAAcsF,EAAIiE,OAAO,OAAQvJ,IAExEohK,GAAwB,SAAUn8J,EAAWk8J,GAC/C,IAAI77J,EAAML,EAAUK,IAChBga,EAAMra,EAAUyc,SAChB9lB,EAAK0J,EAAIwK,WACT0P,EAAYva,EAAU0C,cACtBxK,EAAU8H,EAAUC,UACpB1E,EAAOrD,EAAQO,SACnB,GAAa,QAAT8C,EACF,MAAO,CACLA,KAAMA,EACNb,MAAOghK,GAAYr7J,EAAK9E,EAAMrD,IAGlC,IAAIkkK,EAAOR,GAA4BvhJ,EAAIq9B,cAC3C,IAAKn9B,EAAW,CACd6hJ,EAAK3+I,UAAS,GACd,IAAI4+I,EAAkBJ,GAAmB57J,EAAK1J,EAAK,OAAQulK,GAC3Dd,GAAgB/6J,EAAK+7J,EAAMC,GAE7BhiJ,EAAMuhJ,GAA4BvhJ,GAClCA,EAAIoD,UAAS,GACb,IAAI6+I,EAAoBL,GAAmB57J,EAAK1J,EAAK,SAAUulK,GAM/D,OALAd,GAAgB/6J,EAAKga,EAAKiiJ,GAC1Bt8J,EAAUiqD,eAAe,CACvBtzD,GAAIA,EACJ4lK,KAAM,IAED,CAAE5lK,GAAIA,IAEXqzD,GAAc,SAAUhqD,EAAWpK,EAAMs6C,GAC3C,OAAa,IAATt6C,EACKkmK,GAAkB5H,GAAK7wJ,KAAM6sC,EAAYlwC,GAC9B,IAATpK,EACFmmK,GAAiB/7J,GACfpK,EACFomK,GAAiBh8J,GAEjBm8J,GAAsBn8J,GAAW,IAGxCw8J,GAAc,CAChBxyG,YAAaA,GACbyyG,gBAAiB3vJ,EAAMgvJ,GAAmBnyI,GAAU,GACpDwyI,sBAAuBA,IAGrBO,GAAW,aACXC,GAAc,SAAU58J,GAC1B,OAAOu3C,GAASsM,UAAU7jD,IAASA,EAAKpJ,KAAO+lK,IAE7CE,GAA0B,SAAU96J,EAAM/B,GAC5C,MAAOA,GAAQA,IAAS+B,EAAM,CAC5B,GAAI/B,EAAKpJ,KAAO+lK,GACd,OAAO38J,EAETA,EAAOA,EAAKvH,WAEd,OAAO,MAGLqkK,GAAcvlH,GAASsM,UACvBk5G,GAAWxlH,GAASj8B,OACpB0hJ,GAAa,SAAUh9J,GACzB,IAAIvH,EAAauH,EAAKvH,WAClBA,GACFA,EAAWmf,YAAY5X,IAGvBi9J,GAAe,SAAUj9J,GAC3B,IACE,OAAOA,EAAK+mF,UACZ,MAAOniE,GACP,MAAO,KAGPs4I,GAAe,SAAUl9J,EAAMnG,GACb,IAAhBA,EAAKxC,OACP2lK,GAAWh9J,GAEXA,EAAK+mF,UAAYltF,GAGjBsjK,GAAY,SAAUtjK,GACxB,IAAIujK,EAAcjJ,GAAK7wJ,KAAKzJ,GAC5B,MAAO,CACLgR,MAAOhR,EAAKxC,OAAS+lK,EAAY/lK,OACjCwC,KAAMujK,IAGNC,GAAkB,SAAU9H,EAAgB5sH,GAE9C,OADAs/D,GAASstD,GACF5sH,GAEL20H,GAA0B,SAAU/H,EAAgB5sH,GACtD,IAAI3xC,EAASmmK,GAAU5H,EAAej8J,KAAK4gB,OAAO,EAAGyuB,EAAI5uB,WACrDhf,EAAQoiK,GAAU5H,EAAej8J,KAAK4gB,OAAOyuB,EAAI5uB,WACjDlgB,EAAO7C,EAAO6C,KAAOkB,EAAMlB,KAC/B,OAAIA,EAAKxC,OAAS,GAChB6lK,GAAa3H,EAAgB17J,GACtBqgK,GAAgB3E,EAAgB5sH,EAAI5uB,SAAW/iB,EAAO6T,QAEtD89B,GAGP40H,GAA6B,SAAUhI,EAAgB5sH,GACzD,IAAIlwC,EAAakwC,EAAIluB,YACjB+iJ,EAAclhK,EAAQ88D,GAAO3gE,EAAW4T,YAAakpJ,GAAgBv/J,KAAI,SAAU2E,GACrF,OAAOA,EAAQguC,EAAI5uB,SAAWmgJ,GAAgBzhK,EAAYkwC,EAAI5uB,SAAW,GAAK4uB,KAC7Ex6B,MAAMw6B,GAET,OADAs/D,GAASstD,GACFiI,GAELC,GAA2B,SAAUlI,EAAgB5sH,GACvD,OAAOo0H,GAASxH,IAAmB5sH,EAAIluB,cAAgB86I,EAAiB+H,GAAwB/H,EAAgB5sH,GAAO00H,GAAgB9H,EAAgB5sH,IAErJ+0H,GAA8B,SAAUnI,EAAgB5sH,GAC1D,OAAOA,EAAIluB,cAAgB86I,EAAe98J,WAAa8kK,GAA2BhI,EAAgB5sH,GAAO00H,GAAgB9H,EAAgB5sH,IAEvIg1H,GAAsB,SAAUljJ,EAAWkuB,GAC7C,OAAOuxH,GAAgBH,eAAepxH,GAAO80H,GAAyBhjJ,EAAWkuB,GAAO+0H,GAA4BjjJ,EAAWkuB,IAE7Hs/D,GAAW,SAAU21D,GAQvB,GAPId,GAAYc,IAAuBpJ,GAAiBoJ,KAClDzjJ,GAAWyjJ,GACbA,EAAmB1+H,gBAAgB,kBAEnC89H,GAAWY,IAGXb,GAASa,GAAqB,CAChC,IAAI/jK,EAAOs6J,GAAK7wJ,KAAK25J,GAAaW,IAClCV,GAAaU,EAAoB/jK,KAGjCgkK,GAAuB,CACzBF,oBAAqBA,GACrBl0J,OAAQw+F,IAGN61D,GAAYn8G,GAAoBvE,SAAS0C,QACzCi+G,GAA2BxmH,GAAS4yB,uBACpC6zF,GAAgB,SAAUh+J,GAC5B,OAAOu3C,GAASsM,UAAU7jD,IAAS,aAAazH,KAAKyH,EAAKyF,UAExDw4J,GAAwB,SAAU/mK,EAAMiB,EAASnB,GACnD,IACIykD,EAAQyiH,EAASC,EAAStxH,EAAQuxH,EADlC3F,EAAa/6I,GAASvlB,EAAQ+nG,wBAAyBlpG,GAwB3D,MAtBqB,SAAjBE,EAAKuO,SACPg2C,EAASvkD,EAAKi/B,cAAcs5C,gBAC5ByuF,EAAUhnK,EAAKsyC,YAAciS,EAAOjS,WACpC20H,EAAUjnK,EAAKuyC,WAAagS,EAAOhS,YAEnC20H,EAAWlnK,EAAKgpG,wBAChBg+D,EAAUhnK,EAAKsyC,WAAa40H,EAAS7mI,KACrC4mI,EAAUjnK,EAAKuyC,UAAY20H,EAAS5mI,KAEtCihI,EAAWlhI,MAAQ2mI,EACnBzF,EAAW3gE,OAASomE,EACpBzF,EAAWjhI,KAAO2mI,EAClB1F,EAAWvsH,QAAUiyH,EACrB1F,EAAWt2I,MAAQ,EACnB0qB,EAAS10C,EAAQshC,YAActhC,EAAQmhC,YACnCuT,EAAS,IACP71C,IACF61C,IAAW,GAEb4rH,EAAWlhI,MAAQsV,EACnB4rH,EAAW3gE,OAASjrD,GAEf4rH,GAEL4F,GAA4B,SAAUnnK,GACxC,IAAIonK,EAA2Bt+J,EAAM6rD,EAASj0D,EAAG0B,EAEjD,IADAglK,EAA4B1mB,GAAS,2BAA4B1gJ,GAC5DU,EAAI,EAAGA,EAAI0mK,EAA0BjnK,OAAQO,IAChDoI,EAAOs+J,EAA0B1mK,GACjCi0D,EAAU7rD,EAAKm3C,gBACXu9G,GAAuB7oG,KACzBvyD,EAAOuyD,EAAQvyD,KACK,IAAhBA,EAAKjC,OACPw0D,EAAQpzD,WAAWmf,YAAYi0C,GAE/BA,EAAQ/vC,WAAWxiB,EAAKjC,OAAS,EAAG,IAGxCw0D,EAAU7rD,EAAKuc,YACXo4I,GAAyB9oG,KAC3BvyD,EAAOuyD,EAAQvyD,KACK,IAAhBA,EAAKjC,OACPw0D,EAAQpzD,WAAWmf,YAAYi0C,GAE/BA,EAAQ/vC,WAAW,EAAG,KAK1ByiJ,GAAY,SAAUrnK,EAAM8/C,EAAS+6F,GACvC,IACIysB,EAAgBZ,EADhBa,EAAkBnrK,GAAKmc,EAAOhC,QAE9B2pB,EAAO,SAAUpgC,EAAQmB,GAC3B,IAAIsgK,EAAYn+I,EAEhB,GADA+c,IACI2mI,GAAc7lK,GAChB,OAAO,KAET,IAAI6+C,EAAQ7+C,GA6BV,OATAylK,EAAqBnJ,GAAat8J,EAASnB,GAC3CsjB,EAAMniB,EAAQg+B,cAAcnb,cACxB+iJ,GAAyBH,EAAmBrhJ,cAC9CjC,EAAIW,SAAS2iJ,EAAoB,GACjCtjJ,EAAIY,OAAO0iJ,EAAoB,KAE/BtjJ,EAAIW,SAAS2iJ,EAAoB,GACjCtjJ,EAAIY,OAAO0iJ,EAAoB,IAE1BtjJ,EA5BPsjJ,EAAqB3I,GAAY,IAAK98J,EAASnB,GAC/CyhK,EAAawF,GAAsB/mK,EAAMiB,EAASnB,GAClD4gJ,GAASgmB,GAAoBpgK,IAAI,MAAOi7J,EAAWjhI,KACnD,IAAIyiG,EAAQ2d,GAAS,6DAA6Dp6I,IAAIi7J,GAAYpiI,SAASn/B,GAAM,GA2BnH,OA1BEunK,EAAgB/qK,IAAI+b,EAAOL,KAAK,CAC9B6qH,MAAOA,EACP9hI,QAASA,EACTnB,OAAQA,KAEVynK,EAAgBhrK,MAAMyP,MAAK,SAAUw7J,GAC/B1nK,GACF4gJ,GAAS8mB,EAAWzkC,OAAO/gD,SAAS,8BAGxCylF,IACArkJ,EAAMniB,EAAQg+B,cAAcnb,cAC5BV,EAAIW,SAAS2iJ,EAAoB,GACjCtjJ,EAAIY,OAAO0iJ,EAAoB,GAa1BtjJ,GAEL+c,EAAO,WACTgnI,GAA0BnnK,GACtB0mK,IACFC,GAAqBp0J,OAAOm0J,GAC5BA,EAAqB,MAEvBa,EAAgBhrK,MAAMyP,MAAK,SAAUw7J,GACnC9mB,GAAS8mB,EAAWzkC,OAAOxwH,SAC3Bg1J,EAAgB/qK,IAAI+b,EAAOhC,WAE7BsvD,cAAcyhG,IAEZG,EAAa,WACfH,EAAiBr3B,GAAMrqE,aAAY,WAC7Bi1E,IACF6F,GAAS,uBAAwB1gJ,GAAMyuF,YAAY,2BAEnDiyD,GAAS,uBAAwB1gJ,GAAMgiF,SAAS,6BAEjD,MAED0lF,EAAa,WACfH,EAAgBhrK,MAAMyP,MAAK,SAAUw7J,GACnC,IAAIjG,EAAawF,GAAsB/mK,EAAMwnK,EAAWvmK,QAASumK,EAAW1nK,QAC5E4gJ,GAAS8mB,EAAWzkC,OAAOz8H,IAAIi7J,OAG/B3gI,EAAU,WACZ,OAAOqvG,GAAMpqE,cAAcyhG,IAEzBK,EAAS,WACX,MAAO,wOAET,MAAO,CACLznI,KAAMA,EACNC,KAAMA,EACNwnI,OAAQA,EACRD,WAAYA,EACZ9mI,QAASA,IAGTgnI,GAA0B,WAC5B,OAAOhB,GAAUz/G,QAAUy/G,GAAU3/G,UAAY2/G,GAAUv/G,aAEzDwgH,GAAoB,SAAU/+J,GAChC,OAAO+9J,GAAyB/9J,IAASu3C,GAAS21E,QAAQltH,IAAS8+J,MAGjEE,GAA2BznH,GAAS4yB,uBACpC80F,GAAc1nH,GAASsnG,iBAAiB,UAAW,kDACnDqgB,GAAqB1K,GACrB2K,GAA0B7K,GAC1B8K,GAAc7nH,GAASsM,UACvBw7G,GAAqBpJ,GACrBqJ,GAAa,SAAUz9J,GACzB,OAAOA,EAAY,GAEjB09J,GAAc,SAAU19J,GAC1B,OAAOA,EAAY,GAEjB29J,GAAsB,SAAUxqG,EAAM5nB,GACxC,IAAIptC,EACJ,MAAOA,EAAOg1D,EAAK5nB,GACjB,IAAK+xH,GAAwBn/J,GAC3B,OAAOA,EAGX,OAAO,MAELy/J,GAAW,SAAUz/J,EAAM6B,EAAWrF,EAAa+6D,EAAUnqB,GAC/D,IAAI9vB,EAAS,IAAI+/H,GAAWr9I,EAAMu3D,GAClC,GAAIgoG,GAAY19J,GAAY,CAC1B,IAAIm9J,GAAyBh/J,IAASm/J,GAAwBn/J,MAC5DA,EAAOw/J,GAAoBliJ,EAAOqpE,MAAM,GACpCnqF,EAAYwD,IACd,OAAOA,EAGX,MAAOA,EAAOw/J,GAAoBliJ,EAAOqpE,KAAMv5C,GAC7C,GAAI5wC,EAAYwD,GACd,OAAOA,EAIb,GAAIs/J,GAAWz9J,GAAY,CACzB,IAAIm9J,GAAyBh/J,IAASm/J,GAAwBn/J,MAC5DA,EAAOw/J,GAAoBliJ,EAAOC,MAAM,GACpC/gB,EAAYwD,IACd,OAAOA,EAGX,MAAOA,EAAOw/J,GAAoBliJ,EAAOC,KAAM6vB,GAC7C,GAAI5wC,EAAYwD,GACd,OAAOA,EAIb,OAAO,MAEL0/J,GAAiB,SAAU1/J,EAAMu3D,GACnC,MAAOv3D,GAAQA,IAASu3D,EAAU,CAChC,GAAI0nG,GAAYj/J,GACd,OAAOA,EAETA,EAAOA,EAAKvH,WAEd,OAAO,MAELknK,GAAgB,SAAUC,EAAgBC,EAAgBtoG,GAC5D,OAAOmoG,GAAeE,EAAenlJ,YAAa88C,KAAcmoG,GAAeG,EAAeplJ,YAAa88C,IAEzGuoG,GAA+B,SAAUC,EAAgB3G,GAC3D,IAAI3+I,EAAWV,EACf,OAAKq/I,GAGL3+I,EAAY2+I,EAAc3+I,YAC1BV,EAASq/I,EAAcr/I,SAClBqlJ,GAAY3kJ,GAGVA,EAAUpO,WAAW0N,EAASgmJ,GAF5B,MALA,MASPC,GAAc,SAAUhpK,EAAQgJ,GAClC,IAAI8kE,EAAQ9kE,EAAKm2B,cAAcnb,cAQ/B,OAPIhkB,GACF8tE,EAAMsH,eAAepsE,GACrB8kE,EAAM6qD,aAAa3vH,KAEnB8kE,EAAMxb,cAActpD,GACpB8kE,EAAMvb,YAAYvpD,IAEb8kE,GAELm7F,GAAqB,SAAU/oK,EAAMgpK,EAAOC,GAC9C,OAAOT,GAAeQ,EAAOhpK,KAAUwoK,GAAeS,EAAOjpK,IAE3DkpK,GAAO,SAAU7oI,EAAMrgC,EAAM8I,GAC/B,IAAI6rD,EAASutF,EAEXA,EADE7hH,EACY,kBAEA,cAEhB,MAAOv3B,GAAQA,IAAS9I,EAAM,CAK5B,GAJA20D,EAAU7rD,EAAKo5I,GACX8lB,GAAmBrzG,KACrBA,EAAUA,EAAQutF,IAEhB4lB,GAAyBnzG,GAAU,CACrC,GAAIo0G,GAAmB/oK,EAAM20D,EAAS7rD,GACpC,OAAO6rD,EAET,MAEF,GAAIwzG,GAAmBxzG,GACrB,MAEF7rD,EAAOA,EAAKvH,WAEd,OAAO,MAELg2H,GAAW1hH,EAAMizJ,IAAa,GAC9Bj1E,GAAUh+E,EAAMizJ,IAAa,GAC7BvoH,GAAiB,SAAU51C,EAAW3K,EAAM4tE,GAC9C,IAAI9kE,EAAMya,EAAWV,EAAQu6B,EACzB+rH,EAAWtzJ,EAAMqzJ,IAAM,EAAMlpK,GAC7BopK,EAAYvzJ,EAAMqzJ,IAAM,EAAOlpK,GAGnC,GAFAujB,EAAYqqD,EAAMpqD,eAClBX,EAAS+qD,EAAMjqD,YACXy5I,GAAsB75I,GAAY,CAKpC,GAJK2kJ,GAAY3kJ,KACfA,EAAYA,EAAUhiB,YAExB67C,EAAW75B,EAAUlO,aAAa,kBACjB,WAAb+nC,IACFt0C,EAAOya,EAAU8B,YACbwiJ,GAAkB/+J,IACpB,OAAOyuH,GAASzuH,GAGpB,GAAiB,UAAbs0C,IACFt0C,EAAOya,EAAU08B,gBACb4nH,GAAkB/+J,IACpB,OAAO+qF,GAAQ/qF,GAIrB,IAAK8kE,EAAMtqD,UACT,OAAOsqD,EAET,GAAIvtB,GAASj8B,OAAOb,GAAY,CAC9B,GAAIykJ,GAAmBzkJ,GAAY,CACjC,GAAkB,IAAd5Y,EAAiB,CAEnB,GADA7B,EAAOsgK,EAAU7lJ,GACbza,EACF,OAAOyuH,GAASzuH,GAGlB,GADAA,EAAOqgK,EAAS5lJ,GACZza,EACF,OAAO+qF,GAAQ/qF,GAGnB,IAAmB,IAAf6B,EAAkB,CAEpB,GADA7B,EAAOqgK,EAAS5lJ,GACZza,EACF,OAAO+qF,GAAQ/qF,GAGjB,GADAA,EAAOsgK,EAAU7lJ,GACbza,EACF,OAAOyuH,GAASzuH,GAGpB,OAAO8kE,EAET,GAAI4vF,GAAuBj6I,IAAcV,GAAUU,EAAUnhB,KAAKjC,OAAS,EACzE,OAAkB,IAAdwK,IACF7B,EAAOsgK,EAAU7lJ,GACbza,GACKyuH,GAASzuH,GAGb8kE,EAET,GAAI6vF,GAAyBl6I,IAAcV,GAAU,EACnD,OAAmB,IAAflY,IACF7B,EAAOqgK,EAAS5lJ,GACZza,GACK+qF,GAAQ/qF,GAGZ8kE,EAET,GAAI/qD,IAAWU,EAAUnhB,KAAKjC,OAE5B,OADA2I,EAAOsgK,EAAU7lJ,GACbza,EACKyuH,GAASzuH,GAEX8kE,EAET,GAAe,IAAX/qD,EAEF,OADA/Z,EAAOqgK,EAAS5lJ,GACZza,EACK+qF,GAAQ/qF,GAEV8kE,EAGX,OAAOA,GAELy7F,GAAoB,SAAU3rC,EAASwkC,GACzC,OAAO3pJ,EAAO/U,KAAKolK,GAA6BlrC,EAAU,GAAK,EAAGwkC,IAAgBn2J,OAAO+7J,KAEvFwB,GAA6B,SAAU3+J,EAAW3K,EAAM4tE,GAC1D,IAAI27F,EAAkBhpH,GAAe51C,EAAW3K,EAAM4tE,GACtD,OAAmB,IAAfjjE,EACK23J,GAAcG,eAAe8G,GAE/BjH,GAAcI,aAAa6G,IAEhCC,GAAyB,SAAU/3H,GACrC,OAAOl5B,EAAO/U,KAAKiuC,EAAIzoC,WAAWlK,IAAI2lD,GAAQN,UAE5CslH,GAA6B,SAAUh4H,GACzC,OAAOl5B,EAAO/U,KAAKiuC,EAAIzoC,SAAQ,IAAOlK,IAAI2lD,GAAQN,UAEhDulH,GAAyB,SAAUC,EAAQzH,GAC7C,MAAOA,EAAgByH,EAAOzH,GAC5B,GAAIA,EAAcM,YAChB,OAAON,EAGX,OAAOA,GAEL0H,GAAwB,SAAUpmK,EAAMI,GAC1C,IAAIimK,EAAcpB,GAAcjlK,EAAMI,GACtC,QAAKimK,IAAexpH,GAASZ,KAAKj8C,EAAKwF,aAGhC6gK,IAIR,SAAU9G,GACTA,EAAWA,EAAW,cAAgB,GAAK,YAC3CA,EAAWA,EAAW,YAAc,GAAK,YAF3C,CAGEA,KAAeA,GAAa,KAC9B,IAAI+G,GAA2BzpH,GAAS4yB,uBACpC82F,GAAW1pH,GAASj8B,OACpB4lJ,GAAc3pH,GAASsM,UACvBs9G,GAAS5pH,GAASZ,KAClByqH,GAAqBnL,GACrBoL,GAAa/K,GACbgL,GAA6B/K,GAC7B5uJ,GAAa,SAAU3H,EAAM9I,GAC/B,IAAIg5D,EAAU,GACd,MAAOlwD,GAAQA,IAAS9I,EACtBg5D,EAAQj1D,KAAK+E,GACbA,EAAOA,EAAKvH,WAEd,OAAOy3D,GAELqxG,GAAc,SAAU9mJ,EAAWV,GACrC,OAAIU,EAAU29B,iBAAmBr+B,EAASU,EAAUpO,WAAWhV,OACtDojB,EAAUpO,WAAW0N,GAEvB,MAELynJ,GAA4B,SAAU3/J,EAAW7B,GACnD,GAAIs/J,GAAWz9J,GAAY,CACzB,GAAIu/J,GAAmBphK,EAAKm3C,mBAAqB8pH,GAASjhK,EAAKm3C,iBAC7D,OAAO+iH,GAAgBljK,OAAOgJ,GAEhC,GAAIihK,GAASjhK,GACX,OAAOk6J,GAAgBl6J,EAAM,GAGjC,GAAIu/J,GAAY19J,GAAY,CAC1B,GAAIu/J,GAAmBphK,EAAKuc,eAAiB0kJ,GAASjhK,EAAKuc,aACzD,OAAO29I,GAAgBn/J,MAAMiF,GAE/B,GAAIihK,GAASjhK,GACX,OAAOk6J,GAAgBl6J,EAAMA,EAAK1G,KAAKjC,QAG3C,OAAIkoK,GAAY19J,GACVs/J,GAAOnhK,GACFk6J,GAAgBljK,OAAOgJ,GAEzBk6J,GAAgBn/J,MAAMiF,GAExBk6J,GAAgBljK,OAAOgJ,IAE5ByhK,GAAoB,SAAUvqK,EAAMwqK,GACtC,IAAInlJ,EAAcmlJ,EAASnlJ,YAC3B,OAAIA,GAAe6kJ,GAAmB7kJ,GAChC0kJ,GAAS1kJ,GACJ29I,GAAgB39I,EAAa,GAE7B29I,GAAgBljK,OAAOulB,GAGzBolJ,GAAkB1H,GAAW2H,SAAU1H,GAAgBn/J,MAAM2mK,GAAWxqK,IAG/EyqK,GAAoB,SAAU9/J,EAAWuV,EAAUlgB,GACrD,IAAI8I,EAAM0hK,EAAUj2F,EAChBo2F,EAA6BzI,EACjC,IAAK8H,GAAYhqK,KAAUkgB,EACzB,OAAO,KAET,GAAIA,EAASq/I,QAAQyD,GAAgBn/J,MAAM7D,KAAUA,EAAK4/C,WAExD,GADAsiH,EAAgBc,GAAgBn/J,MAAM7D,EAAK4/C,WACvCyoH,GAAY19J,IAAcu/J,GAAmBlqK,EAAK4/C,YAAcoqH,GAAYhqK,EAAK4/C,WACnF,OAAOqqH,GAAOjqK,EAAK4/C,WAAaojH,GAAgBljK,OAAOE,EAAK4/C,WAAasiH,OAG3EA,EAAgBhiJ,EAElB,IAAIqD,EAAY2+I,EAAc3+I,YAC1BV,EAASq/I,EAAcr/I,SAC3B,GAAIknJ,GAASxmJ,GAAY,CACvB,GAAI8kJ,GAAY19J,IAAckY,EAAS,EACrC,OAAOmgJ,GAAgBz/I,IAAaV,GAEtC,GAAIulJ,GAAWz9J,IAAckY,EAASU,EAAUpjB,OAC9C,OAAO6iK,GAAgBz/I,IAAaV,GAEtC/Z,EAAOya,MACF,CACL,GAAI8kJ,GAAY19J,IAAckY,EAAS,IACrC2nJ,EAAWH,GAAY9mJ,EAAWV,EAAS,GACvCqnJ,GAAmBM,IACrB,OAAKL,GAAWK,KACdj2F,EAAYg0F,GAASiC,EAAU7/J,EAAWy/J,GAA4BI,GAClEj2F,GACEw1F,GAASx1F,GACJyuF,GAAgBzuF,EAAWA,EAAUnyE,KAAKjC,QAE5C6iK,GAAgBn/J,MAAM0wE,GAG7Bw1F,GAASS,GACJxH,GAAgBwH,EAAUA,EAASpoK,KAAKjC,QAE1C6iK,GAAgBljK,OAAO0qK,GAGlC,GAAIpC,GAAWz9J,IAAckY,EAASU,EAAUpO,WAAWhV,SACzDqqK,EAAWH,GAAY9mJ,EAAWV,GAC9BqnJ,GAAmBM,IACrB,OAAIP,GAAOO,GACFD,GAAkBvqK,EAAMwqK,IAE5BL,GAAWK,KACdj2F,EAAYg0F,GAASiC,EAAU7/J,EAAWy/J,GAA4BI,GAClEj2F,GACEw1F,GAASx1F,GACJyuF,GAAgBzuF,EAAW,GAE7ByuF,GAAgBljK,OAAOy0E,GAG9Bw1F,GAASS,GACJxH,GAAgBwH,EAAU,GAE5BxH,GAAgBn/J,MAAM2mK,GAGjC1hK,EAAO0hK,GAAsBtI,EAAcl5J,UAE7C,OAAIo/J,GAAWz9J,IAAcu3J,EAAcrE,WAAawK,GAAY19J,IAAcu3J,EAAcvE,eAC9F70J,EAAOy/J,GAASz/J,EAAM6B,EAAW1C,GAAS,GAAOjI,GAAM,GACnDoqK,GAA2BthK,EAAM9I,IAC5BsqK,GAA0B3/J,EAAW7B,IAGhD0hK,EAAWjC,GAASz/J,EAAM6B,EAAWy/J,GAA4BpqK,GACjE2qK,EAA8B7rB,GAAStrI,KAAKzH,EAAO0E,GAAW8S,EAAWvjB,GAAO8pK,MAC5Ea,GAAiCH,GAAaG,EAA4Bp5J,SAASi5J,GAQnFA,EACKF,GAA0B3/J,EAAW6/J,GAEvC,MATHtI,EADEkG,GAAWz9J,GACGq4J,GAAgBn/J,MAAM8mK,GAEtB3H,GAAgBljK,OAAO6qK,GAElCzI,KAOP0I,GAAc,SAAU5qK,GAC1B,MAAO,CACLqmB,KAAM,SAAU67I,GACd,OAAOuI,GAAkB1H,GAAW2H,SAAUxI,EAAeliK,IAE/DyvF,KAAM,SAAUyyE,GACd,OAAOuI,GAAkB1H,GAAW8H,UAAW3I,EAAeliK,MAKhE8qK,GAAmB,SAAUptC,EAAS19H,EAAM2hB,GAC9C,IAAIozB,EAAW2oF,EAAUslC,GAAgBljK,OAAO6hB,GAASqhJ,GAAgBn/J,MAAM8d,GAC/E,OAAOopJ,GAAartC,EAAS19H,EAAM+0C,IAEjCi2H,GAAe,SAAUliK,GAC3B,OAAOu3C,GAASZ,KAAK32C,GAAQk6J,GAAgBljK,OAAOgJ,GAAQk6J,GAAgBn/J,MAAMiF,IAEhFmiK,GAAkB,SAAUl2H,GAC9B,OAAIiuH,GAAgBH,eAAe9tH,GACJ,IAAtBA,EAASlyB,SAETk8I,GAAiBhqH,EAAS/rC,YAGjCkiK,GAAe,SAAUn2H,GAC3B,GAAIiuH,GAAgBH,eAAe9tH,GAAW,CAC5C,IAAIxxB,EAAYwxB,EAASxxB,YACzB,OAAOwxB,EAASlyB,WAAaU,EAAUnhB,KAAKjC,OAE5C,OAAO4+J,GAAiBhqH,EAAS/rC,SAAQ,KAGzCmiK,GAA2B,SAAU3nK,EAAMI,GAC7C,OAAQo/J,GAAgBH,eAAer/J,KAAUw/J,GAAgBH,eAAej/J,IAAOJ,EAAKwF,YAAcpF,EAAGoF,SAAQ,IAEnHoiK,GAAS,SAAUr2H,GACrB,OAAQiuH,GAAgBH,eAAe9tH,IAAasL,GAASZ,KAAK1K,EAAS/rC,YAEzEqiK,GAAqB,SAAU3tC,EAASl6H,EAAMI,GAChD,OAAI85H,GACMytC,GAAyB3nK,EAAMI,KAAQwnK,GAAO5nK,IAAS0nK,GAAa1nK,IAASynK,GAAgBrnK,IAE7FunK,GAAyBvnK,EAAIJ,IAASynK,GAAgBznK,IAAS0nK,GAAatnK,IAGpFmnK,GAAe,SAAUrtC,EAAS19H,EAAMyxC,GAC1C,IAAIrrB,EAASwkJ,GAAY5qK,GACzB,OAAOuY,EAAO/U,KAAKk6H,EAAUt3G,EAAOC,KAAKorB,GAAOrrB,EAAOqpE,KAAKh+C,KAE1Do1F,GAAW,SAAUnJ,EAAS19H,EAAMwD,GACtC,OAAOunK,GAAartC,EAAS19H,EAAMwD,GAAMmU,MAAK,SAAU/T,GACtD,OAAI6kK,GAAcjlK,EAAMI,EAAI5D,IAASqrK,GAAmB3tC,EAASl6H,EAAMI,GAC9DmnK,GAAartC,EAAS19H,EAAM4D,GAE5B2U,EAAOL,KAAKtU,OAIrB0nK,GAAiB,SAAU5tC,EAAS19H,EAAMwD,EAAM+nK,GAClD,OAAO1kC,GAASnJ,EAAS19H,EAAMwD,GAAMmU,MAAK,SAAU85B,GAClD,OAAO85H,EAAa95H,GAAO65H,GAAe5tC,EAAS19H,EAAMyxC,EAAK85H,GAAgBhzJ,EAAOL,KAAKu5B,OAG1F+5H,GAAa,SAAU9tC,EAASz8H,GAClC,IAAI4yD,EAAY6pE,EAAUz8H,EAAQmU,WAAanU,EAAQ2+C,UACvD,OAAIS,GAASj8B,OAAOyvC,GACXt7C,EAAOL,KAAK8qJ,GAAgBnvG,EAAW6pE,EAAU,EAAI7pE,EAAUzxD,KAAKjC,SAClE0zD,EACLkrG,GAAiBlrG,GACZt7C,EAAOL,KAAKwlH,EAAUslC,GAAgBljK,OAAO+zD,GAAam3G,GAAan3G,IAEvEi3G,GAAiBptC,EAASz8H,EAAS4yD,GAGrCt7C,EAAOhC,QAGdk1J,GAAe51J,EAAMk1J,IAAc,GACnCW,GAAe71J,EAAMk1J,IAAc,GACnCY,GAAc,CAChBZ,aAAcA,GACdU,aAAcA,GACdC,aAAcA,GACd7kC,SAAUA,GACVykC,eAAgBA,GAChBE,WAAYA,GACZI,gBAAiB/1J,EAAM21J,IAAY,GACnCK,eAAgBh2J,EAAM21J,IAAY,IAGhCM,GAAuB,SAAU/qH,GACnC,MAAiC,kBAAnBA,EAASp/B,OAErBoqJ,GAAkB,SAAUhrH,GAC9B,OAAOA,EAASxhD,eAAe,QAE7BysK,GAAe,SAAUjrH,GAC3B,OAAOA,EAASxhD,eAAe,OAE7B0sK,GAAkB,SAAUlrH,GAC9B,OAAOA,EAASxhD,eAAe,SAE7B2sK,GAAiB,SAAUnrH,GAC7B,OAAOjkD,GAAMkoB,QAAQ+7B,EAASp/B,QAG5BwqJ,GAAW,SAAU/iK,EAAKN,GAI5B,OAHIu3C,GAASsM,UAAU7jD,IAASM,EAAI02C,QAAQh3C,KAAUA,EAAKzG,YAAc0sI,GAAIlkH,KAC3E/hB,EAAKzG,UAAY,6BAEZyG,GAELsjK,GAA+B,SAAUhjK,EAAK23C,GAChD,IAAI39B,EAAKquB,EAMT,OALAruB,EAAMha,EAAIob,YACVitB,EAAMuyH,GAAU56J,EAAIo1C,UAAWuC,EAASp/B,OACxCyB,EAAIW,SAAS0tB,EAAIluB,YAAakuB,EAAI5uB,UAClC4uB,EAAMuyH,GAAU56J,EAAIo1C,UAAWuC,EAASx+B,KACxCa,EAAIY,OAAOytB,EAAIluB,YAAakuB,EAAI5uB,UACzBO,GAELipJ,GAAa,SAAUvjK,EAAMsa,GAC/B,IAAIkB,EAAWxb,EAAKm2B,cAAcryB,eAAeqwJ,GAAKH,MACtDh0J,EAAK2E,YAAY6W,GACjBlB,EAAIW,SAASO,EAAU,GACvBlB,EAAIY,OAAOM,EAAU,IAEnB01B,GAAU,SAAUlxC,GACtB,OAAgC,IAAzBA,EAAKo4C,iBAEVorH,GAAuB,SAAUxjK,EAAMsa,GACzC,OAAOuoJ,GAAYE,eAAe/iK,GAAMgO,MAAK,WAC3C,OAAO,KACN,SAAU26B,GAGX,OAFAruB,EAAIW,SAAS0tB,EAAIluB,YAAakuB,EAAI5uB,UAClCO,EAAIY,OAAOytB,EAAIluB,YAAakuB,EAAI5uB,WACzB,MAGP0pJ,GAAyB,SAAUvsK,EAAM8I,EAAMsa,GACjD,SAAI42B,GAAQlxC,KAAS68J,GAAwB3lK,EAAM8I,MACjDujK,GAAWvjK,EAAMsa,IACV,IAKPopJ,GAAc,SAAUpjK,EAAKuY,EAAOo/B,EAAU39B,GAChD,IACI1iB,EAAGoI,EAAM+Z,EAAQ/R,EADjB4vH,EAAQ3/E,EAASp/B,EAAQ,QAAU,OAEnC3hB,EAAOoJ,EAAIo1C,UACf,GAAIkiF,EAAO,CAET,IADA79G,EAAS69G,EAAM,GACV53H,EAAO9I,EAAMU,EAAIggI,EAAMvgI,OAAS,EAAGO,GAAK,EAAGA,IAAK,CAEnD,GADAoQ,EAAWhI,EAAKqM,WACZo3J,GAAuBvsK,EAAM8I,EAAMsa,GACrC,OAAO,EAET,GAAIs9G,EAAMhgI,GAAKoQ,EAAS3Q,OAAS,EAC/B,QAAIosK,GAAuBvsK,EAAM8I,EAAMsa,IAGhCkpJ,GAAqBxjK,EAAMsa,GAEpCta,EAAOgI,EAAS4vH,EAAMhgI,IAEF,IAAlBoI,EAAK2a,WACPZ,EAASrlB,KAAKC,IAAIijI,EAAM,GAAI53H,EAAK+mF,UAAU1vF,SAEvB,IAAlB2I,EAAK2a,WACPZ,EAASrlB,KAAKC,IAAIijI,EAAM,GAAI53H,EAAKqM,WAAWhV,SAE1CwhB,EACFyB,EAAIW,SAASjb,EAAM+Z,GAEnBO,EAAIY,OAAOlb,EAAM+Z,GAGrB,OAAO,GAEL4pJ,GAAkB,SAAU3jK,GAC9B,OAAOu3C,GAASj8B,OAAOtb,IAASA,EAAK1G,KAAKjC,OAAS,GAEjDihD,GAAkB,SAAUh4C,EAAK6oF,EAAQlxC,GAC3C,IAAkDj4C,EAAMmD,EAAKoa,EAAMopE,EAE/DlsE,EAAWV,EAFXypC,EAASljD,EAAI7M,IAAIwkD,EAASrhD,GAAK,IAAMuyF,GACrCqzE,EAAOvkH,EAASukH,KAEpB,GAAIh5G,EAAQ,CAwCV,GAvCAxjD,EAAOwjD,EAAO/qD,WACC,UAAX0wF,GACGqzE,EAGCh5G,EAAOpL,iBACTp4C,EAAOwjD,EAAOl3C,WACdnJ,EAAM,GACGwgK,GAAgBngH,EAAOjnC,cAChCvc,EAAOwjD,EAAOjnC,YACdpZ,EAAM,GACGwgK,GAAgBngH,EAAOrM,kBAChCn3C,EAAOwjD,EAAOrM,gBACdh0C,EAAMqgD,EAAOrM,gBAAgB79C,KAAKjC,SAElC2I,EAAOwjD,EAAO/qD,WACd0K,EAAM7C,EAAIi4C,UAAUiL,GAAU,GAbhCrgD,EAAM7C,EAAIi4C,UAAUiL,GAgBtB/oC,EAAYza,EACZ+Z,EAAS5W,IAEJq5J,EAGCh5G,EAAOpL,iBACTp4C,EAAOwjD,EAAOl3C,WACdnJ,EAAM,GACGwgK,GAAgBngH,EAAOrM,kBAChCn3C,EAAOwjD,EAAOrM,gBACdh0C,EAAMqgD,EAAOrM,gBAAgB79C,KAAKjC,SAElC2I,EAAOwjD,EAAO/qD,WACd0K,EAAM7C,EAAIi4C,UAAUiL,IAVtBrgD,EAAM7C,EAAIi4C,UAAUiL,GAatB/oC,EAAYza,EACZ+Z,EAAS5W,IAENq5J,EAAM,CACT71E,EAAOnjC,EAAOrM,gBACd55B,EAAOimC,EAAOjnC,YACdvoB,GAAMkP,KAAKlP,GAAMooB,KAAKonC,EAAOn3C,aAAa,SAAUrM,GAC9Cu3C,GAASj8B,OAAOtb,KAClBA,EAAK+mF,UAAY/mF,EAAK+mF,UAAU9wF,QAAQ,UAAW,QAGvD,MAAOutD,EAASljD,EAAI7M,IAAIwkD,EAASrhD,GAAK,IAAMuyF,GAC1C7oF,EAAImJ,OAAO+5C,GAAQ,GAEjBmjC,GAAQppE,GAAQopE,EAAKhsE,WAAa4C,EAAK5C,UAAY48B,GAASj8B,OAAOqrE,KAAUs/C,GAAItoF,QACnFx6C,EAAMwjF,EAAKI,UAAU1vF,OACrBsvF,EAAKi9E,WAAWrmJ,EAAKwpE,WACrBzmF,EAAImJ,OAAO8T,GAET9C,EAAYksE,EACZ5sE,EAAS5W,GAOf,OAAOsM,EAAOL,KAAK8qJ,GAAgBz/I,EAAWV,IAE9C,OAAOtK,EAAOhC,QAGdgiC,GAAM,SAAUo0H,EAAIC,GACtB,OAAOD,EAAG31J,SAAW21J,EAAKC,GAExBC,GAAe,SAAUzjK,EAAK23C,GAChC,IAAI39B,EAAMha,EAAIob,YACd,OAAIgoJ,GAAYpjK,GAAK,EAAM23C,EAAU39B,IAAQopJ,GAAYpjK,GAAK,EAAO23C,EAAU39B,GACtE7K,EAAOL,KAAKkL,GAEZ7K,EAAOhC,QAGdu2J,GAAY,SAAU1jK,EAAK23C,GAC7B,IAAI7gC,EAAWkhC,GAAgBh4C,EAAK,QAAS23C,GACzC5gC,EAASihC,GAAgBh4C,EAAK,MAAO23C,GACzC,OAAO2D,GAAMxkC,EAAUq4B,GAAIp4B,EAAQD,IAAW,SAAU6sJ,EAAMC,GAC5D,IAAI5pJ,EAAMha,EAAIob,YAGd,OAFApB,EAAIW,SAASooJ,GAAS/iK,EAAK2jK,EAAKxpJ,aAAcwpJ,EAAKlqJ,UACnDO,EAAIY,OAAOmoJ,GAAS/iK,EAAK4jK,EAAKzpJ,aAAcypJ,EAAKnqJ,UAC1CO,MAGP6pJ,GAAiB,SAAU7jK,EAAK23C,GAClC,OAAOxoC,EAAO/U,KAAK4F,EAAIE,OAAOy3C,EAASz8C,MAAMy8C,EAASt9C,QAAQ3E,KAAI,SAAUqG,GAC1E,IAAIie,EAAMha,EAAIob,YAEd,OADApB,EAAI+2G,WAAWh1H,GACRie,MAGP8pJ,GAAY,SAAUnkK,EAAWg4C,GACnC,IAAI33C,EAAML,EAAUK,IACpB,GAAI23C,EAAU,CACZ,GAAImrH,GAAenrH,GACjB,OAAO8rH,GAAazjK,EAAK23C,GACpB,GAAI+qH,GAAqB/qH,GAC9B,OAAOxoC,EAAOL,KAAKk0J,GAA6BhjK,EAAK23C,IAChD,GAAIirH,GAAajrH,GACtB,OAAO+rH,GAAU1jK,EAAK23C,GACjB,GAAIkrH,GAAgBlrH,GACzB,OAAOksH,GAAe7jK,EAAK23C,GACtB,GAAIgrH,GAAgBhrH,GACzB,OAAOxoC,EAAOL,KAAK6oC,EAAS39B,KAGhC,OAAO7K,EAAOhC,QAEZ42J,GAAkB,CAAEpwK,QAASmwK,IAE7BE,GAAgB,SAAUrkK,EAAWpK,EAAMs6C,GAC7C,OAAOssH,GAAYxyG,YAAYhqD,EAAWpK,EAAMs6C,IAE9C+Z,GAAiB,SAAUjqD,EAAWg4C,GACxCosH,GAAgBpwK,QAAQgM,EAAWg4C,GAAU/0C,MAAK,SAAUoX,GAC1Dra,EAAU0b,OAAOrB,OAGjBiqJ,GAAmB,SAAUvkK,GAC/B,OAAOu3C,GAASsM,UAAU7jD,IAA0B,SAAjBA,EAAKyF,SAA6D,aAAvCzF,EAAKuM,aAAa,kBAE9Ei4J,GAAY,CACdv6G,YAAaq6G,GACbp6G,eAAgBA,GAChBgB,eAAgBq5G,IAGdE,GAAgB,SAAUzkK,GAC5B,OAAOA,GAAQ,UAAUzH,KAAKyH,EAAKtH,WAEjCgsK,GAAY,SAAUpkK,EAAKL,EAAWqa,GACxC,IACoCgD,EAAQtd,EAAM0H,EAD9CqS,EAASO,EAAIO,YACbJ,EAAYH,EAAII,eACpB,IAAIJ,EAAII,iBAAmBJ,EAAIw9B,eACzB2sH,GAAcnqJ,EAAII,eAAerO,WAAWiO,EAAIO,gBAI3B,IAAvBJ,EAAUE,SAUZ,IATAjT,EAAQ+S,EAAUpO,WACd0N,EAASrS,EAAMrQ,QACjBojB,EAAY/S,EAAMqS,GAClBuD,EAAS,IAAI+/H,GAAW5iI,EAAWna,EAAIyL,UAAU0O,EAAWna,EAAI02C,YAEhEv8B,EAAY/S,EAAMA,EAAMrQ,OAAS,GACjCimB,EAAS,IAAI+/H,GAAW5iI,EAAWna,EAAIyL,UAAU0O,EAAWna,EAAI02C,UAChE15B,EAAOC,MAAK,IAETvd,EAAOsd,EAAOygC,UAAW/9C,EAAMA,EAAOsd,EAAOC,OAChD,GAAsB,IAAlBvd,EAAK2a,WAAmBgqJ,GAAiB3kK,GAG3C,OAFAsa,EAAIW,SAASjb,EAAM,QACnBC,EAAU0b,OAAOrB,IAMrBsqJ,GAA0B,SAAU5kK,EAAMud,EAAMsnJ,GAClD,GAAI7kK,EAEF,IADAud,EAAOA,EAAO,cAAgB,kBACzBvd,EAAO6kK,EAAM7kK,EAAOA,EAAKud,GAAOvd,EAAMA,EAAOA,EAAKud,GACrD,GAAsB,IAAlBvd,EAAK2a,WAAmBgqJ,GAAiB3kK,GAC3C,OAAOA,GAKX8kK,GAAgB,SAAU1wK,EAAQoH,GAIpC,OAHIA,EAAKmf,WACPnf,EAAOA,EAAK9C,YAELtE,EAAOq8C,OAAOC,uBAAuBl1C,EAAKmZ,gBAEjDk0I,GAAU,SAAUkc,EAAIzsK,EAAQgrD,GAClC,OAAOyhH,EAAGt0H,OAAOm4G,aAAatwJ,EAAQgrD,IAEpCqhH,GAAmB,SAAU3kK,GAC/B,OAAOA,GAA0B,IAAlBA,EAAK2a,UAAkB,kBAAkBpiB,KAAKyH,EAAK+mF,YAEhEi+E,GAAc,SAAUxxK,EAAOyxK,GAQjC,MAPqB,kBAAVzxK,EACTA,EAAQA,EAAMyxK,GACLA,IACTzxK,EAAQA,EAAMyC,QAAQ,WAAW,SAAUsE,EAAKiB,GAC9C,OAAOypK,EAAKzpK,IAASjB,MAGlB/G,GAEL0xK,GAAO,SAAUC,EAAM3a,GAKzB,OAJA2a,EAAOA,GAAQ,GACf3a,EAAOA,GAAQ,GACf2a,EAAO,IAAMA,EAAKzsK,UAAYysK,GAC9B3a,EAAO,IAAMA,EAAK9xJ,UAAY8xJ,GACvB2a,EAAKxwJ,gBAAkB61I,EAAK71I,eAEjCywJ,GAAsB,SAAU9kK,EAAK9M,EAAOgI,GAU9C,MATa,UAATA,GAA6B,oBAATA,IACtBhI,EAAQ8M,EAAI0mE,MAAMxzE,IAEP,eAATgI,GAAmC,MAAVhI,IAC3BA,EAAQ,QAEG,eAATgI,IACFhI,EAAQA,EAAMyC,QAAQ,UAAW,IAAIA,QAAQ,QAAS,MAEjD,GAAKzC,GAEV61C,GAAW,SAAU/oC,EAAKN,EAAMxE,GAClC,OAAO4pK,GAAoB9kK,EAAKA,EAAI+oC,SAASrpC,EAAMxE,GAAOA,IAExD6pK,GAAoB,SAAU/kK,EAAKN,GACrC,IAAIslK,EAKJ,OAJAhlK,EAAIyL,UAAU/L,GAAM,SAAU8N,GAE5B,OADAw3J,EAAahlK,EAAI+oC,SAASv7B,EAAG,mBACtBw3J,GAA6B,SAAfA,KAEhBA,GAELC,GAAe,SAAUjlK,EAAKN,EAAMpC,GACtC,OAAO0C,EAAIqH,WAAW3H,EAAMpC,EAAU0C,EAAIo1C,YAExC8vH,GAAc,CAChBf,cAAeA,GACfC,UAAWA,GACXE,wBAAyBA,GACzB7tH,YAAa+tH,GACbjc,QAASA,GACT8b,iBAAkBA,GAClBK,YAAaA,GACbE,KAAMA,GACNE,oBAAqBA,GACrB/7H,SAAUA,GACVg8H,kBAAmBA,GACnB19J,WAAY49J,IAGVE,GAAmBjB,GAAUt5G,eAC7Bw6G,GAAeF,GAAY79J,WAAYg+J,GAAqBH,GAAYb,iBAAkBiB,GAAgBJ,GAAYzuH,YACtH8uH,GAAW,SAAU7lK,EAAM+Z,GACP,qBAAXA,IACTA,EAA2B,IAAlB/Z,EAAK2a,SAAiB3a,EAAK3I,OAAS2I,EAAKqM,WAAWhV,QAE/D,MAAO2I,GAAQA,EAAKo4C,gBAClBp4C,EAAOA,EAAKqM,WAAW0N,GACnB/Z,IACF+Z,EAA2B,IAAlB/Z,EAAK2a,SAAiB3a,EAAK3I,OAAS2I,EAAKqM,WAAWhV,QAGjE,MAAO,CACL2I,KAAMA,EACN+Z,OAAQA,IAGR+rJ,GAA4B,SAAUhuH,EAAch9B,GACtD,IAAIirJ,EAAOF,GAAS/tH,EAAch9B,GAClC,GAAIirJ,EAAK/lK,KAAM,CACb,MAAO+lK,EAAK/lK,MAAwB,IAAhB+lK,EAAKhsJ,QAAgBgsJ,EAAK/lK,KAAKm3C,gBACjD4uH,EAAOF,GAASE,EAAK/lK,KAAKm3C,iBAExB4uH,EAAK/lK,MAAQ+lK,EAAKhsJ,OAAS,GAA4B,IAAvBgsJ,EAAK/lK,KAAK2a,UAAkE,MAAhDorJ,EAAK/lK,KAAK+mF,UAAUC,OAAO++E,EAAKhsJ,OAAS,IACnGgsJ,EAAKhsJ,OAAS,IAChB+9B,EAAeiuH,EAAK/lK,KACpB83C,EAAaj8B,UAAUkqJ,EAAKhsJ,OAAS,IAI3C,OAAO+9B,GAELZ,GAAY,SAAUl3C,GACxB,MAAyB,OAAlBA,EAAKtH,UAAqBsH,EAAKuM,aAAa,oBAAsBvM,EAAKuc,aAE5EypJ,GAA4B,SAAU1lK,EAAKN,GAC7C,IAAI1H,EAAS0H,EACb,MAAO1H,EAAQ,CACb,GAAwB,IAApBA,EAAOqiB,UAAkBra,EAAIorD,mBAAmBpzD,GAClD,MAA0C,UAAnCgI,EAAIorD,mBAAmBpzD,GAAsBA,EAAS0H,EAE/D1H,EAASA,EAAOG,WAElB,OAAOuH,GAELimK,GAAY,SAAUptJ,EAAOpP,EAAQzJ,EAAM+Z,GAC7C,IAAI4uB,EAAKmxH,EACLv/J,EAAMyF,EAAK+mF,UAgBf,MAfsB,qBAAXhtE,IACTA,EAASlB,EAAQte,EAAIlD,OAAS,GAE5BwhB,GACF8vB,EAAMpuC,EAAIsf,YAAY,IAAKE,GAC3B+/I,EAAOv/J,EAAIsf,YAAY,IAAQE,GAC/B4uB,EAAMA,EAAMmxH,EAAOnxH,EAAMmxH,GACZ,IAATnxH,IAAel/B,IAAWk/B,EAAM5uB,IAAWlB,IAAU8vB,GAAOpuC,EAAIlD,QAClEsxC,MAGFA,EAAMpuC,EAAI+B,QAAQ,IAAKyd,GACvB+/I,EAAOv/J,EAAI+B,QAAQ,IAAQyd,GAC3B4uB,GAAe,IAATA,KAAyB,IAAVmxH,GAAenxH,EAAMmxH,GAAQnxH,EAAMmxH,GAEnDnxH,GAELu9H,GAAmB,SAAU5lK,EAAKyB,EAAM0Y,EAAWV,EAAQlB,EAAOpP,GACpE,IAAI6T,EAAQtd,EAAM2oC,EAAKw9H,EACvB,GAA2B,IAAvB1rJ,EAAUE,SAAgB,CAE5B,GADAguB,EAAMs9H,GAAUptJ,EAAOpP,EAAQgR,EAAWV,IAC7B,IAAT4uB,EACF,MAAO,CACLluB,UAAWA,EACXV,OAAQ4uB,GAGZw9H,EAAe1rJ,EAEjB6C,EAAS,IAAI+/H,GAAW5iI,EAAWna,EAAIyL,UAAU0O,EAAWna,EAAI02C,UAAYj1C,GAC5E,MAAO/B,EAAOsd,EAAOzE,EAAQ,OAAS,UACpC,GAAsB,IAAlB7Y,EAAK2a,UAAmB8qJ,GAAiBzlK,EAAKvH,aAS3C,GAAI6H,EAAI02C,QAAQh3C,IAASwlK,GAAYN,KAAKllK,EAAM,MACrD,WAPA,GAFAmmK,EAAenmK,EACf2oC,EAAMs9H,GAAUptJ,EAAOpP,EAAQzJ,IAClB,IAAT2oC,EACF,MAAO,CACLluB,UAAWza,EACX+Z,OAAQ4uB,GAOhB,GAAIw9H,EAMF,OAJEpsJ,EADElB,EACO,EAEAstJ,EAAa9uK,OAEjB,CACLojB,UAAW0rJ,EACXpsJ,OAAQA,IAIVqsJ,GAAuB,SAAU9lK,EAAKyI,EAAQuR,EAAKG,EAAW2+H,GAChE,IAAIlpF,EAASt4D,EAAGgT,EAAGy7J,EAKnB,IAJ2B,IAAvB5rJ,EAAUE,UAAiD,IAA/BF,EAAUssE,UAAU1vF,QAAgBojB,EAAU2+H,KAC5E3+H,EAAYA,EAAU2+H,IAExBlpF,EAAUw1G,GAAaplK,EAAKma,GACvB7iB,EAAI,EAAGA,EAAIs4D,EAAQ74D,OAAQO,IAC9B,IAAKgT,EAAI,EAAGA,EAAI7B,EAAO1R,OAAQuT,IAE7B,GADAy7J,EAAYt9J,EAAO6B,MACf,cAAey7J,IAAaA,EAAU7rJ,YAAcF,EAAIE,YAGxDla,EAAIiI,GAAG2nD,EAAQt4D,GAAIyuK,EAAUzoK,UAC/B,OAAOsyD,EAAQt4D,GAIrB,OAAO6iB,GAEL6rJ,GAAoB,SAAUlyK,EAAQ2U,EAAQ0R,EAAW2+H,GAC3D,IAAIp5I,EACAM,EAAMlM,EAAOkM,IACbpJ,EAAOoJ,EAAIo1C,UAIf,GAHK3sC,EAAO,GAAG+hF,UACb9qF,EAAOM,EAAIyL,UAAU0O,EAAW1R,EAAO,GAAG0U,MAAOvmB,KAE9C8I,EAAM,CACT,IAAIumK,EAAYjmK,EAAIyL,UAAU0O,EAAW,YACzCza,EAAOM,EAAIyL,UAAiC,IAAvB0O,EAAUE,SAAiBF,EAAUhiB,WAAagiB,GAAW,SAAUza,GAC1F,OAAOA,IAAS9I,GAAQ0uK,GAAcxxK,EAAQ4L,KAC7CumK,GAKL,GAHIvmK,GAAQ+I,EAAO,GAAG+hF,UACpB9qF,EAAO0lK,GAAaplK,EAAKN,EAAM,SAAS+7B,UAAU,IAAM/7B,IAErDA,EAAM,CACTA,EAAOya,EACP,MAAOza,EAAKo5I,KAAiB94I,EAAI02C,QAAQh3C,EAAKo5I,IAE5C,GADAp5I,EAAOA,EAAKo5I,GACRosB,GAAYN,KAAKllK,EAAM,MACzB,MAIN,OAAOA,GAAQya,GAEb+rJ,GAAsB,SAAUlmK,EAAKyI,EAAQ2R,EAAgBG,EAAai9B,EAAch9B,EAAWjC,GACrG,IAAI4B,EAAWniB,EAAQuzD,EAASutF,EAAaliJ,EAI7C,GAHAujB,EAAYniB,EAASugB,EAAQ6B,EAAiBo9B,EAC9CshG,EAAcvgI,EAAQ,kBAAoB,cAC1C3hB,EAAOoJ,EAAIo1C,UACgB,IAAvBj7B,EAAUE,WAAmBgrJ,GAAmBlrJ,KAC9C5B,EAAQgC,EAAc,EAAIC,EAAYL,EAAUssE,UAAU1vF,QAC5D,OAAOojB,EAGX,MAAO,EAAM,CACX,IAAK1R,EAAO,GAAG09J,cAAgBnmK,EAAI02C,QAAQ1+C,GACzC,OAAOA,EAET,IAAKuzD,EAAUvzD,EAAO8gJ,GAAcvtF,EAASA,EAAUA,EAAQutF,GAC7D,IAAKqsB,GAAiB55G,KAAa85G,GAAmB95G,KAAa3U,GAAU2U,GAC3E,OAAOvzD,EAGX,GAAIA,IAAWpB,GAAQoB,EAAOG,aAAevB,EAAM,CACjDujB,EAAYniB,EACZ,MAEFA,EAASA,EAAOG,WAElB,OAAOgiB,GAELisJ,GAAY,SAAUtyK,EAAQkmB,EAAKvR,EAAQU,GAC7C,IAAIk9J,EAAUjsJ,EAAiBJ,EAAII,eAAgBG,EAAcP,EAAIO,YAAai9B,EAAex9B,EAAIw9B,aAAch9B,EAAYR,EAAIQ,UAC/Hxa,EAAMlM,EAAOkM,IAoFjB,OAnFgC,IAA5Boa,EAAeC,UAAkBD,EAAe09B,kBAClD19B,EAAiBxa,GAAQwa,EAAgBG,GACT,IAA5BH,EAAeC,WACjBE,EAAc,IAGY,IAA1Bi9B,EAAan9B,UAAkBm9B,EAAaM,kBAC9CN,EAAe53C,GAAQ43C,EAAcx9B,EAAIE,UAAYM,EAAYA,EAAY,GAC/C,IAA1Bg9B,EAAan9B,WACfG,EAAYg9B,EAAaivC,UAAU1vF,SAGvCqjB,EAAiBsrJ,GAA0B1lK,EAAKoa,GAChDo9B,EAAekuH,GAA0B1lK,EAAKw3C,IAC1C2tH,GAAiB/qJ,EAAejiB,aAAegtK,GAAiB/qJ,MAClEA,EAAiB+qJ,GAAiB/qJ,GAAkBA,EAAiBA,EAAejiB,WAElFiiB,EADEJ,EAAIE,UACWE,EAAey8B,iBAAmBz8B,EAElCA,EAAe6B,aAAe7B,EAEjB,IAA5BA,EAAeC,WACjBE,EAAcP,EAAIE,UAAYE,EAAerjB,OAAS,KAGtDouK,GAAiB3tH,EAAar/C,aAAegtK,GAAiB3tH,MAChEA,EAAe2tH,GAAiB3tH,GAAgBA,EAAeA,EAAar/C,WAE1Eq/C,EADEx9B,EAAIE,UACSs9B,EAAav7B,aAAeu7B,EAE5BA,EAAaX,iBAAmBW,EAEnB,IAA1BA,EAAan9B,WACfG,EAAYR,EAAIE,UAAY,EAAIs9B,EAAazgD,SAG7CijB,EAAIE,YACNmsJ,EAAWT,GAAiB5lK,EAAKlM,EAAOoU,UAAWkS,EAAgBG,GAAa,EAAMpR,GAClFk9J,IACFjsJ,EAAiBisJ,EAASlsJ,UAC1BI,EAAc8rJ,EAAS5sJ,QAEzB4sJ,EAAWT,GAAiB5lK,EAAKlM,EAAOoU,UAAWsvC,EAAch9B,GAAW,EAAOrR,GAC/Ek9J,IACF7uH,EAAe6uH,EAASlsJ,UACxBK,EAAY6rJ,EAAS5sJ,SAGrBhR,EAAO,GAAGzE,SACZwzC,EAAeruC,EAASquC,EAAeguH,GAA0BhuH,EAAch9B,KAE7E/R,EAAO,GAAGzE,QAAUyE,EAAO,GAAG09J,gBAC3B19J,EAAO,GAAGzE,QAAuC,IAA5BoW,EAAeC,UAAkC,IAAhBE,IACzDH,EAAiB8rJ,GAAoBlmK,EAAKyI,EAAQ2R,EAAgBG,EAAai9B,EAAch9B,GAAW,IAErG/R,EAAO,GAAGzE,QAAqC,IAA1BwzC,EAAan9B,UAAkBG,IAAcg9B,EAAaivC,UAAU1vF,SAC5FygD,EAAe0uH,GAAoBlmK,EAAKyI,EAAQ2R,EAAgBG,EAAai9B,EAAch9B,GAAW,KAGtG/R,EAAO,GAAGnL,WAAiC,IAArBmL,EAAO,GAAG69J,SAAqB79J,EAAO,GAAGzE,SACjEoW,EAAiB0rJ,GAAqB9lK,EAAKyI,EAAQuR,EAAKI,EAAgB,mBACxEo9B,EAAesuH,GAAqB9lK,EAAKyI,EAAQuR,EAAKw9B,EAAc,iBAElE/uC,EAAO,GAAG0U,OAAS1U,EAAO,GAAGnL,YAC/B8c,EAAiB4rJ,GAAkBlyK,EAAQ2U,EAAQ2R,EAAgB,mBACnEo9B,EAAewuH,GAAkBlyK,EAAQ2U,EAAQ+uC,EAAc,eAC3D/uC,EAAO,GAAG0U,QACPnd,EAAI02C,QAAQt8B,KACfA,EAAiB8rJ,GAAoBlmK,EAAKyI,EAAQ2R,EAAgBG,EAAai9B,EAAch9B,GAAW,IAErGxa,EAAI02C,QAAQc,KACfA,EAAe0uH,GAAoBlmK,EAAKyI,EAAQ2R,EAAgBG,EAAai9B,EAAch9B,GAAW,MAI5E,IAA5BJ,EAAeC,WACjBE,EAAcva,EAAIi4C,UAAU79B,GAC5BA,EAAiBA,EAAejiB,YAEJ,IAA1Bq/C,EAAan9B,WACfG,EAAYxa,EAAIi4C,UAAUT,GAAgB,EAC1CA,EAAeA,EAAar/C,YAEvB,CACLiiB,eAAgBA,EAChBG,YAAaA,EACbi9B,aAAcA,EACdh9B,UAAWA,IAGX+rJ,GAAc,CAAEH,UAAWA,IAE3BI,GAAS9yK,GAAMkP,KACf6jK,GAAc,SAAUtsJ,EAAW9f,GACrC,IAAI0R,EAAaoO,EAAUpO,WAO3B,OANA1R,IACIA,EAAQ0R,EAAWhV,OAAS,EAC9BsD,EAAQ0R,EAAWhV,OAAS,EACnBsD,EAAQ,IACjBA,EAAQ,GAEH0R,EAAW1R,IAAU8f,GAE1BusJ,GAAS,SAAU1mK,EAAKga,EAAK3iB,GAC/B,IAIIu0F,EACA+6E,EACAN,EACA3mK,EACA1H,EACA2yD,EACAvjD,EAVAgT,EAAiBJ,EAAII,eACrBG,EAAcP,EAAIO,YAClBi9B,EAAex9B,EAAIw9B,aACnBh9B,EAAYR,EAAIQ,UASpB,GADApT,EAAQpH,EAAIE,OAAO,+CACfkH,EAAMrQ,OAAS,EACjByvK,GAAOp/J,GAAO,SAAU1H,GACtBrI,EAAS,CAACqI,WAFd,CAMA,IAAIknK,EAAU,SAAUx/J,GACtB,IAAI1H,EASJ,OARAA,EAAO0H,EAAM,GACS,IAAlB1H,EAAK2a,UAAkB3a,IAAS0a,GAAkBG,GAAe7a,EAAK+mF,UAAU1vF,QAClFqQ,EAAMtM,OAAO,EAAG,GAElB4E,EAAO0H,EAAMA,EAAMrQ,OAAS,GACV,IAAdyjB,GAAmBpT,EAAMrQ,OAAS,GAAK2I,IAAS83C,GAAkC,IAAlB93C,EAAK2a,UACvEjT,EAAMtM,OAAOsM,EAAMrQ,OAAS,EAAG,GAE1BqQ,GAELy/J,EAAkB,SAAUnnK,EAAMxE,EAAMwvD,GAE1C,IADA,IAAIC,EAAW,GACRjrD,GAAQA,IAASgrD,EAAShrD,EAAOA,EAAKxE,GAC3CyvD,EAAShwD,KAAK+E,GAEhB,OAAOirD,GAELm8G,EAAe,SAAUpnK,EAAM9I,GACjC,EAAG,CACD,GAAI8I,EAAKvH,aAAevB,EACtB,OAAO8I,EAETA,EAAOA,EAAKvH,iBACLuH,IAEPqnK,EAAe,SAAUt8G,EAAWC,EAASztC,GAC/C,IAAI67H,EAAc77H,EAAO,cAAgB,kBACzC,IAAKvd,EAAO+qD,EAAWzyD,EAAS0H,EAAKvH,WAAYuH,GAAQA,IAASgrD,EAAShrD,EAAO1H,EAChFA,EAAS0H,EAAKvH,WACdwyD,EAAWk8G,EAAgBnnK,IAAS+qD,EAAY/qD,EAAOA,EAAKo5I,GAAcA,GACtEnuF,EAAS5zD,SACNkmB,GACH0tC,EAASlvB,UAEXpkC,EAASuvK,EAAQj8G,MAUvB,GANgC,IAA5BvwC,EAAeC,UAAkBD,EAAe09B,kBAClD19B,EAAiBA,EAAerO,WAAWwO,IAEf,IAA1Bi9B,EAAan9B,UAAkBm9B,EAAaM,kBAC9CN,EAAeivH,GAAYjvH,EAAch9B,IAEvCJ,IAAmBo9B,EACrB,OAAOngD,EAASuvK,EAAQ,CAACxsJ,KAG3B,IADAwxE,EAAW5rF,EAAIiuJ,mBAAmB7zI,EAAgBo9B,GAC7C93C,EAAO0a,EAAgB1a,EAAMA,EAAOA,EAAKvH,WAAY,CACxD,GAAIuH,IAAS83C,EACX,OAAOuvH,EAAa3sJ,EAAgBwxE,GAAU,GAEhD,GAAIlsF,IAASksF,EACX,MAGJ,IAAKlsF,EAAO83C,EAAc93C,EAAMA,EAAOA,EAAKvH,WAAY,CACtD,GAAIuH,IAAS0a,EACX,OAAO2sJ,EAAavvH,EAAco0C,GAEpC,GAAIlsF,IAASksF,EACX,MAGJ+6E,EAAaG,EAAa1sJ,EAAgBwxE,IAAaxxE,EACvDisJ,EAAWS,EAAatvH,EAAco0C,IAAap0C,EACnDuvH,EAAa3sJ,EAAgBusJ,GAAY,GACzCh8G,EAAWk8G,EAAgBF,IAAevsJ,EAAiBusJ,EAAaA,EAAW1qJ,YAAa,cAAeoqJ,IAAa7uH,EAAe6uH,EAASpqJ,YAAcoqJ,GAC9J17G,EAAS5zD,QACXM,EAASuvK,EAAQj8G,IAEnBo8G,EAAavvH,EAAc6uH,KAEzBW,GAAY,CAAEtyG,KAAMgyG,IAEpBO,GAAY,WACd,MAAO,UAGT,SAASv2E,GAAWzoF,EAAI/M,GACtB,IAAI/H,EAAM,SAAU0E,GAClB,IAAKoQ,EAAGpQ,GACN,MAAM,IAAIoW,MAAM,gBAAkB/S,EAAO,eAAiBA,EAAO,SAEnE,OAAOy1F,EAAU94F,GAASgW,MAAM,KAE9B8iF,EAAY,SAAU94F,GACxB,OAAOoQ,EAAGpQ,GAAWsX,EAAO/U,KAAKvC,EAAQmI,MAAMymF,WAAat3E,EAAOhC,QAEjE/Z,EAAM,SAAUyE,EAAS3E,GAC3B,IAAK+U,EAAGpQ,GACN,MAAM,IAAIoW,MAAM,oBAAsB/S,EAAO,eAAiBA,EAAO,SAEvErD,EAAQmI,MAAMymF,UAAYvzF,GAE5B,MAAO,CACLC,IAAKA,EACLw9F,UAAWA,EACXv9F,IAAKA,GAIT,IAAIw9F,GAAMF,GAAU11E,GAAQ,QACxB+kF,GAAQ,SAAUloG,GACpB,OAAO+4F,GAAIz9F,IAAI0E,IAGbqvK,GAAc,SAAU9kH,GAC1B,OAAOpnC,GAAOonC,IAAS29C,GAAM39C,KAAU6kH,MAErC3+J,GAAU,SAAUxU,EAAQsuD,EAAM+kH,EAAU/uK,GAC9C,OAAOJ,GAAOoqD,GAAM10C,MAAK,WACvB,MAAO,cACN,SAAU1V,GACX,MAAiB,OAAbI,GAAqB8uK,GAAY9kH,GAC5B,QACE8vG,GAAa9vG,GACf,WACEk6G,GAAYl6G,GACd,QACG8iH,GAAY3c,QAAQz0J,EAAQqzK,EAAU/uK,IAAc8sK,GAAY3c,QAAQz0J,EAAQoH,GAAKlD,GAASmvK,GAGjG,QAFA,oBAOTC,GAA8B,SAAUptJ,GAC1C,OAAuC,IAAhCA,EAAII,eAAeC,UAAkBL,EAAII,eAAeqsE,UAAU1vF,QAAUijB,EAAIO,aAAiE,MAAlDP,EAAII,eAAeqsE,UAAUzsE,EAAIO,cAErI8sJ,GAAgB,SAAUvzK,EAAQkmB,GACpC,IAAIjK,EAAIw2J,GAAYH,UAAUtyK,EAAQkmB,EAAK,CAAC,CAAEhW,QAAQ,IAASojK,GAA4BptJ,IAC3FA,EAAIW,SAAS5K,EAAEqK,eAAgBrK,EAAEwK,aACjCP,EAAIY,OAAO7K,EAAEynC,aAAcznC,EAAEyK,WAC7B1mB,EAAO6L,UAAU0b,OAAOrB,IAEtBstJ,GAAiB,SAAUC,EAAMrjJ,EAAI2tI,EAAgB2V,GACvD,IAAIC,EAAKvjJ,EAAG8tI,IAAKA,OAAa,IAAPyV,EAAgBl5E,GAAS,kBAAoBk5E,EAAIzuK,EAAOm6J,GAAOjvI,EAAI,CAAC,QACvFwjJ,EAASrsH,GAAQL,QAAQ,OAAQusH,GACrC9/D,GAAMigE,EAAQhW,MACdt+J,GAAIs0K,EAAQ,GAAK9V,KAAoBI,GACrC5+J,GAAIs0K,EAAQ,GAAK/V,KAAkBE,GACnC,IAAIpyI,EAAK+nJ,EAASxV,EAAKh5J,GAAO2uK,EAAKloJ,EAAGlkB,WAAYA,OAAoB,IAAPosK,EAAgB,GAAKA,EAAIC,EAAKnoJ,EAAGnkB,QAASA,OAAiB,IAAPssK,EAAgB,GAAKA,EAGxI,OAFAnkH,GAAOikH,EAAQnsK,GACf+3J,GAAMoU,EAAQpsK,GACPosK,GAELG,GAAW,SAAU/zK,EAAQkmB,EAAK63I,EAAgB2V,EAAUxuK,GAC9D,IAAI8uK,EAAc,GACdJ,EAASJ,GAAexzK,EAAOyP,SAAUvK,EAAM64J,EAAgB2V,GAC/Dh9E,EAAUx3F,GAAKmc,EAAOhC,QACtB46J,EAAgB,WAClBv9E,EAAQp3F,IAAI+b,EAAOhC,SAEjB66J,EAAmB,WACrB,OAAOx9E,EAAQr3F,MAAM2a,YAAW,WAC9B,IAAIq6B,EAAK2E,GAAQ46H,GAGjB,OAFAI,EAAYntK,KAAKwtC,GACjBqiD,EAAQp3F,IAAI+b,EAAOL,KAAKq5B,IACjBA,MAGP8/H,EAAkB,SAAUv0B,GAC9B9wI,EAAK8wI,EAAOw0B,IAEVA,EAAiB,SAAU9lH,GAC7B,IAAIhgC,EAAM9Z,GAAQxU,EAAQsuD,EAAM,OAAQlnD,GAAKknD,IAC7C,OAAQhgC,GACR,IAAK,gBACD2lJ,IACA,IAAI3jH,EAAa18C,GAAS06C,GAC1B6lH,EAAgB7jH,GAChB2jH,IACA,MAEJ,IAAK,QACD,IAAIvzK,EAAIwzK,IACRxW,GAAOpvG,EAAM5tD,GACb,MAEJ,IAAK,WACL,IAAK,WACL,IAAK,WAGH2zK,EAAe,SAAU/gK,GAC3B,IAAIssI,EAAQh+I,EAAI0R,EAAOi0C,GAAQN,SAC/BktH,EAAgBv0B,IAMlB,OAJAszB,GAAUtyG,KAAK5gE,EAAOkM,IAAKga,GAAK,SAAU5S,GACxC2gK,IACAI,EAAa/gK,MAER0gK,GAELM,GAAuB,SAAUt0K,EAAQoH,EAAMnH,EAAUiF,GAC3DlF,EAAOgM,YAAYC,UAAS,WAC1B,IAAIsoK,EAAav0K,EAAO6L,UAAUyc,SAIlC,GAHIisJ,EAAWnuJ,WACbmtJ,GAAcvzK,EAAQu0K,GAEpBv0K,EAAO6L,UAAUyc,SAASlC,UAAW,CACvC,IAAIswE,EAAU88E,GAAexzK,EAAOyP,SAAUvK,EAAMkC,EAAMnH,EAASyzK,UACnEv+E,GAAMuB,EAAS,KACf12F,EAAO6L,UAAUyc,SAASoB,WAAWgtE,EAAQxqF,OAC7ClM,EAAO6L,UAAUO,OAAOsqF,EAAQxqF,WAC3B,CACL,IAAI23C,EAAWwkH,GAAYL,sBAAsBhoK,EAAO6L,WAAW,GAC/Dqa,EAAMlmB,EAAO6L,UAAUyc,SAC3ByrJ,GAAS/zK,EAAQkmB,EAAK9e,EAAMnH,EAASyzK,SAAUxuK,GAC/ClF,EAAO6L,UAAUiqD,eAAejS,QAKtC,SAAS2wH,GAAWx0K,GAClB,IAAIkzH,EAAWz+F,KACfinC,GAAQ17D,EAAQkzH,GAChB,IAAIuhD,EAAU9lK,GAAM3O,GACpB,MAAO,CACLqO,SAAU,SAAUjH,EAAMnH,GACxBizH,EAAS7kH,SAASjH,EAAMnH,IAE1B8zK,SAAU,SAAU3sK,EAAMlC,GACxBguH,EAASz4F,OAAOrzB,GAAM0H,MAAK,SAAU7O,GACnCq0K,GAAqBt0K,EAAQoH,EAAMnH,EAAUiF,OAGjDwvK,kBAAmB,SAAUttK,EAAM7D,GACjCkxK,EAAQ7tG,YAAYx/D,EAAM7D,IAE5B8R,OAAQ,SAAUjO,GAChBo/F,GAASxmG,EAAQqb,EAAOL,KAAK5T,IAAO0H,MAAK,SAAUshB,GACjD,IAAIxsB,EAAWwsB,EAAGxsB,SAClBkL,EAAKlL,EAAUs/D,QAGnB7iD,OAAQ,SAAUjZ,GAChB,IAAIm3J,EAAYF,GAAQr+J,EAAQoH,GAChC,OAAO8+I,GAAMqY,GAAW,SAAU3e,GAChC,OAAOh+I,EAAIg+I,GAAO,SAAUtxF,GAC1B,OAAOA,EAAKpiD,cAOtB,IAAIyoK,GAAkB,SAAU/oK,GAC9B,OAAOA,EAAKsM,YAActM,EAAKsM,aAAetM,EAAK82C,WAEjDkyH,GAAgB,SAAUhpK,GAC5B,MAAqB,OAAdA,EAAKxE,MAAgC,MAAfwE,EAAKxM,OAEhCy1K,GAAqB,SAAUx4H,EAAQzwC,GACzC,IAAIi3C,EAAgBxG,EAAOsX,mBAC3B,OAAO9Q,EAAcj3C,EAAKxE,OAASutK,GAAgB/oK,IAASgpK,GAAchpK,EAAKsM,aAE7E48J,GAAyB,SAAUz4H,EAAQzwC,GAC7C,IAAImpK,EAAmB14H,EAAO+c,sBAC9B,OAAOxtD,IAASA,EAAKkxC,QAAQi4H,IAAqBF,GAAmBx4H,EAAQzwC,KAE3EopK,GAAiB,SAAU34H,EAAQuL,GACrC,IAAI1vC,EAAa0vC,EAAS1vC,WACtBwqC,EAAYkF,EAASlF,UAUzB,OATIxqC,GAAkC,SAApBA,EAAW9Q,OAC3B8Q,EAAaA,EAAWiR,MAEtBu5B,GAAsC,eAAzBA,EAAUzzC,KAAK,QAC9ByzC,EAAYA,EAAU6vC,MAEpBuiF,GAAuBz4H,EAAQqG,KACjCA,EAAYA,EAAU6vC,SAEnBr6E,GAAcA,IAAewqC,KAGP,OAApBxqC,EAAW9Q,MAAqC,OAApB8Q,EAAW9Q,OAE5C6tK,GAAqB,SAAUC,GACjC,IAAIh9J,EAAag9J,EAAYh9J,WACzBwqC,EAAYwyH,EAAYxyH,UAO5B,OANIxqC,GAAsC,SAAxBA,EAAW5T,UAC3B4T,EAAW7T,WAAWmf,YAAYtL,GAEhCwqC,GAA8B,eAAjBA,EAAUlgD,IACzBkgD,EAAUr+C,WAAWmf,YAAYk/B,GAE5BwyH,GAELC,GAAgB,SAAUjpK,EAAK41C,EAAY8F,GAC7C,IAAI3+C,EAAO64C,EAAW9/B,UAAU4lC,GAC5BstH,EAAchpK,EAAI0nD,eAAe3qD,GACrC,OAAOgsK,GAAmBC,IAExBE,GAAc,SAAUntK,GAC1B,OAAOrI,GAAMooB,KAAK/f,EAAIgQ,YAAY,SAAUi3C,GAC1C,MAA0B,OAAnBA,EAAM5qD,aAGb+wK,GAAY,SAAUzpK,GACxB,MAAqB,MAAdA,EAAK1G,MAAmBi+C,GAASZ,KAAK32C,IAE3C0pK,GAAmB,SAAU1pK,GAC/B,OAAOA,GAAQA,EAAKsM,YAActM,EAAKsM,aAAetM,EAAK82C,WAAa2yH,GAAUzpK,EAAKsM,aAErFq9J,GAAkB,SAAUttK,GAC9B,OAAQA,EAAIiQ,YAAco9J,GAAiBrtK,IAEzCutK,GAAgB,SAAU7vH,GAC5B,OAAOA,EAAK1iD,OAAS,GAAKsyK,GAAgB5vH,EAAKA,EAAK1iD,OAAS,IAAM0iD,EAAKn/C,MAAM,GAAI,GAAKm/C,GAErF8vH,GAAc,SAAUvpK,EAAKN,GAC/B,IAAI4uD,EAActuD,EAAIyL,UAAU/L,EAAMM,EAAI02C,SAC1C,OAAO4X,GAAwC,OAAzBA,EAAYl2D,SAAoBk2D,EAAc,MAElEk7G,GAAkB,SAAUxpK,EAAKN,GACnC,QAAS6pK,GAAYvpK,EAAKN,IAExB+pK,GAAW,SAAUtxK,EAAY6hB,GACnC,IAAI0vJ,EAAY1vJ,EAAIq9B,aAChBsyH,EAAW3vJ,EAAIq9B,aAGnB,OAFAqyH,EAAU59F,eAAe3zE,GACzBwxK,EAAS1gH,YAAY9wD,GACd,CACLuxK,EAAUE,gBACVD,EAASC,kBAGTC,GAAc,SAAUnqK,EAAMu3D,GAChC,IAAI6yG,EAAWlQ,GAAgBljK,OAAOgJ,GAClCqqK,EAAcvI,GAAYvqG,GAC1B+yG,EAAcD,EAAY9sJ,KAAK6sJ,GACnC,OAAOE,EAAcA,EAAY7Q,UAAY,MAE3C8Q,GAAa,SAAUvqK,EAAMu3D,GAC/B,IAAI6yG,EAAWlQ,GAAgBn/J,MAAMiF,GACjCqqK,EAAcvI,GAAYvqG,GAC1B+yG,EAAcD,EAAY1jF,KAAKyjF,GACnC,OAAOE,EAAcA,EAAY7Q,UAAY,MAE3C+Q,GAAe,SAAUnlK,EAAQ00C,EAAMwd,EAAUj9C,GACnD,IAAIsY,EAAQm3I,GAAS1kK,EAAQiV,GACzB8nG,EAAY/8G,EAAO5M,WAOvB,OANA2pH,EAAUtrH,aAAa87B,EAAM,GAAIvtB,GACjCrR,GAAMkP,KAAK62C,GAAM,SAAUyM,GACzB47D,EAAUtrH,aAAa0vD,EAAInhD,MAE7B+8G,EAAUtrH,aAAa87B,EAAM,GAAIvtB,GACjC+8G,EAAUxqG,YAAYvS,GACfklK,GAAWxwH,EAAKA,EAAK1iD,OAAS,GAAIkgE,IAEvCzgE,GAAe,SAAUuO,EAAQ00C,EAAMwd,GACzC,IAAI6qD,EAAY/8G,EAAO5M,WAIvB,OAHAzE,GAAMkP,KAAK62C,GAAM,SAAU19C,GACzB+lH,EAAUtrH,aAAauF,EAAKgJ,MAEvB8kK,GAAY9kK,EAAQkyD,IAEzBt6C,GAAc,SAAU5X,EAAQ00C,EAAMwd,EAAUj3D,GAElD,OADAA,EAAI2c,YAAY88B,EAAKhe,UAAW12B,GACzBklK,GAAWxwH,EAAK,GAAIwd,IAEzBkzG,GAAgB,SAAUv0H,EAAY51C,EAAKga,EAAK0hC,GAClD,IAAIstH,EAAcC,GAAcjpK,EAAK41C,EAAY8F,GAC7C0uH,EAAWb,GAAYvpK,EAAKga,EAAII,gBAChCiwJ,EAASf,GAAcJ,GAAYF,EAAYh9J,aAC/Cs+J,EAAY,EAAGC,EAAM,EACrBtzG,EAAWj3D,EAAIo1C,UACfo1H,EAAO,SAAUx2H,GACnB,IAAI81H,EAAWlQ,GAAgBP,eAAer/I,GAC1C+vJ,EAAcvI,GAAYxhK,EAAIo1C,WAC9Bq1H,EAASz2H,IAAas2H,EAAYP,EAAY1jF,KAAKyjF,GAAYC,EAAY9sJ,KAAK6sJ,GACpF,OAAOW,GAASlB,GAAYvpK,EAAKyqK,EAAO7qK,aAAewqK,GAEzD,OAAII,EAAKF,GACA9zK,GAAa4zK,EAAUC,EAAQpzG,GAC7BuzG,EAAKD,GACP5tJ,GAAYytJ,EAAUC,EAAQpzG,EAAUj3D,GAE1CkqK,GAAaE,EAAUC,EAAQpzG,EAAUj9C,IAE9C0wJ,GAAa,CACf5B,eAAgBA,GAChBqB,cAAeA,GACfX,gBAAiBA,GACjBF,cAAeA,GACf3rB,UAAWurB,IAGTyB,GAASj3K,GAAMkP,KACfgoK,GAAe,SAAU5qK,GAC3B5I,KAAK8wH,QAAU,SAAU03C,EAAOC,GAC9B,GAAID,EAAMxnK,WAAaynK,EAAMznK,SAC3B,OAAO,EAET,IAAI2zJ,EAAa,SAAUrsJ,GACzB,IAAI8iF,EAAU,GAOd,OANAmoF,GAAO3qK,EAAI+rJ,WAAWrsJ,IAAO,SAAUqD,GACrC,IAAI7H,EAAO6H,EAAK3K,SAASic,cACC,IAAtBnZ,EAAKc,QAAQ,MAAuB,UAATd,GAA8C,IAA1BA,EAAKc,QAAQ,WAC9DwmF,EAAQtnF,GAAQ8E,EAAI6tC,UAAUnuC,EAAMxE,OAGjCsnF,GAELqoF,EAAiB,SAAUC,EAAMC,GACnC,IAAI73K,EAAOgI,EACX,IAAKA,KAAQ4vK,EACX,GAAIA,EAAK30K,eAAe+E,GAAO,CAE7B,GADAhI,EAAQ63K,EAAK7vK,GACQ,qBAAVhI,EACT,OAAO,EAET,GAAI43K,EAAK5vK,KAAUhI,EACjB,OAAO,SAEF63K,EAAK7vK,GAGhB,IAAKA,KAAQ6vK,EACX,GAAIA,EAAK50K,eAAe+E,GACtB,OAAO,EAGX,OAAO,GAET,QAAK2vK,EAAe9e,EAAW6T,GAAQ7T,EAAW8T,QAG7CgL,EAAe7qK,EAAIkxC,WAAWlxC,EAAI6tC,UAAU+xH,EAAO,UAAW5/J,EAAIkxC,WAAWlxC,EAAI6tC,UAAUgyH,EAAO,cAG/FqE,GAAUt5G,eAAeg1G,KAAWsE,GAAUt5G,eAAei1G,OAIrEmL,GAAkB,SAAUjvK,GAC9B,IAAI2L,EAAW,GACXujK,EAAUlvK,EAAIiE,MAClB,MAAOirK,EACLvjK,EAAS/M,KAAK0gD,GAAQN,QAAQkwH,IAC9BA,EAAUA,EAAQz0H,UAEpB,OAAO9uC,GAELwjK,GAAmB,SAAUnvK,GAC/B,IAAIovK,EAASz/E,GAAc3vF,EAAK,MAC5B+4J,EAAMnyJ,EAAOqoK,GAAgBjvK,GAAKzB,OAAO,GAAI+7C,IAC7C80H,EAAOp0K,SAAW+9J,EAAI/9J,QACxB6L,EAAKkyJ,EAAKxrE,KAGV8hF,GAAoB,SAAUrvK,GAChCkH,GAAMlH,GACNmH,GAAOnH,EAAKs/C,GAAQR,SAAS,6BAE3BwwH,GAAoB,SAAUtvK,GAChC,OAAOif,GAAOjf,GAAsB,MAAfgkG,GAAMhkG,GAAkBs6C,GAAKt6C,IAEhDuvK,GAAkB,SAAUvvK,GAC9B,OAA2D,IAApD4G,EAAO+E,GAAS3L,GAAMsvK,IAAmBt0K,QAE9Cw0K,GAAsB,SAAUxvK,GAClCy6C,GAAUz6C,GAAK6G,MAAK,SAAU4zC,GAC5B6zC,GAAY7zC,GAAW5zC,MAAK,SAAU4oK,GAChC90H,GAAQ36C,IAAQs6C,GAAKG,IAAcE,GAAQ80H,IAC7CliF,GAAS9yC,UAKbi1H,GAAY,CACdP,iBAAkBA,GAClBE,kBAAmBA,GACnBE,gBAAiBA,GACjBC,oBAAqBA,IAGnBG,GAAYh4K,GAAM+gE,QACtB,SAASk3G,GAAQ53K,GACf,IACI2hB,EAAQk2J,EAAcC,EAAaz2K,EAAQ02K,EAD3C/uK,EAAO,GAQX,OANAhJ,EAAWA,GAAY,GACvB2hB,EAAS3hB,EAAS2hB,OAClBk2J,EAAeF,GAAU33K,EAAS6hB,eAAiB,IACnDi2J,EAAcH,GAAU33K,EAAS8hB,cAAgB,IACjDzgB,EAASutJ,GAASP,cAAcruJ,EAASg4K,iBAAmB,MAAOh4K,EAASouJ,UAC5E2pB,EAAyC,SAA5B/3K,EAASi4K,eACf,CACLzzJ,MAAO,SAAUrd,EAAMwkB,EAAOzc,GAC5B,IAAI3L,EAAG4zE,EAAGnoE,EAAM7P,EAQhB,GAPIwiB,GAAUk2J,EAAa1wK,IAAS6B,EAAKhG,OAAS,IAChD7D,EAAQ6J,EAAKA,EAAKhG,OAAS,GACvB7D,EAAM6D,OAAS,GAAe,OAAV7D,GACtB6J,EAAKpC,KAAK,OAGdoC,EAAKpC,KAAK,IAAKO,GACXwkB,EACF,IAAKpoB,EAAI,EAAG4zE,EAAIxrD,EAAM3oB,OAAQO,EAAI4zE,EAAG5zE,IACnCyL,EAAO2c,EAAMpoB,GACbyF,EAAKpC,KAAK,IAAKoI,EAAK7H,KAAM,KAAM9F,EAAO2N,EAAK7P,OAAO,GAAO,KAI5D6J,EAAKA,EAAKhG,SADPkM,GAAS6oK,EACQ,IAEA,MAElB7oK,GAASyS,GAAUm2J,EAAY3wK,IAAS6B,EAAKhG,OAAS,IACxD7D,EAAQ6J,EAAKA,EAAKhG,OAAS,GACvB7D,EAAM6D,OAAS,GAAe,OAAV7D,GACtB6J,EAAKpC,KAAK,QAIhBwe,IAAK,SAAUje,GACb,IAAIhI,EACJ6J,EAAKpC,KAAK,KAAMO,EAAM,KAClBwa,GAAUm2J,EAAY3wK,IAAS6B,EAAKhG,OAAS,IAC/C7D,EAAQ6J,EAAKA,EAAKhG,OAAS,GACvB7D,EAAM6D,OAAS,GAAe,OAAV7D,GACtB6J,EAAKpC,KAAK,QAIhBpB,KAAM,SAAUA,EAAMg3D,GAChBh3D,EAAKxC,OAAS,IAChBgG,EAAKA,EAAKhG,QAAUw5D,EAAMh3D,EAAOnE,EAAOmE,KAG5CkD,MAAO,SAAUlD,GACfwD,EAAKpC,KAAK,YAAapB,EAAM,QAE/B+C,QAAS,SAAU/C,GACjBwD,EAAKpC,KAAK,UAAQpB,EAAM,WAE1B0yK,GAAI,SAAU/wK,EAAM3B,GACdA,EACFwD,EAAKpC,KAAK,KAAMO,EAAM,IAAK9F,EAAOmE,GAAO,MAEzCwD,EAAKpC,KAAK,KAAMO,EAAM,MAEpBwa,GACF3Y,EAAKpC,KAAK,OAGd6B,QAAS,SAAUjD,GACjBwD,EAAKpC,KAAK,YAAapB,EAAM,IAAKmc,EAAS,KAAO,KAEpDs2D,MAAO,WACLjvE,EAAKhG,OAAS,GAEhBiqB,WAAY,WACV,OAAOjkB,EAAK3B,KAAK,IAAIzF,QAAQ,MAAO,MAK1C,SAASu2K,GAAgBn4K,EAAUo8C,QAClB,IAAXA,IACFA,EAAS2zG,MAEX,IAAI3lE,EAASwtF,GAAO53K,GACpBA,EAAWA,GAAY,GACvBA,EAAS2f,WAAW,aAAc3f,IAAWA,EAAS2f,SACtD,IAAIoC,EAAY,SAAUpW,GACxB,IAAImnH,EAAUnzG,EACdA,EAAW3f,EAAS2f,SACpBmzG,EAAW,CACT7qD,EAAG,SAAUt8D,GACXy+E,EAAO5kF,KAAKmG,EAAKxM,MAAOwM,EAAK6wD,MAE/B47G,EAAG,SAAUzsK,GACXy+E,EAAO7hF,QAAQoD,EAAKxM,QAEtBk5K,EAAG,SAAU1sK,GACXy+E,EAAO8tF,GAAGvsK,EAAKxE,KAAMwE,EAAKxM,QAE5Bm5K,GAAI,SAAU3sK,GACZy+E,EAAO3hF,QAAQkD,EAAKxM,QAEtBiqE,EAAG,SAAUz9D,GACXy+E,EAAO1hF,MAAMiD,EAAKxM,QAEpBo5K,GAAI,SAAU5sK,GACZ,GAAIA,EAAOA,EAAKsM,WACd,GACE0oD,EAAKh1D,SACEA,EAAOA,EAAKud,QAI3BkhE,EAAOnS,QACP,IAAItX,EAAO,SAAUh1D,GACnB,IACIxE,EAAM01C,EAASlxB,EAAOkiE,EAAUrzC,EAAWg+H,EAAaj1K,EAAG4zE,EAAGshG,EAD9Dp4H,EAAUyyE,EAASnnH,EAAKnK,MAE5B,GAAK6+C,EA4CHA,EAAQ10C,OA5CI,CAIZ,GAHAxE,EAAOwE,EAAKxE,KACZ01C,EAAUlxC,EAAKwV,WACfwK,EAAQhgB,EAAKnE,WACTmY,GAAYgM,GAASA,EAAM3oB,OAAS,IACtCw1K,EAAc,GACdA,EAAY72K,IAAM,GAClB82K,EAAcr8H,EAAOg3G,eAAeznJ,EAAKxE,MACrCsxK,GAAa,CACf,IAAKl1K,EAAI,EAAG4zE,EAAIshG,EAAY11G,gBAAgB//D,OAAQO,EAAI4zE,EAAG5zE,IACzDsqF,EAAW4qF,EAAY11G,gBAAgBx/D,GACnCsqF,KAAYliE,EAAMhqB,MACpB64C,EAAY7uB,EAAMhqB,IAAIksF,GACtB2qF,EAAY72K,IAAIksF,GAAYrzC,EAC5Bg+H,EAAY5xK,KAAK,CACfO,KAAM0mF,EACN1uF,MAAOq7C,KAIb,IAAKj3C,EAAI,EAAG4zE,EAAIxrD,EAAM3oB,OAAQO,EAAI4zE,EAAG5zE,IACnCsqF,EAAWliE,EAAMpoB,GAAG4D,KACd0mF,KAAY2qF,EAAY72K,MAC5B64C,EAAY7uB,EAAMhqB,IAAIksF,GACtB2qF,EAAY72K,IAAIksF,GAAYrzC,EAC5Bg+H,EAAY5xK,KAAK,CACfO,KAAM0mF,EACN1uF,MAAOq7C,KAIb7uB,EAAQ6sJ,EAIZ,GADApuF,EAAO5lE,MAAM7Y,EAAKxE,KAAMwkB,EAAOkxB,IAC1BA,EAAS,CACZ,GAAIlxC,EAAOA,EAAKsM,WACd,GACE0oD,EAAKh1D,SACEA,EAAOA,EAAKud,MAEvBkhE,EAAOhlE,IAAIje,MAWjB,OALkB,IAAdwE,EAAKnK,MAAexB,EAASqwE,MAG/ByiD,EAAS,IAAInnH,GAFbg1D,EAAKh1D,GAIAy+E,EAAOn9D,cAEhB,MAAO,CAAElL,UAAWA,GAGtB,IAAI22J,GAAgB,SAAUz4E,EAAIukE,EAAID,EAAIE,GACxC,IAAIx+I,EAAMjnB,EAAW4E,SAAS+iB,cAG9B,OAFAV,EAAIW,SAASq5E,EAAIukE,GACjBv+I,EAAIY,OAAO09I,EAAIE,GACRx+I,GAEL0yJ,GAA+B,SAAU1yJ,GAC3C,IAAIlD,EAAW8iJ,GAAgBP,eAAer/I,GAC1CjD,EAAS6iJ,GAAgBN,aAAat/I,GACtCi9C,EAAWj9C,EAAI2yJ,wBACnB,OAAOpK,GAAYZ,cAAa,EAAO1qG,EAAUlgD,GAAQrhB,KAAI,SAAUk3K,GACrE,OAAKvN,GAAcvoJ,EAAUC,EAAQkgD,IAAaooG,GAAcvoJ,EAAU81J,EAAW31G,GAC5Ew1G,GAAc31J,EAASqD,YAAarD,EAAS2C,SAAUmzJ,EAAUzyJ,YAAayyJ,EAAUnzJ,UAExFO,KAERnM,MAAMmM,IAEP6yJ,GAAY,SAAU7yJ,GACxB,OAAOA,EAAIE,UAAYF,EAAM0yJ,GAA6B1yJ,IAExD8yJ,GAAkB,CAAED,UAAWA,IAE/BE,GAAc,SAAU5yJ,EAAWV,GACrC,OAAOw9B,GAASj8B,OAAOb,IAAkD,MAApCA,EAAUssE,UAAUhtE,EAAS,IAEhEuzJ,GAAqB,SAAUhzJ,EAAKjd,GACtC,IAAIod,EAAWV,EACfU,EAAYH,EAAII,eAChBX,EAASO,EAAIO,YACb,IAAI0yJ,EAAiB,SAAUn0B,GAC7B,OAAO3+H,EAAU2+H,IAAoD,IAApC3+H,EAAU2+H,GAAaz+H,UAc1D,OAZ2B,IAAvBF,EAAUE,WACRZ,EAAS,EACX1c,EAAOA,EAAKpH,QAAQ,UAAW,KACrBs3K,EAAe,qBACzBlwK,EAAOA,EAAKpH,QAAQ,KAAM,WAExB8jB,EAASU,EAAUpjB,OACrBgG,EAAOA,EAAKpH,QAAQ,iBAAkB,KAC5Bs3K,EAAe,iBACzBlwK,EAAOA,EAAKpH,QAAQ,qBAAsB,YAGvCoH,GAELmwK,GAAiC,SAAUlzJ,EAAK9mB,GAClD,IAAIinB,EAAWV,EAgBf,OAfAU,EAAYH,EAAII,eAChBX,EAASO,EAAIO,YACc,IAAvBJ,EAAUE,UAAkBL,EAAIE,YACH,MAA3BC,EAAUnhB,KAAKygB,IACjBU,EAAUqB,WAAW/B,EAAQ,GACxB,cAAcxhB,KAAK/E,KACtBA,GAAS,MAE6B,MAA/BinB,EAAUnhB,KAAKygB,EAAS,KACjCU,EAAUqB,WAAW/B,EAAS,EAAG,GAC5B,cAAcxhB,KAAK/E,KACtBA,EAAQ,IAAMA,KAIbA,GAGLi6K,GAAgBl2H,GAASqnG,eAAe,SACxC8uB,GAAsB,SAAUt5K,EAAQ0B,GAC1C,IAAIwkB,EAAMlmB,EAAO6L,UAAUyc,SACvBjC,EAAYH,EAAII,eAChBX,EAASO,EAAIO,YACbP,EAAIE,WAAa6yJ,GAAY5yJ,EAAWV,IAAWw9B,GAASj8B,OAAOb,KACrEA,EAAUmD,WAAW7D,EAAS,EAAG,KACjCU,EAAUqB,WAAW/B,EAAQ,GAC7BO,EAAIW,SAASR,EAAWV,GACxBO,EAAIY,OAAOT,EAAWV,GACtB3lB,EAAO6L,UAAU0b,OAAOrB,IAE1BlmB,EAAO6L,UAAU4wC,WAAW/6C,IAE1B63K,GAAiB,SAAUv5K,EAAQZ,EAAOiF,GAC5C,GAAkD,QAA9CA,EAAW8T,aAAa,kBAC1B9T,EAAWA,WAAW3B,aAAa1C,EAAOkM,IAAI0nD,eAAex0D,GAAQiF,OAChE,CACL,IAAIuH,EAAOvH,EAAW6T,WAClB6zJ,EAAQ1nK,EAAWq+C,WAClB92C,GAAQA,IAASmgK,GAA2B,OAAlBngK,EAAKtH,SAClCtE,EAAOkM,IAAI8sJ,QAAQ30J,EAAYjF,GAE/Bk6K,GAAoBt5K,EAAQZ,KAI9Bo6K,GAAuB,SAAUttK,EAAKjE,GACxCoT,EAAO/U,KAAK4F,EAAIyL,UAAU1P,EAAK,UAAUrG,IAAI2lD,GAAQN,SAASn4C,KAAK6oK,GAAUF,sBAE3EgC,GAA2B,SAAUz5K,EAAQs5C,GAC/C,IAAIogI,EAAqB15K,EAAOq8C,OAAOg4G,wBACnCnoJ,EAAMlM,EAAOkM,IACjB,GAAIotC,EAAO,CACT,IAAIqgI,EAAS35K,EAAOoU,UAAWwlK,EAAiB,IAAI9C,GAAa5qK,GACjEtM,GAAMkP,KAAK5C,EAAIE,OAAO,yBAAyB,SAAUR,GACvD,IAAK,IAAIiuK,EAAWjuK,EAAKvH,WAAYw1K,GAAYA,IAAaF,EAAQE,EAAWA,EAASx1K,WACpFq1K,EAAmB9tK,EAAKtH,SAASic,gBAAkBq5J,EAAexlD,QAAQylD,EAAUjuK,IACtFM,EAAImJ,OAAOzJ,GAAM,QAMvBkuK,GAAuB,SAAUlyH,GACnC,IAAIh8C,EAAOg8C,EACX,MAAOh8C,EAAOA,EAAKg1D,OACC,IAAdh1D,EAAKnK,MACPmK,EAAKqD,KAAK,oBAAqB,MAIjC8qK,GAAwB,SAAU9xK,GACpCrI,GAAMkP,KAAK7G,EAAIqI,qBAAqB,MAAM,SAAUrI,GAClDA,EAAI6iC,gBAAgB,yBAGpBkvI,GAAmB,SAAUpuK,GAC/B,QAASA,EAAKuM,aAAa,sBAEzB8hK,GAAkB,SAAUj6K,EAAQ4L,GACtC,OAAOA,IAAS5L,EAAOq8C,OAAOokB,wBAAwB70D,EAAKtH,WAEzD41K,GAAwB,SAAUl6K,EAAQovD,GAC5C,IAAI+qH,EAAwB3/G,EAAa4/G,EAErCxuK,EAAMmgK,EADN7/J,EAAMlM,EAAOkM,IAAKL,EAAY7L,EAAO6L,UAErCwuK,EAAgC,SAAUzuK,GAE5C,IADA,IAAI9I,EAAO9C,EAAOoU,UACXxI,GAAQA,IAAS9I,EAAM8I,EAAOA,EAAKvH,WACxC,GAA4C,UAAxCrE,EAAOkM,IAAIorD,mBAAmB1rD,GAChC,OAAOA,EAGX,OAAO,MAET,GAAKwjD,EAAL,CAKA,GAFApvD,EAAO6L,UAAU+0E,eAAexxB,GAChC+qH,EAAyBE,EAA8BjrH,GACnD+qH,EAGF,OAFAjuK,EAAImJ,OAAO+5C,QACXvjD,EAAUO,OAAO+tK,GAGnB,IAAIj0J,EAAMha,EAAIob,YACd1b,EAAOwjD,EAAOrM,gBACVn3C,GAA0B,IAAlBA,EAAK2a,UACfL,EAAIW,SAASjb,EAAMA,EAAK+mF,UAAU1vF,QAC7B4uI,GAAIlkH,KACPo+I,EAAQ38G,EAAOjnC,YACX4jJ,GAA4B,IAAnBA,EAAMxlJ,WACjB3a,EAAK4jK,WAAWzD,EAAM7mK,MACtB6mK,EAAM1nK,WAAWmf,YAAYuoJ,OAIjC7lJ,EAAI8xD,eAAe5oB,GACnBlpC,EAAIq1G,aAAansE,IAEnB,IAAIkrH,EAAmB,SAAUp0J,GAC/B,IAAI8vJ,EAAWlQ,GAAgBP,eAAer/I,GAC1C+vJ,EAAcvI,GAAY1tK,EAAOoU,WAErC,GADA4hK,EAAWC,EAAY9sJ,KAAK6sJ,GACxBA,EACF,OAAOA,EAAS3Q,WAGpB7qG,EAActuD,EAAIyL,UAAUy3C,EAAQljD,EAAI02C,SACxC12C,EAAImJ,OAAO+5C,GACPoL,GAAetuD,EAAI4wC,QAAQ0d,KAC7Bx6D,EAAOsM,EAAEkuD,GAAarrD,QACtB+W,EAAIW,SAAS2zC,EAAa,GAC1Bt0C,EAAIY,OAAO0zC,EAAa,GACnB6+G,GAAc7+G,IAAiBw/G,GAAiBx/G,MAAiB4/G,EAAUE,EAAiBp0J,IAI/Fha,EAAI/E,IAAIqzD,EAAatuD,EAAIiE,OAAO,KAAM,CAAE,iBAAkB,QAH1D+V,EAAMk0J,EACNluK,EAAImJ,OAAOmlD,KAKf3uD,EAAU0b,OAAOrB,KAEfq0J,GAAoB,SAAUv6K,EAAQZ,EAAOw7F,GAC/C,IAAIh5C,EAAQE,EAAYz9C,EAAY8+D,EAAUvb,EAAUhhD,EACpDwoD,EAAQlpC,EAAKta,EAAM4uK,EAAclhI,EACjCztC,EAAY7L,EAAO6L,UAAWK,EAAMlM,EAAOkM,IAe/C,GAdI,QAAQ/H,KAAK/E,KACfA,EAAQ85K,GAAmBrtK,EAAUyc,SAAUlpB,IAEjDwiD,EAAS5hD,EAAO4hD,OAChBtI,EAAQshD,EAAQthD,MAChBwI,EAAas2H,GAAe,CAAEx4J,SAAU5f,EAAOC,SAAS2f,UAAY5f,EAAOq8C,QAC3Em+H,EAAe,yEACf5zK,EAAO,CACLlF,QAAStC,EACTuV,OAAQ,OACR9I,WAAW,EACXu4D,MAAOw2B,EAAQx2B,OAEjBx9D,EAAO5G,EAAO2hC,KAAK,mBAAoB/6B,GACnCA,EAAKi9D,qBACP7jE,EAAO2hC,KAAK,aAAc,CACxBjgC,QAASkF,EAAKlF,QACdiT,OAAQ,OACR9I,WAAW,EACXu4D,MAAOw2B,EAAQx2B,YALnB,CASAhlE,EAAQwH,EAAKlF,SACsB,IAA/BtC,EAAM8I,QAAQ,cAChB9I,GAAS,YAEXA,EAAQA,EAAMyC,QAAQ,cAAe24K,GACrCt0J,EAAMra,EAAUyc,SAChB,IAAImyJ,EAAev0J,EAAII,iBAAmBJ,EAAIw0J,cAAgBx0J,EAAIw0J,gBAAkB,MAChF/sK,EAAO3N,EAAOoU,UACdqmK,IAAiB9sK,GAAQ9B,EAAU0C,eACjCrC,EAAI02C,QAAQj1C,EAAKuK,aAAe+hK,GAAgBj6K,EAAQ2N,EAAKuK,aAAehM,EAAI4wC,QAAQnvC,EAAKuK,cAC/FgO,EAAMha,EAAIob,YACVpB,EAAIW,SAASlZ,EAAKuK,WAAY,GAC9BgO,EAAIY,OAAOnZ,EAAKuK,WAAY,GAC5BrM,EAAU0b,OAAOrB,IAGhBra,EAAU0C,gBACbvO,EAAO6L,UAAU0b,OAAOyxJ,GAAgBD,UAAU/4K,EAAO6L,UAAUyc,WACnEtoB,EAAOyP,SAAS2H,YAAY,UAAU,EAAO,MAC7ChY,EAAQg6K,GAA+Bp5K,EAAO6L,UAAUyc,SAAUlpB,IAEpEiF,EAAawH,EAAUC,UACvB,IAAI6uK,EAAa,CACfnmK,QAASnQ,EAAWC,SAASic,cAC7Brb,KAAM01F,EAAQ11F,KACdrC,QAAQ,GAGV,GADA+kD,EAAWhG,EAAO95C,MAAM1I,EAAOu7K,IACT,IAAlB//E,EAAQx2B,OAAkBwyG,GAAW5B,eAAeh1K,EAAOq8C,OAAQuL,IAAagvH,GAAWlB,gBAAgBxpK,EAAK7H,GAIlH,OAHA6hB,EAAM0wJ,GAAWP,cAAcv0H,EAAY51C,EAAKlM,EAAO6L,UAAUyc,SAAUs/B,GAC3E5nD,EAAO6L,UAAU0b,OAAOrB,QACxBlmB,EAAO2hC,KAAK,aAAc/6B,GAK5B,GAFAkzK,GAAqBlyH,GACrBh8C,EAAOg8C,EAASlF,UACQ,eAApB92C,EAAKqD,KAAK,MAEZ,IADAmgD,EAASxjD,EACJA,EAAOA,EAAK2mF,KAAM3mF,EAAMA,EAAOA,EAAKg1D,MAAK,GAC5C,GAAkB,IAAdh1D,EAAKnK,OAAeyK,EAAI02C,QAAQh3C,EAAKxE,MAAO,CAC1CpH,EAAOq8C,OAAOm4G,aAAa5oJ,EAAK1H,OAAOkD,KAAM,SAC/CwE,EAAK1H,OAAOrB,OAAOusD,EAAQxjD,EAAoB,OAAdA,EAAKxE,MAExC,MAKN,GADApH,EAAO46K,oBAAoBC,wBAAwBx2K,GAC9Cs2K,EAAWG,QAGT,CACLxB,GAAoBt5K,EAAQw6K,GAC5Bn2K,EAAawH,EAAUC,UACvBq3D,EAAWnjE,EAAOoU,UACU,IAAxB/P,EAAWkiB,SACbliB,EAAauH,EAAOu3D,EAEpBv3D,EAAOvH,EAET,MAAOuH,IAASu3D,EACd9+D,EAAauH,EACbA,EAAOA,EAAKvH,WAEdjF,EAAQiF,IAAe8+D,EAAWA,EAASh+D,UAAY+G,EAAI2tJ,aAAax1J,GACxEjF,EAAQ0iD,EAAW9/B,UAAU4/B,EAAO95C,MAAM1I,EAAMyC,QAAQ,qDAAqD,WAC3G,OAAOigD,EAAW9/B,UAAU4lC,QAE1BvjD,IAAe8+D,EACjBj3D,EAAI8sJ,QAAQ71F,EAAU/jE,GAEtB8M,EAAI4tJ,aAAaz1J,EAAYjF,QAtB/BA,EAAQ0iD,EAAW9/B,UAAU4lC,GAC7B2xH,GAAev5K,EAAQZ,EAAOiF,GAwBhCo1K,GAAyBz5K,EAAQs5C,GACjC4gI,GAAsBl6K,EAAQkM,EAAI7M,IAAI,eACtC06K,GAAsB/5K,EAAOoU,WAC7BolK,GAAqBx5K,EAAOkM,IAAKlM,EAAO6L,UAAUgJ,YAClD7U,EAAO2hC,KAAK,aAAc/6B,GAC1B5G,EAAOizC,cAEL8nI,GAAe,SAAU37K,GAC3B,IAAIw7F,EACJ,MAAqB,kBAAVx7F,GACTw7F,EAAUh7F,GAAM2C,OAAO,CACrB6hE,MAAOhlE,EAAMglE,MACbl/D,KAAM,CAAEk/D,MAAOhlE,EAAMglE,QACpBhlE,GACI,CACLsC,QAAStC,EAAMsC,QACfk5F,QAASA,IAGN,CACLl5F,QAAStC,EACTw7F,QAAS,KAGTogF,GAAkB,SAAUh7K,EAAQZ,GACtC,IAAIg1B,EAAS2mJ,GAAa37K,GAC1Bm7K,GAAkBv6K,EAAQo0B,EAAO1yB,QAAS0yB,EAAOwmE,UAE/CqgF,GAAgB,CAAE5E,cAAe2E,IAEjCE,GAAY,4CACZC,GAAe,SAAU11K,GAC3B,OAAOy1K,GAAU/2K,KAAKsB,IAGpB21K,GAAiB,SAAUp7K,EAAQoH,EAAM2pJ,GAC3C,IAAI3xJ,EAAQY,EAAOW,SAASyG,EAAM2pJ,GAClC,IAA4B,IAAxB3xJ,EAAM8I,QAAQ,KAAa,CAC7B,IAAImzK,EAAUr7K,EAAOW,SAASyG,EAAM,GAAI,QACxC,OAAOi0K,EAAQh5K,eAAerC,EAAOwC,IAAM64K,EAAQr7K,EAAOwC,IAAMuuJ,EAEhE,OAAO3xJ,GAGPk8K,GAAiB,SAAUt7K,GAC7B,OAAOA,EAAOW,SAAS,eAAgB,KAErC46K,GAAa,SAAUv7K,GACzB,OAAOA,EAAOW,SAAS,UAAW,oBAEhC66K,GAAqB,SAAUx7K,GACjC,OAAOA,EAAOW,SAAS,oBAAqB,KAE1C86K,GAAY,SAAUz7K,GACxB,OAAOo7K,GAAep7K,EAAQ,UAAW,YAEvC07K,GAAe,SAAU17K,GAC3B,OAAOo7K,GAAep7K,EAAQ,aAAc,KAE1C27K,GAA2B,SAAU37K,GACvC,OAAOA,EAAOW,SAAS,0BAA2B,KAEhDi7K,GAAmB,SAAU57K,GAC/B,OAAOA,EAAOW,SAAS,aAAa,IAElCk7K,GAAqB,SAAU77K,GACjC,GAAIA,EAAOW,SAAS,oBAAoB,GACtC,MAAO,IAET,IAAI0oB,EAAQrpB,EAAOW,SAAS,oBAAqB,KACjD,OAAiB,IAAV0oB,EAAkB,GAAKA,GAE5ByyJ,GAA0B,SAAU97K,GACtC,OAAOA,EAAOW,SAAS,0BAA2B,KAEhDo7K,GAAuB,SAAU/7K,GACnC,OAAOA,EAAOW,SAAS,sBAAuB,mCAE5Cq7K,GAAuB,SAAUh8K,GACnC,OAAOA,EAAOW,SAAS,sBAAuB,KAE5Cs7K,GAAmB,SAAUj8K,GAC/B,OAAOA,EAAOW,SAAS,eAAe,IAEpCu7K,GAAiC,SAAUl8K,GAC7C,OAAOA,EAAOW,SAAS,gCAAgC,IAErDw7K,GAAqB,SAAUn8K,GACjC,OAAOJ,GAAM6iJ,QAAQziJ,EAAOW,SAAS,yBAA0B,MAE7Dy7K,GAAqB,SAAUp8K,GACjC,OAAOJ,GAAM6iJ,QAAQziJ,EAAOW,SAAS,oBAAqB,MAExD07K,GAAyB,SAAUr8K,GACrC,OAAOA,EAAOW,SAAS,wBAAyBoK,GAAS,GAAO,aAE9DuxK,GAA4B,SAAUt8K,GACxC,OAAOA,EAAOW,SAAS,qBAAqB,EAAM,YAEhD47K,GAAsB,SAAUv8K,GAClC,OAAOA,EAAOW,SAAS,yBAAyB,EAAO,YAErD67K,GAAwB,SAAUx8K,GACpC,OAAOA,EAAOW,SAAS,4BAA4B,EAAM,YAEvD87K,GAAoB,SAAUz8K,GAChC,OAAOA,EAAOW,SAAS,oBAAqB,GAAI,WAE9C+7K,GAAyB,SAAU18K,GACrC,OAAOA,EAAOW,SAAS,0BAA2B,GAAI,WAEpDg8K,GAA6B,SAAU38K,GACzC,OAAOA,EAAOW,SAAS,6BAA6B,EAAO,YAEzDi8K,GAAyB,SAAU58K,GACrC,OAAOA,EAAOW,SAAS,wBAAyB,KAAM,aAEpDk8K,GAA0B,SAAU78K,GACtC,OAAOA,EAAOW,SAAS,oBAAoB,EAAO,YAEhDm8K,GAA4B,SAAU98K,GACxC,OAAOA,EAAOW,SAAS,6BAA8B,+BAAgC,WAEnFE,GAAW,CACby6K,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,SAAU/8K,EAAQiI,GACrC,OAAOgnD,GAAK1H,GAAQN,QAAQh/C,GAAMpH,GAASi8K,0BAA0B98K,KAEnE0xG,GAAQ,SAAU3tG,GACpB,MAA+D,QAAxDg3J,GAAWv6J,IAAIy0C,SAASlxC,EAAS,aAAa,IAAmBo3K,GAAap3K,EAAQS,cAE3Fw4K,GAAoB,SAAUD,EAAgB55G,EAAU5uB,GAC1D,OAAO1lC,EAAOksJ,GAAWv6J,IAAI+S,WAAWghC,EAAIluB,YAAa,IAAK88C,GAAW45G,IAEvEE,GAAiB,SAAUF,EAAgB55G,EAAU5uB,GACvD,IAAIunB,EAAUkhH,GAAkBD,EAAgB55G,EAAU5uB,GAC1D,OAAOl5B,EAAO/U,KAAKw1D,EAAQA,EAAQ74D,OAAS,KAE1Ci6K,GAAqB,SAAU/5G,EAAU2oG,EAAOC,GAClD,IAAIoR,EAAS7R,GAAeQ,EAAO3oG,GAC/Bi6G,EAAS9R,GAAeS,EAAO5oG,GACnC,OAAOg6G,GAAUA,IAAWC,GAE1BC,GAAW,SAAU9oI,GACvB,OAAOisH,GAAejsH,IAAQmsH,GAAcnsH,IAE1C+oI,GAAoB,SAAU98C,EAASjsF,GACzC,IAAKA,EACH,OAAOA,EAET,IAAIluB,EAAYkuB,EAAIluB,YAAaV,EAAS4uB,EAAI5uB,SAC9C,OAAI66G,EACE2/B,GAAuB95I,GACrB88B,GAASj8B,OAAOb,EAAU8B,aACrB29I,GAAgBz/I,EAAU8B,YAAa,GAEvC29I,GAAgBn/J,MAAM0f,GAGxBm6I,GAAejsH,GAAOuxH,GAAgBz/I,EAAWV,EAAS,GAAK4uB,EAGpE4rH,GAAuB95I,GACrB88B,GAASj8B,OAAOb,EAAU08B,iBACrB+iH,GAAgBz/I,EAAU08B,gBAAiB18B,EAAU08B,gBAAgB79C,KAAKjC,QAE1E6iK,GAAgBljK,OAAOyjB,GAGzBq6I,GAAcnsH,GAAOuxH,GAAgBz/I,EAAWV,EAAS,GAAK4uB,GAIvEgpI,GAAoB5kK,EAAM2kK,IAAmB,GAC7CE,GAAqB7kK,EAAM2kK,IAAmB,GAC9CG,GAAc,CAChBV,eAAgBA,GAChBE,eAAgBA,GAChBvrE,MAAOA,GACP2rE,SAAUA,GACVC,kBAAmBA,GACnBC,kBAAmBA,GACnBC,mBAAoBA,GACpBN,mBAAoBA,IAGlBQ,GAAe,SAAUv6G,GAC3B,OAAO,SAAUl7D,GACf,OAAOsR,GAAG4pD,EAAU5b,GAAQN,QAAQh/C,EAAIiE,MAAM7H,eAG9Cs5K,GAAmB,SAAUx6G,EAAUl7D,GACzC,OAAOy+I,GAAWvjF,EAAUl7D,GAAO8vF,GAAQ9vF,GAAK,SAAUlE,GACxD,OAAO4+C,GAAY5+C,IAAYshH,GAAWthH,KACzC25K,GAAav6G,IAAa9nD,EAAOhC,QAElCukK,GAAwB,SAAU59K,GACpC,IAAI2N,EAAO3N,EAAOoU,UACdxI,EAAO+B,EAAKuK,YAAclY,EAAOkM,IAAI02C,QAAQj1C,EAAKuK,YAAcvK,EAAKuK,WAAavK,EACtF3N,EAAO6L,UAAUqc,kBAAkBtc,EAAM,IAEvCiyK,GAAgB,SAAU79K,GACxBA,EAAOkM,IAAI4wC,QAAQ98C,EAAOoU,aAC5BpU,EAAOy8C,WAAW,IAClBmhI,GAAsB59K,KAGtB89K,GAAkC,SAAUt9C,EAASu9C,EAAS91K,GAChE,OAAOu/C,GAAMinH,GAAYC,gBAAgBzmK,GAAMwmK,GAAYE,eAAe1mK,IAAM,SAAU+1K,EAAUC,GAClG,IAAIC,EAAqBT,GAAYH,mBAAkB,EAAMU,GACzDG,EAAoBV,GAAYH,mBAAkB,EAAOW,GACzDG,EAAoBX,GAAYH,mBAAkB,EAAOS,GAC7D,OAAIv9C,EACKiuC,GAAYF,aAAatmK,EAAKm2K,GAAmBx8K,KAAI,SAAUy8K,GACpE,OAAOA,EAAQhc,QAAQ8b,IAAsBJ,EAAQ1b,QAAQ6b,MAC5DnkK,OAAM,GAEF00J,GAAYD,aAAavmK,EAAKm2K,GAAmBx8K,KAAI,SAAU08K,GACpE,OAAOA,EAAQjc,QAAQ6b,IAAuBH,EAAQ1b,QAAQ8b,MAC7DpkK,OAAM,MAEVA,OAAM,IAEPwkK,GAAc,CAChBjT,eAAgBqS,GAChBE,cAAeA,GACfC,gCAAiCA,IAG/Bv6C,GAAa,SAAU9kG,EAAOj1B,EAAU4sF,GAC1C,OAAOgC,GAAW35D,EAAOj1B,EAAU4sF,GAAQt8E,UAGzC0kK,GAA8B,SAAUr7G,EAAUv3D,GACpD,IAAI6yK,EAAcl3H,GAAQN,QAAQkc,GAC9BxM,EAAYpP,GAAQN,QAAQr7C,GAChC,OAAO23H,GAAW5sE,EAAW,WAAYh+C,EAAMY,GAAIklK,KAEjDC,GAAe,SAAUv7G,EAAUv3D,GACrC,OAAOu3C,GAASj8B,OAAOtb,IAAS,eAAezH,KAAKyH,EAAK1G,QAAyD,IAAhDs5K,GAA4Br7G,EAAUv3D,IAEtG+yK,GAAgB,SAAU/yK,GAC5B,OAAOu3C,GAASsM,UAAU7jD,IAA2B,MAAlBA,EAAKtH,UAAoBsH,EAAKouC,aAAa,SAE5E4kI,GAAY,SAAUz7G,EAAUv3D,GAClC,OAAOi2J,GAAiBj2J,KAA0C,IAAjC8yK,GAAav7G,EAAUv3D,IAAmB+yK,GAAc/yK,IAASizK,GAAWjzK,IAE3GizK,GAAa17H,GAASnJ,aAAa,qBACnC8kI,GAAY37H,GAASnJ,aAAa,kBAClC+kI,GAAe57H,GAAS4nG,kBAAkB,iBAAkB,OAC5Di0B,GAAc,SAAU/pH,GAC1B,IAAI/rC,EAAQtd,EAAM0uJ,EAAU,EAC5B,GAAIskB,GAAU3pH,EAAYA,GACxB,OAAO,EAGP,GADArpD,EAAOqpD,EAAW/8C,YACbtM,EACH,OAAO,EAETsd,EAAS,IAAI+/H,GAAWr9I,EAAMqpD,GAC9B,GACE,GAAI8pH,GAAanzK,GACfA,EAAOsd,EAAOC,MAAK,QAGrB,GAAI21J,GAAUlzK,GACZA,EAAOsd,EAAOC,YAGhB,GAAIg6B,GAASZ,KAAK32C,GAChB0uJ,IACA1uJ,EAAOsd,EAAOC,WAFhB,CAKA,GAAIy1J,GAAU3pH,EAAYrpD,GACxB,OAAO,EAETA,EAAOsd,EAAOC,cACPvd,GACT,OAAO0uJ,GAAW,GAGlB2kB,GAAY,SAAUh3K,GACxB,OAAO+2K,GAAY/2K,EAAIiE,QAErBgzK,GAAQ,CAAEpiI,QAASmiI,IAEnBE,GAAgBr3H,GAAU,QAAS,YACnCs3H,GAAgBt3H,GAAU,OAAQ,MAClCu3H,GAAmB,SAAUl8G,EAAU5uB,GACzC,IAAI6yG,EAAU7/F,GAAQN,QAAQkc,GAC1B1iC,EAAe8mB,GAAQN,QAAQ1S,EAAIluB,aACvC,OAAOk4J,GAAYjT,eAAelkB,EAAS3mH,GAAc7+B,KAAI,SAAUynB,GACrE,OAAO81J,GAAc91J,EAAOkrB,OAG5B+qI,GAAoB,SAAUC,GAChC,OAAwE,IAAjEhmK,GAAGgmK,EAAcj5K,OAAO+iB,QAASk2J,EAAc74K,KAAK2iB,UAEzDm2J,GAAgB,SAAUD,GAC5B,OAAOr7K,GAAOq7K,EAAcj5K,OAAO+iB,SAAS5O,MAAK,SAAUglK,GACzD,OAAOv7K,GAAOq7K,EAAc74K,KAAK2iB,SAASxa,QAAO,SAAU6wK,GACzD,OAAOnmK,GAAGkmK,EAASC,SAEpB5lK,UAED6lK,GAAa,SAAUJ,GACzB,OAA+E,IAAxEp8H,GAAS4yB,uBAAuBwpG,EAAcj5K,OAAO+iB,QAAQnd,SAA0F,IAAtEi3C,GAAS4yB,uBAAuBwpG,EAAc74K,KAAK2iB,QAAQnd,QAEjJ0zK,GAAa,SAAUz8G,EAAUq9D,EAASq/C,GAC5C,OAAI18H,GAASZ,KAAKs9H,EAAchoI,WAAW/rC,aAAuD,IAAzCozK,GAAMpiI,QAAQ+iI,EAAcx2J,SAC5EolJ,GAAYH,YAAW,EAAOuR,EAAcx2J,QAAQnd,OAAOuO,MAAK,SAAUqlK,GAC/E,OAAIA,EAAoBzd,QAAQwd,EAAchoI,YACrC42H,GAAYZ,aAAartC,EAASr9D,EAAU28G,GAAqBrlK,MAAK,SAAU/T,GACrF,OAAO24K,GAAiBl8G,EAAUz8D,MAG7B2U,EAAOL,KAAK6kK,MAEpB9lK,MAAM8lK,GAEFA,GAGPE,GAAgB,SAAU58G,EAAUq9D,EAASt6G,GAC/C,IAAI85J,EAAeX,GAAiBl8G,EAAU2iG,GAAgBP,eAAer/I,IACzE+5J,EAAaD,EAAavlK,MAAK,SAAUylK,GAC3C,OAAOzR,GAAYZ,aAAartC,EAASr9D,EAAU+8G,EAASroI,YAAYp9B,MAAK,SAAU/T,GACrF,OAAO24K,GAAiBl8G,EAAUz8D,GAAI9E,KAAI,SAAUs+K,GAClD,OAAON,GAAWz8G,EAAUq9D,EAAS0/C,YAI3C,OAAO14H,GAAMw4H,EAAcC,EAAYb,IAAevwK,QAAO,SAAU0wK,GACrE,OAAOD,GAAkBC,IAAkBC,GAAcD,IAAkBI,GAAWJ,OAGtFY,GAAS,SAAUh9G,EAAUq9D,EAASt6G,GACxC,OAAOA,EAAIE,UAAY25J,GAAc58G,EAAUq9D,EAASt6G,GAAO7K,EAAOhC,QAEpE+mK,GAAqB,CAAEzkI,KAAMwkI,IAE7BE,GAAW,SAAUrkK,GACvB,OAAOA,EAAGxV,MAAM,GAAI,IAElB85K,GAAiB,SAAU77J,EAAO3hB,EAAM2nB,GAC1C,OAAIi8H,GAAW5jJ,EAAM2hB,GACZ47J,GAASvkH,GAAQr3C,GAAO,SAAUxc,GACvC,OAAOwiB,EAAUxiB,IAAQsR,GAAGtR,EAAKnF,OAG5B,IAGPy9K,GAAY,SAAU97J,EAAO3hB,GAC/B,OAAOw9K,GAAe77J,EAAO3hB,EAAMiI,GAAS,KAE1Cy1K,GAAiB,SAAU/7J,EAAO3hB,GACpC,MAAO,CAAC2hB,GAAOzL,OAAOunK,GAAU97J,EAAO3hB,KAErC29K,GAAU,CACZv7B,aAAco7B,GACdxkH,QAASykH,GACTC,eAAgBA,IAGdE,GAAgC,SAAUr3J,GAC5C,IAAIinC,EAAa18C,GAASyV,GAC1B,OAAOsyC,GAAUrL,EAAY1N,IAAShpC,MAAK,WACzC,OAAO02C,KACN,SAAU/pD,GACX,OAAO+pD,EAAW9pD,MAAM,EAAGD,OAG3Bo6K,GAAkB,SAAUt3J,GAC9B,IAAIzV,EAAW8sK,GAA8Br3J,GAE7C,OADAva,EAAK8E,EAAU4hF,IACR5hF,GAELgtK,GAAkB,SAAUz9G,EAAU95C,GACxC,IAAIyyC,EAAU2kH,GAAQD,eAAen3J,EAAO85C,GAC5C,OAAO5zD,EAAKusD,EAAQn0B,UAAWu3I,GAAMpiI,SAAShuC,KAAK0mF,KAEjDqrF,GAAgB,SAAUvuK,GAC5B,OAEc,IAFPzD,EAAO83I,GAAar0I,IAAK,SAAUA,GACxC,OAAQ4sK,GAAMpiI,QAAQxqC,MACrBrP,QAED69K,GAAmB,SAAU39G,EAAU49G,EAAWC,EAASC,GAC7D,GAAI/B,GAAMpiI,QAAQkkI,GAEhB,OADArJ,GAAUL,kBAAkB0J,GACrBvS,GAAYC,gBAAgBsS,EAAQ90K,OAEzC20K,GAAcI,IAAmB/B,GAAMpiI,QAAQikI,IACjDn+K,GAAOq+K,EAAgB15H,GAAQL,QAAQ,OAEzC,IAAIrP,EAAW42H,GAAYD,aAAawS,EAAQ90K,MAAO45J,GAAgBljK,OAAOq+K,EAAe/0K,QAK7F,OAJA4C,EAAK6xK,GAAgBI,IAAY,SAAU7xH,GACzCtsD,GAAOq+K,EAAgB/xH,MAEzB0xH,GAAgBz9G,EAAU49G,GACnBlpI,GAELqpI,GAAqB,SAAU/9G,EAAU49G,EAAWC,GACtD,GAAI9B,GAAMpiI,QAAQkkI,GAKhB,OAJAxrF,GAASwrF,GACL9B,GAAMpiI,QAAQikI,IAChBpJ,GAAUL,kBAAkByJ,GAEvBtS,GAAYC,gBAAgBqS,EAAU70K,OAE/C,IAAI2rC,EAAW42H,GAAYE,eAAeqS,EAAQ90K,OAKlD,OAJA4C,EAAK6xK,GAAgBI,IAAY,SAAU7xH,GACzC9/C,GAAO4xK,EAAS9xH,MAElB0xH,GAAgBz9G,EAAU49G,GACnBlpI,GAELspI,GAAqB,SAAUH,EAAS33J,GAC1C,IAAIm3J,EAAiBC,GAAQD,eAAen3J,EAAO23J,GACnD,OAAO3lK,EAAO/U,KAAKk6K,EAAeA,EAAev9K,OAAS,KAExDm+K,GAAoB,SAAUL,EAAWC,GAC3C,OAAOt6B,GAAWs6B,EAASD,GAAaI,GAAmBH,EAASD,GAAa1lK,EAAOhC,QAEtFgoK,GAAS,SAAU9jF,EAAOl0E,GAC5BolJ,GAAYH,WAAW/wE,EAAOl0E,EAAMnd,OAAOtK,KAAI,SAAUi2C,GACvD,OAAOA,EAAS/rC,aACflK,IAAI2lD,GAAQN,SAASp4C,OAAO0zC,IAAMzzC,KAAK0mF,KAExC8rF,GAAiB,SAAUn+G,EAAU49G,EAAWC,GAGlD,OAFAK,IAAO,EAAMN,GACbM,IAAO,EAAOL,GACPI,GAAkBL,EAAWC,GAASpnK,KAAKjB,EAAMuoK,GAAoB/9G,EAAU49G,EAAWC,GAAUroK,EAAMmoK,GAAkB39G,EAAU49G,EAAWC,KAEtJO,GAAc,SAAUp+G,EAAUq9D,EAAS28C,EAAQC,GACrD,OAAO58C,EAAU8gD,GAAen+G,EAAUi6G,EAAQD,GAAUmE,GAAen+G,EAAUg6G,EAAQC,IAE3FoE,GAAc,CAAED,YAAaA,IAE7BzmH,GAAkB,SAAU96D,EAAQwgI,GACtC,IAAI3oF,EACAsrB,EAAW5b,GAAQN,QAAQjnD,EAAOoU,WAOtC,OANAyjC,EAAWuoI,GAAmBzkI,KAAKwnB,EAASj3D,MAAOs0H,EAASxgI,EAAO6L,UAAUyc,UAAU7N,MAAK,SAAU8kK,GACpG,OAAOiC,GAAYD,YAAYp+G,EAAUq9D,EAAS++C,EAAcj5K,OAAO+iB,QAASk2J,EAAc74K,KAAK2iB,YAErGwuB,EAAS/oC,MAAK,SAAUylC,GACtBv0C,EAAO6L,UAAU0b,OAAOgtB,EAAI8wH,cAEvBxtH,EAAS/9B,UAEd2nK,GAAsB,CAAE3mH,gBAAiBA,IAEzC4mH,GAAyB,SAAUv+G,EAAUt3D,GAC/C,IAAIqa,EAAMra,EAAUyc,SACpB,OAAOk/B,GAAM+2H,GAAYjT,eAAenoG,EAAU5b,GAAQN,QAAQ/gC,EAAII,iBAAkBi4J,GAAYjT,eAAenoG,EAAU5b,GAAQN,QAAQ/gC,EAAIw9B,gBAAgB,SAAUy5H,EAAQC,GACjL,OAA2B,IAAvB7jK,GAAG4jK,EAAQC,KACbl3J,EAAI+xD,iBACJupG,GAAYD,YAAYp+G,GAAU,EAAMg6G,EAAQC,GAAQtuK,MAAK,SAAUylC,GACrE1oC,EAAU0b,OAAOgtB,EAAI8wH,eAEhB,MAIRtrJ,OAAM,IAEP4nK,GAAmB,SAAU7+K,EAAMq0K,GACrC,IAAIvrK,EAAO27C,GAAQN,QAAQkwH,GACvB/gF,EAASz9E,EAAMY,GAAIzW,GACvB,OAAOg1F,GAASlsF,EAAMs+I,GAAa9zD,GAAQt8E,UAEzC8nK,GAAqB,SAAU9+K,EAAMojB,GACvC,OAAOy7J,GAAiB7+K,EAAMojB,EAAII,iBAAmBq7J,GAAiB7+K,EAAMojB,EAAIw9B,eAE9Em+H,GAAuB,SAAU/+K,EAAMojB,GACzC,IAAI47J,EAAarT,GAAYD,aAAa1rK,EAAKoJ,MAAO45J,GAAgBP,eAAer/I,IAAM1M,SACvFuoK,EAAStT,GAAYF,aAAazrK,EAAKoJ,MAAO45J,GAAgBN,aAAat/I,IAAM1M,SACrF,OAAQooK,GAAmB9+K,EAAMojB,IAAQ47J,GAAcC,GAErDC,GAAc,SAAUhiL,GAG1B,OAFAA,EAAOy8C,WAAW,IAClBz8C,EAAO6L,UAAUqc,qBACV,GAEL+5J,GAAc,SAAUjiL,GAC1B,IAAImjE,EAAW5b,GAAQN,QAAQjnD,EAAOoU,WAClC8R,EAAMlmB,EAAO6L,UAAUyc,SAC3B,OAAOu5J,GAAqB1+G,EAAUj9C,GAAO87J,GAAYhiL,GAAU0hL,GAAuBv+G,EAAUnjE,EAAO6L,YAEzGq2K,GAAoB,SAAUliL,EAAQwgI,GACxC,OAAOxgI,EAAO6L,UAAU0C,eAAwB0zK,GAAYjiL,IAE1DmiL,GAAmB,CAAErnH,gBAAiBonH,IAEtCv5E,GAAa,SAAUC,GACzB,IAAK9gF,EAAQ8gF,GACX,MAAM,IAAIzuF,MAAM,0BAElB,GAAqB,IAAjByuF,EAAM3lG,OACR,MAAM,IAAIkX,MAAM,mCAElB,IAAI0uF,EAAe,GACfC,EAAM,GAyDV,OAxDAh6F,EAAK85F,GAAO,SAAUG,EAAOtyF,GAC3B,IAAIiH,EAASX,GAAKgsF,GAClB,GAAsB,IAAlBrrF,EAAOza,OACT,MAAM,IAAIkX,MAAM,kCAElB,IAAI/X,EAAMsb,EAAO,GACbte,EAAQ2pG,EAAM3mG,GAClB,QAAiBkY,IAAbwuF,EAAI1mG,GACN,MAAM,IAAI+X,MAAM,0BAA4B/X,GACvC,GAAY,SAARA,EACT,MAAM,IAAI+X,MAAM,yCACX,IAAK2N,EAAQ1oB,GAClB,MAAM,IAAI+a,MAAM,mCAElB0uF,EAAahiG,KAAKzE,GAClB0mG,EAAI1mG,GAAO,WACT,IAAI4mG,EAAYhmG,UAAUC,OAC1B,GAAI+lG,IAAc5pG,EAAM6D,OACtB,MAAM,IAAIkX,MAAM,qCAAuC/X,EAAM,cAAgBhD,EAAM6D,OAAS,KAAO7D,EAAQ,UAAY4pG,GAGzH,IADA,IAAIpiG,EAAO,IAAIG,MAAMiiG,GACZxlG,EAAI,EAAGA,EAAIoD,EAAK3D,OAAQO,IAC/BoD,EAAKpD,GAAKR,UAAUQ,GAEtB,IAAIrB,EAAQ,SAAU8mG,GACpB,IAAIC,EAAansF,GAAKksF,GACtB,GAAIJ,EAAa5lG,SAAWimG,EAAWjmG,OACrC,MAAM,IAAIkX,MAAM,iDAAmD0uF,EAAavhG,KAAK,KAAO,aAAe4hG,EAAW5hG,KAAK,MAE7H,IAAIgtF,EAAU35E,GAAOkuF,GAAc,SAAUM,GAC3C,OAAO90F,EAAS60F,EAAYC,MAE9B,IAAK7U,EACH,MAAM,IAAIn6E,MAAM,gEAAkE+uF,EAAW5hG,KAAK,MAAQ,eAAiBuhG,EAAavhG,KAAK,OAE/I,OAAO2hG,EAAS7mG,GAAK6E,MAAM,KAAML,IAEnC,MAAO,CACLgT,KAAM,WACJ,GAAI5W,UAAUC,SAAW2lG,EAAM3lG,OAC7B,MAAM,IAAIkX,MAAM,+CAAiDyuF,EAAM3lG,OAAS,SAAWD,UAAUC,QAEvG,IAAIgO,EAASjO,UAAUyT,GACvB,OAAOxF,EAAOhK,MAAM,KAAML,IAE5BzE,MAAOA,EACP06D,IAAK,SAAUjvD,GACb3O,EAAW+nD,QAAQ6V,IAAIjvD,EAAO,CAC5Bi7F,aAAcA,EACdrtF,YAAapZ,EACbgnG,OAAQxiG,UAMXkiG,GAELO,GAAM,CAAE5O,SAAUkO,IAElBy5E,GAAS,SAAU7tI,GACrB,OAAO+3H,GAAuB/3H,GAAK75B,OAAO6nC,KAExC4iF,GAAS,SAAU3E,EAAS19H,EAAMyxC,GACpC,IAAI8tI,EAAexzK,EAAO4xK,GAAQD,eAAej5H,GAAQN,QAAQ1S,EAAIluB,aAAcvjB,GAAO8/C,IACtFnkB,EAAQ9e,GAAK0iK,GAActoK,MAAMjX,GACrC,OAAO2rK,GAAYZ,aAAartC,EAAS/hG,EAAMvyB,MAAOqoC,GAAK1lC,OAAOuzK,KAEhEE,GAAa,SAAUx/K,EAAMyxC,GAC/B,OAAO+3H,GAAuB/3H,GAAK75B,OAAO6nC,KAAS4iF,IAAO,EAAMriI,EAAMyxC,GAAKz6B,UAEzEyoK,GAAY,SAAUz/K,EAAMyxC,GAC9B,OAAOg4H,GAA2Bh4H,GAAK75B,OAAO6nC,KAAS4iF,IAAO,EAAOriI,EAAMyxC,GAAKz6B,UAE9E0oK,GAAiB7pK,EAAMwsH,IAAQ,GAC/Bs9C,GAAa9pK,EAAMwsH,IAAQ,GAE3Bu9C,GAAO,SAAUC,GACnB,OAAO,SAAU/jJ,GACf,OAAO+jJ,IAAa/jJ,IAGpBgkJ,GAASF,GAAK,KACdG,GAAiB,SAAU93J,GAC7B,MAAO,cAAc5mB,KAAK4mB,IAExB+3J,GAAc,SAAU/3J,GAC1B,OAAQ83J,GAAe93J,KAAS63J,GAAO73J,IAGrCg4J,GAAS,SAAUviD,EAAS/1G,EAAW8pB,GACzC,OAAOl5B,EAAO/U,KAAKiuC,EAAIluB,aAAaxX,OAAOs0C,GAASj8B,QAAQxM,QAAO,SAAUjV,GAC3E,IAAImgB,EAAQ46G,EAAU,GAAK,EAC3B,OAAO/1G,EAAUhlB,EAAKP,KAAK0tF,OAAOr+C,EAAI5uB,SAAWC,QAGjDo9J,GAAgBrqK,EAAMoqK,IAAQ,EAAMF,IACpCI,GAAetqK,EAAMoqK,IAAQ,EAAOF,IACpCK,GAAc,SAAU3uI,GAC1B,IAAIluB,EAAYkuB,EAAIluB,YACpB,OAAO88B,GAASj8B,OAAOb,IAAwC,IAA1BA,EAAUnhB,KAAKjC,QAElDkgL,GAA+B,SAAUxX,EAAgB3G,GAC3D,IAAIp5J,EAAO8/J,GAA6BC,EAAgB3G,GACxD,OAAO7hH,GAAS4yB,uBAAuBnqE,KAAUu3C,GAAS8nG,WAAWr/I,IAEnEw3K,GAA+BzqK,EAAMwqK,GAA8B,GACnEE,GAA8B1qK,EAAMwqK,IAA+B,GACnEG,GAAgB,SAAU3X,EAAgB3G,GAC5C,OAAO7hH,GAAS21E,QAAQ4yC,GAA6BC,EAAgB3G,KAEnEue,GAAgB5qK,EAAM2qK,GAAe,GACrCE,GAAe7qK,EAAM2qK,IAAgB,GAErCG,GAAoB,SAAU73K,GAChC,OAAOs+I,GAAY3iG,GAAQN,QAAQr7C,KAAUy5G,GAAW99D,GAAQN,QAAQr7C,KAEtE83K,GAAer6E,GAAI5O,SAAS,CAC9B,CAAEplF,OAAQ,CAAC,YACX,CAAEsuK,cAAe,CAAC,YAClB,CAAEC,eAAgB,CAAC,eAEjBC,GAAgC,SAAUrjD,EAASl6H,GACrD,IAAI2B,EAAM3B,EAAKwF,SAAoB,IAAZ00H,GACnBsjD,EAAgBtjD,EAAU,QAAU,SACxC,OAAOr9E,GAASsM,UAAUxnD,IAAQA,EAAIkQ,aAAa,oBAAsB2rK,GAEvEC,GAAiC,SAAUjhL,EAAM09H,EAASl6H,EAAMI,GAClE,IAAIimK,EAAc,SAAU1kK,GAC1B,OAAOu8G,GAASj9D,GAAQN,QAAQh/C,MAAUsjK,GAAcjlK,EAAMI,EAAI5D,IAEpE,OAAOqpK,IAAmB3rC,EAASl6H,GAAMsT,MAAK,WAC5C,OAAOuyJ,GAAkB3rC,EAAS95H,GAAIkT,KAAK7O,GAAS,GAAQ4hK,KAC3DA,IAEDqX,GAA8B,SAAUlhL,EAAM09H,EAASl6H,EAAMI,GAC/D,IAAIu9K,EAAWv9K,EAAGoF,SAAoB,IAAZ00H,GAC1B,OAAO+9C,GAAYjT,eAAe/jH,GAAQN,QAAQnkD,GAAOykD,GAAQN,QAAQ3gD,EAAKwF,YAAYlK,KAAI,SAAUsiL,GACtG,OAAOhF,GAAMpiI,QAAQonI,GAAYR,GAAaruK,OAAO6uK,EAASh4K,OAASw3K,GAAaC,cAAcM,MACjGzpK,SAAQ,WACT,OAAOa,EAAOL,KAAK0oK,GAAaC,cAAcM,QAG9CE,GAAkB,SAAUrhL,EAAM09H,EAASl6H,GAC7C,OAAOmoK,GAAYZ,aAAartC,EAAS19H,EAAMwD,GAAMmU,MAAK,SAAU/T,GAClE,OAAI+8K,GAAkB/8K,EAAGoF,YAEdi4K,GAA+BjhL,EAAM09H,EAASl6H,EAAMI,GADtD2U,EAAOhC,OAGLmnH,GAAWr9E,GAAS4yB,uBAAuBrvE,EAAGoF,aAElC,IAAZ00H,GAAqBr9E,GAAS4yB,uBAAuBrvE,EAAGoF,SAAQ,IADlEk4K,GAA4BlhL,EAAM09H,EAASl6H,EAAMI,GAG/C85H,GAAW6iD,GAA4B/8K,KAE3B,IAAZk6H,GAAqB4iD,GAA6B98K,GADpD+U,EAAOL,KAAK0oK,GAAaE,eAAel9K,IAIxC2U,EAAOhC,WAIhB+qK,GAAgC,SAAU5jD,EAASv4H,GACrD,OAAIu4H,GAAWr9E,GAAS4yB,uBAAuB9tE,EAAIkgB,aAC1C9M,EAAOL,KAAK0oK,GAAaC,cAAc17K,EAAIkgB,eAC7B,IAAZq4G,GAAqBr9E,GAAS4yB,uBAAuB9tE,EAAI86C,iBAC3D1nC,EAAOL,KAAK0oK,GAAaC,cAAc17K,EAAI86C,kBAE3C1nC,EAAOhC,QAGdgrK,GAAyC,SAAUvhL,EAAMwD,EAAMg+K,GACjE,OAAOA,EAAa1qK,MAAK,SAAU3R,GACjC,OAAOoT,EAAOL,KAAK0oK,GAAaruK,OAAOpN,OACtC,SAAUA,GACX,OAAOoT,EAAOL,KAAK0oK,GAAaC,cAAc17K,OAC7C,SAAUvB,GACX,OAAI6kK,GAAcjlK,EAAMI,EAAI5D,GACnBuY,EAAOhC,OAEPgC,EAAOL,KAAK0oK,GAAaE,eAAel9K,QAIjD69K,GAA2B,SAAUzhL,EAAM09H,EAASl6H,GACtD,OAAIu9K,GAA8BrjD,EAASl6H,GAClC89K,GAA8B5jD,EAASl6H,EAAKwF,SAAoB,IAAZ00H,IAAoB5mH,MAAK,WAClF,OAAOuqK,GAAgBrhL,EAAM09H,EAASl6H,KACrC+U,EAAOL,MAEHmpK,GAAgBrhL,EAAM09H,EAASl6H,GAAMmU,MAAK,SAAU6pK,GACzD,OAAOD,GAAuCvhL,EAAMwD,EAAMg+K,OAI5DE,GAAS,SAAU1hL,EAAM09H,EAASt6G,GACpC,IAAImmJ,EAAkBhpH,GAAem9E,EAAU,GAAK,EAAG19H,EAAMojB,GACzD5f,EAAOw/J,GAAgBP,eAAe8G,GACtCoS,EAAcl3H,GAAQN,QAAQnkD,GAClC,OAAgB,IAAZ09H,GAAqB6iD,GAA4B/8K,GAC5C+U,EAAOL,KAAK0oK,GAAaruK,OAAO/O,EAAKwF,SAAQ,KAC3C00H,GAAW4iD,GAA6B98K,GAC1C+U,EAAOL,KAAK0oK,GAAaruK,OAAO/O,EAAKwF,aACvB,IAAZ00H,GAAqB4iD,GAA6B98K,IAASi8K,GAAU9D,EAAan4K,GACpFk8K,GAAe/D,EAAan4K,GAAM1E,KAAI,SAAUyjI,GACrD,OAAOq+C,GAAaruK,OAAOgwH,EAAGv5H,cAEvB00H,GAAW6iD,GAA4B/8K,IAASg8K,GAAW7D,EAAan4K,GAC1Em8K,GAAWhE,EAAan4K,GAAM1E,KAAI,SAAUyjI,GACjD,OAAOq+C,GAAaruK,OAAOgwH,EAAGv5H,cAGzBy4K,GAAyBzhL,EAAM09H,EAASl6H,IAI/Cm+K,GAA0B,SAAUn6K,GACtC,OAAuC,IAAhC,cAAgBpC,QAAQoC,IAE7Bo6K,GAAmB,SAAUhjL,EAASijL,EAAkBC,GAC1D,IAAIxwJ,EAASwwB,EAAMljD,EAAQ2f,MAAM,KAAK,SAAUwjC,EAAKv6C,GACnD,OAAIm6K,GAAwBn6K,IAAY,MAANA,EAC5Bu6C,EAAIggI,qBAAmC,KAAZhgI,EAAI1+C,KAAcw+K,GAAoB9/H,EAAI1+C,IAAIlD,SAAWvB,EAAQuB,OAAS,GAAK2hL,EACrG,CACLC,qBAAqB,EACrB1+K,IAAK0+C,EAAI1+C,IAAM,KAGV,CACL0+K,qBAAqB,EACrB1+K,IAAK0+C,EAAI1+C,IAAM,KAIZ,CACL0+K,qBAAqB,EACrB1+K,IAAK0+C,EAAI1+C,IAAMmE,KAGlB,CACDu6K,qBAAqB,EACrB1+K,IAAK,KAEP,OAAOiuB,EAAOjuB,KAEZ2+K,GAAc,SAAUl5K,EAAM+Z,EAAQlP,GACxC,GAAc,IAAVA,EAAJ,CAGA,IAAIuhI,EAAapsI,EAAK1G,KAAKsB,MAAMmf,EAAQA,EAASlP,GAC9CmuK,EAAiBj/J,EAASlP,GAAS7K,EAAK1G,KAAKjC,OAC7C0hL,EAA8B,IAAXh/J,EACvB/Z,EAAKm5K,YAAYp/J,EAAQlP,EAAOiuK,GAAiB1sC,EAAY2sC,EAAkBC,MAE7EI,GAA2B,SAAUp5K,EAAM+Z,GAC7C,IAAIjkB,EAAUkK,EAAK1G,KAAKsB,MAAMmf,GAC1Bs/J,EAAkBvjL,EAAQuB,OAAS8iJ,GAAMrkJ,GAASuB,OACtD,OAAO6hL,GAAYl5K,EAAM+Z,EAAQs/J,IAE/BC,GAA4B,SAAUt5K,EAAM+Z,GAC9C,IAAIjkB,EAAUkK,EAAK1G,KAAKsB,MAAM,EAAGmf,GAC7Bs/J,EAAkBvjL,EAAQuB,OAAS+iJ,GAAMtkJ,GAASuB,OACtD,OAAO6hL,GAAYl5K,EAAM+Z,EAASs/J,EAAiBA,IAEjDE,GAAiB,SAAUC,EAAU9X,EAAU+X,GACjD,IAAIC,EAAmBt/B,GAAMo/B,EAASlgL,MAAMjC,OAM5C,OALAmiL,EAAS5V,WAAWlC,EAASpoK,MAC7BswF,GAASjuC,GAAQN,QAAQqmH,IACrB+X,GACFL,GAAyBI,EAAUE,GAE9BF,GAGLG,GAAkB,SAAUhxI,EAAKtsC,GACnC,IAAIoe,EAAYkuB,EAAIluB,YAChBV,EAAS4uB,EAAI5uB,SACjB,OAA+C,IAAxCmgJ,GAAgBH,eAAepxH,IAAkBluB,IAAcpe,EAAI5D,YAAcshB,EAASmgJ,GAAgBljK,OAAOqF,GAAK0d,UAE3H6kJ,GAAa,SAAUviK,EAAKssC,GAC9B,OAAOgxI,GAAgBhxI,EAAKtsC,GAAO69J,GAAgBvxH,EAAIluB,YAAakuB,EAAI5uB,SAAW,GAAK4uB,GAEtFixI,GAAkB,SAAU55K,GAC9B,OAAOu3C,GAASj8B,OAAOtb,GAAQk6J,GAAgBl6J,EAAM,GAAKk6J,GAAgBljK,OAAOgJ,IAE/E65K,GAAe,SAAU75K,GAC3B,OAAOu3C,GAASj8B,OAAOtb,GAAQk6J,GAAgBl6J,EAAMA,EAAK1G,KAAKjC,QAAU6iK,GAAgBn/J,MAAMiF,IAE7F85K,GAAkC,SAAUz9K,GAC9C,OAAI45J,GAAiB55J,EAAI86C,iBAChB1nC,EAAOL,KAAKyqK,GAAax9K,EAAI86C,kBAE7B96C,EAAI86C,gBAAkB0rH,GAAYE,eAAe1mK,EAAI86C,iBAAmB1nC,EAAOhC,QAGtFssK,GAA8B,SAAU19K,GAC1C,OAAI45J,GAAiB55J,EAAIkgB,aAChB9M,EAAOL,KAAKwqK,GAAgBv9K,EAAIkgB,cAEhClgB,EAAIkgB,YAAcsmJ,GAAYC,gBAAgBzmK,EAAIkgB,aAAe9M,EAAOhC,QAG/EusK,GAAoC,SAAUnH,EAAax2K,GAC7D,IAAI49K,EAAgB/f,GAAgBljK,OAAOqF,EAAI86C,gBAAkB96C,EAAI86C,gBAAkB96C,EAAI5D,YAC3F,OAAOoqK,GAAYD,aAAaiQ,EAAaoH,GAAejsK,MAAK,WAC/D,OAAO60J,GAAYF,aAAakQ,EAAa3Y,GAAgBn/J,MAAMsB,MAClEoT,EAAOL,OAER8qK,GAAmC,SAAUrH,EAAax2K,GAC5D,OAAOwmK,GAAYF,aAAakQ,EAAa3Y,GAAgBn/J,MAAMsB,IAAM2R,MAAK,WAC5E,OAAO60J,GAAYD,aAAaiQ,EAAa3Y,GAAgBljK,OAAOqF,MACnEoT,EAAOL,OAER+qK,GAA6B,SAAUtH,EAAax2K,GACtD,OAAOy9K,GAAgCz9K,GAAKuS,SAAQ,WAClD,OAAOmrK,GAA4B19K,MAClCuS,SAAQ,WACT,OAAOorK,GAAkCnH,EAAax2K,OAGtD+9K,GAA2B,SAAUvH,EAAax2K,GACpD,OAAO09K,GAA4B19K,GAAKuS,SAAQ,WAC9C,OAAOkrK,GAAgCz9K,MACtCuS,SAAQ,WACT,OAAOsrK,GAAiCrH,EAAax2K,OAGrDg+K,GAAsB,SAAUzlD,EAASi+C,EAAax2K,GACxD,OAAOu4H,EAAUwlD,GAAyBvH,EAAax2K,GAAO89K,GAA2BtH,EAAax2K,IAEpGi+K,GAAoC,SAAU1lD,EAASi+C,EAAax2K,GACtE,OAAOg+K,GAAoBzlD,EAASi+C,EAAax2K,GAAKrG,IAAI+W,EAAM6xJ,GAAYviK,KAE1Ekf,GAAe,SAAUnnB,EAAQwgI,EAASjsF,GAC5CA,EAAI36B,MAAK,WACP5Z,EAAOkV,WACN,SAAUq/B,GACXv0C,EAAO6L,UAAU0b,OAAOgtB,EAAI8wH,UAAW7kC,OAGvC2lD,GAAY,SAAUhP,GACxB,OAAO,SAAUlvK,GACf,OAAOA,EAAIiE,QAAUirK,IAGrBiP,GAAY,SAAUpmL,EAAQiI,GAChC,OAAOA,GAAOjI,EAAOq8C,OAAOsX,mBAAmBtxD,eAAe+E,GAAKa,KAEjEo+K,GAAiB,SAAUp+K,GAC7B,GAAIi3K,GAAMpiI,QAAQ70C,GAAM,CACtB,IAAIo9H,EAAK99E,GAAQR,SAAS,2BAG1B,OAFA53C,GAAMlH,GACNmH,GAAOnH,EAAKo9H,GACLhqH,EAAOL,KAAK8qJ,GAAgBljK,OAAOyiI,EAAGn5H,QAE7C,OAAOmP,EAAOhC,QAGditK,GAAmB,SAAUr+K,EAAKs+K,EAAmBlB,GACvD,IAAImB,EAAcjwF,GAAYtuF,GAAK4G,OAAOqY,IACtCu/J,EAAct+J,GAAYlgB,GAAK4G,OAAOqY,IAE1C,OADAsuE,GAASvtF,GACFk7J,GAAMqjB,EAAaC,EAAaF,GAAmB,SAAUh0F,EAAMppE,EAAMorB,GAC9E,IAAI6wI,EAAW7yF,EAAKrmF,MAAOohK,EAAWnkJ,EAAKjd,MACvCyZ,EAASy/J,EAASlgL,KAAKjC,OAE3B,OADAkiL,GAAeC,EAAU9X,EAAU+X,GAC5B9wI,EAAIluB,cAAgBinJ,EAAWxH,GAAgBsf,EAAUz/J,GAAU4uB,KACzE/5B,SAAQ,WAST,OARI6qK,IACFmB,EAAY13K,MAAK,SAAU7G,GACzB,OAAOi9K,GAA0Bj9K,EAAIiE,MAAOjE,EAAIiE,MAAMjJ,WAExDwjL,EAAY33K,MAAK,SAAU7G,GACzB,OAAO+8K,GAAyB/8K,EAAIiE,MAAO,OAGxCq6K,MAGPG,GAAkB,SAAU1mL,EAAQ+D,GACtC,OAAOqgB,GAAIpkB,EAAOq8C,OAAOg4G,wBAAyBjtJ,GAAKrD,KAErD4iL,GAAgB,SAAU3mL,EAAQwgI,EAASv4H,EAAK2+K,QAChC,IAAdA,IACFA,GAAY,GAEd,IAAIC,EAAiBX,GAAkC1lD,EAASxgI,EAAOoU,UAAWnM,EAAIiE,OAClFsuD,EAAcs9B,GAAS7vF,EAAK0Q,EAAMytK,GAAWpmL,GAASmmL,GAAUnmL,EAAOoU,YACvE0yK,EAA2BR,GAAiBr+K,EAAK4+K,EAAgBH,GAAgB1mL,EAAQiI,IACzFjI,EAAOkM,IAAI4wC,QAAQ98C,EAAOoU,YAC5BpU,EAAOy8C,WAAW,IAClBz8C,EAAO6L,UAAUqc,qBAEjBsyC,EAAY//C,KAAK4rK,IAAgBzsK,MAAK,WAChCgtK,GACFz/J,GAAannB,EAAQwgI,EAASsmD,MAE/B,SAAUC,GACPH,GACFz/J,GAAannB,EAAQwgI,EAASnlH,EAAOL,KAAK+rK,QAK9CC,GAAgB,CAAEL,cAAeA,IAEjCM,GAAkB,SAAUjnL,EAAQwgI,GACtC,OAAO,SAAUz8H,GAGf,OAFA/D,EAAO46K,oBAAoBsM,gBAC3BF,GAAcL,cAAc3mL,EAAQwgI,EAASj5E,GAAQN,QAAQljD,KACtD,IAGP4/K,GAAgB,SAAU3jL,EAAQwgI,GACpC,OAAO,SAAUz8H,GACf,IAAIwwC,EAAMisF,EAAUslC,GAAgBljK,OAAOmB,GAAW+hK,GAAgBn/J,MAAM5C,GAE5E,OADA/D,EAAO6L,UAAU0b,OAAOgtB,EAAI8wH,YACrB,IAGPue,GAAiB,SAAU5jL,GAC7B,OAAO,SAAUu0C,GAEf,OADAv0C,EAAO6L,UAAU0b,OAAOgtB,EAAI8wH,YACrB,IAGP1qG,GAAuB,SAAU36D,EAAQwgI,GAC3C,IAAIpsG,EAASowJ,GAAOxkL,EAAOoU,UAAWosH,EAASxgI,EAAO6L,UAAUyc,UAAU1mB,KAAI,SAAU0iL,GACtF,OAAOA,EAAa1qK,KAAKqtK,GAAgBjnL,EAAQwgI,GAAUmjD,GAAc3jL,EAAQwgI,GAAUojD,GAAe5jL,OAE5G,OAAOo0B,EAAOra,OAAM,IAElBotK,GAA2B,SAAU1I,GACvC3vK,EAAK8oF,GAAc6mF,EAAa,4BAA6BjpF,KAE3D56B,GAAuB,SAAU56D,EAAQwgI,GAC3C,IAAI4mD,EAAkBpnL,EAAO6L,UAAUC,UACvC,QAAIq3C,GAAS4yB,uBAAuBqxG,KAClCD,GAAyB5/H,GAAQN,QAAQjnD,EAAOoU,YAChD4yK,GAAcL,cAAc3mL,EAAQwgI,EAASj5E,GAAQN,QAAQjnD,EAAO6L,UAAUC,YAC9EyyK,GAAYV,cAAc79K,IACnB,IAKPqnL,GAAyB,SAAUvkL,EAAM8I,GAC3C,MAAOA,GAAQA,IAAS9I,EAAM,CAC5B,GAAIqgD,GAAS2zE,sBAAsBlrH,IAASu3C,GAAS4yB,uBAAuBnqE,GAC1E,OAAOA,EAETA,EAAOA,EAAKvH,WAEd,OAAO,MAELijL,GAAmB,SAAUtnL,GAC/B,IAAIqlI,EACAkiD,EAASF,GAAuBrnL,EAAOoU,UAAWpU,EAAO6L,UAAUC,WAOvE,OANIq3C,GAAS2zE,sBAAsBywD,IAAWvnL,EAAOkM,IAAI02C,QAAQ2kI,IAAWvnL,EAAOkM,IAAI4wC,QAAQyqI,KAC7FliD,EAAKrlI,EAAOkM,IAAIiE,OAAO,KAAM,CAAE,iBAAkB,MACjDnQ,EAAOkM,IAAI8sJ,QAAQuuB,EAAQ,IAC3BA,EAAOh3K,YAAY80H,GACnBrlI,EAAO6L,UAAU0b,OAAOu+I,GAAgBljK,OAAOyiI,GAAIggC,aAE9C,GAELmiB,GAAoB,SAAUxnL,EAAQwgI,GACxC,OAAIxgI,EAAO6L,UAAU0C,cACZosD,GAAqB36D,EAAQwgI,GAE7B5lE,GAAqB56D,EAAQwgI,IAGpCinD,GAAY,CACd3sH,gBAAiB0sH,GACjBF,iBAAkBA,IAGhBI,GAAWvkI,GAASj8B,OACpBygK,GAA6B,SAAU/7K,GACzC,OAAO87K,GAAS97K,IAASA,EAAK1G,KAAK,KAAO66J,GAAKH,MAE7CgoB,GAA2B,SAAUh8K,GACvC,OAAO87K,GAAS97K,IAASA,EAAK1G,KAAK0G,EAAK1G,KAAKjC,OAAS,KAAO88J,GAAKH,MAEhEioB,GAAa,SAAUj8K,GACzB,OAAOA,EAAKm2B,cAAcryB,eAAeqwJ,GAAKH,OAE5CkoB,GAAiB,SAAUl8K,GAC7B,GAAI87K,GAAS97K,EAAKm3C,iBAChB,OAAI6kI,GAAyBh8K,EAAKm3C,kBAGhCn3C,EAAKm3C,gBAAgBysH,WAAWzP,GAAKH,MAF9Bh0J,EAAKm3C,gBAKT,GAAI2kI,GAAS97K,GAClB,OAAI+7K,GAA2B/7K,IAG7BA,EAAK4d,WAAW,EAAGu2I,GAAKH,MAFjBh0J,EAMT,IAAI6d,EAAUo+J,GAAWj8K,GAEzB,OADAA,EAAKvH,WAAW3B,aAAa+mB,EAAS7d,GAC/B6d,GAGPs+J,GAAgB,SAAUn8K,GAC5B,GAAI87K,GAAS97K,EAAKuc,aAChB,OAAIw/J,GAA2B/7K,EAAKuc,cAGlCvc,EAAKuc,YAAYqB,WAAW,EAAGu2I,GAAKH,MAF7Bh0J,EAAKuc,YAKT,GAAIu/J,GAAS97K,GAClB,OAAIg8K,GAAyBh8K,IAG3BA,EAAK4jK,WAAWzP,GAAKH,MAFdh0J,EAMT,IAAI6d,EAAUo+J,GAAWj8K,GAMzB,OALIA,EAAKuc,YACPvc,EAAKvH,WAAW3B,aAAa+mB,EAAS7d,EAAKuc,aAE3Cvc,EAAKvH,WAAWkM,YAAYkZ,GAEvBA,GAGPu+J,GAAiB,SAAUplL,EAAQgJ,GACrC,OAAOhJ,EAASklL,GAAel8K,GAAQm8K,GAAcn8K,IAEnDq8K,GAAqBtvK,EAAMqvK,IAAgB,GAC3CE,GAAoBvvK,EAAMqvK,IAAgB,GAE1CG,GAAkB,SAAU5zI,EAAK3xC,GACnC,OAAIugD,GAASj8B,OAAOqtB,EAAIluB,aACf2hK,GAAeplL,EAAQ2xC,EAAIluB,aAE3B2hK,GAAeplL,EAAQ2xC,EAAIzoC,YAGlCs8K,GAAsB,SAAU7zI,EAAKsxF,GACvC,IAAIwiD,EAAYxiD,EAAMxmI,MACtB,OAAOgpL,GAAa9zI,EAAIluB,cAAgBgiK,GAAaloB,GAAuBkoB,IAE1EC,GAAc,SAAUziD,EAAO3lF,GACjC,OAAOA,EAAStmC,MAAK,SAAU7V,GAC7B0lK,GAAqBp0J,OAAOwwH,EAAMxmI,OAClC,IAAIoG,EAAOwiL,GAAmBlkL,GAE9B,OADA8hI,EAAMvmI,IAAImG,GACH4V,EAAOL,KAAK8qJ,GAAgBrgK,EAAMA,EAAKxC,OAAS,OACtD,SAAUc,GACX,OAAO0qK,GAAYC,gBAAgB3qK,GAASnC,KAAI,SAAU2yC,GACxD,GAAK6zI,GAAoB7zI,EAAKsxF,GAM5B,OAAOigC,GAAgBjgC,EAAMxmI,MAAO,GALpCoqK,GAAqBp0J,OAAOwwH,EAAMxmI,OAClC,IAAIoG,EAAO0iL,GAAgB5zI,GAAK,GAEhC,OADAsxF,EAAMvmI,IAAImG,GACHqgK,GAAgBrgK,EAAM,SAKhC,SAAU1B,GACX,OAAO0qK,GAAYE,eAAe5qK,GAASnC,KAAI,SAAU2yC,GACvD,GAAK6zI,GAAoB7zI,EAAKsxF,GAM5B,OAAOigC,GAAgBjgC,EAAMxmI,MAAOwmI,EAAMxmI,MAAM4D,OAAS,GALzDwmK,GAAqBp0J,OAAOwwH,EAAMxmI,OAClC,IAAIoG,EAAO0iL,GAAgB5zI,GAAK,GAEhC,OADAsxF,EAAMvmI,IAAImG,GACHqgK,GAAgBrgK,EAAMA,EAAKxC,OAAS,SAK9C,SAAUc,GACX0lK,GAAqBp0J,OAAOwwH,EAAMxmI,OAClC,IAAIoG,EAAOyiL,GAAkBnkL,GAE7B,OADA8hI,EAAMvmI,IAAImG,GACH4V,EAAOL,KAAK8qJ,GAAgBrgK,EAAM,QAGzC8iL,GAAgB,CAAED,YAAaA,IAE/BE,GAAgB,SAAUC,EAAK7hL,GACjC,IAAK,IAAIpD,EAAI,EAAGA,EAAIilL,EAAIxlL,OAAQO,IAAK,CACnC,IAAI4wB,EAASq0J,EAAIjlL,GAAGyD,MAAM,KAAML,GAChC,GAAIwtB,EAAOta,SACT,OAAOsa,EAGX,OAAO/Y,EAAOhC,QAEZqvK,GAAgB,CAAEF,cAAeA,IAEjCG,GAAWt/E,GAAI5O,SAAS,CAC1B,CAAE73F,OAAQ,CAAC,YACX,CAAE6hB,MAAO,CAAC,YACV,CAAEY,IAAK,CAAC,YACR,CAAE1e,MAAO,CAAC,cAERiiL,GAAU,SAAUzlH,EAAUv3D,GAChC,IAAI4uD,EAAc8wG,GAAe1/J,EAAMu3D,GACvC,OAAO3I,GAA4B2I,GAEjC2/D,GAAW,SAAUi6C,EAAgB55G,EAAU5uB,GACjD,IAAIs0I,EAAOpL,GAAYF,kBAAkBhpI,GACrC9V,EAAQmqJ,GAAQzlH,EAAU0lH,EAAKxiK,aACnC,OAAOo3J,GAAYR,eAAeF,EAAgBt+I,EAAOoqJ,GAAMjvK,MAAK,WAClE,OAAO60J,GAAYF,aAAa9vI,EAAOoqJ,GAAMpuK,KAAK9B,EAAM8kK,GAAYR,eAAgBF,EAAgBt+I,IAAQ78B,KAAI,SAAUsO,GACxH,OAAOy4K,GAAS/lL,OAAOsN,QAExBmL,EAAOhC,OAERyvK,GAAkC,SAAU3lH,EAAUl7D,GACxD,OAAkD,OAA3CwgK,GAAwBtlG,EAAUl7D,IAEvC8gL,GAAuB,SAAUhM,EAAgB55G,EAAU5uB,GAC7D,OAAOkpI,GAAYR,eAAeF,EAAgB55G,EAAU5uB,GAAK1lC,OAAO8J,EAAMmwK,GAAiC3lH,KAE7G1+C,GAAQ,SAAUs4J,EAAgB55G,EAAU5uB,GAC9C,IAAIs0I,EAAOpL,GAAYD,mBAAmBjpI,GAC1C,OAAOw0I,GAAqBhM,EAAgB55G,EAAU0lH,GAAMpuK,MAAK,SAAUvK,GACzE,IAAIouK,EAAU7P,GAAYD,aAAat+J,EAAQ24K,GAC/C,OAAOvK,EAAQ9kK,SAAW6B,EAAOL,KAAK2tK,GAASlkK,MAAMvU,IAAWmL,EAAOhC,WAGvEgM,GAAM,SAAU03J,EAAgB55G,EAAU5uB,GAC5C,IAAIs0I,EAAOpL,GAAYF,kBAAkBhpI,GACzC,OAAOw0I,GAAqBhM,EAAgB55G,EAAU0lH,GAAMpuK,MAAK,SAAUvK,GACzE,IAAImuK,EAAU5P,GAAYF,aAAar+J,EAAQ24K,GAC/C,OAAOxK,EAAQ7kK,SAAW6B,EAAOL,KAAK2tK,GAAStjK,IAAInV,IAAWmL,EAAOhC,WAGrEihH,GAAU,SAAUyiD,EAAgB55G,EAAU5uB,GAChD,IAAIs0I,EAAOpL,GAAYD,mBAAmBjpI,GACtC9V,EAAQmqJ,GAAQzlH,EAAU0lH,EAAKxiK,aACnC,OAAOo3J,GAAYR,eAAeF,EAAgBt+I,EAAOoqJ,GAAMjvK,MAAK,WAClE,OAAO60J,GAAYD,aAAa/vI,EAAOoqJ,GAAMpuK,KAAK9B,EAAM8kK,GAAYR,eAAgBF,EAAgBt+I,IAAQ78B,KAAI,SAAUsO,GACxH,OAAOy4K,GAAShiL,MAAMuJ,QAEvBmL,EAAOhC,OAER2vK,GAAkB,SAAU9oI,GAC9B,OAAmD,IAA5Cu9H,GAAY/rE,MAAMu3E,GAAW/oI,KAElCgpI,GAAe,SAAUnM,EAAgB55G,EAAU5uB,GACrD,IAAI2L,EAAWwoI,GAAcF,cAAc,CACzC1lD,GACAr+G,GACAY,GACAi1G,IACC,CACDyiD,EACA55G,EACA5uB,IAEF,OAAO2L,EAASrxC,OAAOm6K,KAErBC,GAAa,SAAU/oI,GACzB,OAAOA,EAAStmC,KAAK4b,EAAUA,EAAUA,EAAUA,IAEjD2zJ,GAAU,SAAUjpI,GACtB,OAAOA,EAAStmC,KAAK7O,EAAS,UAAWA,EAAS,SAAUA,EAAS,OAAQA,EAAS,WAEpFq+K,GAAU,SAAUlpI,GACtB,OAAOA,EAAStmC,KAAK+uK,GAAS/lL,OAAQ+lL,GAAS/lL,OAAQ+lL,GAAShiL,MAAOgiL,GAAShiL,QAE9EhE,GAAS,SAAUu9C,GACrB,OAAOA,EAAStmC,KAAK+uK,GAASlkK,MAAOkkK,GAASlkK,MAAOkkK,GAAStjK,IAAKsjK,GAAStjK,MAE1EgkK,GAAS,SAAUC,EAAWC,GAChC,OAAOJ,GAAQG,KAAeH,GAAQI,IAAcN,GAAWK,KAAeL,GAAWM,IAEvFC,GAAiB,SAAUhpD,EAASu8C,EAAgB55G,EAAU78D,EAAMI,EAAIw5C,GAC1E,OAAOsH,GAAMi2H,GAAYR,eAAeF,EAAgB55G,EAAU78D,GAAOm3K,GAAYR,eAAeF,EAAgB55G,EAAUz8D,IAAK,SAAU+iL,EAAYC,GACvJ,OAAID,IAAeC,GAAYjM,GAAYP,mBAAmB/5G,EAAUsmH,EAAYC,GAC3Ef,GAAShiL,MAAM65H,EAAUipD,EAAaC,GAEtCxpI,KAERnmC,MAAMmmC,IAEPypI,GAAiB,SAAUC,EAAcC,GAC3C,OAAOD,EAAahwK,KAAK7O,GAAS,IAAO,SAAU6+K,GACjD,OAAQP,GAAOO,EAAcC,OAG7BC,GAAuB,SAAUtpD,EAASu8C,EAAgB55G,EAAUymH,EAAcr1I,GACpF,IAAIjuC,EAAOm3K,GAAYH,kBAAkB98C,EAASjsF,GAC9C7tC,EAAK+nK,GAAYZ,aAAartC,EAASr9D,EAAU78D,GAAM1E,IAAI+W,EAAM8kK,GAAYH,kBAAmB98C,IAChGtgF,EAAWx5C,EAAGkT,MAAK,WACrB,OAAOgwK,EAAahoL,IAAIwnL,OACvB,SAAU1iL,GACX,OAAOwiL,GAAanM,EAAgB55G,EAAUz8D,GAAI9E,IAAI+W,EAAM6wK,GAAgBhpD,EAASu8C,EAAgB55G,EAAU78D,EAAMI,IAAKmI,OAAO8J,EAAMgxK,GAAgBC,OAEzJ,OAAO1pI,EAASrxC,OAAOm6K,KAErBe,GAAqB,SAAUvpD,EAAStgF,GAC1C,OAAIsgF,EACKtgF,EAAStmC,KAAKm5E,EAAQ13E,EAAOL,KAAM2tK,GAASlkK,OAAQpJ,EAAOhC,KAAM05E,EAAQ13E,EAAOL,KAAM2tK,GAAShiL,OAAQ0U,EAAOhC,MAE9G6mC,EAAStmC,KAAKyB,EAAOhC,KAAM05E,EAAQ13E,EAAOL,KAAM2tK,GAAS/lL,QAASyY,EAAOhC,KAAM05E,EAAQ13E,EAAOL,KAAM2tK,GAAStjK,OAGpH2kK,GAAe,SAAUxpD,EAASu8C,EAAgB55G,EAAU5uB,GAC9D,IAAIjuC,EAAOm3K,GAAYH,kBAAkB98C,EAASjsF,GAC9Cq1I,EAAeV,GAAanM,EAAgB55G,EAAU78D,GAC1D,OAAO4iL,GAAanM,EAAgB55G,EAAU78D,GAAMmU,KAAK9B,EAAMoxK,GAAoBvpD,IAAUhmH,SAAQ,WACnG,OAAOsvK,GAAqBtpD,EAASu8C,EAAgB55G,EAAUymH,EAAcr1I,OAG7E01I,GAAmB,CACrBf,aAAcA,GACdc,aAAcA,GACdE,aAAcvxK,EAAMqxK,IAAc,GAClCG,aAAcxxK,EAAMqxK,IAAc,GAClCf,WAAYA,GACZG,QAASA,GACTzmL,OAAQA,IAGNynL,GAAwB,SAAUpqL,GACpC,OAAO2b,EAAW3b,EAAO6L,UAAUw+K,SAASC,SAE1CC,GAAU,SAAU/pD,EAAS30H,EAAW0oC,GAC1C,IAAI3uB,EAAQ46G,EAAU,GAAK,EAG3B,OAFA30H,EAAU0b,OAAOu+I,GAAgBvxH,EAAIluB,YAAakuB,EAAI5uB,SAAWC,GAAOy/I,WACxEx5J,EAAUw+K,SAASC,OAAO,OAAQ9pD,EAAU,UAAY,WAAY,SAC7D,GAELgqD,GAAa,SAAUhqD,EAASxgI,GAClC,IAAIkmB,EAAMlmB,EAAO6L,UAAUyc,SACvBisB,EAAMisF,EAAUslC,GAAgBN,aAAat/I,GAAO4/I,GAAgBP,eAAer/I,GACvF,QAAKkkK,GAAsBpqL,KAEhBwgI,GAAWggC,GAAejsH,GAC5Bg2I,IAAQ,EAAMvqL,EAAO6L,UAAW0oC,KAC7BisF,IAAWkgC,GAAcnsH,KAC5Bg2I,IAAQ,EAAOvqL,EAAO6L,UAAW0oC,KAKxCk2I,GAAgB,CAClBL,sBAAuBA,GACvBI,WAAYA,IAGVE,GAAmB,SAAU1qL,EAAQu0C,GACvC,IAAIruB,EAAMlmB,EAAOkM,IAAIob,YACrBpB,EAAIW,SAAS0tB,EAAIluB,YAAakuB,EAAI5uB,UAClCO,EAAIY,OAAOytB,EAAIluB,YAAakuB,EAAI5uB,UAChC3lB,EAAO6L,UAAU0b,OAAOrB,IAEtBykK,GAAmB,SAAU3qL,GAC/B,OAA6C,IAAtCA,EAAOC,SAAS2qL,mBAErBC,GAAc,SAAUprJ,EAAOx3B,GAC7Bw3B,EACFx3B,EAAIgP,aAAa,oBAAqB,mBAEtChP,EAAI6iC,gBAAgB,sBAGpBggJ,GAAsB,SAAU9qL,EAAQ6lI,EAAO3lF,GACjD,OAAOqoI,GAAcD,YAAYziD,EAAO3lF,GAAUt+C,KAAI,SAAU2yC,GAE9D,OADAm2I,GAAiB1qL,EAAQu0C,GAClB2L,MAGP6qI,GAAiB,SAAU/qL,EAAQ6lI,EAAOrF,GAC5C,IAAIr9D,EAAWnjE,EAAOoU,UAClB9N,EAAOw/J,GAAgBP,eAAevlK,EAAO6L,UAAUyc,UACvDy0J,EAAiBpkK,EAAM8kK,GAAYV,eAAgB/8K,GACnDkgD,EAAW+pI,GAAiBD,aAAaxpD,EAASu8C,EAAgB55G,EAAU78D,GAChF,OAAO45C,EAASzlC,MAAK,SAAUylC,GAC7B,OAAO4qI,GAAoB9qL,EAAQ6lI,EAAO3lF,OAG1C8qI,GAAgB,SAAUjO,EAAgB7wK,EAAKy5C,GACjD,IAAIslI,EAAkBp8K,EAAO3C,EAAIE,OAAO,0CAA2C2wK,GAC/EmO,EAAgBr8K,EAAO82C,EAAMo3H,GACjCjuK,EAAKsiI,GAAW65C,EAAiBC,GAAgBvyK,EAAMkyK,IAAa,IACpE/7K,EAAKsiI,GAAW85C,EAAeD,GAAkBtyK,EAAMkyK,IAAa,KAElEM,GAA2B,SAAUnrL,EAAQ6lI,GAC/C,GAAI7lI,EAAO6L,UAAU0C,gBAAsC,IAArBvO,EAAOorL,WAAsBvlD,EAAMxmI,MAAO,CAC9E,IAAIk1C,EAAMuxH,GAAgBP,eAAevlK,EAAO6L,UAAUyc,UACtDw9I,GAAgBH,eAAepxH,KAAsC,IAA9BkpI,GAAYJ,SAAS9oI,KAC9Dm2I,GAAiB1qL,EAAQypK,GAAqBF,oBAAoB1jC,EAAMxmI,MAAOk1C,IAC/EsxF,EAAMvmI,IAAI,SAIZ+rL,GAA0B,SAAUtO,EAAgB/8K,EAAQ6lI,EAAOlgF,GACrE,GAAI3lD,EAAO6L,UAAU0C,cAAe,CAClC,IAAI+8K,EAAUz8K,EAAO82C,EAAMo3H,GAC3BjuK,EAAKw8K,GAAS,SAAUp7K,GACtB,IAAIqkC,EAAMuxH,GAAgBP,eAAevlK,EAAO6L,UAAUyc,UAC1D2hK,GAAiBf,aAAanM,EAAgB/8K,EAAOoU,UAAWmgC,GAAK95B,MAAK,SAAUylC,GAClF,OAAO4qI,GAAoB9qL,EAAQ6lI,EAAO3lF,WAK9C40E,GAAO,SAAU90H,EAAQ6lI,EAAOrF,GAClC,OAAO,WACL,QAAOmqD,GAAiB3qL,IAAU+qL,GAAe/qL,EAAQ6lI,EAAOrF,GAAS1mH,WAGzEyxK,GAAW,SAAU/qD,EAASxgI,EAAQ6lI,GACxC,OAAO,WACL,QAAO8kD,GAAiB3qL,IAAUyqL,GAAcD,WAAWhqD,EAASxgI,KAGpEwrL,GAAqB,SAAUxrL,GACjC,IAAI6lI,EAAQ3mI,GAAK,MACb69K,EAAiBpkK,EAAM8kK,GAAYV,eAAgB/8K,GAQvD,OAPAA,EAAO4O,GAAG,cAAc,SAAUR,GAC5Bu8K,GAAiB3qL,KACnBgrL,GAAcjO,EAAgB/8K,EAAOkM,IAAKkC,EAAE0tD,SAC5CqvH,GAAyBnrL,EAAQ6lI,GACjCwlD,GAAwBtO,EAAgB/8K,EAAQ6lI,EAAOz3H,EAAE0tD,aAGtD+pE,GAEL4lD,GAAe9yK,EAAM4yK,IAAU,GAC/BG,GAAe/yK,EAAM4yK,IAAU,GAC/BI,GAAoB,CACtB72D,KAAMA,GACN22D,aAAcA,GACdC,aAAcA,GACdF,mBAAoBA,GACpBd,iBAAkBA,IAGhBkB,GAAqB,SAAU5rL,GACjC,OAA6C,IAAtCA,EAAOC,SAAS2qL,mBAErBiB,GAAqB,SAAUvlL,EAAMI,GACvC,IAAIgqE,EAAQzxE,EAAW4E,SAAS+iB,cAGhC,OAFA8pD,EAAM7pD,SAASvgB,EAAK+f,YAAa/f,EAAKqf,UACtC+qD,EAAM5pD,OAAOpgB,EAAG2f,YAAa3f,EAAGif,UACzB+qD,GAELo7G,GAAgC,SAAU7jL,GAC5C,OAAOu/C,GAAMinH,GAAYC,gBAAgBzmK,GAAMwmK,GAAYE,eAAe1mK,IAAM,SAAU+1K,EAAUC,GAClG,IAAIC,EAAqBT,GAAYH,mBAAkB,EAAMU,GACzDG,EAAoBV,GAAYH,mBAAkB,EAAOW,GAC7D,OAAOxP,GAAYF,aAAatmK,EAAKi2K,GAAoBt8K,KAAI,SAAU2yC,GACrE,OAAOA,EAAI8tH,QAAQ8b,MAClBpkK,OAAM,MACRA,OAAM,IAEPgyK,GAAmB,SAAU/rL,EAAQ6lI,GACvC,OAAO,SAAU3lF,GACf,OAAOqoI,GAAcD,YAAYziD,EAAO3lF,GAAUt+C,KAAI,SAAU2yC,GAE9D,OADAo3I,GAAkBjB,iBAAiB1qL,EAAQu0C,IACpC,KACNx6B,OAAM,KAGTiyK,GAAe,SAAUhsL,EAAQ6lI,EAAOv/H,EAAMI,GAChD,IAAIy8D,EAAWnjE,EAAOoU,UAClB2oK,EAAiBpkK,EAAM8kK,GAAYV,eAAgB/8K,GACvDA,EAAOgM,YAAYmmG,QAAO,WACxBnyG,EAAO6L,UAAU0b,OAAOskK,GAAmBvlL,EAAMI,IACjD1G,EAAOoX,YAAY,UACnB6yK,GAAiBf,aAAanM,EAAgB55G,EAAU2iG,GAAgBP,eAAevlK,EAAO6L,UAAUyc,WAAW1mB,IAAIqoL,GAAiBtnL,QAAQf,IAAImqL,GAAiB/rL,EAAQ6lI,OAE/K7lI,EAAOmV,eAEL82K,GAAY,SAAU9oH,EAAUv3D,GAClC,IAAI4uD,EAAc8wG,GAAe1/J,EAAMu3D,GACvC,OAAO3I,GAA4B2I,GAEjC+oH,GAA2B,SAAUlsL,EAAQ6lI,EAAOrF,EAASl6H,GAC/D,IAAI68D,EAAW8oH,GAAUjsL,EAAOoU,UAAW9N,EAAK+f,aAC5C02J,EAAiBpkK,EAAM8kK,GAAYV,eAAgB/8K,GACnD4pL,EAAeK,GAAiBf,aAAanM,EAAgB55G,EAAU78D,GAC3E,OAAOsjL,EAAanvK,MAAK,SAAUylC,GACjC,OAAIsgF,EACKtgF,EAAStmC,KAAK7O,EAASsQ,EAAOL,KAAKivK,GAAiBtnL,OAAOu9C,KAAa7kC,EAAOhC,KAAMtO,EAASsQ,EAAOL,KAAKivK,GAAiBb,QAAQlpI,KAAa7kC,EAAOhC,MAEvJ6mC,EAAStmC,KAAKyB,EAAOhC,KAAMtO,EAASsQ,EAAOL,KAAKivK,GAAiBb,QAAQlpI,KAAa7kC,EAAOhC,KAAMtO,EAASsQ,EAAOL,KAAKivK,GAAiBtnL,OAAOu9C,SAExJt+C,IAAImqL,GAAiB/rL,EAAQ6lI,IAAQ7rH,YAAW,WACjD,IAAImyK,EAAa1d,GAAY9kC,SAASnJ,EAASr9D,EAAU78D,GACrDujL,EAAasC,EAAW1xK,MAAK,SAAU85B,GACzC,OAAO01I,GAAiBf,aAAanM,EAAgB55G,EAAU5uB,MAEjE,OAAIq1I,EAAa9vK,UAAY+vK,EAAW/vK,SAC/B2jK,GAAYR,eAAeF,EAAgB55G,EAAU78D,GAAM1E,KAAI,SAAUqG,GAC9E,QAAI6jL,GAA8B7jL,KAChC++K,GAAcL,cAAc3mL,EAAQwgI,EAASj5E,GAAQN,QAAQh/C,KACtD,MAIR8R,OAAM,GAEF8vK,EAAWpvK,MAAK,SAAUpZ,GAC/B,OAAO8qL,EAAWvqL,KAAI,SAAU8E,GAM9B,OALI85H,EACFwrD,GAAahsL,EAAQ6lI,EAAOv/H,EAAMI,GAElCslL,GAAahsL,EAAQ6lI,EAAOn/H,EAAIJ,IAE3B,QAERyT,OAAM,OAIXqyK,GAAoB,SAAUpsL,EAAQ6lI,EAAOrF,GAC/C,GAAIxgI,EAAO6L,UAAU0C,eAAiBq9K,GAAmB5rL,GAAS,CAChE,IAAIsG,EAAOw/J,GAAgBP,eAAevlK,EAAO6L,UAAUyc,UAC3D,OAAO4jK,GAAyBlsL,EAAQ6lI,EAAOrF,EAASl6H,GAE1D,OAAO,GAEL+lL,GAAuB,CAAEvxH,gBAAiBsxH,IAE1CE,GAAexkI,GAAU,QAAS,OAClCykI,GAAiBzkI,GAAU,MAAO,QAAS,SAC3Cw8H,GAAej7E,GAAI5O,SAAS,CAC9B,CAAE+xF,YAAa,CAAC,YAChB,CAAEC,WAAY,CAAC,YAEbC,GAAoB,SAAU5pL,GAChC,OAAO6V,EAAMY,GAAIzW,IAEf6pL,GAAiB,SAAUtmK,EAAW+vE,GACxC,OAAOmC,GAAUhxC,GAAQN,QAAQ5gC,GAAY,QAAS+vE,IAEpDw2F,GAAkB,SAAU/zF,EAAMzC,GACpC,OAAOgC,GAAWS,EAAM,QAASzC,IAE/By2F,GAAoB,SAAUC,GAChC,OAA8C,IAAvCvzK,GAAGuzK,EAAQroK,QAASqoK,EAAQznK,QAEjC0nK,GAAsB,SAAUD,EAAS12F,GAC3C,OAAOw2F,GAAgBE,EAAQroK,QAAS2xE,GAAQ37E,MAAK,SAAUuyK,GAC7D,OAAOJ,GAAgBE,EAAQznK,MAAO+wE,GAAQ37E,MAAK,SAAUwyK,GAC3D,OAAO1zK,GAAGyzK,EAAkBC,GAAkB5xK,EAAOL,KAAKgyK,GAAoB3xK,EAAOhC,cAIvF6zK,GAAgB,SAAU9zF,GAC5B,OAAOxB,GAAcwB,EAAO,UAE1B+zF,GAA6B,SAAUL,EAAS12F,GAClD,OAAOw2F,GAAgBE,EAAQroK,QAAS2xE,GAAQ37E,MAAK,SAAU2+E,GAC7D,OAAO9iF,GAAK42K,GAAc9zF,IAAQx3F,KAAI,SAAUwrL,GAC9C,OAAOd,GAAaQ,EAAQroK,QAAS2oK,UAIvCC,GAAmB,SAAUj3F,EAAQlwE,GACvC,IAAI45E,EAAY6sF,GAAezmK,EAAII,eAAgB8vE,GAC/Cg3F,EAAUT,GAAezmK,EAAIw9B,aAAc0yC,GAC/C,OAAOlwE,EAAIE,UAAY/K,EAAOhC,OAASmuC,GAAMs4C,EAAWstF,EAASd,IAAc1yK,MAAK,WAClF,OAAOkmF,EAAUlmF,MAAK,WACpB,OAAOwzK,EAAQ3yK,MAAK,SAAU2yK,GAC5B,OAAOR,GAAgBQ,EAASh3F,GAAQ37E,MAAK,SAAU2+E,GACrD,OAAOz5E,GAAKutK,GAAc9zF,IAAQx3F,KAAI,SAAUk+F,GAC9C,OAAOwsF,GAAaxsF,EAAWstF,eAIpC,SAAUttF,GACX,OAAO8sF,GAAgB9sF,EAAW1J,GAAQ37E,MAAK,SAAU2+E,GACvD,OAAO9iF,GAAK42K,GAAc9zF,IAAQx3F,KAAI,SAAUwrL,GAC9C,OAAOd,GAAaxsF,EAAWstF,eAIpC,SAAUN,GACX,OAAOQ,GAAkBl3F,EAAQ02F,GAAWzxK,EAAOhC,OAAS8zK,GAA2BL,EAAS12F,OAGhGk3F,GAAoB,SAAUl3F,EAAQ02F,GACxC,OAAOC,GAAoBD,EAAS12F,GAAQt8E,UAE1CyzK,GAAa,SAAUrnK,EAAKkwE,GAC9B,IAAI0J,EAAY6sF,GAAezmK,EAAII,eAAgB8vE,GAC/Cg3F,EAAUT,GAAezmK,EAAIw9B,aAAc0yC,GAC/C,OAAO5uC,GAAMs4C,EAAWstF,EAASd,IAAcz9K,OAAOg+K,IAAmBh+K,QAAO,SAAUi+K,GACxF,OAAOQ,GAAkBl3F,EAAQ02F,MAChCtyK,SAAQ,WACT,OAAO6yK,GAAiBj3F,EAAQlwE,OAGhCsnK,GAA+B,SAAUV,EAAS12F,GACpD,OAAO22F,GAAoBD,EAAS12F,GAAQx0F,KAAI,SAAUw3F,GACxD,OAAOmzF,GAAeO,EAAS1zF,EAAO8zF,GAAc9zF,QAGpDq0F,GAA2B,SAAU3qL,EAAMojB,GAC7C,IAAIkwE,EAASs2F,GAAkB5pL,GAC/B,OAAOyqL,GAAWrnK,EAAKkwE,GAAQ37E,MAAK,SAAUqyK,GAC5C,OAAOU,GAA6BV,EAAS12F,OAG7Cs3F,GAAe,SAAU50F,EAAOD,GAClC,OAAOl9B,GAAUm9B,GAAO,SAAUviF,GAChC,OAAOgD,GAAGhD,EAAGsiF,OAGb80F,GAAmB,SAAUpB,GAC/B,OAAO/kI,GAAMkmI,GAAanB,EAAezzF,QAASyzF,EAAermK,MAAMzB,SAAUipK,GAAanB,EAAezzF,QAASyzF,EAAermK,MAAMb,QAAQ,SAAUo/E,EAAYC,GACvK,OAAO6nF,EAAezzF,QAAQtyF,MAAMi+F,EAAYC,EAAW,OAG3DkpF,GAAY,SAAUrB,GACxB,OAAOoB,GAAiBpB,GAAgB3qL,KAAI,SAAU4xC,GACpD,IAAIslD,EAAQyzF,EAAezzF,QAC3B,OAAOtlD,EAASvwC,SAAW61F,EAAM71F,OAASqhL,GAAakI,YAAYD,EAAenzF,SAAWkrF,GAAamI,WAAWj5I,OAGrHq6I,GAAqB,SAAU/0F,GACjC,OAAOwrF,GAAamI,WAAW3zF,IAE7Bg1F,GAAqB,SAAUhrL,EAAMojB,GACvC,OAAOunK,GAAyB3qL,EAAMojB,GAAKzL,KAAKmzK,KAE9CG,GAAoB,CACtBD,mBAAoBA,GACpBD,mBAAoBA,IAGlB7xD,GAAY,SAAUnwH,GACxB,IAAIqwH,EAAS,GACb,GAAIrwH,EACF,IAAK,IAAIrI,EAAI,EAAGA,EAAIqI,EAAU8zH,WAAYn8H,IACxC04H,EAAOr1H,KAAKgF,EAAUg0H,WAAWr8H,IAGrC,OAAO04H,GAEL8xD,GAAmB,SAAU9xD,GAC/B,OAAOzhH,GAAKyhH,GAAQ,SAAUxrD,GAC5B,IAAI9kE,EAAOo3J,GAAgBtyF,GAC3B,OAAO9kE,EAAO,CAAC27C,GAAQN,QAAQr7C,IAAS,OAGxCqiL,GAAoB,SAAUpiL,GAChC,OAAOmwH,GAAUnwH,GAAW5I,OAAS,GAEnCirL,GAAa,CACflyD,UAAWA,GACXgyD,iBAAkBA,GAClBC,kBAAmBA,IAGjBE,GAAqB,SAAUjyD,GACjC,OAAOrtH,EAAOq/K,GAAWF,iBAAiB9xD,GAASguB,KAEjDkkC,GAAsB,SAAUnmL,GAClC,IAAImjH,EAAgBxzB,GAAc3vF,EAAK,+CACvC,OAAOmjH,GAELijE,GAA8B,SAAUnyD,EAAQn4H,GAClD,IAAIqnH,EAAgBgjE,GAAoBrqL,GACpCuqL,EAAaH,GAAmBjyD,GACpC,OAAO9Q,EAAcnoH,OAAS,EAAImoH,EAAgBkjE,GAEhDC,GAAqB,SAAUvuL,GACjC,OAAOquL,GAA4BH,GAAWlyD,UAAUh8H,EAAO6L,UAAUw+K,UAAW9iI,GAAQN,QAAQjnD,EAAOoU,aAEzGo6K,GAAqB,CACvBL,mBAAoBA,GACpBC,oBAAqBA,GACrBC,4BAA6BA,GAC7BE,mBAAoBA,IAGlB9B,GAAa,SAAUzsL,EAAQ84F,GAGjC,OAFAhqF,EAAKgqF,EAAO6+E,GAAUL,mBACtBt3K,EAAO6L,UAAUqc,kBAAkB4wE,EAAM,GAAG5sF,MAAO,IAC5C,GAELuiL,GAAqB,SAAUzuL,EAAQo5F,GAEzC,OADA4tF,GAAcL,cAAc3mL,GAAQ,EAAOo5F,IACpC,GAELs1F,GAAkB,SAAU1uL,EAAQonJ,EAASlhI,GAC/C,OAAO6nK,GAAkBD,mBAAmB1mC,EAASlhI,GAAKtkB,KAAI,SAAU4a,GACtE,OAAOA,EAAO5C,KAAKjB,EAAM81K,GAAoBzuL,GAAS2Y,EAAM8zK,GAAYzsL,QAGxE2uL,GAAqB,SAAU3uL,EAAQs7C,GACzC,OAAOszI,GAAa5uL,EAAQs7C,IAE1BuzI,GAAmB,SAAU7uL,EAAQonJ,EAASlhI,EAAK4oK,GACrD,OAAOC,GAAiB3nC,EAAS0nC,GAAUl1K,MAAK,WAC9C,OAAO80K,GAAgB1uL,EAAQonJ,EAASlhI,MACvC,SAAUo1B,GACX,OAAOqzI,GAAmB3uL,EAAQs7C,MACjCvhC,OAAM,IAEPi1K,GAAgB,SAAUhvL,EAAQ8uL,GACpC,IAAI3rH,EAAW5b,GAAQN,QAAQjnD,EAAOoU,WAClC8R,EAAMlmB,EAAO6L,UAAUyc,SACvB8iG,EAAgBojE,GAAmBD,mBAAmBvuL,GAC1D,OAAgC,IAAzBorH,EAAcnoH,OAAewpL,GAAWzsL,EAAQorH,GAAiByjE,GAAiB7uL,EAAQmjE,EAAUj9C,EAAK4oK,IAE9GG,GAAgB,SAAU7nC,EAASn/I,GACrC,OAAOsH,EAAKkxK,GAAQD,eAAev4K,EAAKm/I,GAAU8C,KAEhD6kC,GAAmB,SAAU3nC,EAASn/I,GACxC,OAAOsH,EAAKkxK,GAAQD,eAAev4K,EAAKm/I,IAAU,SAAUn/I,GAC1D,MAAqB,YAAdb,GAAKa,OAGZinL,GAAqB,SAAUlvL,EAAQonJ,EAAS5mB,EAAS2uD,EAAU7oL,GACrE,OAAOmoK,GAAY9kC,SAASnJ,EAASxgI,EAAOoU,UAAW9N,GAAMmU,MAAK,SAAU/T,GAC1E,OAAOuoL,GAAc7nC,EAAS7/F,GAAQN,QAAQvgD,EAAGoF,YAAYlK,KAAI,SAAUwtL,GACzE,OAAgC,IAAzB71K,GAAG61K,EAAQD,UAIpBP,GAAe,SAAU5uL,EAAQiI,GAGnC,OAFA0vK,GAAUL,kBAAkBrvK,GAC5BjI,EAAO6L,UAAUqc,kBAAkBjgB,EAAIiE,MAAO,GACvCmP,EAAOL,MAAK,IAEjBq0K,GAAwB,SAAUC,EAAa9uD,EAASl6H,EAAMI,GAChE,OAAO+nK,GAAYC,gBAAgB4gB,EAAYpjL,OAAOuO,MAAK,SAAU8iF,GACnE,OAAOkxE,GAAYE,eAAe2gB,EAAYpjL,OAAOtK,KAAI,SAAU0U,GACjE,OAAOkqH,EAAUl6H,EAAK+7J,QAAQ9kE,IAAU72F,EAAG27J,QAAQ/rJ,GAAQhQ,EAAK+7J,QAAQ/rJ,IAAS5P,EAAG27J,QAAQ9kE,SAE7FxjF,OAAM,IAEPw1K,GAAoB,SAAUvvL,EAAQiI,GACxC,OAAO2mL,GAAa5uL,EAAQiI,IAE1BunL,GAAuB,SAAUpoC,EAASkoC,EAAa5oL,GACzD,OAAOqoL,GAAiB3nC,EAAS7/F,GAAQN,QAAQvgD,EAAGoF,YAAYlK,KAAI,SAAU6tL,GAC5E,OAAsC,IAA/Bl2K,GAAGk2K,EAAWH,OAGrBI,GAA2B,SAAU1vL,EAAQonJ,EAAS5mB,EAAS8uD,EAAahpL,GAC9E,OAAOmoK,GAAY9kC,SAASnJ,EAASxgI,EAAOoU,UAAW9N,GAAMmU,MAAK,SAAU/T,GAC1E,OAAO2oL,GAAsBC,EAAa9uD,EAASl6H,EAAMI,GAAM6oL,GAAkBvvL,EAAQsvL,GAAeE,GAAqBpoC,EAASkoC,EAAa5oL,MAClJ6T,GAAGc,EAAOL,MAAK,KAEhB20K,GAAmB,SAAU3vL,EAAQwgI,EAAS4mB,EAAS0nC,GACzD,IAAIxoL,EAAOw/J,GAAgBP,eAAevlK,EAAO6L,UAAUyc,UAC3D,OAAO2mK,GAAc7nC,EAAS0nC,GAAUr0K,MAAK,SAAU00K,GACrD,OAAOjQ,GAAMpiI,QAAQqyI,GAAYP,GAAa5uL,EAAQmvL,GAAYD,GAAmBlvL,EAAQonJ,EAAS5mB,EAAS2uD,EAAU7oL,OAGzHspL,GAAqB,SAAU5vL,EAAQwgI,EAAS4mB,EAASkoC,GAC3D,IAAIhpL,EAAOw/J,GAAgBP,eAAevlK,EAAO6L,UAAUyc,UAC3D,OAAO42J,GAAMpiI,QAAQwyI,GAAeV,GAAa5uL,EAAQsvL,GAAeI,GAAyB1vL,EAAQonJ,EAAS5mB,EAAS8uD,EAAahpL,IAEtIupL,GAAc,SAAU7vL,EAAQwgI,EAASsuD,GAC3C,IAAI1nC,EAAU7/F,GAAQN,QAAQjnD,EAAOoU,WACrC,OAAO26K,GAAiB3nC,EAAS0nC,GAAUl1K,MAAK,WAC9C,OAAO+1K,GAAiB3vL,EAAQwgI,EAAS4mB,EAAS0nC,MACjD,SAAUQ,GACX,OAAOM,GAAmB5vL,EAAQwgI,EAAS4mB,EAASkoC,MACnDv1K,OAAM,IAEP+1K,GAAoB,SAAU9vL,EAAQwgI,GACxC,IAAIsuD,EAAWvnI,GAAQN,QAAQjnD,EAAO6L,UAAUgJ,UAAS,IACrDikF,EAAQ01F,GAAmBD,mBAAmBvuL,GAClD,OAAOA,EAAO6L,UAAU0C,eAAkC,IAAjBuqF,EAAM71F,OAAe4sL,GAAY7vL,EAAQwgI,EAASsuD,GAAYE,GAAchvL,EAAQ8uL,IAE3HiB,GAAc,CAAEj1H,gBAAiBg1H,IAEjCE,GAAS5e,GAAYN,KACrBmf,GAAmC,SAAUtf,EAAI/kK,EAAMxE,GACzD,IAAI8oL,EAAavf,EAAGniK,UAAUnP,IAAI+H,GAClC,GAAI8oL,EACF,IAAK,IAAI1sL,EAAI,EAAGA,EAAI0sL,EAAWjtL,OAAQO,IACrC,IAA8B,IAA1B0sL,EAAW1sL,GAAG2sL,SAAqBxf,EAAGzkK,IAAIiI,GAAGvI,EAAMskL,EAAW1sL,GAAGgG,UACnE,OAAO,EAIb,OAAO,GAEL4mL,GAAe,SAAUpwL,EAAQ4L,EAAMxE,EAAMypK,GAC/C,IAAI/tK,EAAO9C,EAAOkM,IAAIo1C,UACtB,OAAI11C,IAAS9I,IAGb8I,EAAO5L,EAAOkM,IAAIyL,UAAU/L,GAAM,SAAUA,GAC1C,QAAIqkL,GAAiCjwL,EAAQ4L,EAAMxE,KAG5CwE,EAAKvH,aAAevB,KAAUuqH,GAAUrtH,EAAQ4L,EAAMxE,EAAMypK,GAAM,OAEpExjD,GAAUrtH,EAAQ4L,EAAMxE,EAAMypK,KAEnCwf,GAAY,SAAUnkL,EAAKN,EAAM+I,GACnC,QAAIq7K,GAAOpkL,EAAM+I,EAAOzE,YAGpB8/K,GAAOpkL,EAAM+I,EAAO0U,SAGpB1U,EAAOnL,SACgB,IAAlBoC,EAAK2a,UAAkBra,EAAIiI,GAAGvI,EAAM+I,EAAOnL,eADpD,KAIE8mL,GAAa,SAAUpkL,EAAKN,EAAM+I,EAAQ47K,EAAUC,EAAS3f,GAC/D,IAAIzuK,EAAKhD,EAELoE,EADAqZ,EAAQlI,EAAO47K,GAEnB,GAAI57K,EAAO87K,QACT,OAAO97K,EAAO87K,QAAQ7kL,EAAM+I,EAAQ47K,GAEtC,GAAI1zK,EACF,GAA4B,qBAAjBA,EAAM5Z,QACf,IAAKb,KAAOya,EACV,GAAIA,EAAMxa,eAAeD,GAAM,CAM7B,GAJEhD,EADe,eAAbmxL,EACMrkL,EAAI6tC,UAAUnuC,EAAMxJ,GAEpBgvK,GAAYn8H,SAAS/oC,EAAKN,EAAMxJ,GAEtCouL,IAAYpxL,IAAUuV,EAAOgmH,MAC/B,OAEF,KAAM61D,GAAW77K,EAAOgmH,SAAWq1D,GAAO5wL,EAAOgyK,GAAYJ,oBAAoB9kK,EAAKklK,GAAYR,YAAY/zJ,EAAMza,GAAMyuK,GAAOzuK,IAC/H,aAKN,IAAKoB,EAAI,EAAGA,EAAIqZ,EAAM5Z,OAAQO,IAC5B,GAAiB,eAAb+sL,EAA4BrkL,EAAI6tC,UAAUnuC,EAAMiR,EAAMrZ,IAAM4tK,GAAYn8H,SAAS/oC,EAAKN,EAAMiR,EAAMrZ,IACpG,OAAOmR,EAKf,OAAOA,GAEL04G,GAAY,SAAUsjD,EAAI/kK,EAAMxE,EAAMypK,EAAM2f,GAC9C,IACI77K,EAAQnR,EAAG+S,EAAG/O,EADd0oL,EAAavf,EAAGniK,UAAUnP,IAAI+H,GAE9B8E,EAAMykK,EAAGzkK,IACb,GAAIgkL,GAActkL,EAChB,IAAKpI,EAAI,EAAGA,EAAI0sL,EAAWjtL,OAAQO,IAEjC,GADAmR,EAASu7K,EAAW1sL,GAChB6sL,GAAU1f,EAAGzkK,IAAKN,EAAM+I,IAAW27K,GAAWpkL,EAAKN,EAAM+I,EAAQ,aAAc67K,EAAS3f,IAASyf,GAAWpkL,EAAKN,EAAM+I,EAAQ,SAAU67K,EAAS3f,GAAO,CAC3J,GAAIrpK,EAAUmN,EAAOnN,QACnB,IAAK+O,EAAI,EAAGA,EAAI/O,EAAQvE,OAAQsT,IAC9B,IAAKo6J,EAAGzkK,IAAIqG,SAAS3G,EAAMpE,EAAQ+O,IACjC,OAIN,OAAO5B,IAKXxS,GAAQ,SAAUnC,EAAQoH,EAAMypK,EAAMjlK,GACxC,IAAI+qD,EACJ,OAAI/qD,EACKwkL,GAAapwL,EAAQ4L,EAAMxE,EAAMypK,IAE1CjlK,EAAO5L,EAAO6L,UAAUC,YACpBskL,GAAapwL,EAAQ4L,EAAMxE,EAAMypK,KAGrCl6G,EAAY32D,EAAO6L,UAAUgJ,aACzB8hD,IAAc/qD,IACZwkL,GAAapwL,EAAQ22D,EAAWvvD,EAAMypK,OAM1C6f,GAAW,SAAU1wL,EAAQ81I,EAAO+6B,GACtC,IAAI8f,EACAC,EAAqB,GACrBC,EAAa,GAYjB,OAXAF,EAAe3wL,EAAO6L,UAAUgJ,WAChC7U,EAAOkM,IAAIyL,UAAUg5K,GAAc,SAAU/kL,GAC3C,IAAIpI,EAAG4D,EACP,IAAK5D,EAAI,EAAGA,EAAIsyI,EAAM7yI,OAAQO,IAC5B4D,EAAO0uI,EAAMtyI,IACRqtL,EAAWzpL,IAASimH,GAAUrtH,EAAQ4L,EAAMxE,EAAMypK,KACrDggB,EAAWzpL,IAAQ,EACnBwpL,EAAmB/pL,KAAKO,MAG3BpH,EAAOkM,IAAIo1C,WACPsvI,GAELE,GAAW,SAAU9wL,EAAQoH,GAC/B,IACIuvD,EAAWmF,EAASt4D,EAAG+S,EAAG/M,EAD1B0mL,EAAalwL,EAAOwO,UAAUnP,IAAI+H,GAElC8E,EAAMlM,EAAOkM,IACjB,GAAIgkL,EAGF,IAFAv5H,EAAY32D,EAAO6L,UAAUgJ,WAC7BinD,EAAUs1G,GAAY79J,WAAWrH,EAAKyqD,GACjCpgD,EAAI25K,EAAWjtL,OAAS,EAAGsT,GAAK,EAAGA,IAAK,CAE3C,GADA/M,EAAW0mL,EAAW35K,GAAG/M,UACpBA,GAAY0mL,EAAW35K,GAAGw6K,aAC7B,OAAO,EAET,IAAKvtL,EAAIs4D,EAAQ74D,OAAS,EAAGO,GAAK,EAAGA,IACnC,GAAI0I,EAAIiI,GAAG2nD,EAAQt4D,GAAIgG,GACrB,OAAO,EAKf,OAAO,GAELwnL,GAAc,CAChB3jE,UAAWA,GACXgjE,UAAWA,GACXluL,MAAOA,GACPuuL,SAAUA,GACVI,SAAUA,GACVb,iCAAkCA,IAGhCxoK,GAAY,SAAU7b,EAAM+Z,GAC9B,OAAO/Z,EAAK6b,UAAU9B,IAEpBsrK,GAAU,SAAU/qK,GACtB,IAAII,EAAiBJ,EAAII,eAAgBG,EAAcP,EAAIO,YAAai9B,EAAex9B,EAAIw9B,aAAch9B,EAAYR,EAAIQ,UAwBzH,OAvBIJ,IAAmBo9B,GAAgBP,GAASj8B,OAAOZ,GACjDG,EAAc,GAAKA,EAAcH,EAAeqsE,UAAU1vF,SAC5DygD,EAAej8B,GAAUnB,EAAgBG,GACzCH,EAAiBo9B,EAAaX,gBAC1Br8B,EAAYD,GACdC,GAAwBD,EACxBH,EAAiBo9B,EAAej8B,GAAUi8B,EAAch9B,GAAWq8B,gBACnEr8B,EAAYg9B,EAAaivC,UAAU1vF,OACnCwjB,EAAc,GAEdC,EAAY,IAIZy8B,GAASj8B,OAAOZ,IAAmBG,EAAc,GAAKA,EAAcH,EAAeqsE,UAAU1vF,SAC/FqjB,EAAiBmB,GAAUnB,EAAgBG,GAC3CA,EAAc,GAEZ08B,GAASj8B,OAAOw8B,IAAiBh9B,EAAY,GAAKA,EAAYg9B,EAAaivC,UAAU1vF,SACvFygD,EAAej8B,GAAUi8B,EAAch9B,GAAWq8B,gBAClDr8B,EAAYg9B,EAAaivC,UAAU1vF,SAGhC,CACLqjB,eAAgBA,EAChBG,YAAaA,EACbi9B,aAAcA,EACdh9B,UAAWA,IAGXwqK,GAAa,CAAE7vK,MAAO4vK,IAEtBE,GAASpxB,GAAKH,KAAMwxB,GAAa,aACjCC,GAAa,SAAUtvJ,EAAen2B,GACxC,OAAOm2B,EAAcsvJ,WAAWzlL,GAAM,IAEpC0lL,GAA0B,SAAU1lL,GACtC,IAAI0H,EAAQ,GACZ,MAAO1H,EAAM,CACX,GAAsB,IAAlBA,EAAK2a,UAAkB3a,EAAK+mF,YAAcw+F,IAAUvlL,EAAKqM,WAAWhV,OAAS,EAC/E,MAAO,GAEa,IAAlB2I,EAAK2a,UACPjT,EAAMzM,KAAK+E,GAEbA,EAAOA,EAAKsM,WAEd,OAAO5E,GAELi+K,GAAwB,SAAU3lL,GACpC,OAAO0lL,GAAwB1lL,GAAM3I,OAAS,GAE5CuuL,GAAoB,SAAU5lL,GAChC,IAAIsd,EACJ,GAAItd,EAEF,IADAsd,EAAS,IAAI+/H,GAAWr9I,EAAMA,GACzBA,EAAOsd,EAAOygC,UAAW/9C,EAAMA,EAAOsd,EAAOC,OAChD,GAAsB,IAAlBvd,EAAK2a,SACP,OAAO3a,EAIb,OAAO,MAEL6lL,GAAuB,SAAUx6G,GACnC,IAAIkqF,EAAiB55G,GAAQL,QAAQ,QASrC,OARAyI,GAAOwxG,EAAgB,CACrB,GAAMiwB,GACN,iBAAkB,IAClB,gBAAiB,iBAEfn6G,GACF7nE,GAAO+xJ,EAAgB55G,GAAQJ,SAASgqI,KAEnChwB,GAELuwB,GAA6B,SAAUloB,GACzC,IAAIpiJ,EAAWoqK,GAAkBhoB,GAIjC,OAHIpiJ,GAAYA,EAASurE,UAAUC,OAAO,KAAOu+F,IAC/C/pK,EAASM,WAAW,EAAG,GAElBN,GAELuqK,GAA2B,SAAU3xL,EAAQ4L,EAAMg7K,QACnC,IAAdA,IACFA,GAAY,GAEd,IAAI16K,EAAMlM,EAAOkM,IAAKL,EAAY7L,EAAO6L,UACzC,GAAI0lL,GAAsB3lL,GACxBo7K,GAAcL,cAAc3mL,GAAQ,EAAOunD,GAAQN,QAAQr7C,GAAOg7K,OAC7D,CACL,IAAI1gK,EAAMra,EAAUyc,SAChBe,EAAQnd,EAAIyL,UAAU/L,EAAMM,EAAI02C,SAChCx7B,EAAWsqK,GAA2B9lL,GACtCsa,EAAII,iBAAmBc,GAAYlB,EAAIO,YAAc,GACvDP,EAAIW,SAASO,EAAUlB,EAAIO,YAAc,GAEvCP,EAAIw9B,eAAiBt8B,GAAYlB,EAAIQ,UAAY,GACnDR,EAAIY,OAAOM,EAAUlB,EAAIQ,UAAY,GAEvCxa,EAAImJ,OAAOzJ,GAAM,GACbyd,GAASnd,EAAI4wC,QAAQzzB,IACvBsuJ,GAAUL,kBAAkB/vH,GAAQN,QAAQ59B,IAE9Cxd,EAAU0b,OAAOrB,KAGjB0rK,GAAuB,SAAU5xL,EAAQ4L,EAAMg7K,QAC/B,IAAdA,IACFA,GAAY,GAEd,IAAI16K,EAAMlM,EAAOkM,IAAKL,EAAY7L,EAAO6L,UACzC,GAAKD,EAQH+lL,GAAyB3xL,EAAQ4L,EAAMg7K,QANvC,GADAh7K,EAAO68J,GAAwBzoK,EAAOoU,UAAWvI,EAAUgJ,aACtDjJ,EACH,MAAOA,EAAOM,EAAI7M,IAAI+xL,IACpBO,GAAyB3xL,EAAQ4L,GAAM,IAO3CimL,GAA2B,SAAU7xL,EAAQmhK,EAAgB2wB,GAC/D,IAAI5lL,EAAMlM,EAAOkM,IAAKmd,EAAQnd,EAAIyL,UAAUm6K,EAAYn5K,EAAMy4J,GAAYzuH,YAAa3iD,IACnFqpB,GAASnd,EAAI4wC,QAAQzzB,GACvByoK,EAAWztL,WAAWmL,aAAa2xJ,EAAgB2wB,IAEnDna,GAAUP,iBAAiB7vH,GAAQN,QAAQ6qI,IACvC5lL,EAAI4wC,QAAQg1I,GACdA,EAAWztL,WAAWmL,aAAa2xJ,EAAgB2wB,GAEnD5lL,EAAI2c,YAAYs4I,EAAgB2wB,KAIlCC,GAAa,SAAU1tL,EAAYuH,GAErC,OADAvH,EAAWkM,YAAY3E,GAChBA,GAELomL,GAAsC,SAAUC,EAAa9wB,GAC/D,IAAI+wB,EAAsB9+F,EAAM6+F,GAAa,SAAU5tL,EAAYytL,GACjE,OAAOC,GAAW1tL,EAAYytL,EAAW9+I,WAAU,MAClDmuH,GACH,OAAO4wB,GAAWG,EAAqBA,EAAoBnwJ,cAAcryB,eAAeyhL,MAEtFgB,GAAmB,SAAUnyL,EAAQoH,EAAMypK,GAC7C,IAAI3qJ,EAAKi7I,EAAgB/5I,EAAUzB,EAAQk+B,EAAUx9B,EAAW5gB,EAC5DoG,EAAY7L,EAAO6L,UACvBqa,EAAMra,EAAUyc,QAAO,GACvB3C,EAASO,EAAIO,YACbJ,EAAYH,EAAII,eAChB7gB,EAAO4gB,EAAUssE,UACjBwuE,EAAiBsH,GAAwBzoK,EAAOoU,UAAWvI,EAAUgJ,YACjEssJ,IACF/5I,EAAWoqK,GAAkBrwB,IAE/B,IAAIixB,EAAgB,gCAChB3sL,GAAQkgB,EAAS,GAAKA,EAASlgB,EAAKxC,QAAUmvL,EAAcjuL,KAAKsB,EAAKmtF,OAAOjtE,KAAYysK,EAAcjuL,KAAKsB,EAAKmtF,OAAOjtE,EAAS,KACnIk+B,EAAWh4C,EAAUgqD,cACrB3vC,EAAIoD,UAAS,GACbpD,EAAMusJ,GAAYH,UAAUtyK,EAAQkmB,EAAKlmB,EAAOwO,UAAUnP,IAAI+H,IAC9D8e,EAAMgrK,GAAW7vK,MAAM6E,GACvBlmB,EAAOwO,UAAUvH,MAAMG,EAAMypK,EAAM3qJ,GACnCra,EAAUiqD,eAAejS,KAEpBs9G,GAAkB/5I,EAASurE,YAAcw+F,KAC5ChwB,EAAiBkwB,GAAWrxL,EAAOyP,SAAUgiL,IAAqB,GAAMvlL,OACxEkb,EAAW+5I,EAAejpJ,WAC1BgO,EAAIwD,WAAWy3I,GACfx7I,EAAS,GAGT3lB,EAAOwO,UAAUvH,MAAMG,EAAMypK,EAAM1P,GAErCt1J,EAAUqc,kBAAkBd,EAAUzB,KAGtC0sK,GAAoB,SAAUryL,EAAQoH,EAAMypK,EAAM2f,GACpD,IACInqK,EAAWV,EAAQk+B,EACnByuI,EAAiB1mL,EAAMkmL,EAEvB3wB,EAJAj1J,EAAMlM,EAAOkM,IAAKL,EAAY7L,EAAO6L,UAGrCiwD,EAAU,GAAI51C,EAAMra,EAAUyc,SAElCjC,EAAYH,EAAII,eAChBX,EAASO,EAAIO,YACb7a,EAAOya,EACoB,IAAvBA,EAAUE,WACRZ,IAAWU,EAAUssE,UAAU1vF,SACjCqvL,GAAkB,GAEpB1mL,EAAOA,EAAKvH,YAEd,MAAOuH,EAAM,CACX,GAAIolL,GAAY3jE,UAAUrtH,EAAQ4L,EAAMxE,EAAMypK,EAAM2f,GAAU,CAC5DsB,EAAalmL,EACb,MAEEA,EAAKuc,cACPmqK,GAAkB,GAEpBx2H,EAAQj1D,KAAK+E,GACbA,EAAOA,EAAKvH,WAEd,GAAKytL,EAGL,GAAIQ,EAAiB,CACnBzuI,EAAWh4C,EAAUgqD,cACrB3vC,EAAIoD,UAAS,GACb,IAAIipK,EAAc9f,GAAYH,UAAUtyK,EAAQkmB,EAAKlmB,EAAOwO,UAAUnP,IAAI+H,IAAO,GACjFmrL,EAAcrB,GAAW7vK,MAAMkxK,GAC/BvyL,EAAOwO,UAAU6G,OAAOjO,EAAMypK,EAAM0hB,GACpC1mL,EAAUiqD,eAAejS,OACpB,CACLs9G,EAAiBsH,GAAwBzoK,EAAOoU,UAAW09K,GAC3D,IAAIU,EAAoBf,IAAqB,GAAOvlL,MAChDm8K,EAAY2J,GAAoCl2H,EAAS02H,GAE3DX,GAAyB7xL,EAAQwyL,EAD/BrxB,GAGkD2wB,GAEtDH,GAAyB3xL,EAAQmhK,GAAgB,GACjDt1J,EAAUqc,kBAAkBmgK,EAAW,GACnCn8K,EAAI4wC,QAAQg1I,IACd5lL,EAAImJ,OAAOy8K,KAIbW,GAAwB,SAAUzyL,EAAQ2qB,GAC5C,IAAI9e,EAAY7L,EAAO6L,UAAW8B,EAAO3N,EAAOoU,UAChDw9K,GAAqB5xL,EAAQ,MAAM,GAClB,IAAZ2qB,GAA6B,KAAZA,IAAmB9e,EAAU0C,eAAiB1C,EAAUgJ,WAAW1P,YAAcgsL,IACrGS,GAAqB5xL,EAAQyoK,GAAwB96J,EAAM9B,EAAUgJ,aAEvD,KAAZ8V,GAA8B,KAAZA,GACpBinK,GAAqB5xL,EAAQyoK,GAAwB96J,EAAM9B,EAAUgJ,cAGrEi+D,GAAU,SAAU9yE,GACtBA,EAAO4O,GAAG,mBAAmB,SAAUR,GACrCqkL,GAAsBzyL,EAAQoO,EAAEuc,aAGhC+nK,GAAyB,SAAUz9H,EAAYg9H,GACjD,IAAI9wB,EAAiBswB,IAAqB,GACtCkB,EAAYX,GAAoCC,EAAa9wB,EAAej1J,OAGhF,OAFAtJ,GAAO2kD,GAAQN,QAAQgO,GAAaksG,GACpC3rE,GAASjuC,GAAQN,QAAQgO,IAClB6wG,GAAgB6sB,EAAW,IAEhCC,GAAkB,SAAU5yL,EAAQ+D,GACtC,IAAI8uL,EAAiB7yL,EAAOq8C,OAAOg4G,wBACnC,OAAOw+B,EAAexwL,eAAe+E,GAAKrD,MAAcykK,GAAYzkK,EAAQmI,SAAWi3C,GAAS6nG,QAAQjnJ,EAAQmI,QAE9G4mL,GAA4B,SAAU/uL,GACxC,OAAOykK,GAAYzkK,EAAQmI,QAAUqlL,GAAsBxtL,EAAQmI,QAGjE6mL,GAAmB,SAAU3rC,EAAS0nC,GACxC,IAAIhzH,EAAU2kH,GAAQD,eAAesO,EAAU1nC,GAC/C,OAAOzrF,GAAUG,EAASlZ,IAAShpC,KAAK7O,EAAS+wD,IAAU,SAAUv1D,GACnE,OAAOu1D,EAAQt1D,MAAM,EAAGD,OAGxBysL,GAAoB,SAAU/qL,GAChC,OAAgC,IAAzB2L,GAAS3L,GAAKhF,QAEnBgwL,GAAqB,SAAUzyD,EAASxgI,EAAQiR,EAAQiiL,GAC1D,IAAIC,EAAoBx6K,EAAMi6K,GAAiB5yL,GAC3CiyL,EAAcrwL,EAAIiN,EAAOqkL,EAAeC,IAAoB,SAAUlrL,GACxE,OAAOA,EAAIiE,SAEb,GAA2B,IAAvB+lL,EAAYhvL,OACd+jL,GAAcL,cAAc3mL,EAAQwgI,EAASvvH,OACxC,CACL,IAAIsjC,EAAMm+I,GAAuBzhL,EAAO/E,MAAO+lL,GAC/CjyL,EAAO6L,UAAU0b,OAAOgtB,EAAI8wH,aAG5B+tB,GAAgB,SAAUpzL,EAAQwgI,GACpC,IAAI4mB,EAAU7/F,GAAQN,QAAQjnD,EAAOoU,WACjC06K,EAAWvnI,GAAQN,QAAQjnD,EAAO6L,UAAUgJ,YAC5Cq+K,EAAgBrkL,EAAOkkL,GAAiB3rC,EAAS0nC,GAAWkE,IAChE,OAAO18K,GAAK48K,GAAetxL,KAAI,SAAUqP,GACvC,IAAI8sK,EAAUjY,GAAgBP,eAAevlK,EAAO6L,UAAUyc,UAC9D,SAAIi2J,GAAYT,gCAAgCt9C,EAASu9C,EAAS9sK,EAAO/E,QAAW4mL,GAA0B7hL,MAC5GgiL,GAAmBzyD,EAASxgI,EAAQiR,EAAQiiL,IACrC,MAIRn5K,OAAM,IAEPs5K,GAAoB,SAAUrzL,EAAQwgI,GACxC,QAAOxgI,EAAO6L,UAAU0C,eAAgB6kL,GAAcpzL,EAAQwgI,IAE5D8yD,GAAqB,CAAEx4H,gBAAiBu4H,IAExCE,GAAW,SAAUtrL,GACvB,IAAIsO,EAAI,EAAGC,EAAI,EACX6wI,EAAep/I,EACnB,MAAOo/I,GAAgBA,EAAa9gI,SAClChQ,GAAK8wI,EAAat3C,YAAc,EAChCv5F,GAAK6wI,EAAar3C,WAAa,EAC/Bq3C,EAAeA,EAAaA,aAE9B,MAAO,CACL9wI,EAAGA,EACHC,EAAGA,IAGHg9K,GAA0B,SAAUxzL,EAAQiI,EAAKwrL,GACnD,IAAIC,EAAc,CAChBzrL,IAAKA,EACLwrL,WAAYA,GAGd,OADAzzL,EAAO2hC,KAAK,iBAAkB+xJ,GACvBA,EAAY7vH,sBAEjB8vH,GAAwB,SAAU3zL,EAAQiI,EAAKwrL,GACjD,IAAIj9K,EAAGo9K,EAGHC,EAAWC,EAFX5nL,EAAMlM,EAAOkM,IACbpJ,EAAOoJ,EAAIo1C,UACWyyI,EAAU,EACpC,IAAIP,GAAwBxzL,EAAQiI,EAAKwrL,IAGpCtwI,GAASsM,UAAUxnD,GAAxB,CAMA,IAHmB,IAAfwrL,IACFM,EAAU9rL,EAAIq9B,cAEM,SAAlBxiC,EAAKwB,SAAqB,CAC5B,IAAI0vL,EAAkBh0L,EAAO6L,UAAUooL,qBACvC,GAAID,EAOF,OANAx9K,EAAI+8K,GAAStrL,GAAKuO,EAAI+8K,GAASS,GAAiBx9K,EAAIu9K,EACpDD,EAAYE,EAAgB7uJ,aAC5B0uJ,EAAYG,EAAgB3+I,gBACxB7+B,EAAIq9K,GAAar9K,EAAI,GAAKq9K,EAAYC,KACxCE,EAAgB3+I,UAAY7+B,EAAIq9K,EAAYr9K,EAAIA,EAAIs9K,EAAY,KAKtEF,EAAW1nL,EAAIzL,YAAYT,EAAOm7H,UAClC3kH,EAAItK,EAAIipC,OAAOltC,GAAKuO,EAAIu9K,EACxBF,EAAYD,EAASp9K,EACrBs9K,EAAYF,EAASphL,GACjBgE,EAAIo9K,EAASp9K,GAAKA,EAAI,GAAKq9K,EAAYC,IACzC9zL,EAAOm7H,SAASt3C,SAAS,EAAGrtE,EAAIq9K,EAAYr9K,EAAIA,EAAIs9K,EAAY,MAGhEI,GAAkB,SAAUl0L,GAC9B,GAAIA,EAAOkQ,OACT,OAAOlQ,EAAOoU,UAAU03F,wBAExB,IAAI/lE,EAAM/lC,EAAOm7H,SACjB,MAAO,CACLh4F,KAAM,EACNugE,MAAO39D,EAAIy9C,WACXpgD,IAAK,EACL0U,OAAQ/R,EAAI09C,YACZ11D,MAAOgY,EAAIy9C,WACXx1D,OAAQ+X,EAAI09C,cAId4kD,GAAW,SAAUroI,EAAQw0C,EAAIC,GAC/Bz0C,EAAOkQ,QACTlQ,EAAOoU,UAAUghC,YAAcZ,EAC/Bx0C,EAAOoU,UAAUihC,WAAaZ,GAE9Bz0C,EAAOm7H,SAASkN,SAAS7zF,EAAIC,IAG7B0/I,GAAsB,SAAUn0L,EAAQkmB,GAC1CvG,GAAKylJ,GAAcG,eAAer/I,GAAK21G,kBAAkB/sH,MAAK,SAAUslL,GACtE,IAAIC,EAAWH,GAAgBl0L,GAC3BywE,EAAWsyF,GAAYsxB,EAAUD,GACjC37I,EAAS,EACTjE,EAAKi8B,EAASl6D,EAAI,EAAIk6D,EAASl6D,EAAIkiC,EAASg4B,EAASl6D,EAAIkiC,EACzDhE,EAAKg8B,EAASj6D,EAAI,EAAIi6D,EAASj6D,EAAIiiC,EAASg4B,EAASj6D,EAAIiiC,EAC7D4vF,GAASroI,EAAuB,IAAfywE,EAASl6D,EAAUi+B,EAAK,EAAkB,IAAfi8B,EAASj6D,EAAUi+B,EAAK,OAGpE6/I,GAAiB,CACnBX,sBAAuBA,GACvBQ,oBAAqBA,IAGnBI,GAA0BpxI,GAAS2zE,sBACnC09D,GAA2BrxI,GAAS4yB,uBACpC0+G,GAAY,SAAUhnL,EAAWzN,EAAQ4L,EAAMhJ,EAAQg+E,GACzD,OAAO5gF,EAAO46K,oBAAoB6Z,UAAUhnL,EAAW7B,EAAMhJ,EAAQg+E,IAEnE8zG,GAAe,SAAU9oL,GAC3B,IAAIsa,EAAMta,EAAKm2B,cAAcnb,cAE7B,OADAV,EAAI+2G,WAAWrxH,GACRsa,GAEL+2G,GAAa,SAAUj9H,EAAQ4L,GACjC,IAAIwC,EAAIpO,EAAO2hC,KAAK,uBAAwB,CAAE1wB,OAAQrF,IACtD,OAAIwC,EAAEy1D,qBACG,KAEF6wH,GAAa9oL,IAElB+oL,GAAqB,SAAU30L,EAAQ0wE,EAAOkQ,GAChD,IAAIyrF,EAAkBhpH,GAAe,EAAGrjD,EAAOoU,UAAWs8D,GACtDs0F,EAAgBc,GAAgBP,eAAe8G,GAC/CuoB,EAAoB5vB,EAAcl5J,UACtC,GAAI0oL,GAAyBI,GAC3B,OAAOH,GAAU,EAAGz0L,EAAQ40L,GAAoB5vB,EAAcrE,WAAW,GAE3E,IAAIk0B,EAA0B7vB,EAAcl5J,SAAQ,GACpD,GAAI0oL,GAAyBK,GAC3B,OAAOJ,GAAU,EAAGz0L,EAAQ60L,GAAyB,GAAO,GAE9D,IAAItN,EAASvnL,EAAOkM,IAAIyL,UAAUqtJ,EAAcl5J,WAAW,SAAUF,GACnE,OAAO4oL,GAAyB5oL,IAAS2oL,GAAwB3oL,MAEnE,OAAI4oL,GAAyBjN,GACpBkN,GAAU,EAAGz0L,EAAQunL,GAAQ,EAAO3mG,GAEtC,MAELk0G,GAAmB,SAAU90L,EAAQ0wE,EAAOkQ,GAC9C,IAAKlQ,IAAUA,EAAMtqD,UACnB,OAAOsqD,EAET,IAAIqkH,EAAaJ,GAAmB30L,EAAQ0wE,EAAOkQ,GACnD,OAAIm0G,GAGGrkH,GAELskH,GAAc,SAAUh1L,EAAQkmB,GAClClmB,EAAO6L,UAAU0b,OAAOrB,GACxBouK,GAAeH,oBAAoBn0L,EAAQA,EAAO6L,UAAUyc,WAG1D2sK,GAAsB,SAAU/oL,EAAKN,GACnCu3C,GAASj8B,OAAOtb,IAA8B,IAArBA,EAAK1G,KAAKjC,QACrCiJ,EAAImJ,OAAOzJ,IAGXspL,GAA4B,SAAUl1L,EAAQ0wE,EAAO9kE,EAAM6B,EAAW+yH,EAAS20D,GACjF,IAAIJ,EAAaN,GAAUhnL,EAAWzN,EAAQm1L,EAAkBrpL,SAAS00H,GAAUA,GAAS,GAC5F,GAAI9vD,EAAMtqD,UAAW,CACnB,IAAI67J,EAAcvxG,EAAMntB,aACpBi9E,EACFyhD,EAAYn7J,OAAOiuK,EAAWzuK,eAAgByuK,EAAWtuK,aAEzDw7J,EAAYp7J,SAASkuK,EAAWrxI,aAAcqxI,EAAWruK,WAE3Du7J,EAAYhqG,sBAEZvH,EAAMuH,iBAIR,OAFAj4E,EAAO6L,UAAU0b,OAAOwtK,GACxBE,GAAoBj1L,EAAOkM,IAAKN,IACzB,GAELwpL,GAAwB,SAAUp1L,EAAQwgI,GAC5C,IAAI9vD,EAAQ1wE,EAAO6L,UAAUyc,SAC7B,IAAK66B,GAASj8B,OAAOwpD,EAAMmoG,yBACzB,OAAO,EAET,IAAIprK,EAAY+yH,EAAUqlC,GAAW2H,SAAW3H,GAAW8H,UACvDsI,EAAcvI,GAAY1tK,EAAOoU,WACjCihL,EAA6B18K,EAAM6zJ,GAAwByJ,EAAY9sJ,MACvEmsK,EAA6B38K,EAAM6zJ,GAAwByJ,EAAY1jF,MACvEgjG,EAAe/0D,EAAU60D,EAA6BC,EACtDE,EAAiCh1D,EAAU4iD,GAA+BC,GAC1Ere,EAAgBoH,GAA2B3+J,EAAWzN,EAAOoU,UAAWs8D,GACxE+kH,EAAoBhY,GAAYH,kBAAkB98C,EAAS+0D,EAAavwB,IAC5E,IAAKywB,EACH,OAAO,EACF,GAAID,EAA+BC,GACxC,OAAOP,GAA0Bl1L,EAAQ0wE,EAAOs0F,EAAcl5J,UAAW2B,EAAW+yH,EAASi1D,GAE/F,IAAIN,EAAoBI,EAAaE,GACrC,SAAIN,GAAqBK,EAA+BL,IAClDzoB,GAAsB+oB,EAAmBN,KACpCD,GAA0Bl1L,EAAQ0wE,EAAOs0F,EAAcl5J,UAAW2B,EAAW+yH,EAAS20D,IAK/FO,GAAoB,SAAU11L,EAAQwgI,GACxC,OAAO40D,GAAsBp1L,EAAQwgI,IAEnCm1D,GAAoB,CAAE76H,gBAAiB46H,IAEvCE,GAAgB,SAAU51L,EAAQm7D,GACpCn7D,EAAOyP,SAAS2H,YAAY+jD,GAAS,EAAO,OAE1C06H,GAAgB,SAAU71L,GACxBynL,GAAU3sH,gBAAgB96D,GAAQ,IAE3B21L,GAAkB76H,gBAAgB96D,GAAQ,IAE1CqsL,GAAqBvxH,gBAAgB96D,GAAQ,IAE7CyhL,GAAoB3mH,gBAAgB96D,GAAQ,IAE5C+vL,GAAYj1H,gBAAgB96D,IAE5BmiL,GAAiBrnH,gBAAgB96D,GAAQ,IAEzCszL,GAAmBx4H,gBAAgB96D,GAAQ,KAGpD41L,GAAc51L,EAAQ,UACtBu+K,GAAYV,cAAc79K,KAG1B81L,GAAuB,SAAU91L,GAC/BynL,GAAU3sH,gBAAgB96D,GAAQ,IAE3B21L,GAAkB76H,gBAAgB96D,GAAQ,IAE1CqsL,GAAqBvxH,gBAAgB96D,GAAQ,IAE7CyhL,GAAoB3mH,gBAAgB96D,GAAQ,IAE5C+vL,GAAYj1H,gBAAgB96D,IAE5BmiL,GAAiBrnH,gBAAgB96D,GAAQ,IAEzCszL,GAAmBx4H,gBAAgB96D,GAAQ,IAGpD41L,GAAc51L,EAAQ,kBAGtB+1L,GAAiB,CACnBF,cAAeA,GACfC,qBAAsBA,IAGpBE,GAAuB,SAAUnrC,EAAUzD,EAASn/I,GACtD,IAAIguL,EAAc,SAAUhuL,GAC1B,OAAOstF,GAAOttF,EAAK4iJ,IAEjBz0D,EAAS,SAAUnuF,GACrB,OAAOsR,GAAGguC,GAAQN,QAAQmgG,GAAUn/I,IAEtC,OAAO8vF,GAAQxwC,GAAQN,QAAQh/C,IAAM,SAAUA,GAC7C,OAAOguL,EAAYhuL,GAAK6R,WACvBs8E,GAAQ37E,KAAKw7K,IAEdC,GAAU,SAAUjsL,EAAQksL,GAC9B,IAAIC,EAAS91L,KAAKs7B,IAAI,GAAIu6J,GAC1B,OAAO71L,KAAKm5B,MAAMxvB,EAASmsL,GAAUA,GAEnCC,GAAO,SAAUC,EAAUH,GAC7B,MAAI,aAAahyL,KAAKmyL,GACbJ,GAAiC,GAAzB1kL,SAAS8kL,EAAU,IAAW,GAAIH,GAAa,GAAK,KAE9DG,GAELC,GAAsB,SAAUC,GAClC,OAAOA,EAAW30L,QAAQ,YAAa,IAAIA,QAAQ,QAAS,MAE1D40L,GAAsB,SAAU5rC,EAAU5iJ,GAC5C,OAAOoT,EAAO/U,KAAKy0J,GAAWv6J,IAAIy0C,SAAShtC,EAAK4iJ,GAAU,KAExD6rC,GAAc,SAAU7rC,GAC1B,OAAO,SAAUzD,EAASn/I,GACxB,OAAOoT,EAAO/U,KAAK2B,GAAKrG,IAAI2lD,GAAQN,SAASp4C,OAAO4gD,IAAWh1C,MAAK,SAAU1W,GAC5E,OAAOiyL,GAAqBnrC,EAAUzD,EAASrjJ,EAAQmI,OAAOqO,GAAGk8K,GAAoB5rC,EAAU9mJ,EAAQmI,WACtG6N,MAAM,MAGT48K,GAAW,CACbC,YAAaF,GAAY,aACzBG,cAAe9jG,EAAQwjG,GAAqBG,GAAY,gBACxDL,KAAMA,IAGJS,GAAwB,SAAU92L,GACpC,OAAOyuK,GAAYC,gBAAgB1uK,EAAOoU,WAAWxS,KAAI,SAAUikI,GACjE,IAAIx/G,EAAYw/G,EAAMx/G,YACtB,OAAO88B,GAASj8B,OAAOb,GAAaA,EAAUhiB,WAAagiB,MAG3D0wK,GAAuB,SAAU7wK,EAAKpjB,GACxC,OAAOojB,EAAII,iBAAmBxjB,GAA4B,IAApBojB,EAAIO,aAExCuwK,GAAkB,SAAUh3L,GAC9B,OAAOqb,EAAO/U,KAAKtG,EAAO6L,UAAUyc,UAAU7N,MAAK,SAAUyL,GAC3D,IAAIpjB,EAAO9C,EAAOoU,UAClB,OAAO2iL,GAAqB7wK,EAAKpjB,GAAQuY,EAAOhC,OAASgC,EAAO/U,KAAKtG,EAAO6L,UAAUgJ,UAAS,QAG/FoiL,GAAqB,SAAUj3L,EAAQZ,GACzC,GAAI,aAAa+E,KAAK/E,GAAQ,CAC5B,IAAI83L,EAAiB1lL,SAASpS,EAAO,IACrC,GAAI83L,GAAkB,GAAKA,GAAkB,EAAG,CAC9C,IAAIC,EAAYt2L,GAASs7K,mBAAmBn8K,GACxCo3L,EAAcv2L,GAASu7K,mBAAmBp8K,GAC9C,OAAIo3L,EACKA,EAAYF,EAAiB,IAAM93L,EAEnC+3L,EAAUD,EAAiB,IAAM93L,EAG1C,OAAOA,EAGT,OAAOA,GAGPi4L,GAAiB,SAAUr3L,EAAQZ,GACrCY,EAAOwO,UAAUC,OAAO,WAAY,CAAErP,MAAO63L,GAAmBj3L,EAAQZ,KACxEY,EAAOmV,eAELmiL,GAAgB,SAAUt3L,GAC5B,OAAOg3L,GAAgBh3L,GAAQ4Z,MAAK,WAClC,OAAOk9K,GAAsB92L,GAAQ4B,KAAI,SAAU64K,GACjD,OAAOkc,GAASE,cAAc72L,EAAOoU,UAAWqmK,MAC/C1gK,MAAM,OACR,SAAU0gK,GACX,OAAOkc,GAASE,cAAc72L,EAAOoU,UAAWqmK,OAGhD8c,GAAiB,SAAUv3L,EAAQZ,GACrCY,EAAOwO,UAAUC,OAAO,WAAY,CAAErP,MAAO63L,GAAmBj3L,EAAQZ,KACxEY,EAAOmV,eAELqiL,GAAgB,SAAUx3L,GAC5B,OAAOg3L,GAAgBh3L,GAAQ4Z,MAAK,WAClC,OAAOk9K,GAAsB92L,GAAQ4B,KAAI,SAAU64K,GACjD,OAAOkc,GAASC,YAAY52L,EAAOoU,UAAWqmK,MAC7C1gK,MAAM,OACR,SAAU0gK,GACX,OAAOkc,GAASC,YAAY52L,EAAOoU,UAAWqmK,OAI9Cgd,GAAS,SAAUC,EAAMzvB,GAC3B,OAAOyvB,GAAQzvB,GAASyvB,EAAKpxK,iBAAmB2hJ,EAAK3hJ,gBAAkBoxK,EAAKjxK,cAAgBwhJ,EAAKxhJ,aAAiBixK,EAAKh0I,eAAiBukH,EAAKvkH,cAAgBg0I,EAAKhxK,YAAcuhJ,EAAKvhJ,WAEnLixK,GAAe,CAAE7mB,KAAM2mB,IAEvBG,GAAa,SAAUhsL,EAAMu3D,EAAU14C,GACzC,MAAO7e,GAAQA,IAASu3D,EAAU,CAChC,GAAI14C,EAAU7e,GACZ,OAAOA,EAETA,EAAOA,EAAKvH,WAEd,OAAO,MAELwzL,GAAY,SAAUjsL,EAAMu3D,EAAU14C,GACxC,OAAiD,OAA1CmtK,GAAWhsL,EAAMu3D,EAAU14C,IAEhCqtK,GAAoB,SAAUlsL,EAAMu3D,EAAU/7D,GAChD,OAAOywL,GAAUjsL,EAAMu3D,GAAU,SAAUv3D,GACzC,OAAOA,EAAKtH,WAAa8C,MAGzB2wL,GAAY,SAAUnsL,GACxB,OAAOA,GAA0B,UAAlBA,EAAKtH,UAElB0zL,GAAgB,SAAUpsL,GAC5B,OAAOA,GAAQ,oBAAoBzH,KAAKyH,EAAKtH,WAE3C2zL,GAA0B,SAAUrsL,EAAMu3D,GAC5C,OAAOi9F,GAAiBx0J,KAAoD,IAA3CisL,GAAUjsL,EAAMu3D,EAAUqlG,KAEzD0vB,GAAmB,SAAUhsL,EAAKN,EAAMu3B,GAC1C,IAAIja,EAAS,IAAI+/H,GAAWr9I,EAAMM,EAAIyL,UAAU/L,EAAKvH,WAAY6H,EAAI02C,UAAY12C,EAAIo1C,WACrF,MAAO11C,EAAOsd,EAAOia,EAAO,OAAS,UACnC,GAAIggB,GAASZ,KAAK32C,GAChB,OAAO,GAITusL,GAAa,SAAUvsL,EAAMxE,GAC/B,OAAOwE,EAAKm3C,iBAAmBn3C,EAAKm3C,gBAAgBz+C,WAAa8C,GAE/DgxL,GAAgC,SAAUzqL,EAAM/B,GAClD,MAAOA,GAAQA,IAAS+B,EAAM,CAC5B,GAAIw1C,GAAS4yB,uBAAuBnqE,GAClC,OAAO,EAETA,EAAOA,EAAKvH,WAEd,OAAO,GAELg0L,GAAuB,SAAUnsL,EAAKosL,EAAalyK,EAAW+c,EAAMwzB,GACtE,IAAIztC,EAAQqvK,EAAmBC,EAE3B5sL,EADA+B,EAAOzB,EAAIo1C,UAEXivG,EAAsBrkJ,EAAImwC,OAAO+c,sBAErC,GADAo/H,EAAuBtsL,EAAIyL,UAAUg/C,EAAUtyD,WAAY6H,EAAI02C,UAAYj1C,EACvEw1B,GAAQggB,GAASZ,KAAKoU,IAAc2hI,GAAepsL,EAAI4wC,QAAQ07I,GACjE,OAAOn9K,EAAOL,KAAKoqJ,GAAczuG,EAAUtyD,WAAY6H,EAAIi4C,UAAUwS,KAEvEztC,EAAS,IAAI+/H,GAAWtyF,EAAW6hI,GACnC,MAAO5sL,EAAOsd,EAAOia,EAAO,OAAS,UAAW,CAC9C,GAA2C,UAAvCj3B,EAAI2uJ,yBAAyBjvJ,IAAqBqsL,GAAwBrsL,EAAM+B,GAClF,OAAO0N,EAAOhC,OAEhB,GAAI8pC,GAASj8B,OAAOtb,IAASA,EAAK+mF,UAAU1vF,OAAS,EACnD,OAA2C,IAAvC60L,GAAkBlsL,EAAM+B,EAAM,KACzB0N,EAAOL,KAAKoqJ,GAAcx5J,EAAMu3B,EAAOv3B,EAAK+mF,UAAU1vF,OAAS,IAEjEoY,EAAOhC,OAEhB,GAAInN,EAAI02C,QAAQh3C,IAAS2kJ,EAAoB3kJ,EAAKtH,SAASic,eACzD,OAAOlF,EAAOhC,OAEhBk/K,EAAoB3sL,EAEtB,OAAIwa,GAAamyK,EACRl9K,EAAOL,KAAKoqJ,GAAcmzB,EAAmB,IAE/Cl9K,EAAOhC,QAEZo/K,GAAoB,SAAUvsL,EAAKka,EAAW3B,EAAOyB,GACvD,IAAIG,EAAWV,EAAQuD,EAEnBtd,EAAM2kJ,EACNmoC,EAAeJ,EAFf3qL,EAAOzB,EAAIo1C,UAEiBvF,GAAa,EAM7C,GALA11B,EAAYH,GAAKzB,EAAQ,QAAU,OAAS,aAC5CkB,EAASO,GAAKzB,EAAQ,QAAU,OAAS,UACzC6zK,EAAcn1I,GAASsM,UAAUppC,IAAcV,IAAWU,EAAUpO,WAAWhV,OAC/EstJ,EAAsBrkJ,EAAImwC,OAAO+c,sBACjCs/H,EAAgBj0K,EACZ27I,GAAiB/5I,GACnB,OAAOhL,EAAOhC,OAShB,GAPI8pC,GAASsM,UAAUppC,IAAcV,EAASU,EAAUpO,WAAWhV,OAAS,IAC1Ey1L,GAAgB,GAEdv1I,GAASioG,WAAW/kI,KACtBA,EAAY1Y,EACZgY,EAAS,GAEPU,IAAc1Y,EAAM,CACtB,GAAI+qL,IACF9sL,EAAOya,EAAUpO,WAAW0N,EAAS,EAAIA,EAAS,EAAI,GAClD/Z,GAAM,CACR,GAAIw0J,GAAiBx0J,GACnB,OAAOyP,EAAOhC,OAEhB,GAAIk3I,EAAoB3kJ,EAAKtH,WAAayzL,GAAUnsL,GAClD,OAAOyP,EAAOhC,OAIpB,GAAIgN,EAAU29B,gBAAiB,CAI7B,GAHAr+B,EAASrlB,KAAKC,KAAKm4L,GAAiB/yK,EAAS,EAAIA,EAAS,EAAIA,EAAQU,EAAUpO,WAAWhV,OAAS,GACpGojB,EAAYA,EAAUpO,WAAW0N,GACjCA,EAASw9B,GAASj8B,OAAOb,IAAciyK,EAAcjyK,EAAUnhB,KAAKjC,OAAS,GACxEmjB,GAAaC,IAAc1Y,EAAK+0C,WAAaq1I,GAAU1xK,GAC1D,OAAOhL,EAAOhC,OAEhB,GAAI++K,GAA8BzqL,EAAM0Y,IAAc+5I,GAAiB/5I,GACrE,OAAOhL,EAAOhC,OAEhB,GAAIgN,EAAU29B,kBAA4C,IAAzB+zI,GAAU1xK,GAAsB,CAC/Dza,EAAOya,EACP6C,EAAS,IAAI+/H,GAAW5iI,EAAW1Y,GACnC,EAAG,CACD,GAAIw1C,GAAS4yB,uBAAuBnqE,IAASw0J,GAAiBx0J,GAAO,CACnEmwC,GAAa,EACb,MAEF,GAAIoH,GAASj8B,OAAOtb,IAASA,EAAK+mF,UAAU1vF,OAAS,EAAG,CACtD0iB,EAAS+yK,EAAgB,EAAI9sL,EAAK+mF,UAAU1vF,OAC5CojB,EAAYza,EACZmwC,GAAa,EACb,MAEF,GAAIw0G,EAAoB3kJ,EAAKtH,SAASic,iBAAmBy3K,GAAcpsL,GAAO,CAC5E+Z,EAASzZ,EAAIi4C,UAAUv4C,GACvBya,EAAYza,EAAKvH,WACZq0L,GACH/yK,IAEFo2B,GAAa,EACb,aAEKnwC,EAAO8sL,EAAgBxvK,EAAOC,OAASD,EAAOqpE,UAiC7D,OA7BInsE,IACE+8B,GAASj8B,OAAOb,IAAyB,IAAXV,GAChC0yK,GAAqBnsL,EAAKosL,EAAalyK,GAAW,EAAMC,GAAWvX,MAAK,SAAUylC,GAChFluB,EAAYkuB,EAAIluB,YAChBV,EAAS4uB,EAAI5uB,SACbo2B,GAAa,KAGboH,GAASsM,UAAUppC,KACrBza,EAAOya,EAAUpO,WAAW0N,GACvB/Z,IACHA,EAAOya,EAAUpO,WAAW0N,EAAS,KAEnC/Z,IAAQu3C,GAASZ,KAAK32C,IAAUusL,GAAWvsL,EAAM,MAASssL,GAAiBhsL,EAAKN,GAAM,IAAWssL,GAAiBhsL,EAAKN,GAAM,IAC/HysL,GAAqBnsL,EAAKosL,EAAalyK,GAAW,EAAMxa,GAAMkD,MAAK,SAAUylC,GAC3EluB,EAAYkuB,EAAIluB,YAChBV,EAAS4uB,EAAI5uB,SACbo2B,GAAa,OAKjB28I,IAAkBtyK,GAAa+8B,GAASj8B,OAAOb,IAAcV,IAAWU,EAAUssE,UAAU1vF,QAC9Fo1L,GAAqBnsL,EAAKosL,EAAalyK,GAAW,EAAOC,GAAWvX,MAAK,SAAUylC,GACjFluB,EAAYkuB,EAAIluB,YAChBV,EAAS4uB,EAAI5uB,SACbo2B,GAAa,KAGVA,EAAa1gC,EAAOL,KAAKoqJ,GAAc/+I,EAAWV,IAAWtK,EAAOhC,QAEzEs/K,GAAc,SAAUzsL,EAAKga,GAC/B,IAAIE,EAAYF,EAAIE,UAAWwyK,EAAU1yK,EAAIq9B,aACzCvgC,EAAWoiJ,GAAcG,eAAer/I,GAc5C,OAbAuyK,GAAkBvsL,EAAKka,GAAW,EAAMwyK,GAAS9pL,MAAK,SAAUylC,GACzDnuB,GAAcg/I,GAAc1C,QAAQ1/I,EAAUuxB,IACjDqkJ,EAAQ/xK,SAAS0tB,EAAIluB,YAAakuB,EAAI5uB,aAGrCS,GACHqyK,GAAkBvsL,EAAKka,GAAW,EAAOwyK,GAAS9pL,MAAK,SAAUylC,GAC/DqkJ,EAAQ9xK,OAAOytB,EAAIluB,YAAakuB,EAAI5uB,aAGpCS,GACFwyK,EAAQtvK,UAAS,GAEZquK,GAAa7mB,KAAK5qJ,EAAK0yK,GAAWv9K,EAAOhC,OAASgC,EAAOL,KAAK49K,IAEnEC,GAAiB,CAAE9f,UAAW4f,IAE9BG,GAAsB,SAAUz8I,EAAQh2B,EAAWm0C,GACrD,IACI5uD,EADAsd,EAAS,IAAI+/H,GAAW5iI,EAAWm0C,GAEnC+1F,EAAsBl0G,EAAO+c,sBACjC,MAAOxtD,EAAOsd,EAAOC,OACnB,GAAIonI,EAAoB3kJ,EAAKtH,SAASic,gBAAkB3U,EAAK3I,OAAS,EACpE,OAAO,GAIT81L,GAAa,SAAU7sL,EAAKL,EAAWmtL,GACzC,IAAI5pI,EAASljD,EAAIiE,OAAO,OAAQ,GAAI,UACpC6oL,EAAM30L,WAAW3B,aAAa0sD,EAAQ4pI,GACtCntL,EAAU+0E,eAAexxB,GACzBljD,EAAImJ,OAAO+5C,IAET6pI,GAAoB,SAAU/sL,EAAKL,EAAWmtL,EAAOE,GACvD,IAAIhzK,EAAMha,EAAIob,YACT4xK,GAIHhzK,EAAI8xD,eAAeghH,GACnB9yK,EAAIq1G,aAAay9D,KAJjB9yK,EAAIgvC,cAAc8jI,GAClB9yK,EAAIivC,YAAY6jI,IAKlBntL,EAAU0b,OAAOrB,IAEfizK,GAAkB,SAAUn5L,EAAQgF,GACtC,IAGIg0L,EACAE,EAJArtL,EAAY7L,EAAO6L,UACnBK,EAAMlM,EAAOkM,IACbga,EAAMra,EAAUyc,SAGpBuwK,GAAe9f,UAAU7sK,EAAKga,GAAKpX,MAAK,SAAU8pL,GAChD1yK,EAAIW,SAAS+xK,EAAQtyK,eAAgBsyK,EAAQnyK,aAC7CP,EAAIY,OAAO8xK,EAAQl1I,aAAck1I,EAAQlyK,cAE3C,IAAIf,EAASO,EAAIO,YACbJ,EAAYH,EAAII,eACpB,GAA2B,IAAvBD,EAAUE,UAAkBF,EAAU29B,gBAAiB,CACzD,IAAIo1I,EAA6BzzK,EAASU,EAAUpO,WAAWhV,OAAS,EACxEojB,EAAYA,EAAUpO,WAAW3X,KAAKC,IAAIolB,EAAQU,EAAUpO,WAAWhV,OAAS,KAAOojB,EAErFV,EADEyzK,GAAqD,IAAvB/yK,EAAUE,SACjCF,EAAUssE,UAAU1vF,OAEpB,EAGb,IAAIu3D,EAActuD,EAAIyL,UAAU0O,EAAWna,EAAI02C,SAC3Cy2I,EAAiB7+H,EAActuD,EAAIyL,UAAU6iD,EAAYn2D,WAAY6H,EAAI02C,SAAW,KACpF02I,EAAqBD,EAAiBA,EAAe/0L,SAASizD,cAAgB,GAC9EgiI,EAAev0L,GAAOA,EAAIoxC,QACH,OAAvBkjJ,GAAgCC,IAClC/+H,EAAc6+H,GAEZhzK,GAAoC,IAAvBA,EAAUE,UAAkBZ,GAAUU,EAAUssE,UAAU1vF,SACpE61L,GAAoB94L,EAAOq8C,OAAQh2B,EAAWm0C,KACjDw+H,EAAQ9sL,EAAIiE,OAAO,MACnB+V,EAAIwD,WAAWsvK,GACf9yK,EAAIgvC,cAAc8jI,GAClB9yK,EAAIivC,YAAY6jI,GAChBE,GAAU,IAGdF,EAAQ9sL,EAAIiE,OAAO,MACnB82J,GAAgB/6J,EAAKga,EAAK8yK,GAC1BD,GAAW7sL,EAAKL,EAAWmtL,GAC3BC,GAAkB/sL,EAAKL,EAAWmtL,EAAOE,GACzCl5L,EAAOgM,YAAY7E,OAEjBqyL,GAAiB,SAAUx5L,EAAQkQ,GACrC,IAAIm1H,EAAK99E,GAAQL,QAAQ,MACzBtkD,GAAO2kD,GAAQN,QAAQ/2C,GAASm1H,GAChCrlI,EAAOgM,YAAY7E,OAEjBsyL,GAAgB,SAAUz5L,EAAQkQ,GAC/BwpL,GAAW15L,EAAOoU,UAAWlE,IAChCvJ,GAAM4gD,GAAQN,QAAQ/2C,GAASq3C,GAAQL,QAAQ,OAEjD,IAAIm+E,EAAK99E,GAAQL,QAAQ,MACzBvgD,GAAM4gD,GAAQN,QAAQ/2C,GAASm1H,GAC/B0zD,GAAW/4L,EAAOkM,IAAKlM,EAAO6L,UAAWw5H,EAAGn5H,OAC5C+sL,GAAkBj5L,EAAOkM,IAAKlM,EAAO6L,UAAWw5H,EAAGn5H,OAAO,GAC1DlM,EAAOgM,YAAY7E,OAEjBwyL,GAAe,SAAUplJ,GAC3B,OAAO4O,GAASZ,KAAKhO,EAAIzoC,YAEvB4tL,GAAa,SAAUv2H,EAAUxM,GACnC,QAAIgjI,GAAa7zB,GAAgBn/J,MAAMgwD,KAG9B83G,GAAYF,aAAaprG,EAAU2iG,GAAgBn/J,MAAMgwD,IAAY/0D,KAAI,SAAU2yC,GACxF,OAAO4O,GAASZ,KAAKhO,EAAIzoC,cACxBiO,OAAM,IAGT6/K,GAAe,SAAU3xL,GAC3B,OAAOA,GAAwB,MAAjBA,EAAI3D,UAAoB,SAAU2D,GAE9C4xL,GAAiB,SAAU35I,GAC7B,OAAOA,EAAStmC,KAAK7O,GAAS,GAAQ6uL,GAAcA,GAAc7uL,GAAS,KAEzE+uL,GAA2B,SAAU95L,GACvC,IAAI+8K,EAAiBpkK,EAAM8kK,GAAYV,eAAgB/8K,GACnD63C,EAAWiuH,GAAgBP,eAAevlK,EAAO6L,UAAUyc,UAC/D,OAAO2hK,GAAiBf,aAAanM,EAAgB/8K,EAAOoU,UAAWyjC,GAAUhpC,OAAOgrL,KAEtFE,GAAwB,SAAU/5L,EAAQkgD,GAC5CA,EAAStmC,KAAKlB,EAAMC,EAAM6gL,GAAgBx5L,GAAS2Y,EAAM8gL,GAAez5L,GAAS0Y,IAE/E7V,GAAS,SAAU7C,EAAQgF,GAC7B,IAAIg1L,EAAiBF,GAAyB95L,GAC1Cg6L,EAAelgL,SACjBkgL,EAAelrL,KAAK6J,EAAMohL,GAAuB/5L,IAEjDm5L,GAAgBn5L,EAAQgF,IAGxBi1L,GAAW,CAAEp3L,OAAQA,IAErBg3H,GAAW/xE,GAAU,QAAS,UAAW,SAAU,WACnDgyE,GAAW,CAAE3pH,OAAQ0pH,IAErB/wB,GAAMO,GAAI5O,SAAS,CACrB,CAAE73F,OAAQ,CAAC,YACX,CACEgM,GAAI,CACF,UACA,WAGJ,CAAEjI,MAAO,CAAC,cAER8iG,GAAO,SAAUz+B,EAASivD,EAAUC,EAAMC,GAC5C,OAAOnvD,EAAQpxD,KAAKqgH,EAAUC,EAAMC,IAElCtlH,GAAW,SAAUulH,GACvB,OAAOA,EAAKxgH,KAAK4b,EAAUA,EAAUA,IAEnC2tG,GAAWr6B,GAAIlmG,OACfgM,GAAKk6F,GAAIl6F,GACTgwH,GAAU91B,GAAIniG,MACd4zH,GAAO,CACT33H,OAAQugI,GACRv0H,GAAIA,GACJjI,MAAOi4H,GACPn1B,KAAMA,GACN50F,SAAUA,IAGR0kH,GAAQlwB,GAAI5O,SAAS,CACvB,CAAEggC,SAAU,CAAC,QACb,CACEC,SAAU,CACR,YACA,eAGJ,CACEC,MAAO,CACL,QACA,UACA,SACA,cAIFC,GAAiB,SAAUC,GAC7B,OAAOtB,GAAMoB,MAAME,EAASp2G,QAASo2G,EAASC,UAAWD,EAASxhD,SAAUwhD,EAASE,YAEnFC,GAAa,SAAUnvH,GACzB,OAAOA,EAAU1J,MAAM,CACrBs4H,SAAU,SAAUv0G,GAClB,OAAOqhC,GAAQN,QAAQ/gC,EAAII,iBAE7Bo0G,SAAU,SAAUO,EAAWC,GAC7B,OAAOX,GAAK1lH,SAASomH,IAEvBN,MAAO,SAAUl2G,EAAOq2G,EAASzhD,EAAQ0hD,GACvC,OAAOt2G,MAITg2G,GAAWlB,GAAMkB,SACjBC,GAAWnB,GAAMmB,SACjBC,GAAQpB,GAAMoB,MACdQ,GAAS,SAAUtvH,GACrB,IAAI4Y,EAAQu2G,GAAWnvH,GACvB,OAAOsqF,GAAY1xE,IAEjBisD,GAAQopD,GAAS3pH,OACjB22C,GAAY,CACd2zE,SAAUA,GACVC,SAAUA,GACVC,MAAOA,GACPC,eAAgBA,GAChBO,OAAQA,GACRzqD,MAAOA,IAGLwpH,GAAY3sI,GAAoBvE,SAAS0C,QACzCr2B,GAAQ,SAAU1P,EAAQ5hB,GAC5B,IAAIqlB,EAAMlC,GAAOnjB,GAAWkoG,GAAMloG,GAASd,OAAS2Q,GAAS7P,GAASd,OAAS,EAC/E,OAAI0iB,EAASyD,EACJA,EACEzD,EAAS,EACX,EAEFA,GAELw0K,GAAe,SAAUj0K,GAC3B,OAAO4gC,GAAU4pB,MAAMxqD,EAAIzB,QAAS4Q,GAAMnP,EAAI40G,UAAW50G,EAAIzB,SAAUyB,EAAImzD,SAAUhkD,GAAMnP,EAAI60G,UAAW70G,EAAImzD,YAE5G+gH,GAAe,SAAUt3L,EAAMmF,GACjC,OAAQk7C,GAASknG,iBAAiBpiJ,EAAIiE,SAAWw6I,GAAW5jJ,EAAMmF,IAAQsR,GAAGzW,EAAMmF,KAEjFoyL,GAAc,SAAUv3L,GAC1B,OAAO,SAAUojB,GACf,OAAOk0K,GAAat3L,EAAMojB,EAAIzB,UAAY21K,GAAat3L,EAAMojB,EAAImzD,YAGjEihH,GAAc,SAAUt6L,GAC1B,OAAyB,IAAlBA,EAAOkQ,QAAmBgqL,GAAUjwI,QAEzCswI,GAA8B,SAAUt+K,GAC1C,OAAO6qC,GAAU4pB,MAAMnpB,GAAQN,QAAQhrC,EAAEqK,gBAAiBrK,EAAEwK,YAAa8gC,GAAQN,QAAQhrC,EAAEynC,cAAeznC,EAAEyK,YAE1Gg5G,GAAY,SAAU35F,GACxB,IAAIl6B,EAAYk6B,EAAIg5F,eAChB74G,EAAOra,GAAsC,IAAzBA,EAAU8zH,WAAmCtkH,EAAO/U,KAAKuF,EAAUg0H,WAAW,IAAjDxkH,EAAOhC,OAC5D,OAAO6M,EAAItkB,IAAI24L,KAEbC,GAAgB,SAAU13L,GAC5B,IAAIijC,EAAMowD,GAAYrzF,GACtB,OAAO48H,GAAU35F,EAAI75B,OAAO2C,OAAOwrL,GAAYv3L,KAE7C8c,GAAW,SAAU9c,EAAM+gD,GAC7B,OAAOxoC,EAAO/U,KAAKu9C,GAAUh1C,OAAOwrL,GAAYv3L,IAAOlB,IAAIu4L,KAEzDM,GAAsB,SAAU52I,GAClC,IAAI39B,EAAMjnB,EAAW4E,SAAS+iB,cAC9B,IAGE,OAFAV,EAAIW,SAASg9B,EAASp/B,QAAQvY,MAAO23C,EAASi3E,WAC9C50G,EAAIY,OAAO+8B,EAASw1B,SAASntE,MAAO23C,EAASk3E,WACtC1/G,EAAOL,KAAKkL,GACnB,MAAO7kB,GACP,OAAOga,EAAOhC,SAGdqhL,GAAQ,SAAU16L,GACpB,IAAI26L,EAAcL,GAAYt6L,GAAUw6L,GAAcjzI,GAAQN,QAAQjnD,EAAOoU,YAAciH,EAAOhC,OAClGrZ,EAAO6jD,SAAW82I,EAAY7gL,SAAW6gL,EAAc36L,EAAO6jD,UAE5D+2I,GAAc,SAAU56L,EAAQkmB,GAClC,IAAIpjB,EAAOykD,GAAQN,QAAQjnD,EAAOoU,WAC9Bs8D,EAAQ4pH,GAAYt6L,GAAUqb,EAAO/U,KAAK4f,GAAO7K,EAAOhC,OACxDshL,EAAcjqH,EAAM9uE,IAAI24L,IAA6B1rL,OAAOwrL,GAAYv3L,IAC5E9C,EAAO6jD,SAAW82I,EAAY7gL,SAAW6gL,EAAc36L,EAAO6jD,UAE5Dv7B,GAAS,SAAUtoB,GACrB,IAAI6jD,EAAW7jD,EAAO6jD,SAAW7jD,EAAO6jD,SAAWxoC,EAAOhC,OAC1D,OAAOwqC,EAASppC,KAAK9B,EAAMiH,GAAU2nC,GAAQN,QAAQjnD,EAAOoU,aAAaqG,KAAKggL,KAE5EI,GAAU,SAAU76L,GACtBsoB,GAAOtoB,GAAQ8O,MAAK,SAAUoX,GAC5BlmB,EAAO6L,UAAU0b,OAAOrB,OAGxB40K,GAAoB,CACtBJ,MAAOA,GACPE,YAAaA,GACbl7D,UAAWA,GACXm7D,QAASA,GACTvyK,OAAQA,GACRutC,YAAa2kI,GACb56K,SAAUA,IAGRm7K,GAAgB,SAAU7uL,EAAKivD,EAAS6/H,EAAW57L,EAAO4vG,EAAMjrG,GAClE,GAAwC,UAApCmI,EAAIorD,mBAAmBvzD,GAA3B,CAGA,IAAIk3L,EAAkBD,EAAY,SAAW,UAG7C,GAFAC,EAAuC,UAArBl3L,EAAQO,SAAuB,SAAW22L,EAC5DA,GAAgE,QAA7C/uL,EAAI+oC,SAASlxC,EAAS,aAAa,GAAkB,QAAU,OAClE,YAAZo3D,EAAuB,CACzB,IAAIqH,EAAaliE,KAAK8oB,IAAI,EAAG5X,SAASzN,EAAQ8F,MAAMoxL,IAAoB,EAAG,IAAM77L,GACjF8M,EAAIkqD,SAASryD,EAASk3L,EAAiBz4H,EAAaA,EAAawsC,EAAO,QACnE,CACDxsC,EAAahxD,SAASzN,EAAQ8F,MAAMoxL,IAAoB,EAAG,IAAM77L,EAAQ4vG,EAC7E9iG,EAAIkqD,SAASryD,EAASk3L,EAAiBz4H,MAGvC04H,GAAkB,SAAU5oL,GAC9B,OAAOu0C,GAAOv0C,IAAO+yG,GAAW/yG,IAE9B6oL,GAAwB,SAAU7oL,GACpC,OAAOpO,GAAOoO,GAAI1Q,IAAIs5L,IAAiBnhL,OAAM,IAE3CqhL,GAAoB,SAAUp7L,GAChC,OAAO6O,EAAOjN,EAAI5B,EAAO6L,UAAU45C,oBAAqB8B,GAAQN,UAAU,SAAU30C,GAClF,OAAQ4oL,GAAgB5oL,KAAQ6oL,GAAsB7oL,OAGtDsd,GAAS,SAAU5vB,EAAQm7D,GAC7B,IAAIl7D,EAAWD,EAAOC,SAAUiM,EAAMlM,EAAOkM,IAAKL,EAAY7L,EAAO6L,UAAW2C,EAAYxO,EAAOwO,UAC/F6sL,EAAa,YAAYh1L,KAAKpG,EAASsyD,aAAa,GACpD+oI,EAAc9pL,SAASvR,EAASsyD,YAAa,IAC7CyoI,EAAYh7L,EAAOW,SAAS,qBAAqB,GAChDX,EAAOu7L,kBAAkB,wBAA2Bv7L,EAAOu7L,kBAAkB,sBAC3Et7L,EAAS4zD,mBAAsB3nD,EAAIyL,UAAU9L,EAAUC,UAAWI,EAAI02C,UACzEp0C,EAAUvH,MAAM,OAGpB6H,EAAKssL,GAAkBp7L,IAAS,SAAUqpB,GACxC0xK,GAAc7uL,EAAKivD,EAAS6/H,EAAWM,EAAaD,EAAYhyK,EAAMnd,WAItEsvL,GAAS57L,GAAMkP,KAAM2sL,GAAW77L,GAAM2C,OACtCm5L,GAAQ97L,GAAMgC,IAAK+5L,GAAY/7L,GAAMkuC,QACzC,SAAS8tJ,GAAgB57L,GACvB,IAAIkM,EAAKL,EAAW2C,EAMYq1C,EAL5Bg4I,EAAW,CACbp8J,MAAO,GACPp5B,KAAM,GACNjH,MAAO,IAELa,EAAWD,EAAOC,SACtBD,EAAO4O,GAAG,WAAW,WACnB1C,EAAMlM,EAAOkM,IACbL,EAAY7L,EAAO6L,UACnB5L,EAAWD,EAAOC,SAClBuO,EAAYxO,EAAOwO,aAErB,IAAI4I,EAAc,SAAU+jD,EAASroB,EAAI1zC,EAAOwH,GAC9C,IAAIwrH,EAAM0pE,EAAer8J,GAAQ,EACjC,IAAIz/B,EAAO0/B,QAAX,CAaA,GAVK,mEAAmEv7B,KAAKg3D,IAAcv0D,GAASA,EAAKm1L,WAGvGjB,GAAkBD,QAAQ76L,GAF1BA,EAAOkV,QAITtO,EAAO5G,EAAO2hC,KAAK,oBAAqB,CACtCw5B,QAASA,EACTroB,GAAIA,EACJ1zC,MAAOA,IAELwH,EAAKi9D,qBACP,OAAO,EAGT,GADAi4H,EAAgB3gI,EAAQ56C,cACpB6xG,EAAOypE,EAASx1L,KAAKy1L,GAOvB,OANA1pE,EAAK0pE,EAAehpJ,EAAI1zC,GACxBY,EAAO2hC,KAAK,cAAe,CACzBw5B,QAASA,EACTroB,GAAIA,EACJ1zC,MAAOA,KAEF,EAaT,GAXAo8L,GAAOx7L,EAAOyD,SAAS,SAAUi7B,GAC/B,GAAIA,EAAEtnB,aAAesnB,EAAEtnB,YAAY+jD,EAASroB,EAAI1zC,GAO9C,OANAY,EAAO2hC,KAAK,cAAe,CACzBw5B,QAASA,EACTroB,GAAIA,EACJ1zC,MAAOA,IAETqgC,GAAQ,GACD,KAGPA,EACF,OAAOA,EAET,GAAIz/B,EAAOg8L,OAASh8L,EAAOg8L,MAAM5kL,aAAepX,EAAOg8L,MAAM5kL,YAAY+jD,EAASroB,EAAI1zC,GAMpF,OALAY,EAAO2hC,KAAK,cAAe,CACzBw5B,QAASA,EACTroB,GAAIA,EACJ1zC,MAAOA,KAEF,EAET,IACEqgC,EAAQz/B,EAAOyP,SAAS2H,YAAY+jD,EAASroB,EAAI1zC,GACjD,MAAOoxB,IAET,QAAIiP,IACFz/B,EAAO2hC,KAAK,cAAe,CACzBw5B,QAASA,EACTroB,GAAIA,EACJ1zC,MAAOA,KAEF,KAIPm8L,EAAoB,SAAUpgI,GAChC,IAAIi3D,EACJ,IAAIpyH,EAAOg9D,OAAO48F,aAAc55J,EAAO0/B,QAAvC,CAIA,GADAy7B,EAAUA,EAAQ56C,cACd6xG,EAAOypE,EAASp8J,MAAM07B,GACxB,OAAOi3D,EAAKj3D,GAEd,IACE,OAAOn7D,EAAOyP,SAAS8rL,kBAAkBpgI,GACzC,MAAO3qC,IAET,OAAO,IAELyrK,EAAoB,SAAU9gI,GAChC,IAAIi3D,EACJ,IAAIpyH,EAAOg9D,OAAO48F,aAAc55J,EAAO0/B,QAAvC,CAIA,GADAy7B,EAAUA,EAAQ56C,cACd6xG,EAAOypE,EAASz8L,MAAM+7D,GACxB,OAAOi3D,EAAKj3D,GAEd,IACE,OAAOn7D,EAAOyP,SAASwsL,kBAAkB9gI,GACzC,MAAO3qC,OAGP0rK,EAAc,SAAUC,EAAa16L,GACvCA,EAAOA,GAAQ,OACf+5L,GAAOW,GAAa,SAAU54L,EAAU43D,GACtCqgI,GAAOrgI,EAAQ56C,cAAcc,MAAM,MAAM,SAAU85C,GACjD0gI,EAASp6L,GAAM05D,GAAW53D,SAI5B+K,EAAa,SAAU6sD,EAAS53D,EAAUk7B,GAC5C08B,EAAUA,EAAQ56C,cAClBs7K,EAASx1L,KAAK80D,GAAW,SAAUA,EAASroB,EAAI1zC,EAAOwH,GACrD,OAAOrD,EAASrB,KAAKu8B,GAASz+B,EAAQ8yC,EAAI1zC,EAAOwH,KAGjDw1L,EAAwB,SAAUjhI,GAEpC,GADAA,EAAUA,EAAQ56C,cACds7K,EAASx1L,KAAK80D,GAChB,OAAO,EAET,IACE,OAAOn7D,EAAOyP,SAAS2sL,sBAAsBjhI,GAC7C,MAAO3qC,IAET,OAAO,GAEL4qC,EAAuB,SAAUD,EAAS53D,EAAUk7B,GACtD08B,EAAUA,EAAQ56C,cAClBs7K,EAASp8J,MAAM07B,GAAW,WACxB,OAAO53D,EAASrB,KAAKu8B,GAASz+B,KAG9Bq8L,EAAuB,SAAUlhI,EAAS53D,EAAUk7B,GACtD08B,EAAUA,EAAQ56C,cAClBs7K,EAASz8L,MAAM+7D,GAAW,WACxB,OAAO53D,EAASrB,KAAKu8B,GAASz+B,KAG9Bs8L,EAAmB,SAAUnhI,GAE/B,OADAA,EAAUA,EAAQ56C,gBACTs7K,EAASx1L,KAAK80D,IAEzBsgI,GAASn4L,KAAM,CACb8T,YAAaA,EACbmkL,kBAAmBA,EACnBU,kBAAmBA,EACnBG,sBAAuBA,EACvBF,YAAaA,EACb5tL,WAAYA,EACZ8sD,qBAAsBA,EACtBihI,qBAAsBA,EACtBC,iBAAkBA,IAEpB,IAAIC,EAAoB,SAAUphI,EAASroB,EAAI1zC,GAO7C,YANWkb,IAAPw4B,IACFA,GAAK,QAEOx4B,IAAVlb,IACFA,EAAQ,MAEHY,EAAOyP,SAAS2H,YAAY+jD,EAASroB,EAAI1zC,IAE9Co9L,EAAgB,SAAUp1L,GAC5B,OAAOoH,EAAUrM,MAAMiF,IAErBq1L,EAAe,SAAUr1L,EAAMhI,GACjCoP,EAAUC,OAAOrH,EAAMhI,EAAQ,CAAEA,MAAOA,QAAUkb,GAClDta,EAAOmV,eAELunL,EAAiB,SAAUj7L,GAC7BoiD,EAAWh4C,EAAUgqD,YAAYp0D,IAE/Bk7L,EAAmB,WACrB9wL,EAAUiqD,eAAejS,IAE3Bq4I,EAAY,CACV,uCAAwC,aAExC,kCAAmC,WACjCl8L,EAAOgM,YAAY7E,OAErB,iBAAkB,SAAUg0D,GAC1B,IACI6sF,EADAp/H,EAAM5oB,EAAOyP,SAEjB,IACE8sL,EAAkBphI,GAClB,MAAO3qC,GACPw3H,GAAS,EAKX,GAHgB,UAAZ7sF,GAAwBvyC,EAAIg0K,oBAAoBzhI,KAClD6sF,GAAS,GAEPA,IAAWp/H,EAAIwzK,sBAAsBjhI,GAAU,CACjD,IAAIjhD,EAAMla,EAAOoT,UAAU,sHACvBy+H,GAAIz1H,MACNlC,EAAMA,EAAIrY,QAAQ,UAAW,OAE/B7B,EAAOytC,oBAAoBxgC,KAAK,CAC9BxH,KAAMyU,EACNzY,KAAM,YAIZ,OAAU,WACR,GAAIoK,EAAU0C,cAAd,CACE,IAAItG,EAAMjI,EAAOkM,IAAIyL,UAAU3X,EAAO6L,UAAUgJ,WAAY,KACxD5M,GACFjI,EAAOkM,IAAImJ,OAAOpN,GAAK,QAI3BuG,EAAU6G,OAAO,SAEnB,iEAAkE,SAAU8lD,GAC1E,IAAIztD,EAAQytD,EAAQh6C,UAAU,GAChB,SAAVzT,IACFA,EAAQ,WAEV8tL,GAAO,4BAA4Bn6K,MAAM,MAAM,SAAUja,GACnDsG,IAAUtG,GACZoH,EAAU6G,OAAO,QAAUjO,MAGjB,SAAVsG,GACF+uL,EAAa,QAAU/uL,IAG3B,wCAAyC,SAAUytD,GACjD,IAAIm1B,EAASusG,EACbN,EAAkBphI,GAClBm1B,EAAUpkF,EAAIyL,UAAU9L,EAAUC,UAAW,SACzCwkF,IACFusG,EAAavsG,EAAQjsF,WACjB,2BAA2BF,KAAK04L,EAAWv4L,YAC7Co4L,IACAxwL,EAAImV,MAAMw7K,EAAYvsG,GACtBqsG,OAIN,4DAA6D,SAAUxhI,GACrEshI,EAAathI,IAEf,wBAAyB,SAAUA,EAASroB,EAAI1zC,GAC9Cq9L,EAAathI,EAAS/7D,IAExB,SAAY,SAAU+7D,EAASroB,EAAI1zC,GACjCi4L,GAAer3L,EAAQZ,IAEzB,SAAY,SAAU+7D,EAASroB,EAAI1zC,GACjCm4L,GAAev3L,EAAQZ,IAEzB,aAAgB,SAAU+7D,GACxB3sD,EAAU6G,OAAO8lD,IAEnB,cAAiB,WACfshI,EAAa,eAEf,YAAe,SAAUthI,EAASroB,EAAI1zC,GACpC,OAAOq9L,EAAar9L,GAAS,MAE/B,WAAc,WACZ,IAAIykD,EAAWh4C,EAAUgqD,cACzB71D,EAAOy8C,WAAWz8C,EAAOktB,cACzBrhB,EAAUiqD,eAAejS,IAE3B,cAAiB,SAAUsX,EAASroB,EAAI1zC,GACtC,IAAIwM,EAAOxM,GAASyM,EAAUC,UAC1BF,IAAS5L,EAAOoU,YAClBsoL,IACA18L,EAAOkM,IAAImJ,OAAOzJ,GAAM,GACxB+wL,MAGJ,mBAAsB,SAAUxhI,EAASroB,EAAI1zC,GAC3C,IAAIsS,EAAU,EACdxF,EAAIyL,UAAU9L,EAAUC,WAAW,SAAUF,GAC3C,GAAsB,IAAlBA,EAAK2a,UAAkB7U,MAActS,EAEvC,OADAyM,EAAUO,OAAOR,IACV,IAER5L,EAAOoU,YAEZ,cAAiB,SAAU+mD,EAASroB,EAAI1zC,GACtCyM,EAAUO,OAAOhN,IAEnB,iBAAoB,SAAU+7D,EAASroB,EAAI1zC,GACzC67K,GAAc5E,cAAcr2K,EAAQZ,IAEtC,iBAAoB,SAAU+7D,EAASroB,EAAI1zC,GACzCyM,EAAU4wC,WAAW,mBACrB,IAAI/6C,EAAU1B,EAAOktB,aACrBltB,EAAOy8C,WAAW/6C,EAAQG,QAAQ,oBAAoB,WACpD,OAAOzC,OAGX,gBAAmB,SAAU+7D,EAASroB,EAAI1zC,GACxCq9L,EAAar9L,IAEf,cAAiB,SAAU+7D,EAASroB,EAAI1zC,GACtCY,EAAOy8C,WAAWr9C,IAEpB,iBAAkB,SAAU+7D,GAC1BvrC,GAAO5vB,EAAQm7D,IAEjB,WAAc,aAEd,qBAAwB,WACtBn7D,EAAOoX,YAAY,oBAAoB,EAAO,WAEhD,mBAAsB,WACpBpX,EAAO88L,WAAa98L,EAAO88L,UAC3B98L,EAAOizC,aAET,kBAAqB,SAAUkoB,EAASroB,EAAI1zC,GAC1CY,EAAOoX,YAAY,oBAAoB,EAAOhY,EAAMyC,QAAQ,mBAAoBgK,EAAUqhB,WAAW,CAAEvY,OAAQ,YAEjH,cAAiB,SAAUwmD,EAASroB,EAAI1zC,GACtC,IAAIsgF,EACiB,kBAAVtgF,IACTA,EAAQ,CAAEiR,KAAMjR,IAElBsgF,EAASxzE,EAAIyL,UAAU9L,EAAUC,UAAW,KAC5C1M,EAAMiR,KAAOjR,EAAMiR,KAAKxO,QAAQ,IAAK,OAChC69E,GAAWtgF,EAAMiR,MACpB7B,EAAU6G,OAAO,QAEfjW,EAAMiR,MACR7B,EAAUvH,MAAM,OAAQ7H,EAAOsgF,IAGnC,UAAa,WACX,IAAIq9G,EAAc7wL,EAAIyL,UAAU9L,EAAUgJ,WAAYsuC,GAAS2zE,uBAC/D,GAAIimE,EAAa,CACf,IAAI72K,EAAMha,EAAIob,YACdpB,EAAI0qD,mBAAmBmsH,GACvBlxL,EAAU0b,OAAOrB,KAGrB,OAAU,WACR6vK,GAAeF,cAAc71L,IAE/B,cAAiB,WACf+1L,GAAeD,qBAAqB91L,IAEtC,eAAkB,WAChBA,EAAOy8C,WAAW,KAEpB,gBAAmB,SAAU0e,EAASroB,EAAI1zC,GAExC,OADA66L,GAASp3L,OAAO7C,EAAQZ,IACjB,KAGX,IAAI49L,EAAc,SAAU51L,GAC1B,OAAO,WACL,IAAIkM,EAAQzH,EAAU0C,cAAgB,CAACrC,EAAIyL,UAAU9L,EAAUC,UAAWI,EAAI02C,UAAY/2C,EAAU45C,oBAChG34C,EAAU4uL,GAAMpoL,GAAO,SAAU1H,GACnC,QAAS4C,EAAU6+G,UAAUzhH,EAAMxE,MAErC,OAAqC,IAA9Bu0L,GAAU7uL,GAAS,KAG9BovL,EAAY,CACV,YAAec,EAAY,aAC3B,cAAiBA,EAAY,eAC7B,aAAgBA,EAAY,cAC5B,YAAeA,EAAY,gBAC3B,4DAA6D,SAAU7hI,GACrE,OAAOqhI,EAAcrhI,IAEvB,cAAiB,WACf,OAAOqhI,EAAc,eAEvB,QAAW,WACT,IAAI5wL,EACJ,GAAI3L,EAASg9L,cAAe,CAC1B,IAAKrxL,EAAOM,EAAIyL,UAAU9L,EAAUgJ,WAAY3I,EAAI02C,WAAapxC,SAAS5F,EAAK/B,MAAMqzL,YAAa,IAAM,EACtG,OAAO,EAET,IAAKtxL,EAAOM,EAAIyL,UAAU9L,EAAUoxF,SAAU/wF,EAAI02C,WAAapxC,SAAS5F,EAAK/B,MAAMqzL,YAAa,IAAM,EACpG,OAAO,EAGX,OAAO3B,EAAkB,wBAA0BA,EAAkB,uBAAyBt7L,EAASg9L,iBAAmB/wL,EAAIyL,UAAU9L,EAAUC,UAAW,eAE/J,wCAAyC,SAAUqvD,GACjD,IAAIvU,EAAO16C,EAAIyL,UAAU9L,EAAUC,UAAW,SAC9C,OAAO86C,IAAqB,wBAAZuU,GAAsD,OAAjBvU,EAAKv1C,SAAgC,sBAAZ8pD,GAAoD,OAAjBvU,EAAKv1C,WAEvH,SACH6qL,EAAY,CACViB,KAAM,WACJn9L,EAAOgM,YAAY2zB,QAErBy9J,KAAM,WACJp9L,EAAOgM,YAAY6zB,UAGvBw8J,EAAqB,YAAY,WAC/B,OAAO/E,GAAct3L,KACpBsD,MACH+4L,EAAqB,YAAY,WAC/B,OAAO7E,GAAcx3L,KACpBsD,MAGL,IAAI+5L,GAAez9L,GAAM+gE,QAAQ,6VAA6W,KAC1Y28H,GAAa,SAAUr9L,GACzB,IACIw+B,EAAsB8+J,EADtBr8L,EAAOoC,KACAk6L,EAAW,GAClB3pD,EAAc,WAChB,OAAO,GAELD,EAAa,WACf,OAAO,GAET3zI,EAAWA,GAAY,GACvBw+B,EAAQx+B,EAASw+B,OAASv9B,EAC1Bq8L,EAAct9L,EAASs9L,aAAe1pD,EACtC,IAAIlyG,EAAO,SAAUv6B,EAAMR,GACzB,IAAImsH,EAAUvvH,EAAG4zE,EAAG7zE,EAyBpB,GAxBA6D,EAAOA,EAAKmZ,cACZ3Z,EAAOA,GAAQ,GACfA,EAAKnF,KAAO2F,EACPR,EAAKqK,SACRrK,EAAKqK,OAASwtB,GAEX73B,EAAK27B,iBACR37B,EAAK27B,eAAiB,WACpB37B,EAAKi9D,mBAAqB+vE,GAE5BhtI,EAAK07B,gBAAkB,WACrB17B,EAAK8tI,qBAAuBd,GAE9BhtI,EAAKsnE,yBAA2B,WAC9BtnE,EAAKguI,8BAAgChB,GAEvChtI,EAAKi9D,mBAAqBgwE,EAC1BjtI,EAAK8tI,qBAAuBb,EAC5BjtI,EAAKguI,8BAAgCf,GAEnC5zI,EAASw9L,YACXx9L,EAASw9L,WAAW72L,GAEtBmsH,EAAWyqE,EAASp2L,GAChB2rH,EACF,IAAKvvH,EAAI,EAAG4zE,EAAI27C,EAAS9vH,OAAQO,EAAI4zE,EAAG5zE,IAAK,CAK3C,GAJAD,EAAWwvH,EAASvvH,GAChBD,EAASsjE,MACX73B,EAAI5nC,EAAM7D,EAAS6uH,MAEjBxrH,EAAKguI,gCAEP,OADAhuI,EAAK07B,kBACE17B,EAET,IAAwC,IAApCrD,EAAS6uH,KAAKlwH,KAAKu8B,EAAO73B,GAE5B,OADAA,EAAK27B,iBACE37B,EAIb,OAAOA,GAELgI,EAAK,SAAUxH,EAAM7D,EAAUizF,EAAS/xB,GAC1C,IAAIsuD,EAAU+iB,EAAOtyI,EAIrB,IAHiB,IAAbD,IACFA,EAAWswI,GAETtwI,EAAU,CACZA,EAAW,CAAE6uH,KAAM7uH,GACfkhE,GACF7kE,GAAM2C,OAAOgB,EAAUkhE,GAEzBqxE,EAAQ1uI,EAAKmZ,cAAcc,MAAM,KACjC7d,EAAIsyI,EAAM7yI,OACV,MAAOO,IACL4D,EAAO0uI,EAAMtyI,GACbuvH,EAAWyqE,EAASp2L,GACf2rH,IACHA,EAAWyqE,EAASp2L,GAAQ,GAC5Bm2L,EAAYn2L,GAAM,IAEhBovF,EACFu8B,EAASpzC,QAAQp8E,GAEjBwvH,EAASlsH,KAAKtD,GAIpB,OAAOrC,GAEL8tC,EAAM,SAAU5nC,EAAM7D,GACxB,IAAIC,EAAGuvH,EAAU2qE,EAAa5nD,EAAO6nD,EACrC,GAAIv2L,EAAM,CACR0uI,EAAQ1uI,EAAKmZ,cAAcc,MAAM,KACjC7d,EAAIsyI,EAAM7yI,OACV,MAAOO,IAAK,CAGV,GAFA4D,EAAO0uI,EAAMtyI,GACbuvH,EAAWyqE,EAASp2L,IACfA,EAAM,CACT,IAAKs2L,KAAeF,EAClBD,EAAYG,GAAa,UAClBF,EAASE,GAElB,OAAOx8L,EAET,GAAI6xH,EAAU,CACZ,GAAKxvH,EAEE,CACLo6L,EAAK5qE,EAAS9vH,OACd,MAAO06L,IACD5qE,EAAS4qE,GAAIvrE,OAAS7uH,IACxBwvH,EAAWA,EAASvsH,MAAM,EAAGm3L,GAAI3kL,OAAO+5G,EAASvsH,MAAMm3L,EAAK,IAC5DH,EAASp2L,GAAQ2rH,QANrBA,EAAS9vH,OAAS,EAUf8vH,EAAS9vH,SACZs6L,EAAYn2L,GAAM,UACXo2L,EAASp2L,UAIjB,CACL,IAAKA,KAAQo2L,EACXD,EAAYn2L,GAAM,GAEpBo2L,EAAW,GAEb,OAAOt8L,GAEL2lE,EAAO,SAAUz/D,EAAM7D,EAAUizF,GACnC,OAAO5nF,EAAGxH,EAAM7D,EAAUizF,EAAS,CAAE3vB,MAAM,KAEzCziD,EAAM,SAAUhd,GAElB,OADAA,EAAOA,EAAKmZ,iBACFi9K,EAASp2L,IAAmC,IAA1Bo2L,EAASp2L,GAAMnE,SAE7C/B,EAAKygC,KAAOA,EACZzgC,EAAK0N,GAAKA,EACV1N,EAAK8tC,IAAMA,EACX9tC,EAAK2lE,KAAOA,EACZ3lE,EAAKkjB,IAAMA,GAEbk5K,GAAWM,SAAW,SAAUx2L,GAC9B,QAASi2L,GAAaj2L,EAAKmZ,gBAG7B,IAoIIs9K,GApIAC,GAAqB,SAAU7gL,GAWjC,OAVKA,EAAI8gL,mBACP9gL,EAAI8gL,iBAAmB,IAAIT,GAAW,CACpC7+J,MAAOxhB,EACPsgL,YAAa,SAAUn2L,EAAMq4B,GACvB69J,GAAWM,SAASx2L,IAAS6V,EAAI+gL,mBACnC/gL,EAAI+gL,kBAAkB52L,EAAMq4B,OAK7BxiB,EAAI8gL,kBAETE,GAAa,CACft8J,KAAM,SAAUv6B,EAAMR,EAAMs3L,GAC1B,IAAIh9L,EAAOoC,KACX,GAAIpC,EAAKw+B,SAAoB,WAATt4B,GAA8B,WAATA,EACvC,OAAOR,EAGT,GADAA,EAAOk3L,GAAmB58L,GAAMygC,KAAKv6B,EAAMR,EAAMs3L,IAClC,IAAXA,GAAoBh9L,EAAKgD,OAAQ,CACnC,IAAIA,EAAShD,EAAKgD,SAClB,MAAOA,IAAW0C,EAAK8tI,uBACrBxwI,EAAOy9B,KAAKv6B,EAAMR,GAAM,GACxB1C,EAASA,EAAOA,SAGpB,OAAO0C,GAETgI,GAAI,SAAUxH,EAAM7D,EAAUizF,GAC5B,OAAOsnG,GAAmBx6L,MAAMsL,GAAGxH,EAAM7D,EAAUizF,IAErDxnD,IAAK,SAAU5nC,EAAM7D,GACnB,OAAOu6L,GAAmBx6L,MAAM0rC,IAAI5nC,EAAM7D,IAE5CsjE,KAAM,SAAUz/D,EAAM7D,GACpB,OAAOu6L,GAAmBx6L,MAAMujE,KAAKz/D,EAAM7D,IAE7C0gE,kBAAmB,SAAU78D,GAC3B,OAAO02L,GAAmBx6L,MAAM8gB,IAAIhd,KAIpC+2L,GAAiB,SAAUn+L,EAAQ4G,GACrC,OAAO5G,EAAO2hC,KAAK,aAAc/6B,IAE/Bw3L,GAAkB,SAAUp+L,EAAQ4G,GACtC,OAAO5G,EAAO2hC,KAAK,cAAe/6B,IAEhCy3L,GAAa,SAAUr+L,GACzB,OAAOA,EAAO2hC,KAAK,WAEjB28J,GAAa,SAAUt+L,GACzB,OAAOA,EAAO2hC,KAAK,WAEjB48J,GAAiB,SAAUv+L,EAAQu1H,GACrC,OAAOv1H,EAAO2hC,KAAK,aAAc,CAAE4zF,KAAMA,KAEvC/K,GAAwB,SAAUxqH,EAAQiR,EAAQ8c,EAAOC,GAC3DhuB,EAAO2hC,KAAK,oBAAqB,CAC/B1wB,OAAQA,EACR8c,MAAOA,EACPC,OAAQA,KAGRy8F,GAAoB,SAAUzqH,EAAQiR,EAAQ8c,EAAOC,GACvDhuB,EAAO2hC,KAAK,gBAAiB,CAC3B1wB,OAAQA,EACR8c,MAAOA,EACPC,OAAQA,KAGRyvC,GAAS,CACX0gI,eAAgBA,GAChBC,gBAAiBA,GACjBC,WAAYA,GACZC,WAAYA,GACZC,eAAgBA,GAChB/zE,sBAAuBA,GACvBC,kBAAmBA,IAGjB+zE,GAAwB,SAAUx+L,EAAQ2Q,EAAK8uB,GACjD,IACEz/B,EAAOyP,SAAS2H,YAAYzG,GAAK,EAAO8uB,GACxC,MAAOjP,MAGP+gE,GAAc,SAAUtpF,EAAK0xJ,EAAKl6H,GAChCk+H,GAAM11J,EAAK0xJ,KAAkB,IAAVl6H,EACrBi0E,GAASzrG,EAAK0xJ,GACLl6H,GACTk0E,GAAM1rG,EAAK0xJ,IAGX8kC,GAAiB,SAAUz+L,EAAQy/B,GACrC8xD,GAAYhqC,GAAQN,QAAQjnD,EAAOoU,WAAY,uBAAwBqrB,GACnEA,GACFz/B,EAAO6L,UAAU6yL,iBAAiBC,iBAClC3+L,EAAOiU,UAAW,EAClBjU,EAAOoU,UAAU9E,gBAAkB,UAEnCtP,EAAOiU,UAAW,EAClBjU,EAAOoU,UAAU9E,gBAAkB,OACnCkvL,GAAsBx+L,EAAQ,gBAAgB,GAC9Cw+L,GAAsBx+L,EAAQ,4BAA4B,GAC1Dw+L,GAAsBx+L,EAAQ,wBAAwB,GACtDA,EAAOkV,QACPlV,EAAOmV,gBAGPypL,GAAU,SAAU5+L,EAAQu1H,GAC1BA,IAASspE,GAAQ7+L,KAGjBA,EAAO8+L,YACTL,GAAez+L,EAAiB,aAATu1H,GAEvBv1H,EAAO4O,GAAG,QAAQ,WAChB6vL,GAAez+L,EAAiB,aAATu1H,MAG3B93D,GAAO8gI,eAAev+L,EAAQu1H,KAE5BspE,GAAU,SAAU7+L,GACtB,OAAOA,EAAOiU,SAAW,WAAa,UAEpC8qL,GAAa,SAAU/+L,GACzB,OAA2B,IAApBA,EAAOiU,UAGZygD,GAAQqmG,GAAWv6J,IAEnBw+L,GAAiB,SAAUh/L,EAAQi/L,GACrC,MAAkB,oBAAdA,EACKj/L,EAAOyP,UAEXzP,EAAOkQ,QAAU,uDAAuD/L,KAAK86L,GACzEj/L,EAAOyP,SAAS4rE,gBAErBr7E,EAAOC,SAASi/L,YACbl/L,EAAOm/L,YACVn/L,EAAOm/L,UAAYzqI,GAAMtoD,OAAOpM,EAAOC,SAASi/L,YAAY,IAEvDl/L,EAAOm/L,WAETn/L,EAAOoU,WAEZgrL,GAAc,SAAUp/L,GAC1B,OAAQA,EAAOq/L,SAAWr/L,EAAOiU,UAE/BqrL,GAAY,SAAUt/L,EAAQi/L,EAAW7wL,GACvCgxL,GAAYp/L,GACdA,EAAO2hC,KAAKs9J,EAAW7wL,GACd2wL,GAAW/+L,IACpBoO,EAAEm0B,kBAGFg9J,GAAoB,SAAUv/L,EAAQi/L,GACxC,IAAIO,EAAc7oE,EAIlB,GAHK32H,EAAOy/L,YACVz/L,EAAOy/L,UAAY,KAEjBz/L,EAAOy/L,UAAUR,KAAcj/L,EAAO0/B,QAI1C,GADA8/J,EAAeR,GAAeh/L,EAAQi/L,GAClCj/L,EAAOC,SAASi/L,WAAY,CAe9B,GAdKrB,KACHA,GAA2B,GAC3B79L,EAAO0/L,cAAc9wL,GAAG,gBAAgB,WACtC,IAAIxH,EACJ,IAAKpH,EAAO0/L,cAAcC,cACpB9B,GAA0B,CAC5B,IAAKz2L,KAAQy2L,GACX79L,EAAOkM,IAAIijE,OAAO6vH,GAAeh/L,EAAQoH,IAE3Cy2L,GAA2B,UAK/BA,GAAyBoB,GAC3B,OAEFtoE,EAAW,SAAUvoH,GACnB,IAAI6C,EAAS7C,EAAE6C,OACX2uL,EAAU5/L,EAAO0/L,cAAcrgM,MAC/BmE,EAAIo8L,EAAQ38L,OAChB,MAAOO,IAAK,CACV,IAAImK,EAAOiyL,EAAQp8L,GAAG4Q,WAClBzG,IAASsD,GAAUyjD,GAAMxR,UAAUjyC,EAAQtD,KAC7C2xL,GAAUM,EAAQp8L,GAAIy7L,EAAW7wL,KAIvCyvL,GAAyBoB,GAAatoE,EACtCjiE,GAAMj6C,KAAK+kL,EAAcP,EAAWtoE,QAEpCA,EAAW,SAAUvoH,GACnBkxL,GAAUt/L,EAAQi/L,EAAW7wL,IAE/BsmD,GAAMj6C,KAAK+kL,EAAcP,EAAWtoE,GACpC32H,EAAOy/L,UAAUR,GAAatoE,GAG9BkpE,GAAmB,CACrBC,0BAA2B,WACzB,IAAI5+L,EAAOoC,KACX1D,GAAMkP,KAAK5N,EAAK6+L,sBAAsB,SAAU34L,GAC9Cm4L,GAAkBr+L,EAAMkG,OAG5B42L,kBAAmB,SAAU52L,EAAMq4B,GACjC,IAAIv+B,EAAOoC,KACE,UAAT8D,GAA6B,SAATA,IAGpBq4B,EACEv+B,EAAK49L,YACPS,GAAkBr+L,EAAMkG,GAEnBlG,EAAK6+L,qBAGR7+L,EAAK6+L,qBAAqBl5L,KAAKO,GAF/BlG,EAAK6+L,qBAAuB,CAAC34L,GAKxBlG,EAAK49L,cACd59L,EAAKgL,IAAIijE,OAAO6vH,GAAe99L,EAAMkG,GAAOA,EAAMlG,EAAKu+L,UAAUr4L,WAC1DlG,EAAKu+L,UAAUr4L,MAG1B44L,sBAAuB,WACrB,IAGI54L,EAHAlG,EAAOoC,KACPqK,EAAOzM,EAAKkT,UACZlI,EAAMhL,EAAKgL,IAEf,GAAIhL,EAAKu+L,UAAW,CAClB,IAAKr4L,KAAQlG,EAAKu+L,UAChBv+L,EAAKgL,IAAIijE,OAAO6vH,GAAe99L,EAAMkG,GAAOA,EAAMlG,EAAKu+L,UAAUr4L,WAE5DlG,EAAKu+L,WAETv+L,EAAKgP,QAAUvC,GAAQzB,IAC1ByB,EAAKqkB,OAAS,KACd9lB,EAAIijE,OAAOjuE,EAAKi6H,UAChBjvH,EAAIijE,OAAOjuE,EAAKuO,WAEdvD,IACFA,EAAIijE,OAAOxhE,GACXzB,EAAIijE,OAAOjuE,EAAKkjF,mBAItBy7G,GAAmBjgM,GAAM2C,OAAO,GAAI07L,GAAY4B,IAChD,IAAII,GAAqBJ,GAErBK,GAAgBp4I,GAAU,WAAY,YACtC6xE,GAAYpsE,GAAoBvE,SAChCiD,GAAU0tE,GAAUxsE,WAAWlB,UAC/Bk0I,GAAgB,CAClB,QACA,WACA,YAEEC,GAAwB,CAAEpE,MAAO,UACjCqE,GAAmB,SAAU58L,GAC/B,IAAI68L,EAAcx4K,EAAQrkB,GAAWA,EAAQ6D,KAAK,KAAO7D,EACrD88L,EAAiB3+L,EAAIyiD,EAASi8I,GAAeA,EAAYj/K,MAAM,KAAO,GAAIykI,IAC9E,OAAOj3I,EAAO0xL,GAAgB,SAAU1qJ,GACtC,OAAOA,EAAK5yC,OAAS,MAGrBu9L,GAAsB,SAAU/8L,GAClC,OAAOoL,EAAOpL,EAASkV,EAAMtE,EAAU8rL,MAErCM,GAAkB,SAAU1jL,EAAM9c,GACpC,IAAIm0B,EAAS+xH,GAASlmJ,GAAU,SAAUb,EAAOgD,GAC/C,OAAOiS,EAAS0I,EAAM3a,MAExB,OAAO89L,GAAc9rK,EAAO/oB,EAAG+oB,EAAOlb,IAEpCwnL,GAAa,SAAUR,EAAe94L,EAAM+a,GAC9C,IAAIw+K,EAAWT,EAAcS,WACzBC,EAAkBD,EAASt+L,eAAe+E,GAAQu5L,EAASv5L,GAAQ,GACvE,OAAOxH,GAAM2C,OAAO,GAAI4f,EAAUy+K,IAEhCC,GAAa,SAAUX,EAAe94L,GACxC,OAAO84L,EAAcS,WAAWt+L,eAAe+E,IAE7C05L,GAAqB,SAAUt+L,EAAIu+L,EAAiB/gM,GACtD,MAAO,CACLwC,GAAIA,EACJw5L,MAAO,SACPgF,YAAa,EACbC,aAAc,EACdC,UAAW,GACXz9L,QAAS,GACT09L,kBAAmBJ,EACnBK,yBAAyB,EACzBC,cAAc,EACdC,oBAAoB,EACpBC,cAAc,EACdC,eAAe,EACfC,oBAAoB,EACpBC,iBAAiB,EACjBh5L,QAAS,kBACTi5L,QAAQ,EACRC,uBAAwB,uDACxBC,wBAAyB,oDACzBhuI,kBAAmB,IACnBiuI,cAAc,EACdC,WAAW,EACXxvI,YAAa,OACb0qI,eAAe,EACf+E,wBAAwB,EACxBpgL,OAAQ,SACRE,cAAe,oMACfC,aAAc,oMACdk2J,gBAAiB,QACjB3iB,cAAet1J,EAAO4+C,WACtB42G,oBAAqBx1J,EACrBiiM,YAAY,IAGZC,GAAqB,SAAUC,EAAkBliM,GACnD,IAAImiM,EAA6BniM,EAASoiM,iBAAmBpiM,EAASoiM,iBAAmB,GACzF,OAAIF,GAAoBA,EAAiBE,iBAChCziM,GAAM2C,OAAO,GAAI4/L,EAAiBE,iBAAkBD,GAEpDA,GAGPE,GAAiB,SAAUC,EAAe9+L,GAC5C,MAAO,GAAGuV,OAAOqnL,GAAiBkC,IAAgBvpL,OAAOqnL,GAAiB58L,KAExE++L,GAAiB,SAAUC,EAAevC,EAAewC,EAAyBziM,GACpF,IAAIsiM,EAAgBlC,GAAiBqC,EAAwB/kL,gBACzDla,EAAU48L,GAAiBpgM,EAASwD,SACpCk/L,EAAkBF,GAAiB5B,GAAWX,EAAe,UAAYM,GAAoB/8L,GAAWA,EACxGm/L,EAAkBN,GAAeC,EAAeI,GACpD,OAAO/iM,GAAM2C,OAAOtC,EAAU,CAAEwD,QAASm/L,EAAgBt7L,KAAK,QAE5Du7L,GAAa,SAAUJ,EAAevC,GACxC,IAAI17E,EAAW07E,EAAcjgM,WAAWiQ,OACxC,OAAOuyL,GAAiB5B,GAAWX,EAAe,YAAc17E,GAE9Ds+E,GAAkB,SAAUL,EAAeM,EAAiBL,EAAyBziM,GACvF,IAAIigM,EAAgBO,GAAgB,CAAC,UAAWxgM,GAC5C+iM,EAAmBpjM,GAAM2C,OAAOwgM,EAAiBL,EAAyBxC,EAAcjgM,WAAY4iM,GAAWJ,EAAevC,GAAiBQ,GAAWR,EAAe,SAAUE,IAAyB,GAAI,CAClNxgL,UAAU,EACVqjL,iBAAkB/C,EAAcjgM,WAAWiQ,OAC3CmyL,iBAAkBH,GAAmBQ,EAAyBxC,EAAcjgM,cAE9E,OAAOuiM,GAAeC,EAAevC,EAAewC,EAAyBM,IAE3EE,GAAoB,SAAUljM,EAAQwC,EAAIu+L,EAAiB2B,EAAyBziM,GACtF,IAAI8iM,EAAkBjC,GAAmBt+L,EAAIu+L,EAAiB/gM,GAC9D,OAAO8iM,GAAgB72I,GAAS82I,EAAiBL,EAAyBziM,IAExEkjM,GAAc,SAAU14K,EAAWzqB,EAAQoH,GAC7C,OAAOiU,EAAO/U,KAAKtG,EAAOC,SAASmH,IAAOyH,OAAO4b,IAE/C24K,GAAiB,SAAUhkM,GAC7B,IAAIg5C,EAAS,GAab,MAZqB,kBAAVh5C,EACT0P,EAAK1P,EAAM8I,QAAQ,KAAO,EAAI9I,EAAMiiB,MAAM,6BAA+BjiB,EAAMiiB,MAAM,MAAM,SAAUuP,GACnG,IAAIk3C,EAAMl3C,EAAIvP,MAAM,KAChBymD,EAAI7kE,OAAS,EACfm1C,EAAOx4C,GAAMsP,KAAK44D,EAAI,KAAOloE,GAAMsP,KAAK44D,EAAI,IAE5C1vB,EAAOx4C,GAAMsP,KAAK44D,EAAI,KAAOloE,GAAMsP,KAAK44D,MAI5C1vB,EAASh5C,EAEJg5C,GAELirJ,GAAY,SAAU3kK,GACxB,OAAO,SAAUzjB,GACf,OAAO6M,EAAQ7M,IAAMN,GAAOM,EAAGyjB,KAG/B/9B,GAAW,SAAUX,EAAQoH,EAAM4wJ,EAAYv2J,GACjD,IAAIrC,EAAQgI,KAAQpH,EAAOC,SAAWD,EAAOC,SAASmH,GAAQ4wJ,EAC9D,MAAa,SAATv2J,EACK2hM,GAAehkM,GACJ,WAATqC,EACF0hM,GAAY9+I,EAAUrkD,EAAQoH,GAAM2S,MAAMi+I,GAC/B,WAATv2J,EACF0hM,GAAY5+I,EAAUvkD,EAAQoH,GAAM2S,MAAMi+I,GAC/B,YAATv2J,EACF0hM,GAAY7+I,EAAWtkD,EAAQoH,GAAM2S,MAAMi+I,GAChC,WAATv2J,EACF0hM,GAAYpyD,EAAU/wI,EAAQoH,GAAM2S,MAAMi+I,GAC/B,UAATv2J,EACF0hM,GAAYr7K,EAAS9nB,EAAQoH,GAAM2S,MAAMi+I,GAC9B,aAATv2J,EACF0hM,GAAYE,GAAUh/I,GAAWrkD,EAAQoH,GAAM2S,MAAMi+I,GAC1C,aAATv2J,EACF0hM,GAAYxnL,EAAY3b,EAAQoH,GAAM2S,MAAMi+I,GAE5C54J,GAIPkkM,GAAS1jM,GAAMkP,KAAMy0L,GAAY3jM,GAAM6iJ,QACvC+gD,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,GAAgBzkM,GAAM+gE,QAAQ,8BAClC,SAAS2jI,GAAWtkM,GAClB,IAAIkB,EAAOoC,KACPgZ,EAAY,GACZioL,EAAkB,GAClBC,EAAgB,SAAUx+L,GAC5B,IAAIxD,EAAIJ,EACJma,EAAW,GAcf,IAAKna,KAbLkhM,GAAOC,GAAUv9L,EAAS,MAAM,SAAU5G,GACpCA,KAASilM,GACX9nL,EAASnd,IAAS,EAEd,cAAc+E,KAAK/E,GACrBmd,EAASoO,QAAUnZ,SAASpS,EAAO,KAEnCmd,EAAS0O,SAAW7rB,EAAM4rB,WAAW,GACrCzO,EAASoO,QAAU64K,GAAcpkM,IAAUA,EAAMm4D,cAAcvsC,WAAW,OAIhFxoB,EAAK,CAAC+Z,EAASoO,SACH05K,GACN9nL,EAASna,GACXI,EAAGqE,KAAKzE,GAERma,EAASna,IAAO,EAoBpB,OAjBAma,EAAS/Z,GAAKA,EAAG8E,KAAK,KAClBiV,EAASF,SACXE,EAAS8+B,KAAM,EACXw2F,GAAIz1H,IACNG,EAASzI,MAAO,EAEhByI,EAASizD,OAAQ,GAGjBjzD,EAASJ,OACP01H,GAAIz1H,IACNG,EAASJ,MAAO,GAEhBI,EAASzI,MAAO,EAChByI,EAASJ,MAAO,IAGbI,GAELkoL,EAAiB,SAAUz+L,EAAS0+L,EAAMC,EAASlmK,GACrD,IAAIniB,EAMJ,OALAA,EAAY1c,GAAMgC,IAAI2hM,GAAUv9L,EAAS,KAAMw+L,GAC/CloL,EAAUA,EAAUrZ,OAAS,GAAKrD,GAAM2C,OAAO+Z,EAAUA,EAAUrZ,OAAS,GAAI,CAC9EmvH,KAAMuyE,EACNlmK,MAAOA,GAASz+B,IAEXJ,GAAM2C,OAAO+Z,EAAU,GAAI,CAChCooL,KAAM1kM,EAAOoT,UAAUsxL,GACvBE,YAAatoL,EAAU9V,MAAM,MAG7Bq+L,EAAc,SAAUz2L,GAC1B,OAAOA,EAAEoyE,QAAUpyE,EAAEgoC,SAAWhoC,EAAEqyE,SAEhCqkH,EAAgB,SAAU12L,GAC5B,MAAkB,YAAXA,EAAE3M,MAAsB2M,EAAEuc,SAAW,KAAOvc,EAAEuc,SAAW,KAE9Do6K,EAAgB,SAAU32L,EAAGmO,GAC/B,QAAKA,IAGDA,EAASzI,OAAS1F,EAAEgoC,SAAW75B,EAASJ,OAAS/N,EAAEqyE,UAGnDlkE,EAAS8+B,MAAQjtC,EAAEoyE,QAAUjkE,EAASizD,QAAUphE,EAAEqtD,cAGlDrtD,EAAEuc,UAAYpO,EAASoO,SAAWvc,EAAE6c,UAAY7c,EAAE6c,WAAa1O,EAAS0O,YAC1E7c,EAAEm0B,kBACK,OAIPyiK,EAAwB,SAAUzoL,GACpC,OAAOA,EAAS61G,KAAO71G,EAAS61G,KAAKlwH,KAAKqa,EAASkiB,OAAS,MAE9Dz+B,EAAO4O,GAAG,0BAA0B,SAAUR,IACvCy2L,EAAYz2L,KAAM02L,EAAc12L,IAAQA,EAAEy1D,uBAC7Cy/H,GAAOhnL,GAAW,SAAUC,GAC1B,GAAIwoL,EAAc32L,EAAGmO,GAKnB,OAJAgoL,EAAkBhoL,EAASqoL,YAAYp+L,MAAM,GAC9B,YAAX4H,EAAE3M,MACJujM,EAAsBzoL,IAEjB,KAGPwoL,EAAc32L,EAAGm2L,EAAgB,MACJ,IAA3BA,EAAgBthM,QACH,YAAXmL,EAAE3M,MACJujM,EAAsBT,EAAgB,IAG1CA,EAAgB/0H,aAItBtuE,EAAKiG,IAAM,SAAUnB,EAAS0+L,EAAMC,EAASlmK,GAC3C,IAAI9tB,EAeJ,OAdAA,EAAMg0L,EACiB,kBAAZA,EACTA,EAAU,WACR3kM,EAAOoX,YAAYzG,GAAK,EAAO,OAExB/Q,GAAMkoB,QAAQnX,KACvBg0L,EAAU,WACR3kM,EAAOoX,YAAYzG,EAAI,GAAIA,EAAI,GAAIA,EAAI,MAG3C2yL,GAAOC,GAAU3jM,GAAMsP,KAAKlJ,EAAQua,iBAAiB,SAAUva,GAC7D,IAAIuW,EAAWkoL,EAAez+L,EAAS0+L,EAAMC,EAASlmK,GACtDniB,EAAUC,EAAS/Z,IAAM+Z,MAEpB,GAETrb,EAAKmU,OAAS,SAAUrP,GACtB,IAAIuW,EAAWkoL,EAAez+L,GAC9B,QAAIsW,EAAUC,EAAS/Z,aACd8Z,EAAUC,EAAS/Z,KACnB,IAMb,IAAIm7I,GAAW,SAAU55I,GACvB,IAAI6kB,EAAMstE,GAAMnyF,GAASmI,MACzB,OAAOnI,EAAQmI,QAAU0c,EAAIujG,eAE3BpwD,GAAS,SAAUkpI,GACrB,IAAIr8K,OAAetO,IAAT2qL,EAAqBA,EAAK/4L,MAAQjN,EAAW4E,SACvD,OAAOwX,EAAO/U,KAAKsiB,EAAIujG,eAAevqH,IAAI2lD,GAAQN,UAEhDuF,GAAS,SAAUzoD,GACrB,OAAOg4D,GAAOm6B,GAAMnyF,IAAU8K,QAAO,SAAUT,GAC7C,OAAOrK,EAAQmI,MAAMmI,SAASjG,EAAElC,WAIhCg5L,GAAyB,SAAUllM,EAAQ4L,GAC7C,OAAO5L,EAAOkM,IAAIyL,UAAU/L,GAAM,SAAUA,GAC1C,MAA+C,SAAxC5L,EAAOkM,IAAIorD,mBAAmB1rD,OAGrCu5L,GAAmB,SAAUj/K,GAC/B,OAAOA,EAAIE,UAAY/K,EAAO/U,KAAKwF,GAAQoa,EAAII,eAAgBJ,EAAIO,cAAc7kB,IAAI2lD,GAAQN,SAAW5rC,EAAOhC,QAE7G+rL,GAAoB,SAAUtiM,EAAMojB,GACtC,OAAOi/K,GAAiBj/K,GAAKzL,MAAK,SAAU7O,GAC1C,OAAIq+I,GAAer+I,GACVyP,EAAOL,KAAKpP,IACiB,IAA3B86I,GAAW5jJ,EAAM8I,GACnByP,EAAOL,KAAKlY,GAEZuY,EAAOhC,WAIhBgsL,GAAqB,SAAUrlM,EAAQkmB,GACzCk/K,GAAkB79I,GAAQN,QAAQjnD,EAAOoU,WAAY8R,GAAKzL,MAAK,SAAUxS,GACvE,OAAOwmK,GAAYC,gBAAgBzmK,EAAIiE,UACtC0N,MAAK,WACN5Z,EAAO6L,UAAUktK,eAEhB,SAAU/C,GACX,OAAOh2K,EAAO6L,UAAU0b,OAAOyuJ,EAAS3Q,eAGxCigC,GAAY,SAAU33L,GACxB,GAAIA,EAAK43L,UACP,IACE53L,EAAK43L,YACL,MAAO/0K,GACP7iB,EAAKuH,aAGPvH,EAAKuH,SAGLswL,GAAkB,SAAUv9L,GAC9B,OAAO01I,GAAS11I,IAAQukD,GAAOvkD,GAAK6R,UAElC2rL,GAAiB,SAAUzlM,GAC7B,OAAOA,EAAO0lM,eAAiB/nD,GAASp2F,GAAQN,QAAQjnD,EAAO0lM,iBAE7DC,GAAiB,SAAU3lM,GAC7B,IAAI4lM,EAAU5lM,EAAOoU,UACrB,OAAOwxL,GAAWJ,GAAgBj+I,GAAQN,QAAQ2+I,KAEhDC,GAAa,SAAU7lM,GACzB,OAAOA,EAAOkQ,OAASy1L,GAAe3lM,GAAUylM,GAAezlM,IAE7D8lM,GAAc,SAAU9lM,GAC1B,IAAI6L,EAAY7L,EAAO6L,UAAWyD,EAAkBtP,EAAOC,SAASgjM,iBAChEt1L,EAAO3N,EAAOoU,UACd8R,EAAMra,EAAUyc,SACpBtoB,EAAOg9D,OAAO+oI,yBACd,IAAIC,EAAsBd,GAAuBllM,EAAQ6L,EAAUC,WACnE,GAAI9L,EAAOsM,EAAE+H,SAAS1G,EAAMq4L,GAI1B,OAHAV,GAAUU,GACVX,GAAmBrlM,EAAQkmB,QAC3B+/K,GAAejmM,QAGOsa,IAApBta,EAAO6jD,WAAiD,IAAvBgiJ,GAAW7lM,IAC9C86L,GAAkBxyK,OAAOtoB,GAAQ8O,MAAK,SAAUo3L,GAC9ClmM,EAAO6L,UAAU0b,OAAO2+K,GACxBhgL,EAAMggL,KAGL52L,IACEuiI,GAAItoF,OACP+7I,GAAU33L,GAEZ3N,EAAOm7H,SAASjmH,UAEd28H,GAAI7iE,OAAS1/D,KACfg2L,GAAU33L,GACV03L,GAAmBrlM,EAAQkmB,IAE7B+/K,GAAejmM,IAEbimM,GAAiB,SAAUjmM,GAC7B,OAAOA,EAAO0/L,cAAc6F,UAAUvlM,IAEpCkV,GAAQ,SAAUlV,EAAQmmM,GACxBnmM,EAAO0/B,UAGXymK,EAAYF,GAAejmM,GAAU8lM,GAAY9lM,KAE/ComM,GAAc,CAChBlxL,MAAOA,GACPyoI,SAAUkoD,IAGRr5F,GAAU,SAAUq+C,EAAU5iJ,GAChC,IAAIo+L,EAASp+L,EAAIiE,MACjB,OAAOm6L,EAAOx7C,IAEZy7C,GAAsB,SAAUz7C,EAAU5iJ,GAC5C,OAAOuJ,SAASsT,GAAM7c,EAAK4iJ,GAAW,KAEpC07C,GAAiB5tL,EAAM6zF,GAAS,eAChCg6F,GAAkB7tL,EAAM6zF,GAAS,gBACjCi6F,GAAe9tL,EAAM2tL,GAAqB,cAC1CI,GAAgB/tL,EAAM2tL,GAAqB,eAC3CK,GAA0B,SAAU1+L,GACtC,OAAOA,EAAIiE,MAAM4/F,yBAEf86F,GAA6B,SAAUC,EAAS/xJ,EAASC,GAC3D,IAAI7P,EAAcqhK,GAAeM,GAC7B1hK,EAAeqhK,GAAgBK,GACnC,OAAO/xJ,GAAW,GAAKC,GAAW,GAAKD,GAAW5P,GAAe6P,GAAW5P,GAE1EmP,GAAY,SAAUpkC,EAAQjI,EAAK6sC,EAASC,GAC9C,IAAIsvH,EAAasiC,GAAwB1+L,GACrCq5B,EAASpxB,EAASm0J,EAAWlhI,KAAOl7B,EAAIiE,MAAM2jG,WAAa62F,GAAcz+L,GAAO,EAChFs5B,EAASrxB,EAASm0J,EAAWjhI,IAAMn7B,EAAIiE,MAAM0jG,UAAY62F,GAAax+L,GAAO,EAC7EsO,EAAIu+B,EAAUxT,EACd9qB,EAAIu+B,EAAUxT,EAClB,MAAO,CACLhrB,EAAGA,EACHC,EAAGA,IAGHswL,GAAoB,SAAU9mM,EAAQ80C,EAASC,GACjD,IAAI8xJ,EAAUt/I,GAAQN,QAAQjnD,EAAOoU,WACjCslD,EAAY15D,EAAOkQ,OAAS22L,EAAUxrH,GAAgBwrH,GACtDE,EAAkBzyJ,GAAUt0C,EAAOkQ,OAAQwpD,EAAW5kB,EAASC,GACnE,OAAO6xJ,GAA2BltI,EAAWqtI,EAAgBxwL,EAAGwwL,EAAgBvwL,IAE9EwwL,GAAc,SAAUp7L,GAC1B,OAAOyP,EAAO/U,KAAKsF,GAAMhK,IAAI2lD,GAAQN,UAEnCggJ,GAAwB,SAAUjnM,GACpC,IAAIknM,EAAelnM,EAAOkQ,OAASlQ,EAAOoU,UAAYpU,EAAOw1C,0BAC7D,OAAOwxJ,GAAYE,GAActlM,KAAI,SAAUykB,GAC7C,OAAOqgI,GAAWxwD,GAAM7vE,GAAYA,MACnCtM,OAAM,IAEPotL,GAAa,CACfL,kBAAmBA,GACnBG,sBAAuBA,IAGzB,SAASG,KACP,IAAIC,EAAgB,WAClB,MAAM,IAAIltL,MAAM,gEAElB,MAAO,CACLlN,KAAMo6L,EACNt/L,MAAOs/L,EACP78B,WAAY68B,EACZC,QAASD,GAIb,SAASE,GAAqBvnM,GAC5B,IAAIwnM,EAAgB,GAChBC,EAAoB,WACtB,IAAIzL,EAAQh8L,EAAOg8L,MACnB,OAAOA,GAASA,EAAM0L,2BAA6B1L,EAAM0L,6BAA+BN,MAEtFO,EAAqB,WACvB,OAAOtsL,EAAO/U,KAAKkhM,EAAc,KAE/BnlC,EAAU,SAAUpnJ,EAAGG,GACzB,OAAOH,EAAExZ,OAAS2Z,EAAE3Z,MAAQwZ,EAAExV,OAAS2V,EAAE3V,OAASwV,EAAE2sL,cAAgB3sL,EAAEqrD,UAAYlrD,EAAEwsL,cAAgBxsL,EAAEkrD,SAEpGkkG,EAAa,WACXg9B,EAAcvkM,OAAS,GACzBwkM,IAAoBj9B,WAAWg9B,IAG/BK,EAAkB,SAAUC,GAC9BN,EAAc3gM,KAAKihM,IAEjBC,EAAoB,SAAUD,GAChCnsI,GAAU6rI,GAAe,SAAUQ,GACjC,OAAOA,IAAsBF,KAC5Bh5L,MAAK,SAAUvI,GAChBihM,EAAcxgM,OAAOT,EAAO,OAG5B0G,EAAO,SAAUrG,GACnB,IAAI5G,EAAO0/B,SAAYynK,GAAWF,sBAAsBjnM,GAGxD,OAAOuP,EAAKi4L,GAAe,SAAUM,GACnC,OAAOzlC,EAAQolC,IAAoBH,QAAQQ,GAAelhM,MACzDoT,YAAW,WACZha,EAAO0/L,cAAc6F,UAAUvlM,GAC/B,IAAI8nM,EAAeL,IAAoBx6L,KAAKrG,GAAM,WAChDmhM,EAAkBD,GAClBt9B,OAIF,OAFAq9B,EAAgBC,GAChBt9B,IACOs9B,MAGP//L,EAAQ,WACV4/L,IAAqB74L,MAAK,SAAUg5L,GAClCL,IAAoB1/L,MAAM+/L,GAC1BC,EAAkBD,GAClBt9B,QAGAy9B,EAAmB,WACrB,OAAOT,GAEL18F,EAAiB,SAAU9qG,GAC7BA,EAAO4O,GAAG,cAAc,WACtB,IAAIs5L,EAAiBloM,EAAOC,SAASkoM,gBACjCD,GACFj7L,EAAK,CACHxH,KAAMyiM,EACNzmM,KAAM,UACN6kE,QAAS,EACTz1D,KAAM,QAIZ7Q,EAAO4O,GAAG,6BAA6B,WACrCmkI,GAAMV,sBAAsBm4B,MAE9BxqK,EAAO4O,GAAG,UAAU,WAClBE,EAAK04L,EAAchhM,SAAS,SAAUshM,GACpCL,IAAoB1/L,MAAM+/L,UAKhC,OADAh9F,EAAe9qG,GACR,CACLiN,KAAMA,EACNlF,MAAOA,EACPkgM,iBAAkBA,GAItB,SAASG,KACP,IAAIf,EAAgB,WAClB,MAAM,IAAIltL,MAAM,0DAElB,MAAO,CACLlN,KAAMo6L,EACNl+J,MAAOk+J,EACPxoH,QAASwoH,EACTt/L,MAAOs/L,EACPgB,UAAWhB,EACXiB,UAAWjB,GAIf,SAASkB,GAAevoM,GACtB,IAAIsqD,EAAU,GACVm9I,EAAoB,WACtB,IAAIzL,EAAQh8L,EAAOg8L,MACnB,OAAOA,GAASA,EAAMwM,qBAAuBxM,EAAMwM,uBAAyBJ,MAE1EK,EAAW,SAAUhqK,EAAOvlB,GAC9B,OAAO,WACL,OAAOA,EAAIA,EAAEjS,MAAMw3B,EAAOz7B,gBAAasX,IAGvCouL,EAAgB,SAAU3iK,GAC5B/lC,EAAO2hC,KAAK,aAAc,CAAEoE,IAAKA,KAE/B4iK,EAAiB,SAAU5iK,GAC7B/lC,EAAO2hC,KAAK,cAAe,CAAEoE,IAAKA,KAEhC6iK,EAAY,SAAU7iK,GACxBukB,EAAQzjD,KAAKk/B,GACb2iK,EAAc3iK,IAEZ8iK,EAAc,SAAU9iK,GAC1B41B,GAAUrR,GAAS,SAAUw+I,GAC3B,OAAOA,IAAgB/iK,KACtBj3B,MAAK,SAAUvI,GAChB+jD,EAAQtjD,OAAOT,EAAO,GACtBoiM,EAAe5iK,GACQ,IAAnBukB,EAAQrnD,QACVjD,EAAOkV,YAIT6zL,EAAe,WACjB,OAAO1tL,EAAO/U,KAAKgkD,EAAQA,EAAQrnD,OAAS,KAE1CgK,EAAO,SAAUrG,EAAMwiG,GACzBppG,EAAO0/L,cAAc6F,UAAUvlM,GAC/B86L,GAAkBJ,MAAM16L,GACxB,IAAI+lC,EAAM0hK,IAAoBx6L,KAAKrG,EAAMwiG,EAAQy/F,GAEjD,OADAD,EAAU7iK,GACHA,GAELoD,EAAQ,SAAUthC,EAAStE,EAAUk7B,GACvC,IAAIsH,EAAM0hK,IAAoBt+J,MAAMthC,EAAS4gM,EAAShqK,GAAgBn7B,KAAMC,GAAWslM,GACvFD,EAAU7iK,IAER84C,EAAU,SAAUh3E,EAAStE,EAAUk7B,GACzC,IAAIsH,EAAM0hK,IAAoB5oH,QAAQh3E,EAAS4gM,EAAShqK,GAAgBn7B,KAAMC,GAAWslM,GACzFD,EAAU7iK,IAERh+B,EAAQ,WACVghM,IAAej6L,MAAK,SAAUi3B,GAC5B0hK,IAAoB1/L,MAAMg+B,GAC1B8iK,EAAY9iK,OAGZsiK,EAAY,WACd,OAAOU,IAAennM,IAAI6lM,IAAoBY,WAAWtuL,MAAM,OAE7DuuL,EAAY,SAAUl/F,GACxB2/F,IAAej6L,MAAK,SAAUi3B,GAC5B0hK,IAAoBa,UAAUviK,EAAKqjE,OAGnC4/F,EAAa,WACf,OAAO1+I,GAOT,OALAtqD,EAAO4O,GAAG,UAAU,WAClBE,EAAKw7C,EAAQ9jD,MAAM,IAAI,SAAUu/B,GAC/B0hK,IAAoB1/L,MAAMg+B,SAGvB,CACLukB,QAASA,EACTr9C,KAAMA,EACNk8B,MAAOA,EACP01C,QAASA,EACT92E,MAAOA,EACPsgM,UAAWA,EACXC,UAAWA,EACXU,WAAYA,GAIhB,IAAI9jM,GAAO,GACPX,GAAO,KACP0kM,GAAO,CACTC,QAAS,SAAUC,GACbA,IACF5kM,GAAO4kM,EACP7lM,KAAKokC,MAAMpkC,KAAK4B,KAAKikM,IAAuC,QAA5B7lM,KAAK4B,KAAKikM,GAASC,OAGvDC,QAAS,WACP,OAAO9kM,IAETmjC,KAAK,EACLvgC,IAAK,SAAU5C,EAAMsY,GACnB,IAAIysL,EAAWpkM,GAAKX,GAIpB,IAAK,IAAI6C,KAHJkiM,IACHpkM,GAAKX,GAAQ+kM,EAAW,IAETzsL,EACfysL,EAASliM,GAAQyV,EAAMzV,GAEzB9D,KAAK4lM,QAAQ3kM,IAEf6O,UAAW,SAAU3N,GACnB,IAAI6jM,EAAWpkM,GAAKX,KAAS,GACzBtC,EAAW,SAAUgb,GACvB,OAAIrd,GAAMuU,GAAG8I,EAAK,YACTlb,OAAOC,UAAUC,SAASC,KAAK+a,GAEhC6/B,EAAQ7/B,GAAkB,GAAX,GAAKA,GAE1B6/B,EAAU,SAAUr3C,GACtB,MAAgB,KAATA,GAAwB,OAATA,GAAiB7F,GAAMuU,GAAG1O,EAAM,cAEpD8jM,EAAc,SAAU9jM,GAE1B,OADAA,EAAOxD,EAASwD,GACT7F,GAAMg4I,OAAO0xD,EAAU7jM,GAAQxD,EAASqnM,EAAS7jM,IAASA,GAEnE,GAAIq3C,EAAQr3C,GACV,MAAO,GAET,GAAI7F,GAAMuU,GAAG1O,EAAM,WAAa7F,GAAMg4I,OAAOnyI,EAAM,OACjD,OAAOxD,EAASwD,EAAKg3D,KAEvB,GAAI78D,GAAMuU,GAAG1O,EAAM,SAAU,CAC3B,IAAIqrB,EAAWrrB,EAAKe,MAAM,GAC1Bf,EAAO8jM,EAAY9jM,EAAK,IAAI5D,QAAQ,iBAAiB,SAAU2nM,EAAIC,GACjE,OAAO7pM,GAAMg4I,OAAO9mH,EAAU24K,GAAMxnM,EAAS6uB,EAAS24K,IAAOD,KAGjE,OAAOD,EAAY9jM,GAAM5D,QAAQ,iBAAkB,KAErDqD,KAAMA,IAGJs4J,GAAgBlB,GAAakB,cAC7BksC,GAAoB,SAAUC,EAAW50G,GAC3C,IAAK,IAAI3tF,KAAQo2J,GAAcpgJ,KAAM,CACnC,IAAIwsL,EAAWpsC,GAAcpgJ,KAAKhW,GAAQ,UAAY2tF,EAAS,MAC/D,GAAI60G,IAAaD,EACf,OAAOviM,EAGX,OAAO,MAELyiM,GAAqB,SAAU7pM,EAAQuJ,GACzC,IAAI0yD,EAASytI,GAAkBngM,EAAKvJ,EAAO+0F,QAC3C,OAAO94B,EAASgtI,GAAK71L,UAAU,CAC7B,0CACA6oD,EACA1yD,IACG0/L,GAAK71L,UAAU,CAClB,iCACA7J,KAGAq1D,GAAsB,SAAU5+D,EAAQ6H,GAC1C7H,EAAOytC,oBAAoBxgC,KAAK,CAC9BxL,KAAM,QACNgE,KAAMoC,KAGN2lC,GAAe,SAAUxtC,EAAQ6H,GAC/B7H,EAAO8pM,YACTlrI,GAAoB5+D,EAAQ6H,GAE5B7H,EAAO4O,GAAG,cAAc,WACtBgwD,GAAoB5+D,EAAQ6H,OAI9BkiM,GAAc,SAAU/pM,EAAQ6H,GAClC2lC,GAAaxtC,EAAQipM,GAAK71L,UAAU,CAClC,8BACAvL,MAGAmiM,GAAkB,SAAUhqM,EAAQuJ,GACtCikC,GAAaxtC,EAAQ6pM,GAAmB7pM,EAAQuJ,KAE9C0gM,GAAkB,SAAUjqM,EAAQoH,EAAM45C,GAC5C,IAAIn5C,EAAUohM,GAAK71L,UAAU,CAC3B,mCACAhM,IAEF8iM,GAAUriM,EAASm5C,GACnBxT,GAAaxtC,EAAQ6H,IAEnBqiM,GAAY,SAAUriM,GAExB,IADA,IAAI0O,EAAI,GACCuC,EAAK,EAAGA,EAAK9V,UAAUC,OAAQ6V,IACtCvC,EAAEuC,EAAK,GAAK9V,UAAU8V,GAExB,IAAIkuC,EAAU/nD,EAAW6B,OAAOkmD,QAC5BA,IACEA,EAAQr1B,MACVq1B,EAAQr1B,MAAM1qB,MAAM+/C,EAAShkD,WAE7BgkD,EAAQ6V,IAAI51D,MAAM+/C,EAAShkD,aAI7BmnM,GAAgB,CAClBH,gBAAiBA,GACjBC,gBAAiBA,GACjBF,YAAaA,GACbv8J,aAAcA,GACd08J,UAAWA,IAGTE,GAAkB9tC,GAAakB,cAE/BC,GAAenB,GAAamB,aAEhC,SAAS3rI,KACP,IAAI5Y,EAAI2lB,GAAS5kB,SAAS,kBAC1B,OAAO,IAAIf,EAGb,SAASsmC,GAAU6qJ,EAAcpqM,GAC/B,IAAIqqM,EAAkB,GAClBjrJ,EAAW,SAAUC,EAAOC,GAC9B,OAAID,EACKA,EAAMz9C,QAAQ,MAAO,IAAM,IAAM09C,EAAM19C,QAAQ,MAAO,IAExD09C,GAELE,EAAiB,SAAUvR,EAAUqE,EAASmN,EAASC,GACzD,IAAI9tB,EAAK+tB,EACT/tB,EAAMC,KACND,EAAI5kB,KAAK,OAAQhN,EAASsJ,KAC1BsoB,EAAIyZ,gBAAkBrrC,EAAS4/C,YAC/BhuB,EAAIiuB,OAAOC,WAAa,SAAU3xC,GAChCuxC,EAASvxC,EAAEsjB,OAAStjB,EAAE4xC,MAAQ,MAEhCnuB,EAAIM,QAAU,WACZutB,EAAQ,2DAA6D7tB,EAAII,SAE3EJ,EAAIG,OAAS,WACX,IAAImZ,EACAtZ,EAAII,OAAS,KAAOJ,EAAII,QAAU,IACpCytB,EAAQ,eAAiB7tB,EAAII,SAG/BkZ,EAAO9lC,KAAKyC,MAAM+pB,EAAIouB,cACjB9U,GAAiC,kBAAlBA,EAAK+U,SAIzB3N,EAAQ8M,EAASp/C,EAASkgD,SAAUhV,EAAK+U,WAHvCR,EAAQ,iBAAmB7tB,EAAIouB,gBAKnCL,EAAW,IAAI3gD,EAAWmhD,SAC1BR,EAASxwC,OAAO,OAAQ8+B,EAAS/c,OAAQ+c,EAASppC,YAClD+sB,EAAIU,KAAKqtB,IAEP2qJ,EAAW,WACb,OAAO,IAAIn4D,IAAW,SAAUvyI,GAC9BA,EAAQ,QAGR2qM,EAAiB,SAAUt8J,EAAU3kC,GACvC,MAAO,CACLA,IAAKA,EACL2kC,SAAUA,EACVjc,QAAQ,IAGRw4K,EAAiB,SAAUv8J,EAAUvc,GACvC,MAAO,CACLpoB,IAAK,GACL2kC,SAAUA,EACVjc,QAAQ,EACRN,MAAOA,IAGP+4K,EAAiB,SAAUz7J,EAAS7a,GACtCx0B,GAAMkP,KAAKw7L,EAAgBr7J,IAAU,SAAUpvC,GAC7CA,EAAQu0B,aAEHk2K,EAAgBr7J,IAErB07J,EAAiB,SAAUz8J,EAAUoS,EAASsqJ,GAEhD,OADAP,EAAaQ,YAAY38J,EAASe,WAC3B,IAAImjG,IAAW,SAAUvyI,GAC9B,IAAIioM,EAAcnoJ,EACdjnC,EAAO,aAEX,IACE,IAAIoyL,EAAsB,WACpBhD,IACFA,EAAa//L,QACb43C,EAAWjnC,IAGX65B,EAAU,SAAUhpC,GACtBuhM,IACAT,EAAaU,aAAa78J,EAASe,UAAW1lC,GAC9CmhM,EAAex8J,EAASe,UAAWu7J,EAAet8J,EAAU3kC,IAC5D1J,EAAQ2qM,EAAet8J,EAAU3kC,KAE/Bm2C,EAAU,SAAU/tB,GACtBm5K,IACAT,EAAaW,aAAa98J,EAASe,WACnCy7J,EAAex8J,EAASe,UAAWw7J,EAAev8J,EAAUvc,IAC5D9xB,EAAQ4qM,EAAev8J,EAAUvc,KAEnCguB,EAAW,SAAUsrJ,GACfA,EAAU,GAAKA,EAAU,MAGxBnD,IACHA,EAAe8C,KAEjB9C,EAAaF,YAAYxoM,MAAM6rM,KAEjC3qJ,EAAQpS,EAAUqE,EAASmN,EAASC,GACpC,MAAOnvB,GACP3wB,EAAQ4qM,EAAev8J,EAAU1d,EAAG3oB,eAItC04C,EAAmB,SAAUD,GAC/B,OAAOA,IAAYb,GAEjByrJ,EAAwB,SAAUh9J,GACpC,IAAIe,EAAUf,EAASe,UACvB,OAAO,IAAImjG,IAAW,SAAUvyI,GAC9ByqM,EAAgBr7J,GAAWq7J,EAAgBr7J,IAAY,GACvDq7J,EAAgBr7J,GAASpoC,KAAKhH,OAG9BsrM,EAAc,SAAUC,EAAWR,GAIrC,OAHAQ,EAAYxrM,GAAMooB,KAAKojL,GAAW,SAAUl9J,GAC1C,OAAQm8J,EAAagB,WAAWn9J,EAASe,cAEpCmjG,GAAWlrI,IAAItH,GAAMgC,IAAIwpM,GAAW,SAAUl9J,GACnD,OAAOm8J,EAAaiB,UAAUp9J,EAASe,WAAai8J,EAAsBh9J,GAAYy8J,EAAez8J,EAAUjuC,EAASqgD,QAASsqJ,QAGjI9qJ,EAAS,SAAUsrJ,EAAWR,GAChC,OAAQ3qM,EAASsJ,KAAOg3C,EAAiBtgD,EAASqgD,SAAWiqJ,IAAaY,EAAYC,EAAWR,IAKnG,OAHqC,IAAjCjvL,EAAW1b,EAASqgD,WACtBrgD,EAASqgD,QAAUb,GAEd,CAAEK,OAAQA,GAGnB,SAAS5rB,KACP,IAAIhb,EAAI2lB,GAAS5kB,SAAS,cAC1B,OAAO,IAAIf,EAGb,SAASoa,GAAYw0C,GACnB,IAAI5uD,EAAI2lB,GAAS5kB,SAAS,cAC1B,OAAO,IAAIf,EAAE4uD,GAGf,IAAIyjI,GAA0B,SAAUhoM,GACtC,IAAI2V,EAAI2lB,GAAS5kB,SAAS,yBAC1Bf,EAAE3V,IAEAuvB,GAAO,SAAUH,GACnB,IAAIzZ,EAAI2lB,GAAS5kB,SAAS,QAC1B,OAAOf,EAAEyZ,IAEP64K,GAAS,CACX14K,KAAMA,GACNu/G,sBAAuBk5D,IAGrBE,GAAgB,SAAUliM,GAC5B,OAAO,IAAI6oI,IAAW,SAAUvyI,EAASyvB,GACvC,IAAIo8K,EAAkB,WACpBp8K,EAAO,kBAAoB/lB,EAAM,2DAEnC,IACE,IAAIsoB,EAAMC,KACVD,EAAI5kB,KAAK,MAAO1D,GAAK,GACrBsoB,EAAIE,aAAe,OACnBF,EAAIG,OAAS,WACS,MAAhB1uB,KAAK2uB,OACPpyB,EAAQyD,KAAK4uB,UAEbw5K,KAGJ75K,EAAIM,QAAUu5K,EACd75K,EAAIU,OACJ,MAAO/B,GACPk7K,SAIFC,GAAe,SAAUl5K,GAC3B,IAAIhxB,EAAMqL,EACN8+L,EAAWC,mBAAmBp5K,GAAKpR,MAAM,KAK7C,OAJAvU,EAAU,eAAezG,KAAKulM,EAAS,IACnC9+L,IACFrL,EAAOqL,EAAQ,IAEV,CACLrL,KAAMA,EACNyD,KAAM0mM,EAAS,KAGf56K,GAAgB,SAAUyB,GAC5B,OAAO,IAAI2/G,IAAW,SAAUvyI,GAC9B,IAAIsG,EAAK2hE,EAAKtkE,EACVooM,EAAWD,GAAal5K,GAC5B,IACEtsB,EAAMqlM,GAAO14K,KAAK84K,EAAS1mM,MAC3B,MAAOkJ,IAEP,YADAvO,EAAQ,IAAIZ,EAAWs0B,KAAK,KAI9B,IADAu0C,EAAMx0C,GAAWntB,EAAIlD,QAChBO,EAAI,EAAGA,EAAIskE,EAAI7kE,OAAQO,IAC1BskE,EAAItkE,GAAK2C,EAAI6kB,WAAWxnB,GAE1B3D,EAAQ,IAAIZ,EAAWs0B,KAAK,CAACu0C,GAAM,CAAErmE,KAAMmqM,EAASnqM,YAGpDqqM,GAAY,SAAUviM,GACxB,OAA6B,IAAzBA,EAAIrB,QAAQ,SACPujM,GAAcliM,GAEM,IAAzBA,EAAIrB,QAAQ,SACP8oB,GAAcznB,GAEhB,MAELyqB,GAAgB,SAAU7C,GAC5B,OAAO,IAAIihH,IAAW,SAAUvyI,GAC9B,IAAIo0B,EAASC,KACbD,EAAOE,UAAY,WACjBt0B,EAAQo0B,EAAOG,SAEjBH,EAAOI,cAAclD,OAGrB46K,GAAc,CAChBD,UAAWA,GACX93K,cAAeA,GACf23K,aAAcA,IAGZl1L,GAAQ,EACRC,GAAW,SAAUjF,GACvB,OAAQA,GAAU,UAAYgF,MAE5Bu1L,GAAkB,SAAU59J,EAAWhK,EAAKvkC,EAASyvB,GACvD,IAAIqD,EAAQub,EACZ,GAAiC,IAA7B9J,EAAI9W,IAAIplB,QAAQ,SAsBlB,OArBAgmC,EAAWE,EAAUC,SAASjK,EAAI9W,UAC9B4gB,EACFruC,EAAQ,CACN8uB,MAAOyV,EACP8J,SAAUA,IAGZ69J,GAAYD,UAAU1nK,EAAI9W,KAAK4C,MAAK,SAAUiB,GAC5C46K,GAAY/3K,cAAc7C,GAAMjB,MAAK,SAAU+7K,GAC7Ct5K,EAASo5K,GAAYJ,aAAaM,GAAS/mM,KAC3CgpC,EAAWE,EAAUj+B,OAAOuG,KAAYya,EAAMwB,GAC9Cyb,EAAUjnC,IAAI+mC,GACdruC,EAAQ,CACN8uB,MAAOyV,EACP8J,SAAUA,UAGb,SAAU8S,GACX1xB,EAAO0xB,OAKbruB,EAASo5K,GAAYJ,aAAavnK,EAAI9W,KAAKpoB,KAC3CgpC,EAAWE,EAAUs+B,WAAU,SAAUC,GACvC,OAAOA,EAAeh6C,WAAaA,KAEjCub,EACFruC,EAAQ,CACN8uB,MAAOyV,EACP8J,SAAUA,IAGZ69J,GAAYD,UAAU1nK,EAAI9W,KAAK4C,MAAK,SAAUiB,GAC5C+c,EAAWE,EAAUj+B,OAAOuG,KAAYya,EAAMwB,GAC9Cyb,EAAUjnC,IAAI+mC,GACdruC,EAAQ,CACN8uB,MAAOyV,EACP8J,SAAUA,OAEX,SAAU8S,GACX1xB,EAAO0xB,OAITkrJ,GAAe,SAAUjkM,GAC3B,OAAOA,EAAM+8D,GAAO/8D,EAAIqI,qBAAqB,QAAU,IAEzD,SAAS67L,GAAc9B,EAAcj8J,GACnC,IAAIg+J,EAAiB,GACjB/tC,EAAU,SAAUp2J,EAAKwiB,GAC3B,IAAIwiD,EACCxiD,IACHA,EAAY1f,GAAS,IAEvBkiE,EAASp+D,EAAOq9L,GAAajkM,IAAM,SAAUm8B,GAC3C,IAAI9W,EAAM8W,EAAI9W,IACd,QAAKukH,GAAIlB,WAGLvsG,EAAI4V,aAAa,qBAGjB5V,EAAI4V,aAAa,6BAGhB1sB,GAAOA,IAAQukH,GAAIv1E,kBAGK,IAAzBhvC,EAAIplB,QAAQ,UACNmiM,EAAagB,WAAW/9K,IAAQ7C,EAAU2Z,GAEvB,IAAzB9W,EAAIplB,QAAQ,UACPuiB,EAAU2Z,UAIrB,IAAIioK,EAAWzqM,EAAIqrE,GAAQ,SAAU7oC,GACnC,GAAIgoK,EAAehoK,EAAI9W,KACrB,OAAO,IAAI8kH,IAAW,SAAUvyI,GAC9BusM,EAAehoK,EAAI9W,KAAK4C,MAAK,SAAUo8K,GACrC,GAAyB,kBAAdA,EACT,OAAOA,EAETzsM,EAAQ,CACN8uB,MAAOyV,EACP8J,SAAUo+J,EAAUp+J,iBAK5B,IAAIq+J,EAAa,IAAIn6D,IAAW,SAAUvyI,EAASyvB,GACjD08K,GAAgB59J,EAAWhK,EAAKvkC,EAASyvB,MACxCY,MAAK,SAAUkE,GAEhB,cADOg4K,EAAeh4K,EAAOzF,MAAMrB,KAC5B8G,KACN3D,OAAM,SAAUkB,GAEjB,cADOy6K,EAAehoK,EAAI9W,KACnBqE,KAGT,OADAy6K,EAAehoK,EAAI9W,KAAOi/K,EACnBA,KAET,OAAOn6D,GAAWlrI,IAAImlM,IAExB,MAAO,CAAEhuC,QAASA,GAGpB,IAAInxH,GAAU,EACV8sG,GAAO,WACT,IAAIwyD,EAAM,WACR,OAAOlsM,KAAKm5B,MAAsB,WAAhBn5B,KAAK0gJ,UAAuB/+I,SAAS,KAErDwqM,GAAM,IAAI76L,MAAOC,UACrB,MAAO,IAAM46L,EAAIxqM,SAAS,IAAMuqM,IAAQA,IAAQA,KAE9CE,GAAO,SAAUj7L,GACnB,OAAOA,EAASy7B,KAAY8sG,MAE1B2yD,GAAO,CAAED,KAAMA,IAEnB,SAASE,KACP,IAAIriI,EAAQ,GACRsiI,EAAY,SAAUljH,GACxB,IAAIT,EAAQ,CACV,aAAc,MACd,YAAa,MACb,YAAa,MACb,YAAa,OAEf,OAAOA,EAAMS,EAAKppE,gBAAkB,OAElCpQ,EAAS,SAAUrO,EAAGqvB,EAAMwB,EAAQ7tB,GACtC,GAAIu/C,EAASviD,GAAI,CACf,IAAIU,EAAKV,EACT,OAAOgrM,EAAW,CAChBtqM,GAAIA,EACJ4E,KAAMtC,EACNqsB,KAAMA,EACNwB,OAAQA,IAEL,GAAIo+G,EAASjvI,GAClB,OAAOgrM,EAAWhrM,GAElB,MAAM,IAAIqY,MAAM,uBAGhB2yL,EAAa,SAAUhrM,GACzB,IAAIU,EAAI4E,EACR,IAAKtF,EAAEqvB,OAASrvB,EAAE6wB,OAChB,MAAM,IAAIxY,MAAM,wFAIlB,OAFA3X,EAAKV,EAAEU,IAAMmqM,GAAKD,KAAK,UACvBtlM,EAAOtF,EAAEsF,MAAQ5E,EACV,CACLA,GAAIuI,EAASvI,GACb4E,KAAM2D,EAAS3D,GACftC,SAAUiG,EAAS3D,EAAO,IAAMylM,EAAU/qM,EAAEqvB,KAAK1vB,OACjD0vB,KAAMpmB,EAASjJ,EAAEqvB,MACjBwB,OAAQ5nB,EAASjJ,EAAE6wB,QACnBsc,QAASlkC,EAASjJ,EAAEmtC,SAAW5d,GAAIC,gBAAgBxvB,EAAEqvB,OACrDsB,IAAK1nB,EAASjJ,EAAE2wB,OAGhBtrB,EAAM,SAAU+mC,GACb7uC,EAAI6uC,EAAS1rC,OAChB+nE,EAAM1jE,KAAKqnC,IAGX7uC,EAAM,SAAUmD,GAClB,OAAOkqE,GAAU,SAAUC,GACzB,OAAOA,EAAenqE,OAASA,MAG/BkqE,EAAY,SAAUjiD,GACxB,OAAO5b,EAAO07D,EAAO9/C,GAAW,IAE9B4jB,EAAW,SAAUY,GACvB,OAAOy9B,GAAU,SAAUx+B,GACzB,OAAOA,EAASe,YAAcA,MAG9B89J,EAAc,SAAU99J,GAC1Bs7B,EAAQ17D,EAAO07D,GAAO,SAAUr8B,GAC9B,OAAIA,EAASe,YAAcA,IACzB5d,GAAIiD,gBAAgB4Z,EAASe,YACtB,OAKTvL,EAAU,WACZ50B,EAAKy7D,GAAO,SAAUoC,GACpBt7C,GAAIiD,gBAAgBq4C,EAAe19B,cAErCs7B,EAAQ,IAEV,MAAO,CACLp6D,OAAQA,EACRhJ,IAAKA,EACL9H,IAAKA,EACLgvC,SAAUA,EACVq+B,UAAWA,EACXqgI,YAAaA,EACbrpK,QAASA,GAIb,SAASspK,KACP,IAAIC,EAAU,EAAGC,EAAW,EACxBC,EAAkB,GAClBC,EAAe,SAAUn7K,EAAQo7K,GACnC,MAAO,CACLp7K,OAAQA,EACRo7K,UAAWA,IAGXC,EAAa,SAAUr+J,GACzB,OAAOA,KAAWk+J,GAEhBI,EAAe,SAAUt+J,GAC3B,IAAI7a,EAAS+4K,EAAgBl+J,GAC7B,OAAO7a,EAASA,EAAOi5K,UAAY,MAEjC/B,EAAY,SAAUr8J,GACxB,QAAOq+J,EAAWr+J,IAAWk+J,EAAgBl+J,GAAShd,SAAWg7K,GAE/D5B,EAAa,SAAUp8J,GACzB,QAAOq+J,EAAWr+J,IAAWk+J,EAAgBl+J,GAAShd,SAAWi7K,GAE/DrC,EAAc,SAAU57J,GAC1Bk+J,EAAgBl+J,GAAWm+J,EAAaH,EAAS,OAE/ClC,EAAe,SAAU97J,EAASo+J,GACpCF,EAAgBl+J,GAAWm+J,EAAaF,EAAUG,IAEhDrC,EAAe,SAAU/7J,UACpBk+J,EAAgBl+J,IAErBvL,EAAU,WACZypK,EAAkB,IAEpB,MAAO,CACLG,WAAYA,EACZC,aAAcA,EACdjC,UAAWA,EACXD,WAAYA,EACZR,YAAaA,EACbE,aAAcA,EACdC,aAAcA,EACdtnK,QAASA,GAIb,SAAS8pK,GAAcxtM,GACrB,IACI4gD,EAAU6sJ,EADVr/J,EAAYw+J,KAEZvC,EAAe2C,KACfU,EAAa,GACbC,EAAa,SAAUpqM,GACzB,OAAO,SAAU6wB,GACf,OAAIp0B,EAAO6L,UACFtI,EAAS6wB,GAEX,KAGPw5K,EAAmB,WACrB,MAAO,KAAM,IAAIh8L,MAAOC,WAEtBg8L,EAAgB,SAAUnsM,EAAS8qD,EAAQ3qD,GAC7C,IAAI0E,EAAQ,EACZ,GACEA,EAAQ7E,EAAQwG,QAAQskD,EAAQjmD,IACjB,IAAXA,IACF7E,EAAUA,EAAQyf,UAAU,EAAG5a,GAAS1E,EAAUH,EAAQokB,OAAOvf,EAAQimD,EAAOvpD,QAChFsD,GAAS1E,EAAQoB,OAASupD,EAAOvpD,OAAS,UAE1B,IAAXsD,GACT,OAAO7E,GAELosM,EAAkB,SAAUpsM,EAASioM,EAAWoE,GAGlD,OAFArsM,EAAUmsM,EAAcnsM,EAAS,QAAUioM,EAAY,IAAK,QAAUoE,EAAiB,KACvFrsM,EAAUmsM,EAAcnsM,EAAS,iBAAmBioM,EAAY,IAAK,iBAAmBoE,EAAiB,KAClGrsM,GAELssM,EAAwB,SAAUrE,EAAWoE,GAC/Cj/L,EAAK9O,EAAOgM,YAAY9G,MAAM,SAAUuN,GACnB,eAAfA,EAAMhR,KACRgR,EAAMw7L,UAAYrsM,EAAI6Q,EAAMw7L,WAAW,SAAUrmJ,GAC/C,OAAOkmJ,EAAgBlmJ,EAAU+hJ,EAAWoE,MAG9Ct7L,EAAM/Q,QAAUosM,EAAgBr7L,EAAM/Q,QAASioM,EAAWoE,OAI5DnD,EAAmB,WACrB,OAAO5qM,EAAOytC,oBAAoBxgC,KAAK,CACrCxH,KAAMzF,EAAOoT,UAAU,sBACvB3R,KAAM,OACN6kE,SAAU,EACVshI,aAAa,KAGbsG,EAAkB,SAAUv/K,EAAO0+K,GACrCj/J,EAAU2+J,YAAYp+K,EAAMrB,KAC5B0gL,EAAsBr/K,EAAMrB,IAAK+/K,GACjCrtM,EAAOsM,EAAEqiB,GAAO1f,KAAK,CACnB,IAAOpO,GAAS07K,oBAAoBv8K,GAAUqtM,EAAYO,IAAqBP,EAC/E,eAAgBrtM,EAAO4+C,WAAWyuJ,EAAW,UAG7Cc,EAAe,SAAU5qM,GAS3B,OARKq9C,IACHA,EAAWpB,GAAS6qJ,EAAc,CAChC9gM,IAAK1I,GAAS47K,kBAAkBz8K,GAChCmgD,SAAUt/C,GAAS67K,uBAAuB18K,GAC1C6/C,YAAah/C,GAAS87K,2BAA2B38K,GACjDsgD,QAASz/C,GAAS+7K,uBAAuB58K,MAGtCouM,IAAgBl+K,KAAKy9K,GAAW,SAAUU,GAC/C,IAAIjD,EAIJ,OAHAA,EAAYxpM,EAAIysM,GAAY,SAAU/B,GACpC,OAAOA,EAAUp+J,YAEZ0S,EAASd,OAAOsrJ,EAAWR,GAAkB16K,KAAKy9K,GAAW,SAAUv5K,GAC5E,IAAIk6K,EAAiB1sM,EAAIwyB,GAAQ,SAAUm6K,EAAYhoM,GACrD,IAAIooB,EAAQ0/K,EAAW9nM,GAAOooB,MAM9B,OALI4/K,EAAWt8K,QAAUpxB,GAAS27K,sBAAsBx8K,GACtDkuM,EAAgBv/K,EAAO4/K,EAAWhlM,KACzBglM,EAAW58K,OACpBw4K,GAAcJ,YAAY/pM,EAAQuuM,EAAW58K,OAExC,CACL5tB,QAAS4qB,EACTsD,OAAQs8K,EAAWt8K,WAMvB,OAHI1uB,GACFA,EAAS+qM,GAEJA,WAIT7/J,EAAmB,SAAUlrC,GAC/B,GAAI1C,GAASy7K,0BAA0Bt8K,GACrC,OAAOmuM,EAAa5qM,IAGpB6oE,EAAsB,SAAUtzB,GAClC,IAES,IAFLn+B,GAAO+yL,GAAY,SAAU7+L,GAC7B,OAAOA,EAAOiqC,MAEhB,OAAO,EAET,GAAoD,IAAhDA,EAAO3gC,aAAa,OAAOjQ,QAAQ,SAAgB,CACrD,IAAIsmM,EAAgB3tM,GAASw7K,uBAAuBr8K,GACpD,OAAOwuM,EAAc11J,GAEvB,OAAO,GAEL21J,EAAY,SAAU5/L,GACxB6+L,EAAW7mM,KAAKgI,IAEdu/L,EAAgB,WAIlB,OAHKX,IACHA,EAAetB,GAAa9B,EAAcj8J,IAErCq/J,EAAapvC,QAAQr+J,EAAOoU,UAAWg4D,GAAqBl8C,KAAKy9K,GAAW,SAAUv5K,GAa3F,OAZAA,EAASvlB,EAAOulB,GAAQ,SAAUs6K,GAChC,MAA0B,kBAAfA,IACTvE,GAAc38J,aAAaxtC,EAAQ0uM,IAC5B,MAIX5/L,EAAKslB,GAAQ,SAAUs6K,GACrBV,EAAsBU,EAAW//K,MAAMrB,IAAKohL,EAAWxgK,SAASe,WAChEy/J,EAAW//K,MAAMrB,IAAMohL,EAAWxgK,SAASe,UAC3Cy/J,EAAW//K,MAAMmc,gBAAgB,mBAE5B1W,OAGPsP,EAAU,WACZ0K,EAAU1K,UACV2mK,EAAa3mK,UACb+pK,EAAe7sJ,EAAW,MAExB+tJ,EAAkB,SAAUjtM,GAC9B,OAAOA,EAAQG,QAAQ,uBAAuB,SAAUM,EAAO8sC,GAC7D,IAAIo+J,EAAYhD,EAAakD,aAAat+J,GAC1C,GAAIo+J,EACF,MAAO,QAAUA,EAAY,IAE/B,IAAIn/J,EAAWE,EAAUC,SAASY,GAMlC,GALKf,IACHA,EAAW0W,EAAM5kD,EAAO0/L,cAAcrgM,OAAO,SAAU+0B,EAAQp0B,GAC7D,OAAOo0B,GAAUp0B,EAAOmuC,cAAgBnuC,EAAOmuC,aAAaC,UAAUC,SAASY,KAC9E,OAEDf,EAAU,CACZ,IAAI/c,EAAO+c,EAAS/c,OACpB,MAAO,aAAeA,EAAK1vB,KAAO,WAAaysC,EAASvb,SAAW,IAErE,OAAOxwB,MAiCX,OA9BAnC,EAAO4O,GAAG,cAAc,WAClB/N,GAASy7K,0BAA0Bt8K,GACrCyuC,IAEA2/J,OAGJpuM,EAAO4O,GAAG,kBAAkB,SAAUR,GACpCA,EAAE1M,QAAUitM,EAAgBvgM,EAAE1M,YAEhC1B,EAAO4O,GAAG,cAAc,SAAUR,GAC5BA,EAAE+U,aAA4B,QAAb/U,EAAEuG,SAGvBvG,EAAE1M,QAAUitM,EAAgBvgM,EAAE1M,aAEhC1B,EAAO4O,GAAG,cAAc,WACtB5O,EAAO4hD,OAAOC,cAAc,OAAO,SAAUorB,GAC3Cn+D,EAAKm+D,GAAQ,SAAU7oC,GACrB,IAAI9W,EAAM8W,EAAIn1B,KAAK,OACnB,IAAIm/B,EAAUC,SAAS/gB,GAAvB,CAGA,IAAI+/K,EAAYhD,EAAakD,aAAajgL,GACtC+/K,GACFjpK,EAAIn1B,KAAK,MAAOo+L,aAKjB,CACLj/J,UAAWA,EACXqgK,UAAWA,EACXN,aAAcA,EACd1/J,iBAAkBA,EAClB2/J,cAAeA,EACf1qK,QAASA,GAIb,IAAIkrK,GAAiB,SAAU/rJ,EAAej3C,GAC5C,OAAOi3C,EAAcxgD,eAAeuJ,EAAKtH,WAEvCuqM,GAAgB,SAAUhsJ,EAAej3C,GAC3C,QAAIu3C,GAASj8B,OAAOtb,MAETu3C,GAASsM,UAAU7jD,MACpBgjM,GAAe/rJ,EAAej3C,KAAUwkK,GAAUt5G,eAAelrD,KAKzEkjM,GAAiB,SAAUjsJ,EAAe//C,EAAM8I,GAClD,OAAO8O,EAAO+lK,GAAQ3kH,QAAQvU,GAAQN,QAAQr7C,GAAO27C,GAAQN,QAAQnkD,KAAQ,SAAUmF,GACrF,OAAO2mM,GAAe/rJ,EAAe56C,EAAIiE,WAGzC6iM,GAAuB,SAAUlsJ,EAAej3C,GAClD,GAAIu3C,GAASj8B,OAAOtb,GAAO,CACzB,GAA8B,IAA1BA,EAAK+mF,UAAU1vF,OACjB,OAAO,EACF,GAAI,QAAQkB,KAAKyH,EAAK+mF,cAAgB/mF,EAAKuc,aAAeymL,GAAe/rJ,EAAej3C,EAAKuc,cAClG,OAAO,EAGX,OAAO,GAEL6mL,GAAgB,SAAUhvM,GAC5B,IAIIkmB,EACAI,EAAgBG,EAAai9B,EAAch9B,EAAWuoL,EACtDC,EAAUpoM,EAAS61L,EACnBwS,EAAcC,EAPdnvM,EAAWD,EAAOC,SAAUiM,EAAMlM,EAAOkM,IAAKL,EAAY7L,EAAO6L,UACjEwwC,EAASr8C,EAAOq8C,OAAQwG,EAAgBxG,EAAOsX,mBAC/C/nD,EAAOC,EAAUgJ,WACjBsuD,EAAWnjE,EAAOoU,UAMtB,GADAg7L,EAAkBnvM,EAAS4zD,kBACtBjoD,GAASu3C,GAASsM,UAAU7jD,IAAUwjM,IAG3CD,EAAehsI,EAAS7+D,SAASic,cAC5B87B,EAAOm4G,aAAa26C,EAAcC,EAAgB7uL,iBAAkBuuL,GAAejsJ,EAAesgB,EAAUv3D,IAAjH,CAGAsa,EAAMra,EAAUyc,SAChBhC,EAAiBJ,EAAII,eACrBG,EAAcP,EAAIO,YAClBi9B,EAAex9B,EAAIw9B,aACnBh9B,EAAYR,EAAIQ,UAChBi2K,EAAmByJ,GAAYzoD,SAAS39I,GACxC4L,EAAOu3D,EAASjrD,WAChB,MAAOtM,EACL,GAAIijM,GAAchsJ,EAAej3C,GAAO,CACtC,GAAImjM,GAAqBlsJ,EAAej3C,GAAO,CAC7CsjM,EAAWtjM,EACXA,EAAOA,EAAKuc,YACZjc,EAAImJ,OAAO65L,GACX,SAEGD,IACHA,EAAgB/iM,EAAIiE,OAAOi/L,EAAiBpvM,EAAOC,SAAS6zD,yBAC5DloD,EAAKvH,WAAW3B,aAAausM,EAAerjM,GAC5C9E,GAAU,GAEZooM,EAAWtjM,EACXA,EAAOA,EAAKuc,YACZ8mL,EAAc1+L,YAAY2+L,QAE1BD,EAAgB,KAChBrjM,EAAOA,EAAKuc,YAGZrhB,GAAW61L,IACbz2K,EAAIW,SAASP,EAAgBG,GAC7BP,EAAIY,OAAO48B,EAAch9B,GACzB7a,EAAU0b,OAAOrB,GACjBlmB,EAAOmV,iBAGPk6L,GAAU,SAAUrvM,GAClBA,EAAOC,SAAS4zD,mBAClB7zD,EAAO4O,GAAG,aAAc+J,EAAMq2L,GAAehvM,KAG7CsvM,GAAc,CAAE3gM,MAAO0gM,IAEvBE,GAAe,SAAUrpL,GAC3B,IAAIg6E,EAAKh6E,EAAII,eAAgBm+I,EAAKv+I,EAAIO,YACtC,OAAI08B,GAASj8B,OAAOg5E,GACJ,IAAPukE,EAAWppJ,EAAOL,KAAKusC,GAAQN,QAAQi5C,IAAO7kF,EAAOhC,OAErDgC,EAAO/U,KAAK45F,EAAGjoF,WAAWwsJ,IAAK7iK,IAAI2lD,GAAQN,UAGlDuoJ,GAAa,SAAUtpL,GACzB,IAAIs+I,EAAKt+I,EAAIw9B,aAAcghH,EAAKx+I,EAAIQ,UACpC,OAAIy8B,GAASj8B,OAAOs9I,GACXE,IAAOF,EAAGt/J,KAAKjC,OAASoY,EAAOL,KAAKusC,GAAQN,QAAQu9G,IAAOnpJ,EAAOhC,OAElEgC,EAAO/U,KAAKk+J,EAAGvsJ,WAAWysJ,EAAK,IAAI9iK,IAAI2lD,GAAQN,UAGtDwoJ,GAAmB,SAAU7jM,GAC/B,OAAOsM,GAAWtM,GAAMgO,KAAK7O,EAAS,CAACa,KAAQ,SAAUsjD,GACvD,MAAO,CAACtjD,GAAMoN,OAAOy2L,GAAiBvgJ,QAGtCwgJ,GAAoB,SAAU9jM,GAChC,OAAO82C,GAAU92C,GAAMgO,KAAK7O,EAAS,CAACa,KAAQ,SAAUsjD,GACtD,MAAoB,OAAhB9nD,GAAK8nD,GACAqnC,GAAYrnC,GAAOttD,KAAI,SAAU61D,GACtC,MAAO,CAAC7rD,GAAMoN,OAAO02L,GAAkBj4I,OACtC19C,MAAM,IAEF,CAACnO,GAAMoN,OAAO02L,GAAkBxgJ,QAIzCygJ,GAAyB,SAAU1nM,EAAKie,GAC1C,OAAOshC,GAAM+nJ,GAAarpL,GAAMspL,GAAWtpL,IAAM,SAAUywC,EAAWC,GACpE,IAAInyC,EAAQlV,EAAKkgM,GAAiBxnM,GAAM0Q,EAAMY,GAAIo9C,IAC9CtxC,EAAM9V,EAAKmgM,GAAkBznM,GAAM0Q,EAAMY,GAAIq9C,IACjD,OAAOnyC,EAAM3K,UAAYuL,EAAIvL,YAC5BC,OAAM,IAEP61L,GAAiB,SAAU1jM,EAAKga,EAAKta,EAAM6Y,GAC7C,IAAI3hB,EAAO8I,EAAMsd,EAAS,IAAI+/H,GAAWr9I,EAAM9I,GAC3CytJ,EAAsBrkJ,EAAImwC,OAAO+c,sBACrC,EAAG,CACD,GAAsB,IAAlBxtD,EAAK2a,UAAwD,IAAtC3mB,GAAMsP,KAAKtD,EAAK+mF,WAAW1vF,OAMpD,YALIwhB,EACFyB,EAAIW,SAASjb,EAAM,GAEnBsa,EAAIY,OAAOlb,EAAMA,EAAK+mF,UAAU1vF,SAIpC,GAAIstJ,EAAoB3kJ,EAAKtH,YAAc,YAAYH,KAAKyH,EAAKtH,UAU/D,YATImgB,EACFyB,EAAI8xD,eAAepsE,GAEG,OAAlBA,EAAKtH,SACP4hB,EAAIq1G,aAAa3vH,GAEjBsa,EAAIivC,YAAYvpD,IAKtB,GAAIimI,GAAIlkH,IAAMkkH,GAAIlkH,GAAK,IAAMzhB,EAAI02C,QAAQh3C,IAASM,EAAI4wC,QAAQlxC,GAM5D,YALI6Y,EACFyB,EAAIW,SAASjb,EAAM,GAEnBsa,EAAIY,OAAOlb,EAAM,UAIdA,EAAO6Y,EAAQyE,EAAOC,OAASD,EAAOqpE,QACzB,SAAlBzvF,EAAKwB,WACHmgB,EACFyB,EAAIW,SAAS/jB,EAAM,GAEnBojB,EAAIY,OAAOhkB,EAAMA,EAAKmV,WAAWhV,UAInC4sM,GAAe,SAAU7vM,GAC3B,IAAI+yC,EAAM/yC,EAAO6L,UAAUw+K,SAC3B,OAAOt3I,GAAOA,EAAI4sF,WAAa,GAGjC,SAASmwE,GAAY9vM,GACnB,IAAIkvE,EAAS6gI,EAAW,GACpBC,EAAoB,SAAUlhB,GAChC,IAAItrL,EAAGysM,EAEP,GADAA,EAAcjwM,EAAOsM,EAAEwiL,GAAU5pC,aAAallJ,EAAOoU,WAAWjN,IAAI2nL,GAChEmhB,EAAYhtM,SAAW8sM,EAAS9sM,OAAQ,CAC1C,IAAKO,EAAIysM,EAAYhtM,OAAQO,GAAK,EAAGA,IACnC,GAAIysM,EAAYzsM,KAAOusM,EAASvsM,GAC9B,MAGJ,IAAW,IAAPA,EAEF,OADAusM,EAAWE,GACJ,EAIX,OADAF,EAAWE,GACJ,GAEH,sBAAuBjwM,EAAOyP,UAClCzP,EAAO4O,GAAG,wCAAwC,SAAUR,GAC1D,IAAI8hM,EAAWC,EACfD,EAAYlwM,EAAO6L,UAAUyc,SAC7B6nL,EAAU,CACR7pL,eAAgB4pL,EAAU5pL,eAC1BG,YAAaypL,EAAUzpL,YACvBi9B,aAAcwsJ,EAAUxsJ,aACxBh9B,UAAWwpL,EAAUxpL,WAER,eAAXtY,EAAE3M,MAA0Bk2L,GAAa7mB,KAAKq/B,EAASjhI,IACzDlvE,EAAO2hC,KAAK,mBAEdutC,EAAUihI,KAGdnwM,EAAO4O,GAAG,eAAe,WACvB5O,EAAO2hC,KAAK,sBAEd3hC,EAAO4O,GAAG,mBAAmB,WAC3B,IAAIkgL,EAAW9uL,EAAO6L,UAAUgJ,UAAS,IACpCi6K,IAAaj9C,GAAInhE,OAAS1wE,EAAO6L,UAAU0C,eAG5CshM,GAAa7vM,KAAYgwM,EAAkBlhB,IAAa9uL,EAAOkM,IAAIg3C,UAAU4rI,EAAU9uL,EAAOoU,YAChGpU,EAAOmV,YAAY,CAAEi7L,iBAAiB,OAG1CpwM,EAAO4O,GAAG,WAAW,SAAUR,IACxBA,EAAEy1D,sBAAwBgsI,GAAa7vM,KACE,QAAxCA,EAAO6L,UAAUC,UAAUxH,SAC7ByuI,GAAM1nH,iBAAiBrrB,GAAQ,WAC7BA,EAAOmV,iBAGTnV,EAAOmV,kBAIb7R,KAAK6R,YAAc,SAAUvO,GAC3B,IACIgF,EAAMkwD,EAASh5D,EADf+I,EAAY7L,EAAO6L,UAEnB7L,EAAO8+L,aAAejzL,IAAc7L,EAAOC,SAASowM,qBAAuBrwM,EAAOiU,WACpFnR,EAAO9C,EAAOoU,UACdxI,EAAOC,EAAUgJ,UAAS,IAAS/R,EAC/B8I,EAAKm2B,gBAAkB/hC,EAAOyP,UAAazP,EAAOkM,IAAIg3C,UAAUt3C,EAAM9I,KACxE8I,EAAO9I,GAETg5D,EAAU,GACV97D,EAAOkM,IAAIyL,UAAU/L,GAAM,SAAUA,GACnC,GAAIA,IAAS9I,EACX,OAAO,EAETg5D,EAAQj1D,KAAK+E,MAEfhF,EAAOA,GAAQ,GACfA,EAAK7C,QAAU6H,EACfhF,EAAKk1D,QAAUA,EACf97D,EAAO2hC,KAAK,aAAc/6B,KAKhC,IA4CI0pM,GA5CAC,GAAK,CACPx1I,UAAW,EACXC,OAAQ,GACRr4B,KAAM,GACNC,MAAO,GACPJ,KAAM,GACNC,MAAO,GACPI,SAAU,GACV04B,IAAK,EACL74B,GAAI,GACJ+zI,IAAK,GACL+5B,KAAM,GACN5lL,gBAAiB,SAAUxc,GACzB,OAAOA,EAAEqtD,UAAYrtD,EAAEgoC,SAAWhoC,EAAEoyE,QAAUl9E,KAAKk4D,eAAeptD,IAEpEotD,eAAgB,SAAUptD,GACxB,OAAOyjI,GAAIz1H,IAAMhO,EAAEqyE,QAAUryE,EAAEgoC,UAAYhoC,EAAEoyE,SAI7CiwH,GAAqB,SAAU7kM,GACjC,IAAI8kM,EAAkB,SAAU9rC,GAC9B,OAAOhjK,EAAIgjK,GAAa,SAAUP,GAGhC,OAFAA,EAAar0G,GAAQq0G,GACrBA,EAAWz4J,KAAOA,EACXy4J,MAGX,GAAIlhH,GAASsM,UAAU7jD,GACrB,OAAO8kM,EAAgB9kM,EAAKiwH,kBAE9B,GAAI14E,GAASj8B,OAAOtb,GAAO,CACzB,IAAIsa,EAAMta,EAAKm2B,cAAcnb,cAG7B,OAFAV,EAAIW,SAASjb,EAAM,GACnBsa,EAAIY,OAAOlb,EAAMA,EAAK1G,KAAKjC,QACpBytM,EAAgBxqL,EAAI21G,oBAG3BA,GAAiB,SAAUjwH,GAC7B,OAAOg5C,EAAMh5C,GAAM,SAAUwoB,EAAQxoB,GACnC,OAAOwoB,EAAOpb,OAAOy3L,GAAmB7kM,MACvC,MAIJ,SAAU0kM,GACTA,EAAWA,EAAW,OAAS,GAAK,KACpCA,EAAWA,EAAW,QAAU,GAAK,QAFvC,CAGEA,KAAeA,GAAa,KAC9B,IAAIK,GAAY,SAAUljM,EAAW3K,EAAMsF,EAAawD,GACtD,MAAOA,EAAOy/J,GAASz/J,EAAM6B,EAAW00J,GAA0Br/J,GAChE,GAAIsF,EAAYwD,GACd,QAIFglM,GAAY,SAAUnjM,EAAWojM,EAAWC,EAAYhuM,EAAMsF,EAAa48J,GAC7E,IAAcp5J,EAEVmlM,EAFAC,EAAO,EACP58K,EAAS,GAETjtB,EAAM,SAAUyE,GAClB,IAAIpI,EAAG6gK,EAAYO,EAKnB,IAJAA,EAAc/oC,GAAe,CAACjwH,KACX,IAAf6B,IACFm3J,EAAcA,EAAYj9H,WAEvBnkC,EAAI,EAAGA,EAAIohK,EAAY3hK,OAAQO,IAElC,GADA6gK,EAAaO,EAAYphK,IACrBstM,EAAWzsC,EAAY0sC,GAA3B,CAOA,GAJI38K,EAAOnxB,OAAS,GAAK4tM,EAAUxsC,EAAYziB,GAAStrI,KAAK8d,KAC3D48K,IAEF3sC,EAAW2sC,KAAOA,EACd5oM,EAAYi8J,GACd,OAAO,EAETjwI,EAAOvtB,KAAKw9J,KAIhB,OADA0sC,EAAmBnvD,GAAStrI,KAAK0uJ,EAAcnpC,kBAC1Ck1E,GAGLnlM,EAAOo5J,EAAcl5J,UACrB3E,EAAIyE,GACJ+kM,GAAUljM,EAAW3K,EAAMqE,EAAKyE,GACzBwoB,GALEA,GAOP68K,GAAkB,SAAUC,EAAY7sC,GAC1C,OAAOA,EAAW2sC,KAAOE,GAEvBC,GAAe,SAAUD,EAAY7sC,GACvC,OAAOA,EAAW2sC,OAASE,GAEzBE,GAAUz4L,EAAMi4L,GAAWN,GAAWe,GAAI3uC,GAASE,IACnD0uC,GAAY34L,EAAMi4L,GAAWN,GAAWiB,KAAM3uC,GAASF,IACvD8uC,GAAiB,SAAU/jM,EAAW3K,EAAMsF,EAAawD,GAC3D,IACI6gK,EAAQglC,EAAWZ,EAAW7rC,EAEpBX,EAAY0sC,EAHtB96B,EAAcvI,GAAY5qK,GAE1BsxB,EAAS,GACT48K,EAAO,EACPU,EAAgB,SAAU1sC,GAC5B,OACSpjB,GAAStrI,KAAK0uJ,EAAcnpC,mBAIrB,IAAdpuH,GACFg/J,EAASwJ,EAAY9sJ,KACrBsoL,EAAY7uC,GACZiuC,EAAYnuC,GACZsC,EAAgBc,GAAgBn/J,MAAMiF,KAEtC6gK,EAASwJ,EAAY1jF,KACrBk/G,EAAY/uC,GACZmuC,EAAYjuC,GACZoC,EAAgBc,GAAgBljK,OAAOgJ,IAEzCmlM,EAAmBW,EAAc1sC,GACjC,GACE,GAAKA,EAAcM,cAGnBjB,EAAaqtC,EAAc1sC,IACvB6rC,EAAUxsC,EAAY0sC,IAA1B,CASA,GANI38K,EAAOnxB,OAAS,GAAKwuM,EAAUptC,EAAYziB,GAAStrI,KAAK8d,KAC3D48K,IAEF3sC,EAAar0G,GAAQq0G,GACrBA,EAAWxsH,SAAWmtH,EACtBX,EAAW2sC,KAAOA,EACd5oM,EAAYi8J,GACd,OAAOjwI,EAETA,EAAOvtB,KAAKw9J,UACLW,EAAgByH,EAAOzH,IAChC,OAAO5wI,GAELu9K,GAAc,SAAUT,GAC1B,OAAO,SAAU7sC,GACf,OAAO4sC,GAAgBC,EAAY7sC,KAGnCutC,GAAS,SAAUV,GACrB,OAAO,SAAU7sC,GACf,OAAO8sC,GAAaD,EAAY7sC,KAIhCwtC,GAA2B1uJ,GAAS4yB,uBACpC+7H,GAAazmC,GACb0mC,GAAqB,SAAU1tC,EAAYvvH,GAC7C,OAAOx0C,KAAK8zG,IAAIiwD,EAAWlhI,KAAO2R,IAEhCk9J,GAAsB,SAAU3tC,EAAYvvH,GAC9C,OAAOx0C,KAAK8zG,IAAIiwD,EAAW3gE,MAAQ5uD,IAEjCm9J,GAAW,SAAUn9J,EAASuvH,GAChC,OAAOvvH,GAAWuvH,EAAWlhI,MAAQ2R,GAAWuvH,EAAW3gE,OAEzDwuG,GAAwB,SAAUttC,EAAa9vH,GACjD,OAAO8sG,GAASx2G,OAAOw5H,GAAa,SAAUutC,EAAe9tC,GAC3D,IAAI+tC,EAAaC,EAGjB,OAFAD,EAAc9xM,KAAKC,IAAIwxM,GAAmBI,EAAer9J,GAAUk9J,GAAoBG,EAAer9J,IACtGu9J,EAAc/xM,KAAKC,IAAIwxM,GAAmB1tC,EAAYvvH,GAAUk9J,GAAoB3tC,EAAYvvH,IAC5Fm9J,GAASn9J,EAASuvH,GACbA,EAEL4tC,GAASn9J,EAASq9J,GACbA,EAELE,IAAgBD,GAAeP,GAAyBxtC,EAAWz4J,OAGnEymM,EAAcD,EAFT/tC,EAKF8tC,MAGPG,GAAc,SAAU7kM,EAAW3K,EAAMsF,EAAawD,GACxD,MAAOA,EAAOkmM,GAAWlmM,EAAM6B,EAAW00J,GAA0Br/J,GAClE,GAAIsF,EAAYwD,GACd,QAIF2mM,GAAoB,SAAUzvM,EAAM0vM,GACtC,IAAI5tC,EAAc,GACdjM,EAAU,SAAU85C,EAAY7mM,GAClC,IAAI8mM,EAKJ,OAJAA,EAAY7jM,EAAOgtH,GAAe,CAACjwH,KAAQ,SAAUy4J,GACnD,OAAQouC,EAAWpuC,EAAYmuC,MAEjC5tC,EAAcA,EAAY5rJ,OAAO05L,GACL,IAArBA,EAAUzvM,QAKnB,OAHA2hK,EAAY/9J,KAAK2rM,GACjBF,GAAYhC,GAAWe,GAAIvuM,EAAM6V,EAAMggJ,EAAS+J,IAAU8vC,EAAe5mM,MACzE0mM,GAAYhC,GAAWiB,KAAMzuM,EAAM6V,EAAMggJ,EAASiK,IAAU4vC,EAAe5mM,MACpEg5J,GAEL+tC,GAAsB,SAAU7vM,GAClC,OAAO+L,EAAOm2D,GAAOliE,EAAKwN,qBAAqB,MAAOq6J,KAEpDioC,GAAY,SAAUvuC,EAAYvvH,GACpC,MAAO,CACLlpC,KAAMy4J,EAAWz4J,KACjBhJ,OAAQmvM,GAAmB1tC,EAAYvvH,GAAWk9J,GAAoB3tC,EAAYvvH,KAGlF+9J,GAAe,SAAU/vM,EAAMgyC,EAASC,GAC1C,IAAI+9J,EACAC,EAAgCl3E,GAAe82E,GAAoB7vM,IACnEkwM,EAAkBnkM,EAAOkkM,GAA+B,SAAUvxK,GACpE,OAAOuT,GAAWvT,EAAK4B,KAAO2R,GAAWvT,EAAKsW,UAGhD,OADAg7J,EAAkBZ,GAAsBc,EAAiBl+J,GACrDg+J,IACFA,EAAkBZ,GAAsBK,GAAkBzvM,EAAMgwM,GAAkBh+J,GAC9Eg+J,GAAmBnoC,GAAkBmoC,EAAgBlnM,OAChDgnM,GAAUE,EAAiBh+J,GAG/B,MAGLm+J,GAAkB,SAAUn+J,EAASC,EAAS27B,GAChD,GAAIA,EAAMtqD,UACR,OAAO,EAET,GAAIyrH,GAAIlkH,IAAMkkH,GAAIlkH,IAAM,IAAM+iD,EAAMjqD,cAAgBiqD,EAAMhqD,UAAY,GAAKgqD,EAAMpqD,iBAAmBoqD,EAAMhtB,aAAc,CACtH,IAAIz7C,EAAMyoE,EAAMpqD,eAAerO,WAAWy4D,EAAMjqD,aAChD,GAAI08B,GAASsM,UAAUxnD,GACrB,OAAOyS,EAAOzS,EAAI4zH,kBAAkB,SAAUr6F,GAC5C,OAAOqhI,GAAWrhI,EAAMsT,EAASC,MAIvC,OAAOr6B,EAAOg2D,EAAMmrD,kBAAkB,SAAUr6F,GAC9C,OAAOqhI,GAAWrhI,EAAMsT,EAASC,OAGjCm+J,GAAa,CAAED,gBAAiBA,IAEhCE,GAAsB,SAAUlrM,GAClC,IAAI2gB,EAAKmuH,EAAShxG,EAAKs+H,EAKvB,OAJAA,EAAap8J,EAAI6jG,wBACjBljF,EAAM3gB,EAAI85B,cACVg1G,EAAUnuH,EAAIyyD,gBACdt1C,EAAMnd,EAAIutE,YACH,CACL/yD,IAAKihI,EAAWjhI,IAAM2C,EAAI2pE,YAAcqnC,EAAQnnC,UAChDzsE,KAAMkhI,EAAWlhI,KAAO4C,EAAI4pE,YAAconC,EAAQlnC,aAGlDujG,GAAkB,SAAUpzM,GAC9B,OAAOA,EAAOkQ,OAASijM,GAAoBnzM,EAAOoU,WAAa,CAC7D+uB,KAAM,EACNC,IAAK,IAGLiwK,GAAoB,SAAUrzM,GAChC,IAAI2N,EAAO3N,EAAOoU,UAClB,OAAOpU,EAAOkQ,OAAS,CACrBizB,KAAMx1B,EAAKynC,WACXhS,IAAKz1B,EAAK0nC,WACR,CACFlS,KAAM,EACNC,IAAK,IAGLkwK,GAAgB,SAAUtzM,GAC5B,IAAI2N,EAAO3N,EAAOoU,UAAWizC,EAASrnD,EAAOyP,SAAS4rE,gBAClDk4H,EAAe,CACjBpwK,KAAMx1B,EAAKynC,WACXhS,IAAKz1B,EAAK0nC,WAERm+J,EAAe,CACjBrwK,KAAMx1B,EAAKynC,YAAciS,EAAOjS,WAChChS,IAAKz1B,EAAK0nC,WAAagS,EAAOhS,WAEhC,OAAOr1C,EAAOkQ,OAASqjM,EAAeC,GAEpCC,GAAmB,SAAUzzM,EAAQwqB,GACvC,GAAIA,EAAMvZ,OAAO8wB,gBAAkB/hC,EAAOyP,SAAU,CAClD,IAAIikM,EAAiBP,GAAoBnzM,EAAOw1C,2BAC5Cm+J,EAAiBL,GAActzM,GACnC,MAAO,CACLmjC,KAAM3Y,EAAMmqB,MAAQ++J,EAAevwK,KAAOwwK,EAAexwK,KACzDC,IAAK5Y,EAAMoqB,MAAQ8+J,EAAetwK,IAAMuwK,EAAevwK,KAG3D,MAAO,CACLD,KAAM3Y,EAAMmqB,MACZvR,IAAK5Y,EAAMoqB,QAGXg/J,GAAoB,SAAUC,EAAcF,EAAgBG,GAC9D,MAAO,CACLn/J,MAAOm/J,EAAc3wK,KAAO0wK,EAAa1wK,KAAOwwK,EAAexwK,KAC/DyR,MAAOk/J,EAAc1wK,IAAMywK,EAAazwK,IAAMuwK,EAAevwK,MAG7D2wK,GAAO,SAAU/zM,EAAQwqB,GAC3B,OAAOopL,GAAkBR,GAAgBpzM,GAASqzM,GAAkBrzM,GAASyzM,GAAiBzzM,EAAQwqB,KAEpGwpL,GAAgB,CAAED,KAAMA,IAExBE,GAA2B9wJ,GAAS4yB,uBAAwBm+H,GAA0B/wJ,GAAS2zE,sBAC/Fq9E,GAAc,SAAU/sD,EAASn/I,GACnC,OAAOgsM,GAAyBhsM,IAAQA,IAAQm/I,GAE9CgtD,GAAoB,SAAUp0M,EAAQq0M,EAAeC,GACvD,OAAID,IAAkBC,IAAet0M,EAAOkM,IAAIg3C,UAAUmxJ,EAAeC,KAGrEL,GAAyBI,IAK3BE,GAAe,SAAUtsM,GAC3B,IAAIusM,EAAWvsM,EAAI+qC,WAAU,GAE7B,OADAwhK,EAAS1pK,gBAAgB,qBAClB0pK,GAELC,GAAc,SAAUz0M,EAAQiI,EAAK8lB,EAAOC,GAC9C,IAAI0mL,EAAYzsM,EAAI+qC,WAAU,GAC9BhzC,EAAOkM,IAAIskE,UAAUkkI,EAAW,CAC9B3mL,MAAOA,EACPC,OAAQA,IAEVhuB,EAAOkM,IAAIC,UAAUuoM,EAAW,oBAAqB,MACrD,IAAIC,EAAW30M,EAAOkM,IAAIiE,OAAO,MAAO,CACtC,MAAS,qBACT,iBAAkB,MAClB,aAAgB,KAChB,gBAAmB,UAiBrB,OAfAnQ,EAAOkM,IAAIskE,UAAUmkI,EAAU,CAC7B98J,SAAU,WACV4tG,QAAS,GACTh1E,SAAU,SACV/mC,OAAQ,EACRvrB,QAAS,EACTs6B,OAAQ,EACR1qB,MAAOA,EACPC,OAAQA,IAEVhuB,EAAOkM,IAAIskE,UAAUkkI,EAAW,CAC9Bj8J,OAAQ,EACRq0D,UAAW,eAEb6nG,EAASpkM,YAAYmkM,GACdC,GAELC,GAAoB,SAAUD,EAAU9N,GACtC8N,EAAStwM,aAAewiM,GAC1BA,EAAQt2L,YAAYokM,IAGpBE,GAAY,SAAUF,EAAU98J,EAAU9pB,EAAOC,EAAQ0uG,EAAMo4E,GACjE,IAAIhyC,EAAY,EAAGL,EAAY,EAC/BkyC,EAAS9qM,MAAMs5B,KAAO0U,EAASlD,MAAQ,KACvCggK,EAAS9qM,MAAMu5B,IAAMyU,EAASjD,MAAQ,KAClCiD,EAASlD,MAAQ5mB,EAAQ2uG,IAC3BomC,EAAYjrH,EAASlD,MAAQ5mB,EAAQ2uG,GAEnC7kF,EAASjD,MAAQ5mB,EAAS8mL,IAC5BryC,EAAY5qH,EAASjD,MAAQ5mB,EAAS8mL,GAExCH,EAAS9qM,MAAMkkB,MAAQA,EAAQ+0I,EAAY,KAC3C6xC,EAAS9qM,MAAMmkB,OAASA,EAASy0I,EAAY,MAE3CsyC,GAAgB,SAAU9sM,GACxBA,GAAOA,EAAI5D,YACb4D,EAAI5D,WAAWmf,YAAYvb,IAG3B+sM,GAA2B,SAAU5mM,GACvC,OAAoB,IAAbA,EAAEu/H,QAEPsnE,GAAsB,SAAUx1K,GAClC,OAAOA,EAAM17B,SAEXmxM,GAAc,SAAUz1K,EAAOoY,GACjC,MAAO,CACLlD,MAAOkD,EAASlD,MAAQlV,EAAM01K,KAC9BvgK,MAAOiD,EAASjD,MAAQ,IAGxBwgK,GAAU,SAAU31K,EAAOz/B,GAC7B,OAAO,SAAUoO,GACf,GAAI4mM,GAAyB5mM,GAAI,CAC/B,IAAIinM,EAAQ9lM,EAAKvP,EAAOkM,IAAIqH,WAAWnF,EAAE6C,QAASsyJ,GAAUhpJ,GAAG05L,GAA0BC,KAA0Bn6L,MAAM,MACzH,GAAIo6L,GAAYn0M,EAAOoU,UAAWihM,GAAQ,CACxC,IAAIC,EAASt1M,EAAOkM,IAAIipC,OAAOkgK,GAC3BxO,EAAU7mM,EAAOoU,UACjBizC,EAASrnD,EAAOyP,SAAS4rE,gBAC7B57C,EAAM17B,QAAUsxM,EAChB51K,EAAM81K,QAAUnnM,EAAEmnM,QAClB91K,EAAM+1K,QAAUpnM,EAAEonM,QAClB/1K,EAAMi9F,MAAQ18H,EAAOkQ,OAAS22L,EAAQ4O,YAAcpuJ,EAAOhiB,aAAe,EAC1E5F,EAAMq1K,MAAQ90M,EAAOkQ,OAAS22L,EAAQ6O,aAAeruJ,EAAO/hB,cAAgB,EAC5E7F,EAAM01K,KAAO/mM,EAAEumC,MAAQ2gK,EAAO/+L,EAC9BkpB,EAAMk2K,KAAOvnM,EAAEwmC,MAAQ0gK,EAAO9+L,EAC9BipB,EAAM1R,MAAQsnL,EAAMhwK,YACpB5F,EAAMzR,OAASqnL,EAAM/vK,aACrB7F,EAAMm2K,MAAQnB,GAAYz0M,EAAQq1M,EAAO51K,EAAM1R,MAAO0R,EAAMzR,YAKhE6nL,GAAS,SAAUp2K,EAAOz/B,GAC5B,IAAI81M,EAAwB/iE,GAAM1d,UAAS,SAAUvgF,EAASC,GAC5D/0C,EAAO46K,oBAAoBsM,gBAC3BlnL,EAAO6L,UAAUkqM,aAAajhK,EAASC,KACtC,GACH,OAAO,SAAU3mC,GACf,IAAI6nH,EAAW31H,KAAK8oB,IAAI9oB,KAAK8zG,IAAIhmG,EAAEmnM,QAAU91K,EAAM81K,SAAUj1M,KAAK8zG,IAAIhmG,EAAEonM,QAAU/1K,EAAM+1K,UACxF,GAAIP,GAAoBx1K,KAAWA,EAAMu2K,UAAY//E,EAAW,GAAI,CAClE,IAAIrvH,EAAO5G,EAAO2hC,KAAK,YAAa,CAAE1wB,OAAQwuB,EAAM17B,UACpD,GAAI6C,EAAKi9D,qBACP,OAEFpkC,EAAMu2K,UAAW,EACjBh2M,EAAOkV,QAET,GAAIuqB,EAAMu2K,SAAU,CAClB,IAAI56H,EAAY85H,GAAYz1K,EAAOu0K,GAAcD,KAAK/zM,EAAQoO,IAC9DwmM,GAAkBn1K,EAAMm2K,MAAO51M,EAAOoU,WACtCygM,GAAUp1K,EAAMm2K,MAAOx6H,EAAW37C,EAAM1R,MAAO0R,EAAMzR,OAAQyR,EAAMi9F,KAAMj9F,EAAMq1K,MAC/EgB,EAAsB1nM,EAAE0mC,QAAS1mC,EAAE2mC,YAIrCkhK,GAAe,SAAUpqM,GAC3B,IAAIqa,EAAMra,EAAUw+K,SAASxqD,WAAW,GACpCv5G,EAAiBJ,EAAII,eACzB,OAAmC,IAA5BA,EAAeC,SAAiBD,EAAejiB,WAAaiiB,GAEjEsuG,GAAO,SAAUn1F,EAAOz/B,GAC1B,OAAO,SAAUoO,GACf,GAAIqxB,EAAMu2K,UACJ5B,GAAkBp0M,EAAQi2M,GAAaj2M,EAAO6L,WAAY4zB,EAAM17B,SAAU,CAC5E,IAAImyM,EAAgB3B,GAAa90K,EAAM17B,SACnC6C,EAAO5G,EAAO2hC,KAAK,OAAQ,CAC7Bw0K,YAAaD,EACbphK,QAAS1mC,EAAE0mC,QACXC,QAAS3mC,EAAE2mC,UAERnuC,EAAKi9D,uBACRqyI,EAAgBtvM,EAAKuvM,YACrBn2M,EAAOgM,YAAYC,UAAS,WAC1B8oM,GAAct1K,EAAM17B,SACpB/D,EAAOqM,cAAcrM,EAAOkM,IAAI2tJ,aAAaq8C,IAC7Cl2M,EAAO46K,oBAAoBsM,oBAKnCkvB,GAAgB32K,KAGhB42D,GAAO,SAAU52D,EAAOz/B,GAC1B,OAAO,WACDy/B,EAAMu2K,UACRh2M,EAAO2hC,KAAK,WAEdy0K,GAAgB32K,KAGhB22K,GAAkB,SAAU32K,GAC9BA,EAAMu2K,UAAW,EACjBv2K,EAAM17B,QAAU,KAChBgxM,GAAct1K,EAAMm2K,QAElBS,GAAqB,SAAUr2M,GACjC,IACIs2M,EAASC,EAAkBC,EAAaC,EAAaC,EAAgBC,EADrEl3K,EAAQ,GAEZ62K,EAAUv7C,GAAWv6J,IACrBm2M,EAAe13M,EAAW4E,SAC1B0yM,EAAmBnB,GAAQ31K,EAAOz/B,GAClCw2M,EAAcX,GAAOp2K,EAAOz/B,GAC5By2M,EAAc7hF,GAAKn1F,EAAOz/B,GAC1B02M,EAAiBrgH,GAAK52D,EAAOz/B,GAC7BA,EAAO4O,GAAG,YAAa2nM,GACvBv2M,EAAO4O,GAAG,YAAa4nM,GACvBx2M,EAAO4O,GAAG,UAAW6nM,GACrBH,EAAQ77L,KAAKk8L,EAAc,YAAaH,GACxCF,EAAQ77L,KAAKk8L,EAAc,UAAWD,GACtC12M,EAAO4O,GAAG,UAAU,WAClB0nM,EAAQnnI,OAAOwnI,EAAc,YAAaH,GAC1CF,EAAQnnI,OAAOwnI,EAAc,UAAWD,OAGxCE,GAAc,SAAU52M,GAC1BA,EAAO4O,GAAG,QAAQ,SAAUR,GAC1B,IAAIyoM,EAAkC,qBAAdzoM,EAAE0mC,QAA0B90C,EAAOyP,SAAS63C,iBAAiBl5C,EAAE0mC,QAAS1mC,EAAE2mC,SAAW,MACzGk/J,GAAyB4C,IAAe5C,GAAyBj0M,EAAOkM,IAAI2uJ,yBAAyBg8C,MACvGzoM,EAAEm0B,qBAIJwvD,GAAO,SAAU/xF,GACnBq2M,GAAmBr2M,GACnB42M,GAAY52M,IAEV82M,GAAoB,CAAE/kH,KAAMA,IAE5BglH,GAAU,SAAU/2M,GACtB,IAAIg3M,EAAmBz5G,IAAM,WAC3B,IAAKv9F,EAAO0/B,QAAS,CACnB,IAAIxZ,EAAMlmB,EAAO6L,UAAUyc,SAC3B,GAAIpC,EAAIE,UAAW,CACjB,IAAI2uK,EAAaD,GAAiB90L,EAAQA,EAAO6L,UAAUyc,UAAU,GACrEtoB,EAAO6L,UAAU0b,OAAOwtK,OAG3B,GACH/0L,EAAO4O,GAAG,SAAS,WACjBooM,EAAiB3hF,cAEnBr1H,EAAO4O,GAAG,QAAQ,WAChBooM,EAAiBnuK,aAGjBouK,GAAW,CAAEtoM,MAAOooM,IAEpBG,GAA0B/zJ,GAAS2zE,sBACnCqgF,GAA2Bh0J,GAAS4yB,uBACpCqhI,GAA2B,SAAUp3M,EAAQ4L,GAC/C,IAAI9I,EAAO9C,EAAOoU,UAClB,MAAOxI,GAAQA,IAAS9I,EAAM,CAC5B,GAAIo0M,GAAwBtrM,IAASurM,GAAyBvrM,GAC5D,OAAOA,EAETA,EAAOA,EAAKvH,WAEd,OAAO,MAELgzM,GAAqB,SAAUr3M,GACjC,IAQIs3M,EARA10J,EAAU,SAAUh3C,GACtB,OAAO5L,EAAOkM,IAAI02C,QAAQh3C,IAExBu3D,EAAWnjE,EAAOoU,UAClBmjM,EAAYptC,GAAUnqK,EAAOoU,UAAWwuC,GAAS,WACnD,OAAOwjJ,GAAYzoD,SAAS39I,MAE1Bw3M,EAAkB,OAASx3M,EAAOkM,IAAIwK,WAEtC+gM,EAAyB,SAAUxvM,GACrC,OAAOjI,EAAOkM,IAAIqG,SAAStK,EAAK,4BAE9ByvM,EAA0B,WAC5B,IAAIrxL,EAAYrmB,EAAOkM,IAAI7M,IAAIm4M,GAC/B,OAAOnxL,EAAYA,EAAU/V,qBAAqB,KAAK,GAAK+V,GAE1DsxL,EAAW,SAAUjnI,GACnBA,GACF1wE,EAAO6L,UAAU0b,OAAOmpD,IAGxBknI,EAAW,WACb,OAAO53M,EAAO6L,UAAUyc,UAEtBmsK,EAAY,SAAUhnL,EAAW7B,EAAMhJ,EAAQg+E,GAIjD,IAAIxyE,EAMJ,YATuB,IAAnBwyE,IACFA,GAAiB,GAGnBxyE,EAAIpO,EAAO2hC,KAAK,YAAa,CAC3B1wB,OAAQrF,EACR6B,UAAWA,EACX7K,OAAQA,IAENwL,EAAEy1D,qBACG,MAEL+c,GACF5gF,EAAO6L,UAAU+0E,eAAeh1E,GAAqB,IAAf6B,GAEjC8pM,EAAUv0K,KAAKpgC,EAAQgJ,KAE5BwgK,EAA6B,SAAU3+J,EAAWijE,GAEpD,OADAA,EAAQrtB,GAAe51C,EAAW01D,EAAUuN,IACzB,IAAfjjE,EACKq4J,GAAgBP,eAAe70F,GAEjCo1F,GAAgBN,aAAa90F,IAElCmqG,EAA0B,SAAUg9B,GAClCA,EAAoB79J,aAAa,oBACnCknH,GAAwB22C,GACxBF,EAASC,KACT53M,EAAO6L,UAAU+0E,eAAei3H,EAAoB,MAGpD/sG,EAAiB,WACnB9qG,EAAO4O,GAAG,WAAW,SAAUR,GAC7B,IAAIsiE,EAAQknI,IACRlnI,EAAMtqD,WAAa+gL,GAAWL,kBAAkB9mM,EAAQoO,EAAE0mC,QAAS1mC,EAAE2mC,UACvE4iK,EAAShjB,GAAmB30L,EAAQ0wE,GAAO,OAG/C1wE,EAAO4O,GAAG,SAAS,SAAUR,GAC3B,IAAI0pM,EACJA,EAAsBV,GAAyBp3M,EAAQoO,EAAE6C,QACrD6mM,IACEX,GAAyBW,KAC3B1pM,EAAEm0B,iBACFviC,EAAOkV,SAELgiM,GAAwBY,IACtB93M,EAAOkM,IAAIg3C,UAAU40J,EAAqB93M,EAAO6L,UAAUC,YAC7DisM,QAKR/3M,EAAO4O,GAAG,iBAAiB,WACzBmpM,OAEF/3M,EAAO4O,GAAG,uCAAuC,WAC/C,OAAO2oM,EAAU/sC,gBAEnB,IAAIwtC,EAAoB,SAAUh4M,GAChC,IAAIooI,GAAQ,EACZpoI,EAAO4O,GAAG,cAAc,WACtBw5H,GAAQ,KAEVpoI,EAAO4O,GAAG,aAAa,WACrBw5H,GAAQ,KAEVpoI,EAAO4O,GAAG,YAAY,SAAUR,GAC9B,IAAI0pM,EAAsBV,GAAyBp3M,EAAQoO,EAAE6C,QACzDkmM,GAAyBW,KACtB1vE,IACHh6H,EAAEm0B,iBACF01K,EAA4Bh7E,GAAWj9H,EAAQ83M,UAKnDI,EAAyB,SAAUjwM,GACrC,IAAIguK,EAAcvI,GAAYzlK,GAC9B,IAAKA,EAAIiQ,WACP,OAAO,EAET,IAAI8K,EAAW8iJ,GAAgBljK,OAAOqF,EAAIiQ,YACtCy+J,EAASV,EAAY9sJ,KAAKnG,GAC9B,OAAO2zJ,IAAWyM,GAA6BzM,KAAY0M,GAA4B1M,IAErFpL,EAAgB,SAAUO,EAAOC,GACnC,IAAIoR,EAASn9K,EAAOkM,IAAIyL,UAAUm0J,EAAO9rK,EAAOkM,IAAI02C,SAChDw6H,EAASp9K,EAAOkM,IAAIyL,UAAUo0J,EAAO/rK,EAAOkM,IAAI02C,SACpD,OAAOu6H,IAAWC,GAEhB+6B,EAAuB,SAAUljJ,EAAYozH,GAC/C,IAAI+vB,EAAcp4M,EAAOkM,IAAIyL,UAAUs9C,EAAYj1D,EAAOkM,IAAI02C,SAC1Dy1J,EAAar4M,EAAOkM,IAAIyL,UAAU0wK,EAAWroL,EAAOkM,IAAI02C,SAC5D,SAAIw1J,IAAep4M,EAAOkM,IAAIg3C,UAAUk1J,EAAaC,KAA2F,IAA5ElB,GAAyBC,GAAyBp3M,EAAQo4M,MAGvHA,IAAgB7sC,EAAc6sC,EAAaC,IAAeH,EAAuBE,IAE1FJ,EAAkBh4M,GAClBA,EAAO4O,GAAG,aAAa,SAAUR,GAC/B,IAAI0pM,EACAp+I,EAAYtrD,EAAE6C,OAClB,IAAIyoD,IAAcyJ,GAAmC,SAAvBzJ,EAAUp1D,UAAwBtE,EAAOkM,IAAIg3C,UAAUwW,EAAWyJ,MAG7B,IAA/DgkI,GAAWL,kBAAkB9mM,EAAQoO,EAAE0mC,QAAS1mC,EAAE2mC,SAItD,GADA+iK,EAAsBV,GAAyBp3M,EAAQ05D,GACnDo+I,EACEX,GAAyBW,IAC3B1pM,EAAEm0B,iBACF01K,EAA4Bh7E,GAAWj9H,EAAQ83M,MAE/CC,IACMb,GAAwBY,IAAwB1pM,EAAEqtD,UAAcy3I,GAAWD,gBAAgB7kM,EAAE0mC,QAAS1mC,EAAE2mC,QAAS/0C,EAAO6L,UAAUyc,YACtI4+J,IACAlnL,EAAO6L,UAAUkqM,aAAa3nM,EAAE0mC,QAAS1mC,EAAE2mC,gBAG1C,IAAqC,IAAjC41H,GAAkBjxG,GAAsB,CACjDq+I,IACA7wB,IACA,IAAI0rB,EAAYC,GAAa1vI,EAAU/0D,EAAE0mC,QAAS1mC,EAAE2mC,SACpD,GAAI69J,IACGuF,EAAqB/pM,EAAE6C,OAAQ2hM,EAAUhnM,MAAO,CACnDwC,EAAEm0B,iBACF,IAAImuC,EAAQ+jH,EAAU,EAAGme,EAAUhnM,KAAMgnM,EAAUhwM,QAAQ,GAC3D5C,EAAOoU,UAAUc,QACjByiM,EAASjnI,QAKjB1wE,EAAO4O,GAAG,YAAY,SAAUR,GAC9B,IAAImiM,GAAG3lL,gBAAgBxc,GAGvB,OAAQA,EAAEuc,SACV,QACMwsL,GAAyBn3M,EAAO6L,UAAUC,YAC5CsC,EAAEm0B,iBAEJ,UAGJviC,EAAO4O,GAAG,qBAAqB,SAAUR,GACvC,IAAI8X,EAAM9X,EAAEsiE,MACZ,GAAI4mI,EAA6B,CAC/B,IAAKA,EAA4BjzM,WAE/B,YADAizM,EAA8B,MAGhCpxL,EAAMA,EAAIq9B,aACVr9B,EAAI+2G,WAAWq6E,GACflpM,EAAEsiE,MAAQxqD,MAGdlmB,EAAO4O,GAAG,qBAAqB,SAAUR,GACvCA,EAAEsiE,MAAQ4nI,EAAoClqM,EAAEsiE,OAChD,IAAIxqD,EAAM+xL,EAA4B7pM,EAAEsiE,MAAOtiE,EAAEoyH,SAC7Ct6G,IACF9X,EAAEsiE,MAAQxqD,MAGd,IAAIupD,EAAa,SAAU7jE,GACzB,MAAmB,gBAAZA,EAAKpJ,IAEdxC,EAAO4O,GAAG,0BAA0B,SAAUR,GAC5C,IAAI8X,EAAM9X,EAAEsiE,MACP6nI,EAAwBryL,IAASupD,EAAWvpD,EAAII,eAAejiB,aAClE6iL,IAEGuwB,EAAuBvxL,EAAII,eAAejiB,aAC7C0zM,OAGJ/3M,EAAO4O,GAAG,QAAQ,SAAUR,GAC1B,IAAI09D,EAAgB19D,EAAE09D,cACtB,IAAK19D,EAAEy1D,sBAAwBz1D,EAAE09D,gBAAkB+lE,GAAIlkH,GAAI,CACzD,IAAI6qL,EAAuBd,IACvBc,IACFpqM,EAAEm0B,iBACFupC,EAAcmE,YACdnE,EAAciE,QAAQ,YAAayoI,EAAqB97J,WACxDovB,EAAciE,QAAQ,aAAcyoI,EAAqBC,gBAI/D3B,GAAkB/kH,KAAK/xF,GACvBi3M,GAAStoM,MAAM3O,IAEb04M,EAAS,WACX,IAAIx1L,EAASljB,EAAO24M,cAAeC,EAAY,oBAC/C11L,EAAOrc,KAAK0wM,EAAU9sC,UACtBvnJ,EAAOrc,KAAK+xM,6FAA6HA,EAA7HA,+CAAoMA,EAApMA,6CAEVC,EAAyB,SAAUjtM,GACrC,OAAOw0J,GAAiBx0J,IAAS20J,GAAyB30J,IAAS00J,GAAuB10J,IAExF2sM,EAA0B,SAAUryL,GACtC,OAAO2yL,EAAuB3yL,EAAII,iBAAmBuyL,EAAuB3yL,EAAIw9B,eAE9E40J,EAAsC,SAAUpyL,GAClD,IAAIs6C,EAAqBxgE,EAAOq8C,OAAOokB,wBACnCp5C,EAASrnB,EAAOkM,IAAIob,YACpBhB,EAAiBJ,EAAII,eACrBG,EAAcP,EAAIO,YAClBi9B,EAAex9B,EAAIw9B,aACnBh9B,EAAYR,EAAIQ,UAmBpB,OAlBItC,GAAIo8C,EAAoBl6C,EAAehiB,SAASic,eAC9B,IAAhBkG,EACFY,EAAO2wD,eAAe1xD,GAEtBe,EAAO6tC,cAAc5uC,GAGvBe,EAAOR,SAASP,EAAgBG,GAE9BrC,GAAIo8C,EAAoB9c,EAAap/C,SAASic,eAC9B,IAAdmG,EACFW,EAAOk0G,aAAa73E,GAEpBr8B,EAAO8tC,YAAYzR,GAGrBr8B,EAAOP,OAAO48B,EAAch9B,GAEvBW,GAEL4wL,EAA8B,SAAUvnI,EAAO8vD,GACjD,IAAI50H,EAGAktM,EAAyB/lK,EAAKzsB,EAAgBG,EAAaC,EAAWtY,EAAG42J,EAAemxC,EAAa4C,EAFrGzsM,EAAItM,EAAOsM,EACXJ,EAAMlM,EAAOkM,IAEjB,IAAKwkE,EACH,OAAO,KAET,GAAIA,EAAMtqD,UAAW,CACnB,IAAKmyL,EAAwB7nI,GAC3B,IAAgB,IAAZ8vD,EAAmB,CAErB,GADAwkC,EAAgBoH,GAA4B,EAAG17F,GAC3Ci6F,GAAkB3F,EAAcl5J,SAAQ,IAC1C,OAAO2oL,GAAW,EAAGzvB,EAAcl5J,SAAQ,IAAO,GAAO,GAE3D,GAAI6+J,GAAkB3F,EAAcl5J,WAClC,OAAO2oL,GAAW,EAAGzvB,EAAcl5J,WAAYk5J,EAAcrE,WAAW,OAErE,CAEL,GADAqE,EAAgBoH,EAA2B,EAAG17F,GAC1Ci6F,GAAkB3F,EAAcl5J,WAClC,OAAO2oL,EAAU,EAAGzvB,EAAcl5J,WAAYk5J,EAAcrE,WAAW,GAEzE,GAAIgK,GAAkB3F,EAAcl5J,SAAQ,IAC1C,OAAO2oL,EAAU,EAAGzvB,EAAcl5J,SAAQ,IAAO,GAAO,GAI9D,OAAO,KAUT,OARAwa,EAAiBoqD,EAAMpqD,eACvBG,EAAciqD,EAAMjqD,YACpBC,EAAYgqD,EAAMhqD,UACc,IAA5BJ,EAAeC,UAAkC,IAAhBE,GAAqB0wL,GAAyB7wL,EAAejiB,cAChGiiB,EAAiBA,EAAejiB,WAChCoiB,EAAcva,EAAIi4C,UAAU79B,GAC5BA,EAAiBA,EAAejiB,YAEF,IAA5BiiB,EAAeC,SACV,MAELG,IAAcD,EAAc,GAAKH,IAAmBoqD,EAAMhtB,eAC5D93C,EAAO0a,EAAerO,WAAWwO,IAE9B0wL,GAAyBvrM,IAG9BuqM,EAAc4C,EAAkBntM,EAAKonC,WAAU,GAC/C5kC,EAAIpO,EAAO2hC,KAAK,iBAAkB,CAChC1wB,OAAQrF,EACRuqM,YAAaA,IAEX/nM,EAAEy1D,qBACG,MAETi1I,EAA0B7gH,GAAW1wC,GAAQN,QAAQjnD,EAAOoU,WAAY,IAAMojM,GAAiB59L,MAAK,WAClG,OAAOtN,EAAE,OACR,SAAUrE,GACX,OAAOqE,EAAE,CAACrE,EAAIiE,WAEhBiqM,EAAc/nM,EAAE+nM,YACuB,IAAnC2C,EAAwB71M,SAC1B61M,EAA0BxsM,EAAE,oEAAoE2C,KAAK,KAAMuoM,GAC3GsB,EAAwB72K,SAASjiC,EAAOoU,YAE1Cs8D,EAAQ1wE,EAAOkM,IAAIob,YACf6uL,IAAgB4C,GAAmBlnE,GAAIlkH,IACzCmrL,EAAwB3pM,QAAQC,OAAO,sDAAyDA,OAAO+mM,GACvGzlI,EAAMxb,cAAc4jJ,EAAwB,GAAG5gM,WAAWA,YAC1Dw4D,EAAMvb,YAAYghJ,KAElB2C,EAAwB3pM,QAAQC,OAAO,KAAQA,OAAO+mM,GAAa/mM,OAAO,KAC1EshE,EAAM7pD,SAASiyL,EAAwB,GAAG5gM,WAAY,GACtDw4D,EAAM5pD,OAAOgyL,EAAwB,GAAGp2J,UAAW,IAErDo2J,EAAwB1vM,IAAI,CAAEg6B,IAAKl3B,EAAIipC,OAAOvpC,EAAM5L,EAAOoU,WAAWoC,IACtEsiM,EAAwB,GAAG5jM,QAC3B69B,EAAM/yC,EAAO6L,UAAUw+K,SACvBt3I,EAAIisF,kBACJjsF,EAAIksF,SAASvuD,GACb5hE,EAAK8oF,GAAcrwC,GAAQN,QAAQjnD,EAAOoU,WAAY,yBAAyB,SAAUnM,GACvFoN,GAAOpN,EAAK,wBAEd2D,EAAKqL,aAAa,oBAAqB,KACvCqgM,EAA8B1rM,EAC9Bs7K,IACOx2G,IAzCE,OA2CPqnI,EAAiC,WAC/BT,IACFA,EAA4BxsK,gBAAgB,qBAC5CmtD,GAAW1wC,GAAQN,QAAQjnD,EAAOoU,WAAY,IAAMojM,GAAiB1oM,KAAK0mF,IAC1E8hH,EAA8B,MAEhCr/G,GAAW1wC,GAAQN,QAAQjnD,EAAOoU,WAAY,IAAMojM,GAAiB1oM,KAAK0mF,IAC1E8hH,EAA8B,MAE5B5zK,EAAU,WACZ6zK,EAAU7zK,UACV4zK,EAA8B,MAE5BpwB,EAAgB,WAClBqwB,EAAUt0K,QAMZ,OAJI4uG,GAAI9iD,UACN+b,IACA4tG,KAEK,CACLjkB,UAAWA,EACX5Z,wBAAyBA,EACzBqM,cAAeA,EACfxjJ,QAASA,IAITs1K,GAAwB,SAAU5xM,GACpC,OAAiC,IAA1BA,EAAKc,QAAQ,UAA4C,IAA1Bd,EAAKc,QAAQ,UAEjD+wM,GAAe,SAAUxzM,GAC3B,IAAIyzM,EAAgBzzM,EACpB,MAAO,cAActB,KAAK+0M,GACxBA,EAAgBA,EAAcr3M,QAAQ,cAAe,IAEvD,OAAOq3M,GAELC,GAAe,SAAUl5M,EAAUwyB,GACrC,OAAIxyB,EAASuuE,uBAEF,iBAAiBrqE,KAAKsuB,IACS,IAAjCxyB,EAASs2J,qBAAiC,yBAAyBpyJ,KAAKsuB,GAExE,UAAUtuB,KAAKsuB,KAGtB2mL,GAAkB,SAAU/8J,EAAQpzC,EAAMw7F,GAC5C,IAAel+F,EAAOuG,EAASusM,EAAa74I,EAAxC/pD,EAAQ,EACZ+pD,EAAqBnkB,EAAOokB,wBAC5B44I,EAAc,iGACdA,EAAYjzM,UAAYG,EAAQk+F,EAChC,MAAO33F,EAAUusM,EAAYhzM,KAAK4C,GAAO,CAEvC,GADA1C,EAAQ8yM,EAAYjzM,UACD,MAAf0G,EAAQ,GACV2J,SACK,IAAK3J,EAAQ,GAAI,CACtB,GAAIA,EAAQ,KAAM0zD,EAChB,SAEF/pD,IAEF,GAAc,IAAVA,EACF,MAGJ,OAAOlQ,GAEL+yM,GAAsB,SAAUx3I,EAAQy3I,GAC1C,IAAIzsM,EAAUg1D,EAAOz7D,KAAKkzM,GAC1B,GAAIzsM,EAAS,CACX,IAAI1F,EAAO0F,EAAQ,GACf1N,EAAQ0N,EAAQ,GACpB,MAAuB,kBAAT1F,GAA4C,mBAAvBA,EAAKmZ,cAAqCnhB,EAAQ,KAErF,OAAO,MAGX,SAASo6M,GAAUv5M,EAAUo8C,QACZ,IAAXA,IACFA,EAAS2zG,MAEX,IAAIt3I,EAAO,aAEXzY,EAAWA,GAAY,IACW,IAA9BA,EAASw5M,mBACXx5M,EAASw5M,kBAAmB,GAE9B,IAAIjxM,EAAUvI,EAASuI,QAAUvI,EAASuI,QAAUkQ,EAChD/P,EAAQ1I,EAAS0I,MAAQ1I,EAAS0I,MAAQ+P,EAC1CjT,EAAOxF,EAASwF,KAAOxF,EAASwF,KAAOiT,EACvC+L,EAAQxkB,EAASwkB,MAAQxkB,EAASwkB,MAAQ/L,EAC1C2M,EAAMplB,EAASolB,IAAMplB,EAASolB,IAAM3M,EACpCy/J,EAAKl4K,EAASk4K,GAAKl4K,EAASk4K,GAAKz/J,EACjChQ,EAAUzI,EAASyI,QAAUzI,EAASyI,QAAUgQ,EAChD5Q,EAAQ,SAAUmB,GACpB,IAAI6D,EAAoB1N,EAAOs6M,EAE3BC,EAAUn2M,EAAGo2M,EAAUxyM,EACvByyM,EAAmBC,EAAwBt5I,EAAoBu5I,EAAcC,EAC7Ep6L,EAAU84J,EAAauhC,EAAgBhrM,EAAMirM,EAAcC,EAAoBC,EAC/EjoD,EAAoBC,EAAmBC,EAAkBgoD,EACzDC,EAAuBC,EAAalB,EAAamB,EAAYvrH,EAAiBx0C,EAE9EggK,EARSl0M,EAAQ,EACjBm0M,EAAQ,GAKiFhzD,EAAU,EACnGj1E,EAASo8E,GAASp8E,OAElBkoI,EAAmB/6M,GAAM+gE,QAAQ,yDACjCi6I,EAAkB,4BAClBC,EAAgB,SAAUzzM,GAC5B,IAAImtC,EAAK/wC,EACT+wC,EAAMmmK,EAAMz3M,OACZ,MAAOsxC,IACL,GAAImmK,EAAMnmK,GAAKntC,OAASA,EACtB,MAGJ,GAAImtC,GAAO,EAAG,CACZ,IAAK/wC,EAAIk3M,EAAMz3M,OAAS,EAAGO,GAAK+wC,EAAK/wC,IACnC4D,EAAOszM,EAAMl3M,GACT4D,EAAK0zM,OACPz1L,EAAIje,EAAKA,MAGbszM,EAAMz3M,OAASsxC,IAGfwmK,EAAiB,SAAU54M,EAAOiF,EAAMhI,EAAOu4C,EAAMqjK,GACvD,IAAIC,EAAUz3M,EACV03M,EAAa,sBAGjB,GAFA9zM,EAAOA,EAAKmZ,cACZnhB,EAAQgI,KAAQ2yM,EAAe3yM,EAAOqrE,EAAOrzE,GAASu4C,GAAQqjK,GAAQ,IAClEp7L,IAAai6L,IAAqD,IAAhCb,GAAsB5xM,GAAiB,CAE3E,GADA6zM,EAAWd,EAAmB/yM,IACzB6zM,GAAYb,EAAwB,CACvC52M,EAAI42M,EAAuBn3M,OAC3B,MAAOO,IAEL,GADAy3M,EAAWb,EAAuB52M,GAC9By3M,EAASj1M,QAAQ7B,KAAKiD,GACxB,OAGO,IAAP5D,IACFy3M,EAAW,MAGf,IAAKA,EACH,OAEF,GAAIA,EAAS1oD,eAAiBnzJ,KAAS67M,EAAS1oD,aAC9C,OAGJ,GAAIooD,EAAiBvzM,KAAUnH,EAASo2J,kBAAmB,CACzD,IAAI5jI,EAAMrzB,EAAMyC,QAAQq5M,EAAY,IACpC,IACEzoL,EAAMo5K,mBAAmBp5K,GACzB,MAAOjC,GACPiC,EAAM9P,SAAS8P,GAEjB,GAAImoL,EAAgBz2M,KAAKsuB,GACvB,OAEF,GAAI0mL,GAAal5M,EAAUwyB,GACzB,OAGAonL,IAAsBzyM,KAAQuzM,GAA2C,IAAvBvzM,EAAKc,QAAQ,SAGnEyxM,EAAS/3M,IAAIwF,GAAQhI,EACrBu6M,EAAS9yM,KAAK,CACZO,KAAMA,EACNhI,MAAOA,MAGXi6M,EAAc,IAAI3mK,OAAO,sRAA0T,KACnV8nK,EAAa,iFACbh6I,EAAqBnkB,EAAOokB,wBAC5B85I,EAAct6M,EAASk7M,uBAAyB9+J,EAAOi4G,yBACvDylD,EAAe19J,EAAO+yC,eACtBxvE,EAAW3f,EAAS2f,SACpBk6L,EAAyB75M,EAASm7M,iBAClCX,EAAiBx6M,EAASw5M,iBAC1BxqH,EAAkB5yC,EAAO6yC,qBACzBmrH,EAAcpxM,EAAO,IACrB,MAAO6D,EAAUusM,EAAYhzM,KAAKg0M,GAAc,CAI9C,GAHI9zM,EAAQuG,EAAQvG,OAClBd,EAAKgtE,EAAOxpE,EAAK6c,OAAOvf,EAAOuG,EAAQvG,MAAQA,KAE7CnH,EAAQ0N,EAAQ,GAClB1N,EAAQA,EAAMmhB,cACU,MAApBnhB,EAAMwzF,OAAO,KACfxzF,EAAQA,EAAM0mB,OAAO,IAEvB+0L,EAAcz7M,QACT,GAAIA,EAAQ0N,EAAQ,GAAI,CAC7B,GAAIA,EAAQvG,MAAQuG,EAAQ,GAAG7J,OAASgG,EAAKhG,OAAQ,CACnDwC,EAAKgtE,EAAOxpE,EAAK6c,OAAOhZ,EAAQvG,SAChCA,EAAQuG,EAAQvG,MAAQuG,EAAQ,GAAG7J,OACnC,SAEF7D,EAAQA,EAAMmhB,cACU,MAApBnhB,EAAMwzF,OAAO,KACfxzF,EAAQA,EAAM0mB,OAAO,IAEvBk0L,EAAe56M,KAASohE,EACpBi6I,GAAkBF,EAAYn7M,IAAUs7M,EAAMz3M,OAAS,GAAKy3M,EAAMA,EAAMz3M,OAAS,GAAGmE,OAAShI,GAC/Fy7M,EAAcz7M,GAEhB,IAAIi8M,EAAa/B,GAAoBkB,EAAY1tM,EAAQ,IACzD,GAAmB,OAAfuuM,EAAqB,CACvB,GAAmB,QAAfA,EAAsB,CACxB90M,EAAQ6yM,GAAgB/8J,EAAQpzC,EAAMowM,EAAYjzM,WAClDizM,EAAYjzM,UAAYG,EACxB,SAEF0zM,GAAiB,EAEnB,IAAKr6L,IAAa84J,EAAcr8H,EAAOg3G,eAAej0J,IAAS,CAkB7D,GAjBA66M,GAAiB,EACbr6L,IACFu6L,EAAqBzhC,EAAYjxK,WACjC2yM,EAAyB1hC,EAAYlmB,oBAEnC0nD,EAAeptM,EAAQ,KACzB+sM,GAA+D,IAA3CK,EAAahyM,QAAQ,iBACrC2xM,GAAqBC,IACvBG,GAAiB,GAEnBN,EAAW,GACXA,EAAS/3M,IAAM,GACfs4M,EAAar4M,QAAQ24M,EAAYO,KAEjCpB,EAAW,GACXA,EAAS/3M,IAAM,IAEbge,IAAai6L,EAAmB,CAQlC,GAPA1nD,EAAqBumB,EAAYvmB,mBACjCC,EAAoBsmB,EAAYtmB,kBAChCC,EAAmBqmB,EAAYrmB,iBAC/BioD,EAAwB5hC,EAAYxmB,iBAChCooD,IAA0BX,EAAS12M,SACrCg3M,GAAiB,GAEf5nD,EAAkB,CACpB7uJ,EAAI6uJ,EAAiBpvJ,OACrB,MAAOO,IACLyL,EAAOojJ,EAAiB7uJ,GACxB4D,EAAO6H,EAAK7H,KACZqzC,EAAYxrC,EAAK7P,MACC,WAAdq7C,IACFA,EAAY,OAASitG,KAEvBiyD,EAAS/3M,IAAIwF,GAAQqzC,EACrBk/J,EAAS9yM,KAAK,CACZO,KAAMA,EACNhI,MAAOq7C,IAIb,GAAI23G,EAAmB,CACrB5uJ,EAAI4uJ,EAAkBnvJ,OACtB,MAAOO,IACLyL,EAAOmjJ,EAAkB5uJ,GACzB4D,EAAO6H,EAAK7H,KACNA,KAAQuyM,EAAS/3M,MACrB64C,EAAYxrC,EAAK7P,MACC,WAAdq7C,IACFA,EAAY,OAASitG,KAEvBiyD,EAAS/3M,IAAIwF,GAAQqzC,EACrBk/J,EAAS9yM,KAAK,CACZO,KAAMA,EACNhI,MAAOq7C,KAKf,GAAI03G,EAAoB,CACtB3uJ,EAAI2uJ,EAAmBlvJ,OACvB,MAAOO,IACL,GAAI2uJ,EAAmB3uJ,KAAMm2M,EAAS/3M,IACpC,OAGO,IAAP4B,IACFy2M,GAAiB,GAGrB,GAAIhrM,EAAO0qM,EAAS/3M,IAAI,kBAAmB,CACzC,GAAa,QAATqN,EAAgB,CAClB1I,EAAQ6yM,GAAgB/8J,EAAQpzC,EAAMowM,EAAYjzM,WAClDizM,EAAYjzM,UAAYG,EACxB,SAEF0zM,GAAiB,GAGjBA,GACFx1L,EAAMrlB,EAAOu6M,EAAUK,QAGzBC,GAAiB,EAEnB,GAAIP,EAAYzqH,EAAgB7vF,GAAQ,CACtCs6M,EAAUtzM,UAAYG,EAAQuG,EAAQvG,MAAQuG,EAAQ,GAAG7J,QACrD6J,EAAU4sM,EAAUrzM,KAAK4C,KACvBgxM,IACFL,EAAW3wM,EAAK6c,OAAOvf,EAAOuG,EAAQvG,MAAQA,IAEhDA,EAAQuG,EAAQvG,MAAQuG,EAAQ,GAAG7J,SAEnC22M,EAAW3wM,EAAK6c,OAAOvf,GACvBA,EAAQ0C,EAAKhG,QAEXg3M,IACEL,EAAS32M,OAAS,GACpBwC,EAAKm0M,GAAU,GAEjBv0L,EAAIjmB,IAENi6M,EAAYjzM,UAAYG,EACxB,SAEGyzM,IACEE,GAAgBA,EAAahyM,QAAQ,OAASgyM,EAAaj3M,OAAS,EAK9Dg3M,GACT50L,EAAIjmB,GALJs7M,EAAM7zM,KAAK,CACTO,KAAMhI,EACN07M,MAAOb,UAMJ76M,EAAQ0N,EAAQ,KACD,MAApB1N,EAAMwzF,OAAO,KACfxzF,EAAQ,IAAMA,GAEXa,EAAS2oF,4BAAmE,QAArCxpF,EAAM0mB,OAAO,EAAG,GAAGvF,gBAC7DnhB,EAAQ,IAAMA,GAEhBoJ,EAAQpJ,KACCA,EAAQ0N,EAAQ,IACzBnE,EAAMswM,GAAa75M,KACVA,EAAQ0N,EAAQ,IACzBpE,EAAQtJ,IACCA,EAAQ0N,EAAQ,KACzBqrK,EAAG/4K,EAAO0N,EAAQ,IAEpBvG,EAAQuG,EAAQvG,MAAQuG,EAAQ,GAAG7J,OAKrC,IAHIsD,EAAQ0C,EAAKhG,QACfwC,EAAKgtE,EAAOxpE,EAAK6c,OAAOvf,KAErB/C,EAAIk3M,EAAMz3M,OAAS,EAAGO,GAAK,EAAGA,IACjCpE,EAAQs7M,EAAMl3M,GACVpE,EAAM07M,OACRz1L,EAAIjmB,EAAMgI,OAIhB,MAAO,CAAEU,MAAOA,IAEjB,SAAU0xM,GACTA,EAAU8B,WAAalC,IADzB,CAEEI,KAAcA,GAAY,KAC5B,IAAI+B,GAAc/B,GAEd14I,GAAW,SAAU06I,EAAWvyM,GAClC,IAAIwyM,EAAoB,IAAI/oK,OAAO,CAAC,QAAU8oK,EAAUl0M,KAAK,KAAO,aAAaA,KAAK,KAAM,MAC5F,OAAO2B,EAAKpH,QAAQ45M,EAAmB,KAErCC,GAAe,SAAU55J,EAAY74C,GACvC,IAEI0yM,EAAap1M,EAAOq1M,EAAa9uM,EAAS0zD,EAF1C9+D,EAAUuH,EACV4yM,EAAiB,0CAEjBx/J,EAASyF,EAAWzF,OACxB36C,EAAUo/D,GAAShf,EAAWg6J,eAAgBp6M,GAC9C8+D,EAAqBnkB,EAAOokB,wBAC5B,MAAO3zD,EAAU+uM,EAAex1M,KAAK3E,GACnC6E,EAAQs1M,EAAez1M,UACvBw1M,EAAc9uM,EAAQ,GAAG7J,OAEvB04M,EADEn7I,EAAmB1zD,EAAQ,IACfvG,EAEAg1M,GAAYD,WAAWj/J,EAAQ36C,EAAS6E,GAExD7E,EAAUA,EAAQyf,UAAU,EAAG5a,EAAQq1M,GAAel6M,EAAQyf,UAAUw6L,GACxEE,EAAez1M,UAAYG,EAAQq1M,EAErC,OAAO77C,GAAK7wJ,KAAKxN,IAEfq6M,GAAeL,GACfM,GAAW,CACbD,aAAcA,GACdL,aAAcA,IAGZO,GAAO,EAAGC,GAAS,EAAGlhJ,GAAS,EAC/B8/E,GAAO,SAAU33G,EAAMugE,GACzB,IAAIthF,EAAO+gB,EAAKlgC,OAASygG,EAAMzgG,OAAS,EACpCk5M,EAAQ,IAAIp1M,MAAMqb,GAClBg6L,EAAM,IAAIr1M,MAAMqb,GAChBi6L,EAAQ,SAAU53L,EAAOY,EAAKi3L,GAChC,MAAO,CACL73L,MAAOA,EACPY,IAAKA,EACLi3L,KAAMA,IAGNC,EAAc,SAAUC,EAAQC,EAAMC,EAAQC,EAAMvyM,GACtD,IAAIs0G,EAASk+F,EAAeJ,EAAQC,EAAMC,EAAQC,GAClD,GAAe,OAAXj+F,GAAmBA,EAAOj6F,QAAUg4L,GAAQ/9F,EAAO49F,OAASG,EAAOE,GAAQj+F,EAAOr5F,MAAQm3L,GAAU99F,EAAO49F,OAASE,EAASE,EAAQ,CACvI,IAAIl5M,EAAIg5M,EACJz2M,EAAI22M,EACR,MAAOl5M,EAAIi5M,GAAQ12M,EAAI42M,EACjBn5M,EAAIi5M,GAAQ12M,EAAI42M,GAAQx5K,EAAK3/B,KAAOkgG,EAAM39F,IAC5CqE,EAAOvD,KAAK,CACVo1M,GACA94K,EAAK3/B,OAELA,IACAuC,GAEE02M,EAAOD,EAASG,EAAOD,GACzBtyM,EAAOvD,KAAK,CACVm0D,GACA73B,EAAK3/B,OAELA,IAEF4G,EAAOvD,KAAK,CACVq1M,GACAx4G,EAAM39F,OAENA,OAIH,CACLw2M,EAAYC,EAAQ99F,EAAOj6F,MAAOi4L,EAAQh+F,EAAOj6F,MAAQi6F,EAAO49F,KAAMlyM,GACtE,IAAK,IAAIyyM,EAAKn+F,EAAOj6F,MAAOo4L,EAAKn+F,EAAOr5F,MAAOw3L,EAC7CzyM,EAAOvD,KAAK,CACVo1M,GACA94K,EAAK05K,KAGTN,EAAY79F,EAAOr5F,IAAKo3L,EAAM/9F,EAAOr5F,IAAMq5F,EAAO49F,KAAMK,EAAMvyM,KAG9D0yM,EAAa,SAAUr4L,EAAO63L,EAAMG,EAAME,GAC5C,IAAIt3L,EAAMZ,EACV,MAAOY,EAAMi3L,EAAOK,GAAQt3L,EAAMo3L,GAAQt5K,EAAK9d,KAASq+E,EAAMr+E,EAAMi3L,KAChEj3L,EAEJ,OAAOg3L,EAAM53L,EAAOY,EAAKi3L,IAEvBM,EAAiB,SAAUJ,EAAQC,EAAMC,EAAQC,GACnD,IAAIj6L,EAAI+5L,EAAOD,EACX9iM,EAAIijM,EAAOD,EACf,GAAU,IAANh6L,GAAiB,IAANhJ,EACb,OAAO,KAET,IAKIy6E,EAAGpwE,EAAGvgB,EAAG+S,EAAGC,EALZoP,EAAQlD,EAAIhJ,EACZqjM,EAAMrjM,EAAIgJ,EACViD,GAAUo3L,EAAM,IAAM,EAAIA,EAAMA,EAAM,GAAK,EAI/C,IAHAZ,EAAM,EAAIx2L,GAAU62L,EACpBJ,EAAI,EAAIz2L,GAAU82L,EAAO,EAEpBtoH,EAAI,EAAGA,GAAKxuE,IAAUwuE,EAAG,CAC5B,IAAKpwE,GAAKowE,EAAGpwE,GAAKowE,EAAGpwE,GAAK,EAAG,CAC3BvgB,EAAIugB,EAAI4B,EACJ5B,KAAOowE,GAAKpwE,IAAMowE,GAAKgoH,EAAM34M,EAAI,GAAK24M,EAAM34M,EAAI,GAClD24M,EAAM34M,GAAK24M,EAAM34M,EAAI,GAErB24M,EAAM34M,GAAK24M,EAAM34M,EAAI,GAAK,EAE5B+S,EAAI4lM,EAAM34M,GACVgT,EAAID,EAAIimM,EAASE,EAAS34L,EAC1B,MAAOxN,EAAIkmM,GAAQjmM,EAAImmM,GAAQx5K,EAAK5sB,KAAOmtF,EAAMltF,GAC/C2lM,EAAM34M,KAAO+S,IACXC,EAEJ,GAAIoP,EAAQ,IAAM,GAAKA,EAAQuuE,GAAKpwE,GAAKA,GAAK6B,EAAQuuE,GAChDioH,EAAI54M,EAAIoiB,IAAUu2L,EAAM34M,GAC1B,OAAOs5M,EAAWV,EAAI54M,EAAIoiB,GAAQ7B,EAAIy4L,EAASE,EAAQD,EAAME,GAInE,IAAK54L,EAAI6B,EAAQuuE,EAAGpwE,GAAK6B,EAAQuuE,EAAGpwE,GAAK,EAAG,CAC1CvgB,EAAIugB,EAAI4B,EAASC,EACb7B,IAAM6B,EAAQuuE,GAAKpwE,IAAM6B,EAAQuuE,GAAKioH,EAAI54M,EAAI,IAAM44M,EAAI54M,EAAI,GAC9D44M,EAAI54M,GAAK44M,EAAI54M,EAAI,GAAK,EAEtB44M,EAAI54M,GAAK44M,EAAI54M,EAAI,GAEnB+S,EAAI6lM,EAAI54M,GAAK,EACbgT,EAAID,EAAIimM,EAASE,EAAS34L,EAC1B,MAAOxN,GAAKimM,GAAUhmM,GAAKkmM,GAAUv5K,EAAK5sB,KAAOmtF,EAAMltF,GACrD4lM,EAAI54M,GAAK+S,IACTC,IAEF,GAAIoP,EAAQ,IAAM,IAAMuuE,GAAKpwE,GAAKA,GAAKowE,GACjCioH,EAAI54M,IAAM24M,EAAM34M,EAAIoiB,GACtB,OAAOk3L,EAAWV,EAAI54M,GAAIugB,EAAIy4L,EAASE,EAAQD,EAAME,MAM3DvyM,EAAS,GAEb,OADAmyM,EAAY,EAAGp5K,EAAKlgC,OAAQ,EAAGygG,EAAMzgG,OAAQmH,GACtCA,GAEL4yM,GAAO,CACTf,KAAMA,GACNjhJ,OAAQA,GACRkhJ,OAAQA,GACRphE,KAAMA,IAGJmiE,GAAe,SAAUh1M,GAC3B,OAAIk7C,GAASsM,UAAUxnD,GACdA,EAAIy0C,UACFyG,GAASj8B,OAAOjf,GAClB4mJ,GAASX,UAAUjmJ,EAAI/C,MAAM,GAC3Bi+C,GAASyxC,UAAU3sF,GACrB,UAASA,EAAI/C,KAAO,SAEtB,IAELg4M,GAAmB,SAAUj0M,GAC/B,IAAIk6I,EAAMv3I,EAAMya,EAChBA,EAAYpnB,EAAW4E,SAASsqB,cAAc,OAC9Cg1H,EAAOlkJ,EAAW4E,SAASgkD,yBACvB5+C,IACFod,EAAUlhB,UAAY8D,GAExB,MAAO2C,EAAOya,EAAUnO,WACtBirI,EAAK5yI,YAAY3E,GAEnB,OAAOu3I,GAELg6D,GAAW,SAAUl1M,EAAKgB,EAAM1C,GAClC,IAAIqhD,EAAWs1J,GAAiBj0M,GAChC,GAAIhB,EAAI+7C,iBAAmBz9C,EAAQ0B,EAAIgQ,WAAWhV,OAAQ,CACxD,IAAIgO,EAAShJ,EAAIgQ,WAAW1R,GAC5B0K,EAAO5M,WAAW3B,aAAaklD,EAAU32C,QAEzChJ,EAAIsI,YAAYq3C,IAGhBw1J,GAAW,SAAUn1M,EAAK1B,GAC5B,GAAI0B,EAAI+7C,iBAAmBz9C,EAAQ0B,EAAIgQ,WAAWhV,OAAQ,CACxD,IAAIgO,EAAShJ,EAAIgQ,WAAW1R,GAC5B0K,EAAO5M,WAAWmf,YAAYvS,KAG9BosM,GAAY,SAAUviE,EAAM7yI,GAC9B,IAAI1B,EAAQ,EACZuI,EAAKgsI,GAAM,SAAUt+H,GACfA,EAAO,KAAOwgM,GAAKf,KACrB11M,IACSiW,EAAO,KAAOwgM,GAAKd,QAC5BiB,GAASl1M,EAAKuU,EAAO,GAAIjW,GACzBA,KACSiW,EAAO,KAAOwgM,GAAKhiJ,QAC5BoiJ,GAASn1M,EAAK1B,OAIhB+2M,GAAS,SAAUr1M,GACrB,OAAO4G,EAAOjN,EAAIojE,GAAO/8D,EAAIgQ,YAAaglM,KAAe,SAAUpnK,GACjE,OAAOA,EAAK5yC,OAAS,MAGrBwqB,GAAQ,SAAUwgL,EAAWhmM,GAC/B,IAAIs1M,EAAmB37M,EAAIojE,GAAO/8D,EAAIgQ,YAAaglM,IAEnD,OADAI,GAAUL,GAAKliE,KAAKyiE,EAAkBtP,GAAYhmM,GAC3CA,GAELu1M,GAAY,CACd7hK,KAAM2hK,GACN7vL,MAAOA,IAGLgwL,GAAoBv+M,GAAKmc,EAAOhC,QAChCqkM,GAAmB,WACrB,OAAOD,GAAkBp+M,MAAM2a,YAAW,WACxC,IAAI4O,EAAM3pB,EAAW4E,SAAS85M,eAAeC,mBAAmB,QAEhE,OADAH,GAAkBn+M,IAAI+b,EAAOL,KAAK4N,IAC3BA,MAGPi1L,GAAa,SAAU50M,GACzB,OAAsC,IAA/BA,EAAKf,QAAQ,cAElB41M,GAAwB,SAAU7P,GACpC,MAAO,CACLxsM,KAAM,aACNwsM,UAAWA,EACXvsM,QAAS,GACTmiD,SAAU,KACVk6J,eAAgB,OAGhBC,GAAsB,SAAUt8M,GAClC,MAAO,CACLD,KAAM,WACNwsM,UAAW,KACXvsM,QAASA,EACTmiD,SAAU,KACVk6J,eAAgB,OAGhBE,GAAmB,SAAUj+M,GAC/B,IAAIiuM,EAAWvsM,EAASw8M,EAOxB,OANAjQ,EAAYuP,GAAU7hK,KAAK37C,EAAOoU,WAClC8pM,EAAmBzjM,GAAKwzL,GAAW,SAAUhlM,GAC3C,IAAIk1M,EAAUnC,GAASN,aAAa17M,EAAO8hD,WAAY74C,GACvD,OAAOk1M,EAAQl7M,OAAS,EAAI,CAACk7M,GAAW,MAE1Cz8M,EAAUw8M,EAAiB52M,KAAK,IACzBu2M,GAAWn8M,GAAWo8M,GAAsBI,GAAoBF,GAAoBt8M,IAEzF08M,GAAgB,SAAUp+M,EAAQyS,EAAO7P,GACxB,eAAf6P,EAAMhR,KACR+7M,GAAU/vL,MAAMhb,EAAMw7L,UAAWjuM,EAAOoU,WAExCpU,EAAOy8C,WAAWhqC,EAAM/Q,QAAS,CAAEiT,OAAQ,QAE7C3U,EAAO6L,UAAUiqD,eAAelzD,EAAS6P,EAAMsrM,eAAiBtrM,EAAMoxC,WAEpEw6J,GAAkB,SAAU5rM,GAC9B,MAAsB,eAAfA,EAAMhR,KAAwBgR,EAAMw7L,UAAU3mM,KAAK,IAAMmL,EAAM/Q,SAEpE48M,GAAuB,SAAU7rM,GACnC,IAAIxK,EAAMs/C,GAAQL,QAAQ,OAAQw2J,MAGlC,OAFAvoH,GAAMltF,EAAKo2M,GAAgB5rM,IAC3B3D,EAAK8oF,GAAc3vF,EAAK,qBAAsBi7D,IACvC6oC,GAAM9jG,IAEXs2M,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,GACfttC,KAAM6tC,IAGR,SAASE,GAAa7+M,GACpB,IAAuC+9M,EAAgBe,EAAnD59M,EAAOoC,KAAMiD,EAAQ,EAAGrB,EAAO,GAA2C65M,EAAQ,EAClFC,EAAa,WACf,OAAiB,IAAVD,GAELE,EAAY,SAAUC,GACpBF,MACF99M,EAAKg+M,OAASA,IAGdhrI,EAAW,SAAUz0C,GACvBz/B,EAAOk0E,SAASz0C,IAEd0/K,EAAwB,SAAU/wM,GACpC6wM,GAAU,GACV/9M,EAAKiG,IAAI,GAAIiH,IAEXgxM,EAAY,WACVl+M,EAAKg+M,SACPD,GAAU,GACV/9M,EAAKiG,QAGTnH,EAAO4O,GAAG,QAAQ,WAChB1N,EAAKiG,SAEPnH,EAAO4O,GAAG,qBAAqB,SAAUR,GACvC,IAAIuC,EAAMvC,EAAE+sD,QACA,SAARxqD,GAA0B,SAARA,GAA0B,eAARA,IACtCyuM,IACAl+M,EAAKm+M,mBAGTr/M,EAAO4O,GAAG,eAAe,SAAUR,GACjC,IAAIuC,EAAMvC,EAAE+sD,QACA,SAARxqD,GAA0B,SAARA,GAA0B,eAARA,GACtCwuM,EAAsB/wM,MAG1BpO,EAAO4O,GAAG,yBAAyB,WACjC1N,EAAKm+M,kBAEPr/M,EAAO4O,GAAG,iCAAkCuwM,GAC5Cn/M,EAAO4O,GAAG,UAAWuwM,GACrBn/M,EAAO4O,GAAG,SAAS,SAAUR,GAC3B,IAAIuc,EAAUvc,EAAEuc,QACZvc,EAAEy1D,wBAGFl5C,GAAW,IAAMA,GAAW,IAAMA,GAAW,IAAMA,GAAW,IAAkB,KAAZA,GAAkBvc,EAAEgoC,WAC1F+oK,IACAn/M,EAAOmV,eAEO,KAAZwV,GAA8B,IAAZA,GACpB3qB,EAAOmV,cAEL2pM,GAAyB59M,EAAKg+M,SAAoE,IAA1DN,GAAO9tC,KAAK8tC,GAAOX,iBAAiBj+M,GAASkF,EAAK,OACnE,IAArBlF,EAAOg0E,YACTE,GAAS,GACTl0E,EAAO2hC,KAAK,SAAU,CACpBlvB,MAAOvN,EAAK,GACZw8D,UAAW,QAGf1hE,EAAO2hC,KAAK,cACZm9K,GAAwB,EACxB9+M,EAAOmV,mBAGXnV,EAAO4O,GAAG,WAAW,SAAUR,GAC7B,IAAIuc,EAAUvc,EAAEuc,QAChB,IAAIvc,EAAEy1D,qBAGN,GAAIl5C,GAAW,IAAMA,GAAW,IAAMA,GAAW,IAAMA,GAAW,IAAkB,KAAZA,EAClEzpB,EAAKg+M,QACPC,EAAsB/wM,OAF1B,CAMA,IAAIkxM,EAASlxM,EAAEgoC,UAAYhoC,EAAEoyE,QAAUpyE,EAAEqyE,UACpC91D,EAAU,IAAMA,EAAU,KAAmB,MAAZA,GAA+B,KAAZA,GAAmBzpB,EAAKg+M,QAAWI,IAC1Fp+M,EAAKm+M,eACLJ,GAAU,GACV/9M,EAAKiG,IAAI,GAAIiH,GACb0wM,GAAwB,OAG5B9+M,EAAO4O,GAAG,aAAa,SAAUR,GAC3BlN,EAAKg+M,QACPC,EAAsB/wM,MAG1B,IAAImxM,EAA0B,SAAU/0L,GACtC,MAA2B,0BAApBA,EAAMg1L,WAEXC,EAAuB,SAAUj1L,GACnC,MAA2B,eAApBA,EAAMg1L,WAA6C,OAAfh1L,EAAMtlB,MAyInD,OAvIAlF,EAAO4O,GAAG,SAAS,SAAUR,GACvBA,EAAEoxM,YAAcD,EAAwBnxM,IAAMqxM,EAAqBrxM,KACrE+wM,EAAsB/wM,MAG1BpO,EAAOs0E,YAAY,SAAU,GAAI,QACjCt0E,EAAOs0E,YAAY,sBAAuB,GAAI,QAC9Ct0E,EAAO4O,GAAG,gCAAgC,SAAUR,GAC7CA,EAAEy1D,sBACL7jE,EAAOmV,iBAGXjU,EAAO,CACLgE,KAAMA,EACNg6M,QAAQ,EACRG,aAAc,WACRL,MACFjB,EAAiB11C,GAAYC,gBAAgBtoK,EAAO6L,aAGxD1E,IAAK,SAAUsL,EAAO+X,GACpB,IAAIhnB,EAEAk+D,EAAWg+I,EADXz/M,EAAWD,EAAOC,SAKtB,GAHAy/M,EAAed,GAAOX,iBAAiBj+M,GACvCyS,EAAQA,GAAS,GACjBA,EAAQ7S,GAAM2C,OAAOkQ,EAAOitM,IACP,IAAjBV,KAA0Bh/M,EAAO0/B,QACnC,OAAO,KAGT,GADAgiC,EAAYx8D,EAAKqB,GACbvG,EAAO2hC,KAAK,gBAAiB,CAC7BlvB,MAAOA,EACPivD,UAAWA,EACX6yE,cAAe/pH,IACdq5C,qBACH,OAAO,KAET,GAAInC,GAAak9I,GAAO9tC,KAAKpvG,EAAWjvD,GACtC,OAAO,KAKT,GAHIvN,EAAKqB,KACPrB,EAAKqB,GAAOw3M,eAAiBA,GAE3B99M,EAAS0/M,yBACPz6M,EAAKjC,OAAShD,EAAS0/M,wBAAyB,CAClD,IAAKn8M,EAAI,EAAGA,EAAI0B,EAAKjC,OAAS,EAAGO,IAC/B0B,EAAK1B,GAAK0B,EAAK1B,EAAI,GAErB0B,EAAKjC,SACLsD,EAAQrB,EAAKjC,OAGjBwP,EAAMoxC,SAAWwkH,GAAYC,gBAAgBtoK,EAAO6L,WAChDtF,EAAQrB,EAAKjC,OAAS,IACxBiC,EAAKjC,OAASsD,EAAQ,GAExBrB,EAAK2B,KAAK4L,GACVlM,EAAQrB,EAAKjC,OAAS,EACtB,IAAI2D,EAAO,CACT6L,MAAOA,EACPivD,UAAWA,EACX6yE,cAAe/pH,GAOjB,OALAxqB,EAAO2hC,KAAK,UAAW/6B,GACnBL,EAAQ,IACV2tE,GAAS,GACTl0E,EAAO2hC,KAAK,SAAU/6B,IAEjB6L,GAETktB,KAAM,WACJ,IAAIltB,EAYJ,OAXIvR,EAAKg+M,SACPh+M,EAAKiG,MACLjG,EAAKg+M,QAAS,EACdD,GAAU,IAER14M,EAAQ,IACVkM,EAAQvN,IAAOqB,GACfq4M,GAAOR,cAAcp+M,EAAQyS,GAAO,GACpCyhE,GAAS,GACTl0E,EAAO2hC,KAAK,OAAQ,CAAElvB,MAAOA,KAExBA,GAETotB,KAAM,WACJ,IAAIptB,EAOJ,OANIlM,EAAQrB,EAAKjC,OAAS,IACxBwP,EAAQvN,IAAOqB,GACfq4M,GAAOR,cAAcp+M,EAAQyS,GAAO,GACpCyhE,GAAS,GACTl0E,EAAO2hC,KAAK,OAAQ,CAAElvB,MAAOA,KAExBA,GAETw4D,MAAO,WACL/lE,EAAO,GACPqB,EAAQ,EACRrF,EAAKg+M,QAAS,EACdh+M,EAAKgE,KAAOA,EACZlF,EAAO2hC,KAAK,eAEdi+K,QAAS,WACP,OAAOr5M,EAAQ,GAAKrF,EAAKg+M,QAAUh6M,EAAK,KAAO05M,GAAO9tC,KAAK8tC,GAAOX,iBAAiBj+M,GAASkF,EAAK,KAEnG26M,QAAS,WACP,OAAOt5M,EAAQrB,EAAKjC,OAAS,IAAM/B,EAAKg+M,QAE1CjzM,SAAU,SAAU1I,GAIlB,OAHA67M,IACAl+M,EAAKm+M,eACLn+M,EAAKixG,OAAO5uG,GACLrC,EAAKiG,OAEdgrG,OAAQ,SAAU5uG,GAChB,IACEw7M,IACAx7M,IACA,QACAw7M,MAGJt6I,MAAO,SAAUq7I,EAAWC,GAC1B,IAAIr+I,EAAW7d,EACX3iD,EAAK+K,SAAS6zM,KAChBj8J,EAAW3+C,EAAKqB,GAAOs9C,SACvB6d,EAAYx8D,EAAKqB,EAAQ,GACzBq4M,GAAOR,cAAcp+M,EAAQ0hE,GAAW,GACpCxgE,EAAK+K,SAAS8zM,KAChB76M,EAAKqB,EAAQ,GAAGw3M,eAAiBl6J,MAKlC3iD,EAGT,IAAI8+M,GAAmB,GAAIC,GAAWr+D,GAAS/yI,OAAQqxM,GAASt+D,GAAS9yI,KACrEqxM,GAAqB,SAAU/4M,EAAMk9I,GACvC,IAAI5/I,EAAQs7M,GAAiB54M,GACxB1C,IACHs7M,GAAiB54M,GAAQ1C,EAAQ,IAEnCs7M,GAAiB54M,GAAMP,KAAKy9I,IAE1B1yE,GAAc,SAAUxqE,EAAMpH,GAChCkgN,GAAOF,GAAiB54M,IAAO,SAAUk9I,GACvCA,EAAKtkJ,OAGTmgN,GAAmB,OAAO,SAAUngN,GAClC,IACIogN,EAAOrgJ,EADP75C,EAAMlmB,EAAO6L,UAAUyc,SAEvB+3L,EAAgB,SAAUC,GAC5B,OAAOF,EAAME,EAAIv9J,mBAAuE,IAAnD6+F,GAAS15I,QAAQ63D,EAAQugJ,EAAIv9J,kBAEhEw9J,EAAU,SAAUC,EAAMC,GAC5Bj9D,GAASi9D,GAAMprM,SACfmuI,GAASg9D,GAAMpxM,OAAO,YAAYA,OAAOqxM,EAAKxoM,aAEhDmoM,EAAQj9J,GAASqnG,eAAe,OAC3BtkI,EAAIE,YACP25C,EAAS//D,EAAO6L,UAAU45C,oBAC1By6J,GAAOD,GAASA,GAASlgJ,EAAQqgJ,GAAQC,IAAgB,SAAUC,GACjEC,EAAQD,EAAIv9J,gBAAiBu9J,UAInC,IAAII,GAAQ,CAAE9uI,YAAaA,IAEvB+uI,GAAc,qBACdC,GAAShhN,GAAMkP,KACf+xM,GAASzvC,GAAYN,KACrBgwC,GAAgB,SAAUl1M,GAC5B,MAAO,YAAYzH,KAAKyH,EAAKtH,WAE3By8M,GAAwB,SAAU70M,EAAKN,EAAM1H,GAC/C,OAAOgI,EAAIg3C,UAAUt3C,EAAM1H,IAAW0H,IAAS1H,IAAWgI,EAAI02C,QAAQ1+C,IAEpEkgF,GAAe,SAAUusF,EAAIzqJ,EAAKzB,GACpC,IAAI4B,EAAWV,EAAQq7L,EAgBvB,OAfA36L,EAAYH,EAAIzB,EAAQ,iBAAmB,gBAC3CkB,EAASO,EAAIzB,EAAQ,cAAgB,aACjC0+B,GAASsM,UAAUppC,KACrB26L,EAAU36L,EAAUpO,WAAWhV,OAAS,GACnCwhB,GAASkB,GACZA,IAEFU,EAAYA,EAAUpO,WAAW0N,EAASq7L,EAAUA,EAAUr7L,IAE5Dw9B,GAASj8B,OAAOb,IAAc5B,GAASkB,GAAUU,EAAUssE,UAAU1vF,SACvEojB,EAAY,IAAI4iI,GAAW5iI,EAAWsqJ,EAAGv8J,WAAW+U,QAAU9C,GAE5D88B,GAASj8B,OAAOb,KAAe5B,GAAoB,IAAXkB,IAC1CU,EAAY,IAAI4iI,GAAW5iI,EAAWsqJ,EAAGv8J,WAAWm+E,QAAUlsE,GAEzDA,GAEL46L,GAAS,SAAU/0M,EAAKN,EAAMxE,EAAMwkB,GACtC,IAAI8qE,EAAUxqF,EAAIiE,OAAO/I,EAAMwkB,GAG/B,OAFAhgB,EAAKvH,WAAW3B,aAAag0F,EAAS9qF,GACtC8qF,EAAQnmF,YAAY3E,GACb8qF,GAELwqH,GAAmB,SAAUh1M,EAAKN,EAAMud,EAAM/hB,EAAMwkB,GACtD,IAAInH,EAAQ8iC,GAAQN,QAAQr7C,GACxB8qF,EAAUnvC,GAAQN,QAAQ/6C,EAAIiE,OAAO/I,EAAMwkB,IAC3CirC,EAAW1tC,EAAOy9H,GAAaniI,GAASkiI,GAAaliI,GASzD,OARA8qC,GAASmnC,EAAS7/B,GACd1tC,GACFvmB,GAAO6hB,EAAOiyE,GACdF,GAAQE,EAASjyE,KAEjB9d,GAAM8d,EAAOiyE,GACbtnF,GAAOsnF,EAASjyE,IAEXiyE,EAAQxqF,OAEbi1M,GAAc,SAAUj1M,EAAKN,EAAM+I,GACrC,QAAIksM,GAAOj1M,EAAM+I,EAAOzE,YAGpB2wM,GAAOj1M,EAAM+I,EAAO0U,SAGpB1U,EAAOnL,SACF25C,GAASsM,UAAU7jD,IAASM,EAAIiI,GAAGvI,EAAM+I,EAAOnL,eADzD,KAIE43M,GAAyB,SAAUx1M,EAAM+I,GAC3C,OAAOA,EAAO0sM,OAA0B,MAAjBz1M,EAAKyF,SAE1BiwM,GAAS,SAAUp1M,EAAKN,EAAMud,EAAMsnJ,GAEtC,OADA7kK,EAAOwlK,GAAYZ,wBAAwB5kK,EAAMud,EAAMsnJ,IAC/C7kK,GAA2B,OAAlBA,EAAKtH,UAAqB4H,EAAI02C,QAAQh3C,IAErD21M,GAAe,SAAU5wC,EAAI/kK,EAAM+I,GACrC,IACI6sM,EADAn9M,EAAauH,EAAKvH,WAElB6H,EAAMykK,EAAGzkK,IAAKkjM,EAAkBz+B,EAAG1wK,SAAS4zD,kBAC5Cl/C,EAAO0U,QACJ+lL,EAUC/qM,IAAe6H,EAAIo1C,YAChB3sC,EAAO8sM,YAAeZ,GAAOj1M,EAAM+I,EAAO8sM,aAC7Cb,GAAOhhN,GAAMooB,KAAKpc,EAAKqM,aAAa,SAAUrM,GACxCwlK,GAAY3c,QAAQkc,EAAIy+B,EAAiBxjM,EAAKtH,SAASic,eACpDihM,EAIHA,EAAajxM,YAAY3E,IAHzB41M,EAAeP,GAAO/0M,EAAKN,EAAMwjM,GACjCljM,EAAIsV,WAAWggM,EAAc7wC,EAAG1wK,SAAS6zD,0BAK3C0tJ,EAAe,MApBnBt1M,EAAI02C,QAAQh3C,KAAUM,EAAI02C,QAAQv+C,KAC/Bi9M,GAAOp1M,EAAKN,GAAM,IAAW01M,GAAOp1M,EAAKN,EAAKsM,YAAY,EAAM,IACnEtM,EAAKlJ,aAAawJ,EAAIiE,OAAO,MAAOvE,EAAKsM,YAEtCopM,GAAOp1M,EAAKN,GAAM,IAAU01M,GAAOp1M,EAAKN,EAAK82C,WAAW,EAAO,IAClE92C,EAAK2E,YAAYrE,EAAIiE,OAAO,SAsBhCwE,EAAOnL,UAAYmL,EAAOzE,SAAW2wM,GAAOlsM,EAAOzE,OAAQtE,IAG/DM,EAAImJ,OAAOzJ,EAAM,IAEfwJ,GAAe,SAAUu7J,EAAIh8J,EAAQk8J,EAAMjlK,EAAM81M,GACnD,IAAIl+M,EAAGooB,EAAO+1L,EACVz1M,EAAMykK,EAAGzkK,IACb,IAAKi1M,GAAYj1M,EAAKN,EAAM+I,KAAYysM,GAAuBx1M,EAAM+I,GACnE,OAAO,EAET,GAAsB,QAAlBA,EAAOU,OAuDT,IAtDAurM,GAAOjsM,EAAOuO,QAAQ,SAAU9jB,EAAOgI,GACrChI,EAAQgyK,GAAYJ,oBAAoB9kK,EAAKklK,GAAYR,YAAYxxK,EAAOyxK,GAAOzpK,GAC/D,kBAATA,IACTA,EAAOhI,EACPsiN,EAAc,IAEZ/sM,EAAOitM,iBAAoBF,GAAeb,GAAOzvC,GAAYn8H,SAAS/oC,EAAKw1M,EAAat6M,GAAOhI,KACjG8M,EAAIkqD,SAASxqD,EAAMxE,EAAM,IAE3Bu6M,EAAiB,KAEfA,GAAmD,KAAjCz1M,EAAI6tC,UAAUnuC,EAAM,WACxCA,EAAKk/B,gBAAgB,SACrBl/B,EAAKk/B,gBAAgB,mBAEvB81K,GAAOjsM,EAAOlN,YAAY,SAAUrI,EAAOgI,GACzC,IAAIy6M,EAMJ,GALAziN,EAAQgyK,GAAYR,YAAYxxK,EAAOyxK,GACnB,kBAATzpK,IACTA,EAAOhI,EACPsiN,EAAc,IAEXA,GAAeb,GAAO30M,EAAI6tC,UAAU2nK,EAAat6M,GAAOhI,GAAQ,CACnE,GAAa,UAATgI,IACFhI,EAAQ8M,EAAI6tC,UAAUnuC,EAAMxE,GACxBhI,IACFyiN,EAAW,GACXjB,GAAOxhN,EAAMiiB,MAAM,QAAQ,SAAUs4I,GAC/B,WAAWx1J,KAAKw1J,KAClBkoD,IAAaA,EAAW,IAAM,IAAMloD,MAGpCkoD,IAEF,YADA31M,EAAIC,UAAUP,EAAMxE,EAAMy6M,GAKnB,UAATz6M,GACFwE,EAAKk/B,gBAAgB,aAEnB61K,GAAYx8M,KAAKiD,IACnBwE,EAAKk/B,gBAAgB,YAAc1jC,GAErCwE,EAAKk/B,gBAAgB1jC,OAGzBw5M,GAAOjsM,EAAOnN,SAAS,SAAUpI,GAC/BA,EAAQgyK,GAAYR,YAAYxxK,EAAOyxK,GAClC6wC,IAAex1M,EAAIqG,SAASmvM,EAAatiN,IAC5C8M,EAAIu4E,YAAY74E,EAAMxM,MAG1BwsB,EAAQ1f,EAAI+rJ,WAAWrsJ,GAClBpI,EAAI,EAAGA,EAAIooB,EAAM3oB,OAAQO,IAAK,CACjC,IAAIsqF,EAAWliE,EAAMpoB,GAAGc,SACxB,GAA8B,IAA1BwpF,EAAS5lF,QAAQ,MAA4C,IAA9B4lF,EAAS5lF,QAAQ,SAClD,OAAO,EAIb,MAAsB,SAAlByM,EAAOU,QACTksM,GAAa5wC,EAAI/kK,EAAM+I,IAChB,QAFT,GAKEmtM,GAAiB,SAAU9hN,EAAQqmB,EAAWjf,EAAMypK,EAAM2f,GAC5D,IAAIuxB,EAUJ,OATAnB,GAAOxvC,GAAY79J,WAAWvT,EAAOkM,IAAKma,EAAUhiB,YAAYsjC,WAAW,SAAUzjC,GACnF,IAAIyQ,EACCotM,GAA4B,WAAd79M,EAAO1B,IAAiC,SAAd0B,EAAO1B,KAClDmS,EAASq8K,GAAY3jE,UAAUrtH,EAAQkE,EAAQkD,EAAMypK,EAAM2f,GACvD77K,IAA2B,IAAjBA,EAAO0M,QACnB0gM,EAAa79M,OAIZ69M,GAELC,GAAe,SAAUhiN,EAAQkwL,EAAY6xB,EAAY17L,EAAWpV,EAAQoQ,EAAO1M,EAAQk8J,GAC7F,IAAI3sK,EAAQ1E,EAAOyiN,EAAWC,EAAY1+M,EAAG2+M,EACzCj2M,EAAMlM,EAAOkM,IACjB,GAAI61M,EAAY,CAEd,IADAI,EAAmBJ,EAAW19M,WACzBH,EAASmiB,EAAUhiB,WAAYH,GAAUA,IAAWi+M,EAAkBj+M,EAASA,EAAOG,WAAY,CAErG,IADA7E,EAAQ0M,EAAI1M,MAAM0E,GAAQ,GACrBV,EAAI,EAAGA,EAAI0sL,EAAWjtL,OAAQO,IACjC,GAAI4R,GAAapV,EAAQkwL,EAAW1sL,GAAIqtK,EAAMrxK,EAAOA,GAAQ,CAC3DA,EAAQ,EACR,MAGAA,IACEyiN,GACFziN,EAAM+Q,YAAY0xM,GAEfC,IACHA,EAAa1iN,GAEfyiN,EAAYziN,IAGZ6hB,GAAW1M,EAAOytM,OAAUl2M,EAAI02C,QAAQm/J,KAC1C17L,EAAYna,EAAImV,MAAM0gM,EAAY17L,IAEhC47L,IACFhxM,EAAO5M,WAAW3B,aAAau/M,EAAWhxM,GAC1CixM,EAAW3xM,YAAYU,IAG3B,OAAOoV,GAELmyG,GAAW,SAAUm4C,EAAIvpK,EAAMypK,EAAMjlK,EAAM4kL,GAC7C,IACI3sI,EAAU39B,EADVgqK,EAAavf,EAAGniK,UAAUnP,IAAI+H,GAAOuN,EAASu7K,EAAW,GAC1C5gL,GAAkB,EACjCpD,EAAMykK,EAAGzkK,IACTL,EAAY8kK,EAAG9kK,UACfw2M,EAAoB,SAAUh8L,GAChC,IAAI07L,EAAaD,GAAenxC,EAAItqJ,EAAWjf,EAAMypK,EAAM2f,GAC3D,OAAOwxB,GAAarxC,EAAIuf,EAAY6xB,EAAY17L,EAAWA,GAAW,EAAM1R,EAAQk8J,IAElFyxC,EAAuB,SAAU12M,GACnC,OAAOwkK,GAAUt5G,eAAelrD,IAASu3C,GAASsM,UAAU7jD,KAAsB,WAAZA,EAAKpJ,IAA+B,SAAZoJ,EAAKpJ,KAEjG0hE,EAAU,SAAUt4D,GACtB,IAAIgI,EAAUpQ,EAAG4zE,EAAGmrI,EAAqBr3D,EAOzC,GANI/nG,GAASsM,UAAU7jD,IAASM,EAAIorD,mBAAmB1rD,KACrD22M,EAAsBjzM,EACtBA,EAAmD,SAAjCpD,EAAIorD,mBAAmB1rD,GACzCs/I,GAA0B,GAE5Bt3I,EAAWhU,GAAMooB,KAAKpc,EAAKqM,YACvB3I,IAAoB47I,EACtB,IAAK1nJ,EAAI,EAAG4zE,EAAI84G,EAAWjtL,OAAQO,EAAI4zE,EAAG5zE,IACxC,GAAI4R,GAAau7J,EAAIuf,EAAW1sL,GAAIqtK,EAAMjlK,EAAMA,GAC9C,MAIN,GAAI+I,EAAOw7C,MACLv8C,EAAS3Q,OAAQ,CACnB,IAAKO,EAAI,EAAG4zE,EAAIxjE,EAAS3Q,OAAQO,EAAI4zE,EAAG5zE,IACtC0gE,EAAQtwD,EAASpQ,IAEf0nJ,IACF57I,EAAkBizM,KAKtBr/I,EAAS,SAAUz+C,GACrB,IAAI7Y,EAAOM,EAAI7M,IAAIolB,EAAQ,SAAW,QAClCqR,EAAMlqB,EAAK6Y,EAAQ,aAAe,aAQtC,OAPI69L,EAAqBxsL,KACvBA,EAAMA,EAAIrR,EAAQ,aAAe,cAE/B0+B,GAASj8B,OAAO4O,IAA4B,IAApBA,EAAI5wB,KAAKjC,SACnC6yB,EAAMrR,EAAQ7Y,EAAKm3C,iBAAmBn3C,EAAKuc,YAAcvc,EAAKuc,aAAevc,EAAKm3C,iBAEpF72C,EAAImJ,OAAOzJ,GAAM,GACVkqB,GAEL0sL,EAAiB,SAAUt8L,GAC7B,IAAII,EAAgBo9B,EAChBm1H,EAA0B3yJ,EAAI2yJ,wBAElC,GADA3yJ,EAAMusJ,GAAYH,UAAU3B,EAAIzqJ,EAAKgqK,GAAY,GAC7Cv7K,EAAO0M,MAAO,CAIhB,GAHA6E,EAAMgrK,GAAW7vK,MAAM6E,GACvBI,EAAiB89D,GAAausF,EAAIzqJ,GAAK,GACvCw9B,EAAe0gC,GAAausF,EAAIzqJ,GAC5BI,IAAmBo9B,EAAc,CAWnC,GAVI,eAAev/C,KAAKmiB,EAAehiB,WAAagiB,EAAepO,aAE/DoO,EAD8B,OAA5BA,EAAehiB,SACAgiB,EAAepO,WAAWA,YAAcoO,EAExCA,EAAepO,YAAcoO,GAG9CuyJ,GAA2B,wBAAwB10K,KAAK00K,EAAwBv0K,WAAaw8M,GAAcp9J,IAAiBA,EAAaxrC,aAC3IwrC,EAAeA,EAAaxrC,YAAcwrC,GAExCq9J,GAAsB70M,EAAKoa,EAAgBo9B,GAAe,CAC5D,IAAI0L,EAAS/zC,EAAO/U,KAAKggB,EAAepO,YAAY6B,MAAMuM,GAM1D,OALA+7L,EAAkBnB,GAAiBh1M,EAAKkjD,GAAQ,EAAM,OAAQ,CAC5D,GAAM,SACN,gBAAiB,mBAEnB8T,GAAO,GAGT,GAAI69I,GAAsB70M,EAAKw3C,EAAcp9B,GAAiB,CACxD8oC,EAAS/zC,EAAO/U,KAAKo9C,EAAahB,WAAW3oC,MAAM2pC,GAMvD,OALA2+J,EAAkBnB,GAAiBh1M,EAAKkjD,GAAQ,EAAO,OAAQ,CAC7D,GAAM,OACN,gBAAiB,mBAEnB8T,GAAO,GAGT58C,EAAiB26L,GAAO/0M,EAAKoa,EAAgB,OAAQ,CACnD,GAAM,SACN,gBAAiB,aAEnBo9B,EAAeu9J,GAAO/0M,EAAKw3C,EAAc,OAAQ,CAC/C,GAAM,OACN,gBAAiB,aAEnB2+J,EAAkB/7L,GAClB+7L,EAAkB3+J,GAClBp9B,EAAiB48C,GAAO,GACxBxf,EAAewf,SAEf58C,EAAiBo9B,EAAe2+J,EAAkB/7L,GAEpDJ,EAAII,eAAiBA,EAAejiB,WAAaiiB,EAAejiB,WAAaiiB,EAC7EJ,EAAIO,YAAcva,EAAIi4C,UAAU79B,GAChCJ,EAAIw9B,aAAeA,EAAar/C,WAAaq/C,EAAar/C,WAAaq/C,EACvEx9B,EAAIQ,UAAYxa,EAAIi4C,UAAUT,GAAgB,EAEhDwvH,GAAUtyG,KAAK10D,EAAKga,GAAK,SAAU5S,GACjCstM,GAAOttM,GAAO,SAAU1H,GACtBs4D,EAAQt4D,GACJu3C,GAASsM,UAAU7jD,IAAsD,cAA7C+kK,EAAGzkK,IAAI+oC,SAASrpC,EAAM,oBAAsCA,EAAKvH,YAAsE,cAAxD+sK,GAAYH,kBAAkB/kK,EAAKN,EAAKvH,aACrJ+Q,GAAau7J,EAAI,CACfxgH,MAAM,EACNwqE,OAAO,EACPzqH,OAAQ,OACRgT,OAAQ,CAAEu/L,eAAgB,cACzB,KAAM72M,UAKjB,GAAIA,EACEA,EAAK2a,UACPL,EAAMha,EAAIob,YACVpB,EAAI8xD,eAAepsE,GACnBsa,EAAIivC,YAAYvpD,GAChB42M,EAAet8L,IAEfs8L,EAAe52M,QAInB,GAAoD,UAAhDM,EAAIorD,mBAAmBzrD,EAAUC,WAWhCD,EAAU0C,eAAkBoG,EAAOzE,SAAUhE,EAAIE,OAAO,+CAA+CnJ,OAS1GovL,GAAkB1hB,EAAIvpK,EAAMypK,EAAM2f,IARlC3sI,EAAWwkH,GAAYL,sBAAsB2I,EAAG9kK,WAAW,GAC3D22M,EAAe32M,EAAUyc,UACzBzc,EAAUiqD,eAAejS,GACrBlvC,EAAOzE,QAAU8gL,GAAY7uL,MAAMwuK,EAAIvpK,EAAMypK,EAAMhlK,EAAUgJ,aAC/Du8J,GAAYd,UAAUpkK,EAAKL,EAAWA,EAAUyc,UAElDqoJ,EAAGx7J,mBAlBL,CACEvJ,EAAOC,EAAUC,UACjB,IAAK,IAAItI,EAAI,EAAG4zE,EAAI84G,EAAWjtL,OAAQO,EAAI4zE,EAAG5zE,IAC5C,GAAI0sL,EAAW1sL,GAAGk/M,iBACZttM,GAAau7J,EAAIuf,EAAW1sL,GAAIqtK,EAAMjlK,EAAMA,GAC9C,QAkBN+2M,GAAe,CACjBvtM,aAAcA,GACdC,OAAQmjH,IAGNoqF,GAAShjN,GAAMkP,KACf+zM,GAAgB,SAAUj3M,GAC5B,OAAOA,GAA0B,IAAlBA,EAAK2a,WAAmB6pJ,GAAUt5G,eAAelrD,KAAU48J,GAAY58J,KAAUu3C,GAAS6nG,QAAQp/I,IAE/Gk3M,GAAqB,SAAUl3M,EAAMo5I,GACvC,IAAIvtF,EACJ,IAAKA,EAAU7rD,EAAM6rD,EAASA,EAAUA,EAAQutF,GAAc,CAC5D,GAAyB,IAArBvtF,EAAQlxC,UAA+C,IAA7BkxC,EAAQk7B,UAAU1vF,OAC9C,OAAO2I,EAET,GAAyB,IAArB6rD,EAAQlxC,WAAmB6pJ,GAAUt5G,eAAeW,GACtD,OAAOA,EAGX,OAAO7rD,GAELm3M,GAAqB,SAAU72M,EAAKqmF,EAAMppE,GAC5C,IAAIsuC,EAASurJ,EACTC,EAAe,IAAInsC,GAAa5qK,GACpC,GAAIqmF,GAAQppE,IACVopE,EAAOuwH,GAAmBvwH,EAAM,mBAChCppE,EAAO25L,GAAmB35L,EAAM,eAC5B85L,EAAa7uF,QAAQ7hC,EAAMppE,IAAO,CACpC,IAAKsuC,EAAU86B,EAAKpqE,YAAasvC,GAAWA,IAAYtuC,GACtD65L,EAAavrJ,EACbA,EAAUA,EAAQtvC,YAClBoqE,EAAKhiF,YAAYyyM,GAMnB,OAJA92M,EAAImJ,OAAO8T,GACXvpB,GAAMkP,KAAKlP,GAAMooB,KAAKmB,EAAKlR,aAAa,SAAUrM,GAChD2mF,EAAKhiF,YAAY3E,MAEZ2mF,EAGX,OAAOppE,GAEL+5L,GAAuB,SAAUt3M,EAAMiD,EAAQq1D,GACjD0+I,GAAOh3M,EAAKqM,YAAY,SAAUrM,GAC5Bi3M,GAAcj3M,KACZiD,EAAOjD,IACTs4D,EAAQt4D,GAENA,EAAKo4C,iBACPk/J,GAAqBt3M,EAAMiD,EAAQq1D,QAKvCi/I,GAAW,SAAUj3M,EAAK9E,GAC5B,OAAOuR,GAAM,SAAUvR,EAAMwE,GAC3B,SAAUA,IAAQwlK,GAAYn8H,SAAS/oC,EAAKN,EAAMxE,MACjDA,IAEDg8M,GAAa,SAAUl3M,EAAK9E,EAAMhI,GACpC,OAAOuZ,GAAM,SAAUvR,EAAMhI,EAAOwM,GAClCM,EAAIkqD,SAASxqD,EAAMxE,EAAMhI,GACU,KAA/BwM,EAAKuM,aAAa,UACpBvM,EAAKk/B,gBAAgB,SAEvBu4K,GAAgBn3M,EAAKN,KACpBxE,EAAMhI,IAEPikN,GAAkB,SAAUn3M,EAAKN,GACb,SAAlBA,EAAKtH,UAAuD,IAAhC4H,EAAI+rJ,WAAWrsJ,GAAM3I,QACnDiJ,EAAImJ,OAAOzJ,GAAM,IAGjB03M,GAA2B,SAAUp3M,EAAKN,GAC5C,IAAI62M,EACkB,IAAlB72M,EAAK2a,UAAkB3a,EAAKvH,YAA2C,IAA7BuH,EAAKvH,WAAWkiB,WAC5Dk8L,EAAiBrxC,GAAYH,kBAAkB/kK,EAAKN,EAAKvH,YACrD6H,EAAI+oC,SAASrpC,EAAM,UAAY62M,EACjCv2M,EAAIkqD,SAASxqD,EAAM,kBAAmB62M,GAC7Bv2M,EAAI+oC,SAASrpC,EAAM,qBAAuB62M,GACnDv2M,EAAIkqD,SAASxqD,EAAM,kBAAmB,QAIxC23M,GAAyB,SAAUr3M,EAAKyI,EAAQk8J,EAAMjlK,IACpD+I,EAAOuO,OAAOtO,OAASD,EAAOuO,OAAOu/L,kBACvC7iN,GAAMghE,KAAKh1D,EAAM+M,EAAM2qM,GAA0Bp3M,GAAM,cACvDo3M,GAAyBp3M,EAAKN,KAG9B43M,GAAkC,SAAUt3M,EAAKyI,EAAQk8J,EAAMjlK,GAC7D+I,EAAOuO,QAAUvO,EAAOuO,OAAOspG,iBACjC02F,GAAqBt3M,EAAMu3M,GAASj3M,EAAK,YAAak3M,GAAWl3M,EAAK,kBAAmBklK,GAAYR,YAAYj8J,EAAOuO,OAAOspG,gBAAiBqkD,MAGhJ4yC,GAAc,SAAUv3M,EAAKyI,EAAQk8J,EAAMjlK,GACvB,QAAlB+I,EAAOzE,QAAsC,QAAlByE,EAAOzE,SACpCgzM,GAAqBt3M,EAAMu3M,GAASj3M,EAAK,YAAak3M,GAAWl3M,EAAK,WAAY,KAClFA,EAAImJ,OAAOnJ,EAAIE,OAAyB,QAAlBuI,EAAOzE,OAAmB,MAAQ,MAAOtE,IAAO,KAGtE83M,GAAgB,SAAUx3M,EAAKyI,EAAQk8J,EAAMjlK,GAC3CA,IAAkC,IAA1B+I,EAAOgvM,iBACjB/3M,EAAOm3M,GAAmB72M,EAAKklK,GAAYZ,wBAAwB5kK,GAAOA,GAC1EA,EAAOm3M,GAAmB72M,EAAKN,EAAMwlK,GAAYZ,wBAAwB5kK,GAAM,MAG/Eg4M,GAAmB,SAAU13M,EAAKyI,EAAQ/I,GAC5C,GAAI+I,EAAOkvM,mBAAoB,CAC7B,IAAIr6M,EAAWmL,EAAO0sM,MAAQ,WAAa,IAC3CuB,GAAO12M,EAAIE,OAAO5C,EAAUoC,IAAO,SAAUA,GACvCi3M,GAAcj3M,IAChBg3M,GAAOjuM,EAAOuO,QAAQ,SAAU9jB,EAAOgI,GACrC8E,EAAIkqD,SAASxqD,EAAMxE,EAAM,YAM/B08M,GAAoB,SAAU9jN,EAAQkwL,EAAYrf,EAAMjlK,GAC1Dg3M,GAAO1yB,GAAY,SAAUv7K,GAC3BiuM,GAAO5iN,EAAOkM,IAAIE,OAAOuI,EAAOzE,OAAQtE,IAAO,SAAUsjD,GAClD2zJ,GAAc3zJ,IAGnByzJ,GAAavtM,aAAapV,EAAQ2U,EAAQk8J,EAAM3hH,EAAOv6C,EAAOgmH,MAAQzrE,EAAQ,SAEhF00J,GAAiB5jN,EAAOkM,IAAKyI,EAAQ/I,OAGrCm4M,GAAmB,SAAU/jN,EAAQ2U,EAAQvN,EAAMypK,EAAMjlK,GACvDolL,GAAY3jE,UAAUrtH,EAAQ4L,EAAKvH,WAAY+C,EAAMypK,IACnD8xC,GAAavtM,aAAapV,EAAQ2U,EAAQk8J,EAAMjlK,IAIlD+I,EAAOqvM,oBACThkN,EAAOkM,IAAIyL,UAAU/L,EAAKvH,YAAY,SAAUH,GAC9C,GAAI8sL,GAAY3jE,UAAUrtH,EAAQkE,EAAQkD,EAAMypK,GAE9C,OADA8xC,GAAavtM,aAAapV,EAAQ2U,EAAQk8J,EAAMjlK,IACzC,MAKXq4M,GAAe,CACjBH,kBAAmBA,GACnBP,uBAAwBA,GACxBC,gCAAiCA,GACjCC,YAAaA,GACbC,cAAeA,GACfK,iBAAkBA,IAGhBG,GAAStkN,GAAMkP,KACfq1M,GAAkB,SAAUv4M,GAC9B,OAAOA,GAA0B,IAAlBA,EAAK2a,WAAmB6pJ,GAAUt5G,eAAelrD,KAAU48J,GAAY58J,KAAUu3C,GAAS6nG,QAAQp/I,IAE/GqJ,GAAc,SAAU07J,EAAIvpK,EAAMypK,EAAMjlK,GAC1C,IAEIi4C,EAAU39B,EAFVgqK,EAAavf,EAAGniK,UAAUnP,IAAI+H,GAC9BuN,EAASu7K,EAAW,GAEpB3hL,GAAe3C,GAAQ+kK,EAAG9kK,UAAU0C,cACpCrC,EAAMykK,EAAGzkK,IAAKL,EAAY8kK,EAAG9kK,UAC7Bu4M,EAAmB,SAAUn8M,EAAKqpC,GAEpC,GADAA,EAAMA,GAAO38B,EACT1M,EAAK,CAOP,GANIqpC,EAAI+yK,UACN/yK,EAAI+yK,SAASp8M,EAAKqpC,EAAKu/H,EAAMjlK,GAE/Bs4M,GAAO5yK,EAAIpuB,QAAQ,SAAU9jB,EAAOgI,GAClC8E,EAAIkqD,SAASnuD,EAAKb,EAAMgqK,GAAYR,YAAYxxK,EAAOyxK,OAErDv/H,EAAIpuB,OAAQ,CACd,IAAIohM,EAAWp4M,EAAI6tC,UAAU9xC,EAAK,SAC9Bq8M,GACFr8M,EAAIgP,aAAa,iBAAkBqtM,GAGvCJ,GAAO5yK,EAAI7pC,YAAY,SAAUrI,EAAOgI,GACtC8E,EAAIC,UAAUlE,EAAKb,EAAMgqK,GAAYR,YAAYxxK,EAAOyxK,OAE1DqzC,GAAO5yK,EAAI9pC,SAAS,SAAUpI,GAC5BA,EAAQgyK,GAAYR,YAAYxxK,EAAOyxK,GAClC3kK,EAAIqG,SAAStK,EAAK7I,IACrB8M,EAAI44E,SAAS78E,EAAK7I,QAKtBmlN,EAAiB,SAAUr0B,EAAYtkL,GACzC,IAAIgc,GAAQ,EACZ,QAAKjT,EAAOnL,WAGZ06M,GAAOh0B,GAAY,SAAUv7K,GAC3B,KAAI,cAAeA,IAAUA,EAAOyR,YAAc7X,EAGlD,OAAIrC,EAAIiI,GAAGvI,EAAM+I,EAAOnL,YAAcg/J,GAAY58J,IAChDw4M,EAAiBx4M,EAAM+I,GACvBiT,GAAQ,GACD,QAHT,KAMKA,IAEL48L,EAAgB,SAAUt4M,EAAKga,EAAK29B,EAAU4gK,GAChD,IACIpxC,EAAUqxC,EADV1wC,EAAc,GACK1kK,GAAkB,EACzC+jK,EAAW1+J,EAAOzE,QAAUyE,EAAO0U,MACnCq7L,EAAUx4M,EAAIiE,OAAOkjK,GACrB+wC,EAAiBM,GACjBxxC,GAAUtyG,KAAK10D,EAAKga,GAAK,SAAU5S,GACjC,IAAIqxM,EACAzgJ,EAAU,SAAUt4D,GACtB,IAAItH,EAAUs1F,EAAYsxD,EAAyBq3D,EASnD,GARAA,EAAsBjzM,EACtBhL,EAAWsH,EAAKtH,SAASic,cACzBq5E,EAAahuF,EAAKvH,WAAWC,SAASic,cAChB,IAAlB3U,EAAK2a,UAAkBra,EAAIorD,mBAAmB1rD,KAChD22M,EAAsBjzM,EACtBA,EAAmD,SAAjCpD,EAAIorD,mBAAmB1rD,GACzCs/I,GAA0B,GAExBkmB,GAAYN,KAAKxsK,EAAU,MAK7B,OAJAqgN,EAAiB,OACbhwM,EAAO0U,OACTnd,EAAImJ,OAAOzJ,IAIf,GAAI+I,EAAO+hF,SAAWs6F,GAAY3jE,UAAUsjD,EAAI/kK,EAAMxE,EAAMypK,GAC1D8zC,EAAiB,MADnB,CAIA,GAAIr1M,IAAoB47I,GAA2Bv2I,EAAO0U,QAAU1U,EAAO+hF,SAAW06E,GAAYzuH,YAAYguH,EAAIrsK,IAAa8sK,GAAY3c,QAAQkc,EAAI/2E,EAAYy5E,GAKjK,OAJAznK,EAAOM,EAAIwrD,OAAO9rD,EAAMynK,GACxB+wC,EAAiBx4M,GACjBooK,EAAYntK,KAAK+E,QACjB+4M,EAAiB,GAGnB,GAAIhwM,EAAOnL,SAAU,CACnB,IAAIoe,EAAQ28L,EAAer0B,EAAYtkL,GACvC,IAAK+I,EAAOzE,QAAU0X,EAEpB,YADA+8L,EAAiB,IAIjBr1M,GAAoB47I,IAA2BkmB,GAAY3c,QAAQkc,EAAI0C,EAAU/uK,KAAa8sK,GAAY3c,QAAQkc,EAAI/2E,EAAYy5E,KAAgBoxC,GAAkC,IAAlB74M,EAAK2a,UAA4C,IAA1B3a,EAAK+mF,UAAU1vF,QAAiD,QAAjC2I,EAAK+mF,UAAU3nE,WAAW,IAAkBw9I,GAAY58J,IAAW+I,EAAOzE,QAAWhE,EAAI02C,QAAQh3C,IAQ3T+4M,EAAiB,EACjBT,GAAOtkN,GAAMooB,KAAKpc,EAAKqM,YAAaisD,GAChCgnF,IACF57I,EAAkBizM,GAEpBoC,EAAiB,IAZZA,IACHA,EAAiBz4M,EAAI1M,MAAMklN,GAAS,GACpC94M,EAAKvH,WAAW3B,aAAaiiN,EAAgB/4M,GAC7CooK,EAAYntK,KAAK89M,IAEnBA,EAAep0M,YAAY3E,MAU/Bs4M,GAAO5wM,EAAO4wD,OAEK,IAAjBvvD,EAAO0sM,OACT6C,GAAOlwC,GAAa,SAAUpoK,GAC5B,IAAIs4D,EAAU,SAAUt4D,GACA,MAAlBA,EAAKtH,UACP8/M,EAAiBx4M,EAAM+I,GAEzBuvM,GAAOtkN,GAAMooB,KAAKpc,EAAKqM,YAAaisD,IAEtCA,EAAQt4D,MAGZs4M,GAAOlwC,GAAa,SAAUpoK,GAC5B,IAAIg5M,EACAC,EAAgB,SAAUj5M,GAC5B,IAAI6K,EAAQ,EAMZ,OALAytM,GAAOt4M,EAAKqM,YAAY,SAAUrM,GAC3BwlK,GAAYb,iBAAiB3kK,IAAUwkK,GAAUt5G,eAAelrD,IACnE6K,OAGGA,GAELquM,EAAsB,SAAUhiN,GAClC,IAAIosD,GAAQ,EAOZ,OANAg1J,GAAOphN,EAAKmV,YAAY,SAAUrM,GAChC,GAAIu4M,GAAgBv4M,GAElB,OADAsjD,EAAQtjD,GACD,KAGJsjD,GAEL61J,EAAc,SAAUn5M,GAC1B,IAAIsjD,EAAO1vD,EAQX,OAPA0vD,EAAQ41J,EAAoBl5M,GACxBsjD,IAAUkhH,GAAUt5G,eAAe5H,IAAU8hI,GAAYX,UAAUnkL,EAAKgjD,EAAOv6C,KACjFnV,EAAQ0M,EAAI1M,MAAM0vD,GAAO,GACzBk1J,EAAiB5kN,GACjB0M,EAAIrK,QAAQrC,EAAOoM,GAAM,GACzBM,EAAImJ,OAAO65C,EAAO,IAEb1vD,GAASoM,GAElBg5M,EAAaC,EAAcj5M,KACtBooK,EAAY/wK,OAAS,IAAMiJ,EAAI02C,QAAQh3C,IAAyB,IAAfg5M,GAIlDjwM,EAAOzE,QAAUyE,EAAO+hF,WACrB/hF,EAAOgmH,OAAwB,IAAfiqF,IACnBh5M,EAAOm5M,EAAYn5M,IAErBq4M,GAAaH,kBAAkBnzC,EAAIuf,EAAYrf,EAAMjlK,GACrDq4M,GAAaF,iBAAiBpzC,EAAIh8J,EAAQvN,EAAMypK,EAAMjlK,GACtDq4M,GAAaT,gCAAgCt3M,EAAKyI,EAAQk8J,EAAMjlK,GAChEq4M,GAAaR,YAAYv3M,EAAKyI,EAAQk8J,EAAMjlK,GAC5Cq4M,GAAaP,cAAcx3M,EAAKyI,EAAQk8J,EAAMjlK,IAX9CM,EAAImJ,OAAOzJ,EAAM,OAevB,GAAoD,UAAhDM,EAAIorD,mBAAmBzrD,EAAUC,YAUrC,GAAI6I,EAAQ,CACV,GAAI/I,EACEA,EAAK2a,SACFg+L,EAAer0B,EAAYtkL,KAC9Bsa,EAAMha,EAAIob,YACVpB,EAAI8xD,eAAepsE,GACnBsa,EAAIivC,YAAYvpD,GAChB44M,EAAct4M,EAAKumK,GAAYH,UAAU3B,EAAIzqJ,EAAKgqK,GAAa,MAAM,IAGvEs0B,EAAct4M,EAAKN,EAAM,MAAM,QAGjC,GAAK2C,GAAgBoG,EAAOzE,SAAUhE,EAAIE,OAAO,+CAA+CnJ,OAe9FkvL,GAAiBxhB,EAAIvpK,EAAMypK,OAf2E,CACtG,IAAIm0C,EAAar0C,EAAG9kK,UAAUC,UACzB6kK,EAAG1wK,SAAS4zD,oBAAqBq8H,EAAW,GAAGa,cAAiB7kL,EAAIyL,UAAUqtM,EAAY94M,EAAI02C,UACjG3tC,GAAY07J,EAAIuf,EAAW,GAAGa,cAEhCpgB,EAAG9kK,UAAU0b,OAAOyxJ,GAAgBD,UAAUpI,EAAG9kK,UAAUyc,WAC3Du7B,EAAWwkH,GAAYL,sBAAsB2I,EAAG9kK,WAAW,GAC3D24M,EAAct4M,EAAKumK,GAAYH,UAAU3B,EAAI9kK,EAAUyc,SAAU4nK,IAC7Dv7K,EAAOuO,QACT+gM,GAAaV,uBAAuBr3M,EAAKyI,EAAQk8J,EAAMm0C,GAEzDn5M,EAAUiqD,eAAejS,GACzButH,GAAYd,UAAUpkK,EAAKL,EAAWA,EAAUyc,UAChDqoJ,EAAGx7J,cAKPurM,GAAM9uI,YAAYxqE,EAAMupK,QAzC1B,CACE/kK,EAAOC,EAAUC,UACjB,IAAK,IAAItI,EAAI,EAAG4zE,EAAI84G,EAAWjtL,OAAQO,EAAI4zE,EAAG5zE,IAC5C,GAAI0sL,EAAW1sL,GAAGk/M,iBAAmBx2M,EAAIiI,GAAGvI,EAAMskL,EAAW1sL,GAAGgG,UAE9D,YADA46M,EAAiBx4M,EAAMskL,EAAW1sL,MAwCtCyhN,GAAc,CAAEhwM,YAAaA,IAE7BiwM,GAAStlN,GAAMkP,KACfq2M,GAAU,SAAUC,EAAkBplN,GACxC,IAAIqlN,EAAiB,GACrBD,EAAiB9lN,IAAI,IACrBU,EAAO4O,GAAG,cAAc,SAAUR,GAChC,IAAI0tD,EAAUs1G,GAAY79J,WAAWvT,EAAOkM,IAAKkC,EAAErK,SAC/CuhN,EAAiB,GACrBxpJ,EAAUl8D,GAAMooB,KAAK8zC,GAAS,SAAUlwD,GACtC,OAAyB,IAAlBA,EAAK2a,WAAmB3a,EAAKuM,aAAa,qBAEnD+sM,GAAOE,EAAiB/lN,OAAO,SAAUgI,EAAWsN,GAClDuwM,GAAOppJ,GAAS,SAAUlwD,GACxB,OAAI5L,EAAOwO,UAAU6+G,UAAUzhH,EAAM+I,EAAQ,GAAItN,EAAUmpL,UACpD60B,EAAe1wM,KAClBuwM,GAAO79M,GAAW,SAAU9D,GAC1BA,GAAS,EAAM,CACbqI,KAAMA,EACN+I,OAAQA,EACRmnD,QAASA,OAGbupJ,EAAe1wM,GAAUtN,GAE3Bi+M,EAAe3wM,GAAUtN,GAClB,IAEL2pL,GAAYf,iCAAiCjwL,EAAQ4L,EAAM+I,SAA/D,QAKJuwM,GAAOG,GAAgB,SAAUh+M,EAAWsN,GACrC2wM,EAAe3wM,YACX0wM,EAAe1wM,GACtBuwM,GAAO79M,GAAW,SAAU9D,GAC1BA,GAAS,EAAO,CACdqI,KAAMwC,EAAErK,QACR4Q,OAAQA,EACRmnD,QAASA,eAOjBypJ,GAAe,SAAUH,EAAkBzwI,EAASpxE,EAAUitL,GAChE,IAAIg1B,EAAoBJ,EAAiB/lN,MACzC6lN,GAAOvwI,EAAQtzD,MAAM,MAAM,SAAU1M,GAC9B6wM,EAAkB7wM,KACrB6wM,EAAkB7wM,GAAU,GAC5B6wM,EAAkB7wM,GAAQ67K,QAAUA,GAEtCg1B,EAAkB7wM,GAAQ9N,KAAKtD,MAEjC6hN,EAAiB9lN,IAAIkmN,IAEnBC,GAAgB,SAAUzlN,EAAQ0lN,EAAmB/wI,EAASpxE,EAAUitL,GAC1C,OAA5Bk1B,EAAkBrmN,OACpB8lN,GAAQO,EAAmB1lN,GAE7BulN,GAAaG,EAAmB/wI,EAASpxE,EAAUitL,IAEjDm1B,GAAgB,CAAEF,cAAeA,IAEjC53G,GAAQ,SAAU3hG,GACpB,IAAIyoE,EAAU,CACZixI,UAAW,CAAC,CACRp8M,SAAU,QACV0Z,OAAQ,CAAE2iM,cAAe,SAE7BC,aAAc,CAAC,CACXt8M,SAAU,QACV0Z,OAAQ,CAAE2iM,cAAe,YAE7BE,aAAc,CAAC,CACXv8M,SAAU,QACV0Z,OAAQ,CAAE2iM,cAAe,YAE7BG,UAAW,CACT,CACEx8M,SAAU,eACV4c,WAAW,EACX5e,QAAS,aACTk7M,iBAAiB,EACjBuD,QAAS,yBAEX,CACEz8M,SAAU,mDACV0Z,OAAQ,CAAEgjM,UAAW,QACrB/1B,SAAS,EACT81B,SAAS,EACTl1B,aAAc,OAEhB,CACEvnL,SAAU,YACV4c,WAAW,EACXlD,OAAQ,CAAE+gI,MAAO,QACjBgiE,QAAS,0BAGbE,YAAa,CACX,CACE38M,SAAU,mDACV0Z,OAAQ,CAAEgjM,UAAW,UACrB/1B,SAAS,EACT81B,QAAS,wBACTl1B,aAAc,OAEhB,CACEvnL,SAAU,eACV4c,WAAW,EACX5e,QAAS,eACTk7M,iBAAiB,EACjBuD,QAAS,yBAEX,CACEz8M,SAAU,MACV4c,WAAW,EACXlD,OAAQ,CACNkjM,QAAS,QACT5sK,WAAY,OACZC,YAAa,QAEfwsK,SAAS,GAEX,CACEz8M,SAAU,QACV4c,WAAW,EACXlD,OAAQ,CACNs2B,WAAY,OACZC,YAAa,QAEfwsK,QAAS,0BAGbI,WAAY,CACV,CACE78M,SAAU,eACV4c,WAAW,EACX5e,QAAS,cACTk7M,iBAAiB,EACjBuD,QAAS,yBAEX,CACEz8M,SAAU,mDACV0Z,OAAQ,CAAEgjM,UAAW,SACrB/1B,SAAS,EACT81B,QAAS,wBACTl1B,aAAc,OAEhB,CACEvnL,SAAU,YACV4c,WAAW,EACXlD,OAAQ,CAAE+gI,MAAO,SACjBgiE,QAAS,0BAGbK,aAAc,CAAC,CACX98M,SAAU,mDACV0Z,OAAQ,CAAEgjM,UAAW,WACrB/1B,SAAS,EACTY,aAAc,MACdk1B,QAAS,0BAEbM,KAAM,CACJ,CACEr2M,OAAQ,SACRmF,OAAQ,OAEV,CACEnF,OAAQ,OACRgT,OAAQ,CAAEsjM,WAAY,SAExB,CACEt2M,OAAQ,IACRmF,OAAQ,QAGZoxM,OAAQ,CACN,CACEv2M,OAAQ,KACRmF,OAAQ,OAEV,CACEnF,OAAQ,OACRgT,OAAQ,CAAEwjM,UAAW,WAEvB,CACEx2M,OAAQ,IACRmF,OAAQ,QAGZsxM,UAAW,CACT,CACEz2M,OAAQ,OACRgT,OAAQ,CAAEu/L,eAAgB,aAC1B9nF,OAAO,GAET,CACEzqH,OAAQ,IACRmF,OAAQ,QAGZuxM,cAAe,CACb,CACE12M,OAAQ,OACRgT,OAAQ,CAAEu/L,eAAgB,gBAC1B9nF,OAAO,GAET,CACEzqH,OAAQ,SACRmF,OAAQ,QAGZwxM,UAAW,CACT32M,OAAQ,OACRgT,OAAQ,CAAEtO,MAAO,UACjBysM,OAAO,EACPO,gBAAgB,EAChBiC,oBAAoB,GAEtBiD,YAAa,CACX52M,OAAQ,OACRgT,OAAQ,CAAEspG,gBAAiB,UAC3B60F,OAAO,EACPO,gBAAgB,EAChBiC,oBAAoB,GAEtBkD,SAAU,CACR72M,OAAQ,OACRzB,QAAQ,EACRyU,OAAQ,CAAEszK,WAAY,UACtBqtB,oBAAoB,GAEtB3jM,SAAU,CACRhQ,OAAQ,OACRzB,QAAQ,EACRyU,OAAQ,CAAEozK,SAAU,UACpButB,oBAAoB,GAEtBmD,eAAgB,CACd92M,OAAQ,OACRzI,WAAY,CAAE2yC,MAAO,WAEvB6sK,WAAY,CACV59L,MAAO,aACPqtE,QAAS,EACTrhF,OAAQ,OAEV6xM,UAAW,CAAEh3M,OAAQ,OACrBi3M,YAAa,CAAEj3M,OAAQ,OACvB3L,KAAM,CAAE2L,OAAQ,QAChBwQ,KAAM,CACJxQ,OAAQ,IACR1G,SAAU,IACV6L,OAAQ,MACRgM,OAAO,EACP8uC,MAAM,EACNsgI,QAAS,WACP,OAAO,GAET4zB,SAAU,SAAUp8M,EAAKqpC,EAAKu/H,GAC5BjxK,GAAMkP,KAAK+hK,GAAM,SAAUzxK,EAAOgD,GAChC8J,EAAIC,UAAUlE,EAAK7F,EAAKhD,QAI9BgoN,aAAc,CACZ,CACE59M,SAAU,gFACV6L,OAAQ,MACRgM,OAAO,EACPmxJ,QAAQ,EACRH,cAAc,EACdliH,MAAM,GAER,CACE3mD,SAAU,OACV/B,WAAY,CACV,QACA,SAEF4N,OAAQ,QACRgM,OAAO,EACPmxJ,QAAQ,EACRriH,MAAM,GAER,CACE3mD,SAAU,IACV/B,WAAY,CACV,QACA,SAEF4Z,OAAO,EACPmxJ,QAAQ,EACRriH,MAAM,KAUZ,OANAvwD,GAAMkP,KAAK,qDAAqDuS,MAAM,OAAO,SAAUja,GACrFutE,EAAQvtE,GAAQ,CACdiiB,MAAOjiB,EACPiO,OAAQ,UAGLs/D,GAEL0yI,GAAiB,CAAEhoN,IAAKwuG,IAE5B,SAASy5G,GAAgBtnN,GACvB,IAAI20E,EAAU,GACVt1E,EAAM,SAAU+H,GAClB,OAAOA,EAAOutE,EAAQvtE,GAAQutE,GAE5BtmE,EAAW,SAAUjH,EAAMuN,GACzBvN,IACkB,kBAATA,EACTxH,GAAMkP,KAAK1H,GAAM,SAAUuN,EAAQvN,GACjCiH,EAASjH,EAAMuN,OAGjBA,EAASA,EAAO1R,OAAS0R,EAAS,CAACA,GACnC/U,GAAMkP,KAAK6F,GAAQ,SAAUA,GACA,qBAAhBA,EAAOw7C,OAChBx7C,EAAOw7C,MAAQx7C,EAAOnL,UAEI,qBAAjBmL,EAAO0M,QAChB1M,EAAO0M,OAAS1M,EAAOnL,UAAYmL,EAAOzE,QAEf,qBAAlByE,EAAOU,QAA0BV,EAAOnL,WAAamL,EAAOzE,SACrEyE,EAAOU,OAAS,QAEdV,EAAOnL,UAAYmL,EAAOzE,SAC5ByE,EAAOytM,OAAQ,EACfztM,EAAO09J,cAAe,GAEM,kBAAnB19J,EAAOnN,UAChBmN,EAAOnN,QAAUmN,EAAOnN,QAAQ6Z,MAAM,WAG1CszD,EAAQvtE,GAAQuN,KAIlB4yM,EAAa,SAAUngN,GAIzB,OAHIA,GAAQutE,EAAQvtE,WACXutE,EAAQvtE,GAEVutE,GAIT,OAFAtmE,EAASg5M,GAAehoN,IAAIW,EAAOkM,MACnCmC,EAASrO,EAAOC,SAAS00E,SAClB,CACLt1E,IAAKA,EACLgP,SAAUA,EACVk5M,WAAYA,GAIhB,IAAIC,GAAS5nN,GAAMkP,KACf5C,GAAM6uJ,GAAWv6J,IACjBinN,GAAuB,SAAUC,EAAU1nN,GAC7C,IAAIiI,EAAK4tC,EAAM+R,EACXvL,EAASr8C,GAAUA,EAAOq8C,QAAU2zG,GAAO,IAC3C0jB,EAAW,SAAUzrK,EAAK4tC,GACxBA,EAAKruC,QAAQvE,QACfiJ,GAAI44E,SAAS78E,EAAK4tC,EAAKruC,QAAQF,KAAK,MAEtC4E,GAAIsV,WAAWvZ,EAAK4tC,EAAKjqB,QAEvBuC,EAAgB,SAAUw5L,GAC5B,IAAI1/M,EAQJ,OAPA4tC,EAAwB,kBAAV8xK,EAAqB,CACjCvgN,KAAMugN,EACNngN,QAAS,GACTokB,MAAO,IACL+7L,EACJ1/M,EAAMiE,GAAIiE,OAAO0lC,EAAKzuC,MACtBssK,EAASzrK,EAAK4tC,GACP5tC,GAEL2/M,EAAoB,SAAU3/M,EAAKskD,GACrC,IAAInlD,EAAsB,kBAARa,EAAmBA,EAAI3D,SAASic,cAAgBtY,EAC9D4/M,EAAUxrK,EAAOg3G,eAAejsJ,GAChC4sJ,EAAkB6zD,GAAWA,EAAQ7zD,gBACzC,SAAIA,IAAmBA,EAAgB/wJ,UAC9BspD,IAA4D,IAA/C3sD,GAAMkuC,QAAQkmH,EAAiBznG,GAAoBA,EAAYynG,EAAgB,KAKnG8zD,EAAa,SAAU7/M,EAAKy/M,EAAU7wJ,GACxC,IAAI3yD,EAAQ6jN,EAAiBC,EACzBlwH,EAAW4vH,EAASzkN,OAAS,GAAKykN,EAAS,GAC3CO,EAAenwH,GAAYA,EAAS1wF,KAExC,GADA4gN,EAAiBJ,EAAkB3/M,EAAKggN,GACpCD,EACEC,IAAiBD,GACnBD,EAAkBL,EAAS,GAC3BA,EAAWA,EAASlhN,MAAM,IAE1BuhN,EAAkBC,OAEf,GAAIlwH,EACTiwH,EAAkBL,EAAS,GAC3BA,EAAWA,EAASlhN,MAAM,QACrB,IAAKqwD,EACV,OAAO5uD,EAgBT,OAdI8/M,IACF7jN,EAASiqB,EAAc45L,GACvB7jN,EAAOqM,YAAYtI,IAEjB4uD,IACG3yD,IACHA,EAASgI,GAAIiE,OAAO,OACpBjM,EAAOqM,YAAYtI,IAErBrI,GAAMkP,KAAK+nD,GAAU,SAAUY,GAC7B,IAAIywJ,EAAa/5L,EAAcspC,GAC/BvzD,EAAOxB,aAAawlN,EAAYjgN,OAG7B6/M,EAAW5jN,EAAQwjN,EAAUK,GAAmBA,EAAgBlxJ,WAEzE,OAAI6wJ,GAAYA,EAASzkN,QACvB4yC,EAAO6xK,EAAS,GAChBz/M,EAAMkmB,EAAc0nB,GACpB+R,EAAW17C,GAAIiE,OAAO,OACtBy3C,EAASr3C,YAAYu3M,EAAW7/M,EAAKy/M,EAASlhN,MAAM,GAAIqvC,EAAKghB,WACtDjP,GAEA,IAGPugK,GAAiB,SAAU3+M,EAAUxJ,GACvC,OAAOynN,GAAqBW,GAAc5+M,GAAWxJ,IAEnDqoN,GAAoB,SAAUxyK,GAChC,IAAIxkC,EACA4L,EAAM,CACRzV,QAAS,GACTokB,MAAO,IA4BT,OA1BAiqB,EAAO54B,EAAIzT,SAAW5J,GAAMsP,KAAK2mC,GACpB,MAATA,IACFxkC,EAAUwkC,EAAKh0C,QAAQ,6CAA6C,SAAUymN,EAAI9e,EAAIC,EAAI8e,EAAIC,GAC5F,OAAQhf,GACR,IAAK,IACHvsL,EAAI2O,MAAMppB,GAAKinM,EACf,MACF,IAAK,IACHxsL,EAAIzV,QAAQX,KAAK4iM,GACjB,MACF,IAAK,KACkF,IAAjF7pM,GAAMkuC,QAAQ,8CAA8CzsB,MAAM,KAAMooL,KAC1ExsL,EAAI2O,MAAM69K,GAAMA,GAElB,MAEF,GAAW,MAAP8e,EAAY,CACd,IAAI7lM,EAAI8lM,EAAGrmN,MAAM,8BACbugB,IACFzF,EAAI2O,MAAMlJ,EAAE,IAAMA,EAAE,IAGxB,MAAO,OAGXzF,EAAI7V,KAAOiK,GAAW,MACf4L,GAELmrM,GAAgB,SAAU5+M,GAC5B,OAAKA,GAAgC,kBAAbA,GAGxBA,EAAWA,EAAS6X,MAAM,WAAW,GACrC7X,EAAWA,EAAS3H,QAAQ,sBAAuB,MAC5CjC,GAAMgC,IAAI4H,EAAS6X,MAAM,4BAA4B,SAAUw0B,GACpE,IAAIghB,EAAWj3D,GAAMgC,IAAIi0C,EAAKx0B,MAAM,gBAAiBgnM,IACjDprM,EAAM45C,EAAS6yB,MAInB,OAHI7yB,EAAS5zD,SACXga,EAAI45C,SAAWA,GAEV55C,KACN0qB,WAXM,IAaPwX,GAAa,SAAUn/C,EAAQ2U,GACjC,IAAIvN,EAAMqhN,EAAaC,EAAY7rM,EACd8rM,EAAgBC,EAAjCC,EAAa,GAEjB,GADAD,EAAgB5oN,EAAOC,SAAS6oN,gBACV,IAAlBF,EACF,MAAO,GAEoB,kBAAlBA,IACTA,EAAgB,+IAElB,IAAIG,EAAa,SAAUn4L,GACzB,OAAOA,EAAI/uB,QAAQ,UAAW,KAEhC,GAAsB,kBAAX8S,EAAqB,CAE9B,GADAA,EAAS3U,EAAOwO,UAAUnP,IAAIsV,IACzBA,EACH,OAEFA,EAASA,EAAO,GAElB,MAAI,YAAaA,IACfi0M,EAAgBj0M,EAAOsxM,SACD,IAAlB2C,GACK,IAGXxhN,EAAOuN,EAAO0U,OAAS1U,EAAOzE,QAAU,OACxC2M,EAAQurM,GAAczzM,EAAOnL,UACzBqT,EAAM5Z,QACH4Z,EAAM,GAAGzV,OACZyV,EAAM,GAAGzV,KAAOA,GAElBA,EAAOuN,EAAOnL,SACdi/M,EAAchB,GAAqB5qM,EAAO7c,IAE1CyoN,EAAchB,GAAqB,CAACrgN,GAAOpH,GAE7C0oN,EAAax8M,GAAIE,OAAOhF,EAAMqhN,GAAa,IAAMA,EAAYvwM,WAC7DsvM,GAAO7yM,EAAOuO,QAAQ,SAAU9jB,EAAOgI,GACrChI,EAAQ2pN,EAAW3pN,GACfA,GACF8M,GAAIkqD,SAASsyJ,EAAYthN,EAAMhI,MAGnCooN,GAAO7yM,EAAOlN,YAAY,SAAUrI,EAAOgI,GACzChI,EAAQ2pN,EAAW3pN,GACfA,GACF8M,GAAIC,UAAUu8M,EAAYthN,EAAMhI,MAGpCooN,GAAO7yM,EAAOnN,SAAS,SAAUpI,GAC/BA,EAAQ2pN,EAAW3pN,GACd8M,GAAIqG,SAASm2M,EAAYtpN,IAC5B8M,GAAI44E,SAAS4jI,EAAYtpN,MAG7BY,EAAO2hC,KAAK,kBACZz1B,GAAIskE,UAAUi4I,EAAa,CACzB5wK,SAAU,WACV1U,MAAO,QAETnjC,EAAOoU,UAAU7D,YAAYk4M,GAC7BE,EAAiBz8M,GAAI+oC,SAASj1C,EAAOoU,UAAW,YAAY,GAC5Du0M,EAAiB,MAAMxkN,KAAKwkN,GAAkBn3M,SAASm3M,EAAgB,IAAM,EAC7EnB,GAAOoB,EAAcvnM,MAAM,MAAM,SAAUja,GACzC,IAAIhI,EAAQ8M,GAAI+oC,SAASyzK,EAAYthN,GAAM,GAC3C,IAAa,qBAATA,IAA+B,oCAAoCjD,KAAK/E,KAC1EA,EAAQ8M,GAAI+oC,SAASj1C,EAAOoU,UAAWhN,GAAM,GACN,YAAnC8E,GAAI0mE,MAAMxzE,GAAOmhB,kBAIV,UAATnZ,GACqC,YAAnC8E,GAAI0mE,MAAMxzE,GAAOmhB,eADvB,CAKA,GAAa,cAATnZ,GACE,QAAQjD,KAAK/E,GAAQ,CACvB,GAAuB,IAAnBupN,EACF,OAEF,IAAIK,EAAWzzL,WAAWn2B,IAAU,KAAK+E,KAAK/E,GAAS,IAAM,GAC7DA,EAAQ4pN,EAAWL,EAAiB,KAG3B,WAATvhN,GAAqBhI,IACvBypN,GAAc,kBAEhBA,GAAczhN,EAAO,IAAMhI,EAAQ,QAErCY,EAAO2hC,KAAK,uBACZz1B,GAAImJ,OAAOozM,GACJI,IAELI,GAAU,CACZ9pK,WAAYA,GACZipK,cAAeA,GACfD,eAAgBA,IAGd15M,GAAS,SAAUzO,EAAQ20E,EAASvtE,EAAMypK,EAAMjlK,GAClD,IAAI0lC,EAAMqjC,EAAQt1E,IAAI+H,IAClB4pL,GAAY7uL,MAAMnC,EAAQoH,EAAMypK,EAAMjlK,IAAY,WAAY0lC,EAAI,KAAOA,EAAI,GAAG7iC,OAGlFw2M,GAAYhwM,YAAYjV,EAAQoH,EAAMypK,EAAMjlK,GAF5C+2M,GAAattM,OAAOrV,EAAQoH,EAAMypK,EAAMjlK,IAKxCs9M,GAAe,CAAEz6M,OAAQA,IAEzB06M,GAAU,SAAUnpN,GACtBA,EAAOs0E,YAAY,SAAU,GAAI,QACjCt0E,EAAOs0E,YAAY,SAAU,GAAI,UACjCt0E,EAAOs0E,YAAY,SAAU,GAAI,aACjC,IAAK,IAAI9wE,EAAI,EAAGA,GAAK,EAAGA,IACtBxD,EAAOs0E,YAAY,UAAY9wE,EAAG,GAAI,CACpC,eACA,EACA,IAAMA,IAGVxD,EAAOs0E,YAAY,WAAY,GAAI,CACjC,eACA,EACA,MAEFt0E,EAAOs0E,YAAY,WAAY,GAAI,CACjC,eACA,EACA,QAEFt0E,EAAOs0E,YAAY,WAAY,GAAI,CACjC,eACA,EACA,aAGA80I,GAAkB,CAAEz6M,MAAOw6M,IAE/B,SAASE,GAAWrpN,GAClB,IAAI20E,EAAU2yI,GAAetnN,GACzB0lN,EAAoBxmN,GAAK,MAG7B,OAFAkqN,GAAgBz6M,MAAM3O,GACtB8yE,GAAQ9yE,GACD,CACLX,IAAKs1E,EAAQt1E,IACbgP,SAAUsmE,EAAQtmE,SAClBk5M,WAAY5yI,EAAQ4yI,WACpBtgN,MAAO0R,EAAMssM,GAAYhwM,YAAajV,GACtCqV,OAAQsD,EAAMgqM,GAAattM,OAAQrV,GACnCyO,OAAQkK,EAAMuwM,GAAaz6M,OAAQzO,EAAQ20E,GAC3CxyE,MAAOwW,EAAMq4K,GAAY7uL,MAAOnC,GAChC0wL,SAAU/3K,EAAMq4K,GAAYN,SAAU1wL,GACtCqtH,UAAW10G,EAAMq4K,GAAY3jE,UAAWrtH,GACxC8wL,SAAUn4K,EAAMq4K,GAAYF,SAAU9wL,GACtCylN,cAAe9sM,EAAMgtM,GAAcF,cAAezlN,EAAQ0lN,GAC1DvmK,WAAYxmC,EAAMswM,GAAQ9pK,WAAYn/C,IAI1C,IAAIspN,GAAmBvnN,OAAOC,UAAUK,eACpCsxH,GAAY,SAAU16E,EAAK5E,GAC7B,OAAOA,GAEL6E,GAAY,SAAUC,GACxB,OAAO,WAEL,IADA,IAAIC,EAAU,IAAIryC,MAAM/D,UAAUC,QACzBO,EAAI,EAAGA,EAAI41C,EAAQn2C,OAAQO,IAClC41C,EAAQ51C,GAAKR,UAAUQ,GAEzB,GAAuB,IAAnB41C,EAAQn2C,OACV,MAAM,IAAIkX,MAAM,4BAGlB,IADA,IAAIhX,EAAM,GACD4C,EAAI,EAAGA,EAAIqzC,EAAQn2C,OAAQ8C,IAAK,CACvC,IAAIszC,EAAYD,EAAQrzC,GACxB,IAAK,IAAI3D,KAAOi3C,EACViwK,GAAiBpnN,KAAKm3C,EAAWj3C,KACnCe,EAAIf,GAAO+2C,EAAOh2C,EAAIf,GAAMi3C,EAAUj3C,KAI5C,OAAOe,IAGPm2C,GAAQJ,GAAUy6E,IAElBtlH,GAAW,SAAUk7M,EAAYtpN,EAAUiM,GAC7Cq9M,EAAWtmJ,mBAAmB,qBAAqB,SAAU3vD,EAAOlM,GAClE,IAAsBwE,EAAlBpI,EAAI8P,EAAMrQ,OACd,MAAOO,IACLoI,EAAO0H,EAAM9P,GACboI,EAAKqD,KAAK,WAAYrD,EAAKnE,WAAW7F,IAAI,sBAC1CgK,EAAKqD,KAAK7H,EAAM,SAGpBmiN,EAAWtmJ,mBAAmB,kBAAkB,SAAU3vD,EAAOlM,GAC/D,IAAsBwE,EAAMxM,EAAxBoE,EAAI8P,EAAMrQ,OACVumN,EAAe,YAAcpiN,EAC7BiuJ,EAAep1J,EAASq1J,cACxBC,EAAoBt1J,EAASu1J,oBACjC,MAAOhyJ,IACLoI,EAAO0H,EAAM9P,GACbpE,EAAQwM,EAAKnE,WAAW7F,IAAI4nN,QACdlvM,IAAVlb,GACFwM,EAAKqD,KAAK7H,EAAMhI,EAAM6D,OAAS,EAAI7D,EAAQ,MAC3CwM,EAAKqD,KAAKu6M,EAAc,QAExBpqN,EAAQwM,EAAKnE,WAAW7F,IAAIwF,GACf,UAATA,EACFhI,EAAQ8M,EAAImxC,eAAenxC,EAAIkxC,WAAWh+C,GAAQwM,EAAKxE,MAC9CiuJ,IACTj2J,EAAQi2J,EAAanzJ,KAAKqzJ,EAAmBn2J,EAAOgI,EAAMwE,EAAKxE,OAEjEwE,EAAKqD,KAAK7H,EAAMhI,EAAM6D,OAAS,EAAI7D,EAAQ,UAIjDmqN,EAAWtmJ,mBAAmB,SAAS,SAAU3vD,GAC/C,IAAsB1H,EAAMxM,EAAxBoE,EAAI8P,EAAMrQ,OACd,MAAOO,IACLoI,EAAO0H,EAAM9P,GACbpE,EAAQwM,EAAKqD,KAAK,SACd7P,IACFA,EAAQwM,EAAKqD,KAAK,SAASpN,QAAQ,8BAA+B,IAClE+J,EAAKqD,KAAK,QAAS7P,EAAM6D,OAAS,EAAI7D,EAAQ,UAIpDmqN,EAAWtmJ,mBAAmB,iBAAiB,SAAU3vD,EAAOlM,EAAMR,GACpE,IAAsBgF,EAAlBpI,EAAI8P,EAAMrQ,OACd,MAAOO,IAEL,GADAoI,EAAO0H,EAAM9P,GACgC,aAAzCoI,EAAKnE,WAAW7F,IAAI,mBAAoCgF,EAAK6iN,QAAS,CACxE,IAAIC,EAAcruM,EAAO/U,KAAKsF,EAAKsM,YAAYwC,QAAO,SAAUxC,GAC9D,OAAQ6nJ,GAAKF,OAAO3nJ,EAAW9Y,UAE7BsqN,EACF99M,EAAKs3D,SAELt3D,EAAKyJ,aAKbk0M,EAAW1nK,cAAc,YAAY,SAAUvuC,GAC7C,IAAsB1H,EAAlBpI,EAAI8P,EAAMrQ,OACd,MAAOO,IACLoI,EAAO0H,EAAM9P,GAAG0U,WACZtM,IACFA,EAAKxM,MAAQyvJ,GAASp8E,OAAO7mE,EAAKxM,WAIxCmqN,EAAW1nK,cAAc,gBAAgB,SAAUvuC,EAAOlM,GACxD,IAAsBwE,EAAMxM,EAAOqC,EAA/B+B,EAAI8P,EAAMrQ,OACViM,EAAO,SAAU9P,GACnB,OAAOA,EAAMyC,QAAQ,2BAA4B,MAAMA,QAAQ,qBAAsB,IAAIA,QAAQ,0HAA2H,IAAIA,QAAQ,4GAA6G,KAEvV,MAAO2B,IACLoI,EAAO0H,EAAM9P,GACbpE,EAAQwM,EAAKsM,WAAatM,EAAKsM,WAAW9Y,MAAQ,GACrC,WAATgI,GACF3F,EAAOmK,EAAKqD,KAAK,QACbxN,GACFmK,EAAKqD,KAAK,OAAiB,gBAATxN,EAAyB,KAAOA,EAAKI,QAAQ,SAAU,KAE3C,UAA5B5B,EAASi4K,gBAA8B94K,EAAM6D,OAAS,IACxD2I,EAAKsM,WAAW9Y,MAAQ,iBAAmB8P,EAAK9P,GAAS,aAG3B,UAA5Ba,EAASi4K,gBAA8B94K,EAAM6D,OAAS,IACxD2I,EAAKsM,WAAW9Y,MAAQ,YAAW8P,EAAK9P,GAAS,eAKzDmqN,EAAW1nK,cAAc,YAAY,SAAUvuC,GAC7C,IAAsB1H,EAAlBpI,EAAI8P,EAAMrQ,OACd,MAAOO,IACLoI,EAAO0H,EAAM9P,GACyB,IAAlCoI,EAAKxM,MAAM8I,QAAQ,YACrB0D,EAAKxE,KAAO,SACZwE,EAAKnK,KAAO,EACZmK,EAAKxM,MAAQwM,EAAKxM,MAAMyC,QAAQ,oBAAqB,KACH,IAAzC+J,EAAKxM,MAAM8I,QAAQ,oBAC5B0D,EAAKxE,KAAO,QACZwE,EAAKnK,KAAO,EACZmK,EAAK6wD,KAAM,EACX7wD,EAAKxM,MAAQujB,SAAS/W,EAAKxM,OAAO0mB,OAAO,QAI/CyjM,EAAW1nK,cAAc,uBAAuB,SAAUvuC,EAAOlM,GAC/D,IAAsBwE,EAAlBpI,EAAI8P,EAAMrQ,OACd,MAAOO,IACLoI,EAAO0H,EAAM9P,GACK,IAAdoI,EAAKnK,KACPmK,EAAKyJ,SACkB,IAAdzJ,EAAKnK,OACD,UAAT2F,GAAsB,SAAUwE,EAAKnE,WAAW7F,KAClDgK,EAAKqD,KAAK,OAAQ,YAK1Bs6M,EAAWtmJ,mBAAmB,iBAAiB,SAAU3vD,GACvDxE,EAAKwE,GAAO,SAAU1H,GACe,iBAA/BA,EAAKqD,KAAK,mBACRrD,EAAKkxC,QAAQysK,EAAWltK,OAAO+c,uBACjCxtD,EAAKyJ,SAELzJ,EAAKs3D,gBAKbqmJ,EAAWtmJ,mBAAmB,8GAAwH,SAAU3vD,EAAOlM,GACrK,IAAI5D,EAAI8P,EAAMrQ,OACd,MAAOO,IACL8P,EAAM9P,GAAGyL,KAAK7H,EAAM,UAItBuiN,GAAiB,SAAUxmJ,GAC7B,IAAIymJ,EAASC,EACTtnK,EAAO,SAAU32C,GACnB,OAAOA,GAAsB,OAAdA,EAAKxE,MAEtBwiN,EAAUzmJ,EAASzgB,UACfH,EAAKqnK,KACPC,EAAUD,EAAQr3H,KACdhwC,EAAKsnK,KACPD,EAAQv0M,SACRw0M,EAAQx0M,YAIVy0M,GAAuB,CACzBz7M,SAAUA,GACVs7M,eAAgBA,IAGdvmJ,GAAa,SAAUpjE,EAAQ4L,EAAMhF,GACvC,IAAImjN,EAAMnhM,EAAKohM,EACX99M,EAAMlM,EAAOkM,IAoBjB,OAnBAN,EAAOA,EAAKonC,WAAU,GACtB+2K,EAAO9qN,EAAW4E,SAAS85M,eACvBoM,EAAKnM,qBACPh1L,EAAMmhM,EAAKnM,mBAAmB,IAC9Bh+M,GAAMkP,KAAuB,SAAlBlD,EAAKtH,SAAsBsH,EAAKqM,WAAa,CAACrM,IAAO,SAAUA,GACxEgd,EAAIjb,KAAK4C,YAAYqY,EAAIyoK,WAAWzlL,GAAM,OAG1CA,EADoB,SAAlBA,EAAKtH,SACAskB,EAAIjb,KAAKuK,WAET0Q,EAAIjb,KAEbq8M,EAAS99M,EAAI0c,IACb1c,EAAI0c,IAAMA,GAEZ60C,GAAO0gI,eAAen+L,EAAQs5C,GAAM1yC,EAAM,CAAEgF,KAAMA,KAC9Co+M,IACF99M,EAAI0c,IAAMohM,GAELp+M,GAELq+M,GAAkB,SAAUjqN,EAAQ4G,GACtC,OAAO5G,GAAUA,EAAOikE,kBAAkB,gBAAkBr9D,EAAKsjN,WAE/DhmJ,GAAU,SAAUlkE,EAAQ4L,EAAMhF,GACpC,OAAOqjN,GAAgBjqN,EAAQ4G,GAAQw8D,GAAWpjE,EAAQ4L,EAAMhF,GAAQgF,GAEtEu+M,GAA0B,CAAEjmJ,QAASA,IAErCkmJ,GAAc,SAAUx+M,EAAMkqI,GAChChnI,EAAKgnI,GAAO,SAAU1uI,GACpBwE,EAAKqD,KAAK7H,EAAM,UAGhBijN,GAAuB,SAAU9pJ,EAAWr9C,EAAQi0K,GACtD52H,EAAU1e,cAAc,QAAQ,SAAUvuC,GACxCxE,EAAKwE,GAAO,SAAU1H,GACpB,IAAIs8C,EAAQhlC,EAAOpb,MAAM8D,EAAKqD,KAAK,UAC/B2F,EAAQhJ,EAAKqD,KAAK,SAClBq7M,EAAO1+M,EAAKqD,KAAK,QACjBmT,EAAOxW,EAAKqD,KAAK,QACjB2F,IACFszC,EAAMtzC,MAAQA,GAEZ01M,IACFpiK,EAAM,eAAiBoiK,GAErBloM,IACF8lC,EAAM,aAAeivI,EAAU3lL,SAAS5F,EAAKqD,KAAK,QAAS,IAAM,IAEnErD,EAAKxE,KAAO,OACZwE,EAAKqD,KAAK,QAASiU,EAAOlB,UAAUkmC,IACpCkiK,GAAYx+M,EAAM,CAChB,QACA,OACA,gBAKJ2+M,GAAwB,SAAUhqJ,EAAWr9C,GAC/Cq9C,EAAU1e,cAAc,UAAU,SAAUvuC,GAC1CxE,EAAKwE,GAAO,SAAU1H,GACpB,IAAIs8C,EAAQhlC,EAAOpb,MAAM8D,EAAKqD,KAAK,UACnCi5C,EAAM,mBAAqB,eAC3Bt8C,EAAKxE,KAAO,OACZwE,EAAKqD,KAAK,QAASiU,EAAOlB,UAAUkmC,WAItCsiK,GAAa,SAAUjqJ,EAAWtgE,GACpC,IAAIijB,EAAS8xF,KACT/0G,EAAS+hM,wBACXqoB,GAAqB9pJ,EAAWr9C,EAAQtjB,GAAM6iJ,QAAQxiJ,EAAS4hM,0BAEjE0oB,GAAsBhqJ,EAAWr9C,IAE/BzS,GAAa,SAAU8vD,EAAWtgE,GAChCA,EAASg9L,eACXutB,GAAWjqJ,EAAWtgE,IAGtBwqN,GAAe,CAAEp8M,SAAUoC,IAE3Bi6M,GAAqB,eACrBC,GAAa,CACf,QAAS,EACT,WAAY,EACZ,SAAU,EACV,MAAO,EACP,WAAY,GACZ,qBAAsB,IAEpBC,GAAS,SAAUh/M,EAAM9I,EAAMyvF,GACjC,IAAI96B,EACAvzD,EACAilJ,EAAY52D,EAAO,YAAc,aACjCyyD,EAAczyD,EAAO,OAAS,OAClC,GAAI3mF,EAAKu9I,GACP,OAAOv9I,EAAKu9I,GAEd,GAAIv9I,IAAS9I,EAAM,CAEjB,GADA20D,EAAU7rD,EAAKo5I,GACXvtF,EACF,OAAOA,EAET,IAAKvzD,EAAS0H,EAAK1H,OAAQA,GAAUA,IAAWpB,EAAMoB,EAASA,EAAOA,OAEpE,GADAuzD,EAAUvzD,EAAO8gJ,GACbvtF,EACF,OAAOA,IAKXozJ,GAAS,WACX,SAASriK,EAAKphD,EAAM3F,GAClB6B,KAAK8D,KAAOA,EACZ9D,KAAK7B,KAAOA,EACC,IAATA,IACF6B,KAAKmE,WAAa,GAClBnE,KAAKmE,WAAW7F,IAAM,IAiP1B,OA9OA4mD,EAAKr4C,OAAS,SAAU/I,EAAMwkB,GAC5B,IAAIhgB,EAAMkiF,EAEV,GADAliF,EAAO,IAAI48C,EAAKphD,EAAMujN,GAAWvjN,IAAS,GACtCwkB,EACF,IAAKkiE,KAAYliE,EACfhgB,EAAKqD,KAAK6+E,EAAUliE,EAAMkiE,IAG9B,OAAOliF,GAET48C,EAAKxmD,UAAUH,QAAU,SAAU+J,GACjC,IAAI1K,EAAOoC,KAMX,OALIsI,EAAK1H,QACP0H,EAAKyJ,SAEPnU,EAAK2B,OAAO+I,EAAM1K,GAClBA,EAAKmU,SACEnU,GAETsnD,EAAKxmD,UAAUiN,KAAO,SAAU7H,EAAMhI,GACpC,IACIwsB,EAAOpoB,EADPtC,EAAOoC,KAEX,GAAoB,kBAAT8D,EAAmB,CAC5B,IAAK5D,KAAK4D,EACRlG,EAAK+N,KAAKzL,EAAG4D,EAAK5D,IAEpB,OAAOtC,EAET,GAAI0qB,EAAQ1qB,EAAKuG,WAAY,CAC3B,QAAc6S,IAAVlb,EAAqB,CACvB,GAAc,OAAVA,EAAgB,CAClB,GAAIgI,KAAQwkB,EAAMhqB,IAAK,QACdgqB,EAAMhqB,IAAIwF,GACjB5D,EAAIooB,EAAM3oB,OACV,MAAOO,IACL,GAAIooB,EAAMpoB,GAAG4D,OAASA,EAEpB,OADAwkB,EAAQA,EAAM5kB,OAAOxD,EAAG,GACjBtC,EAIb,OAAOA,EAET,GAAIkG,KAAQwkB,EAAMhqB,IAAK,CACrB4B,EAAIooB,EAAM3oB,OACV,MAAOO,IACL,GAAIooB,EAAMpoB,GAAG4D,OAASA,EAAM,CAC1BwkB,EAAMpoB,GAAGpE,MAAQA,EACjB,YAIJwsB,EAAM/kB,KAAK,CACTO,KAAMA,EACNhI,MAAOA,IAIX,OADAwsB,EAAMhqB,IAAIwF,GAAQhI,EACX8B,EAET,OAAO0qB,EAAMhqB,IAAIwF,KAGrBohD,EAAKxmD,UAAUxC,MAAQ,WACrB,IAEIgE,EAAG4zE,EAAG0zI,EAAWC,EAAUC,EAF3B9pN,EAAOoC,KACP9D,EAAQ,IAAIgpD,EAAKtnD,EAAKkG,KAAMlG,EAAKO,MAErC,GAAIqpN,EAAY5pN,EAAKuG,WAAY,CAG/B,IAFAujN,EAAa,GACbA,EAAWppN,IAAM,GACZ4B,EAAI,EAAG4zE,EAAI0zI,EAAU7nN,OAAQO,EAAI4zE,EAAG5zE,IACvCunN,EAAWD,EAAUtnN,GACC,OAAlBunN,EAAS3jN,OACX4jN,EAAWA,EAAW/nN,QAAU,CAC9BmE,KAAM2jN,EAAS3jN,KACfhI,MAAO2rN,EAAS3rN,OAElB4rN,EAAWppN,IAAImpN,EAAS3jN,MAAQ2jN,EAAS3rN,OAG7CI,EAAMiI,WAAaujN,EAIrB,OAFAxrN,EAAMJ,MAAQ8B,EAAK9B,MACnBI,EAAM4hB,WAAalgB,EAAKkgB,WACjB5hB,GAETgpD,EAAKxmD,UAAUogE,KAAO,SAAUs0B,GAC9B,IAAIx1F,EAAOoC,KAGX,OAFApC,EAAKgD,OAAOrB,OAAO6zF,EAASx1F,GAC5Bw1F,EAAQtnF,OAAOlO,GACRA,GAETsnD,EAAKxmD,UAAUkhE,OAAS,WACtB,IACIt3D,EAAMud,EADNjoB,EAAOoC,KAEX,IAAKsI,EAAO1K,EAAKgX,WAAYtM,GAC3Bud,EAAOvd,EAAKud,KACZjoB,EAAK2B,OAAO+I,EAAM1K,GAAM,GACxB0K,EAAOud,EAETjoB,EAAKmU,UAEPmzC,EAAKxmD,UAAUqT,OAAS,WACtB,IAAInU,EAAOoC,KAAMY,EAAShD,EAAKgD,OAAQilB,EAAOjoB,EAAKioB,KAAMopE,EAAOrxF,EAAKqxF,KAoBrE,OAnBIruF,IACEA,EAAOgU,aAAehX,GACxBgD,EAAOgU,WAAaiR,EAChBA,IACFA,EAAKopE,KAAO,OAGdA,EAAKppE,KAAOA,EAEVjlB,EAAOw+C,YAAcxhD,GACvBgD,EAAOw+C,UAAY6vC,EACfA,IACFA,EAAKppE,KAAO,OAGdA,EAAKopE,KAAOA,EAEdrxF,EAAKgD,OAAShD,EAAKioB,KAAOjoB,EAAKqxF,KAAO,MAEjCrxF,GAETsnD,EAAKxmD,UAAUoN,OAAS,SAAUxD,GAChC,IACI0K,EADApV,EAAOoC,KAcX,OAZIsI,EAAK1H,QACP0H,EAAKyJ,SAEPiB,EAAOpV,EAAKwhD,UACRpsC,GACFA,EAAK6S,KAAOvd,EACZA,EAAK2mF,KAAOj8E,EACZpV,EAAKwhD,UAAY92C,GAEjB1K,EAAKwhD,UAAYxhD,EAAKgX,WAAatM,EAErCA,EAAK1H,OAAShD,EACP0K,GAET48C,EAAKxmD,UAAUa,OAAS,SAAU+I,EAAMq/M,EAASroN,GAC/C,IAAIsB,EAyBJ,OAxBI0H,EAAK1H,QACP0H,EAAKyJ,SAEPnR,EAAS+mN,EAAQ/mN,QAAUZ,KACvBV,GACEqoN,IAAY/mN,EAAOgU,WACrBhU,EAAOgU,WAAatM,EAEpBq/M,EAAQ14H,KAAKppE,KAAOvd,EAEtBA,EAAK2mF,KAAO04H,EAAQ14H,KACpB3mF,EAAKud,KAAO8hM,EACZA,EAAQ14H,KAAO3mF,IAEXq/M,IAAY/mN,EAAOw+C,UACrBx+C,EAAOw+C,UAAY92C,EAEnBq/M,EAAQ9hM,KAAKopE,KAAO3mF,EAEtBA,EAAKud,KAAO8hM,EAAQ9hM,KACpBvd,EAAK2mF,KAAO04H,EACZA,EAAQ9hM,KAAOvd,GAEjBA,EAAK1H,OAASA,EACP0H,GAET48C,EAAKxmD,UAAUqe,OAAS,SAAUjZ,GAChC,IACIwE,EADA1K,EAAOoC,KAEPk+I,EAAa,GACjB,IAAK51I,EAAO1K,EAAKgX,WAAYtM,EAAMA,EAAOg/M,GAAOh/M,EAAM1K,GACjD0K,EAAKxE,OAASA,GAChBo6I,EAAW36I,KAAK+E,GAGpB,OAAO41I,GAETh5F,EAAKxmD,UAAUmN,MAAQ,WACrB,IACImE,EAAO9P,EAAGoI,EADV1K,EAAOoC,KAEX,GAAIpC,EAAKgX,WAAY,CAEnB,IADA5E,EAAQ,GACH1H,EAAO1K,EAAKgX,WAAYtM,EAAMA,EAAOg/M,GAAOh/M,EAAM1K,GACrDoS,EAAMzM,KAAK+E,GAEbpI,EAAI8P,EAAMrQ,OACV,MAAOO,IACLoI,EAAO0H,EAAM9P,GACboI,EAAK1H,OAAS0H,EAAKsM,WAAatM,EAAK82C,UAAY92C,EAAKud,KAAOvd,EAAK2mF,KAAO,KAI7E,OADArxF,EAAKgX,WAAahX,EAAKwhD,UAAY,KAC5BxhD,GAETsnD,EAAKxmD,UAAU86C,QAAU,SAAUl5C,EAAUo0I,EAAYvtH,GACvD,IAC4BjnB,EAAG4D,EAD3BlG,EAAOoC,KACPsI,EAAO1K,EAAKgX,WAEhB,GADA8/H,EAAaA,GAAc,GACvBpsI,EACF,EAAG,CACD,GAAkB,IAAdA,EAAKnK,KAAY,CACnB,GAAImK,EAAKnE,WAAW7F,IAAI,kBACtB,SAEF,GAAIgC,EAASgI,EAAKxE,MAChB,OAAO,EAET5D,EAAIoI,EAAKnE,WAAWxE,OACpB,MAAOO,IAEL,GADA4D,EAAOwE,EAAKnE,WAAWjE,GAAG4D,KACb,SAATA,GAAyD,IAAtCA,EAAKc,QAAQ,qBAClC,OAAO,EAIb,GAAkB,IAAd0D,EAAKnK,KACP,OAAO,EAET,GAAkB,IAAdmK,EAAKnK,OAAeipN,GAAmBvmN,KAAKyH,EAAKxM,OACnD,OAAO,EAET,GAAkB,IAAdwM,EAAKnK,MAAcmK,EAAK1H,QAAU8zI,EAAWpsI,EAAK1H,OAAOkD,OAASsjN,GAAmBvmN,KAAKyH,EAAKxM,OACjG,OAAO,EAET,GAAIqrB,GAAaA,EAAU7e,GACzB,OAAO,QAEFA,EAAOg/M,GAAOh/M,EAAM1K,IAE/B,OAAO,GAETsnD,EAAKxmD,UAAU4+D,KAAO,SAAU2xB,GAC9B,OAAOq4H,GAAOtnN,KAAM,KAAMivF,IAErB/pC,EAvPI,GA0PT0iK,GAAgB,SAAUjrN,EAAU2G,EAAMi8C,EAAej3C,GAC3D,IAAIu/M,EAAclrN,EAASmrN,oBAAsBxkN,EAAK/D,OAClDsoN,GAAetoK,EAAcj3C,EAAKxE,MACpCwE,EAAKuD,QAAQC,OAAO,IAAIy7M,GAAO,KAAM,IAAIzpM,YAAa,EAEtDxV,EAAKuD,QAAQC,OAAO,IAAIy7M,GAAO,QAAS,IAAIzrN,MAAQ,KAGpDisN,GAAmB,SAAUz/M,GAC/B,OAAO0/M,GAAa1/M,EAAM,UAAsC,MAA1BA,EAAKsM,WAAW9Y,OAEpDksN,GAAe,SAAU1/M,EAAMxE,GACjC,OAAOwE,GAAQA,EAAKsM,YAActM,EAAKsM,aAAetM,EAAK82C,WAAa92C,EAAKsM,WAAW9Q,OAASA,GAE/FmkN,GAAW,SAAUlvK,EAAQzwC,GAC/B,IAAItC,EAAO+yC,EAAOg3G,eAAeznJ,EAAKxE,MACtC,OAAOkC,GAAQA,EAAK0oJ,WAElBw5D,GAAY,SAAUnvK,EAAQ04H,EAAkB02C,EAAoB7/M,GACtE,OAAOA,EAAKkxC,QAAQi4H,EAAkB02C,GAAoB,SAAU7/M,GAClE,OAAO2/M,GAASlvK,EAAQzwC,OAGxB8/M,GAAkB,SAAU9/M,EAAMi3C,GACpC,OAAOj3C,IAASi3C,EAAcj3C,EAAKxE,OAAuB,OAAdwE,EAAKxE,OAG/CkpC,GAAa,SAAUsR,EAAQ3hD,GACjC,IAAIo8C,EAASuF,EAAOvF,OAChBp8C,EAAS0rN,qBACX/pK,EAAOC,cAAc,MAAM,SAAUvuC,EAAOjS,EAAGuF,GAC7C,IAAIpD,EAEAoI,EAGA1H,EAAQw/I,EAAYnxD,EAAMq5H,EAE1BlzC,EAAatxJ,EANbgwD,EAAI9jE,EAAMrQ,OAEV4/C,EAAgBjjD,GAAM2C,OAAO,GAAI85C,EAAOsX,oBACxCohH,EAAmB14H,EAAO+c,sBAE1ByyJ,EAAqBxvK,EAAO87B,wBAGhC,IADAt1B,EAAcl1C,KAAO,EAChBnK,EAAI,EAAGA,EAAI4zE,EAAG5zE,IAGjB,GAFAoI,EAAO0H,EAAM9P,GACbU,EAAS0H,EAAK1H,OACV2+C,EAAcj3C,EAAK1H,OAAOkD,OAASwE,IAAS1H,EAAOw+C,UAAW,CAChE6vC,EAAO3mF,EAAK2mF,KACZ,MAAOA,EAAM,CAEX,GADAq5H,EAAWr5H,EAAKnrF,KACC,SAAbwkN,GAAsD,aAA/Br5H,EAAKtjF,KAAK,iBAAiC,CACpE,GAAiB,OAAb28M,EACF,MAEF,GAAiB,OAAbA,EAAmB,CACrBhgN,EAAO,KACP,OAGJ2mF,EAAOA,EAAKA,KAEV3mF,IACFA,EAAKyJ,SACDm2M,GAAUnvK,EAAQ04H,EAAkB82C,EAAoB3nN,KAC1Dw0K,EAAcr8H,EAAOg3G,eAAenvJ,EAAOkD,MACvCsxK,IACEA,EAAYzmB,YACd/tJ,EAAOmR,SACEqjK,EAAY1mB,WACrBk5D,GAAcjrN,EAAU2G,EAAMi8C,EAAe3+C,UAKhD,CACLw/I,EAAa93I,EACb,MAAO1H,GAAUA,EAAOgU,aAAewrI,GAAcx/I,EAAOw+C,YAAcghG,EAAY,CAEpF,GADAA,EAAax/I,EACT2+C,EAAc3+C,EAAOkD,MACvB,MAEFlD,EAASA,EAAOA,OAEdw/I,IAAex/I,IAA0C,IAAhCjE,EAASmrN,qBACpChkM,EAAW,IAAIyjM,GAAO,QAAS,GAC/BzjM,EAAShoB,MAAQ,IACjBwM,EAAK/J,QAAQulB,QAMvBw6B,EAAOqhB,mBAAmB,QAAQ,SAAU3vD,GAC1C,IAAsB1H,EAAlBpI,EAAI8P,EAAMrQ,OACV6oN,EAAY,SAAU17M,GACxB,IAAIouB,EAAQpuB,EAAIiR,MAAM,KAAKxS,QAAO,SAAU6vB,GAC1C,OAAOA,EAAEz7B,OAAS,KAEpB,OAAOu7B,EAAMxlB,OAAO,CAAC,aAAaiL,OAAO3c,KAAK,MAE5CykN,EAAc,SAAU37M,GAC1B,IAAImtE,EAASntE,EAAMxQ,GAAMsP,KAAKkB,GAAO,GACrC,MAAK,kBAAkBjM,KAAKo5E,GAGnBA,EAFAuuI,EAAUvuI,IAKrB,IAAKt9E,EAAS48E,yBACZ,MAAOr5E,IACLoI,EAAO0H,EAAM9P,GACK,MAAdoI,EAAKxE,MAAwC,WAAxBwE,EAAKqD,KAAK,WACjCrD,EAAKqD,KAAK,MAAO88M,EAAYngN,EAAKqD,KAAK,YAK1ChP,EAAS+rN,4BACZpqK,EAAOqhB,mBAAmB,WAAW,SAAU3vD,GAC7C,IAAsBmkD,EAAS8+B,EAAaryF,EAAQ0H,EAAhDpI,EAAI8P,EAAMrQ,OACd,MAAOO,IAEL,GADAoI,EAAO0H,EAAM9P,GACK,MAAdoI,EAAKxE,MAAgBwE,EAAKsM,aAAetM,EAAKqD,KAAK,QAAS,CAC9D/K,EAAS0H,EAAK1H,OACduzD,EAAU7rD,EAAK82C,UACf,GACE6zC,EAAc9+B,EAAQ86B,KACtBruF,EAAOrB,OAAO40D,EAAS7rD,GACvB6rD,EAAU8+B,QACH9+B,OAKbx3D,EAASgsN,mBACXrqK,EAAOC,cAAc,SAAS,SAAUvuC,GACtC,IAAsB1H,EAAMvH,EAAxBb,EAAI8P,EAAMrQ,OACd,MAAOO,IAGL,GAFAoI,EAAO0H,EAAM9P,GACba,EAAauH,EAAK1H,OACM,OAApBG,EAAW+C,MAAqC,OAApB/C,EAAW+C,KACzC,GAAIwE,EAAK2mF,MAA2B,OAAnB3mF,EAAK2mF,KAAKnrF,KACzBwE,EAAK2mF,KAAKnjF,OAAOxD,OACZ,CACL,IAAIwmD,EAAK,IAAIy4J,GAAO,KAAM,GAC1Bz4J,EAAGnjD,KAAK,QAAS,yBACjBrD,EAAKw2D,KAAKhQ,OAMhBnyD,EAAS2f,UAAYy8B,EAAO+3G,mBAC9BxyG,EAAOqhB,mBAAmB,SAAS,SAAU3vD,GAC3C,IAAsB1H,EAAM0nG,EAAW+E,EAAIj0G,EAAW8nN,EAElDC,EAAiBrR,EAFjBt3M,EAAI8P,EAAMrQ,OACVqtJ,EAAej0G,EAAO+3G,kBAE1B,MAAO5wJ,IAAK,CAIV,IAHAoI,EAAO0H,EAAM9P,GACb8vG,EAAY1nG,EAAKqD,KAAK,SAASoS,MAAM,KACrC6qM,EAAa,GACR7zG,EAAK,EAAGA,EAAK/E,EAAUrwG,OAAQo1G,IAClCj0G,EAAYkvG,EAAU+E,GACtByiG,GAAQ,EACRqR,EAAkB77D,EAAa,KAC3B67D,GAAmBA,EAAgB/nN,KACrC02M,GAAQ,GAEVqR,EAAkB77D,EAAa1kJ,EAAKxE,OAC/B0zM,GAASqR,GAAmBA,EAAgB/nN,KAC/C02M,GAAQ,GAENA,IACEoR,IACFA,GAAc,KAEhBA,GAAc9nN,GAGb8nN,EAAWjpN,SACdipN,EAAa,MAEftgN,EAAKqD,KAAK,QAASi9M,QAMvBE,GAAYxsN,GAAM+gE,QAAS0rJ,GAASzsN,GAAMkP,KAAMw9M,GAAY1sN,GAAM6iJ,QAAS8pE,GAAW3sN,GAAM2C,OAChG,SAASiqN,GAAWvsN,EAAUo8C,QACb,IAAXA,IACFA,EAAS2zG,MAEX,IAAIy8D,EAAc,GACdC,EAAmB,GACnBC,EAAe,GACfC,EAAoB,GACxB3sN,EAAWA,GAAY,GACvBA,EAAS2f,WAAW,aAAc3f,IAAWA,EAAS2f,SACtD3f,EAAS4f,UAAY5f,EAAS4f,WAAa,OAC3C,IAAIgtM,EAAqB,SAAUv5M,GACjC,IAAIq8I,EAAI/jJ,EAAM1H,EAAQ43D,EAASgxJ,EAAWjsJ,EAAaquI,EAAU6d,EAAWvpN,EACxEuxK,EAAkB02C,EAAoBuB,EAAsBC,EAAmBh+H,EAAiBx3B,EAAS61G,EAM7G,IALA0/C,EAAuBZ,GAAU,oCACjCr3C,EAAmB14H,EAAO+c,sBAC1BqyJ,EAAqBpvK,EAAO87B,wBAC5B80I,EAAoB5wK,EAAOC,uBAC3B2yC,EAAkB5yC,EAAO6yC,qBACpBygE,EAAK,EAAGA,EAAKr8I,EAAMrQ,OAAQ0sJ,IAE9B,GADA/jJ,EAAO0H,EAAMq8I,GACR/jJ,EAAK1H,SAAU0H,EAAKshN,MAGzB,GAAID,EAAkBrhN,EAAKxE,OAA8B,OAArBwE,EAAK1H,OAAOkD,KAAhD,CACEqwD,EAAU7rD,EAAKud,KACf,MAAOsuC,EAAS,CACd,IAAIw1J,EAAkBx1J,EAAQrwD,MAK5B,MAJAqwD,EAAQrwD,KAAO,KACfqwD,EAAQy1J,OAAQ,EAChBthN,EAAK1H,OAAOrB,OAAO40D,EAAS7rD,EAAK1H,QAInCuzD,EAAUA,EAAQtuC,KAEpBvd,EAAKs3D,OAAOt3D,OAZd,CAgBA,IADAkwD,EAAU,CAAClwD,GACN1H,EAAS0H,EAAK1H,OAAQA,IAAWm4C,EAAOm4G,aAAatwJ,EAAOkD,KAAMwE,EAAKxE,QAAU4lN,EAAqB9oN,EAAOkD,MAAOlD,EAASA,EAAOA,OACvI43D,EAAQj1D,KAAK3C,GAEf,GAAIA,GAAU43D,EAAQ74D,OAAS,EAAG,CAGhC,IAFA64D,EAAQn0B,UACRmlL,EAAYjsJ,EAAcssJ,EAAWrxJ,EAAQ,GAAGt8D,SAC3CgE,EAAI,EAAGA,EAAIs4D,EAAQ74D,OAAS,EAAGO,IAAK,CAOvC,IANI64C,EAAOm4G,aAAa3zF,EAAYz5D,KAAM00D,EAAQt4D,GAAG4D,OACnD8nM,EAAWie,EAAWrxJ,EAAQt4D,GAAGhE,SACjCqhE,EAAYzxD,OAAO8/L,IAEnBA,EAAWruI,EAERksJ,EAAYjxJ,EAAQt4D,GAAG0U,WAAY60M,GAAaA,IAAcjxJ,EAAQt4D,EAAI,IAC7E8pK,EAAWy/C,EAAU5jM,KACrB+lL,EAAS9/L,OAAO29M,GAChBA,EAAYz/C,EAEdzsG,EAAcquI,EAEXsc,GAAUnvK,EAAQ04H,EAAkB02C,EAAoBqB,GAI3D5oN,EAAOrB,OAAO+I,EAAMkwD,EAAQ,IAAI,IAHhC53D,EAAOrB,OAAOiqN,EAAWhxJ,EAAQ,IAAI,GACrC53D,EAAOrB,OAAO+I,EAAMkhN,IAItB5oN,EAAS43D,EAAQ,IACb0vJ,GAAUnvK,EAAQ04H,EAAkB02C,EAAoBvnN,IAAWonN,GAAapnN,EAAQ,QAC1FA,EAAOiL,QAAQkG,cAEZ,GAAIzJ,EAAK1H,OAAQ,CACtB,GAAkB,OAAd0H,EAAKxE,KAAe,CAEtB,GADAqwD,EAAU7rD,EAAK2mF,KACX96B,IAA6B,OAAjBA,EAAQrwD,MAAkC,OAAjBqwD,EAAQrwD,MAAgB,CAC/DqwD,EAAQroD,OAAOxD,GACf,SAGF,GADA6rD,EAAU7rD,EAAKud,KACXsuC,IAA6B,OAAjBA,EAAQrwD,MAAkC,OAAjBqwD,EAAQrwD,MAAgB,CAC/DqwD,EAAQ50D,OAAO+I,EAAM6rD,EAAQv/C,YAAY,GACzC,SAEFtM,EAAKw2D,KAAK+qJ,EAAW,IAAItC,GAAO,KAAM,KACtC,SAEExuK,EAAOm4G,aAAa5oJ,EAAK1H,OAAOkD,KAAM,QAAUi1C,EAAOm4G,aAAa,MAAO5oJ,EAAKxE,MAClFwE,EAAKw2D,KAAK+qJ,EAAW,IAAItC,GAAO,MAAO,KAEnC57H,EAAgBrjF,EAAKxE,MACvBwE,EAAKuD,QAAQkG,SAEbzJ,EAAKs3D,YAMXiqJ,EAAa,SAAUvhN,GACzB,IAAIpI,EAAG4D,EAAMw/C,EACbx/C,EAAOwE,EAAKxE,KACRA,KAAQqlN,IACV7lK,EAAO+lK,EAAavlN,GAChBw/C,EACFA,EAAK//C,KAAK+E,GAEV+gN,EAAavlN,GAAQ,CAACwE,IAG1BpI,EAAIkpN,EAAiBzpN,OACrB,MAAOO,IACL4D,EAAOslN,EAAiBlpN,GAAG4D,KACvBA,KAAQwE,EAAKnE,WAAW7F,MAC1BglD,EAAOgmK,EAAkBxlN,GACrBw/C,EACFA,EAAK//C,KAAK+E,GAEVghN,EAAkBxlN,GAAQ,CAACwE,IAIjC,OAAOA,GAELi2C,EAAgB,SAAUz6C,EAAM7D,GAClC8oN,GAAOC,GAAUllN,IAAO,SAAUA,GAChC,IAAIw/C,EAAO6lK,EAAYrlN,GAClBw/C,IACH6lK,EAAYrlN,GAAQw/C,EAAO,IAE7BA,EAAK//C,KAAKtD,OAGV6pN,EAAiB,WACnB,IAAIt3L,EAAM,GACV,IAAK,IAAI1uB,KAAQqlN,EACXA,EAAYpqN,eAAe+E,IAC7B0uB,EAAIjvB,KAAK,CACPO,KAAMA,EACNC,UAAWolN,EAAYrlN,KAI7B,OAAO0uB,GAELmtC,EAAqB,SAAU77D,EAAM7D,GACvC8oN,GAAOC,GAAUllN,IAAO,SAAUA,GAChC,IAAI5D,EACJ,IAAKA,EAAI,EAAGA,EAAIkpN,EAAiBzpN,OAAQO,IACvC,GAAIkpN,EAAiBlpN,GAAG4D,OAASA,EAE/B,YADAslN,EAAiBlpN,GAAG6D,UAAUR,KAAKtD,GAIvCmpN,EAAiB7lN,KAAK,CACpBO,KAAMA,EACNC,UAAW,CAAC9D,SAId8pN,EAAsB,WACxB,MAAO,GAAGr0M,OAAO0zM,IAEf5kN,EAAQ,SAAUmB,EAAMrC,GAC1B,IAAIg7C,EAAQtuC,EAAO9P,EAAG4zE,EAAGk2I,EAAIC,EAAI3mK,EAAMx/C,EACnCy7C,EAEA2qK,EACA5hN,EAFA6hN,EAAkB,GAGtB7mN,EAAOA,GAAQ,GACf+lN,EAAe,GACfC,EAAoB,GACpB/pK,EAAgB0pK,GAASH,GAAU,gDAAiD/vK,EAAOsX,oBAC3F,IAAIohH,EAAmB14H,EAAO+c,sBAC1BxlD,EAAWyoC,EAAOzoC,SAClBgM,EAAW3f,EAAS2f,SACpB8tM,EAAgB,sBAAuB9mN,EAAOA,EAAKitD,kBAAoB5zD,EAAS4zD,kBAChFg4J,EAAqBxvK,EAAO87B,wBAC5Bw1I,EAAwB,cACxBC,EAAsB,cACtBC,EAAsB,cACtBC,EAAwB,eAC5BN,EAAiC3B,EAAmBxpN,eAAeuE,EAAK4N,UAAYq3M,EAAmBxpN,eAAepC,EAAS4f,WAC/H,IAAImvL,EAAgB,WAClB,IAAgC7lL,EAAM8lL,EAAlCrjM,EAAOu3D,EAASjrD,WAChBhJ,EAAO,SAAU+/L,GACfA,IACFrjM,EAAOqjM,EAAc/2L,WACjBtM,GAAsB,IAAdA,EAAKnK,OACfmK,EAAKxM,MAAQwM,EAAKxM,MAAMyC,QAAQ8rN,EAAuB,KAEzD/hN,EAAOqjM,EAAcvsJ,UACjB92C,GAAsB,IAAdA,EAAKnK,OACfmK,EAAKxM,MAAQwM,EAAKxM,MAAMyC,QAAQ+rN,EAAqB,OAI3D,GAAKvxK,EAAOm4G,aAAarxF,EAAS/7D,KAAMsmN,EAAcntM,eAAtD,CAGA,MAAO3U,EACLud,EAAOvd,EAAKud,KACM,IAAdvd,EAAKnK,MAA4B,IAAdmK,EAAKnK,MAA4B,MAAdmK,EAAKxE,OAAiBy7C,EAAcj3C,EAAKxE,QAAUwE,EAAKqD,KAAK,kBAChGggM,IACHA,EAAgB8e,EAAWL,EAAe,GAC1Cze,EAAchgM,KAAKhP,EAAS6zD,yBAC5BqP,EAAStgE,OAAOosM,EAAerjM,IAG/BqjM,EAAc7/L,OAAOxD,KAGvBsD,EAAK+/L,GACLA,EAAgB,MAElBrjM,EAAOud,EAETja,EAAK+/L,KAEH8e,EAAa,SAAU3mN,EAAM3F,GAC/B,IACImlD,EADAh7C,EAAO,IAAIi/M,GAAOzjN,EAAM3F,GAU5B,OARI2F,KAAQqlN,IACV7lK,EAAO+lK,EAAavlN,GAChBw/C,EACFA,EAAK//C,KAAK+E,GAEV+gN,EAAavlN,GAAQ,CAACwE,IAGnBA,GAELoiN,EAAyB,SAAUpiN,GACrC,IAAIwb,EAAU6mM,EAAcC,EAASz2J,EACjC5U,EAAgBxG,EAAOsX,mBAC3B,IAAKvsC,EAAWxb,EAAK2mF,KAAMnrE,GAA8B,IAAlBA,EAAS3lB,MAAa,CAE3D,GADAysN,EAAU9mM,EAAShoB,MAAMyC,QAAQ+rN,EAAqB,IAClDM,EAAQjrN,OAAS,EAEnB,YADAmkB,EAAShoB,MAAQ8uN,GAInB,GADAD,EAAe7mM,EAAS+B,KACpB8kM,EAAc,CAChB,GAA0B,IAAtBA,EAAaxsN,MAAcwsN,EAAa7uN,MAAM6D,OAAQ,CACxDmkB,EAAWA,EAASmrE,KACpB,SAEF,IAAK1vC,EAAcorK,EAAa7mN,OAA+B,WAAtB6mN,EAAa7mN,MAA2C,UAAtB6mN,EAAa7mN,KAAkB,CACxGggB,EAAWA,EAASmrE,KACpB,UAGJ96B,EAAUrwC,EAASmrE,KACnBnrE,EAAS/R,SACT+R,EAAWqwC,IAGX02J,EAAwB,SAAUv8G,GACpC,IAAIxqG,EACAgxC,EAAS,GACb,IAAKhxC,KAAQwqG,EACE,OAATxqG,GAA0B,MAATA,IACnBgxC,EAAOhxC,GAAQwqG,EAAMxqG,IAGzB,OAAOgxC,GAETwJ,EAAS25J,GAAY,CACnB37L,SAAUA,EACVy2I,kBAAmBp2J,EAASo2J,kBAC5BztE,2BAA4B3oF,EAAS2oF,2BACrCuyH,sBAAuBgT,EAAsB9xK,EAAOi4G,0BACpD3rJ,MAAO,SAAUlD,GACfmG,EAAKwD,OAAO2+M,EAAW,SAAU,IAAI3uN,MAAQqG,GAE/CA,KAAM,SAAUA,EAAMg3D,GACpB,IAAIr1C,EACComM,IACH/nN,EAAOA,EAAK5D,QAAQgsN,EAAqB,KACrCnC,GAAgB9/M,EAAK82C,UAAWG,KAClCp9C,EAAOA,EAAK5D,QAAQ8rN,EAAuB,MAG3B,IAAhBloN,EAAKxC,SACPmkB,EAAW2mM,EAAW,QAAS,GAC/B3mM,EAASq1C,MAAQA,EACjB7wD,EAAKwD,OAAOgY,GAAUhoB,MAAQqG,IAGlC+C,QAAS,SAAU/C,GACjBmG,EAAKwD,OAAO2+M,EAAW,WAAY,IAAI3uN,MAAQqG,GAEjD0yK,GAAI,SAAU/wK,EAAM3B,GAClBmG,EAAKwD,OAAO2+M,EAAW3mN,EAAM,IAAIhI,MAAQqG,EACzCuoN,EAAuBpiN,IAEzBlD,QAAS,SAAUjD,GACjB,IAAIgkB,EACJA,EAAU7d,EAAKwD,OAAO2+M,EAAW,WAAY,KAC7CtkM,EAAQrqB,MAAQqG,EAChBuoN,EAAuBpiN,IAEzB6Y,MAAO,SAAUrd,EAAMwkB,EAAOzc,GAC5B,IAAIsa,EAAS2kM,EAAgB11C,EAAa5qF,EAAU5pF,EAEpD,GADAw0K,EAAc94J,EAAWy8B,EAAOg3G,eAAejsJ,GAAQ,GACnDsxK,EAAa,CACfjvJ,EAAUskM,EAAWr1C,EAAY/mB,YAAcvqJ,EAAM,GACrDqiB,EAAQhiB,WAAamkB,EACrBnC,EAAQrI,WAAajS,EACrBvD,EAAKwD,OAAOqa,GACZvlB,EAAS0P,EAAShI,EAAKxE,MACnBlD,GAAU0P,EAAS6V,EAAQriB,QAAUlD,EAAOulB,EAAQriB,OACtDqmN,EAAgB5mN,KAAK4iB,GAEvB2kM,EAAiB1B,EAAiBzpN,OAClC,MAAOmrN,IACLtgI,EAAW4+H,EAAiB0B,GAAgBhnN,KACxC0mF,KAAYliE,EAAMhqB,MACpBglD,EAAOgmK,EAAkB9+H,GACrBlnC,EACFA,EAAK//C,KAAK4iB,GAEVmjM,EAAkB9+H,GAAY,CAACrkE,IAIjCo5B,EAAcz7C,IAChB4mN,EAAuBvkM,GAEpBta,IACHvD,EAAO6d,IAEJ+jM,GAAkC3B,EAAmBzkN,KACxDomN,GAAiC,KAIvCnoM,IAAK,SAAUje,GACb,IAAIggB,EAAUsxJ,EAAajzK,EAAMgyD,EAASy3I,EAE1C,GADAx2B,EAAc94J,EAAWy8B,EAAOg3G,eAAejsJ,GAAQ,GACnDsxK,EAAa,CACf,GAAI71H,EAAcz7C,KACXomN,EAAgC,CAEnC,GADApmM,EAAWxb,EAAKsM,WACZkP,GAA8B,IAAlBA,EAAS3lB,KAEvB,GADAgE,EAAO2hB,EAAShoB,MAAMyC,QAAQ8rN,EAAuB,IACjDloN,EAAKxC,OAAS,EAChBmkB,EAAShoB,MAAQqG,EACjB2hB,EAAWA,EAAS+B,SACf,CACLsuC,EAAUrwC,EAAS+B,KACnB/B,EAAS/R,SACT+R,EAAWqwC,EACX,MAAOrwC,GAA8B,IAAlBA,EAAS3lB,KAC1BgE,EAAO2hB,EAAShoB,MAChBq4D,EAAUrwC,EAAS+B,MACC,IAAhB1jB,EAAKxC,QAAgB6qN,EAAsB3pN,KAAKsB,MAClD2hB,EAAS/R,SACT+R,EAAWqwC,GAEbrwC,EAAWqwC,EAKjB,GADArwC,EAAWxb,EAAK82C,UACZt7B,GAA8B,IAAlBA,EAAS3lB,KAEvB,GADAgE,EAAO2hB,EAAShoB,MAAMyC,QAAQ+rN,EAAqB,IAC/CnoN,EAAKxC,OAAS,EAChBmkB,EAAShoB,MAAQqG,EACjB2hB,EAAWA,EAASmrE,SACf,CACL96B,EAAUrwC,EAASmrE,KACnBnrE,EAAS/R,SACT+R,EAAWqwC,EACX,MAAOrwC,GAA8B,IAAlBA,EAAS3lB,KAC1BgE,EAAO2hB,EAAShoB,MAChBq4D,EAAUrwC,EAASmrE,MACC,IAAhB9sF,EAAKxC,QAAgB6qN,EAAsB3pN,KAAKsB,MAClD2hB,EAAS/R,SACT+R,EAAWqwC,GAEbrwC,EAAWqwC,GASrB,GAHI+1J,GAAkC3B,EAAmBzkN,KACvDomN,GAAiC,GAE/B90C,EAAYzmB,aAAeu5D,GAAUnvK,EAAQ04H,EAAkB82C,EAAoBjgN,KAChFA,EAAKnE,WAAW7F,IAAIwF,OAASwE,EAAKqD,KAAK,MAQ1C,OAPAigM,EAAWtjM,EAAK1H,OACZ2+C,EAAcj3C,EAAKxE,MACrBwE,EAAKuD,QAAQkG,SAEbzJ,EAAKs3D,cAEPt3D,EAAOsjM,GAIPx2B,EAAY1mB,YAAcq5D,GAAiBz/M,IAAS4/M,GAAUnvK,EAAQ04H,EAAkB82C,EAAoBjgN,KAC9Gs/M,GAAcjrN,EAAU2G,EAAMi8C,EAAej3C,GAE/CA,EAAOA,EAAK1H,UAGfm4C,GACH,IAAI8mB,EAAWv3D,EAAO,IAAIi/M,GAAOjkN,EAAK4N,SAAWvU,EAAS4f,UAAW,IAYrE,GAXA+hC,EAAO95C,MAAMmB,GACT2W,GAAY6tM,EAAgBxqN,SACzB2D,EAAK4N,QAGR5N,EAAKk0K,SAAU,EAFf+xC,EAAmBY,IAKnBC,IAAoC,SAAlBvqJ,EAAS/7D,MAAmBR,EAAK28D,gBACrDyrI,KAEGpoM,EAAKk0K,QAAS,CACjB,IAAK1zK,KAAQulN,EAAc,CACzB/lK,EAAO6lK,EAAYrlN,GACnBkM,EAAQq5M,EAAavlN,GACrBkmN,EAAKh6M,EAAMrQ,OACX,MAAOqqN,IACAh6M,EAAMg6M,GAAIppN,QACboP,EAAMtM,OAAOsmN,EAAI,GAGrB,IAAK9pN,EAAI,EAAG4zE,EAAIxwB,EAAK3jD,OAAQO,EAAI4zE,EAAG5zE,IAClCojD,EAAKpjD,GAAG8P,EAAOlM,EAAMR,GAGzB,IAAKpD,EAAI,EAAG4zE,EAAIs1I,EAAiBzpN,OAAQO,EAAI4zE,EAAG5zE,IAE9C,GADAojD,EAAO8lK,EAAiBlpN,GACpBojD,EAAKx/C,QAAQwlN,EAAmB,CAClCt5M,EAAQs5M,EAAkBhmK,EAAKx/C,MAC/BkmN,EAAKh6M,EAAMrQ,OACX,MAAOqqN,IACAh6M,EAAMg6M,GAAIppN,QACboP,EAAMtM,OAAOsmN,EAAI,GAGrB,IAAKA,EAAK,EAAGC,EAAK3mK,EAAKv/C,UAAUpE,OAAQqqN,EAAKC,EAAID,IAChD1mK,EAAKv/C,UAAUimN,GAAIh6M,EAAOszC,EAAKx/C,KAAMR,IAK7C,OAAOu8D,GAELgC,EAAU,CACZ9oB,OAAQA,EACR4mB,mBAAoBA,EACpBoqJ,oBAAqBA,EACrBxrK,cAAeA,EACfurK,eAAgBA,EAChBD,WAAYA,EACZrlN,MAAOA,GAIT,OAFAwoC,GAAW60B,EAASllE,GACpBwqN,GAAap8M,SAAS82D,EAASllE,GACxBklE,EAGT,IAAImrE,GAAc,SAAUi5E,EAAY/N,EAAWp0M,IACT,IAApCxH,GAAMkuC,QAAQ0tK,EAAWp0M,KAC3BmiN,EAAWtmJ,mBAAmB77D,GAAM,SAAUkM,EAAOlM,GACnD,IAAI5D,EAAI8P,EAAMrQ,OACd,MAAOO,IACL8P,EAAM9P,GAAGyL,KAAK7H,EAAM,SAGxBo0M,EAAU30M,KAAKO,KAGfinN,GAAgB,SAAUruN,EAAQ4G,EAAMlF,GAC1C,IAAKkF,EAAKsjN,WAAalqN,EAAQ,CAC7B,IAAIsuN,EAAU7wJ,GAAO2gI,gBAAgBp+L,EAAQs5C,GAAM1yC,EAAM,CAAElF,QAASA,KACpE,OAAO4sN,EAAQ5sN,QAEf,OAAOA,GAGP6sN,GAAkB,SAAUriN,EAAKN,EAAMhF,GACzC,IAAIqC,EAAO82J,GAAK7wJ,KAAKtI,EAAK4nN,SAAW5iN,EAAKzG,UAAY+G,EAAI2tJ,aAAajuJ,IACvE,OAAOhF,EAAKiF,WAAas+I,GAAoB5iG,GAAQN,QAAQr7C,IAAS3C,EAAOrJ,GAAMsP,KAAKjG,IAEtFwlN,GAAY,SAAUlF,EAAYtgN,EAAMrC,GAC1C,IAAI+zK,EAAa/zK,EAAKiF,UAAYytC,GAAM,CAAEua,mBAAmB,GAASjtD,GAAQA,EAC1Eu8D,EAAWomJ,EAAWzhN,MAAMmB,EAAM0xK,GAEtC,OADAmvC,GAAqBH,eAAexmJ,GAC7BA,GAELurJ,GAAgB,SAAUzuN,EAAUo8C,EAAQzwC,GAC9C,IAAI+iN,EAAiBv2C,GAAen4K,EAAUo8C,GAC9C,OAAOsyK,EAAe3sM,UAAUpW,IAE9BgjN,GAAS,SAAU5uN,EAAQC,EAAUo8C,EAAQ8mB,EAAUv8D,GACzD,IAAIlF,EAAUgtN,GAAczuN,EAAUo8C,EAAQ8mB,GAC9C,OAAOkrJ,GAAcruN,EAAQ4G,EAAMlF,IAErC,SAASmtN,GAAe5uN,EAAUD,GAChC,IAAIkM,EAAKmwC,EAAQktK,EACb/N,EAAY,CAAC,qBACjBtvM,EAAMlM,GAAUA,EAAOkM,IAAMlM,EAAOkM,IAAM6uJ,GAAWv6J,IACrD67C,EAASr8C,GAAUA,EAAOq8C,OAASr8C,EAAOq8C,OAAS2zG,GAAO/vJ,GAC1DA,EAASg4K,gBAAkBh4K,EAASg4K,iBAAmB,QACvDh4K,EAAS0rN,sBAAsB,wBAAyB1rN,IAAWA,EAAS0rN,oBAC5EpC,EAAaiD,GAAUvsN,EAAUo8C,GACjCytK,GAAqBz7M,SAASk7M,EAAYtpN,EAAUiM,GACpD,IAAI8V,EAAY,SAAUpW,EAAM+uK,GAC9B,IAAI/zK,EAAO0yC,GAAM,CAAE3kC,OAAQ,QAAUgmK,GAA0B,IAC3D1lH,EAAak1J,GAAwBjmJ,QAAQlkE,EAAQ4L,EAAMhF,GAC3DqC,EAAOslN,GAAgBriN,EAAK+oD,EAAYruD,GACxCu8D,EAAWsrJ,GAAUlF,EAAYtgN,EAAMrC,GAC3C,MAAuB,SAAhBA,EAAK+N,OAAoBwuD,EAAWyrJ,GAAO5uN,EAAQC,EAAUo8C,EAAQ8mB,EAAUv8D,IAExF,MAAO,CACLy1C,OAAQA,EACRwF,cAAe0nK,EAAW1nK,cAC1BohB,mBAAoBsmJ,EAAWtmJ,mBAC/BjhD,UAAWA,EACX8sM,SAAU,SAAUxxI,GAClBjhC,EAAOi1G,iBAAiBh0E,IAE1ByxI,SAAU,SAAUzxI,GAClBjhC,EAAOo2G,iBAAiBn1E,IAE1BgzD,YAAa33H,EAAM23H,GAAai5E,EAAY/N,GAC5CM,aAAc,WACZ,OAAON,IAKb,SAASwT,GAAiB/uN,EAAUD,GAClC,IAAIivN,EAAgBJ,GAAc5uN,EAAUD,GAC5C,MAAO,CACLq8C,OAAQ4yK,EAAc5yK,OACtBwF,cAAeotK,EAAcptK,cAC7BohB,mBAAoBgsJ,EAAchsJ,mBAClCjhD,UAAWitM,EAAcjtM,UACzB8sM,SAAUG,EAAcH,SACxBC,SAAUE,EAAcF,SACxBz+E,YAAa2+E,EAAc3+E,YAC3BwrE,aAAcmT,EAAcnT,cAIhC,SAASoT,GAAgBrjN,GACvB,MAAO,CACLgqD,YAAal9C,EAAMy3J,GAAUv6G,YAAahqD,GAC1CiqD,eAAgBn9C,EAAMy3J,GAAUt6G,eAAgBjqD,KAGnD,SAAUqjN,GACTA,EAAgBp4J,eAAiBs5G,GAAUt5G,gBAD7C,CAEEo4J,KAAoBA,GAAkB,KACxC,IAsqCIC,GAtqCAC,GAAoBF,GAEpBG,GAA2BlsK,GAAS4yB,uBACpCu5I,GAA0BnsK,GAAS2zE,sBACnCy4F,GAA2B,SAAUzsN,EAAM8I,GAC7C,MAAOA,GAAQA,IAAS9I,EAAM,CAC5B,GAAIwsN,GAAwB1jN,IAASyjN,GAAyBzjN,GAC5D,OAAOA,EAETA,EAAOA,EAAKvH,WAEd,OAAO,MAELmrN,GAAmB,SAAU3jN,EAAW7L,GAC1C,IACI49E,EAAa6xI,EAAkBC,EAAcC,EAAeC,EAC5DC,EAAQC,EAAQC,EAAcC,EAAcr3F,EAAQs3F,EAAQtuG,EAAOuuG,EACnEniM,EAAOC,EAGPmiM,EAAkBC,EANlBlkN,EAAMlM,EAAOkM,IAAK4C,EAAOlP,GAAMkP,KAI/BuhN,EAAcrwN,EAAOyP,SAAUknM,EAAe13M,EAAW4E,SACzDuwG,EAAM9zG,KAAK8zG,IAAK36E,EAAQn5B,KAAKm5B,MAAOglJ,EAAcz+K,EAAOoU,UAE7Du7M,EAAgB,CACdW,GAAI,CACF,EACA,GACC,GACA,GAEHC,GAAI,CACF,EACA,EACA,GACC,GAEHC,GAAI,CACF,EACA,EACA,EACA,GAEFC,GAAI,CACF,EACA,GACC,EACD,IAGJ,IAAI7X,EAAY,oBAChB54M,EAAO24M,cAAc9xM,KAAK+xM,sJAA0MA,EAA1MA,8CAAgRA,EAAY,2BAA6BA,EAAzTA,iEAAuZA,EAAvZA,8CAAwd/mE,GAAI7iE,MAAQ,GAAK,8BAAze4pI,wDAAklBA,EAAllBA,+QAC1B,IAAI8X,EAAU,SAAUzoN,GACtB,OAAOA,IAAyB,QAAjBA,EAAI3D,UAAsBtE,EAAOkM,IAAIiI,GAAGlM,EAAK,kBAE1D0oN,EAA6B,SAAU3rN,EAAK0rE,GAC9C,OAAOggJ,EAAQ1rN,EAAIiM,UAAYiiM,GAAWD,gBAAgBjuM,EAAI8vC,QAAS9vC,EAAI+vC,QAAS27B,IAElFkgJ,EAAyB,SAAU5rN,GACrC,IAAIiM,EAASjM,EAAIiM,OACb0/M,EAA2B3rN,EAAKhF,EAAO6L,UAAUyc,YAActjB,EAAI6+D,sBACrE7jE,EAAO6L,UAAUO,OAAO6E,IAGxB4/M,EAAkB,SAAU5oN,GAC9B,OAAOjI,EAAOkM,IAAIiI,GAAGlM,EAAK,gBAAkBA,EAAI+tF,cAAc,OAAS/tF,GAErE6oN,EAAc,SAAU7oN,GAC1B,IAAIuB,EAAWxJ,EAAOC,SAASyhM,gBAC/B,OAAiB,IAAbl4L,IAAsBqoI,GAAI/hE,MAGN,kBAAbtmE,IACTA,EAAW,8BAE+B,UAAxCvB,EAAIkQ,aAAa,qBAGjBlQ,IAAQjI,EAAOoU,WAGZ66C,GAAK1H,GAAQN,QAAQh/C,GAAMuB,MAEhCunN,EAAqB,SAAU3iN,GACjC,IAAIkzB,EAAQC,EAAQyvL,EAChBC,EAAeC,EACnB5vL,EAASlzB,EAAEmnM,QAAUsa,EACrBtuL,EAASnzB,EAAEonM,QAAUsa,EACrB/hM,EAAQuT,EAASsuL,EAAe,GAAKj3F,EACrC3qG,EAASuT,EAASquL,EAAe,GAAKK,EACtCliM,EAAQA,EAAQ,EAAI,EAAIA,EACxBC,EAASA,EAAS,EAAI,EAAIA,EAExBgjM,EADEN,EAAQ9yI,KAA4D,IAA5C59E,EAAOC,SAASkxN,yBAC1B5gB,GAAG3lL,gBAAgBxc,GAEpBmiM,GAAG3lL,gBAAgBxc,IAAMsiN,EAAQ9yI,IAAgBgyI,EAAe,GAAKA,EAAe,KAAO,EAExGoB,IACE58G,EAAI9yE,GAAU8yE,EAAI7yE,IACpBvT,EAASyL,EAAM1L,EAAQ4zF,GACvB5zF,EAAQ0L,EAAMzL,EAAS2zF,KAEvB5zF,EAAQ0L,EAAMzL,EAAS2zF,GACvB3zF,EAASyL,EAAM1L,EAAQ4zF,KAG3Bz1G,EAAIskE,UAAUqgJ,EAAgBpB,GAAmB,CAC/C1hM,MAAOA,EACPC,OAAQA,IAEVijM,EAAgBrB,EAAe5sM,SAASzM,EAAI+qB,EAC5C4vL,EAAgBtB,EAAe5sM,SAASxM,EAAI+qB,EAC5C0vL,EAAgBA,EAAgB,EAAIA,EAAgB,EACpDC,EAAgBA,EAAgB,EAAIA,EAAgB,EACpDhlN,EAAIskE,UAAUk/I,EAAc,CAC1BvsL,KAAM8tL,EACN7tL,IAAK8tL,EACL9K,QAAS,UAEXsJ,EAAavqN,UAAY4oB,EAAQ,YAAcC,EAC3C4hM,EAAe,GAAK,GAAKH,EAAiBvqL,aAAenX,GAC3D7hB,EAAIkqD,SAASq5J,EAAkB,OAAQM,GAAgBp3F,EAAS5qG,IAE9D6hM,EAAe,GAAK,GAAKH,EAAiBtqL,cAAgBnX,GAC5D9hB,EAAIkqD,SAASq5J,EAAkB,MAAOO,GAAgBC,EAASjiM,IAEjEsT,EAASm9I,EAAYg3B,YAAc0a,EACnC5uL,EAASk9I,EAAYi3B,aAAe0a,EAChC9uL,EAASC,IAAW,GACtBr1B,EAAIskE,UAAUk/I,EAAc,CAC1BvsL,KAAM8tL,EAAgB3vL,EACtB8B,IAAK8tL,EAAgB3vL,IAGpB2uL,IACHzyJ,GAAO+sD,sBAAsBxqH,EAAQ49E,EAAa+6C,EAAQs3F,GAC1DC,GAAgB,IAGhBkB,EAAiB,WACnBlB,GAAgB,EAChB,IAAImB,EAAc,SAAUjqN,EAAMhI,GAC5BA,IACEw+E,EAAY/zE,MAAMzC,KAAUpH,EAAOq8C,OAAOo4G,QAAQ72E,EAAYt5E,SAASic,cAAenZ,GACxF8E,EAAIkqD,SAASy6J,EAAgBjzI,GAAcx2E,EAAMhI,GAEjD8M,EAAIC,UAAU0kN,EAAgBjzI,GAAcx2E,EAAMhI,KAIxDiyN,EAAY,QAAStjM,GACrBsjM,EAAY,SAAUrjM,GACtB9hB,EAAIijE,OAAOkhJ,EAAa,YAAaU,GACrC7kN,EAAIijE,OAAOkhJ,EAAa,UAAWe,GAC/Bza,IAAiB0Z,IACnBnkN,EAAIijE,OAAOwnI,EAAc,YAAaoa,GACtC7kN,EAAIijE,OAAOwnI,EAAc,UAAWya,IAEtCllN,EAAImJ,OAAOo6M,GACXvjN,EAAImJ,OAAOq6M,GACX4B,EAAe1zI,GACfngB,GAAOgtD,kBAAkBzqH,EAAQ49E,EAAa7vD,EAAOC,GACrD9hB,EAAIC,UAAUyxE,EAAa,QAAS1xE,EAAI6tC,UAAU6jC,EAAa,UAC/D59E,EAAOmV,eAELm8M,EAAiB,SAAU53J,GAC7B,IAAI7hB,EAAU05K,EAAaC,EAAcpjN,EAAGozB,EAC5Cm9J,IACA8yB,IACA55K,EAAW3rC,EAAIipC,OAAOukB,EAAW+kH,GACjCsxC,EAAel4K,EAASthC,EACxBy5M,EAAen4K,EAASrhC,EACxBgrB,EAAOk4B,EAAUoyC,wBACjBylH,EAAc/vL,EAAKzT,OAASyT,EAAKkiE,MAAQliE,EAAK2B,KAC9CquL,EAAehwL,EAAKxT,QAAUwT,EAAKsW,OAAStW,EAAK4B,IAC7Cw6C,IAAgBlkB,IAClBkkB,EAAclkB,EACd3rC,EAAQC,EAAS,GAEnB5f,EAAIpO,EAAO2hC,KAAK,iBAAkB,CAAE1wB,OAAQyoD,IACxCo3J,EAAYp3J,KAAetrD,EAAEy1D,qBAC/B/0D,EAAK6gN,GAAe,SAAU//L,EAAQxoB,GACpC,IAAIsqN,EACAt5F,EAAY,SAAUhqH,GACxByhN,EAASzhN,EAAEmnM,QACXua,EAAS1hN,EAAEonM,QACX78E,EAASk4F,EAAgBjzI,GAAa14C,YACtC+qL,EAASY,EAAgBjzI,GAAaz4C,aACtCw8E,EAAQsuG,EAASt3F,EACjBi3F,EAAiBhgM,EACjBA,EAAO5M,SAAW,CAChBzM,EAAGg7M,EAAc3hM,EAAO,GAAKmgM,EAC7Bv5M,EAAGg7M,EAAe5hM,EAAO,GAAKogM,GAEhCG,EAAmB1xC,EAAYg3B,YAC/B2a,EAAoB3xC,EAAYi3B,aAChC+Z,EAAmB7xI,EAAY5qC,WAAU,GACzC9mC,EAAI44E,SAAS2qI,EAAkB,uBAC/BvjN,EAAIC,UAAUsjN,EAAkB,iBAAkB,OAClDA,EAAiBngN,iBAAkB,EACnCmgN,EAAiBkC,aAAc,EAC/BzlN,EAAIskE,UAAUi/I,EAAkB,CAC9BtsL,KAAM4sL,EACN3sL,IAAK4sL,EACLv3K,OAAQ,IAEVg3K,EAAiB3kL,gBAAgB,qBACjC2zI,EAAYluK,YAAYk/M,GACxBvjN,EAAIuO,KAAK41M,EAAa,YAAaU,GACnC7kN,EAAIuO,KAAK41M,EAAa,UAAWe,GAC7Bza,IAAiB0Z,IACnBnkN,EAAIuO,KAAKk8L,EAAc,YAAaoa,GACpC7kN,EAAIuO,KAAKk8L,EAAc,UAAWya,IAEpC1B,EAAexjN,EAAI/E,IAAIs3K,EAAa,MAAO,CACzC,MAAS,oBACT,iBAAkB,OACjB9lD,EAAS,YAAcs3F,IAE5ByB,EAAYxlN,EAAI7M,IAAI,kBAAoB+H,GACpCsqN,GACFxlN,EAAImJ,OAAOq8M,GAEbA,EAAYxlN,EAAI/E,IAAIs3K,EAAa,MAAO,CACtC,GAAM,kBAAoBr3K,EAC1B,iBAAkB,MAClB,MAAS,mBACT,cAAgB,EAChB,MAAS,UAAYA,EAAO,iCAEf,KAAXyqI,GAAIlkH,KACN+jM,EAAUpiN,iBAAkB,GAE9BpD,EAAIuO,KAAKi3M,EAAW,aAAa,SAAUtjN,GACzCA,EAAE8/D,2BACF9/D,EAAEm0B,iBACF61F,EAAUhqH,MAEZwhB,EAAO3nB,IAAMypN,EACbxlN,EAAIskE,UAAUkhJ,EAAW,CACvBvuL,KAAMouL,EAAc3hM,EAAO,GAAKmgM,EAAe2B,EAAUrsL,YAAc,EACvEjC,IAAKouL,EAAe5hM,EAAO,GAAKogM,EAAe0B,EAAUpsL,aAAe,OAI5Eq5J,IAEF/gH,EAAY3mE,aAAa,oBAAqB,MAE5C0nL,EAAiB,WACnB,IAAIv3L,EAAMsqN,EAKV,IAAKtqN,KAJLqqN,IACI7zI,GACFA,EAAY9yC,gBAAgB,qBAEjB6kL,EACX+B,EAAYxlN,EAAI7M,IAAI,kBAAoB+H,GACpCsqN,IACFxlN,EAAIijE,OAAOuiJ,GACXxlN,EAAImJ,OAAOq8M,KAIbE,EAAmB,SAAUxjN,GAC/B,IAAI0gL,EAAU+iC,EACVC,EAAiB,SAAUlmN,EAAM1H,GACnC,GAAI0H,EACF,GACE,GAAIA,IAAS1H,EACX,OAAO,QAEF0H,EAAOA,EAAKvH,aAGrB6rN,GAAiBlwN,EAAO0/B,UAG5B5wB,EAAK5C,EAAIE,OAAO,iDAAiD,SAAUg4B,GACzEA,EAAI0G,gBAAgB,wBAEtB+mL,EAAwB,cAAXzjN,EAAE3M,KAAuB2M,EAAE6C,OAASpF,EAAUC,UAC3D+lN,EAAa3lN,EAAII,EAAEulN,GAAY95H,QAAQ,6BAA6B,GAChE+5H,EAAeD,EAAYpzC,KAC7BszC,IACAjjC,EAAWjjL,EAAUgJ,UAAS,GAC1Bi9M,EAAehjC,EAAU+iC,IAAeC,EAAejmN,EAAUoxF,QAAO,GAAO40H,IACjFP,EAAeO,GAInBlzB,MAEEqzB,EAA+B,SAAU/pN,GAC3C,OAAOonN,GAAyBE,GAAyBvvN,EAAOoU,UAAWnM,KAEzEwpN,EAA2B,WAC7B,IAAK,IAAIrqN,KAAQuoN,EAAe,CAC9B,IAAI//L,EAAS+/L,EAAcvoN,GACvBwoB,EAAO3nB,MACTiE,EAAIijE,OAAOv/C,EAAO3nB,YACX2nB,EAAO3nB,OAIhB8pN,EAAqB,WACvB,IACE/xN,EAAOyP,SAAS2H,YAAY,wBAAwB,GAAO,GAC3D,MAAOoZ,MAGXxwB,EAAO4O,GAAG,QAAQ,WAChBmjN,IACIlgF,GAAIlkH,IAAMkkH,GAAIlkH,IAAM,KACtB3tB,EAAO4O,GAAG,mBAAmB,SAAUR,GACrC,IAAI6C,EAAS7C,EAAE6C,OAAQ3M,EAAW2M,EAAO3M,SACpC4rN,IAAiB,mBAAmB/rN,KAAKG,IAAc0tN,EAA6B/gN,KACtE,IAAb7C,EAAEu/H,QACJ3tI,EAAO6L,UAAUO,OAAO6E,EAAqB,UAAb3M,GAEnB,cAAX8J,EAAE3M,MACJzB,EAAOmV,kBAIbnV,EAAOkM,IAAIuO,KAAKgkK,EAAa,mBAAmB,SAAUrwK,GACxD,IAAI6jN,EAAgB,SAAUrmN,GAC5BmnI,GAAM1nH,iBAAiBrrB,GAAQ,WAC7BA,EAAO6L,UAAUO,OAAOR,OAG5B,GAAIomN,EAA6B5jN,EAAE6C,QAGjC,OAFA7C,EAAEm0B,sBACF0vL,EAAc7jN,EAAE6C,QAGd,mBAAmB9M,KAAKiK,EAAE6C,OAAO3M,YACnC8J,EAAEm0B,iBACuB,QAArBn0B,EAAE6C,OAAOI,SACX4gN,EAAc7jN,EAAE6C,aAKxB,IAAIihN,EAA4Bn/E,GAAM1d,UAAS,SAAUjnH,GAClDpO,EAAOorL,WACVwmC,EAAiBxjN,MAGrBpO,EAAO4O,GAAG,mEAAoEsjN,GAC9ElyN,EAAO4O,GAAG,wBAAwB,SAAUR,GACtCwvE,GAAwC,UAAzBA,EAAYt5E,UAC7B4tN,EAA0B9jN,MAG9BpO,EAAO4O,GAAG,YAAa+vL,GACvB3+L,EAAO4O,GAAG,cAAegiN,MAE3B5wN,EAAO4O,GAAG,SAAU6iN,GACpB,IAAI/tL,EAAU,WACZk6C,EAAc6xI,EAAmB,MAEnC,MAAO,CACLqB,YAAaA,EACbQ,eAAgBA,EAChB3yB,eAAgBA,EAChBizB,iBAAkBA,EAClBluL,QAASA,IAITyuL,GAAgB,SAAUvmN,GAC5B,OAAOu3C,GAAS2zE,sBAAsBlrH,IAASu3C,GAAS4yB,uBAAuBnqE,IAE7EwmN,GAAe,SAAUxmN,EAAMu3D,EAAU14C,GAC3C,MAAO7e,GAAQA,IAASu3D,EAAU,CAChC,GAAI14C,EAAU7e,GACZ,OAAOA,EAETA,EAAOA,EAAKvH,WAEd,OAAO,MAELguN,GAAqB,SAAUv9K,EAASC,EAASnsB,GACnD,IAAI7kB,EAASmiB,EAAK01G,EAalB,GAZA73H,EAAU6kB,EAAI0+B,iBAAiBxS,EAASC,GACxC7uB,EAAM0C,EAAIjb,KAAK2kN,kBACVvuN,GAA+B,SAApBA,EAAQsN,UACtBtN,EAAU6kB,EAAIjb,MAEhBuY,EAAIqsM,kBAAkBxuN,GACtB63H,EAAQh8H,GAAMkb,QAAQoL,EAAI21G,kBAC1BD,EAAQA,EAAM33G,MAAK,SAAUhJ,EAAGG,GAG9B,OAFAH,EAAI3a,KAAK8zG,IAAI9zG,KAAK8oB,IAAInO,EAAEmoB,IAAM2R,EAAS95B,EAAE68B,OAAS/C,IAClD35B,EAAI9a,KAAK8zG,IAAI9zG,KAAK8oB,IAAIhO,EAAEgoB,IAAM2R,EAAS35B,EAAE08B,OAAS/C,IAC3C95B,EAAIG,KAETwgH,EAAM34H,OAAS,EAAG,CACpB8xC,GAAW6mF,EAAM,GAAG9jF,OAAS8jF,EAAM,GAAGx4F,KAAO,EAC7C,IAGE,OAFAld,EAAIssM,YAAY19K,EAASC,GACzB7uB,EAAIoD,UAAS,GACNpD,EACP,MAAOsK,KAGX,OAAO,MAELiiM,GAAgC,SAAUvsM,EAAKi9C,GACjD,IAAIu3G,EAAgBx0J,GAAOA,EAAIw0J,cAAgBx0J,EAAIw0J,gBAAkB,KACrE,OAAOv3H,GAAS4yB,uBAAuBq8I,GAAa13C,EAAev3G,EAAUgvJ,KAAkB,KAAOjsM,GAEpGm4G,GAAc,SAAUvpF,EAASC,EAASnsB,GAC5C,IAAI1C,EAAKs9G,EACLkvF,EAAW9pM,EACf,GAAI8pM,EAAS10F,uBACXwF,EAAQkvF,EAAS10F,uBAAuBlpF,EAASC,GAC7CyuF,IACFt9G,EAAM0C,EAAIhC,cACVV,EAAIW,SAAS28G,EAAMz/E,WAAYy/E,EAAM79G,QACrCO,EAAIoD,UAAS,SAEV,GAAIV,EAAIq1G,oBACb/3G,EAAM0C,EAAIq1G,oBAAoBnpF,EAASC,QAClC,GAAI29K,EAAS/kN,KAAK2kN,gBAAiB,CACxCpsM,EAAMwsM,EAAS/kN,KAAK2kN,kBACpB,IACEpsM,EAAIssM,YAAY19K,EAASC,GACzB7uB,EAAIoD,UAAS,GACb,MAAOkH,GACPtK,EAAMmsM,GAAmBv9K,EAASC,EAASnsB,GAE7C,OAAO6pM,GAA8BvsM,EAAK0C,EAAIjb,MAEhD,OAAOuY,GAELysM,GAAsB,CAAEvrK,UAAWi3E,IAEnCu0F,GAAgB,SAAU5yN,EAAQk8H,GACpC,OAAOt6H,EAAIs6H,GAAQ,SAAUxrD,GAC3B,IAAI1rE,EAAMhF,EAAO2hC,KAAK,oBAAqB,CAAE+uC,MAAOA,IACpD,OAAO1rE,EAAI0rE,QAAUA,EAAQ1rE,EAAI0rE,MAAQA,MAGzCmiJ,GAAqB,CAAED,cAAeA,IAEtCjrK,GAAe,SAAU/jD,EAAU66B,GACrC,IAAI7V,EAAM6V,GAASx/B,EAAW4E,SAC1B+jD,EAAWh/B,EAAIi/B,yBAInB,OAHA/4C,EAAKlL,GAAU,SAAUG,GACvB6jD,EAASr3C,YAAYxM,EAAQmI,UAExBq7C,GAAQN,QAAQW,IAGrBkrK,GAAahrK,GAAU,UAAW,QAAS,QAC3C0mE,GAAW1mE,GAAU,UAAW,SAChCirK,GAAejrK,GAAU,IAAK,KAC9BgmD,GAAU,SAAU9qB,EAAI5gF,GAC1B,IAAIhD,EAAQoS,SAASnS,GAAI2jF,EAAI5gF,GAAM,IACnC,OAAO67C,MAAM7+C,GAAS,EAAIA,GAExB4zN,GAAU,SAAU55H,EAAO7iF,EAAGC,EAAGm8F,EAAI3vB,GAIvC,IAHA,IAAI6W,EAAUiU,GAAQ9qB,EAAI,WACtB8W,EAAUgU,GAAQ9qB,EAAI,WACtB3sE,EAAO+iF,EAAM/iF,OACR48M,EAAKz8M,EAAGy8M,EAAKz8M,EAAIqjF,EAASo5H,IAAM,CAClC58M,EAAK48M,KACR58M,EAAK48M,GAAMzkG,GAASr+D,GAAKwiD,GAAK,KAEhC,IAAK,IAAIugH,EAAK38M,EAAG28M,EAAK38M,EAAIujF,EAASo5H,IAAM,CACvC,IAAIp6H,EAAQziF,EAAK48M,GAAIn6H,QACrBA,EAAMo6H,GAAMD,IAAOz8M,GAAK08M,IAAO38M,EAAIysE,EAAKhqC,GAAQgqC,MAIlDmwI,GAAa,SAAU/5H,EAAO7iF,EAAGC,GACnC,IAAIH,EAAO+iF,EAAM/iF,OACbyiF,EAAQziF,EAAKG,GAAKH,EAAKG,GAAGsiF,QAAU,GACxC,QAASA,EAAMviF,IAEb68M,GAAa,SAAUh6H,EAAO7iF,EAAGC,GACnC,MAAO28M,GAAW/5H,EAAO7iF,EAAGC,GAC1BD,IAEF,OAAOA,GAELmY,GAAW,SAAUrY,GACvB,OAAOuuC,EAAMvuC,GAAM,SAAUwuC,EAAKuuB,GAChC,OAAOA,EAAI0lB,QAAQ71F,OAAS4hD,EAAMuuB,EAAI0lB,QAAQ71F,OAAS4hD,IACtD,IAEDwuK,GAAiB,SAAUj6H,EAAOr1F,GAEpC,IADA,IAAIsS,EAAO+iF,EAAM/iF,OACRG,EAAI,EAAGA,EAAIH,EAAKpT,OAAQuT,IAE/B,IADA,IAAIsiF,EAAQziF,EAAKG,GAAGsiF,QACXviF,EAAI,EAAGA,EAAIuiF,EAAM71F,OAAQsT,IAChC,GAAIgD,GAAGu/E,EAAMviF,GAAIxS,GACf,OAAOsX,EAAOL,KAAK+3M,GAAax8M,EAAGC,IAIzC,OAAO6E,EAAOhC,QAEZi6M,GAAc,SAAUl6H,EAAOm6H,EAAIC,EAAIhjM,EAAIijM,GAG7C,IAFA,IAAIrhH,EAAU,GACV/7F,EAAO+iF,EAAM/iF,OACRG,EAAIg9M,EAAIh9M,GAAKi9M,EAAIj9M,IAAK,CAC7B,IAAIsiF,EAAQziF,EAAKG,GAAGsiF,QAChBtyF,EAAQ+sN,EAAK/iM,EAAKsoE,EAAMtyF,MAAM+sN,EAAI/iM,EAAK,GAAKsoE,EAAMtyF,MAAMgqB,EAAI+iM,EAAK,GACrEnhH,EAAQvrG,KAAK2nH,GAASn4G,EAAKG,GAAGzS,UAAWyC,IAE3C,OAAO4rG,GAELshH,GAAW,SAAUt6H,EAAOp2E,EAAUC,GACxC,IAAIswM,EAAKvwM,EAASzM,IAAKi9M,EAAKxwM,EAASxM,IACjCga,EAAKvN,EAAO1M,IAAKk9M,EAAKxwM,EAAOzM,IAC7B47F,EAAUohH,EAAKC,EAAKH,GAAYl6H,EAAOm6H,EAAIC,EAAIhjM,EAAIijM,GAAMH,GAAYl6H,EAAOm6H,EAAIE,EAAIjjM,EAAIgjM,GAC5F,OAAOV,GAAW15H,EAAMr1F,UAAW2qB,GAAS0jF,GAAUA,IAEpDuhH,GAAiB,SAAUv6H,EAAO/iF,GACpC,IAAIu9M,EAAe56K,GAAQogD,EAAMr1F,WAC7BwqH,EAAYhnE,GAAQL,QAAQ,SAGhC,OAFAqI,GAASg/D,EAAWl4G,GACpBjH,GAAOwkN,EAAcrlG,GACdqlG,GAELC,GAAqB,SAAUz6H,GACjC,OAAOx3F,EAAIw3F,EAAM/iF,QAAQ,SAAU+8D,GACjC,IAAI0lB,EAAQl3F,EAAIwxE,EAAI0lB,SAAS,SAAUD,GACrC,IAAI7V,EAAK7yB,GAAK0oC,GAGd,OAFAxjF,GAAO2tE,EAAI,WACX3tE,GAAO2tE,EAAI,WACJA,KAEL2vB,EAAK35D,GAAQo6B,EAAIrvE,WAErB,OADAwrD,GAASojD,EAAI7Z,GACN6Z,MAGPmhH,GAAY,SAAUh8M,GACxB,IAAIshF,EAAQ05H,GAAW95K,GAAQlhC,GAAW,EAAG,IAM7C,OALAhJ,EAAK8oF,GAAc9/E,EAAU,OAAO,SAAU66F,EAAIn8F,GAChD1H,EAAK8oF,GAAc+a,EAAI,UAAU,SAAU3vB,EAAIzsE,GAC7Cy8M,GAAQ55H,EAAOg6H,GAAWh6H,EAAO7iF,EAAGC,GAAIA,EAAGm8F,EAAI3vB,SAG5C8vI,GAAW15H,EAAMr1F,UAAW2qB,GAAS0qE,EAAM/iF,QAAS+iF,EAAM/iF,SAE/D09M,GAAQ,SAAU36H,GACpB,OAAOu6H,GAAev6H,EAAOy6H,GAAmBz6H,KAE9C46H,GAAa,SAAU56H,EAAOu3F,EAAcsjC,GAC9C,OAAOZ,GAAej6H,EAAOu3F,GAAcl2K,MAAK,SAAUuI,GACxD,OAAOqwM,GAAej6H,EAAO66H,GAAYryN,KAAI,SAAUqhB,GACrD,OAAOywM,GAASt6H,EAAOp2E,EAAUC,UAInCixM,GAAmB,CACrBjtK,QAAS6sK,GACTC,MAAOA,GACPC,WAAYA,IAGVG,GAA0B,SAAUr4J,GACtC,OAAOvsD,EAAKusD,GAAS,SAAU7zD,GAC7B,MAAqB,OAAdb,GAAKa,IAA+B,OAAdb,GAAKa,OAGlCmsN,GAA+B,SAAUt4J,EAAS51C,GACpD,OAAO3W,EAAKusD,GAAS,SAAU7zD,GAC7B,MAAqB,OAAdb,GAAKa,IAAiB0nM,GAAuB1nM,EAAKie,MACxDtM,KAAK7O,EAAS,KAAK,SAAUqnD,GAC9B,OAAO+hK,GAAwBr4J,GAASl6D,KAAI,SAAUyyN,GACpD,MAAO,CACL9sK,GAAQL,QAAQ,MAChBK,GAAQL,QAAQ9/C,GAAKitN,QAEtBt6M,MAAM,QAGTu6M,GAAS,SAAUC,EAAU5uK,GAC/B,IAAI7+C,EAAU89C,EAAMe,GAAM,SAAUd,EAAK58C,GAEvC,OADAmH,GAAOnH,EAAK48C,GACL58C,IACNssN,GACH,OAAO5uK,EAAK1iD,OAAS,EAAI0kD,GAAa,CAAC7gD,IAAYA,GAEjD0tN,GAAqB,SAAUC,GACjC,OAAIpvG,GAAWovG,GACNvwN,GAAOuwN,GAAuB5lN,OAAOg4C,IAAQjtC,KAAK7O,EAAS,KAAK,SAAUulF,GAC/E,MAAO,CACLmkI,EACAnkI,MAIGzpC,GAAO4tK,GAAyB,CAACA,GAAyB,IAGjEC,GAAkB,SAAUvxJ,EAAUj9C,GACxC,IAAIuuM,EAAwBltK,GAAQN,QAAQ/gC,EAAI2yJ,yBAC5C/8G,EAAU2kH,GAAQD,eAAei0C,EAAuBtxJ,GACxDwxJ,EAAe9lN,EAAOitD,GAAS,SAAU7zD,GAC3C,OAAOu8G,GAASv8G,IAAQo8G,GAAUp8G,MAEhC2sN,EAAeR,GAA6Bt4J,EAAS51C,GACrD2uM,EAAcF,EAAa37M,OAAO47M,EAAa3xN,OAAS2xN,EAAeJ,GAAmBC,IAC9F,OAAO7yN,EAAIizN,EAAa77K,KAEtB87K,GAAgB,WAClB,OAAOntK,GAAa,KAElBotK,GAAuB,SAAU5xJ,EAAUj9C,GAC7C,OAAOouM,GAAO/sK,GAAQN,QAAQ/gC,EAAI4vJ,iBAAkB4+C,GAAgBvxJ,EAAUj9C,KAE5E8uM,GAAiB,SAAU5tE,EAASvuD,GACtC,OAAOT,GAAWS,EAAM,QAASlgF,EAAMY,GAAI6tI,KAEzC6tE,GAAmB,SAAU9xJ,EAAU+xJ,GACzC,OAAOF,GAAe7xJ,EAAU+xJ,EAAmB,IAAIz6M,MAAK,SAAU3C,GACpE,IAAIqhF,EAAY+7H,EAAmB,GAC/BzzH,EAAWyzH,EAAmBA,EAAmBjyN,OAAS,GAC1DkyN,EAAiBjB,GAAiBjtK,QAAQnvC,GAC9C,OAAOo8M,GAAiBF,WAAWmB,EAAgBh8H,EAAWsI,GAAU7/F,KAAI,SAAUwzN,GACpF,OAAOztK,GAAa,CAACusK,GAAiBH,MAAMqB,WAE7Cp7M,WAAW86M,KAEZO,GAAuB,SAAUlyJ,EAAU+4D,GAC7C,OAAOA,EAAOj5H,OAAS,GAAKi5H,EAAO,GAAG91G,UAAY0uM,KAAkBC,GAAqB5xJ,EAAU+4D,EAAO,KAExGo5F,GAAS,SAAUnyJ,EAAU+4D,GAC/B,IAAI9Q,EAAgBojE,GAAmBH,4BAA4BnyD,EAAQ/4D,GAC3E,OAAOioD,EAAcnoH,OAAS,EAAIgyN,GAAiB9xJ,EAAUioD,GAAiBiqG,GAAqBlyJ,EAAU+4D,IAE3Gq5F,GAAiB,CAAE55K,KAAM25K,IAEzBzqH,GAAiB,SAAU7qG,GAC7B,OAAOqb,EAAO/U,KAAKtG,EAAO6L,UAAUyc,UAAU1mB,KAAI,SAAUskB,GAC1D,IAAIsvM,EAAMx1N,EAAOkM,IAAI/E,IAAInH,EAAOoU,UAAW,MAAO,CAChD,iBAAkB,MAClB,MAAS,iCACR8R,EAAI4vJ,iBACHrwK,EAAOs6J,GAAK7wJ,KAAKsmN,EAAIl1J,WAEzB,OADAtgE,EAAOkM,IAAImJ,OAAOmgN,GACX/vN,KACNsU,MAAM,KAEP07M,GAAiB,SAAUz1N,EAAQ4G,GACrC,IAEIghD,EAFA1hC,EAAMlmB,EAAO6L,UAAUyc,SAAUotM,EAAS11N,EAAOkM,IAAIiE,OAAO,QAC5D4iC,EAAM/yC,EAAO6L,UAAUw+K,SAEvBnuD,EAAS22F,GAAmBD,cAAc5yN,EAAQkuL,GAAWlyD,UAAUjpF,IAK3E,OAJA6U,EAAWhhD,EAAKiqE,WAAa0kJ,GAAe55K,KAAK4L,GAAQN,QAAQjnD,EAAOoU,WAAY8nH,GAAQhwH,MAAQga,EAAI4vJ,gBACpGluH,GACF8tK,EAAOnlN,YAAYq3C,GAEd5nD,EAAO6L,UAAUi2C,WAAW9/B,UAAU0zM,EAAQ9uN,IAEnDsmB,GAAa,SAAUltB,EAAQ4G,GAQjC,QAPa,IAATA,IACFA,EAAO,IAETA,EAAKvH,KAAM,EACXuH,EAAK+N,OAAS/N,EAAK+N,QAAU,OAC7B/N,EAAKiF,WAAY,EACjBjF,EAAO5G,EAAO2hC,KAAK,mBAAoB/6B,GACnCA,EAAKi9D,qBAEP,OADA7jE,EAAO2hC,KAAK,aAAc/6B,GACnBA,EAAKlF,QAEd,GAAoB,SAAhBkF,EAAK+N,OACP,OAAOk2F,GAAe7qG,GAEtB4G,EAAK4nN,UAAW,EAChB,IAAI9sN,EAAU+zN,GAAez1N,EAAQ4G,GACrC,MAAoB,SAAhBA,EAAK+N,OACAjT,GAEPkF,EAAKlF,QAAU1B,EAAO6L,UAAU0C,cAAgB,GAAK7M,EACrD1B,EAAO2hC,KAAK,aAAc/6B,GACnBA,EAAKlF,UAIdi0N,GAAsB,CAAEzoM,WAAYA,IAEpC0oM,GAAY,SAAUhvN,EAAMlF,GAC9B,OAAOowG,GAASA,GAAS,CAAEn9F,OAAQ,QAAU/N,GAAO,CAClDtH,KAAK,EACLuM,WAAW,EACXnK,QAASA,KAGTm0N,GAAe,SAAU71N,EAAQ4G,GACnC,GAAoB,QAAhBA,EAAK+N,OAAkB,CACzB,IAAI/I,EAAO5L,EAAO4hD,OAAO95C,MAAMlB,EAAKlF,QAASowG,GAAS,CACpDvuC,eAAe,EACf1P,mBAAmB,GAClBjtD,IACH,OAAOwxK,GAAe,CAAEx4J,SAAU5f,EAAO4f,UAAY5f,EAAOq8C,QAAQr6B,UAAUpW,GAE9E,OAAOhF,EAAKlF,SAGZ+6C,GAAa,SAAUz8C,EAAQ0B,EAASkF,GAC1C,IACqCyhL,EAEjCllC,EAAM3D,EAHNs2E,EAAcF,GAAUhvN,EAAMlF,GAC9BwkB,EAAMlmB,EAAO6L,UAAUyc,SACvBM,EAAM5oB,EAAOyP,SAEjB,GAAKqmN,EAAY5L,YACf4L,EAAc91N,EAAO2hC,KAAK,mBAAoBm0L,IAC1CA,EAAYjyJ,sBAFlB,CAQA,GADAniE,EAAUm0N,GAAa71N,EAAQ81N,GAC3B5vM,EAAIwD,WAAY,CAClBhoB,GAAW,8BACPwkB,EAAII,iBAAmBsC,GAAO1C,EAAIw9B,eAAiB96B,EACrDA,EAAIjb,KAAKxI,UAAYzD,GAErBwkB,EAAI+xD,iBAC+B,IAA/BrvD,EAAIjb,KAAKsK,WAAWhV,OACtB2lB,EAAIjb,KAAKxI,UAAYzD,EAEjBwkB,EAAI6vM,yBACN7vM,EAAIwD,WAAWxD,EAAI6vM,yBAAyBr0N,KAE5CyhJ,EAAOv6H,EAAIi/B,yBACX23F,EAAO52H,EAAIuF,cAAc,OACzBg1H,EAAK5yI,YAAYivI,GACjBA,EAAK9iG,UAAYh7C,EACjBwkB,EAAIwD,WAAWy5H,KAIrBklC,EAAYroL,EAAOkM,IAAI7M,IAAI,WAC3B6mB,EAAM0C,EAAIhC,cACVV,EAAI8xD,eAAeqwG,GACnBniK,EAAIq1G,aAAa8sD,GACjBroL,EAAO6L,UAAU0b,OAAOrB,GACxBlmB,EAAOkM,IAAImJ,OAAO,WAClB,IACErV,EAAO6L,UAAU0b,OAAOrB,GACxB,MAAOsK,SAEJ,CACL,IAAIwlM,EAAS9vM,EACT8vM,EAAOngL,OACTjtB,EAAIxR,YAAY,UAAU,EAAO,MACjC4+M,EAASh2N,EAAO6L,UAAUyc,UAExB,OAAOnkB,KAAKzC,IACds0N,EAAOC,UAAU,gCAAkCv0N,GACnD1B,EAAOkM,IAAImJ,OAAO,cAElB2gN,EAAOC,UAAUv0N,GAGhBo0N,EAAY5L,WACflqN,EAAO2hC,KAAK,aAAcm0L,QAjDxB91N,EAAO2hC,KAAK,aAAcm0L,IAoD5BI,GAAsB,CAAEz5K,WAAYA,IAEpC05K,GAAqB,SAAUrzN,EAAMojB,EAAKzB,EAAO2xM,EAAMv2N,GACzD,IAAIwmB,EAAY5B,EAAQyB,EAAII,eAAiBJ,EAAIw9B,aAC7C/9B,EAASlB,EAAQyB,EAAIO,YAAcP,EAAIQ,UAC3C,OAAOrL,EAAO/U,KAAK+f,GAAWzkB,IAAI2lD,GAAQN,SAASrlD,KAAI,SAAUqG,GAC/D,OAAQmuN,GAASlwM,EAAIE,UAA0Dne,EAA9CinD,GAAMjnD,EAAKpI,EAAQoI,EAAK0d,IAAS5L,MAAM9R,MACvEwS,MAAK,SAAUxS,GAChB,OAAOwnD,GAAUxnD,GAAOoT,EAAOL,KAAK/S,GAAO/D,GAAO+D,MACjDrG,KAAI,SAAUqG,GACf,OAAOA,EAAIiE,SACV6N,MAAMjX,IAEPuzN,GAAa,SAAUvzN,EAAMojB,EAAKkwM,GACpC,OAAOD,GAAmBrzN,EAAMojB,GAAK,EAAMkwM,GAAM,SAAUnuN,EAAK0d,GAC9D,OAAOrlB,KAAKC,IAAIsmJ,GAAgB5+I,GAAM0d,OAGtCs3E,GAAS,SAAUn6F,EAAMojB,EAAKkwM,GAChC,OAAOD,GAAmBrzN,EAAMojB,GAAK,EAAOkwM,GAAM,SAAUnuN,EAAK0d,GAC/D,OAAOA,EAAS,EAAIA,EAAS,EAAIA,MAGjC2wM,GAAqB,SAAU1qN,EAAM2qN,GACvC,IAAIC,EAAO5qN,EACX,MAAOA,GAAQu3C,GAASj8B,OAAOtb,IAAyB,IAAhBA,EAAK3I,OAC3C2I,EAAO2qN,EAAW3qN,EAAKuc,YAAcvc,EAAKm3C,gBAE5C,OAAOn3C,GAAQ4qN,GAEbC,GAAY,SAAU3zN,EAAMojB,GAC9B,IAAIje,EAAKqe,EAAgBo9B,EAAcj9B,EAAaC,EACpD,OAAKR,GAGLI,EAAiBJ,EAAII,eACrBo9B,EAAex9B,EAAIw9B,aACnBj9B,EAAcP,EAAIO,YAClBC,EAAYR,EAAIQ,UAChBze,EAAMie,EAAI2yJ,yBACL3yJ,EAAIE,YACHE,IAAmBo9B,GACjBh9B,EAAYD,EAAc,GACxBH,EAAe09B,kBACjB/7C,EAAMqe,EAAerO,WAAWwO,IAIN,IAA5BH,EAAeC,UAA4C,IAA1Bm9B,EAAan9B,WAE9CD,EADEA,EAAerjB,SAAWwjB,EACX6vM,GAAmBhwM,EAAe6B,aAAa,GAE/C7B,EAAejiB,WAGhCq/C,EADgB,IAAdh9B,EACa4vM,GAAmB5yK,EAAaX,iBAAiB,GAEjDW,EAAar/C,WAE1BiiB,GAAkBA,IAAmBo9B,IAChCp9B,EAITre,GAAwB,IAAjBA,EAAIse,SACNte,EAAI5D,WAEN4D,GAlCEnF,GAoCP2iD,GAAoB,SAAUv5C,EAAKga,EAAK4oK,EAAU4nC,GACpD,IAAI9qN,EAAM9I,EACNwiD,EAAiB,GAOrB,GANAxiD,EAAOoJ,EAAIo1C,UACXwtI,EAAW5iL,EAAIyL,UAAUm3K,GAAYunC,GAAWvzN,EAAMojB,EAAKA,EAAIE,WAAYla,EAAI02C,SAC/E8zK,EAASxqN,EAAIyL,UAAU++M,GAAUz5H,GAAOn6F,EAAMojB,EAAKA,EAAIE,WAAYla,EAAI02C,SACnEksI,GAAYA,IAAahsL,GAC3BwiD,EAAez+C,KAAKioL,GAElBA,GAAY4nC,GAAU5nC,IAAa4nC,EAAQ,CAC7C9qN,EAAOkjL,EACP,IAAI5lK,EAAS,IAAI+/H,GAAW6lC,EAAUhsL,GACtC,OAAQ8I,EAAOsd,EAAOC,SAAWvd,IAAS8qN,EACpCxqN,EAAI02C,QAAQh3C,IACd05C,EAAez+C,KAAK+E,GAO1B,OAHI8qN,GAAU5nC,IAAa4nC,GAAUA,IAAW5zN,GAC9CwiD,EAAez+C,KAAK6vN,GAEfpxK,GAELqxK,GAAW,SAAUzqN,EAAKN,EAAMlK,GAClC,OAAO2Z,EAAO/U,KAAKsF,GAAMhK,KAAI,SAAUgK,GACrC,IAAImD,EAAM7C,EAAIi4C,UAAUv4C,GACpBsa,EAAMha,EAAIob,YAOd,OANApB,EAAIW,SAASjb,EAAKvH,WAAY0K,GAC9BmX,EAAIY,OAAOlb,EAAKvH,WAAY0K,EAAM,GAC9BrN,IACFkuM,GAAe1jM,EAAKga,EAAKta,GAAM,GAC/BgkM,GAAe1jM,EAAKga,EAAKta,GAAM,IAE1Bsa,MAIP0wM,GAASh3N,GAAMkP,KACf+nN,GAAsB,SAAU3wM,GAClC,QAASA,EAAI9Z,QAEX0qN,GAAkB,SAAUlrN,GAC9B,SAAUA,IAAQA,EAAKm2B,gBAAkB2kH,GAAWn/F,GAAQN,QAAQr7C,EAAKm2B,eAAgBwlB,GAAQN,QAAQr7C,KAEvGmrN,GAAe,SAAU7wM,GAC3B,QAAKA,MAEM2wM,GAAoB3wM,IAGtB4wM,GAAgB5wM,EAAII,iBAAmBwwM,GAAgB5wM,EAAIw9B,gBAGlEszK,GAAc,SAAU9qN,EAAK65B,EAAK+b,EAAY9hD,GAChD,IAAIi3N,EAAiBv4B,EACjBw4B,EAAeC,EAAeC,EAC9BlvM,EAAoB,SAAUtc,EAAM+Z,GACtC,IAAIO,EAAMha,EAAIob,YACT1b,GAIHsa,EAAIW,SAASjb,EAAM+Z,GACnBO,EAAIY,OAAOlb,EAAM+Z,GACjB4B,EAAOrB,GACPoD,GAAS,KANTsmL,GAAe1jM,EAAKga,EAAKlmB,EAAOoU,WAAW,GAC3CmT,EAAOrB,KAQPgH,EAAa,SAAUtmB,GACzB,OAAO+uN,GAAoBzoM,WAAWltB,EAAQ4G,IAE5C61C,EAAa,SAAU/6C,EAASkF,GAClC,OAAOsvN,GAAoBz5K,WAAWz8C,EAAQ0B,EAASkF,IAErDiO,EAAW,SAAUuhN,GACvB,OAAOC,GAAWr2N,EAAOoU,UAAWkU,IAAU8tM,IAE5CiB,EAAW,SAAUjB,GACvB,OAAOn5H,GAAOj9F,EAAOoU,UAAWkU,IAAU8tM,IAExCvgK,EAAc,SAAUp0D,EAAMs6C,GAChC,OAAOk7K,EAAgBphK,YAAYp0D,EAAMs6C,IAEvC+Z,EAAiB,SAAUjS,GAC7B,OAAOozK,EAAgBnhK,eAAejS,IAEpCz3C,EAAS,SAAUR,EAAMlK,GAE3B,OADAi1N,GAASzqN,EAAKN,EAAMlK,GAASoN,KAAKyY,GAC3B3b,GAEL2C,EAAc,WAChB,IAAI2X,EAAMoC,IAAUyqB,EAAMs3I,IAC1B,SAAKnkK,GAAOA,EAAI2vB,QAGZ3vB,EAAIoxM,iBAC6C,IAA5CpxM,EAAIoxM,iBAAiB,aAAcpxM,IAEpC6sB,GAAO7sB,EAAIE,YAEjBkD,EAAW,SAAU84I,GACvB,IAAIl8I,EAAMoC,IACVpC,EAAIoD,WAAW84I,GACf76I,EAAOrB,IAELmkK,EAAS,WACX,OAAOtkJ,EAAIg5F,aAAeh5F,EAAIg5F,eAAiBh5F,EAAIliC,SAASgI,WAE1Dyc,EAAS,WACX,IAAIzc,EAAWqa,EAAKje,EAAK2gB,EACrB2uM,EAA2B,SAAUC,EAAKC,EAAaC,GACzD,IACE,OAAOD,EAAYE,sBAAsBH,EAAKE,GAC9C,MAAOlnM,GACP,OAAQ,IAGZ,IAAKuV,EACH,OAAO,KAGT,GADAnd,EAAMmd,EAAIliC,SACS,qBAAR+kB,GAA+B,OAARA,EAChC,OAAO,KAET,QAAwBtO,IAApBta,EAAO6jD,WAA2D,IAAjCuiJ,GAAYzoD,SAAS39I,GAAmB,CAC3E,IAAI6jD,EAAWi3I,GAAkBxyK,OAAOtoB,GACxC,GAAI6jD,EAAS/pC,SACX,OAAO+pC,EAASjiD,KAAI,SAAUqa,GAC5B,OAAO42M,GAAmBD,cAAc5yN,EAAQ,CAACic,IAAI,MACpDlC,MAAM6O,EAAIhC,eAGjB,KACO/a,EAAYw+K,OAAclnI,GAASknG,iBAAiBx+I,EAAUk0H,cAE/D75G,EADEra,EAAU8zH,WAAa,EACnB9zH,EAAUg0H,WAAW,GAErBh0H,EAAU+a,YAAc/a,EAAU+a,cAAgBgC,EAAIhC,eAGhE,MAAO4J,IAmBT,OAjBAtK,EAAM2sM,GAAmBD,cAAc5yN,EAAQ,CAACkmB,IAAM,GACjDA,IACHA,EAAM0C,EAAIhC,YAAcgC,EAAIhC,cAAgBgC,EAAIjb,KAAK2kN,mBAEnDpsM,EAAIW,UAA4C,IAAhCX,EAAII,eAAeC,UAAkBL,EAAIE,YAC3Dne,EAAMiE,EAAIo1C,UACVp7B,EAAIW,SAAS5e,EAAK,GAClBie,EAAIY,OAAO7e,EAAK,IAEdivN,GAAiBC,IACsD,IAArEI,EAAyBrxM,EAAI0xM,eAAgB1xM,EAAKgxM,IAAyF,IAAjEK,EAAyBrxM,EAAI2xM,WAAY3xM,EAAKgxM,GAC1HhxM,EAAMixM,GAEND,EAAgB,KAChBC,EAAgB,OAGbjxM,GAELqB,EAAS,SAAUrB,EAAKs6G,GAC1B,IAAIztF,EAAKnnC,EAAM5G,EACf,GAAK+xN,GAAa7wM,GAAlB,CAGA,IAAI4xM,EAAUjB,GAAoB3wM,GAAOA,EAAM,KAC/C,GAAI4xM,EAAJ,CACEX,EAAgB,KAChB,IACEW,EAAQ1rN,SACR,MAAOokB,SAJX,CAcA,GANAuiB,EAAMs3I,IACNrlL,EAAMhF,EAAO2hC,KAAK,oBAAqB,CACrC+uC,MAAOxqD,EACPs6G,QAASA,IAEXt6G,EAAMlhB,EAAI0rE,MACN39B,EAAK,CACPokL,EAAgBjxM,EAChB,IACE6sB,EAAIisF,kBACJjsF,EAAIksF,SAAS/4G,GACb,MAAOsK,KAEO,IAAZgwG,GAAqBztF,EAAIxwC,SAC3BwwC,EAAIzpB,SAASpD,EAAIw9B,aAAcx9B,EAAIQ,WACnCqsB,EAAIxwC,OAAO2jB,EAAII,eAAgBJ,EAAIO,cAErCywM,EAAgBnkL,EAAI4sF,WAAa,EAAI5sF,EAAI8sF,WAAW,GAAK,KAEtD35G,EAAIE,WAAaF,EAAII,iBAAmBJ,EAAIw9B,eAAgB3Q,EAAIssF,kBAAqBwS,GAAIlkH,IACxFzH,EAAIQ,UAAYR,EAAIO,YAAc,GAChCP,EAAII,eAAe09B,kBACrBp4C,EAAOsa,EAAII,eAAerO,WAAWiO,EAAIO,aACrC7a,GAAyB,QAAjBA,EAAKyF,UACf0hC,EAAIssF,iBAAiBn5G,EAAII,eAAgBJ,EAAIO,YAAaP,EAAIw9B,aAAcx9B,EAAIQ,WAC5EqsB,EAAIgtF,aAAe75G,EAAII,gBAAkBysB,EAAIitF,YAAc95G,EAAIw9B,cACjE3Q,EAAIssF,iBAAiBzzH,EAAM,EAAGA,EAAM,KAM9C5L,EAAO2hC,KAAK,yBAA0B,CACpC+uC,MAAOxqD,EACPs6G,QAASA,OAGTu3F,EAAU,SAAU9vN,GAEtB,OADAw0C,EAAWvwC,EAAI2tJ,aAAa5xJ,IACrBA,GAEL6D,EAAU,WACZ,OAAO2qN,GAAUz2N,EAAOoU,UAAWkU,MAEjC0vM,EAAsB,SAAUlpC,EAAU4nC,GAC5C,OAAOjxK,GAAkBv5C,EAAKoc,IAAUwmK,EAAU4nC,IAEhDx9J,EAAY,WACd,IACI++J,EAAaC,EADbnlL,EAAMs3I,IAEV,QAAKt3I,GAAQA,EAAIgtF,YAAehtF,EAAIitF,aAGpCi4F,EAAc/rN,EAAIob,YAClB2wM,EAAYpxM,SAASksB,EAAIgtF,WAAYhtF,EAAIktF,cACzCg4F,EAAY3uM,UAAS,GACrB4uM,EAAahsN,EAAIob,YACjB4wM,EAAWrxM,SAASksB,EAAIitF,UAAWjtF,EAAImtF,aACvCg4F,EAAW5uM,UAAS,GACb2uM,EAAYN,sBAAsBM,EAAYL,eAAgBM,IAAe,IAElFn/C,EAAY,WACd,IAAI7yJ,EAAMoC,IACNyqB,EAAMs3I,IACV,IAAK6D,GAAWD,kBAAkBl7I,IAAQ88J,GAAa7vM,GAAS,CAC9D,IAAI44L,EAAUC,GAAe9f,UAAU7sK,EAAKga,GAI5C,OAHA0yK,EAAQ9pL,MAAK,SAAU8pL,GACrBrxK,EAAOqxK,EAAS1/H,QAEX0/H,EAAQ7+K,MAAMmM,GAEvB,OAAOA,GAELiyM,EAAkB,SAAU3uN,EAAUjG,GACxC,IAAI60N,EA0CJ,OAzCKhB,IACHA,EAAsB,GACtBgB,EAAmB,GACnBp4N,EAAO4O,GAAG,cAAc,SAAUR,GAChC,IAAIxC,EAAOwC,EAAErK,QAAS+3D,EAAU5vD,EAAIqH,WAAW3H,EAAM,KAAMM,EAAIo1C,WAAY+2K,EAAmB,GAC9FzB,GAAOQ,GAAqB,SAAU/vN,EAAWmC,GAC/CotN,GAAO96J,GAAS,SAAUlwD,GACxB,GAAIM,EAAIiI,GAAGvI,EAAMpC,GAYf,OAXK4uN,EAAiB5uN,KACpBotN,GAAOvvN,GAAW,SAAU9D,GAC1BA,GAAS,EAAM,CACbqI,KAAMA,EACNpC,SAAUA,EACVsyD,QAASA,OAGbs8J,EAAiB5uN,GAAYnC,GAE/BgxN,EAAiB7uN,GAAYnC,GACtB,QAIbuvN,GAAOwB,GAAkB,SAAU/wN,EAAWmC,GACvC6uN,EAAiB7uN,YACb4uN,EAAiB5uN,GACxBotN,GAAOvvN,GAAW,SAAU9D,GAC1BA,GAAS,EAAO,CACdqI,KAAMA,EACNpC,SAAUA,EACVsyD,QAASA,eAOhBs7J,EAAoB5tN,KACvB4tN,EAAoB5tN,GAAY,IAElC4tN,EAAoB5tN,GAAU3C,KAAKtD,GAC5B4hE,GAEL8uH,EAAqB,WACvB,IAAID,EACApoL,EAAOM,EAAIo1C,UACf,MAAO11C,GAA0B,SAAlBA,EAAKtH,SAAqB,CACvC,GAAIsH,EAAK8pM,aAAe9pM,EAAKu5B,aAAc,CACzC6uJ,EAAkBpoL,EAClB,MAEFA,EAAOA,EAAKvH,WAEd,OAAO2vL,GAELpzG,EAAiB,SAAU34E,EAAKwrL,GAClC,OAAOa,GAAeX,sBAAsB3zL,EAAQiI,EAAKwrL,IAEvDsiB,EAAe,SAAUjhK,EAASC,GACpC,OAAOxtB,EAAOorM,GAAoBvrK,UAAUtS,EAASC,EAAS/0C,EAAOyP,YAEnEq8F,EAAwB,WAC1B,IAAI5lF,EAAMoC,IACV,OAAOpC,EAAIE,UAAY0/I,GAAgBP,eAAer/I,GAAK21G,iBAAiB,GAAK31G,EAAI4lF,yBAEnFpoE,EAAU,WACZqC,EAAMmxL,EAAgBC,EAAgB,KACtCz4B,EAAiBh7J,WAEfyhC,EAAU,CACZ8xJ,gBAAiB,KACjBv4B,iBAAkB,KAClBxyL,IAAKA,EACL65B,IAAKA,EACL+b,WAAYA,EACZ9hD,OAAQA,EACRspB,SAAUA,EACVpB,kBAAmBA,EACnBgF,WAAYA,EACZuvB,WAAYA,EACZoZ,YAAaA,EACbC,eAAgBA,EAChB1pD,OAAQA,EACRmC,YAAaA,EACb2qD,UAAWA,EACX6+J,QAASA,EACTjsN,QAASA,EACTu+K,OAAQA,EACR9iK,OAAQA,EACRe,OAAQA,EACRzT,SAAUA,EACVooF,OAAQo6H,EACR5xK,kBAAmBuyK,EACnBj/C,UAAWA,EACXo/C,gBAAiBA,EACjBlkC,mBAAoBA,EACpBrzG,eAAgBA,EAChBm1H,aAAcA,EACdjqG,sBAAuBA,EACvBpoE,QAASA,GAMX,OAJAuzL,EAAkB7H,GAAkBjqJ,GACpCu5H,EAAmB8wB,GAAiBrqJ,EAASnlE,GAC7CmlE,EAAQ8xJ,gBAAkBA,EAC1B9xJ,EAAQu5H,iBAAmBA,EACpBv5H,IAIR,SAAUgqJ,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,IAAItyL,GAAO,SAAUpvB,EAAWyjG,GAC9B,OAAOzjG,IAAco4J,GAAW8H,UAAYz8D,EAAUvpE,UAAYupE,GAEhEonH,GAAS,SAAU7qN,EAAWwoK,EAAa1hI,GAC7C,OAAO9mC,IAAco4J,GAAW2H,SAAWyI,EAAY9sJ,KAAKorB,GAAO0hI,EAAY1jF,KAAKh+C,IAElFgkL,GAAe,SAAU95L,EAAOhxB,EAAW+qN,EAAYn6C,GACzD,OAAIl7H,GAASZ,KAAK87H,EAAQvyK,QAAQ2B,IAAco4J,GAAW2H,WAClD2hD,GAAUsJ,IAC+B,IAAvCltD,GAAcitD,EAAYn6C,GAC5B8wC,GAAUuJ,MAEVvJ,GAAUwJ,MAGjBC,GAAoB,SAAUnuM,EAAWhd,EAAWgxB,EAAOha,GAC7D,IACwB45J,EADpBpI,EAAcvI,GAAYjvI,GAC1B+5L,EAAa/zM,EACbysF,EAAY,GAChB,MAAOsnH,EAAY,CAEjB,GADAn6C,EAAUi6C,GAAO7qN,EAAWwoK,EAAauiD,IACpCn6C,EACH,MAEF,GAAIl7H,GAASZ,KAAK87H,EAAQvyK,SAAQ,IAChC,OAAI2B,IAAco4J,GAAW2H,SACpB,CACLt8D,UAAWr0E,GAAKpvB,EAAWyjG,GAAWl4F,OAAO,CAACqlK,IAC9Cw6C,UAAW1J,GAAUsJ,GACrBK,QAASz9M,EAAOL,KAAKqjK,IAGhB,CACLntE,UAAWr0E,GAAKpvB,EAAWyjG,GAC3B2nH,UAAW1J,GAAUsJ,GACrBK,QAASz9M,EAAOL,KAAKqjK,IAI3B,GAAKA,EAAQ/Y,YAAb,CAIA,GAAI76I,EAAU+tM,EAAYn6C,GAAU,CAClC,IAAIw6C,EAAYN,GAAa95L,EAAOhxB,EAAW+qN,EAAYn6C,GAC3D,MAAO,CACLntE,UAAWr0E,GAAKpvB,EAAWyjG,GAC3B2nH,UAAWA,EACXC,QAASz9M,EAAOL,KAAKqjK,IAGzBntE,EAAUrqG,KAAKw3K,GACfm6C,EAAan6C,OAZXm6C,EAAan6C,EAcjB,MAAO,CACLntE,UAAWr0E,GAAKpvB,EAAWyjG,GAC3B2nH,UAAW1J,GAAU4J,IACrBD,QAASz9M,EAAOhC,SAGhB2/M,GAA2B,SAAUvrN,EAAWwrN,EAAwBx6L,EAAOha,GACjF,OAAOw0M,EAAuBx6L,EAAOha,GAAOq0M,QAAQl3N,KAAI,SAAU2yC,GAChE,IAAI28D,EAAY+nH,EAAuBx6L,EAAO8V,GAAK28D,UACnD,OAAOzjG,IAAco4J,GAAW8H,UAAYz8D,EAAUl4F,OAAOu7B,GAAO,CAACA,GAAKv7B,OAAOk4F,MAChFn3F,MAAM,KAEPm/M,GAAyC,SAAUhoH,EAAW36F,GAChE,OAAOquC,EAAMssD,GAAW,SAAUrsD,EAAK8xH,GACrC,OAAO9xH,EAAIjrC,MAAK,WACd,OAAOyB,EAAOL,KAAK27J,MAClB,SAAUsH,GACX,OAAOz2H,GAAM7nC,GAAKs+J,EAAQpiD,kBAAmBl8G,GAAKg3J,EAAO96C,mBAAmB,SAAUv3F,EAAU60L,GAC9F,IAAIC,EAAW94N,KAAK8zG,IAAI79F,EAAI+tB,EAASnB,MACjCk2L,EAAU/4N,KAAK8zG,IAAI79F,EAAI4iN,EAAQh2L,MACnC,OAAOk2L,GAAWD,EAAWziD,EAASsH,KACrC1jK,GAAGsqC,QAEPxpC,EAAOhC,SAERigN,GAAgC,SAAUpoH,EAAW38D,GACvD,OAAO50B,GAAK40B,EAAIsnF,kBAAkBphH,MAAK,SAAU8+M,GAC/C,OAAOL,GAAuChoH,EAAWqoH,EAAWp2L,UAGpEq2L,GAAgC7gN,EAAMigN,GAAmBxzD,GAAc1C,SAAU,GACjF+2D,GAA4B9gN,EAAMigN,GAAmBxzD,GAAcxC,QAAS,GAC5E82D,GAAgB,SAAUj7L,EAAO8V,GACnC,OAAOilL,GAA8B/6L,EAAO8V,GAAKukL,QAAQt/M,UAEvDmgN,GAAe,SAAUl7L,EAAO8V,GAClC,OAAOklL,GAA0Bh7L,EAAO8V,GAAKukL,QAAQt/M,UAEnDogN,GAAoBjhN,EAAMqgN,IAA2B,EAAGQ,IACxDK,GAAoBlhN,EAAMqgN,GAA0B,EAAGS,IACvDK,GAAwB,SAAUr7L,GACpC,OAAOgwI,GAAYC,gBAAgBjwI,GAAO78B,KAAI,SAAU2yC,GACtD,MAAO,CAACA,GAAKv7B,OAAOygN,GAA0Bh7L,EAAO8V,GAAK28D,cACzDn3F,MAAM,KAEPggN,GAAuB,SAAUt7L,GACnC,OAAOgwI,GAAYE,eAAelwI,GAAO78B,KAAI,SAAU2yC,GACrD,OAAOilL,GAA8B/6L,EAAO8V,GAAK28D,UAAUl4F,OAAOu7B,MACjEx6B,MAAM,KAGPigN,GAA2B72K,GAAS4yB,uBACpCkkJ,GAAoBj3D,GACpBk3D,GAA4B,SAAUzsN,EAAWzN,EAAQu1L,EAAc7kH,GACzE,IAAI6lJ,EAAW9oN,IAAco4J,GAAW2H,SACpCgoB,EAAiC+gC,EAAWnzC,GAA+BC,GAC/E,IAAK3yG,EAAMtqD,UAAW,CACpB,IAAIxa,EAAOquN,GAAkBvpJ,GAC7B,GAAIspJ,GAAyBpuN,GAC3B,OAAO6oL,GAAUhnL,EAAWzN,EAAQ4L,EAAM6B,IAAco4J,GAAW8H,WAAW,GAGlF,IAAIwsD,EAA0B/4D,GAA6B1wF,GACvDs0F,EAAgBoH,GAA2B3+J,EAAWzN,EAAOoU,UAAWs8D,GAC5E,GAAI8kH,EAA+BxwB,GACjC,OAAO/nC,GAAWj9H,EAAQglK,EAAcl5J,SAASyqN,IAEnD,IAAI9gC,EAAoBhY,GAAYH,kBAAkBi5C,EAAUhhC,EAAavwB,IAC7E,IAAKywB,EACH,OAAI0kC,EACKzpJ,EAEF,KAET,GAAI8kH,EAA+BC,GACjC,OAAOhB,GAAUhnL,EAAWzN,EAAQy1L,EAAkB3pL,SAASyqN,GAAWA,GAAU,GAEtF,IAAIphC,EAAoBI,EAAaE,GACrC,OAAIN,GAAqBK,EAA+BL,IAClDzoB,GAAsB+oB,EAAmBN,GACpCV,GAAUhnL,EAAWzN,EAAQm1L,EAAkBrpL,SAASyqN,GAAWA,GAAU,GAGpF4D,EACKrlC,GAAiB90L,EAAQy1L,EAAkBpwB,WAAW,GAExD,MAEL+0D,GAA0B,SAAU3sN,EAAWzN,EAAQq6N,EAAU3pJ,GACnE,IAAIs0F,EAAes1D,EAAeC,EAC9BC,EAAqBC,EAAiB3lL,EACtC4lL,EAAOC,EAAOC,EAYlB,GAXAA,EAA2BX,GAAkBvpJ,GAC7Cs0F,EAAgBoH,GAA2B3+J,EAAWzN,EAAOoU,UAAWs8D,GACxE4pJ,EAAgBD,EAASr6N,EAAOoU,UAAWu9L,GAAY,GAAI3sC,GAC3Du1D,EAAoB1rN,EAAOyrN,EAAe1oB,GAAO,IACjD6oB,EAAkB74E,GAAStrI,KAAK0uJ,EAAcnpC,mBAC1CunD,GAA6Bpe,IAAkBue,GAAcve,MAC/D41D,EAA2B51D,EAAcl5J,YAEvCu3K,GAA4Bre,IAAkBwe,GAAaxe,MAC7D41D,EAA2B51D,EAAcl5J,SAAQ,KAE9C2uN,EACH,OAAO,KAIT,GAFA3lL,EAAU2lL,EAAgBt3L,KAC1Bq3L,EAAsBtoB,GAAsBqoB,EAAmBzlL,GAC3D0lL,GACER,GAAyBQ,EAAoB5uN,MAG/C,OAFA8uN,EAAQp6N,KAAK8zG,IAAIt/D,EAAU0lL,EAAoBr3L,MAC/Cw3L,EAAQr6N,KAAK8zG,IAAIt/D,EAAU0lL,EAAoB92H,OACxC+wF,GAAUhnL,EAAWzN,EAAQw6N,EAAoB5uN,KAAM8uN,EAAQC,GAAO,GAGjF,GAAIC,EAA0B,CAC5B,IAAIC,EAAiBrpB,GAAe/jM,EAAWzN,EAAOoU,UAAWu9L,GAAY,GAAIipB,GAEjF,GADAJ,EAAsBtoB,GAAsBrjM,EAAOgsN,EAAgBjpB,GAAO,IAAK98J,GAC3E0lL,EACF,OAAO1lC,GAAiB90L,EAAQw6N,EAAoB3iL,SAASwtH,WAAW,GAG1E,GADAm1D,EAAsB54E,GAAStrI,KAAKzH,EAAOgsN,EAAgBjpB,GAAO,KAC9D4oB,EACF,OAAO1lC,GAAiB90L,EAAQw6N,EAAoB3iL,SAASwtH,WAAW,KAI1E9xG,GAAkB,SAAUvzD,GAC9B,IAAIo8C,EAAYp8C,EAAOkM,IAAIiE,OAAOtP,GAASg7K,mBAAmB77K,IAI9D,QAHK6xI,GAAIlkH,IAAMkkH,GAAIlkH,IAAM,MACvByuB,EAAUj3C,UAAY,2BAEjBi3C,GAEL0+K,GAAe,SAAU96N,EAAQyN,EAAWijE,GAC9C,IAAI4vI,EAAKtqC,EAAUjhH,EACfkhH,EAAcvI,GAAY1tK,EAAOoU,WACjCihL,EAA6B18K,EAAM6zJ,GAAwByJ,EAAY9sJ,MACvEmsK,EAA6B38K,EAAM6zJ,GAAwByJ,EAAY1jF,MAC3E,GAAI7hB,EAAMtqD,WAAapmB,EAAOC,SAAS4zD,kBAAmB,CAExD,GADAysJ,EAAMtgN,EAAOkM,IAAIyL,UAAU+4D,EAAMpqD,eAAgB,QAC5Cg6L,EACH,OAGAtqC,EADgB,IAAdvoK,EACS4nL,EAA2BvvB,GAAgBP,eAAe70F,IAE1D4kH,EAA2BxvB,GAAgBP,eAAe70F,IAElEslG,IACHjhH,EAAWxB,GAAgBvzD,GACT,IAAdyN,EACFzN,EAAOsM,EAAEg0M,GAAK35M,MAAMouD,GAEpB/0D,EAAOsM,EAAEg0M,GAAK19M,OAAOmyD,GAEvB/0D,EAAO6L,UAAUO,OAAO2oD,GAAU,GAClC/0D,EAAO6L,UAAUyd,cAInByxM,GAAqB,SAAU/6N,EAAQwgI,GACzC,IAGIw6F,EAHA/kD,EAAcvI,GAAY1tK,EAAOoU,WACjCihL,EAA6B18K,EAAM6zJ,GAAwByJ,EAAY9sJ,MACvEmsK,EAA6B38K,EAAM6zJ,GAAwByJ,EAAY1jF,MAEvE9kF,EAAY+yH,EAAUqlC,GAAW2H,SAAW3H,GAAW8H,UACvD4nB,EAAe/0D,EAAU60D,EAA6BC,EACtD5kH,EAAQ1wE,EAAO6L,UAAUyc,SAE7B,OADA0yM,EAAWd,GAA0BzsN,EAAWzN,EAAQu1L,EAAc7kH,GAClEsqJ,IAGJA,EAAWF,GAAa96N,EAAQyN,EAAWijE,GACvCsqJ,GAGG,OAELC,GAAmB,SAAUj7N,EAAQsiG,GACvC,IAAI04H,EACAvtN,EAAY60F,EAAO,GAAK,EACxB+3H,EAAW/3H,EAAOgvG,GAAYF,GAC9B1gI,EAAQ1wE,EAAO6L,UAAUyc,SAE7B,OADA0yM,EAAWZ,GAAwB3sN,EAAWzN,EAAQq6N,EAAU3pJ,GAC5DsqJ,IAGJA,EAAWF,GAAa96N,EAAQyN,EAAWijE,GACvCsqJ,GAGG,OAELE,GAAQ,SAAUl7N,EAAQwgI,GAC5B,OAAO,WACL,IAAIn5G,EAAS0zM,GAAmB/6N,EAAQwgI,GACxC,QAAIn5G,IACF2tK,GAAYh1L,EAAQqnB,IACb,KAMT8zM,GAAQ,SAAUn7N,EAAQsiG,GAC5B,OAAO,WACL,IAAIj7E,EAAS4zM,GAAiBj7N,EAAQsiG,GACtC,QAAIj7E,IACF2tK,GAAYh1L,EAAQqnB,IACb,KAMT+zM,GAAgB,SAAU56F,GAC5B,OAAO,SAAUjsF,GACf,OAAOisF,EAAU6iD,GAA4B9uI,GAAO6uI,GAA6B7uI,KAGjF8mL,GAAqB,SAAUr7N,EAAQwgI,GACzC,OAAO,WACL,IAAIl6H,EAAOk6H,EAAUslC,GAAgBN,aAAaxlK,EAAO6L,UAAUyc,UAAYw9I,GAAgBP,eAAevlK,EAAO6L,UAAUyc,UAC3H8L,EAASosG,EAAUi5F,GAA0Bz5N,EAAOoU,UAAW9N,GAAQkzN,GAA8Bx5N,EAAOoU,UAAW9N,GACvHI,EAAK85H,EAAUlqH,GAAK8d,EAAO88E,WAAavxF,GAAKyU,EAAO88E,WACxD,OAAOxqG,EAAGmI,OAAOusN,GAAc56F,IAAU5mH,KAAK7O,GAAS,IAAQ,SAAUwpC,GAEvE,OADAv0C,EAAO6L,UAAU0b,OAAOgtB,EAAI8wH,YACrB,OAKTi2D,GAAU,SAAU95L,EAAM5b,GAC5B,MAAO,CACLud,KAAM3B,EAAK2B,KAAOvd,EAClBwd,IAAK5B,EAAK4B,IAAMxd,EAChB89E,MAAOliE,EAAKkiE,MAAgB,EAAR99E,EACpBkyB,OAAQtW,EAAKsW,OAAiB,EAARlyB,EACtBmI,MAAOyT,EAAKzT,MAAQnI,EACpBoI,OAAQwT,EAAKxT,OAASpI,IAGtB21M,GAAa,SAAUC,EAAeC,GACxC,OAAOhhN,GAAKghN,GAAK,SAAUz4I,GACzB,IAAIxhD,EAAO85L,GAAQtrK,GAAQgzB,EAAG8oB,0BAA2B,GACzD,MAAO,CACL,CACEv1F,EAAGirB,EAAK2B,KACR3sB,EAAGglN,EAAch6L,GACjBq3D,KAAM7V,GAER,CACEzsE,EAAGirB,EAAKkiE,MACRltF,EAAGglN,EAAch6L,GACjBq3D,KAAM7V,QAKV04I,GAAoB,SAAUC,EAASplN,EAAGC,GAC5C,OAAOouC,EAAM+2K,GAAS,SAAU92K,EAAK+2K,GACnC,OAAO/2K,EAAIjrC,MAAK,WACd,OAAOyB,EAAOL,KAAK4gN,MAClB,SAAUC,GACX,IAAIC,EAAUx7N,KAAKo5B,KAAKp5B,KAAK8zG,IAAIynH,EAAUtlN,EAAIA,GAAKjW,KAAK8zG,IAAIynH,EAAUrlN,EAAIA,IACvE6iN,EAAU/4N,KAAKo5B,KAAKp5B,KAAK8zG,IAAIwnH,EAAUrlN,EAAIA,GAAKjW,KAAK8zG,IAAIwnH,EAAUplN,EAAIA,IAC3E,OAAO6E,EAAOL,KAAKq+M,EAAUyC,EAAUF,EAAYC,QAEpDxgN,EAAOhC,SAER0iN,GAAmB,SAAUP,EAAeQ,EAAgB5iI,EAAO7iF,EAAGC,GACxE,IAAIsiF,EAAQlB,GAAcrwC,GAAQN,QAAQmyC,GAAQ,iBAAiBx3F,KAAI,SAAUwM,GAC/E,OAAOA,EAAElC,SAEPyvN,EAAU9sN,EAAO0sN,GAAWC,EAAe1iI,IAAQ,SAAUmjI,GAC/D,OAAOD,EAAeC,EAAQzlN,MAEhC,OAAOklN,GAAkBC,EAASplN,EAAGC,GAAG5U,KAAI,SAAUq6N,GACpD,OAAOA,EAAOpjI,SAGdqjI,GAAiB,SAAU16L,GAC7B,OAAOA,EAAKsW,QAEVqkL,GAAc,SAAU36L,GAC1B,OAAOA,EAAK4B,KAEVg5L,GAAY,SAAUH,EAAQzlN,GAChC,OAAOylN,EAAOzlN,EAAIA,GAEhB6lN,GAAY,SAAUJ,EAAQzlN,GAChC,OAAOylN,EAAOzlN,EAAIA,GAEhB8lN,GAAsB3jN,EAAMojN,GAAkBG,GAAgBE,IAC9DG,GAAsB5jN,EAAMojN,GAAkBI,GAAaE,IAC3DG,GAAiC,SAAUpjI,EAAO7kD,GACpD,OAAO50B,GAAK40B,EAAIsnF,kBAAkBphH,MAAK,SAAU+mB,GAC/C,OAAO86L,GAAoBljI,EAAO53D,EAAK2B,KAAM3B,EAAK4B,QACjD3oB,MAAK,SAAUo+E,GAChB,OAAOygI,GAA8BS,GAAqBlhI,GAAOtkD,OAGjEkoL,GAAiC,SAAUrjI,EAAO7kD,GACpD,OAAOj+B,GAAKi+B,EAAIsnF,kBAAkBphH,MAAK,SAAU+mB,GAC/C,OAAO+6L,GAAoBnjI,EAAO53D,EAAK2B,KAAM3B,EAAK4B,QACjD3oB,MAAK,SAAUo+E,GAChB,OAAOygI,GAA8BQ,GAAsBjhI,GAAOtkD,OAIlEmoL,GAAe,SAAU9D,EAAmBn6L,EAAOk+L,GACrD,OAAOA,EAAS7D,QAAQl3N,KAAI,SAAUg7N,GACpC,OAAOhE,EAAkBn6L,EAAOm+L,GAAU9D,QAAQh/M,YACjDC,OAAM,IAEP8iN,GAAsB,SAAUF,GAClC,OAAOA,EAAS9D,YAAc1J,GAAUwJ,MAAsC,IAA9BgE,EAASzrH,UAAUjuG,QAEjE65N,GAAoB,SAAUH,GAChC,OAAOA,EAAS9D,YAAc1J,GAAUsJ,IAAoC,IAA9BkE,EAASzrH,UAAUjuG,QAE/D85N,GAAoB,SAAUnE,EAAmBn6L,EAAO8V,GAC1D,IAAIooL,EAAW/D,EAAkBn6L,EAAO8V,GACxC,OAAIsoL,GAAoBF,KAAcx5K,GAASZ,KAAKhO,EAAIzoC,YAAcgxN,GAAkBH,IAC9ED,GAAa9D,EAAmBn6L,EAAOk+L,GAExCA,EAAS7D,QAAQt/M,UAGxBwjN,GAAyBrkN,EAAMokN,GAAmBvD,IAClDyD,GAAwBtkN,EAAMokN,GAAmBtD,IACjDyD,GAA6B,SAAU18F,EAASt6G,EAAKkzE,GACvD,IAAI48E,EAAWlQ,GAAgBP,eAAer/I,GAC9C,OAAOuoJ,GAAYH,YAAY9tC,EAASpnC,GAAOx3F,KAAI,SAAU2yC,GAC3D,OAAOA,EAAI8tH,QAAQ2T,MAClBj8J,OAAM,IAEPojN,GAAuB,SAAUn9N,EAAQwgI,EAASpnC,EAAOpW,GAC3D,IAAI98D,EAAMlmB,EAAO6L,UAAUyc,SACvB7a,EAAY+yH,EAAU,GAAK,EAC/B,GAAIkqC,MAA6BwyD,GAA2B18F,EAASt6G,EAAKkzE,GAAQ,CAChF,IAAI/xE,EAASotK,GAAUhnL,EAAWzN,EAAQo5F,GAAQonC,GAAS,GAE3D,OADAw0D,GAAYh1L,EAAQqnB,IACb,EAET,OAAO,GAEL+1M,GAA0B,SAAUt6N,EAAMs2F,EAAO30E,GACnD,OAAO+3M,GAA+BpjI,EAAO30E,GAAOjK,SAAQ,WAC1D,OAAOmF,GAAK8E,EAAMo3G,kBAAkBphH,MAAK,SAAU+mB,GACjD,OAAO03L,GAAuCU,GAAkB92N,EAAMgjK,GAAgBljK,OAAOw2F,IAAS53D,EAAK2B,YAE5GppB,MAAM+rJ,GAAgBljK,OAAOw2F,KAE9BikI,GAA0B,SAAUv6N,EAAMs2F,EAAO30E,GACnD,OAAOg4M,GAA+BrjI,EAAO30E,GAAOjK,SAAQ,WAC1D,OAAOmF,GAAK8E,EAAMo3G,kBAAkBphH,MAAK,SAAU+mB,GACjD,OAAO03L,GAAuCW,GAAkB/2N,EAAMgjK,GAAgBn/J,MAAMyyF,IAAS53D,EAAK2B,YAE3GppB,MAAM+rJ,GAAgBn/J,MAAMyyF,KAE7BkkI,GAAW,SAAU9nH,EAAUjhE,GACjC,IAAI3oC,EAAO2oC,EAAIzoC,QAAQ0pG,GACvB,OAAOryD,GAASsM,UAAU7jD,IAA2B,UAAlBA,EAAKtH,SAAuB+W,EAAOL,KAAKpP,GAAQyP,EAAOhC,QAExFkkN,GAAc,SAAUj7H,EAAMtiG,EAAQo5F,EAAO7kD,GAC/C,IAAI66J,EAAkBvuM,GAASg7K,mBAAmB77K,GAC9CovM,EACFpvM,EAAOgM,YAAYC,UAAS,WAC1B,IAAIlI,EAAUwjD,GAAQL,QAAQkoJ,GAC9Bz/I,GAAO5rD,EAASlD,GAASi7K,wBAAwB97K,IACjDoP,GAAOrL,EAASwjD,GAAQL,QAAQ,OAC5Bo7C,EACF37F,GAAM4gD,GAAQN,QAAQmyC,GAAQr1F,GAE9BnB,GAAO2kD,GAAQN,QAAQmyC,GAAQr1F,GAEjC,IAAImiB,EAAMlmB,EAAOkM,IAAIob,YACrBpB,EAAIW,SAAS9iB,EAAQmI,MAAO,GAC5Bga,EAAIY,OAAO/iB,EAAQmI,MAAO,GAC1B8oL,GAAYh1L,EAAQkmB,MAGtB8uK,GAAYh1L,EAAQu0C,EAAI8wH,YAGxBuhB,GAAY,SAAU5mL,EAAQsiG,EAAM/tD,GACtC,IAAI6kD,EAAekkI,KAAPh7H,EAAsB/tD,GAC9Bj+B,GAAgB,IAATgsF,EACXlJ,EAAMx/E,MAAK,WACT,OAAOo7K,GAAYh1L,EAAQu0C,EAAI8wH,cAC9B,SAAUjsE,GACX,OAAOq1E,GAAYH,WAAWh4J,EAAMtW,EAAOoU,WAAWvF,QAAO,SAAUovK,GACrE,OAAOA,EAAQ5b,QAAQ9tH,MACtB36B,MAAK,WACN,OAAOo7K,GAAYh1L,EAAQu0C,EAAI8wH,cAC9B,SAAUhkK,GACX,OAAOk8N,GAAYj7H,EAAMtiG,EAAQo5F,EAAO7kD,UAI1CipL,GAAqB,SAAUx9N,EAAQsiG,EAAMlJ,EAAOpW,GACtD,IAAI98D,EAAMlmB,EAAO6L,UAAUyc,SACvBisB,EAAMuxH,GAAgBP,eAAer/I,GACrCpjB,EAAO9C,EAAOoU,UAClB,IAAKkuF,GAAQ06H,GAAuBh6I,EAAIzuC,GAAM,CAC5C,IAAIoiI,EAASymD,GAAwBt6N,EAAMs2F,EAAO7kD,GAElD,OADAqyI,GAAU5mL,EAAQsiG,EAAMq0E,IACjB,EACF,GAAIr0E,GAAQ26H,GAAsBj6I,EAAIzuC,GAAM,CAC7CoiI,EAAS0mD,GAAwBv6N,EAAMs2F,EAAO7kD,GAElD,OADAqyI,GAAU5mL,EAAQsiG,EAAMq0E,IACjB,EAEP,OAAO,GAGP8mD,GAAU,SAAUz9N,EAAQwgI,GAC9B,OAAO,WACL,OAAOnlH,EAAO/U,KAAKtG,EAAOkM,IAAIyL,UAAU3X,EAAO6L,UAAUC,UAAW,UAAU2O,MAAK,SAAUuoE,GAC3F,OAAO3nE,EAAO/U,KAAKtG,EAAOkM,IAAIyL,UAAUqrE,EAAI,UAAUphF,KAAI,SAAUw3F,GAClE,OAAO+jI,GAAqBn9N,EAAQwgI,EAASpnC,SAE9Cr/E,OAAM,KAGT2jN,GAAU,SAAU19N,EAAQwgI,GAC9B,OAAO,WACL,OAAOnlH,EAAO/U,KAAKtG,EAAOkM,IAAIyL,UAAU3X,EAAO6L,UAAUC,UAAW,UAAU2O,MAAK,SAAUuoE,GAC3F,OAAO3nE,EAAO/U,KAAKtG,EAAOkM,IAAIyL,UAAUqrE,EAAI,UAAUphF,KAAI,SAAUw3F,GAClE,OAAOokI,GAAmBx9N,EAAQwgI,EAASpnC,EAAOpW,SAEnDjpE,OAAM,KAITikG,GAAW,SAAUpyG,GACvB,OAAOyI,EAAS,CAAC,cAAejN,GAAKwE,KAEnC+xN,GAAc,SAAU1sN,GAC1B,IAAIiV,EAAMjnB,EAAW4E,SAAS+iB,cAG9B,OAFAV,EAAI8xD,eAAe/mE,EAAO/E,OAC1Bga,EAAIq1G,aAAatqH,EAAO/E,OACjBga,GAEL03M,GAAgB,SAAU96N,EAAMmF,EAAKu4H,GACnCA,EACFpxH,GAAOtM,EAAMmF,GAEbuuF,GAAQ1zF,EAAMmF,IAGd41N,GAAW,SAAU/6N,EAAM09H,GAC7B,IAAI6E,EAAK99E,GAAQL,QAAQ,MAEzB,OADA02K,GAAc96N,EAAMuiI,EAAI7E,GACjBm9F,GAAYt4F,IAEjBy4F,GAAgB,SAAUh7N,EAAM09H,EAAS/sE,EAAW7nC,GACtD,IAAIvC,EAAQk+B,GAAQL,QAAQuM,GACxB4xE,EAAK99E,GAAQL,QAAQ,MAIzB,OAHAyI,GAAOtmC,EAAOuC,GACdxc,GAAOia,EAAOg8G,GACdu4F,GAAc96N,EAAMumB,EAAOm3G,GACpBm9F,GAAYt4F,IAEjB04F,GAAkB,SAAUj7N,EAAM4qN,EAAe9hM,EAAO40G,GAC1D,MAAsB,KAAlBktF,EACKmQ,GAAS/6N,EAAM09H,GAEfs9F,GAAch7N,EAAM09H,EAASktF,EAAe9hM,IAGnDoyM,GAAwB,SAAUzpL,EAAKzxC,GACzC,IAAIszF,EAASz9E,EAAMY,GAAIzW,GACvB,OAAOi1F,GAAQxwC,GAAQN,QAAQ1S,EAAIluB,aAAcu8B,GAASwzC,GAAQvnF,OAAOmvG,KAEvEigH,GAAsB,SAAUn7N,EAAM09H,EAASjsF,GACjD,OAAOisF,EAAUm5F,GAAa72N,EAAKoJ,MAAOqoC,GAAOmlL,GAAc52N,EAAKoJ,MAAOqoC,IAEzE2pL,GAA0B,SAAUl+N,EAAQwgI,GAC9C,IAAI19H,EAAOykD,GAAQN,QAAQjnD,EAAOoU,WAC9BmgC,EAAMuxH,GAAgBP,eAAevlK,EAAO6L,UAAUyc,UACtD61M,EAAYt9N,GAASg7K,mBAAmB77K,GACxCo+N,EAAiBv9N,GAASi7K,wBAAwB97K,GACtD,OAAOg+N,GAAsBzpL,EAAKzxC,GAAM4X,QAAO,WAC7C,GAAIujN,GAAoBn7N,EAAM09H,EAASjsF,GAAM,CAC3C,IAAIruB,EAAM63M,GAAgBj7N,EAAMq7N,EAAWC,EAAgB59F,GAE3D,OADAxgI,EAAO6L,UAAU0b,OAAOrB,IACjB,EAEP,OAAO,MAITm4M,GAAU,SAAUr+N,EAAQwgI,GAC9B,OAAO,WACL,QAAIxgI,EAAO6L,UAAU0C,eACZ2vN,GAAwBl+N,EAAQwgI,KAOzCp7G,GAAkB,SAAUtf,GAC9B,OAAOlE,EAAIkE,GAAU,SAAUE,GAC7B,OAAOszC,GAAM,CACXmiB,UAAU,EACV+kB,QAAQ,EACRpqC,SAAS,EACTqqC,SAAS,EACT91D,QAAS,EACTnO,OAAQ9D,GACP1S,OAGHs4N,GAAe,SAAUt4N,EAAShB,GACpC,OAAOA,EAAI2lB,UAAY3kB,EAAQ2kB,SAAW3lB,EAAIy2D,WAAaz1D,EAAQy1D,UAAYz2D,EAAIw7E,SAAWx6E,EAAQw6E,QAAUx7E,EAAIoxC,UAAYpwC,EAAQowC,SAAWpxC,EAAIy7E,UAAYz6E,EAAQy6E,SAEzK89I,GAAU,SAAUz4N,EAAUd,GAChC,OAAOyV,GAAK2K,GAAgBtf,IAAW,SAAUE,GAC/C,OAAOs4N,GAAat4N,EAAShB,GAAO,CAACgB,GAAW,OAGhDwW,GAAS,SAAUtD,GAErB,IADA,IAAI3C,EAAI,GACCuC,EAAK,EAAGA,EAAK9V,UAAUC,OAAQ6V,IACtCvC,EAAEuC,EAAK,GAAK9V,UAAU8V,GAExB,IAAIlS,EAAOG,MAAM/E,UAAUwE,MAAMtE,KAAKc,UAAW,GACjD,OAAO,WACL,OAAOkW,EAAEjS,MAAM,KAAML,KAGrBmkH,GAAU,SAAUjlH,EAAUd,GAChC,OAAOuK,EAAKgvN,GAAQz4N,EAAUd,IAAM,SAAUgB,GAC5C,OAAOA,EAAQwW,aAGfgiN,GAAY,CACdr8N,MAAOo8N,GACP/hN,OAAQA,GACRuuG,QAASA,IAGP0zG,GAAyB,SAAUz+N,EAAQ6lI,EAAO7gI,GACpD,IAAIymD,EAAK8B,GAAoBvE,SAASyC,GACtC+yK,GAAUzzG,QAAQ,CAChB,CACEpgG,QAAS4lL,GAAG9tK,MACZjmB,OAAQ0+M,GAAMl7N,GAAQ,IAExB,CACE2qB,QAAS4lL,GAAG/tK,KACZhmB,OAAQ0+M,GAAMl7N,GAAQ,IAExB,CACE2qB,QAAS4lL,GAAG7tK,GACZlmB,OAAQ2+M,GAAMn7N,GAAQ,IAExB,CACE2qB,QAAS4lL,GAAG5tK,KACZnmB,OAAQ2+M,GAAMn7N,GAAQ,IAExB,CACE2qB,QAAS4lL,GAAG9tK,MACZjmB,OAAQihN,GAAQz9N,GAAQ,IAE1B,CACE2qB,QAAS4lL,GAAG/tK,KACZhmB,OAAQihN,GAAQz9N,GAAQ,IAE1B,CACE2qB,QAAS4lL,GAAG7tK,GACZlmB,OAAQkhN,GAAQ19N,GAAQ,IAE1B,CACE2qB,QAAS4lL,GAAG5tK,KACZnmB,OAAQkhN,GAAQ19N,GAAQ,IAE1B,CACE2qB,QAAS4lL,GAAG9tK,MACZjmB,OAAQmvK,GAAkB72D,KAAK90H,EAAQ6lI,GAAO,IAEhD,CACEl7G,QAAS4lL,GAAG/tK,KACZhmB,OAAQmvK,GAAkB72D,KAAK90H,EAAQ6lI,GAAO,IAEhD,CACEl7G,QAAS4lL,GAAG9tK,MACZ2T,SAAUqV,EAAGN,QACbq1B,OAAQ/0B,EAAGN,QACX3uC,OAAQmvK,GAAkBF,aAAazrL,EAAQ6lI,IAEjD,CACEl7G,QAAS4lL,GAAG/tK,KACZ4T,SAAUqV,EAAGN,QACbq1B,OAAQ/0B,EAAGN,QACX3uC,OAAQmvK,GAAkBD,aAAa1rL,EAAQ6lI,IAEjD,CACEl7G,QAAS4lL,GAAG7tK,GACZlmB,OAAQ6hN,GAAQr+N,GAAQ,IAE1B,CACE2qB,QAAS4lL,GAAG5tK,KACZnmB,OAAQ6hN,GAAQr+N,GAAQ,KAEzBgF,GAAK8J,MAAK,SAAUzN,GACrB2D,EAAIu9B,qBAGJm8L,GAAU,SAAU1+N,EAAQ6lI,GAC9B7lI,EAAO4O,GAAG,WAAW,SAAU5J,IACI,IAA7BA,EAAI6+D,sBACN46J,GAAuBz+N,EAAQ6lI,EAAO7gI,OAIxC25N,GAAY,CAAEhwN,MAAO+vN,IAErBE,GAA2B,SAAU5+N,EAAQ6lI,EAAO7gI,GACtDw5N,GAAUzzG,QAAQ,CAChB,CACEpgG,QAAS4lL,GAAGx1I,UACZv+C,OAAQgiN,GAAUhiN,OAAOirK,GAAU3sH,gBAAiB96D,GAAQ,IAE9D,CACE2qB,QAAS4lL,GAAGv1I,OACZx+C,OAAQgiN,GAAUhiN,OAAOirK,GAAU3sH,gBAAiB96D,GAAQ,IAE9D,CACE2qB,QAAS4lL,GAAGx1I,UACZv+C,OAAQgiN,GAAUhiN,OAAOm5K,GAAkB76H,gBAAiB96D,GAAQ,IAEtE,CACE2qB,QAAS4lL,GAAGv1I,OACZx+C,OAAQgiN,GAAUhiN,OAAOm5K,GAAkB76H,gBAAiB96D,GAAQ,IAEtE,CACE2qB,QAAS4lL,GAAGx1I,UACZv+C,OAAQgiN,GAAUhiN,OAAO6vK,GAAqBvxH,gBAAiB96D,EAAQ6lI,GAAO,IAEhF,CACEl7G,QAAS4lL,GAAGv1I,OACZx+C,OAAQgiN,GAAUhiN,OAAO6vK,GAAqBvxH,gBAAiB96D,EAAQ6lI,GAAO,IAEhF,CACEl7G,QAAS4lL,GAAGx1I,UACZv+C,OAAQgiN,GAAUhiN,OAAOuzK,GAAYj1H,gBAAiB96D,GAAQ,IAEhE,CACE2qB,QAAS4lL,GAAGv1I,OACZx+C,OAAQgiN,GAAUhiN,OAAOuzK,GAAYj1H,gBAAiB96D,GAAQ,IAEhE,CACE2qB,QAAS4lL,GAAGx1I,UACZv+C,OAAQgiN,GAAUhiN,OAAO2lK,GAAiBrnH,gBAAiB96D,GAAQ,IAErE,CACE2qB,QAAS4lL,GAAGv1I,OACZx+C,OAAQgiN,GAAUhiN,OAAO2lK,GAAiBrnH,gBAAiB96D,GAAQ,IAErE,CACE2qB,QAAS4lL,GAAGx1I,UACZv+C,OAAQgiN,GAAUhiN,OAAOilK,GAAoB3mH,gBAAiB96D,GAAQ,IAExE,CACE2qB,QAAS4lL,GAAGv1I,OACZx+C,OAAQgiN,GAAUhiN,OAAOilK,GAAoB3mH,gBAAiB96D,GAAQ,IAExE,CACE2qB,QAAS4lL,GAAGx1I,UACZv+C,OAAQgiN,GAAUhiN,OAAO82K,GAAmBx4H,gBAAiB96D,GAAQ,IAEvE,CACE2qB,QAAS4lL,GAAGv1I,OACZx+C,OAAQgiN,GAAUhiN,OAAO82K,GAAmBx4H,gBAAiB96D,GAAQ,KAEtEgF,GAAK8J,MAAK,SAAUzN,GACrB2D,EAAIu9B,qBAGJs8L,GAAuB,SAAU7+N,EAAQgF,GAC3Cw5N,GAAUzzG,QAAQ,CAChB,CACEpgG,QAAS4lL,GAAGx1I,UACZv+C,OAAQgiN,GAAUhiN,OAAOirK,GAAUH,iBAAkBtnL,IAEvD,CACE2qB,QAAS4lL,GAAGv1I,OACZx+C,OAAQgiN,GAAUhiN,OAAOirK,GAAUH,iBAAkBtnL,KAEtDgF,IAED85N,GAAU,SAAU9+N,EAAQ6lI,GAC9B7lI,EAAO4O,GAAG,WAAW,SAAU5J,IACI,IAA7BA,EAAI6+D,sBACN+6J,GAAyB5+N,EAAQ6lI,EAAO7gI,MAG5ChF,EAAO4O,GAAG,SAAS,SAAU5J,IACM,IAA7BA,EAAI6+D,sBACNg7J,GAAqB7+N,EAAQgF,OAI/B+5N,GAAsB,CAAEpwN,MAAOmwN,IAE/BE,GAAgC,SAAUpzN,GAC5C,MAAOA,EAAM,CACX,GAAsB,IAAlBA,EAAK2a,UAAoC,IAAlB3a,EAAK2a,UAAkB3a,EAAK1G,MAAQ,WAAWf,KAAKyH,EAAK1G,MAClF,OAAO0G,EAETA,EAAOA,EAAKuc,cAGZ82M,GAAsB,SAAUj/N,EAAQ8C,GAC1C,IAAIomB,EAAQtd,EAAMsa,EAAsBg5M,EAAjBxgI,EAAW57F,EAC9BoJ,EAAMlM,EAAOkM,IACbskJ,EAAoCxwJ,EAAOq8C,OAAOk4G,oCACtD,GAAKzxJ,EAAL,CAGA,GAAI,eAAeqB,KAAKrB,EAAKwB,UAAW,CACtC,IAAI4T,EAAa8mN,GAA8Bl8N,EAAKoV,YAChDA,GAAc,eAAe/T,KAAK+T,EAAW5T,WAC/CxB,EAAKJ,aAAawJ,EAAI0c,IAAIlZ,eAAe,KAAS5M,EAAKoV,YAK3D,GAFAgO,EAAMha,EAAIob,YACVxkB,EAAKi2K,YACDj2K,EAAKkhD,gBAAiB,CACxB96B,EAAS,IAAI+/H,GAAWnmJ,EAAMA,GAC9B,MAAO8I,EAAOsd,EAAOygC,UAAW,CAC9B,GAAIxG,GAASj8B,OAAOtb,GAAO,CACzBsa,EAAIW,SAASjb,EAAM,GACnBsa,EAAIY,OAAOlb,EAAM,GACjB,MAEF,GAAI4kJ,EAAkC5kJ,EAAKtH,SAASic,eAAgB,CAClE2F,EAAI8xD,eAAepsE,GACnBsa,EAAIq1G,aAAa3vH,GACjB,MAEF8yF,EAAW9yF,EACXA,EAAOsd,EAAOC,OAEXvd,IACHsa,EAAIW,SAAS63E,EAAU,GACvBx4E,EAAIY,OAAO43E,EAAU,SAGnBv7C,GAASZ,KAAKz/C,GACZA,EAAKqlB,aAAejc,EAAI02C,QAAQ9/C,EAAKqlB,cACvCjC,EAAI8xD,eAAel1E,GACnBojB,EAAIq1G,aAAaz4H,KAEjBojB,EAAIgvC,cAAcpyD,GAClBojB,EAAIivC,YAAYryD,KAGlBojB,EAAIW,SAAS/jB,EAAM,GACnBojB,EAAIY,OAAOhkB,EAAM,IAGrB9C,EAAO6L,UAAU0b,OAAOrB,GACxBha,EAAImJ,OAAO6pN,GACXl/N,EAAO6L,UAAU+0E,eAAe99E,KAE9Bq8N,GAAkB,SAAUjzN,EAAKN,GACnC,IACI1H,EAAQk7N,EADRt8N,EAAOoJ,EAAIo1C,UAEfp9C,EAAS0H,EACT,MAAO1H,IAAWpB,GAA2C,UAAnCoJ,EAAIorD,mBAAmBpzD,GACR,SAAnCgI,EAAIorD,mBAAmBpzD,KACzBk7N,EAAel7N,GAEjBA,EAASA,EAAOG,WAElB,OAAOH,IAAWpB,EAAOs8N,EAAet8N,GAEtCu8N,GAAmB,SAAUr/N,GAC/B,OAAOqb,EAAO/U,KAAKtG,EAAOkM,IAAIyL,UAAU3X,EAAO6L,UAAUgJ,UAAS,GAAO7U,EAAOkM,IAAI02C,WAElF08K,GAAqB,SAAUt/N,GACjC,OAAOq/N,GAAiBr/N,GAAQ4Z,KAAK7O,EAAS,KAAK,SAAUyvD,GAC3D,OAAOA,EAAYl2D,SAASizD,kBAG5BgoK,GAAwB,SAAUv/N,GACpC,OAAOq/N,GAAiBr/N,GAAQ6O,QAAO,SAAU5G,GAC/C,OAAOo9G,GAAW99D,GAAQN,QAAQh/C,OACjC6R,UAED0lN,GAAe,CACjBP,oBAAqBA,GACrBE,gBAAiBA,GACjB7zD,eAAgB+zD,GAChBC,mBAAoBA,GACpBC,sBAAuBA,IAGrBE,GAAgB,SAAUx3N,EAAKb,GACjC,OAAOa,EAAIiQ,YAAcjQ,EAAIiQ,WAAW5T,WAAa8C,GAEnDs4N,GAAc,SAAUz3N,EAAK2xF,GAC/B,OAAO3xF,GAAOA,EAAI5D,YAAc4D,EAAI5D,WAAWC,WAAas1F,GAE1D+lI,GAAc,SAAU13N,GAC1B,OAAOA,GAAO,eAAe9D,KAAK8D,EAAI3D,WAEpCs7N,GAAe,SAAU33N,GAC3B,OAAO03N,GAAY13N,IAAQ03N,GAAY13N,EAAI5D,aAEzCw7N,GAAoB,SAAUxmC,GAChC,IAAIymC,EAAuBzmC,EAAeh1L,WAC1C,MAAI,eAAeF,KAAK27N,EAAqBx7N,UACpCw7N,EAEFzmC,GAEL0mC,GAAkB,SAAU1mC,EAAgB7+H,EAAa+iC,GAC3D,IAAI3xF,EAAOytL,EAAe97F,EAAQ,aAAe,aACjD,MAAO3xF,EAAM,CACX,GAAIu3C,GAASsM,UAAU7jD,GACrB,MAEFA,EAAOA,EAAK2xF,EAAQ,cAAgB,mBAEtC,OAAO3xF,IAAS4uD,GAEd+0D,GAAW,SAAUvvH,EAAQggO,EAAgB3mC,EAAgB7+H,EAAaylK,GAC5E,IAAI/zN,EAAMlM,EAAOkM,IACbga,EAAMlmB,EAAO6L,UAAUyc,SAC3B,GAAI+wK,IAAmBr5L,EAAOoU,UAA9B,CAGIwrN,GAAavmC,KACf4mC,EAAe,MAEjB,IAAIlrK,EAAWkrK,EAAeD,EAAeC,GAAgB/zN,EAAIiE,OAAO,MACxE,GAAI4vN,GAAgB1mC,EAAgB7+H,GAAa,IAASulK,GAAgB1mC,EAAgB7+H,GAAa,GACjGklK,GAAYrmC,EAAgB,MAC9BntL,EAAI2c,YAAYksC,EAAU8qK,GAAkBxmC,IAE5CntL,EAAIrK,QAAQkzD,EAAUskI,QAEnB,GAAI0mC,GAAgB1mC,EAAgB7+H,GAAa,GAClDklK,GAAYrmC,EAAgB,OAC9BntL,EAAI2c,YAAYksC,EAAU8qK,GAAkBxmC,IAC5CtkI,EAASxkD,YAAYrE,EAAI0c,IAAIlZ,eAAe,MAC5CqlD,EAASxkD,YAAY8oL,IAErBA,EAAeh1L,WAAW3B,aAAaqyD,EAAUskI,QAE9C,GAAI0mC,GAAgB1mC,EAAgB7+H,GAAa,GACtDtuD,EAAI2c,YAAYksC,EAAU8qK,GAAkBxmC,QACvC,CACLA,EAAiBwmC,GAAkBxmC,GACnC,IAAIxkI,EAAS3uC,EAAIq9B,aACjBsR,EAAOK,cAAcsF,GACrB3F,EAAOM,YAAYkkI,GACnB,IAAIzxI,EAAWiN,EAAOO,kBACD,OAAjB6qK,GAAyBR,GAAc73K,EAAU,OACnDmN,EAAWnN,EAAS1vC,WACpBhM,EAAI2c,YAAY++B,EAAUyxI,KAE1BntL,EAAI2c,YAAY++B,EAAUyxI,GAC1BntL,EAAI2c,YAAYksC,EAAUskI,IAG9BntL,EAAImJ,OAAOmlD,GACXglK,GAAaP,oBAAoBj/N,EAAQ+0D,KAEvCmrK,GAAW,CAAEr9N,OAAQ0sH,IAErB4wG,GAAW,SAAUv4K,GACvB94C,EAAK2oF,GAAYlwC,GAAQN,QAAQW,GAAW1gC,KAAS,SAAUzhB,GAC7D,IAAI0xK,EAAU1xK,EAAKyG,MACnBirK,EAAQxkF,UAAYotE,GAAK7wJ,KAAKioK,EAAQxkF,eAGtCytI,GAAgB,SAAUl0N,EAAKjE,GACjC,OAAOA,GAAwB,MAAjBA,EAAI3D,UAAoB4H,EAAI4wC,QAAQ70C,IAEhDo4N,GAAgB,SAAUz0N,GAC5B,OAAOA,GAAQ,oBAAoBzH,KAAKyH,EAAKtH,WAE3Cg8N,GAAa,SAAUr4N,GACzBA,EAAI9C,UAAY,2BAEdo7N,GAA0B,SAAUl6M,EAAW/hB,GACjD,OAAO+hB,EAAU/hB,WAAaA,GAAY+hB,EAAU08B,iBAAmB18B,EAAU08B,gBAAgBz+C,WAAaA,GAE5Gk8N,GAAgB,SAAUt0N,EAAKN,GACjC,OAAOA,GAAQM,EAAI02C,QAAQh3C,KAAU,yBAAyBzH,KAAKyH,EAAKtH,YAAc,qBAAqBH,KAAKyH,EAAK/B,MAAMguC,WAA8C,SAAjC3rC,EAAIorD,mBAAmB1rD,IAE7J60N,GAAsC,SAAUv0N,EAAKqkJ,EAAqBlnI,GAC5E,IAEI7lB,EAFAoI,EAAOyd,EACPq3M,EAAc,GAElB,GAAK90N,EAAL,CAGA,MAAOA,EAAOA,EAAKsM,WAAY,CAC7B,GAAIhM,EAAI02C,QAAQh3C,GACd,OAEEu3C,GAASsM,UAAU7jD,KAAU2kJ,EAAoB3kJ,EAAKtH,SAASic,gBACjEmgN,EAAY75N,KAAK+E,GAGrBpI,EAAIk9N,EAAYz9N,OAChB,MAAOO,IACLoI,EAAO80N,EAAYl9N,KACdoI,EAAKo4C,iBAAmBp4C,EAAKsM,aAAetM,EAAK82C,WAA2C,KAA9B92C,EAAKsM,WAAWy6E,WAG7EytI,GAAcl0N,EAAKN,KAFvBM,EAAImJ,OAAOzJ,KAQb+0N,GAAsB,SAAUl8M,EAAO4B,EAAWV,GACpD,OAAmC,IAA/Bw9B,GAASj8B,OAAOb,GACXV,EACElB,EACS,IAAXkB,GAAgBU,EAAUnhB,KAAK0tF,OAAOjtE,EAAS,KAAOo6I,GAAKH,KAAO,EAAIj6I,EAEtEA,IAAWU,EAAUnhB,KAAKjC,OAAS,GAAKojB,EAAUnhB,KAAK0tF,OAAOjtE,KAAYo6I,GAAKH,KAAOv5I,EAAUnhB,KAAKjC,OAAS0iB,GAGrHi7M,GAAqB,SAAU16M,GACjC,IAAImB,EAASnB,EAAIq9B,aAGjB,OAFAl8B,EAAOR,SAASX,EAAII,eAAgBq6M,IAAoB,EAAMz6M,EAAII,eAAgBJ,EAAIO,cACtFY,EAAOP,OAAOZ,EAAIw9B,aAAci9K,IAAoB,EAAOz6M,EAAIw9B,aAAcx9B,EAAIQ,YAC1EW,GAELw5M,GAAwB,SAAUj1N,GACpC,GACMu3C,GAASj8B,OAAOtb,KAClBA,EAAK+mF,UAAY/mF,EAAK+mF,UAAU9wF,QAAQ,WAAY,KAEtD+J,EAAOA,EAAKsM,iBACLtM,IAEPk1N,GAAoB,SAAU50N,EAAKN,GACrC,IACI1H,EAAQk7N,EADRt8N,EAAOoJ,EAAIo1C,UAEfp9C,EAAS0H,EACT,MAAO1H,IAAWpB,GAA2C,UAAnCoJ,EAAIorD,mBAAmBpzD,GACR,SAAnCgI,EAAIorD,mBAAmBpzD,KACzBk7N,EAAel7N,GAEjBA,EAASA,EAAOG,WAElB,OAAOH,IAAWpB,EAAOs8N,EAAet8N,GAEtCi+N,GAAkB,SAAU/gO,EAAQ4L,EAAMo1N,GAC5C3lN,EAAO/U,KAAK06N,EAAqBn3N,OAAOjI,IAAI5B,EAAOkM,IAAIkxC,YAAYtuC,MAAK,SAAUmyN,GAChF,IAAIC,EAAgB76E,GAAU9+F,GAAQN,QAAQr7C,IAC1Cu1N,EAAYrvH,GAASA,GAAS,GAAIovH,GAAgBD,GACtDjhO,EAAOkM,IAAIskE,UAAU5kE,EAAMu1N,MAE7B,IAAIC,EAAiB/lN,EAAO/U,KAAK06N,EAAqB5mL,OAAOx4C,KAAI,SAAUy/N,GACzE,OAAOA,EAAYhgN,MAAM,UAEvBigN,EAAoBjmN,EAAO/U,KAAKsF,EAAKxH,WAAWxC,KAAI,SAAU2/N,GAChE,OAAO1yN,EAAO0yN,EAAelgN,MAAM,QAAQ,SAAUoyF,GACnD,MAAiB,KAAVA,QAGXjsD,GAAM45K,EAAgBE,GAAmB,SAAUD,EAAaE,GAC9D,IAAIC,EAAkB3yN,EAAO0yN,GAAgB,SAAU9tH,GACrD,OAAQp/F,EAASgtN,EAAa5tH,MAE5BguH,EAAa59M,GAAew9M,EAAaG,GAC7CxhO,EAAOkM,IAAIC,UAAUP,EAAM,QAAS61N,EAAWn6N,KAAK,SAEtD,IAAIo6N,EAAe,CACjB,QACA,SAEEC,EAAiBx7E,GAAS66E,GAAsB,SAAU3/N,EAAGuqB,GAC/D,OAAQvX,EAASqtN,EAAc91M,MAC9BvgB,EACHrL,EAAOkM,IAAIsV,WAAW5V,EAAM+1N,IAE1BC,GAAsB,SAAU5hO,EAAQ4L,GAC1C,IAAIi2N,EAAsBhhO,GAASg7K,mBAAmB77K,GACtD,GAAI6hO,GAAuBA,EAAoBthN,gBAAkB3U,EAAKyF,QAAQkP,cAAe,CAC3F,IAAIygN,EAAuBngO,GAASi7K,wBAAwB97K,GAC5D+gO,GAAgB/gO,EAAQ4L,EAAMo1N,KAG9Bc,GAAoC,SAAU9hO,EAAQigO,EAAc/5M,EAAKG,EAAWV,GACtF,IAAIovC,EAAUyF,EAAa7D,EAAW/qD,EAAMud,EAAMukM,EAC9Cj6J,EAAYwsK,GAAgB,IAC5B/zN,EAAMlM,EAAOkM,IAAKkzN,EAAe0B,GAAkB50N,EAAKma,GAE5D,GADAm0C,EAActuD,EAAIyL,UAAU0O,EAAWna,EAAI02C,UACtC4X,IAAgBgmK,GAAct0N,EAAKsuD,GAAc,CAOpD,GANAA,EAAcA,GAAe4kK,EAE3B1R,EADElzJ,IAAgBx6D,EAAOoU,WAAaisN,GAAc7lK,GACpCA,EAAYl2D,SAASic,cAErBi6C,EAAYn2D,WAAWC,SAASic,eAE7Ci6C,EAAYxW,gBAMf,OALA+Q,EAAW7oD,EAAIiE,OAAOsjD,GACtBmuK,GAAoB5hO,EAAQ+0D,GAC5ByF,EAAYjqD,YAAYwkD,GACxB7uC,EAAIW,SAASkuC,EAAU,GACvB7uC,EAAIY,OAAOiuC,EAAU,GACdA,EAETnpD,EAAOya,EACP,MAAOza,EAAKvH,aAAem2D,EACzB5uD,EAAOA,EAAKvH,WAEd,MAAOuH,IAASM,EAAI02C,QAAQh3C,GAC1B+qD,EAAY/qD,EACZA,EAAOA,EAAKm3C,gBAEd,GAAI4T,GAAa32D,EAAOq8C,OAAOm4G,aAAak5D,EAAej6J,EAAUlzC,eAAgB,CACnFw0C,EAAW7oD,EAAIiE,OAAOsjD,GACtBmuK,GAAoB5hO,EAAQ+0D,GAC5B4B,EAAUtyD,WAAW3B,aAAaqyD,EAAU4B,GAC5C/qD,EAAO+qD,EACP,MAAO/qD,IAASM,EAAI02C,QAAQh3C,GAC1Bud,EAAOvd,EAAKuc,YACZ4sC,EAASxkD,YAAY3E,GACrBA,EAAOud,EAETjD,EAAIW,SAASR,EAAWV,GACxBO,EAAIY,OAAOT,EAAWV,IAG1B,OAAOU,GAEL07M,GAAuB,SAAU71N,EAAKmd,GACxC,IAAIq5B,EACJr5B,EAAM0vJ,YACNr2H,EAAYr5B,EAAMq5B,UACbA,IAAa,mBAAmBv+C,KAAK+H,EAAI+oC,SAASyN,EAAW,SAAS,KACzEx2C,EAAI/E,IAAIkiB,EAAO,OAGf24M,GAAW,SAAUhiO,EAAQgF,GAC/B,IAAI6vD,EAAQuqK,EAAc/4M,EAAWV,EAAQ60C,EAAaiB,EACtD1G,EAAUnN,EAAUyxI,EAAgB4oC,EAAiB3oC,EAAoB2mC,EAAc7mC,EACvFltL,EAAMlM,EAAOkM,IACbmwC,EAASr8C,EAAOq8C,OAAQk0G,EAAsBl0G,EAAO+c,sBACrDlzC,EAAMlmB,EAAO6L,UAAUyc,SACvB03M,EAAiB,SAAU54N,GAC7B,IAAsBiiB,EAAO64M,EAAY75C,EAArCz8K,EAAOya,EACPqzJ,EAAqBr9H,EAAOg4G,wBAOhC,GALEhrI,EADEjiB,GAA4B,UAApB66N,GAAmD,OAApBA,EACjC/1N,EAAIiE,OAAO/I,GAAQ64N,GAEnBzlK,EAAYxnB,WAAU,GAEhCq1I,EAAYh/J,GAC8B,IAAtCxoB,GAASo7K,iBAAiBj8K,GAC5BkM,EAAIC,UAAUkd,EAAO,QAAS,MAC9Bnd,EAAIC,UAAUkd,EAAO,QAAS,WAE9B,GACE,GAAIqwJ,EAAmB9tK,EAAKtH,UAAW,CACrC,GAAIkkK,GAAY58J,IAASwkK,GAAUt5G,eAAelrD,GAChD,SAEFs2N,EAAat2N,EAAKonC,WAAU,GAC5B9mC,EAAIC,UAAU+1N,EAAY,KAAM,IAC5B74M,EAAM26B,iBACRk+K,EAAW3xN,YAAY8Y,EAAMnR,YAC7BmR,EAAM9Y,YAAY2xN,KAElB75C,EAAY65C,EACZ74M,EAAM9Y,YAAY2xN,YAGdt2N,EAAOA,EAAKvH,aAAeuH,IAASwzN,GAIhD,OAFAwC,GAAoB5hO,EAAQqpB,GAC5Bi3M,GAAWj4C,GACJh/J,GAEL84M,EAA6B,SAAU19M,GACzC,IAAIyE,EAAQtd,EAAMxE,EAAMg7N,EAExB,GADAA,EAAmBzB,GAAoBl8M,EAAO4B,EAAWV,GACrDw9B,GAASj8B,OAAOb,KAAe5B,EAAQ29M,EAAmB,EAAIA,EAAmB/7M,EAAUssE,UAAU1vF,QACvG,OAAO,EAET,GAAIojB,EAAUhiB,aAAem2D,GAAe4+H,IAA+B30K,EACzE,OAAO,EAET,GAAIA,GAAS0+B,GAASsM,UAAUppC,IAAcA,IAAcm0C,EAAYtiD,WACtE,OAAO,EAET,GAAIqoN,GAAwBl6M,EAAW,UAAYk6M,GAAwBl6M,EAAW,MACpF,OAAO+yK,IAA+B30K,IAAU20K,GAA8B30K,EAEhFyE,EAAS,IAAI+/H,GAAW5iI,EAAWm0C,GAC/BrX,GAASj8B,OAAOb,KACd5B,GAA8B,IAArB29M,EACXl5M,EAAOqpE,OACG9tE,GAAS29M,IAAqB/7M,EAAUssE,UAAU1vF,QAC5DimB,EAAOC,QAGX,MAAOvd,EAAOsd,EAAOygC,UAAW,CAC9B,GAAIxG,GAASsM,UAAU7jD,IACrB,IAAKA,EAAKuM,aAAa,oBACrB/Q,EAAOwE,EAAKtH,SAASic,cACjBgwI,EAAoBnpJ,IAAkB,OAATA,GAC/B,OAAO,OAGN,GAAI+7C,GAASj8B,OAAOtb,KAAU,eAAezH,KAAKyH,EAAK+mF,WAC5D,OAAO,EAELluE,EACFyE,EAAOqpE,OAEPrpE,EAAOC,OAGX,OAAO,GAELk5M,EAAsB,WAEtBttK,EADE,wBAAwB5wD,KAAK89N,IAA2C,WAAvB3oC,EACxC0mC,EAAeC,GAEfD,IAETn/N,GAASq7K,+BAA+Bl8K,IAAWwgO,GAAct0N,EAAKmtL,IAAmBntL,EAAI4wC,QAAQ0d,GACvGzF,EAAW7oD,EAAImV,MAAMg4K,EAAgB7+H,GAErCtuD,EAAI2c,YAAYksC,EAAUyF,GAE5BglK,GAAaP,oBAAoBj/N,EAAQ+0D,IAE3C8jI,GAAe9f,UAAU7sK,EAAKga,GAAKpX,MAAK,SAAU8pL,GAChD1yK,EAAIW,SAAS+xK,EAAQtyK,eAAgBsyK,EAAQnyK,aAC7CP,EAAIY,OAAO8xK,EAAQl1I,aAAck1I,EAAQlyK,cAE3CL,EAAYH,EAAII,eAChBX,EAASO,EAAIO,YACbw5M,EAAep/N,GAASg7K,mBAAmB77K,GAC3Cy7D,EAAWz2D,EAAIy2D,SACXtY,GAASsM,UAAUppC,IAAcA,EAAU29B,kBAC7Co1I,EAA6BzzK,EAASU,EAAUpO,WAAWhV,OAAS,EACpEojB,EAAYA,EAAUpO,WAAW3X,KAAKC,IAAIolB,EAAQU,EAAUpO,WAAWhV,OAAS,KAAOojB,EAErFV,EADEyzK,GAA8Bj2I,GAASj8B,OAAOb,GACvCA,EAAUssE,UAAU1vF,OAEpB,GAGbm8N,EAAe0B,GAAkB50N,EAAKma,GACjC+4M,KAGDa,IAAiBxkK,IAAawkK,GAAgBxkK,KAChDp1C,EAAYy7M,GAAkC9hO,EAAQigO,EAAc/5M,EAAKG,EAAWV,IAEtF60C,EAActuD,EAAIyL,UAAU0O,EAAWna,EAAI02C,SAC3Cy2I,EAAiB7+H,EAActuD,EAAIyL,UAAU6iD,EAAYn2D,WAAY6H,EAAI02C,SAAW,KACpFq/K,EAAkBznK,EAAcA,EAAYl2D,SAASizD,cAAgB,GACrE+hI,EAAqBD,EAAiBA,EAAe/0L,SAASizD,cAAgB,GACnD,OAAvB+hI,GAAgCt0L,EAAIoxC,UACtCokB,EAAc6+H,EACdA,EAAiBA,EAAeh1L,WAChC49N,EAAkB3oC,GAEhB,eAAen1L,KAAK89N,IAClB/1N,EAAI4wC,QAAQ0d,GACd0lK,GAASr9N,OAAO7C,EAAQggO,EAAgB3mC,EAAgB7+H,EAAaylK,GAIrEA,GAAgBzlK,IAAgBx6D,EAAOoU,YAG3C6rN,EAAeA,GAAgB,IAC3B//D,GAAsB1lG,IACxBzF,EAAWmsG,GAAwB1mG,GAC/BtuD,EAAI4wC,QAAQ0d,IACd8lK,GAAW9lK,GAEbonK,GAAoB5hO,EAAQ+0D,GAC5ByqK,GAAaP,oBAAoBj/N,EAAQ+0D,IAChCotK,IACTE,IACSF,GAA2B,IACpCptK,EAAWyF,EAAYn2D,WAAW3B,aAAas9N,IAAkBxlK,GACjEglK,GAAaP,oBAAoBj/N,EAAQugO,GAAwB/lK,EAAa,MAAQzF,EAAWyF,KAEjG3F,EAAS+rK,GAAmB16M,GAAKq9B,aACjCsR,EAAOM,YAAYqF,GACnB5S,EAAWiN,EAAOO,kBAClB+qK,GAASv4K,GACTi5K,GAAsBj5K,GACtBmN,EAAWnN,EAAS1vC,WACpBhM,EAAI2c,YAAY++B,EAAU4S,GAC1BimK,GAAoCv0N,EAAKqkJ,EAAqBx7F,GAC9DgtK,GAAqB71N,EAAKsuD,GACtBtuD,EAAI4wC,QAAQ0d,IACd8lK,GAAW9lK,GAEbzF,EAASgkH,YACL7sK,EAAI4wC,QAAQiY,IACd7oD,EAAImJ,OAAO0/C,GACXstK,MAEAT,GAAoB5hO,EAAQ+0D,GAC5ByqK,GAAaP,oBAAoBj/N,EAAQ+0D,KAG7C7oD,EAAIC,UAAU4oD,EAAU,KAAM,IAC9B/0D,EAAO2hC,KAAK,WAAY,CAAEozB,SAAUA,OAElCutK,GAAc,CAAEz/N,OAAQm/N,IAExB/lF,GAAkB,SAAUj8I,EAAQwJ,GACtC,OAAOg2N,GAAal0D,eAAetrK,GAAQ6O,QAAO,SAAU2rD,GAC1D,OAAOhxD,EAASvG,OAAS,GAAKgsD,GAAK1H,GAAQN,QAAQuT,GAAchxD,MAChEsQ,UAEDyoN,GAAiB,SAAUviO,GAC7B,OAAOi8I,GAAgBj8I,EAAQa,GAASk7K,qBAAqB/7K,KAE3DwiO,GAAqB,SAAUxiO,GACjC,OAAOi8I,GAAgBj8I,EAAQa,GAASm7K,qBAAqBh8K,KAE3DyiO,GAAmB,CACrBF,eAAgBA,GAChBC,mBAAoBA,IAGlBE,GAAgBr5H,GAAI5O,SAAS,CAC/B,CAAE4qC,GAAI,IACN,CAAEh8G,MAAO,IACT,CAAEhQ,KAAM,MAENspN,GAAuB,SAAU3iO,EAAQy7D,GAC3C,OAAOgnK,GAAiBD,mBAAmBxiO,IAEzC4iO,GAAW,SAAUC,GACvB,OAAO,SAAU7iO,EAAQy7D,GACvB,IAAIqnK,EAAiD,KAAxCjiO,GAASg7K,mBAAmB77K,GACzC,OAAO8iO,IAAWD,IAGlBE,GAAc,SAAUF,GAC1B,OAAO,SAAU7iO,EAAQy7D,GACvB,OAAO+jK,GAAaD,sBAAsBv/N,KAAY6iO,IAGtDnuH,GAAU,SAAUjhD,EAAWovK,GACjC,OAAO,SAAU7iO,EAAQy7D,GACvB,IAAIh8B,EAAQ+/L,GAAaF,mBAAmBt/N,KAAYyzD,EAAU8D,cAClE,OAAO93B,IAAUojM,IAGjBG,GAAa,SAAUH,GACzB,OAAOnuH,GAAQ,MAAOmuH,IAEpBI,GAAiB,WACnB,OAAOvuH,GAAQ,WAAW,IAExBwuH,GAAqB,SAAUL,GACjC,OAAO,SAAU7iO,EAAQy7D,GACvB,OAAO56D,GAAS+6K,iBAAiB57K,KAAY6iO,IAG7CM,GAAc,SAAUnjO,EAAQy7D,GAClC,OAAOgnK,GAAiBF,eAAeviO,IAErCotI,GAAc,SAAUptI,EAAQy7D,GAClC,OAAOA,GAEL2nK,GAA4B,SAAUpjO,GACxC,IAAIovM,EAAkBvuM,GAASg7K,mBAAmB77K,GAC9CqjO,EAAe7D,GAAaL,gBAAgBn/N,EAAOkM,IAAKlM,EAAO6L,UAAUgJ,YAC7E,OAAOwuN,GAAgBrjO,EAAOq8C,OAAOm4G,aAAa6uE,EAAa/+N,SAAU8qM,GAAoC,MAE3Gk0B,GAAU,SAAUC,EAAY/mN,GAClC,OAAO,SAAUxc,EAAQy7D,GACvB,IAAI+nK,EAAU5+K,EAAM2+K,GAAY,SAAU5yM,EAAK+N,GAC7C,OAAO/N,GAAO+N,EAAE1+B,EAAQy7D,MACvB,GACH,OAAO+nK,EAAUnoN,EAAOL,KAAKwB,GAAUnB,EAAOhC,SAG9CoqN,GAAc,SAAUzjO,EAAQgF,GAClC,OAAO0jL,GAAcF,cAAc,CACjC86C,GAAQ,CAACX,IAAuBD,GAAcrpN,QAC9CiqN,GAAQ,CAACL,MAAmBP,GAAcr9F,MAC1Ci+F,GAAQ,CACNN,IAAW,GACXE,IAAmB,GACnB91F,IACCs1F,GAAcr9F,MACjBi+F,GAAQ,CACNN,IAAW,GACXE,IAAmB,IAClBR,GAAcr5M,SACjBi6M,GAAQ,CACNN,IAAW,GACXE,IAAmB,GACnB91F,IACCs1F,GAAcr5M,SACjBi6M,GAAQ,CACNN,IAAW,GACXE,IAAmB,IAClBR,GAAcr9F,MACjBi+F,GAAQ,CACNP,IAAY,GACZ31F,IACCs1F,GAAcr9F,MACjBi+F,GAAQ,CAACP,IAAY,IAAQL,GAAcr5M,SAC3Ci6M,GAAQ,CACNV,IAAS,GACTx1F,GACAg2F,IACCV,GAAcr5M,SACjBi6M,GAAQ,CAACV,IAAS,IAAQF,GAAcr9F,MACxCi+F,GAAQ,CAACH,IAAcT,GAAcr9F,MACrCi+F,GAAQ,CACNV,IAAS,GACTx1F,IACCs1F,GAAcr9F,MACjBi+F,GAAQ,CAACF,IAA4BV,GAAcr5M,UAClD,CACDrpB,EACAgF,EAAIy2D,WACH1hD,MAAM2oN,GAAcrpN,SAErBqqN,GAAgB,CAAE91C,UAAW61C,IAE7BE,GAAW,SAAU3jO,EAAQgF,GAC/B0+N,GAAc91C,UAAU5tL,EAAQgF,GAAK4U,MAAK,WACxCqgL,GAASp3L,OAAO7C,EAAQgF,MACvB,WACDs9N,GAAYz/N,OAAO7C,EAAQgF,KAC1B0T,IAEDkrN,GAAgB,CAAE/gO,OAAQ8gO,IAE1BE,GAAiB,SAAU73N,GACzBA,EAAYkzM,SACdlzM,EAAYkzM,QAAS,EACrBlzM,EAAY7E,QAGZ28N,GAAsB,SAAU9jO,EAAQwqB,GACtCA,EAAMq5C,uBAGVr5C,EAAM+X,iBACNshM,GAAe7jO,EAAOgM,aACtBhM,EAAOgM,YAAYC,UAAS,YACa,IAAnCjM,EAAO6L,UAAU0C,eACnBvO,EAAOoX,YAAY,UAErBwsN,GAAc/gO,OAAO7C,EAAQwqB,QAG7Bu5M,GAAU,SAAU/jO,GACtBA,EAAO4O,GAAG,WAAW,SAAU4b,GACzBA,EAAMG,UAAY4lL,GAAG3tK,OACvBkhM,GAAoB9jO,EAAQwqB,OAI9Bw5M,GAAW,CAAEr1N,MAAOo1N,IAEpBE,GAAuB,SAAUx+N,EAAM8uC,GACzC,IAAIluB,EAAYkuB,EAAIluB,YAChBV,EAAS4uB,EAAI5uB,SACjB,OAAIw9B,GAASj8B,OAAOb,IAClBA,EAAUmD,WAAW7D,EAAQlgB,GACtB4V,EAAOL,KAAKoqJ,GAAc/+I,EAAWV,EAASlgB,EAAKxC,UAEnDqpK,GAAuB/3H,GAAK3yC,KAAI,SAAUqG,GAC/C,IAAImf,EAAWmgC,GAAQJ,SAAS1hD,GAMhC,OALI8uC,EAAIosH,UACNh6J,GAAMsB,EAAKmf,GAEXxkB,GAAOqF,EAAKmf,GAEPg+I,GAAch+I,EAASlb,MAAOzG,EAAKxC,YAI5CihO,GAAuBvrN,EAAMsrN,GAAsB,KACnDE,GAAwBxrN,EAAMsrN,GAAsB,KAEpDG,GAA+B,SAAU5jG,EAAS19H,EAAMwD,GAC1D,OAAOmoK,GAAYL,eAAe5tC,EAAS19H,EAAMwD,EAAM48K,KAErDmhD,GAAkB,SAAUvhO,EAAMyxC,GACpC,OAAOhlC,EAAKkxK,GAAQD,eAAej5H,GAAQN,QAAQ1S,EAAIluB,aAAcvjB,GAAO8/C,KAE1E0hL,GAA+B,SAAU9jG,EAAS19H,EAAMyxC,GAC1D,OAAO6vL,GAA6B5jG,EAAS19H,EAAKoJ,MAAOqoC,GAAK55B,QAAO,SAAUg8J,GAC7E,OAAO0tD,GAAgBvhO,EAAMyxC,GAAK36B,MAAK,WACrC,OAAkD,IAA3C2xJ,GAAcoL,EAAQpiI,EAAKzxC,EAAKoJ,UACtC,SAAU60K,GACX,OAAkD,IAA3CxV,GAAcoL,EAAQpiI,EAAKzxC,EAAKoJ,QAAoBw6I,GAAWq6B,EAAWx5H,GAAQN,QAAQ0vH,EAAOtwJ,qBAI1Gk+M,GAAoB,SAAU/jG,EAAS19H,EAAMyxC,GAC/C,OAAO8vL,GAAgBvhO,EAAMyxC,GAAK36B,MAAK,WACrC,OAAOwqN,GAA6B5jG,EAAS19H,EAAKoJ,MAAOqoC,GAAK55B,QAAO,SAAUg8J,GAC7E,OAAkD,IAA3CpL,GAAcoL,EAAQpiI,EAAKzxC,EAAKoJ,aAExC,SAAUhI,GACX,OAAOkgO,GAA6B5jG,EAASt8H,EAAOgI,MAAOqoC,GAAK/6B,aAGhEgrN,GAAmB7rN,EAAM4rN,IAAmB,GAC5CE,GAAiB9rN,EAAM4rN,IAAmB,GAC1CG,GAAgB/rN,EAAM2rN,IAA8B,GACpDK,GAAehsN,EAAM2rN,IAA8B,GAEnDhgE,GAAO,IACPsgE,GAAmB,SAAUrwL,GAC/B,OAAO6wH,GAAcO,eAAepxH,KAASA,EAAIksH,cAAgBlsH,EAAIosH,WAEnEkkE,GAAoB,SAAU/hO,EAAMyxC,GACtC,IAAI8tI,EAAexzK,EAAO4xK,GAAQD,eAAej5H,GAAQN,QAAQ1S,EAAIluB,aAAcvjB,GAAO8/C,IAC1F,OAAOjjC,GAAK0iK,GAActoK,MAAMjX,IAE9BgiO,GAAiB,SAAUhiO,EAAMyxC,GACnC,OAAIqwL,GAAiBrwL,GACZ0uI,GAAa1uI,GAEb0uI,GAAa1uI,IAAQk6H,GAAYD,aAAaq2D,GAAkB/hO,EAAMyxC,GAAKroC,MAAOqoC,GAAK75B,OAAOuoK,KAGrG8hD,GAAgB,SAAUjiO,EAAMyxC,GAClC,OAAIqwL,GAAiBrwL,GACZyuI,GAAczuI,GAEdyuI,GAAczuI,IAAQk6H,GAAYF,aAAas2D,GAAkB/hO,EAAMyxC,GAAKroC,MAAOqoC,GAAK75B,OAAOsoK,KAGtGgiD,GAAa,SAAU5lO,GACzB,OAAOiV,EAAS,CACd,MACA,YACCjV,IAED6lO,GAAU,SAAU1wL,GACtB,OAAO+3H,GAAuB/3H,GAAK95B,MAAK,SAAUxS,GAChD,OAAO8vF,GAAQ9vF,EAAKwnD,OACnB/0C,QAAO,SAAUzS,GAClB,OAAO+8N,GAAWlgN,GAAM7c,EAAK,oBAG7Bi9N,GAAsB,SAAUpiO,EAAMyxC,GACxC,OAAOk6H,GAAYD,aAAa1rK,EAAKoJ,MAAOqoC,GAAK/6B,UAE/C2rN,GAAgB,SAAUriO,EAAMyxC,GAClC,OAAOk6H,GAAYF,aAAazrK,EAAKoJ,MAAOqoC,GAAK/6B,UAE/C4rN,GAAmB,SAAUtiO,EAAMyxC,GACrC,OAAO2wL,GAAoBpiO,EAAMyxC,IAAQ4wL,GAAcriO,EAAMyxC,IAAQiwL,GAAiB1hO,EAAMyxC,IAAQkwL,GAAe3hO,EAAMyxC,IAAQguI,GAAUz/K,EAAMyxC,IAAQ+tI,GAAWx/K,EAAMyxC,IAExK8wL,GAAkB,SAAUviO,EAAMyxC,GACpC,OAAI0wL,GAAQ1wL,KAGH6wL,GAAiBtiO,EAAMyxC,IAAQuwL,GAAehiO,EAAMyxC,IAAQwwL,GAAcjiO,EAAMyxC,KAGvF+wL,GAAoB,SAAUxiO,EAAMyxC,GACtC,OAAI0wL,GAAQ1wL,KAGHiwL,GAAiB1hO,EAAMyxC,IAAQmwL,GAAc5hO,EAAMyxC,IAAQguI,GAAUz/K,EAAMyxC,IAAQuwL,GAAehiO,EAAMyxC,KAG/G23H,GAAY,SAAU33H,GACxB,IAAIluB,EAAYkuB,EAAIluB,YAChBV,EAAS4uB,EAAI5uB,SACjB,OAAIw9B,GAASj8B,OAAOb,IAAcV,EAASU,EAAUnhB,KAAKjC,OACjDmiK,GAAc/+I,EAAWV,EAAS,GAElC4uB,GAGPgxL,GAAqB,SAAUziO,EAAMyxC,GACvC,IAAIixL,EAAWt5D,GAAU33H,GACzB,OAAI0wL,GAAQO,KAGHf,GAAe3hO,EAAM0iO,IAAab,GAAa7hO,EAAM0iO,IAAaljD,GAAWx/K,EAAM0iO,IAAaT,GAAcjiO,EAAM0iO,KAG3HC,GAAgB,SAAU3iO,EAAMyxC,GAClC,OAAO+wL,GAAkBxiO,EAAMyxC,IAAQgxL,GAAmBziO,EAAMyxC,IAE9DmxL,GAAW,SAAUjgO,EAAMkgB,GAC7B,OAAOi9J,GAAOn9K,EAAKmtF,OAAOjtE,KAExBggN,GAAU,SAAUpxL,GACtB,IAAIluB,EAAYkuB,EAAIluB,YACpB,OAAO88B,GAASj8B,OAAOb,IAAc4vE,GAAW5vE,EAAUnhB,KAAMo/J,KAE9DshE,GAAsB,SAAUngO,GAClC,IAAIqlB,EAAQrlB,EAAK4b,MAAM,IACvB,OAAOzf,EAAIkpB,GAAO,SAAUC,EAAKvnB,GAC/B,OAAIo/K,GAAO73J,IAAQvnB,EAAI,GAAKA,EAAIsnB,EAAM7nB,OAAS,GAAK6/K,GAAYh4J,EAAMtnB,EAAI,KAAOs/K,GAAYh4J,EAAMtnB,EAAI,IAC9F,IAEAunB,KAERzjB,KAAK,KAENu+N,GAAuB,SAAU/iO,EAAM8I,GACzC,IAAInG,EAAOmG,EAAK1G,KACZ84K,EAAW5Y,GAAcx5J,EAAM,GACnC,SAAI85N,GAASjgO,EAAM,IAAOggO,GAAc3iO,EAAMk7K,MAC5CpyK,EAAK1G,KAAO,IAAMO,EAAKe,MAAM,IACtB,IAKPs/N,GAAkC,SAAUl6N,GAC9C,IAAInG,EAAOmG,EAAK1G,KACZ6gO,EAAUH,GAAoBngO,GAClC,OAAIsgO,IAAYtgO,IACdmG,EAAK1G,KAAO6gO,GACL,IAKPC,GAAqB,SAAUljO,EAAM8I,GACvC,IAAInG,EAAOmG,EAAK1G,KACZ+4K,EAAU7Y,GAAcx5J,EAAMnG,EAAKxC,OAAS,GAChD,SAAIyiO,GAASjgO,EAAMA,EAAKxC,OAAS,IAAOwiO,GAAc3iO,EAAMm7K,MAC1DryK,EAAK1G,KAAOO,EAAKe,MAAM,GAAI,GAAK,KACzB,IAKPy/N,GAAiB,SAAUnjO,EAAMyxC,GACnC,OAAOl5B,EAAOL,KAAKu5B,GAAK1lC,OAAO82N,IAASlrN,MAAK,SAAU85B,GACrD,IAAIluB,EAAYkuB,EAAIluB,YAChB01B,EAAa8pL,GAAqB/iO,EAAMujB,IAAcy/M,GAAgCz/M,IAAc2/M,GAAmBljO,EAAMujB,GACjI,OAAO01B,EAAa1gC,EAAOL,KAAKu5B,GAAOl5B,EAAOhC,WAG9C6sN,GAAyB,SAAUlmO,GACrC,IAAI8C,EAAOykD,GAAQN,QAAQjnD,EAAOoU,WAC9BpU,EAAO6L,UAAU0C,eACnB03N,GAAenjO,EAAMsiK,GAAcG,eAAevlK,EAAO6L,UAAUyc,WAAWxZ,MAAK,SAAUylC,GAC3Fv0C,EAAO6L,UAAU0b,OAAOgtB,EAAI8wH,eAK9B8gE,GAA0B,SAAUrjO,GACtC,OAAO,SAAUo9C,GACf,OAAOA,EAAStmC,MAAK,SAAU7V,GAC7B,OAAO0qK,GAAYD,aAAa1rK,EAAKoJ,MAAO45J,GAAgBljK,OAAOmB,OAClE,SAAUA,GACX,OAAO0qK,GAAYC,gBAAgB3qK,MAClC,SAAUA,GACX,OAAO0qK,GAAYE,eAAe5qK,MACjC,SAAUA,GACX,OAAO0qK,GAAYF,aAAazrK,EAAKoJ,MAAO45J,GAAgBn/J,MAAM5C,SAIpEqiO,GAAkC,SAAUtjO,EAAMyxC,GACpD,OAAO,SAAU8xL,GACf,OAAOhB,GAAgBviO,EAAMujO,GAAYnC,GAAqB3vL,GAAO4vL,GAAsB5vL,KAG3F+xL,GAAiB,SAAUtmO,GAC7B,OAAO,SAAUu0C,GAGf,OAFAv0C,EAAO6L,UAAU0b,OAAOgtB,EAAI8wH,WAC5BrlK,EAAOmV,eACA,IAGPoxN,GAA+B,SAAUvmO,GAC3C,IAAIu0C,EAAMuxH,GAAgBP,eAAevlK,EAAO6L,UAAUyc,UACtDxlB,EAAOykD,GAAQN,QAAQjnD,EAAOoU,WAClC,GAAIpU,EAAO6L,UAAU0C,cAAe,CAClC,IAAIwuK,EAAiBpkK,EAAM8kK,GAAYV,eAAgB/8K,GACnDglK,EAAgBc,GAAgBP,eAAevlK,EAAO6L,UAAUyc,UACpE,OAAO2hK,GAAiBf,aAAanM,EAAgB/8K,EAAOoU,UAAW4wJ,GAAevqJ,KAAK0rN,GAAwBrjO,IAAO2X,KAAK2rN,GAAgCtjO,EAAMyxC,IAAM75B,OAAO4rN,GAAetmO,IAEjM,OAAO,GAIPwmO,GAA2B,SAAUxmO,EAAQgF,GAC/Cw5N,GAAUzzG,QAAQ,CAAC,CACfpgG,QAAS4lL,GAAG1tK,SACZrmB,OAAQgiN,GAAUhiN,OAAO+pN,GAA8BvmO,KACrDgF,GAAK8J,MAAK,SAAUzN,GACxB2D,EAAIu9B,qBAGJkkM,GAAU,SAAUzmO,GACtBA,EAAO4O,GAAG,WAAW,SAAU5J,IACI,IAA7BA,EAAI6+D,sBACN2iK,GAAyBxmO,EAAQgF,OAInC0hO,GAAW,CAAE/3N,MAAO83N,IAEpBE,GAA0B,SAAU3mO,GACtC,OAAOi4F,GAAW1wC,GAAQN,QAAQjnD,EAAOoU,WAAY,qBAAqBwF,KAAK7O,EAAS,OAAO,SAAU9C,GACvG,OAAOA,EAAIiE,UAGX06N,GAAsB,SAAU5mO,GAClCA,EAAO6L,UAAU0b,OAAOvnB,EAAO6L,UAAUyc,WAEvCuyJ,GAA0B,SAAU76K,EAAQ63M,GAC1CA,EAAoB79J,aAAa,oBACnCknH,GAAwB22C,GACxB+uB,GAAoB5mO,GACpBA,EAAO6L,UAAU+0E,eAAei3H,KAGhCgvB,GAAuB,SAAU7mO,EAAQoO,GAC3C,IAAIypM,EAAsB8uB,GAAwB3mO,GAClD,GAAK63M,EAGL,MAAe,qBAAXzpM,EAAE3M,MACJ2M,EAAEm0B,iBACFn0B,EAAEk0B,uBACFu4I,GAAwB76K,EAAQ63M,SAG9B9xL,GAAW8xL,KACbh9B,GAAwB76K,EAAQ63M,GAChC73M,EAAOgM,YAAY7E,SAGnB2/N,GAAU,SAAU9mO,GACtBA,EAAO4O,GAAG,yBAA0B+J,EAAMkuN,GAAsB7mO,KAE9D+mO,GAAsB,CAAEp4N,MAAOm4N,IAE/BE,GAAYz5K,GAAoBvE,SAAS0C,QACzCu7K,GAAe,SAAUjnO,GAC3B,IAAIknO,EAAmB3pI,IAAM,WACtBv9F,EAAOorL,WACV86C,GAAuBlmO,KAExB,GACCgnO,GAAU/8K,SACZjqD,EAAO4O,GAAG,YAAY,SAAUR,GAC9B84N,EAAiB7xG,cAEnBr1H,EAAO4O,GAAG,UAAU,SAAUR,GAC5B84N,EAAiBr+L,cAInBs+L,GAAU,SAAUnnO,GACtBinO,GAAajnO,GACbA,EAAO4O,GAAG,SAAS,SAAUR,IACL,IAAlBA,EAAEg5N,aACJlB,GAAuBlmO,OAKzBqnO,GAA2B,SAAUrnO,EAAQgF,GAC/Cw5N,GAAUzzG,QAAQ,CAChB,CACEpgG,QAAS4lL,GAAG95B,IACZj6J,OAAQ6+M,GAAmBr7N,GAAQ,IAErC,CACE2qB,QAAS4lL,GAAGC,KACZh0L,OAAQ6+M,GAAmBr7N,GAAQ,KAEpCgF,GAAK8J,MAAK,SAAUzN,GACrB2D,EAAIu9B,qBAGJ+kM,GAAU,SAAUtnO,GACtBA,EAAO4O,GAAG,WAAW,SAAU5J,IACI,IAA7BA,EAAI6+D,sBACNwjK,GAAyBrnO,EAAQgF,OAInCuiO,GAAc,CAAE54N,MAAO24N,IAEvBE,GAAU,SAAUxnO,GACtB,IAAI6lI,EAAQ8lD,GAAkBH,mBAAmBxrL,GACjD+mO,GAAoBp4N,MAAM3O,GAC1B2+N,GAAUhwN,MAAM3O,EAAQ6lI,GACxBk5F,GAAoBpwN,MAAM3O,EAAQ6lI,GAClCm+F,GAASr1N,MAAM3O,GACf0mO,GAAS/3N,MAAM3O,GACfmnO,GAAQnnO,GACRunO,GAAY54N,MAAM3O,IAEhBynO,GAAoB,CAAE94N,MAAO64N,IAEjC,SAASz0J,GAAQ/yE,GACf,IAAI8O,EAAOlP,GAAMkP,KACbisD,EAAYw1I,GAAGx1I,UAAWC,EAASu1I,GAAGv1I,OAAQ9uD,EAAMlM,EAAOkM,IAAKL,EAAY7L,EAAO6L,UAAW5L,EAAWD,EAAOC,SAAU2hD,EAAS5hD,EAAO4hD,OAC1I8lL,EAAU71F,GAAI7iE,MAAO/kB,EAAO4nF,GAAIlkH,GAAIg6M,EAAW91F,GAAI5jE,OACnD1C,EAAuB,0BACvBq8J,EAAsB39K,EAAO,OAAS,MACtCu0I,EAAwB,SAAU7tL,EAAK8uB,GACzC,IACEz/B,EAAOyP,SAAS2H,YAAYzG,GAAK,EAAO8uB,GACxC,MAAOjP,MAGPqzC,EAAqB,SAAUz1D,GACjC,OAAOA,EAAEy1D,sBAEPgkK,EAAwB,SAAUz5N,GACpC,IAAI05N,EAAeC,EACf35N,EAAEk9D,eACAtrE,EAAO6L,UAAU0C,eAAsC,QAArBH,EAAE6C,OAAOI,SAC7CxF,EAAUO,OAAOgC,EAAE6C,QAErB62N,EAAgB9nO,EAAO6L,UAAUqhB,aAC7B46M,EAAc7kO,OAAS,IACzB8kO,EAAkBx8J,EAAuB/oD,OAAOxiB,EAAOwC,IAAM,IAAMggB,OAAOslN,GAC1E15N,EAAEk9D,aAAayE,QAAQ63J,EAAqBG,MAI9CC,EAAwB,SAAU55N,GACpC,IAAI25N,EACJ,OAAI35N,EAAEk9D,eACJy8J,EAAkB35N,EAAEk9D,aAAaE,QAAQo8J,GACrCG,GAAmBA,EAAgB7/N,QAAQqjE,IAAyB,IACtEw8J,EAAkBA,EAAgBjiN,OAAOylD,EAAqBtoE,QAAQoe,MAAM,KACrE,CACL7e,GAAImgB,SAASolN,EAAgB,IAC7B9+N,KAAM0Z,SAASolN,EAAgB,MAI9B,MAELE,EAA0B,SAAUvmO,EAASw7D,GAC3Cl9D,EAAOo8L,sBAAsB,6BAC/Bp8L,EAAOoX,YAAY,6BAA6B,EAAO,CACrD1V,QAASA,EACTw7D,SAAUA,IAGZl9D,EAAOoX,YAAY,oBAAoB,EAAO1V,IAG9CwmO,EAA0B,WAC5B,IAAIC,EAAe,SAAUjiN,GAC3B,IAAIvY,EAAOzB,EAAIiE,OAAO,QAClBw1G,EAAWz/F,EAAI4vJ,gBAEnB,OADAnoK,EAAK4C,YAAYo1G,GACV95G,EAAUi2C,WAAW9/B,UAAUrU,EAAM,CAAEgH,OAAQ,UAEpDyzN,EAAsB,SAAUliN,GAClC,IAAIra,EAAYs8N,EAAajiN,GACzBmiN,EAASn8N,EAAIob,YACjB+gN,EAAOprG,WAAWj9H,EAAOoU,WACzB,IAAIk0N,EAAeH,EAAaE,GAChC,OAAOx8N,IAAcy8N,GAEvBtoO,EAAO4O,GAAG,WAAW,SAAUR,GAC7B,IACIG,EAAaZ,EADbgd,EAAUvc,EAAEuc,QAEhB,IAAKk5C,EAAmBz1D,KAAOuc,IAAYqwC,GAAUrwC,IAAYowC,GAAY,CAG3E,GAFAxsD,EAAcvO,EAAO6L,UAAU0C,cAC/BZ,EAAO3N,EAAOoU,UACV7F,IAAgBrC,EAAI4wC,QAAQnvC,GAC9B,OAEF,IAAKY,IAAgB65N,EAAoBpoO,EAAO6L,UAAUyc,UACxD,OAEFla,EAAEm0B,iBACFviC,EAAOy8C,WAAW,IACd9uC,EAAKuK,YAAchM,EAAI02C,QAAQj1C,EAAKuK,YACtClY,EAAO6L,UAAUqc,kBAAkBva,EAAKuK,WAAY,GAEpDlY,EAAO6L,UAAUqc,kBAAkBva,EAAM,GAE3C3N,EAAOmV,mBAITozN,EAAY,WACdvoO,EAAOsc,UAAUnV,IAAI,SAAU,KAAM,cAEnCqhO,EAAmB,WAChBxoO,EAAOC,SAASgjM,kBACnB/2L,EAAIuO,KAAKza,EAAOyP,SAAU,qBAAqB,SAAUrB,GACvD,IAAI8X,EACJ,GAAI9X,EAAE6C,SAAWjR,EAAOyP,SAAS4rE,gBAG/B,GAFAn1D,EAAMra,EAAUyc,SAChBtoB,EAAOoU,UAAUc,QACF,cAAX9G,EAAE3M,KAAsB,CAC1B,GAAI2+J,GAAiBl6I,EAAII,gBACvB,OAEFza,EAAUkqM,aAAa3nM,EAAE0mC,QAAS1mC,EAAE2mC,cAEpClpC,EAAU0b,OAAOrB,OAMvBuiN,EAAsB,WACxBzoO,EAAO4O,GAAG,WAAW,SAAUR,GAC7B,IAAKy1D,EAAmBz1D,IAAMA,EAAEuc,UAAYowC,EAAW,CACrD,IAAK/6D,EAAOoU,UAAU9D,qBAAqB,MAAMrN,OAC/C,OAEF,GAAI4I,EAAU0C,eAAoD,IAAnC1C,EAAUyc,SAAS7B,YAAmB,CACnE,IAAI7a,EAAOC,EAAUC,UACjBi3C,EAAkBn3C,EAAKm3C,gBAC3B,GAAsB,OAAlBn3C,EAAKtH,SAGP,OAFA4H,EAAImJ,OAAOzJ,QACXwC,EAAEm0B,iBAGAwgB,GAAmBA,EAAgBz+C,UAAuD,OAA3Cy+C,EAAgBz+C,SAASic,gBAC1ErU,EAAImJ,OAAO0tC,GACX30C,EAAEm0B,wBAMR+iK,EAAY,WACTrmM,EAAW0kD,MAAM3hD,UAAU65H,gBAC9B77H,EAAO4O,GAAG,aAAa,SAAUR,GAC/B,IAAKy1D,EAAmBz1D,IAA4B,SAAtBA,EAAE6C,OAAO3M,SAAqB,CAC1D,IAAIw8H,EAAS9gI,EAAOoU,UACpB0sH,EAAO4nG,OACP31F,GAAM1nH,iBAAiBrrB,GAAQ,WAC7B8gI,EAAO5rH,gBAMbyzN,EAAwB,WAC1B3oO,EAAO4O,GAAG,SAAS,SAAUR,GAC3B,IAAI6C,EAAS7C,EAAE6C,OACX,aAAa9M,KAAK8M,EAAO3M,WAAsD,UAAzC4H,EAAI2uJ,yBAAyB5pJ,KACrE7C,EAAEm0B,iBACFviC,EAAO6L,UAAUO,OAAO6E,GACxBjR,EAAOmV,eAEe,MAApBlE,EAAO3M,UAAoB4H,EAAIqG,SAAStB,EAAQ,qBAClD7C,EAAEm0B,iBACF12B,EAAUO,OAAO6E,QAInB23N,EAA8C,WAChD,IAAIC,EAA4B,WAC9B,IAAIt1L,EAAWrnC,EAAI+rJ,WAAWpsJ,EAAUgJ,WAAWm+B,WAAU,IAC7D,OAAO,WACL,IAAI/hC,EAASpF,EAAUgJ,WACnB5D,IAAWjR,EAAOoU,YACpBlI,EAAIC,UAAU8E,EAAQ,QAAS,MAC/BnC,EAAKykC,GAAU,SAAUtkC,GACvBgC,EAAO63N,iBAAiB75N,EAAK+jC,WAAU,UAK3C+1L,EAA4B,WAC9B,OAAQl9N,EAAU0C,eAAiBrC,EAAIyL,UAAU9L,EAAUgJ,WAAY3I,EAAI02C,WAAa12C,EAAIyL,UAAU9L,EAAUoxF,SAAU/wF,EAAI02C,UAEhI5iD,EAAO4O,GAAG,YAAY,SAAUR,GAC9B,IAAI2yN,EACJ,IAAKl9J,EAAmBz1D,KAAqB,IAAdA,EAAEuc,SAA+B,KAAdvc,EAAEuc,UAAmBo+M,IAKrE,OAJAhI,EAAkB8H,IAClB7oO,EAAOyP,SAAS2H,YAAY,UAAU,EAAO,MAC7C2pN,IACA3yN,EAAEm0B,kBACK,KAGXr2B,EAAIuO,KAAKza,EAAOyP,SAAU,OAAO,SAAUrB,GACzC,IAAI2yN,GACCl9J,EAAmBz1D,IAAM26N,MAC5BhI,EAAkB8H,IAClB91F,GAAM1nH,iBAAiBrrB,GAAQ,WAC7B+gO,YAKJiI,EAA6B,WAC/BhpO,EAAO4O,GAAG,WAAW,SAAUR,GAC7B,IAAKy1D,EAAmBz1D,IAAMA,EAAEuc,UAAYowC,GACtClvD,EAAU0C,eAAoD,IAAnC1C,EAAUyc,SAAS7B,YAAmB,CACnE,IAAIs8B,EAAkBl3C,EAAUC,UAAUi3C,gBAC1C,GAAIA,GAAmBA,EAAgBz+C,UAAuD,UAA3Cy+C,EAAgBz+C,SAASic,cAE1E,OADAnS,EAAEm0B,kBACK,OAMb0mM,EAA8B,WAChCjpO,EAAO4O,GAAG,WAAW,SAAUR,GAC7B,IAAI8X,EAAKG,EAAWV,EAAQ7iB,EAAMoB,EAClC,IAAI2/D,EAAmBz1D,IAAMA,EAAEuc,UAAY4lL,GAAGx1I,YAG9C70C,EAAMra,EAAUyc,SAChBjC,EAAYH,EAAII,eAChBX,EAASO,EAAIO,YACb3jB,EAAOoJ,EAAIo1C,UACXp9C,EAASmiB,EACJH,EAAIE,WAAwB,IAAXT,GAAtB,CAGA,MAAOzhB,GAAUA,EAAOG,YAAcH,EAAOG,WAAW6T,aAAehU,GAAUA,EAAOG,aAAevB,EACrGoB,EAASA,EAAOG,WAEK,eAAnBH,EAAOmN,UACTrR,EAAOwO,UAAUC,OAAO,aAAc,KAAMvK,GAC5CgiB,EAAMha,EAAIob,YACVpB,EAAIW,SAASR,EAAW,GACxBH,EAAIY,OAAOT,EAAW,GACtBxa,EAAU0b,OAAOrB,SAInBgjN,EAAyB,WAC3B,IAAIC,EAAU,WACZ3qC,EAAsB,gBAAgB,GACtCA,EAAsB,4BAA4B,GAC7Cv+L,EAASyhM,iBACZlD,EAAsB,wBAAwB,IAG7Cv+L,EAASgU,UACZjU,EAAO4O,GAAG,8BAA+Bu6N,IAGzCC,EAAsB,WACxB,IAAIC,EAAW,WACbv6N,EAAK5C,EAAIE,OAAO,MAAM,SAAUR,GAC9B,IAAIvH,EAAauH,EAAKvH,WAClBvB,EAAOoJ,EAAIo1C,UACf,GAAIj9C,EAAWq+C,YAAc92C,EAAM,CACjC,MAAOvH,IAAe6H,EAAI02C,QAAQv+C,GAAa,CAC7C,GAAIA,EAAWA,WAAWq+C,YAAcr+C,GAAcA,IAAevB,EACnE,OAEFuB,EAAaA,EAAWA,WAE1B6H,EAAI/E,IAAI9C,EAAY,KAAM,CAAE,iBAAkB,SAIpDrE,EAAO4O,GAAG,0BAA0B,SAAUR,GAC7B,eAAXA,EAAE3M,MAAuC,kBAAd2M,EAAE+sD,SAC/BkuK,QAIFC,EAAsB,WACpBrpO,EAAS4zD,mBACX7zD,EAAO4O,GAAG,QAAQ,WAChB4vL,EAAsB,4BAA6Bv+L,EAAS4zD,uBAI9DwxI,EAAqB,WACvBrlM,EAAO4O,GAAG,yBAAyB,SAAUR,GACtCmiM,GAAG3lL,gBAAgBxc,IACtBvC,EAAUktK,eAEX,IAEDwwD,EAAsB,WACxBvpO,EAAO24M,cAAc9xM,KAAK,oFAExB2iO,EAAwB,WACrBxpO,EAAOkQ,QACVlQ,EAAO4O,GAAG,WAAW,WACf3P,EAAW4E,SAASsoH,gBAAkBltH,EAAW4E,SAAS8J,MAC5D3N,EAAOm7H,SAASjmH,YAKpBu0N,EAAa,WACVzpO,EAAOkQ,SACVlQ,EAAO24M,cAAc9xM,KAAK,4BAC1B7G,EAAO4O,GAAG,SAAS,SAAUR,GAC3B,IAAI8X,EACJ,GAA0B,SAAtB9X,EAAE6C,OAAO3M,SAAqB,CAChC,GAAIutI,GAAIlkH,GAAK,GAEX,YADA3tB,EAAOoU,UAAUc,QAGnBgR,EAAMlmB,EAAO6L,UAAUyc,SACvBtoB,EAAOoU,UAAUc,QACjBlV,EAAO6L,UAAU0b,OAAOrB,GACxBlmB,EAAO6L,UAAUktK,YACjB/4K,EAAOmV,oBAKXu0N,EAA0B,WACxB73F,GAAIz1H,KACNpc,EAAO4O,GAAG,WAAW,SAAUR,IACzBmiM,GAAG/0I,eAAeptD,IAAOA,EAAEqtD,UAA2B,KAAdrtD,EAAEuc,SAAgC,KAAdvc,EAAEuc,UAChEvc,EAAEm0B,iBACFviC,EAAO6L,UAAUw+K,SAASC,OAAO,OAAsB,KAAdl8K,EAAEuc,QAAiB,WAAa,UAAW,qBAKxFg/M,EAAuB,WACzBnrC,EAAsB,iBAAiB,IAErCorC,EAAoB,WACtB5pO,EAAO4O,GAAG,SAAS,SAAUR,GAC3B,IAAInG,EAAMmG,EAAE6C,OACZ,GACE,GAAoB,MAAhBhJ,EAAIoJ,QAEN,YADAjD,EAAEm0B,uBAGGt6B,EAAMA,EAAI5D,eAErBrE,EAAO24M,cAAc9xM,KAAK,oDAExBgjO,EAA8B,WAChC7pO,EAAO4O,GAAG,QAAQ,WAChB5O,EAAOkM,IAAIuO,KAAKza,EAAOoU,UAAW,UAAU,SAAUhG,GACpDA,EAAEm0B,wBAIJunM,EAA4B,WAC9BloL,EAAOC,cAAc,MAAM,SAAUvuC,GACnC,IAAI9P,EAAI8P,EAAMrQ,OACd,MAAOO,IAC0B,8BAA3B8P,EAAM9P,GAAGyL,KAAK,UAChBqE,EAAM9P,GAAG6R,aAKb00N,EAAwB,WAC1B/pO,EAAO4O,GAAG,aAAa,SAAUR,GAC/By5N,EAAsBz5N,MAExBpO,EAAO4O,GAAG,QAAQ,SAAUR,GAC1B,IAAKy1D,EAAmBz1D,GAAI,CAC1B,IAAI25N,EAAkBC,EAAsB55N,GAC5C,GAAI25N,GAAmBA,EAAgBvlO,KAAOxC,EAAOwC,GAAI,CACvD4L,EAAEm0B,iBACF,IAAIrc,EAAMysM,GAAoBvrK,UAAUh5C,EAAEmI,EAAGnI,EAAEoI,EAAGxW,EAAOyP,UACzD5D,EAAU0b,OAAOrB,GACjB+hN,EAAwBF,EAAgB9+N,MAAM,SAKlD88L,EAAyB,aAEzBnsC,EAAW,WACb,IAAI7mH,EACJ,OAAK20L,GAAW1nO,EAAO0/B,QACd,GAETqT,EAAM/yC,EAAO6L,UAAUw+K,UACft3I,IAAQA,EAAI4sF,YAAiC,IAAnB5sF,EAAI4sF,aAyCxC,OAvCAspG,IACAf,IACKr2F,GAAIf,cACPu0D,IAEEsiC,IACFa,IACAG,IACAW,IACAO,IACAb,IACAc,IACIj4F,GAAI/hE,KACN05J,IACAC,IACAG,KAEArB,KAGA12F,GAAIlkH,IAAM,KACZ87M,IACAT,KAEEn3F,GAAIlkH,KACN46M,IACAoB,IACAI,KAEErC,IACFe,IACAnjC,IACAsjC,IACAM,IACAE,IACAG,IACAG,IACAV,KAEK,CACLjjC,uBAAwBA,EACxBnsC,SAAUA,GAId,IAAIowE,GAAkB,SAAUp+N,GAC9B,OAAOu3C,GAASsM,UAAU7jD,IAAS+2C,GAAY4E,GAAQN,QAAQr7C,KAE7Dq+N,GAAuB,SAAUjqO,GACnC,IAAIkmB,EAAMlmB,EAAO6L,UAAUyc,SACvBtF,EAAWoiJ,GAAcG,eAAer/I,GACxCjD,EAASmiJ,GAAcI,aAAat/I,GACxC,GAAIk/I,GAAcQ,kBAAkB5iJ,GAAW,CAC7C,IAAIqD,EAAYrD,EAASqD,YACrB2jN,GAAgB3jN,IAClBooJ,GAAYC,gBAAgBroJ,GAAWvX,MAAK,SAAUylC,GACpD,OAAOruB,EAAIW,SAAS0tB,EAAIluB,YAAakuB,EAAI5uB,aAI/C,GAAIy/I,GAAcQ,kBAAkB3iJ,GAAS,CACvCoD,EAAYrD,EAASqD,YACrB2jN,GAAgB3jN,IAClBooJ,GAAYE,eAAetoJ,GAAWvX,MAAK,SAAUylC,GACnD,OAAOruB,EAAIY,OAAOytB,EAAIluB,YAAakuB,EAAI5uB,aAI7C3lB,EAAO6L,UAAU0b,OAAOyxJ,GAAgBD,UAAU7yJ,KAEhDgkN,GAAU,SAAUlqO,GACtBA,EAAO4O,GAAG,SAAS,SAAUR,GACvBA,EAAE+nD,QAAU,GACd8zK,GAAqBjqO,OAKvBmqO,GAAuB,SAAUnqO,GACnCA,EAAO4O,GAAG,SAAS,SAAUR,GACvBpO,EAAOkM,IAAIyL,UAAUvJ,EAAE6C,OAAQ,YACjC7C,EAAEm0B,qBAIJ6nM,GAAgB,SAAUpqO,GAC5BA,EAAO4hD,OAAOC,cAAc,WAAW,SAAU8D,GAC/C72C,EAAK62C,GAAM,SAAUi1C,GACnBA,EAAQ3rF,KAAK,gBAAiB2rF,EAAQ3rF,KAAK,SAC3C2rF,EAAQ3rF,KAAK,OAAQ,cAGzBjP,EAAO8hD,WAAWD,cAAc,WAAW,SAAU8D,GACnD72C,EAAK62C,GAAM,SAAUi1C,GACnB,IAAI3tF,EAAO2tF,EAAQ3rF,KAAK,iBACxB2rF,EAAQ3rF,KAAK,OAAQo1C,EAASp3C,GAAQA,EAAO,MAC7C2tF,EAAQ3rF,KAAK,gBAAiB,aAIhCo7N,GAAU,SAAUrqO,GACtBmqO,GAAqBnqO,GACrBoqO,GAAcpqO,IAGZ64D,GAAQkiG,GAAWv6J,IACnB8pO,GAAc,SAAUtqO,EAAQyF,GAClC,IAAIka,EAAO4nC,GAAQN,QAAQjnD,EAAOyP,SAASkQ,MACvCpY,EAAMggD,GAAQL,QAAQ,SAC1B5nD,GAAIiI,EAAK,OAAQ,YACjB6H,GAAO7H,EAAKggD,GAAQJ,SAAS1hD,IAC7B2J,GAAOuQ,EAAMpY,IAEXgjO,GAAe,SAAUvqO,GAC3B,IAAI4hD,EAAS4qK,GAAUxsN,EAAOC,SAAUD,EAAOq8C,QA0D/C,OAzDAuF,EAAOqhB,mBAAmB,2BAA2B,SAAU3vD,EAAOlM,GACpE,IAAsBwE,EAElBxM,EAAOoqN,EAFPhmN,EAAI8P,EAAMrQ,OACViJ,EAAMlM,EAAOkM,IAEjB,MAAO1I,IAIL,GAHAoI,EAAO0H,EAAM9P,GACbpE,EAAQwM,EAAKqD,KAAK7H,GAClBoiN,EAAe,YAAcpiN,GACxBwE,EAAKnE,WAAW7F,IAAI4nN,GAAe,CACtC,GAA+B,IAA3BpqN,EAAM8I,QAAQ,UAA6C,IAA3B9I,EAAM8I,QAAQ,SAChD,SAEW,UAATd,GACFhI,EAAQ8M,EAAImxC,eAAenxC,EAAIkxC,WAAWh+C,GAAQwM,EAAKxE,MAClDhI,EAAM6D,SACT7D,EAAQ,MAEVwM,EAAKqD,KAAKu6M,EAAcpqN,GACxBwM,EAAKqD,KAAK7H,EAAMhI,IACE,aAATgI,GACTwE,EAAKqD,KAAKu6M,EAAcpqN,GACxBwM,EAAKqD,KAAK7H,EAAM,OAEhBwE,EAAKqD,KAAKu6M,EAAcxpN,EAAO4+C,WAAWx/C,EAAOgI,EAAMwE,EAAKxE,WAKpEw6C,EAAOC,cAAc,UAAU,SAAUvuC,GACvC,IAAsB1H,EAAMnK,EAAxB+B,EAAI8P,EAAMrQ,OACd,MAAOO,IACLoI,EAAO0H,EAAM9P,GACb/B,EAAOmK,EAAKqD,KAAK,SAAW,UACC,IAAzBxN,EAAKyG,QAAQ,SACf0D,EAAKqD,KAAK,OAAQ,OAASxN,MAIjCmgD,EAAOC,cAAc,UAAU,SAAUvuC,GACvC,IAAsB1H,EAAlBpI,EAAI8P,EAAMrQ,OACd,MAAOO,IACLoI,EAAO0H,EAAM9P,GACboI,EAAKnK,KAAO,EACZmK,EAAKxE,KAAO,WACZwE,EAAKxM,MAAQ,UAAYwM,EAAKxM,MAAQ,QAG1CwiD,EAAOC,cAAc,2BAA2B,SAAUvuC,GACxD,IAAsB1H,EAAlBpI,EAAI8P,EAAMrQ,OACV8xK,EAAmB/0K,EAAOq8C,OAAO+c,sBACrC,MAAO51D,IACLoI,EAAO0H,EAAM9P,GACToI,EAAKkxC,QAAQi4H,IAAkD,IAA7BnpK,EAAKyU,OAAO,MAAMpd,SACtD2I,EAAKwD,OAAO,IAAIy7M,GAAO,KAAM,IAAIzpM,YAAa,MAI7CwgC,GAEL4oL,GAAY,SAAUxqO,GACpBA,EAAOC,SAASwqO,YAClB13F,GAAM1nH,iBAAiBrrB,GAAQ,WAC7B,IAAI8lM,EAEFA,GADiC,IAA/B9lM,EAAOC,SAASwqO,WACJzqO,EAEAA,EAAO0/L,cAAcrgM,IAAIW,EAAOC,SAASwqO,YAEpD3kC,EAAY4kC,WACf5kC,EAAY5wL,UAEb,MAGHy1N,GAAa,SAAU3qO,GACzBA,EAAO8/L,4BACP9/L,EAAO8+L,aAAc,EACrB9+L,EAAO2hC,KAAK,QACZ3hC,EAAOkV,OAAM,GACblV,EAAOmV,YAAY,CAAEhW,SAAS,IAC9Ba,EAAOi0E,aAAa,yBAA0Bj0E,GAC9CwqO,GAAUxqO,IAER4qO,GAAsB,SAAU5qO,GAClC,OAAOA,EAAOkQ,OAAS2oD,GAAM6+F,iBAAmB13J,EAAOkM,IAAIwrJ,kBAEzDmzE,GAAkB,SAAU7qO,EAAQ8qO,GACtC,IAE2Bn9N,EAAMo9N,EAF7B9qO,EAAWD,EAAOC,SAClBy5D,EAAY15D,EAAOipL,aACnBrgK,EAAM5oB,EAAOyP,SACZxP,EAASiQ,SACZlQ,EAAOipL,aAAap/K,MAAM+tC,WAAa53C,EAAOgrO,eAE3CF,GAAc7qO,EAASgjM,mBAC1Br6K,EAAI3b,OACJ2b,EAAI6E,MAAMztB,EAAOirO,YACjBriN,EAAI7gB,SAEF9H,EAASgjM,mBACXjjM,EAAO4O,GAAG,UAAU,WAClB,IAAIs8N,EAAS5nO,KAAK8Q,UAClBykD,GAAM4rB,YAAYymJ,EAAQ,oBAC1BryK,GAAM4rB,YAAYymJ,EAAQ,kBAC1BryK,GAAM1sD,UAAU++N,EAAQ,kBAAmB,SAE7CryK,GAAMisB,SAASprB,EAAW,oBAC1B15D,EAAOi0D,gBAAkBrrC,EAAM3oB,EAASkrO,kBAAoBlsO,EAAW4E,SACvE7D,EAAOwtB,cAAgBvtB,EAASmrO,gBAAkBnsO,EAAW6B,OAC7Dd,EAAOqrO,YAAc3xK,EACrBz5D,EAASkrO,iBAAmBlrO,EAASmrO,eAAiB,KACtDnrO,EAAS4f,UAAY65C,EAAUp1D,SAASic,eAE1C5S,EAAO3N,EAAOoU,UACdzG,EAAKqG,UAAW,EAChBhU,EAAOiU,SAAWhU,EAASgU,SACtBjU,EAAOiU,WACNjU,EAAOkQ,QAAqD,WAA3C2oD,GAAM5jB,SAAStnC,EAAM,YAAY,KACpDA,EAAK9D,MAAMguC,SAAW,YAExBlqC,EAAK2B,gBAAkBtP,EAAOW,SAAS,0BAA0B,IAEnEgN,EAAKqG,UAAW,EAChBhU,EAAOmuC,aAAeq/J,GAAaxtM,GACnCA,EAAOq8C,OAAS2zG,GAAO/vJ,GACvBD,EAAOkM,IAAM6uJ,GAAWnyI,EAAK,CAC3BouI,aAAa,EACb1B,cAAet1J,EAAO4+C,WACtB42G,oBAAqBx1J,EACrBsrO,WAAYrrO,EAASsrO,uBACrBC,aAAcvrO,EAASurO,aACvB/yE,eAAe,EACfH,aAAct4J,EAAOkQ,OAASlQ,EAAOoU,UAAY,KACjDukJ,QAAS14J,EAASgjM,iBAClB5mJ,OAAQr8C,EAAOq8C,OACfusG,eAAgB/nJ,GAASg8K,wBAAwB78K,GACjDm4J,YAAa,SAAU/pJ,GACrBpO,EAAO2hC,KAAK,YAAavzB,MAG7BpO,EAAO4hD,OAAS2oL,GAAavqO,GAC7BA,EAAO8hD,WAAaktK,GAAgB/uN,EAAUD,GAC9CA,EAAO6L,UAAYmrN,GAAYh3N,EAAOkM,IAAKlM,EAAOm7H,SAAUn7H,EAAO8hD,WAAY9hD,GAC/EA,EAAOyrO,UAAYj3D,GAAUx0K,GAC7BA,EAAOwO,UAAY66M,GAAUrpN,GAC7BA,EAAOgM,YAAc6yM,GAAY7+M,GACjCA,EAAO0rO,sBAAwB,IAAI57B,GAAW9vM,GAC9CA,EAAO46K,oBAAsBy8B,GAAmBr3M,GAChDqqO,GAAQrqO,GACRkqO,GAAQlqO,GACRynO,GAAkB94N,MAAM3O,GACxBsvM,GAAY3gM,MAAM3O,GAClBA,EAAO2hC,KAAK,WACP1hC,EAAS0rO,oBAAuB1rO,EAAS2rO,mBAC5ChjN,EAAIjb,KAAKjG,YAAa,EACtBmxD,GAAM1sD,UAAUwB,EAAM,aAAc,UAEtC3N,EAAOg9D,OAAS+V,GAAO/yE,GACvBA,EAAO2hC,KAAK,cACR1hC,EAASgtB,iBACXtf,EAAK8T,IAAMxhB,EAASgtB,gBAElBhtB,EAAS4rO,SACXl+N,EAAK9D,MAAMiiO,WAAa,UAEtB7rO,EAASsiB,SACXviB,EAAO4O,GAAG,oBAAoB,SAAUR,GACtCxO,GAAMkP,KAAK7O,EAASsiB,SAAS,SAAUvc,GACrCoI,EAAE1M,QAAU0M,EAAE1M,QAAQG,QAAQmE,GAAS,SAAUG,GAC/C,MAAO,wBAAuBqc,OAAOrc,GAAO,kBAKpDnG,EAAO4O,GAAG,cAAc,WACtB5O,EAAOizC,UAAUjzC,EAAOoU,cAE1BpU,EAAOkxF,KAAK,CACV/xF,SAAS,EACTwV,OAAQ,SAEV3U,EAAOo0E,aAAep0E,EAAOktB,WAAW,CAAEvY,OAAQ,QAClD3U,EAAO4O,GAAG,mCAAmC,SAAUR,GACrDpO,EAAOorL,UAAuB,qBAAXh9K,EAAE3M,QAEnBzB,EAAO24M,cAAc11M,OAAS,IAChC8nO,EAAiB,GACjBnrO,GAAMkP,KAAK9O,EAAO24M,eAAe,SAAU9uM,GACzCkhO,GAAkBlhO,EAAQ,UAE5B7J,EAAOkM,IAAIstJ,SAASuxE,IAEtBH,GAAoB5qO,GAAQgpJ,QAAQhpJ,EAAOysB,YAAY,SAAUprB,GAC/DspO,GAAW3qO,MACV,SAAUod,GACXutN,GAAW3qO,MAETC,EAAS8rO,eACXzB,GAAYtqO,EAAQC,EAAS8rO,gBAG7BC,GAAkB,CAAEnB,gBAAiBA,IAErCoB,GAAQlxE,GAAWv6J,IACnB0rO,GAAc,SAAUlsO,EAAQmsO,GAClC,GAAIltO,EAAW4E,SAASuoO,SAAWntO,EAAW6B,OAAOo/C,SAASmsL,UAAYx6F,GAAIlkH,IAAMkkH,GAAIlkH,GAAK,GAAI,CAC/F,IAAI2+M,EAAW3/B,GAAKD,KAAK,OACzB1sM,EAAOssO,GAAY,WACjBN,GAAgBnB,gBAAgB7qO,IAElC,IAAIusO,EAAiB,2DAAkEttO,EAAW4E,SAASuoO,OAAtF,yCAA+IpsO,EAAOwC,GAAtJ,wDAA0N8pO,EAAW,cAE1P,OADAL,GAAM9/N,UAAUggO,EAAK,MAAOI,IACrB,EAET,OAAO,GAELC,GAAkB,SAAUx+M,GAC9B,IAAIy+M,EAAqC,kBAAXz+M,EAAsBA,EAAS,KAAOA,EACpE,OAAOy+M,GAAsC,IAE3CC,GAAsB,SAAUlqO,EAAIuG,EAAOilB,EAAQ2+M,GACrD,IAAIv/M,EAASm6B,GAAQL,QAAQ,UAa7B,OAZAyI,GAAOviC,EAAQu/M,GACfh9K,GAAOviC,EAAQ,CACb5qB,GAAIA,EAAK,OACToqO,YAAa,IACbC,kBAAmB,OACnB9jO,MAAOA,IAETqsF,GAAShoE,EAAQ,CACfW,MAAO,OACPC,OAAQw+M,GAAgBx+M,GACxBo4L,QAAS,UAEJh5L,GAEL09D,GAAgB,SAAU9qF,GAC5B,IAAI2sB,EAAQE,EAAWo+M,EAYvB,OAXAA,EAAapqO,GAAS06K,WAAWv7K,GAAU,eACvCa,GAAS26K,mBAAmBx7K,KAAYA,EAAO+gM,kBACjDkqC,GAAc,eAAiBjrO,EAAOusB,gBAAgBC,SAAW,QAEnEy+M,GAAc,wEACdt+M,EAAS9rB,GAAS46K,UAAUz7K,GAC5B6sB,EAAYhsB,GAAS66K,aAAa17K,GAC9Ba,GAAS86K,yBAAyB37K,KACpCirO,GAAc,uDAAyDpqO,GAAS86K,yBAAyB37K,GAAU,QAErHirO,GAAc,oBAAsBt+M,EAAS,6BAA+BE,EAAY,cAAgB7sB,EAAOwC,GAAK,uBAC7GyoO,GAEL6B,GAAe,SAAU9sO,EAAQ8B,GACnC,IAAIiH,EAAQ/I,EAAO0/L,cAActsL,UAAU,0FACvC+4N,EAAMO,GAAoB1sO,EAAOwC,GAAIuG,EAAOjH,EAAEksB,OAAQntB,GAASy6K,eAAet7K,IAASkM,MAC3FigO,EAAIn6M,OAAS,WACXm6M,EAAIn6M,OAAS,KACbhyB,EAAO2hC,KAAK,SAEd,IAAIorM,EAAkBb,GAAYlsO,EAAQmsO,GAK1C,OAJAnsO,EAAOgtO,qBAAuBlrO,EAAEmrO,gBAChCjtO,EAAO0lM,cAAgBymC,EACvBnsO,EAAOirO,WAAangJ,GAAc9qF,GAClCisO,GAAM9kO,IAAIrF,EAAEmrO,gBAAiBd,GACtBY,GAELG,GAAS,SAAUltO,EAAQmtO,GAC7B,IAAIJ,EAAkBD,GAAa9sO,EAAQmtO,GACvCA,EAAQnpJ,kBACVioJ,GAAM5sO,IAAI8tO,EAAQnpJ,iBAAiBn6E,MAAMu8M,QAAUpmN,EAAOotO,WAC1DptO,EAAOq/L,OAAS4sC,GAAMryE,SAASuzE,EAAQnpJ,kBAEzChkF,EAAOipL,aAAap/K,MAAMu8M,QAAU,OACpC6lB,GAAM9/N,UAAUnM,EAAOwC,GAAI,cAAe,QACrCuqO,GACHf,GAAgBnB,gBAAgB7qO,IAGhCqtO,GAAa,CAAEt7I,KAAMm7I,IAErBI,GAAQvyE,GAAWv6J,IACnB+sO,GAAa,SAAUvtO,EAAQwtO,EAAoBvxK,GACrD,IAAIlrD,EAASq5L,GAAgB/qM,IAAI48D,GAC7BpsD,EAAYu6L,GAAgBhtL,KAAK6+C,IAAWj8D,EAAO+gM,gBAAgBl/L,QAAQ,MAAO,IAEtF,GADAo6D,EAASr8D,GAAMsP,KAAK+sD,GAChBlrD,IAAyD,IAA/CnR,GAAMkuC,QAAQ0/L,EAAoBvxK,GAAgB,CAI9D,GAHAr8D,GAAMkP,KAAKs7L,GAAgB5tC,aAAavgG,IAAS,SAAU8gG,GACzDwwE,GAAWvtO,EAAQwtO,EAAoBzwE,MAErC/8J,EAAOyD,QAAQw4D,GACjB,OAEF,IACE,IAAIwxK,EAAiB,IAAI18N,EAAO/Q,EAAQ6P,EAAW7P,EAAOsM,GAC1DtM,EAAOyD,QAAQw4D,GAAUwxK,EACrBA,EAAe17I,OACjB07I,EAAe17I,KAAK/xF,EAAQ6P,GAC5B29N,EAAmB3mO,KAAKo1D,IAE1B,MAAO7tD,IACP+7L,GAAcF,gBAAgBjqM,EAAQi8D,EAAQ7tD,OAIhDs/N,GAAmB,SAAUtmO,GAC/B,OAAOA,EAAKvF,QAAQ,MAAO,KAEzB8rO,GAAc,SAAU3tO,GAC1B,IAAIwtO,EAAqB,GACzB5tO,GAAMkP,KAAK9O,EAAOC,SAASwD,QAAQ4d,MAAM,SAAS,SAAUja,GAC1DmmO,GAAWvtO,EAAQwtO,EAAoBE,GAAiBtmO,QAGxDwmO,GAAY,SAAU5tO,GACxB,IAAI6tO,EACA7xC,EAAQh8L,EAAOC,SAAS+7L,MACxB33I,EAAS23I,IACXh8L,EAAOC,SAAS+7L,MAAQ0xC,GAAiB1xC,GACzC6xC,EAAQpwE,GAAap+J,IAAI28L,GACzBh8L,EAAOg8L,MAAQ,IAAI6xC,EAAM7tO,EAAQy9J,GAAargJ,KAAK4+K,IAC/Ch8L,EAAOg8L,MAAMjqG,MACf/xF,EAAOg8L,MAAMjqG,KAAK/xF,EAAQy9J,GAAargJ,KAAK4+K,IAAUh8L,EAAO+gM,gBAAgBl/L,QAAQ,MAAO,IAAK7B,EAAOsM,IAG1GtM,EAAOg8L,MAAQ,IAGf8xC,GAAwB,SAAU9tO,GACpC,IAAIU,EAAG8R,EAAGrF,EAAWykF,EAAI9nC,EACrB7pD,EAAWD,EAAOC,SAClBgI,EAAMjI,EAAOipL,aAyBjB,OAxBAvoL,EAAIT,EAAS8tB,OAASu/M,GAAMr4L,SAAShtC,EAAK,UAAY,OACtDuK,EAAIvS,EAAS+tB,QAAUs/M,GAAMr4L,SAAShtC,EAAK,WAAaA,EAAIq9B,aAC5Dn4B,EAAYlN,EAAS8tO,YAAc,IACnCn8I,EAAK,mBACDA,EAAGztF,KAAK,GAAKzD,KACfA,EAAIJ,KAAK8oB,IAAI5X,SAAS9Q,EAAG,IAAK,MAE5BkxF,EAAGztF,KAAK,GAAKqO,KACfA,EAAIlS,KAAK8oB,IAAI5X,SAASgB,EAAG,IAAKrF,IAEhC28C,EAAO9pD,EAAOg8L,MAAMgyC,SAAS,CAC3B/4K,WAAYhtD,EACZ8lB,MAAOrtB,EACPstB,OAAQxb,EACRy7N,WAAYhuO,EAAS+gM,YACrBktC,YAAajuO,EAASghM,eAEnBhhM,EAASgjM,mBACZzwL,GAAKs3C,EAAKw6B,cAAgB9xE,IAAmB,kBAANA,EAAiBs3C,EAAKokL,aAAe,EAAI,IAC5E17N,EAAIrF,IACNqF,EAAIrF,IAGR28C,EAAK97B,OAASxb,EACPs3C,GAELqkL,GAAsB,SAAUnuO,GAClC,IAAI8pD,EACA7hD,EAAMjI,EAAOipL,aASjB,OARAn/H,EAAO9pD,EAAOC,SAAS+7L,MAAMh8L,EAAQiI,GACjC6hD,EAAKk6B,gBAAgBz9D,WACvBujC,EAAKk6B,gBAAgBxhF,GAAKsnD,EAAKk6B,gBAAgBxhF,IAAMxC,EAAOwC,GAAK,WAE/DsnD,EAAKmjL,iBAAmBnjL,EAAKmjL,gBAAgB1mN,WAC/CujC,EAAKmjL,gBAAgBzqO,GAAKsnD,EAAKmjL,gBAAgBzqO,IAAMxC,EAAOwC,GAAK,oBAEnEsnD,EAAK97B,OAAS87B,EAAKw6B,aAAex6B,EAAKw6B,aAAer8E,EAAIq9B,aACnDwkB,GAELskL,GAAyB,SAAUrqO,GACrC,MAAO,CACLigF,gBAAiBjgF,EACjBkpO,gBAAiBlpO,IAGjBsqO,GAAyB,SAAUh6B,GACrC,IAAI44B,EAAkBK,GAAMn9N,OAAO,OAEnC,OADAm9N,GAAMzkN,YAAYokN,EAAiB54B,GAC5B+5B,GAAuBnB,IAE5BqB,GAAmB,SAAUtuO,GAC/B,IAAIq0M,EAAgBr0M,EAAOipL,aAC3B,OAAOjpL,EAAOkQ,OAASk+N,GAAuB,MAAQC,GAAuBh6B,IAE3Ek6B,GAAgB,SAAUvuO,GAC5B,IAAIC,EAAWD,EAAOC,SAAUgI,EAAMjI,EAAOipL,aAE7C,OADAjpL,EAAOotO,WAAanlO,EAAI4B,MAAMu8M,QAC1B/hK,EAASpkD,EAAS+7L,OACb8xC,GAAsB9tO,GACpB2b,EAAW1b,EAAS+7L,OACtBmyC,GAAoBnuO,GAEpBsuO,GAAiBtuO,IAGxBwuO,GAAS,SAAUxuO,GACrB,IAEImtO,EAFAltO,EAAWD,EAAOC,SAClBgI,EAAMjI,EAAOipL,aAejB,OAbAjpL,EAAO0nC,IAAMznC,EAASwuO,QAAUzuO,EAAO0/L,cAAcgvC,KAAKhnM,IAC1D1nC,EAAO0/L,cAAcgvC,KAAKxlC,QAAQjpM,EAASgE,UAC3ChE,EAAS0uO,WAAa1uO,EAAS0uO,YAAcrB,GAAMvzL,UAAU9xC,EAAK,aAAcjI,EAAOgxC,QAAQ,wBAC/FhxC,EAAO2hC,KAAK,iBACZisM,GAAU5tO,GACV2tO,GAAY3tO,GACZmtO,EAAUoB,GAAcvuO,GACxBA,EAAOgkF,gBAAkBmpJ,EAAQnpJ,gBAAkBmpJ,EAAQnpJ,gBAAkB,KACzE/jF,EAAS2uO,aACXhvO,GAAMkP,KAAKlP,GAAM6iJ,QAAQxiJ,EAAS2uO,cAAc,SAAU9vM,GACxD9+B,EAAOysB,WAAW5lB,KAAK7G,EAAOusB,gBAAgBG,WAAWoS,OAGzD7+B,EAASgjM,iBACJ+oC,GAAgBnB,gBAAgB7qO,GAEhCqtO,GAAWt7I,KAAK/xF,EAAQmtO,IAG/B0B,GAAO,CAAE98I,KAAMy8I,IAEfM,GAAQ/zE,GAAWv6J,IACnBuuO,GAAoB,SAAU3nO,GAChC,MAA0B,MAAnBA,EAAKwrF,OAAO,IAEjBo8I,GAAe,SAAUC,EAAcjvO,GACzC,IAAIC,EAAWD,EAAOC,SAClBA,EAASgE,UAAkC,OAAtBhE,EAASgE,WAAsBhE,EAASivO,eAC/DjvO,EAASivO,aAAelvO,EAAO0/L,cAAc95G,QAAU,UAAY3lF,EAASgE,SAAW,OAErFhE,EAASivO,eAAiBlvO,EAAO0/L,cAAcgvC,KAAKxpO,KAAKjF,EAASgE,WACpEgrO,EAAa9nO,IAAIlH,EAASivO,eAG1BC,GAAY,SAAUF,EAAcjvO,EAAQ+0F,EAAQxxF,GACtD,IAAItD,EAAWD,EAAOC,SAAU+7L,EAAQ/7L,EAAS+7L,MACjD,GAAI33I,EAAS23I,GAAQ,CACnB,IAAK+yC,GAAkB/yC,KAAWv+B,GAAargJ,KAAK/a,eAAe25L,GAAQ,CACzE,IAAIozC,EAAWnvO,EAASovO,UACpBD,EACF3xE,GAAavsE,KAAK8qG,EAAOh8L,EAAOusB,gBAAgBG,WAAW0iN,IAE3D3xE,GAAavsE,KAAK8qG,EAAO,UAAYA,EAAQ,SAAWjnG,EAAS,OAGrEk6I,EAAanzE,WAAU,WACrB2B,GAAaF,QAAQy+B,EAAOz4L,WAG9BA,KAGA+rO,GAAc,SAAUrvO,EAAU80F,GAChCn1F,GAAMkoB,QAAQ7nB,EAASwD,WACzBxD,EAASwD,QAAUxD,EAASwD,QAAQ6D,KAAK,MAE3C1H,GAAMkP,KAAK7O,EAASoiM,kBAAkB,SAAU94L,EAAKnC,GACnDgjM,GAAgBl5G,KAAK9pF,EAAMmC,GAC3BtJ,EAASwD,SAAW,IAAM2D,KAE5BxH,GAAMkP,KAAK7O,EAASwD,QAAQ4d,MAAM,SAAS,SAAU46C,GAEnD,GADAA,EAASr8D,GAAMsP,KAAK+sD,GAChBA,IAAWmuI,GAAgBhtL,KAAK6+C,GAClC,GAAI8yK,GAAkB9yK,GAAS,CAC7BA,EAASA,EAAOn2C,OAAO,EAAGm2C,EAAOh5D,QACjC,IAAIu5J,EAAe4tC,GAAgB5tC,aAAavgG,GAChDr8D,GAAMkP,KAAK0tJ,GAAc,SAAUO,GACjC,IAAIgmC,EAAkB,CACpBtxL,OAAQ,WACRurJ,SAAUD,EACVhoE,OAAQ,UAAYA,EAAS,OAE/BgoE,EAAMqtC,GAAgBvtC,UAAUkmC,EAAiBhmC,GACjDqtC,GAAgBl5G,KAAK6rE,EAAIC,SAAUD,WAGrCqtC,GAAgBl5G,KAAKj1B,EAAQ,CAC3BxqD,OAAQ,WACRurJ,SAAU/gG,EACV84B,OAAQ,UAAYA,EAAS,YAMnCgnE,GAAc,SAAU/7J,EAAQ+0F,GAClC,IAAIk6I,EAAe9zE,GAAaA,aAChCg0E,GAAUF,EAAcjvO,EAAQ+0F,GAAQ,WACtCi6I,GAAaC,EAAcjvO,GAC3BsvO,GAAYtvO,EAAOC,SAAU80F,GAC7Bk6I,EAAanzE,WAAU,WAChB97J,EAAO0/B,SACVmvM,GAAK98I,KAAK/xF,KAEXA,GAAQ,SAAUod,GACnB+sL,GAAcH,gBAAgBhqM,EAAQod,EAAK,IACtCpd,EAAO0/B,SACVmvM,GAAK98I,KAAK/xF,UAKdurB,GAAS,SAAUvrB,GACrB,IAAIC,EAAWD,EAAOC,SAAUuC,EAAKxC,EAAOwC,GACxCyyI,EAAe,WACjB65F,GAAM3/J,OAAOlwE,EAAW6B,OAAQ,QAASm0I,GACzCj1I,EAAOurB,UAET,GAAK8pH,GAAWviB,MAAMiiB,WAItB,GAAK/0I,EAAOipL,cAGPp3C,GAAIviI,gBAAT,CAGKrP,EAASiQ,OAIZlQ,EAAOkQ,QAAS,GAHhBlQ,EAAOgrO,cAAgBhrO,EAAOipL,aAAap/K,MAAM+tC,WACjD53C,EAAOipL,aAAap/K,MAAM+tC,WAAa,UAIzC,IAAI23L,EAAOvvO,EAAOipL,aAAasmD,MAAQT,GAAMn3N,UAAUnV,EAAI,QACvD+sO,IACFvvO,EAAOwvO,YAAcD,EACjBtvO,EAAS6hM,eAAiB,kBAAkB39L,KAAKnE,EAAOipL,aAAa3kL,YACvEwqO,GAAMjmN,YAAYimN,GAAM3+N,OAAO,QAAS,CACtC1O,KAAM,SACN2F,KAAM5E,IACJA,GACJxC,EAAOyvO,gBAAiB,GAE1BzvO,EAAO0vO,kBAAoB,SAAUthO,GACnCpO,EAAO2hC,KAAKvzB,EAAE3M,KAAM2M,IAEtB0gO,GAAMr0N,KAAK80N,EAAM,eAAgBvvO,EAAO0vO,mBACxC1vO,EAAO4O,GAAG,SAAS,WACjB5O,EAAOy8C,WAAWz8C,EAAOo0E,aAAc,CAAEz/D,OAAQ,YAE/C1U,EAASohM,cAAiBkuC,EAAKp7J,OAAO5tD,UAAagpN,EAAKp7J,OAAOlxE,QAAWssO,EAAKI,gBACjFJ,EAAKI,cAAgBJ,EAAKp7J,OAC1Bo7J,EAAKp7J,OAAS,WAGZ,OAFAn0E,EAAO0/L,cAAckwC,cACrB5vO,EAAOk0E,UAAS,GACTq7J,EAAKI,cAAcJ,MAIhCvvO,EAAOuN,cAAgBg7L,GAAcvoM,GACrCA,EAAOytC,oBAAsB85J,GAAoBvnM,GACvB,QAAtBC,EAAS4vO,UACX7vO,EAAO4O,GAAG,cAAc,SAAUR,GAC5BA,EAAEm7B,OACJn7B,EAAE1M,QAAUotO,GAAMxtO,OAAO8M,EAAE1M,aAI7BzB,EAASmhM,yBACXphM,EAAO4O,GAAG,UAAU,WACd5O,EAAO8+L,aACT9+L,EAAOupC,UAITtpC,EAASqhM,qBACXthM,EAAO8vO,cAAgB,YACjB9vO,EAAO8+L,aAAgB9+L,EAAO0qO,WAAc1qO,EAAO45J,YACrD55J,EAAOupC,KAAK,CACV50B,OAAQ,MACRu1M,WAAW,EACX6lB,WAAW,KAIjB/vO,EAAO0/L,cAAc9wL,GAAG,eAAgB5O,EAAO8vO,gBAEjD9vO,EAAO0/L,cAAcv4L,IAAInH,GACzB+7J,GAAY/7J,EAAQA,EAAO+0F,cAtEzB+5I,GAAMr0N,KAAKxb,EAAW6B,OAAQ,QAASm0I,IAwEvC+6F,GAAS,CAAEzkN,OAAQA,IAEnB0kN,GAAQ,SAAUjwO,EAAQoH,EAAMnH,GAClC,IAAIiwO,EAAWlwO,EAAOkwO,SAAWlwO,EAAOkwO,SAAW,GACnDA,EAASrpO,KAAK,CACZO,KAAMA,EACNnH,SAAUA,IAEZD,EAAOkwO,SAAWA,GAEhBC,GAAU,CAAEhpO,IAAK8oO,IAEjBG,GAASxwO,GAAMkP,KAAMuhO,GAASzwO,GAAMsP,KACpCohO,GAAa,uGAAuGjvN,MAAM,KAC1HkvN,GAAgB,CAClBC,IAAK,GACLC,KAAM,GACNC,MAAO,IACPC,OAAQ,IAENC,GAAM,SAAUrnO,EAAKtJ,GACvB,IACI4wO,EAAS/zE,EADT57J,EAAOoC,KAKX,GAHAiG,EAAM8mO,GAAO9mO,GACbtJ,EAAWiB,EAAKjB,SAAWA,GAAY,GACvC4wO,EAAU5wO,EAAS6wO,SACf,yBAAyB3sO,KAAKoF,IAAQ,QAAQpF,KAAKoF,GACrDrI,EAAKuxD,OAASlpD,MADhB,CAIA,IAAIwnO,EAA2C,IAAtBxnO,EAAIrB,QAAQ,MACZ,IAArBqB,EAAIrB,QAAQ,MAAe6oO,IAC7BxnO,GAAOsnO,GAAUA,EAAQG,UAAqB,QAAU,cAAgBznO,GAErE,iBAAiBpF,KAAKoF,KACzBuzJ,EAAU78J,EAAS6wO,SAAW7wO,EAAS6wO,SAASvyM,KAAO,IAAIqyM,GAAI3xO,EAAW4E,SAASq8C,SAAS7vC,MAAMkuJ,UAChE,IAA9Bt+J,EAAS6wO,SAASE,SACpBznO,EAAM,aAAerI,EAAK+vO,UAAUn0E,EAASvzJ,IAE7CA,EAAM,oBAAoBlD,KAAKkD,GAC/BA,GAAOsnO,GAAWA,EAAQG,UAAY,QAAU,cAAgB9vO,EAAK+vO,UAAUn0E,EAASvzJ,EAAI,IAAMA,EAAI,KAG1GA,EAAMA,EAAI1H,QAAQ,MAAO,YACzB0H,EAAM,mMAAmMlD,KAAKkD,GAC9M6mO,GAAOE,IAAY,SAAU/wO,EAAGiE,GAC9B,IAAI0tO,EAAO3nO,EAAI/F,GACX0tO,IACFA,EAAOA,EAAKrvO,QAAQ,cAAe,OAErCX,EAAK3B,GAAK2xO,KAERL,IACG3vO,EAAK8vO,WACR9vO,EAAK8vO,SAAWH,EAAQG,UAErB9vO,EAAKiwO,WACRjwO,EAAKiwO,SAAWN,EAAQM,UAErBjwO,EAAKkwO,MAAsB,aAAdlwO,EAAK2sC,OACrB3sC,EAAKkwO,KAAOP,EAAQO,MAEjBlwO,EAAK2sC,MAAsB,aAAd3sC,EAAK2sC,OACrB3sC,EAAK2sC,KAAOgjM,EAAQhjM,MAEtB3sC,EAAKuxD,OAAS,IAEZs+K,IACF7vO,EAAK8vO,SAAW,MAGpBJ,GAAI5uO,UAAY,CACdqvO,QAAS,SAAU9yM,GACjB,IAAIr9B,EAAOoC,KACXi7B,EAAO,mBAAmBl4B,KAAKk4B,GAC/Br9B,EAAKq9B,KAAOA,EAAK,GACjBr9B,EAAKq9J,UAAYhgI,EAAK,GACtBr9B,EAAKy/C,KAAOpiB,EAAK,GACjBr9B,EAAKuxD,OAAS,GACdvxD,EAAKsrB,UAEP8kN,WAAY,SAAU7+M,GACpB,IACI2lB,EADAl3C,EAAOoC,KAEX,GAAY,OAARmvB,EACF,OAAOA,EAGT,GADAA,EAAM,IAAIm+M,GAAIn+M,EAAK,CAAEq+M,SAAU5vO,IACd,aAAbuxB,EAAIob,MAAuB3sC,EAAK2sC,OAASpb,EAAIob,MAAQpb,EAAIob,MAAQ3sC,EAAKkwO,OAAS3+M,EAAI2+M,MAAQlwO,EAAK8vO,WAAav+M,EAAIu+M,UAA6B,KAAjBv+M,EAAIu+M,SACnI,OAAOv+M,EAAIjG,SAEb,IAAI+kN,EAAKrwO,EAAKsrB,SAAUglN,EAAK/+M,EAAIjG,SACjC,OAAI+kN,IAAOC,GAAmC,MAA7BD,EAAG3+I,OAAO2+I,EAAGtuO,OAAS,IAAcsuO,EAAGzrN,OAAO,EAAGyrN,EAAGtuO,OAAS,KAAOuuO,EAC5ED,GAETn5L,EAASl3C,EAAKuwO,UAAUvwO,EAAKq9B,KAAM9L,EAAI8L,MACnC9L,EAAIiwE,QACNtqD,GAAU,IAAM3lB,EAAIiwE,OAElBjwE,EAAIitD,SACNtnC,GAAU,IAAM3lB,EAAIitD,QAEftnC,IAET1rB,WAAY,SAAU+F,EAAKi/M,GAEzB,OADAj/M,EAAM,IAAIm+M,GAAIn+M,EAAK,CAAEq+M,SAAUxtO,OACxBmvB,EAAIjG,OAAOklN,GAAUpuO,KAAKquO,aAAal/M,KAEhDk/M,aAAc,SAAUl/M,GACtB,GAAInvB,KAAKuqC,MAAQpb,EAAIob,MAAQvqC,KAAK0tO,UAAYv+M,EAAIu+M,SAAU,CAC1D,GAAI1tO,KAAK8tO,MAAQ3+M,EAAI2+M,KACnB,OAAO,EAET,IAAIQ,EAAcrB,GAAcjtO,KAAK0tO,UACrC,GAAIY,IAAgBtuO,KAAK8tO,MAAQQ,KAAiBn/M,EAAI2+M,MAAQQ,GAC5D,OAAO,EAGX,OAAO,GAETH,UAAW,SAAU37I,EAAMv3D,GACzB,IAAI1hB,EAAiCrZ,EAAG4zE,EAA7By6J,EAAa,EAAG/7M,EAAM,GAIjC,GAHAggE,EAAOA,EAAK30E,UAAU,EAAG20E,EAAKrwE,YAAY,MAC1CqwE,EAAOA,EAAKz0E,MAAM,KAClBxE,EAAQ0hB,EAAKld,MAAM,KACfy0E,EAAK7yF,QAAU4Z,EAAM5Z,OACvB,IAAKO,EAAI,EAAG4zE,EAAI0e,EAAK7yF,OAAQO,EAAI4zE,EAAG5zE,IAClC,GAAIA,GAAKqZ,EAAM5Z,QAAU6yF,EAAKtyF,KAAOqZ,EAAMrZ,GAAI,CAC7CquO,EAAaruO,EAAI,EACjB,MAIN,GAAIsyF,EAAK7yF,OAAS4Z,EAAM5Z,OACtB,IAAKO,EAAI,EAAG4zE,EAAIv6D,EAAM5Z,OAAQO,EAAI4zE,EAAG5zE,IACnC,GAAIA,GAAKsyF,EAAK7yF,QAAU6yF,EAAKtyF,KAAOqZ,EAAMrZ,GAAI,CAC5CquO,EAAaruO,EAAI,EACjB,MAIN,GAAmB,IAAfquO,EACF,OAAOtzM,EAET,IAAK/6B,EAAI,EAAG4zE,EAAI0e,EAAK7yF,QAAU4uO,EAAa,GAAIruO,EAAI4zE,EAAG5zE,IACrDsyB,GAAO,MAET,IAAKtyB,EAAIquO,EAAa,EAAGz6J,EAAIv6D,EAAM5Z,OAAQO,EAAI4zE,EAAG5zE,IAE9CsyB,GADEtyB,IAAMquO,EAAa,EACd,IAAMh1N,EAAMrZ,GAEZqZ,EAAMrZ,GAGjB,OAAOsyB,GAETm7M,UAAW,SAAUn7I,EAAMv3D,GACzB,IAAI/6B,EAAmBmvG,EAAIm/H,EAApBC,EAAK,EAAGjwO,EAAI,GAUnB,IATA6wG,EAAK,MAAMxuG,KAAKo6B,GAAQ,IAAM,GAC9Bu3D,EAAOA,EAAKz0E,MAAM,KAClBkd,EAAOA,EAAKld,MAAM,KAClB+uN,GAAOt6I,GAAM,SAAU/xE,GACjBA,GACFjiB,EAAE+E,KAAKkd,MAGX+xE,EAAOh0F,EACF0B,EAAI+6B,EAAKt7B,OAAS,EAAGnB,EAAI,GAAI0B,GAAK,EAAGA,IACjB,IAAnB+6B,EAAK/6B,GAAGP,QAA4B,MAAZs7B,EAAK/6B,KAGjB,OAAZ+6B,EAAK/6B,GAILuuO,EAAK,EACPA,IAGFjwO,EAAE+E,KAAK03B,EAAK/6B,IAPVuuO,KAqBJ,OAZAvuO,EAAIsyF,EAAK7yF,OAAS8uO,EAEhBD,EADEtuO,GAAK,EACG1B,EAAE6lC,UAAUrgC,KAAK,KAEjBwuF,EAAKtvF,MAAM,EAAGhD,GAAG8D,KAAK,KAAO,IAAMxF,EAAE6lC,UAAUrgC,KAAK,KAEnC,IAAzBwqO,EAAQ5pO,QAAQ,OAClB4pO,EAAU,IAAMA,GAEdn/H,GAAMm/H,EAAQrsN,YAAY,OAASqsN,EAAQ7uO,OAAS,IACtD6uO,GAAWn/H,GAENm/H,GAETtlN,OAAQ,SAAUwlN,GAChB,IAAIn4N,EACA3Y,EAAOoC,KA8BX,OA7BKpC,EAAKuxD,SAAUu/K,IAClBn4N,EAAI,GACCm4N,IACC9wO,EAAK8vO,SACPn3N,GAAK3Y,EAAK8vO,SAAW,MAErBn3N,GAAK,KAEH3Y,EAAKiwO,WACPt3N,GAAK3Y,EAAKiwO,SAAW,KAEnBjwO,EAAK2sC,OACPh0B,GAAK3Y,EAAK2sC,MAER3sC,EAAKkwO,OACPv3N,GAAK,IAAM3Y,EAAKkwO,OAGhBlwO,EAAKq9B,OACP1kB,GAAK3Y,EAAKq9B,MAERr9B,EAAKwhG,QACP7oF,GAAK,IAAM3Y,EAAKwhG,OAEdxhG,EAAKw+E,SACP7lE,GAAK,IAAM3Y,EAAKw+E,QAElBx+E,EAAKuxD,OAAS54C,GAET3Y,EAAKuxD,SAGhBm+K,GAAIjlC,aAAe,SAAUl5K,GAC3B,IAAIhxB,EAAMqL,EAMV,OALA2lB,EAAMo5K,mBAAmBp5K,GAAKpR,MAAM,KACpCvU,EAAU,eAAezG,KAAKosB,EAAI,IAC9B3lB,IACFrL,EAAOqL,EAAQ,IAEV,CACLrL,KAAMA,EACNyD,KAAMutB,EAAI,KAGdm+M,GAAIp1D,mBAAqB,SAAUy2D,GACjC,IAAIn1E,EAYJ,OAVEA,EADmC,IAAjCm1E,EAAIjB,SAAS9oO,QAAQ,SAAkC,UAAjB+pO,EAAIjB,SAClCiB,EAAI5hO,KAEJ4hO,EAAIjB,SAAW,KAAOiB,EAAIpkM,KAAOokM,EAAIC,SAE7C,yBAAyB/tO,KAAK24J,KAChCA,EAAUA,EAAQj7J,QAAQ,WAAY,IAAIA,QAAQ,gBAAiB,IAC9D,UAAUsC,KAAK24J,KAClBA,GAAW,MAGRA,GAGT,IAAIq1E,GAAgB,OAChBC,GAAoB,SAAUpyO,EAAQiJ,GACxC,IAAIwqD,EAAY5yD,GAASg7K,mBAAmB77K,GACxCqyO,EAAc,IAAI3/L,OAAO,MAAQ+gB,EAAY,4CAAiDA,EAAY,8BAC9G,OAAOxqD,EAAKpH,QAAQwwO,EAAa,KAE/BC,GAAqB,SAAUtyO,EAAQ4G,EAAM+G,GAC/C,IAAIjM,EAOJ,GANAkF,EAAK+N,OAAS/N,EAAK+N,OAAS/N,EAAK+N,OAASw9N,GAC1CvrO,EAAKvH,KAAM,EACXuH,EAAK4nN,UAAW,EACX5nN,EAAKsjN,WACRlqN,EAAO2hC,KAAK,mBAAoB/6B,GAEd,QAAhBA,EAAK+N,OACPjT,EAAU9B,GAAMsP,KAAK8sM,GAASD,aAAa/7M,EAAO8hD,WAAYn0C,EAAKxI,iBAC9D,GAAoB,SAAhByB,EAAK+N,OACdjT,EAAUq+J,GAAK7wJ,KAAKvB,EAAK2yD,WAAa3yD,EAAKnJ,iBACtC,IAAoB,SAAhBoC,EAAK+N,OACd,OAAO3U,EAAO8hD,WAAW9/B,UAAUrU,EAAM/G,GAEzClF,EAAU0wO,GAAkBpyO,EAAQA,EAAO8hD,WAAW9/B,UAAUrU,EAAM/G,IAUxE,MARoB,SAAhBA,EAAK+N,QAAsBw1I,GAAoB5iG,GAAQN,QAAQt5C,IAGjE/G,EAAKlF,QAAUA,EAFfkF,EAAKlF,QAAU9B,GAAMsP,KAAKxN,GAIvBkF,EAAKsjN,WACRlqN,EAAO2hC,KAAK,aAAc/6B,GAErBA,EAAKlF,SAEV6wO,GAAe,SAAUvyO,EAAQ4G,GAInC,YAHa,IAATA,IACFA,EAAO,IAEFyU,EAAO/U,KAAKtG,EAAOoU,WAAWwF,KAAK7O,EAAyB,SAAhBnE,EAAK+N,OAAoB,IAAIk2M,GAAO,OAAQ,IAAM,KAAK,SAAUl9M,GAClH,OAAO2kO,GAAmBtyO,EAAQ4G,EAAM+G,OAIxCu9B,GAAW,SAAUt/B,EAAMgN,GAC7BA,EAAGhN,GACCA,EAAKsM,YACPgzB,GAASt/B,EAAKsM,WAAYU,GAExBhN,EAAKud,MACP+hB,GAASt/B,EAAKud,KAAMvQ,IAGpB45N,GAAoB,SAAU/lB,EAAaC,EAAkB9gN,GAC/D,IAAI6mO,EAAc,GACdC,EAAc,GACd5lO,EAAU,GA6Bd,IAAK,IAAI1F,KA5BLwE,EAAKsM,YACPgzB,GAASt/B,EAAKsM,YAAY,SAAUtM,GAClCkD,EAAK29M,GAAa,SAAU59M,GACtBA,EAAOzH,OAASwE,EAAKxE,OACnBqrO,EAAY5jO,EAAOzH,MACrBqrO,EAAY5jO,EAAOzH,MAAMkM,MAAMzM,KAAK+E,GAEpC6mO,EAAY5jO,EAAOzH,MAAQ,CACzByH,OAAQA,EACRyE,MAAO,CAAC1H,QAKhBkD,EAAK49M,GAAkB,SAAU79M,GACO,kBAA3BjD,EAAKqD,KAAKJ,EAAOzH,QACtBsrO,EAAY7jO,EAAOzH,MACrBsrO,EAAY7jO,EAAOzH,MAAMkM,MAAMzM,KAAK+E,GAEpC8mO,EAAY7jO,EAAOzH,MAAQ,CACzByH,OAAQA,EACRyE,MAAO,CAAC1H,WAOH6mO,EACXA,EAAYpwO,eAAe+E,IAC7B0F,EAAQjG,KAAK4rO,EAAYrrO,IAG7B,IAAK,IAAIA,KAAQsrO,EACXA,EAAYrwO,eAAe+E,IAC7B0F,EAAQjG,KAAK6rO,EAAYtrO,IAG7B,OAAO0F,GAEL6lO,GAAW,SAAUlmB,EAAaC,EAAkB9gN,GACtD,IAAIkB,EAAU0lO,GAAkB/lB,EAAaC,EAAkB9gN,GAC/DkD,EAAKhC,GAAS,SAAU3K,GACtB2M,EAAK3M,EAAM0M,OAAOxH,WAAW,SAAU9D,GACrCA,EAASpB,EAAMmR,MAAOnR,EAAM0M,OAAOzH,KAAM,WAK3CwrO,GAAkB,OAClBC,GAAa,SAAUnxO,GACzB,OAAOA,aAAmBmpN,IAExBioB,GAAgB,SAAU9yO,GACxBomM,GAAYzoD,SAAS39I,IACvByuK,GAAYC,gBAAgB1uK,EAAOoU,WAAWtF,MAAK,SAAUylC,GAC3D,IAAI3oC,EAAO2oC,EAAIzoC,UACXkqK,EAAW7yH,GAAS21E,QAAQltH,GAAQ6iK,GAAYC,gBAAgB9iK,GAAMmO,MAAMw6B,GAAOA,EACvFv0C,EAAO6L,UAAU0b,OAAOyuJ,EAAS3Q,eAInC0tE,GAAgB,SAAU/yO,EAAQiJ,GACpCjJ,EAAOkM,IAAI8sJ,QAAQh5J,EAAOoU,UAAWnL,GACrC6pO,GAAc9yO,IAEZgzO,GAAmB,SAAUhzO,EAAQ2N,EAAMjM,EAASkF,GACtD,IAAIi7N,EAAqBoR,EA8BzB,OA7BuB,IAAnBvxO,EAAQuB,QAAgB,QAAQkB,KAAKzC,IACvCuxO,EAAO,0BACe,UAAlBtlO,EAAKrJ,SACP5C,EAAU,WAAauxO,EAAO,aACrB,YAAY9uO,KAAKwJ,EAAKrJ,YAC/B5C,EAAU,OAASuxO,EAAO,SAE5BpR,EAAsBhhO,GAASg7K,mBAAmB77K,GAC9C6hO,GAAuB7hO,EAAOq8C,OAAOm4G,aAAa7mJ,EAAKrJ,SAASic,cAAeshN,EAAoBthN,gBACrG7e,EAAUuxO,EACVvxO,EAAU1B,EAAOkM,IAAIsnE,WAAWquJ,EAAqB7hO,EAAOC,SAAS6zD,wBAAyBpyD,IACpFA,IACVA,EAAU,2BAEZqxO,GAAc/yO,EAAQ0B,GACtB1B,EAAO2hC,KAAK,aAAc/6B,KAEN,QAAhBA,EAAK+N,SACPjT,EAAU02K,GAAe,CAAEx4J,SAAU5f,EAAO4f,UAAY5f,EAAOq8C,QAAQr6B,UAAUhiB,EAAO4hD,OAAO95C,MAAMpG,EAAS,CAC5G6hE,eAAe,EACf1gE,QAAQ,MAGZ+D,EAAKlF,QAAUyoJ,GAAoB5iG,GAAQN,QAAQt5C,IAASjM,EAAU9B,GAAMsP,KAAKxN,GACjFqxO,GAAc/yO,EAAQ4G,EAAKlF,SACtBkF,EAAKsjN,WACRlqN,EAAO2hC,KAAK,aAAc/6B,IAGvBA,EAAKlF,SAEVwxO,GAAiB,SAAUlzO,EAAQ2N,EAAMjM,EAASkF,GACpD+rO,GAAS3yO,EAAO4hD,OAAOwrK,iBAAkBptN,EAAO4hD,OAAOyrK,sBAAuB3rN,GAC9E,IAAIuH,EAAOmvK,GAAe,CAAEx4J,SAAU5f,EAAO4f,UAAY5f,EAAOq8C,QAAQr6B,UAAUtgB,GAMlF,OALAkF,EAAKlF,QAAUyoJ,GAAoB5iG,GAAQN,QAAQt5C,IAAS1E,EAAOrJ,GAAMsP,KAAKjG,GAC9E8pO,GAAc/yO,EAAQ4G,EAAKlF,SACtBkF,EAAKsjN,WACRlqN,EAAO2hC,KAAK,aAAc/6B,GAErBlF,GAELyxO,GAAe,SAAUnzO,EAAQ0B,EAASkF,GAW5C,YAVa,IAATA,IACFA,EAAO,IAETA,EAAK+N,OAAS/N,EAAK+N,OAAS/N,EAAK+N,OAASi+N,GAC1ChsO,EAAKtH,KAAM,EACXsH,EAAKlF,QAAUmxO,GAAWnxO,GAAW,GAAKA,EACrCmxO,GAAWnxO,IAAakF,EAAKsjN,YAChClqN,EAAO2hC,KAAK,mBAAoB/6B,GAChClF,EAAUkF,EAAKlF,SAEV2Z,EAAO/U,KAAKtG,EAAOoU,WAAWwF,KAAK7O,EAASrJ,IAAU,SAAUiM,GACrE,OAAOklO,GAAWnxO,GAAWwxO,GAAelzO,EAAQ2N,EAAMjM,EAASkF,GAAQosO,GAAiBhzO,EAAQ2N,EAAMjM,EAASkF,OAInHwsO,GAAQr4E,GAAWv6J,IACnB6yO,GAAwB,SAAUrzO,GACpCozO,GAAMh9K,SAASp2D,EAAOwC,GAAI,UAAWxC,EAAOotO,aAE1CkG,GAAc,SAAU/8N,GAC1B,OAAO8E,EAAO/U,KAAKiQ,GAAGzH,MAAK,SAAUyH,GACnC,OAAOA,EAAEmtB,cAGT6vM,GAAqB,SAAUvzO,GACjCA,EAAOgtO,qBAAuBhtO,EAAOwvO,YAAcxvO,EAAOqmB,UAAYrmB,EAAOgkF,gBAAkB,KAC/FhkF,EAAOqrO,YAAcrrO,EAAOi0D,gBAAkBj0D,EAAOwtB,cAAgB,KACrExtB,EAAO0lM,cAAgB1lM,EAAO05D,UAAY,KACtC15D,EAAO6L,YACT7L,EAAO6L,UAAY7L,EAAO6L,UAAUk6B,IAAM/lC,EAAO6L,UAAUK,IAAMlM,EAAO6L,UAAUK,IAAI0c,IAAM,OAG5F4qN,GAAc,SAAUxzO,GAC1B,IAAIuvO,EAAOvvO,EAAOwvO,YACdD,IACEA,EAAKI,gBACPJ,EAAKp7J,OAASo7J,EAAKI,cACnBJ,EAAKI,cAAgB,MAEvByD,GAAMjkK,OAAOogK,EAAM,eAAgBvvO,EAAO0vO,qBAG1CtjG,GAAW,SAAUpsI,GACvB,IAAKA,EAAO0/B,QAAS,CACnB,IAAIk7I,EAAsB56K,EAAO46K,oBAAqBzsI,EAAenuC,EAAOmuC,aACxExgC,EAAO3N,EAAOoU,UACdrQ,EAAU/D,EAAOipL,aACjBt7K,GACF3N,EAAOupC,KAAK,CAAEkqM,aAAa,IAE7BzzO,EAAO0/B,SAAU,EACjB1/B,EAAOggM,wBACHhgM,EAAOyvO,gBAAkB1rO,GAC3BqvO,GAAM/9N,OAAOtR,EAAQokB,aAEvBs1C,GAAO4gI,WAAWr+L,GAClBA,EAAO0/L,cAAcrqL,OAAOrV,IACvBA,EAAOkQ,QAAUvC,GACpB0lO,GAAsBrzO,GAExBy9D,GAAO6gI,WAAWt+L,GAClBozO,GAAM/9N,OAAOrV,EAAOokF,gBACpBkvJ,GAAY14D,GACZ04D,GAAYnlM,GACZnuC,EAAO0jC,YAGPA,GAAU,SAAU1jC,EAAQ0zO,GAC9B,IAAI7nO,EAAY7L,EAAO6L,UAAWK,EAAMlM,EAAOkM,IAC3ClM,EAAO0qO,YAGNgJ,GAAc1zO,EAAO0/B,SAIrBg0M,IACH1zO,EAAO0/L,cAAc1wJ,IAAI,eAAgBhvC,EAAO8vO,eAC5C9vO,EAAOg8L,OAASh8L,EAAOg8L,MAAMt4J,SAC/B1jC,EAAOg8L,MAAMt4J,UAEf4vM,GAAYznO,GACZynO,GAAYpnO,IAEdsnO,GAAYxzO,GACZuzO,GAAmBvzO,GACnBA,EAAO0qO,WAAY,GAbjB1qO,EAAOqV,WAgBPs+N,GAAQ54E,GAAWv6J,IACnBozO,GAAWh0O,GAAM2C,OAAQsxO,GAASj0O,GAAMkP,KACxCglO,GAAYl0O,GAAMC,QAClBk0O,GAAOliG,GAAIlkH,GACXqmN,GAAS,SAAUxxO,EAAIvC,EAAUy/L,GACnC,IAAIx+L,EAAOoC,KACPy9L,EAAkB7/L,EAAK6/L,gBAAkBrB,EAAcu0C,gBACvDpD,EAAUnxC,EAAcw0C,QAC5Bj0O,EAAWijM,GAAkBhiM,EAAMsB,EAAIu+L,EAAiBrB,EAAcqD,gBAAiB9iM,GACvFiB,EAAKjB,SAAWA,EAChBq8J,GAAar4J,SAAWhE,EAASgE,UAAY,KAC7Cq4J,GAAaI,aAAez8J,EAASk0O,cACrC73E,GAAa12E,QAAU85G,EAAc95G,QACrC1kF,EAAKsB,GAAKA,EACVtB,EAAKgzE,UAAS,GACdhzE,EAAKuC,QAAU,GACfvC,EAAKqrB,gBAAkB,IAAIqkN,GAAI3wO,EAASkhM,kBAAmB,CAAE2vC,SAAUD,IACvE3vO,EAAKgzO,QAAUrD,EACf3vO,EAAKurB,WAAa,GAClBvrB,EAAKy3M,cAAgB,GACrBz3M,EAAKob,UAAY,IAAIgoL,GAAUpjM,GAC/BA,EAAKkzO,UAAY,GACjBlzO,EAAKmzO,eAAiB,IAAIz4C,GAAe16L,GACzCA,EAAK6zF,OAAS2qG,EAAc3qG,OAC5B7zF,EAAKw+L,cAAgBA,EACrBx+L,EAAKgP,OAASjQ,EAASiQ,OACvBhP,EAAK8d,QAAU,GACf9d,EAAK40C,UAAY,GACb71C,EAASq0O,eACXziG,GAAItsD,YAActlF,EAASq0O,aAAazyO,QAAQ,WAAY,MAE3B,IAA/B5B,EAASs0O,oBACX1iG,GAAIG,kBAAmB,GAEzB0tD,EAAc/9J,KAAK,cAAe,CAAE3hC,OAAQkB,IAC5CA,EAAK+yE,aAAa,QAAS/yE,GAC3BA,EAAKoL,EAAIk3I,GAAS6B,kBAAiB,WACjC,MAAO,CACL7wI,QAAStT,EAAKgP,OAAShP,EAAKkT,UAAYlT,EAAKuO,SAC7C1L,QAAS7C,EAAKkT,eAIpB4/N,GAAOhyO,UAAY,CACjBupB,OAAQ,WACNykN,GAAOzkN,OAAOjoB,OAEhB4R,MAAO,SAAUixL,GACfC,GAAYlxL,MAAM5R,KAAM6iM,IAE1BxoD,SAAU,WACR,OAAOyoD,GAAYzoD,SAASr6I,OAE9B2wE,aAAc,SAAU7sE,GAEtB,IADA,IAAImP,EAAI,GACCuC,EAAK,EAAGA,EAAK9V,UAAUC,OAAQ6V,IACtCvC,EAAEuC,EAAK,GAAK9V,UAAU8V,GAExB,IACoC2lB,EADhCv9B,EAAOoC,KACPC,EAAWrC,EAAKjB,SAASmH,GAC7B,GAAK7D,EAiBL,OAdIrC,EAAKszO,iBAAmB/1M,EAAQv9B,EAAKszO,eAAeptO,MACtD7D,EAAWk7B,EAAM2zF,KACjB3zF,EAAQA,EAAMA,OAEQ,kBAAbl7B,IACTk7B,EAAQl7B,EAAS1B,QAAQ,SAAU,IACnC48B,EAAQA,EAAQq1M,GAAUr1M,GAAS,EACnCl7B,EAAWuwO,GAAUvwO,GACrBrC,EAAKszO,eAAiBtzO,EAAKszO,gBAAkB,GAC7CtzO,EAAKszO,eAAeptO,GAAQ,CAC1BgrH,KAAM7uH,EACNk7B,MAAOA,IAGJl7B,EAAS0D,MAAMw3B,GAASv9B,EAAM6F,MAAM/E,UAAUwE,MAAMtE,KAAKc,UAAW,KAE7EoQ,UAAW,SAAU3N,GACnB,GAAIA,GAAQ7F,GAAMuU,GAAG1O,EAAM,UAAW,CACpC,IAAIgvO,EAASnxO,KAAKrD,SAASgE,UAAY,KAAMywO,EAASpxO,KAAKo8L,cAAcgvC,KACzEjpO,EAAOivO,EAAOxvO,KAAKuvO,EAAS,IAAMhvO,IAASA,EAAK5D,QAAQ,mBAAmB,SAAUoZ,EAAGG,GACtF,OAAOs5N,EAAOxvO,KAAKuvO,EAAS,IAAMr5N,IAAM,KAAOA,EAAI,OAGvD,OAAO9X,KAAKo8L,cAActsL,UAAU3N,IAEtCurC,QAAS,SAAU5pC,EAAM4wJ,GACvB,OAAO10J,KAAKo8L,cAAcgvC,KAAKxpO,MAAM5B,KAAKrD,SAASgE,UAAY,MAAQ,IAAMmD,UAAyBkT,IAAf09I,EAA2BA,EAAa,KAAO5wJ,EAAO,MAE/IzG,SAAU,SAAUyG,EAAM4wJ,EAAYv2J,GACpC,OAAOd,GAAS2C,KAAM8D,EAAM4wJ,EAAYv2J,IAE1C0T,YAAa,SAAUvO,GACrBtD,KAAKooO,sBAAsBv2N,YAAYvO,IAEzC8J,UAAW,SAAUtJ,EAAMnH,GACzB,IAAIiB,EAAOoC,KACPrD,EAAS0Q,MACX1Q,EAASwY,QAAU,WACjBvX,EAAKkW,YAAYnX,EAAS0Q,OAG1B1Q,EAAS8hD,eAA4C,qBAApB9hD,EAAS87D,SAC5C97D,EAAS87D,QAAS,GAEf97D,EAASwF,MAASxF,EAAS4Q,OAC9B5Q,EAAS4Q,KAAOzJ,GAElBnH,EAASqU,QAAUrU,EAASqU,SAAWrU,EAAS8I,MAChD7H,EAAK8d,QAAQ5X,GAAQnH,GAEvB00O,WAAY,SAAUvtO,EAAMnH,GAC1B,OAAOkwO,GAAQhpO,IAAI7D,KAAM8D,EAAMnH,IAEjC2Q,YAAa,SAAUxJ,EAAMnH,GAC3B,IAAIiB,EAAOoC,KACPrD,EAAS0Q,MACX1Q,EAASwY,QAAU,WACjBvX,EAAKkW,YAAYnX,EAAS0Q,OAG9BzP,EAAK40C,UAAU1uC,GAAQnH,GAEzBwU,kBAAmB,SAAUgW,EAAW5N,GACtC,IACIrT,EADAtI,EAAOoC,KAEXpC,EAAK0zO,gBAAkB1zO,EAAK0zO,iBAAmB,GACtB,kBAAdnqN,IACTjhB,EAAWihB,EACXA,EAAY,SAAUxiB,GACpB,OAAO/G,EAAKgL,IAAIiI,GAAGlM,EAAKuB,KAG5BtI,EAAK0zO,gBAAgB/tO,KAAK,CACxBrE,GAAImqM,GAAKD,KAAK,QACdjiL,UAAWA,EACX5N,MAAOA,KAGXvO,WAAY,SAAUlH,EAAM7D,EAAUk7B,GACpCn7B,KAAK+wO,eAAe/lO,WAAWlH,EAAM7D,EAAUk7B,IAEjD28B,qBAAsB,SAAUh0D,EAAM7D,EAAUk7B,GAC9Cn7B,KAAK+wO,eAAej5K,qBAAqBh0D,EAAM7D,EAAUk7B,IAE3D49J,qBAAsB,SAAUj1L,EAAM7D,EAAUk7B,GAC9Cn7B,KAAK+wO,eAAeh4C,qBAAqBj1L,EAAM7D,EAAUk7B,IAE3D61C,YAAa,SAAUtuE,EAAS0+L,EAAMC,EAASlmK,GAC7Cn7B,KAAKgZ,UAAUnV,IAAInB,EAAS0+L,EAAMC,EAASlmK,IAE7CrnB,YAAa,SAAUzG,EAAKmiC,EAAI1zC,EAAOwH,GACrC,OAAOtD,KAAK+wO,eAAej9N,YAAYzG,EAAKmiC,EAAI1zC,EAAOwH,IAEzD20L,kBAAmB,SAAU5qL,GAC3B,OAAOrN,KAAK+wO,eAAe94C,kBAAkB5qL,IAE/CsrL,kBAAmB,SAAUtrL,GAC3B,OAAOrN,KAAK+wO,eAAep4C,kBAAkBtrL,IAE/CyrL,sBAAuB,SAAUzrL,GAC/B,OAAOrN,KAAK+wO,eAAej4C,sBAAsBzrL,IAEnDqyB,KAAM,WACJ,IAAI9hC,EAAOoC,KACPpC,EAAKm+L,SACPn+L,EAAKm+L,QAAS,EACVn+L,EAAKgP,OACPhP,EAAKkT,UAAU9E,iBAAkB,GAEjCqkO,GAAM3wM,KAAK9hC,EAAKkjF,gBAChBuvJ,GAAM1wM,KAAK/hC,EAAKsB,KAElBtB,EAAKgwF,OACLhwF,EAAKygC,KAAK,UAGdsB,KAAM,WACJ,IAAI/hC,EAAOoC,KAAMslB,EAAM1nB,EAAKuO,SACvBvO,EAAKm+L,SACJ00C,IAAQnrN,IAAQ1nB,EAAKgP,QACvB0Y,EAAIxR,YAAY,aAElBlW,EAAKqoC,OACDroC,EAAKgP,QACPhP,EAAKkT,UAAU9E,iBAAkB,EAC7BpO,IAASA,EAAKw+L,cAAcm1C,gBAC9B3zO,EAAKw+L,cAAcm1C,cAAgB,QAGrClB,GAAM1wM,KAAK/hC,EAAKkjF,gBAChBuvJ,GAAMv9K,SAASl1D,EAAKsB,GAAI,UAAWtB,EAAKksO,aAE1ClsO,EAAKm+L,QAAS,EACdn+L,EAAKygC,KAAK,UAGdi4H,SAAU,WACR,QAASt2J,KAAK+7L,QAEhB/lH,iBAAkB,SAAU75C,EAAOizG,GACjCpvI,KAAKq+B,KAAK,gBAAiB,CACzBlC,MAAOA,EACPizG,KAAMA,KAGVxhD,KAAM,SAAUtqF,GACd,IAC6BqC,EADzB/H,EAAOoC,KACP2E,EAAM/G,EAAK+nL,aACf,OAAI/nL,EAAKw+B,QACA,GAELz3B,GACFrB,EAAOA,GAAQ,GACfA,EAAKsqF,MAAO,EACZjoF,EAAO/H,EAAKu7C,gBAAyBniC,IAAdrS,EAAI7I,MAAsB6I,EAAI7I,MAAQ6I,EAAI9C,UAAWyB,GAC5EA,EAAK7C,QAAUkE,EACVrB,EAAKsjN,WACRhpN,EAAKygC,KAAK,cAAe/6B,GAE3BA,EAAK7C,QAAUkE,EAAM,KACdgB,QATT,GAYFsgC,KAAM,SAAU3iC,GACd,IAC6BqC,EAAMsmO,EAD/BruO,EAAOoC,KACP2E,EAAM/G,EAAK+nL,aACf,GAAKhhL,GAAQ/G,EAAK49L,cAAe59L,EAAKw+B,QAiCtC,OA9BA94B,EAAOA,GAAQ,GACfA,EAAK2iC,MAAO,EACZ3iC,EAAK7C,QAAUkE,EACfgB,EAAOrC,EAAKlF,QAAUR,EAAKgsB,WAAWtmB,GACjCA,EAAKsjN,WACRhpN,EAAKygC,KAAK,cAAe/6B,GAEP,QAAhBA,EAAK+N,QACPzT,EAAKygC,KAAK,iBAAkB/6B,GAE9BqC,EAAOrC,EAAKlF,QACP,kBAAkByC,KAAK8D,EAAI3D,UAa9B2D,EAAI7I,MAAQ6J,IAZRrC,EAAK6sO,aAAgBvyO,EAAKgP,SAC5BjI,EAAI9C,UAAY8D,IAEdsmO,EAAOoE,GAAMh8N,UAAUzW,EAAKsB,GAAI,UAClCqxO,GAAOtE,EAAK3rO,UAAU,SAAUqE,GAC9B,GAAIA,EAAIb,OAASlG,EAAKsB,GAEpB,OADAyF,EAAI7I,MAAQ6J,GACL,MAOfrC,EAAK7C,QAAUkE,EAAM,MACE,IAAnBrB,EAAKmpO,WACP7uO,EAAKgzE,UAAS,GAETjrE,GAETwzC,WAAY,SAAU/6C,EAASkF,GAC7B,OAAOusO,GAAa7vO,KAAM5B,EAASkF,IAErCsmB,WAAY,SAAUtmB,GACpB,OAAO2rO,GAAajvO,KAAMsD,IAE5ByF,cAAe,SAAU3K,EAASkF,GAC5BA,IACFlF,EAAUkyO,GAAS,CAAElyO,QAASA,GAAWkF,IAE3CtD,KAAK8T,YAAY,oBAAoB,EAAO1V,IAE9CsyE,QAAS,WACP,OAAQ1wE,KAAKwxO,YAEf5gK,SAAU,SAAUz0C,GAClB,IAAIs1M,GAAYzxO,KAAKwxO,WACrBxxO,KAAKwxO,YAAcr1M,EACfA,GAASA,IAAUs1M,GACrBzxO,KAAKq+B,KAAK,UAGdi9J,QAAS,SAAUrpE,GACjBqpE,GAAQt7L,KAAMiyH,IAEhBnxC,aAAc,WACZ,IAAIljF,EAAOoC,KAIX,OAHKpC,EAAKmlB,YACRnlB,EAAKmlB,UAAYstN,GAAMt0O,IAAI6B,EAAK8iF,iBAAmB9iF,EAAKsB,GAAK,YAExDtB,EAAKmlB,WAEdmvB,wBAAyB,WACvB,OAAOlyC,KAAK0pO,sBAEd/jD,WAAY,WAIV,OAHK3lL,KAAKo2D,YACRp2D,KAAKo2D,UAAYi6K,GAAMt0O,IAAIiE,KAAKd,KAE3Bc,KAAKo2D,WAEdyhE,OAAQ,WACN,IACIlzH,EADA/G,EAAOoC,KAQX,OANKpC,EAAKssB,gBACRvlB,EAAM/G,EAAKwkM,cACPz9L,IACF/G,EAAKssB,cAAgBvlB,EAAIulB,gBAGtBtsB,EAAKssB,eAEd/d,OAAQ,WACN,IACIs2B,EADA7kC,EAAOoC,KAQX,OANKpC,EAAK+yD,kBACRluB,EAAM7kC,EAAKi6H,SACPp1F,IACF7kC,EAAK+yD,gBAAkBluB,EAAIliC,WAGxB3C,EAAK+yD,iBAEd7/C,QAAS,WACP,IAAIwU,EAAMtlB,KAAKmM,SACf,OAAOnM,KAAK+nO,cAAgBziN,EAAMA,EAAIjb,KAAO,OAE/CixC,WAAY,SAAUr1C,EAAKnC,EAAMa,GAC/B,IAAI/G,EAAOoC,KAAMrD,EAAWiB,EAAKjB,SACjC,OAAIA,EAAS+0O,sBACJ9zO,EAAK+yE,aAAa,wBAAyB1qE,EAAKtB,GAAK,EAAMb,IAE/DnH,EAASshM,cAAgBt5L,GAAwB,SAAjBA,EAAI3D,UAAgD,IAAzBiF,EAAIrB,QAAQ,UAAiC,IAAfqB,EAAItG,OACzFsG,EAELtJ,EAASuhM,cACJtgM,EAAKqrB,gBAAgB+kN,WAAW/nO,IAEzCA,EAAMrI,EAAKqrB,gBAAgBG,WAAWnjB,EAAKtJ,EAASwhM,oBAC7Cl4L,IAET0pC,UAAW,SAAUhrC,GACnB,IAGI0xJ,EAHAz4J,EAAOoC,KACPrD,EAAWiB,EAAKjB,SAChBiM,EAAMhL,EAAKgL,IAEfjE,EAAMA,GAAO/G,EAAKkT,eACKkG,IAAnBpZ,EAAK47L,YACP57L,EAAK47L,UAAY78L,EAAS0hM,QAE5BkyC,GAAO3nO,EAAIE,OAAO,UAAWnE,IAAM,SAAUA,GAC3C,IAAI7I,EACJ,OAAQ6I,EAAI3D,UACZ,IAAK,QAQH,OAPAq1J,EAAM15J,EAASg1O,oBAAsB,iBACrC71O,EAAQ8M,EAAI6tC,UAAU9xC,EAAK,eACrB7I,GAAmB,MAAVA,IAAkB8B,EAAK47L,UAGpC5wL,EAAIu4E,YAAYx8E,EAAK0xJ,GAFrBztJ,EAAI44E,SAAS78E,EAAK0xJ,IAKtB,IAAK,IAUH,YATKztJ,EAAI6tC,UAAU9xC,EAAK,UACtB7I,EAAQ8M,EAAI6tC,UAAU9xC,EAAK,SAAWA,EAAIzF,GAC1Cm3J,EAAM15J,EAASi1O,qBAAuB,kBAClC91O,GAAS8B,EAAK47L,UAChB5wL,EAAI44E,SAAS78E,EAAK0xJ,GAElBztJ,EAAIu4E,YAAYx8E,EAAK0xJ,SAM7Bz4J,EAAKygC,KAAK,YAAa,CACrB59B,QAASkE,EACT60L,UAAW57L,EAAK47L,aAGpBznL,OAAQ,WACN+2H,GAAS9oI,OAEXogC,QAAS,SAAUgwM,GACjBhwM,GAAQpgC,KAAMowO,IAEhBvlC,aAAc,SAAU5qM,GACtB,OAAOD,KAAK6qC,aAAaggK,aAAa5qM,IAExC4rC,eAAgB,WACd,OAAO7rC,KAAK6qC,aAAaigK,kBAG7BwlC,GAASI,GAAOhyO,UAAWi+L,IAE3B,IAwDIk1C,GAiFqBC,GAAsBC,GAzI3CC,GAAoB,SAAUrtO,GAChC,OAAqD,IAA9CA,EAAI7D,UAAUnC,WAAWiG,QAAQ,SAEtCqtO,GAAe,CAAED,kBAAmBA,IAEpCE,GAAqB,SAAUpnO,GACjC,MAAkB,eAAXA,EAAE3M,MAAyB2M,EAAEgiM,iBAElCqlC,GAAsB,SAAUz1O,EAAQ01O,GAC1C,IAAIC,EAAc,WAChBD,EAAergH,YAEjB0lC,GAAWv6J,IAAIia,KAAKxb,EAAW4E,SAAU,UAAW8xO,GACpD31O,EAAO4O,GAAG,UAAU,WAClBmsJ,GAAWv6J,IAAI2uE,OAAOlwE,EAAW4E,SAAU,UAAW8xO,OAGtDC,GAAmB,SAAU51O,GAC/BA,EAAO4O,GAAG,YAAY,WACpBksL,GAAkBJ,MAAM16L,OAGxB61O,GAAkB,SAAU71O,EAAQ01O,GACtC11O,EAAO4O,GAAG,oBAAoB,SAAUR,GACtCsnO,EAAergH,eAGfygH,GAAuB,SAAU91O,EAAQ01O,GAC3C,IAAIhqL,EAAU6B,GAAoBvE,SAAS0C,QACvCA,EAAQzB,OACV2rL,GAAiB51O,GAEjB61O,GAAgB71O,EAAQ01O,GAE1B11O,EAAO4O,GAAG,oBAAoB,SAAUR,GACjConO,GAAmBpnO,IACtB0sL,GAAkBJ,MAAM16L,OAI1B+1O,GAAa,SAAU/1O,GACzB,IAAI01O,EAAiBn4I,IAAM,WACzBu9F,GAAkBJ,MAAM16L,KACvB,GACCA,EAAOkQ,QACTulO,GAAoBz1O,EAAQ01O,GAE9B11O,EAAO4O,GAAG,QAAQ,WAChBknO,GAAqB91O,EAAQ01O,MAE/B11O,EAAO4O,GAAG,UAAU,WAClB8mO,EAAe7sM,aAGfmtM,GAAmB,CAAE3nO,SAAU0nO,IAG/BE,GAAQl7E,GAAWv6J,IACnB01O,GAAsB,SAAUjuO,GAClC,OAAOstO,GAAaD,kBAAkBrtO,IAEpCkuO,GAAc,SAAUn2O,EAAQiI,GAClC,IAAImuO,EAAiBp2O,EAASA,EAAOC,SAASo2O,mBAAqB,GAC/DnyO,EAAS+xO,GAAMt+N,UAAU1P,GAAK,SAAUA,GAC1C,OAAOiuO,GAAoBjuO,MAASmuO,GAAiBp2O,EAAOkM,IAAIiI,GAAGlM,EAAKmuO,MAE1E,OAAkB,OAAXlyO,GAELoyO,GAAmB,WACrB,IACE,OAAOr3O,EAAW4E,SAASsoH,cAC3B,MAAO37F,GACP,OAAOvxB,EAAW4E,SAAS8J,OAG3Bm9F,GAAiB,SAAU40F,EAAetxL,GAC5C,IAAIpO,EAASoO,EAAEpO,OACfg2O,GAAiB3nO,SAASrO,GAC1BA,EAAO4O,GAAG,WAAW,WACnB,IAAI1N,EAAOoC,KACPuxO,EAAgBn1C,EAAcm1C,cAC9BA,IAAkB3zO,IAChB2zO,GACFA,EAAclzM,KAAK,OAAQ,CAAEkzM,cAAe3zO,IAE9Cw+L,EAAc6F,UAAUrkM,GACxBw+L,EAAcm1C,cAAgB3zO,EAC9BA,EAAKygC,KAAK,QAAS,CAAE40M,cAAe1B,IACpC3zO,EAAKgU,OAAM,OAGflV,EAAO4O,GAAG,YAAY,WACpB,IAAI1N,EAAOoC,KACXyvI,GAAM1nH,iBAAiBnqB,GAAM,WAC3B,IAAI2zO,EAAgBn1C,EAAcm1C,cAC7BsB,GAAYj1O,EAAMo1O,OAAuBzB,IAAkB3zO,IAC9DA,EAAKygC,KAAK,OAAQ,CAAEkzM,cAAe,OACnCn1C,EAAcm1C,cAAgB,YAI/BM,KACHA,GAAyB,SAAU/mO,GACjC,IACI6C,EADA0uL,EAAeD,EAAcC,aAEjC1uL,EAAS7C,EAAE6C,OACP0uL,GAAgB1uL,EAAO8wB,gBAAkB9iC,EAAW4E,WAClDoN,IAAWhS,EAAW4E,SAAS8J,MAASwoO,GAAYx2C,EAAc1uL,IAAWyuL,EAAcm1C,gBAAkBl1C,IAC/GA,EAAah+J,KAAK,OAAQ,CAAEkzM,cAAe,OAC3Cn1C,EAAcm1C,cAAgB,QAIpCoB,GAAMx7N,KAAKxb,EAAW4E,SAAU,UAAWsxO,MAG3CqB,GAA2B,SAAU92C,EAAetxL,GAClDsxL,EAAcm1C,gBAAkBzmO,EAAEpO,SACpC0/L,EAAcm1C,cAAgB,MAE3Bn1C,EAAcC,eACjBs2C,GAAM9mK,OAAOlwE,EAAW4E,SAAU,UAAWsxO,IAC7CA,GAAyB,OAGzBsB,GAAU,SAAU/2C,GACtBA,EAAc9wL,GAAG,YAAa+J,EAAMmyF,GAAgB40F,IACpDA,EAAc9wL,GAAG,eAAgB+J,EAAM69N,GAA0B92C,KAE/Dg3C,GAAkB,CACpB/nO,MAAO8nO,GACPnB,kBAAmBY,GACnBC,YAAaA,IAGXQ,GAAQ57E,GAAWv6J,IACnBo2O,GAAYh3O,GAAM6iJ,QAASo0F,GAASj3O,GAAMkP,KAAMgoO,GAAWl3O,GAAM2C,OACjEw0O,GAAkB,EAAwCC,IAAoB,EAC9EC,GAAgB,GAChBr3C,GAAU,GACVs3C,GAAmB,SAAU10O,GAC/B,MAAc,WAAPA,GAEL20O,GAAsB,SAAU/oO,GAClC,IAAI3M,EAAO2M,EAAE3M,KACbo1O,GAAOxB,GAAch2O,OAAO,SAAUW,GACpC,OAAQyB,GACR,IAAK,SACHzB,EAAO2hC,KAAK,eAAgBvzB,GAC5B,MACF,IAAK,SACHpO,EAAO2hC,KAAK,eAAgBvzB,GAC5B,WAIFgpO,GAAqB,SAAU33M,GAC7BA,IAAUu3M,KACRv3M,EACF+jH,GAAS1iJ,QAAQ8N,GAAG,gBAAiBuoO,IAErC3zF,GAAS1iJ,QAAQkuC,IAAI,gBAAiBmoM,IAExCH,GAAoBv3M,IAGpB43M,GAAuB,SAAUC,GACnC,IAAIC,EAAa33C,UACVq3C,GAAcK,EAAa90O,IAClC,IAAK,IAAIgB,EAAI,EAAGA,EAAIyzO,GAAch0O,OAAQO,IACxC,GAAIyzO,GAAczzO,KAAO8zO,EAAc,CACrCL,GAAcjwO,OAAOxD,EAAG,GACxB,MAYJ,OATAo8L,GAAU/wL,EAAO+wL,IAAS,SAAU5/L,GAClC,OAAOs3O,IAAiBt3O,KAEtBq1O,GAAc11C,eAAiB23C,IACjCjC,GAAc11C,aAAeC,GAAQ38L,OAAS,EAAI28L,GAAQ,GAAK,MAE7Dy1C,GAAcR,gBAAkByC,IAClCjC,GAAcR,cAAgB,MAEzB0C,EAAWt0O,SAAW28L,GAAQ38L,QAEnCu0O,GAAuB,SAAUx3O,GAQnC,OAPIA,GAAUA,EAAO8+L,eAAiB9+L,EAAOokF,gBAAkBpkF,EAAOoU,WAAW/P,aAC/EgzO,GAAqBr3O,GACrBA,EAAOggM,wBACPhgM,EAAO0jC,SAAQ,GACf1jC,EAAO0/B,SAAU,EACjB1/B,EAAS,MAEJA,GAETq1O,GAAgB,CACdtyC,gBAAiB,GACjBz2L,EAAGk3I,GACH7kI,aAAc,IACdC,aAAc,OACd64N,YAAa,aACb73C,QAASq3C,GACTvI,KAAMzlC,GACNtJ,aAAc,KACd1/L,SAAU,GACV0O,MAAO,WACL,IACIi3E,EAASquJ,EADT/yO,EAAOoC,KACmByxF,EAAS,GACvCk/I,EAAkBrD,GAAIp1D,mBAAmBv8K,EAAW4E,SAASq8C,UACzD,yBAAyB/7C,KAAK8vO,KAChCA,EAAkBA,EAAgBpyO,QAAQ,WAAY,IAAIA,QAAQ,gBAAiB,IAC9E,UAAUsC,KAAK8vO,KAClBA,GAAmB,MAGvB,IAAIyD,EAAU52O,OAAOpB,SAAWoB,OAAO62O,eACvC,GAAID,EACF9xJ,EAAU8xJ,EAAQ5hJ,MAAQ4hJ,EAAQ9xJ,QAClCmP,EAAS2iJ,EAAQ3iJ,WACZ,CAEL,IADA,IAAIinE,EAAU/8J,EAAW4E,SAASyM,qBAAqB,UAC9C9M,EAAI,EAAGA,EAAIw4J,EAAQ/4J,OAAQO,IAAK,CACvC,IAAI8pB,EAAM0uI,EAAQx4J,GAAG8pB,KAAO,GAC5B,GAAY,KAARA,EAAJ,CAGA,IAAIsqN,EAAYtqN,EAAInM,UAAUmM,EAAI7H,YAAY,MAC9C,GAAI,8CAA8CthB,KAAKmpB,GAAM,EACxB,IAA/BsqN,EAAU1vO,QAAQ,UACpB6sF,EAAS,QAEXnP,EAAUt4D,EAAInM,UAAU,EAAGmM,EAAI7H,YAAY,MAC3C,QAGJ,IAAKmgE,GAAW3mF,EAAW4E,SAASg0O,cAAe,CAC7CvqN,EAAMruB,EAAW4E,SAASg0O,cAAcvqN,KACf,IAAzBA,EAAIplB,QAAQ,UACd6sF,EAAS,QAEXnP,EAAUt4D,EAAInM,UAAU,EAAGmM,EAAI7H,YAAY,OAG/CvkB,EAAK0kF,QAAU,IAAIgrJ,GAAIqD,GAAiBvnN,WAAWk5D,GACnD1kF,EAAK+yO,gBAAkBA,EACvB/yO,EAAKgzO,QAAU,IAAItD,GAAI1vO,EAAK0kF,SAC5B1kF,EAAK6zF,OAASA,EACd2hJ,GAAgB/nO,MAAMzN,IAExBmkJ,iBAAkB,SAAU09C,GAC1B,IAAIjmC,EAAS/nE,EACb+nE,EAAUimC,EAAgB+0C,SACtBh7E,IACFx5J,KAAKsiF,QAAU,IAAIgrJ,GAAIttO,KAAK2wO,iBAAiBvnN,WAAWowI,EAAQj7J,QAAQ,OAAQ,KAChFyB,KAAK4wO,QAAU,IAAItD,GAAIttO,KAAKsiF,UAE9BmP,EAASguG,EAAgBhuG,OACrBguG,EAAgBhuG,SAClBzxF,KAAKyxF,OAASA,GAEhBzxF,KAAKy/L,gBAAkBA,EACvB,IAAIg1C,EAAiBh1C,EAAgBi1C,iBACrC,IAAK,IAAI5wO,KAAQ2wO,EACfz7E,GAAakB,cAAcpgJ,KAAKhW,GAAQ2wO,EAAe3wO,IAG3D2qF,KAAM,SAAU9xF,GACd,IACIm0B,EAAQ6jN,EADR/2O,EAAOoC,KAEX20O,EAAuBr4O,GAAM+gE,QAAQ,iMAAuM,KAC5O,IAAIu3K,EAAwB,SAAUj4O,EAAUgI,GAC9C,OAAOhI,EAASiQ,QAAUjI,EAAIoJ,QAAQkP,gBAAiB03N,GAErDrqM,EAAW,SAAU3lC,GACvB,IAAIzF,EAAKyF,EAAIzF,GAUb,OATKA,IACHA,EAAKyF,EAAIb,KAEP5E,EADEA,IAAOm0O,GAAMt3O,IAAImD,GACdyF,EAAIb,KAEJuvO,GAAMjgO,WAEbzO,EAAIgP,aAAa,KAAMzU,IAElBA,GAELyxE,EAAe,SAAU7sE,GAC3B,IAAI7D,EAAWtD,EAASmH,GACxB,GAAK7D,EAGL,OAAOA,EAAS0D,MAAM/F,EAAM6F,MAAM/E,UAAUwE,MAAMtE,KAAKc,UAAW,KAEhEuP,EAAW,SAAUtK,EAAK7D,GAC5B,OAAOA,EAAUoX,cAAgBk3B,OAAStuC,EAAUD,KAAK8D,EAAI7D,WAAauyO,GAAMpkO,SAAStK,EAAK7D,IAE5F+zO,EAAc,SAAUl4O,GAC1B,IAAIm3E,EAAGg0B,EAAU,GACjB,GAAIymC,GAAIlkH,IAAMkkH,GAAIlkH,GAAK,GAErB,OADAw8K,GAAcD,UAAU,kKACjB,GAET,GAAIjqM,EAASyrE,MAIX,OAHAmrK,GAAO52O,EAASyrE,OAAO,SAAUjqE,GAC/B2pG,EAAUA,EAAQpyF,OAAO29N,GAAMvqO,OAAO3K,EAAK+H,cAEtC4hG,EACF,GAAInrG,EAASuJ,SAClB,OAAOmtO,GAAMvqO,OAAOnM,EAASuJ,UACxB,GAAIvJ,EAASgR,OAClB,MAAO,CAAChR,EAASgR,QAEnB,OAAQhR,EAASs1H,MACjB,IAAK,QACHn+C,EAAIn3E,EAAS2D,UAAY,GACrBwzE,EAAEn0E,OAAS,GACb4zO,GAAOD,GAAUx/J,IAAI,SAAU50E,GAC7B,IAAIyF,GACAA,EAAM0uO,GAAMt3O,IAAImD,IAClB4oG,EAAQvkG,KAAKoB,GAEb4uO,GAAO53O,EAAW4E,SAASu0O,OAAO,SAAUl/N,GAC1C29N,GAAO39N,EAAEtV,UAAU,SAAUwK,GACvBA,EAAEhH,OAAS5E,IACbA,EAAK,cAAgBu0O,KACrBJ,GAAMxqO,UAAUiC,EAAG,KAAM5L,GACzB4oG,EAAQvkG,KAAKuH,aAOzB,MACF,IAAK,YACL,IAAK,qBACHyoO,GAAOF,GAAMvqO,OAAO,aAAa,SAAUnE,GACrChI,EAASo4O,mBAAqB9lO,EAAStK,EAAKhI,EAASo4O,oBAGpDp4O,EAASq4O,kBAAmB/lO,EAAStK,EAAKhI,EAASq4O,kBACtDltI,EAAQvkG,KAAKoB,MAGjB,MAEF,OAAOmjG,GAELmtI,EAAiB,SAAU34C,GAC7BxrK,EAASwrK,GAEP44C,EAAc,WAChB,IAEIptI,EAFAqtI,EAAY,EACZ74C,EAAU,GAEV84C,EAAe,SAAUl2O,EAAIvC,EAAUy5D,GACzC,IAAI15D,EAAS,IAAIg0O,GAAOxxO,EAAIvC,EAAUiB,GACtC0+L,EAAQ/4L,KAAK7G,GACbA,EAAO4O,GAAG,QAAQ,aACV6pO,IAAcrtI,EAAQnoG,QAC1Bs1O,EAAe34C,MAGnB5/L,EAAO05D,UAAY15D,EAAO05D,WAAaA,EACvC15D,EAAOurB,UAETorN,GAAMxnK,OAAOruE,OAAQ,QAAS03O,GAC9BvkK,EAAa,cACbm3B,EAAUo4C,GAAS19F,OAAOqyL,EAAYl4O,IAClCA,EAASyrE,MACXmrK,GAAO52O,EAASyrE,OAAO,SAAUjqE,GAC/B7B,GAAMkP,KAAKs8F,GAAS,SAAUnjG,GAC5B,OAAI0uO,GAAMxiO,GAAGlM,EAAKxG,EAAK+H,YACrBkvO,EAAa9qM,EAAS3lC,GAAM6uO,GAAS,GAAI72O,EAAUwB,GAAOwG,IACnD,UAOfrI,GAAMkP,KAAKs8F,GAAS,SAAUnjG,GAC5BuvO,GAAqBt2O,EAAK7B,IAAI4I,EAAIzF,QAEpC4oG,EAAUxrG,GAAMooB,KAAKojF,GAAS,SAAUnjG,GACtC,OAAQ/G,EAAK7B,IAAI4I,EAAIzF,OAEA,IAAnB4oG,EAAQnoG,OACVs1O,EAAe,IAEf1B,GAAOzrI,GAAS,SAAUnjG,GACpBiwO,EAAsBj4O,EAAUgI,GAClCkiM,GAAcD,UAAU,sEAAuEjiM,GAE/FywO,EAAa9qM,EAAS3lC,GAAMhI,EAAUgI,QAO9C,OAFA/G,EAAKjB,SAAWA,EAChB02O,GAAMl8N,KAAK3Z,OAAQ,QAAS03O,GACrB,IAAIpmG,IAAW,SAAUvyI,GAC1Bu0B,EACFv0B,EAAQu0B,GAERmkN,EAAiB,SAAU34C,GACzB//L,EAAQ+/L,QAKhBvgM,IAAK,SAAUmD,GACb,OAAyB,IAArBQ,UAAUC,OACL28L,GAAQp5L,MAAM,GACZ69C,EAAS7hD,GACX+M,EAAKqwL,IAAS,SAAU5/L,GAC7B,OAAOA,EAAOwC,KAAOA,KACpBuX,MAAM,MACAwqC,EAAS/hD,IACXo9L,GAAQp9L,GAAMo9L,GAAQp9L,GAEtB,MAGX2E,IAAK,SAAUnH,GACb,IACI24O,EADAz3O,EAAOoC,KAGX,OADAq1O,EAAiB1B,GAAcj3O,EAAOwC,IAClCm2O,IAAmB34O,IAGK,OAAxBkB,EAAK7B,IAAIW,EAAOwC,MACd00O,GAAiBl3O,EAAOwC,MAC1By0O,GAAcj3O,EAAOwC,IAAMxC,GAE7Bi3O,GAAcpwO,KAAK7G,GACnB4/L,GAAQ/4L,KAAK7G,IAEfo3O,IAAmB,GACnBl2O,EAAKy+L,aAAe3/L,EACpBkB,EAAKygC,KAAK,YAAa,CAAE3hC,OAAQA,IAC5Bo1O,KACHA,GAAuB,WACrBl0O,EAAKygC,KAAK,iBAEZg1M,GAAMl8N,KAAK3Z,OAAQ,eAAgBs0O,MAhB5Bp1O,GAoBX04O,aAAc,SAAUl2O,EAAIvC,GAC1B,OAAOqD,KAAK6D,IAAI,IAAI6sO,GAAOxxO,EAAIvC,EAAUqD,QAE3C+R,OAAQ,SAAU7L,GAChB,IACIhG,EAAGxD,EADHkB,EAAOoC,KAEX,GAAKkG,EAAL,CAMA,IAAI66C,EAAS76C,GAUb,OADAxJ,EAASwJ,EACLwnI,EAAO9vI,EAAK7B,IAAIW,EAAOwC,KAClB,MAEL60O,GAAqBr3O,IACvBkB,EAAKygC,KAAK,eAAgB,CAAE3hC,OAAQA,IAEf,IAAnB4/L,GAAQ38L,QACV0zO,GAAMxnK,OAAOruE,OAAQ,eAAgBs0O,IAEvCp1O,EAAOqV,SACP+hO,GAAmBx3C,GAAQ38L,OAAS,GAC7BjD,GApBL62O,GAAOF,GAAMvqO,OAAO5C,IAAW,SAAUvB,GACvCjI,EAASkB,EAAK7B,IAAI4I,EAAIzF,IAClBxC,GACFkB,EAAKmU,OAAOrV,WAThB,IAAKwD,EAAIo8L,GAAQ38L,OAAS,EAAGO,GAAK,EAAGA,IACnCtC,EAAKmU,OAAOuqL,GAAQp8L,KA2B1B4T,YAAa,SAAUzG,EAAKmiC,EAAI1zC,GAC9B,IAAI8B,EAAOoC,KAAMtD,EAASkB,EAAK7B,IAAID,GACnC,OAAQuR,GACR,IAAK,eAIH,OAHKzP,EAAK7B,IAAID,IACZ,IAAI40O,GAAO50O,EAAO8B,EAAKjB,SAAUiB,GAAMqqB,UAElC,EACT,IAAK,kBAIH,OAHIvrB,GACFA,EAAOqV,UAEF,EACT,IAAK,kBACH,OAAKrV,GAIDA,EAAO45J,WACT55J,EAAOgjC,OAEPhjC,EAAOijC,QAEF,IARL/hC,EAAKkW,YAAY,eAAgB,EAAGhY,IAC7B,GASX,QAAI8B,EAAKy+L,cACAz+L,EAAKy+L,aAAavoL,YAAYzG,EAAKmiC,EAAI1zC,IAIlDwwO,YAAa,WACXiH,GAAOj3C,IAAS,SAAU5/L,GACxBA,EAAOupC,WAGXqvM,QAAS,SAAUr0O,EAAMsY,GACvBosL,GAAK9hM,IAAI5C,EAAMsY,IAEjBzJ,UAAW,SAAU3N,GACnB,OAAOwjM,GAAK71L,UAAU3N,IAExB8/L,UAAW,SAAUvlM,GACnB,IAAI2/L,EAAer8L,KAAKq8L,aACpBr8L,KAAKq8L,eAAiB3/L,IACpB2/L,GACFA,EAAah+J,KAAK,aAAc,CAAEy0G,cAAep2I,IAEnDA,EAAO2hC,KAAK,WAAY,CAAEy0G,cAAeupD,KAE3Cr8L,KAAKq8L,aAAe3/L,IAGxB82O,GAASzB,GAAep3C,IACxBo3C,GAAc1mO,QACd,IAAIkqO,GAAkBxD,GAEtB,SAASyD,GAAW5sO,GAClB,IAAI00D,EAAO,SAAU16C,EAAK3iB,GACxB,OAAO2vK,GAAUtyG,KAAK10D,EAAKga,EAAK3iB,IAE9B8d,EAAQ6vK,GAAW7vK,MACnB03J,EAAY,SAAU7yJ,GACxB,OAAO2yK,GAAe9f,UAAU7sK,EAAKga,GAAKtM,KAAK7O,GAAS,IAAQ,SAAUguO,GAGxE,OAFA7yN,EAAIW,SAASkyN,EAAczyN,eAAgByyN,EAActyN,aACzDP,EAAIY,OAAOiyN,EAAcr1L,aAAcq1L,EAAcryN,YAC9C,MAGX,MAAO,CACLk6C,KAAMA,EACNv/C,MAAOA,EACP03J,UAAWA,IAGd,SAAU+/D,GACTA,EAAWE,cAAgBrhD,GAAa7mB,KACxCgoE,EAAW1nK,uBAAyBuhJ,GAAoBvrK,UACxD0xL,EAAW91E,gBAAkBA,GAC7B81E,EAAWhtO,QAAUA,IAJvB,CAKEgtO,KAAeA,GAAa,KAC9B,IAgJIG,GAAaC,GAhJbC,GAAeL,GAEfv4O,GAAMD,KAAKC,IAAK6oB,GAAM9oB,KAAK8oB,IAAKgwN,GAAU94O,KAAKm5B,MAC/C4/M,GAAmB,SAAU73M,EAAM+3L,EAAYnpN,GACjD,IAAImG,EAAGC,EAAG9V,EAAG8R,EAAG8mO,EAASC,EAgCzB,OA/BAhjO,EAAIgjN,EAAWhjN,EACfC,EAAI+iN,EAAW/iN,EACf9V,EAAI8gC,EAAK9gC,EACT8R,EAAIgvB,EAAKhvB,EACT8mO,EAAU/f,EAAW74N,EACrB64O,EAAUhgB,EAAW/mN,EACrBpC,GAAOA,GAAO,IAAIiR,MAAM,IACT,MAAXjR,EAAI,KACNoG,GAAK+iO,GAEQ,MAAXnpO,EAAI,KACNmG,GAAK+iO,GAEQ,MAAXlpO,EAAI,KACNoG,GAAK4iO,GAAQG,EAAU,IAEV,MAAXnpO,EAAI,KACNmG,GAAK6iO,GAAQE,EAAU,IAEV,MAAXlpO,EAAI,KACNoG,GAAKhE,GAEQ,MAAXpC,EAAI,KACNmG,GAAK7V,GAEQ,MAAX0P,EAAI,KACNoG,GAAK4iO,GAAQ5mO,EAAI,IAEJ,MAAXpC,EAAI,KACNmG,GAAK6iO,GAAQ14O,EAAI,IAEZwgI,GAAS3qH,EAAGC,EAAG9V,EAAG8R,IAEvBgnO,GAA2B,SAAUh4M,EAAM+3L,EAAYkgB,EAAeC,GACxE,IAAInlM,EAAK/wC,EACT,IAAKA,EAAI,EAAGA,EAAIk2O,EAAKz2O,OAAQO,IAE3B,GADA+wC,EAAM8kM,GAAiB73M,EAAM+3L,EAAYmgB,EAAKl2O,IAC1C+wC,EAAIh+B,GAAKkjO,EAAcljO,GAAKg+B,EAAIh+B,EAAIg+B,EAAI7zC,GAAK+4O,EAAc/4O,EAAI+4O,EAAcljO,GAAKg+B,EAAI/9B,GAAKijO,EAAcjjO,GAAK+9B,EAAI/9B,EAAI+9B,EAAI/hC,GAAKinO,EAAcjnO,EAAIinO,EAAcjjO,EACjK,OAAOkjO,EAAKl2O,GAGhB,OAAO,MAELkhC,GAAU,SAAUlD,EAAM9gC,EAAG8R,GAC/B,OAAO0uH,GAAS1/F,EAAKjrB,EAAI7V,EAAG8gC,EAAKhrB,EAAIhE,EAAGgvB,EAAK9gC,EAAQ,EAAJA,EAAO8gC,EAAKhvB,EAAQ,EAAJA,IAE/DmnO,GAAY,SAAUn4M,EAAM+D,GAC9B,IAAIq0M,EAAIC,EAAI3mB,EAAID,EAKhB,OAJA2mB,EAAKxwN,GAAIoY,EAAKjrB,EAAGgvB,EAAShvB,GAC1BsjO,EAAKzwN,GAAIoY,EAAKhrB,EAAG+uB,EAAS/uB,GAC1B08M,EAAK3yN,GAAIihC,EAAKjrB,EAAIirB,EAAK9gC,EAAG6kC,EAAShvB,EAAIgvB,EAAS7kC,GAChDuyN,EAAK1yN,GAAIihC,EAAKhrB,EAAIgrB,EAAKhvB,EAAG+yB,EAAS/uB,EAAI+uB,EAAS/yB,GAC5C0gN,EAAK0mB,EAAK,GAAK3mB,EAAK4mB,EAAK,EACpB,KAEF34G,GAAS04G,EAAIC,EAAI3mB,EAAK0mB,EAAI3mB,EAAK4mB,IAEpCC,GAAU,SAAUt4M,EAAMhB,EAAWu5M,GACvC,IAAIC,EAAaC,EAAaC,EAAYC,EAAYP,EAAIC,EAAI3mB,EAAID,EAAImnB,EAAKC,EAqB3E,OApBAT,EAAKp4M,EAAKjrB,EACVsjO,EAAKr4M,EAAKhrB,EACV08M,EAAK1xL,EAAKjrB,EAAIirB,EAAK9gC,EACnBuyN,EAAKzxL,EAAKhrB,EAAIgrB,EAAKhvB,EACnB4nO,EAAM55M,EAAUjqB,EAAIiqB,EAAU9/B,EAC9B25O,EAAM75M,EAAUhqB,EAAIgqB,EAAUhuB,EAC9BwnO,EAAc5wN,GAAI,EAAGoX,EAAUjqB,EAAIqjO,GACnCK,EAAc7wN,GAAI,EAAGoX,EAAUhqB,EAAIqjO,GACnCK,EAAa9wN,GAAI,EAAG8pM,EAAKknB,GACzBD,EAAa/wN,GAAI,EAAG6pM,EAAKonB,GACzBT,GAAMI,EACNH,GAAMI,EACFF,IACF7mB,GAAM8mB,EACN/mB,GAAMgnB,EACNL,GAAMM,EACNL,GAAMM,GAERjnB,GAAMgnB,EACNjnB,GAAMknB,EACCj5G,GAAS04G,EAAIC,EAAI3mB,EAAK0mB,EAAI3mB,EAAK4mB,IAEpC34G,GAAW,SAAU3qH,EAAGC,EAAG9V,EAAG8R,GAChC,MAAO,CACL+D,EAAGA,EACHC,EAAGA,EACH9V,EAAGA,EACH8R,EAAGA,IAGH8nO,GAAiB,SAAUj2E,GAC7B,OAAOnjC,GAASmjC,EAAWlhI,KAAMkhI,EAAWjhI,IAAKihI,EAAWt2I,MAAOs2I,EAAWr2I,SAE5Ei9G,GAAO,CACTvmG,QAASA,GACT20M,iBAAkBA,GAClBG,yBAA0BA,GAC1BG,UAAWA,GACXtkN,MAAOykN,GACP3pO,OAAQ+wH,GACRo5G,eAAgBA,IAGd5uK,GAAQ,GACR6uK,GAAU,CACZpzO,IAAK,SAAU1F,EAAM+4O,GACnB9uK,GAAMjqE,EAAK8e,eAAiBi6N,GAE9Bp2N,IAAK,SAAU3iB,GACb,QAASiqE,GAAMjqE,EAAK8e,gBAEtBlhB,IAAK,SAAUoC,GACb,IAAIg5O,EAASh5O,EAAK8e,cACdm6N,EAAchvK,GAAMrpE,eAAeo4O,GAAU/uK,GAAM+uK,GAAU,KACjE,GAAoB,OAAhBC,EACF,MAAM,IAAIvgO,MAAM,mCAAqC1Y,GAEvD,OAAOi5O,GAETvqO,OAAQ,SAAU1O,EAAMxB,GACtB,IAAI06O,EAUJ,GAToB,kBAATl5O,GACTxB,EAAWA,GAAY,GACvBA,EAASwB,KAAOA,IAEhBxB,EAAWwB,EACXA,EAAOxB,EAASwB,MAElBA,EAAOA,EAAK8e,cACZo6N,EAAcjvK,GAAMjqE,IACfk5O,EACH,MAAM,IAAIxgO,MAAM,mCAAqC1Y,GAIvD,OAFAk5O,EAAc,IAAIA,EAAY16O,GAC9B06O,EAAYl5O,KAAOA,EACZk5O,IAIPC,GAASh7O,GAAMkP,KAAM+rO,GAAWj7O,GAAM2C,OAEtCu4O,GAAQ,aAEZA,GAAMv4O,OAAS02O,GAAc,SAAUl3F,GACrC,IAEI//I,EAAWoF,EAAM2zO,EAFjB75O,EAAOoC,KACPyhC,EAAS7jC,EAAKc,UAEd84O,EAAQ,WACV,IAAIt3O,EAAGw3O,EAAQC,EACX/5O,EAAOoC,KACX,IAAK41O,KACCh4O,EAAK6wF,MACP7wF,EAAK6wF,KAAK9qF,MAAM/F,EAAM8B,WAExBg4O,EAAS95O,EAAKg6O,OACVF,GAAQ,CACVx3O,EAAIw3O,EAAO/3O,OACX,MAAOO,IACLy3O,EAAQD,EAAOx3O,GACXy3O,EAAMlpJ,MACRkpJ,EAAMlpJ,KAAK9qF,MAAM/F,EAAM8B,aAM7Bm4O,EAAQ,WACV,OAAO73O,MAEL83O,EAAe,SAAUh0O,EAAMwR,GACjC,OAAO,WACL,IAEIzV,EAFAjC,EAAOoC,KACPk4I,EAAMt6I,EAAK6jC,OAKf,OAHA7jC,EAAK6jC,OAASA,EAAO39B,GACrBjE,EAAMyV,EAAG3R,MAAM/F,EAAM8B,WACrB9B,EAAK6jC,OAASy2G,EACPr4I,IA4CX,IAAKiE,KAzCL8xO,IAAe,EACfl3O,EAAY,IAAId,EAChBg4O,IAAe,EACXn3F,EAAKm5F,SACPN,GAAO74F,EAAKm5F,QAAQ,SAAUD,GAC5B,IAAK,IAAII,KAAUJ,EACF,SAAXI,IACFt5F,EAAKs5F,GAAUJ,EAAMI,OAIvBt2M,EAAOm2M,SACTn5F,EAAKm5F,OAASn2M,EAAOm2M,OAAOliO,OAAO+oI,EAAKm5F,UAGxCn5F,EAAKu5F,SACPV,GAAO74F,EAAKu5F,QAAQj6N,MAAM,MAAM,SAAUja,GACxC26I,EAAK36I,GAAQ+zO,KAGbp5F,EAAKw5F,YACPX,GAAO74F,EAAKw5F,WAAWl6N,MAAM,MAAM,SAAUja,GAC3C,IAAIo0O,EAAY,IAAMp0O,EACtB26I,EAAK36I,GAAQ,SAAUhI,GACrB,IAAI8B,EAAOoC,KACX,YAAcgX,IAAVlb,GACF8B,EAAKs6O,GAAap8O,EACX8B,GAEFA,EAAKs6O,OAIdz5F,EAAK05F,SACPb,GAAO74F,EAAK05F,SAAS,SAAUrpH,EAAMhrH,GACnC0zO,EAAM1zO,GAAQgrH,KAGd2vB,EAAKh+G,UAAYgB,EAAOhB,WAC1Bg+G,EAAKh+G,SAAW82M,GAAS,GAAI91M,EAAOhB,SAAUg+G,EAAKh+G,WAExCg+G,EACXg5F,EAASh5F,EAAK36I,GACQ,oBAAX2zO,GAAyBh2M,EAAO39B,GACzCpF,EAAUoF,GAAQg0O,EAAah0O,EAAM2zO,GAErC/4O,EAAUoF,GAAQ2zO,EAMtB,OAHAD,EAAM94O,UAAYA,EAClB84O,EAAMt/N,YAAcs/N,EACpBA,EAAMv4O,OAAS02O,GACR6B,GAGT,IAAIY,GAAQp7O,KAAKC,IAAKo7O,GAAQr7O,KAAK8oB,IAAKwyN,GAAUt7O,KAAKm5B,MACnDoiN,GAAQ,SAAUz8O,GACpB,IAAI8B,EAAO,GACP+a,EAAI,EAAG0b,EAAI,EAAGvc,EAAI,EAClB0gO,EAAU,SAAU7/N,EAAG0b,EAAGvc,GAC5B,IAAI5I,EAAGqH,EAAGta,EAAG40F,EAAG4nJ,EAAQC,EASxB,OARAxpO,EAAI,EACJqH,EAAI,EACJta,EAAI,EACJ0c,GAAQ,IACR0b,GAAQ,IACRvc,GAAQ,IACR2gO,EAASL,GAAMz/N,EAAGy/N,GAAM/jN,EAAGvc,IAC3B4gO,EAASL,GAAM1/N,EAAG0/N,GAAMhkN,EAAGvc,IACvB2gO,IAAWC,GACbz8O,EAAIw8O,EACG,CACLvpO,EAAG,EACHqH,EAAG,EACHta,EAAO,IAAJA,KAGP40F,EAAIl4E,IAAM8/N,EAASpkN,EAAIvc,EAAIA,IAAM2gO,EAAS9/N,EAAI0b,EAAIvc,EAAIa,EACtDzJ,EAAIyJ,IAAM8/N,EAAS,EAAI3gO,IAAM2gO,EAAS,EAAI,EAC1CvpO,EAAI,IAAMA,EAAI2hF,GAAK6nJ,EAASD,IAC5BliO,GAAKmiO,EAASD,GAAUC,EACxBz8O,EAAIy8O,EACG,CACLxpO,EAAGopO,GAAQppO,GACXqH,EAAG+hO,GAAY,IAAJ/hO,GACXta,EAAGq8O,GAAY,IAAJr8O,MAGX08O,EAAW,SAAU9gN,EAAK+gN,EAAYhhN,GACxC,IAAI1B,EAAM2iN,EAAQ5lO,EAAGpU,EAMrB,GALAg5B,GAAO3pB,SAAS2pB,EAAK,KAAO,GAAK,IACjC+gN,EAAa1qO,SAAS0qO,EAAY,IAAM,IACxChhN,EAAa1pB,SAAS0pB,EAAY,IAAM,IACxCghN,EAAaP,GAAM,EAAGD,GAAMQ,EAAY,IACxChhN,EAAaygN,GAAM,EAAGD,GAAMxgN,EAAY,IACrB,IAAfghN,EAAJ,CAQA,OAJA1iN,EAAO2B,EAAM,GACbghN,EAASjhN,EAAaghN,EACtB3lO,EAAI4lO,GAAU,EAAI77O,KAAK8zG,IAAI56E,EAAO,EAAI,IACtCr3B,EAAQ+4B,EAAaihN,EACb77O,KAAK61B,MAAMqD,IACnB,KAAK,EACHvd,EAAIkgO,EACJxkN,EAAIphB,EACJ6E,EAAI,EACJ,MACF,KAAK,EACHa,EAAI1F,EACJohB,EAAIwkN,EACJ/gO,EAAI,EACJ,MACF,KAAK,EACHa,EAAI,EACJ0b,EAAIwkN,EACJ/gO,EAAI7E,EACJ,MACF,KAAK,EACH0F,EAAI,EACJ0b,EAAIphB,EACJ6E,EAAI+gO,EACJ,MACF,KAAK,EACHlgO,EAAI1F,EACJohB,EAAI,EACJvc,EAAI+gO,EACJ,MACF,KAAK,EACHlgO,EAAIkgO,EACJxkN,EAAI,EACJvc,EAAI7E,EACJ,MACF,QACE0F,EAAI0b,EAAIvc,EAAI,EAEda,EAAI2/N,GAAQ,KAAO3/N,EAAI9Z,IACvBw1B,EAAIikN,GAAQ,KAAOjkN,EAAIx1B,IACvBiZ,EAAIwgO,GAAQ,KAAOxgO,EAAIjZ,SA3CrB8Z,EAAI0b,EAAIvc,EAAIwgO,GAAQ,IAAM1gN,IA6C1B03C,EAAQ,WACV,IAAIgiF,EAAM,SAAUhkI,GAElB,OADAA,EAAMpf,SAASof,EAAK,IAAI3uB,SAAS,IAC1B2uB,EAAI3tB,OAAS,EAAI2tB,EAAM,IAAMA,GAEtC,MAAO,IAAMgkI,EAAI34I,GAAK24I,EAAIj9H,GAAKi9H,EAAIx5I,IAEjCghO,EAAQ,WACV,MAAO,CACLngO,EAAGA,EACH0b,EAAGA,EACHvc,EAAGA,IAGHihO,EAAQ,WACV,OAAOP,EAAQ7/N,EAAG0b,EAAGvc,IAEnBtT,EAAQ,SAAU1I,GACpB,IAAI0N,EA2BJ,MA1BqB,kBAAV1N,EACL,MAAOA,GACT6c,EAAI7c,EAAM6c,EACV0b,EAAIv4B,EAAMu4B,EACVvc,EAAIhc,EAAMgc,GACD,MAAOhc,GAChB68O,EAAS78O,EAAMoT,EAAGpT,EAAMya,EAAGza,EAAMG,IAG/BuN,EAAU,8DAA8DzG,KAAKjH,KAC/E6c,EAAIzK,SAAS1E,EAAQ,GAAI,IACzB6qB,EAAInmB,SAAS1E,EAAQ,GAAI,IACzBsO,EAAI5J,SAAS1E,EAAQ,GAAI,MAChBA,EAAU,oCAAoCzG,KAAKjH,KAC5D6c,EAAIzK,SAAS1E,EAAQ,GAAI,IACzB6qB,EAAInmB,SAAS1E,EAAQ,GAAI,IACzBsO,EAAI5J,SAAS1E,EAAQ,GAAI,MAChBA,EAAU,2BAA2BzG,KAAKjH,MACnD6c,EAAIzK,SAAS1E,EAAQ,GAAKA,EAAQ,GAAI,IACtC6qB,EAAInmB,SAAS1E,EAAQ,GAAKA,EAAQ,GAAI,IACtCsO,EAAI5J,SAAS1E,EAAQ,GAAKA,EAAQ,GAAI,KAG1CmP,EAAIA,EAAI,EAAI,EAAIA,EAAI,IAAM,IAAMA,EAChC0b,EAAIA,EAAI,EAAI,EAAIA,EAAI,IAAM,IAAMA,EAChCvc,EAAIA,EAAI,EAAI,EAAIA,EAAI,IAAM,IAAMA,EACzBla,GAST,OAPI9B,GACF0I,EAAM1I,GAER8B,EAAKk7O,MAAQA,EACbl7O,EAAKm7O,MAAQA,EACbn7O,EAAK0xE,MAAQA,EACb1xE,EAAK4G,MAAQA,EACN5G,GAGL8gB,GAAY,SAAUlgB,EAAGw6O,GAC3B,IAAI94O,EAAGjE,EAAG8L,EAAGjE,EAEb,GADAk1O,EAAQA,GAAS,IACP,OAANx6O,EACF,MAAO,OAGT,GADAuJ,SAAWvJ,EACD,WAANuJ,EAEF,OADA9L,EAAI,4BACG+8O,EAAQx6O,EAAED,QAAQ,qCAAqC,SAAUoZ,EAAGG,GACzE,MAAc,MAAVkhO,GAAuB,MAANrhO,EACZA,GAETzX,EAAIjE,EAAE2I,QAAQkT,GACV5X,EAAI,EACC,KAAOjE,EAAEqzF,OAAOpvF,EAAI,IAE7ByX,EAAIG,EAAE4P,aAAa/oB,SAAS,IACrB,MAAQ,OAAOkf,UAAUlG,EAAEhY,QAAUgY,OACzCqhO,EAEP,GAAU,WAANjxO,EAAgB,CAClB,GAAIvJ,EAAEO,gBAAwD,mBAAtCN,OAAOC,UAAUC,SAASC,KAAKJ,GAAyB,CAC9E,IAAK0B,EAAI,EAAGjE,EAAI,IAAKiE,EAAI1B,EAAEmB,OAAQO,IACjCjE,IAAMiE,EAAI,EAAI,IAAM,IAAMwe,GAAUlgB,EAAE0B,GAAI84O,GAE5C,OAAO/8O,EAAI,IAGb,IAAK6H,KADL7H,EAAI,IACSuC,EACPA,EAAEO,eAAe+E,KACnB7H,GAAwB,oBAAZuC,EAAEsF,IAAwB7H,EAAE0D,OAAS,EAAI,IAAMq5O,EAAQA,GAASl1O,EAAOk1O,EAAQ,IAAMt6N,GAAUlgB,EAAEsF,GAAOk1O,GAAS,IAGjI,OAAO/8O,EAAI,IAEb,MAAO,GAAKuC,GAEVy6O,GAAS,CACXv6N,UAAWA,GACXla,MAAO,SAAUrC,GACf,IACE,OAAOJ,KAAKyC,MAAMrC,GAClB,MAAO+qB,OAKTgsN,GAAQ,CACVn1O,UAAW,GACXoP,MAAO,EACP8b,KAAM,SAAUtyB,GACd,IAAIiB,EAAOoC,KAAM4I,EAAM6uJ,GAAWv6J,IAAKiW,OAA2B6D,IAAnBra,EAASwW,MAAsBxW,EAASwW,MAAQvV,EAAKuV,MAChGjU,EAAK,iBAAmBiU,EAC5BvV,EAAKmG,UAAUoP,GAAS,SAAU00B,GAChCj/B,EAAImJ,OAAO7S,UACJtB,EAAKmG,UAAUoP,GACtBxW,EAASsD,SAAS4nC,IAEpBj/B,EAAI/E,IAAI+E,EAAI0c,IAAIjb,KAAM,SAAU,CAC9BnL,GAAIA,EACJ8qB,IAAKrtB,EAASsJ,IACd9H,KAAM,oBAERP,EAAKuV,UAILgmO,GAAM,CACRlqN,KAAM,SAAUtyB,GACd,IAAI4xB,EAAKpb,EAAQ,EACbimO,EAAQ,YACLz8O,EAAS0D,OAA4B,IAAnBkuB,EAAI2Z,YAAoB/0B,IAAU,KACnDxW,EAASsyC,SAAW97B,EAAQ,KAAwB,MAAfob,EAAII,OAC3ChyB,EAASsyC,QAAQrwC,KAAKjC,EAAS08O,cAAe,GAAK9qN,EAAIouB,aAAcpuB,EAAK5xB,GACjEA,EAAS0xB,OAClB1xB,EAAS0xB,MAAMzvB,KAAKjC,EAAS28O,YAAanmO,EAAQ,IAAQ,YAAc,UAAWob,EAAK5xB,GAE1F4xB,EAAM,MAENnC,WAAWgtN,EAAO,KAUtB,GAPAz8O,EAASw+B,MAAQx+B,EAASw+B,OAASn7B,KACnCrD,EAAS08O,cAAgB18O,EAAS08O,eAAiB18O,EAASw+B,MAC5Dx+B,EAAS28O,YAAc38O,EAAS28O,aAAe38O,EAASw+B,MACxDx+B,EAAS0D,OAA2B,IAAnB1D,EAAS0D,MAC1B1D,EAASiF,KAAOjF,EAASiF,MAAQ,GACjCu3O,GAAI96M,KAAK,mBAAoB,CAAE1hC,SAAUA,IACzC4xB,EAAMC,KACFD,EAAK,CAsBP,GArBIA,EAAIgrN,kBACNhrN,EAAIgrN,iBAAiB58O,EAAS44E,cAEhChnD,EAAI5kB,KAAKhN,EAASwB,OAASxB,EAASiF,KAAO,OAAS,OAAQjF,EAASsJ,IAAKtJ,EAAS0D,OAC/E1D,EAAS68O,cACXjrN,EAAIyZ,iBAAkB,GAEpBrrC,EAAS44E,cACXhnD,EAAI4Z,iBAAiB,eAAgBxrC,EAAS44E,cAE5C54E,EAAS88O,gBACXn9O,GAAMkP,KAAK7O,EAAS88O,gBAAgB,SAAUt5N,GAC5CoO,EAAI4Z,iBAAiBhoB,EAAOrhB,IAAKqhB,EAAOrkB,UAG5CyyB,EAAI4Z,iBAAiB,mBAAoB,kBACzC5Z,EAAM4qN,GAAI96M,KAAK,aAAc,CAC3B9P,IAAKA,EACL5xB,SAAUA,IACT4xB,IACHA,EAAIU,KAAKtyB,EAASiF,OACbjF,EAAS0D,MACZ,OAAO+4O,IAEThtN,WAAWgtN,EAAO,OAIxB98O,GAAM2C,OAAOk6O,GAAKx+C,IAElB,IAAI++C,GAAWp9O,GAAM2C,OACjB06O,GAAc,SAAUh9O,GAC1BqD,KAAKrD,SAAW+8O,GAAS,GAAI/8O,GAC7BqD,KAAKmT,MAAQ,GAEfwmO,GAAYC,QAAU,SAAUp7O,GAC9B,OAAO,IAAIm7O,IAAc1qN,KAAKzwB,IAEhCm7O,GAAYj7O,UAAY,CACtBuwB,KAAM,SAAU3rB,GACd,IAAIu2O,EAAMv2O,EAAK+qB,MAAOyrN,EAAMx2O,EAAK2rC,QACjC3rC,EAAOo2O,GAAS15O,KAAKrD,SAAU2G,GAC/BA,EAAK2rC,QAAU,SAAUjoC,EAAGiM,GAC1BjM,EAAIiyO,GAAOz0O,MAAMwC,GACA,qBAANA,IACTA,EAAI,CAAEqnB,MAAO,sBAEXrnB,EAAEqnB,MACJwrN,EAAIj7O,KAAK0E,EAAKg2O,aAAeh2O,EAAK63B,MAAOn0B,EAAEqnB,MAAOpb,GAElD6mO,EAAIl7O,KAAK0E,EAAK+1O,eAAiB/1O,EAAK63B,MAAOn0B,EAAE8pB,SAGjDxtB,EAAK+qB,MAAQ,SAAU29G,EAAI/4H,GACrB4mO,GACFA,EAAIj7O,KAAK0E,EAAKg2O,aAAeh2O,EAAK63B,MAAO6wG,EAAI/4H,IAGjD3P,EAAK1B,KAAOq3O,GAAOv6N,UAAU,CAC3Bxf,GAAIoE,EAAKpE,IAAM,IAAMc,KAAKmT,QAC1BgiE,OAAQ7xE,EAAK6xE,OACb2wB,OAAQxiG,EAAKwiG,SAEfxiG,EAAKiyE,aAAe,mBACpB4jK,GAAIlqN,KAAK3rB,KAIb,IAuCIy2O,GAvCAj8G,GAAW,WACb,OAAO,WACL,IAAIl8H,EAAO,GACP6X,EAAO,GACPugO,EAAU,CACZC,QAAS,SAAUn7O,GACjB,IAAIyzC,EAAO3wC,EAAK9C,GAChB,OAAOyzC,GAAc,MAEvB2nM,QAAS,SAAUp7O,EAAKhD,GACtB2d,EAAKlW,KAAKzE,GACV8C,EAAK9C,GAAOqZ,OAAOrc,IAErBgD,IAAK,SAAUmE,GACb,OAAOwW,EAAKxW,IAEdk3O,WAAY,SAAUr7O,GACpB2a,EAAOA,EAAKlO,QAAO,SAAUkV,GAC3B,OAAOA,IAAM3hB,YAER8C,EAAK9C,IAEd6oE,MAAO,WACLluD,EAAO,GACP7X,EAAO,IAETjC,OAAQ,GASV,OAPAlB,OAAO27O,eAAeJ,EAAS,SAAU,CACvCj+O,IAAK,WACH,OAAO0d,EAAK9Z,QAEd06O,cAAc,EACdC,YAAY,IAEPN,EAlCF,IAuCT,IACED,GAAep+O,EAAW6B,OAAOu8O,aACjC,MAAOjvO,IACPivO,GAAej8G,KAEjB,IAAIy8G,GAAeR,GAEf39O,GAAUm5O,GACViF,GAAY,CACdC,KAAM,CAAE9yG,KAAMA,IACdtrI,KAAM,CACJqvB,QAASojH,GACTW,MAAOA,GACPnzI,MAAOA,GACP2wM,GAAIA,GACJqgC,IAAKA,GACLkK,MAAOA,GACPkD,gBAAiB1gD,GACjBW,WAAYA,GACZgL,KAAMA,GACNwzC,IAAKA,GACLp3O,KAAMk3O,GACNU,YAAaA,GACbT,MAAOA,GACPqB,aAAcA,GACdhC,MAAOA,IAET3vO,IAAK,CACHmpI,WAAYA,GACZyE,OAAQA,GACR0J,SAAUA,GACVyF,WAAYA,GACZqO,SAAUyD,GACVI,aAAcA,GACd29E,WAAYK,GACZ8E,WAAYjvB,GACZQ,iBAAkBA,GAClBN,gBAAiBE,GACjBtoK,UAAWkwK,GACXlkG,MAAOuiB,GAAWviB,OAEpB7pH,KAAM,CACJ+rG,OAAQA,GACR65C,SAAUA,GACVrmG,KAAMqiK,GACN76D,OAAQA,GACRwpD,UAAW+B,GACXiR,UAAWA,GACX30C,OAAQA,GACRomE,WAAY7lE,IAEdtlI,GAAI,CAAEynM,QAASA,IACf1oG,IAAKA,GACLyqB,aAAcA,GACdkY,UAAWA,GACX60C,UAAWA,GACXxK,YAAaA,GACbjjB,eAAgBA,GAChB2M,cAAeA,GACfhB,oBAAqBA,GACrB1H,iBAAkBI,GAClBqE,UAAWA,GACX0vC,OAAQA,GACRuB,aAAcA,GACdF,cAAewD,GACfr4O,IAAKu6J,GAAWv6J,IAChB26J,aAAcA,GAAaA,aAC3BqC,cAAelB,GAAakB,cAC5BC,aAAcnB,GAAamB,aAC3BvuJ,KAAMtP,GAAMsP,KACZ4Y,QAASloB,GAAMkoB,QACf3T,GAAIvU,GAAMuU,GACV2G,QAASlb,GAAMkb,QACf6lD,QAAS/gE,GAAM+gE,QACf7xD,KAAMlP,GAAMkP,KACZlN,IAAKhC,GAAMgC,IACXomB,KAAMpoB,GAAMooB,KACZ8lB,QAASluC,GAAMkuC,QACfvrC,OAAQ3C,GAAM2C,OACd4N,OAAQvQ,GAAMuQ,OACdywD,KAAMhhE,GAAMghE,KACZwhF,SAAUxiJ,GAAMwiJ,SAChBviJ,QAASD,GAAMC,QACf4iJ,QAAS7iJ,GAAM6iJ,QACfC,gBAAiB9iJ,GAAM8iJ,gBACvBx4F,QAAS2nF,GAAItoF,MACbo+K,SAAU91F,GAAI5jE,OACdhkB,KAAM4nF,GAAIlkH,GACV+5M,QAAS71F,GAAI7iE,MACbkvK,MAAOrsG,GAAIz1H,KAEb1c,GAAUE,GAAM2C,OAAO7C,GAASo+O,IAChC,IAAIK,GAAUz+O,GAEV0+O,GAAwB,SAAU1+O,GAElC,IACEwlE,EAAOC,QAAUzlE,EACjB,MAAO2B,MAITg9O,GAAuB,SAAU3+O,GACnCoB,OAAOpB,QAAUA,EACjBoB,OAAOw9O,QAAU5+O,GAEnB2+O,GAAqBF,IACrBC,GAAsBD,KA1y1B1B,CA4y1BEr9O,SA7y1BF,K,0CCDA,YACsB,WAClB,aAEA,IAAIrB,EAASC,QAAQC,KAAKC,MAAMC,QAAQ,yBAEpCC,EAAWJ,QAAQC,KAAKC,MAAMC,QAAQ,sBAEtC0+O,EAAS,SAAUv+O,EAAQyhB,GAC7B,IACI+8N,EADAtyO,EAAMlM,EAAOkM,IAEb6zD,EAAS//D,EAAO6L,UAAU45C,oBAC1Bsa,EAAO98D,SACTu7O,EAAStyO,EAAI6tC,UAAUgmB,EAAO,GAAI,OAClCjgE,EAASgP,KAAKixD,GAAQ,SAAU12C,GACzBnd,EAAIyL,UAAU0R,EAAMhlB,WAAY,UAAYod,EAAM,KAAMvV,EAAIo1C,YAC/Dp1C,EAAIC,UAAUkd,EAAO,MAAOm1N,IAAW/8N,EAAMA,EAAM,SAGvDzhB,EAAOmV,gBAGP2zG,EAAY,CAAEy1H,OAAQA,GAEtBlwO,EAAW,SAAUrO,GACvBA,EAAOsO,WAAW,mBAAmB,WACnCw6G,EAAUy1H,OAAOv+O,EAAQ,UAE3BA,EAAOsO,WAAW,mBAAmB,WACnCw6G,EAAUy1H,OAAOv+O,EAAQ,WAGzB0O,EAAW,CAAEL,SAAUA,GAEvB2D,EAAmB,SAAUyP,GAC/B,IAAIjY,EAAW,GAIf,OAHA1J,EAASgP,KAAK,0BAA0BuS,MAAM,MAAM,SAAUja,GAC5DoC,EAAS3C,KAAKO,EAAO,QAAUqa,EAAM,QAEhCjY,EAASlC,KAAK,MAEnBmJ,EAAa,SAAUzQ,GACzBA,EAAO0Q,UAAU,MAAO,CACtB3H,MAAO,gBACP4H,IAAK,kBACLoxC,cAAe/vC,EAAiB,SAElChS,EAAO0Q,UAAU,MAAO,CACtB3H,MAAO,gBACP4H,IAAK,kBACLoxC,cAAe/vC,EAAiB,UAGhClB,EAAU,CAAEzC,SAAUoC,GAM1B,SAASM,KAJTtR,EAAO0H,IAAI,kBAAkB,SAAUnH,GACrC0O,EAASL,SAASrO,GAClB8Q,EAAQzC,SAASrO,OAxDF,IADrB,I,qBCMA,EAAQ,S,oBCNR,YACgB,SAAUf,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,IAIPC,EAASC,QAAQC,KAAKC,MAAMC,QAAQ,yBAEpCC,EAAWJ,QAAQC,KAAKC,MAAMC,QAAQ,6BAEtCkB,EAAWrB,QAAQC,KAAKC,MAAMC,QAAQ,sBAEtC4+O,EAAmB,SAAUz+O,GAC/B,OAAOA,EAAO2hC,KAAK,iBAEjB+8M,EAAiB,SAAU1+O,GAC7B,OAAOA,EAAO2hC,KAAK,eAEjBg9M,EAAkB,SAAU3+O,GAC9B,OAAOA,EAAO2hC,KAAK,gBAGjB75B,EAAQ,SAAU82O,EAAYC,GAChC,IAAIC,EAAY,CACdjlO,EAAG,IACH6I,EAAG,KAEDq8N,EAAUH,GAAcC,EACxBG,EAAa,iBAAiB34O,KAAK,GAAK04O,GAC5C,OAAQC,EAAW,GAAKF,EAAUE,EAAW,IAAM,GAAKxtO,SAASutO,EAAS,KAGxEE,EAAwB,SAAUj/O,GACpC,OAAOA,EAAOW,SAAS,8BAA8B,IAEnDu+O,EAAoB,SAAUl/O,GAChC,IAAIyR,EAASzR,EAAOW,SAAS,kBAAmB,8CAKhD,OAJA8Q,EAASA,EAAO5P,QAAQ,YAAa5C,EAAW4E,SAASq8C,SAASgyL,UAClEzgO,EAASA,EAAO5P,QAAQ,aAAc5C,EAAW4E,SAASq8C,SAASsM,QACnE/6C,EAASA,EAAO5P,QAAQ,YAAa5C,EAAW4E,SAASq8C,SAASw9F,MAClEjsI,EAASA,EAAO5P,QAAQ,UAAW7B,EAAOwC,IACnCiP,GAEL0tO,EAAyB,SAAUn/O,GACrC,OAAOA,EAAOW,SAAS,+BAA+B,IAEpDy+O,EAAsB,SAAUp/O,GAClC,OAAO8H,EAAM9H,EAAOC,SAASo/O,kBAAmB,QAE9CC,EAAuB,SAAUt/O,GACnC,OAAO8H,EAAM9H,EAAOC,SAASs/O,mBAAoB,QAG/CziM,EAAU,SAAU98C,EAAQiJ,GAC9B,IAAI44N,EAAsB7hO,EAAOC,SAAS4zD,kBAE1C,OADA5qD,EAAOlI,EAASmO,KAAqB,qBAATjG,EAAuBjJ,EAAOoU,UAAUjP,UAAY8D,GAChE,KAATA,GAAe,IAAIypC,OAAO,KAAOmvL,EAAsB,0CAA+CA,EAAsB,UAAW,KAAK19N,KAAK8E,IAEtJu2O,EAAW,SAAUx/O,GACvB,IAAI0yI,EAAOlhI,SAAS1R,EAASy9O,QAAQ2B,EAAkBl/O,GAAU,QAAS,KAAO,EACjF,SAAI,IAAI4R,MAAOC,UAAY6gI,EAAO4sG,EAAqBt/O,MACrDy/O,EAAYz/O,GAAQ,IACb,IAIPy/O,EAAc,SAAUz/O,EAAQ2hC,GAClC,IAAIlwB,EAASytO,EAAkBl/O,GAC/BF,EAAS29O,WAAWhsO,EAAS,SAC7B3R,EAAS29O,WAAWhsO,EAAS,SAChB,IAATkwB,GACFg9M,EAAgB3+O,IAGhB0/O,EAAa,SAAU1/O,GACzB,IAAIyR,EAASytO,EAAkBl/O,IAC1B88C,EAAQ98C,IAAWA,EAAOg0E,YAC7Bl0E,EAAS09O,QAAQ/rO,EAAS,QAASzR,EAAOktB,WAAW,CACnDvY,OAAQ,MACRu1M,WAAW,KAEbpqN,EAAS09O,QAAQ/rO,EAAS,QAAQ,IAAIG,MAAOC,UAAU5P,YACvDy8O,EAAe1+O,KAGf2/O,EAAe,SAAU3/O,GAC3B,IAAIyR,EAASytO,EAAkBl/O,GAC3Bw/O,EAASx/O,KACXA,EAAOy8C,WAAW38C,EAASy9O,QAAQ9rO,EAAS,SAAU,CAAEkD,OAAQ,QAChE8pO,EAAiBz+O,KAGjB4/O,EAAkB,SAAU5/O,EAAQ6/O,GACtC,IAAIC,EAAWV,EAAoBp/O,GAC9B6/O,EAAQxgP,QACXqpE,aAAY,WACL1oE,EAAO0/B,SACVggN,EAAW1/O,KAEZ8/O,GACHD,EAAQvgP,KAAI,KAGZygP,EAAmB,SAAU//O,GAC/BA,EAAOgM,YAAYC,UAAS,WAC1B0zO,EAAa3/O,GACby/O,EAAYz/O,MAEdA,EAAOkV,SAGT,SAASyD,EAAMC,GAEb,IADA,IAAIC,EAAc,GACTC,EAAK,EAAGA,EAAK9V,UAAUC,OAAQ6V,IACtCD,EAAYC,EAAK,GAAK9V,UAAU8V,GAElC,OAAO,WAEL,IADA,IAAIC,EAAW,GACND,EAAK,EAAGA,EAAK9V,UAAUC,OAAQ6V,IACtCC,EAASD,GAAM9V,UAAU8V,GAE3B,IAAI5R,EAAM2R,EAAYG,OAAOD,GAC7B,OAAOH,EAAG3R,MAAM,KAAMC,IAI1B,IAAI7H,EAAM,SAAUW,GAClB,MAAO,CACLw/O,SAAU7mO,EAAM6mO,EAAUx/O,GAC1B0/O,WAAY/mO,EAAM+mO,EAAY1/O,GAC9B2/O,aAAchnO,EAAMgnO,EAAc3/O,GAClCy/O,YAAa9mO,EAAM8mO,EAAaz/O,GAChC88C,QAASnkC,EAAMmkC,EAAS98C,KAIxBkR,EAAWxR,QAAQC,KAAKC,MAAMC,QAAQ,yBAE1CqR,EAAS8uO,qBAAuB,WAC9B,IAAI9lO,EASJ,OARAnZ,EAAS+N,KAAKoC,EAAS7R,OAAO,SAAUW,GAClCA,EAAOyD,QAAQw8O,UACjBjgP,EAAOyD,QAAQw8O,SAASP,cAErBxlO,GAAOla,EAAOg0E,WAAairK,EAAsBj/O,KACpDka,EAAMla,EAAOoT,UAAU,wEAGpB8G,GAET,IAAIvL,EAAQ,SAAU3O,GACpBf,EAAW6B,OAAOo/O,eAAiBhvO,EAAS8uO,sBAG1Cl7M,EAAa,SAAU9kC,EAAQ6/O,GACjC,OAAO,SAAUzxO,GACf,IAAI0F,EAAO1F,EAAE2F,QACbD,EAAKE,UAAUwrO,EAASx/O,IACxBA,EAAO4O,GAAG,uCAAuC,WAC/CkF,EAAKE,UAAUwrO,EAASx/O,OAE1B4/O,EAAgB5/O,EAAQ6/O,KAGxBxxO,EAAW,SAAUrO,EAAQ6/O,GAC/B7/O,EAAO0Q,UAAU,eAAgB,CAC/B3H,MAAO,qBACP0P,QAAS,WACPsnO,EAAiB//O,IAEnBuU,aAAcuwB,EAAW9kC,EAAQ6/O,KAEnC7/O,EAAO4Q,YAAY,eAAgB,CACjCnL,KAAM,qBACNgT,QAAS,WACPsnO,EAAiB//O,IAEnBuU,aAAcuwB,EAAW9kC,EAAQ6/O,GACjCrrO,QAAS,UAeb,SAASzD,KAXTtR,EAAO0H,IAAI,YAAY,SAAUnH,GAC/B,IAAI6/O,EAAU3gP,GAAK,GAQnB,OAPAyP,IACAN,EAASrO,EAAQ6/O,GACjB7/O,EAAO4O,GAAG,QAAQ,WACZuwO,EAAuBn/O,IAAWA,EAAOkM,IAAI4wC,QAAQ98C,EAAOoU,YAC9DurO,EAAa3/O,MAGVX,EAAIW,OA9MF,CAqNbc,SAtNF,I,oBCAA,YACU,WACN,aAEA,IAAIrB,EAASC,QAAQC,KAAKC,MAAMC,QAAQ,yBAEpCwO,EAAW,SAAUrO,GACvBA,EAAOsO,WAAW,wBAAwB,WACxCtO,EAAOoX,YAAY,oBAAoB,EAAO,cAG9C1I,EAAW,CAAEL,SAAUA,GAEvBoC,EAAa,SAAUzQ,GACzBA,EAAO0Q,UAAU,KAAM,CACrBG,KAAM,KACNyD,QAAS,kBACT3D,IAAK,yBAEP3Q,EAAO4Q,YAAY,KAAM,CACvBC,KAAM,KACNpL,KAAM,kBACNkL,IAAK,uBACL6D,QAAS,YAGT1D,EAAU,CAAEzC,SAAUoC,GAM1B,SAASM,KAJTtR,EAAO0H,IAAI,MAAM,SAAUnH,GACzB0O,EAASL,SAASrO,GAClB8Q,EAAQzC,SAASrO,OA7Bd,IADT,I,oBCAA,YACmB,SAAUf,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,IAIPC,EAASC,QAAQC,KAAKC,MAAMC,QAAQ,yBAEpCR,EAAM,SAAUwU,GAClB,IAAIssO,EAAY,WACd,OAAOtsO,EAAYxU,OAErB,MAAO,CAAE8gP,UAAWA,IAElBh7N,EAAM,CAAE9lB,IAAKA,GAEb+gP,EAAkB,SAAUpgP,EAAQy/B,GACtC,OAAOz/B,EAAO2hC,KAAK,cAAe,CAAElC,MAAOA,KAEzCg+B,EAAS,CAAE2iL,gBAAiBA,GAE5B1nO,EAAO,aAEP3N,EAAW,SAAU3L,GACvB,OAAO,WACL,OAAOA,IAGP+Z,EAAQpO,GAAS,GACjBqO,EAASrO,GAAS,GAElBsO,EAAO,WACT,OAAOC,GAELA,EAAO,WACT,IAAIC,EAAK,SAAUzX,GACjB,OAAOA,EAAE0X,UAEPtX,EAAO,SAAUuX,GACnB,OAAOA,KAELjX,EAAK,SAAUkX,GACjB,OAAOA,GAELC,EAAK,CACPC,KAAM,SAAUF,EAAGG,GACjB,OAAOH,KAETvF,GAAIgF,EACJW,OAAQX,EACRK,OAAQJ,EACRW,MAAOvX,EACPwX,WAAY9X,EACZ+X,SAAU,SAAUC,GAClB,MAAM,IAAIC,MAAMD,GAAO,oCAEzBE,UAAWrP,EAAS,MACpBsP,eAAgBtP,OAASuP,GACzBC,GAAI/X,EACJgY,QAAStY,EACTN,IAAKyX,EACLvK,KAAM4J,EACN+B,KAAMpB,EACNqB,OAAQvB,EACRwB,OAAQvB,EACRvK,OAAQwK,EACRuB,OAAQrB,EACRsB,QAAStB,EACTuB,QAAS,WACP,MAAO,IAET7Y,SAAU8I,EAAS,WAKrB,OAHIhJ,OAAOgZ,QACThZ,OAAOgZ,OAAOpB,GAETA,EA1CE,GA4CPqB,EAAO,SAAUC,GACnB,IAAIC,EAAanQ,EAASkQ,GACtB/Z,EAAO,WACT,OAAOyY,GAELc,EAAO,SAAUvB,GACnB,OAAOA,EAAE+B,IAEPtB,EAAK,CACPC,KAAM,SAAUF,EAAGG,GACjB,OAAOA,EAAEoB,IAEX9G,GAAI,SAAU5U,GACZ,OAAO0b,IAAM1b,GAEfua,OAAQV,EACRI,OAAQL,EACRY,MAAOmB,EACPlB,WAAYkB,EACZjB,SAAUiB,EACVd,UAAWc,EACXb,eAAgBa,EAChBX,GAAIrZ,EACJsZ,QAAStZ,EACTU,IAAK,SAAUsX,GACb,OAAO8B,EAAK9B,EAAE+B,KAEhBnM,KAAM,SAAUoK,GACdA,EAAE+B,IAEJR,KAAMA,EACNC,OAAQD,EACRE,OAAQF,EACR5L,OAAQ,SAAUqK,GAChB,OAAOA,EAAE+B,GAAKtB,EAAKL,GAErBwB,QAAS,WACP,MAAO,CAACG,IAEVhZ,SAAU,WACR,MAAO,QAAUgZ,EAAI,KAEvBL,OAAQ,SAAU9Y,GAChB,OAAOA,EAAEqS,GAAG8G,IAEdJ,QAAS,SAAU/Y,EAAGqZ,GACpB,OAAOrZ,EAAE8X,KAAKT,GAAO,SAAUiC,GAC7B,OAAOD,EAAUF,EAAGG,QAI1B,OAAOzB,GAELrT,EAAO,SAAUlH,GACnB,OAAiB,OAAVA,QAA4Bkb,IAAVlb,EAAsBka,EAAO0B,EAAK5b,IAEzDic,EAAS,CACXL,KAAMA,EACN3B,KAAMA,EACN/S,KAAMA,GAGJgV,EAAS,SAAU/E,GACrB,GAAU,OAANA,EACF,MAAO,OAET,IAAIlL,SAAWkL,EACf,MAAU,WAANlL,IAAmBtE,MAAM/E,UAAUuZ,cAAchF,IAAMA,EAAEiF,aAAsC,UAAvBjF,EAAEiF,YAAYpU,MACjF,QAEC,WAANiE,IAAmBoQ,OAAOzZ,UAAUuZ,cAAchF,IAAMA,EAAEiF,aAAsC,WAAvBjF,EAAEiF,YAAYpU,MAClF,SAEFiE,GAELqQ,EAAS,SAAUja,GACrB,OAAO,SAAUrC,GACf,OAAOkc,EAAOlc,KAAWqC,IAGzBka,EAAaD,EAAO,YAEpBE,EAAc7U,MAAM/E,UAAUwE,MAC9B5E,EAAM,SAAUoa,EAAI9C,GAGtB,IAFA,IAAIzS,EAAMuV,EAAG/Y,OACTgZ,EAAI,IAAIlV,MAAMN,GACTjD,EAAI,EAAGA,EAAIiD,EAAKjD,IAAK,CAC5B,IAAI+S,EAAIyF,EAAGxY,GACXyY,EAAEzY,GAAK0V,EAAE3C,EAAG/S,GAEd,OAAOyY,GAELnN,EAAO,SAAUkN,EAAI9C,GACvB,IAAK,IAAI1V,EAAI,EAAGiD,EAAMuV,EAAG/Y,OAAQO,EAAIiD,EAAKjD,IAAK,CAC7C,IAAI+S,EAAIyF,EAAGxY,GACX0V,EAAE3C,EAAG/S,KAOLujD,GAJSprC,EAAW5U,MAAMT,OAAQS,MAAMT,KAI7B,SAAU2C,EAAMw1B,GAC7B,IAAI7V,EAAM6V,GAASx/B,EAAW4E,SAC1BkT,EAAM6R,EAAIuF,cAAc,OAE5B,GADApX,EAAI5R,UAAY8D,GACX8N,EAAIitC,iBAAmBjtC,EAAIkB,WAAWhV,OAAS,EAElD,MADAhE,EAAW+nD,QAAQr1B,MAAM,wCAAyC1oB,GAC5D,IAAIkR,MAAM,qCAElB,OAAO8sC,EAAQlwC,EAAIkB,WAAW,MAE5BivC,EAAU,SAAU3/C,EAAKk3B,GAC3B,IAAI7V,EAAM6V,GAASx/B,EAAW4E,SAC1B+H,EAAOgd,EAAIuF,cAAc5mB,GAC7B,OAAO0/C,EAAQr7C,IAEbu7C,EAAW,SAAU1hD,EAAMg5B,GAC7B,IAAI7V,EAAM6V,GAASx/B,EAAW4E,SAC1B+H,EAAOgd,EAAIlZ,eAAejK,GAC9B,OAAOwhD,EAAQr7C,IAEbq7C,EAAU,SAAUr7C,GACtB,GAAa,OAATA,QAA0B0O,IAAT1O,EACnB,MAAM,IAAIuO,MAAM,oCAElB,MAAO,CAAEjO,IAAKnB,EAASa,KAErBw7C,EAAY,SAAUC,EAAQ9wC,EAAGC,GACnC,IAAIoS,EAAMy+B,EAAOn7C,MACjB,OAAOmP,EAAO/U,KAAKsiB,EAAI0+B,iBAAiB/wC,EAAGC,IAAI5U,IAAIqlD,IAEjDM,EAAU,CACZR,SAAUA,EACVG,QAASA,EACTC,SAAUA,EACVF,QAASA,EACTG,UAAWA,GAUTutC,GAPY11F,EAAWupD,KAAKiF,eACZxuD,EAAWupD,KAAKkF,mBACtBzuD,EAAWupD,KAAKmF,aACf1uD,EAAWupD,KAAKoF,cACX3uD,EAAWupD,KAAKqF,mBACZ5uD,EAAWupD,KAAKsF,uBAC1B7uD,EAAWupD,KAAKuF,aACnB9uD,EAAWupD,KAAKyF,WAQvBxsD,GAPyBxC,EAAWupD,KAAK0F,4BACtBjvD,EAAWupD,KAAK2F,sBAC1BlvD,EAAWupD,KAAK4F,YACdnvD,EAAWupD,KAAK6F,cAEW,qBAAtBpvD,EAAW6B,OAAyB7B,EAAW6B,OAASw9B,SAAS,eAATA,GAEjE,SAAUv6B,GACnB,OAAOA,EAAQmI,MAAMqa,WAEnBnnB,EAAQ,SAAU2E,GACpB,OAAOA,EAAQmI,MAAMymF,WAEnBnjC,EAAW,SAAUnkD,GACvB,OAAO,SAAUtH,GACf,OAAOtC,EAAKsC,KAAasH,IAGzB6b,EAASsoC,EAASmlC,GAElB0rJ,EAAU,CACZ,IAAQ,OACR,IAAQ,OAENC,EAAkB,SAAUD,EAAS5gP,GACvC,IAAI2C,EAAK0/D,EAAS,GAClB,IAAK1/D,KAAOi+O,EACVv+K,GAAU1/D,EAEZ,OAAO,IAAIswC,OAAO,IAAMovB,EAAS,IAAKriE,EAAS,IAAM,KAEnD8gP,EAAoB,SAAUF,GAChC,IAAIj+O,EAAKoH,EAAW,GACpB,IAAKpH,KAAOi+O,EACN72O,IACFA,GAAY,KAEdA,GAAY,YAAc62O,EAAQj+O,GAEpC,OAAOoH,GAELg3O,EAAO,CACTH,QAASA,EACTv+K,OAAQw+K,EAAgBD,GACxBI,aAAcH,EAAgBD,GAAS,GACvC72O,SAAU+2O,EAAkBF,GAC5BC,gBAAiBA,EACjBC,kBAAmBA,GAGjBG,EAAmB,SAAUthP,GAC/B,MAAO,uCAAyCohP,EAAKH,QAAQjhP,GAAS,KAAOA,EAAQ,WAEnFuhP,EAAO,CAAED,iBAAkBA,GAE3Bld,EAAU,SAAU9pN,GACtB,IAAIknO,EAAUxhP,EAAMsa,GACpB,OAAOwN,EAAOxN,SAAkBY,IAAZsmO,GAAyBJ,EAAK1+K,OAAO39D,KAAKy8O,IAE5DC,EAAoB,SAAUpiN,EAAOhU,GACvC,IAAI2J,EAAS,GACTloB,EAAMuyB,EAAMvyB,MACZ0H,EAAWhS,EAAIsK,EAAI+L,WAAYsvC,EAAQN,SAO3C,OANAn4C,EAAK8E,GAAU,SAAU2C,GACnBkU,EAAUlU,KACZ6d,EAASA,EAAOpb,OAAO,CAACzC,KAE1B6d,EAASA,EAAOpb,OAAO6nO,EAAkBtqO,EAAGkU,OAEvC2J,GAEL0sN,EAAgB,SAAU74O,EAAKm/I,GACjC,MAAOn/I,EAAI5D,WAAY,CACrB,GAAI4D,EAAI5D,aAAe+iJ,EACrB,OAAOn/I,EAETA,EAAMA,EAAI5D,aAGV08O,EAAmB,SAAUt7O,GAC/B,OAAOA,EAAK5D,QAAQ2+O,EAAKC,aAAcE,EAAKD,mBAE1C1xJ,EAAQ,CACVw0I,QAASA,EACTqd,kBAAmBA,EACnBC,cAAeA,EACfC,iBAAkBA,GAGhB/9M,EAAO,SAAUhjC,EAAQonJ,GAC3B,IAAIx7I,EAAMmL,EACNiqO,EAAWhyJ,EAAM6xJ,kBAAkBt5L,EAAQN,QAAQmgG,GAAUp4D,EAAMw0I,SACvE10N,EAAKkyO,GAAU,SAAUtnO,GACvB,IAAIunO,EAAYjyJ,EAAM+xJ,iBAAiB/gP,EAAOkM,IAAI5K,OAAOlC,EAAMsa,KAC/D3C,EAAM/W,EAAOkM,IAAIiE,OAAO,MAAO,KAAM8wO,GACrC,MAAOr1O,EAAOmL,EAAI2rC,UAChB1iD,EAAOkM,IAAI2c,YAAYjd,EAAM8N,EAAExN,OAEjClM,EAAOkM,IAAImJ,OAAOqE,EAAExN,WAGpB+2B,EAAO,SAAUjjC,EAAQ2N,GAC3B,IAAIqzO,EAAWhhP,EAAOkM,IAAIE,OAAOo0O,EAAKh3O,SAAUmE,GAChDmB,EAAKkyO,GAAU,SAAUp1O,GACvB5L,EAAOkM,IAAImJ,OAAOzJ,EAAM,OAGxB6C,EAAS,SAAUzO,GACrB,IAAI2N,EAAO3N,EAAOoU,UACdyvC,EAAW7jD,EAAO6L,UAAUgqD,cAC5BxxD,EAAa2qF,EAAM8xJ,cAAc9gP,EAAO6L,UAAUC,UAAW6B,GACjEtJ,OAA4BiW,IAAfjW,EAA2BA,EAAasJ,EACrDs1B,EAAKjjC,EAAQqE,GACb2+B,EAAKhjC,EAAQqE,GACbrE,EAAO6L,UAAUiqD,eAAejS,IAE9Bq9L,EAAc,CAChBl+M,KAAMA,EACNC,KAAMA,EACNx0B,OAAQA,GAGN0yO,EAAoB,SAAUnhP,EAAQ6T,GACxC,IAEIgwC,EAFAl2C,EAAO3N,EAAOoU,UACdvI,EAAY7L,EAAO6L,UAEvBgI,EAAYvU,KAAKuU,EAAYxU,OAC7Bo+D,EAAO2iL,gBAAgBpgP,EAAQ6T,EAAYxU,OAC3CwkD,EAAWh4C,EAAUgqD,eACK,IAAtBhiD,EAAYxU,MACd6hP,EAAYl+M,KAAKhjC,EAAQ2N,GAEzBuzO,EAAYj+M,KAAKjjC,EAAQ2N,GAE3B9B,EAAUiqD,eAAejS,IAEvBhU,EAAU,CAAEsxM,kBAAmBA,GAE/B9yO,EAAW,SAAUrO,EAAQ6T,GAC/B7T,EAAOsO,WAAW,kBAAkB,WAClCuhC,EAAQsxM,kBAAkBnhP,EAAQ6T,OAGlCnF,EAAW,CAAEL,SAAUA,GAEvBvO,EAAWJ,QAAQC,KAAKC,MAAMC,QAAQ,sBAEtC8O,EAAQ,SAAU3O,EAAQ6T,GAC5B,IAAIutO,EAAkBthP,EAASgzI,UAAS,WACtCouG,EAAYzyO,OAAOzO,KAClB,MACuC,IAAtCA,EAAOC,SAAS4zD,mBAClB7zD,EAAO4O,GAAG,WAAW,SAAUR,IACH,IAAtByF,EAAYxU,QACA,KAAd+O,EAAEuc,QAAiBu2N,EAAYzyO,OAAOzO,GAAUohP,SAKpD91N,GAAW,CAAE3c,MAAOA,GAEpBoiF,GAAqB,SAAU/wF,GACjC,OAAOA,EAAOW,SAAS,6BAA6B,IAElDE,GAAW,CAAEkwF,mBAAoBA,IAEjCr1B,GAAU,SAAU17D,EAAQ6T,GAC9B7T,EAAO4O,GAAG,QAAQ,WAChB,IAAIyyO,GAAoBxgP,GAASkwF,mBAAmB/wF,GACpD6T,EAAYvU,IAAI+hP,GAChBxxM,EAAQsxM,kBAAkBnhP,EAAQ6T,OAGlC49E,GAAW,CAAE9iF,MAAO+sD,IAEpBslB,GAAoB,SAAUhhF,GAChC,OAAO,SAAUoO,GACf,IAAI0F,EAAO1F,EAAE2F,QACb/T,EAAO4O,GAAG,eAAe,SAAUR,GACjC0F,EAAKioD,OAAO3tD,EAAEqxB,YAIhBhvB,GAAa,SAAUzQ,GACzBA,EAAO0Q,UAAU,cAAe,CAC9BqrD,QAAQ,EACRhzD,MAAO,4BACP4H,IAAK,iBACL4D,aAAcysE,GAAkBhhF,KAElCA,EAAO4Q,YAAY,cAAe,CAChCnL,KAAM,4BACNkL,IAAK,iBACL4D,aAAcysE,GAAkBhhF,GAChCizE,YAAY,EACZz+D,QAAS,OACTwtC,kBAAkB,KAYtB,SAASjxC,MARTtR,EAAO0H,IAAI,eAAe,SAAUnH,GAClC,IAAI6T,EAAc3U,GAAK,GAKvB,OAJAwP,EAASL,SAASrO,EAAQ6T,GAC1BpD,GAAWzQ,GACXsrB,GAAS3c,MAAM3O,EAAQ6T,GACvB49E,GAAS9iF,MAAM3O,EAAQ6T,GAChBsR,EAAI9lB,IAAIwU,OA/bH,CAschB/S,SAvcF,I,oBCAA,YACgB,SAAU7B,GACtB,aAEA,IAAIQ,EAASC,QAAQC,KAAKC,MAAMC,QAAQ,yBAEpCC,EAAWJ,QAAQC,KAAKC,MAAMC,QAAQ,wBAEtCkB,EAAWrB,QAAQC,KAAKC,MAAMC,QAAQ,yBAEtCqR,EAAWxR,QAAQC,KAAKC,MAAMC,QAAQ,eAEtCof,EAAWvf,QAAQC,KAAKC,MAAMC,QAAQ,sBAEtCy/B,EAAW5/B,QAAQC,KAAKC,MAAMC,QAAQ,sBAEtC0/B,EAAW7/B,QAAQC,KAAKC,MAAMC,QAAQ,mBAEtCyhP,EAAsB,SAAUthP,GAClC,OAAOA,EAAOW,SAAS,oBAAqB,gBAE1C4gP,EAAc,SAAUvhP,GAC1B,OAAOA,EAAOW,SAAS,YAAa2gP,EAAoBthP,KAEtDa,EAAW,CAAE0gP,YAAaA,GAE1B/gP,EAAMV,EAASU,IACfghP,EAAY,SAAUpzO,GACpBA,EAAEuc,UAAY4U,EAASg8B,KAAQntD,EAAEgoC,SAAYhoC,EAAEoyE,QAAWpyE,EAAEqyE,SAC9DryE,EAAEm0B,kBAGF5zB,EAAQ,SAAU3O,GACpB,SAASyhP,EAAWrzO,GAClB,IAAImI,EAAGjE,EAAI/S,EAAGiE,EACd,KAAI4K,EAAEuc,UAAY4U,EAASg8B,KAAOntD,EAAEgoC,SAAWhoC,EAAEoyE,QAAUpyE,EAAEqyE,SAAWryE,EAAEy1D,wBAgC1EtkE,EAAI+/B,EAASmjH,QAAQ5hJ,EAAS0gP,YAAYvhP,IACzB,IAAbT,EAAE0D,SACJ1D,EAAE,GAAKA,EAAE,GACTA,EAAE,GAAK,SAIL+S,EAFAlE,EAAEqtD,SACS,UAATl8D,EAAE,GACCgQ,GAAM,GAEN/O,EAAInB,IAAIE,EAAE,IAGJ,UAATA,EAAE,GACCgQ,EAAK,GAEL/O,EAAInB,IAAIE,EAAE,IAGf+S,GAAI,CACN,IAAIwzL,EAAc/kM,EAAS1B,IAAIiT,EAAG9P,IAAM8P,EAAGlL,MACvCkL,EAAG9P,IAAMsjM,EACXA,EAAY5wL,QAEZ+J,EAASyQ,YAAW,WACbxe,EAAS+8D,QACZhvE,EAAW6B,OAAOoU,QAEpB5C,EAAG4C,UACF,IAEL9G,EAAEm0B,iBA3DJ,SAAShzB,EAAK9B,GAEZ,SAASi0O,EAAmBtzO,GAC1B,MAAsB,SAAfA,EAAE9J,UAAkC,WAAX8J,EAAE3M,MAAyC,SAApB2M,EAAEvE,MAAMu8M,SAA6C,WAAvBh4M,EAAEvE,MAAM+tC,YAA2B8pM,EAAmBtzO,EAAE/J,YAE/I,SAASs9O,EAAUrvO,GACjB,MAAO,wBAAwBnO,KAAKmO,EAAGjB,UAAYtQ,EAAS1B,IAAI+O,EAAE5L,MAAwB,IAAjB8P,EAAGsrI,UAAmB8jG,EAAmBpvO,GAQpH,GAbAA,EAAK9R,EAAI4L,OAAO,0CAOhBkzB,EAASxwB,KAAKwD,GAAI,SAAUlE,EAAG5K,GAC7B,GAAI4K,EAAE5L,KAAOxC,EAAOwC,GAElB,OADA+T,EAAI/S,GACG,KAGPiK,EAAY,GACd,IAAKjK,EAAI+S,EAAI,EAAG/S,EAAI8O,EAAGrP,OAAQO,IAC7B,GAAIm+O,EAAUrvO,EAAG9O,IACf,OAAO8O,EAAG9O,QAId,IAAKA,EAAI+S,EAAI,EAAG/S,GAAK,EAAGA,IACtB,GAAIm+O,EAAUrvO,EAAG9O,IACf,OAAO8O,EAAG9O,GAIhB,OAAO,MAmCXxD,EAAO4O,GAAG,QAAQ,WACZ5O,EAAOkQ,QACT1P,EAAI2L,UAAUnM,EAAOoU,UAAW,WAAY,MAE9CpU,EAAO4O,GAAG,QAAS4yO,GACftwO,EAAS89D,MACXhvE,EAAO4O,GAAG,mBAAoB6yO,GAE9BzhP,EAAO4O,GAAG,UAAW6yO,OAIvBn2N,EAAW,CAAE3c,MAAOA,GAKxB,SAASoC,KAHTtR,EAAO0H,IAAI,YAAY,SAAUnH,GAC/BsrB,EAAS3c,MAAM3O,OAlHN,CAyHbc,SA1HF,I,oBCAA,YACiB,WACb,aAEA,IAAIrB,EAASC,QAAQC,KAAKC,MAAMC,QAAQ,yBAEpCC,EAAWJ,QAAQC,KAAKC,MAAMC,QAAQ,0BAEtCkB,EAAWrB,QAAQC,KAAKC,MAAMC,QAAQ,eAEtC+hP,EAAU,CACZC,QAAS,owBACTC,UAAW,gBACXC,UAAW,aACXC,OAAQ,wBACRpzF,QAAS,4GACT9zD,GAAI,MACJmnJ,GAAI,MACJC,QAAS,sBACT3/O,OAAQ,yaACRoS,OAAQ,iCACRwtO,SAAU,4BACVC,aAAc,qBACdx5O,YAAa,wQAEXy5O,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,IAAI1wM,OAAOkvM,EAAQC,SACnB,IAAInvM,OAAOkvM,EAAQE,WACnB,IAAIpvM,OAAOkvM,EAAQG,WACnB,IAAIrvM,OAAOkvM,EAAQI,QACnB,IAAItvM,OAAOkvM,EAAQhzF,SACnB,IAAIl8G,OAAOkvM,EAAQ9mJ,IACnB,IAAIpoD,OAAOkvM,EAAQK,IACnB,IAAIvvM,OAAOkvM,EAAQM,SACnB,IAAIxvM,OAAOkvM,EAAQr/O,QACnB,IAAImwC,OAAOkvM,EAAQjtO,QACnB,IAAI+9B,OAAOkvM,EAAQO,UACnB,IAAIzvM,OAAOkvM,EAAQQ,cACnB,IAAI1vM,OAAO,MAET2wM,EAAe,GACfC,EAAc,IAAI5wM,OAAO,IAAMkvM,EAAQh5O,YAAc,KACrD26O,EAAa,QACbC,EAAc,CAChBnB,iBAAkBA,EAClBe,KAAMA,EACNC,aAAcA,EACdC,YAAaA,EACbC,WAAYA,GAGV7qO,EAAO,aAEP3N,EAAW,SAAU3L,GACvB,OAAO,WACL,OAAOA,IAGP+Z,EAAQpO,GAAS,GACjBqO,EAASrO,GAAS,GAElBsO,EAAO,WACT,OAAOC,GAELA,EAAO,WACT,IAAIC,EAAK,SAAUzX,GACjB,OAAOA,EAAE0X,UAEPtX,EAAO,SAAUuX,GACnB,OAAOA,KAELjX,EAAK,SAAUkX,GACjB,OAAOA,GAELC,EAAK,CACPC,KAAM,SAAUF,EAAGG,GACjB,OAAOH,KAETvF,GAAIgF,EACJW,OAAQX,EACRK,OAAQJ,EACRW,MAAOvX,EACPwX,WAAY9X,EACZ+X,SAAU,SAAUC,GAClB,MAAM,IAAIC,MAAMD,GAAO,oCAEzBE,UAAWrP,EAAS,MACpBsP,eAAgBtP,OAASuP,GACzBC,GAAI/X,EACJgY,QAAStY,EACTN,IAAKyX,EACLvK,KAAM4J,EACN+B,KAAMpB,EACNqB,OAAQvB,EACRwB,OAAQvB,EACRvK,OAAQwK,EACRuB,OAAQrB,EACRsB,QAAStB,EACTuB,QAAS,WACP,MAAO,IAET7Y,SAAU8I,EAAS,WAKrB,OAHIhJ,OAAOgZ,QACThZ,OAAOgZ,OAAOpB,GAETA,EA1CE,GA6CP2B,EAAS,SAAU/E,GACrB,GAAU,OAANA,EACF,MAAO,OAET,IAAIlL,SAAWkL,EACf,MAAU,WAANlL,IAAmBtE,MAAM/E,UAAUuZ,cAAchF,IAAMA,EAAEiF,aAAsC,UAAvBjF,EAAEiF,YAAYpU,MACjF,QAEC,WAANiE,IAAmBoQ,OAAOzZ,UAAUuZ,cAAchF,IAAMA,EAAEiF,aAAsC,WAAvBjF,EAAEiF,YAAYpU,MAClF,SAEFiE,GAELqQ,EAAS,SAAUja,GACrB,OAAO,SAAUrC,GACf,OAAOkc,EAAOlc,KAAWqC,IAGzBka,EAAaD,EAAO,YAEpBE,EAAc7U,MAAM/E,UAAUwE,MAC9B5E,EAAM,SAAUoa,EAAI9C,GAGtB,IAFA,IAAIzS,EAAMuV,EAAG/Y,OACTgZ,EAAI,IAAIlV,MAAMN,GACTjD,EAAI,EAAGA,EAAIiD,EAAKjD,IAAK,CAC5B,IAAI+S,EAAIyF,EAAGxY,GACXyY,EAAEzY,GAAK0V,EAAE3C,EAAG/S,GAEd,OAAOyY,GAMLwnO,GAJO9nO,EAAW5U,MAAMT,OAAQS,MAAMT,KAI7Bk9O,EAAYJ,MACrBD,EAAQK,EAAYnB,iBAAiBc,MACrCvuN,EAAU,SAAU9K,GACtB,IAAI/jB,EAAGzG,EAAKmC,EAAO0hP,EACfO,EAAaD,EAAOxgP,OACxB,IAAK8C,EAAI,EAAGA,EAAI29O,IAAc39O,EAE5B,GADAzG,EAAMmkP,EAAO19O,GACTzG,GAAOA,EAAI6E,KAAK2lB,GAAO,CACzBroB,EAAOsE,EACP,MAGJ,OAAOtE,GAELkiP,EAAU,SAAUvxH,GACtB,IAAI7nD,EAAQ,GACZ,OAAO,SAAUzgD,GACf,GAAIygD,EAAMzgD,GACR,OAAOygD,EAAMzgD,GAEb,IAAIsK,EAASg+F,EAAKtoG,GAElB,OADAygD,EAAMzgD,GAAQsK,EACPA,IAITwvN,EAAW,SAAUn6O,GACvB,IAAIo6O,EAAWF,EAAQ/uN,GACvB,OAAOhzB,EAAI6H,EAAO4X,MAAM,IAAKwiO,IAE3BC,EAAe,CAAEF,SAAUA,GAE3BvrI,EAAKmrI,EAAYnB,iBACjB0B,EAAiB,SAAUniP,EAAK2E,GAClC,IAAIy9O,EAGAC,EAFAxiP,EAAOG,EAAI2E,GACX29O,EAAWtiP,EAAI2E,EAAQ,GAE3B,QAAIA,EAAQ,GAAKA,EAAQ3E,EAAIqB,OAAS,GAAe,IAAVsD,MAGvC9E,IAAS42G,EAAGiqI,SAAW4B,IAAa7rI,EAAGiqI,WAG3C2B,EAAeriP,EAAI2E,EAAQ,IACvB9E,IAAS42G,EAAGiqI,SAAY4B,IAAa7rI,EAAGmqI,WAAa0B,IAAa7rI,EAAGkqI,WAAa2B,IAAa7rI,EAAG6qI,IAAOe,IAAiB5rI,EAAGiqI,WAGjI0B,EAAWpiP,EAAI2E,EAAQ,IAClB9E,IAAS42G,EAAGmqI,WAAa/gP,IAAS42G,EAAGkqI,WAAa2B,IAAa7rI,EAAG6qI,IAAOgB,IAAa7rI,EAAGiqI,SAAW0B,IAAa3rI,EAAGiqI,YAGpH7gP,IAAS42G,EAAGqqI,SAAWjhP,IAAS42G,EAAGiqI,SAAa4B,IAAa7rI,EAAGqqI,SAAWwB,IAAa7rI,EAAGiqI,YAG3F7gP,IAAS42G,EAAGoqI,QAAUhhP,IAAS42G,EAAGkqI,WAAc2B,IAAa7rI,EAAGqqI,SAAWsB,IAAa3rI,EAAGqqI,YAG5FjhP,IAAS42G,EAAGqqI,SAAYwB,IAAa7rI,EAAGoqI,QAAUyB,IAAa7rI,EAAGkqI,WAAc0B,IAAiB5rI,EAAGqqI,WAGpGjhP,IAAS42G,EAAGyqI,QAAUrhP,IAAS42G,EAAG0qI,QAAUiB,IAAa3rI,EAAGyqI,QAAUkB,IAAa3rI,EAAG0qI,QAAUmB,IAAa7rI,EAAGyqI,QAAUoB,IAAa7rI,EAAG0qI,UAG1IthP,IAAS42G,EAAGsqI,IAAMuB,IAAa7rI,EAAGuqI,MAGlCnhP,IAAS42G,EAAGwqI,SAAWphP,IAAS42G,EAAGsqI,IAAMlhP,IAAS42G,EAAGuqI,KAGrDsB,IAAa7rI,EAAGwqI,SAAWqB,IAAa7rI,EAAGsqI,IAAMuB,IAAa7rI,EAAGuqI,KAGjEnhP,IAAS42G,EAAG2qI,UAAYkB,IAAa7rI,EAAG2qI,aAGxCkB,IAAa7rI,EAAG4qI,cAAiBxhP,IAAS42G,EAAGiqI,SAAW7gP,IAAS42G,EAAGqqI,SAAWjhP,IAAS42G,EAAG2qI,UAAYvhP,IAAS42G,EAAG4qI,iBAGnHxhP,IAAS42G,EAAG4qI,cAAiBiB,IAAa7rI,EAAGiqI,SAAW4B,IAAa7rI,EAAGqqI,SAAWwB,IAAa7rI,EAAG2qI,WAGnGvhP,IAAS42G,EAAG6qI,gBAKdiB,EAAe,CAAEJ,eAAgBA,GAEjCK,EAAiBZ,EAAYH,aAC7BgB,EAAeb,EAAYD,WAC3Be,EAAgBd,EAAYF,YAC5BiB,EAAa,SAAU7qK,GACzB,MAAgB,SAATA,GAA4B,UAATA,GAExB8qK,EAAc,SAAUr+O,EAAKI,GAC/B,IAAI/C,EACJ,IAAKA,EAAI+C,EAAO/C,EAAI2C,EAAIlD,SAAUO,EAAG,CACnC,IAAIunB,EAAM5kB,EAAIysF,OAAOpvF,GACrB,GAAI6gP,EAAalgP,KAAK4mB,GACpB,MAGJ,OAAOvnB,GAELihP,EAAa,SAAU/qK,EAAMvzE,EAAKI,GACpC,IAAIm+F,EAAW8/I,EAAYr+O,EAAKI,EAAQ,GACpCm+O,EAAav+O,EAAIgb,UAAU5a,EAAQ,EAAGm+F,GAC1C,MAAgC,QAA5BggJ,EAAW5+N,OAAO,EAAG,GAChB,CACL4zD,KAAMA,EAAOgrK,EACbn+O,MAAOm+F,GAGJ,CACLhrB,KAAMA,EACNnzE,MAAOA,IAGPo+O,EAAa,SAAUx+O,EAAKqpH,GAC9B,IAKIzkG,EACA65N,EACAC,EAPArhP,EAAI,EACJ5B,EAAMkiP,EAAaF,SAASz9O,GAC5BM,EAAM7E,EAAIqB,OACVy2E,EAAO,GACPQ,EAAQ,GAYZ,IARKs1C,IACHA,EAAU,IAERA,EAAQs1H,aACV3+O,EAAMA,EAAIoa,eAEZqkO,EAAqBp1H,EAAQo1H,mBAC7BC,EAAoBr1H,EAAQq1H,kBACrBrhP,EAAIiD,IAAOjD,EAGhB,GAFAunB,EAAM5kB,EAAIysF,OAAOpvF,GACjBk2E,EAAK7yE,KAAKkkB,GACNo5N,EAAaJ,eAAeniP,EAAK4B,GAAI,CAEvC,GADAk2E,EAAOA,EAAKpyE,KAAK88O,GACb1qK,IAASmrK,IAAsBR,EAAalgP,KAAKu1E,MAAWkrK,IAAuBN,EAAcngP,KAAKu1E,IACxG,GAAI6qK,EAAW7qK,GAAO,CACpB,IAAIz8D,EAAMwnO,EAAW/qK,EAAMvzE,EAAK3C,GAChC02E,EAAMrzE,KAAKoW,EAAIy8D,MACfl2E,EAAIyZ,EAAI1W,WAER2zE,EAAMrzE,KAAK6yE,GAGfA,EAAO,GAGX,OAAOQ,GAEL6qK,EAAW,SAAU5+O,EAAKqpH,GAC5B,OAAOm1H,EAAWx+O,EAAItE,QAAQ,UAAW,IAAK2tH,IAE5Cw1H,EAAa,CAAED,SAAUA,GAEzBpjL,EAAU,SAAU/1D,EAAMywC,GAC5B,IAAIwG,EAAgBxG,EAAOsX,mBACvB6M,EAAqBnkB,EAAOokB,wBAC5BorJ,EAAqBxvK,EAAO87B,wBAC5B8sK,EAAc,SAAUr5O,GAC1B,OAAOi3C,EAAcj3C,EAAKtH,WAAak8D,EAAmB50D,EAAKtH,WAAaunN,EAAmBjgN,EAAKtH,WAElGs9D,EAAM,GACNsjL,EAAa,IAAIplP,EAAS8L,EAAMA,GACpC,MAAOA,EAAOs5O,EAAW/7N,OACD,IAAlBvd,EAAK2a,SACPq7C,GAAOh2D,EAAK1G,KACH+/O,EAAYr5O,KACrBg2D,GAAO,KAGX,OAAOA,GAELtB,EAAY,SAAU10D,EAAMywC,GAC9B,OAAOt7C,EAAS4sB,GAAKg0C,EAAQ/1D,EAAMywC,GAAUzwC,EAAK00D,WAEhDuqC,EAAiB,SAAU7qG,GAC7B,OAAOA,EAAO0/B,QAAU,GAAK4gC,EAAUtgE,EAAOoU,UAAWpU,EAAOq8C,SAE9D8oM,EAAW,SAAUnlP,GACvB,OAAOglP,EAAWD,SAASl6I,EAAe7qG,IAASiD,QAEjDmiP,EAAY,CAAED,SAAUA,GAExB9lP,EAAM,SAAUW,GAClB,IAAImlP,EAAW,WACb,OAAOC,EAAUD,SAASnlP,IAE5B,MAAO,CAAEmlP,SAAUA,IAEjBhgO,EAAM,CAAE9lB,IAAKA,GAEb6R,EAAWxR,QAAQC,KAAKC,MAAMC,QAAQ,sBAEtCof,EAAWvf,QAAQC,KAAKC,MAAMC,QAAQ,qBAEtC8O,EAAQ,SAAU3O,GACpB,IAAIqlP,EAAc,SAAUrlP,GAC1B,OAAOif,EAAS7L,UAAU,CACxB,YACAgyO,EAAUD,SAASnlP,MAGnBgqC,EAAS,WACXhqC,EAAOg8L,MAAMjkL,MAAMxI,KAAK,cAAc9J,KAAK4/O,EAAYrlP,KAEzDA,EAAO4O,GAAG,QAAQ,WAChB,IAAIw5B,EAAYpoC,EAAOg8L,MAAMjkL,OAAS/X,EAAOg8L,MAAMjkL,MAAMxI,KAAK,cAAc,GACxE+1O,EAAkBp0O,EAAS4hI,SAAS9oG,EAAQ,KAC5C5B,GACFl3B,EAASma,iBAAiBrrB,GAAQ,WAChCooC,EAAUvlC,OAAO,CACfpB,KAAM,QACN2F,KAAM,YACN3B,KAAM4/O,EAAYrlP,GAClBwH,QAAS,YACTwM,SAAUhU,EAAOC,SAASgU,UACzB,GACHjU,EAAO4O,GAAG,2CAA4C02O,KACrD,OAILC,EAAY,CAAE52O,MAAOA,GAMzB,SAASoC,KAJTtR,EAAO0H,IAAI,aAAa,SAAUnH,GAEhC,OADAulP,EAAU52O,MAAM3O,GACTmlB,EAAI9lB,IAAIW,OAtYL,IADhB,I,oBCAA,YACmB,WACf,aAEA,IAAIP,EAASC,QAAQC,KAAKC,MAAMC,QAAQ,yBAEpC2lP,EAAe,SAAU/7O,EAAQg8O,GAEnC,IADA,IAAIt/O,EAAM,GACDI,EAAQ,EAAGA,EAAQk/O,EAASl/O,IACnCJ,GAAOsD,EAET,OAAOtD,GAELu/O,EAAuB,SAAU1lP,GACnC,QAAOA,EAAOyD,QAAQkiP,aAAc3lP,EAAOyD,QAAQkiP,YAAYxF,aAE7DyF,EAAa,SAAU5lP,EAAQipC,GACjC,IAAIq7H,EAAOohF,EAAqB1lP,GAAU,uCAAyC,SACnFA,EAAOqM,cAAcm5O,EAAalhF,EAAMr7H,IACxCjpC,EAAOkM,IAAIC,UAAUnM,EAAOkM,IAAIE,OAAO,iBAAkB,iBAAkB,MAEzEyjC,EAAU,CAAE+1M,WAAYA,GAExBv3O,EAAW,SAAUrO,GACvBA,EAAOsO,WAAW,kBAAkB,WAClCuhC,EAAQ+1M,WAAW5lP,EAAQ,OAG3B0O,EAAW,CAAEL,SAAUA,GAEvBvO,EAAWJ,QAAQC,KAAKC,MAAMC,QAAQ,mBAEtCgmP,EAAoB,SAAU7lP,GAChC,IAAI4iE,EAAS5iE,EAAOW,SAAS,wBAAyB,GACtD,MAAsB,mBAAXiiE,GACS,IAAXA,EAAkB,EAAI,EAEtBA,GAGP/hE,EAAW,CAAEglP,kBAAmBA,GAEhCl3O,EAAQ,SAAU3O,GACpB,IAAI4iE,EAAS/hE,EAASglP,kBAAkB7lP,GACpC4iE,EAAS,GACX5iE,EAAO4O,GAAG,WAAW,SAAUR,GAC7B,GAAIA,EAAEuc,UAAY7qB,EAASy7D,MAAQntD,EAAEy1D,qBAAsB,CACzD,GAAIz1D,EAAEqtD,SACJ,OAEFrtD,EAAEm0B,iBACFn0B,EAAE8/D,2BACFr+B,EAAQ+1M,WAAW5lP,EAAQ4iE,QAK/Bt3C,EAAW,CAAE3c,MAAOA,GAEpB8B,EAAa,SAAUzQ,GACzBA,EAAO0Q,UAAU,cAAe,CAC9B3H,MAAO,oBACP4H,IAAK,mBAEP3Q,EAAO4Q,YAAY,cAAe,CAChCC,KAAM,cACNpL,KAAM,oBACNkL,IAAK,iBACL6D,QAAS,YAGT1D,EAAU,CAAEzC,SAAUoC,GAO1B,SAASM,KALTtR,EAAO0H,IAAI,eAAe,SAAUnH,GAClC0O,EAASL,SAASrO,GAClB8Q,EAAQzC,SAASrO,GACjBsrB,EAAS3c,MAAM3O,OA3EH,IADlB,I,qBCMA,EAAQ,S,oBCNR,YACmB,WACf,aAEA,IAAIP,EAASC,QAAQC,KAAKC,MAAMC,QAAQ,yBAEpCC,EAAWJ,QAAQC,KAAKC,MAAMC,QAAQ,sBAEtCimP,EAAc,SAAU//M,EAAKggN,GAC/BhgN,EAAIx2B,KAAK,YAAY,GAAGyI,QAAQnO,MAAMmN,WAAa+uO,GAEjDC,EAAW,SAAUjgN,EAAK3mC,GAC5B,IAAIwV,EAAQ9U,EAASV,GAAQ6mP,EAAMrxO,EAAMwnO,QACzCr2M,EAAIknD,SAAS,CACXhxE,EAAGgqO,EAAIhqO,EACP0b,EAAGsuN,EAAItuN,EACPvc,EAAG6qO,EAAI7qO,EACPw5I,IAAKhgJ,EAAMg+D,QAAQ9sD,OAAO,KAE5BggO,EAAY//M,EAAKnxB,EAAMg+D,UAErB3lE,EAAO,SAAUjN,EAAQuD,EAAUnE,GACrC,IAAI2mC,EAAM/lC,EAAOuN,cAAcN,KAAK,CAClClE,MAAO,QACP8T,MAAO,CACLpb,KAAM,YACN+L,OAAQ,OACRC,UAAW,MACXC,MAAO,UACPyQ,QAAS,EACTC,QAAS,GACTvB,MAAO,CACL,CACEpb,KAAM,cACNrC,MAAOA,EACPorC,SAAU,WACR,IAAIy7M,EAAM3iP,KAAK2iP,MACXlgN,IACFA,EAAIx2B,KAAK,MAAMnQ,MAAM6mP,EAAIhqO,GACzB8pB,EAAIx2B,KAAK,MAAMnQ,MAAM6mP,EAAItuN,GACzBoO,EAAIx2B,KAAK,MAAMnQ,MAAM6mP,EAAI7qO,GACzB2qB,EAAIx2B,KAAK,QAAQnQ,MAAMkE,KAAKlE,QAAQ0mB,OAAO,IAC3CggO,EAAY//M,EAAKziC,KAAKlE,YAI5B,CACEqC,KAAM,OACN0c,QAAS,EACTsrB,SAAU,EACVtnB,SAAU,CACR1gB,KAAM,UACN2gB,KAAM,EACNhjB,MAAO,IACP6O,KAAM,EACNvG,YAAY,EACZ8iC,SAAU,WACR,IACIpjC,EAAMhI,EADN8mP,EAAkBngN,EAAIx2B,KAAK,eAAe,GAI9C,GAFAnI,EAAO9D,KAAK8D,OACZhI,EAAQkE,KAAKlE,QACA,QAATgI,EAIF,OAHAhI,EAAQ,IAAMA,EACd4mP,EAASjgN,EAAK3mC,QACd8mP,EAAgB9mP,MAAMA,GAGxBA,EAAQ,CACN6c,EAAG8pB,EAAIx2B,KAAK,MAAMnQ,QAClBu4B,EAAGoO,EAAIx2B,KAAK,MAAMnQ,QAClBgc,EAAG2qB,EAAIx2B,KAAK,MAAMnQ,SAEpB8mP,EAAgB9mP,MAAMA,GACtB4mP,EAASjgN,EAAK3mC,KAGlByd,MAAO,CACL,CACEzV,KAAM,IACNwG,MAAO,IACPM,UAAW,GAEb,CACE9G,KAAM,IACNwG,MAAO,KAET,CACExG,KAAM,IACNwG,MAAO,KAET,CACExG,KAAM,MACNwG,MAAO,IACPxO,MAAO,UAET,CACEgI,KAAM,UACN3F,KAAM,YACNioC,OAAQ,OAMlBv7B,SAAU,WACR5K,EAAS,IAAMwiC,EAAIoX,SAASy3G,QAGhCoxF,EAASjgN,EAAK3mC,IAEZ4N,EAAS,CAAEC,KAAMA,GASrB,SAAS8D,KAPTtR,EAAO0H,IAAI,eAAe,SAAUnH,GAC7BA,EAAOC,SAASkmP,wBACnBnmP,EAAOC,SAASkmP,sBAAwB,SAAU5iP,EAAUnE,GAC1D4N,EAAOC,KAAKjN,EAAQuD,EAAUnE,SAlHtB,IADlB,I,qBCMA,EAAQ,S,qBCAR,EAAQ,S,oBCNR,YACa,WACT,aAEA,IAAIK,EAASC,QAAQC,KAAKC,MAAMC,QAAQ,yBAEpCC,EAAWJ,QAAQC,KAAKC,MAAMC,QAAQ,eAEtCwO,EAAW,SAAUrO,GACvBA,EAAOsO,WAAW,YAAY,WACxBxO,EAAS6tB,IAAM7tB,EAAS6tB,IAAM,GAChC3tB,EAAOyP,SAAS2H,YAAY,SAAS,EAAO,MAE5CpX,EAAOm7H,SAASirH,YAIlB13O,EAAW,CAAEL,SAAUA,GAEvBoC,EAAa,SAAUzQ,GACzBA,EAAO0Q,UAAU,QAAS,CACxB3H,MAAO,QACP4H,IAAK,aAEP3Q,EAAO4Q,YAAY,QAAS,CAC1BnL,KAAM,QACNkL,IAAK,WACLE,KAAM,WAGNC,EAAU,CAAEzC,SAAUoC,GAO1B,SAASM,KALTtR,EAAO0H,IAAI,SAAS,SAAUnH,GAC5B0O,EAASL,SAASrO,GAClB8Q,EAAQzC,SAASrO,GACjBA,EAAOs0E,YAAY,SAAU,GAAI,gBAlC3B,IADZ,I,oBCAA,YACkB,WACd,aAEA,IAAIp1E,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,IAIPC,EAASC,QAAQC,KAAKC,MAAMC,QAAQ,yBAEpCC,EAAWJ,QAAQC,KAAKC,MAAMC,QAAQ,eAEtCkB,EAAWrB,QAAQC,KAAKC,MAAMC,QAAQ,sBAEtCwmP,EAAyB,SAAUrmP,GACrC,OAAOwR,SAASxR,EAAOW,SAAS,wBAAyBX,EAAOipL,aAAa3jJ,cAAe,KAE1FghN,EAAyB,SAAUtmP,GACrC,OAAOwR,SAASxR,EAAOW,SAAS,wBAAyB,GAAI,KAE3D4lP,EAA+B,SAAUvmP,GAC3C,OAAOA,EAAOW,SAAS,8BAA+B,IAEpD6lP,EAA4B,SAAUxmP,GACxC,OAAOA,EAAOW,SAAS,2BAA4B,KAEjD8lP,EAAyB,SAAUzmP,GACrC,OAAOA,EAAOW,SAAS,sBAAsB,IAE3CE,EAAW,CACbwlP,uBAAwBA,EACxBC,uBAAwBA,EACxBC,6BAA8BA,EAC9BC,0BAA2BA,EAC3BC,uBAAwBA,GAGtBpjK,EAAe,SAAUrjF,GAC3B,OAAOA,EAAOyD,QAAQijP,YAAc1mP,EAAOyD,QAAQijP,WAAWrjK,gBAE5D8kE,EAAO,SAAUnoJ,EAAQixH,EAAShoF,EAAO62M,EAAUv8O,GACrDxC,EAASsqB,iBAAiBrrB,GAAQ,WAChCkuB,EAAOluB,EAAQixH,GACXhoF,IACFk/G,EAAKnoJ,EAAQixH,EAAShoF,EAAO62M,EAAUv8O,GAC9BA,GACTA,MAEDu8O,IAED6G,EAAkB,SAAU3mP,EAAQy/B,GACtC,IAAI9xB,EAAO3N,EAAOoU,UACdzG,IACFA,EAAK9D,MAAM44J,UAAYhjI,EAAQ,GAAK,SAC/BA,IACH9xB,EAAK0nC,UAAY,KAInBnnB,EAAS,SAAUluB,EAAQixH,GAC7B,IAAI21H,EAAWh+N,EAAKjb,EAAMk5O,EAAcC,EACpCntM,EAAWC,EAAc8yD,EAAYC,EAAeC,EAAWC,EAC/D3gG,EAAMlM,EAAOkM,IAEjB,GADA0c,EAAM5oB,EAAOyP,SACRmZ,EAGL,GAAIy6D,EAAarjF,GACf2mP,EAAgB3mP,GAAQ,OAD1B,CAIA2N,EAAOib,EAAIjb,KACXk5O,EAAehmP,EAASwlP,uBAAuBrmP,GAC/C25C,EAAYztC,EAAI+oC,SAAStnC,EAAM,cAAc,GAC7CisC,EAAe1tC,EAAI+oC,SAAStnC,EAAM,iBAAiB,GACnD++F,EAAaxgG,EAAI+oC,SAAStnC,EAAM,eAAe,GAC/Cg/F,EAAgBzgG,EAAI+oC,SAAStnC,EAAM,kBAAkB,GACrDi/F,EAAY1gG,EAAI+oC,SAAStnC,EAAM,oBAAoB,GACnDk/F,EAAe3gG,EAAI+oC,SAAStnC,EAAM,uBAAuB,GACzDm5O,EAAWn5O,EAAK23B,aAAe9zB,SAASmoC,EAAW,IAAMnoC,SAASooC,EAAc,IAAMpoC,SAASk7F,EAAY,IAAMl7F,SAASm7F,EAAe,IAAMn7F,SAASo7F,EAAW,IAAMp7F,SAASq7F,EAAc,KAC5L5uD,MAAM6oM,IAAaA,GAAY,KACjCA,EAAWhnP,EAAS6tB,GAAKhgB,EAAK+nM,aAAe51M,EAASmuE,QAAgC,IAAtBtgE,EAAKw3B,aAAqB,EAAIx3B,EAAK23B,cAEjGwhN,EAAWjmP,EAASwlP,uBAAuBrmP,KAC7C6mP,EAAeC,GAEjB,IAAIC,EAAYlmP,EAASylP,uBAAuBtmP,GAC5C+mP,GAAaD,EAAWC,GAC1BF,EAAeE,EACfJ,EAAgB3mP,GAAQ,IAExB2mP,EAAgB3mP,GAAQ,GAEtB6mP,IAAiB51H,EAAQ5xH,QAC3BunP,EAAYC,EAAe51H,EAAQ5xH,MACnC6M,EAAIkqD,SAASp2D,EAAO0lM,cAAe,SAAUmhD,EAAe,MAC5D51H,EAAQ3xH,IAAIunP,GACR/mP,EAASmuE,QAAU24K,EAAY,GACjC14N,EAAOluB,EAAQixH,MAIjBtiH,EAAQ,SAAU3O,EAAQixH,GAC5BjxH,EAAO4O,GAAG,QAAQ,WAChB,IAAIo4O,EAAiBC,EACjB/6O,EAAMlM,EAAOkM,IACjB86O,EAAkBnmP,EAAS0lP,6BAA6BvmP,GACxDinP,EAAepmP,EAAS2lP,0BAA0BxmP,IAC1B,IAApBgnP,GACF96O,EAAIskE,UAAUxwE,EAAOoU,UAAW,CAC9B8oL,YAAa8pD,EACbE,aAAcF,KAGG,IAAjBC,GACF/6O,EAAIskE,UAAUxwE,EAAOoU,UAAW,CAAEu4F,cAAes6I,OAGrDjnP,EAAO4O,GAAG,sDAAsD,SAAUR,GACxE8f,EAAOluB,EAAQixH,MAEbpwH,EAAS4lP,uBAAuBzmP,IAClCA,EAAO4O,GAAG,QAAQ,WAChBu5I,EAAKnoJ,EAAQixH,EAAS,GAAI,KAAK,WAC7Bk3B,EAAKnoJ,EAAQixH,EAAS,EAAG,YAK7Bk2H,EAAS,CACXx4O,MAAOA,EACPuf,OAAQA,GAGN7f,EAAW,SAAUrO,EAAQixH,GAC/BjxH,EAAOsO,WAAW,iBAAiB,WACjC64O,EAAOj5N,OAAOluB,EAAQixH,OAGtBviH,EAAW,CAAEL,SAAUA,GAS3B,SAAS0C,KAPTtR,EAAO0H,IAAI,cAAc,SAAUnH,GACjC,IAAKA,EAAOkQ,OAAQ,CAClB,IAAI+gH,EAAU/xH,EAAK,GACnBwP,EAASL,SAASrO,EAAQixH,GAC1Bk2H,EAAOx4O,MAAM3O,EAAQixH,QA9JZ,IADjB,I,oBCAA,YACqB,WACjB,aAEA,IAAI/xH,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,IAIPC,EAASC,QAAQC,KAAKC,MAAMC,QAAQ,yBAEpCC,EAAWJ,QAAQC,KAAKC,MAAMC,QAAQ,sBAE1C,SAASk2E,EAAuBnqE,GAC9B,OAAOA,GAA0B,IAAlBA,EAAK2a,UAA2C,UAAzB3a,EAAK0D,gBAE7C,SAAS83O,EAAsBl9O,EAAO0B,EAAMy7O,EAAiBC,EAAcjrM,GACzE,IAAI35B,EAEAjd,EAAiBmjB,EACjBstD,EAAkBC,EAAuBC,EAFzCtpE,EAAU,GACJ2J,EAAQ,EAMlB,SAAS8wO,EAAgB7kO,EAAG4kO,GAE1B,GADAA,EAAeA,GAAgB,GAC1B5kO,EAAE,GACL,MAAM,IAAIvI,MAAM,2DAElB,IAAI5T,EAAQmc,EAAEnc,MACd,GAAI+gP,EAAe,EAAG,CACpB,IAAIE,EAAK9kO,EAAE4kO,GACX,IAAKE,EACH,MAAM,IAAIrtO,MAAM,yBAElB5T,GAASmc,EAAE,GAAGxa,QAAQs/O,GACtB9kO,EAAE,GAAK8kO,EAET,MAAO,CACLjhP,EACAA,EAAQmc,EAAE,GAAGzf,OACb,CAACyf,EAAE,KAGP,SAASi/C,EAAQ/1D,GACf,IAAIg2D,EACJ,GAAsB,IAAlBh2D,EAAK2a,SACP,OAAO3a,EAAK1G,KAEd,GAAIixE,EAAsBvqE,EAAKtH,YAAc4xE,EAAiBtqE,EAAKtH,UACjE,MAAO,GAGT,GADAs9D,EAAM,GACFmU,EAAuBnqE,GACzB,MAAO,KAKT,IAHIsqE,EAAiBtqE,EAAKtH,WAAa8xE,EAAsBxqE,EAAKtH,aAChEs9D,GAAO,MAELh2D,EAAOA,EAAKsM,WACd,GACE0pD,GAAOD,EAAQ/1D,SACRA,EAAOA,EAAKuc,aAEvB,OAAOy5C,EAET,SAAS0U,EAAmB1qE,EAAMkB,EAASypE,GACzC,IAAI5f,EAAWC,EAAS4f,EAAgBC,EAAcE,EAAa,GAAIC,EAAU,EAAGC,EAAUjrE,EAAM8qE,EAAgB5pE,EAAQ0iE,QAASsH,EAAa,EAClJhhD,EACE,MAAO,EAAM,CAiBX,IAhBIogD,EAAiBW,EAAQvyE,WAAa8xE,EAAsBS,EAAQvyE,WAAayxE,EAAuBc,KAC1GD,IAEuB,IAArBC,EAAQtwD,YACLqwC,GAAWigB,EAAQ5zE,OAAS2zE,GAAWF,EAAc,IACxD9f,EAAUigB,EACVJ,EAAeC,EAAc,GAAKE,GACzBjgB,GACTggB,EAAW9vE,KAAKgwE,IAEblgB,GAAakgB,EAAQ5zE,OAAS2zE,EAAUF,EAAc,KACzD/f,EAAYkgB,EACZL,EAAiBE,EAAc,GAAKE,GAEtCA,GAAWC,EAAQ5zE,QAEjB0zD,GAAaC,GAgBf,GAfAigB,EAAUN,EAAU,CAClB5f,UAAWA,EACX6f,eAAgBA,EAChB5f,QAASA,EACT6f,aAAcA,EACdE,WAAYA,EACZx0E,MAAOu0E,EAAc,GACrBI,WAAYA,IAEdF,GAAWhgB,EAAQ3zD,OAASwzE,EAC5B9f,EAAY,KACZC,EAAU,KACV+f,EAAa,GACbD,EAAgB5pE,EAAQ0iE,QACxBsH,KACKJ,EACH,WAEG,GAAMP,EAAsBU,EAAQvyE,YAAa4xE,EAAiBW,EAAQvyE,YAAcuyE,EAAQ3+D,YAKhG,GAAI2+D,EAAQ1uD,YAAa,CAC9B0uD,EAAUA,EAAQ1uD,YAClB,eANA,IAAK4tD,EAAuBc,GAAU,CACpCA,EAAUA,EAAQ3+D,WAClB,SAMJ,MAAO,EAAM,CACX,GAAI2+D,EAAQ1uD,YAAa,CACvB0uD,EAAUA,EAAQ1uD,YAClB,MACK,GAAI0uD,EAAQxyE,aAAeuH,EAGhC,MAAMkqB,EAFN+gD,EAAUA,EAAQxyE,aAO5B,SAAS0yE,EAAYzyE,GACnB,IAAI0yE,EACJ,GAAwB,oBAAb1yE,EAAyB,CAClC,IAAImjP,EAAgBnjP,EAASiiB,SAAWjiB,EAAWskB,EAAIuF,cAAc7pB,GACrE0yE,EAAsB,SAAUC,EAAMH,GACpC,IAAIt3E,EAAQioP,EAAcz0M,WAAU,GAKpC,OAJAxzC,EAAMyX,aAAa,iBAAkB6/D,GACjCG,GACFz3E,EAAM+Q,YAAYqY,EAAIlZ,eAAeunE,IAEhCz3E,QAGTw3E,EAAsB1yE,EAExB,OAAO,SAAUosE,GACf,IAAI9tE,EACA+D,EACAtC,EACAsyD,EAAY+Z,EAAM/Z,UAClBC,EAAU8Z,EAAM9Z,QAChBkgB,EAAapG,EAAMoG,WACvB,GAAIngB,IAAcC,EAAS,CACzB,IAAI2b,EAAS5b,EACbtyD,EAAakuE,EAAOluE,WAChBqsE,EAAM8F,eAAiB,IACzB5zE,EAASgmB,EAAIlZ,eAAe6iE,EAAOrtE,KAAKic,UAAU,EAAGuvD,EAAM8F,iBAC3DnyE,EAAW3B,aAAaE,EAAQ2vE,IAElC,IAAIjgE,EAAK0kE,EAAoBtG,EAAMvuE,MAAM,GAAI20E,GAO7C,OANAzyE,EAAW3B,aAAa4P,EAAIigE,GACxB7B,EAAM+F,aAAelE,EAAOtvE,SAC9B0D,EAAQiiB,EAAIlZ,eAAe6iE,EAAOrtE,KAAKic,UAAUuvD,EAAM+F,eACvDpyE,EAAW3B,aAAaiE,EAAO4rE,IAEjCA,EAAOluE,WAAWmf,YAAY+uD,GACvBjgE,EAET1P,EAASgmB,EAAIlZ,eAAeinD,EAAUzxD,KAAKic,UAAU,EAAGuvD,EAAM8F,iBAC9D7vE,EAAQiiB,EAAIlZ,eAAeknD,EAAQ1xD,KAAKic,UAAUuvD,EAAM+F,eAExD,IADA,IAAIU,EAAMH,EAAoBrgB,EAAUzxD,KAAKic,UAAUuvD,EAAM8F,gBAAiBM,GACrEtzE,EAAI,EAAG4zE,EAAI1G,EAAMiG,WAAW1zE,OAAQO,EAAI4zE,IAAK5zE,EAAG,CACvD,IAAI6zE,EAAY3G,EAAMiG,WAAWnzE,GAC7B8zE,EAAUN,EAAoBK,EAAUnyE,KAAM4xE,GAClDO,EAAUhzE,WAAWmL,aAAa8nE,EAASD,GAE7C,IAAIE,EAAMP,EAAoBpgB,EAAQ1xD,KAAKic,UAAU,EAAGuvD,EAAM+F,cAAeK,GAS7E,OARAzyE,EAAasyD,EAAUtyD,WACvBA,EAAW3B,aAAaE,EAAQ+zD,GAChCtyD,EAAW3B,aAAay0E,EAAKxgB,GAC7BtyD,EAAWmf,YAAYmzC,GACvBtyD,EAAauyD,EAAQvyD,WACrBA,EAAW3B,aAAa60E,EAAK3gB,GAC7BvyD,EAAW3B,aAAaiE,EAAOiwD,GAC/BvyD,EAAWmf,YAAYozC,GAChB2gB,GAIX,GArKA3uD,EAAMhd,EAAKm2B,cACXm0C,EAAmB75B,EAAOsX,mBAC1BwiB,EAAwB95B,EAAO87B,wBAC/B/B,EAAwB/5B,EAAOokB,wBAiK/Bh7D,EAAOk8D,EAAQ/1D,GACVnG,EAAL,CAGA,GAAIyE,EAAMzK,OACR,MAAOijB,EAAIxY,EAAM7D,KAAKZ,GACpBqH,EAAQjG,KAAK0gP,EAAgB7kO,EAAG4kO,SAGlC5kO,EAAIjd,EAAKtD,MAAM+H,GACf4C,EAAQjG,KAAK0gP,EAAgB7kO,EAAG4kO,IAMlC,OAJIx6O,EAAQ7J,SACVwT,EAAQ3J,EAAQ7J,OAChBqzE,EAAmB1qE,EAAMkB,EAASiqE,EAAYswK,KAEzC5wO,GAET,IAAIixO,EAAkB,CAAEN,sBAAuBA,GAE3CttK,EAAc,SAAU7xE,GAC1B,IAAI7I,EAAQ6I,EAAIkQ,aAAa,kBAC7B,MAAqB,kBAAV/Y,EACF,GAAKA,EAEPA,GAELuoP,EAAiB,SAAU3nP,EAAQ4nP,EAAmB19O,GACxD,IAAI0B,EAAMwjD,EAKV,OAJAA,EAASpvD,EAAOkM,IAAIiE,OAAO,OAAQ,CAAE,iBAAkB,IACvDi/C,EAAOhrD,UAAY,mBACnBwH,EAAO5L,EAAOoU,UACdkc,EAAKtwB,EAAQ4nP,GAAmB,GACzBF,EAAgBN,sBAAsBl9O,EAAO0B,EAAMwjD,GAAQ,EAAOpvD,EAAOq8C,SAE9E6mB,EAAS,SAAUt3D,GACrB,IAAIvH,EAAauH,EAAKvH,WAClBuH,EAAKsM,YACP7T,EAAW3B,aAAakJ,EAAKsM,WAAYtM,GAE3CA,EAAKvH,WAAWmf,YAAY5X,IAE1BmuE,EAAmB,SAAU/5E,EAAQuG,GACvC,IAAI+M,EACAqmE,EAAQ,GAEZ,GADArmE,EAAQxT,EAASgb,QAAQ9a,EAAOoU,UAAU9D,qBAAqB,SAC3DgD,EAAMrQ,OACR,IAAK,IAAIO,EAAI,EAAGA,EAAI8P,EAAMrQ,OAAQO,IAAK,CACrC,IAAI2gD,EAAY21B,EAAYxmE,EAAM9P,IAChB,OAAd2gD,GAAuBA,EAAUlhD,SAGjCkhD,IAAc59C,EAAMtE,YACtB03E,EAAM9yE,KAAKyM,EAAM9P,KAIvB,OAAOm2E,GAELm5J,EAAgB,SAAU9yO,EAAQ4nP,EAAmBpnH,GACvD,IAAIqnH,EAAYD,EAAkBvoP,MAC9B6M,EAAMlM,EAAOkM,IACjBs0H,GAAsB,IAAZA,EACNA,EACFqnH,IAEAA,IAEF37O,EAAIu4E,YAAY1K,EAAiB/5E,EAAQ4nP,EAAkBvoP,OAAQ,6BACnE,IAAIs6E,EAAQI,EAAiB/5E,EAAQ6nP,GACrC,OAAIluK,EAAM12E,QACRiJ,EAAI44E,SAAS/K,EAAiB/5E,EAAQ6nP,GAAY,6BAClD7nP,EAAO6L,UAAU+0E,eAAejH,EAAM,IAC/BkuK,IAED,GAENj/E,EAAa,SAAU18J,EAAKN,GAC9B,IAAI1H,EAAS0H,EAAKvH,WAClB6H,EAAImJ,OAAOzJ,GACPM,EAAI4wC,QAAQ54C,IACdgI,EAAImJ,OAAOnR,IAGXqL,EAAO,SAAUvP,EAAQ4nP,EAAmBniP,EAAMqiP,EAAWC,GAC/DtiP,EAAOA,EAAK5D,QAAQ,sCAAuC,QAC3D4D,EAAOA,EAAK5D,QAAQ,MAAO,gBAC3B4D,EAAOsiP,EAAY,MAAQtiP,EAAO,MAAQA,EAC1C,IAAIgR,EAAQkxO,EAAe3nP,EAAQ4nP,EAAmB,IAAIl1M,OAAOjtC,EAAMqiP,EAAY,IAAM,OAKzF,OAJIrxO,IACFmxO,EAAkBtoP,KAAK,GACvBsoP,EAAkBtoP,IAAIwzO,EAAc9yO,EAAQ4nP,GAAmB,KAE1DnxO,GAEL0S,EAAO,SAAUnpB,EAAQ4nP,GAC3B,IAAIrhP,EAAQusO,EAAc9yO,EAAQ4nP,GAAmB,IACtC,IAAXrhP,GACFqhP,EAAkBtoP,IAAIiH,IAGtBgsF,EAAO,SAAUvyF,EAAQ4nP,GAC3B,IAAIrhP,EAAQusO,EAAc9yO,EAAQ4nP,GAAmB,IACtC,IAAXrhP,GACFqhP,EAAkBtoP,IAAIiH,IAGtByhP,EAAc,SAAUp8O,GAC1B,IAAIkrE,EAAagD,EAAYluE,GAC7B,OAAsB,OAAfkrE,GAAuBA,EAAW7zE,OAAS,GAEhDpB,EAAU,SAAU7B,EAAQ4nP,EAAmBniP,EAAM+6H,EAASt5H,GAChE,IAAI1D,EAAG8P,EAAO1H,EAAMkrE,EAAYmxK,EAAwDC,EAArCC,EAAYP,EAAkBvoP,MAIjF,IAHAmhI,GAAsB,IAAZA,EACV50H,EAAO5L,EAAOoU,UACdd,EAAQxT,EAASkoB,KAAKloB,EAASgb,QAAQlP,EAAK0E,qBAAqB,SAAU03O,GACtExkP,EAAI,EAAGA,EAAI8P,EAAMrQ,OAAQO,IAAK,CACjC,IAAI2gD,EAAY21B,EAAYxmE,EAAM9P,IAElC,GADAszE,EAAamxK,EAAoBz2O,SAAS2yC,EAAW,IACjDj9C,GAAO4vE,IAAe8wK,EAAkBvoP,MAAO,CAC7CoG,EAAKxC,QACPqQ,EAAM9P,GAAG0U,WAAWy6E,UAAYltF,EAChCy9D,EAAO5vD,EAAM9P,KAEbolK,EAAW5oK,EAAOkM,IAAKoH,EAAM9P,IAE/B,MAAO8P,IAAQ9P,GAAI,CAEjB,GADAszE,EAAatlE,SAASsoE,EAAYxmE,EAAM9P,IAAK,IACzCszE,IAAemxK,EAEZ,CACLzkP,IACA,MAHAolK,EAAW5oK,EAAOkM,IAAKoH,EAAM9P,IAM7Bg9H,GACF2nH,SAEOF,EAAoBL,EAAkBvoP,OAC/CiU,EAAM9P,GAAGyT,aAAa,iBAAkBgxO,EAAoB,GAWhE,OARAL,EAAkBtoP,IAAI6oP,GAClB3nH,GACF0nH,EAAUE,EAAQpoP,EAAQ4nP,GAC1Bz+N,EAAKnpB,EAAQ4nP,KAEbM,EAAUG,EAAQroP,EAAQ4nP,GAC1Br1J,EAAKvyF,EAAQ4nP,KAEP1gP,GAAOghP,GAEb53N,EAAO,SAAUtwB,EAAQ4nP,EAAmBU,GAC9C,IAAI9kP,EAAG8P,EAAOgT,EAAgBo9B,EAE9B,IADApwC,EAAQxT,EAASgb,QAAQ9a,EAAOoU,UAAU9D,qBAAqB,SAC1D9M,EAAI,EAAGA,EAAI8P,EAAMrQ,OAAQO,IAAK,CACjC,IAAI2gD,EAAY21B,EAAYxmE,EAAM9P,IAChB,OAAd2gD,GAAsBA,EAAUlhD,SAC9BkhD,IAAcyjM,EAAkBvoP,MAAM4C,aACnCqkB,IACHA,EAAiBhT,EAAM9P,GAAG0U,YAE5BwrC,EAAepwC,EAAM9P,GAAG0U,YAE1BgrD,EAAO5vD,EAAM9P,KAGjB,GAAI8iB,GAAkBo9B,EAAc,CAClC,IAAIx9B,EAAMlmB,EAAOkM,IAAIob,YAMrB,OALApB,EAAIW,SAASP,EAAgB,GAC7BJ,EAAIY,OAAO48B,EAAcA,EAAax+C,KAAKjC,SACf,IAAxBqlP,GACFtoP,EAAO6L,UAAU0b,OAAOrB,GAEnBA,IAGPkiO,EAAU,SAAUpoP,EAAQ4nP,GAC9B,OAAO7tK,EAAiB/5E,EAAQ4nP,EAAkBvoP,MAAQ,GAAG4D,OAAS,GAEpEolP,EAAU,SAAUroP,EAAQ4nP,GAC9B,OAAO7tK,EAAiB/5E,EAAQ4nP,EAAkBvoP,MAAQ,GAAG4D,OAAS,GAEpE4sC,EAAU,CACZvf,KAAMA,EACN/gB,KAAMA,EACN4Z,KAAMA,EACNopE,KAAMA,EACN1wF,QAASA,EACTumP,QAASA,EACTC,QAASA,GAGPhpP,EAAM,SAAUW,EAAQ4nP,GAC1B,IAAIt3N,EAAO,SAAUg4N,GACnB,OAAOz4M,EAAQvf,KAAKtwB,EAAQ4nP,EAAmBU,IAE7C/4O,EAAO,SAAU9J,EAAMqiP,EAAWC,GACpC,OAAOl4M,EAAQtgC,KAAKvP,EAAQ4nP,EAAmBniP,EAAMqiP,EAAWC,IAE9D5+N,EAAO,WACT,OAAO0mB,EAAQ1mB,KAAKnpB,EAAQ4nP,IAE1Br1J,EAAO,WACT,OAAO1iD,EAAQ0iD,KAAKvyF,EAAQ4nP,IAE1B/lP,EAAU,SAAU4D,EAAM+6H,EAASt5H,GACrC,OAAO2oC,EAAQhuC,QAAQ7B,EAAQ4nP,EAAmBniP,EAAM+6H,EAASt5H,IAEnE,MAAO,CACLopB,KAAMA,EACN/gB,KAAMA,EACN4Z,KAAMA,EACNopE,KAAMA,EACN1wF,QAASA,IAGTsjB,EAAM,CAAE9lB,IAAKA,GAEb4N,EAAO,SAAUjN,EAAQ4nP,GAC3B,IAAeW,EAAXjyO,EAAO,GAGX,SAASkyO,IACPziN,EAAIqC,UAAU74B,KAAK,SAASyE,UAAwD,IAA/C67B,EAAQu4M,QAAQpoP,EAAQ4nP,IAC7D7hN,EAAIqC,UAAU74B,KAAK,SAASyE,UAAwD,IAA/C67B,EAAQw4M,QAAQroP,EAAQ4nP,IAE/D,SAASa,IACPzoP,EAAOuN,cAAc47B,MAAM,wCAAwC,WACjEpD,EAAIx2B,KAAK,SAAS,GAAG2F,WARzBlV,EAAOgM,YAAY7E,MACnBohP,EAAezoP,EAASoP,KAAKlP,EAAO6L,UAAUqhB,WAAW,CAAEvY,OAAQ,UAUnE,IAAIoxB,EAAM/lC,EAAOuN,cAAcN,KAAK,CAClCO,OAAQ,OACRm8B,KAAM,SACNj8B,MAAO,SACPg7O,QAAS,WACP1oP,EAAOkV,QACP26B,EAAQvf,KAAKtwB,EAAQ4nP,GACrB5nP,EAAOgM,YAAY7E,OAErBgH,SAAU,SAAUC,GAClB,IAAIqI,EAAOkyO,EAAWljP,EAAMsiP,EAK5B,OAJA35O,EAAEm0B,iBACFomN,EAAY5iN,EAAIx2B,KAAK,SAAS04B,UAC9B8/M,EAAYhiN,EAAIx2B,KAAK,UAAU04B,UAC/BxiC,EAAOsgC,EAAIx2B,KAAK,SAASnQ,QACpBqG,EAAKxC,OAKNqT,EAAK7Q,OAASA,GAAQ6Q,EAAKqyO,YAAcA,GAAaryO,EAAKyxO,YAAcA,EACtEl4M,EAAQu4M,QAAQpoP,EAAQ4nP,IAI7B/3M,EAAQ1mB,KAAKnpB,EAAQ4nP,QACrBY,UAJEC,KAOJhyO,EAAQo5B,EAAQtgC,KAAKvP,EAAQ4nP,EAAmBniP,EAAMkjP,EAAWZ,GAC5DtxO,GACHgyO,IAEF1iN,EAAIqC,UAAUvrB,QAAQrW,MAAM,GAAGwN,SAAmB,IAAVyC,GACxC+xO,SACAlyO,EAAO,CACL7Q,KAAMA,EACNkjP,UAAWA,EACXZ,UAAWA,MAtBXl4M,EAAQvf,KAAKtwB,EAAQ4nP,GAAmB,QACxC7hN,EAAIqC,UAAUvrB,QAAQrW,MAAM,GAAGwN,UAAS,KAwB5CgL,QAAS,CACP,CACEvZ,KAAM,OACNokC,QAAS,UACTpxB,QAAS,WACPstB,EAAIouC,WAGR,CACE1uE,KAAM,UACNuO,UAAU,EACVyE,QAAS,WACFo3B,EAAQhuC,QAAQ7B,EAAQ4nP,EAAmB7hN,EAAIx2B,KAAK,YAAYnQ,WACnE2mC,EAAIqC,UAAUvrB,QAAQrW,MAAM,GAAGwN,UAAS,GACxC4zO,EAAkBtoP,KAAK,GACvBgX,EAAO,MAIb,CACE7Q,KAAM,cACNuO,UAAU,EACVyE,QAAS,WACPo3B,EAAQhuC,QAAQ7B,EAAQ4nP,EAAmB7hN,EAAIx2B,KAAK,YAAYnQ,SAAS,GAAM,GAC/E2mC,EAAIqC,UAAUvrB,QAAQrW,MAAM,GAAGwN,UAAS,GACxCsC,EAAO,KAGX,CACE7U,KAAM,SACNwM,KAAM,GAER,CACExI,KAAM,OACN2B,KAAM,OACN4M,UAAU,EACVyE,QAAS,WACPo3B,EAAQ0iD,KAAKvyF,EAAQ4nP,GACrBY,MAGJ,CACE/iP,KAAM,OACN2B,KAAM,OACN4M,UAAU,EACVyE,QAAS,WACPo3B,EAAQ1mB,KAAKnpB,EAAQ4nP,GACrBY,OAINz/O,MAAO,mBACP8T,MAAO,CACLpb,KAAM,OACN0c,QAAS,GACTsrB,SAAU,GACVrrB,QAAS,GACTvB,MAAO,CACL,CACEpb,KAAM,UACN2F,KAAM,OACNgb,KAAM,GACNxU,MAAO,OACPxO,MAAOmpP,GAET,CACE9mP,KAAM,UACN2F,KAAM,UACNgb,KAAM,GACNxU,MAAO,gBAET,CACEnM,KAAM,WACN2F,KAAM,OACN3B,KAAM,aACNmI,MAAO,KAET,CACEnM,KAAM,WACN2F,KAAM,QACN3B,KAAM,cACNmI,MAAO,UAMbZ,EAAS,CAAEC,KAAMA,GAEjBoB,EAAW,SAAUrO,EAAQ4nP,GAC/B5nP,EAAOsO,WAAW,iBAAiB,WACjCtB,EAAOC,KAAKjN,EAAQ4nP,OAGpBl5O,EAAW,CAAEL,SAAUA,GAEvBwlC,EAAa,SAAU7zC,EAAQ4nP,GACjC,OAAO,WACL56O,EAAOC,KAAKjN,EAAQ4nP,KAGpBn3O,EAAa,SAAUzQ,EAAQ4nP,GACjC5nP,EAAO4Q,YAAY,gBAAiB,CAClCnL,KAAM,mBACN8W,SAAU,SACV9D,QAASo7B,EAAW7zC,EAAQ4nP,GAC5B/6M,UAAW,SACXr4B,QAAS,SAEXxU,EAAO0Q,UAAU,gBAAiB,CAChC4D,QAAS,mBACTmE,QAASo7B,EAAW7zC,EAAQ4nP,KAE9B5nP,EAAOsc,UAAUnV,IAAI,SAAU,GAAI0sC,EAAW7zC,EAAQ4nP,KAEpD92O,EAAU,CAAEzC,SAAUoC,GAQ1B,SAASM,KANTtR,EAAO0H,IAAI,iBAAiB,SAAUnH,GACpC,IAAI4nP,EAAoB1oP,GAAM,GAG9B,OAFAwP,EAASL,SAASrO,EAAQ4nP,GAC1B92O,EAAQzC,SAASrO,EAAQ4nP,GAClBziO,EAAI9lB,IAAIW,EAAQ4nP,OA/kBT,IADpB,I,qBCMA,EAAQ,S,oBCNR,YACmB,WACf,aAEA,IAAInoP,EAASC,QAAQC,KAAKC,MAAMC,QAAQ,yBAEpCC,EAAWJ,QAAQC,KAAKC,MAAMC,QAAQ,sBAEtC+oP,EAAsB,SAAU5oP,GAClC,OAAOA,EAAOW,SAAS,gCAAiC,mBAEtDkoP,EAAmB,SAAU7oP,GAC/B,OAAOA,EAAOW,SAAS,6BAA8B,gBAEnDmoP,EAAwB,SAAU9oP,GACpC,IAAI+oP,EAAqB/oP,EAAOW,SAAS,qBAAsB,IAC/D,OAAIooP,GAAsBA,EAAmBvtO,cAAgBk3B,OACpD,CAACq2M,GAEDA,GAGPloP,EAAW,CACb+nP,oBAAqBA,EACrBC,iBAAkBA,EAClBC,sBAAuBA,GAGrBv2O,EAAW,SAAUy2O,GACvB,OAAO,SAAUp9O,GACf,OAAqE,KAA7D,IAAMA,EAAKqD,KAAK,SAAW,KAAK/G,QAAQ8gP,KAGhDC,EAAuB,SAAUjpP,EAAQ0B,EAASi4J,GACpD,OAAO,SAAUx3J,GACf,IAAIyE,EAAO5D,UAAWuD,EAAQK,EAAKA,EAAK3D,OAAS,GAC7CimP,EAAW3iP,EAAQ,EAAI7E,EAAQkxF,OAAOrsF,EAAQ,GAAK,GACvD,GAAiB,MAAb2iP,EACF,OAAO/mP,EAET,GAAiB,MAAb+mP,EAAkB,CACpB,IAAIC,EAAoBznP,EAAQ+jB,YAAY,IAAKlf,GACjD,IAA2B,IAAvB4iP,EAA0B,CAC5B,IAAIC,EAAU1nP,EAAQyf,UAAUgoO,EAAmB5iP,GACnD,IAAoD,IAAhD6iP,EAAQlhP,QAAQ,2BAClB,OAAO/F,GAIb,MAAO,gBAAkBw3J,EAAM,uBAAyB35J,EAAOkM,IAAI5K,OAAOsF,EAAK,IAAM,KAAO5G,EAAOkM,IAAI5K,OAA0B,kBAAZsF,EAAK,GAAkBA,EAAK,GAAKA,EAAK,IAAM,YAGjKyiP,EAA8B,SAAUrpP,EAAQ+oP,EAAoB36O,GACtE,IAAI5K,EAAIulP,EAAmB9lP,OAAQvB,EAAU0M,EAAE1M,QAC/C,GAAiB,QAAb0M,EAAEuG,OAAN,CAGA,MAAOnR,IACL9B,EAAUA,EAAQG,QAAQknP,EAAmBvlP,GAAIylP,EAAqBjpP,EAAQ0B,EAASb,EAAS+nP,oBAAoB5oP,KAEtHoO,EAAE1M,QAAUA,IAEViN,EAAQ,SAAU3O,GACpB,IAAIspP,EAAWC,EACXC,EAA0B,kBAC9BF,EAAY,IAAMxpP,EAASoP,KAAKrO,EAASgoP,iBAAiB7oP,IAAW,IACrEupP,EAAe,IAAMzpP,EAASoP,KAAKrO,EAAS+nP,oBAAoB5oP,IAAW,IAC3E,IAAIypP,EAAel3O,EAAS+2O,GACxBI,EAAkBn3O,EAASg3O,GAC3BR,EAAqBloP,EAASioP,sBAAsB9oP,GACxDA,EAAO4O,GAAG,WAAW,WACfm6O,EAAmB9lP,OAAS,GAC9BjD,EAAO4O,GAAG,oBAAoB,SAAUR,GACtCi7O,EAA4BrpP,EAAQ+oP,EAAoB36O,MAG5DpO,EAAO4hD,OAAOqhB,mBAAmB,SAAS,SAAU3vD,GAClD,IAAsB1H,EAAlBpI,EAAI8P,EAAMrQ,OACd,MAAOO,IACLoI,EAAO0H,EAAM9P,GACTimP,EAAa79O,GACfA,EAAKqD,KAAKu6O,EAAyB,QAC1BE,EAAgB99O,IACzBA,EAAKqD,KAAKu6O,EAAyB,YAIzCxpP,EAAO8hD,WAAWmhB,mBAAmBumL,GAAyB,SAAUl2O,GACtE,IAAsB1H,EAAlBpI,EAAI8P,EAAMrQ,OACd,MAAOO,IACLoI,EAAO0H,EAAM9P,IACRimP,EAAa79O,IAAU89O,EAAgB99O,MAGxCm9O,EAAmB9lP,OAAS,GAAK2I,EAAKqD,KAAK,qBAC7CrD,EAAKxE,KAAO,QACZwE,EAAKnK,KAAO,EACZmK,EAAK6wD,KAAM,EACX7wD,EAAKxM,MAAQwM,EAAKqD,KAAK,qBAEvBrD,EAAKqD,KAAKu6O,EAAyB,cAMzC75O,EAAgB,CAAEhB,MAAOA,GAK7B,SAASoC,KAHTtR,EAAO0H,IAAI,eAAe,SAAUnH,GAClC2P,EAAchB,MAAM3O,OA5GR,IADlB,I,qBCMA,EAAQ,S,oBCNR,YACc,SAAUf,GACpB,aAEA,IAAIQ,EAASC,QAAQC,KAAKC,MAAMC,QAAQ,wBAEpCC,EAAWJ,QAAQC,KAAKC,MAAMC,QAAQ,yBAEtCkB,EAAWrB,QAAQC,KAAKC,MAAMC,QAAQ,sBAEtC8pP,EAAoB,SAAU3pP,GAChC,OAAOA,EAAOW,SAAS,YAAY,EAAM,YAEvCipP,EAAa,SAAU5pP,GACzB,OAA8B,IAAvB6pP,EAAW7pP,IAEhB6pP,EAAa,SAAU7pP,GACzB,OAAOA,EAAOW,SAAS,YAErBmpP,EAAe,SAAU9pP,GAC3B,OAAOA,EAAOW,SAAS,aAAa,EAAM,YAExCopP,EAAiB,SAAU/pP,GAC7B,OAAOA,EAAOW,SAAS,uBAErBo+L,EAAa,SAAU/+L,GACzB,OAAOA,EAAOW,SAAS,YAAY,EAAO,YAExCqpP,EAA2B,SAAUhqP,GACvC,OAAOA,EAAOW,SAAS,4BAErBspP,EAAkC,SAAUjqP,GAC9C,OAAOA,EAAOW,SAAS,oCAErBupP,EAAU,SAAUlqP,GACtB,OAAOA,EAAOW,SAAS,SAErBwpP,EAAsB,SAAUnqP,GAClC,OAAOA,EAAOW,SAAS,oBAAqB,KAE1CsiF,EAAc,SAAUjjF,GAC1B,OAAOA,EAAOW,SAAS,YAAa,IAAK,WAEvCuiF,EAAe,SAAUljF,GAC3B,OAAOA,EAAOW,SAAS,aAAc,IAAK,WAExC2rF,EAAc,SAAUtsF,GAC1B,OAAOA,EAAOW,SAAS,YAAa,MAAO,WAEzC4rF,EAAe,SAAUvsF,GAC3B,OAAOA,EAAOW,SAAS,aAAc,MAAO,WAE1CypP,EAAiB,SAAUpqP,GAC7B,OAAgC,IAAzBA,EAAOC,SAASwlF,MAErB++B,EAAW,SAAUxkH,GACvB,OAAOA,EAAOW,SAAS,UAAU,EAAO,YAEtC0pP,EAAY,SAAUrqP,GACxB,IAAIkuB,EAASluB,EAAOW,SAAS,SAAU,YACvC,OAAe,IAAXutB,EACK,OACa,SAAXA,EACF,OAEA,YAGPo8N,EAAa,SAAUtqP,GACzB,IAAIC,EAAWD,EAAOC,SAClBwlF,EAAOxlF,EAASwlF,KAChBC,EAAUzlF,EAAS0lF,SACvB,IAAa,IAATF,EAAgB,CAClB,IAAI8kK,EAAW9kK,GAAc,YAE3BC,EADEA,EACQ1lF,EAAOusB,gBAAgBG,WAAWg5D,GAElC5lF,EAAS8lF,QAAU,UAAY2kK,EAG7C,OAAO7kK,GAEL8kK,EAAqB,SAAUvqP,EAAUwqP,GAE3C,IADA,IAAIC,EAAW,GACNlnP,EAAI,EAAGA,EAAI,GAAIA,IAAK,CAC3B,IAAI6mH,EAAUpqH,EAAS,UAAYuD,GACnC,IAAK6mH,EACH,MAEFqgI,EAAS7jP,KAAKwjH,GAEhB,IAAIsgI,EAAc1qP,EAASoqH,QAAU,CAACpqH,EAASoqH,SAAW,CAACogI,GAC3D,OAAOC,EAASznP,OAAS,EAAIynP,EAAWC,GAEtCC,EAAc,SAAU5qP,GAC1B,IAAIqqH,EAAUrqH,EAAOW,SAAS,WAC1B8pP,EAAiB,sIACrB,OAAgB,IAAZpgI,EACK,GACEtpH,EAAS+mB,QAAQuiG,GACnBtpH,EAASinB,KAAKqiG,GAAS,SAAUA,GACtC,OAAOA,EAAQpnH,OAAS,KAGnBunP,EAAmBxqP,EAAOC,SAAUwqP,IAI3Cv5O,EAAWxR,QAAQC,KAAKC,MAAMC,QAAQ,wBAEtCof,EAAWvf,QAAQC,KAAKC,MAAMC,QAAQ,sBAEtCy/B,EAAW5/B,QAAQC,KAAKC,MAAMC,QAAQ,qBAEtCgrP,EAAiB,SAAU7qP,GAC7B,OAAOA,EAAO2hC,KAAK,eAEjBmpN,EAAmB,SAAU9qP,GAC/B,OAAOA,EAAO2hC,KAAK,iBAEjBopN,EAAqB,SAAU/qP,GACjC,OAAOA,EAAO2hC,KAAK,mBAEjB87B,EAAS,CACXotL,eAAgBA,EAChBC,iBAAkBA,EAClBC,mBAAoBA,GAGlB71O,EAAQ,SAAU6C,EAAOtW,GAC3B,OAAO,WACL,IAAIo0C,EAAO99B,EAAMxI,KAAK9N,GAAM,GACxBo0C,GACFA,EAAK3gC,OAAM,KAIb81O,EAAU,SAAUhrP,EAAQ+X,GAC9B/X,EAAOsc,UAAUnV,IAAI,SAAU,GAAI+N,EAAM6C,EAAO,YAChD/X,EAAOsc,UAAUnV,IAAI,cAAe,GAAI+N,EAAM6C,EAAO,YACrD/X,EAAOsc,UAAUnV,IAAI,UAAW,GAAI+N,EAAM6C,EAAO,gBACjDA,EAAMnJ,GAAG,UAAU,WACjB5O,EAAOkV,YAGP+1O,EAAO,CAAED,QAASA,GAElBzrN,EAAW7/B,QAAQC,KAAKC,MAAMC,QAAQ,qBAEtCkgC,EAAWrgC,QAAQC,KAAKC,MAAMC,QAAQ,sBAEtC6Y,EAAO,aAEP3N,EAAW,SAAU3L,GACvB,OAAO,WACL,OAAOA,IAGP+Z,EAAQpO,GAAS,GACjBqO,EAASrO,GAAS,GAElBsO,EAAO,WACT,OAAOC,GAELA,EAAO,WACT,IAAIC,EAAK,SAAUzX,GACjB,OAAOA,EAAE0X,UAEPtX,EAAO,SAAUuX,GACnB,OAAOA,KAELjX,EAAK,SAAUkX,GACjB,OAAOA,GAELC,EAAK,CACPC,KAAM,SAAUF,EAAGG,GACjB,OAAOH,KAETvF,GAAIgF,EACJW,OAAQX,EACRK,OAAQJ,EACRW,MAAOvX,EACPwX,WAAY9X,EACZ+X,SAAU,SAAUC,GAClB,MAAM,IAAIC,MAAMD,GAAO,oCAEzBE,UAAWrP,EAAS,MACpBsP,eAAgBtP,OAASuP,GACzBC,GAAI/X,EACJgY,QAAStY,EACTN,IAAKyX,EACLvK,KAAM4J,EACN+B,KAAMpB,EACNqB,OAAQvB,EACRwB,OAAQvB,EACRvK,OAAQwK,EACRuB,OAAQrB,EACRsB,QAAStB,EACTuB,QAAS,WACP,MAAO,IAET7Y,SAAU8I,EAAS,WAKrB,OAHIhJ,OAAOgZ,QACThZ,OAAOgZ,OAAOpB,GAETA,EA1CE,GA4CPqB,EAAO,SAAUC,GACnB,IAAIC,EAAanQ,EAASkQ,GACtB/Z,EAAO,WACT,OAAOyY,GAELc,EAAO,SAAUvB,GACnB,OAAOA,EAAE+B,IAEPtB,EAAK,CACPC,KAAM,SAAUF,EAAGG,GACjB,OAAOA,EAAEoB,IAEX9G,GAAI,SAAU5U,GACZ,OAAO0b,IAAM1b,GAEfua,OAAQV,EACRI,OAAQL,EACRY,MAAOmB,EACPlB,WAAYkB,EACZjB,SAAUiB,EACVd,UAAWc,EACXb,eAAgBa,EAChBX,GAAIrZ,EACJsZ,QAAStZ,EACTU,IAAK,SAAUsX,GACb,OAAO8B,EAAK9B,EAAE+B,KAEhBnM,KAAM,SAAUoK,GACdA,EAAE+B,IAEJR,KAAMA,EACNC,OAAQD,EACRE,OAAQF,EACR5L,OAAQ,SAAUqK,GAChB,OAAOA,EAAE+B,GAAKtB,EAAKL,GAErBwB,QAAS,WACP,MAAO,CAACG,IAEVhZ,SAAU,WACR,MAAO,QAAUgZ,EAAI,KAEvBL,OAAQ,SAAU9Y,GAChB,OAAOA,EAAEqS,GAAG8G,IAEdJ,QAAS,SAAU/Y,EAAGqZ,GACpB,OAAOrZ,EAAE8X,KAAKT,GAAO,SAAUiC,GAC7B,OAAOD,EAAUF,EAAGG,QAI1B,OAAOzB,GAELrT,EAAO,SAAUlH,GACnB,OAAiB,OAAVA,QAA4Bkb,IAAVlb,EAAsBka,EAAO0B,EAAK5b,IAEzDic,EAAS,CACXL,KAAMA,EACN3B,KAAMA,EACN/S,KAAMA,GAGJ4kP,EAAsB,SAAUp3O,GAClC,IAAIiiC,EAAc5B,EAAergC,GACjC,GAAIiiC,GAAwE,WAAzD7kC,EAAS1Q,IAAIy0C,SAASc,EAAa,YAAY,GAAoB,CACpF,IAAIb,EAAehkC,EAAS1Q,IAAI20C,OAAOY,GACnCvB,EAAKuB,EAAYX,WAAaF,EAAa3+B,EAC3Ck+B,EAAKsB,EAAYV,UAAYH,EAAa1+B,EAC9C,OAAO6E,EAAOL,KAAK,CACjBzE,EAAGi+B,EACHh+B,EAAGi+B,IAGL,OAAOp5B,EAAOhC,QAGd8xO,EAAiB,SAAUnrP,EAAQ8T,GACrC,IAAIiiC,EAAc7kC,EAAS1Q,IAAI4L,OAAOpM,EAAOC,SAASm0C,cAAc,GACpEtgC,EAAKwtC,UAAUvL,YAAcA,GAE3B5B,EAAiB,SAAUrgC,GAC7B,OAAOA,EAAOA,EAAKwtC,UAAUvL,YAAc,MAEzCq1M,EAAqB,SAAUC,EAAUC,GAC3C,OAAOA,EAAOv1M,YAAc5B,EAAek3M,IAEzCE,EAAc,CAChBL,oBAAqBA,EACrBC,eAAgBA,EAChBh3M,eAAgBA,EAChBi3M,mBAAoBA,GAGlBI,EAAgB,SAAUxrP,EAAQ6c,EAAOuF,GAC3C,IACIqpO,EADAC,EAAe,GAEnB,GAAK7uO,EA8CL,OA3CA9b,EAAS+N,KAAK+N,EAAMwE,MAAM,SAAS,SAAUw0B,GAC3C,IAAI06I,EACAo7D,EAAsB,WACxB,IAAI9/O,EAAY7L,EAAO6L,UACnBgqC,EAAK51C,SAAS8hD,eAChBl2C,EAAUssN,gBAAgBtiL,EAAK51C,SAAS8hD,eAAe,SAAUtiB,GAC/DoW,EAAKkmB,OAAOt8B,MACX,GAEDoW,EAAK51C,SAAS2rP,uBAChB//O,EAAUssN,gBAAgBtiL,EAAK51C,SAAS2rP,uBAAuB,SAAUnsN,GACvEoW,EAAK7hC,SAASyrB,OAIP,MAAToW,EACF41M,EAAc,MAETA,IACHA,EAAc,CACZhqP,KAAM,cACNob,MAAO,IAET6uO,EAAa7kP,KAAK4kP,IAEhBzrP,EAAOgf,QAAQ62B,KACjB06I,EAAW16I,EACXA,EAAO71C,EAAOgf,QAAQuxK,GACF,oBAAT16I,IACTA,EAAOA,KAETA,EAAKp0C,KAAOo0C,EAAKp0C,MAAQ,SACzBo0C,EAAKzzB,KAAOA,EACZyzB,EAAO52B,EAAS9O,OAAO0lC,GACvB41M,EAAY5uO,MAAMhW,KAAKgvC,GACnB71C,EAAO8+L,YACT6sD,IAEA3rP,EAAO4O,GAAG,OAAQ+8O,QAKnB,CACLlqP,KAAM,UACN+L,OAAQ,OACRqP,MAAO6uO,IAGPG,EAAiB,SAAU7rP,EAAQoiB,GACrC,IAAIsoO,EAAW,GACXoB,EAAa,SAAUjvO,GACrBA,GACF6tO,EAAS7jP,KAAK2kP,EAAcxrP,EAAQ6c,EAAOuF,KAM/C,GAHArhB,EAAS+N,KAAK87O,EAAY5qP,IAAS,SAAUqqH,GAC3CyhI,EAAWzhI,MAETqgI,EAASznP,OACX,MAAO,CACLxB,KAAM,QACN+L,OAAQ,QACRhG,QAAS,cACTukP,UAAU,EACVvzO,cAAc,EACdqE,MAAO6tO,IAITsB,EAAU,CACZR,cAAeA,EACfK,eAAgBA,GAGdrrP,EAAM0Q,EAAS1Q,IACfyrP,GAAe,SAAUC,GAC3B,MAAO,CACL/oN,KAAM+oN,EAAS31O,EACf6sB,IAAK8oN,EAAS11O,EACduX,MAAOm+N,EAASxrP,EAChBstB,OAAQk+N,EAAS15O,EACjBkxF,MAAOwoJ,EAAS31O,EAAI21O,EAASxrP,EAC7Bo3C,OAAQo0M,EAAS11O,EAAI01O,EAAS15O,IAG9B25O,GAAwB,SAAUnsP,GACpCe,EAAS+N,KAAK9O,EAAO40O,iBAAiB,SAAUvqH,GAC1CA,EAAQtyG,OACVsyG,EAAQtyG,MAAMkrB,WAIhBmpN,GAAc,SAAUr0O,EAAOw8B,GACjCx8B,EAAMk+B,OAAO1B,EAAIpR,KAAMoR,EAAInR,MAEzBipN,GAAsB,SAAUt0O,EAAOu0O,EAAQ7hO,GACjD6hO,EAASA,EAASA,EAAOxmO,OAAO,EAAG,GAAK,GACxC/kB,EAAS+N,KAAK,CACZzD,EAAG,OACH+P,EAAG,OACF,SAAUu+I,EAAKplH,GAChBx8B,EAAMvQ,QAAQiH,OAAO,SAAWkrJ,EAAKlvI,EAAU8pB,EAAK+3M,EAAOxmO,OAAO,EAAG,QAEvE/kB,EAAS+N,KAAK,CACZsoE,EAAG,OACHn7D,EAAG,UACF,SAAU09I,EAAKplH,GAChBx8B,EAAMvQ,QAAQiH,OAAO,SAAWkrJ,EAAKlvI,EAAU8pB,EAAK+3M,EAAOxmO,OAAO,EAAG,SAGrEymO,GAAgB,SAAUjsM,EAAS/pC,EAAGC,EAAGg2O,EAAaC,EAAiBC,GAczE,OAbAA,EAAYT,GAAa,CACvB11O,EAAGA,EACHC,EAAGA,EACH9V,EAAGgsP,EAAUhsP,EACb8R,EAAGk6O,EAAUl6O,IAEX8tC,IACFosM,EAAYpsM,EAAQ,CAClBksM,YAAaP,GAAaO,GAC1BC,gBAAiBR,GAAaQ,GAC9BC,UAAWA,KAGRA,GAELC,GAAwB,SAAU3sP,GACpC,IAAIg0L,EACA44D,EAAqB,WACvB,OAAO5sP,EAAO40O,iBAAmB,IAE/BiY,EAAiB,SAAU5kP,GAC7B,IAAIssC,EAAKglL,EAAYz2N,EAUrB,OATAyxC,EAAM/zC,EAAI20C,OAAOn1C,EAAOw1C,2BACxB+jL,EAAav5N,EAAOkM,IAAI63H,QAAQ97H,GAChCnF,EAAO9C,EAAOkM,IAAIo1C,UACI,SAAlBx+C,EAAKwB,WACPi1N,EAAWhjN,GAAKzT,EAAKi/B,cAAcs5C,gBAAgBjmC,YAActyC,EAAKsyC,WACtEmkL,EAAW/iN,GAAK1T,EAAKi/B,cAAcs5C,gBAAgBhmC,WAAavyC,EAAKuyC,WAEvEkkL,EAAWhjN,GAAKg+B,EAAIh+B,EACpBgjN,EAAW/iN,GAAK+9B,EAAI/9B,EACb+iN,GAEL/uD,EAAa,SAAUroK,EAAO2qP,GAChC,IAAIR,EAAQI,EAAWF,EAAaC,EAAiB10O,EAAOg1O,EAASC,EAAeC,EAChF3sM,EAAU2pM,EAAgCjqP,GAC9C,IAAIA,EAAO0/B,QAGX,GAAKv9B,GAAUA,EAAMkoH,QAAQtyG,MAA7B,CAIAi1O,EAAgB,CACd,QACA,QACA,QACA,QACA,QACA,SAEFj1O,EAAQ5V,EAAMkoH,QAAQtyG,MAClB+0O,GACF/0O,EAAMirB,OAERwpN,EAAcK,EAAe1qP,EAAM4B,SACnC2oP,EAAYlsP,EAAIujI,QAAQhsH,EAAMC,SAC9By0O,EAAkBjsP,EAAIujI,QAAQ/jI,EAAOw1C,2BAA6Bx1C,EAAOoU,WACzE,IAAIwR,EAAQ2lO,EAAYL,oBAAoBnzO,GAAOgC,MAAM,CACvDxD,EAAG,EACHC,EAAG,IASL,GAPAg2O,EAAYj2O,GAAKqP,EAAMrP,EACvBi2O,EAAYh2O,GAAKoP,EAAMpP,EACvBk2O,EAAUn2O,GAAKqP,EAAMrP,EACrBm2O,EAAUl2O,GAAKoP,EAAMpP,EACrBi2O,EAAgBl2O,GAAKqP,EAAMrP,EAC3Bk2O,EAAgBj2O,GAAKoP,EAAMpP,EAC3By2O,EAA6B,GACwB,WAAjDzsP,EAAIy0C,SAAS9yC,EAAM4B,QAAS,WAAW,GAAoB,CAC7D,IAAIsgK,EAAaliK,EAAM4B,QAAQ+nG,wBAC/B0gJ,EAAY9rP,EAAI2jK,EAAWt2I,MAC3By+N,EAAYh6O,EAAI6xJ,EAAWr2I,OAExBhuB,EAAOkQ,SACVu8O,EAAgB/rP,EAAIV,EAAOyP,SAAS4rE,gBAAgBh2C,aAElDrlC,EAAO6L,UAAU6yL,iBAAiBoyB,YAAY3uN,EAAM4B,UAAYyoP,EAAY9rP,EAAIusP,IAClFT,EAAcjtN,EAASmF,QAAQ8nN,EAAa,EAAG,IAEjDF,EAAS/sN,EAASi6M,yBAAyBkT,EAAWF,EAAaC,EAAiBO,GACpFR,EAAcjtN,EAASlK,MAAMm3N,EAAaC,GACtCH,GACFS,EAAUxtN,EAAS85M,iBAAiBqT,EAAWF,EAAaF,GAC5DF,GAAYr0O,EAAOw0O,GAAcjsM,EAASysM,EAAQx2O,EAAGw2O,EAAQv2O,EAAGg2O,EAAaC,EAAiBC,MAE9FD,EAAgBj6O,GAAKk6O,EAAUl6O,EAC/Bg6O,EAAcjtN,EAASo6M,UAAU8S,EAAiBD,GAC9CA,GACFF,EAAS/sN,EAASi6M,yBAAyBkT,EAAWF,EAAaC,EAAiB,CAClF,QACA,QACA,UAEEH,GACFS,EAAUxtN,EAAS85M,iBAAiBqT,EAAWF,EAAaF,GAC5DF,GAAYr0O,EAAOw0O,GAAcjsM,EAASysM,EAAQx2O,EAAGw2O,EAAQv2O,EAAGg2O,EAAaC,EAAiBC,KAE9FN,GAAYr0O,EAAOw0O,GAAcjsM,EAASksM,EAAYj2O,EAAGi2O,EAAYh2O,EAAGg2O,EAAaC,EAAiBC,KAGxG30O,EAAMkrB,QAGVopN,GAAoBt0O,EAAOu0O,GAAQ,SAAU7mF,EAAMC,GACjD,OAAOD,IAASC,UAjEhBymF,GAAsBnsP,IAoEtBktP,EAAoB,SAAUlqN,GAChC,OAAO,WACL,IAAI+nF,EAAU,WACR/qH,EAAO6L,WACT2+J,EAAW2iF,EAAmBntP,EAAO6L,UAAUC,WAAYk3B,IAG/DjD,EAASsyG,sBAAsBtnB,KAG/BqiI,EAAkB,SAAUr1O,GAC9B,IAAKi8K,EAAiB,CACpB,IAAIq5D,EAAeH,GAAkB,GACjCI,EAAgB/B,EAAYp3M,eAAep8B,GAC/Ci8K,EAAkBh0L,EAAO6L,UAAUooL,sBAAwBj0L,EAAOm7H,SAClE36H,EAAIia,KAAKu5K,EAAiB,SAAUq5D,GACpC7sP,EAAIia,KAAK6yO,EAAe,SAAUD,GAClCrtP,EAAO4O,GAAG,UAAU,WAClBpO,EAAI2uE,OAAO6kH,EAAiB,SAAUq5D,GACtC7sP,EAAI2uE,OAAOm+K,EAAe,SAAUD,QAItCE,EAAqB,SAAUprP,GACjC,IAAI4V,EACJ,GAAI5V,EAAMkoH,QAAQtyG,MAGhB,OAFA5V,EAAMkoH,QAAQtyG,MAAMirB,YACpBwnI,EAAWroK,GAGb4V,EAAQkH,EAAS9O,OAAO,CACtB1O,KAAM,aACN8W,KAAM,SACN/Q,QAAS,+BACTwG,UAAW,iBACXR,OAAQ,OACRC,UAAW,SACXC,MAAO,UACPgmE,UAAU,EACV85K,SAAS,EACTtgC,OAAO,EACPxjL,OAAQ,EACR7sB,MAAOmvO,EAAQR,cAAcxrP,EAAQmC,EAAMkoH,QAAQxtG,OACnD4wO,SAAU,WACRztP,EAAOkV,WAGXq2O,EAAYJ,eAAenrP,EAAQ+X,GACnCq1O,EAAgBr1O,GAChB5V,EAAMkoH,QAAQtyG,MAAQA,EACtBA,EAAMi+B,WAAW03M,SACjBljF,EAAWroK,IAETwrP,EAAyB,WAC3B5sP,EAAS+N,KAAK89O,KAAsB,SAAUviI,GACxCA,EAAQtyG,OACVsyG,EAAQtyG,MAAMkrB,WAIhBkqN,EAAqB,SAAUzzL,GACjC,IAAIl2D,EAAGgT,EAAGgqK,EACNkqE,EAAWkC,IAEf,IADApsE,EAAiBxgL,EAAOsM,EAAEotD,GAAWoC,UAAU30D,IAAIuyD,GAC9Cl2D,EAAIg9K,EAAev9K,OAAS,EAAGO,GAAK,EAAGA,IAC1C,IAAKgT,EAAIk0O,EAASznP,OAAS,EAAGuT,GAAK,EAAGA,IACpC,GAAIk0O,EAASl0O,GAAGiU,UAAU+1J,EAAeh9K,IACvC,MAAO,CACL6mH,QAASqgI,EAASl0O,GAClBzS,QAASy8K,EAAeh9K,IAKhC,OAAO,MAETxD,EAAO4O,GAAG,wCAAwC,SAAUR,IAC3C,eAAXA,EAAE3M,MAA0B2M,EAAEvC,YAGlCk0B,EAAS1U,iBAAiBrrB,GAAQ,WAChC,IAAImC,EACJA,EAAQgrP,EAAmBntP,EAAO6L,UAAUC,WACxC3J,GACFwrP,IACAJ,EAAmBprP,IAEnBwrP,UAIN3tP,EAAO4O,GAAG,wBAAyB++O,GACnC3tP,EAAO4O,GAAG,qBAAqB,WAC7B,IAAIzM,EAAQgrP,EAAmBntP,EAAO6L,UAAUC,WAC5C3J,GAASA,EAAMkoH,QAAQtyG,OACzB5V,EAAMkoH,QAAQtyG,MAAMkrB,UAGxBjjC,EAAO4O,GAAG,4BAA6Bs+O,GAAkB,IACzDltP,EAAO4O,GAAG,aAAcs+O,GAAkB,IAC1CltP,EAAO4O,GAAG,UAAU,WAClB7N,EAAS+N,KAAK89O,KAAsB,SAAUviI,GACxCA,EAAQtyG,OACVsyG,EAAQtyG,MAAM1C,YAGlBrV,EAAO40O,gBAAkB,MAE3B50O,EAAOsc,UAAUnV,IAAI,UAAW,IAAI,WAClC,IAAIhF,EAAQgrP,EAAmBntP,EAAO6L,UAAUC,WAC5C3J,GAASA,EAAMkoH,QAAQtyG,OACzB5V,EAAMkoH,QAAQtyG,MAAM8E,QAAQ,GAAG3H,YAIjC04O,GAAkB,CAAEjB,sBAAuBA,IAE3CrxO,GAAS,SAAU/E,GACrB,GAAU,OAANA,EACF,MAAO,OAET,IAAIlL,SAAWkL,EACf,MAAU,WAANlL,IAAmBtE,MAAM/E,UAAUuZ,cAAchF,IAAMA,EAAEiF,aAAsC,UAAvBjF,EAAEiF,YAAYpU,MACjF,QAEC,WAANiE,IAAmBoQ,OAAOzZ,UAAUuZ,cAAchF,IAAMA,EAAEiF,aAAsC,WAAvBjF,EAAEiF,YAAYpU,MAClF,SAEFiE,GAELqQ,GAAS,SAAUja,GACrB,OAAO,SAAUrC,GACf,OAAOkc,GAAOlc,KAAWqC,IAGzBqmB,GAAUpM,GAAO,SACjBC,GAAaD,GAAO,YACpB6oC,GAAW7oC,GAAO,UAElBE,GAAc7U,MAAM/E,UAAUwE,MAC9BqV,GAAgB9U,MAAM/E,UAAUkG,QAChCs8C,GAAaz9C,MAAM/E,UAAU6E,KAC7BiV,GAAa,SAAUC,EAAI1Q,GAC7B,OAAOwQ,GAAc3Z,KAAK6Z,EAAI1Q,IAE5BnD,GAAU,SAAU8T,EAAIzF,GAC1B,IAAI0F,EAAIH,GAAWE,EAAIzF,GACvB,OAAc,IAAP0F,EAAWZ,EAAOhC,OAASgC,EAAOL,KAAKiB,IAE5CvB,GAAS,SAAUsB,EAAIE,GACzB,IAAK,IAAI1Y,EAAI,EAAGiD,EAAMuV,EAAG/Y,OAAQO,EAAIiD,EAAKjD,IAAK,CAC7C,IAAI+S,EAAIyF,EAAGxY,GACX,GAAI0Y,EAAK3F,EAAG/S,GACV,OAAO,EAGX,OAAO,GAEL5B,GAAM,SAAUoa,EAAI9C,GAGtB,IAFA,IAAIzS,EAAMuV,EAAG/Y,OACTgZ,EAAI,IAAIlV,MAAMN,GACTjD,EAAI,EAAGA,EAAIiD,EAAKjD,IAAK,CAC5B,IAAI+S,EAAIyF,EAAGxY,GACXyY,EAAEzY,GAAK0V,EAAE3C,EAAG/S,GAEd,OAAOyY,GAELnN,GAAO,SAAUkN,EAAI9C,GACvB,IAAK,IAAI1V,EAAI,EAAGiD,EAAMuV,EAAG/Y,OAAQO,EAAIiD,EAAKjD,IAAK,CAC7C,IAAI+S,EAAIyF,EAAGxY,GACX0V,EAAE3C,EAAG/S,KAGLqL,GAAS,SAAUmN,EAAIE,GAEzB,IADA,IAAID,EAAI,GACCzY,EAAI,EAAGiD,EAAMuV,EAAG/Y,OAAQO,EAAIiD,EAAKjD,IAAK,CAC7C,IAAI+S,EAAIyF,EAAGxY,GACP0Y,EAAK3F,EAAG/S,IACVyY,EAAEpV,KAAK0P,GAGX,OAAO0F,GAEL2oC,GAAQ,SAAU5oC,EAAI9C,EAAG2rC,GAI3B,OAHA/1C,GAAKkN,GAAI,SAAUzF,GACjBsuC,EAAM3rC,EAAE2rC,EAAKtuC,MAERsuC,GAELt1C,GAAO,SAAUyM,EAAIE,GACvB,IAAK,IAAI1Y,EAAI,EAAGiD,EAAMuV,EAAG/Y,OAAQO,EAAIiD,EAAKjD,IAAK,CAC7C,IAAI+S,EAAIyF,EAAGxY,GACX,GAAI0Y,EAAK3F,EAAG/S,GACV,OAAO6X,EAAOL,KAAKzE,GAGvB,OAAO8E,EAAOhC,QAEZsiD,GAAY,SAAU3/C,EAAIE,GAC5B,IAAK,IAAI1Y,EAAI,EAAGiD,EAAMuV,EAAG/Y,OAAQO,EAAIiD,EAAKjD,IAAK,CAC7C,IAAI+S,EAAIyF,EAAGxY,GACX,GAAI0Y,EAAK3F,EAAG/S,GACV,OAAO6X,EAAOL,KAAKxX,GAGvB,OAAO6X,EAAOhC,QAEZyrC,GAAU,SAAU9oC,GAEtB,IADA,IAAIC,EAAI,GACCzY,EAAI,EAAGiD,EAAMuV,EAAG/Y,OAAQO,EAAIiD,IAAOjD,EAAG,CAC7C,IAAKskB,GAAQ9L,EAAGxY,IACd,MAAM,IAAI2W,MAAM,oBAAsB3W,EAAI,6BAA+BwY,GAE3EwoC,GAAWv9C,MAAMgV,EAAGD,EAAGxY,IAEzB,OAAOyY,GAML4xO,IAJSlyO,GAAW5U,MAAMT,OAAQS,MAAMT,KAIzB,CACjBq6C,KAAM,CACJ53C,MAAO,OACP8T,MAAO,8CAET4tB,KAAM,CACJ1hC,MAAO,OACP8T,MAAO,oDAET41G,KAAM,CACJ1pH,MAAO,OACP8T,MAAO,iFAETha,OAAQ,CACNkG,MAAO,SACP8T,MAAO,qHAETlI,OAAQ,CACN5L,MAAO,SACP8T,MAAO,4GAETixO,MAAO,CACL/kP,MAAO,QACP8T,MAAO,sDAETu8E,MAAO,CAAErwF,MAAO,SAChBglP,KAAM,CAAEhlP,MAAO,UAEbilP,GAAwB,WAC1B,MAAO,CACL5mP,KAAM,IACNyuC,KAAM,CAAEpwC,KAAM,OAGdwoP,GAAyB,SAAU7mP,EAAMyuC,GAC3C,IAAIwC,EAAWxC,EAAO,CACpBzuC,KAAMA,EACNyuC,KAAMA,GACJ,KACJ,MAAgB,MAATzuC,EAAe4mP,KAA0B31M,GAE9C61M,GAAc,SAAUC,EAAgB/mP,GAC1C,OAAOu0D,GAAUwyL,GAAgB,SAAUC,GACzC,OAAOA,EAAchnP,OAASA,KAC7B0S,UAEDmrO,GAAc,SAAUmJ,GAC1B,OAAOA,GAA6C,MAA5BA,EAAcv4M,KAAKpwC,MAEzC4oP,GAAc,SAAUF,EAAgBG,GAC1C,IAAIC,EAAiB1/O,GAAOs/O,GAAgB,SAAUC,GACpD,OAA+D,IAAxDE,EAAiBjsP,eAAe+rP,EAAchnP,SAEnDonP,EAAiB3/O,GAAO0/O,GAAgB,SAAUH,EAAe5qP,GACnE,OAAQyhP,GAAYmJ,KAAmBnJ,GAAYsJ,EAAe/qP,EAAI,OAExE,OAAOqL,GAAO2/O,GAAgB,SAAUJ,EAAe5qP,GACrD,OAAQyhP,GAAYmJ,IAAkB5qP,EAAI,GAAKA,EAAIgrP,EAAevrP,OAAS,MAG3EwrP,GAAa,SAAUC,EAAiBC,EAAOL,EAAkB95O,GACnE,IAAIo6O,EAAYj5M,EAAMw4M,EAAgBU,EAOtC,OANIF,GACFh5M,EAAOg5M,EAAMn6O,GACbq6O,GAAgB,GAEhBl5M,EAAOk4M,GAAar5O,GAElBmhC,IACFi5M,EAAa,CAAEnpP,KAAMkwC,EAAK5sC,OAC1BolP,EAAiB,GACjBptP,EAAS+N,MAAM6mC,EAAK94B,OAAS,IAAIwE,MAAM,SAAS,SAAUja,GACxD,IAAIgnP,EAAgBH,GAAuB7mP,EAAMsnP,EAAgBtnP,IAC7DgnP,GACFD,EAAetnP,KAAKunP,MAGnBS,GACH9tP,EAAS+N,KAAK4/O,GAAiB,SAAU74M,EAAMzuC,GACzCyuC,EAAKrhC,UAAYA,GAAY05O,GAAYC,EAAgB/mP,KACpC,WAAnByuC,EAAKhJ,WACPshN,EAAetnP,KAAKmnP,MAElBn4M,EAAKmM,iBACPmsM,EAAexuK,QAAQsuK,GAAuB7mP,EAAMyuC,IAEpDs4M,EAAetnP,KAAKonP,GAAuB7mP,EAAMyuC,IAE5B,UAAnBA,EAAKhJ,WACPshN,EAAetnP,KAAKmnP,UAK5BY,EAAWj5M,KAAO/zC,GAAIysP,GAAYF,EAAgBG,IAAmB,SAAUj2M,GAC7E,OAAOA,EAASxC,SAEb+4M,EAAWj5M,KAAK1yC,QACZ,KAGJ2rP,GAELE,GAAoB,SAAU9uP,GAChC,IAAIoH,EACA2nP,EAAiB,GACjBp5M,EAAOu0M,EAAQlqP,GACnB,GAAI21C,EACF,IAAKvuC,KAAQuuC,EACXo5M,EAAeloP,KAAKO,QAGtB,IAAKA,KAAQymP,GACXkB,EAAeloP,KAAKO,GAGxB,OAAO2nP,GAELC,GAAoB,SAAUhvP,GAMhC,IALA,IAAIivP,EAAc,GACdF,EAAiBD,GAAkB9uP,GACnCsuP,EAAmBvtP,EAAS4/D,QAAQwpL,EAAoBnqP,GAAQqhB,MAAM,SACtE6tO,EAAUrF,EAAW7pP,GACrBmvP,EAAsC,kBAAZD,EAAuBA,EAAQ7tO,MAAM,QAAU0tO,EACpEvrP,EAAI,EAAGA,EAAI2rP,EAAiBlsP,OAAQO,IAAK,CAChD,IAAIsyC,EAAYq5M,EAAiB3rP,GAC7BmyC,EAAO84M,GAAWzuP,EAAO81C,UAAWo0M,EAAQlqP,GAASsuP,EAAkBx4M,GACvEH,GACFs5M,EAAYpoP,KAAK8uC,GAGrB,OAAOs5M,GAELG,GAAU,CAAEJ,kBAAmBA,IAE/Bt6L,GAAQxjD,EAAS1Q,IACjBm6C,GAAU,SAAU1yC,GACtB,MAAO,CACL8lB,MAAO9lB,EAAIi9B,YACXlX,OAAQ/lB,EAAIk9B,eAGZkqN,GAAW,SAAUrvP,EAAQ+tB,EAAOC,GACtC,IAAIyS,EAAcxS,EAAWqhO,EAAeC,EAC5C9uN,EAAezgC,EAAOokF,eACtBn2D,EAAYjuB,EAAOw1C,0BAA0Bt9B,WAC7Co3O,EAAgB30M,GAAQla,GACxB8uN,EAAa50M,GAAQ1sB,GACP,OAAVF,IACFA,EAAQztB,KAAK8oB,IAAI65D,EAAYjjF,GAAS+tB,GACtCA,EAAQztB,KAAKC,IAAI+rF,EAAYtsF,GAAS+tB,GACtC2mC,GAAM0B,SAAS31B,EAAc,QAAS1S,GAASuhO,EAAcvhO,MAAQwhO,EAAWxhO,QAChF2mC,GAAM0B,SAASnoC,EAAW,QAASF,IAErCC,EAAS1tB,KAAK8oB,IAAI85D,EAAaljF,GAASguB,GACxCA,EAAS1tB,KAAKC,IAAIgsF,EAAavsF,GAASguB,GACxC0mC,GAAM0B,SAASnoC,EAAW,SAAUD,GACpCyvC,EAAOqtL,iBAAiB9qP,IAEtBwvP,GAAW,SAAUxvP,EAAQyvP,EAAIC,GACnC,IAAIznP,EAAMjI,EAAOw1C,0BACjB65M,GAASrvP,EAAQiI,EAAIi9B,YAAcuqN,EAAIxnP,EAAIk9B,aAAeuqN,IAExDvI,GAAS,CACXkI,SAAUA,GACVG,SAAUA,IAGRtvN,GAAWxgC,QAAQC,KAAKC,MAAMC,QAAQ,eAEtCi9F,GAAM,SAAU70F,GAClB,MAAO,CACLlE,QAAS,WACP,OAAOkE,KAIT+qH,GAAU,SAAU28H,EAAS53O,EAAO63O,GACtC,IAAIrsP,EAAWosP,EAAQ1vP,SAAS2vP,GAC5BrsP,GACFA,EAASu5F,GAAI/kF,EAAMC,MAAM,WAGzBywB,GAAa,SAAUrhC,EAAMif,EAAW6pN,GAC1CnvO,EAAS+N,KAAKohO,GAAU,SAAUyf,GAChC,IAAI53O,EAAQsO,EAAUxJ,QAAQhO,OAAO,IAAM8gP,EAAQvoP,MAAM,GACrD2Q,GAASA,EAAM83O,WAAaF,EAAQvoP,OAASA,IAC/C4rH,GAAQ28H,EAAS53O,EAAO,UACxBA,EAAM83O,SAAQ,QAIhBC,GAAoB,SAAUzlI,GAChCA,EAAQxtG,QAAQ/N,MAAK,SAAUgF,GAC7BA,EAAKioD,QAAO,OAGZg0L,GAAc,SAAU7f,EAAU9oO,GACpC,OAAOrG,EAASinB,KAAKkoN,GAAU,SAAUyf,GACvC,OAAOA,EAAQvoP,OAASA,KACvB,IAED4oP,GAAY,SAAUhwP,EAAQoH,EAAM8oO,GACtC,OAAO,SAAU9hO,GACf,IAAI6hP,EAAU7hP,EAAE2F,QACZsS,EAAY4pO,EAAQn0L,UAAUjtD,OAAO,SAAS,GAC9CkJ,EAAQsO,EAAU9W,KAAK,IAAMnI,GAAM,GACnCuoP,EAAUI,GAAY7f,EAAU9oO,GACpCqhC,GAAWrhC,EAAMif,EAAW6pN,GAC5B4f,GAAkBG,EAAQ/rP,UACtB6T,GAASA,EAAM83O,WACjB78H,GAAQ28H,EAAS53O,EAAO,UACxBA,EAAMkrB,OACNgtN,EAAQl0L,QAAO,KAEXhkD,GACFA,EAAMirB,OACNgwF,GAAQ28H,EAAS53O,EAAO,YAExBA,EAAQkH,EAAS9O,OAAO,CACtB1O,KAAM,YACN2F,KAAMA,EACNoG,OAAQ,QACRhG,QAAS,gBACTyB,KAAM,KAERod,EAAUmwE,QAAQz+E,GAClBi7G,GAAQ28H,EAAS53O,EAAO,YACxBi7G,GAAQ28H,EAAS53O,EAAO,WAE1Bk4O,EAAQl0L,QAAO,IAEjB0B,EAAOqtL,iBAAiB9qP,KAGxBkwP,GAAkB,WACpB,OAAQhwN,GAASvS,IAAMuS,GAASvS,IAAM,IAEpCwiO,GAAa,SAAUnwP,GACzB,SAAOkwP,OAAqBlwP,EAAOkwO,WAAWlwO,EAAOkwO,SAASjtO,OAAS,GAErEmtP,GAAgB,SAAUpwP,GAC5B,IAAIgf,EAAUje,EAASa,IAAI5B,EAAOkwO,UAAU,SAAUyf,GACpD,IAAI1vP,EAAW0vP,EAAQ1vP,SACvB,MAAO,CACLwB,KAAM,SACNoP,KAAM5Q,EAAS4Q,KACf8d,MAAO1uB,EAAS0uB,MAChBra,QAASrU,EAASqU,QAClBmE,QAASu3O,GAAUhwP,EAAQ2vP,EAAQvoP,KAAMpH,EAAOkwO,cAGpD,MAAO,CACLzuO,KAAM,QACN2F,KAAM,UACNoG,OAAQ,QACRhG,QAAS,UACTqV,MAAO,CAAC,CACJpb,KAAM,UACN+L,OAAQ,QACRhG,QAAS,kBACTqV,MAAOmC,MAIXmxN,GAAU,CACZggB,WAAYA,GACZC,cAAeA,IAGbC,GAAmB,SAAUrwP,GAC/B,IAAIswB,EAAO,WACTtwB,EAAO8pM,aAAc,EACrBrsI,EAAOotL,eAAe7qP,IAExB,OAAO,WACDA,EAAO8+L,YACTxuK,IAEAtwB,EAAO4O,GAAG,OAAQ0hB,KAIpBggO,GAAa,CAAEzF,eAAgBwF,IAE/Bx3L,GAAQ3nD,EAAS1Q,IACjB+vP,GAAa,SAAUx4O,GACzB,OAAO,SAAU3J,GACf2J,EAAMxI,KAAK,KAAKyE,SAAoB,aAAX5F,EAAEmnH,QAG3Bi7H,GAAW,SAAU9mN,GACvB,MAAO,CACLjoC,KAAM,QACN2F,KAAM,SACNoG,OAAQ,QACRhG,QAAS,YACTkiC,OAAQA,EACRzgC,KAAM,KAGNwnP,GAAoB,SAAUzwP,GAChC,MAAO,CACLyB,KAAM,QACN+L,OAAQ,QACRhG,QAAS,sBACTkiC,OAAQ,UACR7sB,MAAO,CACL2zO,GAAS,KACTrgB,GAAQigB,cAAcpwP,MAIxBurB,GAAS,SAAUvrB,EAAQg8L,EAAOp1L,GACpC,IAAImR,EAAO24O,EAAkBC,EAkD7B,IAjD+B,IAA3BvG,EAAepqP,IAAqB4G,EAAKgqP,UAC3C/3L,GAAM6+F,iBAAiBxmE,KAAKtqF,EAAKgqP,UAAWN,GAAWzF,eAAe7qP,IAEtEswP,GAAWzF,eAAe7qP,EAA1BswP,GAEFv4O,EAAQikL,EAAMjkL,MAAQkH,EAAS9O,OAAO,CACpC1O,KAAM,QACN8W,KAAM,cACN/Q,QAAS,UACTqC,MAAO,qBACP2D,OAAQ,QACRk8B,OAAQ,EACR7sB,MAAO,CACL,CACEpb,KAAM,YACN+F,QAAS,WACTqV,MAAO,EACkB,IAAvB+sO,EAAW5pP,GAAoB,KAAO,CACpCyB,KAAM,UACNioC,OAAQ,UACR7sB,MAAOuyO,GAAQJ,kBAAkBhvP,IAEnCgsP,EAAQH,eAAe7rP,EAAQ+pP,EAAe/pP,MAGlDmwO,GAAQggB,WAAWnwP,GAAUywP,GAAkBzwP,GAAUwwP,GAAS,cAGtEjF,EAAYJ,eAAenrP,EAAQ+X,GACT,SAAtBsyO,EAAUrqP,KACZ0wP,EAAmB,CACjBjvP,KAAM,eACNgM,UAAW48O,EAAUrqP,GACrB6wP,cAAe,WACb,IAAI5oP,EAAMjI,EAAOw1C,0BAA0Bt9B,WAC3Cy4O,EAAY,CACV5iO,MAAO9lB,EAAIi9B,YACXlX,OAAQ/lB,EAAIk9B,eAGhB2rN,SAAU,SAAU1iP,GACQ,SAAtBi8O,EAAUrqP,GACZmnP,GAAOkI,SAASrvP,EAAQ2wP,EAAU5iO,MAAQ3f,EAAEkzB,OAAQqvN,EAAU3iO,OAAS5f,EAAEmzB,QAEzE4lN,GAAOkI,SAASrvP,EAAQ,KAAM2wP,EAAU3iO,OAAS5f,EAAEmzB,WAKvDuoN,EAAa9pP,GAAS,CACxB,IAAI+wP,EAAW,2LACX9nP,EAAOq2B,EAASlsB,UAAU,CAC5B,iBACA29O,IAEEC,EAAgBrH,EAAkB3pP,GAAU,CAC9CyB,KAAM,QACN+F,QAAS,WACTyB,KAAM,IAAMA,GACV,KACJ8O,EAAM5Q,IAAI,CACR1F,KAAM,QACN2F,KAAM,YACNI,QAAS,YACTgG,OAAQ,OACRk8B,OAAQ,UACRqiN,UAAU,EACVlvO,MAAO,CACL,CACEpb,KAAM,cACNzB,OAAQA,GAEV0wP,EACAM,KAmBN,OAfAvzL,EAAOstL,mBAAmB/qP,GAC1BA,EAAO4O,GAAG,aAAc2hP,GAAWx4O,IACnCA,EAAMk5O,aAAarqP,EAAKquD,YAAYy4L,SAChC3uD,EAAW/+L,IACbA,EAAO4+L,QAAQ,YAEbh4L,EAAKmnB,OACP8qC,GAAMzC,SAASr+C,EAAMC,QAAS,QAASpR,EAAKmnB,OAE9C/tB,EAAO4O,GAAG,UAAU,WAClBmJ,EAAM1C,SACN0C,EAAQ,QAEVkzO,EAAKD,QAAQhrP,EAAQ+X,GACrB61O,GAAgBjB,sBAAsB3sP,GAC/B,CACLitO,gBAAiBl1N,EAAMxI,KAAK,WAAW,GAAGyI,QAC1CgsE,gBAAiBjsE,EAAMC,UAGvBk5O,GAAS,CAAE3lO,OAAQA,IAEnB4U,GAAWzgC,QAAQC,KAAKC,MAAMC,QAAQ,wBAEtC4W,GAAQ,EACR06O,GAAQ,CACV3uP,GAAI,WACF,MAAO,QAAUiU,MAEnBtG,OAAQ,SAAU/I,EAAMwkB,EAAOhY,GAC7B,IAAI3L,EAAMhJ,EAAW4E,SAASsqB,cAAc/mB,GAW5C,OAVA8J,EAAS1Q,IAAIghB,WAAWvZ,EAAK2jB,GACL,kBAAbhY,EACT3L,EAAI9C,UAAYyO,EAEhB7S,EAAS+N,KAAK8E,GAAU,SAAUs7C,GAC5BA,EAAM3oC,UACRte,EAAIsI,YAAY2+C,MAIfjnD,GAET2rD,eAAgB,SAAU3qD,GACxB,OAAOiI,EAAS1Q,IAAIozD,eAAe3qD,IAErCs6E,cAAe,WACb,OAAOryE,EAAS1Q,IAAIC,eAEtBk6C,QAAS,SAAU1yC,GACjB,IAAI8lB,EAAOC,EACX,GAAI/lB,EAAI6jG,sBAAuB,CAC7B,IAAItqE,EAAOv5B,EAAI6jG,wBACf/9E,EAAQztB,KAAK8oB,IAAIoY,EAAKzT,OAASyT,EAAKkiE,MAAQliE,EAAK2B,KAAMl7B,EAAIo9B,aAC3DrX,EAAS1tB,KAAK8oB,IAAIoY,EAAKxT,QAAUwT,EAAKsW,OAAStW,EAAKsW,OAAQ7vC,EAAIq9B,mBAEhEvX,EAAQ9lB,EAAIo9B,YACZrX,EAAS/lB,EAAIq9B,aAEf,MAAO,CACLvX,MAAOA,EACPC,OAAQA,IAGZmnB,OAAQ,SAAUltC,EAAKnF,GACrB,OAAOoO,EAAS1Q,IAAI20C,OAAOltC,EAAKnF,GAAQquP,GAAM/sK,iBAEhDA,aAAc,WACZ,OAAOlkD,GAAS7Z,UAAY6Z,GAAS7Z,UAAYpnB,EAAW4E,SAAS8J,MAEvElN,YAAa,SAAUslC,GACrB,OAAO70B,EAAS1Q,IAAIC,YAAYslC,IAElC1mC,IAAK,SAAUmD,GACb,OAAOvD,EAAW4E,SAASu2I,eAAe53I,IAE5CsiF,SAAU,SAAU78E,EAAK0xJ,GACvB,OAAOzoJ,EAAS1Q,IAAIskF,SAAS78E,EAAK0xJ,IAEpCl1E,YAAa,SAAUx8E,EAAK0xJ,GAC1B,OAAOzoJ,EAAS1Q,IAAIikF,YAAYx8E,EAAK0xJ,IAEvCpnJ,SAAU,SAAUtK,EAAK0xJ,GACvB,OAAOzoJ,EAAS1Q,IAAI+R,SAAStK,EAAK0xJ,IAEpCpoE,YAAa,SAAUtpF,EAAK0xJ,EAAKl6H,GAC/B,OAAOvuB,EAAS1Q,IAAI+wF,YAAYtpF,EAAK0xJ,EAAKl6H,IAE5Cr2B,IAAK,SAAUnB,EAAKb,EAAMhI,GACxB,OAAO8R,EAAS1Q,IAAI41D,SAASnuD,EAAKb,EAAMhI,IAE1CgyP,gBAAiB,SAAUnpP,EAAKb,GAC9B,OAAO8J,EAAS1Q,IAAIy0C,SAAShtC,EAAKb,GAAM,IAE1CwH,GAAI,SAAUqC,EAAQ7J,EAAM7D,EAAUk7B,GACpC,OAAOvtB,EAAS1Q,IAAIia,KAAKxJ,EAAQ7J,EAAM7D,EAAUk7B,IAEnDuQ,IAAK,SAAU/9B,EAAQ7J,EAAM7D,GAC3B,OAAO2N,EAAS1Q,IAAI2uE,OAAOl+D,EAAQ7J,EAAM7D,IAE3Co+B,KAAM,SAAU1wB,EAAQ7J,EAAMR,GAC5B,OAAOsK,EAAS1Q,IAAImhC,KAAK1wB,EAAQ7J,EAAMR,IAEzCgoF,UAAW,SAAU3mF,EAAKgB,GACxBiI,EAAS1Q,IAAIw4J,QAAQ/wJ,EAAKgB,KAI1BooP,GAAW,SAAUppP,GACvB,MAAkD,WAA3CkpP,GAAMC,gBAAgBnpP,EAAK,aAEhCqpP,GAAU,SAAUx9O,GACtB,OAAOA,EAAK2rB,MAAMpgC,IAAI,UAExB,SAASkyP,GAA0Bz9O,EAAM4lD,EAAWtpD,GAClD,IAAIohP,EAASj9M,EAAKh+B,EAAGC,EAAGi7O,EAAOC,EAAOpY,EAASC,EAASzpI,EAAU1tF,EAyClE,OAxCA0tF,EAAW6hJ,KACXp9M,EAAM48M,GAAMh8M,OAAOukB,EAAW6xL,EAAYp3M,eAAergC,IACzDyC,EAAIg+B,EAAIh+B,EACRC,EAAI+9B,EAAI/9B,EACJ86O,GAAQx9O,IAASu9O,GAASpyP,EAAW4E,SAAS8J,QAChD4I,GAAKu5F,EAASv5F,EACdC,GAAKs5F,EAASt5F,GAEhBg7O,EAAU19O,EAAKkE,QACfoK,EAAO+uO,GAAMx2M,QAAQ62M,GACrBC,EAAQrvO,EAAK2L,MACb2jO,EAAQtvO,EAAK4L,OACb5L,EAAO+uO,GAAMx2M,QAAQ+e,GACrB4/K,EAAUl3N,EAAK2L,MACfwrN,EAAUn3N,EAAK4L,OACf5d,GAAOA,GAAO,IAAIiR,MAAM,IACT,MAAXjR,EAAI,KACNoG,GAAK+iO,GAEQ,MAAXnpO,EAAI,KACNmG,GAAK+iO,GAEQ,MAAXlpO,EAAI,KACNoG,GAAKlW,KAAKm5B,MAAM8/M,EAAU,IAEb,MAAXnpO,EAAI,KACNmG,GAAKjW,KAAKm5B,MAAM6/M,EAAU,IAEb,MAAXlpO,EAAI,KACNoG,GAAKk7O,GAEQ,MAAXthP,EAAI,KACNmG,GAAKk7O,GAEQ,MAAXrhP,EAAI,KACNoG,GAAKlW,KAAKm5B,MAAMi4N,EAAQ,IAEX,MAAXthP,EAAI,KACNmG,GAAKjW,KAAKm5B,MAAMg4N,EAAQ,IAEnB,CACLl7O,EAAGA,EACHC,EAAGA,EACH9V,EAAG+wP,EACHj/O,EAAGk/O,GAGP,IAAIE,GAAyB,SAAUC,GACrC,MAAO,CACLt7O,EAAG,EACHC,EAAG,EACH9V,EAAGmxP,EAAkBp8C,YAAc,EACnCjjM,EAAGq/O,EAAkBn8C,aAAe,IAGpCi8C,GAAoB,WACtB,IAAI5rN,EAAM9mC,EAAW6B,OACjByV,EAAIjW,KAAK8oB,IAAI2c,EAAI4pE,YAAa1wG,EAAW4E,SAAS8J,KAAKynC,WAAYn2C,EAAW4E,SAASw3E,gBAAgBjmC,YACvG5+B,EAAIlW,KAAK8oB,IAAI2c,EAAI2pE,YAAazwG,EAAW4E,SAAS8J,KAAK0nC,UAAWp2C,EAAW4E,SAASw3E,gBAAgBhmC,WACtG30C,EAAIqlC,EAAIy9C,YAAcvkF,EAAW4E,SAASw3E,gBAAgBn2C,YAC1D1yB,EAAIuzB,EAAI09C,aAAexkF,EAAW4E,SAASw3E,gBAAgBl2C,aAC/D,MAAO,CACL5uB,EAAGA,EACHC,EAAGA,EACH9V,EAAGA,EACH8R,EAAGA,IAGH0hL,GAAkB,SAAUpgL,GAC9B,IAAI+9O,EAAoBtG,EAAYp3M,eAAergC,GACnD,OAAO+9O,IAAsBP,GAAQx9O,GAAQ89O,GAAuBC,GAAqBF,MAEvFG,GAAU,CACZC,YAAa,SAAU9pP,EAAKyxO,GAE1B,IADA,IAAIn5M,EAAe2zJ,GAAgB5wL,MAC1BE,EAAI,EAAGA,EAAIk2O,EAAKz2O,OAAQO,IAAK,CACpC,IAAI+wC,EAAMg9M,GAA0BjuP,KAAM2E,EAAKyxO,EAAKl2O,IACpD,GAAI8tP,GAAQhuP,OACV,GAAIixC,EAAIh+B,EAAI,GAAKg+B,EAAIh+B,EAAIg+B,EAAI7zC,EAAI6/B,EAAa7/B,GAAK6zC,EAAI/9B,EAAI,GAAK+9B,EAAI/9B,EAAI+9B,EAAI/hC,EAAI+tB,EAAa/tB,EAC3F,OAAOknO,EAAKl2O,QAGd,GAAI+wC,EAAIh+B,EAAIgqB,EAAahqB,GAAKg+B,EAAIh+B,EAAIg+B,EAAI7zC,EAAI6/B,EAAa7/B,EAAI6/B,EAAahqB,GAAKg+B,EAAI/9B,EAAI+pB,EAAa/pB,GAAK+9B,EAAI/9B,EAAI+9B,EAAI/hC,EAAI+tB,EAAa/tB,EAAI+tB,EAAa/pB,EACvJ,OAAOkjO,EAAKl2O,GAIlB,OAAOk2O,EAAK,IAEdnvD,QAAS,SAAUtiL,EAAKmI,GACH,kBAARA,IACTA,EAAM9M,KAAKyuP,YAAY9pP,EAAKmI,IAE9B,IAAImkC,EAAMg9M,GAA0BjuP,KAAM2E,EAAKmI,GAC/C,OAAO9M,KAAK2yC,OAAO1B,EAAIh+B,EAAGg+B,EAAI/9B,IAEhC8pF,OAAQ,SAAU9rD,EAAIC,GACpB,IAAIvzC,EAAOoC,KAAMk+B,EAAOtgC,EAAK8wP,aAE7B,OADA9wP,EAAK+0C,OAAOzU,EAAKjrB,EAAIi+B,EAAIhT,EAAKhrB,EAAIi+B,GAC3BvzC,GAET+0C,OAAQ,SAAU1/B,EAAGC,GACnB,IAAItV,EAAOoC,KACX,SAAS2uP,EAAU7yP,EAAOgqB,EAAKhH,GAC7B,OAAIhjB,EAAQ,EACH,EAELA,EAAQgjB,EAAOgH,GACjBhqB,EAAQgqB,EAAMhH,EACPhjB,EAAQ,EAAI,EAAIA,GAElBA,EAET,GAAI8B,EAAKjB,SAASiyP,oBAAqB,CACrC,IAAI3xN,EAAe2zJ,GAAgB5wL,MAC/B0uP,EAAa9wP,EAAK8wP,aACtBz7O,EAAI07O,EAAU17O,EAAGgqB,EAAa7/B,EAAI6/B,EAAahqB,EAAGy7O,EAAWtxP,GAC7D8V,EAAIy7O,EAAUz7O,EAAG+pB,EAAa/tB,EAAI+tB,EAAa/pB,EAAGw7O,EAAWx/O,GAE/D,IAAIujC,EAAcw1M,EAAYp3M,eAAejzC,GAsB7C,OArBI60C,GAAes7M,GAASt7M,KAAiBu7M,GAAQpwP,KACnDqV,GAAKw/B,EAAYX,WACjB5+B,GAAKu/B,EAAYV,WAEfU,IACFx/B,GAAK,EACLC,GAAK,GAEHtV,EAAKu+B,MAAMpgC,IAAI,YACjB6B,EAAK8wP,WAAW,CACdz7O,EAAGA,EACHC,EAAGA,IACF2rB,WAEHjhC,EAAKjB,SAASsW,EAAIA,EAClBrV,EAAKjB,SAASuW,EAAIA,GAEpBtV,EAAKygC,KAAK,OAAQ,CAChBprB,EAAGA,EACHC,EAAGA,IAEEtV,IAIPk/B,GAAW1gC,QAAQC,KAAKC,MAAMC,QAAQ,sBAEtCqxE,GAAWxxE,QAAQC,KAAKC,MAAMC,QAAQ,gCAEtCsyP,GAAW,CACbC,SAAU,SAAUhzP,GAClB,IAAIqH,EACAwnJ,EAAQ,GACZ,GAAK7uJ,EAGL,MAAqB,kBAAVA,GACTA,EAAQA,GAAS,EACV,CACLgkC,IAAKhkC,EACL+jC,KAAM/jC,EACN04C,OAAQ14C,EACRskG,MAAOtkG,KAGXA,EAAQA,EAAMiiB,MAAM,KACpB5a,EAAMrH,EAAM6D,OACA,IAARwD,EACFrH,EAAM,GAAKA,EAAM,GAAKA,EAAM,GAAKA,EAAM,GACtB,IAARqH,GACTrH,EAAM,GAAKA,EAAM,GACjBA,EAAM,GAAKA,EAAM,IACA,IAARqH,IACTrH,EAAM,GAAKA,EAAM,IAEZ,CACLgkC,IAAK5xB,SAASpS,EAAM,GAAI6uJ,IAAU,EAClCvqD,MAAOlyF,SAASpS,EAAM,GAAI6uJ,IAAU,EACpCn2G,OAAQtmC,SAASpS,EAAM,GAAI6uJ,IAAU,EACrC9qH,KAAM3xB,SAASpS,EAAM,GAAI6uJ,IAAU,KAGvCokG,WAAY,SAAUpqP,EAAKwJ,GACzB,SAASwjC,EAAS7tC,GAChB,IAAI+uF,EAAcluF,EAAI85B,cAAco0D,YACpC,GAAIA,EAAa,CACf,IAAIm8J,EAAgBn8J,EAAYd,iBAAiBptF,EAAK,MACtD,OAAIqqP,GACFlrP,EAAOA,EAAKvF,QAAQ,UAAU,SAAUoZ,GACtC,MAAO,IAAMA,KAERq3O,EAAcziM,iBAAiBzoD,IAE/B,KAGX,OAAOa,EAAI0jH,aAAavkH,GAE1B,SAASmrP,EAAQnrP,GACf,IAAIwpB,EAAM2E,WAAW0f,EAAS7tC,IAC9B,OAAO62C,MAAMrtB,GAAO,EAAIA,EAE1B,MAAO,CACLwS,IAAKmvN,EAAQ9gP,EAAS,YACtBiyF,MAAO6uJ,EAAQ9gP,EAAS,cACxBqmC,OAAQy6M,EAAQ9gP,EAAS,eACzB0xB,KAAMovN,EAAQ9gP,EAAS,gBAK7B,SAASm+D,MAET,SAAS4iL,GAAUhoN,GACjBlnC,KAAKq2J,IAAM,GACXr2J,KAAKq2J,IAAI84F,KAAO,GAChBnvP,KAAKknC,SAAWA,GAAYolC,GAC5BtsE,KAAKmO,OAAS,GA4DhB,SAASq0C,GAAO0gB,GACd,IACsB3wB,EADlB68M,EAAc,GACdlvP,EAAIgjE,EAAMvjE,OACd,MAAOO,IACLqyC,EAAO2wB,EAAMhjE,GACRqyC,EAAK88M,YACRD,EAAY7rP,KAAKgvC,GACjBA,EAAK88M,UAAY,GAGrBnvP,EAAIkvP,EAAYzvP,OAChB,MAAOO,WACEkvP,EAAYlvP,GAAGmvP,UAExB,OAAOD,EAxET3xP,EAASwB,OAAOiwP,GAAUxwP,UAAW,CACnCmF,IAAK,SAAUwyJ,GAMb,OALIA,IAAQr2J,KAAK+Q,SAASslJ,KACxBr2J,KAAKq2J,IAAI84F,KAAK94F,IAAO,EACrBr2J,KAAKq2J,IAAI9yJ,KAAK8yJ,GACdr2J,KAAKsvP,WAEAtvP,MAET+R,OAAQ,SAAUskJ,GAChB,GAAIr2J,KAAK+Q,SAASslJ,GAAM,CACtB,IAAIn2J,OAAI,EACR,IAAKA,EAAI,EAAGA,EAAIF,KAAKq2J,IAAI12J,OAAQO,IAC/B,GAAIF,KAAKq2J,IAAIn2J,KAAOm2J,EAClB,MAGJr2J,KAAKq2J,IAAI3yJ,OAAOxD,EAAG,UACZF,KAAKq2J,IAAI84F,KAAK94F,GACrBr2J,KAAKsvP,UAEP,OAAOtvP,MAETmL,OAAQ,SAAUkrJ,EAAKl6H,GACrB,IAAIozN,EAAWvvP,KAAK+Q,SAASslJ,GAS7B,OARIk5F,IAAapzN,IACXozN,EACFvvP,KAAK+R,OAAOskJ,GAEZr2J,KAAK6D,IAAIwyJ,GAEXr2J,KAAKsvP,WAEAtvP,MAET+Q,SAAU,SAAUslJ,GAClB,QAASr2J,KAAKq2J,IAAI84F,KAAK94F,IAEzBi5F,QAAS,kBACAtvP,KAAKwvP,SACZxvP,KAAKknC,SAAStoC,KAAKoB,SAGvBkvP,GAAUxwP,UAAUC,SAAW,WAC7B,IAAI7C,EACJ,GAAIkE,KAAKwvP,SACP,OAAOxvP,KAAKwvP,SAEd1zP,EAAQ,GACR,IAAK,IAAIoE,EAAI,EAAGA,EAAIF,KAAKq2J,IAAI12J,OAAQO,IAC/BA,EAAI,IACNpE,GAAS,KAEXA,GAASkE,KAAKmO,OAASnO,KAAKq2J,IAAIn2J,GAElC,OAAOpE,GAmBT,IAGI2zP,GA+LAC,GAAcC,GAlMdC,GAAa,0GACbC,GAAU,sIACVrnB,GAAa,aAEbsnB,GAAWhzN,GAAS79B,OAAO,CAC7BwvF,KAAM,SAAUvoF,GACd,IAAIrH,EAAQmB,KAAKnB,MACjB,SAASkxP,EAAkBjsP,GACzB,GAAIA,EAEF,OADAA,EAAOA,EAAKmZ,cACL,SAAUs1B,GACf,MAAgB,MAATzuC,GAAgByuC,EAAKp0C,OAAS2F,GAI3C,SAASksP,EAAgB9wP,GACvB,GAAIA,EACF,OAAO,SAAUqzC,GACf,OAAOA,EAAKmG,QAAUx5C,GAI5B,SAAS+wP,EAAqB/rP,GAC5B,GAAIA,EAEF,OADAA,EAAUA,EAAQ6Z,MAAM,KACjB,SAAUw0B,GACf,IAAIryC,EAAIgE,EAAQvE,OAChB,MAAOO,IACL,IAAKqyC,EAAKruC,QAAQ6M,SAAS7M,EAAQhE,IACjC,OAAO,EAGX,OAAO,GAIb,SAASgwP,EAAkBpsP,EAAMqsP,EAAK32G,GACpC,GAAI11I,EACF,OAAO,SAAUyuC,GACf,IAAIz2C,EAAQy2C,EAAKzuC,GAAQyuC,EAAKzuC,KAAU,GACxC,OAAQqsP,EAAwB,MAARA,EAAcr0P,IAAU09I,EAAgB,OAAR22G,EAAer0P,EAAM8I,QAAQ40I,IAAU,EAAY,OAAR22G,GAAgB,IAAMr0P,EAAQ,KAAK8I,QAAQ,IAAM40I,EAAQ,MAAQ,EAAY,OAAR22G,EAAer0P,IAAU09I,EAAgB,OAAR22G,EAAwC,IAAzBr0P,EAAM8I,QAAQ40I,GAAuB,OAAR22G,GAAer0P,EAAM0mB,OAAO1mB,EAAM6D,OAAS65I,EAAM75I,UAAY65I,IAAlSA,GAItB,SAAS42G,EAAoBtsP,GAC3B,IAAIusP,EACJ,GAAIvsP,EAEF,OADAA,EAAO,wBAAwBf,KAAKe,GAC/BA,EAAK,IAMVusP,EAAeC,EAAYxsP,EAAK,GAAI,IAC7B,SAAUyuC,GACf,OAAQ1zC,EAAM0zC,EAAM89M,MAPpBvsP,EAAOA,EAAK,GACL,SAAUyuC,EAAMtvC,EAAOtD,GAC5B,MAAgB,UAATmE,EAA6B,IAAVb,EAAuB,SAATa,EAAkBb,IAAUtD,EAAS,EAAa,SAATmE,EAAkBb,EAAQ,IAAM,EAAa,QAATa,EAAiBb,EAAQ,IAAM,IAAIsvC,EAAKzuC,IAAQyuC,EAAKzuC,OASlL,SAASsvI,EAAQltI,EAAUy3I,EAAS4yG,GAClC,IAAIr1N,EACJ,SAASr3B,EAAI0H,GACPA,GACFoyI,EAAQp6I,KAAKgI,GAWjB,OARA2vB,EAAQ00N,GAAW7sP,KAAKmD,EAAS3H,QAAQiqO,GAAY,KACrD3kO,EAAIksP,EAAkB70N,EAAM,KAC5Br3B,EAAImsP,EAAgB90N,EAAM,KAC1Br3B,EAAIosP,EAAqB/0N,EAAM,KAC/Br3B,EAAIqsP,EAAkBh1N,EAAM,GAAIA,EAAM,GAAIA,EAAM,KAChDr3B,EAAIusP,EAAoBl1N,EAAM,KAC9ByiH,EAAQ7D,SAAW5+G,EAAM,GACzByiH,EAAQ4yG,OAASA,EACV5yG,EAET,SAAS2yG,EAAYpqP,EAAUu5B,GAC7B,IACI0hC,EAAO33D,EAAStJ,EADhBg7B,EAAQ,GAEZ,GAGE,GAFA20N,GAAQ9sP,KAAK,IACbyG,EAAUqmP,GAAQ9sP,KAAKmD,GACnBsD,IACFtD,EAAWsD,EAAQ,GACnB0xB,EAAM33B,KAAKiG,EAAQ,IACfA,EAAQ,IAAI,CACd23D,EAAQ33D,EAAQ,GAChB,aAGGA,GAKT,IAJI23D,GACFmvL,EAAYnvL,EAAO1hC,GAErBv5B,EAAW,GACNhG,EAAI,EAAGA,EAAIg7B,EAAMv7B,OAAQO,IACX,MAAbg7B,EAAMh7B,IACRgG,EAAS3C,KAAK6vI,EAAQl4G,EAAMh7B,GAAI,GAAqB,MAAjBg7B,EAAMh7B,EAAI,KAIlD,OADAu/B,EAAUl8B,KAAK2C,GACRu5B,EAETz/B,KAAKwwP,WAAaF,EAAYpqP,EAAU,KAE1CrH,MAAO,SAAU4R,EAASgvB,GACxB,IAAIv/B,EAAG4zE,EAAG28K,EAAIC,EAAIxqP,EAAU8jN,EAAIC,EAAItsE,EAAS16I,EAAOtD,EAAQ4zD,EAAUpgD,EAAOo/B,EAE7E,IADA9S,EAAYA,GAAaz/B,KAAKwwP,WACzBtwP,EAAI,EAAG4zE,EAAIr0C,EAAU9/B,OAAQO,EAAI4zE,EAAG5zE,IAAK,CAK5C,IAJAgG,EAAWu5B,EAAUv/B,GACrBwwP,EAAKxqP,EAASvG,OACd4yC,EAAO9hC,EACP0C,EAAQ,EACHs9O,EAAKC,EAAK,EAAGD,GAAM,EAAGA,IAAM,CAC/B9yG,EAAUz3I,EAASuqP,GACnB,MAAOl+M,EAAM,CACX,GAAIorG,EAAQ7D,OAAQ,CAClBvmF,EAAWhhB,EAAK3xC,SAAS2Y,QACzBtW,EAAQtD,EAAS4zD,EAAS5zD,OAC1B,MAAOsD,IACL,GAAIswD,EAAStwD,KAAWsvC,EACtB,MAIN,IAAKy3K,EAAK,EAAGC,EAAKtsE,EAAQh+I,OAAQqqN,EAAKC,EAAID,IACzC,IAAKrsE,EAAQqsE,GAAIz3K,EAAMtvC,EAAOtD,GAAS,CACrCqqN,EAAKC,EAAK,EACV,MAGJ,GAAID,IAAOC,EAAI,CACb92M,IACA,MAEA,GAAIs9O,IAAOC,EAAK,EACd,MAGJn+M,EAAOA,EAAK3xC,UAGhB,GAAIuS,IAAUu9O,EACZ,OAAO,EAGX,OAAO,GAETzkP,KAAM,SAAU8W,GACd,IAAkB7iB,EAAG4zE,EAAjBtqE,EAAU,GACVi2B,EAAYz/B,KAAKwwP,WACrB,SAASn7F,EAAQ97I,EAAOrT,EAAUjD,GAChC,IAAI/C,EAAG4zE,EAAGk2I,EAAIC,EAAI13K,EACdorG,EAAUz3I,EAASjD,GACvB,IAAK/C,EAAI,EAAG4zE,EAAIv6D,EAAM5Z,OAAQO,EAAI4zE,EAAG5zE,IAAK,CAExC,IADAqyC,EAAOh5B,EAAMrZ,GACR8pN,EAAK,EAAGC,EAAKtsE,EAAQh+I,OAAQqqN,EAAKC,EAAID,IACzC,IAAKrsE,EAAQqsE,GAAIz3K,EAAMryC,EAAG4zE,GAAI,CAC5Bk2I,EAAKC,EAAK,EACV,MAGJ,GAAID,IAAOC,EACLhnN,IAAUiD,EAASvG,OAAS,EAC9B6J,EAAQjG,KAAKgvC,GAETA,EAAKh5B,OACP87I,EAAQ9iH,EAAKh5B,QAASrT,EAAUjD,EAAQ,QAGvC,GAAI06I,EAAQ4yG,OACjB,OAEEh+M,EAAKh5B,OACP87I,EAAQ9iH,EAAKh5B,QAASrT,EAAUjD,IAItC,GAAI8f,EAAUxJ,MAAO,CACnB,IAAKrZ,EAAI,EAAG4zE,EAAIr0C,EAAU9/B,OAAQO,EAAI4zE,EAAG5zE,IACvCm1J,EAAQtyI,EAAUxJ,QAASkmB,EAAUv/B,GAAI,GAEvC4zE,EAAI,IACNtqE,EAAUg5C,GAAOh5C,IAMrB,OAHKimP,KACHA,GAAaK,GAASL,YAEjB,IAAIA,GAAWjmP,MAKtBjG,GAAOE,MAAM/E,UAAU6E,KAAML,GAAQO,MAAM/E,UAAUwE,MACzDysP,GAAQ,CACNhwP,OAAQ,EACR8uF,KAAM,SAAUl1E,GACVA,GACFvZ,KAAK6D,IAAI0V,IAGb1V,IAAK,SAAU0V,GACb,IAAI3b,EAAOoC,KAUX,OATKvC,EAAS+mB,QAAQjL,GAOpBhW,GAAKI,MAAM/F,EAAM2b,GANbA,aAAiBm2O,GACnB9xP,EAAKiG,IAAI0V,EAAM/B,WAEfjU,GAAK3E,KAAKhB,EAAM2b,GAKb3b,GAET5B,IAAK,SAAUud,GACb,IAEIrZ,EAFAtC,EAAOoC,KACPmD,EAAMvF,EAAK+B,OAIf,IAFA/B,EAAK+B,OAAS,EACd/B,EAAKiG,IAAI0V,GACJrZ,EAAItC,EAAK+B,OAAQO,EAAIiD,EAAKjD,WACtBtC,EAAKsC,GAEd,OAAOtC,GAET2N,OAAQ,SAAUrF,GAChB,IACIhG,EAAG4zE,EAEHvhC,EAAM1zC,EAHNjB,EAAOoC,KAEPwJ,EAAU,GAUd,IARwB,kBAAbtD,GACTA,EAAW,IAAI4pP,GAAS5pP,GACxBrH,EAAQ,SAAU0zC,GAChB,OAAOrsC,EAASrH,MAAM0zC,KAGxB1zC,EAAQqH,EAELhG,EAAI,EAAG4zE,EAAIl2E,EAAK+B,OAAQO,EAAI4zE,EAAG5zE,IAClCqyC,EAAO30C,EAAKsC,GACRrB,EAAM0zC,IACR/oC,EAAQjG,KAAKgvC,GAGjB,OAAO,IAAIm9M,GAAalmP,IAE1BtG,MAAO,WACL,OAAO,IAAIwsP,GAAaxsP,GAAMS,MAAM3D,KAAMN,aAE5CuW,GAAI,SAAUhT,GACZ,OAAkB,IAAXA,EAAejD,KAAKkD,MAAMD,GAASjD,KAAKkD,MAAMD,GAAQA,EAAQ,IAEvEuI,KAAM,SAAUvL,GAEd,OADAxC,EAAS+N,KAAKxL,KAAMC,GACbD,MAETwX,QAAS,WACP,OAAO/Z,EAAS+Z,QAAQxX,OAE1B4E,QAAS,SAAU4L,GACjB,IAAI5S,EAAOoC,KACPE,EAAItC,EAAK+B,OACb,MAAOO,IACL,GAAItC,EAAKsC,KAAOsQ,EACd,MAGJ,OAAOtQ,GAETmkC,QAAS,WACP,OAAO,IAAIqrN,GAAajyP,EAAS+Z,QAAQxX,MAAMqkC,YAEjDp1B,SAAU,SAAUonJ,GAClB,QAAOr2J,KAAK,IAAKA,KAAK,GAAGkE,QAAQ6M,SAASslJ,IAE5C5X,KAAM,SAAU36I,EAAMhI,GACpB,IACIy2C,EADA30C,EAAOoC,KAEX,YAAcgX,IAAVlb,GACF8B,EAAK4N,MAAK,SAAU+mC,GACdA,EAAKzuC,IACPyuC,EAAKzuC,GAAMhI,MAGR8B,IAET20C,EAAO30C,EAAK,GACR20C,GAAQA,EAAKzuC,GACRyuC,EAAKzuC,UADd,IAIFf,KAAM,SAAUe,GACd,IAAIlG,EAAOoC,KAAMsD,EAAO7F,EAAS+Z,QAAQ9X,WAAWwD,MAAM,GAM1D,OALAtF,EAAK4N,MAAK,SAAU+mC,GACdA,EAAKzuC,IACPyuC,EAAKzuC,GAAMH,MAAM4uC,EAAMjvC,MAGpB1F,GAETmU,OAAQ,WACN,IAAI7R,EAAIF,KAAKL,OACb,MAAOO,IACLF,KAAKE,GAAG6R,SAEV,OAAO/R,MAETwhF,SAAU,SAAU60E,GAClB,OAAOr2J,KAAKwL,MAAK,SAAU+mC,GACzBA,EAAKruC,QAAQL,IAAIwyJ,OAGrBl1E,YAAa,SAAUk1E,GACrB,OAAOr2J,KAAKwL,MAAK,SAAU+mC,GACzBA,EAAKruC,QAAQ6N,OAAOskJ,QAI1B54J,EAAS+N,KAAK,2DAA2DuS,MAAM,MAAM,SAAUja,GAC7F6rP,GAAM7rP,GAAQ,WACZ,IAAIR,EAAO7F,EAAS+Z,QAAQ9X,WAM5B,OALAM,KAAKwL,MAAK,SAAUgF,GACd1M,KAAQ0M,GACVA,EAAK1M,GAAMH,MAAM6M,EAAMlN,MAGpBtD,SAGXvC,EAAS+N,KAAK,uEAAuEuS,MAAM,MAAM,SAAUja,GACzG6rP,GAAM7rP,GAAQ,SAAUhI,GACtB,OAAOkE,KAAKy+I,KAAK36I,EAAMhI,OAG3B4zP,GAAe5yN,GAAS79B,OAAO0wP,IAC/BG,GAASL,WAAaC,GACtB,IAAIiB,GAAejB,GAEfkB,GAAU,SAAUj0P,GACtBqD,KAAK6M,OAASlQ,EAASkQ,QAEzB+jP,GAAQ/jP,OAAS,SAAUkpG,EAAOjyG,GAChC,OAAO,IAAI8sP,GAAQ,CACjB/jP,OAAQ,SAAUgkP,EAAYC,GAC5B,IAAI52D,EACA62D,EAAkB,SAAUjmP,GAC9B+lP,EAAW70P,IAAI80P,EAAWhmP,EAAEhP,QAE1Bk1P,EAAkB,SAAUlmP,GAC9BirG,EAAM/5G,IAAI8H,EAAMgH,EAAEhP,QAiBpB,OAfA+0P,EAAWvlP,GAAG,UAAYwlP,EAAWE,GACrCj7I,EAAMzqG,GAAG,UAAYxH,EAAMitP,GAC3B72D,EAAW22D,EAAWI,UACjB/2D,IACHA,EAAW22D,EAAWI,UAAY,GAClCJ,EAAWvlP,GAAG,WAAW,WACvB,IAAIpL,EAAIg6L,EAASv6L,OACjB,MAAOO,IACLg6L,EAASh6L,SAIfg6L,EAAS32L,MAAK,WACZwyG,EAAMrqE,IAAI,UAAY5nC,EAAMitP,MAEvBh7I,EAAMh6G,IAAI+H,OAKvB,IAAIotP,GAAW90P,QAAQC,KAAKC,MAAMC,QAAQ,2BAE1C,SAAS40P,GAAO7oP,GACd,OAAOA,EAAK2a,SAAW,EAEzB,SAAS87I,GAAQpnJ,EAAGG,GAClB,IAAI2I,EAAGkkB,EACP,GAAIhtB,IAAMG,EACR,OAAO,EAET,GAAU,OAANH,GAAoB,OAANG,EAChB,OAAOH,IAAMG,EAEf,GAAiB,kBAANH,GAA+B,kBAANG,EAClC,OAAOH,IAAMG,EAEf,GAAIra,EAAS+mB,QAAQ1M,GAAI,CACvB,GAAIH,EAAEhY,SAAWmY,EAAEnY,OACjB,OAAO,EAET8gB,EAAI9I,EAAEhY,OACN,MAAO8gB,IACL,IAAKs+I,GAAQpnJ,EAAE8I,GAAI3I,EAAE2I,IACnB,OAAO,EAIb,GAAI0wO,GAAOx5O,IAAMw5O,GAAOr5O,GACtB,OAAOH,IAAMG,EAGf,IAAK2I,KADLkkB,EAAU,GACA7sB,EAAG,CACX,IAAKinJ,GAAQpnJ,EAAE8I,GAAI3I,EAAE2I,IACnB,OAAO,EAETkkB,EAAQlkB,IAAK,EAEf,IAAKA,KAAK9I,EACR,IAAKgtB,EAAQlkB,KAAOs+I,GAAQpnJ,EAAE8I,GAAI3I,EAAE2I,IAClC,OAAO,EAGX,OAAO,EAET,IAoDqB2wO,GAqCjB7wN,GAzFA8wN,GAAmBv0N,GAAS79B,OAAO,CACrC24O,OAAQ,CAACsZ,IACTziK,KAAM,SAAU7sF,GACd,IAAIkC,EAAMhI,EAEV,IAAKgI,KADLlC,EAAOA,GAAQ,GACFA,EACX9F,EAAQ8F,EAAKkC,GACThI,aAAiB80P,KACnBhvP,EAAKkC,GAAQhI,EAAM+Q,OAAO7M,KAAM8D,IAGpC9D,KAAK4B,KAAOA,GAEd5F,IAAK,SAAU8H,EAAMhI,GACnB,IAAIgD,EAAKwE,EACLguP,EAAWtxP,KAAK4B,KAAKkC,GAIzB,GAHIhI,aAAiB80P,KACnB90P,EAAQA,EAAM+Q,OAAO7M,KAAM8D,IAET,kBAATA,EAAmB,CAC5B,IAAKhF,KAAOgF,EACV9D,KAAKhE,IAAI8C,EAAKgF,EAAKhF,IAErB,OAAOkB,KAaT,OAXK++J,GAAQuyF,EAAUx1P,KACrBkE,KAAK4B,KAAKkC,GAAQhI,EAClBwH,EAAO,CACLqK,OAAQ3N,KACR8D,KAAMA,EACNhI,MAAOA,EACPw1P,SAAUA,GAEZtxP,KAAKq+B,KAAK,UAAYv6B,EAAMR,GAC5BtD,KAAKq+B,KAAK,SAAU/6B,IAEftD,MAETjE,IAAK,SAAU+H,GACb,OAAO9D,KAAK4B,KAAKkC,IAEnBgd,IAAK,SAAUhd,GACb,OAAOA,KAAQ9D,KAAK4B,MAEtBuV,KAAM,SAAUrT,GACd,OAAO8sP,GAAQ/jP,OAAO7M,KAAM8D,IAE9Bs8B,QAAS,WACPpgC,KAAKq+B,KAAK,cAIVkzN,GAAa,GACbC,GAAc,CAChB3tP,IAAK,SAAU2M,GACb,IAAI5P,EAAS4P,EAAK5P,SAClB,GAAIA,EAAQ,CACV,IAAKA,EAAO6wP,SAAW7wP,EAAO6wP,QAAQn3D,WACpC,OAEGi3D,GAAW3wP,EAAOskE,OACrBqsL,GAAW3wP,EAAOskE,KAAOtkE,GAEtBwwP,KACHA,IAA0B,EAC1B30N,EAASsyG,uBAAsB,WAC7B,IAAI7vI,EAAIsR,EAER,IAAKtR,KADLkyP,IAA0B,EACfG,GACT/gP,EAAO+gP,GAAWryP,GACdsR,EAAK2rB,MAAMpgC,IAAI,aACjByU,EAAK45O,SAGTmH,GAAa,KACZ51P,EAAW4E,SAAS8J,SAI7B0H,OAAQ,SAAUvB,GACZ+gP,GAAW/gP,EAAK00D,aACXqsL,GAAW/gP,EAAK00D,OAKzBwsL,GAA4B,iBAAkB/1P,EAAW4E,SACzDoxP,IAAuB,EACvBC,GAAc,OACLC,GAAY,EACrBC,GAAU,CACZ3Z,QAAS,CAAEyZ,YAAaA,IACxBxjJ,MAAO,WACL,OAAO7tE,GAAQ6D,KAEjBwtN,YAAaA,GACbnjK,KAAM,SAAU9xF,GACd,IACIuH,EAAS6tP,EADTn0P,EAAOoC,KAEX,SAASgyP,EAAa9tP,GACpB,IAAIhE,EAEJ,IADAgE,EAAUA,EAAQ6Z,MAAM,KACnB7d,EAAI,EAAGA,EAAIgE,EAAQvE,OAAQO,IAC9BtC,EAAKsG,QAAQL,IAAIK,EAAQhE,IAG7BtC,EAAKjB,SAAWA,EAAWc,EAASwB,OAAO,GAAIrB,EAAK6iC,SAAU9jC,GAC9DiB,EAAKsnE,IAAMvoE,EAASuC,IAAM,QAAU2yP,KACpCj0P,EAAKq0P,MAAQ,CAAEh9O,KAAMtY,EAASsY,MAC9BrX,EAAKs0P,UAAY,GACjBt0P,EAAKoL,EAAI6zB,GACTj/B,EAAKu+B,MAAQ,IAAIk1N,GAAiB,CAChC9E,SAAS,EACT9zL,QAAQ,EACR/nD,UAAU,EACV5U,MAAO,KAET8B,EAAKgE,KAAO,IAAIyvP,GAAiB10P,EAASiF,MAC1ChE,EAAKsG,QAAU,IAAIgrP,IAAU,WACvBtxP,EAAKu+B,MAAMpgC,IAAI,cACjB6B,EAAK8W,QAAQ5T,UAAYd,KAAKrB,eAGlCf,EAAKsG,QAAQiK,OAASvQ,EAAKg0P,YAC3B1tP,EAAUvH,EAASuH,QACfA,IACEtG,EAAK6iC,WACPsxN,EAAiBn0P,EAAK6iC,SAASv8B,QAC3B6tP,GAAkB7tP,IAAY6tP,GAChCC,EAAaD,IAGjBC,EAAa9tP,IAEfzG,EAAS+N,KAAK,gDAAgDuS,MAAM,MAAM,SAAUja,GAC9EA,KAAQnH,GACViB,EAAKkG,GAAMnH,EAASmH,OAGxBlG,EAAK0N,GAAG,SAAS,WACf,GAAI1N,EAAK8S,WACP,OAAO,KAGX9S,EAAKjB,SAAWA,EAChBiB,EAAKu0P,UAAYtD,GAASC,SAASnyP,EAASypC,QAC5CxoC,EAAKw0P,WAAavD,GAASC,SAASnyP,EAASke,SAC7Cjd,EAAKy0P,UAAYxD,GAASC,SAASnyP,EAASw4C,QACxCx4C,EAASo/L,QACXn+L,EAAK+hC,QAGTs4M,WAAY,cACZqa,gBAAiB,WACf,IAAI7/M,EAAcw1M,EAAYp3M,eAAe7wC,MAC7C,OAAOyyC,GAA4Bo7M,GAAM/sK,gBAE3CyxK,cAAe,SAAU5tP,GACvB,IAAI6L,EACA2mB,EAASn3B,KAAKg+C,UAAUw0M,gBAC5B,MAAO7tP,GAAOwyB,EAAQ,CAEpB,GADA3mB,EAAO2mB,EAAOxyB,EAAIzF,IACdsR,EACF,MAEF7L,EAAMA,EAAI5D,WAEZ,OAAOyP,GAETiiP,eAAgB,WACd,IAEIN,EAAWzD,EAEXjkO,EAAOC,EAAQ9gB,EAAUC,EAAW6oP,EACpCC,EAAeC,EAAgBC,EAL/Bj1P,EAAOoC,KACPrD,EAAWiB,EAAKjB,SAEhBgI,EAAM/G,EAAK8W,QAGfy9O,EAAYv0P,EAAKu0P,UAAYv0P,EAAKu0P,WAAatD,GAASE,WAAWpqP,EAAK,UACxE/G,EAAKw0P,WAAax0P,EAAKw0P,YAAcvD,GAASE,WAAWpqP,EAAK,WAC9D/G,EAAKy0P,UAAYz0P,EAAKy0P,WAAaxD,GAASE,WAAWpqP,EAAK,UAC5DkuP,EAAchF,GAAMx2M,QAAQ1yC,GAC5BguP,EAAgBh2P,EAASiN,SACzBgpP,EAAiBj2P,EAASkN,UAC1BD,EAAW+oP,GAAiBE,EAAYpoO,MACxC5gB,EAAY+oP,GAAkBC,EAAYnoO,OAC1CD,EAAQ9tB,EAAS8tB,MACjBC,EAAS/tB,EAAS+tB,OAClBgoO,EAAa/1P,EAAS+1P,WACtBA,EAAmC,qBAAfA,EAA6BA,GAAcjoO,IAAUC,EACzED,EAAQA,GAAS7gB,EACjB8gB,EAASA,GAAU7gB,EACnB,IAAIs0B,EAASg0N,EAAUtyN,KAAOsyN,EAAU/xJ,MACpChiE,EAAS+zN,EAAUryN,IAAMqyN,EAAU39M,OACnCs+M,EAAOn2P,EAAS4N,UAAY,MAC5BwoP,EAAOp2P,EAAS8mP,WAAa,MAsBjC,OArBA7lP,EAAKo1P,YAActE,EAAa,CAC9Bz7O,EAAGtW,EAASsW,GAAK,EACjBC,EAAGvW,EAASuW,GAAK,EACjB9V,EAAGqtB,EACHvb,EAAGwb,EACHyT,OAAQA,EACRC,OAAQA,EACR60N,SAAUxoO,EAAQ0T,EAClB+0N,SAAUxoO,EAAS0T,EACnB+0N,OAAQ1oO,EAAQ0T,EAChBi1N,OAAQ1oO,EAAS0T,EACjBu0N,cAAeA,GAAiB,EAChCC,eAAgBA,GAAkB,EAClCS,KAAMr2P,KAAKC,IAAI2M,EAAUkpP,GACzBQ,KAAMt2P,KAAKC,IAAI4M,EAAWkpP,GAC1BD,KAAMA,EACNC,KAAMA,EACNL,WAAYA,EACZa,QAAS,GAEX31P,EAAK41P,gBAAkB,GAChB9E,GAETA,WAAY,SAAU74B,GACpB,IACgC49B,EAAgB30O,EAAM6rN,EAAYC,EAAa8oB,EAD3E91P,EAAOoC,KACP2zP,EAAU/1P,EAAKo1P,YAInB,OAHKW,IACHA,EAAU/1P,EAAK60P,kBAEb58B,GACF8U,EAAagpB,EAAQx1N,OACrBysM,EAAc+oB,EAAQv1N,YACJpnB,IAAd6+M,EAAQ5iN,IACV0gP,EAAQ1gP,EAAI4iN,EAAQ5iN,QAEJ+D,IAAd6+M,EAAQ3iN,IACVygP,EAAQzgP,EAAI2iN,EAAQ3iN,QAED8D,IAAjB6+M,EAAQw9B,OACVM,EAAQN,KAAOx9B,EAAQw9B,WAEJr8O,IAAjB6+M,EAAQy9B,OACVK,EAAQL,KAAOz9B,EAAQy9B,MAEzBx0O,EAAO+2M,EAAQz4N,OACF4Z,IAAT8H,IACFA,EAAOA,EAAO60O,EAAQN,KAAOM,EAAQN,KAAOv0O,EAC5CA,EAAOA,EAAO60O,EAAQb,KAAOa,EAAQb,KAAOh0O,EAC5C60O,EAAQv2P,EAAI0hB,EACZ60O,EAAQR,OAASr0O,EAAO6rN,GAE1B7rN,EAAO+2M,EAAQ3mN,OACF8H,IAAT8H,IACFA,EAAOA,EAAO60O,EAAQL,KAAOK,EAAQL,KAAOx0O,EAC5CA,EAAOA,EAAO60O,EAAQZ,KAAOY,EAAQZ,KAAOj0O,EAC5C60O,EAAQzkP,EAAI4P,EACZ60O,EAAQP,OAASt0O,EAAO8rN,GAE1B9rN,EAAO+2M,EAAQs9B,YACFn8O,IAAT8H,IACFA,EAAOA,EAAO60O,EAAQN,KAAO1oB,EAAagpB,EAAQN,KAAO1oB,EAAa7rN,EACtEA,EAAOA,EAAO60O,EAAQb,KAAOnoB,EAAagpB,EAAQb,KAAOnoB,EAAa7rN,EACtE60O,EAAQR,OAASr0O,EACjB60O,EAAQv2P,EAAI0hB,EAAO6rN,GAErB7rN,EAAO+2M,EAAQu9B,YACFp8O,IAAT8H,IACFA,EAAOA,EAAO60O,EAAQL,KAAO1oB,EAAc+oB,EAAQL,KAAO1oB,EAAc9rN,EACxEA,EAAOA,EAAO60O,EAAQZ,KAAOnoB,EAAc+oB,EAAQZ,KAAOnoB,EAAc9rN,EACxE60O,EAAQP,OAASt0O,EACjB60O,EAAQzkP,EAAI4P,EAAO8rN,QAEI5zN,IAArB6+M,EAAQo9B,WACVU,EAAQV,SAAWp9B,EAAQo9B,eAEJj8O,IAArB6+M,EAAQq9B,WACVS,EAAQT,SAAWr9B,EAAQq9B,UAE7BO,EAAiB71P,EAAK41P,gBAClBC,EAAexgP,IAAM0gP,EAAQ1gP,GAAKwgP,EAAevgP,IAAMygP,EAAQzgP,GAAKugP,EAAer2P,IAAMu2P,EAAQv2P,GAAKq2P,EAAevkP,IAAMykP,EAAQzkP,IACrIwkP,EAAkBnzN,GAAQmzN,gBACtBA,GACEA,EAAgBp1P,MAAQo1P,EAAgBp1P,IAAIV,EAAKsnE,OACnDwuL,EAAgBnwP,KAAK3F,GACrB81P,EAAgBp1P,IAAIV,EAAKsnE,MAAO,GAGpCuuL,EAAexgP,EAAI0gP,EAAQ1gP,EAC3BwgP,EAAevgP,EAAIygP,EAAQzgP,EAC3BugP,EAAer2P,EAAIu2P,EAAQv2P,EAC3Bq2P,EAAevkP,EAAIykP,EAAQzkP,GAEtBtR,GAEF+1P,GAET90N,QAAS,WACP,IACIt4B,EAAOqtP,EAAWrwD,EAASrlK,EAAMi0N,EACjC0B,EAASC,EAASC,EAAiB59N,EAAOr6B,EAF1C8B,EAAOoC,KAGXm2B,EAASx6B,EAAW4E,SAAS+iB,YAA2B,SAAUxnB,GAChE,OAAOA,GADkCkB,KAAKm5B,MAGhD5vB,EAAQ3I,EAAK8W,QAAQnO,MACrB23B,EAAOtgC,EAAKo1P,YACZe,EAAkBn2P,EAAKo2P,kBAAoB,GAC3C7B,EAAYv0P,EAAKu0P,UACjB0B,EAAU1B,EAAUtyN,KAAOsyN,EAAU/xJ,MACrC0zJ,EAAU3B,EAAUryN,IAAMqyN,EAAU39M,OAChCtW,EAAKjrB,IAAM8gP,EAAgB9gP,IAC7B1M,EAAMs5B,KAAO1J,EAAM+H,EAAKjrB,GAAK,KAC7B8gP,EAAgB9gP,EAAIirB,EAAKjrB,GAEvBirB,EAAKhrB,IAAM6gP,EAAgB7gP,IAC7B3M,EAAMu5B,IAAM3J,EAAM+H,EAAKhrB,GAAK,KAC5B6gP,EAAgB7gP,EAAIgrB,EAAKhrB,GAEvBgrB,EAAK9gC,IAAM22P,EAAgB32P,IAC7BtB,EAAQq6B,EAAM+H,EAAK9gC,EAAIy2P,GACvBttP,EAAMkkB,OAAS3uB,GAAS,EAAIA,EAAQ,GAAK,KACzCi4P,EAAgB32P,EAAI8gC,EAAK9gC,GAEvB8gC,EAAKhvB,IAAM6kP,EAAgB7kP,IAC7BpT,EAAQq6B,EAAM+H,EAAKhvB,EAAI4kP,GACvBvtP,EAAMmkB,QAAU5uB,GAAS,EAAIA,EAAQ,GAAK,KAC1Ci4P,EAAgB7kP,EAAIgvB,EAAKhvB,GAEvBtR,EAAKq2P,UAAY/1N,EAAKi1N,SAAWY,EAAgBZ,SACnDr3P,EAAQq6B,EAAM+H,EAAKi1N,QACnB5vD,EAAU3lM,EAAK8W,MAAM,QACjB6uL,IACFqwD,EAAYrwD,EAAQh9L,MACpBqtP,EAAUnpO,OAAS3uB,GAAS,EAAIA,EAAQ,GAAK,MAE/Ci4P,EAAgBZ,OAASj1N,EAAKi1N,QAE5Bv1P,EAAKq2P,UAAY/1N,EAAKk1N,SAAWW,EAAgBX,SACnDt3P,EAAQq6B,EAAM+H,EAAKk1N,QACnB7vD,EAAUA,GAAW3lM,EAAK8W,MAAM,QAC5B6uL,IACFqwD,EAAYA,GAAarwD,EAAQh9L,MACjCqtP,EAAUlpO,QAAU5uB,GAAS,EAAIA,EAAQ,GAAK,MAEhDi4P,EAAgBX,OAASl1N,EAAKk1N,QAEhCx1P,EAAKo2P,iBAAmBD,EACxBn2P,EAAKygC,KAAK,UAAW,IAAI,IAE3B61N,iBAAkB,WAChB,IAAIt2P,EAAOoC,KACXpC,EAAKgD,SAASuzP,UAAY,KAC1BtG,GAAM/nP,IAAIlI,EAAK8W,QAAS,CACtB+V,MAAO,GACPC,OAAQ,KAEV9sB,EAAKo1P,YAAcp1P,EAAKo2P,iBAAmBp2P,EAAK41P,gBAAkB,KAClE51P,EAAK60P,kBAEPnnP,GAAI,SAAUxH,EAAM7D,GAClB,IAAIrC,EAAOoC,KACX,SAASo0P,EAAoBtwP,GAC3B,IAAI7D,EAAUk7B,EACd,MAAoB,kBAATr3B,EACFA,EAEF,SAAUgH,GAUf,OATK7K,GACHrC,EAAKs/K,iBAAiB1xK,MAAK,SAAUgF,GACnC,IAAIzM,EAAYyM,EAAK7T,SAASoH,UAC9B,GAAIA,IAAc9D,EAAW8D,EAAUD,IAErC,OADAq3B,EAAQ3qB,GACD,KAIRvQ,EAKEA,EAASrB,KAAKu8B,EAAOrwB,IAJ1BA,EAAEoO,OAASpV,OACX9D,KAAKq+B,KAAK,UAAWvzB,KAO3B,OADA0vL,GAAmB58L,GAAM0N,GAAGxH,EAAMswP,EAAoBn0P,IAC/CrC,GAET8tC,IAAK,SAAU5nC,EAAM7D,GAEnB,OADAu6L,GAAmBx6L,MAAM0rC,IAAI5nC,EAAM7D,GAC5BD,MAETq+B,KAAM,SAAUv6B,EAAMR,EAAMs3L,GAC1B,IAAIh9L,EAAOoC,KAMX,GALAsD,EAAOA,GAAQ,GACVA,EAAKmN,UACRnN,EAAKmN,QAAU7S,GAEjB0F,EAAOk3L,GAAmB58L,GAAMygC,KAAKv6B,EAAMR,IAC5B,IAAXs3L,GAAoBh9L,EAAKgD,OAAQ,CACnC,IAAIA,EAAShD,EAAKgD,SAClB,MAAOA,IAAW0C,EAAK8tI,uBACrBxwI,EAAOy9B,KAAKv6B,EAAMR,GAAM,GACxB1C,EAASA,EAAOA,SAGpB,OAAO0C,GAETq9D,kBAAmB,SAAU78D,GAC3B,OAAO02L,GAAmBx6L,MAAM8gB,IAAIhd,IAEtC00D,QAAS,SAAUtyD,GACjB,IACIsK,EADA5S,EAAOoC,KACDw4D,EAAU,IAAIm4L,GACxB,IAAKngP,EAAO5S,EAAKgD,SAAU4P,EAAMA,EAAOA,EAAK5P,SAC3C43D,EAAQ30D,IAAI2M,GAKd,OAHItK,IACFsyD,EAAUA,EAAQjtD,OAAOrF,IAEpBsyD,GAET0kH,eAAgB,SAAUh3K,GACxB,OAAO,IAAIyqP,GAAa3wP,MAAM6D,IAAI7D,KAAKw4D,QAAQtyD,KAEjD2f,KAAM,WACJ,IAAIwuO,EAAiBr0P,KAAKY,SAAS2Y,QACnC,OAAO86O,EAAeA,EAAezvP,QAAQ5E,MAAQ,IAEvDivF,KAAM,WACJ,IAAIolK,EAAiBr0P,KAAKY,SAAS2Y,QACnC,OAAO86O,EAAeA,EAAezvP,QAAQ5E,MAAQ,IAEvDsrF,UAAW,SAAU3lF,GAEnB,OADA3F,KAAKihC,IAAIt7B,KAAKA,GACP3F,MAET0U,MAAO,SAAU+8E,GACf,IAAIvyF,EAAKuyF,EAASzxF,KAAKklE,IAAM,IAAMusB,EAASzxF,KAAKklE,IAIjD,OAHKllE,KAAKkyP,UAAUhzP,KAClBc,KAAKkyP,UAAUhzP,GAAM29B,GAAS,IAAM39B,GAAI,IAEnCc,KAAKkyP,UAAUhzP,IAExBwgC,KAAM,WACJ,OAAO1/B,KAAKusP,SAAQ,IAEtB5sN,KAAM,WACJ,OAAO3/B,KAAKusP,SAAQ,IAEtB36O,MAAO,WACL,IACE5R,KAAK0U,QAAQ9C,QACb,MAAOsb,IAET,OAAOltB,MAETolO,KAAM,WAEJ,OADAplO,KAAK0U,QAAQ0wN,OACNplO,MAETosI,KAAM,SAAUtoI,EAAMhI,GACpB,IAAI8B,EAAOoC,KAAM2E,EAAM/G,EAAK8W,MAAM9W,EAAK02P,YACvC,MAAqB,qBAAVx4P,EACF8B,EAAKq0P,MAAMnuP,IAEpBlG,EAAKq0P,MAAMnuP,GAAQhI,EACf8B,EAAKu+B,MAAMpgC,IAAI,aACjB4I,EAAIgP,aAAsB,SAAT7P,EAAkBA,EAAO,QAAUA,EAAMhI,GAErD8B,IAETI,OAAQ,SAAUmE,EAAM2N,GAItB,OAHkB,IAAdA,IACF3N,EAAOnC,KAAK8P,UAAU3N,KAEhBA,GAAQ,IAAI5D,QAAQ,WAAW,SAAUM,GAC/C,MAAO,KAAOA,EAAM6oB,WAAW,GAAK,QAGxC5X,UAAW,SAAU3N,GACnB,OAAOo+B,GAAQzwB,UAAYywB,GAAQzwB,UAAU3N,GAAQA,GAEvD7C,OAAQ,SAAUia,GAChB,IAAI3b,EAAOoC,KAAMY,EAAShD,EAAKgD,SAI/B,OAHIA,GACFA,EAAOrB,OAAOga,EAAO3Y,EAAO2Y,QAAQ3U,QAAQhH,IAAO,GAE9CA,GAETyF,MAAO,SAAUkW,GACf,IAAI3b,EAAOoC,KAAMY,EAAShD,EAAKgD,SAI/B,OAHIA,GACFA,EAAOrB,OAAOga,EAAO3Y,EAAO2Y,QAAQ3U,QAAQhH,IAEvCA,GAETmU,OAAQ,WACN,IAGIwiP,EAAUr0P,EAHVtC,EAAOoC,KACP2E,EAAM/G,EAAK8W,QACX9T,EAAShD,EAAKgD,SAElB,GAAIhD,EAAK2b,MAAO,CACd,IAAIi7O,EAAW52P,EAAK2b,QAAQ/B,UAC5BtX,EAAIs0P,EAAS70P,OACb,MAAOO,IACLs0P,EAASt0P,GAAG6R,SAGZnR,GAAUA,EAAO2Y,QACnBg7O,EAAW,GACX3zP,EAAO2Y,QAAQ/N,MAAK,SAAU+mC,GACxBA,IAAS30C,GACX22P,EAAShxP,KAAKgvC,MAGlB3xC,EAAO2Y,QAAQvd,IAAIu4P,GACnB3zP,EAAOuzP,UAAY,MAEjBv2P,EAAK62P,aAAe72P,EAAK62P,cAAgB72P,GAC3Ci/B,GAASl4B,GAAK+mC,MAEhB,IAAIvU,EAASv5B,EAAKogD,UAAUw0M,gBAU5B,OATIr7N,UACKA,EAAOv5B,EAAKsnE,KAEjBvgE,GAAOA,EAAI5D,YACb4D,EAAI5D,WAAWmf,YAAYvb,GAE7B/G,EAAKu+B,MAAMngC,IAAI,YAAY,GAC3B4B,EAAKu+B,MAAMiE,UACXxiC,EAAKygC,KAAK,UACHzgC,GAET+vP,aAAc,SAAUhpP,GAGtB,OAFAk4B,GAASl4B,GAAKrF,OAAOU,KAAK00P,cAC1B10P,KAAKwhC,aACExhC,MAET0yC,SAAU,SAAU/tC,GAGlB,OAFAk4B,GAASl4B,GAAO3E,KAAKsyP,mBAAmBxmP,OAAO9L,KAAK00P,cACpD10P,KAAKwhC,aACExhC,MAET20P,UAAW,aAEX1sO,OAAQ,aAERysO,WAAY,WACV,MAAO,YAAc10P,KAAKklE,IAAM,YAAcllE,KAAKkE,QAAU,YAE/Ds9B,WAAY,WACV,IAEI78B,EAAKs/F,EAAKrjG,EAAQkD,EAAM8wP,EAFxBh3P,EAAOoC,KACPrD,EAAWiB,EAAKjB,SAIpB,IAAKmH,KAFLlG,EAAKqjC,IAAMpE,GAASj/B,EAAK8W,SACzB9W,EAAKu+B,MAAMngC,IAAI,YAAY,GACdW,EACgB,IAAvBmH,EAAKc,QAAQ,OACfhH,EAAK0N,GAAGxH,EAAK0e,OAAO,GAAI7lB,EAASmH,IAGrC,GAAIlG,EAAK62P,YAAa,CACpB,IAAK7zP,EAAShD,EAAKgD,UAAWg0P,GAAoBh0P,EAAQA,EAASA,EAAOA,SACxEg0P,EAAmBh0P,EAAO6zP,YAE5B,GAAIG,EACF,IAAK9wP,KAAQ8wP,EAAiBC,cAC5Bj3P,EAAKi3P,cAAc/wP,IAAQ,EAIjCgxP,GAAkBl3P,GACdjB,EAAS4J,QACX5B,EAAM/G,EAAK8W,QACP/P,IACFA,EAAIgP,aAAa,QAAShX,EAAS4J,OACnC5B,EAAI4B,MAAM0Z,QAAUtjB,EAAS4J,QAG7B3I,EAAKjB,SAASypC,SAChB69D,EAAMrmG,EAAKu0P,UACXv0P,EAAKqjC,IAAIn7B,IAAI,CACX,mBAAoBm+F,EAAInkE,IACxB,qBAAsBmkE,EAAI7D,MAC1B,sBAAuB6D,EAAIzvD,OAC3B,oBAAqByvD,EAAIpkE,QAG7B,IAAIrgC,EAAO5B,EAAKogD,UAKhB,IAAK,IAAIl/C,KAJJU,EAAKgzP,kBACRhzP,EAAKgzP,gBAAkB,IAEzBhzP,EAAKgzP,gBAAgB50P,EAAKsnE,KAAOtnE,EACjBA,EAAKq0P,MACnBr0P,EAAKwuI,KAAKttI,EAAKlB,EAAKq0P,MAAMnzP,KAEM,IAA9BlB,EAAKu+B,MAAMpgC,IAAI,aACjB6B,EAAK8W,QAAQnO,MAAMu8M,QAAU,QAE/BllN,EAAKskC,aACLtkC,EAAKu+B,MAAM7wB,GAAG,kBAAkB,SAAUR,GACxC,IACIiqP,EADA54N,EAAQrxB,EAAEhP,MAEV8B,EAAKu+B,MAAMpgC,IAAI,cACjB6B,EAAK8W,QAAQnO,MAAMu8M,SAAoB,IAAV3mL,EAAkB,OAAS,GACxDv+B,EAAK8W,QAAQ8zF,yBAEfusJ,EAAan3P,EAAKgD,SACdm0P,IACFA,EAAWZ,UAAY,MAEzBv2P,EAAKygC,KAAKlC,EAAQ,OAAS,QAC3Bq1N,GAAY3tP,IAAIjG,MAElBA,EAAKygC,KAAK,aAAc,IAAI,IAE9B6D,WAAY,aAEZo7C,eAAgB,SAAUlzE,GACxB,SAAS69F,EAAUtjG,EAAKm/I,GACtB,IAAI7wI,EAAGC,EAAGtS,EAAS+D,EACnBsO,EAAIC,EAAI,EACR,MAAOtS,GAAUA,IAAWkjJ,GAAWljJ,EAAOqiB,SAC5ChQ,GAAKrS,EAAO6rG,YAAc,EAC1Bv5F,GAAKtS,EAAO8rG,WAAa,EACzB9rG,EAASA,EAAOmjJ,aAElB,MAAO,CACL9wI,EAAGA,EACHC,EAAGA,GAGP,IACID,EAAGC,EAAGuX,EAAOC,EAAQsqO,EAAaC,EADlCtwP,EAAM3E,KAAK0U,QAASg2G,EAAY/lH,EAAI5D,WAEpCkwC,EAAMg3D,EAAUtjG,EAAK+lH,GAgBzB,OAfAz3G,EAAIg+B,EAAIh+B,EACRC,EAAI+9B,EAAI/9B,EACRuX,EAAQ9lB,EAAIo9B,YACZrX,EAAS/lB,EAAIq9B,aACbgzN,EAActqI,EAAU9oF,YACxBqzN,EAAevqI,EAAU7oF,aACX,QAAVz3B,GACF6I,GAAK+hP,EAAcvqO,EACnBvX,GAAK+hP,EAAevqO,GACD,WAAVtgB,IACT6I,GAAK+hP,EAAc,EAAIvqO,EAAQ,EAC/BvX,GAAK+hP,EAAe,EAAIvqO,EAAS,GAEnCggG,EAAU54E,WAAa7+B,EACvBy3G,EAAU34E,UAAY7+B,EACflT,MAETg+C,QAAS,WACP,IAAiBpE,EAAbppC,EAAOxQ,KACPw4D,EAAU,GACd,MAAOhoD,EAAM,CACX,GAAIA,EAAKopC,YAAa,CACpBA,EAAcppC,EAAKopC,YACnB,MAEF4e,EAAQj1D,KAAKiN,GACbopC,EAAcppC,EACdA,EAAOA,EAAK5P,SAETg5C,IACHA,EAAc55C,MAEhB,IAAIE,EAAIs4D,EAAQ74D,OAChB,MAAOO,IACLs4D,EAAQt4D,GAAG05C,YAAcA,EAE3B,OAAOA,GAETwwM,OAAQ,WACNoH,GAAYz/O,OAAO/R,MACnB,IAAIY,EAASZ,KAAKY,SAIlB,OAHIA,GAAUA,EAAO6wP,UAAY7wP,EAAO6wP,QAAQn3D,YAC9C15L,EAAOwpP,SAEFpqP,OAeX,SAASw6L,GAAmB7gL,GAiB1B,OAhBKA,EAAI8gL,mBACP9gL,EAAI8gL,iBAAmB,IAAI7sH,GAAS,CAClCzyC,MAAOxhB,EACPsgL,YAAa,SAAUn2L,EAAMq4B,GACvBA,GAASyxC,GAAS0sH,SAASx2L,KACxB6V,EAAIk7O,gBACPl7O,EAAIk7O,cAAgB,IAEtBl7O,EAAIk7O,cAAc/wP,IAAQ,EACtB6V,EAAIwiB,MAAMpgC,IAAI,aAChB+4P,GAAkBn7O,QAMrBA,EAAI8gL,iBAEb,SAASq6D,GAAkBI,GACzB,IAAIh1P,EAAG4zE,EAAGtb,EAAS28L,EAAep7D,EAAcj2L,EAChD,SAASuvH,EAASvoH,GAChB,IAAI2F,EAAUykP,EAAU3C,cAAcznP,EAAE6C,QACpC8C,GACFA,EAAQ4tB,KAAKvzB,EAAE3M,KAAM2M,GAGzB,SAASsqP,IACP,IAAI5kP,EAAO2kP,EAAcE,eACrB7kP,IACFA,EAAK6tB,KAAK,aAAc,CAAE1wB,OAAQ6C,EAAKkE,UACvClE,EAAKgoD,UAAUhtD,MAAK,SAAUgF,GAC5BA,EAAK6tB,KAAK,aAAc,CAAE1wB,OAAQ6C,EAAKkE,aAEzCygP,EAAcE,eAAiB,MAGnC,SAASC,EAAkBxqP,GACzB,IAAgG5K,EAAGs4D,EAAS+8L,EAAxG/kP,EAAO0kP,EAAU3C,cAAcznP,EAAE6C,QAAS6nP,EAAWL,EAAcE,eAAgB5pP,EAAM,EAC7F,GAAI+E,IAASglP,EAAU,CAIrB,GAHAL,EAAcE,eAAiB7kP,EAC/BgoD,EAAUhoD,EAAKgoD,UAAUhhD,UAAU6sB,UACnCm0B,EAAQj1D,KAAKiN,GACTglP,EAAU,CAGZ,IAFAD,EAAcC,EAASh9L,UAAUhhD,UAAU6sB,UAC3CkxN,EAAYhyP,KAAKiyP,GACZ/pP,EAAM,EAAGA,EAAM8pP,EAAY51P,OAAQ8L,IACtC,GAAI+sD,EAAQ/sD,KAAS8pP,EAAY9pP,GAC/B,MAGJ,IAAKvL,EAAIq1P,EAAY51P,OAAS,EAAGO,GAAKuL,EAAKvL,IACzCs1P,EAAWD,EAAYr1P,GACvBs1P,EAASn3N,KAAK,aAAc,CAAE1wB,OAAQ6nP,EAAS9gP,UAGnD,IAAKxU,EAAIuL,EAAKvL,EAAIs4D,EAAQ74D,OAAQO,IAChCsQ,EAAOgoD,EAAQt4D,GACfsQ,EAAK6tB,KAAK,aAAc,CAAE1wB,OAAQ6C,EAAKkE,WAI7C,SAAS+gP,EAAc3qP,GACrBA,EAAEm0B,iBACa,eAAXn0B,EAAE3M,MACJ2M,EAAEmzB,QAAU,EAAI,GAAKnzB,EAAE4qP,WACnB5qP,EAAE6qP,cACJ7qP,EAAEkzB,QAAU,EAAI,GAAKlzB,EAAE6qP,eAGzB7qP,EAAEkzB,OAAS,EACXlzB,EAAEmzB,OAASnzB,EAAE+nD,QAEf/nD,EAAIoqP,EAAU72N,KAAK,QAASvzB,GAG9B,GADAivL,EAAem7D,EAAUL,cACrB96D,EAAc,CAGhB,IAFAvhI,EAAU08L,EAAU18L,UAAUhhD,UAC9BghD,EAAQ6jB,QAAQ64K,GACXh1P,EAAI,EAAG4zE,EAAItb,EAAQ74D,QAASw1P,GAAiBj1P,EAAI4zE,EAAG5zE,IACvDi1P,EAAgB38L,EAAQt4D,GAAGu0P,YAM7B,IAJKU,IACHA,EAAgB38L,EAAQA,EAAQ74D,OAAS,IAAMu1P,GAEjDA,EAAUT,YAAcU,EACnBrhL,EAAI5zE,EAAGA,EAAI,EAAGA,EAAI4zE,EAAG5zE,IACxBs4D,EAAQt4D,GAAGu0P,YAAcU,EAE3B,IAAIS,EAAqBT,EAAcU,WAIvC,IAAK/xP,KAHA8xP,IACHA,EAAqBT,EAAcU,WAAa,IAErC97D,EAAc,CACzB,IAAKA,EACH,OAAO,EAEI,UAATj2L,GAAqB6tP,IAQZ,eAAT7tP,GAAkC,eAATA,EACtBqxP,EAAcW,iBACjBj5N,GAASs4N,EAAczgP,SAASpJ,GAAG,aAAc8pP,GAAmB9pP,GAAG,YAAagqP,GACpFH,EAAcW,eAAiB,GAEvBF,EAAmB9xP,KAC7B+4B,GAASs4N,EAAczgP,SAASpJ,GAAGxH,EAAMuvH,GACzCuiI,EAAmB9xP,IAAQ,GAE7Bi2L,EAAaj2L,IAAQ,GAhBf4tP,GACF70N,GAASq4N,EAAUxgP,SAASpJ,GAAG,aAAcmqP,GAE7C54N,GAASq4N,EAAUxgP,SAASpJ,GAAG,iBAAkBmqP,KAjH3Dh4P,EAAS+N,KAAK,2CAA2CuS,MAAM,MAAM,SAAUja,GAC7EguP,GAAQhuP,GAAQ,SAAUhI,GACxB,OAAyB,IAArB4D,UAAUC,OACLK,KAAKm8B,MAAMpgC,IAAI+H,IAEH,qBAAVhI,GACTkE,KAAKm8B,MAAMngC,IAAI8H,EAAMhI,GAEhBkE,UAGXugC,GAAUzD,GAAS79B,OAAO6yP,IAuH1B,IAAIiE,GAAYx1N,GAEZy1N,GAAiB,SAAUrxP,GAC7B,QAAOA,EAAIkQ,aAAa,qBAE1B,SAASohP,GAAoBt5P,GAC3B,IACIu5P,EAAgBC,EADhB32P,EAAO7C,EAAS6C,KAEpB,SAAS2sD,EAAU7jD,GACjB,OAAOA,GAA0B,IAAlBA,EAAK2a,SAEtB,IACEizO,EAAiBv6P,EAAW4E,SAASsoH,cACrC,MAAO37F,GACPgpO,EAAiBv6P,EAAW4E,SAAS8J,KAGvC,SAAS+rP,EAAQzxP,GAEf,OADAA,EAAMA,GAAOuxP,EACT/pM,EAAUxnD,GACLA,EAAIkQ,aAAa,QAEnB,KAET,SAASwhP,EAAc1xP,GACrB,IAAIsQ,EAAMrU,EAAS+D,GAAOuxP,EAC1B,MAAOt1P,EAASA,EAAOG,WACrB,GAAIkU,EAAOmhP,EAAQx1P,GACjB,OAAOqU,EAIb,SAASqhP,EAAYxyP,GACnB,IAAIa,EAAMuxP,EACV,GAAI/pM,EAAUxnD,GACZ,OAAOA,EAAIkQ,aAAa,QAAU/Q,GAGtC,SAASyyP,EAAmB5xP,GAC1B,IAAIoJ,EAAUpJ,EAAIoJ,QAAQkmD,cAC1B,MAAmB,UAAZlmD,GAAmC,aAAZA,GAAsC,WAAZA,EAE1D,SAASyoP,EAAS7xP,GAChB,SAAI4xP,EAAmB5xP,IAASA,EAAIo3L,YAGhCi6D,GAAerxP,MAGf,2EAA2E9D,KAAKu1P,EAAQzxP,KAK9F,SAAS8xP,EAAiB9xP,GACxB,IAAIrE,EAAW,GACf,SAAS+0J,EAAQ1wJ,GACf,GAAqB,IAAjBA,EAAIse,UAAwC,SAAtBte,EAAI4B,MAAMu8M,UAAsBn+M,EAAI+L,SAA9D,CAGI8lP,EAAS7xP,IACXrE,EAASiD,KAAKoB,GAEhB,IAAK,IAAIzE,EAAI,EAAGA,EAAIyE,EAAIgQ,WAAWhV,OAAQO,IACzCm1J,EAAQ1wJ,EAAIgQ,WAAWzU,KAI3B,OADAm1J,EAAQ1wJ,GAAOnF,EAAKkV,SACbpU,EAET,SAASo2P,EAAkBC,GACzB,IAAIC,EAAgBpC,EACpBmC,EAAgBA,GAAiBR,EACjC3B,EAAWmC,EAAcn+L,UAAUhhD,UACnCg9O,EAASn4K,QAAQs6K,GACjB,IAAK,IAAIz2P,EAAI,EAAGA,EAAIs0P,EAAS70P,OAAQO,IAEnC,GADA02P,EAAiBpC,EAASt0P,GACtB02P,EAAej6P,SAAS8rP,SAC1B,MAGJ,OAAOmO,EAET,SAASC,EAAWF,GAClB,IAAIC,EAAiBF,EAAkBC,GACnCG,EAAgBL,EAAiBG,EAAeliP,SAChDkiP,EAAej6P,SAASuY,cAAgB,kBAAmB0hP,EAC7DG,EAAiBH,EAAeI,cAAeF,GAE/CC,EAAiB,EAAGD,GAGxB,SAASC,EAAiBtrP,EAAKnL,GAS7B,OARImL,EAAM,EACRA,EAAMnL,EAASX,OAAS,EACf8L,GAAOnL,EAASX,SACzB8L,EAAM,GAEJnL,EAASmL,IACXnL,EAASmL,GAAKmG,QAETnG,EAET,SAASwrP,EAAU94O,EAAK7d,GACtB,IAAImL,GAAO,EACPmrP,EAAiBF,IACrBp2P,EAAWA,GAAYm2P,EAAiBG,EAAeliP,SACvD,IAAK,IAAIxU,EAAI,EAAGA,EAAII,EAASX,OAAQO,IAC/BI,EAASJ,KAAOg2P,IAClBzqP,EAAMvL,GAGVuL,GAAO0S,EACPy4O,EAAeI,cAAgBD,EAAiBtrP,EAAKnL,GAEvD,SAASu/B,IACP,IAAIq3N,EAAab,IACE,YAAfa,EACFD,GAAW,EAAGR,EAAiBP,EAAen1P,aACrCo1P,EAAev1P,SAASu2P,QACjC5xN,IAEA0xN,GAAW,GAGf,SAAS72J,IACP,IAAInrF,EAAOmhP,IAAWc,EAAab,IAChB,YAAfa,EACFD,EAAU,EAAGR,EAAiBP,EAAen1P,aAC3B,aAATkU,GAAsC,SAAfiiP,GAAyBZ,EAAY,YACrEc,IAEAH,EAAU,GAGd,SAASl4J,IACPk4J,GAAW,GAEb,SAASj4J,IACP,IAAI/pF,EAAOmhP,IAAWc,EAAab,IACtB,aAATphP,GAAsC,YAAfiiP,EACzBE,IACkB,WAATniP,GAAqBqhP,EAAY,YAC1Cc,EAAM,CAAEt4P,IAAK,SAEbm4P,EAAU,GAGd,SAASI,EAAIvsP,GACX,IAAIosP,EAAab,IACjB,GAAmB,YAAfa,EAA0B,CAC5B,IAAIvyP,EAAM8xP,EAAiBN,EAAezhP,MAAM,SAAS,GACrD/P,GACFA,EAAIiN,aAGNqlP,EAAUnsP,EAAEqtD,UAAY,EAAI,GAGhC,SAAS5yB,IACP4wN,EAAe93N,KAAK,UAEtB,SAAS+4N,EAAMhrH,GACbA,EAAOA,GAAQ,GACf+pH,EAAe93N,KAAK,QAAS,CAC3B1wB,OAAQuoP,EACR9pH,KAAMA,IAiDV,OAvMA+pH,EAAiB32P,EAAK+yP,cAAc2D,GAyJpC12P,EAAK8L,GAAG,WAAW,SAAUR,GAC3B,SAASwsP,EAAuBxsP,EAAGkyC,GAC7Bu5M,EAAmBL,IAAmBF,GAAeE,IAGzB,WAA5BE,EAAQF,KAGO,IAAfl5M,EAAQlyC,IACVA,EAAEm0B,iBAGN,IAAIn0B,EAAEy1D,qBAGN,OAAQz1D,EAAEuc,SACV,KAAK,GACHiwO,EAAuBxsP,EAAG+0B,GAC1B,MACF,KAAK,GACHy3N,EAAuBxsP,EAAGs1F,GAC1B,MACF,KAAK,GACHk3J,EAAuBxsP,EAAGi0F,GAC1B,MACF,KAAK,GACHu4J,EAAuBxsP,EAAGk0F,GAC1B,MACF,KAAK,GACHz5D,IACA,MACF,KAAK,GACL,KAAK,GACL,KAAK,GACH+xN,EAAuBxsP,EAAGssP,GAC1B,MACF,KAAK,EACHC,EAAIvsP,GACJA,EAAEm0B,iBACF,UAGJz/B,EAAK8L,GAAG,WAAW,SAAUR,GAC3BorP,EAAiBprP,EAAE6C,OACnBwoP,EAAiBrrP,EAAE2F,WAEd,CAAEomP,WAAYA,GAGvB,IAAIU,GAAgB,GAChBC,GAAYzB,GAAU92P,OAAO,CAC/BwvF,KAAM,SAAU9xF,GACd,IAAIiB,EAAOoC,KACXpC,EAAK6jC,OAAO9kC,GACZA,EAAWiB,EAAKjB,SACZA,EAASitN,OACXhsN,EAAKu+B,MAAMngC,IAAI,SAAS,GAE1B4B,EAAK65P,OAAS,IAAI9G,GACd/yP,EAAKwwG,SACPxwG,EAAKsG,QAAQL,IAAI,OAEnBjG,EAAK85P,YAAc,IAAIxI,IAAU,WAC3BtxP,EAAKu+B,MAAMpgC,IAAI,cACjB6B,EAAK8W,MAAM,QAAQ5T,UAAYd,KAAKrB,eAGxCf,EAAK85P,YAAYvpP,OAASvQ,EAAKg0P,YAC/Bh0P,EAAKsG,QAAQL,IAAI,aACjBjG,EAAK85P,YAAY7zP,IAAI,kBACjBlH,EAASg7P,cACX/5P,EAAKsG,QAAQL,IAAIlH,EAASg7P,cAE5B/5P,EAAK6zP,QAAU91O,EAAS9O,QAAQlQ,EAASuN,QAAU,IAAM,UACrDtM,EAAKjB,SAAS4c,MAChB3b,EAAKiG,IAAIjG,EAAKjB,SAAS4c,OAEvB3b,EAAKiG,IAAIjG,EAAKqqB,UAEhBrqB,EAAKq2P,UAAW,GAElB16O,MAAO,WACL,OAAOvZ,KAAKy3P,QAEdxrP,KAAM,SAAU/F,GAEd,OADAA,EAAWqxP,GAAcrxP,GAAYqxP,GAAcrxP,IAAa,IAAI4pP,GAAS5pP,GACtEA,EAAS+F,KAAKjM,OAEvB6D,IAAK,SAAU0V,GACb,IAAI3b,EAAOoC,KAEX,OADApC,EAAK2b,QAAQ1V,IAAIjG,EAAKiP,OAAO0M,IAAQ3Y,OAAOhD,GACrCA,GAETgU,MAAO,SAAU02H,GACf,IACIsvH,EAAWC,EAAat+O,EADxB3b,EAAOoC,KAEX,IAAIsoI,IACFuvH,EAAcj6P,EAAKi6P,aAAej6P,EAAK46D,UAAUviD,IAAI,GAAG,GAAG4hP,aACvDA,GAqBN,OAhBAt+O,EAAQ3b,EAAKqO,KAAK,KACdrO,EAAKknC,WACPvrB,EAAM1V,IAAIjG,EAAKknC,UAAUvrB,SAE3BA,EAAM/N,MAAK,SAAUgF,GACnB,GAAIA,EAAK7T,SAASiO,UAEhB,OADAgtP,EAAY,MACL,EAELpnP,EAAKgmP,WACPoB,EAAYA,GAAapnP,MAGzBonP,GACFA,EAAUhmP,QAELhU,EApBHi6P,EAAYhB,WAAWj5P,IAsB7BW,QAAS,SAAUu5P,EAASC,GAC1B,IAAI7J,EACA30O,EAAQvZ,KAAKuZ,QACbrZ,EAAIqZ,EAAM5Z,OACd,MAAOO,IACL,GAAIqZ,EAAMrZ,KAAO43P,EAAS,CACxBv+O,EAAMrZ,GAAK63P,EACX,MAGA73P,GAAK,IACPguP,EAAU6J,EAAQrjP,QACdw5O,GACFA,EAAQntP,WAAWmf,YAAYguO,GAEjCA,EAAU4J,EAAQpjP,QACdw5O,GACFA,EAAQntP,WAAWmf,YAAYguO,IAGnC6J,EAAQn3P,OAAOZ,OAEjB6M,OAAQ,SAAU0M,GAChB,IACI5c,EADAiB,EAAOoC,KAEPg4P,EAAY,GAiBhB,OAhBKv6P,EAAS+mB,QAAQjL,KACpBA,EAAQ,CAACA,IAEX9b,EAAS+N,KAAK+N,GAAO,SAAUg5B,GACzBA,IACIA,aAAgBwjN,KACA,kBAATxjN,IACTA,EAAO,CAAEp0C,KAAMo0C,IAEjB51C,EAAWc,EAASwB,OAAO,GAAIrB,EAAKjB,SAASkiB,SAAU0zB,GACvDA,EAAKp0C,KAAOxB,EAASwB,KAAOxB,EAASwB,MAAQo0C,EAAKp0C,MAAQP,EAAKjB,SAASs7P,cAAgBt7P,EAASkiB,SAAWliB,EAASkiB,SAAS1gB,KAAO,MACrIo0C,EAAO52B,EAAS9O,OAAOlQ,IAEzBq7P,EAAUz0P,KAAKgvC,OAGZylN,GAET7zK,UAAW,WACT,IAAIvmF,EAAOoC,KAiBX,OAhBApC,EAAK2b,QAAQ/N,MAAK,SAAUgF,EAAMvN,GAChC,IAAIk6B,EACJ3sB,EAAK5P,OAAOhD,GACP4S,EAAK2rB,MAAMpgC,IAAI,cAClBohC,EAAev/B,EAAK8W,MAAM,QACtByoB,EAAaujB,iBAAmBz9C,GAASk6B,EAAaxoB,WAAWhV,OAAS,EAC5Ek9B,GAASM,EAAaxoB,WAAW1R,IAAQ3D,OAAOkR,EAAKkkP,cAErD73N,GAASM,GAAcrxB,OAAO0E,EAAKkkP,cAErClkP,EAAKgxB,aACLgwN,GAAY3tP,IAAI2M,OAGpB5S,EAAK6zP,QAAQO,aAAap0P,EAAK2b,QAAQhO,OAAO,aAC9C3N,EAAKu2P,UAAY,KACVv2P,GAETkO,OAAQ,SAAUyN,GAChB,OAAOvZ,KAAK6D,IAAI0V,GAAO4qE,aAEzB+O,QAAS,SAAU35E,GACjB,IAAI3b,EAAOoC,KAEX,OADApC,EAAK2b,QAAQvd,IAAI4B,EAAKiP,OAAO0M,GAAO7D,OAAO9X,EAAK2b,QAAQ/B,YACjD5Z,EAAKumF,aAEd5kF,OAAQ,SAAUga,EAAOtW,EAAO3D,GAC9B,IACI44P,EAAUC,EAAaC,EADvBx6P,EAAOoC,KAYX,OAVAuZ,EAAQ3b,EAAKiP,OAAO0M,GACpB2+O,EAAWt6P,EAAK2b,SACXja,GAAU2D,EAAQi1P,EAASv4P,OAAS,IACvCsD,GAAS,GAEPA,GAAS,GAAKA,EAAQi1P,EAASv4P,SACjCw4P,EAAcD,EAASh1P,MAAM,EAAGD,GAAOuU,UACvC4gP,EAAaF,EAASh1P,MAAMD,GAAOuU,UACnC0gP,EAASl8P,IAAIm8P,EAAYziP,OAAO6D,EAAO6+O,KAElCx6P,EAAKumF,aAEdwF,SAAU,SAAU/nF,GAClB,IAAIhE,EAAOoC,KACX,IAAK,IAAI8D,KAAQlC,EACfhE,EAAKqO,KAAK,IAAMnI,GAAMhI,MAAM8F,EAAKkC,IAEnC,OAAOlG,GAETi8C,OAAQ,WACN,IAAIj8C,EAAOoC,KAAM4B,EAAO,GAOxB,OANAhE,EAAKqO,KAAK,KAAKT,MAAK,SAAUgF,GAC5B,IAAI1M,EAAO0M,EAAK1M,OAAQhI,EAAQ0U,EAAK1U,QACjCgI,GAAyB,qBAAVhI,IACjB8F,EAAKkC,GAAQhI,MAGV8F,GAET8yP,WAAY,WACV,IAAI92P,EAAOoC,KAAMkK,EAAStM,EAAK6zP,QAASx8O,EAAOjV,KAAKrD,SAASsY,KAG7D,OAFArX,EAAK+2P,YACLzqP,EAAOyqP,UAAU/2P,GACV,YAAcA,EAAKsnE,IAAM,YAActnE,EAAKsG,QAAU,KAAO+Q,EAAO,UAAYjV,KAAKrD,SAASsY,KAAO,IAAM,IAA3G,aAAqIrX,EAAKsnE,IAAM,iBAAmBtnE,EAAK85P,YAAc,MAAQ95P,EAAKjB,SAASgJ,MAAQ,IAAMuE,EAAOwqP,WAAW92P,GAA5O,gBAET4jC,WAAY,WACV,IACIyiE,EADArmG,EAAOoC,KAqBX,OAnBApC,EAAK2b,QAAQxW,KAAK,cAClBnF,EAAK6jC,SACL7jC,EAAK6zP,QAAQjwN,WAAW5jC,GACxBA,EAAKu+B,MAAMngC,IAAI,YAAY,GACvB4B,EAAKjB,SAAS4J,OAChB3I,EAAKqjC,IAAIn7B,IAAIlI,EAAKjB,SAAS4J,OAEzB3I,EAAKjB,SAASypC,SAChB69D,EAAMrmG,EAAKu0P,UACXv0P,EAAKqjC,IAAIn7B,IAAI,CACX,mBAAoBm+F,EAAInkE,IACxB,qBAAsBmkE,EAAI7D,MAC1B,sBAAuB6D,EAAIzvD,OAC3B,oBAAqByvD,EAAIpkE,QAGxBjiC,EAAKgD,WACRhD,EAAKi6P,YAAc5B,GAAmB,CAAEz2P,KAAM5B,KAEzCA,GAET60P,eAAgB,WACd,IAAI70P,EAAOoC,KAAM0uP,EAAa9wP,EAAK6jC,SAEnC,OADA7jC,EAAK6zP,QAAQ4G,OAAOz6P,GACb8wP,GAET2J,OAAQ,WACN,IAAIz6P,EAAOoC,KACPk+B,EAAOtgC,EAAKo1P,YACZhyN,EAAWpjC,EAAKu2P,UACpB,IAAKnzN,GAAYA,EAAS5jC,IAAM8gC,EAAK9gC,GAAK4jC,EAAS9xB,IAAMgvB,EAAKhvB,EAS5D,OARAtR,EAAK6zP,QAAQ4G,OAAOz6P,GACpBsgC,EAAOtgC,EAAK8wP,aACZ9wP,EAAKu2P,UAAY,CACflhP,EAAGirB,EAAKjrB,EACRC,EAAGgrB,EAAKhrB,EACR9V,EAAG8gC,EAAK9gC,EACR8R,EAAGgvB,EAAKhvB,IAEH,GAGXk7O,OAAQ,WACN,IAAIlqP,EAEJ,GADAsxP,GAAYz/O,OAAO/R,MACfA,KAAKusP,UAAW,CAClBwJ,GAAUrC,gBAAkB,GAC5BqC,GAAUrC,gBAAgBp1P,IAAM,GAChC0B,KAAKq4P,SACLn4P,EAAI61P,GAAUrC,gBAAgB/zP,OAC9B,MAAOO,IACL61P,GAAUrC,gBAAgBxzP,GAAG2+B,UAEF,SAAzB7+B,KAAKrD,SAASuN,QAA8C,UAAzBlK,KAAKrD,SAASuN,QACnDlK,KAAK6+B,UAEPk3N,GAAUrC,gBAAkB,GAE9B,OAAO1zP,QAIX,SAASs4P,GAAgBhzO,GACvB,IAAIyyD,EAAiB1tE,EAAM8nM,EAAavwK,EACpCG,EAAaqwK,EAAcvwK,EAAcG,EACzClc,EAAM9oB,KAAK8oB,IASf,OARAiyD,EAAkBzyD,EAAIyyD,gBACtB1tE,EAAOib,EAAIjb,KACX8nM,EAAcrsL,EAAIiyD,EAAgBo6H,YAAa9nM,EAAK8nM,aACpDvwK,EAAc9b,EAAIiyD,EAAgBn2C,YAAav3B,EAAKu3B,aACpDG,EAAcjc,EAAIiyD,EAAgBh2C,YAAa13B,EAAK03B,aACpDqwK,EAAetsL,EAAIiyD,EAAgBq6H,aAAc/nM,EAAK+nM,cACtDvwK,EAAe/b,EAAIiyD,EAAgBl2C,aAAcx3B,EAAKw3B,cACtDG,EAAelc,EAAIiyD,EAAgB/1C,aAAc33B,EAAK23B,cAC/C,CACLvX,MAAO0nL,EAAcpwK,EAAcH,EAAcuwK,EACjDznL,OAAQ0nL,EAAepwK,EAAeH,EAAeuwK,GAGzD,SAASmmD,GAAoBztP,GAC3B,IAAI2O,EAAMvZ,EACV,GAAI4K,EAAE0tP,eAEJ,IADA/+O,EAAO,8CAA8CsE,MAAM,KACtD7d,EAAI,EAAGA,EAAIuZ,EAAK9Z,OAAQO,IAC3B4K,EAAE2O,EAAKvZ,IAAM4K,EAAE0tP,eAAe,GAAG/+O,EAAKvZ,IAI5C,SAASs+B,GAAYt/B,EAAIvC,GACvB,IAAI87P,EAEAC,EACAv3O,EAAO4xE,EAAMr0D,EAAM6tL,EAAQC,EAF3BlnM,EAAM3oB,EAAS4D,UAAY5E,EAAW4E,SAG1C5D,EAAWA,GAAY,GACvB,IAAIg8P,EAAgBrzO,EAAIwxH,eAAen6I,EAAS2vB,QAAUptB,GAC1DiiB,EAAQ,SAAUrW,GAChB,IACIsjN,EAAWp4G,EADX4iJ,EAAUN,GAAgBhzO,GAE9BizO,GAAoBztP,GACpBA,EAAEm0B,iBACFy5N,EAAa5tP,EAAEu/H,OACf+jF,EAAYuqC,EACZpsC,EAASzhN,EAAEmnM,QACXua,EAAS1hN,EAAEonM,QAETl8F,EADEr6G,EAAW6B,OAAOu0F,iBACXp2F,EAAW6B,OAAOu0F,iBAAiBq8H,EAAW,MAAM7hK,iBAAiB,UAErE6hK,EAAUyqC,aAAa7iJ,OAElCyiJ,EAAgB57N,GAAS,eAAe/2B,IAAI,CAC1CyuC,SAAU,WACVzU,IAAK,EACLD,KAAM,EACNpV,MAAOmuO,EAAQnuO,MACfC,OAAQkuO,EAAQluO,OAChBouO,OAAQ,WACR32G,QAAS,KACTnsC,OAAQA,IACPr3E,SAASrZ,EAAIjb,MAChBwyB,GAASvX,GAAKha,GAAG,sBAAuBozB,GAAMpzB,GAAG,mBAAoBynF,GACrEp2F,EAASwkB,MAAMrW,IAEjB4zB,EAAO,SAAU5zB,GAEf,GADAytP,GAAoBztP,GAChBA,EAAEu/H,SAAWquH,EACf,OAAO3lK,EAAKjoF,GAEdA,EAAEkzB,OAASlzB,EAAEmnM,QAAUsa,EACvBzhN,EAAEmzB,OAASnzB,EAAEonM,QAAUsa,EACvB1hN,EAAEm0B,iBACFtiC,EAAS+hC,KAAK5zB,IAEhBioF,EAAO,SAAUjoF,GACfytP,GAAoBztP,GACpB+xB,GAASvX,GAAKomB,IAAI,sBAAuBhN,GAAMgN,IAAI,mBAAoBqnD,GACvE0lK,EAAc1mP,SACVpV,EAASo2F,MACXp2F,EAASo2F,KAAKjoF,IAGlB9K,KAAKogC,QAAU,WACbvD,GAAS87N,GAAejtN,OAE1B7O,GAAS87N,GAAertP,GAAG,uBAAwB6V,GAGrD,IA6II43O,GAAsBC,GAAuBC,GAG7CC,GAhJAC,GAAa,CACf1qK,KAAM,WACJ,IAAI7wF,EAAOoC,KACXpC,EAAK0N,GAAG,UAAW1N,EAAKw7P,eAE1BA,aAAc,WACZ,IAAIx7P,EAAOoC,KAAMm1C,EAAS,EAC1B,SAASkkN,IACP,IAAIC,EAAYC,EAAYh2D,EAC5B,SAASi2D,EAAYC,EAAUC,EAASC,EAAUC,EAAiBC,EAAWC,GAC5E,IAAI38N,EAAc48N,EAAcC,EAC5BhO,EAAeiO,EAAY57I,EAAOngF,EAClCg8N,EAAcC,EAElB,GADAJ,EAAen8P,EAAK8W,MAAM,SAAW+kP,GACjCM,EAAc,CAIhB,GAHAG,EAAeR,EAAQz8O,cACvBk9O,EAAgBR,EAAS18O,cACzB4f,GAASj/B,EAAK8W,MAAM,WAAW5O,IAAIo0P,EAAct8P,EAAK8wP,aAAakL,GAAmB,IACjFC,EAEH,YADAh9N,GAASk9N,GAAcj0P,IAAI,UAAW,QAGxC+2B,GAASk9N,GAAcj0P,IAAI,UAAW,SACtCq3B,EAAev/B,EAAK8W,MAAM,QAC1BslP,EAAiBp8P,EAAK8W,MAAM,SAAW+kP,EAAW,KAClDzN,EAAgB7uN,EAAa,SAAWw8N,GAAqB,EAATxkN,EACpD62M,GAAiBsN,GAAcC,EAAaQ,EAAa,SAAWD,GAAM,EAC1EG,EAAa98N,EAAa,SAAWw8N,GACrCt7I,EAAQ2tI,EAAgBiO,EACxB/7N,EAAO,GACPA,EAAKg8N,GAAgB/8N,EAAa,SAAWu8N,GAAWvkN,EACxDjX,EAAKi8N,GAAiBnO,EACtBnvN,GAASk9N,GAAcj0P,IAAIo4B,GAC3BA,EAAO,GACPA,EAAKg8N,GAAgB/8N,EAAa,SAAWu8N,GAAWr7I,EACxDngF,EAAKi8N,GAAiBnO,EAAgB3tI,EACtCxhF,GAASm9N,GAAgBl0P,IAAIo4B,IAGjCqlK,EAAU3lM,EAAK8W,MAAM,QACrB4kP,EAAa/1D,EAAQ4O,YAAc5O,EAAQ3hK,YAC3C23N,EAAah2D,EAAQ6O,aAAe7O,EAAQ1hK,aAC5C23N,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,EAAS58P,EAAKsnE,IAAM,UAAYu0L,EAAUtrP,EAASvQ,EAAKg0P,YAC5D/0N,GAASj/B,EAAK8W,SAAS5I,OAAO,YAAc0uP,EAAS,YAAcrsP,EAAS,aAAeA,EAAS,aAAesrP,EAArF,cAAqHe,EAAS,aAAersP,EAA7I,iCAC9BvQ,EAAK68P,WAAa,IAAIj8N,GAAWg8N,EAAS,IAAK,CAC7Cr5O,MAAO,WACLo5O,EAAc38P,EAAK8W,MAAM,QAAQ,SAAWglP,GAC5C78N,GAAS,IAAM29N,GAAQh5K,SAASrzE,EAAS,WAE3CuwB,KAAM,SAAU5zB,GACd,IAAIuzG,EAAOi7I,EAAYC,EAAYvN,EAC/B0C,EAAa9wP,EAAK8wP,aACtB4K,EAAa5K,EAAWuE,SAAWvE,EAAWyE,OAC9CoG,EAAa7K,EAAWwE,SAAWxE,EAAW0E,OAC9CpH,EAAgBpuP,EAAK8W,MAAM,QAAQ,SAAWilP,GAAqB,EAATxkN,EAC1D62M,GAAiBsN,GAAcC,EAAa37P,EAAK8W,MAAM,SAAW+kP,GAAU,SAAWK,GAAM,EAC7Fz7I,EAAQ2tI,EAAgBpuP,EAAK8W,MAAM,QAAQ,SAAWilP,GACtD/7P,EAAK8W,MAAM,QAAQ,SAAWglP,GAAWa,EAAczvP,EAAE,QAAUwvP,GAAgBj8I,GAErFtrB,KAAM,WACJl2D,GAAS,IAAM29N,GAAQr5K,YAAYhzE,EAAS,aAIlDvQ,EAAKsG,QAAQL,IAAI,UACjBw2P,EAAc,IAAK,MAAO,SAAU,IAAK,SACzCA,EAAc,IAAK,OAAQ,QAAS,IAAK,UAEvCz8P,EAAKjB,SAAS+9P,aACX98P,EAAK+8P,aACR/8P,EAAK+8P,YAAa,EAClBP,IACAx8P,EAAK0N,GAAG,SAAS,SAAUR,GACzB,IAAI88N,EAAShqO,EAAK8W,MAAM,QACxBkzN,EAAO91L,YAAgC,IAAjBhnC,EAAEkzB,QAAU,GAClC4pM,EAAO71L,WAAwB,GAAXjnC,EAAEmzB,OACtBo7N,OAEFx8N,GAASj/B,EAAK8W,MAAM,SAASpJ,GAAG,SAAU+tP,IAE5CA,OAKFuB,GAAQpD,GAAUv4P,OAAO,CAC3BwhC,SAAU,CACRv2B,OAAQ,MACRytP,aAAc,SAEhB/f,OAAQ,CAACuhB,IACTzE,WAAY,WACV,IAAI92P,EAAOoC,KACPkK,EAAStM,EAAK6zP,QACdnmK,EAAY1tF,EAAKjB,SAASgJ,KAW9B,OAVA/H,EAAK+2P,YACLzqP,EAAOyqP,UAAU/2P,GACQ,qBAAd0tF,EACTA,EAAY,YAAc1tF,EAAKsnE,IAAM,iBAAmBtnE,EAAK85P,YAAc,KAAOxtP,EAAOwqP,WAAW92P,GAAQ,UAEnF,oBAAd0tF,IACTA,EAAYA,EAAU1sF,KAAKhB,IAE7BA,EAAKq2P,UAAW,GAEX,YAAcr2P,EAAKsnE,IAAM,YAActnE,EAAKsG,QAAU,+CAAiDtG,EAAKi9P,cAAgB,IAAMvvK,EAAY,YAIrJwvK,GAAY,CACdC,gBAAiB,WACf/6P,KAAKgzP,YAAYN,YAAa,EAC9B1yP,KAAKm0P,UAAY,KACjBn0P,KAAKoqP,UAEP2B,SAAU,SAAU3uP,EAAG8R,GACrB,GAAI9R,GAAK,GAAK8R,GAAK,EAAG,CACpB,IAAIgvB,EAAO2vN,GAAM5tK,gBACjB7iF,EAAIA,GAAK,EAAIA,EAAI8gC,EAAK9gC,EAAIA,EAC1B8R,EAAIA,GAAK,EAAIA,EAAIgvB,EAAKhvB,EAAIA,EAG5B,OADAlP,KAAKgzP,YAAYN,YAAa,EACvB1yP,KAAK0uP,WAAW,CACrB2E,KAAMj2P,EACNk2P,KAAMpkP,EACN9R,EAAGA,EACH8R,EAAGA,IACFk7O,UAEL8B,SAAU,SAAUC,EAAIC,GACtB,IAAIxuP,EAAOoC,KAAMk+B,EAAOtgC,EAAK8wP,aAC7B,OAAO9wP,EAAKmuP,SAAS7tN,EAAK9gC,EAAI+uP,EAAIjuN,EAAKhvB,EAAIk9O,KAK3C4O,GAAgB,GAChBC,GAAS,GAEb,SAASr7M,GAAUpvC,EAAM5P,GACvB,MAAO4P,EAAM,CACX,GAAIA,IAAS5P,EACX,OAAO,EAET4P,EAAOA,EAAK5P,UAGhB,SAASs6P,GAAiBpwP,GACxB,IAAI5K,EAAI86P,GAAcr7P,OACtB,MAAOO,IAAK,CACV,IAAIuU,EAAQumP,GAAc96P,GAAIi7P,EAAY1mP,EAAM89O,cAAcznP,EAAE6C,QAChE,GAAI8G,EAAM9X,SAASyzE,SAAU,CAC3B,GAAI+qL,IACEv7M,GAAUu7M,EAAW1mP,IAAUA,EAAM7T,WAAau6P,GACpD,SAGJrwP,EAAI2J,EAAM4pB,KAAK,WAAY,CAAE1wB,OAAQ7C,EAAE6C,SAClC7C,EAAEy1D,sBACL9rD,EAAMkrB,SAKd,SAASy7N,KACFrC,KACHA,GAAuB,SAAUjuP,GACd,IAAbA,EAAEu/H,QAGN6wH,GAAiBpwP,IAEnB+xB,GAASlhC,EAAW4E,UAAU+K,GAAG,mBAAoBytP,KAGzD,SAASsC,KACFrC,KACHA,GAAwB,WACtB,IAAI94P,EACJA,EAAI86P,GAAcr7P,OAClB,MAAOO,IACLo7P,GAAgBN,GAAc96P,KAGlC28B,GAASlhC,EAAW6B,QAAQ8N,GAAG,SAAU0tP,KAG7C,SAASuC,KACP,IAAKtC,GAAqB,CACxB,IAAIuC,EAAW7/P,EAAW4E,SAASw3E,gBAC/B0jL,EAAgBD,EAAS55N,YAAa85N,EAAiBF,EAAS35N,aACpEo3N,GAAsB,WACft9P,EAAW4E,SAASqD,KAAO63P,IAAkBD,EAAS55N,aAAe85N,IAAmBF,EAAS35N,eACpG45N,EAAgBD,EAAS55N,YACzB85N,EAAiBF,EAAS35N,aAC1B85N,GAAWtvH,YAGfxvG,GAASlhC,EAAW6B,QAAQ8N,GAAG,SAAU2tP,KAG7C,SAASqC,GAAgB7mP,GACvB,IAAIgyJ,EAAUonF,GAAM1wP,cAAc+V,EAClC,SAAS0oP,EAAuBhyC,EAAO3rL,GAErC,IADA,IAAIr9B,EACKV,EAAI,EAAGA,EAAI86P,GAAcr7P,OAAQO,IACxC,GAAI86P,GAAc96P,KAAOuU,EAAO,CAC9B7T,EAASo6P,GAAc96P,GAAGU,SAC1B,MAAOA,IAAWA,EAASA,EAAOA,UAC5BA,IAAW6T,GACbumP,GAAc96P,GAAG0pN,MAAMA,GAAO5sH,OAAO,EAAG/+D,GAAQY,WAMtDpqB,EAAM9X,SAASutP,UACZz1O,EAAM0nB,MAAMpgC,IAAI,SAOf0Y,EAAMonP,UAAYp1F,IACpBhyJ,EAAMm1M,OAAM,GAAO8kC,WAAW,CAAEx7O,EAAGuB,EAAMonP,YAAah9N,UACtD+8N,GAAuB,EAAOnnP,EAAMonP,UAAYp1F,KARlDhyJ,EAAMonP,UAAYpnP,EAAMi6O,aAAax7O,EACjCuB,EAAMonP,UAAYp1F,IACpBhyJ,EAAMm1M,OAAM,GAAM8kC,WAAW,CAAEx7O,EAAG,IAAK2rB,UACvC+8N,GAAuB,EAAMn1F,EAAUhyJ,EAAMonP,cAUrD,SAASC,GAAUj4P,EAAK2M,GACtB,IAAItQ,EAAwC67P,EAArCjD,EAAS6C,GAAW7C,QAAU,MACrC,GAAIj1P,EACFo3P,GAAO13P,KAAKiN,OACP,CACLtQ,EAAI+6P,GAAOt7P,OACX,MAAOO,IACD+6P,GAAO/6P,KAAOsQ,GAChByqP,GAAOv3P,OAAOxD,EAAG,GAIvB,GAAI+6P,GAAOt7P,OACT,IAAKO,EAAI,EAAGA,EAAI+6P,GAAOt7P,OAAQO,IACzB+6P,GAAO/6P,GAAG87P,QACZlD,IACAiD,EAAWd,GAAO/6P,IAEpB+6P,GAAO/6P,GAAGwU,QAAQnO,MAAMuyP,OAASA,EACjCmC,GAAO/6P,GAAG44P,OAASA,EACnBA,IAGJ,IAAImD,EAAep/N,GAAS,IAAMrsB,EAAKohP,YAAc,cAAephP,EAAK8hP,mBAAmB,GACxFyJ,EACFl/N,GAASo/N,GAAcn2P,IAAI,UAAWi2P,EAASjD,OAAS,GAC/CmD,IACTA,EAAal7P,WAAWmf,YAAY+7O,GACpC/C,IAAW,GAEbyC,GAAWO,cAAgBpD,EAE7B,IAAI6C,GAAaf,GAAM37P,OAAO,CAC5B24O,OAAQ,CACN4W,GACAsM,IAEFrsK,KAAM,SAAU9xF,GACd,IAAIiB,EAAOoC,KACXpC,EAAK6jC,OAAO9kC,GACZiB,EAAK62P,YAAc72P,EACnBA,EAAKsG,QAAQL,IAAI,cACblH,EAASyzE,WACXgrL,KACAG,KACAP,GAAcz3P,KAAK3F,IAEjBjB,EAASutP,UACXmR,KACAz9P,EAAK0N,GAAG,QAAQ,WACdgwP,GAAgBt7P,UAGpBpC,EAAK0N,GAAG,mBAAmB,SAAUR,GACnC,GAAIA,EAAE2F,UAAY7S,EAAM,CACtB,IAAIu+P,EACAC,EAAWx+P,EAAKg0P,YAChBh0P,EAAKo+P,QAAU9C,KACjBiD,EAAkBt/N,GAAS,IAAMu/N,EAAW,cAAex+P,EAAK00P,mBAC3D6J,EAAgB,KACnBA,EAAkBt/N,GAAS,YAAcu/N,EAAW,uBAAyBA,EAAW,SAAWA,EAAW,gBAAgBz9N,SAAS/gC,EAAK00P,oBAE9I71N,EAASrQ,YAAW,WAClB+vO,EAAgB36K,SAAS46K,EAAW,MACpCv/N,GAASj/B,EAAK8W,SAAS8sE,SAAS46K,EAAW,SAE7ClD,IAAW,GAEb4C,IAAU,EAAMl+P,OAGpBA,EAAK0N,GAAG,QAAQ,WACd1N,EAAK46D,UAAUhtD,MAAK,SAAUgF,GAC5B,GAAIA,EAAK2rB,MAAMpgC,IAAI,SAEjB,OADA6B,EAAKgsN,OAAM,IACJ,QAITjtN,EAAS0/P,UACXz+P,EAAKi9P,aAAe,eAAiBj9P,EAAKg0P,YAAc,gBACxDh0P,EAAKsG,QAAQL,IAAI,WAAWA,IAAI,UAAUA,IAAIjG,EAAKwwG,QAAU,MAAQ,UAEvExwG,EAAKwuI,KAAK,QAASzvI,EAAS+N,WAC5B9M,EAAKwuI,KAAK,aAAcxuI,EAAKsnE,KAC7BtnE,EAAKwuI,KAAK,cAAexuI,EAAK0+P,aAAe1+P,EAAKsnE,IAAM,UAE1D0kJ,MAAO,SAAUztL,GACf,IAAIv+B,EAAOoC,KACX,GAAIpC,EAAKu+B,MAAMpgC,IAAI,WAAaogC,EAAO,CACrC,GAAIv+B,EAAKu+B,MAAMpgC,IAAI,YAAa,CAC9B,IAAIywG,EAAWqhJ,GAAM1wP,cACjBg/B,EACFv+B,EAAK8wP,aAAax7O,GAAKs5F,EAASt5F,EAEhCtV,EAAK8wP,aAAax7O,GAAKs5F,EAASt5F,EAGpCtV,EAAKsG,QAAQiH,OAAO,QAASgxB,GAC7Bv+B,EAAKu+B,MAAMngC,IAAI,QAASmgC,GAE1B,OAAOv+B,GAET8hC,KAAM,WACJ,IACIx/B,EADAtC,EAAOoC,KAEPm8B,EAAQv+B,EAAK6jC,SACjBvhC,EAAI86P,GAAcr7P,OAClB,MAAOO,IACL,GAAI86P,GAAc96P,KAAOtC,EACvB,MAMJ,OAHW,IAAPsC,GACF86P,GAAcz3P,KAAK3F,GAEdu+B,GAETwD,KAAM,WAGJ,OAFA48N,GAAmBv8P,MACnB87P,IAAU,EAAO97P,MACVA,KAAKyhC,UAEd4qG,QAAS,WACPsvH,GAAWtvH,WAEb5nI,MAAO,WACL,IAAI7G,EAAOoC,KAKX,OAJKpC,EAAKygC,KAAK,SAASkiC,uBACtB3iE,EAAKmU,SACL+pP,IAAU,EAAOl+P,IAEZA,GAETmU,OAAQ,WACNwqP,GAAmBv8P,MACnBA,KAAKyhC,UAEPD,WAAY,WACV,IAAI5jC,EAAOoC,KAIX,OAHIpC,EAAKjB,SAAS6/P,UAChBx8P,KAAK0U,MAAM,QAAQf,aAAa,OAAQ/V,EAAKjB,SAAS6/P,UAEjD5+P,EAAK6jC,YAahB,SAAS86N,GAAmB9nP,GAC1B,IAAIvU,EACJA,EAAI86P,GAAcr7P,OAClB,MAAOO,IACD86P,GAAc96P,KAAOuU,GACvBumP,GAAct3P,OAAOxD,EAAG,GAG5BA,EAAI+6P,GAAOt7P,OACX,MAAOO,IACD+6P,GAAO/6P,KAAOuU,GAChBwmP,GAAOv3P,OAAOxD,EAAG,GArBvBy7P,GAAWtvH,QAAU,WACnB,IAAInsI,EAAI86P,GAAcr7P,OACtB,MAAOO,IAAK,CACV,IAAIuU,EAAQumP,GAAc96P,GACtBuU,GAASA,EAAM9X,SAASyzE,WAC1B37D,EAAMkrB,OACNq7N,GAAct3P,OAAOxD,EAAG,MAoB9B,IAAIu8P,GAAY,SAAUC,EAAwBhgQ,GAChD,SAAUggQ,GAA2BhgQ,EAAOC,SAASm0C,eAEnDu6E,GAAW,SAAU3uH,EAAQg8L,EAAOp1L,GACtC,IAAImR,EAAOioP,EACPx/P,EAAM0Q,EAAS1Q,IACfy/P,EAAwBjW,EAAyBhqP,GACjDigQ,IACFD,EAAyBx/P,EAAI4L,OAAO6zP,GAAuB,IAE7D,IAAIz1F,EAAa,WACf,GAAIzyJ,GAASA,EAAMwyK,SAAWxyK,EAAM83O,YAAc93O,EAAMmoP,OAAQ,CAC9D,IAAIlsE,EAAkBh0L,EAAO6L,UAAUooL,qBAAsBtmL,EAAO3N,EAAOoU,UACvEktB,EAAS,EAAGC,EAAS,EACzB,GAAIyyJ,EAAiB,CACnB,IAAImsE,EAAU3/P,EAAI20C,OAAOxnC,GAAOyyP,EAAqB5/P,EAAI20C,OAAO6+I,GAChE1yJ,EAAShhC,KAAK8oB,IAAI,EAAGg3O,EAAmB7pP,EAAI4pP,EAAQ5pP,GACpDgrB,EAASjhC,KAAK8oB,IAAI,EAAGg3O,EAAmB5pP,EAAI2pP,EAAQ3pP,GAEtDuB,EAAMm1M,OAAM,GAAO3iC,QAAQ58K,EAAM3N,EAAO0nC,IAAM,CAC5C,QACA,SACE,CACF,QACA,QACA,UACC44D,OAAOh/D,EAAQC,KAGlByB,EAAO,WACLjrB,IACFA,EAAMirB,OACNwnI,IACAhqK,EAAIskF,SAAS9kF,EAAOoU,UAAW,oBAG/B6uB,EAAO,WACLlrB,IACFA,EAAMkrB,OACNg8N,GAAWtvH,UACXnvI,EAAIikF,YAAYzkF,EAAOoU,UAAW,oBAGlCmX,EAAS,WACPxT,EACGA,EAAM83O,WACT7sN,KAIJjrB,EAAQikL,EAAMjkL,MAAQkH,EAAS9O,OAAO,CACpC1O,KAAMu+P,EAAyB,QAAU,aACzCznP,KAAM,cACN/Q,QAAS,yBACTgG,OAAQ,OACRC,UAAW,SACXC,MAAO,UACPgmE,UAAU,EACV85K,SAAS,EACTtgC,MAAO6yC,GAAUC,EAAwBhgQ,GACzC0pC,OAAQ,EACR7sB,MAAO,EACkB,IAAvB+sO,EAAW5pP,GAAoB,KAAO,CACpCyB,KAAM,UACNioC,OAAQ,UACR7sB,MAAOuyO,GAAQJ,kBAAkBhvP,IAEnCgsP,EAAQH,eAAe7rP,EAAQ+pP,EAAe/pP,OAGlDurP,EAAYJ,eAAenrP,EAAQ+X,GACnC0lD,EAAOstL,mBAAmB/qP,GACtBggQ,EACFjoP,EAAMi+B,SAASgqN,GAAwBtS,SAEvC31O,EAAMi+B,WAAW03M,SAEnBzC,EAAKD,QAAQhrP,EAAQ+X,GACrBirB,IACA4qN,GAAgBjB,sBAAsB3sP,GACtCA,EAAO4O,GAAG,aAAc47J,GACxBxqK,EAAO4O,GAAG,eAAgB47J,GAC1BxqK,EAAO4O,GAAG,WAAYo0B,GACtBhjC,EAAO4O,GAAG,aAAcq0B,GACxBjjC,EAAOmV,gBAsBT,OApBAnV,EAAOC,SAASgjM,kBAAmB,EACnCjjM,EAAO4O,GAAG,SAAS,YACc,IAA3Bw7O,EAAepqP,IAAqB4G,EAAKgqP,UAC3CpwP,EAAIk3J,iBAAiBxmE,KAAKtqF,EAAKgqP,UAAWrlO,EAAQA,GAElDA,OAGJvrB,EAAO4O,GAAG,YAAaq0B,GACvBjjC,EAAO4O,GAAG,UAAU,WACdmJ,IACFA,EAAM1C,SACN0C,EAAQ,UAGmB,IAA3BqyO,EAAepqP,IAAqB4G,EAAKgqP,UAC3CpwP,EAAIk3J,iBAAiBxmE,KAAKtqF,EAAKgqP,UAAWN,GAAWzF,eAAe7qP,IAEpEswP,GAAWzF,eAAe7qP,EAA1BswP,GAEK,IAEL+P,GAAS,CAAE90O,OAAQojG,IAEvB,SAASluE,GAAUx4C,EAAKiI,GACtB,IACIuvB,EAEA21F,EAHAl0H,EAAOoC,KAEP4xP,EAAcmE,GAAUnE,YAE5Bh0P,EAAK8hC,KAAO,SAAU0vG,EAAMnvI,GAC1B,SAASgoB,IACHkU,IACFU,GAASl4B,GAAKmH,OAAO,eAAiB8lP,EAAc,YAAchlP,EAAS,IAAMglP,EAAc,kBAAoB,IAAM,YACrH3xP,GACFA,KAWN,OAPArC,EAAK+hC,OACLxD,GAAQ,EACJizG,EACFtd,EAAQr1F,EAASrQ,WAAWnE,EAAQmnH,GAEpCnnH,IAEKrqB,GAETA,EAAK+hC,KAAO,WACV,IAAIisB,EAAQjnD,EAAIy6C,UAMhB,OALA3iB,EAAS4O,aAAaymF,GAClBlmE,IAAkD,IAAzCA,EAAM9qD,UAAU8D,QAAQ,aACnCgnD,EAAM7qD,WAAWmf,YAAY0rC,GAE/BzvB,GAAQ,EACDv+B,GAIX,IAAIyN,GAAQ,SAAU3O,EAAQg8L,GAC5B,IAAIt7I,EACJ1gD,EAAO4O,GAAG,iBAAiB,SAAUR,GACnCsyC,EAAWA,GAAY,IAAID,GAASu7I,EAAMjkL,MAAMC,MAAM,SAClD5J,EAAEqxB,MACJihB,EAAS1d,KAAK50B,EAAEskI,MAEhBhyF,EAASzd,WAIXq9N,GAAgB,CAAE3xP,MAAOA,IAEzBq/N,GAAW,SAAUhuO,EAAQg8L,EAAOp1L,GACtC,IAAI8+E,EAAU4kK,EAAWtqP,GAMzB,OALI0lF,IACF9+E,EAAKgqP,UAAYlrK,EAAU,gBAC3B1lF,EAAOysB,WAAW5lB,KAAK6+E,EAAU,YAAc1lF,EAAOkQ,OAAS,UAAY,IAAM,aAEnFowP,GAAc3xP,MAAM3O,EAAQg8L,GACrBx3E,EAASxkH,GAAUqgQ,GAAO90O,OAAOvrB,EAAQg8L,EAAOp1L,GAAQsqP,GAAO3lO,OAAOvrB,EAAQg8L,EAAOp1L,IAE1FopO,GAAS,CAAEhC,SAAUA,IAErBuyB,GAAUlH,GAAU92P,OAAO,CAC7B24O,OAAQ,CAAC4W,IACT/tN,SAAU,CAAEv8B,QAAS,4BACrBwwP,WAAY,WACV,IAAI92P,EAAOoC,KAAMmO,EAASvQ,EAAKg0P,YAC/B,MAAO,YAAch0P,EAAKsnE,IAAM,YAActnE,EAAKsG,QAA5C,qCAAkGiK,EAAlG,oCAAsJA,EAAS,kBAAoBvQ,EAAKI,OAAOJ,EAAKu+B,MAAMpgC,IAAI,SAA9M,gBAETmmC,WAAY,WACV,IAAItkC,EAAOoC,KAIX,OAHApC,EAAKu+B,MAAM7wB,GAAG,eAAe,SAAUR,GACrClN,EAAK8W,QAAQ0qC,UAAUv9C,UAAYjE,EAAKI,OAAO8M,EAAEhP,UAE5C8B,EAAK6jC,UAEd5C,QAAS,WACP,IACIt4B,EAAO23B,EADPtgC,EAAOoC,KAEXuG,EAAQ3I,EAAK8W,QAAQnO,MACrB23B,EAAOtgC,EAAKo1P,YACZzsP,EAAMs5B,KAAO3B,EAAKjrB,EAAI,KACtB1M,EAAMu5B,IAAM5B,EAAKhrB,EAAI,KACrB3M,EAAMuyP,OAAS,UAIfoE,GAASnH,GAAU92P,OAAO,CAC5BwvF,KAAM,SAAU9xF,GACd,IAAIiB,EAAOoC,KACXpC,EAAK6jC,OAAO9kC,GACZA,EAAWiB,EAAKjB,SAChBiB,EAAK44P,UAAW,EACZ75P,EAASqU,UAA+B,IAApBksP,GAAOC,WAC7Bv/P,EAAK0N,GAAG,cAAc,SAAUR,GAC9B,IAAIkG,EAAUpT,EAAKoT,UAAU2hC,QAAQ,OACrC,GAAI7nC,EAAE2F,UAAY7S,EAAM,CACtB,IAAIkP,EAAMkE,EAAQ7O,KAAKxF,EAASqU,SAAS0uB,OAAO+uN,YAAY7wP,EAAK8W,QAAS,CACxE,QACA,QACA,UAEF1D,EAAQ9M,QAAQiH,OAAO,YAAqB,UAAR2B,GACpCkE,EAAQ9M,QAAQiH,OAAO,aAAsB,UAAR2B,GACrCkE,EAAQ9M,QAAQiH,OAAO,aAAsB,UAAR2B,GACrCkE,EAAQi2K,QAAQrpL,EAAK8W,QAAS5H,QAE9BkE,EAAQ2uB,UAGZ/hC,EAAK0N,GAAG,8BAA8B,WACpC1N,EAAKoT,UAAUe,SACfnU,EAAKw/P,SAAW,SAGpBx/P,EAAKwuI,KAAK,QAASzvI,EAAS+N,WAAa/N,EAASqU,UAEpDA,QAAS,WAMP,OALKhR,KAAKo9P,WACRp9P,KAAKo9P,SAAW,IAAIH,GAAQ,CAAE9+P,KAAM,YACpC8pP,EAAYH,mBAAmB9nP,KAAMA,KAAKo9P,UAC1Cp9P,KAAKo9P,SAAS1qN,YAET1yC,KAAKo9P,UAEd57N,WAAY,WACV,IAAI5jC,EAAOoC,KAAMrD,EAAWiB,EAAKjB,SACjCiB,EAAK6jC,SACA7jC,EAAKgD,WAAajE,EAAS8tB,QAAS9tB,EAAS+tB,SAChD9sB,EAAK60P,iBACL70P,EAAKihC,WAEHliC,EAASiO,WACXhN,EAAKgU,SAGTswB,WAAY,WACV,IAAItkC,EAAOoC,KACX,SAASq9P,EAAQlhO,GACfv+B,EAAKwuI,KAAK,WAAYjwG,GACtBv+B,EAAKsG,QAAQiH,OAAO,WAAYgxB,GAElC,SAASs8B,EAAOt8B,GACdv+B,EAAKwuI,KAAK,UAAWjwG,GACrBv+B,EAAKsG,QAAQiH,OAAO,SAAUgxB,GAchC,OAZAv+B,EAAKu+B,MAAM7wB,GAAG,mBAAmB,SAAUR,GACzCuyP,EAAQvyP,EAAEhP,UAEZ8B,EAAKu+B,MAAM7wB,GAAG,iBAAiB,SAAUR,GACvC2tD,EAAO3tD,EAAEhP,UAEP8B,EAAKu+B,MAAMpgC,IAAI,aACjBshQ,GAAQ,GAENz/P,EAAKu+B,MAAMpgC,IAAI,WACjB08D,GAAO,GAEF76D,EAAK6jC,UAEd1vB,OAAQ,WACN/R,KAAKyhC,SACDzhC,KAAKo9P,WACPp9P,KAAKo9P,SAASrrP,SACd/R,KAAKo9P,SAAW,SAKlBE,GAAWJ,GAAOj+P,OAAO,CAC3BwhC,SAAU,CAAE3kC,MAAO,GACnB2yF,KAAM,SAAU9xF,GACd,IAAIiB,EAAOoC,KACXpC,EAAK6jC,OAAO9kC,GACZiB,EAAKsG,QAAQL,IAAI,YACZjG,EAAKjB,SAAS4O,SACjB3N,EAAKjB,SAAS4O,OAAS,SAAUzP,GAC/B,OAAOkB,KAAKm5B,MAAMr6B,MAIxB44P,WAAY,WACV,IAAI92P,EAAOoC,KAAMd,EAAKtB,EAAKsnE,IAAK/2D,EAASnO,KAAK4xP,YAC9C,MAAO,YAAc1yP,EAAK,YAActB,EAAKsG,QAAtC,iBAAwEiK,EAAxE,8BAAsHA,EAAtH,gCAA2KA,EAA3K,wBAETqzB,WAAY,WACV,IAAI5jC,EAAOoC,KAGX,OAFApC,EAAK6jC,SACL7jC,EAAK9B,MAAM8B,EAAKjB,SAASb,OAClB8B,GAETskC,WAAY,WACV,IAAItkC,EAAOoC,KACX,SAASu9P,EAASzhQ,GAChBA,EAAQ8B,EAAKjB,SAAS4O,OAAOzP,GAC7B8B,EAAK8W,QAAQ0qC,UAAUv9C,UAAY/F,EAAQ,IAC3C8B,EAAK8W,QAAQE,WAAWA,WAAWrO,MAAMkkB,MAAQ3uB,EAAQ,IAM3D,OAJA8B,EAAKu+B,MAAM7wB,GAAG,gBAAgB,SAAUR,GACtCyyP,EAASzyP,EAAEhP,UAEbyhQ,EAAS3/P,EAAKu+B,MAAMpgC,IAAI,UACjB6B,EAAK6jC,YAIZ+7N,GAAmB,SAAUxyO,EAAK7oB,GACpC6oB,EAAItW,QAAQ0qC,UAAUl+C,YAAciB,GAAQ6oB,EAAIs5K,YAAc,IAAMt5K,EAAIs5K,YAAYxoM,QAAU,IAAM,KAElG2hQ,GAAe1H,GAAU92P,OAAO,CAClC24O,OAAQ,CAAC4W,IACT/tN,SAAU,CAAEv8B,QAAS,uBACrBuqF,KAAM,SAAU9xF,GACd,IAAIiB,EAAOoC,KACXpC,EAAK6jC,OAAO9kC,GACZiB,EAAK2M,SAAW5N,EAAS4N,SACrB5N,EAASwF,MACXvE,EAAKuE,KAAKxF,EAASwF,MAEjBxF,EAAS4Q,OACX3P,EAAK2P,KAAO5Q,EAAS4Q,MAEnB5Q,EAAS2U,QACX1T,EAAK0T,MAAQ3U,EAAS2U,OAEpB3U,EAASwB,MACXP,EAAKsG,QAAQL,IAAI,gBAAkBlH,EAASwB,MAE1CxB,EAASqmE,UAAYrmE,EAASqmE,QAAU,GAAKrmE,EAASqmE,QAAU,KAAOrmE,EAAS+gQ,YAClF9/P,EAAK8/P,aAAc,GAEnB9/P,EAAKsG,QAAQL,IAAI,aACjBjG,EAAK8/P,aAAc,GAEjB/gQ,EAAS2nM,cACX1mM,EAAK0mM,YAAc,IAAIg5D,IAEzB1/P,EAAK0N,GAAG,SAAS,SAAUR,IACuC,IAA5DA,EAAE6C,OAAO7M,UAAU8D,QAAQhH,EAAKg0P,YAAc,UAChDh0P,EAAK6G,YAIXiwP,WAAY,WACV,IAAI92P,EAAOoC,KACPmO,EAASvQ,EAAKg0P,YACdrkP,EAAO,GAAImwP,EAAc,GAAIp5D,EAAc,GAAIq5D,EAAoB,GAWvE,OAVI//P,EAAK2P,OACPA,EAAO,aAAeY,EAAf,OAAsCA,EAAS,KAAOvQ,EAAK2P,KAAO,UAE3EowP,EAAoB,sBAAwB//P,EAAK2M,SAAW,OAAS3M,EAAK0T,MAAQ,qBAAuB1T,EAAK0T,MAAQ,KAAO,KACzH1T,EAAK8/P,cACPA,EAAc,gCAAkCvvP,EAAS,wCAEvDvQ,EAAK0mM,cACPA,EAAc1mM,EAAK0mM,YAAYowD,cAE1B,YAAc92P,EAAKsnE,IAAM,YAActnE,EAAKsG,QAAU,IAAMy5P,EAAoB,wBAA0BpwP,EAAO,eAAiBY,EAAS,uBAAyBvQ,EAAKu+B,MAAMpgC,IAAI,QAAU,SAAWuoM,EAAco5D,EAAtN,2LAETl8N,WAAY,WACV,IAAI5jC,EAAOoC,KAKX,OAJAy8B,EAASrQ,YAAW,WAClBxuB,EAAKqjC,IAAIugD,SAAS5jF,EAAKg0P,YAAc,MACrC4L,GAAiB5/P,EAAMA,EAAKu+B,MAAMpgC,IAAI,WACrC,KACI6B,EAAK6jC,UAEdS,WAAY,WACV,IAAItkC,EAAOoC,KAWX,OAVApC,EAAKu+B,MAAM7wB,GAAG,eAAe,SAAUR,GACrClN,EAAK8W,QAAQE,WAAW/S,UAAYiJ,EAAEhP,MACtC0hQ,GAAiB5/P,EAAMkN,EAAEhP,UAEvB8B,EAAK0mM,cACP1mM,EAAK0mM,YAAYpiK,aACjBtkC,EAAK0mM,YAAYnoK,MAAM7wB,GAAG,gBAAgB,SAAUR,GAClD0yP,GAAiB5/P,EAAMA,EAAKu+B,MAAMpgC,IAAI,aAGnC6B,EAAK6jC,UAEdh9B,MAAO,WACL,IAAI7G,EAAOoC,KAIX,OAHKpC,EAAKygC,KAAK,SAASkiC,sBACtB3iE,EAAKmU,SAEAnU,GAETihC,QAAS,WACP,IACIt4B,EAAO23B,EADPtgC,EAAOoC,KAEXuG,EAAQ3I,EAAK8W,QAAQnO,MACrB23B,EAAOtgC,EAAKo1P,YACZzsP,EAAMs5B,KAAO3B,EAAKjrB,EAAI,KACtB1M,EAAMu5B,IAAM5B,EAAKhrB,EAAI,KACrB3M,EAAMuyP,OAAS,SAInB,SAASh1D,GAAyBpnM,GAChC,IAAIkhQ,EAAqB,SAAUlhQ,GACjC,OAAOA,EAAOkQ,OAASlQ,EAAOipL,aAAejpL,EAAOw1C,2BAElD2rN,EAAoB,WACtB,IAAI96O,EAAY66O,EAAmBlhQ,GACnC,OAAOmxP,GAAMx2M,QAAQt0B,GAAW0H,OAE9BqzO,EAA2B,SAAU55D,GACvC14L,GAAK04L,GAAe,SAAUM,GAC5BA,EAAa7xJ,OAAO,EAAG,OAGvBorN,EAAwB,SAAU75D,GACpC,GAAIA,EAAcvkM,OAAS,EAAG,CAC5B,IAAIq+P,EAAY95D,EAAchhM,MAAM,EAAG,GAAG,GACtC6f,EAAY66O,EAAmBlhQ,GACnCshQ,EAAU/2E,QAAQlkK,EAAW,SAC7BvX,GAAK04L,GAAe,SAAUM,EAAcvhM,GACtCA,EAAQ,GACVuhM,EAAavd,QAAQid,EAAcjhM,EAAQ,GAAGyR,QAAS,cAK3DwyJ,EAAa,SAAUg9B,GACzB45D,EAAyB55D,GACzB65D,EAAsB75D,IAEpBv6L,EAAO,SAAUrG,EAAM26P,GACzB,IAAIC,EAAezgQ,EAASwB,OAAOqE,EAAM,CAAEiH,SAAUszP,MACjDM,EAAQ,IAAIV,GAAaS,GAY7B,OAXAC,EAAM76P,KAAO46P,EACTA,EAAal7L,QAAU,IACzBm7L,EAAMrsI,MAAQ1lG,YAAW,WACvB+xO,EAAM15P,QACNw5P,MACCC,EAAal7L,UAElBm7L,EAAM7yP,GAAG,SAAS,WAChB2yP,OAEFE,EAAMzrN,WACCyrN,GAEL15P,EAAQ,SAAU+/L,GACpBA,EAAa//L,SAEXu/L,EAAU,SAAUQ,GACtB,OAAOA,EAAalhM,MAEtB,MAAO,CACLqG,KAAMA,EACNlF,MAAOA,EACPyiK,WAAYA,EACZ88B,QAASA,GAIb,IAAIh9I,GAAU,GACVo3M,GAAe,GACnB,SAASC,GAAsBliO,GAC7B,IACmDmiO,EAD/CC,EAAmB,2FACnB/xJ,EAAW3vE,GAAS,uBAAuB,IACb,IAA9BD,GAAS8xG,mBAGRliC,IACHA,EAAW7wG,EAAW4E,SAASsqB,cAAc,QAC7C2hF,EAAS74F,aAAa,OAAQ,YAC9BhY,EAAW4E,SAASyM,qBAAqB,QAAQ,GAAGC,YAAYu/F,IAElE8xJ,EAAe9xJ,EAAS33F,aAAa,WACjCypP,GAAwC,qBAAjBF,KACzBA,GAAeE,GAEjB9xJ,EAAS74F,aAAa,UAAWwoB,EAAQoiO,EAAmBH,KAE9D,SAASI,GAA4B5M,EAAaz1N,GAC5CsiO,OAAsC,IAAVtiO,GAC9BU,GAAS,CACPlhC,EAAW4E,SAASw3E,gBACpBp8E,EAAW4E,SAAS8J,OACnB82E,YAAYywK,EAAc,cAGjC,SAAS6M,KACP,IAAK,IAAIv+P,EAAI,EAAGA,EAAI8mD,GAAQrnD,OAAQO,IAClC,GAAI8mD,GAAQ9mD,GAAGw+P,YACb,OAAO,EAGX,OAAO,EAET,SAASC,KACP,IAAK/hO,GAASiyG,QAAS,CACrB,IAAI+vH,EAAa,CACfxhQ,EAAGzB,EAAW6B,OAAO0iF,WACrBhxE,EAAGvT,EAAW6B,OAAO2iF,aAEvB1jD,EAAS2oC,aAAY,WACnB,IAAIhoE,EAAIzB,EAAW6B,OAAO0iF,WAAYhxE,EAAIvT,EAAW6B,OAAO2iF,YACxDy+K,EAAWxhQ,IAAMA,GAAKwhQ,EAAW1vP,IAAMA,IACzC0vP,EAAa,CACXxhQ,EAAGA,EACH8R,EAAGA,GAEL2tB,GAASlhC,EAAW6B,QAAQkyH,QAAQ,aAErC,KAEL,SAASw3C,IACP,IAAIhnK,EAEAwuP,EADAxwN,EAAO2vN,GAAM5tK,gBAEjB,IAAK//E,EAAI,EAAGA,EAAI8mD,GAAQrnD,OAAQO,IAC9BwuP,EAAa1nM,GAAQ9mD,GAAGwuP,aACxB1nM,GAAQ9mD,GAAGyyC,OAAOqU,GAAQ9mD,GAAGvD,SAASsW,GAAKjW,KAAK8oB,IAAI,EAAGoY,EAAK9gC,EAAI,EAAIsxP,EAAWtxP,EAAI,GAAI4pD,GAAQ9mD,GAAGvD,SAASuW,GAAKlW,KAAK8oB,IAAI,EAAGoY,EAAKhvB,EAAI,EAAIw/O,EAAWx/O,EAAI,IAG5J2tB,GAASlhC,EAAW6B,QAAQ8N,GAAG,SAAU47J,GAE3C,IAAIghC,GAASyzD,GAAW18P,OAAO,CAC7B+8P,OAAO,EACPv7N,SAAU,CACR2F,OAAQ,EACRl8B,OAAQ,OACRytP,aAAc,QACd1iP,KAAM,SACNlR,UAAW,CACT8sE,OAAQ,WACN7wE,KAAKq+B,KAAK,SAAU,CAAEz8B,KAAM5B,KAAK65C,YAEnCp1C,MAAO,WACLzE,KAAKyE,WAIXgqF,KAAM,SAAU9xF,GACd,IAAIiB,EAAOoC,KACXpC,EAAK6jC,OAAO9kC,GACRiB,EAAKwwG,SACPxwG,EAAKsG,QAAQL,IAAI,OAEnBjG,EAAKsG,QAAQL,IAAI,UACjBjG,EAAK85P,YAAY7zP,IAAI,eACrBjG,EAAKu+B,MAAMngC,IAAI,SAAS,GACpBW,EAAS+e,UACX9d,EAAKknC,UAAY,IAAI81N,GAAM,CACzB1wP,OAAQ,OACRk8B,OAAQ,UACRtrB,QAAS,EACTD,QAAS,GACTzQ,MAAO,SACPi8B,KAAMzoC,EAAKwwG,QAAU,QAAU,MAC/BvvF,SAAU,CAAE1gB,KAAM,UAClBob,MAAO5c,EAAS+e,UAElB9d,EAAKknC,UAAU5gC,QAAQL,IAAI,QAC3BjG,EAAKknC,UAAUlkC,OAAOhD,IAExBA,EAAK0N,GAAG,SAAS,SAAUR,GACzB,IAAI+zP,EAAajhQ,EAAKg0P,YAAc,SAChC/D,GAAM5+O,SAASnE,EAAE6C,OAAQkxP,IAAehR,GAAM5+O,SAASnE,EAAE6C,OAAO5M,WAAY89P,KAC9EjhQ,EAAK6G,WAGT7G,EAAK0N,GAAG,UAAU,WAChB1N,EAAK6G,WAEP7G,EAAK0N,GAAG,QAAQ,SAAUR,GACpBA,EAAE2F,UAAY7S,GAChB+9P,GAAWtvH,aAGfzuI,EAAKwuI,KAAK,cAAexuI,EAAK0+P,aAAe1+P,EAAKsnE,IAAM,SACxDtnE,EAAKwuI,KAAK,QAASzvI,EAAS8I,OAC5B7H,EAAK8gQ,aAAc,GAErBrG,OAAQ,WACN,IAEI3J,EAAYjkO,EAAOxX,EAAG6rP,EAFtBlhQ,EAAOoC,KACP8kC,EAAYlnC,EAAKknC,UAEjBlnC,EAAK8gQ,cACP9gQ,EAAK8wP,WAAWb,GAAM5tK,iBACtBriF,EAAK8wP,aAAawE,SAAWt1P,EAAK8wP,aAAa0E,QAEjDx1P,EAAK6jC,SACLitN,EAAa9wP,EAAK8wP,aACd9wP,EAAKjB,SAAS8I,QAAU7H,EAAK8gQ,cAC/Bj0O,EAAQikO,EAAWqQ,QACft0O,EAAQikO,EAAWtxP,IACrB6V,EAAIy7O,EAAWz7O,EAAIjW,KAAK8oB,IAAI,EAAG2E,EAAQ,GACvC7sB,EAAK8wP,WAAW,CACdtxP,EAAGqtB,EACHxX,EAAGA,IAEL6rP,GAAc,IAGdh6N,IACFA,EAAU4pN,WAAW,CAAEtxP,EAAGQ,EAAK8wP,aAAayE,SAAUkF,SACtD5tO,EAAQqa,EAAU4pN,aAAa2E,KAAO3E,EAAWvwN,OAC7C1T,EAAQikO,EAAWtxP,IACrB6V,EAAIy7O,EAAWz7O,EAAIjW,KAAK8oB,IAAI,EAAG2E,EAAQikO,EAAWtxP,GAClDQ,EAAK8wP,WAAW,CACdtxP,EAAGqtB,EACHxX,EAAGA,IAEL6rP,GAAc,IAGdA,GACFlhQ,EAAKy6P,UAGT5F,eAAgB,WACd,IAEgBuM,EAFZphQ,EAAOoC,KACP0uP,EAAa9wP,EAAK6jC,SAClBrD,EAAS,EACb,GAAIxgC,EAAKjB,SAAS8I,QAAU7H,EAAK8gQ,YAAa,CAC5CM,EAASphQ,EAAK8W,MAAM,QACpB,IAAIoK,EAAO+uO,GAAMx2M,QAAQ2nN,GACzBtQ,EAAWqQ,QAAUjgP,EAAK2L,MAC1BikO,EAAWuQ,QAAUngP,EAAK4L,OAC1B0T,GAAUswN,EAAWuQ,QAEnBrhQ,EAAKknC,YACP1G,GAAUxgC,EAAKknC,UAAU4pN,aAAax/O,GAExCw/O,EAAWtwN,QAAUA,EACrBswN,EAAW4E,MAAQl1N,EACnBswN,EAAWx/O,GAAKkvB,EAChB,IAAIF,EAAO2vN,GAAM5tK,gBAGjB,OAFAyuK,EAAWz7O,EAAIrV,EAAKjB,SAASsW,GAAKjW,KAAK8oB,IAAI,EAAGoY,EAAK9gC,EAAI,EAAIsxP,EAAWtxP,EAAI,GAC1EsxP,EAAWx7O,EAAItV,EAAKjB,SAASuW,GAAKlW,KAAK8oB,IAAI,EAAGoY,EAAKhvB,EAAI,EAAIw/O,EAAWx/O,EAAI,GACnEw/O,GAETgG,WAAY,WACV,IAAI92P,EAAOoC,KAAMkK,EAAStM,EAAK6zP,QAASvyP,EAAKtB,EAAKsnE,IAAK/2D,EAASvQ,EAAKg0P,YACjEj1P,EAAWiB,EAAKjB,SAChBuiQ,EAAa,GAAIC,EAAa,GAAIx5P,EAAOhJ,EAASgJ,KAetD,OAdA/H,EAAK+2P,YACLzqP,EAAOyqP,UAAU/2P,GACbjB,EAAS8I,QACXy5P,EAAa,YAAchgQ,EAAK,iBAAmBiP,EAAtC,yBAA+EjP,EAAK,kBAAoBiP,EAAS,UAAYvQ,EAAKI,OAAOrB,EAAS8I,OAAlJ,kBAAoLvG,EAAK,kBAAoBiP,EAA7M,6CAA0QA,EAA1Q,iFAEXxR,EAASsJ,MACXN,EAAO,gBAAkBhJ,EAASsJ,IAAM,6BAEtB,qBAATN,IACTA,EAAOuE,EAAOwqP,WAAW92P,IAEvBA,EAAKknC,YACPq6N,EAAavhQ,EAAKknC,UAAU4vN,cAEvB,YAAcx1P,EAAK,YAActB,EAAKsG,QAAtC,+BAAsFtG,EAAKg0P,YAAc,6BAA+BsN,EAAa,YAAchgQ,EAAK,iBAAmBtB,EAAK85P,YAAc,KAAO/xP,EAAO,SAAWw5P,EAAvO,gBAET/b,WAAY,SAAUjnN,GACpB,IAEIijO,EAEA1Q,EAJA9wP,EAAOoC,KACP+3E,EAAkBp8E,EAAW4E,SAASw3E,gBAEtC5pE,EAASvQ,EAAKg0P,YAElB,GAAIz1N,IAAUv+B,EAAK8gQ,YAwBjB,GAvBA7hO,GAASlhC,EAAW6B,QAAQ8N,GAAG,UAAU,WACvC,IAAI8jI,EACJ,GAAIxxI,EAAK8gQ,YACP,GAAKU,EAQExhQ,EAAKyhQ,SACRzhQ,EAAKyhQ,OAAS5iO,EAASrQ,YAAW,WAChC,IAAI8R,EAAO2vN,GAAM5tK,gBACjBriF,EAAK+0C,OAAO,EAAG,GAAGo5M,SAAS7tN,EAAK9gC,EAAG8gC,EAAKhvB,GACxCtR,EAAKyhQ,OAAS,IACb,SAba,CAClBjwH,GAAO,IAAI9gI,MAAOC,UAClB,IAAI2vB,EAAO2vN,GAAM5tK,gBACjBriF,EAAK+0C,OAAO,EAAG,GAAGo5M,SAAS7tN,EAAK9gC,EAAG8gC,EAAKhvB,IACpC,IAAIZ,MAAOC,UAAY6gI,EAAO,KAChCgwH,GAAgB,OAaxB1Q,EAAa9wP,EAAK8wP,aAClB9wP,EAAK8gQ,YAAcviO,EACdA,EAUE,CACLv+B,EAAK0hQ,SAAW,CACdrsP,EAAGy7O,EAAWz7O,EACdC,EAAGw7O,EAAWx7O,EACd9V,EAAGsxP,EAAWtxP,EACd8R,EAAGw/O,EAAWx/O,GAEhBtR,EAAKu0P,UAAYtD,GAASC,SAAS,KACnClxP,EAAK8W,MAAM,QAAQnO,MAAMu8M,QAAU,OACnC4rC,EAAWtwN,QAAUswN,EAAWuQ,QAAU,EAC1CpiO,GAAS,CACPk7C,EACAp8E,EAAW4E,SAAS8J,OACnBm3E,SAASrzE,EAAS,cACrBvQ,EAAKsG,QAAQL,IAAI,cACjB,IAAIq6B,EAAO2vN,GAAM5tK,gBACjBriF,EAAK+0C,OAAO,EAAG,GAAGo5M,SAAS7tN,EAAK9gC,EAAG8gC,EAAKhvB,QAzBxCtR,EAAKu0P,UAAYtD,GAASC,SAASlxP,EAAKjB,SAASypC,QACjDxoC,EAAK8W,MAAM,QAAQnO,MAAMu8M,QAAU,GACnC4rC,EAAWtwN,QAAUswN,EAAWuQ,QAChCpiO,GAAS,CACPk7C,EACAp8E,EAAW4E,SAAS8J,OACnB82E,YAAYhzE,EAAS,cACxBvQ,EAAKsG,QAAQ6N,OAAO,cACpBnU,EAAK+0C,OAAO/0C,EAAK0hQ,SAASrsP,EAAGrV,EAAK0hQ,SAASpsP,GAAG64O,SAASnuP,EAAK0hQ,SAASliQ,EAAGQ,EAAK0hQ,SAASpwP,GAoB1F,OAAOtR,EAAKwsP,UAEd5oN,WAAY,WACV,IACI9hB,EADA9hB,EAAOoC,KAEXosB,YAAW,WACTxuB,EAAKsG,QAAQL,IAAI,MACjBjG,EAAKygC,KAAK,UACT,GACHzgC,EAAK6jC,SACD7jC,EAAKknC,WACPlnC,EAAKknC,UAAUtD,aAEjB5jC,EAAKgU,QACL5R,KAAKu/P,WAAa,IAAI/gO,GAAW5gC,EAAKsnE,IAAM,SAAU,CACpD/jD,MAAO,WACLzB,EAAW,CACTzM,EAAGrV,EAAK8wP,aAAaz7O,EACrBC,EAAGtV,EAAK8wP,aAAax7O,IAGzBwrB,KAAM,SAAU5zB,GACdlN,EAAK+0C,OAAOjzB,EAASzM,EAAInI,EAAEkzB,OAAQte,EAASxM,EAAIpI,EAAEmzB,WAGtDrgC,EAAK0N,GAAG,UAAU,SAAUR,GACrBA,EAAEy1D,sBACL3iE,EAAK6G,WAGTuiD,GAAQzjD,KAAK3F,GACbygQ,IAAsB,IAExBxtL,OAAQ,WACN,OAAO7wE,KAAKq+B,KAAK,SAAU,CAAEz8B,KAAM5B,KAAK65C,YAE1C9nC,OAAQ,WACN,IACI7R,EADAtC,EAAOoC,KAEXpC,EAAK2hQ,WAAWn/N,UAChBxiC,EAAK6jC,SACD7jC,EAAKknC,WACP9kC,KAAK8kC,UAAU/yB,SAEjBysP,GAA4B5gQ,EAAKg0P,aAAa,GAC9C1xP,EAAI8mD,GAAQrnD,OACZ,MAAOO,IACD8mD,GAAQ9mD,KAAOtC,GACjBopD,GAAQtjD,OAAOxD,EAAG,GAGtBm+P,GAAsBr3M,GAAQrnD,OAAS,IAEzC6/P,iBAAkB,WAChB,IAAI32B,EAAM7oO,KAAK0U,QAAQ1H,qBAAqB,UAAU,GACtD,OAAO67N,EAAMA,EAAI3+M,cAAgB,QAGrCy0O,KAEA,IAAIc,GAAav3D,GAAOjpM,OAAO,CAC7BwvF,KAAM,SAAU9xF,GACdA,EAAW,CACTypC,OAAQ,EACRvrB,QAAS,GACT3Q,OAAQ,OACRm8B,KAAM,SACNj8B,MAAO,SACPutP,aAAc,QACd+C,YAAY,EACZh/O,QAAS,CACPvd,KAAM,SACNgE,KAAM,KACN+W,OAAQ,MAEVK,MAAO,CACLpb,KAAM,QACNsM,WAAW,EACXF,SAAU,IACVk5O,UAAW,MAGfzjP,KAAKyhC,OAAO9kC,IAEdw7O,QAAS,CACPunB,GAAI,EACJC,UAAW,EACXC,OAAQ,EACRC,cAAe,EACfC,OAAQ,SAAUnjQ,GAChB,IAAI+e,EACAzb,EAAWtD,EAASsD,UAAY,aAEpC,SAAS8/P,EAAa59P,EAAMwsB,EAAQqxO,GAClC,MAAO,CACL7hQ,KAAM,SACNgE,KAAMA,EACNokC,QAASy5N,EAAU,UAAY,GAC/BC,QAAS,SAAUn1P,GACjBA,EAAE2F,QAAQ+nD,UAAU,GAAG/zD,QACvBxE,EAAS0uB,KAIf,OAAQhyB,EAAS+e,SACjB,KAAK+jP,GAAWE,UACdjkP,EAAU,CACRqkP,EAAa,MAAM,GAAM,GACzBA,EAAa,UAAU,IAEzB,MACF,KAAKN,GAAWG,OAChB,KAAKH,GAAWI,cACdnkP,EAAU,CACRqkP,EAAa,MAAO,GAAG,GACvBA,EAAa,KAAM,IAEjBpjQ,EAAS+e,UAAY+jP,GAAWI,eAClCnkP,EAAQnY,KAAKw8P,EAAa,UAAW,IAEvC,MACF,QACErkP,EAAU,CAACqkP,EAAa,MAAM,GAAM,IACpC,MAEF,OAAO,IAAI73D,GAAO,CAChBrtL,QAAS,GACT5H,EAAGtW,EAASsW,EACZC,EAAGvW,EAASuW,EACZtJ,SAAU,IACVC,UAAW,IACXK,OAAQ,OACRm8B,KAAM,SACNj8B,MAAO,SACPsR,QAASA,EACTjW,MAAO9I,EAAS8I,MAChBwP,KAAM,cACNsE,MAAO,CACLpb,KAAM,QACNsM,WAAW,EACXF,SAAU,IACVk5O,UAAW,IACXthP,KAAMxF,EAASwF,MAEjB8O,aAAc,WACZjR,KAAKosI,KAAK,cAAepsI,KAAKuZ,QAAQ,GAAG2rD,MAE3CkgL,QAASzoP,EAASyoP,QAClB8a,SAAU,WACRjgQ,GAAS,MAEVyyC,SAAS/2C,EAAW4E,SAAS8J,MAAM+/O,UAExCvkN,MAAO,SAAUlpC,EAAUsD,GAKzB,MAJwB,kBAAbtD,IACTA,EAAW,CAAEwF,KAAMxF,IAErBA,EAASsD,SAAWA,EACbw/P,GAAWK,OAAOnjQ,IAE3B4+E,QAAS,SAAU5+E,EAAUsD,GAM3B,MALwB,kBAAbtD,IACTA,EAAW,CAAEwF,KAAMxF,IAErBA,EAASsD,SAAWA,EACpBtD,EAAS+e,QAAU+jP,GAAWE,UACvBF,GAAWK,OAAOnjQ,OAK/B,SAASmoM,GAAmBpoM,GAC1B,IAAIiN,EAAO,SAAUrG,EAAMwiG,EAAQm4J,GACjC,IAAIx7N,EAkDJ,OAjDAn/B,EAAKmC,MAAQnC,EAAKmC,OAAS,IAC3BnC,EAAK2C,IAAM3C,EAAK2C,KAAO3C,EAAK+5C,KACxB/5C,EAAK2C,MACP3C,EAAKmnB,MAAQvc,SAAS5K,EAAKmnB,OAAS,IAAK,IACzCnnB,EAAKonB,OAASxc,SAAS5K,EAAKonB,QAAU,IAAK,KAEzCpnB,EAAK+G,OACP/G,EAAKiW,MAAQ,CACXsF,SAAUvb,EAAKub,SACf1gB,KAAMmF,EAAKmY,UAAY,OACvBlC,MAAOjW,EAAK+G,KACZzI,KAAM0B,EAAK1B,KACXmC,UAAWT,EAAKi1L,WAGfj1L,EAAK2C,KAAQ3C,EAAKoY,UACrBpY,EAAKoY,QAAU,CACb,CACEvZ,KAAM,KACNokC,QAAS,UACTpxB,QAAS,WACPstB,EAAIx2B,KAAK,QAAQ,GAAG4kE,WAGxB,CACE1uE,KAAM,SACNgT,QAAS,WACPstB,EAAIh+B,YAKZg+B,EAAM,IAAIylK,GAAO5kM,GACjBm/B,EAAIn3B,GAAG,SAAS,WACd2yP,EAAcx7N,MAEZn/B,EAAK1B,MACP6gC,EAAIn3B,GAAG,cAAc,WACnBtL,KAAKiM,KAAK,KAAKT,MAAK,SAAUgF,GAC5B,IAAI1M,EAAO0M,EAAK1M,OACZA,KAAQR,EAAK1B,MACf4O,EAAK1U,MAAMwH,EAAK1B,KAAKkC,UAK7B2+B,EAAI09N,SAAW78P,GAAQ,GACvBm/B,EAAIqjE,OAASA,GAAU,GACvBrjE,EAAMA,EAAIiQ,SAAS/2C,EAAW4E,SAAS8J,MAAM+/O,SACtC3nN,GAELoD,EAAQ,SAAUthC,EAAS67P,EAAgBnC,GAC7C,IAAIx7N,EAOJ,OANAA,EAAMg9N,GAAW55N,MAAMthC,GAAS,WAC9B67P,OAEF39N,EAAIn3B,GAAG,SAAS,WACd2yP,EAAcx7N,MAETA,GAEL84C,EAAU,SAAUh3E,EAAS67P,EAAgBnC,GAC/C,IAAIx7N,EAOJ,OANAA,EAAMg9N,GAAWlkL,QAAQh3E,GAAS,SAAU43B,GAC1CikO,EAAejkO,MAEjBsG,EAAIn3B,GAAG,SAAS,WACd2yP,EAAcx7N,MAETA,GAELh+B,EAAQ,SAAUjH,GACpBA,EAAOiH,SAELsgM,EAAY,SAAUvnM,GACxB,OAAOA,EAAOsoG,QAEZk/F,EAAY,SAAUxnM,EAAQsoG,GAChCtoG,EAAOsoG,OAASA,GAElB,MAAO,CACLn8F,KAAMA,EACNk8B,MAAOA,EACP01C,QAASA,EACT92E,MAAOA,EACPsgM,UAAWA,EACXC,UAAWA,GAIf,IAAIjpM,GAAM,SAAUW,GAClB,IAAIguO,EAAW,SAAUpnO,GACvB,OAAOopO,GAAOhC,SAAShuO,EAAQsD,KAAMsD,IAEnCyoP,EAAW,SAAU3uP,EAAG8R,GAC1B,OAAO20O,GAAOkI,SAASrvP,EAAQU,EAAG8R,IAEhCg9O,EAAW,SAAUC,EAAIC,GAC3B,OAAOvI,GAAOqI,SAASxvP,EAAQyvP,EAAIC,IAEjChoD,EAA6B,WAC/B,OAAON,GAAwBpnM,IAE7BwoM,EAAuB,WACzB,OAAOJ,MAET,MAAO,CACL4lC,SAAUA,EACVqhB,SAAUA,EACVG,SAAUA,EACV9nD,2BAA4BA,EAC5Bc,qBAAsBA,IAGtBm7D,GAAW,CAAEtkQ,IAAKA,IAElBukQ,GAASxjO,GAAS79B,OAAO,CAC3BwhC,SAAU,CACR8/N,kBAAmB,QACnBC,iBAAkB,QAEpB/xK,KAAM,SAAU9xF,GACdqD,KAAKrD,SAAWc,EAASwB,OAAO,GAAIe,KAAKygC,SAAU9jC,IAErDg4P,UAAW,SAAU5xO,GACnBA,EAAU20O,YAAY7zP,IAAI7D,KAAKrD,SAAS8jQ,iBAE1CzO,aAAc,SAAUz4O,GACtB,IAEImnP,EAAYC,EAAW3C,EAAW4C,EAFlChjQ,EAAOoC,KACPrD,EAAWiB,EAAKjB,SAEpB+jQ,EAAa/jQ,EAAS4jQ,kBACtBI,EAAYhkQ,EAAS6jQ,iBACrBjnP,EAAM/N,MAAK,SAAU+mC,GACnBA,EAAKruC,QAAQ6N,OAAO2uP,GAAY3uP,OAAO4uP,GAAW98P,IAAIlH,EAASkkQ,cAC3DtuN,EAAKg6M,YACFyR,IACHA,EAAYzrN,GAEdquN,EAAWruN,MAGXyrN,GACFA,EAAU95P,QAAQL,IAAI68P,GAEpBE,GACFA,EAAS18P,QAAQL,IAAI88P,IAGzBjM,WAAY,SAAU3xO,GACpB,IAAInlB,EAAOoC,KACP2F,EAAO,GAKX,OAJA/H,EAAKo0P,aAAajvO,EAAUxJ,SAC5BwJ,EAAUxJ,QAAQ/N,MAAK,SAAU+mC,GAC/B5sC,GAAQ4sC,EAAKmiN,gBAER/uP,GAET0yP,OAAQ,aAER72N,WAAY,aAEZ84J,SAAU,WACR,OAAO,KAIPwmE,GAAiBR,GAAOrhQ,OAAO,CACjCwhC,SAAU,CACRggO,eAAgB,aAChBI,aAAc,mBAEhBxI,OAAQ,SAAUt1O,GAChBA,EAAUxJ,QAAQhO,OAAO,YAAYC,MAAK,SAAUgF,GAClD,IAAI7T,EAAW6T,EAAK7T,SACpB6T,EAAKk+O,WAAW,CACdz7O,EAAGtW,EAASsW,EACZC,EAAGvW,EAASuW,EACZ9V,EAAGT,EAASS,EACZ8R,EAAGvS,EAASuS,IAEVsB,EAAK6nP,QACP7nP,EAAK6nP,aAIX3D,WAAY,SAAU3xO,GACpB,MAAO,YAAcA,EAAUmiD,IAAM,mBAAqBniD,EAAU6uO,YAAc,kBAAoB5xP,KAAKyhC,OAAO1e,MAIlHg+O,GAAS7D,GAAOj+P,OAAO,CACzBwhC,SAAU,CACRv8B,QAAS,aACT+Q,KAAM,UAERw5E,KAAM,SAAU9xF,GACd,IACImiB,EADAlhB,EAAOoC,KAEXpC,EAAK6jC,OAAO9kC,GACZA,EAAWiB,EAAKjB,SAChBmiB,EAAOlhB,EAAKjB,SAASmiB,KACrBlhB,EAAK0N,GAAG,mBAAmB,SAAUR,GACnCA,EAAEm0B,oBAEJrhC,EAAK0N,GAAG,cAAc,SAAUR,GAC9BlN,EAAKygC,KAAK,QAASvzB,GACnBA,EAAEm0B,oBAEAtiC,EAAS4pC,SACX3oC,EAAKsG,QAAQL,IAAIlH,EAAS4pC,SAExBznB,GACFlhB,EAAKsG,QAAQL,IAAI,OAASib,GAExBniB,EAAS4Q,MACX3P,EAAK2P,KAAK5Q,EAAS4Q,OAGvBA,KAAM,SAAUA,GACd,OAAK7N,UAAUC,QAGfK,KAAKm8B,MAAMngC,IAAI,OAAQuR,GAChBvN,MAHEA,KAAKm8B,MAAMpgC,IAAI,SAK1B8iC,QAAS,WACP,IACImiO,EADAC,EAASjhQ,KAAK0U,QAAQE,WAEtBqsP,IACFD,EAAWC,EAAO16P,MAClBy6P,EAASv2O,MAAQu2O,EAASt2O,OAAS,QAErC1qB,KAAKyhC,UAEPizN,WAAY,WACV,IACmCrpO,EAG/B61O,EAJAtjQ,EAAOoC,KAAMd,EAAKtB,EAAKsnE,IAAK/2D,EAASvQ,EAAKg0P,YAC1CrkP,EAAO3P,EAAKu+B,MAAMpgC,IAAI,QACtBoG,EAAOvE,EAAKu+B,MAAMpgC,IAAI,QACtBolQ,EAAW,GAEXxkQ,EAAWiB,EAAKjB,SAiBpB,OAhBA0uB,EAAQ1uB,EAAS0uB,MACbA,GACF9d,EAAO,OACc,kBAAV8d,IACTA,EAAQ1vB,EAAW6B,OAAOi+H,aAAepwG,EAAM,GAAKA,EAAM,IAE5DA,EAAQ,mCAAqCA,EAAQ,QAErDA,EAAQ,GAENlpB,IACFvE,EAAKsG,QAAQL,IAAI,gBACjBs9P,EAAW,gBAAkBhzP,EAAS,QAAUvQ,EAAKI,OAAOmE,GAAQ,WAEtEoL,EAAOA,EAAOY,EAAS,OAASA,EAAS,KAAOZ,EAAO,GACvD2zP,EAAyC,mBAApBvkQ,EAAS87D,OAAuB,kBAAoB97D,EAAS87D,OAAS,IAAM,GAC1F,YAAcv5D,EAAK,YAActB,EAAKsG,QAAU,kBAAoBg9P,EAApE,gBAAyGhiQ,EAAK,6DAA+DqO,EAAO,aAAeA,EAAO,IAAM8d,EAAQ,QAAU,IAAM81O,EAAxO,mBAETj/N,WAAY,WACV,IAAItkC,EAAOoC,KAAMgJ,EAAIpL,EAAKoL,EAAGo4P,EAAUxjQ,EAAKg0P,YAAc,MAC1D,SAASyP,EAAcl/P,GACrB,IAAIm/P,EAAQt4P,EAAE,QAAUo4P,EAASxjQ,EAAK8W,SAClCvS,GACGm/P,EAAM,KACTt4P,EAAE,eAAgBpL,EAAK8W,SAAS5I,OAAO,gBAAkBs1P,EAAU,aACnEE,EAAQt4P,EAAE,QAAUo4P,EAASxjQ,EAAK8W,UAEpC4sP,EAAM37P,KAAK/H,EAAKI,OAAOmE,KAEvBm/P,EAAMvvP,SAERnU,EAAKsG,QAAQiH,OAAO,iBAAkBhJ,GAuBxC,OArBAvE,EAAKu+B,MAAM7wB,GAAG,eAAe,SAAUR,GACrCu2P,EAAcv2P,EAAEhP,UAElB8B,EAAKu+B,MAAM7wB,GAAG,eAAe,SAAUR,GACrC,IAAIyC,EAAOzC,EAAEhP,MACTqS,EAASvQ,EAAKg0P,YAClBh0P,EAAKjB,SAAS4Q,KAAOA,EACrBA,EAAOA,EAAOY,EAAS,OAASA,EAAS,KAAOvQ,EAAKjB,SAAS4Q,KAAO,GACrE,IAAI0zP,EAASrjQ,EAAK8W,QAAQE,WACtB2sP,EAAUN,EAAOj0P,qBAAqB,KAAK,GAC3CO,GACGg0P,GAAWA,IAAYN,EAAOrsP,aACjC2sP,EAAU5lQ,EAAW4E,SAASsqB,cAAc,KAC5Co2O,EAAO7hQ,aAAamiQ,EAASN,EAAOrsP,aAEtC2sP,EAAQzgQ,UAAYyM,GACXg0P,GACTN,EAAO/gP,YAAYqhP,GAErBF,EAAczjQ,EAAKu+B,MAAMpgC,IAAI,YAExB6B,EAAK6jC,YAIZ+/N,GAAeT,GAAO9hQ,OAAO,CAC/BwvF,KAAM,SAAU9xF,GACd,IAAIiB,EAAOoC,KACXrD,EAAWc,EAASwB,OAAO,CACzBkD,KAAM,YACN8jG,UAAU,EACVpoD,OAAQ,MACPlhD,GACHiB,EAAK6jC,OAAO9kC,GACZiB,EAAKsG,QAAQL,IAAI,gBACblH,EAASspG,UACXroG,EAAKsG,QAAQL,IAAI,aAGrB29B,WAAY,WACV,IAAI5jC,EAAOoC,KACPsuG,EAAQu/I,GAAMhhP,OAAO,QAAS,CAChC1O,KAAM,OACNe,GAAItB,EAAKsnE,IAAM,UACfrnB,OAAQjgD,EAAKjB,SAASkhD,SAExBjgD,EAAK6jC,SACL5E,GAASyxE,GAAOhjG,GAAG,UAAU,SAAUR,GACrC,IAAI4+D,EAAQ5+D,EAAE6C,OAAO+7D,MACrB9rE,EAAK9B,MAAQ,WACX,OAAK4tE,EAAM/pE,OAEA/B,EAAKjB,SAASspG,SAChBv8B,EAEAA,EAAM,GAJN,MAOX5+D,EAAEm0B,iBACEyqC,EAAM/pE,QACR/B,EAAKygC,KAAK,SAAUvzB,MAGxB+xB,GAASyxE,GAAOhjG,GAAG,SAAS,SAAUR,GACpCA,EAAEk0B,qBAEJnC,GAASj/B,EAAK8W,MAAM,WAAWpJ,GAAG,oBAAoB,SAAUR,GAC9DA,EAAEk0B,kBACFsvE,EAAMmzJ,QACN32P,EAAEm0B,oBAEJrhC,EAAK8W,QAAQzH,YAAYqhG,IAE3Bv8F,OAAQ,WACN8qB,GAAS78B,KAAK0U,MAAM,WAAWg3B,MAC/B7O,GAAS78B,KAAK0U,MAAM,UAAUg3B,MAC9B1rC,KAAKyhC,YAILigO,GAAclK,GAAUv4P,OAAO,CACjCwhC,SAAU,CACRw3N,YAAa,SACbhjP,KAAM,SAERy/O,WAAY,WACV,IAAI92P,EAAOoC,KAAMkK,EAAStM,EAAK6zP,QAI/B,OAHA7zP,EAAKsG,QAAQL,IAAI,aACjBjG,EAAK+2P,YACLzqP,EAAOyqP,UAAU/2P,GACV,YAAcA,EAAKsnE,IAAM,YAActnE,EAAKsG,QAA5C,cAA2EtG,EAAKsnE,IAAM,WAAatnE,EAAKjB,SAASgJ,MAAQ,IAAMuE,EAAOwqP,WAAW92P,GAAjJ,kBAIP+jQ,GAAWzE,GAAOj+P,OAAO,CAC3BwhC,SAAU,CACRv8B,QAAS,WACT+Q,KAAM,WACN0vB,SAAS,GAEX8pD,KAAM,SAAU9xF,GACd,IAAIiB,EAAOoC,KACXpC,EAAK6jC,OAAO9kC,GACZiB,EAAK0N,GAAG,mBAAmB,SAAUR,GACnCA,EAAEm0B,oBAEJrhC,EAAK0N,GAAG,SAAS,SAAUR,GACzBA,EAAEm0B,iBACGrhC,EAAK8S,YACR9S,EAAK+mC,SAAS/mC,EAAK+mC,cAGvB/mC,EAAK+mC,QAAQ/mC,EAAKjB,SAASgoC,UAE7BA,QAAS,SAAUxI,GACjB,OAAKz8B,UAAUC,QAGfK,KAAKm8B,MAAMngC,IAAI,UAAWmgC,GACnBn8B,MAHEA,KAAKm8B,MAAMpgC,IAAI,YAK1BD,MAAO,SAAUqgC,GACf,OAAKz8B,UAAUC,OAGRK,KAAK2kC,QAAQxI,GAFXn8B,KAAK2kC,WAIhB+vN,WAAY,WACV,IAAI92P,EAAOoC,KAAMd,EAAKtB,EAAKsnE,IAAK/2D,EAASvQ,EAAKg0P,YAC9C,MAAO,YAAc1yP,EAAK,YAActB,EAAKsG,QAAU,wCAA0ChF,EAA1F,gCAAsIiP,EAAS,OAASA,EAAxJ,6BAAqMjP,EAAK,eAAiBiP,EAAS,UAAYvQ,EAAKI,OAAOJ,EAAKu+B,MAAMpgC,IAAI,SAA3Q,iBAETmmC,WAAY,WACV,IAAItkC,EAAOoC,KACX,SAAS2kC,EAAQxI,GACfv+B,EAAKsG,QAAQiH,OAAO,UAAWgxB,GAC/Bv+B,EAAKwuI,KAAK,UAAWjwG,GAgCvB,OA9BAv+B,EAAKu+B,MAAM7wB,GAAG,eAAe,SAAUR,GACrClN,EAAK8W,MAAM,MAAME,WAAWhT,KAAOhE,EAAKkS,UAAUhF,EAAEhP,UAEtD8B,EAAKu+B,MAAM7wB,GAAG,+BAA+B,SAAUR,GACrDlN,EAAKygC,KAAK,UACVsG,EAAQ75B,EAAEhP,UAEZ8B,EAAKu+B,MAAM7wB,GAAG,eAAe,SAAUR,GACrC,IAAIyC,EAAOzC,EAAEhP,MACTqS,EAASvQ,EAAKg0P,YAClB,GAAoB,qBAATrkP,EACT,OAAO3P,EAAKjB,SAAS4Q,KAEvB3P,EAAKjB,SAAS4Q,KAAOA,EACrBA,EAAOA,EAAOY,EAAS,OAASA,EAAS,KAAOvQ,EAAKjB,SAAS4Q,KAAO,GACrE,IAAI0zP,EAASrjQ,EAAK8W,QAAQE,WACtB2sP,EAAUN,EAAOj0P,qBAAqB,KAAK,GAC3CO,GACGg0P,GAAWA,IAAYN,EAAOrsP,aACjC2sP,EAAU5lQ,EAAW4E,SAASsqB,cAAc,KAC5Co2O,EAAO7hQ,aAAamiQ,EAASN,EAAOrsP,aAEtC2sP,EAAQzgQ,UAAYyM,GACXg0P,GACTN,EAAO/gP,YAAYqhP,MAGnB3jQ,EAAKu+B,MAAMpgC,IAAI,YACjB4oC,GAAQ,GAEH/mC,EAAK6jC,YAIZmgO,GAAWxlQ,QAAQC,KAAKC,MAAMC,QAAQ,mBAEtCslQ,GAAW3E,GAAOj+P,OAAO,CAC3BwvF,KAAM,SAAU9xF,GACd,IAAIiB,EAAOoC,KACXpC,EAAK6jC,OAAO9kC,GACZA,EAAWiB,EAAKjB,SAChBiB,EAAKsG,QAAQL,IAAI,YACjBjG,EAAKkkQ,UAAW,EAChBlkQ,EAAK02P,WAAa,MAClB33P,EAAS01C,KAAO11C,EAAS01C,MAAQ11C,EAAS6N,OACtC7N,EAAS01C,OACX11C,EAAS4Q,KAAO,SAElB3P,EAAK0N,GAAG,SAAS,SAAUR,GACzB,IAAInG,EAAMmG,EAAE6C,OACRnO,EAAO5B,EAAK8W,QAChB,GAAKmoB,GAAS9rB,SAASvR,EAAMmF,IAAQA,IAAQnF,EAG7C,MAAOmF,GAAOA,IAAQnF,EAChBmF,EAAIzF,KAAmC,IAA7ByF,EAAIzF,GAAG0F,QAAQ,WAC3BhH,EAAKygC,KAAK,UACN1hC,EAAS01C,OACXz0C,EAAKmkQ,WACDj3P,EAAEshI,MACJxuI,EAAKy0C,KAAK94B,QAAQ,GAAG3H,UAI3BjN,EAAMA,EAAI5D,cAGdnD,EAAK0N,GAAG,WAAW,SAAUR,GAC3B,IAAI8uC,EACc,KAAd9uC,EAAEuc,SAAwC,UAAtBvc,EAAE6C,OAAO3M,WAC/B8J,EAAEm0B,iBACFrhC,EAAK46D,UAAUn0B,UAAU74B,MAAK,SAAUgF,GACtC,GAAIA,EAAKqpC,OAEP,OADAD,EAAcppC,GACP,KAGX5S,EAAKygC,KAAK,SAAU,CAAEz8B,KAAMg4C,EAAYC,eAG5Cj8C,EAAK0N,GAAG,SAAS,SAAUR,GACzB,GAA0B,UAAtBA,EAAE6C,OAAO3M,SAAsB,CACjC,IAAIswP,EAAW1zP,EAAKu+B,MAAMpgC,IAAI,SAC1B4wB,EAAW7hB,EAAE6C,OAAO7R,MACpB6wB,IAAa2kO,IACf1zP,EAAKu+B,MAAMngC,IAAI,QAAS2wB,GACxB/uB,EAAKygC,KAAK,eAAgBvzB,QAIhClN,EAAK0N,GAAG,aAAa,SAAUR,GAC7B,IAAIkG,EAAUpT,EAAKoT,UAAU2hC,QAAQ,OACrC,GAAI/0C,EAAKokQ,gBAA8E,IAA7Dl3P,EAAE6C,OAAO7M,UAAU8D,QAAQhH,EAAKg0P,YAAc,UAAkB,CACxF,IAAIqQ,EAAgBrkQ,EAAKqkQ,iBAAmB,KACxCn1P,EAAMkE,EAAQ7O,KAAK8/P,GAAeviO,OAAO+uN,YAAY3jP,EAAE6C,OAAQ,CACjE,QACA,QACA,UAEFqD,EAAQ9M,QAAQiH,OAAO,YAAqB,UAAR2B,GACpCkE,EAAQ9M,QAAQiH,OAAO,aAAsB,UAAR2B,GACrCkE,EAAQ9M,QAAQiH,OAAO,aAAsB,UAAR2B,GACrCkE,EAAQi2K,QAAQn8K,EAAE6C,OAAQb,QAIhCk1P,YAAa,SAAUlmQ,GAIrB,OAHI4D,UAAUC,OAAS,GACrBK,KAAKm8B,MAAMngC,IAAI,cAAeF,GAEzBkE,KAAKm8B,MAAMpgC,IAAI,gBAExBkmQ,cAAe,SAAUnmQ,GAIvB,OAHI4D,UAAUC,OAAS,GACrBK,KAAKm8B,MAAMngC,IAAI,gBAAiBF,GAE3BkE,KAAKm8B,MAAMpgC,IAAI,kBAExBgmQ,SAAU,WACR,IAEI1vN,EAFAz0C,EAAOoC,KACPrD,EAAWiB,EAAKjB,SAEfiB,EAAKy0C,OACRA,EAAO11C,EAAS01C,MAAQ,GACpBA,EAAK1yC,OACP0yC,EAAO,CACLl0C,KAAM,OACNob,MAAO84B,GAGTA,EAAKl0C,KAAOk0C,EAAKl0C,MAAQ,OAE3BP,EAAKy0C,KAAO12B,EAAS9O,OAAOwlC,GAAMzxC,OAAOhD,GAAM80C,SAAS90C,EAAK00P,mBAC7D10P,EAAKygC,KAAK,cACVzgC,EAAKy0C,KAAK+3M,SACVxsP,EAAKy0C,KAAK/mC,GAAG,UAAU,SAAUR,GAC3BA,EAAE2F,UAAY7S,EAAKy0C,MACrBz0C,EAAKgU,WAGThU,EAAKy0C,KAAK/mC,GAAG,aAAa,SAAUR,GAClCA,EAAE2F,QAAQ8I,QAAQ/N,MAAK,SAAUgF,GAC/BA,EAAKioD,OAAOjoD,EAAK1U,UAAY8B,EAAK9B,eAEnCuiC,KAAK,QACRzgC,EAAKy0C,KAAK/mC,GAAG,UAAU,SAAUR,GAC/BlN,EAAK9B,MAAMgP,EAAE2F,QAAQ3U,YAEvB8B,EAAK0N,GAAG,WAAW,SAAUR,GACY,UAAnCA,EAAE6C,OAAOI,QAAQkmD,eACnBr2D,EAAKy0C,KAAK1S,UAGd/hC,EAAKwuI,KAAK,YAAY,IAExBxuI,EAAKy0C,KAAK3S,OACV9hC,EAAKy0C,KAAKq8M,WAAW,CAAEtxP,EAAGQ,EAAK8wP,aAAatxP,IAC5CQ,EAAKy0C,KAAK40I,QAAQrpL,EAAK8W,QAAS9W,EAAKwwG,QAAU,CAC7C,QACA,SACE,CACF,QACA,WAGJx8F,MAAO,WACL5R,KAAK0U,MAAM,OAAO9C,SAEpBitB,QAAS,WACP,IACIpU,EAAOy3O,EADPtkQ,EAAOoC,KAAM2E,EAAM/G,EAAK8W,QAASytP,EAAUvkQ,EAAK8W,MAAM,QAASwpB,EAAOtgC,EAAK8wP,aACxD0T,EAAe,EAClCC,EAAW19P,EAAIiQ,WACfhX,EAAKokQ,eAAwC,SAAvBpkQ,EAAKokQ,gBAC7BI,EAAel0P,SAAS2/O,GAAMC,gBAAgBuU,EAAU,iBAAkB,IAAMn0P,SAAS2/O,GAAMC,gBAAgBuU,EAAU,gBAAiB,KAG1I53O,EADE03O,EACMjkO,EAAK9gC,EAAIywP,GAAMx2M,QAAQ8qN,GAAS13O,MAAQ,GAExCyT,EAAK9gC,EAAI,GAEnB,IAAIkoB,EAAM3pB,EAAW4E,SASrB,OARI+kB,EAAI1hB,OAAS0hB,EAAImpH,cAAgBnpH,EAAImpH,cAAgB,KACvDyzH,EAAatkQ,EAAK8wP,aAAax/O,EAAI,EAAI,MAEzC2tB,GAASwlO,GAAUv8P,IAAI,CACrB2kB,MAAOA,EAAQ23O,EACfF,WAAYA,IAEdtkQ,EAAK6jC,SACE7jC,GAET4jC,WAAY,WACV,IAAI5jC,EAAOoC,KAKX,OAJA68B,GAAS78B,KAAK0U,MAAM,QAAQpJ,GAAG,UAAU,SAAUR,GACjDlN,EAAKu+B,MAAMngC,IAAI,QAAS8O,EAAE6C,OAAO7R,OACjC8B,EAAKygC,KAAK,SAAUvzB,MAEflN,EAAK6jC,UAEdizN,WAAY,WACV,IAEInnP,EAAMpL,EAFNvE,EAAOoC,KAAMd,EAAKtB,EAAKsnE,IAAKvoE,EAAWiB,EAAKjB,SAAUwR,EAASvQ,EAAKg0P,YACpE91P,EAAQ8B,EAAKu+B,MAAMpgC,IAAI,UAAY,GACvBumQ,EAAc,GAAIC,EAAa,GAAIC,EAAa,GA0BhE,MAzBI,eAAgB7lQ,IAClB4lQ,GAAc,gBAAkB5lQ,EAASyH,WAAa,KAEpDzH,EAASo+C,YACXwnN,GAAc,eAAiB5lQ,EAASo+C,UAAY,KAElDp+C,EAASmiB,OACXyjP,GAAc,UAAY5lQ,EAASmiB,KAAO,KAExCniB,EAAS4pC,UACXg8N,GAAc,UAAY5lQ,EAAS4pC,QAAU,KAE/Ci8N,EAAa,UAAYtjQ,EAAK,iEAC1BtB,EAAK8S,aACP6xP,GAAc,wBAEhBh1P,EAAO5Q,EAAS4Q,KACZA,GAAiB,UAATA,IACVA,EAAOY,EAAS,OAASA,EAAS,KAAOxR,EAAS4Q,MAEpDpL,EAAOvE,EAAKu+B,MAAMpgC,IAAI,SAClBwR,GAAQpL,KACVmgQ,EAAc,YAAcpjQ,EAAK,iBAAmBiP,EAAS,OAASA,EAAxD,iDAAyHjP,EAAK,uDAAkE,UAATqO,EAAmB,aAAeA,EAAO,SAAW,aAAeY,EAAS,gBAAkBhM,GAAQoL,EAAO,IAAM,IAAMpL,EAAO,IAAvT,kBACdvE,EAAKsG,QAAQL,IAAI,aAEZ,YAAc3E,EAAK,YAActB,EAAKsG,QAAtC,gBAAuEhF,EAAK,gBAAkBiP,EAAS,mBAAqBvQ,EAAKI,OAAOlC,GAAO,GAAS,kBAAoBymQ,EAAa,iBAAmB3kQ,EAAKI,OAAOrB,EAAS8lQ,aAAe,OAASD,EAAaF,EAAc,UAE7RxmQ,MAAO,SAAUA,GACf,OAAI4D,UAAUC,QACZK,KAAKm8B,MAAMngC,IAAI,QAASF,GACjBkE,OAELA,KAAKm8B,MAAMpgC,IAAI,aACjBiE,KAAKm8B,MAAMngC,IAAI,QAASgE,KAAK0U,MAAM,OAAO5Y,OAErCkE,KAAKm8B,MAAMpgC,IAAI,WAExB2mQ,iBAAkB,SAAUnpP,EAAOopP,GACjC,IAAI/kQ,EAAOoC,KACX,GAAqB,IAAjBuZ,EAAM5Z,OAAV,CAIA,IAAIJ,EAAS,SAAUzD,EAAO2J,GAC5B,OAAO,WACL7H,EAAKygC,KAAK,aAAc,CACtB54B,MAAOA,EACP3J,MAAOA,MAIT8B,EAAKy0C,KACPz0C,EAAKy0C,KAAK94B,QAAQxH,SAElBnU,EAAKy0C,KAAO12B,EAAS9O,OAAO,CAC1B1O,KAAM,OACN+F,QAAS,gBACTgG,OAAQ,SACPtJ,OAAOhD,GAAM80C,WAElBj1C,EAAS+N,KAAK+N,GAAO,SAAUg5B,GAC7B30C,EAAKy0C,KAAKxuC,IAAI,CACZ1B,KAAMowC,EAAK9sC,MACXQ,IAAKssC,EAAKqwN,WACV/jQ,MAAO8jQ,EACPz+P,QAAS,qBACTiR,QAAS5V,EAAOgzC,EAAKz2C,MAAOy2C,EAAK9sC,YAGrC7H,EAAKy0C,KAAK8xC,YACVvmF,EAAKilQ,WACLjlQ,EAAKy0C,KAAK/mC,GAAG,UAAU,SAAUR,GAC3BA,EAAE2F,QAAQ7P,WAAahD,EAAKy0C,OAC9BvnC,EAAEk0B,kBACFphC,EAAKgU,QACLhU,EAAKilQ,eAGTjlQ,EAAKy0C,KAAK/mC,GAAG,UAAU,WACrB1N,EAAKgU,WAEP,IAAIkhP,EAAOl1P,EAAK8wP,aAAatxP,EAC7BQ,EAAKy0C,KAAKq8M,WAAW,CACnBtxP,EAAG01P,EACHO,KAAM,EACNP,KAAMA,IAERl1P,EAAKy0C,KAAKxT,UACVjhC,EAAKy0C,KAAK+3M,SACVxsP,EAAKy0C,KAAK3S,OACV9hC,EAAKy0C,KAAK40I,QAAQrpL,EAAK8W,QAAS9W,EAAKwwG,QAAU,CAC7C,QACA,SACE,CACF,QACA,eAvDAxwG,EAAKilQ,YA0DTA,SAAU,WACJ7iQ,KAAKqyC,MACPryC,KAAKqyC,KAAK1S,QAGduC,WAAY,WACV,IAAItkC,EAAOoC,KACXpC,EAAKu+B,MAAM7wB,GAAG,gBAAgB,SAAUR,GAClClN,EAAK8W,MAAM,OAAO5Y,QAAUgP,EAAEhP,QAChC8B,EAAK8W,MAAM,OAAO5Y,MAAQgP,EAAEhP,UAGhC8B,EAAKu+B,MAAM7wB,GAAG,mBAAmB,SAAUR,GACzClN,EAAK8W,MAAM,OAAOhE,SAAW5F,EAAEhP,SAEjC8B,EAAKu+B,MAAM7wB,GAAG,sBAAsB,SAAUR,GAC5C,IAAIg4P,EAAgBllQ,EAAK8W,MAAM,UAC3BvG,EAASvQ,EAAKg0P,YAAa91P,EAAQgP,EAAEhP,MACzC+xP,GAAM/nP,IAAIg9P,EAAe,UAAqB,SAAVhnQ,EAAmB,OAAS,IAChE+xP,GAAM5/J,YAAY60K,EAAe30P,EAAS,cAAyB,OAAVrS,GACzD+xP,GAAM5/J,YAAY60K,EAAe30P,EAAS,YAAuB,SAAVrS,GACvD+xP,GAAM5/J,YAAY60K,EAAe30P,EAAS,UAAqB,UAAVrS,GACrD8B,EAAKsG,QAAQiH,OAAO,aAAwB,SAAVrP,GAClC8B,EAAKihC,aAEPgvN,GAAMviP,GAAG1N,EAAK8W,MAAM,UAAW,cAAc,WAC3C9W,EAAKoT,UAAU2uB,UAEjB/hC,EAAK0N,GAAG,UAAU,SAAUR,GACtBlN,EAAKy0C,MAAQz0C,EAAKy0C,KAAKk6M,YACzBzhP,EAAEk0B,kBACFphC,EAAKilQ,eAGT,IAAIE,EAAW,SAAUt3P,EAAK4mC,GACxBA,GAAQA,EAAK94B,QAAQ5Z,OAAS,GAChC0yC,EAAK94B,QAAQtD,GAAGxK,GAAK,GAAGmG,SAgB5B,OAbAhU,EAAK0N,GAAG,WAAW,SAAUR,GAC3B,IAAIuc,EAAUvc,EAAEuc,QACU,UAAtBvc,EAAE6C,OAAO3M,WACPqmB,IAAYu6O,GAASviO,MACvBv0B,EAAEm0B,iBACFrhC,EAAKygC,KAAK,gBACV0kO,EAAS,EAAGnlQ,EAAKy0C,OACRhrB,IAAYu6O,GAASxiO,KAC9Bt0B,EAAEm0B,iBACF8jO,GAAU,EAAGnlQ,EAAKy0C,WAIjBz0C,EAAK6jC,UAEd1vB,OAAQ,WACN8qB,GAAS78B,KAAK0U,MAAM,QAAQg3B,MACxB1rC,KAAKqyC,MACPryC,KAAKqyC,KAAKtgC,SAEZ/R,KAAKyhC,YAILuhO,GAAWnB,GAAS5iQ,OAAO,CAC7BwvF,KAAM,SAAU9xF,GACd,IAAIiB,EAAOoC,KACXrD,EAASyH,YAAa,EAClBzH,EAAS6sH,WACX7sH,EAAS4Q,KAAO,QAElB3P,EAAK6jC,OAAO9kC,GACZiB,EAAKsG,QAAQL,IAAI,YACjBjG,EAAK0N,GAAG,2BAA2B,WACjC1N,EAAKqlQ,aAAarlQ,EAAK9B,aAG3BmnQ,aAAc,SAAUnnQ,GACtB,IAAIqmQ,EAAUniQ,KAAK0U,MAAM,QACrB/P,EAAMw9P,EAAUA,EAAQn1P,qBAAqB,KAAK,GAAK,KAC3D,GAAIrI,EACF,IACEA,EAAI4B,MAAMmN,WAAa5X,EACvB,MAAOoxB,MAIbgV,WAAY,WACV,IAAItkC,EAAOoC,KAMX,OALApC,EAAKu+B,MAAM7wB,GAAG,gBAAgB,SAAUR,GAClClN,EAAKu+B,MAAMpgC,IAAI,aACjB6B,EAAKqlQ,aAAan4P,EAAEhP,UAGjB8B,EAAK6jC,YAIZyhO,GAAcnC,GAAO9hQ,OAAO,CAC9BytP,UAAW,WACT,IAAI9uP,EAAOoC,KAAMrD,EAAWiB,EAAKjB,SAEjC,GADAiB,EAAKsG,QAAQL,IAAI,UACZjG,EAAK6W,MAsBR7W,EAAK6W,MAAMirB,WAtBI,CACf,IAAIyjO,EAAgBxmQ,EAAS8X,MACzB0uP,EAAchlQ,OAChBglQ,EAAgB,CACdj5P,OAAQ,OACRqP,MAAO4pP,IAGXA,EAAcluP,KAAOkuP,EAAcluP,MAAQ,SAC3CkuP,EAAc9G,SAAU,EACxB8G,EAAc/yL,UAAW,EACzB+yL,EAAc1a,UAAW,EACzB7qP,EAAK6W,MAAQ,IAAIknP,GAAWwH,GAAe73P,GAAG,QAAQ,WACpD1N,EAAKsG,QAAQ6N,OAAO,aACnBzG,GAAG,UAAU,SAAUR,GACxBA,EAAEk0B,kBACFphC,EAAKgU,QACLhU,EAAKuW,eACJvT,OAAOhD,GAAM80C,SAAS90C,EAAK00P,mBAC9B10P,EAAK6W,MAAM4pB,KAAK,QAChBzgC,EAAK6W,MAAM21O,SAIb,IAAIgZ,EAAU,CACZ,QACA,QACA,SAEEC,EAAU,CACZ,QACA,QACA,QACA,QACA,QACA,SAEEv2P,EAAMlP,EAAK6W,MAAMg6O,YAAY7wP,EAAK8W,QAAS/X,EAAS2mQ,eAAiB1lQ,EAAKwwG,QAAUg1J,EAAUC,IAClGzlQ,EAAK6W,MAAMvQ,QAAQiH,OAAO,QAA4B,MAAnB2B,EAAI0V,QAAQ,IAC/C5kB,EAAK6W,MAAMvQ,QAAQiH,OAAO,MAA0B,MAAnB2B,EAAI0V,QAAQ,IAC7C,IAAIw9E,EAA6B,MAArBlzF,EAAI0V,OAAO,EAAG,GAC1B5kB,EAAK6W,MAAMvQ,QAAQiH,OAAO,UAAW60F,GACrCpiG,EAAK6W,MAAMvQ,QAAQiH,OAAO,MAAO60F,GACjCpiG,EAAK6W,MAAMwyK,QAAQrpL,EAAK8W,QAAS5H,IAEnCqH,UAAW,WACT,IAAIvW,EAAOoC,KACPpC,EAAK6W,OACP7W,EAAK6W,MAAMkrB,QAGf6B,WAAY,WACV,IAAI5jC,EAAOoC,KAYX,OAXApC,EAAKwuI,KAAK,YAAY,GACtBxuI,EAAK0N,GAAG,SAAS,SAAUR,GACrBA,EAAE2F,UAAY7S,IACZA,EAAK6W,OAAS7W,EAAK6W,MAAM83O,UAC3B3uP,EAAKuW,aAELvW,EAAK8uP,YACL9uP,EAAK6W,MAAM7C,QAAQ9G,EAAEshI,WAIpBxuI,EAAK6jC,UAEd1vB,OAAQ,WAKN,OAJI/R,KAAKyU,QACPzU,KAAKyU,MAAM1C,SACX/R,KAAKyU,MAAQ,MAERzU,KAAKyhC,YAIZknM,GAAQ/6N,EAAS1Q,IACjBqmQ,GAAcL,GAAYjkQ,OAAO,CACnCwvF,KAAM,SAAU9xF,GACdqD,KAAKyhC,OAAO9kC,GACZqD,KAAKkE,QAAQL,IAAI,YACjB7D,KAAKkE,QAAQL,IAAI,gBAEnByN,MAAO,SAAUA,GACf,OAAIA,GACFtR,KAAK6T,OAASvC,EACdtR,KAAK0U,MAAM,WAAWnO,MAAM2iH,gBAAkB53G,EACvCtR,MAEFA,KAAK6T,QAEdO,WAAY,WAGV,OAFApU,KAAK6T,OAAS,KACd7T,KAAK0U,MAAM,WAAWnO,MAAM2iH,gBAAkB,KACvClpH,MAET00P,WAAY,WACV,IAAI92P,EAAOoC,KAAMd,EAAKtB,EAAKsnE,IAAK/2D,EAASvQ,EAAKg0P,YAAazvP,EAAOvE,EAAKu+B,MAAMpgC,IAAI,QAC7EwR,EAAO3P,EAAKjB,SAAS4Q,KAAOY,EAAS,OAASA,EAAS,KAAOvQ,EAAKjB,SAAS4Q,KAAO,GACnF8d,EAAQztB,EAAKjB,SAAS0uB,MAAQ,mCAAqCztB,EAAKjB,SAAS0uB,MAAQ,OAAS,GAClG81O,EAAW,GAKf,OAJIh/P,IACFvE,EAAKsG,QAAQL,IAAI,gBACjBs9P,EAAW,gBAAkBhzP,EAAS,QAAUvQ,EAAKI,OAAOmE,GAAQ,WAE/D,YAAcjD,EAAK,YAActB,EAAKsG,QAAtC,6HAAoLqJ,EAAO,aAAeA,EAAO,IAAM8d,EAAQ,QAAU,IAAM,aAAensB,EAAK,oBAAsBiP,EAAS,mBAAqBgzP,EAAvT,yCAAkXhzP,EAAlX,gDAAkbA,EAAlb,8BAETqzB,WAAY,WACV,IAAI5jC,EAAOoC,KAAMwjQ,EAAiB5lQ,EAAKjB,SAASwY,QAWhD,OAVAvX,EAAK0N,GAAG,SAAS,SAAUR,GACrBA,EAAEshI,MAAuB,SAAfthI,EAAEshI,KAAKttI,KAGjBgM,EAAE2F,UAAY7S,GAAS+qO,GAAMt0N,UAAUvJ,EAAE6C,OAAQ,IAAM/P,EAAKg0P,YAAc,UAC5E9mP,EAAE8/D,2BACF44L,EAAe5kQ,KAAKhB,EAAMkN,cAGvBlN,EAAKjB,SAASwY,QACdvX,EAAK6jC,YAIZgiO,GAAWrnQ,QAAQC,KAAKC,MAAMC,QAAQ,sBAEtCmnQ,GAAcxG,GAAOj+P,OAAO,CAC9BwhC,SAAU,CAAEv8B,QAAS,sBACrBuqF,KAAM,SAAU9xF,GACdqD,KAAKyhC,OAAO9kC,IAEd6kC,WAAY,WACV,IAEImiO,EAAKC,EAAYC,EAAaC,EAAWC,EAFzCnmQ,EAAOoC,KACPsR,EAAQ1T,EAAK0T,QAMjB,SAASugC,EAAOltC,EAAKuiB,GACnB,IACIjU,EAAGC,EADH+9B,EAAM48M,GAAMh8M,OAAOltC,GAMvB,OAJAsO,EAAIiU,EAAMmqB,MAAQJ,EAAIh+B,EACtBC,EAAIgU,EAAMoqB,MAAQL,EAAI/9B,EACtBD,EAAIjW,KAAK8oB,IAAI,EAAG9oB,KAAKC,IAAIgW,EAAItO,EAAIi9B,YAAa,IAC9C1uB,EAAIlW,KAAK8oB,IAAI,EAAG9oB,KAAKC,IAAIiW,EAAIvO,EAAIk9B,aAAc,IACxC,CACL5uB,EAAGA,EACHC,EAAGA,GAGP,SAAS8wP,EAAYL,EAAKM,GACxB,IAAIpsO,GAAO,IAAM8rO,EAAIz0P,GAAK,IAC1B2+O,GAAM/nP,IAAI+9P,EAAa,CAAE/jO,IAAW,IAANjI,EAAY,MACrCosO,GACHpW,GAAM/nP,IAAIi+P,EAAY,CACpBlkO,KAAM8jO,EAAIptP,EAAI,IACdupB,IAAK,IAAM6jO,EAAI1nQ,EAAI,MAGvB6nQ,EAAUv9P,MAAMmN,WAAa+vP,GAAS,CACpCltP,EAAG,IACHta,EAAG,IACHiT,EAAGy0P,EAAIz0P,IACNogE,QACH1xE,EAAK0T,QAAQ9M,MAAM,CACjB+R,EAAGotP,EAAIptP,EACPta,EAAG0nQ,EAAI1nQ,EACPiT,EAAGy0P,EAAIz0P,IAGX,SAASg1P,EAAyBp5P,GAChC,IAAImmC,EACJA,EAAMY,EAAOiyN,EAAWh5P,GACxB64P,EAAIptP,EAAY,IAAR06B,EAAIh+B,EACZ0wP,EAAI1nQ,EAAkB,KAAb,EAAIg1C,EAAI/9B,GACjB8wP,EAAYL,GACZ/lQ,EAAKygC,KAAK,UAEZ,SAAS8lO,EAAUr5P,GACjB,IAAImmC,EACJA,EAAMY,EAAO+xN,EAAY94P,GACzB64P,EAAMryP,EAAMynO,QACZ4qB,EAAIz0P,EAAkB,KAAb,EAAI+hC,EAAI/9B,GACjB8wP,EAAYL,GAAK,GACjB/lQ,EAAKygC,KAAK,UAlDZulO,EAAahmQ,EAAK8W,MAAM,KACxBmvP,EAAcjmQ,EAAK8W,MAAM,MACzBovP,EAAYlmQ,EAAK8W,MAAM,MACvBqvP,EAAanmQ,EAAK8W,MAAM,OAiDxB9W,EAAKwmQ,SAAW,WACdT,EAAMryP,EAAMynO,QACZirB,EAAYL,IAEd/lQ,EAAK6jC,SACL7jC,EAAKymQ,cAAgB,IAAI7lO,GAAW5gC,EAAKsnE,IAAM,MAAO,CACpD/jD,MAAO+iP,EACPxlO,KAAMwlO,IAERtmQ,EAAK0mQ,aAAe,IAAI9lO,GAAW5gC,EAAKsnE,IAAM,KAAM,CAClD/jD,MAAOgjP,EACPzlO,KAAMylO,IAERvmQ,EAAKwmQ,YAEPzhB,IAAK,WACH,OAAO3iP,KAAKsR,QAAQwnO,SAEtBh9O,MAAO,SAAUA,GACf,IAAI8B,EAAOoC,KACX,IAAIN,UAAUC,OAMZ,OAAO/B,EAAK0T,QAAQg+D,QALpB1xE,EAAK0T,QAAQ9M,MAAM1I,GACf8B,EAAK2mQ,WACP3mQ,EAAKwmQ,YAMX9yP,MAAO,WAIL,OAHKtR,KAAK6T,SACR7T,KAAK6T,OAAS4vP,MAETzjQ,KAAK6T,QAEd6gP,WAAY,WACV,IAGI8P,EAHA5mQ,EAAOoC,KACPd,EAAKtB,EAAKsnE,IACV/2D,EAASvQ,EAAKg0P,YAEd6S,EAAQ,0GACZ,SAASC,IACP,IAAIxkQ,EAAG4zE,EAAc6wL,EAAgBC,EAA3Bj/P,EAAO,GAGjB,IAFAg/P,EAAiB,kFACjBC,EAAYH,EAAM1mP,MAAM,KACnB7d,EAAI,EAAG4zE,EAAI8wL,EAAUjlQ,OAAS,EAAGO,EAAI4zE,EAAG5zE,IAC3CyF,GAAQ,eAAiBwI,EAAjB,sCAAuE,IAAM2lE,EAAI,KAAO6wL,EAAiBC,EAAU1kQ,GAAK,gBAAkB0kQ,EAAU1kQ,EAAI,GAAxJ,SAA6KykQ,EAAiBC,EAAU1kQ,GAAK,gBAAkB0kQ,EAAU1kQ,EAAI,GAA7O,YAEV,OAAOyF,EAET,IAAIk/P,EAAkB,uCAAyCJ,EAAzC,2CAAmGA,EAAQ,KAEjI,OADAD,EAAU,YAActlQ,EAAK,cAAgBiP,EAAS,yBAA2B02P,EAAkB,KAAOH,IAAyB,YAAcxlQ,EAAK,eAAiBiP,EAA7J,qCACH,YAAcjP,EAAK,YAActB,EAAKsG,QAAtC,cAAqEhF,EAAK,eAAiBiP,EAA3F,+BAA0IA,EAA1I,qCAA+LA,EAA/L,kCAAiPjP,EAAK,gBAAkBiP,EAAxQ,sCAA8TA,EAA9T,wDAAqZq2P,EAAU,YAItaM,GAAW5H,GAAOj+P,OAAO,CAC3BwvF,KAAM,SAAU9xF,GACd,IAAIiB,EAAOoC,KACXrD,EAAWc,EAASwB,OAAO,CACzByrB,OAAQ,IACRvoB,KAAM,qBACN8jG,UAAU,EACVpoD,OAAQ,MACPlhD,GACHiB,EAAK6jC,OAAO9kC,GACZiB,EAAKsG,QAAQL,IAAI,YACblH,EAASspG,UACXroG,EAAKsG,QAAQL,IAAI,aAGrB6wP,WAAY,WACV,IACIpsO,EAAO3jB,EADP/G,EAAOoC,KAEP+kQ,EAAMnnQ,EAAKjB,SAaf,OAZA2rB,EAAQ,CACNppB,GAAItB,EAAKsnE,IACT8/L,UAAW,KAEbrgQ,EAAMkpP,GAAMhhP,OAAO,MAAOyb,EAAO,SAAWtoB,KAAK8P,UAAUi1P,EAAI5iQ,MAAQ,WACnE4iQ,EAAIr6O,QACNmjO,GAAM/nP,IAAInB,EAAK,SAAUogQ,EAAIr6O,OAAS,MAEpCq6O,EAAIt6O,OACNojO,GAAM/nP,IAAInB,EAAK,QAASogQ,EAAIt6O,MAAQ,MAEtC9lB,EAAI7D,UAAYlD,EAAKsG,QACdS,EAAIy0C,WAEb5X,WAAY,WACV,IAAI5jC,EAAOoC,KACPilQ,EAAkB,SAAUn6P,GAC9BA,EAAEm0B,iBACFrhC,EAAKsG,QAAQiH,OAAO,aACpBvN,EAAK8W,QAAQ5T,UAAYlD,EAAKsG,SAE5BqH,EAAS,SAAUm+D,GACrB,IAAI7rB,EAASjgD,EAAKjB,SAASkhD,OAC3B,GAAsB,kBAAXA,EACT,OAAO6rB,EAET,IAAI4kB,EAAK,IAAIl/C,OAAO,IAAMyO,EAAO9/B,MAAM,WAAW/Z,KAAK,KAAO,KAAM,KACpE,OAAOvG,EAASinB,KAAKglD,GAAO,SAAUrsB,GACpC,OAAOixC,EAAGztF,KAAKw8C,EAAKv5C,UAGxBlG,EAAK6jC,SACL7jC,EAAKqjC,IAAI31B,GAAG,YAAY,SAAUR,GAChCA,EAAEm0B,oBAEJrhC,EAAKqjC,IAAI31B,GAAG,YAAa25P,GACzBrnQ,EAAKqjC,IAAI31B,GAAG,YAAa25P,GACzBrnQ,EAAKqjC,IAAI31B,GAAG,QAAQ,SAAUR,GAE5B,GADAA,EAAEm0B,kBACErhC,EAAKu+B,MAAMpgC,IAAI,YAAnB,CAGA,IAAI2tE,EAAQn+D,EAAOT,EAAEk9D,aAAa0B,OAClC9rE,EAAK9B,MAAQ,WACX,OAAK4tE,EAAM/pE,OAEA/B,EAAKjB,SAASspG,SAChBv8B,EAEAA,EAAM,GAJN,MAOPA,EAAM/pE,QACR/B,EAAKygC,KAAK,SAAUvzB,QAI1BiH,OAAQ,WACN/R,KAAKihC,IAAIyK,MACT1rC,KAAKyhC,YAILyjO,GAAOhI,GAAOj+P,OAAO,CACvBwvF,KAAM,SAAU9xF,GACd,IAAIiB,EAAOoC,KACNrD,EAAS+K,YACZ/K,EAAS+K,UAAY,KAEvB9J,EAAK6jC,OAAO9kC,GACZiB,EAAKsG,QAAQL,IAAI,QACjBjG,EAAK44P,UAAW,EAChB54P,EAAK0N,GAAG,SAAS,SAAUR,GACzB,IAAI7H,EACA0K,EAAS7C,EAAE6C,QACX1K,EAAQ0K,EAAOkH,aAAa,gBAC9BjX,EAAKygC,KAAK,SAAU,CAClBviC,MAAO8B,EAAKkyE,MAAM7sE,GAClBA,MAAOA,OAIbrF,EAAKkyE,IAAIlyE,EAAKjB,SAASmzE,MAEzBl+D,MAAO,WACL,IAAIhU,EAAOoC,KAEX,OADApC,EAAK8W,QAAQE,WAAWhD,QACjBhU,GAETkyE,IAAK,SAAUA,GACb,OAAKpwE,UAAUC,QAGfK,KAAKm8B,MAAMngC,IAAI,MAAO8zE,GACf9vE,MAHEA,KAAKm8B,MAAMpgC,IAAI,QAK1B24P,WAAY,WACV,IAAI92P,EAAOoC,KACX,MAAO,YAAcpC,EAAKsnE,IAAM,YAActnE,EAAKsG,QAAU,KAAOtG,EAAKunQ,iBAAiBvnQ,EAAKu+B,MAAMpgC,IAAI,QAAU,UAErHmmC,WAAY,WACV,IAAItkC,EAAOoC,KAIX,OAHApC,EAAKu+B,MAAM7wB,GAAG,cAAc,SAAUR,GACpClN,EAAK0tF,UAAU1tF,EAAKunQ,iBAAiBr6P,EAAEhP,WAElC8B,EAAK6jC,UAEd0jO,iBAAkB,SAAUvjQ,GAC1B,IAEI1B,EAAG4zE,EAFHl2E,EAAOoC,KACPk7B,EAAQt5B,GAAQ,GACV+D,EAAO,GACbwI,EAASvQ,EAAKg0P,YAClB,IAAK1xP,EAAI,EAAG4zE,EAAI54C,EAAMv7B,OAAQO,EAAI4zE,EAAG5zE,IACnCyF,IAASzF,EAAI,EAAI,eAAiBiO,EAAS,gCAAkCvQ,EAAKjB,SAAS+K,UAAY,UAAY,IAAM,6BAA+ByG,EAAS,aAAejO,IAAM4zE,EAAI,EAAI,IAAM3lE,EAAS,OAAS,IAAM,iBAAmBjO,EAAI,uBAAyBtC,EAAKsnE,IAAM,IAAMhlE,EAAI,kBAAoBA,EAAI,GAAK,KAAOg7B,EAAMh7B,GAAG4D,KAAO,SAKvV,OAHK6B,IACHA,EAAO,eAAiBwI,EAAS,sBAE5BxI,KAIPy/P,GAAcF,GAAKjmQ,OAAO,CAC5BuiC,WAAY,WACV,IAAI5jC,EAAOoC,KAAMtD,EAASkB,EAAKjB,SAASD,OACxC,SAAS45J,EAAS3xJ,GAChB,GAAqB,IAAjBA,EAAIse,SAAgB,CACtB,GAAqB,OAAjBte,EAAI3D,UAAuB2D,EAAIkQ,aAAa,kBAC9C,OAAO,EAET,GAA0C,aAAtClQ,EAAIkQ,aAAa,iBACnB,OAAO,EAGX,OAAO,EAgCT,OA9BoC,IAAhCnY,EAAOC,SAAS0oQ,cAClBznQ,EAAK0N,GAAG,UAAU,SAAUR,GAC1BpO,EAAOkV,QACPlV,EAAO6L,UAAUO,OAAO9I,KAAK8vE,MAAMhlE,EAAE7H,OAAOxC,SAC5C/D,EAAOmV,iBAETnV,EAAO4O,GAAG,cAAc,SAAUR,GAChC,IAAIw6P,EAAa,GACb9sM,EAAU1tD,EAAE0tD,QACZt4D,EAAIs4D,EAAQ74D,OAChB,MAAOO,IACL,GAA4B,IAAxBs4D,EAAQt4D,GAAG+iB,WAAmBqzI,EAAS99F,EAAQt4D,IAAK,CACtD,IAAIoD,EAAO5G,EAAO2hC,KAAK,cAAe,CACpCv6B,KAAM00D,EAAQt4D,GAAGc,SAASic,cAC1BtP,OAAQ6qD,EAAQt4D,KAQlB,GANKoD,EAAKi9D,sBACR+kM,EAAW/hQ,KAAK,CACdO,KAAMR,EAAKQ,KACXrD,QAAS+3D,EAAQt4D,KAGjBoD,EAAK8tI,uBACP,MAINxzI,EAAKkyE,IAAIw1L,OAGN1nQ,EAAK6jC,YAIZ8jO,GAAW/N,GAAUv4P,OAAO,CAC9BwhC,SAAU,CACRv2B,OAAQ,OACRE,MAAO,SACPyU,SAAU,CAAElU,KAAM,IAEpB+pP,WAAY,WACV,IAAI92P,EAAOoC,KAAMkK,EAAStM,EAAK6zP,QAAStjP,EAASvQ,EAAKg0P,YAGtD,OAFAh0P,EAAKsG,QAAQL,IAAI,YACjBqG,EAAOyqP,UAAU/2P,GACV,YAAcA,EAAKsnE,IAAM,YAActnE,EAAKsG,QAAU,kCAAoCtG,EAAKjB,SAAS8I,MAAQ,YAAc7H,EAAKsnE,IAAM,kBAAoB/2D,EAAS,UAAYvQ,EAAKjB,SAAS8I,MAAQ,SAAW,IAAM,YAAc7H,EAAKsnE,IAAM,iBAAmBtnE,EAAK85P,YAAc,MAAQ95P,EAAKjB,SAASgJ,MAAQ,IAAMuE,EAAOwqP,WAAW92P,GAA9U,kBAIP4nQ,GAAOhO,GAAUv4P,OAAO,CAC1BwhC,SAAU,CACRk3N,aAAc,OACdztP,OAAQ,OACRC,UAAW,SACXC,MAAO,UACPO,KAAM,EACNkQ,QAAS,GACTsrB,SAAU,GACVrrB,QAAS,GACT/W,UAAW,CACT8sE,OAAQ,WACN7wE,KAAK6wE,YAIX8jL,UAAW,WACT,IAAI/2P,EAAOoC,KAAMuZ,EAAQ3b,EAAK2b,QACzB3b,EAAKjB,SAAS2sH,mBACjB1rH,EAAKjB,SAAS2sH,iBAAmB,CAC/Bp/G,OAAQ,OACRwoP,WAAY,WACZ7zO,SAAU,CAAElU,KAAM,KAGtB4O,EAAM/N,MAAK,SAAUgF,GACnB,IAAIi1P,EACAn7P,EAAQkG,EAAK7T,SAAS2N,MACtBA,IACFm7P,EAAW,IAAIF,GAAS9nQ,EAASwB,OAAO,CACtCsa,MAAO,CACLpb,KAAM,QACNe,GAAIsR,EAAK00D,IAAM,KACf/iE,KAAMmI,EACNK,KAAM,EACN0/E,MAAO75E,EAAK00D,IACZx0D,SAAUF,EAAKE,aAEhB9S,EAAKjB,SAAS2sH,mBACjBm8I,EAAStnQ,KAAO,WAChBqS,EAAK47H,KAAK,aAAc57H,EAAK00D,IAAM,MACD,qBAAvB10D,EAAK7T,SAASgO,OACvB6F,EAAK7T,SAASgO,KAAO,GAEvB/M,EAAKW,QAAQiS,EAAMi1P,GACnBA,EAAS5hQ,IAAI2M,QAInBqgE,OAAQ,WACN,OAAO7wE,KAAKq+B,KAAK,SAAU,CAAEz8B,KAAM5B,KAAK65C,YAE1CrY,WAAY,WACV,IAAI5jC,EAAOoC,KACXpC,EAAK6jC,SACL7jC,EAAK+rF,SAAS/rF,EAAKjB,SAASiF,OAE9BsgC,WAAY,WACV,IAAItkC,EAAOoC,KAEX,SAAS0lQ,IACP,IAEIxlQ,EAAGimC,EAAU5sB,EAFbosP,EAAgB,EAChBC,EAAS,GAEb,IAAmC,IAA/BhoQ,EAAKjB,SAASwtH,aAAlB,CAIE5wG,EADiC,aAA/B3b,EAAKjB,SAASwtH,aACRvsH,EAAKqO,KAAK,YAEVrO,EAAK2b,QAEfA,EAAMhO,OAAO,YAAYC,MAAK,SAAU+mC,GACtC,IAAIszN,EAAYtzN,EAAKh5B,QAAQ,GAAIusP,EAAaD,EAAUnxP,QAAQktB,YAChE+jO,EAAgBG,EAAaH,EAAgBG,EAAaH,EAC1DC,EAAOriQ,KAAKsiQ,MAEd1/N,EAAWvoC,EAAKjB,SAASwpC,UAAY,EACrCjmC,EAAI0lQ,EAAOjmQ,OACX,MAAOO,IACL0lQ,EAAO1lQ,GAAGvD,SAASiN,SAAW+7P,EAAgBx/N,GArBlDvoC,EAAK6jC,SAwBL7jC,EAAK0N,GAAG,OAAQo6P,GAChBA,OAIAK,GAAWP,GAAKvmQ,OAAO,CACzBwhC,SAAU,CACRk3N,aAAc,WACdztP,OAAQ,OACRC,UAAW,SACXC,MAAO,UACPO,KAAM,EACNkQ,QAAS,aACTsrB,SAAU,GACVrrB,QAAS,GACTsrB,OAAQ,GAEVsuN,WAAY,WACV,IAAI92P,EAAOoC,KAAMkK,EAAStM,EAAK6zP,QAAStjP,EAASvQ,EAAKg0P,YAGtD,OAFAh0P,EAAK+2P,YACLzqP,EAAOyqP,UAAU/2P,GACV,iBAAmBA,EAAKsnE,IAAM,YAActnE,EAAKsG,QAAU,kCAAoCtG,EAAKjB,SAAS8I,MAAQ,eAAiB7H,EAAKsnE,IAAM,kBAAoB/2D,EAAS,mBAAqBvQ,EAAKjB,SAAS8I,MAAQ,YAAc,IAAM,YAAc7H,EAAKsnE,IAAM,iBAAmBtnE,EAAK85P,YAAc,MAAQ95P,EAAKjB,SAASgJ,MAAQ,IAAMuE,EAAOwqP,WAAW92P,GAAlW,uBAIPooQ,GAAW,EACX7uK,GAAW,SAAUhpF,GACvB,IAAI8/B,EAAO,IAAI3/B,KACX8gI,EAAOnhG,EAAK1/B,UACZmvI,EAAS1gJ,KAAK61B,MAAsB,IAAhB71B,KAAK0gJ,UAE7B,OADAsoH,KACO73P,EAAS,IAAMuvI,EAASsoH,GAAW7tP,OAAOi3H,IAG/C3rF,GAAW,SAAU99C,EAAMw1B,GAC7B,IAAI7V,EAAM6V,GAASx/B,EAAW4E,SAC1BkT,EAAM6R,EAAIuF,cAAc,OAE5B,GADApX,EAAI5R,UAAY8D,GACX8N,EAAIitC,iBAAmBjtC,EAAIkB,WAAWhV,OAAS,EAElD,MADAhE,EAAW+nD,QAAQr1B,MAAM,wCAAyC1oB,GAC5D,IAAIkR,MAAM,qCAElB,OAAO8sC,GAAQlwC,EAAIkB,WAAW,KAE5BivC,GAAU,SAAU3/C,EAAKk3B,GAC3B,IAAI7V,EAAM6V,GAASx/B,EAAW4E,SAC1B+H,EAAOgd,EAAIuF,cAAc5mB,GAC7B,OAAO0/C,GAAQr7C,IAEbu7C,GAAW,SAAU1hD,EAAMg5B,GAC7B,IAAI7V,EAAM6V,GAASx/B,EAAW4E,SAC1B+H,EAAOgd,EAAIlZ,eAAejK,GAC9B,OAAOwhD,GAAQr7C,IAEbq7C,GAAU,SAAUr7C,GACtB,GAAa,OAATA,QAA0B0O,IAAT1O,EACnB,MAAM,IAAIuO,MAAM,oCAElB,MAAO,CAAEjO,IAAKnB,EAASa,KAErBw7C,GAAY,SAAUC,EAAQ9wC,EAAGC,GACnC,IAAIoS,EAAMy+B,EAAOn7C,MACjB,OAAOmP,EAAO/U,KAAKsiB,EAAI0+B,iBAAiB/wC,EAAGC,IAAI5U,IAAIqlD,KAEjDM,GAAU,CACZR,SAAUA,GACVG,QAASA,GACTC,SAAUA,GACVF,QAASA,GACTG,UAAWA,IAGTqB,GAAS,SAAUvvC,GACrB,IACI+C,EADAysC,GAAS,EAEb,OAAO,WAEL,IADA,IAAI9hD,EAAO,GACFkS,EAAK,EAAGA,EAAK9V,UAAUC,OAAQ6V,IACtClS,EAAKkS,GAAM9V,UAAU8V,GAMvB,OAJK4vC,IACHA,GAAS,EACTzsC,EAAI/C,EAAEjS,MAAM,KAAML,IAEbqV,IAOPy4E,IAHYz1F,EAAWupD,KAAKiF,eACZxuD,EAAWupD,KAAKkF,mBACtBzuD,EAAWupD,KAAKmF,aACf1uD,EAAWupD,KAAKoF,eAG3BJ,IAFgBvuD,EAAWupD,KAAKqF,mBACZ5uD,EAAWupD,KAAKsF,uBAC1B7uD,EAAWupD,KAAKuF,cAO1B1vB,IANOp/B,EAAWupD,KAAKyF,UACEhvD,EAAWupD,KAAK0F,4BACtBjvD,EAAWupD,KAAK2F,sBAC1BlvD,EAAWupD,KAAK4F,YACdnvD,EAAWupD,KAAK6F,cAEW,qBAAtBpvD,EAAW6B,OAAyB7B,EAAW6B,OAASw9B,SAAS,eAATA,IAExEC,GAAO,SAAUC,EAAOC,GAE1B,IADA,IAAI38B,OAAcwY,IAAVmkB,GAAiC,OAAVA,EAAiBA,EAAQJ,GAC/C76B,EAAI,EAAGA,EAAIg7B,EAAMv7B,aAAgBqX,IAANxY,GAAyB,OAANA,IAAc0B,EACnE1B,EAAIA,EAAE08B,EAAMh7B,IAEd,OAAO1B,GAELjC,GAAU,SAAU6+B,EAAGD,GACzB,IAAID,EAAQE,EAAErd,MAAM,KACpB,OAAOkd,GAAKC,EAAOC,IAGjBE,GAAS,SAAUv3B,EAAMq3B,GAC3B,OAAO5+B,GAAQuH,EAAMq3B,IAEnBxkB,GAAW,SAAU7S,EAAMq3B,GAC7B,IAAIG,EAASD,GAAOv3B,EAAMq3B,GAC1B,QAAenkB,IAAXskB,GAAmC,OAAXA,EAC1B,MAAM,IAAIzkB,MAAM/S,EAAO,kCAEzB,OAAOw3B,GAELC,GAAW,CAAE5kB,SAAUA,IAEvB6tC,GAAY,WAEd,IADA,IAAIC,EAAS,GACJjvC,EAAK,EAAGA,EAAK9V,UAAUC,OAAQ6V,IACtCivC,EAAOjvC,GAAM9V,UAAU8V,GAEzB,OAAO,WAEL,IADA,IAAIhL,EAAS,GACJgL,EAAK,EAAGA,EAAK9V,UAAUC,OAAQ6V,IACtChL,EAAOgL,GAAM9V,UAAU8V,GAEzB,GAAIivC,EAAO9kD,SAAW6K,EAAO7K,OAC3B,MAAM,IAAIkX,MAAM,mDAAqD4tC,EAAO9kD,OAAS,WAAa6K,EAAO7K,OAAS,cAEpH,IAAI+kD,EAAS,GAIb,OAHAl5C,GAAKi5C,GAAQ,SAAU3gD,EAAM5D,GAC3BwkD,EAAO5gD,GAAQ2D,EAAS+C,EAAOtK,OAE1BwkD,IAIPp8C,GAAO,WACT,IAAIsN,EAAI2lB,GAAS5kB,SAAS,QAC1B,OAAOf,GAELivC,GAA0B,SAAUltC,EAAGG,EAAGjZ,GAC5C,OAAkD,KAA1C8Y,EAAEktC,wBAAwB/sC,GAAKjZ,IAErCimD,GAA4B,SAAUntC,EAAGG,GAC3C,OAAO+sC,GAAwBltC,EAAGG,EAAGxP,KAAOy8C,8BAE1CC,GAA8B,SAAUrtC,EAAGG,GAC7C,OAAO+sC,GAAwBltC,EAAGG,EAAGxP,KAAO28C,iCAE1CC,GAAO,CACTJ,0BAA2BA,GAC3BE,4BAA6BA,IAG3BK,GAAa,SAAUC,EAAS/uC,GAClC,IAAK,IAAIrW,EAAI,EAAGA,EAAIolD,EAAQ3lD,OAAQO,IAAK,CACvC,IAAI+S,EAAIqyC,EAAQplD,GAChB,GAAI+S,EAAEpS,KAAK0V,GACT,OAAOtD,IAKTsyC,GAAS,SAAUD,EAASE,GAC9B,IAAI7sC,EAAI0sC,GAAWC,EAASE,GAC5B,IAAK7sC,EACH,MAAO,CACLsC,MAAO,EACPC,MAAO,GAGX,IAAImmC,EAAQ,SAAUnhD,GACpB,OAAOulD,OAAOD,EAAMjnD,QAAQoa,EAAG,IAAMzY,KAEvC,OAAO6wC,GAAGsQ,EAAM,GAAIA,EAAM,KAExBqE,GAAS,SAAUC,EAAgBH,GACrC,IAAII,EAAeztC,OAAOqtC,GAAOvoC,cACjC,OAA8B,IAA1B0oC,EAAehmD,OACVkmD,KAEFN,GAAOI,EAAgBC,IAE5BC,GAAU,WACZ,OAAO9U,GAAG,EAAG,IAEXA,GAAK,SAAU91B,EAAOC,GACxB,MAAO,CACLD,MAAOA,EACPC,MAAOA,IAGP4qC,GAAU,CACZ/U,GAAIA,GACJ2U,OAAQA,GACRG,QAASA,IAGPE,GAAO,OACPC,GAAS,SACT37B,GAAK,KACL47B,GAAQ,QACRC,GAAU,UACVC,GAAS,SACTC,GAAY,SAAUtiD,EAAMuiD,GAC9B,OAAO,WACL,OAAOA,IAAYviD,IAGnBwiD,GAAY,WACd,OAAOC,GAAK,CACVF,aAASrvC,EACToE,QAAS0qC,GAAQD,aAGjBU,GAAO,SAAUC,GACnB,IAAIH,EAAUG,EAAKH,QACfjrC,EAAUorC,EAAKprC,QACnB,MAAO,CACLirC,QAASA,EACTjrC,QAASA,EACTqrC,OAAQL,GAAUL,GAAMM,GACxBK,SAAUN,GAAUJ,GAAQK,GAC5BM,KAAMP,GAAU/7B,GAAIg8B,GACpBO,QAASR,GAAUH,GAAOI,GAC1BQ,UAAWT,GAAUF,GAASG,GAC9BS,SAAUV,GAAUD,GAAQE,KAG5BU,GAAU,CACZlB,QAASS,GACTvV,GAAIwV,GACJR,KAAMt+C,EAASs+C,IACfC,OAAQv+C,EAASu+C,IACjB37B,GAAI5iB,EAAS4iB,IACb47B,MAAOx+C,EAASw+C,IAChBC,QAASz+C,EAASy+C,IAClBC,OAAQ1+C,EAAS0+C,KAGf8/M,GAAY,UACZh/M,GAAM,MACNC,GAAU,UACVC,GAAQ,QACRC,GAAM,MACNC,GAAU,UACVC,GAAU,UACVC,GAAO,SAAUzjD,EAAMuiD,GACzB,OAAO,WACL,OAAOA,IAAYviD,IAGnB0jD,GAAY,WACd,OAAOC,GAAK,CACVpB,aAASrvC,EACToE,QAAS0qC,GAAQD,aAGjB4B,GAAO,SAAUjB,GACnB,IAAIH,EAAUG,EAAKH,QACfjrC,EAAUorC,EAAKprC,QACnB,MAAO,CACLirC,QAASA,EACTjrC,QAASA,EACTssC,UAAWH,GAAK0+M,GAAW5/M,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,GACTzW,GAAI0W,GACJT,QAASv/C,EAASw+P,IAClBh/M,IAAKx/C,EAASw/C,IACdC,QAASz/C,EAASy/C,IAClBC,MAAO1/C,EAAS0/C,IAChBC,IAAK3/C,EAAS2/C,IACdC,QAAS5/C,EAAS4/C,IAClBC,QAAS7/C,EAAS6/C,KAGhBY,GAAa,SAAUC,EAAIC,EAASC,GACtC,IAAIC,EAASH,EAAGR,UAAuC,IAA5B,QAAQ9mD,KAAKwnD,GACpCE,EAAWJ,EAAGR,UAAYW,EAC1BE,EAAaL,EAAGP,aAAoC,IAArBO,EAAG/sC,QAAQH,MAC1CwtC,EAAaN,EAAGP,aAAoC,IAArBO,EAAG/sC,QAAQH,MAC1CytC,EAAWJ,GAAUE,GAAcC,IAA4C,IAA9B,UAAU5nD,KAAKwnD,GAChEM,EAAUR,EAAGR,SAAWQ,EAAGP,YAC3BgB,EAAUD,IAAYD,EACtBG,EAAaT,EAAQtB,YAAcqB,EAAGR,UAAyC,IAA9B,UAAU9mD,KAAKwnD,GACpE,MAAO,CACLC,OAAQ7gD,EAAS6gD,GACjBC,SAAU9gD,EAAS8gD,GACnBG,SAAUjhD,EAASihD,GACnBE,QAASnhD,EAASmhD,GAClBD,QAASlhD,EAASkhD,GAClBf,UAAWO,EAAGP,UACdD,MAAOQ,EAAGR,MACVmB,UAAWrhD,EAASohD,KAIpBE,GAAW,SAAUC,EAAYX,GACnC,IAAI7C,EAAQrtC,OAAOkwC,GAAWprC,cAC9B,OAAOhR,GAAK+8C,GAAY,SAAUC,GAChC,OAAOA,EAAUC,OAAO1D,OAGxB2D,GAAgB,SAAUC,EAAUf,GACtC,OAAOU,GAASK,EAAUf,GAAW/pD,KAAI,SAAU8pD,GACjD,IAAIhtC,EAAU0qC,GAAQJ,OAAO0C,EAAQzC,eAAgB0C,GACrD,MAAO,CACLhC,QAAS+B,EAAQtkD,KACjBsX,QAASA,OAIXiuC,GAAW,SAAUC,EAAMjB,GAC7B,OAAOU,GAASO,EAAMjB,GAAW/pD,KAAI,SAAU6pD,GAC7C,IAAI/sC,EAAU0qC,GAAQJ,OAAOyC,EAAGxC,eAAgB0C,GAChD,MAAO,CACLhC,QAAS8B,EAAGrkD,KACZsX,QAASA,OAIXmuC,GAAW,CACbJ,cAAeA,GACfE,SAAUA,IAGRt4C,GAAW,SAAUlO,EAAK2f,GAC5B,OAAgC,IAAzB3f,EAAI+B,QAAQ4d,IAGjBgnC,GAAqB,sCACrBC,GAAgB,SAAU97C,GAC5B,OAAO,SAAU+7C,GACf,OAAO34C,GAAS24C,EAAU/7C,KAG1By7C,GAAW,CACb,CACEtlD,KAAM,OACN6hD,eAAgB,CAAC,kCACjBuD,OAAQ,SAAUQ,GAChB,OAAO34C,GAAS24C,EAAU,UAAY34C,GAAS24C,EAAU,WAAa34C,GAAS24C,EAAU,WAAa34C,GAAS24C,EAAU,iBAG7H,CACE5lD,KAAM,SACN6hD,eAAgB,CACd,kCACA6D,IAEFN,OAAQ,SAAUQ,GAChB,OAAO34C,GAAS24C,EAAU,YAAc34C,GAAS24C,EAAU,iBAG/D,CACE5lD,KAAM,KACN6hD,eAAgB,CACd,iCACA,8BAEFuD,OAAQ,SAAUQ,GAChB,OAAO34C,GAAS24C,EAAU,SAAW34C,GAAS24C,EAAU,aAG5D,CACE5lD,KAAM,QACN6hD,eAAgB,CACd6D,GACA,kCAEFN,OAAQO,GAAc,UAExB,CACE3lD,KAAM,UACN6hD,eAAgB,CAAC,uCACjBuD,OAAQO,GAAc,YAExB,CACE3lD,KAAM,SACN6hD,eAAgB,CACd6D,GACA,iCAEFN,OAAQ,SAAUQ,GAChB,OAAQ34C,GAAS24C,EAAU,WAAa34C,GAAS24C,EAAU,aAAe34C,GAAS24C,EAAU,kBAI/FJ,GAAO,CACT,CACExlD,KAAM,UACNolD,OAAQO,GAAc,OACtB9D,eAAgB,CAAC,0CAEnB,CACE7hD,KAAM,MACNolD,OAAQ,SAAUQ,GAChB,OAAO34C,GAAS24C,EAAU,WAAa34C,GAAS24C,EAAU,SAE5D/D,eAAgB,CACd,sCACA,+BACA,wCAGJ,CACE7hD,KAAM,UACNolD,OAAQO,GAAc,WACtB9D,eAAgB,CAAC,sCAEnB,CACE7hD,KAAM,MACNolD,OAAQO,GAAc,QACtB9D,eAAgB,CAAC,mCAEnB,CACE7hD,KAAM,QACNolD,OAAQO,GAAc,SACtB9D,eAAgB,IAElB,CACE7hD,KAAM,UACNolD,OAAQO,GAAc,SACtB9D,eAAgB,IAElB,CACE7hD,KAAM,UACNolD,OAAQO,GAAc,WACtB9D,eAAgB,KAGhBgE,GAAe,CACjBP,SAAU3hD,EAAS2hD,IACnBE,KAAM7hD,EAAS6hD,KAGbM,GAAW,SAAUvB,GACvB,IAAIe,EAAWO,GAAaP,WACxBE,EAAOK,GAAaL,OACpBlB,EAAUmB,GAASJ,cAAcC,EAAUf,GAAW/xC,KAAKywC,GAAQlB,QAASkB,GAAQhW,IACpFoX,EAAKoB,GAASF,SAASC,EAAMjB,GAAW/xC,KAAK2xC,GAAgBpC,QAASoC,GAAgBlX,IACtF8Y,EAAa3B,GAAWC,EAAIC,EAASC,GACzC,MAAO,CACLD,QAASA,EACTD,GAAIA,EACJ0B,WAAYA,IAGZC,GAAoB,CAAEpE,OAAQkE,IAE9BG,GAAW5E,IAAO,WACpB,IAAIkD,EAAY1sD,EAAWquD,UAAU3B,UACrC,OAAOyB,GAAkBpE,OAAO2C,MAE9B4B,GAAsB,CAAEvE,OAAQqE,IAEhCW,GAAYR,GACZmoC,GAAajB,GACbkB,GAAiB,SAAU1pF,GAC7B,OAAOA,EAAIqa,WAAaynC,IAAa9hD,EAAIqa,WAAaovE,IAAwC,IAA1BzpF,EAAI2pF,mBAEtE3uF,GAAM,SAAUsC,EAAUi1B,GAC5B,IAAIq3D,OAAiBx7E,IAAVmkB,EAAsBx/B,EAAW4E,SAAW46B,EAAMvyB,MAC7D,OAAO0pF,GAAeE,GAAQ,GAAKl0F,GAAIk0F,EAAKhyF,iBAAiB0F,GAAW+9C,GAAQN,UAE9E8uC,GAAM,SAAUvsF,EAAUi1B,GAC5B,IAAIq3D,OAAiBx7E,IAAVmkB,EAAsBx/B,EAAW4E,SAAW46B,EAAMvyB,MAC7D,OAAO0pF,GAAeE,GAAQz6E,EAAOhC,OAASgC,EAAO/U,KAAKwvF,EAAKE,cAAcxsF,IAAW5H,IAAI2lD,GAAQN,UAGlG2H,GAAkB,SAAUF,EAAIC,GAClC,IAAIE,EAAKH,EAAGxiD,MACR4iD,EAAKH,EAAGziD,MACZ,OAAO2iD,IAAOC,GAAaD,EAAGx6C,SAASy6C,IAErCC,GAAa,SAAUL,EAAIC,GAC7B,OAAOnG,GAAKF,4BAA4BoG,EAAGxiD,MAAOyiD,EAAGziD,QAEnDw/C,GAAU6B,GAAoBvE,SAAS0C,QAKvC+rC,IAJa/rC,GAAQzB,OAEdnC,GAAU,UAAW,UAEd,SAAUrpB,EAAOj1B,GACjC,OAAOtC,GAAIsC,EAAUi1B,KAGnBvvB,GAAOnO,EAASmO,KAChBg8I,GAA0B,SAAU9rJ,GACtC,OAAO,SAAUwM,GACf,GAAIA,GAA0B,IAAlBA,EAAK2a,SAAgB,CAC/B,GAAI3a,EAAK0D,kBAAoBlQ,EAC3B,OAAO,EAET,GAAIwM,EAAKuM,aAAa,8BAAgC/Y,EACpD,OAAO,EAGX,OAAO,IAGP03H,GAAwBo0B,GAAwB,QAChDn1E,GAAyBm1E,GAAwB,SACjD/6I,GAAS,SAAU1O,EAAMsH,EAAOQ,EAAKkJ,EAAO4rE,GAC9C,MAAO,CACL58E,KAAMA,EACNsH,MAAOA,EACPQ,IAAKA,EACLkJ,MAAOA,EACP4rE,OAAQA,IAGRmrL,GAA+B,SAAU59P,GAC3C,MAAOA,EAAOA,EAAKvH,WAAY,CAC7B,IAAIjF,EAAQwM,EAAK0D,gBACjB,GAAIlQ,GAAmB,YAAVA,EACX,OAAO03H,GAAsBlrH,GAGjC,OAAO,GAELQ,GAAS,SAAU5C,EAAU1G,GAC/B,OAAOlB,GAAI61F,GAAYlwC,GAAQN,QAAQnkD,GAAO0G,IAAW,SAAUzF,GACjE,OAAOA,EAAQmI,UAGfu9P,GAAiB,SAAUxhQ,GAC7B,OAAOA,EAAIq4D,WAAar4D,EAAIzD,aAE1BklQ,GAAkB,SAAUzhQ,GAC9B,OAAOA,EAAIzF,GAAKyF,EAAIzF,GAAKi4F,GAAS,MAEhC9K,GAAW,SAAU1nF,GACvB,OAAOA,GAAwB,MAAjBA,EAAI3D,WAAqB2D,EAAIzF,IAAMyF,EAAIb,OAEnDuiQ,GAAgB,SAAU1hQ,GAC5B,OAAO0nF,GAAS1nF,IAAQ03K,GAAW13K,IAEjC2hQ,GAAW,SAAU3hQ,GACvB,OAAOA,GAAO,aAAa9D,KAAK8D,EAAI3D,WAElCq7K,GAAa,SAAU13K,GACzB,OAAOuhQ,GAA6BvhQ,KAAS8tE,GAAuB9tE,IAElE4hQ,GAAgB,SAAU5hQ,GAC5B,OAAO2hQ,GAAS3hQ,IAAQ03K,GAAW13K,IAEjC6hQ,GAAW,SAAU7hQ,GACvB,OAAO2hQ,GAAS3hQ,GAAOuJ,SAASvJ,EAAI3D,SAASwhB,OAAO,GAAI,IAAM,GAE5DikP,GAAe,SAAU9hQ,GAC3B,IAAI+hQ,EAAWN,GAAgBzhQ,GAC3Bo2E,EAAS,WACXp2E,EAAIzF,GAAKwnQ,GAEX,OAAO75P,GAAO,SAAUs5P,GAAexhQ,GAAM,IAAM+hQ,EAAUF,GAAS7hQ,GAAMo2E,IAE1E4rL,GAAe,SAAUhiQ,GAC3B,IAAIiiQ,EAAWjiQ,EAAIzF,IAAMyF,EAAIb,KACzB+iQ,EAAaV,GAAexhQ,GAChC,OAAOkI,GAAO,SAAUg6P,GAA0B,IAAMD,EAAU,IAAMA,EAAU,EAAGxxP,IAEnF0xP,GAAmB,SAAUzkN,GAC/B,OAAO/jD,GAAIiN,GAAO82C,EAAMkkN,IAAgBE,KAEtCM,GAAmB,SAAU1kN,GAC/B,OAAO/jD,GAAIiN,GAAO82C,EAAMgkN,IAAgBM,KAEtCK,GAAoB,SAAUriQ,GAChC,IAAI09C,EAAOv5C,GAAO,kCAAmCnE,GACrD,OAAO09C,GAEL4kN,GAAW,SAAUt5P,GACvB,OAAO/B,GAAK+B,EAAOlI,OAAO9F,OAAS,GAEjCyiJ,GAAS,SAAUz9I,GACrB,IAAI09C,EAAO2kN,GAAkBriQ,GAC7B,OAAO4G,GAAOu7P,GAAiBzkN,GAAM3sC,OAAOqxP,GAAiB1kN,IAAQ4kN,KAEnEC,GAAc,CAAEj7P,KAAMm2I,IAEtB+kH,GAAkB,WACpB,OAAO3pQ,OAAOpB,QAAUoB,OAAOpB,QAAQigM,aAAe7/L,EAAS6/L,cAE7D+qE,GAAU,GACVC,GAAiB,EACjBC,GAAe,WACjBF,GAAU,IAERG,GAAa,SAAU55P,GACzB,MAAO,CACLlI,MAAOkI,EAAOlI,MACd3J,MAAO,CACL2J,MAAO,CAAE0zD,IAAKxrD,EAAOlI,OACrBQ,IAAK0H,EAAO1H,IACZ80E,OAAQptE,EAAOotE,UAIjBoS,GAAc,SAAU2a,GAC1B,OAAOrqG,EAASa,IAAIwpG,EAASy/J,KAE3BC,GAAiB,SAAU/hQ,EAAOQ,GACpC,MAAO,CACLR,MAAOA,EACP3J,MAAO,CACL2J,MAAOA,EACPQ,IAAKA,EACL80E,OAAQ3lE,KAIVqyP,GAAc,SAAUxhQ,EAAK6hG,GAC/B,IAAI4/J,EAActwP,GAAO0wF,GAAS,SAAUn6F,GAC1C,OAAOA,EAAO1H,MAAQA,KAExB,OAAQyhQ,GAENC,GAAa,SAAU1lP,EAAgBne,EAAM2pJ,GAC/C,IAAI3xJ,EAAQgI,KAAQme,EAAiBA,EAAene,GAAQ2pJ,EAC5D,OAAiB,IAAV3xJ,EAAkB,KAAOA,GAE9Bg2E,GAAkB,SAAU6wL,EAAM76J,EAAS8/J,EAAU3lP,GACvD,IAAIsnB,EAAY,CAAE9jC,MAAO,KACrBoiQ,EAAuB,SAAUT,GACnC,IAAIU,EAAeV,EAAQroQ,eAAe6oQ,GAAYR,EAAQQ,GAAY,GACtEG,EAAgBx8P,GAAOu8P,GAAc,SAAU7hQ,GACjD,OAAOwhQ,GAAYxhQ,EAAK6hG,MAE1B,OAAOrqG,EAASa,IAAIypQ,GAAe,SAAU9hQ,GAC3C,MAAO,CACLR,MAAOQ,EACPnK,MAAO,CACL2J,MAAOQ,EACPA,IAAKA,EACL80E,OAAQ3lE,QAKZ4yP,EAAgB,SAAU7pQ,GAC5B,IAAI8pQ,EAAkB18P,GAAOu8F,GAAS,SAAUn6F,GAC9C,OAAOA,EAAOxP,OAASA,KAEzB,OAAOgvF,GAAY86K,IAEjBC,EAAkB,WACpB,IAAIA,EAAkBF,EAAc,UAChCG,EAAYR,GAAW1lP,EAAgB,aAAc,QACrDmmP,EAAcT,GAAW1lP,EAAgB,gBAAiB,WAO9D,OANkB,OAAdkmP,GACFD,EAAgB7rL,QAAQmrL,GAAe,QAASW,IAE9B,OAAhBC,GACFF,EAAgB3kQ,KAAKikQ,GAAe,WAAYY,IAE3CF,GAELlkQ,EAAO,SAAUuV,GACnB,OAAO+nC,GAAM/nC,GAAO,SAAU5B,EAAGG,GAC/B,IAAIuwP,EAAyB,IAAb1wP,EAAEhY,QAA6B,IAAbmY,EAAEnY,OACpC,OAAO0oQ,EAAY1wP,EAAEjC,OAAOoC,GAAKH,EAAEjC,OAAO6zB,EAAWzxB,KACpD,KAEL,OAAsC,IAAlCmK,EAAeqmP,eACV,GAEW,SAAbV,EAAsB5jQ,EAAK,CAChCukQ,GAAc5F,EAAMkF,EAAqBT,KACzCmB,GAAc5F,EAAMqF,EAAc,WAClCO,GAAc5F,EAAMuF,OACjBK,GAAc5F,EAAMkF,EAAqBT,MAE5CoB,GAAe,SAAUviQ,EAAK2hQ,GAChC,IAAIruP,EAAQ6tP,GAAQQ,GACf,UAAU/mQ,KAAKoF,KAGhBsT,EACE3U,GAAQ2U,EAAOtT,GAAKiQ,WACtBkxP,GAAQQ,GAAYruP,EAAMrW,MAAM,EAAGmkQ,IAAgB3xP,OAAOzP,IAG5DmhQ,GAAQQ,GAAY,CAAC3hQ,KAGrBsiQ,GAAgB,SAAU5F,EAAMnwN,GAClC,IAAIi2N,EAAgB9F,EAAK1lP,cACrB6T,EAASrzB,EAASinB,KAAK8tB,GAAW,SAAUD,GAC9C,OAA4D,IAArDA,EAAK9sC,MAAMwX,cAAcrY,QAAQ6jQ,MAE1C,OAAyB,IAAlB33O,EAAOnxB,QAAgBmxB,EAAO,GAAGrrB,QAAUk9P,EAAO,GAAK7xO,GAE5D43O,GAAW,SAAUC,GACvB,IAAIljQ,EAAQkjQ,EAAYljQ,MACxB,OAAOA,EAAM0zD,IAAM1zD,EAAM0zD,IAAM1zD,GAE7BmjQ,GAA2B,SAAUp4P,EAAMyR,EAAgBshL,EAASqkE,GACtE,IAAIiB,EAAe,SAAUlG,GAC3B,IAAImG,EAAc5B,GAAYj7P,KAAKs3L,GAC/B/wJ,EAAYs/B,GAAgB6wL,EAAMmG,EAAalB,EAAU3lP,GAC7DzR,EAAKkyP,iBAAiBlwN,EAAWmwN,IAEnCnyP,EAAKlF,GAAG,gBAAgB,WACtBu9P,EAAar4P,EAAK1U,YAEpB0U,EAAKlF,GAAG,cAAc,SAAUR,GAC9B,IAAI69P,EAAc79P,EAAEhP,MACpB0U,EAAK1U,MAAM6sQ,EAAY1iQ,KACvB,IAAIR,EAAQijQ,GAASC,GACJ,UAAbf,EACFp3P,EAAK6tB,KAAK,SAAU,CAClBxlB,KAAM,CACJk/B,IAAKtyC,EACLs1E,OAAQ4tL,EAAY5tL,UAIxBvqE,EAAK6tB,KAAK,SAAU,CAClBxlB,KAAM,CACJ1W,KAAMsD,EACNs1E,OAAQ4tL,EAAY5tL,UAI1BvqE,EAAKoB,WAEPpB,EAAKlF,GAAG,SAAS,SAAUR,GACG,IAAxB0F,EAAK1U,QAAQ6D,QAAsC,UAAtBmL,EAAE6C,OAAO3M,UACxC6nQ,EAAa,OAGjBr4P,EAAKlF,GAAG,cAAc,WACpBkF,EAAKwtC,UAAU1yC,GAAG,UAAU,SAAUR,GAC/BA,EAAEy1D,sBACLioM,GAAah4P,EAAK1U,QAAS8rQ,UAK/BmB,GAAkB,SAAUj4O,GAC9B,IAAInC,EAASmC,EAAOnC,OAAQpqB,EAAUusB,EAAOvsB,QAC7C,MAAe,UAAXoqB,EACK,CACLA,OAAQ,KACRpqB,QAASA,GAES,YAAXoqB,GAKW,YAAXA,EAJF,CACLA,OAAQ,OACRpqB,QAASA,GAQJ,CACLoqB,OAAQ,OACRpqB,QAAS,KAIXykQ,GAA4B,SAAUx4P,EAAMyR,EAAgB2lP,GAC9D,IAAIqB,EAAmBhnP,EAAeinP,6BACtC,GAAID,EAAkB,CACpB,IAAIE,EAAgB,SAAUljQ,GACT,IAAfA,EAAItG,OAIRspQ,EAAiB,CACfhjQ,IAAKA,EACL9H,KAAMypQ,IACL,SAAU92O,GACX,IAAIs4O,EAAUL,GAAgBj4O,GAC9BtgB,EAAKyxP,cAAcmH,EAAQ7kQ,SAC3BiM,EAAKwxP,YAAYoH,EAAQz6O,WATzBne,EAAKwxP,YAAY,SAYrBxxP,EAAK2rB,MAAM7wB,GAAG,gBAAgB,SAAUR,GACtCq+P,EAAcr+P,EAAEhP,YAIlButQ,GAAaxH,GAAS5iQ,OAAO,CAC/Bk5O,QAAS,CAAEmvB,aAAcA,IACzB74K,KAAM,SAAU9xF,GACd,IACI2sQ,EAAgBC,EAAqBC,EADrC5rQ,EAAOoC,KAAMtD,EAASyqQ,KAAmBllP,EAAiBvlB,EAAOC,SAEjEirQ,EAAWjrQ,EAAS++C,SACxB/+C,EAASyH,YAAa,EACtBolQ,EAA2BvnP,EAAewnP,mBAAqBxnP,EAAeynP,4BAC1EF,IACFA,EAA2B/rQ,EAAS4/D,QAAQmsM,EAA0B,SAEnEA,IAA4BA,EAAyB5B,KACxD2B,EAAsBtnP,EAAe0nP,sBACjCJ,GAAyBC,IAA4BA,EAAyB5B,IAShF2B,EAAsBtnP,EAAe2nP,uBACjCL,GAAyBC,IAA4BA,EAAyB5B,KAChF0B,EAAiB,WACfC,EAAoB3rQ,EAAK8W,MAAM,OAAOxV,GAAItB,EAAK9B,QAAS8rQ,EAAUpqQ,WAXtE8rQ,EAAiB,WACf,IAAIzwP,EAAOjb,EAAKygC,KAAK,cAAcxlB,KACnCA,EAAOpb,EAASwB,OAAO,CAAEy8C,SAAUksN,GAAY/uP,GAC/C0wP,EAAoB3qQ,KAAKlC,GAAQ,SAAUZ,EAAO+c,GAChDjb,EAAK9B,MAAMA,GAAOuiC,KAAK,SAAU,CAAExlB,KAAMA,MACxCjb,EAAK9B,QAAS+c,KAWnBywP,IACF3sQ,EAAS4Q,KAAO,SAChB5Q,EAAS6sH,SAAW8/I,GAEtB1rQ,EAAK6jC,OAAO9kC,GACZiB,EAAKsG,QAAQL,IAAI,cACjB+kQ,GAAyBhrQ,EAAMqkB,EAAgBvlB,EAAOoU,UAAW82P,GACjEoB,GAA0BprQ,EAAMqkB,EAAgB2lP,MAIhDiC,GAAY/I,GAAe7hQ,OAAO,CACpCo5P,OAAQ,SAAUt1O,GAChB,IAAI+mP,EAAiB/mP,EAAU2rO,aAAc0D,EAAarvO,EAAUqvO,WACpErvO,EAAUxJ,QAAQhO,OAAO,YAAYC,MAAK,SAAUgF,GAClDA,EAAKk+O,WAAW,CACdz7O,EAAGm/O,EAAWvyN,KACd3sB,EAAGk/O,EAAWtyN,IACd1iC,EAAG0sQ,EAAe3W,OAASf,EAAWhyJ,MAAQgyJ,EAAWvyN,KACzD3wB,EAAG46P,EAAe1W,OAAShB,EAAWtyN,IAAMsyN,EAAW59M,SAErDhkC,EAAK6nP,QACP7nP,EAAK6nP,eAMT0R,GAAajJ,GAAe7hQ,OAAO,CACrCo5P,OAAQ,SAAUt1O,GAChB,IAAI7iB,EAAG4zE,EAAGv6D,EAAOuwP,EAAgBE,EAAgBC,EAAc7/P,EAAOi8B,EAAMvrB,EAASovP,EAAWC,EAAgBhgQ,EAC5GqG,EAAM45P,EAAgBC,EAAc1/P,EAEpCmU,EAAMwrP,EAASjsJ,EAAOngF,EAAM+S,EAAKs5N,EACjC5Q,EAAU6Q,EAAa9Q,EAAS+Q,EAAaC,EAAYC,EAAeC,EAAehR,EACvFiR,EAAeC,EAAoBC,EAAeC,EAAkBC,EAAiBC,EACrFC,EAAoBC,EAJpBC,EAAe,GAKfvlP,EAAM9oB,KAAK8oB,IAAK7oB,EAAMD,KAAKC,IAkD/B,IAjDAsc,EAAQwJ,EAAUxJ,QAAQhO,OAAO,YACjCu+P,EAAiB/mP,EAAU2rO,aAC3Bsb,EAAiBjnP,EAAUqvO,WAC3B6X,EAAelnP,EAAUpmB,SACzBwN,EAAY4Y,EAAUqrF,QAAU67J,EAAa9/P,WAAa,eAAiB8/P,EAAa9/P,UACxFC,EAAQ6/P,EAAa7/P,MACrBi8B,EAAOtjB,EAAUqrF,QAAU67J,EAAa5jO,MAAQ,MAAQ4jO,EAAa5jO,KACrEvrB,EAAUmvP,EAAanvP,SAAW,EAChB,iBAAd3Q,GAA8C,mBAAdA,IAClCoP,EAAQA,EAAMvd,IAAIud,EAAM/B,UAAU6sB,WAClCl6B,EAAYA,EAAU4T,MAAM,KAAK,IAEjB,WAAd5T,GACFuvP,EAAU,IACVC,EAAW,IACX6Q,EAAc,OACdC,EAAc,OACdE,EAAgB,SAChBD,EAAa,MACbE,EAAgB,SAChBhR,EAAkB,WAClBqR,EAAkB,OAClBF,EAAgB,IAChBF,EAAgB,IAChBC,EAAqB,SACrBE,EAAmB,OACnBE,EAAiB,QACjBC,EAAqB,SACrBC,EAAuB,aAEvB1R,EAAU,IACVC,EAAW,IACX6Q,EAAc,OACdC,EAAc,OACdE,EAAgB,SAChBD,EAAa,OACbE,EAAgB,SAChBhR,EAAkB,WAClBqR,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,EACxBhqQ,EAAI,EAAG4zE,EAAIv6D,EAAM5Z,OAAQO,EAAI4zE,EAAG5zE,IACnCsQ,EAAO+I,EAAMrZ,GACbkqQ,EAAiB55P,EAAKk+O,aACtB2b,EAAe75P,EAAK7T,SACpBgO,EAAO0/P,EAAa1/P,KACpBw/P,GAAkBjqQ,EAAI4zE,EAAI,EAAIh5D,EAAU,EACpCnQ,EAAO,IACTu/P,GAAav/P,EACTy/P,EAAeK,IACjBY,EAAa9nQ,KAAKiN,GAEpB45P,EAAez/P,KAAOA,GAExBw/P,GAAkBC,EAAeI,GACjC1rP,EAAOkrP,EAAeiB,GAAmBb,EAAeY,GAAoBhB,EAAekB,GACvFpsP,EAAOyrP,IACTA,EAAiBzrP,GAgBrB,GAbAof,EAAO,GAELA,EAAKssO,GADHL,EAAiB,EACCL,EAAeU,GAAeL,EAAiBL,EAAec,GAE9Dd,EAAea,GAAiBR,EAAiBL,EAAec,GAEtF1sO,EAAK8sO,GAAoBT,EAAiBT,EAAeqB,GACzDjtO,EAAK07N,GAAmBkQ,EAAea,GAAiBR,EACxDjsO,EAAKktO,GAAwBb,EAC7BrsO,EAAKm1N,KAAOp2P,EAAIihC,EAAKm1N,KAAMyW,EAAehX,MAC1C50N,EAAKo1N,KAAOr2P,EAAIihC,EAAKo1N,KAAMwW,EAAe/W,MAC1C70N,EAAKm1N,KAAOvtO,EAAIoY,EAAKm1N,KAAMyW,EAAenX,eAC1Cz0N,EAAKo1N,KAAOxtO,EAAIoY,EAAKo1N,KAAMwW,EAAelX,iBACtCkX,EAAepX,YAAex0N,EAAKm1N,OAASyW,EAAezW,MAAQn1N,EAAKo1N,OAASwW,EAAexW,KAApG,CAeA,IADAj1I,EAAQ8rJ,EAAiBD,EACpBhqQ,EAAI,EAAG4zE,EAAIu3L,EAAa1rQ,OAAQO,EAAI4zE,EAAG5zE,IAC1CsQ,EAAO66P,EAAanrQ,GACpBkqQ,EAAiB55P,EAAKk+O,aACtB4b,EAAUF,EAAeK,GACzB3rP,EAAOsrP,EAAeI,GAAeJ,EAAez/P,KAAO0zG,EACvDv/F,EAAOwrP,GACTH,GAAkBC,EAAeK,GAAeL,EAAeI,GAC/DN,GAAaE,EAAez/P,KAC5By/P,EAAez/P,KAAO,EACtBy/P,EAAekB,YAAchB,GAE7BF,EAAekB,YAAc,EAoBjC,IAjBAjtJ,EAAQ8rJ,EAAiBD,EACzBj5N,EAAM+4N,EAAeU,GACrBxsO,EAAO,GACW,IAAdgsO,IACW,QAAT7jO,EACF4K,EAAMk5N,EAAiBH,EAAeU,GACpB,WAATrkO,GACT4K,EAAMj0C,KAAKm5B,MAAM2zO,EAAea,GAAiB,GAAKb,EAAea,GAAiBR,GAAkB,GAAKH,EAAeU,GACxHz5N,EAAM,IACRA,EAAM+4N,EAAeU,KAEL,YAATrkO,IACT4K,EAAM+4N,EAAeU,GACrB5vP,EAAU9d,KAAK61B,MAAMs3O,GAAkB5wP,EAAM5Z,OAAS,MAG1Du+B,EAAK2sO,GAAiBb,EAAeiB,GAChC/qQ,EAAI,EAAG4zE,EAAIv6D,EAAM5Z,OAAQO,EAAI4zE,EAAG5zE,IACnCsQ,EAAO+I,EAAMrZ,GACbkqQ,EAAiB55P,EAAKk+O,aACtB5vO,EAAOsrP,EAAekB,aAAelB,EAAeI,GACtC,WAAVpgQ,EACF8zB,EAAK2sO,GAAiB7tQ,KAAKm5B,MAAM2zO,EAAegB,GAAsB,EAAIV,EAAeW,GAAiB,GACvF,YAAV3gQ,GACT8zB,EAAK6sO,GAAiBjlP,EAAIskP,EAAeY,IAAqB,EAAGlB,EAAegB,GAAsBd,EAAeiB,GAAmBjB,EAAekB,IACvJhtO,EAAK2sO,GAAiBb,EAAeiB,IAClB,QAAV7gQ,IACT8zB,EAAK2sO,GAAiBf,EAAegB,GAAsBV,EAAeW,GAAiBf,EAAelqO,KAExGsqO,EAAez/P,KAAO,IACxBmU,GAAQsrP,EAAez/P,KAAO0zG,GAEhCngF,EAAKy7N,GAAY76O,EACjBof,EAAKw7N,GAAWzoN,EAChBzgC,EAAKk+O,WAAWxwN,GACZ1tB,EAAK6nP,QACP7nP,EAAK6nP,SAEPpnN,GAAOnyB,EAAOhE,OA9Dd,GAJAojB,EAAK9gC,EAAI8gC,EAAKm1N,KACdn1N,EAAKhvB,EAAIgvB,EAAKo1N,KACdvwO,EAAU2rO,WAAWxwN,GACrBl+B,KAAKq4P,OAAOt1O,GACgB,OAAxBA,EAAUoxO,UAAoB,CAChC,IAAIY,EAAahyO,EAAUniB,SACvBm0P,IACFA,EAAWZ,UAAY,KACvBY,EAAWsD,cA+DjBkT,GAAajL,GAAOrhQ,OAAO,CAC7BwhC,SAAU,CACRggO,eAAgB,cAChBI,aAAc,mBACd2K,SAAU,SAEZnT,OAAQ,SAAUt1O,GAChBA,EAAUxJ,QAAQhO,OAAO,YAAYC,MAAK,SAAUgF,GAC9CA,EAAK6nP,QACP7nP,EAAK6nP,aAIX/9D,SAAU,WACR,OAAO,KAIP3lG,GAAa,SAAUx5D,EAAOj1B,GAChC,OAAOusF,GAAIvsF,EAAUi1B,IAGnBg+J,GAAe,SAAUz8L,EAAQsxC,GACnC,OAAO,WACLtxC,EAAOoX,YAAY,mBAAmB,EAAOk6B,KAG7Cy9N,GAA2B,SAAU/uQ,EAAQoH,EAAM4nQ,GACrD,IAAI1uN,EAAU,SAAU7gB,GACtBuvO,EAAQvvO,EAAOr4B,IAEbpH,EAAOwO,UACTxO,EAAOwO,UAAUi3M,cAAcr+M,EAAMk5C,GAErCtgD,EAAO4O,GAAG,QAAQ,WAChB5O,EAAOwO,UAAUi3M,cAAcr+M,EAAMk5C,OAIvC2uN,GAAyB,SAAUjvQ,EAAQoH,GAC7C,OAAO,SAAUgH,GACf2gQ,GAAyB/uQ,EAAQoH,GAAM,SAAUq4B,GAC/CrxB,EAAE2F,QAAQgoD,OAAOt8B,QAKnBpxB,GAAW,SAAUrO,GACvB,IAAIkvQ,EAAe,CACjB,YACA,cACA,aACA,gBAEEC,EAAe,YACfC,EAAiB,CACnB,CACE3pQ,KAAM,OACNoL,KAAM,YACN4H,QAASgkL,GAAaz8L,EAAQ,cAEhC,CACEyF,KAAM,SACNoL,KAAM,cACN4H,QAASgkL,GAAaz8L,EAAQ,gBAEhC,CACEyF,KAAM,QACNoL,KAAM,aACN4H,QAASgkL,GAAaz8L,EAAQ,eAEhC,CACEyF,KAAM,UACNoL,KAAM,eACN4H,QAASgkL,GAAaz8L,EAAQ,kBAGlCA,EAAO4Q,YAAY,QAAS,CAC1BnL,KAAM,QACNkwC,KAAMy5N,IAERpvQ,EAAO0Q,UAAU,QAAS,CACxBjP,KAAM,aACNoP,KAAMs+P,EACNx5N,KAAMy5N,EACNC,WAAY,SAAUjhQ,GACpB,IAAIunC,EAAOvnC,EAAE2F,QAAQ4hC,KACrB50C,EAAS+N,KAAKogQ,GAAc,SAAUjnP,EAAYlZ,GAChD4mC,EAAK94B,QAAQtD,GAAGxK,GAAKD,MAAK,SAAU+mC,GAClC,OAAOA,EAAKkmB,OAAO/7D,EAAOwO,UAAUrM,MAAM8lB,WAIhD1T,aAAc,SAAUnG,GACtB,IAAI0F,EAAO1F,EAAE2F,QACbhT,EAAS+N,KAAKogQ,GAAc,SAAUjnP,EAAYlZ,GAChDggQ,GAAyB/uQ,EAAQioB,GAAY,SAAUwX,GACrD3rB,EAAKjD,KAAKs+P,GACN1vO,GACF3rB,EAAKjD,KAAKoX,YAMpBlnB,EAAS+N,KAAK,CACZk3M,UAAW,CACT,aACA,eAEFG,YAAa,CACX,eACA,iBAEFE,WAAY,CACV,cACA,gBAEFC,aAAc,CACZ,UACA,eAEFgpD,UAAW,CACT,eACA,iBAED,SAAUz5N,EAAMzuC,GACjBpH,EAAO0Q,UAAUtJ,EAAM,CACrB20D,QAAQ,EACRznD,QAASuhC,EAAK,GACdllC,IAAKklC,EAAK,GACVthC,aAAc06P,GAAuBjvQ,EAAQoH,SAI/CmoQ,GAAQ,CAAElhQ,SAAUA,IAEpBmhQ,GAAe,SAAUh5E,GAC3B,OAAOA,EAAaA,EAAWn1K,MAAM,KAAK,GAAK,IAE7CouP,GAAoB,SAAU5yP,EAAO25K,GACvC,IACIp3L,EADAswQ,EAAOl5E,EAAaA,EAAWj2K,cAAgB,GAYnD,OAVAxf,EAAS+N,KAAK+N,GAAO,SAAUg5B,GACzBA,EAAKz2C,MAAMmhB,gBAAkBmvP,IAC/BtwQ,EAAQy2C,EAAKz2C,UAGjB2B,EAAS+N,KAAK+N,GAAO,SAAUg5B,GACxBz2C,GAASowQ,GAAa35N,EAAKz2C,OAAOmhB,gBAAkBivP,GAAaE,GAAMnvP,gBAC1EnhB,EAAQy2C,EAAKz2C,UAGVA,GAELuwQ,GAAqC,SAAU3vQ,EAAQ6c,GACzD,OAAO,WACL,IAAI3b,EAAOoC,KACXpC,EAAKu+B,MAAMngC,IAAI,QAAS,MACxBU,EAAO4O,GAAG,mBAAmB,SAAUR,GACrC,IAAIooL,EAAax2L,EAAOi8L,kBAAkB,YACtC95L,EAAQstQ,GAAkB5yP,EAAO25K,GACrCt1L,EAAK9B,MAAM+C,GAAgB,OACtBA,GAASq0L,GACZt1L,EAAKuE,KAAK+pQ,GAAah5E,SAK3Bo5E,GAAgB,SAAUj7L,GAC5BA,EAAUA,EAAQ9yE,QAAQ,KAAM,IAAIwf,MAAM,KAC1C,IAAI7d,EAAImxE,EAAQ1xE,OAChB,MAAOO,IACLmxE,EAAQnxE,GAAKmxE,EAAQnxE,GAAG6d,MAAM,KAEhC,OAAOszD,GAELk7L,GAAe,SAAU7vQ,GAC3B,IAAI8vQ,EAAsB,ukBACtBC,EAAQH,GAAc5vQ,EAAOC,SAAS+vQ,cAAgBF,GAC1D,OAAO/uQ,EAASa,IAAImuQ,GAAO,SAAUL,GACnC,MAAO,CACLjqQ,KAAM,CAAEg3D,IAAKizM,EAAK,IAClBtwQ,MAAOswQ,EAAK,GACZxwN,WAAyC,IAA9BwwN,EAAK,GAAGxnQ,QAAQ,SAAkB,eAAiBwnQ,EAAK,GAAK,QAI1EO,GAAkB,SAAUjwQ,GAC9BA,EAAO0Q,UAAU,cAAc,WAC7B,IAAImM,EAAQgzP,GAAa7vQ,GACzB,MAAO,CACLyB,KAAM,UACNgE,KAAM,cACN6O,QAAS,cACTxG,OAAQ+O,EACRqzP,YAAY,EACZ37P,aAAco7P,GAAmC3vQ,EAAQ6c,GACzD82B,SAAU,SAAUvlC,GACdA,EAAE2F,QAAQ9T,SAASb,OACrBY,EAAOoX,YAAY,YAAY,EAAOhJ,EAAE2F,QAAQ9T,SAASb,aAM/DqR,GAAa,SAAUzQ,GACzBiwQ,GAAgBjwQ,IAEdmwQ,GAAa,CAAE9hQ,SAAUoC,IAEzBgpB,GAAQ,SAAUxvB,EAAQksL,GAC5B,IAAIC,EAAS91L,KAAKs7B,IAAI,GAAIu6J,GAC1B,OAAO71L,KAAKm5B,MAAMxvB,EAASmsL,GAAUA,GAEnCC,GAAO,SAAUC,EAAUH,GAC7B,MAAI,aAAahyL,KAAKmyL,GACb78J,GAA+B,GAAzBjoB,SAAS8kL,EAAU,IAAW,GAAIH,GAAa,GAAK,KAE5DG,GAEL85E,GAAsB,SAAUvzP,EAAOwzP,EAAI/jK,GAC7C,IAAIltG,EAQJ,OAPA2B,EAAS+N,KAAK+N,GAAO,SAAUg5B,GACzBA,EAAKz2C,QAAUktG,EACjBltG,EAAQktG,EACCz2D,EAAKz2C,QAAUixQ,IACxBjxQ,EAAQixQ,MAGLjxQ,GAELkxQ,GAAqC,SAAUtwQ,EAAQ6c,GACzD,OAAO,WACL,IAAI3b,EAAOoC,KACXtD,EAAO4O,GAAG,mBAAmB,SAAUR,GACrC,IAAIk+F,EAAI+jK,EAAIl6E,EAAWh0L,EAEvB,GADAmqG,EAAKtsG,EAAOi8L,kBAAkB,YAC1B3vF,EACF,IAAK6pF,EAAY,GAAIh0L,GAASg0L,GAAa,EAAGA,IAC5Ck6E,EAAKh6E,GAAK/pF,EAAI6pF,GACdh0L,EAAQiuQ,GAAoBvzP,EAAOwzP,EAAI/jK,GAG3CprG,EAAK9B,MAAM+C,GAAgB,MACtBA,GACHjB,EAAKuE,KAAK4qQ,QAKdE,GAAmB,SAAUvwQ,GAC/B,IAAIwwQ,EAAyB,oCACzBC,EAAkBzwQ,EAAOC,SAASywQ,kBAAoBF,EAC1D,OAAOzvQ,EAASa,IAAI6uQ,EAAgBpvP,MAAM,MAAM,SAAUw0B,GACxD,IAAIpwC,EAAOowC,EAAMz2C,EAAQy2C,EACrB/nC,EAAS+nC,EAAKx0B,MAAM,KAKxB,OAJIvT,EAAO7K,OAAS,IAClBwC,EAAOqI,EAAO,GACd1O,EAAQ0O,EAAO,IAEV,CACLrI,KAAMA,EACNrG,MAAOA,OAITuxQ,GAAoB,SAAU3wQ,GAChCA,EAAO0Q,UAAU,kBAAkB,WACjC,IAAImM,EAAQ0zP,GAAiBvwQ,GAC7B,MAAO,CACLyB,KAAM,UACNgE,KAAM,aACN6O,QAAS,aACTxG,OAAQ+O,EACRqzP,YAAY,EACZ37P,aAAc+7P,GAAmCtwQ,EAAQ6c,GACzDpE,QAAS,SAAUrK,GACbA,EAAE2F,QAAQ9T,SAASb,OACrBY,EAAOoX,YAAY,YAAY,EAAOhJ,EAAE2F,QAAQ9T,SAASb,aAM/DkxC,GAAa,SAAUtwC,GACzB2wQ,GAAkB3wQ,IAEhB4wQ,GAAiB,CAAEviQ,SAAUiiC,IAE7BugO,GAAkB,SAAU7wQ,EAAQ21C,GACtC,IAAIl/B,EAAQk/B,EAAK1yC,OAajB,OAZAlC,EAAS+N,KAAK6mC,GAAM,SAAUE,GACxBA,EAAKF,OACPE,EAAKwpJ,OAAgD,IAAvCwxE,GAAgB7wQ,EAAQ61C,EAAKF,OAE7C,IAAI1tB,EAAa4tB,EAAKlhC,OAClBsT,IACF4tB,EAAKwpJ,QAAUr/L,EAAOwO,UAAUsiL,SAAS7oK,IAEvC4tB,EAAKwpJ,QACP5oL,OAGGA,GAELq6P,GAAsB,SAAU9wQ,EAAQ21C,GAC1C,IAAIl/B,EAAQk/B,EAAK94B,QAAQ5Z,OAgBzB,OAfA0yC,EAAK94B,QAAQ/N,MAAK,SAAU+mC,GACtBA,EAAKF,MACPE,EAAKg6M,QAAQihB,GAAoB9wQ,EAAQ61C,EAAKF,MAAQ,IAEnDE,EAAKF,MAAQE,EAAK51C,SAAS01C,MAC9BE,EAAKg6M,QAAQghB,GAAgB7wQ,EAAQ61C,EAAK51C,SAAS01C,MAAQ,GAE7D,IAAI1tB,EAAa4tB,EAAK51C,SAAS0U,OAC3BsT,GACF4tB,EAAKg6M,QAAQ7vP,EAAOwO,UAAUsiL,SAAS7oK,IAEpC4tB,EAAKg6M,WACRp5O,OAGGA,GAELs6P,GAAmB,SAAU/wQ,GAC/B,IAAIyW,EAAQ,EACRu6P,EAAa,GACbC,EAAsB,CACxB,CACEloQ,MAAO,WACP8T,MAAO,CACL,CACE9T,MAAO,YACP4L,OAAQ,MAEV,CACE5L,MAAO,YACP4L,OAAQ,MAEV,CACE5L,MAAO,YACP4L,OAAQ,MAEV,CACE5L,MAAO,YACP4L,OAAQ,MAEV,CACE5L,MAAO,YACP4L,OAAQ,MAEV,CACE5L,MAAO,YACP4L,OAAQ,QAId,CACE5L,MAAO,SACP8T,MAAO,CACL,CACE9T,MAAO,OACP8H,KAAM,OACN8D,OAAQ,QAEV,CACE5L,MAAO,SACP8H,KAAM,SACN8D,OAAQ,UAEV,CACE5L,MAAO,YACP8H,KAAM,YACN8D,OAAQ,aAEV,CACE5L,MAAO,gBACP8H,KAAM,gBACN8D,OAAQ,iBAEV,CACE5L,MAAO,cACP8H,KAAM,cACN8D,OAAQ,eAEV,CACE5L,MAAO,YACP8H,KAAM,YACN8D,OAAQ,aAEV,CACE5L,MAAO,OACP8H,KAAM,OACN8D,OAAQ,UAId,CACE5L,MAAO,SACP8T,MAAO,CACL,CACE9T,MAAO,YACP4L,OAAQ,KAEV,CACE5L,MAAO,aACP4L,OAAQ,cAEV,CACE5L,MAAO,MACP4L,OAAQ,OAEV,CACE5L,MAAO,MACP4L,OAAQ,SAId,CACE5L,MAAO,YACP8T,MAAO,CACL,CACE9T,MAAO,OACP8H,KAAM,YACN8D,OAAQ,aAEV,CACE5L,MAAO,SACP8H,KAAM,cACN8D,OAAQ,eAEV,CACE5L,MAAO,QACP8H,KAAM,aACN8D,OAAQ,cAEV,CACE5L,MAAO,UACP8H,KAAM,eACN8D,OAAQ,mBAKZ85O,EAAa,SAAU95K,GACzB,IAAIh/B,EAAO,GACX,GAAKg/B,EAqBL,OAlBA5zE,EAAS+N,KAAK6lE,GAAS,SAAUhgE,GAC/B,IAAI0jC,EAAW,CACb5yC,KAAMkP,EAAO5L,MACb8H,KAAM8D,EAAO9D,MAEf,GAAI8D,EAAOkI,MACTw7B,EAAS1C,KAAO84M,EAAW95O,EAAOkI,WAC7B,CACL,IAAIoL,EAAatT,EAAOA,QAAU,SAAW8B,IACxC9B,EAAOA,SACVA,EAAOvN,KAAO6gB,EACd+oP,EAAWnqQ,KAAK8N,IAElB0jC,EAAS1jC,OAASsT,EAClBowB,EAAS1nC,IAAMgE,EAAOhE,IAExBglC,EAAK9uC,KAAKwxC,MAEL1C,GAELu7N,EAAmB,WACrB,IAAIv7N,EAUJ,OAPIA,EAFA31C,EAAOC,SAASkxQ,oBACdnxQ,EAAOC,SAASmxQ,cACX3iB,EAAWwiB,EAAoBj4P,OAAOhZ,EAAOC,SAASmxQ,gBAEtD3iB,EAAWwiB,GAGbxiB,EAAWzuP,EAAOC,SAASmxQ,eAAiBH,GAE9Ct7N,GAOT,OALA31C,EAAO4O,GAAG,QAAQ,WAChB7N,EAAS+N,KAAKkiQ,GAAY,SAAUr8P,GAClC3U,EAAOwO,UAAUH,SAASsG,EAAOvN,KAAMuN,SAGpC,CACLlT,KAAM,OACNob,MAAOq0P,IACP38P,aAAc,SAAUnG,GACtBpO,EAAO2hC,KAAK,oBAAqB,CAAE5tB,QAAS3F,EAAE2F,WAEhDwzE,aAAc,CACZ0+H,SAAS,EACT/mK,UAAW,WACT,GAAI57C,KAAKrD,SAAS0U,OAChB,OAAO3U,EAAOwO,UAAU2wC,WAAW77C,KAAKrD,SAAS0U,SAGrDJ,aAAc,WACZ,IAAIrT,EAAOoC,KACXpC,EAAKgD,SAAS0K,GAAG,QAAQ,WACvB,IAAIqZ,EAAYkzC,EAChBlzC,EAAa/mB,EAAKjB,SAAS0U,OACvBsT,IACF/mB,EAAK8S,UAAUhU,EAAOwO,UAAUsiL,SAAS7oK,IACzC/mB,EAAK66D,OAAO/7D,EAAOwO,UAAUrM,MAAM8lB,KAErCkzC,EAAUj6D,EAAKjB,SAAS0Q,IACpBwqD,GACFj6D,EAAK66D,OAAO/7D,EAAOu7L,kBAAkBpgI,QAI3C1iD,QAAS,WACHnV,KAAKrD,SAAS0U,QAChB8nL,GAAaz8L,EAAQsD,KAAKrD,SAAS0U,OAAnC8nL,GAEEn5L,KAAKrD,SAAS0Q,KAChB3Q,EAAOoX,YAAY9T,KAAKrD,SAAS0Q,SAMvC0gQ,GAAoB,SAAUrxQ,EAAQsxQ,GACxCtxQ,EAAO4Q,YAAY,UAAW,CAC5BnL,KAAM,UACNkwC,KAAM27N,KAGNC,GAAoB,SAAUvxQ,EAAQsxQ,GACxCtxQ,EAAO0Q,UAAU,cAAe,CAC9BjP,KAAM,aACNgE,KAAM,UACNkwC,KAAM27N,EACNjC,WAAY,WACNrvQ,EAAOC,SAASuxQ,wBAClBV,GAAoB9wQ,EAAQsD,KAAKqyC,UAKrCogM,GAAa,SAAU/1O,GACzB,IAAIsxQ,EAAaP,GAAiB/wQ,GAClCqxQ,GAAkBrxQ,EAAQsxQ,GAC1BC,GAAkBvxQ,EAAQsxQ,IAExBG,GAAU,CAAEpjQ,SAAU0nO,IAEtB27B,GAAgB,6GAChBC,GAAkB,SAAUh9L,GAC9BA,EAAUA,EAAQ9yE,QAAQ,KAAM,IAAIwf,MAAM,KAC1C,IAAI7d,EAAImxE,EAAQ1xE,OAChB,MAAOO,IACLmxE,EAAQnxE,GAAKmxE,EAAQnxE,GAAG6d,MAAM,KAEhC,OAAOszD,GAELi9L,GAA6B,SAAU5xQ,EAAQ6c,EAAOoL,GACxD,OAAO,WACL,IAAI/mB,EAAOoC,KACXtD,EAAO4O,GAAG,cAAc,SAAUR,GAChC,IAAII,EAAYxO,EAAOwO,UACnBpP,EAAQ,KACZ2B,EAAS+N,KAAKV,EAAE0tD,SAAS,SAAUlwD,GAejC,GAdA7K,EAAS+N,KAAK+N,GAAO,SAAUg5B,GAU7B,GATI5tB,EACEzZ,EAAU6+G,UAAUzhH,EAAMqc,EAAY,CAAE7oB,MAAOy2C,EAAKz2C,UACtDA,EAAQy2C,EAAKz2C,OAGXoP,EAAU6+G,UAAUzhH,EAAMiqC,EAAKz2C,SACjCA,EAAQy2C,EAAKz2C,OAGbA,EACF,OAAO,KAGPA,EACF,OAAO,KAGX8B,EAAK9B,MAAMA,QAIbyyQ,GAA2B,SAAU7xQ,EAAQ+/D,GAC/C,OAAO,WACL,IAAIljD,EAAQ,GAUZ,OATA9b,EAAS+N,KAAKixD,GAAQ,SAAU12C,GAC9BxM,EAAMhW,KAAK,CACTpB,KAAM4jB,EAAM,GACZjqB,MAAOiqB,EAAM,GACb61B,UAAW,WACT,OAAOl/C,EAAOwO,UAAU2wC,WAAW91B,EAAM,UAIxC,CACL5nB,KAAM,UACNgE,KAAMs6D,EAAO,GAAG,GAChBjyD,OAAQ+O,EACRqzP,YAAY,EACZv8N,SAAU,SAAUvlC,GAClB,GAAIA,EAAE2F,QAAS,CACb,IAAIu9B,EAAMljC,EAAE2F,QAAQ3U,QACpBq9L,GAAaz8L,EAAQsxC,EAArBmrJ,KAGJloL,aAAcq9P,GAA2B5xQ,EAAQ6c,MAInDw9D,GAAiB,SAAUr6E,EAAQ+/D,GACrC,OAAOh/D,EAASa,IAAIm+D,GAAQ,SAAU12C,GACpC,MAAO,CACL5jB,KAAM4jB,EAAM,GACZ5Q,QAASgkL,GAAaz8L,EAAQqpB,EAAM,IACpC61B,UAAW,WACT,OAAOl/C,EAAOwO,UAAU2wC,WAAW91B,EAAM,UAK7CyoP,GAAa,SAAU9xQ,GACzB,IAAI+/D,EAAS4xM,GAAgB3xQ,EAAOC,SAAS8xQ,eAAiBL,IAC9D1xQ,EAAO4Q,YAAY,eAAgB,CACjCnL,KAAM,SACNkwC,KAAM0kC,GAAer6E,EAAQ+/D,KAE/B//D,EAAO0Q,UAAU,eAAgBmhQ,GAAyB7xQ,EAAQ+/D,KAEhEiyM,GAAe,CAAE3jQ,SAAUyjQ,IAE3BG,GAAwB,SAAUjyQ,EAAQ81I,GAC5C,IAAIj5H,EAAOq1P,EACX,GAAqB,kBAAVp8H,EACTo8H,EAAWp8H,EAAMz0H,MAAM,UAClB,GAAItgB,EAAS+mB,QAAQguH,GAC1B,OAAOhxF,GAAQ/jD,EAASa,IAAIk0I,GAAO,SAAUA,GAC3C,OAAOm8H,GAAsBjyQ,EAAQ81I,OAMzC,OAHAj5H,EAAQ9b,EAASinB,KAAKkqP,GAAU,SAAU9qQ,GACxC,MAAgB,MAATA,GAAgBA,KAAQpH,EAAO81C,aAEjC/0C,EAASa,IAAIib,GAAO,SAAUzV,GACnC,MAAgB,MAATA,EAAe,CAAE3B,KAAM,KAAQzF,EAAO81C,UAAU1uC,OAGvD+qQ,GAAgB,SAAU95N,GAC5B,OAAOA,GAA8B,MAAlBA,EAAS5yC,MAE1B2sQ,GAAgB,SAAUt8N,GAC5B,IAAIu8N,EAAaxjQ,GAAOinC,GAAW,SAAUuC,EAAU70C,GACrD,OAAQ2uQ,GAAc95N,KAAc85N,GAAcr8N,EAAUtyC,EAAI,OAElE,OAAOqL,GAAOwjQ,GAAY,SAAUh6N,EAAU70C,GAC5C,OAAQ2uQ,GAAc95N,IAAa70C,EAAI,GAAKA,EAAI6uQ,EAAWpvQ,OAAS,MAGpEqvQ,GAAyB,SAAUtyQ,EAAQwU,GAC7C,IAAI+9P,EAAkB,CAAC,CAAE9sQ,KAAM,MAC3BqwC,EAAY/0C,EAASinB,KAAKhoB,EAAO81C,WAAW,SAAUuC,GACxD,OAAOA,EAAS7jC,UAAYA,KAe9B,OAbAzT,EAAS+N,KAAKgnC,GAAW,SAAUuC,GACN,WAAvBA,EAASxL,WACX0lO,EAAgB1rQ,KAAK,CAAEpB,KAAM,MAE3B4yC,EAAS2J,iBACXuwN,EAAgB5yL,QAAQtnC,GAExBk6N,EAAgB1rQ,KAAKwxC,GAEI,UAAvBA,EAASxL,WACX0lO,EAAgB1rQ,KAAK,CAAEpB,KAAM,SAG1B8sQ,GAELC,GAAmB,SAAUxyQ,GAC/B,IAAIyyQ,EAAoBzyQ,EAAOC,SAASyyQ,oBACxC,OACSN,GADLK,EACmBR,GAAsBjyQ,EAAQyyQ,GAE9BH,GAAuBtyQ,EAAQ,YAGpD2yQ,GAAoB,SAAU3yQ,GAChCA,EAAO0Q,UAAU,SAAU,CACzBjP,KAAM,aACNoP,KAAM,SACN8kC,KAAM,GACNi9N,aAAc,WACZtvQ,KAAKqyC,KAAKxuC,IAAIqrQ,GAAiBxyQ,IAC/BsD,KAAKqyC,KAAK8xC,gBAIZorL,GAAa,SAAU7yQ,GACzB2yQ,GAAkB3yQ,IAEhB8yQ,GAAe,CAAEzkQ,SAAUwkQ,IAE3BE,GAAwB,SAAU/yQ,GACpCe,EAAS+N,KAAK,CACZy3M,KAAM,OACNE,OAAQ,SACRE,UAAW,YACXC,cAAe,gBACfM,UAAW,YACXC,YAAa,gBACZ,SAAU1hN,EAAM2B,GACjBpH,EAAO0Q,UAAUtJ,EAAM,CACrB20D,QAAQ,EACRznD,QAAS7O,EACT8O,aAAc06P,GAAuBjvQ,EAAQoH,GAC7CqR,QAASgkL,GAAaz8L,EAAQoH,SAIhC4rQ,GAAyB,SAAUhzQ,GACrCe,EAAS+N,KAAK,CACZmkQ,QAAS,CACP,kBACA,WAEFrxP,OAAQ,CACN,kBACA,UAEFovD,IAAK,CACH,MACA,OAEF7sD,KAAM,CACJ,OACA,QAEFigD,MAAO,CACL,QACA,SAEF2pL,KAAM,CACJ,OACA,WAEFmlB,UAAW,CACT,aACA,aAEFC,UAAW,CACT,cACA,sBAEFC,YAAa,CACX,eACA,kBAEFhsD,aAAc,CACZ,mBACA,gBAEF/xM,OAAQ,CACN,SACA,YAED,SAAUwgC,EAAMzuC,GACjBpH,EAAO0Q,UAAUtJ,EAAM,CACrBkN,QAASuhC,EAAK,GACdllC,IAAKklC,EAAK,SAIZw9N,GAA+B,SAAUrzQ,GAC3Ce,EAAS+N,KAAK,CACZm4M,WAAY,CACV,aACA,iBAEFC,UAAW,CACT,YACA,aAEFC,YAAa,CACX,cACA,iBAED,SAAUtxK,EAAMzuC,GACjBpH,EAAO0Q,UAAUtJ,EAAM,CACrB20D,QAAQ,EACRznD,QAASuhC,EAAK,GACdllC,IAAKklC,EAAK,GACVthC,aAAc06P,GAAuBjvQ,EAAQoH,SAI/CksQ,GAAoB,SAAUtzQ,GAChC+yQ,GAAsB/yQ,GACtBgzQ,GAAuBhzQ,GACvBqzQ,GAA6BrzQ,IAE3BuzQ,GAAsB,SAAUvzQ,GAClCe,EAAS+N,KAAK,CACZy3M,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,gBAEFgsD,YAAa,CACX,eACA,kBAEFpiM,IAAK,CACH,MACA,MACA,UAEF7sD,KAAM,CACJ,OACA,OACA,UAEFigD,MAAO,CACL,QACA,QACA,UAEF8uM,UAAW,CACT,aACA,YACA,YAED,SAAUr9N,EAAMzuC,GACjBpH,EAAO4Q,YAAYxJ,EAAM,CACvB3B,KAAMowC,EAAK,GACXhlC,KAAMzJ,EACNmV,SAAUs5B,EAAK,GACfllC,IAAKklC,EAAK,QAGd71C,EAAO4Q,YAAY,aAAc,CAC/BnL,KAAM,OACNoL,KAAM,OACN4H,QAASgkL,GAAaz8L,EAAQ,WAG9BwzQ,GAAa,SAAUxzQ,GACzBszQ,GAAkBtzQ,GAClBuzQ,GAAoBvzQ,IAElByzQ,GAAiB,CAAEplQ,SAAUmlQ,IAE7BE,GAAsB,SAAU1zQ,EAAQyB,GAC1C,OAAO,WACL,IAAIP,EAAOoC,KACPqwQ,EAAa,WACf,IAAIC,EAAkB,SAATnyQ,EAAkB,UAAY,UAC3C,QAAOzB,EAAOgM,aAAchM,EAAOgM,YAAY4nQ,MAEjD1yQ,EAAK8S,UAAU2/P,KACf3zQ,EAAO4O,GAAG,sDAAsD,WAC9D1N,EAAK8S,SAAShU,EAAOiU,WAAa0/P,UAIpCE,GAAsB,SAAU7zQ,GAClCA,EAAO4Q,YAAY,OAAQ,CACzBnL,KAAM,OACNoL,KAAM,OACN0L,SAAU,SACVhI,aAAcm/P,GAAoB1zQ,EAAQ,QAC1C2Q,IAAK,SAEP3Q,EAAO4Q,YAAY,OAAQ,CACzBnL,KAAM,OACNoL,KAAM,OACN0L,SAAU,SACVhI,aAAcm/P,GAAoB1zQ,EAAQ,QAC1C2Q,IAAK,UAGLmjQ,GAAoB,SAAU9zQ,GAChCA,EAAO0Q,UAAU,OAAQ,CACvB4D,QAAS,OACTC,aAAcm/P,GAAoB1zQ,EAAQ,QAC1C2Q,IAAK,SAEP3Q,EAAO0Q,UAAU,OAAQ,CACvB4D,QAAS,OACTC,aAAcm/P,GAAoB1zQ,EAAQ,QAC1C2Q,IAAK,UAGLojQ,GAAa,SAAU/zQ,GACzB6zQ,GAAoB7zQ,GACpB8zQ,GAAkB9zQ,IAEhBg0Q,GAAW,CAAE3lQ,SAAU0lQ,IAEvBE,GAAuB,SAAUj0Q,GACnC,OAAO,WACL,IAAIkB,EAAOoC,KACXtD,EAAO4O,GAAG,aAAa,SAAUR,GAC/BlN,EAAK66D,OAAO3tD,EAAE0uL,cAEhB57L,EAAK66D,OAAO/7D,EAAO88L,aAGnBo3E,GAAsB,SAAUl0Q,GAClCA,EAAO4Q,YAAY,YAAa,CAC9BnL,KAAM,cACNwtE,YAAY,EACZ1+D,aAAc0/P,GAAqBj0Q,GACnC2Q,IAAK,wBAGLwjQ,GAAa,SAAUn0Q,GACzBk0Q,GAAoBl0Q,IAElBo0Q,GAAY,CAAE/lQ,SAAU8lQ,IAExBE,GAAmB,WACrB7T,GAAOC,UAAYvgO,GAAS4vC,IAC5BupL,GAAUjmP,UAAY,SAAU3N,GAC9B,OAAO3F,EAASsT,UAAU3N,KAG1B6uQ,GAAmB,SAAUt0Q,GAC3BA,EAAOC,SAASm0C,eAClBlU,GAAS7Z,UAAY4xE,GAAW1wC,GAAQN,QAAQhoD,EAAW4E,SAAS8J,MAAO3N,EAAOC,SAASm0C,cAAcx6B,KAAK7O,EAAS,OAAO,SAAU9C,GACtI,OAAOA,EAAIiE,WAIbqoQ,GAAe,SAAUv0Q,GACvBA,EAAO0nC,MACT2xN,GAAU3xN,KAAM,IAGhB8sO,GAAuB,SAAUx0Q,GACnCA,EAAO4O,GAAG,2BAA2B,WACnCqwP,GAAWtvH,cAGXj0E,GAAU,SAAU17D,GACtBu0Q,GAAav0Q,GACbw0Q,GAAqBx0Q,GACrBs0Q,GAAiBt0Q,GACjBq0Q,KACArC,GAAa3jQ,SAASrO,GACtBuvQ,GAAMlhQ,SAASrO,GACfyzQ,GAAeplQ,SAASrO,GACxBg0Q,GAAS3lQ,SAASrO,GAClB4wQ,GAAeviQ,SAASrO,GACxBmwQ,GAAW9hQ,SAASrO,GACpByxQ,GAAQpjQ,SAASrO,GACjBo0Q,GAAU/lQ,SAASrO,GACnB8yQ,GAAazkQ,SAASrO,IAEpBy0Q,GAAiB,CAAE9lQ,MAAO+sD,IAE1Bg5M,GAAatQ,GAAe7hQ,OAAO,CACrCo5P,OAAQ,SAAUt1O,GAChB,IAAIpmB,EAAUoW,EAAMD,EAAMyG,EAAOuwP,EAAgBr/O,EAAOC,EAAQwT,EAAMksO,EAAgB55P,EAAMyC,EAAGC,EAAGm+P,EAAMC,EAAMjH,EAAcL,EAAgB5/P,EAAOmnQ,EAAUC,EAAUjoJ,EAAQkoJ,EAAQr4I,EAAMo4E,EAGzLkgE,EAAcC,EAAeC,EAAgBC,EAAiBC,EAAarmQ,EAF3EsmQ,EAAY,GACZC,EAAa,GAEjBr1Q,EAAWomB,EAAUpmB,SACrB4c,EAAQwJ,EAAUxJ,QAAQhO,OAAO,YACjCu+P,EAAiB/mP,EAAU2rO,aAC3B57O,EAAOnW,EAASu9C,SAAWl9C,KAAK2yB,KAAK3yB,KAAKo5B,KAAK7c,EAAM5Z,SACrDoT,EAAO/V,KAAK2yB,KAAKpW,EAAM5Z,OAASmT,GAChCy+P,EAAW50Q,EAAS40Q,UAAY50Q,EAASme,SAAW,EACpD02P,EAAW70Q,EAAS60Q,UAAY70Q,EAASme,SAAW,EACpDyuG,EAAS5sH,EAAS4sH,QAAU5sH,EAASyN,MACrCqnQ,EAAS90Q,EAAS80Q,QAAU90Q,EAASyN,MACrC4/P,EAAiBjnP,EAAUqvO,WAC3B0f,EAAc,gBAAiBn1Q,EAAWA,EAASm1Q,YAAc/uP,EAAUqrF,QACvEmb,GAA4B,kBAAXA,IACnBA,EAAS,CAACA,IAERkoJ,GAA4B,kBAAXA,IACnBA,EAAS,CAACA,IAEZ,IAAKx+P,EAAI,EAAGA,EAAIH,EAAMG,IACpB8+P,EAAUxuQ,KAAK,GAEjB,IAAK2P,EAAI,EAAGA,EAAIH,EAAMG,IACpB8+P,EAAWzuQ,KAAK,GAElB,IAAK2P,EAAI,EAAGA,EAAIH,EAAMG,IACpB,IAAKD,EAAI,EAAGA,EAAIH,EAAMG,IAAK,CAEzB,GADAzC,EAAO+I,EAAMrG,EAAIJ,EAAOG,IACnBzC,EACH,MAEF45P,EAAiB55P,EAAKk+O,aACtBgjB,EAAetH,EAAe/W,KAC9Bse,EAAgBvH,EAAe9W,KAC/Bye,EAAU9+P,GAAKy+P,EAAeK,EAAU9+P,GAAKy+P,EAAeK,EAAU9+P,GACtE++P,EAAW9+P,GAAKy+P,EAAgBK,EAAW9+P,GAAKy+P,EAAgBK,EAAW9+P,GAI/E,IADA0+P,EAAiB9H,EAAe3W,OAAS6W,EAAenqO,KAAOmqO,EAAe5pK,MACzEg5B,EAAO,EAAGnmH,EAAI,EAAGA,EAAIH,EAAMG,IAC9BmmH,GAAQ24I,EAAU9+P,IAAMA,EAAI,EAAIs+P,EAAW,GAC3CK,IAAmB3+P,EAAI,EAAIs+P,EAAW,GAAKQ,EAAU9+P,GAGvD,IADA4+P,EAAkB/H,EAAe1W,OAAS4W,EAAelqO,IAAMkqO,EAAex1N,OACzEg9J,EAAO,EAAGt+L,EAAI,EAAGA,EAAIH,EAAMG,IAC9Bs+L,GAAQwgE,EAAW9+P,IAAMA,EAAI,EAAIs+P,EAAW,GAC5CK,IAAoB3+P,EAAI,EAAIs+P,EAAW,GAAKQ,EAAW9+P,GAazD,GAXAkmH,GAAQ4wI,EAAenqO,KAAOmqO,EAAe5pK,MAC7CoxG,GAAQw4D,EAAelqO,IAAMkqO,EAAex1N,OAC5CtW,EAAO,GACPA,EAAKm1N,KAAOj6H,GAAQ0wI,EAAe1sQ,EAAI0sQ,EAAe3W,QACtDj1N,EAAKo1N,KAAO9hD,GAAQs4D,EAAe56P,EAAI46P,EAAe1W,QACtDl1N,EAAK+0N,SAAW/0N,EAAKm1N,KAAOyW,EAAe3rO,OAC3CD,EAAKg1N,SAAWh1N,EAAKo1N,KAAOwW,EAAe1rO,OAC3CF,EAAKm1N,KAAOr2P,KAAKC,IAAIihC,EAAKm1N,KAAMyW,EAAehX,MAC/C50N,EAAKo1N,KAAOt2P,KAAKC,IAAIihC,EAAKo1N,KAAMwW,EAAe/W,MAC/C70N,EAAKm1N,KAAOr2P,KAAK8oB,IAAIoY,EAAKm1N,KAAMyW,EAAenX,eAC/Cz0N,EAAKo1N,KAAOt2P,KAAK8oB,IAAIoY,EAAKo1N,KAAMwW,EAAelX,iBAC3CkX,EAAepX,YAAex0N,EAAKm1N,OAASyW,EAAezW,MAAQn1N,EAAKo1N,OAASwW,EAAexW,KAApG,CAmBA,IAAI2e,EALAnI,EAAepX,aACjBx0N,EAAOnb,EAAU2rO,WAAWxwN,GAC5BA,EAAK+0N,SAAW/0N,EAAKm1N,KAAOyW,EAAe3rO,OAC3CD,EAAKg1N,SAAWh1N,EAAKo1N,KAAOwW,EAAe1rO,QAI3C6zO,EADqB,UAAnBt1Q,EAASs9C,MACH,EAEA43N,EAAkB,EAAI70Q,KAAK61B,MAAMg/O,EAAkB9+P,GAAQ,EAErE,IAAIm3P,EAAY,EACZgI,EAAav1Q,EAASu1Q,WAC1B,GAAIA,EACF,IAAKj/P,EAAI,EAAGA,EAAIi/P,EAAWvyQ,OAAQsT,IACjCi3P,GAAagI,EAAWj/P,QAG1Bi3P,EAAYp3P,EAEd,IAAIurG,EAAQuzJ,EAAiB1H,EAC7B,IAAKj3P,EAAI,EAAGA,EAAIH,EAAMG,IACpB8+P,EAAU9+P,IAAMi/P,EAAaA,EAAWj/P,GAAKorG,EAAQA,EAGvD,IADAizJ,EAAOtH,EAAelqO,IACjB5sB,EAAI,EAAGA,EAAIH,EAAMG,IAAK,CAGzB,IAFAm+P,EAAOrH,EAAenqO,KACtBnV,EAASsnP,EAAW9+P,GAAK++P,EACpBh/P,EAAI,EAAGA,EAAIH,EAAMG,IAAK,CAOzB,GALExH,EADEqmQ,EACI5+P,EAAIJ,EAAOA,EAAO,EAAIG,EAEtBC,EAAIJ,EAAOG,EAEnBzC,EAAO+I,EAAM9N,IACR+E,EACH,MAEF65P,EAAe75P,EAAK7T,SACpBytQ,EAAiB55P,EAAKk+O,aACtBjkO,EAAQztB,KAAK8oB,IAAIisP,EAAU9+P,GAAIm3P,EAAezX,eAC9CyX,EAAen3P,EAAIo+P,EACnBjH,EAAel3P,EAAIo+P,EACnBlnQ,EAAQigQ,EAAa9gJ,SAAWA,EAASA,EAAOt2G,IAAMs2G,EAAO,GAAK,MACpD,WAAVn/G,EACFggQ,EAAen3P,EAAIo+P,EAAO5mP,EAAQ,EAAI2/O,EAAehtQ,EAAI,EACtC,UAAVgN,EACTggQ,EAAen3P,EAAIo+P,EAAO5mP,EAAQ2/O,EAAehtQ,EAC9B,YAAVgN,IACTggQ,EAAehtQ,EAAIqtB,GAErBrgB,EAAQigQ,EAAaoH,SAAWA,EAASA,EAAOx+P,IAAMw+P,EAAO,GAAK,MACpD,WAAVrnQ,EACFggQ,EAAel3P,EAAIo+P,EAAO5mP,EAAS,EAAI0/O,EAAel7P,EAAI,EACvC,WAAV9E,EACTggQ,EAAel3P,EAAIo+P,EAAO5mP,EAAS0/O,EAAel7P,EAC/B,YAAV9E,IACTggQ,EAAel7P,EAAIwb,GAErBla,EAAKk+O,WAAW0b,GAChBiH,GAAQ5mP,EAAQ8mP,EACZ/gQ,EAAK6nP,QACP7nP,EAAK6nP,SAGTiZ,GAAQ5mP,EAAS8mP,QA1EjB,GAJAtzO,EAAK9gC,EAAI8gC,EAAKm1N,KACdn1N,EAAKhvB,EAAIgvB,EAAKo1N,KACdvwO,EAAU2rO,WAAWxwN,GACrBl+B,KAAKq4P,OAAOt1O,GACgB,OAAxBA,EAAUoxO,UAAoB,CAChC,IAAIY,EAAahyO,EAAUniB,SACvBm0P,IACFA,EAAWZ,UAAY,KACvBY,EAAWsD,cA2EjB8Z,GAAWjV,GAAOj+P,OAAO,CAC3By1P,WAAY,WACV,IAAI92P,EAAOoC,KAGX,OAFApC,EAAKsG,QAAQL,IAAI,UACjBjG,EAAK44P,UAAW,EACT,eAAiB54P,EAAKsnE,IAAM,YAActnE,EAAKsG,QAAU,yBAA2BtG,EAAKjB,SAASsJ,KAAO,iBAAqB,+BAEvI+jB,IAAK,SAAUA,GACbhqB,KAAK0U,QAAQsV,IAAMA,GAErBrkB,KAAM,SAAUA,EAAM1F,GACpB,IAAIrC,EAAOoC,KAAMqK,EAAOrK,KAAK0U,QAAQwV,cAAc3pB,SAAS8J,KAW5D,OAVKA,GAKHA,EAAKxI,UAAY8D,EACb1F,GACFA,KANFw8B,EAASrQ,YAAW,WAClBxuB,EAAK+H,KAAKA,MAQP3F,QAIPoyQ,GAAUlV,GAAOj+P,OAAO,CAC1BwvF,KAAM,SAAU9xF,GACd,IAAIiB,EAAOoC,KACXpC,EAAK6jC,OAAO9kC,GACZiB,EAAKsG,QAAQL,IAAI,UAAUA,IAAI,WAC/BjG,EAAK44P,UAAW,GAElB6b,SAAU,SAAUljQ,GAClBnP,KAAKkE,QAAQ6N,OAAO,SACpB/R,KAAKkE,QAAQ6N,OAAO,WACpB/R,KAAKkE,QAAQ6N,OAAO,WACpB/R,KAAKkE,QAAQL,IAAIsL,IAEnBs7O,KAAM,SAAUtuN,GACdn8B,KAAKm8B,MAAMngC,IAAI,OAAQmgC,IAEzBu4N,WAAY,WACV,IAAI92P,EAAOoC,KAAMmO,EAASvQ,EAAKg0P,YAC/B,MAAO,YAAch0P,EAAKsnE,IAAM,YAActnE,EAAKsG,QAA5C,cAA2EtG,EAAKsnE,IAAM,UAAYtnE,EAAKI,OAAOJ,EAAKu+B,MAAMpgC,IAAI,SAA7H,iDAAgMoS,EAAS,OAASA,EAAlN,qCAET+zB,WAAY,WACV,IAAItkC,EAAOoC,KAaX,OAZApC,EAAKu+B,MAAM7wB,GAAG,eAAe,SAAUR,GACrClN,EAAK8W,MAAM,QAAQE,WAAWhT,KAAOhE,EAAKI,OAAO8M,EAAEhP,OAC/C8B,EAAKu+B,MAAMpgC,IAAI,aACjB6B,EAAKs2P,sBAGTt2P,EAAKu+B,MAAM7wB,GAAG,eAAe,SAAUR,GACrClN,EAAKsG,QAAQiH,OAAO,WAAYL,EAAEhP,OAC9B8B,EAAKu+B,MAAMpgC,IAAI,aACjB6B,EAAKs2P,sBAGFt2P,EAAK6jC,YAIZ6wO,GAAQpV,GAAOj+P,OAAO,CACxBwvF,KAAM,SAAU9xF,GACd,IAAIiB,EAAOoC,KACXpC,EAAK6jC,OAAO9kC,GACZiB,EAAKsG,QAAQL,IAAI,UAAUA,IAAI,SAC/BjG,EAAK44P,UAAW,EACZ75P,EAAS8N,WACX7M,EAAKsG,QAAQL,IAAI,cAEflH,EAAS41Q,QACX30Q,EAAKsG,QAAQL,IAAI,WAGrB4uP,eAAgB,WACd,IAAI70P,EAAOoC,KAAM0uP,EAAa9wP,EAAK6jC,SACnC,GAAI7jC,EAAKjB,SAAS8N,UAAW,CAC3B,IAAIqU,EAAO+uO,GAAMx2M,QAAQz5C,EAAK8W,SAC1BoK,EAAK2L,MAAQikO,EAAWoE,OAC1BpE,EAAW2E,KAAO3E,EAAWoE,KAC7Bl1P,EAAKsG,QAAQL,IAAI,cAEnBjG,EAAK8W,QAAQnO,MAAMkkB,MAAQikO,EAAW2E,KAAO,KAC7C3E,EAAW8jB,UAAY9jB,EAAWx/O,EAAIw/O,EAAW4E,KAAOt2P,KAAKC,IAAIyxP,EAAWqE,KAAMlF,GAAMx2M,QAAQz5C,EAAK8W,SAASgW,QAEhH,OAAOgkO,GAET7vN,QAAS,WACP,IAAIjhC,EAAOoC,KAIX,OAHKpC,EAAKjB,SAAS8N,YACjB7M,EAAK8W,QAAQnO,MAAM27P,WAAatkQ,EAAK8wP,aAAax/O,EAAI,MAEjDtR,EAAK6jC,UAEd4wO,SAAU,SAAUljQ,GAClBnP,KAAKkE,QAAQ6N,OAAO,SACpB/R,KAAKkE,QAAQ6N,OAAO,WACpB/R,KAAKkE,QAAQ6N,OAAO,WACpB/R,KAAKkE,QAAQL,IAAIsL,IAEnBulP,WAAY,WACV,IACI+d,EAAYC,EADZ90Q,EAAOoC,KACcqqF,EAAQzsF,EAAKjB,SAAS0tF,MAC3CloF,EAAOvE,EAAKjB,SAASgJ,KAAO/H,EAAKjB,SAASgJ,KAAO/H,EAAKI,OAAOJ,EAAKu+B,MAAMpgC,IAAI,SAOhF,OANKsuF,IAAUqoL,EAAU90Q,EAAKjB,SAAS+1Q,WACrCD,EAAa70Q,EAAKogD,UAAU/xC,KAAK,IAAMymQ,GAAS,GAC5CD,IACFpoL,EAAQooL,EAAWvtM,MAGnBmlB,EACK,cAAgBzsF,EAAKsnE,IAAM,YAActnE,EAAKsG,QAAU,KAAOmmF,EAAQ,SAAWA,EAAQ,IAAM,IAAM,IAAMloF,EAAO,WAErH,aAAevE,EAAKsnE,IAAM,YAActnE,EAAKsG,QAAU,KAAO/B,EAAO,WAE9E+/B,WAAY,WACV,IAAItkC,EAAOoC,KAOX,OANApC,EAAKu+B,MAAM7wB,GAAG,eAAe,SAAUR,GACrClN,EAAK0tF,UAAU1tF,EAAKI,OAAO8M,EAAEhP,QACzB8B,EAAKu+B,MAAMpgC,IAAI,aACjB6B,EAAKs2P,sBAGFt2P,EAAK6jC,YAIZkxO,GAAYnb,GAAUv4P,OAAO,CAC/BwhC,SAAU,CACRxrB,KAAM,UACN/K,OAAQ,QAEVukF,KAAM,SAAU9xF,GACd,IAAIiB,EAAOoC,KACXpC,EAAK6jC,OAAO9kC,GACZiB,EAAKsG,QAAQL,IAAI,YAEnB29B,WAAY,WACV,IAAI5jC,EAAOoC,KAIX,OAHApC,EAAK2b,QAAQ/N,MAAK,SAAUgF,GAC1BA,EAAKtM,QAAQL,IAAI,mBAEZjG,EAAK6jC,YAIZmxO,GAAUD,GAAU1zQ,OAAO,CAC7BwhC,SAAU,CACRxrB,KAAM,UACN0iP,aAAc,UACdlP,UAAU,EACV5pO,SAAU,CAAE1gB,KAAM,iBAItB,SAAS00Q,GAAYvqQ,EAAM1H,GACzB,MAAO0H,EAAM,CACX,GAAI1H,IAAW0H,EACb,OAAO,EAETA,EAAOA,EAAKvH,WAEd,OAAO,EAET,IAAI+xQ,GAAa/R,GAAO9hQ,OAAO,CAC7BwvF,KAAM,SAAU9xF,GACd,IAAIiB,EAAOoC,KACXpC,EAAKm1Q,aAAc,EACnBn1Q,EAAK6jC,OAAO9kC,GACZA,EAAWiB,EAAKjB,SAChBiB,EAAKsG,QAAQL,IAAI,WACblH,EAASiwQ,YACXhvQ,EAAKsG,QAAQL,IAAI,eAEnBjG,EAAKwuI,KAAK,YAAY,GACtBxuI,EAAKu+B,MAAMngC,IAAI,OAAQW,EAAS01C,MAAQz0C,EAAKqqB,WAE/C85O,SAAU,SAAU52P,GAClB,IACIknC,EADAz0C,EAAOoC,KAEX,GAAIpC,EAAKy0C,MAAQz0C,EAAKy0C,KAAKk6M,YAAwB,IAAXphP,EACtC,OAAOvN,EAAKilQ,WAETjlQ,EAAKy0C,OACRA,EAAOz0C,EAAKu+B,MAAMpgC,IAAI,SAAW,GACjC6B,EAAKsG,QAAQL,IAAI,UACbwuC,EAAK1yC,OACP0yC,EAAO,CACLl0C,KAAM,OACN60Q,SAAS,EACTz5P,MAAO84B,IAGTA,EAAKl0C,KAAOk0C,EAAKl0C,MAAQ,OACzBk0C,EAAK2gO,SAAU,GAEZ3gO,EAAKK,SAGR90C,EAAKy0C,KAAOA,EAAKzxC,OAAOhD,GAAM8hC,OAAOgT,WAFrC90C,EAAKy0C,KAAO12B,EAAS9O,OAAOwlC,GAAMzxC,OAAOhD,GAAM80C,WAIjD90C,EAAKygC,KAAK,cACVzgC,EAAKy0C,KAAK+3M,SACVxsP,EAAKy0C,KAAK/mC,GAAG,UAAU,SAAUR,GAC3BA,EAAE2F,QAAQ7P,WAAahD,EAAKy0C,OAC9BvnC,EAAEk0B,kBACFphC,EAAKgU,QACLhU,EAAKilQ,eAGTjlQ,EAAKy0C,KAAK/mC,GAAG,UAAU,WACrB1N,EAAKgU,WAEPhU,EAAKy0C,KAAK/mC,GAAG,aAAa,SAAUR,GACnB,SAAXA,EAAE3M,MAAmB2M,EAAE2F,QAAQ7P,WAAahD,GAC9CA,EAAKsG,QAAQ6N,OAAO,gBAElBjH,EAAE2F,UAAY7S,EAAKy0C,OACrBz0C,EAAKq1Q,WAAsB,SAAXnoQ,EAAE3M,MAClBP,EAAKsG,QAAQiH,OAAO,SAAqB,SAAXL,EAAE3M,OAElCP,EAAKwuI,KAAK,WAAuB,SAAXthI,EAAE3M,SACvBkgC,KAAK,SAEVzgC,EAAKy0C,KAAK3S,OACV9hC,EAAKy0C,KAAKq8M,WAAW,CAAEtxP,EAAGQ,EAAK8wP,aAAatxP,IAC5CQ,EAAKy0C,KAAKxT,UACVjhC,EAAKy0C,KAAK40I,QAAQrpL,EAAK8W,QAAS9W,EAAKwwG,QAAU,CAC7C,QACA,SACE,CACF,QACA,UAEF,IAAI8kK,EAAiBt1Q,EAAKy0C,KAAKq8M,aAC3BykB,EAAav1Q,EAAKqjC,IAAI5e,SAASyd,IAAMliC,EAAK8wP,aAAax/O,EACvDikQ,EAAaD,EAAehgQ,GAAKigQ,EAAaD,EAAehgQ,EAAIggQ,EAAehkQ,GAClFtR,EAAKsG,QAAQL,IAAI,gBAEnBjG,EAAKygC,KAAK,aAEZwkO,SAAU,WACR,IAAIjlQ,EAAOoC,KACPpC,EAAKy0C,OACPz0C,EAAKy0C,KAAK94B,QAAQ/N,MAAK,SAAU+mC,GAC3BA,EAAKswN,UACPtwN,EAAKswN,cAGTjlQ,EAAKy0C,KAAK1S,SAGdszO,WAAY,SAAU92O,GACpBn8B,KAAKkE,QAAQiH,OAAO,SAAUgxB,IAEhCu4N,WAAY,WACV,IAC+BrpO,EAD3BztB,EAAOoC,KAAMd,EAAKtB,EAAKsnE,IAAK/2D,EAASvQ,EAAKg0P,YAC1CrkP,EAAO3P,EAAKjB,SAAS4Q,KACrBpL,EAAOvE,EAAKu+B,MAAMpgC,IAAI,QACtBolQ,EAAW,GAiBf,OAhBA91O,EAAQztB,EAAKjB,SAAS0uB,MAClBA,GACF9d,EAAO,OACc,kBAAV8d,IACTA,EAAQ1vB,EAAW6B,OAAOi+H,aAAepwG,EAAM,GAAKA,EAAM,IAE5DA,EAAQ,mCAAqCA,EAAQ,QAErDA,EAAQ,GAENlpB,IACFvE,EAAKsG,QAAQL,IAAI,gBACjBs9P,EAAW,gBAAkBhzP,EAAS,QAAUvQ,EAAKI,OAAOmE,GAAQ,WAEtEoL,EAAO3P,EAAKjB,SAAS4Q,KAAOY,EAAS,OAASA,EAAS,KAAOZ,EAAO,GACrE3P,EAAKwuI,KAAK,OAAQxuI,EAAKgD,mBAAoBgyQ,GAAU,WAAa,UAC3D,YAAc1zQ,EAAK,YAActB,EAAKsG,QAAU,oCAAsChF,EAAtF,iBAAmHA,EAAK,2DAA6DqO,EAAO,aAAeA,EAAO,IAAM8d,EAAQ,QAAU,IAAM81O,EAAW,cAAgBhzP,EAA3Q,8BAETqzB,WAAY,WACV,IAAI5jC,EAAOoC,KA6BX,OA5BApC,EAAK0N,GAAG,SAAS,SAAUR,GACrBA,EAAE2F,UAAY7S,GAAQi1Q,GAAY/nQ,EAAE6C,OAAQ/P,EAAK8W,WACnD9W,EAAKgU,QACLhU,EAAKmkQ,UAAUj3P,EAAEshI,MACbthI,EAAEshI,MACJxuI,EAAKy0C,KAAK94B,QAAQhO,OAAO,YAAY,GAAGqG,YAI9ChU,EAAK0N,GAAG,cAAc,SAAUR,GAC9B,IAEIsoQ,EAFAC,EAAWvoQ,EAAE2F,QACb7P,EAAShD,EAAKgD,SAEdyyQ,GAAYzyQ,GAAUyyQ,aAAoBP,IAAcO,EAASzyQ,WAAaA,IAChFA,EAAO2Y,QAAQhO,OAAO,cAAcC,MAAK,SAAUgF,GAC7CA,EAAKqyP,UAAYryP,IAAS6iQ,IACxB7iQ,EAAK6hC,MAAQ7hC,EAAK6hC,KAAKk6M,YACzB6mB,GAAwB,GAE1B5iQ,EAAKqyP,eAGLuQ,IACFC,EAASzhQ,QACTyhQ,EAAStR,gBAIRnkQ,EAAK6jC,UAEdS,WAAY,WACV,IAAItkC,EAAOoC,KAOX,OANApC,EAAKu+B,MAAM7wB,GAAG,eAAe,WACvB1N,EAAKy0C,MACPz0C,EAAKy0C,KAAKtgC,SAEZnU,EAAKy0C,KAAO,QAEPz0C,EAAK6jC,UAEd1vB,OAAQ,WACN/R,KAAKyhC,SACDzhC,KAAKqyC,MACPryC,KAAKqyC,KAAKtgC,YAKZuhQ,GAAO3X,GAAW18P,OAAO,CAC3BwhC,SAAU,CACRw3N,YAAa,WACb7xN,OAAQ,EACRl8B,OAAQ,QACR+K,KAAM,cACNunP,SAAU,OACV/T,UAAU,GAEZh6J,KAAM,SAAU9xF,GACd,IAAIiB,EAAOoC,KAOX,GANArD,EAASyzE,UAAW,EACpBzzE,EAASiyP,qBAAsB,EACD,oBAAnBjyP,EAAS4c,QAClB5c,EAAS42Q,aAAe52Q,EAAS4c,MACjC5c,EAAS4c,MAAQ,IAEf5c,EAASsnF,aAAc,CACzB,IAAI1qE,EAAQ5c,EAAS4c,MACjBrZ,EAAIqZ,EAAM5Z,OACd,MAAOO,IACLqZ,EAAMrZ,GAAKzC,EAASwB,OAAO,GAAItC,EAASsnF,aAAc1qE,EAAMrZ,IAGhEtC,EAAK6jC,OAAO9kC,GACZiB,EAAKsG,QAAQL,IAAI,QACblH,EAASq2Q,SAA2B,KAAhBp2O,GAASvS,IAC/BzsB,EAAKsG,QAAQL,IAAI,YAGrBg7B,QAAS,WAKP,OAJA7+B,KAAKkE,QAAQiH,OAAO,cAAc,GAClCnL,KAAKyhC,SACLzhC,KAAK0U,QAAQnO,MAAMmkB,OAAS,GAC5B1qB,KAAK0U,MAAM,QAAQnO,MAAMmkB,OAAS,GAC3B1qB,MAETulC,OAAQ,WACN,IAAI3nC,EAAOoC,KACXpC,EAAKyuI,UACLzuI,EAAKygC,KAAK,WAEZuvD,KAAM,WACJ,IACIwhD,EAAMokI,EADN51Q,EAAOoC,KAEX,SAASyzQ,IACH71Q,EAAKw/C,WACPx/C,EAAKw/C,SAASzd,OACd/hC,EAAKw/C,SAAW,MAGpBo2N,EAAU51Q,EAAKjB,SAAS42Q,aACnBC,IAGA51Q,EAAKw/C,WACRx/C,EAAKw/C,SAAW,IAAID,GAASv/C,EAAK8W,MAAM,SAAS,GACrB,IAAxB9W,EAAK2b,QAAQ5Z,QACf/B,EAAKw/C,SAAS1d,OACd9hC,EAAKygC,KAAK,YAEVzgC,EAAKw/C,SAAS1d,KAAK,KAAK,WACtB9hC,EAAK2b,QAAQxH,SACbnU,EAAKygC,KAAK,cAGdzgC,EAAK0N,GAAG,aAAcmoQ,IAExB71Q,EAAK81Q,YAActkI,GAAO,IAAI9gI,MAAOC,UACrC3Q,EAAKjB,SAAS42Q,cAAa,SAAUh6P,GACd,IAAjBA,EAAM5Z,OAIN/B,EAAK81Q,cAAgBtkI,IAGzBxxI,EAAK8W,QAAQnO,MAAMkkB,MAAQ,GAC3B7sB,EAAK8W,MAAM,QAAQnO,MAAMkkB,MAAQ,GACjCgpP,IACA71Q,EAAK2b,QAAQxH,SACbnU,EAAK8W,MAAM,QAAQ7S,UAAY,GAC/BjE,EAAKiG,IAAI0V,GACT3b,EAAKumF,YACLvmF,EAAKygC,KAAK,WAbRzgC,EAAK+hC,YAgBX0sG,QAAS,WACP,IAAIzuI,EAAOoC,KAEX,OADAA,KAAKiM,KAAK,YAAYlJ,KAAK,YACpBnF,EAAK6jC,UAEdkzN,UAAW,WACT,IAAI/2P,EAAOoC,KA0BX,OAzBApC,EAAK2b,QAAQ/N,MAAK,SAAUgF,GAC1B,IAAI7T,EAAW6T,EAAK7T,SACpB,GAAIA,EAAS4Q,MAAQ5Q,EAAS0uB,OAAS1uB,EAASgzE,WAE9C,OADA/xE,EAAK+1Q,WAAY,GACV,KAGP/1Q,EAAKjB,SAAS42Q,cAChB31Q,EAAK0N,GAAG,cAAc,WAChB1N,EAAKjB,SAAS42Q,cAChB31Q,EAAKgwF,UAIXhwF,EAAK0N,GAAG,aAAa,SAAUR,GACzBA,EAAE2F,UAAY7S,IACD,SAAXkN,EAAE3M,KACJs+B,EAASrQ,YAAW,WAClBxuB,EAAKsG,QAAQL,IAAI,QAChB,GAEHjG,EAAKsG,QAAQ6N,OAAO,UAInBnU,EAAK6jC,YAIZmyO,GAAUd,GAAW7zQ,OAAO,CAC9BwvF,KAAM,SAAU9xF,GACd,IACI6N,EAAQ0lC,EAAU+0M,EAAc4uB,EADhCj2Q,EAAOoC,KAEX,SAASunL,EAAYusF,GACnB,IAAK,IAAI5zQ,EAAI,EAAGA,EAAI4zQ,EAAWn0Q,OAAQO,IAAK,CAE1C,GADAgwC,EAAW4jO,EAAW5zQ,GAAGgwC,UAAYvzC,EAASb,QAAUg4Q,EAAW5zQ,GAAGpE,MAClEo0C,EAGF,OAFA+0M,EAAeA,GAAgB6uB,EAAW5zQ,GAAGiC,KAC7CvE,EAAKu+B,MAAMngC,IAAI,QAAS83Q,EAAW5zQ,GAAGpE,QAC/B,EAET,GAAIg4Q,EAAW5zQ,GAAGmyC,MACZk1I,EAAYusF,EAAW5zQ,GAAGmyC,MAC5B,OAAO,GAKfz0C,EAAK6jC,OAAO9kC,GACZA,EAAWiB,EAAKjB,SAChBiB,EAAKm2Q,QAAUvpQ,EAAS7N,EAAS6N,OAC7BA,IAC4B,qBAAnB7N,EAASb,OAClByrL,EAAY/8K,IAET0lC,GAAY1lC,EAAO7K,OAAS,IAC/BslP,EAAez6O,EAAO,GAAGrI,KACzBvE,EAAKu+B,MAAMngC,IAAI,QAASwO,EAAO,GAAG1O,QAEpC8B,EAAKu+B,MAAMngC,IAAI,OAAQwO,IAEzB5M,EAAKu+B,MAAMngC,IAAI,OAAQW,EAASwF,MAAQ8iP,GACxCrnP,EAAKsG,QAAQL,IAAI,WACjBjG,EAAK0N,GAAG,UAAU,SAAUR,GAC1B,IAAI0F,EAAO1F,EAAE2F,QACTojQ,IACF/oQ,EAAEozC,YAAc21N,GAEdl3Q,EAASspG,SACXz1F,EAAKioD,QAAQjoD,EAAKioD,UAElB76D,EAAK9B,MAAMgP,EAAE2F,QAAQ3U,SAEvB+3Q,EAAerjQ,MAGnB1U,MAAO,SAAUA,GACf,GAAyB,IAArB4D,UAAUC,OACZ,OAAOK,KAAKm8B,MAAMpgC,IAAI,SAExB,GAAqB,qBAAVD,EACT,OAAOkE,KAET,SAASg0Q,EAAYxpQ,GACnB,OAAO4M,GAAO5M,GAAQ,SAAUmN,GAC9B,OAAOA,EAAE06B,KAAO2hO,EAAYr8P,EAAE06B,MAAQ16B,EAAE7b,QAAUA,KAYtD,OATIkE,KAAKrD,SAAS6N,OACZwpQ,EAAYh0Q,KAAKrD,SAAS6N,QAC5BxK,KAAKm8B,MAAMngC,IAAI,QAASF,GACL,OAAVA,GACTkE,KAAKm8B,MAAMngC,IAAI,QAAS,MAG1BgE,KAAKm8B,MAAMngC,IAAI,QAASF,GAEnBkE,MAETkiC,WAAY,WACV,IAAItkC,EAAOoC,KACX,SAASi0Q,EAAyB5hO,EAAMv2C,GAClCu2C,aAAgBihO,IAClBjhO,EAAK94B,QAAQ/N,MAAK,SAAUgF,GACrBA,EAAK0jQ,YACR1jQ,EAAKioD,OAAOjoD,EAAK1U,UAAYA,MAKrC,SAASq4Q,EAAgBL,EAAYh4Q,GACnC,IAAIs4Q,EACJ,GAAKN,EAGL,IAAK,IAAI5zQ,EAAI,EAAGA,EAAI4zQ,EAAWn0Q,OAAQO,IAAK,CAC1C,GAAI4zQ,EAAW5zQ,GAAGpE,QAAUA,EAC1B,OAAOg4Q,EAAW5zQ,GAEpB,GAAI4zQ,EAAW5zQ,GAAGmyC,OAChB+hO,EAAeD,EAAgBL,EAAW5zQ,GAAGmyC,KAAMv2C,GAC/Cs4Q,GACF,OAAOA,GAgBf,OAXAx2Q,EAAK0N,GAAG,QAAQ,SAAUR,GACxBmpQ,EAAyBnpQ,EAAE2F,QAAS7S,EAAK9B,YAE3C8B,EAAKu+B,MAAM7wB,GAAG,gBAAgB,SAAUR,GACtC,IAAIspQ,EAAeD,EAAgBv2Q,EAAKu+B,MAAMpgC,IAAI,QAAS+O,EAAEhP,OACzDs4Q,EACFx2Q,EAAKuE,KAAKiyQ,EAAajyQ,MAEvBvE,EAAKuE,KAAKvE,EAAKjB,SAASwF,SAGrBvE,EAAK6jC,YAIZ4yO,GAAkB,SAAU7jQ,EAAM2rB,GACpC,IAAIyf,EAAYprC,EAAK8jQ,WACrB,GAAI14N,EAAW,CACb,IAAI24N,EAAU/jQ,EAAKkE,MAAM,QACzB6/P,EAAQ5gQ,aAAa,QAASioC,GAC1Bzf,IACFo4O,EAAQhuQ,MAAM+K,MAAQ,GACtBijQ,EAAQhuQ,MAAM2iH,gBAAkB,MAIlCsrJ,GAAWtX,GAAOj+P,OAAO,CAC3BwhC,SAAU,CACR2F,OAAQ,EACRnxB,KAAM,YAERw5E,KAAM,SAAU9xF,GACd,IACIwF,EADAvE,EAAOoC,KAEXpC,EAAK6jC,OAAO9kC,GACZA,EAAWiB,EAAKjB,SAChBiB,EAAKsG,QAAQL,IAAI,aACblH,EAAS01C,MACXz0C,EAAKsG,QAAQL,IAAI,oBAEflH,EAASgmN,SACX/kN,EAAKsG,QAAQL,IAAI,qBAEnB1B,EAAOvE,EAAKu+B,MAAMpgC,IAAI,QACT,MAAToG,GAAyB,MAATA,IAClBvE,EAAKsG,QAAQL,IAAI,iBACjBjG,EAAKwuI,KAAK,OAAQ,aAClBxuI,EAAKu+B,MAAMngC,IAAI,OAAQ,MAErBW,EAASgzE,aACX/xE,EAAKwuI,KAAK,OAAQ,oBAClBxuI,EAAKsG,QAAQL,IAAI,sBACjBlH,EAAS4Q,KAAO,YAEb5Q,EAASgmN,SAAYhmN,EAASgzE,YACjC/xE,EAAKsG,QAAQL,IAAI,oBAEnBjG,EAAK0N,GAAG,aAAa,SAAUR,GAC7BA,EAAEm0B,oBAEAtiC,EAAS01C,OAAS11C,EAASwvI,cAC7BvuI,EAAKwuI,KAAK,YAAY,IAG1B8nI,SAAU,WACR,QAASl0Q,KAAKrD,SAAS01C,MAEzB0vN,SAAU,WACR,IAEI1vN,EAFAz0C,EAAOoC,KACPrD,EAAWiB,EAAKjB,SAEhBiE,EAAShD,EAAKgD,SAMlB,GALAA,EAAO2Y,QAAQ/N,MAAK,SAAUgF,GACxBA,IAAS5S,GACX4S,EAAKqyP,cAGLlmQ,EAAS01C,KAAM,CACjBA,EAAOz0C,EAAKy0C,KACPA,EAkCHA,EAAK3S,QAjCL2S,EAAO11C,EAAS01C,KACZA,EAAK1yC,OACP0yC,EAAO,CACLl0C,KAAM,OACNob,MAAO84B,GAGTA,EAAKl0C,KAAOk0C,EAAKl0C,MAAQ,OAEvByC,EAAOjE,SAASsnF,eAClB5xC,EAAK4xC,aAAerjF,EAAOjE,SAASsnF,cAEtC5xC,EAAOz0C,EAAKy0C,KAAO12B,EAAS9O,OAAOwlC,GAAMzxC,OAAOhD,GAAM80C,WACtDL,EAAK+3M,SACL/3M,EAAK/mC,GAAG,UAAU,SAAUR,GAC1BA,EAAEk0B,kBACFphC,EAAKgU,QACLygC,EAAK1S,UAEP0S,EAAK/mC,GAAG,aAAa,SAAUR,GACzBA,EAAE2F,QAAQ8I,OACZzO,EAAE2F,QAAQ8I,QAAQ/N,MAAK,SAAUgF,GAC/BA,EAAKioD,OAAOjoD,EAAK7T,SAASuzC,gBAG7B7R,KAAK,QACRgU,EAAK/mC,GAAG,QAAQ,SAAUR,GACpBA,EAAE2F,UAAY4hC,GAChBz0C,EAAKsG,QAAQ6N,OAAO,eAGxBsgC,EAAK8kN,SAAU,GAIjB9kN,EAAKoiO,YAAc7zQ,EACnByxC,EAAKnuC,QAAQL,IAAI,YACjB,IAAIiJ,EAAMulC,EAAKo8M,YAAY7wP,EAAK8W,QAAS9W,EAAKwwG,QAAU,CACtD,QACA,QACA,QACA,SACE,CACF,QACA,QACA,QACA,UAEF/7D,EAAK40I,QAAQrpL,EAAK8W,QAAS5H,GAC3BulC,EAAKvlC,IAAMA,EACXA,EAAM,YAAcA,EACpBulC,EAAKnuC,QAAQ6N,OAAOsgC,EAAKqiO,UAAU7wQ,IAAIiJ,GACvCulC,EAAKqiO,SAAW5nQ,EAChBlP,EAAKsG,QAAQL,IAAI,YACjBjG,EAAKwuI,KAAK,YAAY,KAG1By2H,SAAU,WACR,IAAIjlQ,EAAOoC,KAUX,OATIpC,EAAKy0C,OACPz0C,EAAKy0C,KAAK94B,QAAQ/N,MAAK,SAAU+mC,GAC3BA,EAAKswN,UACPtwN,EAAKswN,cAGTjlQ,EAAKy0C,KAAK1S,OACV/hC,EAAKwuI,KAAK,YAAY,IAEjBxuI,GAET82P,WAAY,WACV,IAAI92P,EAAOoC,KACPd,EAAKtB,EAAKsnE,IACVvoE,EAAWiB,EAAKjB,SAChBwR,EAASvQ,EAAKg0P,YACdzvP,EAAOvE,EAAKu+B,MAAMpgC,IAAI,QACtBwR,EAAO3P,EAAKjB,SAAS4Q,KAAM8d,EAAQ,GAAIpS,EAAWtc,EAASsc,SAC3DhT,EAAMrI,EAAKI,OAAOrB,EAASsJ,KAAM0uQ,EAAW,GAChD,SAASC,EAAgB37P,GACvB,IAAI/Y,EAAGpE,EAAOyC,EAAU,GAYxB,IAVEA,EADEq+B,GAAS9jB,IACD,CACRi/B,IAAK,WACLvnC,KAAM,WACN07D,MAAO,WACPrzD,KAAM,YAGE,CAAEA,KAAM,QAEpBI,EAAWA,EAAS8E,MAAM,KACrB7d,EAAI,EAAGA,EAAI+Y,EAAStZ,OAAQO,IAC/BpE,EAAQyC,EAAQ0a,EAAS/Y,GAAG+c,eACxBnhB,IACFmd,EAAS/Y,GAAKpE,GAGlB,OAAOmd,EAASjV,KAAK,KAEvB,SAAS6wQ,EAAahyQ,GACpB,OAAOA,EAAItE,QAAQ,sBAAuB,QAE5C,SAASu2Q,EAAY3yQ,GACnB,IAAItD,EAAQlC,EAASkC,OAAS,GAC9B,OAAOA,EAAQsD,EAAK5D,QAAQ,IAAI6wC,OAAOylO,EAAah2Q,GAAQ,OAAO,SAAUA,GAC3E,MAAO,cAAgBA,EAAQ,iBAC5BsD,EAEP,SAAS4yQ,EAAY5yQ,GACnB,OAAOA,EAAK5D,QAAQ,IAAI6wC,OAAOylO,EAAa,eAAgB,KAAM,OAAOt2Q,QAAQ,IAAI6wC,OAAOylO,EAAa,eAAgB,KAAM,QAejI,OAbItnQ,GACF3P,EAAKgD,SAASsD,QAAQL,IAAI,kBAExBlH,EAAS0uB,QACXA,EAAQ,mCAAqC1uB,EAAS0uB,MAAQ,QAE5DpS,IACFA,EAAW27P,EAAgB37P,IAE7B1L,EAAOY,EAAS,OAASA,EAAS,MAAQvQ,EAAKjB,SAAS4Q,MAAQ,QAChEonQ,EAAoB,MAATxyQ,EAAe,aAAeoL,EAAO,IAAM8d,EAAQ,SAAc,GAC5ElpB,EAAO4yQ,EAAYn3Q,EAAKI,OAAO82Q,EAAY3yQ,KAC3C8D,EAAM8uQ,EAAYn3Q,EAAKI,OAAO82Q,EAAY7uQ,KACnC,YAAc/G,EAAK,YAActB,EAAKsG,QAAU,mBAAqBywQ,GAAqB,MAATxyQ,EAAe,aAAejD,EAAK,iBAAmBiP,EAAS,SAAWhM,EAAO,UAAY,KAAO8W,EAAW,YAAc/Z,EAAK,qBAAuBiP,EAAS,kBAAoB8K,EAAW,SAAW,KAAOtc,EAAS01C,KAAO,eAAiBlkC,EAAS,gBAAkB,KAAOlI,EAAM,eAAiBkI,EAAS,mBAAqBlI,EAAM,SAAW,IAAM,UAE5bu7B,WAAY,WACV,IAAI5jC,EAAOoC,KAAMrD,EAAWiB,EAAKjB,SAC7Bi/C,EAAYj/C,EAASi/C,UAIzB,GAHyB,oBAAdA,IACTA,EAAYA,EAAUh9C,KAAKoB,OAEzB47C,EAAW,CACb,IAAI24N,EAAU32Q,EAAK8W,MAAM,QACrB6/P,IACFA,EAAQ5gQ,aAAa,QAASioC,GAC9Bh+C,EAAK02Q,WAAa14N,GAmBtB,OAhBAh+C,EAAK0N,GAAG,oBAAoB,SAAUR,GAChCA,EAAE2F,UAAY7S,IACXjB,EAAS01C,MAAmB,UAAXvnC,EAAE3M,MAMtBP,EAAKmkQ,WACDj3P,EAAEshI,MACJxuI,EAAKy0C,KAAKzgC,OAAM,KAPlBhU,EAAKygC,KAAK,UACV5B,EAASsyG,uBAAsB,WAC7BnxI,EAAKgD,SAASyrI,kBAUtBzuI,EAAK6jC,SACE7jC,GAETo3Q,MAAO,WACL,IAAIp3Q,EAAOoC,KAKX,OAJApC,EAAKgD,SAAS2Y,QAAQ/N,MAAK,SAAUgF,GACnCA,EAAKtM,QAAQ6N,OAAO,eAEtBnU,EAAKsG,QAAQiH,OAAO,YAAY,GACzBvN,GAET66D,OAAQ,SAAUt8B,GAKhB,OAJAk4O,GAAgBr0Q,KAAMm8B,GACD,qBAAVA,GACTn8B,KAAKosI,KAAK,UAAWjwG,GAEhBn8B,KAAKyhC,OAAOtF,IAErBpqB,OAAQ,WACN/R,KAAKyhC,SACDzhC,KAAKqyC,MACPryC,KAAKqyC,KAAKtgC,YAKZkjQ,GAAQtT,GAAS1iQ,OAAO,CAC1BwhC,SAAU,CACRv8B,QAAS,QACT+Q,KAAM,WAINigQ,GAAehY,GAAOj+P,OAAO,CAC/By1P,WAAY,WACV,IAAI92P,EAAOoC,KAAMmO,EAASvQ,EAAKg0P,YAM/B,OALAh0P,EAAKsG,QAAQL,IAAI,gBACe,SAA5BjG,EAAKjB,SAASwN,WAChBvM,EAAKsG,QAAQL,IAAI,qBAEnBjG,EAAK44P,UAAW,EACT,YAAc54P,EAAKsnE,IAAM,YAActnE,EAAKsG,QAA5C,eAA4EiK,EAAS,OAASA,EAA9F,wBAETqzB,WAAY,WACV,IAAI5jC,EAAOoC,KACXpC,EAAK6jC,SACL7jC,EAAKu3Q,iBAAmB,IAAI32O,GAAWx+B,KAAKklE,IAAK,CAC/C/jD,MAAO,WACLvjB,EAAKygC,KAAK,gBAEZK,KAAM,SAAU5zB,GACkB,SAA5BlN,EAAKjB,SAASwN,YAChBW,EAAEkzB,OAAS,GAEbpgC,EAAKygC,KAAK,SAAUvzB,IAEtBioF,KAAM,WACJn1F,EAAKygC,KAAK,iBAIhBtsB,OAAQ,WAIN,OAHI/R,KAAKm1Q,kBACPn1Q,KAAKm1Q,iBAAiB/0O,UAEjBpgC,KAAKyhC,YAIhB,SAAS2zO,GAAclpJ,GACrB,IAAImpJ,EAAa,GACjB,GAAInpJ,EACF,IAAK,IAAIhsH,EAAI,EAAGA,EAAIgsH,EAAQvsH,OAAQO,IAClCm1Q,GAAc,kBAAoBnpJ,EAAQhsH,GAAK,KAAOgsH,EAAQhsH,GAAK,YAGvE,OAAOm1Q,EAET,IAAIC,GAAYpY,GAAOj+P,OAAO,CAC5BwhC,SAAU,CACRv8B,QAAS,YACT+Q,KAAM,YACNi3G,QAAS,IAEXz9B,KAAM,SAAU9xF,GACd,IAAIiB,EAAOoC,KACXpC,EAAK6jC,OAAO9kC,GACRiB,EAAKjB,SAASmiB,OAChBlhB,EAAKkhB,KAAOlhB,EAAKjB,SAASmiB,MAExBlhB,EAAKjB,SAASuvH,UAChBtuH,EAAK23Q,SAAW33Q,EAAKjB,SAASuvH,SAEhCtuH,EAAK0N,GAAG,WAAW,SAAUR,GAC3B,IAAI8uC,EACc,KAAd9uC,EAAEuc,UACJvc,EAAEm0B,iBACFrhC,EAAK46D,UAAUn0B,UAAU74B,MAAK,SAAUgF,GACtC,GAAIA,EAAKqpC,OAEP,OADAD,EAAcppC,GACP,KAGX5S,EAAKygC,KAAK,SAAU,CAAEz8B,KAAMg4C,EAAYC,gBAI9CqyE,QAAS,SAAU/vF,GACjB,OAAKz8B,UAAUC,QAGfK,KAAKm8B,MAAMngC,IAAI,UAAWmgC,GACnBn8B,MAHEA,KAAKm8B,MAAMpgC,IAAI,YAK1B24P,WAAY,WACV,IACIxoI,EADAtuH,EAAOoC,KACE8e,EAAO,GAKpB,OAJAotG,EAAUkpJ,GAAcx3Q,EAAK23Q,UACzB33Q,EAAKkhB,OACPA,EAAO,YAAclhB,EAAKkhB,KAAO,KAE5B,eAAiBlhB,EAAKsnE,IAAM,YAActnE,EAAKsG,QAAU,IAAM4a,EAAO,IAAMotG,EAAU,aAE/FhqF,WAAY,WACV,IAAItkC,EAAOoC,KAIX,OAHApC,EAAKu+B,MAAM7wB,GAAG,kBAAkB,SAAUR,GACxClN,EAAK8W,QAAQ7S,UAAYuzQ,GAActqQ,EAAEhP,UAEpC8B,EAAK6jC,YAIhB,SAASktN,GAAU7yP,EAAO05Q,EAAQC,GAOhC,OANI35Q,EAAQ05Q,IACV15Q,EAAQ05Q,GAEN15Q,EAAQ25Q,IACV35Q,EAAQ25Q,GAEH35Q,EAET,SAAS45Q,GAAY1mQ,EAAIlL,EAAMhI,GAC7BkT,EAAG2E,aAAa,QAAU7P,EAAMhI,GAElC,SAAS65Q,GAAmBnlQ,EAAM1U,GAChC,IAAI85Q,EAAcC,EAAelc,EAAUmc,EAAc52M,EAAY62M,EACnC,MAA9BvlQ,EAAK7T,SAASq5Q,aAChBF,EAAe,MACfnc,EAAW,SACXkc,EAAgB,MAEhBC,EAAe,OACfnc,EAAW,QACXkc,EAAgB,KAElBE,EAAWvlQ,EAAKkE,MAAM,UACtBkhQ,GAAgBplQ,EAAKk+O,aAAamnB,IAAkB,KAAOhoB,GAAMx2M,QAAQ0+N,GAAUpc,GACnFz6L,EAAa02M,IAAiB95Q,EAAQ0U,EAAKylQ,YAAczlQ,EAAK0lQ,UAAY1lQ,EAAKylQ,YAAc,KAC7FF,EAASxvQ,MAAMuvQ,GAAgB52M,EAC/B62M,EAASxvQ,MAAMmkB,OAASla,EAAKk+O,aAAax/O,EAAI,KAC9CwmQ,GAAYK,EAAU,WAAYj6Q,GAClC45Q,GAAYK,EAAU,YAAa,GAAKvlQ,EAAK7T,SAASmqC,cAAchrC,IACpE45Q,GAAYK,EAAU,WAAYvlQ,EAAKylQ,WACvCP,GAAYK,EAAU,WAAYvlQ,EAAK0lQ,WAEzC,IAAIC,GAASjZ,GAAOj+P,OAAO,CACzBwvF,KAAM,SAAU9xF,GACd,IAAIiB,EAAOoC,KACNrD,EAASmqC,gBACZnqC,EAASmqC,cAAgB,SAAUhrC,GACjC,OAAOkB,KAAKm5B,MAAc,IAARr6B,GAAe,MAGrC8B,EAAK6jC,OAAO9kC,GACZiB,EAAKsG,QAAQL,IAAI,UACY,MAAzBlH,EAASq5Q,aACXp4Q,EAAKsG,QAAQL,IAAI,YAEnBjG,EAAKq4Q,UAAYh1N,GAAStkD,EAASiqC,UAAYjqC,EAASiqC,SAAW,EACnEhpC,EAAKs4Q,UAAYj1N,GAAStkD,EAASkqC,UAAYlqC,EAASkqC,SAAW,IACnEjpC,EAAKw4Q,WAAax4Q,EAAKu+B,MAAMpgC,IAAI,UAEnC24P,WAAY,WACV,IAAI92P,EAAOoC,KAAMd,EAAKtB,EAAKsnE,IAAK/2D,EAASvQ,EAAKg0P,YAC9C,MAAO,YAAc1yP,EAAK,YAActB,EAAKsG,QAAtC,cAAqEhF,EAAK,mBAAqBiP,EAA/F,2DAETymE,MAAO,WACL50E,KAAKlE,MAAMkE,KAAKo2Q,YAAYv3O,WAE9B2C,WAAY,WACV,IACIoF,EAAUC,EAAUwvO,EAAgBP,EAAcnc,EAAUkc,EAD5Dj4Q,EAAOoC,KAEX,SAASs2Q,EAAWr5Q,EAAK6oB,EAAKwH,GAC5B,OAAQA,EAAMrwB,IAAQ6oB,EAAM7oB,GAE9B,SAASs5Q,EAAat5Q,EAAK6oB,EAAKwH,GAC9B,OAAOA,GAAOxH,EAAM7oB,GAAOA,EAE7B,SAASu5Q,EAAe5vO,EAAUC,GAChC,SAAS4vO,EAAMn0P,GACb,IAAIxmB,EACJA,EAAQ8B,EAAK9B,QACbA,EAAQy6Q,EAAa3vO,EAAUC,EAAUyvO,EAAW1vO,EAAUC,EAAU/qC,GAAiB,IAARwmB,GACjFxmB,EAAQ6yP,GAAU7yP,EAAO8qC,EAAUC,GACnCjpC,EAAK9B,MAAMA,GACX8B,EAAKygC,KAAK,YAAa,CAAEviC,MAAOA,IAChC8B,EAAKygC,KAAK,OAAQ,CAAEviC,MAAOA,IAC3B8B,EAAKygC,KAAK,UAAW,CAAEviC,MAAOA,IAEhC8B,EAAK0N,GAAG,WAAW,SAAUR,GAC3B,OAAQA,EAAEuc,SACV,KAAK,GACL,KAAK,GACHovP,GAAO,GACP,MACF,KAAK,GACL,KAAK,GACHA,EAAM,GACN,UAIN,SAASC,EAAW9vO,EAAUC,EAAUkvO,GACtC,IAAIr2P,EAAUi3P,EAAgBf,EAAcgB,EAAW96Q,EACvD8B,EAAKi5Q,YAAc,IAAIr4O,GAAW5gC,EAAKsnE,IAAK,CAC1C54C,OAAQ1uB,EAAKsnE,IAAM,UACnB/jD,MAAO,SAAUrW,GACf4U,EAAW5U,EAAEurQ,GACbM,EAAiBzoQ,SAAStQ,EAAK8W,MAAM,UAAUnO,MAAMuvQ,GAAe,IACpEF,GAAgBh4Q,EAAK8wP,aAAamnB,IAAkB,KAAOhoB,GAAMx2M,QAAQ0+N,GAAUpc,GACnF/7P,EAAKygC,KAAK,YAAa,CAAEviC,MAAOA,KAElC4iC,KAAM,SAAU5zB,GACd,IAAIwX,EAAQxX,EAAEurQ,GAAkB32P,EAChCk3P,EAAYjoB,GAAUgoB,EAAiBr0P,EAAO,EAAGszP,GACjDG,EAASxvQ,MAAMuvQ,GAAgBc,EAAY,KAC3C96Q,EAAQ8qC,EAAWgwO,EAAYhB,GAAgB/uO,EAAWD,GAC1DhpC,EAAK9B,MAAMA,GACX8B,EAAKoT,UAAU7O,KAAK,GAAKvE,EAAKjB,SAASmqC,cAAchrC,IAAQ4jC,OAAOunJ,QAAQ8uF,EAAU,SACtFn4Q,EAAKygC,KAAK,OAAQ,CAAEviC,MAAOA,KAE7Bi3F,KAAM,WACJn1F,EAAKoT,UAAU2uB,OACf/hC,EAAKygC,KAAK,UAAW,CAAEviC,MAAOA,OAIpC8qC,EAAWhpC,EAAKq4Q,UAChBpvO,EAAWjpC,EAAKs4Q,UACkB,MAA9Bt4Q,EAAKjB,SAASq5Q,aAChBK,EAAiB,UACjBP,EAAe,MACfnc,EAAW,SACXkc,EAAgB,MAEhBQ,EAAiB,UACjBP,EAAe,OACfnc,EAAW,QACXkc,EAAgB,KAElBj4Q,EAAK6jC,SACL+0O,EAAe5vO,EAAUC,GACzB6vO,EAAW9vO,EAAUC,EAAUjpC,EAAK8W,MAAM,YAE5CmqB,QAAS,WACP7+B,KAAKyhC,SACLk0O,GAAmB31Q,KAAMA,KAAKlE,UAEhComC,WAAY,WACV,IAAItkC,EAAOoC,KAIX,OAHApC,EAAKu+B,MAAM7wB,GAAG,gBAAgB,SAAUR,GACtC6qQ,GAAmB/3Q,EAAMkN,EAAEhP,UAEtB8B,EAAK6jC,YAIZq1O,GAAS5Z,GAAOj+P,OAAO,CACzBy1P,WAAY,WACV,IAAI92P,EAAOoC,KAGX,OAFApC,EAAKsG,QAAQL,IAAI,UACjBjG,EAAK44P,UAAW,EACT,YAAc54P,EAAKsnE,IAAM,YAActnE,EAAKsG,QAAU,cAI7D6yQ,GAAcjE,GAAW7zQ,OAAO,CAClCwhC,SAAU,CACRv8B,QAAS,sBACT+Q,KAAM,UAER4pB,QAAS,WACP,IAGIm4O,EAAeC,EAHfr5Q,EAAOoC,KACP2E,EAAM/G,EAAK8W,QACXwpB,EAAOtgC,EAAK8wP,aAUhB,OARA9wP,EAAK6jC,SACLu1O,EAAgBryQ,EAAIiQ,WACpBqiQ,EAAgBtyQ,EAAIy6C,UACpBviB,GAASm6O,GAAelxQ,IAAI,CAC1B2kB,MAAOyT,EAAK9gC,EAAIywP,GAAMx2M,QAAQ4/N,GAAexsP,MAC7CC,OAAQwT,EAAKhvB,EAAI,IAEnB2tB,GAASo6O,GAAenxQ,IAAI,CAAE4kB,OAAQwT,EAAKhvB,EAAI,IACxCtR,GAETq1Q,WAAY,SAAU92O,GACpB,IAAIv+B,EAAOoC,KACX68B,GAASj/B,EAAK8W,QAAQ0qC,WAAW6uC,YAAYrwF,EAAKg0P,YAAc,SAAUz1N,IAE5Eu4N,WAAY,WACV,IAGIrpO,EAIe61O,EAPftjQ,EAAOoC,KACPd,EAAKtB,EAAKsnE,IACV/2D,EAASvQ,EAAKg0P,YAEdrkP,EAAO3P,EAAKu+B,MAAMpgC,IAAI,QACtBoG,EAAOvE,EAAKu+B,MAAMpgC,IAAI,QACtBY,EAAWiB,EAAKjB,SAChBwkQ,EAAW,GAiBf,OAhBA91O,EAAQ1uB,EAAS0uB,MACbA,GACF9d,EAAO,OACc,kBAAV8d,IACTA,EAAQ1vB,EAAW6B,OAAOi+H,aAAepwG,EAAM,GAAKA,EAAM,IAE5DA,EAAQ,mCAAqCA,EAAQ,QAErDA,EAAQ,GAEV9d,EAAO5Q,EAAS4Q,KAAOY,EAAS,OAASA,EAAS,KAAOZ,EAAO,GAC5DpL,IACFvE,EAAKsG,QAAQL,IAAI,gBACjBs9P,EAAW,gBAAkBhzP,EAAS,QAAUvQ,EAAKI,OAAOmE,GAAQ,WAEtE++P,EAAyC,mBAApBvkQ,EAAS87D,OAAuB,kBAAoB97D,EAAS87D,OAAS,IAAM,GAC1F,YAAcv5D,EAAK,YAActB,EAAKsG,QAAU,kBAAoBg9P,EAApE,qEAA8J3zP,EAAO,aAAeA,EAAO,IAAM8d,EAAQ,QAAU,IAAM81O,EAAzN,yCAAoRhzP,EAAS,sCAAwCvQ,EAAKs5Q,cAAgB3pQ,EAAO,IAAS,IAAM3P,EAAKs5Q,aAAe,IAAM,cAAgB/oQ,EAA1Z,8BAETqzB,WAAY,WACV,IAAI5jC,EAAOoC,KAAMwjQ,EAAiB5lQ,EAAKjB,SAASwY,QAiBhD,OAhBAvX,EAAK0N,GAAG,SAAS,SAAUR,GACzB,IAAIxC,EAAOwC,EAAE6C,OACb,GAAI7C,EAAE2F,UAAYzQ,KAChB,MAAOsI,EAAM,CACX,GAAIwC,EAAEshI,MAAuB,SAAfthI,EAAEshI,KAAKttI,KAAoC,WAAlBwJ,EAAKtH,WAA6D,IAApCsH,EAAKxH,UAAU8D,QAAQ,QAK1F,OAJAkG,EAAE8/D,gCACE44L,GACFA,EAAe5kQ,KAAKoB,KAAM8K,IAI9BxC,EAAOA,EAAKvH,sBAIXnD,EAAKjB,SAASwY,QACdvX,EAAK6jC,YAIZ01O,GAAc5L,GAAWtsQ,OAAO,CAClCwhC,SAAU,CACRggO,eAAgB,eAChBI,aAAc,oBACd2K,SAAU,SAEZlxE,SAAU,WACR,OAAO,KAIP88E,GAAWxc,GAAM37P,OAAO,CAC1BwhC,SAAU,CACRv2B,OAAQ,WACR2U,SAAU,CAAE1gB,KAAM,UAEpBs/C,YAAa,SAAUhyC,GACrB,IAAI4rQ,EACAr3Q,KAAKs3Q,cACPD,EAAer3Q,KAAK0U,MAAM1U,KAAKs3Q,aAC/Bz6O,GAASw6O,GAAcl2L,YAAYnhF,KAAK4xP,YAAc,UACtDylB,EAAa1jQ,aAAa,gBAAiB,UAE7C3T,KAAKs3Q,YAAc,IAAM7rQ,EACzB4rQ,EAAer3Q,KAAK0U,MAAM,IAAMjJ,GAChC4rQ,EAAa1jQ,aAAa,gBAAiB,QAC3CkpB,GAASw6O,GAAc71L,SAASxhF,KAAK4xP,YAAc,UACnD5xP,KAAKuZ,QAAQ9N,GAAKi0B,OAAOrB,KAAK,WAC9Br+B,KAAKoqP,SACLpqP,KAAKuZ,QAAQ/N,MAAK,SAAU+mC,EAAMryC,GAC5BuL,IAAQvL,GACVqyC,EAAK5S,WAIX+0N,WAAY,WACV,IAAI92P,EAAOoC,KACPkK,EAAStM,EAAK6zP,QACd8lB,EAAW,GACXppQ,EAASvQ,EAAKg0P,YASlB,OARAh0P,EAAK+2P,YACLzqP,EAAOyqP,UAAU/2P,GACjBA,EAAK2b,QAAQ/N,MAAK,SAAUgF,EAAMtQ,GAChC,IAAIhB,EAAKtB,EAAKsnE,IAAM,KAAOhlE,EAC3BsQ,EAAK47H,KAAK,OAAQ,YAClB57H,EAAK47H,KAAK,aAAcltI,GACxBq4Q,GAAY,YAAcr4Q,EAAK,YAAciP,EAAjC,oDAAqGqC,EAAK00D,IAAM,yCAA2CtnE,EAAKI,OAAOwS,EAAK7T,SAAS8I,OAAS,YAErM,YAAc7H,EAAKsnE,IAAM,YAActnE,EAAKsG,QAA5C,0CAAuGtG,EAAKsnE,IAAM,iBAAmB/2D,EAAS,wBAA0BopQ,EAAxK,kBAA4M35Q,EAAKsnE,IAAM,iBAAmBtnE,EAAK85P,YAAc,KAAOxtP,EAAOwqP,WAAW92P,GAAtR,gBAET4jC,WAAY,WACV,IAAI5jC,EAAOoC,KACXpC,EAAK6jC,SACL7jC,EAAKjB,SAAS66Q,UAAY55Q,EAAKjB,SAAS66Q,WAAa,EACrD55Q,EAAK6/C,YAAY7/C,EAAKjB,SAAS66Q,WAC/Bx3Q,KAAKsL,GAAG,SAAS,SAAUR,GACzB,IAAI2sQ,EAAe3sQ,EAAE6C,OAAO5M,WAC5B,GAAI02Q,GAAgBA,EAAav4Q,KAAOtB,EAAKsnE,IAAM,QAAS,CAC1D,IAAIhlE,EAAIu3Q,EAAa9iQ,WAAWhV,OAChC,MAAOO,IACDu3Q,EAAa9iQ,WAAWzU,KAAO4K,EAAE6C,QACnC/P,EAAK6/C,YAAYv9C,QAM3BuyP,eAAgB,WACd,IACIv0N,EAAMm1N,EAAMC,EADZ11P,EAAOoC,KAEXqzP,EAAOxF,GAAMx2M,QAAQz5C,EAAK8W,MAAM,SAAS+V,MACzC4oO,EAAOA,EAAO,EAAI,EAAIA,EACtBC,EAAO,EACP11P,EAAK2b,QAAQ/N,MAAK,SAAU+mC,GAC1B8gN,EAAOr2P,KAAK8oB,IAAIutO,EAAM9gN,EAAKm8M,aAAa2E,MACxCC,EAAOt2P,KAAK8oB,IAAIwtO,EAAM/gN,EAAKm8M,aAAa4E,SAE1C11P,EAAK2b,QAAQ/N,MAAK,SAAUgF,GAC1BA,EAAK7T,SAASsW,EAAI,EAClBzC,EAAK7T,SAASuW,EAAI,EAClB1C,EAAK7T,SAASS,EAAIi2P,EAClB7iP,EAAK7T,SAASuS,EAAIokP,EAClB9iP,EAAKk+O,WAAW,CACdz7O,EAAG,EACHC,EAAG,EACH9V,EAAGi2P,EACHnkP,EAAGokP,OAGP,IAAIokB,EAAQ7pB,GAAMx2M,QAAQz5C,EAAK8W,MAAM,SAASgW,OAM9C,OALA9sB,EAAKjB,SAASiN,SAAWypP,EACzBz1P,EAAKjB,SAASkN,UAAYypP,EAAOokB,EACjCx5O,EAAOtgC,EAAK6jC,SACZvD,EAAKE,QAAUs5O,EACfx5O,EAAKk1N,OAASl1N,EAAKhvB,EAAIgvB,EAAKE,OACrBF,KAIPy5O,GAAUza,GAAOj+P,OAAO,CAC1BwvF,KAAM,SAAU9xF,GACd,IAAIiB,EAAOoC,KACXpC,EAAK6jC,OAAO9kC,GACZiB,EAAKsG,QAAQL,IAAI,WACblH,EAAS8N,UACX7M,EAAKsG,QAAQL,IAAI,cAEjBjG,EAAK0N,GAAG,WAAW,SAAUR,GAC3B,IAAI8uC,EACc,KAAd9uC,EAAEuc,UACJvc,EAAEm0B,iBACFrhC,EAAK46D,UAAUn0B,UAAU74B,MAAK,SAAUgF,GACtC,GAAIA,EAAKqpC,OAEP,OADAD,EAAcppC,GACP,KAGX5S,EAAKygC,KAAK,SAAU,CAAEz8B,KAAMg4C,EAAYC,eAG5Cj8C,EAAK0N,GAAG,SAAS,SAAUR,GACzBlN,EAAKu+B,MAAMngC,IAAI,QAAS8O,EAAE6C,OAAO7R,YAIvC+iC,QAAS,WACP,IACIt4B,EAAO23B,EAAMi0N,EAAW0B,EAAsBE,EAD9Cn2P,EAAOoC,KAC0B8zP,EAAU,EAC/CvtP,EAAQ3I,EAAK8W,QAAQnO,MACrB23B,EAAOtgC,EAAKo1P,YACZe,EAAkBn2P,EAAKo2P,kBAAoB,GAC3C,IAAI1uO,EAAM3pB,EAAW4E,SAyBrB,OAxBK3C,EAAKjB,SAAS8N,WAAa6a,EAAI1hB,OAAS0hB,EAAImpH,cAAgBnpH,EAAImpH,cAAgB,KACnFloI,EAAM27P,WAAahkO,EAAKhvB,EAAI4kP,EAAU,MAExC3B,EAAYv0P,EAAKu0P,UACjB0B,EAAU1B,EAAUtyN,KAAOsyN,EAAU/xJ,MAAQ,EAC7C0zJ,EAAU3B,EAAUryN,IAAMqyN,EAAU39M,QAAU52C,EAAKjB,SAAS8N,UAAY,EAAI,GACxEyzB,EAAKjrB,IAAM8gP,EAAgB9gP,IAC7B1M,EAAMs5B,KAAO3B,EAAKjrB,EAAI,KACtB8gP,EAAgB9gP,EAAIirB,EAAKjrB,GAEvBirB,EAAKhrB,IAAM6gP,EAAgB7gP,IAC7B3M,EAAMu5B,IAAM5B,EAAKhrB,EAAI,KACrB6gP,EAAgB7gP,EAAIgrB,EAAKhrB,GAEvBgrB,EAAK9gC,IAAM22P,EAAgB32P,IAC7BmJ,EAAMkkB,MAAQyT,EAAK9gC,EAAIy2P,EAAU,KACjCE,EAAgB32P,EAAI8gC,EAAK9gC,GAEvB8gC,EAAKhvB,IAAM6kP,EAAgB7kP,IAC7B3I,EAAMmkB,OAASwT,EAAKhvB,EAAI4kP,EAAU,KAClCC,EAAgB7kP,EAAIgvB,EAAKhvB,GAE3BtR,EAAKo2P,iBAAmBD,EACxBn2P,EAAKygC,KAAK,UAAW,IAAI,GAClBzgC,GAET82P,WAAY,WACV,IAEIpsO,EAAO3jB,EAFP/G,EAAOoC,KACPrD,EAAWiB,EAAKjB,SAgCpB,OA9BA2rB,EAAQ,CACNppB,GAAItB,EAAKsnE,IACT8/L,UAAW,KAEbvnQ,EAAS+N,KAAK,CACZ,OACA,aACA,YACA,OACA,WACA,MACA,MACA,OACA,OACA,UACA,cACA,WACA,aACC,SAAU1H,GACXwkB,EAAMxkB,GAAQnH,EAASmH,MAErBlG,EAAK8S,aACP4X,EAAM5X,SAAW,YAEf/T,EAAS4pC,UACXje,EAAMnqB,KAAOxB,EAAS4pC,SAExB5hC,EAAMkpP,GAAMhhP,OAAOlQ,EAAS8N,UAAY,WAAa,QAAS6d,GAC9D3jB,EAAI7I,MAAQ8B,EAAKu+B,MAAMpgC,IAAI,SAC3B4I,EAAI7D,UAAYlD,EAAKsG,QAAQvF,WACtBgG,EAAIy0C,WAEbt9C,MAAO,SAAUA,GACf,OAAI4D,UAAUC,QACZK,KAAKm8B,MAAMngC,IAAI,QAASF,GACjBkE,OAELA,KAAKm8B,MAAMpgC,IAAI,aACjBiE,KAAKm8B,MAAMngC,IAAI,QAASgE,KAAK0U,QAAQ5Y,OAEhCkE,KAAKm8B,MAAMpgC,IAAI,WAExBylC,WAAY,WACV,IAAI5jC,EAAOoC,KACXpC,EAAK8W,QAAQ5Y,MAAQ8B,EAAKu+B,MAAMpgC,IAAI,SACpC6B,EAAK6jC,SACL7jC,EAAKqjC,IAAI31B,GAAG,UAAU,SAAUR,GAC9BlN,EAAKu+B,MAAMngC,IAAI,QAAS8O,EAAE6C,OAAO7R,OACjC8B,EAAKygC,KAAK,SAAUvzB,OAGxBo3B,WAAY,WACV,IAAItkC,EAAOoC,KASX,OARApC,EAAKu+B,MAAM7wB,GAAG,gBAAgB,SAAUR,GAClClN,EAAK8W,QAAQ5Y,QAAUgP,EAAEhP,QAC3B8B,EAAK8W,QAAQ5Y,MAAQgP,EAAEhP,UAG3B8B,EAAKu+B,MAAM7wB,GAAG,mBAAmB,SAAUR,GACzClN,EAAK8W,QAAQhE,SAAW5F,EAAEhP,SAErB8B,EAAK6jC,UAEd1vB,OAAQ,WACN/R,KAAKihC,IAAIyK,MACT1rC,KAAKyhC,YAILsrG,GAAS,WACX,MAAO,CACL+iH,SAAUA,GACVL,WAAYkB,GACZa,YAAaA,GACbjxN,QAASw1N,GACT9e,QAASt7N,EACTs6O,mBAAoBA,GACpBuB,UAAWA,GACXh5N,WAAYA,GACZ26N,WAAYA,GACZyB,MAAOA,GACPpM,QAASA,GACTsM,UAAWA,GACXa,WAAYA,GACZzzD,OAAQA,GACRu3D,WAAYA,GACZxC,QAASA,GACTC,OAAQA,GACRI,SAAUA,GACVG,aAAcA,GACd6C,OAAQA,GACRQ,eAAgBA,GAChBC,OAAQA,GACRW,YAAaA,GACbC,SAAUA,GACVE,SAAUA,GACVmB,SAAUA,GACVE,YAAaA,GACbK,YAAaA,GACbG,YAAaA,GACbwB,KAAMA,GACNE,YAAaA,GACbG,SAAUA,GACVC,KAAMA,GACNO,SAAUA,GACVsD,WAAYA,GACZQ,UAAWA,GACXE,WAAYA,GACZwB,WAAYA,GACZ4F,eAAgBA,GAChBC,WAAYA,GACZxjB,OAAQukB,GACRC,QAASA,GACTE,MAAOA,GACP5pB,QAASiqB,GACTC,QAASA,GACTE,WAAYA,GACZ0B,SAAUA,GACVr3N,SAAUA,GACVm2N,KAAMA,GACNM,QAASA,GACTqB,MAAOA,GACPC,aAAcA,GACdI,UAAWA,GACXa,OAAQA,GACRW,OAAQA,GACRC,YAAaA,GACbI,YAAaA,GACbC,SAAUA,GACVO,QAASA,GACT7S,SAAUA,GACVtD,aAAcA,KAGd7iO,GAAW,SAAUhxB,GACnBA,EAAO6hC,GACT/xC,EAAS+N,KAAKuhI,MAAU,SAAUxnE,EAAKzmE,GACrC6O,EAAO6hC,GAAG1wC,GAAOymE,KAGnB53D,EAAO6hC,GAAKu9F,MAGZ6qI,GAAoB,WACtBn6Q,EAAS+N,KAAKuhI,MAAU,SAAUxnE,EAAKzmE,GACrC6c,EAAS9X,IAAI/E,EAAKymE,OAGlB1jD,GAAM,CACR8c,SAAUA,GACVi5O,kBAAmBA,IASrB,SAASrtC,MANT1oN,GAAI+1P,oBACJ/1P,GAAI8c,SAASnhC,OAAOpB,QAAUoB,OAAOpB,QAAU,IAC/CD,EAAO0H,IAAI,UAAU,SAAUnH,GAE7B,OADAy0Q,GAAe9lQ,MAAM3O,GACd2jQ,GAAStkQ,IAAIW,OA73Sb,CAo4SXc,SAr4SF,I,oBCAA,YACoB,WAChB,aAEA,IAAIrB,EAASC,QAAQC,KAAKC,MAAMC,QAAQ,yBAEpCC,EAAWJ,QAAQC,KAAKC,MAAMC,QAAQ,sBAEtCs7Q,EAAkB,SAAUn7Q,GAC9B,IAAIo7Q,EAAgB,mDAAoDjkF,EAAYr3L,EAAS2iJ,QAAQziJ,EAAOC,SAAS2hM,wBAAyBvlJ,EAASr8C,EAAOq8C,OAC9Jr8C,EAAOwO,UAAUH,SAAS,CACxB23M,UAAW,CACTx8M,SAAU4xQ,EACV3zQ,WAAY,CAAEiG,MAAO,SAEvBy4M,YAAa,CACX38M,SAAU4xQ,EACV3zQ,WAAY,CAAEiG,MAAO,WAEvB24M,WAAY,CACV78M,SAAU4xQ,EACV3zQ,WAAY,CAAEiG,MAAO,UAEvB44M,aAAc,CACZ98M,SAAU4xQ,EACV3zQ,WAAY,CAAEiG,MAAO,YAEvB64M,KAAM,CACJ,CACEr2M,OAAQ,IACRmF,OAAQ,OAEV,CACEnF,OAAQ,SACRmF,OAAQ,OAEV,CACEnF,OAAQ,OACRgT,OAAQ,CAAEsjM,WAAY,UAG1BC,OAAQ,CACN,CACEv2M,OAAQ,IACRmF,OAAQ,OAEV,CACEnF,OAAQ,KACRmF,OAAQ,OAEV,CACEnF,OAAQ,OACRgT,OAAQ,CAAEwjM,UAAW,YAGzBC,UAAW,CACT,CACEz2M,OAAQ,IACRmF,OAAQ,OAEV,CACEnF,OAAQ,OACRgT,OAAQ,CAAEu/L,eAAgB,aAC1B9nF,OAAO,IAGXisF,cAAe,CACb,CACE12M,OAAQ,SACRmF,OAAQ,OAEV,CACEnF,OAAQ,OACRgT,OAAQ,CAAEu/L,eAAgB,gBAC1B9nF,OAAO,IAGXosF,SAAU,CACR72M,OAAQ,OACRzI,WAAY,CAAE6iN,KAAM,WAEtBpqM,SAAU,CACRhQ,OAAQ,OACRzI,WAAY,CACV2a,KAAM,SAAUyuJ,GACd,OAAO/wK,EAASguC,QAAQqpJ,EAAWtmB,EAAKzxK,OAAS,KAIvDynN,UAAW,CACT32M,OAAQ,OACRzI,WAAY,CAAEmN,MAAO,WAEvBkyM,YAAa,CACX52M,OAAQ,OACRgT,OAAQ,CAAEspG,gBAAiB,aAG/B1sH,EAASgP,KAAK,eAAeuS,MAAM,MAAM,SAAUja,GACjDi1C,EAAOi1G,iBAAiBlqJ,EAAO,UAE5Bi1C,EAAOg3G,eAAe,SACzBh3G,EAAOi1G,iBAAiB,+BAE1BxxJ,EAASgP,KAAKssQ,EAAc/5P,MAAM,MAAM,SAAUja,GAChD,IAAIkC,EAAO+yC,EAAOg3G,eAAejsJ,GAC7BkC,IACGA,EAAK7B,WAAWiG,QACnBpE,EAAK7B,WAAWiG,MAAQ,GACxBpE,EAAK05D,gBAAgBn8D,KAAK,eAK9B8H,EAAQ,SAAU3O,GACpBA,EAAOC,SAASg9L,eAAgB,EAChCj9L,EAAO4O,GAAG,QAAQ,WAChBusQ,EAAgBn7Q,OAGhByxQ,EAAU,CAAE9iQ,MAAOA,GAEnBN,EAAW,SAAUrO,GACvBA,EAAO0Q,UAAU,kBAAkB,WACjC,IAAImM,EAAQ,GAAI2zP,EAAyB,kDACrCC,EAAkBzwQ,EAAOC,SAASwwQ,iBAAmBD,EAazD,OAZAxwQ,EAAOsM,EAAEwC,KAAK2hQ,EAAgBpvP,MAAM,MAAM,SAAU7d,EAAGqyC,GACrD,IAAIpwC,EAAOowC,EAAMz2C,EAAQy2C,EACrB/nC,EAAS+nC,EAAKx0B,MAAM,KACpBvT,EAAO7K,OAAS,IAClBwC,EAAOqI,EAAO,GACd1O,EAAQ0O,EAAO,IAEjB+O,EAAMhW,KAAK,CACTpB,KAAMA,EACNrG,MAAOA,OAGJ,CACLqC,KAAM,UACNgE,KAAM,aACN6O,QAAS,aACTxG,OAAQ+O,EACRqzP,YAAY,EACZ37P,aAAc,WACZ,IAAIrT,EAAOoC,KACXtD,EAAO4O,GAAG,cAAc,WACtB,IAAIysQ,EACJA,EAAUr7Q,EAAOkM,IAAIyL,UAAU3X,EAAO6L,UAAUC,UAAW,QACvDuvQ,EACFn6Q,EAAK9B,MAAMi8Q,EAAQj5P,MAEnBlhB,EAAK9B,MAAM,QAIjBqZ,QAAS,SAAUrK,GACbA,EAAE2F,QAAQ9T,SAASb,OACrBY,EAAOoX,YAAY,YAAY,EAAOhJ,EAAE2F,QAAQ9T,SAASb,YAKjEY,EAAO0Q,UAAU,cAAc,WAC7B,SAASk/P,EAAcj7L,GACrBA,EAAUA,EAAQ9yE,QAAQ,KAAM,IAAIwf,MAAM,KAC1C,IAAI7d,EAAImxE,EAAQ1xE,OAChB,MAAOO,IACLmxE,EAAQnxE,GAAKmxE,EAAQnxE,GAAG6d,MAAM,KAEhC,OAAOszD,EAET,IAAIm7L,EAAsB,ukBACtBjzP,EAAQ,GAAIkzP,EAAQH,EAAc5vQ,EAAOC,SAAS+vQ,cAAgBF,GAQtE,OAPA9vQ,EAAOsM,EAAEwC,KAAKihQ,GAAO,SAAUvsQ,EAAGksQ,GAChC7yP,EAAMhW,KAAK,CACTpB,KAAM,CAAEg3D,IAAKizM,EAAK,IAClBtwQ,MAAOswQ,EAAK,GACZxwN,WAAyC,IAA9BwwN,EAAK,GAAGxnQ,QAAQ,SAAkB,eAAiBwnQ,EAAK,GAAK,QAGrE,CACLjuQ,KAAM,UACNgE,KAAM,cACN6O,QAAS,cACTxG,OAAQ+O,EACRqzP,YAAY,EACZ37P,aAAc,WACZ,IAAIrT,EAAOoC,KACXtD,EAAO4O,GAAG,cAAc,WACtB,IAAIysQ,EACJA,EAAUr7Q,EAAOkM,IAAIyL,UAAU3X,EAAO6L,UAAUC,UAAW,QACvDuvQ,EACFn6Q,EAAK9B,MAAMi8Q,EAAQ/wD,MAEnBppN,EAAK9B,MAAM,QAIjBu0C,SAAU,SAAUvlC,GACdA,EAAE2F,QAAQ9T,SAASb,OACrBY,EAAOoX,YAAY,YAAY,EAAOhJ,EAAE2F,QAAQ9T,SAASb,aAM/D0R,EAAU,CAAEzC,SAAUA,GAM1B,SAAS0C,KAJTtR,EAAO0H,IAAI,gBAAgB,SAAUnH,GACnCyxQ,EAAQ9iQ,MAAM3O,GACd8Q,EAAQzC,SAASrO,OAlNJ,IADnB,I,qBCMA,EAAQ,S,qBCAR,EAAQ,S,qBCAR,EAAQ,S,qBCAR,EAAQ","file":"js/chunk-1a0ec861.c63e6975.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');","// 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');","(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 }","(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');","(function () {\nvar paste = (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$1 = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var hasProPlugin = function (editor) {\n if (/(^|[ ,])powerpaste([, ]|$)/.test(editor.settings.plugins) && global$1.get('powerpaste')) {\n if (typeof domGlobals.window.console !== 'undefined' && domGlobals.window.console.log) {\n domGlobals.window.console.log('PowerPaste is incompatible with Paste plugin! Remove \\'paste\\' from the \\'plugins\\' option.');\n }\n return true;\n } else {\n return false;\n }\n };\n var DetectProPlugin = { hasProPlugin: hasProPlugin };\n\n var get = function (clipboard, quirks) {\n return {\n clipboard: clipboard,\n quirks: quirks\n };\n };\n var Api = { get: get };\n\n var firePastePreProcess = function (editor, html, internal, isWordHtml) {\n return editor.fire('PastePreProcess', {\n content: html,\n internal: internal,\n wordContent: isWordHtml\n });\n };\n var firePastePostProcess = function (editor, node, internal, isWordHtml) {\n return editor.fire('PastePostProcess', {\n node: node,\n internal: internal,\n wordContent: isWordHtml\n });\n };\n var firePastePlainTextToggle = function (editor, state) {\n return editor.fire('PastePlainTextToggle', { state: state });\n };\n var firePaste = function (editor, ieFake) {\n return editor.fire('paste', { ieFake: ieFake });\n };\n var Events = {\n firePastePreProcess: firePastePreProcess,\n firePastePostProcess: firePastePostProcess,\n firePastePlainTextToggle: firePastePlainTextToggle,\n firePaste: firePaste\n };\n\n var shouldPlainTextInform = function (editor) {\n return editor.getParam('paste_plaintext_inform', true);\n };\n var shouldBlockDrop = function (editor) {\n return editor.getParam('paste_block_drop', false);\n };\n var shouldPasteDataImages = function (editor) {\n return editor.getParam('paste_data_images', false);\n };\n var shouldFilterDrop = function (editor) {\n return editor.getParam('paste_filter_drop', true);\n };\n var getPreProcess = function (editor) {\n return editor.getParam('paste_preprocess');\n };\n var getPostProcess = function (editor) {\n return editor.getParam('paste_postprocess');\n };\n var getWebkitStyles = function (editor) {\n return editor.getParam('paste_webkit_styles');\n };\n var shouldRemoveWebKitStyles = function (editor) {\n return editor.getParam('paste_remove_styles_if_webkit', true);\n };\n var shouldMergeFormats = function (editor) {\n return editor.getParam('paste_merge_formats', true);\n };\n var isSmartPasteEnabled = function (editor) {\n return editor.getParam('smart_paste', true);\n };\n var isPasteAsTextEnabled = function (editor) {\n return editor.getParam('paste_as_text', false);\n };\n var getRetainStyleProps = function (editor) {\n return editor.getParam('paste_retain_style_properties');\n };\n var getWordValidElements = function (editor) {\n var defaultValidElements = '-strong/b,-em/i,-u,-span,-p,-ol,-ul,-li,-h1,-h2,-h3,-h4,-h5,-h6,' + '-p/div,-a[href|name],sub,sup,strike,br,del,table[width],tr,' + 'td[colspan|rowspan|width],th[colspan|rowspan|width],thead,tfoot,tbody';\n return editor.getParam('paste_word_valid_elements', defaultValidElements);\n };\n var shouldConvertWordFakeLists = function (editor) {\n return editor.getParam('paste_convert_word_fake_lists', true);\n };\n var shouldUseDefaultFilters = function (editor) {\n return editor.getParam('paste_enable_default_filters', true);\n };\n var Settings = {\n shouldPlainTextInform: shouldPlainTextInform,\n shouldBlockDrop: shouldBlockDrop,\n shouldPasteDataImages: shouldPasteDataImages,\n shouldFilterDrop: shouldFilterDrop,\n getPreProcess: getPreProcess,\n getPostProcess: getPostProcess,\n getWebkitStyles: getWebkitStyles,\n shouldRemoveWebKitStyles: shouldRemoveWebKitStyles,\n shouldMergeFormats: shouldMergeFormats,\n isSmartPasteEnabled: isSmartPasteEnabled,\n isPasteAsTextEnabled: isPasteAsTextEnabled,\n getRetainStyleProps: getRetainStyleProps,\n getWordValidElements: getWordValidElements,\n shouldConvertWordFakeLists: shouldConvertWordFakeLists,\n shouldUseDefaultFilters: shouldUseDefaultFilters\n };\n\n var shouldInformUserAboutPlainText = function (editor, userIsInformedState) {\n return userIsInformedState.get() === false && Settings.shouldPlainTextInform(editor);\n };\n var displayNotification = function (editor, message) {\n editor.notificationManager.open({\n text: editor.translate(message),\n type: 'info'\n });\n };\n var togglePlainTextPaste = function (editor, clipboard, userIsInformedState) {\n if (clipboard.pasteFormat.get() === 'text') {\n clipboard.pasteFormat.set('html');\n Events.firePastePlainTextToggle(editor, false);\n } else {\n clipboard.pasteFormat.set('text');\n Events.firePastePlainTextToggle(editor, true);\n if (shouldInformUserAboutPlainText(editor, userIsInformedState)) {\n displayNotification(editor, 'Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.');\n userIsInformedState.set(true);\n }\n }\n editor.focus();\n };\n var Actions = { togglePlainTextPaste: togglePlainTextPaste };\n\n var register = function (editor, clipboard, userIsInformedState) {\n editor.addCommand('mceTogglePlainTextPaste', function () {\n Actions.togglePlainTextPaste(editor, clipboard, userIsInformedState);\n });\n editor.addCommand('mceInsertClipboardContent', function (ui, value) {\n if (value.content) {\n clipboard.pasteHtml(value.content, value.internal);\n }\n if (value.text) {\n clipboard.pasteText(value.text);\n }\n });\n };\n var Commands = { register: register };\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.Env');\n\n var global$3 = tinymce.util.Tools.resolve('tinymce.util.Delay');\n\n var global$4 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n var global$5 = tinymce.util.Tools.resolve('tinymce.util.VK');\n\n var internalMimeType = 'x-tinymce/html';\n var internalMark = '';\n var mark = function (html) {\n return internalMark + html;\n };\n var unmark = function (html) {\n return html.replace(internalMark, '');\n };\n var isMarked = function (html) {\n return html.indexOf(internalMark) !== -1;\n };\n var InternalHtml = {\n mark: mark,\n unmark: unmark,\n isMarked: isMarked,\n internalHtmlMime: function () {\n return internalMimeType;\n }\n };\n\n var global$6 = tinymce.util.Tools.resolve('tinymce.html.Entities');\n\n var isPlainText = function (text) {\n return !/<(?:\\/?(?!(?:div|p|br|span)>)\\w+|(?:(?!(?:span style=\"white-space:\\s?pre;?\">)|br\\s?\\/>))\\w+\\s[^>]+)>/i.test(text);\n };\n var toBRs = function (text) {\n return text.replace(/\\r?\\n/g, '' + ' ' + chrText + ' ' + ' | ';\n } else {\n gridHtml += '';\n }\n }\n gridHtml += ' |
]*>/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","(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","// 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');","// 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');","(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","// 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","(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","(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","// 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","// 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","(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","// 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","(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","// 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');","// 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');","// 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');","// 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');"],"sourceRoot":""}' + tabsHtml + '' + '' + layout.renderHtml(self) + '' + '