{"version":3,"sources":["webpack://ncTrimDesigner/webpack/universalModuleDefinition","webpack://ncTrimDesigner/./node_modules/svg-pan-zoom/src/browserify.js","webpack://ncTrimDesigner/./node_modules/svg-pan-zoom/src/control-icons.js","webpack://ncTrimDesigner/./node_modules/svg-pan-zoom/src/shadow-viewport.js","webpack://ncTrimDesigner/./node_modules/svg-pan-zoom/src/svg-pan-zoom.js","webpack://ncTrimDesigner/./node_modules/svg-pan-zoom/src/svg-utilities.js","webpack://ncTrimDesigner/./node_modules/svg-pan-zoom/src/uniwheel.js","webpack://ncTrimDesigner/./node_modules/svg-pan-zoom/src/utilities.js","webpack://ncTrimDesigner/./node_modules/@svgdotjs/svg.js/dist/svg.esm.js","webpack://ncTrimDesigner/./src/Segment.ts","webpack://ncTrimDesigner/./src/Vector.ts","webpack://ncTrimDesigner/./src/Point.ts","webpack://ncTrimDesigner/./src/UndoPoint.ts","webpack://ncTrimDesigner/./src/utils.ts","webpack://ncTrimDesigner/./node_modules/split.js/dist/split.es.js","webpack://ncTrimDesigner/./src/SettingsManager.ts","webpack://ncTrimDesigner/./src/FeetIn.ts","webpack://ncTrimDesigner/./src/HtmlManager.ts","webpack://ncTrimDesigner/./src/TrimOptionsManager.ts","webpack://ncTrimDesigner/./src/TrimDesigner.ts","webpack://ncTrimDesigner/./src/app.ts","webpack://ncTrimDesigner/webpack/bootstrap","webpack://ncTrimDesigner/webpack/startup","webpack://ncTrimDesigner/webpack/runtime/define property getters","webpack://ncTrimDesigner/webpack/runtime/global","webpack://ncTrimDesigner/webpack/runtime/hasOwnProperty shorthand","webpack://ncTrimDesigner/webpack/runtime/make namespace object"],"names":["root","factory","exports","module","define","amd","self","SvgPanZoom","SvgUtils","enable","instance","defs","svg","querySelector","document","createElementNS","svgNS","appendChild","style","setAttribute","textContent","zoomGroup","width","height","this","_createZoomIn","_createZoomReset","_createZoomOut","controlIcons","zoomIn","addEventListener","getPublicInstance","zoomInBackground","zoomInShape","resetPanZoomControl","reset","resetPanZoomControlBackground","resetPanZoomControlShape1","resetPanZoomControlShape2","zoomOut","zoomOutBackground","zoomOutShape","disable","parentNode","removeChild","Utils","ShadowViewport","viewport","options","init","prototype","originalState","zoom","x","y","activeState","updateCTMCached","proxy","updateCTM","requestAnimationFrame","createRequestAnimationFrame","refreshRate","viewBox","cacheViewBox","newCTM","processCTM","setCTM","svgViewBox","getAttribute","viewBoxValues","split","filter","v","map","parseFloat","Math","min","updateCTMOnNextFrame","removeAttribute","simpleViewBoxCache","bBox","getBBox","getViewBox","extend","newScale","getCTM","fit","contain","max","a","d","e","f","center","offsetX","offsetY","getOriginalState","getState","getZoom","getRelativeZoom","computeRelativeZoom","scale","getPan","safeCTM","createSVGMatrix","b","c","willZoom","isZoomDifferent","willPan","isPanDifferent","beforeZoom","updateCache","onZoom","preventPan","beforePan","preventPanX","preventPanY","isObject","isNumber","onPan","pendingUpdate","call","window","ctm","onUpdatedCTM","Wheel","ControlIcons","optionsDefaults","viewportSelector","panEnabled","controlIconsEnabled","zoomEnabled","dblClickZoomEnabled","mouseWheelZoomEnabled","preventMouseEventsDefault","zoomScaleSensitivity","minZoom","maxZoom","customEventsHandler","eventsListenerElement","passiveListenerOption","passive","that","setupSvgAttributes","state","boundingClientRectNormalized","getBoundingClientRectNormalized","getOrCreateViewport","oldScale","oldPoint","newPoint","point","publicInstance","setBeforeZoom","setOnZoom","setBeforePan","setOnPan","setOnUpdatedCTM","lastMouseWheelEventTime","Date","now","setupHandlers","prevEvt","eventListeners","mousedown","evt","result","handleMouseDown","touchstart","mouseup","handleMouseUp","touchend","mousemove","handleMouseMove","touchmove","mouseleave","touchleave","touchcancel","svgElement","haltEventListeners","length","i","hasOwnProperty","event","enableMouseWheelZoom","wheelListener","handleMouseWheel","isPassiveListener","on","disableMouseWheelZoom","off","preventDefault","returnValue","delta","deltaY","timeDelta","divider","deltaMode","wheelDelta","abs","log","inversedScreenCTM","getScreenCTM","inverse","relativeMousePoint","getEventPoint","matrixTransform","pow","zoomAtPoint","zoomScale","zoomAbsolute","oldCTM","relativePoint","modifier","translate","multiply","absolute","getSvgCenterPoint","publicZoom","computeFromRelativeZoom","publicZoomAtPoint","getType","Error","createSVGPoint","resetZoom","resetPan","pan","handleDblClick","zoomFactor","target","indexOf","shiftKey","mouseAndTouchNormalize","isDblClick","firstEventCTM","stateOrigin","viewportCTM","updateBBox","panBy","resize","disableControlIcons","enableControlIcons","destroy","removeEventListener","instancesStore","pi","enablePan","disablePan","isPanEnabled","fn","enableZoom","disableZoom","isZoomEnabled","isControlIconsEnabled","enableDblClickZoom","disableDblClickZoom","isDblClickZoomEnabled","isMouseWheelZoomEnabled","setZoomScaleSensitivity","setMinZoom","setMaxZoom","zoomBy","zoomAtPointBy","getSizes","realZoom","elementOrSelector","getSvg","push","_browser","documentMode","xmlNS","xmlnsNS","xlinkNS","evNS","clientWidth","clientHeight","getBoundingClientRect","selector","isElement","childNodes","Array","slice","children","el","nodeName","viewportId","toISOString","replace","svgChildren","classNames","join","setAttributeNS","toLowerCase","internetExplorerRedisplayInterval","refreshDefsGlobal","throttle","allDefs","querySelectorAll","allDefsCount","thisDefs","insertBefore","element","matrix","s","transform","setTimeout","clientX","clientY","_addEventListener","_removeEventListener","support","prefix","fns","passiveOption","_addWheelListener","elem","eventName","callback","cb","originalEvent","srcElement","type","deltaX","delatZ","wheelDeltaX","detail","createCallback","_removeWheelListener","getCallback","splice","removeCallback","createElement","undefined","onmousewheel","requestTimeout","timeout","source","prop","o","HTMLElement","SVGElement","SVGSVGElement","nodeType","Object","toString","n","isNaN","isFinite","String","tagName","contentDocument","documentElement","getSVGDocument","context","apply","arguments","touches","pageX","rect","left","pageY","top","timeStampDiff","timeStamp","touchesDistance","sqrt","getTime","func","wait","args","previous","later","leading","remaining","clearTimeout","trailing","floor","commonjsGlobal","globalThis","g","createCommonjsModule","set","get","has$1","check","it","global_1","Function","fails","exec","error","descriptors","defineProperty","nativePropertyIsEnumerable","propertyIsEnumerable","getOwnPropertyDescriptor","objectPropertyIsEnumerable","1","V","descriptor","enumerable","createPropertyDescriptor","bitmap","value","configurable","writable","classofRaw","indexedObject","requireObjectCoercible","TypeError","toIndexedObject","toPrimitive","input","PREFERRED_STRING","val","valueOf","has","key","document$1","EXISTS","documentCreateElement","ie8DomDefine","nativeGetOwnPropertyDescriptor","objectGetOwnPropertyDescriptor","O","P","anObject","nativeDefineProperty","objectDefineProperty","Attributes","createNonEnumerableProperty","object","setGlobal","SHARED","sharedStore","shared","version","mode","copyright","functionToString","WeakMap","nativeWeakMap","test","id","postfix","random","uid","keys","sharedKey","hiddenKeys","WeakMap$1","store$1","wmget","wmhas","wmset","metadata","STATE","match","internalState","enforce","getterFor","TYPE","redefine","getInternalState","enforceInternalState","TEMPLATE","unsafe","simple","noTargetGet","path","aFunction","variable","getBuiltIn","namespace","method","ceil","toInteger","argument","toLength","min$1","toAbsoluteIndex","index","integer","createMethod","IS_INCLUDES","$this","fromIndex","arrayIncludes","includes","objectKeysInternal","names","enumBugKeys","hiddenKeys$1","concat","objectGetOwnPropertyNames","getOwnPropertyNames","objectGetOwnPropertySymbols","getOwnPropertySymbols","ownKeys","copyConstructorProperties","replacement","isForced","feature","detection","data","normalize","POLYFILL","NATIVE","string","isForced_1","getOwnPropertyDescriptor$1","_export","targetProperty","sourceProperty","TARGET","GLOBAL","global","STATIC","stat","forced","sham","isArray","arg","createProperty","propertyKey","nativeSymbol","Symbol","Symbol$1","store$2","wellKnownSymbol","name","userAgent","process","versions","v8","v8Version","SPECIES","arrayMethodHasSpeciesSupport","METHOD_NAME","array","constructor","foo","Boolean","SPECIES$1","nativeSlice","max$1","proto","start","end","Constructor","k","fin","FunctionPrototype","FunctionPrototypeToString","nameRE","NAME","nativeGetOwnPropertyNames","toString$1","windowNames","objectGetOwnPropertyNamesExternal","getWindowNames","nativeGetOwnPropertyNames$1","FAILS_ON_PRIMITIVES","_typeof2","obj","iterator","_typeof","toObject","objectKeys","objectDefineProperties","defineProperties","Properties","html","IE_PROTO","Empty","createDict","iframeDocument","iframe","display","src","contentWindow","open","write","lt","close","F","objectCreate","create","wrappedWellKnownSymbol","defineProperty$1","defineWellKnownSymbol","defineProperty$2","TO_STRING_TAG","setToStringTag","TAG","aFunction$1","bindContext","SPECIES$2","arraySpeciesCreate","originalArray","C","createMethod$1","IS_MAP","IS_FILTER","IS_SOME","IS_EVERY","IS_FIND_INDEX","NO_HOLES","callbackfn","specificCreate","boundFunction","arrayIteration","forEach","some","every","find","findIndex","$forEach","HIDDEN","SYMBOL","TO_PRIMITIVE","setInternalState","ObjectPrototype","$Symbol","JSON$1","JSON","nativeJSONStringify","stringify","nativeGetOwnPropertyDescriptor$1","nativeDefineProperty$1","nativeGetOwnPropertyNames$2","nativePropertyIsEnumerable$1","AllSymbols","ObjectPrototypeSymbols","StringToSymbolRegistry","SymbolToStringRegistry","WellKnownSymbolsStore","QObject","USE_SETTER","findChild","setSymbolDescriptor","ObjectPrototypeDescriptor","wrap","tag","description","symbol","isSymbol","$defineProperty","$defineProperties","properties","$getOwnPropertySymbols","$propertyIsEnumerable","$getOwnPropertyDescriptor","$getOwnPropertyNames","IS_OBJECT_PROTOTYPE","setter","keyFor","sym","useSetter","useSimple","replacer","$replacer","defineProperty$3","NativeSymbol","EmptyStringDescriptionStore","SymbolWrapper","symbolPrototype","symbolToString","regexp","desc","UNSCOPABLES","ArrayPrototype","IteratorPrototype","PrototypeOfArrayIteratorPrototype","arrayIterator","addToUnscopables","iterators","correctPrototypeGetter","getPrototypeOf","IE_PROTO$1","ObjectPrototype$1","objectGetPrototypeOf","ITERATOR","BUGGY_SAFARI_ITERATORS","iteratorsCore","IteratorPrototype$1","returnThis$1","objectSetPrototypeOf","setPrototypeOf","CORRECT_SETTER","aPossiblePrototype","__proto__","IteratorPrototype$2","BUGGY_SAFARI_ITERATORS$1","ITERATOR$1","KEYS","VALUES","ENTRIES","returnThis$2","defineIterator","Iterable","IteratorConstructor","next","DEFAULT","IS_SET","FORCED","createIteratorConstructor","CurrentIteratorPrototype","methods","KEY","getIterationMethod","KIND","defaultIterator","IterablePrototype","INCORRECT_VALUES_NAME","nativeIterator","anyNativeIterator","entries","values","ARRAY_ITERATOR","setInternalState$1","getInternalState$1","es_array_iterator","iterated","kind","done","Arguments","nativeAssign","assign","objectAssign","A","B","alphabet","chr","T","argumentsLength","S","j","TO_STRING_TAG$1","CORRECT_ARGUMENTS","classof","tryGet","callee","objectToString","ObjectPrototype$2","freezing","isExtensible","preventExtensions","internalMetadata","METADATA","setMetadata","objectID","weakData","meta","REQUIRED","fastKey","getWeakData","onFreeze","ITERATOR$2","ArrayPrototype$1","ITERATOR$3","callWithSafeIterationClosing","returnMethod","iterate_1","Result","stopped","iterable","AS_ENTRIES","IS_ITERATOR","iterFn","step","getIteratorMethod","stop","anInstance","ITERATOR$4","SAFE_CLOSING","called","iteratorWithReturn","from","inheritIfRequired","dummy","Wrapper","NewTarget","NewTargetPrototype","redefineAll","SPECIES$3","defineProperty$4","setInternalState$2","internalStateGetterFor","createMethod$2","CONSTRUCTOR_NAME","wrapper","common","IS_WEAK","NativeConstructor","NativePrototype","ADDER","exported","fixMethod","nativeMethod","getConstructor","HASNT_CHAINING","THROWS_ON_PRIMITIVES","ACCEPT_ITERABLES","SKIP_CLOSING","ITERATION_SUPPORT","checkCorrectnessOfIteration","BUGGY_ZERO","$instance","setStrong","collection","first","last","size","entry","getEntry","removed","clear","prev","add","ITERATOR_NAME","getInternalCollectionState","getInternalIteratorState","setSpecies","CONVERT_TO_STRING","pos","second","position","charCodeAt","charAt","stringMultibyte","codeAt","STRING_ITERATOR","setInternalState$3","getInternalState$2","domIterables","CSSRuleList","CSSStyleDeclaration","CSSValueList","ClientRectList","DOMRectList","DOMStringList","DOMTokenList","DataTransferItemList","FileList","HTMLAllCollection","HTMLCollection","HTMLFormElement","HTMLSelectElement","MediaList","MimeTypeArray","NamedNodeMap","NodeList","PaintRequestList","Plugin","PluginArray","SVGLengthList","SVGNumberList","SVGPathSegList","SVGPointList","SVGStringList","SVGTransformList","SourceBufferList","StyleSheetList","TextTrackCueList","TextTrackList","TouchList","ITERATOR$5","TO_STRING_TAG$3","ArrayValues","COLLECTION_NAME","Collection","CollectionPrototype","_toConsumableArray","arr","arr2","_arrayWithoutHoles","iter","_iterableToArray","_nonIterableSpread","registerMethods","m","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_step","_iterator","err","return","addMethodNames","_name2","getMethodsFor","_names","$includes","re1","re2","regexpFlags","ignoreCase","multiline","dotAll","unicode","sticky","nativeExec","RegExp","nativeReplace","patchedExec","UPDATES_LAST_INDEX_WRONG","lastIndex","NPCG_INCLUDED","str","reCopy","re","regexpExec","MATCH","isRegexp","isRegExp","notARegexp","MATCH$1","correctIsRegexpLogic","searchString","SPECIES$4","REPLACE_SUPPORTS_NAMED_GROUPS","groups","SPLIT_WORKS_WITH_OVERWRITTEN_EXEC","originalExec","fixRegexpWellKnownSymbolLogic","DELEGATES_TO_SYMBOL","DELEGATES_TO_EXEC","execCalled","flags","nativeRegExpMethod","arg2","forceStringMethod","stringMethod","regexMethod","charAt$1","advanceStringIndex","regexpExecAbstract","R","max$2","min$2","floor$1","SUBSTITUTION_SYMBOLS","SUBSTITUTION_SYMBOLS_NO_NAMED","REPLACE","maybeCallNative","searchValue","replaceValue","res","rx","functionalReplace","fullUnicode","results","accumulatedResult","nextSourcePosition","matched","captures","namedCaptures","replacerArgs","getSubstitution","tailPos","symbols","ch","capture","whitespaces","whitespace","ltrim","rtrim","createMethod$3","stringTrim","trim","$trim","block","il","radians","PI","camelCase","toUpperCase","capitalize","proportionalSize","box","bbox","getOrigin","ox","oy","origin","_element$bbox","bx","by","forcedStringTrimMethod","ns","xmlns","xlink","globals","_classCallCheck","Base","makeInstance","adopter","node","innerHTML","firstChild","nodeOrNew","Node","adopt","className","register","asRoot","did","eid","assignNewId","modules","attrCheck","wrapWithAttrCheck","_len","_key","attr","siblings","parent","forward","p","removeElement","isRoot","backward","front","back","before","remove","after","insertAfter","$filter","sloppyArrayMethod","$indexOf","nativeIndexOf","NEGATIVE_ZERO","SLOPPY_METHOD","searchElement","nativeJoin","ES3_STRINGS","SLOPPY_METHOD$1","separator","SPECIES$5","arrayPush","min$3","MAX_UINT32","SUPPORTS_Y","SPLIT","nativeSplit","internalSplit","limit","lim","lastLength","output","lastLastIndex","separatorCopy","splitter","defaultConstructor","speciesConstructor","unicodeMatching","q","z","numberAndUnit","hex","rgb","reference","transforms","whitespace$1","isHex","isRgb","isBlank","isImage","delimiter","hyphen","pathLetters","isPathLetter","numbersWithDots","dots","classes","hasClass","addClass","removeClass","toggleClass","$forEach$1","arrayForEach","COLLECTION_NAME$1","Collection$1","CollectionPrototype$1","css","ret","cssText","t","cased","_name","show","hide","visible","r","parse","remember","memory","forget","_memory","createMethod$4","IS_RIGHT","memo","$reduce","arrayReduce","reduce","listenerId","windowEvents","getEvents","getEventHolder","events","getEventTarget","listener","binding","l","bind","bag","_svgjsListenerId","ev","clearEvents","IS_CONCAT_SPREADABLE","MAX_SAFE_INTEGER","MAXIMUM_ALLOWED_INDEX_EXCEEDED","IS_CONCAT_SPREADABLE_SUPPORT","SPECIES_SUPPORT","isConcatSpreadable","spreadable","len","E","$map","DatePrototype","INVALID_DATE","nativeDateToString","NaN","nativeParseInt","parseInt","hex$1","_parseInt","radix","TO_STRING$1","RegExpPrototype","nativeToString","NOT_GENERIC","INCORRECT_NAME","_slicedToArray","_arrayWithHoles","_arr","_n","_d","_e","_s","_i","_iterableToArrayLimit","_nonIterableRest","_defineProperties","props","_createClass","protoProps","staticProps","sixDigitHex","substring","componentHex","component","round","is","space","getParameters","params","_a","_b","_c","h","hueToRgb","rf","Color","noWhitespace","_rgb$exec$slice$map","_rgb$exec$slice$map2","_a2","_b2","_c2","hexParse","_hex$exec$map","_hex$exec$map2","_a3","_b3","_c3","components","_b4","dToR","cos","sin","yL","xL","zL","ct","mx","nm","rU","gU","bU","bd","_h","_l","_c4","_y","_this$xyz","xyz","_this$rgb","_map2","rL","gL","bL","xU","yU","zU","_this$lab","lab","atan2","_this$rgb2","_map4","isGrey","_this$rgb3","_map6","_this$rgb4","_this$_clamped$map2","_clamped","toHex","_this$_clamped2","rV","gV","bV","color","_color4","_l2","_c5","_h2","_color5","_l3","_c6","_h3","_color6","_r3","_g3","_b7","_color7","_l4","_b8","_color8","grey","_color9","FAILS_ON_PRIMITIVES$1","_assertThisInitialized","ReferenceError","_possibleConstructorReturn","_getPrototypeOf","_get","property","receiver","Reflect","base","_superPropBase","_setPrototypeOf","_inherits","subClass","superClass","nativeMatch","matcher","matchStr","getOwnPropertyDescriptor$2","defineProperty$5","trim$1","NUMBER","NativeNumber","NumberPrototype","BROKEN_CLASSOF","toNumber","third","maxCode","digits","code","NumberWrapper","keys$1","trim$2","nativeParseFloat","_parseFloat","trimmedString","Point","clone","transformO","Matrix","isMatrixLike","closeEnough","threshold","fromArray","matrixify","multiplyO","formatTransforms","_transform","transformer","translateO","ry","lmultiplyO","scaleO","scaleX","scaleY","skewO","skewX","skewY","shearO","shear","rotateO","theta","px","py","dx","dy","tx","ty","originX","originY","sx","sy","lam","rotate","translateX","translateY","cx","cy","determinant","ccw","thetaRad","st","matrixMultiply","det","na","nb","nc","nd","ne","nf","inverseO","_this$clone","axis","around","flipO","lx","_this$clone2","tan","ly","skew","aroundO","other","comp","flipBoth","flip","flipX","flipY","positionX","positionY","relative","relativeX","relativeY","parser","nodes","body","addTo","isNulledBox","Box","w","x2","y2","xMin","Infinity","xMax","yMin","yMax","pageXOffset","pageYOffset","getBox","retry","contains","viewbox","level","getComputedStyle","getPropertyValue","zoomX","zoomY","zoomAmount","Number","MIN_VALUE","subClassArray","baseClass","_constructor","Arr","List","each","fnOrMethodName","toArray","reserved","baseFind","query","_len2","attrs","_key2","EventTarget","_Base","_this","_ref","_ref$events","Event","CustomEvent","cancelable","dispatchEvent","dispatch","defaultPrevented","noop","timeline","fill","stroke","opacity","offset","SVGArray","toSet","Set","SVGNumber","unit","number","hooks","Dom","_EventTarget","_this2","put","hasChildNodes","lastChild","writeDataToDom","cloneNode","deep","_id","matches","matchesSelector","msMatchesSelector","mozMatchesSelector","webkitMatchesSelector","oMatchesSelector","replaceChild","precision","factor","newAttrs","svgOrFn","outerHTML","well","fragment","current","createDocumentFragment","firstElementChild","text","attributes","nodeValue","curr","_val","hook","isColor","rebuild","findOne","_Dom","Element","dom","hasAttribute","setData","plus","_height","until","parents","_width","_x","rbox","screenCTM","addOffset","sugar","extension","mat","angle","direction","directionString","radius","_element","getTotalLength","pointAt","getPointAtLength","font","ax","ay","amove","nativeReverse","reverse","test$1","nativeGetOwnPropertyDescriptor$2","FAILS_ON_PRIMITIVES$2","_defineProperty","ownKeys$1","enumerableOnly","divide","getOwnPropertyDescriptors","untransform","kv","lmultiply","toParent","pCtm","toRoot","decomposed","decompose","_objectSpread","circled","Shape","_Element","Circle","_Shape","_rx","_ry","_size","Container","circle","move","flatten","ungroup","Defs","_Container","Ellipse","ellipse","Stop","fx","fy","x1","y1","to","gradiented","Gradient","update","url","gradient","Pattern","pattern","_this$defs","patternUnits","Image","img","image","load","PointArray","toLine","at","destination","points","pop","maxX","maxY","minX","minY","pointed","MorphArray","Line","line","plot","Marker","marker","ref","_marker","nativeSort","sort","test$2","FAILS_ON_UNDEFINED","FAILS_ON_NULL","SLOPPY_METHOD$2","makeSetterGetter","comparefn","easing","bezier","steps","_steps","stepPosition","jumps","beforeFlag","jumping","Stepper","Ease","_Stepper","ease","Controller","_Stepper2","stepper","dt","recalculate","duration","_duration","overshoot","_overshoot","os","zeta","wn","_Controller","Spring","_this3","velocity","acceleration","newPosition","_Controller2","PID","windup","_this4","integral","I","D","PathArray","pathRegReplace","pathHandlers","M","p0","L","H","Q","Z","mlhvqtcsaz","jl","arrayToString","equalCommands","pathArray","morph","sourceArray","destinationArray","paramCnt","Morphable","_stepper","_from","_to","_type","_context","_morphObj","_set","NonMorphable","morphableTypes","ObjectBag","TransformBag","defaults","objOrArr","Path","_array","poly","Polygon","polygon","Polyline","polyline","Rect","max$3","min$4","MAX_SAFE_INTEGER$1","MAXIMUM_ALLOWED_LENGTH_EXCEEDED","deleteCount","insertCount","actualDeleteCount","actualStart","Queue","_first","_last","item","Animator","nextDraw","frames","timeouts","immediates","timer","performance","frame","run","_draw","delay","time","immediate","cancelFrame","cancelImmediate","nextTimeout","lastTimeout","shift","nextFrame","lastFrame","nextImmediate","makeSchedule","runnerInfo","runner","defaultSource","Timeline","timeSource","_timeSource","_startTime","_speed","_persist","_nextFrame","_paused","_runners","_runnerIds","_lastRunnerId","_time","_lastSourceTime","_lastStepTime","_stepFn","_stepImmediate","when","absoluteStartTime","endTime","getEndTime","_runnerInfo","unschedule","persist","info","updateTime","_continue","lastRunnerInfo","lastDuration","lastEndTime","active","pause","getEndTimeOfTimeline","yes","currentSpeed","speed","positive","dtOrForever","immediateStep","dtSource","dtTime","fire","dtToStart","runnersLeft","_runnerInfo2","_runner","_dtToStart","finished","ownKeys$2","_objectSpread$1","_timeline","Runner","_queue","_isDeclarative","_history","enabled","_lastTime","_reseted","transformId","_haveReversed","_reverse","_loopsDone","_swing","_wait","_times","_frameId","_prepareRunner","sanitise","loop","schedule","times","swing","_delay","animate","initFn","runFn","retargetFn","isTransform","initialiser","retarget","initialised","queue","loopDuration","loopsDone","partial","swinging","backwards","uncliped","loops","swingForward","running","_lastPosition","justStarted","justFinished","declarative","_initialise","converged","_run","morpher","caller","play","extra","needsIt","positionOrDt","allfinished","FakeRunner","mergeWith","getRunnerTransform","mergeTransforms","netTransform","_transformationRunners","runners","merge","RunnerArray","ids","lastRunner","edit","newRunner","deleteCnt","clearTransformsFromQueue","_clearTransformRunnersBefore","currentRunner","clearBefore","_currentTransform","_addRunner","styleAttr","_tryRetarget","newLevel","_rememberMorpher","affine","isMatrix","currentAngle","startTransform","clearTransform","rTarget","rCurrent","possibilities","distances","shortest","affineParameters","addTransform","newTransforms","_queueNumber","_queueNumberDelta","dmove","newTo","_queueObject","Svg","_defs","nested","_Symbol","textable","plain","_build","createTextNode","getComputedTextLength","Text","_rebuild","_text","firstLine","newLined","build","tspan","newLine","blankLineOffset","fontSize","Tspan","_Text","_dx","_dy","ClipPath","targets","unclip","clip","clipWith","clipper","ForeignObject","foreignObject","G","child","group","_target","link","linkTo","Mask","unmask","ownKeys$3","_objectSpread$2","mask","maskWith","masker","Style","rule","fontFamily","addText","cssRule","fontface","TextPath","track","textPath","importNodes","Use","file","use","SVG","registerMorphableType","Segment","Length","Angle","segmentIndex","Vector","dot","vector","acos","distance","multiplyVectorScalar","vector1","vector2","scalar","angleInRadians","p1","p2","p3","console","subtractPoint","getAngleDegrees","UndoPoint","segments","labelOffsets","reversePaintIndiacator","Segments","LabelOffsets","Points","ReversePaintIndicator","segment","isString","isNullOrWhitespace","decimals","getParameterCaseInsensitive","GetAngleDegrees","GetLineAngle","GetLineAngle360","GetOffsetPoint","addVector","subtract","GetArcPoints","bendRadius","angle1","arcP2","arcOffset1","arcOffset2","offsetDiff","arcP1","lineAngle","a1","angle2","tp","line2Angle","tp1","a2","angle3","tp2","GetAngle","baseDirection","lineDirection","angleBetween","DirectionFromAngle","iOS","navigator","platform","isMobile","ssr","HORIZONTAL","NOOP","calc","ele","getOption","propName","def","getGutterSize","gutterSize","isFirst","isLast","gutterAlign","defaultGutterFn","gutterDirection","gut","defaultElementStyleFn","dim","gutSize","defaultGutterStyleFn","idsOption","dimension","clientAxis","positionEnd","clientSize","elements","parentStyle","parentFlexDirection","flexDirection","sizes","minSize","minSizes","expandToMin","snapOffset","dragInterval","cursor","gutter","elementStyle","gutterStyle","setElementSize","getMousePosition","adjust","percentage","drag","dragging","dragOffset","calculateSizes","aBounds","bBounds","trimToMin","sizesToTrim","parentSize","computedStyle","paddingLeft","paddingRight","paddingTop","paddingBottom","innerSize","excessPixels","toSpare","pixelSizes","pixelSize","elementGutterSize","elementMinSize","newPixelSize","takenPixels","stopDragging","userSelect","webkitUserSelect","MozUserSelect","pointerEvents","startDragging","button","pairs","adjustToMin","pair","temp","gutterElement","setGutterSize","computedSize","setSizes","newSizes","trimmed","newSize","collapse","preserveStyles","preserveGutter","SettingsManager","settingsUpdatedCallback","afterDraggingSeparator","ScaleFactor","me","updateDrawingObjects","localStorage","getItem","getOrientation","onDrag","onDragEnd","setItem","onresize","getSettings","writeValuesToInputs","saveSettings","getElementById","checked","backgroundColor","removeItem","resetSettings","showHideSettingsButton","innerText","updateUI","settingsObject","ProfileOnly","Snap","SnapPrecision","ShowPoint","PointSize","ShowPaintIndicator","ShowAngleLabels","AngleLabelLimit","ShowLengthLabels","LengthLabelLimit","BendRadius","GrayBackground","strJson","strSettings","innerWidth","innerHeight","InToIn","Inches","FtToIn","InToInDbl","InToFtDbl","inch","FtToInDbl","ftIn","CurC","Ft","Inch","Fr","Fr2","Fraction","Dec","DecIn","Feet","CurNum","cl","exit","Num","Lenlbl","startsWith","substr","FtToFt","t3","t1","t2","HtmlManager","container","TrimOptionsManager","_Name","_Length","_DescriptionIncludeColor","_DescriptionIncludeCoil","_BlankWidthText","_ReversePaintedSide","calculatePrice","_SelectedCoil","colors","Id","SelectedCoil","Colors","colorOption","Description","SelectedColor","selected","_SelectedColor","coil","calculateCustomTrimPrice","updatePrice","price","coilJsonData","coilObjects","coilObject","ProductColor","Coil","option","customTrimJson","customTrimObject","Name","DescriptionIncludeLength","DescriptionIncludeCoil","DescriptionIncludeColor","ReversePaintedSide","CoilName","ColorName","LengthText","getDescription","BlankWidthText","productColors","Code","_Id","_Code","_Description","_Colors","TrimDesigner","svgCircles","svgLines","svgPaths","linePoints","svgInsideArc","svgLabels","svgLenText","svgPaintLineShapes","svgText","isDragging","isPanning","isDrawing","pointBeforePan","pointAfterPan","_ReadOnly","stopDrawing","inputs","disabled","panZoomInstance","zoomLevel","ZoomScaleInverse","lengthSum","parentElement","oncontextmenu","onkeydown","ctrlKey","undo","redo","zoomToFit","stopPropagation","addUndoPoint","mySVG","makeDraggable","svgGroup","pt","tempCircle","initPanZoom","initSVG","initButtons","svgPanZoom","oldPan","newPan","svgP","getCenterOfTouch","hypot","startDrawing","dif","centerOfTouch","addPoint","ReadOnly","lastCircle","deleteCircle","touch1","touch2","t1Point","t2Point","LinePoint","midwayPoint","_calculateCustomTrimPrice","CalculateCustomTrimPrice","json","LoadCoils","equals","idx","CircleSize","dblclick","mouseover","mouseout","tappedTwice","cancelBubble","shape","label","drawTempObjects","drawLines","drawLineArcs","drawCircles","drawPaintLine","updateDataGrid","drawAngleLabel","BlankWidth","ShowPoints","highlightedInputs","getElementsByClassName","classList","tbody","getDataTable","tBodies","row","rows","scrollIntoView","focus","select","closestX","closestY","ZoomScale","LineWidth","drawCircle","mid","midPoint","arcP2Last","textPoint","drawLengthLabel","family","FontSize","blur","lineNumber","originalPoint","originalLabelPosition","isLongPressed","lineArc","angleArc","GetArcMidPoint","xoffSet","yoffSet","toFixed","touchDuration","arcSize","lastLine","Start","End","drawArc","lastPoint","poffset","startPoint","endPoint","paintLine","dasharray","IsInsideArc","arcRadius","cnt","lastAngle","template","seg","insertRow","rowClone","importNode","content","dataTableChanged","btn","onclick","tr","closest","emptyRow","clearDatagrid","qbItem","itemObject","clearTrim","colorId","coilId","trimId","loadCustomTrimOptions","trimJson","getJson","trimJsonData","trimObject","loadSegments","dhw","targetWidth","targetHeight","labelOffsetStrings","xy","coilName","colorName","includeLength","includeCoil","includeColor","CoilId","ColorId","lengthInput","angleInput","getAngleFromString","nseg","endsWith","pitch","degrees","atan","directionFromAngle","tempPoint","viewBoxX","viewBoxY","gs","createLine","strokeWidth","touch","changedTouches","coord","selectedElement","startDrag","endDrag","mouseOffset","elementTagName","localName","dataset","offsetP","newP","np","subtractVector","MovePoint","oldP","moveDistance","drawTempMovingObject","activeInput","activeElement","inputTag","newLabelPoint","oldLabelOffset","newLabelOffset","priorPoints","snapDistance","undoPoint","restoreUndoPoint","startStopDrawingButton","undoButton","redoButton","zoomToFitButton","arc","td","initTrimDesigner","getThumbNailSVG","CreateThumbNailSVG","onload","__webpack_module_cache__","__webpack_require__","moduleId","__webpack_modules__","definition","toStringTag"],"mappings":"CAAA,SAA2CA,EAAMC,GAC1B,iBAAZC,SAA0C,iBAAXC,OACxCA,OAAOD,QAAUD,IACQ,mBAAXG,QAAyBA,OAAOC,IAC9CD,OAAO,iBAAkB,GAAIH,GACH,iBAAZC,QACdA,QAAwB,eAAID,IAE5BD,EAAqB,eAAIC,IAR3B,CASGK,MAAM,WACT,M,2BCVA,IAAIC,EAAa,EAAQ,IAEzBJ,EAAOD,QAAUK,G,cCFjB,IAAIC,EAAW,EAAQ,KAEvBL,EAAOD,QAAU,CACfO,OAAQ,SAASC,GAEf,IAAIC,EAAOD,EAASE,IAAIC,cAAc,QAQtC,GAPKF,IACHA,EAAOG,SAASC,gBAAgBP,EAASQ,MAAO,QAChDN,EAASE,IAAIK,YAAYN,KAIbA,EAAKE,cAAc,sCACnB,CACZ,IAAIK,EAAQJ,SAASC,gBAAgBP,EAASQ,MAAO,SACrDE,EAAMC,aAAa,KAAM,gCACzBD,EAAMC,aAAa,OAAQ,YAC3BD,EAAME,YACJ,+PACFT,EAAKM,YAAYC,GAInB,IAAIG,EAAYP,SAASC,gBAAgBP,EAASQ,MAAO,KACzDK,EAAUF,aAAa,KAAM,yBAC7BE,EAAUF,aACR,YACA,cACGT,EAASY,MAAQ,IAClB,KACCZ,EAASa,OAAS,IACnB,iBAEJF,EAAUF,aAAa,QAAS,wBAGhCE,EAAUJ,YAAYO,KAAKC,cAAcf,IACzCW,EAAUJ,YAAYO,KAAKE,iBAAiBhB,IAC5CW,EAAUJ,YAAYO,KAAKG,eAAejB,IAG1CA,EAASE,IAAIK,YAAYI,GAGzBX,EAASkB,aAAeP,GAG1BI,cAAe,SAASf,GACtB,IAAImB,EAASf,SAASC,gBAAgBP,EAASQ,MAAO,KACtDa,EAAOV,aAAa,KAAM,wBAC1BU,EAAOV,aAAa,YAAa,kCACjCU,EAAOV,aAAa,QAAS,wBAC7BU,EAAOC,iBACL,SACA,WACEpB,EAASqB,oBAAoBF,YAE/B,GAEFA,EAAOC,iBACL,cACA,WACEpB,EAASqB,oBAAoBF,YAE/B,GAGF,IAAIG,EAAmBlB,SAASC,gBAAgBP,EAASQ,MAAO,QAChEgB,EAAiBb,aAAa,IAAK,KACnCa,EAAiBb,aAAa,IAAK,KACnCa,EAAiBb,aAAa,QAAS,QACvCa,EAAiBb,aAAa,SAAU,QACxCa,EAAiBb,aAAa,QAAS,mCACvCU,EAAOZ,YAAYe,GAEnB,IAAIC,EAAcnB,SAASC,gBAAgBP,EAASQ,MAAO,QAQ3D,OAPAiB,EAAYd,aACV,IACA,wXAEFc,EAAYd,aAAa,QAAS,gCAClCU,EAAOZ,YAAYgB,GAEZJ,GAGTH,iBAAkB,SAAShB,GAEzB,IAAIwB,EAAsBpB,SAASC,gBAAgBP,EAASQ,MAAO,KACnEkB,EAAoBf,aAAa,KAAM,+BACvCe,EAAoBf,aAAa,YAAa,8BAC9Ce,EAAoBf,aAAa,QAAS,wBAC1Ce,EAAoBJ,iBAClB,SACA,WACEpB,EAASqB,oBAAoBI,WAE/B,GAEFD,EAAoBJ,iBAClB,cACA,WACEpB,EAASqB,oBAAoBI,WAE/B,GAGF,IAAIC,EAAgCtB,SAASC,gBAC3CP,EAASQ,MACT,QAEFoB,EAA8BjB,aAAa,IAAK,KAChDiB,EAA8BjB,aAAa,IAAK,KAChDiB,EAA8BjB,aAAa,QAAS,OACpDiB,EAA8BjB,aAAa,SAAU,MACrDiB,EAA8BjB,aAC5B,QACA,mCAEFe,EAAoBjB,YAAYmB,GAEhC,IAAIC,EAA4BvB,SAASC,gBACvCP,EAASQ,MACT,QAEFqB,EAA0BlB,aACxB,IACA,yLAEFkB,EAA0BlB,aACxB,QACA,gCAEFe,EAAoBjB,YAAYoB,GAEhC,IAAIC,EAA4BxB,SAASC,gBACvCP,EAASQ,MACT,QAYF,OAVAsB,EAA0BnB,aACxB,IACA,wzDAEFmB,EAA0BnB,aACxB,QACA,gCAEFe,EAAoBjB,YAAYqB,GAEzBJ,GAGTP,eAAgB,SAASjB,GAEvB,IAAI6B,EAAUzB,SAASC,gBAAgBP,EAASQ,MAAO,KACvDuB,EAAQpB,aAAa,KAAM,yBAC3BoB,EAAQpB,aAAa,YAAa,mCAClCoB,EAAQpB,aAAa,QAAS,wBAC9BoB,EAAQT,iBACN,SACA,WACEpB,EAASqB,oBAAoBQ,aAE/B,GAEFA,EAAQT,iBACN,cACA,WACEpB,EAASqB,oBAAoBQ,aAE/B,GAGF,IAAIC,EAAoB1B,SAASC,gBAAgBP,EAASQ,MAAO,QACjEwB,EAAkBrB,aAAa,IAAK,KACpCqB,EAAkBrB,aAAa,IAAK,KACpCqB,EAAkBrB,aAAa,QAAS,QACxCqB,EAAkBrB,aAAa,SAAU,QACzCqB,EAAkBrB,aAAa,QAAS,mCACxCoB,EAAQtB,YAAYuB,GAEpB,IAAIC,EAAe3B,SAASC,gBAAgBP,EAASQ,MAAO,QAQ5D,OAPAyB,EAAatB,aACX,IACA,sQAEFsB,EAAatB,aAAa,QAAS,gCACnCoB,EAAQtB,YAAYwB,GAEbF,GAGTG,QAAS,SAAShC,GACZA,EAASkB,eACXlB,EAASkB,aAAae,WAAWC,YAAYlC,EAASkB,cACtDlB,EAASkB,aAAe,S,aCnM9B,IAAIpB,EAAW,EAAQ,KACrBqC,EAAQ,EAAQ,KAEdC,EAAiB,SAASC,EAAUC,GACtCxB,KAAKyB,KAAKF,EAAUC,IAStBF,EAAeI,UAAUD,KAAO,SAASF,EAAUC,GAEjDxB,KAAKuB,SAAWA,EAChBvB,KAAKwB,QAAUA,EAGfxB,KAAK2B,cAAgB,CAAEC,KAAM,EAAGC,EAAG,EAAGC,EAAG,GACzC9B,KAAK+B,YAAc,CAAEH,KAAM,EAAGC,EAAG,EAAGC,EAAG,GAEvC9B,KAAKgC,gBAAkBX,EAAMY,MAAMjC,KAAKkC,UAAWlC,MAGnDA,KAAKmC,sBAAwBd,EAAMe,4BACjCpC,KAAKwB,QAAQa,aAIfrC,KAAKsC,QAAU,CAAET,EAAG,EAAGC,EAAG,EAAGhC,MAAO,EAAGC,OAAQ,GAC/CC,KAAKuC,eAGL,IAAIC,EAASxC,KAAKyC,aAGlBzC,KAAK0C,OAAOF,GAGZxC,KAAKkC,aAOPZ,EAAeI,UAAUa,aAAe,WACtC,IAAII,EAAa3C,KAAKwB,QAAQpC,IAAIwD,aAAa,WAE/C,GAAID,EAAY,CACd,IAAIE,EAAgBF,EACjBG,MAAM,UACNC,QAAO,SAASC,GACf,OAAOA,KAERC,IAAIC,YAGPlD,KAAKsC,QAAQT,EAAIgB,EAAc,GAC/B7C,KAAKsC,QAAQR,EAAIe,EAAc,GAC/B7C,KAAKsC,QAAQxC,MAAQ+C,EAAc,GACnC7C,KAAKsC,QAAQvC,OAAS8C,EAAc,GAEpC,IAAIjB,EAAOuB,KAAKC,IACdpD,KAAKwB,QAAQ1B,MAAQE,KAAKsC,QAAQxC,MAClCE,KAAKwB,QAAQzB,OAASC,KAAKsC,QAAQvC,QAIrCC,KAAK+B,YAAYH,KAAOA,EACxB5B,KAAK+B,YAAYF,GAAK7B,KAAKwB,QAAQ1B,MAAQE,KAAKsC,QAAQxC,MAAQ8B,GAAQ,EACxE5B,KAAK+B,YAAYD,GAAK9B,KAAKwB,QAAQzB,OAASC,KAAKsC,QAAQvC,OAAS6B,GAAQ,EAG1E5B,KAAKqD,uBAELrD,KAAKwB,QAAQpC,IAAIkE,gBAAgB,gBAEjCtD,KAAKuD,sBAOTjC,EAAeI,UAAU6B,mBAAqB,WAC5C,IAAIC,EAAOxD,KAAKuB,SAASkC,UAEzBzD,KAAKsC,QAAQT,EAAI2B,EAAK3B,EACtB7B,KAAKsC,QAAQR,EAAI0B,EAAK1B,EACtB9B,KAAKsC,QAAQxC,MAAQ0D,EAAK1D,MAC1BE,KAAKsC,QAAQvC,OAASyD,EAAKzD,QAQ7BuB,EAAeI,UAAUgC,WAAa,WACpC,OAAOrC,EAAMsC,OAAO,GAAI3D,KAAKsC,UAS/BhB,EAAeI,UAAUe,WAAa,WACpC,IAGMmB,EAHFpB,EAASxC,KAAK6D,SAsBlB,IApBI7D,KAAKwB,QAAQsC,KAAO9D,KAAKwB,QAAQuC,WAGjCH,EADE5D,KAAKwB,QAAQsC,IACJX,KAAKC,IACdpD,KAAKwB,QAAQ1B,MAAQE,KAAKsC,QAAQxC,MAClCE,KAAKwB,QAAQzB,OAASC,KAAKsC,QAAQvC,QAG1BoD,KAAKa,IACdhE,KAAKwB,QAAQ1B,MAAQE,KAAKsC,QAAQxC,MAClCE,KAAKwB,QAAQzB,OAASC,KAAKsC,QAAQvC,QAIvCyC,EAAOyB,EAAIL,EACXpB,EAAO0B,EAAIN,EACXpB,EAAO2B,GAAKnE,KAAKsC,QAAQT,EAAI+B,EAC7BpB,EAAO4B,GAAKpE,KAAKsC,QAAQR,EAAI8B,GAG3B5D,KAAKwB,QAAQ6C,OAAQ,CACvB,IAAIC,EAGA,IAFCtE,KAAKwB,QAAQ1B,OACXE,KAAKsC,QAAQxC,MAAyB,EAAjBE,KAAKsC,QAAQT,GAASW,EAAOyB,GAEvDM,EAGE,IAFCvE,KAAKwB,QAAQzB,QACXC,KAAKsC,QAAQvC,OAA0B,EAAjBC,KAAKsC,QAAQR,GAASU,EAAOyB,GAG1DzB,EAAO2B,EAAIG,EACX9B,EAAO4B,EAAIG,EAQb,OAJAvE,KAAK2B,cAAcC,KAAOY,EAAOyB,EACjCjE,KAAK2B,cAAcE,EAAIW,EAAO2B,EAC9BnE,KAAK2B,cAAcG,EAAIU,EAAO4B,EAEvB5B,GAQTlB,EAAeI,UAAU8C,iBAAmB,WAC1C,OAAOnD,EAAMsC,OAAO,GAAI3D,KAAK2B,gBAQ/BL,EAAeI,UAAU+C,SAAW,WAClC,OAAOpD,EAAMsC,OAAO,GAAI3D,KAAK+B,cAQ/BT,EAAeI,UAAUgD,QAAU,WACjC,OAAO1E,KAAK+B,YAAYH,MAQ1BN,EAAeI,UAAUiD,gBAAkB,WACzC,OAAO3E,KAAK+B,YAAYH,KAAO5B,KAAK2B,cAAcC,MAQpDN,EAAeI,UAAUkD,oBAAsB,SAASC,GACtD,OAAOA,EAAQ7E,KAAK2B,cAAcC,MAQpCN,EAAeI,UAAUoD,OAAS,WAChC,MAAO,CAAEjD,EAAG7B,KAAK+B,YAAYF,EAAGC,EAAG9B,KAAK+B,YAAYD,IAQtDR,EAAeI,UAAUmC,OAAS,WAChC,IAAIkB,EAAU/E,KAAKwB,QAAQpC,IAAI4F,kBAU/B,OAPAD,EAAQd,EAAIjE,KAAK+B,YAAYH,KAC7BmD,EAAQE,EAAI,EACZF,EAAQG,EAAI,EACZH,EAAQb,EAAIlE,KAAK+B,YAAYH,KAC7BmD,EAAQZ,EAAInE,KAAK+B,YAAYF,EAC7BkD,EAAQX,EAAIpE,KAAK+B,YAAYD,EAEtBiD,GAQTzD,EAAeI,UAAUgB,OAAS,SAASF,GACzC,IAAI2C,EAAWnF,KAAKoF,gBAAgB5C,GAClC6C,EAAUrF,KAAKsF,eAAe9C,GAEhC,GAAI2C,GAAYE,EAAS,CAmBvB,GAjBIF,KAMM,IAHNnF,KAAKwB,QAAQ+D,WACXvF,KAAK2E,kBACL3E,KAAK4E,oBAAoBpC,EAAOyB,KAGlCzB,EAAOyB,EAAIzB,EAAO0B,EAAIlE,KAAK+B,YAAYH,KACvCuD,GAAW,IAEXnF,KAAKwF,YAAYhD,GACjBxC,KAAKwB,QAAQiE,OAAOzF,KAAK2E,qBAKzBU,EAAS,CACX,IAAIK,EAAa1F,KAAKwB,QAAQmE,UAAU3F,KAAK8E,SAAU,CACnDjD,EAAGW,EAAO2B,EACVrC,EAAGU,EAAO4B,IAGZwB,GAAc,EACdC,GAAc,GAGG,IAAfH,GAEFlD,EAAO2B,EAAInE,KAAK8E,SAASjD,EACzBW,EAAO4B,EAAIpE,KAAK8E,SAAShD,EAEzB8D,EAAcC,GAAc,GACnBxE,EAAMyE,SAASJ,MAEH,IAAjBA,EAAW7D,GAEbW,EAAO2B,EAAInE,KAAK8E,SAASjD,EACzB+D,GAAc,GACLvE,EAAM0E,SAASL,EAAW7D,KAEnCW,EAAO2B,EAAIuB,EAAW7D,IAIH,IAAjB6D,EAAW5D,GAEbU,EAAO4B,EAAIpE,KAAK8E,SAAShD,EACzB+D,GAAc,GACLxE,EAAM0E,SAASL,EAAW5D,KAEnCU,EAAO4B,EAAIsB,EAAW5D,IAMrB8D,GAAeC,IAAiB7F,KAAKsF,eAAe9C,GACvD6C,GAAU,GAEVrF,KAAKwF,YAAYhD,GACjBxC,KAAKwB,QAAQwE,MAAMhG,KAAK8E,YAKxBK,GAAYE,IACdrF,KAAKqD,yBAKX/B,EAAeI,UAAU0D,gBAAkB,SAAS5C,GAClD,OAAOxC,KAAK+B,YAAYH,OAASY,EAAOyB,GAG1C3C,EAAeI,UAAU4D,eAAiB,SAAS9C,GACjD,OAAOxC,KAAK+B,YAAYF,IAAMW,EAAO2B,GAAKnE,KAAK+B,YAAYD,IAAMU,EAAO4B,GAQ1E9C,EAAeI,UAAU8D,YAAc,SAAShD,GAC9CxC,KAAK+B,YAAYH,KAAOY,EAAOyB,EAC/BjE,KAAK+B,YAAYF,EAAIW,EAAO2B,EAC5BnE,KAAK+B,YAAYD,EAAIU,EAAO4B,GAG9B9C,EAAeI,UAAUuE,eAAgB,EAKzC3E,EAAeI,UAAU2B,qBAAuB,WACzCrD,KAAKiG,gBAERjG,KAAKiG,eAAgB,EAGrBjG,KAAKmC,sBAAsB+D,KAAKC,OAAQnG,KAAKgC,mBAOjDV,EAAeI,UAAUQ,UAAY,WACnC,IAAIkE,EAAMpG,KAAK6D,SAGf7E,EAAS0D,OAAO1C,KAAKuB,SAAU6E,EAAKpG,KAAKb,MAGzCa,KAAKiG,eAAgB,EAGjBjG,KAAKwB,QAAQ6E,cACfrG,KAAKwB,QAAQ6E,aAAaD,IAI9BzH,EAAOD,QAAU,SAAS6C,EAAUC,GAClC,OAAO,IAAIF,EAAeC,EAAUC,K,aC5WtC,IAAI8E,EAAQ,EAAQ,KAClBC,EAAe,EAAQ,KACvBlF,EAAQ,EAAQ,KAChBrC,EAAW,EAAQ,KACnBsC,EAAiB,EAAQ,IAEvBvC,EAAa,SAASK,EAAKoC,GAC7BxB,KAAKyB,KAAKrC,EAAKoC,IAGbgF,EAAkB,CACpBC,iBAAkB,yBAClBC,YAAY,EACZC,qBAAqB,EACrBC,aAAa,EACbC,qBAAqB,EACrBC,uBAAuB,EACvBC,2BAA2B,EAC3BC,qBAAsB,GACtBC,QAAS,GACTC,QAAS,GACTpD,KAAK,EACLC,SAAS,EACTM,QAAQ,EACRhC,YAAa,OACbkD,WAAY,KACZE,OAAQ,KACRE,UAAW,KACXK,MAAO,KACPmB,oBAAqB,KACrBC,sBAAuB,KACvBf,aAAc,MAGZgB,EAAwB,CAAEC,SAAS,GAEvCvI,EAAW2C,UAAUD,KAAO,SAASrC,EAAKoC,GACxC,IAAI+F,EAAOvH,KAEXA,KAAKZ,IAAMA,EACXY,KAAKb,KAAOC,EAAIC,cAAc,QAG9BL,EAASwI,mBAAmBxH,KAAKZ,KAGjCY,KAAKwB,QAAUH,EAAMsC,OAAOtC,EAAMsC,OAAO,GAAI6C,GAAkBhF,GAG/DxB,KAAKyH,MAAQ,OAGb,IAAIC,EAA+B1I,EAAS2I,gCAC1CvI,GAEFY,KAAKF,MAAQ4H,EAA6B5H,MAC1CE,KAAKD,OAAS2H,EAA6B3H,OAG3CC,KAAKuB,SAAWD,EACdtC,EAAS4I,oBAAoB5H,KAAKZ,IAAKY,KAAKwB,QAAQiF,kBACpD,CACErH,IAAKY,KAAKZ,IACVU,MAAOE,KAAKF,MACZC,OAAQC,KAAKD,OACb+D,IAAK9D,KAAKwB,QAAQsC,IAClBC,QAAS/D,KAAKwB,QAAQuC,QACtBM,OAAQrE,KAAKwB,QAAQ6C,OACrBhC,YAAarC,KAAKwB,QAAQa,YAE1BkD,WAAY,SAASsC,EAAUjE,GAC7B,GAAI2D,EAAKhG,UAAYgG,EAAK/F,QAAQ+D,WAChC,OAAOgC,EAAK/F,QAAQ+D,WAAWsC,EAAUjE,IAG7C6B,OAAQ,SAASZ,GACf,GAAI0C,EAAKhG,UAAYgG,EAAK/F,QAAQiE,OAChC,OAAO8B,EAAK/F,QAAQiE,OAAOZ,IAG/Bc,UAAW,SAASmC,EAAUC,GAC5B,GAAIR,EAAKhG,UAAYgG,EAAK/F,QAAQmE,UAChC,OAAO4B,EAAK/F,QAAQmE,UAAUmC,EAAUC,IAG5C/B,MAAO,SAASgC,GACd,GAAIT,EAAKhG,UAAYgG,EAAK/F,QAAQwE,MAChC,OAAOuB,EAAK/F,QAAQwE,MAAMgC,IAG9B3B,aAAc,SAASD,GACrB,GAAImB,EAAKhG,UAAYgG,EAAK/F,QAAQ6E,aAChC,OAAOkB,EAAK/F,QAAQ6E,aAAaD,MAOzC,IAAI6B,EAAiBjI,KAAKO,oBAC1B0H,EAAeC,cAAclI,KAAKwB,QAAQ+D,YAC1C0C,EAAeE,UAAUnI,KAAKwB,QAAQiE,QACtCwC,EAAeG,aAAapI,KAAKwB,QAAQmE,WACzCsC,EAAeI,SAASrI,KAAKwB,QAAQwE,OACrCiC,EAAeK,gBAAgBtI,KAAKwB,QAAQ6E,cAExCrG,KAAKwB,QAAQmF,qBACfJ,EAAatH,OAAOe,MAItBA,KAAKuI,wBAA0BC,KAAKC,MACpCzI,KAAK0I,iBAMP3J,EAAW2C,UAAUgH,cAAgB,WACnC,IAAInB,EAAOvH,KACT2I,EAAU,KA6CZ,GA3CA3I,KAAK4I,eAAiB,CAEpBC,UAAW,SAASC,GAClB,IAAIC,EAASxB,EAAKyB,gBAAgBF,EAAKH,GAEvC,OADAA,EAAUG,EACHC,GAETE,WAAY,SAASH,GACnB,IAAIC,EAASxB,EAAKyB,gBAAgBF,EAAKH,GAEvC,OADAA,EAAUG,EACHC,GAITG,QAAS,SAASJ,GAChB,OAAOvB,EAAK4B,cAAcL,IAE5BM,SAAU,SAASN,GACjB,OAAOvB,EAAK4B,cAAcL,IAI5BO,UAAW,SAASP,GAClB,OAAOvB,EAAK+B,gBAAgBR,IAE9BS,UAAW,SAAST,GAClB,OAAOvB,EAAK+B,gBAAgBR,IAI9BU,WAAY,SAASV,GACnB,OAAOvB,EAAK4B,cAAcL,IAE5BW,WAAY,SAASX,GACnB,OAAOvB,EAAK4B,cAAcL,IAE5BY,YAAa,SAASZ,GACpB,OAAOvB,EAAK4B,cAAcL,KAMU,MAApC9I,KAAKwB,QAAQ2F,oBAA6B,CAC5CnH,KAAKwB,QAAQ2F,oBAAoB1F,KAAK,CACpCkI,WAAY3J,KAAKZ,IACjBgI,sBAAuBpH,KAAKwB,QAAQ4F,sBACpClI,SAAUc,KAAKO,sBAIjB,IAAIqJ,EAAqB5J,KAAKwB,QAAQ2F,oBACnCyC,mBACH,GAAIA,GAAsBA,EAAmBC,OAC3C,IAAK,IAAIC,EAAIF,EAAmBC,OAAS,EAAGC,GAAK,EAAGA,IAC9C9J,KAAK4I,eAAemB,eAAeH,EAAmBE,YACjD9J,KAAK4I,eAAegB,EAAmBE,IAOtD,IAAK,IAAIE,KAAShK,KAAK4I,gBAEpB5I,KAAKwB,QAAQ4F,uBAAyBpH,KAAKZ,KAAKkB,iBAC/C0J,EACAhK,KAAK4I,eAAeoB,IACnBhK,KAAKwB,QAAQuF,2BAA4BM,GAK1CrH,KAAKwB,QAAQsF,wBACf9G,KAAKwB,QAAQsF,uBAAwB,EACrC9G,KAAKiK,yBAOTlL,EAAW2C,UAAUuI,qBAAuB,WAC1C,IAAKjK,KAAKwB,QAAQsF,sBAAuB,CACvC,IAAIS,EAAOvH,KAGXA,KAAKkK,cAAgB,SAASpB,GAC5B,OAAOvB,EAAK4C,iBAAiBrB,IAI/B,IAAIsB,GAAqBpK,KAAKwB,QAAQuF,0BACtCT,EAAM+D,GACJrK,KAAKwB,QAAQ4F,uBAAyBpH,KAAKZ,IAC3CY,KAAKkK,cACLE,GAGFpK,KAAKwB,QAAQsF,uBAAwB,IAOzC/H,EAAW2C,UAAU4I,sBAAwB,WAC3C,GAAItK,KAAKwB,QAAQsF,sBAAuB,CACtC,IAAIsD,GAAqBpK,KAAKwB,QAAQuF,0BACtCT,EAAMiE,IACJvK,KAAKwB,QAAQ4F,uBAAyBpH,KAAKZ,IAC3CY,KAAKkK,cACLE,GAEFpK,KAAKwB,QAAQsF,uBAAwB,IASzC/H,EAAW2C,UAAUyI,iBAAmB,SAASrB,GAC/C,GAAK9I,KAAKwB,QAAQoF,aAA8B,SAAf5G,KAAKyH,MAAtC,CAIIzH,KAAKwB,QAAQuF,4BACX+B,EAAI0B,eACN1B,EAAI0B,iBAEJ1B,EAAI2B,aAAc,GAKtB,IAAIC,EAAQ5B,EAAI6B,QAAU,EACxBC,EAAYpC,KAAKC,MAAQzI,KAAKuI,wBAC9BsC,EAAU,EAAI1H,KAAKa,IAAI,EAAG,GAAK4G,GAGjC5K,KAAKuI,wBAA0BC,KAAKC,MAGhC,cAAeK,GAAyB,IAAlBA,EAAIgC,WAAmBhC,EAAIiC,aACnDL,EAAuB,IAAf5B,EAAI6B,OAAe,EAAIxH,KAAK6H,IAAIlC,EAAIiC,YAAcjC,EAAI6B,QAGhED,GACG,GAAMA,GAASA,EAAQ,GACpBA,GACEA,EAAQ,EAAI,GAAK,GAAKvH,KAAK8H,IAAI9H,KAAK6H,IAAIN,GAAS,IAAOG,EAEhE,IAAIK,EAAoBlL,KAAKZ,IAAI+L,eAAeC,UAC9CC,EAAqBrM,EAASsM,cAAcxC,EAAK9I,KAAKZ,KAAKmM,gBACzDL,GAEFtJ,EAAOuB,KAAKqI,IAAI,EAAIxL,KAAKwB,QAAQwF,sBAAuB,EAAI0D,GAE9D1K,KAAKyL,YAAY7J,EAAMyJ,KAWzBtM,EAAW2C,UAAU+J,YAAc,SAASC,EAAW1D,EAAO2D,GAC5D,IAAIhK,EAAgB3B,KAAKuB,SAASiD,mBAE7BmH,GAeHD,EAAYvI,KAAKa,IACfhE,KAAKwB,QAAQyF,QAAUtF,EAAcC,KACrCuB,KAAKC,IAAIpD,KAAKwB,QAAQ0F,QAAUvF,EAAcC,KAAM8J,IAGtDA,GAAwB1L,KAAK0E,WAjB3B1E,KAAK0E,UAAYgH,EACjB1L,KAAKwB,QAAQyF,QAAUtF,EAAcC,KAErC8J,EAAa1L,KAAKwB,QAAQyF,QAAUtF,EAAcC,KAAQ5B,KAAK0E,UAE/D1E,KAAK0E,UAAYgH,EACjB1L,KAAKwB,QAAQ0F,QAAUvF,EAAcC,OAErC8J,EAAa1L,KAAKwB,QAAQ0F,QAAUvF,EAAcC,KAAQ5B,KAAK0E,WAYnE,IAAIkH,EAAS5L,KAAKuB,SAASsC,SACzBgI,EAAgB7D,EAAMuD,gBAAgBK,EAAOR,WAC7CU,EAAW9L,KAAKZ,IACb4F,kBACA+G,UAAUF,EAAchK,EAAGgK,EAAc/J,GACzC+C,MAAM6G,GACNK,WAAWF,EAAchK,GAAIgK,EAAc/J,GAC9CU,EAASoJ,EAAOI,SAASF,GAEvBtJ,EAAOyB,IAAM2H,EAAO3H,GACtBjE,KAAKuB,SAASmB,OAAOF,IAUzBzD,EAAW2C,UAAUE,KAAO,SAASiD,EAAOoH,GAC1CjM,KAAKyL,YACH5G,EACA7F,EAASkN,kBAAkBlM,KAAKZ,IAAKY,KAAKF,MAAOE,KAAKD,QACtDkM,IAUJlN,EAAW2C,UAAUyK,WAAa,SAAStH,EAAOoH,GAC5CA,IACFpH,EAAQ7E,KAAKoM,wBAAwBvH,IAGvC7E,KAAK4B,KAAKiD,EAAOoH,IAUnBlN,EAAW2C,UAAU2K,kBAAoB,SAASxH,EAAOmD,EAAOiE,GAO9D,GANIA,IAEFpH,EAAQ7E,KAAKoM,wBAAwBvH,IAIV,aAAzBxD,EAAMiL,QAAQtE,GAAuB,CACvC,KAAI,MAAOA,MAAS,MAAOA,GAGzB,MAAM,IAAIuE,MAAM,0BAFhBvE,EAAQhJ,EAASwN,eAAexM,KAAKZ,IAAK4I,EAAMnG,EAAGmG,EAAMlG,GAM7D9B,KAAKyL,YAAY5G,EAAOmD,EAAOiE,IAQjClN,EAAW2C,UAAUgD,QAAU,WAC7B,OAAO1E,KAAKuB,SAASmD,WAQvB3F,EAAW2C,UAAUiD,gBAAkB,WACrC,OAAO3E,KAAKuB,SAASoD,mBASvB5F,EAAW2C,UAAU0K,wBAA0B,SAASxK,GACtD,OAAOA,EAAO5B,KAAKuB,SAASiD,mBAAmB5C,MAMjD7C,EAAW2C,UAAU+K,UAAY,WAC/B,IAAI9K,EAAgB3B,KAAKuB,SAASiD,mBAElCxE,KAAK4B,KAAKD,EAAcC,MAAM,IAMhC7C,EAAW2C,UAAUgL,SAAW,WAC9B1M,KAAK2M,IAAI3M,KAAKuB,SAASiD,qBAMzBzF,EAAW2C,UAAUf,MAAQ,WAC3BX,KAAKyM,YACLzM,KAAK0M,YASP3N,EAAW2C,UAAUkL,eAAiB,SAAS9D,GAW3C,IAME+D,EAPJ,GATI7M,KAAKwB,QAAQuF,4BACX+B,EAAI0B,eACN1B,EAAI0B,iBAEJ1B,EAAI2B,aAAc,GAKlBzK,KAAKwB,QAAQmF,sBACGmC,EAAIgE,OAAOlK,aAAa,UAAY,IACtCmK,QAAQ,yBAA2B,EACjD,OAAO,EAOTF,EADE/D,EAAIkE,SACO,GAA+C,GAAzC,EAAIhN,KAAKwB,QAAQwF,uBAEmB,GAAzC,EAAIhH,KAAKwB,QAAQwF,sBAGjC,IAAIgB,EAAQhJ,EAASsM,cAAcxC,EAAK9I,KAAKZ,KAAKmM,gBAChDvL,KAAKZ,IAAI+L,eAAeC,WAE1BpL,KAAKyL,YAAYoB,EAAY7E,IAQ/BjJ,EAAW2C,UAAUsH,gBAAkB,SAASF,EAAKH,GAC/C3I,KAAKwB,QAAQuF,4BACX+B,EAAI0B,eACN1B,EAAI0B,iBAEJ1B,EAAI2B,aAAc,GAItBpJ,EAAM4L,uBAAuBnE,EAAK9I,KAAKZ,KAGnCY,KAAKwB,QAAQqF,qBAAuBxF,EAAM6L,WAAWpE,EAAKH,GAC5D3I,KAAK4M,eAAe9D,IAGpB9I,KAAKyH,MAAQ,MACbzH,KAAKmN,cAAgBnN,KAAKuB,SAASsC,SACnC7D,KAAKoN,YAAcpO,EAASsM,cAAcxC,EAAK9I,KAAKZ,KAAKmM,gBACvDvL,KAAKmN,cAAc/B,aAUzBrM,EAAW2C,UAAU4H,gBAAkB,SAASR,GAS9C,GARI9I,KAAKwB,QAAQuF,4BACX+B,EAAI0B,eACN1B,EAAI0B,iBAEJ1B,EAAI2B,aAAc,GAIH,QAAfzK,KAAKyH,OAAmBzH,KAAKwB,QAAQkF,WAAY,CAEnD,IAAIsB,EAAQhJ,EAASsM,cAAcxC,EAAK9I,KAAKZ,KAAKmM,gBAC9CvL,KAAKmN,cAAc/B,WAErBiC,EAAcrN,KAAKmN,cAAcpB,UAC/B/D,EAAMnG,EAAI7B,KAAKoN,YAAYvL,EAC3BmG,EAAMlG,EAAI9B,KAAKoN,YAAYtL,GAG/B9B,KAAKuB,SAASmB,OAAO2K,KASzBtO,EAAW2C,UAAUyH,cAAgB,SAASL,GACxC9I,KAAKwB,QAAQuF,4BACX+B,EAAI0B,eACN1B,EAAI0B,iBAEJ1B,EAAI2B,aAAc,GAIH,QAAfzK,KAAKyH,QAEPzH,KAAKyH,MAAQ,SAQjB1I,EAAW2C,UAAUoC,IAAM,WACzB,IAAIxB,EAAUtC,KAAKuB,SAASmC,aAC1BE,EAAWT,KAAKC,IACdpD,KAAKF,MAAQwC,EAAQxC,MACrBE,KAAKD,OAASuC,EAAQvC,QAG1BC,KAAK4B,KAAKgC,GAAU,IAOtB7E,EAAW2C,UAAUqC,QAAU,WAC7B,IAAIzB,EAAUtC,KAAKuB,SAASmC,aAC1BE,EAAWT,KAAKa,IACdhE,KAAKF,MAAQwC,EAAQxC,MACrBE,KAAKD,OAASuC,EAAQvC,QAG1BC,KAAK4B,KAAKgC,GAAU,IAOtB7E,EAAW2C,UAAU2C,OAAS,WAC5B,IAAI/B,EAAUtC,KAAKuB,SAASmC,aAC1BY,EACoE,IAAjEtE,KAAKF,OAASwC,EAAQxC,MAAoB,EAAZwC,EAAQT,GAAS7B,KAAK0E,WACvDH,EACsE,IAAnEvE,KAAKD,QAAUuC,EAAQvC,OAAqB,EAAZuC,EAAQR,GAAS9B,KAAK0E,WAE3D1E,KAAKO,oBAAoBoM,IAAI,CAAE9K,EAAGyC,EAASxC,EAAGyC,KAOhDxF,EAAW2C,UAAU4L,WAAa,WAChCtN,KAAKuB,SAASgC,sBAQhBxE,EAAW2C,UAAUiL,IAAM,SAAS3E,GAClC,IAAIqF,EAAcrN,KAAKuB,SAASsC,SAChCwJ,EAAYlJ,EAAI6D,EAAMnG,EACtBwL,EAAYjJ,EAAI4D,EAAMlG,EACtB9B,KAAKuB,SAASmB,OAAO2K,IAQvBtO,EAAW2C,UAAU6L,MAAQ,SAASvF,GACpC,IAAIqF,EAAcrN,KAAKuB,SAASsC,SAChCwJ,EAAYlJ,GAAK6D,EAAMnG,EACvBwL,EAAYjJ,GAAK4D,EAAMlG,EACvB9B,KAAKuB,SAASmB,OAAO2K,IAQvBtO,EAAW2C,UAAUoD,OAAS,WAC5B,IAAI2C,EAAQzH,KAAKuB,SAASkD,WAE1B,MAAO,CAAE5C,EAAG4F,EAAM5F,EAAGC,EAAG2F,EAAM3F,IAMhC/C,EAAW2C,UAAU8L,OAAS,WAE5B,IAAI9F,EAA+B1I,EAAS2I,gCAC1C3H,KAAKZ,KAEPY,KAAKF,MAAQ4H,EAA6B5H,MAC1CE,KAAKD,OAAS2H,EAA6B3H,OAG3C,IAAIwB,EAAWvB,KAAKuB,SACpBA,EAASC,QAAQ1B,MAAQE,KAAKF,MAC9ByB,EAASC,QAAQzB,OAASC,KAAKD,OAC/BwB,EAASkB,aAGLzC,KAAKwB,QAAQmF,sBACf3G,KAAKO,oBAAoBkN,sBACzBzN,KAAKO,oBAAoBmN,uBAO7B3O,EAAW2C,UAAUiM,QAAU,WAC7B,IAAIpG,EAAOvH,KAoBX,IAAK,IAAIgK,KAjBThK,KAAKuF,WAAa,KAClBvF,KAAKyF,OAAS,KACdzF,KAAK2F,UAAY,KACjB3F,KAAKgG,MAAQ,KACbhG,KAAKqG,aAAe,KAIoB,MAApCrG,KAAKwB,QAAQ2F,qBACfnH,KAAKwB,QAAQ2F,oBAAoBwG,QAAQ,CACvChE,WAAY3J,KAAKZ,IACjBgI,sBAAuBpH,KAAKwB,QAAQ4F,sBACpClI,SAAUc,KAAKO,sBAKDP,KAAK4I,gBACpB5I,KAAKwB,QAAQ4F,uBAAyBpH,KAAKZ,KAAKwO,oBAC/C5D,EACAhK,KAAK4I,eAAeoB,IACnBhK,KAAKwB,QAAQuF,2BAA4BM,GAK9CrH,KAAKsK,wBAGLtK,KAAKO,oBAAoBkN,sBAGzBzN,KAAKW,QAGLkN,EAAiBA,EAAe9K,QAAO,SAAS7D,GAC9C,OAAOA,EAASE,MAAQmI,EAAKnI,cAIxBY,KAAKwB,eAGLxB,KAAKuB,gBAGLvB,KAAKiI,sBACLjI,KAAK8N,GACZ9N,KAAKO,kBAAoB,WACvB,OAAO,OASXxB,EAAW2C,UAAUnB,kBAAoB,WACvC,IAAIgH,EAAOvH,KAyMX,OAtMKA,KAAKiI,iBACRjI,KAAKiI,eAAiBjI,KAAK8N,GAAK,CAE9BC,UAAW,WAET,OADAxG,EAAK/F,QAAQkF,YAAa,EACnBa,EAAKuG,IAEdE,WAAY,WAEV,OADAzG,EAAK/F,QAAQkF,YAAa,EACnBa,EAAKuG,IAEdG,aAAc,WACZ,QAAS1G,EAAK/F,QAAQkF,YAExBiG,IAAK,SAAS3E,GAEZ,OADAT,EAAKoF,IAAI3E,GACFT,EAAKuG,IAEdP,MAAO,SAASvF,GAEd,OADAT,EAAKgG,MAAMvF,GACJT,EAAKuG,IAEdhJ,OAAQ,WACN,OAAOyC,EAAKzC,UAGdsD,aAAc,SAAS8F,GAGrB,OAFA3G,EAAK/F,QAAQmE,UACJ,OAAPuI,EAAc,KAAO7M,EAAMY,MAAMiM,EAAI3G,EAAKU,gBACrCV,EAAKuG,IAEdzF,SAAU,SAAS6F,GAGjB,OAFA3G,EAAK/F,QAAQwE,MACJ,OAAPkI,EAAc,KAAO7M,EAAMY,MAAMiM,EAAI3G,EAAKU,gBACrCV,EAAKuG,IAGdK,WAAY,WAEV,OADA5G,EAAK/F,QAAQoF,aAAc,EACpBW,EAAKuG,IAEdM,YAAa,WAEX,OADA7G,EAAK/F,QAAQoF,aAAc,EACpBW,EAAKuG,IAEdO,cAAe,WACb,QAAS9G,EAAK/F,QAAQoF,aAExB8G,mBAAoB,WAKlB,OAJKnG,EAAK/F,QAAQmF,sBAChBY,EAAK/F,QAAQmF,qBAAsB,EACnCJ,EAAatH,OAAOsI,IAEfA,EAAKuG,IAEdL,oBAAqB,WAKnB,OAJIlG,EAAK/F,QAAQmF,sBACfY,EAAK/F,QAAQmF,qBAAsB,EACnCJ,EAAarF,QAAQqG,IAEhBA,EAAKuG,IAEdQ,sBAAuB,WACrB,QAAS/G,EAAK/F,QAAQmF,qBAGxB4H,mBAAoB,WAElB,OADAhH,EAAK/F,QAAQqF,qBAAsB,EAC5BU,EAAKuG,IAEdU,oBAAqB,WAEnB,OADAjH,EAAK/F,QAAQqF,qBAAsB,EAC5BU,EAAKuG,IAEdW,sBAAuB,WACrB,QAASlH,EAAK/F,QAAQqF,qBAGxBoD,qBAAsB,WAEpB,OADA1C,EAAK0C,uBACE1C,EAAKuG,IAEdxD,sBAAuB,WAErB,OADA/C,EAAK+C,wBACE/C,EAAKuG,IAEdY,wBAAyB,WACvB,QAASnH,EAAK/F,QAAQsF,uBAGxB6H,wBAAyB,SAAS9J,GAEhC,OADA0C,EAAK/F,QAAQwF,qBAAuBnC,EAC7B0C,EAAKuG,IAEdc,WAAY,SAAShN,GAEnB,OADA2F,EAAK/F,QAAQyF,QAAUrF,EAChB2F,EAAKuG,IAEde,WAAY,SAASjN,GAEnB,OADA2F,EAAK/F,QAAQ0F,QAAUtF,EAChB2F,EAAKuG,IAGd5F,cAAe,SAASgG,GAGtB,OAFA3G,EAAK/F,QAAQ+D,WACJ,OAAP2I,EAAc,KAAO7M,EAAMY,MAAMiM,EAAI3G,EAAKU,gBACrCV,EAAKuG,IAEd3F,UAAW,SAAS+F,GAGlB,OAFA3G,EAAK/F,QAAQiE,OACJ,OAAPyI,EAAc,KAAO7M,EAAMY,MAAMiM,EAAI3G,EAAKU,gBACrCV,EAAKuG,IAGdlM,KAAM,SAASiD,GAEb,OADA0C,EAAK4E,WAAWtH,GAAO,GAChB0C,EAAKuG,IAEdgB,OAAQ,SAASjK,GAEf,OADA0C,EAAK4E,WAAWtH,GAAO,GAChB0C,EAAKuG,IAEdrC,YAAa,SAAS5G,EAAOmD,GAE3B,OADAT,EAAK8E,kBAAkBxH,EAAOmD,GAAO,GAC9BT,EAAKuG,IAEdiB,cAAe,SAASlK,EAAOmD,GAE7B,OADAT,EAAK8E,kBAAkBxH,EAAOmD,GAAO,GAC9BT,EAAKuG,IAEdzN,OAAQ,WAEN,OADAL,KAAK8O,OAAO,EAAIvH,EAAK/F,QAAQwF,sBACtBO,EAAKuG,IAEd/M,QAAS,WAEP,OADAf,KAAK8O,OAAO,GAAK,EAAIvH,EAAK/F,QAAQwF,uBAC3BO,EAAKuG,IAEdpJ,QAAS,WACP,OAAO6C,EAAK5C,mBAGd2D,gBAAiB,SAAS4F,GAGxB,OAFA3G,EAAK/F,QAAQ6E,aACJ,OAAP6H,EAAc,KAAO7M,EAAMY,MAAMiM,EAAI3G,EAAKU,gBACrCV,EAAKuG,IAGdrB,UAAW,WAET,OADAlF,EAAKkF,YACElF,EAAKuG,IAEdpB,SAAU,WAER,OADAnF,EAAKmF,WACEnF,EAAKuG,IAEdnN,MAAO,WAEL,OADA4G,EAAK5G,QACE4G,EAAKuG,IAGdhK,IAAK,WAEH,OADAyD,EAAKzD,MACEyD,EAAKuG,IAEd/J,QAAS,WAEP,OADAwD,EAAKxD,UACEwD,EAAKuG,IAEdzJ,OAAQ,WAEN,OADAkD,EAAKlD,SACEkD,EAAKuG,IAGdR,WAAY,WAEV,OADA/F,EAAK+F,aACE/F,EAAKuG,IAEdN,OAAQ,WAEN,OADAjG,EAAKiG,SACEjG,EAAKuG,IAEdkB,SAAU,WACR,MAAO,CACLlP,MAAOyH,EAAKzH,MACZC,OAAQwH,EAAKxH,OACbkP,SAAU1H,EAAK7C,UACfpC,QAASiF,EAAKhG,SAASmC,eAI3BiK,QAAS,WAEP,OADApG,EAAKoG,UACEpG,EAAKuG,MAKX9N,KAAKiI,gBASd,IAAI4F,EAAiB,GA4BrBlP,EAAOD,QA1BU,SAASwQ,EAAmB1N,GAC3C,IAAIpC,EAAMiC,EAAM8N,OAAOD,GAEvB,GAAY,OAAR9P,EACF,OAAO,KAGP,IAAK,IAAI0K,EAAI+D,EAAehE,OAAS,EAAGC,GAAK,EAAGA,IAC9C,GAAI+D,EAAe/D,GAAG1K,MAAQA,EAC5B,OAAOyO,EAAe/D,GAAG5K,SAASqB,oBAWtC,OANAsN,EAAeuB,KAAK,CAClBhQ,IAAKA,EACLF,SAAU,IAAIH,EAAWK,EAAKoC,KAIzBqM,EACLA,EAAehE,OAAS,GACxB3K,SAASqB,sB,oBCj8Bf,IAAIc,EAAQ,EAAQ,KAClBgO,EAAW,UAGe/P,SAASgQ,eAEnCD,EAAW,MAGb1Q,EAAOD,QAAU,CACfc,MAAO,6BACP+P,MAAO,uCACPC,QAAS,gCACTC,QAAS,+BACTC,KAAM,oCAQN/H,gCAAiC,SAASvI,GACxC,GAAIA,EAAIuQ,aAAevQ,EAAIwQ,aACzB,MAAO,CAAE9P,MAAOV,EAAIuQ,YAAa5P,OAAQX,EAAIwQ,cACxC,GAAMxQ,EAAIyQ,wBACf,OAAOzQ,EAAIyQ,wBAEX,MAAM,IAAItD,MAAM,2CAUpB3E,oBAAqB,SAASxI,EAAK0Q,GACjC,IAAIvO,EAAW,KASf,KANEA,EADEF,EAAM0O,UAAUD,GACPA,EAEA1Q,EAAIC,cAAcyQ,IAIhB,CACb,IAAIE,EAAaC,MAAMvO,UAAUwO,MAC9BhK,KAAK9G,EAAI4Q,YAAc5Q,EAAI+Q,UAC3BpN,QAAO,SAASqN,GACf,MAAuB,SAAhBA,EAAGC,UAAuC,UAAhBD,EAAGC,YAMhB,IAAtBL,EAAWnG,QACgB,MAA3BmG,EAAW,GAAGK,UAC8B,OAA5CL,EAAW,GAAGpN,aAAa,eAE3BrB,EAAWyO,EAAW,IAK1B,IAAKzO,EAAU,CACb,IAAI+O,EACF,aAAc,IAAI9H,MAAO+H,cAAcC,QAAQ,MAAO,KACxDjP,EAAWjC,SAASC,gBAAgBS,KAAKR,MAAO,MACvCG,aAAa,KAAM2Q,GAG5B,IAAIG,EAAcrR,EAAI4Q,YAAc5Q,EAAI+Q,SACxC,GAAMM,GAAeA,EAAY5G,OAAS,EACxC,IAAK,IAAIC,EAAI2G,EAAY5G,OAAQC,EAAI,EAAGA,IAEe,SAAjD2G,EAAYA,EAAY5G,OAASC,GAAGuG,UACtC9O,EAAS9B,YAAYgR,EAAYA,EAAY5G,OAASC,IAI5D1K,EAAIK,YAAY8B,GAIlB,IAAImP,EAAa,GAWjB,OAVInP,EAASqB,aAAa,WACxB8N,EAAanP,EAASqB,aAAa,SAASE,MAAM,OAI9C4N,EAAW3D,QAAQ,2BACvB2D,EAAWtB,KAAK,yBAChB7N,EAAS5B,aAAa,QAAS+Q,EAAWC,KAAK,OAG1CpP,GAQTiG,mBAAoB,SAASpI,GAO3B,GALAA,EAAIO,aAAa,QAASK,KAAKR,OAC/BJ,EAAIwR,eAAe5Q,KAAKwP,QAAS,cAAexP,KAAKyP,SACrDrQ,EAAIwR,eAAe5Q,KAAKwP,QAAS,WAAYxP,KAAK0P,MAG3B,OAAnBtQ,EAAI+B,WAAqB,CAC3B,IAAIzB,EAAQN,EAAIwD,aAAa,UAAY,IACQ,IAA7ClD,EAAMmR,cAAc9D,QAAQ,aAC9B3N,EAAIO,aAAa,QAAS,qBAAuBD,KAQvDoR,kCAAmC,IAanCC,kBAAmB1P,EAAM2P,UACvB,WAGE,IAFA,IAAIC,EAAU3R,SAAS4R,iBAAiB,QACpCC,EAAeF,EAAQpH,OAClBC,EAAI,EAAGA,EAAIqH,EAAcrH,IAAK,CACrC,IAAIsH,EAAWH,EAAQnH,GACvBsH,EAASjQ,WAAWkQ,aAAaD,EAAUA,MAG/CpR,KAAOA,KAAK8Q,kCAAoC,MAUlDpO,OAAQ,SAAS4O,EAASC,EAAQpS,GAChC,IAAIoI,EAAOvH,KACTwR,EACE,UACAD,EAAOtN,EACP,IACAsN,EAAOtM,EACP,IACAsM,EAAOrM,EACP,IACAqM,EAAOrN,EACP,IACAqN,EAAOpN,EACP,IACAoN,EAAOnN,EACP,IAEJkN,EAAQV,eAAe,KAAM,YAAaY,GACtC,cAAeF,EAAQ5R,MACzB4R,EAAQ5R,MAAM+R,UAAYD,EACjB,kBAAmBF,EAAQ5R,MACpC4R,EAAQ5R,MAAM,iBAAmB8R,EACxB,sBAAuBF,EAAQ5R,QACxC4R,EAAQ5R,MAAM,qBAAuB8R,GAMtB,OAAbnC,GAAuBlQ,IAEzBA,EAAKgC,WAAWkQ,aAAalS,EAAMA,GAInCgH,OAAOuL,YAAW,WAChBnK,EAAKwJ,sBACJxJ,EAAKuJ,qCAWZxF,cAAe,SAASxC,EAAK1J,GAC3B,IAAI4I,EAAQ5I,EAAIoN,iBAOhB,OALAnL,EAAM4L,uBAAuBnE,EAAK1J,GAElC4I,EAAMnG,EAAIiH,EAAI6I,QACd3J,EAAMlG,EAAIgH,EAAI8I,QAEP5J,GASTkE,kBAAmB,SAAS9M,EAAKU,EAAOC,GACtC,OAAOC,KAAKwM,eAAepN,EAAKU,EAAQ,EAAGC,EAAS,IAWtDyM,eAAgB,SAASpN,EAAKyC,EAAGC,GAC/B,IAAIkG,EAAQ5I,EAAIoN,iBAIhB,OAHAxE,EAAMnG,EAAIA,EACVmG,EAAMlG,EAAIA,EAEHkG,K,QC1OXrJ,EAAOD,QAAU,WAIf,IAAiBmT,EAAmBC,EAAsBC,EAAtDC,EAAS,GAAsDC,EAAM,GACrEC,EAAgB,CAAC5K,SAAS,GA+E9B,SAAS6K,EAAkBC,EAAMC,EAAWC,EAAUlI,GACpD,IAAImI,EAGFA,EADc,UAAZR,EACGO,EAjET,SAAwBhB,EAAQgB,GAE9B,IAAIpE,EAAK,SAASsE,IAEfA,IAAmBA,EAAgBrM,OAAO6D,OAG3C,IAAIA,EAAQ,CAEVwI,cAAeA,EACf1F,OAAQ0F,EAAc1F,QAAU0F,EAAcC,WAC9CC,KAAM,QACN5H,UAAiC,uBAAtB0H,EAAcE,KAAgC,EAAI,EAC7DC,OAAQ,EACRC,OAAQ,EACRpI,eAAgB,WACdgI,EAAchI,eACZgI,EAAchI,iBACdgI,EAAc/H,aAAc,IAclC,MATgB,cAAXsH,GACH/H,EAAMW,QAAW,EAAE,GAAK6H,EAAczH,WAEtCyH,EAAcK,cAAiB7I,EAAM2I,QAAW,EAAE,GAAKH,EAAcK,cAErE7I,EAAMW,OAAS6H,EAAcM,OAIxBR,EAAUtI,IASnB,OALAiI,EAAI7C,KAAK,CACPkC,QAASA,EACTpD,GAAIA,IAGCA,EA0BA6E,CAAeX,EAAME,GAG5BF,EAAKP,GAAmBG,EAASK,EAAWE,IAAInI,GAAoB8H,GAGtE,SAASc,EAAqBZ,EAAMC,EAAWC,EAAUlI,GAEvD,IAAImI,EAGFA,EADc,UAAZR,EACGO,EAlCT,SAAqBhB,GACnB,IAAK,IAAIxH,EAAI,EAAGA,EAAImI,EAAIpI,OAAQC,IAC9B,GAAImI,EAAInI,GAAGwH,UAAYA,EACrB,OAAOW,EAAInI,GAAGoE,GAGlB,OAAO,aA8BA+E,CAAYb,GAGnBA,EAAKN,GAAsBE,EAASK,EAAWE,IAAInI,GAAoB8H,GA9BzE,SAAwBZ,GACtB,IAAK,IAAIxH,EAAI,EAAGA,EAAImI,EAAIpI,OAAQC,IAC9B,GAAImI,EAAInI,GAAGwH,UAAYA,EACrB,OAAOW,EAAIiB,OAAOpJ,EAAE,GA6BxBqJ,CAAef,GAqBjB,OAzHKjM,OAAO7F,kBACVuR,EAAoB,mBACpBC,EAAuB,wBAEvBD,EAAoB,cACpBC,EAAuB,cACvBE,EAAS,MAIXD,EAAU,YAAazS,SAAS8T,cAAc,OAAS,aACnBC,IAA1B/T,SAASgU,aAA6B,aACtC,iBA6GH,CACLjJ,GAnBF,SAA2B+H,EAAME,EAAUlI,GACzC+H,EAAkBC,EAAML,EAASO,EAAUlI,GAG5B,kBAAX2H,GACFI,EAAkBC,EAAM,sBAAuBE,EAAUlI,IAe3DG,IAXF,SAA6B6H,EAAME,EAAUlI,GAC3C4I,EAAqBZ,EAAML,EAASO,EAAUlI,GAG/B,kBAAX2H,GACFiB,EAAqBZ,EAAM,sBAAuBE,EAAUlI,KA7HjD,I,QC+RjB,SAASmJ,EAAeC,GACtB,OAAO,SAASlB,GACdnM,OAAOuL,WAAWY,EAAUkB,IArShC7U,EAAOD,QAAU,CAQfiF,OAAQ,SAASmJ,EAAQ2G,GAEvB,IAAK,IAAIC,KADT5G,EAASA,GAAU,GACF2G,EAEXzT,KAAK8F,SAAS2N,EAAOC,IACvB5G,EAAO4G,GAAQ1T,KAAK2D,OAAOmJ,EAAO4G,GAAOD,EAAOC,IAEhD5G,EAAO4G,GAAQD,EAAOC,GAG1B,OAAO5G,GASTiD,UAAW,SAAS4D,GAClB,OACEA,aAAaC,aACbD,aAAaE,YACbF,aAAaG,eACZH,GACc,iBAANA,GACD,OAANA,GACe,IAAfA,EAAEI,UACoB,iBAAfJ,EAAEtD,UAUfvK,SAAU,SAAS6N,GACjB,MAA6C,oBAAtCK,OAAOtS,UAAUuS,SAAS/N,KAAKyN,IASxC5N,SAAU,SAASmO,GACjB,OAAQC,MAAMjR,WAAWgR,KAAOE,SAASF,IAS3C/E,OAAQ,SAASD,GACf,IAAIoC,EAASlS,EAEb,GAAKY,KAAK+P,UAAUb,GAqBlBoC,EAAUpC,MArB4B,CAEtC,KAC+B,iBAAtBA,GACPA,aAA6BmF,QAa7B,MAAM,IAAI9H,MAAM,sDARhB,KAFA+E,EAAUhS,SAASD,cAAc6P,IAG/B,MAAM,IAAI3C,MACR,0DACE2C,GAYV,GAAsC,QAAlCoC,EAAQgD,QAAQzD,cAClBzR,EAAMkS,OAEN,GAAsC,WAAlCA,EAAQgD,QAAQzD,cAClBzR,EAAMkS,EAAQiD,gBAAgBC,oBACzB,CACL,GAAsC,UAAlClD,EAAQgD,QAAQzD,cAGlB,KAAsC,QAAlCS,EAAQgD,QAAQzD,cACZ,IAAItE,MACR,+FAGI,IAAIA,MAAM,mBAPlBnN,EAAMkS,EAAQmD,iBAAiBD,gBAcrC,OAAOpV,GAST6C,MAAO,SAASiM,EAAIwG,GAClB,OAAO,WACL,OAAOxG,EAAGyG,MAAMD,EAASE,aAY7BtI,QAAS,SAASqH,GAChB,OAAOK,OAAOtS,UAAUuS,SACrBU,MAAMhB,GACNnD,QAAQ,cAAe,IACvBA,QAAQ,MAAO,KASpBvD,uBAAwB,SAASnE,EAAK1J,GAEpC,QAAoB,IAAhB0J,EAAI6I,SAAsC,OAAhB7I,EAAI6I,QAMhC,GAJA7I,EAAI6I,QAAU,EACd7I,EAAI8I,QAAU,OAGM,IAAhB9I,EAAI+L,SAAsB/L,EAAI+L,QAAQhL,QACxC,QAA+B,IAA3Bf,EAAI+L,QAAQ,GAAGlD,QACjB7I,EAAI6I,QAAU7I,EAAI+L,QAAQ,GAAGlD,QAC7B7I,EAAI8I,QAAU9I,EAAI+L,QAAQ,GAAGjD,aACxB,QAA6B,IAAzB9I,EAAI+L,QAAQ,GAAGC,MAAkB,CAC1C,IAAIC,EAAO3V,EAAIyQ,wBAEf/G,EAAI6I,QAAU7I,EAAI+L,QAAQ,GAAGC,MAAQC,EAAKC,KAC1ClM,EAAI8I,QAAU9I,EAAI+L,QAAQ,GAAGI,MAAQF,EAAKG,eAGb,IAAtBpM,EAAI0J,oBACqB,IAA9B1J,EAAI0J,cAAcb,UACpB7I,EAAI6I,QAAU7I,EAAI0J,cAAcb,QAChC7I,EAAI8I,QAAU9I,EAAI0J,cAAcZ,UAexC1E,WAAY,SAASpE,EAAKH,GAExB,GAAmB,IAAfG,EAAIgK,OACN,OAAO,EAGJ,GAAInK,QAAwC,CAC/C,IAAIwM,EAAgBrM,EAAIsM,UAAYzM,EAAQyM,UAC1CC,EAAkBlS,KAAKmS,KACrBnS,KAAKqI,IAAI1C,EAAI6I,QAAUhJ,EAAQgJ,QAAS,GACtCxO,KAAKqI,IAAI1C,EAAI8I,QAAUjJ,EAAQiJ,QAAS,IAG9C,OAAOuD,EAAgB,KAAOE,EAAkB,GAIlD,OAAO,GAQT5M,IACED,KAAKC,KACL,WACE,OAAO,IAAID,MAAO+M,WAStBvE,SAAU,SAASwE,EAAMC,EAAMjU,GAC7B,IACIkT,EAASgB,EAAM3M,EADfxB,EAAOvH,KAEPwT,EAAU,KACVmC,EAAW,EACVnU,IACHA,EAAU,IAEZ,IAAIoU,EAAQ,WACVD,GAA+B,IAApBnU,EAAQqU,QAAoB,EAAItO,EAAKkB,MAChD+K,EAAU,KACVzK,EAASyM,EAAKb,MAAMD,EAASgB,GACxBlC,IACHkB,EAAUgB,EAAO,OAGrB,OAAO,WACL,IAAIjN,EAAMlB,EAAKkB,MACVkN,IAAgC,IAApBnU,EAAQqU,UACvBF,EAAWlN,GAEb,IAAIqN,EAAYL,GAAQhN,EAAMkN,GAc9B,OAbAjB,EAAU1U,KACV0V,EAAOd,UACHkB,GAAa,GAAKA,EAAYL,GAChCM,aAAavC,GACbA,EAAU,KACVmC,EAAWlN,EACXM,EAASyM,EAAKb,MAAMD,EAASgB,GACxBlC,IACHkB,EAAUgB,EAAO,OAETlC,IAAgC,IAArBhS,EAAQwU,WAC7BxC,EAAU9B,WAAWkE,EAAOE,IAEvB/M,IAUX3G,4BAA6B,SAASC,GACpC,IAAImR,EAAU,KAOd,MAJoB,SAAhBnR,GAA0BA,EAAc,IAAMA,EAAc,IAC9DmR,EAAUrQ,KAAK8S,MAAM,IAAO5T,IAGd,OAAZmR,EACKrN,OAAOhE,uBAAyBoR,EAAe,IAE/CA,EAAeC,M,8FC9Q5B,IAAI0C,EAAuC,oBAAfC,WAA6BA,WAA+B,oBAAXhQ,OAAyBA,YAA2B,IAAX,EAAAiQ,EAAyB,EAAAA,EAAyB,oBAATtX,KAAuBA,KAAO,GAE7L,SAASuX,EAAqBnI,EAAIvP,GACjC,OAAiCuP,EAA1BvP,EAAS,CAAED,QAAS,IAAiBC,EAAOD,SAAUC,EAAOD,QAGrE,IA0NI4X,EAAKC,EAAKC,EA1NVC,EAAQ,SAAUC,GACpB,OAAOA,GAAMA,EAAGvT,MAAQA,MAAQuT,GAI9BC,EAEFF,EAA2B,iBAAdN,YAA0BA,aACvCM,EAAuB,iBAAVtQ,QAAsBA,SACnCsQ,EAAqB,iBAAR3X,MAAoBA,OACjC2X,EAA+B,iBAAlBP,GAA8BA,IAE3CU,SAAS,cAATA,GAEEC,EAAQ,SAAUC,GACpB,IACE,QAASA,IACT,MAAOC,GACP,OAAO,IAKPC,GAAeH,GAAM,WACvB,OAA+E,GAAxE7C,OAAOiD,eAAe,GAAI,IAAK,CAAEV,IAAK,WAAc,OAAO,KAAQtS,KAGxEiT,EAA6B,GAAGC,qBAChCC,EAA2BpD,OAAOoD,yBAYlCC,EAA6B,CAChCjT,EAViBgT,IAA6BF,EAA2BhR,KAAK,CAAEoR,EAAG,GAAK,GAInE,SAA8BC,GAClD,IAAIC,EAAaJ,EAAyBpX,KAAMuX,GAChD,QAASC,GAAcA,EAAWC,YAChCP,GAMAQ,EAA2B,SAAUC,EAAQC,GAC/C,MAAO,CACLH,aAAuB,EAATE,GACdE,eAAyB,EAATF,GAChBG,WAAqB,EAATH,GACZC,MAAOA,IAIP,EAAW,GAAG3D,SAEd8D,EAAa,SAAUrB,GACzB,OAAO,EAASxQ,KAAKwQ,GAAIxG,MAAM,GAAI,IAGjCpN,EAAQ,GAAGA,MAGXkV,EAAgBnB,GAAM,WAGxB,OAAQ7C,OAAO,KAAKmD,qBAAqB,MACtC,SAAUT,GACb,MAAyB,UAAlBqB,EAAWrB,GAAkB5T,EAAMoD,KAAKwQ,EAAI,IAAM1C,OAAO0C,IAC9D1C,OAIAiE,EAAyB,SAAUvB,GACrC,GAAUrD,MAANqD,EAAiB,MAAMwB,UAAU,wBAA0BxB,GAC/D,OAAOA,GAOLyB,EAAkB,SAAUzB,GAC9B,OAAOsB,EAAcC,EAAuBvB,KAG1C5Q,EAAW,SAAU4Q,GACvB,MAAqB,iBAAPA,EAAyB,OAAPA,EAA4B,mBAAPA,GAOnD0B,EAAc,SAAUC,EAAOC,GACjC,IAAKxS,EAASuS,GAAQ,OAAOA,EAC7B,IAAInK,EAAIqK,EACR,GAAID,GAAoD,mBAAxBpK,EAAKmK,EAAMpE,YAA4BnO,EAASyS,EAAMrK,EAAGhI,KAAKmS,IAAS,OAAOE,EAC9G,GAAmC,mBAAvBrK,EAAKmK,EAAMG,WAA2B1S,EAASyS,EAAMrK,EAAGhI,KAAKmS,IAAS,OAAOE,EACzF,IAAKD,GAAoD,mBAAxBpK,EAAKmK,EAAMpE,YAA4BnO,EAASyS,EAAMrK,EAAGhI,KAAKmS,IAAS,OAAOE,EAC/G,MAAML,UAAU,4CAGd,EAAiB,GAAGnO,eAEpB0O,EAAM,SAAU/B,EAAIgC,GACtB,OAAO,EAAexS,KAAKwQ,EAAIgC,IAG7BC,EAAahC,EAASrX,SAEtBsZ,EAAS9S,EAAS6S,IAAe7S,EAAS6S,EAAWvF,eAErDyF,EAAwB,SAAUnC,GACpC,OAAOkC,EAASD,EAAWvF,cAAcsD,GAAM,IAI7CoC,GAAgB9B,IAAgBH,GAAM,WACxC,OAEQ,GAFD7C,OAAOiD,eAAe4B,EAAsB,OAAQ,IAAK,CAC9DtC,IAAK,WAAc,OAAO,KACzBtS,KAGD8U,EAAiC/E,OAAOoD,yBAaxC4B,EAAiC,CACpC5U,EAVS4S,EAAc+B,EAAiC,SAAkCE,EAAGC,GAG5F,GAFAD,EAAId,EAAgBc,GACpBC,EAAId,EAAYc,GAAG,GACfJ,EAAc,IAChB,OAAOC,EAA+BE,EAAGC,GACzC,MAAOnC,IACT,GAAI0B,EAAIQ,EAAGC,GAAI,OAAOxB,GAA0BL,EAA2BjT,EAAE8B,KAAK+S,EAAGC,GAAID,EAAEC,MAOzFC,EAAW,SAAUzC,GACvB,IAAK5Q,EAAS4Q,GACZ,MAAMwB,UAAU7D,OAAOqC,GAAM,qBAC7B,OAAOA,GAGP0C,EAAuBpF,OAAOiD,eAgB9BoC,EAAuB,CAC1BjV,EAbS4S,EAAcoC,EAAuB,SAAwBH,EAAGC,EAAGI,GAI3E,GAHAH,EAASF,GACTC,EAAId,EAAYc,GAAG,GACnBC,EAASG,GACLR,EAAc,IAChB,OAAOM,EAAqBH,EAAGC,EAAGI,GAClC,MAAOvC,IACT,GAAI,QAASuC,GAAc,QAASA,EAAY,MAAMpB,UAAU,2BAEhE,MADI,UAAWoB,IAAYL,EAAEC,GAAKI,EAAW1B,OACtCqB,IAOLM,EAA8BvC,EAAc,SAAUwC,EAAQd,EAAKd,GACrE,OAAOyB,EAAqBjV,EAAEoV,EAAQd,EAAKhB,EAAyB,EAAGE,KACrE,SAAU4B,EAAQd,EAAKd,GAEzB,OADA4B,EAAOd,GAAOd,EACP4B,GAGLC,EAAY,SAAUf,EAAKd,GAC7B,IACE2B,EAA4B5C,EAAU+B,EAAKd,GAC3C,MAAOb,GACPJ,EAAS+B,GAAOd,EAChB,OAAOA,GAGP8B,EAAS,qBAGTC,EAFQhD,EAAS+C,IAAWD,EAAUC,EAAQ,IAI9CE,EAASvD,GAAqB,SAAU1X,IAC3CA,EAAOD,QAAU,SAAUga,EAAKd,GAC/B,OAAO+B,EAAYjB,KAASiB,EAAYjB,QAAiBrF,IAAVuE,EAAsBA,EAAQ,MAC5E,WAAY,IAAIxI,KAAK,CACtByK,QAAS,QACTC,KAAO,SACPC,UAAW,4CAITC,EAAmBJ,EAAO,4BAA6BhD,SAAS3C,UAEhE,EAAU0C,EAASsD,QAEnBC,EAAmC,mBAAZ,GAA0B,cAAcC,KAAKH,EAAiB9T,KAAK,IAE1FkU,EAAK,EACLC,EAAUlX,KAAKmX,SAEfC,EAAM,SAAU7B,GAClB,MAAO,UAAYrE,YAAehB,IAARqF,EAAoB,GAAKA,GAAO,QAAU0B,EAAKC,GAASpG,SAAS,KAGzFuG,EAAOZ,EAAO,QAEda,EAAY,SAAU/B,GACxB,OAAO8B,EAAK9B,KAAS8B,EAAK9B,GAAO6B,EAAI7B,KAGnCgC,EAAa,GAEbC,EAAYhE,EAASsD,QAgBzB,GAAIC,EAAe,CACjB,IAAIU,EAAU,IAAID,EACdE,EAAQD,EAAQrE,IAChBuE,EAAQF,EAAQnC,IAChBsC,EAAQH,EAAQtE,IACpBA,EAAM,SAAUI,EAAIsE,GAElB,OADAD,EAAM7U,KAAK0U,EAASlE,EAAIsE,GACjBA,GAETzE,EAAM,SAAUG,GACd,OAAOmE,EAAM3U,KAAK0U,EAASlE,IAAO,IAEpCF,EAAQ,SAAUE,GAChB,OAAOoE,EAAM5U,KAAK0U,EAASlE,QAExB,CACL,IAAIuE,GAAQR,EAAU,SACtBC,EAAWO,KAAS,EACpB3E,EAAM,SAAUI,EAAIsE,GAElB,OADAzB,EAA4B7C,EAAIuE,GAAOD,GAChCA,GAETzE,EAAM,SAAUG,GACd,OAAO+B,EAAI/B,EAAIuE,IAASvE,EAAGuE,IAAS,IAEtCzE,EAAQ,SAAUE,GAChB,OAAO+B,EAAI/B,EAAIuE,KAInB,IAqRIC,GAAOrB,GArRPsB,GAAgB,CAClB7E,IAAKA,EACLC,IAAKA,EACLkC,IAAKjC,EACL4E,QA/CY,SAAU1E,GACtB,OAAOF,EAAME,GAAMH,EAAIG,GAAMJ,EAAII,EAAI,KA+CrC2E,UA5Cc,SAAUC,GACxB,OAAO,SAAU5E,GACf,IAAIjP,EACJ,IAAK3B,EAAS4Q,KAAQjP,EAAQ8O,EAAIG,IAAKhE,OAAS4I,EAC9C,MAAMpD,UAAU,0BAA4BoD,EAAO,aACnD,OAAO7T,KA0CT8T,GAAWlF,GAAqB,SAAU1X,GAC9C,IAAI6c,EAAmBL,GAAc5E,IACjCkF,EAAuBN,GAAcC,QACrCM,EAAWrH,OAAO2F,GAAkBlX,MAAM,YAE9C8W,EAAO,iBAAiB,SAAUlD,GAChC,OAAOsD,EAAiB9T,KAAKwQ,OAG9B/X,EAAOD,QAAU,SAAUua,EAAGP,EAAKd,EAAOpW,GACzC,IAAIma,IAASna,KAAYA,EAAQma,OAC7BC,IAASpa,KAAYA,EAAQiW,WAC7BoE,IAAcra,KAAYA,EAAQqa,YAClB,mBAATjE,IACS,iBAAPc,GAAoBD,EAAIb,EAAO,SAAS2B,EAA4B3B,EAAO,OAAQc,GAC9F+C,EAAqB7D,GAAOnE,OAASiI,EAAS/K,KAAmB,iBAAP+H,EAAkBA,EAAM,KAEhFO,IAAMtC,GAIEgF,GAEAE,GAAe5C,EAAEP,KAC3BkD,GAAS,UAFF3C,EAAEP,GAIPkD,EAAQ3C,EAAEP,GAAOd,EAChB2B,EAA4BN,EAAGP,EAAKd,IATnCgE,EAAQ3C,EAAEP,GAAOd,EAChB6B,EAAUf,EAAKd,KAUrBhB,SAASlV,UAAW,YAAY,WACjC,MAAsB,mBAAR1B,MAAsBwb,EAAiBxb,MAAMyT,QAAUuG,EAAiB9T,KAAKlG,YAIzF8b,GAAOnF,EAEPoF,GAAY,SAAUC,GACxB,MAA0B,mBAAZA,EAAyBA,OAAW3I,GAGhD4I,GAAa,SAAUC,EAAWC,GACpC,OAAOvH,UAAU/K,OAAS,EAAIkS,GAAUD,GAAKI,KAAeH,GAAUpF,EAASuF,IAC3EJ,GAAKI,IAAcJ,GAAKI,GAAWC,IAAWxF,EAASuF,IAAcvF,EAASuF,GAAWC,IAG3FC,GAAOjZ,KAAKiZ,KACZnG,GAAQ9S,KAAK8S,MAIboG,GAAY,SAAUC,GACxB,OAAOnI,MAAMmI,GAAYA,GAAY,GAAKA,EAAW,EAAIrG,GAAQmG,IAAME,IAGrElZ,GAAMD,KAAKC,IAIXmZ,GAAW,SAAUD,GACvB,OAAOA,EAAW,EAAIlZ,GAAIiZ,GAAUC,GAAW,kBAAoB,GAGjEtY,GAAMb,KAAKa,IACXwY,GAAQrZ,KAAKC,IAKbqZ,GAAkB,SAAUC,EAAO7S,GACrC,IAAI8S,EAAUN,GAAUK,GACxB,OAAOC,EAAU,EAAI3Y,GAAI2Y,EAAU9S,EAAQ,GAAK2S,GAAMG,EAAS9S,IAI7D+S,GAAe,SAAUC,GAC3B,OAAO,SAAUC,EAAO1M,EAAI2M,GAC1B,IAGInF,EAHAqB,EAAId,EAAgB2E,GACpBjT,EAAS0S,GAAStD,EAAEpP,QACpB6S,EAAQD,GAAgBM,EAAWlT,GAIvC,GAAIgT,GAAezM,GAAMA,GAAI,KAAOvG,EAAS6S,GAG3C,IAFA9E,EAAQqB,EAAEyD,OAEG9E,EAAO,OAAO,OAEtB,KAAM/N,EAAS6S,EAAOA,IAC3B,IAAKG,GAAeH,KAASzD,IAAMA,EAAEyD,KAAWtM,EAAI,OAAOyM,GAAeH,GAAS,EACnF,OAAQG,IAAgB,IAI1BG,GAAgB,CAGlBC,SAAUL,IAAa,GAGvB7P,QAAS6P,IAAa,IAGpB7P,GAAUiQ,GAAcjQ,QAGxBmQ,GAAqB,SAAU1D,EAAQ2D,GACzC,IAGIzE,EAHAO,EAAId,EAAgBqB,GACpB1P,EAAI,EACJf,EAAS,GAEb,IAAK2P,KAAOO,GAAIR,EAAIiC,EAAYhC,IAAQD,EAAIQ,EAAGP,IAAQ3P,EAAOqG,KAAKsJ,GAEnE,KAAOyE,EAAMtT,OAASC,GAAO2O,EAAIQ,EAAGP,EAAMyE,EAAMrT,SAC7CiD,GAAQhE,EAAQ2P,IAAQ3P,EAAOqG,KAAKsJ,IAEvC,OAAO3P,GAILqU,GAAc,CAChB,cACA,iBACA,gBACA,uBACA,iBACA,WACA,WAGEC,GAAeD,GAAYE,OAAO,SAAU,aAQ5CC,GAA4B,CAC/BnZ,EALS4P,OAAOwJ,qBAAuB,SAA6BvE,GACnE,OAAOiE,GAAmBjE,EAAGoE,MAS3BI,GAA8B,CACjCrZ,EAHS4P,OAAO0J,uBAObC,GAAU1B,GAAW,UAAW,YAAc,SAAiBvF,GACjE,IAAI8D,EAAO+C,GAA0BnZ,EAAE+U,EAASzC,IAC5CgH,EAAwBD,GAA4BrZ,EACxD,OAAOsZ,EAAwBlD,EAAK8C,OAAOI,EAAsBhH,IAAO8D,GAGtEoD,GAA4B,SAAU9Q,EAAQ2G,GAIhD,IAHA,IAAI+G,EAAOmD,GAAQlK,GACfwD,EAAiBoC,EAAqBjV,EACtCgT,EAA2B4B,EAA+B5U,EACrD0F,EAAI,EAAGA,EAAI0Q,EAAK3Q,OAAQC,IAAK,CACpC,IAAI4O,EAAM8B,EAAK1Q,GACV2O,EAAI3L,EAAQ4L,IAAMzB,EAAenK,EAAQ4L,EAAKtB,EAAyB3D,EAAQiF,MAIpFmF,GAAc,kBAEdC,GAAW,SAAUC,EAASC,GAChC,IAAIpG,EAAQqG,GAAKC,GAAUH,IAC3B,OAAOnG,GAASuG,IACZvG,GAASwG,KACW,mBAAbJ,EAA0BnH,EAAMmH,KACrCA,IAGJE,GAAYJ,GAASI,UAAY,SAAUG,GAC7C,OAAOhK,OAAOgK,GAAQ7N,QAAQqN,GAAa,KAAKhN,eAG9CoN,GAAOH,GAASG,KAAO,GACvBG,GAASN,GAASM,OAAS,IAC3BD,GAAWL,GAASK,SAAW,IAE/BG,GAAaR,GAEbS,GAA6BvF,EAA+B5U,EAqB5Doa,GAAU,SAAUhd,EAASiS,GAC/B,IAGY3G,EAAQ4L,EAAK+F,EAAgBC,EAAgBlH,EAHrDmH,EAASnd,EAAQsL,OACjB8R,EAASpd,EAAQqd,OACjBC,EAAStd,EAAQud,KASrB,GANEjS,EADE8R,EACOjI,EACAmI,EACAnI,EAASgI,IAAWlF,EAAUkF,EAAQ,KAErChI,EAASgI,IAAW,IAAIjd,UAExB,IAAKgX,KAAOjF,EAAQ,CAQ9B,GAPAiL,EAAiBjL,EAAOiF,GAGtB+F,EAFEjd,EAAQqa,aACVrE,EAAa+G,GAA2BzR,EAAQ4L,KACjBlB,EAAWI,MACpB9K,EAAO4L,IACtB4F,GAAWM,EAASlG,EAAMiG,GAAUG,EAAS,IAAM,KAAOpG,EAAKlX,EAAQwd,cAE9C3L,IAAnBoL,EAA8B,CAC3C,UAAWC,UAA0BD,EAAgB,SACrDb,GAA0Bc,EAAgBD,IAGxCjd,EAAQyd,MAASR,GAAkBA,EAAeQ,OACpD1F,EAA4BmF,EAAgB,QAAQ,GAGtDnD,GAASzO,EAAQ4L,EAAKgG,EAAgBld,KAMtC0d,GAAUjP,MAAMiP,SAAW,SAAiBC,GAC9C,MAA0B,SAAnBpH,EAAWoH,IAGhBC,GAAiB,SAAU5F,EAAQd,EAAKd,GAC1C,IAAIyH,EAAcjH,EAAYM,GAC1B2G,KAAe7F,EAAQH,EAAqBjV,EAAEoV,EAAQ6F,EAAa3H,EAAyB,EAAGE,IAC9F4B,EAAO6F,GAAezH,GAGzB0H,KAAiBtL,OAAO0J,wBAA0B7G,GAAM,WAG1D,OAAQxC,OAAOkL,aAGbC,GAAW7I,EAAS4I,OACpBE,GAAU7F,EAAO,OAEjB8F,GAAkB,SAAUC,GAC9B,OAAOF,GAAQE,KAAUF,GAAQE,GAAQL,IAAgBE,GAASG,KAC5DL,GAAeE,GAAWjF,GAAK,UAAYoF,KAG/CC,GAAY3D,GAAW,YAAa,cAAgB,GAEpD4D,GAAUlJ,EAASkJ,QACnBC,GAAWD,IAAWA,GAAQC,SAC9BC,GAAKD,IAAYA,GAASC,GAG1BA,GAEFlG,IADAqB,GAAQ6E,GAAGjd,MAAM,MACD,GAAKoY,GAAM,GAClB0E,OACT1E,GAAQ0E,GAAU1E,MAAM,iBACVA,GAAM,IAAM,MACxBA,GAAQ0E,GAAU1E,MAAM,oBACbrB,GAAUqB,GAAM,IAI/B,IAAI8E,GAAYnG,KAAYA,GAExBoG,GAAUP,GAAgB,WAE1BQ,GAA+B,SAAUC,GAI3C,OAAOH,IAAa,KAAOnJ,GAAM,WAC/B,IAAIuJ,EAAQ,GAKZ,OAJkBA,EAAMC,YAAc,IAC1BJ,IAAW,WACrB,MAAO,CAAEK,IAAK,IAE2B,IAApCF,EAAMD,GAAaI,SAASD,QAInCE,GAAYd,GAAgB,WAC5Be,GAAc,GAAGvQ,MACjBwQ,GAAQvd,KAAKa,IAKjBwa,GAAQ,CAAE1R,OAAQ,QAAS6T,OAAO,EAAM3B,QAASkB,GAA6B,UAAY,CACxFhQ,MAAO,SAAe0Q,EAAOC,GAC3B,IAKIC,EAAa/X,EAAQmL,EALrB+E,EAAId,EAAgBnY,MACpB6J,EAAS0S,GAAStD,EAAEpP,QACpBkX,EAAItE,GAAgBmE,EAAO/W,GAC3BmX,EAAMvE,QAAwBpJ,IAARwN,EAAoBhX,EAASgX,EAAKhX,GAG5D,GAAIqV,GAAQjG,KAGgB,mBAF1B6H,EAAc7H,EAAEoH,cAEyBS,IAAgB7Q,QAASiP,GAAQ4B,EAAYpf,WAE3EoE,EAASgb,IAEE,QADpBA,EAAcA,EAAYN,OACAM,OAAczN,GAHxCyN,OAAczN,EAKZyN,IAAgB7Q,YAAyBoD,IAAhByN,GAC3B,OAAOL,GAAYva,KAAK+S,EAAG8H,EAAGC,GAIlC,IADAjY,EAAS,SAAqBsK,IAAhByN,EAA4B7Q,MAAQ6Q,GAAaJ,GAAMM,EAAMD,EAAG,IACzE7M,EAAI,EAAG6M,EAAIC,EAAKD,IAAK7M,IAAS6M,KAAK9H,GAAGmG,GAAerW,EAAQmL,EAAG+E,EAAE8H,IAEvE,OADAhY,EAAOc,OAASqK,EACTnL,KAIX,IAAIkO,GAAiBoC,EAAqBjV,EAEtC6c,GAAoBrK,SAASlV,UAC7Bwf,GAA4BD,GAAkBhN,SAC9CkN,GAAS,wBACTC,GAAO,OAIPpK,KAAiBoK,MAAQH,KAC3BhK,GAAegK,GAAmBG,GAAM,CACtCvJ,cAAc,EACdtB,IAAK,WACH,IACE,OAAO2K,GAA0Bhb,KAAKlG,MAAMkb,MAAMiG,IAAQ,GAC1D,MAAOpK,GACP,MAAO,OAMf,IAAIsK,GAA4B9D,GAA0BnZ,EAEtDkd,GAAa,GAAGrN,SAEhBsN,GAA+B,iBAAVpb,QAAsBA,QAAU6N,OAAOwJ,oBAC5DxJ,OAAOwJ,oBAAoBrX,QAAU,GAiBrCqb,GAAoC,CACvCpd,EAPS,SAA6BsS,GACrC,OAAO6K,IAAsC,mBAAvBD,GAAWpb,KAAKwQ,GAVnB,SAAUA,GAC7B,IACE,OAAO2K,GAA0B3K,GACjC,MAAOK,GACP,OAAOwK,GAAYrR,SAOjBuR,CAAe/K,GACf2K,GAA0BlJ,EAAgBzB,MAO5CgL,GAA8BF,GAAkCpd,EAEhEud,GAAsB9K,GAAM,WAAc,OAAQ7C,OAAOwJ,oBAAoB,MAQjF,SAASoE,GAASC,GAA4T,OAA1OD,GAArD,mBAAXrC,QAAoD,iBAApBA,OAAOuC,SAAoC,SAAkBD,GAAO,cAAcA,GAA4B,SAAkBA,GAAO,OAAOA,GAAyB,mBAAXtC,QAAyBsC,EAAIxB,cAAgBd,QAAUsC,IAAQtC,OAAO7d,UAAY,gBAAkBmgB,IAA0BA,GAE9V,SAASE,GAAQF,GAWf,OATEE,GADoB,mBAAXxC,QAAuD,WAA9BqC,GAASrC,OAAOuC,UACxC,SAAiBD,GACzB,OAAOD,GAASC,IAGR,SAAiBA,GACzB,OAAOA,GAAyB,mBAAXtC,QAAyBsC,EAAIxB,cAAgBd,QAAUsC,IAAQtC,OAAO7d,UAAY,SAAWkgB,GAASC,KAIhHA,GAjBjBrD,GAAQ,CAAE1R,OAAQ,SAAUiS,MAAM,EAAMC,OAAQ2C,IAAuB,CACrEnE,oBAAqBkE,KAqBvB,IAAIM,GAAW,SAAU1F,GACvB,OAAOtI,OAAOiE,EAAuBqE,KAKnC2F,GAAajO,OAAOwG,MAAQ,SAAcvB,GAC5C,OAAOiE,GAAmBjE,EAAGmE,KAK3B8E,GAAyBlL,EAAchD,OAAOmO,iBAAmB,SAA0BlJ,EAAGmJ,GAChGjJ,EAASF,GAKT,IAJA,IAGIP,EAHA8B,EAAOyH,GAAWG,GAClBvY,EAAS2Q,EAAK3Q,OACd6S,EAAQ,EAEL7S,EAAS6S,GAAOrD,EAAqBjV,EAAE6U,EAAGP,EAAM8B,EAAKkC,KAAU0F,EAAW1J,IACjF,OAAOO,GAGLoJ,GAAOpG,GAAW,WAAY,mBAE9BqG,GAAW7H,EAAU,YAGrB8H,GAAQ,aAGRC,GAAa,WAEf,IAMIC,EANAC,EAAS7J,EAAsB,UAC/BhP,EAASuT,GAAYvT,OAczB,IARA6Y,EAAOhjB,MAAMijB,QAAU,OACvBN,GAAK5iB,YAAYijB,GACjBA,EAAOE,IAAMvO,OAJJ,gBAKToO,EAAiBC,EAAOG,cAAcvjB,UACvBwjB,OACfL,EAAeM,MAAMC,uCACrBP,EAAeQ,QACfT,GAAaC,EAAeS,EACrBrZ,YAAiB2Y,GAAoB,UAAEpF,GAAYvT,IAC1D,OAAO2Y,MAKLW,GAAenP,OAAOoP,QAAU,SAAgBnK,EAAGmJ,GACrD,IAAIrZ,EAQJ,OAPU,OAANkQ,GACFsJ,GAAe,UAAIpJ,EAASF,GAC5BlQ,EAAS,IAAIwZ,GACbA,GAAe,UAAI,KAEnBxZ,EAAOuZ,IAAYrJ,GACdlQ,EAASyZ,UACMnP,IAAf+O,EAA2BrZ,EAASmZ,GAAuBnZ,EAAQqZ,IAG5E1H,EAAW4H,KAAY,EAEvB,IAEIe,GAAyB,CAC5Bjf,EAHSsb,IAMN4D,GAAmBjK,EAAqBjV,EAExCmf,GAAwB,SAAUnC,GACpC,IAAI7B,EAASzD,GAAKyD,SAAWzD,GAAKyD,OAAS,IACtC9G,EAAI8G,EAAQ6B,IAAOkC,GAAiB/D,EAAQ6B,EAAM,CACrDxJ,MAAOyL,GAAuBjf,EAAEgd,MAIhCoC,GAAmBnK,EAAqBjV,EAIxCqf,GAAgB/D,GAAgB,eAEhCgE,GAAiB,SAAUhN,EAAIiN,EAAK7E,GAClCpI,IAAO+B,EAAI/B,EAAKoI,EAASpI,EAAKA,EAAGhV,UAAW+hB,KAC9CD,GAAiB9M,EAAI+M,GAAe,CAAE5L,cAAc,EAAMD,MAAO+L,KAIjEC,GAAc,SAAUlN,GAC1B,GAAiB,mBAANA,EACT,MAAMwB,UAAU7D,OAAOqC,GAAM,sBAC7B,OAAOA,GAIPmN,GAAc,SAAU3V,EAAI3G,EAAMsC,GAEpC,GADA+Z,GAAY1V,QACCmF,IAAT9L,EAAoB,OAAO2G,EAC/B,OAAQrE,GACN,KAAK,EAAG,OAAO,WACb,OAAOqE,EAAGhI,KAAKqB,IAEjB,KAAK,EAAG,OAAO,SAAUtD,GACvB,OAAOiK,EAAGhI,KAAKqB,EAAMtD,IAEvB,KAAK,EAAG,OAAO,SAAUA,EAAGgB,GAC1B,OAAOiJ,EAAGhI,KAAKqB,EAAMtD,EAAGgB,IAE1B,KAAK,EAAG,OAAO,SAAUhB,EAAGgB,EAAGC,GAC7B,OAAOgJ,EAAGhI,KAAKqB,EAAMtD,EAAGgB,EAAGC,IAG/B,OAAO,WACL,OAAOgJ,EAAGyG,MAAMpN,EAAMqN,aAItBkP,GAAYpE,GAAgB,WAI5BqE,GAAqB,SAAUC,EAAena,GAChD,IAAIoa,EASF,OARE/E,GAAQ8E,KAGM,mBAFhBC,EAAID,EAAc3D,cAEa4D,IAAMhU,QAASiP,GAAQ+E,EAAEviB,WAC/CoE,EAASme,IAEN,QADVA,EAAIA,EAAEH,OACUG,OAAI5Q,GAH+C4Q,OAAI5Q,GAKlE,SAAWA,IAAN4Q,EAAkBhU,MAAQgU,GAAc,IAAXpa,EAAe,EAAIA,IAG5DuF,GAAO,GAAGA,KAGV8U,GAAiB,SAAU5I,GAC7B,IAAI6I,EAAiB,GAAR7I,EACT8I,EAAoB,GAAR9I,EACZ+I,EAAkB,GAAR/I,EACVgJ,EAAmB,GAARhJ,EACXiJ,EAAwB,GAARjJ,EAChBkJ,EAAmB,GAARlJ,GAAaiJ,EAC5B,OAAO,SAAUzH,EAAO2H,EAAYld,EAAMmd,GASxC,IARA,IAOI9M,EAAO7O,EAPPkQ,EAAI+I,GAASlF,GACbhe,EAAOkZ,EAAciB,GACrB0L,EAAgBd,GAAYY,EAAYld,EAAM,GAC9CsC,EAAS0S,GAASzd,EAAK+K,QACvB6S,EAAQ,EACR0G,EAASsB,GAAkBX,GAC3BjX,EAASqX,EAASf,EAAOtG,EAAOjT,GAAUua,EAAYhB,EAAOtG,EAAO,QAAKzJ,EAEvExJ,EAAS6S,EAAOA,IAAS,IAAI8H,GAAY9H,KAAS5d,KAEtDiK,EAAS4b,EADT/M,EAAQ9Y,EAAK4d,GACiBA,EAAOzD,GACjCqC,GACF,GAAI6I,EAAQrX,EAAO4P,GAAS3T,OACvB,GAAIA,EAAQ,OAAQuS,GACvB,KAAK,EAAG,OAAO,EACf,KAAK,EAAG,OAAO1D,EACf,KAAK,EAAG,OAAO8E,EACf,KAAK,EAAGtN,GAAKlJ,KAAK4G,EAAQ8K,QACrB,GAAI0M,EAAU,OAAO,EAGhC,OAAOC,GAAiB,EAAIF,GAAWC,EAAWA,EAAWxX,IAI7D8X,GAAiB,CAGnBC,QAASX,GAAe,GAGxBjhB,IAAKihB,GAAe,GAGpBnhB,OAAQmhB,GAAe,GAGvBY,KAAMZ,GAAe,GAGrBa,MAAOb,GAAe,GAGtBc,KAAMd,GAAe,GAGrBe,UAAWf,GAAe,IAGxBgB,GAAWN,GAAeC,QAE1BM,GAAS1K,EAAU,UACnB2K,GAAS,SAETC,GAAe3F,GAAgB,eAC/B4F,GAAmBnK,GAAc7E,IACjCkF,GAAmBL,GAAcE,UAAU+J,IAC3CG,GAAkBvR,OAAkB,UACpCwR,GAAU7O,EAAS4I,OACnBkG,GAAS9O,EAAS+O,KAClBC,GAAsBF,IAAUA,GAAOG,UACvCC,GAAmC7M,EAA+B5U,EAClE0hB,GAAyBzM,EAAqBjV,EAC9C2hB,GAA8BvE,GAAkCpd,EAChE4hB,GAA+B3O,EAA2BjT,EAC1D6hB,GAAarM,EAAO,WACpBsM,GAAyBtM,EAAO,cAChCuM,GAAyBvM,EAAO,6BAChCwM,GAAyBxM,EAAO,6BAChCyM,GAAwBzM,EAAO,OAC/B0M,GAAU3P,EAAS2P,QAEnBC,IAAcD,KAAYA,GAAmB,YAAMA,GAAmB,UAAEE,UAGxEC,GAAsBzP,GAAeH,GAAM,WAC7C,OAES,GAFFsM,GAAa2C,GAAuB,GAAI,IAAK,CAClDvP,IAAK,WAAc,OAAOuP,GAAuB9lB,KAAM,IAAK,CAAE4X,MAAO,IAAK3T,MACxEA,KACD,SAAUgV,EAAGC,EAAGI,GACnB,IAAIoN,EAA4Bb,GAAiCN,GAAiBrM,GAC9EwN,UAAkCnB,GAAgBrM,GACtD4M,GAAuB7M,EAAGC,EAAGI,GACzBoN,GAA6BzN,IAAMsM,IACrCO,GAAuBP,GAAiBrM,EAAGwN,IAE3CZ,GAEAa,GAAO,SAAUC,EAAKC,GACxB,IAAIC,EAASb,GAAWW,GAAOzD,GAAaqC,GAAmB,WAO/D,OANAF,GAAiBwB,EAAQ,CACvBpU,KAAM0S,GACNwB,IAAKA,EACLC,YAAaA,IAEV7P,IAAa8P,EAAOD,YAAcA,GAChCC,GAGLC,GAAWzH,IAA2C,iBAApBkG,GAAQ1D,SAAuB,SAAUpL,GAC7E,MAAoB,iBAANA,GACZ,SAAUA,GACZ,OAAO1C,OAAO0C,aAAe8O,IAG3BwB,GAAkB,SAAwB/N,EAAGC,EAAGI,GAC9CL,IAAMsM,IAAiByB,GAAgBd,GAAwBhN,EAAGI,GACtEH,EAASF,GACT,IAAIP,EAAMN,EAAYc,GAAG,GAEzB,OADAC,EAASG,GACLb,EAAIwN,GAAYvN,IACbY,EAAW7B,YAIVgB,EAAIQ,EAAGkM,KAAWlM,EAAEkM,IAAQzM,KAAMO,EAAEkM,IAAQzM,IAAO,GACvDY,EAAa6J,GAAa7J,EAAY,CAAE7B,WAAYC,EAAyB,GAAG,OAJ3Ee,EAAIQ,EAAGkM,KAASW,GAAuB7M,EAAGkM,GAAQzN,EAAyB,EAAG,KACnFuB,EAAEkM,IAAQzM,IAAO,GAIV+N,GAAoBxN,EAAGP,EAAKY,IAC9BwM,GAAuB7M,EAAGP,EAAKY,IAGtC2N,GAAoB,SAA0BhO,EAAGmJ,GACnDjJ,EAASF,GACT,IAAIiO,EAAa/O,EAAgBiK,GAC7B5H,EAAOyH,GAAWiF,GAAY5J,OAAO6J,GAAuBD,IAIhE,OAHAhC,GAAS1K,GAAM,SAAU9B,GAClB1B,IAAeoQ,GAAsBlhB,KAAKghB,EAAYxO,IAAMsO,GAAgB/N,EAAGP,EAAKwO,EAAWxO,OAE/FO,GAOLmO,GAAwB,SAA8B7P,GACxD,IAAI2B,EAAId,EAAYb,GAAG,GACnBE,EAAauO,GAA6B9f,KAAKlG,KAAMkZ,GACzD,QAAIlZ,OAASulB,IAAmB9M,EAAIwN,GAAY/M,KAAOT,EAAIyN,GAAwBhN,QAC5EzB,IAAegB,EAAIzY,KAAMkZ,KAAOT,EAAIwN,GAAY/M,IAAMT,EAAIzY,KAAMmlB,KAAWnlB,KAAKmlB,IAAQjM,KAAKzB,IAGlG4P,GAA4B,SAAkCpO,EAAGC,GACnE,IAAIxC,EAAKyB,EAAgBc,GACrBP,EAAMN,EAAYc,GAAG,GACzB,GAAIxC,IAAO6O,KAAmB9M,EAAIwN,GAAYvN,IAASD,EAAIyN,GAAwBxN,GAAnF,CACA,IAAIlB,EAAaqO,GAAiCnP,EAAIgC,GAItD,OAHIlB,IAAciB,EAAIwN,GAAYvN,IAAUD,EAAI/B,EAAIyO,KAAWzO,EAAGyO,IAAQzM,KACxElB,EAAWC,YAAa,GAEnBD,IAGL8P,GAAuB,SAA6BrO,GACtD,IAAIkE,EAAQ4I,GAA4B5N,EAAgBc,IACpDlQ,EAAS,GAIb,OAHAmc,GAAS/H,GAAO,SAAUzE,GACnBD,EAAIwN,GAAYvN,IAASD,EAAIiC,EAAYhC,IAAM3P,EAAOqG,KAAKsJ,MAE3D3P,GAGLoe,GAAyB,SAA+BlO,GAC1D,IAAIsO,EAAsBtO,IAAMsM,GAC5BpI,EAAQ4I,GAA4BwB,EAAsBrB,GAAyB/N,EAAgBc,IACnGlQ,EAAS,GAMb,OALAmc,GAAS/H,GAAO,SAAUzE,IACpBD,EAAIwN,GAAYvN,IAAU6O,IAAuB9O,EAAI8M,GAAiB7M,IACxE3P,EAAOqG,KAAK6W,GAAWvN,OAGpB3P,GAKJuW,KAcH/D,IAbAiK,GAAU,WACR,GAAIxlB,gBAAgBwlB,GAAS,MAAMtN,UAAU,+BAC7C,IAAI2O,EAAejS,UAAU/K,aAA2BwJ,IAAjBuB,UAAU,GAA+BP,OAAOO,UAAU,SAA7BvB,EAChEuT,EAAMrM,EAAIsM,GACVW,EAAS,SAAU5P,GACjB5X,OAASulB,IAAiBiC,EAAOthB,KAAKggB,GAAwBtO,GAC9Da,EAAIzY,KAAMmlB,KAAW1M,EAAIzY,KAAKmlB,IAASyB,KAAM5mB,KAAKmlB,IAAQyB,IAAO,GACrEH,GAAoBzmB,KAAM4mB,EAAKlP,EAAyB,EAAGE,KAG7D,OADIZ,GAAeuP,IAAYE,GAAoBlB,GAAiBqB,EAAK,CAAE/O,cAAc,EAAMvB,IAAKkR,IAC7Fb,GAAKC,EAAKC,KAGS,UAAG,YAAY,WACzC,OAAOrL,GAAiBxb,MAAM4mB,OAGhCvP,EAA2BjT,EAAIgjB,GAC/B/N,EAAqBjV,EAAI4iB,GACzBhO,EAA+B5U,EAAIijB,GACnC9J,GAA0BnZ,EAAIod,GAAkCpd,EAAIkjB,GACpE7J,GAA4BrZ,EAAI+iB,GAE5BnQ,IAEF8O,GAAuBN,GAAmB,UAAG,cAAe,CAC1D3N,cAAc,EACdtB,IAAK,WACH,OAAOiF,GAAiBxb,MAAM6mB,eAIhCtL,GAASgK,GAAiB,uBAAwB6B,GAAuB,CAAEzL,QAAQ,KAIvF0H,GAAuBjf,EAAI,SAAUub,GACnC,OAAOgH,GAAKjH,GAAgBC,GAAOA,KAIvCnB,GAAQ,CAAEK,QAAQ,EAAM8H,MAAM,EAAM3H,QAASM,GAAcL,MAAOK,IAAgB,CAChFC,OAAQiG,KAGVN,GAASjD,GAAWoE,KAAwB,SAAU1G,GACpD4D,GAAsB5D,MAGxBnB,GAAQ,CAAE1R,OAAQsY,GAAQrG,MAAM,EAAMC,QAASM,IAAgB,CAG7D,IAAO,SAAU5G,GACf,IAAI2F,EAAShK,OAAOqE,GACpB,GAAID,EAAI0N,GAAwB9H,GAAS,OAAO8H,GAAuB9H,GACvE,IAAIyI,EAAStB,GAAQnH,GAGrB,OAFA8H,GAAuB9H,GAAUyI,EACjCV,GAAuBU,GAAUzI,EAC1ByI,GAITW,OAAQ,SAAgBC,GACtB,IAAKX,GAASW,GAAM,MAAMxP,UAAUwP,EAAM,oBAC1C,GAAIjP,EAAI2N,GAAwBsB,GAAM,OAAOtB,GAAuBsB,IAEtEC,UAAW,WAAcpB,IAAa,GACtCqB,UAAW,WAAcrB,IAAa,KAGxC/H,GAAQ,CAAE1R,OAAQ,SAAUiS,MAAM,EAAMC,QAASM,GAAcL,MAAOjI,GAAe,CAGnFoM,OAvHY,SAAgBnK,EAAGmJ,GAC/B,YAAsB/O,IAAf+O,EAA2Be,GAAalK,GAAKgO,GAAkB9D,GAAalK,GAAImJ,IAyHvFnL,eAAgB+P,GAGhB7E,iBAAkB8E,GAGlB7P,yBAA0BiQ,KAG5B7I,GAAQ,CAAE1R,OAAQ,SAAUiS,MAAM,EAAMC,QAASM,IAAgB,CAG/D9B,oBAAqB8J,GAGrB5J,sBAAuByJ,KAKzB3I,GAAQ,CAAE1R,OAAQ,SAAUiS,MAAM,EAAMC,OAAQnI,GAAM,WAAc4G,GAA4BrZ,EAAE,OAAU,CAC1GsZ,sBAAuB,SAA+BhH,GACpD,OAAO+G,GAA4BrZ,EAAE4d,GAAStL,OAMlD+O,IAAUjH,GAAQ,CAAE1R,OAAQ,OAAQiS,MAAM,EAAMC,QAASM,IAAgBzI,GAAM,WAC7E,IAAIiQ,EAAStB,KAEb,MAAwC,UAAjCG,GAAoB,CAACmB,KAEe,MAAtCnB,GAAoB,CAAE1hB,EAAG6iB,KAEc,MAAvCnB,GAAoB3R,OAAO8S,QAC5B,CACJlB,UAAW,SAAmBlP,GAI5B,IAHA,IAEImR,EAAUC,EAFVpS,EAAO,CAACgB,GACRgG,EAAQ,EAEL9H,UAAU/K,OAAS6S,GAAOhH,EAAKtG,KAAKwF,UAAU8H,MAErD,GADAoL,EAAYD,EAAWnS,EAAK,IACvB5P,EAAS+hB,SAAoBxU,IAAPqD,KAAoBqQ,GAASrQ,GAMxD,OALKwI,GAAQ2I,KAAWA,EAAW,SAAUnP,EAAKd,GAEhD,GADwB,mBAAbkQ,IAAyBlQ,EAAQkQ,EAAU5hB,KAAKlG,KAAM0Y,EAAKd,KACjEmP,GAASnP,GAAQ,OAAOA,IAE/BlC,EAAK,GAAKmS,EACHlC,GAAoBhR,MAAM8Q,GAAQ/P,MAMxC8P,GAAmB,UAAEH,KACxB9L,EAA4BiM,GAAmB,UAAGH,GAAcG,GAAmB,UAAEhN,SAIvFkL,GAAe8B,GAASJ,IAExB1K,EAAWyK,KAAU,EAErB,IAAI4C,GAAmB1O,EAAqBjV,EAGxC4jB,GAAerR,EAAS4I,OAE5B,GAAIvI,GAAsC,mBAAhBgR,OAAiC,gBAAiBA,GAAatmB,iBAExD2R,IAA/B2U,KAAenB,aACd,CACD,IAAIoB,GAA8B,GAE9BC,GAAgB,WAClB,IAAIrB,EAAcjS,UAAU/K,OAAS,QAAsBwJ,IAAjBuB,UAAU,QAAmBvB,EAAYgB,OAAOO,UAAU,IAChG7L,EAAS/I,gBAAgBkoB,GACzB,IAAIF,GAAanB,QAEDxT,IAAhBwT,EAA4BmB,KAAiBA,GAAanB,GAE9D,MADoB,KAAhBA,IAAoBoB,GAA4Blf,IAAU,GACvDA,GAET6U,GAA0BsK,GAAeF,IACzC,IAAIG,GAAkBD,GAAcxmB,UAAYsmB,GAAatmB,UAC7DymB,GAAgB9H,YAAc6H,GAE9B,IAAIE,GAAiBD,GAAgBlU,SACjC,GAAyC,gBAAhCI,OAAO2T,GAAa,SAC7BK,GAAS,wBACbN,GAAiBI,GAAiB,cAAe,CAC/CtQ,cAAc,EACdtB,IAAK,WACH,IAAIuQ,EAAShhB,EAAS9F,MAAQA,KAAKwY,UAAYxY,KAC3Cqe,EAAS+J,GAAeliB,KAAK4gB,GACjC,GAAIrO,EAAIwP,GAA6BnB,GAAS,MAAO,GACrD,IAAIwB,EAAO,GAASjK,EAAOnO,MAAM,GAAI,GAAKmO,EAAO7N,QAAQ6X,GAAQ,MACjE,MAAgB,KAATC,OAAcjV,EAAYiV,KAIrC9J,GAAQ,CAAEK,QAAQ,EAAMG,QAAQ,GAAQ,CACtCO,OAAQ2I,KAMZ3E,GAAsB,YAEtB,IAAIgF,GAAc7I,GAAgB,eAC9B8I,GAAiBvY,MAAMvO,UAIQ2R,MAA/BmV,GAAeD,KACjBhP,EAA4BiP,GAAgBD,GAAapF,GAAa,OAIxE,IAgCIsF,GAAmBC,GAAmCC,GAhCtDC,GAAmB,SAAUlQ,GAC/B8P,GAAeD,IAAa7P,IAAO,GAGjCmQ,GAAY,GAEZC,IAA0BjS,GAAM,WAClC,SAASqM,KAET,OADAA,EAAExhB,UAAU2e,YAAc,KACnBrM,OAAO+U,eAAe,IAAI7F,KAASA,EAAExhB,aAG1CsnB,GAAavO,EAAU,YACvBwO,GAAoBjV,OAAOtS,UAI3BwnB,GAAuBJ,GAAyB9U,OAAO+U,eAAiB,SAAU9P,GAEpF,OADAA,EAAI+I,GAAS/I,GACTR,EAAIQ,EAAG+P,IAAoB/P,EAAE+P,IACL,mBAAjB/P,EAAEoH,aAA6BpH,aAAaA,EAAEoH,YAChDpH,EAAEoH,YAAY3e,UACduX,aAAajF,OAASiV,GAAoB,MAGjDE,GAAWzJ,GAAgB,YAC3B0J,IAAyB,EAQzB,GAAG5O,OAGC,SAFNmO,GAAgB,GAAGnO,SAIjBkO,GAAoCQ,GAAqBA,GAAqBP,QACpC3U,OAAOtS,YAAW+mB,GAAoBC,IAHlDU,IAAyB,GAOlC/V,MAArBoV,KAAgCA,GAAoB,IAGlDhQ,EAAIgQ,GAAmBU,KAC3B5P,EAA4BkP,GAAmBU,IApBhC,WAAc,OAAOnpB,QAuBtC,IAAIqpB,GAAgB,CAClBZ,kBAAmBA,GACnBW,uBAAwBA,IAGtBE,GAAsBD,GAAcZ,kBAMpCc,GAAe,WAAc,OAAOvpB,MAoBpCwpB,GAAuBxV,OAAOyV,iBAAmB,aAAe,GAAK,WACvE,IAEIjC,EAFAkC,GAAiB,EACjBvP,EAAO,GAEX,KACEqN,EAASxT,OAAOoD,yBAAyBpD,OAAOtS,UAAW,aAAa4U,KACjEpQ,KAAKiU,EAAM,IAClBuP,EAAiBvP,aAAgBlK,MACjC,MAAO8G,IACT,OAAO,SAAwBkC,EAAG0H,GAKhC,OAJAxH,EAASF,GApBY,SAAUvC,GACjC,IAAK5Q,EAAS4Q,IAAc,OAAPA,EACnB,MAAMwB,UAAU,aAAe7D,OAAOqC,GAAM,mBAmB5CiT,CAAmBhJ,GACf+I,EAAgBlC,EAAOthB,KAAK+S,EAAG0H,GAC9B1H,EAAE2Q,UAAYjJ,EACZ1H,GAd8D,QAgBnE5F,GAEFwW,GAAsBR,GAAcZ,kBACpCqB,GAA2BT,GAAcD,uBACzCW,GAAarK,GAAgB,YAC7BsK,GAAO,OACPC,GAAS,SACTC,GAAU,UAEVC,GAAe,WAAc,OAAOnqB,MAEpCoqB,GAAiB,SAAUC,EAAUjJ,EAAMkJ,EAAqBC,EAAMC,EAASC,EAAQC,IA7C3D,SAAUJ,EAAqBlJ,EAAMmJ,GACnE,IAAI9G,EAAgBrC,EAAO,YAC3BkJ,EAAoB5oB,UAAYyhB,GAAamG,GAAqB,CAAEiB,KAAM7S,EAAyB,EAAG6S,KACtG7G,GAAe4G,EAAqB7G,GAAe,GACnDoF,GAAUpF,GAAiB8F,GA0C3BoB,CAA0BL,EAAqBlJ,EAAMmJ,GAErD,IAkBIK,EAA0BC,EAASC,EAlBnCC,EAAqB,SAAUC,GACjC,GAAIA,IAASR,GAAWS,EAAiB,OAAOA,EAChD,IAAKnB,IAA4BkB,KAAQE,EAAmB,OAAOA,EAAkBF,GACrF,OAAQA,GACN,KAAKhB,GACL,KAAKC,GACL,KAAKC,GAAS,OAAO,WAAqB,OAAO,IAAII,EAAoBtqB,KAAMgrB,IAC/E,OAAO,WAAc,OAAO,IAAIV,EAAoBtqB,QAGpDyjB,EAAgBrC,EAAO,YACvB+J,GAAwB,EACxBD,EAAoBb,EAAS3oB,UAC7B0pB,EAAiBF,EAAkBnB,KAClCmB,EAAkB,eAClBV,GAAWU,EAAkBV,GAC9BS,GAAmBnB,IAA4BsB,GAAkBL,EAAmBP,GACpFa,EAA4B,SAARjK,GAAkB8J,EAAkBI,SAA4BF,EAgCxF,GA5BIC,IACFT,EAA2B1B,GAAqBmC,EAAkBnlB,KAAK,IAAImkB,IACvER,KAAwB7V,OAAOtS,WAAakpB,EAAyBL,OAClErB,GAAqB0B,KAA8Bf,KAClDL,GACFA,GAAqBoB,EAA0Bf,IACS,mBAAxCe,EAAyBb,KACzCxQ,EAA4BqR,EAA0Bb,GAAYI,KAItEzG,GAAekH,EAA0BnH,GAAe,KAKxD+G,GAAWP,IAAUmB,GAAkBA,EAAezL,OAASsK,KACjEkB,GAAwB,EACxBF,EAAkB,WAAoB,OAAOG,EAAellB,KAAKlG,QAI9DkrB,EAAkBnB,MAAgBkB,GACrC1R,EAA4B2R,EAAmBnB,GAAYkB,GAE7DpC,GAAUzH,GAAQ6J,EAGdT,EAMF,GALAK,EAAU,CACRU,OAAQR,EAAmBd,IAC3BzP,KAAMiQ,EAASQ,EAAkBF,EAAmBf,IACpDsB,QAASP,EAAmBb,KAE1BQ,EAAQ,IAAKI,KAAOD,GAClBf,IAA4BqB,KAA2BL,KAAOI,KAChE3P,GAAS2P,EAAmBJ,EAAKD,EAAQC,SAEtCtM,GAAQ,CAAE1R,OAAQsU,EAAMT,OAAO,EAAM3B,OAAQ8K,IAA4BqB,GAAyBN,GAG3G,OAAOA,GAGLW,GAAiB,iBACjBC,GAAqBtQ,GAAc7E,IACnCoV,GAAqBvQ,GAAcE,UAAUmQ,IAY7CG,GAAoBvB,GAAena,MAAO,SAAS,SAAU2b,EAAUC,GACzEJ,GAAmBzrB,KAAM,CACvB0S,KAAM8Y,GACN1e,OAAQqL,EAAgByT,GACxBlP,MAAO,EACPmP,KAAMA,OAIP,WACD,IAAIpkB,EAAQikB,GAAmB1rB,MAC3B8M,EAASrF,EAAMqF,OACf+e,EAAOpkB,EAAMokB,KACbnP,EAAQjV,EAAMiV,QAClB,OAAK5P,GAAU4P,GAAS5P,EAAOjD,QAC7BpC,EAAMqF,YAASuG,EACR,CAAEuE,WAAOvE,EAAWyY,MAAM,IAEvB,QAARD,EAAuB,CAAEjU,MAAO8E,EAAOoP,MAAM,GACrC,UAARD,EAAyB,CAAEjU,MAAO9K,EAAO4P,GAAQoP,MAAM,GACpD,CAAElU,MAAO,CAAC8E,EAAO5P,EAAO4P,IAASoP,MAAM,KAC7C,UAKHjD,GAAUkD,UAAYlD,GAAU5Y,MAGhC2Y,GAAiB,QACjBA,GAAiB,UACjBA,GAAiB,WAEjB,IAAIoD,GAAehY,OAAOiY,OAKtBC,IAAgBF,IAAgBnV,GAAM,WACxC,IAAIsV,EAAI,GACJC,EAAI,GAEJtF,EAASvH,SACT8M,EAAW,uBAGf,OAFAF,EAAErF,GAAU,EACZuF,EAASvpB,MAAM,IAAI+hB,SAAQ,SAAUyH,GAAOF,EAAEE,GAAOA,KACf,GAA/BN,GAAa,GAAIG,GAAGrF,IAAgB7E,GAAW+J,GAAa,GAAII,IAAIzb,KAAK,KAAO0b,KACpF,SAAgBvf,EAAQ2G,GAM3B,IALA,IAAI8Y,EAAIvK,GAASlV,GACb0f,EAAkB5X,UAAU/K,OAC5B6S,EAAQ,EACRgB,EAAwBD,GAA4BrZ,EACpD+S,EAAuBE,EAA2BjT,EAC/CooB,EAAkB9P,GAMvB,IALA,IAIIhE,EAJA+T,EAAIzU,EAAcpD,UAAU8H,MAC5BlC,EAAOkD,EAAwBuE,GAAWwK,GAAGnP,OAAOI,EAAsB+O,IAAMxK,GAAWwK,GAC3F5iB,EAAS2Q,EAAK3Q,OACd6iB,EAAI,EAED7iB,EAAS6iB,GACdhU,EAAM8B,EAAKkS,KACN1V,IAAeG,EAAqBjR,KAAKumB,EAAG/T,KAAM6T,EAAE7T,GAAO+T,EAAE/T,IAEpE,OAAO6T,GACPP,GAIJxN,GAAQ,CAAE1R,OAAQ,SAAUiS,MAAM,EAAMC,OAAQhL,OAAOiY,SAAWC,IAAgB,CAChFD,OAAQC,KAGV,IAAIS,GAAkBjN,GAAgB,eAElCkN,GAAuE,aAAnD7U,EAAW,WAAc,OAAOnD,UAArB,IAU/BiY,GAAU,SAAUnW,GACtB,IAAIuC,EAAG2N,EAAK7d,EACZ,YAAcsK,IAAPqD,EAAmB,YAAqB,OAAPA,EAAc,OAEQ,iBAAlDkQ,EAXD,SAAUlQ,EAAIgC,GACzB,IACE,OAAOhC,EAAGgC,GACV,MAAO3B,KAQS+V,CAAO7T,EAAIjF,OAAO0C,GAAKiW,KAAgC/F,EAErEgG,GAAoB7U,EAAWkB,GAEH,WAA3BlQ,EAASgP,EAAWkB,KAAsC,mBAAZA,EAAE8T,OAAuB,YAAchkB,GAIxFoR,GAAO,GAEXA,GAHsBuF,GAAgB,gBAGd,IAIxB,IAAIsN,GAAkC,eAAjB3Y,OAAO8F,IAAyB,WACnD,MAAO,WAAa0S,GAAQ7sB,MAAQ,KAClCma,GAAKlG,SAELgZ,GAAoBjZ,OAAOtS,UAI3BsrB,KAAmBC,GAAkBhZ,UACvCsH,GAAS0R,GAAmB,WAAYD,GAAgB,CAAErR,QAAQ,IAGpE,IAAIuR,IAAYrW,GAAM,WACpB,OAAO7C,OAAOmZ,aAAanZ,OAAOoZ,kBAAkB,QAGlDC,GAAmBhX,GAAqB,SAAU1X,GACtD,IAAIsY,EAAiBoC,EAAqBjV,EAItCkpB,EAAW/S,EAAI,QACfH,EAAK,EAEL+S,EAAenZ,OAAOmZ,cAAgB,WACxC,OAAO,GAGLI,EAAc,SAAU7W,GAC1BO,EAAeP,EAAI4W,EAAU,CAAE1V,MAAO,CACpC4V,SAAU,OAAQpT,EAClBqT,SAAU,OAoCVC,EAAO/uB,EAAOD,QAAU,CAC1BivB,UAAU,EACVC,QAlCY,SAAUlX,EAAI0M,GAE1B,IAAKtd,EAAS4Q,GAAK,MAAoB,iBAANA,EAAiBA,GAAmB,iBAANA,EAAiB,IAAM,KAAOA,EAC7F,IAAK+B,EAAI/B,EAAI4W,GAAW,CAEtB,IAAKH,EAAazW,GAAK,MAAO,IAE9B,IAAK0M,EAAQ,MAAO,IAEpBmK,EAAY7W,GAEZ,OAAOA,EAAG4W,GAAUE,UAwBtBK,YArBgB,SAAUnX,EAAI0M,GAC9B,IAAK3K,EAAI/B,EAAI4W,GAAW,CAEtB,IAAKH,EAAazW,GAAK,OAAO,EAE9B,IAAK0M,EAAQ,OAAO,EAEpBmK,EAAY7W,GAEZ,OAAOA,EAAG4W,GAAUG,UAatBK,SATa,SAAUpX,GAEvB,OADIwW,IAAYQ,EAAKC,UAAYR,EAAazW,KAAQ+B,EAAI/B,EAAI4W,IAAWC,EAAY7W,GAC9EA,IAUTgE,EAAW4S,IAAY,KAGnBS,GAAarO,GAAgB,YAC7BsO,GAAmB/d,MAAMvO,UAOzBusB,GAAavO,GAAgB,YAS7BwO,GAA+B,SAAUpM,EAAU5T,EAAI0J,EAAOsS,GAChE,IACE,OAAOA,EAAUhc,EAAGiL,EAASvB,GAAO,GAAIA,EAAM,IAAM1J,EAAG0J,GAEvD,MAAOb,GACP,IAAIoX,EAAerM,EAAiB,OAEpC,WADqBzO,IAAjB8a,GAA4BhV,EAASgV,EAAajoB,KAAK4b,IACrD/K,IAINqX,GAAY/X,GAAqB,SAAU1X,GAC/C,IAAI0vB,EAAS,SAAUC,EAASvlB,GAC9B/I,KAAKsuB,QAAUA,EACftuB,KAAK+I,OAASA,IAGFpK,EAAOD,QAAU,SAAU6vB,EAAUrgB,EAAI3G,EAAMinB,EAAYC,GACvE,IACI3M,EAAU4M,EAAQhS,EAAO7S,EAAQd,EAAQwhB,EAAMoE,EAhCfjY,EA+BhCiO,EAAgBd,GAAY3V,EAAI3G,EAAMinB,EAAa,EAAI,GAG3D,GAAIC,EACF3M,EAAWyM,MACN,CAEL,GAAqB,mBADrBG,EA/BoB,SAAUhY,GAChC,GAAUrD,MAANqD,EAAiB,OAAOA,EAAGuX,KAC1BvX,EAAG,eACHmS,GAAUgE,GAAQnW,IA4BZkY,CAAkBL,IACM,MAAMrW,UAAU,0BAEjD,QAvCY7E,KADsBqD,EAwCRgY,KAvCA7F,GAAU5Y,QAAUyG,GAAMsX,GAAiBD,MAAgBrX,GAuClD,CACjC,IAAKgG,EAAQ,EAAG7S,EAAS0S,GAASgS,EAAS1kB,QAASA,EAAS6S,EAAOA,IAIlE,IAHA3T,EAASylB,EACL7J,EAAcxL,EAASwV,EAAOJ,EAAS7R,IAAQ,GAAIiS,EAAK,IACxDhK,EAAc4J,EAAS7R,MACb3T,aAAkBslB,EAAQ,OAAOtlB,EAC/C,OAAO,IAAIslB,GAAO,GAEtBvM,EAAW4M,EAAOxoB,KAAKqoB,GAIzB,IADAhE,EAAOzI,EAASyI,OACPoE,EAAOpE,EAAKrkB,KAAK4b,IAAWgK,MAEnC,GAAqB,iBADrB/iB,EAASmlB,GAA6BpM,EAAU6C,EAAegK,EAAK/W,MAAO4W,KAC1CzlB,GAAUA,aAAkBslB,EAAQ,OAAOtlB,EAC5E,OAAO,IAAIslB,GAAO,KAGdQ,KAAO,SAAU9lB,GACvB,OAAO,IAAIslB,GAAO,EAAMtlB,OAItB+lB,GAAa,SAAUpY,EAAIoK,EAAanB,GAC1C,KAAMjJ,aAAcoK,GAClB,MAAM5I,UAAU,cAAgByH,EAAOA,EAAO,IAAM,IAAM,cAC1D,OAAOjJ,GAGPqY,GAAarP,GAAgB,YAC7BsP,IAAe,EAEnB,IACE,IAAIC,GAAS,EACTC,GAAqB,CACvB3E,KAAM,WACJ,MAAO,CAAEuB,OAAQmD,OAEnB,OAAU,WACRD,IAAe,IAGnBE,GAAmBH,IAAc,WAC/B,OAAO/uB,MAGTiQ,MAAMkf,KAAKD,IAAoB,WAAc,MAAM,KACnD,MAAOnY,IAET,IAkBIqY,GAAoB,SAAUtS,EAAOuS,EAAOC,GAC9C,IAAIC,EAAWC,EAUf,OAPEhG,IAE0C,mBAAlC+F,EAAYF,EAAMhP,cAC1BkP,IAAcD,GACdxpB,EAAS0pB,EAAqBD,EAAU7tB,YACxC8tB,IAAuBF,EAAQ5tB,WAC/B8nB,GAAqB1M,EAAO0S,GACvB1S,GAuFL2S,GAAc,SAAU3iB,EAAQ8V,EAAKphB,GACvC,IAAK,IAAIkX,KAAOkK,EAAKrH,GAASzO,EAAQ4L,EAAKkK,EAAIlK,GAAMlX,GACrD,OAAOsL,GAGL4iB,GAAYhQ,GAAgB,WAc5BiQ,GAAmBtW,EAAqBjV,EASxCwpB,GAAUP,GAAiBO,QAG3BgC,GAAqBzU,GAAc7E,IACnCuZ,GAAyB1U,GAAcE,UAoLvCyU,IAxSa,SAAUC,EAAkBC,EAASC,EAAQ9L,EAAQ+L,GACpE,IAAIC,EAAoBxZ,EAAyB,IAC7CyZ,EAAkBD,GAAqBA,EAAkBzuB,UACzDof,EAAcqP,EACdE,EAAyB,MACzBC,EAAW,GAEXC,EAAY,SAAUzF,GACxB,IAAI0F,EAAeJ,EAAgBtF,GACnCvP,GAAS6U,EAAiBtF,EACjB,OAAPA,EAAe,SAAalT,GAE1B,OADA4Y,EAAatqB,KAAKlG,KAAgB,IAAV4X,EAAc,EAAIA,GACnC5X,MACE,UAAP8qB,GAEO,OAAPA,GAEO,OAAPA,EAJkB,SAAUpS,GAC9B,OAA2C8X,EAAatqB,KAAKlG,KAAc,IAAR0Y,EAAY,EAAIA,IAKjF,SAAaA,EAAKd,GAEpB,OADA4Y,EAAatqB,KAAKlG,KAAc,IAAR0Y,EAAY,EAAIA,EAAKd,GACtC5X,QAMb,GAAIse,GAAWyR,EAA8C,mBAArBI,KAAgDC,EAAgBvL,UAAYhO,GAAM,YACxH,IAAIsZ,GAAoB7E,UAAUf,YAGlCzJ,EAAcmP,EAAOQ,eAAeT,EAASD,EAAkB5L,EAAQkM,GACvEhD,GAAiBM,UAAW,OACvB,GAAIrP,GAAWyR,GAAkB,GAAO,CAC7C,IAAI7wB,EAAW,IAAI4hB,EAEf4P,EAAiBxxB,EAAc,KAAkB,EAAG,IAAMA,EAE1DyxB,EAAuB9Z,GAAM,WAAc3X,EAASuZ,IAAI,MAGxDmY,EAzE0B,SAAU9Z,EAAM+Z,GAChD,IAAsB7B,GAAc,OAAO,EAC3C,IAAI8B,GAAoB,EACxB,IACE,IAAItX,EAAS,GACbA,EAAOuV,IAAc,WACnB,MAAO,CACLxE,KAAM,WACJ,MAAO,CAAEuB,KAAMgF,GAAoB,MAiEgC,IAAIX,EA7DxE3W,GACL,MAAOzC,IACT,OAAO+Z,EA2DkBC,GAEnBC,EAAyBna,GAAM,WAIjC,IAFA,IAAIoa,EAAY,IAAId,EAChBzT,EAAQ,EACLA,KAASuU,EAAe,IAAEvU,EAAOA,GACxC,OAAQuU,EAAUxY,KAAK,MAGpBmY,KACH9P,EAAckP,GAAQ,SAAUX,EAAOd,GACrCO,GAAWO,EAAOvO,EAAaiP,GAC/B,IAAIxoB,EAAO6nB,GAAkB,IAAIe,EAAqBd,EAAOvO,GAE7D,OADgBzN,MAAZkb,GAAuBH,GAAUG,EAAUhnB,EAAU,IAAGA,EAAM4c,GAC3D5c,MAEG7F,UAAY0uB,EACxBA,EAAgB/P,YAAcS,IAG5B6P,GAAwBK,KAC1BT,EAAU,UACVA,EAAU,SAIRS,GAAcN,IAAgBH,EAAUF,GAM9CC,EAAyB,IAAIxP,EAC7BtC,GAAQ,CAAEK,QAAQ,EAAMG,OAAQ8B,GAAeqP,GAAqBG,GAEpE5M,GAAe5C,EAAaiP,GAEdE,EAAOiB,UAAUpQ,EAAaiP,EAAkB5L,GAoNnDgN,CAAW,OAAO,SAAU5a,GACvC,OAAO,WAAiB,OAAOA,EAAIvW,KAAM4U,UAAU/K,OAAS+K,UAAU,QAAKvB,MA9KtD,CACrBod,eAAgB,SAAUT,EAASD,EAAkB5L,EAAQkM,GAC3D,IAAIpM,EAAI+L,GAAQ,SAAUzoB,EAAMgnB,GAC9BO,GAAWvnB,EAAM0c,EAAG8L,GACpBH,GAAmBroB,EAAM,CACvBmL,KAAMqd,EACNrT,MAAOyG,GAAa,MACpBiO,WAAO/d,EACPge,UAAMhe,EACNie,KAAM,IAEHta,IAAazP,EAAK+pB,KAAO,GACdje,MAAZkb,GAAuBH,GAAUG,EAAUhnB,EAAK8oB,GAAQ9oB,EAAM4c,MAGhE3I,EAAmBqU,GAAuBE,GAE1CnxB,EAAS,SAAU2I,EAAMmR,EAAKd,GAChC,IAEIjC,EAAU+G,EAFVjV,EAAQ+T,EAAiBjU,GACzBgqB,EAAQC,EAASjqB,EAAMmR,GAqBzB,OAlBE6Y,EACFA,EAAM3Z,MAAQA,GAGdnQ,EAAM4pB,KAAOE,EAAQ,CACnB7U,MAAOA,EAAQkR,GAAQlV,GAAK,GAC5BA,IAAKA,EACLd,MAAOA,EACPjC,SAAUA,EAAWlO,EAAM4pB,KAC3B9G,UAAMlX,EACNoe,SAAS,GAENhqB,EAAM2pB,QAAO3pB,EAAM2pB,MAAQG,GAC5B5b,IAAUA,EAAS4U,KAAOgH,GAC1Bva,EAAavP,EAAM6pB,OAClB/pB,EAAK+pB,OAEI,MAAV5U,IAAejV,EAAMiV,MAAMA,GAAS6U,IACjChqB,GAGPiqB,EAAW,SAAUjqB,EAAMmR,GAC7B,IAGI6Y,EAHA9pB,EAAQ+T,EAAiBjU,GAEzBmV,EAAQkR,GAAQlV,GAEpB,GAAc,MAAVgE,EAAe,OAAOjV,EAAMiV,MAAMA,GAEtC,IAAK6U,EAAQ9pB,EAAM2pB,MAAOG,EAAOA,EAAQA,EAAMhH,KAC7C,GAAIgH,EAAM7Y,KAAOA,EAAK,OAAO6Y,GAiFjC,OA7EA9B,GAAYxL,EAAEviB,UAAW,CAGvBgwB,MAAO,WAKL,IAJA,IACIjqB,EAAQ+T,EADDxb,MAEPie,EAAOxW,EAAMiV,MACb6U,EAAQ9pB,EAAM2pB,MACXG,GACLA,EAAME,SAAU,EACZF,EAAM5b,WAAU4b,EAAM5b,SAAW4b,EAAM5b,SAAS4U,UAAOlX,UACpD4K,EAAKsT,EAAM7U,OAClB6U,EAAQA,EAAMhH,KAEhB9iB,EAAM2pB,MAAQ3pB,EAAM4pB,UAAOhe,EACvB2D,EAAavP,EAAM6pB,KAAO,EAXnBtxB,KAYDsxB,KAAO,GAInB,OAAU,SAAU5Y,GAClB,IAAInR,EAAOvH,KACPyH,EAAQ+T,EAAiBjU,GACzBgqB,EAAQC,EAASjqB,EAAMmR,GAC3B,GAAI6Y,EAAO,CACT,IAAIhH,EAAOgH,EAAMhH,KACboH,EAAOJ,EAAM5b,gBACVlO,EAAMiV,MAAM6U,EAAM7U,OACzB6U,EAAME,SAAU,EACZE,IAAMA,EAAKpH,KAAOA,GAClBA,IAAMA,EAAK5U,SAAWgc,GACtBlqB,EAAM2pB,OAASG,IAAO9pB,EAAM2pB,MAAQ7G,GACpC9iB,EAAM4pB,MAAQE,IAAO9pB,EAAM4pB,KAAOM,GAClC3a,EAAavP,EAAM6pB,OAClB/pB,EAAK+pB,OACV,QAASC,GAIb1M,QAAS,SAAiBJ,GAIxB,IAHA,IAEI8M,EAFA9pB,EAAQ+T,EAAiBxb,MACzB2kB,EAAgBd,GAAYY,EAAY7P,UAAU/K,OAAS,EAAI+K,UAAU,QAAKvB,EAAW,GAEtFke,EAAQA,EAAQA,EAAMhH,KAAO9iB,EAAM2pB,OAGxC,IAFAzM,EAAc4M,EAAM3Z,MAAO2Z,EAAM7Y,IAAK1Y,MAE/BuxB,GAASA,EAAME,SAASF,EAAQA,EAAM5b,UAKjD8C,IAAK,SAAaC,GAChB,QAAS8Y,EAASxxB,KAAM0Y,MAI5B+W,GAAYxL,EAAEviB,UAAWyiB,EAAS,CAEhC5N,IAAK,SAAamC,GAChB,IAAI6Y,EAAQC,EAASxxB,KAAM0Y,GAC3B,OAAO6Y,GAASA,EAAM3Z,OAGxBtB,IAAK,SAAaoC,EAAKd,GACrB,OAAOhZ,EAAOoB,KAAc,IAAR0Y,EAAY,EAAIA,EAAKd,KAEzC,CAEFga,IAAK,SAAaha,GAChB,OAAOhZ,EAAOoB,KAAM4X,EAAkB,IAAVA,EAAc,EAAIA,EAAOA,MAGrDZ,GAAa2Y,GAAiB1L,EAAEviB,UAAW,OAAQ,CACrD6U,IAAK,WACH,OAAOiF,EAAiBxb,MAAMsxB,QAG3BrN,GAETiN,UAAW,SAAUjN,EAAG8L,EAAkB5L,GACxC,IAAI0N,EAAgB9B,EAAmB,YACnC+B,EAA6BjC,GAAuBE,GACpDgC,EAA2BlC,GAAuBgC,GAGtDzH,GAAenG,EAAG8L,GAAkB,SAAUnE,EAAUC,GACtD+D,GAAmB5vB,KAAM,CACvB0S,KAAMmf,EACN/kB,OAAQ8e,EACRnkB,MAAOqqB,EAA2BlG,GAClCC,KAAMA,EACNwF,UAAMhe,OAEP,WAKD,IAJA,IAAI5L,EAAQsqB,EAAyB/xB,MACjC6rB,EAAOpkB,EAAMokB,KACb0F,EAAQ9pB,EAAM4pB,KAEXE,GAASA,EAAME,SAASF,EAAQA,EAAM5b,SAE7C,OAAKlO,EAAMqF,SAAYrF,EAAM4pB,KAAOE,EAAQA,EAAQA,EAAMhH,KAAO9iB,EAAMA,MAAM2pB,OAMjE,QAARvF,EAAuB,CAAEjU,MAAO2Z,EAAM7Y,IAAKoT,MAAM,GACzC,UAARD,EAAyB,CAAEjU,MAAO2Z,EAAM3Z,MAAOkU,MAAM,GAClD,CAAElU,MAAO,CAAC2Z,EAAM7Y,IAAK6Y,EAAM3Z,OAAQkU,MAAM,IAN9CrkB,EAAMqF,YAASuG,EACR,CAAEuE,WAAOvE,EAAWyY,MAAM,MAMlC3H,EAAS,UAAY,UAAWA,GAAQ,GA/L9B,SAAU4L,GACzB,IAAIjP,EAAc7E,GAAW8T,GACzB9Y,EAAiBoC,EAAqBjV,EAEtC4S,GAAe8J,IAAgBA,EAAY4O,KAC7CzY,EAAe6J,EAAa4O,GAAW,CACrC7X,cAAc,EACdtB,IAAK,WAAc,OAAOvW,QA2L5BgyB,CAAWjC,MAWM,SAAUkC,GAC7B,OAAO,SAAUnV,EAAOoV,GACtB,IAGId,EAAOe,EAHP1F,EAAIpY,OAAO4D,EAAuB6E,IAClCsV,EAAW/V,GAAU6V,GACrBZ,EAAO7E,EAAE5iB,OAEb,OAAIuoB,EAAW,GAAKA,GAAYd,EAAaW,EAAoB,QAAK5e,GACtE+d,EAAQ3E,EAAE4F,WAAWD,IACN,OAAUhB,EAAQ,OAAUgB,EAAW,IAAMd,IACtDa,EAAS1F,EAAE4F,WAAWD,EAAW,IAAM,OAAUD,EAAS,MAC1DF,EAAoBxF,EAAE6F,OAAOF,GAAYhB,EACzCa,EAAoBxF,EAAEvc,MAAMkiB,EAAUA,EAAW,GAA+BD,EAAS,OAAlCf,EAAQ,OAAU,IAA0B,SAIzGmB,GAAkB,CAGpBC,OAAQ1C,IAAe,GAGvBwC,OAAQxC,IAAe,IAGrBwC,GAASC,GAAgBD,OAIzBG,GAAkB,kBAClBC,GAAqBvX,GAAc7E,IACnCqc,GAAqBxX,GAAcE,UAAUoX,IAIjDrI,GAAe/V,OAAQ,UAAU,SAAUuX,GACzC8G,GAAmB1yB,KAAM,CACvB0S,KAAM+f,GACNpU,OAAQhK,OAAOuX,GACflP,MAAO,OAIR,WACD,IAGI1U,EAHAP,EAAQkrB,GAAmB3yB,MAC3Bqe,EAAS5W,EAAM4W,OACf3B,EAAQjV,EAAMiV,MAElB,OAAIA,GAAS2B,EAAOxU,OAAe,CAAE+N,WAAOvE,EAAWyY,MAAM,IAC7D9jB,EAAQsqB,GAAOjU,EAAQ3B,GACvBjV,EAAMiV,OAAS1U,EAAM6B,OACd,CAAE+N,MAAO5P,EAAO8jB,MAAM,OAK/B,IAAI8G,GAAe,CACjBC,YAAa,EACbC,oBAAqB,EACrBC,aAAc,EACdC,eAAgB,EAChBC,YAAa,EACbC,cAAe,EACfC,aAAc,EACdC,qBAAsB,EACtBC,SAAU,EACVC,kBAAmB,EACnBC,eAAgB,EAChBC,gBAAiB,EACjBC,kBAAmB,EACnBC,UAAW,EACXC,cAAe,EACfC,aAAc,EACdC,SAAU,EACVC,iBAAkB,EAClBC,OAAQ,EACRC,YAAa,EACbC,cAAe,EACfC,cAAe,EACfC,eAAgB,EAChBC,aAAc,EACdC,cAAe,EACfC,iBAAkB,EAClBC,iBAAkB,EAClBC,eAAgB,EAChBC,iBAAkB,EAClBC,cAAe,EACfC,UAAW,GAGTC,GAAalV,GAAgB,YAC7BmV,GAAkBnV,GAAgB,eAClCoV,GAAcnJ,GAAkBJ,OAEpC,IAAK,IAAIwJ,MAAmBnC,GAAc,CACxC,IAAIoC,GAAare,EAASoe,IACtBE,GAAsBD,IAAcA,GAAWtzB,UACnD,GAAIuzB,GAAqB,CAEvB,GAAIA,GAAoBL,MAAgBE,GAAa,IACnDvb,EAA4B0b,GAAqBL,GAAYE,IAC7D,MAAO/d,GACPke,GAAoBL,IAAcE,GAKpC,GAHKG,GAAoBJ,KACvBtb,EAA4B0b,GAAqBJ,GAAiBE,IAEhEnC,GAAamC,IAAkB,IAAK,IAAI5U,MAAewL,GAEzD,GAAIsJ,GAAoB9U,MAAiBwL,GAAkBxL,IAAc,IACvE5G,EAA4B0b,GAAqB9U,GAAawL,GAAkBxL,KAChF,MAAOpJ,GACPke,GAAoB9U,IAAewL,GAAkBxL,MAwB7D,SAAS+U,GAAmBC,GAC1B,OAnBF,SAA4BA,GAC1B,GAAIllB,MAAMiP,QAAQiW,GAAM,CACtB,IAAK,IAAIrrB,EAAI,EAAGsrB,EAAO,IAAInlB,MAAMklB,EAAItrB,QAASC,EAAIqrB,EAAItrB,OAAQC,IAC5DsrB,EAAKtrB,GAAKqrB,EAAIrrB,GAGhB,OAAOsrB,GAaFC,CAAmBF,IAT5B,SAA0BG,GACxB,GAAI/V,OAAOuC,YAAY9N,OAAOshB,IAAkD,uBAAzCthB,OAAOtS,UAAUuS,SAAS/N,KAAKovB,GAAgC,OAAOrlB,MAAMkf,KAAKmG,GAQtFC,CAAiBJ,IALrD,WACE,MAAM,IAAIjd,UAAU,mDAIuCsd,GAG7D,IAAI3K,GAAU,GACV1N,GAAQ,GACZ,SAASsY,GAAgB9V,EAAM+V,GAC7B,GAAIzlB,MAAMiP,QAAQS,GAAlB,CACE,IAAIgW,GAA4B,EAC5BC,GAAoB,EACpBC,OAAiBxiB,EAErB,IACE,IAAK,IAAyCyiB,EAArCC,EAAYpW,EAAKJ,OAAOuC,cAAsB6T,GAA6BG,EAAQC,EAAUxL,QAAQuB,MAAO6J,GAA4B,EAE/IF,GADYK,EAAMle,MACK8d,GAEzB,MAAOM,GACPJ,GAAoB,EACpBC,EAAiBG,EACjB,QACA,IACOL,GAAiD,MAApBI,EAAUE,QAC1CF,EAAUE,SAEZ,QACA,GAAIL,EACF,MAAMC,SAQd,GAAsB,WAAlB9T,GAAQpC,GAQZuW,GAAeliB,OAAOwJ,oBAAoBkY,IAC1C7K,GAAQlL,GAAQ3L,OAAOiY,OAAOpB,GAAQlL,IAAS,GAAI+V,QARjD,IAAK,IAAIS,KAAUxW,EACjB8V,GAAgBU,EAAQxW,EAAKwW,IASnC,SAASC,GAAczW,GACrB,OAAOkL,GAAQlL,IAAS,GAK1B,SAASuW,GAAeG,GACtBlZ,GAAM/N,KAAKuF,MAAMwI,GAAO+X,GAAmBmB,IAG7C,IAAIC,GAAYtZ,GAAcC,SAK9BuB,GAAQ,CAAE1R,OAAQ,QAAS6T,OAAO,GAAQ,CACxC1D,SAAU,SAAkB7M,GAC1B,OAAOkmB,GAAUt2B,KAAMoQ,EAAIwE,UAAU/K,OAAS,EAAI+K,UAAU,QAAKvB,MAKrEuV,GAAiB,YAIjB,IAqBM2N,GACAC,GAtBFC,GAAc,WAChB,IAAIlvB,EAAO4R,EAASnZ,MAChB+I,EAAS,GAOb,OANIxB,EAAKsX,SAAQ9V,GAAU,KACvBxB,EAAKmvB,aAAY3tB,GAAU,KAC3BxB,EAAKovB,YAAW5tB,GAAU,KAC1BxB,EAAKqvB,SAAQ7tB,GAAU,KACvBxB,EAAKsvB,UAAS9tB,GAAU,KACxBxB,EAAKuvB,SAAQ/tB,GAAU,KACpBA,GAGLguB,GAAaC,OAAOt1B,UAAUoV,KAI9BmgB,GAAgB5iB,OAAO3S,UAAU8O,QAEjC0mB,GAAcH,GAEdI,IACEZ,GAAM,IACNC,GAAM,MACVO,GAAW7wB,KAAKqwB,GAAK,KACrBQ,GAAW7wB,KAAKswB,GAAK,KACI,IAAlBD,GAAIa,WAAqC,IAAlBZ,GAAIY,WAIhCC,QAAuChkB,IAAvB,OAAOyD,KAAK,IAAI,IAExBqgB,IAA4BE,MAGtCH,GAAc,SAAcI,GAC1B,IACIF,EAAWG,EAAQrc,EAAOpR,EAD1B0tB,EAAKx3B,KAuBT,OApBIq3B,KACFE,EAAS,IAAIP,OAAO,IAAMQ,EAAG/jB,OAAS,WAAYgjB,GAAYvwB,KAAKsxB,KAEjEL,KAA0BC,EAAYI,EAAGJ,WAE7Clc,EAAQ6b,GAAW7wB,KAAKsxB,EAAIF,GAExBH,IAA4Bjc,IAC9Bsc,EAAGJ,UAAYI,EAAG3Y,OAAS3D,EAAMwB,MAAQxB,EAAM,GAAGrR,OAASutB,GAEzDC,IAAiBnc,GAASA,EAAMrR,OAAS,GAG3CotB,GAAc/wB,KAAKgV,EAAM,GAAIqc,GAAQ,WACnC,IAAKztB,EAAI,EAAGA,EAAI8K,UAAU/K,OAAS,EAAGC,SACfuJ,IAAjBuB,UAAU9K,KAAkBoR,EAAMpR,QAAKuJ,MAK1C6H,IAIX,IAAIuc,GAAaP,GAEjB1Y,GAAQ,CAAE1R,OAAQ,SAAU6T,OAAO,EAAM3B,OAAQ,IAAIlI,OAAS2gB,IAAc,CAC1E3gB,KAAM2gB,KAGR,IAAIC,GAAQhY,GAAgB,SAIxBiY,GAAW,SAAUjhB,GACvB,IAAIkhB,EACJ,OAAO9xB,EAAS4Q,UAAmCrD,KAA1BukB,EAAWlhB,EAAGghB,OAA0BE,EAA6B,UAAlB7f,EAAWrB,KAGrFmhB,GAAa,SAAUnhB,GACzB,GAAIihB,GAASjhB,GACX,MAAMwB,UAAU,iDAChB,OAAOxB,GAGPohB,GAAUpY,GAAgB,SAgB9BlB,GAAQ,CAAE1R,OAAQ,SAAU6T,OAAO,EAAM3B,QAdd,SAAUmB,GACnC,IAAIkI,EAAS,IACb,IACE,MAAiB,SAAEA,GACnB,MAAOlkB,GACP,IAEE,OADAkkB,EAAOyP,KAAW,EACX,MAAiB,SAAEzP,GAC1B,MAAOjkB,KACT,OAAO,EAKuC2zB,IAAoC,CACpF9a,SAAU,SAAkB+a,GAC1B,SAAU3jB,OAAO4D,EAAuBjY,OACrC+M,QAAQ8qB,GAAWG,GAAepjB,UAAU/K,OAAS,EAAI+K,UAAU,QAAKvB,MAI/E,IAAI4kB,GAAYvY,GAAgB,WAE5BwY,IAAiCrhB,GAAM,WAIzC,IAAI2gB,EAAK,IAMT,OALAA,EAAG1gB,KAAO,WACR,IAAI/N,EAAS,GAEb,OADAA,EAAOovB,OAAS,CAAEl0B,EAAG,KACd8E,GAEyB,MAA3B,GAAGyH,QAAQgnB,EAAI,WAKpBY,IAAqCvhB,GAAM,WAC7C,IAAI2gB,EAAK,OACLa,EAAeb,EAAG1gB,KACtB0gB,EAAG1gB,KAAO,WAAc,OAAOuhB,EAAa1jB,MAAM3U,KAAM4U,YACxD,IAAI7L,EAAS,KAAKjG,MAAM00B,GACxB,OAAyB,IAAlBzuB,EAAOc,QAA8B,MAAdd,EAAO,IAA4B,MAAdA,EAAO,MAGxDuvB,GAAgC,SAAUxN,EAAKjhB,EAAQiN,EAAMmI,GAC/D,IAAImG,EAAS1F,GAAgBoL,GAEzByN,GAAuB1hB,GAAM,WAE/B,IAAIoC,EAAI,GAER,OADAA,EAAEmM,GAAU,WAAc,OAAO,GACZ,GAAd,GAAG0F,GAAK7R,MAGbuf,EAAoBD,IAAwB1hB,GAAM,WAEpD,IAAI4hB,GAAa,EACbjB,EAAK,IAkBT,MAhBY,UAAR1M,KAIF0M,EAAK,IAGFnX,YAAc,GACjBmX,EAAGnX,YAAY4X,IAAa,WAAc,OAAOT,GACjDA,EAAGkB,MAAQ,GACXlB,EAAGpS,GAAU,IAAIA,IAGnBoS,EAAG1gB,KAAO,WAAiC,OAAnB2hB,GAAa,EAAa,MAElDjB,EAAGpS,GAAQ,KACHqT,KAGV,IACGF,IACAC,GACQ,YAAR1N,IAAsBoN,IACd,UAARpN,IAAoBsN,GACrB,CACA,IAAIO,EAAqB,IAAIvT,GACzByF,EAAU/T,EAAKsO,EAAQ,GAAG0F,IAAM,SAAU0F,EAAcnI,EAAQiP,EAAKsB,EAAMC,GAC7E,OAAIxQ,EAAOvR,OAAS2gB,GACdc,IAAwBM,EAInB,CAAE/M,MAAM,EAAMlU,MAAO+gB,EAAmBzyB,KAAKmiB,EAAQiP,EAAKsB,IAE5D,CAAE9M,MAAM,EAAMlU,MAAO4Y,EAAatqB,KAAKoxB,EAAKjP,EAAQuQ,IAEtD,CAAE9M,MAAM,MAEbgN,EAAejO,EAAQ,GACvBkO,EAAclO,EAAQ,GAE1BtP,GAASlH,OAAO3S,UAAWopB,EAAKgO,GAChCvd,GAASyb,OAAOt1B,UAAW0jB,EAAkB,GAAVvb,EAG/B,SAAUwU,EAAQc,GAAO,OAAO4Z,EAAY7yB,KAAKmY,EAAQre,KAAMmf,IAG/D,SAAUd,GAAU,OAAO0a,EAAY7yB,KAAKmY,EAAQre,QAEpDif,GAAM1F,EAA4Byd,OAAOt1B,UAAU0jB,GAAS,QAAQ,KAIxE4T,GAAWzG,GAAgBD,OAI3B2G,GAAqB,SAAUxM,EAAG/P,EAAOma,GAC3C,OAAOna,GAASma,EAAUmC,GAASvM,EAAG/P,GAAO7S,OAAS,IAKpDqvB,GAAqB,SAAUC,EAAG1M,GACpC,IAAI3V,EAAOqiB,EAAEriB,KACb,GAAoB,mBAATA,EAAqB,CAC9B,IAAI/N,EAAS+N,EAAK5Q,KAAKizB,EAAG1M,GAC1B,GAAsB,iBAAX1jB,EACT,MAAMmP,UAAU,sEAElB,OAAOnP,EAGT,GAAsB,WAAlBgP,EAAWohB,GACb,MAAMjhB,UAAU,+CAGlB,OAAOuf,GAAWvxB,KAAKizB,EAAG1M,IAGxB2M,GAAQj2B,KAAKa,IACbq1B,GAAQl2B,KAAKC,IACbk2B,GAAUn2B,KAAK8S,MACfsjB,GAAuB,4BACvBC,GAAgC,oBAOpClB,GAA8B,UAAW,GAAG,SAAUmB,EAASxC,EAAeyC,GAC5E,MAAO,CAGL,SAAiBC,EAAaC,GAC5B,IAAI3gB,EAAIhB,EAAuBjY,MAC3B6nB,EAA0BxU,MAAfsmB,OAA2BtmB,EAAYsmB,EAAYF,GAClE,YAAoBpmB,IAAbwU,EACHA,EAAS3hB,KAAKyzB,EAAa1gB,EAAG2gB,GAC9B3C,EAAc/wB,KAAKmO,OAAO4E,GAAI0gB,EAAaC,IAIjD,SAAUvR,EAAQuR,GAChB,IAAIC,EAAMH,EAAgBzC,EAAe5O,EAAQroB,KAAM45B,GACvD,GAAIC,EAAI/N,KAAM,OAAO+N,EAAIjiB,MAEzB,IAAIkiB,EAAK3gB,EAASkP,GACdoE,EAAIpY,OAAOrU,MAEX+5B,EAA4C,mBAAjBH,EAC1BG,IAAmBH,EAAevlB,OAAOulB,IAE9C,IAAI/a,EAASib,EAAGjb,OAChB,GAAIA,EAAQ,CACV,IAAImb,EAAcF,EAAGjD,QACrBiD,EAAG1C,UAAY,EAGjB,IADA,IAAI6C,EAAU,KACD,CACX,IAAIlxB,EAASmwB,GAAmBY,EAAIrN,GACpC,GAAe,OAAX1jB,EAAiB,MAGrB,GADAkxB,EAAQ7qB,KAAKrG,IACR8V,EAAQ,MAGI,KADFxK,OAAOtL,EAAO,MACR+wB,EAAG1C,UAAY6B,GAAmBxM,EAAGlQ,GAASud,EAAG1C,WAAY4C,IAKpF,IAFA,IA7CwBtjB,EA6CpBwjB,EAAoB,GACpBC,EAAqB,EAChBrwB,EAAI,EAAGA,EAAImwB,EAAQpwB,OAAQC,IAAK,CACvCf,EAASkxB,EAAQnwB,GAUjB,IARA,IAAIswB,EAAU/lB,OAAOtL,EAAO,IACxBqpB,EAAWgH,GAAMC,GAAMhd,GAAUtT,EAAO2T,OAAQ+P,EAAE5iB,QAAS,GAC3DwwB,EAAW,GAMN3N,EAAI,EAAGA,EAAI3jB,EAAOc,OAAQ6iB,IAAK2N,EAASjrB,UAzDzCiE,KADcqD,EA0D8C3N,EAAO2jB,IAzDvDhW,EAAKrC,OAAOqC,IA0DhC,IAAI4jB,EAAgBvxB,EAAOovB,OAC3B,GAAI4B,EAAmB,CACrB,IAAIQ,EAAe,CAACH,GAAS9c,OAAO+c,EAAUjI,EAAU3F,QAClCpZ,IAAlBinB,GAA6BC,EAAanrB,KAAKkrB,GACnD,IAAIzc,EAAcxJ,OAAOulB,EAAajlB,WAAMtB,EAAWknB,SAEvD1c,EAAc2c,EAAgBJ,EAAS3N,EAAG2F,EAAUiI,EAAUC,EAAeV,GAE3ExH,GAAY+H,IACdD,GAAqBzN,EAAEvc,MAAMiqB,EAAoB/H,GAAYvU,EAC7Dsc,EAAqB/H,EAAWgI,EAAQvwB,QAG5C,OAAOqwB,EAAoBzN,EAAEvc,MAAMiqB,KAKvC,SAASK,EAAgBJ,EAAS9C,EAAKlF,EAAUiI,EAAUC,EAAezc,GACxE,IAAI4c,EAAUrI,EAAWgI,EAAQvwB,OAC7B6rB,EAAI2E,EAASxwB,OACb6wB,EAAUlB,GAKd,YAJsBnmB,IAAlBinB,IACFA,EAAgBtY,GAASsY,GACzBI,EAAUnB,IAELtC,EAAc/wB,KAAK2X,EAAa6c,GAAS,SAAUxf,EAAOyf,GAC/D,IAAIC,EACJ,OAAQD,EAAGrI,OAAO,IAChB,IAAK,IAAK,MAAO,IACjB,IAAK,IAAK,OAAO8H,EACjB,IAAK,IAAK,OAAO9C,EAAIpnB,MAAM,EAAGkiB,GAC9B,IAAK,IAAK,OAAOkF,EAAIpnB,MAAMuqB,GAC3B,IAAK,IACHG,EAAUN,EAAcK,EAAGzqB,MAAM,GAAI,IACrC,MACF,QACE,IAAIgE,GAAKymB,EACT,GAAU,IAANzmB,EAAS,OAAOgH,EACpB,GAAIhH,EAAIwhB,EAAG,CACT,IAAItxB,EAAIk1B,GAAQplB,EAAI,IACpB,OAAU,IAAN9P,EAAgB8W,EAChB9W,GAAKsxB,OAA8BriB,IAApBgnB,EAASj2B,EAAI,GAAmBu2B,EAAGrI,OAAO,GAAK+H,EAASj2B,EAAI,GAAKu2B,EAAGrI,OAAO,GACvFpX,EAET0f,EAAUP,EAASnmB,EAAI,GAE3B,YAAmBb,IAAZunB,EAAwB,GAAKA,SAO1C,IAAIC,GAAc,gDAEdC,GAAa,IAAMD,GAAc,IACjCE,GAAQ/D,OAAO,IAAM8D,GAAaA,GAAa,KAC/CE,GAAQhE,OAAO8D,GAAaA,GAAa,MAGzCG,GAAiB,SAAU3f,GAC7B,OAAO,SAAUwB,GACf,IAAIuB,EAAShK,OAAO4D,EAAuB6E,IAG3C,OAFW,EAAPxB,IAAU+C,EAASA,EAAO7N,QAAQuqB,GAAO,KAClC,EAAPzf,IAAU+C,EAASA,EAAO7N,QAAQwqB,GAAO,KACtC3c,IAIP6c,GAAa,CAGfta,MAAOqa,GAAe,GAGtBpa,IAAKoa,GAAe,GAGpBE,KAAMF,GAAe,IAanBG,GAAQF,GAAWC,KAYvB,SAASl4B,GAAImd,EAAOib,GAClB,IAAIvxB,EACAwxB,EAAKlb,EAAMvW,OACXd,EAAS,GAEb,IAAKe,EAAI,EAAGA,EAAIwxB,EAAIxxB,IAClBf,EAAOqG,KAAKisB,EAAMjb,EAAMtW,KAG1B,OAAOf,EAiBT,SAASwyB,GAAQr3B,GACf,OAAOA,EAAI,IAAMf,KAAKq4B,GAAK,IAO7B,SAASC,GAAUjqB,GACjB,OAAOA,EAAEX,cAAcL,QAAQ,SAAS,SAAUklB,EAAGtf,GACnD,OAAOA,EAAEslB,iBAUb,SAASC,GAAWnqB,GAClB,OAAOA,EAAE8gB,OAAO,GAAGoJ,cAAgBlqB,EAAEtB,MAAM,GAG7C,SAAS0rB,GAAiBtqB,EAASxR,EAAOC,EAAQ87B,GAWhD,OAVa,MAAT/7B,GAA2B,MAAVC,IACnB87B,EAAMA,GAAOvqB,EAAQwqB,OAER,MAATh8B,EACFA,EAAQ+7B,EAAI/7B,MAAQ+7B,EAAI97B,OAASA,EACd,MAAVA,IACTA,EAAS87B,EAAI97B,OAAS87B,EAAI/7B,MAAQA,IAI/B,CACLA,MAAOA,EACPC,OAAQA,GAGZ,SAASg8B,GAAUpoB,EAAGrC,GAEpB,IAEI0qB,EAAIC,EAFJC,EAASvoB,EAAEuoB,OAIf,GAAsB,iBAAXA,GAAiC,MAAVA,EAAgB,CAEhD,IAAI7d,GAAU6d,GAAU,UAAUrrB,cAAcsqB,OAE5CgB,EAAgB7qB,EAAQwqB,OACxB/7B,EAASo8B,EAAcp8B,OACvBD,EAAQq8B,EAAcr8B,MACtB+B,EAAIs6B,EAAct6B,EAClBC,EAAIq6B,EAAcr6B,EAGlBs6B,EAAK/d,EAAOpB,SAAS,QAAUpb,EAAIwc,EAAOpB,SAAS,SAAWpb,EAAI/B,EAAQ+B,EAAI/B,EAAQ,EACtFu8B,EAAKhe,EAAOpB,SAAS,OAASnb,EAAIuc,EAAOpB,SAAS,UAAYnb,EAAI/B,EAAS+B,EAAI/B,EAAS,EAE5Fi8B,EAAa,MAARroB,EAAEqoB,GAAaroB,EAAEqoB,GAAKI,EAC3BH,EAAa,MAARtoB,EAAEsoB,GAAatoB,EAAEsoB,GAAKI,OAE3BL,EAAKE,EAAO,GACZD,EAAKC,EAAO,GAId,MAAO,CAACF,EAAIC,GArGdzd,GAAQ,CAAE1R,OAAQ,SAAU6T,OAAO,EAAM3B,OAXZ,SAAUmB,GACrC,OAAOtJ,GAAM,WACX,QAASgkB,GAAuB,QAN1B,aAMgD,QAAcA,GAAuB,KAAElb,OAASQ,KASzDmc,CAAuB,SAAW,CACjFnB,KAAM,WACJ,OAAOC,GAAMp7B,SAsGjB,IAcIu8B,GAAK,6BACLC,GAAQ,gCACRC,GAAQ,+BAWRC,GAAU,CACZv2B,OAA0B,oBAAXA,OAAyB,KAAOA,OAC/C7G,SAA8B,oBAAbA,SAA2B,KAAOA,UASrD,SAASq9B,GAAgBz9B,EAAU4hB,GACjC,KAAM5hB,aAAoB4hB,GACxB,MAAM,IAAI5I,UAAU,qCAIxB,IAAI0kB,GAAO,SAASA,IAClBD,GAAgB38B,KAAM48B,IAGpB,GAAW,GACXp+B,GAAO,sBAEX,SAAS4kB,GAAOzD,GAEd,OAAO+c,GAAQp9B,SAASC,gBAAgBg9B,GAAI5c,GAE9C,SAASkd,GAAavrB,GACpB,GAAIA,aAAmBsrB,GAAM,OAAOtrB,EAEpC,GAAyB,WAArByQ,GAAQzQ,GACV,OAAOwrB,GAAQxrB,GAGjB,GAAe,MAAXA,EACF,OAAO,IAAI,GAAS9S,IAGtB,GAAuB,iBAAZ8S,GAA8C,MAAtBA,EAAQghB,OAAO,GAChD,OAAOwK,GAAQJ,GAAQp9B,SAASD,cAAciS,IAGhD,IAAIyrB,EAAO3Z,GAAO,OAKlB,OAJA2Z,EAAKC,UAAY1rB,EAGPwrB,GAAQC,EAAKE,YAGzB,SAASC,GAAUvd,EAAMod,GACvB,OAAOA,aAAgBL,GAAQv2B,OAAOg3B,KAAOJ,EAAO3Z,GAAOzD,GAG7D,SAASyd,GAAML,GAEb,IAAKA,EAAM,OAAO,KAElB,GAAIA,EAAK79B,oBAAoB09B,GAAM,OAAOG,EAAK79B,SAE/C,IAAIm+B,EAAY1B,GAAWoB,EAAK1sB,UAAY,OAQ5C,MANkB,mBAAdgtB,GAAgD,mBAAdA,EACpCA,EAAY,WACF,GAASA,KACnBA,EAAY,OAGP,IAAI,GAASA,GAAWN,GAEjC,IAAID,GAAUM,GAKd,SAASE,GAAShsB,GAChB,IAAIqO,EAAO/K,UAAU/K,OAAS,QAAsBwJ,IAAjBuB,UAAU,GAAmBA,UAAU,GAAKtD,EAAQqO,KACnF4d,EAAS3oB,UAAU/K,OAAS,QAAsBwJ,IAAjBuB,UAAU,IAAmBA,UAAU,GAI5E,OAHA,GAAS+K,GAAQrO,EACbisB,IAAQ,GAAS/+B,IAAQ8S,GAC7B4kB,GAAeliB,OAAOwJ,oBAAoBlM,EAAQ5P,YAC3C4P,EAMT,IAAIksB,GAAM,IAEV,SAASC,GAAI9d,GACX,MAAO,QAAUgc,GAAWhc,GAAQ6d,KAGtC,SAASE,GAAYX,GAEnB,IAAK,IAAIjzB,EAAIizB,EAAK5sB,SAAStG,OAAS,EAAGC,GAAK,EAAGA,IAC7C4zB,GAAYX,EAAK5sB,SAASrG,IAG5B,OAAIizB,EAAK3iB,GACAgjB,GAAML,GAAM3iB,GAAGqjB,GAAIV,EAAK1sB,WAG1B+sB,GAAML,GAGf,SAASp5B,GAAOg6B,EAAS9S,EAAS+S,GAChC,IAAIllB,EAAK5O,EAGT,IAAKA,GAFL6zB,EAAU1tB,MAAMiP,QAAQye,GAAWA,EAAU,CAACA,IAE7B9zB,OAAS,EAAGC,GAAK,EAAGA,IACnC,IAAK4O,KAAOmS,EAAS,CACnB,IAAI1O,EAAS0O,EAAQnS,GAEjBklB,IACFzhB,EAAS0hB,GAAkBhT,EAAQnS,KAGrCilB,EAAQ7zB,GAAGpI,UAAUgX,GAAOyD,GAOlC,SAAS0hB,GAAkB3vB,GACzB,OAAO,WACL,IAAK,IAAI4vB,EAAOlpB,UAAU/K,OAAQ6L,EAAO,IAAIzF,MAAM6tB,GAAOC,EAAO,EAAGA,EAAOD,EAAMC,IAC/EroB,EAAKqoB,GAAQnpB,UAAUmpB,GAGzB,IAAIpqB,EAAI+B,EAAKA,EAAK7L,OAAS,GAE3B,OAAI8J,GAAKA,EAAE0M,cAAgBrM,QAAYL,aAAa1D,MAG3C/B,EAAGyG,MAAM3U,KAAM0V,GAFfxH,EAAGyG,MAAM3U,KAAM0V,EAAKxF,MAAM,GAAI,IAAI8tB,KAAKrqB,IAmHpD8hB,GAAgB,MAAO,CACrBwI,SArFF,WACE,OAAOj+B,KAAKk+B,SAAS/tB,YAqFrBiiB,SAlFF,WACE,OAAOpyB,KAAKk+B,SAASxhB,MAAM1c,OAkF3BuqB,KA/EF,WACE,OAAOvqB,KAAKi+B,WAAWj+B,KAAKoyB,WAAa,IA+EzCT,KA5EF,WACE,OAAO3xB,KAAKi+B,WAAWj+B,KAAKoyB,WAAa,IA4EzC+L,QAzEF,WACE,IAAIr0B,EAAI9J,KAAKoyB,WAAa,EACtBgM,EAAIp+B,KAAKk+B,SAQb,OANAE,EAAEC,cAAcr+B,MAAM4xB,IAAI5xB,KAAM8J,GAER,mBAAbs0B,EAAEE,QAAyBF,EAAEE,UACtCF,EAAErB,KAAKt9B,YAAY2+B,EAAEj/B,OAAO49B,MAGvB/8B,MAgEPu+B,SA7DF,WACE,IAAIz0B,EAAI9J,KAAKoyB,WAMb,OAJItoB,EAAI,GACN9J,KAAKk+B,SAASG,cAAcr+B,MAAM4xB,IAAI5xB,KAAM8J,EAAI,GAG3C9J,MAuDPw+B,MApDF,WACE,IAAIJ,EAAIp+B,KAAKk+B,SAQb,OANAE,EAAErB,KAAKt9B,YAAYO,KAAK+8B,MAEA,mBAAbqB,EAAEE,QAAyBF,EAAEE,UACtCF,EAAErB,KAAKt9B,YAAY2+B,EAAEj/B,OAAO49B,MAGvB/8B,MA4CPy+B,KAzCF,WAKE,OAJIz+B,KAAKoyB,WAAa,GACpBpyB,KAAKk+B,SAASG,cAAcr+B,MAAM4xB,IAAI5xB,KAAM,GAGvCA,MAqCP0+B,OAlCF,SAAgBptB,IACdA,EAAUurB,GAAavrB,IACfqtB,SACR,IAAI70B,EAAI9J,KAAKoyB,WAEb,OADApyB,KAAKk+B,SAAStM,IAAItgB,EAASxH,GACpB9J,MA8BP4+B,MA3BF,SAAettB,IACbA,EAAUurB,GAAavrB,IACfqtB,SACR,IAAI70B,EAAI9J,KAAKoyB,WAEb,OADApyB,KAAKk+B,SAAStM,IAAItgB,EAASxH,EAAI,GACxB9J,MAuBPqR,aArBF,SAAsBC,GAGpB,OAFAA,EAAUurB,GAAavrB,IACfotB,OAAO1+B,MACRA,MAmBP6+B,YAjBF,SAAqBvtB,GAGnB,OAFAA,EAAUurB,GAAavrB,IACfstB,MAAM5+B,MACPA,QAiBT,IAAI8+B,GAAUla,GAAe7hB,OAM7Byb,GAAQ,CAAE1R,OAAQ,QAAS6T,OAAO,EAAM3B,QAASkB,GAA6B,WAAa,CACzFnd,OAAQ,SAAgB0hB,GACtB,OAAOqa,GAAQ9+B,KAAMykB,EAAY7P,UAAU/K,OAAS,EAAI+K,UAAU,QAAKvB,MAI3E,IAAI0rB,GAAoB,SAAU5e,EAAa7D,GAC7C,IAAIH,EAAS,GAAGgE,GAChB,OAAQhE,IAAWtF,GAAM,WAEvBsF,EAAOjW,KAAK,KAAMoW,GAAY,WAAc,MAAM,GAAM,OAIxD0iB,GAAWhiB,GAAcjQ,QAGzBkyB,GAAgB,GAAGlyB,QAEnBmyB,KAAkBD,IAAiB,EAAI,CAAC,GAAGlyB,QAAQ,GAAI,GAAK,EAC5DoyB,GAAgBJ,GAAkB,WAItCvgB,GAAQ,CAAE1R,OAAQ,QAAS6T,OAAO,EAAM3B,OAAQkgB,IAAiBC,IAAiB,CAChFpyB,QAAS,SAAiBqyB,GACxB,OAAOF,GAEHD,GAActqB,MAAM3U,KAAM4U,YAAc,EACxCoqB,GAASh/B,KAAMo/B,EAAexqB,UAAU/K,OAAS,EAAI+K,UAAU,QAAKvB,MAI5E,IAAIgsB,GAAa,GAAG1uB,KAEhB2uB,GAActnB,GAAiBhE,OAC/BurB,GAAkBR,GAAkB,OAAQ,KAIhDvgB,GAAQ,CAAE1R,OAAQ,QAAS6T,OAAO,EAAM3B,OAAQsgB,IAAeC,IAAmB,CAChF5uB,KAAM,SAAc6uB,GAClB,OAAOH,GAAWn5B,KAAKiS,EAAgBnY,WAAqBqT,IAAdmsB,EAA0B,IAAMA,MAIlF,IAAIC,GAAY/f,GAAgB,WAU5BggB,GAAY,GAAGtwB,KACfuwB,GAAQx8B,KAAKC,IACbw8B,GAAa,WAGbC,IAAchpB,GAAM,WAAc,OAAQmgB,OAAO4I,GAAY,QAGjEtH,GAA8B,QAAS,GAAG,SAAUwH,EAAOC,EAAarG,GACtE,IAAIsG,EAmDJ,OAzCEA,EAR2B,KAA3B,OAAOl9B,MAAM,QAAQ,IACc,GAAnC,OAAOA,MAAM,QAAS,GAAG+G,QACO,GAAhC,KAAK/G,MAAM,WAAW+G,QACU,GAAhC,IAAI/G,MAAM,YAAY+G,QACtB,IAAI/G,MAAM,QAAQ+G,OAAS,GAC3B,GAAG/G,MAAM,MAAM+G,OAGC,SAAU21B,EAAWS,GACnC,IAAI5hB,EAAShK,OAAO4D,EAAuBjY,OACvCkgC,OAAgB7sB,IAAV4sB,EAAsBL,GAAaK,IAAU,EACvD,GAAY,IAARC,EAAW,MAAO,GACtB,QAAkB7sB,IAAdmsB,EAAyB,MAAO,CAACnhB,GAErC,IAAKsZ,GAAS6H,GACZ,OAAOO,EAAY75B,KAAKmY,EAAQmhB,EAAWU,GAW7C,IATA,IAQIhlB,EAAOkc,EAAW+I,EARlBC,EAAS,GACT1H,GAAS8G,EAAU9I,WAAa,IAAM,KAC7B8I,EAAU7I,UAAY,IAAM,KAC5B6I,EAAU3I,QAAU,IAAM,KAC1B2I,EAAU1I,OAAS,IAAM,IAClCuJ,EAAgB,EAEhBC,EAAgB,IAAItJ,OAAOwI,EAAU/rB,OAAQilB,EAAQ,MAElDxd,EAAQuc,GAAWvxB,KAAKo6B,EAAejiB,QAC5C+Y,EAAYkJ,EAAclJ,WACViJ,IACdD,EAAOhxB,KAAKiP,EAAOnO,MAAMmwB,EAAenlB,EAAMwB,QAC1CxB,EAAMrR,OAAS,GAAKqR,EAAMwB,MAAQ2B,EAAOxU,QAAQ61B,GAAU/qB,MAAMyrB,EAAQllB,EAAMhL,MAAM,IACzFiwB,EAAajlB,EAAM,GAAGrR,OACtBw2B,EAAgBjJ,EACZgJ,EAAOv2B,QAAUq2B,KAEnBI,EAAclJ,YAAclc,EAAMwB,OAAO4jB,EAAclJ,YAK7D,OAHIiJ,IAAkBhiB,EAAOxU,QACvBs2B,GAAeG,EAAcnmB,KAAK,KAAKimB,EAAOhxB,KAAK,IAClDgxB,EAAOhxB,KAAKiP,EAAOnO,MAAMmwB,IACzBD,EAAOv2B,OAASq2B,EAAME,EAAOlwB,MAAM,EAAGgwB,GAAOE,GAG7C,IAAIt9B,WAAMuQ,EAAW,GAAGxJ,OACjB,SAAU21B,EAAWS,GACnC,YAAqB5sB,IAAdmsB,GAAqC,IAAVS,EAAc,GAAKF,EAAY75B,KAAKlG,KAAMw/B,EAAWS,IAEpEF,EAEhB,CAGL,SAAeP,EAAWS,GACxB,IAAIhnB,EAAIhB,EAAuBjY,MAC3BugC,EAAwBltB,MAAbmsB,OAAyBnsB,EAAYmsB,EAAUM,GAC9D,YAAoBzsB,IAAbktB,EACHA,EAASr6B,KAAKs5B,EAAWvmB,EAAGgnB,GAC5BD,EAAc95B,KAAKmO,OAAO4E,GAAIumB,EAAWS,IAO/C,SAAU5X,EAAQ4X,GAChB,IAAIpG,EAAMH,EAAgBsG,EAAe3X,EAAQroB,KAAMigC,EAAOD,IAAkBD,GAChF,GAAIlG,EAAI/N,KAAM,OAAO+N,EAAIjiB,MAEzB,IAAIkiB,EAAK3gB,EAASkP,GACdoE,EAAIpY,OAAOrU,MACXikB,EAvFe,SAAUhL,EAAGunB,GACpC,IACI/T,EADAxI,EAAI9K,EAASF,GAAGoH,YAEpB,YAAahN,IAAN4Q,GAAmD5Q,OAA/BoZ,EAAItT,EAAS8K,GAAGwb,KAA2Be,EAAqB5c,GAAY6I,GAoF3FgU,CAAmB3G,EAAI9C,QAE3B0J,EAAkB5G,EAAGjD,QACrB6B,GAASoB,EAAGpD,WAAa,IAAM,KACtBoD,EAAGnD,UAAY,IAAM,KACrBmD,EAAGjD,QAAU,IAAM,KACnBgJ,GAAa,IAAM,KAI5BU,EAAW,IAAItc,EAAE4b,GAAa/F,EAAK,OAASA,EAAGrmB,OAAS,IAAKilB,GAC7DwH,OAAgB7sB,IAAV4sB,EAAsBL,GAAaK,IAAU,EACvD,GAAY,IAARC,EAAW,MAAO,GACtB,GAAiB,IAAbzT,EAAE5iB,OAAc,OAA2C,OAApCqvB,GAAmBqH,EAAU9T,GAAc,CAACA,GAAK,GAI5E,IAHA,IAAI2R,EAAI,EACJuC,EAAI,EACJxU,EAAI,GACDwU,EAAIlU,EAAE5iB,QAAQ,CACnB02B,EAASnJ,UAAYyI,GAAac,EAAI,EACtC,IACIx8B,EADAy8B,EAAI1H,GAAmBqH,EAAUV,GAAapT,EAAIA,EAAEvc,MAAMywB,IAE9D,GACQ,OAANC,IACCz8B,EAAIw7B,GAAMpjB,GAASgkB,EAASnJ,WAAayI,GAAa,EAAIc,IAAKlU,EAAE5iB,WAAau0B,EAE/EuC,EAAI1H,GAAmBxM,EAAGkU,EAAGD,OACxB,CAEL,GADAvU,EAAE/c,KAAKqd,EAAEvc,MAAMkuB,EAAGuC,IACdxU,EAAEtiB,SAAWq2B,EAAK,OAAO/T,EAC7B,IAAK,IAAIriB,EAAI,EAAGA,GAAK82B,EAAE/2B,OAAS,EAAGC,IAEjC,GADAqiB,EAAE/c,KAAKwxB,EAAE92B,IACLqiB,EAAEtiB,SAAWq2B,EAAK,OAAO/T,EAE/BwU,EAAIvC,EAAIj6B,GAIZ,OADAgoB,EAAE/c,KAAKqd,EAAEvc,MAAMkuB,IACRjS,OAGT0T,IAGJ,IAAIgB,GAAgB,qDAEhBC,GAAM,4CAENC,GAAM,2BAENC,GAAY,mBAEZC,GAAa,aAEbC,GAAe,MAEfC,GAAQ,oBAERC,GAAQ,SAIRC,GAAU,WAEVt7B,GAAW,0CAIXu7B,GAAU,wCAEVC,GAAY,SAGZC,GAAS,YAETC,GAAc,iBAEdC,GAAe,gBAEfC,GAAkB,0DAElBC,GAAO,MAyDXnM,GAAgB,MAAO,CACrBoM,QAjCF,WACE,IAAI7D,EAAOh+B,KAAKg+B,KAAK,SACrB,OAAe,MAARA,EAAe,GAAKA,EAAK7C,OAAOr4B,MAAMy+B,KAgC7CO,SA7BF,SAAkBniB,GAChB,OAAyC,IAAlC3f,KAAK6hC,UAAU90B,QAAQ4S,IA6B9BoiB,SA1BF,SAAkBpiB,GAChB,IAAK3f,KAAK8hC,SAASniB,GAAO,CACxB,IAAIS,EAAQpgB,KAAK6hC,UACjBzhB,EAAMhR,KAAKuQ,GACX3f,KAAKg+B,KAAK,QAAS5d,EAAMzP,KAAK,MAGhC,OAAO3Q,MAoBPgiC,YAjBF,SAAqBriB,GAOnB,OANI3f,KAAK8hC,SAASniB,IAChB3f,KAAKg+B,KAAK,QAASh+B,KAAK6hC,UAAU9+B,QAAO,SAAUmC,GACjD,OAAOA,IAAMya,KACZhP,KAAK,MAGH3Q,MAWPiiC,YARF,SAAqBtiB,GACnB,OAAO3f,KAAK8hC,SAASniB,GAAQ3f,KAAKgiC,YAAYriB,GAAQ3f,KAAK+hC,SAASpiB,MAUtE,IAAIuiB,GAAatd,GAAeC,QAK5Bsd,GAAepD,GAAkB,WAAa,SAAiBta,GACjE,OAAOyd,GAAWliC,KAAMykB,EAAY7P,UAAU/K,OAAS,EAAI+K,UAAU,QAAKvB,IACxE,GAAGwR,QAQP,IAAK,IAAIud,MAJT5jB,GAAQ,CAAE1R,OAAQ,QAAS6T,OAAO,EAAM3B,OAAQ,GAAG6F,SAAWsd,IAAgB,CAC5Etd,QAASsd,KAGmBvP,GAAc,CAC1C,IAAIyP,GAAe1rB,EAASyrB,IACxBE,GAAwBD,IAAgBA,GAAa3gC,UAEzD,GAAI4gC,IAAyBA,GAAsBzd,UAAYsd,GAAc,IAC3E5oB,EAA4B+oB,GAAuB,UAAWH,IAC9D,MAAOprB,GACPurB,GAAsBzd,QAAUsd,IAkFpC1M,GAAgB,MAAO,CACrB8M,IA/EF,SAAa7iC,EAAO6Y,GAClB,IAAIiqB,EAAM,GAEV,GAAyB,IAArB5tB,UAAU/K,OAQZ,OANA7J,KAAK+8B,KAAKr9B,MAAM+iC,QAAQ3/B,MAAM,WAAWC,QAAO,SAAUqN,GACxD,QAASA,EAAGvG,UACXgb,SAAQ,SAAUzU,GACnB,IAAIsyB,EAAItyB,EAAGtN,MAAM,WACjB0/B,EAAIE,EAAE,IAAMA,EAAE,MAETF,EAGT,GAAI5tB,UAAU/K,OAAS,EAAG,CAExB,GAAIoG,MAAMiP,QAAQxf,GAAQ,CACxB,IAAIi2B,GAA4B,EAC5BC,GAAoB,EACpBC,OAAiBxiB,EAErB,IACE,IAAK,IAA0CyiB,EAAtCC,EAAYr2B,EAAM6f,OAAOuC,cAAsB6T,GAA6BG,EAAQC,EAAUxL,QAAQuB,MAAO6J,GAA4B,EAAM,CACtJ,IAAIhW,EAAOmW,EAAMle,MACb+qB,EAAQlH,GAAU9b,GACtB6iB,EAAIG,GAAS3iC,KAAK+8B,KAAKr9B,MAAMijC,IAE/B,MAAO3M,GACPJ,GAAoB,EACpBC,EAAiBG,EACjB,QACA,IACOL,GAAiD,MAApBI,EAAUE,QAC1CF,EAAUE,SAEZ,QACA,GAAIL,EACF,MAAMC,GAKZ,OAAO2M,EAIT,GAAqB,iBAAV9iC,EACT,OAAOM,KAAK+8B,KAAKr9B,MAAM+7B,GAAU/7B,IAInC,GAAuB,WAAnBqiB,GAAQriB,GACV,IAAK,IAAIkjC,KAASljC,EAEhBM,KAAK+8B,KAAKr9B,MAAM+7B,GAAUmH,IAA0B,MAAhBljC,EAAMkjC,IAAkBvB,GAAQlnB,KAAKza,EAAMkjC,IAAU,GAAKljC,EAAMkjC,GAU1G,OAJyB,IAArBhuB,UAAU/K,SACZ7J,KAAK+8B,KAAKr9B,MAAM+7B,GAAU/7B,IAAiB,MAAP6Y,GAAe8oB,GAAQlnB,KAAK5B,GAAO,GAAKA,GAGvEvY,MAgBP6iC,KAbF,WACE,OAAO7iC,KAAKuiC,IAAI,UAAW,KAa3BO,KAVF,WACE,OAAO9iC,KAAKuiC,IAAI,UAAW,SAU3BQ,QAPF,WACE,MAA+B,SAAxB/iC,KAAKuiC,IAAI,cA0BlB9M,GAAgB,MAAO,CACrBxX,KAlBF,SAAgBha,EAAGjB,EAAGggC,GACpB,GAAmB,WAAfjhB,GAAQ9d,GACV,IAAKjB,KAAKiB,EACRjE,KAAKie,KAAKjb,EAAGiB,EAAEjB,SAEZ,GAAI4R,UAAU/K,OAAS,EAC5B,IACE,OAAO6b,KAAKud,MAAMjjC,KAAKg+B,KAAK,QAAU/5B,IACtC,MAAOE,GACP,OAAOnE,KAAKg+B,KAAK,QAAU/5B,QAG7BjE,KAAKg+B,KAAK,QAAU/5B,EAAS,OAANjB,EAAa,MAAa,IAANggC,GAA2B,iBAANhgC,GAA+B,iBAANA,EAAiBA,EAAI0iB,KAAKE,UAAU5iB,IAG/H,OAAOhD,QAwCTy1B,GAAgB,MAAO,CACrByN,SAnCF,SAAkBniB,EAAG/d,GAEnB,GAA8B,WAA1B+e,GAAQnN,UAAU,IACpB,IAAK,IAAI8D,KAAOqI,EACd/gB,KAAKkjC,SAASxqB,EAAKqI,EAAErI,QAElB,IAAyB,IAArB9D,UAAU/K,OAEnB,OAAO7J,KAAKmjC,SAASpiB,GAGrB/gB,KAAKmjC,SAASpiB,GAAK/d,EAGrB,OAAOhD,MAsBPojC,OAnBF,WACE,GAAyB,IAArBxuB,UAAU/K,OACZ7J,KAAKqjC,QAAU,QAEf,IAAK,IAAIv5B,EAAI8K,UAAU/K,OAAS,EAAGC,GAAK,EAAGA,WAClC9J,KAAKmjC,SAASvuB,UAAU9K,IAInC,OAAO9J,MAWPmjC,OANF,WACE,OAAOnjC,KAAKqjC,QAAUrjC,KAAKqjC,SAAW,MASxC,IAAIC,GAAiB,SAAUC,GAC7B,OAAO,SAAUh8B,EAAMkd,EAAY+H,EAAiBgX,GAClD5f,GAAYa,GACZ,IAAIxL,EAAI+I,GAASza,GACbzI,EAAOkZ,EAAciB,GACrBpP,EAAS0S,GAAStD,EAAEpP,QACpB6S,EAAQ6mB,EAAW15B,EAAS,EAAI,EAChCC,EAAIy5B,GAAY,EAAI,EACxB,GAAI/W,EAAkB,EAAG,OAAa,CACpC,GAAI9P,KAAS5d,EAAM,CACjB0kC,EAAO1kC,EAAK4d,GACZA,GAAS5S,EACT,MAGF,GADA4S,GAAS5S,EACLy5B,EAAW7mB,EAAQ,EAAI7S,GAAU6S,EACnC,MAAMxE,UAAU,+CAGpB,KAAMqrB,EAAW7mB,GAAS,EAAI7S,EAAS6S,EAAOA,GAAS5S,EAAO4S,KAAS5d,IACrE0kC,EAAO/e,EAAW+e,EAAM1kC,EAAK4d,GAAQA,EAAOzD,IAE9C,OAAOuqB,IAaPC,GATc,CAGVH,IAAe,GAGdA,IAAe,IAGVI,GAKdllB,GAAQ,CAAE1R,OAAQ,QAAS6T,OAAO,EAAM3B,OAAQ+f,GAAkB,WAAa,CAC7E4E,OAAQ,SAAgBlf,GACtB,OAAOgf,GAAQzjC,KAAMykB,EAAY7P,UAAU/K,OAAQ+K,UAAU/K,OAAS,EAAI+K,UAAU,QAAKvB,MAI7F,IAAIuwB,GAAa,EACbC,GAAe,GAEnB,SAASC,GAAU5kC,GACjB,IAAIgV,EAAIhV,EAAS6kC,iBAIjB,OAFI7vB,IAAMwoB,GAAQv2B,SAAQ+N,EAAI2vB,IACzB3vB,EAAE8vB,SAAQ9vB,EAAE8vB,OAAS,IACnB9vB,EAAE8vB,OAGX,SAASC,GAAe/kC,GACtB,OAAOA,EAAS+kC,iBASlB,SAAS55B,GAAG0yB,EAAMiH,EAAQE,EAAUC,EAAS3iC,GAC3C,IAAI4iC,EAAIF,EAASG,KAAKF,GAAWpH,GAC7B79B,EAAW29B,GAAaE,GACxBuH,EAAMR,GAAU5kC,GAChBgV,EAAI+vB,GAAe/kC,GAEvB8kC,EAAS/zB,MAAMiP,QAAQ8kB,GAAUA,EAASA,EAAOlhC,MAAMy+B,IAElD2C,EAASK,mBACZL,EAASK,mBAAqBX,IAGhCI,EAAOnf,SAAQ,SAAU7a,GACvB,IAAIw6B,EAAKx6B,EAAMlH,MAAM,KAAK,GACtBy5B,EAAKvyB,EAAMlH,MAAM,KAAK,IAAM,IAEhCwhC,EAAIE,GAAMF,EAAIE,IAAO,GACrBF,EAAIE,GAAIjI,GAAM+H,EAAIE,GAAIjI,IAAO,GAE7B+H,EAAIE,GAAIjI,GAAI2H,EAASK,kBAAoBH,EAEzClwB,EAAE5T,iBAAiBkkC,EAAIJ,EAAG5iC,IAAW,MAIzC,SAAS+I,GAAIwyB,EAAMiH,EAAQE,EAAU1iC,GACnC,IAAItC,EAAW29B,GAAaE,GACxBuH,EAAMR,GAAU5kC,GAChBgV,EAAI+vB,GAAe/kC,IAEC,mBAAbglC,IACTA,EAAWA,EAASK,qBAKtBP,EAAS/zB,MAAMiP,QAAQ8kB,GAAUA,GAAUA,GAAU,IAAIlhC,MAAMy+B,KACxD1c,SAAQ,SAAU7a,GACvB,IAEIkS,EAAWkoB,EAFXI,EAAKx6B,GAASA,EAAMlH,MAAM,KAAK,GAC/By5B,EAAKvyB,GAASA,EAAMlH,MAAM,KAAK,GAGnC,GAAIohC,EAEEI,EAAIE,IAAOF,EAAIE,GAAIjI,GAAM,OAE3BroB,EAAEtG,oBAAoB42B,EAAIF,EAAIE,GAAIjI,GAAM,KAAK2H,GAAW1iC,IAAW,UAC5D8iC,EAAIE,GAAIjI,GAAM,KAAK2H,SAEvB,GAAIM,GAAMjI,GAEf,GAAI+H,EAAIE,IAAOF,EAAIE,GAAIjI,GAAK,CAC1B,IAAK6H,KAAKE,EAAIE,GAAIjI,GAChBhyB,GAAI2J,EAAG,CAACswB,EAAIjI,GAAI5rB,KAAK,KAAMyzB,UAGtBE,EAAIE,GAAIjI,SAEZ,GAAIA,EAET,IAAKvyB,KAASs6B,EACZ,IAAKpoB,KAAaooB,EAAIt6B,GAChBuyB,IAAOrgB,GACT3R,GAAI2J,EAAG,CAAClK,EAAOuyB,GAAI5rB,KAAK,WAIzB,GAAI6zB,GAET,GAAIF,EAAIE,GAAK,CACX,IAAKtoB,KAAaooB,EAAIE,GACpBj6B,GAAI2J,EAAG,CAACswB,EAAItoB,GAAWvL,KAAK,aAGvB2zB,EAAIE,QAER,CAEL,IAAKx6B,KAASs6B,EACZ/5B,GAAI2J,EAAGlK,IArFf,SAAqB9K,GACnB,IAAIgV,EAAIhV,EAAS6kC,iBACb7vB,EAAE8vB,SAAQ9vB,EAAE8vB,OAAS,IAsFrBS,CAAYvlC,OAoBlB,IAAIwlC,GAAuBhlB,GAAgB,sBACvCilB,GAAmB,iBACnBC,GAAiC,iCAKjCC,GAA+B7kB,IAAa,KAAOnJ,GAAM,WAC3D,IAAIuJ,EAAQ,GAEZ,OADAA,EAAMskB,KAAwB,EACvBtkB,EAAM9C,SAAS,KAAO8C,KAG3B0kB,GAAkB5kB,GAA6B,UAE/C6kB,GAAqB,SAAU9rB,GACjC,IAAKnT,EAASmT,GAAI,OAAO,EACzB,IAAI+rB,EAAa/rB,EAAEyrB,IACnB,YAAsBrxB,IAAf2xB,IAA6BA,EAAa9lB,GAAQjG,IAQ3DuF,GAAQ,CAAE1R,OAAQ,QAAS6T,OAAO,EAAM3B,QAL1B6lB,KAAiCC,IAKW,CACxDxnB,OAAQ,SAAgB6B,GACtB,IAGIrV,EAAGiX,EAAGlX,EAAQo7B,EAAKC,EAHnBjsB,EAAI+I,GAAShiB,MACbmsB,EAAIpI,GAAmB9K,EAAG,GAC1B/E,EAAI,EAER,IAAKpK,GAAK,EAAGD,EAAS+K,UAAU/K,OAAQC,EAAID,EAAQC,IAElD,GAAIi7B,GADJG,GAAW,IAAPp7B,EAAWmP,EAAIrE,UAAU9K,IACF,CAEzB,GAAIoK,GADJ+wB,EAAM1oB,GAAS2oB,EAAEr7B,SACH86B,GAAkB,MAAMzsB,UAAU0sB,IAChD,IAAK7jB,EAAI,EAAGA,EAAIkkB,EAAKlkB,IAAK7M,IAAS6M,KAAKmkB,GAAG9lB,GAAe+M,EAAGjY,EAAGgxB,EAAEnkB,QAC7D,CACL,GAAI7M,GAAKywB,GAAkB,MAAMzsB,UAAU0sB,IAC3CxlB,GAAe+M,EAAGjY,IAAKgxB,GAI3B,OADA/Y,EAAEtiB,OAASqK,EACJiY,KAIX,IAAIgZ,GAAOvgB,GAAe3hB,IAM1Bub,GAAQ,CAAE1R,OAAQ,QAAS6T,OAAO,EAAM3B,QAASkB,GAA6B,QAAU,CACtFjd,IAAK,SAAawhB,GAChB,OAAO0gB,GAAKnlC,KAAMykB,EAAY7P,UAAU/K,OAAS,EAAI+K,UAAU,QAAKvB,MAIxE,IAAI+xB,GAAgB58B,KAAK9G,UACrB2jC,GAAe,eAEfC,GAAqBF,GAAuB,SAC5C7vB,GAAU6vB,GAAc7vB,QAIxB,IAAI/M,KAAK+8B,KAAO,IAAMF,IACxB9pB,GAAS6pB,GAPK,YAOqB,WACjC,IAAIxtB,EAAQrC,GAAQrP,KAAKlG,MAEzB,OAAO4X,GAAUA,EAAQ0tB,GAAmBp/B,KAAKlG,MAAQqlC,MAI7D,IAAIlK,GAAOD,GAAWC,KAGlBqK,GAAiB7uB,EAAS8uB,SAC1BC,GAAQ,cAKRC,GAJkD,IAAvCH,GAAe3K,GAAc,OAAwD,KAAzC2K,GAAe3K,GAAc,QAI7D,SAAkBxc,EAAQunB,GACnD,IAAInZ,EAAI0O,GAAK9mB,OAAOgK,IACpB,OAAOmnB,GAAe/Y,EAAImZ,IAAU,IAAOF,GAAMvrB,KAAKsS,GAAK,GAAK,MAC9D+Y,GAIJhnB,GAAQ,CAAEK,QAAQ,EAAMG,OAAQymB,UAAYE,IAAa,CACvDF,SAAUE,KAGZ,IAAIE,GAAc,WACdC,GAAkB9O,OAAOt1B,UACzBqkC,GAAiBD,GAA2B,SAE5CE,GAAcnvB,GAAM,WAAc,MAA2D,QAApDkvB,GAAe7/B,KAAK,CAAEuN,OAAQ,IAAKilB,MAAO,SAEnFuN,GAAiBF,GAAepmB,MAAQkmB,GAoD5C,SAASK,GAAe/Q,EAAKrrB,GAC3B,OAvCF,SAAyBqrB,GACvB,GAAIllB,MAAMiP,QAAQiW,GAAM,OAAOA,EAsCxBgR,CAAgBhR,IAnCzB,SAA+BA,EAAKrrB,GAClC,GAAMyV,OAAOuC,YAAY9N,OAAOmhB,IAAgD,uBAAxCnhB,OAAOtS,UAAUuS,SAAS/N,KAAKivB,GAAvE,CAIA,IAAIiR,EAAO,GACPC,GAAK,EACLC,GAAK,EACLC,OAAKlzB,EAET,IACE,IAAK,IAAiCmzB,EAA7BC,EAAKtR,EAAI5V,OAAOuC,cAAmBukB,GAAMG,EAAKC,EAAGlc,QAAQuB,QAChEsa,EAAKh3B,KAAKo3B,EAAG5uB,QAET9N,GAAKs8B,EAAKv8B,SAAWC,GAH8Cu8B,GAAK,IAK9E,MAAOrQ,GACPsQ,GAAK,EACLC,EAAKvQ,EACL,QACA,IACOqQ,GAAsB,MAAhBI,EAAW,QAAWA,EAAW,SAC5C,QACA,GAAIH,EAAI,MAAMC,GAIlB,OAAOH,GAQwBM,CAAsBvR,EAAKrrB,IAL5D,WACE,MAAM,IAAIoO,UAAU,wDAI4CyuB,GAGlE,SAASC,GAAkB95B,EAAQ+5B,GACjC,IAAK,IAAI/8B,EAAI,EAAGA,EAAI+8B,EAAMh9B,OAAQC,IAAK,CACrC,IAAI0N,EAAaqvB,EAAM/8B,GACvB0N,EAAWC,WAAaD,EAAWC,aAAc,EACjDD,EAAWK,cAAe,EACtB,UAAWL,IAAYA,EAAWM,UAAW,GACjD9D,OAAOiD,eAAenK,EAAQ0K,EAAWkB,IAAKlB,IAIlD,SAASsvB,GAAahmB,EAAaimB,EAAYC,GAG7C,OAFID,GAAYH,GAAkB9lB,EAAYpf,UAAWqlC,GACrDC,GAAaJ,GAAkB9lB,EAAakmB,GACzClmB,EAGT,SAASmmB,GAAYnG,GACnB,OAAsB,IAAfA,EAAIj3B,OAAe,CAAC,IAAKi3B,EAAIoG,UAAU,EAAG,GAAIpG,EAAIoG,UAAU,EAAG,GAAIpG,EAAIoG,UAAU,EAAG,GAAIpG,EAAIoG,UAAU,EAAG,GAAIpG,EAAIoG,UAAU,EAAG,GAAIpG,EAAIoG,UAAU,EAAG,IAAIv2B,KAAK,IAAMmwB,EAG3K,SAASqG,GAAaC,GACpB,IAAIzqB,EAAUxZ,KAAKkkC,MAAMD,GAErBtG,EADU39B,KAAKa,IAAI,EAAGb,KAAKC,IAAI,IAAKuZ,IACtB1I,SAAS,IAC3B,OAAsB,IAAf6sB,EAAIj3B,OAAe,IAAMi3B,EAAMA,EAGxC,SAASwG,GAAG9tB,EAAQ+tB,GAClB,IAAK,IAAIz9B,EAAIy9B,EAAM19B,OAAQC,KACzB,GAAwB,MAApB0P,EAAO+tB,EAAMz9B,IACf,OAAO,EAIX,OAAO,EAGT,SAAS09B,GAAcvjC,EAAGgB,GACxB,IAAIwiC,EAASH,GAAGrjC,EAAG,OAAS,CAC1ByjC,GAAIzjC,EAAE++B,EACN2E,GAAI1jC,EAAEmS,EACNwxB,GAAI3jC,EAAEgB,EACNsiC,MAAO,OACLD,GAAGrjC,EAAG,OAAS,CACjByjC,GAAIzjC,EAAEpC,EACN8lC,GAAI1jC,EAAEnC,EACN8lC,GAAI3jC,EAAE28B,EACN0F,GAAI,EACJiB,MAAO,OACLD,GAAGrjC,EAAG,OAAS,CACjByjC,GAAIzjC,EAAE4jC,EACNF,GAAI1jC,EAAEuN,EACNo2B,GAAI3jC,EAAEmgC,EACNkC,GAAI,EACJiB,MAAO,OACLD,GAAGrjC,EAAG,OAAS,CACjByjC,GAAIzjC,EAAEmgC,EACNuD,GAAI1jC,EAAEA,EACN2jC,GAAI3jC,EAAEgB,EACNqhC,GAAI,EACJiB,MAAO,OACLD,GAAGrjC,EAAG,OAAS,CACjByjC,GAAIzjC,EAAEmgC,EACNuD,GAAI1jC,EAAEiB,EACN0iC,GAAI3jC,EAAE4jC,EACNvB,GAAI,EACJiB,MAAO,OACLD,GAAGrjC,EAAG,QAAU,CAClByjC,GAAIzjC,EAAEiB,EACNyiC,GAAI1jC,EAAEyxB,EACNkS,GAAI3jC,EAAEnC,EACNwkC,GAAIriC,EAAE8c,EACNwmB,MAAO,QACL,CACFG,GAAI,EACJC,GAAI,EACJC,GAAI,EACJL,MAAO,OAGT,OADAE,EAAOF,MAAQtiC,GAAKwiC,EAAOF,MACpBE,EAWT,SAASK,GAAS1J,EAAGuC,EAAG+B,GAGtB,OAFIA,EAAI,IAAGA,GAAK,GACZA,EAAI,IAAGA,GAAK,GACZA,EAAI,EAAI,EAAUtE,EAAc,GAATuC,EAAIvC,GAASsE,EACpCA,EAAI,GAAc/B,EAClB+B,EAAI,EAAI,EAAUtE,GAAKuC,EAAIvC,IAAM,EAAI,EAAIsE,GAAK,EAC3CtE,GArJL4H,IAAeC,KACjB1qB,GAASyb,OAAOt1B,UAAWmkC,IAAa,WACtC,IAAI1M,EAAIhgB,EAASnZ,MACbo+B,EAAI/pB,OAAO8kB,EAAE1lB,QACbs0B,EAAK5O,EAAET,MAEX,MAAO,IAAM0F,EAAI,IADT/pB,YAAchB,IAAP00B,GAAoB5O,aAAanC,UAAY,UAAW8O,IAAmBrP,GAAYvwB,KAAKizB,GAAK4O,KAE/G,CAAEpsB,QAAQ,IAiJf,IAAIqsB,GAEJ,WACE,SAASA,IACPrL,GAAgB38B,KAAMgoC,GAEtBhoC,KAAKyB,KAAKkT,MAAM3U,KAAM4U,WA2gBxB,OAxgBAkyB,GAAakB,EAAO,CAAC,CACnBtvB,IAAK,OACLd,MAAO,WACL,IAAI3T,EAAI2Q,UAAU/K,OAAS,QAAsBwJ,IAAjBuB,UAAU,GAAmBA,UAAU,GAAK,EACxE3P,EAAI2P,UAAU/K,OAAS,QAAsBwJ,IAAjBuB,UAAU,GAAmBA,UAAU,GAAK,EACxE1P,EAAI0P,UAAU/K,OAAS,QAAsBwJ,IAAjBuB,UAAU,GAAmBA,UAAU,GAAK,EACxE1Q,EAAI0Q,UAAU/K,OAAS,QAAsBwJ,IAAjBuB,UAAU,GAAmBA,UAAU,GAAK,EACxE2yB,EAAQ3yB,UAAU/K,OAAS,QAAsBwJ,IAAjBuB,UAAU,GAAmBA,UAAU,GAAK,MAIhF,GAFA3Q,EAAKA,GAAI,EAELjE,KAAKunC,MACP,IAAK,IAAIH,KAAapnC,KAAKunC,aAClBvnC,KAAKA,KAAKunC,MAAMH,IAI3B,GAAiB,iBAANnjC,EAETsjC,EAAqB,iBAANrjC,EAAiBA,EAAIqjC,EACpCrjC,EAAiB,iBAANA,EAAiB,EAAIA,EAEhC8P,OAAOiY,OAAOjsB,KAAM,CAClB0nC,GAAIzjC,EACJ0jC,GAAI1iC,EACJ2iC,GAAI1iC,EACJohC,GAAIpiC,EACJqjC,MAAOA,SAEJ,GAAItjC,aAAagM,MACtBjQ,KAAKunC,MAAQtiC,IAAsB,iBAAThB,EAAE,GAAkBA,EAAE,GAAKA,EAAE,KAAO,MAC9D+P,OAAOiY,OAAOjsB,KAAM,CAClB0nC,GAAIzjC,EAAE,GACN0jC,GAAI1jC,EAAE,GACN2jC,GAAI3jC,EAAE,GACNqiC,GAAIriC,EAAE,IAAM,SAET,GAAIA,aAAa+P,OAAQ,CAE9B,IAAIuX,EAASic,GAAcvjC,EAAGgB,GAC9B+O,OAAOiY,OAAOjsB,KAAMurB,QACf,GAAiB,iBAANtnB,EAChB,GAAIm9B,GAAMjnB,KAAKlW,GAAI,CACjB,IAAIgkC,EAAehkC,EAAEuM,QAAQ0wB,GAAc,IAEvCgH,EAAsBnH,GAAIjqB,KAAKmxB,GAAc/3B,MAAM,EAAG,GAAGjN,KAAI,SAAUD,GACzE,OAAOyiC,SAASziC,MAEdmlC,EAAuBjC,GAAegC,EAAqB,GAC3DE,EAAMD,EAAqB,GAC3BE,EAAMF,EAAqB,GAC3BG,EAAMH,EAAqB,GAE/Bn0B,OAAOiY,OAAOjsB,KAAM,CAClB0nC,GAAIU,EACJT,GAAIU,EACJT,GAAIU,EACJhC,GAAI,EACJiB,MAAO,YAEJ,KAAIpG,GAAMhnB,KAAKlW,GAkBf,MAAMsI,MAAM,oDAjBjB,IAAIg8B,EAAW,SAAkBvlC,GAC/B,OAAOyiC,SAASziC,EAAG,KAGjBwlC,EAAgB1H,GAAIhqB,KAAKmwB,GAAYhjC,IAAIhB,IAAIslC,GAC7CE,EAAiBvC,GAAesC,EAAe,GAC/CE,EAAMD,EAAe,GACrBE,EAAMF,EAAe,GACrBG,EAAMH,EAAe,GAEzBz0B,OAAOiY,OAAOjsB,KAAM,CAClB0nC,GAAIgB,EACJf,GAAIgB,EACJf,GAAIgB,EACJtC,GAAI,EACJiB,MAAO,QAMb,IAAIG,EAAK1nC,KAAK0nC,GACVC,EAAK3nC,KAAK2nC,GACVC,EAAK5nC,KAAK4nC,GACVtB,EAAKtmC,KAAKsmC,GACVuC,EAA4B,QAAf7oC,KAAKunC,MAAkB,CACtCvE,EAAG0E,EACHtxB,EAAGuxB,EACH1iC,EAAG2iC,GACc,QAAf5nC,KAAKunC,MAAkB,CACzB1lC,EAAG6lC,EACH5lC,EAAG6lC,EACH/G,EAAGgH,GACc,QAAf5nC,KAAKunC,MAAkB,CACzBM,EAAGH,EACHl2B,EAAGm2B,EACHvD,EAAGwD,GACc,QAAf5nC,KAAKunC,MAAkB,CACzBnD,EAAGsD,EACHzjC,EAAG0jC,EACH1iC,EAAG2iC,GACc,QAAf5nC,KAAKunC,MAAkB,CACzBnD,EAAGsD,EACHxiC,EAAGyiC,EACHE,EAAGD,GACc,SAAf5nC,KAAKunC,MAAmB,CAC1BriC,EAAGwiC,EACHhS,EAAGiS,EACH7lC,EAAG8lC,EACH7mB,EAAGulB,GACD,GACJtyB,OAAOiY,OAAOjsB,KAAM6oC,KAMrB,CACDnwB,IAAK,MACLd,MAAO,WACL,GAAmB,QAAf5X,KAAKunC,MACP,OAAOvnC,KACF,GApJG,SADEunC,EAqJQvnC,KAAKunC,QApJI,QAAVA,GAA6B,QAAVA,EAoJL,CAE/B,IAAI1lC,EAAI7B,KAAK6B,EACTC,EAAI9B,KAAK8B,EACT8+B,EAAI5gC,KAAK4gC,EAEb,GAAmB,QAAf5gC,KAAKunC,OAAkC,QAAfvnC,KAAKunC,MAAiB,CAEhD,IAAInD,EAAIpkC,KAAKokC,EACTngC,EAAIjE,KAAKiE,EACT6kC,EAAM9oC,KAAKiF,EAEf,GAAmB,QAAfjF,KAAKunC,MAAiB,CACxB,IAAIriC,EAAIlF,KAAKkF,EACT2iC,EAAI7nC,KAAK6nC,EACTkB,EAAO5lC,KAAKq4B,GAAK,IACrBv3B,EAAIiB,EAAI/B,KAAK6lC,IAAID,EAAOlB,GACxBiB,EAAM5jC,EAAI/B,KAAK8lC,IAAIF,EAAOlB,GAI5B,IAAIqB,GAAM9E,EAAI,IAAM,IAChB+E,EAAKllC,EAAI,IAAMilC,EACfE,EAAKF,EAAKJ,EAAM,IAEhBO,EAAK,GAAK,IACVC,EAAK,QACLC,EAAK,MACT1nC,EAAI,QAAWsB,KAAKqI,IAAI29B,EAAI,GAAKG,EAAKnmC,KAAKqI,IAAI29B,EAAI,IAAMA,EAAKE,GAAME,GACpEznC,EAAI,GAAWqB,KAAKqI,IAAI09B,EAAI,GAAKI,EAAKnmC,KAAKqI,IAAI09B,EAAI,IAAMA,EAAKG,GAAME,GACpE3I,EAAI,SAAWz9B,KAAKqI,IAAI49B,EAAI,GAAKE,EAAKnmC,KAAKqI,IAAI49B,EAAI,IAAMA,EAAKC,GAAME,GAItE,IAAIC,EAAS,OAAJ3nC,GAAkB,OAALC,GAAmB,MAAL8+B,EAChC6I,GAAU,MAAL5nC,EAAkB,OAAJC,EAAiB,MAAJ8+B,EAChC8I,EAAS,MAAJ7nC,GAAkB,KAALC,EAAkB,MAAJ8+B,EAEhCp1B,EAAMrI,KAAKqI,IACXm+B,EAAK,SAMT,OADY,IAAI3B,EAAM,KAJdwB,EAAKG,EAAK,MAAQn+B,EAAIg+B,EAAI,EAAI,KAAO,KAAQ,MAAQA,GAI9B,KAHvBC,EAAKE,EAAK,MAAQn+B,EAAIi+B,EAAI,EAAI,KAAO,KAAQ,MAAQA,GAGrB,KAFhCC,EAAKC,EAAK,MAAQn+B,EAAIk+B,EAAI,EAAI,KAAO,KAAQ,MAAQA,IAIxD,GAAmB,QAAf1pC,KAAKunC,MAAiB,CAG/B,IAAIqC,EAAK5pC,KAAK6nC,EACVr2B,EAAIxR,KAAKwR,EACTq4B,EAAK7pC,KAAKokC,EAKd,GAJAwF,GAAM,IAENC,GAAM,IAEI,IAHVr4B,GAAK,KAQH,OAFc,IAAIw2B,EAFlB6B,GAAM,IAEsBA,EAAIA,GAMlC,IAAIlJ,EAAIkJ,EAAK,GAAMA,GAAM,EAAIr4B,GAAKq4B,EAAKr4B,EAAIq4B,EAAKr4B,EAC5C4sB,EAAI,EAAIyL,EAAKlJ,EAWjB,OAFa,IAAIqH,EAPR,IAAMF,GAAS1J,EAAGuC,EAAGiJ,EAAK,EAAI,GAE9B,IAAM9B,GAAS1J,EAAGuC,EAAGiJ,GAEpB,IAAM9B,GAAS1J,EAAGuC,EAAGiJ,EAAK,EAAI,IAMnC,GAAmB,SAAf5pC,KAAKunC,MAAkB,CAGhC,IAAIuC,EAAM9pC,KAAKkF,EACXwwB,EAAI11B,KAAK01B,EACTqU,EAAK/pC,KAAK8B,EACVif,EAAI/gB,KAAK+gB,EAWb,OAFc,IAAIinB,EAPR,KAAO,EAAI7kC,KAAKC,IAAI,EAAG0mC,GAAO,EAAI/oB,GAAKA,IAEvC,KAAO,EAAI5d,KAAKC,IAAI,EAAGsyB,GAAK,EAAI3U,GAAKA,IAErC,KAAO,EAAI5d,KAAKC,IAAI,EAAG2mC,GAAM,EAAIhpB,GAAKA,KAOhD,OAAO/gB,KAtPf,IAAkBunC,IAyPb,CACD7uB,IAAK,MACLd,MAAO,WAEL,IAAIoyB,EAAYhqC,KAAKiqC,MACjBpoC,EAAImoC,EAAUnoC,EACdC,EAAIkoC,EAAUloC,EASlB,OADY,IAAIkmC,EAJR,IAAMlmC,EAAI,GACV,KAAOD,EAAIC,GACX,KAAOA,EALPkoC,EAAUpJ,GAOa,SAGhC,CACDloB,IAAK,MACLd,MAAO,WAEL,IAAIsyB,EAAYlqC,KAAK+gC,MAQjBoJ,EAAQjE,GAHD,CAJAgE,EAAUxC,GACVwC,EAAUvC,GACVuC,EAAUtC,IAES3kC,KAAI,SAAUD,GAC1C,OAAOA,EAAI,OAEoB,GAC7BggC,EAAImH,EAAM,GACV/zB,EAAI+zB,EAAM,GACVllC,EAAIklC,EAAM,GAGVC,EAAKpH,EAAI,OAAU7/B,KAAKqI,KAAKw3B,EAAI,MAAS,MAAO,KAAOA,EAAI,MAC5DqH,EAAKj0B,EAAI,OAAUjT,KAAKqI,KAAK4K,EAAI,MAAS,MAAO,KAAOA,EAAI,MAC5Dk0B,EAAKrlC,EAAI,OAAU9B,KAAKqI,KAAKvG,EAAI,MAAS,MAAO,KAAOA,EAAI,MAE5DslC,GAAW,MAALH,EAAmB,MAALC,EAAmB,MAALC,GAAe,OACjDE,GAAW,MAALJ,EAAmB,MAALC,EAAmB,MAALC,GAAe,EACjDG,GAAW,MAALL,EAAmB,MAALC,EAAmB,MAALC,GAAe,QAOrD,OADY,IAAItC,EAJRuC,EAAK,QAAWpnC,KAAKqI,IAAI++B,EAAI,EAAI,GAAK,MAAQA,EAAK,GAAK,IACxDC,EAAK,QAAWrnC,KAAKqI,IAAIg/B,EAAI,EAAI,GAAK,MAAQA,EAAK,GAAK,IACxDC,EAAK,QAAWtnC,KAAKqI,IAAIi/B,EAAI,EAAI,GAAK,MAAQA,EAAK,GAAK,IAEjC,SAGhC,CACD/xB,IAAK,MACLd,MAAO,WAEL,IAAI8yB,EAAY1qC,KAAK2qC,MACjBvG,EAAIsG,EAAUtG,EACdngC,EAAIymC,EAAUzmC,EACdgB,EAAIylC,EAAUzlC,EAGdC,EAAI/B,KAAKmS,KAAKnS,KAAKqI,IAAIvH,EAAG,GAAKd,KAAKqI,IAAIvG,EAAG,IAC3C4iC,EAAI,IAAM1kC,KAAKynC,MAAM3lC,EAAGhB,GAAKd,KAAKq4B,GAStC,OAPIqM,EAAI,IAENA,EAAI,KADJA,IAAM,IAKI,IAAIG,EAAM5D,EAAGl/B,EAAG2iC,EAAG,SAGhC,CACDnvB,IAAK,MACLd,MAAO,WAEL,IAAIizB,EAAa7qC,KAAK+gC,MAQlB+J,EAAQ5E,GAHA,CAJH2E,EAAWnD,GACXmD,EAAWlD,GACXkD,EAAWjD,IAEK3kC,KAAI,SAAUD,GACrC,OAAOA,EAAI,OAEqB,GAC9BggC,EAAI8H,EAAM,GACV10B,EAAI00B,EAAM,GACV7lC,EAAI6lC,EAAM,GAGV9mC,EAAMb,KAAKa,IAAIg/B,EAAG5sB,EAAGnR,GACrB7B,EAAMD,KAAKC,IAAI4/B,EAAG5sB,EAAGnR,GACrBm/B,GAAKpgC,EAAMZ,GAAO,EAElB2nC,EAAS/mC,IAAQZ,EAEjBsH,EAAQ1G,EAAMZ,EAKlB,OADY,IAAI4kC,EAAM,KAFd+C,EAAS,EAAI/mC,IAAQg/B,IAAM5sB,EAAInR,GAAKyF,GAAS0L,EAAInR,EAAI,EAAI,IAAM,EAAIjB,IAAQoS,IAAMnR,EAAI+9B,GAAKt4B,EAAQ,GAAK,EAAI1G,IAAQiB,IAAM+9B,EAAI5sB,GAAK1L,EAAQ,GAAK,EAAI,GAE5H,KAHvBqgC,EAAS,EAAI3G,EAAI,GAAM15B,GAAS,EAAI1G,EAAMZ,GAAOsH,GAAS1G,EAAMZ,IAGhC,IAAMghC,EAAG,SAGlD,CACD1rB,IAAK,OACLd,MAAO,WAEL,IAAIozB,EAAahrC,KAAK+gC,MAQlBkK,EAAQ/E,GAHA,CAJH8E,EAAWtD,GACXsD,EAAWrD,GACXqD,EAAWpD,IAEK3kC,KAAI,SAAUD,GACrC,OAAOA,EAAI,OAEqB,GAC9BggC,EAAIiI,EAAM,GACV70B,EAAI60B,EAAM,GACVhmC,EAAIgmC,EAAM,GAGVlqB,EAAI5d,KAAKC,IAAI,EAAI4/B,EAAG,EAAI5sB,EAAG,EAAInR,GAEnC,OAAU,IAAN8b,EAEK,IAAIinB,EAAM,EAAG,EAAG,EAAG,EAAG,QAOnB,IAAIA,GAJP,EAAIhF,EAAIjiB,IAAM,EAAIA,IAClB,EAAI3K,EAAI2K,IAAM,EAAIA,IAClB,EAAI9b,EAAI8b,IAAM,EAAIA,GAEIA,EAAG,UAOnC,CACDrI,IAAK,WACLd,MAAO,WACL,IAAIszB,EAAalrC,KAAK+gC,MAClB2G,EAAKwD,EAAWxD,GAChBC,EAAKuD,EAAWvD,GAChBC,EAAKsD,EAAWtD,GAEhB5jC,EAAMb,KAAKa,IACXZ,EAAMD,KAAKC,IACXikC,EAAQlkC,KAAKkkC,MAMjB,MAAO,CAACK,EAAIC,EAAIC,GAAI3kC,KAJP,SAAgBD,GAC3B,OAAOgB,EAAI,EAAGZ,EAAIikC,EAAMrkC,GAAI,WAK/B,CACD0V,IAAK,QACLd,MAAO,WACL,IACIuzB,EAAsBjF,GADDlmC,KAAKorC,WAAWnoC,IAAIkkC,IACgB,GACzDnE,EAAImI,EAAoB,GACxB/0B,EAAI+0B,EAAoB,GACxBlmC,EAAIkmC,EAAoB,GAE5B,MAAO,IAAI7tB,OAAO0lB,GAAG1lB,OAAOlH,GAAGkH,OAAOrY,KAEvC,CACDyT,IAAK,WACLd,MAAO,WACL,OAAO5X,KAAKqrC,UAEb,CACD3yB,IAAK,QACLd,MAAO,WACL,IACI0zB,EAAkBpF,GADDlmC,KAAKorC,WAC2B,GACjDG,EAAKD,EAAgB,GACrBE,EAAKF,EAAgB,GACrBG,EAAKH,EAAgB,GAGzB,MADa,OAAOhuB,OAAOiuB,EAAI,KAAKjuB,OAAOkuB,EAAI,KAAKluB,OAAOmuB,EAAI,OAGhE,CACD/yB,IAAK,UACLd,MAAO,WAML,MAAO,CALE5X,KAAK0nC,GACL1nC,KAAK2nC,GACL3nC,KAAK4nC,GACL5nC,KAAKsmC,GACFtmC,KAAKunC,UAOjB,CAAC,CACH7uB,IAAK,SACLd,MAAO,WACL,IAAIkC,EAAOlF,UAAU/K,OAAS,QAAsBwJ,IAAjBuB,UAAU,GAAmBA,UAAU,GAAK,UAC3E8tB,EAAI9tB,UAAU/K,OAAS,EAAI+K,UAAU,QAAKvB,EAE1CiH,EAASnX,KAAKmX,OACd+sB,EAAQlkC,KAAKkkC,MACb4B,EAAM9lC,KAAK8lC,IACXn7B,EAAK3K,KAAKq4B,GAEd,GAAa,YAAT1hB,EAAoB,CACtB,IAAIsqB,EAAI,GAAY9pB,IAAW,GAC3BpV,EAAI,GAAYoV,IAAW,GAC3ButB,EAAI,IAAMvtB,IACVoxB,EAAQ,IAAI1D,EAAM5D,EAAGl/B,EAAG2iC,EAAG,OAC/B,OAAO6D,EACF,GAAa,SAAT5xB,EAAiB,CAE1B,IAAIkpB,EAAIqE,EAAM,GAAK4B,EAAI,EAAIn7B,GAD3B40B,EAAS,MAALA,EAAYpoB,IAAWooB,GACS,GAAM,KAAQ,KAC9CtsB,EAAIixB,EAAM,GAAK4B,EAAI,EAAIn7B,EAAK40B,EAAI,GAAM,KAAO,KAC7Cz9B,EAAIoiC,EAAM,IAAM4B,EAAI,EAAIn7B,EAAK40B,EAAI,GAAM,KAAO,KAE9CiJ,EAAU,IAAI3D,EAAMhF,EAAG5sB,EAAGnR,GAE9B,OAAO0mC,EACF,GAAa,WAAT7xB,EAAmB,CAC5B,IAAI8xB,EAAM,EAAYtxB,IAAW,GAE7BuxB,EAAM,GAAWvxB,IAAW,EAE5BwxB,EAAM,IAAMxxB,IAEZyxB,EAAU,IAAI/D,EAAM4D,EAAKC,EAAKC,EAAK,OAEvC,OAAOC,EACF,GAAa,SAATjyB,EAAiB,CAC1B,IAAIkyB,EAAM,GAAK,GAAK1xB,IAEhB2xB,EAAM,GAAa3xB,IAAW,GAE9B4xB,EAAM,IAAM5xB,IAEZ6xB,EAAU,IAAInE,EAAMgE,EAAKC,EAAKC,EAAK,OAEvC,OAAOC,EACF,GAAa,QAATryB,EAAgB,CACzB,IAAIsyB,EAAM,IAAM9xB,IAEZ+xB,EAAM,IAAM/xB,IAEZgyB,EAAM,IAAMhyB,IAEZiyB,EAAU,IAAIvE,EAAMoE,EAAKC,EAAKC,GAElC,OAAOC,EACF,GAAa,QAATzyB,EAAgB,CACzB,IAAI0yB,EAAM,IAAMlyB,IAEZrW,EAAI,IAAMqW,IAAW,IAErBmyB,EAAM,IAAMnyB,IAAW,IAEvBoyB,EAAU,IAAI1E,EAAMwE,EAAKvoC,EAAGwoC,EAAK,OAErC,OAAOC,EACF,GAAa,SAAT5yB,EAAiB,CAC1B,IAAI6yB,EAAO,IAAMryB,IAEbsyB,EAAU,IAAI5E,EAAM2E,EAAMA,EAAMA,GAEpC,OAAOC,KAQV,CACDl0B,IAAK,OACLd,MAAO,SAAc8zB,GACnB,MAAwB,iBAAVA,IAAuBvK,GAAMhnB,KAAKuxB,IAAUtK,GAAMjnB,KAAKuxB,MAGtE,CACDhzB,IAAK,QACLd,MAAO,SAAe8zB,GACpB,OAAOA,GAA4B,iBAAZA,EAAM1I,GAAqC,iBAAZ0I,EAAMt1B,GAAqC,iBAAZs1B,EAAMzmC,IAG5F,CACDyT,IAAK,UACLd,MAAO,SAAiB8zB,GACtB,OAAOA,IAAUA,aAAiB1D,GAAShoC,KAAKohC,MAAMsK,IAAU1rC,KAAKma,KAAKuxB,QAIvE1D,EA/gBT,GAkhBI6E,GAAwBh2B,GAAM,WAAcoL,GAAW,MA+C3D,SAAS6qB,GAAuBhuC,GAC9B,QAAa,IAATA,EACF,MAAM,IAAIiuC,eAAe,6DAG3B,OAAOjuC,EAGT,SAASkuC,GAA2BluC,EAAMoH,GACxC,OAAIA,GAA2B,WAAlB6b,GAAQ7b,IAAsC,mBAATA,EAI3C4mC,GAAuBhuC,GAHrBoH,EAMX,SAAS+mC,GAAgBt5B,GAIvB,OAHAs5B,GAAkBj5B,OAAOyV,eAAiBzV,OAAO+U,eAAiB,SAAyBpV,GACzF,OAAOA,EAAEiW,WAAa5V,OAAO+U,eAAepV,KAEvBA,GAYzB,SAASu5B,GAAKpgC,EAAQqgC,EAAUC,GAiB9B,OAfEF,GADqB,oBAAZG,SAA2BA,QAAQ92B,IACrC82B,QAAQ92B,IAER,SAAczJ,EAAQqgC,EAAUC,GACrC,IAAIE,EAdV,SAAwB9zB,EAAQ2zB,GAC9B,MAAQn5B,OAAOtS,UAAUqI,eAAe7D,KAAKsT,EAAQ2zB,IAEpC,QADf3zB,EAASyzB,GAAgBzzB,MAI3B,OAAOA,EAQQ+zB,CAAezgC,EAAQqgC,GAClC,GAAKG,EAAL,CACA,IAAIhlB,EAAOtU,OAAOoD,yBAAyBk2B,EAAMH,GAEjD,OAAI7kB,EAAK/R,IACA+R,EAAK/R,IAAIrQ,KAAKknC,GAGhB9kB,EAAK1Q,SAIJ9K,EAAQqgC,EAAUC,GAAYtgC,GAG5C,SAAS0gC,GAAgB75B,EAAGyqB,GAM1B,OALAoP,GAAkBx5B,OAAOyV,gBAAkB,SAAyB9V,EAAGyqB,GAErE,OADAzqB,EAAEiW,UAAYwU,EACPzqB,IAGcA,EAAGyqB,GAG5B,SAASqP,GAAUC,EAAUC,GAC3B,GAA0B,mBAAfA,GAA4C,OAAfA,EACtC,MAAM,IAAIz1B,UAAU,sDAGtBw1B,EAAShsC,UAAYsS,OAAOoP,OAAOuqB,GAAcA,EAAWjsC,UAAW,CACrE2e,YAAa,CACXzI,MAAO81B,EACP51B,UAAU,EACVD,cAAc,KAGd81B,GAAYH,GAAgBE,EAAUC,GApH5CnvB,GAAQ,CAAE1R,OAAQ,SAAUiS,MAAM,EAAMC,OAAQ6tB,IAAyB,CACvEryB,KAAM,SAAc9D,GAClB,OAAOuL,GAAWD,GAAStL,OAK/B4hB,GAA8B,QAAS,GAAG,SAAUZ,EAAOkW,EAAalU,GACtE,MAAO,CAGL,SAAerR,GACb,IAAIpP,EAAIhB,EAAuBjY,MAC3B6tC,EAAoBx6B,MAAVgV,OAAsBhV,EAAYgV,EAAOqP,GACvD,YAAmBrkB,IAAZw6B,EAAwBA,EAAQ3nC,KAAKmiB,EAAQpP,GAAK,IAAI+d,OAAO3O,GAAQqP,GAAOrjB,OAAO4E,KAI5F,SAAUoP,GACR,IAAIwR,EAAMH,EAAgBkU,EAAavlB,EAAQroB,MAC/C,GAAI65B,EAAI/N,KAAM,OAAO+N,EAAIjiB,MAEzB,IAAIkiB,EAAK3gB,EAASkP,GACdoE,EAAIpY,OAAOrU,MAEf,IAAK85B,EAAGjb,OAAQ,OAAOqa,GAAmBY,EAAIrN,GAE9C,IAAIuN,EAAcF,EAAGjD,QACrBiD,EAAG1C,UAAY,EAIf,IAHA,IAEIruB,EAFAojB,EAAI,GACJjY,EAAI,EAEwC,QAAxCnL,EAASmwB,GAAmBY,EAAIrN,KAAc,CACpD,IAAIqhB,EAAWz5B,OAAOtL,EAAO,IAC7BojB,EAAEjY,GAAK45B,EACU,KAAbA,IAAiBhU,EAAG1C,UAAY6B,GAAmBxM,EAAGlQ,GAASud,EAAG1C,WAAY4C,IAClF9lB,IAEF,OAAa,IAANA,EAAU,KAAOiY,OAiF9B,IAAI3O,GAAsBD,GAA0BnZ,EAChD2pC,GAA6B/0B,EAA+B5U,EAC5D4pC,GAAmB30B,EAAqBjV,EACxC6pC,GAAS/S,GAAWC,KAEpB+S,GAAS,SACTC,GAAex3B,EAAe,OAC9By3B,GAAkBD,GAAazsC,UAG/B2sC,GAAiBt2B,EAAWoL,GAAairB,MAAqBF,GAI9DI,GAAW,SAAUhyB,GACvB,IACI8U,EAAOmd,EAAO3I,EAAO4I,EAASC,EAAQ5kC,EAAQ6S,EAAOgyB,EADrDh4B,EAAK0B,EAAYkE,GAAU,GAE/B,GAAiB,iBAAN5F,GAAkBA,EAAG7M,OAAS,EAGvC,GAAc,MADdunB,GADA1a,EAAKu3B,GAAOv3B,IACD2b,WAAW,KACQ,KAAVjB,GAElB,GAAc,MADdmd,EAAQ73B,EAAG2b,WAAW,KACQ,MAAVkc,EAAe,OAAOhJ,SACrC,GAAc,KAAVnU,EAAc,CACvB,OAAQ1a,EAAG2b,WAAW,IACpB,KAAK,GAAI,KAAK,GAAIuT,EAAQ,EAAG4I,EAAU,GAAI,MAC3C,KAAK,GAAI,KAAK,IAAK5I,EAAQ,EAAG4I,EAAU,GAAI,MAC5C,QAAS,OAAQ93B,EAInB,IADA7M,GADA4kC,EAAS/3B,EAAGxG,MAAM,IACFrG,OACX6S,EAAQ,EAAGA,EAAQ7S,EAAQ6S,IAI9B,IAHAgyB,EAAOD,EAAOpc,WAAW3V,IAGd,IAAMgyB,EAAOF,EAAS,OAAOjJ,IACxC,OAAOE,SAASgJ,EAAQ7I,GAE5B,OAAQlvB,GAKZ,GAAI4H,GAAW4vB,IAASC,GAAa,UAAYA,GAAa,QAAUA,GAAa,SAAU,CAS7F,IARA,IAcqBz1B,GAdjBi2B,GAAgB,SAAgB/2B,GAClC,IAAIlB,EAAK9B,UAAU/K,OAAS,EAAI,EAAI+N,EAChCyX,EAAQrvB,KACZ,OAAOqvB,aAAiBsf,KAElBN,GAAiBx3B,GAAM,WAAcu3B,GAAgB51B,QAAQtS,KAAKmpB,MAAatX,EAAWsX,IAAU6e,IACpG9e,GAAkB,IAAI+e,GAAaG,GAAS53B,IAAM2Y,EAAOsf,IAAiBL,GAAS53B,IAElFk4B,GAAS53B,EAAcwG,GAAoB2wB,IAAgB,6KAMlErrC,MAAM,KAAM4pB,GAAI,EAAQkiB,GAAO/kC,OAAS6iB,GAAGA,KACvCjU,EAAI01B,GAAcz1B,GAAMk2B,GAAOliB,OAAQjU,EAAIk2B,GAAej2B,KAC5Ds1B,GAAiBW,GAAej2B,GAAKq1B,GAA2BI,GAAcz1B,KAGlFi2B,GAAcjtC,UAAY0sC,GAC1BA,GAAgB/tB,YAAcsuB,GAC9BpzB,GAAS5E,EAAUu3B,GAAQS,IAG7B,IAAIE,GAAS3T,GAAWC,KAGpB2T,GAAmBn4B,EAASzT,WAK5B6rC,GAJW,EAAID,GAAiBjU,GAAc,QAAU,IAI/B,SAAoBxc,GAC/C,IAAI2wB,EAAgBH,GAAOx6B,OAAOgK,IAC9BtV,EAAS+lC,GAAiBE,GAC9B,OAAkB,IAAXjmC,GAA2C,KAA3BimC,EAAc1c,OAAO,IAAa,EAAIvpB,GAC3D+lC,GAIJtwB,GAAQ,CAAEK,QAAQ,EAAMG,OAAQ9b,YAAc6rC,IAAe,CAC3D7rC,WAAY6rC,KAGd,IAAI,GAEJ,WAEE,SAASE,IACPtS,GAAgB38B,KAAMivC,GAEtBjvC,KAAKyB,KAAKkT,MAAM3U,KAAM4U,WA2DxB,OAxDAkyB,GAAamI,EAAO,CAAC,CACnBv2B,IAAK,OACLd,MAAO,SAAc/V,EAAGC,GACtB,IAKI2R,EAASxD,MAAMiP,QAAQrd,GAAK,CAC9BA,EAAGA,EAAE,GACLC,EAAGD,EAAE,IACY,WAAfkgB,GAAQlgB,GAAkB,CAC5BA,EAAGA,EAAEA,EACLC,EAAGD,EAAEC,GACH,CACFD,EAAGA,EACHC,EAAGA,GAKL,OAFA9B,KAAK6B,EAAgB,MAAZ4R,EAAO5R,EAfX,EAegC4R,EAAO5R,EAC5C7B,KAAK8B,EAAgB,MAAZ2R,EAAO3R,EAfX,EAegC2R,EAAO3R,EACrC9B,OAGR,CACD0Y,IAAK,QACLd,MAAO,WACL,OAAO,IAAIq3B,EAAMjvC,QAElB,CACD0Y,IAAK,YACLd,MAAO,SAAmB8d,GACxB,OAAO11B,KAAKkvC,QAAQC,WAAWzZ,KAGhC,CACDhd,IAAK,aACLd,MAAO,SAAoB8d,GACpB0Z,GAAOC,aAAa3Z,KACvBA,EAAI,IAAI0Z,GAAO1Z,IAGjB,IAAI7zB,EAAI7B,KAAK6B,EACTC,EAAI9B,KAAK8B,EAIb,OAFA9B,KAAK6B,EAAI6zB,EAAEzxB,EAAIpC,EAAI6zB,EAAExwB,EAAIpD,EAAI4zB,EAAEvxB,EAC/BnE,KAAK8B,EAAI4zB,EAAEzwB,EAAIpD,EAAI6zB,EAAExxB,EAAIpC,EAAI4zB,EAAEtxB,EACxBpE,OAER,CACD0Y,IAAK,UACLd,MAAO,WACL,MAAO,CAAC5X,KAAK6B,EAAG7B,KAAK8B,OAIlBmtC,EAhET,GAsEA,SAASK,GAAYrrC,EAAGgB,EAAGsqC,GACzB,OAAOpsC,KAAK6H,IAAI/F,EAAIhB,IAAMsrC,GAAa,MAGzC,IAAIH,GAEJ,WACE,SAASA,IACPzS,GAAgB38B,KAAMovC,GAEtBpvC,KAAKyB,KAAKkT,MAAM3U,KAAM4U,WA0exB,OAteAkyB,GAAasI,EAAQ,CAAC,CACpB12B,IAAK,OACLd,MAAO,SAAcnE,GACnB,IAAI65B,EAAO8B,EAAOI,UAAU,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAU5C,OARA/7B,EAASA,aAAkB,GAAUA,EAAOg8B,YAAgC,iBAAXh8B,EAAsB27B,EAAOI,UAAU/7B,EAAO3Q,MAAMy+B,IAAWt+B,IAAIC,aAAe+M,MAAMiP,QAAQzL,GAAU27B,EAAOI,UAAU/7B,GAA8B,WAApBsO,GAAQtO,IAAwB27B,EAAOC,aAAa57B,GAAUA,EAA6B,WAApBsO,GAAQtO,IAAuB,IAAI27B,GAAS39B,UAAUgC,GAA+B,IAArBmB,UAAU/K,OAAeulC,EAAOI,UAAU,GAAGt/B,MAAMhK,KAAK0O,YAAc04B,EAEnZttC,KAAKiE,EAAgB,MAAZwP,EAAOxP,EAAYwP,EAAOxP,EAAIqpC,EAAKrpC,EAC5CjE,KAAKiF,EAAgB,MAAZwO,EAAOxO,EAAYwO,EAAOxO,EAAIqoC,EAAKroC,EAC5CjF,KAAKkF,EAAgB,MAAZuO,EAAOvO,EAAYuO,EAAOvO,EAAIooC,EAAKpoC,EAC5ClF,KAAKkE,EAAgB,MAAZuP,EAAOvP,EAAYuP,EAAOvP,EAAIopC,EAAKppC,EAC5ClE,KAAKmE,EAAgB,MAAZsP,EAAOtP,EAAYsP,EAAOtP,EAAImpC,EAAKnpC,EAC5CnE,KAAKoE,EAAgB,MAAZqP,EAAOrP,EAAYqP,EAAOrP,EAAIkpC,EAAKlpC,EACrCpE,OAGR,CACD0Y,IAAK,QACLd,MAAO,WACL,OAAO,IAAIw3B,EAAOpvC,QAGnB,CACD0Y,IAAK,YACLd,MAAO,SAAmBjE,GAExB,GAAIy7B,EAAOC,aAAa17B,GAEtB,OADa,IAAIy7B,EAAOz7B,GACV+7B,UAAU1vC,MAI1B,IAAI0iC,EAAI0M,EAAOO,iBAAiBh8B,GAG5Bi8B,EAAa,IAAI,GAAMlN,EAAE1G,GAAI0G,EAAEzG,IAAIxqB,UAFzBzR,MAGVg8B,EAAK4T,EAAW/tC,EAChBo6B,EAAK2T,EAAW9tC,EAGhB+tC,GAAc,IAAIT,GAASU,WAAWpN,EAAE5I,GAAI4I,EAAEqN,IAAIC,WAPxChwC,MAO4D8vC,YAAY9T,GAAKC,GAAIgU,OAAOvN,EAAEwN,OAAQxN,EAAEyN,QAAQC,MAAM1N,EAAE2N,MAAO3N,EAAE4N,OAAOC,OAAO7N,EAAE8N,OAAOC,QAAQ/N,EAAEgO,OAAOZ,WAAW9T,EAAIC,GAElM,GAAI7nB,SAASsuB,EAAEiO,KAAOv8B,SAASsuB,EAAEkO,IAAK,CACpC,IAAI1U,EAAS,IAAI,GAAMF,EAAIC,GAAIxqB,UAAUo+B,GAErCgB,EAAKnO,EAAEiO,GAAKjO,EAAEiO,GAAKzU,EAAOr6B,EAAI,EAC9BivC,EAAKpO,EAAEkO,GAAKlO,EAAEkO,GAAK1U,EAAOp6B,EAAI,EAClC+tC,EAAYC,WAAWe,EAAIC,GAK7B,OADAjB,EAAYC,WAAWpN,EAAEqO,GAAIrO,EAAEsO,IACxBnB,IAGR,CACDn3B,IAAK,UACLd,MAAO,SAAiBjE,GAClBA,EAAEuoB,SACJvoB,EAAEs9B,QAAUt9B,EAAEuoB,OAAO,GACrBvoB,EAAEu9B,QAAUv9B,EAAEuoB,OAAO,IAIvB,IAAIF,EAAKroB,EAAEs9B,SAAW,EAClBhV,EAAKtoB,EAAEu9B,SAAW,EAClBC,EAAKx9B,EAAEu8B,QAAU,EACjBkB,EAAKz9B,EAAEw8B,QAAU,EACjBkB,EAAM19B,EAAE68B,OAAS,EACjBE,EAAQ/8B,EAAE29B,QAAU,EACpBP,EAAKp9B,EAAE49B,YAAc,EACrBP,EAAKr9B,EAAE69B,YAAc,EAGzB,OADa,IAAIpC,GAASU,YAAY9T,GAAKC,GAAIgU,OAAOkB,EAAIC,GAAIb,OAAOc,GAAKZ,QAAQC,GAAOZ,WAAWiB,EAAIC,GAAIhB,WAAWhwC,MAAM8vC,WAAW9T,EAAIC,KAI7I,CACDvjB,IAAK,YACLd,MAAO,WACL,IAAI65B,EAAK78B,UAAU/K,OAAS,QAAsBwJ,IAAjBuB,UAAU,GAAmBA,UAAU,GAAK,EACzE88B,EAAK98B,UAAU/K,OAAS,QAAsBwJ,IAAjBuB,UAAU,GAAmBA,UAAU,GAAK,EAEzE3Q,EAAIjE,KAAKiE,EACTgB,EAAIjF,KAAKiF,EACTC,EAAIlF,KAAKkF,EACThB,EAAIlE,KAAKkE,EACTC,EAAInE,KAAKmE,EACTC,EAAIpE,KAAKoE,EAETutC,EAAc1tC,EAAIC,EAAIe,EAAIC,EAC1B0sC,EAAMD,EAAc,EAAI,GAAK,EAG7BR,EAAKS,EAAMzuC,KAAKmS,KAAKrR,EAAIA,EAAIgB,EAAIA,GACjC4sC,EAAW1uC,KAAKynC,MAAMgH,EAAM3sC,EAAG2sC,EAAM3tC,GACrCysC,EAAQ,IAAMvtC,KAAKq4B,GAAKqW,EACxBxI,EAAKlmC,KAAK6lC,IAAI6I,GACdC,EAAK3uC,KAAK8lC,IAAI4I,GAGdR,GAAOptC,EAAIiB,EAAID,EAAIf,GAAKytC,EACxBP,EAAKlsC,EAAIisC,GAAME,EAAMptC,EAAIgB,IAAMf,EAAIitC,GAAME,EAAMpsC,EAAIhB,GAEnD8sC,EAAK5sC,EAAIstC,EAAKA,EAAKpI,EAAK8H,EAAKO,GAAML,EAAMhI,EAAK8H,EAAKW,EAAKV,GACxDJ,EAAK5sC,EAAIstC,EAAKD,EAAKK,EAAKX,EAAKO,GAAML,EAAMS,EAAKX,EAAK9H,EAAK+H,GAE5D,MAAO,CAELlB,OAAQiB,EACRhB,OAAQiB,EACRZ,MAAOa,EACPC,OAAQZ,EACRa,WAAYR,EACZS,WAAYR,EACZC,QAASQ,EACTP,QAASQ,EAETztC,EAAGjE,KAAKiE,EACRgB,EAAGjF,KAAKiF,EACRC,EAAGlF,KAAKkF,EACRhB,EAAGlE,KAAKkE,EACRC,EAAGnE,KAAKmE,EACRC,EAAGpE,KAAKoE,KAIX,CACDsU,IAAK,WACLd,MAAO,SAAkBrG,GACvB,OAAOvR,KAAKkvC,QAAQQ,UAAUn+B,KAE/B,CACDmH,IAAK,YACLd,MAAO,SAAmBrG,GAExB,IACIyxB,EAAIzxB,aAAkB69B,EAAS79B,EAAS,IAAI69B,EAAO79B,GACvD,OAAO69B,EAAO2C,eAFN/xC,KAEwBgjC,EAAGhjC,QAEpC,CACD0Y,IAAK,YACLd,MAAO,SAAmBrG,GACxB,OAAOvR,KAAKkvC,QAAQc,WAAWz+B,KAEhC,CACDmH,IAAK,aACLd,MAAO,SAAoBrG,GACzB,IACI6yB,EAAI7yB,aAAkB69B,EAAS79B,EAAS,IAAI69B,EAAO79B,GACvD,OAAO69B,EAAO2C,eAAe3N,EAFrBpkC,KAE2BA,QAGpC,CACD0Y,IAAK,WACLd,MAAO,WAEL,IAAI3T,EAAIjE,KAAKiE,EACTgB,EAAIjF,KAAKiF,EACTC,EAAIlF,KAAKkF,EACThB,EAAIlE,KAAKkE,EACTC,EAAInE,KAAKmE,EACTC,EAAIpE,KAAKoE,EAET4tC,EAAM/tC,EAAIC,EAAIe,EAAIC,EACtB,IAAK8sC,EAAK,MAAM,IAAIzlC,MAAM,iBAAmBvM,MAE7C,IAAIiyC,EAAK/tC,EAAI8tC,EACTE,GAAMjtC,EAAI+sC,EACVG,GAAMjtC,EAAI8sC,EACVI,EAAKnuC,EAAI+tC,EAETK,IAAOJ,EAAK9tC,EAAIguC,EAAK/tC,GACrBkuC,IAAOJ,EAAK/tC,EAAIiuC,EAAKhuC,GAQzB,OANApE,KAAKiE,EAAIguC,EACTjyC,KAAKiF,EAAIitC,EACTlyC,KAAKkF,EAAIitC,EACTnyC,KAAKkE,EAAIkuC,EACTpyC,KAAKmE,EAAIkuC,EACTryC,KAAKoE,EAAIkuC,EACFtyC,OAER,CACD0Y,IAAK,UACLd,MAAO,WACL,OAAO5X,KAAKkvC,QAAQqD,aAGrB,CACD75B,IAAK,YACLd,MAAO,SAAmB/V,EAAGC,GAC3B,OAAO9B,KAAKkvC,QAAQY,WAAWjuC,EAAGC,KAEnC,CACD4W,IAAK,aACLd,MAAO,SAAoB/V,EAAGC,GAG5B,OAFA9B,KAAKmE,GAAKtC,GAAK,EACf7B,KAAKoE,GAAKtC,GAAK,EACR9B,OAGR,CACD0Y,IAAK,QACLd,MAAO,SAAe/V,EAAGC,EAAG2vC,EAAIC,GAC9B,IAAIc,EAEJ,OAAQA,EAAcxyC,KAAKkvC,SAASe,OAAOt7B,MAAM69B,EAAa59B,aAE/D,CACD8D,IAAK,SACLd,MAAO,SAAgB/V,GACrB,IAAIC,EAAI8S,UAAU/K,OAAS,QAAsBwJ,IAAjBuB,UAAU,GAAmBA,UAAU,GAAK/S,EACxE4vC,EAAK78B,UAAU/K,OAAS,QAAsBwJ,IAAjBuB,UAAU,GAAmBA,UAAU,GAAK,EACzE88B,EAAK98B,UAAU/K,OAAS,QAAsBwJ,IAAjBuB,UAAU,GAAmBA,UAAU,GAAK,EAGpD,IAArBA,UAAU/K,SACZ6nC,EAAKD,EACLA,EAAK3vC,EACLA,EAAID,GAGN,IAAIoC,EAAIjE,KAAKiE,EACTgB,EAAIjF,KAAKiF,EACTC,EAAIlF,KAAKkF,EACThB,EAAIlE,KAAKkE,EACTC,EAAInE,KAAKmE,EACTC,EAAIpE,KAAKoE,EAOb,OANApE,KAAKiE,EAAIA,EAAIpC,EACb7B,KAAKiF,EAAIA,EAAInD,EACb9B,KAAKkF,EAAIA,EAAIrD,EACb7B,KAAKkE,EAAIA,EAAIpC,EACb9B,KAAKmE,EAAIA,EAAItC,EAAI4vC,EAAK5vC,EAAI4vC,EAC1BzxC,KAAKoE,EAAIA,EAAItC,EAAI4vC,EAAK5vC,EAAI4vC,EACnB1xC,OAGR,CACD0Y,IAAK,SACLd,MAAO,SAAgBorB,EAAGyO,EAAIC,GAC5B,OAAO1xC,KAAKkvC,QAAQuB,QAAQzN,EAAGyO,EAAIC,KAEpC,CACDh5B,IAAK,UACLd,MAAO,SAAiBorB,GACtB,IAAIyO,EAAK78B,UAAU/K,OAAS,QAAsBwJ,IAAjBuB,UAAU,GAAmBA,UAAU,GAAK,EACzE88B,EAAK98B,UAAU/K,OAAS,QAAsBwJ,IAAjBuB,UAAU,GAAmBA,UAAU,GAAK,EAE7EouB,EAAIzH,GAAQyH,GACZ,IAAIgG,EAAM7lC,KAAK6lC,IAAIhG,GACfiG,EAAM9lC,KAAK8lC,IAAIjG,GACf/+B,EAAIjE,KAAKiE,EACTgB,EAAIjF,KAAKiF,EACTC,EAAIlF,KAAKkF,EACThB,EAAIlE,KAAKkE,EACTC,EAAInE,KAAKmE,EACTC,EAAIpE,KAAKoE,EAOb,OANApE,KAAKiE,EAAIA,EAAI+kC,EAAM/jC,EAAIgkC,EACvBjpC,KAAKiF,EAAIA,EAAI+jC,EAAM/kC,EAAIglC,EACvBjpC,KAAKkF,EAAIA,EAAI8jC,EAAM9kC,EAAI+kC,EACvBjpC,KAAKkE,EAAIA,EAAI8kC,EAAM9jC,EAAI+jC,EACvBjpC,KAAKmE,EAAIA,EAAI6kC,EAAM5kC,EAAI6kC,EAAMyI,EAAKzI,EAAMwI,EAAKzI,EAAMyI,EACnDzxC,KAAKoE,EAAIA,EAAI4kC,EAAM7kC,EAAI8kC,EAAMwI,EAAKxI,EAAMyI,EAAK1I,EAAM0I,EAC5C1xC,OAGR,CACD0Y,IAAK,OACLd,MAAO,SAAc66B,EAAMC,GACzB,OAAO1yC,KAAKkvC,QAAQyD,MAAMF,EAAMC,KAEjC,CACDh6B,IAAK,QACLd,MAAO,SAAe66B,EAAMC,GAC1B,MAAgB,MAATD,EAAezyC,KAAKiwC,QAAQ,EAAG,EAAGyC,EAAQ,GAAc,MAATD,EAAezyC,KAAKiwC,OAAO,GAAI,EAAG,EAAGyC,GAAU1yC,KAAKiwC,QAAQ,GAAI,EAAGwC,EAAMC,GAAUD,KAG1I,CACD/5B,IAAK,QACLd,MAAO,SAAe3T,EAAGwtC,EAAIC,GAC3B,OAAO1xC,KAAKkvC,QAAQqB,OAAOtsC,EAAGwtC,EAAIC,KAEnC,CACDh5B,IAAK,SACLd,MAAO,SAAgBg7B,GACrB,IAAIlB,EAAK98B,UAAU/K,OAAS,QAAsBwJ,IAAjBuB,UAAU,GAAmBA,UAAU,GAAK,EACzE3Q,EAAIjE,KAAKiE,EACTgB,EAAIjF,KAAKiF,EACTC,EAAIlF,KAAKkF,EACThB,EAAIlE,KAAKkE,EACTC,EAAInE,KAAKmE,EACTC,EAAIpE,KAAKoE,EAIb,OAHApE,KAAKiE,EAAIA,EAAIgB,EAAI2tC,EACjB5yC,KAAKkF,EAAIA,EAAIhB,EAAI0uC,EACjB5yC,KAAKmE,EAAIA,EAAIC,EAAIwuC,EAAKlB,EAAKkB,EACpB5yC,OAGR,CACD0Y,IAAK,OACLd,MAAO,SAAc/V,EAAGC,EAAG2vC,EAAIC,GAC7B,IAAImB,EAEJ,OAAQA,EAAe7yC,KAAKkvC,SAASkB,MAAMz7B,MAAMk+B,EAAcj+B,aAEhE,CACD8D,IAAK,QACLd,MAAO,SAAe/V,GACpB,IAAIC,EAAI8S,UAAU/K,OAAS,QAAsBwJ,IAAjBuB,UAAU,GAAmBA,UAAU,GAAK/S,EACxE4vC,EAAK78B,UAAU/K,OAAS,QAAsBwJ,IAAjBuB,UAAU,GAAmBA,UAAU,GAAK,EACzE88B,EAAK98B,UAAU/K,OAAS,QAAsBwJ,IAAjBuB,UAAU,GAAmBA,UAAU,GAAK,EAGpD,IAArBA,UAAU/K,SACZ6nC,EAAKD,EACLA,EAAK3vC,EACLA,EAAID,GAINA,EAAI05B,GAAQ15B,GACZC,EAAIy5B,GAAQz5B,GACZ,IAAI8wC,EAAKzvC,KAAK2vC,IAAIjxC,GACdkxC,EAAK5vC,KAAK2vC,IAAIhxC,GACdmC,EAAIjE,KAAKiE,EACTgB,EAAIjF,KAAKiF,EACTC,EAAIlF,KAAKkF,EACThB,EAAIlE,KAAKkE,EACTC,EAAInE,KAAKmE,EACTC,EAAIpE,KAAKoE,EAOb,OANApE,KAAKiE,EAAIA,EAAIgB,EAAI2tC,EACjB5yC,KAAKiF,EAAIA,EAAIhB,EAAI8uC,EACjB/yC,KAAKkF,EAAIA,EAAIhB,EAAI0uC,EACjB5yC,KAAKkE,EAAIA,EAAIgB,EAAI6tC,EACjB/yC,KAAKmE,EAAIA,EAAIC,EAAIwuC,EAAKlB,EAAKkB,EAC3B5yC,KAAKoE,EAAIA,EAAID,EAAI4uC,EAAKtB,EAAKsB,EACpB/yC,OAGR,CACD0Y,IAAK,QACLd,MAAO,SAAe/V,EAAG4vC,EAAIC,GAC3B,OAAO1xC,KAAKgzC,KAAKnxC,EAAG,EAAG4vC,EAAIC,KAE5B,CACDh5B,IAAK,SACLd,MAAO,SAAgB/V,EAAG4vC,EAAIC,GAC5B,OAAO1xC,KAAKowC,MAAMvuC,EAAG,EAAG4vC,EAAIC,KAG7B,CACDh5B,IAAK,QACLd,MAAO,SAAe9V,EAAG2vC,EAAIC,GAC3B,OAAO1xC,KAAKgzC,KAAK,EAAGlxC,EAAG2vC,EAAIC,KAE5B,CACDh5B,IAAK,SACLd,MAAO,SAAgB9V,EAAG2vC,EAAIC,GAC5B,OAAO1xC,KAAKowC,MAAM,EAAGtuC,EAAG2vC,EAAIC,KAG7B,CACDh5B,IAAK,UACLd,MAAO,SAAiB65B,EAAIC,EAAIngC,GAC9B,IAAIs/B,EAAKY,GAAM,EACXX,EAAKY,GAAM,EACf,OAAO1xC,KAAK8vC,YAAYe,GAAKC,GAAId,WAAWz+B,GAAQu+B,WAAWe,EAAIC,KAEpE,CACDp4B,IAAK,SACLd,MAAO,SAAgB65B,EAAIC,EAAIngC,GAC7B,OAAOvR,KAAKkvC,QAAQ+D,QAAQxB,EAAIC,EAAIngC,KAGrC,CACDmH,IAAK,SACLd,MAAO,SAAgBs7B,GACrB,IAAIC,EAAO,IAAI/D,EAAO8D,GACtB,OAAO5D,GAAYtvC,KAAKiE,EAAGkvC,EAAKlvC,IAAMqrC,GAAYtvC,KAAKiF,EAAGkuC,EAAKluC,IAAMqqC,GAAYtvC,KAAKkF,EAAGiuC,EAAKjuC,IAAMoqC,GAAYtvC,KAAKkE,EAAGivC,EAAKjvC,IAAMorC,GAAYtvC,KAAKmE,EAAGgvC,EAAKhvC,IAAMmrC,GAAYtvC,KAAKoE,EAAG+uC,EAAK/uC,KAG5L,CACDsU,IAAK,WACLd,MAAO,WACL,MAAO,UAAY5X,KAAKiE,EAAI,IAAMjE,KAAKiF,EAAI,IAAMjF,KAAKkF,EAAI,IAAMlF,KAAKkE,EAAI,IAAMlE,KAAKmE,EAAI,IAAMnE,KAAKoE,EAAI,MAExG,CACDsU,IAAK,UACLd,MAAO,WACL,MAAO,CAAC5X,KAAKiE,EAAGjE,KAAKiF,EAAGjF,KAAKkF,EAAGlF,KAAKkE,EAAGlE,KAAKmE,EAAGnE,KAAKoE,KAEtD,CACDsU,IAAK,UACLd,MAAO,WACL,MAAO,CACL3T,EAAGjE,KAAKiE,EACRgB,EAAGjF,KAAKiF,EACRC,EAAGlF,KAAKkF,EACRhB,EAAGlE,KAAKkE,EACRC,EAAGnE,KAAKmE,EACRC,EAAGpE,KAAKoE,MAGV,CAAC,CACHsU,IAAK,YACLd,MAAO,SAAmB3T,GACxB,MAAO,CACLA,EAAGA,EAAE,GACLgB,EAAGhB,EAAE,GACLiB,EAAGjB,EAAE,GACLC,EAAGD,EAAE,GACLE,EAAGF,EAAE,GACLG,EAAGH,EAAE,MAGR,CACDyU,IAAK,eACLd,MAAO,SAAsBjE,GAC3B,OAAc,MAAPA,EAAE1P,GAAoB,MAAP0P,EAAE1O,GAAoB,MAAP0O,EAAEzO,GAAoB,MAAPyO,EAAEzP,GAAoB,MAAPyP,EAAExP,GAAoB,MAAPwP,EAAEvP,IAErF,CACDsU,IAAK,mBACLd,MAAO,SAA0BjE,GAE/B,IAAIy/B,EAAsB,SAAXz/B,EAAE0/B,OAA8B,IAAX1/B,EAAE0/B,KAClCC,EAAQ3/B,EAAE0/B,OAASD,GAAuB,MAAXz/B,EAAE0/B,OAAiB,EAAI,EACtDE,EAAQ5/B,EAAE0/B,OAASD,GAAuB,MAAXz/B,EAAE0/B,OAAiB,EAAI,EACtDhD,EAAQ18B,EAAEq/B,MAAQr/B,EAAEq/B,KAAKnpC,OAAS8J,EAAEq/B,KAAK,GAAK5+B,SAAST,EAAEq/B,MAAQr/B,EAAEq/B,KAAO5+B,SAAST,EAAE08B,OAAS18B,EAAE08B,MAAQ,EACxGC,EAAQ38B,EAAEq/B,MAAQr/B,EAAEq/B,KAAKnpC,OAAS8J,EAAEq/B,KAAK,GAAK5+B,SAAST,EAAEq/B,MAAQr/B,EAAEq/B,KAAO5+B,SAAST,EAAE28B,OAAS38B,EAAE28B,MAAQ,EACxGJ,EAASv8B,EAAE9O,OAAS8O,EAAE9O,MAAMgF,OAAS8J,EAAE9O,MAAM,GAAKyuC,EAAQl/B,SAAST,EAAE9O,OAAS8O,EAAE9O,MAAQyuC,EAAQl/B,SAAST,EAAEu8B,QAAUv8B,EAAEu8B,OAASoD,EAAQA,EACxInD,EAASx8B,EAAE9O,OAAS8O,EAAE9O,MAAMgF,OAAS8J,EAAE9O,MAAM,GAAK0uC,EAAQn/B,SAAST,EAAE9O,OAAS8O,EAAE9O,MAAQ0uC,EAAQn/B,SAAST,EAAEw8B,QAAUx8B,EAAEw8B,OAASoD,EAAQA,EACxI/C,EAAQ78B,EAAE68B,OAAS,EACnBE,EAAQ/8B,EAAE29B,QAAU39B,EAAE+8B,OAAS,EAC/BxU,EAAS,IAAI,GAAMvoB,EAAEuoB,QAAUvoB,EAAE++B,QAAU/+B,EAAEqoB,IAAMroB,EAAEs9B,QAASt9B,EAAEsoB,IAAMtoB,EAAEu9B,SACxElV,EAAKE,EAAOr6B,EACZo6B,EAAKC,EAAOp6B,EACZswB,EAAW,IAAI,GAAMze,EAAEye,UAAYze,EAAEg9B,IAAMh9B,EAAE6/B,UAAW7/B,EAAEi9B,IAAMj9B,EAAE8/B,WAClE9C,EAAKve,EAASvwB,EACd+uC,EAAKxe,EAAStwB,EACdiK,EAAY,IAAI,GAAM4H,EAAE5H,WAAa4H,EAAEo9B,IAAMp9B,EAAE49B,WAAY59B,EAAEq9B,IAAMr9B,EAAE69B,YACrET,EAAKhlC,EAAUlK,EACfmvC,EAAKjlC,EAAUjK,EACf4xC,EAAW,IAAI,GAAM//B,EAAE+/B,UAAY//B,EAAEmmB,IAAMnmB,EAAEggC,UAAWhgC,EAAEo8B,IAAMp8B,EAAEigC,WAItE,MAAO,CACL1D,OAAQA,EACRC,OAAQA,EACRE,MAAOA,EACPC,MAAOA,EACPE,MAAOA,EACPE,MAAOA,EACP5W,GAVO4Z,EAAS7xC,EAWhBkuC,GAVO2D,EAAS5xC,EAWhBivC,GAAIA,EACJC,GAAIA,EACJhV,GAAIA,EACJC,GAAIA,EACJ0U,GAAIA,EACJC,GAAIA,KAIP,CACDl4B,IAAK,iBACLd,MAAO,SAAwBwsB,EAAGpB,EAAGrvB,GAEnC,IAAI1P,EAAImgC,EAAEngC,EAAI++B,EAAE/+B,EAAImgC,EAAEl/B,EAAI89B,EAAE/9B,EACxBA,EAAIm/B,EAAEn/B,EAAI+9B,EAAE/+B,EAAImgC,EAAElgC,EAAI8+B,EAAE/9B,EACxBC,EAAIk/B,EAAEngC,EAAI++B,EAAE99B,EAAIk/B,EAAEl/B,EAAI89B,EAAE9+B,EACxBA,EAAIkgC,EAAEn/B,EAAI+9B,EAAE99B,EAAIk/B,EAAElgC,EAAI8+B,EAAE9+B,EACxBC,EAAIigC,EAAEjgC,EAAIigC,EAAEngC,EAAI++B,EAAE7+B,EAAIigC,EAAEl/B,EAAI89B,EAAE5+B,EAC9BA,EAAIggC,EAAEhgC,EAAIggC,EAAEn/B,EAAI+9B,EAAE7+B,EAAIigC,EAAElgC,EAAI8+B,EAAE5+B,EAQlC,OANAuP,EAAE1P,EAAIA,EACN0P,EAAE1O,EAAIA,EACN0O,EAAEzO,EAAIA,EACNyO,EAAEzP,EAAIA,EACNyP,EAAExP,EAAIA,EACNwP,EAAEvP,EAAIA,EACCuP,MAIJy7B,EA9eT,GAmgBA,SAASyE,KAEP,IAAKA,GAAOC,MAAO,CACjB,IAAI10C,EAAMy9B,KAAevL,KAAK,EAAG,GACjClyB,EAAI29B,KAAKr9B,MAAM+iC,QAAU,CAAC,aAAc,qBAAsB,cAAe,aAAc,oBAAoB9xB,KAAK,KACpHvR,EAAI4+B,KAAK,YAAa,SACtB5+B,EAAI4+B,KAAK,cAAe,QACxB,IAAIliB,EAAO1c,EAAI0c,OAAOihB,KACtB8W,GAAOC,MAAQ,CACb10C,IAAKA,EACL0c,KAAMA,GAIV,IAAK+3B,GAAOC,MAAM10C,IAAI29B,KAAK57B,WAAY,CACrC,IAAI8D,EAAIy3B,GAAQp9B,SAASy0C,MAAQrX,GAAQp9B,SAASkV,gBAClDq/B,GAAOC,MAAM10C,IAAI40C,MAAM/uC,GAGzB,OAAO4uC,GAAOC,MAGhB,SAASG,GAAYpY,GACnB,QAAQA,EAAI/7B,OAAU+7B,EAAI97B,QAAW87B,EAAIh6B,GAAMg6B,EAAI/5B,GAzBrDw7B,GAAS8R,GAAQ,UAuCjB,IAAI8E,GAEJ,WACE,SAASA,IACPvX,GAAgB38B,KAAMk0C,GAEtBl0C,KAAKyB,KAAKkT,MAAM3U,KAAM4U,WA2ExB,OAxEAkyB,GAAaoN,EAAK,CAAC,CACjBx7B,IAAK,OACLd,MAAO,SAAcnE,GACnB,IAAI65B,EAAO,CAAC,EAAG,EAAG,EAAG,GAWrB,OAVA75B,EAA2B,iBAAXA,EAAsBA,EAAO3Q,MAAMy+B,IAAWt+B,IAAIC,YAAc+M,MAAMiP,QAAQzL,GAAUA,EAA6B,WAApBsO,GAAQtO,GAAuB,CAAgB,MAAfA,EAAOuB,KAAevB,EAAOuB,KAAOvB,EAAO5R,EAAiB,MAAd4R,EAAOyB,IAAczB,EAAOyB,IAAMzB,EAAO3R,EAAG2R,EAAO3T,MAAO2T,EAAO1T,QAA+B,IAArB6U,UAAU/K,OAAe,GAAGqG,MAAMhK,KAAK0O,WAAa04B,EAC9TttC,KAAK6B,EAAI4R,EAAO,IAAM,EACtBzT,KAAK8B,EAAI2R,EAAO,IAAM,EACtBzT,KAAKF,MAAQE,KAAKm0C,EAAI1gC,EAAO,IAAM,EACnCzT,KAAKD,OAASC,KAAK6nC,EAAIp0B,EAAO,IAAM,EAEpCzT,KAAKo0C,GAAKp0C,KAAK6B,EAAI7B,KAAKm0C,EACxBn0C,KAAKq0C,GAAKr0C,KAAK8B,EAAI9B,KAAK6nC,EACxB7nC,KAAKyxC,GAAKzxC,KAAK6B,EAAI7B,KAAKm0C,EAAI,EAC5Bn0C,KAAK0xC,GAAK1xC,KAAK8B,EAAI9B,KAAK6nC,EAAI,EACrB7nC,OAGR,CACD0Y,IAAK,QACLd,MAAO,SAAeikB,GACpB,IAAIh6B,EAAIsB,KAAKC,IAAIpD,KAAK6B,EAAGg6B,EAAIh6B,GACzBC,EAAIqB,KAAKC,IAAIpD,KAAK8B,EAAG+5B,EAAI/5B,GAG7B,OAAO,IAAIoyC,EAAIryC,EAAGC,EAFNqB,KAAKa,IAAIhE,KAAK6B,EAAI7B,KAAKF,MAAO+7B,EAAIh6B,EAAIg6B,EAAI/7B,OAAS+B,EAClDsB,KAAKa,IAAIhE,KAAK8B,EAAI9B,KAAKD,OAAQ87B,EAAI/5B,EAAI+5B,EAAI97B,QAAU+B,KAGnE,CACD4W,IAAK,YACLd,MAAO,SAAmB8d,GAClBA,aAAa0Z,KACjB1Z,EAAI,IAAI0Z,GAAO1Z,IAGjB,IAAI4e,EAAOC,IACPC,GAAO,IACPC,EAAOF,IACPG,GAAO,IASX,MARU,CAAC,IAAI,GAAM10C,KAAK6B,EAAG7B,KAAK8B,GAAI,IAAI,GAAM9B,KAAKo0C,GAAIp0C,KAAK8B,GAAI,IAAI,GAAM9B,KAAK6B,EAAG7B,KAAKq0C,IAAK,IAAI,GAAMr0C,KAAKo0C,GAAIp0C,KAAKq0C,KAClHxvB,SAAQ,SAAUuZ,GACpBA,EAAIA,EAAE3sB,UAAUikB,GAChB4e,EAAOnxC,KAAKC,IAAIkxC,EAAMlW,EAAEv8B,GACxB2yC,EAAOrxC,KAAKa,IAAIwwC,EAAMpW,EAAEv8B,GACxB4yC,EAAOtxC,KAAKC,IAAIqxC,EAAMrW,EAAEt8B,GACxB4yC,EAAOvxC,KAAKa,IAAI0wC,EAAMtW,EAAEt8B,MAEnB,IAAIoyC,EAAII,EAAMG,EAAMD,EAAOF,EAAMI,EAAOD,KAEhD,CACD/7B,IAAK,YACLd,MAAO,WAIL,OAFA5X,KAAK6B,GAAK66B,GAAQv2B,OAAOwuC,YACzB30C,KAAK8B,GAAK46B,GAAQv2B,OAAOyuC,YAClB50C,OAER,CACD0Y,IAAK,WACLd,MAAO,WACL,OAAO5X,KAAK6B,EAAI,IAAM7B,KAAK8B,EAAI,IAAM9B,KAAKF,MAAQ,IAAME,KAAKD,SAE9D,CACD2Y,IAAK,UACLd,MAAO,WACL,MAAO,CAAC5X,KAAK6B,EAAG7B,KAAK8B,EAAG9B,KAAKF,MAAOE,KAAKD,UAE1C,CACD2Y,IAAK,WACLd,MAAO,WACL,OAAOq8B,GAAYj0C,UAIhBk0C,EA/ET,GAkFA,SAASW,GAAOtiC,EAAIuiC,GAClB,IAAIjZ,EAhGekB,EAkGnB,IAGE,GAAIkX,GAFJpY,EAAMtpB,EAAGvS,KAAK+8B,SAnGGA,EAqGoB/8B,KAAK+8B,QApG5BL,GAAQp9B,YAAao9B,GAAQp9B,SAASkV,gBAAgBugC,UAAY,SAAUhY,GAE1F,KAAOA,EAAK57B,YACV47B,EAAOA,EAAK57B,WAGd,OAAO47B,IAASL,GAAQp9B,WACvB4G,KAAKw2B,GAAQp9B,SAASkV,gBAAiBuoB,GA8FtC,MAAM,IAAIxwB,MAAM,0BAElB,MAAOpI,GACP03B,EAAMiZ,EAAM90C,MAGd,OAAO67B,EA0BTpG,GAAgB,CACduf,QAAS,CACPA,QAAS,SAAiBnzC,EAAGC,EAAGhC,EAAOC,GAErC,OAAS,MAAL8B,EAAkB,IAAIqyC,GAAIl0C,KAAKg+B,KAAK,YAEjCh+B,KAAKg+B,KAAK,UAAW,IAAIkW,GAAIryC,EAAGC,EAAGhC,EAAOC,KAEnD6B,KAAM,SAAcqzC,EAAOjtC,GACzB,IAAIlI,EAAQE,KAAK+8B,KAAKptB,YAClB5P,EAASC,KAAK+8B,KAAKntB,aACnB5M,EAAIhD,KAAKg1C,UAGb,IAAKl1C,IAAUC,EAAQ,CACrB,IAAIL,EAAQyG,OAAO+uC,iBAAiBl1C,KAAK+8B,MACzCj9B,EAAQoD,WAAWxD,EAAMy1C,iBAAiB,UAC1Cp1C,EAASmD,WAAWxD,EAAMy1C,iBAAiB,WAG7C,IAAIC,EAAQt1C,EAAQkD,EAAElD,MAClBu1C,EAAQt1C,EAASiD,EAAEjD,OACnB6B,EAAOuB,KAAKC,IAAIgyC,EAAOC,GAE3B,GAAa,MAATJ,EACF,OAAOrzC,EAGT,IAAI0zC,EAAa1zC,EAAOqzC,EACpBK,IAAef,MAAUe,EAAaC,OAAOC,WACjDxtC,EAAQA,GAAS,IAAI,GAAMlI,EAAQ,EAAIs1C,EAAQpyC,EAAEnB,EAAG9B,EAAS,EAAIs1C,EAAQryC,EAAElB,GAC3E,IAAI+5B,EAAM,IAAIqY,GAAIlxC,GAAGyO,UAAU,IAAI29B,GAAO,CACxCvqC,MAAOywC,EACPpZ,OAAQl0B,KAEV,OAAOhI,KAAKg1C,QAAQnZ,OAI1ByB,GAAS4W,GAAK,OAGd,IAAIuB,GAAgB,WAClB,IAEE,OAAO7+B,SAAS,OAAQ,YAAa,eAAgB,CAAC,iCAAkC,WAAY,sCAAuC,8BAA+B,uBAAwB,uDAAwD,QAAS,MAAO,WAAWjG,KAAK,OAC1R,MAAOxM,GAEP,OAAO,SAAUwb,GACf,IAAI+1B,EAAY9gC,UAAU/K,OAAS,QAAsBwJ,IAAjBuB,UAAU,GAAmBA,UAAU,GAAK3E,MAEhF0lC,EAAe/gC,UAAU/K,OAAS,EAAI+K,UAAU,QAAKvB,EAErDuiC,EAAM,WACRF,EAAU/gC,MAAM3U,KAAM4U,WACtB+gC,GAAgBA,EAAahhC,MAAM3U,KAAM4U,YAY3C,OATAghC,EAAIl0C,UAAYsS,OAAOoP,OAAOsyB,EAAUh0C,WACxCk0C,EAAIl0C,UAAU2e,YAAcu1B,EAE5BA,EAAIl0C,UAAUuB,IAAM,SAAUiL,GAC5B,IAAIinB,EAAM,IAAIygB,EAEd,OADAzgB,EAAI/lB,KAAKuF,MAAMwgB,EAAKllB,MAAMvO,UAAUuB,IAAIiD,KAAKlG,KAAMkO,IAC5CinB,GAGFygB,IAzBO,GA8BhBC,GAAOJ,GAAc,OAAQxlC,OAAO,WACtC,IAAIklB,EAAMvgB,UAAU/K,OAAS,QAAsBwJ,IAAjBuB,UAAU,GAAmBA,UAAU,GAAK,GAE9E,GAAmB,iBAARugB,EAAkB,OAAOn1B,KACpCA,KAAK6J,OAAS,EACd7J,KAAKoP,KAAKuF,MAAM3U,KAAMk1B,GAAmBC,OAE3CxxB,GAAOkyC,GAAM,CACXC,KAAM,SAAcC,GAClB,IAAK,IAAIjY,EAAOlpB,UAAU/K,OAAQ6L,EAAO,IAAIzF,MAAM6tB,EAAO,EAAIA,EAAO,EAAI,GAAIC,EAAO,EAAGA,EAAOD,EAAMC,IAClGroB,EAAKqoB,EAAO,GAAKnpB,UAAUmpB,GAG7B,MAA8B,mBAAnBgY,EACF/1C,KAAKiD,KAAI,SAAUmN,GACxB,OAAO2lC,EAAe7vC,KAAKkK,EAAIA,MAG1BpQ,KAAKiD,KAAI,SAAUmN,GACxB,OAAOA,EAAG2lC,GAAgBphC,MAAMvE,EAAIsF,OAI1CsgC,QAAS,WACP,OAAO/lC,MAAMvO,UAAU4b,OAAO3I,MAAM,GAAI3U,SAG5C,IAAIi2C,GAAW,CAAC,UAAW,cAAe,QAsB1C,SAASC,GAASC,EAAOjY,GACvB,OAAO,IAAI2X,GAAK5yC,IAAKi7B,GAAUxB,GAAQp9B,UAAU4R,iBAAiBilC,IAAQ,SAAUpZ,GAClF,OAAOK,GAAML,OAtBjB8Y,GAAKlyC,OAAS,SAAUknB,GACtBA,EAAUA,EAAQ8Y,QAAO,SAAU9hB,EAAKlC,GAEtC,OAAIs2B,GAASh5B,SAAS0C,IAEN,MAAZA,EAAK,KAETkC,EAAIlC,GAAQ,WACV,IAAK,IAAIy2B,EAAQxhC,UAAU/K,OAAQwsC,EAAQ,IAAIpmC,MAAMmmC,GAAQE,EAAQ,EAAGA,EAAQF,EAAOE,IACrFD,EAAMC,GAAS1hC,UAAU0hC,GAG3B,OAAOt2C,KAAK81C,KAAKnhC,MAAM3U,KAAM,CAAC2f,GAAMrC,OAAO+4B,MATTx0B,IAanC,IACHle,GAAOkyC,GAAMhrB,IAgBf,IAAI0rB,GAEJ,SAAUC,GAGR,SAASD,IACP,IAAIE,EAEAC,EAAO9hC,UAAU/K,OAAS,QAAsBwJ,IAAjBuB,UAAU,GAAmBA,UAAU,GAAK,GAC3E+hC,EAAcD,EAAK1S,OACnBA,OAAyB,IAAhB2S,EAAyB,GAAKA,EAM3C,OAJAha,GAAgB38B,KAAMu2C,IAEtBE,EAAQzJ,GAA2BhtC,KAAMitC,GAAgBsJ,GAAarwC,KAAKlG,QACrEgkC,OAASA,EACRyS,EAgET,OA7EAhJ,GAAU8I,EAAaC,GAgBvB1P,GAAayP,EAAa,CAAC,CACzB79B,IAAK,mBACLd,MAAO,cACN,CACDc,IAAK,WACLd,MAAO,SAAoB5N,EAAOiU,GAChC,OAz4DN,SAAkB8e,EAAM/yB,EAAOiU,GAC7B,IAAI/J,EAAI+vB,GAAelH,GAYvB,OAVI/yB,aAAiB0yB,GAAQv2B,OAAOywC,QAGlC5sC,EAAQ,IAAI0yB,GAAQv2B,OAAO0wC,YAAY7sC,EAAO,CAC5C8I,OAAQmL,EACR64B,YAAY,KAJd5iC,EAAE6iC,cAAc/sC,GASXA,EA43DIgtC,CAASh3C,KAAMgK,EAAOiU,KAE9B,CACDvF,IAAK,gBACLd,MAAO,SAAuB5N,GAC5B,IAAIs6B,EAAMtkC,KAAK+jC,iBAAiBC,OAChC,IAAKM,EAAK,OAAO,EACjB,IAAIN,EAASM,EAAIt6B,EAAM0I,MAEvB,IAAK,IAAI5I,KAAKk6B,EACZ,IAAK,IAAItX,KAAKsX,EAAOl6B,GACnBk6B,EAAOl6B,GAAG4iB,GAAG1iB,GAIjB,OAAQA,EAAMitC,mBAGf,CACDv+B,IAAK,OACLd,MAAO,SAAc5N,EAAOiU,GAE1B,OADAje,KAAKg3C,SAAShtC,EAAOiU,GACdje,OAER,CACD0Y,IAAK,iBACLd,MAAO,WACL,OAAO5X,OAER,CACD0Y,IAAK,iBACLd,MAAO,WACL,OAAO5X,OAGR,CACD0Y,IAAK,MACLd,MAAO,SAAe5N,EAAOk6B,GAG3B,OAFA35B,GAAIvK,KAAMgK,EAAOk6B,GAEVlkC,OAGR,CACD0Y,IAAK,KACLd,MAAO,SAAc5N,EAAOk6B,EAAUC,EAAS3iC,GAG7C,OAFA6I,GAAGrK,KAAMgK,EAAOk6B,EAAUC,EAAS3iC,GAE5BxB,OAER,CACD0Y,IAAK,sBACLd,MAAO,gBAGF2+B,EA9ET,CA+EE3Z,IAGF,SAASsa,MAFT5Z,GAASiZ,GAAa,eAItB,IAAIY,GACQ,IADRA,GAEI,IAFJA,GAGK,EAGLd,GAAQ,CAEV,eAAgB,EAChB,iBAAkB,EAClB,eAAgB,EAChB,kBAAmB,QACnB,iBAAkB,OAClBe,KAAM,UACNC,OAAQ,UACRC,QAAS,EAETz1C,EAAG,EACHC,EAAG,EACH2vC,GAAI,EACJC,GAAI,EAEJ5xC,MAAO,EACPC,OAAQ,EAERijC,EAAG,EACHlJ,GAAI,EACJiW,GAAI,EAEJwH,OAAQ,EACR,eAAgB,EAChB,aAAc,UAEd,cAAe,SAUbC,GAAW/B,GAAc,WAAYxlC,OAAO,SAAUklB,GACxDn1B,KAAKyB,KAAK0zB,MAEZxxB,GAAO6zC,GAAU,CACf/1C,KAAM,SAAc0zB,GAElB,MAAmB,iBAARA,IACXn1B,KAAK6J,OAAS,EACd7J,KAAKoP,KAAKuF,MAAM3U,KAAMk1B,GAAmBl1B,KAAKijC,MAAM9N,MAFhBn1B,MAKtCg2C,QAAS,WACP,OAAO/lC,MAAMvO,UAAU4b,OAAO3I,MAAM,GAAI3U,OAE1CiU,SAAU,WACR,OAAOjU,KAAK2Q,KAAK,MAGnB6H,QAAS,WACP,IAAIgqB,EAAM,GAEV,OADAA,EAAIpzB,KAAKuF,MAAM6tB,EAAKtN,GAAmBl1B,OAChCwiC,GAGTS,MAAO,WACL,IAAI7iB,EAAQxL,UAAU/K,OAAS,QAAsBwJ,IAAjBuB,UAAU,GAAmBA,UAAU,GAAK,GAEhF,OAAIwL,aAAiBnQ,MAAcmQ,EAC5BA,EAAM+a,OAAOr4B,MAAMy+B,IAAWt+B,IAAIC,aAE3CgsC,MAAO,WACL,OAAO,IAAIlvC,KAAKqgB,YAAYrgB,OAE9By3C,MAAO,WACL,OAAO,IAAIC,IAAI13C,SAInB,IAAI23C,GAEJ,WAEE,SAASA,IACPhb,GAAgB38B,KAAM23C,GAEtB33C,KAAKyB,KAAKkT,MAAM3U,KAAM4U,WA+FxB,OA5FAkyB,GAAa6Q,EAAW,CAAC,CACvBj/B,IAAK,OACLd,MAAO,SAAcA,EAAOggC,GAiC1B,OAhCAA,EAAO3nC,MAAMiP,QAAQtH,GAASA,EAAM,GAAKggC,EACzChgC,EAAQ3H,MAAMiP,QAAQtH,GAASA,EAAM,GAAKA,EAE1C5X,KAAK4X,MAAQ,EACb5X,KAAK43C,KAAOA,GAAQ,GAEC,iBAAVhgC,EAET5X,KAAK4X,MAAQzD,MAAMyD,GAAS,EAAKxD,SAASwD,GAA2CA,EAAlCA,EAAQ,GAAK,MAAU,MAChD,iBAAVA,GAChBggC,EAAOhgC,EAAMsD,MAAM2lB,OAIjB7gC,KAAK4X,MAAQ1U,WAAW00C,EAAK,IAEb,MAAZA,EAAK,GACP53C,KAAK4X,OAAS,IACO,MAAZggC,EAAK,KACd53C,KAAK4X,OAAS,KAIhB5X,KAAK43C,KAAOA,EAAK,IAGfhgC,aAAiB+/B,IACnB33C,KAAK4X,MAAQA,EAAMY,UACnBxY,KAAK43C,KAAOhgC,EAAMggC,MAIf53C,OAER,CACD0Y,IAAK,WACLd,MAAO,WACL,OAAsB,MAAd5X,KAAK43C,QAA+B,IAAb53C,KAAK4X,OAAe,IAAoB,MAAd5X,KAAK43C,KAAe53C,KAAK4X,MAAQ,IAAM5X,KAAK4X,OAAS5X,KAAK43C,OAEpH,CACDl/B,IAAK,SACLd,MAAO,WACL,OAAO5X,KAAKiU,aAEb,CACDyE,IAAK,UACLd,MAAO,WACL,MAAO,CAAC5X,KAAK4X,MAAO5X,KAAK43C,QAE1B,CACDl/B,IAAK,UACLd,MAAO,WACL,OAAO5X,KAAK4X,QAGb,CACDc,IAAK,OACLd,MAAO,SAAcigC,GAEnB,OADAA,EAAS,IAAIF,EAAUE,GAChB,IAAIF,EAAU33C,KAAO63C,EAAQ73C,KAAK43C,MAAQC,EAAOD,QAGzD,CACDl/B,IAAK,QACLd,MAAO,SAAeigC,GAEpB,OADAA,EAAS,IAAIF,EAAUE,GAChB,IAAIF,EAAU33C,KAAO63C,EAAQ73C,KAAK43C,MAAQC,EAAOD,QAGzD,CACDl/B,IAAK,QACLd,MAAO,SAAeigC,GAEpB,OADAA,EAAS,IAAIF,EAAUE,GAChB,IAAIF,EAAU33C,KAAO63C,EAAQ73C,KAAK43C,MAAQC,EAAOD,QAGzD,CACDl/B,IAAK,SACLd,MAAO,SAAgBigC,GAErB,OADAA,EAAS,IAAIF,EAAUE,GAChB,IAAIF,EAAU33C,KAAO63C,EAAQ73C,KAAK43C,MAAQC,EAAOD,QAEzD,CACDl/B,IAAK,UACLd,MAAO,SAAiBggC,GACtB,OAAO,IAAID,EAAU33C,KAAK4X,MAAOggC,OAI9BD,EApGT,GAuGIG,GAAQ,GA4FRC,GAEJ,SAAUC,GAGR,SAASD,EAAIhb,EAAMsZ,GACjB,IAAI4B,EAYJ,OAVAtb,GAAgB38B,KAAM+3C,IAEtBE,EAASjL,GAA2BhtC,KAAMitC,GAAgB8K,GAAK7xC,KAAKlG,KAAM+8B,KACnEA,KAAOA,EACdkb,EAAOvlC,KAAOqqB,EAAK1sB,SAEfgmC,GAAStZ,IAASsZ,GACpB4B,EAAOja,KAAKqY,GAGP4B,EA0ST,OAzTAxK,GAAUsK,EAAKC,GAmBflR,GAAaiR,EAAK,CAAC,CACjBr/B,IAAK,MACLd,MAAO,SAAatG,EAASxH,GAS3B,OARAwH,EAAUurB,GAAavrB,GAEd,MAALxH,EACF9J,KAAK+8B,KAAKt9B,YAAY6R,EAAQyrB,MACrBzrB,EAAQyrB,OAAS/8B,KAAK+8B,KAAK/sB,WAAWlG,IAC/C9J,KAAK+8B,KAAK1rB,aAAaC,EAAQyrB,KAAM/8B,KAAK+8B,KAAK/sB,WAAWlG,IAGrD9J,OAGR,CACD0Y,IAAK,QACLd,MAAO,SAAesmB,GACpB,OAAOrB,GAAaqB,GAAQga,IAAIl4C,QAGjC,CACD0Y,IAAK,WACLd,MAAO,WACL,OAAO,IAAIi+B,GAAK5yC,GAAIjD,KAAK+8B,KAAK5sB,UAAU,SAAU4sB,GAChD,OAAOK,GAAML,SAIhB,CACDrkB,IAAK,QACLd,MAAO,WAEL,KAAO5X,KAAK+8B,KAAKob,iBACfn4C,KAAK+8B,KAAK37B,YAAYpB,KAAK+8B,KAAKqb,WAGlC,OAAOp4C,OAGR,CACD0Y,IAAK,QACLd,MAAO,WAIL,OAFA5X,KAAKq4C,iBAEE3a,GAAY19B,KAAK+8B,KAAKub,WAAU,MAGxC,CACD5/B,IAAK,OACLd,MAAO,SAAcyjB,EAAOkd,GAC1B,IACIzuC,EAAGwxB,EADHnrB,EAAWnQ,KAAKmQ,WAGpB,IAAKrG,EAAI,EAAGwxB,EAAKnrB,EAAStG,OAAQC,EAAIwxB,EAAIxxB,IACxCuxB,EAAM1mB,MAAMxE,EAASrG,GAAI,CAACA,EAAGqG,IAEzBooC,GACFpoC,EAASrG,GAAGgsC,KAAKza,EAAOkd,GAI5B,OAAOv4C,OAER,CACD0Y,IAAK,UACLd,MAAO,SAAiBvH,GACtB,OAAOrQ,KAAKk4C,IAAI,IAAIH,EAAI30B,GAAO/S,OAGhC,CACDqI,IAAK,QACLd,MAAO,WACL,OAAOwlB,GAAMp9B,KAAK+8B,KAAKE,cAGxB,CACDvkB,IAAK,MACLd,MAAO,SAAa9N,GAClB,OAAOszB,GAAMp9B,KAAK+8B,KAAK/sB,WAAWlG,MAEnC,CACD4O,IAAK,iBACLd,MAAO,WACL,OAAO5X,KAAK+8B,OAEb,CACDrkB,IAAK,iBACLd,MAAO,WACL,OAAO5X,KAAK+8B,OAGb,CACDrkB,IAAK,MACLd,MAAO,SAAatG,GAClB,OAAOtR,KAAK0c,MAAMpL,IAAY,IAG/B,CACDoH,IAAK,KACLd,MAAO,SAAY4gC,GAOjB,YALmB,IAARA,GAAwBx4C,KAAK+8B,KAAK3iB,KAC3Cpa,KAAK+8B,KAAK3iB,GAAKqjB,GAAIz9B,KAAK0S,OAInB1S,KAAKg+B,KAAK,KAAMwa,KAGxB,CACD9/B,IAAK,QACLd,MAAO,SAAetG,GACpB,MAAO,GAAGpB,MAAMhK,KAAKlG,KAAK+8B,KAAK/sB,YAAYjD,QAAQuE,EAAQyrB,QAG5D,CACDrkB,IAAK,OACLd,MAAO,WACL,OAAOwlB,GAAMp9B,KAAK+8B,KAAKqb,aAGxB,CACD1/B,IAAK,UACLd,MAAO,SAAiB9H,GACtB,IAAIM,EAAKpQ,KAAK+8B,KACd,OAAQ3sB,EAAGqoC,SAAWroC,EAAGsoC,iBAAmBtoC,EAAGuoC,mBAAqBvoC,EAAGwoC,oBAAsBxoC,EAAGyoC,uBAAyBzoC,EAAG0oC,kBAAkB5yC,KAAKkK,EAAIN,KAGxJ,CACD4I,IAAK,SACLd,MAAO,SAAgBlF,GACrB,IAAIwrB,EAASl+B,KAEb,IAAKk+B,EAAOnB,KAAK57B,WAAY,OAAO,KAGpC,GADA+8B,EAASd,GAAMc,EAAOnB,KAAK57B,aACtBuR,EAAM,OAAOwrB,EAElB,KAAOA,GAAQ,CACb,GAAoB,iBAATxrB,EAAoBwrB,EAAOua,QAAQ/lC,GAAQwrB,aAAkBxrB,EAAM,OAAOwrB,EACrF,IAAKA,EAAOnB,KAAK57B,YAAkD,cAApC+8B,EAAOnB,KAAK57B,WAAWkP,UAAgE,uBAApC6tB,EAAOnB,KAAK57B,WAAWkP,SAAmC,OAAO,KAEnJ6tB,EAASd,GAAMc,EAAOnB,KAAK57B,eAI9B,CACDuX,IAAK,MACLd,MAAO,SAAatG,EAASxH,GAE3B,OADA9J,KAAK4xB,IAAItgB,EAASxH,GACXwH,IAGR,CACDoH,IAAK,QACLd,MAAO,SAAesmB,GACpB,OAAOrB,GAAaqB,GAAQtM,IAAI5xB,QAGjC,CACD0Y,IAAK,SACLd,MAAO,WAKL,OAJI5X,KAAKk+B,UACPl+B,KAAKk+B,SAASG,cAAcr+B,MAGvBA,OAGR,CACD0Y,IAAK,gBACLd,MAAO,SAAuBtG,GAE5B,OADAtR,KAAK+8B,KAAK37B,YAAYkQ,EAAQyrB,MACvB/8B,OAGR,CACD0Y,IAAK,UACLd,MAAO,SAAiBtG,GAGtB,OAFAA,EAAUurB,GAAavrB,GACvBtR,KAAK+8B,KAAK57B,WAAW43C,aAAaznC,EAAQyrB,KAAM/8B,KAAK+8B,MAC9CzrB,IAER,CACDoH,IAAK,QACLd,MAAO,WACL,IAAIohC,EAAYpkC,UAAU/K,OAAS,QAAsBwJ,IAAjBuB,UAAU,GAAmBA,UAAU,GAAK,EAChF3R,EAAM2R,UAAU/K,OAAS,EAAI+K,UAAU,QAAKvB,EAC5C4lC,EAAS91C,KAAKqI,IAAI,GAAIwtC,GACtB3C,EAAQr2C,KAAKg+B,OAEZ/6B,IACHA,EAAM+Q,OAAOwG,KAAK67B,IAIpB,IAAI6C,EAAW,GAKf,OAJAj2C,EAAI4hB,SAAQ,SAAUnM,GACpBwgC,EAASxgC,GAAOvV,KAAKkkC,MAAMgP,EAAM39B,GAAOugC,GAAUA,KAEpDj5C,KAAKg+B,KAAKkb,GACHl5C,OAGR,CACD0Y,IAAK,WACLd,MAAO,WACL,OAAO5X,KAAKoa,OAGb,CACD1B,IAAK,MACLd,MAAO,SAAauhC,EAASC,GAC3B,IAAIC,EAAMpU,EAAKqU,EAQf,IANgB,IAAZH,IACFC,GAAY,EACZD,EAAU,MAIG,MAAXA,GAAsC,mBAAZA,EAAwB,CAEpDC,EAAyB,MAAbA,GAA2BA,EAEvCp5C,KAAKq4C,iBACL,IAAIkB,EAAUv5C,KAEd,GAAe,MAAXm5C,EAAiB,CAGnB,GAFAI,EAAUnc,GAAMmc,EAAQxc,KAAKub,WAAU,IAEnCc,EAAW,CACb,IAAIrwC,EAASowC,EAAQI,GAGrB,GAFAA,EAAUxwC,GAAUwwC,GAEL,IAAXxwC,EAAkB,MAAO,GAI/BwwC,EAAQzD,MAAK,WACX,IAAI/sC,EAASowC,EAAQn5C,MAEjBy2C,EAAQ1tC,GAAU/I,MAGP,IAAX+I,EACF/I,KAAK2+B,SACI51B,GAAU/I,OAASy2C,GAC5Bz2C,KAAKwQ,QAAQimC,MAEd,GAIL,OAAO2C,EAAYG,EAAQxc,KAAKqc,UAAYG,EAAQxc,KAAKC,UAY3D,IAPAoc,EAAyB,MAAbA,GAA4BA,EAExCC,EAAO3c,GAAQp9B,SAASC,gBAAgBg9B,GAAI,OAC5C+c,EAAW5c,GAAQp9B,SAASk6C,yBAE5BH,EAAKrc,UAAYmc,EAEZlU,EAAMoU,EAAKlpC,SAAStG,OAAQo7B,KAC/BqU,EAAS75C,YAAY45C,EAAKI,mBAG5B,IAAIvb,EAASl+B,KAAKk+B,SAElB,OAAOkb,EAAYp5C,KAAKwQ,QAAQ8oC,IAAapb,EAASl+B,KAAK4xB,IAAI0nB,KAEhE,CACD5gC,IAAK,QACLd,MAAO,SAAe8hC,GAGpB,OADA15C,KAAK+8B,KAAKn9B,YAAc85C,EACjB15C,OAGR,CACD0Y,IAAK,iBACLd,MAAO,WAKL,OAHA5X,KAAK81C,MAAK,WACR91C,KAAKq4C,oBAEAr4C,SAIJ+3C,EA1TT,CA2TExB,IACF5yC,GAAOo0C,GAAK,CACV/Z,KAtZF,SAAcA,EAAMzlB,EAAKgkB,GACvB,IAAIka,EAAQz2C,KAGZ,GAAY,MAARg+B,EAAc,CAEhBA,EAAO,GACPzlB,EAAMvY,KAAK+8B,KAAK4c,WAChB,IAAIhkB,GAA4B,EAC5BC,GAAoB,EACpBC,OAAiBxiB,EAErB,IACE,IAAK,IAAwCyiB,EAApCC,EAAYxd,EAAIgH,OAAOuC,cAAsB6T,GAA6BG,EAAQC,EAAUxL,QAAQuB,MAAO6J,GAA4B,EAAM,CACpJ,IAAIoH,EAAOjH,EAAMle,MACjBomB,EAAKjB,EAAK1sB,UAAYtK,GAASoU,KAAK4iB,EAAK6c,WAAa12C,WAAW65B,EAAK6c,WAAa7c,EAAK6c,WAE1F,MAAO5jB,GACPJ,GAAoB,EACpBC,EAAiBG,EACjB,QACA,IACOL,GAAiD,MAApBI,EAAUE,QAC1CF,EAAUE,SAEZ,QACA,GAAIL,EACF,MAAMC,GAKZ,OAAOmI,EACF,GAAIA,aAAgB/tB,MAEzB,OAAO+tB,EAAK2F,QAAO,SAAUtS,EAAMwoB,GAEjC,OADAxoB,EAAKwoB,GAAQpD,EAAMzY,KAAK6b,GACjBxoB,IACN,IACE,GAAsB,WAAlBtP,GAAQic,IAAsBA,EAAK3d,cAAgBrM,OAE5D,IAAKuE,KAAOylB,EACVh+B,KAAKg+B,KAAKzlB,EAAKylB,EAAKzlB,SAEjB,GAAY,OAARA,EAETvY,KAAK+8B,KAAKz5B,gBAAgB06B,OACrB,IAAW,MAAPzlB,EAGT,OAAc,OADdA,EAAMvY,KAAK+8B,KAAKn6B,aAAao7B,IACRqY,GAAMrY,GAAQj4B,GAASoU,KAAK5B,GAAOrV,WAAWqV,GAAOA,EAOvD,iBAJnBA,EAAMu/B,GAAMnU,QAAO,SAAUmW,EAAMC,GACjC,OAAOA,EAAK/b,EAAM8b,EAAMrD,KACvBl+B,IAGDA,EAAM,IAAIo/B,GAAUp/B,GACXyvB,GAAMgS,QAAQzhC,GAEvBA,EAAM,IAAIyvB,GAAMzvB,GACPA,EAAI8H,cAAgBpQ,QAE7BsI,EAAM,IAAIi/B,GAASj/B,IAIR,YAATylB,EAEEh+B,KAAK6V,SACP7V,KAAK6V,QAAQ0C,GAID,iBAAPgkB,EAAkBv8B,KAAK+8B,KAAKnsB,eAAe2rB,EAAIyB,EAAMzlB,EAAItE,YAAcjU,KAAK+8B,KAAKp9B,aAAaq+B,EAAMzlB,EAAItE,aAI7GjU,KAAKi6C,SAAqB,cAATjc,GAAiC,MAATA,GAC3Ch+B,KAAKi6C,UAIT,OAAOj6C,MAmUPglB,KAnrBF,SAAcmxB,GACZ,OAAOD,GAASC,EAAOn2C,KAAK+8B,OAmrB5Bmd,QAjrBF,SAAiB/D,GACf,OAAO/Y,GAAMp9B,KAAK+8B,KAAK19B,cAAc82C,OAkrBvC7Y,GAASya,GAAK,OAEd,IAAI,GAEJ,SAAUoC,GAGR,SAASC,EAAQrd,EAAMsZ,GACrB,IAAII,EAeJ,OAbA9Z,GAAgB38B,KAAMo6C,IAEtB3D,EAAQzJ,GAA2BhtC,KAAMitC,GAAgBmN,GAASl0C,KAAKlG,KAAM+8B,EAAMsZ,KAE7EgE,IAAM,GAEZ5D,EAAM1Z,KAAK79B,SAAW4tC,GAAuB2J,GAEzC1Z,EAAKud,aAAa,eAEpB7D,EAAM8D,QAAQ70B,KAAKud,MAAMlG,EAAKn6B,aAAa,gBAAkB,IAGxD6zC,EAqJT,OAvKAhJ,GAAU2M,EAASD,GAsBnBrT,GAAasT,EAAS,CAAC,CACrB1hC,IAAK,SACLd,MAAO,SAAgB/V,EAAGC,GACxB,OAAO9B,KAAKyxC,GAAG5vC,GAAG6vC,GAAG5vC,KAGtB,CACD4W,IAAK,KACLd,MAAO,SAAY/V,GACjB,OAAY,MAALA,EAAY7B,KAAK6B,IAAM7B,KAAKF,QAAU,EAAIE,KAAK6B,EAAEA,EAAI7B,KAAKF,QAAU,KAG5E,CACD4Y,IAAK,KACLd,MAAO,SAAY9V,GACjB,OAAY,MAALA,EAAY9B,KAAK8B,IAAM9B,KAAKD,SAAW,EAAIC,KAAK8B,EAAEA,EAAI9B,KAAKD,SAAW,KAG9E,CACD2Y,IAAK,OACLd,MAAO,WACL,OAAO5X,KAAKxB,OAAOW,SAGpB,CACDuZ,IAAK,QACLd,MAAO,SAAe/V,EAAGC,GACvB,OAAO9B,KAAK6wC,GAAGhvC,GAAGivC,GAAGhvC,KAGtB,CACD4W,IAAK,KACLd,MAAO,WACL,IAAI/V,EAAI+S,UAAU/K,OAAS,QAAsBwJ,IAAjBuB,UAAU,GAAmBA,UAAU,GAAK,EAC5E,OAAO5U,KAAK6B,EAAE,IAAI81C,GAAU91C,GAAG24C,KAAKx6C,KAAK6B,QAG1C,CACD6W,IAAK,KACLd,MAAO,WACL,IAAI9V,EAAI8S,UAAU/K,OAAS,QAAsBwJ,IAAjBuB,UAAU,GAAmBA,UAAU,GAAK,EAC5E,OAAO5U,KAAK8B,EAAE,IAAI61C,GAAU71C,GAAG04C,KAAKx6C,KAAK8B,QAG1C,CACD4W,IAAK,OACLd,MAAO,WACL,IAAIwmB,EAAIp+B,KAAKk+B,OAn4GV,GAm4G0B1/B,KAC7B,OAAO4/B,GAAKA,EAAE5/B,SAEf,CACDka,IAAK,iBACLd,MAAO,WACL,OAAO5X,OAGR,CACD0Y,IAAK,SACLd,MAAO,SAAgB6iC,GACrB,OAAOz6C,KAAKg+B,KAAK,SAAUyc,KAG5B,CACD/hC,IAAK,SACLd,MAAO,SAAgB/V,EAAGC,GACxB,IAAI+5B,EAAM77B,KAAK87B,OACf,OAAOj6B,EAAIg6B,EAAIh6B,GAAKC,EAAI+5B,EAAI/5B,GAAKD,EAAIg6B,EAAIh6B,EAAIg6B,EAAI/7B,OAASgC,EAAI+5B,EAAI/5B,EAAI+5B,EAAI97B,SAG3E,CACD2Y,IAAK,OACLd,MAAO,SAAc/V,EAAGC,GACtB,OAAO9B,KAAK6B,EAAEA,GAAGC,EAAEA,KAGpB,CACD4W,IAAK,UACLd,MAAO,WACL,IAAI8iC,EAAQ9lC,UAAU/K,OAAS,QAAsBwJ,IAAjBuB,UAAU,GAAmBA,UAAU,GAAK8nB,GAAQp9B,SACxFo7C,EAAQ7d,GAAa6d,GAIrB,IAHA,IAAIC,EAAU,IAAI9E,GACd3X,EAASl+B,MAELk+B,EAASA,EAAOA,WAAaA,EAAOnB,OAAS2d,EAAM3d,MAAQmB,EAAOnB,OAASL,GAAQp9B,UACzFq7C,EAAQvrC,KAAK8uB,GAGf,OAAOyc,IAGR,CACDjiC,IAAK,YACLd,MAAO,SAAqBomB,GAE1B,KADAA,EAAOh+B,KAAKg+B,KAAKA,IACN,OAAO,KAClB,IAAItI,EAAIsI,EAAK9iB,MAAM8lB,IACnB,OAAOtL,EAAImH,GAAanH,EAAE,IAAM,OAGjC,CACDhd,IAAK,UACLd,MAAO,SAAiBjE,GAEtB,OADA3T,KAAKq6C,IAAM1mC,EACJ3T,OAGR,CACD0Y,IAAK,OACLd,MAAO,SAAc9X,EAAOC,GAC1B,IAAIq+B,EAAIxC,GAAiB57B,KAAMF,EAAOC,GACtC,OAAOC,KAAKF,MAAM,IAAI63C,GAAUvZ,EAAEt+B,QAAQC,OAAO,IAAI43C,GAAUvZ,EAAEr+B,WAGlE,CACD2Y,IAAK,QACLd,MAAO,SAAegjC,GACpB,OAAO56C,KAAKg+B,KAAK,QAAS4c,KAG3B,CACDliC,IAAK,iBACLd,MAAO,WAQL,OANA5X,KAAK+8B,KAAKz5B,gBAAgB,cAEtB0Q,OAAOwG,KAAKxa,KAAKq6C,KAAKxwC,QACxB7J,KAAK+8B,KAAKp9B,aAAa,aAAc+lB,KAAKE,UAAU5lB,KAAKq6C,MAGpDnN,GAAKD,GAAgBmN,EAAQ14C,WAAY,iBAAkB1B,MAAMkG,KAAKlG,QAG9E,CACD0Y,IAAK,IACLd,MAAO,SAAWijC,GAChB,OAAO76C,KAAKg+B,KAAK,IAAK6c,KAGvB,CACDniC,IAAK,IACLd,MAAO,SAAWmyB,GAChB,OAAO/pC,KAAKg+B,KAAK,IAAK+L,OAInBqQ,EAxKT,CAyKErC,IACFp0C,GAAO,GAAS,CACdm4B,KA3/BF,WACE,OAAO,IAAIoY,GAAIW,GAAO3uC,KAAKlG,MAAM,SAAU+8B,GACzC,OAAOA,EAAKt5B,aACX,SAAU2M,GACX,IACE,IAAI8+B,EAAQ9+B,EAAG8+B,QAAQ8E,MAAMH,KAASz0C,KAAKyjC,OACvChH,EAAMqT,EAAMnS,KAAKt5B,UAErB,OADAyrC,EAAMvQ,SACC9C,EACP,MAAO13B,GACP,MAAM,IAAIoI,MAAM,4BAA8B6D,EAAG2sB,KAAK1sB,SAAW,sBAAwBlM,EAAE8P,kBAk/B/F6mC,KA9+BF,SAAc1qC,GACZ,IAAIyrB,EAAM,IAAIqY,GAAIW,GAAO3uC,KAAKlG,MAAM,SAAU+8B,GAC5C,OAAOA,EAAKltB,2BACX,SAAUO,GACX,MAAM,IAAI7D,MAAM,4BAA8B6D,EAAG2sB,KAAK1sB,SAAW,yBAEnE,OAAID,EAAWyrB,EAAIpqB,UAAUrB,EAAG2qC,YAAY3vC,WACrCywB,EAAImf,aAw+BXhzC,MAnpDF,SAAenG,EAAGC,GAChB,OAAO,IAAI,GAAMD,EAAGC,GAAG2P,UAAUzR,KAAK+6C,YAAY3vC,YAmpDlDhF,IA1pCF,WACE,OAAO,IAAIgpC,GAAOpvC,KAAK+8B,KAAKl5B,WA0pC5Bk3C,UAxpCF,WAKE,GAA2B,mBAAhB/6C,KAAKs+B,SAA0Bt+B,KAAKs+B,SAAU,CACvD,IAAIvpB,EAAO/U,KAAK+U,KAAK,EAAG,GACpB2gB,EAAI3gB,EAAKgoB,KAAK5xB,eAElB,OADA4J,EAAK4pB,SACE,IAAIyQ,GAAO1Z,GAGpB,OAAO,IAAI0Z,GAAOpvC,KAAK+8B,KAAK5xB,mBA8oC9BmyB,GAAS,GAAS,WAElB,IAAI2d,GAAQ,CACV5D,OAAQ,CAAC,QAAS,QAAS,UAAW,UAAW,WAAY,aAAc,YAAa,cACxFD,KAAM,CAAC,QAAS,UAAW,QAC3BplC,OAAQ,SAAgB0wB,EAAGz+B,GACzB,MAAa,UAANA,EAAgBy+B,EAAIA,EAAI,IAAMz+B,IAIzC,CAAC,OAAQ,UAAU4gB,SAAQ,SAAU6Q,GACnC,IACI5rB,EADAoxC,EAAY,GAGhBA,EAAUxlB,GAAK,SAAU/hB,GACvB,QAAiB,IAANA,EACT,OAAO3T,KAAKg+B,KAAKtI,GAGnB,GAAiB,iBAAN/hB,GAAkBA,aAAaq0B,IAASA,GAAM5G,MAAMztB,IAAMA,aAAa,GAChF3T,KAAKg+B,KAAKtI,EAAG/hB,QAGb,IAAK7J,EAAImxC,GAAMvlB,GAAG7rB,OAAS,EAAGC,GAAK,EAAGA,IACd,MAAlB6J,EAAEsnC,GAAMvlB,GAAG5rB,KACb9J,KAAKg+B,KAAKid,GAAMjpC,OAAO0jB,EAAGulB,GAAMvlB,GAAG5rB,IAAK6J,EAAEsnC,GAAMvlB,GAAG5rB,KAKzD,OAAO9J,MAGTy1B,GAAgB,CAAC,UAAW,UAAWylB,MAEzCzlB,GAAgB,CAAC,UAAW,UAAW,CAErClkB,OAAQ,SAAgB4pC,EAAKl2C,EAAGC,EAAGhB,EAAGC,EAAGC,GAEvC,OAAW,MAAP+2C,EACK,IAAI/L,GAAOpvC,MAIbA,KAAKg+B,KAAK,YAAa,IAAIoR,GAAO+L,EAAKl2C,EAAGC,EAAGhB,EAAGC,EAAGC,KAG5DktC,OAAQ,SAAgB8J,EAAO3J,EAAIC,GACjC,OAAO1xC,KAAKyR,UAAU,CACpB6/B,OAAQ8J,EACRpf,GAAIyV,EACJxV,GAAIyV,IACH,IAGLsB,KAAM,SAAcnxC,EAAGC,EAAG2vC,EAAIC,GAC5B,OAA4B,IAArB98B,UAAU/K,QAAqC,IAArB+K,UAAU/K,OAAe7J,KAAKyR,UAAU,CACvEuhC,KAAMnxC,EACNm6B,GAAIl6B,EACJm6B,GAAIwV,IACH,GAAQzxC,KAAKyR,UAAU,CACxBuhC,KAAM,CAACnxC,EAAGC,GACVk6B,GAAIyV,EACJxV,GAAIyV,IACH,IAELlB,MAAO,SAAea,EAAKI,EAAIC,GAC7B,OAAO1xC,KAAKyR,UAAU,CACpB++B,MAAOa,EACPrV,GAAIyV,EACJxV,GAAIyV,IACH,IAGL7sC,MAAO,SAAehD,EAAGC,EAAG2vC,EAAIC,GAC9B,OAA4B,IAArB98B,UAAU/K,QAAqC,IAArB+K,UAAU/K,OAAe7J,KAAKyR,UAAU,CACvE5M,MAAOhD,EACPm6B,GAAIl6B,EACJm6B,GAAIwV,IACH,GAAQzxC,KAAKyR,UAAU,CACxB5M,MAAO,CAAChD,EAAGC,GACXk6B,GAAIyV,EACJxV,GAAIyV,IACH,IAGL3lC,UAAW,SAAmBlK,EAAGC,GAC/B,OAAO9B,KAAKyR,UAAU,CACpB1F,UAAW,CAAClK,EAAGC,KACd,IAGL4xC,SAAU,SAAkB7xC,EAAGC,GAC7B,OAAO9B,KAAKyR,UAAU,CACpBiiC,SAAU,CAAC7xC,EAAGC,KACb,IAGLuxC,KAAM,SAAcgI,EAAW3I,GAC7B,IAAI4I,EAAuC,iBAAdD,EAAyBA,GAAYjnC,SAASinC,GAAa,QACpFnf,EAAuB,SAAdmf,GAAwBjnC,SAASs+B,GAAU,CAACA,EAAQA,GAAwB,MAAd2I,EAAoB,CAAC3I,EAAQ,GAAmB,MAAd2I,EAAoB,CAAC,EAAG3I,GAAUt+B,SAASinC,GAAa,CAACA,EAAWA,GAAa,CAAC,EAAG,GAClM,OAAOr7C,KAAKyR,UAAU,CACpB4hC,KAAMiI,EACNpf,OAAQA,IACP,IAGLob,QAAS,SAAiB1/B,GACxB,OAAO5X,KAAKg+B,KAAK,UAAWpmB,MAGhC6d,GAAgB,SAAU,CAExB8lB,OAAQ,SAAgB15C,EAAGC,GACzB,IAAI4Q,GAAQ1S,KAAKw7C,UAAYx7C,MAAM0S,KACnC,MAAgB,mBAATA,GAAsC,mBAATA,EAA4B1S,KAAKg+B,KAAK,IAAK,IAAI2Z,GAAU91C,IAAM7B,KAAK85B,GAAGj4B,GAAGkuC,GAAQ,MAALjuC,EAAYD,EAAIC,MAGrI2zB,GAAgB,OAAQ,CAEtB5rB,OAAQ,WACN,OAAO7J,KAAK+8B,KAAK0e,kBAGnBC,QAAS,SAAiB7xC,GACxB,OAAO,IAAI,GAAM7J,KAAK+8B,KAAK4e,iBAAiB9xC,OAGhD4rB,GAAgB,CAAC,UAAW,UAAW,CAErCmmB,KAAM,SAAc33C,EAAGjB,GACrB,GAAmB,WAAf+e,GAAQ9d,GAAiB,CAC3B,IAAKjB,KAAKiB,EACRjE,KAAK47C,KAAK54C,EAAGiB,EAAEjB,IAGjB,OAAOhD,KAGT,MAAa,YAANiE,EAAkBjE,KAAK6V,QAAQ7S,GAAW,WAANiB,EAAiBjE,KAAKg+B,KAAK,cAAeh7B,GAAW,SAANiB,GAAsB,WAANA,GAAwB,WAANA,GAAwB,YAANA,GAAyB,YAANA,GAAyB,UAANA,EAAgBjE,KAAKg+B,KAAK,QAAU/5B,EAAGjB,GAAKhD,KAAKg+B,KAAK/5B,EAAGjB,MAGjPyyB,GAAgB,OAAQ,CACtBomB,GAAI,SAAYh6C,GACd,OAAO7B,KAAKg+B,KAAK,IAAKn8B,IAExBi6C,GAAI,SAAYh6C,GACd,OAAO9B,KAAKg+B,KAAK,IAAKl8B,IAExBi6C,MAAO,SAAel6C,EAAGC,GACvB,OAAO9B,KAAK67C,GAAGh6C,GAAGi6C,GAAGh6C,MAmBzB2zB,GAAgB,UAfA,CAAC,QAAS,WAAY,YAAa,UAAW,YAAa,WAAY,YAAa,aAAc,aAAc,aAAc,YAAa,aAAc,WAAY,eAAekO,QAAO,SAAUtS,EAAMrnB,GAazN,OADAqnB,EAAKrnB,GAVI,SAAY5F,GAOnB,OANU,OAANA,EACFmG,GAAIvK,KAAMgK,GAEVK,GAAGrK,KAAMgK,EAAO5F,GAGXpE,MAIFqxB,IACN,KAGH,IAAI2qB,GAAgB,GAAGC,QACnBC,GAAS,CAAC,EAAG,GAMjB19B,GAAQ,CAAE1R,OAAQ,QAAS6T,OAAO,EAAM3B,OAAQ3K,OAAO6nC,MAAY7nC,OAAO6nC,GAAOD,YAAc,CAC7FA,QAAS,WAGP,OADI/8B,GAAQlf,QAAOA,KAAK6J,OAAS7J,KAAK6J,QAC/BmyC,GAAc91C,KAAKlG,SAM9Bwe,GAAQ,CAAE1R,OAAQ,SAAUiS,MAAM,EAAMC,QAAShI,EAAaiI,MAAOjI,GAAe,CAClFmL,iBAAkBD,KAKpB1D,GAAQ,CAAE1R,OAAQ,SAAUiS,MAAM,EAAMC,QAAShI,EAAaiI,MAAOjI,GAAe,CAClFC,eAAgBoC,EAAqBjV,IAGvC,IAAI+3C,GAAmCnjC,EAA+B5U,EAGlEg4C,GAAwBvlC,GAAM,WAAcslC,GAAiC,MA6BjF,SAASE,GAAgBx6B,EAAKnJ,EAAKd,GAYjC,OAXIc,KAAOmJ,EACT7N,OAAOiD,eAAe4K,EAAKnJ,EAAK,CAC9Bd,MAAOA,EACPH,YAAY,EACZI,cAAc,EACdC,UAAU,IAGZ+J,EAAInJ,GAAOd,EAGNiK,EAGT,SAASy6B,GAAU9iC,EAAQ+iC,GAAkB,IAAI/hC,EAAOxG,OAAOwG,KAAKhB,GAAS,GAAIxF,OAAO0J,sBAAuB,CAAE,IAAIgd,EAAU1mB,OAAO0J,sBAAsBlE,GAAa+iC,IAAgB7hB,EAAUA,EAAQ33B,QAAO,SAAU2kB,GAAO,OAAO1T,OAAOoD,yBAAyBoC,EAAQkO,GAAKjQ,eAAgB+C,EAAKpL,KAAKuF,MAAM6F,EAAMkgB,GAAY,OAAOlgB,EAkEhV,SAASsf,GAAGA,GACV,OAAO95B,KAAKg+B,KAAK,KAAMlE,GAGzB,SAASiW,GAAGA,GACV,OAAO/vC,KAAKg+B,KAAK,KAAM+R,GAGzB,SAASluC,GAAEA,GACT,OAAY,MAALA,EAAY7B,KAAKyxC,KAAOzxC,KAAK85B,KAAO95B,KAAKyxC,GAAG5vC,EAAI7B,KAAK85B,MAG9D,SAASh4B,GAAEA,GACT,OAAY,MAALA,EAAY9B,KAAK0xC,KAAO1xC,KAAK+vC,KAAO/vC,KAAK0xC,GAAG5vC,EAAI9B,KAAK+vC,MAG9D,SAAS0B,GAAG5vC,GACV,OAAY,MAALA,EAAY7B,KAAKg+B,KAAK,MAAQh+B,KAAKg+B,KAAK,KAAMn8B,GAGvD,SAAS6vC,GAAG5vC,GACV,OAAY,MAALA,EAAY9B,KAAKg+B,KAAK,MAAQh+B,KAAKg+B,KAAK,KAAMl8B,GAGvD,SAAShC,GAAMA,GACb,OAAgB,MAATA,EAA4B,EAAZE,KAAK85B,KAAW95B,KAAK85B,GAAG,IAAI6d,GAAU73C,GAAO08C,OAAO,IAG7E,SAASz8C,GAAOA,GACd,OAAiB,MAAVA,EAA6B,EAAZC,KAAK+vC,KAAW/vC,KAAK+vC,GAAG,IAAI4H,GAAU53C,GAAQy8C,OAAO,IAtI/Eh+B,GAAQ,CAAE1R,OAAQ,SAAUiS,MAAM,EAAMC,QAJxBhI,GAAeolC,GAI2Bn9B,MAAOjI,GAAe,CAC9EI,yBAA0B,SAAkCV,EAAIgC,GAC9D,OAAOyjC,GAAiChkC,EAAgBzB,GAAKgC,MAMjE8F,GAAQ,CAAE1R,OAAQ,SAAUiS,MAAM,EAAME,MAAOjI,GAAe,CAC5DylC,0BAA2B,SAAmCjjC,GAO5D,IANA,IAKId,EAAKlB,EALLyB,EAAId,EAAgBqB,GACpBpC,EAA2B4B,EAA+B5U,EAC1DoW,EAAOmD,GAAQ1E,GACflQ,EAAS,GACT2T,EAAQ,EAELlC,EAAK3Q,OAAS6S,QAEArJ,KADnBmE,EAAaJ,EAAyB6B,EAAGP,EAAM8B,EAAKkC,QACtB0C,GAAerW,EAAQ2P,EAAKlB,GAE5D,OAAOzO,KA6EX0sB,GAAgB,UAAW,CACzBinB,YAvDF,WACE,OAAO18C,KAAKg+B,KAAK,YAAa,OAuD9ByR,UApDF,WAgBE,OAfczvC,KAAKg+B,KAAK,cAAgB,IACxCl7B,MAAMm+B,IAAY/wB,MAAM,GAAI,GAAGjN,KAAI,SAAUq0B,GAE3C,IAAIqlB,EAAKrlB,EAAI6D,OAAOr4B,MAAM,KAC1B,MAAO,CAAC65C,EAAG,GAAIA,EAAG,GAAG75C,MAAMy+B,IAAWt+B,KAAI,SAAUq0B,GAClD,OAAOp0B,WAAWo0B,UAEnB2kB,UACFtY,QAAO,SAAUpyB,EAAQE,GACxB,MAAqB,WAAjBA,EAAU,GACLF,EAAOqrC,UAAUxN,GAAOI,UAAU/9B,EAAU,KAG9CF,EAAOE,EAAU,IAAIkD,MAAMpD,EAAQE,EAAU,MACnD,IAAI29B,KAsCPyN,SAlCF,SAAkB3e,GAChB,GAAIl+B,OAASk+B,EAAQ,OAAOl+B,KAC5B,IAAIoG,EAAMpG,KAAK+6C,YACX+B,EAAO5e,EAAO6c,YAAY3vC,UAE9B,OADApL,KAAKg0C,MAAM9V,GAAQwe,cAAcjrC,UAAUqrC,EAAK9wC,SAAS5F,IAClDpG,MA8BP+8C,OA3BF,WACE,OAAO/8C,KAAK68C,SAAS78C,KAAKxB,SA2B1BiT,UAxBF,SAAmBkC,EAAG+/B,GAEpB,GAAS,MAAL//B,GAA0B,iBAANA,EAAgB,CACtC,IAAIqpC,EAAa,IAAI5N,GAAOpvC,MAAMi9C,YAClC,OAAY,MAALtpC,EAAYqpC,EAAaA,EAAWrpC,GAGxCy7B,GAAOC,aAAa17B,KAEvBA,EA9CJ,SAAuB7G,GAAU,IAAK,IAAIhD,EAAI,EAAGA,EAAI8K,UAAU/K,OAAQC,IAAK,CAAE,IAAI2J,EAAyB,MAAhBmB,UAAU9K,GAAa8K,UAAU9K,GAAK,GAAQA,EAAI,EAAKwyC,GAAU7oC,GAAQ,GAAMoR,SAAQ,SAAUnM,GAAO2jC,GAAgBvvC,EAAQ4L,EAAKjF,EAAOiF,OAAsB1E,OAAOyoC,0BAA6BzoC,OAAOmO,iBAAiBrV,EAAQkH,OAAOyoC,0BAA0BhpC,IAAmB6oC,GAAU7oC,GAAQoR,SAAQ,SAAUnM,GAAO1E,OAAOiD,eAAenK,EAAQ4L,EAAK1E,OAAOoD,yBAAyB3D,EAAQiF,OAAe,OAAO5L,EA8CzfowC,CAAc,GAAIvpC,EAAG,CACvBuoB,OAAQH,GAAUpoB,EAAG3T,SAKzB,IACI+I,EAAS,IAAIqmC,IADgB,IAAbsE,EAAoB1zC,KAAO0zC,IAAY,GACpBjiC,UAAUkC,GACjD,OAAO3T,KAAKg+B,KAAK,YAAaj1B,MA0ChC,IAAIo0C,GAAU,CACbvzB,UAAW,KACXkQ,GAAIA,GACJiW,GAAIA,GACJluC,EAAGA,GACHC,EAAGA,GACH2vC,GAAIA,GACJC,GAAIA,GACJ5xC,MAAOA,GACPC,OAAQA,IAGLq9C,GAEJ,SAAUC,GAGR,SAASD,IAGP,OAFAzgB,GAAgB38B,KAAMo9C,GAEfpQ,GAA2BhtC,KAAMitC,GAAgBmQ,GAAOzoC,MAAM3U,KAAM4U,YAG7E,OARA64B,GAAU2P,EAAOC,GAQVD,EATT,CAUE,IACF9f,GAAS8f,GAAO,SAEhB,IAAIE,GAEJ,SAAUC,GAGR,SAASD,EAAOvgB,GAGd,OAFAJ,GAAgB38B,KAAMs9C,GAEftQ,GAA2BhtC,KAAMitC,GAAgBqQ,GAAQp3C,KAAKlG,KAAMk9B,GAAU,SAAUH,GAAOA,IA2BxG,OAhCA0Q,GAAU6P,EAAQC,GAQlBzW,GAAawW,EAAQ,CAAC,CACpB5kC,IAAK,SACLd,MAAO,SAAgBorB,GACrB,OAAOhjC,KAAKg+B,KAAK,IAAKgF,KAGvB,CACDtqB,IAAK,KACLd,MAAO,SAAY4lC,GACjB,OAAOx9C,KAAKg+B,KAAK,IAAKwf,KAGvB,CACD9kC,IAAK,KACLd,MAAO,SAAY6lC,GACjB,OAAOz9C,KAAK85B,GAAG2jB,KAEhB,CACD/kC,IAAK,OACLd,MAAO,SAAc8lC,GACnB,OAAO19C,KAAKu7C,OAAO,IAAI5D,GAAU+F,GAAOlB,OAAO,QAI5Cc,EAjCT,CAkCEF,IACFz5C,GAAO25C,GAAQ,CACbz7C,EAAGA,GACHC,EAAGA,GACH2vC,GAAIA,GACJC,GAAIA,GACJ5xC,MAAOA,GACPC,OAAQA,KAEV01B,GAAgB,CACdkoB,UAAW,CAETC,OAAQ/f,IAAkB,SAAUvM,GAClC,OAAOtxB,KAAKk4C,IAAI,IAAIoF,IAAUhsB,KAAKA,GAAMusB,KAAK,EAAG,SAIvDvgB,GAASggB,GAAQ,UAEjB,IAAIK,GAEJ,SAAUN,GAGR,SAASM,IAGP,OAFAhhB,GAAgB38B,KAAM29C,GAEf3Q,GAA2BhtC,KAAMitC,GAAgB0Q,GAAWhpC,MAAM3U,KAAM4U,YA0BjF,OA/BA64B,GAAUkQ,EAAWN,GAQrBvW,GAAa6W,EAAW,CAAC,CACvBjlC,IAAK,UACLd,MAAO,SAAiBsmB,GAOtB,OANAl+B,KAAK81C,MAAK,WACR,OAAI91C,gBAAgB29C,EAAkB39C,KAAK89C,QAAQ5f,GAAQ6f,QAAQ7f,GAC5Dl+B,KAAK68C,SAAS3e,MAGvBl+B,KAAK+8B,KAAK0c,mBAAqBz5C,KAAK2+B,SAC7B3+B,OAER,CACD0Y,IAAK,UACLd,MAAO,SAAiBsmB,GAMtB,OALAA,EAASA,GAAUl+B,KAAKk+B,SACxBl+B,KAAK81C,MAAK,WACR,OAAO91C,KAAK68C,SAAS3e,MAEvBl+B,KAAK2+B,SACE3+B,SAIJ29C,EAhCT,CAiCE,IACFrgB,GAASqgB,GAAW,aAEpB,IAAIK,GAEJ,SAAUC,GAGR,SAASD,EAAKjhB,GAGZ,OAFAJ,GAAgB38B,KAAMg+C,GAEfhR,GAA2BhtC,KAAMitC,GAAgB+Q,GAAM93C,KAAKlG,KAAMk9B,GAAU,OAAQH,GAAOA,IAepG,OApBA0Q,GAAUuQ,EAAMC,GAQhBnX,GAAakX,EAAM,CAAC,CAClBtlC,IAAK,UACLd,MAAO,WACL,OAAO5X,OAER,CACD0Y,IAAK,UACLd,MAAO,WACL,OAAO5X,SAIJg+C,EArBT,CAsBEL,IACFrgB,GAAS0gB,GAAM,QAEf,IAAIE,GAEJ,SAAUX,GAGR,SAASW,EAAQnhB,GAGf,OAFAJ,GAAgB38B,KAAMk+C,GAEflR,GAA2BhtC,KAAMitC,GAAgBiR,GAASh4C,KAAKlG,KAAMk9B,GAAU,UAAWH,GAAOA,IAW1G,OAhBA0Q,GAAUyQ,EAASX,GAQnBzW,GAAaoX,EAAS,CAAC,CACrBxlC,IAAK,OACLd,MAAO,SAAc9X,EAAOC,GAC1B,IAAIq+B,EAAIxC,GAAiB57B,KAAMF,EAAOC,GACtC,OAAOC,KAAK85B,GAAG,IAAI6d,GAAUvZ,EAAEt+B,OAAO08C,OAAO,IAAIzM,GAAG,IAAI4H,GAAUvZ,EAAEr+B,QAAQy8C,OAAO,QAIhF0B,EAjBT,CAkBEd,IACFz5C,GAAOu6C,GAASf,IAChB1nB,GAAgB,YAAa,CAE3B0oB,QAAStgB,IAAkB,WACzB,IAAI/9B,EAAQ8U,UAAU/K,OAAS,QAAsBwJ,IAAjBuB,UAAU,GAAmBA,UAAU,GAAK,EAC5E7U,EAAS6U,UAAU/K,OAAS,QAAsBwJ,IAAjBuB,UAAU,GAAmBA,UAAU,GAAK9U,EACjF,OAAOE,KAAKk4C,IAAI,IAAIgG,IAAW5sB,KAAKxxB,EAAOC,GAAQ89C,KAAK,EAAG,QAG/DvgB,GAAS4gB,GAAS,WAElB,IAAIE,GAEJ,SAAUf,GAGR,SAASe,EAAKrhB,GAGZ,OAFAJ,GAAgB38B,KAAMo+C,GAEfpR,GAA2BhtC,KAAMitC,GAAgBmR,GAAMl4C,KAAKlG,KAAMk9B,GAAU,OAAQH,GAAOA,IAuBpG,OA5BA0Q,GAAU2Q,EAAMf,GAShBvW,GAAasX,EAAM,CAAC,CAClB1lC,IAAK,SACLd,MAAO,SAAgBjE,GAarB,OAZiB,iBAANA,GAAkBA,aAAagkC,MACxChkC,EAAI,CACF4jC,OAAQ3iC,UAAU,GAClB82B,MAAO92B,UAAU,GACjB0iC,QAAS1iC,UAAU,KAKN,MAAbjB,EAAE2jC,SAAiBt3C,KAAKg+B,KAAK,eAAgBrqB,EAAE2jC,SACpC,MAAX3jC,EAAE+3B,OAAe1rC,KAAKg+B,KAAK,aAAcrqB,EAAE+3B,OAC/B,MAAZ/3B,EAAE4jC,QAAgBv3C,KAAKg+B,KAAK,SAAU,IAAI2Z,GAAUhkC,EAAE4jC,SACnDv3C,SAIJo+C,EA7BT,CA8BE,IAGF,SAASjvB,GAAKttB,EAAGC,GACf,MAAwC,oBAAhC9B,KAAKw7C,UAAYx7C,MAAM0S,KAA4B1S,KAAKg+B,KAAK,CACnEqgB,GAAI,IAAI1G,GAAU91C,GAClBy8C,GAAI,IAAI3G,GAAU71C,KACf9B,KAAKg+B,KAAK,CACbugB,GAAI,IAAI5G,GAAU91C,GAClB28C,GAAI,IAAI7G,GAAU71C,KAGtB,SAAS28C,GAAG58C,EAAGC,GACb,MAAwC,oBAAhC9B,KAAKw7C,UAAYx7C,MAAM0S,KAA4B1S,KAAKg+B,KAAK,CACnEyT,GAAI,IAAIkG,GAAU91C,GAClB6vC,GAAI,IAAIiG,GAAU71C,KACf9B,KAAKg+B,KAAK,CACboW,GAAI,IAAIuD,GAAU91C,GAClBwyC,GAAI,IAAIsD,GAAU71C,KAjBtBw7B,GAAS8gB,GAAM,QAqBf,IAAIM,GAAa,CAChB90B,UAAW,KACXuF,KAAMA,GACNsvB,GAAIA,IAGDE,GAEJ,SAAUV,GAGR,SAASU,EAASjsC,EAAM2jC,GAGtB,OAFA1Z,GAAgB38B,KAAM2+C,GAEf3R,GAA2BhtC,KAAMitC,GAAgB0R,GAAUz4C,KAAKlG,KAAMk9B,GAAUxqB,EAAO,WAA4B,iBAATA,EAAoB,KAAOA,GAAO2jC,IAqDrJ,OA1DA5I,GAAUkR,EAAUV,GASpBnX,GAAa6X,EAAU,CAAC,CACtBjmC,IAAK,OACLd,MAAO,SAAc2/B,EAAQ7L,EAAO4L,GAClC,OAAOt3C,KAAKk4C,IAAI,IAAIkG,IAAQQ,OAAOrH,EAAQ7L,EAAO4L,KAGnD,CACD5+B,IAAK,SACLd,MAAO,SAAgByjB,GAQrB,OANAr7B,KAAK0xB,QAEgB,mBAAV2J,GACTA,EAAMn1B,KAAKlG,KAAMA,MAGZA,OAGR,CACD0Y,IAAK,MACLd,MAAO,WACL,MAAO,QAAU5X,KAAKoa,KAAO,MAG9B,CACD1B,IAAK,WACLd,MAAO,WACL,OAAO5X,KAAK6+C,QAGb,CACDnmC,IAAK,OACLd,MAAO,SAAc3T,EAAGgB,EAAGC,GAEzB,MADU,cAANjB,IAAmBA,EAAI,qBACpBipC,GAAKD,GAAgB0R,EAASj9C,WAAY,OAAQ1B,MAAMkG,KAAKlG,KAAMiE,EAAGgB,EAAGC,KAEjF,CACDwT,IAAK,UACLd,MAAO,WACL,OAAOs+B,GAAS,eAAiBl2C,KAAKoa,KAAO,QAE9C,CACD1B,IAAK,OACLd,MAAO,WACL,OAAO,IAAIs8B,OAIRyK,EA3DT,CA4DEhB,IACFh6C,GAAOg7C,GAAUD,IACjBjpB,GAAgB,CACdkoB,UAAW,CAETmB,SAAUjhB,IAAkB,SAAUnrB,EAAM2oB,GAC1C,OAAOr7B,KAAKb,OAAO2/C,SAASpsC,EAAM2oB,OAItC2iB,KAAM,CACJc,SAAUjhB,IAAkB,SAAUnrB,EAAM2oB,GAC1C,OAAOr7B,KAAKk4C,IAAI,IAAIyG,GAASjsC,IAAOksC,OAAOvjB,SAIjDiC,GAASqhB,GAAU,YAEnB,IAAII,GAEJ,SAAUd,GAIR,SAASc,EAAQhiB,GAGf,OAFAJ,GAAgB38B,KAAM++C,GAEf/R,GAA2BhtC,KAAMitC,GAAgB8R,GAAS74C,KAAKlG,KAAMk9B,GAAU,UAAWH,GAAOA,IA+C1G,OArDA0Q,GAAUsR,EAASd,GAUnBnX,GAAaiY,EAAS,CAAC,CACrBrmC,IAAK,MACLd,MAAO,WACL,MAAO,QAAU5X,KAAKoa,KAAO,MAG9B,CACD1B,IAAK,SACLd,MAAO,SAAgByjB,GAQrB,OANAr7B,KAAK0xB,QAEgB,mBAAV2J,GACTA,EAAMn1B,KAAKlG,KAAMA,MAGZA,OAGR,CACD0Y,IAAK,WACLd,MAAO,WACL,OAAO5X,KAAK6+C,QAGb,CACDnmC,IAAK,OACLd,MAAO,SAAc3T,EAAGgB,EAAGC,GAEzB,MADU,cAANjB,IAAmBA,EAAI,oBACpBipC,GAAKD,GAAgB8R,EAAQr9C,WAAY,OAAQ1B,MAAMkG,KAAKlG,KAAMiE,EAAGgB,EAAGC,KAEhF,CACDwT,IAAK,UACLd,MAAO,WACL,OAAOs+B,GAAS,eAAiBl2C,KAAKoa,KAAO,QAE9C,CACD1B,IAAK,OACLd,MAAO,WACL,OAAO,IAAIs8B,OAIR6K,EAtDT,CAuDEpB,IACFloB,GAAgB,CACdkoB,UAAW,CAETqB,QAAS,WACP,IAAIC,EAEJ,OAAQA,EAAaj/C,KAAKb,QAAQ6/C,QAAQrqC,MAAMsqC,EAAYrqC,aAGhEopC,KAAM,CACJgB,QAASnhB,IAAkB,SAAU/9B,EAAOC,EAAQs7B,GAClD,OAAOr7B,KAAKk4C,IAAI,IAAI6G,IAAWH,OAAOvjB,GAAO2C,KAAK,CAChDn8B,EAAG,EACHC,EAAG,EACHhC,MAAOA,EACPC,OAAQA,EACRm/C,aAAc,yBAKtB5hB,GAASyhB,GAAS,WAElB,IA1zC0B7wC,GA0zCtBixC,GAEJ,SAAU5B,GAGR,SAAS4B,EAAMpiB,GAGb,OAFAJ,GAAgB38B,KAAMm/C,GAEfnS,GAA2BhtC,KAAMitC,GAAgBkS,GAAOj5C,KAAKlG,KAAMk9B,GAAU,QAASH,GAAOA,IAmCtG,OAxCA0Q,GAAU0R,EAAO5B,GASjBzW,GAAaqY,EAAO,CAAC,CACnBzmC,IAAK,OACLd,MAAO,SAAcinC,EAAKvsC,GACxB,IAAKusC,EAAK,OAAO7+C,KACjB,IAAIo/C,EAAM,IAAI1iB,GAAQv2B,OAAOg5C,MAuB7B,OAtBA90C,GAAG+0C,EAAK,QAAQ,SAAUj7C,GACxB,IAAIi6B,EAAIp+B,KAAKk+B,OAAO6gB,IAEC,IAAjB/+C,KAAKF,SAAmC,IAAlBE,KAAKD,UAC7BC,KAAKsxB,KAAK8tB,EAAIt/C,MAAOs/C,EAAIr/C,QAGvBq+B,aAAa2gB,IAEG,IAAd3gB,EAAEt+B,SAAgC,IAAfs+B,EAAEr+B,UACvBq+B,EAAE9M,KAAKtxB,KAAKF,QAASE,KAAKD,UAIN,mBAAbuS,GACTA,EAASpM,KAAKlG,KAAMmE,KAErBnE,MACHqK,GAAG+0C,EAAK,cAAc,WAEpB70C,GAAI60C,MAECp/C,KAAKg+B,KAAK,OAAQohB,EAAIx8B,IAAMi8B,EAAKpiB,QAIrC0iB,EAzCT,CA0CE/B,IAt2CwBlvC,GAu2CT,SAAU8vB,EAAMzlB,EAAKk+B,GAcpC,MAZa,SAATzY,GAA4B,WAATA,GACjBsD,GAAQnnB,KAAK5B,KACfA,EAAMk+B,EAAMj4C,OAAOW,OAAOkgD,MAAM9mC,IAIhCA,aAAe4mC,KACjB5mC,EAAMk+B,EAAMj4C,OAAOW,OAAO6/C,QAAQ,EAAG,GAAG,SAAUA,GAChDA,EAAQptB,IAAIrZ,OAITA,GAp3CPu/B,GAAM1oC,KAAKlB,IAs3CbunB,GAAgB,CACdkoB,UAAW,CAET0B,MAAOxhB,IAAkB,SAAUpqB,EAAQnB,GACzC,OAAOtS,KAAKk4C,IAAI,IAAIiH,IAAS7tB,KAAK,EAAG,GAAGguB,KAAK7rC,EAAQnB,SAI3DgrB,GAAS6hB,GAAO,SAEhB,IAAII,GAAa9J,GAAc,aAAc+B,IAC7C7zC,GAAO47C,GAAY,CAEjBtrC,SAAU,WAER,IAAK,IAAInK,EAAI,EAAGwxB,EAAKt7B,KAAK6J,OAAQuW,EAAQ,GAAItW,EAAIwxB,EAAIxxB,IACpDsW,EAAMhR,KAAKpP,KAAK8J,GAAG6G,KAAK,MAG1B,OAAOyP,EAAMzP,KAAK,MAGpB6uC,OAAQ,WACN,MAAO,CACLjB,GAAIv+C,KAAK,GAAG,GACZw+C,GAAIx+C,KAAK,GAAG,GACZo0C,GAAIp0C,KAAK,GAAG,GACZq0C,GAAIr0C,KAAK,GAAG,KAIhBy/C,GAAI,SAAYvtB,GAEd,IAAKlyB,KAAK0/C,YAAa,OAAO1/C,KAE9B,IAAK,IAAI8J,EAAI,EAAGwxB,EAAKt7B,KAAK6J,OAAQuW,EAAQ,GAAItW,EAAIwxB,EAAIxxB,IACpDsW,EAAMhR,KAAK,CAACpP,KAAK8J,GAAG,IAAM9J,KAAK0/C,YAAY51C,GAAG,GAAK9J,KAAK8J,GAAG,IAAMooB,EAAKlyB,KAAK8J,GAAG,IAAM9J,KAAK0/C,YAAY51C,GAAG,GAAK9J,KAAK8J,GAAG,IAAMooB,IAG7H,OAAO,IAAIqtB,GAAWn/B,IAGxB6iB,MAAO,WACL,IAAI7iB,EAAQxL,UAAU/K,OAAS,QAAsBwJ,IAAjBuB,UAAU,GAAmBA,UAAU,GAAK,CAAC,CAAC,EAAG,IACjF+qC,EAAS,GAEb,GAAIv/B,aAAiBnQ,OAEnB,GAAImQ,EAAM,aAAcnQ,MACtB,OAAOmQ,OAKTA,EAAQA,EAAM+a,OAAOr4B,MAAMy+B,IAAWt+B,IAAIC,YAKxCkd,EAAMvW,OAAS,GAAM,GAAGuW,EAAMw/B,MAElC,IAAK,IAAI91C,EAAI,EAAGm7B,EAAM7kB,EAAMvW,OAAQC,EAAIm7B,EAAKn7B,GAAQ,EACnD61C,EAAOvwC,KAAK,CAACgR,EAAMtW,GAAIsW,EAAMtW,EAAI,KAGnC,OAAO61C,GAGTluC,UAAW,SAAmBikB,GAG5B,IAFA,IAAIiqB,EAAS,GAEJ71C,EAAI,EAAGA,EAAI9J,KAAK6J,OAAQC,IAAK,CACpC,IAAI9B,EAAQhI,KAAK8J,GAEjB61C,EAAOvwC,KAAK,CAACsmB,EAAEzxB,EAAI+D,EAAM,GAAK0tB,EAAExwB,EAAI8C,EAAM,GAAK0tB,EAAEvxB,EAAGuxB,EAAEzwB,EAAI+C,EAAM,GAAK0tB,EAAExxB,EAAI8D,EAAM,GAAK0tB,EAAEtxB,IAI1F,OAAO,IAAIm7C,GAAWI,IAGxB9B,KAAM,SAAch8C,EAAGC,GACrB,IAAI+5B,EAAM77B,KAAK87B,OAKf,GAHAj6B,GAAKg6B,EAAIh6B,EACTC,GAAK+5B,EAAI/5B,GAEJqS,MAAMtS,KAAOsS,MAAMrS,GACtB,IAAK,IAAIgI,EAAI9J,KAAK6J,OAAS,EAAGC,GAAK,EAAGA,IACpC9J,KAAK8J,GAAK,CAAC9J,KAAK8J,GAAG,GAAKjI,EAAG7B,KAAK8J,GAAG,GAAKhI,GAI5C,OAAO9B,MAGTsxB,KAAM,SAAcxxB,EAAOC,GACzB,IAAI+J,EACA+xB,EAAM77B,KAAK87B,OAEf,IAAKhyB,EAAI9J,KAAK6J,OAAS,EAAGC,GAAK,EAAGA,IAC5B+xB,EAAI/7B,QAAOE,KAAK8J,GAAG,IAAM9J,KAAK8J,GAAG,GAAK+xB,EAAIh6B,GAAK/B,EAAQ+7B,EAAI/7B,MAAQ+7B,EAAIh6B,GACvEg6B,EAAI97B,SAAQC,KAAK8J,GAAG,IAAM9J,KAAK8J,GAAG,GAAK+xB,EAAI/5B,GAAK/B,EAAS87B,EAAI97B,OAAS87B,EAAI/5B,GAGhF,OAAO9B,MAGT87B,KAAM,WACJ,IAAI+jB,GAAO,IACPC,GAAO,IACPC,EAAOxL,IACPyL,EAAOzL,IAOX,OANAv0C,KAAK6kB,SAAQ,SAAUzU,GACrByvC,EAAO18C,KAAKa,IAAIoM,EAAG,GAAIyvC,GACvBC,EAAO38C,KAAKa,IAAIoM,EAAG,GAAI0vC,GACvBC,EAAO58C,KAAKC,IAAIgN,EAAG,GAAI2vC,GACvBC,EAAO78C,KAAKC,IAAIgN,EAAG,GAAI4vC,MAElB,CACLn+C,EAAGk+C,EACHj+C,EAAGk+C,EACHlgD,MAAO+/C,EAAOE,EACdhgD,OAAQ+/C,EAAOE,MAyBrB,IAAIC,GAAU,CACbr2B,UAAW,KACXs2B,WAtBgBX,GAuBhB19C,EArBD,SAAaA,GACX,OAAY,MAALA,EAAY7B,KAAK87B,OAAOj6B,EAAI7B,KAAK69C,KAAKh8C,EAAG7B,KAAK87B,OAAOh6B,IAqB7DA,EAlBD,SAAaA,GACX,OAAY,MAALA,EAAY9B,KAAK87B,OAAOh6B,EAAI9B,KAAK69C,KAAK79C,KAAK87B,OAAOj6B,EAAGC,IAkB7DhC,MAfD,SAAiBA,GACf,IAAImF,EAAIjF,KAAK87B,OACb,OAAgB,MAATh8B,EAAgBmF,EAAEnF,MAAQE,KAAKsxB,KAAKxxB,EAAOmF,EAAElF,SAcrDA,OAXD,SAAkBA,GAChB,IAAIkF,EAAIjF,KAAK87B,OACb,OAAiB,MAAV/7B,EAAiBkF,EAAElF,OAASC,KAAKsxB,KAAKrsB,EAAEnF,MAAOC,KAYpDogD,GAEJ,SAAU5C,GAIR,SAAS4C,EAAKpjB,GAGZ,OAFAJ,GAAgB38B,KAAMmgD,GAEfnT,GAA2BhtC,KAAMitC,GAAgBkT,GAAMj6C,KAAKlG,KAAMk9B,GAAU,OAAQH,GAAOA,IA2CpG,OAjDA0Q,GAAU0S,EAAM5C,GAUhBzW,GAAaqZ,EAAM,CAAC,CAClBznC,IAAK,QACLd,MAAO,WACL,OAAO,IAAI2nC,GAAW,CAAC,CAACv/C,KAAKg+B,KAAK,MAAOh+B,KAAKg+B,KAAK,OAAQ,CAACh+B,KAAKg+B,KAAK,MAAOh+B,KAAKg+B,KAAK,WAGxF,CACDtlB,IAAK,OACLd,MAAO,SAAc2mC,EAAIC,EAAIpK,EAAIC,GAC/B,OAAU,MAANkK,EACKv+C,KAAKogB,SAEZm+B,OADuB,IAAPC,EACX,CACHD,GAAIA,EACJC,GAAIA,EACJpK,GAAIA,EACJC,GAAIA,GAGD,IAAIkL,GAAWhB,GAAIiB,SAGnBx/C,KAAKg+B,KAAKugB,MAGlB,CACD7lC,IAAK,OACLd,MAAO,SAAc/V,EAAGC,GACtB,OAAO9B,KAAKg+B,KAAKh+B,KAAKogB,QAAQy9B,KAAKh8C,EAAGC,GAAG09C,YAG1C,CACD9mC,IAAK,OACLd,MAAO,SAAc9X,EAAOC,GAC1B,IAAIq+B,EAAIxC,GAAiB57B,KAAMF,EAAOC,GACtC,OAAOC,KAAKg+B,KAAKh+B,KAAKogB,QAAQkR,KAAK8M,EAAEt+B,MAAOs+B,EAAEr+B,QAAQy/C,cAInDW,EAlDT,CAmDE/C,IACFz5C,GAAOw8C,GAAMF,IACbxqB,GAAgB,CACdkoB,UAAW,CAETyC,KAAMviB,IAAkB,WACtB,IAAK,IAAIC,EAAOlpB,UAAU/K,OAAQ6L,EAAO,IAAIzF,MAAM6tB,GAAOC,EAAO,EAAGA,EAAOD,EAAMC,IAC/EroB,EAAKqoB,GAAQnpB,UAAUmpB,GAKzB,OAAOoiB,GAAKz+C,UAAU2+C,KAAK1rC,MAAM3U,KAAKk4C,IAAI,IAAIiI,IAAoB,MAAXzqC,EAAK,GAAaA,EAAO,CAAC,EAAG,EAAG,EAAG,UAIhG4nB,GAAS6iB,GAAM,QAEf,IAAIG,GAEJ,SAAUrC,GAIR,SAASqC,EAAOvjB,GAGd,OAFAJ,GAAgB38B,KAAMsgD,GAEftT,GAA2BhtC,KAAMitC,GAAgBqT,GAAQp6C,KAAKlG,KAAMk9B,GAAU,SAAUH,GAAOA,IA0CxG,OAhDA0Q,GAAU6S,EAAQrC,GAUlBnX,GAAawZ,EAAQ,CAAC,CACpB5nC,IAAK,QACLd,MAAO,SAAegjC,GACpB,OAAO56C,KAAKg+B,KAAK,cAAe4c,KAGjC,CACDliC,IAAK,SACLd,MAAO,SAAgB6iC,GACrB,OAAOz6C,KAAKg+B,KAAK,eAAgByc,KAGlC,CACD/hC,IAAK,MACLd,MAAO,SAAa/V,EAAGC,GACrB,OAAO9B,KAAKg+B,KAAK,OAAQn8B,GAAGm8B,KAAK,OAAQl8B,KAG1C,CACD4W,IAAK,SACLd,MAAO,SAAgByjB,GAQrB,OANAr7B,KAAK0xB,QAEgB,mBAAV2J,GACTA,EAAMn1B,KAAKlG,KAAMA,MAGZA,OAGR,CACD0Y,IAAK,WACLd,MAAO,WACL,MAAO,QAAU5X,KAAKoa,KAAO,QAI1BkmC,EAjDT,CAkDE3C,IACFloB,GAAgB,CACdkoB,UAAW,CACT4C,OAAQ,WACN,IAAItB,EAGJ,OAAQA,EAAaj/C,KAAKb,QAAQohD,OAAO5rC,MAAMsqC,EAAYrqC,aAG/DopC,KAAM,CAEJuC,OAAQ1iB,IAAkB,SAAU/9B,EAAOC,EAAQs7B,GAEjD,OAAOr7B,KAAKk4C,IAAI,IAAIoI,IAAUhvB,KAAKxxB,EAAOC,GAAQygD,IAAI1gD,EAAQ,EAAGC,EAAS,GAAGi1C,QAAQ,EAAG,EAAGl1C,EAAOC,GAAQi+B,KAAK,SAAU,QAAQ4gB,OAAOvjB,OAG5IklB,OAAQ,CAENA,OAAQ,SAAgBE,EAAS3gD,EAAOC,EAAQs7B,GAC9C,IAAI2C,EAAO,CAAC,UAMZ,MAJgB,QAAZyiB,GAAmBziB,EAAK5uB,KAAKqxC,GACjCziB,EAAOA,EAAKrtB,KAAK,KAEjB8vC,EAAU7rC,UAAU,aAAc0rC,GAAS1rC,UAAU,GAAK5U,KAAKb,OAAOohD,OAAOzgD,EAAOC,EAAQs7B,GACrFr7B,KAAKg+B,KAAKA,EAAMyiB,OAI7BnjB,GAASgjB,GAAQ,UAEjB,IAAII,GAAa,GAAGC,KAChBC,GAAS,CAAC,EAAG,EAAG,GAGhBC,GAAqBhqC,GAAM,WAC7B+pC,GAAOD,UAAKttC,MAGVytC,GAAgBjqC,GAAM,WACxB+pC,GAAOD,KAAK,SAGVI,GAAkBhiB,GAAkB,QAoBxC,SAASiiB,GAAiBjgC,EAAG3c,GAC3B,OAAO,SAAUpB,GACf,OAAS,MAALA,EAAkBhD,KAAKgD,IAC3BhD,KAAK+gB,GAAK/d,EACNoB,GAAGA,EAAE8B,KAAKlG,MACPA,OAnBXwe,GAAQ,CAAE1R,OAAQ,QAAS6T,OAAO,EAAM3B,OAJzB6hC,KAAuBC,IAAiBC,IAIK,CAC1DJ,KAAM,SAAcM,GAClB,YAAqB5tC,IAAd4tC,EACHP,GAAWx6C,KAAK8b,GAAShiB,OACzB0gD,GAAWx6C,KAAK8b,GAAShiB,MAAO4jB,GAAYq9B,OAmBpD,IAAIC,GAAS,CACX,IAAK,SAAWhvB,GACd,OAAOA,GAET,KAAM,SAAWA,GACf,OAAQ/uB,KAAK6lC,IAAI9W,EAAM/uB,KAAKq4B,IAAM,EAAI,IAExC,IAAK,SAAWtJ,GACd,OAAO/uB,KAAK8lC,IAAI/W,EAAM/uB,KAAKq4B,GAAK,IAElC,IAAK,SAAWtJ,GACd,OAAsC,EAA9B/uB,KAAK6lC,IAAI9W,EAAM/uB,KAAKq4B,GAAK,IAEnC2lB,OAAQ,SAAgB5C,EAAIC,EAAIpK,EAAIC,GAElC,OAAO,SAAU3R,GACf,OAAIA,EAAI,EACF6b,EAAK,EACAC,EAAKD,EAAK7b,EACR0R,EAAK,EACPC,EAAKD,EAAK1R,EAEV,EAEAA,EAAI,EACT0R,EAAK,GACC,EAAIC,IAAO,EAAID,GAAM1R,GAAK2R,EAAKD,IAAO,EAAIA,GACzCmK,EAAK,GACN,EAAIC,IAAO,EAAID,GAAM7b,GAAK8b,EAAKD,IAAO,EAAIA,GAE3C,EAGF,EAAI7b,EAAIv/B,KAAKqI,IAAI,EAAIk3B,EAAG,GAAK8b,EAAK,EAAIr7C,KAAKqI,IAAIk3B,EAAG,IAAM,EAAIA,GAAK2R,EAAKlxC,KAAKqI,IAAIk3B,EAAG,KAK/F0e,MAAO,SAAeC,GACpB,IAAIC,EAAe1sC,UAAU/K,OAAS,QAAsBwJ,IAAjBuB,UAAU,GAAmBA,UAAU,GAAK,MAEvF0sC,EAAeA,EAAax+C,MAAM,KAAKm5C,UAAU,GACjD,IAAIsF,EAAQF,EASZ,MAPqB,SAAjBC,IACAC,EACwB,SAAjBD,KACPC,EAIG,SAAU7e,GACf,IAAI8e,EAAa5sC,UAAU/K,OAAS,QAAsBwJ,IAAjBuB,UAAU,IAAmBA,UAAU,GAE5E+Z,EAAOxrB,KAAK8S,MAAMysB,EAAI2e,GACtBI,EAAU/e,EAAI/T,EAAO,GAAM,EAkB/B,MAhBqB,UAAjB2yB,GAA6C,SAAjBA,KAC5B3yB,EAGA6yB,GAAcC,KACd9yB,EAGA+T,GAAK,GAAK/T,EAAO,IACnBA,EAAO,GAGL+T,GAAK,GAAK/T,EAAO4yB,IACnB5yB,EAAO4yB,GAGF5yB,EAAO4yB,KAIhBG,GAEJ,WACE,SAASA,IACP/kB,GAAgB38B,KAAM0hD,GAUxB,OAPA5a,GAAa4a,EAAS,CAAC,CACrBhpC,IAAK,OACLd,MAAO,WACL,OAAO,MAIJ8pC,EAZT,GAmBIC,GAEJ,SAAUC,GAGR,SAASD,EAAKzzC,GACZ,IAAIuoC,EAMJ,OAJA9Z,GAAgB38B,KAAM2hD,IAEtBlL,EAAQzJ,GAA2BhtC,KAAMitC,GAAgB0U,GAAMz7C,KAAKlG,QAC9D6hD,KAAOX,GAAOhzC,GAAMipC,KAAkBjpC,EACrCuoC,EAcT,OAvBAhJ,GAAUkU,EAAMC,GAYhB9a,GAAa6a,EAAM,CAAC,CAClBjpC,IAAK,OACLd,MAAO,SAAcuX,EAAMsvB,EAAIvsB,GAC7B,MAAoB,iBAAT/C,EACF+C,EAAM,EAAI/C,EAAOsvB,EAGnBtvB,GAAQsvB,EAAKtvB,GAAQnvB,KAAK6hD,KAAK3vB,OAInCyvB,EAxBT,CAyBED,IAMEI,GAEJ,SAAUC,GAGR,SAASD,EAAW5zC,GAClB,IAAI+pC,EAMJ,OAJAtb,GAAgB38B,KAAM8hD,IAEtB7J,EAASjL,GAA2BhtC,KAAMitC,GAAgB6U,GAAY57C,KAAKlG,QACpEgiD,QAAU9zC,EACV+pC,EAeT,OAxBAxK,GAAUqU,EAAYC,GAYtBjb,GAAagb,EAAY,CAAC,CACxBppC,IAAK,OACLd,MAAO,SAAc2hC,EAASzsC,EAAQm1C,EAAI/8C,GACxC,OAAOlF,KAAKgiD,QAAQzI,EAASzsC,EAAQm1C,EAAI/8C,KAE1C,CACDwT,IAAK,OACLd,MAAO,SAAc1S,GACnB,OAAOA,EAAE4mB,SAINg2B,EAzBT,CA0BEJ,IAEF,SAASQ,KAEP,IAAIC,GAAYniD,KAAKoiD,WAAa,KAAO,IACrCC,EAAYriD,KAAKsiD,YAAc,EAG/Bx0C,EAAK3K,KAAKq4B,GACV+mB,EAAKp/C,KAAK8H,IAAIo3C,EAAY,IAFpB,OAGNG,GAAQD,EAAKp/C,KAAKmS,KAAKxH,EAAKA,EAAKy0C,EAAKA,GACtCE,EAAK,KAAOD,EAAOL,GAEvBniD,KAAKkE,EAAI,EAAIs+C,EAAOC,EACpBziD,KAAK+gB,EAAI0hC,EAAKA,EA4ChB9+C,GAvCA,SAAU++C,GAGR,SAASC,EAAOR,EAAUE,GACxB,IAAIO,EAQJ,OANAjmB,GAAgB38B,KAAM2iD,IAEtBC,EAAS5V,GAA2BhtC,KAAMitC,GAAgB0V,GAAQz8C,KAAKlG,QAEhEmiD,SAASA,GAAY,KAAKE,UAAUA,GAAa,GAEjDO,EAyBT,OApCAnV,GAAUkV,EAAQD,GAclB5b,GAAa6b,EAAQ,CAAC,CACpBjqC,IAAK,OACLd,MAAO,SAAc2hC,EAASzsC,EAAQm1C,EAAI/8C,GACxC,GAAuB,iBAAZq0C,EAAsB,OAAOA,EAExC,GADAr0C,EAAE4mB,KAAOm2B,IAAO1N,IACZ0N,IAAO1N,IAAU,OAAOznC,EAC5B,GAAW,IAAPm1C,EAAU,OAAO1I,EACjB0I,EAAK,MAAKA,EAAK,IACnBA,GAAM,IAEN,IAAIY,EAAW39C,EAAE29C,UAAY,EAEzBC,GAAgB9iD,KAAKkE,EAAI2+C,EAAW7iD,KAAK+gB,GAAKw4B,EAAUzsC,GACxDi2C,EAAcxJ,EAAUsJ,EAAWZ,EAAKa,EAAeb,EAAKA,EAAK,EAKrE,OAHA/8C,EAAE29C,SAAWA,EAAWC,EAAeb,EAEvC/8C,EAAE4mB,KAAO3oB,KAAK6H,IAAI8B,EAASi2C,GAAe5/C,KAAK6H,IAAI63C,GAAY,KACxD39C,EAAE4mB,KAAOhf,EAASi2C,MAItBJ,EArCT,CAsCEb,IACa,CACbK,SAAUnB,GAAiB,YAAakB,IACxCG,UAAWrB,GAAiB,aAAckB,MAgD5Cv+C,GA5CA,SAAUq/C,GAGR,SAASC,EAAI7kB,EAAGt0B,EAAG5F,EAAGg/C,GACpB,IAAIC,EAYJ,OAVAxmB,GAAgB38B,KAAMijD,GAGtB7kB,EAAS,MAALA,EAAY,GAAMA,EACtBt0B,EAAS,MAALA,EAAY,IAAOA,EACvB5F,EAAS,MAALA,EAAY,EAAIA,EACpBg/C,EAAmB,MAAVA,EAAiB,IAAOA,GAJjCC,EAASnW,GAA2BhtC,KAAMitC,GAAgBgW,GAAK/8C,KAAKlG,QAM7Do+B,EAAEA,GAAGt0B,EAAEA,GAAG5F,EAAEA,GAAGg/C,OAAOA,GAEtBC,EA0BT,OAzCA1V,GAAUwV,EAAKD,GAkBflc,GAAamc,EAAK,CAAC,CACjBvqC,IAAK,OACLd,MAAO,SAAc2hC,EAASzsC,EAAQm1C,EAAI/8C,GACxC,GAAuB,iBAAZq0C,EAAsB,OAAOA,EAExC,GADAr0C,EAAE4mB,KAAOm2B,IAAO1N,IACZ0N,IAAO1N,IAAU,OAAOznC,EAC5B,GAAW,IAAPm1C,EAAU,OAAO1I,EACrB,IAAInb,EAAItxB,EAASysC,EACbzvC,GAAK5E,EAAEk+C,UAAY,GAAKhlB,EAAI6jB,EAC5B/9C,GAAKk6B,GAAKl5B,EAAE6R,OAAS,IAAMkrC,EAC3BiB,EAASljD,KAAKkjD,OASlB,OAPe,IAAXA,IACFp5C,EAAI3G,KAAKa,KAAKk/C,EAAQ//C,KAAKC,IAAI0G,EAAGo5C,KAGpCh+C,EAAE6R,MAAQqnB,EACVl5B,EAAEk+C,SAAWt5C,EACb5E,EAAE4mB,KAAO3oB,KAAK6H,IAAIozB,GAAK,KAChBl5B,EAAE4mB,KAAOhf,EAASysC,GAAWv5C,KAAKkZ,EAAIklB,EAAIp+B,KAAKqjD,EAAIv5C,EAAI9J,KAAKsjD,EAAIp/C,OAIpE++C,EA1CT,CA2CEnB,IACU,CACVoB,OAAQlC,GAAiB,UACzB5iB,EAAG4iB,GAAiB,KACpBl3C,EAAGk3C,GAAiB,KACpB98C,EAAG88C,GAAiB,OAGtB,IAAIuC,GAAY9N,GAAc,YAAa+B,IAC3C,SAASgM,GAAev/C,EAAGgB,EAAGC,EAAGhB,GAC/B,OAAOgB,EAAIhB,EAAEsM,QAAQoxB,GAAM,MA2F7B,IApDA,IAAI6hB,GAAe,CACjBC,EAAG,SAAWx+C,EAAGk5B,EAAGulB,GAGlB,OAFAvlB,EAAEv8B,EAAI8hD,EAAG9hD,EAAIqD,EAAE,GACfk5B,EAAEt8B,EAAI6hD,EAAG7hD,EAAIoD,EAAE,GACR,CAAC,IAAKk5B,EAAEv8B,EAAGu8B,EAAEt8B,IAEtB8hD,EAAG,SAAW1+C,EAAGk5B,GAGf,OAFAA,EAAEv8B,EAAIqD,EAAE,GACRk5B,EAAEt8B,EAAIoD,EAAE,GACD,CAAC,IAAKA,EAAE,GAAIA,EAAE,KAEvB2+C,EAAG,SAAW3+C,EAAGk5B,GAEf,OADAA,EAAEv8B,EAAIqD,EAAE,GACD,CAAC,IAAKA,EAAE,KAEjBqS,EAAG,SAAWrS,EAAGk5B,GAEf,OADAA,EAAEt8B,EAAIoD,EAAE,GACD,CAAC,IAAKA,EAAE,KAEjB+e,EAAG,SAAW/e,EAAGk5B,GAGf,OAFAA,EAAEv8B,EAAIqD,EAAE,GACRk5B,EAAEt8B,EAAIoD,EAAE,GACD,CAAC,IAAKA,EAAE,GAAIA,EAAE,GAAIA,EAAE,GAAIA,EAAE,GAAIA,EAAE,GAAIA,EAAE,KAE/CunB,EAAG,SAAWvnB,EAAGk5B,GAGf,OAFAA,EAAEv8B,EAAIqD,EAAE,GACRk5B,EAAEt8B,EAAIoD,EAAE,GACD,CAAC,IAAKA,EAAE,GAAIA,EAAE,GAAIA,EAAE,GAAIA,EAAE,KAEnC4+C,EAAG,SAAW5+C,EAAGk5B,GAGf,OAFAA,EAAEv8B,EAAIqD,EAAE,GACRk5B,EAAEt8B,EAAIoD,EAAE,GACD,CAAC,IAAKA,EAAE,GAAIA,EAAE,GAAIA,EAAE,GAAIA,EAAE,KAEnCqnB,EAAG,SAAWrnB,EAAGk5B,GAGf,OAFAA,EAAEv8B,EAAIqD,EAAE,GACRk5B,EAAEt8B,EAAIoD,EAAE,GACD,CAAC,IAAKA,EAAE,GAAIA,EAAE,KAEvB6+C,EAAG,SAAW7+C,EAAGk5B,EAAGulB,GAGlB,OAFAvlB,EAAEv8B,EAAI8hD,EAAG9hD,EACTu8B,EAAEt8B,EAAI6hD,EAAG7hD,EACF,CAAC,MAEVqqB,EAAG,SAAWjnB,EAAGk5B,GAGf,OAFAA,EAAEv8B,EAAIqD,EAAE,GACRk5B,EAAEt8B,EAAIoD,EAAE,GACD,CAAC,IAAKA,EAAE,GAAIA,EAAE,GAAIA,EAAE,GAAIA,EAAE,GAAIA,EAAE,GAAIA,EAAE,GAAIA,EAAE,MAGnD8+C,GAAa,aAAalhD,MAAM,IAE3BgH,GAAI,EAAGwxB,GAAK0oB,GAAWn6C,OAAQC,GAAIwxB,KAAMxxB,GAChD25C,GAAaO,GAAWl6C,KAAM,SAAUA,GACtC,OAAO,SAAU5E,EAAGk5B,EAAGulB,GACrB,GAAU,MAAN75C,EAAW5E,EAAE,GAAKA,EAAE,GAAKk5B,EAAEv8B,OAAO,GAAU,MAANiI,EAAW5E,EAAE,GAAKA,EAAE,GAAKk5B,EAAEt8B,OAAO,GAAU,MAANgI,EAC9E5E,EAAE,GAAKA,EAAE,GAAKk5B,EAAEv8B,EAChBqD,EAAE,GAAKA,EAAE,GAAKk5B,EAAEt8B,OAEhB,IAAK,IAAI4qB,EAAI,EAAGu3B,EAAK/+C,EAAE2E,OAAQ6iB,EAAIu3B,IAAMv3B,EACvCxnB,EAAEwnB,GAAKxnB,EAAEwnB,IAAMA,EAAI,EAAI0R,EAAEt8B,EAAIs8B,EAAEv8B,GAGnC,OAAO4hD,GAAa35C,GAAG5E,EAAGk5B,EAAGulB,IAVH,CAY5BK,GAAWl6C,IAAG4xB,eAGlB/3B,GAAO4/C,GAAW,CAEhBtvC,SAAU,WACR,OA3GJ,SAAuBhQ,GACrB,IAAK,IAAI6F,EAAI,EAAGwxB,EAAKr3B,EAAE4F,OAAQ2H,EAAI,GAAI1H,EAAIwxB,EAAIxxB,IAC7C0H,GAAKvN,EAAE6F,GAAG,GAEK,MAAX7F,EAAE6F,GAAG,KACP0H,GAAKvN,EAAE6F,GAAG,GAEK,MAAX7F,EAAE6F,GAAG,KACP0H,GAAK,IACLA,GAAKvN,EAAE6F,GAAG,GAEK,MAAX7F,EAAE6F,GAAG,KACP0H,GAAK,IACLA,GAAKvN,EAAE6F,GAAG,GACV0H,GAAK,IACLA,GAAKvN,EAAE6F,GAAG,GAEK,MAAX7F,EAAE6F,GAAG,KACP0H,GAAK,IACLA,GAAKvN,EAAE6F,GAAG,GACV0H,GAAK,IACLA,GAAKvN,EAAE6F,GAAG,GAEK,MAAX7F,EAAE6F,GAAG,KACP0H,GAAK,IACLA,GAAKvN,EAAE6F,GAAG,QAQtB,OAAO0H,EAAI,IA0EF0yC,CAAclkD,OAGvB69C,KAAM,SAAch8C,EAAGC,GAErB,IAAI+5B,EAAM77B,KAAK87B,OAKf,GAHAj6B,GAAKg6B,EAAIh6B,EACTC,GAAK+5B,EAAI/5B,GAEJqS,MAAMtS,KAAOsS,MAAMrS,GAEtB,IAAK,IAAIsiC,EAAGt6B,EAAI9J,KAAK6J,OAAS,EAAGC,GAAK,EAAGA,IAG7B,OAFVs6B,EAAIpkC,KAAK8J,GAAG,KAEW,MAANs6B,GAAmB,MAANA,GAC5BpkC,KAAK8J,GAAG,IAAMjI,EACd7B,KAAK8J,GAAG,IAAMhI,GACC,MAANsiC,EACTpkC,KAAK8J,GAAG,IAAMjI,EACC,MAANuiC,EACTpkC,KAAK8J,GAAG,IAAMhI,EACC,MAANsiC,GAAmB,MAANA,GAAmB,MAANA,GACnCpkC,KAAK8J,GAAG,IAAMjI,EACd7B,KAAK8J,GAAG,IAAMhI,EACd9B,KAAK8J,GAAG,IAAMjI,EACd7B,KAAK8J,GAAG,IAAMhI,EAEJ,MAANsiC,IACFpkC,KAAK8J,GAAG,IAAMjI,EACd7B,KAAK8J,GAAG,IAAMhI,IAED,MAANsiC,IACTpkC,KAAK8J,GAAG,IAAMjI,EACd7B,KAAK8J,GAAG,IAAMhI,GAKpB,OAAO9B,MAGTsxB,KAAM,SAAcxxB,EAAOC,GAEzB,IACI+J,EAAGs6B,EADHvI,EAAM77B,KAAK87B,OAOf,IAHAD,EAAI/7B,MAAsB,IAAd+7B,EAAI/7B,MAAc,EAAI+7B,EAAI/7B,MACtC+7B,EAAI97B,OAAwB,IAAf87B,EAAI97B,OAAe,EAAI87B,EAAI97B,OAEnC+J,EAAI9J,KAAK6J,OAAS,EAAGC,GAAK,EAAGA,IAGtB,OAFVs6B,EAAIpkC,KAAK8J,GAAG,KAEW,MAANs6B,GAAmB,MAANA,GAC5BpkC,KAAK8J,GAAG,IAAM9J,KAAK8J,GAAG,GAAK+xB,EAAIh6B,GAAK/B,EAAQ+7B,EAAI/7B,MAAQ+7B,EAAIh6B,EAC5D7B,KAAK8J,GAAG,IAAM9J,KAAK8J,GAAG,GAAK+xB,EAAI/5B,GAAK/B,EAAS87B,EAAI97B,OAAS87B,EAAI/5B,GAC/C,MAANsiC,EACTpkC,KAAK8J,GAAG,IAAM9J,KAAK8J,GAAG,GAAK+xB,EAAIh6B,GAAK/B,EAAQ+7B,EAAI/7B,MAAQ+7B,EAAIh6B,EAC7C,MAANuiC,EACTpkC,KAAK8J,GAAG,IAAM9J,KAAK8J,GAAG,GAAK+xB,EAAI/5B,GAAK/B,EAAS87B,EAAI97B,OAAS87B,EAAI/5B,EAC/C,MAANsiC,GAAmB,MAANA,GAAmB,MAANA,GACnCpkC,KAAK8J,GAAG,IAAM9J,KAAK8J,GAAG,GAAK+xB,EAAIh6B,GAAK/B,EAAQ+7B,EAAI/7B,MAAQ+7B,EAAIh6B,EAC5D7B,KAAK8J,GAAG,IAAM9J,KAAK8J,GAAG,GAAK+xB,EAAI/5B,GAAK/B,EAAS87B,EAAI97B,OAAS87B,EAAI/5B,EAC9D9B,KAAK8J,GAAG,IAAM9J,KAAK8J,GAAG,GAAK+xB,EAAIh6B,GAAK/B,EAAQ+7B,EAAI/7B,MAAQ+7B,EAAIh6B,EAC5D7B,KAAK8J,GAAG,IAAM9J,KAAK8J,GAAG,GAAK+xB,EAAI/5B,GAAK/B,EAAS87B,EAAI97B,OAAS87B,EAAI/5B,EAEpD,MAANsiC,IACFpkC,KAAK8J,GAAG,IAAM9J,KAAK8J,GAAG,GAAK+xB,EAAIh6B,GAAK/B,EAAQ+7B,EAAI/7B,MAAQ+7B,EAAIh6B,EAC5D7B,KAAK8J,GAAG,IAAM9J,KAAK8J,GAAG,GAAK+xB,EAAI/5B,GAAK/B,EAAS87B,EAAI97B,OAAS87B,EAAI/5B,IAEjD,MAANsiC,IAETpkC,KAAK8J,GAAG,GAAK9J,KAAK8J,GAAG,GAAKhK,EAAQ+7B,EAAI/7B,MACtCE,KAAK8J,GAAG,GAAK9J,KAAK8J,GAAG,GAAK/J,EAAS87B,EAAI97B,OAEvCC,KAAK8J,GAAG,IAAM9J,KAAK8J,GAAG,GAAK+xB,EAAIh6B,GAAK/B,EAAQ+7B,EAAI/7B,MAAQ+7B,EAAIh6B,EAC5D7B,KAAK8J,GAAG,IAAM9J,KAAK8J,GAAG,GAAK+xB,EAAI/5B,GAAK/B,EAAS87B,EAAI97B,OAAS87B,EAAI/5B,GAIlE,OAAO9B,MAGTmkD,cAAe,SAAuBC,GACpC,IAAIt6C,EAAGwxB,EAAI6oB,EAIX,IAHAC,EAAY,IAAIb,GAAUa,GAC1BD,EAAgBnkD,KAAK6J,SAAWu6C,EAAUv6C,OAErCC,EAAI,EAAGwxB,EAAKt7B,KAAK6J,OAAQs6C,GAAiBr6C,EAAIwxB,EAAIxxB,IACrDq6C,EAAgBnkD,KAAK8J,GAAG,KAAOs6C,EAAUt6C,GAAG,GAG9C,OAAOq6C,GAGTE,MAAO,SAAeD,GASpB,OARAA,EAAY,IAAIb,GAAUa,GAEtBpkD,KAAKmkD,cAAcC,GACrBpkD,KAAK0/C,YAAc0E,EAEnBpkD,KAAK0/C,YAAc,KAGd1/C,MAGTy/C,GAAI,SAAYvtB,GAEd,IAAKlyB,KAAK0/C,YAAa,OAAO1/C,KAC9B,IAII8J,EAAGwxB,EAAI5O,EAAGu3B,EAJVK,EAActkD,KACdukD,EAAmBvkD,KAAK0/C,YAAY9nC,MACpCwI,EAAQ,GACRgkC,EAAY,IAAIb,GAIpB,IAAKz5C,EAAI,EAAGwxB,EAAKgpB,EAAYz6C,OAAQC,EAAIwxB,EAAIxxB,IAAK,CAGhD,IAFAsW,EAAMtW,GAAK,CAACw6C,EAAYx6C,GAAG,IAEtB4iB,EAAI,EAAGu3B,EAAKK,EAAYx6C,GAAGD,OAAQ6iB,EAAIu3B,EAAIv3B,IAC9CtM,EAAMtW,GAAG4iB,GAAK43B,EAAYx6C,GAAG4iB,IAAM63B,EAAiBz6C,GAAG4iB,GAAK43B,EAAYx6C,GAAG4iB,IAAMwF,EAQ/D,MAAhB9R,EAAMtW,GAAG,KACXsW,EAAMtW,GAAG,KAAuB,IAAhBsW,EAAMtW,GAAG,IACzBsW,EAAMtW,GAAG,KAAuB,IAAhBsW,EAAMtW,GAAG,KAM7B,OADAs6C,EAAUxsC,MAAQwI,EACXgkC,GAGTnhB,MAAO,WACL,IAIIzxB,EAJA4O,EAAQxL,UAAU/K,OAAS,QAAsBwJ,IAAjBuB,UAAU,GAAmBA,UAAU,GAAK,CAAC,CAAC,IAAK,EAAG,IAE1F,GAAIwL,aAAiBmjC,GAAW,OAAOnjC,EAGvC,IAAIokC,EAAW,CACbd,EAAG,EACHE,EAAG,EACHC,EAAG,EACHtsC,EAAG,EACH0M,EAAG,EACHwI,EAAG,EACHq3B,EAAG,EACHv3B,EAAG,EACHJ,EAAG,EACH43B,EAAG,GAIH3jC,EADmB,iBAAVA,EACDA,EAAM5P,QAAQmxB,GAAiB6hB,IACtChzC,QAAQixB,GAAa,QACrBjxB,QAAQgxB,GAAQ,QAChBrG,OACAr4B,MAAMy+B,IAECnhB,EAAMujB,QAAO,SAAUhS,EAAMkoB,GACnC,MAAO,GAAGv8B,OAAOpX,KAAKyrB,EAAMkoB,KAC3B,IAIL,IAAI9wC,EAAS,GACTq1B,EAAI,IAAI,GACRulB,EAAK,IAAI,GACTjnC,EAAQ,EACRuoB,EAAM7kB,EAAMvW,OAEhB,GAEM63B,GAAavnB,KAAKiG,EAAM1D,KAC1BlL,EAAI4O,EAAM1D,KACRA,GACa,MAANlL,EACTA,EAAI,IACW,MAANA,IACTA,EAAI,KAGNzI,EAAOqG,KAAKq0C,GAAajyC,GAAGtL,KAAK,KAAMka,EAAMlQ,MAAMwM,EAAOA,GAAgB8nC,EAAShzC,EAAEkqB,gBAAgBz4B,IAAIC,YAAak7B,EAAGulB,UAClH1e,EAAMvoB,GAEf,OAAO3T,GAGT+yB,KAAM,WAEJ,OADA+X,KAAS/3B,KAAKnc,aAAa,IAAKK,KAAKiU,YAC9B4/B,GAAOC,MAAMh4B,KAAKrY,aAI7B,IAAIghD,GAEJ,WACE,SAASA,EAAUzC,GACjBrlB,GAAgB38B,KAAMykD,GAEtBzkD,KAAK0kD,SAAW1C,GAAW,IAAIL,GAAK,KACpC3hD,KAAK2kD,MAAQ,KACb3kD,KAAK4kD,IAAM,KACX5kD,KAAK6kD,MAAQ,KACb7kD,KAAK8kD,SAAW,KAChB9kD,KAAK+kD,UAAY,KAyGnB,OAtGAje,GAAa2d,EAAW,CAAC,CACvB/rC,IAAK,OACLd,MAAO,SAAcW,GACnB,OAAW,MAAPA,EACKvY,KAAK2kD,OAGd3kD,KAAK2kD,MAAQ3kD,KAAKglD,KAAKzsC,GAChBvY,QAER,CACD0Y,IAAK,KACLd,MAAO,SAAYW,GACjB,OAAW,MAAPA,EACKvY,KAAK4kD,KAGd5kD,KAAK4kD,IAAM5kD,KAAKglD,KAAKzsC,GACdvY,QAER,CACD0Y,IAAK,OACLd,MAAO,SAAcitC,GAEnB,OAAa,MAATA,EACK7kD,KAAK6kD,OAId7kD,KAAK6kD,MAAQA,EACN7kD,QAER,CACD0Y,IAAK,OACLd,MAAO,SAAcA,GACnB,IAAK5X,KAAK6kD,MAAO,CACf,IAAInyC,EAAOqP,GAAQnK,GAEN,WAATlF,EACF1S,KAAK0S,KAAKilC,IACQ,WAATjlC,EACLs1B,GAAMgS,QAAQpiC,GAChB5X,KAAK0S,KAAKs1B,IACDzG,GAAUpnB,KAAKvC,GACxB5X,KAAK0S,KAAK+uB,GAAYtnB,KAAKvC,GAAS2rC,GAAY/L,IACvC3W,GAAc1mB,KAAKvC,GAC5B5X,KAAK0S,KAAKilC,IAEV33C,KAAK0S,KAAKuyC,IAEHC,GAAen4C,QAAQ6K,EAAMyI,cAAgB,EACtDrgB,KAAK0S,KAAKkF,EAAMyI,aACPpQ,MAAMiP,QAAQtH,GACvB5X,KAAK0S,KAAK8kC,IACQ,WAAT9kC,EACT1S,KAAK0S,KAAKyyC,IAEVnlD,KAAK0S,KAAKuyC,IAId,IAAIl8C,EAAS,IAAI/I,KAAK6kD,MAAMjtC,GAY5B,OAVI5X,KAAK6kD,QAAU7c,KACjBj/B,EAAS/I,KAAK4kD,IAAM77C,EAAO/I,KAAK4kD,IAAI,MAAQ5kD,KAAK2kD,MAAQ57C,EAAO/I,KAAK2kD,MAAM,MAAQ57C,GAGrFA,EAASA,EAAOitC,UAChBh2C,KAAK+kD,UAAY/kD,KAAK+kD,WAAa,IAAI/kD,KAAK6kD,MAC5C7kD,KAAK8kD,SAAW9kD,KAAK8kD,UAAY70C,MAAM0E,MAAM,KAAM1E,MAAMlH,EAAOc,SAAS5G,IAAI+Q,QAAQ/Q,KAAI,SAAU0Q,GAEjG,OADAA,EAAEmY,MAAO,EACFnY,KAEF5K,IAER,CACD2P,IAAK,UACLd,MAAO,SAAiB8sC,GACtB,OAAgB,MAAZA,EAAyB1kD,KAAK0kD,UAClC1kD,KAAK0kD,SAAWA,EACT1kD,QAER,CACD0Y,IAAK,OACLd,MAAO,WAKL,OAJe5X,KAAK8kD,SAAS7hD,IAAIjD,KAAK0kD,SAAS54B,MAAM6X,QAAO,SAAUtS,EAAMwoB,GAC1E,OAAOxoB,GAAQwoB,KACd,KAIJ,CACDnhC,IAAK,KACLd,MAAO,SAAYsa,GACjB,IAAIukB,EAAQz2C,KAEZ,OAAOA,KAAK+kD,UAAUvV,UAAUxvC,KAAK2kD,MAAM1hD,KAAI,SAAU6G,EAAG4S,GAC1D,OAAO+5B,EAAMiO,SAAS/1B,KAAK7kB,EAAG2sC,EAAMmO,IAAIloC,GAAQwV,EAAKukB,EAAMqO,SAASpoC,GAAQ+5B,EAAMqO,kBAKjFL,EAlHT,GAoHIQ,GAEJ,WACE,SAASA,IACPtoB,GAAgB38B,KAAMilD,GAEtBjlD,KAAKyB,KAAKkT,MAAM3U,KAAM4U,WAsBxB,OAnBAkyB,GAAame,EAAc,CAAC,CAC1BvsC,IAAK,OACLd,MAAO,SAAcW,GAGnB,OAFAA,EAAMtI,MAAMiP,QAAQ3G,GAAOA,EAAI,GAAKA,EACpCvY,KAAK4X,MAAQW,EACNvY,OAER,CACD0Y,IAAK,UACLd,MAAO,WACL,OAAO5X,KAAK4X,QAEb,CACDc,IAAK,UACLd,MAAO,WACL,MAAO,CAAC5X,KAAK4X,WAIVqtC,EA1BT,GA4BIG,GAEJ,WACE,SAASA,IACPzoB,GAAgB38B,KAAMolD,GAEtBplD,KAAKyB,KAAKkT,MAAM3U,KAAM4U,WA8BxB,OA3BAkyB,GAAase,EAAc,CAAC,CAC1B1sC,IAAK,OACLd,MAAO,SAAciK,GAenB,OAdI5R,MAAMiP,QAAQ2C,KAChBA,EAAM,CACJquB,OAAQruB,EAAI,GACZsuB,OAAQtuB,EAAI,GACZ2uB,MAAO3uB,EAAI,GACXyvB,OAAQzvB,EAAI,GACZ0vB,WAAY1vB,EAAI,GAChB2vB,WAAY3vB,EAAI,GAChBovB,QAASpvB,EAAI,GACbqvB,QAASrvB,EAAI,KAIjB7N,OAAOiY,OAAOjsB,KAAMolD,EAAaC,SAAUxjC,GACpC7hB,OAER,CACD0Y,IAAK,UACLd,MAAO,WACL,IAAI5U,EAAIhD,KACR,MAAO,CAACgD,EAAEktC,OAAQltC,EAAEmtC,OAAQntC,EAAEwtC,MAAOxtC,EAAEsuC,OAAQtuC,EAAEuuC,WAAYvuC,EAAEwuC,WAAYxuC,EAAEiuC,QAASjuC,EAAEkuC,aAIrFkU,EAlCT,GAoCAA,GAAaC,SAAW,CACtBnV,OAAQ,EACRC,OAAQ,EACRK,MAAO,EACPc,OAAQ,EACRC,WAAY,EACZC,WAAY,EACZP,QAAS,EACTC,QAAS,GAEX,IAAIiU,GAEJ,WACE,SAASA,IACPxoB,GAAgB38B,KAAMmlD,GAEtBnlD,KAAKyB,KAAKkT,MAAM3U,KAAM4U,WA+CxB,OA5CAkyB,GAAaqe,EAAW,CAAC,CACvBzsC,IAAK,OACLd,MAAO,SAAc0tC,GAGnB,GAFAtlD,KAAKurB,OAAS,IAEVtb,MAAMiP,QAAQomC,GAAlB,CAKAA,EAAWA,GAAY,GACvB,IAAIh6B,EAAU,GAEd,IAAK,IAAIxhB,KAAKw7C,EACZh6B,EAAQlc,KAAK,CAACtF,EAAGw7C,EAASx7C,KAS5B,OANAwhB,EAAQq1B,MAAK,SAAU18C,EAAGgB,GACxB,OAAOhB,EAAE,GAAKgB,EAAE,MAElBjF,KAAKurB,OAASD,EAAQqY,QAAO,SAAUtS,EAAMwoB,GAC3C,OAAOxoB,EAAK/T,OAAOu8B,KAClB,IACI75C,KAjBLA,KAAKurB,OAAS+5B,IAmBjB,CACD5sC,IAAK,UACLd,MAAO,WAIL,IAHA,IAAIiK,EAAM,GACNsT,EAAMn1B,KAAKurB,OAENzhB,EAAI,EAAGm7B,EAAM9P,EAAItrB,OAAQC,EAAIm7B,EAAKn7B,GAAK,EAC9C+X,EAAIsT,EAAIrrB,IAAMqrB,EAAIrrB,EAAI,GAGxB,OAAO+X,IAER,CACDnJ,IAAK,UACLd,MAAO,WACL,OAAO5X,KAAKurB,WAIT45B,EAnDT,GAqDID,GAAiB,CAACD,GAAcG,GAAcD,IAiB9CI,GAEJ,SAAUhI,GAIR,SAASgI,EAAKxoB,GAGZ,OAFAJ,GAAgB38B,KAAMulD,GAEfvY,GAA2BhtC,KAAMitC,GAAgBsY,GAAMr/C,KAAKlG,KAAMk9B,GAAU,OAAQH,GAAOA,IAkEpG,OAxEA0Q,GAAU8X,EAAMhI,GAUhBzW,GAAaye,EAAM,CAAC,CAClB7sC,IAAK,QACLd,MAAO,WACL,OAAO5X,KAAKwlD,SAAWxlD,KAAKwlD,OAAS,IAAIjC,GAAUvjD,KAAKg+B,KAAK,SAG9D,CACDtlB,IAAK,OACLd,MAAO,SAAc1T,GACnB,OAAY,MAALA,EAAYlE,KAAKogB,QAAUpgB,KAAK0xB,QAAQsM,KAAK,IAAkB,iBAAN95B,EAAiBA,EAAIlE,KAAKwlD,OAAS,IAAIjC,GAAUr/C,MAGlH,CACDwU,IAAK,QACLd,MAAO,WAEL,cADO5X,KAAKwlD,OACLxlD,OAGR,CACD0Y,IAAK,OACLd,MAAO,SAAc/V,EAAGC,GACtB,OAAO9B,KAAKg+B,KAAK,IAAKh+B,KAAKogB,QAAQy9B,KAAKh8C,EAAGC,MAG5C,CACD4W,IAAK,IACLd,MAAO,SAAWijC,GAChB,OAAa,MAANA,EAAa76C,KAAK87B,OAAOj6B,EAAI7B,KAAK69C,KAAKhD,EAAI76C,KAAK87B,OAAOh6B,KAG/D,CACD4W,IAAK,IACLd,MAAO,SAAWmyB,GAChB,OAAa,MAANA,EAAa/pC,KAAK87B,OAAOh6B,EAAI9B,KAAK69C,KAAK79C,KAAK87B,OAAOj6B,EAAGkoC,KAG9D,CACDrxB,IAAK,OACLd,MAAO,SAAc9X,EAAOC,GAC1B,IAAIq+B,EAAIxC,GAAiB57B,KAAMF,EAAOC,GACtC,OAAOC,KAAKg+B,KAAK,IAAKh+B,KAAKogB,QAAQkR,KAAK8M,EAAEt+B,MAAOs+B,EAAEr+B,WAGpD,CACD2Y,IAAK,QACLd,MAAO,SAAegjC,GACpB,OAAiB,MAAVA,EAAiB56C,KAAK87B,OAAOh8B,MAAQE,KAAKsxB,KAAKspB,EAAQ56C,KAAK87B,OAAO/7B,UAG3E,CACD2Y,IAAK,SACLd,MAAO,SAAgB6iC,GACrB,OAAkB,MAAXA,EAAkBz6C,KAAK87B,OAAO/7B,OAASC,KAAKsxB,KAAKtxB,KAAK87B,OAAOh8B,MAAO26C,KAE5E,CACD/hC,IAAK,UACLd,MAAO,WACL,OAAOs+B,GAAS,wBAA0Bl2C,KAAKoa,KAAO,UAInDmrC,EAzET,CA0EEnI,IACFmI,GAAK7jD,UAAUw+C,WAAaqD,GAE5B9tB,GAAgB,CACdkoB,UAAW,CAET7hC,KAAM+hB,IAAkB,SAAU35B,GAEhC,OAAOlE,KAAKk4C,IAAI,IAAIqN,IAAQlF,KAAKn8C,GAAK,IAAIq/C,UAIhDjmB,GAASioB,GAAM,QAwBf,IAAIE,GAAO,CACV77B,UAAW,KACXxJ,MAxBD,WACE,OAAOpgB,KAAKwlD,SAAWxlD,KAAKwlD,OAAS,IAAIjG,GAAWv/C,KAAKg+B,KAAK,aAwB/DqiB,KArBD,SAAcjiB,GACZ,OAAY,MAALA,EAAYp+B,KAAKogB,QAAUpgB,KAAK0xB,QAAQsM,KAAK,SAAuB,iBAANI,EAAiBA,EAAIp+B,KAAKwlD,OAAS,IAAIjG,GAAWnhB,KAqBxH1M,MAlBD,WAEE,cADO1xB,KAAKwlD,OACLxlD,MAiBR69C,KAdD,SAAch8C,EAAGC,GACf,OAAO9B,KAAKg+B,KAAK,SAAUh+B,KAAKogB,QAAQy9B,KAAKh8C,EAAGC,KAcjDwvB,KAXD,SAAcxxB,EAAOC,GACnB,IAAIq+B,EAAIxC,GAAiB57B,KAAMF,EAAOC,GACtC,OAAOC,KAAKg+B,KAAK,SAAUh+B,KAAKogB,QAAQkR,KAAK8M,EAAEt+B,MAAOs+B,EAAEr+B,WAYtD2lD,GAEJ,SAAUnI,GAIR,SAASmI,EAAQ3oB,GAGf,OAFAJ,GAAgB38B,KAAM0lD,GAEf1Y,GAA2BhtC,KAAMitC,GAAgByY,GAASx/C,KAAKlG,KAAMk9B,GAAU,UAAWH,GAAOA,IAG1G,OATA0Q,GAAUiY,EAASnI,GASZmI,EAVT,CAWEtI,IACF3nB,GAAgB,CACdkoB,UAAW,CAETgI,QAAS9nB,IAAkB,SAAUO,GAEnC,OAAOp+B,KAAKk4C,IAAI,IAAIwN,IAAWrF,KAAKjiB,GAAK,IAAImhB,UAInD57C,GAAO+hD,GAASzF,IAChBt8C,GAAO+hD,GAASD,IAChBnoB,GAASooB,GAAS,WAElB,IAAIE,GAEJ,SAAUrI,GAIR,SAASqI,EAAS7oB,GAGhB,OAFAJ,GAAgB38B,KAAM4lD,GAEf5Y,GAA2BhtC,KAAMitC,GAAgB2Y,GAAU1/C,KAAKlG,KAAMk9B,GAAU,WAAYH,GAAOA,IAG5G,OATA0Q,GAAUmY,EAAUrI,GASbqI,EAVT,CAWExI,IACF3nB,GAAgB,CACdkoB,UAAW,CAETkI,SAAUhoB,IAAkB,SAAUO,GAEpC,OAAOp+B,KAAKk4C,IAAI,IAAI0N,IAAYvF,KAAKjiB,GAAK,IAAImhB,UAIpD57C,GAAOiiD,GAAU3F,IACjBt8C,GAAOiiD,GAAUH,IACjBnoB,GAASsoB,GAAU,YAEnB,IAAIE,GAEJ,SAAUvI,GAIR,SAASuI,EAAK/oB,GAGZ,OAFAJ,GAAgB38B,KAAM8lD,GAEf9Y,GAA2BhtC,KAAMitC,GAAgB6Y,GAAM5/C,KAAKlG,KAAMk9B,GAAU,OAAQH,GAAOA,IAGpG,OATA0Q,GAAUqY,EAAMvI,GASTuI,EAVT,CAWE1I,IACFz5C,GAAOmiD,GAAM,CACXhsB,GAAIA,GACJiW,GAAIA,KAENta,GAAgB,CACdkoB,UAAW,CAET5oC,KAAM8oB,IAAkB,SAAU/9B,EAAOC,GACvC,OAAOC,KAAKk4C,IAAI,IAAI4N,IAAQx0B,KAAKxxB,EAAOC,SAI9Cu9B,GAASwoB,GAAM,QAEf,IAAIC,GAAQ5iD,KAAKa,IACbgiD,GAAQ7iD,KAAKC,IACb6iD,GAAqB,iBACrBC,GAAkC,kCAKtC1nC,GAAQ,CAAE1R,OAAQ,QAAS6T,OAAO,EAAM3B,QAASkB,GAA6B,WAAa,CACzFhN,OAAQ,SAAgB0N,EAAOulC,GAC7B,IAIIC,EAAaC,EAAmBl6B,EAAGpL,EAAGoO,EAAMsvB,EAJ5CxlC,EAAI+I,GAAShiB,MACbilC,EAAM1oB,GAAStD,EAAEpP,QACjBy8C,EAAc7pC,GAAgBmE,EAAOqkB,GACrCzY,EAAkB5X,UAAU/K,OAWhC,GATwB,IAApB2iB,EACF45B,EAAcC,EAAoB,EACL,IAApB75B,GACT45B,EAAc,EACdC,EAAoBphB,EAAMqhB,IAE1BF,EAAc55B,EAAkB,EAChC65B,EAAoBL,GAAMD,GAAM1pC,GAAU8pC,GAAc,GAAIlhB,EAAMqhB,IAEhErhB,EAAMmhB,EAAcC,EAAoBJ,GAC1C,MAAM/tC,UAAUguC,IAGlB,IADA/5B,EAAIpI,GAAmB9K,EAAGotC,GACrBtlC,EAAI,EAAGA,EAAIslC,EAAmBtlC,KACjCoO,EAAOm3B,EAAcvlC,KACT9H,GAAGmG,GAAe+M,EAAGpL,EAAG9H,EAAEkW,IAGxC,GADAhD,EAAEtiB,OAASw8C,EACPD,EAAcC,EAAmB,CACnC,IAAKtlC,EAAIulC,EAAavlC,EAAIkkB,EAAMohB,EAAmBtlC,IAEjD09B,EAAK19B,EAAIqlC,GADTj3B,EAAOpO,EAAIslC,KAECptC,EAAGA,EAAEwlC,GAAMxlC,EAAEkW,UACblW,EAAEwlC,GAEhB,IAAK19B,EAAIkkB,EAAKlkB,EAAIkkB,EAAMohB,EAAoBD,EAAarlC,WAAY9H,EAAE8H,EAAI,QACtE,GAAIqlC,EAAcC,EACvB,IAAKtlC,EAAIkkB,EAAMohB,EAAmBtlC,EAAIulC,EAAavlC,IAEjD09B,EAAK19B,EAAIqlC,EAAc,GADvBj3B,EAAOpO,EAAIslC,EAAoB,KAEnBptC,EAAGA,EAAEwlC,GAAMxlC,EAAEkW,UACblW,EAAEwlC,GAGlB,IAAK19B,EAAI,EAAGA,EAAIqlC,EAAarlC,IAC3B9H,EAAE8H,EAAIulC,GAAe1xC,UAAUmM,EAAI,GAGrC,OADA9H,EAAEpP,OAASo7B,EAAMohB,EAAoBD,EAC9Bj6B,KAIX,IAAIo6B,GAEJ,WACE,SAASA,IACP5pB,GAAgB38B,KAAMumD,GAEtBvmD,KAAKwmD,OAAS,KACdxmD,KAAKymD,MAAQ,KAgEf,OA7DA3f,GAAayf,EAAO,CAAC,CACnB7tC,IAAK,OACLd,MAAO,SAAcA,GAEnB,IAAI8uC,EAAO9uC,EAAM2S,KAAO3S,EAAQ,CAC9BA,MAAOA,EACP2S,KAAM,KACNoH,KAAM,MAaR,OAVI3xB,KAAKymD,OACPC,EAAK/0B,KAAO3xB,KAAKymD,MACjBzmD,KAAKymD,MAAMl8B,KAAOm8B,EAClB1mD,KAAKymD,MAAQC,IAEb1mD,KAAKymD,MAAQC,EACb1mD,KAAKwmD,OAASE,GAITA,IAER,CACDhuC,IAAK,QACLd,MAAO,WAEL,IAAI+mB,EAAS3+B,KAAKwmD,OAClB,OAAK7nB,GAEL3+B,KAAKwmD,OAAS7nB,EAAOpU,KACjBvqB,KAAKwmD,SAAQxmD,KAAKwmD,OAAO70B,KAAO,MACpC3xB,KAAKymD,MAAQzmD,KAAKwmD,OAASxmD,KAAKymD,MAAQ,KACjC9nB,EAAO/mB,OALM,OAQrB,CACDc,IAAK,QACLd,MAAO,WACL,OAAO5X,KAAKwmD,QAAUxmD,KAAKwmD,OAAO5uC,QAGnC,CACDc,IAAK,OACLd,MAAO,WACL,OAAO5X,KAAKymD,OAASzmD,KAAKymD,MAAM7uC,QAGjC,CACDc,IAAK,SACLd,MAAO,SAAgB8uC,GAEjBA,EAAK/0B,OAAM+0B,EAAK/0B,KAAKpH,KAAOm8B,EAAKn8B,MACjCm8B,EAAKn8B,OAAMm8B,EAAKn8B,KAAKoH,KAAO+0B,EAAK/0B,MACjC+0B,IAAS1mD,KAAKymD,QAAOzmD,KAAKymD,MAAQC,EAAK/0B,MACvC+0B,IAAS1mD,KAAKwmD,SAAQxmD,KAAKwmD,OAASE,EAAKn8B,MAE7Cm8B,EAAK/0B,KAAO,KACZ+0B,EAAKn8B,KAAO,SAITg8B,EArET,GAwEII,GAAW,CACbC,SAAU,KACVC,OAAQ,IAAIN,GACZO,SAAU,IAAIP,GACdQ,WAAY,IAAIR,GAChBS,MAAO,WACL,OAAOtqB,GAAQv2B,OAAO8gD,aAAevqB,GAAQv2B,OAAOqC,MAEtDy4B,WAAY,GACZimB,MAAO,SAAeh5C,GAEpB,IAAI6uB,EAAO4pB,GAASE,OAAOz3C,KAAK,CAC9B+3C,IAAKj5C,IAQP,OAL0B,OAAtBy4C,GAASC,WACXD,GAASC,SAAWlqB,GAAQv2B,OAAOhE,sBAAsBwkD,GAASS,QAI7DrqB,GAETvpB,QAAS,SAAiBtF,EAAIm5C,GAC5BA,EAAQA,GAAS,EAEjB,IAAIC,EAAOX,GAASK,QAAQv+C,MAAQ4+C,EAEhCtqB,EAAO4pB,GAASG,SAAS13C,KAAK,CAChC+3C,IAAKj5C,EACLo5C,KAAMA,IAOR,OAJ0B,OAAtBX,GAASC,WACXD,GAASC,SAAWlqB,GAAQv2B,OAAOhE,sBAAsBwkD,GAASS,QAG7DrqB,GAETwqB,UAAW,SAAmBr5C,GAE5B,IAAI6uB,EAAO4pB,GAASI,WAAW33C,KAAKlB,GAMpC,OAJ0B,OAAtBy4C,GAASC,WACXD,GAASC,SAAWlqB,GAAQv2B,OAAOhE,sBAAsBwkD,GAASS,QAG7DrqB,GAETyqB,YAAa,SAAqBzqB,GACxB,MAARA,GAAgB4pB,GAASE,OAAOloB,OAAO5B,IAEzChnB,aAAc,SAAsBgnB,GAC1B,MAARA,GAAgB4pB,GAASG,SAASnoB,OAAO5B,IAE3C0qB,gBAAiB,SAAyB1qB,GAChC,MAARA,GAAgB4pB,GAASI,WAAWpoB,OAAO5B,IAE7CqqB,MAAO,SAAe3+C,GAMpB,IAHA,IAAIi/C,EAAc,KACdC,EAAchB,GAASG,SAASz1B,QAE7Bq2B,EAAcf,GAASG,SAASc,WAEjCn/C,GAAOi/C,EAAYJ,KACrBI,EAAYP,MAEZR,GAASG,SAAS13C,KAAKs4C,GAIrBA,IAAgBC,KAOtB,IAHA,IAAIE,EAAY,KACZC,EAAYnB,GAASE,OAAOx1B,OAEzBw2B,IAAcC,IAAcD,EAAYlB,GAASE,OAAOe,UAC7DC,EAAUV,IAAI1+C,GAKhB,IAFA,IAAIs/C,EAAgB,KAEbA,EAAgBpB,GAASI,WAAWa,SACzCG,IAIFpB,GAASC,SAAWD,GAASG,SAAS11B,SAAWu1B,GAASE,OAAOz1B,QAAUsL,GAAQv2B,OAAOhE,sBAAsBwkD,GAASS,OAAS,OAIlIY,GAAe,SAAsBC,GACvC,IAAIrnC,EAAQqnC,EAAWrnC,MACnBuhC,EAAW8F,EAAWC,OAAO/F,WAEjC,MAAO,CACLvhC,MAAOA,EACPuhC,SAAUA,EACVthC,IAJQD,EAAQuhC,EAKhB+F,OAAQD,EAAWC,SAInBC,GAAgB,WAClB,IAAIhU,EAAIzX,GAAQv2B,OAChB,OAAQguC,EAAE8S,aAAe9S,EAAE3rC,MAAMC,OAG/B2/C,GAEJ,SAAUpQ,GAIR,SAASoQ,IACP,IAAI3R,EAEA4R,EAAazzC,UAAU/K,OAAS,QAAsBwJ,IAAjBuB,UAAU,GAAmBA,UAAU,GAAKuzC,GAuBrF,OArBAxrB,GAAgB38B,KAAMooD,IAEtB3R,EAAQzJ,GAA2BhtC,KAAMitC,GAAgBmb,GAAUliD,KAAKlG,QAClEsoD,YAAcD,EAEpB5R,EAAM8R,WAAa,EACnB9R,EAAM+R,OAAS,EAEf/R,EAAMgS,SAAW,EAEjBhS,EAAMiS,WAAa,KACnBjS,EAAMkS,SAAU,EAChBlS,EAAMmS,SAAW,GACjBnS,EAAMoS,WAAa,GACnBpS,EAAMqS,eAAiB,EACvBrS,EAAMsS,MAAQ,EACdtS,EAAMuS,gBAAkB,EACxBvS,EAAMwS,cAAgB,EAEtBxS,EAAM3gB,MAAQ2gB,EAAMyS,QAAQ7kB,KAAKyI,GAAuB2J,IAAQ,GAChEA,EAAM0S,eAAiB1S,EAAMyS,QAAQ7kB,KAAKyI,GAAuB2J,IAAQ,GAClEA,EA6ST,OA1UAhJ,GAAU2a,EAAUpQ,GAiCpBlR,GAAashB,EAAU,CAAC,CACtB1vC,IAAK,WACLd,MAAO,SAAkBswC,EAAQb,EAAO+B,GACtC,GAAc,MAAVlB,EACF,OAAOloD,KAAK4oD,SAAS3lD,IAAI+kD,IAM3B,IAAIqB,EAAoB,EACpBC,EAAUtpD,KAAKupD,aAGnB,GAFAlC,EAAQA,GAAS,EAEL,MAAR+B,GAAyB,SAATA,GAA4B,UAATA,EAErCC,EAAoBC,OACf,GAAa,aAATF,GAAgC,UAATA,EAChCC,EAAoBhC,EACpBA,EAAQ,OACH,GAAa,QAAT+B,EACTC,EAAoBrpD,KAAK+oD,UACpB,IAAa,aAATK,EAQT,MAAM,IAAI78C,MAAM,0CAPhB,IAAIi9C,EAAcxpD,KAAK4oD,SAASV,EAAO9tC,IAEnCovC,IACFH,EAAoBG,EAAY5oC,MAAQymC,EACxCA,EAAQ,GAOZa,EAAOuB,aACPvB,EAAO/Q,SAASn3C,MAChB,IAAI0pD,EAAUxB,EAAOwB,UACjBzB,EAAa,CACfyB,QAAqB,OAAZA,EAAmB1pD,KAAKyoD,SAAWiB,EAC5C9oC,MAAOyoC,EAAoBhC,EAC3Ba,OAAQA,GAgBV,OAdAloD,KAAK8oD,cAAgBZ,EAAO9tC,GAE5Bpa,KAAK4oD,SAASx5C,KAAK64C,GAEnBjoD,KAAK4oD,SAASjI,MAAK,SAAU18C,EAAGgB,GAC9B,OAAOhB,EAAE2c,MAAQ3b,EAAE2b,SAGrB5gB,KAAK6oD,WAAa7oD,KAAK4oD,SAAS3lD,KAAI,SAAU0mD,GAC5C,OAAOA,EAAKzB,OAAO9tC,MAGrBpa,KAAK4pD,aAAaC,YAEX7pD,OAGR,CACD0Y,IAAK,aACLd,MAAO,SAAoBswC,GACzB,IAAIxrC,EAAQ1c,KAAK6oD,WAAW97C,QAAQm7C,EAAO9tC,IAE3C,OAAIsC,EAAQ,IAEZ1c,KAAK4oD,SAAS11C,OAAOwJ,EAAO,GAE5B1c,KAAK6oD,WAAW31C,OAAOwJ,EAAO,GAE9BwrC,EAAO/Q,SAAS,OANMn3C,OAUvB,CACD0Y,IAAK,aACLd,MAAO,WACL,IAAIkyC,EAAiB9pD,KAAK4oD,SAAS5oD,KAAK6oD,WAAW97C,QAAQ/M,KAAK8oD,gBAE5DiB,EAAeD,EAAiBA,EAAe5B,OAAO/F,WAAa,EAEvE,OADoB2H,EAAiBA,EAAelpC,MAAQ,GACrCmpC,IAExB,CACDrxC,IAAK,uBACLd,MAAO,WAGL,IAFA,IAAIoyC,EAAc,EAETlgD,EAAI,EAAGA,EAAI9J,KAAK4oD,SAAS/+C,OAAQC,IAAK,CAC7C,IAAIm+C,EAAajoD,KAAK4oD,SAAS9+C,GAC3Bq4C,EAAW8F,EAAaA,EAAWC,OAAO/F,WAAa,EAEvDmH,GADYrB,EAAaA,EAAWrnC,MAAQ,GACtBuhC,EAEtBmH,EAAUU,IACZA,EAAcV,GAIlB,OAAOU,IAGR,CACDtxC,IAAK,aACLd,MAAO,WAKL,OAJK5X,KAAKiqD,WACRjqD,KAAKgpD,gBAAkBhpD,KAAKsoD,eAGvBtoD,OAER,CACD0Y,IAAK,OACLd,MAAO,WAGL,OADA5X,KAAK2oD,SAAU,EACR3oD,KAAK4pD,aAAaC,cAE1B,CACDnxC,IAAK,QACLd,MAAO,WAEL,OADA5X,KAAK2oD,SAAU,EACR3oD,KAAK6pD,cAEb,CACDnxC,IAAK,OACLd,MAAO,WAGL,OADA5X,KAAKsnD,KAAK,GACHtnD,KAAKkqD,UAEb,CACDxxC,IAAK,SACLd,MAAO,WAGL,OADA5X,KAAKsnD,KAAKtnD,KAAKmqD,uBAAyB,GACjCnqD,KAAKkqD,UAEb,CACDxxC,IAAK,QACLd,MAAO,SAAe4wC,GACpB,OAAc,MAAVA,EAAuBxoD,KAAKwoD,QAChCxoD,KAAKwoD,OAASA,EACPxoD,QAER,CACD0Y,IAAK,UACLd,MAAO,SAAiBwyC,GACtB,IAAIC,EAAerqD,KAAKsqD,QACxB,GAAW,MAAPF,EAAa,OAAOpqD,KAAKsqD,OAAOD,GACpC,IAAIE,EAAWpnD,KAAK6H,IAAIq/C,GACxB,OAAOrqD,KAAKsqD,MAAMF,EAAMG,GAAYA,KAErC,CACD7xC,IAAK,OACLd,MAAO,SAAcqqC,GACnB,OAAOjiD,KAAKsnD,KAAKtnD,KAAK+oD,MAAQ9G,KAE/B,CACDvpC,IAAK,OACLd,MAAO,SAAcmxC,GACnB,OAAa,MAATA,EAAsB/oD,KAAK+oD,OAC/B/oD,KAAK+oD,MAAQA,EACN/oD,KAAK6pD,WAAU,MAEvB,CACDnxC,IAAK,UACLd,MAAO,SAAiB4yC,GACtB,OAAmB,MAAfA,EAA4BxqD,KAAKyoD,UACrCzoD,KAAKyoD,SAAW+B,EACTxqD,QAER,CACD0Y,IAAK,SACLd,MAAO,SAAgB1J,GACrB,OAAU,MAANA,EAAmBlO,KAAKsoD,aAC5BtoD,KAAKsoD,YAAcp6C,EACZlO,QAER,CACD0Y,IAAK,UACLd,MAAO,WACL,IAAI6yC,EAAgB71C,UAAU/K,OAAS,QAAsBwJ,IAAjBuB,UAAU,IAAmBA,UAAU,GAG/E0yC,EAAOtnD,KAAKsoD,cAEZoC,EAAWpD,EAAOtnD,KAAKgpD,gBACvByB,IAAeC,EAAW,GAC9B,IAAIC,EAAS3qD,KAAKwoD,OAASkC,GAAY1qD,KAAK+oD,MAAQ/oD,KAAKipD,eACzDjpD,KAAKgpD,gBAAkB1B,EAGlBmD,IAEHzqD,KAAK+oD,OAAS4B,EACd3qD,KAAK+oD,MAAQ/oD,KAAK+oD,MAAQ,EAAI,EAAI/oD,KAAK+oD,OAGzC/oD,KAAKipD,cAAgBjpD,KAAK+oD,MAC1B/oD,KAAK4qD,KAAK,OAAQ5qD,KAAK+oD,OAWvB,IAAK,IAAIhoC,EAAI/gB,KAAK4oD,SAAS/+C,OAAQkX,KAAM,CAEvC,IAAIknC,EAAajoD,KAAK4oD,SAAS7nC,GAC3BmnC,EAASD,EAAWC,OAGpB2C,EAAY7qD,KAAK+oD,MAAQd,EAAWrnC,MAGpCiqC,GAAa,GACf3C,EAAOvnD,QAOX,IAFA,IAAImqD,GAAc,EAEThhD,EAAI,EAAGm7B,EAAMjlC,KAAK4oD,SAAS/+C,OAAQC,EAAIm7B,EAAKn7B,IAAK,CAExD,IAAIihD,EAAe/qD,KAAK4oD,SAAS9+C,GAC7BkhD,EAAUD,EAAa7C,OACvBjG,EAAK0I,EAGLM,EAAajrD,KAAK+oD,MAAQgC,EAAanqC,MAG3C,GAAIqqC,GAAc,EAChBH,GAAc,OAOhB,GALWG,EAAahJ,IAEtBA,EAAKgJ,GAGFD,EAAQf,SAAb,CAGA,IAAIiB,EAAWF,EAAQr8B,KAAKszB,GAAIn2B,KAEhC,GAAKo/B,GAEE,IAA6B,IAAzBH,EAAarB,QAAkB,CAExC,IAAIJ,EAAU0B,EAAQ7I,WAAa6I,EAAQ1D,OAAStnD,KAAK+oD,MAErDO,EAAUyB,EAAarB,QAAU1pD,KAAK+oD,QAExCiC,EAAQvB,eAEN3/C,IACAm7B,SAVJ6lB,GAAc,GAwBlB,OAPIA,KAAiB9qD,KAAKwoD,OAAS,GAAoB,IAAfxoD,KAAK+oD,QAAgB/oD,KAAK6oD,WAAWh/C,QAAU7J,KAAKwoD,OAAS,GAAKxoD,KAAK+oD,MAAQ,EACrH/oD,KAAK6pD,aAEL7pD,KAAKkqD,QACLlqD,KAAK4qD,KAAK,aAGL5qD,OAGR,CACD0Y,IAAK,YACLd,MAAO,WACL,IAAI6yC,EAAgB71C,UAAU/K,OAAS,QAAsBwJ,IAAjBuB,UAAU,IAAmBA,UAAU,GAGnF,OAFA+xC,GAASa,YAAYxnD,KAAK0oD,YAC1B1oD,KAAK0oD,WAAa,KACd+B,EAAsBzqD,KAAKmpD,kBAC3BnpD,KAAK2oD,UACT3oD,KAAK0oD,WAAa/B,GAASO,MAAMlnD,KAAK81B,QADb91B,QAI1B,CACD0Y,IAAK,SACLd,MAAO,WACL,QAAS5X,KAAK0oD,eAIXN,EA3UT,CA4UE7R,IAeF,SAAS4U,GAAU3xC,EAAQ+iC,GAAkB,IAAI/hC,EAAOxG,OAAOwG,KAAKhB,GAAS,GAAIxF,OAAO0J,sBAAuB,CAAE,IAAIgd,EAAU1mB,OAAO0J,sBAAsBlE,GAAa+iC,IAAgB7hB,EAAUA,EAAQ33B,QAAO,SAAU2kB,GAAO,OAAO1T,OAAOoD,yBAAyBoC,EAAQkO,GAAKjQ,eAAgB+C,EAAKpL,KAAKuF,MAAM6F,EAAMkgB,GAAY,OAAOlgB,EAEhV,SAAS4wC,GAAgBt+C,GAAU,IAAK,IAAIhD,EAAI,EAAGA,EAAI8K,UAAU/K,OAAQC,IAAK,CAAE,IAAI2J,EAAyB,MAAhBmB,UAAU9K,GAAa8K,UAAU9K,GAAK,GAAQA,EAAI,EAAKqhD,GAAU13C,GAAQ,GAAMoR,SAAQ,SAAUnM,GAAO2jC,GAAgBvvC,EAAQ4L,EAAKjF,EAAOiF,OAAsB1E,OAAOyoC,0BAA6BzoC,OAAOmO,iBAAiBrV,EAAQkH,OAAOyoC,0BAA0BhpC,IAAmB03C,GAAU13C,GAAQoR,SAAQ,SAAUnM,GAAO1E,OAAOiD,eAAenK,EAAQ4L,EAAK1E,OAAOoD,yBAAyB3D,EAAQiF,OAAe,OAAO5L,EAhBngB2oB,GAAgB,CACd2kB,QAAS,CACPjD,SAAU,SAAkBkU,GAC1B,OAAiB,MAAbA,GACFrrD,KAAKqrD,UAAYrrD,KAAKqrD,WAAa,IAAIjD,GAChCpoD,KAAKqrD,YAEZrrD,KAAKqrD,UAAYA,EACVrrD,UAUf,IAAIsrD,GAEJ,SAAUtT,GAGR,SAASsT,EAAO9pD,GACd,IAAIi1C,EAyCJ,OAvCA9Z,GAAgB38B,KAAMsrD,IAEtB7U,EAAQzJ,GAA2BhtC,KAAMitC,GAAgBqe,GAAQplD,KAAKlG,QAEhEoa,GAAKkxC,EAAOlxC,KAIlB5Y,EAA6B,mBAF7BA,EAAqB,MAAXA,EAAkB21C,GAAoB31C,GAEN,IAAIsgD,GAAWtgD,GAAWA,EAEpEi1C,EAAM+E,SAAW,KACjB/E,EAAM4U,UAAY,KAClB5U,EAAM3qB,MAAO,EACb2qB,EAAM8U,OAAS,GAEf9U,EAAM2L,UAA+B,iBAAZ5gD,GAAwBA,EACjDi1C,EAAM+U,eAAiBhqD,aAAmBsgD,GAC1CrL,EAAMiO,SAAWjO,EAAM+U,eAAiBhqD,EAAU,IAAImgD,GAEtDlL,EAAMgV,SAAW,GAEjBhV,EAAMiV,SAAU,EAChBjV,EAAMsS,MAAQ,EACdtS,EAAMkV,UAAY,EAElBlV,EAAMmV,UAAW,EAEjBnV,EAAMxV,WAAa,IAAImO,GACvBqH,EAAMoV,YAAc,EAEpBpV,EAAMqV,eAAgB,EACtBrV,EAAMsV,UAAW,EACjBtV,EAAMuV,WAAa,EACnBvV,EAAMwV,QAAS,EACfxV,EAAMyV,MAAQ,EACdzV,EAAM0V,OAAS,EACf1V,EAAM2V,SAAW,KAEjB3V,EAAMgS,WAAWhS,EAAM+U,gBAAwB,KACxC/U,EAkcT,OA9eAhJ,GAAU6d,EAAQtT,GAsDlBlR,GAAawkB,EAAQ,CAAC,CACpB5yC,IAAK,UACLd,MAAO,SAAiB4jC,GACtB,OAAgB,MAAZA,EAAyBx7C,KAAKw7C,UAClCx7C,KAAKw7C,SAAWA,EAEhBA,EAAS6Q,iBAEFrsD,QAER,CACD0Y,IAAK,WACLd,MAAO,SAAkByzC,GAEvB,YAAyB,IAAdA,EAAkCrrD,KAAKqrD,WAClDrrD,KAAKqrD,UAAYA,EACVrrD,QAER,CACD0Y,IAAK,UACLd,MAAO,SAAiBuqC,EAAUkF,EAAO+B,GACvC,IAAIz1C,EAAI23C,EAAOgB,SAASnK,EAAUkF,EAAO+B,GACrClB,EAAS,IAAIoD,EAAO33C,EAAEwuC,UAG1B,OAFIniD,KAAKqrD,WAAWnD,EAAO/Q,SAASn3C,KAAKqrD,WACrCrrD,KAAKw7C,UAAU0M,EAAO52C,QAAQtR,KAAKw7C,UAChC0M,EAAOqE,KAAK54C,GAAG64C,SAAS74C,EAAE0zC,MAAO1zC,EAAEy1C,QAE3C,CACD1wC,IAAK,WACLd,MAAO,SAAkBu/B,EAAUkQ,EAAO+B,GASxC,GAPMjS,aAAoBiR,KACxBgB,EAAO/B,EACPA,EAAQlQ,EACRA,EAAWn3C,KAAKm3C,aAIbA,EACH,MAAM5qC,MAAM,+CAKd,OADA4qC,EAASqV,SAASxsD,KAAMqnD,EAAO+B,GACxBppD,OAER,CACD0Y,IAAK,aACLd,MAAO,WACL,IAAIu/B,EAAWn3C,KAAKm3C,WAEpB,OADAA,GAAYA,EAASsS,WAAWzpD,MACzBA,OAER,CACD0Y,IAAK,OACLd,MAAO,SAAc60C,EAAOC,EAAOj3C,GAiBjC,MAfuB,WAAnBsM,GAAQ0qC,KACVC,EAAQD,EAAMC,MACdj3C,EAAOg3C,EAAMh3C,KACbg3C,EAAQA,EAAMA,OAIhBzsD,KAAKmsD,OAASM,GAASlY,IACvBv0C,KAAKisD,OAASS,IAAS,EACvB1sD,KAAKksD,MAAQz2C,GAAQ,GAED,IAAhBzV,KAAKmsD,SACPnsD,KAAKmsD,OAAS5X,KAGTv0C,OAER,CACD0Y,IAAK,QACLd,MAAO,SAAe+0C,GACpB,OAAO3sD,KAAK4sD,QAAQ,EAAGD,KAQxB,CACDj0C,IAAK,QACLd,MAAO,SAAei1C,EAAQC,EAAOC,EAAYC,GAY/C,OAXAhtD,KAAKurD,OAAOn8C,KAAK,CACf69C,YAAaJ,GAAU3V,GACvBgR,OAAQ4E,GAAS5V,GACjBgW,SAAUH,EACVC,YAAaA,EACbG,aAAa,EACbjC,UAAU,IAGGlrD,KAAKm3C,YACRn3C,KAAKm3C,WAAW0S,YACrB7pD,OAER,CACD0Y,IAAK,SACLd,MAAO,SAAgB1J,GACrB,OAAOlO,KAAKotD,MAAM,KAAMl/C,KAEzB,CACDwK,IAAK,QACLd,MAAO,SAAe1J,GACpB,OAAOlO,KAAKqK,GAAG,WAAY6D,KAQ5B,CACDwK,IAAK,OACLd,MAAO,SAAcmxC,GACnB,GAAa,MAATA,EACF,OAAO/oD,KAAK+oD,MAGd,IAAI9G,EAAK8G,EAAQ/oD,KAAK+oD,MAEtB,OADA/oD,KAAK2uB,KAAKszB,GACHjiD,OAER,CACD0Y,IAAK,WACLd,MAAO,WACL,OAAO5X,KAAKmsD,QAAUnsD,KAAKksD,MAAQlsD,KAAKoiD,WAAapiD,KAAKksD,QAE3D,CACDxzC,IAAK,QACLd,MAAO,SAAewmB,GACpB,IAAIivB,EAAertD,KAAKoiD,UAAYpiD,KAAKksD,MAEzC,GAAS,MAAL9tB,EAAW,CACb,IAAIkvB,EAAYnqD,KAAK8S,MAAMjW,KAAK+oD,MAAQsE,GAEpCj7B,GADepyB,KAAK+oD,MAAQuE,EAAYD,GACdrtD,KAAKoiD,UACnC,OAAOj/C,KAAKC,IAAIkqD,EAAYl7B,EAAUpyB,KAAKmsD,QAG7C,IACIoB,EAAUnvB,EAAI,EACdkpB,EAAO+F,EAFClqD,KAAK8S,MAAMmoB,GAEWp+B,KAAKoiD,UAAYmL,EACnD,OAAOvtD,KAAKsnD,KAAKA,KAElB,CACD5uC,IAAK,UACLd,MAAO,SAAiB4yC,GACtB,OAAmB,MAAfA,EAA4BxqD,KAAKyoD,UACrCzoD,KAAKyoD,SAAW+B,EACTxqD,QAER,CACD0Y,IAAK,WACLd,MAAO,SAAkBwmB,GAEvB,IAMIhM,EANAvwB,EAAI7B,KAAK+oD,MACT7kD,EAAIlE,KAAKoiD,UACTjO,EAAIn0C,KAAKksD,MACTxpB,EAAI1iC,KAAKmsD,OACT36C,EAAIxR,KAAKisD,OACTjpB,EAAIhjC,KAAK+rD,SAGb,GAAS,MAAL3tB,EAAW,CAQb,IAAIh6B,EAAI,SAAWvC,GACjB,IAAI2rD,EAAWh8C,EAAIrO,KAAK8S,MAAMpU,GAAK,GAAKsyC,EAAIjwC,KAAOiwC,EAAIjwC,IACnDupD,EAAYD,IAAaxqB,IAAMwqB,GAAYxqB,EAC3C0qB,EAAWvqD,KAAKqI,KAAK,EAAGiiD,IAAc5rD,GAAKsyC,EAAIjwC,IAAMA,EAAIupD,EAE7D,OADctqD,KAAKa,IAAIb,KAAKC,IAAIsqD,EAAU,GAAI,IAK5CpE,EAAU5mB,GAAKyR,EAAIjwC,GAAKiwC,EAE5B,OADA/hB,EAAWvwB,GAAK,EAAIsB,KAAKkkC,MAAMjjC,EAAE,OAASvC,EAAIynD,EAAUllD,EAAEvC,GAAKsB,KAAKkkC,MAAMjjC,EAAEklD,EAAU,OAKxF,IAAIgE,EAAYnqD,KAAK8S,MAAMjW,KAAK2tD,SAC5BC,EAAep8C,GAAK87C,EAAY,GAAM,EAG1C,OADAl7B,EAAWk7B,GADIM,IAAiB5qB,GAAKA,GAAK4qB,EACPxvB,EAAI,EAAIA,GACpCp+B,KAAK2tD,MAAMv7B,KAEnB,CACD1Z,IAAK,WACLd,MAAO,SAAkBwmB,GACvB,OAAS,MAALA,EACKj7B,KAAKC,IAAI,EAAGpD,KAAK+oD,MAAQ/oD,KAAKmiD,YAGhCniD,KAAKsnD,KAAKlpB,EAAIp+B,KAAKmiD,cAE3B,CACDzpC,IAAK,OACLd,MAAO,SAAcqqC,GAEnB,IAAKjiD,KAAK0rD,QAAS,OAAO1rD,KAE1BiiD,EAAW,MAANA,EAAa,GAAKA,EACvBjiD,KAAK+oD,OAAS9G,EACd,IAAI7vB,EAAWpyB,KAAKoyB,WAEhBy7B,EAAU7tD,KAAK8tD,gBAAkB17B,GAAYpyB,KAAK+oD,OAAS,EAC/D/oD,KAAK8tD,cAAgB17B,EAErB,IAAI+vB,EAAWniD,KAAKmiD,WAChB4L,EAAc/tD,KAAK2rD,WAAa,GAAK3rD,KAAK+oD,MAAQ,EAClDiF,EAAehuD,KAAK2rD,UAAYxJ,GAAYniD,KAAK+oD,OAAS5G,EAC9DniD,KAAK2rD,UAAY3rD,KAAK+oD,MAElBgF,GACF/tD,KAAK4qD,KAAK,QAAS5qD,MAMrB,IAAIiuD,EAAcjuD,KAAKwrD,eAKvB,GAJAxrD,KAAK8rB,MAAQmiC,IAAgBD,GAAgBhuD,KAAK+oD,OAAS5G,EAE3DniD,KAAK4rD,UAAW,EAEZiC,GAAWI,EAAa,CAC1BjuD,KAAKkuD,YAAYL,GAGjB7tD,KAAKihC,WAAa,IAAImO,GAEtB,IAAI+e,EAAYnuD,KAAKouD,KAAKH,EAAchM,EAAK7vB,GAE7CpyB,KAAK4qD,KAAK,OAAQ5qD,MAWpB,OANAA,KAAK8rB,KAAO9rB,KAAK8rB,MAAQqiC,GAAaF,EAElCD,GACFhuD,KAAK4qD,KAAK,WAAY5qD,MAGjBA,OAER,CACD0Y,IAAK,QACLd,MAAO,WACL,OAAI5X,KAAK4rD,WACT5rD,KAAKsnD,KAAK,GACVtnD,KAAK4rD,UAAW,GAFU5rD,OAK3B,CACD0Y,IAAK,SACLd,MAAO,WACL,OAAO5X,KAAK2uB,KAAK4lB,OAElB,CACD77B,IAAK,UACLd,MAAO,SAAiBm0C,GAEtB,OADA/rD,KAAK+rD,SAAuB,MAAZA,GAAoB/rD,KAAK+rD,SAAWA,EAC7C/rD,OAER,CACD0Y,IAAK,OACLd,MAAO,SAAc1J,GAEnB,OADAlO,KAAK0kD,SAAW,IAAI/C,GAAKzzC,GAClBlO,OAER,CACD0Y,IAAK,SACLd,MAAO,SAAgB8zC,GACrB,OAAe,MAAXA,EAAwB1rD,KAAK0rD,SACjC1rD,KAAK0rD,QAAUA,EACR1rD,QASR,CACD0Y,IAAK,mBACLd,MAAO,SAA0BuE,EAAQkyC,GAWvC,GAVAruD,KAAKyrD,SAAStvC,GAAU,CACtBkyC,QAASA,EACTC,OAAQtuD,KAAKurD,OAAOvrD,KAAKurD,OAAO1hD,OAAS,IAQvC7J,KAAKwrD,eAAgB,CACvB,IAAIrU,EAAWn3C,KAAKm3C,WACpBA,GAAYA,EAASoX,UAKxB,CACD71C,IAAK,eACLd,MAAO,SAAsBuE,EAAQrP,EAAQ0hD,GAC3C,GAAIxuD,KAAKyrD,SAAStvC,GAAS,CAEzB,IAAKnc,KAAKyrD,SAAStvC,GAAQmyC,OAAOnB,YAAa,CAC7C,IAAIzwC,EAAQ1c,KAAKurD,OAAOx+C,QAAQ/M,KAAKyrD,SAAStvC,GAAQmyC,QAItD,OAFAtuD,KAAKurD,OAAOr4C,OAAOwJ,EAAO,IAEnB,EAKL1c,KAAKyrD,SAAStvC,GAAQmyC,OAAOpB,SAC/BltD,KAAKyrD,SAAStvC,GAAQmyC,OAAOpB,SAASpgD,EAAQ0hD,GAG9CxuD,KAAKyrD,SAAStvC,GAAQkyC,QAAQ5P,GAAG3xC,GAGnC9M,KAAKyrD,SAAStvC,GAAQmyC,OAAOpD,UAAW,EACxC,IAAI/T,EAAWn3C,KAAKm3C,WAEpB,OADAA,GAAYA,EAASoX,QACd,EAGT,OAAO,IAGR,CACD71C,IAAK,cACLd,MAAO,SAAqBi2C,GAE1B,GAAKA,GAAY7tD,KAAKwrD,eAEtB,IAAK,IAAI1hD,EAAI,EAAGm7B,EAAMjlC,KAAKurD,OAAO1hD,OAAQC,EAAIm7B,IAAOn7B,EAAG,CAEtD,IAAIyvC,EAAUv5C,KAAKurD,OAAOzhD,GAEtB2kD,EAAUzuD,KAAKwrD,iBAAmBjS,EAAQ4T,aAAeU,EAC7DA,GAAWtU,EAAQ2R,SAEfuD,GAAWZ,IACbtU,EAAQ0T,YAAY/mD,KAAKlG,MACzBu5C,EAAQ4T,aAAc,MAK3B,CACDz0C,IAAK,OACLd,MAAO,SAAc82C,GAInB,IAFA,IAAIC,GAAc,EAET7kD,EAAI,EAAGm7B,EAAMjlC,KAAKurD,OAAO1hD,OAAQC,EAAIm7B,IAAOn7B,EAAG,CAEtD,IAAIyvC,EAAUv5C,KAAKurD,OAAOzhD,GAGtBqkD,EAAY5U,EAAQ2O,OAAOhiD,KAAKlG,KAAM0uD,GAC1CnV,EAAQ2R,SAAW3R,EAAQ2R,WAA0B,IAAdiD,EACvCQ,EAAcA,GAAepV,EAAQ2R,SAIvC,OAAOyD,IAER,CACDj2C,IAAK,eACLd,MAAO,SAAsBnG,EAAWiL,GAEtC,OADA1c,KAAKihC,WAAW+O,WAAWv+B,GACpBzR,OAER,CACD0Y,IAAK,iBACLd,MAAO,WAEL,OADA5X,KAAKihC,WAAa,IAAImO,GACfpvC,OAGR,CACD0Y,IAAK,2BACLd,MAAO,WACA5X,KAAK8rB,MAAS9rB,KAAKqrD,WAAcrrD,KAAKqrD,UAAUxC,WAAW5rC,SAASjd,KAAKoa,MAC5Epa,KAAKurD,OAASvrD,KAAKurD,OAAOxoD,QAAO,SAAU2jD,GACzC,OAAQA,EAAKsG,mBAIjB,CAAC,CACHt0C,IAAK,WACLd,MAAO,SAAkBuqC,EAAUkF,EAAO+B,GAExC,IAAIqD,EAAQ,EACRC,GAAQ,EACRj3C,EAAO,EAcX,OAZA4xC,EAAQA,GAASlQ,GACjBiS,EAAOA,GAAQ,OAEW,WAAtBrnC,GAJJogC,EAAWA,GAAYhL,KAIiBgL,aAAoBT,KAC1D2F,EAAQlF,EAASkF,OAASA,EAC1B+B,EAAOjH,EAASiH,MAAQA,EACxBsD,EAAQvK,EAASuK,OAASA,EAC1BD,EAAQtK,EAASsK,OAASA,EAC1Bh3C,EAAO0sC,EAAS1sC,MAAQA,EACxB0sC,EAAWA,EAASA,UAAYhL,IAG3B,CACLgL,SAAUA,EACVkF,MAAOA,EACPqF,MAAOA,EACPD,MAAOA,EACPh3C,KAAMA,EACN2zC,KAAMA,OAKLkC,EA/eT,CAgfE/U,IACF+U,GAAOlxC,GAAK,EAEZ,IAAIw0C,GAEJ,WACE,SAASA,IACP,IAAI3tB,EAAarsB,UAAU/K,OAAS,QAAsBwJ,IAAjBuB,UAAU,GAAmBA,UAAU,GAAK,IAAIw6B,GACrFh1B,EAAKxF,UAAU/K,OAAS,QAAsBwJ,IAAjBuB,UAAU,GAAmBA,UAAU,IAAM,EAC1EkX,IAAOlX,UAAU/K,OAAS,QAAsBwJ,IAAjBuB,UAAU,KAAmBA,UAAU,GAE1E+nB,GAAgB38B,KAAM4uD,GAEtB5uD,KAAKihC,WAAaA,EAClBjhC,KAAKoa,GAAKA,EACVpa,KAAK8rB,KAAOA,EAQd,OALAgb,GAAa8nB,EAAY,CAAC,CACxBl2C,IAAK,2BACLd,MAAO,gBAGFg3C,EAlBT,GAqBAjrD,GAAO,CAAC2nD,GAAQsD,IAAa,CAC3BC,UAAW,SAAmB3G,GAC5B,OAAO,IAAI0G,GAAW1G,EAAOjnB,WAAW2b,UAAU58C,KAAKihC,YAAainB,EAAO9tC,OAI/E,IAAIwiC,GAAY,SAAmBvrB,EAAMwoB,GACvC,OAAOxoB,EAAK2e,WAAW6J,IAGrBiV,GAAqB,SAA4B5G,GACnD,OAAOA,EAAOjnB,YAGhB,SAAS8tB,KAEP,IACIC,EADUhvD,KAAKivD,uBAAuBC,QACfjsD,IAAI6rD,IAAoBnrB,OAAOiZ,GAAW,IAAIxN,IACzEpvC,KAAKyR,UAAUu9C,GAEfhvD,KAAKivD,uBAAuBE,QAEiB,IAAzCnvD,KAAKivD,uBAAuBplD,WAC9B7J,KAAKosD,SAAW,MAIpB,IAAIgD,GAEJ,WACE,SAASA,IACPzyB,GAAgB38B,KAAMovD,GAEtBpvD,KAAKkvD,QAAU,GACflvD,KAAKqvD,IAAM,GAuEb,OApEAvoB,GAAasoB,EAAa,CAAC,CACzB12C,IAAK,MACLd,MAAO,SAAaswC,GAClB,IAAIloD,KAAKkvD,QAAQjyC,SAASirC,GAA1B,CACA,IAAI9tC,EAAK8tC,EAAO9tC,GAAK,EAGrB,OAFApa,KAAKkvD,QAAQ9/C,KAAK84C,GAClBloD,KAAKqvD,IAAIjgD,KAAKgL,GACPpa,QAER,CACD0Y,IAAK,UACLd,MAAO,SAAiBwC,GACtB,OAAOpa,KAAKkvD,QAAQlvD,KAAKqvD,IAAItiD,QAAQqN,EAAK,MAE3C,CACD1B,IAAK,SACLd,MAAO,SAAgBwC,GACrB,IAAIsC,EAAQ1c,KAAKqvD,IAAItiD,QAAQqN,EAAK,GAGlC,OAFApa,KAAKqvD,IAAIn8C,OAAOwJ,EAAO,GACvB1c,KAAKkvD,QAAQh8C,OAAOwJ,EAAO,GACpB1c,OAER,CACD0Y,IAAK,QACLd,MAAO,WACL,IAAIqgC,EAASj4C,KAETsvD,EAAa,KAcjB,OAbAtvD,KAAKkvD,QAAQrqC,SAAQ,SAAUqjC,EAAQp+C,GACrBwlD,GAAcpH,EAAOp8B,MAAQwjC,EAAWxjC,QACnDo8B,EAAOmD,YAAcnD,EAAOmD,UAAUxC,WAAW5rC,SAASirC,EAAO9tC,QAAUk1C,EAAWjE,YAAciE,EAAWjE,UAAUxC,WAAW5rC,SAASqyC,EAAWl1C,OAI3J69B,EAAOtZ,OAAOupB,EAAO9tC,IAErB69B,EAAOsX,KAAKD,EAAWl1C,GAAI8tC,EAAO2G,UAAUS,KAG9CA,EAAapH,KAERloD,OAER,CACD0Y,IAAK,OACLd,MAAO,SAAcwC,EAAIo1C,GACvB,IAAI9yC,EAAQ1c,KAAKqvD,IAAItiD,QAAQqN,EAAK,GAGlC,OAFApa,KAAKqvD,IAAIn8C,OAAOwJ,EAAO,EAAGtC,EAAK,GAC/Bpa,KAAKkvD,QAAQh8C,OAAOwJ,EAAO,EAAG8yC,GACvBxvD,OAER,CACD0Y,IAAK,SACLd,MAAO,WACL,OAAO5X,KAAKqvD,IAAIxlD,SAEjB,CACD6O,IAAK,cACLd,MAAO,SAAqBwC,GAC1B,IAAIq1C,EAAYzvD,KAAKqvD,IAAItiD,QAAQqN,EAAK,IAAM,EAK5C,OAJApa,KAAKqvD,IAAIn8C,OAAO,EAAGu8C,EAAW,GAC9BzvD,KAAKkvD,QAAQh8C,OAAO,EAAGu8C,EAAW,IAAIb,IAAc/pC,SAAQ,SAAUme,GACpE,OAAOA,EAAE0sB,8BAEJ1vD,SAIJovD,EA5ET,GA+EA35B,GAAgB,CACd2kB,QAAS,CACPwS,QAAS,SAAiBzK,EAAUkF,EAAO+B,GACzC,IAAIz1C,EAAI23C,GAAOgB,SAASnK,EAAUkF,EAAO+B,GACrCjS,EAAWn3C,KAAKm3C,WACpB,OAAO,IAAImU,GAAO33C,EAAEwuC,UAAUoK,KAAK54C,GAAGrC,QAAQtR,MAAMm3C,SAASA,EAASoX,QAAQ/B,SAAS74C,EAAE0zC,MAAO1zC,EAAEy1C,OAEpG/B,MAAO,SAAehrB,EAAI+sB,GACxB,OAAOppD,KAAK4sD,QAAQ,EAAGvwB,EAAI+sB,IAM7BuG,6BAA8B,SAAsCC,GAClE5vD,KAAKivD,uBAAuBY,YAAYD,EAAcx1C,KAExD01C,kBAAmB,SAA2BvW,GAC5C,OAAOv5C,KAAKivD,uBAAuBC,QAGlCnsD,QAAO,SAAUmlD,GAChB,OAAOA,EAAO9tC,IAAMm/B,EAAQn/B,MAC3BnX,IAAI6rD,IAAoBnrB,OAAOiZ,GAAW,IAAIxN,KAEnD2gB,WAAY,SAAoB7H,GAC9BloD,KAAKivD,uBAAuBr9B,IAAIs2B,GAKhCvB,GAASc,gBAAgBznD,KAAKosD,UAC9BpsD,KAAKosD,SAAWzF,GAASY,UAAUwH,GAAgB1qB,KAAKrkC,QAE1DqsD,eAAgB,WACO,MAAjBrsD,KAAKosD,WACPpsD,KAAKivD,wBAAyB,IAAIG,IAAcx9B,IAAI,IAAIg9B,GAAW,IAAIxf,GAAOpvC,aAKtF2D,GAAO2nD,GAAQ,CACbttB,KAAM,SAAc/5B,EAAGjB,GACrB,OAAOhD,KAAKgwD,UAAU,OAAQ/rD,EAAGjB,IAGnCu/B,IAAK,SAAa/wB,EAAGxO,GACnB,OAAOhD,KAAKgwD,UAAU,MAAOx+C,EAAGxO,IAElCgtD,UAAW,SAAmBt9C,EAAMiN,EAAMpH,GAExC,GAAsB,WAAlBwJ,GAAQpC,GAAoB,CAC9B,IAAK,IAAIjH,KAAOiH,EACd3f,KAAKgwD,UAAUt9C,EAAMgG,EAAKiH,EAAKjH,IAGjC,OAAO1Y,KAGT,IAAIquD,EAAU,IAAI5J,GAAUzkD,KAAK0kD,UAAUjG,GAAGlmC,GAO9C,OANAvY,KAAKotD,OAAM,WACTiB,EAAUA,EAAQl/B,KAAKnvB,KAAKsR,UAAUoB,GAAMiN,OAC3C,SAAUuS,GAEX,OADAlyB,KAAKsR,UAAUoB,GAAMiN,EAAM0uC,EAAQ5O,GAAGvtB,IAC/Bm8B,EAAQviC,UAEV9rB,MAET4B,KAAM,SAAcqzC,EAAOjtC,GACzB,GAAIhI,KAAKiwD,aAAa,OAAQxR,GAAIz2C,GAAQ,OAAOhI,KACjD,IAAIquD,EAAU,IAAI5J,GAAUzkD,KAAK0kD,UAAUjG,GAAG,IAAI9G,GAAU1C,IAa5D,OAZAj1C,KAAKotD,OAAM,WACTiB,EAAUA,EAAQl/B,KAAKnvB,KAAKsR,UAAU1P,WACrC,SAAUswB,GAEX,OADAlyB,KAAKsR,UAAU1P,KAAKysD,EAAQ5O,GAAGvtB,GAAMlqB,GAC9BqmD,EAAQviC,UACd,SAAUokC,EAAUnoD,GACrBC,EAAQD,EACRsmD,EAAQ5P,GAAGyR,MAGblwD,KAAKmwD,iBAAiB,OAAQ9B,GAEvBruD,MAkBTyR,UAAW,SAAmBwvB,EAAYyS,EAAU0c,GAIlD,GAFA1c,EAAWzS,EAAWyS,UAAYA,EAE9B1zC,KAAKwrD,iBAAmB9X,GAAY1zC,KAAKiwD,aAAa,YAAahvB,GACrE,OAAOjhC,KAIT,IAAIqwD,EAAWjhB,GAAOC,aAAapO,GACnCmvB,EAA8B,MAArBnvB,EAAWmvB,OAAiBnvB,EAAWmvB,OAAmB,MAAVA,EAAiBA,GAAUC,EAEpF,IACIn0B,EACA5qB,EACAioC,EACA+W,EACAC,EALAlC,EAAU,IAAI5J,GAAUzkD,KAAK0kD,UAAUhyC,KAAK09C,EAAShL,GAAehW,IAyFxE,OAFApvC,KAAKotD,OAhFL,WAEE97C,EAAUA,GAAWtR,KAAKsR,UAC1B4qB,EAASA,GAAUH,GAAUkF,EAAY3vB,GACzCi/C,EAAiB,IAAInhB,GAAOsE,OAAWrgC,EAAY/B,GAEnDA,EAAQy+C,WAAW/vD,MAGd0zC,GACHpiC,EAAQq+C,6BAA6B3vD,SAIzC,SAAakyB,GAGNwhB,GAAU1zC,KAAKwwD,iBAEpB,IAAI5gB,EAAa,IAAI,GAAM1T,GAAQzqB,UAAUH,EAAQw+C,kBAAkB9vD,OACnE6B,EAAI+tC,EAAW/tC,EACfC,EAAI8tC,EAAW9tC,EAEfgL,EAAS,IAAIsiC,GAAOgc,GAAgB,GAAInqB,EAAY,CACtD/E,OAAQ,CAACr6B,EAAGC,MAEV8e,EAAQ5gB,KAAKwrD,gBAAkBjS,EAAUA,EAAUgX,EAEvD,GAAIH,EAAQ,CACVtjD,EAASA,EAAOmwC,UAAUp7C,EAAGC,GAC7B8e,EAAQA,EAAMq8B,UAAUp7C,EAAGC,GAE3B,IAAI2uD,EAAU3jD,EAAOwkC,OACjBof,EAAW9vC,EAAM0wB,OAEjBqf,EAAgB,CAACF,EAAU,IAAKA,EAASA,EAAU,KACnDG,EAAYD,EAAc1tD,KAAI,SAAUgB,GAC1C,OAAOd,KAAK6H,IAAI/G,EAAIysD,MAElBG,EAAW1tD,KAAKC,IAAIuR,MAAMxR,KAAM+xB,GAAmB07B,IACnDl0C,EAAQk0C,EAAU7jD,QAAQ8jD,GAC9B/jD,EAAOwkC,OAASqf,EAAcj0C,GAG5Bg3B,IAGG2c,IACHvjD,EAAOwkC,OAASrQ,EAAWqQ,QAAU,GAGnCtxC,KAAKwrD,gBAAkB8E,IACzB1vC,EAAM0wB,OAASgf,IAInBjC,EAAQl/B,KAAKvO,GACbytC,EAAQ5P,GAAG3xC,GACX,IAAIgkD,EAAmBzC,EAAQ5O,GAAGvtB,GAOlC,OANAo+B,EAAeQ,EAAiBxf,OAChCiI,EAAU,IAAInK,GAAO0hB,GACrB9wD,KAAK+wD,aAAaxX,GAElBjoC,EAAQy+C,WAAW/vD,MAEZquD,EAAQviC,UAGjB,SAAkBklC,IAEXA,EAAc90B,QAAU,UAAUjoB,cAAgBgtB,EAAW/E,QAAU,UAAUjoB,aACpFioB,EAASH,GAAUkF,EAAY3vB,IAIjC2vB,EAAamqB,GAAgB,GAAI4F,EAAe,CAC9C90B,OAAQA,OAIqB,GACjCl8B,KAAKwrD,gBAAkBxrD,KAAKmwD,iBAAiB,YAAa9B,GACnDruD,MAGT6B,EAAG,SAAWg5C,EAAInH,GAChB,OAAO1zC,KAAKixD,aAAa,IAAKpW,IAGhC/4C,EAAG,SAAWioC,GACZ,OAAO/pC,KAAKixD,aAAa,IAAKlnB,IAEhC8G,GAAI,WACF,IAAIhvC,EAAI+S,UAAU/K,OAAS,QAAsBwJ,IAAjBuB,UAAU,GAAmBA,UAAU,GAAK,EAC5E,OAAO5U,KAAKkxD,kBAAkB,IAAKrvD,IAErCivC,GAAI,WACF,IAAIhvC,EAAI8S,UAAU/K,OAAS,QAAsBwJ,IAAjBuB,UAAU,GAAmBA,UAAU,GAAK,EAC5E,OAAO5U,KAAKkxD,kBAAkB,IAAKpvD,IAErCqvD,MAAO,SAAetvD,EAAGC,GACvB,OAAO9B,KAAK6wC,GAAGhvC,GAAGivC,GAAGhvC,IAEvBovD,kBAAmB,SAA2B/0C,EAAQsiC,GAGpD,GAFAA,EAAK,IAAI9G,GAAU8G,GAEfz+C,KAAKiwD,aAAa9zC,EAAQsiC,GAAK,OAAOz+C,KAE1C,IAAIquD,EAAU,IAAI5J,GAAUzkD,KAAK0kD,UAAUjG,GAAGA,GAC1CtvB,EAAO,KAcX,OAbAnvB,KAAKotD,OAAM,WACTj+B,EAAOnvB,KAAKsR,UAAU6K,KACtBkyC,EAAQl/B,KAAKA,GACbk/B,EAAQ5P,GAAGtvB,EAAOsvB,MACjB,SAAUvsB,GAEX,OADAlyB,KAAKsR,UAAU6K,GAAQkyC,EAAQ5O,GAAGvtB,IAC3Bm8B,EAAQviC,UACd,SAAUslC,GACX/C,EAAQ5P,GAAGtvB,EAAO,IAAIwoB,GAAUyZ,OAGlCpxD,KAAKmwD,iBAAiBh0C,EAAQkyC,GAEvBruD,MAETqxD,aAAc,SAAsBl1C,EAAQsiC,GAE1C,GAAIz+C,KAAKiwD,aAAa9zC,EAAQsiC,GAAK,OAAOz+C,KAE1C,IAAIquD,EAAU,IAAI5J,GAAUzkD,KAAK0kD,UAAUjG,GAAGA,GAU9C,OATAz+C,KAAKotD,OAAM,WACTiB,EAAQl/B,KAAKnvB,KAAKsR,UAAU6K,SAC3B,SAAU+V,GAEX,OADAlyB,KAAKsR,UAAU6K,GAAQkyC,EAAQ5O,GAAGvtB,IAC3Bm8B,EAAQviC,UAGjB9rB,KAAKmwD,iBAAiBh0C,EAAQkyC,GAEvBruD,MAETixD,aAAc,SAAsB90C,EAAQvE,GAC1C,OAAO5X,KAAKqxD,aAAal1C,EAAQ,IAAIw7B,GAAU//B,KAGjD65B,GAAI,SAAY5vC,GACd,OAAO7B,KAAKixD,aAAa,KAAMpvD,IAGjC6vC,GAAI,SAAY5vC,GACd,OAAO9B,KAAKixD,aAAa,KAAMnvD,IAGjC+7C,KAAM,SAAch8C,EAAGC,GACrB,OAAO9B,KAAK6B,EAAEA,GAAGC,EAAEA,IAGrBuC,OAAQ,SAAgBxC,EAAGC,GACzB,OAAO9B,KAAKyxC,GAAG5vC,GAAG6vC,GAAG5vC,IAGvBwvB,KAAM,SAAcxxB,EAAOC,GAEzB,IAAI87B,EAcJ,OAZK/7B,GAAUC,IACb87B,EAAM77B,KAAKw7C,SAAS1f,QAGjBh8B,IACHA,EAAQ+7B,EAAI/7B,MAAQ+7B,EAAI97B,OAASA,GAG9BA,IACHA,EAAS87B,EAAI97B,OAAS87B,EAAI/7B,MAAQA,GAG7BE,KAAKF,MAAMA,GAAOC,OAAOA,IAGlCD,MAAO,SAAe86C,GACpB,OAAO56C,KAAKixD,aAAa,QAASrW,IAGpC76C,OAAQ,SAAgB06C,GACtB,OAAOz6C,KAAKixD,aAAa,SAAUxW,IAGrC4F,KAAM,SAAcp8C,EAAGgB,EAAGC,EAAGhB,GAE3B,GAAyB,IAArB0Q,UAAU/K,OACZ,OAAO7J,KAAKqgD,KAAK,CAACp8C,EAAGgB,EAAGC,EAAGhB,IAG7B,GAAIlE,KAAKiwD,aAAa,OAAQhsD,GAAI,OAAOjE,KACzC,IAAIquD,EAAU,IAAI5J,GAAUzkD,KAAK0kD,UAAUhyC,KAAK1S,KAAKw7C,SAAS0E,YAAYzB,GAAGx6C,GAW7E,OAVAjE,KAAKotD,OAAM,WACTiB,EAAQl/B,KAAKnvB,KAAKw7C,SAASp7B,YAC1B,SAAU8R,GAGX,OAFAlyB,KAAKw7C,SAAS6E,KAAKgO,EAAQ5O,GAAGvtB,IAEvBm8B,EAAQviC,UAGjB9rB,KAAKmwD,iBAAiB,OAAQ9B,GAEvBruD,MAGT6V,QAAS,SAAiB+B,GACxB,OAAO5X,KAAKixD,aAAa,UAAWr5C,IAGtCo9B,QAAS,SAAiBnzC,EAAGC,EAAGhC,EAAOC,GACrC,OAAOC,KAAKqxD,aAAa,UAAW,IAAInd,GAAIryC,EAAGC,EAAGhC,EAAOC,KAE3D6+C,OAAQ,SAAgBjrC,GACtB,MAAmB,WAAfoO,GAAQpO,GACH3T,KAAK4+C,OAAO,CACjBrH,OAAQ3iC,UAAU,GAClB82B,MAAO92B,UAAU,GACjB0iC,QAAS1iC,UAAU,MAIN,MAAbjB,EAAE2jC,SAAiBt3C,KAAKg+B,KAAK,eAAgBrqB,EAAE2jC,SACpC,MAAX3jC,EAAE+3B,OAAe1rC,KAAKg+B,KAAK,aAAcrqB,EAAE+3B,OAC/B,MAAZ/3B,EAAE4jC,QAAgBv3C,KAAKg+B,KAAK,SAAUrqB,EAAE4jC,QACrCv3C,SAGX2D,GAAO2nD,GAAQ,CACbxxB,GAAIA,GACJiW,GAAIA,GACJ5gB,KAAMA,GACNsvB,GAAIA,KAENnhB,GAASguB,GAAQ,UAEjB,IAAIgG,GAEJ,SAAUrT,GAGR,SAASqT,EAAIv0B,GACX,IAAI0Z,EAQJ,OANA9Z,GAAgB38B,KAAMsxD,IAEtB7a,EAAQzJ,GAA2BhtC,KAAMitC,GAAgBqkB,GAAKprD,KAAKlG,KAAMk9B,GAAU,MAAOH,GAAOA,KAE3F7gB,YAECu6B,EAyDT,OApEAhJ,GAAU6jB,EAAKrT,GAcfnX,GAAawqB,EAAK,CAAC,CACjB54C,IAAK,SACLd,MAAO,WACL,QAAQ5X,KAAK+8B,KAAK57B,YAAgBnB,KAAK+8B,KAAK57B,sBAAsBu7B,GAAQv2B,OAAO0N,YAAiD,cAAlC7T,KAAK+8B,KAAK57B,WAAWkP,YAItH,CACDqI,IAAK,OACLd,MAAO,WACL,OAAI5X,KAAKs+B,SAAiBt+B,KACnBktC,GAAKD,GAAgBqkB,EAAI5vD,WAAY,OAAQ1B,MAAMkG,KAAKlG,QAGhE,CACD0Y,IAAK,YACLd,MAAO,WACL,OAAK5X,KAAKs+B,SACHt+B,KAAKg+B,KAAK,CACfxB,MAAOD,GACP1iB,QAAS,QACRmkB,KAAK,cAAevB,GAAOD,IAAOwB,KAAK,cA50OpC,yBA40O0DxB,IAJrCx8B,KAAKxB,OAAO0d,cAOxC,CACDxD,IAAK,OACLd,MAAO,WACL,OAAK5X,KAAKs+B,SACHlB,GAAMp9B,KAAK+8B,KAAK19B,cAAc,UAAYW,KAAKk4C,IAAI,IAAI8F,IADnCh+C,KAAKxB,OAAOW,SAIxC,CACDuZ,IAAK,SACLd,MAAO,SAAgBlF,GACrB,OAAI1S,KAAKs+B,SACkC,cAAlCt+B,KAAK+8B,KAAK57B,WAAWkP,SAA2B,KAAO+sB,GAAMp9B,KAAK+8B,KAAK57B,YAGzE+rC,GAAKD,GAAgBqkB,EAAI5vD,WAAY,SAAU1B,MAAMkG,KAAKlG,KAAM0S,KAExE,CACDgG,IAAK,QACLd,MAAO,WAEL,KAAO5X,KAAK+8B,KAAKob,iBACfn4C,KAAK+8B,KAAK37B,YAAYpB,KAAK+8B,KAAKqb,WAKlC,cADOp4C,KAAKuxD,MACLvxD,SAIJsxD,EArET,CAsEE3T,IACFloB,GAAgB,CACdkoB,UAAW,CAET6T,OAAQ3zB,IAAkB,WACxB,OAAO79B,KAAKk4C,IAAI,IAAIoZ,UAI1Bh0B,GAASg0B,GAAK,OAAO,GAErB,IAAIG,GAEJ,SAAUxT,GAIR,SAASwT,EAAQ10B,GAGf,OAFAJ,GAAgB38B,KAAMyxD,GAEfzkB,GAA2BhtC,KAAMitC,GAAgBwkB,GAASvrD,KAAKlG,KAAMk9B,GAAU,SAAUH,GAAOA,IAGzG,OATA0Q,GAAUgkB,EAASxT,GASZwT,EAVT,CAWE9T,IACFloB,GAAgB,CACdkoB,UAAW,CACT72B,OAAQ+W,IAAkB,WACxB,OAAO79B,KAAKk4C,IAAI,IAAIuZ,UAI1Bn0B,GAASm0B,GAAS,UAiBlB,IAAIC,GAAW,CACd9nC,UAAW,KACX+nC,MAjBD,SAAejY,GAQb,OANoB,IAAhB15C,KAAK4xD,QACP5xD,KAAK0xB,QAIP1xB,KAAK+8B,KAAKt9B,YAAYi9B,GAAQp9B,SAASuyD,eAAenY,IAC/C15C,MAUR6J,OAPD,WACE,OAAO7J,KAAK+8B,KAAK+0B,0BASfC,GAEJ,SAAUxU,GAIR,SAASwU,EAAKh1B,GACZ,IAAI0Z,EAWJ,OATA9Z,GAAgB38B,KAAM+xD,IAEtBtb,EAAQzJ,GAA2BhtC,KAAMitC,GAAgB8kB,GAAM7rD,KAAKlG,KAAMk9B,GAAU,OAAQH,GAAOA,KAC7Fsd,IAAIxkC,QAAU,IAAI8hC,GAAU,KAElClB,EAAMub,UAAW,EAEjBvb,EAAMmb,QAAS,EAERnb,EAgLT,OA/LAhJ,GAAUskB,EAAMxU,GAqBhBzW,GAAairB,EAAM,CAAC,CAClBr5C,IAAK,IACLd,MAAO,SAAWijC,GAChB,IAAIhf,EAAMjnB,UAAU/K,OAAS,QAAsBwJ,IAAjBuB,UAAU,GAAmBA,UAAU,GAAK5U,KAAK87B,OAEnF,OAAU,MAAN+e,EACKhf,EAAIh6B,EAGN7B,KAAKg+B,KAAK,IAAKh+B,KAAKg+B,KAAK,KAAO6c,EAAKhf,EAAIh6B,KAGjD,CACD6W,IAAK,IACLd,MAAO,SAAWmyB,GAChB,IAAIlO,EAAMjnB,UAAU/K,OAAS,QAAsBwJ,IAAjBuB,UAAU,GAAmBA,UAAU,GAAK5U,KAAK87B,OAEnF,OAAU,MAANiO,EACKlO,EAAI/5B,EAGN9B,KAAKg+B,KAAK,IAAKh+B,KAAKg+B,KAAK,KAAO+L,EAAKlO,EAAI/5B,KAEjD,CACD4W,IAAK,OACLd,MAAO,SAAc/V,EAAGC,GACtB,IAAI+5B,EAAMjnB,UAAU/K,OAAS,QAAsBwJ,IAAjBuB,UAAU,GAAmBA,UAAU,GAAK5U,KAAK87B,OACnF,OAAO97B,KAAK6B,EAAEA,EAAGg6B,GAAK/5B,EAAEA,EAAG+5B,KAG5B,CACDnjB,IAAK,KACLd,MAAO,SAAY/V,GACjB,IAAIg6B,EAAMjnB,UAAU/K,OAAS,QAAsBwJ,IAAjBuB,UAAU,GAAmBA,UAAU,GAAK5U,KAAK87B,OAEnF,OAAS,MAALj6B,EACKg6B,EAAI4V,GAGNzxC,KAAKg+B,KAAK,IAAKh+B,KAAKg+B,KAAK,KAAOn8B,EAAIg6B,EAAI4V,MAGhD,CACD/4B,IAAK,KACLd,MAAO,SAAY9V,GACjB,IAAI+5B,EAAMjnB,UAAU/K,OAAS,QAAsBwJ,IAAjBuB,UAAU,GAAmBA,UAAU,GAAK5U,KAAK87B,OAEnF,OAAS,MAALh6B,EACK+5B,EAAI6V,GAGN1xC,KAAKg+B,KAAK,IAAKh+B,KAAKg+B,KAAK,KAAOl8B,EAAI+5B,EAAI6V,MAEhD,CACDh5B,IAAK,SACLd,MAAO,SAAgB/V,EAAGC,GACxB,IAAI+5B,EAAMjnB,UAAU/K,OAAS,QAAsBwJ,IAAjBuB,UAAU,GAAmBA,UAAU,GAAK5U,KAAK87B,OACnF,OAAO97B,KAAKyxC,GAAG5vC,EAAGg6B,GAAK6V,GAAG5vC,EAAG+5B,KAG9B,CACDnjB,IAAK,OACLd,MAAO,SAAcq6C,GAEnB,QAAc5+C,IAAV4+C,EAAqB,CACvB,IAAI9hD,EAAWnQ,KAAK+8B,KAAK/sB,WACrBkiD,EAAY,EAChBD,EAAQ,GAER,IAAK,IAAInoD,EAAI,EAAGm7B,EAAM90B,EAAStG,OAAQC,EAAIm7B,IAAOn7B,EAEnB,aAAzBqG,EAASrG,GAAGuG,UAMZvG,IAAMooD,GAAsC,IAAzB/hD,EAASrG,GAAGiK,WAAsD,IAApCqpB,GAAMjtB,EAASrG,IAAIuwC,IAAI8X,WAC1EF,GAAS,MAIXA,GAAS9hD,EAASrG,GAAGlK,aAVT,IAANkK,IAASooD,EAAY,GAa7B,OAAOD,EAMT,GAFAjyD,KAAK0xB,QAAQ0gC,OAAM,GAEE,mBAAVH,EAETA,EAAM/rD,KAAKlG,KAAMA,WAKjB,IAAK,IAAI0sB,EAAI,EAAGu3B,GAFhBgO,EAAQA,EAAMnvD,MAAM,OAEO+G,OAAQ6iB,EAAIu3B,EAAIv3B,IACzC1sB,KAAKqyD,MAAMJ,EAAMvlC,IAAI4lC,UAKzB,OAAOtyD,KAAKoyD,OAAM,GAAOnY,YAG1B,CACDvhC,IAAK,UACLd,MAAO,SAAiBA,GAEtB,OAAa,MAATA,EACK5X,KAAKq6C,IAAIxkC,SAIlB7V,KAAKq6C,IAAIxkC,QAAU,IAAI8hC,GAAU//B,GAC1B5X,KAAKi6C,aAGb,CACDvhC,IAAK,UACLd,MAAO,SAAiBo6C,GAOtB,GALwB,kBAAbA,IACThyD,KAAKgyD,SAAWA,GAIdhyD,KAAKgyD,SAAU,CACjB,IAAIlzD,EAAOkB,KACPuyD,EAAkB,EAClB18C,EAAU7V,KAAKq6C,IAAIxkC,QACvB7V,KAAK81C,MAAK,WACR,IAAI0c,EAAW91B,GAAQv2B,OAAO+uC,iBAAiBl1C,KAAK+8B,MAAMoY,iBAAiB,aACvErE,EAAKj7B,EAAU,IAAI8hC,GAAU6a,GAE7BxyD,KAAKq6C,IAAI8X,WACXnyD,KAAKg+B,KAAK,IAAKl/B,EAAKk/B,KAAK,MAEL,OAAhBh+B,KAAK05C,OACP6Y,GAAmBzhB,GAEnB9wC,KAAKg+B,KAAK,KAAM8S,EAAKyhB,GACrBA,EAAkB,OAIxBvyD,KAAK4qD,KAAK,WAGZ,OAAO5qD,OAGR,CACD0Y,IAAK,QACLd,MAAO,SAAeg6C,GAEpB,OADA5xD,KAAK4xD,SAAWA,EACT5xD,OAGR,CACD0Y,IAAK,UACLd,MAAO,SAAiBjE,GAGtB,OAFA3T,KAAKq6C,IAAM1mC,EACX3T,KAAKq6C,IAAIxkC,QAAU,IAAI8hC,GAAUhkC,EAAEkC,SAAW,KACvC7V,SAIJ+xD,EAhMT,CAiME3U,IACFz5C,GAAOouD,GAAML,IACbj8B,GAAgB,CACdkoB,UAAW,CAETjE,KAAM7b,IAAkB,SAAU6b,GAChC,OAAO15C,KAAKk4C,IAAI,IAAI6Z,IAAQrY,KAAKA,MAGnCiY,MAAO9zB,IAAkB,SAAU6b,GACjC,OAAO15C,KAAKk4C,IAAI,IAAI6Z,IAAQJ,MAAMjY,SAIxCpc,GAASy0B,GAAM,QAEf,IAAIU,GAEJ,SAAUC,GAIR,SAASD,EAAM11B,GAGb,OAFAJ,GAAgB38B,KAAMyyD,GAEfzlB,GAA2BhtC,KAAMitC,GAAgBwlB,GAAOvsD,KAAKlG,KAAMk9B,GAAU,QAASH,GAAOA,IAqDtG,OA3DA0Q,GAAUglB,EAAOC,GAUjB5rB,GAAa2rB,EAAO,CAAC,CACnB/5C,IAAK,OACLd,MAAO,SAAcq6C,GACnB,OAAa,MAATA,EAAsBjyD,KAAK+8B,KAAKn9B,aAAeI,KAAKq6C,IAAI8X,SAAW,KAAO,KAC7D,mBAAVF,EAAuBA,EAAM/rD,KAAKlG,KAAMA,MAAQA,KAAK2xD,MAAMM,GAC3DjyD,QAGR,CACD0Y,IAAK,KACLd,MAAO,SAAY+6C,GACjB,OAAO3yD,KAAKg+B,KAAK,KAAM20B,KAGxB,CACDj6C,IAAK,KACLd,MAAO,SAAYg7C,GACjB,OAAO5yD,KAAKg+B,KAAK,KAAM40B,KAExB,CACDl6C,IAAK,IACLd,MAAO,SAAWijC,GAChB,OAAO76C,KAAKg+B,KAAK,IAAK6c,KAEvB,CACDniC,IAAK,IACLd,MAAO,SAAWmyB,GAChB,OAAO/pC,KAAKg+B,KAAK,IAAK+L,KAEvB,CACDrxB,IAAK,OACLd,MAAO,SAAc/V,EAAGC,GACtB,OAAO9B,KAAK6B,EAAEA,GAAGC,EAAEA,KAGpB,CACD4W,IAAK,UACLd,MAAO,WAEL,IAAI8qB,EAAI1iC,KAAKk+B,OAAO6zB,IAEpB/xD,KAAKq6C,IAAI8X,UAAW,EACpB,IAAIK,EAAW91B,GAAQv2B,OAAO+uC,iBAAiBl1C,KAAK+8B,MAAMoY,iBAAiB,aACvErE,EAAKpO,EAAE2X,IAAIxkC,QAAU,IAAI8hC,GAAU6a,GAEvC,OAAOxyD,KAAK8wC,GAAGA,GAAI9S,KAAK,IAAK0E,EAAE7gC,SAI5B4wD,EA5DT,CA6DEV,IACFpuD,GAAO8uD,GAAOf,IACdj8B,GAAgB,CACdg9B,MAAO,CACLJ,MAAOx0B,IAAkB,SAAU6b,GACjC,IAAI2Y,EAAQ,IAAII,GAQhB,OANKzyD,KAAK4xD,QACR5xD,KAAK0xB,QAIP1xB,KAAK+8B,KAAKt9B,YAAY4yD,EAAMt1B,MACrBs1B,EAAM3Y,KAAKA,SAIxBpc,GAASm1B,GAAO,SAEhB,IAAII,GAEJ,SAAU5U,GAGR,SAAS4U,EAAS91B,GAGhB,OAFAJ,GAAgB38B,KAAM6yD,GAEf7lB,GAA2BhtC,KAAMitC,GAAgB4lB,GAAU3sD,KAAKlG,KAAMk9B,GAAU,WAAYH,GAAOA,IAqB5G,OA1BA0Q,GAAUolB,EAAU5U,GASpBnX,GAAa+rB,EAAU,CAAC,CACtBn6C,IAAK,SACLd,MAAO,WAML,OAJA5X,KAAK8yD,UAAUjuC,SAAQ,SAAUzU,GAC/BA,EAAG2iD,YAGE7lB,GAAKD,GAAgB4lB,EAASnxD,WAAY,SAAU1B,MAAMkG,KAAKlG,QAEvE,CACD0Y,IAAK,UACLd,MAAO,WACL,OAAOs+B,GAAS,oBAAsBl2C,KAAKoa,KAAO,UAI/Cy4C,EA3BT,CA4BElV,IACFloB,GAAgB,CACdkoB,UAAW,CAETqV,KAAMn1B,IAAkB,WACtB,OAAO79B,KAAKb,OAAO+4C,IAAI,IAAI2a,QAG/BzY,QAAS,CAEP6Y,SAAU,SAAkB3hD,GAE1B,IAAI4hD,EAAU5hD,aAAmBuhD,GAAWvhD,EAAUtR,KAAKk+B,SAAS80B,OAAOphC,IAAItgB,GAE/E,OAAOtR,KAAKg+B,KAAK,YAAa,SAAWk1B,EAAQ94C,KAAO,OAG1D24C,OAAQ,WACN,OAAO/yD,KAAKg+B,KAAK,YAAa,OAEhCk1B,QAAS,WACP,OAAOlzD,KAAKghC,UAAU,iBAI5B1D,GAASu1B,GAAU,YAEnB,IAAIM,GAEJ,SAAU9V,GAGR,SAAS8V,EAAcp2B,GAGrB,OAFAJ,GAAgB38B,KAAMmzD,GAEfnmB,GAA2BhtC,KAAMitC,GAAgBkmB,GAAejtD,KAAKlG,KAAMk9B,GAAU,gBAAiBH,GAAOA,IAGtH,OARA0Q,GAAU0lB,EAAe9V,GAQlB8V,EATT,CAUE,IACF19B,GAAgB,CACdkoB,UAAW,CACTyV,cAAev1B,IAAkB,SAAU/9B,EAAOC,GAChD,OAAOC,KAAKk4C,IAAI,IAAIib,IAAiB7hC,KAAKxxB,EAAOC,SAIvDu9B,GAAS61B,GAAe,iBAExB,IAAIE,GAEJ,SAAUpV,GAGR,SAASoV,EAAEt2B,GAGT,OAFAJ,GAAgB38B,KAAMqzD,GAEfrmB,GAA2BhtC,KAAMitC,GAAgBomB,GAAGntD,KAAKlG,KAAMk9B,GAAU,IAAKH,GAAOA,IAoF9F,OAzFA0Q,GAAU4lB,EAAGpV,GAQbnX,GAAausB,EAAG,CAAC,CACf36C,IAAK,IACLd,MAAO,SAAWijC,GAChB,IAAIhf,EAAMjnB,UAAU/K,OAAS,QAAsBwJ,IAAjBuB,UAAU,GAAmBA,UAAU,GAAK5U,KAAK87B,OACnF,OAAU,MAAN+e,EAAmBhf,EAAIh6B,EACpB7B,KAAK69C,KAAKhD,EAAIhf,EAAI/5B,EAAG+5B,KAE7B,CACDnjB,IAAK,IACLd,MAAO,SAAWmyB,GAChB,IAAIlO,EAAMjnB,UAAU/K,OAAS,QAAsBwJ,IAAjBuB,UAAU,GAAmBA,UAAU,GAAK5U,KAAK87B,OACnF,OAAU,MAANiO,EAAmBlO,EAAI/5B,EACpB9B,KAAK69C,KAAKhiB,EAAIh6B,EAAGkoC,EAAIlO,KAE7B,CACDnjB,IAAK,OACLd,MAAO,WACL,IAAI/V,EAAI+S,UAAU/K,OAAS,QAAsBwJ,IAAjBuB,UAAU,GAAmBA,UAAU,GAAK,EACxE9S,EAAI8S,UAAU/K,OAAS,QAAsBwJ,IAAjBuB,UAAU,GAAmBA,UAAU,GAAK,EACxEinB,EAAMjnB,UAAU/K,OAAS,QAAsBwJ,IAAjBuB,UAAU,GAAmBA,UAAU,GAAK5U,KAAK87B,OAC/E+U,EAAKhvC,EAAIg6B,EAAIh6B,EACbivC,EAAKhvC,EAAI+5B,EAAI/5B,EACjB,OAAO9B,KAAKmxD,MAAMtgB,EAAIC,KAEvB,CACDp4B,IAAK,KACLd,MAAO,SAAY+6C,GACjB,OAAO3yD,KAAKmxD,MAAMwB,EAAK,KAExB,CACDj6C,IAAK,KACLd,MAAO,SAAYg7C,GACjB,OAAO5yD,KAAKmxD,MAAM,EAAGyB,KAEtB,CACDl6C,IAAK,QACLd,MAAO,SAAei5B,EAAIC,GAcxB,OAbA9wC,KAAKmQ,WAAW0U,SAAQ,SAAUyuC,EAAOxpD,GAEvC,IAAIgyB,EAAOw3B,EAAMx3B,OAEbpG,EAAI,IAAI0Z,GAAOkkB,GAGf/hD,EAASmkB,EAAE3pB,UAAU8kC,EAAIC,GAAIr/B,UAAUikB,EAAEtqB,WAEzCgzB,EAAI,IAAI,GAAMtC,EAAKj6B,EAAGi6B,EAAKh6B,GAAG2P,UAAUF,GAE5C+hD,EAAMzV,KAAKzf,EAAEv8B,EAAGu8B,EAAEt8B,MAEb9B,OAER,CACD0Y,IAAK,QACLd,MAAO,SAAegjC,GACpB,IAAI/e,EAAMjnB,UAAU/K,OAAS,QAAsBwJ,IAAjBuB,UAAU,GAAmBA,UAAU,GAAK5U,KAAK87B,OACnF,OAAc,MAAV8e,EAAuB/e,EAAI/7B,MACxBE,KAAKsxB,KAAKspB,EAAQ/e,EAAI97B,OAAQ87B,KAEtC,CACDnjB,IAAK,SACLd,MAAO,SAAgB6iC,GACrB,IAAI5e,EAAMjnB,UAAU/K,OAAS,QAAsBwJ,IAAjBuB,UAAU,GAAmBA,UAAU,GAAK5U,KAAK87B,OACnF,OAAe,MAAX2e,EAAwB5e,EAAI97B,OACzBC,KAAKsxB,KAAKuK,EAAI/7B,MAAO26C,EAAS5e,KAEtC,CACDnjB,IAAK,OACLd,MAAO,SAAc9X,EAAOC,GAC1B,IAAI87B,EAAMjnB,UAAU/K,OAAS,QAAsBwJ,IAAjBuB,UAAU,GAAmBA,UAAU,GAAK5U,KAAK87B,OAC/EsC,EAAIxC,GAAiB57B,KAAMF,EAAOC,EAAQ87B,GAC1CqU,EAAS9R,EAAEt+B,MAAQ+7B,EAAI/7B,MACvBqwC,EAAS/R,EAAEr+B,OAAS87B,EAAI97B,OAK5B,OAJAC,KAAKmQ,WAAW0U,SAAQ,SAAUyuC,EAAOxpD,GACvC,IAAI6J,EAAI,IAAI,GAAMkoB,GAAKpqB,UAAU,IAAI29B,GAAOkkB,GAAOloD,WACnDkoD,EAAMzuD,MAAMqrC,EAAQC,EAAQx8B,EAAE9R,EAAG8R,EAAE7R,MAE9B9B,SAIJqzD,EA1FT,CA2FE1V,IACFloB,GAAgB,CACdkoB,UAAW,CAET4V,MAAO11B,IAAkB,WACvB,OAAO79B,KAAKk4C,IAAI,IAAImb,UAI1B/1B,GAAS+1B,GAAG,KAEZ,IAAIlnC,GAEJ,SAAU8xB,GAGR,SAAS9xB,EAAE4Q,GAGT,OAFAJ,GAAgB38B,KAAMmsB,GAEf6gB,GAA2BhtC,KAAMitC,GAAgB9gB,GAAGjmB,KAAKlG,KAAMk9B,GAAU,IAAKH,GAAOA,IAiB9F,OAtBA0Q,GAAUthB,EAAG8xB,GASbnX,GAAa3a,EAAG,CAAC,CACfzT,IAAK,KACLd,MAAO,SAAYinC,GACjB,OAAO7+C,KAAKg+B,KAAK,OAAQ6gB,EAAKpiB,MAG/B,CACD/jB,IAAK,SACLd,MAAO,SAAgB47C,GACrB,OAAOxzD,KAAKg+B,KAAK,SAAUw1B,OAIxBrnC,EAvBT,CAwBEwxB,IACFloB,GAAgB,CACdkoB,UAAW,CAET8V,KAAM51B,IAAkB,SAAUghB,GAChC,OAAO7+C,KAAKk4C,IAAI,IAAI/rB,IAAKsyB,GAAGI,OAGhCzE,QAAS,CAEPsZ,OAAQ,SAAgB7U,GACtB,IAAI4U,EAAO,IAAItnC,GAQf,MANmB,mBAAR0yB,EACTA,EAAI34C,KAAKutD,EAAMA,GAEfA,EAAKhV,GAAGI,GAGH7+C,KAAKk+B,SAASga,IAAIub,GAAMvb,IAAIl4C,UAIzCs9B,GAASnR,GAAG,KAEZ,IAAIwnC,GAEJ,SAAU1V,GAIR,SAAS0V,EAAK52B,GAGZ,OAFAJ,GAAgB38B,KAAM2zD,GAEf3mB,GAA2BhtC,KAAMitC,GAAgB0mB,GAAMztD,KAAKlG,KAAMk9B,GAAU,OAAQH,GAAOA,IAqBpG,OA3BA0Q,GAAUkmB,EAAM1V,GAUhBnX,GAAa6sB,EAAM,CAAC,CAClBj7C,IAAK,SACLd,MAAO,WAML,OAJA5X,KAAK8yD,UAAUjuC,SAAQ,SAAUzU,GAC/BA,EAAGwjD,YAGE1mB,GAAKD,GAAgB0mB,EAAKjyD,WAAY,SAAU1B,MAAMkG,KAAKlG,QAEnE,CACD0Y,IAAK,UACLd,MAAO,WACL,OAAOs+B,GAAS,eAAiBl2C,KAAKoa,KAAO,UAI1Cu5C,EA5BT,CA6BEhW,IA0BF,SAASkW,GAAUr6C,EAAQ+iC,GAAkB,IAAI/hC,EAAOxG,OAAOwG,KAAKhB,GAAS,GAAIxF,OAAO0J,sBAAuB,CAAE,IAAIgd,EAAU1mB,OAAO0J,sBAAsBlE,GAAa+iC,IAAgB7hB,EAAUA,EAAQ33B,QAAO,SAAU2kB,GAAO,OAAO1T,OAAOoD,yBAAyBoC,EAAQkO,GAAKjQ,eAAgB+C,EAAKpL,KAAKuF,MAAM6F,EAAMkgB,GAAY,OAAOlgB,EAEhV,SAASs5C,GAAgBhnD,GAAU,IAAK,IAAIhD,EAAI,EAAGA,EAAI8K,UAAU/K,OAAQC,IAAK,CAAE,IAAI2J,EAAyB,MAAhBmB,UAAU9K,GAAa8K,UAAU9K,GAAK,GAAQA,EAAI,EAAK+pD,GAAUpgD,GAAQ,GAAMoR,SAAQ,SAAUnM,GAAO2jC,GAAgBvvC,EAAQ4L,EAAKjF,EAAOiF,OAAsB1E,OAAOyoC,0BAA6BzoC,OAAOmO,iBAAiBrV,EAAQkH,OAAOyoC,0BAA0BhpC,IAAmBogD,GAAUpgD,GAAQoR,SAAQ,SAAUnM,GAAO1E,OAAOiD,eAAenK,EAAQ4L,EAAK1E,OAAOoD,yBAAyB3D,EAAQiF,OAAe,OAAO5L,EA3BngB2oB,GAAgB,CACdkoB,UAAW,CACToW,KAAMl2B,IAAkB,WACtB,OAAO79B,KAAKb,OAAO+4C,IAAI,IAAIyb,QAG/BvZ,QAAS,CAEP4Z,SAAU,SAAkB1iD,GAE1B,IAAI2iD,EAAS3iD,aAAmBqiD,GAAOriD,EAAUtR,KAAKk+B,SAAS61B,OAAOniC,IAAItgB,GAE1E,OAAOtR,KAAKg+B,KAAK,OAAQ,SAAWi2B,EAAO75C,KAAO,OAGpDw5C,OAAQ,WACN,OAAO5zD,KAAKg+B,KAAK,OAAQ,OAE3Bi2B,OAAQ,WACN,OAAOj0D,KAAKghC,UAAU,YAI5B1D,GAASq2B,GAAM,QAmBf,IAAIO,GAEJ,SAAU7W,GAGR,SAAS6W,EAAMn3B,GAGb,OAFAJ,GAAgB38B,KAAMk0D,GAEflnB,GAA2BhtC,KAAMitC,GAAgBinB,GAAOhuD,KAAKlG,KAAMk9B,GAAU,QAASH,GAAOA,IA0BtG,OA/BA0Q,GAAUymB,EAAO7W,GAQjBvW,GAAaotB,EAAO,CAAC,CACnBx7C,IAAK,UACLd,MAAO,WACL,IAAIu8B,EAAIv/B,UAAU/K,OAAS,QAAsBwJ,IAAjBuB,UAAU,GAAmBA,UAAU,GAAK,GAE5E,OADA5U,KAAK+8B,KAAKn9B,aAAeu0C,EAClBn0C,OAER,CACD0Y,IAAK,OACLd,MAAO,SAAc+H,EAAMiD,GACzB,IAAI6kB,EAAS7yB,UAAU/K,OAAS,QAAsBwJ,IAAjBuB,UAAU,GAAmBA,UAAU,GAAK,GACjF,OAAO5U,KAAKm0D,KAAK,aAAcL,GAAgB,CAC7CM,WAAYz0C,EACZiD,IAAKA,GACJ6kB,MAEJ,CACD/uB,IAAK,OACLd,MAAO,SAAc9H,EAAU+R,GAC7B,OAAO7hB,KAAKq0D,QA3ClB,SAAiBvkD,EAAUqkD,GACzB,IAAKrkD,EAAU,MAAO,GACtB,IAAKqkD,EAAM,OAAOrkD,EAClB,IAAI0yB,EAAM1yB,EAAW,IAErB,IAAK,IAAIhG,KAAKqqD,EACZ3xB,GAAmB14B,EAhkQZ0G,QAAQ,YAAY,SAAUklB,EAAGtf,GACxC,MAAO,IAAMA,EAAEvF,iBA+jQS,IAAMsjD,EAAKrqD,GAAK,IAI1C,OADA04B,EAAO,IAkCiB8xB,CAAQxkD,EAAU+R,QAInCqyC,EAhCT,CAiCE,IACFz+B,GAAgB,MAAO,CACrB/1B,MAAOm+B,IAAkB,SAAU/tB,EAAU+R,GAC3C,OAAO7hB,KAAKk4C,IAAI,IAAIgc,IAASC,KAAKrkD,EAAU+R,MAE9C0yC,SAAU12B,IAAkB,SAAUle,EAAMiD,EAAK6kB,GAC/C,OAAOznC,KAAKk4C,IAAI,IAAIgc,IAAStY,KAAKj8B,EAAMiD,EAAK6kB,QAGjDnK,GAAS42B,GAAO,SAEhB,IAAIM,GAEJ,SAAU9B,GAIR,SAAS8B,EAASz3B,GAGhB,OAFAJ,GAAgB38B,KAAMw0D,GAEfxnB,GAA2BhtC,KAAMitC,GAAgBunB,GAAUtuD,KAAKlG,KAAMk9B,GAAU,WAAYH,GAAOA,IA+B5G,OArCA0Q,GAAU+mB,EAAU9B,GAUpB5rB,GAAa0tB,EAAU,CAAC,CACtB97C,IAAK,QACLd,MAAO,WACL,IAAI68C,EAAQz0D,KAAKy0D,QACjB,OAAOA,EAAQA,EAAMr0C,QAAU,OAGhC,CACD1H,IAAK,OACLd,MAAO,SAAc1T,GACnB,IAAIuwD,EAAQz0D,KAAKy0D,QACbrQ,EAAY,KAMhB,OAJIqQ,IACFrQ,EAAYqQ,EAAMpU,KAAKn8C,IAGb,MAALA,EAAYkgD,EAAYpkD,OAGhC,CACD0Y,IAAK,QACLd,MAAO,WACL,OAAO5X,KAAKghC,UAAU,YAInBwzB,EAtCT,CAuCEzC,IACFt8B,GAAgB,CACdkoB,UAAW,CACT+W,SAAU72B,IAAkB,SAAU6b,EAAM59B,GAM1C,OAJM49B,aAAgBqY,KACpBrY,EAAO15C,KAAK05C,KAAKA,IAGZA,EAAK59B,KAAKA,OAGrBi2C,KAAM,CAEJj2C,KAAM+hB,IAAkB,SAAU42B,GAChC,IAWI13B,EAXA43B,IAAc//C,UAAU/K,OAAS,QAAsBwJ,IAAjBuB,UAAU,KAAmBA,UAAU,GAC7E8/C,EAAW,IAAIF,GAYnB,GAVMC,aAAiBlP,KAErBkP,EAAQz0D,KAAKb,OAAO2c,KAAK24C,IAI3BC,EAAS12B,KAAK,OAAQ,IAAMy2B,EAAOh4B,IAI/Bk4B,EACF,KAAO53B,EAAO/8B,KAAK+8B,KAAKE,YACtBy3B,EAAS33B,KAAKt9B,YAAYs9B,GAK9B,OAAO/8B,KAAKk4C,IAAIwc,MAGlBA,SAAU,WACR,OAAO10D,KAAKk6C,QAAQ,cAGxBqL,KAAM,CAEJ7L,KAAM7b,IAAkB,SAAU6b,GAOhC,OALMA,aAAgBqY,KACpBrY,GAAO,IAAIqY,IAAO/d,MAAMh0C,KAAKk+B,UAAUwb,KAAKA,IAIvCA,EAAK59B,KAAK9b,SAEnB8yD,QAAS,WACP,OAAO5c,GAAS,eAAiBl2C,KAAKoa,KAAO,UAInDo6C,GAAS9yD,UAAUw+C,WAAaqD,GAChCjmB,GAASk3B,GAAU,YAEnB,IAAII,GAEJ,SAAUrX,GAGR,SAASqX,EAAI73B,GAGX,OAFAJ,GAAgB38B,KAAM40D,GAEf5nB,GAA2BhtC,KAAMitC,GAAgB2nB,GAAK1uD,KAAKlG,KAAMk9B,GAAU,MAAOH,GAAOA,IAYlG,OAjBA0Q,GAAUmnB,EAAKrX,GASfzW,GAAa8tB,EAAK,CAAC,CACjBl8C,IAAK,UACLd,MAAO,SAAiB4jC,EAAUqZ,GAEhC,OAAO70D,KAAKg+B,KAAK,QAAS62B,GAAQ,IAAM,IAAMrZ,EAAU/e,QAIrDm4B,EAlBT,CAmBExX,IACF3nB,GAAgB,CACdkoB,UAAW,CAETmX,IAAKj3B,IAAkB,SAAUvsB,EAASujD,GACxC,OAAO70D,KAAKk4C,IAAI,IAAI0c,IAAOtjD,QAAQA,EAASujD,SAIlDv3B,GAASs3B,GAAK,OAGd,IAAIG,GAAMl4B,GACVl5B,GAAO,CAAC2tD,GAAKG,GAAStS,GAAOJ,GAASuB,IAASlqB,GAAc,YAC7DzyB,GAAO,CAACw8C,GAAMyF,GAAUF,GAASH,IAAOnvB,GAAc,WACtDzyB,GAAOouD,GAAM37B,GAAc,SAC3BzyB,GAAO4hD,GAAMnvB,GAAc,SAC3BzyB,GAAOq6C,GAAM5nB,GAAc,SAC3BzyB,GAAO,CAACouD,GAAMU,IAAQr8B,GAAc,UACpCzyB,GAAO,CAACmiD,GAAM5H,GAASZ,GAAQqB,IAAWvoB,GAAc,WACxDzyB,GAAO4yC,GAAangB,GAAc,gBAClCzyB,GAAOo0C,GAAK3hB,GAAc,QAC1BzyB,GAAO,GAASyyB,GAAc,YAC9BzyB,GAAOy5C,GAAOhnB,GAAc,UAE5BzyB,GAAOg6C,GAAWvnB,GAAc,cAChCzyB,GAAO2nD,GAAQl1B,GAAc,WAC7Byf,GAAKlyC,OAttRIuxB,GAAmB,IAAIwiB,IAAIv6B,MA6iMpC,WACE,IAAIzK,EAAOkC,UAAU/K,OAAS,QAAsBwJ,IAAjBuB,UAAU,GAAmBA,UAAU,GAAK,GAC/EswC,GAAe91C,KAAKuF,MAAMuwC,GAAgBhwB,GAAmB,GAAG5X,OAAO5K,KAwqFzEsiD,CAAsB,CAACrd,GAAW3P,GAAOkM,GAAK9E,GAAQoI,GAAU+H,GAAYgE,KArqF1E5/C,GAAOuhD,GAAgB,CACrBzG,GAAI,SAAYlmC,GACd,OAAO,IAAIksC,IAAY/xC,KAAK1S,KAAKqgB,aAAa8O,KAAKnvB,KAAKwY,WAAWimC,GAAGlmC,IAExEi3B,UAAW,SAAmBra,GAE5B,OADAn1B,KAAKyB,KAAK0zB,GACHn1B,Q,OC9sQN,MAAMi1D,GAMT,YAAmBC,EAAuBC,GAAvB,KAAAD,SAAuB,KAAAC,QAJ1C,KAAAC,aAAuB,EASvB,QACI,OAAO,IAAIH,GAAQj1D,KAAKk1D,OAAQl1D,KAAKm1D,QCZtC,MAAME,GACT,YAAmBxzD,EAAkBC,GAAlB,KAAAD,IAAkB,KAAAC,IAIrC,QACI,OAAO,IAAIuzD,GAAOr1D,KAAK6B,EAAG7B,KAAK8B,GAgBnC,aACI,OAAOqB,KAAKmS,KAAKtV,KAAKs1D,IAAIt1D,OAG9B,oBACI,OAAOA,KAAKs1D,IAAIt1D,MAGZ,IAAIu1D,GACR,OAAOv1D,KAAK6B,EAAI0zD,EAAO1zD,EAAI7B,KAAK8B,EAAIyzD,EAAOzzD,EAS/C,QAAQyzD,GACJ,OAAOpyD,KAAKqyD,KAAKx1D,KAAKs1D,IAAIC,IAAWv1D,KAAK6J,OAAS0rD,EAAO1rD,SAG9D,YACI,IAAIA,EAAS1G,KAAKmS,KAAKtV,KAAK6B,EAAI7B,KAAK6B,EAAI7B,KAAK8B,EAAI9B,KAAK8B,GACvD9B,KAAK6B,EAAI7B,KAAK6B,EAAIgI,EAClB7J,KAAK8B,EAAI9B,KAAK8B,EAAI+H,EAGtB,SAAS4rD,GAEL,OADAz1D,KAAKke,YACEm3C,GAAOK,qBAAqB11D,KAAMy1D,GAG7C,gBAAgBF,EAAgBvtD,GAC5B,IAAInG,EAAI0zD,EAAO1zD,EAAImG,EAAMnG,EACrBC,EAAIyzD,EAAOzzD,EAAIkG,EAAMlG,EACzB,OAAO,IAAI,GAAMD,EAAGC,GAGxB,iBAAiB6zD,EAAiBC,GAC9B,IAAI/zD,EAAI8zD,EAAQ9zD,EAAI+zD,EAAQ/zD,EACxBC,EAAI6zD,EAAQ7zD,EAAI8zD,EAAQ9zD,EAC5B,OAAO,IAAIuzD,GAAOxzD,EAAGC,GAGzB,oBAAoB6zD,EAAiBC,GACjC,IAAI3sB,EAAM0sB,EAAQ9zD,EAAI+zD,EAAQ9zD,EAAI8zD,EAAQ/zD,EAAI8zD,EAAQ7zD,EAClDknC,EAAM2sB,EAAQ9zD,EAAI+zD,EAAQ/zD,EAAI8zD,EAAQ7zD,EAAI8zD,EAAQ9zD,EACtD,OAAOqB,KAAKynC,MAAM3B,EAAKD,IAAQ,IAAM7lC,KAAKq4B,IAI9C,cAAc+5B,EAAgBM,GAE1B,OAAO,IAAIR,GAAO,EAAG,GAGzB,gBAAgBM,EAAiBC,GAC7B,IAAI/zD,EAAI8zD,EAAQ9zD,EAAI+zD,EAAQ/zD,EACxBC,EAAI6zD,EAAQ7zD,EAAI8zD,EAAQ9zD,EAC5B,OAAO,IAAIuzD,GAAOxzD,EAAGC,GAGzB,sBAAsB+zD,EAAgBN,GAClC,OAAO,IAAIF,GAAO,EAAG,GAGzB,4BAA4BE,EAAgBM,GACxC,IAAIh0D,EAAI0zD,EAAO1zD,EAAIg0D,EACf/zD,EAAIyzD,EAAOzzD,EAAI+zD,EACnB,OAAO,IAAIR,GAAOxzD,EAAGC,GAGzB,gBAAgB6zD,EAAiBC,GAC7B,IAAI/zD,EAAI8zD,EAAQ9zD,EAAI+zD,EAAQ/zD,EACxBC,EAAI6zD,EAAQ7zD,EAAI8zD,EAAQ9zD,EAC5B,OAAO,IAAIuzD,GAAOxzD,EAAGC,GAGzB,gBAAgByzD,EAAgBE,GAE5B,OADAF,EAAOr3C,YACAm3C,GAAOK,qBAAqBH,EAAQE,GAG/C,0BAA0Bra,GACtB,IAAI0a,GAAkB1a,EAAQ,KAAO,IAAMj4C,KAAKq4B,IAChD,OAAO,IAAI65B,GAAOlyD,KAAK8lC,IAAI6sB,GAAiB3yD,KAAK6lC,IAAI8sB,KCtGtD,MAAM,GACT,YAAmBj0D,EAAkBC,GAAlB,KAAAD,IAAkB,KAAAC,IACjC9B,KAAK6B,EAAIA,EAAG7B,KAAK8B,EAAIA,EAGzB,QACI,OAAO,IAAI,GAAM9B,KAAK6B,EAAG7B,KAAK8B,GAKlC,IAAIkG,GACA,IAAInG,EAAI7B,KAAK6B,EAAImG,EAAMnG,EACnBC,EAAI9B,KAAK8B,EAAIkG,EAAMlG,EACvB,OAAO,IAAI,GAAMD,EAAGC,GAGxB,UAAUyzD,GACN,IAAI1zD,EAAI7B,KAAK6B,EAAI0zD,EAAO1zD,EACpBC,EAAI9B,KAAK8B,EAAIyzD,EAAOzzD,EACxB,OAAO,IAAI,GAAMD,EAAGC,GAGxB,eAAeyzD,GACX,IAAI1zD,EAAI7B,KAAK6B,EAAI0zD,EAAO1zD,EACpBC,EAAI9B,KAAK8B,EAAIyzD,EAAOzzD,EACxB,OAAO,IAAI,GAAMD,EAAGC,GAGxB,SAASkG,GACL,IAAInG,EAAI7B,KAAK6B,EAAImG,EAAMnG,EACnBC,EAAI9B,KAAK8B,EAAIkG,EAAMlG,EACvB,OAAO,IAAIuzD,GAAOxzD,EAAGC,GAGzB,OAAOkG,GACH,IAAInG,EAAI7B,KAAK6B,EAAImG,EAAMnG,EACnBC,EAAI9B,KAAK8B,EAAIkG,EAAMlG,EACvB,OAAO,IAAI,GAAMD,EAAGC,GAGxB,SAASkG,GACL,IAAInG,EAAI7B,KAAK6B,EAAImG,EAAMnG,EACnBC,EAAI9B,KAAK8B,EAAIkG,EAAMlG,EACvB,OAAO,IAAI,GAAMD,EAAGC,GAIxB,OAAOkG,GACH,IAAInG,EAAImG,EAAMnG,IAAM7B,KAAK6B,EACrBC,EAAIkG,EAAMlG,IAAM9B,KAAK8B,EAEzB,SAAID,IAAKC,GAMb,gBAAgBs8B,GACZ,OAAO,IAAI,GAAMA,EAAEv8B,EAAGu8B,EAAEt8B,GAE5B,qBAAqBi0D,EAAWC,GAC5B,IAAIn0D,EAAIk0D,EAAGl0D,EAAIm0D,EAAGn0D,EACdC,EAAIi0D,EAAGj0D,EAAIk0D,EAAGl0D,EAClB,OAAO,IAAIuzD,GAAOxzD,EAAGC,GAGzB,uBAAuBi0D,EAAWC,EAAWC,GACzCC,QAAQjrD,IAAI,QAAS8qD,EAAIC,EAAIC,GAC7B,IAAIhyD,EAAI+xD,EAAGn0D,EAAIk0D,EAAGl0D,EACdoD,EAAI+wD,EAAGl0D,EAAIi0D,EAAGj0D,EACdoD,EAAI+wD,EAAGp0D,EAAIm0D,EAAGn0D,EACdqC,EAAI+xD,EAAGn0D,EAAIk0D,EAAGl0D,EAGds5C,GAFQj4C,KAAKynC,MAAM3mC,EAAGgB,GACd9B,KAAKynC,MAAM1lC,EAAGhB,MACO,IAAMf,KAAKq4B,IAAO,IAGnD,OAFI4f,EAAQ,IAAGA,GAAS,KACpBA,EAAQ,MAAKA,GAAS,KACnBA,EAUX,uBAAuB2a,EAAWC,GAE9B,IACI/wB,EADS,GAAMkxB,cAAcJ,EAAIC,GACpBnsD,OACbosD,EAAK,IAAI,GAAMF,EAAGl0D,EAAKojC,EAAM,EAAI8wB,EAAGj0D,GACpCs5C,EAAQ,GAAMgb,gBAAgBH,EAAIF,EAAIC,GAG1C,OAFI5a,EAAQ,IAAGA,GAAS,KAEjBA,GClGR,MAAMib,GAQT,YAAYC,EAAqBC,EAAyC5W,EAAiB6W,GAL3F,KAAAC,SAAW,IAAIxmD,MACf,KAAAymD,aAA0C,GAC1C,KAAAC,OAAS,IAAI1mD,MACb,KAAA2mD,uBAAwB,EAGpB,IAAK,IAAI9sD,EAAI,EAAGA,EAAIwsD,EAASzsD,OAAQC,IAAK,CACtC,MAAM+sD,EAAUP,EAASxsD,GACzB9J,KAAKy2D,SAASrnD,KAAKynD,EAAQ3nB,SAG/B,IAAK,IAAIx2B,KAAO69C,EAAc,CAC1B,IAAI3+C,EAAQ2+C,EAAa79C,GAIzB1Y,KAAK02D,aAAah+C,GAAOd,EAAMs3B,QAGnC,IAAK,IAAIplC,EAAI,EAAGA,EAAI61C,EAAO91C,OAAQC,IAAK,CACpC,MAAM9B,EAAQ23C,EAAO71C,GACrB9J,KAAK22D,OAAOvnD,KAAKpH,EAAMknC,SAG3BlvC,KAAK42D,sBAAwBJ,GC7B9B,SAASM,GAASj1D,GACrB,MAAoB,iBAANA,EAIX,SAASk1D,GAAmB1+C,GAC/B,YAAqB,IAAVA,GAAkC,MAATA,GAC7BA,EAAM7H,QAAQ,MAAO,IAAI3G,OAAS,EAGtC,SAASw9B,GAAMzvB,EAAeo/C,GACjC,OAAOzhB,OAAOpyC,KAAKkkC,QAAQzvB,EAAM3D,WAAa,IAAM+iD,EAAS/iD,aAAe,KAAO+iD,EAAS/iD,YAGzF,SAASgjD,GAA4Bz9C,EAAQd,GAEhD,OAAOc,EAAOxF,OAAOwG,KAAKhB,GACrBwL,MAAKjE,GAAKA,EAAElQ,gBAAkB6H,EAAI7H,iBAIpC,SAASqmD,GAAgBnB,EAAWC,EAAWC,GAClD,IAAIhyD,EAAI+xD,EAAGn0D,EAAIk0D,EAAGl0D,EACdoD,EAAI+wD,EAAGl0D,EAAIi0D,EAAGj0D,EACdoD,EAAI+wD,EAAGp0D,EAAIm0D,EAAGn0D,EACdqC,EAAI+xD,EAAGn0D,EAAIk0D,EAAGl0D,EAGds5C,GAFQj4C,KAAKynC,MAAM3mC,EAAGgB,GACd9B,KAAKynC,MAAM1lC,EAAGhB,MACM,IAAMf,KAAKq4B,IAAM,IAKjD,OAJI4f,EAAQ,IAAGA,GAAS,KACpBA,EAAQ,MAAKA,GAAS,KACtBjnC,MAAMinC,KAAQA,EAAQ,GAEnBA,EAEJ,SAAS+b,GAAapB,EAAWC,GACpC,IAAI/wB,EAAc,iBAAoB8wB,EAAIC,GAAInsD,OAE9C,OAAOqtD,GADE,IAAI,GAAMnB,EAAGl0D,EAAIojC,EAAM,EAAG8wB,EAAGj0D,GACXi0D,EAAIC,GAG5B,SAASoB,GAAgBrB,EAAWC,GACvC,IACI/wB,EADY,iBAAoB8wB,EAAIC,GAC5BnsD,OAERuxC,EAAQ8b,GADH,IAAI,GAAMnB,EAAGl0D,EAAIojC,EAAM,EAAG8wB,EAAGj0D,GACNi0D,EAAIC,GAEpC,OADI5a,EAAQ,IAAGA,GAAS,KACjBA,EAGJ,SAASic,GAAez2C,EAAcC,EAAY02B,GACrD,OAAO12B,EAAIy2C,UAAUz2C,EAAI02C,SAAS32C,GAAO60C,SAASle,IAI/C,SAASigB,GAAazB,EAAWC,EAAWC,EAAW7a,EAAeqc,GAEzE,IAAIC,GAAkB,GAAKv0D,KAAK6H,IAAIowC,GAAS,IAAM,IAAMj4C,KAAKq4B,IAC1Dk8B,EAASv0D,KAAKq4B,GAAK,EAAI,OAAQk8B,GAAU,KAC7C,IAKIC,EALAC,EAAqBz0D,KAAKC,IAAIq0D,EAAYt0D,KAAK2vC,IAAI4kB,GAAUD,GAC7DI,EAAqB10D,KAAK2vC,IAAI4kB,GAAUD,EACxCK,EAAqBT,GAAetB,EAAIC,EAAI,EAAI6B,GAAYN,SAASF,GAAetB,EAAIC,EAAI,EAAI4B,IAEhGG,EAAeV,GAAetB,EAAIC,EAAI,EAAI4B,GAE1CI,EAAoBb,GAAapB,EAAIgC,GACrCE,GAAa,GAASD,EACtB5c,EAAQ,IAAG6c,EAAK,GAAKD,GACrBC,EAAK,IAAGA,GAAM,KACdA,EAAK,MAAKA,GAAM,KACpB,IAAIC,EAAS/0D,KAAK6H,IAAIitD,IAAO,IAAM90D,KAAKq4B,IAExC,GAAa,GAAT4f,EAAY,CACZ,IAAI+c,EAAKJ,EAAM7oB,QACfipB,EAAGt2D,EAAIs2D,EAAGt2D,EAAIsB,KAAK6lC,IAAIkvB,IAAwB,EAAbT,GAClCU,EAAGr2D,EAAIq2D,EAAGr2D,EAAIqB,KAAK8lC,IAAIivB,IAAwB,EAAbT,GAClCE,EAAQQ,EAAGjpB,aAEXyoB,EAAQN,GAAepB,EAAID,EAAI,EAAI6B,GACnCF,EAAM91D,EAAI81D,EAAM91D,EAAIi2D,EAAWj2D,EAC/B81D,EAAM71D,EAAI61D,EAAM71D,EAAIg2D,EAAWh2D,EAGnC,IAAIs2D,EAAqBjB,GAAalB,EAAI0B,GACtCU,EAAMN,EAAM7oB,QAChBmpB,EAAIx2D,EAAIw2D,EAAIx2D,EAAIsB,KAAK6lC,IAAIkvB,GAAUT,EACnCY,EAAIv2D,EAAIu2D,EAAIv2D,EAAIqB,KAAK8lC,IAAIivB,GAAUT,EAEnC,IAAIa,EAAK,GAAKF,EACVhd,EAAQ,IAAGkd,GAAK,GAASF,GACzBE,EAAK,IAAGA,GAAM,KACdA,EAAK,MAAKA,GAAM,KACpB,IAAIC,EAASp1D,KAAK6H,IAAIstD,IAAO,IAAMn1D,KAAKq4B,IAEpCg9B,EAAMH,EAAInpB,QAId,OAHAspB,EAAI32D,EAAIw2D,EAAIx2D,EAAIsB,KAAK6lC,IAAIuvB,GAAUd,EACnCe,EAAI12D,EAAIu2D,EAAIv2D,EAAIqB,KAAK8lC,IAAIsvB,GAAUd,EACnCE,EAAQa,EAAItpB,QACL,CAAC6oB,EAAOJ,GA8DZ,SAASc,GAAS1C,EAAWC,GAChC,IAAI0C,EAAwB,IAAIrD,GAAO,EAAG,GAEtCsD,EAAwB,iBAAoB3C,EAAID,GAEpD,OADA4C,EAAcz6C,YACP,EAAIm3C,GAAOuD,aAAaF,EAAeC,GAG3C,SAASE,GAAmBzd,GAC/B,IAAI0a,GAAkB1a,EAAQ,KAAO,IAAMj4C,KAAKq4B,IAChD,OAAO,IAAI65B,GAAOlyD,KAAK8lC,IAAI6sB,GAAiB3yD,KAAK6lC,IAAI8sB,IAGlD,SAASgD,KACZ,MAAO,CACH,iBACA,mBACA,iBACA,OACA,SACA,QACF77C,SAAS87C,UAAUC,WAEbD,UAAUn5C,UAAU3C,SAAS,QAAU,eAAgB3d,SAI5D,SAAS25D,KAEZ,OADUH,KAIHA,GAFK,sEAAsE3+C,KAAK4+C,UAAUn5C,WC7LrG,IAAIf,GAA2B,oBAAX1Y,OAAyBA,OAAS,KAClD+yD,GAAiB,OAAXr6C,GACN,GAAYq6C,QAAwB7lD,EAAlBwL,GAAOvf,SAUzB65D,GAAa,aACbC,GAAO,WAAc,OAAO,GAO5BC,GAAOH,GACL,OACE,CAAC,GAAI,WAAY,QAAS,OACvBn2D,QAAO,SAAUiP,GACd,IAAI5B,EAAK,GAASgD,cAAc,OAGhC,OAFAhD,EAAG1Q,MAAM+iC,QAAU,SAAWzwB,EAAS,cAE9B5B,EAAG1Q,MAAMmK,UAErB+9C,QAAW,OAGlB,GAAW,SAAU5kD,GAAK,MAAoB,iBAANA,GAAkBA,aAAaqR,QAKvEnF,GAAoB,SAAUkB,GAC9B,GAAI,GAASA,GAAK,CACd,IAAIkpD,EAAM,GAASj6D,cAAc+Q,GACjC,IAAKkpD,EACD,MAAM,IAAI/sD,MAAO,YAAc6D,EAAK,gCAExC,OAAOkpD,EAGX,OAAOlpD,GAIPmpD,GAAY,SAAU/3D,EAASg4D,EAAUC,GACzC,IAAI7hD,EAAQpW,EAAQg4D,GACpB,YAAcnmD,IAAVuE,EACOA,EAEJ6hD,GAGPC,GAAgB,SAAUC,EAAYC,EAASC,EAAQC,GACvD,GAAIF,EAAS,CACT,GAAoB,QAAhBE,EACA,OAAO,EAEX,GAAoB,WAAhBA,EACA,OAAOH,EAAa,OAErB,GAAIE,EAAQ,CACf,GAAoB,UAAhBC,EACA,OAAO,EAEX,GAAoB,WAAhBA,EACA,OAAOH,EAAa,EAI5B,OAAOA,GAIPI,GAAkB,SAAUjwD,EAAGkwD,GAC/B,IAAIC,EAAM,GAAS7mD,cAAc,OAEjC,OADA6mD,EAAI58B,UAAY,iBAAmB28B,EAC5BC,GAGPC,GAAwB,SAAUC,EAAK7oC,EAAM8oC,GAC7C,IAAI16D,EAAQ,GAQZ,OANK,GAAS4xB,GAGV5xB,EAAMy6D,GAAO7oC,EAFb5xB,EAAMy6D,GAAOd,GAAO,IAAM/nC,EAAO,OAAS8oC,EAAU,MAKjD16D,GAGP26D,GAAuB,SAAUF,EAAKC,GACtC,IAAIv4C,EAEJ,OAAUA,EAAM,IAAQs4C,GAAQC,EAAU,KAAOv4C,GA8oBrD,SAhnBY,SAAUy4C,EAAW94D,GAG7B,QAFiB,IAAZA,IAAqBA,EAAU,IAEhC03D,GAAO,MAAO,GAElB,IACIqB,EACAC,EACApoC,EACAqoC,EACAC,EACAC,EANAtL,EAAMiL,EASNrqD,MAAMkf,OACNkgC,EAAMp/C,MAAMkf,KAAKkgC,IAMrB,IACInxB,EADehvB,GAAkBmgD,EAAI,IACfluD,WACtBy5D,EAAc1lB,iBAAmBA,iBAAiBhX,GAAU,KAC5D28B,EAAsBD,EAAcA,EAAYE,cAAgB,KAGhEC,EAAQxB,GAAU/3D,EAAS,UAAY6tD,EAAIpsD,KAAI,WAAc,OAAO,IAAMosD,EAAIxlD,UAI9EmxD,EAAUzB,GAAU/3D,EAAS,UAAW,KACxCy5D,EAAWhrD,MAAMiP,QAAQ87C,GAAWA,EAAU3L,EAAIpsD,KAAI,WAAc,OAAO+3D,KAG3EE,EAAc3B,GAAU/3D,EAAS,eAAe,GAChDm4D,EAAaJ,GAAU/3D,EAAS,aAAc,IAC9Cs4D,EAAcP,GAAU/3D,EAAS,cAAe,UAChD25D,EAAa5B,GAAU/3D,EAAS,aAAc,IAC9C45D,EAAe7B,GAAU/3D,EAAS,eAAgB,GAClD65C,EAAYke,GAAU/3D,EAAS,YAAa23D,IAC5CkC,EAAS9B,GACT/3D,EACA,SACA65C,IAAc8d,GAAa,aAAe,cAE1CmC,EAAS/B,GAAU/3D,EAAS,SAAUu4D,IACtCwB,EAAehC,GACf/3D,EACA,eACA04D,IAEAsB,EAAcjC,GAAU/3D,EAAS,cAAe64D,IA8BpD,SAASoB,EAAerrD,EAAIkhB,EAAM8oC,EAAStwD,GAKvC,IAAIpK,EAAQ67D,EAAahB,EAAWjpC,EAAM8oC,EAAStwD,GAEnDkK,OAAOwG,KAAK9a,GAAOmlB,SAAQ,SAAUnR,GAEjCtD,EAAG1Q,MAAMgU,GAAQhU,EAAMgU,MAa/B,SAAS1E,IACL,OAAO2rD,EAAS13D,KAAI,SAAUqO,GAAW,OAAOA,EAAQggB,QAK5D,SAASoqC,EAAiBv3D,GACtB,MAAI,YAAaA,EAAYA,EAAE0Q,QAAQ,GAAG2lD,GACnCr2D,EAAEq2D,GASb,SAASmB,EAAOpkB,GACZ,IAAItzC,EAAI02D,EAAS36D,KAAKiE,GAClBgB,EAAI01D,EAAS36D,KAAKiF,GAClB22D,EAAa33D,EAAEqtB,KAAOrsB,EAAEqsB,KAE5BrtB,EAAEqtB,KAAQimB,EAASv3C,KAAKsxB,KAAQsqC,EAChC32D,EAAEqsB,KAAOsqC,EAAcrkB,EAASv3C,KAAKsxB,KAAQsqC,EAE7CH,EAAex3D,EAAEqN,QAASrN,EAAEqtB,KAAMtxB,KAAgB,GAAGiE,EAAE6F,GACvD2xD,EAAex2D,EAAEqM,QAASrM,EAAEqsB,KAAMtxB,KAAgB,GAAGiF,EAAE6E,GAiB3D,SAAS+xD,EAAK13D,GACV,IAAIozC,EACAtzC,EAAI02D,EAAS36D,KAAKiE,GAClBgB,EAAI01D,EAAS36D,KAAKiF,GAEjBjF,KAAK87D,WAKVvkB,EACImkB,EAAiBv3D,GACjBnE,KAAK4gB,OACJ5gB,KAAgB,GAAIA,KAAK+7D,YAE1BX,EAAe,IACf7jB,EAASp0C,KAAKkkC,MAAMkQ,EAAS6jB,GAAgBA,GAM7C7jB,GAAUtzC,EAAE+2D,QAAUG,EAAan7D,KAAgB,GACnDu3C,EAAStzC,EAAE+2D,QAAUh7D,KAAgB,GAErCu3C,GACAv3C,KAAKsxB,MAAQrsB,EAAE+1D,QAAUG,EAAan7D,KAAgB,MAEtDu3C,EAASv3C,KAAKsxB,MAAQrsB,EAAE+1D,QAAUh7D,KAAgB,KAItD27D,EAAOz1D,KAAKlG,KAAMu3C,GAIlBgiB,GAAU/3D,EAAS,SAAU43D,GAA7BG,CAAmCvqD,MAgBvC,SAASgtD,IAEL,IAAI/3D,EAAI02D,EAAS36D,KAAKiE,GAAGqN,QACrBrM,EAAI01D,EAAS36D,KAAKiF,GAAGqM,QAErB2qD,EAAUh4D,EAAuB,wBACjCi4D,EAAUj3D,EAAuB,wBAErCjF,KAAKsxB,KACD2qC,EAAQ1B,GACR2B,EAAQ3B,GACRv6D,KAAgB,GAChBA,KAAgB,GACpBA,KAAK4gB,MAAQq7C,EAAQ7pC,GACrBpyB,KAAK6gB,IAAMo7C,EAAQxB,GAiCvB,SAAS0B,EAAUC,GAGf,IAAIC,EAjCR,SAAmB/qD,GAGf,IAAK4jC,iBAAoB,OAAO,KAEhC,IAAIonB,EAAgBpnB,iBAAiB5jC,GAErC,IAAKgrD,EAAiB,OAAO,KAE7B,IAAIhrC,EAAOhgB,EAAQopD,GAEnB,OAAa,IAATppC,EAAqB,KAGrBA,GADA+pB,IAAc8d,GAEVj2D,WAAWo5D,EAAcC,aACzBr5D,WAAWo5D,EAAcE,cAGzBt5D,WAAWo5D,EAAcG,YACzBv5D,WAAWo5D,EAAcI,eAahBC,CAAUz+B,GAC3B,GAAmB,OAAfm+B,EACA,OAAOD,EAGX,GAAInB,EAASt3B,QAAO,SAAU1/B,EAAGgB,GAAK,OAAOhB,EAAIgB,IAAM,GAAKo3D,EACxD,OAAOD,EAKX,IAAIQ,EAAe,EACfC,EAAU,GAEVC,EAAaV,EAAYn5D,KAAI,SAAUquB,EAAMxnB,GAE7C,IAAIizD,EAAaV,EAAa/qC,EAAQ,IAClC0rC,EAAoBtD,GACpBC,EACM,IAAN7vD,EACAA,IAAMsyD,EAAYvyD,OAAS,EAC3BiwD,GAEAmD,EAAiBhC,EAASnxD,GAAKkzD,EAInC,OAAID,EAAYE,GACZL,GAAgBK,EAAiBF,EACjCF,EAAQztD,KAAK,GACN6tD,IAIXJ,EAAQztD,KAAK2tD,EAAYE,GAClBF,MAIX,OAAqB,IAAjBH,EACOR,EAGJU,EAAW75D,KAAI,SAAU85D,EAAWjzD,GACvC,IAAIozD,EAAeH,EAInB,GAAIH,EAAe,GAAKC,EAAQ/yD,GAAK8yD,EAAe,EAAG,CACnD,IAAIO,EAAch6D,KAAKC,IACnBw5D,EACAC,EAAQ/yD,GAAK8yD,GAIjBA,GAAgBO,EAChBD,EAAeH,EAAYI,EAI/B,OAAQD,EAAeb,EAAc,OAK7C,SAASe,IACL,IAAIt+D,EAAOkB,KACPiE,EAAI02D,EAAS77D,EAAKmF,GAAGqN,QACrBrM,EAAI01D,EAAS77D,EAAKmG,GAAGqM,QAErBxS,EAAKg9D,UACLvC,GAAU/3D,EAAS,YAAa43D,GAAhCG,CAAsCvqD,KAG1ClQ,EAAKg9D,UAAW,EAGhBj9C,GAA0B,oBAAE,UAAW/f,EAAK+vB,MAC5ChQ,GAA0B,oBAAE,WAAY/f,EAAK+vB,MAC7ChQ,GAA0B,oBAAE,cAAe/f,EAAK+vB,MAChDhQ,GAA0B,oBAAE,YAAa/f,EAAK++C,MAC9Ch/B,GAA0B,oBAAE,YAAa/f,EAAK++C,MAG9C/+C,EAAK+vB,KAAO,KACZ/vB,EAAK++C,KAAO,KAEZ55C,EAAqB,oBAAE,cAAem1D,IACtCn1D,EAAqB,oBAAE,YAAam1D,IACpCn0D,EAAqB,oBAAE,cAAem0D,IACtCn0D,EAAqB,oBAAE,YAAam0D,IAEpCn1D,EAAEvE,MAAM29D,WAAa,GACrBp5D,EAAEvE,MAAM49D,iBAAmB,GAC3Br5D,EAAEvE,MAAM69D,cAAgB,GACxBt5D,EAAEvE,MAAM89D,cAAgB,GAExBv4D,EAAEvF,MAAM29D,WAAa,GACrBp4D,EAAEvF,MAAM49D,iBAAmB,GAC3Br4D,EAAEvF,MAAM69D,cAAgB,GACxBt4D,EAAEvF,MAAM89D,cAAgB,GAExB1+D,EAAKw8D,OAAO57D,MAAM27D,OAAS,GAC3Bv8D,EAAKo/B,OAAOx+B,MAAM27D,OAAS,GAC3B,GAAStnB,KAAKr0C,MAAM27D,OAAS,GAMjC,SAASoC,EAAct5D,GAEnB,KAAI,WAAYA,IAAkB,IAAbA,EAAEu5D,OAAvB,CAKA,IAAI5+D,EAAOkB,KACPiE,EAAI02D,EAAS77D,EAAKmF,GAAGqN,QACrBrM,EAAI01D,EAAS77D,EAAKmG,GAAGqM,QAGpBxS,EAAKg9D,UACNvC,GAAU/3D,EAAS,cAAe43D,GAAlCG,CAAwCvqD,KAI5C7K,EAAEqG,iBAGF1L,EAAKg9D,UAAW,EAIhBh9D,EAAK++C,KAAOge,EAAKx3B,KAAKvlC,GACtBA,EAAK+vB,KAAOuuC,EAAa/4B,KAAKvlC,GAG9B+f,GAAuB,iBAAE,UAAW/f,EAAK+vB,MACzChQ,GAAuB,iBAAE,WAAY/f,EAAK+vB,MAC1ChQ,GAAuB,iBAAE,cAAe/f,EAAK+vB,MAC7ChQ,GAAuB,iBAAE,YAAa/f,EAAK++C,MAC3Ch/B,GAAuB,iBAAE,YAAa/f,EAAK++C,MAG3C55C,EAAkB,iBAAE,cAAem1D,IACnCn1D,EAAkB,iBAAE,YAAam1D,IACjCn0D,EAAkB,iBAAE,cAAem0D,IACnCn0D,EAAkB,iBAAE,YAAam0D,IAEjCn1D,EAAEvE,MAAM29D,WAAa,OACrBp5D,EAAEvE,MAAM49D,iBAAmB,OAC3Br5D,EAAEvE,MAAM69D,cAAgB,OACxBt5D,EAAEvE,MAAM89D,cAAgB,OAExBv4D,EAAEvF,MAAM29D,WAAa,OACrBp4D,EAAEvF,MAAM49D,iBAAmB,OAC3Br4D,EAAEvF,MAAM69D,cAAgB,OACxBt4D,EAAEvF,MAAM89D,cAAgB,OAGxB1+D,EAAKw8D,OAAO57D,MAAM27D,OAASA,EAC3Bv8D,EAAKo/B,OAAOx+B,MAAM27D,OAASA,EAC3B,GAAStnB,KAAKr0C,MAAM27D,OAASA,EAG7BW,EAAe91D,KAAKpH,GAGpBA,EAAKi9D,WAAaL,EAAiBv3D,GAAKrF,EAAK+hB,KAzW7Cw6B,IAAc8d,IACdoB,EAAY,QACZC,EAAa,UACbpoC,EAAW,OACXqoC,EAAc,QACdC,EAAa,eACQ,aAAdrf,IACPkf,EAAY,SACZC,EAAa,UACbpoC,EAAW,MACXqoC,EAAc,SACdC,EAAa,gBAkWjBK,EAAQoB,EAAUpB,GAsBlB,IAAI4C,EAAQ,GA8FZ,SAASC,EAAYtsD,GACjB,IAAIuoD,EAASvoD,EAAQxH,IAAM6zD,EAAM9zD,OAC7Bg0D,EAAOhE,EAAS8D,EAAMrsD,EAAQxH,EAAI,GAAK6zD,EAAMrsD,EAAQxH,GAEzDkyD,EAAe91D,KAAK23D,GAEpB,IAAIvsC,EAAOuoC,EACLgE,EAAKvsC,KAAOhgB,EAAQ0pD,QAAU6C,EAAgB,GAC9CvsD,EAAQ0pD,QAAU6C,EAAgB,GAExClC,EAAOz1D,KAAK23D,EAAMvsC,GAgEtB,OAvKAqpC,EAAWtL,EAAIpsD,KAAI,SAAUmX,EAAItQ,GAE7B,IAOI+zD,EAPAvsD,EAAU,CACVA,QAASpC,GAAkBkL,GAC3BkX,KAAMypC,EAAMjxD,GACZkxD,QAASC,EAASnxD,GAClBA,EAAGA,GAKP,GAAIA,EAAI,KAEJ+zD,EAAO,CACH55D,EAAG6F,EAAI,EACP7E,EAAG6E,EACHgyD,UAAU,EACVzgB,UAAWA,EACXnd,OAAQA,IAGI,GAAIw7B,GAChBC,EACA7vD,EAAI,GAAM,GACV,EACAgwD,GAEJ+D,EAAgB,GAAInE,GAChBC,GACA,EACA7vD,IAAMulD,EAAIxlD,OAAS,EACnBiwD,GAKwB,gBAAxBe,GACwB,mBAAxBA,GACF,CACE,IAAIiD,EAAOD,EAAK55D,EAChB45D,EAAK55D,EAAI45D,EAAK54D,EACd44D,EAAK54D,EAAI64D,EASjB,GAAIh0D,EAAI,EAAG,CACP,IAAIi0D,EAAgBzC,EAAOxxD,EAAGuxC,EAAW/pC,EAAQA,UAjZzD,SAAuBysD,EAAe3D,EAAStwD,GAC3C,IAAIpK,EAAQ87D,EAAYjB,EAAWH,EAAStwD,GAE5CkK,OAAOwG,KAAK9a,GAAOmlB,SAAQ,SAAUnR,GAEjCqqD,EAAcr+D,MAAMgU,GAAQhU,EAAMgU,MA6YlCsqD,CAAcD,EAAepE,EAAY7vD,GAGzC+zD,EAAwB,GAAIJ,EAAcp5B,KAAKw5B,GAG/CE,EAA8B,iBAC1B,YACAF,EAAwB,IAE5BE,EAA8B,iBAC1B,aACAF,EAAwB,IAG5B3/B,EAAO7sB,aAAa0sD,EAAezsD,EAAQA,SAE3CusD,EAAKvC,OAASyC,EAqBlB,OAlBAtC,EACInqD,EAAQA,QACRA,EAAQggB,KACRooC,GACIC,EACM,IAAN7vD,EACAA,IAAMulD,EAAIxlD,OAAS,EACnBiwD,GAEJhwD,GAKAA,EAAI,GACJ6zD,EAAMvuD,KAAKyuD,GAGRvsD,MAgBFuT,SAAQ,SAAUvT,GACvB,IAAI2sD,EAAe3sD,EAAQA,QAA6B,wBAAIipD,GAExD0D,EAAe3sD,EAAQ0pD,UACnBE,EACA0C,EAAYtsD,GAGZA,EAAQ0pD,QAAUiD,MAqDvB,CACHC,SAjDJ,SAAkBC,GACd,IAAIC,EAAUjC,EAAUgC,GACxBC,EAAQv5C,SAAQ,SAAUw5C,EAASv0D,GAC/B,GAAIA,EAAI,EAAG,CACP,IAAI+zD,EAAOF,EAAM7zD,EAAI,GAEjB7F,EAAI02D,EAASkD,EAAK55D,GAClBgB,EAAI01D,EAASkD,EAAK54D,GAEtBhB,EAAEqtB,KAAO8sC,EAAQt0D,EAAI,GACrB7E,EAAEqsB,KAAO+sC,EAET5C,EAAex3D,EAAEqN,QAASrN,EAAEqtB,KAAMusC,EAAgB,GAAG55D,EAAE6F,GACvD2xD,EAAex2D,EAAEqM,QAASrM,EAAEqsB,KAAMusC,EAAgB,GAAG54D,EAAE6E,QAqC/DkF,SAAUA,EACVsvD,SAAU,SAAkBx0D,GACxB8zD,EAAYjD,EAAS7wD,KAEzB6D,QApCJ,SAAiB4wD,EAAgBC,GAC7Bb,EAAM94C,SAAQ,SAAUg5C,GAcpB,IAbuB,IAAnBW,EACAX,EAAK3/B,OAAO98B,YAAYy8D,EAAKvC,SAE7BuC,EAAKvC,OAA0B,oBAC3B,YACAuC,EAAwB,IAE5BA,EAAKvC,OAA0B,oBAC3B,aACAuC,EAAwB,MAIT,IAAnBU,EAAyB,CACzB,IAAI7+D,EAAQ67D,EACRhB,EACAsD,EAAK55D,EAAEqtB,KACPusC,EAAgB,IAGpB7pD,OAAOwG,KAAK9a,GAAOmlB,SAAQ,SAAUnR,GACjCinD,EAASkD,EAAK55D,GAAGqN,QAAQ5R,MAAMgU,GAAQ,GACvCinD,EAASkD,EAAK54D,GAAGqM,QAAQ5R,MAAMgU,GAAQ,WAanDwqB,OAAQA,EACRy/B,MAAOA,I,0VC/uBR,MAAMc,GA2CT,YAAYC,EAA2CC,GAzCvD,YAAe,wBACf,KAAAC,YAAc,GAEd,aAAe,GACf,aAAiB,GACjB,YAAyB,GACzB,aAAc,GACd,YAAc,IACd,aAAsB,GACtB,aAAmB,GACnB,YAAmB,KACnB,aAAoB,GACpB,YAAoB,GACpB,YAAc,KACd,YAAkB,WAClB,YAAa,IACb,YAAc,IACd,YAAiB,IACjB,oBACA,oBACA,oBAEA,YAAgBt/D,SAASD,cAAc,mBAEvC,oBACA,oBACA,oBACA,oBACA,oBACA,oBACA,oBACA,oBACA,oBACA,oBACA,oBACA,oBACA,oBAIA,oBAEI,IAAIw/D,EAAK7+D,KACTA,KAAK8+D,qBAAuBJ,EAC5B,GAAA1+D,KAAI,GAAsB2+D,GAM1B,IAAI5D,EAAagE,aAAaC,QAAQ,mBAAqBH,EAAGI,kBAE1DlE,EADAA,EACQr1C,KAAKud,MAAM83B,GAEX,CAAC,GAAI,IAGjB,GAAA8D,EAAE,GAAa,GAAM,CAAC,YAAa,YAAa,CAC5C9D,MAAOA,EACPC,QAAS,IACTkE,OAAQ,WACJ,GAAAL,EAAA,SAAAA,IAEJM,UAAW,SAAUpE,GACjB,GAAA8D,EAAA,SAAAA,GACAE,aAAaK,QAAQ,mBAAqBP,EAAGI,iBAAkBv5C,KAAKE,UAAUm1C,QAItF50D,OAAOk5D,SAAW,WACd,GAAI,GAAJ,MAAkB,CACd,IAAItE,EAAagE,aAAaC,QAAQ,mBAAqBH,EAAGI,kBAE1DlE,EADAA,EACQr1C,KAAKud,MAAM83B,GAEX,CAAC,GAAI,IAEjB,GAAA8D,EAAA,IAAaX,SAASnD,GAE1B,GAAA8D,EAAA,SAAAA,IAGJ7+D,KAAKs/D,cACLt/D,KAAKyB,OAIT,kBACI,OAAO,GAAP,SAEJ,gBAAuBuB,GACnB,GAAAhD,KAAI,GAAgBgD,GACpBhD,KAAKu/D,sBACLv/D,KAAKw/D,eAGT,WACI,OAAO,GAAP,SAEJ,SAAgBx8D,GACZ,GAAAhD,KAAI,GAASgD,GACbhD,KAAKu/D,sBACLv/D,KAAKw/D,eAGT,oBACI,OAAO,GAAP,SAEJ,kBAAyBx8D,GACrB,GAAAhD,KAAI,GAAkBgD,GACtBhD,KAAKu/D,sBACLv/D,KAAKw/D,eAGT,iBACI,OAAO,GAAP,SAEJ,eAAsBx8D,GAClB,GAAAhD,KAAI,GAAegD,GACnBhD,KAAKu/D,sBACLv/D,KAAKw/D,eAGT,gBACI,OAAO,GAAP,SAEJ,cAAqBx8D,GACjB,GAAAhD,KAAI,GAAegD,GACnBhD,KAAKu/D,sBACLv/D,KAAKw/D,eAGT,yBACI,OAAO,GAAP,SAEJ,uBAA8Bx8D,GAC1B,GAAAhD,KAAI,GAAuBgD,GAC3BhD,KAAKu/D,sBACLv/D,KAAKw/D,eAGT,sBACI,OAAO,GAAP,SAEJ,oBAA2Bx8D,GACvB,GAAAhD,KAAI,GAAoBgD,GACxBhD,KAAKu/D,sBACLv/D,KAAKw/D,eAGT,sBACI,OAAO,GAAP,SAEJ,oBAA2Bx8D,GACvB,GAAAhD,KAAI,GAAoBgD,GAG5B,uBACI,OAAO,GAAP,SAEJ,qBAA4BA,GACxB,GAAAhD,KAAI,GAAqBgD,GACzBhD,KAAKu/D,sBACLv/D,KAAKw/D,eAGT,uBACI,OAAO,GAAP,SAEJ,qBAA4Bx8D,GACxB,GAAAhD,KAAI,GAAqBgD,GACzBhD,KAAKu/D,sBACLv/D,KAAKw/D,eAGT,iBACI,OAAO,GAAP,SAEJ,eAAsBx8D,GAClB,GAAAhD,KAAI,GAAegD,GACnBhD,KAAKu/D,sBACLv/D,KAAKw/D,eAGT,sBACI,OAAO,GAAP,SAEJ,oBAA2Bx8D,GACvB,GAAAhD,KAAI,GAAmBgD,GACvBhD,KAAKu/D,sBACLv/D,KAAKw/D,eAGT,O,QACI,IAAIX,EAAK7+D,KACT,GAAA6+D,EAAE,GAAyBv/D,SAASmgE,eAAe,oBACnD,aAAAZ,EAAA,oBAA0Bv+D,iBAAiB,UAAU,WACjD,GAAAu+D,EAAE,GAAgB7+D,KAAK0/D,SACvBb,EAAGC,uBACHD,EAAGW,kBAGP,GAAAX,EAAE,GAAcv/D,SAASmgE,eAAe,aACxC,GAAAZ,EAAA,IAAcv+D,iBAAiB,UAAU,WACrC,GAAAu+D,EAAE,GAAS7+D,KAAK0/D,SAChBb,EAAGC,uBACHD,EAAGW,kBAGP,GAAAX,EAAE,GAAuBv/D,SAASmgE,eAAe,sBACjD,aAAAZ,EAAA,oBAAwBv+D,iBAAiB,UAAU,WAC/C,GAAAu+D,EAAE,IAAmB7+D,KAAK4X,OAC1BinD,EAAGC,uBACHD,EAAGW,kBAGP,GAAAX,EAAE,GAAmBv/D,SAASmgE,eAAe,kBAC7C,GAAAZ,EAAA,IAAmBv+D,iBAAiB,UAAU,WAC1C,GAAAu+D,EAAE,GAAe7+D,KAAK0/D,SACtBb,EAAGW,eACHX,EAAGC,0BAGP,GAAAD,EAAE,GAAmBv/D,SAASmgE,eAAe,kBAC7C,GAAAZ,EAAA,IAAmBv+D,iBAAiB,UAAU,WAC1C,GAAAu+D,EAAE,IAAgB7+D,KAAK4X,OACvBinD,EAAGC,uBACHD,EAAGW,kBAGP,GAAAX,EAAE,GAA4Bv/D,SAASmgE,eAAe,2BACtD,GAAAZ,EAAA,IAA4Bv+D,iBAAiB,UAAU,WACnD,GAAAu+D,EAAE,GAAuB7+D,KAAK0/D,SAC9Bb,EAAGC,uBACHD,EAAGW,kBAGP,GAAAX,EAAE,GAAyBv/D,SAASmgE,eAAe,6BACnD,GAAAZ,EAAA,IAAyBv+D,iBAAiB,UAAU,WAChD,GAAAu+D,EAAE,GAAoB7+D,KAAK0/D,SAC3Bb,EAAGC,uBACHD,EAAGW,kBAGP,GAAAX,EAAE,GAAyBv/D,SAASmgE,eAAe,wBACnD,GAAAZ,EAAA,IAAyBv+D,iBAAiB,UAAU,WAChD,GAAAu+D,EAAE,IAAqB7+D,KAAK4X,OAC5BinD,EAAGC,uBACHD,EAAGW,kBAGP,GAAAX,EAAE,GAA0Bv/D,SAASmgE,eAAe,yBACpD,GAAAZ,EAAA,IAA0Bv+D,iBAAiB,UAAU,WACjD,GAAAu+D,EAAE,GAAqB7+D,KAAK0/D,SAC5Bb,EAAGC,uBACHD,EAAGW,kBAGP,GAAAX,EAAE,GAA0Bv/D,SAASmgE,eAAe,yBACpD,GAAAZ,EAAA,IAA0Bv+D,iBAAiB,UAAU,WACjD,GAAAu+D,EAAE,IAAsB7+D,KAAK4X,OAC7BinD,EAAGC,uBACHD,EAAGW,kBAGP,GAAAX,EAAE,GAAoBv/D,SAASmgE,eAAe,mBAC9C,GAAAZ,EAAA,IAAoBv+D,iBAAiB,UAAU,WAC3C,GAAAu+D,EAAE,IAAgB7+D,KAAK4X,MAAQinD,EAAGD,aAClCC,EAAGC,uBACHD,EAAGW,kBAGP,GAAAX,EAAE,GAAwBv/D,SAASmgE,eAAe,uBAClD,GAAAZ,EAAA,IAAwBv+D,iBAAiB,UAAU,WAC/C,GAAAu+D,EAAE,GAAmB7+D,KAAK4X,OAC1B,GAAAinD,EAAA,IAAiBn/D,MAAMigE,gBAAkB,GAAH,MACtCd,EAAGW,kBAGmBlgE,SAASmgE,eAAe,qBAC9Bn/D,iBAAiB,SAAS,WAC1Cy+D,aAAaa,WAAW,GAAD,OACvBf,EAAGgB,mBAGP,IAAIC,EAAyBxgE,SAASmgE,eAAe,oBACrDK,WAAwBx/D,iBAAiB,SAAS,WAC9C,IAAIuB,EAAIvC,SAASmgE,eAAe,wBACrB59D,EAAGnC,MAAMijB,QACpB9gB,EAAGnC,MAAMijB,QAA+B,SAArB9gB,EAAGnC,MAAMijB,QAAqB,QAAU,OAC3D3iB,KAAK+/D,UAAiC,SAArBl+D,EAAGnC,MAAMijB,QAAqB,gBAAkB,mBAGrE3iB,KAAKu/D,sBAKT,gBACI,GAAAv/D,KAAI,IAAS,GACb,GAAAA,KAAI,GAAkB,GACtB,GAAAA,KAAI,IAAgB,GACpB,GAAAA,KAAI,IAAe,GAEfi5D,KACA,GAAAj5D,KAAI,GAAe,IAEnB,GAAAA,KAAI,GAAe,IAGvB,GAAAA,KAAI,IAAuB,GAC3B,GAAAA,KAAI,IAAoB,GACxB,GAAAA,KAAI,GAAoB,KACxB,GAAAA,KAAI,IAAqB,GACzB,GAAAA,KAAI,GAAqB,GACzB,GAAAA,KAAI,GAAmB,WACvB,GAAAA,KAAI,GAAe,KACnBA,KAAKw/D,eACLx/D,KAAKu/D,sBACLv/D,KAAKggE,WAQT,sBACI,IAAInB,EAAK7+D,KACT,GAAA6+D,EAAA,IAAyBa,QAAU,GAAH,SAChC,GAAAb,EAAA,IAAca,QAAU,GAAH,SACrB,GAAAb,EAAA,IAAuBjnD,MAAQ,GAAA5X,KAAA,IAAoBiU,WACnD,GAAA4qD,EAAA,IAAmBa,QAAU,GAAH,SAC1B,GAAAb,EAAA,IAAmBjnD,MAAQ,GAAAinD,EAAA,IAAe5qD,WAC1C,GAAA4qD,EAAA,IAA4Ba,QAAU,GAAH,SACnC,GAAAb,EAAA,IAAyBa,QAAU,GAAH,SAChC,GAAAb,EAAA,IAAyBjnD,MAAQ,GAAA5X,KAAA,IAAsBiU,WACvD,GAAA4qD,EAAA,IAA0Ba,QAAU,GAAH,SACjC,GAAAb,EAAA,IAA0BjnD,MAAQ,GAAA5X,KAAA,IAAuBiU,WACzD,GAAA4qD,EAAA,IAAoBjnD,MAAQyvB,GAAM,GAAArnC,KAAA,IAAmBA,KAAK4+D,YAAa,GAAG3qD,WAC1E,GAAA4qD,EAAA,IAAwBjnD,MAAQ,GAAH,SAE7B,GAAA5X,KAAA,IAAmBN,MAAMigE,gBAAkB,GAAH,SAG5C,WACI,GAAA3/D,KAAA,IAAmBN,MAAMigE,gBAAkB,GAAH,SACxC3/D,KAAK8+D,uBAGT,eACI,IAAImB,EAAiB,CACjBC,YAAa,GAAF,SACXC,KAAM,GAAF,SACJC,cAAe,GAAF,SACbC,UAAW,GAAF,SACTC,UAAW,GAAF,SACTC,mBAAoB,GAAF,SAClBC,gBAAiB,GAAF,SACfC,gBAAiB,GAAF,SACfC,iBAAkB,GAAF,SAChBC,iBAAkB,GAAF,SAChBC,WAAY,GAAF,SACVC,eAAgB,GAAF,UAEdC,EAAUp7C,KAAKE,UAAUq6C,GAE7BlB,aAAaK,QAAQ,GAAD,SAAoB0B,GAI5C,cACoD,OAA5C/B,aAAaC,QAAQ,GAAD,YAChB/F,KACA,GAAAj5D,KAAI,GAAe,IAEnB,GAAAA,KAAI,GAAe,IAGvBA,KAAKw/D,gBAGT,IAAIuB,EAAchC,aAAaC,QAAQ,GAAD,UACtC,GAAoB,OAAhB+B,EACA,OAEJ,IAAId,EAAiBv6C,KAAKud,MAAM89B,GAEhC,GAAA/gE,KAAI,GAAgBigE,EAAeC,aACnC,GAAAlgE,KAAI,GAASigE,EAAeE,MAC5B,GAAAngE,KAAI,GAAkBigE,EAAeG,eACrC,GAAApgE,KAAI,GAAeigE,EAAeI,WAClC,GAAArgE,KAAI,GAAeigE,EAAeK,WAClC,GAAAtgE,KAAI,GAAuBigE,EAAeM,oBAC1C,GAAAvgE,KAAI,GAAoBigE,EAAeO,iBACvC,GAAAxgE,KAAI,GAAoBigE,EAAeQ,iBACvC,GAAAzgE,KAAI,GAAqBigE,EAAeS,kBACxC,GAAA1gE,KAAI,GAAqBigE,EAAeU,kBACxC,GAAA3gE,KAAI,GAAeigE,EAAeW,YAClC,GAAA5gE,KAAI,GAAmBigE,EAAeY,gBAG1C,iBAEI,OADkB16D,OAAO66D,WAAa76D,OAAO86D,YAAc,YAAc,YCpZ1E,SAASC,GAAOC,GAEnB,GAAIrK,GAASqK,GAET,OAAOC,GAaR,SAAmBD,GACtB,OAAOE,GAAUF,GAAU,GAfXG,CAAUH,IAI1B,IAAII,EAAOhsB,OAAO4rB,GAElB,OAAKhtD,MAAMgtD,GAIJ,IAHHI,GAAc,GACPH,GAAOG,IAUf,SAASF,GAAUF,GAEtB,OAAIpK,GAAmBoK,GAAgB,EAEnCA,EAAOlkD,SAAS,MAASkkD,EAAOlkD,SAAS,OAAiC,IAAzBkkD,EAAOlkD,SAAS,MAAoBkkD,EAAOlkD,SAAS,OAAiC,IAAzBkkD,EAAOlkD,SAAS,KACtHukD,GAAUL,GAKVK,GADC,IAAML,EAAOltD,YAKtB,SAASutD,GAAUC,IAElBA,EAAKxkD,SAAS,MAASwkD,EAAKxkD,SAAS,MAASwkD,EAAKxkD,SAAS,OAC5DwkD,EAAO,MAAQA,GAEnB,IAAIC,EAAO,GAAIC,EAAK,GAAIC,EAAO,GAAIC,EAAK,GAAIC,EAAM,GAC9CC,GAAW,EAAOC,GAAM,EAAOC,GAAQ,EAAOC,GAAO,EACrDC,EAAS,EAGb,IAAK,IAAIC,EAAK,EAAGA,GAAMX,EAAK53D,OAAQu4D,IAAM,CAEtCV,EAAOD,EAAKv6B,UAAUk7B,EAAK,EAAGA,GAC9B,IAAIC,GAAO,EAEX,OAAQF,GACJ,KAAK,EAED,OAAQT,GACJ,IAAK,IACL,IAAK,IACL,IAAK,IACDQ,GAAO,EACPC,EAAS,EACT,MACJ,IAAK,IAED,OAAOj/D,WAAWy+D,GACtB,IAAK,IACDA,GAAMD,EACNM,GAAM,EACN,MACJ,IAAK,IACDH,EAAKF,EACLA,EAAK,GACLI,GAAW,EACX,MACJ,IAAK,IACQI,EAALH,EAAc,EAAiB,EACnC,MACJ,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACGD,EAAUD,GAAOJ,EAAWC,GAAMD,EACtC,MACJ,IAAK,KACD,MACJ,QACIW,GAAO,EAGf,MACJ,KAAK,EAED,OAAQX,GACJ,IAAK,IACDW,GAAO,EACP,MACJ,IAAK,IACDT,GAAQF,EACRO,GAAQ,EACR,MACJ,IAAK,IACDJ,EAAKD,EACDM,EAAMN,EAAO,IAAWA,EAAOD,EAAIA,EAAK,IAC5CI,GAAW,EACX,MACJ,IAAK,IAIL,IAAK,IACL,IAAK,IAEW,KADJN,EAAKv6B,UAAUk7B,EAAK,GACtB,KACEH,EACAI,GAAO,EAEJF,EAAS,GAEpB,MACJ,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACGJ,EAAUD,GAAOJ,EAAWE,GAAQF,EACxC,MACJ,IAAK,KACD,MACJ,QACIW,GAAO,EAGf,MACJ,KAAK,EAGD,OAAQX,GACJ,IAAK,IACDW,GAAO,EACP,MACJ,IAAK,IACDN,GAAW,EACX,MACJ,IAAK,IACGE,EAAOI,GAAO,EAAWF,EAAS,EACtC,MACJ,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACGJ,EAAUD,GAAOJ,EAAWG,GAAMH,EACtC,MACJ,IAAK,KACD,MACJ,QACIW,GAAO,GAKvB,GAAIA,EAAM,MAqBd,MAjBW,KAAPR,IAAWA,EAAK,KACR,KAARC,IAAYA,EAAM,KAEtBD,GAAM3+D,WAAW2+D,GAAM3+D,WAAW4+D,IAAM7tD,WAG7B,QAAP4tD,GAAuB,MAAPA,IAAcA,EAAK,KAM5B,KAAPF,IAAWA,EAAK,KACP,KAATC,IAAaA,EAAO,KACb,KAAPC,IAAWA,EAAK,KAEL,IAALF,IAAYC,IAAQC,EAK3B,SAAST,GAAOkB,GAEnB,IAAI1e,EAAIne,SAAS4B,GAAa,GAANi7B,EAAY,GAAI,GAAGruD,YACvCktD,EAAS17B,SAAStiC,KAAK8S,MAAM2tC,EAAI,IAAI3vC,YACrC8tD,EAAWne,EAAc,GAATud,EAChBoB,EAAS,GACb,OAAQR,GACJ,KAAK,EACDQ,EAASpB,EAAS,IAClB,MACJ,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,GACL,KAAK,GACL,KAAK,GACDoB,EAASpB,EAAS,IAAMY,EAAW,OACnC,MACJ,KAAK,EACL,KAAK,EACL,KAAK,GACL,KAAK,GACDQ,EAASpB,EAAS,IAAOY,EAAW,EAAK,MACzC,MACJ,KAAK,EACL,KAAK,GACDQ,EAASpB,EAAS,IAAOY,EAAW,EAAK,MACzC,MACJ,KAAK,EACDQ,EAASpB,EAAS,IAAOY,EAAW,EAAK,MAOjD,OAJIQ,EAAOC,WAAW,QAElBD,EAASA,EAAOE,OAAO,IAEpBF,EAGJ,SAASG,GAAOJ,GACnB,IACIK,EACAZ,EAFAa,EAAe,GAAIC,EAAe,GAItC,GADAD,EAAKN,EAAIruD,WAAWnR,MAAM,KACR,IAAd8/D,EAAG/4D,OAAc,OAAOy4D,EAAIruD,WAAWqJ,OAAO,KAElD,GADAulD,EAAKxuD,OAA0C,GAAlCnR,WAAW,IAAMmR,OAAOuuD,EAAG,MAAY9/D,MAAM,KACtD+/D,EAAGh5D,OAAS,GAAK3G,WAAW,IAAIoa,OAAOulD,EAAG,KAAO,MAEjD,OAA0B,IAAtB3/D,WAAW2/D,EAAG,IACPA,EAAG,GAAGvlD,OAAO,KAGbslD,EAAG,GAAGtlD,OAAO,MAAMA,OAAOulD,EAAG,IAAIvlD,OAAO,KAKvD,OAFQ+pB,GAAyB,IAAhB,IAAMw7B,EAAG,IAAU,GACpCF,EAAKl9B,SAAS4B,GAAyB,IAAhB,IAAMw7B,EAAG,IAAU,GAAG5uD,YACrC0uD,GACJ,KAAK,EACDZ,EAAW,MACX,MACJ,KAAK,EACDA,EAAW,MACX,MACJ,KAAK,EACDA,EAAW,MACX,MACJ,KAAK,EACDA,EAAW,MACX,MACJ,KAAK,EACDA,EAAW,MACX,MACJ,KAAK,EACDA,EAAW,MACX,MACJ,KAAK,EACDA,EAAW,MACX,MACJ,KAAK,EACDA,EAAW,GACXc,EAAG,IAAMp9B,SAASo9B,EAAG,IAAM,GAAG5uD,WAC9B,MACJ,QACI8tD,EAAW,GAGnB,MAAc,KAAVa,EAAG,IAAuB,KAAVA,EAAG,GAEL,KAAVC,EAAG,IAAuB,KAAVA,EAAG,GAAkBd,EAAW,IAAkBc,EAAG,GAAK,IAAMd,EAAW,IAGjF,KAAVc,EAAG,IAAuB,KAAVA,EAAG,GACZD,EAAG,GAAK,KAAOb,EAAW,IAGnB,OAAVc,EAAG,IACKp9B,SAASm9B,EAAG,IAAM,GAAG3uD,WAAWqJ,OAAO,KAEnC,IAAZykD,EACOa,EAAG,GAAK,KAAOC,EAAG,GAAK,IAEvBD,EAAG,GAAK,KAAOC,EAAG,GAAK,IAAMd,EAAW,I,2vBClTxD,MAAMe,GAET,YAAYC,GAER,GAHJ,oBAwBA,oBASA,YAAQ,2tTA9BM,OADFzjE,SAASmgE,eAAe,eAChC,CAKI,GAAI3I,GAASiM,GAAY,CACrB,IAAI79D,EAAI5F,SAASD,cAAc0jE,GAC3B79D,QACAgxD,QAAQn/C,MAAM,wBAGd,GAAA/W,KAAI,GAAiBkF,QAIzB,GAAAlF,KAAI,GAAiB+iE,GAEzB,GAAA/iE,KAAA,IAAmBg9B,UAAY,GAAAh9B,KAAA,KAKvC,eAII,OAHwB,OAApB,GAAAA,KAAA,UAAgDqT,IAApB,GAAArT,KAAA,KAC5B,GAAAA,KAAI,GAAiCV,SAASmgE,eAAe,gBAE1D,GAAAz/D,KAAA,K,kUC7BR,MAAMgjE,GAgBT,cAfA,YAAiB,IAAI/yD,OACrB,aAAW,GAGX,oBACA,oBACA,oBACA,oBAEA,oBACA,oBACA,oBACA,oBAMQ,KAAAgzD,MAAgB,cAShB,KAAAC,QAAkB,EAiB1B,aAAsC,GAS9B,KAAAC,0BAAoC,EASpC,KAAAC,yBAAmC,EA8DnC,KAAAC,gBAA0B,GAS1B,KAAAC,qBAA+B,EAlHvC,WACI,OAAOtjE,KAAKijE,MAEhB,SAAgBjgE,GACZhD,KAAKijE,MAAQjgE,EACbhD,KAAKu/D,sBAIT,aACI,OAAOv/D,KAAKkjE,QAEhB,WAAkBlgE,GACdhD,KAAKkjE,QAAUlgE,EACfhD,KAAKu/D,sBAET,iBACI,OAAOmD,GAAO1iE,KAAKk1D,QAEvB,eAAsBlyD,GAClBhD,KAAKk1D,OFgRkCsM,GEhRfx+D,GFgR+B,GE/QvDhD,KAAKu/D,sBACLv/D,KAAKujE,iBAIT,+BACI,OAAO,GAAAvjE,KAAA,IAEX,6BAAoCgD,GAChC,GAAAhD,KAAI,GAA8BgD,GAClChD,KAAKu/D,sBAIT,8BACI,OAAOv/D,KAAKmjE,yBAEhB,4BAAmCngE,GAC/BhD,KAAKmjE,yBAA2BngE,EAChChD,KAAKu/D,sBAIT,6BACI,OAAOv/D,KAAKojE,wBAEhB,2BAAkCpgE,GAC9BhD,KAAKojE,wBAA0BpgE,EAC/BhD,KAAKu/D,sBAIT,mBACI,OAAOv/D,KAAKwjE,cAEhB,iBAAwBxgE,G,MACpBhD,KAAKwjE,cAAgBxgE,EAGrB,IAAK,IAAI8G,EADD,GAAA9J,KAAA,IAAiBwB,QAAQqI,OAAS,EAC1BC,GAAK,EAAGA,IACpB,GAAA9J,KAAA,IAAiB2+B,OAAO70B,GAE5B,IAAI25D,EAAiE,QAA3D,EAAG,GAAAzjE,KAAA,IAAYglB,MAAK9f,GAAKA,EAAEw+D,IAAMnuB,OAAOv1C,KAAK2jE,uBAAc,eAAEC,OACvE,QAAevwD,IAAXowD,EAAJ,CACA,IAAK,IAAI35D,EAAI,EAAGA,EAAI25D,EAAO55D,OAAQC,IAAK,CACpC,MAAM4hC,EAAQ+3B,EAAO35D,GACrB,IAAI+5D,EAAcvkE,SAAS8T,cAAc,UACzCywD,EAAYjsD,MAAQ8zB,EAAMg4B,GAAGzvD,WAC7B4vD,EAAYnqB,KAAOhO,EAAMo4B,YAErBp4B,EAAMg4B,KAAOnuB,OAAOv1C,KAAK+jE,iBACzBF,EAAYG,UAAW,GAE3B,GAAAhkE,KAAA,IAAiB4xB,IAAIiyC,GAEzB7jE,KAAKu/D,sBACLv/D,KAAKujE,kBAIT,oBACI,OAAOvjE,KAAKikE,eAEhB,kBAAyBjhE,GACrBhD,KAAKikE,eAAiBjhE,EACtBhD,KAAKu/D,sBACLv/D,KAAKujE,iBAGT,gBACI,IAAIW,EAAO,GAAAlkE,KAAA,IAAYglB,MAAK9f,GAAKA,EAAEw+D,IAAMnuB,OAAOv1C,KAAK2jE,gBACrD,GAAY,MAARO,EAAc,MAAO,GACzB,IAAIx4B,EAAQw4B,EAAKN,OAAO5+C,MAAK9f,GAAKA,EAAEw+D,IAAMnuB,OAAOv1C,KAAK+jE,iBACtD,OAAa1wD,MAATq4B,EAA2B,GACxBA,EAAMo4B,YAGjB,eACI,IAAII,EAAO,GAAAlkE,KAAA,IAAYglB,MAAK9f,GAAKA,EAAEw+D,IAAMnuB,OAAOv1C,KAAK2jE,gBACrD,OAAY,MAARO,EAAqB,GAClBA,EAAKJ,YAKhB,qBACI,OAAO9jE,KAAKqjE,gBAEhB,mBAA0BrgE,GACtBhD,KAAKqjE,gBAAkBrgE,EACvBhD,KAAKu/D,sBAIT,yBACI,OAAOv/D,KAAKsjE,oBAEhB,uBAA8BtgE,GAC1BhD,KAAKsjE,oBAAsBtgE,EAC3BhD,KAAKu/D,sBAIT,iBACQ,GAAAv/D,KAAA,KACiC,MAAjCA,KAAKmkE,0BACTnkE,KAAKmkE,yBAAyBnkE,KAAKokE,aAGvC,YAAYC,GACR/kE,SAASmgE,eAAe,kBAAmB7/D,YAAc,UAAUykE,IAGvE,UAAUC,GACN,IAAIC,EACJ,GAAAvkE,KAAA,IAAY6J,OAAS,EAEjB06D,EADAzN,GAASwN,GACK5+C,KAAKud,MAAMqhC,GAEXA,EAGlB,IAAK,IAAIx6D,EAAI,EAAGA,EAAIy6D,EAAY16D,OAAQC,IAAK,CACzC,MAAM06D,EAAaD,EAAYz6D,GACzB25D,EAAS,IAAIxzD,MACnB,IAAK,IAAIyc,EAAI,EAAGA,EAAI83C,EAAWf,OAAO55D,OAAQ6iB,IAAK,CAC/C,MAAMgf,EAAQ84B,EAAWf,OAAO/2C,GAChC+2C,EAAOr0D,KAAK,IAAIq1D,GAAa/4B,EAAMtxB,GAAIsxB,EAAMgD,KAAMhD,EAAM7kB,cAE7D,IAAIq9C,EAAO,IAAIQ,GAAKF,EAAWpqD,GAAIoqD,EAAW91B,KAAM81B,EAAW39C,YAAa48C,GAC5E,GAAAzjE,KAAA,IAAYoP,KAAK80D,GAEjB,IAAIS,EAASrlE,SAAS8T,cAAc,UACpCuxD,EAAO/sD,MAAQssD,EAAKR,GAAGzvD,WACvB0wD,EAAOjrB,KAAOwqB,EAAKJ,YACnB,GAAA9jE,KAAA,IAAgB4xB,IAAI+yC,IAI5B,sBAAsBC,GAElB,IAAIC,EADJ,GAAA7kE,KAAI,IAAY,GAGZ6kE,EADA/N,GAAS8N,GACUl/C,KAAKud,MAAM2hC,GAEXA,EAGvB,IAAIjlD,EAAOs3C,GAA4B4N,EAAkB,QACzD7kE,KAAK8kE,UAAgBzxD,IAATsM,EAAqB3f,KAAK8kE,KAAOnlD,EAE7C,IAAI+rB,EAAQurB,GAA4B4N,EAAkB,WAC1D7kE,KAAK+jE,mBAA0B1wD,IAAVq4B,EAAsB1rC,KAAK+jE,cAAgBr4B,EAEhE,IAAIw4B,EAAOjN,GAA4B4N,EAAkB,UACzD7kE,KAAK2jE,kBAAwBtwD,IAAT6wD,EAAqBlkE,KAAK2jE,aAAeO,EAE7D,IAAIr6D,EAASotD,GAA4B4N,EAAkB,UAC3D7kE,KAAKk1D,YAAoB7hD,IAAXxJ,EAAuB7J,KAAKk1D,OAASrrD,EAEnD7J,KAAK+kE,0BAA2B,EAC5BF,EAAiB96D,eAAe,8BAChC/J,KAAK+kE,yBAA2B9N,GAA4B4N,EAAkB,6BAElF7kE,KAAKglE,wBAAyB,EAC1BH,EAAiB96D,eAAe,4BAChC/J,KAAKglE,uBAAyB/N,GAA4B4N,EAAkB,2BAEhF7kE,KAAKilE,yBAA0B,EAC3BJ,EAAiB96D,eAAe,6BAChC/J,KAAKilE,wBAA0BhO,GAA4B4N,EAAkB,4BAEjF7kE,KAAKklE,oBAAqB,EACtBL,EAAiB96D,eAAe,wBAChC/J,KAAKklE,mBAAqBjO,GAA4B4N,EAAkB,uBAE5E,IAAIR,EAAQ,EACRQ,EAAiB96D,eAAe,WAChCs6D,EAAQ9uB,OAAO0hB,GAA4B4N,EAAkB,WAEjE7kE,KAAKokE,YAAYC,GAEjB,GAAArkE,KAAI,IAAY,GAIpB,iBACI,OAAOA,KAAK8kE,MAAQ9kE,KAAK+kE,yBAA2B,IAAMrC,GAAO1iE,KAAKk1D,QAAU,KACzEl1D,KAAKglE,yBAA2BjO,GAAmB/2D,KAAKmlE,UAAY,IAAMnlE,KAAKmlE,SAAW,KAC1FnlE,KAAKilE,0BAA4BlO,GAAmB/2D,KAAKolE,WAAa,IAAMplE,KAAKolE,UAAY,IAIxG,OACI,IAAIvG,EAAK7+D,KACT,GAAA6+D,EAAE,GAAqBv/D,SAASmgE,eAAe,yBAC/C,GAAAZ,EAAA,IAAqBv+D,iBAAiB,SAAS,WAC3Cu+D,EAAGiG,KAAO9kE,KAAK4X,SAEnB,GAAAinD,EAAE,GAAkCv/D,SAASmgE,eAAe,sBAC5D,GAAAZ,EAAA,IAAkCv+D,iBAAiB,UAAU,WACzDu+D,EAAGkG,yBAA2B/kE,KAAK0/D,WAEvC,GAAAb,EAAE,GAAgCv/D,SAASmgE,eAAe,+BAC1D,GAAAZ,EAAA,IAAgCv+D,iBAAiB,UAAU,WACvDu+D,EAAGmG,uBAAyBhlE,KAAK0/D,WAErC,GAAAb,EAAE,GAAiCv/D,SAASmgE,eAAe,gCAC3D,GAAAZ,EAAA,IAAiCv+D,iBAAiB,UAAU,WACxDu+D,EAAGoG,wBAA0BjlE,KAAK0/D,WAEtC,GAAAb,EAAE,GAAgBv/D,SAASmgE,eAAe,eAC1C,GAAAZ,EAAA,IAAgBv+D,iBAAiB,UAAU,WACvCu+D,EAAGwG,WAAarlE,KAAK4X,SAEzB,GAAAinD,EAAE,GAAev/D,SAASmgE,eAAe,cACzC,GAAAZ,EAAA,IAAev+D,iBAAiB,UAAU,WACtCu+D,EAAGkF,cAAgB/jE,KAAK4X,SAE5B,GAAAinD,EAAE,GAAcv/D,SAASmgE,eAAe,aACxC,GAAAZ,EAAA,IAAcv+D,iBAAiB,UAAU,WACrCu+D,EAAG8E,aAAe3jE,KAAK4X,SAE3B,GAAAinD,EAAE,GAA0Bv/D,SAASmgE,eAAe,yBACpD,GAAAZ,EAAA,IAA0Bv+D,iBAAiB,UAAU,WACjDu+D,EAAGqG,mBAAqBllE,KAAK0/D,WAEbpgE,SAASmgE,eAAe,0BACvCn/D,iBAAiB,SAAS,WACvBu+D,EAAG0E,oBAKf,sBACI,IAAI1E,EAAK7+D,KACT,GAAA6+D,EAAA,IAAqBjnD,MAAQinD,EAAGiG,KAChC,GAAAjG,EAAA,IAAkCa,QAAUb,EAAGkG,yBAC/C,GAAAlG,EAAA,IAAgCa,QAAUb,EAAGmG,uBAC7C,GAAAnG,EAAA,IAAiCa,QAAUb,EAAGoG,wBAC9C,GAAApG,EAAA,IAAgBjnD,MAAQinD,EAAGwG,WAC3B,GAAAxG,EAAA,IAAejnD,MAAQinD,EAAGkF,cAC1B,GAAAlF,EAAA,IAAcjnD,MAAQinD,EAAG8E,aACzB,GAAA9E,EAAA,IAA0Ba,QAAUb,EAAGqG,mBACvC5lE,SAASmgE,eAAe,wBAAyB7/D,YAAci/D,EAAGyG,iBAClEhmE,SAASmgE,eAAe,uBAAwB7/D,YAAc,gBAAkBI,KAAKulE,gB,qKAK7F,MAAMb,GACF,YAAYtqD,EAAYs0B,EAAc7nB,EAAqB2+C,GACvDxlE,KAAK0jE,GAAKtpD,EACVpa,KAAKylE,KAAO/2B,EACZ1uC,KAAK8jE,YAAcj9C,EACnB7mB,KAAK4jE,OAAS4B,EAIlB,SACI,OAAOxlE,KAAK0lE,IAEhB,OAAc1iE,GACVhD,KAAK0lE,IAAM1iE,EAIf,WACI,OAAOhD,KAAK2lE,MAEhB,SAAgB3iE,GACZhD,KAAK2lE,MAAQ3iE,EAIjB,kBACI,OAAOhD,KAAK4lE,aAEhB,gBAAuB5iE,GACnBhD,KAAK4lE,aAAe5iE,EAIxB,aACI,OAAOhD,KAAK6lE,QAEhB,WAAkB7iE,GACdhD,KAAK6lE,QAAU7iE,GAIvB,MAAMyhE,GACF,YAAYrqD,EAAYs0B,EAAc7nB,GAClC7mB,KAAK0jE,GAAKtpD,EACVpa,KAAKylE,KAAO/2B,EACZ1uC,KAAK8jE,YAAcj9C,EAIvB,SACI,OAAO7mB,KAAK0lE,IAEhB,OAAc1iE,GACVhD,KAAK0lE,IAAM1iE,EAKf,WACI,OAAOhD,KAAK2lE,MAEhB,SAAgB3iE,GACZhD,KAAK2lE,MAAQ3iE,EAIjB,kBACI,OAAOhD,KAAK4lE,aAEhB,gBAAuB5iE,GACnBhD,KAAK4lE,aAAe5iE,G,uTC7VrB,MAAM8iE,GAST,cARA,oBACA,oBAMA,KAAAjH,GAAK7+D,KAGL,YAAwB,IAAIiQ,OAC5B,YAAoB,IAAI,GAAM,EAAG,IAEjC,KAAA81D,WAA4B,IAAI91D,MAChC,KAAA+1D,SAAwB,IAAI/1D,MAC5B,KAAAg2D,SAAwB,IAAIh2D,MAC5B,KAAAi2D,WAA+B,IAAIj2D,MACnC,KAAAk2D,aAAe,IAAIl2D,MACnB,KAAAm2D,UAAqC,GACrC,KAAA1P,aAA0C,GAC1C,KAAA2P,WAAa,IAAIp2D,MACjB,KAAAq2D,mBAAqB,IAAIr2D,MACzB,KAAAs2D,QAAU,IAAIt2D,MAEd,KAAAu2D,YAAsB,EACtB,KAAAC,WAAqB,EACrB,KAAAC,WAAqB,EACrB,KAAAC,eAAyB,CAAE9kE,EAAG,EAAGC,EAAG,GACpC,KAAA8kE,cAAwB,CAAE/kE,EAAG,EAAGC,EAAG,GAEnC,YAA4B,IAAImO,OAChC,KAAA2uD,YAAc,GAEd,YAAmB,GACnB,oBAGA,oBACA,oBACA,oBAiNA,aAAW,GACX,YAAqB,GACrB,YAA4B,IAAI,GAAM,EAAG,IAyTzC,aAAkB,GA0FlB,YAAc,IAAI3uD,OA2vBlB,YAAsB,GA0gBtB,YAAmB,IAAIA,OAoEvB,YAAa,IAAIA,OACjB,YAAa,IAAIA,OA76DjB,eACI,OAAOjQ,KAAK6mE,UAEhB,aAAoB7jE,GAChBhD,KAAK6mE,UAAY7jE,EACjBhD,KAAK8mE,cACL,IAAIC,EAASznE,SAASmgE,eAAe,0BAA2BvuD,iBAAiB,gBACjF,IAAK,IAAIpH,EAAI,EAAGA,EAAIi9D,EAAOl9D,OAAQC,IACjBi9D,EAAOj9D,GACfk9D,SAAWhkE,EAErB+jE,EAASznE,SAASmgE,eAAe,iBAAkBvuD,iBAAiB,gBACpE,IAAK,IAAIpH,EAAI,EAAGA,EAAIi9D,EAAOl9D,OAAQC,IACjBi9D,EAAOj9D,GACfk9D,SAAWhkE,EAErB+jE,EAASznE,SAASmgE,eAAe,kBAAmBvuD,iBAAiB,gBACrE,IAAK,IAAIpH,EAAI,EAAGA,EAAIi9D,EAAOl9D,OAAQC,IACjBi9D,EAAOj9D,GACfk9D,SAAWhkE,EAIzB,gBACI,YAA6BqQ,IAAzBrT,KAAKinE,gBACE,EACJjnE,KAAKinE,gBAAgBviE,UAGhC,iBACI,QAA6B2O,IAAzBrT,KAAKinE,gBACL,OAAO,GAAAjnE,KAAA,IAAesgE,UAC1B,IAAI4G,EAAYlnE,KAAKinE,gBAAgBviE,UACjCyiE,EAAmB,EAAID,EAC3B,OAAIA,EAAY,IACL,GAAAlnE,KAAA,IAAesgE,UAGf6G,EAAmB,GAAAnnE,KAAA,IAAesgE,UAAY,IAI7D,eACI,QAA6BjtD,IAAzBrT,KAAKinE,gBACL,OAAO,GAGX,IAAIC,EAAYlnE,KAAKinE,gBAAgBviE,UAErC,OAAIwiE,EAAY,IACL,GAFY,EAAIA,EAKG,KAIlC,gBACI,QAA6B7zD,IAAzBrT,KAAKinE,gBACL,OAAO,EAEX,IAAIC,EAAYlnE,KAAKinE,gBAAgBviE,UAErC,OAAIwiE,EAAY,IACL,EAFY,EAAIA,EAKG,EAIlC,uBAEI,OAAO,EADSlnE,KAAKinE,gBAAgBviE,UAIzC,iBACI,IAAI0iE,EAAY,EAChB,GAAI,GAAApnE,KAAA,IAAe6J,OAAS,EACxB,IAAK,IAAIC,EAAI,EAAGA,EAAI,GAAA9J,KAAA,IAAe6J,OAAQC,IAEvCs9D,GADgB,GAAApnE,KAAA,IAAe8J,GACVorD,OAG7B,OAAOkS,EAIJ,iBAAiBC,GACpB,IAAIxI,EAAK7+D,KACT,GAAAA,KAAI,GAAcqnE,GAClB,GAAArnE,KAAI,GAAgB,IAAI8iE,GAAYuE,IACpC,GAAArnE,KAAI,GAAuB,IAAIgjE,IAC/B,GAAAhjE,KAAA,IAAyByB,OACzB,GAAAzB,KAAI,GAAeV,SAASmgE,eAAe,YAE3C,GAAAz/D,KAAA,IAAiBsnE,cAAgB,SAAUt9D,GACvC,OAAO,GAGX1K,SAASy0C,KAAKwzB,UAAY,SAAUv9D,GACd,MAAdA,EAAM0O,KAAe1O,EAAMw9D,SACvBx9D,EAAM8C,kBAAkBstC,SACsB,UAAzCpwC,EAAY,OAAEqG,SAASqrB,eACxBmjC,EAAG4I,OAIG,MAAdz9D,EAAM0O,KAAe1O,EAAMw9D,SACvBx9D,EAAM8C,kBAAkBstC,SACoB,UAAxCpwC,EAAM8C,OAAOuD,SAASqrB,eACtBmjC,EAAG6I,OAKX19D,EAAMw9D,SAAWx9D,EAAMgD,UAAwC,MAA5BhD,EAAM0O,IAAIgjB,gBAC7CmjC,EAAG8I,YACH39D,EAAM49D,kBACN59D,EAAMQ,kBAKN,QAFJR,EAAQA,GAAS7D,OAAO6D,SAGM,WAAdA,EAAM0O,KAAkC,QAAd1O,EAAM0O,OAEpCmmD,EAAG2H,aACH3H,EAAG2H,YAAa,EAChB3H,EAAG4H,WAAY,EACf5H,EAAGgJ,eACHhJ,EAAG4I,OACHz9D,EAAMQ,iBACNR,EAAM49D,mBAEN/I,EAAG6H,YACH7H,EAAGiI,cACH98D,EAAMQ,iBACNR,EAAM49D,qBAMtB5nE,KAAK8nE,MAAQ/S,KAAM/gB,MAAM,GAAAh0C,KAAA,KACpBg+B,KAAK,KAAM,iBACX+D,SAAS,iBACTzQ,KAAK,OAAQ,QAClBtxB,KAAK2J,WAAarK,SAASmgE,eAAe,iBAC1Cz/D,KAAK+nE,cAAc/nE,KAAK2J,YACxB,GAAAk1D,EAAE,GAAa,IAAIJ,GAAgBI,EAAGC,qBAAqBz6B,KAAKw6B,GAAKA,EAAG8I,UAAUtjC,KAAKw6B,KAEtFv/D,SAASmgE,eAAe,wBAA6Cn/D,iBAAiB,UAAU,WAC7Fu+D,EAAGC,uBACHD,EAAGgJ,kBAGP7nE,KAAKgoE,SAAWhoE,KAAK8nE,MAAMvU,QAE3BvzD,KAAKioE,GAAKjoE,KAAK2J,WAAW6C,iBAC1BxM,KAAKkoE,WAAaloE,KAAKgoE,SAASpqB,OAAO,GAAGxG,KAAK,WAAWE,QAAQ,IAAKxU,OACvE9iC,KAAKmoE,cACLnoE,KAAKooE,UAELpoE,KAAKqoE,cAGD,cACJ,IAAIxJ,EAAK7+D,KAET6+D,EAAGoI,gBAAkBqB,GAAWzJ,EAAGl1D,WAAY,CAC3CjD,YAAY,EACZC,qBAAqB,EACrBC,aAAa,EACbC,qBAAqB,EACrBC,uBAAuB,EACvBC,2BAA2B,EAC3BC,qBAAsB,GACtBC,QAAS,GACTC,QAAS,IACTpD,KAAK,EACLC,SAAS,EACTM,QAAQ,EACRhC,YAAa,OAEboD,OAAQ,SAAUtB,GAIT,GAAA06D,EAAA,KACDA,EAAGC,wBAGXn5D,UAAW,SAAU4iE,EAAQC,GAEpB3J,EAAG4H,YACJ5H,EAAG8H,eAAiB4B,GAExB1J,EAAG+H,cAAgB4B,EACnB3J,EAAG4H,WAAY,KAWnB,UACJ,IAAI5H,EAAK7+D,KAET6+D,EAAGiJ,MAAMz9D,GAAG,cAAc,SAAUL,GAChC,IAAI8C,EAAS9C,EAAM8C,OACf27D,EAAO5J,EAAGnD,iBAAiB1xD,GAI/B,GAHA,GAAA60D,EAAE,GAAc,YAAe4J,IAC/B,GAAA5J,EAAE,GAAe,YAAe4J,IAEH,IAAzBz+D,EAAM6K,QAAQhL,OAcd,OAbA,GAAAg1D,EAAE,IAAY,GAEd,GAAAA,EAAE,GAAsBA,EAAG6J,iBAAiB1+D,IAC5C,GAAA60D,EAAE,GAAc17D,KAAKwlE,MACjB3+D,EAAM6K,QAAQ,GAAGC,MAAQ9K,EAAM6K,QAAQ,GAAGC,MAC1C9K,EAAM6K,QAAQ,GAAGI,MAAQjL,EAAM6K,QAAQ,GAAGI,QAG1C4pD,EAAG6H,YACH,GAAA7H,EAAE,IAAY,GACdA,EAAGiI,oBAEPjI,EAAGoI,gBAAgBl5D,YAIvB8wD,EAAGoI,gBAAgBj5D,aACI,WAAnBlB,EAAOwH,SAA2C,SAAnBxH,EAAOwH,QACtCuqD,EAAGoI,gBAAgBj5D,aAGnB6wD,EAAG+J,eAGH/J,EAAG6H,WACC,GAAA7H,EAAA,IAAWh1D,OAAS,GACpBg1D,EAAGC,0BAKfD,EAAGiJ,MAAMz9D,GAAG,aAAa,SAAUL,GAC/B,GAAI,GAAA60D,EAAA,IAAa,CACb,IAKIgK,EALO1lE,KAAKwlE,MACZ3+D,EAAM6K,QAAQ,GAAGC,MAAQ9K,EAAM6K,QAAQ,GAAGC,MAC1C9K,EAAM6K,QAAQ,GAAGI,MAAQjL,EAAM6K,QAAQ,GAAGI,OAG7B,GAAA4pD,EAAA,IACbj+B,EAAIi+B,EAAGoI,gBAAgBviE,UAEvBokE,EAAgBjK,EAAG6J,iBAAiB1+D,GAIxC,OAHA60D,EAAGoI,gBAAgBx7D,YAAYm1B,EAAIioC,EAAM,IAAK,CAAEhnE,EAAGinE,EAAcjnE,EAAGC,EAAGgnE,EAAchnE,SAErF+8D,EAAGC,uBAGP,GAAID,EAAG4H,UACH,OAEJ,IAAIgC,EAAO5J,EAAGnD,iBAAiB1xD,GAC/B,GAAA60D,EAAE,GAAc,YAAe4J,IAC/B,GAAA5J,EAAE,GAAe,YAAe4J,IAC5B5J,EAAG6H,WACH7H,EAAGC,0BAIXD,EAAGiJ,MAAMz9D,GAAG,YAAY,SAAUL,GAC9B,GAAI,GAAA60D,EAAA,IACA,GAAAA,EAAE,IAAY,OADlB,CAKA,QAAsBxrD,IAAlB,GAAAwrD,EAAA,UAAkDxrD,IAAnB,GAAAwrD,EAAA,IAA8B,CAC7D,IAAI4J,EAAO5J,EAAGnD,iBAAiB1xD,GAC/B,GAAA60D,EAAE,GAAc,YAAe4J,IAC/B,GAAA5J,EAAE,GAAe,YAAe4J,IAGpC,GAAI5J,EAAG6H,UACH,GAAI7H,EAAG4H,UAAW,CACd5H,EAAG4H,WAAY,EACf,IAAI5kE,EAAIsB,KAAK6H,IAAI6zD,EAAG8H,eAAe9kE,EAAIg9D,EAAG+H,cAAc/kE,GACpDC,EAAIqB,KAAK6H,IAAI6zD,EAAG8H,eAAe7kE,EAAI+8D,EAAG+H,cAAc9kE,IACpDD,EAAI,GAAKC,EAAI,KACb+8D,EAAGkK,WACHlK,EAAGiI,oBAGFjI,EAAG2H,aAIR3H,EAAGkK,WACHlK,EAAGiI,eAIXjI,EAAG4H,WAAY,EACf5H,EAAG2H,YAAa,EAChB3H,EAAGoI,gBAAgBl5D,gBAGvB8wD,EAAGiJ,MAAMz9D,GAAG,aAAa,SAAUL,GAC/B,IAAIy+D,EAAO5J,EAAGnD,iBAAiB1xD,GAC/B,GAAA60D,EAAE,GAAc,YAAe4J,IAC/B,GAAA5J,EAAE,GAAe,YAAe4J,IAC5B5J,EAAG6H,WACH7H,EAAGC,0BAIXD,EAAGiJ,MAAMz9D,GAAG,aAAa,SAAUL,GAC/B,GAAoB,GAAhBA,EAAM0zD,OAAa,CACnB,GAAImB,EAAGmK,SACH,OAEJ,GAAInK,EAAG2H,WAKH,OAJA3H,EAAG2H,YAAa,EAChB3H,EAAG4H,WAAY,EACf5H,EAAGgJ,oBACHhJ,EAAG4I,OAGP,GAAI5I,EAAGkH,WAAWl8D,OAAS,EAAG,CAC1B,IAAIo/D,EAAapK,EAAGkH,WAAWlH,EAAGkH,WAAWl8D,OAAS,GACtDg1D,EAAGqK,aAAaD,GAChBpK,EAAGC,uBACHD,EAAGgJ,gBAIPhJ,EAAG6H,UACkB,IAAjB18D,EAAM0zD,QACNmB,EAAGiI,cAGH98D,EAAM0zD,UAMlBmB,EAAGiJ,MAAMz9D,GAAG,WAAW,SAAUL,GAE7B,GAAoB,GAAhBA,EAAM0zD,OAAV,CAIA,GAAImB,EAAG6H,UACH,GAAI7H,EAAG4H,UAAW,CACd5H,EAAG4H,WAAY,EACf,IAAI5kE,EAAIsB,KAAK6H,IAAI6zD,EAAG8H,eAAe9kE,EAAIg9D,EAAG+H,cAAc/kE,GACpDC,EAAIqB,KAAK6H,IAAI6zD,EAAG8H,eAAe7kE,EAAI+8D,EAAG+H,cAAc9kE,IACpDD,EAAI,GAAKC,EAAI,IACb+8D,EAAGkK,gBAEAlK,EAAG2H,YAEV3H,EAAGkK,gBAGP,IAAKlK,EAAG4H,YAAc5H,EAAG2H,WAAY,CACjC,IAAI15D,EAAS9C,EAAM8C,OACE,IAAjB9C,EAAM0zD,QAAmC,WAAnB5wD,EAAOwH,SAC7BuqD,EAAG+J,eAIf/J,EAAG4H,WAAY,EACf5H,EAAG2H,YAAa,MAIxB,iBAAiBriE,GACb,IAAIwI,EAAM3M,KAAKinE,gBAAgBniE,SAC3BlD,EAAO5B,KAAKinE,gBAAgBviE,UAC5B7C,EAAIsC,EAAE0Q,QAAQ,GAAGC,MACjBhT,EAAIqC,EAAE0Q,QAAQ,GAAGI,MAGrBjV,KAAKioE,GAAGpmE,EAAIA,EAAI8K,EAAI9K,EACpB7B,KAAKioE,GAAGnmE,EAAIA,EAAI6K,EAAI7K,EAEpB,IAAIqnE,EAASnpE,KAAKioE,GAAG18D,gBACjBvL,KAAK2J,WAAWwB,eAAeC,WAGnC+9D,EAAOtnE,EAAIsnE,EAAOtnE,EAAID,EACtBunE,EAAOrnE,EAAIqnE,EAAOrnE,EAAIF,EAEtBC,EAAIsC,EAAE0Q,QAAQ,GAAGC,MACjBhT,EAAIqC,EAAE0Q,QAAQ,GAAGI,MAEjBjV,KAAKioE,GAAGpmE,EAAIA,EAAI8K,EAAI9K,EACpB7B,KAAKioE,GAAGnmE,EAAIA,EAAI6K,EAAI7K,EAEpB,IAAIsnE,EAASppE,KAAKioE,GAAG18D,gBACjBvL,KAAK2J,WAAWwB,eAAeC,WAGnCg+D,EAAOvnE,EAAIunE,EAAOvnE,EAAID,EACtBwnE,EAAOtnE,EAAIsnE,EAAOtnE,EAAIF,EAEtB,IAAIynE,EAAU,YAAeF,GACzBG,EAAU,YAAeF,GAG7B,OADgB,IAAIG,GAAUF,EAASC,GACtBE,cAKrB,+BACI,OAAOxpE,KAAKypE,0BAEhB,6BAAoCzmE,GAChChD,KAAKypE,0BAA4BzmE,EACjC,GAAAhD,KAAA,IAAyBmkE,yBAA2BnkE,KAAK0pE,yBAG7D,UAAUC,GACN,GAAA3pE,KAAA,IAAyB4pE,UAAUD,GAGvC,WACI,IAAI9K,EAAK7+D,KACT,IAAI6+D,EAAGmK,SAAP,CACA,GAAI,GAAAnK,EAAA,IAAWh1D,OAAS,GACJ,GAAAg1D,EAAA,IAAW,GAAAA,EAAA,IAAWh1D,OAAS,GACjCggE,OAAO,GAAA7pE,KAAA,KACjB,OAGR,GAAA6+D,EAAA,IAAWzvD,KAAK,GAAAyvD,EAAA,IAAc3vB,SAC9B2vB,EAAGC,uBACHD,EAAGgJ,gBAGP,WAAW7/D,EAAc8hE,GACrB,IAAIjL,EAAK7+D,KAET,GAAI6+D,EAAGkH,WAAW+D,GACdjL,EAAGkH,WAAW+D,GAAK9rC,KAAK,CAAEyT,GAAIzpC,EAAMnG,EAAG6vC,GAAI1pC,EAAMlG,IACjD+8D,EAAGkH,WAAW+D,GAAK7rD,KAAK,MAAO6rD,GAAK,GACpCjL,EAAGkH,WAAW+D,GAAKx4C,KAAKutC,EAAGkL,gBACxB,CACH,IAAInsB,EAASihB,EAAGmJ,SACXpqB,OAAOihB,EAAGkL,YACV3yB,KAAK,WACLE,QAAQ,IACRuG,KAAK71C,EAAMnG,EAAGmG,EAAMlG,GACzB87C,EAAO5f,KAAK,CAAEyT,GAAIzpC,EAAMnG,EAAG6vC,GAAI1pC,EAAMlG,IACrC87C,EAAO3/B,KAAK,MAAO6rD,GAAK,GACxBlsB,EAAOosB,UAAS,SAAUhgE,GACjB60D,EAAG6H,YACJ7H,EAAGqK,aAAalpE,MAChBgK,EAAMQ,qBAIdozC,EAAOqsB,WAAU,WACRpL,EAAG6H,WACiB1mE,KACd+hC,SAAS,gBAGxB6b,EAAOssB,UAAS,WACPrL,EAAG6H,WACiB1mE,KACdgiC,YAAY,gBAI3B,IAAImoC,GAAc,EAClBvsB,EAAO30C,YAAW,SAAUe,GACxB,IAAK60D,EAAG6H,UAAW,CACf,IAAKyD,EAKD,OAJAA,GAAc,EACdz4D,YAAW,WACPy4D,GAAc,IACf,MACI,EAEXtL,EAAGqK,aAAalpE,MAChBgK,EAAMogE,cAAe,EACrBpgE,EAAMQ,qBAGdq0D,EAAGkH,WAAW32D,KAAKwuC,IAI3B,aAAaA,GAET,GAAI59C,KAAKgpE,SAAU,OAEnB,IAAIc,EAAclsB,EAAO3/B,KAAK,OAC9B2/B,EAAOrzC,MACP,IAAI2J,EAAIlU,KAAK+lE,WAAWh5D,QAAQ6wC,GAChC59C,KAAK+lE,WAAW7yD,OAAOgB,EAAG,GAC1B0pC,EAAOjf,SACP,GAAA3+B,KAAA,IAAakT,OAAO42D,EAAK,UAElB9pE,KAAK02D,aAAa,SAAWoT,EAAM,WACnC9pE,KAAK02D,aAAa,OAASoT,EAAM,IAExC9pE,KAAK8+D,uBACL9+D,KAAK6nE,eAGT,uBACI7nE,KAAKgmE,SAASnhD,SAASu7B,IACnBA,EAAKzhB,YAGT3+B,KAAKimE,SAASphD,SAAS3f,IACnBA,EAAEy5B,YAEN3+B,KAAKmmE,aAAathD,SAAS3f,IACvBA,EAAEy5B,YAEN3+B,KAAKsmE,mBAAmBzhD,SAASwlD,IAC7BA,EAAM1rC,YAEV3+B,KAAKsmE,mBAAqB,IAAIr2D,MAE9B,IAAK,IAAIyI,KAAO1Y,KAAKomE,UAAW,CAC5B,IAAIkE,EAAQtqE,KAAKomE,UAAU1tD,GAC3B4xD,EAAM//D,MACN+/D,EAAM3rC,gBACC3+B,KAAKomE,UAAU1tD,GAqB1B,GAlBA1Y,KAAKgmE,SAASn8D,OAAS,EAEvB7J,KAAKimE,SAASp8D,OAAS,EACvB7J,KAAKmmE,aAAat8D,OAAS,EAEvB,GAAA7J,KAAA,IAAa6J,OAAS,IACtB7J,KAAKuqE,kBACLvqE,KAAKwqE,YACLxqE,KAAKyqE,eACLzqE,KAAK0qE,cACL1qE,KAAK2qE,gBAED,GAAA3qE,KAAA,KACAA,KAAK4qE,iBAET5qE,KAAK6qE,iBACL,GAAA7qE,KAAA,IAAyBulE,eAAiBrE,GAAOlhE,KAAK8qE,aAEtD9qE,KAAK0mE,WAAa,GAAA1mE,KAAA,IAAe+qE,WACjC/qE,KAAKkoE,WAAWrlC,OAChB7iC,KAAKkoE,WAAWlqC,KAAK,CACjByT,GAAI,GAAAzxC,KAAA,IAAgB6B,EACpB6vC,GAAI,GAAA1xC,KAAA,IAAgB8B,EACpBkhC,EAAGhjC,KAAK+pE,WAAa,IAEzB/pE,KAAKkoE,WAAW1pC,aACb,GAAIx+B,KAAK0mE,YAAc,GAAA1mE,KAAA,IAAe+qE,WACzC/qE,KAAKkoE,WAAWplC,WACb,CACH9iC,KAAKkoE,WAAWplC,OAChB9iC,KAAK+lE,WAAWlhD,SAAS3f,IACrBA,EAAEs5B,WAEN,IAAK,IAAI9lB,KAAO1Y,KAAKomE,UACLpmE,KAAKomE,UAAU1tD,GACrB8lB,QAKd,IAAIwsC,EAAoB1rE,SAAS2rE,uBAAuB,uBACxD,IAAK,IAAInhE,EAAI,EAAGA,EAAIkhE,EAAkBnhE,OAAQC,IAC1BkhE,EAAkBlhE,GAC1BohE,UAAUvsC,OAAO,uBAG7B,GAAI3+B,KAAK0mE,UAAW,CAChB,IACIyE,EADQ,GAAAnrE,KAAA,IAAkBorE,eACZC,QAAQ,GACtBC,EAAMH,EAAMI,KAAKJ,EAAMI,KAAK1hE,OAAS,GAEzC,QAAYwJ,IAARi4D,EAAmB,CACnB,IAAIzhE,EAASyhE,EAAIjsE,cAAc,WAC3B45D,MAEApvD,EAAO2hE,iBACP3hE,EAAOqhE,UAAUt5C,IAAI,yBAGrB/nB,EAAO4hE,QACP5hE,WAAQ6hE,YAOxB,kBAII,GAHA,GAAA1rE,KAAA,IAAiB6kB,SAASwlD,GAAUA,EAAM1rC,WAC1C,GAAA3+B,KAAA,IAAiB6J,OAAS,EAEtB,GAAA7J,KAAA,IAAemgE,MAAQngE,KAAK0mE,WAAa,GAAA1mE,KAAA,IAAa6J,OAAS,EAAG,CAElE,IAAI8hE,EAAmB,GAAA3rE,KAAA,IAAa2jC,QAAO,CAAC9hC,EAAGC,IAC3CqB,KAAK6H,IAAInJ,EAAEA,EAAI,GAAA7B,KAAA,IAAiB6B,GAAKsB,KAAK6H,IAAIlJ,EAAED,EAAI,GAAA7B,KAAA,IAAiB6B,GAC/DA,EACAC,IACRD,EACE+pE,EAAmB,GAAA5rE,KAAA,IAAa2jC,QAAO,CAAC9hC,EAAGC,IAC3CqB,KAAK6H,IAAInJ,EAAEC,EAAI,GAAA9B,KAAA,IAAiB8B,GAAKqB,KAAK6H,IAAIlJ,EAAEA,EAAI,GAAA9B,KAAA,IAAiB8B,GAC/DD,EACAC,IACRA,EAEF,GAAIqB,KAAK6H,IAAI2gE,EAAW,GAAA3rE,KAAA,IAAiB6B,IAAM,GAAA7B,KAAA,IAAeogE,cAAgBpgE,KAAK6rE,UAAW,CAE1F,GAAA7rE,KAAA,IAAiB6B,EAAI8pE,EACrB,GAAA3rE,KAAA,IAAgB6B,EAAI8pE,EAEpB,IAAIvrB,EAAOpgD,KAAKgoE,SACX5nB,KAAK,GAAApgD,KAAA,IAAgB6B,GAAI,IAAO,GAAA7B,KAAA,IAAgB6B,EAAG,KACnDw1C,OAAO,CAAE3L,MAAO,UAAW5rC,MAAOE,KAAK8rE,UAAY,IACxD1rB,EAAK3hB,OACL,GAAAz+B,KAAA,IAAiBoP,KAAKgxC,GAE1B,GAAIj9C,KAAK6H,IAAI4gE,EAAW,GAAA5rE,KAAA,IAAiB8B,IAAM,GAAA9B,KAAA,IAAeogE,cAAgBpgE,KAAK6rE,UAAW,CAE1F,GAAA7rE,KAAA,IAAiB8B,EAAI8pE,EACrB,GAAA5rE,KAAA,IAAgB8B,EAAI8pE,EAEpB,IAAIxrB,EAAOpgD,KAAKgoE,SACX5nB,MAAM,IAAQ,GAAApgD,KAAA,IAAgB8B,EAAG,IAAQ,GAAA9B,KAAA,IAAgB8B,GACzDu1C,OAAO,CAAE3L,MAAO,UAAW5rC,MAAQE,KAAK8rE,UAAY,IACzD1rB,EAAK3hB,OACL,GAAAz+B,KAAA,IAAiBoP,KAAKgxC,KAKlC,cACI,GAAI,GAAApgD,KAAA,IAAekgE,cAAgB,GAAAlgE,KAAA,IAAe+qE,WAM9C,OALA/qE,KAAK+lE,WAAWlhD,SAAS3f,IACrBA,EAAEqF,MACFrF,EAAEy5B,iBAEN3+B,KAAK+lE,WAAWl8D,OAAS,GAI7B,IAAIigE,EAAc,EAElB9pE,KAAK+rE,WAAW,GAAA/rE,KAAA,IAAa,GAAI8pE,GACjCA,IAEA,IAAK,IAAIhgE,EAAI,EAAGA,EAAI9J,KAAKimE,SAASp8D,OAAQC,IAAK,CAC3C,MAAMgS,EAAO9b,KAAKimE,SAASn8D,GAE3B,IAAID,EAASiS,EAAKjS,SACdmiE,EAAMlwD,EAAK4/B,QAAQ7xC,EAAS,GAC5BoiE,EAAW,IAAI,GAAMD,EAAInqE,EAAGmqE,EAAIlqE,GACpC9B,KAAK+rE,WAAWE,EAAUnC,GAC1BA,KAEC9pE,KAAK0mE,WAAa,GAAA1mE,KAAA,IAAa6J,OAAS,GACzC7J,KAAK+rE,WAAW,GAAA/rE,KAAA,IAAa,GAAAA,KAAA,IAAa6J,OAAS,GAAIigE,GAG/D,YAKI,IAAI/R,EACAJ,EALJ33D,KAAKqmE,WAAWxhD,SAASvT,IACrBA,EAAQqtB,YAEZ3+B,KAAKqmE,WAAa,IAAIp2D,MAGtB,IAAIi8D,EAAmB,GAAAlsE,KAAA,IAAa,GAEpC,GADAA,KAAKkmE,WAAa,IAAIj2D,MAClB,GAAAjQ,KAAA,IAAa6J,OAAS,EAAG,CACzB,IAAK,IAAIC,EAAI,EAAGA,EAAI,GAAA9J,KAAA,IAAa6J,OAAQC,IAAK,CAC1C,IAAIisD,EAGAA,EADAjsD,GAAK,GAAA9J,KAAA,IAAa6J,OAAS,EACtB,GAAA7J,KAAA,IAEAq3D,GAAe,GAAAr3D,KAAA,IAAa8J,EAAI,GAAI,GAAA9J,KAAA,IAAa8J,IAAK,IAG/D,IAAIksD,EAAKqB,GAAe6U,EAAW,GAAAlsE,KAAA,IAAa8J,IAAK,IAEjDsxC,EAAQ8b,GAAgBnB,EADnB,GAAA/1D,KAAA,IAAa8J,GACcksD,GACvB,GAAT5a,IACAA,EAAQ,MAGX2c,EAAOJ,GAASH,GAAa0U,EAAW,GAAAlsE,KAAA,IAAa8J,GAClDA,GAAK,GAAA9J,KAAA,IAAa6J,OAAS,EAAI,GAAA7J,KAAA,IAAkB,GAAAA,KAAA,IAAa8J,EAAI,GAClEsxC,EACA,GAAAp7C,KAAA,IAAe4gE,YAGd5gE,KAAK0mE,WAAa58D,GAAK,GAAA9J,KAAA,IAAa6J,OAAS,IAC9CkuD,EAAQ,GAAA/3D,KAAA,IAAa8J,IAGzB,IAAIs2C,EAAOpgD,KAAKgoE,SACX5nB,KAAK8rB,EAAUrqE,EAAGqqE,EAAUpqE,EAAGi2D,EAAMl2D,EAAGk2D,EAAMj2D,GAC9Cu1C,OAAO,CAAE3L,MAAO,QAAS5rC,MAAOE,KAAK8rE,YAC1C9rE,KAAKgmE,SAAS52D,KAAKgxC,GACnBpgD,KAAKkmE,WAAW92D,KAAK,IAAIm6D,GAAU2C,EAAWnU,IAC9C,IAAI9yB,EAAM,iBAAoBinC,EAAW,GAAAlsE,KAAA,IAAa8J,IAAID,OACtDoiE,EAAW5U,GAAe6U,EAAW,GAAAlsE,KAAA,IAAa8J,GAAI,EAAKm7B,EAAM,GACjE5T,EAAO66C,EAAUh9B,QAEjBjrC,EAAoD,EAAhDizD,GAAgB7lC,EAAM46C,EADX,IAAI,GAAM56C,EAAKxvB,EAAIojC,EAAM,EAAG5T,EAAKvvB,IAEhDmC,EAAI,EAAGA,GAAK,GACXA,GAAK,GAEV,IAAIkoE,EAAY,IAAI,GAIhBF,EAASpqE,EAAoC,GAAhCsB,KAAK6lC,IAAI/kC,GAAKd,KAAKq4B,GAAK,MACrCywC,EAASnqE,EAAoC,GAAhCqB,KAAK8lC,IAAIhlC,GAAKd,KAAKq4B,GAAK,OAErCv2B,EACA,GAAAjF,KAAA,IAAa8J,EAAI,GAAGytD,SAAS,GAAAv3D,KAAA,IAAa8J,IAAID,OAC9C7J,KAAK4+D,YACT5+D,KAAKosE,gBAAgBD,EAAWlnE,EAAG6E,EAAI,GACvCoiE,EAAYvU,EAAMzoB,QAGtB,GAAIlvC,KAAK0mE,UAAW,CACZvyD,MAAM+3D,EAAUrqE,KAChBqqE,EAAY,GAAAlsE,KAAA,IAAgBkvC,SAGhC,IAAIkR,EAAOpgD,KAAKgoE,SACX5nB,KAAK8rB,EAAUrqE,EAAGqqE,EAAUpqE,EAAG,GAAA9B,KAAA,IAAgB6B,EAAG,GAAA7B,KAAA,IAAgB8B,GAClEu1C,OAAO,CAAE3L,MAAO,QAAS5rC,MAAOE,KAAK8rE,YAC1C9rE,KAAKgmE,SAAS52D,KAAKgxC,GACnBpgD,KAAKkmE,WAAW92D,KAAK,IAAIm6D,GAAU2C,EAAW,GAAAlsE,KAAA,MAE9C,IAAIilC,EAAM,iBAAoBinC,EAAW,GAAAlsE,KAAA,KAAiB6J,OAAS,EAC/DoiE,EAAW5U,GAAe6U,EAAW,GAAAlsE,KAAA,IAAiB,EAAIilC,GAC1D5T,EAAO66C,EAAUh9B,QAEjBjrC,EAAoD,EAAhDizD,GAAgB7lC,EAAM46C,EADX,IAAI,GAAM56C,EAAKxvB,EAAIojC,EAAK5T,EAAKvvB,IAE5CmC,EAAI,EAAGA,GAAK,GACXA,GAAK,GAEV,IAAIkoE,EAAY,IAAI,GAChBF,EAASpqE,EAAoC,GAAhCsB,KAAK6lC,IAAI/kC,GAAKd,KAAKq4B,GAAK,MACrCywC,EAASnqE,EAAoC,GAAhCqB,KAAK8lC,IAAIhlC,GAAKd,KAAKq4B,GAAK,OAErCv2B,EACA,GAAAjF,KAAA,IAAa,GAAAA,KAAA,IAAa6J,OAAS,GAAG0tD,SAAS,GAAAv3D,KAAA,KAC1C6J,OAAS7J,KAAK4+D,YACvB5+D,KAAKosE,gBAAgBD,EAAWlnE,EAAG,QAK/C,gBAAgBknE,EAAkBtiE,EAAgBigE,GAC9C,IAAK,GAAA9pE,KAAA,IAAe0gE,kBAAoB,GAAA1gE,KAAA,IAAekgE,YACnD,OAEJ,GAAIr2D,EAAS,GAAA7J,KAAA,IAAe2gE,iBACxB,OAEJ,IAAI9B,EAAK7+D,KACLu3C,EAAiB,IAAI8d,GAAO,EAAG,GAC/B,MAAQyU,KAAO9pE,KAAK02D,eACpBnf,EAASv3C,KAAK02D,aAAa,MAAQoT,GACnCqC,EAAUtqE,EAAIsqE,EAAUtqE,EAAK01C,EAAQ,EACrC40B,EAAUrqE,EAAIqqE,EAAUrqE,EAAKy1C,EAAQ,GAEzC,IAAItS,EAAMi8B,GAAOr3D,EAAOoK,YACpBylC,EAAOmlB,EAAGmJ,SAASrW,MAAM1sB,GAC7ByU,EACKmE,KAAKsuB,EAAUtqE,EAAI,GAAIsqE,EAAUrqE,EAAI,GACrC85C,KAAK,CAAExE,KAAM,QAASi1B,OAAQ,cAAe/6C,KAAMutC,EAAGyN,WAC3D5yB,EAAKz7B,KAAK,MAAO,MAAQ6rD,GAAK,GAE9BpwB,EAAKuwB,WAAU,WACX,IAAKpL,EAAG6H,UAAW,CACf,IAAIhtB,EAAa15C,KACjB05C,EAAKkC,KAAK,CAAExE,KAAM,QAClBsC,EAAK3X,SAAS,aACd,IAAInb,EAAM8yB,EAAKz7B,KAAK,OAChB5F,EAAQ/Y,SAASmgE,eAAe74C,GACpCvO,WAAOozD,QACPpzD,WAAOqzD,aAGfhyB,EAAKwwB,UAAS,WACV,IAAKrL,EAAG6H,UAAW,CACf,IAAIhtB,EAAa15C,KACjB05C,EAAKkC,KAAK,CAAExE,KAAM,UAClBsC,EAAK1X,YAAY,aACjB,IAAIpb,EAAM8yB,EAAKz7B,KAAK,OAChB5F,EAAQ/Y,SAASmgE,eAAe74C,GACpCvO,WAAOk0D,WAGf7yB,EAAKswB,UAAS,WACV,GAAInL,EAAGmK,SAAU,OACjB,GAAInK,EAAG6H,UAAW,OAClB,IAEI8F,EAFaxsE,KACMie,KAAK,OACPipB,UAAU,GAE3Bn/B,EADgB82D,EAAGqH,WAAWsG,GAChBhD,cAClB,GAAA3K,EAAA,IAAW3rD,QAAQs5D,EAAa,EAAG,EAAGzkE,GACtC82D,EAAGC,uBACHD,EAAGgJ,kBAEP,IAyBI7gB,EAzBAmjB,GAAc,EAClBzwB,EAAKzwC,YAAW,SAAUe,GACtB,IAAK60D,EAAG6H,UAAW,CACf,IAAKyD,EAKD,OAJAA,GAAc,EACdz4D,YAAW,WACPy4D,GAAc,IACf,MACI,EAGX,GAAItL,EAAG6H,UAAW,OAClB,GAAI7H,EAAGmK,SAAU,OAEjB,IAEIwD,EAFaxsE,KACMie,KAAK,OACPipB,UAAU,GAE3Bn/B,EADgB82D,EAAGqH,WAAWsG,GAChBhD,cAClB,GAAA3K,EAAA,IAAW3rD,QAAQs5D,EAAa,EAAG,EAAGzkE,GACtC82D,EAAGC,2BAMX,IACI2N,EACAC,EACAC,GAAgB,EACpBjzB,EAAKzwC,YAAW,SAAUe,GACtB,IAAI0vC,EAAa15C,KACjB0sE,EAAwB,IAAI,GAAMhzB,EAAK73C,IAAK63C,EAAK53C,KACjD2qE,EAAgB,YAAe5N,EAAGnD,iBAAiB1xD,IAC9C60D,EAAG6H,WACC1f,IACDA,EAAQt1C,YAAW,WACfs1C,EAAQ,KAER,IAAIpgC,EAAM8yB,EAAKz7B,KAAK,OAChB5F,EAAQ/Y,SAASmgE,eAAe74C,GACpCvO,WAAOozD,QACPpzD,WAAOqzD,SACPiB,GAAgB,IAjBZ,SAuBpBjzB,EAAKnwC,WAAU,SAAUS,GACrB,IACIhH,EADI,YAAe67D,EAAGnD,iBAAiB1xD,IACjCutD,SAASkV,IACfzpE,EAAEnB,EAAI,GAAKmB,EAAElB,EAAI,IAEbklD,IACAjxC,aAAaixC,GACbA,EAAQ,SAKpBtN,EAAKtwC,UAAS,SAAUY,GAEhBg9C,IACAjxC,aAAaixC,GACbA,EAAQ,MAER2lB,IACA3sE,KAAK69C,KAAK6uB,EAAsB7qE,EAAG6qE,EAAsB5qE,GACzD6qE,GAAgB,EAChB9N,EAAGgJ,mBAGXhJ,EAAGuH,UAAU,MAAQ0D,GAAOpwB,EAGhC,iBACI,IAAImlB,EAAK7+D,KAET,GAAK,GAAA6+D,EAAA,IAAa2B,kBAAmB,GAAAxgE,KAAA,IAAekgE,YAIpD,IAAK,IAAIp2D,EAAI,EAAGA,EAAI+0D,EAAGoH,SAASp8D,OAAQC,IAAK,CACzC,MAAM8iE,EAAU/N,EAAGoH,SAASn8D,GACtB+iE,EAAWhO,EAAGsH,aAAar8D,GACjC,IAAIsxC,EAAQ,OAEgB/nC,IAAxB,GAAAwrD,EAAA,IAAa/0D,EAAI,KACjBsxC,EAAQ,GAAAyjB,EAAA,IAAa/0D,EAAI,GAAGqrD,OAGhC,IAIIgX,EAAY9U,GAJMyO,GAAagH,eAAeF,GAC3B9G,GAAagH,eAAeD,GAEjC,IAEdt1B,EAAiB,IAAI8d,GAAO,EAAG,GAC/B,QAAUvrD,KAAK+0D,EAAGnI,eAClBnf,EAASsnB,EAAGnI,aAAa,QAAU5sD,GACnCqiE,EAAUtqE,EAAIsqE,EAAUtqE,EAAK01C,EAAQ,EACrC40B,EAAUrqE,EAAIqqE,EAAUrqE,EAAKy1C,EAAQ,GAEzC,IAAIw1B,EAAU,GACVC,EAAU,EAGd,GAAI7pE,KAAK6H,IAAIowC,GAAS,GAAAyjB,EAAA,IAAa4B,iBAA6B,IAAVrlB,EAClD,SAEJ,IA0BI4L,EA1BAtN,EAAOmlB,EAAGmJ,SAASrW,MAAMvW,EAAM6xB,QAAQ,GAAGh5D,WAAa,KAC3DylC,EAAKmE,KAAKsuB,EAAUtqE,EAAIkrE,EAASZ,EAAUrqE,EAAIkrE,GAASpxB,KAAK,CAAExE,KAAM,QAASi1B,OAAQ,cAAe/6C,KAAMutC,EAAGyN,WAC9G5yB,EAAKz7B,KAAK,MAAO,QAAUnU,GAAG,GAE9B4vC,EAAKuwB,WAAU,WACX,IAAKpL,EAAG6H,UAAW,CACf,IAAIhtB,EAAa15C,KACjB05C,EAAKkC,KAAK,CAAExE,KAAM,QAClBsC,EAAK3X,SAAS,aACd,IAAInb,EAAM8yB,EAAKz7B,KAAK,OAChB5F,EAAQ/Y,SAASmgE,eAAe74C,GACpCvO,WAAOozD,QACPpzD,WAAOqzD,aAGfhyB,EAAKwwB,UAAS,WACV,IAAKrL,EAAG6H,UAAW,CACf,IAAIhtB,EAAa15C,KACjB05C,EAAKkC,KAAK,CAAExE,KAAM,UAClBsC,EAAK1X,YAAY,aACjB,IAAIpb,EAAM8yB,EAAKz7B,KAAK,OAChB5F,EAAQ/Y,SAASmgE,eAAe74C,GACpCvO,WAAOk0D,WAKf,IACIE,EACAC,EAFAQ,EAAgB,IAGhBP,GAAgB,EACpBjzB,EAAKzwC,YAAW,SAAUe,GACtB,IAAI0vC,EAAa15C,KACjB0sE,EAAwB,IAAI,GAAMhzB,EAAK73C,IAAK63C,EAAK53C,KACjD2qE,EAAgB,YAAe5N,EAAGnD,iBAAiB1xD,IAC9C60D,EAAG6H,WACC1f,IACDA,EAAQt1C,YAAW,WACfs1C,EAAQ,KAER,IAAIpgC,EAAM8yB,EAAKz7B,KAAK,OAChB5F,EAAQ/Y,SAASmgE,eAAe74C,GACpCvO,WAAOozD,QACPpzD,WAAOqzD,SACPiB,GAAgB,IACjBO,OAKfxzB,EAAKnwC,WAAU,SAAUS,GACrB,IACIhH,EADI,YAAe67D,EAAGnD,iBAAiB1xD,IACjCutD,SAASkV,IACfzpE,EAAEnB,EAAI,GAAKmB,EAAElB,EAAI,IAEbklD,IACAjxC,aAAaixC,GACbA,EAAQ,SAKpBtN,EAAKtwC,UAAS,SAAUY,GAEhBg9C,IACAjxC,aAAaixC,GACbA,EAAQ,MAER2lB,IACA3sE,KAAK69C,KAAK6uB,EAAsB7qE,EAAG6qE,EAAsB5qE,GACzD6qE,GAAgB,EAChB9N,EAAGgJ,mBAGXhJ,EAAGuH,UAAU,QAAUt8D,GAAK4vC,GAIpC,QAAQ94B,EAAcC,EAAY06B,GAC9B,IAAIr3C,EAAI,CAAC,IAAK0c,EAAM/e,EAAG+e,EAAM9e,EAAG,IAAKy5C,EAAQA,EAAQ,EAAG,EAAG,EAAG16B,EAAIhf,EAAGgf,EAAI/e,GAAI6O,KAAK,KAElF,OADQ3Q,KAAKgoE,SAASlsD,KAAK5X,GAAGmzC,OAAO,CAAE3L,MAAO,QAAS5rC,MAAOE,KAAK8rE,YAAa10B,KAAK,QAIzF,eACI,IAAIt7B,EACJ,GAAI,GAAA9b,KAAA,IAAa6J,OAAS,EAAG,CACrB7J,KAAK0mE,WACL,GAAA1mE,KAAA,IAAaoP,KAAK,GAAApP,KAAA,KAGtB,IAAK,IAAI8J,EAAI,EAAGA,EAAI,GAAA9J,KAAA,IAAa6J,OAAS,EAAGC,IAAK,CAE9C,IAAIqjE,EAAU,GAEdA,EAAUhqE,KAAKa,IAAI,GAAAhE,KAAA,IAAe4gE,WAAYuM,GAC9C,IAKIpV,EAAcJ,EALdyV,EAAWptE,KAAKkmE,WAAWp8D,EAAI,GAC/BisD,EAAKsB,GAAe,GAAAr3D,KAAA,IAAa8J,EAAI,GAAI,GAAA9J,KAAA,IAAa8J,GAAI,EAAIqjE,GAC9DnX,EAAKqB,GAAe+V,EAASC,MAAO,GAAArtE,KAAA,IAAa8J,GAAI,EAAIqjE,GAEzD/xB,EAAQ8b,GAAgBnB,EADnB,GAAA/1D,KAAA,IAAa8J,GACcksD,GAEvB,GAAT5a,IAAYA,EAAQ,MACvB2c,EAAOJ,GAASH,GAAa4V,EAASC,MAAO,GAAArtE,KAAA,IAAa8J,GAAI,GAAA9J,KAAA,IAAa8J,EAAI,GAAIsxC,EAAO,GAAAp7C,KAAA,IAAe4gE,YAC1G7I,EAAQqV,EAASE,IAEblyB,EAAQ,MAAKA,GAAS,KAC1B,IAAIv6B,EAAaw2C,GAAe,GAAAr3D,KAAA,IAAa8J,EAAI,GAAI6tD,EAAO,EAAI3B,EAAGuB,SAASQ,GAAOluD,QACzE1G,KAAK2vC,IAAI,GAAK3vC,KAAK6H,IAAIowC,IAC7Bj4C,KAAK6H,IAAIowC,GAAS,KAClB+xB,EAAUA,EAAUhqE,KAAK2vC,KAAK,GAAK3vC,KAAK6H,IAAIowC,KAAW,IAAMj4C,KAAKq4B,KAAO2xC,GAExEh5D,MAAM0M,EAAIhf,IAAO,GAAA7B,KAAA,IAAekgE,cAE7BpkD,EADAs/B,EAAQ,EACDp7C,KAAKutE,QAAQ1sD,EAAKm1C,EAAImX,GAEtBntE,KAAKutE,QAAQvX,EAAIn1C,EAAKssD,GAEjCntE,KAAKmmE,aAAa/2D,KAAK0M,IAGtB3H,MAAMwjD,EAAM91D,KAETia,EADAs/B,GAAS,EACFp7C,KAAKutE,QAAQxV,EAAOJ,EAAO,GAAA33D,KAAA,IAAe4gE,YAE1C5gE,KAAKutE,QAAQ5V,EAAOI,EAAO,GAAA/3D,KAAA,IAAe4gE,YAErD5gE,KAAKimE,SAAS72D,KAAK0M,IAIvB9b,KAAK0mE,WACL,GAAA1mE,KAAA,IAAakT,QAAQ,EAAG,IAIpC,gBACI,IAAIs6D,EAAmB,IAAI,GAAM,EAAG,GAChCC,EAAUtqE,KAAKC,IAAIpD,KAAKinE,gBAAgBviE,UAAW,KAMvD,GALA1E,KAAKsmE,mBAAmBzhD,SAASwlD,IAC7BA,EAAM1rC,YAEV3+B,KAAKsmE,mBAAqB,IAAIr2D,MAEzB,GAAAjQ,KAAA,IAAeugE,qBAAsB,GAAAvgE,KAAA,IAAekgE,YAIzD,IAAK,IAAIp2D,EAAI,EAAGA,EAAI9J,KAAKkmE,WAAWr8D,OAAQC,IAAK,CAC7C,MAAMs2C,EAAOpgD,KAAKkmE,WAAWp8D,GAC7B,IAAIytC,EAAiB,IAAI8d,GAAO,EAAG,GAE/B9d,EADA,GAAAv3C,KAAA,IAAyBklE,mBAChB7P,GAAOK,qBAAqBmD,GAAmBJ,GAASrY,EAAKitB,MAAOjtB,EAAKktB,KAAO,IAAK,GAAAttE,KAAA,IAAwBytE,GAE7GpY,GAAOK,qBAAqBmD,GAAmBJ,GAASrY,EAAKitB,MAAOjtB,EAAKktB,KAAO,IAAK,GAAAttE,KAAA,IAAwBytE,GAG1H,IAAIC,EAAattB,EAAKitB,MAAM/V,UAAU/f,GAClCo2B,EAAWvtB,EAAKktB,IAAIhW,UAAU/f,GAClC,IAAKpjC,MAAMojC,EAAO11C,GAAI,CAClB,IAAI+rE,EAAY5tE,KAAKgoE,SAChB5nB,KAAKstB,EAAW7rE,EAAG6rE,EAAW5rE,EAAG6rE,EAAS9rE,EAAG8rE,EAAS7rE,GACtDu1C,OAAO,CAAE3L,MAAO,UAAW5rC,MAAQE,KAAK8rE,UAAY,EAAI+B,UAAW,QAGxE,GAFA7tE,KAAKsmE,mBAAmBl3D,KAAKw+D,GAEzB9jE,EAAI,IAAMA,EAAI,GAAA9J,KAAA,IAAa6J,OAAS,GAAK7J,KAAK0mE,WAAY,CAG1D,IAAIziE,EACA,EACAoxD,GAAOuD,aACH,iBAAoB,GAAA54D,KAAA,IAAa8J,GAAI,GAAA9J,KAAA,IAAa8J,EAAI,IACtD,iBAAoBA,EAAI,GAAA9J,KAAA,IAAa6J,OAAS,EAAI,GAAA7J,KAAA,IAAa8J,EAAI,GAAK,GAAA9J,KAAA,IAAiB,GAAAA,KAAA,IAAa8J,KAC1GgkE,EAAuB,EAAIzY,GAAOuD,aAAa,iBAAoB,GAAA54D,KAAA,IAAa8J,GAAI,GAAA9J,KAAA,IAAa8J,EAAI,IACrG,iBAAoBA,EAAI,GAAA9J,KAAA,IAAa6J,OAAS,EAAI,GAAA7J,KAAA,IAAa8J,EAAI,GAAK,GAAA9J,KAAA,IAAiB,GAAAA,KAAA,IAAa8J,KAAO,EAGjH,IAFU,KAAN7F,IAAW6pE,GAAc,GAEzBA,EAAa,CACb,IAAIC,EAAY,GAAA/tE,KAAA,IAAyBklE,mBACnC,GAAAllE,KAAA,IAAe4gE,WAAa,GAAA5gE,KAAA,IAAwBA,KAAK6rE,UACzD,GAAA7rE,KAAA,IAAe4gE,WAAa,GAAA5gE,KAAA,IAAwBA,KAAK6rE,UAC/D,GAAIkC,EAAY,EAAG,CACf,IAAIv8D,EAAI4uC,EAAKitB,MAAM/V,UAAU/f,GACzBrzC,EAAI,CAAC,IAAKspE,EAAU3rE,EAAG2rE,EAAU1rE,EAAG,IAAKisE,EAAWA,EAAW,EAAG,EAAG,EAAGv8D,EAAE3P,EAAG2P,EAAE1P,GAAI6O,KAAK,KACxFytB,EAAIp+B,KAAKgoE,SAASlsD,KAAK5X,GAAGmzC,OAAO,CAAE3L,MAAO,UAAW5rC,MAAQE,KAAK8rE,UAAY,EAAI+B,UAAW,QAASz2B,KAAK,QAC/Gp3C,KAAKsmE,mBAAmBl3D,KAAKgvB,QAG9B,CACH,IAAI2vC,EAAY,GAAA/tE,KAAA,IAAyBklE,mBACnC,GAAAllE,KAAA,IAAe4gE,WAAa,GAAA5gE,KAAA,IAAwBytE,EACpD,GAAAztE,KAAA,IAAe4gE,WAAa,GAAA5gE,KAAA,IAAwBytE,EAC1D,GAAIM,EAAY,EAAG,CAEf,IAAIv8D,EAAI4uC,EAAKitB,MAAM/V,UAAU/f,GACzBrzC,EAAI,CAAC,IAAKspE,EAAU3rE,EAAG2rE,EAAU1rE,EAAG,IAAKisE,EAAWA,EAAW,EAAG,EAAG,EAAGv8D,EAAE3P,EAAG2P,EAAE1P,GAAI6O,KAAK,KACxFytB,EAAIp+B,KAAKgoE,SAASlsD,KAAK5X,GAAGmzC,OAAO,CAAE3L,MAAO,UAAW5rC,MAAQE,KAAK8rE,UAAY,EAAI+B,UAAW,QAASz2B,KAAK,QAC/Gp3C,KAAKsmE,mBAAmBl3D,KAAKgvB,KAIzCovC,EAAYptB,EAAKktB,IAAIhW,UAAU/f,KAK3C,iBACI,IAAIsnB,EAAK7+D,KAELmrE,EADQ,GAAAnrE,KAAA,IAAkBorE,eACZC,QAAQ,GACtB2C,EAAM,EACNC,EAAY,EACZ7Y,EAAe,EACf8Y,EAAW5uE,SAASmgE,eAAe,eAGnCuO,EADAnP,EAAG6H,UACG,GAAA7H,EAAA,IAAWh1D,OAEX,GAAAg1D,EAAA,IAAWh1D,OAAS,EAG9B,GAAAg1D,EAAE,GAAa,IAAI5uD,OACnB,IAAK,IAAInG,EAAI,EAAGA,EAAIkkE,EAAKlkE,IAAK,CAC1B,IAAIisD,EAAK,GAAA8I,EAAA,IAAW/0D,GAChBksD,EAAKlsD,IAAM,GAAA+0D,EAAA,IAAWh1D,OAAS,EAAI,GAAAg1D,EAAA,IAAgB,GAAAA,EAAA,IAAW/0D,EAAI,GAClEm7B,EAAM,iBAAoB8wB,EAAIC,GAAInsD,OAASg1D,EAAGD,YAC9C5G,EAAY,GAAK,IAAMZ,GAAgBrB,EAAIC,IAC3C5a,EAAQ4c,EAAYiW,EACpB7yB,EAAQ,MAAKA,EAAQ,GAAK,IAAMA,IAChCA,GAAS,MAAKA,EAAQ,IAAMA,GAChC6yB,EAAYjW,EACZ,IAAImW,EAAM,IAAIlZ,GAAQhwB,EAAKmW,GAC3B+yB,EAAI/Y,aAAeA,EACnB,GAAAyJ,EAAA,IAAazvD,KAAK++D,GAClB/Y,IAGJ,IAAK,IAAItrD,EAAI,EAAGA,EAAI,GAAA+0D,EAAA,IAAah1D,OAAS,EAAGC,IAAK,CAC9C,IAKID,EACAuxC,EANA+yB,EAAM,GAAAtP,EAAA,IAAa/0D,QACXuJ,IAAR86D,IACAA,EAAM,IAAIlZ,GAAQ,EAAG,GACrBkZ,EAAI/Y,aAAe,GAIvB,IAAIkW,EAA2BH,EAAMI,KAAKzhE,GAC1C,QAAYuJ,IAARi4D,EAAmB,CACnBA,EAAMH,EAAMiD,YACZ,IAAIC,EAAW/uE,SAASgvE,WAAWJ,EAASK,SAAS,GACrDjD,EAAI7rE,YAAY4uE,GAChBxkE,EAASyhE,EAAIjsE,cAAc,WAC3BwK,EAAOvJ,iBAAiB,UAAU,IAAMu+D,EAAG2P,qBAC3CpzB,EAAQkwB,EAAIjsE,cAAc,UAC1B+7C,EAAM96C,iBAAiB,UAAU,IAAMN,KAAKwuE,qBAE5C,IAAIC,EAAMnD,EAAIjsE,cAAc,mBAC5BovE,EAAIC,QAAU,WACV,GAAI7P,EAAGmK,SAAU,OACjB,IAAI2F,EAAKF,EAAIG,QAAQ,MACjBxqC,EAAIuqC,aAAE,EAAFA,EAAItvE,cAAc,WACtB4E,EAAI0qE,aAAE,EAAFA,EAAItvE,cAAc,iBAEnBw/D,EAAGnI,aAAazyD,EAAEmW,WAClBykD,EAAGnI,aAAatyB,EAAEhqB,IACzBu0D,WAAIhwC,SACJkgC,EAAG2P,yBAIP3kE,EAASyhE,EAAIjsE,cAAc,WAC3B+7C,EAAQkwB,EAAIjsE,cAAc,UAG9BisE,EAAIlxD,GAA0B,IAArB+zD,EAAI/Y,aAAqB,SAAW+Y,EAAI/Y,aAAanhD,WAC9Cq3D,EAAIjsE,cAAc,eACxBO,YAAkC,GAApBuuE,EAAI/Y,aAAoB,GAAK+Y,EAAI/Y,aAAanhD,WAEtEpK,EAAOuQ,GAAK,OAAS+zD,EAAI/Y,aAAe,GACxCvrD,EAAO+N,MAA4B,GAApBu2D,EAAI/Y,aAAoB,GAAK8L,GAAOiN,EAAIjZ,OAAOjhD,YAE9DmnC,EAAMhhC,GAAK,SAAW+zD,EAAI/Y,aAAe,GACzCha,EAAMxjC,MAA4B,GAApBu2D,EAAI/Y,aAAoB,GAAK/tB,GAAM8mC,EAAIhZ,MAAO,GAAGlhD,WAAa,IAGhF,GAAIk3D,EAAMI,KAAK1hE,OAAS,GAAA7J,KAAA,IAAe6J,OAAQ,CAC3C,MAAMglE,EAAW1D,EAAMI,KAAK,GAAAvrE,KAAA,IAAe6J,QAC3CglE,EAASz0D,GAAK,SACDy0D,EAASxvE,cAAc,WACxBwvE,EAASxvE,cAAc,UAEvC,IAAK,IAAIyK,EAAI,GAAA9J,KAAA,IAAe6J,OAAS,EAAGC,EAAIqhE,EAAMI,KAAK1hE,OAAQC,IAC3CqhE,EAAMI,KAAKzhE,GACnB60B,SAIhB,gBACI,IAAIkgC,EAAK7+D,KAELmrE,EADQ,GAAAnrE,KAAA,IAAkBorE,eACZC,QAAQ,GACtB6C,EAAW5uE,SAASmgE,eAAe,eAEvC,KAAO0L,EAAMI,KAAK1hE,QACdshE,EAAMI,KAAK,GAAG5sC,SAElB,IAAI2sC,EAAMH,EAAMiD,YACZC,EAAW/uE,SAASgvE,WAAWJ,EAASK,SAAS,GACrDjD,EAAI7rE,YAAY4uE,GACH/C,EAAIjsE,cAAc,WACxBiB,iBAAiB,UAAU,IAAMu+D,EAAG2P,qBAC/BlD,EAAIjsE,cAAc,UACxBiB,iBAAiB,UAAU,IAAMN,KAAKwuE,qBAGhD,YACI,GAAAxuE,KAAI,GAAa,IAAIiQ,OACrB,GAAAjQ,KAAI,GAAW,IAAIiQ,OACnBjQ,KAAK02D,aAAe,GACpB,GAAA12D,KAAA,IAAgB6J,OAAS,EACzB,GAAA7J,KAAA,IAAgB6J,OAAS,EACzB,GAAA7J,KAAA,IAAyBklE,oBAAqB,EAC9CllE,KAAK+lE,WAAWlhD,SAAS3f,IAAQA,EAAEqF,MAAOrF,EAAEy5B,YAC5C3+B,KAAK+lE,WAAWl8D,OAAS,EACzB7J,KAAKgmE,SAASnhD,SAASu7B,IAAWA,EAAKzhB,YACvC3+B,KAAKgmE,SAASn8D,OAAS,EACvB7J,KAAKimE,SAASphD,SAAS3f,IAAQA,EAAEy5B,YACjC3+B,KAAKimE,SAASp8D,OAAS,EACvB7J,KAAKmmE,aAAathD,SAAS3f,IAAQA,EAAEy5B,YACrC3+B,KAAKmmE,aAAat8D,OAAS,EAC3B7J,KAAKsmE,mBAAmBzhD,SAAS3f,IAAQA,EAAEy5B,YAC3C3+B,KAAKsmE,mBAAmBz8D,OAAS,EACjC7J,KAAKsmE,mBAAmBzhD,SAAS3f,IAAQA,EAAEy5B,YAC3C3+B,KAAKsmE,mBAAmBz8D,OAAS,EAEjC,IAAK,IAAI6O,KAAO1Y,KAAKomE,UAAW,CAC5B,IAAIkE,EAAQtqE,KAAKomE,UAAU1tD,GAC3B4xD,EAAM//D,MACN+/D,EAAM3rC,gBACC3+B,KAAKomE,UAAU1tD,GAE1B1Y,KAAK0mE,WAAY,EACjB1mE,KAAK8uE,gBAGT,QAAQC,GACJ,IAAIC,EACJhvE,KAAKivE,YAEDD,EADAlY,GAASiY,GACIrpD,KAAKud,MAAM8rC,GAEXA,EAGjB,IAAIp7D,EAAI,CAAEgM,KAAMovD,EAAOloD,YAAaqoD,QAASH,EAAOG,QAASC,OAAQJ,EAAOI,OAAQtlE,OAAQklE,EAAOllE,OAAQulE,OAAQL,EAAOK,QAC1H,GAAApvE,KAAA,IAAyBqvE,sBAAsB17D,GAGnD,eAAe27D,GACX,IAAIN,EACJhvE,KAAKivE,YAEDD,EADAlY,GAASwY,GACI5pD,KAAKud,MAAMqsC,GAEXA,EAGjB,IAAK,IAAIxlE,EAAI,EAAGA,EAAIklE,EAAWvY,SAAS5sD,OAAQC,IAAK,CACjD,MAAM+sD,EAAUmY,EAAWvY,SAAS3sD,GACpC,GAAA9J,KAAA,IAAeoP,KAAK,IAAI6lD,GAAQ4B,EAAQ3B,OAAQ2B,EAAQ1B,QAG5D,IAAK,IAAIz8C,KAAOs2D,EAAWtY,aACvB,GAAIsY,EAAWtY,aAAa3sD,eAAe2O,GAAM,CAC7C,IAAI6+B,EAASy3B,EAAWtY,aAAah+C,GAErC,GAAIo+C,GAASvf,IACT,GAAIA,EAAOt6B,SAAS,KAAM,CACtB,IAAIsO,EAASgsB,EAAOz0C,MAAM,KAC1B9C,KAAK02D,aAAah+C,GAAO,IAAI28C,IAAQ9pC,EAAO,IAAKA,EAAO,UAG5DvrB,KAAK02D,aAAah+C,GAAO,IAAI28C,GAAO9d,EAAO11C,EAAG01C,EAAOz1C,GAMjE,OADA,GAAA9B,KAAA,IAAyBqvE,sBAAsBL,GACxChvE,KAAKuvE,UAGhB,eAAeC,GACX,IAAIC,EACJzvE,KAAKivE,YAEDQ,EADA3Y,GAAS0Y,GACI9pD,KAAKud,MAAMusC,GAEXA,EAGjB,IAAK,IAAI1lE,EAAI,EAAGA,EAAI2lE,EAAWhZ,SAAS5sD,OAAQC,IAAK,CACjD,MAAM+sD,EAAU4Y,EAAWhZ,SAAS3sD,GACpC,GAAA9J,KAAA,IAAeoP,KAAK,IAAI6lD,GAAQ4B,EAAQ3B,OAAQ2B,EAAQ1B,QAG5D,IAAK,IAAIz8C,KAAO+2D,EAAW/Y,aACvB,GAAI+Y,EAAW/Y,aAAa3sD,eAAe2O,GAAM,CAC7C,IAAI6+B,EAASk4B,EAAW/Y,aAAah+C,GAErC,GAAIo+C,GAASvf,IACT,GAAIA,EAAOt6B,SAAS,KAAM,CACtB,IAAIsO,EAASgsB,EAAOz0C,MAAM,KAC1B9C,KAAK02D,aAAah+C,GAAO,IAAI28C,IAAQ9pC,EAAO,IAAKA,EAAO,UAG5DvrB,KAAK02D,aAAah+C,GAAO,IAAI28C,GAAO9d,EAAO11C,EAAG01C,EAAOz1C,GAKjE,GAAA9B,KAAA,IAAyBqvE,sBAAsBI,GAE/CzvE,KAAK0vE,eACL1vE,KAAK6nE,eAELn2D,YAAW,KACP1R,KAAK2nE,cACN,KAGP,iBACI,GAAA3nE,KAAA,IAAyBujE,iBAK7B,YACI,IAAI1E,EAAK7+D,KAEL2vE,EAAMxpE,OAAO+uC,iBAAiB,GAAA2pB,EAAA,KAElC,GAAI8Q,EAAI7vE,MAAMmd,SAAS,QAMnB,YALAvL,YAAW,K,MACuB,KAA1B,GAAAmtD,EAAA,MACJA,EAAG8I,YACH,KAAA9I,EAAA,mBACD,IAIP,IAAI+Q,EAAcnqC,SAAUkqC,EAAI7vE,MAAM0Q,QAAQ,KAAM,KAAQ,IACxDq/D,EAAepqC,SAAUkqC,EAAI5vE,OAAOyQ,QAAQ,KAAM,KAAQ,IAC1DlO,EAAUtC,KAAKgoE,SAASlsC,OACxBl4B,EAAWT,KAAKC,IAAIwsE,EAActtE,EAAQxC,MAAO+vE,EAAevtE,EAAQvC,QAC5EC,KAAKinE,gBAAgBrlE,KAAKgC,GAE1B,IAAIhC,EAAO5B,KAAKinE,gBAAgBviE,UAChCkrE,GAAgBD,EAAI7vE,MAAM0Q,QAAQ,KAAM,IACxCq/D,GAAiBF,EAAI5vE,OAAOyQ,QAAQ,KAAM,IAE1C,IAAIlM,EAAmE,IAAxDsrE,GAAettE,EAAQxC,MAAoB,EAAZwC,EAAQT,GAASD,GAC3D2C,EAAqE,IAA1DsrE,GAAgBvtE,EAAQvC,OAAqB,EAAZuC,EAAQR,GAASF,GAEjE5B,KAAKinE,gBAAgBt6D,IAAI,CAAE9K,EAAGyC,EAASxC,EAAGyC,IAC1CvE,KAAKymE,WAAY,EAEjB,GAAA5H,EAAE,GAAuB,GAI7B,iBACI,OAAO,GAAA7+D,KAAA,IAAyBslE,iBAGpC,UACI,IAAIwK,EAAgD,GACpD,IAAK,IAAIp3D,KAAO1Y,KAAK02D,aAAc,CAC/B,IAAI9+C,EAAQ5X,KAAK02D,aAAah+C,GAC1Bq3D,EAAKn4D,EAAM/V,EAAEoS,WAAa,IAAM2D,EAAM9V,EAAEmS,WAC5C67D,EAAmBp3D,GAAOq3D,EAG9B,IAAIpwD,EAAO,GAAA3f,KAAA,IAAyB8kE,KAChCqK,GAAU,GAAAnvE,KAAA,IAAyB2jE,aACnCuL,EAAU35B,OAAO,GAAAv1C,KAAA,IAAyB+jE,eAC1CiM,EAAW,GAAAhwE,KAAA,IAAyBmlE,SACpC8K,EAAY,GAAAjwE,KAAA,IAAyBolE,UACrC8K,EAAgB,GAAAlwE,KAAA,IAAyB+kE,yBACzCoL,EAAc,GAAAnwE,KAAA,IAAyBglE,uBACvCoL,EAAe,GAAApwE,KAAA,IAAyBilE,wBAE5C,GAAI,GAAAjlE,KAAA,IAAe6J,OAAS,EAAG,CAC3B,IAAI8J,EAAI,CACJmxD,KAAMnlD,EAAM0wD,OAAQlB,EAAQmB,QAASpB,EAAS/J,SAAU6K,EAAU5K,UAAW6K,EAAW/a,OAAQ,GAAAl1D,KAAA,IAAyBk1D,OACzH6P,yBAA0BmL,EAAelL,uBAAwBmL,EAAalL,wBAAyBmL,EACvG3Z,SAAU,GAAAz2D,KAAA,IAAgB02D,aAAcoZ,EAAoB5K,mBAAoB,GAAAllE,KAAA,IAAyBklE,oBAG7G,OADcx/C,KAAKE,UAAUjS,GAI7B,OAAO,KAIf,mBACI,IACIw3D,EADQ,GAAAnrE,KAAA,IAAkBorE,eACZC,QAAQ,GAE1B,GAAArrE,KAAI,GAAa,IAAIiQ,OAErB,IAAK,IAAInG,EAAI,EAAGA,EAAIqhE,EAAMI,KAAK1hE,OAAQC,IAAK,CACxC,MAAM6kE,EAAKxD,EAAMI,KAAKzhE,GACtB,IAAIymE,EAAc5B,EAAGtvE,cAAc,WAC/BmxE,EAAa7B,EAAGtvE,cAAc,UAE9BwK,EAASw3D,GAAUkP,EAAY34D,OAC/BwjC,EAAQp7C,KAAKywE,mBAAmBD,EAAW54D,OAE/C,IAAOm/C,GAAmBwZ,EAAY34D,QAAoB,GAAV/N,IAAgBktD,GAAmByZ,EAAW54D,OAAS,CACnG,IAAI84D,EAAO,IAAIzb,GAAQprD,EAAQuxC,GAC/B,GAAAp7C,KAAA,IAAeoP,KAAKshE,GAGnB3Z,GAAmBwZ,EAAY34D,SAChC24D,EAAY34D,MAAQspD,GAAOr3D,EAAOoK,YAClCu8D,EAAW54D,MAAQyvB,GAAM+T,EAAO,GAAGnnC,WAAa,KAIrC,IAAXpK,GACA,GAAA7J,KAAI,IAAmB,GAI/BA,KAAK0vE,eACL,GAAA1vE,KAAI,IAAmB,GACvBA,KAAK6+D,GAAGgJ,eAGZ,mBAAmBnuB,GACf,IAAIyb,EAAgB,EAEpB,IADAzb,EAAOA,EAAK7oC,eACH8/D,SAAS,MAAQj3B,EAAKi3B,SAAS,KAAM,CAC1C,IAAIC,GAAiBl3B,EAChBlpC,QAAQ,IAAK,IACbA,QAAQ,IAAK,IACbA,QAAQ,IAAK,IACdqgE,EAAkB1tE,KAAK2tE,KAAKF,EAAQ,KAAS,IAAMztE,KAAKq4B,IAC5D25B,EAAQzb,EAAK8oB,WAAW,KAAO,EAAIqO,EAAUA,OAC1C,GAAIn3B,EAAKi3B,SAAS,QAAUj3B,EAAKi3B,SAAS,OAAQ,CACrD,IAAIC,GAAiBl3B,EAChBlpC,QAAQ,IAAK,IACbA,QAAQ,KAAM,IACdA,QAAQ,IAAK,IACdqgE,EAAkB,IAAM1tE,KAAK2tE,KAAKF,EAAQ,KAAS,IAAMztE,KAAKq4B,IAClE25B,EAAQzb,EAAK8oB,WAAW,KAAO,EAAIqO,EAAUA,OAC1C,GAAIn3B,EAAKi3B,SAAS,OAASj3B,EAAKi3B,SAAS,MAAO,CACnD,IAAIC,GAAiBl3B,EAChBlpC,QAAQ,IAAK,IACbA,QAAQ,IAAK,IACbA,QAAQ,IAAK,IACdqgE,EAAkB,GAAK1tE,KAAK2tE,KAAKF,EAAQ,KAAS,IAAMztE,KAAKq4B,IACjE25B,EAAQzb,EAAK8oB,WAAW,KAAO,EAAIqO,EAAUA,OAC1C,GAAIn3B,EAAKi3B,SAAS,OAASj3B,EAAKi3B,SAAS,MAAO,CACnD,IAAIC,GAAiBl3B,EAChBlpC,QAAQ,IAAK,IACbA,QAAQ,IAAK,IACbA,QAAQ,IAAK,IACdqgE,EAAkB1tE,KAAK2tE,KAAKF,EAAQ,KAAS,IAAMztE,KAAKq4B,IAAM,GAClE25B,EAAQzb,EAAK8oB,WAAW,KAAO,EAAIqO,EAAUA,OAE7C1b,GAASzb,EAAKlpC,QAAQ,IAAK,IACvB2D,MAAMghD,KACNA,EAAQ,GAOhB,OAHIA,GAAS,QAAOA,GAAS,OACzBA,EAAQ,QAAOA,EAAQ,OAEpBA,EAGX,eASI,GARAn1D,KAAK+lE,WAAWlhD,SAAS3f,IACrBA,EAAEqF,MACFrF,EAAEy5B,YAEN3+B,KAAK+lE,WAAWl8D,OAAS,EAIrB,GAAA7J,KAAA,IAAa6J,OAAS,EAAG,CACzB,IAAIu0B,EAAI,GAAAp+B,KAAA,IAAa,GAAGkvC,QACxB,GAAAlvC,KAAA,IAAa6J,OAAS,EACtB,GAAA7J,KAAA,IAAaoP,KAAKgvB,QAElB,GAAAp+B,KAAA,IAAaoP,KAAK,IAAI,GAAM,GAAI,KAGpC,IAAI6+D,EAAoB,EACxB,IAAK,IAAInkE,EAAI,EAAGA,EAAI,GAAA9J,KAAA,IAAe6J,OAAQC,IAAK,CAC5C,IAAIsxC,EAAgB6yB,EAAY,GAAAjuE,KAAA,IAAe8J,GAAGqrD,MAC9CqY,EAAmB,GAAAxtE,KAAA,IAAa,GAAAA,KAAA,IAAa6J,OAAS,GAEtD3F,EAAYmxD,GAAO0b,mBAAmB31B,GAEtC5pC,EAAkB,GADJ,GAAAxR,KAAA,IAAe8J,GAAGorD,OAEhClyD,EAAIqyD,GAAOK,qBAAqBxxD,EAAGsN,GAGnCxJ,EAFO,IAAI,GAAMwlE,EAAU3rE,EAAG2rE,EAAU1rE,GAEpBw1D,UAAUt0D,GAElC,GAAAhD,KAAA,IAAaoP,KAAKpH,GAClBimE,EAAY7yB,EAEhBp7C,KAAK8+D,uBAIT,0BAA0B0Q,GACtB,IAAIC,EA+BA1X,EACAJ,EA/BArB,EAAW,IAAIrmD,MACf0vC,EAAS,IAAI1vC,MACbg+D,EAAoB,EAGI,iBAAjBuB,EACPC,EAAa/pD,KAAKud,MAAMusC,GAExBA,EAAeC,EAEnB,IAAK,IAAI3lE,EAAI,EAAGA,EAAI2lE,EAAWhZ,SAAS5sD,OAAQC,IAAK,CACjD,MAAM+sD,EAAU4Y,EAAWhZ,SAAS3sD,GACpCwsD,EAASlnD,KAAK,IAAI6lD,GAAQ4B,EAAQ3B,OAAQ2B,EAAQ1B,QAGtDxV,EAAOvwC,KAAK,IAAI,GAAM,EAAG,IAEzB,IAAK,IAAItF,EAAI,EAAGA,EAAIwsD,EAASzsD,OAAQC,IAAK,CACtC,IAAIsxC,EAAgB6yB,EAAY3X,EAASxsD,GAAGqrD,MACxCqY,EAAmB7tB,EAAOA,EAAO91C,OAAS,GAC1C3F,EAAYmxD,GAAO0b,mBAAmB31B,GAEtC5pC,EAAkB,GADJ8kD,EAASxsD,GAAGorD,OAE1BlyD,EAAIqyD,GAAOK,qBAAqBxxD,EAAGsN,GAEnCxJ,EADO,IAAI,GAAMwlE,EAAU3rE,EAAG2rE,EAAU1rE,GACpBw1D,UAAUt0D,GAClC28C,EAAOvwC,KAAKpH,GACZimE,EAAY7yB,EAKhB,IAAI8wB,EAAmBvsB,EAAO,GAC1BumB,EAAa,IAAIj2D,MACjBwnD,EAAa,IACbuZ,EAAYrxB,EAAOA,EAAO91C,OAAS,GAEnCzK,EAAME,SAASC,gBAAgB,6BAA8B,OAI7DyE,EAAM27C,EAAO,GAAGzQ,QAAS9rC,EAAMu8C,EAAO,GAAGzQ,QAC7CyQ,EAAO96B,SAAS7c,IACZ5E,EAAItB,EAAIqB,KAAKC,IAAIA,EAAItB,EAAIkG,EAAO,GAChChE,EAAInC,EAAIsB,KAAKa,IAAIA,EAAInC,EAAGmG,EAAMnG,GAC9BmC,EAAIlC,EAAIqB,KAAKa,IAAIA,EAAIlC,EAAGkG,EAAMlG,GAC9BsB,EAAIvB,EAAIsB,KAAKC,IAAIA,EAAIvB,EAAGmG,EAAMnG,MAElC,IAAIovE,EAAWjtE,EAAInC,EAAIsB,KAAK6H,IAAI5H,EAAIvB,GAChCqvE,EAAWltE,EAAIlC,EAAIqB,KAAK6H,IAAI5H,EAAItB,GAGhCu1C,GAFI,iBAAoBrzC,EAAKZ,GAEpBD,KAAKa,IAAIitE,EAAUC,GAAY,IAC5C75B,EAASl0C,KAAKa,IAAIqzC,EAAQ,GAC1Bj4C,EAAIO,aAAa,UAAW,OAAasxE,EAAW,MAAMC,EAAW,MACrE9xE,EAAI8rE,UAAUt5C,IAAI,iBAClB,IAAIxb,EAAI9W,SAASC,gBAAgB,6BAA8B,KAG3D4xE,EAAK,aAFAhuE,KAAK6H,IAAI5H,EAAIvB,GAAK,SAClBsB,KAAK6H,IAAI5H,EAAItB,GAAK,QAM3B,GAJAsU,EAAE1W,MAAM+R,UAAY0/D,EACpB/xE,EAAIK,YAAY2W,GAEhB46D,EAAY,IAAI,GAAM,EAAG,GACrBrxB,EAAO91C,OAAS,EAChB,IAAK,IAAIC,EAAI,EAAGA,EAAI61C,EAAO91C,OAAQC,IAAK,CACpC,IAAIisD,EAGAA,EADAjsD,GAAK61C,EAAO91C,OAAS,EAChBmnE,EAEA3Z,GAAe1X,EAAO71C,EAAI,GAAI61C,EAAO71C,IAAK,IAGnD,IAAIksD,EAAKqB,GAAe6U,EAAWvsB,EAAO71C,IAAK,IAE3CsxC,EAAQ8b,GAAgBnB,EADnBpW,EAAO71C,GACoBksD,GACvB,GAAT5a,IACAA,EAAQ,MAEX2c,EAAOJ,GAASH,GAAa0U,EAAWvsB,EAAO71C,GAAIA,GAAK61C,EAAO91C,OAAS,EAAImnE,EAAYrxB,EAAO71C,EAAI,GAAIsxC,EAAOqc,GAC3G3tD,GAAK61C,EAAO91C,OAAS,IACrBkuD,EAAQpY,EAAO71C,IAEnB,IAAIs2C,EAAOgxB,EAAWlF,EAAWnU,EAAO1gB,GACxCjhC,EAAE3W,YAAY2gD,GACd8lB,EAAW92D,KAAK,IAAIm6D,GAAU2C,EAAWnU,IACzCmU,EAAYvU,EAAMzoB,QAI1B,GAAIyQ,EAAO91C,OAAS,EAChB,IAAK,IAAIC,EAAI,EAAGA,EAAI61C,EAAO91C,OAAS,EAAGC,IAAK,CAExC,IAAIqjE,EAAU,GACdA,EAAUhqE,KAAKa,IAAIyzD,EAAY0V,GAC/B,IAKIpV,EAAcJ,EAWd77C,EAhBAsxD,EAAWlH,EAAWp8D,EAAI,GAC1BisD,EAAKsB,GAAe1X,EAAO71C,EAAI,GAAI61C,EAAO71C,GAAI,EAAIqjE,GAClDnX,EAAKqB,GAAe+V,EAASC,MAAO1tB,EAAO71C,GAAI,EAAIqjE,GAEnD/xB,EAAQ8b,GAAgBnB,EADnBpW,EAAO71C,GACoBksD,GAEvB,GAAT5a,IAAYA,EAAQ,MACvB2c,EAAOJ,GAASH,GAAa4V,EAASC,MAAO1tB,EAAO71C,GAAI61C,EAAO71C,EAAI,GAAIsxC,EAAOqc,GAC/EM,EAAQqV,EAASE,IAEblyB,EAAQ,MAAKA,GAAS,KACTic,GAAe1X,EAAO71C,EAAI,GAAI6tD,EAAO,EAAI3B,EAAGuB,SAASQ,GAAOluD,QACnE1G,KAAK2vC,IAAI,GAAK3vC,KAAK6H,IAAIowC,IAC7Bj4C,KAAK6H,IAAIowC,GAAS,KAClB+xB,EAAUA,EAAUhqE,KAAK2vC,KAAK,GAAK3vC,KAAK6H,IAAIowC,KAAW,IAAMj4C,KAAKq4B,KAAO2xC,GAGxEh5D,MAAMwjD,EAAM91D,KAETia,EADAs/B,GAAS,EACFmyB,EAAQxV,EAAOJ,EAAOF,EAAYpgB,GAElCk2B,EAAQ5V,EAAOI,EAAON,EAAYpgB,GAE7CjhC,EAAE3W,YAAYqc,IAK1B,OAAO1c,EAEP,SAASgyE,EAAWrb,EAAWC,EAAWqb,EAAsB,GAC5D,IAAI/e,EAAUhzD,SAASC,gBAAgB,6BAA8B,QAQrE,OANA+yD,EAAQ3yD,aAAa,KAAMo2D,EAAGl0D,EAAEoS,YAChCq+C,EAAQ3yD,aAAa,KAAMo2D,EAAGj0D,EAAEmS,YAChCq+C,EAAQ3yD,aAAa,KAAMq2D,EAAGn0D,EAAEoS,YAChCq+C,EAAQ3yD,aAAa,KAAMq2D,EAAGl0D,EAAEmS,YAChCq+C,EAAQ3yD,aAAa,SAAU,SAC/B2yD,EAAQ3yD,aAAa,eAAgB0xE,EAAYp9D,YAC1Cq+C,EAGX,SAASib,EAAQ3sD,EAAcC,EAAY06B,EAAgB81B,EAAsB,GAC7E,IAAIntE,EAAI,CAAC,IAAK0c,EAAM/e,EAAG+e,EAAM9e,EAAG,IAAKy5C,EAAQA,EAAQ,EAAG,EAAG,EAAG16B,EAAIhf,EAAGgf,EAAI/e,GAAI6O,KAAK,KAElF,IAAImL,EAAOxc,SAASC,gBAAgB,6BAA8B,QAKlE,OAJAuc,EAAKnc,aAAa,IAAKuE,GACvB4X,EAAKnc,aAAa,OAAQ,QAC1Bmc,EAAKnc,aAAa,SAAU,SAC5Bmc,EAAKnc,aAAa,eAAgB0xE,EAAYp9D,YACvC6H,GAIf,iBAAiB3X,GACb,IAAIwI,EAAM3M,KAAKinE,gBAAgBniE,SAE3BjD,EAAI,EACJC,EAAI,EAER,GACc,cAAVqC,EAAEuO,MACQ,aAAVvO,EAAEuO,MACQ,YAAVvO,EAAEuO,MACQ,eAAVvO,EAAEuO,KACJ,CACE,IAAI5J,OAAiC,IAApB3E,EAAEqO,cAAgCrO,EAAIA,EAAEqO,cACrD8+D,EAAQxoE,EAAI+L,QAAQ,IAAM/L,EAAIyoE,eAAe,GACjD1vE,EAAIyvE,EAAM3/D,QACV7P,EAAIwvE,EAAM1/D,YAEA,aAAVzN,EAAEuO,MACQ,WAAVvO,EAAEuO,MACQ,aAAVvO,EAAEuO,MACQ,aAAVvO,EAAEuO,MACQ,YAAVvO,EAAEuO,MACQ,cAAVvO,EAAEuO,MACQ,cAAVvO,EAAEuO,OAEF7Q,EAAIsC,EAAEwN,QACN7P,EAAIqC,EAAEyN,SAGV5R,KAAKioE,GAAGpmE,EAAIA,EAAI8K,EAAI9K,EACpB7B,KAAKioE,GAAGnmE,EAAIA,EAAI6K,EAAI7K,EAEpB,IAAI0vE,EAAQxxE,KAAKioE,GAAG18D,gBAChBvL,KAAK2J,WAAWwB,eAAeC,WAE/BgzB,EAAIp+B,KAAKinE,gBAAgBviE,UAG7B,OAFA8sE,EAAM3vE,EAAI2vE,EAAM3vE,EAAIu8B,EACpBozC,EAAM1vE,EAAI0vE,EAAM1vE,EAAIs8B,EACbozC,EAGX,cAAclgE,GACV,IAAIutD,EAAK7+D,KACLZ,EAAWkS,EAYf,IAAImgE,EACAl6B,EAXJn4C,EAAIkB,iBAAiB,YAAaoxE,GAClCtyE,EAAIkB,iBAAiB,YAAau7D,GAClCz8D,EAAIkB,iBAAiB,UAAWqxE,GAChCvyE,EAAIkB,iBAAiB,aAAcqxE,GACnCvyE,EAAIkB,iBAAiB,aAAcoxE,GACnCtyE,EAAIkB,iBAAiB,YAAau7D,GAClCz8D,EAAIkB,iBAAiB,WAAYqxE,GACjCvyE,EAAIkB,iBAAiB,aAAcqxE,GACnCvyE,EAAIkB,iBAAiB,cAAeqxE,GAgBpC,IAAI7H,EAAc,EACdljD,EAAc,GACd9e,EAAW,IAAI,GAAM,EAAG,GACxB8pE,EAAsB,IAAIvc,GAAO,EAAG,GACxC,SAASqc,EAAU5oE,GACf,GAAI+1D,EAAG6H,WAAa7H,EAAGmK,SAAU,OAEjC,IAAI6I,EAAiB/oE,EAAIgE,OAAOglE,UAChC,IAAMhpE,EAAIgE,OAAOo+D,UAAUn2B,SAAS,cAAmC,WAAnB88B,GAAkD,SAAnBA,KAG/E/oE,EAAIgE,OAAOo+D,UAAUn2B,SAAS,cAAyC,WAAzBjsC,EAAIgE,OAAOglE,WAChC,SAAzBhpE,EAAIgE,OAAOglE,WAEb,CAME,GALAhI,EAAMhhE,EAAIgE,OAAOilE,QAAQjI,IACzBljD,EAAM9d,EAAIgE,OAAOilE,QAAQnrD,IACzBi4C,EAAG2H,YAAa,EAChB3H,EAAGoI,gBAAgBj5D,aAEc,UADjCyjE,EAAkB3oE,EAAIgE,QACFuD,SAAqB,CACrC,IAAIi6D,EAAQzL,EAAGuH,UAAUx/C,GACzB9e,EAAW,IAAI,GAAMwiE,EAAMzoE,IAAKyoE,EAAMxoE,UAIb,GAArB,GAAA+8D,EAAA,IAAWh1D,SACXigE,EAAM,GAEVhiE,EAAW,GAAA+2D,EAAA,IAAWiL,GAE1BvyB,EAASsnB,EAAGnD,iBAAiB5yD,GAC7B,IAAIkpE,EAAU,YAAez6B,GAC7Bq6B,EAAcI,EAAQza,SAASzvD,IAIvC,SAAS+zD,EAAK/yD,GACV,GAAK+1D,EAAG2H,YAGJiL,EAAiB,CACjB3oE,EAAI0B,iBACJ,IAAIgnE,EAAQ3S,EAAGnD,iBAAiB5yD,GAEhC,IAAImpE,EAAO,IAAI,GAAMT,EAAM3vE,EAAG2vE,EAAM1vE,GACpC,OAAQ2vE,EAAgBphE,UACpB,IAAK,OACD,IAAIi6D,EAAQzL,EAAGuH,UAAUx/C,GACrBsrD,EAAKD,EAAKE,eAAeP,GAC7BtH,EAAMzsB,KAAKq0B,EAAGrwE,EAAGqwE,EAAGpwE,GACpB,MACJ,IAAK,SACD,IAAIswE,GAAqBtI,EACrBuI,EAAO,GAAAxT,EAAA,IAAWuT,GACtB,GAAiB,GAAbA,EACA,GAAAvT,EAAA,IAAWuT,GAAaH,MACrB,CACH,IAAIK,EAAuB,iBAAoBL,EAAMI,GACrD,GAAIC,EAAazoE,QAAU,EACvB,IAAK,IAAIC,EAAIsoE,EAAWtoE,EAAI,GAAA+0D,EAAA,IAAWh1D,OAAQC,IAAK,CAChD,IAAIooE,EAAK,GAAArT,EAAA,IAAW/0D,GAAGwtD,UAAUgb,GACjC,GAAAzT,EAAA,IAAW/0D,GAAKooE,GAI5BrT,EAAG0T,qBAAqBzI,GACxBjL,EAAGC,uBAEH,IAAI0T,EAAclzE,SAASmzE,cACe,UAAtCD,EAAYl+D,QAAQzD,eACpB2hE,EAAYjG,OAEhB6F,EAA0B,IAAdA,EAAkB,EAAIA,EAAY,EAC9C,IAAIM,EAAW,MAAQ,EACnBr6D,EAAQ/Y,SAASmgE,eAAeiT,GACpCr6D,EAAM6yD,UAAUt5C,IAAI,uBACpBvZ,EAAMmzD,mBAQtB,SAASmG,EAAQ7oE,GACb,QAAwBuK,IAApBo+D,GACI5S,EAAG2H,WAAY,CACf,GAAiC,SAA7BiL,EAAgBphE,SAAqB,CACrC,IAAIi6D,EAAQzL,EAAGuH,UAAUx/C,GACrB+rD,EAAgB,IAAI,GAAMrI,EAAMzoE,IAAKyoE,EAAMxoE,KAE3CwwE,EAAe,iBAAoBK,EAAe7qE,GAClD8qE,EAAiB,IAAIvd,GAAO,EAAG,GAC/BzuC,KAAOi4C,EAAGnI,eACVkc,EAAiB/T,EAAGnI,aAAa9vC,IAErC,IAAIisD,EAAiBxd,GAAOiC,UAAUgb,EAAcM,GACpD/T,EAAGnI,aAAa9vC,GAAOisD,EAEvBpB,GACA5S,EAAGgJ,eAIf4J,GAAkB,EAClB,GAAA5S,EAAA,IAAoBh6C,SAASwlD,GAAUA,EAAM1rC,WAC7C,GAAAkgC,EAAA,IAAoBh1D,OAAS,EAC7B+c,EAAM,GACNkjD,EAAM,EAENjL,EAAGoI,gBAAgBl5D,aAK3B,qBAAqBqkE,GAIjB,GAHA,GAAApyE,KAAA,IAAsB6kB,SAASwlD,GAAUA,EAAM1rC,WAC/C,GAAA3+B,KAAA,IAAsB6J,OAAS,EAE3B,GAAA7J,KAAA,IAAemgE,MAAQ,GAAAngE,KAAA,IAAa6J,OAAS,EAAG,CAChD,IAAIipE,EAAc,IAAI7iE,MAEtB,GAAiB,GAAbmiE,EACA,IAAK,IAAItoE,EAAI,EAAGA,EAAI,GAAA9J,KAAA,IAAa6J,OAAQC,IACrCgpE,EAAY1jE,KAAK,GAAApP,KAAA,IAAa8J,GAAGolC,cAIrC,IAAK,IAAIplC,EAAI,EAAGA,EAAIsoE,EAAWtoE,IAC3BgpE,EAAY1jE,KAAK,GAAApP,KAAA,IAAa8J,GAAGolC,SAIzC,IAAIy8B,EAAmBmH,EAAYnvC,QAAO,CAAC9hC,EAAGC,IAC1CqB,KAAK6H,IAAInJ,EAAEA,EAAI,GAAA7B,KAAA,IAAiB6B,GAAKsB,KAAK6H,IAAIlJ,EAAED,EAAI,GAAA7B,KAAA,IAAiB6B,GAC/DA,EACAC,IACRD,EACE+pE,EAAmBkH,EAAYnvC,QAAO,CAAC9hC,EAAGC,IAC1CqB,KAAK6H,IAAInJ,EAAEC,EAAI,GAAA9B,KAAA,IAAiB8B,GAAKqB,KAAK6H,IAAIlJ,EAAEA,EAAI,GAAA9B,KAAA,IAAiB8B,GAC/DD,EACAC,IACRA,EAEF,GAAIqB,KAAK6H,IAAI2gE,EAAW,GAAA3rE,KAAA,IAAiB6B,IAAM,GAAA7B,KAAA,IAAeogE,cAAgBpgE,KAAK6rE,UAAW,CAE1F,GAAA7rE,KAAA,IAAiB6B,EAAI8pE,EACrB,GAAA3rE,KAAA,IAAgB6B,EAAI8pE,EACpB,IAAIvrB,EAAOpgD,KAAKgoE,SACX5nB,KAAK,GAAApgD,KAAA,IAAgB6B,GAAI,IAAO,GAAA7B,KAAA,IAAgB6B,EAAG,KACnDw1C,OAAO,CAAE3L,MAAO,UAAW5rC,MAAOE,KAAK8rE,UAAY,IACxD1rB,EAAK3hB,OACL,GAAAz+B,KAAA,IAAsBoP,KAAKgxC,GAE/B,GAAIj9C,KAAK6H,IAAI4gE,EAAW,GAAA5rE,KAAA,IAAiB8B,IAAM,GAAA9B,KAAA,IAAeogE,cAAgBpgE,KAAK6rE,UAAW,CAE1F,GAAA7rE,KAAA,IAAiB8B,EAAI8pE,EACrB,GAAA5rE,KAAA,IAAgB8B,EAAI8pE,EACpB,IAAIxrB,EAAOpgD,KAAKgoE,SACX5nB,MAAM,IAAO,GAAApgD,KAAA,IAAgB8B,EAAG,IAAO,GAAA9B,KAAA,IAAgB8B,GACvDu1C,OAAO,CAAE3L,MAAO,UAAW5rC,MAAOE,KAAK8rE,UAAY,IACxD1rB,EAAK3hB,OACL,GAAAz+B,KAAA,IAAsBoP,KAAKgxC,GAE/B,IAAI2yB,EAAuB,GAAA/yE,KAAA,IAAgBu3D,SACvC,GAAAv3D,KAAA,IAAaoyE,IAEjB,GAA2B,GAAvBW,EAAalpE,OACb,GAAiB,GAAbuoE,EACA,GAAApyE,KAAA,IAAa,GAAK,GAAAA,KAAA,IAAa,GAAGs3D,UAAUyb,QAG5C,IAAK,IAAIjpE,EAAIsoE,EAAWtoE,EAAI,GAAA9J,KAAA,IAAa6J,OAAQC,IAC7C,GAAA9J,KAAA,IAAa8J,GAAK,GAAA9J,KAAA,IAAa8J,GAAGwtD,UAAUyb,IAYhE,eACI,GAAA/yE,KAAA,IAAgB6J,OAAS,EACzB,IAAImpE,EAAY,IAAI3c,GAAU,GAAAr2D,KAAA,IAAgBA,KAAK02D,aAAc,GAAA12D,KAAA,IAAc,GAAAA,KAAA,IAAyBklE,oBACpGllE,KAAK0mE,WAAasM,EAAUvc,SAAS5sD,OAAS,GAC9CmpE,EAAUvc,SAASvjD,QAAQ,EAAG,GAElC,GAAAlT,KAAA,IAAgBoP,KAAK4jE,GAGzB,OACI,GAAI,GAAAhzE,KAAA,IAAgB6J,OAAS,EAAG,CAC5B,IAAImpE,EAAY,GAAAhzE,KAAA,IAAgB4/C,WACdvsC,IAAd2/D,GACA,GAAAhzE,KAAA,IAAgBoP,KAAK4jE,GAGrB,GAAAhzE,KAAA,IAAgB6J,OAAS,GACzB7J,KAAKizE,iBAAiB,GAAAjzE,KAAA,IAAgB,GAAAA,KAAA,IAAgB6J,OAAS,IAGvE7J,KAAK8+D,uBAGT,OACI,GAAI,GAAA9+D,KAAA,IAAgB6J,OAAS,EAAG,CAC5B,IAAImpE,EAAY,GAAAhzE,KAAA,IAAgB4/C,WACdvsC,IAAd2/D,IACA,GAAAhzE,KAAA,IAAgBoP,KAAK4jE,GACrBhzE,KAAKizE,iBAAiBD,IAG9BhzE,KAAK8+D,uBAGT,iBAAiBkU,GACI,MAAbA,IACA,GAAAhzE,KAAI,GAAagzE,EAAUvc,SAASvmD,MAAM,IAC1ClQ,KAAK02D,aAAesc,EAAUtc,aAC9B,GAAA12D,KAAA,IAAyBklE,mBAAqB8N,EAAUpc,sBAEpD,GAAA52D,KAAA,IAAe6J,OAUnB7J,KAAK0vE,gBAIb,eACQ1vE,KAAKgpE,WACThpE,KAAK0mE,WAAY,EACYpnE,SAASmgE,eAAe,sBAC9BM,UAAY,eACnC//D,KAAK8+D,wBAET,cACI9+D,KAAK0mE,WAAY,EACYpnE,SAASmgE,eAAe,sBAC9BM,UAAY,gBACnC//D,KAAK8+D,uBAGT,cACI,IAAID,EAAK7+D,KACLkzE,EAAyB5zE,SAASmgE,eAAe,sBACrDyT,EAAuBnT,UAAYlB,EAAG6H,UAAY,eAAiB,gBACnEwM,WAAwB5yE,iBAAiB,SAAS,SAAU6D,GACxD06D,EAAG6H,WAAa7H,EAAG6H,UACnBwM,EAAuBnT,UAAYlB,EAAG6H,UAAY,eAAiB,gBACnE7H,EAAGC,0BAGP,IAAIqU,EAAa7zE,SAASmgE,eAAe,UACzC0T,WAAY7yE,iBAAiB,SAAS,SAAU6D,GAC5C06D,EAAG4I,UAEP,IAAI2L,EAAa9zE,SAASmgE,eAAe,UACzC2T,WAAY9yE,iBAAiB,SAAS,SAAU6D,GAC5C06D,EAAG6I,UAEP,IAAI2L,EAAkB/zE,SAASmgE,eAAe,eAC9C4T,WAAiB/yE,iBAAiB,SAAS,SAAU6D,GACjD06D,EAAG8I,eAIX,sBAAsB2L,GAClB,IAAIzpE,EAASypE,EAAIzpE,SAAW,EACxBoiE,EAAWqH,EAAI53B,QAAQ7xC,GAC3B,OAAO,YAAeoiE,I,6RAG9B,MAAM1C,GACF,YAAmB8D,EAAqBC,GAArB,KAAAD,QAAqB,KAAAC,MACpCttE,KAAKqtE,MAAQA,EACbrtE,KAAKstE,IAAMA,EAGf,cACI,IAAIzrE,GAAK7B,KAAKqtE,MAAMxrE,EAAI7B,KAAKstE,IAAIzrE,GAAK,EAClCC,GAAK9B,KAAKqtE,MAAMvrE,EAAI9B,KAAKstE,IAAIxrE,GAAK,EACtC,OAAO,IAAI,GAAMD,EAAGC,ICjlE5B,UAAiBgkE,aAAY,IAGtB,SAAS9xB,GAAM5jC,GAClB,IAAImjE,EAAK,IAAIzN,GAEb,OADAyN,EAAGC,iBAAiBpjE,GACbmjE,EAIJ,SAASE,GAAgB9J,GAE5B,OADQ7D,GAAa4N,mBAAmB/J,GAK5CxjE,OAAOwtE,OAAS,eClBZC,EAA2B,GAG/B,SAASC,EAAoBC,GAE5B,GAAGF,EAAyBE,GAC3B,OAAOF,EAAyBE,GAAUp1E,QAG3C,IAAIC,EAASi1E,EAAyBE,GAAY,CAGjDp1E,QAAS,IAOV,OAHAq1E,EAAoBD,GAAU5tE,KAAKvH,EAAOD,QAASC,EAAQA,EAAOD,QAASm1E,GAGpEl1E,EAAOD,QCjBf,OCFAm1E,EAAoB3vE,EAAI,CAACxF,EAASs1E,KACjC,IAAI,IAAIt7D,KAAOs7D,EACXH,EAAoBlgE,EAAEqgE,EAAYt7D,KAASm7D,EAAoBlgE,EAAEjV,EAASga,IAC5E1E,OAAOiD,eAAevY,EAASga,EAAK,CAAEjB,YAAY,EAAMlB,IAAKy9D,EAAWt7D,MCJ3Em7D,EAAoBz9D,EAAI,WACvB,GAA0B,iBAAfD,WAAyB,OAAOA,WAC3C,IACC,OAAOnW,MAAQ,IAAI4W,SAAS,cAAb,GACd,MAAOzS,GACR,GAAsB,iBAAXgC,OAAqB,OAAOA,QALjB,GCAxB0tE,EAAoBlgE,EAAI,CAACkO,EAAKnO,IAASM,OAAOtS,UAAUqI,eAAe7D,KAAK2b,EAAKnO,GCCjFmgE,EAAoB7wC,EAAKtkC,IACH,oBAAX6gB,QAA0BA,OAAO00D,aAC1CjgE,OAAOiD,eAAevY,EAAS6gB,OAAO00D,YAAa,CAAEr8D,MAAO,WAE7D5D,OAAOiD,eAAevY,EAAS,aAAc,CAAEkZ,OAAO,KJFhDi8D,EAAoB,M","file":"ncTrimDesigner.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"ncTrimDesigner\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ncTrimDesigner\"] = factory();\n\telse\n\t\troot[\"ncTrimDesigner\"] = factory();\n})(self, function() {\nreturn ","var SvgPanZoom = require(\"./svg-pan-zoom.js\");\n\nmodule.exports = SvgPanZoom;\n","var SvgUtils = require(\"./svg-utilities\");\n\nmodule.exports = {\n enable: function(instance) {\n // Select (and create if necessary) defs\n var defs = instance.svg.querySelector(\"defs\");\n if (!defs) {\n defs = document.createElementNS(SvgUtils.svgNS, \"defs\");\n instance.svg.appendChild(defs);\n }\n\n // Check for style element, and create it if it doesn't exist\n var styleEl = defs.querySelector(\"style#svg-pan-zoom-controls-styles\");\n if (!styleEl) {\n var style = document.createElementNS(SvgUtils.svgNS, \"style\");\n style.setAttribute(\"id\", \"svg-pan-zoom-controls-styles\");\n style.setAttribute(\"type\", \"text/css\");\n style.textContent =\n \".svg-pan-zoom-control { cursor: pointer; fill: black; fill-opacity: 0.333; } .svg-pan-zoom-control:hover { fill-opacity: 0.8; } .svg-pan-zoom-control-background { fill: white; fill-opacity: 0.5; } .svg-pan-zoom-control-background { fill-opacity: 0.8; }\";\n defs.appendChild(style);\n }\n\n // Zoom Group\n var zoomGroup = document.createElementNS(SvgUtils.svgNS, \"g\");\n zoomGroup.setAttribute(\"id\", \"svg-pan-zoom-controls\");\n zoomGroup.setAttribute(\n \"transform\",\n \"translate(\" +\n (instance.width - 70) +\n \" \" +\n (instance.height - 76) +\n \") scale(0.75)\"\n );\n zoomGroup.setAttribute(\"class\", \"svg-pan-zoom-control\");\n\n // Control elements\n zoomGroup.appendChild(this._createZoomIn(instance));\n zoomGroup.appendChild(this._createZoomReset(instance));\n zoomGroup.appendChild(this._createZoomOut(instance));\n\n // Finally append created element\n instance.svg.appendChild(zoomGroup);\n\n // Cache control instance\n instance.controlIcons = zoomGroup;\n },\n\n _createZoomIn: function(instance) {\n var zoomIn = document.createElementNS(SvgUtils.svgNS, \"g\");\n zoomIn.setAttribute(\"id\", \"svg-pan-zoom-zoom-in\");\n zoomIn.setAttribute(\"transform\", \"translate(30.5 5) scale(0.015)\");\n zoomIn.setAttribute(\"class\", \"svg-pan-zoom-control\");\n zoomIn.addEventListener(\n \"click\",\n function() {\n instance.getPublicInstance().zoomIn();\n },\n false\n );\n zoomIn.addEventListener(\n \"touchstart\",\n function() {\n instance.getPublicInstance().zoomIn();\n },\n false\n );\n\n var zoomInBackground = document.createElementNS(SvgUtils.svgNS, \"rect\"); // TODO change these background space fillers to rounded rectangles so they look prettier\n zoomInBackground.setAttribute(\"x\", \"0\");\n zoomInBackground.setAttribute(\"y\", \"0\");\n zoomInBackground.setAttribute(\"width\", \"1500\"); // larger than expected because the whole group is transformed to scale down\n zoomInBackground.setAttribute(\"height\", \"1400\");\n zoomInBackground.setAttribute(\"class\", \"svg-pan-zoom-control-background\");\n zoomIn.appendChild(zoomInBackground);\n\n var zoomInShape = document.createElementNS(SvgUtils.svgNS, \"path\");\n zoomInShape.setAttribute(\n \"d\",\n \"M1280 576v128q0 26 -19 45t-45 19h-320v320q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-320h-320q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h320v-320q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v320h320q26 0 45 19t19 45zM1536 1120v-960 q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z\"\n );\n zoomInShape.setAttribute(\"class\", \"svg-pan-zoom-control-element\");\n zoomIn.appendChild(zoomInShape);\n\n return zoomIn;\n },\n\n _createZoomReset: function(instance) {\n // reset\n var resetPanZoomControl = document.createElementNS(SvgUtils.svgNS, \"g\");\n resetPanZoomControl.setAttribute(\"id\", \"svg-pan-zoom-reset-pan-zoom\");\n resetPanZoomControl.setAttribute(\"transform\", \"translate(5 35) scale(0.4)\");\n resetPanZoomControl.setAttribute(\"class\", \"svg-pan-zoom-control\");\n resetPanZoomControl.addEventListener(\n \"click\",\n function() {\n instance.getPublicInstance().reset();\n },\n false\n );\n resetPanZoomControl.addEventListener(\n \"touchstart\",\n function() {\n instance.getPublicInstance().reset();\n },\n false\n );\n\n var resetPanZoomControlBackground = document.createElementNS(\n SvgUtils.svgNS,\n \"rect\"\n ); // TODO change these background space fillers to rounded rectangles so they look prettier\n resetPanZoomControlBackground.setAttribute(\"x\", \"2\");\n resetPanZoomControlBackground.setAttribute(\"y\", \"2\");\n resetPanZoomControlBackground.setAttribute(\"width\", \"182\"); // larger than expected because the whole group is transformed to scale down\n resetPanZoomControlBackground.setAttribute(\"height\", \"58\");\n resetPanZoomControlBackground.setAttribute(\n \"class\",\n \"svg-pan-zoom-control-background\"\n );\n resetPanZoomControl.appendChild(resetPanZoomControlBackground);\n\n var resetPanZoomControlShape1 = document.createElementNS(\n SvgUtils.svgNS,\n \"path\"\n );\n resetPanZoomControlShape1.setAttribute(\n \"d\",\n \"M33.051,20.632c-0.742-0.406-1.854-0.609-3.338-0.609h-7.969v9.281h7.769c1.543,0,2.701-0.188,3.473-0.562c1.365-0.656,2.048-1.953,2.048-3.891C35.032,22.757,34.372,21.351,33.051,20.632z\"\n );\n resetPanZoomControlShape1.setAttribute(\n \"class\",\n \"svg-pan-zoom-control-element\"\n );\n resetPanZoomControl.appendChild(resetPanZoomControlShape1);\n\n var resetPanZoomControlShape2 = document.createElementNS(\n SvgUtils.svgNS,\n \"path\"\n );\n resetPanZoomControlShape2.setAttribute(\n \"d\",\n \"M170.231,0.5H15.847C7.102,0.5,0.5,5.708,0.5,11.84v38.861C0.5,56.833,7.102,61.5,15.847,61.5h154.384c8.745,0,15.269-4.667,15.269-10.798V11.84C185.5,5.708,178.976,0.5,170.231,0.5z M42.837,48.569h-7.969c-0.219-0.766-0.375-1.383-0.469-1.852c-0.188-0.969-0.289-1.961-0.305-2.977l-0.047-3.211c-0.03-2.203-0.41-3.672-1.142-4.406c-0.732-0.734-2.103-1.102-4.113-1.102h-7.05v13.547h-7.055V14.022h16.524c2.361,0.047,4.178,0.344,5.45,0.891c1.272,0.547,2.351,1.352,3.234,2.414c0.731,0.875,1.31,1.844,1.737,2.906s0.64,2.273,0.64,3.633c0,1.641-0.414,3.254-1.242,4.84s-2.195,2.707-4.102,3.363c1.594,0.641,2.723,1.551,3.387,2.73s0.996,2.98,0.996,5.402v2.32c0,1.578,0.063,2.648,0.19,3.211c0.19,0.891,0.635,1.547,1.333,1.969V48.569z M75.579,48.569h-26.18V14.022h25.336v6.117H56.454v7.336h16.781v6H56.454v8.883h19.125V48.569z M104.497,46.331c-2.44,2.086-5.887,3.129-10.34,3.129c-4.548,0-8.125-1.027-10.731-3.082s-3.909-4.879-3.909-8.473h6.891c0.224,1.578,0.662,2.758,1.316,3.539c1.196,1.422,3.246,2.133,6.15,2.133c1.739,0,3.151-0.188,4.236-0.562c2.058-0.719,3.087-2.055,3.087-4.008c0-1.141-0.504-2.023-1.512-2.648c-1.008-0.609-2.607-1.148-4.796-1.617l-3.74-0.82c-3.676-0.812-6.201-1.695-7.576-2.648c-2.328-1.594-3.492-4.086-3.492-7.477c0-3.094,1.139-5.664,3.417-7.711s5.623-3.07,10.036-3.07c3.685,0,6.829,0.965,9.431,2.895c2.602,1.93,3.966,4.73,4.093,8.402h-6.938c-0.128-2.078-1.057-3.555-2.787-4.43c-1.154-0.578-2.587-0.867-4.301-0.867c-1.907,0-3.428,0.375-4.565,1.125c-1.138,0.75-1.706,1.797-1.706,3.141c0,1.234,0.561,2.156,1.682,2.766c0.721,0.406,2.25,0.883,4.589,1.43l6.063,1.43c2.657,0.625,4.648,1.461,5.975,2.508c2.059,1.625,3.089,3.977,3.089,7.055C108.157,41.624,106.937,44.245,104.497,46.331z M139.61,48.569h-26.18V14.022h25.336v6.117h-18.281v7.336h16.781v6h-16.781v8.883h19.125V48.569z M170.337,20.14h-10.336v28.43h-7.266V20.14h-10.383v-6.117h27.984V20.14z\"\n );\n resetPanZoomControlShape2.setAttribute(\n \"class\",\n \"svg-pan-zoom-control-element\"\n );\n resetPanZoomControl.appendChild(resetPanZoomControlShape2);\n\n return resetPanZoomControl;\n },\n\n _createZoomOut: function(instance) {\n // zoom out\n var zoomOut = document.createElementNS(SvgUtils.svgNS, \"g\");\n zoomOut.setAttribute(\"id\", \"svg-pan-zoom-zoom-out\");\n zoomOut.setAttribute(\"transform\", \"translate(30.5 70) scale(0.015)\");\n zoomOut.setAttribute(\"class\", \"svg-pan-zoom-control\");\n zoomOut.addEventListener(\n \"click\",\n function() {\n instance.getPublicInstance().zoomOut();\n },\n false\n );\n zoomOut.addEventListener(\n \"touchstart\",\n function() {\n instance.getPublicInstance().zoomOut();\n },\n false\n );\n\n var zoomOutBackground = document.createElementNS(SvgUtils.svgNS, \"rect\"); // TODO change these background space fillers to rounded rectangles so they look prettier\n zoomOutBackground.setAttribute(\"x\", \"0\");\n zoomOutBackground.setAttribute(\"y\", \"0\");\n zoomOutBackground.setAttribute(\"width\", \"1500\"); // larger than expected because the whole group is transformed to scale down\n zoomOutBackground.setAttribute(\"height\", \"1400\");\n zoomOutBackground.setAttribute(\"class\", \"svg-pan-zoom-control-background\");\n zoomOut.appendChild(zoomOutBackground);\n\n var zoomOutShape = document.createElementNS(SvgUtils.svgNS, \"path\");\n zoomOutShape.setAttribute(\n \"d\",\n \"M1280 576v128q0 26 -19 45t-45 19h-896q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h896q26 0 45 19t19 45zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5 t84.5 -203.5z\"\n );\n zoomOutShape.setAttribute(\"class\", \"svg-pan-zoom-control-element\");\n zoomOut.appendChild(zoomOutShape);\n\n return zoomOut;\n },\n\n disable: function(instance) {\n if (instance.controlIcons) {\n instance.controlIcons.parentNode.removeChild(instance.controlIcons);\n instance.controlIcons = null;\n }\n }\n};\n","var SvgUtils = require(\"./svg-utilities\"),\n Utils = require(\"./utilities\");\n\nvar ShadowViewport = function(viewport, options) {\n this.init(viewport, options);\n};\n\n/**\n * Initialization\n *\n * @param {SVGElement} viewport\n * @param {Object} options\n */\nShadowViewport.prototype.init = function(viewport, options) {\n // DOM Elements\n this.viewport = viewport;\n this.options = options;\n\n // State cache\n this.originalState = { zoom: 1, x: 0, y: 0 };\n this.activeState = { zoom: 1, x: 0, y: 0 };\n\n this.updateCTMCached = Utils.proxy(this.updateCTM, this);\n\n // Create a custom requestAnimationFrame taking in account refreshRate\n this.requestAnimationFrame = Utils.createRequestAnimationFrame(\n this.options.refreshRate\n );\n\n // ViewBox\n this.viewBox = { x: 0, y: 0, width: 0, height: 0 };\n this.cacheViewBox();\n\n // Process CTM\n var newCTM = this.processCTM();\n\n // Update viewport CTM and cache zoom and pan\n this.setCTM(newCTM);\n\n // Update CTM in this frame\n this.updateCTM();\n};\n\n/**\n * Cache initial viewBox value\n * If no viewBox is defined, then use viewport size/position instead for viewBox values\n */\nShadowViewport.prototype.cacheViewBox = function() {\n var svgViewBox = this.options.svg.getAttribute(\"viewBox\");\n\n if (svgViewBox) {\n var viewBoxValues = svgViewBox\n .split(/[\\s\\,]/)\n .filter(function(v) {\n return v;\n })\n .map(parseFloat);\n\n // Cache viewbox x and y offset\n this.viewBox.x = viewBoxValues[0];\n this.viewBox.y = viewBoxValues[1];\n this.viewBox.width = viewBoxValues[2];\n this.viewBox.height = viewBoxValues[3];\n\n var zoom = Math.min(\n this.options.width / this.viewBox.width,\n this.options.height / this.viewBox.height\n );\n\n // Update active state\n this.activeState.zoom = zoom;\n this.activeState.x = (this.options.width - this.viewBox.width * zoom) / 2;\n this.activeState.y = (this.options.height - this.viewBox.height * zoom) / 2;\n\n // Force updating CTM\n this.updateCTMOnNextFrame();\n\n this.options.svg.removeAttribute(\"viewBox\");\n } else {\n this.simpleViewBoxCache();\n }\n};\n\n/**\n * Recalculate viewport sizes and update viewBox cache\n */\nShadowViewport.prototype.simpleViewBoxCache = function() {\n var bBox = this.viewport.getBBox();\n\n this.viewBox.x = bBox.x;\n this.viewBox.y = bBox.y;\n this.viewBox.width = bBox.width;\n this.viewBox.height = bBox.height;\n};\n\n/**\n * Returns a viewbox object. Safe to alter\n *\n * @return {Object} viewbox object\n */\nShadowViewport.prototype.getViewBox = function() {\n return Utils.extend({}, this.viewBox);\n};\n\n/**\n * Get initial zoom and pan values. Save them into originalState\n * Parses viewBox attribute to alter initial sizes\n *\n * @return {CTM} CTM object based on options\n */\nShadowViewport.prototype.processCTM = function() {\n var newCTM = this.getCTM();\n\n if (this.options.fit || this.options.contain) {\n var newScale;\n if (this.options.fit) {\n newScale = Math.min(\n this.options.width / this.viewBox.width,\n this.options.height / this.viewBox.height\n );\n } else {\n newScale = Math.max(\n this.options.width / this.viewBox.width,\n this.options.height / this.viewBox.height\n );\n }\n\n newCTM.a = newScale; //x-scale\n newCTM.d = newScale; //y-scale\n newCTM.e = -this.viewBox.x * newScale; //x-transform\n newCTM.f = -this.viewBox.y * newScale; //y-transform\n }\n\n if (this.options.center) {\n var offsetX =\n (this.options.width -\n (this.viewBox.width + this.viewBox.x * 2) * newCTM.a) *\n 0.5,\n offsetY =\n (this.options.height -\n (this.viewBox.height + this.viewBox.y * 2) * newCTM.a) *\n 0.5;\n\n newCTM.e = offsetX;\n newCTM.f = offsetY;\n }\n\n // Cache initial values. Based on activeState and fix+center opitons\n this.originalState.zoom = newCTM.a;\n this.originalState.x = newCTM.e;\n this.originalState.y = newCTM.f;\n\n return newCTM;\n};\n\n/**\n * Return originalState object. Safe to alter\n *\n * @return {Object}\n */\nShadowViewport.prototype.getOriginalState = function() {\n return Utils.extend({}, this.originalState);\n};\n\n/**\n * Return actualState object. Safe to alter\n *\n * @return {Object}\n */\nShadowViewport.prototype.getState = function() {\n return Utils.extend({}, this.activeState);\n};\n\n/**\n * Get zoom scale\n *\n * @return {Float} zoom scale\n */\nShadowViewport.prototype.getZoom = function() {\n return this.activeState.zoom;\n};\n\n/**\n * Get zoom scale for pubilc usage\n *\n * @return {Float} zoom scale\n */\nShadowViewport.prototype.getRelativeZoom = function() {\n return this.activeState.zoom / this.originalState.zoom;\n};\n\n/**\n * Compute zoom scale for pubilc usage\n *\n * @return {Float} zoom scale\n */\nShadowViewport.prototype.computeRelativeZoom = function(scale) {\n return scale / this.originalState.zoom;\n};\n\n/**\n * Get pan\n *\n * @return {Object}\n */\nShadowViewport.prototype.getPan = function() {\n return { x: this.activeState.x, y: this.activeState.y };\n};\n\n/**\n * Return cached viewport CTM value that can be safely modified\n *\n * @return {SVGMatrix}\n */\nShadowViewport.prototype.getCTM = function() {\n var safeCTM = this.options.svg.createSVGMatrix();\n\n // Copy values manually as in FF they are not itterable\n safeCTM.a = this.activeState.zoom;\n safeCTM.b = 0;\n safeCTM.c = 0;\n safeCTM.d = this.activeState.zoom;\n safeCTM.e = this.activeState.x;\n safeCTM.f = this.activeState.y;\n\n return safeCTM;\n};\n\n/**\n * Set a new CTM\n *\n * @param {SVGMatrix} newCTM\n */\nShadowViewport.prototype.setCTM = function(newCTM) {\n var willZoom = this.isZoomDifferent(newCTM),\n willPan = this.isPanDifferent(newCTM);\n\n if (willZoom || willPan) {\n // Before zoom\n if (willZoom) {\n // If returns false then cancel zooming\n if (\n this.options.beforeZoom(\n this.getRelativeZoom(),\n this.computeRelativeZoom(newCTM.a)\n ) === false\n ) {\n newCTM.a = newCTM.d = this.activeState.zoom;\n willZoom = false;\n } else {\n this.updateCache(newCTM);\n this.options.onZoom(this.getRelativeZoom());\n }\n }\n\n // Before pan\n if (willPan) {\n var preventPan = this.options.beforePan(this.getPan(), {\n x: newCTM.e,\n y: newCTM.f\n }),\n // If prevent pan is an object\n preventPanX = false,\n preventPanY = false;\n\n // If prevent pan is Boolean false\n if (preventPan === false) {\n // Set x and y same as before\n newCTM.e = this.getPan().x;\n newCTM.f = this.getPan().y;\n\n preventPanX = preventPanY = true;\n } else if (Utils.isObject(preventPan)) {\n // Check for X axes attribute\n if (preventPan.x === false) {\n // Prevent panning on x axes\n newCTM.e = this.getPan().x;\n preventPanX = true;\n } else if (Utils.isNumber(preventPan.x)) {\n // Set a custom pan value\n newCTM.e = preventPan.x;\n }\n\n // Check for Y axes attribute\n if (preventPan.y === false) {\n // Prevent panning on x axes\n newCTM.f = this.getPan().y;\n preventPanY = true;\n } else if (Utils.isNumber(preventPan.y)) {\n // Set a custom pan value\n newCTM.f = preventPan.y;\n }\n }\n\n // Update willPan flag\n // Check if newCTM is still different\n if ((preventPanX && preventPanY) || !this.isPanDifferent(newCTM)) {\n willPan = false;\n } else {\n this.updateCache(newCTM);\n this.options.onPan(this.getPan());\n }\n }\n\n // Check again if should zoom or pan\n if (willZoom || willPan) {\n this.updateCTMOnNextFrame();\n }\n }\n};\n\nShadowViewport.prototype.isZoomDifferent = function(newCTM) {\n return this.activeState.zoom !== newCTM.a;\n};\n\nShadowViewport.prototype.isPanDifferent = function(newCTM) {\n return this.activeState.x !== newCTM.e || this.activeState.y !== newCTM.f;\n};\n\n/**\n * Update cached CTM and active state\n *\n * @param {SVGMatrix} newCTM\n */\nShadowViewport.prototype.updateCache = function(newCTM) {\n this.activeState.zoom = newCTM.a;\n this.activeState.x = newCTM.e;\n this.activeState.y = newCTM.f;\n};\n\nShadowViewport.prototype.pendingUpdate = false;\n\n/**\n * Place a request to update CTM on next Frame\n */\nShadowViewport.prototype.updateCTMOnNextFrame = function() {\n if (!this.pendingUpdate) {\n // Lock\n this.pendingUpdate = true;\n\n // Throttle next update\n this.requestAnimationFrame.call(window, this.updateCTMCached);\n }\n};\n\n/**\n * Update viewport CTM with cached CTM\n */\nShadowViewport.prototype.updateCTM = function() {\n var ctm = this.getCTM();\n\n // Updates SVG element\n SvgUtils.setCTM(this.viewport, ctm, this.defs);\n\n // Free the lock\n this.pendingUpdate = false;\n\n // Notify about the update\n if (this.options.onUpdatedCTM) {\n this.options.onUpdatedCTM(ctm);\n }\n};\n\nmodule.exports = function(viewport, options) {\n return new ShadowViewport(viewport, options);\n};\n","var Wheel = require(\"./uniwheel\"),\n ControlIcons = require(\"./control-icons\"),\n Utils = require(\"./utilities\"),\n SvgUtils = require(\"./svg-utilities\"),\n ShadowViewport = require(\"./shadow-viewport\");\n\nvar SvgPanZoom = function(svg, options) {\n this.init(svg, options);\n};\n\nvar optionsDefaults = {\n viewportSelector: \".svg-pan-zoom_viewport\", // Viewport selector. Can be querySelector string or SVGElement\n panEnabled: true, // enable or disable panning (default enabled)\n controlIconsEnabled: false, // insert icons to give user an option in addition to mouse events to control pan/zoom (default disabled)\n zoomEnabled: true, // enable or disable zooming (default enabled)\n dblClickZoomEnabled: true, // enable or disable zooming by double clicking (default enabled)\n mouseWheelZoomEnabled: true, // enable or disable zooming by mouse wheel (default enabled)\n preventMouseEventsDefault: true, // enable or disable preventDefault for mouse events\n zoomScaleSensitivity: 0.1, // Zoom sensitivity\n minZoom: 0.5, // Minimum Zoom level\n maxZoom: 10, // Maximum Zoom level\n fit: true, // enable or disable viewport fit in SVG (default true)\n contain: false, // enable or disable viewport contain the svg (default false)\n center: true, // enable or disable viewport centering in SVG (default true)\n refreshRate: \"auto\", // Maximum number of frames per second (altering SVG's viewport)\n beforeZoom: null,\n onZoom: null,\n beforePan: null,\n onPan: null,\n customEventsHandler: null,\n eventsListenerElement: null,\n onUpdatedCTM: null\n};\n\nvar passiveListenerOption = { passive: true };\n\nSvgPanZoom.prototype.init = function(svg, options) {\n var that = this;\n\n this.svg = svg;\n this.defs = svg.querySelector(\"defs\");\n\n // Add default attributes to SVG\n SvgUtils.setupSvgAttributes(this.svg);\n\n // Set options\n this.options = Utils.extend(Utils.extend({}, optionsDefaults), options);\n\n // Set default state\n this.state = \"none\";\n\n // Get dimensions\n var boundingClientRectNormalized = SvgUtils.getBoundingClientRectNormalized(\n svg\n );\n this.width = boundingClientRectNormalized.width;\n this.height = boundingClientRectNormalized.height;\n\n // Init shadow viewport\n this.viewport = ShadowViewport(\n SvgUtils.getOrCreateViewport(this.svg, this.options.viewportSelector),\n {\n svg: this.svg,\n width: this.width,\n height: this.height,\n fit: this.options.fit,\n contain: this.options.contain,\n center: this.options.center,\n refreshRate: this.options.refreshRate,\n // Put callbacks into functions as they can change through time\n beforeZoom: function(oldScale, newScale) {\n if (that.viewport && that.options.beforeZoom) {\n return that.options.beforeZoom(oldScale, newScale);\n }\n },\n onZoom: function(scale) {\n if (that.viewport && that.options.onZoom) {\n return that.options.onZoom(scale);\n }\n },\n beforePan: function(oldPoint, newPoint) {\n if (that.viewport && that.options.beforePan) {\n return that.options.beforePan(oldPoint, newPoint);\n }\n },\n onPan: function(point) {\n if (that.viewport && that.options.onPan) {\n return that.options.onPan(point);\n }\n },\n onUpdatedCTM: function(ctm) {\n if (that.viewport && that.options.onUpdatedCTM) {\n return that.options.onUpdatedCTM(ctm);\n }\n }\n }\n );\n\n // Wrap callbacks into public API context\n var publicInstance = this.getPublicInstance();\n publicInstance.setBeforeZoom(this.options.beforeZoom);\n publicInstance.setOnZoom(this.options.onZoom);\n publicInstance.setBeforePan(this.options.beforePan);\n publicInstance.setOnPan(this.options.onPan);\n publicInstance.setOnUpdatedCTM(this.options.onUpdatedCTM);\n\n if (this.options.controlIconsEnabled) {\n ControlIcons.enable(this);\n }\n\n // Init events handlers\n this.lastMouseWheelEventTime = Date.now();\n this.setupHandlers();\n};\n\n/**\n * Register event handlers\n */\nSvgPanZoom.prototype.setupHandlers = function() {\n var that = this,\n prevEvt = null; // use for touchstart event to detect double tap\n\n this.eventListeners = {\n // Mouse down group\n mousedown: function(evt) {\n var result = that.handleMouseDown(evt, prevEvt);\n prevEvt = evt;\n return result;\n },\n touchstart: function(evt) {\n var result = that.handleMouseDown(evt, prevEvt);\n prevEvt = evt;\n return result;\n },\n\n // Mouse up group\n mouseup: function(evt) {\n return that.handleMouseUp(evt);\n },\n touchend: function(evt) {\n return that.handleMouseUp(evt);\n },\n\n // Mouse move group\n mousemove: function(evt) {\n return that.handleMouseMove(evt);\n },\n touchmove: function(evt) {\n return that.handleMouseMove(evt);\n },\n\n // Mouse leave group\n mouseleave: function(evt) {\n return that.handleMouseUp(evt);\n },\n touchleave: function(evt) {\n return that.handleMouseUp(evt);\n },\n touchcancel: function(evt) {\n return that.handleMouseUp(evt);\n }\n };\n\n // Init custom events handler if available\n // eslint-disable-next-line eqeqeq\n if (this.options.customEventsHandler != null) {\n this.options.customEventsHandler.init({\n svgElement: this.svg,\n eventsListenerElement: this.options.eventsListenerElement,\n instance: this.getPublicInstance()\n });\n\n // Custom event handler may halt builtin listeners\n var haltEventListeners = this.options.customEventsHandler\n .haltEventListeners;\n if (haltEventListeners && haltEventListeners.length) {\n for (var i = haltEventListeners.length - 1; i >= 0; i--) {\n if (this.eventListeners.hasOwnProperty(haltEventListeners[i])) {\n delete this.eventListeners[haltEventListeners[i]];\n }\n }\n }\n }\n\n // Bind eventListeners\n for (var event in this.eventListeners) {\n // Attach event to eventsListenerElement or SVG if not available\n (this.options.eventsListenerElement || this.svg).addEventListener(\n event,\n this.eventListeners[event],\n !this.options.preventMouseEventsDefault ? passiveListenerOption : false\n );\n }\n\n // Zoom using mouse wheel\n if (this.options.mouseWheelZoomEnabled) {\n this.options.mouseWheelZoomEnabled = false; // set to false as enable will set it back to true\n this.enableMouseWheelZoom();\n }\n};\n\n/**\n * Enable ability to zoom using mouse wheel\n */\nSvgPanZoom.prototype.enableMouseWheelZoom = function() {\n if (!this.options.mouseWheelZoomEnabled) {\n var that = this;\n\n // Mouse wheel listener\n this.wheelListener = function(evt) {\n return that.handleMouseWheel(evt);\n };\n\n // Bind wheelListener\n var isPassiveListener = !this.options.preventMouseEventsDefault;\n Wheel.on(\n this.options.eventsListenerElement || this.svg,\n this.wheelListener,\n isPassiveListener\n );\n\n this.options.mouseWheelZoomEnabled = true;\n }\n};\n\n/**\n * Disable ability to zoom using mouse wheel\n */\nSvgPanZoom.prototype.disableMouseWheelZoom = function() {\n if (this.options.mouseWheelZoomEnabled) {\n var isPassiveListener = !this.options.preventMouseEventsDefault;\n Wheel.off(\n this.options.eventsListenerElement || this.svg,\n this.wheelListener,\n isPassiveListener\n );\n this.options.mouseWheelZoomEnabled = false;\n }\n};\n\n/**\n * Handle mouse wheel event\n *\n * @param {Event} evt\n */\nSvgPanZoom.prototype.handleMouseWheel = function(evt) {\n if (!this.options.zoomEnabled || this.state !== \"none\") {\n return;\n }\n\n if (this.options.preventMouseEventsDefault) {\n if (evt.preventDefault) {\n evt.preventDefault();\n } else {\n evt.returnValue = false;\n }\n }\n\n // Default delta in case that deltaY is not available\n var delta = evt.deltaY || 1,\n timeDelta = Date.now() - this.lastMouseWheelEventTime,\n divider = 3 + Math.max(0, 30 - timeDelta);\n\n // Update cache\n this.lastMouseWheelEventTime = Date.now();\n\n // Make empirical adjustments for browsers that give deltaY in pixels (deltaMode=0)\n if (\"deltaMode\" in evt && evt.deltaMode === 0 && evt.wheelDelta) {\n delta = evt.deltaY === 0 ? 0 : Math.abs(evt.wheelDelta) / evt.deltaY;\n }\n\n delta =\n -0.3 < delta && delta < 0.3\n ? delta\n : ((delta > 0 ? 1 : -1) * Math.log(Math.abs(delta) + 10)) / divider;\n\n var inversedScreenCTM = this.svg.getScreenCTM().inverse(),\n relativeMousePoint = SvgUtils.getEventPoint(evt, this.svg).matrixTransform(\n inversedScreenCTM\n ),\n zoom = Math.pow(1 + this.options.zoomScaleSensitivity, -1 * delta); // multiplying by neg. 1 so as to make zoom in/out behavior match Google maps behavior\n\n this.zoomAtPoint(zoom, relativeMousePoint);\n};\n\n/**\n * Zoom in at a SVG point\n *\n * @param {SVGPoint} point\n * @param {Float} zoomScale Number representing how much to zoom\n * @param {Boolean} zoomAbsolute Default false. If true, zoomScale is treated as an absolute value.\n * Otherwise, zoomScale is treated as a multiplied (e.g. 1.10 would zoom in 10%)\n */\nSvgPanZoom.prototype.zoomAtPoint = function(zoomScale, point, zoomAbsolute) {\n var originalState = this.viewport.getOriginalState();\n\n if (!zoomAbsolute) {\n // Fit zoomScale in set bounds\n if (\n this.getZoom() * zoomScale <\n this.options.minZoom * originalState.zoom\n ) {\n zoomScale = (this.options.minZoom * originalState.zoom) / this.getZoom();\n } else if (\n this.getZoom() * zoomScale >\n this.options.maxZoom * originalState.zoom\n ) {\n zoomScale = (this.options.maxZoom * originalState.zoom) / this.getZoom();\n }\n } else {\n // Fit zoomScale in set bounds\n zoomScale = Math.max(\n this.options.minZoom * originalState.zoom,\n Math.min(this.options.maxZoom * originalState.zoom, zoomScale)\n );\n // Find relative scale to achieve desired scale\n zoomScale = zoomScale / this.getZoom();\n }\n\n var oldCTM = this.viewport.getCTM(),\n relativePoint = point.matrixTransform(oldCTM.inverse()),\n modifier = this.svg\n .createSVGMatrix()\n .translate(relativePoint.x, relativePoint.y)\n .scale(zoomScale)\n .translate(-relativePoint.x, -relativePoint.y),\n newCTM = oldCTM.multiply(modifier);\n\n if (newCTM.a !== oldCTM.a) {\n this.viewport.setCTM(newCTM);\n }\n};\n\n/**\n * Zoom at center point\n *\n * @param {Float} scale\n * @param {Boolean} absolute Marks zoom scale as relative or absolute\n */\nSvgPanZoom.prototype.zoom = function(scale, absolute) {\n this.zoomAtPoint(\n scale,\n SvgUtils.getSvgCenterPoint(this.svg, this.width, this.height),\n absolute\n );\n};\n\n/**\n * Zoom used by public instance\n *\n * @param {Float} scale\n * @param {Boolean} absolute Marks zoom scale as relative or absolute\n */\nSvgPanZoom.prototype.publicZoom = function(scale, absolute) {\n if (absolute) {\n scale = this.computeFromRelativeZoom(scale);\n }\n\n this.zoom(scale, absolute);\n};\n\n/**\n * Zoom at point used by public instance\n *\n * @param {Float} scale\n * @param {SVGPoint|Object} point An object that has x and y attributes\n * @param {Boolean} absolute Marks zoom scale as relative or absolute\n */\nSvgPanZoom.prototype.publicZoomAtPoint = function(scale, point, absolute) {\n if (absolute) {\n // Transform zoom into a relative value\n scale = this.computeFromRelativeZoom(scale);\n }\n\n // If not a SVGPoint but has x and y then create a SVGPoint\n if (Utils.getType(point) !== \"SVGPoint\") {\n if (\"x\" in point && \"y\" in point) {\n point = SvgUtils.createSVGPoint(this.svg, point.x, point.y);\n } else {\n throw new Error(\"Given point is invalid\");\n }\n }\n\n this.zoomAtPoint(scale, point, absolute);\n};\n\n/**\n * Get zoom scale\n *\n * @return {Float} zoom scale\n */\nSvgPanZoom.prototype.getZoom = function() {\n return this.viewport.getZoom();\n};\n\n/**\n * Get zoom scale for public usage\n *\n * @return {Float} zoom scale\n */\nSvgPanZoom.prototype.getRelativeZoom = function() {\n return this.viewport.getRelativeZoom();\n};\n\n/**\n * Compute actual zoom from public zoom\n *\n * @param {Float} zoom\n * @return {Float} zoom scale\n */\nSvgPanZoom.prototype.computeFromRelativeZoom = function(zoom) {\n return zoom * this.viewport.getOriginalState().zoom;\n};\n\n/**\n * Set zoom to initial state\n */\nSvgPanZoom.prototype.resetZoom = function() {\n var originalState = this.viewport.getOriginalState();\n\n this.zoom(originalState.zoom, true);\n};\n\n/**\n * Set pan to initial state\n */\nSvgPanZoom.prototype.resetPan = function() {\n this.pan(this.viewport.getOriginalState());\n};\n\n/**\n * Set pan and zoom to initial state\n */\nSvgPanZoom.prototype.reset = function() {\n this.resetZoom();\n this.resetPan();\n};\n\n/**\n * Handle double click event\n * See handleMouseDown() for alternate detection method\n *\n * @param {Event} evt\n */\nSvgPanZoom.prototype.handleDblClick = function(evt) {\n if (this.options.preventMouseEventsDefault) {\n if (evt.preventDefault) {\n evt.preventDefault();\n } else {\n evt.returnValue = false;\n }\n }\n\n // Check if target was a control button\n if (this.options.controlIconsEnabled) {\n var targetClass = evt.target.getAttribute(\"class\") || \"\";\n if (targetClass.indexOf(\"svg-pan-zoom-control\") > -1) {\n return false;\n }\n }\n\n var zoomFactor;\n\n if (evt.shiftKey) {\n zoomFactor = 1 / ((1 + this.options.zoomScaleSensitivity) * 2); // zoom out when shift key pressed\n } else {\n zoomFactor = (1 + this.options.zoomScaleSensitivity) * 2;\n }\n\n var point = SvgUtils.getEventPoint(evt, this.svg).matrixTransform(\n this.svg.getScreenCTM().inverse()\n );\n this.zoomAtPoint(zoomFactor, point);\n};\n\n/**\n * Handle click event\n *\n * @param {Event} evt\n */\nSvgPanZoom.prototype.handleMouseDown = function(evt, prevEvt) {\n if (this.options.preventMouseEventsDefault) {\n if (evt.preventDefault) {\n evt.preventDefault();\n } else {\n evt.returnValue = false;\n }\n }\n\n Utils.mouseAndTouchNormalize(evt, this.svg);\n\n // Double click detection; more consistent than ondblclick\n if (this.options.dblClickZoomEnabled && Utils.isDblClick(evt, prevEvt)) {\n this.handleDblClick(evt);\n } else {\n // Pan mode\n this.state = \"pan\";\n this.firstEventCTM = this.viewport.getCTM();\n this.stateOrigin = SvgUtils.getEventPoint(evt, this.svg).matrixTransform(\n this.firstEventCTM.inverse()\n );\n }\n};\n\n/**\n * Handle mouse move event\n *\n * @param {Event} evt\n */\nSvgPanZoom.prototype.handleMouseMove = function(evt) {\n if (this.options.preventMouseEventsDefault) {\n if (evt.preventDefault) {\n evt.preventDefault();\n } else {\n evt.returnValue = false;\n }\n }\n\n if (this.state === \"pan\" && this.options.panEnabled) {\n // Pan mode\n var point = SvgUtils.getEventPoint(evt, this.svg).matrixTransform(\n this.firstEventCTM.inverse()\n ),\n viewportCTM = this.firstEventCTM.translate(\n point.x - this.stateOrigin.x,\n point.y - this.stateOrigin.y\n );\n\n this.viewport.setCTM(viewportCTM);\n }\n};\n\n/**\n * Handle mouse button release event\n *\n * @param {Event} evt\n */\nSvgPanZoom.prototype.handleMouseUp = function(evt) {\n if (this.options.preventMouseEventsDefault) {\n if (evt.preventDefault) {\n evt.preventDefault();\n } else {\n evt.returnValue = false;\n }\n }\n\n if (this.state === \"pan\") {\n // Quit pan mode\n this.state = \"none\";\n }\n};\n\n/**\n * Adjust viewport size (only) so it will fit in SVG\n * Does not center image\n */\nSvgPanZoom.prototype.fit = function() {\n var viewBox = this.viewport.getViewBox(),\n newScale = Math.min(\n this.width / viewBox.width,\n this.height / viewBox.height\n );\n\n this.zoom(newScale, true);\n};\n\n/**\n * Adjust viewport size (only) so it will contain the SVG\n * Does not center image\n */\nSvgPanZoom.prototype.contain = function() {\n var viewBox = this.viewport.getViewBox(),\n newScale = Math.max(\n this.width / viewBox.width,\n this.height / viewBox.height\n );\n\n this.zoom(newScale, true);\n};\n\n/**\n * Adjust viewport pan (only) so it will be centered in SVG\n * Does not zoom/fit/contain image\n */\nSvgPanZoom.prototype.center = function() {\n var viewBox = this.viewport.getViewBox(),\n offsetX =\n (this.width - (viewBox.width + viewBox.x * 2) * this.getZoom()) * 0.5,\n offsetY =\n (this.height - (viewBox.height + viewBox.y * 2) * this.getZoom()) * 0.5;\n\n this.getPublicInstance().pan({ x: offsetX, y: offsetY });\n};\n\n/**\n * Update content cached BorderBox\n * Use when viewport contents change\n */\nSvgPanZoom.prototype.updateBBox = function() {\n this.viewport.simpleViewBoxCache();\n};\n\n/**\n * Pan to a rendered position\n *\n * @param {Object} point {x: 0, y: 0}\n */\nSvgPanZoom.prototype.pan = function(point) {\n var viewportCTM = this.viewport.getCTM();\n viewportCTM.e = point.x;\n viewportCTM.f = point.y;\n this.viewport.setCTM(viewportCTM);\n};\n\n/**\n * Relatively pan the graph by a specified rendered position vector\n *\n * @param {Object} point {x: 0, y: 0}\n */\nSvgPanZoom.prototype.panBy = function(point) {\n var viewportCTM = this.viewport.getCTM();\n viewportCTM.e += point.x;\n viewportCTM.f += point.y;\n this.viewport.setCTM(viewportCTM);\n};\n\n/**\n * Get pan vector\n *\n * @return {Object} {x: 0, y: 0}\n */\nSvgPanZoom.prototype.getPan = function() {\n var state = this.viewport.getState();\n\n return { x: state.x, y: state.y };\n};\n\n/**\n * Recalculates cached svg dimensions and controls position\n */\nSvgPanZoom.prototype.resize = function() {\n // Get dimensions\n var boundingClientRectNormalized = SvgUtils.getBoundingClientRectNormalized(\n this.svg\n );\n this.width = boundingClientRectNormalized.width;\n this.height = boundingClientRectNormalized.height;\n\n // Recalculate original state\n var viewport = this.viewport;\n viewport.options.width = this.width;\n viewport.options.height = this.height;\n viewport.processCTM();\n\n // Reposition control icons by re-enabling them\n if (this.options.controlIconsEnabled) {\n this.getPublicInstance().disableControlIcons();\n this.getPublicInstance().enableControlIcons();\n }\n};\n\n/**\n * Unbind mouse events, free callbacks and destroy public instance\n */\nSvgPanZoom.prototype.destroy = function() {\n var that = this;\n\n // Free callbacks\n this.beforeZoom = null;\n this.onZoom = null;\n this.beforePan = null;\n this.onPan = null;\n this.onUpdatedCTM = null;\n\n // Destroy custom event handlers\n // eslint-disable-next-line eqeqeq\n if (this.options.customEventsHandler != null) {\n this.options.customEventsHandler.destroy({\n svgElement: this.svg,\n eventsListenerElement: this.options.eventsListenerElement,\n instance: this.getPublicInstance()\n });\n }\n\n // Unbind eventListeners\n for (var event in this.eventListeners) {\n (this.options.eventsListenerElement || this.svg).removeEventListener(\n event,\n this.eventListeners[event],\n !this.options.preventMouseEventsDefault ? passiveListenerOption : false\n );\n }\n\n // Unbind wheelListener\n this.disableMouseWheelZoom();\n\n // Remove control icons\n this.getPublicInstance().disableControlIcons();\n\n // Reset zoom and pan\n this.reset();\n\n // Remove instance from instancesStore\n instancesStore = instancesStore.filter(function(instance) {\n return instance.svg !== that.svg;\n });\n\n // Delete options and its contents\n delete this.options;\n\n // Delete viewport to make public shadow viewport functions uncallable\n delete this.viewport;\n\n // Destroy public instance and rewrite getPublicInstance\n delete this.publicInstance;\n delete this.pi;\n this.getPublicInstance = function() {\n return null;\n };\n};\n\n/**\n * Returns a public instance object\n *\n * @return {Object} Public instance object\n */\nSvgPanZoom.prototype.getPublicInstance = function() {\n var that = this;\n\n // Create cache\n if (!this.publicInstance) {\n this.publicInstance = this.pi = {\n // Pan\n enablePan: function() {\n that.options.panEnabled = true;\n return that.pi;\n },\n disablePan: function() {\n that.options.panEnabled = false;\n return that.pi;\n },\n isPanEnabled: function() {\n return !!that.options.panEnabled;\n },\n pan: function(point) {\n that.pan(point);\n return that.pi;\n },\n panBy: function(point) {\n that.panBy(point);\n return that.pi;\n },\n getPan: function() {\n return that.getPan();\n },\n // Pan event\n setBeforePan: function(fn) {\n that.options.beforePan =\n fn === null ? null : Utils.proxy(fn, that.publicInstance);\n return that.pi;\n },\n setOnPan: function(fn) {\n that.options.onPan =\n fn === null ? null : Utils.proxy(fn, that.publicInstance);\n return that.pi;\n },\n // Zoom and Control Icons\n enableZoom: function() {\n that.options.zoomEnabled = true;\n return that.pi;\n },\n disableZoom: function() {\n that.options.zoomEnabled = false;\n return that.pi;\n },\n isZoomEnabled: function() {\n return !!that.options.zoomEnabled;\n },\n enableControlIcons: function() {\n if (!that.options.controlIconsEnabled) {\n that.options.controlIconsEnabled = true;\n ControlIcons.enable(that);\n }\n return that.pi;\n },\n disableControlIcons: function() {\n if (that.options.controlIconsEnabled) {\n that.options.controlIconsEnabled = false;\n ControlIcons.disable(that);\n }\n return that.pi;\n },\n isControlIconsEnabled: function() {\n return !!that.options.controlIconsEnabled;\n },\n // Double click zoom\n enableDblClickZoom: function() {\n that.options.dblClickZoomEnabled = true;\n return that.pi;\n },\n disableDblClickZoom: function() {\n that.options.dblClickZoomEnabled = false;\n return that.pi;\n },\n isDblClickZoomEnabled: function() {\n return !!that.options.dblClickZoomEnabled;\n },\n // Mouse wheel zoom\n enableMouseWheelZoom: function() {\n that.enableMouseWheelZoom();\n return that.pi;\n },\n disableMouseWheelZoom: function() {\n that.disableMouseWheelZoom();\n return that.pi;\n },\n isMouseWheelZoomEnabled: function() {\n return !!that.options.mouseWheelZoomEnabled;\n },\n // Zoom scale and bounds\n setZoomScaleSensitivity: function(scale) {\n that.options.zoomScaleSensitivity = scale;\n return that.pi;\n },\n setMinZoom: function(zoom) {\n that.options.minZoom = zoom;\n return that.pi;\n },\n setMaxZoom: function(zoom) {\n that.options.maxZoom = zoom;\n return that.pi;\n },\n // Zoom event\n setBeforeZoom: function(fn) {\n that.options.beforeZoom =\n fn === null ? null : Utils.proxy(fn, that.publicInstance);\n return that.pi;\n },\n setOnZoom: function(fn) {\n that.options.onZoom =\n fn === null ? null : Utils.proxy(fn, that.publicInstance);\n return that.pi;\n },\n // Zooming\n zoom: function(scale) {\n that.publicZoom(scale, true);\n return that.pi;\n },\n zoomBy: function(scale) {\n that.publicZoom(scale, false);\n return that.pi;\n },\n zoomAtPoint: function(scale, point) {\n that.publicZoomAtPoint(scale, point, true);\n return that.pi;\n },\n zoomAtPointBy: function(scale, point) {\n that.publicZoomAtPoint(scale, point, false);\n return that.pi;\n },\n zoomIn: function() {\n this.zoomBy(1 + that.options.zoomScaleSensitivity);\n return that.pi;\n },\n zoomOut: function() {\n this.zoomBy(1 / (1 + that.options.zoomScaleSensitivity));\n return that.pi;\n },\n getZoom: function() {\n return that.getRelativeZoom();\n },\n // CTM update\n setOnUpdatedCTM: function(fn) {\n that.options.onUpdatedCTM =\n fn === null ? null : Utils.proxy(fn, that.publicInstance);\n return that.pi;\n },\n // Reset\n resetZoom: function() {\n that.resetZoom();\n return that.pi;\n },\n resetPan: function() {\n that.resetPan();\n return that.pi;\n },\n reset: function() {\n that.reset();\n return that.pi;\n },\n // Fit, Contain and Center\n fit: function() {\n that.fit();\n return that.pi;\n },\n contain: function() {\n that.contain();\n return that.pi;\n },\n center: function() {\n that.center();\n return that.pi;\n },\n // Size and Resize\n updateBBox: function() {\n that.updateBBox();\n return that.pi;\n },\n resize: function() {\n that.resize();\n return that.pi;\n },\n getSizes: function() {\n return {\n width: that.width,\n height: that.height,\n realZoom: that.getZoom(),\n viewBox: that.viewport.getViewBox()\n };\n },\n // Destroy\n destroy: function() {\n that.destroy();\n return that.pi;\n }\n };\n }\n\n return this.publicInstance;\n};\n\n/**\n * Stores pairs of instances of SvgPanZoom and SVG\n * Each pair is represented by an object {svg: SVGSVGElement, instance: SvgPanZoom}\n *\n * @type {Array}\n */\nvar instancesStore = [];\n\nvar svgPanZoom = function(elementOrSelector, options) {\n var svg = Utils.getSvg(elementOrSelector);\n\n if (svg === null) {\n return null;\n } else {\n // Look for existent instance\n for (var i = instancesStore.length - 1; i >= 0; i--) {\n if (instancesStore[i].svg === svg) {\n return instancesStore[i].instance.getPublicInstance();\n }\n }\n\n // If instance not found - create one\n instancesStore.push({\n svg: svg,\n instance: new SvgPanZoom(svg, options)\n });\n\n // Return just pushed instance\n return instancesStore[\n instancesStore.length - 1\n ].instance.getPublicInstance();\n }\n};\n\nmodule.exports = svgPanZoom;\n","var Utils = require(\"./utilities\"),\n _browser = \"unknown\";\n\n// http://stackoverflow.com/questions/9847580/how-to-detect-safari-chrome-ie-firefox-and-opera-browser\nif (/*@cc_on!@*/ false || !!document.documentMode) {\n // internet explorer\n _browser = \"ie\";\n}\n\nmodule.exports = {\n svgNS: \"http://www.w3.org/2000/svg\",\n xmlNS: \"http://www.w3.org/XML/1998/namespace\",\n xmlnsNS: \"http://www.w3.org/2000/xmlns/\",\n xlinkNS: \"http://www.w3.org/1999/xlink\",\n evNS: \"http://www.w3.org/2001/xml-events\",\n\n /**\n * Get svg dimensions: width and height\n *\n * @param {SVGSVGElement} svg\n * @return {Object} {width: 0, height: 0}\n */\n getBoundingClientRectNormalized: function(svg) {\n if (svg.clientWidth && svg.clientHeight) {\n return { width: svg.clientWidth, height: svg.clientHeight };\n } else if (!!svg.getBoundingClientRect()) {\n return svg.getBoundingClientRect();\n } else {\n throw new Error(\"Cannot get BoundingClientRect for SVG.\");\n }\n },\n\n /**\n * Gets g element with class of \"viewport\" or creates it if it doesn't exist\n *\n * @param {SVGSVGElement} svg\n * @return {SVGElement} g (group) element\n */\n getOrCreateViewport: function(svg, selector) {\n var viewport = null;\n\n if (Utils.isElement(selector)) {\n viewport = selector;\n } else {\n viewport = svg.querySelector(selector);\n }\n\n // Check if there is just one main group in SVG\n if (!viewport) {\n var childNodes = Array.prototype.slice\n .call(svg.childNodes || svg.children)\n .filter(function(el) {\n return el.nodeName !== \"defs\" && el.nodeName !== \"#text\";\n });\n\n // Node name should be SVGGElement and should have no transform attribute\n // Groups with transform are not used as viewport because it involves parsing of all transform possibilities\n if (\n childNodes.length === 1 &&\n childNodes[0].nodeName === \"g\" &&\n childNodes[0].getAttribute(\"transform\") === null\n ) {\n viewport = childNodes[0];\n }\n }\n\n // If no favorable group element exists then create one\n if (!viewport) {\n var viewportId =\n \"viewport-\" + new Date().toISOString().replace(/\\D/g, \"\");\n viewport = document.createElementNS(this.svgNS, \"g\");\n viewport.setAttribute(\"id\", viewportId);\n\n // Internet Explorer (all versions?) can't use childNodes, but other browsers prefer (require?) using childNodes\n var svgChildren = svg.childNodes || svg.children;\n if (!!svgChildren && svgChildren.length > 0) {\n for (var i = svgChildren.length; i > 0; i--) {\n // Move everything into viewport except defs\n if (svgChildren[svgChildren.length - i].nodeName !== \"defs\") {\n viewport.appendChild(svgChildren[svgChildren.length - i]);\n }\n }\n }\n svg.appendChild(viewport);\n }\n\n // Parse class names\n var classNames = [];\n if (viewport.getAttribute(\"class\")) {\n classNames = viewport.getAttribute(\"class\").split(\" \");\n }\n\n // Set class (if not set already)\n if (!~classNames.indexOf(\"svg-pan-zoom_viewport\")) {\n classNames.push(\"svg-pan-zoom_viewport\");\n viewport.setAttribute(\"class\", classNames.join(\" \"));\n }\n\n return viewport;\n },\n\n /**\n * Set SVG attributes\n *\n * @param {SVGSVGElement} svg\n */\n setupSvgAttributes: function(svg) {\n // Setting default attributes\n svg.setAttribute(\"xmlns\", this.svgNS);\n svg.setAttributeNS(this.xmlnsNS, \"xmlns:xlink\", this.xlinkNS);\n svg.setAttributeNS(this.xmlnsNS, \"xmlns:ev\", this.evNS);\n\n // Needed for Internet Explorer, otherwise the viewport overflows\n if (svg.parentNode !== null) {\n var style = svg.getAttribute(\"style\") || \"\";\n if (style.toLowerCase().indexOf(\"overflow\") === -1) {\n svg.setAttribute(\"style\", \"overflow: hidden; \" + style);\n }\n }\n },\n\n /**\n * How long Internet Explorer takes to finish updating its display (ms).\n */\n internetExplorerRedisplayInterval: 300,\n\n /**\n * Forces the browser to redisplay all SVG elements that rely on an\n * element defined in a 'defs' section. It works globally, for every\n * available defs element on the page.\n * The throttling is intentionally global.\n *\n * This is only needed for IE. It is as a hack to make markers (and 'use' elements?)\n * visible after pan/zoom when there are multiple SVGs on the page.\n * See bug report: https://connect.microsoft.com/IE/feedback/details/781964/\n * also see svg-pan-zoom issue: https://github.com/ariutta/svg-pan-zoom/issues/62\n */\n refreshDefsGlobal: Utils.throttle(\n function() {\n var allDefs = document.querySelectorAll(\"defs\");\n var allDefsCount = allDefs.length;\n for (var i = 0; i < allDefsCount; i++) {\n var thisDefs = allDefs[i];\n thisDefs.parentNode.insertBefore(thisDefs, thisDefs);\n }\n },\n this ? this.internetExplorerRedisplayInterval : null\n ),\n\n /**\n * Sets the current transform matrix of an element\n *\n * @param {SVGElement} element\n * @param {SVGMatrix} matrix CTM\n * @param {SVGElement} defs\n */\n setCTM: function(element, matrix, defs) {\n var that = this,\n s =\n \"matrix(\" +\n matrix.a +\n \",\" +\n matrix.b +\n \",\" +\n matrix.c +\n \",\" +\n matrix.d +\n \",\" +\n matrix.e +\n \",\" +\n matrix.f +\n \")\";\n\n element.setAttributeNS(null, \"transform\", s);\n if (\"transform\" in element.style) {\n element.style.transform = s;\n } else if (\"-ms-transform\" in element.style) {\n element.style[\"-ms-transform\"] = s;\n } else if (\"-webkit-transform\" in element.style) {\n element.style[\"-webkit-transform\"] = s;\n }\n\n // IE has a bug that makes markers disappear on zoom (when the matrix \"a\" and/or \"d\" elements change)\n // see http://stackoverflow.com/questions/17654578/svg-marker-does-not-work-in-ie9-10\n // and http://srndolha.wordpress.com/2013/11/25/svg-line-markers-may-disappear-in-internet-explorer-11/\n if (_browser === \"ie\" && !!defs) {\n // this refresh is intended for redisplaying the SVG during zooming\n defs.parentNode.insertBefore(defs, defs);\n // this refresh is intended for redisplaying the other SVGs on a page when panning a given SVG\n // it is also needed for the given SVG itself, on zoomEnd, if the SVG contains any markers that\n // are located under any other element(s).\n window.setTimeout(function() {\n that.refreshDefsGlobal();\n }, that.internetExplorerRedisplayInterval);\n }\n },\n\n /**\n * Instantiate an SVGPoint object with given event coordinates\n *\n * @param {Event} evt\n * @param {SVGSVGElement} svg\n * @return {SVGPoint} point\n */\n getEventPoint: function(evt, svg) {\n var point = svg.createSVGPoint();\n\n Utils.mouseAndTouchNormalize(evt, svg);\n\n point.x = evt.clientX;\n point.y = evt.clientY;\n\n return point;\n },\n\n /**\n * Get SVG center point\n *\n * @param {SVGSVGElement} svg\n * @return {SVGPoint}\n */\n getSvgCenterPoint: function(svg, width, height) {\n return this.createSVGPoint(svg, width / 2, height / 2);\n },\n\n /**\n * Create a SVGPoint with given x and y\n *\n * @param {SVGSVGElement} svg\n * @param {Number} x\n * @param {Number} y\n * @return {SVGPoint}\n */\n createSVGPoint: function(svg, x, y) {\n var point = svg.createSVGPoint();\n point.x = x;\n point.y = y;\n\n return point;\n }\n};\n","// uniwheel 0.1.2 (customized)\n// A unified cross browser mouse wheel event handler\n// https://github.com/teemualap/uniwheel\n\nmodule.exports = (function(){\n\n //Full details: https://developer.mozilla.org/en-US/docs/Web/Reference/Events/wheel\n\n var prefix = \"\", _addEventListener, _removeEventListener, support, fns = [];\n var passiveOption = {passive: true};\n\n // detect event model\n if ( window.addEventListener ) {\n _addEventListener = \"addEventListener\";\n _removeEventListener = \"removeEventListener\";\n } else {\n _addEventListener = \"attachEvent\";\n _removeEventListener = \"detachEvent\";\n prefix = \"on\";\n }\n\n // detect available wheel event\n support = \"onwheel\" in document.createElement(\"div\") ? \"wheel\" : // Modern browsers support \"wheel\"\n document.onmousewheel !== undefined ? \"mousewheel\" : // Webkit and IE support at least \"mousewheel\"\n \"DOMMouseScroll\"; // let's assume that remaining browsers are older Firefox\n\n\n function createCallback(element,callback) {\n\n var fn = function(originalEvent) {\n\n !originalEvent && ( originalEvent = window.event );\n\n // create a normalized event object\n var event = {\n // keep a ref to the original event object\n originalEvent: originalEvent,\n target: originalEvent.target || originalEvent.srcElement,\n type: \"wheel\",\n deltaMode: originalEvent.type == \"MozMousePixelScroll\" ? 0 : 1,\n deltaX: 0,\n delatZ: 0,\n preventDefault: function() {\n originalEvent.preventDefault ?\n originalEvent.preventDefault() :\n originalEvent.returnValue = false;\n }\n };\n\n // calculate deltaY (and deltaX) according to the event\n if ( support == \"mousewheel\" ) {\n event.deltaY = - 1/40 * originalEvent.wheelDelta;\n // Webkit also support wheelDeltaX\n originalEvent.wheelDeltaX && ( event.deltaX = - 1/40 * originalEvent.wheelDeltaX );\n } else {\n event.deltaY = originalEvent.detail;\n }\n\n // it's time to fire the callback\n return callback( event );\n\n };\n\n fns.push({\n element: element,\n fn: fn,\n });\n\n return fn;\n }\n\n function getCallback(element) {\n for (var i = 0; i < fns.length; i++) {\n if (fns[i].element === element) {\n return fns[i].fn;\n }\n }\n return function(){};\n }\n\n function removeCallback(element) {\n for (var i = 0; i < fns.length; i++) {\n if (fns[i].element === element) {\n return fns.splice(i,1);\n }\n }\n }\n\n function _addWheelListener(elem, eventName, callback, isPassiveListener ) {\n var cb;\n\n if (support === \"wheel\") {\n cb = callback;\n } else {\n cb = createCallback(elem, callback);\n }\n\n elem[_addEventListener](prefix + eventName, cb, isPassiveListener ? passiveOption : false);\n }\n\n function _removeWheelListener(elem, eventName, callback, isPassiveListener ) {\n\n var cb;\n\n if (support === \"wheel\") {\n cb = callback;\n } else {\n cb = getCallback(elem);\n }\n\n elem[_removeEventListener](prefix + eventName, cb, isPassiveListener ? passiveOption : false);\n\n removeCallback(elem);\n }\n\n function addWheelListener( elem, callback, isPassiveListener ) {\n _addWheelListener(elem, support, callback, isPassiveListener );\n\n // handle MozMousePixelScroll in older Firefox\n if( support == \"DOMMouseScroll\" ) {\n _addWheelListener(elem, \"MozMousePixelScroll\", callback, isPassiveListener );\n }\n }\n\n function removeWheelListener(elem, callback, isPassiveListener){\n _removeWheelListener(elem, support, callback, isPassiveListener);\n\n // handle MozMousePixelScroll in older Firefox\n if( support == \"DOMMouseScroll\" ) {\n _removeWheelListener(elem, \"MozMousePixelScroll\", callback, isPassiveListener);\n }\n }\n\n return {\n on: addWheelListener,\n off: removeWheelListener\n };\n\n})();\n","module.exports = {\n /**\n * Extends an object\n *\n * @param {Object} target object to extend\n * @param {Object} source object to take properties from\n * @return {Object} extended object\n */\n extend: function(target, source) {\n target = target || {};\n for (var prop in source) {\n // Go recursively\n if (this.isObject(source[prop])) {\n target[prop] = this.extend(target[prop], source[prop]);\n } else {\n target[prop] = source[prop];\n }\n }\n return target;\n },\n\n /**\n * Checks if an object is a DOM element\n *\n * @param {Object} o HTML element or String\n * @return {Boolean} returns true if object is a DOM element\n */\n isElement: function(o) {\n return (\n o instanceof HTMLElement ||\n o instanceof SVGElement ||\n o instanceof SVGSVGElement || //DOM2\n (o &&\n typeof o === \"object\" &&\n o !== null &&\n o.nodeType === 1 &&\n typeof o.nodeName === \"string\")\n );\n },\n\n /**\n * Checks if an object is an Object\n *\n * @param {Object} o Object\n * @return {Boolean} returns true if object is an Object\n */\n isObject: function(o) {\n return Object.prototype.toString.call(o) === \"[object Object]\";\n },\n\n /**\n * Checks if variable is Number\n *\n * @param {Integer|Float} n\n * @return {Boolean} returns true if variable is Number\n */\n isNumber: function(n) {\n return !isNaN(parseFloat(n)) && isFinite(n);\n },\n\n /**\n * Search for an SVG element\n *\n * @param {Object|String} elementOrSelector DOM Element or selector String\n * @return {Object|Null} SVG or null\n */\n getSvg: function(elementOrSelector) {\n var element, svg;\n\n if (!this.isElement(elementOrSelector)) {\n // If selector provided\n if (\n typeof elementOrSelector === \"string\" ||\n elementOrSelector instanceof String\n ) {\n // Try to find the element\n element = document.querySelector(elementOrSelector);\n\n if (!element) {\n throw new Error(\n \"Provided selector did not find any elements. Selector: \" +\n elementOrSelector\n );\n return null;\n }\n } else {\n throw new Error(\"Provided selector is not an HTML object nor String\");\n return null;\n }\n } else {\n element = elementOrSelector;\n }\n\n if (element.tagName.toLowerCase() === \"svg\") {\n svg = element;\n } else {\n if (element.tagName.toLowerCase() === \"object\") {\n svg = element.contentDocument.documentElement;\n } else {\n if (element.tagName.toLowerCase() === \"embed\") {\n svg = element.getSVGDocument().documentElement;\n } else {\n if (element.tagName.toLowerCase() === \"img\") {\n throw new Error(\n 'Cannot script an SVG in an \"img\" element. Please use an \"object\" element or an in-line SVG.'\n );\n } else {\n throw new Error(\"Cannot get SVG.\");\n }\n return null;\n }\n }\n }\n\n return svg;\n },\n\n /**\n * Attach a given context to a function\n * @param {Function} fn Function\n * @param {Object} context Context\n * @return {Function} Function with certain context\n */\n proxy: function(fn, context) {\n return function() {\n return fn.apply(context, arguments);\n };\n },\n\n /**\n * Returns object type\n * Uses toString that returns [object SVGPoint]\n * And than parses object type from string\n *\n * @param {Object} o Any object\n * @return {String} Object type\n */\n getType: function(o) {\n return Object.prototype.toString\n .apply(o)\n .replace(/^\\[object\\s/, \"\")\n .replace(/\\]$/, \"\");\n },\n\n /**\n * If it is a touch event than add clientX and clientY to event object\n *\n * @param {Event} evt\n * @param {SVGSVGElement} svg\n */\n mouseAndTouchNormalize: function(evt, svg) {\n // If no clientX then fallback\n if (evt.clientX === void 0 || evt.clientX === null) {\n // Fallback\n evt.clientX = 0;\n evt.clientY = 0;\n\n // If it is a touch event\n if (evt.touches !== void 0 && evt.touches.length) {\n if (evt.touches[0].clientX !== void 0) {\n evt.clientX = evt.touches[0].clientX;\n evt.clientY = evt.touches[0].clientY;\n } else if (evt.touches[0].pageX !== void 0) {\n var rect = svg.getBoundingClientRect();\n\n evt.clientX = evt.touches[0].pageX - rect.left;\n evt.clientY = evt.touches[0].pageY - rect.top;\n }\n // If it is a custom event\n } else if (evt.originalEvent !== void 0) {\n if (evt.originalEvent.clientX !== void 0) {\n evt.clientX = evt.originalEvent.clientX;\n evt.clientY = evt.originalEvent.clientY;\n }\n }\n }\n },\n\n /**\n * Check if an event is a double click/tap\n * TODO: For touch gestures use a library (hammer.js) that takes in account other events\n * (touchmove and touchend). It should take in account tap duration and traveled distance\n *\n * @param {Event} evt\n * @param {Event} prevEvt Previous Event\n * @return {Boolean}\n */\n isDblClick: function(evt, prevEvt) {\n // Double click detected by browser\n if (evt.detail === 2) {\n return true;\n }\n // Try to compare events\n else if (prevEvt !== void 0 && prevEvt !== null) {\n var timeStampDiff = evt.timeStamp - prevEvt.timeStamp, // should be lower than 250 ms\n touchesDistance = Math.sqrt(\n Math.pow(evt.clientX - prevEvt.clientX, 2) +\n Math.pow(evt.clientY - prevEvt.clientY, 2)\n );\n\n return timeStampDiff < 250 && touchesDistance < 10;\n }\n\n // Nothing found\n return false;\n },\n\n /**\n * Returns current timestamp as an integer\n *\n * @return {Number}\n */\n now:\n Date.now ||\n function() {\n return new Date().getTime();\n },\n\n // From underscore.\n // Returns a function, that, when invoked, will only be triggered at most once\n // during a given window of time. Normally, the throttled function will run\n // as much as it can, without ever going more than once per `wait` duration;\n // but if you'd like to disable the execution on the leading edge, pass\n // `{leading: false}`. To disable execution on the trailing edge, ditto.\n throttle: function(func, wait, options) {\n var that = this;\n var context, args, result;\n var timeout = null;\n var previous = 0;\n if (!options) {\n options = {};\n }\n var later = function() {\n previous = options.leading === false ? 0 : that.now();\n timeout = null;\n result = func.apply(context, args);\n if (!timeout) {\n context = args = null;\n }\n };\n return function() {\n var now = that.now();\n if (!previous && options.leading === false) {\n previous = now;\n }\n var remaining = wait - (now - previous);\n context = this; // eslint-disable-line consistent-this\n args = arguments;\n if (remaining <= 0 || remaining > wait) {\n clearTimeout(timeout);\n timeout = null;\n previous = now;\n result = func.apply(context, args);\n if (!timeout) {\n context = args = null;\n }\n } else if (!timeout && options.trailing !== false) {\n timeout = setTimeout(later, remaining);\n }\n return result;\n };\n },\n\n /**\n * Create a requestAnimationFrame simulation\n *\n * @param {Number|String} refreshRate\n * @return {Function}\n */\n createRequestAnimationFrame: function(refreshRate) {\n var timeout = null;\n\n // Convert refreshRate to timeout\n if (refreshRate !== \"auto\" && refreshRate < 60 && refreshRate > 1) {\n timeout = Math.floor(1000 / refreshRate);\n }\n\n if (timeout === null) {\n return window.requestAnimationFrame || requestTimeout(33);\n } else {\n return requestTimeout(timeout);\n }\n }\n};\n\n/**\n * Create a callback that will execute after a given timeout\n *\n * @param {Function} timeout\n * @return {Function}\n */\nfunction requestTimeout(timeout) {\n return function(callback) {\n window.setTimeout(callback, timeout);\n };\n}\n","/*!\n* @svgdotjs/svg.js - A lightweight library for manipulating and animating SVG.\n* @version 3.0.16\n* https://svgdotjs.github.io/\n*\n* @copyright Wout Fierens \n* @license MIT\n*\n* BUILT: Tue Nov 12 2019 21:57:16 GMT+0100 (GMT+01:00)\n*/;\nvar commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\nfunction createCommonjsModule(fn, module) {\n\treturn module = { exports: {} }, fn(module, module.exports), module.exports;\n}\n\nvar check = function (it) {\n return it && it.Math == Math && it;\n};\n\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global_1 =\n // eslint-disable-next-line no-undef\n check(typeof globalThis == 'object' && globalThis) ||\n check(typeof window == 'object' && window) ||\n check(typeof self == 'object' && self) ||\n check(typeof commonjsGlobal == 'object' && commonjsGlobal) ||\n // eslint-disable-next-line no-new-func\n Function('return this')();\n\nvar fails = function (exec) {\n try {\n return !!exec();\n } catch (error) {\n return true;\n }\n};\n\n// Thank's IE8 for his funny defineProperty\nvar descriptors = !fails(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n\nvar nativePropertyIsEnumerable = {}.propertyIsEnumerable;\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// Nashorn ~ JDK8 bug\nvar NASHORN_BUG = getOwnPropertyDescriptor && !nativePropertyIsEnumerable.call({ 1: 2 }, 1);\n\n// `Object.prototype.propertyIsEnumerable` method implementation\n// https://tc39.github.io/ecma262/#sec-object.prototype.propertyisenumerable\nvar f = NASHORN_BUG ? function propertyIsEnumerable(V) {\n var descriptor = getOwnPropertyDescriptor(this, V);\n return !!descriptor && descriptor.enumerable;\n} : nativePropertyIsEnumerable;\n\nvar objectPropertyIsEnumerable = {\n\tf: f\n};\n\nvar createPropertyDescriptor = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n\nvar toString = {}.toString;\n\nvar classofRaw = function (it) {\n return toString.call(it).slice(8, -1);\n};\n\nvar split = ''.split;\n\n// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar indexedObject = fails(function () {\n // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346\n // eslint-disable-next-line no-prototype-builtins\n return !Object('z').propertyIsEnumerable(0);\n}) ? function (it) {\n return classofRaw(it) == 'String' ? split.call(it, '') : Object(it);\n} : Object;\n\n// `RequireObjectCoercible` abstract operation\n// https://tc39.github.io/ecma262/#sec-requireobjectcoercible\nvar requireObjectCoercible = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n\n// toObject with fallback for non-array-like ES3 strings\n\n\n\nvar toIndexedObject = function (it) {\n return indexedObject(requireObjectCoercible(it));\n};\n\nvar isObject = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n\n// `ToPrimitive` abstract operation\n// https://tc39.github.io/ecma262/#sec-toprimitive\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nvar toPrimitive = function (input, PREFERRED_STRING) {\n if (!isObject(input)) return input;\n var fn, val;\n if (PREFERRED_STRING && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input))) return val;\n if (typeof (fn = input.valueOf) == 'function' && !isObject(val = fn.call(input))) return val;\n if (!PREFERRED_STRING && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n\nvar hasOwnProperty = {}.hasOwnProperty;\n\nvar has = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n\nvar document$1 = global_1.document;\n// typeof document.createElement is 'object' in old IE\nvar EXISTS = isObject(document$1) && isObject(document$1.createElement);\n\nvar documentCreateElement = function (it) {\n return EXISTS ? document$1.createElement(it) : {};\n};\n\n// Thank's IE8 for his funny defineProperty\nvar ie8DomDefine = !descriptors && !fails(function () {\n return Object.defineProperty(documentCreateElement('div'), 'a', {\n get: function () { return 7; }\n }).a != 7;\n});\n\nvar nativeGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// `Object.getOwnPropertyDescriptor` method\n// https://tc39.github.io/ecma262/#sec-object.getownpropertydescriptor\nvar f$1 = descriptors ? nativeGetOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) {\n O = toIndexedObject(O);\n P = toPrimitive(P, true);\n if (ie8DomDefine) try {\n return nativeGetOwnPropertyDescriptor(O, P);\n } catch (error) { /* empty */ }\n if (has(O, P)) return createPropertyDescriptor(!objectPropertyIsEnumerable.f.call(O, P), O[P]);\n};\n\nvar objectGetOwnPropertyDescriptor = {\n\tf: f$1\n};\n\nvar anObject = function (it) {\n if (!isObject(it)) {\n throw TypeError(String(it) + ' is not an object');\n } return it;\n};\n\nvar nativeDefineProperty = Object.defineProperty;\n\n// `Object.defineProperty` method\n// https://tc39.github.io/ecma262/#sec-object.defineproperty\nvar f$2 = descriptors ? nativeDefineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (ie8DomDefine) try {\n return nativeDefineProperty(O, P, Attributes);\n } catch (error) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n\nvar objectDefineProperty = {\n\tf: f$2\n};\n\nvar createNonEnumerableProperty = descriptors ? function (object, key, value) {\n return objectDefineProperty.f(object, key, createPropertyDescriptor(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n\nvar setGlobal = function (key, value) {\n try {\n createNonEnumerableProperty(global_1, key, value);\n } catch (error) {\n global_1[key] = value;\n } return value;\n};\n\nvar SHARED = '__core-js_shared__';\nvar store = global_1[SHARED] || setGlobal(SHARED, {});\n\nvar sharedStore = store;\n\nvar shared = createCommonjsModule(function (module) {\n(module.exports = function (key, value) {\n return sharedStore[key] || (sharedStore[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: '3.3.6',\n mode: 'global',\n copyright: '© 2019 Denis Pushkarev (zloirock.ru)'\n});\n});\n\nvar functionToString = shared('native-function-to-string', Function.toString);\n\nvar WeakMap = global_1.WeakMap;\n\nvar nativeWeakMap = typeof WeakMap === 'function' && /native code/.test(functionToString.call(WeakMap));\n\nvar id = 0;\nvar postfix = Math.random();\n\nvar uid = function (key) {\n return 'Symbol(' + String(key === undefined ? '' : key) + ')_' + (++id + postfix).toString(36);\n};\n\nvar keys = shared('keys');\n\nvar sharedKey = function (key) {\n return keys[key] || (keys[key] = uid(key));\n};\n\nvar hiddenKeys = {};\n\nvar WeakMap$1 = global_1.WeakMap;\nvar set, get, has$1;\n\nvar enforce = function (it) {\n return has$1(it) ? get(it) : set(it, {});\n};\n\nvar getterFor = function (TYPE) {\n return function (it) {\n var state;\n if (!isObject(it) || (state = get(it)).type !== TYPE) {\n throw TypeError('Incompatible receiver, ' + TYPE + ' required');\n } return state;\n };\n};\n\nif (nativeWeakMap) {\n var store$1 = new WeakMap$1();\n var wmget = store$1.get;\n var wmhas = store$1.has;\n var wmset = store$1.set;\n set = function (it, metadata) {\n wmset.call(store$1, it, metadata);\n return metadata;\n };\n get = function (it) {\n return wmget.call(store$1, it) || {};\n };\n has$1 = function (it) {\n return wmhas.call(store$1, it);\n };\n} else {\n var STATE = sharedKey('state');\n hiddenKeys[STATE] = true;\n set = function (it, metadata) {\n createNonEnumerableProperty(it, STATE, metadata);\n return metadata;\n };\n get = function (it) {\n return has(it, STATE) ? it[STATE] : {};\n };\n has$1 = function (it) {\n return has(it, STATE);\n };\n}\n\nvar internalState = {\n set: set,\n get: get,\n has: has$1,\n enforce: enforce,\n getterFor: getterFor\n};\n\nvar redefine = createCommonjsModule(function (module) {\nvar getInternalState = internalState.get;\nvar enforceInternalState = internalState.enforce;\nvar TEMPLATE = String(functionToString).split('toString');\n\nshared('inspectSource', function (it) {\n return functionToString.call(it);\n});\n\n(module.exports = function (O, key, value, options) {\n var unsafe = options ? !!options.unsafe : false;\n var simple = options ? !!options.enumerable : false;\n var noTargetGet = options ? !!options.noTargetGet : false;\n if (typeof value == 'function') {\n if (typeof key == 'string' && !has(value, 'name')) createNonEnumerableProperty(value, 'name', key);\n enforceInternalState(value).source = TEMPLATE.join(typeof key == 'string' ? key : '');\n }\n if (O === global_1) {\n if (simple) O[key] = value;\n else setGlobal(key, value);\n return;\n } else if (!unsafe) {\n delete O[key];\n } else if (!noTargetGet && O[key]) {\n simple = true;\n }\n if (simple) O[key] = value;\n else createNonEnumerableProperty(O, key, value);\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, 'toString', function toString() {\n return typeof this == 'function' && getInternalState(this).source || functionToString.call(this);\n});\n});\n\nvar path = global_1;\n\nvar aFunction = function (variable) {\n return typeof variable == 'function' ? variable : undefined;\n};\n\nvar getBuiltIn = function (namespace, method) {\n return arguments.length < 2 ? aFunction(path[namespace]) || aFunction(global_1[namespace])\n : path[namespace] && path[namespace][method] || global_1[namespace] && global_1[namespace][method];\n};\n\nvar ceil = Math.ceil;\nvar floor = Math.floor;\n\n// `ToInteger` abstract operation\n// https://tc39.github.io/ecma262/#sec-tointeger\nvar toInteger = function (argument) {\n return isNaN(argument = +argument) ? 0 : (argument > 0 ? floor : ceil)(argument);\n};\n\nvar min = Math.min;\n\n// `ToLength` abstract operation\n// https://tc39.github.io/ecma262/#sec-tolength\nvar toLength = function (argument) {\n return argument > 0 ? min(toInteger(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991\n};\n\nvar max = Math.max;\nvar min$1 = Math.min;\n\n// Helper for a popular repeating case of the spec:\n// Let integer be ? ToInteger(index).\n// If integer < 0, let result be max((length + integer), 0); else let result be min(length, length).\nvar toAbsoluteIndex = function (index, length) {\n var integer = toInteger(index);\n return integer < 0 ? max(integer + length, 0) : min$1(integer, length);\n};\n\n// `Array.prototype.{ indexOf, includes }` methods implementation\nvar createMethod = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIndexedObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) {\n if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n\nvar arrayIncludes = {\n // `Array.prototype.includes` method\n // https://tc39.github.io/ecma262/#sec-array.prototype.includes\n includes: createMethod(true),\n // `Array.prototype.indexOf` method\n // https://tc39.github.io/ecma262/#sec-array.prototype.indexof\n indexOf: createMethod(false)\n};\n\nvar indexOf = arrayIncludes.indexOf;\n\n\nvar objectKeysInternal = function (object, names) {\n var O = toIndexedObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) !has(hiddenKeys, key) && has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~indexOf(result, key) || result.push(key);\n }\n return result;\n};\n\n// IE8- don't enum bug keys\nvar enumBugKeys = [\n 'constructor',\n 'hasOwnProperty',\n 'isPrototypeOf',\n 'propertyIsEnumerable',\n 'toLocaleString',\n 'toString',\n 'valueOf'\n];\n\nvar hiddenKeys$1 = enumBugKeys.concat('length', 'prototype');\n\n// `Object.getOwnPropertyNames` method\n// https://tc39.github.io/ecma262/#sec-object.getownpropertynames\nvar f$3 = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return objectKeysInternal(O, hiddenKeys$1);\n};\n\nvar objectGetOwnPropertyNames = {\n\tf: f$3\n};\n\nvar f$4 = Object.getOwnPropertySymbols;\n\nvar objectGetOwnPropertySymbols = {\n\tf: f$4\n};\n\n// all object keys, includes non-enumerable and symbols\nvar ownKeys = getBuiltIn('Reflect', 'ownKeys') || function ownKeys(it) {\n var keys = objectGetOwnPropertyNames.f(anObject(it));\n var getOwnPropertySymbols = objectGetOwnPropertySymbols.f;\n return getOwnPropertySymbols ? keys.concat(getOwnPropertySymbols(it)) : keys;\n};\n\nvar copyConstructorProperties = function (target, source) {\n var keys = ownKeys(source);\n var defineProperty = objectDefineProperty.f;\n var getOwnPropertyDescriptor = objectGetOwnPropertyDescriptor.f;\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n if (!has(target, key)) defineProperty(target, key, getOwnPropertyDescriptor(source, key));\n }\n};\n\nvar replacement = /#|\\.prototype\\./;\n\nvar isForced = function (feature, detection) {\n var value = data[normalize(feature)];\n return value == POLYFILL ? true\n : value == NATIVE ? false\n : typeof detection == 'function' ? fails(detection)\n : !!detection;\n};\n\nvar normalize = isForced.normalize = function (string) {\n return String(string).replace(replacement, '.').toLowerCase();\n};\n\nvar data = isForced.data = {};\nvar NATIVE = isForced.NATIVE = 'N';\nvar POLYFILL = isForced.POLYFILL = 'P';\n\nvar isForced_1 = isForced;\n\nvar getOwnPropertyDescriptor$1 = objectGetOwnPropertyDescriptor.f;\n\n\n\n\n\n\n/*\n options.target - name of the target object\n options.global - target is the global object\n options.stat - export as static methods of target\n options.proto - export as prototype methods of target\n options.real - real prototype method for the `pure` version\n options.forced - export even if the native feature is available\n options.bind - bind methods to the target, required for the `pure` version\n options.wrap - wrap constructors to preventing global pollution, required for the `pure` version\n options.unsafe - use the simple assignment of property instead of delete + defineProperty\n options.sham - add a flag to not completely full polyfills\n options.enumerable - export as enumerable property\n options.noTargetGet - prevent calling a getter on target\n*/\nvar _export = function (options, source) {\n var TARGET = options.target;\n var GLOBAL = options.global;\n var STATIC = options.stat;\n var FORCED, target, key, targetProperty, sourceProperty, descriptor;\n if (GLOBAL) {\n target = global_1;\n } else if (STATIC) {\n target = global_1[TARGET] || setGlobal(TARGET, {});\n } else {\n target = (global_1[TARGET] || {}).prototype;\n }\n if (target) for (key in source) {\n sourceProperty = source[key];\n if (options.noTargetGet) {\n descriptor = getOwnPropertyDescriptor$1(target, key);\n targetProperty = descriptor && descriptor.value;\n } else targetProperty = target[key];\n FORCED = isForced_1(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced);\n // contained in target\n if (!FORCED && targetProperty !== undefined) {\n if (typeof sourceProperty === typeof targetProperty) continue;\n copyConstructorProperties(sourceProperty, targetProperty);\n }\n // add a flag to not completely full polyfills\n if (options.sham || (targetProperty && targetProperty.sham)) {\n createNonEnumerableProperty(sourceProperty, 'sham', true);\n }\n // extend global\n redefine(target, key, sourceProperty, options);\n }\n};\n\n// `IsArray` abstract operation\n// https://tc39.github.io/ecma262/#sec-isarray\nvar isArray = Array.isArray || function isArray(arg) {\n return classofRaw(arg) == 'Array';\n};\n\nvar createProperty = function (object, key, value) {\n var propertyKey = toPrimitive(key);\n if (propertyKey in object) objectDefineProperty.f(object, propertyKey, createPropertyDescriptor(0, value));\n else object[propertyKey] = value;\n};\n\nvar nativeSymbol = !!Object.getOwnPropertySymbols && !fails(function () {\n // Chrome 38 Symbol has incorrect toString conversion\n // eslint-disable-next-line no-undef\n return !String(Symbol());\n});\n\nvar Symbol$1 = global_1.Symbol;\nvar store$2 = shared('wks');\n\nvar wellKnownSymbol = function (name) {\n return store$2[name] || (store$2[name] = nativeSymbol && Symbol$1[name]\n || (nativeSymbol ? Symbol$1 : uid)('Symbol.' + name));\n};\n\nvar userAgent = getBuiltIn('navigator', 'userAgent') || '';\n\nvar process = global_1.process;\nvar versions = process && process.versions;\nvar v8 = versions && versions.v8;\nvar match, version;\n\nif (v8) {\n match = v8.split('.');\n version = match[0] + match[1];\n} else if (userAgent) {\n match = userAgent.match(/Edge\\/(\\d+)/);\n if (!match || match[1] >= 74) {\n match = userAgent.match(/Chrome\\/(\\d+)/);\n if (match) version = match[1];\n }\n}\n\nvar v8Version = version && +version;\n\nvar SPECIES = wellKnownSymbol('species');\n\nvar arrayMethodHasSpeciesSupport = function (METHOD_NAME) {\n // We can't use this feature detection in V8 since it causes\n // deoptimization and serious performance degradation\n // https://github.com/zloirock/core-js/issues/677\n return v8Version >= 51 || !fails(function () {\n var array = [];\n var constructor = array.constructor = {};\n constructor[SPECIES] = function () {\n return { foo: 1 };\n };\n return array[METHOD_NAME](Boolean).foo !== 1;\n });\n};\n\nvar SPECIES$1 = wellKnownSymbol('species');\nvar nativeSlice = [].slice;\nvar max$1 = Math.max;\n\n// `Array.prototype.slice` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.slice\n// fallback for not array-like ES3 strings and DOM objects\n_export({ target: 'Array', proto: true, forced: !arrayMethodHasSpeciesSupport('slice') }, {\n slice: function slice(start, end) {\n var O = toIndexedObject(this);\n var length = toLength(O.length);\n var k = toAbsoluteIndex(start, length);\n var fin = toAbsoluteIndex(end === undefined ? length : end, length);\n // inline `ArraySpeciesCreate` for usage native `Array#slice` where it's possible\n var Constructor, result, n;\n if (isArray(O)) {\n Constructor = O.constructor;\n // cross-realm fallback\n if (typeof Constructor == 'function' && (Constructor === Array || isArray(Constructor.prototype))) {\n Constructor = undefined;\n } else if (isObject(Constructor)) {\n Constructor = Constructor[SPECIES$1];\n if (Constructor === null) Constructor = undefined;\n }\n if (Constructor === Array || Constructor === undefined) {\n return nativeSlice.call(O, k, fin);\n }\n }\n result = new (Constructor === undefined ? Array : Constructor)(max$1(fin - k, 0));\n for (n = 0; k < fin; k++, n++) if (k in O) createProperty(result, n, O[k]);\n result.length = n;\n return result;\n }\n});\n\nvar defineProperty = objectDefineProperty.f;\n\nvar FunctionPrototype = Function.prototype;\nvar FunctionPrototypeToString = FunctionPrototype.toString;\nvar nameRE = /^\\s*function ([^ (]*)/;\nvar NAME = 'name';\n\n// Function instances `.name` property\n// https://tc39.github.io/ecma262/#sec-function-instances-name\nif (descriptors && !(NAME in FunctionPrototype)) {\n defineProperty(FunctionPrototype, NAME, {\n configurable: true,\n get: function () {\n try {\n return FunctionPrototypeToString.call(this).match(nameRE)[1];\n } catch (error) {\n return '';\n }\n }\n });\n}\n\nvar nativeGetOwnPropertyNames = objectGetOwnPropertyNames.f;\n\nvar toString$1 = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return nativeGetOwnPropertyNames(it);\n } catch (error) {\n return windowNames.slice();\n }\n};\n\n// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar f$5 = function getOwnPropertyNames(it) {\n return windowNames && toString$1.call(it) == '[object Window]'\n ? getWindowNames(it)\n : nativeGetOwnPropertyNames(toIndexedObject(it));\n};\n\nvar objectGetOwnPropertyNamesExternal = {\n\tf: f$5\n};\n\nvar nativeGetOwnPropertyNames$1 = objectGetOwnPropertyNamesExternal.f;\n\nvar FAILS_ON_PRIMITIVES = fails(function () { return !Object.getOwnPropertyNames(1); });\n\n// `Object.getOwnPropertyNames` method\n// https://tc39.github.io/ecma262/#sec-object.getownpropertynames\n_export({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES }, {\n getOwnPropertyNames: nativeGetOwnPropertyNames$1\n});\n\nfunction _typeof2(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof2 = function _typeof2(obj) { return typeof obj; }; } else { _typeof2 = function _typeof2(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof2(obj); }\n\nfunction _typeof(obj) {\n if (typeof Symbol === \"function\" && _typeof2(Symbol.iterator) === \"symbol\") {\n _typeof = function _typeof(obj) {\n return _typeof2(obj);\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : _typeof2(obj);\n };\n }\n\n return _typeof(obj);\n}\n\n// `ToObject` abstract operation\n// https://tc39.github.io/ecma262/#sec-toobject\nvar toObject = function (argument) {\n return Object(requireObjectCoercible(argument));\n};\n\n// `Object.keys` method\n// https://tc39.github.io/ecma262/#sec-object.keys\nvar objectKeys = Object.keys || function keys(O) {\n return objectKeysInternal(O, enumBugKeys);\n};\n\n// `Object.defineProperties` method\n// https://tc39.github.io/ecma262/#sec-object.defineproperties\nvar objectDefineProperties = descriptors ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = objectKeys(Properties);\n var length = keys.length;\n var index = 0;\n var key;\n while (length > index) objectDefineProperty.f(O, key = keys[index++], Properties[key]);\n return O;\n};\n\nvar html = getBuiltIn('document', 'documentElement');\n\nvar IE_PROTO = sharedKey('IE_PROTO');\n\nvar PROTOTYPE = 'prototype';\nvar Empty = function () { /* empty */ };\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = documentCreateElement('iframe');\n var length = enumBugKeys.length;\n var lt = '<';\n var script = 'script';\n var gt = '>';\n var js = 'java' + script + ':';\n var iframeDocument;\n iframe.style.display = 'none';\n html.appendChild(iframe);\n iframe.src = String(js);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(lt + script + gt + 'document.F=Object' + lt + '/' + script + gt);\n iframeDocument.close();\n createDict = iframeDocument.F;\n while (length--) delete createDict[PROTOTYPE][enumBugKeys[length]];\n return createDict();\n};\n\n// `Object.create` method\n// https://tc39.github.io/ecma262/#sec-object.create\nvar objectCreate = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n Empty[PROTOTYPE] = anObject(O);\n result = new Empty();\n Empty[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = createDict();\n return Properties === undefined ? result : objectDefineProperties(result, Properties);\n};\n\nhiddenKeys[IE_PROTO] = true;\n\nvar f$6 = wellKnownSymbol;\n\nvar wrappedWellKnownSymbol = {\n\tf: f$6\n};\n\nvar defineProperty$1 = objectDefineProperty.f;\n\nvar defineWellKnownSymbol = function (NAME) {\n var Symbol = path.Symbol || (path.Symbol = {});\n if (!has(Symbol, NAME)) defineProperty$1(Symbol, NAME, {\n value: wrappedWellKnownSymbol.f(NAME)\n });\n};\n\nvar defineProperty$2 = objectDefineProperty.f;\n\n\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\n\nvar setToStringTag = function (it, TAG, STATIC) {\n if (it && !has(it = STATIC ? it : it.prototype, TO_STRING_TAG)) {\n defineProperty$2(it, TO_STRING_TAG, { configurable: true, value: TAG });\n }\n};\n\nvar aFunction$1 = function (it) {\n if (typeof it != 'function') {\n throw TypeError(String(it) + ' is not a function');\n } return it;\n};\n\n// optional / simple context binding\nvar bindContext = function (fn, that, length) {\n aFunction$1(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 0: return function () {\n return fn.call(that);\n };\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n\nvar SPECIES$2 = wellKnownSymbol('species');\n\n// `ArraySpeciesCreate` abstract operation\n// https://tc39.github.io/ecma262/#sec-arrayspeciescreate\nvar arraySpeciesCreate = function (originalArray, length) {\n var C;\n if (isArray(originalArray)) {\n C = originalArray.constructor;\n // cross-realm fallback\n if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n else if (isObject(C)) {\n C = C[SPECIES$2];\n if (C === null) C = undefined;\n }\n } return new (C === undefined ? Array : C)(length === 0 ? 0 : length);\n};\n\nvar push = [].push;\n\n// `Array.prototype.{ forEach, map, filter, some, every, find, findIndex }` methods implementation\nvar createMethod$1 = function (TYPE) {\n var IS_MAP = TYPE == 1;\n var IS_FILTER = TYPE == 2;\n var IS_SOME = TYPE == 3;\n var IS_EVERY = TYPE == 4;\n var IS_FIND_INDEX = TYPE == 6;\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n return function ($this, callbackfn, that, specificCreate) {\n var O = toObject($this);\n var self = indexedObject(O);\n var boundFunction = bindContext(callbackfn, that, 3);\n var length = toLength(self.length);\n var index = 0;\n var create = specificCreate || arraySpeciesCreate;\n var target = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;\n var value, result;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n value = self[index];\n result = boundFunction(value, index, O);\n if (TYPE) {\n if (IS_MAP) target[index] = result; // map\n else if (result) switch (TYPE) {\n case 3: return true; // some\n case 5: return value; // find\n case 6: return index; // findIndex\n case 2: push.call(target, value); // filter\n } else if (IS_EVERY) return false; // every\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : target;\n };\n};\n\nvar arrayIteration = {\n // `Array.prototype.forEach` method\n // https://tc39.github.io/ecma262/#sec-array.prototype.foreach\n forEach: createMethod$1(0),\n // `Array.prototype.map` method\n // https://tc39.github.io/ecma262/#sec-array.prototype.map\n map: createMethod$1(1),\n // `Array.prototype.filter` method\n // https://tc39.github.io/ecma262/#sec-array.prototype.filter\n filter: createMethod$1(2),\n // `Array.prototype.some` method\n // https://tc39.github.io/ecma262/#sec-array.prototype.some\n some: createMethod$1(3),\n // `Array.prototype.every` method\n // https://tc39.github.io/ecma262/#sec-array.prototype.every\n every: createMethod$1(4),\n // `Array.prototype.find` method\n // https://tc39.github.io/ecma262/#sec-array.prototype.find\n find: createMethod$1(5),\n // `Array.prototype.findIndex` method\n // https://tc39.github.io/ecma262/#sec-array.prototype.findIndex\n findIndex: createMethod$1(6)\n};\n\nvar $forEach = arrayIteration.forEach;\n\nvar HIDDEN = sharedKey('hidden');\nvar SYMBOL = 'Symbol';\nvar PROTOTYPE$1 = 'prototype';\nvar TO_PRIMITIVE = wellKnownSymbol('toPrimitive');\nvar setInternalState = internalState.set;\nvar getInternalState = internalState.getterFor(SYMBOL);\nvar ObjectPrototype = Object[PROTOTYPE$1];\nvar $Symbol = global_1.Symbol;\nvar JSON$1 = global_1.JSON;\nvar nativeJSONStringify = JSON$1 && JSON$1.stringify;\nvar nativeGetOwnPropertyDescriptor$1 = objectGetOwnPropertyDescriptor.f;\nvar nativeDefineProperty$1 = objectDefineProperty.f;\nvar nativeGetOwnPropertyNames$2 = objectGetOwnPropertyNamesExternal.f;\nvar nativePropertyIsEnumerable$1 = objectPropertyIsEnumerable.f;\nvar AllSymbols = shared('symbols');\nvar ObjectPrototypeSymbols = shared('op-symbols');\nvar StringToSymbolRegistry = shared('string-to-symbol-registry');\nvar SymbolToStringRegistry = shared('symbol-to-string-registry');\nvar WellKnownSymbolsStore = shared('wks');\nvar QObject = global_1.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar USE_SETTER = !QObject || !QObject[PROTOTYPE$1] || !QObject[PROTOTYPE$1].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDescriptor = descriptors && fails(function () {\n return objectCreate(nativeDefineProperty$1({}, 'a', {\n get: function () { return nativeDefineProperty$1(this, 'a', { value: 7 }).a; }\n })).a != 7;\n}) ? function (O, P, Attributes) {\n var ObjectPrototypeDescriptor = nativeGetOwnPropertyDescriptor$1(ObjectPrototype, P);\n if (ObjectPrototypeDescriptor) delete ObjectPrototype[P];\n nativeDefineProperty$1(O, P, Attributes);\n if (ObjectPrototypeDescriptor && O !== ObjectPrototype) {\n nativeDefineProperty$1(ObjectPrototype, P, ObjectPrototypeDescriptor);\n }\n} : nativeDefineProperty$1;\n\nvar wrap = function (tag, description) {\n var symbol = AllSymbols[tag] = objectCreate($Symbol[PROTOTYPE$1]);\n setInternalState(symbol, {\n type: SYMBOL,\n tag: tag,\n description: description\n });\n if (!descriptors) symbol.description = description;\n return symbol;\n};\n\nvar isSymbol = nativeSymbol && typeof $Symbol.iterator == 'symbol' ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n return Object(it) instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(O, P, Attributes) {\n if (O === ObjectPrototype) $defineProperty(ObjectPrototypeSymbols, P, Attributes);\n anObject(O);\n var key = toPrimitive(P, true);\n anObject(Attributes);\n if (has(AllSymbols, key)) {\n if (!Attributes.enumerable) {\n if (!has(O, HIDDEN)) nativeDefineProperty$1(O, HIDDEN, createPropertyDescriptor(1, {}));\n O[HIDDEN][key] = true;\n } else {\n if (has(O, HIDDEN) && O[HIDDEN][key]) O[HIDDEN][key] = false;\n Attributes = objectCreate(Attributes, { enumerable: createPropertyDescriptor(0, false) });\n } return setSymbolDescriptor(O, key, Attributes);\n } return nativeDefineProperty$1(O, key, Attributes);\n};\n\nvar $defineProperties = function defineProperties(O, Properties) {\n anObject(O);\n var properties = toIndexedObject(Properties);\n var keys = objectKeys(properties).concat($getOwnPropertySymbols(properties));\n $forEach(keys, function (key) {\n if (!descriptors || $propertyIsEnumerable.call(properties, key)) $defineProperty(O, key, properties[key]);\n });\n return O;\n};\n\nvar $create = function create(O, Properties) {\n return Properties === undefined ? objectCreate(O) : $defineProperties(objectCreate(O), Properties);\n};\n\nvar $propertyIsEnumerable = function propertyIsEnumerable(V) {\n var P = toPrimitive(V, true);\n var enumerable = nativePropertyIsEnumerable$1.call(this, P);\n if (this === ObjectPrototype && has(AllSymbols, P) && !has(ObjectPrototypeSymbols, P)) return false;\n return enumerable || !has(this, P) || !has(AllSymbols, P) || has(this, HIDDEN) && this[HIDDEN][P] ? enumerable : true;\n};\n\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(O, P) {\n var it = toIndexedObject(O);\n var key = toPrimitive(P, true);\n if (it === ObjectPrototype && has(AllSymbols, key) && !has(ObjectPrototypeSymbols, key)) return;\n var descriptor = nativeGetOwnPropertyDescriptor$1(it, key);\n if (descriptor && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) {\n descriptor.enumerable = true;\n }\n return descriptor;\n};\n\nvar $getOwnPropertyNames = function getOwnPropertyNames(O) {\n var names = nativeGetOwnPropertyNames$2(toIndexedObject(O));\n var result = [];\n $forEach(names, function (key) {\n if (!has(AllSymbols, key) && !has(hiddenKeys, key)) result.push(key);\n });\n return result;\n};\n\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(O) {\n var IS_OBJECT_PROTOTYPE = O === ObjectPrototype;\n var names = nativeGetOwnPropertyNames$2(IS_OBJECT_PROTOTYPE ? ObjectPrototypeSymbols : toIndexedObject(O));\n var result = [];\n $forEach(names, function (key) {\n if (has(AllSymbols, key) && (!IS_OBJECT_PROTOTYPE || has(ObjectPrototype, key))) {\n result.push(AllSymbols[key]);\n }\n });\n return result;\n};\n\n// `Symbol` constructor\n// https://tc39.github.io/ecma262/#sec-symbol-constructor\nif (!nativeSymbol) {\n $Symbol = function Symbol() {\n if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor');\n var description = !arguments.length || arguments[0] === undefined ? undefined : String(arguments[0]);\n var tag = uid(description);\n var setter = function (value) {\n if (this === ObjectPrototype) setter.call(ObjectPrototypeSymbols, value);\n if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n setSymbolDescriptor(this, tag, createPropertyDescriptor(1, value));\n };\n if (descriptors && USE_SETTER) setSymbolDescriptor(ObjectPrototype, tag, { configurable: true, set: setter });\n return wrap(tag, description);\n };\n\n redefine($Symbol[PROTOTYPE$1], 'toString', function toString() {\n return getInternalState(this).tag;\n });\n\n objectPropertyIsEnumerable.f = $propertyIsEnumerable;\n objectDefineProperty.f = $defineProperty;\n objectGetOwnPropertyDescriptor.f = $getOwnPropertyDescriptor;\n objectGetOwnPropertyNames.f = objectGetOwnPropertyNamesExternal.f = $getOwnPropertyNames;\n objectGetOwnPropertySymbols.f = $getOwnPropertySymbols;\n\n if (descriptors) {\n // https://github.com/tc39/proposal-Symbol-description\n nativeDefineProperty$1($Symbol[PROTOTYPE$1], 'description', {\n configurable: true,\n get: function description() {\n return getInternalState(this).description;\n }\n });\n {\n redefine(ObjectPrototype, 'propertyIsEnumerable', $propertyIsEnumerable, { unsafe: true });\n }\n }\n\n wrappedWellKnownSymbol.f = function (name) {\n return wrap(wellKnownSymbol(name), name);\n };\n}\n\n_export({ global: true, wrap: true, forced: !nativeSymbol, sham: !nativeSymbol }, {\n Symbol: $Symbol\n});\n\n$forEach(objectKeys(WellKnownSymbolsStore), function (name) {\n defineWellKnownSymbol(name);\n});\n\n_export({ target: SYMBOL, stat: true, forced: !nativeSymbol }, {\n // `Symbol.for` method\n // https://tc39.github.io/ecma262/#sec-symbol.for\n 'for': function (key) {\n var string = String(key);\n if (has(StringToSymbolRegistry, string)) return StringToSymbolRegistry[string];\n var symbol = $Symbol(string);\n StringToSymbolRegistry[string] = symbol;\n SymbolToStringRegistry[symbol] = string;\n return symbol;\n },\n // `Symbol.keyFor` method\n // https://tc39.github.io/ecma262/#sec-symbol.keyfor\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol');\n if (has(SymbolToStringRegistry, sym)) return SymbolToStringRegistry[sym];\n },\n useSetter: function () { USE_SETTER = true; },\n useSimple: function () { USE_SETTER = false; }\n});\n\n_export({ target: 'Object', stat: true, forced: !nativeSymbol, sham: !descriptors }, {\n // `Object.create` method\n // https://tc39.github.io/ecma262/#sec-object.create\n create: $create,\n // `Object.defineProperty` method\n // https://tc39.github.io/ecma262/#sec-object.defineproperty\n defineProperty: $defineProperty,\n // `Object.defineProperties` method\n // https://tc39.github.io/ecma262/#sec-object.defineproperties\n defineProperties: $defineProperties,\n // `Object.getOwnPropertyDescriptor` method\n // https://tc39.github.io/ecma262/#sec-object.getownpropertydescriptors\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor\n});\n\n_export({ target: 'Object', stat: true, forced: !nativeSymbol }, {\n // `Object.getOwnPropertyNames` method\n // https://tc39.github.io/ecma262/#sec-object.getownpropertynames\n getOwnPropertyNames: $getOwnPropertyNames,\n // `Object.getOwnPropertySymbols` method\n // https://tc39.github.io/ecma262/#sec-object.getownpropertysymbols\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// Chrome 38 and 39 `Object.getOwnPropertySymbols` fails on primitives\n// https://bugs.chromium.org/p/v8/issues/detail?id=3443\n_export({ target: 'Object', stat: true, forced: fails(function () { objectGetOwnPropertySymbols.f(1); }) }, {\n getOwnPropertySymbols: function getOwnPropertySymbols(it) {\n return objectGetOwnPropertySymbols.f(toObject(it));\n }\n});\n\n// `JSON.stringify` method behavior with symbols\n// https://tc39.github.io/ecma262/#sec-json.stringify\nJSON$1 && _export({ target: 'JSON', stat: true, forced: !nativeSymbol || fails(function () {\n var symbol = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n return nativeJSONStringify([symbol]) != '[null]'\n // WebKit converts symbol values to JSON as null\n || nativeJSONStringify({ a: symbol }) != '{}'\n // V8 throws on boxed symbols\n || nativeJSONStringify(Object(symbol)) != '{}';\n}) }, {\n stringify: function stringify(it) {\n var args = [it];\n var index = 1;\n var replacer, $replacer;\n while (arguments.length > index) args.push(arguments[index++]);\n $replacer = replacer = args[1];\n if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n if (!isArray(replacer)) replacer = function (key, value) {\n if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n if (!isSymbol(value)) return value;\n };\n args[1] = replacer;\n return nativeJSONStringify.apply(JSON$1, args);\n }\n});\n\n// `Symbol.prototype[@@toPrimitive]` method\n// https://tc39.github.io/ecma262/#sec-symbol.prototype-@@toprimitive\nif (!$Symbol[PROTOTYPE$1][TO_PRIMITIVE]) {\n createNonEnumerableProperty($Symbol[PROTOTYPE$1], TO_PRIMITIVE, $Symbol[PROTOTYPE$1].valueOf);\n}\n// `Symbol.prototype[@@toStringTag]` property\n// https://tc39.github.io/ecma262/#sec-symbol.prototype-@@tostringtag\nsetToStringTag($Symbol, SYMBOL);\n\nhiddenKeys[HIDDEN] = true;\n\nvar defineProperty$3 = objectDefineProperty.f;\n\n\nvar NativeSymbol = global_1.Symbol;\n\nif (descriptors && typeof NativeSymbol == 'function' && (!('description' in NativeSymbol.prototype) ||\n // Safari 12 bug\n NativeSymbol().description !== undefined\n)) {\n var EmptyStringDescriptionStore = {};\n // wrap Symbol constructor for correct work with undefined description\n var SymbolWrapper = function Symbol() {\n var description = arguments.length < 1 || arguments[0] === undefined ? undefined : String(arguments[0]);\n var result = this instanceof SymbolWrapper\n ? new NativeSymbol(description)\n // in Edge 13, String(Symbol(undefined)) === 'Symbol(undefined)'\n : description === undefined ? NativeSymbol() : NativeSymbol(description);\n if (description === '') EmptyStringDescriptionStore[result] = true;\n return result;\n };\n copyConstructorProperties(SymbolWrapper, NativeSymbol);\n var symbolPrototype = SymbolWrapper.prototype = NativeSymbol.prototype;\n symbolPrototype.constructor = SymbolWrapper;\n\n var symbolToString = symbolPrototype.toString;\n var native = String(NativeSymbol('test')) == 'Symbol(test)';\n var regexp = /^Symbol\\((.*)\\)[^)]+$/;\n defineProperty$3(symbolPrototype, 'description', {\n configurable: true,\n get: function description() {\n var symbol = isObject(this) ? this.valueOf() : this;\n var string = symbolToString.call(symbol);\n if (has(EmptyStringDescriptionStore, symbol)) return '';\n var desc = native ? string.slice(7, -1) : string.replace(regexp, '$1');\n return desc === '' ? undefined : desc;\n }\n });\n\n _export({ global: true, forced: true }, {\n Symbol: SymbolWrapper\n });\n}\n\n// `Symbol.iterator` well-known symbol\n// https://tc39.github.io/ecma262/#sec-symbol.iterator\ndefineWellKnownSymbol('iterator');\n\nvar UNSCOPABLES = wellKnownSymbol('unscopables');\nvar ArrayPrototype = Array.prototype;\n\n// Array.prototype[@@unscopables]\n// https://tc39.github.io/ecma262/#sec-array.prototype-@@unscopables\nif (ArrayPrototype[UNSCOPABLES] == undefined) {\n createNonEnumerableProperty(ArrayPrototype, UNSCOPABLES, objectCreate(null));\n}\n\n// add a key to Array.prototype[@@unscopables]\nvar addToUnscopables = function (key) {\n ArrayPrototype[UNSCOPABLES][key] = true;\n};\n\nvar iterators = {};\n\nvar correctPrototypeGetter = !fails(function () {\n function F() { /* empty */ }\n F.prototype.constructor = null;\n return Object.getPrototypeOf(new F()) !== F.prototype;\n});\n\nvar IE_PROTO$1 = sharedKey('IE_PROTO');\nvar ObjectPrototype$1 = Object.prototype;\n\n// `Object.getPrototypeOf` method\n// https://tc39.github.io/ecma262/#sec-object.getprototypeof\nvar objectGetPrototypeOf = correctPrototypeGetter ? Object.getPrototypeOf : function (O) {\n O = toObject(O);\n if (has(O, IE_PROTO$1)) return O[IE_PROTO$1];\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectPrototype$1 : null;\n};\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar BUGGY_SAFARI_ITERATORS = false;\n\nvar returnThis = function () { return this; };\n\n// `%IteratorPrototype%` object\n// https://tc39.github.io/ecma262/#sec-%iteratorprototype%-object\nvar IteratorPrototype, PrototypeOfArrayIteratorPrototype, arrayIterator;\n\nif ([].keys) {\n arrayIterator = [].keys();\n // Safari 8 has buggy iterators w/o `next`\n if (!('next' in arrayIterator)) BUGGY_SAFARI_ITERATORS = true;\n else {\n PrototypeOfArrayIteratorPrototype = objectGetPrototypeOf(objectGetPrototypeOf(arrayIterator));\n if (PrototypeOfArrayIteratorPrototype !== Object.prototype) IteratorPrototype = PrototypeOfArrayIteratorPrototype;\n }\n}\n\nif (IteratorPrototype == undefined) IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nif ( !has(IteratorPrototype, ITERATOR)) {\n createNonEnumerableProperty(IteratorPrototype, ITERATOR, returnThis);\n}\n\nvar iteratorsCore = {\n IteratorPrototype: IteratorPrototype,\n BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS\n};\n\nvar IteratorPrototype$1 = iteratorsCore.IteratorPrototype;\n\n\n\n\n\nvar returnThis$1 = function () { return this; };\n\nvar createIteratorConstructor = function (IteratorConstructor, NAME, next) {\n var TO_STRING_TAG = NAME + ' Iterator';\n IteratorConstructor.prototype = objectCreate(IteratorPrototype$1, { next: createPropertyDescriptor(1, next) });\n setToStringTag(IteratorConstructor, TO_STRING_TAG, false);\n iterators[TO_STRING_TAG] = returnThis$1;\n return IteratorConstructor;\n};\n\nvar aPossiblePrototype = function (it) {\n if (!isObject(it) && it !== null) {\n throw TypeError(\"Can't set \" + String(it) + ' as a prototype');\n } return it;\n};\n\n// `Object.setPrototypeOf` method\n// https://tc39.github.io/ecma262/#sec-object.setprototypeof\n// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar objectSetPrototypeOf = Object.setPrototypeOf || ('__proto__' in {} ? function () {\n var CORRECT_SETTER = false;\n var test = {};\n var setter;\n try {\n setter = Object.getOwnPropertyDescriptor(Object.prototype, '__proto__').set;\n setter.call(test, []);\n CORRECT_SETTER = test instanceof Array;\n } catch (error) { /* empty */ }\n return function setPrototypeOf(O, proto) {\n anObject(O);\n aPossiblePrototype(proto);\n if (CORRECT_SETTER) setter.call(O, proto);\n else O.__proto__ = proto;\n return O;\n };\n}() : undefined);\n\nvar IteratorPrototype$2 = iteratorsCore.IteratorPrototype;\nvar BUGGY_SAFARI_ITERATORS$1 = iteratorsCore.BUGGY_SAFARI_ITERATORS;\nvar ITERATOR$1 = wellKnownSymbol('iterator');\nvar KEYS = 'keys';\nvar VALUES = 'values';\nvar ENTRIES = 'entries';\n\nvar returnThis$2 = function () { return this; };\n\nvar defineIterator = function (Iterable, NAME, IteratorConstructor, next, DEFAULT, IS_SET, FORCED) {\n createIteratorConstructor(IteratorConstructor, NAME, next);\n\n var getIterationMethod = function (KIND) {\n if (KIND === DEFAULT && defaultIterator) return defaultIterator;\n if (!BUGGY_SAFARI_ITERATORS$1 && KIND in IterablePrototype) return IterablePrototype[KIND];\n switch (KIND) {\n case KEYS: return function keys() { return new IteratorConstructor(this, KIND); };\n case VALUES: return function values() { return new IteratorConstructor(this, KIND); };\n case ENTRIES: return function entries() { return new IteratorConstructor(this, KIND); };\n } return function () { return new IteratorConstructor(this); };\n };\n\n var TO_STRING_TAG = NAME + ' Iterator';\n var INCORRECT_VALUES_NAME = false;\n var IterablePrototype = Iterable.prototype;\n var nativeIterator = IterablePrototype[ITERATOR$1]\n || IterablePrototype['@@iterator']\n || DEFAULT && IterablePrototype[DEFAULT];\n var defaultIterator = !BUGGY_SAFARI_ITERATORS$1 && nativeIterator || getIterationMethod(DEFAULT);\n var anyNativeIterator = NAME == 'Array' ? IterablePrototype.entries || nativeIterator : nativeIterator;\n var CurrentIteratorPrototype, methods, KEY;\n\n // fix native\n if (anyNativeIterator) {\n CurrentIteratorPrototype = objectGetPrototypeOf(anyNativeIterator.call(new Iterable()));\n if (IteratorPrototype$2 !== Object.prototype && CurrentIteratorPrototype.next) {\n if ( objectGetPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype$2) {\n if (objectSetPrototypeOf) {\n objectSetPrototypeOf(CurrentIteratorPrototype, IteratorPrototype$2);\n } else if (typeof CurrentIteratorPrototype[ITERATOR$1] != 'function') {\n createNonEnumerableProperty(CurrentIteratorPrototype, ITERATOR$1, returnThis$2);\n }\n }\n // Set @@toStringTag to native iterators\n setToStringTag(CurrentIteratorPrototype, TO_STRING_TAG, true);\n }\n }\n\n // fix Array#{values, @@iterator}.name in V8 / FF\n if (DEFAULT == VALUES && nativeIterator && nativeIterator.name !== VALUES) {\n INCORRECT_VALUES_NAME = true;\n defaultIterator = function values() { return nativeIterator.call(this); };\n }\n\n // define iterator\n if ( IterablePrototype[ITERATOR$1] !== defaultIterator) {\n createNonEnumerableProperty(IterablePrototype, ITERATOR$1, defaultIterator);\n }\n iterators[NAME] = defaultIterator;\n\n // export additional methods\n if (DEFAULT) {\n methods = {\n values: getIterationMethod(VALUES),\n keys: IS_SET ? defaultIterator : getIterationMethod(KEYS),\n entries: getIterationMethod(ENTRIES)\n };\n if (FORCED) for (KEY in methods) {\n if (BUGGY_SAFARI_ITERATORS$1 || INCORRECT_VALUES_NAME || !(KEY in IterablePrototype)) {\n redefine(IterablePrototype, KEY, methods[KEY]);\n }\n } else _export({ target: NAME, proto: true, forced: BUGGY_SAFARI_ITERATORS$1 || INCORRECT_VALUES_NAME }, methods);\n }\n\n return methods;\n};\n\nvar ARRAY_ITERATOR = 'Array Iterator';\nvar setInternalState$1 = internalState.set;\nvar getInternalState$1 = internalState.getterFor(ARRAY_ITERATOR);\n\n// `Array.prototype.entries` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.entries\n// `Array.prototype.keys` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.keys\n// `Array.prototype.values` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.values\n// `Array.prototype[@@iterator]` method\n// https://tc39.github.io/ecma262/#sec-array.prototype-@@iterator\n// `CreateArrayIterator` internal method\n// https://tc39.github.io/ecma262/#sec-createarrayiterator\nvar es_array_iterator = defineIterator(Array, 'Array', function (iterated, kind) {\n setInternalState$1(this, {\n type: ARRAY_ITERATOR,\n target: toIndexedObject(iterated), // target\n index: 0, // next index\n kind: kind // kind\n });\n// `%ArrayIteratorPrototype%.next` method\n// https://tc39.github.io/ecma262/#sec-%arrayiteratorprototype%.next\n}, function () {\n var state = getInternalState$1(this);\n var target = state.target;\n var kind = state.kind;\n var index = state.index++;\n if (!target || index >= target.length) {\n state.target = undefined;\n return { value: undefined, done: true };\n }\n if (kind == 'keys') return { value: index, done: false };\n if (kind == 'values') return { value: target[index], done: false };\n return { value: [index, target[index]], done: false };\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values%\n// https://tc39.github.io/ecma262/#sec-createunmappedargumentsobject\n// https://tc39.github.io/ecma262/#sec-createmappedargumentsobject\niterators.Arguments = iterators.Array;\n\n// https://tc39.github.io/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n\nvar nativeAssign = Object.assign;\n\n// `Object.assign` method\n// https://tc39.github.io/ecma262/#sec-object.assign\n// should work with symbols and should have deterministic property order (V8 bug)\nvar objectAssign = !nativeAssign || fails(function () {\n var A = {};\n var B = {};\n // eslint-disable-next-line no-undef\n var symbol = Symbol();\n var alphabet = 'abcdefghijklmnopqrst';\n A[symbol] = 7;\n alphabet.split('').forEach(function (chr) { B[chr] = chr; });\n return nativeAssign({}, A)[symbol] != 7 || objectKeys(nativeAssign({}, B)).join('') != alphabet;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n var T = toObject(target);\n var argumentsLength = arguments.length;\n var index = 1;\n var getOwnPropertySymbols = objectGetOwnPropertySymbols.f;\n var propertyIsEnumerable = objectPropertyIsEnumerable.f;\n while (argumentsLength > index) {\n var S = indexedObject(arguments[index++]);\n var keys = getOwnPropertySymbols ? objectKeys(S).concat(getOwnPropertySymbols(S)) : objectKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) {\n key = keys[j++];\n if (!descriptors || propertyIsEnumerable.call(S, key)) T[key] = S[key];\n }\n } return T;\n} : nativeAssign;\n\n// `Object.assign` method\n// https://tc39.github.io/ecma262/#sec-object.assign\n_export({ target: 'Object', stat: true, forced: Object.assign !== objectAssign }, {\n assign: objectAssign\n});\n\nvar TO_STRING_TAG$1 = wellKnownSymbol('toStringTag');\n// ES3 wrong here\nvar CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (error) { /* empty */ }\n};\n\n// getting tag from ES6+ `Object.prototype.toString`\nvar classof = function (it) {\n var O, tag, result;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (tag = tryGet(O = Object(it), TO_STRING_TAG$1)) == 'string' ? tag\n // builtinTag case\n : CORRECT_ARGUMENTS ? classofRaw(O)\n // ES3 arguments fallback\n : (result = classofRaw(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : result;\n};\n\nvar TO_STRING_TAG$2 = wellKnownSymbol('toStringTag');\nvar test = {};\n\ntest[TO_STRING_TAG$2] = 'z';\n\n// `Object.prototype.toString` method implementation\n// https://tc39.github.io/ecma262/#sec-object.prototype.tostring\nvar objectToString = String(test) !== '[object z]' ? function toString() {\n return '[object ' + classof(this) + ']';\n} : test.toString;\n\nvar ObjectPrototype$2 = Object.prototype;\n\n// `Object.prototype.toString` method\n// https://tc39.github.io/ecma262/#sec-object.prototype.tostring\nif (objectToString !== ObjectPrototype$2.toString) {\n redefine(ObjectPrototype$2, 'toString', objectToString, { unsafe: true });\n}\n\nvar freezing = !fails(function () {\n return Object.isExtensible(Object.preventExtensions({}));\n});\n\nvar internalMetadata = createCommonjsModule(function (module) {\nvar defineProperty = objectDefineProperty.f;\n\n\n\nvar METADATA = uid('meta');\nvar id = 0;\n\nvar isExtensible = Object.isExtensible || function () {\n return true;\n};\n\nvar setMetadata = function (it) {\n defineProperty(it, METADATA, { value: {\n objectID: 'O' + ++id, // object ID\n weakData: {} // weak collections IDs\n } });\n};\n\nvar fastKey = function (it, create) {\n // return a primitive with prefix\n if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n if (!has(it, METADATA)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return 'F';\n // not necessary to add metadata\n if (!create) return 'E';\n // add missing metadata\n setMetadata(it);\n // return object ID\n } return it[METADATA].objectID;\n};\n\nvar getWeakData = function (it, create) {\n if (!has(it, METADATA)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return true;\n // not necessary to add metadata\n if (!create) return false;\n // add missing metadata\n setMetadata(it);\n // return the store of weak collections IDs\n } return it[METADATA].weakData;\n};\n\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n if (freezing && meta.REQUIRED && isExtensible(it) && !has(it, METADATA)) setMetadata(it);\n return it;\n};\n\nvar meta = module.exports = {\n REQUIRED: false,\n fastKey: fastKey,\n getWeakData: getWeakData,\n onFreeze: onFreeze\n};\n\nhiddenKeys[METADATA] = true;\n});\n\nvar ITERATOR$2 = wellKnownSymbol('iterator');\nvar ArrayPrototype$1 = Array.prototype;\n\n// check on default Array iterator\nvar isArrayIteratorMethod = function (it) {\n return it !== undefined && (iterators.Array === it || ArrayPrototype$1[ITERATOR$2] === it);\n};\n\nvar ITERATOR$3 = wellKnownSymbol('iterator');\n\nvar getIteratorMethod = function (it) {\n if (it != undefined) return it[ITERATOR$3]\n || it['@@iterator']\n || iterators[classof(it)];\n};\n\n// call something on iterator step with safe closing on error\nvar callWithSafeIterationClosing = function (iterator, fn, value, ENTRIES) {\n try {\n return ENTRIES ? fn(anObject(value)[0], value[1]) : fn(value);\n // 7.4.6 IteratorClose(iterator, completion)\n } catch (error) {\n var returnMethod = iterator['return'];\n if (returnMethod !== undefined) anObject(returnMethod.call(iterator));\n throw error;\n }\n};\n\nvar iterate_1 = createCommonjsModule(function (module) {\nvar Result = function (stopped, result) {\n this.stopped = stopped;\n this.result = result;\n};\n\nvar iterate = module.exports = function (iterable, fn, that, AS_ENTRIES, IS_ITERATOR) {\n var boundFunction = bindContext(fn, that, AS_ENTRIES ? 2 : 1);\n var iterator, iterFn, index, length, result, next, step;\n\n if (IS_ITERATOR) {\n iterator = iterable;\n } else {\n iterFn = getIteratorMethod(iterable);\n if (typeof iterFn != 'function') throw TypeError('Target is not iterable');\n // optimisation for array iterators\n if (isArrayIteratorMethod(iterFn)) {\n for (index = 0, length = toLength(iterable.length); length > index; index++) {\n result = AS_ENTRIES\n ? boundFunction(anObject(step = iterable[index])[0], step[1])\n : boundFunction(iterable[index]);\n if (result && result instanceof Result) return result;\n } return new Result(false);\n }\n iterator = iterFn.call(iterable);\n }\n\n next = iterator.next;\n while (!(step = next.call(iterator)).done) {\n result = callWithSafeIterationClosing(iterator, boundFunction, step.value, AS_ENTRIES);\n if (typeof result == 'object' && result && result instanceof Result) return result;\n } return new Result(false);\n};\n\niterate.stop = function (result) {\n return new Result(true, result);\n};\n});\n\nvar anInstance = function (it, Constructor, name) {\n if (!(it instanceof Constructor)) {\n throw TypeError('Incorrect ' + (name ? name + ' ' : '') + 'invocation');\n } return it;\n};\n\nvar ITERATOR$4 = wellKnownSymbol('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var called = 0;\n var iteratorWithReturn = {\n next: function () {\n return { done: !!called++ };\n },\n 'return': function () {\n SAFE_CLOSING = true;\n }\n };\n iteratorWithReturn[ITERATOR$4] = function () {\n return this;\n };\n // eslint-disable-next-line no-throw-literal\n Array.from(iteratorWithReturn, function () { throw 2; });\n} catch (error) { /* empty */ }\n\nvar checkCorrectnessOfIteration = function (exec, SKIP_CLOSING) {\n if (!SKIP_CLOSING && !SAFE_CLOSING) return false;\n var ITERATION_SUPPORT = false;\n try {\n var object = {};\n object[ITERATOR$4] = function () {\n return {\n next: function () {\n return { done: ITERATION_SUPPORT = true };\n }\n };\n };\n exec(object);\n } catch (error) { /* empty */ }\n return ITERATION_SUPPORT;\n};\n\n// makes subclassing work correct for wrapped built-ins\nvar inheritIfRequired = function ($this, dummy, Wrapper) {\n var NewTarget, NewTargetPrototype;\n if (\n // it can work only with native `setPrototypeOf`\n objectSetPrototypeOf &&\n // we haven't completely correct pre-ES6 way for getting `new.target`, so use this\n typeof (NewTarget = dummy.constructor) == 'function' &&\n NewTarget !== Wrapper &&\n isObject(NewTargetPrototype = NewTarget.prototype) &&\n NewTargetPrototype !== Wrapper.prototype\n ) objectSetPrototypeOf($this, NewTargetPrototype);\n return $this;\n};\n\nvar collection = function (CONSTRUCTOR_NAME, wrapper, common, IS_MAP, IS_WEAK) {\n var NativeConstructor = global_1[CONSTRUCTOR_NAME];\n var NativePrototype = NativeConstructor && NativeConstructor.prototype;\n var Constructor = NativeConstructor;\n var ADDER = IS_MAP ? 'set' : 'add';\n var exported = {};\n\n var fixMethod = function (KEY) {\n var nativeMethod = NativePrototype[KEY];\n redefine(NativePrototype, KEY,\n KEY == 'add' ? function add(value) {\n nativeMethod.call(this, value === 0 ? 0 : value);\n return this;\n } : KEY == 'delete' ? function (key) {\n return IS_WEAK && !isObject(key) ? false : nativeMethod.call(this, key === 0 ? 0 : key);\n } : KEY == 'get' ? function get(key) {\n return IS_WEAK && !isObject(key) ? undefined : nativeMethod.call(this, key === 0 ? 0 : key);\n } : KEY == 'has' ? function has(key) {\n return IS_WEAK && !isObject(key) ? false : nativeMethod.call(this, key === 0 ? 0 : key);\n } : function set(key, value) {\n nativeMethod.call(this, key === 0 ? 0 : key, value);\n return this;\n }\n );\n };\n\n // eslint-disable-next-line max-len\n if (isForced_1(CONSTRUCTOR_NAME, typeof NativeConstructor != 'function' || !(IS_WEAK || NativePrototype.forEach && !fails(function () {\n new NativeConstructor().entries().next();\n })))) {\n // create collection constructor\n Constructor = common.getConstructor(wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER);\n internalMetadata.REQUIRED = true;\n } else if (isForced_1(CONSTRUCTOR_NAME, true)) {\n var instance = new Constructor();\n // early implementations not supports chaining\n var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;\n // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false\n var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });\n // most early implementations doesn't supports iterables, most modern - not close it correctly\n // eslint-disable-next-line no-new\n var ACCEPT_ITERABLES = checkCorrectnessOfIteration(function (iterable) { new NativeConstructor(iterable); });\n // for early implementations -0 and +0 not the same\n var BUGGY_ZERO = !IS_WEAK && fails(function () {\n // V8 ~ Chromium 42- fails only with 5+ elements\n var $instance = new NativeConstructor();\n var index = 5;\n while (index--) $instance[ADDER](index, index);\n return !$instance.has(-0);\n });\n\n if (!ACCEPT_ITERABLES) {\n Constructor = wrapper(function (dummy, iterable) {\n anInstance(dummy, Constructor, CONSTRUCTOR_NAME);\n var that = inheritIfRequired(new NativeConstructor(), dummy, Constructor);\n if (iterable != undefined) iterate_1(iterable, that[ADDER], that, IS_MAP);\n return that;\n });\n Constructor.prototype = NativePrototype;\n NativePrototype.constructor = Constructor;\n }\n\n if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\n fixMethod('delete');\n fixMethod('has');\n IS_MAP && fixMethod('get');\n }\n\n if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);\n\n // weak collections should not contains .clear method\n if (IS_WEAK && NativePrototype.clear) delete NativePrototype.clear;\n }\n\n exported[CONSTRUCTOR_NAME] = Constructor;\n _export({ global: true, forced: Constructor != NativeConstructor }, exported);\n\n setToStringTag(Constructor, CONSTRUCTOR_NAME);\n\n if (!IS_WEAK) common.setStrong(Constructor, CONSTRUCTOR_NAME, IS_MAP);\n\n return Constructor;\n};\n\nvar redefineAll = function (target, src, options) {\n for (var key in src) redefine(target, key, src[key], options);\n return target;\n};\n\nvar SPECIES$3 = wellKnownSymbol('species');\n\nvar setSpecies = function (CONSTRUCTOR_NAME) {\n var Constructor = getBuiltIn(CONSTRUCTOR_NAME);\n var defineProperty = objectDefineProperty.f;\n\n if (descriptors && Constructor && !Constructor[SPECIES$3]) {\n defineProperty(Constructor, SPECIES$3, {\n configurable: true,\n get: function () { return this; }\n });\n }\n};\n\nvar defineProperty$4 = objectDefineProperty.f;\n\n\n\n\n\n\n\n\nvar fastKey = internalMetadata.fastKey;\n\n\nvar setInternalState$2 = internalState.set;\nvar internalStateGetterFor = internalState.getterFor;\n\nvar collectionStrong = {\n getConstructor: function (wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, CONSTRUCTOR_NAME);\n setInternalState$2(that, {\n type: CONSTRUCTOR_NAME,\n index: objectCreate(null),\n first: undefined,\n last: undefined,\n size: 0\n });\n if (!descriptors) that.size = 0;\n if (iterable != undefined) iterate_1(iterable, that[ADDER], that, IS_MAP);\n });\n\n var getInternalState = internalStateGetterFor(CONSTRUCTOR_NAME);\n\n var define = function (that, key, value) {\n var state = getInternalState(that);\n var entry = getEntry(that, key);\n var previous, index;\n // change existing entry\n if (entry) {\n entry.value = value;\n // create new entry\n } else {\n state.last = entry = {\n index: index = fastKey(key, true),\n key: key,\n value: value,\n previous: previous = state.last,\n next: undefined,\n removed: false\n };\n if (!state.first) state.first = entry;\n if (previous) previous.next = entry;\n if (descriptors) state.size++;\n else that.size++;\n // add to index\n if (index !== 'F') state.index[index] = entry;\n } return that;\n };\n\n var getEntry = function (that, key) {\n var state = getInternalState(that);\n // fast case\n var index = fastKey(key);\n var entry;\n if (index !== 'F') return state.index[index];\n // frozen object case\n for (entry = state.first; entry; entry = entry.next) {\n if (entry.key == key) return entry;\n }\n };\n\n redefineAll(C.prototype, {\n // 23.1.3.1 Map.prototype.clear()\n // 23.2.3.2 Set.prototype.clear()\n clear: function clear() {\n var that = this;\n var state = getInternalState(that);\n var data = state.index;\n var entry = state.first;\n while (entry) {\n entry.removed = true;\n if (entry.previous) entry.previous = entry.previous.next = undefined;\n delete data[entry.index];\n entry = entry.next;\n }\n state.first = state.last = undefined;\n if (descriptors) state.size = 0;\n else that.size = 0;\n },\n // 23.1.3.3 Map.prototype.delete(key)\n // 23.2.3.4 Set.prototype.delete(value)\n 'delete': function (key) {\n var that = this;\n var state = getInternalState(that);\n var entry = getEntry(that, key);\n if (entry) {\n var next = entry.next;\n var prev = entry.previous;\n delete state.index[entry.index];\n entry.removed = true;\n if (prev) prev.next = next;\n if (next) next.previous = prev;\n if (state.first == entry) state.first = next;\n if (state.last == entry) state.last = prev;\n if (descriptors) state.size--;\n else that.size--;\n } return !!entry;\n },\n // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)\n // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)\n forEach: function forEach(callbackfn /* , that = undefined */) {\n var state = getInternalState(this);\n var boundFunction = bindContext(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);\n var entry;\n while (entry = entry ? entry.next : state.first) {\n boundFunction(entry.value, entry.key, this);\n // revert to the last existing entry\n while (entry && entry.removed) entry = entry.previous;\n }\n },\n // 23.1.3.7 Map.prototype.has(key)\n // 23.2.3.7 Set.prototype.has(value)\n has: function has(key) {\n return !!getEntry(this, key);\n }\n });\n\n redefineAll(C.prototype, IS_MAP ? {\n // 23.1.3.6 Map.prototype.get(key)\n get: function get(key) {\n var entry = getEntry(this, key);\n return entry && entry.value;\n },\n // 23.1.3.9 Map.prototype.set(key, value)\n set: function set(key, value) {\n return define(this, key === 0 ? 0 : key, value);\n }\n } : {\n // 23.2.3.1 Set.prototype.add(value)\n add: function add(value) {\n return define(this, value = value === 0 ? 0 : value, value);\n }\n });\n if (descriptors) defineProperty$4(C.prototype, 'size', {\n get: function () {\n return getInternalState(this).size;\n }\n });\n return C;\n },\n setStrong: function (C, CONSTRUCTOR_NAME, IS_MAP) {\n var ITERATOR_NAME = CONSTRUCTOR_NAME + ' Iterator';\n var getInternalCollectionState = internalStateGetterFor(CONSTRUCTOR_NAME);\n var getInternalIteratorState = internalStateGetterFor(ITERATOR_NAME);\n // add .keys, .values, .entries, [@@iterator]\n // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11\n defineIterator(C, CONSTRUCTOR_NAME, function (iterated, kind) {\n setInternalState$2(this, {\n type: ITERATOR_NAME,\n target: iterated,\n state: getInternalCollectionState(iterated),\n kind: kind,\n last: undefined\n });\n }, function () {\n var state = getInternalIteratorState(this);\n var kind = state.kind;\n var entry = state.last;\n // revert to the last existing entry\n while (entry && entry.removed) entry = entry.previous;\n // get next entry\n if (!state.target || !(state.last = entry = entry ? entry.next : state.state.first)) {\n // or finish the iteration\n state.target = undefined;\n return { value: undefined, done: true };\n }\n // return step by kind\n if (kind == 'keys') return { value: entry.key, done: false };\n if (kind == 'values') return { value: entry.value, done: false };\n return { value: [entry.key, entry.value], done: false };\n }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n // add [@@species], 23.1.2.2, 23.2.2.2\n setSpecies(CONSTRUCTOR_NAME);\n }\n};\n\n// `Set` constructor\n// https://tc39.github.io/ecma262/#sec-set-objects\nvar es_set = collection('Set', function (get) {\n return function Set() { return get(this, arguments.length ? arguments[0] : undefined); };\n}, collectionStrong);\n\n// `String.prototype.{ codePointAt, at }` methods implementation\nvar createMethod$2 = function (CONVERT_TO_STRING) {\n return function ($this, pos) {\n var S = String(requireObjectCoercible($this));\n var position = toInteger(pos);\n var size = S.length;\n var first, second;\n if (position < 0 || position >= size) return CONVERT_TO_STRING ? '' : undefined;\n first = S.charCodeAt(position);\n return first < 0xD800 || first > 0xDBFF || position + 1 === size\n || (second = S.charCodeAt(position + 1)) < 0xDC00 || second > 0xDFFF\n ? CONVERT_TO_STRING ? S.charAt(position) : first\n : CONVERT_TO_STRING ? S.slice(position, position + 2) : (first - 0xD800 << 10) + (second - 0xDC00) + 0x10000;\n };\n};\n\nvar stringMultibyte = {\n // `String.prototype.codePointAt` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.codepointat\n codeAt: createMethod$2(false),\n // `String.prototype.at` method\n // https://github.com/mathiasbynens/String.prototype.at\n charAt: createMethod$2(true)\n};\n\nvar charAt = stringMultibyte.charAt;\n\n\n\nvar STRING_ITERATOR = 'String Iterator';\nvar setInternalState$3 = internalState.set;\nvar getInternalState$2 = internalState.getterFor(STRING_ITERATOR);\n\n// `String.prototype[@@iterator]` method\n// https://tc39.github.io/ecma262/#sec-string.prototype-@@iterator\ndefineIterator(String, 'String', function (iterated) {\n setInternalState$3(this, {\n type: STRING_ITERATOR,\n string: String(iterated),\n index: 0\n });\n// `%StringIteratorPrototype%.next` method\n// https://tc39.github.io/ecma262/#sec-%stringiteratorprototype%.next\n}, function next() {\n var state = getInternalState$2(this);\n var string = state.string;\n var index = state.index;\n var point;\n if (index >= string.length) return { value: undefined, done: true };\n point = charAt(string, index);\n state.index += point.length;\n return { value: point, done: false };\n});\n\n// iterable DOM collections\n// flag - `iterable` interface - 'entries', 'keys', 'values', 'forEach' methods\nvar domIterables = {\n CSSRuleList: 0,\n CSSStyleDeclaration: 0,\n CSSValueList: 0,\n ClientRectList: 0,\n DOMRectList: 0,\n DOMStringList: 0,\n DOMTokenList: 1,\n DataTransferItemList: 0,\n FileList: 0,\n HTMLAllCollection: 0,\n HTMLCollection: 0,\n HTMLFormElement: 0,\n HTMLSelectElement: 0,\n MediaList: 0,\n MimeTypeArray: 0,\n NamedNodeMap: 0,\n NodeList: 1,\n PaintRequestList: 0,\n Plugin: 0,\n PluginArray: 0,\n SVGLengthList: 0,\n SVGNumberList: 0,\n SVGPathSegList: 0,\n SVGPointList: 0,\n SVGStringList: 0,\n SVGTransformList: 0,\n SourceBufferList: 0,\n StyleSheetList: 0,\n TextTrackCueList: 0,\n TextTrackList: 0,\n TouchList: 0\n};\n\nvar ITERATOR$5 = wellKnownSymbol('iterator');\nvar TO_STRING_TAG$3 = wellKnownSymbol('toStringTag');\nvar ArrayValues = es_array_iterator.values;\n\nfor (var COLLECTION_NAME in domIterables) {\n var Collection = global_1[COLLECTION_NAME];\n var CollectionPrototype = Collection && Collection.prototype;\n if (CollectionPrototype) {\n // some Chrome versions have non-configurable methods on DOMTokenList\n if (CollectionPrototype[ITERATOR$5] !== ArrayValues) try {\n createNonEnumerableProperty(CollectionPrototype, ITERATOR$5, ArrayValues);\n } catch (error) {\n CollectionPrototype[ITERATOR$5] = ArrayValues;\n }\n if (!CollectionPrototype[TO_STRING_TAG$3]) {\n createNonEnumerableProperty(CollectionPrototype, TO_STRING_TAG$3, COLLECTION_NAME);\n }\n if (domIterables[COLLECTION_NAME]) for (var METHOD_NAME in es_array_iterator) {\n // some Chrome versions have non-configurable methods on DOMTokenList\n if (CollectionPrototype[METHOD_NAME] !== es_array_iterator[METHOD_NAME]) try {\n createNonEnumerableProperty(CollectionPrototype, METHOD_NAME, es_array_iterator[METHOD_NAME]);\n } catch (error) {\n CollectionPrototype[METHOD_NAME] = es_array_iterator[METHOD_NAME];\n }\n }\n }\n}\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) {\n for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n }\n}\n\nfunction _iterableToArray(iter) {\n if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter);\n}\n\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance\");\n}\n\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread();\n}\n\nvar methods = {};\nvar names = [];\nfunction registerMethods(name, m) {\n if (Array.isArray(name)) {\n var _iteratorNormalCompletion = true;\n var _didIteratorError = false;\n var _iteratorError = undefined;\n\n try {\n for (var _iterator = name[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var _name = _step.value;\n registerMethods(_name, m);\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n\n return;\n }\n\n if (_typeof(name) === 'object') {\n for (var _name2 in name) {\n registerMethods(_name2, name[_name2]);\n }\n\n return;\n }\n\n addMethodNames(Object.getOwnPropertyNames(m));\n methods[name] = Object.assign(methods[name] || {}, m);\n}\nfunction getMethodsFor(name) {\n return methods[name] || {};\n}\nfunction getMethodNames() {\n return _toConsumableArray(new Set(names));\n}\nfunction addMethodNames(_names) {\n names.push.apply(names, _toConsumableArray(_names));\n}\n\nvar $includes = arrayIncludes.includes;\n\n\n// `Array.prototype.includes` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.includes\n_export({ target: 'Array', proto: true }, {\n includes: function includes(el /* , fromIndex = 0 */) {\n return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\n// https://tc39.github.io/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('includes');\n\n// `RegExp.prototype.flags` getter implementation\n// https://tc39.github.io/ecma262/#sec-get-regexp.prototype.flags\nvar regexpFlags = function () {\n var that = anObject(this);\n var result = '';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.dotAll) result += 's';\n if (that.unicode) result += 'u';\n if (that.sticky) result += 'y';\n return result;\n};\n\nvar nativeExec = RegExp.prototype.exec;\n// This always refers to the native implementation, because the\n// String#replace polyfill uses ./fix-regexp-well-known-symbol-logic.js,\n// which loads this file before patching the method.\nvar nativeReplace = String.prototype.replace;\n\nvar patchedExec = nativeExec;\n\nvar UPDATES_LAST_INDEX_WRONG = (function () {\n var re1 = /a/;\n var re2 = /b*/g;\n nativeExec.call(re1, 'a');\n nativeExec.call(re2, 'a');\n return re1.lastIndex !== 0 || re2.lastIndex !== 0;\n})();\n\n// nonparticipating capturing group, copied from es5-shim's String#split patch.\nvar NPCG_INCLUDED = /()??/.exec('')[1] !== undefined;\n\nvar PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED;\n\nif (PATCH) {\n patchedExec = function exec(str) {\n var re = this;\n var lastIndex, reCopy, match, i;\n\n if (NPCG_INCLUDED) {\n reCopy = new RegExp('^' + re.source + '$(?!\\\\s)', regexpFlags.call(re));\n }\n if (UPDATES_LAST_INDEX_WRONG) lastIndex = re.lastIndex;\n\n match = nativeExec.call(re, str);\n\n if (UPDATES_LAST_INDEX_WRONG && match) {\n re.lastIndex = re.global ? match.index + match[0].length : lastIndex;\n }\n if (NPCG_INCLUDED && match && match.length > 1) {\n // Fix browsers whose `exec` methods don't consistently return `undefined`\n // for NPCG, like IE8. NOTE: This doesn' work for /(.?)?/\n nativeReplace.call(match[0], reCopy, function () {\n for (i = 1; i < arguments.length - 2; i++) {\n if (arguments[i] === undefined) match[i] = undefined;\n }\n });\n }\n\n return match;\n };\n}\n\nvar regexpExec = patchedExec;\n\n_export({ target: 'RegExp', proto: true, forced: /./.exec !== regexpExec }, {\n exec: regexpExec\n});\n\nvar MATCH = wellKnownSymbol('match');\n\n// `IsRegExp` abstract operation\n// https://tc39.github.io/ecma262/#sec-isregexp\nvar isRegexp = function (it) {\n var isRegExp;\n return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : classofRaw(it) == 'RegExp');\n};\n\nvar notARegexp = function (it) {\n if (isRegexp(it)) {\n throw TypeError(\"The method doesn't accept regular expressions\");\n } return it;\n};\n\nvar MATCH$1 = wellKnownSymbol('match');\n\nvar correctIsRegexpLogic = function (METHOD_NAME) {\n var regexp = /./;\n try {\n '/./'[METHOD_NAME](regexp);\n } catch (e) {\n try {\n regexp[MATCH$1] = false;\n return '/./'[METHOD_NAME](regexp);\n } catch (f) { /* empty */ }\n } return false;\n};\n\n// `String.prototype.includes` method\n// https://tc39.github.io/ecma262/#sec-string.prototype.includes\n_export({ target: 'String', proto: true, forced: !correctIsRegexpLogic('includes') }, {\n includes: function includes(searchString /* , position = 0 */) {\n return !!~String(requireObjectCoercible(this))\n .indexOf(notARegexp(searchString), arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\nvar SPECIES$4 = wellKnownSymbol('species');\n\nvar REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function () {\n // #replace needs built-in support for named groups.\n // #match works fine because it just return the exec results, even if it has\n // a \"grops\" property.\n var re = /./;\n re.exec = function () {\n var result = [];\n result.groups = { a: '7' };\n return result;\n };\n return ''.replace(re, '$') !== '7';\n});\n\n// Chrome 51 has a buggy \"split\" implementation when RegExp#exec !== nativeExec\n// Weex JS has frozen built-in prototypes, so use try / catch wrapper\nvar SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = !fails(function () {\n var re = /(?:)/;\n var originalExec = re.exec;\n re.exec = function () { return originalExec.apply(this, arguments); };\n var result = 'ab'.split(re);\n return result.length !== 2 || result[0] !== 'a' || result[1] !== 'b';\n});\n\nvar fixRegexpWellKnownSymbolLogic = function (KEY, length, exec, sham) {\n var SYMBOL = wellKnownSymbol(KEY);\n\n var DELEGATES_TO_SYMBOL = !fails(function () {\n // String methods call symbol-named RegEp methods\n var O = {};\n O[SYMBOL] = function () { return 7; };\n return ''[KEY](O) != 7;\n });\n\n var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL && !fails(function () {\n // Symbol-named RegExp methods call .exec\n var execCalled = false;\n var re = /a/;\n\n if (KEY === 'split') {\n // We can't use real regex here since it causes deoptimization\n // and serious performance degradation in V8\n // https://github.com/zloirock/core-js/issues/306\n re = {};\n // RegExp[@@split] doesn't call the regex's exec method, but first creates\n // a new one. We need to return the patched regex when creating the new one.\n re.constructor = {};\n re.constructor[SPECIES$4] = function () { return re; };\n re.flags = '';\n re[SYMBOL] = /./[SYMBOL];\n }\n\n re.exec = function () { execCalled = true; return null; };\n\n re[SYMBOL]('');\n return !execCalled;\n });\n\n if (\n !DELEGATES_TO_SYMBOL ||\n !DELEGATES_TO_EXEC ||\n (KEY === 'replace' && !REPLACE_SUPPORTS_NAMED_GROUPS) ||\n (KEY === 'split' && !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC)\n ) {\n var nativeRegExpMethod = /./[SYMBOL];\n var methods = exec(SYMBOL, ''[KEY], function (nativeMethod, regexp, str, arg2, forceStringMethod) {\n if (regexp.exec === regexpExec) {\n if (DELEGATES_TO_SYMBOL && !forceStringMethod) {\n // The native String method already delegates to @@method (this\n // polyfilled function), leasing to infinite recursion.\n // We avoid it by directly calling the native @@method method.\n return { done: true, value: nativeRegExpMethod.call(regexp, str, arg2) };\n }\n return { done: true, value: nativeMethod.call(str, regexp, arg2) };\n }\n return { done: false };\n });\n var stringMethod = methods[0];\n var regexMethod = methods[1];\n\n redefine(String.prototype, KEY, stringMethod);\n redefine(RegExp.prototype, SYMBOL, length == 2\n // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)\n // 21.2.5.11 RegExp.prototype[@@split](string, limit)\n ? function (string, arg) { return regexMethod.call(string, this, arg); }\n // 21.2.5.6 RegExp.prototype[@@match](string)\n // 21.2.5.9 RegExp.prototype[@@search](string)\n : function (string) { return regexMethod.call(string, this); }\n );\n if (sham) createNonEnumerableProperty(RegExp.prototype[SYMBOL], 'sham', true);\n }\n};\n\nvar charAt$1 = stringMultibyte.charAt;\n\n// `AdvanceStringIndex` abstract operation\n// https://tc39.github.io/ecma262/#sec-advancestringindex\nvar advanceStringIndex = function (S, index, unicode) {\n return index + (unicode ? charAt$1(S, index).length : 1);\n};\n\n// `RegExpExec` abstract operation\n// https://tc39.github.io/ecma262/#sec-regexpexec\nvar regexpExecAbstract = function (R, S) {\n var exec = R.exec;\n if (typeof exec === 'function') {\n var result = exec.call(R, S);\n if (typeof result !== 'object') {\n throw TypeError('RegExp exec method returned something other than an Object or null');\n }\n return result;\n }\n\n if (classofRaw(R) !== 'RegExp') {\n throw TypeError('RegExp#exec called on incompatible receiver');\n }\n\n return regexpExec.call(R, S);\n};\n\nvar max$2 = Math.max;\nvar min$2 = Math.min;\nvar floor$1 = Math.floor;\nvar SUBSTITUTION_SYMBOLS = /\\$([$&'`]|\\d\\d?|<[^>]*>)/g;\nvar SUBSTITUTION_SYMBOLS_NO_NAMED = /\\$([$&'`]|\\d\\d?)/g;\n\nvar maybeToString = function (it) {\n return it === undefined ? it : String(it);\n};\n\n// @@replace logic\nfixRegexpWellKnownSymbolLogic('replace', 2, function (REPLACE, nativeReplace, maybeCallNative) {\n return [\n // `String.prototype.replace` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.replace\n function replace(searchValue, replaceValue) {\n var O = requireObjectCoercible(this);\n var replacer = searchValue == undefined ? undefined : searchValue[REPLACE];\n return replacer !== undefined\n ? replacer.call(searchValue, O, replaceValue)\n : nativeReplace.call(String(O), searchValue, replaceValue);\n },\n // `RegExp.prototype[@@replace]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@replace\n function (regexp, replaceValue) {\n var res = maybeCallNative(nativeReplace, regexp, this, replaceValue);\n if (res.done) return res.value;\n\n var rx = anObject(regexp);\n var S = String(this);\n\n var functionalReplace = typeof replaceValue === 'function';\n if (!functionalReplace) replaceValue = String(replaceValue);\n\n var global = rx.global;\n if (global) {\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n }\n var results = [];\n while (true) {\n var result = regexpExecAbstract(rx, S);\n if (result === null) break;\n\n results.push(result);\n if (!global) break;\n\n var matchStr = String(result[0]);\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n }\n\n var accumulatedResult = '';\n var nextSourcePosition = 0;\n for (var i = 0; i < results.length; i++) {\n result = results[i];\n\n var matched = String(result[0]);\n var position = max$2(min$2(toInteger(result.index), S.length), 0);\n var captures = [];\n // NOTE: This is equivalent to\n // captures = result.slice(1).map(maybeToString)\n // but for some reason `nativeSlice.call(result, 1, result.length)` (called in\n // the slice polyfill when slicing native arrays) \"doesn't work\" in safari 9 and\n // causes a crash (https://pastebin.com/N21QzeQA) when trying to debug it.\n for (var j = 1; j < result.length; j++) captures.push(maybeToString(result[j]));\n var namedCaptures = result.groups;\n if (functionalReplace) {\n var replacerArgs = [matched].concat(captures, position, S);\n if (namedCaptures !== undefined) replacerArgs.push(namedCaptures);\n var replacement = String(replaceValue.apply(undefined, replacerArgs));\n } else {\n replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue);\n }\n if (position >= nextSourcePosition) {\n accumulatedResult += S.slice(nextSourcePosition, position) + replacement;\n nextSourcePosition = position + matched.length;\n }\n }\n return accumulatedResult + S.slice(nextSourcePosition);\n }\n ];\n\n // https://tc39.github.io/ecma262/#sec-getsubstitution\n function getSubstitution(matched, str, position, captures, namedCaptures, replacement) {\n var tailPos = position + matched.length;\n var m = captures.length;\n var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED;\n if (namedCaptures !== undefined) {\n namedCaptures = toObject(namedCaptures);\n symbols = SUBSTITUTION_SYMBOLS;\n }\n return nativeReplace.call(replacement, symbols, function (match, ch) {\n var capture;\n switch (ch.charAt(0)) {\n case '$': return '$';\n case '&': return matched;\n case '`': return str.slice(0, position);\n case \"'\": return str.slice(tailPos);\n case '<':\n capture = namedCaptures[ch.slice(1, -1)];\n break;\n default: // \\d\\d?\n var n = +ch;\n if (n === 0) return match;\n if (n > m) {\n var f = floor$1(n / 10);\n if (f === 0) return match;\n if (f <= m) return captures[f - 1] === undefined ? ch.charAt(1) : captures[f - 1] + ch.charAt(1);\n return match;\n }\n capture = captures[n - 1];\n }\n return capture === undefined ? '' : capture;\n });\n }\n});\n\n// a string of all valid unicode whitespaces\n// eslint-disable-next-line max-len\nvar whitespaces = '\\u0009\\u000A\\u000B\\u000C\\u000D\\u0020\\u00A0\\u1680\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF';\n\nvar whitespace = '[' + whitespaces + ']';\nvar ltrim = RegExp('^' + whitespace + whitespace + '*');\nvar rtrim = RegExp(whitespace + whitespace + '*$');\n\n// `String.prototype.{ trim, trimStart, trimEnd, trimLeft, trimRight }` methods implementation\nvar createMethod$3 = function (TYPE) {\n return function ($this) {\n var string = String(requireObjectCoercible($this));\n if (TYPE & 1) string = string.replace(ltrim, '');\n if (TYPE & 2) string = string.replace(rtrim, '');\n return string;\n };\n};\n\nvar stringTrim = {\n // `String.prototype.{ trimLeft, trimStart }` methods\n // https://tc39.github.io/ecma262/#sec-string.prototype.trimstart\n start: createMethod$3(1),\n // `String.prototype.{ trimRight, trimEnd }` methods\n // https://tc39.github.io/ecma262/#sec-string.prototype.trimend\n end: createMethod$3(2),\n // `String.prototype.trim` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.trim\n trim: createMethod$3(3)\n};\n\nvar non = '\\u200B\\u0085\\u180E';\n\n// check that a method works with the correct list\n// of whitespaces and has a correct name\nvar forcedStringTrimMethod = function (METHOD_NAME) {\n return fails(function () {\n return !!whitespaces[METHOD_NAME]() || non[METHOD_NAME]() != non || whitespaces[METHOD_NAME].name !== METHOD_NAME;\n });\n};\n\nvar $trim = stringTrim.trim;\n\n\n// `String.prototype.trim` method\n// https://tc39.github.io/ecma262/#sec-string.prototype.trim\n_export({ target: 'String', proto: true, forced: forcedStringTrimMethod('trim') }, {\n trim: function trim() {\n return $trim(this);\n }\n});\n\n// Map function\nfunction map(array, block) {\n var i;\n var il = array.length;\n var result = [];\n\n for (i = 0; i < il; i++) {\n result.push(block(array[i]));\n }\n\n return result;\n} // Filter function\n\nfunction filter(array, block) {\n var i;\n var il = array.length;\n var result = [];\n\n for (i = 0; i < il; i++) {\n if (block(array[i])) {\n result.push(array[i]);\n }\n }\n\n return result;\n} // Degrees to radians\n\nfunction radians(d) {\n return d % 360 * Math.PI / 180;\n} // Radians to degrees\n\nfunction degrees(r) {\n return r * 180 / Math.PI % 360;\n} // Convert dash-separated-string to camelCase\n\nfunction camelCase(s) {\n return s.toLowerCase().replace(/-(.)/g, function (m, g) {\n return g.toUpperCase();\n });\n} // Convert camel cased string to string seperated\n\nfunction unCamelCase(s) {\n return s.replace(/([A-Z])/g, function (m, g) {\n return '-' + g.toLowerCase();\n });\n} // Capitalize first letter of a string\n\nfunction capitalize(s) {\n return s.charAt(0).toUpperCase() + s.slice(1);\n} // Calculate proportional width and height values when necessary\n\nfunction proportionalSize(element, width, height, box) {\n if (width == null || height == null) {\n box = box || element.bbox();\n\n if (width == null) {\n width = box.width / box.height * height;\n } else if (height == null) {\n height = box.height / box.width * width;\n }\n }\n\n return {\n width: width,\n height: height\n };\n}\nfunction getOrigin(o, element) {\n // Allow origin or around as the names\n var origin = o.origin; // o.around == null ? o.origin : o.around\n\n var ox, oy; // Allow the user to pass a string to rotate around a given point\n\n if (typeof origin === 'string' || origin == null) {\n // Get the bounding box of the element with no transformations applied\n var string = (origin || 'center').toLowerCase().trim();\n\n var _element$bbox = element.bbox(),\n height = _element$bbox.height,\n width = _element$bbox.width,\n x = _element$bbox.x,\n y = _element$bbox.y; // Calculate the transformed x and y coordinates\n\n\n var bx = string.includes('left') ? x : string.includes('right') ? x + width : x + width / 2;\n var by = string.includes('top') ? y : string.includes('bottom') ? y + height : y + height / 2; // Set the bounds eg : \"bottom-left\", \"Top right\", \"middle\" etc...\n\n ox = o.ox != null ? o.ox : bx;\n oy = o.oy != null ? o.oy : by;\n } else {\n ox = origin[0];\n oy = origin[1];\n } // Return the origin as it is if it wasn't a string\n\n\n return [ox, oy];\n}\n\nvar utils = ({\n\t__proto__: null,\n\tmap: map,\n\tfilter: filter,\n\tradians: radians,\n\tdegrees: degrees,\n\tcamelCase: camelCase,\n\tunCamelCase: unCamelCase,\n\tcapitalize: capitalize,\n\tproportionalSize: proportionalSize,\n\tgetOrigin: getOrigin\n});\n\n// Default namespaces\nvar ns = 'http://www.w3.org/2000/svg';\nvar xmlns = 'http://www.w3.org/2000/xmlns/';\nvar xlink = 'http://www.w3.org/1999/xlink';\nvar svgjs = 'http://svgjs.com/svgjs';\n\nvar namespaces = ({\n\t__proto__: null,\n\tns: ns,\n\txmlns: xmlns,\n\txlink: xlink,\n\tsvgjs: svgjs\n});\n\nvar globals = {\n window: typeof window === 'undefined' ? null : window,\n document: typeof document === 'undefined' ? null : document\n};\nfunction registerWindow() {\n var win = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n var doc = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n globals.window = win;\n globals.document = doc;\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nvar Base = function Base() {\n _classCallCheck(this, Base);\n};\n\nvar elements = {};\nvar root = '___SYMBOL___ROOT___'; // Method for element creation\n\nfunction create(name) {\n // create element\n return globals.document.createElementNS(ns, name);\n}\nfunction makeInstance(element) {\n if (element instanceof Base) return element;\n\n if (_typeof(element) === 'object') {\n return adopter(element);\n }\n\n if (element == null) {\n return new elements[root]();\n }\n\n if (typeof element === 'string' && element.charAt(0) !== '<') {\n return adopter(globals.document.querySelector(element));\n }\n\n var node = create('svg');\n node.innerHTML = element; // We can use firstChild here because we know,\n // that the first char is < and thus an element\n\n element = adopter(node.firstChild);\n return element;\n}\nfunction nodeOrNew(name, node) {\n return node instanceof globals.window.Node ? node : create(name);\n} // Adopt existing svg elements\n\nfunction adopt(node) {\n // check for presence of node\n if (!node) return null; // make sure a node isn't already adopted\n\n if (node.instance instanceof Base) return node.instance; // initialize variables\n\n var className = capitalize(node.nodeName || 'Dom'); // Make sure that gradients are adopted correctly\n\n if (className === 'LinearGradient' || className === 'RadialGradient') {\n className = 'Gradient'; // Fallback to Dom if element is not known\n } else if (!elements[className]) {\n className = 'Dom';\n }\n\n return new elements[className](node);\n}\nvar adopter = adopt;\nfunction mockAdopt() {\n var mock = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : adopt;\n adopter = mock;\n}\nfunction register(element) {\n var name = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : element.name;\n var asRoot = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n elements[name] = element;\n if (asRoot) elements[root] = element;\n addMethodNames(Object.getOwnPropertyNames(element.prototype));\n return element;\n}\nfunction getClass(name) {\n return elements[name];\n} // Element id sequence\n\nvar did = 1000; // Get next named element id\n\nfunction eid(name) {\n return 'Svgjs' + capitalize(name) + did++;\n} // Deep new id assignment\n\nfunction assignNewId(node) {\n // do the same for SVG child nodes as well\n for (var i = node.children.length - 1; i >= 0; i--) {\n assignNewId(node.children[i]);\n }\n\n if (node.id) {\n return adopt(node).id(eid(node.nodeName));\n }\n\n return adopt(node);\n} // Method for extending objects\n\nfunction extend(modules, methods, attrCheck) {\n var key, i;\n modules = Array.isArray(modules) ? modules : [modules];\n\n for (i = modules.length - 1; i >= 0; i--) {\n for (key in methods) {\n var method = methods[key];\n\n if (attrCheck) {\n method = wrapWithAttrCheck(methods[key]);\n }\n\n modules[i].prototype[key] = method;\n }\n }\n} // export function extendWithAttrCheck (...args) {\n// extend(...args, true)\n// }\n\nfunction wrapWithAttrCheck(fn) {\n return function () {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n var o = args[args.length - 1];\n\n if (o && o.constructor === Object && !(o instanceof Array)) {\n return fn.apply(this, args.slice(0, -1)).attr(o);\n } else {\n return fn.apply(this, args);\n }\n };\n}\nfunction invent(config) {\n // Create element initializer\n var initializer = typeof config.create === 'function' ? config.create : function (node) {\n this.constructor(node || create(config.create));\n }; // Inherit prototype\n\n if (config.inherit) {\n /* eslint new-cap: off */\n initializer.prototype = new config.inherit();\n initializer.prototype.constructor = initializer;\n } // Extend with methods\n\n\n if (config.extend) {\n extend(initializer, config.extend);\n } // Attach construct method to parent\n\n\n if (config.construct) {\n extend(config.parent || elements.Container, config.construct);\n }\n\n return initializer;\n}\n\nfunction siblings() {\n return this.parent().children();\n} // Get the curent position siblings\n\nfunction position() {\n return this.parent().index(this);\n} // Get the next element (will return null if there is none)\n\nfunction next() {\n return this.siblings()[this.position() + 1];\n} // Get the next element (will return null if there is none)\n\nfunction prev() {\n return this.siblings()[this.position() - 1];\n} // Send given element one step forward\n\nfunction forward() {\n var i = this.position() + 1;\n var p = this.parent(); // move node one step forward\n\n p.removeElement(this).add(this, i); // make sure defs node is always at the top\n\n if (typeof p.isRoot === 'function' && p.isRoot()) {\n p.node.appendChild(p.defs().node);\n }\n\n return this;\n} // Send given element one step backward\n\nfunction backward() {\n var i = this.position();\n\n if (i > 0) {\n this.parent().removeElement(this).add(this, i - 1);\n }\n\n return this;\n} // Send given element all the way to the front\n\nfunction front() {\n var p = this.parent(); // Move node forward\n\n p.node.appendChild(this.node); // Make sure defs node is always at the top\n\n if (typeof p.isRoot === 'function' && p.isRoot()) {\n p.node.appendChild(p.defs().node);\n }\n\n return this;\n} // Send given element all the way to the back\n\nfunction back() {\n if (this.position() > 0) {\n this.parent().removeElement(this).add(this, 0);\n }\n\n return this;\n} // Inserts a given element before the targeted element\n\nfunction before(element) {\n element = makeInstance(element);\n element.remove();\n var i = this.position();\n this.parent().add(element, i);\n return this;\n} // Inserts a given element after the targeted element\n\nfunction after(element) {\n element = makeInstance(element);\n element.remove();\n var i = this.position();\n this.parent().add(element, i + 1);\n return this;\n}\nfunction insertBefore(element) {\n element = makeInstance(element);\n element.before(this);\n return this;\n}\nfunction insertAfter(element) {\n element = makeInstance(element);\n element.after(this);\n return this;\n}\nregisterMethods('Dom', {\n siblings: siblings,\n position: position,\n next: next,\n prev: prev,\n forward: forward,\n backward: backward,\n front: front,\n back: back,\n before: before,\n after: after,\n insertBefore: insertBefore,\n insertAfter: insertAfter\n});\n\nvar $filter = arrayIteration.filter;\n\n\n// `Array.prototype.filter` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.filter\n// with adding support of @@species\n_export({ target: 'Array', proto: true, forced: !arrayMethodHasSpeciesSupport('filter') }, {\n filter: function filter(callbackfn /* , thisArg */) {\n return $filter(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\nvar sloppyArrayMethod = function (METHOD_NAME, argument) {\n var method = [][METHOD_NAME];\n return !method || !fails(function () {\n // eslint-disable-next-line no-useless-call,no-throw-literal\n method.call(null, argument || function () { throw 1; }, 1);\n });\n};\n\nvar $indexOf = arrayIncludes.indexOf;\n\n\nvar nativeIndexOf = [].indexOf;\n\nvar NEGATIVE_ZERO = !!nativeIndexOf && 1 / [1].indexOf(1, -0) < 0;\nvar SLOPPY_METHOD = sloppyArrayMethod('indexOf');\n\n// `Array.prototype.indexOf` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.indexof\n_export({ target: 'Array', proto: true, forced: NEGATIVE_ZERO || SLOPPY_METHOD }, {\n indexOf: function indexOf(searchElement /* , fromIndex = 0 */) {\n return NEGATIVE_ZERO\n // convert -0 to +0\n ? nativeIndexOf.apply(this, arguments) || 0\n : $indexOf(this, searchElement, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\nvar nativeJoin = [].join;\n\nvar ES3_STRINGS = indexedObject != Object;\nvar SLOPPY_METHOD$1 = sloppyArrayMethod('join', ',');\n\n// `Array.prototype.join` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.join\n_export({ target: 'Array', proto: true, forced: ES3_STRINGS || SLOPPY_METHOD$1 }, {\n join: function join(separator) {\n return nativeJoin.call(toIndexedObject(this), separator === undefined ? ',' : separator);\n }\n});\n\nvar SPECIES$5 = wellKnownSymbol('species');\n\n// `SpeciesConstructor` abstract operation\n// https://tc39.github.io/ecma262/#sec-speciesconstructor\nvar speciesConstructor = function (O, defaultConstructor) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || (S = anObject(C)[SPECIES$5]) == undefined ? defaultConstructor : aFunction$1(S);\n};\n\nvar arrayPush = [].push;\nvar min$3 = Math.min;\nvar MAX_UINT32 = 0xFFFFFFFF;\n\n// babel-minify transpiles RegExp('x', 'y') -> /x/y and it causes SyntaxError\nvar SUPPORTS_Y = !fails(function () { return !RegExp(MAX_UINT32, 'y'); });\n\n// @@split logic\nfixRegexpWellKnownSymbolLogic('split', 2, function (SPLIT, nativeSplit, maybeCallNative) {\n var internalSplit;\n if (\n 'abbc'.split(/(b)*/)[1] == 'c' ||\n 'test'.split(/(?:)/, -1).length != 4 ||\n 'ab'.split(/(?:ab)*/).length != 2 ||\n '.'.split(/(.?)(.?)/).length != 4 ||\n '.'.split(/()()/).length > 1 ||\n ''.split(/.?/).length\n ) {\n // based on es5-shim implementation, need to rework it\n internalSplit = function (separator, limit) {\n var string = String(requireObjectCoercible(this));\n var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;\n if (lim === 0) return [];\n if (separator === undefined) return [string];\n // If `separator` is not a regex, use native split\n if (!isRegexp(separator)) {\n return nativeSplit.call(string, separator, lim);\n }\n var output = [];\n var flags = (separator.ignoreCase ? 'i' : '') +\n (separator.multiline ? 'm' : '') +\n (separator.unicode ? 'u' : '') +\n (separator.sticky ? 'y' : '');\n var lastLastIndex = 0;\n // Make `global` and avoid `lastIndex` issues by working with a copy\n var separatorCopy = new RegExp(separator.source, flags + 'g');\n var match, lastIndex, lastLength;\n while (match = regexpExec.call(separatorCopy, string)) {\n lastIndex = separatorCopy.lastIndex;\n if (lastIndex > lastLastIndex) {\n output.push(string.slice(lastLastIndex, match.index));\n if (match.length > 1 && match.index < string.length) arrayPush.apply(output, match.slice(1));\n lastLength = match[0].length;\n lastLastIndex = lastIndex;\n if (output.length >= lim) break;\n }\n if (separatorCopy.lastIndex === match.index) separatorCopy.lastIndex++; // Avoid an infinite loop\n }\n if (lastLastIndex === string.length) {\n if (lastLength || !separatorCopy.test('')) output.push('');\n } else output.push(string.slice(lastLastIndex));\n return output.length > lim ? output.slice(0, lim) : output;\n };\n // Chakra, V8\n } else if ('0'.split(undefined, 0).length) {\n internalSplit = function (separator, limit) {\n return separator === undefined && limit === 0 ? [] : nativeSplit.call(this, separator, limit);\n };\n } else internalSplit = nativeSplit;\n\n return [\n // `String.prototype.split` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.split\n function split(separator, limit) {\n var O = requireObjectCoercible(this);\n var splitter = separator == undefined ? undefined : separator[SPLIT];\n return splitter !== undefined\n ? splitter.call(separator, O, limit)\n : internalSplit.call(String(O), separator, limit);\n },\n // `RegExp.prototype[@@split]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@split\n //\n // NOTE: This cannot be properly polyfilled in engines that don't support\n // the 'y' flag.\n function (regexp, limit) {\n var res = maybeCallNative(internalSplit, regexp, this, limit, internalSplit !== nativeSplit);\n if (res.done) return res.value;\n\n var rx = anObject(regexp);\n var S = String(this);\n var C = speciesConstructor(rx, RegExp);\n\n var unicodeMatching = rx.unicode;\n var flags = (rx.ignoreCase ? 'i' : '') +\n (rx.multiline ? 'm' : '') +\n (rx.unicode ? 'u' : '') +\n (SUPPORTS_Y ? 'y' : 'g');\n\n // ^(? + rx + ) is needed, in combination with some S slicing, to\n // simulate the 'y' flag.\n var splitter = new C(SUPPORTS_Y ? rx : '^(?:' + rx.source + ')', flags);\n var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;\n if (lim === 0) return [];\n if (S.length === 0) return regexpExecAbstract(splitter, S) === null ? [S] : [];\n var p = 0;\n var q = 0;\n var A = [];\n while (q < S.length) {\n splitter.lastIndex = SUPPORTS_Y ? q : 0;\n var z = regexpExecAbstract(splitter, SUPPORTS_Y ? S : S.slice(q));\n var e;\n if (\n z === null ||\n (e = min$3(toLength(splitter.lastIndex + (SUPPORTS_Y ? 0 : q)), S.length)) === p\n ) {\n q = advanceStringIndex(S, q, unicodeMatching);\n } else {\n A.push(S.slice(p, q));\n if (A.length === lim) return A;\n for (var i = 1; i <= z.length - 1; i++) {\n A.push(z[i]);\n if (A.length === lim) return A;\n }\n q = p = e;\n }\n }\n A.push(S.slice(p));\n return A;\n }\n ];\n}, !SUPPORTS_Y);\n\n// Parse unit value\nvar numberAndUnit = /^([+-]?(\\d+(\\.\\d*)?|\\.\\d+)(e[+-]?\\d+)?)([a-z%]*)$/i; // Parse hex value\n\nvar hex = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i; // Parse rgb value\n\nvar rgb = /rgb\\((\\d+),(\\d+),(\\d+)\\)/; // Parse reference id\n\nvar reference = /(#[a-z0-9\\-_]+)/i; // splits a transformation chain\n\nvar transforms = /\\)\\s*,?\\s*/; // Whitespace\n\nvar whitespace$1 = /\\s/g; // Test hex value\n\nvar isHex = /^#[a-f0-9]{3,6}$/i; // Test rgb value\n\nvar isRgb = /^rgb\\(/; // Test css declaration\n\nvar isCss = /[^:]+:[^;]+;?/; // Test for blank string\n\nvar isBlank = /^(\\s+)?$/; // Test for numeric string\n\nvar isNumber = /^[+-]?(\\d+(\\.\\d*)?|\\.\\d+)(e[+-]?\\d+)?$/i; // Test for percent value\n\nvar isPercent = /^-?[\\d.]+%$/; // Test for image url\n\nvar isImage = /\\.(jpg|jpeg|png|gif|svg)(\\?[^=]+.*)?/i; // split at whitespace and comma\n\nvar delimiter = /[\\s,]+/; // The following regex are used to parse the d attribute of a path\n// Matches all hyphens which are not after an exponent\n\nvar hyphen = /([^e])-/gi; // Replaces and tests for all path letters\n\nvar pathLetters = /[MLHVCSQTAZ]/gi; // yes we need this one, too\n\nvar isPathLetter = /[MLHVCSQTAZ]/i; // matches 0.154.23.45\n\nvar numbersWithDots = /((\\d?\\.\\d+(?:e[+-]?\\d+)?)((?:\\.\\d+(?:e[+-]?\\d+)?)+))+/gi; // matches .\n\nvar dots = /\\./g;\n\nvar regex = ({\n\t__proto__: null,\n\tnumberAndUnit: numberAndUnit,\n\thex: hex,\n\trgb: rgb,\n\treference: reference,\n\ttransforms: transforms,\n\twhitespace: whitespace$1,\n\tisHex: isHex,\n\tisRgb: isRgb,\n\tisCss: isCss,\n\tisBlank: isBlank,\n\tisNumber: isNumber,\n\tisPercent: isPercent,\n\tisImage: isImage,\n\tdelimiter: delimiter,\n\thyphen: hyphen,\n\tpathLetters: pathLetters,\n\tisPathLetter: isPathLetter,\n\tnumbersWithDots: numbersWithDots,\n\tdots: dots\n});\n\nfunction classes() {\n var attr = this.attr('class');\n return attr == null ? [] : attr.trim().split(delimiter);\n} // Return true if class exists on the node, false otherwise\n\nfunction hasClass(name) {\n return this.classes().indexOf(name) !== -1;\n} // Add class to the node\n\nfunction addClass(name) {\n if (!this.hasClass(name)) {\n var array = this.classes();\n array.push(name);\n this.attr('class', array.join(' '));\n }\n\n return this;\n} // Remove class from the node\n\nfunction removeClass(name) {\n if (this.hasClass(name)) {\n this.attr('class', this.classes().filter(function (c) {\n return c !== name;\n }).join(' '));\n }\n\n return this;\n} // Toggle the presence of a class on the node\n\nfunction toggleClass(name) {\n return this.hasClass(name) ? this.removeClass(name) : this.addClass(name);\n}\nregisterMethods('Dom', {\n classes: classes,\n hasClass: hasClass,\n addClass: addClass,\n removeClass: removeClass,\n toggleClass: toggleClass\n});\n\nvar $forEach$1 = arrayIteration.forEach;\n\n\n// `Array.prototype.forEach` method implementation\n// https://tc39.github.io/ecma262/#sec-array.prototype.foreach\nvar arrayForEach = sloppyArrayMethod('forEach') ? function forEach(callbackfn /* , thisArg */) {\n return $forEach$1(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n} : [].forEach;\n\n// `Array.prototype.forEach` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.foreach\n_export({ target: 'Array', proto: true, forced: [].forEach != arrayForEach }, {\n forEach: arrayForEach\n});\n\nfor (var COLLECTION_NAME$1 in domIterables) {\n var Collection$1 = global_1[COLLECTION_NAME$1];\n var CollectionPrototype$1 = Collection$1 && Collection$1.prototype;\n // some Chrome versions have non-configurable methods on DOMTokenList\n if (CollectionPrototype$1 && CollectionPrototype$1.forEach !== arrayForEach) try {\n createNonEnumerableProperty(CollectionPrototype$1, 'forEach', arrayForEach);\n } catch (error) {\n CollectionPrototype$1.forEach = arrayForEach;\n }\n}\n\nfunction css(style, val) {\n var ret = {};\n\n if (arguments.length === 0) {\n // get full style as object\n this.node.style.cssText.split(/\\s*;\\s*/).filter(function (el) {\n return !!el.length;\n }).forEach(function (el) {\n var t = el.split(/\\s*:\\s*/);\n ret[t[0]] = t[1];\n });\n return ret;\n }\n\n if (arguments.length < 2) {\n // get style properties in the array\n if (Array.isArray(style)) {\n var _iteratorNormalCompletion = true;\n var _didIteratorError = false;\n var _iteratorError = undefined;\n\n try {\n for (var _iterator = style[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var name = _step.value;\n var cased = camelCase(name);\n ret[cased] = this.node.style[cased];\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n\n return ret;\n } // get style for property\n\n\n if (typeof style === 'string') {\n return this.node.style[camelCase(style)];\n } // set styles in object\n\n\n if (_typeof(style) === 'object') {\n for (var _name in style) {\n // set empty string if null/undefined/'' was given\n this.node.style[camelCase(_name)] = style[_name] == null || isBlank.test(style[_name]) ? '' : style[_name];\n }\n }\n } // set style for property\n\n\n if (arguments.length === 2) {\n this.node.style[camelCase(style)] = val == null || isBlank.test(val) ? '' : val;\n }\n\n return this;\n} // Show element\n\nfunction show() {\n return this.css('display', '');\n} // Hide element\n\nfunction hide() {\n return this.css('display', 'none');\n} // Is element visible?\n\nfunction visible() {\n return this.css('display') !== 'none';\n}\nregisterMethods('Dom', {\n css: css,\n show: show,\n hide: hide,\n visible: visible\n});\n\nfunction data$1(a, v, r) {\n if (_typeof(a) === 'object') {\n for (v in a) {\n this.data(v, a[v]);\n }\n } else if (arguments.length < 2) {\n try {\n return JSON.parse(this.attr('data-' + a));\n } catch (e) {\n return this.attr('data-' + a);\n }\n } else {\n this.attr('data-' + a, v === null ? null : r === true || typeof v === 'string' || typeof v === 'number' ? v : JSON.stringify(v));\n }\n\n return this;\n}\nregisterMethods('Dom', {\n data: data$1\n});\n\nfunction remember(k, v) {\n // remember every item in an object individually\n if (_typeof(arguments[0]) === 'object') {\n for (var key in k) {\n this.remember(key, k[key]);\n }\n } else if (arguments.length === 1) {\n // retrieve memory\n return this.memory()[k];\n } else {\n // store memory\n this.memory()[k] = v;\n }\n\n return this;\n} // Erase a given memory\n\nfunction forget() {\n if (arguments.length === 0) {\n this._memory = {};\n } else {\n for (var i = arguments.length - 1; i >= 0; i--) {\n delete this.memory()[arguments[i]];\n }\n }\n\n return this;\n} // This triggers creation of a new hidden class which is not performant\n// However, this function is not rarely used so it will not happen frequently\n// Return local memory object\n\nfunction memory() {\n return this._memory = this._memory || {};\n}\nregisterMethods('Dom', {\n remember: remember,\n forget: forget,\n memory: memory\n});\n\n// `Array.prototype.{ reduce, reduceRight }` methods implementation\nvar createMethod$4 = function (IS_RIGHT) {\n return function (that, callbackfn, argumentsLength, memo) {\n aFunction$1(callbackfn);\n var O = toObject(that);\n var self = indexedObject(O);\n var length = toLength(O.length);\n var index = IS_RIGHT ? length - 1 : 0;\n var i = IS_RIGHT ? -1 : 1;\n if (argumentsLength < 2) while (true) {\n if (index in self) {\n memo = self[index];\n index += i;\n break;\n }\n index += i;\n if (IS_RIGHT ? index < 0 : length <= index) {\n throw TypeError('Reduce of empty array with no initial value');\n }\n }\n for (;IS_RIGHT ? index >= 0 : length > index; index += i) if (index in self) {\n memo = callbackfn(memo, self[index], index, O);\n }\n return memo;\n };\n};\n\nvar arrayReduce = {\n // `Array.prototype.reduce` method\n // https://tc39.github.io/ecma262/#sec-array.prototype.reduce\n left: createMethod$4(false),\n // `Array.prototype.reduceRight` method\n // https://tc39.github.io/ecma262/#sec-array.prototype.reduceright\n right: createMethod$4(true)\n};\n\nvar $reduce = arrayReduce.left;\n\n\n// `Array.prototype.reduce` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.reduce\n_export({ target: 'Array', proto: true, forced: sloppyArrayMethod('reduce') }, {\n reduce: function reduce(callbackfn /* , initialValue */) {\n return $reduce(this, callbackfn, arguments.length, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\nvar listenerId = 0;\nvar windowEvents = {};\n\nfunction getEvents(instance) {\n var n = instance.getEventHolder(); // We dont want to save events in global space\n\n if (n === globals.window) n = windowEvents;\n if (!n.events) n.events = {};\n return n.events;\n}\n\nfunction getEventTarget(instance) {\n return instance.getEventTarget();\n}\n\nfunction clearEvents(instance) {\n var n = instance.getEventHolder();\n if (n.events) n.events = {};\n} // Add event binder in the SVG namespace\n\n\nfunction on(node, events, listener, binding, options) {\n var l = listener.bind(binding || node);\n var instance = makeInstance(node);\n var bag = getEvents(instance);\n var n = getEventTarget(instance); // events can be an array of events or a string of events\n\n events = Array.isArray(events) ? events : events.split(delimiter); // add id to listener\n\n if (!listener._svgjsListenerId) {\n listener._svgjsListenerId = ++listenerId;\n }\n\n events.forEach(function (event) {\n var ev = event.split('.')[0];\n var ns = event.split('.')[1] || '*'; // ensure valid object\n\n bag[ev] = bag[ev] || {};\n bag[ev][ns] = bag[ev][ns] || {}; // reference listener\n\n bag[ev][ns][listener._svgjsListenerId] = l; // add listener\n\n n.addEventListener(ev, l, options || false);\n });\n} // Add event unbinder in the SVG namespace\n\nfunction off(node, events, listener, options) {\n var instance = makeInstance(node);\n var bag = getEvents(instance);\n var n = getEventTarget(instance); // listener can be a function or a number\n\n if (typeof listener === 'function') {\n listener = listener._svgjsListenerId;\n if (!listener) return;\n } // events can be an array of events or a string or undefined\n\n\n events = Array.isArray(events) ? events : (events || '').split(delimiter);\n events.forEach(function (event) {\n var ev = event && event.split('.')[0];\n var ns = event && event.split('.')[1];\n var namespace, l;\n\n if (listener) {\n // remove listener reference\n if (bag[ev] && bag[ev][ns || '*']) {\n // removeListener\n n.removeEventListener(ev, bag[ev][ns || '*'][listener], options || false);\n delete bag[ev][ns || '*'][listener];\n }\n } else if (ev && ns) {\n // remove all listeners for a namespaced event\n if (bag[ev] && bag[ev][ns]) {\n for (l in bag[ev][ns]) {\n off(n, [ev, ns].join('.'), l);\n }\n\n delete bag[ev][ns];\n }\n } else if (ns) {\n // remove all listeners for a specific namespace\n for (event in bag) {\n for (namespace in bag[event]) {\n if (ns === namespace) {\n off(n, [event, ns].join('.'));\n }\n }\n }\n } else if (ev) {\n // remove all listeners for the event\n if (bag[ev]) {\n for (namespace in bag[ev]) {\n off(n, [ev, namespace].join('.'));\n }\n\n delete bag[ev];\n }\n } else {\n // remove all listeners on a given node\n for (event in bag) {\n off(n, event);\n }\n\n clearEvents(instance);\n }\n });\n}\nfunction dispatch(node, event, data) {\n var n = getEventTarget(node); // Dispatch event\n\n if (event instanceof globals.window.Event) {\n n.dispatchEvent(event);\n } else {\n event = new globals.window.CustomEvent(event, {\n detail: data,\n cancelable: true\n });\n n.dispatchEvent(event);\n }\n\n return event;\n}\n\nvar IS_CONCAT_SPREADABLE = wellKnownSymbol('isConcatSpreadable');\nvar MAX_SAFE_INTEGER = 0x1FFFFFFFFFFFFF;\nvar MAXIMUM_ALLOWED_INDEX_EXCEEDED = 'Maximum allowed index exceeded';\n\n// We can't use this feature detection in V8 since it causes\n// deoptimization and serious performance degradation\n// https://github.com/zloirock/core-js/issues/679\nvar IS_CONCAT_SPREADABLE_SUPPORT = v8Version >= 51 || !fails(function () {\n var array = [];\n array[IS_CONCAT_SPREADABLE] = false;\n return array.concat()[0] !== array;\n});\n\nvar SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('concat');\n\nvar isConcatSpreadable = function (O) {\n if (!isObject(O)) return false;\n var spreadable = O[IS_CONCAT_SPREADABLE];\n return spreadable !== undefined ? !!spreadable : isArray(O);\n};\n\nvar FORCED = !IS_CONCAT_SPREADABLE_SUPPORT || !SPECIES_SUPPORT;\n\n// `Array.prototype.concat` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.concat\n// with adding support of @@isConcatSpreadable and @@species\n_export({ target: 'Array', proto: true, forced: FORCED }, {\n concat: function concat(arg) { // eslint-disable-line no-unused-vars\n var O = toObject(this);\n var A = arraySpeciesCreate(O, 0);\n var n = 0;\n var i, k, length, len, E;\n for (i = -1, length = arguments.length; i < length; i++) {\n E = i === -1 ? O : arguments[i];\n if (isConcatSpreadable(E)) {\n len = toLength(E.length);\n if (n + len > MAX_SAFE_INTEGER) throw TypeError(MAXIMUM_ALLOWED_INDEX_EXCEEDED);\n for (k = 0; k < len; k++, n++) if (k in E) createProperty(A, n, E[k]);\n } else {\n if (n >= MAX_SAFE_INTEGER) throw TypeError(MAXIMUM_ALLOWED_INDEX_EXCEEDED);\n createProperty(A, n++, E);\n }\n }\n A.length = n;\n return A;\n }\n});\n\nvar $map = arrayIteration.map;\n\n\n// `Array.prototype.map` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.map\n// with adding support of @@species\n_export({ target: 'Array', proto: true, forced: !arrayMethodHasSpeciesSupport('map') }, {\n map: function map(callbackfn /* , thisArg */) {\n return $map(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\nvar DatePrototype = Date.prototype;\nvar INVALID_DATE = 'Invalid Date';\nvar TO_STRING = 'toString';\nvar nativeDateToString = DatePrototype[TO_STRING];\nvar getTime = DatePrototype.getTime;\n\n// `Date.prototype.toString` method\n// https://tc39.github.io/ecma262/#sec-date.prototype.tostring\nif (new Date(NaN) + '' != INVALID_DATE) {\n redefine(DatePrototype, TO_STRING, function toString() {\n var value = getTime.call(this);\n // eslint-disable-next-line no-self-compare\n return value === value ? nativeDateToString.call(this) : INVALID_DATE;\n });\n}\n\nvar trim = stringTrim.trim;\n\n\nvar nativeParseInt = global_1.parseInt;\nvar hex$1 = /^[+-]?0[Xx]/;\nvar FORCED$1 = nativeParseInt(whitespaces + '08') !== 8 || nativeParseInt(whitespaces + '0x16') !== 22;\n\n// `parseInt` method\n// https://tc39.github.io/ecma262/#sec-parseint-string-radix\nvar _parseInt = FORCED$1 ? function parseInt(string, radix) {\n var S = trim(String(string));\n return nativeParseInt(S, (radix >>> 0) || (hex$1.test(S) ? 16 : 10));\n} : nativeParseInt;\n\n// `parseInt` method\n// https://tc39.github.io/ecma262/#sec-parseint-string-radix\n_export({ global: true, forced: parseInt != _parseInt }, {\n parseInt: _parseInt\n});\n\nvar TO_STRING$1 = 'toString';\nvar RegExpPrototype = RegExp.prototype;\nvar nativeToString = RegExpPrototype[TO_STRING$1];\n\nvar NOT_GENERIC = fails(function () { return nativeToString.call({ source: 'a', flags: 'b' }) != '/a/b'; });\n// FF44- RegExp#toString has a wrong name\nvar INCORRECT_NAME = nativeToString.name != TO_STRING$1;\n\n// `RegExp.prototype.toString` method\n// https://tc39.github.io/ecma262/#sec-regexp.prototype.tostring\nif (NOT_GENERIC || INCORRECT_NAME) {\n redefine(RegExp.prototype, TO_STRING$1, function toString() {\n var R = anObject(this);\n var p = String(R.source);\n var rf = R.flags;\n var f = String(rf === undefined && R instanceof RegExp && !('flags' in RegExpPrototype) ? regexpFlags.call(R) : rf);\n return '/' + p + '/' + f;\n }, { unsafe: true });\n}\n\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === \"[object Arguments]\")) {\n return;\n }\n\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n}\n\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest();\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction sixDigitHex(hex) {\n return hex.length === 4 ? ['#', hex.substring(1, 2), hex.substring(1, 2), hex.substring(2, 3), hex.substring(2, 3), hex.substring(3, 4), hex.substring(3, 4)].join('') : hex;\n}\n\nfunction componentHex(component) {\n var integer = Math.round(component);\n var bounded = Math.max(0, Math.min(255, integer));\n var hex = bounded.toString(16);\n return hex.length === 1 ? '0' + hex : hex;\n}\n\nfunction is(object, space) {\n for (var i = space.length; i--;) {\n if (object[space[i]] == null) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction getParameters(a, b) {\n var params = is(a, 'rgb') ? {\n _a: a.r,\n _b: a.g,\n _c: a.b,\n space: 'rgb'\n } : is(a, 'xyz') ? {\n _a: a.x,\n _b: a.y,\n _c: a.z,\n _d: 0,\n space: 'xyz'\n } : is(a, 'hsl') ? {\n _a: a.h,\n _b: a.s,\n _c: a.l,\n _d: 0,\n space: 'hsl'\n } : is(a, 'lab') ? {\n _a: a.l,\n _b: a.a,\n _c: a.b,\n _d: 0,\n space: 'lab'\n } : is(a, 'lch') ? {\n _a: a.l,\n _b: a.c,\n _c: a.h,\n _d: 0,\n space: 'lch'\n } : is(a, 'cmyk') ? {\n _a: a.c,\n _b: a.m,\n _c: a.y,\n _d: a.k,\n space: 'cmyk'\n } : {\n _a: 0,\n _b: 0,\n _c: 0,\n space: 'rgb'\n };\n params.space = b || params.space;\n return params;\n}\n\nfunction cieSpace(space) {\n if (space === 'lab' || space === 'xyz' || space === 'lch') {\n return true;\n } else {\n return false;\n }\n}\n\nfunction hueToRgb(p, q, t) {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n}\n\nvar Color =\n/*#__PURE__*/\nfunction () {\n function Color() {\n _classCallCheck(this, Color);\n\n this.init.apply(this, arguments);\n }\n\n _createClass(Color, [{\n key: \"init\",\n value: function init() {\n var a = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n var b = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var c = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n var d = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;\n var space = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 'rgb';\n // This catches the case when a falsy value is passed like ''\n a = !a ? 0 : a; // Reset all values in case the init function is rerun with new color space\n\n if (this.space) {\n for (var component in this.space) {\n delete this[this.space[component]];\n }\n }\n\n if (typeof a === 'number') {\n // Allow for the case that we don't need d...\n space = typeof d === 'string' ? d : space;\n d = typeof d === 'string' ? 0 : d; // Assign the values straight to the color\n\n Object.assign(this, {\n _a: a,\n _b: b,\n _c: c,\n _d: d,\n space: space\n }); // If the user gave us an array, make the color from it\n } else if (a instanceof Array) {\n this.space = b || (typeof a[3] === 'string' ? a[3] : a[4]) || 'rgb';\n Object.assign(this, {\n _a: a[0],\n _b: a[1],\n _c: a[2],\n _d: a[3] || 0\n });\n } else if (a instanceof Object) {\n // Set the object up and assign its values directly\n var values = getParameters(a, b);\n Object.assign(this, values);\n } else if (typeof a === 'string') {\n if (isRgb.test(a)) {\n var noWhitespace = a.replace(whitespace$1, '');\n\n var _rgb$exec$slice$map = rgb.exec(noWhitespace).slice(1, 4).map(function (v) {\n return parseInt(v);\n }),\n _rgb$exec$slice$map2 = _slicedToArray(_rgb$exec$slice$map, 3),\n _a2 = _rgb$exec$slice$map2[0],\n _b2 = _rgb$exec$slice$map2[1],\n _c2 = _rgb$exec$slice$map2[2];\n\n Object.assign(this, {\n _a: _a2,\n _b: _b2,\n _c: _c2,\n _d: 0,\n space: 'rgb'\n });\n } else if (isHex.test(a)) {\n var hexParse = function hexParse(v) {\n return parseInt(v, 16);\n };\n\n var _hex$exec$map = hex.exec(sixDigitHex(a)).map(hexParse),\n _hex$exec$map2 = _slicedToArray(_hex$exec$map, 4),\n _a3 = _hex$exec$map2[1],\n _b3 = _hex$exec$map2[2],\n _c3 = _hex$exec$map2[3];\n\n Object.assign(this, {\n _a: _a3,\n _b: _b3,\n _c: _c3,\n _d: 0,\n space: 'rgb'\n });\n } else throw Error('Unsupported string format, can\\'t construct Color');\n } // Now add the components as a convenience\n\n\n var _a = this._a,\n _b = this._b,\n _c = this._c,\n _d = this._d;\n var components = this.space === 'rgb' ? {\n r: _a,\n g: _b,\n b: _c\n } : this.space === 'xyz' ? {\n x: _a,\n y: _b,\n z: _c\n } : this.space === 'hsl' ? {\n h: _a,\n s: _b,\n l: _c\n } : this.space === 'lab' ? {\n l: _a,\n a: _b,\n b: _c\n } : this.space === 'lch' ? {\n l: _a,\n c: _b,\n h: _c\n } : this.space === 'cmyk' ? {\n c: _a,\n m: _b,\n y: _c,\n k: _d\n } : {};\n Object.assign(this, components);\n }\n /*\r\n Conversion Methods\r\n */\n\n }, {\n key: \"rgb\",\n value: function rgb() {\n if (this.space === 'rgb') {\n return this;\n } else if (cieSpace(this.space)) {\n // Convert to the xyz color space\n var x = this.x,\n y = this.y,\n z = this.z;\n\n if (this.space === 'lab' || this.space === 'lch') {\n // Get the values in the lab space\n var l = this.l,\n a = this.a,\n _b4 = this.b;\n\n if (this.space === 'lch') {\n var c = this.c,\n h = this.h;\n var dToR = Math.PI / 180;\n a = c * Math.cos(dToR * h);\n _b4 = c * Math.sin(dToR * h);\n } // Undo the nonlinear function\n\n\n var yL = (l + 16) / 116;\n var xL = a / 500 + yL;\n var zL = yL - _b4 / 200; // Get the xyz values\n\n var ct = 16 / 116;\n var mx = 0.008856;\n var nm = 7.787;\n x = 0.95047 * (Math.pow(xL, 3) > mx ? Math.pow(xL, 3) : (xL - ct) / nm);\n y = 1.00000 * (Math.pow(yL, 3) > mx ? Math.pow(yL, 3) : (yL - ct) / nm);\n z = 1.08883 * (Math.pow(zL, 3) > mx ? Math.pow(zL, 3) : (zL - ct) / nm);\n } // Convert xyz to unbounded rgb values\n\n\n var rU = x * 3.2406 + y * -1.5372 + z * -0.4986;\n var gU = x * -0.9689 + y * 1.8758 + z * 0.0415;\n var bU = x * 0.0557 + y * -0.2040 + z * 1.0570; // Convert the values to true rgb values\n\n var pow = Math.pow;\n var bd = 0.0031308;\n var r = rU > bd ? 1.055 * pow(rU, 1 / 2.4) - 0.055 : 12.92 * rU;\n var g = gU > bd ? 1.055 * pow(gU, 1 / 2.4) - 0.055 : 12.92 * gU;\n var b = bU > bd ? 1.055 * pow(bU, 1 / 2.4) - 0.055 : 12.92 * bU; // Make and return the color\n\n var color = new Color(255 * r, 255 * g, 255 * b);\n return color;\n } else if (this.space === 'hsl') {\n // https://bgrins.github.io/TinyColor/docs/tinycolor.html\n // Get the current hsl values\n var _h = this.h,\n s = this.s,\n _l = this.l;\n _h /= 360;\n s /= 100;\n _l /= 100; // If we are grey, then just make the color directly\n\n if (s === 0) {\n _l *= 255;\n\n var _color2 = new Color(_l, _l, _l);\n\n return _color2;\n } // TODO I have no idea what this does :D If you figure it out, tell me!\n\n\n var q = _l < 0.5 ? _l * (1 + s) : _l + s - _l * s;\n var p = 2 * _l - q; // Get the rgb values\n\n var _r = 255 * hueToRgb(p, q, _h + 1 / 3);\n\n var _g = 255 * hueToRgb(p, q, _h);\n\n var _b5 = 255 * hueToRgb(p, q, _h - 1 / 3); // Make a new color\n\n\n var _color = new Color(_r, _g, _b5);\n\n return _color;\n } else if (this.space === 'cmyk') {\n // https://gist.github.com/felipesabino/5066336\n // Get the normalised cmyk values\n var _c4 = this.c,\n m = this.m,\n _y = this.y,\n k = this.k; // Get the rgb values\n\n var _r2 = 255 * (1 - Math.min(1, _c4 * (1 - k) + k));\n\n var _g2 = 255 * (1 - Math.min(1, m * (1 - k) + k));\n\n var _b6 = 255 * (1 - Math.min(1, _y * (1 - k) + k)); // Form the color and return it\n\n\n var _color3 = new Color(_r2, _g2, _b6);\n\n return _color3;\n } else {\n return this;\n }\n }\n }, {\n key: \"lab\",\n value: function lab() {\n // Get the xyz color\n var _this$xyz = this.xyz(),\n x = _this$xyz.x,\n y = _this$xyz.y,\n z = _this$xyz.z; // Get the lab components\n\n\n var l = 116 * y - 16;\n var a = 500 * (x - y);\n var b = 200 * (y - z); // Construct and return a new color\n\n var color = new Color(l, a, b, 'lab');\n return color;\n }\n }, {\n key: \"xyz\",\n value: function xyz() {\n // Normalise the red, green and blue values\n var _this$rgb = this.rgb(),\n r255 = _this$rgb._a,\n g255 = _this$rgb._b,\n b255 = _this$rgb._c;\n\n var _map = [r255, g255, b255].map(function (v) {\n return v / 255;\n }),\n _map2 = _slicedToArray(_map, 3),\n r = _map2[0],\n g = _map2[1],\n b = _map2[2]; // Convert to the lab rgb space\n\n\n var rL = r > 0.04045 ? Math.pow((r + 0.055) / 1.055, 2.4) : r / 12.92;\n var gL = g > 0.04045 ? Math.pow((g + 0.055) / 1.055, 2.4) : g / 12.92;\n var bL = b > 0.04045 ? Math.pow((b + 0.055) / 1.055, 2.4) : b / 12.92; // Convert to the xyz color space without bounding the values\n\n var xU = (rL * 0.4124 + gL * 0.3576 + bL * 0.1805) / 0.95047;\n var yU = (rL * 0.2126 + gL * 0.7152 + bL * 0.0722) / 1.00000;\n var zU = (rL * 0.0193 + gL * 0.1192 + bL * 0.9505) / 1.08883; // Get the proper xyz values by applying the bounding\n\n var x = xU > 0.008856 ? Math.pow(xU, 1 / 3) : 7.787 * xU + 16 / 116;\n var y = yU > 0.008856 ? Math.pow(yU, 1 / 3) : 7.787 * yU + 16 / 116;\n var z = zU > 0.008856 ? Math.pow(zU, 1 / 3) : 7.787 * zU + 16 / 116; // Make and return the color\n\n var color = new Color(x, y, z, 'xyz');\n return color;\n }\n }, {\n key: \"lch\",\n value: function lch() {\n // Get the lab color directly\n var _this$lab = this.lab(),\n l = _this$lab.l,\n a = _this$lab.a,\n b = _this$lab.b; // Get the chromaticity and the hue using polar coordinates\n\n\n var c = Math.sqrt(Math.pow(a, 2) + Math.pow(b, 2));\n var h = 180 * Math.atan2(b, a) / Math.PI;\n\n if (h < 0) {\n h *= -1;\n h = 360 - h;\n } // Make a new color and return it\n\n\n var color = new Color(l, c, h, 'lch');\n return color;\n }\n }, {\n key: \"hsl\",\n value: function hsl() {\n // Get the rgb values\n var _this$rgb2 = this.rgb(),\n _a = _this$rgb2._a,\n _b = _this$rgb2._b,\n _c = _this$rgb2._c;\n\n var _map3 = [_a, _b, _c].map(function (v) {\n return v / 255;\n }),\n _map4 = _slicedToArray(_map3, 3),\n r = _map4[0],\n g = _map4[1],\n b = _map4[2]; // Find the maximum and minimum values to get the lightness\n\n\n var max = Math.max(r, g, b);\n var min = Math.min(r, g, b);\n var l = (max + min) / 2; // If the r, g, v values are identical then we are grey\n\n var isGrey = max === min; // Calculate the hue and saturation\n\n var delta = max - min;\n var s = isGrey ? 0 : l > 0.5 ? delta / (2 - max - min) : delta / (max + min);\n var h = isGrey ? 0 : max === r ? ((g - b) / delta + (g < b ? 6 : 0)) / 6 : max === g ? ((b - r) / delta + 2) / 6 : max === b ? ((r - g) / delta + 4) / 6 : 0; // Construct and return the new color\n\n var color = new Color(360 * h, 100 * s, 100 * l, 'hsl');\n return color;\n }\n }, {\n key: \"cmyk\",\n value: function cmyk() {\n // Get the rgb values for the current color\n var _this$rgb3 = this.rgb(),\n _a = _this$rgb3._a,\n _b = _this$rgb3._b,\n _c = _this$rgb3._c;\n\n var _map5 = [_a, _b, _c].map(function (v) {\n return v / 255;\n }),\n _map6 = _slicedToArray(_map5, 3),\n r = _map6[0],\n g = _map6[1],\n b = _map6[2]; // Get the cmyk values in an unbounded format\n\n\n var k = Math.min(1 - r, 1 - g, 1 - b);\n\n if (k === 1) {\n // Catch the black case\n return new Color(0, 0, 0, 1, 'cmyk');\n }\n\n var c = (1 - r - k) / (1 - k);\n var m = (1 - g - k) / (1 - k);\n var y = (1 - b - k) / (1 - k); // Construct the new color\n\n var color = new Color(c, m, y, k, 'cmyk');\n return color;\n }\n /*\r\n Input and Output methods\r\n */\n\n }, {\n key: \"_clamped\",\n value: function _clamped() {\n var _this$rgb4 = this.rgb(),\n _a = _this$rgb4._a,\n _b = _this$rgb4._b,\n _c = _this$rgb4._c;\n\n var max = Math.max,\n min = Math.min,\n round = Math.round;\n\n var format = function format(v) {\n return max(0, min(round(v), 255));\n };\n\n return [_a, _b, _c].map(format);\n }\n }, {\n key: \"toHex\",\n value: function toHex() {\n var _this$_clamped$map = this._clamped().map(componentHex),\n _this$_clamped$map2 = _slicedToArray(_this$_clamped$map, 3),\n r = _this$_clamped$map2[0],\n g = _this$_clamped$map2[1],\n b = _this$_clamped$map2[2];\n\n return \"#\".concat(r).concat(g).concat(b);\n }\n }, {\n key: \"toString\",\n value: function toString() {\n return this.toHex();\n }\n }, {\n key: \"toRgb\",\n value: function toRgb() {\n var _this$_clamped = this._clamped(),\n _this$_clamped2 = _slicedToArray(_this$_clamped, 3),\n rV = _this$_clamped2[0],\n gV = _this$_clamped2[1],\n bV = _this$_clamped2[2];\n\n var string = \"rgb(\".concat(rV, \",\").concat(gV, \",\").concat(bV, \")\");\n return string;\n }\n }, {\n key: \"toArray\",\n value: function toArray() {\n var _a = this._a,\n _b = this._b,\n _c = this._c,\n _d = this._d,\n space = this.space;\n return [_a, _b, _c, _d, space];\n }\n /*\r\n Generating random colors\r\n */\n\n }], [{\n key: \"random\",\n value: function random() {\n var mode = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'vibrant';\n var t = arguments.length > 1 ? arguments[1] : undefined;\n // Get the math modules\n var random = Math.random,\n round = Math.round,\n sin = Math.sin,\n pi = Math.PI; // Run the correct generator\n\n if (mode === 'vibrant') {\n var l = (81 - 57) * random() + 57;\n var c = (83 - 45) * random() + 45;\n var h = 360 * random();\n var color = new Color(l, c, h, 'lch');\n return color;\n } else if (mode === 'sine') {\n t = t == null ? random() : t;\n var r = round(80 * sin(2 * pi * t / 0.5 + 0.01) + 150);\n var g = round(50 * sin(2 * pi * t / 0.5 + 4.6) + 200);\n var b = round(100 * sin(2 * pi * t / 0.5 + 2.3) + 150);\n\n var _color4 = new Color(r, g, b);\n\n return _color4;\n } else if (mode === 'pastel') {\n var _l2 = (94 - 86) * random() + 86;\n\n var _c5 = (26 - 9) * random() + 9;\n\n var _h2 = 360 * random();\n\n var _color5 = new Color(_l2, _c5, _h2, 'lch');\n\n return _color5;\n } else if (mode === 'dark') {\n var _l3 = 10 + 10 * random();\n\n var _c6 = (125 - 75) * random() + 86;\n\n var _h3 = 360 * random();\n\n var _color6 = new Color(_l3, _c6, _h3, 'lch');\n\n return _color6;\n } else if (mode === 'rgb') {\n var _r3 = 255 * random();\n\n var _g3 = 255 * random();\n\n var _b7 = 255 * random();\n\n var _color7 = new Color(_r3, _g3, _b7);\n\n return _color7;\n } else if (mode === 'lab') {\n var _l4 = 100 * random();\n\n var a = 256 * random() - 128;\n\n var _b8 = 256 * random() - 128;\n\n var _color8 = new Color(_l4, a, _b8, 'lab');\n\n return _color8;\n } else if (mode === 'grey') {\n var grey = 255 * random();\n\n var _color9 = new Color(grey, grey, grey);\n\n return _color9;\n }\n }\n /*\r\n Constructing colors\r\n */\n // Test if given value is a color string\n\n }, {\n key: \"test\",\n value: function test(color) {\n return typeof color === 'string' && (isHex.test(color) || isRgb.test(color));\n } // Test if given value is an rgb object\n\n }, {\n key: \"isRgb\",\n value: function isRgb(color) {\n return color && typeof color.r === 'number' && typeof color.g === 'number' && typeof color.b === 'number';\n } // Test if given value is a color\n\n }, {\n key: \"isColor\",\n value: function isColor(color) {\n return color && (color instanceof Color || this.isRgb(color) || this.test(color));\n }\n }]);\n\n return Color;\n}();\n\nvar FAILS_ON_PRIMITIVES$1 = fails(function () { objectKeys(1); });\n\n// `Object.keys` method\n// https://tc39.github.io/ecma262/#sec-object.keys\n_export({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES$1 }, {\n keys: function keys(it) {\n return objectKeys(toObject(it));\n }\n});\n\n// @@match logic\nfixRegexpWellKnownSymbolLogic('match', 1, function (MATCH, nativeMatch, maybeCallNative) {\n return [\n // `String.prototype.match` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.match\n function match(regexp) {\n var O = requireObjectCoercible(this);\n var matcher = regexp == undefined ? undefined : regexp[MATCH];\n return matcher !== undefined ? matcher.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));\n },\n // `RegExp.prototype[@@match]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@match\n function (regexp) {\n var res = maybeCallNative(nativeMatch, regexp, this);\n if (res.done) return res.value;\n\n var rx = anObject(regexp);\n var S = String(this);\n\n if (!rx.global) return regexpExecAbstract(rx, S);\n\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n var A = [];\n var n = 0;\n var result;\n while ((result = regexpExecAbstract(rx, S)) !== null) {\n var matchStr = String(result[0]);\n A[n] = matchStr;\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n n++;\n }\n return n === 0 ? null : A;\n }\n ];\n});\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _superPropBase(object, property) {\n while (!Object.prototype.hasOwnProperty.call(object, property)) {\n object = _getPrototypeOf(object);\n if (object === null) break;\n }\n\n return object;\n}\n\nfunction _get(target, property, receiver) {\n if (typeof Reflect !== \"undefined\" && Reflect.get) {\n _get = Reflect.get;\n } else {\n _get = function _get(target, property, receiver) {\n var base = _superPropBase(target, property);\n if (!base) return;\n var desc = Object.getOwnPropertyDescriptor(base, property);\n\n if (desc.get) {\n return desc.get.call(receiver);\n }\n\n return desc.value;\n };\n }\n\n return _get(target, property, receiver || target);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nvar getOwnPropertyNames = objectGetOwnPropertyNames.f;\nvar getOwnPropertyDescriptor$2 = objectGetOwnPropertyDescriptor.f;\nvar defineProperty$5 = objectDefineProperty.f;\nvar trim$1 = stringTrim.trim;\n\nvar NUMBER = 'Number';\nvar NativeNumber = global_1[NUMBER];\nvar NumberPrototype = NativeNumber.prototype;\n\n// Opera ~12 has broken Object#toString\nvar BROKEN_CLASSOF = classofRaw(objectCreate(NumberPrototype)) == NUMBER;\n\n// `ToNumber` abstract operation\n// https://tc39.github.io/ecma262/#sec-tonumber\nvar toNumber = function (argument) {\n var it = toPrimitive(argument, false);\n var first, third, radix, maxCode, digits, length, index, code;\n if (typeof it == 'string' && it.length > 2) {\n it = trim$1(it);\n first = it.charCodeAt(0);\n if (first === 43 || first === 45) {\n third = it.charCodeAt(2);\n if (third === 88 || third === 120) return NaN; // Number('+0x1') should be NaN, old V8 fix\n } else if (first === 48) {\n switch (it.charCodeAt(1)) {\n case 66: case 98: radix = 2; maxCode = 49; break; // fast equal of /^0b[01]+$/i\n case 79: case 111: radix = 8; maxCode = 55; break; // fast equal of /^0o[0-7]+$/i\n default: return +it;\n }\n digits = it.slice(2);\n length = digits.length;\n for (index = 0; index < length; index++) {\n code = digits.charCodeAt(index);\n // parseInt parses a string to a first unavailable symbol\n // but ToNumber should return NaN if a string contains unavailable symbols\n if (code < 48 || code > maxCode) return NaN;\n } return parseInt(digits, radix);\n }\n } return +it;\n};\n\n// `Number` constructor\n// https://tc39.github.io/ecma262/#sec-number-constructor\nif (isForced_1(NUMBER, !NativeNumber(' 0o1') || !NativeNumber('0b1') || NativeNumber('+0x1'))) {\n var NumberWrapper = function Number(value) {\n var it = arguments.length < 1 ? 0 : value;\n var dummy = this;\n return dummy instanceof NumberWrapper\n // check on 1..constructor(foo) case\n && (BROKEN_CLASSOF ? fails(function () { NumberPrototype.valueOf.call(dummy); }) : classofRaw(dummy) != NUMBER)\n ? inheritIfRequired(new NativeNumber(toNumber(it)), dummy, NumberWrapper) : toNumber(it);\n };\n for (var keys$1 = descriptors ? getOwnPropertyNames(NativeNumber) : (\n // ES3:\n 'MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,' +\n // ES2015 (in case, if modules with ES2015 Number statics required before):\n 'EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,' +\n 'MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger'\n ).split(','), j = 0, key; keys$1.length > j; j++) {\n if (has(NativeNumber, key = keys$1[j]) && !has(NumberWrapper, key)) {\n defineProperty$5(NumberWrapper, key, getOwnPropertyDescriptor$2(NativeNumber, key));\n }\n }\n NumberWrapper.prototype = NumberPrototype;\n NumberPrototype.constructor = NumberWrapper;\n redefine(global_1, NUMBER, NumberWrapper);\n}\n\nvar trim$2 = stringTrim.trim;\n\n\nvar nativeParseFloat = global_1.parseFloat;\nvar FORCED$2 = 1 / nativeParseFloat(whitespaces + '-0') !== -Infinity;\n\n// `parseFloat` method\n// https://tc39.github.io/ecma262/#sec-parsefloat-string\nvar _parseFloat = FORCED$2 ? function parseFloat(string) {\n var trimmedString = trim$2(String(string));\n var result = nativeParseFloat(trimmedString);\n return result === 0 && trimmedString.charAt(0) == '-' ? -0 : result;\n} : nativeParseFloat;\n\n// `parseFloat` method\n// https://tc39.github.io/ecma262/#sec-parsefloat-string\n_export({ global: true, forced: parseFloat != _parseFloat }, {\n parseFloat: _parseFloat\n});\n\nvar Point =\n/*#__PURE__*/\nfunction () {\n // Initialize\n function Point() {\n _classCallCheck(this, Point);\n\n this.init.apply(this, arguments);\n }\n\n _createClass(Point, [{\n key: \"init\",\n value: function init(x, y) {\n var base = {\n x: 0,\n y: 0\n }; // ensure source as object\n\n var source = Array.isArray(x) ? {\n x: x[0],\n y: x[1]\n } : _typeof(x) === 'object' ? {\n x: x.x,\n y: x.y\n } : {\n x: x,\n y: y\n }; // merge source\n\n this.x = source.x == null ? base.x : source.x;\n this.y = source.y == null ? base.y : source.y;\n return this;\n } // Clone point\n\n }, {\n key: \"clone\",\n value: function clone() {\n return new Point(this);\n }\n }, {\n key: \"transform\",\n value: function transform(m) {\n return this.clone().transformO(m);\n } // Transform point with matrix\n\n }, {\n key: \"transformO\",\n value: function transformO(m) {\n if (!Matrix.isMatrixLike(m)) {\n m = new Matrix(m);\n }\n\n var x = this.x,\n y = this.y; // Perform the matrix multiplication\n\n this.x = m.a * x + m.c * y + m.e;\n this.y = m.b * x + m.d * y + m.f;\n return this;\n }\n }, {\n key: \"toArray\",\n value: function toArray() {\n return [this.x, this.y];\n }\n }]);\n\n return Point;\n}();\nfunction point(x, y) {\n return new Point(x, y).transform(this.screenCTM().inverse());\n}\n\nfunction closeEnough(a, b, threshold) {\n return Math.abs(b - a) < (threshold || 1e-6);\n}\n\nvar Matrix =\n/*#__PURE__*/\nfunction () {\n function Matrix() {\n _classCallCheck(this, Matrix);\n\n this.init.apply(this, arguments);\n } // Initialize\n\n\n _createClass(Matrix, [{\n key: \"init\",\n value: function init(source) {\n var base = Matrix.fromArray([1, 0, 0, 1, 0, 0]); // ensure source as object\n\n source = source instanceof Element ? source.matrixify() : typeof source === 'string' ? Matrix.fromArray(source.split(delimiter).map(parseFloat)) : Array.isArray(source) ? Matrix.fromArray(source) : _typeof(source) === 'object' && Matrix.isMatrixLike(source) ? source : _typeof(source) === 'object' ? new Matrix().transform(source) : arguments.length === 6 ? Matrix.fromArray([].slice.call(arguments)) : base; // Merge the source matrix with the base matrix\n\n this.a = source.a != null ? source.a : base.a;\n this.b = source.b != null ? source.b : base.b;\n this.c = source.c != null ? source.c : base.c;\n this.d = source.d != null ? source.d : base.d;\n this.e = source.e != null ? source.e : base.e;\n this.f = source.f != null ? source.f : base.f;\n return this;\n } // Clones this matrix\n\n }, {\n key: \"clone\",\n value: function clone() {\n return new Matrix(this);\n } // Transform a matrix into another matrix by manipulating the space\n\n }, {\n key: \"transform\",\n value: function transform(o) {\n // Check if o is a matrix and then left multiply it directly\n if (Matrix.isMatrixLike(o)) {\n var matrix = new Matrix(o);\n return matrix.multiplyO(this);\n } // Get the proposed transformations and the current transformations\n\n\n var t = Matrix.formatTransforms(o);\n var current = this;\n\n var _transform = new Point(t.ox, t.oy).transform(current),\n ox = _transform.x,\n oy = _transform.y; // Construct the resulting matrix\n\n\n var transformer = new Matrix().translateO(t.rx, t.ry).lmultiplyO(current).translateO(-ox, -oy).scaleO(t.scaleX, t.scaleY).skewO(t.skewX, t.skewY).shearO(t.shear).rotateO(t.theta).translateO(ox, oy); // If we want the origin at a particular place, we force it there\n\n if (isFinite(t.px) || isFinite(t.py)) {\n var origin = new Point(ox, oy).transform(transformer); // TODO: Replace t.px with isFinite(t.px)\n\n var dx = t.px ? t.px - origin.x : 0;\n var dy = t.py ? t.py - origin.y : 0;\n transformer.translateO(dx, dy);\n } // Translate now after positioning\n\n\n transformer.translateO(t.tx, t.ty);\n return transformer;\n } // Applies a matrix defined by its affine parameters\n\n }, {\n key: \"compose\",\n value: function compose(o) {\n if (o.origin) {\n o.originX = o.origin[0];\n o.originY = o.origin[1];\n } // Get the parameters\n\n\n var ox = o.originX || 0;\n var oy = o.originY || 0;\n var sx = o.scaleX || 1;\n var sy = o.scaleY || 1;\n var lam = o.shear || 0;\n var theta = o.rotate || 0;\n var tx = o.translateX || 0;\n var ty = o.translateY || 0; // Apply the standard matrix\n\n var result = new Matrix().translateO(-ox, -oy).scaleO(sx, sy).shearO(lam).rotateO(theta).translateO(tx, ty).lmultiplyO(this).translateO(ox, oy);\n return result;\n } // Decomposes this matrix into its affine parameters\n\n }, {\n key: \"decompose\",\n value: function decompose() {\n var cx = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n var cy = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n // Get the parameters from the matrix\n var a = this.a;\n var b = this.b;\n var c = this.c;\n var d = this.d;\n var e = this.e;\n var f = this.f; // Figure out if the winding direction is clockwise or counterclockwise\n\n var determinant = a * d - b * c;\n var ccw = determinant > 0 ? 1 : -1; // Since we only shear in x, we can use the x basis to get the x scale\n // and the rotation of the resulting matrix\n\n var sx = ccw * Math.sqrt(a * a + b * b);\n var thetaRad = Math.atan2(ccw * b, ccw * a);\n var theta = 180 / Math.PI * thetaRad;\n var ct = Math.cos(thetaRad);\n var st = Math.sin(thetaRad); // We can then solve the y basis vector simultaneously to get the other\n // two affine parameters directly from these parameters\n\n var lam = (a * c + b * d) / determinant;\n var sy = c * sx / (lam * a - b) || d * sx / (lam * b + a); // Use the translations\n\n var tx = e - cx + cx * ct * sx + cy * (lam * ct * sx - st * sy);\n var ty = f - cy + cx * st * sx + cy * (lam * st * sx + ct * sy); // Construct the decomposition and return it\n\n return {\n // Return the affine parameters\n scaleX: sx,\n scaleY: sy,\n shear: lam,\n rotate: theta,\n translateX: tx,\n translateY: ty,\n originX: cx,\n originY: cy,\n // Return the matrix parameters\n a: this.a,\n b: this.b,\n c: this.c,\n d: this.d,\n e: this.e,\n f: this.f\n };\n } // Left multiplies by the given matrix\n\n }, {\n key: \"multiply\",\n value: function multiply(matrix) {\n return this.clone().multiplyO(matrix);\n }\n }, {\n key: \"multiplyO\",\n value: function multiplyO(matrix) {\n // Get the matrices\n var l = this;\n var r = matrix instanceof Matrix ? matrix : new Matrix(matrix);\n return Matrix.matrixMultiply(l, r, this);\n }\n }, {\n key: \"lmultiply\",\n value: function lmultiply(matrix) {\n return this.clone().lmultiplyO(matrix);\n }\n }, {\n key: \"lmultiplyO\",\n value: function lmultiplyO(matrix) {\n var r = this;\n var l = matrix instanceof Matrix ? matrix : new Matrix(matrix);\n return Matrix.matrixMultiply(l, r, this);\n } // Inverses matrix\n\n }, {\n key: \"inverseO\",\n value: function inverseO() {\n // Get the current parameters out of the matrix\n var a = this.a;\n var b = this.b;\n var c = this.c;\n var d = this.d;\n var e = this.e;\n var f = this.f; // Invert the 2x2 matrix in the top left\n\n var det = a * d - b * c;\n if (!det) throw new Error('Cannot invert ' + this); // Calculate the top 2x2 matrix\n\n var na = d / det;\n var nb = -b / det;\n var nc = -c / det;\n var nd = a / det; // Apply the inverted matrix to the top right\n\n var ne = -(na * e + nc * f);\n var nf = -(nb * e + nd * f); // Construct the inverted matrix\n\n this.a = na;\n this.b = nb;\n this.c = nc;\n this.d = nd;\n this.e = ne;\n this.f = nf;\n return this;\n }\n }, {\n key: \"inverse\",\n value: function inverse() {\n return this.clone().inverseO();\n } // Translate matrix\n\n }, {\n key: \"translate\",\n value: function translate(x, y) {\n return this.clone().translateO(x, y);\n }\n }, {\n key: \"translateO\",\n value: function translateO(x, y) {\n this.e += x || 0;\n this.f += y || 0;\n return this;\n } // Scale matrix\n\n }, {\n key: \"scale\",\n value: function scale(x, y, cx, cy) {\n var _this$clone;\n\n return (_this$clone = this.clone()).scaleO.apply(_this$clone, arguments);\n }\n }, {\n key: \"scaleO\",\n value: function scaleO(x) {\n var y = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : x;\n var cx = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n var cy = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;\n\n // Support uniform scaling\n if (arguments.length === 3) {\n cy = cx;\n cx = y;\n y = x;\n }\n\n var a = this.a,\n b = this.b,\n c = this.c,\n d = this.d,\n e = this.e,\n f = this.f;\n this.a = a * x;\n this.b = b * y;\n this.c = c * x;\n this.d = d * y;\n this.e = e * x - cx * x + cx;\n this.f = f * y - cy * y + cy;\n return this;\n } // Rotate matrix\n\n }, {\n key: \"rotate\",\n value: function rotate(r, cx, cy) {\n return this.clone().rotateO(r, cx, cy);\n }\n }, {\n key: \"rotateO\",\n value: function rotateO(r) {\n var cx = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var cy = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n // Convert degrees to radians\n r = radians(r);\n var cos = Math.cos(r);\n var sin = Math.sin(r);\n var a = this.a,\n b = this.b,\n c = this.c,\n d = this.d,\n e = this.e,\n f = this.f;\n this.a = a * cos - b * sin;\n this.b = b * cos + a * sin;\n this.c = c * cos - d * sin;\n this.d = d * cos + c * sin;\n this.e = e * cos - f * sin + cy * sin - cx * cos + cx;\n this.f = f * cos + e * sin - cx * sin - cy * cos + cy;\n return this;\n } // Flip matrix on x or y, at a given offset\n\n }, {\n key: \"flip\",\n value: function flip(axis, around) {\n return this.clone().flipO(axis, around);\n }\n }, {\n key: \"flipO\",\n value: function flipO(axis, around) {\n return axis === 'x' ? this.scaleO(-1, 1, around, 0) : axis === 'y' ? this.scaleO(1, -1, 0, around) : this.scaleO(-1, -1, axis, around || axis); // Define an x, y flip point\n } // Shear matrix\n\n }, {\n key: \"shear\",\n value: function shear(a, cx, cy) {\n return this.clone().shearO(a, cx, cy);\n }\n }, {\n key: \"shearO\",\n value: function shearO(lx) {\n var cy = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n var a = this.a,\n b = this.b,\n c = this.c,\n d = this.d,\n e = this.e,\n f = this.f;\n this.a = a + b * lx;\n this.c = c + d * lx;\n this.e = e + f * lx - cy * lx;\n return this;\n } // Skew Matrix\n\n }, {\n key: \"skew\",\n value: function skew(x, y, cx, cy) {\n var _this$clone2;\n\n return (_this$clone2 = this.clone()).skewO.apply(_this$clone2, arguments);\n }\n }, {\n key: \"skewO\",\n value: function skewO(x) {\n var y = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : x;\n var cx = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n var cy = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;\n\n // support uniformal skew\n if (arguments.length === 3) {\n cy = cx;\n cx = y;\n y = x;\n } // Convert degrees to radians\n\n\n x = radians(x);\n y = radians(y);\n var lx = Math.tan(x);\n var ly = Math.tan(y);\n var a = this.a,\n b = this.b,\n c = this.c,\n d = this.d,\n e = this.e,\n f = this.f;\n this.a = a + b * lx;\n this.b = b + a * ly;\n this.c = c + d * lx;\n this.d = d + c * ly;\n this.e = e + f * lx - cy * lx;\n this.f = f + e * ly - cx * ly;\n return this;\n } // SkewX\n\n }, {\n key: \"skewX\",\n value: function skewX(x, cx, cy) {\n return this.skew(x, 0, cx, cy);\n }\n }, {\n key: \"skewXO\",\n value: function skewXO(x, cx, cy) {\n return this.skewO(x, 0, cx, cy);\n } // SkewY\n\n }, {\n key: \"skewY\",\n value: function skewY(y, cx, cy) {\n return this.skew(0, y, cx, cy);\n }\n }, {\n key: \"skewYO\",\n value: function skewYO(y, cx, cy) {\n return this.skewO(0, y, cx, cy);\n } // Transform around a center point\n\n }, {\n key: \"aroundO\",\n value: function aroundO(cx, cy, matrix) {\n var dx = cx || 0;\n var dy = cy || 0;\n return this.translateO(-dx, -dy).lmultiplyO(matrix).translateO(dx, dy);\n }\n }, {\n key: \"around\",\n value: function around(cx, cy, matrix) {\n return this.clone().aroundO(cx, cy, matrix);\n } // Check if two matrices are equal\n\n }, {\n key: \"equals\",\n value: function equals(other) {\n var comp = new Matrix(other);\n return closeEnough(this.a, comp.a) && closeEnough(this.b, comp.b) && closeEnough(this.c, comp.c) && closeEnough(this.d, comp.d) && closeEnough(this.e, comp.e) && closeEnough(this.f, comp.f);\n } // Convert matrix to string\n\n }, {\n key: \"toString\",\n value: function toString() {\n return 'matrix(' + this.a + ',' + this.b + ',' + this.c + ',' + this.d + ',' + this.e + ',' + this.f + ')';\n }\n }, {\n key: \"toArray\",\n value: function toArray() {\n return [this.a, this.b, this.c, this.d, this.e, this.f];\n }\n }, {\n key: \"valueOf\",\n value: function valueOf() {\n return {\n a: this.a,\n b: this.b,\n c: this.c,\n d: this.d,\n e: this.e,\n f: this.f\n };\n }\n }], [{\n key: \"fromArray\",\n value: function fromArray(a) {\n return {\n a: a[0],\n b: a[1],\n c: a[2],\n d: a[3],\n e: a[4],\n f: a[5]\n };\n }\n }, {\n key: \"isMatrixLike\",\n value: function isMatrixLike(o) {\n return o.a != null || o.b != null || o.c != null || o.d != null || o.e != null || o.f != null;\n }\n }, {\n key: \"formatTransforms\",\n value: function formatTransforms(o) {\n // Get all of the parameters required to form the matrix\n var flipBoth = o.flip === 'both' || o.flip === true;\n var flipX = o.flip && (flipBoth || o.flip === 'x') ? -1 : 1;\n var flipY = o.flip && (flipBoth || o.flip === 'y') ? -1 : 1;\n var skewX = o.skew && o.skew.length ? o.skew[0] : isFinite(o.skew) ? o.skew : isFinite(o.skewX) ? o.skewX : 0;\n var skewY = o.skew && o.skew.length ? o.skew[1] : isFinite(o.skew) ? o.skew : isFinite(o.skewY) ? o.skewY : 0;\n var scaleX = o.scale && o.scale.length ? o.scale[0] * flipX : isFinite(o.scale) ? o.scale * flipX : isFinite(o.scaleX) ? o.scaleX * flipX : flipX;\n var scaleY = o.scale && o.scale.length ? o.scale[1] * flipY : isFinite(o.scale) ? o.scale * flipY : isFinite(o.scaleY) ? o.scaleY * flipY : flipY;\n var shear = o.shear || 0;\n var theta = o.rotate || o.theta || 0;\n var origin = new Point(o.origin || o.around || o.ox || o.originX, o.oy || o.originY);\n var ox = origin.x;\n var oy = origin.y;\n var position = new Point(o.position || o.px || o.positionX, o.py || o.positionY);\n var px = position.x;\n var py = position.y;\n var translate = new Point(o.translate || o.tx || o.translateX, o.ty || o.translateY);\n var tx = translate.x;\n var ty = translate.y;\n var relative = new Point(o.relative || o.rx || o.relativeX, o.ry || o.relativeY);\n var rx = relative.x;\n var ry = relative.y; // Populate all of the values\n\n return {\n scaleX: scaleX,\n scaleY: scaleY,\n skewX: skewX,\n skewY: skewY,\n shear: shear,\n theta: theta,\n rx: rx,\n ry: ry,\n tx: tx,\n ty: ty,\n ox: ox,\n oy: oy,\n px: px,\n py: py\n };\n } // left matrix, right matrix, target matrix which is overwritten\n\n }, {\n key: \"matrixMultiply\",\n value: function matrixMultiply(l, r, o) {\n // Work out the product directly\n var a = l.a * r.a + l.c * r.b;\n var b = l.b * r.a + l.d * r.b;\n var c = l.a * r.c + l.c * r.d;\n var d = l.b * r.c + l.d * r.d;\n var e = l.e + l.a * r.e + l.c * r.f;\n var f = l.f + l.b * r.e + l.d * r.f; // make sure to use local variables because l/r and o could be the same\n\n o.a = a;\n o.b = b;\n o.c = c;\n o.d = d;\n o.e = e;\n o.f = f;\n return o;\n }\n }]);\n\n return Matrix;\n}();\nfunction ctm() {\n return new Matrix(this.node.getCTM());\n}\nfunction screenCTM() {\n /* https://bugzilla.mozilla.org/show_bug.cgi?id=1344537\r\n This is needed because FF does not return the transformation matrix\r\n for the inner coordinate system when getScreenCTM() is called on nested svgs.\r\n However all other Browsers do that */\n if (typeof this.isRoot === 'function' && !this.isRoot()) {\n var rect = this.rect(1, 1);\n var m = rect.node.getScreenCTM();\n rect.remove();\n return new Matrix(m);\n }\n\n return new Matrix(this.node.getScreenCTM());\n}\nregister(Matrix, 'Matrix');\n\nfunction parser() {\n // Reuse cached element if possible\n if (!parser.nodes) {\n var svg = makeInstance().size(2, 0);\n svg.node.style.cssText = ['opacity: 0', 'position: absolute', 'left: -100%', 'top: -100%', 'overflow: hidden'].join(';');\n svg.attr('focusable', 'false');\n svg.attr('aria-hidden', 'true');\n var path = svg.path().node;\n parser.nodes = {\n svg: svg,\n path: path\n };\n }\n\n if (!parser.nodes.svg.node.parentNode) {\n var b = globals.document.body || globals.document.documentElement;\n parser.nodes.svg.addTo(b);\n }\n\n return parser.nodes;\n}\n\nfunction isNulledBox(box) {\n return !box.width && !box.height && !box.x && !box.y;\n}\n\nfunction domContains(node) {\n return node === globals.document || (globals.document.documentElement.contains || function (node) {\n // This is IE - it does not support contains() for top-level SVGs\n while (node.parentNode) {\n node = node.parentNode;\n }\n\n return node === globals.document;\n }).call(globals.document.documentElement, node);\n}\n\nvar Box =\n/*#__PURE__*/\nfunction () {\n function Box() {\n _classCallCheck(this, Box);\n\n this.init.apply(this, arguments);\n }\n\n _createClass(Box, [{\n key: \"init\",\n value: function init(source) {\n var base = [0, 0, 0, 0];\n source = typeof source === 'string' ? source.split(delimiter).map(parseFloat) : Array.isArray(source) ? source : _typeof(source) === 'object' ? [source.left != null ? source.left : source.x, source.top != null ? source.top : source.y, source.width, source.height] : arguments.length === 4 ? [].slice.call(arguments) : base;\n this.x = source[0] || 0;\n this.y = source[1] || 0;\n this.width = this.w = source[2] || 0;\n this.height = this.h = source[3] || 0; // Add more bounding box properties\n\n this.x2 = this.x + this.w;\n this.y2 = this.y + this.h;\n this.cx = this.x + this.w / 2;\n this.cy = this.y + this.h / 2;\n return this;\n } // Merge rect box with another, return a new instance\n\n }, {\n key: \"merge\",\n value: function merge(box) {\n var x = Math.min(this.x, box.x);\n var y = Math.min(this.y, box.y);\n var width = Math.max(this.x + this.width, box.x + box.width) - x;\n var height = Math.max(this.y + this.height, box.y + box.height) - y;\n return new Box(x, y, width, height);\n }\n }, {\n key: \"transform\",\n value: function transform(m) {\n if (!(m instanceof Matrix)) {\n m = new Matrix(m);\n }\n\n var xMin = Infinity;\n var xMax = -Infinity;\n var yMin = Infinity;\n var yMax = -Infinity;\n var pts = [new Point(this.x, this.y), new Point(this.x2, this.y), new Point(this.x, this.y2), new Point(this.x2, this.y2)];\n pts.forEach(function (p) {\n p = p.transform(m);\n xMin = Math.min(xMin, p.x);\n xMax = Math.max(xMax, p.x);\n yMin = Math.min(yMin, p.y);\n yMax = Math.max(yMax, p.y);\n });\n return new Box(xMin, yMin, xMax - xMin, yMax - yMin);\n }\n }, {\n key: \"addOffset\",\n value: function addOffset() {\n // offset by window scroll position, because getBoundingClientRect changes when window is scrolled\n this.x += globals.window.pageXOffset;\n this.y += globals.window.pageYOffset;\n return this;\n }\n }, {\n key: \"toString\",\n value: function toString() {\n return this.x + ' ' + this.y + ' ' + this.width + ' ' + this.height;\n }\n }, {\n key: \"toArray\",\n value: function toArray() {\n return [this.x, this.y, this.width, this.height];\n }\n }, {\n key: \"isNulled\",\n value: function isNulled() {\n return isNulledBox(this);\n }\n }]);\n\n return Box;\n}();\n\nfunction getBox(cb, retry) {\n var box;\n\n try {\n box = cb(this.node);\n\n if (isNulledBox(box) && !domContains(this.node)) {\n throw new Error('Element not in the dom');\n }\n } catch (e) {\n box = retry(this);\n }\n\n return box;\n}\n\nfunction bbox() {\n return new Box(getBox.call(this, function (node) {\n return node.getBBox();\n }, function (el) {\n try {\n var clone = el.clone().addTo(parser().svg).show();\n var box = clone.node.getBBox();\n clone.remove();\n return box;\n } catch (e) {\n throw new Error('Getting bbox of element \"' + el.node.nodeName + '\" is not possible. ' + e.toString());\n }\n }));\n}\nfunction rbox(el) {\n var box = new Box(getBox.call(this, function (node) {\n return node.getBoundingClientRect();\n }, function (el) {\n throw new Error('Getting rbox of element \"' + el.node.nodeName + '\" is not possible');\n }));\n if (el) return box.transform(el.screenCTM().inverse());\n return box.addOffset();\n}\nregisterMethods({\n viewbox: {\n viewbox: function viewbox(x, y, width, height) {\n // act as getter\n if (x == null) return new Box(this.attr('viewBox')); // act as setter\n\n return this.attr('viewBox', new Box(x, y, width, height));\n },\n zoom: function zoom(level, point) {\n var width = this.node.clientWidth;\n var height = this.node.clientHeight;\n var v = this.viewbox(); // Firefox does not support clientHeight and returns 0\n // https://bugzilla.mozilla.org/show_bug.cgi?id=874811\n\n if (!width && !height) {\n var style = window.getComputedStyle(this.node);\n width = parseFloat(style.getPropertyValue('width'));\n height = parseFloat(style.getPropertyValue('height'));\n }\n\n var zoomX = width / v.width;\n var zoomY = height / v.height;\n var zoom = Math.min(zoomX, zoomY);\n\n if (level == null) {\n return zoom;\n }\n\n var zoomAmount = zoom / level;\n if (zoomAmount === Infinity) zoomAmount = Number.MIN_VALUE;\n point = point || new Point(width / 2 / zoomX + v.x, height / 2 / zoomY + v.y);\n var box = new Box(v).transform(new Matrix({\n scale: zoomAmount,\n origin: point\n }));\n return this.viewbox(box);\n }\n }\n});\nregister(Box, 'Box');\n\n/* eslint no-new-func: \"off\" */\nvar subClassArray = function () {\n try {\n // try es6 subclassing\n return Function('name', 'baseClass', '_constructor', ['baseClass = baseClass || Array', 'return {', ' [name]: class extends baseClass {', ' constructor (...args) {', ' super(...args)', ' _constructor && _constructor.apply(this, args)', ' }', ' }', '}[name]'].join('\\n'));\n } catch (e) {\n // Use es5 approach\n return function (name) {\n var baseClass = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : Array;\n\n var _constructor = arguments.length > 2 ? arguments[2] : undefined;\n\n var Arr = function Arr() {\n baseClass.apply(this, arguments);\n _constructor && _constructor.apply(this, arguments);\n };\n\n Arr.prototype = Object.create(baseClass.prototype);\n Arr.prototype.constructor = Arr;\n\n Arr.prototype.map = function (fn) {\n var arr = new Arr();\n arr.push.apply(arr, Array.prototype.map.call(this, fn));\n return arr;\n };\n\n return Arr;\n };\n }\n}();\n\nvar List = subClassArray('List', Array, function () {\n var arr = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n // This catches the case, that native map tries to create an array with new Array(1)\n if (typeof arr === 'number') return this;\n this.length = 0;\n this.push.apply(this, _toConsumableArray(arr));\n});\nextend(List, {\n each: function each(fnOrMethodName) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n if (typeof fnOrMethodName === 'function') {\n return this.map(function (el) {\n return fnOrMethodName.call(el, el);\n });\n } else {\n return this.map(function (el) {\n return el[fnOrMethodName].apply(el, args);\n });\n }\n },\n toArray: function toArray() {\n return Array.prototype.concat.apply([], this);\n }\n});\nvar reserved = ['toArray', 'constructor', 'each'];\n\nList.extend = function (methods) {\n methods = methods.reduce(function (obj, name) {\n // Don't overwrite own methods\n if (reserved.includes(name)) return obj; // Don't add private methods\n\n if (name[0] === '_') return obj; // Relay every call to each()\n\n obj[name] = function () {\n for (var _len2 = arguments.length, attrs = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n attrs[_key2] = arguments[_key2];\n }\n\n return this.each.apply(this, [name].concat(attrs));\n };\n\n return obj;\n }, {});\n extend(List, methods);\n};\n\nfunction baseFind(query, parent) {\n return new List(map((parent || globals.document).querySelectorAll(query), function (node) {\n return adopt(node);\n }));\n} // Scoped find method\n\nfunction find(query) {\n return baseFind(query, this.node);\n}\nfunction findOne(query) {\n return adopt(this.node.querySelector(query));\n}\n\nvar EventTarget =\n/*#__PURE__*/\nfunction (_Base) {\n _inherits(EventTarget, _Base);\n\n function EventTarget() {\n var _this;\n\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n _ref$events = _ref.events,\n events = _ref$events === void 0 ? {} : _ref$events;\n\n _classCallCheck(this, EventTarget);\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(EventTarget).call(this));\n _this.events = events;\n return _this;\n }\n\n _createClass(EventTarget, [{\n key: \"addEventListener\",\n value: function addEventListener() {}\n }, {\n key: \"dispatch\",\n value: function dispatch$1(event, data) {\n return dispatch(this, event, data);\n }\n }, {\n key: \"dispatchEvent\",\n value: function dispatchEvent(event) {\n var bag = this.getEventHolder().events;\n if (!bag) return true;\n var events = bag[event.type];\n\n for (var i in events) {\n for (var j in events[i]) {\n events[i][j](event);\n }\n }\n\n return !event.defaultPrevented;\n } // Fire given event\n\n }, {\n key: \"fire\",\n value: function fire(event, data) {\n this.dispatch(event, data);\n return this;\n }\n }, {\n key: \"getEventHolder\",\n value: function getEventHolder() {\n return this;\n }\n }, {\n key: \"getEventTarget\",\n value: function getEventTarget() {\n return this;\n } // Unbind event from listener\n\n }, {\n key: \"off\",\n value: function off$1(event, listener) {\n off(this, event, listener);\n\n return this;\n } // Bind given event to listener\n\n }, {\n key: \"on\",\n value: function on$1(event, listener, binding, options) {\n on(this, event, listener, binding, options);\n\n return this;\n }\n }, {\n key: \"removeEventListener\",\n value: function removeEventListener() {}\n }]);\n\n return EventTarget;\n}(Base);\nregister(EventTarget, 'EventTarget');\n\nfunction noop() {} // Default animation values\n\nvar timeline = {\n duration: 400,\n ease: '>',\n delay: 0\n}; // Default attribute values\n\nvar attrs = {\n // fill and stroke\n 'fill-opacity': 1,\n 'stroke-opacity': 1,\n 'stroke-width': 0,\n 'stroke-linejoin': 'miter',\n 'stroke-linecap': 'butt',\n fill: '#000000',\n stroke: '#000000',\n opacity: 1,\n // position\n x: 0,\n y: 0,\n cx: 0,\n cy: 0,\n // size\n width: 0,\n height: 0,\n // radius\n r: 0,\n rx: 0,\n ry: 0,\n // gradient\n offset: 0,\n 'stop-opacity': 1,\n 'stop-color': '#000000',\n // text\n 'text-anchor': 'start'\n};\n\nvar defaults = ({\n\t__proto__: null,\n\tnoop: noop,\n\ttimeline: timeline,\n\tattrs: attrs\n});\n\nvar SVGArray = subClassArray('SVGArray', Array, function (arr) {\n this.init(arr);\n});\nextend(SVGArray, {\n init: function init(arr) {\n // This catches the case, that native map tries to create an array with new Array(1)\n if (typeof arr === 'number') return this;\n this.length = 0;\n this.push.apply(this, _toConsumableArray(this.parse(arr)));\n return this;\n },\n toArray: function toArray() {\n return Array.prototype.concat.apply([], this);\n },\n toString: function toString() {\n return this.join(' ');\n },\n // Flattens the array if needed\n valueOf: function valueOf() {\n var ret = [];\n ret.push.apply(ret, _toConsumableArray(this));\n return ret;\n },\n // Parse whitespace separated string\n parse: function parse() {\n var array = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n // If already is an array, no need to parse it\n if (array instanceof Array) return array;\n return array.trim().split(delimiter).map(parseFloat);\n },\n clone: function clone() {\n return new this.constructor(this);\n },\n toSet: function toSet() {\n return new Set(this);\n }\n});\n\nvar SVGNumber =\n/*#__PURE__*/\nfunction () {\n // Initialize\n function SVGNumber() {\n _classCallCheck(this, SVGNumber);\n\n this.init.apply(this, arguments);\n }\n\n _createClass(SVGNumber, [{\n key: \"init\",\n value: function init(value, unit) {\n unit = Array.isArray(value) ? value[1] : unit;\n value = Array.isArray(value) ? value[0] : value; // initialize defaults\n\n this.value = 0;\n this.unit = unit || ''; // parse value\n\n if (typeof value === 'number') {\n // ensure a valid numeric value\n this.value = isNaN(value) ? 0 : !isFinite(value) ? value < 0 ? -3.4e+38 : +3.4e+38 : value;\n } else if (typeof value === 'string') {\n unit = value.match(numberAndUnit);\n\n if (unit) {\n // make value numeric\n this.value = parseFloat(unit[1]); // normalize\n\n if (unit[5] === '%') {\n this.value /= 100;\n } else if (unit[5] === 's') {\n this.value *= 1000;\n } // store unit\n\n\n this.unit = unit[5];\n }\n } else {\n if (value instanceof SVGNumber) {\n this.value = value.valueOf();\n this.unit = value.unit;\n }\n }\n\n return this;\n }\n }, {\n key: \"toString\",\n value: function toString() {\n return (this.unit === '%' ? ~~(this.value * 1e8) / 1e6 : this.unit === 's' ? this.value / 1e3 : this.value) + this.unit;\n }\n }, {\n key: \"toJSON\",\n value: function toJSON() {\n return this.toString();\n }\n }, {\n key: \"toArray\",\n value: function toArray() {\n return [this.value, this.unit];\n }\n }, {\n key: \"valueOf\",\n value: function valueOf() {\n return this.value;\n } // Add number\n\n }, {\n key: \"plus\",\n value: function plus(number) {\n number = new SVGNumber(number);\n return new SVGNumber(this + number, this.unit || number.unit);\n } // Subtract number\n\n }, {\n key: \"minus\",\n value: function minus(number) {\n number = new SVGNumber(number);\n return new SVGNumber(this - number, this.unit || number.unit);\n } // Multiply number\n\n }, {\n key: \"times\",\n value: function times(number) {\n number = new SVGNumber(number);\n return new SVGNumber(this * number, this.unit || number.unit);\n } // Divide number\n\n }, {\n key: \"divide\",\n value: function divide(number) {\n number = new SVGNumber(number);\n return new SVGNumber(this / number, this.unit || number.unit);\n }\n }, {\n key: \"convert\",\n value: function convert(unit) {\n return new SVGNumber(this.value, unit);\n }\n }]);\n\n return SVGNumber;\n}();\n\nvar hooks = [];\nfunction registerAttrHook(fn) {\n hooks.push(fn);\n} // Set svg element attribute\n\nfunction attr(attr, val, ns) {\n var _this = this;\n\n // act as full getter\n if (attr == null) {\n // get an object of attributes\n attr = {};\n val = this.node.attributes;\n var _iteratorNormalCompletion = true;\n var _didIteratorError = false;\n var _iteratorError = undefined;\n\n try {\n for (var _iterator = val[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var node = _step.value;\n attr[node.nodeName] = isNumber.test(node.nodeValue) ? parseFloat(node.nodeValue) : node.nodeValue;\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n\n return attr;\n } else if (attr instanceof Array) {\n // loop through array and get all values\n return attr.reduce(function (last, curr) {\n last[curr] = _this.attr(curr);\n return last;\n }, {});\n } else if (_typeof(attr) === 'object' && attr.constructor === Object) {\n // apply every attribute individually if an object is passed\n for (val in attr) {\n this.attr(val, attr[val]);\n }\n } else if (val === null) {\n // remove value\n this.node.removeAttribute(attr);\n } else if (val == null) {\n // act as a getter if the first and only argument is not an object\n val = this.node.getAttribute(attr);\n return val == null ? attrs[attr] : isNumber.test(val) ? parseFloat(val) : val;\n } else {\n // Loop through hooks and execute them to convert value\n val = hooks.reduce(function (_val, hook) {\n return hook(attr, _val, _this);\n }, val); // ensure correct numeric values (also accepts NaN and Infinity)\n\n if (typeof val === 'number') {\n val = new SVGNumber(val);\n } else if (Color.isColor(val)) {\n // ensure full hex color\n val = new Color(val);\n } else if (val.constructor === Array) {\n // Check for plain arrays and parse array values\n val = new SVGArray(val);\n } // if the passed attribute is leading...\n\n\n if (attr === 'leading') {\n // ... call the leading method instead\n if (this.leading) {\n this.leading(val);\n }\n } else {\n // set given attribute on node\n typeof ns === 'string' ? this.node.setAttributeNS(ns, attr, val.toString()) : this.node.setAttribute(attr, val.toString());\n } // rebuild if required\n\n\n if (this.rebuild && (attr === 'font-size' || attr === 'x')) {\n this.rebuild();\n }\n }\n\n return this;\n}\n\nvar Dom =\n/*#__PURE__*/\nfunction (_EventTarget) {\n _inherits(Dom, _EventTarget);\n\n function Dom(node, attrs) {\n var _this2;\n\n _classCallCheck(this, Dom);\n\n _this2 = _possibleConstructorReturn(this, _getPrototypeOf(Dom).call(this, node));\n _this2.node = node;\n _this2.type = node.nodeName;\n\n if (attrs && node !== attrs) {\n _this2.attr(attrs);\n }\n\n return _this2;\n } // Add given element at a position\n\n\n _createClass(Dom, [{\n key: \"add\",\n value: function add(element, i) {\n element = makeInstance(element);\n\n if (i == null) {\n this.node.appendChild(element.node);\n } else if (element.node !== this.node.childNodes[i]) {\n this.node.insertBefore(element.node, this.node.childNodes[i]);\n }\n\n return this;\n } // Add element to given container and return self\n\n }, {\n key: \"addTo\",\n value: function addTo(parent) {\n return makeInstance(parent).put(this);\n } // Returns all child elements\n\n }, {\n key: \"children\",\n value: function children() {\n return new List(map(this.node.children, function (node) {\n return adopt(node);\n }));\n } // Remove all elements in this container\n\n }, {\n key: \"clear\",\n value: function clear() {\n // remove children\n while (this.node.hasChildNodes()) {\n this.node.removeChild(this.node.lastChild);\n }\n\n return this;\n } // Clone element\n\n }, {\n key: \"clone\",\n value: function clone() {\n // write dom data to the dom so the clone can pickup the data\n this.writeDataToDom(); // clone element and assign new id\n\n return assignNewId(this.node.cloneNode(true));\n } // Iterates over all children and invokes a given block\n\n }, {\n key: \"each\",\n value: function each(block, deep) {\n var children = this.children();\n var i, il;\n\n for (i = 0, il = children.length; i < il; i++) {\n block.apply(children[i], [i, children]);\n\n if (deep) {\n children[i].each(block, deep);\n }\n }\n\n return this;\n }\n }, {\n key: \"element\",\n value: function element(nodeName) {\n return this.put(new Dom(create(nodeName)));\n } // Get first child\n\n }, {\n key: \"first\",\n value: function first() {\n return adopt(this.node.firstChild);\n } // Get a element at the given index\n\n }, {\n key: \"get\",\n value: function get(i) {\n return adopt(this.node.childNodes[i]);\n }\n }, {\n key: \"getEventHolder\",\n value: function getEventHolder() {\n return this.node;\n }\n }, {\n key: \"getEventTarget\",\n value: function getEventTarget() {\n return this.node;\n } // Checks if the given element is a child\n\n }, {\n key: \"has\",\n value: function has(element) {\n return this.index(element) >= 0;\n } // Get / set id\n\n }, {\n key: \"id\",\n value: function id(_id) {\n // generate new id if no id set\n if (typeof _id === 'undefined' && !this.node.id) {\n this.node.id = eid(this.type);\n } // dont't set directly width this.node.id to make `null` work correctly\n\n\n return this.attr('id', _id);\n } // Gets index of given element\n\n }, {\n key: \"index\",\n value: function index(element) {\n return [].slice.call(this.node.childNodes).indexOf(element.node);\n } // Get the last child\n\n }, {\n key: \"last\",\n value: function last() {\n return adopt(this.node.lastChild);\n } // matches the element vs a css selector\n\n }, {\n key: \"matches\",\n value: function matches(selector) {\n var el = this.node;\n return (el.matches || el.matchesSelector || el.msMatchesSelector || el.mozMatchesSelector || el.webkitMatchesSelector || el.oMatchesSelector).call(el, selector);\n } // Returns the parent element instance\n\n }, {\n key: \"parent\",\n value: function parent(type) {\n var parent = this; // check for parent\n\n if (!parent.node.parentNode) return null; // get parent element\n\n parent = adopt(parent.node.parentNode);\n if (!type) return parent; // loop trough ancestors if type is given\n\n while (parent) {\n if (typeof type === 'string' ? parent.matches(type) : parent instanceof type) return parent;\n if (!parent.node.parentNode || parent.node.parentNode.nodeName === '#document' || parent.node.parentNode.nodeName === '#document-fragment') return null; // #759, #720\n\n parent = adopt(parent.node.parentNode);\n }\n } // Basically does the same as `add()` but returns the added element instead\n\n }, {\n key: \"put\",\n value: function put(element, i) {\n this.add(element, i);\n return element;\n } // Add element to given container and return container\n\n }, {\n key: \"putIn\",\n value: function putIn(parent) {\n return makeInstance(parent).add(this);\n } // Remove element\n\n }, {\n key: \"remove\",\n value: function remove() {\n if (this.parent()) {\n this.parent().removeElement(this);\n }\n\n return this;\n } // Remove a given child\n\n }, {\n key: \"removeElement\",\n value: function removeElement(element) {\n this.node.removeChild(element.node);\n return this;\n } // Replace this with element\n\n }, {\n key: \"replace\",\n value: function replace(element) {\n element = makeInstance(element);\n this.node.parentNode.replaceChild(element.node, this.node);\n return element;\n }\n }, {\n key: \"round\",\n value: function round() {\n var precision = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 2;\n var map = arguments.length > 1 ? arguments[1] : undefined;\n var factor = Math.pow(10, precision);\n var attrs = this.attr(); // If we have no map, build one from attrs\n\n if (!map) {\n map = Object.keys(attrs);\n } // Holds rounded attributes\n\n\n var newAttrs = {};\n map.forEach(function (key) {\n newAttrs[key] = Math.round(attrs[key] * factor) / factor;\n });\n this.attr(newAttrs);\n return this;\n } // Return id on string conversion\n\n }, {\n key: \"toString\",\n value: function toString() {\n return this.id();\n } // Import raw svg\n\n }, {\n key: \"svg\",\n value: function svg(svgOrFn, outerHTML) {\n var well, len, fragment;\n\n if (svgOrFn === false) {\n outerHTML = false;\n svgOrFn = null;\n } // act as getter if no svg string is given\n\n\n if (svgOrFn == null || typeof svgOrFn === 'function') {\n // The default for exports is, that the outerNode is included\n outerHTML = outerHTML == null ? true : outerHTML; // write svgjs data to the dom\n\n this.writeDataToDom();\n var current = this; // An export modifier was passed\n\n if (svgOrFn != null) {\n current = adopt(current.node.cloneNode(true)); // If the user wants outerHTML we need to process this node, too\n\n if (outerHTML) {\n var result = svgOrFn(current);\n current = result || current; // The user does not want this node? Well, then he gets nothing\n\n if (result === false) return '';\n } // Deep loop through all children and apply modifier\n\n\n current.each(function () {\n var result = svgOrFn(this);\n\n var _this = result || this; // If modifier returns false, discard node\n\n\n if (result === false) {\n this.remove(); // If modifier returns new node, use it\n } else if (result && this !== _this) {\n this.replace(_this);\n }\n }, true);\n } // Return outer or inner content\n\n\n return outerHTML ? current.node.outerHTML : current.node.innerHTML;\n } // Act as setter if we got a string\n // The default for import is, that the current node is not replaced\n\n\n outerHTML = outerHTML == null ? false : outerHTML; // Create temporary holder\n\n well = globals.document.createElementNS(ns, 'svg');\n fragment = globals.document.createDocumentFragment(); // Dump raw svg\n\n well.innerHTML = svgOrFn; // Transplant nodes into the fragment\n\n for (len = well.children.length; len--;) {\n fragment.appendChild(well.firstElementChild);\n }\n\n var parent = this.parent(); // Add the whole fragment at once\n\n return outerHTML ? this.replace(fragment) && parent : this.add(fragment);\n }\n }, {\n key: \"words\",\n value: function words(text) {\n // This is faster than removing all children and adding a new one\n this.node.textContent = text;\n return this;\n } // write svgjs data to the dom\n\n }, {\n key: \"writeDataToDom\",\n value: function writeDataToDom() {\n // dump variables recursively\n this.each(function () {\n this.writeDataToDom();\n });\n return this;\n }\n }]);\n\n return Dom;\n}(EventTarget);\nextend(Dom, {\n attr: attr,\n find: find,\n findOne: findOne\n});\nregister(Dom, 'Dom');\n\nvar Element =\n/*#__PURE__*/\nfunction (_Dom) {\n _inherits(Element, _Dom);\n\n function Element(node, attrs) {\n var _this;\n\n _classCallCheck(this, Element);\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(Element).call(this, node, attrs)); // initialize data object\n\n _this.dom = {}; // create circular reference\n\n _this.node.instance = _assertThisInitialized(_this);\n\n if (node.hasAttribute('svgjs:data')) {\n // pull svgjs data from the dom (getAttributeNS doesn't work in html5)\n _this.setData(JSON.parse(node.getAttribute('svgjs:data')) || {});\n }\n\n return _this;\n } // Move element by its center\n\n\n _createClass(Element, [{\n key: \"center\",\n value: function center(x, y) {\n return this.cx(x).cy(y);\n } // Move by center over x-axis\n\n }, {\n key: \"cx\",\n value: function cx(x) {\n return x == null ? this.x() + this.width() / 2 : this.x(x - this.width() / 2);\n } // Move by center over y-axis\n\n }, {\n key: \"cy\",\n value: function cy(y) {\n return y == null ? this.y() + this.height() / 2 : this.y(y - this.height() / 2);\n } // Get defs\n\n }, {\n key: \"defs\",\n value: function defs() {\n return this.root().defs();\n } // Relative move over x and y axes\n\n }, {\n key: \"dmove\",\n value: function dmove(x, y) {\n return this.dx(x).dy(y);\n } // Relative move over x axis\n\n }, {\n key: \"dx\",\n value: function dx() {\n var x = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n return this.x(new SVGNumber(x).plus(this.x()));\n } // Relative move over y axis\n\n }, {\n key: \"dy\",\n value: function dy() {\n var y = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n return this.y(new SVGNumber(y).plus(this.y()));\n } // Get parent document\n\n }, {\n key: \"root\",\n value: function root$1() {\n var p = this.parent(getClass(root));\n return p && p.root();\n }\n }, {\n key: \"getEventHolder\",\n value: function getEventHolder() {\n return this;\n } // Set height of element\n\n }, {\n key: \"height\",\n value: function height(_height) {\n return this.attr('height', _height);\n } // Checks whether the given point inside the bounding box of the element\n\n }, {\n key: \"inside\",\n value: function inside(x, y) {\n var box = this.bbox();\n return x > box.x && y > box.y && x < box.x + box.width && y < box.y + box.height;\n } // Move element to given x and y values\n\n }, {\n key: \"move\",\n value: function move(x, y) {\n return this.x(x).y(y);\n } // return array of all ancestors of given type up to the root svg\n\n }, {\n key: \"parents\",\n value: function parents() {\n var until = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : globals.document;\n until = makeInstance(until);\n var parents = new List();\n var parent = this;\n\n while ((parent = parent.parent()) && parent.node !== until.node && parent.node !== globals.document) {\n parents.push(parent);\n }\n\n return parents;\n } // Get referenced element form attribute value\n\n }, {\n key: \"reference\",\n value: function reference$1(attr) {\n attr = this.attr(attr);\n if (!attr) return null;\n var m = attr.match(reference);\n return m ? makeInstance(m[1]) : null;\n } // set given data to the elements data property\n\n }, {\n key: \"setData\",\n value: function setData(o) {\n this.dom = o;\n return this;\n } // Set element size to given width and height\n\n }, {\n key: \"size\",\n value: function size(width, height) {\n var p = proportionalSize(this, width, height);\n return this.width(new SVGNumber(p.width)).height(new SVGNumber(p.height));\n } // Set width of element\n\n }, {\n key: \"width\",\n value: function width(_width) {\n return this.attr('width', _width);\n } // write svgjs data to the dom\n\n }, {\n key: \"writeDataToDom\",\n value: function writeDataToDom() {\n // remove previously set data\n this.node.removeAttribute('svgjs:data');\n\n if (Object.keys(this.dom).length) {\n this.node.setAttribute('svgjs:data', JSON.stringify(this.dom)); // see #428\n }\n\n return _get(_getPrototypeOf(Element.prototype), \"writeDataToDom\", this).call(this);\n } // Move over x-axis\n\n }, {\n key: \"x\",\n value: function x(_x) {\n return this.attr('x', _x);\n } // Move over y-axis\n\n }, {\n key: \"y\",\n value: function y(_y) {\n return this.attr('y', _y);\n }\n }]);\n\n return Element;\n}(Dom);\nextend(Element, {\n bbox: bbox,\n rbox: rbox,\n point: point,\n ctm: ctm,\n screenCTM: screenCTM\n});\nregister(Element, 'Element');\n\nvar sugar = {\n stroke: ['color', 'width', 'opacity', 'linecap', 'linejoin', 'miterlimit', 'dasharray', 'dashoffset'],\n fill: ['color', 'opacity', 'rule'],\n prefix: function prefix(t, a) {\n return a === 'color' ? t : t + '-' + a;\n }\n} // Add sugar for fill and stroke\n;\n['fill', 'stroke'].forEach(function (m) {\n var extension = {};\n var i;\n\n extension[m] = function (o) {\n if (typeof o === 'undefined') {\n return this.attr(m);\n }\n\n if (typeof o === 'string' || o instanceof Color || Color.isRgb(o) || o instanceof Element) {\n this.attr(m, o);\n } else {\n // set all attributes from sugar.fill and sugar.stroke list\n for (i = sugar[m].length - 1; i >= 0; i--) {\n if (o[sugar[m][i]] != null) {\n this.attr(sugar.prefix(m, sugar[m][i]), o[sugar[m][i]]);\n }\n }\n }\n\n return this;\n };\n\n registerMethods(['Element', 'Runner'], extension);\n});\nregisterMethods(['Element', 'Runner'], {\n // Let the user set the matrix directly\n matrix: function matrix(mat, b, c, d, e, f) {\n // Act as a getter\n if (mat == null) {\n return new Matrix(this);\n } // Act as a setter, the user can pass a matrix or a set of numbers\n\n\n return this.attr('transform', new Matrix(mat, b, c, d, e, f));\n },\n // Map rotation to transform\n rotate: function rotate(angle, cx, cy) {\n return this.transform({\n rotate: angle,\n ox: cx,\n oy: cy\n }, true);\n },\n // Map skew to transform\n skew: function skew(x, y, cx, cy) {\n return arguments.length === 1 || arguments.length === 3 ? this.transform({\n skew: x,\n ox: y,\n oy: cx\n }, true) : this.transform({\n skew: [x, y],\n ox: cx,\n oy: cy\n }, true);\n },\n shear: function shear(lam, cx, cy) {\n return this.transform({\n shear: lam,\n ox: cx,\n oy: cy\n }, true);\n },\n // Map scale to transform\n scale: function scale(x, y, cx, cy) {\n return arguments.length === 1 || arguments.length === 3 ? this.transform({\n scale: x,\n ox: y,\n oy: cx\n }, true) : this.transform({\n scale: [x, y],\n ox: cx,\n oy: cy\n }, true);\n },\n // Map translate to transform\n translate: function translate(x, y) {\n return this.transform({\n translate: [x, y]\n }, true);\n },\n // Map relative translations to transform\n relative: function relative(x, y) {\n return this.transform({\n relative: [x, y]\n }, true);\n },\n // Map flip to transform\n flip: function flip(direction, around) {\n var directionString = typeof direction === 'string' ? direction : isFinite(direction) ? 'both' : 'both';\n var origin = direction === 'both' && isFinite(around) ? [around, around] : direction === 'x' ? [around, 0] : direction === 'y' ? [0, around] : isFinite(direction) ? [direction, direction] : [0, 0];\n return this.transform({\n flip: directionString,\n origin: origin\n }, true);\n },\n // Opacity\n opacity: function opacity(value) {\n return this.attr('opacity', value);\n }\n});\nregisterMethods('radius', {\n // Add x and y radius\n radius: function radius(x, y) {\n var type = (this._element || this).type;\n return type === 'radialGradient' || type === 'radialGradient' ? this.attr('r', new SVGNumber(x)) : this.rx(x).ry(y == null ? x : y);\n }\n});\nregisterMethods('Path', {\n // Get path length\n length: function length() {\n return this.node.getTotalLength();\n },\n // Get point at length\n pointAt: function pointAt(length) {\n return new Point(this.node.getPointAtLength(length));\n }\n});\nregisterMethods(['Element', 'Runner'], {\n // Set font\n font: function font(a, v) {\n if (_typeof(a) === 'object') {\n for (v in a) {\n this.font(v, a[v]);\n }\n\n return this;\n }\n\n return a === 'leading' ? this.leading(v) : a === 'anchor' ? this.attr('text-anchor', v) : a === 'size' || a === 'family' || a === 'weight' || a === 'stretch' || a === 'variant' || a === 'style' ? this.attr('font-' + a, v) : this.attr(a, v);\n }\n});\nregisterMethods('Text', {\n ax: function ax(x) {\n return this.attr('x', x);\n },\n ay: function ay(y) {\n return this.attr('y', y);\n },\n amove: function amove(x, y) {\n return this.ax(x).ay(y);\n }\n}); // Add events to elements\n\nvar methods$1 = ['click', 'dblclick', 'mousedown', 'mouseup', 'mouseover', 'mouseout', 'mousemove', 'mouseenter', 'mouseleave', 'touchstart', 'touchmove', 'touchleave', 'touchend', 'touchcancel'].reduce(function (last, event) {\n // add event to Element\n var fn = function fn(f) {\n if (f === null) {\n off(this, event);\n } else {\n on(this, event, f);\n }\n\n return this;\n };\n\n last[event] = fn;\n return last;\n}, {});\nregisterMethods('Element', methods$1);\n\nvar nativeReverse = [].reverse;\nvar test$1 = [1, 2];\n\n// `Array.prototype.reverse` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.reverse\n// fix for Safari 12.0 bug\n// https://bugs.webkit.org/show_bug.cgi?id=188794\n_export({ target: 'Array', proto: true, forced: String(test$1) === String(test$1.reverse()) }, {\n reverse: function reverse() {\n // eslint-disable-next-line no-self-assign\n if (isArray(this)) this.length = this.length;\n return nativeReverse.call(this);\n }\n});\n\n// `Object.defineProperties` method\n// https://tc39.github.io/ecma262/#sec-object.defineproperties\n_export({ target: 'Object', stat: true, forced: !descriptors, sham: !descriptors }, {\n defineProperties: objectDefineProperties\n});\n\n// `Object.defineProperty` method\n// https://tc39.github.io/ecma262/#sec-object.defineproperty\n_export({ target: 'Object', stat: true, forced: !descriptors, sham: !descriptors }, {\n defineProperty: objectDefineProperty.f\n});\n\nvar nativeGetOwnPropertyDescriptor$2 = objectGetOwnPropertyDescriptor.f;\n\n\nvar FAILS_ON_PRIMITIVES$2 = fails(function () { nativeGetOwnPropertyDescriptor$2(1); });\nvar FORCED$3 = !descriptors || FAILS_ON_PRIMITIVES$2;\n\n// `Object.getOwnPropertyDescriptor` method\n// https://tc39.github.io/ecma262/#sec-object.getownpropertydescriptor\n_export({ target: 'Object', stat: true, forced: FORCED$3, sham: !descriptors }, {\n getOwnPropertyDescriptor: function getOwnPropertyDescriptor(it, key) {\n return nativeGetOwnPropertyDescriptor$2(toIndexedObject(it), key);\n }\n});\n\n// `Object.getOwnPropertyDescriptors` method\n// https://tc39.github.io/ecma262/#sec-object.getownpropertydescriptors\n_export({ target: 'Object', stat: true, sham: !descriptors }, {\n getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {\n var O = toIndexedObject(object);\n var getOwnPropertyDescriptor = objectGetOwnPropertyDescriptor.f;\n var keys = ownKeys(O);\n var result = {};\n var index = 0;\n var key, descriptor;\n while (keys.length > index) {\n descriptor = getOwnPropertyDescriptor(O, key = keys[index++]);\n if (descriptor !== undefined) createProperty(result, key, descriptor);\n }\n return result;\n }\n});\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction ownKeys$1(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys$1(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys$1(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction untransform() {\n return this.attr('transform', null);\n} // merge the whole transformation chain into one matrix and returns it\n\nfunction matrixify() {\n var matrix = (this.attr('transform') || ''). // split transformations\n split(transforms).slice(0, -1).map(function (str) {\n // generate key => value pairs\n var kv = str.trim().split('(');\n return [kv[0], kv[1].split(delimiter).map(function (str) {\n return parseFloat(str);\n })];\n }).reverse() // merge every transformation into one matrix\n .reduce(function (matrix, transform) {\n if (transform[0] === 'matrix') {\n return matrix.lmultiply(Matrix.fromArray(transform[1]));\n }\n\n return matrix[transform[0]].apply(matrix, transform[1]);\n }, new Matrix());\n return matrix;\n} // add an element to another parent without changing the visual representation on the screen\n\nfunction toParent(parent) {\n if (this === parent) return this;\n var ctm = this.screenCTM();\n var pCtm = parent.screenCTM().inverse();\n this.addTo(parent).untransform().transform(pCtm.multiply(ctm));\n return this;\n} // same as above with parent equals root-svg\n\nfunction toRoot() {\n return this.toParent(this.root());\n} // Add transformations\n\nfunction transform(o, relative) {\n // Act as a getter if no object was passed\n if (o == null || typeof o === 'string') {\n var decomposed = new Matrix(this).decompose();\n return o == null ? decomposed : decomposed[o];\n }\n\n if (!Matrix.isMatrixLike(o)) {\n // Set the origin according to the defined transform\n o = _objectSpread({}, o, {\n origin: getOrigin(o, this)\n });\n } // The user can pass a boolean, an Element or an Matrix or nothing\n\n\n var cleanRelative = relative === true ? this : relative || false;\n var result = new Matrix(cleanRelative).transform(o);\n return this.attr('transform', result);\n}\nregisterMethods('Element', {\n untransform: untransform,\n matrixify: matrixify,\n toParent: toParent,\n toRoot: toRoot,\n transform: transform\n});\n\nfunction rx(rx) {\n return this.attr('rx', rx);\n} // Radius y value\n\nfunction ry(ry) {\n return this.attr('ry', ry);\n} // Move over x-axis\n\nfunction x(x) {\n return x == null ? this.cx() - this.rx() : this.cx(x + this.rx());\n} // Move over y-axis\n\nfunction y(y) {\n return y == null ? this.cy() - this.ry() : this.cy(y + this.ry());\n} // Move by center over x-axis\n\nfunction cx(x) {\n return x == null ? this.attr('cx') : this.attr('cx', x);\n} // Move by center over y-axis\n\nfunction cy(y) {\n return y == null ? this.attr('cy') : this.attr('cy', y);\n} // Set width of element\n\nfunction width(width) {\n return width == null ? this.rx() * 2 : this.rx(new SVGNumber(width).divide(2));\n} // Set height of element\n\nfunction height(height) {\n return height == null ? this.ry() * 2 : this.ry(new SVGNumber(height).divide(2));\n}\n\nvar circled = ({\n\t__proto__: null,\n\trx: rx,\n\try: ry,\n\tx: x,\n\ty: y,\n\tcx: cx,\n\tcy: cy,\n\twidth: width,\n\theight: height\n});\n\nvar Shape =\n/*#__PURE__*/\nfunction (_Element) {\n _inherits(Shape, _Element);\n\n function Shape() {\n _classCallCheck(this, Shape);\n\n return _possibleConstructorReturn(this, _getPrototypeOf(Shape).apply(this, arguments));\n }\n\n return Shape;\n}(Element);\nregister(Shape, 'Shape');\n\nvar Circle =\n/*#__PURE__*/\nfunction (_Shape) {\n _inherits(Circle, _Shape);\n\n function Circle(node) {\n _classCallCheck(this, Circle);\n\n return _possibleConstructorReturn(this, _getPrototypeOf(Circle).call(this, nodeOrNew('circle', node), node));\n }\n\n _createClass(Circle, [{\n key: \"radius\",\n value: function radius(r) {\n return this.attr('r', r);\n } // Radius x value\n\n }, {\n key: \"rx\",\n value: function rx(_rx) {\n return this.attr('r', _rx);\n } // Alias radius x value\n\n }, {\n key: \"ry\",\n value: function ry(_ry) {\n return this.rx(_ry);\n }\n }, {\n key: \"size\",\n value: function size(_size) {\n return this.radius(new SVGNumber(_size).divide(2));\n }\n }]);\n\n return Circle;\n}(Shape);\nextend(Circle, {\n x: x,\n y: y,\n cx: cx,\n cy: cy,\n width: width,\n height: height\n});\nregisterMethods({\n Container: {\n // Create circle element\n circle: wrapWithAttrCheck(function (size) {\n return this.put(new Circle()).size(size).move(0, 0);\n })\n }\n});\nregister(Circle, 'Circle');\n\nvar Container =\n/*#__PURE__*/\nfunction (_Element) {\n _inherits(Container, _Element);\n\n function Container() {\n _classCallCheck(this, Container);\n\n return _possibleConstructorReturn(this, _getPrototypeOf(Container).apply(this, arguments));\n }\n\n _createClass(Container, [{\n key: \"flatten\",\n value: function flatten(parent) {\n this.each(function () {\n if (this instanceof Container) return this.flatten(parent).ungroup(parent);\n return this.toParent(parent);\n }); // we need this so that the root does not get removed\n\n this.node.firstElementChild || this.remove();\n return this;\n }\n }, {\n key: \"ungroup\",\n value: function ungroup(parent) {\n parent = parent || this.parent();\n this.each(function () {\n return this.toParent(parent);\n });\n this.remove();\n return this;\n }\n }]);\n\n return Container;\n}(Element);\nregister(Container, 'Container');\n\nvar Defs =\n/*#__PURE__*/\nfunction (_Container) {\n _inherits(Defs, _Container);\n\n function Defs(node) {\n _classCallCheck(this, Defs);\n\n return _possibleConstructorReturn(this, _getPrototypeOf(Defs).call(this, nodeOrNew('defs', node), node));\n }\n\n _createClass(Defs, [{\n key: \"flatten\",\n value: function flatten() {\n return this;\n }\n }, {\n key: \"ungroup\",\n value: function ungroup() {\n return this;\n }\n }]);\n\n return Defs;\n}(Container);\nregister(Defs, 'Defs');\n\nvar Ellipse =\n/*#__PURE__*/\nfunction (_Shape) {\n _inherits(Ellipse, _Shape);\n\n function Ellipse(node) {\n _classCallCheck(this, Ellipse);\n\n return _possibleConstructorReturn(this, _getPrototypeOf(Ellipse).call(this, nodeOrNew('ellipse', node), node));\n }\n\n _createClass(Ellipse, [{\n key: \"size\",\n value: function size(width, height) {\n var p = proportionalSize(this, width, height);\n return this.rx(new SVGNumber(p.width).divide(2)).ry(new SVGNumber(p.height).divide(2));\n }\n }]);\n\n return Ellipse;\n}(Shape);\nextend(Ellipse, circled);\nregisterMethods('Container', {\n // Create an ellipse\n ellipse: wrapWithAttrCheck(function () {\n var width = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n var height = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : width;\n return this.put(new Ellipse()).size(width, height).move(0, 0);\n })\n});\nregister(Ellipse, 'Ellipse');\n\nvar Stop =\n/*#__PURE__*/\nfunction (_Element) {\n _inherits(Stop, _Element);\n\n function Stop(node) {\n _classCallCheck(this, Stop);\n\n return _possibleConstructorReturn(this, _getPrototypeOf(Stop).call(this, nodeOrNew('stop', node), node));\n } // add color stops\n\n\n _createClass(Stop, [{\n key: \"update\",\n value: function update(o) {\n if (typeof o === 'number' || o instanceof SVGNumber) {\n o = {\n offset: arguments[0],\n color: arguments[1],\n opacity: arguments[2]\n };\n } // set attributes\n\n\n if (o.opacity != null) this.attr('stop-opacity', o.opacity);\n if (o.color != null) this.attr('stop-color', o.color);\n if (o.offset != null) this.attr('offset', new SVGNumber(o.offset));\n return this;\n }\n }]);\n\n return Stop;\n}(Element);\nregister(Stop, 'Stop');\n\nfunction from(x, y) {\n return (this._element || this).type === 'radialGradient' ? this.attr({\n fx: new SVGNumber(x),\n fy: new SVGNumber(y)\n }) : this.attr({\n x1: new SVGNumber(x),\n y1: new SVGNumber(y)\n });\n}\nfunction to(x, y) {\n return (this._element || this).type === 'radialGradient' ? this.attr({\n cx: new SVGNumber(x),\n cy: new SVGNumber(y)\n }) : this.attr({\n x2: new SVGNumber(x),\n y2: new SVGNumber(y)\n });\n}\n\nvar gradiented = ({\n\t__proto__: null,\n\tfrom: from,\n\tto: to\n});\n\nvar Gradient =\n/*#__PURE__*/\nfunction (_Container) {\n _inherits(Gradient, _Container);\n\n function Gradient(type, attrs) {\n _classCallCheck(this, Gradient);\n\n return _possibleConstructorReturn(this, _getPrototypeOf(Gradient).call(this, nodeOrNew(type + 'Gradient', typeof type === 'string' ? null : type), attrs));\n } // Add a color stop\n\n\n _createClass(Gradient, [{\n key: \"stop\",\n value: function stop(offset, color, opacity) {\n return this.put(new Stop()).update(offset, color, opacity);\n } // Update gradient\n\n }, {\n key: \"update\",\n value: function update(block) {\n // remove all stops\n this.clear(); // invoke passed block\n\n if (typeof block === 'function') {\n block.call(this, this);\n }\n\n return this;\n } // Return the fill id\n\n }, {\n key: \"url\",\n value: function url() {\n return 'url(#' + this.id() + ')';\n } // Alias string convertion to fill\n\n }, {\n key: \"toString\",\n value: function toString() {\n return this.url();\n } // custom attr to handle transform\n\n }, {\n key: \"attr\",\n value: function attr(a, b, c) {\n if (a === 'transform') a = 'gradientTransform';\n return _get(_getPrototypeOf(Gradient.prototype), \"attr\", this).call(this, a, b, c);\n }\n }, {\n key: \"targets\",\n value: function targets() {\n return baseFind('svg [fill*=\"' + this.id() + '\"]');\n }\n }, {\n key: \"bbox\",\n value: function bbox() {\n return new Box();\n }\n }]);\n\n return Gradient;\n}(Container);\nextend(Gradient, gradiented);\nregisterMethods({\n Container: {\n // Create gradient element in defs\n gradient: wrapWithAttrCheck(function (type, block) {\n return this.defs().gradient(type, block);\n })\n },\n // define gradient\n Defs: {\n gradient: wrapWithAttrCheck(function (type, block) {\n return this.put(new Gradient(type)).update(block);\n })\n }\n});\nregister(Gradient, 'Gradient');\n\nvar Pattern =\n/*#__PURE__*/\nfunction (_Container) {\n _inherits(Pattern, _Container);\n\n // Initialize node\n function Pattern(node) {\n _classCallCheck(this, Pattern);\n\n return _possibleConstructorReturn(this, _getPrototypeOf(Pattern).call(this, nodeOrNew('pattern', node), node));\n } // Return the fill id\n\n\n _createClass(Pattern, [{\n key: \"url\",\n value: function url() {\n return 'url(#' + this.id() + ')';\n } // Update pattern by rebuilding\n\n }, {\n key: \"update\",\n value: function update(block) {\n // remove content\n this.clear(); // invoke passed block\n\n if (typeof block === 'function') {\n block.call(this, this);\n }\n\n return this;\n } // Alias string convertion to fill\n\n }, {\n key: \"toString\",\n value: function toString() {\n return this.url();\n } // custom attr to handle transform\n\n }, {\n key: \"attr\",\n value: function attr(a, b, c) {\n if (a === 'transform') a = 'patternTransform';\n return _get(_getPrototypeOf(Pattern.prototype), \"attr\", this).call(this, a, b, c);\n }\n }, {\n key: \"targets\",\n value: function targets() {\n return baseFind('svg [fill*=\"' + this.id() + '\"]');\n }\n }, {\n key: \"bbox\",\n value: function bbox() {\n return new Box();\n }\n }]);\n\n return Pattern;\n}(Container);\nregisterMethods({\n Container: {\n // Create pattern element in defs\n pattern: function pattern() {\n var _this$defs;\n\n return (_this$defs = this.defs()).pattern.apply(_this$defs, arguments);\n }\n },\n Defs: {\n pattern: wrapWithAttrCheck(function (width, height, block) {\n return this.put(new Pattern()).update(block).attr({\n x: 0,\n y: 0,\n width: width,\n height: height,\n patternUnits: 'userSpaceOnUse'\n });\n })\n }\n});\nregister(Pattern, 'Pattern');\n\nvar Image =\n/*#__PURE__*/\nfunction (_Shape) {\n _inherits(Image, _Shape);\n\n function Image(node) {\n _classCallCheck(this, Image);\n\n return _possibleConstructorReturn(this, _getPrototypeOf(Image).call(this, nodeOrNew('image', node), node));\n } // (re)load image\n\n\n _createClass(Image, [{\n key: \"load\",\n value: function load(url, callback) {\n if (!url) return this;\n var img = new globals.window.Image();\n on(img, 'load', function (e) {\n var p = this.parent(Pattern); // ensure image size\n\n if (this.width() === 0 && this.height() === 0) {\n this.size(img.width, img.height);\n }\n\n if (p instanceof Pattern) {\n // ensure pattern size if not set\n if (p.width() === 0 && p.height() === 0) {\n p.size(this.width(), this.height());\n }\n }\n\n if (typeof callback === 'function') {\n callback.call(this, e);\n }\n }, this);\n on(img, 'load error', function () {\n // dont forget to unbind memory leaking events\n off(img);\n });\n return this.attr('href', img.src = url, xlink);\n }\n }]);\n\n return Image;\n}(Shape);\nregisterAttrHook(function (attr, val, _this) {\n // convert image fill and stroke to patterns\n if (attr === 'fill' || attr === 'stroke') {\n if (isImage.test(val)) {\n val = _this.root().defs().image(val);\n }\n }\n\n if (val instanceof Image) {\n val = _this.root().defs().pattern(0, 0, function (pattern) {\n pattern.add(val);\n });\n }\n\n return val;\n});\nregisterMethods({\n Container: {\n // create image element, load image and set its size\n image: wrapWithAttrCheck(function (source, callback) {\n return this.put(new Image()).size(0, 0).load(source, callback);\n })\n }\n});\nregister(Image, 'Image');\n\nvar PointArray = subClassArray('PointArray', SVGArray);\nextend(PointArray, {\n // Convert array to string\n toString: function toString() {\n // convert to a poly point string\n for (var i = 0, il = this.length, array = []; i < il; i++) {\n array.push(this[i].join(','));\n }\n\n return array.join(' ');\n },\n // Convert array to line object\n toLine: function toLine() {\n return {\n x1: this[0][0],\n y1: this[0][1],\n x2: this[1][0],\n y2: this[1][1]\n };\n },\n // Get morphed array at given position\n at: function at(pos) {\n // make sure a destination is defined\n if (!this.destination) return this; // generate morphed point string\n\n for (var i = 0, il = this.length, array = []; i < il; i++) {\n array.push([this[i][0] + (this.destination[i][0] - this[i][0]) * pos, this[i][1] + (this.destination[i][1] - this[i][1]) * pos]);\n }\n\n return new PointArray(array);\n },\n // Parse point string and flat array\n parse: function parse() {\n var array = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [[0, 0]];\n var points = []; // if it is an array\n\n if (array instanceof Array) {\n // and it is not flat, there is no need to parse it\n if (array[0] instanceof Array) {\n return array;\n }\n } else {\n // Else, it is considered as a string\n // parse points\n array = array.trim().split(delimiter).map(parseFloat);\n } // validate points - https://svgwg.org/svg2-draft/shapes.html#DataTypePoints\n // Odd number of coordinates is an error. In such cases, drop the last odd coordinate.\n\n\n if (array.length % 2 !== 0) array.pop(); // wrap points in two-tuples\n\n for (var i = 0, len = array.length; i < len; i = i + 2) {\n points.push([array[i], array[i + 1]]);\n }\n\n return points;\n },\n // transform points with matrix (similar to Point.transform)\n transform: function transform(m) {\n var points = [];\n\n for (var i = 0; i < this.length; i++) {\n var point = this[i]; // Perform the matrix multiplication\n\n points.push([m.a * point[0] + m.c * point[1] + m.e, m.b * point[0] + m.d * point[1] + m.f]);\n } // Return the required point\n\n\n return new PointArray(points);\n },\n // Move point string\n move: function move(x, y) {\n var box = this.bbox(); // get relative offset\n\n x -= box.x;\n y -= box.y; // move every point\n\n if (!isNaN(x) && !isNaN(y)) {\n for (var i = this.length - 1; i >= 0; i--) {\n this[i] = [this[i][0] + x, this[i][1] + y];\n }\n }\n\n return this;\n },\n // Resize poly string\n size: function size(width, height) {\n var i;\n var box = this.bbox(); // recalculate position of all points according to new size\n\n for (i = this.length - 1; i >= 0; i--) {\n if (box.width) this[i][0] = (this[i][0] - box.x) * width / box.width + box.x;\n if (box.height) this[i][1] = (this[i][1] - box.y) * height / box.height + box.y;\n }\n\n return this;\n },\n // Get bounding box of points\n bbox: function bbox() {\n var maxX = -Infinity;\n var maxY = -Infinity;\n var minX = Infinity;\n var minY = Infinity;\n this.forEach(function (el) {\n maxX = Math.max(el[0], maxX);\n maxY = Math.max(el[1], maxY);\n minX = Math.min(el[0], minX);\n minY = Math.min(el[1], minY);\n });\n return {\n x: minX,\n y: minY,\n width: maxX - minX,\n height: maxY - minY\n };\n }\n});\n\nvar MorphArray = PointArray; // Move by left top corner over x-axis\n\nfunction x$1(x) {\n return x == null ? this.bbox().x : this.move(x, this.bbox().y);\n} // Move by left top corner over y-axis\n\nfunction y$1(y) {\n return y == null ? this.bbox().y : this.move(this.bbox().x, y);\n} // Set width of element\n\nfunction width$1(width) {\n var b = this.bbox();\n return width == null ? b.width : this.size(width, b.height);\n} // Set height of element\n\nfunction height$1(height) {\n var b = this.bbox();\n return height == null ? b.height : this.size(b.width, height);\n}\n\nvar pointed = ({\n\t__proto__: null,\n\tMorphArray: MorphArray,\n\tx: x$1,\n\ty: y$1,\n\twidth: width$1,\n\theight: height$1\n});\n\nvar Line =\n/*#__PURE__*/\nfunction (_Shape) {\n _inherits(Line, _Shape);\n\n // Initialize node\n function Line(node) {\n _classCallCheck(this, Line);\n\n return _possibleConstructorReturn(this, _getPrototypeOf(Line).call(this, nodeOrNew('line', node), node));\n } // Get array\n\n\n _createClass(Line, [{\n key: \"array\",\n value: function array() {\n return new PointArray([[this.attr('x1'), this.attr('y1')], [this.attr('x2'), this.attr('y2')]]);\n } // Overwrite native plot() method\n\n }, {\n key: \"plot\",\n value: function plot(x1, y1, x2, y2) {\n if (x1 == null) {\n return this.array();\n } else if (typeof y1 !== 'undefined') {\n x1 = {\n x1: x1,\n y1: y1,\n x2: x2,\n y2: y2\n };\n } else {\n x1 = new PointArray(x1).toLine();\n }\n\n return this.attr(x1);\n } // Move by left top corner\n\n }, {\n key: \"move\",\n value: function move(x, y) {\n return this.attr(this.array().move(x, y).toLine());\n } // Set element size to given width and height\n\n }, {\n key: \"size\",\n value: function size(width, height) {\n var p = proportionalSize(this, width, height);\n return this.attr(this.array().size(p.width, p.height).toLine());\n }\n }]);\n\n return Line;\n}(Shape);\nextend(Line, pointed);\nregisterMethods({\n Container: {\n // Create a line element\n line: wrapWithAttrCheck(function () {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n // make sure plot is called as a setter\n // x1 is not necessarily a number, it can also be an array, a string and a PointArray\n return Line.prototype.plot.apply(this.put(new Line()), args[0] != null ? args : [0, 0, 0, 0]);\n })\n }\n});\nregister(Line, 'Line');\n\nvar Marker =\n/*#__PURE__*/\nfunction (_Container) {\n _inherits(Marker, _Container);\n\n // Initialize node\n function Marker(node) {\n _classCallCheck(this, Marker);\n\n return _possibleConstructorReturn(this, _getPrototypeOf(Marker).call(this, nodeOrNew('marker', node), node));\n } // Set width of element\n\n\n _createClass(Marker, [{\n key: \"width\",\n value: function width(_width) {\n return this.attr('markerWidth', _width);\n } // Set height of element\n\n }, {\n key: \"height\",\n value: function height(_height) {\n return this.attr('markerHeight', _height);\n } // Set marker refX and refY\n\n }, {\n key: \"ref\",\n value: function ref(x, y) {\n return this.attr('refX', x).attr('refY', y);\n } // Update marker\n\n }, {\n key: \"update\",\n value: function update(block) {\n // remove all content\n this.clear(); // invoke passed block\n\n if (typeof block === 'function') {\n block.call(this, this);\n }\n\n return this;\n } // Return the fill id\n\n }, {\n key: \"toString\",\n value: function toString() {\n return 'url(#' + this.id() + ')';\n }\n }]);\n\n return Marker;\n}(Container);\nregisterMethods({\n Container: {\n marker: function marker() {\n var _this$defs;\n\n // Create marker element in defs\n return (_this$defs = this.defs()).marker.apply(_this$defs, arguments);\n }\n },\n Defs: {\n // Create marker\n marker: wrapWithAttrCheck(function (width, height, block) {\n // Set default viewbox to match the width and height, set ref to cx and cy and set orient to auto\n return this.put(new Marker()).size(width, height).ref(width / 2, height / 2).viewbox(0, 0, width, height).attr('orient', 'auto').update(block);\n })\n },\n marker: {\n // Create and attach markers\n marker: function marker(_marker, width, height, block) {\n var attr = ['marker']; // Build attribute name\n\n if (_marker !== 'all') attr.push(_marker);\n attr = attr.join('-'); // Set marker attribute\n\n _marker = arguments[1] instanceof Marker ? arguments[1] : this.defs().marker(width, height, block);\n return this.attr(attr, _marker);\n }\n }\n});\nregister(Marker, 'Marker');\n\nvar nativeSort = [].sort;\nvar test$2 = [1, 2, 3];\n\n// IE8-\nvar FAILS_ON_UNDEFINED = fails(function () {\n test$2.sort(undefined);\n});\n// V8 bug\nvar FAILS_ON_NULL = fails(function () {\n test$2.sort(null);\n});\n// Old WebKit\nvar SLOPPY_METHOD$2 = sloppyArrayMethod('sort');\n\nvar FORCED$4 = FAILS_ON_UNDEFINED || !FAILS_ON_NULL || SLOPPY_METHOD$2;\n\n// `Array.prototype.sort` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.sort\n_export({ target: 'Array', proto: true, forced: FORCED$4 }, {\n sort: function sort(comparefn) {\n return comparefn === undefined\n ? nativeSort.call(toObject(this))\n : nativeSort.call(toObject(this), aFunction$1(comparefn));\n }\n});\n\n/***\r\nBase Class\r\n==========\r\nThe base stepper class that will be\r\n***/\n\nfunction makeSetterGetter(k, f) {\n return function (v) {\n if (v == null) return this[v];\n this[k] = v;\n if (f) f.call(this);\n return this;\n };\n}\n\nvar easing = {\n '-': function _(pos) {\n return pos;\n },\n '<>': function _(pos) {\n return -Math.cos(pos * Math.PI) / 2 + 0.5;\n },\n '>': function _(pos) {\n return Math.sin(pos * Math.PI / 2);\n },\n '<': function _(pos) {\n return -Math.cos(pos * Math.PI / 2) + 1;\n },\n bezier: function bezier(x1, y1, x2, y2) {\n // see https://www.w3.org/TR/css-easing-1/#cubic-bezier-algo\n return function (t) {\n if (t < 0) {\n if (x1 > 0) {\n return y1 / x1 * t;\n } else if (x2 > 0) {\n return y2 / x2 * t;\n } else {\n return 0;\n }\n } else if (t > 1) {\n if (x2 < 1) {\n return (1 - y2) / (1 - x2) * t + (y2 - x2) / (1 - x2);\n } else if (x1 < 1) {\n return (1 - y1) / (1 - x1) * t + (y1 - x1) / (1 - x1);\n } else {\n return 1;\n }\n } else {\n return 3 * t * Math.pow(1 - t, 2) * y1 + 3 * Math.pow(t, 2) * (1 - t) * y2 + Math.pow(t, 3);\n }\n };\n },\n // see https://www.w3.org/TR/css-easing-1/#step-timing-function-algo\n steps: function steps(_steps) {\n var stepPosition = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'end';\n // deal with \"jump-\" prefix\n stepPosition = stepPosition.split('-').reverse()[0];\n var jumps = _steps;\n\n if (stepPosition === 'none') {\n --jumps;\n } else if (stepPosition === 'both') {\n ++jumps;\n } // The beforeFlag is essentially useless\n\n\n return function (t) {\n var beforeFlag = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n // Step is called currentStep in referenced url\n var step = Math.floor(t * _steps);\n var jumping = t * step % 1 === 0;\n\n if (stepPosition === 'start' || stepPosition === 'both') {\n ++step;\n }\n\n if (beforeFlag && jumping) {\n --step;\n }\n\n if (t >= 0 && step < 0) {\n step = 0;\n }\n\n if (t <= 1 && step > jumps) {\n step = jumps;\n }\n\n return step / jumps;\n };\n }\n};\nvar Stepper =\n/*#__PURE__*/\nfunction () {\n function Stepper() {\n _classCallCheck(this, Stepper);\n }\n\n _createClass(Stepper, [{\n key: \"done\",\n value: function done() {\n return false;\n }\n }]);\n\n return Stepper;\n}();\n/***\r\nEasing Functions\r\n================\r\n***/\n\nvar Ease =\n/*#__PURE__*/\nfunction (_Stepper) {\n _inherits(Ease, _Stepper);\n\n function Ease(fn) {\n var _this;\n\n _classCallCheck(this, Ease);\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(Ease).call(this));\n _this.ease = easing[fn || timeline.ease] || fn;\n return _this;\n }\n\n _createClass(Ease, [{\n key: \"step\",\n value: function step(from, to, pos) {\n if (typeof from !== 'number') {\n return pos < 1 ? from : to;\n }\n\n return from + (to - from) * this.ease(pos);\n }\n }]);\n\n return Ease;\n}(Stepper);\n/***\r\nController Types\r\n================\r\n***/\n\nvar Controller =\n/*#__PURE__*/\nfunction (_Stepper2) {\n _inherits(Controller, _Stepper2);\n\n function Controller(fn) {\n var _this2;\n\n _classCallCheck(this, Controller);\n\n _this2 = _possibleConstructorReturn(this, _getPrototypeOf(Controller).call(this));\n _this2.stepper = fn;\n return _this2;\n }\n\n _createClass(Controller, [{\n key: \"step\",\n value: function step(current, target, dt, c) {\n return this.stepper(current, target, dt, c);\n }\n }, {\n key: \"done\",\n value: function done(c) {\n return c.done;\n }\n }]);\n\n return Controller;\n}(Stepper);\n\nfunction recalculate() {\n // Apply the default parameters\n var duration = (this._duration || 500) / 1000;\n var overshoot = this._overshoot || 0; // Calculate the PID natural response\n\n var eps = 1e-10;\n var pi = Math.PI;\n var os = Math.log(overshoot / 100 + eps);\n var zeta = -os / Math.sqrt(pi * pi + os * os);\n var wn = 3.9 / (zeta * duration); // Calculate the Spring values\n\n this.d = 2 * zeta * wn;\n this.k = wn * wn;\n}\n\nvar Spring =\n/*#__PURE__*/\nfunction (_Controller) {\n _inherits(Spring, _Controller);\n\n function Spring(duration, overshoot) {\n var _this3;\n\n _classCallCheck(this, Spring);\n\n _this3 = _possibleConstructorReturn(this, _getPrototypeOf(Spring).call(this));\n\n _this3.duration(duration || 500).overshoot(overshoot || 0);\n\n return _this3;\n }\n\n _createClass(Spring, [{\n key: \"step\",\n value: function step(current, target, dt, c) {\n if (typeof current === 'string') return current;\n c.done = dt === Infinity;\n if (dt === Infinity) return target;\n if (dt === 0) return current;\n if (dt > 100) dt = 16;\n dt /= 1000; // Get the previous velocity\n\n var velocity = c.velocity || 0; // Apply the control to get the new position and store it\n\n var acceleration = -this.d * velocity - this.k * (current - target);\n var newPosition = current + velocity * dt + acceleration * dt * dt / 2; // Store the velocity\n\n c.velocity = velocity + acceleration * dt; // Figure out if we have converged, and if so, pass the value\n\n c.done = Math.abs(target - newPosition) + Math.abs(velocity) < 0.002;\n return c.done ? target : newPosition;\n }\n }]);\n\n return Spring;\n}(Controller);\nextend(Spring, {\n duration: makeSetterGetter('_duration', recalculate),\n overshoot: makeSetterGetter('_overshoot', recalculate)\n});\nvar PID =\n/*#__PURE__*/\nfunction (_Controller2) {\n _inherits(PID, _Controller2);\n\n function PID(p, i, d, windup) {\n var _this4;\n\n _classCallCheck(this, PID);\n\n _this4 = _possibleConstructorReturn(this, _getPrototypeOf(PID).call(this));\n p = p == null ? 0.1 : p;\n i = i == null ? 0.01 : i;\n d = d == null ? 0 : d;\n windup = windup == null ? 1000 : windup;\n\n _this4.p(p).i(i).d(d).windup(windup);\n\n return _this4;\n }\n\n _createClass(PID, [{\n key: \"step\",\n value: function step(current, target, dt, c) {\n if (typeof current === 'string') return current;\n c.done = dt === Infinity;\n if (dt === Infinity) return target;\n if (dt === 0) return current;\n var p = target - current;\n var i = (c.integral || 0) + p * dt;\n var d = (p - (c.error || 0)) / dt;\n var windup = this.windup; // antiwindup\n\n if (windup !== false) {\n i = Math.max(-windup, Math.min(i, windup));\n }\n\n c.error = p;\n c.integral = i;\n c.done = Math.abs(p) < 0.001;\n return c.done ? target : current + (this.P * p + this.I * i + this.D * d);\n }\n }]);\n\n return PID;\n}(Controller);\nextend(PID, {\n windup: makeSetterGetter('windup'),\n p: makeSetterGetter('P'),\n i: makeSetterGetter('I'),\n d: makeSetterGetter('D')\n});\n\nvar PathArray = subClassArray('PathArray', SVGArray);\nfunction pathRegReplace(a, b, c, d) {\n return c + d.replace(dots, ' .');\n}\n\nfunction arrayToString(a) {\n for (var i = 0, il = a.length, s = ''; i < il; i++) {\n s += a[i][0];\n\n if (a[i][1] != null) {\n s += a[i][1];\n\n if (a[i][2] != null) {\n s += ' ';\n s += a[i][2];\n\n if (a[i][3] != null) {\n s += ' ';\n s += a[i][3];\n s += ' ';\n s += a[i][4];\n\n if (a[i][5] != null) {\n s += ' ';\n s += a[i][5];\n s += ' ';\n s += a[i][6];\n\n if (a[i][7] != null) {\n s += ' ';\n s += a[i][7];\n }\n }\n }\n }\n }\n }\n\n return s + ' ';\n}\n\nvar pathHandlers = {\n M: function M(c, p, p0) {\n p.x = p0.x = c[0];\n p.y = p0.y = c[1];\n return ['M', p.x, p.y];\n },\n L: function L(c, p) {\n p.x = c[0];\n p.y = c[1];\n return ['L', c[0], c[1]];\n },\n H: function H(c, p) {\n p.x = c[0];\n return ['H', c[0]];\n },\n V: function V(c, p) {\n p.y = c[0];\n return ['V', c[0]];\n },\n C: function C(c, p) {\n p.x = c[4];\n p.y = c[5];\n return ['C', c[0], c[1], c[2], c[3], c[4], c[5]];\n },\n S: function S(c, p) {\n p.x = c[2];\n p.y = c[3];\n return ['S', c[0], c[1], c[2], c[3]];\n },\n Q: function Q(c, p) {\n p.x = c[2];\n p.y = c[3];\n return ['Q', c[0], c[1], c[2], c[3]];\n },\n T: function T(c, p) {\n p.x = c[0];\n p.y = c[1];\n return ['T', c[0], c[1]];\n },\n Z: function Z(c, p, p0) {\n p.x = p0.x;\n p.y = p0.y;\n return ['Z'];\n },\n A: function A(c, p) {\n p.x = c[5];\n p.y = c[6];\n return ['A', c[0], c[1], c[2], c[3], c[4], c[5], c[6]];\n }\n};\nvar mlhvqtcsaz = 'mlhvqtcsaz'.split('');\n\nfor (var i = 0, il = mlhvqtcsaz.length; i < il; ++i) {\n pathHandlers[mlhvqtcsaz[i]] = function (i) {\n return function (c, p, p0) {\n if (i === 'H') c[0] = c[0] + p.x;else if (i === 'V') c[0] = c[0] + p.y;else if (i === 'A') {\n c[5] = c[5] + p.x;\n c[6] = c[6] + p.y;\n } else {\n for (var j = 0, jl = c.length; j < jl; ++j) {\n c[j] = c[j] + (j % 2 ? p.y : p.x);\n }\n }\n return pathHandlers[i](c, p, p0);\n };\n }(mlhvqtcsaz[i].toUpperCase());\n}\n\nextend(PathArray, {\n // Convert array to string\n toString: function toString() {\n return arrayToString(this);\n },\n // Move path string\n move: function move(x, y) {\n // get bounding box of current situation\n var box = this.bbox(); // get relative offset\n\n x -= box.x;\n y -= box.y;\n\n if (!isNaN(x) && !isNaN(y)) {\n // move every point\n for (var l, i = this.length - 1; i >= 0; i--) {\n l = this[i][0];\n\n if (l === 'M' || l === 'L' || l === 'T') {\n this[i][1] += x;\n this[i][2] += y;\n } else if (l === 'H') {\n this[i][1] += x;\n } else if (l === 'V') {\n this[i][1] += y;\n } else if (l === 'C' || l === 'S' || l === 'Q') {\n this[i][1] += x;\n this[i][2] += y;\n this[i][3] += x;\n this[i][4] += y;\n\n if (l === 'C') {\n this[i][5] += x;\n this[i][6] += y;\n }\n } else if (l === 'A') {\n this[i][6] += x;\n this[i][7] += y;\n }\n }\n }\n\n return this;\n },\n // Resize path string\n size: function size(width, height) {\n // get bounding box of current situation\n var box = this.bbox();\n var i, l; // If the box width or height is 0 then we ignore\n // transformations on the respective axis\n\n box.width = box.width === 0 ? 1 : box.width;\n box.height = box.height === 0 ? 1 : box.height; // recalculate position of all points according to new size\n\n for (i = this.length - 1; i >= 0; i--) {\n l = this[i][0];\n\n if (l === 'M' || l === 'L' || l === 'T') {\n this[i][1] = (this[i][1] - box.x) * width / box.width + box.x;\n this[i][2] = (this[i][2] - box.y) * height / box.height + box.y;\n } else if (l === 'H') {\n this[i][1] = (this[i][1] - box.x) * width / box.width + box.x;\n } else if (l === 'V') {\n this[i][1] = (this[i][1] - box.y) * height / box.height + box.y;\n } else if (l === 'C' || l === 'S' || l === 'Q') {\n this[i][1] = (this[i][1] - box.x) * width / box.width + box.x;\n this[i][2] = (this[i][2] - box.y) * height / box.height + box.y;\n this[i][3] = (this[i][3] - box.x) * width / box.width + box.x;\n this[i][4] = (this[i][4] - box.y) * height / box.height + box.y;\n\n if (l === 'C') {\n this[i][5] = (this[i][5] - box.x) * width / box.width + box.x;\n this[i][6] = (this[i][6] - box.y) * height / box.height + box.y;\n }\n } else if (l === 'A') {\n // resize radii\n this[i][1] = this[i][1] * width / box.width;\n this[i][2] = this[i][2] * height / box.height; // move position values\n\n this[i][6] = (this[i][6] - box.x) * width / box.width + box.x;\n this[i][7] = (this[i][7] - box.y) * height / box.height + box.y;\n }\n }\n\n return this;\n },\n // Test if the passed path array use the same path data commands as this path array\n equalCommands: function equalCommands(pathArray) {\n var i, il, equalCommands;\n pathArray = new PathArray(pathArray);\n equalCommands = this.length === pathArray.length;\n\n for (i = 0, il = this.length; equalCommands && i < il; i++) {\n equalCommands = this[i][0] === pathArray[i][0];\n }\n\n return equalCommands;\n },\n // Make path array morphable\n morph: function morph(pathArray) {\n pathArray = new PathArray(pathArray);\n\n if (this.equalCommands(pathArray)) {\n this.destination = pathArray;\n } else {\n this.destination = null;\n }\n\n return this;\n },\n // Get morphed path array at given position\n at: function at(pos) {\n // make sure a destination is defined\n if (!this.destination) return this;\n var sourceArray = this;\n var destinationArray = this.destination.value;\n var array = [];\n var pathArray = new PathArray();\n var i, il, j, jl; // Animate has specified in the SVG spec\n // See: https://www.w3.org/TR/SVG11/paths.html#PathElement\n\n for (i = 0, il = sourceArray.length; i < il; i++) {\n array[i] = [sourceArray[i][0]];\n\n for (j = 1, jl = sourceArray[i].length; j < jl; j++) {\n array[i][j] = sourceArray[i][j] + (destinationArray[i][j] - sourceArray[i][j]) * pos;\n } // For the two flags of the elliptical arc command, the SVG spec say:\n // Flags and booleans are interpolated as fractions between zero and one, with any non-zero value considered to be a value of one/true\n // Elliptical arc command as an array followed by corresponding indexes:\n // ['A', rx, ry, x-axis-rotation, large-arc-flag, sweep-flag, x, y]\n // 0 1 2 3 4 5 6 7\n\n\n if (array[i][0] === 'A') {\n array[i][4] = +(array[i][4] !== 0);\n array[i][5] = +(array[i][5] !== 0);\n }\n } // Directly modify the value of a path array, this is done this way for performance\n\n\n pathArray.value = array;\n return pathArray;\n },\n // Absolutize and parse path to array\n parse: function parse() {\n var array = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [['M', 0, 0]];\n // if it's already a patharray, no need to parse it\n if (array instanceof PathArray) return array; // prepare for parsing\n\n var s;\n var paramCnt = {\n M: 2,\n L: 2,\n H: 1,\n V: 1,\n C: 6,\n S: 4,\n Q: 4,\n T: 2,\n A: 7,\n Z: 0\n };\n\n if (typeof array === 'string') {\n array = array.replace(numbersWithDots, pathRegReplace) // convert 45.123.123 to 45.123 .123\n .replace(pathLetters, ' $& ') // put some room between letters and numbers\n .replace(hyphen, '$1 -') // add space before hyphen\n .trim() // trim\n .split(delimiter); // split into array\n } else {\n array = array.reduce(function (prev, curr) {\n return [].concat.call(prev, curr);\n }, []);\n } // array now is an array containing all parts of a path e.g. ['M', '0', '0', 'L', '30', '30' ...]\n\n\n var result = [];\n var p = new Point();\n var p0 = new Point();\n var index = 0;\n var len = array.length;\n\n do {\n // Test if we have a path letter\n if (isPathLetter.test(array[index])) {\n s = array[index];\n ++index; // If last letter was a move command and we got no new, it defaults to [L]ine\n } else if (s === 'M') {\n s = 'L';\n } else if (s === 'm') {\n s = 'l';\n }\n\n result.push(pathHandlers[s].call(null, array.slice(index, index = index + paramCnt[s.toUpperCase()]).map(parseFloat), p, p0));\n } while (len > index);\n\n return result;\n },\n // Get bounding box of path\n bbox: function bbox() {\n parser().path.setAttribute('d', this.toString());\n return parser.nodes.path.getBBox();\n }\n});\n\nvar Morphable =\n/*#__PURE__*/\nfunction () {\n function Morphable(stepper) {\n _classCallCheck(this, Morphable);\n\n this._stepper = stepper || new Ease('-');\n this._from = null;\n this._to = null;\n this._type = null;\n this._context = null;\n this._morphObj = null;\n }\n\n _createClass(Morphable, [{\n key: \"from\",\n value: function from(val) {\n if (val == null) {\n return this._from;\n }\n\n this._from = this._set(val);\n return this;\n }\n }, {\n key: \"to\",\n value: function to(val) {\n if (val == null) {\n return this._to;\n }\n\n this._to = this._set(val);\n return this;\n }\n }, {\n key: \"type\",\n value: function type(_type) {\n // getter\n if (_type == null) {\n return this._type;\n } // setter\n\n\n this._type = _type;\n return this;\n }\n }, {\n key: \"_set\",\n value: function _set(value) {\n if (!this._type) {\n var type = _typeof(value);\n\n if (type === 'number') {\n this.type(SVGNumber);\n } else if (type === 'string') {\n if (Color.isColor(value)) {\n this.type(Color);\n } else if (delimiter.test(value)) {\n this.type(pathLetters.test(value) ? PathArray : SVGArray);\n } else if (numberAndUnit.test(value)) {\n this.type(SVGNumber);\n } else {\n this.type(NonMorphable);\n }\n } else if (morphableTypes.indexOf(value.constructor) > -1) {\n this.type(value.constructor);\n } else if (Array.isArray(value)) {\n this.type(SVGArray);\n } else if (type === 'object') {\n this.type(ObjectBag);\n } else {\n this.type(NonMorphable);\n }\n }\n\n var result = new this._type(value);\n\n if (this._type === Color) {\n result = this._to ? result[this._to[4]]() : this._from ? result[this._from[4]]() : result;\n }\n\n result = result.toArray();\n this._morphObj = this._morphObj || new this._type();\n this._context = this._context || Array.apply(null, Array(result.length)).map(Object).map(function (o) {\n o.done = true;\n return o;\n });\n return result;\n }\n }, {\n key: \"stepper\",\n value: function stepper(_stepper) {\n if (_stepper == null) return this._stepper;\n this._stepper = _stepper;\n return this;\n }\n }, {\n key: \"done\",\n value: function done() {\n var complete = this._context.map(this._stepper.done).reduce(function (last, curr) {\n return last && curr;\n }, true);\n\n return complete;\n }\n }, {\n key: \"at\",\n value: function at(pos) {\n var _this = this;\n\n return this._morphObj.fromArray(this._from.map(function (i, index) {\n return _this._stepper.step(i, _this._to[index], pos, _this._context[index], _this._context);\n }));\n }\n }]);\n\n return Morphable;\n}();\nvar NonMorphable =\n/*#__PURE__*/\nfunction () {\n function NonMorphable() {\n _classCallCheck(this, NonMorphable);\n\n this.init.apply(this, arguments);\n }\n\n _createClass(NonMorphable, [{\n key: \"init\",\n value: function init(val) {\n val = Array.isArray(val) ? val[0] : val;\n this.value = val;\n return this;\n }\n }, {\n key: \"valueOf\",\n value: function valueOf() {\n return this.value;\n }\n }, {\n key: \"toArray\",\n value: function toArray() {\n return [this.value];\n }\n }]);\n\n return NonMorphable;\n}();\nvar TransformBag =\n/*#__PURE__*/\nfunction () {\n function TransformBag() {\n _classCallCheck(this, TransformBag);\n\n this.init.apply(this, arguments);\n }\n\n _createClass(TransformBag, [{\n key: \"init\",\n value: function init(obj) {\n if (Array.isArray(obj)) {\n obj = {\n scaleX: obj[0],\n scaleY: obj[1],\n shear: obj[2],\n rotate: obj[3],\n translateX: obj[4],\n translateY: obj[5],\n originX: obj[6],\n originY: obj[7]\n };\n }\n\n Object.assign(this, TransformBag.defaults, obj);\n return this;\n }\n }, {\n key: \"toArray\",\n value: function toArray() {\n var v = this;\n return [v.scaleX, v.scaleY, v.shear, v.rotate, v.translateX, v.translateY, v.originX, v.originY];\n }\n }]);\n\n return TransformBag;\n}();\nTransformBag.defaults = {\n scaleX: 1,\n scaleY: 1,\n shear: 0,\n rotate: 0,\n translateX: 0,\n translateY: 0,\n originX: 0,\n originY: 0\n};\nvar ObjectBag =\n/*#__PURE__*/\nfunction () {\n function ObjectBag() {\n _classCallCheck(this, ObjectBag);\n\n this.init.apply(this, arguments);\n }\n\n _createClass(ObjectBag, [{\n key: \"init\",\n value: function init(objOrArr) {\n this.values = [];\n\n if (Array.isArray(objOrArr)) {\n this.values = objOrArr;\n return;\n }\n\n objOrArr = objOrArr || {};\n var entries = [];\n\n for (var i in objOrArr) {\n entries.push([i, objOrArr[i]]);\n }\n\n entries.sort(function (a, b) {\n return a[0] - b[0];\n });\n this.values = entries.reduce(function (last, curr) {\n return last.concat(curr);\n }, []);\n return this;\n }\n }, {\n key: \"valueOf\",\n value: function valueOf() {\n var obj = {};\n var arr = this.values;\n\n for (var i = 0, len = arr.length; i < len; i += 2) {\n obj[arr[i]] = arr[i + 1];\n }\n\n return obj;\n }\n }, {\n key: \"toArray\",\n value: function toArray() {\n return this.values;\n }\n }]);\n\n return ObjectBag;\n}();\nvar morphableTypes = [NonMorphable, TransformBag, ObjectBag];\nfunction registerMorphableType() {\n var type = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n morphableTypes.push.apply(morphableTypes, _toConsumableArray([].concat(type)));\n}\nfunction makeMorphable() {\n extend(morphableTypes, {\n to: function to(val) {\n return new Morphable().type(this.constructor).from(this.valueOf()).to(val);\n },\n fromArray: function fromArray(arr) {\n this.init(arr);\n return this;\n }\n });\n}\n\nvar Path =\n/*#__PURE__*/\nfunction (_Shape) {\n _inherits(Path, _Shape);\n\n // Initialize node\n function Path(node) {\n _classCallCheck(this, Path);\n\n return _possibleConstructorReturn(this, _getPrototypeOf(Path).call(this, nodeOrNew('path', node), node));\n } // Get array\n\n\n _createClass(Path, [{\n key: \"array\",\n value: function array() {\n return this._array || (this._array = new PathArray(this.attr('d')));\n } // Plot new path\n\n }, {\n key: \"plot\",\n value: function plot(d) {\n return d == null ? this.array() : this.clear().attr('d', typeof d === 'string' ? d : this._array = new PathArray(d));\n } // Clear array cache\n\n }, {\n key: \"clear\",\n value: function clear() {\n delete this._array;\n return this;\n } // Move by left top corner\n\n }, {\n key: \"move\",\n value: function move(x, y) {\n return this.attr('d', this.array().move(x, y));\n } // Move by left top corner over x-axis\n\n }, {\n key: \"x\",\n value: function x(_x) {\n return _x == null ? this.bbox().x : this.move(_x, this.bbox().y);\n } // Move by left top corner over y-axis\n\n }, {\n key: \"y\",\n value: function y(_y) {\n return _y == null ? this.bbox().y : this.move(this.bbox().x, _y);\n } // Set element size to given width and height\n\n }, {\n key: \"size\",\n value: function size(width, height) {\n var p = proportionalSize(this, width, height);\n return this.attr('d', this.array().size(p.width, p.height));\n } // Set width of element\n\n }, {\n key: \"width\",\n value: function width(_width) {\n return _width == null ? this.bbox().width : this.size(_width, this.bbox().height);\n } // Set height of element\n\n }, {\n key: \"height\",\n value: function height(_height) {\n return _height == null ? this.bbox().height : this.size(this.bbox().width, _height);\n }\n }, {\n key: \"targets\",\n value: function targets() {\n return baseFind('svg textpath [href*=\"' + this.id() + '\"]');\n }\n }]);\n\n return Path;\n}(Shape); // Define morphable array\nPath.prototype.MorphArray = PathArray; // Add parent method\n\nregisterMethods({\n Container: {\n // Create a wrapped path element\n path: wrapWithAttrCheck(function (d) {\n // make sure plot is called as a setter\n return this.put(new Path()).plot(d || new PathArray());\n })\n }\n});\nregister(Path, 'Path');\n\nfunction array() {\n return this._array || (this._array = new PointArray(this.attr('points')));\n} // Plot new path\n\nfunction plot(p) {\n return p == null ? this.array() : this.clear().attr('points', typeof p === 'string' ? p : this._array = new PointArray(p));\n} // Clear array cache\n\nfunction clear() {\n delete this._array;\n return this;\n} // Move by left top corner\n\nfunction move(x, y) {\n return this.attr('points', this.array().move(x, y));\n} // Set element size to given width and height\n\nfunction size(width, height) {\n var p = proportionalSize(this, width, height);\n return this.attr('points', this.array().size(p.width, p.height));\n}\n\nvar poly = ({\n\t__proto__: null,\n\tarray: array,\n\tplot: plot,\n\tclear: clear,\n\tmove: move,\n\tsize: size\n});\n\nvar Polygon =\n/*#__PURE__*/\nfunction (_Shape) {\n _inherits(Polygon, _Shape);\n\n // Initialize node\n function Polygon(node) {\n _classCallCheck(this, Polygon);\n\n return _possibleConstructorReturn(this, _getPrototypeOf(Polygon).call(this, nodeOrNew('polygon', node), node));\n }\n\n return Polygon;\n}(Shape);\nregisterMethods({\n Container: {\n // Create a wrapped polygon element\n polygon: wrapWithAttrCheck(function (p) {\n // make sure plot is called as a setter\n return this.put(new Polygon()).plot(p || new PointArray());\n })\n }\n});\nextend(Polygon, pointed);\nextend(Polygon, poly);\nregister(Polygon, 'Polygon');\n\nvar Polyline =\n/*#__PURE__*/\nfunction (_Shape) {\n _inherits(Polyline, _Shape);\n\n // Initialize node\n function Polyline(node) {\n _classCallCheck(this, Polyline);\n\n return _possibleConstructorReturn(this, _getPrototypeOf(Polyline).call(this, nodeOrNew('polyline', node), node));\n }\n\n return Polyline;\n}(Shape);\nregisterMethods({\n Container: {\n // Create a wrapped polygon element\n polyline: wrapWithAttrCheck(function (p) {\n // make sure plot is called as a setter\n return this.put(new Polyline()).plot(p || new PointArray());\n })\n }\n});\nextend(Polyline, pointed);\nextend(Polyline, poly);\nregister(Polyline, 'Polyline');\n\nvar Rect =\n/*#__PURE__*/\nfunction (_Shape) {\n _inherits(Rect, _Shape);\n\n // Initialize node\n function Rect(node) {\n _classCallCheck(this, Rect);\n\n return _possibleConstructorReturn(this, _getPrototypeOf(Rect).call(this, nodeOrNew('rect', node), node));\n }\n\n return Rect;\n}(Shape);\nextend(Rect, {\n rx: rx,\n ry: ry\n});\nregisterMethods({\n Container: {\n // Create a rect element\n rect: wrapWithAttrCheck(function (width, height) {\n return this.put(new Rect()).size(width, height);\n })\n }\n});\nregister(Rect, 'Rect');\n\nvar max$3 = Math.max;\nvar min$4 = Math.min;\nvar MAX_SAFE_INTEGER$1 = 0x1FFFFFFFFFFFFF;\nvar MAXIMUM_ALLOWED_LENGTH_EXCEEDED = 'Maximum allowed length exceeded';\n\n// `Array.prototype.splice` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.splice\n// with adding support of @@species\n_export({ target: 'Array', proto: true, forced: !arrayMethodHasSpeciesSupport('splice') }, {\n splice: function splice(start, deleteCount /* , ...items */) {\n var O = toObject(this);\n var len = toLength(O.length);\n var actualStart = toAbsoluteIndex(start, len);\n var argumentsLength = arguments.length;\n var insertCount, actualDeleteCount, A, k, from, to;\n if (argumentsLength === 0) {\n insertCount = actualDeleteCount = 0;\n } else if (argumentsLength === 1) {\n insertCount = 0;\n actualDeleteCount = len - actualStart;\n } else {\n insertCount = argumentsLength - 2;\n actualDeleteCount = min$4(max$3(toInteger(deleteCount), 0), len - actualStart);\n }\n if (len + insertCount - actualDeleteCount > MAX_SAFE_INTEGER$1) {\n throw TypeError(MAXIMUM_ALLOWED_LENGTH_EXCEEDED);\n }\n A = arraySpeciesCreate(O, actualDeleteCount);\n for (k = 0; k < actualDeleteCount; k++) {\n from = actualStart + k;\n if (from in O) createProperty(A, k, O[from]);\n }\n A.length = actualDeleteCount;\n if (insertCount < actualDeleteCount) {\n for (k = actualStart; k < len - actualDeleteCount; k++) {\n from = k + actualDeleteCount;\n to = k + insertCount;\n if (from in O) O[to] = O[from];\n else delete O[to];\n }\n for (k = len; k > len - actualDeleteCount + insertCount; k--) delete O[k - 1];\n } else if (insertCount > actualDeleteCount) {\n for (k = len - actualDeleteCount; k > actualStart; k--) {\n from = k + actualDeleteCount - 1;\n to = k + insertCount - 1;\n if (from in O) O[to] = O[from];\n else delete O[to];\n }\n }\n for (k = 0; k < insertCount; k++) {\n O[k + actualStart] = arguments[k + 2];\n }\n O.length = len - actualDeleteCount + insertCount;\n return A;\n }\n});\n\nvar Queue =\n/*#__PURE__*/\nfunction () {\n function Queue() {\n _classCallCheck(this, Queue);\n\n this._first = null;\n this._last = null;\n }\n\n _createClass(Queue, [{\n key: \"push\",\n value: function push(value) {\n // An item stores an id and the provided value\n var item = value.next ? value : {\n value: value,\n next: null,\n prev: null\n }; // Deal with the queue being empty or populated\n\n if (this._last) {\n item.prev = this._last;\n this._last.next = item;\n this._last = item;\n } else {\n this._last = item;\n this._first = item;\n } // Return the current item\n\n\n return item;\n }\n }, {\n key: \"shift\",\n value: function shift() {\n // Check if we have a value\n var remove = this._first;\n if (!remove) return null; // If we do, remove it and relink things\n\n this._first = remove.next;\n if (this._first) this._first.prev = null;\n this._last = this._first ? this._last : null;\n return remove.value;\n } // Shows us the first item in the list\n\n }, {\n key: \"first\",\n value: function first() {\n return this._first && this._first.value;\n } // Shows us the last item in the list\n\n }, {\n key: \"last\",\n value: function last() {\n return this._last && this._last.value;\n } // Removes the item that was returned from the push\n\n }, {\n key: \"remove\",\n value: function remove(item) {\n // Relink the previous item\n if (item.prev) item.prev.next = item.next;\n if (item.next) item.next.prev = item.prev;\n if (item === this._last) this._last = item.prev;\n if (item === this._first) this._first = item.next; // Invalidate item\n\n item.prev = null;\n item.next = null;\n }\n }]);\n\n return Queue;\n}();\n\nvar Animator = {\n nextDraw: null,\n frames: new Queue(),\n timeouts: new Queue(),\n immediates: new Queue(),\n timer: function timer() {\n return globals.window.performance || globals.window.Date;\n },\n transforms: [],\n frame: function frame(fn) {\n // Store the node\n var node = Animator.frames.push({\n run: fn\n }); // Request an animation frame if we don't have one\n\n if (Animator.nextDraw === null) {\n Animator.nextDraw = globals.window.requestAnimationFrame(Animator._draw);\n } // Return the node so we can remove it easily\n\n\n return node;\n },\n timeout: function timeout(fn, delay) {\n delay = delay || 0; // Work out when the event should fire\n\n var time = Animator.timer().now() + delay; // Add the timeout to the end of the queue\n\n var node = Animator.timeouts.push({\n run: fn,\n time: time\n }); // Request another animation frame if we need one\n\n if (Animator.nextDraw === null) {\n Animator.nextDraw = globals.window.requestAnimationFrame(Animator._draw);\n }\n\n return node;\n },\n immediate: function immediate(fn) {\n // Add the immediate fn to the end of the queue\n var node = Animator.immediates.push(fn); // Request another animation frame if we need one\n\n if (Animator.nextDraw === null) {\n Animator.nextDraw = globals.window.requestAnimationFrame(Animator._draw);\n }\n\n return node;\n },\n cancelFrame: function cancelFrame(node) {\n node != null && Animator.frames.remove(node);\n },\n clearTimeout: function clearTimeout(node) {\n node != null && Animator.timeouts.remove(node);\n },\n cancelImmediate: function cancelImmediate(node) {\n node != null && Animator.immediates.remove(node);\n },\n _draw: function _draw(now) {\n // Run all the timeouts we can run, if they are not ready yet, add them\n // to the end of the queue immediately! (bad timeouts!!! [sarcasm])\n var nextTimeout = null;\n var lastTimeout = Animator.timeouts.last();\n\n while (nextTimeout = Animator.timeouts.shift()) {\n // Run the timeout if its time, or push it to the end\n if (now >= nextTimeout.time) {\n nextTimeout.run();\n } else {\n Animator.timeouts.push(nextTimeout);\n } // If we hit the last item, we should stop shifting out more items\n\n\n if (nextTimeout === lastTimeout) break;\n } // Run all of the animation frames\n\n\n var nextFrame = null;\n var lastFrame = Animator.frames.last();\n\n while (nextFrame !== lastFrame && (nextFrame = Animator.frames.shift())) {\n nextFrame.run(now);\n }\n\n var nextImmediate = null;\n\n while (nextImmediate = Animator.immediates.shift()) {\n nextImmediate();\n } // If we have remaining timeouts or frames, draw until we don't anymore\n\n\n Animator.nextDraw = Animator.timeouts.first() || Animator.frames.first() ? globals.window.requestAnimationFrame(Animator._draw) : null;\n }\n};\n\nvar makeSchedule = function makeSchedule(runnerInfo) {\n var start = runnerInfo.start;\n var duration = runnerInfo.runner.duration();\n var end = start + duration;\n return {\n start: start,\n duration: duration,\n end: end,\n runner: runnerInfo.runner\n };\n};\n\nvar defaultSource = function defaultSource() {\n var w = globals.window;\n return (w.performance || w.Date).now();\n};\n\nvar Timeline =\n/*#__PURE__*/\nfunction (_EventTarget) {\n _inherits(Timeline, _EventTarget);\n\n // Construct a new timeline on the given element\n function Timeline() {\n var _this;\n\n var timeSource = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultSource;\n\n _classCallCheck(this, Timeline);\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(Timeline).call(this));\n _this._timeSource = timeSource; // Store the timing variables\n\n _this._startTime = 0;\n _this._speed = 1.0; // Determines how long a runner is hold in memory. Can be a dt or true/false\n\n _this._persist = 0; // Keep track of the running animations and their starting parameters\n\n _this._nextFrame = null;\n _this._paused = true;\n _this._runners = [];\n _this._runnerIds = [];\n _this._lastRunnerId = -1;\n _this._time = 0;\n _this._lastSourceTime = 0;\n _this._lastStepTime = 0; // Make sure that step is always called in class context\n\n _this._step = _this._stepFn.bind(_assertThisInitialized(_this), false);\n _this._stepImmediate = _this._stepFn.bind(_assertThisInitialized(_this), true);\n return _this;\n } // schedules a runner on the timeline\n\n\n _createClass(Timeline, [{\n key: \"schedule\",\n value: function schedule(runner, delay, when) {\n if (runner == null) {\n return this._runners.map(makeSchedule);\n } // The start time for the next animation can either be given explicitly,\n // derived from the current timeline time or it can be relative to the\n // last start time to chain animations direclty\n\n\n var absoluteStartTime = 0;\n var endTime = this.getEndTime();\n delay = delay || 0; // Work out when to start the animation\n\n if (when == null || when === 'last' || when === 'after') {\n // Take the last time and increment\n absoluteStartTime = endTime;\n } else if (when === 'absolute' || when === 'start') {\n absoluteStartTime = delay;\n delay = 0;\n } else if (when === 'now') {\n absoluteStartTime = this._time;\n } else if (when === 'relative') {\n var _runnerInfo = this._runners[runner.id];\n\n if (_runnerInfo) {\n absoluteStartTime = _runnerInfo.start + delay;\n delay = 0;\n }\n } else {\n throw new Error('Invalid value for the \"when\" parameter');\n } // Manage runner\n\n\n runner.unschedule();\n runner.timeline(this);\n var persist = runner.persist();\n var runnerInfo = {\n persist: persist === null ? this._persist : persist,\n start: absoluteStartTime + delay,\n runner: runner\n };\n this._lastRunnerId = runner.id;\n\n this._runners.push(runnerInfo);\n\n this._runners.sort(function (a, b) {\n return a.start - b.start;\n });\n\n this._runnerIds = this._runners.map(function (info) {\n return info.runner.id;\n });\n\n this.updateTime()._continue();\n\n return this;\n } // Remove the runner from this timeline\n\n }, {\n key: \"unschedule\",\n value: function unschedule(runner) {\n var index = this._runnerIds.indexOf(runner.id);\n\n if (index < 0) return this;\n\n this._runners.splice(index, 1);\n\n this._runnerIds.splice(index, 1);\n\n runner.timeline(null);\n return this;\n } // Calculates the end of the timeline\n\n }, {\n key: \"getEndTime\",\n value: function getEndTime() {\n var lastRunnerInfo = this._runners[this._runnerIds.indexOf(this._lastRunnerId)];\n\n var lastDuration = lastRunnerInfo ? lastRunnerInfo.runner.duration() : 0;\n var lastStartTime = lastRunnerInfo ? lastRunnerInfo.start : 0;\n return lastStartTime + lastDuration;\n }\n }, {\n key: \"getEndTimeOfTimeline\",\n value: function getEndTimeOfTimeline() {\n var lastEndTime = 0;\n\n for (var i = 0; i < this._runners.length; i++) {\n var runnerInfo = this._runners[i];\n var duration = runnerInfo ? runnerInfo.runner.duration() : 0;\n var startTime = runnerInfo ? runnerInfo.start : 0;\n var endTime = startTime + duration;\n\n if (endTime > lastEndTime) {\n lastEndTime = endTime;\n }\n }\n\n return lastEndTime;\n } // Makes sure, that after pausing the time doesn't jump\n\n }, {\n key: \"updateTime\",\n value: function updateTime() {\n if (!this.active()) {\n this._lastSourceTime = this._timeSource();\n }\n\n return this;\n }\n }, {\n key: \"play\",\n value: function play() {\n // Now make sure we are not paused and continue the animation\n this._paused = false;\n return this.updateTime()._continue();\n }\n }, {\n key: \"pause\",\n value: function pause() {\n this._paused = true;\n return this._continue();\n }\n }, {\n key: \"stop\",\n value: function stop() {\n // Go to start and pause\n this.time(0);\n return this.pause();\n }\n }, {\n key: \"finish\",\n value: function finish() {\n // Go to end and pause\n this.time(this.getEndTimeOfTimeline() + 1);\n return this.pause();\n }\n }, {\n key: \"speed\",\n value: function speed(_speed) {\n if (_speed == null) return this._speed;\n this._speed = _speed;\n return this;\n }\n }, {\n key: \"reverse\",\n value: function reverse(yes) {\n var currentSpeed = this.speed();\n if (yes == null) return this.speed(-currentSpeed);\n var positive = Math.abs(currentSpeed);\n return this.speed(yes ? positive : -positive);\n }\n }, {\n key: \"seek\",\n value: function seek(dt) {\n return this.time(this._time + dt);\n }\n }, {\n key: \"time\",\n value: function time(_time) {\n if (_time == null) return this._time;\n this._time = _time;\n return this._continue(true);\n }\n }, {\n key: \"persist\",\n value: function persist(dtOrForever) {\n if (dtOrForever == null) return this._persist;\n this._persist = dtOrForever;\n return this;\n }\n }, {\n key: \"source\",\n value: function source(fn) {\n if (fn == null) return this._timeSource;\n this._timeSource = fn;\n return this;\n }\n }, {\n key: \"_stepFn\",\n value: function _stepFn() {\n var immediateStep = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n // Get the time delta from the last time and update the time\n var time = this._timeSource();\n\n var dtSource = time - this._lastSourceTime;\n if (immediateStep) dtSource = 0;\n var dtTime = this._speed * dtSource + (this._time - this._lastStepTime);\n this._lastSourceTime = time; // Only update the time if we use the timeSource.\n // Otherwise use the current time\n\n if (!immediateStep) {\n // Update the time\n this._time += dtTime;\n this._time = this._time < 0 ? 0 : this._time;\n }\n\n this._lastStepTime = this._time;\n this.fire('time', this._time); // This is for the case that the timeline was seeked so that the time\n // is now before the startTime of the runner. Thats why we need to set\n // the runner to position 0\n // FIXME:\n // However, reseting in insertion order leads to bugs. Considering the case,\n // where 2 runners change the same attriute but in different times,\n // reseting both of them will lead to the case where the later defined\n // runner always wins the reset even if the other runner started earlier\n // and therefore should win the attribute battle\n // this can be solved by reseting them backwards\n\n for (var k = this._runners.length; k--;) {\n // Get and run the current runner and ignore it if its inactive\n var runnerInfo = this._runners[k];\n var runner = runnerInfo.runner; // Make sure that we give the actual difference\n // between runner start time and now\n\n var dtToStart = this._time - runnerInfo.start; // Dont run runner if not started yet\n // and try to reset it\n\n if (dtToStart <= 0) {\n runner.reset();\n }\n } // Run all of the runners directly\n\n\n var runnersLeft = false;\n\n for (var i = 0, len = this._runners.length; i < len; i++) {\n // Get and run the current runner and ignore it if its inactive\n var _runnerInfo2 = this._runners[i];\n var _runner = _runnerInfo2.runner;\n var dt = dtTime; // Make sure that we give the actual difference\n // between runner start time and now\n\n var _dtToStart = this._time - _runnerInfo2.start; // Dont run runner if not started yet\n\n\n if (_dtToStart <= 0) {\n runnersLeft = true;\n continue;\n } else if (_dtToStart < dt) {\n // Adjust dt to make sure that animation is on point\n dt = _dtToStart;\n }\n\n if (!_runner.active()) continue; // If this runner is still going, signal that we need another animation\n // frame, otherwise, remove the completed runner\n\n var finished = _runner.step(dt).done;\n\n if (!finished) {\n runnersLeft = true; // continue\n } else if (_runnerInfo2.persist !== true) {\n // runner is finished. And runner might get removed\n var endTime = _runner.duration() - _runner.time() + this._time;\n\n if (endTime + _runnerInfo2.persist < this._time) {\n // Delete runner and correct index\n _runner.unschedule();\n\n --i;\n --len;\n }\n }\n } // Basically: we continue when there are runners right from us in time\n // when -->, and when runners are left from us when <--\n\n\n if (runnersLeft && !(this._speed < 0 && this._time === 0) || this._runnerIds.length && this._speed < 0 && this._time > 0) {\n this._continue();\n } else {\n this.pause();\n this.fire('finished');\n }\n\n return this;\n } // Checks if we are running and continues the animation\n\n }, {\n key: \"_continue\",\n value: function _continue() {\n var immediateStep = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n Animator.cancelFrame(this._nextFrame);\n this._nextFrame = null;\n if (immediateStep) return this._stepImmediate();\n if (this._paused) return this;\n this._nextFrame = Animator.frame(this._step);\n return this;\n }\n }, {\n key: \"active\",\n value: function active() {\n return !!this._nextFrame;\n }\n }]);\n\n return Timeline;\n}(EventTarget);\nregisterMethods({\n Element: {\n timeline: function timeline(_timeline) {\n if (_timeline == null) {\n this._timeline = this._timeline || new Timeline();\n return this._timeline;\n } else {\n this._timeline = _timeline;\n return this;\n }\n }\n }\n});\n\nfunction ownKeys$2(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread$1(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys$2(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys$2(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nvar Runner =\n/*#__PURE__*/\nfunction (_EventTarget) {\n _inherits(Runner, _EventTarget);\n\n function Runner(options) {\n var _this;\n\n _classCallCheck(this, Runner);\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(Runner).call(this)); // Store a unique id on the runner, so that we can identify it later\n\n _this.id = Runner.id++; // Ensure a default value\n\n options = options == null ? timeline.duration : options; // Ensure that we get a controller\n\n options = typeof options === 'function' ? new Controller(options) : options; // Declare all of the variables\n\n _this._element = null;\n _this._timeline = null;\n _this.done = false;\n _this._queue = []; // Work out the stepper and the duration\n\n _this._duration = typeof options === 'number' && options;\n _this._isDeclarative = options instanceof Controller;\n _this._stepper = _this._isDeclarative ? options : new Ease(); // We copy the current values from the timeline because they can change\n\n _this._history = {}; // Store the state of the runner\n\n _this.enabled = true;\n _this._time = 0;\n _this._lastTime = 0; // At creation, the runner is in reseted state\n\n _this._reseted = true; // Save transforms applied to this runner\n\n _this.transforms = new Matrix();\n _this.transformId = 1; // Looping variables\n\n _this._haveReversed = false;\n _this._reverse = false;\n _this._loopsDone = 0;\n _this._swing = false;\n _this._wait = 0;\n _this._times = 1;\n _this._frameId = null; // Stores how long a runner is stored after beeing done\n\n _this._persist = _this._isDeclarative ? true : null;\n return _this;\n }\n /*\r\n Runner Definitions\r\n ==================\r\n These methods help us define the runtime behaviour of the Runner or they\r\n help us make new runners from the current runner\r\n */\n\n\n _createClass(Runner, [{\n key: \"element\",\n value: function element(_element) {\n if (_element == null) return this._element;\n this._element = _element;\n\n _element._prepareRunner();\n\n return this;\n }\n }, {\n key: \"timeline\",\n value: function timeline(_timeline) {\n // check explicitly for undefined so we can set the timeline to null\n if (typeof _timeline === 'undefined') return this._timeline;\n this._timeline = _timeline;\n return this;\n }\n }, {\n key: \"animate\",\n value: function animate(duration, delay, when) {\n var o = Runner.sanitise(duration, delay, when);\n var runner = new Runner(o.duration);\n if (this._timeline) runner.timeline(this._timeline);\n if (this._element) runner.element(this._element);\n return runner.loop(o).schedule(o.delay, o.when);\n }\n }, {\n key: \"schedule\",\n value: function schedule(timeline, delay, when) {\n // The user doesn't need to pass a timeline if we already have one\n if (!(timeline instanceof Timeline)) {\n when = delay;\n delay = timeline;\n timeline = this.timeline();\n } // If there is no timeline, yell at the user...\n\n\n if (!timeline) {\n throw Error('Runner cannot be scheduled without timeline');\n } // Schedule the runner on the timeline provided\n\n\n timeline.schedule(this, delay, when);\n return this;\n }\n }, {\n key: \"unschedule\",\n value: function unschedule() {\n var timeline = this.timeline();\n timeline && timeline.unschedule(this);\n return this;\n }\n }, {\n key: \"loop\",\n value: function loop(times, swing, wait) {\n // Deal with the user passing in an object\n if (_typeof(times) === 'object') {\n swing = times.swing;\n wait = times.wait;\n times = times.times;\n } // Sanitise the values and store them\n\n\n this._times = times || Infinity;\n this._swing = swing || false;\n this._wait = wait || 0; // Allow true to be passed\n\n if (this._times === true) {\n this._times = Infinity;\n }\n\n return this;\n }\n }, {\n key: \"delay\",\n value: function delay(_delay) {\n return this.animate(0, _delay);\n }\n /*\r\n Basic Functionality\r\n ===================\r\n These methods allow us to attach basic functions to the runner directly\r\n */\n\n }, {\n key: \"queue\",\n value: function queue(initFn, runFn, retargetFn, isTransform) {\n this._queue.push({\n initialiser: initFn || noop,\n runner: runFn || noop,\n retarget: retargetFn,\n isTransform: isTransform,\n initialised: false,\n finished: false\n });\n\n var timeline = this.timeline();\n timeline && this.timeline()._continue();\n return this;\n }\n }, {\n key: \"during\",\n value: function during(fn) {\n return this.queue(null, fn);\n }\n }, {\n key: \"after\",\n value: function after(fn) {\n return this.on('finished', fn);\n }\n /*\r\n Runner animation methods\r\n ========================\r\n Control how the animation plays\r\n */\n\n }, {\n key: \"time\",\n value: function time(_time) {\n if (_time == null) {\n return this._time;\n }\n\n var dt = _time - this._time;\n this.step(dt);\n return this;\n }\n }, {\n key: \"duration\",\n value: function duration() {\n return this._times * (this._wait + this._duration) - this._wait;\n }\n }, {\n key: \"loops\",\n value: function loops(p) {\n var loopDuration = this._duration + this._wait;\n\n if (p == null) {\n var loopsDone = Math.floor(this._time / loopDuration);\n var relativeTime = this._time - loopsDone * loopDuration;\n var position = relativeTime / this._duration;\n return Math.min(loopsDone + position, this._times);\n }\n\n var whole = Math.floor(p);\n var partial = p % 1;\n var time = loopDuration * whole + this._duration * partial;\n return this.time(time);\n }\n }, {\n key: \"persist\",\n value: function persist(dtOrForever) {\n if (dtOrForever == null) return this._persist;\n this._persist = dtOrForever;\n return this;\n }\n }, {\n key: \"position\",\n value: function position(p) {\n // Get all of the variables we need\n var x = this._time;\n var d = this._duration;\n var w = this._wait;\n var t = this._times;\n var s = this._swing;\n var r = this._reverse;\n var position;\n\n if (p == null) {\n /*\r\n This function converts a time to a position in the range [0, 1]\r\n The full explanation can be found in this desmos demonstration\r\n https://www.desmos.com/calculator/u4fbavgche\r\n The logic is slightly simplified here because we can use booleans\r\n */\n // Figure out the value without thinking about the start or end time\n var f = function f(x) {\n var swinging = s * Math.floor(x % (2 * (w + d)) / (w + d));\n var backwards = swinging && !r || !swinging && r;\n var uncliped = Math.pow(-1, backwards) * (x % (w + d)) / d + backwards;\n var clipped = Math.max(Math.min(uncliped, 1), 0);\n return clipped;\n }; // Figure out the value by incorporating the start time\n\n\n var endTime = t * (w + d) - w;\n position = x <= 0 ? Math.round(f(1e-5)) : x < endTime ? f(x) : Math.round(f(endTime - 1e-5));\n return position;\n } // Work out the loops done and add the position to the loops done\n\n\n var loopsDone = Math.floor(this.loops());\n var swingForward = s && loopsDone % 2 === 0;\n var forwards = swingForward && !r || r && swingForward;\n position = loopsDone + (forwards ? p : 1 - p);\n return this.loops(position);\n }\n }, {\n key: \"progress\",\n value: function progress(p) {\n if (p == null) {\n return Math.min(1, this._time / this.duration());\n }\n\n return this.time(p * this.duration());\n }\n }, {\n key: \"step\",\n value: function step(dt) {\n // If we are inactive, this stepper just gets skipped\n if (!this.enabled) return this; // Update the time and get the new position\n\n dt = dt == null ? 16 : dt;\n this._time += dt;\n var position = this.position(); // Figure out if we need to run the stepper in this frame\n\n var running = this._lastPosition !== position && this._time >= 0;\n this._lastPosition = position; // Figure out if we just started\n\n var duration = this.duration();\n var justStarted = this._lastTime <= 0 && this._time > 0;\n var justFinished = this._lastTime < duration && this._time >= duration;\n this._lastTime = this._time;\n\n if (justStarted) {\n this.fire('start', this);\n } // Work out if the runner is finished set the done flag here so animations\n // know, that they are running in the last step (this is good for\n // transformations which can be merged)\n\n\n var declarative = this._isDeclarative;\n this.done = !declarative && !justFinished && this._time >= duration; // Runner is running. So its not in reseted state anymore\n\n this._reseted = false; // Call initialise and the run function\n\n if (running || declarative) {\n this._initialise(running); // clear the transforms on this runner so they dont get added again and again\n\n\n this.transforms = new Matrix();\n\n var converged = this._run(declarative ? dt : position);\n\n this.fire('step', this);\n } // correct the done flag here\n // declaritive animations itself know when they converged\n\n\n this.done = this.done || converged && declarative;\n\n if (justFinished) {\n this.fire('finished', this);\n }\n\n return this;\n }\n }, {\n key: \"reset\",\n value: function reset() {\n if (this._reseted) return this;\n this.time(0);\n this._reseted = true;\n return this;\n }\n }, {\n key: \"finish\",\n value: function finish() {\n return this.step(Infinity);\n }\n }, {\n key: \"reverse\",\n value: function reverse(_reverse) {\n this._reverse = _reverse == null ? !this._reverse : _reverse;\n return this;\n }\n }, {\n key: \"ease\",\n value: function ease(fn) {\n this._stepper = new Ease(fn);\n return this;\n }\n }, {\n key: \"active\",\n value: function active(enabled) {\n if (enabled == null) return this.enabled;\n this.enabled = enabled;\n return this;\n }\n /*\r\n Private Methods\r\n ===============\r\n Methods that shouldn't be used externally\r\n */\n // Save a morpher to the morpher list so that we can retarget it later\n\n }, {\n key: \"_rememberMorpher\",\n value: function _rememberMorpher(method, morpher) {\n this._history[method] = {\n morpher: morpher,\n caller: this._queue[this._queue.length - 1]\n }; // We have to resume the timeline in case a controller\n // is already done without beeing ever run\n // This can happen when e.g. this is done:\n // anim = el.animate(new SVG.Spring)\n // and later\n // anim.move(...)\n\n if (this._isDeclarative) {\n var timeline = this.timeline();\n timeline && timeline.play();\n }\n } // Try to set the target for a morpher if the morpher exists, otherwise\n // do nothing and return false\n\n }, {\n key: \"_tryRetarget\",\n value: function _tryRetarget(method, target, extra) {\n if (this._history[method]) {\n // if the last method wasnt even initialised, throw it away\n if (!this._history[method].caller.initialised) {\n var index = this._queue.indexOf(this._history[method].caller);\n\n this._queue.splice(index, 1);\n\n return false;\n } // for the case of transformations, we use the special retarget function\n // which has access to the outer scope\n\n\n if (this._history[method].caller.retarget) {\n this._history[method].caller.retarget(target, extra); // for everything else a simple morpher change is sufficient\n\n } else {\n this._history[method].morpher.to(target);\n }\n\n this._history[method].caller.finished = false;\n var timeline = this.timeline();\n timeline && timeline.play();\n return true;\n }\n\n return false;\n } // Run each initialise function in the runner if required\n\n }, {\n key: \"_initialise\",\n value: function _initialise(running) {\n // If we aren't running, we shouldn't initialise when not declarative\n if (!running && !this._isDeclarative) return; // Loop through all of the initialisers\n\n for (var i = 0, len = this._queue.length; i < len; ++i) {\n // Get the current initialiser\n var current = this._queue[i]; // Determine whether we need to initialise\n\n var needsIt = this._isDeclarative || !current.initialised && running;\n running = !current.finished; // Call the initialiser if we need to\n\n if (needsIt && running) {\n current.initialiser.call(this);\n current.initialised = true;\n }\n }\n } // Run each run function for the position or dt given\n\n }, {\n key: \"_run\",\n value: function _run(positionOrDt) {\n // Run all of the _queue directly\n var allfinished = true;\n\n for (var i = 0, len = this._queue.length; i < len; ++i) {\n // Get the current function to run\n var current = this._queue[i]; // Run the function if its not finished, we keep track of the finished\n // flag for the sake of declarative _queue\n\n var converged = current.runner.call(this, positionOrDt);\n current.finished = current.finished || converged === true;\n allfinished = allfinished && current.finished;\n } // We report when all of the constructors are finished\n\n\n return allfinished;\n }\n }, {\n key: \"addTransform\",\n value: function addTransform(transform, index) {\n this.transforms.lmultiplyO(transform);\n return this;\n }\n }, {\n key: \"clearTransform\",\n value: function clearTransform() {\n this.transforms = new Matrix();\n return this;\n } // TODO: Keep track of all transformations so that deletion is faster\n\n }, {\n key: \"clearTransformsFromQueue\",\n value: function clearTransformsFromQueue() {\n if (!this.done || !this._timeline || !this._timeline._runnerIds.includes(this.id)) {\n this._queue = this._queue.filter(function (item) {\n return !item.isTransform;\n });\n }\n }\n }], [{\n key: \"sanitise\",\n value: function sanitise(duration, delay, when) {\n // Initialise the default parameters\n var times = 1;\n var swing = false;\n var wait = 0;\n duration = duration || timeline.duration;\n delay = delay || timeline.delay;\n when = when || 'last'; // If we have an object, unpack the values\n\n if (_typeof(duration) === 'object' && !(duration instanceof Stepper)) {\n delay = duration.delay || delay;\n when = duration.when || when;\n swing = duration.swing || swing;\n times = duration.times || times;\n wait = duration.wait || wait;\n duration = duration.duration || timeline.duration;\n }\n\n return {\n duration: duration,\n delay: delay,\n swing: swing,\n times: times,\n wait: wait,\n when: when\n };\n }\n }]);\n\n return Runner;\n}(EventTarget);\nRunner.id = 0;\n\nvar FakeRunner =\n/*#__PURE__*/\nfunction () {\n function FakeRunner() {\n var transforms = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : new Matrix();\n var id = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : -1;\n var done = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n\n _classCallCheck(this, FakeRunner);\n\n this.transforms = transforms;\n this.id = id;\n this.done = done;\n }\n\n _createClass(FakeRunner, [{\n key: \"clearTransformsFromQueue\",\n value: function clearTransformsFromQueue() {}\n }]);\n\n return FakeRunner;\n}();\n\nextend([Runner, FakeRunner], {\n mergeWith: function mergeWith(runner) {\n return new FakeRunner(runner.transforms.lmultiply(this.transforms), runner.id);\n }\n}); // FakeRunner.emptyRunner = new FakeRunner()\n\nvar lmultiply = function lmultiply(last, curr) {\n return last.lmultiplyO(curr);\n};\n\nvar getRunnerTransform = function getRunnerTransform(runner) {\n return runner.transforms;\n};\n\nfunction mergeTransforms() {\n // Find the matrix to apply to the element and apply it\n var runners = this._transformationRunners.runners;\n var netTransform = runners.map(getRunnerTransform).reduce(lmultiply, new Matrix());\n this.transform(netTransform);\n\n this._transformationRunners.merge();\n\n if (this._transformationRunners.length() === 1) {\n this._frameId = null;\n }\n}\n\nvar RunnerArray =\n/*#__PURE__*/\nfunction () {\n function RunnerArray() {\n _classCallCheck(this, RunnerArray);\n\n this.runners = [];\n this.ids = [];\n }\n\n _createClass(RunnerArray, [{\n key: \"add\",\n value: function add(runner) {\n if (this.runners.includes(runner)) return;\n var id = runner.id + 1;\n this.runners.push(runner);\n this.ids.push(id);\n return this;\n }\n }, {\n key: \"getByID\",\n value: function getByID(id) {\n return this.runners[this.ids.indexOf(id + 1)];\n }\n }, {\n key: \"remove\",\n value: function remove(id) {\n var index = this.ids.indexOf(id + 1);\n this.ids.splice(index, 1);\n this.runners.splice(index, 1);\n return this;\n }\n }, {\n key: \"merge\",\n value: function merge() {\n var _this2 = this;\n\n var lastRunner = null;\n this.runners.forEach(function (runner, i) {\n var condition = lastRunner && runner.done && lastRunner.done // don't merge runner when persisted on timeline\n && (!runner._timeline || !runner._timeline._runnerIds.includes(runner.id)) && (!lastRunner._timeline || !lastRunner._timeline._runnerIds.includes(lastRunner.id));\n\n if (condition) {\n // the +1 happens in the function\n _this2.remove(runner.id);\n\n _this2.edit(lastRunner.id, runner.mergeWith(lastRunner));\n }\n\n lastRunner = runner;\n });\n return this;\n }\n }, {\n key: \"edit\",\n value: function edit(id, newRunner) {\n var index = this.ids.indexOf(id + 1);\n this.ids.splice(index, 1, id + 1);\n this.runners.splice(index, 1, newRunner);\n return this;\n }\n }, {\n key: \"length\",\n value: function length() {\n return this.ids.length;\n }\n }, {\n key: \"clearBefore\",\n value: function clearBefore(id) {\n var deleteCnt = this.ids.indexOf(id + 1) || 1;\n this.ids.splice(0, deleteCnt, 0);\n this.runners.splice(0, deleteCnt, new FakeRunner()).forEach(function (r) {\n return r.clearTransformsFromQueue();\n });\n return this;\n }\n }]);\n\n return RunnerArray;\n}();\n\nregisterMethods({\n Element: {\n animate: function animate(duration, delay, when) {\n var o = Runner.sanitise(duration, delay, when);\n var timeline = this.timeline();\n return new Runner(o.duration).loop(o).element(this).timeline(timeline.play()).schedule(o.delay, o.when);\n },\n delay: function delay(by, when) {\n return this.animate(0, by, when);\n },\n // this function searches for all runners on the element and deletes the ones\n // which run before the current one. This is because absolute transformations\n // overwfrite anything anyway so there is no need to waste time computing\n // other runners\n _clearTransformRunnersBefore: function _clearTransformRunnersBefore(currentRunner) {\n this._transformationRunners.clearBefore(currentRunner.id);\n },\n _currentTransform: function _currentTransform(current) {\n return this._transformationRunners.runners // we need the equal sign here to make sure, that also transformations\n // on the same runner which execute before the current transformation are\n // taken into account\n .filter(function (runner) {\n return runner.id <= current.id;\n }).map(getRunnerTransform).reduce(lmultiply, new Matrix());\n },\n _addRunner: function _addRunner(runner) {\n this._transformationRunners.add(runner); // Make sure that the runner merge is executed at the very end of\n // all Animator functions. Thats why we use immediate here to execute\n // the merge right after all frames are run\n\n\n Animator.cancelImmediate(this._frameId);\n this._frameId = Animator.immediate(mergeTransforms.bind(this));\n },\n _prepareRunner: function _prepareRunner() {\n if (this._frameId == null) {\n this._transformationRunners = new RunnerArray().add(new FakeRunner(new Matrix(this)));\n }\n }\n }\n});\nextend(Runner, {\n attr: function attr(a, v) {\n return this.styleAttr('attr', a, v);\n },\n // Add animatable styles\n css: function css(s, v) {\n return this.styleAttr('css', s, v);\n },\n styleAttr: function styleAttr(type, name, val) {\n // apply attributes individually\n if (_typeof(name) === 'object') {\n for (var key in name) {\n this.styleAttr(type, key, name[key]);\n }\n\n return this;\n }\n\n var morpher = new Morphable(this._stepper).to(val);\n this.queue(function () {\n morpher = morpher.from(this.element()[type](name));\n }, function (pos) {\n this.element()[type](name, morpher.at(pos));\n return morpher.done();\n });\n return this;\n },\n zoom: function zoom(level, point) {\n if (this._tryRetarget('zoom', to, point)) return this;\n var morpher = new Morphable(this._stepper).to(new SVGNumber(level));\n this.queue(function () {\n morpher = morpher.from(this.element().zoom());\n }, function (pos) {\n this.element().zoom(morpher.at(pos), point);\n return morpher.done();\n }, function (newLevel, newPoint) {\n point = newPoint;\n morpher.to(newLevel);\n });\n\n this._rememberMorpher('zoom', morpher);\n\n return this;\n },\n\n /**\r\n ** absolute transformations\r\n **/\n //\n // M v -----|-----(D M v = F v)------|-----> T v\n //\n // 1. define the final state (T) and decompose it (once)\n // t = [tx, ty, the, lam, sy, sx]\n // 2. on every frame: pull the current state of all previous transforms\n // (M - m can change)\n // and then write this as m = [tx0, ty0, the0, lam0, sy0, sx0]\n // 3. Find the interpolated matrix F(pos) = m + pos * (t - m)\n // - Note F(0) = M\n // - Note F(1) = T\n // 4. Now you get the delta matrix as a result: D = F * inv(M)\n transform: function transform(transforms, relative, affine) {\n // If we have a declarative function, we should retarget it if possible\n relative = transforms.relative || relative;\n\n if (this._isDeclarative && !relative && this._tryRetarget('transform', transforms)) {\n return this;\n } // Parse the parameters\n\n\n var isMatrix = Matrix.isMatrixLike(transforms);\n affine = transforms.affine != null ? transforms.affine : affine != null ? affine : !isMatrix; // Create a morepher and set its type\n\n var morpher = new Morphable(this._stepper).type(affine ? TransformBag : Matrix);\n var origin;\n var element;\n var current;\n var currentAngle;\n var startTransform;\n\n function setup() {\n // make sure element and origin is defined\n element = element || this.element();\n origin = origin || getOrigin(transforms, element);\n startTransform = new Matrix(relative ? undefined : element); // add the runner to the element so it can merge transformations\n\n element._addRunner(this); // Deactivate all transforms that have run so far if we are absolute\n\n\n if (!relative) {\n element._clearTransformRunnersBefore(this);\n }\n }\n\n function run(pos) {\n // clear all other transforms before this in case something is saved\n // on this runner. We are absolute. We dont need these!\n if (!relative) this.clearTransform();\n\n var _transform = new Point(origin).transform(element._currentTransform(this)),\n x = _transform.x,\n y = _transform.y;\n\n var target = new Matrix(_objectSpread$1({}, transforms, {\n origin: [x, y]\n }));\n var start = this._isDeclarative && current ? current : startTransform;\n\n if (affine) {\n target = target.decompose(x, y);\n start = start.decompose(x, y); // Get the current and target angle as it was set\n\n var rTarget = target.rotate;\n var rCurrent = start.rotate; // Figure out the shortest path to rotate directly\n\n var possibilities = [rTarget - 360, rTarget, rTarget + 360];\n var distances = possibilities.map(function (a) {\n return Math.abs(a - rCurrent);\n });\n var shortest = Math.min.apply(Math, _toConsumableArray(distances));\n var index = distances.indexOf(shortest);\n target.rotate = possibilities[index];\n }\n\n if (relative) {\n // we have to be careful here not to overwrite the rotation\n // with the rotate method of Matrix\n if (!isMatrix) {\n target.rotate = transforms.rotate || 0;\n }\n\n if (this._isDeclarative && currentAngle) {\n start.rotate = currentAngle;\n }\n }\n\n morpher.from(start);\n morpher.to(target);\n var affineParameters = morpher.at(pos);\n currentAngle = affineParameters.rotate;\n current = new Matrix(affineParameters);\n this.addTransform(current);\n\n element._addRunner(this);\n\n return morpher.done();\n }\n\n function retarget(newTransforms) {\n // only get a new origin if it changed since the last call\n if ((newTransforms.origin || 'center').toString() !== (transforms.origin || 'center').toString()) {\n origin = getOrigin(transforms, element);\n } // overwrite the old transformations with the new ones\n\n\n transforms = _objectSpread$1({}, newTransforms, {\n origin: origin\n });\n }\n\n this.queue(setup, run, retarget, true);\n this._isDeclarative && this._rememberMorpher('transform', morpher);\n return this;\n },\n // Animatable x-axis\n x: function x(_x, relative) {\n return this._queueNumber('x', _x);\n },\n // Animatable y-axis\n y: function y(_y) {\n return this._queueNumber('y', _y);\n },\n dx: function dx() {\n var x = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n return this._queueNumberDelta('x', x);\n },\n dy: function dy() {\n var y = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n return this._queueNumberDelta('y', y);\n },\n dmove: function dmove(x, y) {\n return this.dx(x).dy(y);\n },\n _queueNumberDelta: function _queueNumberDelta(method, to) {\n to = new SVGNumber(to); // Try to change the target if we have this method already registerd\n\n if (this._tryRetarget(method, to)) return this; // Make a morpher and queue the animation\n\n var morpher = new Morphable(this._stepper).to(to);\n var from = null;\n this.queue(function () {\n from = this.element()[method]();\n morpher.from(from);\n morpher.to(from + to);\n }, function (pos) {\n this.element()[method](morpher.at(pos));\n return morpher.done();\n }, function (newTo) {\n morpher.to(from + new SVGNumber(newTo));\n }); // Register the morpher so that if it is changed again, we can retarget it\n\n this._rememberMorpher(method, morpher);\n\n return this;\n },\n _queueObject: function _queueObject(method, to) {\n // Try to change the target if we have this method already registerd\n if (this._tryRetarget(method, to)) return this; // Make a morpher and queue the animation\n\n var morpher = new Morphable(this._stepper).to(to);\n this.queue(function () {\n morpher.from(this.element()[method]());\n }, function (pos) {\n this.element()[method](morpher.at(pos));\n return morpher.done();\n }); // Register the morpher so that if it is changed again, we can retarget it\n\n this._rememberMorpher(method, morpher);\n\n return this;\n },\n _queueNumber: function _queueNumber(method, value) {\n return this._queueObject(method, new SVGNumber(value));\n },\n // Animatable center x-axis\n cx: function cx(x) {\n return this._queueNumber('cx', x);\n },\n // Animatable center y-axis\n cy: function cy(y) {\n return this._queueNumber('cy', y);\n },\n // Add animatable move\n move: function move(x, y) {\n return this.x(x).y(y);\n },\n // Add animatable center\n center: function center(x, y) {\n return this.cx(x).cy(y);\n },\n // Add animatable size\n size: function size(width, height) {\n // animate bbox based size for all other elements\n var box;\n\n if (!width || !height) {\n box = this._element.bbox();\n }\n\n if (!width) {\n width = box.width / box.height * height;\n }\n\n if (!height) {\n height = box.height / box.width * width;\n }\n\n return this.width(width).height(height);\n },\n // Add animatable width\n width: function width(_width) {\n return this._queueNumber('width', _width);\n },\n // Add animatable height\n height: function height(_height) {\n return this._queueNumber('height', _height);\n },\n // Add animatable plot\n plot: function plot(a, b, c, d) {\n // Lines can be plotted with 4 arguments\n if (arguments.length === 4) {\n return this.plot([a, b, c, d]);\n }\n\n if (this._tryRetarget('plot', a)) return this;\n var morpher = new Morphable(this._stepper).type(this._element.MorphArray).to(a);\n this.queue(function () {\n morpher.from(this._element.array());\n }, function (pos) {\n this._element.plot(morpher.at(pos));\n\n return morpher.done();\n });\n\n this._rememberMorpher('plot', morpher);\n\n return this;\n },\n // Add leading method\n leading: function leading(value) {\n return this._queueNumber('leading', value);\n },\n // Add animatable viewbox\n viewbox: function viewbox(x, y, width, height) {\n return this._queueObject('viewbox', new Box(x, y, width, height));\n },\n update: function update(o) {\n if (_typeof(o) !== 'object') {\n return this.update({\n offset: arguments[0],\n color: arguments[1],\n opacity: arguments[2]\n });\n }\n\n if (o.opacity != null) this.attr('stop-opacity', o.opacity);\n if (o.color != null) this.attr('stop-color', o.color);\n if (o.offset != null) this.attr('offset', o.offset);\n return this;\n }\n});\nextend(Runner, {\n rx: rx,\n ry: ry,\n from: from,\n to: to\n});\nregister(Runner, 'Runner');\n\nvar Svg =\n/*#__PURE__*/\nfunction (_Container) {\n _inherits(Svg, _Container);\n\n function Svg(node) {\n var _this;\n\n _classCallCheck(this, Svg);\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(Svg).call(this, nodeOrNew('svg', node), node));\n\n _this.namespace();\n\n return _this;\n }\n\n _createClass(Svg, [{\n key: \"isRoot\",\n value: function isRoot() {\n return !this.node.parentNode || !(this.node.parentNode instanceof globals.window.SVGElement) || this.node.parentNode.nodeName === '#document';\n } // Check if this is a root svg\n // If not, call docs from this element\n\n }, {\n key: \"root\",\n value: function root() {\n if (this.isRoot()) return this;\n return _get(_getPrototypeOf(Svg.prototype), \"root\", this).call(this);\n } // Add namespaces\n\n }, {\n key: \"namespace\",\n value: function namespace() {\n if (!this.isRoot()) return this.root().namespace();\n return this.attr({\n xmlns: ns,\n version: '1.1'\n }).attr('xmlns:xlink', xlink, xmlns).attr('xmlns:svgjs', svgjs, xmlns);\n } // Creates and returns defs element\n\n }, {\n key: \"defs\",\n value: function defs() {\n if (!this.isRoot()) return this.root().defs();\n return adopt(this.node.querySelector('defs')) || this.put(new Defs());\n } // custom parent method\n\n }, {\n key: \"parent\",\n value: function parent(type) {\n if (this.isRoot()) {\n return this.node.parentNode.nodeName === '#document' ? null : adopt(this.node.parentNode);\n }\n\n return _get(_getPrototypeOf(Svg.prototype), \"parent\", this).call(this, type);\n }\n }, {\n key: \"clear\",\n value: function clear() {\n // remove children\n while (this.node.hasChildNodes()) {\n this.node.removeChild(this.node.lastChild);\n } // remove defs reference\n\n\n delete this._defs;\n return this;\n }\n }]);\n\n return Svg;\n}(Container);\nregisterMethods({\n Container: {\n // Create nested svg document\n nested: wrapWithAttrCheck(function () {\n return this.put(new Svg());\n })\n }\n});\nregister(Svg, 'Svg', true);\n\nvar _Symbol =\n/*#__PURE__*/\nfunction (_Container) {\n _inherits(_Symbol, _Container);\n\n // Initialize node\n function _Symbol(node) {\n _classCallCheck(this, _Symbol);\n\n return _possibleConstructorReturn(this, _getPrototypeOf(_Symbol).call(this, nodeOrNew('symbol', node), node));\n }\n\n return _Symbol;\n}(Container);\nregisterMethods({\n Container: {\n symbol: wrapWithAttrCheck(function () {\n return this.put(new _Symbol());\n })\n }\n});\nregister(_Symbol, 'Symbol');\n\nfunction plain(text) {\n // clear if build mode is disabled\n if (this._build === false) {\n this.clear();\n } // create text node\n\n\n this.node.appendChild(globals.document.createTextNode(text));\n return this;\n} // Get length of text element\n\nfunction length() {\n return this.node.getComputedTextLength();\n}\n\nvar textable = ({\n\t__proto__: null,\n\tplain: plain,\n\tlength: length\n});\n\nvar Text =\n/*#__PURE__*/\nfunction (_Shape) {\n _inherits(Text, _Shape);\n\n // Initialize node\n function Text(node) {\n var _this;\n\n _classCallCheck(this, Text);\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(Text).call(this, nodeOrNew('text', node), node));\n _this.dom.leading = new SVGNumber(1.3); // store leading value for rebuilding\n\n _this._rebuild = true; // enable automatic updating of dy values\n\n _this._build = false; // disable build mode for adding multiple lines\n\n return _this;\n } // Move over x-axis\n // Text is moved its bounding box\n // text-anchor does NOT matter\n\n\n _createClass(Text, [{\n key: \"x\",\n value: function x(_x) {\n var box = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.bbox();\n\n if (_x == null) {\n return box.x;\n }\n\n return this.attr('x', this.attr('x') + _x - box.x);\n } // Move over y-axis\n\n }, {\n key: \"y\",\n value: function y(_y) {\n var box = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.bbox();\n\n if (_y == null) {\n return box.y;\n }\n\n return this.attr('y', this.attr('y') + _y - box.y);\n }\n }, {\n key: \"move\",\n value: function move(x, y) {\n var box = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this.bbox();\n return this.x(x, box).y(y, box);\n } // Move center over x-axis\n\n }, {\n key: \"cx\",\n value: function cx(x) {\n var box = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.bbox();\n\n if (x == null) {\n return box.cx;\n }\n\n return this.attr('x', this.attr('x') + x - box.cx);\n } // Move center over y-axis\n\n }, {\n key: \"cy\",\n value: function cy(y) {\n var box = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.bbox();\n\n if (y == null) {\n return box.cy;\n }\n\n return this.attr('y', this.attr('y') + y - box.cy);\n }\n }, {\n key: \"center\",\n value: function center(x, y) {\n var box = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this.bbox();\n return this.cx(x, box).cy(y, box);\n } // Set the text content\n\n }, {\n key: \"text\",\n value: function text(_text) {\n // act as getter\n if (_text === undefined) {\n var children = this.node.childNodes;\n var firstLine = 0;\n _text = '';\n\n for (var i = 0, len = children.length; i < len; ++i) {\n // skip textPaths - they are no lines\n if (children[i].nodeName === 'textPath') {\n if (i === 0) firstLine = 1;\n continue;\n } // add newline if its not the first child and newLined is set to true\n\n\n if (i !== firstLine && children[i].nodeType !== 3 && adopt(children[i]).dom.newLined === true) {\n _text += '\\n';\n } // add content of this node\n\n\n _text += children[i].textContent;\n }\n\n return _text;\n } // remove existing content\n\n\n this.clear().build(true);\n\n if (typeof _text === 'function') {\n // call block\n _text.call(this, this);\n } else {\n // store text and make sure text is not blank\n _text = _text.split('\\n'); // build new lines\n\n for (var j = 0, jl = _text.length; j < jl; j++) {\n this.tspan(_text[j]).newLine();\n }\n } // disable build mode and rebuild lines\n\n\n return this.build(false).rebuild();\n } // Set / get leading\n\n }, {\n key: \"leading\",\n value: function leading(value) {\n // act as getter\n if (value == null) {\n return this.dom.leading;\n } // act as setter\n\n\n this.dom.leading = new SVGNumber(value);\n return this.rebuild();\n } // Rebuild appearance type\n\n }, {\n key: \"rebuild\",\n value: function rebuild(_rebuild) {\n // store new rebuild flag if given\n if (typeof _rebuild === 'boolean') {\n this._rebuild = _rebuild;\n } // define position of all lines\n\n\n if (this._rebuild) {\n var self = this;\n var blankLineOffset = 0;\n var leading = this.dom.leading;\n this.each(function () {\n var fontSize = globals.window.getComputedStyle(this.node).getPropertyValue('font-size');\n var dy = leading * new SVGNumber(fontSize);\n\n if (this.dom.newLined) {\n this.attr('x', self.attr('x'));\n\n if (this.text() === '\\n') {\n blankLineOffset += dy;\n } else {\n this.attr('dy', dy + blankLineOffset);\n blankLineOffset = 0;\n }\n }\n });\n this.fire('rebuild');\n }\n\n return this;\n } // Enable / disable build mode\n\n }, {\n key: \"build\",\n value: function build(_build) {\n this._build = !!_build;\n return this;\n } // overwrite method from parent to set data properly\n\n }, {\n key: \"setData\",\n value: function setData(o) {\n this.dom = o;\n this.dom.leading = new SVGNumber(o.leading || 1.3);\n return this;\n }\n }]);\n\n return Text;\n}(Shape);\nextend(Text, textable);\nregisterMethods({\n Container: {\n // Create text element\n text: wrapWithAttrCheck(function (text) {\n return this.put(new Text()).text(text);\n }),\n // Create plain text element\n plain: wrapWithAttrCheck(function (text) {\n return this.put(new Text()).plain(text);\n })\n }\n});\nregister(Text, 'Text');\n\nvar Tspan =\n/*#__PURE__*/\nfunction (_Text) {\n _inherits(Tspan, _Text);\n\n // Initialize node\n function Tspan(node) {\n _classCallCheck(this, Tspan);\n\n return _possibleConstructorReturn(this, _getPrototypeOf(Tspan).call(this, nodeOrNew('tspan', node), node));\n } // Set text content\n\n\n _createClass(Tspan, [{\n key: \"text\",\n value: function text(_text) {\n if (_text == null) return this.node.textContent + (this.dom.newLined ? '\\n' : '');\n typeof _text === 'function' ? _text.call(this, this) : this.plain(_text);\n return this;\n } // Shortcut dx\n\n }, {\n key: \"dx\",\n value: function dx(_dx) {\n return this.attr('dx', _dx);\n } // Shortcut dy\n\n }, {\n key: \"dy\",\n value: function dy(_dy) {\n return this.attr('dy', _dy);\n }\n }, {\n key: \"x\",\n value: function x(_x) {\n return this.attr('x', _x);\n }\n }, {\n key: \"y\",\n value: function y(_y) {\n return this.attr('x', _y);\n }\n }, {\n key: \"move\",\n value: function move(x, y) {\n return this.x(x).y(y);\n } // Create new line\n\n }, {\n key: \"newLine\",\n value: function newLine() {\n // fetch text parent\n var t = this.parent(Text); // mark new line\n\n this.dom.newLined = true;\n var fontSize = globals.window.getComputedStyle(this.node).getPropertyValue('font-size');\n var dy = t.dom.leading * new SVGNumber(fontSize); // apply new position\n\n return this.dy(dy).attr('x', t.x());\n }\n }]);\n\n return Tspan;\n}(Text);\nextend(Tspan, textable);\nregisterMethods({\n Tspan: {\n tspan: wrapWithAttrCheck(function (text) {\n var tspan = new Tspan(); // clear if build mode is disabled\n\n if (!this._build) {\n this.clear();\n } // add new tspan\n\n\n this.node.appendChild(tspan.node);\n return tspan.text(text);\n })\n }\n});\nregister(Tspan, 'Tspan');\n\nvar ClipPath =\n/*#__PURE__*/\nfunction (_Container) {\n _inherits(ClipPath, _Container);\n\n function ClipPath(node) {\n _classCallCheck(this, ClipPath);\n\n return _possibleConstructorReturn(this, _getPrototypeOf(ClipPath).call(this, nodeOrNew('clipPath', node), node));\n } // Unclip all clipped elements and remove itself\n\n\n _createClass(ClipPath, [{\n key: \"remove\",\n value: function remove() {\n // unclip all targets\n this.targets().forEach(function (el) {\n el.unclip();\n }); // remove clipPath from parent\n\n return _get(_getPrototypeOf(ClipPath.prototype), \"remove\", this).call(this);\n }\n }, {\n key: \"targets\",\n value: function targets() {\n return baseFind('svg [clip-path*=\"' + this.id() + '\"]');\n }\n }]);\n\n return ClipPath;\n}(Container);\nregisterMethods({\n Container: {\n // Create clipping element\n clip: wrapWithAttrCheck(function () {\n return this.defs().put(new ClipPath());\n })\n },\n Element: {\n // Distribute clipPath to svg element\n clipWith: function clipWith(element) {\n // use given clip or create a new one\n var clipper = element instanceof ClipPath ? element : this.parent().clip().add(element); // apply mask\n\n return this.attr('clip-path', 'url(\"#' + clipper.id() + '\")');\n },\n // Unclip element\n unclip: function unclip() {\n return this.attr('clip-path', null);\n },\n clipper: function clipper() {\n return this.reference('clip-path');\n }\n }\n});\nregister(ClipPath, 'ClipPath');\n\nvar ForeignObject =\n/*#__PURE__*/\nfunction (_Element) {\n _inherits(ForeignObject, _Element);\n\n function ForeignObject(node) {\n _classCallCheck(this, ForeignObject);\n\n return _possibleConstructorReturn(this, _getPrototypeOf(ForeignObject).call(this, nodeOrNew('foreignObject', node), node));\n }\n\n return ForeignObject;\n}(Element);\nregisterMethods({\n Container: {\n foreignObject: wrapWithAttrCheck(function (width, height) {\n return this.put(new ForeignObject()).size(width, height);\n })\n }\n});\nregister(ForeignObject, 'ForeignObject');\n\nvar G =\n/*#__PURE__*/\nfunction (_Container) {\n _inherits(G, _Container);\n\n function G(node) {\n _classCallCheck(this, G);\n\n return _possibleConstructorReturn(this, _getPrototypeOf(G).call(this, nodeOrNew('g', node), node));\n }\n\n _createClass(G, [{\n key: \"x\",\n value: function x(_x) {\n var box = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.bbox();\n if (_x == null) return box.x;\n return this.move(_x, box.y, box);\n }\n }, {\n key: \"y\",\n value: function y(_y) {\n var box = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.bbox();\n if (_y == null) return box.y;\n return this.move(box.x, _y, box);\n }\n }, {\n key: \"move\",\n value: function move() {\n var x = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n var y = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var box = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this.bbox();\n var dx = x - box.x;\n var dy = y - box.y;\n return this.dmove(dx, dy);\n }\n }, {\n key: \"dx\",\n value: function dx(_dx) {\n return this.dmove(_dx, 0);\n }\n }, {\n key: \"dy\",\n value: function dy(_dy) {\n return this.dmove(0, _dy);\n }\n }, {\n key: \"dmove\",\n value: function dmove(dx, dy) {\n this.children().forEach(function (child, i) {\n // Get the childs bbox\n var bbox = child.bbox(); // Get childs matrix\n\n var m = new Matrix(child); // Translate childs matrix by amount and\n // transform it back into parents space\n\n var matrix = m.translate(dx, dy).transform(m.inverse()); // Calculate new x and y from old box\n\n var p = new Point(bbox.x, bbox.y).transform(matrix); // Move element\n\n child.move(p.x, p.y);\n });\n return this;\n }\n }, {\n key: \"width\",\n value: function width(_width) {\n var box = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.bbox();\n if (_width == null) return box.width;\n return this.size(_width, box.height, box);\n }\n }, {\n key: \"height\",\n value: function height(_height) {\n var box = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.bbox();\n if (_height == null) return box.height;\n return this.size(box.width, _height, box);\n }\n }, {\n key: \"size\",\n value: function size(width, height) {\n var box = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this.bbox();\n var p = proportionalSize(this, width, height, box);\n var scaleX = p.width / box.width;\n var scaleY = p.height / box.height;\n this.children().forEach(function (child, i) {\n var o = new Point(box).transform(new Matrix(child).inverse());\n child.scale(scaleX, scaleY, o.x, o.y);\n });\n return this;\n }\n }]);\n\n return G;\n}(Container);\nregisterMethods({\n Container: {\n // Create a group element\n group: wrapWithAttrCheck(function () {\n return this.put(new G());\n })\n }\n});\nregister(G, 'G');\n\nvar A =\n/*#__PURE__*/\nfunction (_Container) {\n _inherits(A, _Container);\n\n function A(node) {\n _classCallCheck(this, A);\n\n return _possibleConstructorReturn(this, _getPrototypeOf(A).call(this, nodeOrNew('a', node), node));\n } // Link url\n\n\n _createClass(A, [{\n key: \"to\",\n value: function to(url) {\n return this.attr('href', url, xlink);\n } // Link target attribute\n\n }, {\n key: \"target\",\n value: function target(_target) {\n return this.attr('target', _target);\n }\n }]);\n\n return A;\n}(Container);\nregisterMethods({\n Container: {\n // Create a hyperlink element\n link: wrapWithAttrCheck(function (url) {\n return this.put(new A()).to(url);\n })\n },\n Element: {\n // Create a hyperlink element\n linkTo: function linkTo(url) {\n var link = new A();\n\n if (typeof url === 'function') {\n url.call(link, link);\n } else {\n link.to(url);\n }\n\n return this.parent().put(link).put(this);\n }\n }\n});\nregister(A, 'A');\n\nvar Mask =\n/*#__PURE__*/\nfunction (_Container) {\n _inherits(Mask, _Container);\n\n // Initialize node\n function Mask(node) {\n _classCallCheck(this, Mask);\n\n return _possibleConstructorReturn(this, _getPrototypeOf(Mask).call(this, nodeOrNew('mask', node), node));\n } // Unmask all masked elements and remove itself\n\n\n _createClass(Mask, [{\n key: \"remove\",\n value: function remove() {\n // unmask all targets\n this.targets().forEach(function (el) {\n el.unmask();\n }); // remove mask from parent\n\n return _get(_getPrototypeOf(Mask.prototype), \"remove\", this).call(this);\n }\n }, {\n key: \"targets\",\n value: function targets() {\n return baseFind('svg [mask*=\"' + this.id() + '\"]');\n }\n }]);\n\n return Mask;\n}(Container);\nregisterMethods({\n Container: {\n mask: wrapWithAttrCheck(function () {\n return this.defs().put(new Mask());\n })\n },\n Element: {\n // Distribute mask to svg element\n maskWith: function maskWith(element) {\n // use given mask or create a new one\n var masker = element instanceof Mask ? element : this.parent().mask().add(element); // apply mask\n\n return this.attr('mask', 'url(\"#' + masker.id() + '\")');\n },\n // Unmask element\n unmask: function unmask() {\n return this.attr('mask', null);\n },\n masker: function masker() {\n return this.reference('mask');\n }\n }\n});\nregister(Mask, 'Mask');\n\nfunction ownKeys$3(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread$2(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys$3(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys$3(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction cssRule(selector, rule) {\n if (!selector) return '';\n if (!rule) return selector;\n var ret = selector + '{';\n\n for (var i in rule) {\n ret += unCamelCase(i) + ':' + rule[i] + ';';\n }\n\n ret += '}';\n return ret;\n}\n\nvar Style =\n/*#__PURE__*/\nfunction (_Element) {\n _inherits(Style, _Element);\n\n function Style(node) {\n _classCallCheck(this, Style);\n\n return _possibleConstructorReturn(this, _getPrototypeOf(Style).call(this, nodeOrNew('style', node), node));\n }\n\n _createClass(Style, [{\n key: \"addText\",\n value: function addText() {\n var w = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n this.node.textContent += w;\n return this;\n }\n }, {\n key: \"font\",\n value: function font(name, src) {\n var params = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n return this.rule('@font-face', _objectSpread$2({\n fontFamily: name,\n src: src\n }, params));\n }\n }, {\n key: \"rule\",\n value: function rule(selector, obj) {\n return this.addText(cssRule(selector, obj));\n }\n }]);\n\n return Style;\n}(Element);\nregisterMethods('Dom', {\n style: wrapWithAttrCheck(function (selector, obj) {\n return this.put(new Style()).rule(selector, obj);\n }),\n fontface: wrapWithAttrCheck(function (name, src, params) {\n return this.put(new Style()).font(name, src, params);\n })\n});\nregister(Style, 'Style');\n\nvar TextPath =\n/*#__PURE__*/\nfunction (_Text) {\n _inherits(TextPath, _Text);\n\n // Initialize node\n function TextPath(node) {\n _classCallCheck(this, TextPath);\n\n return _possibleConstructorReturn(this, _getPrototypeOf(TextPath).call(this, nodeOrNew('textPath', node), node));\n } // return the array of the path track element\n\n\n _createClass(TextPath, [{\n key: \"array\",\n value: function array() {\n var track = this.track();\n return track ? track.array() : null;\n } // Plot path if any\n\n }, {\n key: \"plot\",\n value: function plot(d) {\n var track = this.track();\n var pathArray = null;\n\n if (track) {\n pathArray = track.plot(d);\n }\n\n return d == null ? pathArray : this;\n } // Get the path element\n\n }, {\n key: \"track\",\n value: function track() {\n return this.reference('href');\n }\n }]);\n\n return TextPath;\n}(Text);\nregisterMethods({\n Container: {\n textPath: wrapWithAttrCheck(function (text, path) {\n // Convert text to instance if needed\n if (!(text instanceof Text)) {\n text = this.text(text);\n }\n\n return text.path(path);\n })\n },\n Text: {\n // Create path for text to run on\n path: wrapWithAttrCheck(function (track) {\n var importNodes = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n var textPath = new TextPath(); // if track is a path, reuse it\n\n if (!(track instanceof Path)) {\n // create path element\n track = this.defs().path(track);\n } // link textPath to path and add content\n\n\n textPath.attr('href', '#' + track, xlink); // Transplant all nodes from text to textPath\n\n var node;\n\n if (importNodes) {\n while (node = this.node.firstChild) {\n textPath.node.appendChild(node);\n }\n } // add textPath element as child node and return textPath\n\n\n return this.put(textPath);\n }),\n // Get the textPath children\n textPath: function textPath() {\n return this.findOne('textPath');\n }\n },\n Path: {\n // creates a textPath from this path\n text: wrapWithAttrCheck(function (text) {\n // Convert text to instance if needed\n if (!(text instanceof Text)) {\n text = new Text().addTo(this.parent()).text(text);\n } // Create textPath from text and path and return\n\n\n return text.path(this);\n }),\n targets: function targets() {\n return baseFind('svg [href*=\"' + this.id() + '\"]');\n }\n }\n});\nTextPath.prototype.MorphArray = PathArray;\nregister(TextPath, 'TextPath');\n\nvar Use =\n/*#__PURE__*/\nfunction (_Shape) {\n _inherits(Use, _Shape);\n\n function Use(node) {\n _classCallCheck(this, Use);\n\n return _possibleConstructorReturn(this, _getPrototypeOf(Use).call(this, nodeOrNew('use', node), node));\n } // Use element as a reference\n\n\n _createClass(Use, [{\n key: \"element\",\n value: function element(_element, file) {\n // Set lined element\n return this.attr('href', (file || '') + '#' + _element, xlink);\n }\n }]);\n\n return Use;\n}(Shape);\nregisterMethods({\n Container: {\n // Create a use element\n use: wrapWithAttrCheck(function (element, file) {\n return this.put(new Use()).element(element, file);\n })\n }\n});\nregister(Use, 'Use');\n\n/* Optional Modules */\nvar SVG = makeInstance;\nextend([Svg, _Symbol, Image, Pattern, Marker], getMethodsFor('viewbox'));\nextend([Line, Polyline, Polygon, Path], getMethodsFor('marker'));\nextend(Text, getMethodsFor('Text'));\nextend(Path, getMethodsFor('Path'));\nextend(Defs, getMethodsFor('Defs'));\nextend([Text, Tspan], getMethodsFor('Tspan'));\nextend([Rect, Ellipse, Circle, Gradient], getMethodsFor('radius'));\nextend(EventTarget, getMethodsFor('EventTarget'));\nextend(Dom, getMethodsFor('Dom'));\nextend(Element, getMethodsFor('Element'));\nextend(Shape, getMethodsFor('Shape')); // extend(Element, getConstructor('Memory'))\n\nextend(Container, getMethodsFor('Container'));\nextend(Runner, getMethodsFor('Runner'));\nList.extend(getMethodNames());\nregisterMorphableType([SVGNumber, Color, Box, Matrix, SVGArray, PointArray, PathArray]);\nmakeMorphable();\n\nexport { A, Animator, SVGArray as Array, Box, Circle, ClipPath, Color, Container, Controller, Defs, Dom, Ease, Element, Ellipse, EventTarget, ForeignObject, G, Gradient, Image, Line, List, Marker, Mask, Matrix, Morphable, NonMorphable, SVGNumber as Number, ObjectBag, PID, Path, PathArray, Pattern, Point, PointArray, Polygon, Polyline, Queue, Rect, Runner, SVG, Shape, Spring, Stop, Style, Svg, _Symbol as Symbol, Text, TextPath, Timeline, TransformBag, Tspan, Use, adopt, assignNewId, create, defaults, dispatch, easing, eid, extend, baseFind as find, getClass, invent, makeInstance, makeMorphable, mockAdopt, namespaces, nodeOrNew, off, on, parser, regex, register, registerMorphableType, registerWindow, root, utils, wrapWithAttrCheck };\n//# sourceMappingURL=svg.esm.js.map\n","\r\nexport class Segment {\r\n\r\n segmentIndex: number = 0;\r\n // length:number = 0;\r\n // angle:number = 0;\r\n\r\n constructor(public Length: number, public Angle: number) {\r\n // this.length = length;\r\n // this.angle = angle;\r\n }\r\n\r\n clone() {\r\n return new Segment(this.Length, this.Angle);\r\n }\r\n\r\n}","import { Point } from \"./Point\";\r\nexport class Vector implements IVector {\r\n constructor(public x: number, public y: number) {\r\n // this.X = x; this.Y = y;\r\n }\r\n\r\n clone() {\r\n return new Vector(this.x, this.y);\r\n }\r\n // get X(): number {\r\n // return this.X;\r\n // }\r\n // set X(x: number) {\r\n // this.X = x;\r\n // }\r\n\r\n // get Y(): number {\r\n // return this.Y;\r\n // }\r\n // set Y(y: number) {\r\n // this.X = y;\r\n // }\r\n\r\n get length(): number {\r\n return Math.sqrt(this.dot(this))\r\n }\r\n\r\n get lengthSquared(): number {\r\n return this.dot(this);\r\n }\r\n\r\n private dot(vector: Vector): number {\r\n return this.x * vector.x + this.y * vector.y;\r\n }\r\n // private dot():number{\r\n // return this.X * this.X + this.Y * this.Y;\r\n // }\r\n // static dot(left:Vector,right:Vector):number{\r\n // return left.X * right.X + left.Y * right.Y;\r\n // }\r\n\r\n angleTo(vector: Vector): number {\r\n return Math.acos(this.dot(vector) / (this.length * vector.length));\r\n }\r\n\r\n normalize() {\r\n let length = Math.sqrt(this.x * this.x + this.y * this.y); //calculating length\r\n this.x = this.x / length; //assigning new value to x (dividing x by length of the vector)\r\n this.y = this.y / length; //assigning new value to y\r\n }\r\n\r\n distance(distance: number): Vector {\r\n this.normalize();\r\n return Vector.multiplyVectorScalar(this, distance);\r\n }\r\n\r\n static addPoint(vector: Vector, point: Point): Point {\r\n let x = vector.x + point.x;\r\n let y = vector.y + point.y;\r\n return new Point(x, y);\r\n }\r\n\r\n static addVector(vector1: Vector, vector2: Vector): Vector {\r\n let x = vector1.x + vector2.x;\r\n let y = vector1.y + vector2.y;\r\n return new Vector(x, y);\r\n }\r\n\r\n static angleBetween(vector1: Vector, vector2: Vector): number {\r\n let sin = vector1.x * vector2.y - vector2.x * vector1.y;\r\n let cos = vector1.x * vector2.x + vector1.y * vector2.y;\r\n return Math.atan2(sin, cos) * (180 / Math.PI);\r\n //return vector1.angleTo(vector2);\r\n }\r\n\r\n static divide(vector: Vector, scalar: Vector | number): Vector {\r\n\r\n return new Vector(1, 1); // TODO: Add Math\r\n }\r\n\r\n static multiply(vector1: Vector, vector2: Vector): Vector {\r\n let x = vector1.x * vector2.x;\r\n let y = vector1.y * vector2.y;\r\n return new Vector(x, y);\r\n }\r\n\r\n static multiplyScalar(scalar: number, vector: Vector): Vector {\r\n return new Vector(1, 1); // TODO: Add Math\r\n }\r\n\r\n static multiplyVectorScalar(vector: Vector, scalar: number): Vector {\r\n let x = vector.x * scalar;\r\n let y = vector.y * scalar;\r\n return new Vector(x, y);\r\n }\r\n\r\n static subtract(vector1: Vector, vector2: Vector): Vector {\r\n let x = vector1.x - vector2.x;\r\n let y = vector1.y - vector2.y;\r\n return new Vector(x, y);\r\n }\r\n\r\n static distance(vector: Vector, distance: number): Vector {\r\n vector.normalize();\r\n return Vector.multiplyVectorScalar(vector, distance);\r\n }\r\n\r\n static directionFromAngle(angle: number): Vector {\r\n var angleInRadians = (angle + 90) / (180 / Math.PI);\r\n return new Vector(Math.sin(angleInRadians), Math.cos(angleInRadians));\r\n }\r\n}\r\n\r\nexport interface IVector {\r\n x: number;\r\n y: number;\r\n}","import { Vector } from \"./Vector\";\r\n\r\nexport interface IPoint {\r\n x: number;\r\n y: number;\r\n}\r\n\r\nexport class Point implements IPoint {\r\n constructor(public x: number, public y: number) {\r\n this.x = x; this.y = y;\r\n }\r\n\r\n clone() {\r\n return new Point(this.x, this.y);\r\n }\r\n\r\n\r\n\r\n add(point: Point): Point {\r\n let x = this.x + point.x;\r\n let y = this.y + point.y;\r\n return new Point(x, y);// this;\r\n }\r\n\r\n addVector(vector: Vector): Point {\r\n let x = this.x + vector.x;\r\n let y = this.y + vector.y;\r\n return new Point(x, y);\r\n }\r\n\r\n subtractVector(vector: Vector): Point {\r\n let x = this.x - vector.x;\r\n let y = this.y - vector.y;\r\n return new Point(x, y);\r\n }\r\n\r\n subtract(point: Point): Vector {\r\n let x = this.x - point.x;\r\n let y = this.y - point.y;\r\n return new Vector(x, y);\r\n }\r\n\r\n divide(point: Point): Point {\r\n let x = this.x / point.x;\r\n let y = this.y / point.y;\r\n return new Point(x, y);\r\n }\r\n\r\n multiply(point: Point): Point {\r\n let x = this.x * point.x;\r\n let y = this.y * point.y;\r\n return new Point(x, y);\r\n }\r\n\r\n\r\n equals(point: Point): boolean {\r\n let x = point.x === this.x;\r\n let y = point.y === this.y;\r\n\r\n if (x && y) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n static newPoint(p: any) {\r\n return new Point(p.x, p.y);\r\n }\r\n static subtractPoint(p1: Point, p2: Point): Vector {\r\n let x = p1.x - p2.x;\r\n let y = p1.y - p2.y;\r\n return new Vector(x, y);\r\n }\r\n\r\n static getAngleDegrees(p1: Point, p2: Point, p3: Point) {\r\n console.log(\"Point\", p1, p2, p3);\r\n let a = p2.x - p1.x;\r\n let b = p2.y - p1.y;\r\n let c = p3.x - p2.x;\r\n let d = p3.y - p2.y;\r\n let atanA = Math.atan2(a, b);\r\n let atanB = Math.atan2(c, d);\r\n let angle = ((atanA - atanB) * (-180 / Math.PI)) + 180;\r\n if (angle < 0) angle += 360;\r\n if (angle > 180) angle -= 360;\r\n return angle;\r\n }\r\n\r\n // static getLineAngle(p1: Point, p2: Point):number {\r\n // let vector = Point.subtractPoint(p1,p2);\r\n // let len = vector.length;\r\n // var p3 = new Point(p1.x - (len / 2), p1.y);\r\n // return Point.getAngleDegrees(p3, p1, p2);\r\n // }\r\n\r\n static getLineAngle360(p1: Point, p2: Point): number {\r\n //var len = (p1 - p2).Length;\r\n let vector = Point.subtractPoint(p1, p2);\r\n let len = vector.length;\r\n let p3 = new Point(p1.x - (len / 2), p1.y);\r\n let angle = Point.getAngleDegrees(p3, p1, p2);\r\n if (angle < 0) angle += 360;\r\n\r\n return angle;\r\n }\r\n\r\n // static getOffsetPoint(start:Point, end:Point,offset:number):Point{\r\n // let vector = Point.subtractPoint(end,start);\r\n // let v = Vector.distance(vector,offset);\r\n // return end.addVector(v);\r\n // }\r\n\r\n // static getAngle(p1:Point, p2:Point)\r\n // {\r\n // var baseDirection = new Vector(1, 0);\r\n // let lineDirection = Point.subtractPoint(p2,p1);\r\n // //var lineDirection = (p2 - p1);\r\n // lineDirection.normalize();\r\n // return 0 - Vector.angleBetween(baseDirection, lineDirection);\r\n // }\r\n\r\n}\r\n\r\n\r\n\r\n\r\n","import { Segment } from \"./Segment\";\r\nimport { Vector } from \"./Vector\";\r\nimport { Point } from \"./Point\";\r\n\r\n\r\nexport class UndoPoint {\r\n\r\n\r\n Segments = new Array();\r\n LabelOffsets: { [key: string]: Vector } = {};\r\n Points = new Array();\r\n ReversePaintIndicator = false;\r\n\r\n constructor(segments: Segment[], labelOffsets: { [key: string]: Vector }, points: Point[], reversePaintIndiacator: boolean) {\r\n for (let i = 0; i < segments.length; i++) {\r\n const segment = segments[i];\r\n this.Segments.push(segment.clone());\r\n }\r\n\r\n for (let key in labelOffsets) {\r\n let value = labelOffsets[key];\r\n // Use `key` and `value`\r\n //this.LableOffsets[key] = new Vector(offset.x, offset.y);\r\n //let n[key] = value;\r\n this.LabelOffsets[key] = value.clone();\r\n }\r\n\r\n for (let i = 0; i < points.length; i++) {\r\n const point = points[i];\r\n this.Points.push(point.clone());\r\n }\r\n\r\n this.ReversePaintIndicator = reversePaintIndiacator;\r\n }\r\n\r\n\r\n\r\n\r\n}","import { Point } from \"./Point\";\r\nimport { Vector } from \"./Vector\";\r\n\r\nexport function isString(x: any): x is string {\r\n return typeof x === \"string\";\r\n}\r\n\r\n\r\nexport function isNullOrWhitespace(input): boolean {\r\n if (typeof input === 'undefined' || input == null) return true;\r\n return input.replace(/\\s/g, '').length < 1;\r\n}\r\n\r\nexport function round(value: number, decimals: number): number {\r\n return Number(Math.round(+(value.toString() + 'e' + decimals.toString())) + 'e-' + decimals.toString());\r\n}\r\n\r\nexport function getParameterCaseInsensitive(object, key) {\r\n //@ts-ignore\r\n return object[Object.keys(object)\r\n .find(k => k.toLowerCase() === key.toLowerCase())\r\n ];\r\n}\r\n\r\nexport function GetAngleDegrees(p1: Point, p2: Point, p3: Point): number {\r\n let a = p2.x - p1.x;\r\n let b = p2.y - p1.y;\r\n let c = p3.x - p2.x;\r\n let d = p3.y - p2.y;\r\n let atanA = Math.atan2(a, b);\r\n let atanB = Math.atan2(c, d);\r\n let angle = (atanA - atanB) * (-180 / Math.PI) + 180;\r\n if (angle < 0) angle += 360;\r\n if (angle > 180) angle -= 360;\r\n if (isNaN(angle)) angle = 0\r\n\r\n return angle;\r\n}\r\nexport function GetLineAngle(p1: Point, p2: Point): number {\r\n let len: number = Point.subtractPoint(p1, p2).length; // (p1.subtract(p2)).length;\r\n let p3 = new Point(p1.x - len / 2, p1.y);\r\n return GetAngleDegrees(p3, p1, p2);\r\n}\r\n\r\nexport function GetLineAngle360(p1: Point, p2: Point): number {\r\n let v: Vector = Point.subtractPoint(p1, p2);\r\n let len = v.length;\r\n let p3 = new Point(p1.x - len / 2, p1.y);\r\n let angle = GetAngleDegrees(p3, p1, p2);\r\n if (angle < 0) angle += 360;\r\n return angle;\r\n}\r\n\r\nexport function GetOffsetPoint(start: Point, end: Point, offset: number): Point {\r\n return end.addVector(end.subtract(start).distance(offset));\r\n}\r\n\r\n// public static(Point, Point) GetArcPoints(Point p1, Point p2, Point p3, double angle, double bendRadius)\r\nexport function GetArcPoints(p1: Point, p2: Point, p3: Point, angle: number, bendRadius: number): [Point, Point] {\r\n //TODO: figure out what is actually going on here and make it readable\r\n let angle1: number = (90 - Math.abs(angle) / 2) / (180 / Math.PI);\r\n if (angle1 - Math.PI / 2 < 0.0001) angle1 -= 0.01;\r\n let arcOffset1: number = Math.min(bendRadius, Math.tan(angle1) * bendRadius);\r\n let arcOffset2: number = Math.tan(angle1) * bendRadius;\r\n let offsetDiff: Vector = GetOffsetPoint(p1, p2, 0 - arcOffset2).subtract(GetOffsetPoint(p1, p2, 0 - arcOffset1));\r\n\r\n let arcP1: Point = GetOffsetPoint(p1, p2, 0 - arcOffset1);\r\n let arcP2: Point;\r\n let lineAngle: number = GetLineAngle(p1, arcP1);\r\n let a1: number = 0 - 90 - lineAngle;\r\n if (angle > 0) a1 = 90 - lineAngle;\r\n if (a1 < 0) a1 += 360;\r\n if (a1 > 360) a1 -= 360;\r\n let angle2 = Math.abs(a1) / (180 / Math.PI);\r\n\r\n if (angle == 0) {\r\n let tp = arcP1.clone();\r\n tp.x = tp.x + Math.cos(angle2) * (bendRadius * 2);\r\n tp.y = tp.y + Math.sin(angle2) * (bendRadius * 2);\r\n arcP2 = tp.clone();\r\n } else {\r\n arcP2 = GetOffsetPoint(p3, p2, 0 - arcOffset2);\r\n arcP2.x = arcP2.x - offsetDiff.x;\r\n arcP2.y = arcP2.y - offsetDiff.y;\r\n }\r\n\r\n let line2Angle: number = GetLineAngle(p3, arcP2);\r\n let tp1 = arcP1.clone();\r\n tp1.x = tp1.x + Math.cos(angle2) * bendRadius;\r\n tp1.y = tp1.y + Math.sin(angle2) * bendRadius;\r\n\r\n let a2 = 90 - line2Angle;\r\n if (angle > 0) a2 = 0 - 90 - line2Angle;\r\n if (a2 < 0) a2 += 360;\r\n if (a2 > 360) a2 -= 360;\r\n let angle3 = Math.abs(a2) / (180 / Math.PI);\r\n\r\n let tp2 = tp1.clone();\r\n tp2.x = tp1.x - Math.cos(angle3) * bendRadius;\r\n tp2.y = tp1.y - Math.sin(angle3) * bendRadius;\r\n arcP2 = tp2.clone();\r\n return [arcP1, arcP2];\r\n}\r\n\r\nexport function FindIntersection(p1: Point, p2: Point, p3: Point, p4: Point) {\r\n //borrowed from here http://csharphelper.com/blog/2014/08/determine-where-two-lines-intersect-in-c/\r\n\r\n let lines_intersect: boolean = false;\r\n let segments_intersect: boolean = false;\r\n let intersection: Point = new Point(0, 0);\r\n let close_p1: Point = new Point(0, 0);\r\n let close_p2: Point = new Point(0, 0);\r\n\r\n // Get the segments' parameters.\r\n let dx12: number = p2.x - p1.x;\r\n let dy12: number = p2.y - p1.y;\r\n let dx34: number = p4.x - p3.x;\r\n let dy34: number = p4.y - p3.y;\r\n\r\n // Solve for t1 and t2\r\n let denominator = dy12 * dx34 - dx12 * dy34;\r\n\r\n let t1 = ((p1.x - p3.x) * dy34 + (p3.y - p1.y) * dx34) / denominator;\r\n if (Number.isFinite(t1)) {\r\n // The lines are parallel (or close enough to it).\r\n lines_intersect = false;\r\n segments_intersect = false;\r\n intersection = new Point(Number.NaN, Number.NaN);\r\n close_p1 = new Point(Number.NaN, Number.NaN);\r\n close_p2 = new Point(Number.NaN, Number.NaN);\r\n return;\r\n }\r\n lines_intersect = true;\r\n let t2: number =\r\n ((p3.x - p1.x) * dy12 + (p1.y - p3.y) * dx12) / -denominator;\r\n\r\n // Find the point of intersection.\r\n intersection = new Point(p1.x + dx12 * t1, p1.y + dy12 * t1);\r\n\r\n // The segments intersect if t1 and t2 are between 0 and 1.\r\n segments_intersect = t1 >= 0 && t1 <= 1 && t2 >= 0 && t2 <= 1;\r\n\r\n // Find the closest points on the segments.\r\n if (t1 < 0) t1 = 0;\r\n else if (t1 > 1) t1 = 1;\r\n\r\n if (t2 < 0) t2 = 0;\r\n else if (t2 > 1) t2 = 1;\r\n\r\n close_p1 = new Point(p1.x + dx12 * t1, p1.y + dy12 * t1);\r\n close_p2 = new Point(p3.x + dx34 * t2, p3.y + dy34 * t2);\r\n\r\n return [\r\n lines_intersect,\r\n segments_intersect,\r\n intersection,\r\n close_p1,\r\n close_p2,\r\n ];\r\n}\r\n\r\n\r\n\r\nexport function GetAngle(p1: Point, p2: Point): number {\r\n let baseDirection: Vector = new Vector(1, 0);\r\n //let lineDirection:Vector = (p2 - p1);\r\n let lineDirection: Vector = Point.subtractPoint(p2, p1); // (p2 - p1);\r\n lineDirection.normalize();\r\n return 0 - Vector.angleBetween(baseDirection, lineDirection);\r\n}\r\n\r\nexport function DirectionFromAngle(angle: number): Vector {\r\n let angleInRadians = (angle + 90) / (180 / Math.PI);\r\n return new Vector(Math.sin(angleInRadians), Math.cos(angleInRadians));\r\n}\r\n\r\nexport function iOS() {\r\n return [\r\n 'iPad Simulator',\r\n 'iPhone Simulator',\r\n 'iPod Simulator',\r\n 'iPad',\r\n 'iPhone',\r\n 'iPod'\r\n ].includes(navigator.platform)\r\n // iPad on iOS 13 detection\r\n || (navigator.userAgent.includes(\"Mac\") && \"ontouchend\" in document)\r\n}\r\n\r\n\r\nexport function isMobile() {\r\n let IOS = iOS();\r\n if (!IOS) {\r\n return (/Mobi|Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent));\r\n }\r\n return iOS;\r\n}","// The programming goals of Split.js are to deliver readable, understandable and\n// maintainable code, while at the same time manually optimizing for tiny minified file size,\n// browser compatibility without additional requirements\n// and very few assumptions about the user's page layout.\nvar global = typeof window !== 'undefined' ? window : null;\nvar ssr = global === null;\nvar document = !ssr ? global.document : undefined;\n\n// Save a couple long function names that are used frequently.\n// This optimization saves around 400 bytes.\nvar addEventListener = 'addEventListener';\nvar removeEventListener = 'removeEventListener';\nvar getBoundingClientRect = 'getBoundingClientRect';\nvar gutterStartDragging = '_a';\nvar aGutterSize = '_b';\nvar bGutterSize = '_c';\nvar HORIZONTAL = 'horizontal';\nvar NOOP = function () { return false; };\n\n// Helper function determines which prefixes of CSS calc we need.\n// We only need to do this once on startup, when this anonymous function is called.\n//\n// Tests -webkit, -moz and -o prefixes. Modified from StackOverflow:\n// http://stackoverflow.com/questions/16625140/js-feature-detection-to-detect-the-usage-of-webkit-calc-over-calc/16625167#16625167\nvar calc = ssr\n ? 'calc'\n : ((['', '-webkit-', '-moz-', '-o-']\n .filter(function (prefix) {\n var el = document.createElement('div');\n el.style.cssText = \"width:\" + prefix + \"calc(9px)\";\n\n return !!el.style.length\n })\n .shift()) + \"calc\");\n\n// Helper function checks if its argument is a string-like type\nvar isString = function (v) { return typeof v === 'string' || v instanceof String; };\n\n// Helper function allows elements and string selectors to be used\n// interchangeably. In either case an element is returned. This allows us to\n// do `Split([elem1, elem2])` as well as `Split(['#id1', '#id2'])`.\nvar elementOrSelector = function (el) {\n if (isString(el)) {\n var ele = document.querySelector(el);\n if (!ele) {\n throw new Error((\"Selector \" + el + \" did not match a DOM element\"))\n }\n return ele\n }\n\n return el\n};\n\n// Helper function gets a property from the properties object, with a default fallback\nvar getOption = function (options, propName, def) {\n var value = options[propName];\n if (value !== undefined) {\n return value\n }\n return def\n};\n\nvar getGutterSize = function (gutterSize, isFirst, isLast, gutterAlign) {\n if (isFirst) {\n if (gutterAlign === 'end') {\n return 0\n }\n if (gutterAlign === 'center') {\n return gutterSize / 2\n }\n } else if (isLast) {\n if (gutterAlign === 'start') {\n return 0\n }\n if (gutterAlign === 'center') {\n return gutterSize / 2\n }\n }\n\n return gutterSize\n};\n\n// Default options\nvar defaultGutterFn = function (i, gutterDirection) {\n var gut = document.createElement('div');\n gut.className = \"gutter gutter-\" + gutterDirection;\n return gut\n};\n\nvar defaultElementStyleFn = function (dim, size, gutSize) {\n var style = {};\n\n if (!isString(size)) {\n style[dim] = calc + \"(\" + size + \"% - \" + gutSize + \"px)\";\n } else {\n style[dim] = size;\n }\n\n return style\n};\n\nvar defaultGutterStyleFn = function (dim, gutSize) {\n var obj;\n\n return (( obj = {}, obj[dim] = (gutSize + \"px\"), obj ));\n};\n\n// The main function to initialize a split. Split.js thinks about each pair\n// of elements as an independant pair. Dragging the gutter between two elements\n// only changes the dimensions of elements in that pair. This is key to understanding\n// how the following functions operate, since each function is bound to a pair.\n//\n// A pair object is shaped like this:\n//\n// {\n// a: DOM element,\n// b: DOM element,\n// aMin: Number,\n// bMin: Number,\n// dragging: Boolean,\n// parent: DOM element,\n// direction: 'horizontal' | 'vertical'\n// }\n//\n// The basic sequence:\n//\n// 1. Set defaults to something sane. `options` doesn't have to be passed at all.\n// 2. Initialize a bunch of strings based on the direction we're splitting.\n// A lot of the behavior in the rest of the library is paramatized down to\n// rely on CSS strings and classes.\n// 3. Define the dragging helper functions, and a few helpers to go with them.\n// 4. Loop through the elements while pairing them off. Every pair gets an\n// `pair` object and a gutter.\n// 5. Actually size the pair elements, insert gutters and attach event listeners.\nvar Split = function (idsOption, options) {\n if ( options === void 0 ) options = {};\n\n if (ssr) { return {} }\n\n var ids = idsOption;\n var dimension;\n var clientAxis;\n var position;\n var positionEnd;\n var clientSize;\n var elements;\n\n // Allow HTMLCollection to be used as an argument when supported\n if (Array.from) {\n ids = Array.from(ids);\n }\n\n // All DOM elements in the split should have a common parent. We can grab\n // the first elements parent and hope users read the docs because the\n // behavior will be whacky otherwise.\n var firstElement = elementOrSelector(ids[0]);\n var parent = firstElement.parentNode;\n var parentStyle = getComputedStyle ? getComputedStyle(parent) : null;\n var parentFlexDirection = parentStyle ? parentStyle.flexDirection : null;\n\n // Set default options.sizes to equal percentages of the parent element.\n var sizes = getOption(options, 'sizes') || ids.map(function () { return 100 / ids.length; });\n\n // Standardize minSize to an array if it isn't already. This allows minSize\n // to be passed as a number.\n var minSize = getOption(options, 'minSize', 100);\n var minSizes = Array.isArray(minSize) ? minSize : ids.map(function () { return minSize; });\n\n // Get other options\n var expandToMin = getOption(options, 'expandToMin', false);\n var gutterSize = getOption(options, 'gutterSize', 10);\n var gutterAlign = getOption(options, 'gutterAlign', 'center');\n var snapOffset = getOption(options, 'snapOffset', 30);\n var dragInterval = getOption(options, 'dragInterval', 1);\n var direction = getOption(options, 'direction', HORIZONTAL);\n var cursor = getOption(\n options,\n 'cursor',\n direction === HORIZONTAL ? 'col-resize' : 'row-resize'\n );\n var gutter = getOption(options, 'gutter', defaultGutterFn);\n var elementStyle = getOption(\n options,\n 'elementStyle',\n defaultElementStyleFn\n );\n var gutterStyle = getOption(options, 'gutterStyle', defaultGutterStyleFn);\n\n // 2. Initialize a bunch of strings based on the direction we're splitting.\n // A lot of the behavior in the rest of the library is paramatized down to\n // rely on CSS strings and classes.\n if (direction === HORIZONTAL) {\n dimension = 'width';\n clientAxis = 'clientX';\n position = 'left';\n positionEnd = 'right';\n clientSize = 'clientWidth';\n } else if (direction === 'vertical') {\n dimension = 'height';\n clientAxis = 'clientY';\n position = 'top';\n positionEnd = 'bottom';\n clientSize = 'clientHeight';\n }\n\n // 3. Define the dragging helper functions, and a few helpers to go with them.\n // Each helper is bound to a pair object that contains its metadata. This\n // also makes it easy to store references to listeners that that will be\n // added and removed.\n //\n // Even though there are no other functions contained in them, aliasing\n // this to self saves 50 bytes or so since it's used so frequently.\n //\n // The pair object saves metadata like dragging state, position and\n // event listener references.\n\n function setElementSize(el, size, gutSize, i) {\n // Split.js allows setting sizes via numbers (ideally), or if you must,\n // by string, like '300px'. This is less than ideal, because it breaks\n // the fluid layout that `calc(% - px)` provides. You're on your own if you do that,\n // make sure you calculate the gutter size by hand.\n var style = elementStyle(dimension, size, gutSize, i);\n\n Object.keys(style).forEach(function (prop) {\n // eslint-disable-next-line no-param-reassign\n el.style[prop] = style[prop];\n });\n }\n\n function setGutterSize(gutterElement, gutSize, i) {\n var style = gutterStyle(dimension, gutSize, i);\n\n Object.keys(style).forEach(function (prop) {\n // eslint-disable-next-line no-param-reassign\n gutterElement.style[prop] = style[prop];\n });\n }\n\n function getSizes() {\n return elements.map(function (element) { return element.size; })\n }\n\n // Supports touch events, but not multitouch, so only the first\n // finger `touches[0]` is counted.\n function getMousePosition(e) {\n if ('touches' in e) { return e.touches[0][clientAxis] }\n return e[clientAxis]\n }\n\n // Actually adjust the size of elements `a` and `b` to `offset` while dragging.\n // calc is used to allow calc(percentage + gutterpx) on the whole split instance,\n // which allows the viewport to be resized without additional logic.\n // Element a's size is the same as offset. b's size is total size - a size.\n // Both sizes are calculated from the initial parent percentage,\n // then the gutter size is subtracted.\n function adjust(offset) {\n var a = elements[this.a];\n var b = elements[this.b];\n var percentage = a.size + b.size;\n\n a.size = (offset / this.size) * percentage;\n b.size = percentage - (offset / this.size) * percentage;\n\n setElementSize(a.element, a.size, this[aGutterSize], a.i);\n setElementSize(b.element, b.size, this[bGutterSize], b.i);\n }\n\n // drag, where all the magic happens. The logic is really quite simple:\n //\n // 1. Ignore if the pair is not dragging.\n // 2. Get the offset of the event.\n // 3. Snap offset to min if within snappable range (within min + snapOffset).\n // 4. Actually adjust each element in the pair to offset.\n //\n // ---------------------------------------------------------------------\n // | | <- a.minSize || b.minSize -> | |\n // | | | <- this.snapOffset || this.snapOffset -> | | |\n // | | | || | | |\n // | | | || | | |\n // ---------------------------------------------------------------------\n // | <- this.start this.size -> |\n function drag(e) {\n var offset;\n var a = elements[this.a];\n var b = elements[this.b];\n\n if (!this.dragging) { return }\n\n // Get the offset of the event from the first side of the\n // pair `this.start`. Then offset by the initial position of the\n // mouse compared to the gutter size.\n offset =\n getMousePosition(e) -\n this.start +\n (this[aGutterSize] - this.dragOffset);\n\n if (dragInterval > 1) {\n offset = Math.round(offset / dragInterval) * dragInterval;\n }\n\n // If within snapOffset of min or max, set offset to min or max.\n // snapOffset buffers a.minSize and b.minSize, so logic is opposite for both.\n // Include the appropriate gutter sizes to prevent overflows.\n if (offset <= a.minSize + snapOffset + this[aGutterSize]) {\n offset = a.minSize + this[aGutterSize];\n } else if (\n offset >=\n this.size - (b.minSize + snapOffset + this[bGutterSize])\n ) {\n offset = this.size - (b.minSize + this[bGutterSize]);\n }\n\n // Actually adjust the size.\n adjust.call(this, offset);\n\n // Call the drag callback continously. Don't do anything too intensive\n // in this callback.\n getOption(options, 'onDrag', NOOP)(getSizes());\n }\n\n // Cache some important sizes when drag starts, so we don't have to do that\n // continously:\n //\n // `size`: The total size of the pair. First + second + first gutter + second gutter.\n // `start`: The leading side of the first element.\n //\n // ------------------------------------------------\n // | aGutterSize -> ||| |\n // | ||| |\n // | ||| |\n // | ||| <- bGutterSize |\n // ------------------------------------------------\n // | <- start size -> |\n function calculateSizes() {\n // Figure out the parent size minus padding.\n var a = elements[this.a].element;\n var b = elements[this.b].element;\n\n var aBounds = a[getBoundingClientRect]();\n var bBounds = b[getBoundingClientRect]();\n\n this.size =\n aBounds[dimension] +\n bBounds[dimension] +\n this[aGutterSize] +\n this[bGutterSize];\n this.start = aBounds[position];\n this.end = aBounds[positionEnd];\n }\n\n function innerSize(element) {\n // Return nothing if getComputedStyle is not supported (< IE9)\n // Or if parent element has no layout yet\n if (!getComputedStyle) { return null }\n\n var computedStyle = getComputedStyle(element);\n\n if (!computedStyle) { return null }\n\n var size = element[clientSize];\n\n if (size === 0) { return null }\n\n if (direction === HORIZONTAL) {\n size -=\n parseFloat(computedStyle.paddingLeft) +\n parseFloat(computedStyle.paddingRight);\n } else {\n size -=\n parseFloat(computedStyle.paddingTop) +\n parseFloat(computedStyle.paddingBottom);\n }\n\n return size\n }\n\n // When specifying percentage sizes that are less than the computed\n // size of the element minus the gutter, the lesser percentages must be increased\n // (and decreased from the other elements) to make space for the pixels\n // subtracted by the gutters.\n function trimToMin(sizesToTrim) {\n // Try to get inner size of parent element.\n // If it's no supported, return original sizes.\n var parentSize = innerSize(parent);\n if (parentSize === null) {\n return sizesToTrim\n }\n\n if (minSizes.reduce(function (a, b) { return a + b; }, 0) > parentSize) {\n return sizesToTrim\n }\n\n // Keep track of the excess pixels, the amount of pixels over the desired percentage\n // Also keep track of the elements with pixels to spare, to decrease after if needed\n var excessPixels = 0;\n var toSpare = [];\n\n var pixelSizes = sizesToTrim.map(function (size, i) {\n // Convert requested percentages to pixel sizes\n var pixelSize = (parentSize * size) / 100;\n var elementGutterSize = getGutterSize(\n gutterSize,\n i === 0,\n i === sizesToTrim.length - 1,\n gutterAlign\n );\n var elementMinSize = minSizes[i] + elementGutterSize;\n\n // If element is too smal, increase excess pixels by the difference\n // and mark that it has no pixels to spare\n if (pixelSize < elementMinSize) {\n excessPixels += elementMinSize - pixelSize;\n toSpare.push(0);\n return elementMinSize\n }\n\n // Otherwise, mark the pixels it has to spare and return it's original size\n toSpare.push(pixelSize - elementMinSize);\n return pixelSize\n });\n\n // If nothing was adjusted, return the original sizes\n if (excessPixels === 0) {\n return sizesToTrim\n }\n\n return pixelSizes.map(function (pixelSize, i) {\n var newPixelSize = pixelSize;\n\n // While there's still pixels to take, and there's enough pixels to spare,\n // take as many as possible up to the total excess pixels\n if (excessPixels > 0 && toSpare[i] - excessPixels > 0) {\n var takenPixels = Math.min(\n excessPixels,\n toSpare[i] - excessPixels\n );\n\n // Subtract the amount taken for the next iteration\n excessPixels -= takenPixels;\n newPixelSize = pixelSize - takenPixels;\n }\n\n // Return the pixel size adjusted as a percentage\n return (newPixelSize / parentSize) * 100\n })\n }\n\n // stopDragging is very similar to startDragging in reverse.\n function stopDragging() {\n var self = this;\n var a = elements[self.a].element;\n var b = elements[self.b].element;\n\n if (self.dragging) {\n getOption(options, 'onDragEnd', NOOP)(getSizes());\n }\n\n self.dragging = false;\n\n // Remove the stored event listeners. This is why we store them.\n global[removeEventListener]('mouseup', self.stop);\n global[removeEventListener]('touchend', self.stop);\n global[removeEventListener]('touchcancel', self.stop);\n global[removeEventListener]('mousemove', self.move);\n global[removeEventListener]('touchmove', self.move);\n\n // Clear bound function references\n self.stop = null;\n self.move = null;\n\n a[removeEventListener]('selectstart', NOOP);\n a[removeEventListener]('dragstart', NOOP);\n b[removeEventListener]('selectstart', NOOP);\n b[removeEventListener]('dragstart', NOOP);\n\n a.style.userSelect = '';\n a.style.webkitUserSelect = '';\n a.style.MozUserSelect = '';\n a.style.pointerEvents = '';\n\n b.style.userSelect = '';\n b.style.webkitUserSelect = '';\n b.style.MozUserSelect = '';\n b.style.pointerEvents = '';\n\n self.gutter.style.cursor = '';\n self.parent.style.cursor = '';\n document.body.style.cursor = '';\n }\n\n // startDragging calls `calculateSizes` to store the inital size in the pair object.\n // It also adds event listeners for mouse/touch events,\n // and prevents selection while dragging so avoid the selecting text.\n function startDragging(e) {\n // Right-clicking can't start dragging.\n if ('button' in e && e.button !== 0) {\n return\n }\n\n // Alias frequently used variables to save space. 200 bytes.\n var self = this;\n var a = elements[self.a].element;\n var b = elements[self.b].element;\n\n // Call the onDragStart callback.\n if (!self.dragging) {\n getOption(options, 'onDragStart', NOOP)(getSizes());\n }\n\n // Don't actually drag the element. We emulate that in the drag function.\n e.preventDefault();\n\n // Set the dragging property of the pair object.\n self.dragging = true;\n\n // Create two event listeners bound to the same pair object and store\n // them in the pair object.\n self.move = drag.bind(self);\n self.stop = stopDragging.bind(self);\n\n // All the binding. `window` gets the stop events in case we drag out of the elements.\n global[addEventListener]('mouseup', self.stop);\n global[addEventListener]('touchend', self.stop);\n global[addEventListener]('touchcancel', self.stop);\n global[addEventListener]('mousemove', self.move);\n global[addEventListener]('touchmove', self.move);\n\n // Disable selection. Disable!\n a[addEventListener]('selectstart', NOOP);\n a[addEventListener]('dragstart', NOOP);\n b[addEventListener]('selectstart', NOOP);\n b[addEventListener]('dragstart', NOOP);\n\n a.style.userSelect = 'none';\n a.style.webkitUserSelect = 'none';\n a.style.MozUserSelect = 'none';\n a.style.pointerEvents = 'none';\n\n b.style.userSelect = 'none';\n b.style.webkitUserSelect = 'none';\n b.style.MozUserSelect = 'none';\n b.style.pointerEvents = 'none';\n\n // Set the cursor at multiple levels\n self.gutter.style.cursor = cursor;\n self.parent.style.cursor = cursor;\n document.body.style.cursor = cursor;\n\n // Cache the initial sizes of the pair.\n calculateSizes.call(self);\n\n // Determine the position of the mouse compared to the gutter\n self.dragOffset = getMousePosition(e) - self.end;\n }\n\n // adjust sizes to ensure percentage is within min size and gutter.\n sizes = trimToMin(sizes);\n\n // 5. Create pair and element objects. Each pair has an index reference to\n // elements `a` and `b` of the pair (first and second elements).\n // Loop through the elements while pairing them off. Every pair gets a\n // `pair` object and a gutter.\n //\n // Basic logic:\n //\n // - Starting with the second element `i > 0`, create `pair` objects with\n // `a = i - 1` and `b = i`\n // - Set gutter sizes based on the _pair_ being first/last. The first and last\n // pair have gutterSize / 2, since they only have one half gutter, and not two.\n // - Create gutter elements and add event listeners.\n // - Set the size of the elements, minus the gutter sizes.\n //\n // -----------------------------------------------------------------------\n // | i=0 | i=1 | i=2 | i=3 |\n // | | | | |\n // | pair 0 pair 1 pair 2 |\n // | | | | |\n // -----------------------------------------------------------------------\n var pairs = [];\n elements = ids.map(function (id, i) {\n // Create the element object.\n var element = {\n element: elementOrSelector(id),\n size: sizes[i],\n minSize: minSizes[i],\n i: i,\n };\n\n var pair;\n\n if (i > 0) {\n // Create the pair object with its metadata.\n pair = {\n a: i - 1,\n b: i,\n dragging: false,\n direction: direction,\n parent: parent,\n };\n\n pair[aGutterSize] = getGutterSize(\n gutterSize,\n i - 1 === 0,\n false,\n gutterAlign\n );\n pair[bGutterSize] = getGutterSize(\n gutterSize,\n false,\n i === ids.length - 1,\n gutterAlign\n );\n\n // if the parent has a reverse flex-direction, switch the pair elements.\n if (\n parentFlexDirection === 'row-reverse' ||\n parentFlexDirection === 'column-reverse'\n ) {\n var temp = pair.a;\n pair.a = pair.b;\n pair.b = temp;\n }\n }\n\n // Determine the size of the current element. IE8 is supported by\n // staticly assigning sizes without draggable gutters. Assigns a string\n // to `size`.\n //\n // Create gutter elements for each pair.\n if (i > 0) {\n var gutterElement = gutter(i, direction, element.element);\n setGutterSize(gutterElement, gutterSize, i);\n\n // Save bound event listener for removal later\n pair[gutterStartDragging] = startDragging.bind(pair);\n\n // Attach bound event listener\n gutterElement[addEventListener](\n 'mousedown',\n pair[gutterStartDragging]\n );\n gutterElement[addEventListener](\n 'touchstart',\n pair[gutterStartDragging]\n );\n\n parent.insertBefore(gutterElement, element.element);\n\n pair.gutter = gutterElement;\n }\n\n setElementSize(\n element.element,\n element.size,\n getGutterSize(\n gutterSize,\n i === 0,\n i === ids.length - 1,\n gutterAlign\n ),\n i\n );\n\n // After the first iteration, and we have a pair object, append it to the\n // list of pairs.\n if (i > 0) {\n pairs.push(pair);\n }\n\n return element\n });\n\n function adjustToMin(element) {\n var isLast = element.i === pairs.length;\n var pair = isLast ? pairs[element.i - 1] : pairs[element.i];\n\n calculateSizes.call(pair);\n\n var size = isLast\n ? pair.size - element.minSize - pair[bGutterSize]\n : element.minSize + pair[aGutterSize];\n\n adjust.call(pair, size);\n }\n\n elements.forEach(function (element) {\n var computedSize = element.element[getBoundingClientRect]()[dimension];\n\n if (computedSize < element.minSize) {\n if (expandToMin) {\n adjustToMin(element);\n } else {\n // eslint-disable-next-line no-param-reassign\n element.minSize = computedSize;\n }\n }\n });\n\n function setSizes(newSizes) {\n var trimmed = trimToMin(newSizes);\n trimmed.forEach(function (newSize, i) {\n if (i > 0) {\n var pair = pairs[i - 1];\n\n var a = elements[pair.a];\n var b = elements[pair.b];\n\n a.size = trimmed[i - 1];\n b.size = newSize;\n\n setElementSize(a.element, a.size, pair[aGutterSize], a.i);\n setElementSize(b.element, b.size, pair[bGutterSize], b.i);\n }\n });\n }\n\n function destroy(preserveStyles, preserveGutter) {\n pairs.forEach(function (pair) {\n if (preserveGutter !== true) {\n pair.parent.removeChild(pair.gutter);\n } else {\n pair.gutter[removeEventListener](\n 'mousedown',\n pair[gutterStartDragging]\n );\n pair.gutter[removeEventListener](\n 'touchstart',\n pair[gutterStartDragging]\n );\n }\n\n if (preserveStyles !== true) {\n var style = elementStyle(\n dimension,\n pair.a.size,\n pair[aGutterSize]\n );\n\n Object.keys(style).forEach(function (prop) {\n elements[pair.a].element.style[prop] = '';\n elements[pair.b].element.style[prop] = '';\n });\n }\n });\n }\n\n return {\n setSizes: setSizes,\n getSizes: getSizes,\n collapse: function collapse(i) {\n adjustToMin(elements[i]);\n },\n destroy: destroy,\n parent: parent,\n pairs: pairs,\n }\n};\n\nexport default Split;\n","import { isMobile, round } from \"./utils\";\r\nimport Split from 'split.js'\r\n\r\nexport class SettingsManager {\r\n\r\n #settingsKey = \"trimDesignerSettings\";\r\n ScaleFactor = 96;\r\n\r\n #profileOnly = false;\r\n #Snap: boolean = true;\r\n #SnapPrecision: number = 5;\r\n #showPoints = true;\r\n #CircleSize = 10;\r\n #showPaintIndicator = true;\r\n #showAngleLabels = true;\r\n #angleLabelLimit = 180;\r\n #showLengthLabels = true;\r\n #lengthLabelLimit = 0;\r\n #BendRadius = 4.5; // 3/64\" Bend radius\r\n #grayBackground = '#808080';\r\n #leftWidth = \"\";\r\n #rightWidth = \"\";\r\n #separatorLeft = \"\";\r\n #leftElement: HTMLElement;\r\n #rightElement: HTMLElement\r\n #separatorElement: HTMLElement\r\n\r\n #svgContainer = document.querySelector('.svg-container') as HTMLElement;\r\n\r\n #showProfileOnlyInput: HTMLInputElement;\r\n #snapInput: HTMLInputElement;\r\n #snapPrecisionInput: HTMLInputElement;\r\n #showPointInput: HTMLInputElement;\r\n #pointSizeInput: HTMLInputElement;\r\n #showPaintIndicatorInput: HTMLInputElement;\r\n #showAngleLabelsInput: HTMLInputElement;\r\n #angleLabelLimitInput: HTMLInputElement;\r\n #showLengthLabelsInput: HTMLInputElement;\r\n #lengthLabelLimitInput: HTMLInputElement;\r\n #bendRadiusInput: HTMLInputElement;\r\n #grayBackgroundInput: HTMLInputElement;\r\n #splitter: any;\r\n\r\n\r\n updateDrawingObjects: CallableFunction;\r\n #DraggingSeparator: CallableFunction;\r\n constructor(settingsUpdatedCallback: CallableFunction, afterDraggingSeparator: CallableFunction) {\r\n let me = this;\r\n this.updateDrawingObjects = settingsUpdatedCallback;\r\n this.#DraggingSeparator = afterDraggingSeparator;\r\n\r\n // this.#separatorElement = document.getElementById(\"separator\") as HTMLElement;\r\n // this.#leftElement = document.getElementById(\"dataGrid\") as HTMLElement;\r\n // this.#rightElement = document.getElementById(\"drawing\") as HTMLElement;\r\n\r\n let sizes: any = localStorage.getItem('nctd-split-sizes' + me.getOrientation());\r\n if (sizes) {\r\n sizes = JSON.parse(sizes)\r\n } else {\r\n sizes = [20, 80] // default sizes\r\n }\r\n\r\n me.#splitter = Split(['#dataGrid', '#drawing'], {\r\n sizes: sizes,\r\n minSize: 180,\r\n onDrag: function () {\r\n me.#DraggingSeparator();\r\n },\r\n onDragEnd: function (sizes) {\r\n me.#DraggingSeparator();\r\n localStorage.setItem('nctd-split-sizes' + me.getOrientation(), JSON.stringify(sizes));\r\n }\r\n });\r\n\r\n window.onresize = function () {\r\n if (me.#splitter) {\r\n let sizes: any = localStorage.getItem('nctd-split-sizes' + me.getOrientation());\r\n if (sizes) {\r\n sizes = JSON.parse(sizes)\r\n } else {\r\n sizes = [20, 80] // default sizes\r\n }\r\n me.#splitter.setSizes(sizes);\r\n }\r\n me.#DraggingSeparator();\r\n }\r\n\r\n this.getSettings();\r\n this.init();\r\n }\r\n\r\n\r\n public get ProfileOnly(): boolean {\r\n return this.#profileOnly;\r\n }\r\n public set ProfileOnly(v: boolean) {\r\n this.#profileOnly = v;\r\n this.writeValuesToInputs();\r\n this.saveSettings();\r\n }\r\n\r\n public get Snap(): boolean {\r\n return this.#Snap;\r\n }\r\n public set Snap(v: boolean) {\r\n this.#Snap = v;\r\n this.writeValuesToInputs();\r\n this.saveSettings();\r\n }\r\n\r\n public get SnapPrecision(): number {\r\n return this.#SnapPrecision;\r\n }\r\n public set SnapPrecision(v: number) {\r\n this.#SnapPrecision = v;\r\n this.writeValuesToInputs();\r\n this.saveSettings();\r\n }\r\n\r\n public get ShowPoints(): boolean {\r\n return this.#showPoints;\r\n }\r\n public set ShowPoints(v: boolean) {\r\n this.#showPoints = v;\r\n this.writeValuesToInputs();\r\n this.saveSettings();\r\n }\r\n\r\n public get PointSize(): number {\r\n return this.#CircleSize;\r\n }\r\n public set PointSize(v: number) {\r\n this.#CircleSize = v;\r\n this.writeValuesToInputs();\r\n this.saveSettings();\r\n }\r\n\r\n public get ShowPaintIndicator(): boolean {\r\n return this.#showPaintIndicator;\r\n }\r\n public set ShowPaintIndicator(v: boolean) {\r\n this.#showPaintIndicator = v;\r\n this.writeValuesToInputs();\r\n this.saveSettings();\r\n }\r\n\r\n public get ShowAngleLabels(): boolean {\r\n return this.#showAngleLabels;\r\n }\r\n public set ShowAngleLabels(v: boolean) {\r\n this.#showAngleLabels = v;\r\n this.writeValuesToInputs();\r\n this.saveSettings();\r\n }\r\n\r\n public get AngleLabelLimit(): number {\r\n return this.#angleLabelLimit;\r\n }\r\n public set AngleLabelLimit(v: number) {\r\n this.#angleLabelLimit = v;\r\n }\r\n\r\n public get ShowLengthLabels(): boolean {\r\n return this.#showLengthLabels;\r\n }\r\n public set ShowLengthLabels(v: boolean) {\r\n this.#showLengthLabels = v;\r\n this.writeValuesToInputs();\r\n this.saveSettings();\r\n }\r\n\r\n public get LengthLabelLimit(): number {\r\n return this.#lengthLabelLimit;\r\n }\r\n public set LengthLabelLimit(v: number) {\r\n this.#lengthLabelLimit = v;\r\n this.writeValuesToInputs();\r\n this.saveSettings();\r\n }\r\n\r\n public get BendRadius(): number {\r\n return this.#BendRadius;\r\n }\r\n public set BendRadius(v: number) {\r\n this.#BendRadius = v;\r\n this.writeValuesToInputs();\r\n this.saveSettings();\r\n }\r\n\r\n public get BackgroundColor(): string {\r\n return this.#grayBackground;\r\n }\r\n public set BackgroundColor(v: string) {\r\n this.#grayBackground = v;\r\n this.writeValuesToInputs();\r\n this.saveSettings();\r\n }\r\n\r\n init() {\r\n let me = this;\r\n me.#showProfileOnlyInput = document.getElementById(\"nctdProfileOnly\") as HTMLInputElement;\r\n me.#showProfileOnlyInput?.addEventListener(\"change\", function () {\r\n me.#profileOnly = this.checked;\r\n me.updateDrawingObjects();\r\n me.saveSettings();\r\n });\r\n\r\n me.#snapInput = document.getElementById(\"nctdSnap\") as HTMLInputElement;\r\n me.#snapInput.addEventListener(\"change\", function () {\r\n me.#Snap = this.checked;\r\n me.updateDrawingObjects();\r\n me.saveSettings();\r\n });\r\n\r\n me.#snapPrecisionInput = document.getElementById(\"nctdSnapPrecision\") as HTMLInputElement;\r\n me.#snapPrecisionInput?.addEventListener(\"change\", function () {\r\n me.#SnapPrecision = +this.value;\r\n me.updateDrawingObjects();\r\n me.saveSettings();\r\n });\r\n\r\n me.#showPointInput = document.getElementById(\"nctdShowPoint\") as HTMLInputElement;\r\n me.#showPointInput.addEventListener(\"change\", function () {\r\n me.#showPoints = this.checked;\r\n me.saveSettings();\r\n me.updateDrawingObjects();\r\n });\r\n\r\n me.#pointSizeInput = document.getElementById(\"nctdPointSize\") as HTMLInputElement;\r\n me.#pointSizeInput.addEventListener(\"change\", function () {\r\n me.#CircleSize = +this.value;\r\n me.updateDrawingObjects();\r\n me.saveSettings();\r\n });\r\n\r\n me.#showPaintIndicatorInput = document.getElementById(\"nctdShowPaintIndicator\") as HTMLInputElement;\r\n me.#showPaintIndicatorInput.addEventListener(\"change\", function () {\r\n me.#showPaintIndicator = this.checked;\r\n me.updateDrawingObjects();\r\n me.saveSettings();\r\n });\r\n\r\n me.#showAngleLabelsInput = document.getElementById(\"nctdShowAngleLabelsUnder\") as HTMLInputElement;\r\n me.#showAngleLabelsInput.addEventListener(\"change\", function () {\r\n me.#showAngleLabels = this.checked;\r\n me.updateDrawingObjects();\r\n me.saveSettings();\r\n });\r\n\r\n me.#angleLabelLimitInput = document.getElementById(\"nctdAngleLabelLimit\") as HTMLInputElement;\r\n me.#angleLabelLimitInput.addEventListener(\"change\", function () {\r\n me.#angleLabelLimit = +this.value;\r\n me.updateDrawingObjects();\r\n me.saveSettings();\r\n });\r\n\r\n me.#showLengthLabelsInput = document.getElementById(\"nctdShowLengthLabels\") as HTMLInputElement;\r\n me.#showLengthLabelsInput.addEventListener(\"change\", function () {\r\n me.#showLengthLabels = this.checked;\r\n me.updateDrawingObjects();\r\n me.saveSettings();\r\n });\r\n\r\n me.#lengthLabelLimitInput = document.getElementById(\"nctdLengthLabelLimit\") as HTMLInputElement;\r\n me.#lengthLabelLimitInput.addEventListener(\"change\", function () {\r\n me.#lengthLabelLimit = +this.value;\r\n me.updateDrawingObjects();\r\n me.saveSettings();\r\n });\r\n\r\n me.#bendRadiusInput = document.getElementById(\"nctdBendRadius\") as HTMLInputElement;\r\n me.#bendRadiusInput.addEventListener(\"change\", function () {\r\n me.#BendRadius = +this.value * me.ScaleFactor;\r\n me.updateDrawingObjects();\r\n me.saveSettings();\r\n });\r\n\r\n me.#grayBackgroundInput = document.getElementById(\"nctdGrayBackground\") as HTMLInputElement;\r\n me.#grayBackgroundInput.addEventListener(\"change\", function () {\r\n me.#grayBackground = this.value;\r\n me.#svgContainer.style.backgroundColor = me.#grayBackground;\r\n me.saveSettings();\r\n });\r\n\r\n let resetSettingsButton = document.getElementById('nctdResetSettings') as HTMLButtonElement;\r\n resetSettingsButton.addEventListener(\"click\", function () {\r\n localStorage.removeItem(me.#settingsKey);\r\n me.resetSettings();\r\n });\r\n\r\n let showHideSettingsButton = document.getElementById(\"showHideSettings\");\r\n showHideSettingsButton?.addEventListener(\"click\", function () {\r\n let x = document.getElementById(\"trimDesignerSettings\");\r\n let show = x!.style.display === 'none';\r\n x!.style.display = x!.style.display === 'none' ? 'block' : 'none';\r\n this.innerText = x!.style.display === 'none' ? 'Show Settings' : 'Hide Settings';\r\n });\r\n\r\n this.writeValuesToInputs();\r\n }\r\n\r\n\r\n\r\n resetSettings() {\r\n this.#Snap = true;\r\n this.#SnapPrecision = 5;\r\n this.#profileOnly = false;\r\n this.#showPoints = true;\r\n\r\n if (isMobile()) {\r\n this.#CircleSize = 30;\r\n } else {\r\n this.#CircleSize = 10;\r\n }\r\n\r\n this.#showPaintIndicator = true;\r\n this.#showAngleLabels = true;\r\n this.#angleLabelLimit = 180;\r\n this.#showLengthLabels = true;\r\n this.#lengthLabelLimit = 0;\r\n this.#grayBackground = '#808080';\r\n this.#BendRadius = 4.5;\r\n this.saveSettings();\r\n this.writeValuesToInputs();\r\n this.updateUI();\r\n\r\n // this.#separatorElement.style.left = '';\r\n // this.#leftElement!.style.width = '';\r\n // this.#rightElement!.style.width = '';\r\n\r\n }\r\n\r\n writeValuesToInputs() {\r\n let me = this;\r\n me.#showProfileOnlyInput.checked = this.#profileOnly;\r\n me.#snapInput.checked = this.#Snap;\r\n me.#snapPrecisionInput.value = this.#SnapPrecision.toString();\r\n me.#showPointInput.checked = this.#showPoints;\r\n me.#pointSizeInput.value = me.#CircleSize.toString();\r\n me.#showPaintIndicatorInput.checked = this.#showPaintIndicator;\r\n me.#showAngleLabelsInput.checked = this.#showAngleLabels;\r\n me.#angleLabelLimitInput.value = this.#angleLabelLimit.toString();\r\n me.#showLengthLabelsInput.checked = this.#showLengthLabels;\r\n me.#lengthLabelLimitInput.value = this.#lengthLabelLimit.toString();\r\n me.#bendRadiusInput.value = round(this.#BendRadius / this.ScaleFactor, 3).toString();\r\n me.#grayBackgroundInput.value = this.#grayBackground;\r\n\r\n this.#svgContainer.style.backgroundColor = this.#grayBackground;\r\n }\r\n\r\n updateUI() {\r\n this.#svgContainer.style.backgroundColor = this.#grayBackground;\r\n this.updateDrawingObjects();\r\n }\r\n\r\n saveSettings() {\r\n let settingsObject = {\r\n ProfileOnly: this.#profileOnly,\r\n Snap: this.#Snap,\r\n SnapPrecision: this.#SnapPrecision,\r\n ShowPoint: this.#showPoints,\r\n PointSize: this.#CircleSize,\r\n ShowPaintIndicator: this.#showPaintIndicator,\r\n ShowAngleLabels: this.#showAngleLabels,\r\n AngleLabelLimit: this.#angleLabelLimit,\r\n ShowLengthLabels: this.#showLengthLabels,\r\n LengthLabelLimit: this.#lengthLabelLimit,\r\n BendRadius: this.#BendRadius,\r\n GrayBackground: this.#grayBackground,\r\n };\r\n let strJson = JSON.stringify(settingsObject);\r\n\r\n localStorage.setItem(this.#settingsKey, strJson);\r\n }\r\n\r\n\r\n getSettings() {\r\n if (localStorage.getItem(this.#settingsKey) === null) {\r\n if (isMobile()) {\r\n this.#CircleSize = 40;\r\n } else {\r\n this.#CircleSize = 20;\r\n }\r\n\r\n this.saveSettings();\r\n }\r\n\r\n let strSettings = localStorage.getItem(this.#settingsKey);\r\n if (strSettings === null) {\r\n return; // Must have been an error saving settings to local storage.\r\n }\r\n let settingsObject = JSON.parse(strSettings);\r\n\r\n this.#profileOnly = settingsObject.ProfileOnly;\r\n this.#Snap = settingsObject.Snap;\r\n this.#SnapPrecision = settingsObject.SnapPrecision;\r\n this.#showPoints = settingsObject.ShowPoint;\r\n this.#CircleSize = settingsObject.PointSize;\r\n this.#showPaintIndicator = settingsObject.ShowPaintIndicator;\r\n this.#showAngleLabels = settingsObject.ShowAngleLabels;\r\n this.#angleLabelLimit = settingsObject.AngleLabelLimit;\r\n this.#showLengthLabels = settingsObject.ShowLengthLabels;\r\n this.#lengthLabelLimit = settingsObject.LengthLabelLimit;\r\n this.#BendRadius = settingsObject.BendRadius;\r\n this.#grayBackground = settingsObject.GrayBackground;\r\n }\r\n\r\n getOrientation() {\r\n var orientation = window.innerWidth > window.innerHeight ? \"Landscape\" : \"Portrait\";\r\n return orientation;\r\n }\r\n\r\n\r\n\r\n}","import { isNullOrWhitespace, round, isString } from \"./utils\";\r\n\r\n\r\n\r\nexport function InToIn(Inches: string | number): string {\r\n\r\n if (isString(Inches)) {\r\n let ftdbl = InToFtDbl(Inches)\r\n return FtToIn(ftdbl);\r\n }\r\n\r\n let inch = Number(Inches);\r\n\r\n if (!isNaN(Inches)) {\r\n inch = inch / 12;\r\n return FtToIn(inch);\r\n }\r\n return \"\";\r\n\r\n}\r\n\r\nexport function InToFtDbl(Inches: string): number {\r\n return InToInDbl(Inches) / 12;\r\n}\r\n\r\nexport function InToInDbl(Inches: string): number {\r\n //if (Inches == null) return 0;\r\n if (isNullOrWhitespace(Inches)) return 0;\r\n\r\n if (Inches.includes(\"'\") || (Inches.includes(\"-\") && Inches.includes(\"/\") === false) || (Inches.includes(\" \") && Inches.includes(\"/\") === false)) {\r\n return FtToInDbl(Inches);\r\n }\r\n else {\r\n //return (\" \" + Inches).FtToInDbl();\r\n let s = ' ' + Inches.toString();\r\n return FtToInDbl(s);\r\n }\r\n}\r\n\r\nexport function FtToInDbl(ftIn: string): number {\r\n\r\n if (ftIn.includes('\"') && !ftIn.includes(\"'\") && !ftIn.includes(\" \")) {\r\n ftIn = \"0' \" + ftIn;\r\n }\r\n let CurC = \"\", Ft = \"\", Inch = \"\", Fr = \"\", Fr2 = \"\";\r\n let Fraction = false, Dec = false, DecIn = false, Feet = false;\r\n let CurNum = 1;\r\n\r\n\r\n for (var cl = 1; cl <= ftIn.length; cl++) {\r\n\r\n CurC = ftIn.substring(cl - 1, cl);\r\n var exit = false;\r\n\r\n switch (CurNum) {\r\n case 1:\r\n //get value for feet\r\n switch (CurC) {\r\n case \"'\":\r\n case \"-\":\r\n case \"*\":\r\n Feet = true;\r\n CurNum = 2;\r\n break;\r\n case \"\\\"\":\r\n //return double.Parse(Ft);\r\n return parseFloat(Ft);\r\n case \".\":\r\n Ft += CurC;\r\n Dec = true;\r\n break;\r\n case \"/\":\r\n Fr = Ft;\r\n Ft = \"\";\r\n Fraction = true;\r\n break;\r\n case \" \":\r\n if (Dec) CurNum = 3; else CurNum = 2;\r\n break;\r\n case \"1\":\r\n case \"2\":\r\n case \"3\":\r\n case \"4\":\r\n case \"5\":\r\n case \"6\":\r\n case \"7\":\r\n case \"8\":\r\n case \"9\":\r\n case \"0\":\r\n if (Fraction) Fr2 += CurC; else Ft += CurC;\r\n break;\r\n case \"\\\\\":\r\n break;\r\n default:\r\n exit = true;\r\n break;\r\n }\r\n break;\r\n case 2:\r\n //get value for inches\r\n switch (CurC) {\r\n case \"\\\"\":\r\n exit = true;\r\n break;\r\n case \".\":\r\n Inch += CurC;\r\n DecIn = true;\r\n break;\r\n case \"/\":\r\n Fr = Inch;\r\n if (Feet) Inch = \"\"; else { Inch = Ft; Ft = \"\"; }\r\n Fraction = true;\r\n break;\r\n case \" \":\r\n //string t1 = FtIn.Substring(cl - 2);\r\n //if (t1[0].ToString() != \"'\") if (DecIn) exit = true; else CurNum = 3;\r\n //break;\r\n case \"-\":\r\n case \"*\":\r\n let t = ftIn.substring(cl - 2);\r\n if (t[0] != \"'\") {\r\n if (DecIn) {\r\n exit = true;\r\n }\r\n else { CurNum = 3; }\r\n }\r\n break;\r\n case \"1\":\r\n case \"2\":\r\n case \"3\":\r\n case \"4\":\r\n case \"5\":\r\n case \"6\":\r\n case \"7\":\r\n case \"8\":\r\n case \"9\":\r\n case \"0\":\r\n if (Fraction) Fr2 += CurC; else Inch += CurC;\r\n break;\r\n case \"\\\\\":\r\n break;\r\n default:\r\n exit = true;\r\n break;\r\n }\r\n break;\r\n case 3:\r\n //get the value for fractional inches\r\n\r\n switch (CurC) {\r\n case \"\\\"\":\r\n exit = true;\r\n break;\r\n case \"/\":\r\n Fraction = true;\r\n break;\r\n case \" \":\r\n if (DecIn) exit = true; else CurNum = 3;\r\n break;\r\n case \"1\":\r\n case \"2\":\r\n case \"3\":\r\n case \"4\":\r\n case \"5\":\r\n case \"6\":\r\n case \"7\":\r\n case \"8\":\r\n case \"9\":\r\n case \"0\":\r\n if (Fraction) Fr2 += CurC; else Fr += CurC;\r\n break;\r\n case \"\\\\\":\r\n break;\r\n default:\r\n exit = true;\r\n break;\r\n }\r\n break;\r\n }\r\n if (exit) break;\r\n } // end of for loop\r\n\r\n\r\n if (Fr === \"\") Fr = \"0\";\r\n if (Fr2 === \"\") Fr2 = \"0\";\r\n // Fr = (Fr.ToDouble() / Fr2.ToDouble()).ToString();\r\n Fr = (parseFloat(Fr) / parseFloat(Fr2)).toString();\r\n\r\n\r\n if (Fr === \"NaN\" || Fr === \"∞\") { Fr = \"0\"; }\r\n\r\n //if (isNaN(Fr)) {\r\n // Fr = \"0\";\r\n // }\r\n\r\n if (Ft === \"\") Ft = \"0\";\r\n if (Inch === \"\") Inch = \"0\";\r\n if (Fr === \"\") Fr = \"0\";\r\n //return (Ft.ToDouble() * 12) + (Inch.ToDouble() + Fr.ToDouble());\r\n let r = (+Ft * 12) + +Inch + +Fr;\r\n return r;//(+Ft * 12) + +Inch + +Fr;\r\n //return (parseFloat(Ft) * 12) + (parseFloat(Inch) + parseFloat(Fr));\r\n}\r\n\r\nexport function FtToIn(Num: number): string {\r\n\r\n let L = parseInt(round((Num * 12) * 16, 0).toString());\r\n let Inches = parseInt(Math.floor(L / 16).toString());\r\n let Fraction = L - (Inches * 16);\r\n let Lenlbl = \"\";\r\n switch (Fraction) {\r\n case 0:\r\n Lenlbl = Inches + \"\\\"\";\r\n break;\r\n case 1:\r\n case 3:\r\n case 5:\r\n case 7:\r\n case 9:\r\n case 11:\r\n case 13:\r\n case 15:\r\n Lenlbl = Inches + \"-\" + Fraction + \"/16\\\"\";\r\n break;\r\n case 2:\r\n case 6:\r\n case 10:\r\n case 14:\r\n Lenlbl = Inches + \"-\" + (Fraction / 2) + \"/8\\\"\";\r\n break;\r\n case 4:\r\n case 12:\r\n Lenlbl = Inches + \"-\" + (Fraction / 4) + \"/4\\\"\";\r\n break;\r\n case 8:\r\n Lenlbl = Inches + \"-\" + (Fraction / 8) + \"/2\\\"\";\r\n break;\r\n }\r\n if (Lenlbl.startsWith(\"0-\")) {\r\n //Lenlbl = Lenlbl.Remove(0, 2);\r\n Lenlbl = Lenlbl.substr(2);\r\n }\r\n return Lenlbl;\r\n}\r\n\r\nexport function FtToFt(Num: number) {\r\n let t1: string[] = [], t2: string[] = [];\r\n let t3: number;\r\n let Fraction: string;\r\n t1 = Num.toString().split('.');\r\n if (t1.length === 1) return Num.toString().concat(\"'\");\r\n t2 = String((parseFloat(\".\" + String(t1[1])) * 12)).split('.');\r\n if (t2.length < 2 || parseFloat(\".\".concat(t2[1])) < .0625) //no fraction\r\n {\r\n if (parseFloat(t2[0]) === 0) {\r\n return t2[0].concat(\"\\\"\");\r\n }\r\n else {\r\n return t1[0].concat(\"' \").concat(t2[0]).concat(\"\\\"\");\r\n }\r\n }\r\n let a = round((+(\".\" + t2[1])) * 8, 0);\r\n t3 = parseInt(round((+(\".\" + t2[1])) * 8, 0).toString());\r\n switch (t3) {\r\n case 1:\r\n Fraction = \"1/8\";\r\n break;\r\n case 2:\r\n Fraction = \"1/4\";\r\n break;\r\n case 3:\r\n Fraction = \"3/8\";\r\n break;\r\n case 4:\r\n Fraction = \"1/2\";\r\n break;\r\n case 5:\r\n Fraction = \"5/8\";\r\n break;\r\n case 6:\r\n Fraction = \"3/4\";\r\n break;\r\n case 7:\r\n Fraction = \"7/8\";\r\n break;\r\n case 8:\r\n Fraction = \"\";\r\n t2[0] = (parseInt(t2[0]) + 1).toString();\r\n break;\r\n default:\r\n Fraction = \"\";\r\n break;\r\n }\r\n if (t1[0] === \"\" || t1[0] === \"\") {\r\n //no feet\r\n if (t2[0] === \"\" || t2[0] === \"\") return Fraction + \"\\\"\"; else return t2[0] + \"-\" + Fraction + \"\\\"\";\r\n }\r\n else {\r\n if (t2[0] === \"\" || t2[0] === \"\") {\r\n return t1[0] + \"' \" + Fraction + \"\\\"\";\r\n }\r\n else {\r\n if (t2[0] === \"12\") {\r\n return (parseInt(t1[0]) + 1).toString().concat(\"'\");\r\n }\r\n if (Fraction == \"\") {\r\n return t1[0] + \"' \" + t2[0] + \"\\\"\";\r\n } else {\r\n return t1[0] + \"' \" + t2[0] + \"-\" + Fraction + \"\\\"\";\r\n }\r\n }\r\n\r\n }\r\n}\r\n\r\nexport function FtToFtDbl(Ft: string) { return FtToInDbl(Ft) / 12; }","import { isString } from \"./utils\";\r\n\r\nexport class HtmlManager {\r\n #containerDiv: HTMLElement;\r\n constructor(container: HTMLElement | string) {\r\n let t = document.getElementById(\"ncDataTable\");\r\n if (t !== null) {\r\n\r\n return;\r\n }\r\n else {\r\n if (isString(container)) {\r\n let c = document.querySelector(container) as HTMLElement;\r\n if (c === null || c === undefined) {\r\n console.error(\"Cannot find element.\");\r\n }\r\n else {\r\n this.#containerDiv = c;\r\n }\r\n }\r\n else {\r\n this.#containerDiv = container;\r\n }\r\n this.#containerDiv.innerHTML = this.#html;\r\n }\r\n }\r\n\r\n #dataTable: HTMLTableElement;\r\n getDataTable() {\r\n if (this.#dataTable === null || this.#dataTable === undefined) {\r\n this.#dataTable = (document.getElementById(\"ncDataTable\"));\r\n }\r\n return this.#dataTable;\r\n }\r\n\r\n\r\n #html = ` \r\n \r\n \r\n \r\n \r\n\r\n\r\n
\r\n\r\n
\r\n \r\n\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n\r\n\r\n \r\n
Description
\r\n
Price: 6.07
\r\n
Blank width: 8-3/4\"
\r\n\r\n
\r\n \r\n \r\n
\r\n\r\n\r\n
\r\n\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n\r\n\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
LengthAngle
\r\n
\r\n \r\n\r\n \r\n
\r\n\r\n`;\r\n}","import { FtToFtDbl, FtToFt } from \"./FeetIn\";\r\nimport { isNullOrWhitespace, isString, getParameterCaseInsensitive } from \"./utils\";\r\n\r\nexport class TrimOptionsManager {\r\n #Coils: Coil[] = new Array();\r\n #loading = false;\r\n calculateCustomTrimPrice: CallableFunction;\r\n\r\n #descriptionInput: HTMLInputElement;\r\n #descriptionIncludeLengthInput: HTMLInputElement;\r\n #descriptionIncludeCoilInput: HTMLInputElement;\r\n #descriptionIncludeColorInput: HTMLInputElement;\r\n\r\n #lengthInput: HTMLInputElement;\r\n #colorInput: HTMLSelectElement;\r\n #coilInput: HTMLSelectElement;\r\n #ReversePaintSideInput: HTMLInputElement;\r\n\r\n\r\n constructor() {\r\n }\r\n\r\n private _Name: string = \"Custom Trim\";\r\n public get Name(): string {\r\n return this._Name;\r\n }\r\n public set Name(v: string) {\r\n this._Name = v;\r\n this.writeValuesToInputs();\r\n }\r\n\r\n private _Length: number = 0;\r\n public get Length(): number {\r\n return this._Length;\r\n }\r\n public set Length(v: number) {\r\n this._Length = v;\r\n this.writeValuesToInputs();\r\n }\r\n public get LengthText(): string {\r\n return FtToFt(this.Length);\r\n }\r\n public set LengthText(v: string) {\r\n this.Length = FtToFtDbl(v);\r\n this.writeValuesToInputs();\r\n this.calculatePrice();\r\n }\r\n\r\n #_DescriptionIncludeLength: boolean = true;\r\n public get DescriptionIncludeLength(): boolean {\r\n return this.#_DescriptionIncludeLength;\r\n }\r\n public set DescriptionIncludeLength(v: boolean) {\r\n this.#_DescriptionIncludeLength = v;\r\n this.writeValuesToInputs();\r\n }\r\n\r\n private _DescriptionIncludeColor: boolean = true;\r\n public get DescriptionIncludeColor(): boolean {\r\n return this._DescriptionIncludeColor;\r\n }\r\n public set DescriptionIncludeColor(v: boolean) {\r\n this._DescriptionIncludeColor = v;\r\n this.writeValuesToInputs();\r\n }\r\n\r\n private _DescriptionIncludeCoil: boolean = false;\r\n public get DescriptionIncludeCoil(): boolean {\r\n return this._DescriptionIncludeCoil;\r\n }\r\n public set DescriptionIncludeCoil(v: boolean) {\r\n this._DescriptionIncludeCoil = v;\r\n this.writeValuesToInputs();\r\n }\r\n\r\n private _SelectedCoil: string;\r\n public get SelectedCoil(): string {\r\n return this._SelectedCoil;\r\n }\r\n public set SelectedCoil(v: string) {\r\n this._SelectedCoil = v;\r\n\r\n let L = this.#colorInput.options.length - 1;\r\n for (let i = L; i >= 0; i--) {\r\n this.#colorInput.remove(i);\r\n }\r\n let colors = this.#Coils.find(c => c.Id == Number(this.SelectedCoil))?.Colors;\r\n if (colors === undefined) return;\r\n for (let i = 0; i < colors.length; i++) {\r\n const color = colors[i];\r\n let colorOption = document.createElement(\"option\");\r\n colorOption.value = color.Id.toString();\r\n colorOption.text = color.Description;\r\n\r\n if (color.Id === Number(this.SelectedColor)) {\r\n colorOption.selected = true;\r\n }\r\n this.#colorInput.add(colorOption);\r\n }\r\n this.writeValuesToInputs();\r\n this.calculatePrice();\r\n }\r\n\r\n private _SelectedColor: string;\r\n public get SelectedColor(): string {\r\n return this._SelectedColor;\r\n }\r\n public set SelectedColor(v: string) {\r\n this._SelectedColor = v;\r\n this.writeValuesToInputs();\r\n this.calculatePrice();\r\n }\r\n\r\n public get ColorName(): string {\r\n let coil = this.#Coils.find(c => c.Id == Number(this.SelectedCoil));\r\n if (coil == null) return \"\";\r\n let color = coil.Colors.find(c => c.Id == Number(this.SelectedColor));\r\n if (color == undefined) return \"\";\r\n return color.Description;\r\n }\r\n\r\n public get CoilName(): string {\r\n let coil = this.#Coils.find(c => c.Id == Number(this.SelectedCoil));\r\n if (coil == null) return \"\";\r\n return coil.Description;\r\n }\r\n\r\n\r\n private _BlankWidthText: string = \"\";\r\n public get BlankWidthText(): string {\r\n return this._BlankWidthText;\r\n }\r\n public set BlankWidthText(v: string) {\r\n this._BlankWidthText = v;\r\n this.writeValuesToInputs();\r\n }\r\n\r\n private _ReversePaintedSide: boolean = false;\r\n public get ReversePaintedSide(): boolean {\r\n return this._ReversePaintedSide;\r\n }\r\n public set ReversePaintedSide(v: boolean) {\r\n this._ReversePaintedSide = v;\r\n this.writeValuesToInputs();\r\n }\r\n\r\n\r\n calculatePrice() {\r\n if (this.#loading) return;\r\n if (this.calculateCustomTrimPrice == null) return;\r\n this.calculateCustomTrimPrice(this.updatePrice);\r\n }\r\n\r\n updatePrice(price: number) {\r\n document.getElementById('nctdPriceLabel')!.textContent = `Price: ${price}`;\r\n }\r\n\r\n LoadCoils(coilJsonData: any) {\r\n let coilObjects: any;\r\n this.#Coils.length = 0;\r\n if (isString(coilJsonData)) {\r\n coilObjects = JSON.parse(coilJsonData);\r\n } else {\r\n coilObjects = coilJsonData\r\n }\r\n\r\n for (let i = 0; i < coilObjects.length; i++) {\r\n const coilObject = coilObjects[i];\r\n const colors = new Array();\r\n for (let j = 0; j < coilObject.colors.length; j++) {\r\n const color = coilObject.colors[j];\r\n colors.push(new ProductColor(color.id, color.code, color.description));\r\n }\r\n let coil = new Coil(coilObject.id, coilObject.code, coilObject.description, colors)\r\n this.#Coils.push(coil);\r\n\r\n let option = document.createElement(\"option\");\r\n option.value = coil.Id.toString();\r\n option.text = coil.Description;\r\n this.#coilInput.add(option);\r\n }\r\n }\r\n\r\n loadCustomTrimOptions(customTrimJson: any) {\r\n this.#loading = true;\r\n let customTrimObject: object;\r\n if (isString(customTrimJson)) {\r\n customTrimObject = JSON.parse(customTrimJson);\r\n } else {\r\n customTrimObject = customTrimJson\r\n }\r\n\r\n let name = getParameterCaseInsensitive(customTrimObject, \"name\");\r\n this.Name = name === undefined ? this.Name : name;\r\n\r\n let color = getParameterCaseInsensitive(customTrimObject, \"colorId\");\r\n this.SelectedColor = color === undefined ? this.SelectedColor : color;\r\n\r\n let coil = getParameterCaseInsensitive(customTrimObject, \"coilId\");\r\n this.SelectedCoil = coil === undefined ? this.SelectedCoil : coil;\r\n\r\n let length = getParameterCaseInsensitive(customTrimObject, \"length\");\r\n this.Length = length === undefined ? this.Length : length;\r\n\r\n this.DescriptionIncludeLength = true;\r\n if (customTrimObject.hasOwnProperty(\"DescriptionIncludeLength\")) {\r\n this.DescriptionIncludeLength = getParameterCaseInsensitive(customTrimObject, \"DescriptionIncludeLength\");\r\n }\r\n this.DescriptionIncludeCoil = false;\r\n if (customTrimObject.hasOwnProperty(\"DescriptionIncludeCoil\")) {\r\n this.DescriptionIncludeCoil = getParameterCaseInsensitive(customTrimObject, \"DescriptionIncludeCoil\");\r\n }\r\n this.DescriptionIncludeColor = true;\r\n if (customTrimObject.hasOwnProperty(\"DescriptionIncludeColor\")) {\r\n this.DescriptionIncludeColor = getParameterCaseInsensitive(customTrimObject, \"DescriptionIncludeColor\");\r\n }\r\n this.ReversePaintedSide = false;\r\n if (customTrimObject.hasOwnProperty(\"ReversePaintedSide\")) {\r\n this.ReversePaintedSide = getParameterCaseInsensitive(customTrimObject, \"ReversePaintedSide\");\r\n }\r\n let price = 0;\r\n if (customTrimObject.hasOwnProperty(\"Price\")) {\r\n price = Number(getParameterCaseInsensitive(customTrimObject, \"Price\"));\r\n }\r\n this.updatePrice(price);\r\n\r\n this.#loading = false;\r\n }\r\n\r\n\r\n getDescription(): string {\r\n return this.Name + (this.DescriptionIncludeLength ? \" \" + FtToFt(this.Length) : \"\")\r\n + (this.DescriptionIncludeCoil && !isNullOrWhitespace(this.CoilName) ? \" \" + this.CoilName : \"\")\r\n + (this.DescriptionIncludeColor && !isNullOrWhitespace(this.ColorName) ? \" \" + this.ColorName : \"\");\r\n }\r\n\r\n\r\n init() {\r\n let me = this;\r\n me.#descriptionInput = document.getElementById(\"nctdDescriptionInput\") as HTMLInputElement;\r\n me.#descriptionInput.addEventListener(\"input\", function () {\r\n me.Name = this.value;\r\n });\r\n me.#descriptionIncludeLengthInput = document.getElementById(\"nctdIncludeLength\") as HTMLInputElement;\r\n me.#descriptionIncludeLengthInput.addEventListener(\"change\", function () {\r\n me.DescriptionIncludeLength = this.checked;\r\n });\r\n me.#descriptionIncludeCoilInput = document.getElementById(\"nctdIncludeCoilDescription\") as HTMLInputElement;\r\n me.#descriptionIncludeCoilInput.addEventListener(\"change\", function () {\r\n me.DescriptionIncludeCoil = this.checked;\r\n });\r\n me.#descriptionIncludeColorInput = document.getElementById(\"nctdIncludeColorDescription\") as HTMLInputElement;\r\n me.#descriptionIncludeColorInput.addEventListener(\"change\", function () {\r\n me.DescriptionIncludeColor = this.checked;\r\n });\r\n me.#lengthInput = document.getElementById(\"nctdLength\") as HTMLInputElement;\r\n me.#lengthInput.addEventListener(\"change\", function () {\r\n me.LengthText = this.value;\r\n });\r\n me.#colorInput = document.getElementById(\"nctdColor\") as HTMLSelectElement;\r\n me.#colorInput.addEventListener(\"change\", function () {\r\n me.SelectedColor = this.value;\r\n });\r\n me.#coilInput = document.getElementById(\"nctdCoil\") as HTMLSelectElement;\r\n me.#coilInput.addEventListener(\"change\", function () {\r\n me.SelectedCoil = this.value;\r\n });\r\n me.#ReversePaintSideInput = document.getElementById(\"nctdReversePaintSide\") as HTMLInputElement;\r\n me.#ReversePaintSideInput.addEventListener(\"change\", function () {\r\n me.ReversePaintedSide = this.checked;\r\n });\r\n (document.getElementById(\"nctdCalculateTrimPrice\"))\r\n .addEventListener(\"click\", function () {\r\n me.calculatePrice();\r\n });\r\n\r\n }\r\n\r\n writeValuesToInputs() {\r\n let me = this;\r\n me.#descriptionInput.value = me.Name;\r\n me.#descriptionIncludeLengthInput.checked = me.DescriptionIncludeLength;\r\n me.#descriptionIncludeCoilInput.checked = me.DescriptionIncludeCoil;\r\n me.#descriptionIncludeColorInput.checked = me.DescriptionIncludeColor;\r\n me.#lengthInput.value = me.LengthText;\r\n me.#colorInput.value = me.SelectedColor;\r\n me.#coilInput.value = me.SelectedCoil;\r\n me.#ReversePaintSideInput.checked = me.ReversePaintedSide;\r\n document.getElementById(\"nctdDescriptionLabel\")!.textContent = me.getDescription();\r\n document.getElementById(\"nctdBlankWidthLabel\")!.textContent = \"Blank Width: \" + this.BlankWidthText;\r\n }\r\n}\r\n\r\n\r\nclass Coil {\r\n constructor(id: number, code: string, description: string, productColors: ProductColor[]) {\r\n this.Id = id;\r\n this.Code = code;\r\n this.Description = description;\r\n this.Colors = productColors;\r\n }\r\n\r\n private _Id: number;\r\n public get Id(): number {\r\n return this._Id;\r\n }\r\n public set Id(v: number) {\r\n this._Id = v;\r\n }\r\n\r\n private _Code: string;\r\n public get Code(): string {\r\n return this._Code;\r\n }\r\n public set Code(v: string) {\r\n this._Code = v;\r\n }\r\n\r\n private _Description: string;\r\n public get Description(): string {\r\n return this._Description;\r\n }\r\n public set Description(v: string) {\r\n this._Description = v;\r\n }\r\n\r\n private _Colors: ProductColor[];\r\n public get Colors(): ProductColor[] {\r\n return this._Colors;\r\n }\r\n public set Colors(v: ProductColor[]) {\r\n this._Colors = v;\r\n }\r\n}\r\n\r\nclass ProductColor {\r\n constructor(id: number, code: string, description: string) {\r\n this.Id = id;\r\n this.Code = code;\r\n this.Description = description;\r\n }\r\n\r\n private _Id: number;\r\n public get Id(): number {\r\n return this._Id;\r\n }\r\n public set Id(v: number) {\r\n this._Id = v;\r\n }\r\n\r\n\r\n private _Code: string;\r\n public get Code(): string {\r\n return this._Code;\r\n }\r\n public set Code(v: string) {\r\n this._Code = v;\r\n }\r\n\r\n private _Description: string;\r\n public get Description(): string {\r\n return this._Description;\r\n }\r\n public set Description(v: string) {\r\n this._Description = v;\r\n }\r\n}\r\n\r\nclass CustomTrim {\r\n constructor(name: string, coilId: number, colorId: number, coilName: string, colorName: string, length: string,\r\n reversePaintedSide: boolean, blankWidth: string) {\r\n\r\n }\r\n}\r\n","import { SVG, Circle, Line, Path, Text, Shape, G } from \"@svgdotjs/svg.js\";\r\nimport \"svg-pan-zoom\";\r\nimport { Segment } from \"./Segment\";\r\nimport { Point } from \"./Point\";\r\nimport { IPoint } from \"./Point\";\r\nimport { Vector } from \"./Vector\";\r\nimport { SerializationHelper } from \"./SerializationHelper\";\r\nimport { Svg } from \"@svgdotjs/svg.js\";\r\nimport { UndoPoint } from \"./UndoPoint\";\r\nimport { SettingsManager } from \"./SettingsManager\";\r\nimport { isString, round, isNullOrWhitespace, GetOffsetPoint, GetAngleDegrees, GetArcPoints, GetAngle, DirectionFromAngle, GetLineAngle360, iOS, isMobile } from \"./utils\";\r\nimport { InToIn, InToInDbl, FtToFtDbl, FtToInDbl, FtToIn } from \"./FeetIn\";\r\nimport { HtmlManager } from \"./HtmlManager\";\r\nimport { TrimOptionsManager } from \"./TrimOptionsManager\";\r\n\r\nexport class TrimDesigner {\r\n #parentDiv: HTMLElement;\r\n #drawingDiv: HTMLElement;\r\n mySVG: Svg;\r\n svgElement: any;\r\n svgGroup: G;\r\n pt: any;\r\n tempCircle: Circle;\r\n me = this;\r\n constructor() { }\r\n\r\n #Points: Array = new Array();\r\n #tempPoint: Point = new Point(0, 0);\r\n\r\n svgCircles: Array = new Array();\r\n svgLines: Array = new Array();\r\n svgPaths: Array = new Array();\r\n linePoints: Array = new Array();\r\n svgInsideArc = new Array();\r\n svgLabels: { [key: string]: Text } = {};\r\n LabelOffsets: { [key: string]: Vector } = {};\r\n svgLenText = new Array();\r\n svgPaintLineShapes = new Array();\r\n svgText = new Array();\r\n\r\n isDragging: boolean = false; // Dragging an element\r\n isPanning: boolean = false;\r\n isDrawing: boolean = true;\r\n pointBeforePan: IPoint = { x: 0, y: 0 };\r\n pointAfterPan: IPoint = { x: 0, y: 0 };\r\n panZoomInstance: SvgPanZoom.Instance;\r\n #Segments: Array = new Array();\r\n ScaleFactor = 96;\r\n\r\n #PaintLineOffset = 4;\r\n #MousePoint: Point;\r\n //#ReversePaintIndicator = false;\r\n\r\n #settings: SettingsManager;\r\n #htmlManager: HtmlManager;\r\n #trimOptionsManager: TrimOptionsManager;\r\n\r\n private _ReadOnly: boolean;\r\n public get ReadOnly(): boolean {\r\n return this._ReadOnly;\r\n }\r\n public set ReadOnly(v: boolean) {\r\n this._ReadOnly = v;\r\n this.stopDrawing();\r\n let inputs = document.getElementById(\"nctdDescriptionOptions\")!.querySelectorAll(\"input,select\");\r\n for (let i = 0; i < inputs.length; i++) {\r\n const input = inputs[i] as HTMLInputElement;\r\n input.disabled = v;\r\n }\r\n inputs = document.getElementById(\"ncTrimOptions\")!.querySelectorAll(\"input,select\");\r\n for (let i = 0; i < inputs.length; i++) {\r\n const input = inputs[i] as HTMLInputElement;\r\n input.disabled = v;\r\n }\r\n inputs = document.getElementById(\"ncDataTableDiv\")!.querySelectorAll(\"input,select\");\r\n for (let i = 0; i < inputs.length; i++) {\r\n const input = inputs[i] as HTMLInputElement;\r\n input.disabled = v;\r\n }\r\n }\r\n\r\n private get ZoomScale(): number {\r\n if (this.panZoomInstance === undefined)\r\n return 1;\r\n return this.panZoomInstance.getZoom();\r\n }\r\n\r\n private get CircleSize(): number {\r\n if (this.panZoomInstance === undefined)\r\n return this.#settings.PointSize;\r\n let zoomLevel = this.panZoomInstance.getZoom();\r\n let ZoomScaleInverse = 1 / zoomLevel;\r\n if (zoomLevel > 1.6) {\r\n return this.#settings.PointSize;\r\n }\r\n else {\r\n return ZoomScaleInverse * this.#settings.PointSize * 1.4;\r\n }\r\n }\r\n\r\n private get FontSize(): number {\r\n if (this.panZoomInstance === undefined) {\r\n return 14;\r\n }\r\n\r\n let zoomLevel = this.panZoomInstance.getZoom();\r\n let ZoomScaleInverse = 1 / zoomLevel;\r\n if (zoomLevel > 1.6) {\r\n return 14;\r\n }\r\n else {\r\n return ZoomScaleInverse * (14 * 1.2);\r\n }\r\n }\r\n\r\n private get LineWidth(): number {\r\n if (this.panZoomInstance === undefined) {\r\n return 2;\r\n }\r\n let zoomLevel = this.panZoomInstance.getZoom();\r\n let ZoomScaleInverse = 1 / zoomLevel;\r\n if (zoomLevel > 1.6) {\r\n return 2;\r\n }\r\n else {\r\n return ZoomScaleInverse * (2 * 1.5);\r\n }\r\n }\r\n\r\n private get ZoomScaleInverse(): number {\r\n let zoomLevel = this.panZoomInstance.getZoom();\r\n return 1 / zoomLevel;\r\n }\r\n\r\n public get BlankWidth(): number {\r\n let lengthSum = 0;\r\n if (this.#Segments.length > 0) {\r\n for (let i = 0; i < this.#Segments.length; i++) {\r\n const segment = this.#Segments[i];\r\n lengthSum += segment.Length;\r\n }\r\n }\r\n return lengthSum;\r\n }\r\n\r\n\r\n public initTrimDesigner(parentElement: HTMLElement) {\r\n let me = this;\r\n this.#parentDiv = parentElement;\r\n this.#htmlManager = new HtmlManager(parentElement);\r\n this.#trimOptionsManager = new TrimOptionsManager();\r\n this.#trimOptionsManager.init();\r\n this.#drawingDiv = document.getElementById(\"drawing\") as HTMLElement;\r\n\r\n this.#drawingDiv.oncontextmenu = function (event) {\r\n return false;\r\n };\r\n\r\n document.body.onkeydown = function (event) {\r\n if (event.key === 'z' && event.ctrlKey) { // undo\r\n if (event.target instanceof Element) {\r\n if ((event.target).nodeName.toUpperCase() !== \"INPUT\") {\r\n me.undo();\r\n }\r\n }\r\n }\r\n if (event.key === 'y' && event.ctrlKey) { // redo\r\n if (event.target instanceof Element) {\r\n if (event.target.nodeName.toUpperCase() !== \"INPUT\") {\r\n me.redo();\r\n }\r\n }\r\n\r\n }\r\n if (event.ctrlKey && event.shiftKey && event.key.toUpperCase() === 'F') {\r\n me.zoomToFit();\r\n event.stopPropagation();\r\n event.preventDefault();\r\n }\r\n\r\n event = event || window.event;\r\n var isEscape = false;\r\n if (\"key\" in event) {\r\n isEscape = (event.key === \"Escape\" || event.key === \"Esc\");\r\n if (isEscape) {\r\n if (me.isDragging) {\r\n me.isDragging = false;\r\n me.isPanning = true;\r\n me.addUndoPoint();\r\n me.undo();\r\n event.preventDefault();\r\n event.stopPropagation();\r\n }\r\n if (me.isDrawing) {\r\n me.stopDrawing();\r\n event.preventDefault();\r\n event.stopPropagation();\r\n }\r\n }\r\n }\r\n }\r\n\r\n this.mySVG = SVG().addTo(this.#drawingDiv)\r\n .attr(\"id\", \"svg-container\")\r\n .addClass(\"svg-container\")\r\n .size(\"100%\", \"100%\");\r\n this.svgElement = document.getElementById(\"svg-container\");\r\n this.makeDraggable(this.svgElement);\r\n me.#settings = new SettingsManager(me.updateDrawingObjects.bind(me), me.zoomToFit.bind(me));\r\n\r\n (document.getElementById(\"nctdReversePaintSide\") as HTMLInputElement).addEventListener(\"change\", function () {\r\n me.updateDrawingObjects();\r\n me.addUndoPoint();\r\n });\r\n\r\n this.svgGroup = this.mySVG.group();\r\n // Create an SVGPoint for future math\r\n this.pt = this.svgElement.createSVGPoint();\r\n this.tempCircle = this.svgGroup.circle(5).fill(\"#2b7535\").opacity(0.5).hide();\r\n this.initPanZoom();\r\n this.initSVG();\r\n\r\n this.initButtons();\r\n }\r\n\r\n private initPanZoom() {\r\n let me = this;\r\n\r\n me.panZoomInstance = svgPanZoom(me.svgElement, {\r\n panEnabled: true,\r\n controlIconsEnabled: false,\r\n zoomEnabled: true,\r\n dblClickZoomEnabled: false,\r\n mouseWheelZoomEnabled: true,\r\n preventMouseEventsDefault: true,\r\n zoomScaleSensitivity: 0.2,\r\n minZoom: 0.2,\r\n maxZoom: 2.8,\r\n fit: false,\r\n contain: false,\r\n center: false,\r\n refreshRate: \"auto\",\r\n //beforeZoom: function(){},\r\n onZoom: function (e) {\r\n // me.zooming is true when touch input sees user trying to zoom. \r\n //We don't want to call update drawing objects here as it gets called twice on touch.\r\n // Only call update drawing objects when on a desktop with mouse.\r\n if (!me.#zooming) {\r\n me.updateDrawingObjects();\r\n }\r\n },\r\n beforePan: function (oldPan, newPan) {\r\n // Save point before panning so we can check if the user actually panned on mouse up.\r\n if (!me.isPanning) {\r\n me.pointBeforePan = oldPan;\r\n }\r\n me.pointAfterPan = newPan;\r\n me.isPanning = true;\r\n },\r\n // onPan: function (event) {\r\n // pointAfterPan = event;\r\n // }\r\n });\r\n }\r\n #zooming = false;\r\n #startDist: number = 0;\r\n #centerPointOfZoom: Point = new Point(0, 0);\r\n\r\n private initSVG() {\r\n let me = this;\r\n\r\n me.mySVG.on(\"touchstart\", function (event: TouchEvent) {\r\n let target = event.target as Element;\r\n let svgP = me.getMousePosition(event);\r\n me.#tempPoint = Point.newPoint(svgP);\r\n me.#MousePoint = Point.newPoint(svgP);\r\n\r\n if (event.touches.length === 2) {\r\n me.#zooming = true;\r\n\r\n me.#centerPointOfZoom = me.getCenterOfTouch(event);\r\n me.#startDist = Math.hypot(\r\n event.touches[0].pageX - event.touches[1].pageX,\r\n event.touches[0].pageY - event.touches[1].pageY\r\n );\r\n\r\n if (me.isDrawing) {\r\n me.#zooming = true;\r\n me.stopDrawing();\r\n }\r\n me.panZoomInstance.enablePan();\r\n return;\r\n }\r\n\r\n me.panZoomInstance.disablePan();\r\n if (target.tagName === \"circle\" || target.tagName === 'text') {\r\n me.panZoomInstance.disablePan();\r\n }\r\n else {\r\n me.startDrawing();\r\n }\r\n\r\n if (me.isDrawing) {\r\n if (me.#Points.length > 0) {\r\n me.updateDrawingObjects();\r\n }\r\n }\r\n });\r\n\r\n me.mySVG.on(\"touchmove\", function (event: TouchEvent) {\r\n if (me.#zooming) {\r\n let dist = Math.hypot(\r\n event.touches[0].pageX - event.touches[1].pageX,\r\n event.touches[0].pageY - event.touches[1].pageY\r\n );\r\n\r\n let dif = dist - me.#startDist;\r\n let z = me.panZoomInstance.getZoom();\r\n\r\n let centerOfTouch = me.getCenterOfTouch(event);\r\n me.panZoomInstance.zoomAtPoint(z + dif / 500, { x: centerOfTouch.x, y: centerOfTouch.y });\r\n //me.panZoomInstance.zoomAtPoint(z + dif / 500, { x: me.#centerPointOfZoom.x, y: me.#centerPointOfZoom.y });\r\n me.updateDrawingObjects();\r\n return;\r\n }\r\n if (me.isPanning) {\r\n return;\r\n }\r\n let svgP = me.getMousePosition(event);\r\n me.#tempPoint = Point.newPoint(svgP);\r\n me.#MousePoint = Point.newPoint(svgP);\r\n if (me.isDrawing) {\r\n me.updateDrawingObjects();\r\n }\r\n });\r\n\r\n me.mySVG.on(\"touchend\", function (event: TouchEvent) {\r\n if (me.#zooming) {\r\n me.#zooming = false;\r\n return;\r\n }\r\n\r\n if (me.#tempPoint === undefined || me.#MousePoint === undefined) {\r\n let svgP = me.getMousePosition(event);\r\n me.#tempPoint = Point.newPoint(svgP);\r\n me.#MousePoint = Point.newPoint(svgP);\r\n }\r\n\r\n if (me.isDrawing) {\r\n if (me.isPanning) {\r\n me.isPanning = false;\r\n let x = Math.abs(me.pointBeforePan.x - me.pointAfterPan.x);\r\n let y = Math.abs(me.pointBeforePan.y - me.pointAfterPan.y);\r\n if (x < 3 || y < 3) {\r\n me.addPoint();\r\n me.stopDrawing();\r\n }\r\n }\r\n else if (me.isDragging) {\r\n\r\n }\r\n else {\r\n me.addPoint();\r\n me.stopDrawing();\r\n }\r\n }\r\n\r\n me.isPanning = false;\r\n me.isDragging = false;\r\n me.panZoomInstance.enablePan();\r\n });\r\n\r\n me.mySVG.on(\"mousemove\", function (event: MouseEvent) {\r\n let svgP = me.getMousePosition(event);\r\n me.#tempPoint = Point.newPoint(svgP);\r\n me.#MousePoint = Point.newPoint(svgP);\r\n if (me.isDrawing) {\r\n me.updateDrawingObjects();\r\n }\r\n });\r\n\r\n me.mySVG.on(\"mousedown\", function (event: MouseEvent) {\r\n if (event.button == 1) {\r\n if (me.ReadOnly)\r\n return;\r\n\r\n if (me.isDragging) {\r\n me.isDragging = false;\r\n me.isPanning = true;\r\n me.addUndoPoint();\r\n me.undo();\r\n return;\r\n }\r\n if (me.svgCircles.length > 0) {\r\n let lastCircle = me.svgCircles[me.svgCircles.length - 1];\r\n me.deleteCircle(lastCircle);\r\n me.updateDrawingObjects();\r\n me.addUndoPoint();\r\n }\r\n }\r\n\r\n if (me.isDrawing) {\r\n if (event.button === 2) {\r\n me.stopDrawing();\r\n }\r\n } else {\r\n if (event.button === 0) {\r\n // isDrawing = true\r\n }\r\n }\r\n });\r\n\r\n me.mySVG.on(\"mouseup\", function (event: MouseEvent) {\r\n\r\n if (event.button == 1) {\r\n return;\r\n }\r\n\r\n if (me.isDrawing) {\r\n if (me.isPanning) {\r\n me.isPanning = false;\r\n let x = Math.abs(me.pointBeforePan.x - me.pointAfterPan.x);\r\n let y = Math.abs(me.pointBeforePan.y - me.pointAfterPan.y);\r\n if (x < 3 || y < 3) {\r\n me.addPoint();\r\n }\r\n } else if (me.isDragging) {\r\n } else {\r\n me.addPoint();\r\n }\r\n } else {\r\n if (!me.isPanning && !me.isDragging) {\r\n let target = event.target as Element;\r\n if (event.button === 0 && target.tagName !== \"circle\") {\r\n me.startDrawing();\r\n }\r\n }\r\n }\r\n me.isPanning = false;\r\n me.isDragging = false;\r\n });\r\n }\r\n\r\n getCenterOfTouch(e: TouchEvent): Point {\r\n let pan = this.panZoomInstance.getPan();\r\n let zoom = this.panZoomInstance.getZoom();\r\n let x = e.touches[0].pageX;\r\n let y = e.touches[0].pageY;\r\n\r\n\r\n this.pt.x = x - pan.x;\r\n this.pt.y = y - pan.y;\r\n\r\n let touch1 = this.pt.matrixTransform(\r\n this.svgElement.getScreenCTM().inverse()\r\n );\r\n\r\n touch1.x = touch1.x / zoom;\r\n touch1.y = touch1.y / zoom;\r\n\r\n x = e.touches[1].pageX;\r\n y = e.touches[1].pageY;\r\n\r\n this.pt.x = x - pan.x;\r\n this.pt.y = y - pan.y;\r\n\r\n let touch2 = this.pt.matrixTransform(\r\n this.svgElement.getScreenCTM().inverse()\r\n );\r\n\r\n touch2.x = touch2.x / zoom;\r\n touch2.y = touch2.y / zoom;\r\n\r\n let t1Point = Point.newPoint(touch1);\r\n let t2Point = Point.newPoint(touch2);\r\n\r\n let linePoint = new LinePoint(t1Point, t2Point);\r\n return linePoint.midwayPoint();\r\n }\r\n\r\n\r\n private _calculateCustomTrimPrice: CallableFunction;\r\n public get CalculateCustomTrimPrice(): CallableFunction {\r\n return this._calculateCustomTrimPrice;\r\n }\r\n public set CalculateCustomTrimPrice(v: CallableFunction) {\r\n this._calculateCustomTrimPrice = v;\r\n this.#trimOptionsManager.calculateCustomTrimPrice = this.CalculateCustomTrimPrice;\r\n }\r\n\r\n loadCoils(json) {\r\n this.#trimOptionsManager.LoadCoils(json);\r\n }\r\n\r\n addPoint() {\r\n let me = this;\r\n if (me.ReadOnly) return;\r\n if (me.#Points.length > 0) {\r\n let lastPoint = me.#Points[me.#Points.length - 1];\r\n if (lastPoint.equals(this.#tempPoint)) {\r\n return;\r\n }\r\n }\r\n me.#Points.push(me.#tempPoint.clone());\r\n me.updateDrawingObjects();\r\n me.addUndoPoint();\r\n }\r\n\r\n drawCircle(point: Point, idx: number) {\r\n let me = this;\r\n\r\n if (me.svgCircles[idx]) {\r\n me.svgCircles[idx].attr({ cx: point.x, cy: point.y });\r\n me.svgCircles[idx].data(\"idx\", idx, true);\r\n me.svgCircles[idx].size(me.CircleSize);\r\n } else {\r\n let circle = me.svgGroup\r\n .circle(me.CircleSize)\r\n .fill(\"#123456\")\r\n .opacity(0.5)\r\n .move(point.x, point.y);\r\n circle.attr({ cx: point.x, cy: point.y });\r\n circle.data(\"idx\", idx, true);\r\n circle.dblclick(function (event: any) {\r\n if (!me.isDrawing) {\r\n me.deleteCircle(this);\r\n event.preventDefault();\r\n }\r\n });\r\n\r\n circle.mouseover(function () {\r\n if (!me.isDrawing) {\r\n let circle: Circle = this;\r\n circle.addClass(\"draggable\");\r\n }\r\n });\r\n circle.mouseout(function () {\r\n if (!me.isDrawing) {\r\n let circle: Circle = this;\r\n circle.removeClass(\"draggable\");\r\n }\r\n });\r\n\r\n let tappedTwice = false;\r\n circle.touchstart(function (event: TouchEvent) {\r\n if (!me.isDrawing) {\r\n if (!tappedTwice) {\r\n tappedTwice = true;\r\n setTimeout(function () {\r\n tappedTwice = false;\r\n }, 400);\r\n return false;\r\n }\r\n me.deleteCircle(this);\r\n event.cancelBubble = true;\r\n event.preventDefault();\r\n }\r\n });\r\n me.svgCircles.push(circle);\r\n }\r\n }\r\n\r\n deleteCircle(circle: Circle) {\r\n\r\n if (this.ReadOnly) return;\r\n\r\n let idx: number = circle.data(\"idx\");\r\n circle.off();\r\n let n = this.svgCircles.indexOf(circle);\r\n this.svgCircles.splice(n, 1);\r\n circle.remove();\r\n this.#Points.splice(idx, 1);\r\n\r\n delete this.LabelOffsets[\"Angle\" + (idx - 1)];\r\n delete this.LabelOffsets[\"Len\" + (idx - 1)];\r\n\r\n this.updateDrawingObjects();\r\n this.addUndoPoint();\r\n }\r\n #updateDataGrid = true;\r\n updateDrawingObjects() {\r\n this.svgLines.forEach((line) => {\r\n line.remove();\r\n });\r\n\r\n this.svgPaths.forEach((c) => {\r\n c.remove();\r\n });\r\n this.svgInsideArc.forEach((c) => {\r\n c.remove();\r\n });\r\n this.svgPaintLineShapes.forEach((shape) => {\r\n shape.remove();\r\n });\r\n this.svgPaintLineShapes = new Array();\r\n\r\n for (let key in this.svgLabels) {\r\n let label = this.svgLabels[key];\r\n label.off();\r\n label.remove();\r\n delete this.svgLabels[key];\r\n }\r\n\r\n this.svgLines.length = 0; // = new Array();\r\n\r\n this.svgPaths.length = 0; // = new Array();\r\n this.svgInsideArc.length = 0; // = new Array();\r\n\r\n if (this.#Points.length > 0) {\r\n this.drawTempObjects();\r\n this.drawLines();\r\n this.drawLineArcs();\r\n this.drawCircles();\r\n this.drawPaintLine();\r\n\r\n if (this.#updateDataGrid) {\r\n this.updateDataGrid();\r\n }\r\n this.drawAngleLabel();\r\n this.#trimOptionsManager.BlankWidthText = InToIn(this.BlankWidth);\r\n }\r\n if (this.isDrawing && this.#settings.ShowPoints) {\r\n this.tempCircle.show();\r\n this.tempCircle.attr({\r\n cx: this.#tempPoint.x,\r\n cy: this.#tempPoint.y,\r\n r: this.CircleSize / 2,\r\n });\r\n this.tempCircle.front();\r\n } else if (this.isDrawing && !this.#settings.ShowPoints) {\r\n this.tempCircle.hide();\r\n } else {\r\n this.tempCircle.hide();\r\n this.svgCircles.forEach((c) => {\r\n c.front();\r\n });\r\n for (let key in this.svgLabels) {\r\n let label = this.svgLabels[key];\r\n label.front();\r\n }\r\n\r\n }\r\n\r\n let highlightedInputs = document.getElementsByClassName(\"nctd-highlightInput\");\r\n for (let i = 0; i < highlightedInputs.length; i++) {\r\n const element = highlightedInputs[i];\r\n element.classList.remove('nctd-highlightInput');\r\n }\r\n\r\n if (this.isDrawing) {\r\n let table = this.#htmlManager.getDataTable();\r\n let tbody = table.tBodies[0];\r\n let row = tbody.rows[tbody.rows.length - 2];\r\n\r\n if (row !== undefined) {\r\n let length = row.querySelector(\".length\") as HTMLInputElement;\r\n if (isMobile()) {\r\n //Don't set the focus to the table as on a tablet it will open the on screen keyboard.\r\n length.scrollIntoView();\r\n length.classList.add('nctd-highlightInput');\r\n }\r\n else {\r\n length.focus();\r\n length?.select();\r\n }\r\n }\r\n }\r\n }\r\n\r\n #tempShapes = new Array();\r\n drawTempObjects() {\r\n this.#tempShapes.forEach((shape) => shape.remove());\r\n this.#tempShapes.length = 0; //clear array\r\n\r\n if (this.#settings.Snap && this.isDrawing && this.#Points.length > 0) {\r\n //draw the cross hairs\r\n let closestX: number = this.#Points.reduce((x, y) =>\r\n Math.abs(x.x - this.#MousePoint.x) < Math.abs(y.x - this.#MousePoint.x)\r\n ? x\r\n : y\r\n ).x;\r\n let closestY: number = this.#Points.reduce((x, y) =>\r\n Math.abs(x.y - this.#MousePoint.y) < Math.abs(y.y - this.#MousePoint.y)\r\n ? x\r\n : y\r\n ).y;\r\n\r\n if (Math.abs(closestX - this.#MousePoint.x) <= this.#settings.SnapPrecision / this.ZoomScale) {\r\n //snap to closest horizontal point\r\n this.#MousePoint.x = closestX;\r\n this.#tempPoint.x = closestX;\r\n //drawingObjects.Add(new CrossHair() { Start = new Point(_MouseX, 0), End = new Point(_MouseX, 4000 * ZoomScaleInverse) });\r\n let line = this.svgGroup\r\n .line(this.#tempPoint.x, -10000, this.#tempPoint.x, 10000)\r\n .stroke({ color: \"#2b7535\", width: this.LineWidth / 3 });\r\n line.back();\r\n this.#tempShapes.push(line);\r\n }\r\n if (Math.abs(closestY - this.#MousePoint.y) <= this.#settings.SnapPrecision / this.ZoomScale) {\r\n //snap to closest horizontal point\r\n this.#MousePoint.y = closestY;\r\n this.#tempPoint.y = closestY;\r\n //drawingObjects.Add(new CrossHair() { Start = new Point(0, _MouseY), End = new Point(4000 * ZoomScaleInverse, _MouseY) });\r\n let line = this.svgGroup\r\n .line(-100000, this.#tempPoint.y, 100000, this.#tempPoint.y)\r\n .stroke({ color: \"#2b7535\", width: (this.LineWidth / 3) });\r\n line.back();\r\n this.#tempShapes.push(line);\r\n }\r\n }\r\n }\r\n\r\n drawCircles() {\r\n if (this.#settings.ProfileOnly || !this.#settings.ShowPoints) {\r\n this.svgCircles.forEach((c) => {\r\n c.off();\r\n c.remove();\r\n });\r\n this.svgCircles.length = 0;\r\n return;\r\n }\r\n //add points - draw the point in the middle of the bend radius\r\n let idx: number = 0;\r\n //drawingObjects.Insert(0, new Circle() { Size = CircleSize, Center = Points[0], PointIndex = idx });\r\n this.drawCircle(this.#Points[0], idx);\r\n idx++;\r\n\r\n for (let i = 0; i < this.svgPaths.length; i++) {\r\n const path = this.svgPaths[i];\r\n\r\n let length = path.length();\r\n let mid = path.pointAt(length / 2);\r\n let midPoint = new Point(mid.x, mid.y);\r\n this.drawCircle(midPoint, idx);\r\n idx++;\r\n }\r\n if (!this.isDrawing && this.#Points.length > 1)\r\n this.drawCircle(this.#Points[this.#Points.length - 1], idx);\r\n }\r\n\r\n drawLines() {\r\n this.svgLenText.forEach((element) => {\r\n element.remove();\r\n });\r\n this.svgLenText = new Array();\r\n let arcP1: Point;\r\n let arcP2: Point;\r\n let arcP2Last: Point = this.#Points[0];\r\n this.linePoints = new Array();\r\n if (this.#Points.length > 0) {\r\n for (let i = 1; i < this.#Points.length; i++) {\r\n let p1: Point;\r\n\r\n if (i == this.#Points.length - 1) {\r\n p1 = this.#tempPoint;\r\n } else {\r\n p1 = GetOffsetPoint(this.#Points[i + 1], this.#Points[i], -30);\r\n }\r\n\r\n let p2 = GetOffsetPoint(arcP2Last, this.#Points[i], -30);\r\n let p3 = this.#Points[i];\r\n let angle = GetAngleDegrees(p1, p3, p2);\r\n if (angle == 0) {\r\n angle = 0.01;\r\n }\r\n\r\n [arcP1, arcP2] = GetArcPoints(arcP2Last, this.#Points[i],\r\n i == this.#Points.length - 1 ? this.#tempPoint : this.#Points[i + 1],\r\n angle,\r\n this.#settings.BendRadius\r\n );\r\n\r\n if (!this.isDrawing && i == this.#Points.length - 1) {\r\n arcP1 = this.#Points[i];\r\n }\r\n\r\n let line = this.svgGroup\r\n .line(arcP2Last.x, arcP2Last.y, arcP1.x, arcP1.y)\r\n .stroke({ color: \"black\", width: this.LineWidth });\r\n this.svgLines.push(line);\r\n this.linePoints.push(new LinePoint(arcP2Last, arcP1));\r\n let len = Point.subtractPoint(arcP2Last, this.#Points[i]).length;\r\n let midPoint = GetOffsetPoint(arcP2Last, this.#Points[i], 0 - (len / 2));\r\n let last = arcP2Last.clone();\r\n let controlPoint = new Point(last.x - len / 2, last.y);\r\n let a = GetAngleDegrees(last, midPoint, controlPoint) * 2;\r\n if (a < 0) a += 90;\r\n else a -= 90;\r\n\r\n let textPoint = new Point(\r\n // midPoint.x + Math.cos(a * (Math.PI / 180)) * (25 / this.ZoomScale),\r\n // midPoint.y + Math.sin(a * (Math.PI / 180)) * (20 / this.ZoomScale)\r\n\r\n midPoint.x + Math.cos(a * (Math.PI / 180)) * (25),\r\n midPoint.y + Math.sin(a * (Math.PI / 180)) * (20)\r\n );\r\n let b =\r\n this.#Points[i - 1].subtract(this.#Points[i]).length /\r\n this.ScaleFactor; //.InToIn();\r\n this.drawLengthLabel(textPoint, b, i - 1);\r\n arcP2Last = arcP2.clone();\r\n }\r\n\r\n if (this.isDrawing) {\r\n if (isNaN(arcP2Last.x)) {\r\n arcP2Last = this.#tempPoint.clone();\r\n }\r\n\r\n let line = this.svgGroup\r\n .line(arcP2Last.x, arcP2Last.y, this.#tempPoint.x, this.#tempPoint.y)\r\n .stroke({ color: \"black\", width: this.LineWidth });\r\n this.svgLines.push(line);\r\n this.linePoints.push(new LinePoint(arcP2Last, this.#tempPoint));\r\n\r\n let len = Point.subtractPoint(arcP2Last, this.#tempPoint).length / 2;\r\n let midPoint = GetOffsetPoint(arcP2Last, this.#tempPoint, 0 - len);\r\n let last = arcP2Last.clone();\r\n let controlPoint = new Point(last.x - len, last.y);\r\n let a = GetAngleDegrees(last, midPoint, controlPoint) * 2;\r\n if (a < 0) a += 90;\r\n else a -= 90;\r\n\r\n let textPoint = new Point(\r\n midPoint.x + Math.cos(a * (Math.PI / 180)) * (25),\r\n midPoint.y + Math.sin(a * (Math.PI / 180)) * (20)\r\n );\r\n let b =\r\n this.#Points[this.#Points.length - 1].subtract(this.#tempPoint)\r\n .length / this.ScaleFactor; //.InToIn();\r\n this.drawLengthLabel(textPoint, b, 9999);\r\n }\r\n }\r\n }\r\n\r\n drawLengthLabel(textPoint: Point, length: number, idx: number) {\r\n if (!this.#settings.ShowLengthLabels || this.#settings.ProfileOnly) {\r\n return;\r\n }\r\n if (length < this.#settings.LengthLabelLimit) {\r\n return;\r\n }\r\n let me = this;\r\n let offset: Vector = new Vector(0, 0);\r\n if (\"Len\" + idx in this.LabelOffsets) {\r\n offset = this.LabelOffsets[\"Len\" + idx];\r\n textPoint.x = textPoint.x + (offset.x)\r\n textPoint.y = textPoint.y + (offset.y)\r\n }\r\n let len = InToIn(length.toString());\r\n let text = me.svgGroup.plain(len);\r\n text\r\n .move(textPoint.x - 10, textPoint.y - 8)\r\n .font({ fill: \"black\", family: \"Inconsolata\", size: me.FontSize });\r\n text.data(\"tag\", \"Len\" + idx, true);\r\n\r\n text.mouseover(function () {\r\n if (!me.isDrawing) {\r\n let text: Text = this;\r\n text.font({ fill: \"red\" });\r\n text.addClass(\"draggable\");\r\n let tag = text.data(\"tag\");\r\n let input = document.getElementById(tag) as HTMLInputElement;\r\n input?.focus();\r\n input?.select();\r\n }\r\n });\r\n text.mouseout(function () {\r\n if (!me.isDrawing) {\r\n let text: Text = this;\r\n text.font({ fill: \"black\" });\r\n text.removeClass(\"draggable\");\r\n let tag = text.data(\"tag\");\r\n let input = document.getElementById(tag) as HTMLInputElement;\r\n input?.blur();\r\n }\r\n });\r\n text.dblclick(function () {\r\n if (me.ReadOnly) return;\r\n if (me.isDrawing) return;\r\n let text: Text = this;\r\n let tag: string = text.data(\"tag\");\r\n let lineNumber = tag.substring(3);\r\n let lp: LinePoint = me.linePoints[lineNumber];\r\n let newPoint = lp.midwayPoint();\r\n me.#Points.splice(+lineNumber + 1, 0, newPoint);\r\n me.updateDrawingObjects();\r\n me.addUndoPoint();\r\n });\r\n let tappedTwice = false;\r\n text.touchstart(function (event: TouchEvent) {\r\n if (!me.isDrawing) {\r\n if (!tappedTwice) {\r\n tappedTwice = true;\r\n setTimeout(function () {\r\n tappedTwice = false;\r\n }, 800);\r\n return false;\r\n }\r\n // add new point if the length label is double tapped.\r\n if (me.isDrawing) return;\r\n if (me.ReadOnly) return;\r\n\r\n let text: Text = this;\r\n let tag: string = text.data(\"tag\");\r\n let lineNumber = tag.substring(3);\r\n let lp: LinePoint = me.linePoints[lineNumber];\r\n let newPoint = lp.midwayPoint();\r\n me.#Points.splice(+lineNumber + 1, 0, newPoint);\r\n me.updateDrawingObjects();\r\n\r\n }\r\n });\r\n\r\n let timer;\r\n let touchDuration = 800;\r\n let originalPoint: Point;\r\n let originalLabelPosition;\r\n let isLongPressed = false;\r\n text.touchstart(function (event: TouchEvent) {\r\n let text: Text = this;\r\n originalLabelPosition = new Point(text.x(), text.y());\r\n originalPoint = Point.newPoint(me.getMousePosition(event));\r\n if (!me.isDrawing) {\r\n if (!timer) {\r\n timer = setTimeout(function () {\r\n timer = null;\r\n\r\n let tag = text.data(\"tag\");\r\n let input = document.getElementById(tag) as HTMLInputElement;\r\n input?.focus();\r\n input?.select();\r\n isLongPressed = true;\r\n }, touchDuration);\r\n }\r\n }\r\n });\r\n\r\n text.touchmove(function (event) {\r\n let p = Point.newPoint(me.getMousePosition(event));\r\n let v = p.subtract(originalPoint);\r\n if (v.x > 2 || v.y > 2) {\r\n //stops short touches from firing the event\r\n if (timer) {\r\n clearTimeout(timer);\r\n timer = null;\r\n }\r\n }\r\n });\r\n\r\n text.touchend(function (event) {\r\n //stops short touches from firing the event\r\n if (timer) {\r\n clearTimeout(timer);\r\n timer = null;\r\n }\r\n if (isLongPressed) {\r\n this.move(originalLabelPosition.x, originalLabelPosition.y);\r\n isLongPressed = false;\r\n me.addUndoPoint();\r\n }\r\n });\r\n me.svgLabels[\"Len\" + idx] = text;\r\n }\r\n\r\n drawAngleLabel() {\r\n let me = this;\r\n\r\n if (!me.#settings.ShowAngleLabels || this.#settings.ProfileOnly) {\r\n return;\r\n }\r\n\r\n for (let i = 0; i < me.svgPaths.length; i++) {\r\n const lineArc = me.svgPaths[i];\r\n const angleArc = me.svgInsideArc[i];\r\n let angle = 0;\r\n\r\n if (me.#Segments[i + 1] !== undefined) {\r\n angle = me.#Segments[i + 1].Angle;\r\n }\r\n\r\n let lineArcMidPoint = TrimDesigner.GetArcMidPoint(lineArc);\r\n let angleArcMidPoint = TrimDesigner.GetArcMidPoint(angleArc);\r\n\r\n let pointOffset = 20;// * (this.ZoomScaleInverse);//* (1 / this.panZoomInstance.getZoom());\r\n let textPoint = GetOffsetPoint(lineArcMidPoint, angleArcMidPoint, pointOffset);\r\n let offset: Vector = new Vector(0, 0);\r\n if (\"Angle\" + i in me.LabelOffsets) {\r\n offset = me.LabelOffsets[\"Angle\" + i];\r\n textPoint.x = textPoint.x + (offset.x)\r\n textPoint.y = textPoint.y + (offset.y);\r\n }\r\n let xoffSet = 12; // * (this.ZoomScaleInverse * .5);\r\n let yoffSet = 8; //* (this.ZoomScaleInverse * .5);\r\n\r\n\r\n if (Math.abs(angle) > me.#settings.AngleLabelLimit && angle !== 0)\r\n continue;\r\n\r\n let text = me.svgGroup.plain(angle.toFixed(0).toString() + \"°\");\r\n text.move(textPoint.x - xoffSet, textPoint.y - yoffSet).font({ fill: \"black\", family: \"Inconsolata\", size: me.FontSize });\r\n text.data(\"tag\", \"Angle\" + i, true);\r\n\r\n text.mouseover(function () {\r\n if (!me.isDrawing) {\r\n let text: Text = this;\r\n text.font({ fill: \"red\" });\r\n text.addClass(\"draggable\");\r\n let tag = text.data(\"tag\");\r\n let input = document.getElementById(tag) as HTMLInputElement;\r\n input?.focus();\r\n input?.select();\r\n }\r\n });\r\n text.mouseout(function () {\r\n if (!me.isDrawing) {\r\n let text: Text = this;\r\n text.font({ fill: \"black\" });\r\n text.removeClass(\"draggable\");\r\n let tag = text.data(\"tag\");\r\n let input = document.getElementById(tag) as HTMLInputElement;\r\n input?.blur();\r\n }\r\n });\r\n\r\n let timer;\r\n let touchDuration = 800;\r\n let originalPoint: Point;\r\n let originalLabelPosition;\r\n let isLongPressed = false; // When the keyboard opens up when setting the focus on the input dataGrid it drags the label.\r\n text.touchstart(function (event: TouchEvent) {\r\n let text: Text = this;\r\n originalLabelPosition = new Point(text.x(), text.y());\r\n originalPoint = Point.newPoint(me.getMousePosition(event));\r\n if (!me.isDrawing) {\r\n if (!timer) {\r\n timer = setTimeout(function () {\r\n timer = null;\r\n\r\n let tag = text.data(\"tag\");\r\n let input = document.getElementById(tag) as HTMLInputElement;\r\n input?.focus();\r\n input?.select();\r\n isLongPressed = true;\r\n }, touchDuration);\r\n }\r\n }\r\n });\r\n\r\n text.touchmove(function (event) {\r\n let p = Point.newPoint(me.getMousePosition(event));\r\n let v = p.subtract(originalPoint);\r\n if (v.x > 2 || v.y > 2) {\r\n //stops short touches from firing the event\r\n if (timer) {\r\n clearTimeout(timer);\r\n timer = null;\r\n }\r\n }\r\n });\r\n\r\n text.touchend(function (event) {\r\n //stops short touches from firing the event\r\n if (timer) {\r\n clearTimeout(timer);\r\n timer = null;\r\n }\r\n if (isLongPressed) {\r\n this.move(originalLabelPosition.x, originalLabelPosition.y);\r\n isLongPressed = false;\r\n me.addUndoPoint();\r\n }\r\n });\r\n me.svgLabels[\"Angle\" + i] = text;\r\n }\r\n }\r\n\r\n drawArc(start: Point, end: Point, radius: number) {\r\n var d = [\"M\", start.x, start.y, \"A\", radius, radius, 0, 0, 1, end.x, end.y,].join(\" \");\r\n let p = this.svgGroup.path(d).stroke({ color: \"black\", width: this.LineWidth }).fill(\"none\");\r\n return p;\r\n }\r\n\r\n drawLineArcs() {\r\n let path: Path;\r\n if (this.#Points.length > 1) {\r\n if (this.isDrawing) {\r\n this.#Points.push(this.#tempPoint);\r\n }\r\n\r\n for (let i = 1; i < this.#Points.length - 1; i++) {\r\n //draw the angle\r\n let arcSize = 20;// ((30 / this.ZoomScale) * .5);\r\n //arcSize = Math.max(arcSize, 20);\r\n arcSize = Math.max(this.#settings.BendRadius, arcSize);\r\n let lastLine = this.linePoints[i - 1];\r\n let p1 = GetOffsetPoint(this.#Points[i + 1], this.#Points[i], 0 - arcSize);\r\n let p2 = GetOffsetPoint(lastLine.Start, this.#Points[i], 0 - arcSize);\r\n let p3 = this.#Points[i];\r\n let angle = GetAngleDegrees(p1, p3, p2);\r\n let arcP1: Point, arcP2: Point;\r\n if (angle == 0) angle = 0.01;\r\n [arcP1, arcP2] = GetArcPoints(lastLine.Start, this.#Points[i], this.#Points[i + 1], angle, this.#settings.BendRadius);\r\n arcP1 = lastLine.End;\r\n\r\n if (angle > 180) angle -= 360;\r\n let end: Point = GetOffsetPoint(this.#Points[i + 1], arcP2, 0 - p2.subtract(arcP1).length);\r\n let tan = Math.tan(90 - Math.abs(angle));\r\n if (Math.abs(angle) < 90) {\r\n arcSize = arcSize * Math.tan((90 - Math.abs(angle)) / (180 / Math.PI)) + arcSize;\r\n }\r\n if (!isNaN(end.x) && !this.#settings.ProfileOnly) {\r\n if (angle < 0) {\r\n path = this.drawArc(end, p2, arcSize);\r\n } else {\r\n path = this.drawArc(p2, end, arcSize);\r\n }\r\n this.svgInsideArc.push(path);\r\n }\r\n\r\n if (!isNaN(arcP2.x)) {\r\n if (angle <= 0) {\r\n path = this.drawArc(arcP1, arcP2, this.#settings.BendRadius);\r\n } else {\r\n path = this.drawArc(arcP2, arcP1, this.#settings.BendRadius);\r\n }\r\n this.svgPaths.push(path);\r\n }\r\n }\r\n\r\n if (this.isDrawing)\r\n this.#Points.splice(-1, 1);\r\n }\r\n }\r\n\r\n drawPaintLine() {\r\n let lastPoint: Point = new Point(0, 0);\r\n let poffset = Math.min(this.panZoomInstance.getZoom(), 1.4);\r\n this.svgPaintLineShapes.forEach((shape) => {\r\n shape.remove();\r\n });\r\n this.svgPaintLineShapes = new Array();\r\n\r\n if (!this.#settings.ShowPaintIndicator || this.#settings.ProfileOnly) {\r\n return;\r\n }\r\n\r\n for (let i = 0; i < this.linePoints.length; i++) {\r\n const line = this.linePoints[i];\r\n let offset: Vector = new Vector(0, 0);\r\n if (this.#trimOptionsManager.ReversePaintedSide) {\r\n offset = Vector.multiplyVectorScalar(DirectionFromAngle(GetAngle(line.Start, line.End) - 90), this.#PaintLineOffset / poffset);\r\n } else {\r\n offset = Vector.multiplyVectorScalar(DirectionFromAngle(GetAngle(line.Start, line.End) + 90), this.#PaintLineOffset / poffset);\r\n }\r\n //draw paint line\r\n let startPoint = line.Start.addVector(offset);\r\n let endPoint = line.End.addVector(offset);\r\n if (!isNaN(offset.x)) {\r\n let paintLine = this.svgGroup\r\n .line(startPoint.x, startPoint.y, endPoint.x, endPoint.y)\r\n .stroke({ color: '#FFD700', width: (this.LineWidth / 2), dasharray: '1,1' });\r\n this.svgPaintLineShapes.push(paintLine);\r\n\r\n if (i > 0 && (i < this.#Points.length - 1 || this.isDrawing)) {\r\n //NOTE: Still have a bug where the paint line is drawn on the wrong side of the curve. - leave it for now\r\n //draw the arc paint line\r\n let a =\r\n 0 -\r\n Vector.angleBetween(\r\n Point.subtractPoint(this.#Points[i], this.#Points[i - 1]),\r\n Point.subtractPoint(i < this.#Points.length - 1 ? this.#Points[i + 1] : this.#tempPoint, this.#Points[i]));\r\n let IsInsideArc: boolean = 0 - Vector.angleBetween(Point.subtractPoint(this.#Points[i], this.#Points[i - 1]),\r\n Point.subtractPoint(i < this.#Points.length - 1 ? this.#Points[i + 1] : this.#tempPoint, this.#Points[i])) > 0;\r\n if (a == -180) IsInsideArc = true;\r\n\r\n if (IsInsideArc) {\r\n let arcRadius = this.#trimOptionsManager.ReversePaintedSide // this.#ReversePaintIndicator\r\n ? this.#settings.BendRadius + this.#PaintLineOffset / this.ZoomScale\r\n : this.#settings.BendRadius - this.#PaintLineOffset / this.ZoomScale;\r\n if (arcRadius > 0) {\r\n let s = line.Start.addVector(offset);\r\n let d = [\"M\", lastPoint.x, lastPoint.y, \"A\", arcRadius, arcRadius, 0, 0, 0, s.x, s.y,].join(\" \");\r\n let p = this.svgGroup.path(d).stroke({ color: \"#FFD700\", width: (this.LineWidth / 2), dasharray: '1,1' }).fill(\"none\");\r\n this.svgPaintLineShapes.push(p);\r\n // drawingObjects.Insert(0, new ArcPaintLine() { End = lastPoint, Start = line.Start + offset, Size = arcRadius });\r\n }\r\n } else {\r\n let arcRadius = this.#trimOptionsManager.ReversePaintedSide //this.#ReversePaintIndicator\r\n ? this.#settings.BendRadius - this.#PaintLineOffset / poffset\r\n : this.#settings.BendRadius + this.#PaintLineOffset / poffset;\r\n if (arcRadius > 0) {\r\n // drawingObjects.Insert(0, new ArcPaintLine() { Start = lastPoint, End = line.Start + offset, Size = arcRadius });\r\n let s = line.Start.addVector(offset);\r\n let d = [\"M\", lastPoint.x, lastPoint.y, \"A\", arcRadius, arcRadius, 0, 0, 1, s.x, s.y,].join(\" \");\r\n let p = this.svgGroup.path(d).stroke({ color: \"#FFD700\", width: (this.LineWidth / 2), dasharray: \"1,1\" }).fill(\"none\");\r\n this.svgPaintLineShapes.push(p);\r\n }\r\n }\r\n }\r\n lastPoint = line.End.addVector(offset);\r\n }\r\n }\r\n }\r\n\r\n updateDataGrid() {\r\n let me = this;\r\n let table = this.#htmlManager.getDataTable();\r\n let tbody = table.tBodies[0];\r\n let cnt = 0;\r\n let lastAngle = 0.0;\r\n let segmentIndex = 1;\r\n let template = document.getElementById(\"rowTemplate\") as HTMLTemplateElement;\r\n\r\n if (me.isDrawing) {\r\n cnt = me.#Points.length;\r\n } else {\r\n cnt = me.#Points.length - 1;\r\n }\r\n\r\n me.#Segments = new Array();\r\n for (let i = 0; i < cnt; i++) {\r\n let p1 = me.#Points[i];\r\n let p2 = i === me.#Points.length - 1 ? me.#tempPoint : me.#Points[i + 1];\r\n let len = Point.subtractPoint(p1, p2).length / me.ScaleFactor;\r\n let lineAngle = 0 - (180 - GetLineAngle360(p1, p2));\r\n let angle = lineAngle - lastAngle;\r\n if (angle > 180) angle = 0 - (360 - angle);\r\n if (angle < -180) angle = 360 + angle;\r\n lastAngle = lineAngle;\r\n let seg = new Segment(len, angle);\r\n seg.segmentIndex = segmentIndex;\r\n me.#Segments.push(seg);\r\n segmentIndex++;\r\n }\r\n\r\n for (let i = 0; i < me.#Segments.length + 1; i++) {\r\n let seg = me.#Segments[i];\r\n if (seg === undefined) {\r\n seg = new Segment(0, 0);\r\n seg.segmentIndex = 0;\r\n }\r\n let length: HTMLInputElement;\r\n let angle: HTMLInputElement;\r\n let row: HTMLTableRowElement = tbody.rows[i];\r\n if (row === undefined) {\r\n row = tbody.insertRow();\r\n let rowClone = document.importNode(template.content, true);\r\n row.appendChild(rowClone);\r\n length = row.querySelector(\".length\") as HTMLInputElement;\r\n length.addEventListener(\"change\", () => me.dataTableChanged());\r\n angle = row.querySelector(\".angle\") as HTMLInputElement;\r\n angle.addEventListener(\"change\", () => this.dataTableChanged());\r\n\r\n let btn = row.querySelector('.btnremovePoint') as HTMLButtonElement;\r\n btn.onclick = function () {\r\n if (me.ReadOnly) return;\r\n let tr = btn.closest('tr');\r\n let l = tr?.querySelector('.length') as HTMLInputElement;\r\n let a = tr?.querySelector('.angle') as HTMLInputElement;\r\n\r\n delete me.LabelOffsets[a.id];\r\n delete me.LabelOffsets[l.id];\r\n tr?.remove();\r\n me.dataTableChanged();\r\n }\r\n\r\n } else {\r\n length = row.querySelector(\".length\") as HTMLInputElement;\r\n angle = row.querySelector(\".angle\") as HTMLInputElement;\r\n }\r\n\r\n row.id = seg.segmentIndex === 0 ? \"NewRow\" : seg.segmentIndex.toString();\r\n let segmentTD = row.querySelector(\".segmentIdx\") as HTMLTableDataCellElement;\r\n segmentTD.textContent = seg.segmentIndex == 0 ? \"\" : seg.segmentIndex.toString();\r\n\r\n length.id = \"Len\" + (seg.segmentIndex - 1);\r\n length.value = seg.segmentIndex == 0 ? \"\" : InToIn(seg.Length.toString());\r\n\r\n angle.id = \"Angle\" + (seg.segmentIndex - 2);\r\n angle.value = seg.segmentIndex == 0 ? \"\" : round(seg.Angle, 0).toString() + \"°\";\r\n }\r\n\r\n if (tbody.rows.length > this.#Segments.length) {\r\n const emptyRow = tbody.rows[this.#Segments.length];\r\n emptyRow.id = \"NewRow\";\r\n let length = emptyRow.querySelector(\".length\") as HTMLInputElement;\r\n let angle = emptyRow.querySelector(\".angle\") as HTMLInputElement;\r\n }\r\n for (let i = this.#Segments.length + 1; i < tbody.rows.length; i++) {\r\n const element = tbody.rows[i];\r\n element.remove();\r\n }\r\n }\r\n\r\n clearDatagrid() {\r\n let me = this;\r\n let table = this.#htmlManager.getDataTable();\r\n let tbody = table.tBodies[0];\r\n let template = document.getElementById(\"rowTemplate\") as HTMLTemplateElement;\r\n\r\n while (tbody.rows.length) {\r\n tbody.rows[0].remove();\r\n }\r\n let row = tbody.insertRow();\r\n let rowClone = document.importNode(template.content, true);\r\n row.appendChild(rowClone);\r\n let length = row.querySelector(\".length\") as HTMLInputElement;\r\n length.addEventListener(\"change\", () => me.dataTableChanged());\r\n let angle = row.querySelector(\".angle\") as HTMLInputElement;\r\n angle.addEventListener(\"change\", () => this.dataTableChanged());\r\n }\r\n\r\n clearTrim() {\r\n this.#Segments = new Array();\r\n this.#Points = new Array();\r\n this.LabelOffsets = {};\r\n this.#UndoStack.length = 0;\r\n this.#RedoStack.length = 0;\r\n this.#trimOptionsManager.ReversePaintedSide = false; // this.#ReversePaintIndicator = false;\r\n this.svgCircles.forEach((c) => { c.off(); c.remove(); });\r\n this.svgCircles.length = 0;\r\n this.svgLines.forEach((line) => { line.remove(); });\r\n this.svgLines.length = 0;\r\n this.svgPaths.forEach((c) => { c.remove(); });\r\n this.svgPaths.length = 0;\r\n this.svgInsideArc.forEach((c) => { c.remove(); });\r\n this.svgInsideArc.length = 0;\r\n this.svgPaintLineShapes.forEach((c) => { c.remove(); });\r\n this.svgPaintLineShapes.length = 0;\r\n this.svgPaintLineShapes.forEach((c) => { c.remove(); });\r\n this.svgPaintLineShapes.length = 0;\r\n\r\n for (let key in this.svgLabels) {\r\n let label = this.svgLabels[key];\r\n label.off();\r\n label.remove();\r\n delete this.svgLabels[key];\r\n }\r\n this.isDrawing = false;\r\n this.clearDatagrid();\r\n }\r\n\r\n newTrim(qbItem) {\r\n let itemObject\r\n this.clearTrim();\r\n if (isString(qbItem)) {\r\n itemObject = JSON.parse(qbItem);\r\n } else {\r\n itemObject = qbItem;\r\n }\r\n\r\n let o = { name: qbItem.description, colorId: qbItem.colorId, coilId: qbItem.coilId, length: qbItem.length, trimId: qbItem.trimId };\r\n this.#trimOptionsManager.loadCustomTrimOptions(o);\r\n }\r\n\r\n changeTrimItem(trimJson) {\r\n let itemObject\r\n this.clearTrim();\r\n if (isString(trimJson)) {\r\n itemObject = JSON.parse(trimJson);\r\n } else {\r\n itemObject = trimJson;\r\n }\r\n\r\n for (let i = 0; i < itemObject.Segments.length; i++) {\r\n const segment = itemObject.Segments[i];\r\n this.#Segments.push(new Segment(segment.Length, segment.Angle));\r\n }\r\n\r\n for (let key in itemObject.LabelOffsets) {\r\n if (itemObject.LabelOffsets.hasOwnProperty(key)) {\r\n let offset = itemObject.LabelOffsets[key]; //as string;\r\n\r\n if (isString(offset)) {\r\n if (offset.includes(\",\")) {\r\n let values = offset.split(\",\");\r\n this.LabelOffsets[key] = new Vector(+values[0], +values[1]);\r\n }\r\n } else {\r\n this.LabelOffsets[key] = new Vector(offset.x, offset.y);\r\n }\r\n }\r\n }\r\n\r\n this.#trimOptionsManager.loadCustomTrimOptions(itemObject);\r\n return this.getJson();\r\n }\r\n\r\n loadCustomTrim(trimJsonData) {\r\n let trimObject;\r\n this.clearTrim();\r\n if (isString(trimJsonData)) {\r\n trimObject = JSON.parse(trimJsonData);\r\n } else {\r\n trimObject = trimJsonData\r\n }\r\n\r\n for (let i = 0; i < trimObject.Segments.length; i++) {\r\n const segment = trimObject.Segments[i];\r\n this.#Segments.push(new Segment(segment.Length, segment.Angle));\r\n }\r\n\r\n for (let key in trimObject.LabelOffsets) {\r\n if (trimObject.LabelOffsets.hasOwnProperty(key)) {\r\n let offset = trimObject.LabelOffsets[key]; //as string;\r\n\r\n if (isString(offset)) {\r\n if (offset.includes(\",\")) {\r\n let values = offset.split(\",\");\r\n this.LabelOffsets[key] = new Vector(+values[0], +values[1]);\r\n }\r\n } else {\r\n this.LabelOffsets[key] = new Vector(offset.x, offset.y);\r\n }\r\n }\r\n }\r\n\r\n this.#trimOptionsManager.loadCustomTrimOptions(trimObject);\r\n\r\n this.loadSegments();\r\n this.addUndoPoint();\r\n // Had occasional error when calling zoomToFit without waiting.\r\n setTimeout(() => {\r\n this.zoomToFit();\r\n }, 100);\r\n }\r\n\r\n calculatePrice() {\r\n this.#trimOptionsManager.calculatePrice();\r\n }\r\n\r\n\r\n #zoomToFitCallCount = 0;\r\n zoomToFit() {\r\n let me = this;\r\n let edgeOffset = 100.0;\r\n let dhw = window.getComputedStyle(me.#drawingDiv);\r\n let i = 1;\r\n if (dhw.width.includes('calc')) {\r\n setTimeout(() => {\r\n if (me.#zoomToFitCallCount == 100) return;\r\n me.zoomToFit();\r\n me.#zoomToFitCallCount++;\r\n }, 10);\r\n return;\r\n }\r\n\r\n let targetWidth = parseInt((dhw.width.replace('px', ''))) - (edgeOffset * 1);\r\n let targetHeight = parseInt((dhw.height.replace('px', ''))) - (edgeOffset * 1);\r\n let viewBox = this.svgGroup.bbox();\r\n let newScale = Math.min(targetWidth / viewBox.width, targetHeight / viewBox.height);\r\n this.panZoomInstance.zoom(newScale);\r\n\r\n let zoom = this.panZoomInstance.getZoom();\r\n targetWidth = (+dhw.width.replace('px', ''));\r\n targetHeight = (+dhw.height.replace('px', ''));\r\n\r\n let offsetX = (targetWidth - (viewBox.width + viewBox.x * 2) * zoom) * 0.5;\r\n let offsetY = (targetHeight - (viewBox.height + viewBox.y * 2) * zoom) * 0.5;\r\n\r\n this.panZoomInstance.pan({ x: offsetX, y: offsetY });\r\n this.isPanning = false; // Need this as before pan event fires and sets isPanning to true.\r\n\r\n me.#zoomToFitCallCount = 0;\r\n\r\n }\r\n\r\n getDescription() {\r\n return this.#trimOptionsManager.getDescription();\r\n }\r\n\r\n getJson() {\r\n let labelOffsetStrings: { [key: string]: string } = {};\r\n for (let key in this.LabelOffsets) {\r\n let value = this.LabelOffsets[key];\r\n let xy = value.x.toString() + \",\" + value.y.toString();\r\n labelOffsetStrings[key] = xy;\r\n }\r\n\r\n let name = this.#trimOptionsManager.Name;\r\n let coilId = +this.#trimOptionsManager.SelectedCoil;\r\n let colorId = Number(this.#trimOptionsManager.SelectedColor);\r\n let coilName = this.#trimOptionsManager.CoilName;\r\n let colorName = this.#trimOptionsManager.ColorName;\r\n let includeLength = this.#trimOptionsManager.DescriptionIncludeLength;\r\n let includeCoil = this.#trimOptionsManager.DescriptionIncludeCoil;\r\n let includeColor = this.#trimOptionsManager.DescriptionIncludeColor;\r\n\r\n if (this.#Segments.length > 0) {\r\n let o = {\r\n Name: name, CoilId: coilId, ColorId: colorId, CoilName: coilName, ColorName: colorName, Length: this.#trimOptionsManager.Length,\r\n DescriptionIncludeLength: includeLength, DescriptionIncludeCoil: includeCoil, DescriptionIncludeColor: includeColor,\r\n Segments: this.#Segments, LabelOffsets: labelOffsetStrings, ReversePaintedSide: this.#trimOptionsManager.ReversePaintedSide // this.#ReversePaintIndicator\r\n };\r\n let strJson = JSON.stringify(o);\r\n return strJson;\r\n }\r\n else {\r\n return null;\r\n }\r\n }\r\n\r\n dataTableChanged() {\r\n let table = this.#htmlManager.getDataTable();\r\n let tbody = table.tBodies[0];\r\n\r\n this.#Segments = new Array();\r\n\r\n for (let i = 0; i < tbody.rows.length; i++) {\r\n const tr = tbody.rows[i];\r\n let lengthInput = tr.querySelector(\".length\") as HTMLInputElement;\r\n let angleInput = tr.querySelector(\".angle\") as HTMLInputElement;\r\n\r\n let length = InToInDbl(lengthInput.value);\r\n let angle = this.getAngleFromString(angleInput.value);\r\n\r\n if (!((isNullOrWhitespace(lengthInput.value) || length == 0) && isNullOrWhitespace(angleInput.value))) {\r\n let nseg = new Segment(length, angle);\r\n this.#Segments.push(nseg);\r\n }\r\n\r\n if (!isNullOrWhitespace(lengthInput.value)) {\r\n lengthInput.value = InToIn(length.toString());\r\n angleInput.value = round(angle, 0).toString() + \"°\";\r\n }\r\n\r\n // If the length is zero it zeros the remaining length in the list when updating the grid.\r\n if (length === 0) {\r\n this.#updateDataGrid = false;\r\n }\r\n }\r\n\r\n this.loadSegments();\r\n this.#updateDataGrid = true;\r\n this.me.addUndoPoint();\r\n }\r\n\r\n getAngleFromString(text: string) {\r\n let Angle: number = 0;\r\n text = text.toLowerCase();\r\n if (text.endsWith(\"p\") || text.endsWith(\"*\")) {\r\n let pitch: number = +text\r\n .replace(\"p\", \"\")\r\n .replace(\"-\", \"\")\r\n .replace(\"*\", \"\");\r\n let degrees: number = Math.atan(pitch / 12.0) * (180 / Math.PI);\r\n Angle = text.startsWith(\"-\") ? 0 - degrees : degrees;\r\n } else if (text.endsWith(\"p++\") || text.endsWith(\"*++\")) {\r\n let pitch: number = +text\r\n .replace(\"p\", \"\")\r\n .replace(\"++\", \"\")\r\n .replace(\"*\", \"\");\r\n let degrees: number = 180 - Math.atan(pitch / 12.0) * (180 / Math.PI);\r\n Angle = text.startsWith(\"-\") ? 0 - degrees : degrees;\r\n } else if (text.endsWith(\"p-\") || text.endsWith(\"*-\")) {\r\n let pitch: number = +text\r\n .replace(\"p\", \"\")\r\n .replace(\"-\", \"\")\r\n .replace(\"*\", \"\");\r\n let degrees: number = 90 - Math.atan(pitch / 12.0) * (180 / Math.PI);\r\n Angle = text.startsWith(\"-\") ? 0 - degrees : degrees;\r\n } else if (text.endsWith(\"p+\") || text.endsWith(\"*+\")) {\r\n let pitch: number = +text\r\n .replace(\"p\", \"\")\r\n .replace(\"+\", \"\")\r\n .replace(\"*\", \"\");\r\n let degrees: number = Math.atan(pitch / 12.0) * (180 / Math.PI) + 90;\r\n Angle = text.startsWith(\"-\") ? 0 - degrees : degrees;\r\n } else {\r\n Angle = +text.replace(\"°\", \"\");\r\n if (isNaN(Angle)) {\r\n Angle = 0;\r\n }\r\n }\r\n\r\n if (Angle < -179.9) Angle = -179.9;\r\n if (Angle > 179.9) Angle = 179.9;\r\n\r\n return Angle;\r\n }\r\n\r\n loadSegments() {\r\n this.svgCircles.forEach((c) => {\r\n c.off();\r\n c.remove();\r\n });\r\n this.svgCircles.length = 0;\r\n //let points: Array = new Array();\r\n // Set isDrawing to false when loading existing design.\r\n // this.isDrawing = false;\r\n if (this.#Points.length > 0) {\r\n let p = this.#Points[0].clone();\r\n this.#Points.length = 0;\r\n this.#Points.push(p);\r\n } else {\r\n this.#Points.push(new Point(50, 50));\r\n }\r\n\r\n let lastAngle: number = 0;\r\n for (let i = 0; i < this.#Segments.length; i++) {\r\n let angle: number = lastAngle + this.#Segments[i].Angle;\r\n let lastPoint: Point = this.#Points[this.#Points.length - 1];\r\n\r\n let d: Vector = Vector.directionFromAngle(angle);\r\n let len: number = this.#Segments[i].Length;\r\n let s: number = len * 96; // 96 is the scale factor.\r\n let v = Vector.multiplyVectorScalar(d, s);\r\n let newP = new Point(lastPoint.x, lastPoint.y);\r\n\r\n let point: Point = newP.addVector(v);\r\n\r\n this.#Points.push(point);\r\n lastAngle = angle;\r\n }\r\n this.updateDrawingObjects();\r\n }\r\n\r\n\r\n static CreateThumbNailSVG(trimJsonData) {\r\n let trimObject;\r\n let segments = new Array();\r\n let points = new Array();\r\n let lastAngle: number = 0;\r\n let size = 100;\r\n\r\n if (typeof trimJsonData === \"string\") {\r\n trimObject = JSON.parse(trimJsonData);\r\n } else {\r\n trimJsonData = trimObject;\r\n }\r\n for (let i = 0; i < trimObject.Segments.length; i++) {\r\n const segment = trimObject.Segments[i];\r\n segments.push(new Segment(segment.Length, segment.Angle));\r\n }\r\n\r\n points.push(new Point(1, 1));\r\n // let lastAngle: number = 0;\r\n for (let i = 0; i < segments.length; i++) {\r\n let angle: number = lastAngle + segments[i].Angle;\r\n let lastPoint: Point = points[points.length - 1];\r\n let d: Vector = Vector.directionFromAngle(angle);\r\n let len: number = segments[i].Length;\r\n let s: number = len * 96; // 96 is the scale factor.\r\n let v = Vector.multiplyVectorScalar(d, s);\r\n let newP = new Point(lastPoint.x, lastPoint.y);\r\n let point: Point = newP.addVector(v);\r\n points.push(point);\r\n lastAngle = angle;\r\n }\r\n\r\n let arcP1: Point;\r\n let arcP2: Point;\r\n let arcP2Last: Point = points[0];\r\n let linePoints = new Array();\r\n let bendRadius = 4.5\r\n let tempPoint = points[points.length - 1];\r\n\r\n let svg = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\r\n // svg.setAttributeNS(null, 'width', '100%');\r\n // svg.setAttributeNS(null, 'height', '100%');\r\n\r\n let max = points[0].clone(), min = points[0].clone();\r\n points.forEach((point) => {\r\n min.y = Math.min(min.y, (point.y));\r\n max.x = Math.max(max.x, point.x);\r\n max.y = Math.max(max.y, point.y);\r\n min.x = Math.min(min.x, point.x);\r\n });\r\n let viewBoxX = max.x + Math.abs(min.x);\r\n let viewBoxY = max.y + Math.abs(min.y);\r\n let v = Point.subtractPoint(max, min);\r\n // let stroke = Math.ceil((v.length - 300) / 100) * 1.7;\r\n let stroke = Math.max(viewBoxX, viewBoxY) / 45; // 180 / 4\r\n stroke = Math.max(stroke, 4);\r\n svg.setAttribute(\"viewBox\", `${0} ${0} ${viewBoxX + 30} ${viewBoxY + 20}`);\r\n svg.classList.add('nctdThumbnail');\r\n let g = document.createElementNS('http://www.w3.org/2000/svg', 'g');\r\n let tx = Math.abs(min.x) + 10;\r\n let ty = Math.abs(min.y) + 10\r\n let gs = `translate(${tx}px, ${ty}px)`;\r\n g.style.transform = gs;\r\n svg.appendChild(g);\r\n\r\n tempPoint = new Point(0, 0);\r\n if (points.length > 0) {\r\n for (let i = 1; i < points.length; i++) {\r\n let p1: Point;\r\n\r\n if (i == points.length - 1) {\r\n p1 = tempPoint\r\n } else {\r\n p1 = GetOffsetPoint(points[i + 1], points[i], -30);\r\n }\r\n\r\n let p2 = GetOffsetPoint(arcP2Last, points[i], -30);\r\n let p3 = points[i];\r\n let angle = GetAngleDegrees(p1, p3, p2);\r\n if (angle == 0) {\r\n angle = 0.01;\r\n }\r\n [arcP1, arcP2] = GetArcPoints(arcP2Last, points[i], i == points.length - 1 ? tempPoint : points[i + 1], angle, bendRadius);\r\n if (i == points.length - 1) {\r\n arcP1 = points[i];\r\n }\r\n let line = createLine(arcP2Last, arcP1, stroke);\r\n g.appendChild(line);\r\n linePoints.push(new LinePoint(arcP2Last, arcP1));\r\n arcP2Last = arcP2.clone();\r\n }\r\n }\r\n\r\n if (points.length > 1) {\r\n for (let i = 1; i < points.length - 1; i++) {\r\n //draw the angle\r\n let arcSize = 30; // this.ZoomScale;\r\n arcSize = Math.max(bendRadius, arcSize);\r\n let lastLine = linePoints[i - 1];\r\n let p1 = GetOffsetPoint(points[i + 1], points[i], 0 - arcSize);\r\n let p2 = GetOffsetPoint(lastLine.Start, points[i], 0 - arcSize);\r\n let p3 = points[i];\r\n let angle = GetAngleDegrees(p1, p3, p2);\r\n let arcP1: Point, arcP2: Point;\r\n if (angle == 0) angle = 0.01;\r\n [arcP1, arcP2] = GetArcPoints(lastLine.Start, points[i], points[i + 1], angle, bendRadius);\r\n arcP1 = lastLine.End;\r\n\r\n if (angle > 180) angle -= 360;\r\n let end: Point = GetOffsetPoint(points[i + 1], arcP2, 0 - p2.subtract(arcP1).length);\r\n let tan = Math.tan(90 - Math.abs(angle));\r\n if (Math.abs(angle) < 90) {\r\n arcSize = arcSize * Math.tan((90 - Math.abs(angle)) / (180 / Math.PI)) + arcSize;\r\n }\r\n let path: SVGPathElement;\r\n if (!isNaN(arcP2.x)) {\r\n if (angle <= 0) {\r\n path = drawArc(arcP1, arcP2, bendRadius, stroke);\r\n } else {\r\n path = drawArc(arcP2, arcP1, bendRadius, stroke);\r\n }\r\n g.appendChild(path);\r\n }\r\n }\r\n }\r\n\r\n return svg\r\n\r\n function createLine(p1: Point, p2: Point, strokeWidth: number = 6) {\r\n let newLine = document.createElementNS('http://www.w3.org/2000/svg', 'line');\r\n // // newLine.setAttribute('id', 'line2');\r\n newLine.setAttribute('x1', p1.x.toString());\r\n newLine.setAttribute('y1', p1.y.toString());\r\n newLine.setAttribute('x2', p2.x.toString());\r\n newLine.setAttribute('y2', p2.y.toString());\r\n newLine.setAttribute(\"stroke\", \"black\");\r\n newLine.setAttribute(\"stroke-width\", strokeWidth.toString());\r\n return newLine\r\n }\r\n\r\n function drawArc(start: Point, end: Point, radius: number, strokeWidth: number = 6) {\r\n var d = [\"M\", start.x, start.y, \"A\", radius, radius, 0, 0, 1, end.x, end.y,].join(\" \");\r\n\r\n let path = document.createElementNS(\"http://www.w3.org/2000/svg\", 'path');\r\n path.setAttribute('d', d);\r\n path.setAttribute('fill', 'none');\r\n path.setAttribute(\"stroke\", \"black\");\r\n path.setAttribute(\"stroke-width\", strokeWidth.toString());\r\n return path;\r\n }\r\n }\r\n\r\n getMousePosition(e: any) {\r\n let pan = this.panZoomInstance.getPan();\r\n\r\n let x = 0;\r\n let y = 0;\r\n\r\n if (\r\n e.type == \"touchstart\" ||\r\n e.type == \"touchmove\" ||\r\n e.type == \"touchend\" ||\r\n e.type == \"touchcancel\"\r\n ) {\r\n var evt = typeof e.originalEvent === \"undefined\" ? e : e.originalEvent;\r\n var touch = evt.touches[0] || evt.changedTouches[0];\r\n x = touch.clientX;\r\n y = touch.clientY;\r\n } else if (\r\n e.type == \"mousedown\" ||\r\n e.type == \"mouseup\" ||\r\n e.type == \"mousemove\" ||\r\n e.type == \"mouseover\" ||\r\n e.type == \"mouseout\" ||\r\n e.type == \"mouseenter\" ||\r\n e.type == \"mouseleave\"\r\n ) {\r\n x = e.clientX;\r\n y = e.clientY;\r\n }\r\n\r\n this.pt.x = x - pan.x;\r\n this.pt.y = y - pan.y;\r\n\r\n let coord = this.pt.matrixTransform(\r\n this.svgElement.getScreenCTM().inverse()\r\n );\r\n let p = this.panZoomInstance.getZoom();\r\n coord.x = coord.x / p;\r\n coord.y = coord.y / p;\r\n return coord;\r\n }\r\n\r\n makeDraggable(element: HTMLElement) {\r\n let me = this;\r\n let svg: any = element;\r\n\r\n svg.addEventListener(\"mousedown\", startDrag);\r\n svg.addEventListener(\"mousemove\", drag);\r\n svg.addEventListener(\"mouseup\", endDrag);\r\n svg.addEventListener(\"mouseleave\", endDrag);\r\n svg.addEventListener(\"touchstart\", startDrag);\r\n svg.addEventListener(\"touchmove\", drag);\r\n svg.addEventListener(\"touchend\", endDrag);\r\n svg.addEventListener(\"touchleave\", endDrag);\r\n svg.addEventListener(\"touchcancel\", endDrag);\r\n\r\n var selectedElement: any,\r\n offset: any,\r\n transform: any,\r\n bbox: any,\r\n minX: any,\r\n maxX: any,\r\n minY: any,\r\n maxY: any,\r\n confined: any;\r\n\r\n var boundaryX1 = 10.5;\r\n var boundaryX2 = 30;\r\n var boundaryY1 = 2.2;\r\n var boundaryY2 = 19.2;\r\n let idx: number = 0; // idx of object for now its a circle.\r\n let tag: string = \"\";\r\n let oldPoint = new Point(0, 0);\r\n let mouseOffset: Vector = new Vector(0, 0);\r\n function startDrag(evt: any) {\r\n if (me.isDrawing || me.ReadOnly) return;\r\n\r\n let elementTagName = evt.target.localName;\r\n if (!(evt.target.classList.contains(\"draggable\") || elementTagName === \"circle\" || elementTagName === \"text\")) return;\r\n\r\n if (\r\n evt.target.classList.contains(\"draggable\") || evt.target.localName === \"circle\" ||\r\n evt.target.localName === \"text\"\r\n // need the circle when on touch.\r\n ) {\r\n idx = evt.target.dataset.idx;\r\n tag = evt.target.dataset.tag;\r\n me.isDragging = true;\r\n me.panZoomInstance.disablePan();\r\n selectedElement = evt.target;\r\n if (selectedElement.nodeName === \"text\") {\r\n let label = me.svgLabels[tag];\r\n oldPoint = new Point(label.x(), label.y());\r\n } else {\r\n // Must be a circle.\r\n // If there is only one circle(Point). I need to set idx to zero. Not sure...\r\n if (me.#Points.length == 1) {\r\n idx = 0;\r\n }\r\n oldPoint = me.#Points[idx];\r\n }\r\n offset = me.getMousePosition(evt);\r\n let offsetP = Point.newPoint(offset);\r\n mouseOffset = offsetP.subtract(oldPoint);\r\n }\r\n }\r\n\r\n function drag(evt: any) {\r\n if (!me.isDragging)\r\n return;\r\n\r\n if (selectedElement) {\r\n evt.preventDefault();\r\n var coord = me.getMousePosition(evt);\r\n\r\n let newP = new Point(coord.x, coord.y);\r\n switch (selectedElement.nodeName) {\r\n case \"text\":\r\n let label = me.svgLabels[tag];\r\n let np = newP.subtractVector(mouseOffset);\r\n label.move(np.x, np.y);\r\n break;\r\n case \"circle\":\r\n let MovePoint: number = +idx;\r\n let oldP = me.#Points[MovePoint];\r\n if (MovePoint == 0) {\r\n me.#Points[MovePoint] = newP;\r\n } else {\r\n let moveDistance: Vector = Point.subtractPoint(newP, oldP);\r\n if (moveDistance.length >= 1) {\r\n for (let i = MovePoint; i < me.#Points.length; i++) {\r\n let np = me.#Points[i].addVector(moveDistance);\r\n me.#Points[i] = np;\r\n }\r\n }\r\n }\r\n me.drawTempMovingObject(idx);\r\n me.updateDrawingObjects();\r\n\r\n let activeInput = document.activeElement as HTMLInputElement;\r\n if (activeInput.tagName.toLowerCase() === 'input') {\r\n activeInput.blur();\r\n }\r\n MovePoint = MovePoint === 0 ? 0 : MovePoint - 1;\r\n let inputTag = 'Len' + (MovePoint);\r\n let input = document.getElementById(inputTag) as HTMLInputElement;\r\n input.classList.add('nctd-highlightInput');\r\n input.scrollIntoView();\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n }\r\n\r\n function endDrag(evt: any) {\r\n if (selectedElement !== undefined) {\r\n if (me.isDragging) { // Need to check if we are still dragging in case user pressed escape to quit dragging.\r\n if (selectedElement.nodeName === \"text\") {\r\n let label = me.svgLabels[tag];\r\n let newLabelPoint = new Point(label.x(), label.y());\r\n\r\n let moveDistance = Point.subtractPoint(newLabelPoint, oldPoint);\r\n let oldLabelOffset = new Vector(0, 0);\r\n if (tag in me.LabelOffsets) {\r\n oldLabelOffset = me.LabelOffsets[tag];\r\n }\r\n let newLabelOffset = Vector.addVector(moveDistance, oldLabelOffset);\r\n me.LabelOffsets[tag] = newLabelOffset;\r\n }\r\n if (selectedElement) {\r\n me.addUndoPoint();\r\n }\r\n }\r\n }\r\n selectedElement = false;\r\n me.#tempMovingLines.forEach((shape) => shape.remove());\r\n me.#tempMovingLines.length = 0; //clear array\r\n tag = \"\";\r\n idx = 0;\r\n // dragging = false; // Need to set this to false on svgMouseUp\r\n me.panZoomInstance.enablePan();\r\n }\r\n }\r\n\r\n #tempMovingLines = new Array();\r\n drawTempMovingObject(MovePoint: number) {\r\n this.#tempMovingLines.forEach((shape) => shape.remove());\r\n this.#tempMovingLines.length = 0; //clear array\r\n\r\n if (this.#settings.Snap && this.#Points.length > 1) {\r\n let priorPoints = new Array();\r\n\r\n if (MovePoint == 0) {\r\n for (let i = 1; i < this.#Points.length; i++) {\r\n priorPoints.push(this.#Points[i].clone());\r\n }\r\n }\r\n else {\r\n for (let i = 0; i < MovePoint; i++) {\r\n priorPoints.push(this.#Points[i].clone());\r\n }\r\n }\r\n\r\n let closestX: number = priorPoints.reduce((x, y) =>\r\n Math.abs(x.x - this.#MousePoint.x) < Math.abs(y.x - this.#MousePoint.x)\r\n ? x\r\n : y\r\n ).x;\r\n let closestY: number = priorPoints.reduce((x, y) =>\r\n Math.abs(x.y - this.#MousePoint.y) < Math.abs(y.y - this.#MousePoint.y)\r\n ? x\r\n : y\r\n ).y;\r\n\r\n if (Math.abs(closestX - this.#MousePoint.x) <= this.#settings.SnapPrecision / this.ZoomScale) {\r\n //snap to closest horizontal point\r\n this.#MousePoint.x = closestX;\r\n this.#tempPoint.x = closestX;\r\n let line = this.svgGroup\r\n .line(this.#tempPoint.x, -10000, this.#tempPoint.x, 10000)\r\n .stroke({ color: \"#2b7535\", width: this.LineWidth / 3 });\r\n line.back();\r\n this.#tempMovingLines.push(line);\r\n }\r\n if (Math.abs(closestY - this.#MousePoint.y) <= this.#settings.SnapPrecision / this.ZoomScale) {\r\n //snap to closest horizontal point\r\n this.#MousePoint.y = closestY;\r\n this.#tempPoint.y = closestY;\r\n let line = this.svgGroup\r\n .line(-10000, this.#tempPoint.y, 10000, this.#tempPoint.y)\r\n .stroke({ color: \"#2b7535\", width: this.LineWidth / 3 });\r\n line.back();\r\n this.#tempMovingLines.push(line);\r\n }\r\n let snapDistance: Vector = this.#tempPoint.subtract(\r\n this.#Points[MovePoint]\r\n );\r\n if (snapDistance.length != 0) {\r\n if (MovePoint == 0) {\r\n this.#Points[0] = this.#Points[0].addVector(snapDistance);\r\n }\r\n else {\r\n for (let i = MovePoint; i < this.#Points.length; i++) {\r\n this.#Points[i] = this.#Points[i].addVector(snapDistance);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n\r\n\r\n #RedoStack = new Array();\r\n #UndoStack = new Array();\r\n\r\n addUndoPoint() {\r\n this.#RedoStack.length = 0;\r\n let undoPoint = new UndoPoint(this.#Segments, this.LabelOffsets, this.#Points, this.#trimOptionsManager.ReversePaintedSide); // this.#ReversePaintIndicator);\r\n if (this.isDrawing && undoPoint.Segments.length > 0) {\r\n undoPoint.Segments.splice(-1, 1);\r\n }\r\n this.#UndoStack.push(undoPoint);\r\n }\r\n\r\n undo() {\r\n if (this.#UndoStack.length > 1) {\r\n let undoPoint = this.#UndoStack.pop();\r\n if (undoPoint !== undefined) {\r\n this.#RedoStack.push(undoPoint);\r\n }\r\n\r\n if (this.#UndoStack.length > 0) {\r\n this.restoreUndoPoint(this.#UndoStack[this.#UndoStack.length - 1]);\r\n }\r\n }\r\n this.updateDrawingObjects();\r\n }\r\n\r\n redo() {\r\n if (this.#RedoStack.length > 0) {\r\n let undoPoint = this.#RedoStack.pop();\r\n if (undoPoint !== undefined) {\r\n this.#UndoStack.push(undoPoint);\r\n this.restoreUndoPoint(undoPoint);\r\n }\r\n }\r\n this.updateDrawingObjects();\r\n }\r\n\r\n restoreUndoPoint(undoPoint: UndoPoint) {\r\n if (undoPoint != null) {\r\n this.#Segments = undoPoint.Segments.slice(0);\r\n this.LabelOffsets = undoPoint.LabelOffsets;\r\n this.#trimOptionsManager.ReversePaintedSide = undoPoint.ReversePaintIndicator;\r\n\r\n if (this.#Segments.length > 0) {\r\n // SegmentUpdated(Segments[0]);\r\n }\r\n else {\r\n // this.#Points.length = 0;\r\n // if (undoPoint.Points.Count > 0){\r\n // this.#Points = undoPoint.Points[0] };\r\n // }\r\n\r\n }\r\n this.loadSegments();\r\n }\r\n }\r\n\r\n startDrawing() {\r\n if (this.ReadOnly) return;\r\n this.isDrawing = true;\r\n let startStopDrawingButton = document.getElementById(\"ncStartStopDrawing\") as HTMLButtonElement;\r\n startStopDrawingButton.innerText = \"Stop Drawing\";\r\n this.updateDrawingObjects();\r\n }\r\n stopDrawing() {\r\n this.isDrawing = false;\r\n let startStopDrawingButton = document.getElementById(\"ncStartStopDrawing\") as HTMLButtonElement;\r\n startStopDrawingButton.innerText = \"Start Drawing\";\r\n this.updateDrawingObjects();\r\n }\r\n\r\n initButtons() {\r\n let me = this;;\r\n let startStopDrawingButton = document.getElementById(\"ncStartStopDrawing\") as HTMLButtonElement;\r\n startStopDrawingButton.innerText = me.isDrawing ? \"Stop Drawing\" : \"Start Drawing\";\r\n startStopDrawingButton?.addEventListener(\"click\", function (e) {\r\n me.isDrawing = !me.isDrawing;\r\n startStopDrawingButton.innerText = me.isDrawing ? \"Stop Drawing\" : \"Start Drawing\";\r\n me.updateDrawingObjects();\r\n });\r\n\r\n let undoButton = document.getElementById(\"ncUndo\") as HTMLButtonElement;\r\n undoButton?.addEventListener(\"click\", function (e) {\r\n me.undo();\r\n });\r\n let redoButton = document.getElementById(\"ncRedo\") as HTMLButtonElement;\r\n redoButton?.addEventListener(\"click\", function (e) {\r\n me.redo();\r\n });\r\n let zoomToFitButton = document.getElementById(\"ncZoomToFit\") as HTMLButtonElement;\r\n zoomToFitButton?.addEventListener(\"click\", function (e) {\r\n me.zoomToFit();\r\n });\r\n }\r\n\r\n static GetArcMidPoint(arc: Path): Point {\r\n let length = arc.length() / 2;\r\n let midPoint = arc.pointAt(length);\r\n return Point.newPoint(midPoint);\r\n }\r\n}\r\nclass LinePoint {\r\n constructor(public Start: Point, public End: Point) {\r\n this.Start = Start;\r\n this.End = End;\r\n }\r\n\r\n midwayPoint(): Point {\r\n let x = (this.Start.x + this.End.x) / 2;\r\n let y = (this.Start.y + this.End.y) / 2;\r\n return new Point(x, y);\r\n }\r\n}\r\n","\r\nimport { TrimDesigner } from \"./TrimDesigner\"\r\n\r\nexport default { TrimDesigner }\r\n\r\n\r\nexport function addTo(el: HTMLElement) {\r\n let td = new TrimDesigner();\r\n td.initTrimDesigner(el);\r\n return td;\r\n}\r\n\r\n\r\nexport function getThumbNailSVG(json) {\r\n let t = TrimDesigner.CreateThumbNailSVG(json);\r\n return t;\r\n}\r\n\r\n\r\nwindow.onload = function () {\r\n // let el = document.getElementById(\"drawing\");\r\n // if (el != null) {\r\n // //let myT = new TrimDesigner(el);\r\n // console.log();\r\n // let myTrim = new TrimDesigner(el); \r\n //console.log(new TrimDesigner(el));\r\n //}\r\n};\r\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tif(__webpack_module_cache__[moduleId]) {\n\t\treturn __webpack_module_cache__[moduleId].exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// module exports must be returned from runtime so entry inlining is disabled\n// startup\n// Load entry module and return exports\nreturn __webpack_require__(310);\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => Object.prototype.hasOwnProperty.call(obj, prop)","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};"],"sourceRoot":""}