{"version":3,"sources":["webpack:///./node_modules/tslib/tslib.es6.js","webpack:///./node_modules/@emotion/is-prop-valid/node_modules/@emotion/memoize/dist/memoize.browser.esm.js","webpack:///./node_modules/@emotion/is-prop-valid/dist/is-prop-valid.browser.esm.js","webpack:///./node_modules/framesync/dist/framesync.es.js","webpack:///./node_modules/style-value-types/dist/style-value-types.es.js","webpack:///./node_modules/@popmotion/easing/dist/easing.es.js","webpack:///./node_modules/@popmotion/popcorn/dist/popcorn.es.js","webpack:///./node_modules/stylefire/dist/stylefire.es.js","webpack:///./node_modules/popmotion/dist/popmotion.es.js","webpack:///./node_modules/framer-motion/dist/framer-motion.es.js"],"names":["_extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__extends","__","this","constructor","prototype","create","_assign","assign","t","s","i","n","arguments","length","call","apply","__rest","e","indexOf","getOwnPropertySymbols","propertyIsEnumerable","__spreadArrays","il","r","k","a","j","jl","reactPropsRegex","index","fn","cache","arg","undefined","prop","test","charCodeAt","prevTime","onNextFrame","window","requestAnimationFrame","callback","timestamp","Date","now","timeToCall","Math","max","setTimeout","defaultElapsed","useDefaultElapsed","willRunNextFrame","delta","stepsOrder","setWillRunNextFrame","willRun","steps","reduce","acc","key","setRunNextFrame","processToRun","processToRunNextFrame","numThisFrame","isProcessing","cancelled","toKeepAlive","renderStep","WeakSet","cancel","process","indexOfCallback","add","splice","frame","_a","process_1","has","schedule","keepAlive","immediate","addToCurrentBuffer","buffer","delete","push","sync","step","startLoop","cancelSync","processStep","stepId","processFrame","min","forEach","getFrameData","v","sanitize","Number","toFixed","floatRegex","colorRegex","singleColorRegex","number","parse","parseFloat","transform","alpha","default","createUnitType","unit","endsWith","split","degrees","percent","px","vh","vw","progressPercentage","clampRgbUnit","isRgba","red","isHsla","hue","splitColorValues","terms","values","valuesArray","value","substring","lastIndexOf","getValueFromFunctionString","replace","rgbUnit","round","isColorString","color","colorType","startsWith","rgba","green","blue","_b","alpha$1","rgbaTemplate","hsla","saturation","lightness","hslaTemplate","hex","g","substr","parseInt","COLOR_TOKEN","NUMBER_TOKEN","convertNumbersToZero","complex","isNaN","numValues","foundNumbers","match","foundColors","input","parsed","map","createTransformer","template","token","numColors","numNumbers","output","getAnimatableNone","target","parsedTarget","targetTransformer","reversed","easing","mirrored","createReversedEasing","createMirroredEasing","createExpoIn","power","pow","createBackIn","createAnticipateEasing","backEasing","linear","easeIn","easeOut","easeInOut","circIn","sin","acos","circOut","circInOut","backIn","backOut","backInOut","anticipate","bounceOut","p2","bounceIn","bounceInOut","K_SAMPLE_STEP_SIZE","FLOAT_32_SUPPORTED","Float32Array","a1","a2","c","getSlope","calcBezier","cubicBezier","mX1","mY1","mX2","mY2","sampleValues","getTForX","aX","dist","guessForT","initialSlope","intervalStart","currentSample","K_SPLINE_TABLE_SIZE","aGuessT","currentSlope","newtonRaphsonIterate","aA","aB","currentX","currentT","abs","binarySubdivide","calcSampleValues","_typeof","obj","Symbol","iterator","zeroPoint","x","y","z","isNum","curryRange","func","cv","clamp$1","isPoint","point","isPoint3D","distance1D","distance","xDelta","yDelta","zDelta","sqrt","from","to","toFromDifference","mix","progress","mixLinearColor","fromExpo","toExpo","colorTypes","getColorType","find","type","notAnimatable","color$$1","fromColorType","toColorType","fromColor","toColor","blended","mixFunc","combineFunctions","pipe","transformers","_i","getMixer","origin","mixArray","slice","blendValue","fromThis","mixObject","analyse","numRGB","numHSL","originStats","targetStats","mixNumber","createMixers","ease","customMixer","mixers","mixerFactory","isArray","numMixers","mixer","easingFunction","interpolate","_c","clamp","inputLength","concat","reverse","interpolator","fastInterpolate","lastInputIndex","mixerIndex","foundMixerIndex","progressInRange","slowInterpolate","testElement","identity","springForce","alterDisplacement","constant","displacement","springModifiedDisplacement","velocityPerSecond","velocity","frameDuration","rangeSize","onRead","onRender","uncachedValues","Set","useCache","props","state","changedValues","hasChanged","setValue","hasCSSVariable","currentValue","render","styler","get","forceRead","set","forceRender","CAMEL_CASE_PATTERN","camelToDash","str","toLowerCase","camelCache","Map","dashCache","prefixes","numPrefixes","isBrowser","document","setDashPrefix","prefixed","prefixer","asDashCase","createElement","prefix","noPrefix","prefixedPropertyName","charAt","toUpperCase","style","testPrefix","setServerProperty","axes","transformProps","axesAcc","axesKey","transformPropDictionary","dict","isTransformProp","sortTransformProps","transformOriginProps","isTransformOriginProp","valueTypes","backgroundColor","outlineColor","fill","stroke","borderColor","borderTopColor","borderRightColor","borderBottomColor","borderLeftColor","borderWidth","borderTopWidth","borderRightWidth","borderBottomWidth","borderLeftWidth","borderRadius","radius","borderTopLeftRadius","borderTopRightRadius","borderBottomRightRadius","borderBottomLeftRadius","width","maxWidth","height","maxHeight","size","top","right","bottom","left","padding","paddingTop","paddingRight","paddingBottom","paddingLeft","margin","marginTop","marginRight","marginBottom","marginLeft","rotate","rotateX","rotateY","rotateZ","scale","scaleX","scaleY","scaleZ","skew","skewX","skewY","translateX","translateY","translateZ","perspective","opacity","originX","originY","originZ","zIndex","fillOpacity","strokeOpacity","numOctaves","getValueType","getValueAsType","SCROLL_LEFT","SCROLL_TOP","scrollKeys","blacklist","translateAlias","isCustomTemplate","buildStyleProperty","enableHardwareAcceleration","styles","transformOrigin","transformKeys","isDashCase","allowTransformNone","transformIsDefault","hasTransform","hasTransformOrigin","valueType","valueAsType","transformString","transformHasZ","sort","numTransformKeys","trim","buildTransform","createStyleBuilder","_d","_e","cssStyler","options","element","preparseOutput","defaultValueType","domValue","getComputedStyle","getPropertyValue","buildStyles","numChangedValues","setProperty","camelCaseAttributes","unmeasured","calcOrigin","offset","svgStyleConfig","buildSVGAttrs","dimensions","totalPathLength","cssBuilder","attrs","attrX","attrY","pathLength","pathSpacing","pathOffset","calculateSVGTransformOrigin","createAttrBuilder","svgStyler","getAttribute","buildAttrs","setAttribute","viewport","pageYOffset","pageXOffset","scrollTop","scrollLeft","scrollTo","WeakMap","node","HTMLElement","click","isHTMLElement","SVGElement","isSVGElement","getBBox","getBoundingClientRect","getDimensions","getSVGElementDimensions","tagName","isPath","getTotalLength","createCssStyler","nodeOrSelector","getStyler","querySelector","Observer","observer","_this","middleware","onComplete","isActive","update","updateObserver","complete","error","err","m","createObserver","observerCandidate","Action","start","isComplete","subscription","stop","init","observerProps","api","applyMiddleware","funcs","pipedUpdate","unitTypes","findUnitType","createAction","action","unitType","createColorAction","createComplexAction","createVectorAction","typeTests","testNames","keys","isVectorProp","getVectorKeys","vectorKeys","testVectorProps","some","createVectorTests","testProp","Boolean","isUnitProp","vectorDecay","timeConstant","_f","restDelta","modifyTarget","elapsed","amplitude","idealTarget","frameDelta","exp","isMoving","vectorSpring","stiffness","damping","_g","mass","_h","restSpeed","_j","initialVelocity","position","prevPosition","timeDelta","dampingRatio","angularFreq","envelope","expoDecay","cos","isBelowVelocityThreshold","isBelowDisplacementThreshold","bounceStiffness","bounceDamping","activeAnimation","_complete","prev","current","isSpring","isLessThanMin","isMoreThanMax","isOutOfBounds","onUpdate","currentVelocity","isTravellingAwayFromBounds","startSpring","startAnimation","animation","next","vectorScrubber","reverseEase","seek","duration","flip","loop","yoyo","repeatDelay","_k","_l","flipCount","_m","yoyoCount","_o","loopCount","playhead","currentProgress","_isActive","reverseAnimation","updateTween","startTimer","stopTimer","getElapsed","getProgress","pause","resume","newProgress","clampProgress$1","easings","times","tweenProps","defaultTimings","scrubbers","rangeLength","finalInputIndex","finalScrubberIndex","subs","scrub","listen","events","eventNames","eventName","addEventListener","removeEventListener","defaultPointerPos","clientX","clientY","pageX","pageY","eventToPoint","points","passive","capture","touches","numTouches","thisTouch","timeToDelay","timeout","clearTimeout","MotionValue","transformer","parent","lastUpdated","canTrackVelocity","updateAndNotify","updateSubscribers","notifySubscriber","children","setChild","renderSubscribers","postRender","scheduleVelocityCheck","subscriber","velocityCheck","child","addChild","config","removeChild","subscribeTo","subscriptions","updateSubscriber","onChange","onRenderRequest","attach","passiveEffect","getVelocity","Promise","resolve","stopAnimation","then","clearAnimation","isAnimating","destroy","clear","motionValue","opts","useConstant","ref","resolver","isMotionValue","updateStyler","MotionValuesMap","hasMounted","unsubscribers","bindValueToOutput","defaultValue","unsubscribeOnRender","unsubscribeOnChange","setOnUpdate","setTransformTemplate","transformTemplate","updateTransformTemplate","getTransformTemplate","mount","unmount","_value","unsubscribe","specialMotionValueProps","useMotionValues","motionValues","session","syncRenderSession","innerRef","isStatic","Element","domStyler","Mount","resolveCurrent","resolvedValues","styleProp","motionValueStyles","isKeyframesTarget","resolveFinalValueInKeyframes","dimensionTypes","testValueType","getDimensionValueType","underDampedSpring","overDampedSpring","linearTween","defaultTransitions","definition","isEasingArray","secondsToMilliseconds","seconds","transitions","tween","spring","keyframes","inertia","just","transitionOptionParser","transitionDefinition","delay","when","delayChildren","staggerChildren","staggerDirection","transition","valueKey","transitionFactory","valueTransitionDefinition","isOriginAnimatable","isTargetAnimatable","actionFactory","preprocessOptions","delay$1","animationFactory","valueDelay","animate","ValueAnimationControls","readValueFromSource","makeTargetAnimatable","variants","baseTarget","overrides","resolvedOverrides","activeOverrides","hasValue","setProps","setVariants","setDefaultTransition","defaultTransition","setValues","priority","resolveVariant","transitionEnd","transformValues","targetValue","checkForNewValues","newValueKeys","filter","numNewValues","variant","custom","getHighestPriority","setOverride","overrideIndex","startOverride","override","clearOverride","highest","resetIsAnimating","overrideTarget","remainingValues","onStart","applyVariantLabels","variantLabelList","animateVariantLabels","animateVariant","animationDefinition","transitionOverride","animatable","animations","valueTarget","allAnimations","all","variantLabels","label","variantLabel","getAnimations","getChildrenAnimations","animateChildren","last","first","maxStaggerDuration","generateStaggerDuration","childControls","onAnimationStart","onAnimationComplete","checkOverrideIsAnimating","numOverrides","resolvedOverride","controls","resetChildren","AnimationControls","pendingAnimations","componentControls","subscribe","animations_1","PresenceContext","MotionContext","static","isVariantLabel","isAnimationControls","parentContext","initialState","initial","whileTap","whileHover","presenceContext","shouldPropagateControls","targetInitial","targetAnimate","initialDependency","animateDependency","context","isReducedMotion","isInitialOnly","isInitialRender","useInitialOrEveryRender","initialToApply","useValueAnimationControls","subscribeToParentControls","parentControls","isPresent","unmountProps","checkShouldInheritVariant","inherit","getValueControlsConfig","loadFunctionalityComponents","renderComponent","MotionComponent","externalRef","useExternalRef","prevMotionStyles","thisStyle","shouldInheritVariant","functionality","renderedComponent","Provider","svgElements","MotionPluginContext","transformPagePoint","useUnmountEffect","addDomEvent","handler","isMouseEvent","event","PointerEvent","pointerType","MouseEvent","isTouchEvent","defaultPagePoint","pointFromMouse","extractEventInfo","changedTouches","Point","wrapHandler","shouldFilterPrimaryPointer","listener","eventHandler","button","filterPrimaryPointer","mouseEventNames","pointerdown","pointermove","pointerup","pointercancel","pointerover","pointerout","pointerenter","pointerleave","touchEventNames","getPointerEventName","name","onpointerdown","ontouchstart","onmousedown","addPointerEvent","usePointerEvent","useDomEvent","subtract","relativeTo","idOrElem","elem","localElem","getElementById","rect","scrollX","scrollY","isViewportScrollBlocked","preventDefault","unblockViewportScroll","PanSession","handlers","startEvent","lastMoveEvent","lastMoveEventInfo","updatePoint","info","getPanInfo","history","isPanStarted","isDistancePastThreshold","onMove","initialInfo","transformPoint","onSessionStart","removeOnPointerMove","handlePointerMove","removeOnPointerUp","handlePointerUp","removeListeners","buttons","end","onEnd","panInfo","updateHandlers","lastDevicePoint","startDevicePoint","getVelocity$1","timestampedPoint","lastPoint","time","Infinity","isNodeOrChild","parentElement","getGesturePriority","gesture","createLock","lock","globalHorizontalLock","globalVerticalLock","getGlobalLock","drag","openHorizontal_1","openVertical_1","tapGesturePriority","hoverPriority","filterTouch","useGestures","onPan","onPanStart","onPanEnd","onPanSessionStart","hasPanEvents","panSession","usePanGesture","onTap","onTapStart","onTapCancel","hasTapListeners","isTapping","cancelPointerEventListener","removePointerUp","onPointerUp","openGestureLock","useTapGesture","onHoverStart","onHoverEnd","useHoverGesture","makeRenderlessComponent","hook","gestureProps","Gestures","shouldRender","Component","isRefObject","noop","ComponentDragControls","isDragging","currentDirection","constraints","openGlobalLock","prevConstraintsBox","originEvent","snapToCursor","bothAxis","axis","axisPoint","constraintsNeedResolution","dragConstraints","transformPagePoint_1","calculateConstraintsFromDom","applyConstraintsToPoint","dragPropagation","onDragStart","convertPanToDrag","dragDirectionLock","lockThreshold","direction","getCurrentDirection","onDirectionLock","onDrag","cancelDrag","dragMomentum","dragElastic","onDragEnd","animateDragEnd","recordBoxInfo","top_1","boundingBox","getBoundingBox","center","setPoint","shouldDrag","applyConstraints","updateProps","remainingProps","_dragValueX","_dragValueY","dragOriginX","dragOriginY","dragTransition","_dragTransitionControls","momentumAnimations","getConstraints","animationControls","externalAxisMotionValue","scalePoint","onDragTransitionEnd","constraintsBox","draggableBox","scaleAxisPoint","dimension","pointToScale","stopPointerListener","dragListener","stopResizeListener","constraintsRef","draggableRef","parentBoundingBox","draggableBoundingBox","getCurrentOffset","constrainedValue","applyOverdrag","Drag","groupDragControls","dragControls","useDrag","isCSSVariable","cssVariableRegex","getVariableValue","depth","exec","parseCSSVariable","fallback","resolved","BoundingBoxDimension","positionalKeys","isPositionalKey","setAndResetVelocity","getPosFromMatrix","matrix","pos","getTranslateFromMatrix","pos2","pos3","_bbox","matrix3d","nonTranslationalTransformKeys","positionalValues","elementStyler","targetPositionalKeys","removedTransformValues","hasAttemptedToRemoveTransformValues","changedValueTypeKeys","toType","fromType","numKeyframes","removedTransforms","removeNonTranslationalTransform","convertedTarget","changedKeys","originBbox","elementComputedStyle","display","originComputedStyle","targetBbox","convertChangedValueTypes","unitConversion","hasPositionalKey","parseDomVariant","resolveCSSVariables","useForceUpdate","forcedRenderCount","setForcedRenderCount","StepName","SyncLayoutContext","jobs","Prepare","Read","Render","jobsNeedProcessing","flushCallbackList","list","numJobs","createUseSyncEffect","stepName","layoutSync","flush","prepare","read","defaultLayoutTransition","defaultPositionTransition","axisLabels","id","centerOf","calcAxisDelta","names","sizeDelta","getLayout","measure","offsetLeft","offsetTop","offsetWidth","offsetHeight","readPositionStyle","isSizeKey","AnimatePropType","Layout","positionTransition","layoutTransition","_super","LayoutAnimation","getSnapshotBeforeUpdate","compare","getTransition","isPositionOnly","positionStyle","nextPosition","getLayoutType","calcDelta","isResolver","makeTransition","layoutKey","transformKey","visualOrigin","deltaKey","baseTransition","getDefaultLayoutTransition","offsetToApply","componentDidUpdate","contextType","validMotionProps","isValidMotionProp","targetWithoutTransition","mergeTransitionEnd","_a$1","resolveVariantLabels","unresolvedVariant","AnimatePropComponents","Target","targetAndTransition","prevValues","targetToAnimate","animatingTarget","finalTarget","shouldAnimateOnMount","isValidValue","valueHasUpdated","prevLength","shallowCompare","useAnimateProp","VariantLabel","targetVariants","parentAlreadyMounted","oldVariant","newVariant","shouldAnimate","join","useVariants","AnimationSubscription","useAnimationGroupSubscription","isAnimationSubscription","animationProps","animatePropTypeTests","Exit","exit","onExitComplete","register","usePresence","isPlayingExitAnimation","isPropValid","emotionIsPropValid_1","functionalityComponents","numFunctionalityComponents","createDomMotionConfig","isDOM","isSVG","forwardedProps","domProps","filterValidProps","staticVisualStyles","isDrag","userSelect","draggable","buildHTMLProps","activeComponents","Animation","animatePropType","getAnimationComponent","Component_1","htmlMotionComponents","svgMotionComponents","motion","useMotionValue","isCustomValueType","args","useImmediate","argOffset","inputValue","inputRange","outputRange","noop$1","useTransform","customTransform","comparitor","useSpring","source","activeSpringAnimation","useOnChange","createScrollMotionValues","scrollXProgress","scrollYProgress","setProgress","maxOffset","createScrollUpdater","getOffsets","xOffset","yOffset","xMaxOffset","yMaxOffset","useIsomorphicLayoutEffect","viewportScrollValues","getViewportScrollOffsets","body","clientWidth","innerWidth","clientHeight","innerHeight","hasListeners","useViewportScroll","updateScrollValues","addEventListeners","useAnimation","DragControls","nativeEvent","_onExitComplete","numPresenceChildren","numExitComplete","allComplete","getChildKey","exitBeforeEnter","localForceUpdate","forceUpdate","filteredChildren","filtered","onlyElements","presentChildren","allChildren","exiting","updateChildLookup","childrenToRender","presentKeys","targetKeys","numPresent","insertionIndex","removeIndex","findIndex","prefersReducedMotion","matchMedia","motionMediaQuery_1","setReducedMotionPreferences","matches","addListener"],"mappings":";2FAAA,wIAkBA,IAAIA,EAAiB,SAAuBC,EAAGC,GAW7C,OAVAF,EAAiBG,OAAOC,gBAAkB,CACxCC,UAAW,cACAC,OAAS,SAAUL,EAAGC,GACjCD,EAAEI,UAAYH,IACX,SAAUD,EAAGC,GAChB,IAAK,IAAIK,KAAKL,EACRA,EAAEM,eAAeD,KAAIN,EAAEM,GAAKL,EAAEK,MAIhBN,EAAGC,IAGpB,SAASO,EAAUR,EAAGC,GAG3B,SAASQ,IACPC,KAAKC,YAAcX,EAHrBD,EAAeC,EAAGC,GAMlBD,EAAEY,UAAkB,OAANX,EAAaC,OAAOW,OAAOZ,IAAMQ,EAAGG,UAAYX,EAAEW,UAAW,IAAIH,GAGjF,IAAIK,EAAU,WAaZ,OAZAA,EAAUZ,OAAOa,QAAU,SAAkBC,GAC3C,IAAK,IAAIC,EAAGC,EAAI,EAAGC,EAAIC,UAAUC,OAAQH,EAAIC,EAAGD,IAG9C,IAAK,IAAIZ,KAFTW,EAAIG,UAAUF,GAGRhB,OAAOU,UAAUL,eAAee,KAAKL,EAAGX,KAAIU,EAAEV,GAAKW,EAAEX,IAI7D,OAAOU,IAGMO,MAAMb,KAAMU,YAItB,SAASI,EAAOP,EAAGQ,GACxB,IAAIT,EAAI,GAER,IAAK,IAAIV,KAAKW,EACRf,OAAOU,UAAUL,eAAee,KAAKL,EAAGX,IAAMmB,EAAEC,QAAQpB,GAAK,IAAGU,EAAEV,GAAKW,EAAEX,IAG/E,GAAS,MAALW,GAAqD,oBAAjCf,OAAOyB,sBAA2C,KAAIT,EAAI,EAAb,IAAgBZ,EAAIJ,OAAOyB,sBAAsBV,GAAIC,EAAIZ,EAAEe,OAAQH,IAClIO,EAAEC,QAAQpB,EAAEY,IAAM,GAAKhB,OAAOU,UAAUgB,qBAAqBN,KAAKL,EAAGX,EAAEY,MAAKF,EAAEV,EAAEY,IAAMD,EAAEX,EAAEY,KAEhG,OAAOF,EA0NF,SAASa,IACd,IAAK,IAAIZ,EAAI,EAAGC,EAAI,EAAGY,EAAKV,UAAUC,OAAQH,EAAIY,EAAIZ,IACpDD,GAAKG,UAAUF,GAAGG,OAGf,IAAIU,EAAI1B,MAAMY,GAAIe,EAAI,EAA3B,IAA8Bd,EAAI,EAAGA,EAAIY,EAAIZ,IAC3C,IAAK,IAAIe,EAAIb,UAAUF,GAAIgB,EAAI,EAAGC,EAAKF,EAAEZ,OAAQa,EAAIC,EAAID,IAAKF,IAC5DD,EAAEC,GAAKC,EAAEC,GAIb,OAAOH,I,yCClSM,ICPXK,EAAkB,45HAElBC,EDHJ,SAAiBC,GACf,IAAIC,EAAQ,GACZ,OAAO,SAAUC,GAEf,YADmBC,IAAfF,EAAMC,KAAoBD,EAAMC,GAAOF,EAAGE,IACvCD,EAAMC,ICDL,EAAQ,SAAUE,GAC5B,OAAON,EAAgBO,KAAKD,IAAgC,MAAvBA,EAAKE,WAAW,IAE3B,MAAvBF,EAAKE,WAAW,IAEhBF,EAAKE,WAAW,GAAK,MAIX,a,uyCCXf,IAAIC,EAAW,EACXC,EAAgC,qBAAXC,aAA2DN,IAAjCM,OAAOC,sBAAsC,SAAUC,GACxG,OAAOF,OAAOC,sBAAsBC,IAClC,SAAUA,GACZ,IAAIC,EAAYC,KAAKC,MACjBC,EAAaC,KAAKC,IAAI,EAAG,MAAQL,EAAYL,IACjDA,EAAWK,EAAYG,EACvBG,YAAW,WACT,OAAOP,EAASJ,KACfQ,IAqEDI,EAAiB,EAAI,GAAK,IAC1BC,GAAoB,EACpBC,GAAmB,EACnB,GAAe,EACf,EAAQ,CACVC,MAAO,EACPV,UAAW,GAETW,EAAa,CAAC,OAAQ,SAAU,YAAa,SAAU,cAEvDC,EAAsB,SAA6BC,GACrD,OAAOJ,EAAmBI,GAGxBC,EAAqBH,EAAWI,QAAO,SAAUC,EAAKC,GAhFzC,IAAoBC,EAC/BC,EACAC,EACAC,EACAC,EACAtD,EACAuD,EACAC,EACAC,EA0EJ,OADAT,EAAIC,IAjF+BC,EAiFbN,EAhFlBO,EAAe,GACfC,EAAwB,GACxBC,EAAe,EACfC,GAAe,EACftD,EAAI,EACJuD,EAAY,IAAIG,QAChBF,EAAc,IAAIE,QAClBD,EAAa,CACfE,OAAQ,SAAgBC,GACtB,IAAIC,EAAkBT,EAAsB5C,QAAQoD,GACpDL,EAAUO,IAAIF,IAEW,IAArBC,GACFT,EAAsBW,OAAOF,EAAiB,IAGlDD,QAAS,SAAiBI,GACxB,IAAIC,EAQEC,EADN,GALAZ,GAAe,EAC6BH,GAA5Cc,EAAK,CAACb,EAAuBD,IAAiC,IAAIC,EAAwBa,EAAG,IACvE9D,OAAS,EAC/BkD,EAAeF,EAAahD,OAK1B,IAAKH,EAAI,EAAGA,EAAIqD,EAAcrD,KAC5BkE,EAAYf,EAAanD,IACfgE,IAEyB,IAA/BR,EAAYW,IAAID,IAAwBX,EAAUY,IAAID,KACxDT,EAAWW,SAASF,GACpBhB,GAAgB,IAKtBI,GAAe,GAEjBc,SAAU,SAAkBR,EAASS,EAAWC,QAC5B,IAAdD,IACFA,GAAY,QAGI,IAAdC,IACFA,GAAY,GAId,IAAIC,EAAqBD,GAAahB,EAClCkB,EAASD,EAAqBpB,EAAeC,EACjDG,EAAUkB,OAAOb,GACbS,GAAWb,EAAYM,IAAIF,IAEE,IAA7BY,EAAOhE,QAAQoD,KACjBY,EAAOE,KAAKd,GACRW,IAAoBlB,EAAeF,EAAahD,YAwBnD6C,IACN,IACC2B,EAAoBhC,EAAWI,QAAO,SAAUC,EAAKC,GACvD,IAAI2B,EAAO9B,EAAMG,GAgBjB,OAdAD,EAAIC,GAAO,SAAUW,EAASS,EAAWC,GAWvC,YAVkB,IAAdD,IACFA,GAAY,QAGI,IAAdC,IACFA,GAAY,GAGT7B,GAAkBoC,IACvBD,EAAKR,SAASR,EAASS,EAAWC,GAC3BV,GAGFZ,IACN,IACC8B,EAA0BnC,EAAWI,QAAO,SAAUC,EAAKC,GAE7D,OADAD,EAAIC,GAAOH,EAAMG,GAAKU,OACfX,IACN,IAEC+B,EAAc,SAAqBC,GACrC,OAAOlC,EAAMkC,GAAQpB,QAAQ,IAG3BqB,EAAe,SAASA,EAAajD,GACvCS,GAAmB,EACnB,EAAMC,MAAQF,EAAoBD,EAAiBH,KAAKC,IAAID,KAAK8C,IAAIlD,EAAY,EAAMA,UAjDxE,IAiDgG,GAC1GQ,IAAmBD,EAAiB,EAAMG,OAC/C,EAAMV,UAAYA,EAClB,GAAe,EACfW,EAAWwC,QAAQJ,GACnB,GAAe,EAEXtC,IACFD,GAAoB,EACpBZ,EAAYqD,KAIZJ,EAAY,WACdpC,GAAmB,EACnBD,GAAoB,EACf,GAAcZ,EAAYqD,IAG7BG,EAAe,WACjB,OAAO,GAGM,ICpJX,EAAQ,SAAeF,EAAK7C,GAC9B,OAAO,SAAUgD,GACf,OAAOjD,KAAKC,IAAID,KAAK8C,IAAIG,EAAGhD,GAAM6C,KAIlCI,EAAW,SAAkBD,GAC/B,OAAOA,EAAI,EAAIE,OAAOF,EAAEG,QAAQ,IAAMH,GAGpCI,EAAa,mBACbC,EAAa,gHACbC,EAAmB,oGACnBC,EAAS,CACXnE,KAAM,SAAc4D,GAClB,MAAoB,kBAANA,GAEhBQ,MAAOC,WACPC,UAAW,SAAmBV,GAC5B,OAAOA,IAIPW,EAAQ,YAAS,YAAS,GAAIJ,GAAS,CACzCG,UAAW,EAAM,EAAG,KAGlB,EAAQ,YAAS,YAAS,GAAIH,GAAS,CACzCK,QAAS,IAGPC,EAAiB,SAAwBC,GAC3C,MAAO,CACL1E,KAAM,SAAc4D,GAClB,MAAoB,kBAANA,GAAkBA,EAAEe,SAASD,IAAiC,IAAxBd,EAAEgB,MAAM,KAAKlG,QAEnE0F,MAAOC,WACPC,UAAW,SAAmBV,GAC5B,MAAO,GAAKA,EAAIc,KAKlBG,EAAUJ,EAAe,OACzBK,EAAUL,EAAe,KACzBM,EAAKN,EAAe,MACpBO,EAAKP,EAAe,MACpBQ,EAAKR,EAAe,MAEpBS,EAAqB,YAAS,YAAS,GAAIJ,GAAU,CACvDV,MAAO,SAAeR,GACpB,OAAOkB,EAAQV,MAAMR,GAAK,KAE5BU,UAAW,SAAmBV,GAC5B,OAAOkB,EAAQR,UAAc,IAAJV,MAQzBuB,EAAe,EAAM,EAAG,KAExBC,EAAS,SAAgBxB,GAC3B,YAAiB9D,IAAV8D,EAAEyB,KAGPC,EAAS,SAAgB1B,GAC3B,YAAiB9D,IAAV8D,EAAE2B,KAOX,IAAIC,EAAmB,SAA0BC,GAC/C,OAAO,SAAU7B,GACf,GAAiB,kBAANA,EAAgB,OAAOA,EAIlC,IAHA,IAAI8B,EAAS,GACTC,EAtByB,SAAoCC,GACnE,OAAOA,EAAMC,UAAUD,EAAM7G,QAAQ,KAAO,EAAG6G,EAAME,YAAY,MAc1DC,CAO8BnC,GAPIoC,QAAQ,UAAW,KAAKpB,MAAM,QAS5DrG,EAAI,EAAGA,EAAI,EAAGA,IACrBmH,EAAOD,EAAMlH,SAAyBuB,IAAnB6F,EAAYpH,GAAmB8F,WAAWsB,EAAYpH,IAAM,EAGjF,OAAOmH,IAsBPO,EAAU,YAAS,YAAS,GAAI9B,GAAS,CAC3CG,UAAW,SAAmBV,GAC5B,OAAOjD,KAAKuF,MAAMf,EAAavB,OAInC,SAASuC,EAAcC,EAAOC,GAC5B,OAAOD,EAAME,WAAWD,IAAcnC,EAAiBlE,KAAKoG,GAG9D,IAAIG,EAAO,CACTvG,KAAM,SAAc4D,GAClB,MAAoB,kBAANA,EAAiBuC,EAAcvC,EAAG,OAASwB,EAAOxB,IAElEQ,MAAOoB,EAAiB,CAAC,MAAO,QAAS,OAAQ,UACjDlB,UAAW,SAAmB9B,GAC5B,IAAI6C,EAAM7C,EAAG6C,IACTmB,EAAQhE,EAAGgE,MACXC,EAAOjE,EAAGiE,KACVC,EAAKlE,EAAG+B,MACRoC,OAAiB,IAAPD,EAAgB,EAAIA,EAClC,OAvCe,SAAsBlE,GACvC,IAAI6C,EAAM7C,EAAG6C,IACTmB,EAAQhE,EAAGgE,MACXC,EAAOjE,EAAGiE,KACVC,EAAKlE,EAAG+B,MAEZ,MAAO,QAAUc,EAAM,KAAOmB,EAAQ,KAAOC,EAAO,WADjC,IAAPC,EAAgB,EAAIA,GACmC,IAiC1DE,CAAa,CAClBvB,IAAKY,EAAQ3B,UAAUe,GACvBmB,MAAOP,EAAQ3B,UAAUkC,GACzBC,KAAMR,EAAQ3B,UAAUmC,GACxBlC,MAAOV,EAASU,EAAMD,UAAUqC,QAIlCE,EAAO,CACT7G,KAAM,SAAc4D,GAClB,MAAoB,kBAANA,EAAiBuC,EAAcvC,EAAG,OAAS0B,EAAO1B,IAElEQ,MAAOoB,EAAiB,CAAC,MAAO,aAAc,YAAa,UAC3DlB,UAAW,SAAmB9B,GAC5B,IAAI+C,EAAM/C,EAAG+C,IACTuB,EAAatE,EAAGsE,WAChBC,EAAYvE,EAAGuE,UACfL,EAAKlE,EAAG+B,MACRoC,OAAiB,IAAPD,EAAgB,EAAIA,EAClC,OAjDe,SAAsBlE,GACvC,IAAI+C,EAAM/C,EAAG+C,IACTuB,EAAatE,EAAGsE,WAChBC,EAAYvE,EAAGuE,UACfL,EAAKlE,EAAG+B,MAEZ,MAAO,QAAUgB,EAAM,KAAOuB,EAAa,KAAOC,EAAY,WAD3C,IAAPL,EAAgB,EAAIA,GAC6C,IA2CpEM,CAAa,CAClBzB,IAAK5E,KAAKuF,MAAMX,GAChBuB,WAAYhC,EAAQR,UAAUT,EAASiD,IACvCC,UAAWjC,EAAQR,UAAUT,EAASkD,IACtCxC,MAAOV,EAASU,EAAMD,UAAUqC,QAKlCM,EAAM,YAAS,YAAS,GAAIV,GAAO,CACrCvG,KAAM,SAAc4D,GAClB,MAAoB,kBAANA,GAAkBuC,EAAcvC,EAAG,MAEnDQ,MAAO,SAAeR,GACpB,IAAIxE,EAAI,GACJ8H,EAAI,GACJ5J,EAAI,GAeR,OAbIsG,EAAElF,OAAS,GACbU,EAAIwE,EAAEuD,OAAO,EAAG,GAChBD,EAAItD,EAAEuD,OAAO,EAAG,GAChB7J,EAAIsG,EAAEuD,OAAO,EAAG,KAEhB/H,EAAIwE,EAAEuD,OAAO,EAAG,GAChBD,EAAItD,EAAEuD,OAAO,EAAG,GAChB7J,EAAIsG,EAAEuD,OAAO,EAAG,GAChB/H,GAAKA,EACL8H,GAAKA,EACL5J,GAAKA,GAGA,CACL+H,IAAK+B,SAAShI,EAAG,IACjBoH,MAAOY,SAASF,EAAG,IACnBT,KAAMW,SAAS9J,EAAG,IAClBiH,MAAO,MAKT6B,EAAQ,CACVpG,KAAM,SAAc4D,GAClB,MAAoB,kBAANA,GAAkBM,EAAiBlE,KAAK4D,IAAMwB,EAAOxB,IAAM0B,EAAO1B,IAElFQ,MAAO,SAAeR,GACpB,OAAI2C,EAAKvG,KAAK4D,GACL2C,EAAKnC,MAAMR,GACTiD,EAAK7G,KAAK4D,GACZiD,EAAKzC,MAAMR,GACTqD,EAAIjH,KAAK4D,GACXqD,EAAI7C,MAAMR,GAGZA,GAETU,UAAW,SAAmBV,GAC5B,OAAIwB,EAAOxB,GACF2C,EAAKjC,UAAUV,GACb0B,EAAO1B,GACTiD,EAAKvC,UAAUV,GAGjBA,IAGPyD,EAAc,OACdC,EAAe,OAEfC,EAAuB,SAA8B3D,GACvD,MAAoB,kBAANA,EAAiB,EAAIA,GAGjC4D,EAAU,CACZxH,KAAM,SAAc4D,GAClB,GAAiB,kBAANA,IAAmB6D,MAAM7D,GAAI,OAAO,EAC/C,IAAI8D,EAAY,EACZC,EAAe/D,EAAEgE,MAAM5D,GACvB6D,EAAcjE,EAAEgE,MAAM3D,GAG1B,OAFI0D,IAAcD,GAAaC,EAAajJ,QACxCmJ,IAAaH,GAAaG,EAAYnJ,QACnCgJ,EAAY,GAErBtD,MAAO,SAAeR,GACpB,IAAIkE,EAAQlE,EACRmE,EAAS,GACTF,EAAcC,EAAMF,MAAM3D,GAE1B4D,IACFC,EAAQA,EAAM9B,QAAQ/B,EAAYoD,GAClCU,EAAO9E,KAAKrE,MAAMmJ,EAAQF,EAAYG,IAAI5B,EAAMhC,SAGlD,IAAIuD,EAAeG,EAAMF,MAAM5D,GAM/B,OAJI2D,GACFI,EAAO9E,KAAKrE,MAAMmJ,EAAQJ,EAAaK,IAAI7D,EAAOC,QAG7C2D,GAETE,kBAAmB,SAA2BlI,GAC5C,IAAImI,EAAWnI,EACXoI,EAAQ,EACRN,EAAc9H,EAAK6H,MAAM3D,GACzBmE,EAAYP,EAAcA,EAAYnJ,OAAS,EAEnD,GAAImJ,EACF,IAAK,IAAItJ,EAAI,EAAGA,EAAI6J,EAAW7J,IAC7B2J,EAAWA,EAASlC,QAAQ6B,EAAYtJ,GAAI8I,GAC5Cc,IAIJ,IAAIR,EAAeO,EAASN,MAAM5D,GAC9BqE,EAAaV,EAAeA,EAAajJ,OAAS,EAEtD,GAAIiJ,EACF,IAASpJ,EAAI,EAAGA,EAAI8J,EAAY9J,IAC9B2J,EAAWA,EAASlC,QAAQ2B,EAAapJ,GAAI+I,GAC7Ca,IAIJ,OAAO,SAAUvE,GAGf,IAFA,IAAI0E,EAASJ,EAEJ3J,EAAI,EAAGA,EAAI4J,EAAO5J,IACzB+J,EAASA,EAAOtC,QAAQzH,EAAI6J,EAAYf,EAAcC,EAAc/I,EAAI6J,EAAYhC,EAAM9B,UAAUV,EAAErF,IAAMsF,EAASD,EAAErF,KAGzH,OAAO+J,IAGXC,kBAAmB,SAA2BC,GAC5C,IAAIC,EAAejB,EAAQpD,MAAMoE,GAEjC,OADwBhB,EAAQS,kBAAkBO,EAC3CE,CAAkBD,EAAaT,IAAIT,MC5R1CoB,EAAW,SAAkBC,GAC/B,OAAO,SAAUjL,GACf,OAAO,EAAIiL,EAAO,EAAIjL,KAItBkL,EAAW,SAAkBD,GAC/B,OAAO,SAAUjL,GACf,OAAOA,GAAK,GAAMiL,EAAO,EAAIjL,GAAK,GAAK,EAAIiL,EAAO,GAAK,EAAIjL,KAAO,IAIlEmL,GAAuBH,EACvBI,GAAuBF,EAEvBG,GAAe,SAAsBC,GACvC,OAAO,SAAUtL,GACf,OAAOgD,KAAKuI,IAAIvL,EAAGsL,KAInBE,GAAe,SAAsBF,GACvC,OAAO,SAAUtL,GACf,OAAOA,EAAIA,IAAMsL,EAAQ,GAAKtL,EAAIsL,KAIlCG,GAAyB,SAAgCH,GAC3D,IAAII,EAAaF,GAAaF,GAC9B,OAAO,SAAUtL,GACf,OAAQA,GAAK,GAAK,EAAI,GAAM0L,EAAW1L,GAAK,IAAO,EAAIgD,KAAKuI,IAAI,GAAI,IAAMvL,EAAI,OAI9E2L,GAAS,SAAgB3L,GAC3B,OAAOA,GAGL4L,GAAsBP,GAAa,GACnCQ,GAAuBb,EAASY,IAChCE,GAAyBZ,EAASU,IAElCG,GAAS,SAAgB/L,GAC3B,OAAO,EAAIgD,KAAKgJ,IAAIhJ,KAAKiJ,KAAKjM,KAG5BkM,GAAuBlB,EAASe,IAChCI,GAAyBjB,EAASgB,IAClCE,GAAsBZ,GAlDO,OAmD7Ba,GAAuBrB,EAASoB,IAChCE,GAAyBpB,EAASkB,IAClCG,GAA0Bd,GArDG,OA6D7Be,GAAY,SAAmBxM,GACjC,IAAIyM,EAAKzM,EAAIA,EACb,OAAOA,EAToB,mBASS,OAASyM,EAAKzM,EARtB,kBAQoD,MAAQyM,EAAK,IAAMzM,EAAI,IAAMA,EAPlF,GACpB,mBAMwIyM,EALxI,kBAKkJzM,EAJlJ,kBAI2J,KAAOA,EAAIA,EAAI,MAAQA,EAAI,OAG3L0M,GAAW,SAAkB1M,GAC/B,OAAO,EAAMwM,GAAU,EAAMxM,IAG3B2M,GAAc,SAAqB3M,GACrC,OAAOA,EAAI,GAAM,IAAO,EAAMwM,GAAU,EAAU,EAAJxM,IAAY,GAAMwM,GAAc,EAAJxM,EAAU,GAAO,IAQzF4M,GAAqB,GACrBC,GAA6C,qBAAjBC,aAE5B,GAAI,SAAWC,EAAIC,GACrB,OAAO,EAAM,EAAMA,EAAK,EAAMD,GAG5B,GAAI,SAAWA,EAAIC,GACrB,OAAO,EAAMA,EAAK,EAAMD,GAGtBE,GAAI,SAAWF,GACjB,OAAO,EAAMA,GAGXG,GAAW,SAAkBxM,EAAGqM,EAAIC,GACtC,OAAO,EAAM,GAAED,EAAIC,GAAMtM,EAAIA,EAAI,EAAM,GAAEqM,EAAIC,GAAMtM,EAAIuM,GAAEF,IAGvDI,GAAa,SAAoBzM,EAAGqM,EAAIC,GAC1C,QAAS,GAAED,EAAIC,GAAMtM,EAAI,GAAEqM,EAAIC,IAAOtM,EAAIuM,GAAEF,IAAOrM,GAGrD,SAAS0M,GAAYC,EAAKC,EAAKC,EAAKC,GAClC,IAAIC,EAAeZ,GAAqB,IAAIC,aAzBpB,IAyBwD,IAAI/M,MAzB5D,IAuEpB2N,EAAW,SAAkBC,GAQ/B,IAPA,IAGIC,EACAC,EACAC,EALAC,EAAgB,EAChBC,EAAgB,EACHC,KAKVD,GAAgCP,EAAaO,IAAkBL,IAAMK,EAC1ED,GAAiBnB,GAQnB,QALEoB,EACFJ,GAAQD,EAAKF,EAAaO,KAAmBP,EAAaO,EAAgB,GAAKP,EAAaO,KAE5FF,EAAeZ,GADfW,EAAYE,EAAgBH,EAAOhB,GACAS,EAAKE,KAzFrB,KAiDM,SAA8BI,EAAIO,GAK3D,IAJA,IAAItN,EAAI,EACJuN,EAAe,EAGZvN,EAvDa,IAuDYA,EAAG,CAGjC,GAAqB,KAFrBuN,EAAejB,GAASgB,EAASb,EAAKE,IAGpC,OAAOW,EAITA,IADWf,GAAWe,EAASb,EAAKE,GAAOI,GACrBQ,EAGxB,OAAOD,EA2BEE,CAAqBT,EAAIE,GACN,IAAjBC,EACFD,EAhEW,SAAyBF,EAAIU,EAAIC,GACrD,IACIC,EACAC,EAFA5N,EAAI,EAIR,IAEE2N,EAAWpB,GADXqB,EAAWH,GAAMC,EAAKD,GAAM,EACIhB,EAAKE,GAAOI,GAE7B,EACbW,EAAKE,EAELH,EAAKG,QAEAxL,KAAKyL,IAAIF,GA3CM,QA2CiC3N,EA1C5B,IA4C7B,OAAO4N,EAkDEE,CAAgBf,EAAII,EAAeA,EAAgBnB,MA5BvC,WACrB,IAAK,IAAIhM,EAAI,EAAGA,EAlEM,KAkEqBA,EACzC6M,EAAa7M,GAAKuM,GAAWvM,EAAIgM,GAAoBS,EAAKE,GA8B9DoB,GAkBA,OAhBe,SAAkBhB,GAa/B,OAVIN,IAAQC,GAAOC,IAAQC,EACXG,EACE,IAAPA,EACK,EACE,IAAPA,EACK,EAEAR,GAAWO,EAASC,GAAKL,EAAKE,IC3LlD,SAASoB,GAAQC,GAAkC,OAAOD,GAAU,mBAAqBE,QAAU,iBAAmBA,OAAOC,SAAW,SAAUF,GAAO,cAAcA,GAAS,SAAUA,GAAO,OAAOA,GAAO,mBAAqBC,QAAUD,EAAIxO,cAAgByO,QAAUD,IAAQC,OAAOxO,UAAY,gBAAkBuO,IAAgBA,GAOzU,IAAIG,GAAY,CACdC,EAAG,EACHC,EAAG,EACHC,EAAG,GAGDC,GAAQ,SAAenJ,GACzB,MAAoB,kBAANA,GAkCZoJ,GAAa,SAAoBC,GACnC,OAAO,SAAUxJ,EAAK7C,EAAKgD,GACzB,YAAa9D,IAAN8D,EAAkBqJ,EAAKxJ,EAAK7C,EAAKgD,GAAK,SAAUsJ,GACrD,OAAOD,EAAKxJ,EAAK7C,EAAKsM,MASxBC,GAAUH,IAJF,SAAevJ,EAAK7C,EAAKgD,GACnC,OAAOjD,KAAK8C,IAAI9C,KAAKC,IAAIgD,EAAGH,GAAM7C,MAehCwM,GAAU,SAAiBC,GAC7B,OAAOA,EAAMzP,eAAe,MAAQyP,EAAMzP,eAAe,MAGvD0P,GAAY,SAAmBD,GACjC,OAAOD,GAAQC,IAAUA,EAAMzP,eAAe,MAG5C2P,GAAa,SAAoBjO,EAAGhC,GACtC,OAAOqD,KAAKyL,IAAI9M,EAAIhC,IAGlBkQ,GAAW,SAAkBlO,EAAGhC,GAKlC,QAJU,IAANA,IACFA,EAAIqP,IAGFI,GAAMzN,IAAMyN,GAAMzP,GACpB,OAAOiQ,GAAWjO,EAAGhC,GAChB,GAAI8P,GAAQ9N,IAAM8N,GAAQ9P,GAAI,CACnC,IAAImQ,EAASF,GAAWjO,EAAEsN,EAAGtP,EAAEsP,GAC3Bc,EAASH,GAAWjO,EAAEuN,EAAGvP,EAAEuP,GAC3Bc,EAASL,GAAUhO,IAAMgO,GAAUhQ,GAAKiQ,GAAWjO,EAAEwN,EAAGxP,EAAEwP,GAAK,EACnE,OAAOnM,KAAKiN,KAAKjN,KAAKuI,IAAIuE,EAAQ,GAAK9M,KAAKuI,IAAIwE,EAAQ,GAAK/M,KAAKuI,IAAIyE,EAAQ,IAGhF,OAAO,GAGL,GAAW,SAAkBE,EAAMC,EAAIlI,GACzC,IAAImI,EAAmBD,EAAKD,EAC5B,OAA4B,IAArBE,EAAyB,GAAKnI,EAAQiI,GAAQE,GAGnDC,GAAM,SAAaH,EAAMC,EAAIG,GAC/B,OAAQA,EAAWJ,EAAOI,EAAWH,EAAKD,GAkBxC1P,GAAU,WAaZ,OAZAA,GAAUZ,OAAOa,QAAU,SAAkBC,GAC3C,IAAK,IAAIC,EAAGC,EAAI,EAAGC,EAAIC,UAAUC,OAAQH,EAAIC,EAAGD,IAG9C,IAAK,IAAIZ,KAFTW,EAAIG,UAAUF,GAGRhB,OAAOU,UAAUL,eAAee,KAAKL,EAAGX,KAAIU,EAAEV,GAAKW,EAAEX,IAI7D,OAAOU,IAGMO,MAAMb,KAAMU,YAGzByP,GAAiB,SAAwBL,EAAMC,EAAIlK,GACrD,IAAIuK,EAAWN,EAAOA,EAClBO,EAASN,EAAKA,EAClB,OAAOnN,KAAKiN,KAAKjN,KAAKC,IAAI,EAAGgD,GAAKwK,EAASD,GAAYA,KAGrDE,GAAa,CAACpH,EAAKV,EAAMM,GAEzByH,GAAe,SAAsB1K,GACvC,OAAOyK,GAAWE,MAAK,SAAUC,GAC/B,OAAOA,EAAKxO,KAAK4D,OAIjB6K,GAAgB,SAAuBC,GACzC,MAAO,IAAMA,EAAW,wEAGtB,GAAW,SAAkBb,EAAMC,GACrC,IAAIa,EAAgBL,GAAaT,GAC7Be,EAAcN,GAAaR,GACJW,GAAcZ,GAChBY,GAAcX,GAC7Ba,EAAcrK,UAAcsK,EAAYtK,UAClD,IAAIuK,EAAYF,EAAcvK,MAAMyJ,GAChCiB,EAAUF,EAAYxK,MAAM0J,GAE5BiB,EAAU5Q,GAAQ,GAAI0Q,GAEtBG,EAAUL,IAAkB9H,EAAOmH,GAAME,GAC7C,OAAO,SAAUtK,GACf,IAAK,IAAIpC,KAAOuN,EACF,UAARvN,IACFuN,EAAQvN,GAAOwN,EAAQH,EAAUrN,GAAMsN,EAAQtN,GAAMoC,IAKzD,OADAmL,EAAQxK,MAAQyJ,GAAIa,EAAUtK,MAAOuK,EAAQvK,MAAOX,GAC7C+K,EAAcrK,UAAUyK,KAI/BE,GAAmB,SAA0B3P,EAAGhC,GAClD,OAAO,SAAUsG,GACf,OAAOtG,EAAEgC,EAAEsE,MAIXsL,GAAO,WAGT,IAFA,IAAIC,EAAe,GAEVC,EAAK,EAAGA,EAAK3Q,UAAUC,OAAQ0Q,IACtCD,EAAaC,GAAM3Q,UAAU2Q,GAG/B,OAAOD,EAAa7N,OAAO2N,KAG7B,SAASI,GAASC,EAAQ9G,GACxB,OAAIuE,GAAMuC,GACD,SAAU1L,GACf,OAAOoK,GAAIsB,EAAQ9G,EAAQ5E,IAEpBwC,EAAMpG,KAAKsP,GACb,GAASA,EAAQ9G,GAEjB,GAAW8G,EAAQ9G,GAI9B,IAAI+G,GAAW,SAAkB1B,EAAMC,GACrC,IAAIxF,EAASuF,EAAK2B,QACd9H,EAAYY,EAAO5J,OACnB+Q,EAAa5B,EAAK7F,KAAI,SAAU0H,EAAUnR,GAC5C,OAAO8Q,GAASK,EAAU5B,EAAGvP,OAE/B,OAAO,SAAUqF,GACf,IAAK,IAAIrF,EAAI,EAAGA,EAAImJ,EAAWnJ,IAC7B+J,EAAO/J,GAAKkR,EAAWlR,GAAGqF,GAG5B,OAAO0E,IAIPqH,GAAY,SAAmBL,EAAQ9G,GACzC,IAAIF,EAASnK,GAAQ,GAAImR,EAAQ9G,GAE7BiH,EAAa,GAEjB,IAAK,IAAIjO,KAAO8G,OACMxI,IAAhBwP,EAAO9N,SAAsC1B,IAAhB0I,EAAOhH,KACtCiO,EAAWjO,GAAO6N,GAASC,EAAO9N,GAAMgH,EAAOhH,KAInD,OAAO,SAAUoC,GACf,IAAK,IAAIpC,KAAOiO,EACdnH,EAAO9G,GAAOiO,EAAWjO,GAAKoC,GAGhC,OAAO0E,IAIX,SAASsH,GAAQhK,GAOf,IANA,IAAImC,EAASP,EAAQpD,MAAMwB,GACvB8B,EAAYK,EAAOrJ,OACnB2J,EAAa,EACbwH,EAAS,EACTC,EAAS,EAEJvR,EAAI,EAAGA,EAAImJ,EAAWnJ,IACzB8J,GAAmC,kBAAdN,EAAOxJ,GAC9B8J,SAEsBvI,IAAlBiI,EAAOxJ,GAAGgH,IACZuK,IAEAD,IAKN,MAAO,CACL9H,OAAQA,EACRM,WAAYA,EACZwH,OAAQA,EACRC,OAAQA,GAIZ,IAAI,GAAa,SAAoBR,EAAQ9G,GAC3C,IAAIN,EAAWV,EAAQS,kBAAkBO,GACrCuH,EAAcH,GAAQN,GACtBU,EAAcJ,GAAQpH,GAE1B,OADUuH,EAAYD,SAAWE,EAAYF,QAAUC,EAAYF,SAAWG,EAAYH,SAAUE,EAAY1H,WAAc2H,EAAY3H,YACnI6G,GAAKK,GAASQ,EAAYhI,OAAQiI,EAAYjI,QAASG,IAG5D+H,GAAY,SAAmBpC,EAAMC,GACvC,OAAO,SAAUnQ,GACf,OAAOqQ,GAAIH,EAAMC,EAAInQ,KAoBzB,SAASuS,GAAa5H,EAAQ6H,EAAMC,GAKlC,IAJA,IAjB0BxM,EAiBtByM,EAAS,GACTC,EAAeF,IAjBF,kBADSxM,EAkB2B0E,EAAO,IAhBnD2H,GACe,kBAANrM,EACZwC,EAAMpG,KAAK4D,GACN,GAEA,GAEAlG,MAAM6S,QAAQ3M,GAChB2L,GACiB,WAAfhD,GAAQ3I,GACV+L,QADF,GAQHa,EAAYlI,EAAO5J,OAAS,EAEvBH,EAAI,EAAGA,EAAIiS,EAAWjS,IAAK,CAClC,IAAIkS,EAAQH,EAAahI,EAAO/J,GAAI+J,EAAO/J,EAAI,IAE/C,GAAI4R,EAAM,CACR,IAAIO,EAAiBhT,MAAM6S,QAAQJ,GAAQA,EAAK5R,GAAK4R,EACrDM,EAAQvB,GAAKwB,EAAgBD,GAG/BJ,EAAOpN,KAAKwN,GAGd,OAAOJ,EA2CT,SAASM,GAAY7I,EAAOQ,EAAQ9F,GAClC,IAAIkE,OAAY,IAAPlE,EAAgB,GAAKA,EAC1BoO,EAAKlK,EAAGmK,MACRA,OAAe,IAAPD,GAAuBA,EAC/BT,EAAOzJ,EAAGyJ,KACVM,EAAQ/J,EAAG+J,MAEXK,EAAchJ,EAAMpJ,OACE4J,EAAO5J,QACtByR,IAASzS,MAAM6S,QAAQJ,IAASA,EAAKzR,OAE5CoJ,EAAM,GAAKA,EAAMgJ,EAAc,KACjChJ,EAAQ,GAAGiJ,OAAOjJ,GAClBQ,EAAS,GAAGyI,OAAOzI,GACnBR,EAAMkJ,UACN1I,EAAO0I,WAGT,IAAIX,EAASH,GAAa5H,EAAQ6H,EAAMM,GACpCQ,EAA+B,IAAhBH,EA3DrB,SAAyBtO,EAAIkE,GAC3B,IAAImH,EAAOrL,EAAG,GACVsL,EAAKtL,EAAG,GACRiO,EAAQ/J,EAAG,GACf,OAAO,SAAU9C,GACf,OAAO6M,EAAM,GAAS5C,EAAMC,EAAIlK,KAsDKsN,CAAgBpJ,EAAOuI,GAlDhE,SAAyBvI,EAAOuI,GAC9B,IAAIS,EAAchJ,EAAMpJ,OACpByS,EAAiBL,EAAc,EACnC,OAAO,SAAUlN,GACf,IAAIwN,EAAa,EACbC,GAAkB,EAStB,GAPIzN,GAAKkE,EAAM,GACbuJ,GAAkB,EACTzN,GAAKkE,EAAMqJ,KACpBC,EAAaD,EAAiB,EAC9BE,GAAkB,IAGfA,EAAiB,CAGpB,IAFA,IAAI9S,EAAI,EAEDA,EAAIuS,KACLhJ,EAAMvJ,GAAKqF,GAAKrF,IAAM4S,GADJ5S,KAMxB6S,EAAa7S,EAAI,EAGnB,IAAI+S,EAAkB,GAASxJ,EAAMsJ,GAAatJ,EAAMsJ,EAAa,GAAIxN,GACzE,OAAOyM,EAAOe,GAAYE,IAuB4CC,CAAgBzJ,EAAOuI,GAC/F,OAAOQ,EAAQ3B,GAAK/B,GAAQrF,EAAM,GAAIA,EAAMgJ,EAAc,IAAKG,GAAgBA,EAGjF,ICrSIO,GDsWAC,GAAW,SAAkB7N,GAC/B,OAAOA,GAGL8N,GAAc,SAAqBC,GAKrC,YAJ0B,IAAtBA,IACFA,EAAoBF,IAGfzE,IAAW,SAAU4E,EAAUtC,EAAQ1L,GAC5C,IAAIiO,EAAevC,EAAS1L,EACxBkO,IAA+B,EAAIF,EAAW,IAAM,EAAID,EAAkBhR,KAAKyL,IAAIyF,KACvF,OAAOA,GAAgB,EAAIvC,EAASwC,EAA6BxC,EAASwC,MAW1EC,IAPoBL,KACFA,GAAY/Q,KAAKiN,MAMf,SAA2BoE,EAAUC,GAC3D,OAAOA,EAAgBD,GAAY,IAAOC,GAAiB,ICrdzD,ID6dSjF,IALF,SAAcvJ,EAAK7C,EAAKgD,GACjC,IAAIsO,EAAYtR,EAAM6C,EACtB,QAASG,EAAIH,GAAOyO,EAAYA,GAAaA,EAAYzO,KAIvC0J,GAAQ,EAAG,GC9dZ,SAAsB3K,GACvC,IAAI2P,EAAS3P,EAAG2P,OACZC,EAAW5P,EAAG4P,SACd1L,EAAKlE,EAAG6P,eACRA,OAAwB,IAAP3L,EAAgB,IAAI4L,IAAQ5L,EAC7CkK,EAAKpO,EAAG+P,SACRA,OAAkB,IAAP3B,GAAuBA,EACtC,OAAO,SAAUpO,QACJ,IAAPA,IACFA,EAAK,IAGP,IAAIgQ,EAAQ,YAAOhQ,EAAI,IAEnBiQ,EAAQ,GACRC,EAAgB,GAChBC,GAAa,EAEjB,SAASC,EAASpR,EAAKoE,GACjBpE,EAAI8E,WAAW,QACjBkM,EAAMK,gBAAiB,GAGzB,IAAIC,EAAeL,EAAMjR,GACzBiR,EAAMjR,GAAOoE,EACT6M,EAAMjR,KAASsR,KAEiB,IAAhCJ,EAAc3T,QAAQyC,IACxBkR,EAAczP,KAAKzB,GAGhBmR,IACHA,GAAa,EACb,EAAKI,OAAOC,EAAOD,UAIvB,IAAIC,EAAS,CACXC,IAAK,SAAazR,EAAK0R,GAMrB,YALkB,IAAdA,IACFA,GAAY,IAGGA,GAAaX,IAAaF,EAAe3P,IAAIlB,SAAuB1B,IAAf2S,EAAMjR,GACzDiR,EAAMjR,GAAO2Q,EAAO3Q,EAAKgR,IAE9CW,IAAK,SAAazN,EAAQE,GACxB,GAAsB,kBAAXF,EACTkN,EAASlN,EAAQE,QAEjB,IAAK,IAAIpE,KAAOkE,EACdkN,EAASpR,EAAKkE,EAAOlE,IAIzB,OAAOzD,MAETgV,OAAQ,SAAgBK,GAWtB,YAVoB,IAAhBA,IACFA,GAAc,IAGZT,IAA8B,IAAhBS,KAChBhB,EAASK,EAAOD,EAAOE,GACvBC,GAAa,EACbD,EAAchU,OAAS,GAGlBX,OAGX,OAAOiV,KAIPK,GAAqB,kBAGrBC,GAAc,SAAqBC,GACrC,OAAOA,EAAIvN,QAAQqN,GAHE,SAGoCG,eAGvDC,GAA0B,IAAIC,IAC9BC,GAAyB,IAAID,IAC7BE,GAAW,CAAC,SAAU,MAAO,IAAK,KAAM,IACxCC,GAAcD,GAASlV,OACvBoV,GAAgC,qBAAbC,SAGnBC,GAAgB,SAAuBxS,EAAKyS,GAC9C,OAAON,GAAUR,IAAI3R,EAAK8R,GAAYW,KA0BpCC,GAAW,SAAkB1S,EAAK2S,QACjB,IAAfA,IACFA,GAAa,GAGf,IAAIvU,EAAQuU,EAAaR,GAAYF,GAMrC,OAJK7T,EAAM8C,IAAIlB,KACbsS,GA/Ba,SAAoBtS,GACnCgQ,GAAcA,IAAeuC,SAASK,cAAc,OAEpD,IAAK,IAAI7V,EAAI,EAAGA,EAAIsV,GAAatV,IAAK,CACpC,IAAI8V,EAAST,GAASrV,GAClB+V,EAAsB,KAAXD,EACXE,EAAuBD,EAAW9S,EAAM6S,EAAS7S,EAAIgT,OAAO,GAAGC,cAAgBjT,EAAIgO,MAAM,GAE7F,GAAI+E,KAAwB/C,GAAYkD,OAASJ,EAAU,CACzD,GAAIA,GAAoB,aAAR9S,GAAsBmS,GAAUjR,IAAIlB,GAClD,OAGFiS,GAAWN,IAAI3R,EAAK+S,GACpBP,GAAcxS,GAAW8S,EAAW,GAAK,KAAOhB,GAAYiB,MAiBlDI,CAAWnT,GAZH,SAA2BA,GAC1CwS,GAAcxS,EAAKA,GAWMoT,CAAkBpT,IAG3C5B,EAAMqT,IAAIzR,IAAQA,GAGvBqT,GAAO,CAAC,GAAI,IAAK,IAAK,KAEtBC,GADQ,CAAC,YAAa,QAAS,SAAU,OAAQ,wBACbxT,QAAO,SAAUC,EAAKC,GAC5D,OAAOqT,GAAKvT,QAAO,SAAUyT,EAASC,GAEpC,OADAD,EAAQ9R,KAAKzB,EAAMwT,GACZD,IACNxT,KACF,CAAC,IAAK,IAAK,MACV0T,GAAuCH,GAAexT,QAAO,SAAU4T,EAAM1T,GAE/E,OADA0T,EAAK1T,IAAO,EACL0T,IACN,IAEH,SAASC,GAAgB3T,GACvB,OAAwC,IAAjCyT,GAAwBzT,GAGjC,SAAS4T,GAAmB9V,EAAGhC,GAC7B,OAAOwX,GAAe/V,QAAQO,GAAKwV,GAAe/V,QAAQzB,GAG5D,IAAI+X,GAAoC,IAAI/C,IAAI,CAAC,UAAW,UAAW,YAEvE,SAASgD,GAAsB9T,GAC7B,OAAO6T,GAAqB3S,IAAIlB,GAGlC,IAAI,GAAmB,YAAuB,YAAS,GAAI2C,GAAS,CAClEG,UAAW3D,KAAKuF,QAGdqP,GAAa,CACfnP,MAAOA,EACPoP,gBAAiBpP,EACjBqP,aAAcrP,EACdsP,KAAMtP,EACNuP,OAAQvP,EACRwP,YAAaxP,EACbyP,eAAgBzP,EAChB0P,iBAAkB1P,EAClB2P,kBAAmB3P,EACnB4P,gBAAiB5P,EACjB6P,YAAalR,EACbmR,eAAgBnR,EAChBoR,iBAAkBpR,EAClBqR,kBAAmBrR,EACnBsR,gBAAiBtR,EACjBuR,aAAcvR,EACdwR,OAAQxR,EACRyR,oBAAqBzR,EACrB0R,qBAAsB1R,EACtB2R,wBAAyB3R,EACzB4R,uBAAwB5R,EACxB6R,MAAO7R,EACP8R,SAAU9R,EACV+R,OAAQ/R,EACRgS,UAAWhS,EACXiS,KAAMjS,EACNkS,IAAKlS,EACLmS,MAAOnS,EACPoS,OAAQpS,EACRqS,KAAMrS,EACNsS,QAAStS,EACTuS,WAAYvS,EACZwS,aAAcxS,EACdyS,cAAezS,EACf0S,YAAa1S,EACb2S,OAAQ3S,EACR4S,UAAW5S,EACX6S,YAAa7S,EACb8S,aAAc9S,EACd+S,WAAY/S,EACZgT,OAAQlT,EACRmT,QAASnT,EACToT,QAASpT,EACTqT,QAASrT,EACTsT,MAAO,EACPC,OAAQ,EACRC,OAAQ,EACRC,OAAQ,EACRC,KAAM1T,EACN2T,MAAO3T,EACP4T,MAAO5T,EACP2I,SAAUzI,EACV2T,WAAY3T,EACZ4T,WAAY5T,EACZ6T,WAAY7T,EACZ6H,EAAG7H,EACH8H,EAAG9H,EACH+H,EAAG/H,EACH8T,YAAa9T,EACb+T,QAASvU,EACTwU,QAAS7T,EACT8T,QAAS9T,EACT+T,QAASlU,EACTmU,OAAQ,GACRC,YAAa5U,EACb6U,cAAe7U,EACf8U,WAAY,IAGVC,GAAe,SAAsB9X,GACvC,OAAO+T,GAAW/T,IAGhB+X,GAAiB,SAAwB3T,EAAO4I,GAClD,OAAOA,GAAyB,kBAAV5I,EAAqB4I,EAAKlK,UAAUsB,GAASA,GAGjE4T,GAAc,aACdC,GAAa,YACbC,GAA0B,IAAIpH,IAAI,CAACkH,GAAaC,KAChDE,GAAyB,IAAIrH,IAAI,CAACkH,GAAaC,GAAY,cAC3DG,GAAiB,CACnBhN,EAAG,aACHC,EAAG,aACHC,EAAG,cAGL,SAAS+M,GAAiBjW,GACxB,MAAoB,oBAANA,EAkChB,SAASkW,GAAmBrH,EAAOsH,EAA4BC,EAAQ1V,EAAW2V,EAAiBC,EAAeC,EAAYC,QACzF,IAA/BL,IACFA,GAA6B,QAGhB,IAAXC,IACFA,EAAS,SAGO,IAAd1V,IACFA,EAAY,SAGU,IAApB2V,IACFA,EAAkB,SAGE,IAAlBC,IACFA,EAAgB,SAGC,IAAfC,IACFA,GAAa,QAGY,IAAvBC,IACFA,GAAqB,GAGvB,IAAIC,GAAqB,EACrBC,GAAe,EACfC,GAAqB,EAEzB,IAAK,IAAI/Y,KAAOiR,EAAO,CACrB,IAAI7M,EAAQ6M,EAAMjR,GACdgZ,EAAYlB,GAAa9X,GACzBiZ,EAAclB,GAAe3T,EAAO4U,GAEpCrF,GAAgB3T,IAClB8Y,GAAe,EACfhW,EAAU9C,GAAOiZ,EACjBP,EAAcjX,KAAKzB,GAEf6Y,IACEG,EAAUhW,SAAWoB,IAAU4U,EAAUhW,UAAYgW,EAAUhW,SAAqB,IAAVoB,KAC5EyU,GAAqB,IAGhB/E,GAAsB9T,IAC/ByY,EAAgBzY,GAAOiZ,EACvBF,GAAqB,GACXZ,GAAUjX,IAAIlB,IAASqY,GAAiBY,KAClDT,EAAO9F,GAAS1S,EAAK2Y,IAAeM,GAYxC,OARIH,GAA2C,oBAApB7H,EAAMnO,aAC/B0V,EAAO1V,UAxFX,SAAwBmO,EAAOnO,EAAW4V,EAAeG,EAAoBN,EAA4BK,QAC5E,IAAvBA,IACFA,GAAqB,GAGvB,IAAIM,EAAkB,GAClBC,GAAgB,EACpBT,EAAcU,KAAKxF,IAGnB,IAFA,IAAIyF,EAAmBX,EAAcxb,OAE5BH,EAAI,EAAGA,EAAIsc,EAAkBtc,IAAK,CACzC,IAAIiD,EAAM0Y,EAAc3b,GACxBmc,IAAoBd,GAAepY,IAAQA,GAAO,IAAM8C,EAAU9C,GAAO,KACzEmZ,EAAwB,MAARnZ,GAAqBmZ,EAevC,OAZKA,GAAiBZ,EACpBW,GAAmB,gBAEnBA,EAAkBA,EAAgBI,OAGhCjB,GAAiBpH,EAAMnO,WACzBoW,EAAkBjI,EAAMnO,UAAUA,EAAW+V,EAAqB,GAAKK,GAC9DN,GAAsBC,IAC/BK,EAAkB,QAGbA,EA4DcK,CAAetI,EAAOnO,EAAW4V,EAAeG,EAAoBN,EAA4BK,IAGjHG,IACFP,EAAOC,iBAAmBA,EAAgBlB,SAAW,OAAS,KAAOkB,EAAgBjB,SAAW,OAAS,KAAOiB,EAAgBhB,SAAW,IAGtIe,EAGT,SAASgB,GAAmBxY,GAC1B,IAAIkE,OAAY,IAAPlE,EAAgB,GAAKA,EAC1BoO,EAAKlK,EAAGqT,2BACRA,OAAoC,IAAPnJ,GAAuBA,EACpDqK,EAAKvU,EAAGyT,WACRA,OAAoB,IAAPc,GAAuBA,EACpCC,EAAKxU,EAAG0T,mBACRA,OAA4B,IAAPc,GAAuBA,EAE5ClB,EAAS,GACT1V,EAAY,GACZ2V,EAAkB,GAClBC,EAAgB,GACpB,OAAO,SAAUzH,GAGf,OAFAyH,EAAcxb,OAAS,EACvBob,GAAmBrH,EAAOsH,EAA4BC,EAAQ1V,EAAW2V,EAAiBC,EAAeC,EAAYC,GAC9GJ,GA8CX,IAAImB,GAAyB,GAAa,CACxChJ,OA3CF,SAAgB3Q,EAAK4Z,GACnB,IAAIC,EAAUD,EAAQC,QAClBC,EAAiBF,EAAQE,eACzBC,EAAmBjC,GAAa9X,GAEpC,GAAI2T,GAAgB3T,GAClB,OAAO+Z,GAAmBA,EAAiB/W,SAAe,EACrD,GAAIkV,GAAWhX,IAAIlB,GACxB,OAAO6Z,EAAQ7Z,GAEf,IAAIga,EAAWpb,OAAOqb,iBAAiBJ,EAAS,MAAMK,iBAAiBxH,GAAS1S,GAAK,KAAU,EAC/F,OAAO8Z,GAAkBC,GAAoBA,EAAiBvb,KAAKwb,IAAaD,EAAiBnX,MAAQmX,EAAiBnX,MAAMoX,GAAYA,GAiC9IpJ,SA7BF,SAAkBK,EAAOjQ,EAAIkQ,GAC3B,IAAI2I,EAAU7Y,EAAG6Y,QACbM,EAAcnZ,EAAGmZ,YACjB9I,EAAiBrQ,EAAGqQ,eAGxB,GAFAtV,OAAOa,OAAOid,EAAQ3G,MAAOiH,EAAYlJ,IAErCI,EAGF,IAFA,IAAI+I,EAAmBlJ,EAAchU,OAE5BH,EAAI,EAAGA,EAAIqd,EAAkBrd,IAAK,CACzC,IAAIiD,EAAMkR,EAAcnU,GAEpBiD,EAAI8E,WAAW,OACjB+U,EAAQ3G,MAAMmH,YAAYra,EAAKiR,EAAMjR,KAKC,IAAxCkR,EAAc3T,QAAQya,MACxB6B,EAAmB,WAAI5I,EAAiB,aAGC,IAAvCC,EAAc3T,QAAQ0a,MACxB4B,EAAkB,UAAI5I,EAAgB,YAOxCJ,eAAgBqH,KAsBlB,IAAIoC,GAAmC,IAAIxJ,IAAI,CAAC,gBAAiB,kBAAmB,eAAgB,mBAAoB,aAAc,WAAY,oBAAqB,eAAgB,cAAe,aAAc,UAAW,UAAW,eAAgB,mBAAoB,mBAAoB,eAAgB,gBAS9S,GAAmB,SAA0BrE,EAAUvP,GACzD,OAAOqG,EAAGT,UAAU2J,EAAWvP,IAG7Bqd,GAAa,CACfnP,EAAG,EACHC,EAAG,EACH+J,MAAO,EACPE,OAAQ,GAGV,SAASkF,GAAW1M,EAAQ2M,EAAQjF,GAClC,MAAyB,kBAAX1H,EAAsBA,EAASvK,EAAGT,UAAU2X,EAASjF,EAAO1H,GAO5E,IAAI4M,GAAiB,CACnBnC,4BAA4B,EAC5BI,YAAY,GAGd,SAASgC,GAAc3Z,EAAI4Z,EAAYC,EAAiBC,EAAYC,EAAOpC,QACtD,IAAfiC,IACFA,EAAaL,SAGI,IAAfO,IACFA,EAAatB,GAAmBkB,UAGpB,IAAVK,IACFA,EAvCK,CACL7H,MAAO,UAyCU,IAAfyF,IACFA,GAAa,GAGf,IAAIqC,EAAQha,EAAGga,MACXC,EAAQja,EAAGia,MACX1D,EAAUvW,EAAGuW,QACbC,EAAUxW,EAAGwW,QACb0D,EAAala,EAAGka,WAChBhW,EAAKlE,EAAGma,YACRA,OAAqB,IAAPjW,EAAgB,EAAIA,EAClCkK,EAAKpO,EAAGoa,WACRA,OAAoB,IAAPhM,EAAgB,EAAIA,EAGjC8D,EAAQ4H,EAFA,YAAO9Z,EAAI,CAAC,QAAS,QAAS,UAAW,UAAW,aAAc,cAAe,gBAI7F,IAAK,IAAIhB,KAAOkT,EAAO,CACrB,GAAY,cAARlT,EACF+a,EAAM7H,MAAMpQ,UAAYoQ,EAAMlT,QAG9B+a,EADcpC,IAAe2B,GAAoBpZ,IAAIlB,GAAO8R,GAAY9R,GAAOA,GAC9DkT,EAAMlT,GAgB3B,YAZgB1B,IAAZiZ,QAAqCjZ,IAAZkZ,GAAyBtE,EAAMpQ,aAC1DiY,EAAM7H,MAAMuF,gBAjDhB,SAAqCmC,EAAYrD,EAASC,GACxD,OAAOgD,GAAWjD,EAASqD,EAAWxP,EAAGwP,EAAWxF,OAAS,IAAMoF,GAAWhD,EAASoD,EAAWvP,EAAGuP,EAAWtF,QAgDhF+F,CAA4BT,OAAwBtc,IAAZiZ,EAAwBA,EAxE9E,QAwEmHjZ,IAAZkZ,EAAwBA,EAxE/H,UA2EJlZ,IAAV0c,IAAqBD,EAAM3P,EAAI4P,QACrB1c,IAAV2c,IAAqBF,EAAM1P,EAAI4P,QAEX3c,IAApBuc,QAAgDvc,IAAf4c,IACnCH,EAAMpC,EAAa,oBAAsB,oBAAsB,IAAkByC,EAAYP,GAC7FE,EAAMpC,EAAa,mBAAqB,mBAAqB,GAAiBuC,EAAYL,GAAmB,IAAM,GAAiBM,EAAaN,IAG5IE,EAGT,SAASO,GAAkBV,EAAYC,EAAiBlC,QACnC,IAAfA,IACFA,GAAa,GAGf,IAAIoC,EAxFG,CACL7H,MAAO,IAwFL4H,EAAatB,GAAmBkB,IACpC,OAAO,SAAUzJ,GACf,OAAO0J,GAAc1J,EAAO2J,EAAYC,EAAiBC,EAAYC,EAAOpC,IAIhF,IAqBI4C,GAAyB,GAAa,CACxC5K,OAAQ,SAAgB3Q,EAAKgB,GAC3B,IAAI6Y,EAAU7Y,EAAG6Y,QAGjB,GAAKlG,GAFL3T,EAAOsa,GAAoBpZ,IAAIlB,GAA0BA,EAAnB8R,GAAY9R,IAI3C,CACL,IAAIgZ,EAAYlB,GAAa9X,GAC7B,OAAOgZ,GAAYA,EAAUhW,SAAe,EAH5C,OAAO6W,EAAQ2B,aAAaxb,IAMhC4Q,SAAU,SAAkBK,EAAOjQ,GACjC,IAAI6Y,EAAU7Y,EAAG6Y,QAEbkB,GAAQU,EADKza,EAAGya,YACGxK,GAEvB,IAAK,IAAIjR,KAAO+a,EACF,UAAR/a,EACFjE,OAAOa,OAAOid,EAAQ3G,MAAO6H,EAAM7H,OAEnC2G,EAAQ6B,aAAa1b,EAAK+a,EAAM/a,OAepC2b,GAAwB,GAAa,CACvC5K,UAAU,EACVJ,OAAQ,SAAgB3Q,GACtB,MAAe,cAARA,EAAsBpB,OAAOgd,YAAchd,OAAOid,aAE3DjL,SAAU,SAAkB5P,GAC1B,IAAIkE,EAAKlE,EAAG8a,UACRA,OAAmB,IAAP5W,EAAgB,EAAIA,EAChCkK,EAAKpO,EAAG+a,WACRA,OAAoB,IAAP3M,EAAgB,EAAIA,EACrC,OAAOxQ,OAAOod,SAASD,EAAYD,MAGnC1d,GAAqB,IAAI6d,QAUzB,GAAkB,SAAyBC,EAAMlL,GACnD,IAAIQ,EAjCiBqI,EACjBe,EACAM,EA2CJ,OAVIgB,IAAStd,OACX4S,EAASmK,GAASO,IAZF,SAAuBA,GACzC,OAAOA,aAAgBC,aAAqC,oBAAfD,EAAKE,MAYvCC,CAAcH,GATR,SAAsBA,GACvC,OAAOA,aAAgBI,YAAc,oBAAqBJ,EAU/CK,CAAaL,KAtCpBtB,EA7CwB,SAAiCf,GAC7D,IACE,OANgB,SAAuBA,GACzC,MAAkC,oBAApBA,EAAQ2C,QAAyB3C,EAAQ2C,UAAY3C,EAAQ4C,wBAKlEC,CAAc7C,GACrB,MAAOvc,GACP,MAAO,CACL8N,EAAG,EACHC,EAAG,EACH+J,MAAO,EACPE,OAAQ,IAqCKqH,CADI9C,EAwCNqC,GAtCXhB,EAjCO,SAAgBrB,GAC3B,MAA2B,SAApBA,EAAQ+C,QAgCEC,CAAOhD,IAAYA,EAAQiD,eAAiBjD,EAAQiD,sBAAmBxe,EAsCtFkT,EArCK+J,GAAU,CACf1B,QAASA,EACT4B,WAAYH,GAAkBV,EAAYM,MAiC1C1J,EA5MJ,SAAyBqI,EAAS7Y,QACrB,IAAPA,IACFA,EAAK,IAGP,IAAIuX,EAA6BvX,EAAGuX,2BAChCK,EAAqB5X,EAAG4X,mBACxB5H,EAAQ,YAAOhQ,EAAI,CAAC,6BAA8B,uBAEtD,OAAO2Y,GAAU,YAAS,CACxBE,QAASA,EACTM,YAAaX,GAAmB,CAC9BjB,2BAA4BA,EAC5BK,mBAAoBA,IAEtBkB,gBAAgB,GACf9I,IA4LQ+L,CAAgBb,EAAMlL,GAMjC5S,GAAMuT,IAAIuK,EAAM1K,GACTA,GAYM,OALf,SAAewL,EAAgBhM,GAE7B,OANc,SAAmBkL,EAAMlL,GACvC,OAAO5S,GAAM8C,IAAIgb,GAAQ9d,GAAMqT,IAAIyK,GAAQ,GAAgBA,EAAMlL,GAK1DiM,CAD8B,kBAAnBD,EAA8BzK,SAAS2K,cAAcF,GAAkBA,EAClEhM,IC7nBrBmM,GAAwB,WAsC1B,OArCA,SAAkBnc,EAAIoc,GACpB,IAAIC,EAAQ9gB,KAER+gB,EAAatc,EAAGsc,WAChBC,EAAavc,EAAGuc,WACpBhhB,KAAKihB,UAAW,EAEhBjhB,KAAKkhB,OAAS,SAAUrb,GAClBib,EAAMD,SAASK,QAAQJ,EAAMK,eAAetb,IAGlD7F,KAAKohB,SAAW,WACVN,EAAMD,SAASO,UAAYN,EAAMG,UAAUH,EAAMD,SAASO,WAC1DN,EAAME,YAAYF,EAAME,aAC5BF,EAAMG,UAAW,GAGnBjhB,KAAKqhB,MAAQ,SAAUC,GACjBR,EAAMD,SAASQ,OAASP,EAAMG,UAAUH,EAAMD,SAASQ,MAAMC,GACjER,EAAMG,UAAW,GAGnBjhB,KAAK6gB,SAAWA,EAEhB7gB,KAAKmhB,eAAiB,SAAUtb,GAC9B,OAAOgb,EAASK,OAAOrb,IAGzB7F,KAAKghB,WAAaA,EAEdH,EAASK,QAAUH,GAAcA,EAAWpgB,QAC9CogB,EAAWpb,SAAQ,SAAU4b,GAC3B,OAAOT,EAAMK,eAAiBI,EAAET,EAAMK,eAAgBL,EAAMM,cAjCxC,GAyCxBI,GAAiB,SAAwBC,EAAmBhd,EAAIuc,GAClE,IAAID,EAAatc,EAAGsc,WAEpB,OACS,IAAIH,GAAS,CAClBG,WAAYA,EACZC,WAAYA,GAHiB,oBAAtBS,EAIN,CACDP,OAAQO,GAMPA,IAIH,GAAsB,WACxB,SAASC,EAAOjN,QACA,IAAVA,IACFA,EAAQ,IAGVzU,KAAKyU,MAAQA,EAsDf,OAnDAiN,EAAOxhB,UAAUC,OAAS,SAAUsU,GAClC,OAAO,IAAIiN,EAAOjN,IAGpBiN,EAAOxhB,UAAUyhB,MAAQ,SAAUF,QACP,IAAtBA,IACFA,EAAoB,IAGtB,IAAIG,GAAa,EACbC,EAAe,CACjBC,KAAM,cAKJrd,EAAKzE,KAAKyU,MACVsN,EAAOtd,EAAGsd,KACVC,EAAgB,YAAOvd,EAAI,CAAC,SAM5Bwd,EAAMF,EAJKP,GAAeC,EAAmBO,GAAe,WAC9DJ,GAAa,EACbC,EAAaC,WAKf,OAFAD,EAAeI,EAAM,YAAS,GAAIJ,EAAcI,GAAOJ,EACnDD,GAAYC,EAAaC,OACtBD,GAGTH,EAAOxhB,UAAUgiB,gBAAkB,SAAUnB,GAC3C,OAAO/gB,KAAKG,OAAO,YAAS,GAAIH,KAAKyU,MAAO,CAC1CsM,WAAY/gB,KAAKyU,MAAMsM,WAAa,CAACA,GAAY/N,OAAOhT,KAAKyU,MAAMsM,YAAc,CAACA,OAItFW,EAAOxhB,UAAUiR,KAAO,WAGtB,IAFA,IAAIgR,EAAQ,GAEH9Q,EAAK,EAAGA,EAAK3Q,UAAUC,OAAQ0Q,IACtC8Q,EAAM9Q,GAAM3Q,UAAU2Q,GAGxB,IAAI+Q,EAA+B,IAAjBD,EAAMxhB,OAAewhB,EAAM,GAAKhR,GAAKtQ,WAAM,EAAQshB,GACrE,OAAOniB,KAAKkiB,iBAAgB,SAAUhB,GACpC,OAAO,SAAUrb,GACf,OAAOqb,EAAOkB,EAAYvc,SAKzB6b,EA5DiB,GA+DtB,GAAS,SAAgBK,GAC3B,OAAO,IAAI,GAAO,CAChBA,KAAMA,KAmONM,GAAY,CAACrb,EAAID,EAASD,EAASG,EAAIC,GAEvCob,GAAe,SAAsBtgB,GACvC,OAAOqgB,GAAU7R,MAAK,SAAUC,GAC9B,OAAOA,EAAKxO,KAAKD,OAQjBugB,GAAe,SAAsBC,EAAQ/N,GAC/C,OAAO+N,EAAO/N,IAGZ,GAAmB,SAA0B+N,EAAQ/d,GACvD,IAAIqL,EAAOrL,EAAGqL,KACVC,EAAKtL,EAAGsL,GACR0E,EAAQ,YAAOhQ,EAAI,CAAC,OAAQ,OAE5Bge,EAAWH,GAAaxS,IAASwS,GAAavS,GAC9CxJ,EAAYkc,EAASlc,UACrBF,EAAQoc,EAASpc,MACrB,OAAOmc,EAAO,YAAS,GAAI/N,EAAO,CAChC3E,KAAsB,kBAATA,EAAoBzJ,EAAMyJ,GAAQA,EAC/CC,GAAkB,kBAAPA,EAAkB1J,EAAM0J,GAAMA,KACvCoB,KAAK5K,IAGP,GAAoB,SAA2BmM,GACjD,OAAO,SAAU8P,EAAQ/d,GACvB,IAAIqL,EAAOrL,EAAGqL,KACVC,EAAKtL,EAAGsL,GACR0E,EAAQ,YAAOhQ,EAAI,CAAC,OAAQ,OAEhC,OAAO+d,EAAO,YAAS,GAAI/N,EAAO,CAChC3E,KAAM,EACNC,GAAI,KACFoB,KAAKuB,EAAM5C,EAAMC,MAIrB2S,GAAiC,GAAkB,IACnDC,GAAmC,GAAkB,IAErDC,GAAqB,SAA4BJ,EAAQK,GAC3D,IAAIpe,EAzEkB,SAA2Boe,GACjD,IAAIC,EAAYtjB,OAAOujB,KAAKF,GAExBG,EAAe,SAAsBhhB,EAAMyB,GAC7C,YAAgB1B,IAATC,IAAuB6gB,EAAUpf,GAAKzB,IAgB/C,MAAO,CACLihB,cAdkB,SAAuBxO,GACzC,OAAOqO,EAAUvf,QAAO,SAAU2f,EAAYzf,GAE5C,OADIuf,EAAavO,EAAMhR,GAAMA,IAAMyf,EAAWhe,KAAKzB,GAC5Cyf,IACN,KAWHC,gBARoB,SAAyB1O,GAC7C,OAAOA,GAASqO,EAAUM,MAAK,SAAU3f,GACvC,OAAOuf,EAAavO,EAAMhR,GAAMA,QAyD3B4f,CAAkBR,GACvBM,EAAkB1e,EAAG0e,gBACrBF,EAAgBxe,EAAGwe,cAWvB,OATmB,SAAsBxO,GAEvC,IADe0O,EAAgB1O,GAChB,OAAO+N,EAAO/N,GAC7B,IAAIyO,EAAaD,EAAcxO,GAE3B6O,EAAW7O,EADDyO,EAAW,IAEzB,OAAO,GAAiBI,EAAjB,CAA2Bd,EAAQ/N,EAAOyO,KAMjD,GAAmB,SAA0BlhB,GAC/C,MAAoB,kBAATA,EACFugB,GAzDM,SAAoBvgB,GACnC,OAAOuhB,QAAQjB,GAAatgB,IAyDjBwhB,CAAWxhB,GACb,GACEqG,EAAMpG,KAAKD,GACb0gB,GACEjZ,EAAQxH,KAAKD,GACf2gB,GAEAJ,IAgDPkB,GAA2Bb,IA5CnB,SAAenO,GAKzB,YAJc,IAAVA,IACFA,EAAQ,IAGH,IAAO,SAAUhQ,GACtB,IAAI2c,EAAW3c,EAAG2c,SACdF,EAASzc,EAAGyc,OACZvY,EAAK8L,EAAMR,SACXA,OAAkB,IAAPtL,EAAgB,EAAIA,EAC/BkK,EAAK4B,EAAM3E,KACXA,OAAc,IAAP+C,EAAgB,EAAIA,EAC3BqK,EAAKzI,EAAMvJ,MACXA,OAAe,IAAPgS,EAAgB,GAAMA,EAC9BC,EAAK1I,EAAMiP,aACXA,OAAsB,IAAPvG,EAAgB,IAAMA,EACrCwG,EAAKlP,EAAMmP,UACXA,OAAmB,IAAPD,EAAgB,GAAMA,EAClCE,EAAepP,EAAMoP,aACrBC,EAAU,EACVC,EAAY7Y,EAAQ+I,EACpB+P,EAAcphB,KAAKuF,MAAM2H,EAAOiU,GAChCtZ,EAAiC,qBAAjBoZ,EAA+BG,EAAcH,EAAaG,GAC1E5f,EAAU,EAAK8c,QAAO,SAAUzc,GAClC,IAAIwf,EAAaxf,EAAGvB,MACpB4gB,GAAWG,EACX,IAAI/gB,GAAS6gB,EAAYnhB,KAAKshB,KAAKJ,EAAUJ,GACzCS,EAAWjhB,EAAQ0gB,GAAa1gB,GAAS0gB,EAE7C1C,EADciD,EAAW1Z,EAASvH,EAAQuH,GAGrC0Z,IACH7e,EAAW4b,OAAO9c,GAClBgd,QAED,GACH,MAAO,CACLU,KAAM,WACJ,OAAOxc,EAAW4b,OAAO9c,UAMwB,CACvD0L,KAAM1J,EAAOnE,KACb4hB,aAAc,SAAsB3U,GAClC,MAAuB,oBAATA,GAEhB+E,SAAU7N,EAAOnE,OAqEfmiB,GAA4BxB,IAlEnB,SAAgBnO,GAK3B,YAJc,IAAVA,IACFA,EAAQ,IAGH,IAAO,SAAUhQ,GACtB,IAAIyc,EAASzc,EAAGyc,OACZE,EAAW3c,EAAG2c,SACdzY,EAAK8L,EAAMR,SACXA,OAAkB,IAAPtL,EAAgB,EAAMA,EACjCkK,EAAK4B,EAAM3E,KACXA,OAAc,IAAP+C,EAAgB,EAAMA,EAC7BqK,EAAKzI,EAAM1E,GACXA,OAAY,IAAPmN,EAAgB,EAAMA,EAC3BC,EAAK1I,EAAM4P,UACXA,OAAmB,IAAPlH,EAAgB,IAAMA,EAClCwG,EAAKlP,EAAM6P,QACXA,OAAiB,IAAPX,EAAgB,GAAKA,EAC/BY,EAAK9P,EAAM+P,KACXA,OAAc,IAAPD,EAAgB,EAAMA,EAC7BE,EAAKhQ,EAAMiQ,UACXA,OAAmB,IAAPD,EAAgB,IAAOA,EACnCE,EAAKlQ,EAAMmP,UACXA,OAAmB,IAAPe,EAAgB,IAAOA,EACnCC,EAAkB3Q,GAAaA,EAAW,IAAQ,EAClD3T,EAAI,EACJ4C,EAAQ6M,EAAKD,EACb+U,EAAW/U,EACXgV,EAAeD,EACfzgB,EAAU,EAAK8c,QAAO,SAAUzc,GAClC,IAAIsgB,EAAYtgB,EAAGvB,MACnB5C,GAAKykB,EACL,IAAIC,EAAeV,GAAW,EAAI1hB,KAAKiN,KAAKwU,EAAYG,IACpDS,EAAcriB,KAAKiN,KAAKwU,EAAYG,GAAQ,IAGhD,GAFAM,EAAeD,EAEXG,EAAe,EAAG,CACpB,IAAIE,EAAWtiB,KAAKshB,KAAKc,EAAeC,EAAc3kB,GAClD6kB,EAAYF,EAAcriB,KAAKiN,KAAK,EAAMmV,EAAeA,GAC7DH,EAAW9U,EAAKmV,IAAaN,EAAkBI,EAAeC,EAAc/hB,GAASiiB,EAAYviB,KAAKgJ,IAAIuZ,EAAY7kB,GAAK4C,EAAQN,KAAKwiB,IAAID,EAAY7kB,QACnJ,CACD4kB,EAAWtiB,KAAKshB,KAAKe,EAAc3kB,GACvCukB,EAAW9U,EAAKmV,GAAYhiB,GAAS0hB,EAAkBK,EAAc/hB,GAAS5C,GAGhF2T,EAAWD,GAAkB6Q,EAAWC,EAAcC,GACtD,IAAIM,EAA2BziB,KAAKyL,IAAI4F,IAAayQ,EACjDY,EAA+B1iB,KAAKyL,IAAI0B,EAAK8U,IAAajB,EAE1DyB,GAA4BC,GAE9BpE,EADA2D,EAAW9U,GAEXzK,EAAW4b,OAAO9c,GAClBgd,KAEAF,EAAO2D,MAER,GACH,MAAO,CACL/C,KAAM,WACJ,OAAOxc,EAAW4b,OAAO9c,UAM0B,CACzD0L,KAAM1J,EAAOnE,KACb8N,GAAI3J,EAAOnE,KACXoiB,UAAWje,EAAOnE,KAClBqiB,QAASle,EAAOnE,KAChBuiB,KAAMpe,EAAOnE,KACbgS,SAAU7N,EAAOnE,OAwHf,GAAqB2gB,IArHX,SAAiBne,GAC7B,IAAIkE,EAAKlE,EAAGqL,KACRA,OAAc,IAAPnH,EAAgB,EAAIA,EAC3BkK,EAAKpO,EAAGwP,SACRA,OAAkB,IAAPpB,EAAgB,EAAIA,EAC/BnN,EAAMjB,EAAGiB,IACT7C,EAAM4B,EAAG5B,IACTqa,EAAKzY,EAAGyG,MACRA,OAAe,IAAPgS,EAAgB,GAAMA,EAC9BC,EAAK1Y,EAAGif,aACRA,OAAsB,IAAPvG,EAAgB,IAAMA,EACrCwG,EAAKlf,EAAG8gB,gBACRA,OAAyB,IAAP5B,EAAgB,IAAMA,EACxCY,EAAK9f,EAAG+gB,cACRA,OAAuB,IAAPjB,EAAgB,GAAKA,EACrCE,EAAKhgB,EAAGmf,UACRA,OAAmB,IAAPa,EAAgB,EAAIA,EAChCZ,EAAepf,EAAGof,aACtB,OAAO,IAAO,SAAUpf,GACtB,IAIIghB,EAJAvE,EAASzc,EAAGyc,OACZwE,EAAYjhB,EAAG2c,SACfuE,EAAO7V,EACP8V,EAAU9V,EAEV+V,GAAW,EAEXC,EAAgB,SAAuBjgB,GACzC,YAAe9D,IAAR2D,GAAqBG,GAAKH,GAG/BqgB,EAAgB,SAAuBlgB,GACzC,YAAe9D,IAARc,GAAqBgD,GAAKhD,GAG/BmjB,EAAgB,SAAuBngB,GACzC,OAAOigB,EAAcjgB,IAAMkgB,EAAclgB,IAOvCogB,EAAW,SAAkBpgB,GAC/Bqb,EAAOrb,GACP8f,EAAOC,EAEP3R,EAAWD,IADX4R,EAAU/f,GAC6B8f,EAAM/f,IAAe1C,OAExDuiB,IAAoBI,GAVO,SAAoChgB,EAAGqgB,GACtE,OAAOJ,EAAcjgB,IAAMqgB,EAAkB,GAAKH,EAAclgB,IAAMqgB,EAAkB,EASpDC,CAA2BtgB,EAAGoO,IAChEmS,EAAY,CACVtW,KAAMjK,EACNoO,SAAUA,KAKZoS,EAAiB,SAAwBC,EAAWC,GACtDd,GAAmBA,EAAgB3D,OACnC2D,EAAkBa,EAAU3E,MAAM,CAChCT,OAAQ+E,EACR7E,SAAU,WACJmF,EACFA,IAIFb,QAKFU,EAAc,SAAqB3R,GACrCoR,GAAW,EACXQ,EAAejC,GAAa,YAAS,GAAI3P,EAAO,CAC9C1E,GAAI+V,EAAcrR,EAAM3E,MAAQpK,EAAM7C,EACtCwhB,UAAWkB,EACXjB,QAASkB,EACT5B,UAAWA,OAIf,GAAIoC,EAAclW,GAChBsW,EAAY,CACVtW,KAAMA,EACNmE,SAAUA,SAEP,GAAiB,IAAbA,EAAgB,CACzB,IAAIqS,EAAY7C,GAAY,CAC1B3T,KAAMA,EACNmE,SAAUA,EACVyP,aAAcA,EACdxY,MAAOA,EACP0Y,UAAWoC,EAAclW,GAAQ,GAAK8T,EACtCC,aAAcA,IAEhBwC,EAAeC,GAAW,WACpBN,EAAcJ,GAChBQ,EAAY,CACVtW,KAAM8V,EACN3R,SAAUA,IAGZyR,YAIJA,IAGF,MAAO,CACL5D,KAAM,WACJ,OAAO2D,GAAmBA,EAAgB3D,cAMG,CACnDhS,KAAM1J,EAAOnE,KACbgS,SAAU7N,EAAOnE,KACjByD,IAAKU,EAAOnE,KACZY,IAAKuD,EAAOnE,KACZqiB,QAASle,EAAOnE,KAChBoiB,UAAWje,EAAOnE,KAClB4hB,aAAc,SAAsB3U,GAClC,MAAuB,oBAATA,KA+CdsX,GAA8B5D,IA1BnB,SAAkBne,GAC/B,IAAIkE,EAAKlE,EAAGqL,KACRA,OAAc,IAAPnH,EAAgB,EAAIA,EAC3BkK,EAAKpO,EAAGsL,GACRA,OAAY,IAAP8C,EAAgB,EAAIA,EACzBqK,EAAKzY,EAAG2N,KACRA,OAAc,IAAP8K,EAAgB3R,GAAS2R,EAChCC,EAAK1Y,EAAGgiB,YAOZ,YANyB,IAAPtJ,GAAwBA,IAGxC/K,EAAOrH,GAAqBqH,IAGvB,IAAO,SAAU3N,GACtB,IAAIyc,EAASzc,EAAGyc,OAChB,MAAO,CACLwF,KAAM,SAAcxW,GAClB,OAAOgR,EAAOhR,QAGjBiB,KAAKiB,GAAM,SAAUvM,GACtB,OAAOoK,GAAIH,EAAMC,EAAIlK,QAIsC,CAC7DuM,KAAM,SAAclD,GAClB,MAAuB,oBAATA,GAEhBY,KAAM1J,EAAOnE,KACb8N,GAAI3J,EAAOnE,OAET,GAA6B,GAAM,EAAG,GAEtC,GAAQ,SAAewS,GAKzB,YAJc,IAAVA,IACFA,EAAQ,IAGH,IAAO,SAAUhQ,GACtB,IAgCIL,EAhCA8c,EAASzc,EAAGyc,OACZE,EAAW3c,EAAG2c,SACdzY,EAAK8L,EAAMkS,SACXA,OAAkB,IAAPhe,EAAgB,IAAMA,EACjCkK,EAAK4B,EAAMrC,KACXA,OAAc,IAAPS,EAAgBpH,GAAUoH,EACjCqK,EAAKzI,EAAMmS,KACXA,OAAc,IAAP1J,EAAgB,EAAIA,EAC3BC,EAAK1I,EAAMoS,KACXA,OAAc,IAAP1J,EAAgB,EAAIA,EAC3BwG,EAAKlP,EAAMqS,KACXA,OAAc,IAAPnD,EAAgB,EAAIA,EAC3BY,EAAK9P,EAAMsS,YACXA,OAAqB,IAAPxC,EAAgB,EAAIA,EAClCE,EAAKhQ,EAAM3E,KACXA,OAAc,IAAP2U,EAAgB,EAAIA,EAC3BE,EAAKlQ,EAAM1E,GACXA,OAAY,IAAP4U,EAAgB,EAAIA,EACzBqC,EAAKvS,EAAMqP,QACXA,OAAiB,IAAPkD,EAAgB,EAAIA,EAC9BC,EAAKxS,EAAMyS,UACXA,OAAmB,IAAPD,EAAgB,EAAIA,EAChCE,EAAK1S,EAAM2S,UACXA,OAAmB,IAAPD,EAAgB,EAAIA,EAChCE,EAAK5S,EAAM6S,UACXA,OAAmB,IAAPD,EAAgB,EAAIA,EAChCE,EAAWf,GAAe,CAC5B1W,KAAMA,EACNC,GAAIA,EACJqC,KAAMA,IACLuP,MAAMT,GACLsG,EAAkB,EAElBC,GAAY,EAEZC,EAAmB,SAA0BjB,GAC/C,IAAIhiB,OAEgB,IAAhBgiB,IACFA,GAAc,GAIhBc,EAAWf,GAAe,CACxB1W,KAFeA,GAAjBrL,EAAK,CAACsL,EAAID,IAAiB,GAGzBC,GAH6BA,EAAKtL,EAAG,GAIrC2N,KAAMA,EACNqU,YAAaA,IACZ9E,MAAMT,IA0BPyG,EAAc,WAChBH,EAAkB,GAAc,GAAS,EAAGb,EAAU7C,IACtDyD,EAASb,KAAKc,IAGZI,EAAa,WACfH,GAAY,EACZrjB,EAAU,EAAK8c,QAAO,SAAUzc,GAC9B,IA9BEmd,EA8BE1e,EAAQuB,EAAGvB,MACf4gB,GAAW5gB,EACXykB,MAhCE/F,EAAa6F,GAAa3D,EAAU6C,EAAWI,MAE/CnF,GAAeiF,GAASD,GAASE,KAErChD,EADeA,EAAU6C,EACJI,EAEjBF,GAAQS,EAAYT,GACtBS,IACO,GACEV,GAAQM,EAAYN,GAC7BM,IACAQ,IACO,GACEZ,GAAQM,EAAYN,IAC7BM,IACAM,EAAiBN,EAAY,IAAM,GAC5B,MAmBL9hB,EAAW4b,OAAO9c,GAClBgd,GAAY,EAAKF,OAAOE,GAAU,GAAO,OAE1C,IAGDyG,EAAY,WACdJ,GAAY,EACRrjB,GAASkB,EAAW4b,OAAO9c,IAIjC,OADAwjB,IACO,CACL3G,SAAU,WACR,OAAOwG,GAETK,WAAY,WACV,OAAO,GAAM,EAAGnB,EAAU7C,IAE5BiE,YAAa,WACX,OAAOP,GAET1F,KAAM,WACJ+F,KAEFG,MAAO,WAEL,OADAH,IACO7nB,MAETioB,OAAQ,WAEN,OADKR,GAAWG,IACT5nB,MAET0mB,KAAM,SAAcwB,GAGlB,OAFApE,EAAU7T,GAAI,EAAG0W,EAAUuB,GAC3B,EAAKhH,OAAOyG,GAAa,GAAO,GACzB3nB,MAETiT,QAAS,WAEP,OADAyU,IACO1nB,WAMXmoB,GAA+B,GAAM,EAAG,GA0CxC,GAAY,SAAmB1jB,GACjC,IAAI2jB,EAAU3jB,EAAG2jB,QACbzf,EAAKlE,EAAG2N,KACRA,OAAc,IAAPzJ,EAAgB4C,GAAS5C,EAChC0f,EAAQ5jB,EAAG4jB,MACX1gB,EAASlD,EAAGkD,OACZ2gB,EAAa,YAAO7jB,EAAI,CAAC,UAAW,OAAQ,QAAS,WAEzD2jB,EAAUzoB,MAAM6S,QAAQ4V,GAAWA,EAhDhB,SAAwBzgB,EAAQkD,GACnD,OAAOlD,EAAOsC,KAAI,WAChB,OAAOY,GAAUY,MAChBlH,OAAO,EAAGoD,EAAOhH,OAAS,GA6CgB,CAAegH,EAAQygB,GACpEC,EAAQA,GA3CW,SAAwB1gB,GAC3C,IAAIgC,EAAYhC,EAAOhH,OACvB,OAAOgH,EAAOsC,KAAI,SAAUpC,EAAOrH,GACjC,OAAa,IAANA,EAAUA,GAAKmJ,EAAY,GAAK,KAwCxB4e,CAAe5gB,GAChC,IAAI6gB,EAAYJ,EAAQne,KAAI,SAAUY,EAAQrK,GAC5C,OAAOgmB,GAAe,CACpB1W,KAAMnI,EAAOnH,GACbuP,GAAIpI,EAAOnH,EAAI,GACf4R,KAAMvH,OAGV,OAAO,GAAM,YAAS,GAAIyd,EAAY,CACpClW,KAAMA,KACJ8P,iBAAgB,SAAUhB,GAC5B,OA/CuB,SAA8BnX,EAAOye,EAAWtH,GACzE,IAAIuH,EAAc1e,EAAMpJ,OACpB+nB,EAAkBD,EAAc,EAChCE,EAAqBD,EAAkB,EACvCE,EAAOJ,EAAUve,KAAI,SAAU4e,GACjC,OAAOA,EAAMlH,MAAMT,MAErB,OAAO,SAAUrb,GACXA,GAAKkE,EAAM,IACb6e,EAAK,GAAGlC,KAAK,GAGX7gB,GAAKkE,EAAM2e,IACbE,EAAKD,GAAoBjC,KAAK,GAKhC,IAFA,IAAIlmB,EAAI,EAEDA,EAAIioB,KACL1e,EAAMvJ,GAAKqF,GAAKrF,IAAMkoB,GADJloB,KAIxB,IAAI+S,EAAkB,GAASxJ,EAAMvJ,EAAI,GAAIuJ,EAAMvJ,GAAIqF,GACvD+iB,EAAKpoB,EAAI,GAAGkmB,KAAKyB,GAAgB5U,KAwB1B,CAAqB8U,EAAOG,EAAWtH,OA+S9C4H,GAAS,SAAgBxL,EAASyL,EAAQ1L,GAC5C,OAAO,IAAO,SAAU5Y,GACtB,IAAIyc,EAASzc,EAAGyc,OACZ8H,EAAaD,EAAOliB,MAAM,KAAKoD,KAAI,SAAUgf,GAE/C,OADA3L,EAAQ4L,iBAAiBD,EAAW/H,EAAQ7D,GACrC4L,KAET,MAAO,CACLnH,KAAM,WACJ,OAAOkH,EAAWrjB,SAAQ,SAAUsjB,GAClC,OAAO3L,EAAQ6L,oBAAoBF,EAAW/H,EAAQ7D,YAO5D+L,GAAoB,WACtB,MAAO,CACLC,QAAS,EACTC,QAAS,EACTC,MAAO,EACPC,MAAO,EACP3a,EAAG,EACHC,EAAG,IAIH2a,GAAe,SAAsB1oB,EAAGuO,GAS1C,YARc,IAAVA,IACFA,EAZK,CACL+Z,QAAS,EACTC,QAAS,EACTC,MAAO,EACPC,MAAO,EACP3a,EAAG,EACHC,EAAG,IASLQ,EAAM+Z,QAAU/Z,EAAMT,EAAI9N,EAAEsoB,QAC5B/Z,EAAMga,QAAUha,EAAMR,EAAI/N,EAAEuoB,QAC5Bha,EAAMia,MAAQxoB,EAAEwoB,MAChBja,EAAMka,MAAQzoB,EAAEyoB,MACTla,GAGLoa,GAAS,CAAcN,MAG3B,GAAwB,qBAAbpT,SAA0B,CAanC8S,GAAO9S,SAAU,uBAAwB,CACvC2T,SAAS,EACTC,SAAS,IACRjI,OAfwB,SAA8Bld,GACvD,IAAIolB,EAAUplB,EAAGolB,SACD,EAChB,IAAIC,EAAaD,EAAQlpB,OACzB+oB,GAAO/oB,OAAS,EAEhB,IAAK,IAAIH,EAAI,EAAGA,EAAIspB,EAAYtpB,IAAK,CACnC,IAAIupB,EAAYF,EAAQrpB,GACxBkpB,GAAOxkB,KAAKukB,GAAaM,QAU/B,IA8DI,GAAqBX,KAGzB,GAAwB,qBAAbpT,SAA0B,CAMnC8S,GAAO9S,SAAU,uBAAuB,GAAM2L,OALpB,SAA6B5gB,IACrC,EAChB0oB,GAAa1oB,EAAG,OAMpB,IAsKI,GAAQ,SAAeipB,GACzB,OAAO,IAAO,SAAUvlB,GACtB,IAAI2c,EAAW3c,EAAG2c,SACd6I,EAAUnnB,WAAWse,EAAU4I,GACnC,MAAO,CACLlI,KAAM,WACJ,OAAOoI,aAAaD,SCnhD5B,SAAS,GAAQxb,GAAkC,OAAO,GAAU,mBAAqBC,QAAU,iBAAmBA,OAAOC,SAAW,SAAUF,GAAO,cAAcA,GAAS,SAAUA,GAAO,OAAOA,GAAO,mBAAqBC,QAAUD,EAAIxO,cAAgByO,QAAUD,IAAQC,OAAOxO,UAAY,gBAAkBuO,IAAgBA,GAazU,IAUI,GAEJ,WASE,SAAS0b,EAAYpI,EAAMtd,GACzB,IAtB2BoD,EAsBvBiZ,EAAQ9gB,KAER2I,OAAY,IAAPlE,EAAgB,GAAKA,EAC1B2lB,EAAczhB,EAAGyhB,YACjBC,EAAS1hB,EAAG0hB,OAQhBrqB,KAAK+kB,UAAY,EAOjB/kB,KAAKsqB,YAAc,EASnBtqB,KAAKuqB,kBAAmB,EAExBvqB,KAAKwqB,gBAAkB,SAAU3kB,EAAGmP,QACnB,IAAXA,IACFA,GAAS,GAGX8L,EAAM6E,KAAO7E,EAAM8E,QACnB9E,EAAM8E,QAAU9E,EAAMsJ,YAActJ,EAAMsJ,YAAYvkB,GAAKA,EAEvDib,EAAM2J,mBAAqB3J,EAAM6E,OAAS7E,EAAM8E,SAClD9E,EAAM2J,kBAAkB9kB,QAAQmb,EAAM4J,kBAGpC5J,EAAM6J,UACR7J,EAAM6J,SAAShlB,QAAQmb,EAAM8J,UAG3B5V,GAAU8L,EAAM+J,mBAClB/J,EAAM+J,kBAAkBllB,QAAQmb,EAAM4J,kBAIxC,IAAIjmB,EAAKmB,IACL1C,EAAQuB,EAAGvB,MACXV,EAAYiC,EAAGjC,UAEfse,EAAMwJ,cAAgB9nB,IACxBse,EAAMiE,UAAY7hB,EAClB4d,EAAMwJ,YAAc9nB,EACpB,EAAKsoB,WAAWhK,EAAMiK,yBAe1B/qB,KAAK0qB,iBAAmB,SAAUM,GAChCA,EAAWlK,EAAM8E,UAYnB5lB,KAAK+qB,sBAAwB,WAC3B,OAAO,EAAKD,WAAWhK,EAAMmK,gBAa/BjrB,KAAKirB,cAAgB,SAAUxmB,GACbA,EAAGjC,YAEDse,EAAMwJ,cACtBxJ,EAAM6E,KAAO7E,EAAM8E,UAYvB5lB,KAAK4qB,SAAW,SAAUM,GACxB,OAAOA,EAAM9V,IAAI0L,EAAM8E,UAGzB5lB,KAAKqqB,OAASA,EACdrqB,KAAKoqB,YAAcA,EACnBpqB,KAAKoV,IAAI2M,GAAM,GACf/hB,KAAKuqB,kBAjJsB1iB,EAiJK7H,KAAK4lB,SAhJ/Blc,MAAMpD,WAAWuB,KAobzB,OAvRAsiB,EAAYjqB,UAAUirB,SAAW,SAAUC,QAC1B,IAAXA,IACFA,EAAS,IAGX,IAAIF,EAAQ,IAAIf,EAAYnqB,KAAK4lB,QAAS,YAAS,CACjDyE,OAAQrqB,MACPorB,IAGH,OAFKprB,KAAK2qB,WAAU3qB,KAAK2qB,SAAW,IAAIpW,KACxCvU,KAAK2qB,SAASrmB,IAAI4mB,GACXA,GAWTf,EAAYjqB,UAAUmrB,YAAc,SAAUH,GACvClrB,KAAK2qB,UAIV3qB,KAAK2qB,SAAS1lB,OAAOimB,IAUvBf,EAAYjqB,UAAUorB,YAAc,SAAUC,EAAe1J,GAC3D,IAAIf,EAAQ9gB,KAERwrB,EAAmB,WACrB,OAAO3J,EAAaf,EAAM8E,UAI5B,OADA2F,EAAcjnB,IAAIknB,GACX,WACL,OAAOD,EAActmB,OAAOumB,KAmFhCrB,EAAYjqB,UAAUurB,SAAW,SAAU5J,GAEzC,OADK7hB,KAAKyqB,oBAAmBzqB,KAAKyqB,kBAAoB,IAAIlW,KACnDvU,KAAKsrB,YAAYtrB,KAAKyqB,kBAAmB5I,IAYlDsI,EAAYjqB,UAAUwrB,gBAAkB,SAAU7J,GAIhD,OAHK7hB,KAAK6qB,oBAAmB7qB,KAAK6qB,kBAAoB,IAAItW,KAE1DvU,KAAK0qB,iBAAiB7I,GACf7hB,KAAKsrB,YAAYtrB,KAAK6qB,kBAAmBhJ,IASlDsI,EAAYjqB,UAAUyrB,OAAS,SAAUC,GACvC5rB,KAAK4rB,cAAgBA,GAmBvBzB,EAAYjqB,UAAUkV,IAAM,SAAUvP,EAAGmP,QACxB,IAAXA,IACFA,GAAS,GAGNA,GAAWhV,KAAK4rB,cAGnB5rB,KAAK4rB,cAAc/lB,EAAG7F,KAAKwqB,iBAF3BxqB,KAAKwqB,gBAAgB3kB,EAAGmP,IAc5BmV,EAAYjqB,UAAUgV,IAAM,WAC1B,OAAOlV,KAAK4lB,SAWduE,EAAYjqB,UAAU2rB,YAAc,WAElC,OAAO7rB,KAAKuqB,iBACZvW,GAAkB1N,WAAWtG,KAAK4lB,SAAWtf,WAAWtG,KAAK2lB,MAAO3lB,KAAK+kB,WAAa,GAgBxFoF,EAAYjqB,UAAUyhB,MAAQ,SAAU2E,GACtC,IAAIxF,EAAQ9gB,KAGZ,OADAA,KAAK8hB,OACE,IAAIgK,SAAQ,SAAUC,GAC3BjL,EAAMkL,cAAgB1F,EAAUyF,MAC/BE,MAAK,WACN,OAAOnL,EAAMoL,qBAUjB/B,EAAYjqB,UAAU4hB,KAAO,WACvB9hB,KAAKgsB,eAAehsB,KAAKgsB,gBAC7BhsB,KAAKksB,kBASP/B,EAAYjqB,UAAUisB,YAAc,WAClC,QAASnsB,KAAKgsB,eAGhB7B,EAAYjqB,UAAUgsB,eAAiB,WACrClsB,KAAKgsB,cAAgB,MAavB7B,EAAYjqB,UAAUksB,QAAU,WAC9BpsB,KAAKyqB,mBAAqBzqB,KAAKyqB,kBAAkB4B,QACjDrsB,KAAK6qB,mBAAqB7qB,KAAK6qB,kBAAkBwB,QACjDrsB,KAAKqqB,QAAUrqB,KAAKqqB,OAAOgB,YAAYrrB,MACvCA,KAAK8hB,QAGAqI,EAzaT,GAgbA,SAASmC,GAAYvK,EAAMwK,GACzB,OAAO,IAAI,GAAYxK,EAAMwK,GAW/B,SAASC,GAAYzK,GACnB,IAAI0K,EAAM,iBAAO,MAMjB,OAJoB,OAAhBA,EAAI7G,UACN6G,EAAI7G,QAAU7D,KAGT0K,EAAI7G,QAGb,IA8MuD8G,GA9MnDC,GAAgB,SAAuB9kB,GACzC,OAAOA,aAAiB,IAKtB+kB,GAAe,GAAoB,CACrCxY,OAAQ,WACN,OAAO,MAETC,SAAU,SAAkBK,EAAOjQ,GAEjC,OAAOwhB,EADQxhB,EAAGwhB,UACFvR,MAIhBmY,GAEJ,WACE,SAASA,IACP7sB,KAAK8sB,YAAa,EAClB9sB,KAAK2H,OAAS,IAAIgO,IAClB3V,KAAK+sB,cAAgB,IAAIpX,IAuG3B,OApGAkX,EAAgB3sB,UAAUyE,IAAM,SAAUlB,GACxC,OAAOzD,KAAK2H,OAAOhD,IAAIlB,IAGzBopB,EAAgB3sB,UAAUkV,IAAM,SAAU3R,EAAKoE,GAC7C7H,KAAK2H,OAAOyN,IAAI3R,EAAKoE,GAEjB7H,KAAK8sB,YACP9sB,KAAKgtB,kBAAkBvpB,EAAKoE,IAIhCglB,EAAgB3sB,UAAUgV,IAAM,SAAUzR,EAAKwpB,GAC7C,IAAIplB,EAAQ7H,KAAK2H,OAAOuN,IAAIzR,GAO5B,YALc1B,IAAV8F,QAAwC9F,IAAjBkrB,IACzBplB,EAAQ,IAAI,GAAYolB,GACxBjtB,KAAKoV,IAAI3R,EAAKoE,IAGTA,GAGTglB,EAAgB3sB,UAAUyF,QAAU,SAAUpD,GAC5C,OAAOvC,KAAK2H,OAAOhC,QAAQpD,IAG7BsqB,EAAgB3sB,UAAU8sB,kBAAoB,SAAUvpB,EAAKoE,GAC3D,IAAIiZ,EAAQ9gB,KAMRktB,EAAsBrlB,EAAM6jB,iBAJjB,SAAkB7lB,GAC/B,OAAOib,EAAMvW,QAAUuW,EAAMvW,OAAO9G,EAAKoC,MASvCsnB,EAAsBtlB,EAAM4jB,UAJjB,SAAkB5lB,GAC/Bib,EAAMmF,UAAYnF,EAAMmF,SAAS7Q,IAAI3R,EAAKoC,MAKxC7F,KAAK+sB,cAAcpoB,IAAIlB,IACzBzD,KAAK+sB,cAAc7X,IAAIzR,EAAvBzD,GAGFA,KAAK+sB,cAAc3X,IAAI3R,GAAK,WAC1BypB,IACAC,QAIJN,EAAgB3sB,UAAUktB,YAAc,SAAUnH,GAChDjmB,KAAKimB,cAAWlkB,EAEZkkB,IACFjmB,KAAKimB,SAAW2G,GAAa,CAC3B3G,SAAUA,MAKhB4G,EAAgB3sB,UAAUmtB,qBAAuB,SAAUC,GACrDttB,KAAKstB,oBAAsBA,IAC7BttB,KAAKstB,kBAAoBA,EACzBttB,KAAKutB,4BAITV,EAAgB3sB,UAAUstB,qBAAuB,WAC/C,OAAOxtB,KAAKstB,mBAGdT,EAAgB3sB,UAAUqtB,wBAA0B,WAC9CvtB,KAAKuK,QACPvK,KAAKuK,OAAO,YAAavK,KAAKstB,oBAIlCT,EAAgB3sB,UAAUutB,MAAQ,SAAUljB,GAC1C,IAAIuW,EAAQ9gB,KAEZA,KAAK8sB,YAAa,EACdviB,IAAQvK,KAAKuK,OAASA,GAC1BvK,KAAK2H,OAAOhC,SAAQ,SAAUkC,EAAOpE,GACnC,OAAOqd,EAAMkM,kBAAkBvpB,EAAKoE,MAEtC7H,KAAKutB,2BAGPV,EAAgB3sB,UAAUwtB,QAAU,WAClC,IAAI5M,EAAQ9gB,KAEZA,KAAK2H,OAAOhC,SAAQ,SAAUgoB,EAAQlqB,GACpC,IAAImqB,EAAc9M,EAAMiM,cAAc7X,IAAIzR,GAE1CmqB,GAAeA,QAIZf,EA3GT,GA8GIgB,GAA0B,IAAItZ,IAAI,CAAC,cAAe,gBAElDuZ,GAAkB,SAAyBrZ,GAC7C,IAAIsZ,EAAevB,IAAY,WAC7B,IAAIviB,EAAM,IAAI4iB,GAQd,IAAK,IAAIppB,KAAOgR,EACVkY,GAAclY,EAAMhR,MAAUoqB,GAAwBlpB,IAAIlB,IAC5DwG,EAAImL,IAAI3R,EAAKgR,EAAMhR,IAIvB,OAAOwG,KAIT,OAFA8jB,EAAaX,YAAY3Y,EAAMwR,UAC/B8H,EAAaV,qBAAqB5Y,EAAM6Y,mBACjCS,GAGLC,GAAU,KACVC,GACM,WACN,OAAmB,OAAZD,IAFPC,GAII,WAEJD,GAAU,IANVC,GAQK,WAELD,IAAWA,GAAQroB,SAAQ,SAAUsP,GACnC,OAAOA,EAAOD,YAEhBgZ,GAAU,MAbVC,GAeI,SAAchZ,GAElB+Y,IAAWA,GAAQ9oB,KAAK+P,IASxB,GAAiB,SAAwBxQ,GAC3C,IAAIgoB,EAAMhoB,EAAGypB,SACTvmB,EAASlD,EAAGkD,OACZwmB,EAAW1pB,EAAG0pB,SAkBlB,OAjBA,qBAAU,WACE1B,EAAI7G,QAAmBwI,QACjC,IAAIC,EAAY,GAAO5B,EAAI7G,QAAS,CAClCrI,gBAAgB,EAChBvB,4BAA6BmS,IAS/B,OAPAxmB,EAAO8lB,OAAM,SAAUhqB,EAAKoE,GAC1BwmB,EAAUjZ,IAAI3R,EAAKoE,GAEfomB,MACFA,GAAuBI,MAGpB,WACL,OAAO1mB,EAAO+lB,aAEf,IACI,MAGLY,GAAqB,eAAK,IAY1BC,IAVmD7B,GAUd,SAAU7kB,GACjD,OAAOA,EAAMqN,OAVN,SAAUvN,GACf,IAAI6mB,EAAiB,GAIrB,OAHA7mB,EAAOhC,SAAQ,SAAUkC,EAAOpE,GAC9B,OAAO+qB,EAAe/qB,GAAOipB,GAAS7kB,MAEjC2mB,IAOP,GAAuB,IAAIja,IAAI,CAAC,UAAW,UAAW,YAEtD,GAAwB,SAA+B9Q,GACzD,OAAO,GAAqBkB,IAAIlB,IAG9B,GAAiB,SAAwBkE,EAAQ8mB,EAAWN,GAC9D,IAAIO,EAAoBH,GAAe5mB,GACnC2lB,EAAoB3lB,EAAO6lB,uBAQ/B,OANIF,IAGFoB,EAAkBnoB,UAAYkoB,EAAUloB,UAAY+mB,EAAkB,GAAImB,EAAUloB,WAAa+mB,GAG5FvR,GAAmB,YAAS,YAAS,GAAI0S,GAAYC,IAAqBP,IA6C/EQ,GAAoB,SAA2B9oB,GACjD,OAAOlG,MAAM6S,QAAQ3M,IAOnB+oB,GAA+B,SAAsC/oB,GAEvE,OAAO8oB,GAAkB9oB,GAAKA,EAAEA,EAAElF,OAAS,IAAM,EAAIkF,GAWnDgpB,GAAiB,CAACzoB,EAAQY,EAAID,EAASD,EAASI,EAAID,EAR7C,CACThF,KAAM,SAAc4D,GAClB,MAAa,SAANA,GAETQ,MAAO,SAAeR,GACpB,OAAOA,KAKP,GAAa,YAAegpB,GAAgB,CAACxmB,EAAOoB,IAEpDqlB,GAAgB,SAAuBjpB,GACzC,OAAO,SAAU4K,GACf,OAAOA,EAAKxO,KAAK4D,KAIjBkpB,GAAwB,SAA+BlpB,GACzD,OAAOgpB,GAAere,KAAKse,GAAcjpB,KAGvC,GAAe,SAAsBA,GACvC,OAAO,GAAW2K,KAAKse,GAAcjpB,KAGnCmpB,GAAoB,WACtB,MAAO,CACLve,KAAM,SACN4T,UAAW,IACXC,QAAS,GACTV,UAAW,GACXc,UAAW,KAIXuK,GAAmB,SAA0Blf,GAC/C,MAAO,CACLU,KAAM,SACN4T,UAAW,IACXC,QAAgB,IAAPvU,EAAW,IAAM,KAI1Bmf,GAAc,WAChB,MAAO,CACL9c,KAAM,SACNuU,SAAU,KAIV,GAAY,SAAmBhf,GACjC,MAAO,CACL8I,KAAM,YACNkW,SAAU,GACVhf,OAAQA,IAIRwnB,GAAqB,CACvBtgB,EAAGmgB,GACHlgB,EAAGkgB,GACHjgB,EAAGigB,GACHhV,OAAQgV,GACR/U,QAAS+U,GACT9U,QAAS8U,GACT7U,QAAS6U,GACT3U,OAAQ4U,GACR3U,OAAQ2U,GACR7U,MAAO6U,GACPlU,QAASmU,GACTzX,gBAAiByX,GACjB7mB,MAAO6mB,GACPzoB,QAASwoB,IAmCP,GAAO,SAAcxqB,GACvB,IAAIsL,EAAKtL,EAAGsL,GACR4W,EAAWliB,EAAGkiB,SAClB,OAAO,IAAO,SAAUliB,GACtB,IAAIyc,EAASzc,EAAGyc,OACZE,EAAW3c,EAAG2c,SAClBF,EAAOnR,GACP4W,EAAW,GAAMA,GAAUhF,MAAM,CAC/BP,SAAUA,IACPA,QAIL,GAA6B,SAAoCgO,GACnE,OAAIzvB,MAAM6S,QAAQ4c,IAENA,EAAWzuB,OAKdqM,GAJEoiB,EAAW,GACXA,EAAW,GACXA,EAAW,GACXA,EAAW,KAEW,kBAAfA,EAGT,EAAaA,GAGfA,GAGLC,GAAgB,SAAuBjd,GACzC,OAAOzS,MAAM6S,QAAQJ,IAA4B,kBAAZA,EAAK,IAiBxC,GAAe,SAAsB3O,EAAKoE,GAE5C,MAAY,WAARpE,MAIiB,kBAAVoE,IAAsBlI,MAAM6S,QAAQ3K,OAE1B,kBAAVA,IACX4B,EAAQxH,KAAK4F,IACZA,EAAMU,WAAW,WAehB+mB,GAAwB,SAA+BC,GACzD,OAAiB,IAAVA,GAGLC,GAAc,CAChBC,MAAO,GACPC,OAAQ,GACRC,UAAW,GACXC,QAAS,GACTC,KAAM,IAEJC,GAAyB,CAC3BL,MAAO,SAAelD,GACpB,GAAIA,EAAKna,KAAM,CACb,IAAIA,EAAOid,GAAc9C,EAAKna,MAAQma,EAAKna,KAAK,GAAKma,EAAKna,KAC1Dma,EAAKna,KAAO,GAA2BA,GAGzC,OAAOma,GAEToD,UAAW,SAAmBlrB,GAC5B,IAAIqL,EAAOrL,EAAGqL,KAGVyc,GAFK9nB,EAAGsL,GACGtL,EAAGwP,SACP,YAAOxP,EAAI,CAAC,OAAQ,KAAM,cAErC,GAAI8nB,EAAK5kB,QAA6B,OAAnB4kB,EAAK5kB,OAAO,GAAa,CAC1C,IAAIA,EAAS,YAAe4kB,EAAK5kB,QAEjCA,EAAO,GAAKmI,EACZyc,EAAK5kB,OAASA,EAQhB,OALI4kB,EAAKna,OACPma,EAAKnE,QAAUiH,GAAc9C,EAAKna,MAAQma,EAAKna,KAAKnI,IAAI,IAA8B,GAA2BsiB,EAAKna,OAGxHma,EAAKna,KAAO7G,GACLghB,IAeP,GAA0B,SAAiC9oB,EAAKsM,EAAIggB,GACtE,IAAIC,EAAQD,EAAuBA,EAAqBC,MAAQ,EAIhE,QAA6BjuB,IAAzBguB,IAhBoB,SAA6BtrB,GAC1CA,EAAGwrB,KACFxrB,EAAGurB,MACKvrB,EAAGyrB,cACDzrB,EAAG0rB,gBACF1rB,EAAG2rB,iBAJ1B,IAKIC,EAAa,YAAO5rB,EAAI,CAAC,OAAQ,QAAS,gBAAiB,kBAAmB,qBAElF,OAAOjF,OAAOujB,KAAKsN,GAAY1vB,OAQY,CAAoBovB,GAC7D,OAAO,YAAS,CACdC,MAAOA,GAtKc,SAA8BM,EAAUvgB,GACjE,IAAIwgB,EAQJ,OALEA,EADE5B,GAAkB5e,GACA,GAEAof,GAAmBmB,IAAanB,GAAmB1oB,QAGlE,YAAS,CACdsJ,GAAIA,GACHwgB,EAAkBxgB,IA4JhB,CAAqBtM,EAAKsM,IAG/B,IAAIygB,EAA4BT,EAAqBtsB,IAAQssB,EAAqBtpB,SAAWspB,EAE7F,OAAuC,IAAnCS,EAA0B/f,KACrB,CACLuf,MAAOQ,EAA0B3wB,eAAe,SAAW2wB,EAA0BR,MAAQA,EAC7FjgB,GAAI4e,GAAkB5e,GAAMA,EAAGA,EAAGpP,OAAS,GAAKoP,EAChDU,KAAM,QAECke,GAAkB5e,GACpB,YAAS,YAAS,CACvBpI,OAAQoI,EACR4W,SAAU,GACVqJ,MAAOA,EACP5d,KAAM,UACLoe,GAA4B,CAE7B/f,KAAM,cAGD,YAAS,CACdA,KAAM,QACNV,GAAIA,EACJigB,MAAOA,GACNQ,IAQH,GAAe,SAAsB/sB,EAAKoE,EAAO4C,EAAQ4lB,GAC3D,IAvIqDxqB,EAuIjD0L,EAAS1J,EAAMqN,MACfub,EAAqB,GAAahtB,EAAK8N,GACvCmf,EAAqB,GAAajtB,EAAKgH,GAKvChG,EAAK,GAAwBhB,EAAKgH,EAAQ4lB,GAC1C1nB,EAAKlE,EAAGgM,KACRA,OAAc,IAAP9H,EAAgB,QAAUA,EACjConB,EAAuB,YAAOtrB,EAAI,CAAC,SAGnCksB,EAAgBF,GAAsBC,EAAqBlB,GAAY/e,GAAQ,GAC/E8b,EAnBkB,SAA2B9b,EAAM8b,GACvD,OAAOuD,GAAuBrf,GAAQqf,GAAuBrf,GAAM8b,GAAQA,EAkBhEqE,CAAkBngB,EAAM,YAAS,CAC1CX,KAAMyB,EACN0C,SAAUpM,EAAMgkB,eACfkE,IAYH,QApKqDlqB,EA0J7B0mB,GAzJf1sB,eAAe,aAAegG,EAAEhG,eAAe,kBA0JlD0sB,EAAK5F,WACP4F,EAAK5F,SAAW2I,GAAsB/C,EAAK5F,WAGzC4F,EAAKxF,cACPwF,EAAKxF,YAAcuI,GAAsB/C,EAAKxF,eAI3C,CAAC4J,EAAepE,IASzB,SAAS,GAAe9oB,EAAKoE,EAAO4C,EAAQhG,GAC1C,IAAIkE,EAAKlE,EAAGurB,MACRa,OAAiB,IAAPloB,EAAgB,EAAIA,EAC9B0nB,EAAa,YAAO5rB,EAAI,CAAC,UAE7B,OAAOoD,EAAM8Z,OAAM,SAAUP,GAC3B,IAAIqE,EAEAhhB,EAAK,GAAahB,EAAKoE,EAAO4C,EAAQ4lB,GACtCS,EAAmBrsB,EAAG,GACtBkE,EAAKlE,EAAG,GACRssB,EAAapoB,EAAGqnB,MAChB3S,EAAU,YAAO1U,EAAI,CAAC,eAEP5G,IAAfgvB,IACFF,EAAUE,GAGZ,IAAIC,EAAU,WACZ,IAAI1K,EAAYwK,EAAiBzT,GAEjCoI,EAAkBa,EAAU3E,MAAM,CAChCT,OAAQ,SAAgBrb,GACtB,OAAOgC,EAAMuN,IAAIvP,IAEnBub,SAAUA,KAcd,OARIyP,EACFpL,EAAkB,GAAM6J,GAAsBuB,IAAUlP,MAAM,CAC5DP,SAAU4P,IAGZA,IAGK,WACDvL,GAAiBA,EAAgB3D,WAU3C,IAsDI,GAEJ,WACE,SAASmP,EAAuBxsB,GAC9B,IAAIqc,EAAQ9gB,KAER2H,EAASlD,EAAGkD,OACZupB,EAAsBzsB,EAAGysB,oBACzBC,EAAuB1sB,EAAG0sB,qBAO9BnxB,KAAKyU,MAAQ,GAKbzU,KAAKoxB,SAAW,GAKhBpxB,KAAKqxB,WAAa,GAKlBrxB,KAAKsxB,UAAY,GAKjBtxB,KAAKuxB,kBAAoB,GAKzBvxB,KAAKwxB,gBAAkB,IAAIjd,IAK3BvU,KAAKmsB,YAAc,IAAI5X,IAMvBvU,KAAKyxB,SAAW,SAAUhuB,GACxB,OAAQqd,EAAMnZ,OAAOhD,IAAIlB,IAG3BzD,KAAK2H,OAASA,EACd3H,KAAKkxB,oBAAsBA,EAC3BlxB,KAAKmxB,qBAAuBA,EAC5BnxB,KAAK2H,OAAOhC,SAAQ,SAAUkC,EAAOpE,GACnC,OAAOqd,EAAMuQ,WAAW5tB,GAAOoE,EAAMqN,SAkjBzC,OAziBA+b,EAAuB/wB,UAAUwxB,SAAW,SAAUjd,GACpDzU,KAAKyU,MAAQA,GAQfwc,EAAuB/wB,UAAUyxB,YAAc,SAAUP,GACnDA,IAAUpxB,KAAKoxB,SAAWA,IAQhCH,EAAuB/wB,UAAU0xB,qBAAuB,SAAUvB,GAC5DA,IAAYrwB,KAAK6xB,kBAAoBxB,IAU3CY,EAAuB/wB,UAAU4xB,UAAY,SAAU1C,EAAY3qB,GACjE,IAAIqc,EAAQ9gB,KAER2I,OAAY,IAAPlE,EAAgB,GAAKA,EAC1BoO,EAAKlK,EAAGsY,SACRA,OAAkB,IAAPpO,EAAgB,IAAI0B,IAAQ1B,EACvCkf,EAAWppB,EAAGopB,SAEd7U,EAAKld,KAAKgyB,eAAe5C,GACzB3kB,EAASyS,EAAGzS,OACZwnB,EAAgB/U,EAAG+U,cAGvB,OADAxnB,EAASzK,KAAKkyB,gBAAgB,YAAS,YAAS,GAAIznB,GAASwnB,IACtDzyB,OAAOujB,KAAKtY,GAAQ9E,SAAQ,SAAUlC,GAC3C,IAAIwd,EAAStc,IAAIlB,KACjBwd,EAAS3c,IAAIb,GAETgH,GAAQ,CACV,IAAI0nB,EAAcvD,GAA6BnkB,EAAOhH,IAEtD,GAAIqd,EAAMnZ,OAAOhD,IAAIlB,GAAM,CACzB,IAAIoE,EAAQiZ,EAAMnZ,OAAOuN,IAAIzR,GAE7BoE,GAASA,EAAMuN,IAAI+c,QAEnBrR,EAAMnZ,OAAOyN,IAAI3R,EAAK6oB,GAAY6F,IAG/BJ,IAAUjR,EAAMuQ,WAAW5tB,GAAO0uB,QAc7ClB,EAAuB/wB,UAAUgyB,gBAAkB,SAAUvqB,GAC3D,IAAIuqB,EAAkBlyB,KAAKyU,MAAMyd,gBACjC,OAAOA,EAAkBA,EAAgBvqB,GAAUA,GAcrDspB,EAAuB/wB,UAAUkyB,kBAAoB,SAAU3nB,GAC7D,IAAI4nB,EAAe7yB,OAAOujB,KAAKtY,GAAQ6nB,OAAOtyB,KAAKyxB,UAC/Cc,EAAeF,EAAa1xB,OAChC,GAAK4xB,EAEL,IAAK,IAAI/xB,EAAI,EAAGA,EAAI+xB,EAAc/xB,IAAK,CACrC,IAAIiD,EAAM4uB,EAAa7xB,GACnB2xB,EAAc1nB,EAAOhH,GACrBoE,EAAQ,KAGRlI,MAAM6S,QAAQ2f,KAChBtqB,EAAQsqB,EAAY,IAMR,OAAVtqB,IACFA,EAAQ7H,KAAKkxB,oBAAoBztB,IAId,kBAAVoE,GA3LR,cAAc5F,KA2LkC4F,GAEjDA,EAAQvB,WAAWuB,IACT,GAAaA,IAAU4B,EAAQxH,KAAKkwB,KAE9CtqB,EAAQ4B,EAAQe,kBAAkB2nB,IAGpCnyB,KAAK2H,OAAOyN,IAAI3R,EAAK6oB,GAAYzkB,IACjC7H,KAAKqxB,WAAW5tB,GAAOoE,IAS3BopB,EAAuB/wB,UAAU8xB,eAAiB,SAAUQ,GAC1D,IAAKA,EACH,MAAO,CACL/nB,YAAQ1I,EACRsuB,gBAAYtuB,EACZkwB,mBAAelwB,GA/PN,IAAoB4F,EAC/Bie,EA2BgB,oBAuOG4M,IAEnBA,EAAUA,EAAQxyB,KAAKyU,MAAMge,QArQE9qB,EAqQiB3H,KAAK2H,OApQrDie,EAAU,GACdje,EAAOhC,SAAQ,SAAUkC,EAAOpE,GAC9B,OAAOmiB,EAAQniB,GAAOoE,EAAMqN,SAEvB0Q,GAQS,SAAqBje,GACrC,IAAIsM,EAAW,GAIf,OAHAtM,EAAOhC,SAAQ,SAAUkC,EAAOpE,GAC9B,OAAOwQ,EAASxQ,GAAOoE,EAAMgkB,iBAExB5X,EAmP2D4X,CAAY7rB,KAAK2H,UAGjF,IAAIlD,EAAK+tB,EAAQnC,WAKjB,MAAO,CACLA,gBALsB,IAAP5rB,EAAgBzE,KAAK6xB,kBAAoBptB,EAMxDwtB,cALkBO,EAAQP,cAM1BxnB,OALW,YAAO+nB,EAAS,CAAC,aAAc,oBAa9CvB,EAAuB/wB,UAAUwyB,mBAAqB,WACpD,OAAK1yB,KAAKwxB,gBAAgBvY,KACnBrW,KAAKC,IAAIhC,MAAM+B,KAAMjD,MAAMmQ,KAAK9P,KAAKwxB,kBADL,GAczCP,EAAuB/wB,UAAUyyB,YAAc,SAAUvD,EAAYwD,GACnE5yB,KAAKsxB,UAAUsB,GAAiBxD,EAE5BpvB,KAAK2qB,UACP3qB,KAAK2qB,SAAShlB,SAAQ,SAAUulB,GAC9B,OAAOA,EAAMyH,YAAYvD,EAAYwD,OAU3C3B,EAAuB/wB,UAAU2yB,cAAgB,SAAUD,GACzD,IAAIE,EAAW9yB,KAAKsxB,UAAUsB,GAE9B,GAAIE,EACF,OAAO9yB,KAAK2hB,MAAMmR,EAAU,CAC1Bf,SAAUa,KAWhB3B,EAAuB/wB,UAAU6yB,cAAgB,SAAUH,GACzD,IAAI9R,EAAQ9gB,KASZ,GAPIA,KAAK2qB,UACP3qB,KAAK2qB,SAAShlB,SAAQ,SAAUulB,GAC9B,OAAOA,EAAM6H,cAAcH,MAIhB5yB,KAAKsxB,UAAUsB,GAC9B,CACA5yB,KAAKwxB,gBAAgBvsB,OAAO2tB,GAC5B,IAAII,EAAUhzB,KAAK0yB,qBAGnB,GAFA1yB,KAAKizB,mBAEDD,EACoBhzB,KAAKsxB,UAAU0B,IAClBhzB,KAAK6yB,cAAcG,GAIxC,IAAIE,EAAiBlzB,KAAKuxB,kBAAkBqB,GAC5C,GAAKM,EAAL,CACA,IAAIC,EAAkB,GAEtB,IAAK,IAAI1vB,KAAOzD,KAAKqxB,gBACStvB,IAAxBmxB,EAAezvB,KACjB0vB,EAAgB1vB,GAAOzD,KAAKqxB,WAAW5tB,IAI3CzD,KAAKozB,UACLpzB,KAAKgxB,QAAQmC,GAAiBlH,MAAK,WACjC,OAAOnL,EAAME,mBAQjBiQ,EAAuB/wB,UAAUW,MAAQ,SAAUuuB,GACjD,OAAIzvB,MAAM6S,QAAQ4c,GACTpvB,KAAKqzB,mBAAmBjE,GACA,kBAAfA,EACTpvB,KAAKqzB,mBAAmB,CAACjE,SAEhCpvB,KAAK8xB,UAAU1C,IAQnB6B,EAAuB/wB,UAAUmzB,mBAAqB,SAAUC,GAC9D,IAAIxS,EAAQ9gB,KAERihB,EAAW,IAAI1M,IAEA,YAAe+e,GAAkBrgB,UAEvCtN,SAAQ,SAAUlC,GAC7B,IAAIgB,EAAKqc,EAAMkR,eAAelR,EAAMsQ,SAAS3tB,IACzCgH,EAAShG,EAAGgG,OACZwnB,EAAgBxtB,EAAGwtB,cAEnBA,GACFnR,EAAMgR,UAAUG,EAAe,CAC7BhR,SAAUA,IAIVxW,GACFqW,EAAMgR,UAAUrnB,EAAQ,CACtBwW,SAAUA,IAIVH,EAAM6J,UAAY7J,EAAM6J,SAAS1R,MACnC6H,EAAM6J,SAAShlB,SAAQ,SAAUulB,GAC/B,OAAOA,EAAMmI,mBAAmBC,UAMxCrC,EAAuB/wB,UAAUyhB,MAAQ,SAAUyN,EAAY7C,GAC7D,IAWIjG,EArYuCzgB,EA0XvCib,EAAQ9gB,KAsBZ,YApBa,IAATusB,IACFA,EAAO,IAGLA,EAAKwF,UACP/xB,KAAKwxB,gBAAgBltB,IAAIioB,EAAKwF,UAGhC/xB,KAAKizB,iBAAiB1G,EAAKwF,UApYgBlsB,EAuYvBupB,EAClB9I,EAvYG3mB,MAAM6S,QAAQ3M,GAuYL7F,KAAKuzB,qBAAqBnE,EAAY7C,GACnB,kBAAf6C,EACJpvB,KAAKwzB,eAAepE,EAAY7C,GAEhCvsB,KAAKgxB,QAAQ5B,EAAY7C,GAGvCvsB,KAAKozB,UACE9M,EAAU2F,MAAK,WACpB,OAAOnL,EAAME,iBAIjBiQ,EAAuB/wB,UAAU8wB,QAAU,SAAUyC,EAAqBhvB,GACxE,IAAIqc,EAAQ9gB,KAER2I,OAAY,IAAPlE,EAAgB,GAAKA,EAC1BoO,EAAKlK,EAAGqnB,MACRA,OAAe,IAAPnd,EAAgB,EAAIA,EAC5BqK,EAAKvU,EAAGopB,SACRA,OAAkB,IAAP7U,EAAgB,EAAIA,EAC/BwW,EAAqB/qB,EAAG+qB,mBAExBvW,EAAKnd,KAAKgyB,eAAeyB,GACzBhpB,EAAS0S,EAAG1S,OACZ4lB,EAAalT,EAAGkT,WAChB4B,EAAgB9U,EAAG8U,cAMvB,GAJIyB,IACFrD,EAAaqD,IAGVjpB,EAAQ,OAAOqhB,QAAQC,UAS5B,GARAthB,EAASzK,KAAKkyB,gBAAgBznB,GAE1BwnB,IACFA,EAAgBjyB,KAAKkyB,gBAAgBD,IAGvCjyB,KAAKoyB,kBAAkB3nB,GAEnBzK,KAAKmxB,qBAAsB,CAC7B,IAAIwC,EAAa3zB,KAAKmxB,qBAAqB1mB,EAAQwnB,GACnDxnB,EAASkpB,EAAWlpB,OACpBwnB,EAAgB0B,EAAW1B,cAGzBF,IACF/xB,KAAKuxB,kBAAkBQ,GAAYtnB,GAGrCzK,KAAKoyB,kBAAkB3nB,GACvB,IAAImpB,EAAa,GAEjB,IAAK,IAAInwB,KAAOgH,EAAQ,CACtB,IAAI5C,EAAQ7H,KAAK2H,OAAOuN,IAAIzR,GAC5B,GAAKoE,GAAU4C,QAA0B1I,IAAhB0I,EAAOhH,GAAhC,CACA,IAAIowB,EAAcppB,EAAOhH,GAEpBsuB,IACH/xB,KAAKqxB,WAAW5tB,GAAOmrB,GAA6BiF,IAGlD7zB,KAAKmsB,YAAYxnB,IAAIlB,KACzBzD,KAAKmsB,YAAY7nB,IAAIb,GACrBmwB,EAAW1uB,KAAK,GAAezB,EAAKoE,EAAOgsB,EAAa,YAAS,CAC/D7D,MAAOA,GACNK,OAGL,IAAIyD,EAAgBhI,QAAQiI,IAAIH,GAChC,OAAO3B,EAAgB6B,EAAc7H,MAAK,WACxCnL,EAAMgR,UAAUG,EAAe,CAC7BF,SAAUA,OAET+B,GAGP7C,EAAuB/wB,UAAUqzB,qBAAuB,SAAUS,EAAezH,GAC/E,IAAIzL,EAAQ9gB,KAER4zB,EAAa,YAAeI,GAAe/gB,UAAUhJ,KAAI,SAAUgqB,GACrE,OAAOnT,EAAM0S,eAAeS,EAAO1H,MAGrC,OAAOT,QAAQiI,IAAIH,IAGrB3C,EAAuB/wB,UAAUszB,eAAiB,SAAUU,EAAc3H,GACxE,IAAIzL,EAAQ9gB,KAERiwB,GAAO,EACPC,EAAgB,EAChBC,EAAkB,EAClBC,EAAmB,EACnB2B,EAAWxF,GAAQA,EAAKwF,UAAY,EACpCS,EAAUxyB,KAAKoxB,SAAS8C,GACxBC,EAAgB3B,EAAU,WAC5B,OAAO1R,EAAMkQ,QAAQwB,EAASjG,IAC5B,WACF,OAAOT,QAAQC,WAEbqI,EAAwBp0B,KAAK2qB,SAAW,WAC1C,OAAO7J,EAAMuT,gBAAgBH,EAAchE,EAAeC,EAAiBC,EAAkB2B,IAC3F,WACF,OAAOjG,QAAQC,WAGjB,GAAIyG,GAAWxyB,KAAK2qB,SAAU,CAC5B,IAAI0F,EAAarwB,KAAKgyB,eAAeQ,GAASnC,WAE1CA,IACFJ,EAAOI,EAAWJ,MAAQA,EAC1BC,EAAgBG,EAAWH,eAAiBA,EAC5CC,EAAkBE,EAAWF,iBAAmBA,EAChDC,EAAmBC,EAAWD,kBAAoBA,GAItD,GAAIH,EAAM,CACR,IAAIxrB,EAAc,mBAATwrB,EAA4B,CAACkE,EAAeC,GAAyB,CAACA,EAAuBD,GAElGG,EAAO7vB,EAAG,GAEd,OAAO8vB,EAHK9vB,EAAG,MAGAwnB,KAAKqI,GAEpB,OAAOxI,QAAQiI,IAAI,CAACI,IAAiBC,OAIzCnD,EAAuB/wB,UAAUm0B,gBAAkB,SAAUH,EAAchE,EAAeC,EAAiBC,EAAkB2B,GAiB3H,QAhBsB,IAAlB7B,IACFA,EAAgB,QAGM,IAApBC,IACFA,EAAkB,QAGK,IAArBC,IACFA,EAAmB,QAGJ,IAAb2B,IACFA,EAAW,IAGR/xB,KAAK2qB,SACR,OAAOmB,QAAQC,UAGjB,IAAI6H,EAAa,GACbY,GAAsBx0B,KAAK2qB,SAAS1R,KAAO,GAAKkX,EAChDsE,EAA+C,IAArBrE,EAAyB,SAAU5vB,GAC/D,OAAOA,EAAI2vB,GACT,SAAU3vB,GACZ,OAAOg0B,EAAqBh0B,EAAI2vB,GASlC,OAPAxwB,MAAMmQ,KAAK9P,KAAK2qB,UAAUhlB,SAAQ,SAAU+uB,EAAel0B,GACzD,IAAI8lB,EAAYoO,EAAclB,eAAeU,EAAc,CACzDnC,SAAUA,EACV/B,MAAOE,EAAgBuE,EAAwBj0B,KAEjDozB,EAAW1uB,KAAKohB,MAEXwF,QAAQiI,IAAIH,IAGrB3C,EAAuB/wB,UAAUkzB,QAAU,WACzC,IAAIuB,EAAmB30B,KAAKyU,MAAMkgB,iBAClCA,GAAoBA,KAGtB1D,EAAuB/wB,UAAU8gB,WAAa,WAC5C,IAAI4T,EAAsB50B,KAAKyU,MAAMmgB,oBACrCA,GAAuBA,KAGzB3D,EAAuB/wB,UAAU20B,yBAA2B,SAAU9C,GAGpE,IAFA,IAAI+C,EAAe90B,KAAKsxB,UAAU3wB,OAEzBH,EAAIuxB,EAAW,EAAGvxB,EAAIs0B,EAAct0B,IAAK,CAChD,IAAIu0B,EAAmB/0B,KAAKuxB,kBAAkB/wB,GAE9C,GAAIu0B,EACF,IAAK,IAAItxB,KAAOsxB,EACd/0B,KAAKmsB,YAAY7nB,IAAIb,KAM7BwtB,EAAuB/wB,UAAU+yB,iBAAmB,SAAUlB,QAC3C,IAAbA,IACFA,EAAW,GAGb/xB,KAAKmsB,YAAYE,QAGb0F,EAAW/xB,KAAK0yB,sBAClB1yB,KAAK60B,yBAAyB9C,GAG5B/xB,KAAK2qB,UACP3qB,KAAK2qB,SAAShlB,SAAQ,SAAUulB,GAC9B,OAAOA,EAAM+H,iBAAiBlB,OAKpCd,EAAuB/wB,UAAU4hB,KAAO,WACtC9hB,KAAK2H,OAAOhC,SAAQ,SAAUkC,GAC5B,OAAOA,EAAMia,WASjBmP,EAAuB/wB,UAAUirB,SAAW,SAAU6J,GAC/Ch1B,KAAK2qB,WACR3qB,KAAK2qB,SAAW,IAAIpW,KAGtBvU,KAAK2qB,SAASrmB,IAAI0wB,GAGlBh1B,KAAKsxB,UAAU3rB,SAAQ,SAAUmtB,EAAUtyB,GACzCsyB,GAAYkC,EAASrC,YAAYG,EAAUtyB,OAI/CywB,EAAuB/wB,UAAUmrB,YAAc,SAAU2J,GAClDh1B,KAAK2qB,UAIV3qB,KAAK2qB,SAAS1lB,OAAO+vB,IAGvB/D,EAAuB/wB,UAAU+0B,cAAgB,WAC3Cj1B,KAAK2qB,UAAU3qB,KAAK2qB,SAAS0B,SAG5B4E,EA3mBT,GA4oBA,IAAI,GAEJ,WACE,SAASiE,IAMPl1B,KAAK8sB,YAAa,EAOlB9sB,KAAKm1B,kBAAoB,GAOzBn1B,KAAKo1B,kBAAoB,IAAI7gB,IAuK/B,OA5JA2gB,EAAkBh1B,UAAUyxB,YAAc,SAAUP,GAClDpxB,KAAKoxB,SAAWA,EAChBpxB,KAAKo1B,kBAAkBzvB,SAAQ,SAAUqvB,GACvC,OAAOA,EAASrD,YAAYP,OAYhC8D,EAAkBh1B,UAAU0xB,qBAAuB,SAAUvB,GAC3DrwB,KAAK6xB,kBAAoBxB,EACzBrwB,KAAKo1B,kBAAkBzvB,SAAQ,SAAUqvB,GACvC,OAAOA,EAASpD,qBAAqBvB,OAazC6E,EAAkBh1B,UAAUm1B,UAAY,SAAUL,GAChD,IAAIlU,EAAQ9gB,KAKZ,OAHAA,KAAKo1B,kBAAkB9wB,IAAI0wB,GACvBh1B,KAAKoxB,UAAU4D,EAASrD,YAAY3xB,KAAKoxB,UACzCpxB,KAAK6xB,mBAAmBmD,EAASpD,qBAAqB5xB,KAAK6xB,mBACxD,WACL,OAAO/Q,EAAMsU,kBAAkBnwB,OAAO+vB,KAwB1CE,EAAkBh1B,UAAUyhB,MAAQ,SAAUyN,EAAYsE,GACxD,IAAI5S,EAAQ9gB,KAEZ,GAAIA,KAAK8sB,WAAY,CACnB,IAAIwI,EAAe,GAOnB,OANAt1B,KAAKo1B,kBAAkBzvB,SAAQ,SAAUqvB,GACvC,IAAI1O,EAAY0O,EAASrT,MAAMyN,EAAY,CACzCsE,mBAAoBA,IAEtB4B,EAAapwB,KAAKohB,MAEbwF,QAAQiI,IAAIuB,GAEnB,OAAO,IAAIxJ,SAAQ,SAAUC,GAC3BjL,EAAMqU,kBAAkBjwB,KAAK,CAC3BohB,UAAW,CAAC8I,EAAYsE,GACxB3H,QAASA,QA2BjBmJ,EAAkBh1B,UAAUkV,IAAM,SAAUga,GAE1C,OADUpvB,KAAK8sB,WACR9sB,KAAKo1B,kBAAkBzvB,SAAQ,SAAUqvB,GAC9C,OAAOA,EAASn0B,MAAMuuB,OAc1B8F,EAAkBh1B,UAAU4hB,KAAO,WACjC9hB,KAAKo1B,kBAAkBzvB,SAAQ,SAAUqvB,GACvC,OAAOA,EAASlT,WAUpBoT,EAAkBh1B,UAAUutB,MAAQ,WAClC,IAAI3M,EAAQ9gB,KAEZA,KAAK8sB,YAAa,EAClB9sB,KAAKm1B,kBAAkBxvB,SAAQ,SAAUlB,GACvC,IAAI6hB,EAAY7hB,EAAG6hB,UACfyF,EAAUtnB,EAAGsnB,QACjB,OAAOjL,EAAMa,MAAM9gB,MAAMigB,EAAOwF,GAAW2F,KAAKF,OAUpDmJ,EAAkBh1B,UAAUwtB,QAAU,WACpC1tB,KAAK8sB,YAAa,EAClB9sB,KAAK8hB,QAGAoT,EA5LT,GAuMIK,GAA+B,wBAAc,MAK7CC,GAA6B,wBAAc,CAC7CC,QAAQ,IAGNC,GAAiB,SAAwB7vB,GAC3C,MAAoB,kBAANA,GAAkBlG,MAAM6S,QAAQ3M,IAG5C8vB,GAAsB,SAA6B9vB,GACrD,OAAOA,aAAa,IASlB,GAAmB,SAA0B+vB,EAAeZ,EAAUrtB,EAAQwmB,EAAU1pB,QACzE,IAAb0pB,IACFA,GAAW,GAGb,IAMIxlB,EAQAktB,EAdAC,EAAUrxB,EAAGqxB,QACb9E,EAAUvsB,EAAGusB,QACbI,EAAW3sB,EAAG2sB,SACd2E,EAAWtxB,EAAGsxB,SACdC,EAAavxB,EAAGuxB,WAIhBC,EAAkB,qBAAWV,SAEgDxzB,KAAjD,QAA1B4G,EAAKstB,SAAoC,IAAPttB,OAAgB,EAASA,EAAGmtB,WAClEA,EAAUG,EAAgBH,UAKZ,IAAZA,GAAsBH,GAAoB3E,GAEhB,mBAAZ8E,IAChBD,EAAeC,GAFfD,EAAe7E,EAOjB,IAAIlE,EAAa,kBAAO,GAMpBoJ,EAA0B9E,GAAYsE,GAAe1E,IAAY0E,GAAeK,IAAaL,GAAeM,IAAeL,GAAoB3E,GAE/ImF,EAAgBT,GAAeG,GAAgBA,EAAeD,EAAcE,QAG5EM,EAAgBV,GAAe1E,GAAWA,EAAU4E,EAAc5E,QAGlEqF,EAAoBlI,EAAWgI,EAAgB,KAK/CG,EAAoBJ,GAA2BR,GAAeU,GAAiBA,EAAgB,KAI/FG,EAAU,mBAAQ,WACpB,MAAO,CACLvB,SAAUkB,EAA0BlB,EAAWY,EAAcZ,SAC7Dc,QAASK,EACTnF,QAASoF,EACTzuB,OAAQA,EACRmlB,WAAYA,EACZ0J,gBAAiBZ,EAAcY,mBAEhC,CAACH,EAAmBC,EAAmBV,EAAcY,kBAYxD,OAVAD,EAAQd,OAAStH,EAnTnB,SAAiC5rB,EAAUk0B,QACnB,IAAlBA,IACFA,GAAgB,GAGlB,IAAIC,EAAkB,kBAAO,KAExBD,GAAiBA,GAAiBC,EAAgB9Q,UACrDrjB,IAGFm0B,EAAgB9Q,SAAU,EA2S1B+Q,EAAwB,WACtB,IAAIC,EAAiBf,GAAgBD,EAAcE,QACnDc,GAAkB5B,EAASn0B,MAAM+1B,MAC/BzI,GACJ,qBAAU,WACRrB,EAAWlH,SAAU,IACpB,IACI2Q,GAgBT,SAASM,GAA0BzL,EAAQ3W,EAAOqiB,GAChD,IAAI1F,EAAW3c,EAAM2c,SACjBf,EAAa5b,EAAM4b,WACnB0G,EAAiB,qBAAWvB,IAAeR,SAC3CiB,EAAkB,qBAAWV,IAC7BP,EAAWxI,IAAY,WACzB,OAAO,IAAI,GAAuBpB,MA6BpC,OA1BK6K,IAAmBA,EAAgBe,YACtChC,EAASC,gBACTD,EAAStD,SAASjd,GAClBugB,EAASrD,YAAYP,GACrB4D,EAASpD,qBAAqBvB,IAKhC,qBAAU,WACJyG,GAA6BC,GAC/BA,EAAe5L,SAAS6J,MAG5B,qBAAU,WACR,OAAO,WAIqBvgB,EAAMmgB,oBAAhC,IACIqC,EAAe,YAAOxiB,EAAO,CAAC,wBAElCugB,EAAStD,SAASuF,GAClBF,GAAkBA,EAAe1L,YAAY2J,MAE9C,IACIA,EAGT,IAAIkC,GAA4B,SAAmCzyB,GACjE,IAAIusB,EAAUvsB,EAAGusB,QACbI,EAAW3sB,EAAG2sB,SACdzoB,EAAKlE,EAAG0yB,QAEZ,YADqB,IAAPxuB,GAAuBA,MACjByoB,KAAcJ,GAAWA,aAAmB,KAoClE,IAAI,GAAwB,SAA+BvsB,GACzD,IAAI2yB,EAAyB3yB,EAAG2yB,uBAC5BC,EAA8B5yB,EAAG4yB,4BACjCC,EAAkB7yB,EAAG6yB,gBAEzB,SAASC,EAAgB9iB,EAAO+iB,GAC9B,IAAI/K,EAjCR,SAAwB+K,GAKtB,IAAI/K,EAAO+K,GAAsC,oBAAhBA,EAA4CA,EAAf,iBAAO,MAerE,OATIA,GAAsC,oBAAhBA,GACxB,qBAAU,WAER,OADAA,EAAY/K,EAAI7G,SACT,WACL,OAAO4R,EAAY,SAEpB,IAGE/K,EAaKgL,CAAeD,GACrB5B,EAAgB,qBAAWJ,IAC3BrH,EAAWyH,EAAcH,QAAUhhB,EAAMghB,SAAU,EACnD9tB,EAASmmB,GAAgBrZ,GACzBkC,EA3/Cc,SAAyBhP,EAAQ8mB,EAAWN,EAAU+D,QACxD,IAAdzD,IACFA,EAAY,IAGd,IAAI9X,EAAQ,GACR+gB,EAAmB,iBAAO,IAAI9R,QAElC,IAAK,IAAIniB,KAAOgrB,EAAW,CACzB,IAAIkJ,EAAYlJ,EAAUhrB,GAEtBkpB,GAAcgL,GAEhBhwB,EAAOyN,IAAI3R,EAAKk0B,GACNxJ,IAAa/W,GAAgB3T,KAAQ,GAAsBA,GAqBrEkT,EAAMlT,GAAOk0B,GAbRhwB,EAAOhD,IAAIlB,GAKVk0B,IAAcD,EAAiBj0B,IACrBkE,EAAOuN,IAAIzR,GACjB2R,IAAIuiB,GALZhwB,EAAOyN,IAAI3R,EAAK6oB,GAAYqL,IAS9BD,EAAiBj0B,GAAOk0B,GAM5B,OAAOzF,EAAkBA,EAAgBvb,GAASA,EAo9CpC,CAAgBhP,EAAQ8M,EAAMkC,MAAOwX,EAAU1Z,EAAMyd,iBAC7D0F,EAAuBV,GAA0BziB,GAIjDugB,EAAW6B,GAHMrK,IAAY,WAC/B,OAAO4K,EAAuB3K,EAAK9kB,MAEoB8M,EAAOmjB,GAC5DrB,EAAU,GAAiBX,EAAeZ,EAAUrtB,EAAQwmB,EAAU1Z,GACtEojB,EAAgB1J,EAAW,KAAOkJ,EAA4B5K,EAAK9kB,EAAQ8M,EAAOmhB,EAAeZ,EAAU4C,GAC3GE,EAAoBR,EAAgB7K,EAAK9V,EAAOhP,EAAQ8M,EAAO0Z,GACnE,OAAoB,wBAAc,WAAU,KAAmB,wBAAcqH,GAAcuC,SAAU,CACnGlwB,MAAO0uB,GACNuB,GAAiC,wBAAc,WAAU,KAAmB,wBAAcxJ,GAAO,CAClGJ,SAAUzB,EACV9kB,OAAQA,EACRwmB,SAAUA,IACR0J,IAGN,OAAoB,qBAAWN,IAY7BS,GAAc,CAAC,UAAW,SAAU,WAAY,OAAQ,OAAQ,UAAW,UAAW,gBAAiB,sBAAuB,cAAe,mBAAoB,oBAAqB,oBAAqB,iBAAkB,eAAgB,UAAW,UAAW,UAAW,UAAW,UAAW,iBAAkB,UAAW,UAAW,cAAe,eAAgB,WAAY,eAAgB,qBAAsB,cAAe,SAAU,eAAgB,SAAU,gBAAiB,IAAK,QAAS,OAAQ,iBAAkB,SAAU,OAAQ,WAAY,OAAQ,UAAW,UAAW,WAAY,iBAAkB,OAAQ,OAAQ,MAAO,SAAU,SAAU,OAAQ,WAAY,QAAS,MAAO,QAKlrBC,GAAmC,wBAAc,CACnDC,mBAAoB,SAA4Bt4B,GAC9C,OAAOA,KA2BX,SAASu4B,GAAiB51B,GACxB,OAAO,qBAAU,WACf,OAAO,WACL,OAAOA,OAER,IAGL,SAAS61B,GAAY3tB,EAAQwe,EAAWoP,EAAShb,GAC/C,GAAKgb,EAEL,OADA5tB,EAAOye,iBAAiBD,EAAWoP,EAAShb,GACrC,WACL,OAAO5S,EAAO0e,oBAAoBF,EAAWoP,EAAShb,IAoC1D,SAASib,GAAaC,GAEpB,MAA4B,qBAAjBC,cAAgCD,aAAiBC,eAC1B,UAAtBD,EAAME,aAGXF,aAAiBG,WAG1B,SAASC,GAAaJ,GAEpB,QADmBA,EAAM1O,QAqB3B,IAAI+O,GAAmB,CACrBrP,MAAO,EACPC,MAAO,GAgBT,SAASqP,GAAep0B,GACtB,IAAIkE,EAAKlE,EAAG8kB,MACRA,OAAe,IAAP5gB,EAAgB,EAAIA,EAC5BkK,EAAKpO,EAAG+kB,MAEZ,MAAO,CACL3a,EAAG0a,EACHza,OAHiB,IAAP+D,EAAgB,EAAIA,GAOlC,SAASimB,GAAiBP,GACxB,MAAO,CACLjpB,MAAOqpB,GAAaJ,IA1BAx3B,EA0BwBw3B,EAvB1C9zB,EAFe1D,EAAE8oB,QAAQ,IAAM9oB,EAAEg4B,eAAe,IAE3BH,GAIlB,CACL/pB,EAJUpK,EAAG8kB,MAKbza,EAJUrK,EAAG+kB,QAqBwCqP,GAAeN,IA1BxE,IAAwBx3B,EAGlB0D,EA2BN,IAmEIu0B,GAnEAC,GAAc,SAAqBZ,EAASa,GAK9C,QAJmC,IAA/BA,IACFA,GAA6B,GAG1Bb,EAAL,CAEA,IAAIc,EAAW,SAAkBZ,GAC/B,OAAOF,EAAQE,EAAOO,GAAiBP,KAGzC,OAAOW,EA1DT,SAA8BE,GAC5B,GAAKA,EACL,OAAO,SAAUb,GACf,IAAID,EAAeC,aAAiBG,aACZJ,GAAgBA,GAAiC,IAAjBC,EAAMc,SAG5DD,EAAab,IAmDmBe,CAAqBH,GAAYA,IAGnE,GAA8B,qBAAX92B,OAcnBk3B,GAAkB,CACpBC,YAAa,YACbC,YAAa,YACbC,UAAW,UACXC,cAAe,cACfC,YAAa,YACbC,WAAY,WACZC,aAAc,aACdC,aAAc,cAEZC,GAAkB,CACpBR,YAAa,aACbC,YAAa,YACbC,UAAW,WACXC,cAAe,eAGjB,SAASM,GAAoBC,GAC3B,OA7BO,IAAsC,OAAzB73B,OAAO83B,cA8BlBD,EA1BF,IAAqC,OAAxB73B,OAAO+3B,aA4BlBJ,GAAgBE,GAxBlB,IAAoC,OAAvB73B,OAAOg4B,YA0BlBd,GAAgBW,GAGlBA,EAGT,SAASI,GAAgB7vB,EAAQwe,EAAWoP,EAAShb,GACnD,OAAO+a,GAAY3tB,EAAQwvB,GAAoBhR,GAAYgQ,GAAYZ,EAAuB,gBAAdpP,GAA8B5L,GAGhH,SAASkd,GAAgB9N,EAAKxD,EAAWoP,EAAShb,GAChD,OA1IF,SAAqBoP,EAAKxD,EAAWoP,EAAShb,GAC5C,qBAAU,WACR,IAAIC,EAAUmP,EAAI7G,QAElB,GAAIyS,GAAW/a,EACb,OAAO8a,GAAY9a,EAAS2L,EAAWoP,EAAShb,KAEjD,CAACoP,EAAKxD,EAAWoP,EAAShb,IAmItBmd,CAAY/N,EAAKwN,GAAoBhR,GAAYgQ,GAAYZ,EAAuB,gBAAdpP,GAA8B5L,IAO7G,SAAW2b,GAETA,EAAMyB,SAAW,SAAUl5B,EAAGhC,GAC5B,MAAO,CACLsP,EAAGtN,EAAEsN,EAAItP,EAAEsP,EACXC,EAAGvN,EAAEuN,EAAIvP,EAAEuP,IAMfkqB,EAAM0B,WAAa,SAAUC,GAC3B,IAAIC,EAeJ,OAAO,SAAUn2B,GACf,IAAIoK,EAAIpK,EAAGoK,EACPC,EAAIrK,EAAGqK,EACP+rB,OAdS94B,IAAT64B,EAA2BA,EAG7BA,EADsB,kBAAbD,EACF3kB,SAAS8kB,eAAeH,GAExBA,EAUT,GAAKE,EAAL,CACA,IAAIE,EAAOF,EAAU3a,wBACrB,MAAO,CACLrR,EAAGA,EAAIksB,EAAK1hB,KAAOhX,OAAO24B,QAC1BlsB,EAAGA,EAAIisB,EAAK7hB,IAAM7W,OAAO44B,YAnCjC,CAuCGjC,KAAUA,GAAQ,KAErB,IAAIkC,IAA0B,EACM,qBAAX74B,QAGvB2T,SAASkT,iBAAiB,aAAa,SAAUqP,GAC3C2C,IACF3C,EAAM4C,mBAEP,CACDxR,SAAS,IAIb,IAIIyR,GAAwB,WAC1B,OAAOF,IAA0B,GAO/B,GAEJ,WACE,SAASG,EAAW9C,EAAO+C,EAAU72B,GACnC,IAAIqc,EAAQ9gB,KAERk4B,QAA6B,IAAPzzB,EAAgB,GAAKA,GAAIyzB,mBAsDnD,GAjDAl4B,KAAKu7B,WAAa,KAKlBv7B,KAAKw7B,cAAgB,KAKrBx7B,KAAKy7B,kBAAoB,KAKzBz7B,KAAKs7B,SAAW,GAEhBt7B,KAAK07B,YAAc,WACjB,GAAM5a,EAAM0a,eAAiB1a,EAAM2a,kBAAnC,CACA,IAAIE,EAAOC,GAAW9a,EAAM2a,kBAAmB3a,EAAM+a,SACjDC,EAAoC,OAArBhb,EAAMya,WAIrBQ,EAA0BtsB,GAASksB,EAAKzd,OAAQ,CAClDrP,EAAG,EACHC,EAAG,KACC,EACN,GAAKgtB,GAAiBC,EAAtB,CACA,IAAIzsB,EAAQqsB,EAAKrsB,MACb9M,EAAYoD,IAAepD,UAE/Bse,EAAM+a,QAAQ32B,KAAK,YAAS,YAAS,GAAIoK,GAAQ,CAC/C9M,UAAWA,KAGb,IAAIiC,EAAKqc,EAAMwa,SACXlI,EAAU3uB,EAAG2uB,QACb4I,EAASv3B,EAAGu3B,OAEXF,IACH1I,GAAWA,EAAQtS,EAAM0a,cAAeG,GACxC7a,EAAMya,WAAaza,EAAM0a,eAG3BQ,GAAUA,EAAOlb,EAAM0a,cAAeG,QAIpChD,GAAaJ,IAAUA,EAAM1O,QAAQlpB,OAAS,GAAlD,CACAX,KAAKs7B,SAAWA,EAChBt7B,KAAKk4B,mBAAqBA,EAC1B,IACI+D,EAAcC,GADPpD,GAAiBP,GACWv4B,KAAKk4B,oBACxC5oB,EAAQ2sB,EAAY3sB,MACpB9M,EAAYoD,IAAepD,UAC/BxC,KAAK67B,QAAU,CAAC,YAAS,YAAS,GAAIvsB,GAAQ,CAC5C9M,UAAWA,KAEb,IAAI25B,EAAiBb,EAASa,eAC9BA,GAAkBA,EAAe5D,EAAOqD,GAAWK,EAAaj8B,KAAK67B,UACrE,IAAIO,EAAsB9B,GAAgBj4B,OAAQ,eAAe,SAAUk2B,EAAOoD,GAChF,OAAO7a,EAAMub,kBAAkB9D,EAAOoD,MAEpCW,EAAoBhC,GAAgBj4B,OAAQ,aAAa,SAAUk2B,EAAOoD,GAC5E,OAAO7a,EAAMyb,gBAAgBhE,EAAOoD,MAGtC37B,KAAKw8B,gBAAkB,WACrBJ,GAAuBA,IACvBE,GAAqBA,MAmCzB,OA/BAjB,EAAWn7B,UAAUm8B,kBAAoB,SAAU9D,EAAOoD,GACxD37B,KAAKw7B,cAAgBjD,EACrBv4B,KAAKy7B,kBAAoBS,GAAeP,EAAM37B,KAAKk4B,oBAE/CI,GAAaC,IAA4B,IAAlBA,EAAMkE,QAC/Bz8B,KAAKu8B,gBAAgBhE,EAAOoD,GAK9B,EAAKza,OAAOlhB,KAAK07B,aAAa,IAGhCL,EAAWn7B,UAAUq8B,gBAAkB,SAAUhE,EAAOoD,GACtD37B,KAAK08B,MACL,IAAIC,EAAQ38B,KAAKs7B,SAASqB,MAC1B,GAAKA,EAAL,CACA,IAAIC,EAAUhB,GAAWM,GAAeP,EAAM37B,KAAKk4B,oBAAqBl4B,KAAK67B,SAC7Ec,GAASA,EAAMpE,EAAOqE,KAGxBvB,EAAWn7B,UAAU28B,eAAiB,SAAUvB,GAC9Ct7B,KAAKs7B,SAAWA,GAGlBD,EAAWn7B,UAAUw8B,IAAM,WACzB18B,KAAKw8B,iBAAmBx8B,KAAKw8B,kBAC7Bl3B,EAAW4b,OAAOlhB,KAAK07B,aACvBN,MAGKC,EAlHT,GAqHA,SAASa,GAAeP,EAAMzD,GAC5B,OAAOA,EAAqB,CAC1B5oB,MAAO4oB,EAAmByD,EAAKrsB,QAC7BqsB,EAGN,SAASC,GAAWn3B,EAAIo3B,GACtB,IAAIvsB,EAAQ7K,EAAG6K,MACf,MAAO,CACLA,MAAOA,EACPpM,MAAO81B,GAAMyB,SAASnrB,EAAOwtB,GAAgBjB,IAC7C3d,OAAQ8a,GAAMyB,SAASnrB,EAAOytB,GAAiBlB,IAC/C5nB,SAAU+oB,GAAcnB,EAAS,KAIrC,SAASkB,GAAiBlB,GACxB,OAAOA,EAAQ,GAGjB,SAASiB,GAAgBjB,GACvB,OAAOA,EAAQA,EAAQl7B,OAAS,GAGlC,SAASq8B,GAAcnB,EAAS9W,GAC9B,GAAI8W,EAAQl7B,OAAS,EACnB,MAAO,CACLkO,EAAG,EACHC,EAAG,GAQP,IAJA,IAAItO,EAAIq7B,EAAQl7B,OAAS,EACrBs8B,EAAmB,KACnBC,EAAYJ,GAAgBjB,GAEzBr7B,GAAK,IACVy8B,EAAmBpB,EAAQr7B,KAEvB08B,EAAU16B,UAAYy6B,EAAiBz6B,UAAY8sB,GAAsBvK,MAI7EvkB,IAGF,IAAKy8B,EACH,MAAO,CACLpuB,EAAG,EACHC,EAAG,GAIP,IAAIquB,GAAQD,EAAU16B,UAAYy6B,EAAiBz6B,WAAa,IAEhE,GAAa,IAAT26B,EACF,MAAO,CACLtuB,EAAG,EACHC,EAAG,GAIP,IAAIoX,EAAkB,CACpBrX,GAAIquB,EAAUruB,EAAIouB,EAAiBpuB,GAAKsuB,EACxCruB,GAAIouB,EAAUpuB,EAAImuB,EAAiBnuB,GAAKquB,GAW1C,OARIjX,EAAgBrX,IAAMuuB,MACxBlX,EAAgBrX,EAAI,GAGlBqX,EAAgBpX,IAAMsuB,MACxBlX,EAAgBpX,EAAI,GAGfoX,EA2DT,IAAImX,GAAgB,SAASA,EAAchT,EAAQa,GACjD,QAAKA,IAEMb,IAAWa,GAGbmS,EAAchT,EAAQa,EAAMoS,iBAInC,GAAQ,CAAC,aAAc,WAAY,aAEnCC,GAAqB,SAA4BC,GACnD,OAAO,GAAMx8B,QAAQw8B,GAAW,GAGlC,SAASC,GAAWvD,GAClB,IAAIwD,EAAO,KACX,OAAO,WAKL,OAAa,OAATA,IACFA,EAAOxD,EALM,WACbwD,EAAO,QAYb,IAAIC,GAAuBF,GAAW,kBAClCG,GAAqBH,GAAW,gBAEpC,SAASI,GAAcC,GACrB,IAAIJ,GAAO,EAEX,GAAa,MAATI,EACFJ,EAAOE,UACF,GAAa,MAATE,EACTJ,EAAOC,SACF,CACL,IAAII,EAAmBJ,KACnBK,EAAiBJ,KAEjBG,GAAoBC,EACtBN,EAAO,WACLK,IACAC,MAIED,GAAkBA,IAClBC,GAAgBA,KAIxB,OAAON,EAGT,IAAIO,GAAqBV,GAAmB,YAuE5C,IAAIW,GAAgBX,GAAmB,cAEnCY,GAAc,SAAqBhF,GACrC,OAAO,SAAUZ,EAAOoD,GAClBrD,GAAaC,IAAQY,EAASZ,EAAOoD,KA6C7C,SAASyC,GAAY3pB,EAAOgY,IAhO5B,SAAuBhoB,EAAIgoB,GACzB,IAAI4R,EAAQ55B,EAAG45B,MACXC,EAAa75B,EAAG65B,WAChBC,EAAW95B,EAAG85B,SACdC,EAAoB/5B,EAAG+5B,kBACvBC,EAAeJ,GAASC,GAAcC,GAAYC,EAClDE,EAAa,iBAAO,MACpBxG,EAAqB,qBAAWD,IAAqBC,mBACrDoD,EAAW,CACba,eAAgBqC,EAChBpL,QAASkL,EACTtC,OAAQqC,EACR1B,MAAO,SAAepE,EAAOoD,GAC3B+C,EAAW9Y,QAAU,KACrB2Y,GAAYA,EAAShG,EAAOoD,KAGhC,qBAAU,WACmB,OAAvB+C,EAAW9Y,SACb8Y,EAAW9Y,QAAQiX,eAAevB,MAUtCf,GAAgB9N,EAAK,cAAegS,GANpC,SAAuBlG,GACrBmG,EAAW9Y,QAAU,IAAI,GAAW2S,EAAO+C,EAAU,CACnDpD,mBAAoBA,MAKxBC,IAAiB,WACf,OAAOuG,EAAW9Y,SAAW8Y,EAAW9Y,QAAQ8W,SAkMlDiC,CAAclqB,EAAOgY,GAnHvB,SAAuBhoB,EAAIgoB,GACzB,IAAImS,EAAQn6B,EAAGm6B,MACXC,EAAap6B,EAAGo6B,WAChBC,EAAcr6B,EAAGq6B,YACjB/I,EAAWtxB,EAAGsxB,SACdf,EAAWvwB,EAAGuwB,SACd+J,EAAkBH,GAASC,GAAcC,GAAe/I,EACxDiJ,EAAY,kBAAO,GACnBC,EAA6B,iBAAO,MAExC,SAASC,IACPD,EAA2BrZ,SAAWqZ,EAA2BrZ,UACjEqZ,EAA2BrZ,QAAU,KAGnCmQ,GAAYf,GACdA,EAASrC,YAAYoD,EAAUkI,IAKjC,IAAIkB,EAAc,iBAAO,MAEzBA,EAAYvZ,QAAU,SAAU2S,EAAOoD,GACrC,IAAIre,EAAUmP,EAAI7G,QAElB,GADAsZ,IACKF,EAAUpZ,SAAYtI,EAA3B,CACA0hB,EAAUpZ,SAAU,EAEhBoP,GAAYe,GACdf,EAASjC,cAAckL,IAKzB,IAAImB,EAAkBvB,IAAc,GAC/BuB,IACLA,IAEK/B,GAAc/f,EAASib,EAAM9tB,QAGhCm0B,GAASA,EAAMrG,EAAOoD,GAFtBmD,GAAeA,EAAYvG,EAAOoD,MAqBtCpB,GAAgB9N,EAAK,cAAesS,EAfpC,SAAuBxG,EAAOoD,GAC5BuD,IACAD,EAA2BrZ,QAAU0U,GAAgBj4B,OAAQ,aAAa,SAAUk2B,EAAOoD,GACzF,OAAOwD,EAAYvZ,QAAQ2S,EAAOoD,MAEtBlP,EAAI7G,UACFoZ,EAAUpZ,UAC1BoZ,EAAUpZ,SAAU,EACpBiZ,GAAcA,EAAWtG,EAAOoD,GAE5B3G,GAAYe,GACdf,EAASnC,cAAcoL,WAI2Cl8B,GACtEo2B,GAAiB+G,GAsDjBG,CAAc5qB,EAAOgY,GApCvB,SAAyBhoB,EAAIgoB,GAC3B,IAAIuJ,EAAavxB,EAAGuxB,WAChBsJ,EAAe76B,EAAG66B,aAClBC,EAAa96B,EAAG86B,WAChBvK,EAAWvwB,EAAGuwB,SAEdgB,GAAchB,GAChBA,EAASrC,YAAYqD,EAAYkI,IAGnC3D,GAAgB9N,EAAK,eAAgB0R,IAAY,SAAU5F,EAAOoD,GAC5D2D,GAAcA,EAAa/G,EAAOoD,GAElC3F,GAAchB,GAChBA,EAASnC,cAAcqL,QAG3B3D,GAAgB9N,EAAK,eAAgB0R,IAAY,SAAU5F,EAAOoD,GAC5D4D,GAAYA,EAAWhH,EAAOoD,GAE9B3F,GAAchB,GAChBA,EAASjC,cAAcmL,QAgB3BsB,CAAgB/qB,EAAOgY,GAGzB,IAAIgT,GAA0B,SAAiCC,GAC7D,OAAO,SAAUjrB,GAEf,OADAirB,EAAKjrB,GACE,OAIPkrB,GAAe,CAAC,QAAS,aAAc,WAAY,oBAAqB,QAAS,aAAc,cAAe,WAAY,aAAc,eAAgB,cACxJC,GAAW,CACbn8B,IAAK,WACLo8B,aAAc,SAAsBprB,GAClC,OAAOkrB,GAAavc,MAAK,SAAU3f,GACjC,OAAOgR,EAAM5U,eAAe4D,OAGhCq8B,UAAWL,IAAwB,SAAUh7B,GAC3C,IAAIypB,EAAWzpB,EAAGypB,SAGlBkQ,GAFY,YAAO35B,EAAI,CAAC,aAELypB,OAInB6R,GAAc,SAAqBtT,GACrC,MAAwB,WAAjB,GAAQA,IAAqBA,EAAI5sB,eAAe,YAGrDmgC,GAAO,SAAcn6B,GACvB,OAAOA,GAGL,GAEJ,WACE,SAASo6B,EAAsBx7B,GAC7B,IAAIgoB,EAAMhoB,EAAGgoB,IACT9kB,EAASlD,EAAGkD,OACZqtB,EAAWvwB,EAAGuwB,SAOlBh1B,KAAKkgC,YAAa,EAOlBlgC,KAAKmgC,iBAAmB,KAOxBngC,KAAKogC,aAAc,EAOnBpgC,KAAKyU,MAAQ,CACXyjB,mBAAoB8H,IAQtBhgC,KAAKsP,MAAQ,GAObtP,KAAKuR,OAAS,CACZ1C,EAAGyd,GAAY,GACfxd,EAAGwd,GAAY,IAKjBtsB,KAAKqgC,eAAiB,KAKtBrgC,KAAK0+B,WAAa,KAOlB1+B,KAAKsgC,mBAAqB,CACxBznB,MAAO,EACPE,OAAQ,EACRlK,EAAG,EACHC,EAAG,GAEL9O,KAAKysB,IAAMA,EACXzsB,KAAK2H,OAASA,EACd3H,KAAKg1B,SAAWA,EA2XlB,OA/WAiL,EAAsB//B,UAAUyhB,MAAQ,SAAU4e,EAAa97B,GAC7D,IAAIqc,EAAQ9gB,KAER2I,QAAa,IAAPlE,EAAgB,GAAKA,GAAI+7B,kBACT,IAAP73B,GAAwBA,GAC3B3I,KAAKwgC,aAAaD,GAElC,IAkFIrI,EAAqBl4B,KAAKyU,MAAMyjB,mBACpCl4B,KAAK0+B,WAAa,IAAI,GAAW6B,EAAa,CAC5CpE,eApFmB,WAlkBhBjB,IAA0B,EA4kB7BuF,IAAS,SAAUC,GACjB,IAAIC,EAAY7f,EAAMxR,MAAMoxB,GAC5BC,GAAaA,EAAU7e,WAyEzBsR,QArEY,SAAiBmF,EAAOoD,GAEpC,GAAI7a,EAAM8f,0BAA2B,CACnC,IAAIn8B,EAAKqc,EAAMrM,MACXosB,EAAkBp8B,EAAGo8B,gBACrBC,EAAuBr8B,EAAGyzB,mBAC9BpX,EAAMsf,YAAcW,GAA4BF,EAAiB/f,EAAM2L,IAAK3L,EAAMxR,MAAOwxB,GAEzFhgB,EAAMkgB,0BAIRP,IAAS,SAAUC,GACjB,IAAIC,EAAY7f,EAAMxR,MAAMoxB,GACvBC,GAEL7f,EAAMvP,OAAOmvB,GAAMtrB,IAAIurB,EAAUzrB,UAGnC,IAAIvM,EAAKmY,EAAMrM,MACXqpB,EAAOn1B,EAAGm1B,KACVmD,EAAkBt4B,EAAGs4B,gBAEzB,IAAInD,GAASmD,IACPngB,EAAMuf,gBAAgBvf,EAAMuf,iBAChCvf,EAAMuf,eAAiBxC,GAAcC,GAChChd,EAAMuf,gBAHb,CAMAvf,EAAMof,YAAa,EACnBpf,EAAMqf,iBAAmB,KACzB,IAAIe,EAAcpgB,EAAMrM,MAAMysB,YAC9BA,GAAeA,EAAY3I,EAAO4I,GAAiBxF,EAAM7a,EAAMxR,UAsC/D0sB,OAnCW,SAAgBzD,EAAOoD,GAClC,IAAIl3B,EAAKqc,EAAMrM,MACXwsB,EAAkBx8B,EAAGw8B,gBACrBG,EAAoB38B,EAAG28B,kBAE3B,GAAKH,GAAoBngB,EAAMuf,eAA/B,CACA,IAAIniB,EAASyd,EAAKzd,OAElB,GAAIkjB,GAAgD,OAA3BtgB,EAAMqf,kBAG7B,GAFArf,EAAMqf,iBA4Vd,SAA6BjiB,EAAQmjB,QACb,IAAlBA,IACFA,EAAgB,IAGlB,IAAIC,EAAY,KAEZ1+B,KAAKyL,IAAI6P,EAAOpP,GAAKuyB,EACvBC,EAAY,IACH1+B,KAAKyL,IAAI6P,EAAOrP,GAAKwyB,IAC9BC,EAAY,KAGd,OAAOA,EAzWwBC,CAAoBrjB,GAEd,OAA3B4C,EAAMqf,iBAA2B,CACnC,IAAIqB,EAAkB1gB,EAAMrM,MAAM+sB,gBAClCA,GAAmBA,EAAgB1gB,EAAMqf,uBAL7C,CAWArf,EAAM4a,YAAY,IAAKxd,GAEvB4C,EAAM4a,YAAY,IAAKxd,GAEvB,IAAIujB,EAAS3gB,EAAMrM,MAAMgtB,OACzBA,GAAUA,EAAOlJ,EAAO4I,GAAiBxF,EAAM7a,EAAMxR,WAYrDqtB,MATU,SAAepE,EAAOoD,GAChC7a,EAAMgB,KAAKyW,EAAOoD,KASjB,CACDzD,mBAAoBA,KAIxB+H,EAAsB//B,UAAUwhC,WAAa,WAC3CtG,KACAp7B,KAAKkgC,YAAa,EAClBlgC,KAAK0+B,YAAc1+B,KAAK0+B,WAAWhC,MACnC18B,KAAK0+B,WAAa,MAEb1+B,KAAKyU,MAAMwsB,iBAAmBjhC,KAAKqgC,iBACtCrgC,KAAKqgC,iBACLrgC,KAAKqgC,eAAiB,OAI1BJ,EAAsB//B,UAAU4hB,KAAO,SAAUyW,EAAOoD,GACtD,IAAIl3B,EAEuB,QAA1BA,EAAKzE,KAAK0+B,kBAA+B,IAAPj6B,GAAyBA,EAAGi4B,MAC/D18B,KAAK0+B,WAAa,KAClB,IAAIwB,EAAalgC,KAAKkgC,WAEtB,GADAlgC,KAAK0hC,aACAxB,EAAL,CACA,IAAIv3B,EAAK3I,KAAKyU,MACVktB,EAAeh5B,EAAGg5B,aAClBC,EAAcj5B,EAAGi5B,YACjBC,EAAYl5B,EAAGk5B,UAEnB,GAAIF,GAAgBC,EAAa,CAC/B,IAAI3tB,EAAW0nB,EAAK1nB,SACpBjU,KAAK8hC,eAAe7tB,QAEpBjU,KAAK+hC,cAAc/hC,KAAKogC,aAG1ByB,GAAaA,EAAUtJ,EAAO4I,GAAiBxF,EAAM37B,KAAKsP,UAG5D2wB,EAAsB//B,UAAU6hC,cAAgB,SAAU3B,GACxD,GAAIA,EAAa,CACf,IAAIjnB,EAAQinB,EAAYjnB,MACpBE,EAAO+mB,EAAY/mB,KACnBD,EAASgnB,EAAYhnB,OACrB4oB,EAAQ5B,EAAYlnB,IACxBlZ,KAAKsgC,mBAAmBznB,OAASM,GAAS,IAAME,GAAQ,GACxDrZ,KAAKsgC,mBAAmBvnB,QAAUK,GAAU,IAAM4oB,GAAS,GAGzDhiC,KAAKsP,MAAMT,IAAG7O,KAAKsgC,mBAAmBzxB,EAAI7O,KAAKsP,MAAMT,EAAEqG,OACvDlV,KAAKsP,MAAMR,IAAG9O,KAAKsgC,mBAAmBxxB,EAAI9O,KAAKsP,MAAMR,EAAEoG,QAG7D+qB,EAAsB//B,UAAUsgC,aAAe,SAAUjI,GACvD,IAAIzX,EAAQ9gB,KAERk4B,EAAqBl4B,KAAKyU,MAAMyjB,mBAChC5oB,EAAQwpB,GAAiBP,GAAOjpB,MAChC2yB,EAAcC,GAAeliC,KAAKysB,IAAKyL,GACvCiK,EACCF,EAAYppB,MAAQ,EAAIopB,EAAY5oB,KAAOhX,OAAO24B,QADnDmH,EAECF,EAAYlpB,OAAS,EAAIkpB,EAAY/oB,IAAM7W,OAAO44B,QAEnD/c,EAAS,CACXrP,EAAGS,EAAMT,EAAIszB,EACbrzB,EAAGQ,EAAMR,EAAIqzB,GAEf1B,IAAS,SAAUC,GACjB,IAAIpxB,EAAQwR,EAAMxR,MAAMoxB,GACnBpxB,GAELwR,EAAMvP,OAAOmvB,GAAMtrB,IAAI9F,EAAM4F,UAE/BlV,KAAK07B,YAAY,IAAKxd,GACtBle,KAAK07B,YAAY,IAAKxd,IAGxB+hB,EAAsB//B,UAAUkiC,SAAW,SAAU1B,EAAM74B,GACzD7H,KAAKsP,MAAMoxB,GAAQ74B,GAGrBo4B,EAAsB//B,UAAUw7B,YAAc,SAAUgF,EAAMxiB,GAC5D,IAAIzZ,EAAKzE,KAAKyU,MACVqpB,EAAOr5B,EAAGq5B,KACV8D,EAAcn9B,EAAGm9B,YACjBjB,EAAY3gC,KAAKsP,MAAMoxB,GAE3B,GAAK2B,GAAW3B,EAAM5C,EAAM99B,KAAKmgC,mBAAsBQ,EAAvD,CACA,IAAI/a,EAAU0c,GAAiB5B,EAAM1gC,KAAKuR,OAAOmvB,GAAMxrB,MAAQgJ,EAAOwiB,GAAO1gC,KAAKogC,YAAawB,GAC/FjB,EAAUvrB,IAAIwQ,KAGhBqa,EAAsB//B,UAAUqiC,YAAc,SAAU99B,GACtD,IAAIqc,EAAQ9gB,KAER2I,EAAKlE,EAAGq5B,KACRA,OAAc,IAAPn1B,GAAwBA,EAC/BkK,EAAKpO,EAAG28B,kBACRA,OAA2B,IAAPvuB,GAAwBA,EAC5CqK,EAAKzY,EAAGw8B,gBACRA,OAAyB,IAAP/jB,GAAwBA,EAC1CC,EAAK1Y,EAAGo8B,gBACRA,OAAyB,IAAP1jB,GAAwBA,EAC1CwG,EAAKlf,EAAGm9B,YACRA,OAAqB,IAAPje,GAAuBA,EACrCY,EAAK9f,EAAGk9B,aACRA,OAAsB,IAAPpd,GAAuBA,EACtCie,EAAiB,YAAO/9B,EAAI,CAAC,OAAQ,oBAAqB,kBAAmB,kBAAmB,cAAe,iBAEnHzE,KAAKyU,MAAQ,YAAS,CACpBqpB,KAAMA,EACNsD,kBAAmBA,EACnBH,gBAAiBA,EACjBJ,gBAAiBA,EACjBe,YAAaA,EACbD,aAAcA,GACba,GACH,IAAIC,EAAcD,EAAeC,YAC7BC,EAAcF,EAAeE,YAC7BC,EAAcH,EAAeG,YAC7BC,EAAcJ,EAAeI,YAC7BD,IAAa3iC,KAAKuR,OAAO1C,EAAI8zB,GAC7BC,IAAa5iC,KAAKuR,OAAOzC,EAAI8zB,GAGjCnC,IAAS,SAAUC,GACjB,GAAK2B,GAAW3B,EAAM5C,EAAMhd,EAAMqf,kBAAlC,CACA,IAAIlT,EAAwB,MAATyT,EAAe+B,EAAcC,EAEhD5hB,EAAMshB,SAAS1B,EAAMzT,GAAgBnM,EAAMnZ,OAAOuN,IAAIwrB,EAAM,QAI9D1gC,KAAK4gC,0BAA4Bb,GAAYc,GAC7C7gC,KAAKogC,YAAcpgC,KAAK4gC,0BAA4B5gC,KAAKogC,cAAe,EAAQS,GAGlFZ,EAAsB//B,UAAU8gC,wBAA0B,SAAUZ,GAClE,IAAItf,EAAQ9gB,KAMZ,YAJoB,IAAhBogC,IACFA,EAAcpgC,KAAKogC,aAGdK,IAAS,SAAUC,GACxB,IAAIC,EAAY7f,EAAMxR,MAAMoxB,GAC5BC,IAAcA,EAAUxU,eAAiBmW,GAAiB5B,EAAMC,EAAWP,EAAa,OAI5FH,EAAsB//B,UAAU4hC,eAAiB,SAAU7tB,GACzD,IAAI6M,EAAQ9gB,KAERyE,EAAKzE,KAAKyU,MACVqpB,EAAOr5B,EAAGq5B,KACV6D,EAAel9B,EAAGk9B,aAClBC,EAAcn9B,EAAGm9B,YACjBiB,EAAiBp+B,EAAGo+B,eACpBJ,EAAch+B,EAAGg+B,YACjBC,EAAcj+B,EAAGi+B,YACjBI,EAA0Br+B,EAAGq+B,wBAC7BC,EAAqBtC,IAAS,SAAUC,GAC1C,IAAIj8B,EAEJ,GAAK49B,GAAW3B,EAAM5C,EAAMhd,EAAMqf,kBAAlC,CAIA,IAAI9P,EAAavP,EAAMsf,YAAc4C,GAAetC,EAAM5f,EAAMsf,aAAe,GAQ3E7a,EAAkBqc,EAAc,IAAM,IACtCpc,EAAgBoc,EAAc,GAAK,IACnCqB,EAAoBH,GAA2BhiB,EAAMkU,SAErDpF,EAAU,YAAS,YAAS,CAC9Bnf,KAAM,UACNwD,SAAU0tB,EAAe1tB,EAASysB,GAAQ,EAC1Cnb,gBAAiBA,EACjBC,cAAeA,EACf9B,aAAc,IACdE,UAAW,GACVif,GAAiBxS,GAEhB6S,EAAmC,MAATxC,EAAe+B,EAAcC,EAI3D,OAAOQ,EAA0B,GAAexC,EAAMwC,EAAyB,EAAGtT,GAAWqT,EAAkBthB,QAAOld,EAAK,IAAOi8B,GAAQ,EAAGj8B,EAAG4rB,WAAaT,EAASnrB,QAGxK,OAAOqnB,QAAQiI,IAAIgP,GAAoB9W,MAAK,WAC1CnL,EAAMihB,cAAcjhB,EAAMsf,aAE1Btf,EAAMqiB,aAEN,IAAIC,EAAsBtiB,EAAMrM,MAAM2uB,oBACtCA,GAAuBA,QAI3BnD,EAAsB//B,UAAUijC,WAAa,WAC3C,IAAIriB,EAAQ9gB,KAERyE,EAAKzE,KAAKyU,MACVosB,EAAkBp8B,EAAGo8B,gBACrB3I,EAAqBzzB,EAAGyzB,mBAC5B,GAAK6H,GAAYc,GAAjB,CACA,IAAIwC,EAAiBnB,GAAerB,EAAiB3I,GACjDoL,EAAepB,GAAeliC,KAAKysB,IAAKyL,GAExCqL,EAAiB,SAAwB7C,EAAM8C,GACjD,IAAIC,EAAe3iB,EAAMxR,MAAMoxB,GAC/B,GAAK+C,EAAL,CAEA,GAAIA,EAAatX,cAKf,OAJAsX,EAAa3hB,YAEbhB,EAAMihB,gBAOR,IAAI3nB,EAAQ0G,EAAMwf,mBAAmBkD,IAAcH,EAAeG,GAAaF,EAAaE,IAAc1iB,EAAMwf,mBAAmBkD,GAAa,EAChJC,EAAaruB,IAAI0L,EAAMwf,mBAAmBI,GAAQtmB,KAGpDmpB,EAAe,IAAK,SACpBA,EAAe,IAAK,YAGtBtD,EAAsB//B,UAAUutB,MAAQ,SAAUnQ,GAChD,IAAIwD,EAAQ9gB,KAER0jC,EAAsBpJ,GAAgBhd,EAAS,eAAe,SAAUib,GAC1E,IAAI9zB,EAAKqc,EAAMrM,MACXqpB,EAAOr5B,EAAGq5B,KACVn1B,EAAKlE,EAAGk/B,aAEZ7F,SAD0B,IAAPn1B,GAAuBA,IAClBmY,EAAMa,MAAM4W,MAElCqL,EAAqBxL,GAAY/1B,OAAQ,UAAU,WACrD,OAAOye,EAAMqiB,gBAGf,GAAInjC,KAAK4gC,0BAA2B,CAClC,IAAIn8B,EAAKzE,KAAKyU,MACVosB,EAAkBp8B,EAAGo8B,gBACrB3I,EAAqBzzB,EAAGyzB,mBACxBkI,EAAcW,GAA4BF,EAAiB7gC,KAAKysB,IAAKzsB,KAAKsP,MAAO4oB,GACrFl4B,KAAKghC,wBAAwBZ,GAC7BpgC,KAAK+hC,cAAc3B,QACTpgC,KAAKkgC,YAAclgC,KAAKogC,aAClCpgC,KAAKghC,0BAGP,OAAO,WACL0C,GAAuBA,IACvBE,GAAsBA,IAEtB9iB,EAAM4gB,eAIHzB,EAtcT,GA0cA,SAASQ,GAASpI,GAChB,MAAO,CAACA,EAAQ,KAAMA,EAAQ,MAGhC,SAAS8I,GAAiBxF,EAAMrsB,GAC9B,OAAO,YAAS,YAAS,GAAIqsB,GAAO,CAClCrsB,MAAO,CACLT,EAAGS,EAAMT,EAAIS,EAAMT,EAAEqG,MAAQ,EAC7BpG,EAAGQ,EAAMR,EAAIQ,EAAMR,EAAEoG,MAAQ,KAKnC,SAAS8tB,GAAetC,EAAMj8B,GAC5B,IAAIyU,EAAMzU,EAAGyU,IACTC,EAAQ1U,EAAG0U,MACXC,EAAS3U,EAAG2U,OACZC,EAAO5U,EAAG4U,KAEd,MAAa,MAATqnB,EACK,CACLh7B,IAAK2T,EACLxW,IAAKsW,GAGA,CACLzT,IAAKwT,EACLrW,IAAKuW,GAKX,SAASipB,GAAWf,EAAWxD,EAAMqC,GACnC,QAAiB,IAATrC,GAAiBA,IAASwD,KAAoC,OAArBnB,GAA6BA,IAAqBmB,GAkCrG,SAASP,GAA4B8C,EAAgBC,EAAcx0B,EAAO4oB,GACnC,OAA3B2L,EAAeje,SAAoBke,EAAale,QAC1D,IAAIme,EAAoB7B,GAAe2B,EAAgB3L,GACnD8L,EAAuB9B,GAAe4B,EAAc5L,GACpD7e,EAAO0qB,EAAkB1qB,KAAO2qB,EAAqB3qB,KAAO4qB,GAAiB30B,EAAMT,GACnFqK,EAAM6qB,EAAkB7qB,IAAM8qB,EAAqB9qB,IAAM+qB,GAAiB30B,EAAMR,GAGpF,MAAO,CACLoK,IAAKA,EACLG,KAAMA,EACNF,MALU4qB,EAAkBlrB,MAAQmrB,EAAqBnrB,MAAQQ,EAMjED,OALW2qB,EAAkBhrB,OAASirB,EAAqBjrB,OAASG,GASxE,SAASgpB,GAAezV,EAAKyL,GAC3B,IAAI6C,EAAOtO,EAAI7G,QAAQ1F,wBAEnBzb,EAAKyzB,EAAmB,CAC1BrpB,EAAGksB,EAAK1hB,KACRvK,EAAGisB,EAAK7hB,MAENG,EAAO5U,EAAGoK,EACVqK,EAAMzU,EAAGqK,EAETnG,EAAKuvB,EAAmB,CAC1BrpB,EAAGksB,EAAKliB,MACR/J,EAAGisB,EAAKhiB,SAKV,MAAO,CACLM,KAAMA,EACNH,IAAKA,EACLL,MANUlQ,EAAGkG,EAObkK,OANWpQ,EAAGmG,GAUlB,SAASm1B,GAAiB30B,GACxB,OAAOA,EAAQA,EAAM4F,MAAQ,EAG/B,SAASotB,GAAiB5B,EAAM74B,EAAOu4B,EAAawB,GAClD,IAAIsC,EAAmBr8B,aAAiB,GAAcA,EAAMqN,MAAQrN,EAEpE,IAAKu4B,EACH,OAAO8D,EAGT,IAAIz/B,EAAKu+B,GAAetC,EAAMN,GAC1B16B,EAAMjB,EAAGiB,IACT7C,EAAM4B,EAAG5B,IAYb,YAVYd,IAAR2D,GAAqBw+B,EAAmBx+B,EAC1Cw+B,EAAmBtC,EAAcuC,GAAcz+B,EAAKw+B,EAAkBtC,GAAeh/B,KAAKC,IAAI6C,EAAKw+B,QAClFniC,IAARc,GAAqBqhC,EAAmBrhC,IACjDqhC,EAAmBtC,EAAcuC,GAActhC,EAAKqhC,EAAkBtC,GAAeh/B,KAAK8C,IAAI7C,EAAKqhC,IAGjGr8B,aAAiB,IACnBA,EAAMuN,IAAI8uB,GAGLA,EAGT,SAASC,GAAc5yB,EAAQqU,EAASgc,GAEtC,OAAO3xB,GAAIsB,EAAQqU,EADqB,kBAAhBgc,EAA2BA,EAAc,KAoCnE,IAAIwC,GAAO,CACT3gC,IAAK,OACLo8B,aAAc,SAAsBprB,GAClC,QAASA,EAAMqpB,MAEjBgC,UAAWL,IAAwB,SAAUh7B,GAC3C,IAAIypB,EAAWzpB,EAAGypB,SACdvmB,EAASlD,EAAGkD,OACZqtB,EAAWvwB,EAAGuwB,SAGlB,OAhCJ,SAAiBvgB,EAAOgY,EAAK9kB,EAAQqtB,GACnC,IAAIqP,EAAoB5vB,EAAM6vB,aAC1BpM,EAAqB,qBAAWD,IAAqBC,mBACrDoM,EAAe9X,IAAY,WAC7B,OAAO,IAAI,GAAsB,CAC/BC,IAAKA,EACL9kB,OAAQA,EACRqtB,SAAUA,OAGdsP,EAAa/B,YAAY,YAAS,YAAS,GAAI9tB,GAAQ,CACrDyjB,mBAAoBA,KAEtB,qBAAU,WACR,OAAOmM,GAAqBA,EAAkBhP,UAAUiP,KACvD,CAACA,IACJ,qBAAU,WACR,OAAOA,EAAa7W,MAAMhB,EAAI7G,WAC7B,IAcM2e,CAFK,YAAO9/B,EAAI,CAAC,WAAY,SAAU,aAExBypB,EAAUvmB,EAAQqtB,OAI5C,SAASwP,GAAc38B,GACrB,MAAwB,kBAAVA,GAAsBA,EAAMU,WAAW,UAavD,IAAIk8B,GAAmB,uDAYvB,SAASC,GAAiB9e,EAAStI,EAASqnB,QAC5B,IAAVA,IACFA,EAAQ,GAKV,IAAIlgC,EAjBN,SAA0BmhB,GACxB,IAAI/b,EAAQ46B,GAAiBG,KAAKhf,GAClC,OAAK/b,EAGE,CAFKA,EAAM,GACHA,EAAM,IAFF,CAAC,GAeXg7B,CAAiBjf,GACtBxb,EAAQ3F,EAAG,GACXqgC,EAAWrgC,EAAG,GAGlB,GAAK2F,EAAL,CAEA,IAAI26B,EAAW1iC,OAAOqb,iBAAiBJ,GAASK,iBAAiBvT,GAEjE,OAAI26B,IAEOP,GAAcM,GAEhBJ,GAAiBI,EAAUxnB,EAASqnB,EAAQ,GAE5CG,IAsDX,IAqBIE,GArBAC,GAAiB,IAAI1wB,IAAI,CAAC,QAAS,SAAU,MAAO,OAAQ,QAAS,SAAU,IAAK,MAEpF2wB,GAAkB,SAAyBzhC,GAC7C,OAAOwhC,GAAetgC,IAAIlB,IAOxB0hC,GAAsB,SAA6Bt9B,EAAOkI,GAG5DlI,EAAMuN,IAAIrF,GAAI,GACdlI,EAAMuN,IAAIrF,IAGR,GAAgB,SAAuBlK,GACzC,OAAOA,IAAMO,GAAUP,IAAMmB,IAK/B,SAAWg+B,GACTA,EAA4B,MAAI,QAChCA,EAA6B,OAAI,SACjCA,EAA2B,KAAI,OAC/BA,EAA4B,MAAI,QAChCA,EAA0B,IAAI,MAC9BA,EAA6B,OAAI,SANnC,CAOGA,KAAyBA,GAAuB,KAEnD,IAAII,GAAmB,SAA0BC,EAAQC,GACvD,OAAOh/B,WAAW++B,EAAOx+B,MAAM,MAAMy+B,KAGnCC,GAAyB,SAAgCC,EAAMC,GACjE,OAAO,SAAUC,EAAOjhC,GACtB,IAAI8B,EAAY9B,EAAG8B,UACnB,GAAkB,SAAdA,IAAyBA,EAAW,OAAO,EAC/C,IAAIo/B,EAAWp/B,EAAUsD,MAAM,sBAE/B,GAAI87B,EACF,OAAOP,GAAiBO,EAAS,GAAIF,GAErC,IAAIJ,EAAS9+B,EAAUsD,MAAM,oBAE7B,OAAIw7B,EACKD,GAAiBC,EAAO,GAAIG,GAE5B,IAMXrpB,GAAgB,IAAI5H,IAAI,CAAC,IAAK,IAAK,MACnCqxB,GAAgC7uB,GAAeub,QAAO,SAAU7uB,GAClE,OAAQ0Y,GAAcxX,IAAIlB,MAkB5B,IAAIoiC,GAAmB,CAErBhtB,MAAO,SAAepU,GACpB,IAAIoU,EAAQpU,EAAGoU,MACf,OAAOA,GAETE,OAAQ,SAAgBtU,GACtB,IAAIsU,EAAStU,EAAGsU,OAChB,OAAOA,GAETG,IAAK,SAAawsB,EAAOjhC,GACvB,IAAIyU,EAAMzU,EAAGyU,IACb,OAAO5S,WAAW4S,IAEpBG,KAAM,SAAcqsB,EAAOjhC,GACzB,IAAI4U,EAAO5U,EAAG4U,KACd,OAAO/S,WAAW+S,IAEpBD,OAAQ,SAAgB3U,EAAIkE,GAC1B,IAAIoQ,EAAStU,EAAGsU,OACZG,EAAMvQ,EAAGuQ,IACb,OAAO5S,WAAW4S,GAAOH,GAE3BI,MAAO,SAAe1U,EAAIkE,GACxB,IAAIkQ,EAAQpU,EAAGoU,MACXQ,EAAO1Q,EAAG0Q,KACd,OAAO/S,WAAW+S,GAAQR,GAG5BhK,EAAG02B,GAAuB,EAAG,IAC7Bz2B,EAAGy2B,GAAuB,EAAG,KAsC3B,GAAmC,SAA0C59B,EAAQ8kB,EAAKhiB,EAAQwnB,QAC9E,IAAlBA,IACFA,EAAgB,IAGlBxnB,EAAS,YAAS,GAAIA,GACtBwnB,EAAgB,YAAS,GAAIA,GAC7B,IAAI3U,EAAUmP,EAAI7G,QACdkgB,EAAgB,GAAOxoB,GACvByoB,EAAuBvmC,OAAOujB,KAAKtY,GAAQ6nB,OAAO4S,IAGlDc,EAAyB,GACzBC,GAAsC,EACtCC,EAAuBH,EAAqBxiC,QAAO,SAAUC,EAAKC,GACpE,IAAIoE,EAAQF,EAAOuN,IAAIzR,GACvB,IAAKoE,EAAO,OAAOrE,EACnB,IAGI2iC,EAHAr2B,EAAOjI,EAAMqN,MACbnF,EAAKtF,EAAOhH,GACZ2iC,EAAWrX,GAAsBjf,GAMrC,GAAI6e,GAAkB5e,GAGpB,IAFA,IAAIs2B,EAAet2B,EAAGpP,OAEbH,EAAc,OAAVuP,EAAG,GAAc,EAAI,EAAGvP,EAAI6lC,EAAc7lC,IAChD2lC,EAIOpX,GAAsBhf,EAAGvP,KAHnC2lC,EAASpX,GAAsBhf,EAAGvP,OACb4lC,GAAY,GAAcA,IAAa,GAAcD,QAM9EA,EAASpX,GAAsBhf,GAGjC,GAAIq2B,IAAaD,EAGf,GAAI,GAAcC,IAAa,GAAcD,GAAS,CACpD,IAAIvgB,EAAU/d,EAAMqN,MAEG,kBAAZ0Q,GACT/d,EAAMuN,IAAI9O,WAAWsf,IAGL,kBAAP7V,EACTtF,EAAOhH,GAAO6C,WAAWyJ,GAChBpQ,MAAM6S,QAAQzC,IAAOo2B,IAAWn/B,IACzCyD,EAAOhH,GAAOsM,EAAG9F,IAAI3D,kBAKlB2/B,IACHD,EA9IV,SAAyCr+B,EAAQm+B,GAC/C,IAAIQ,EAAoB,GAWxB,OAVAV,GAA8BjgC,SAAQ,SAAUlC,GAC9C,IAAIoE,EAAQF,EAAOuN,IAAIzR,QAET1B,IAAV8F,IACFy+B,EAAkBphC,KAAK,CAACzB,EAAKoE,EAAMqN,QACnCrN,EAAMuN,IAAI3R,EAAI8E,WAAW,SAAW,EAAI,OAIxC+9B,EAAkB3lC,QAAQmlC,EAAc9wB,SACrCsxB,EAkI0BC,CAAgC5+B,EAAQm+B,GACjEG,GAAsC,GAGxCziC,EAAI0B,KAAKzB,GACTwuB,EAAcxuB,QAA8B1B,IAAvBkwB,EAAcxuB,GAAqBwuB,EAAcxuB,GAAOgH,EAAOhH,GACpF0hC,GAAoBt9B,EAAOkI,GAI/B,OAAOvM,IACN,IAEH,GAAI0iC,EAAqBvlC,OAAQ,CAC/B,IAAI6lC,EA5GuB,SAAkC/7B,EAAQ9C,EAAQ2V,EAASwoB,EAAeW,GACvG,IAAIC,EAAappB,EAAQ4C,wBACrBymB,EAAuBjpB,iBAAiBJ,GACxCspB,EAAUD,EAAqBC,QAM/BC,EAAsB,CACxB3tB,IANQytB,EAAqBztB,IAO7BG,KANSstB,EAAqBttB,KAO9BD,OANWutB,EAAqBvtB,OAOhCD,MANUwtB,EAAqBxtB,MAO/B5S,UANcogC,EAAqBpgC,WAUrB,SAAZqgC,GACFd,EAAc1wB,IAAI,UAAW3K,EAAOm8B,SAAW,SAIjDd,EAAc9wB,SACd,IAAI8xB,EAAaxpB,EAAQ4C,wBAQzB,OAPAumB,EAAY9gC,SAAQ,SAAUlC,GAG5B,IAAIoE,EAAQF,EAAOuN,IAAIzR,GACvB0hC,GAAoBt9B,EAAOg+B,GAAiBpiC,GAAKijC,EAAYG,IAC7Dp8B,EAAOhH,GAAOoiC,GAAiBpiC,GAAKqjC,EAAYH,MAE3Cl8B,EA4EiBs8B,CAAyBt8B,EAAQ9C,EAAQ2V,EAASwoB,EAAeI,GAYvF,OAVIF,EAAuBrlC,QACzBqlC,EAAuBrgC,SAAQ,SAAUlB,GACvC,IAAIhB,EAAMgB,EAAG,GACToD,EAAQpD,EAAG,GACfkD,EAAOuN,IAAIzR,GAAK2R,IAAIvN,MAKxBi+B,EAAc9wB,SACP,CACLvK,OAAQ+7B,EACRvU,cAAeA,GAGjB,MAAO,CACLxnB,OAAQA,EACRwnB,cAAeA,IAiBrB,SAAS+U,GAAer/B,EAAQ8kB,EAAKhiB,EAAQwnB,GAC3C,OAxPqB,SAA0BxnB,GAC/C,OAAOjL,OAAOujB,KAAKtY,GAAQ2Y,KAAK8hB,IAuPzB+B,CAAiBx8B,GAAU,GAAiC9C,EAAQ8kB,EAAKhiB,EAAQwnB,GAAiB,CACvGxnB,OAAQA,EACRwnB,cAAeA,GAInB,IAAIiV,GAAkB,SAAyBv/B,EAAQ8kB,GACrD,OAAO,SAAUhiB,EAAQwnB,GACvB,IAAI8S,EAlTR,SAA6Bp9B,EAAQ8kB,EAAKhoB,EAAIwtB,GAC5C,IAAIxnB,EAAS,YAAOhG,EAAI,IAEpB6Y,EAAUmP,EAAI7G,QAClB,KAAMtI,aAAmBsC,aAAc,MAAO,CAC5CnV,OAAQA,EACRwnB,cAAeA,GAiBjB,IAAK,IAAIxuB,KAbLwuB,IACFA,EAAgB,YAAS,GAAIA,IAI/BtqB,EAAOhC,SAAQ,SAAUkC,GACvB,IAAI+d,EAAU/d,EAAMqN,MACpB,GAAKsvB,GAAc5e,GAAnB,CACA,IAAImf,EAAWL,GAAiB9e,EAAStI,GACrCynB,GAAUl9B,EAAMuN,IAAI2vB,OAIVt6B,EAAQ,CACtB,IAAImb,EAAUnb,EAAOhH,GACrB,GAAK+gC,GAAc5e,GAAnB,CACA,IAAImf,EAAWL,GAAiB9e,EAAStI,GACpCynB,IAELt6B,EAAOhH,GAAOshC,EAIV9S,QAAwClwB,IAAvBkwB,EAAcxuB,KACjCwuB,EAAcxuB,GAAOmiB,KAIzB,MAAO,CACLnb,OAAQA,EACRwnB,cAAeA,GA0QAkV,CAAoBx/B,EAAQ8kB,EAAKhiB,EAAQwnB,GAGxD,OAFAxnB,EAASs6B,EAASt6B,OAClBwnB,EAAgB8S,EAAS9S,cAClB+U,GAAer/B,EAAQ8kB,EAAKhiB,EAAQwnB,KAI/C,SAASmV,KACP,IAAI3iC,EAAK,mBAAS,GACd4iC,EAAoB5iC,EAAG,GACvB6iC,EAAuB7iC,EAAG,GAE9B,OAAO,uBAAY,WACjB,OAAO6iC,EAAqBD,EAAoB,KAC/C,CAACA,IAGN,IAyCI,GAEAE,GA3CAC,GAAiC,wBAAc,OA6CnD,SAAWD,GACTA,EAAkB,QAAI,UACtBA,EAAe,KAAI,OACnBA,EAAiB,OAAI,SAHvB,CAIGA,KAAaA,GAAW,KAE3B,IACIE,GADY,CAACF,GAASG,QAASH,GAASI,KAAMJ,GAASK,QACtCrkC,QAAO,SAAUC,EAAKC,GAEzC,OADAD,EAAIC,GAAO,GACJD,IACN,IACCqkC,IAAqB,EAEzB,SAASC,GAAkBC,GAGzB,IAFA,IAAIC,EAAUD,EAAKpnC,OAEVH,EAAI,EAAGA,EAAIwnC,EAASxnC,IAC3BunC,EAAKvnC,KAGPunC,EAAKpnC,OAAS,EAehB,IAAIsnC,GAAsB,SAA6BC,GACrD,OAAO,SAAU3lC,GACVA,IACLslC,IAAqB,EACrBJ,GAAKS,GAAUhjC,KAAK3C,MAIpB4lC,KAAc,GAAK,IAAOZ,GAASG,SAAWO,GAAoBV,GAASG,SAAU,GAAGH,GAASI,MAAQM,GAAoBV,GAASI,MAAO,GAAGJ,GAASK,QAAUK,GAAoBV,GAASK,QAAS,GAAGQ,MApBhN,WACOP,KACLC,GAAkBL,GAAKY,SACvBP,GAAkBL,GAAKa,MACvBR,GAAkBL,GAAKzyB,QACvB6yB,IAAqB,IAe+M,IAMtO,IAAIU,GAA0B,CAC5B5hB,SAAU,GACVvU,KAAM,CAAC,IAAM,IAAM,IAAM,IAEvBo2B,GAhyGK,CACL/3B,KAAM,SACN4T,UAAW,IACXC,QAAS,GACTV,UAAW,GACXc,UAAW,IAqyGf,IAAI+jB,GACC,CACDC,GAAI,IACJzvB,KAAM,QACNvT,IAAK,OACL7C,IAAK,QACL0O,OAAQ,WANRk3B,GAQC,CACDC,GAAI,IACJzvB,KAAM,SACNvT,IAAK,MACL7C,IAAK,SACL0O,OAAQ,WAIZ,SAASo3B,GAASjjC,EAAK7C,GACrB,OAAQ6C,EAAM7C,GAAO,EAGvB,SAAS+lC,GAAcjjB,EAAMY,EAAMsiB,GACjC,IAAIpkC,EAEAqkC,EAAYnjB,EAAKkjB,EAAM5vB,MAAQsN,EAAKsiB,EAAM5vB,MAC1C1H,EAAS,GAcb,OAVIu3B,IACEnjB,EAAKkjB,EAAMnjC,OAAS6gB,EAAKsiB,EAAMnjC,KACjC6L,EAAS,EACAoU,EAAKkjB,EAAMhmC,OAAS0jB,EAAKsiB,EAAMhmC,OACxC0O,EAAS,KAIA9M,EAAK,IAAOokC,EAAM5vB,MAAQ6vB,EAAWrkC,EAAGokC,EAAMt3B,QAAUA,EAAQ9M,EAAGokC,EAAMH,IAC3E,KAAXn3B,EAAiBo3B,GAAShjB,EAAKkjB,EAAMnjC,KAAMigB,EAAKkjB,EAAMhmC,MAAQ8lC,GAASpiB,EAAKsiB,EAAMnjC,KAAM6gB,EAAKsiB,EAAMhmC,MAAQ,EAAG4B,EAUhH,IAAI,GAAS,CACXskC,UAAW,SAAmBtkC,GAE5B,OADaA,EAAGyZ,QAGlB8qB,QAAS,SAAiB1rB,GACxB,IAAI2rB,EAAa3rB,EAAQ2rB,WACrBC,EAAY5rB,EAAQ4rB,UACpBC,EAAc7rB,EAAQ6rB,YACtBC,EAAe9rB,EAAQ8rB,aAC3B,MAAO,CACL/vB,KAAM4vB,EACN/vB,IAAKgwB,EACL/vB,MAAO8vB,EAAaE,EACpB/vB,OAAQ8vB,EAAYE,EACpBvwB,MAAOswB,EACPpwB,OAAQqwB,KAIVnH,GAAc,CAChB8G,UAAW,SAAmBtkC,GAE5B,OADkBA,EAAGw9B,aAGvB+G,QAAS,SAAiB1rB,GACxB,IAAI7Y,EAAK6Y,EAAQ4C,wBAQjB,MAAO,CACL7G,KARS5U,EAAG4U,KASZH,IARQzU,EAAGyU,IASXL,MARUpU,EAAGoU,MASbE,OARWtU,EAAGsU,OASdI,MARU1U,EAAG0U,MASbC,OARW3U,EAAG2U,UAapB,SAASiwB,GAAkB/rB,GACzB,OAAOjb,OAAOqb,iBAAiBJ,GAASuH,SAO1C,SAASykB,GAAU7lC,GACjB,MAAe,UAARA,GAA2B,WAARA,EAS5B,IAyJI8lC,GA/BAC,GAAS,CACX/lC,IAAK,SACLo8B,aAAc,SAAsBp7B,GAClC,IAAIglC,EAAqBhlC,EAAGglC,mBACxBC,EAAmBjlC,EAAGilC,iBAE1B,MAAyB,qBAAXrnC,WAA6BonC,IAAsBC,IAEnE5J,UAhIF,SAAU6J,GAGR,SAASC,IACP,OAAkB,OAAXD,GAAmBA,EAAO9oC,MAAMb,KAAMU,YAAcV,KAiH7D,OApHA,YAAU4pC,EAAiBD,GAQ3BC,EAAgB1pC,UAAU2pC,wBAA0B,WAClD,IAAIplC,EAAKzE,KAAKyU,MACVyZ,EAAWzpB,EAAGypB,SACdub,EAAqBhlC,EAAGglC,mBACxB9hC,EAASlD,EAAGkD,OACZqtB,EAAWvwB,EAAGuwB,SACd1X,EAAU4Q,EAAStI,QACvB,GAnJJ,SAAuBtI,GACrB,OAAOA,aAAmBsC,YAkJnB,CAActC,GAAnB,CACA,IAOI/W,EACAggB,EACAujB,EATAJ,EAzBR,SAAuBjlC,GACrB,IAAIilC,EAAmBjlC,EAAGilC,iBACtBD,EAAqBhlC,EAAGglC,mBAC5B,OAAOC,GAAoBD,EAsBFM,CAAc/pC,KAAKyU,OACtCu1B,IAAmBP,EACnBQ,EAAgBZ,GAAkB/rB,GAClCqI,EAAO,CACTzH,OAAQ,GAAO8qB,QAAQ1rB,GACvB2kB,YAAaA,GAAY+G,QAAQ1rB,IAmFnC,OA3EA6qB,GAAWE,SAAQ,WAGjB9hC,EAAY+W,EAAQ3G,MAAMpQ,UAC1B+W,EAAQ3G,MAAMpQ,UAAY,MAE5B4hC,GAAWG,MAAK,WAEd/hB,EAAO,CACLrI,OAAQ,GAAO8qB,QAAQ1rB,GACvB2kB,YAAaA,GAAY+G,QAAQ1rB,IAEnC,IAAI4sB,EAAeb,GAAkB/rB,GACrCwsB,EA3DN,SAAuBnkB,EAAMY,EAAMyjB,GACjC,OAAOA,GAAkBrkB,IAASY,EAAO,GAAS0b,GA0DpCkI,CAAcF,EAAeC,EAAcF,MAEvD7B,GAAWnzB,QAAO,WAGhB,IAEI9R,EAzHV,SAAmByiB,EAAMY,GAGvB,OAFY,YAAS,YAAS,GAAIqiB,GAAcjjB,EAAMY,EAAMkiB,KAAgBG,GAAcjjB,EAAMY,EAAMkiB,KAwHtF2B,CAFKN,EAAQf,UAAUpjB,GAClBmkB,EAAQf,UAAUxiB,IAInC,GAFoBrjB,EAAM2L,GAAK3L,EAAM4L,GAAK5L,EAAM2V,OAAS3V,EAAM6V,OAE/D,CAMA,GAAOuE,GAASlI,IAAI,CAClB4F,QAAS9X,EAAM8X,QACfC,QAAS/X,EAAM+X,UAEjBgT,KACA,IAAIxjB,EAAS,GACT4lB,EAAa,GACbN,EAvLV,SAAoBM,GAClB,MAA6B,oBAAfA,EAsLiBga,CAAWX,GAAoBA,EAAiB,CACzExmC,MAAOA,IACJwmC,EAsBLY,EAAe,OAAQ,IAAK,EAAGpnC,EAAM2L,GACrCy7B,EAAe,MAAO,IAAK,EAAGpnC,EAAM4L,GAE/Bk7B,IACHM,EAAe,QAAS,SAAU,EAAG3kB,EAAKsc,YAAYppB,MAAQ0N,EAAK0b,YAAYppB,OAC/EyxB,EAAe,SAAU,SAAU,EAAG3kB,EAAKsc,YAAYlpB,OAASwN,EAAK0b,YAAYlpB,SAGnFtO,EAAO4lB,WAAaA,EAGpBN,GAAwBiF,EAASrT,MAAMlX,GAEvCwjB,UAhDE1nB,IAAc+W,EAAQ3G,MAAMpQ,UAAYA,GAe1C,SAAS+jC,EAAeC,EAAWC,EAAcrY,EAAasY,GAE5D,IAAIC,EAAWpB,GAAUiB,GAAaA,EAAYC,EAClD,GAAKtnC,EAAMwnC,GAAX,CACA,IAAIC,EAAiD,mBAAzB5a,EAAqC,YAAS,GAnMlF,SAAoCia,GAClC,OAAOA,EAAiBxB,GAA4BD,GAkMgCqC,CAA2BZ,IAAmBja,EACxHloB,EAAQF,EAAOuN,IAAIs1B,EAAcrY,GACjCle,EAAWpM,EAAMgkB,cACrBwE,EAAWma,GAAgBG,EAAeH,GAAgB,YAAS,GAAIG,EAAeH,IAAiB,YAAS,GAAIG,QAE1E5oC,IAAtCsuB,EAAWma,GAAcv2B,WAC3Boc,EAAWma,GAAcv2B,SAAWA,GAAY,GAKlDxJ,EAAO+/B,GAAgBrY,EACvB,IAAI0Y,EAAiBvB,GAAUiB,IAAcT,IAAY,GAAuB,EAAdjiC,EAAMqN,MACxErN,EAAMuN,IAAIq1B,EAAeI,QAkBtB,OAGTjB,EAAgB1pC,UAAU4qC,mBAAqB,WAC7C3C,GAAWC,SAGbwB,EAAgB1pC,UAAU8U,OAAS,WACjC,OAAO,MAGT40B,EAAgBmB,YAAcvD,GACvBoC,EArHT,CAsHE,cAmBEoB,GAAmB,IAAIz2B,IAAI,CAAC,UAAW,UAAW,OAAQ,QAAS,WAAY,aAAc,oBAAqB,kBAAmB,SAAU,UAAW,SAAU,qBAAsB,mBAAoB,mBAAoB,sBAAuB,WAAY,cAAe,SAAU,YAAa,kBAAmB,sBAAuB,OAAQ,eAAgB,eAAgB,kBAAmB,oBAAqB,cAAe,eAAgB,kBAAmB,iBAAkB,cAAe,cAAe,0BAA2B,cAAe,cAAe,QAAS,aAAc,WAAY,oBAAqB,QAAS,aAAc,cAAe,aAAc,WAAY,aAAc,iBAU1sB,SAAS02B,GAAkBxnC,GACzB,OAAOunC,GAAiBrmC,IAAIlB,IAK9B,SAAW8lC,GACTA,EAAwB,OAAI,SAC5BA,EAA8B,aAAI,eAClCA,EAAuC,sBAAI,wBAH7C,CAIGA,KAAoBA,GAAkB,KAkBzC,SAAS2B,GAAwBzmC,EAAI0mC,QACR,IAAvBA,IACFA,GAAqB,GAGN1mC,EAAG4rB,WAApB,IACI4B,EAAgBxtB,EAAGwtB,cACnBxnB,EAAS,YAAOhG,EAAI,CAAC,aAAc,kBAEvC,OAAO0mC,EAAqB,YAAS,YAAS,GAAI1gC,GAASwnB,GAAiBxnB,EAkE9E,IAsFI2gC,GAAM,GA1ENC,GAAuB,SAA8B7Y,GACvD,IAbyCyB,EAarCqX,EAAoB9Y,aAAmB,GAAcA,EAAQtd,MAAQsd,EACzE,OAAO7yB,MAAMmQ,KAAK,IAAIyE,KAdmB0f,EAcDqX,GATpC3rC,MAAM6S,QAAQyhB,GACTA,EAGF,CAACA,GAPC,MAsFX,IAAIsX,KAAyBH,GAAO,IAAS7B,GAAgBiC,QAAU/L,IAAwB,SAAUh7B,GAKvG,OAtIF,SAAwBgnC,EAAqBzW,EAAUrtB,EAAQkqB,GAC7D,IAAI6E,EAAkB,kBAAO,GACzBgV,EAAa,iBAAO,MAEnBA,EAAW9lB,UACd8lB,EAAW9lB,QAAUslB,GAAwBO,GAAqB,IAGpE,qBAAU,WACR,IA/CiC9lB,EAAMY,EA+CnColB,EAAkB,GAElBC,EAAkBV,GAAwBO,GAE1CI,EAAcX,GAAwBO,GAAqB,GAE/D,IAAK,IAAIhoC,KAAOmoC,EAAiB,CAG/B,IAAIE,EAAuBpV,EAAgB9Q,WAAaje,EAAOhD,IAAIlB,IAAQkE,EAAOuN,IAAIzR,GAAKyR,QAAU22B,EAAYpoC,IAG7GsoC,EAAoC,OAArBF,EAAYpoC,GAC3BuoC,GA5D2BrmB,EA4DE+lB,EAAW9lB,QAAQniB,QA3DxC1B,KADyBwkB,EA4DqBslB,EAAYpoC,MA3D5C9D,MAAM6S,QAAQmT,IAAShmB,MAAM6S,QAAQ+T,IAbrE,SAAwBA,EAAMZ,GAC5B,GAAa,OAATA,EAAe,OAAO,EAC1B,IAAIsmB,EAAatmB,EAAKhlB,OACtB,GAAIsrC,IAAe1lB,EAAK5lB,OAAQ,OAAO,EAEvC,IAAK,IAAIH,EAAI,EAAGA,EAAIyrC,EAAYzrC,IAC9B,GAAImlB,EAAKnlB,KAAO+lB,EAAK/lB,GAAI,OAAO,EAGlC,OAAO,EAIqE0rC,CAAe3lB,EAAMZ,GAAQA,IAASY,IA6D1GwlB,IAAiBC,GAAmBF,KACtCH,EAAgBloC,GAAOmoC,EAAgBnoC,IAI3CizB,EAAgB9Q,SAAU,EAC1B8lB,EAAW9lB,QAAU,YAAS,YAAS,GAAI8lB,EAAW9lB,SAAUimB,GAE5DrsC,OAAOujB,KAAK4oB,GAAiBhrC,QAC/Bq0B,EAASrT,MAAM,YAAS,YAAS,GAAIgqB,GAAkB,CACrDtb,WAAYob,EAAoBpb,YAAcwB,EAC9CI,cAAewZ,EAAoBxZ,mBAGtC,CAACwZ,IAgGGU,CAJO1nC,EAAGusB,QACFvsB,EAAGuwB,SACLvwB,EAAGkD,OACClD,EAAG4rB,eAElB+a,GAAK7B,GAAgB6C,cAAgB3M,IAAwB,SAAUh7B,GACzE,IAAIusB,EAAUvsB,EAAGusB,QACbroB,EAAKlE,EAAG0yB,QACRA,OAAiB,IAAPxuB,GAAuBA,EACjCqsB,EAAWvwB,EAAGuwB,SAElB,OA1DF,SAAqBc,EAAS9E,EAASmG,EAASnC,GAC9C,IAAIqX,EAAiBhB,GAAqBra,GACtCuF,EAAU,qBAAWf,IACrB8W,EAAuB/V,EAAQzJ,YAAcyJ,EAAQzJ,WAAWlH,QAChEkH,EAAa,kBAAO,GACxB,qBAAU,WACR,IArB+Cyf,EAAYC,EAqBvDC,GAAgB,EAEhBtV,GAIFsV,IAAkBH,EAClBD,EAAiBhB,GAAqB9U,EAAQvF,UAE9Cyb,EAAgB3f,EAAWlH,UA9BkB2mB,EA8BWlB,GAAqBvV,GA9BpB0W,EA8B8BH,EA7BpFE,EAAWG,KAAK,OAASF,EAAWE,KAAK,MAgC9CD,GAAiBzX,EAASrT,MAAM0qB,GAChCvf,EAAWlH,SAAU,IArChB,CAsCaymB,EAtCPK,KAAK,OA4EXC,CADOloC,EAAGqxB,QACW9E,EAASmG,EAASnC,MAC5CoW,GAAK7B,GAAgBqD,uBAAyBnN,IAAwB,SAAUh7B,GAGlF,OA7BF,SAAuC6hB,EAAW0O,GAChD,IAAIpH,EAAc,mBAAQ,WACxB,OAAOtH,EAAU+O,UAAUL,KAC1B,CAAC1O,IACJ,qBAAU,WACR,OAAO,WACLsH,GAAeA,OAEhB,CAACA,IAqBGif,CAFOpoC,EAAGusB,QACFvsB,EAAGuwB,aAEhBoW,IAMA0B,GAA0B,SAAiCroC,GAE7D,OADcA,EAAGusB,mBACS,IAGxB+b,GAAiB,CAAC,UAAW,UAAW,WAAY,cACpDC,KAAwB,GAAK,IAAOzD,GAAgBiC,QAAU,SAAU/2B,GAC1E,YAAyB1S,IAAlB0S,EAAMuc,UAXkChvB,EAWSyS,EAAMuc,UAVvDrxB,MAAM6S,QAAQxQ,IAAyB,kBAATA,MAUsC8qC,GAAwBr4B,GAX9E,IAA0BzS,GAY9C,GAAGunC,GAAgB6C,cAAgB,SAAU33B,GAC9C,YAA0B1S,IAAnB0S,EAAM2c,UAA0B2b,GAAe3pB,MAAK,SAAU3f,GACnE,MAA6B,kBAAfgR,EAAMhR,OAErB,GAAG8lC,GAAgBqD,uBAAyBE,GAAyB,IAgDxE,IAAIG,GAAO,CACTxpC,IAAK,OACLo8B,aAAc,SAAsBprB,GAClC,QAASA,EAAMy4B,OAAShW,GAA0BziB,IAEpDqrB,UAAWL,IAAwB,SAAUhrB,GAC3C,IAAIhQ,EAEAusB,EAAUvc,EAAMuc,QAChBgE,EAAWvgB,EAAMugB,SACjBkY,EAAOz4B,EAAMy4B,KAEbvkC,EAtBR,WACE,IAAI4tB,EAAU,qBAAWhB,IACzB,GAAgB,OAAZgB,EAAkB,MAAO,EAAC,GAC9B,IAAIS,EAAYT,EAAQS,UACpBmW,EAAiB5W,EAAQ4W,eACzBC,EAAW7W,EAAQ6W,SAEvB,OADA,oBAAUA,EAAU,KACZpW,GAAamW,EAAiB,EAAC,EAAOA,GAAkB,EAAC,GAetDE,GACLrW,EAAYruB,EAAG,GACfwkC,EAAiBxkC,EAAG,GAEpBstB,EAAkB,qBAAWV,IAC7B+X,EAAyB,kBAAO,GAChC7a,OAAqF1wB,KAAhD,QAA1B0C,EAAKwxB,SAAoC,IAAPxxB,OAAgB,EAASA,EAAGguB,QAAwBwD,EAAgBxD,OAAShe,EAAMge,OACpI,qBAAU,WACHuE,GASMsW,EAAuB1nB,UAAWoL,GAAaA,aAAmB,IAC3EgE,EAASrT,MAAMqP,KATVsc,EAAuB1nB,SAAWsnB,IACrClY,EAAStD,SAAS,YAAS,YAAS,GAAIjd,GAAQ,CAC9Cge,OAAQA,KAEVuC,EAASrT,MAAMurB,GAAMjhB,KAAKkhB,IAG5BG,EAAuB1nB,SAAU,GAK/BoR,IACFsW,EAAuB1nB,SAAU,KAElC,CAACoR,QAIJuW,GAAc,SAAqB9pC,GACrC,OAAQwnC,GAAkBxnC,IAiB5B,IACE,IAAI+pC,GAAuB,EAAQ,MAA0B/mC,QAE7D8mC,GAAc,SAAqB9pC,GAEjC,OAAIA,EAAI8E,WAAW,OACT0iC,GAAkBxnC,GAEnB+pC,GAAqB/pC,IAGhC,MAAOgB,KAeT,IAuBIgpC,GAA0B,CAACjE,GAAQpF,GAAMxE,GAAUqN,IACnDS,GAA6BD,GAAwB9sC,OAOzD,SAASgtC,GAAsB7N,GAC7B,IAAI8N,EAA6B,kBAAd9N,EACf+N,EAAQD,IAA6C,IAApC5V,GAAYh3B,QAAQ8+B,GACzC,MAAO,CACLxI,gBAAiB,SAAyB7K,EAAK9V,EAAOhP,EAAQ8M,EAAO0Z,GACnE,IAAI2f,EAAiBF,EAhD3B,SAA0Bn5B,GACxB,IAAIs5B,EAAW,GAEf,IAAK,IAAItqC,KAAOgR,EACV84B,GAAY9pC,KACdsqC,EAAStqC,GAAOgR,EAAMhR,IAI1B,OAAOsqC,EAuC0BC,CAAiBv5B,GAASA,EACnDw5B,EAAqBJ,EArBX,SAAuBlmC,EAAQgP,GACjD,IACIlC,EAAQ2J,GADYmQ,GAAe5mB,QACM5F,OAAWA,OAAWA,OAAWA,GAAW,GAEzF,OADA0S,EAAMkC,MAAQ,YAAS,YAAS,GAAIA,GAAQlC,EAAMkC,OAC3ClC,EAiB8B,CAAc9M,EAAQgP,GArCxC,SAAwBhP,EAAQgP,EAAOwX,EAAU+f,GAEpE,IAAIz5B,EAAQ,CACVkC,MAAO,GAAehP,EAAQgP,EAAOwX,IAUvC,OAPI+f,IAEFz5B,EAAMkC,MAAMw3B,WAAa,OAEzB15B,EAAM25B,WAAY,GAGb35B,EAwB6D45B,CAAe1mC,EAAQgP,EAAOwX,IAAY1Z,EAAMqpB,MAChH,OAAoB,wBAAcgC,EAAW,YAAS,YAAS,YAAS,GAAIgO,GAAiB,CAC3FrhB,IAAKA,IACHwhB,KAsBN5W,4BAA6B,SAAqC5K,EAAK9kB,EAAQ8M,EAAO8hB,EAASvB,EAAUmC,GACvG,IAAImX,EAAmB,GAEnBC,EAnMkB,SAA+B95B,GACzD,IAAI+5B,OAAkBzsC,EAEtB,IAAK,IAAI0B,KAAO8lC,GACVyD,GAAqBvpC,GAAKgR,KAC5B+5B,EAAkB/qC,GAItB,OAAO+qC,EAAkBjD,GAAsBiD,QAAmBzsC,EA0L9C0sC,CAAsBh6B,GAElC85B,GACFD,EAAiBppC,KAAmB,wBAAcqpC,EAAW,CAC3D9qC,IAAK,YACLqyB,QAASrhB,EAAMqhB,QACf9E,QAASvc,EAAMuc,QACfI,SAAU3c,EAAM2c,SAChBf,WAAY5b,EAAM4b,WAClB2E,SAAUA,EACVmC,QAASA,EACTxvB,OAAQA,KAIZ,IAAK,IAAInH,EAAI,EAAGA,EAAIktC,GAA4BltC,IAAK,CACnD,IAAIiE,EAAKgpC,GAAwBjtC,GAC7Bq/B,EAAep7B,EAAGo7B,aAClBp8B,EAAMgB,EAAGhB,IACTirC,EAAcjqC,EAAGq7B,UAEjBD,EAAaprB,EAAO8hB,IACtB+X,EAAiBppC,KAAmB,wBAAcwpC,EAAa,YAAS,CACtEjrC,IAAKA,GACJgR,EAAO,CACRmhB,cAAeW,EACf5uB,OAAQA,EACRqtB,SAAUA,EACV9G,SAAUzB,MAKhB,OAAO6hB,GAETlX,uBAAwB,SAAgC3K,EAAK9kB,GAC3D,MAAO,CACLA,OAAQA,EACRupB,oBAAqB,SAA6BztB,GAChD,OAAO,GAAOgpB,EAAI7G,SAAS1Q,IAAIzR,IAKjC0tB,qBAAsB+V,GAAgBv/B,EAAQ8kB,MAMtD,IAAIkiB,GArkFe,CAAC,IAAK,OAAQ,UAAW,OAAQ,UAAW,QAAS,QAAS,IAAK,OAAQ,MAAO,MAAO,MAAO,aAAc,OAAQ,KAAM,SAAU,SAAU,UAAW,OAAQ,OAAQ,MAAO,WAAY,OAAQ,WAAY,KAAM,MAAO,UAAW,MAAO,SAAU,MAAO,KAAM,KAAM,KAAM,QAAS,WAAY,aAAc,SAAU,SAAU,OAAQ,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,OAAQ,SAAU,SAAU,KAAM,OAAQ,IAAK,SAAU,MAAO,QAAS,MAAO,MAAO,SAAU,QAAS,SAAU,KAAM,OAAQ,OAAQ,MAAO,OAAQ,OAAQ,WAAY,OAAQ,QAAS,MAAO,WAAY,SAAU,KAAM,WAAY,SAAU,SAAU,IAAK,QAAS,UAAW,MAAO,WAAY,IAAK,KAAM,KAAM,OAAQ,IAAK,OAAQ,SAAU,UAAW,SAAU,QAAS,SAAU,OAAQ,SAAU,QAAS,MAAO,UAAW,MAAO,QAAS,QAAS,KAAM,WAAY,QAAS,KAAM,QAAS,OAAQ,QAAS,KAAM,QAAS,IAAK,KAAM,MAAO,QAAS,MAAO,WAqkFz5BprC,QAAO,SAAUC,EAAKs8B,GAC5D,IAAI1U,EAASuiB,GAAsB7N,GAInC,OADAt8B,EAAIs8B,GAAa,GAAsB1U,GAChC5nB,IACN,IACCorC,GAAsB5W,GAAYz0B,QAAO,SAAUC,EAAKs8B,GAI1D,OADAt8B,EAAIs8B,GAAa,GAAsB6N,GAAsB7N,IACtDt8B,IACN,IAqBCqrC,GAAS,YAAS,YAAS,CAgB7Bpc,OAAQ,SAAgBqN,GACtB,OAAO,GAAsB6N,GAAsB7N,MAEpD6O,IAAuBC,IAgC1B,SAASE,GAAehZ,GACtB,OAAOtJ,IAAY,WACjB,OAAOF,GAAYwJ,MAiBvB,IAII,GAAW,SAAkBjwB,GAC/B,OALsB,SAA2BA,GACjD,MAAsB,WAAf,GAAQA,IAAmBA,EAAEoK,IAI7B8+B,CAAkBlpC,GAAKA,EAAEoK,SAAMlO,GAGxC,SAAS,KAGP,IAFA,IAAIitC,EAAO,GAEF39B,EAAK,EAAGA,EAAK3Q,UAAUC,OAAQ0Q,IACtC29B,EAAK39B,GAAM3Q,UAAU2Q,GAGvB,IAAI49B,GAAgBtvC,MAAM6S,QAAQw8B,EAAK,IACnCE,EAAYD,EAAe,GAAK,EAChCE,EAAaH,EAAK,EAAIE,GACtBE,EAAaJ,EAAK,EAAIE,GACtBG,EAAcL,EAAK,EAAIE,GACvB7xB,EAAU2xB,EAAK,EAAIE,GACnBh8B,EAAeN,GAAYw8B,EAAYC,EAAa,YAAS,CAC/D38B,MAAO,GAAS28B,EAAY,KAC3BhyB,IACH,OAAO4xB,EAAe/7B,EAAai8B,GAAcj8B,EAGnD,IAIIo8B,GAAS,SAAgBzpC,GAC3B,OAAOA,GAGT,SAAS0pC,GAAallB,EAAQmlB,EAAiBz/B,EAAIsN,GACjD,IAAIxV,EAAQ,iBAAO,MACf4nC,EAAa,CAACplB,GACdD,EAAcklB,GAElB,GAZoB,oBAYFE,EAChBplB,EAAcolB,OACT,GAAI7vC,MAAM6S,QAAQzC,GAAK,CAC5B,IAAID,EAAO0/B,EACXplB,EAAc,GAAUta,EAAMC,EAAIsN,GAClCoyB,EAAa,CAACplB,EAAQva,EAAK48B,KAAK,KAAM38B,EAAG28B,KAAK,MAGhD,OAAO,mBAAQ,WAKb,OAJI7kC,EAAM+d,SAAS/d,EAAM+d,QAAQwG,UACjCvkB,EAAM+d,QAAUyE,EAAOc,SAAS,CAC9Bf,YAAaA,IAERviB,EAAM+d,UACZ6pB,GA2FL,SAASC,GAAUC,EAAQvkB,QACV,IAAXA,IACFA,EAAS,IAGX,IAAIwkB,EAAwB,iBAAO,MAC/B/nC,EAAQinC,GAAeniB,GAAcgjB,GAAUA,EAAOz6B,MAAQy6B,GAkBlE,OAjBA,mBAAQ,WACN,OAAO9nC,EAAM8jB,QAAO,SAAU9lB,EAAGuP,GAU/B,OATIw6B,EAAsBhqB,SACxBgqB,EAAsBhqB,QAAQ9D,OAGhC8tB,EAAsBhqB,QAAU,GAAO,YAAS,CAC9C9V,KAAMjI,EAAMqN,MACZnF,GAAIlK,EACJoO,SAAUpM,EAAMgkB,eACfT,IAASzJ,MAAMvM,GACXvN,EAAMqN,WAEd1V,OAAOmI,OAAOyjB,IA9CnB,SAAqBvjB,EAAOtF,GAC1B,qBAAU,WACR,OAAOoqB,GAAc9kB,GAASA,EAAM4jB,SAASlpB,QAAYR,IACxD,CAAC8F,IA4CJgoC,CAAYF,GAAQ,SAAU9pC,GAC5B,OAAOgC,EAAMuN,IAAI9O,WAAWT,OAEvBgC,EAGT,SAASioC,KACP,MAAO,CACL9U,QAAS1O,GAAY,GACrB2O,QAAS3O,GAAY,GACrByjB,gBAAiBzjB,GAAY,GAC7B0jB,gBAAiB1jB,GAAY,IAIjC,SAAS2jB,GAAY/xB,EAAQgyB,EAAWroC,GACtCA,EAAMuN,IAAK8I,GAAWgyB,EAAgBhyB,EAASgyB,EAAb,GAGpC,SAASC,GAAoBxoC,EAAQyoC,GACnC,IAAIlvB,EAAS,WACX,IAAIzc,EAAK2rC,IACLC,EAAU5rC,EAAG4rC,QACbC,EAAU7rC,EAAG6rC,QACbC,EAAa9rC,EAAG8rC,WAChBC,EAAa/rC,EAAG+rC,WAGpB7oC,EAAOqzB,QAAQ5lB,IAAIi7B,GACnB1oC,EAAOszB,QAAQ7lB,IAAIk7B,GAEnBL,GAAYI,EAASE,EAAY5oC,EAAOooC,iBACxCE,GAAYK,EAASE,EAAY7oC,EAAOqoC,kBAI1C,OADA9uB,IACOA,EAGT,IACIuvB,GADgC,qBAAXpuC,OACqB,kBAAkB,YAgFhE,IAAIquC,GAAuBZ,KAE3B,SAASa,KACP,MAAO,CACLN,QAAShuC,OAAOid,YAChBgxB,QAASjuC,OAAOgd,YAChBkxB,WAAYv6B,SAAS46B,KAAKC,YAAcxuC,OAAOyuC,WAC/CN,WAAYx6B,SAAS46B,KAAKG,aAAe1uC,OAAO2uC,aAIpD,IAAIC,IAAe,EAgDnB,SAASC,KAIP,OAHAT,IAA0B,YACvBQ,IAhDL,WAEE,GADAA,IAAe,EACO,qBAAX5uC,OAAX,CACA,IAAI8uC,EAAqBhB,GAAoBO,GAAsBC,IACnEvY,GAAY/1B,OAAQ,SAAU8uC,EAAoB,CAChDxnB,SAAS,IAEXyO,GAAY/1B,OAAQ,SAAU8uC,IAyCXC,KAChB,IACIV,GAqDT,SAASW,KACP,IAAIpO,EAAoBzW,IAAY,WAClC,OAAO,IAAI,MAQb,OANA,qBAAU,WAER,OADAyW,EAAkBxV,QACX,WACL,OAAOwV,EAAkBvV,aAE1B,IACIuV,GAoLT,WACE,SAASqO,IACPtxC,KAAKo1B,kBAAoB,IAAI7gB,IAS/B+8B,EAAapxC,UAAUm1B,UAAY,SAAUL,GAC3C,IAAIlU,EAAQ9gB,KAGZ,OADAA,KAAKo1B,kBAAkB9wB,IAAI0wB,GACpB,WACL,OAAOlU,EAAMsU,kBAAkBnwB,OAAO+vB,KAoB1Csc,EAAapxC,UAAUyhB,MAAQ,SAAU4W,EAAOlb,GAC9Crd,KAAKo1B,kBAAkBzvB,SAAQ,SAAUqvB,GACvCA,EAASrT,MAAM4W,EAAMgZ,aAAehZ,EAAOlb,OAtCjD,GAmGA,IAAI,GAAgB,SAAuB5Y,GACzC,IAAIkmB,EAAWlmB,EAAGkmB,SACdmL,EAAUrxB,EAAGqxB,QACbkB,EAAYvyB,EAAGuyB,UACfwa,EAAkB/sC,EAAG0oC,eACrB1a,EAAShuB,EAAGguB,OACZgf,EAAsB,iBAAO,GAC7BC,EAAkB,iBAAO,GACzBnb,EAAU,CACZT,QAASA,EACTkB,UAAWA,EACXvE,OAAQA,EACR0a,eAAgB,WACduE,EAAgB9rB,UAChB,IAAI+rB,EAAcD,EAAgB9rB,SAAW6rB,EAAoB7rB,QACjE4rB,GAAmBG,GAAeH,MAGlCpE,EAAW,mBAAQ,WAErB,OADAsE,EAAgB9rB,QAAU,EACnB,WAEL,OADA6rB,EAAoB7rB,UACb,WACL,OAAO6rB,EAAoB7rB,cAG9B,CAACoR,IACJ,OAAoB,wBAAczB,GAAgBwC,SAAU,CAC1DlwB,MAAO,YAAS,YAAS,GAAI0uB,GAAU,CACrC6W,SAAUA,KAEXziB,IAGL,SAASinB,GAAY1mB,GACnB,OAAOA,EAAMznB,KAAO,GA4FtB,IAAI,GAAkB,SAAyBgB,GAC7C,IAAIkmB,EAAWlmB,EAAGkmB,SACd8H,EAAShuB,EAAGguB,OACZ9pB,EAAKlE,EAAGqxB,QACRA,OAAiB,IAAPntB,GAAuBA,EACjCwkC,EAAiB1oC,EAAG0oC,eACpB0E,EAAkBptC,EAAGotC,gBAGrBC,EAAmB1K,KAEnB2K,EADqB,qBAAWvK,KACIsK,EACpCpb,EAAkB,kBAAO,GAEzBsb,EAtFN,SAAsBrnB,GACpB,IAAIsnB,EAAW,GAKf,OAHA,WAAStsC,QAAQglB,GAAU,SAAUO,GACjB,yBAAeA,IAAQ+mB,EAAS/sC,KAAKgmB,MAElD+mB,EAgFgBC,CAAavnB,GAGhCwnB,EAAkB,iBAAOH,GAEzBI,EAAc,iBAAO,IAAIz8B,KAAOiQ,QAEhCysB,EAAU,iBAAO,IAAI99B,KAAOqR,QAIhC,GAlHF,SAA2B+E,EAAUynB,GAEnCznB,EAAShlB,SAAQ,SAAUulB,GACzB,IAAIznB,EAAMmuC,GAAY1mB,GAUtBknB,EAAYh9B,IAAI3R,EAAKynB,MAkGvBonB,CAAkBN,EAAkBI,GAGhC1b,EAAgB9Q,QAElB,OADA8Q,EAAgB9Q,SAAU,EACN,wBAAc,WAAU,KAAMosB,EAAiB/nC,KAAI,SAAUihB,GAC/E,OAAoB,wBAAc,GAAe,CAC/CznB,IAAKmuC,GAAY1mB,GACjB8L,WAAW,EACXlB,UAASA,QAAU/zB,GAClBmpB,OAcP,IATA,IAAIqnB,EAAmB,YAAeP,GAIlCQ,EAAcL,EAAgBvsB,QAAQ3b,IAAI2nC,IAC1Ca,EAAaT,EAAiB/nC,IAAI2nC,IAElCc,EAAaF,EAAY7xC,OAEpBH,EAAI,EAAGA,EAAIkyC,EAAYlyC,IAAK,CACnC,IAAIiD,EAAM+uC,EAAYhyC,IAEW,IAA7BiyC,EAAWzxC,QAAQyC,GACrB4uC,EAAQ/tC,IAAIb,GAGZ4uC,EAAQptC,OAAOxB,GAwDnB,OAlDIouC,GAAmBQ,EAAQp5B,OAC7Bs5B,EAAmB,IAKrBF,EAAQ1sC,SAAQ,SAAUlC,GAExB,IAAiC,IAA7BgvC,EAAWzxC,QAAQyC,GAAvB,CACA,IAAIynB,EAAQknB,EAAYl9B,IAAIzR,GAC5B,GAAKynB,EAAL,CACA,IAAIynB,EAAiBH,EAAYxxC,QAAQyC,GAiBzC8uC,EAAiBhuC,OAAOouC,EAAgB,EAAgB,wBAAc,GAAe,CACnFlvC,IAAKmuC,GAAY1mB,GACjB8L,WAAW,EACXmW,eAlBW,WACXkF,EAAQptC,OAAOxB,GAEf,IAAImvC,EAAcT,EAAgBvsB,QAAQitB,WAAU,SAAU3nB,GAC5D,OAAOA,EAAMznB,MAAQA,KAEvB0uC,EAAgBvsB,QAAQrhB,OAAOquC,EAAa,GAEvCP,EAAQp5B,OACXk5B,EAAgBvsB,QAAUosB,EAC1BD,IACA5E,GAAkBA,MAQpB1a,OAAQA,GACPvH,SAILqnB,EAAmBA,EAAiBtoC,KAAI,SAAUihB,GAChD,IAAIznB,EAAMynB,EAAMznB,IAChB,OAAO4uC,EAAQ1tC,IAAIlB,GAAOynB,EAAqB,wBAAc,GAAe,CAC1EznB,IAAKmuC,GAAY1mB,GACjB8L,WAAW,GACV9L,MAELinB,EAAgBvsB,QAAU2sB,EAMN,wBAAc,WAAU,KAAMF,EAAQp5B,KAAOs5B,EAAmBA,EAAiBtoC,KAAI,SAAUihB,GACjH,OAAoB,uBAAaA,QAKjC4nB,GAAuBxmB,GAAY,MAEvC,GAAsB,qBAAXjqB,OACT,GAAIA,OAAO0wC,WAAY,CACrB,IAAIC,GAAqB3wC,OAAO0wC,WAAW,4BAEvCE,GAA8B,WAChC,OAAOH,GAAqB19B,IAAI49B,GAAmBE,UAGrDF,GAAmBG,YAAYF,IAC/BA,UAEAH,GAAqB19B,KAAI","file":"js/2-74e1a8c23bf759157d64.chunk.js","sourcesContent":["function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\n\n/* global Reflect, Promise */\nvar _extendStatics = function extendStatics(d, b) {\n  _extendStatics = Object.setPrototypeOf || {\n    __proto__: []\n  } instanceof Array && function (d, b) {\n    d.__proto__ = b;\n  } || function (d, b) {\n    for (var p in b) {\n      if (b.hasOwnProperty(p)) d[p] = b[p];\n    }\n  };\n\n  return _extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n  _extendStatics(d, b);\n\n  function __() {\n    this.constructor = d;\n  }\n\n  d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nvar _assign = function __assign() {\n  _assign = Object.assign || function __assign(t) {\n    for (var s, i = 1, n = arguments.length; i < n; i++) {\n      s = arguments[i];\n\n      for (var p in s) {\n        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n      }\n    }\n\n    return t;\n  };\n\n  return _assign.apply(this, arguments);\n};\n\nexport { _assign as __assign };\nexport function __rest(s, e) {\n  var t = {};\n\n  for (var p in s) {\n    if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n  }\n\n  if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n    if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n  }\n  return t;\n}\nexport function __decorate(decorators, target, key, desc) {\n  var c = arguments.length,\n      r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,\n      d;\n  if ((typeof Reflect === \"undefined\" ? \"undefined\" : _typeof(Reflect)) === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) {\n    if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n  }\n  return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\nexport function __param(paramIndex, decorator) {\n  return function (target, key) {\n    decorator(target, key, paramIndex);\n  };\n}\nexport function __metadata(metadataKey, metadataValue) {\n  if ((typeof Reflect === \"undefined\" ? \"undefined\" : _typeof(Reflect)) === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\nexport function __awaiter(thisArg, _arguments, P, generator) {\n  function adopt(value) {\n    return value instanceof P ? value : new P(function (resolve) {\n      resolve(value);\n    });\n  }\n\n  return new (P || (P = Promise))(function (resolve, reject) {\n    function fulfilled(value) {\n      try {\n        step(generator.next(value));\n      } catch (e) {\n        reject(e);\n      }\n    }\n\n    function rejected(value) {\n      try {\n        step(generator[\"throw\"](value));\n      } catch (e) {\n        reject(e);\n      }\n    }\n\n    function step(result) {\n      result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);\n    }\n\n    step((generator = generator.apply(thisArg, _arguments || [])).next());\n  });\n}\nexport function __generator(thisArg, body) {\n  var _ = {\n    label: 0,\n    sent: function sent() {\n      if (t[0] & 1) throw t[1];\n      return t[1];\n    },\n    trys: [],\n    ops: []\n  },\n      f,\n      y,\n      t,\n      g;\n  return g = {\n    next: verb(0),\n    \"throw\": verb(1),\n    \"return\": verb(2)\n  }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function () {\n    return this;\n  }), g;\n\n  function verb(n) {\n    return function (v) {\n      return step([n, v]);\n    };\n  }\n\n  function step(op) {\n    if (f) throw new TypeError(\"Generator is already executing.\");\n\n    while (_) {\n      try {\n        if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n        if (y = 0, t) op = [op[0] & 2, t.value];\n\n        switch (op[0]) {\n          case 0:\n          case 1:\n            t = op;\n            break;\n\n          case 4:\n            _.label++;\n            return {\n              value: op[1],\n              done: false\n            };\n\n          case 5:\n            _.label++;\n            y = op[1];\n            op = [0];\n            continue;\n\n          case 7:\n            op = _.ops.pop();\n\n            _.trys.pop();\n\n            continue;\n\n          default:\n            if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {\n              _ = 0;\n              continue;\n            }\n\n            if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {\n              _.label = op[1];\n              break;\n            }\n\n            if (op[0] === 6 && _.label < t[1]) {\n              _.label = t[1];\n              t = op;\n              break;\n            }\n\n            if (t && _.label < t[2]) {\n              _.label = t[2];\n\n              _.ops.push(op);\n\n              break;\n            }\n\n            if (t[2]) _.ops.pop();\n\n            _.trys.pop();\n\n            continue;\n        }\n\n        op = body.call(thisArg, _);\n      } catch (e) {\n        op = [6, e];\n        y = 0;\n      } finally {\n        f = t = 0;\n      }\n    }\n\n    if (op[0] & 5) throw op[1];\n    return {\n      value: op[0] ? op[1] : void 0,\n      done: true\n    };\n  }\n}\nexport function __createBinding(o, m, k, k2) {\n  if (k2 === undefined) k2 = k;\n  o[k2] = m[k];\n}\nexport function __exportStar(m, exports) {\n  for (var p in m) {\n    if (p !== \"default\" && !exports.hasOwnProperty(p)) exports[p] = m[p];\n  }\n}\nexport function __values(o) {\n  var s = typeof Symbol === \"function\" && Symbol.iterator,\n      m = s && o[s],\n      i = 0;\n  if (m) return m.call(o);\n  if (o && typeof o.length === \"number\") return {\n    next: function next() {\n      if (o && i >= o.length) o = void 0;\n      return {\n        value: o && o[i++],\n        done: !o\n      };\n    }\n  };\n  throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\nexport function __read(o, n) {\n  var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n  if (!m) return o;\n  var i = m.call(o),\n      r,\n      ar = [],\n      e;\n\n  try {\n    while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {\n      ar.push(r.value);\n    }\n  } catch (error) {\n    e = {\n      error: error\n    };\n  } finally {\n    try {\n      if (r && !r.done && (m = i[\"return\"])) m.call(i);\n    } finally {\n      if (e) throw e.error;\n    }\n  }\n\n  return ar;\n}\nexport function __spread() {\n  for (var ar = [], i = 0; i < arguments.length; i++) {\n    ar = ar.concat(__read(arguments[i]));\n  }\n\n  return ar;\n}\nexport function __spreadArrays() {\n  for (var s = 0, i = 0, il = arguments.length; i < il; i++) {\n    s += arguments[i].length;\n  }\n\n  for (var r = Array(s), k = 0, i = 0; i < il; i++) {\n    for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) {\n      r[k] = a[j];\n    }\n  }\n\n  return r;\n}\n;\nexport function __await(v) {\n  return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n  if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n  var g = generator.apply(thisArg, _arguments || []),\n      i,\n      q = [];\n  return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () {\n    return this;\n  }, i;\n\n  function verb(n) {\n    if (g[n]) i[n] = function (v) {\n      return new Promise(function (a, b) {\n        q.push([n, v, a, b]) > 1 || resume(n, v);\n      });\n    };\n  }\n\n  function resume(n, v) {\n    try {\n      step(g[n](v));\n    } catch (e) {\n      settle(q[0][3], e);\n    }\n  }\n\n  function step(r) {\n    r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r);\n  }\n\n  function fulfill(value) {\n    resume(\"next\", value);\n  }\n\n  function reject(value) {\n    resume(\"throw\", value);\n  }\n\n  function settle(f, v) {\n    if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]);\n  }\n}\nexport function __asyncDelegator(o) {\n  var i, p;\n  return i = {}, verb(\"next\"), verb(\"throw\", function (e) {\n    throw e;\n  }), verb(\"return\"), i[Symbol.iterator] = function () {\n    return this;\n  }, i;\n\n  function verb(n, f) {\n    i[n] = o[n] ? function (v) {\n      return (p = !p) ? {\n        value: __await(o[n](v)),\n        done: n === \"return\"\n      } : f ? f(v) : v;\n    } : f;\n  }\n}\nexport function __asyncValues(o) {\n  if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n  var m = o[Symbol.asyncIterator],\n      i;\n  return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () {\n    return this;\n  }, i);\n\n  function verb(n) {\n    i[n] = o[n] && function (v) {\n      return new Promise(function (resolve, reject) {\n        v = o[n](v), settle(resolve, reject, v.done, v.value);\n      });\n    };\n  }\n\n  function settle(resolve, reject, d, v) {\n    Promise.resolve(v).then(function (v) {\n      resolve({\n        value: v,\n        done: d\n      });\n    }, reject);\n  }\n}\nexport function __makeTemplateObject(cooked, raw) {\n  if (Object.defineProperty) {\n    Object.defineProperty(cooked, \"raw\", {\n      value: raw\n    });\n  } else {\n    cooked.raw = raw;\n  }\n\n  return cooked;\n}\n;\nexport function __importStar(mod) {\n  if (mod && mod.__esModule) return mod;\n  var result = {};\n  if (mod != null) for (var k in mod) {\n    if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n  }\n  result.default = mod;\n  return result;\n}\nexport function __importDefault(mod) {\n  return mod && mod.__esModule ? mod : {\n    default: mod\n  };\n}\nexport function __classPrivateFieldGet(receiver, privateMap) {\n  if (!privateMap.has(receiver)) {\n    throw new TypeError(\"attempted to get private field on non-instance\");\n  }\n\n  return privateMap.get(receiver);\n}\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\n  if (!privateMap.has(receiver)) {\n    throw new TypeError(\"attempted to set private field on non-instance\");\n  }\n\n  privateMap.set(receiver, value);\n  return value;\n}","function memoize(fn) {\n  var cache = {};\n  return function (arg) {\n    if (cache[arg] === undefined) cache[arg] = fn(arg);\n    return cache[arg];\n  };\n}\n\nexport default memoize;","import memoize from '@emotion/memoize';\nvar reactPropsRegex = /^((children|dangerouslySetInnerHTML|key|ref|autoFocus|defaultValue|defaultChecked|innerHTML|suppressContentEditableWarning|suppressHydrationWarning|valueLink|accept|acceptCharset|accessKey|action|allow|allowUserMedia|allowPaymentRequest|allowFullScreen|allowTransparency|alt|async|autoComplete|autoPlay|capture|cellPadding|cellSpacing|challenge|charSet|checked|cite|classID|className|cols|colSpan|content|contentEditable|contextMenu|controls|controlsList|coords|crossOrigin|data|dateTime|decoding|default|defer|dir|disabled|disablePictureInPicture|download|draggable|encType|form|formAction|formEncType|formMethod|formNoValidate|formTarget|frameBorder|headers|height|hidden|high|href|hrefLang|htmlFor|httpEquiv|id|inputMode|integrity|is|keyParams|keyType|kind|label|lang|list|loading|loop|low|marginHeight|marginWidth|max|maxLength|media|mediaGroup|method|min|minLength|multiple|muted|name|nonce|noValidate|open|optimum|pattern|placeholder|playsInline|poster|preload|profile|radioGroup|readOnly|referrerPolicy|rel|required|reversed|role|rows|rowSpan|sandbox|scope|scoped|scrolling|seamless|selected|shape|size|sizes|slot|span|spellCheck|src|srcDoc|srcLang|srcSet|start|step|style|summary|tabIndex|target|title|type|useMap|value|width|wmode|wrap|about|datatype|inlist|prefix|property|resource|typeof|vocab|autoCapitalize|autoCorrect|autoSave|color|inert|itemProp|itemScope|itemType|itemID|itemRef|on|results|security|unselectable|accentHeight|accumulate|additive|alignmentBaseline|allowReorder|alphabetic|amplitude|arabicForm|ascent|attributeName|attributeType|autoReverse|azimuth|baseFrequency|baselineShift|baseProfile|bbox|begin|bias|by|calcMode|capHeight|clip|clipPathUnits|clipPath|clipRule|colorInterpolation|colorInterpolationFilters|colorProfile|colorRendering|contentScriptType|contentStyleType|cursor|cx|cy|d|decelerate|descent|diffuseConstant|direction|display|divisor|dominantBaseline|dur|dx|dy|edgeMode|elevation|enableBackground|end|exponent|externalResourcesRequired|fill|fillOpacity|fillRule|filter|filterRes|filterUnits|floodColor|floodOpacity|focusable|fontFamily|fontSize|fontSizeAdjust|fontStretch|fontStyle|fontVariant|fontWeight|format|from|fr|fx|fy|g1|g2|glyphName|glyphOrientationHorizontal|glyphOrientationVertical|glyphRef|gradientTransform|gradientUnits|hanging|horizAdvX|horizOriginX|ideographic|imageRendering|in|in2|intercept|k|k1|k2|k3|k4|kernelMatrix|kernelUnitLength|kerning|keyPoints|keySplines|keyTimes|lengthAdjust|letterSpacing|lightingColor|limitingConeAngle|local|markerEnd|markerMid|markerStart|markerHeight|markerUnits|markerWidth|mask|maskContentUnits|maskUnits|mathematical|mode|numOctaves|offset|opacity|operator|order|orient|orientation|origin|overflow|overlinePosition|overlineThickness|panose1|paintOrder|pathLength|patternContentUnits|patternTransform|patternUnits|pointerEvents|points|pointsAtX|pointsAtY|pointsAtZ|preserveAlpha|preserveAspectRatio|primitiveUnits|r|radius|refX|refY|renderingIntent|repeatCount|repeatDur|requiredExtensions|requiredFeatures|restart|result|rotate|rx|ry|scale|seed|shapeRendering|slope|spacing|specularConstant|specularExponent|speed|spreadMethod|startOffset|stdDeviation|stemh|stemv|stitchTiles|stopColor|stopOpacity|strikethroughPosition|strikethroughThickness|string|stroke|strokeDasharray|strokeDashoffset|strokeLinecap|strokeLinejoin|strokeMiterlimit|strokeOpacity|strokeWidth|surfaceScale|systemLanguage|tableValues|targetX|targetY|textAnchor|textDecoration|textRendering|textLength|to|transform|u1|u2|underlinePosition|underlineThickness|unicode|unicodeBidi|unicodeRange|unitsPerEm|vAlphabetic|vHanging|vIdeographic|vMathematical|values|vectorEffect|version|vertAdvY|vertOriginX|vertOriginY|viewBox|viewTarget|visibility|widths|wordSpacing|writingMode|x|xHeight|x1|x2|xChannelSelector|xlinkActuate|xlinkArcrole|xlinkHref|xlinkRole|xlinkShow|xlinkTitle|xlinkType|xmlBase|xmlns|xmlnsXlink|xmlLang|xmlSpace|y|y1|y2|yChannelSelector|z|zoomAndPan|for|class|autofocus)|(([Dd][Aa][Tt][Aa]|[Aa][Rr][Ii][Aa]|x)-.*))$/; // https://esbench.com/bench/5bfee68a4cd7e6009ef61d23\n\nvar index = memoize(function (prop) {\n  return reactPropsRegex.test(prop) || prop.charCodeAt(0) === 111\n  /* o */\n  && prop.charCodeAt(1) === 110\n  /* n */\n  && prop.charCodeAt(2) < 91;\n}\n/* Z+1 */\n);\nexport default index;","import { invariant } from 'hey-listen';\nvar prevTime = 0;\nvar onNextFrame = typeof window !== 'undefined' && window.requestAnimationFrame !== undefined ? function (callback) {\n  return window.requestAnimationFrame(callback);\n} : function (callback) {\n  var timestamp = Date.now();\n  var timeToCall = Math.max(0, 16.7 - (timestamp - prevTime));\n  prevTime = timestamp + timeToCall;\n  setTimeout(function () {\n    return callback(prevTime);\n  }, timeToCall);\n};\n\nvar createStep = function createStep(setRunNextFrame) {\n  var processToRun = [];\n  var processToRunNextFrame = [];\n  var numThisFrame = 0;\n  var isProcessing = false;\n  var i = 0;\n  var cancelled = new WeakSet();\n  var toKeepAlive = new WeakSet();\n  var renderStep = {\n    cancel: function cancel(process) {\n      var indexOfCallback = processToRunNextFrame.indexOf(process);\n      cancelled.add(process);\n\n      if (indexOfCallback !== -1) {\n        processToRunNextFrame.splice(indexOfCallback, 1);\n      }\n    },\n    process: function process(frame) {\n      var _a;\n\n      isProcessing = true;\n      _a = [processToRunNextFrame, processToRun], processToRun = _a[0], processToRunNextFrame = _a[1];\n      processToRunNextFrame.length = 0;\n      numThisFrame = processToRun.length;\n\n      if (numThisFrame) {\n        var process_1;\n\n        for (i = 0; i < numThisFrame; i++) {\n          process_1 = processToRun[i];\n          process_1(frame);\n\n          if (toKeepAlive.has(process_1) === true && !cancelled.has(process_1)) {\n            renderStep.schedule(process_1);\n            setRunNextFrame(true);\n          }\n        }\n      }\n\n      isProcessing = false;\n    },\n    schedule: function schedule(process, keepAlive, immediate) {\n      if (keepAlive === void 0) {\n        keepAlive = false;\n      }\n\n      if (immediate === void 0) {\n        immediate = false;\n      }\n\n      invariant(typeof process === \"function\", \"Argument must be a function\");\n      var addToCurrentBuffer = immediate && isProcessing;\n      var buffer = addToCurrentBuffer ? processToRun : processToRunNextFrame;\n      cancelled.delete(process);\n      if (keepAlive) toKeepAlive.add(process);\n\n      if (buffer.indexOf(process) === -1) {\n        buffer.push(process);\n        if (addToCurrentBuffer) numThisFrame = processToRun.length;\n      }\n    }\n  };\n  return renderStep;\n};\n\nvar maxElapsed = 40;\nvar defaultElapsed = 1 / 60 * 1000;\nvar useDefaultElapsed = true;\nvar willRunNextFrame = false;\nvar isProcessing = false;\nvar frame = {\n  delta: 0,\n  timestamp: 0\n};\nvar stepsOrder = [\"read\", \"update\", \"preRender\", \"render\", \"postRender\"];\n\nvar setWillRunNextFrame = function setWillRunNextFrame(willRun) {\n  return willRunNextFrame = willRun;\n};\n\nvar steps = /*#__PURE__*/stepsOrder.reduce(function (acc, key) {\n  acc[key] = createStep(setWillRunNextFrame);\n  return acc;\n}, {});\nvar sync = /*#__PURE__*/stepsOrder.reduce(function (acc, key) {\n  var step = steps[key];\n\n  acc[key] = function (process, keepAlive, immediate) {\n    if (keepAlive === void 0) {\n      keepAlive = false;\n    }\n\n    if (immediate === void 0) {\n      immediate = false;\n    }\n\n    if (!willRunNextFrame) startLoop();\n    step.schedule(process, keepAlive, immediate);\n    return process;\n  };\n\n  return acc;\n}, {});\nvar cancelSync = /*#__PURE__*/stepsOrder.reduce(function (acc, key) {\n  acc[key] = steps[key].cancel;\n  return acc;\n}, {});\n\nvar processStep = function processStep(stepId) {\n  return steps[stepId].process(frame);\n};\n\nvar processFrame = function processFrame(timestamp) {\n  willRunNextFrame = false;\n  frame.delta = useDefaultElapsed ? defaultElapsed : Math.max(Math.min(timestamp - frame.timestamp, maxElapsed), 1);\n  if (!useDefaultElapsed) defaultElapsed = frame.delta;\n  frame.timestamp = timestamp;\n  isProcessing = true;\n  stepsOrder.forEach(processStep);\n  isProcessing = false;\n\n  if (willRunNextFrame) {\n    useDefaultElapsed = false;\n    onNextFrame(processFrame);\n  }\n};\n\nvar startLoop = function startLoop() {\n  willRunNextFrame = true;\n  useDefaultElapsed = true;\n  if (!isProcessing) onNextFrame(processFrame);\n};\n\nvar getFrameData = function getFrameData() {\n  return frame;\n};\n\nexport default sync;\nexport { cancelSync, getFrameData };","import { __assign } from 'tslib';\n\nvar clamp = function clamp(min, max) {\n  return function (v) {\n    return Math.max(Math.min(v, max), min);\n  };\n};\n\nvar sanitize = function sanitize(v) {\n  return v % 1 ? Number(v.toFixed(5)) : v;\n};\n\nvar floatRegex = /(-)?(\\d[\\d\\.]*)/g;\nvar colorRegex = /(#[0-9a-f]{6}|#[0-9a-f]{3}|#(?:[0-9a-f]{2}){2,4}|(rgb|hsl)a?\\((-?[\\d\\.]+%?[,\\s]+){2,3}\\s*\\/*\\s*[\\d\\.]+%?\\))/gi;\nvar singleColorRegex = /^(#[0-9a-f]{3}|#(?:[0-9a-f]{2}){2,4}|(rgb|hsl)a?\\((-?[\\d\\.]+%?[,\\s]+){2,3}\\s*\\/*\\s*[\\d\\.]+%?\\))$/i;\nvar number = {\n  test: function test(v) {\n    return typeof v === 'number';\n  },\n  parse: parseFloat,\n  transform: function transform(v) {\n    return v;\n  }\n};\n\nvar alpha = __assign(__assign({}, number), {\n  transform: clamp(0, 1)\n});\n\nvar scale = __assign(__assign({}, number), {\n  default: 1\n});\n\nvar createUnitType = function createUnitType(unit) {\n  return {\n    test: function test(v) {\n      return typeof v === 'string' && v.endsWith(unit) && v.split(' ').length === 1;\n    },\n    parse: parseFloat,\n    transform: function transform(v) {\n      return \"\" + v + unit;\n    }\n  };\n};\n\nvar degrees = createUnitType('deg');\nvar percent = createUnitType('%');\nvar px = createUnitType('px');\nvar vh = createUnitType('vh');\nvar vw = createUnitType('vw');\n\nvar progressPercentage = __assign(__assign({}, percent), {\n  parse: function parse(v) {\n    return percent.parse(v) / 100;\n  },\n  transform: function transform(v) {\n    return percent.transform(v * 100);\n  }\n});\n\nvar getValueFromFunctionString = function getValueFromFunctionString(value) {\n  return value.substring(value.indexOf('(') + 1, value.lastIndexOf(')'));\n};\n\nvar clampRgbUnit = clamp(0, 255);\n\nvar isRgba = function isRgba(v) {\n  return v.red !== undefined;\n};\n\nvar isHsla = function isHsla(v) {\n  return v.hue !== undefined;\n};\n\nfunction getValuesAsArray(value) {\n  return getValueFromFunctionString(value).replace(/(,|\\/)/g, ' ').split(/ \\s*/);\n}\n\nvar splitColorValues = function splitColorValues(terms) {\n  return function (v) {\n    if (typeof v !== 'string') return v;\n    var values = {};\n    var valuesArray = getValuesAsArray(v);\n\n    for (var i = 0; i < 4; i++) {\n      values[terms[i]] = valuesArray[i] !== undefined ? parseFloat(valuesArray[i]) : 1;\n    }\n\n    return values;\n  };\n};\n\nvar rgbaTemplate = function rgbaTemplate(_a) {\n  var red = _a.red,\n      green = _a.green,\n      blue = _a.blue,\n      _b = _a.alpha,\n      alpha = _b === void 0 ? 1 : _b;\n  return \"rgba(\" + red + \", \" + green + \", \" + blue + \", \" + alpha + \")\";\n};\n\nvar hslaTemplate = function hslaTemplate(_a) {\n  var hue = _a.hue,\n      saturation = _a.saturation,\n      lightness = _a.lightness,\n      _b = _a.alpha,\n      alpha = _b === void 0 ? 1 : _b;\n  return \"hsla(\" + hue + \", \" + saturation + \", \" + lightness + \", \" + alpha + \")\";\n};\n\nvar rgbUnit = __assign(__assign({}, number), {\n  transform: function transform(v) {\n    return Math.round(clampRgbUnit(v));\n  }\n});\n\nfunction isColorString(color, colorType) {\n  return color.startsWith(colorType) && singleColorRegex.test(color);\n}\n\nvar rgba = {\n  test: function test(v) {\n    return typeof v === 'string' ? isColorString(v, 'rgb') : isRgba(v);\n  },\n  parse: splitColorValues(['red', 'green', 'blue', 'alpha']),\n  transform: function transform(_a) {\n    var red = _a.red,\n        green = _a.green,\n        blue = _a.blue,\n        _b = _a.alpha,\n        alpha$1 = _b === void 0 ? 1 : _b;\n    return rgbaTemplate({\n      red: rgbUnit.transform(red),\n      green: rgbUnit.transform(green),\n      blue: rgbUnit.transform(blue),\n      alpha: sanitize(alpha.transform(alpha$1))\n    });\n  }\n};\nvar hsla = {\n  test: function test(v) {\n    return typeof v === 'string' ? isColorString(v, 'hsl') : isHsla(v);\n  },\n  parse: splitColorValues(['hue', 'saturation', 'lightness', 'alpha']),\n  transform: function transform(_a) {\n    var hue = _a.hue,\n        saturation = _a.saturation,\n        lightness = _a.lightness,\n        _b = _a.alpha,\n        alpha$1 = _b === void 0 ? 1 : _b;\n    return hslaTemplate({\n      hue: Math.round(hue),\n      saturation: percent.transform(sanitize(saturation)),\n      lightness: percent.transform(sanitize(lightness)),\n      alpha: sanitize(alpha.transform(alpha$1))\n    });\n  }\n};\n\nvar hex = __assign(__assign({}, rgba), {\n  test: function test(v) {\n    return typeof v === 'string' && isColorString(v, '#');\n  },\n  parse: function parse(v) {\n    var r = '';\n    var g = '';\n    var b = '';\n\n    if (v.length > 4) {\n      r = v.substr(1, 2);\n      g = v.substr(3, 2);\n      b = v.substr(5, 2);\n    } else {\n      r = v.substr(1, 1);\n      g = v.substr(2, 1);\n      b = v.substr(3, 1);\n      r += r;\n      g += g;\n      b += b;\n    }\n\n    return {\n      red: parseInt(r, 16),\n      green: parseInt(g, 16),\n      blue: parseInt(b, 16),\n      alpha: 1\n    };\n  }\n});\n\nvar color = {\n  test: function test(v) {\n    return typeof v === 'string' && singleColorRegex.test(v) || isRgba(v) || isHsla(v);\n  },\n  parse: function parse(v) {\n    if (rgba.test(v)) {\n      return rgba.parse(v);\n    } else if (hsla.test(v)) {\n      return hsla.parse(v);\n    } else if (hex.test(v)) {\n      return hex.parse(v);\n    }\n\n    return v;\n  },\n  transform: function transform(v) {\n    if (isRgba(v)) {\n      return rgba.transform(v);\n    } else if (isHsla(v)) {\n      return hsla.transform(v);\n    }\n\n    return v;\n  }\n};\nvar COLOR_TOKEN = '${c}';\nvar NUMBER_TOKEN = '${n}';\n\nvar convertNumbersToZero = function convertNumbersToZero(v) {\n  return typeof v === 'number' ? 0 : v;\n};\n\nvar complex = {\n  test: function test(v) {\n    if (typeof v !== 'string' || !isNaN(v)) return false;\n    var numValues = 0;\n    var foundNumbers = v.match(floatRegex);\n    var foundColors = v.match(colorRegex);\n    if (foundNumbers) numValues += foundNumbers.length;\n    if (foundColors) numValues += foundColors.length;\n    return numValues > 0;\n  },\n  parse: function parse(v) {\n    var input = v;\n    var parsed = [];\n    var foundColors = input.match(colorRegex);\n\n    if (foundColors) {\n      input = input.replace(colorRegex, COLOR_TOKEN);\n      parsed.push.apply(parsed, foundColors.map(color.parse));\n    }\n\n    var foundNumbers = input.match(floatRegex);\n\n    if (foundNumbers) {\n      parsed.push.apply(parsed, foundNumbers.map(number.parse));\n    }\n\n    return parsed;\n  },\n  createTransformer: function createTransformer(prop) {\n    var template = prop;\n    var token = 0;\n    var foundColors = prop.match(colorRegex);\n    var numColors = foundColors ? foundColors.length : 0;\n\n    if (foundColors) {\n      for (var i = 0; i < numColors; i++) {\n        template = template.replace(foundColors[i], COLOR_TOKEN);\n        token++;\n      }\n    }\n\n    var foundNumbers = template.match(floatRegex);\n    var numNumbers = foundNumbers ? foundNumbers.length : 0;\n\n    if (foundNumbers) {\n      for (var i = 0; i < numNumbers; i++) {\n        template = template.replace(foundNumbers[i], NUMBER_TOKEN);\n        token++;\n      }\n    }\n\n    return function (v) {\n      var output = template;\n\n      for (var i = 0; i < token; i++) {\n        output = output.replace(i < numColors ? COLOR_TOKEN : NUMBER_TOKEN, i < numColors ? color.transform(v[i]) : sanitize(v[i]));\n      }\n\n      return output;\n    };\n  },\n  getAnimatableNone: function getAnimatableNone(target) {\n    var parsedTarget = complex.parse(target);\n    var targetTransformer = complex.createTransformer(target);\n    return targetTransformer(parsedTarget.map(convertNumbersToZero));\n  }\n};\nexport { alpha, color, complex, degrees, hex, hsla, number, percent, progressPercentage, px, rgbUnit, rgba, scale, vh, vw };","var DEFAULT_OVERSHOOT_STRENGTH = 1.525;\n\nvar reversed = function reversed(easing) {\n  return function (p) {\n    return 1 - easing(1 - p);\n  };\n};\n\nvar mirrored = function mirrored(easing) {\n  return function (p) {\n    return p <= 0.5 ? easing(2 * p) / 2 : (2 - easing(2 * (1 - p))) / 2;\n  };\n};\n\nvar createReversedEasing = reversed;\nvar createMirroredEasing = mirrored;\n\nvar createExpoIn = function createExpoIn(power) {\n  return function (p) {\n    return Math.pow(p, power);\n  };\n};\n\nvar createBackIn = function createBackIn(power) {\n  return function (p) {\n    return p * p * ((power + 1) * p - power);\n  };\n};\n\nvar createAnticipateEasing = function createAnticipateEasing(power) {\n  var backEasing = createBackIn(power);\n  return function (p) {\n    return (p *= 2) < 1 ? 0.5 * backEasing(p) : 0.5 * (2 - Math.pow(2, -10 * (p - 1)));\n  };\n};\n\nvar linear = function linear(p) {\n  return p;\n};\n\nvar easeIn = /*#__PURE__*/createExpoIn(2);\nvar easeOut = /*#__PURE__*/reversed(easeIn);\nvar easeInOut = /*#__PURE__*/mirrored(easeIn);\n\nvar circIn = function circIn(p) {\n  return 1 - Math.sin(Math.acos(p));\n};\n\nvar circOut = /*#__PURE__*/reversed(circIn);\nvar circInOut = /*#__PURE__*/mirrored(circOut);\nvar backIn = /*#__PURE__*/createBackIn(DEFAULT_OVERSHOOT_STRENGTH);\nvar backOut = /*#__PURE__*/reversed(backIn);\nvar backInOut = /*#__PURE__*/mirrored(backIn);\nvar anticipate = /*#__PURE__*/createAnticipateEasing(DEFAULT_OVERSHOOT_STRENGTH);\nvar BOUNCE_FIRST_THRESHOLD = 4.0 / 11.0;\nvar BOUNCE_SECOND_THRESHOLD = 8.0 / 11.0;\nvar BOUNCE_THIRD_THRESHOLD = 9.0 / 10.0;\nvar ca = 4356.0 / 361.0;\nvar cb = 35442.0 / 1805.0;\nvar cc = 16061.0 / 1805.0;\n\nvar bounceOut = function bounceOut(p) {\n  var p2 = p * p;\n  return p < BOUNCE_FIRST_THRESHOLD ? 7.5625 * p2 : p < BOUNCE_SECOND_THRESHOLD ? 9.075 * p2 - 9.9 * p + 3.4 : p < BOUNCE_THIRD_THRESHOLD ? ca * p2 - cb * p + cc : 10.8 * p * p - 20.52 * p + 10.72;\n};\n\nvar bounceIn = function bounceIn(p) {\n  return 1.0 - bounceOut(1.0 - p);\n};\n\nvar bounceInOut = function bounceInOut(p) {\n  return p < 0.5 ? 0.5 * (1.0 - bounceOut(1.0 - p * 2.0)) : 0.5 * bounceOut(p * 2.0 - 1.0) + 0.5;\n};\n\nvar NEWTON_ITERATIONS = 8;\nvar NEWTON_MIN_SLOPE = 0.001;\nvar SUBDIVISION_PRECISION = 0.0000001;\nvar SUBDIVISION_MAX_ITERATIONS = 10;\nvar K_SPLINE_TABLE_SIZE = 11;\nvar K_SAMPLE_STEP_SIZE = 1.0 / (K_SPLINE_TABLE_SIZE - 1.0);\nvar FLOAT_32_SUPPORTED = typeof Float32Array !== 'undefined';\n\nvar a = function a(a1, a2) {\n  return 1.0 - 3.0 * a2 + 3.0 * a1;\n};\n\nvar b = function b(a1, a2) {\n  return 3.0 * a2 - 6.0 * a1;\n};\n\nvar c = function c(a1) {\n  return 3.0 * a1;\n};\n\nvar getSlope = function getSlope(t, a1, a2) {\n  return 3.0 * a(a1, a2) * t * t + 2.0 * b(a1, a2) * t + c(a1);\n};\n\nvar calcBezier = function calcBezier(t, a1, a2) {\n  return ((a(a1, a2) * t + b(a1, a2)) * t + c(a1)) * t;\n};\n\nfunction cubicBezier(mX1, mY1, mX2, mY2) {\n  var sampleValues = FLOAT_32_SUPPORTED ? new Float32Array(K_SPLINE_TABLE_SIZE) : new Array(K_SPLINE_TABLE_SIZE);\n\n  var binarySubdivide = function binarySubdivide(aX, aA, aB) {\n    var i = 0;\n    var currentX;\n    var currentT;\n\n    do {\n      currentT = aA + (aB - aA) / 2.0;\n      currentX = calcBezier(currentT, mX1, mX2) - aX;\n\n      if (currentX > 0.0) {\n        aB = currentT;\n      } else {\n        aA = currentT;\n      }\n    } while (Math.abs(currentX) > SUBDIVISION_PRECISION && ++i < SUBDIVISION_MAX_ITERATIONS);\n\n    return currentT;\n  };\n\n  var newtonRaphsonIterate = function newtonRaphsonIterate(aX, aGuessT) {\n    var i = 0;\n    var currentSlope = 0;\n    var currentX;\n\n    for (; i < NEWTON_ITERATIONS; ++i) {\n      currentSlope = getSlope(aGuessT, mX1, mX2);\n\n      if (currentSlope === 0.0) {\n        return aGuessT;\n      }\n\n      currentX = calcBezier(aGuessT, mX1, mX2) - aX;\n      aGuessT -= currentX / currentSlope;\n    }\n\n    return aGuessT;\n  };\n\n  var calcSampleValues = function calcSampleValues() {\n    for (var i = 0; i < K_SPLINE_TABLE_SIZE; ++i) {\n      sampleValues[i] = calcBezier(i * K_SAMPLE_STEP_SIZE, mX1, mX2);\n    }\n  };\n\n  var getTForX = function getTForX(aX) {\n    var intervalStart = 0.0;\n    var currentSample = 1;\n    var lastSample = K_SPLINE_TABLE_SIZE - 1;\n    var dist = 0.0;\n    var guessForT = 0.0;\n    var initialSlope = 0.0;\n\n    for (; currentSample !== lastSample && sampleValues[currentSample] <= aX; ++currentSample) {\n      intervalStart += K_SAMPLE_STEP_SIZE;\n    }\n\n    --currentSample;\n    dist = (aX - sampleValues[currentSample]) / (sampleValues[currentSample + 1] - sampleValues[currentSample]);\n    guessForT = intervalStart + dist * K_SAMPLE_STEP_SIZE;\n    initialSlope = getSlope(guessForT, mX1, mX2);\n\n    if (initialSlope >= NEWTON_MIN_SLOPE) {\n      return newtonRaphsonIterate(aX, guessForT);\n    } else if (initialSlope === 0.0) {\n      return guessForT;\n    } else {\n      return binarySubdivide(aX, intervalStart, intervalStart + K_SAMPLE_STEP_SIZE);\n    }\n  };\n\n  calcSampleValues();\n\n  var resolver = function resolver(aX) {\n    var returnValue;\n\n    if (mX1 === mY1 && mX2 === mY2) {\n      returnValue = aX;\n    } else if (aX === 0) {\n      returnValue = 0;\n    } else if (aX === 1) {\n      returnValue = 1;\n    } else {\n      returnValue = calcBezier(getTForX(aX), mY1, mY2);\n    }\n\n    return returnValue;\n  };\n\n  return resolver;\n}\n\nexport { reversed, mirrored, createReversedEasing, createMirroredEasing, createExpoIn, createBackIn, createAnticipateEasing, linear, easeIn, easeOut, easeInOut, circIn, circOut, circInOut, backIn, backOut, backInOut, anticipate, bounceOut, bounceIn, bounceInOut, cubicBezier };","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nimport { hsla, rgba, hex, color, complex } from 'style-value-types';\nimport { invariant } from 'hey-listen';\nimport { getFrameData } from 'framesync';\nimport { createAnticipateEasing, createBackIn, createExpoIn, cubicBezier, linear, easeIn, easeOut, easeInOut, circIn, circOut, circInOut, backIn, backOut, backInOut, anticipate, reversed, mirrored } from '@popmotion/easing';\nexport { createAnticipateEasing, createBackIn, createExpoIn, cubicBezier, linear, easeIn, easeOut, easeInOut, circIn, circOut, circInOut, backIn, backOut, backInOut, anticipate, reversed, mirrored } from '@popmotion/easing';\nvar zeroPoint = {\n  x: 0,\n  y: 0,\n  z: 0\n};\n\nvar isNum = function isNum(v) {\n  return typeof v === 'number';\n};\n\nvar radiansToDegrees = function radiansToDegrees(radians) {\n  return radians * 180 / Math.PI;\n};\n\nvar angle = function angle(a, b) {\n  if (b === void 0) {\n    b = zeroPoint;\n  }\n\n  return radiansToDegrees(Math.atan2(b.y - a.y, b.x - a.x));\n};\n\nvar applyOffset = function applyOffset(from, to) {\n  var hasReceivedFrom = true;\n\n  if (to === undefined) {\n    to = from;\n    hasReceivedFrom = false;\n  }\n\n  return function (v) {\n    if (hasReceivedFrom) {\n      return v - from + to;\n    } else {\n      from = v;\n      hasReceivedFrom = true;\n      return to;\n    }\n  };\n};\n\nvar curryRange = function curryRange(func) {\n  return function (min, max, v) {\n    return v !== undefined ? func(min, max, v) : function (cv) {\n      return func(min, max, cv);\n    };\n  };\n};\n\nvar clamp = function clamp(min, max, v) {\n  return Math.min(Math.max(v, min), max);\n};\n\nvar clamp$1 = curryRange(clamp);\n\nvar conditional = function conditional(check, apply) {\n  return function (v) {\n    return check(v) ? apply(v) : v;\n  };\n};\n\nvar degreesToRadians = function degreesToRadians(degrees) {\n  return degrees * Math.PI / 180;\n};\n\nvar isPoint = function isPoint(point) {\n  return point.hasOwnProperty('x') && point.hasOwnProperty('y');\n};\n\nvar isPoint3D = function isPoint3D(point) {\n  return isPoint(point) && point.hasOwnProperty('z');\n};\n\nvar distance1D = function distance1D(a, b) {\n  return Math.abs(a - b);\n};\n\nvar distance = function distance(a, b) {\n  if (b === void 0) {\n    b = zeroPoint;\n  }\n\n  if (isNum(a) && isNum(b)) {\n    return distance1D(a, b);\n  } else if (isPoint(a) && isPoint(b)) {\n    var xDelta = distance1D(a.x, b.x);\n    var yDelta = distance1D(a.y, b.y);\n    var zDelta = isPoint3D(a) && isPoint3D(b) ? distance1D(a.z, b.z) : 0;\n    return Math.sqrt(Math.pow(xDelta, 2) + Math.pow(yDelta, 2) + Math.pow(zDelta, 2));\n  }\n\n  return 0;\n};\n\nvar progress = function progress(from, to, value) {\n  var toFromDifference = to - from;\n  return toFromDifference === 0 ? 1 : (value - from) / toFromDifference;\n};\n\nvar mix = function mix(from, to, progress) {\n  return -progress * from + progress * to + from;\n};\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\n\n\nvar _assign = function __assign() {\n  _assign = Object.assign || function __assign(t) {\n    for (var s, i = 1, n = arguments.length; i < n; i++) {\n      s = arguments[i];\n\n      for (var p in s) {\n        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n      }\n    }\n\n    return t;\n  };\n\n  return _assign.apply(this, arguments);\n};\n\nvar mixLinearColor = function mixLinearColor(from, to, v) {\n  var fromExpo = from * from;\n  var toExpo = to * to;\n  return Math.sqrt(Math.max(0, v * (toExpo - fromExpo) + fromExpo));\n};\n\nvar colorTypes = [hex, rgba, hsla];\n\nvar getColorType = function getColorType(v) {\n  return colorTypes.find(function (type) {\n    return type.test(v);\n  });\n};\n\nvar notAnimatable = function notAnimatable(color$$1) {\n  return \"'\" + color$$1 + \"' is not an animatable color. Use the equivalent color code instead.\";\n};\n\nvar mixColor = function mixColor(from, to) {\n  var fromColorType = getColorType(from);\n  var toColorType = getColorType(to);\n  invariant(!!fromColorType, notAnimatable(from));\n  invariant(!!toColorType, notAnimatable(to));\n  invariant(fromColorType.transform === toColorType.transform, 'Both colors must be hex/RGBA, OR both must be HSLA.');\n  var fromColor = fromColorType.parse(from);\n  var toColor = toColorType.parse(to);\n\n  var blended = _assign({}, fromColor);\n\n  var mixFunc = fromColorType === hsla ? mix : mixLinearColor;\n  return function (v) {\n    for (var key in blended) {\n      if (key !== 'alpha') {\n        blended[key] = mixFunc(fromColor[key], toColor[key], v);\n      }\n    }\n\n    blended.alpha = mix(fromColor.alpha, toColor.alpha, v);\n    return fromColorType.transform(blended);\n  };\n};\n\nvar combineFunctions = function combineFunctions(a, b) {\n  return function (v) {\n    return b(a(v));\n  };\n};\n\nvar pipe = function pipe() {\n  var transformers = [];\n\n  for (var _i = 0; _i < arguments.length; _i++) {\n    transformers[_i] = arguments[_i];\n  }\n\n  return transformers.reduce(combineFunctions);\n};\n\nfunction getMixer(origin, target) {\n  if (isNum(origin)) {\n    return function (v) {\n      return mix(origin, target, v);\n    };\n  } else if (color.test(origin)) {\n    return mixColor(origin, target);\n  } else {\n    return mixComplex(origin, target);\n  }\n}\n\nvar mixArray = function mixArray(from, to) {\n  var output = from.slice();\n  var numValues = output.length;\n  var blendValue = from.map(function (fromThis, i) {\n    return getMixer(fromThis, to[i]);\n  });\n  return function (v) {\n    for (var i = 0; i < numValues; i++) {\n      output[i] = blendValue[i](v);\n    }\n\n    return output;\n  };\n};\n\nvar mixObject = function mixObject(origin, target) {\n  var output = _assign({}, origin, target);\n\n  var blendValue = {};\n\n  for (var key in output) {\n    if (origin[key] !== undefined && target[key] !== undefined) {\n      blendValue[key] = getMixer(origin[key], target[key]);\n    }\n  }\n\n  return function (v) {\n    for (var key in blendValue) {\n      output[key] = blendValue[key](v);\n    }\n\n    return output;\n  };\n};\n\nfunction analyse(value) {\n  var parsed = complex.parse(value);\n  var numValues = parsed.length;\n  var numNumbers = 0;\n  var numRGB = 0;\n  var numHSL = 0;\n\n  for (var i = 0; i < numValues; i++) {\n    if (numNumbers || typeof parsed[i] === 'number') {\n      numNumbers++;\n    } else {\n      if (parsed[i].hue !== undefined) {\n        numHSL++;\n      } else {\n        numRGB++;\n      }\n    }\n  }\n\n  return {\n    parsed: parsed,\n    numNumbers: numNumbers,\n    numRGB: numRGB,\n    numHSL: numHSL\n  };\n}\n\nvar mixComplex = function mixComplex(origin, target) {\n  var template = complex.createTransformer(target);\n  var originStats = analyse(origin);\n  var targetStats = analyse(target);\n  invariant(originStats.numHSL === targetStats.numHSL && originStats.numRGB === targetStats.numRGB && originStats.numNumbers >= targetStats.numNumbers, \"Complex values '\" + origin + \"' and '\" + target + \"' too different to mix. Ensure all colors are of the same type.\");\n  return pipe(mixArray(originStats.parsed, targetStats.parsed), template);\n};\n\nvar mixNumber = function mixNumber(from, to) {\n  return function (p) {\n    return mix(from, to, p);\n  };\n};\n\nfunction detectMixerFactory(v) {\n  if (typeof v === 'number') {\n    return mixNumber;\n  } else if (typeof v === 'string') {\n    if (color.test(v)) {\n      return mixColor;\n    } else {\n      return mixComplex;\n    }\n  } else if (Array.isArray(v)) {\n    return mixArray;\n  } else if (_typeof(v) === 'object') {\n    return mixObject;\n  }\n}\n\nfunction createMixers(output, ease, customMixer) {\n  var mixers = [];\n  var mixerFactory = customMixer || detectMixerFactory(output[0]);\n  var numMixers = output.length - 1;\n\n  for (var i = 0; i < numMixers; i++) {\n    var mixer = mixerFactory(output[i], output[i + 1]);\n\n    if (ease) {\n      var easingFunction = Array.isArray(ease) ? ease[i] : ease;\n      mixer = pipe(easingFunction, mixer);\n    }\n\n    mixers.push(mixer);\n  }\n\n  return mixers;\n}\n\nfunction fastInterpolate(_a, _b) {\n  var from = _a[0],\n      to = _a[1];\n  var mixer = _b[0];\n  return function (v) {\n    return mixer(progress(from, to, v));\n  };\n}\n\nfunction slowInterpolate(input, mixers) {\n  var inputLength = input.length;\n  var lastInputIndex = inputLength - 1;\n  return function (v) {\n    var mixerIndex = 0;\n    var foundMixerIndex = false;\n\n    if (v <= input[0]) {\n      foundMixerIndex = true;\n    } else if (v >= input[lastInputIndex]) {\n      mixerIndex = lastInputIndex - 1;\n      foundMixerIndex = true;\n    }\n\n    if (!foundMixerIndex) {\n      var i = 1;\n\n      for (; i < inputLength; i++) {\n        if (input[i] > v || i === lastInputIndex) {\n          break;\n        }\n      }\n\n      mixerIndex = i - 1;\n    }\n\n    var progressInRange = progress(input[mixerIndex], input[mixerIndex + 1], v);\n    return mixers[mixerIndex](progressInRange);\n  };\n}\n\nfunction interpolate(input, output, _a) {\n  var _b = _a === void 0 ? {} : _a,\n      _c = _b.clamp,\n      clamp = _c === void 0 ? true : _c,\n      ease = _b.ease,\n      mixer = _b.mixer;\n\n  var inputLength = input.length;\n  invariant(inputLength === output.length, 'Both input and output ranges must be the same length');\n  invariant(!ease || !Array.isArray(ease) || ease.length === inputLength - 1, 'Array of easing functions must be of length `input.length - 1`, as it applies to the transitions **between** the defined values.');\n\n  if (input[0] > input[inputLength - 1]) {\n    input = [].concat(input);\n    output = [].concat(output);\n    input.reverse();\n    output.reverse();\n  }\n\n  var mixers = createMixers(output, ease, mixer);\n  var interpolator = inputLength === 2 ? fastInterpolate(input, mixers) : slowInterpolate(input, mixers);\n  return clamp ? pipe(clamp$1(input[0], input[inputLength - 1]), interpolator) : interpolator;\n}\n\nvar pointFromVector = function pointFromVector(origin, angle, distance) {\n  angle = degreesToRadians(angle);\n  return {\n    x: distance * Math.cos(angle) + origin.x,\n    y: distance * Math.sin(angle) + origin.y\n  };\n};\n\nvar toDecimal = function toDecimal(num, precision) {\n  if (precision === void 0) {\n    precision = 2;\n  }\n\n  precision = Math.pow(10, precision);\n  return Math.round(num * precision) / precision;\n};\n\nvar smoothFrame = function smoothFrame(prevValue, nextValue, duration, smoothing) {\n  if (smoothing === void 0) {\n    smoothing = 0;\n  }\n\n  return toDecimal(prevValue + duration * (nextValue - prevValue) / Math.max(smoothing, duration));\n};\n\nvar smooth = function smooth(strength) {\n  if (strength === void 0) {\n    strength = 50;\n  }\n\n  var previousValue = 0;\n  var lastUpdated = 0;\n  return function (v) {\n    var currentFramestamp = getFrameData().timestamp;\n    var timeDelta = currentFramestamp !== lastUpdated ? currentFramestamp - lastUpdated : 0;\n    var newValue = timeDelta ? smoothFrame(previousValue, v, timeDelta, strength) : previousValue;\n    lastUpdated = currentFramestamp;\n    previousValue = newValue;\n    return newValue;\n  };\n};\n\nvar snap = function snap(points) {\n  if (typeof points === 'number') {\n    return function (v) {\n      return Math.round(v / points) * points;\n    };\n  } else {\n    var i_1 = 0;\n    var numPoints_1 = points.length;\n    return function (v) {\n      var lastDistance = Math.abs(points[0] - v);\n\n      for (i_1 = 1; i_1 < numPoints_1; i_1++) {\n        var point = points[i_1];\n        var distance = Math.abs(point - v);\n        if (distance === 0) return point;\n        if (distance > lastDistance) return points[i_1 - 1];\n        if (i_1 === numPoints_1 - 1) return point;\n        lastDistance = distance;\n      }\n    };\n  }\n};\n\nvar identity = function identity(v) {\n  return v;\n};\n\nvar springForce = function springForce(alterDisplacement) {\n  if (alterDisplacement === void 0) {\n    alterDisplacement = identity;\n  }\n\n  return curryRange(function (constant, origin, v) {\n    var displacement = origin - v;\n    var springModifiedDisplacement = -(0 - constant + 1) * (0 - alterDisplacement(Math.abs(displacement)));\n    return displacement <= 0 ? origin + springModifiedDisplacement : origin - springModifiedDisplacement;\n  });\n};\n\nvar springForceLinear = springForce();\nvar springForceExpo = springForce(Math.sqrt);\n\nvar velocityPerFrame = function velocityPerFrame(xps, frameDuration) {\n  return isNum(xps) ? xps / (1000 / frameDuration) : 0;\n};\n\nvar velocityPerSecond = function velocityPerSecond(velocity, frameDuration) {\n  return frameDuration ? velocity * (1000 / frameDuration) : 0;\n};\n\nvar wrap = function wrap(min, max, v) {\n  var rangeSize = max - min;\n  return ((v - min) % rangeSize + rangeSize) % rangeSize + min;\n};\n\nvar wrap$1 = curryRange(wrap);\nvar clampProgress = clamp$1(0, 1);\n\nvar steps = function steps(_steps, direction) {\n  if (direction === void 0) {\n    direction = 'end';\n  }\n\n  return function (progress) {\n    progress = direction === 'end' ? Math.min(progress, 0.999) : Math.max(progress, 0.001);\n    var expanded = progress * _steps;\n    var rounded = direction === 'end' ? Math.floor(expanded) : Math.ceil(expanded);\n    return clampProgress(rounded / _steps);\n  };\n};\n\nexport { angle, applyOffset, clamp$1 as clamp, conditional, degreesToRadians, distance, interpolate, isPoint, isPoint3D, mix, mixArray, mixColor, mixComplex, mixObject, pipe, pointFromVector, progress, radiansToDegrees, smooth, smoothFrame, snap, springForce, springForceExpo, springForceLinear, steps, toDecimal, velocityPerFrame, velocityPerSecond, wrap$1 as wrap };","import { __rest, __assign } from 'tslib';\nimport sync from 'framesync';\nimport { number, color, px, degrees, scale, alpha, progressPercentage } from 'style-value-types';\nimport { invariant } from 'hey-listen';\n\nvar createStyler = function createStyler(_a) {\n  var onRead = _a.onRead,\n      onRender = _a.onRender,\n      _b = _a.uncachedValues,\n      uncachedValues = _b === void 0 ? new Set() : _b,\n      _c = _a.useCache,\n      useCache = _c === void 0 ? true : _c;\n  return function (_a) {\n    if (_a === void 0) {\n      _a = {};\n    }\n\n    var props = __rest(_a, []);\n\n    var state = {};\n    var changedValues = [];\n    var hasChanged = false;\n\n    function setValue(key, value) {\n      if (key.startsWith('--')) {\n        props.hasCSSVariable = true;\n      }\n\n      var currentValue = state[key];\n      state[key] = value;\n      if (state[key] === currentValue) return;\n\n      if (changedValues.indexOf(key) === -1) {\n        changedValues.push(key);\n      }\n\n      if (!hasChanged) {\n        hasChanged = true;\n        sync.render(styler.render);\n      }\n    }\n\n    var styler = {\n      get: function get(key, forceRead) {\n        if (forceRead === void 0) {\n          forceRead = false;\n        }\n\n        var useCached = !forceRead && useCache && !uncachedValues.has(key) && state[key] !== undefined;\n        return useCached ? state[key] : onRead(key, props);\n      },\n      set: function set(values, value) {\n        if (typeof values === 'string') {\n          setValue(values, value);\n        } else {\n          for (var key in values) {\n            setValue(key, values[key]);\n          }\n        }\n\n        return this;\n      },\n      render: function render(forceRender) {\n        if (forceRender === void 0) {\n          forceRender = false;\n        }\n\n        if (hasChanged || forceRender === true) {\n          onRender(state, props, changedValues);\n          hasChanged = false;\n          changedValues.length = 0;\n        }\n\n        return this;\n      }\n    };\n    return styler;\n  };\n};\n\nvar CAMEL_CASE_PATTERN = /([a-z])([A-Z])/g;\nvar REPLACE_TEMPLATE = '$1-$2';\n\nvar camelToDash = function camelToDash(str) {\n  return str.replace(CAMEL_CASE_PATTERN, REPLACE_TEMPLATE).toLowerCase();\n};\n\nvar camelCache = /*#__PURE__*/new Map();\nvar dashCache = /*#__PURE__*/new Map();\nvar prefixes = ['Webkit', 'Moz', 'O', 'ms', ''];\nvar numPrefixes = prefixes.length;\nvar isBrowser = typeof document !== 'undefined';\nvar testElement;\n\nvar setDashPrefix = function setDashPrefix(key, prefixed) {\n  return dashCache.set(key, camelToDash(prefixed));\n};\n\nvar testPrefix = function testPrefix(key) {\n  testElement = testElement || document.createElement('div');\n\n  for (var i = 0; i < numPrefixes; i++) {\n    var prefix = prefixes[i];\n    var noPrefix = prefix === '';\n    var prefixedPropertyName = noPrefix ? key : prefix + key.charAt(0).toUpperCase() + key.slice(1);\n\n    if (prefixedPropertyName in testElement.style || noPrefix) {\n      if (noPrefix && key === 'clipPath' && dashCache.has(key)) {\n        return;\n      }\n\n      camelCache.set(key, prefixedPropertyName);\n      setDashPrefix(key, \"\" + (noPrefix ? '' : '-') + camelToDash(prefixedPropertyName));\n    }\n  }\n};\n\nvar setServerProperty = function setServerProperty(key) {\n  return setDashPrefix(key, key);\n};\n\nvar prefixer = function prefixer(key, asDashCase) {\n  if (asDashCase === void 0) {\n    asDashCase = false;\n  }\n\n  var cache = asDashCase ? dashCache : camelCache;\n\n  if (!cache.has(key)) {\n    isBrowser ? testPrefix(key) : setServerProperty(key);\n  }\n\n  return cache.get(key) || key;\n};\n\nvar axes = ['', 'X', 'Y', 'Z'];\nvar order = ['translate', 'scale', 'rotate', 'skew', 'transformPerspective'];\nvar transformProps = /*#__PURE__*/order.reduce(function (acc, key) {\n  return axes.reduce(function (axesAcc, axesKey) {\n    axesAcc.push(key + axesKey);\n    return axesAcc;\n  }, acc);\n}, ['x', 'y', 'z']);\nvar transformPropDictionary = /*#__PURE__*/transformProps.reduce(function (dict, key) {\n  dict[key] = true;\n  return dict;\n}, {});\n\nfunction isTransformProp(key) {\n  return transformPropDictionary[key] === true;\n}\n\nfunction sortTransformProps(a, b) {\n  return transformProps.indexOf(a) - transformProps.indexOf(b);\n}\n\nvar transformOriginProps = /*#__PURE__*/new Set(['originX', 'originY', 'originZ']);\n\nfunction isTransformOriginProp(key) {\n  return transformOriginProps.has(key);\n}\n\nvar int = /*#__PURE__*/__assign( /*#__PURE__*/__assign({}, number), {\n  transform: Math.round\n});\n\nvar valueTypes = {\n  color: color,\n  backgroundColor: color,\n  outlineColor: color,\n  fill: color,\n  stroke: color,\n  borderColor: color,\n  borderTopColor: color,\n  borderRightColor: color,\n  borderBottomColor: color,\n  borderLeftColor: color,\n  borderWidth: px,\n  borderTopWidth: px,\n  borderRightWidth: px,\n  borderBottomWidth: px,\n  borderLeftWidth: px,\n  borderRadius: px,\n  radius: px,\n  borderTopLeftRadius: px,\n  borderTopRightRadius: px,\n  borderBottomRightRadius: px,\n  borderBottomLeftRadius: px,\n  width: px,\n  maxWidth: px,\n  height: px,\n  maxHeight: px,\n  size: px,\n  top: px,\n  right: px,\n  bottom: px,\n  left: px,\n  padding: px,\n  paddingTop: px,\n  paddingRight: px,\n  paddingBottom: px,\n  paddingLeft: px,\n  margin: px,\n  marginTop: px,\n  marginRight: px,\n  marginBottom: px,\n  marginLeft: px,\n  rotate: degrees,\n  rotateX: degrees,\n  rotateY: degrees,\n  rotateZ: degrees,\n  scale: scale,\n  scaleX: scale,\n  scaleY: scale,\n  scaleZ: scale,\n  skew: degrees,\n  skewX: degrees,\n  skewY: degrees,\n  distance: px,\n  translateX: px,\n  translateY: px,\n  translateZ: px,\n  x: px,\n  y: px,\n  z: px,\n  perspective: px,\n  opacity: alpha,\n  originX: progressPercentage,\n  originY: progressPercentage,\n  originZ: px,\n  zIndex: int,\n  fillOpacity: alpha,\n  strokeOpacity: alpha,\n  numOctaves: int\n};\n\nvar getValueType = function getValueType(key) {\n  return valueTypes[key];\n};\n\nvar getValueAsType = function getValueAsType(value, type) {\n  return type && typeof value === 'number' ? type.transform(value) : value;\n};\n\nvar SCROLL_LEFT = 'scrollLeft';\nvar SCROLL_TOP = 'scrollTop';\nvar scrollKeys = /*#__PURE__*/new Set([SCROLL_LEFT, SCROLL_TOP]);\nvar blacklist = /*#__PURE__*/new Set([SCROLL_LEFT, SCROLL_TOP, 'transform']);\nvar translateAlias = {\n  x: 'translateX',\n  y: 'translateY',\n  z: 'translateZ'\n};\n\nfunction isCustomTemplate(v) {\n  return typeof v === 'function';\n}\n\nfunction buildTransform(state, transform, transformKeys, transformIsDefault, enableHardwareAcceleration, allowTransformNone) {\n  if (allowTransformNone === void 0) {\n    allowTransformNone = true;\n  }\n\n  var transformString = '';\n  var transformHasZ = false;\n  transformKeys.sort(sortTransformProps);\n  var numTransformKeys = transformKeys.length;\n\n  for (var i = 0; i < numTransformKeys; i++) {\n    var key = transformKeys[i];\n    transformString += (translateAlias[key] || key) + \"(\" + transform[key] + \") \";\n    transformHasZ = key === 'z' ? true : transformHasZ;\n  }\n\n  if (!transformHasZ && enableHardwareAcceleration) {\n    transformString += 'translateZ(0)';\n  } else {\n    transformString = transformString.trim();\n  }\n\n  if (isCustomTemplate(state.transform)) {\n    transformString = state.transform(transform, transformIsDefault ? '' : transformString);\n  } else if (allowTransformNone && transformIsDefault) {\n    transformString = 'none';\n  }\n\n  return transformString;\n}\n\nfunction buildStyleProperty(state, enableHardwareAcceleration, styles, transform, transformOrigin, transformKeys, isDashCase, allowTransformNone) {\n  if (enableHardwareAcceleration === void 0) {\n    enableHardwareAcceleration = true;\n  }\n\n  if (styles === void 0) {\n    styles = {};\n  }\n\n  if (transform === void 0) {\n    transform = {};\n  }\n\n  if (transformOrigin === void 0) {\n    transformOrigin = {};\n  }\n\n  if (transformKeys === void 0) {\n    transformKeys = [];\n  }\n\n  if (isDashCase === void 0) {\n    isDashCase = false;\n  }\n\n  if (allowTransformNone === void 0) {\n    allowTransformNone = true;\n  }\n\n  var transformIsDefault = true;\n  var hasTransform = false;\n  var hasTransformOrigin = false;\n\n  for (var key in state) {\n    var value = state[key];\n    var valueType = getValueType(key);\n    var valueAsType = getValueAsType(value, valueType);\n\n    if (isTransformProp(key)) {\n      hasTransform = true;\n      transform[key] = valueAsType;\n      transformKeys.push(key);\n\n      if (transformIsDefault) {\n        if (valueType.default && value !== valueType.default || !valueType.default && value !== 0) {\n          transformIsDefault = false;\n        }\n      }\n    } else if (isTransformOriginProp(key)) {\n      transformOrigin[key] = valueAsType;\n      hasTransformOrigin = true;\n    } else if (!blacklist.has(key) || !isCustomTemplate(valueAsType)) {\n      styles[prefixer(key, isDashCase)] = valueAsType;\n    }\n  }\n\n  if (hasTransform || typeof state.transform === 'function') {\n    styles.transform = buildTransform(state, transform, transformKeys, transformIsDefault, enableHardwareAcceleration, allowTransformNone);\n  }\n\n  if (hasTransformOrigin) {\n    styles.transformOrigin = (transformOrigin.originX || '50%') + \" \" + (transformOrigin.originY || '50%') + \" \" + (transformOrigin.originZ || 0);\n  }\n\n  return styles;\n}\n\nfunction createStyleBuilder(_a) {\n  var _b = _a === void 0 ? {} : _a,\n      _c = _b.enableHardwareAcceleration,\n      enableHardwareAcceleration = _c === void 0 ? true : _c,\n      _d = _b.isDashCase,\n      isDashCase = _d === void 0 ? true : _d,\n      _e = _b.allowTransformNone,\n      allowTransformNone = _e === void 0 ? true : _e;\n\n  var styles = {};\n  var transform = {};\n  var transformOrigin = {};\n  var transformKeys = [];\n  return function (state) {\n    transformKeys.length = 0;\n    buildStyleProperty(state, enableHardwareAcceleration, styles, transform, transformOrigin, transformKeys, isDashCase, allowTransformNone);\n    return styles;\n  };\n}\n\nfunction onRead(key, options) {\n  var element = options.element,\n      preparseOutput = options.preparseOutput;\n  var defaultValueType = getValueType(key);\n\n  if (isTransformProp(key)) {\n    return defaultValueType ? defaultValueType.default || 0 : 0;\n  } else if (scrollKeys.has(key)) {\n    return element[key];\n  } else {\n    var domValue = window.getComputedStyle(element, null).getPropertyValue(prefixer(key, true)) || 0;\n    return preparseOutput && defaultValueType && defaultValueType.test(domValue) && defaultValueType.parse ? defaultValueType.parse(domValue) : domValue;\n  }\n}\n\nfunction onRender(state, _a, changedValues) {\n  var element = _a.element,\n      buildStyles = _a.buildStyles,\n      hasCSSVariable = _a.hasCSSVariable;\n  Object.assign(element.style, buildStyles(state));\n\n  if (hasCSSVariable) {\n    var numChangedValues = changedValues.length;\n\n    for (var i = 0; i < numChangedValues; i++) {\n      var key = changedValues[i];\n\n      if (key.startsWith('--')) {\n        element.style.setProperty(key, state[key]);\n      }\n    }\n  }\n\n  if (changedValues.indexOf(SCROLL_LEFT) !== -1) {\n    element[SCROLL_LEFT] = state[SCROLL_LEFT];\n  }\n\n  if (changedValues.indexOf(SCROLL_TOP) !== -1) {\n    element[SCROLL_TOP] = state[SCROLL_TOP];\n  }\n}\n\nvar cssStyler = /*#__PURE__*/createStyler({\n  onRead: onRead,\n  onRender: onRender,\n  uncachedValues: scrollKeys\n});\n\nfunction createCssStyler(element, _a) {\n  if (_a === void 0) {\n    _a = {};\n  }\n\n  var enableHardwareAcceleration = _a.enableHardwareAcceleration,\n      allowTransformNone = _a.allowTransformNone,\n      props = __rest(_a, [\"enableHardwareAcceleration\", \"allowTransformNone\"]);\n\n  return cssStyler(__assign({\n    element: element,\n    buildStyles: createStyleBuilder({\n      enableHardwareAcceleration: enableHardwareAcceleration,\n      allowTransformNone: allowTransformNone\n    }),\n    preparseOutput: true\n  }, props));\n}\n\nvar camelCaseAttributes = /*#__PURE__*/new Set(['baseFrequency', 'diffuseConstant', 'kernelMatrix', 'kernelUnitLength', 'keySplines', 'keyTimes', 'limitingConeAngle', 'markerHeight', 'markerWidth', 'numOctaves', 'targetX', 'targetY', 'surfaceScale', 'specularConstant', 'specularExponent', 'stdDeviation', 'tableValues']);\nvar defaultOrigin = 0.5;\n\nvar svgAttrsTemplate = function svgAttrsTemplate() {\n  return {\n    style: {}\n  };\n};\n\nvar progressToPixels = function progressToPixels(progress, length) {\n  return px.transform(progress * length);\n};\n\nvar unmeasured = {\n  x: 0,\n  y: 0,\n  width: 0,\n  height: 0\n};\n\nfunction calcOrigin(origin, offset, size) {\n  return typeof origin === 'string' ? origin : px.transform(offset + size * origin);\n}\n\nfunction calculateSVGTransformOrigin(dimensions, originX, originY) {\n  return calcOrigin(originX, dimensions.x, dimensions.width) + \" \" + calcOrigin(originY, dimensions.y, dimensions.height);\n}\n\nvar svgStyleConfig = {\n  enableHardwareAcceleration: false,\n  isDashCase: false\n};\n\nfunction buildSVGAttrs(_a, dimensions, totalPathLength, cssBuilder, attrs, isDashCase) {\n  if (dimensions === void 0) {\n    dimensions = unmeasured;\n  }\n\n  if (cssBuilder === void 0) {\n    cssBuilder = createStyleBuilder(svgStyleConfig);\n  }\n\n  if (attrs === void 0) {\n    attrs = svgAttrsTemplate();\n  }\n\n  if (isDashCase === void 0) {\n    isDashCase = true;\n  }\n\n  var attrX = _a.attrX,\n      attrY = _a.attrY,\n      originX = _a.originX,\n      originY = _a.originY,\n      pathLength = _a.pathLength,\n      _b = _a.pathSpacing,\n      pathSpacing = _b === void 0 ? 1 : _b,\n      _c = _a.pathOffset,\n      pathOffset = _c === void 0 ? 0 : _c,\n      state = __rest(_a, [\"attrX\", \"attrY\", \"originX\", \"originY\", \"pathLength\", \"pathSpacing\", \"pathOffset\"]);\n\n  var style = cssBuilder(state);\n\n  for (var key in style) {\n    if (key === 'transform') {\n      attrs.style.transform = style[key];\n    } else {\n      var attrKey = isDashCase && !camelCaseAttributes.has(key) ? camelToDash(key) : key;\n      attrs[attrKey] = style[key];\n    }\n  }\n\n  if (originX !== undefined || originY !== undefined || style.transform) {\n    attrs.style.transformOrigin = calculateSVGTransformOrigin(dimensions, originX !== undefined ? originX : defaultOrigin, originY !== undefined ? originY : defaultOrigin);\n  }\n\n  if (attrX !== undefined) attrs.x = attrX;\n  if (attrY !== undefined) attrs.y = attrY;\n\n  if (totalPathLength !== undefined && pathLength !== undefined) {\n    attrs[isDashCase ? 'stroke-dashoffset' : 'strokeDashoffset'] = progressToPixels(-pathOffset, totalPathLength);\n    attrs[isDashCase ? 'stroke-dasharray' : 'strokeDasharray'] = progressToPixels(pathLength, totalPathLength) + \" \" + progressToPixels(pathSpacing, totalPathLength);\n  }\n\n  return attrs;\n}\n\nfunction createAttrBuilder(dimensions, totalPathLength, isDashCase) {\n  if (isDashCase === void 0) {\n    isDashCase = true;\n  }\n\n  var attrs = svgAttrsTemplate();\n  var cssBuilder = createStyleBuilder(svgStyleConfig);\n  return function (state) {\n    return buildSVGAttrs(state, dimensions, totalPathLength, cssBuilder, attrs, isDashCase);\n  };\n}\n\nvar getDimensions = function getDimensions(element) {\n  return typeof element.getBBox === 'function' ? element.getBBox() : element.getBoundingClientRect();\n};\n\nvar getSVGElementDimensions = function getSVGElementDimensions(element) {\n  try {\n    return getDimensions(element);\n  } catch (e) {\n    return {\n      x: 0,\n      y: 0,\n      width: 0,\n      height: 0\n    };\n  }\n};\n\nvar isPath = function isPath(element) {\n  return element.tagName === 'path';\n};\n\nvar svgStyler = /*#__PURE__*/createStyler({\n  onRead: function onRead(key, _a) {\n    var element = _a.element;\n    key = !camelCaseAttributes.has(key) ? camelToDash(key) : key;\n\n    if (!isTransformProp(key)) {\n      return element.getAttribute(key);\n    } else {\n      var valueType = getValueType(key);\n      return valueType ? valueType.default || 0 : 0;\n    }\n  },\n  onRender: function onRender(state, _a) {\n    var element = _a.element,\n        buildAttrs = _a.buildAttrs;\n    var attrs = buildAttrs(state);\n\n    for (var key in attrs) {\n      if (key === 'style') {\n        Object.assign(element.style, attrs.style);\n      } else {\n        element.setAttribute(key, attrs[key]);\n      }\n    }\n  }\n});\n\nvar svg = function svg(element) {\n  var dimensions = getSVGElementDimensions(element);\n  var pathLength = isPath(element) && element.getTotalLength ? element.getTotalLength() : undefined;\n  return svgStyler({\n    element: element,\n    buildAttrs: createAttrBuilder(dimensions, pathLength)\n  });\n};\n\nvar viewport = /*#__PURE__*/createStyler({\n  useCache: false,\n  onRead: function onRead(key) {\n    return key === 'scrollTop' ? window.pageYOffset : window.pageXOffset;\n  },\n  onRender: function onRender(_a) {\n    var _b = _a.scrollTop,\n        scrollTop = _b === void 0 ? 0 : _b,\n        _c = _a.scrollLeft,\n        scrollLeft = _c === void 0 ? 0 : _c;\n    return window.scrollTo(scrollLeft, scrollTop);\n  }\n});\nvar cache = /*#__PURE__*/new WeakMap();\n\nvar isHTMLElement = function isHTMLElement(node) {\n  return node instanceof HTMLElement || typeof node.click === 'function';\n};\n\nvar isSVGElement = function isSVGElement(node) {\n  return node instanceof SVGElement || 'ownerSVGElement' in node;\n};\n\nvar createDOMStyler = function createDOMStyler(node, props) {\n  var styler;\n\n  if (node === window) {\n    styler = viewport(node);\n  } else if (isHTMLElement(node)) {\n    styler = createCssStyler(node, props);\n  } else if (isSVGElement(node)) {\n    styler = svg(node);\n  }\n\n  invariant(styler !== undefined, 'No valid node provided. Node must be HTMLElement, SVGElement or window.');\n  cache.set(node, styler);\n  return styler;\n};\n\nvar getStyler = function getStyler(node, props) {\n  return cache.has(node) ? cache.get(node) : createDOMStyler(node, props);\n};\n\nfunction index(nodeOrSelector, props) {\n  var node = typeof nodeOrSelector === 'string' ? document.querySelector(nodeOrSelector) : nodeOrSelector;\n  return getStyler(node, props);\n}\n\nexport default index;\nexport { buildSVGAttrs, buildStyleProperty, createStyler as createStylerFactory, isTransformProp, transformProps };","import { __rest, __assign, __extends } from 'tslib';\nimport { pipe, velocityPerSecond, mixComplex, mixColor, mix, clamp, progress, velocityPerFrame, distance, angle, applyOffset } from '@popmotion/popcorn';\nimport sync, { getFrameData, cancelSync } from 'framesync';\nimport { color, complex, px, percent, degrees, vh, vw, number } from 'style-value-types';\nimport { createReversedEasing, linear, easeOut, easeInOut } from '@popmotion/easing';\nimport { invariant } from 'hey-listen';\n\nvar Observer = /*#__PURE__*/function () {\n  function Observer(_a, observer) {\n    var _this = this;\n\n    var middleware = _a.middleware,\n        onComplete = _a.onComplete;\n    this.isActive = true;\n\n    this.update = function (v) {\n      if (_this.observer.update) _this.updateObserver(v);\n    };\n\n    this.complete = function () {\n      if (_this.observer.complete && _this.isActive) _this.observer.complete();\n      if (_this.onComplete) _this.onComplete();\n      _this.isActive = false;\n    };\n\n    this.error = function (err) {\n      if (_this.observer.error && _this.isActive) _this.observer.error(err);\n      _this.isActive = false;\n    };\n\n    this.observer = observer;\n\n    this.updateObserver = function (v) {\n      return observer.update(v);\n    };\n\n    this.onComplete = onComplete;\n\n    if (observer.update && middleware && middleware.length) {\n      middleware.forEach(function (m) {\n        return _this.updateObserver = m(_this.updateObserver, _this.complete);\n      });\n    }\n  }\n\n  return Observer;\n}();\n\nvar createObserver = function createObserver(observerCandidate, _a, onComplete) {\n  var middleware = _a.middleware;\n\n  if (typeof observerCandidate === 'function') {\n    return new Observer({\n      middleware: middleware,\n      onComplete: onComplete\n    }, {\n      update: observerCandidate\n    });\n  } else {\n    return new Observer({\n      middleware: middleware,\n      onComplete: onComplete\n    }, observerCandidate);\n  }\n};\n\nvar Action = /*#__PURE__*/function () {\n  function Action(props) {\n    if (props === void 0) {\n      props = {};\n    }\n\n    this.props = props;\n  }\n\n  Action.prototype.create = function (props) {\n    return new Action(props);\n  };\n\n  Action.prototype.start = function (observerCandidate) {\n    if (observerCandidate === void 0) {\n      observerCandidate = {};\n    }\n\n    var isComplete = false;\n    var subscription = {\n      stop: function stop() {\n        return undefined;\n      }\n    };\n\n    var _a = this.props,\n        init = _a.init,\n        observerProps = __rest(_a, [\"init\"]);\n\n    var observer = createObserver(observerCandidate, observerProps, function () {\n      isComplete = true;\n      subscription.stop();\n    });\n    var api = init(observer);\n    subscription = api ? __assign({}, subscription, api) : subscription;\n    if (isComplete) subscription.stop();\n    return subscription;\n  };\n\n  Action.prototype.applyMiddleware = function (middleware) {\n    return this.create(__assign({}, this.props, {\n      middleware: this.props.middleware ? [middleware].concat(this.props.middleware) : [middleware]\n    }));\n  };\n\n  Action.prototype.pipe = function () {\n    var funcs = [];\n\n    for (var _i = 0; _i < arguments.length; _i++) {\n      funcs[_i] = arguments[_i];\n    }\n\n    var pipedUpdate = funcs.length === 1 ? funcs[0] : pipe.apply(void 0, funcs);\n    return this.applyMiddleware(function (update) {\n      return function (v) {\n        return update(pipedUpdate(v));\n      };\n    });\n  };\n\n  return Action;\n}();\n\nvar action = function action(init) {\n  return new Action({\n    init: init\n  });\n};\n\nvar Chainable = /*#__PURE__*/function () {\n  function Chainable(props) {\n    if (props === void 0) {\n      props = {};\n    }\n\n    this.props = props;\n  }\n\n  Chainable.prototype.applyMiddleware = function (middleware) {\n    return this.create(__assign({}, this.props, {\n      middleware: this.props.middleware ? [middleware].concat(this.props.middleware) : [middleware]\n    }));\n  };\n\n  Chainable.prototype.pipe = function () {\n    var funcs = [];\n\n    for (var _i = 0; _i < arguments.length; _i++) {\n      funcs[_i] = arguments[_i];\n    }\n\n    var pipedUpdate = funcs.length === 1 ? funcs[0] : pipe.apply(void 0, funcs);\n    return this.applyMiddleware(function (update) {\n      return function (v) {\n        return update(pipedUpdate(v));\n      };\n    });\n  };\n\n  Chainable.prototype.while = function (predicate) {\n    return this.applyMiddleware(function (update, complete) {\n      return function (v) {\n        return predicate(v) ? update(v) : complete();\n      };\n    });\n  };\n\n  Chainable.prototype.filter = function (predicate) {\n    return this.applyMiddleware(function (update) {\n      return function (v) {\n        return predicate(v) && update(v);\n      };\n    });\n  };\n\n  return Chainable;\n}();\n\nvar BaseMulticast = /*#__PURE__*/function (_super) {\n  __extends(BaseMulticast, _super);\n\n  function BaseMulticast() {\n    var _this = _super !== null && _super.apply(this, arguments) || this;\n\n    _this.subscribers = [];\n    return _this;\n  }\n\n  BaseMulticast.prototype.complete = function () {\n    this.subscribers.forEach(function (subscriber) {\n      return subscriber.complete();\n    });\n  };\n\n  BaseMulticast.prototype.error = function (err) {\n    this.subscribers.forEach(function (subscriber) {\n      return subscriber.error(err);\n    });\n  };\n\n  BaseMulticast.prototype.update = function (v) {\n    for (var i = 0; i < this.subscribers.length; i++) {\n      this.subscribers[i].update(v);\n    }\n  };\n\n  BaseMulticast.prototype.subscribe = function (observerCandidate) {\n    var _this = this;\n\n    var observer = createObserver(observerCandidate, this.props);\n    this.subscribers.push(observer);\n    var subscription = {\n      unsubscribe: function unsubscribe() {\n        var index = _this.subscribers.indexOf(observer);\n\n        if (index !== -1) _this.subscribers.splice(index, 1);\n      }\n    };\n    return subscription;\n  };\n\n  BaseMulticast.prototype.stop = function () {\n    if (this.parent) this.parent.stop();\n  };\n\n  return BaseMulticast;\n}(Chainable);\n\nvar Multicast = /*#__PURE__*/function (_super) {\n  __extends(Multicast, _super);\n\n  function Multicast() {\n    return _super !== null && _super.apply(this, arguments) || this;\n  }\n\n  Multicast.prototype.create = function (props) {\n    return new Multicast(props);\n  };\n\n  return Multicast;\n}(BaseMulticast);\n\nvar multicast = function multicast() {\n  return new Multicast();\n};\n\nvar ValueReaction = /*#__PURE__*/function (_super) {\n  __extends(ValueReaction, _super);\n\n  function ValueReaction(props) {\n    var _this = _super.call(this, props) || this;\n\n    _this.scheduleVelocityCheck = function () {\n      return sync.postRender(_this.velocityCheck);\n    };\n\n    _this.velocityCheck = function (_a) {\n      var timestamp = _a.timestamp;\n\n      if (timestamp !== _this.lastUpdated) {\n        _this.prev = _this.current;\n      }\n    };\n\n    _this.prev = _this.current = props.value || 0;\n\n    _this.updateCurrent = function (v) {\n      return _this.current = v;\n    };\n\n    _this.getVelocityOfCurrent = function () {\n      return _this.getSingleVelocity(_this.current, _this.prev);\n    };\n\n    if (props.initialSubscription) _this.subscribe(props.initialSubscription);\n    return _this;\n  }\n\n  ValueReaction.prototype.create = function (props) {\n    return new ValueReaction(props);\n  };\n\n  ValueReaction.prototype.get = function () {\n    return this.current;\n  };\n\n  ValueReaction.prototype.getVelocity = function () {\n    return this.getVelocityOfCurrent();\n  };\n\n  ValueReaction.prototype.update = function (v) {\n    _super.prototype.update.call(this, v);\n\n    this.prev = this.current;\n    this.updateCurrent(v);\n\n    var _a = getFrameData(),\n        delta = _a.delta,\n        timestamp = _a.timestamp;\n\n    this.timeDelta = delta;\n    this.lastUpdated = timestamp;\n    sync.postRender(this.scheduleVelocityCheck);\n  };\n\n  ValueReaction.prototype.subscribe = function (observerCandidate) {\n    var sub = _super.prototype.subscribe.call(this, observerCandidate);\n\n    this.subscribers[this.subscribers.length - 1].update(this.current);\n    return sub;\n  };\n\n  ValueReaction.prototype.getSingleVelocity = function (current, prev) {\n    return typeof current === 'number' && typeof prev === 'number' ? velocityPerSecond(current - prev, this.timeDelta) : velocityPerSecond(parseFloat(current) - parseFloat(prev), this.timeDelta) || 0;\n  };\n\n  return ValueReaction;\n}(BaseMulticast);\n\nvar value = function value(_value, initialSubscription) {\n  return new ValueReaction({\n    value: _value,\n    initialSubscription: initialSubscription\n  });\n};\n\nvar createVectorTests = function createVectorTests(typeTests) {\n  var testNames = Object.keys(typeTests);\n\n  var isVectorProp = function isVectorProp(prop, key) {\n    return prop !== undefined && !typeTests[key](prop);\n  };\n\n  var getVectorKeys = function getVectorKeys(props) {\n    return testNames.reduce(function (vectorKeys, key) {\n      if (isVectorProp(props[key], key)) vectorKeys.push(key);\n      return vectorKeys;\n    }, []);\n  };\n\n  var testVectorProps = function testVectorProps(props) {\n    return props && testNames.some(function (key) {\n      return isVectorProp(props[key], key);\n    });\n  };\n\n  return {\n    getVectorKeys: getVectorKeys,\n    testVectorProps: testVectorProps\n  };\n};\n\nvar unitTypes = [px, percent, degrees, vh, vw];\n\nvar findUnitType = function findUnitType(prop) {\n  return unitTypes.find(function (type) {\n    return type.test(prop);\n  });\n};\n\nvar isUnitProp = function isUnitProp(prop) {\n  return Boolean(findUnitType(prop));\n};\n\nvar createAction = function createAction(action, props) {\n  return action(props);\n};\n\nvar createUnitAction = function createUnitAction(action, _a) {\n  var from = _a.from,\n      to = _a.to,\n      props = __rest(_a, [\"from\", \"to\"]);\n\n  var unitType = findUnitType(from) || findUnitType(to);\n  var transform = unitType.transform,\n      parse = unitType.parse;\n  return action(__assign({}, props, {\n    from: typeof from === 'string' ? parse(from) : from,\n    to: typeof to === 'string' ? parse(to) : to\n  })).pipe(transform);\n};\n\nvar createMixerAction = function createMixerAction(mixer) {\n  return function (action, _a) {\n    var from = _a.from,\n        to = _a.to,\n        props = __rest(_a, [\"from\", \"to\"]);\n\n    return action(__assign({}, props, {\n      from: 0,\n      to: 1\n    })).pipe(mixer(from, to));\n  };\n};\n\nvar createColorAction = /*#__PURE__*/createMixerAction(mixColor);\nvar createComplexAction = /*#__PURE__*/createMixerAction(mixComplex);\n\nvar createVectorAction = function createVectorAction(action, typeTests) {\n  var _a = createVectorTests(typeTests),\n      testVectorProps = _a.testVectorProps,\n      getVectorKeys = _a.getVectorKeys;\n\n  var vectorAction = function vectorAction(props) {\n    var isVector = testVectorProps(props);\n    if (!isVector) return action(props);\n    var vectorKeys = getVectorKeys(props);\n    var testKey = vectorKeys[0];\n    var testProp = props[testKey];\n    return getActionCreator(testProp)(action, props, vectorKeys);\n  };\n\n  return vectorAction;\n};\n\nvar getActionCreator = function getActionCreator(prop) {\n  if (typeof prop === 'number') {\n    return createAction;\n  } else if (isUnitProp(prop)) {\n    return createUnitAction;\n  } else if (color.test(prop)) {\n    return createColorAction;\n  } else if (complex.test(prop)) {\n    return createComplexAction;\n  } else {\n    return createAction;\n  }\n};\n\nvar decay = function decay(props) {\n  if (props === void 0) {\n    props = {};\n  }\n\n  return action(function (_a) {\n    var complete = _a.complete,\n        update = _a.update;\n    var _b = props.velocity,\n        velocity = _b === void 0 ? 0 : _b,\n        _c = props.from,\n        from = _c === void 0 ? 0 : _c,\n        _d = props.power,\n        power = _d === void 0 ? 0.8 : _d,\n        _e = props.timeConstant,\n        timeConstant = _e === void 0 ? 350 : _e,\n        _f = props.restDelta,\n        restDelta = _f === void 0 ? 0.5 : _f,\n        modifyTarget = props.modifyTarget;\n    var elapsed = 0;\n    var amplitude = power * velocity;\n    var idealTarget = Math.round(from + amplitude);\n    var target = typeof modifyTarget === 'undefined' ? idealTarget : modifyTarget(idealTarget);\n    var process = sync.update(function (_a) {\n      var frameDelta = _a.delta;\n      elapsed += frameDelta;\n      var delta = -amplitude * Math.exp(-elapsed / timeConstant);\n      var isMoving = delta > restDelta || delta < -restDelta;\n      var current = isMoving ? target + delta : target;\n      update(current);\n\n      if (!isMoving) {\n        cancelSync.update(process);\n        complete();\n      }\n    }, true);\n    return {\n      stop: function stop() {\n        return cancelSync.update(process);\n      }\n    };\n  });\n};\n\nvar vectorDecay = /*#__PURE__*/createVectorAction(decay, {\n  from: number.test,\n  modifyTarget: function modifyTarget(func) {\n    return typeof func === 'function';\n  },\n  velocity: number.test\n});\n\nvar spring = function spring(props) {\n  if (props === void 0) {\n    props = {};\n  }\n\n  return action(function (_a) {\n    var update = _a.update,\n        complete = _a.complete;\n    var _b = props.velocity,\n        velocity = _b === void 0 ? 0.0 : _b;\n    var _c = props.from,\n        from = _c === void 0 ? 0.0 : _c,\n        _d = props.to,\n        to = _d === void 0 ? 0.0 : _d,\n        _e = props.stiffness,\n        stiffness = _e === void 0 ? 100 : _e,\n        _f = props.damping,\n        damping = _f === void 0 ? 10 : _f,\n        _g = props.mass,\n        mass = _g === void 0 ? 1.0 : _g,\n        _h = props.restSpeed,\n        restSpeed = _h === void 0 ? 0.01 : _h,\n        _j = props.restDelta,\n        restDelta = _j === void 0 ? 0.01 : _j;\n    var initialVelocity = velocity ? -(velocity / 1000) : 0.0;\n    var t = 0;\n    var delta = to - from;\n    var position = from;\n    var prevPosition = position;\n    var process = sync.update(function (_a) {\n      var timeDelta = _a.delta;\n      t += timeDelta;\n      var dampingRatio = damping / (2 * Math.sqrt(stiffness * mass));\n      var angularFreq = Math.sqrt(stiffness / mass) / 1000;\n      prevPosition = position;\n\n      if (dampingRatio < 1) {\n        var envelope = Math.exp(-dampingRatio * angularFreq * t);\n        var expoDecay = angularFreq * Math.sqrt(1.0 - dampingRatio * dampingRatio);\n        position = to - envelope * ((initialVelocity + dampingRatio * angularFreq * delta) / expoDecay * Math.sin(expoDecay * t) + delta * Math.cos(expoDecay * t));\n      } else {\n        var envelope = Math.exp(-angularFreq * t);\n        position = to - envelope * (delta + (initialVelocity + angularFreq * delta) * t);\n      }\n\n      velocity = velocityPerSecond(position - prevPosition, timeDelta);\n      var isBelowVelocityThreshold = Math.abs(velocity) <= restSpeed;\n      var isBelowDisplacementThreshold = Math.abs(to - position) <= restDelta;\n\n      if (isBelowVelocityThreshold && isBelowDisplacementThreshold) {\n        position = to;\n        update(position);\n        cancelSync.update(process);\n        complete();\n      } else {\n        update(position);\n      }\n    }, true);\n    return {\n      stop: function stop() {\n        return cancelSync.update(process);\n      }\n    };\n  });\n};\n\nvar vectorSpring = /*#__PURE__*/createVectorAction(spring, {\n  from: number.test,\n  to: number.test,\n  stiffness: number.test,\n  damping: number.test,\n  mass: number.test,\n  velocity: number.test\n});\n\nvar inertia = function inertia(_a) {\n  var _b = _a.from,\n      from = _b === void 0 ? 0 : _b,\n      _c = _a.velocity,\n      velocity = _c === void 0 ? 0 : _c,\n      min = _a.min,\n      max = _a.max,\n      _d = _a.power,\n      power = _d === void 0 ? 0.8 : _d,\n      _e = _a.timeConstant,\n      timeConstant = _e === void 0 ? 700 : _e,\n      _f = _a.bounceStiffness,\n      bounceStiffness = _f === void 0 ? 500 : _f,\n      _g = _a.bounceDamping,\n      bounceDamping = _g === void 0 ? 10 : _g,\n      _h = _a.restDelta,\n      restDelta = _h === void 0 ? 1 : _h,\n      modifyTarget = _a.modifyTarget;\n  return action(function (_a) {\n    var update = _a.update,\n        _complete = _a.complete;\n    var prev = from;\n    var current = from;\n    var activeAnimation;\n    var isSpring = false;\n\n    var isLessThanMin = function isLessThanMin(v) {\n      return min !== undefined && v <= min;\n    };\n\n    var isMoreThanMax = function isMoreThanMax(v) {\n      return max !== undefined && v >= max;\n    };\n\n    var isOutOfBounds = function isOutOfBounds(v) {\n      return isLessThanMin(v) || isMoreThanMax(v);\n    };\n\n    var isTravellingAwayFromBounds = function isTravellingAwayFromBounds(v, currentVelocity) {\n      return isLessThanMin(v) && currentVelocity < 0 || isMoreThanMax(v) && currentVelocity > 0;\n    };\n\n    var onUpdate = function onUpdate(v) {\n      update(v);\n      prev = current;\n      current = v;\n      velocity = velocityPerSecond(current - prev, getFrameData().delta);\n\n      if (activeAnimation && !isSpring && isTravellingAwayFromBounds(v, velocity)) {\n        startSpring({\n          from: v,\n          velocity: velocity\n        });\n      }\n    };\n\n    var startAnimation = function startAnimation(animation, next) {\n      activeAnimation && activeAnimation.stop();\n      activeAnimation = animation.start({\n        update: onUpdate,\n        complete: function complete() {\n          if (next) {\n            next();\n            return;\n          }\n\n          _complete();\n        }\n      });\n    };\n\n    var startSpring = function startSpring(props) {\n      isSpring = true;\n      startAnimation(vectorSpring(__assign({}, props, {\n        to: isLessThanMin(props.from) ? min : max,\n        stiffness: bounceStiffness,\n        damping: bounceDamping,\n        restDelta: restDelta\n      })));\n    };\n\n    if (isOutOfBounds(from)) {\n      startSpring({\n        from: from,\n        velocity: velocity\n      });\n    } else if (velocity !== 0) {\n      var animation = vectorDecay({\n        from: from,\n        velocity: velocity,\n        timeConstant: timeConstant,\n        power: power,\n        restDelta: isOutOfBounds(from) ? 20 : restDelta,\n        modifyTarget: modifyTarget\n      });\n      startAnimation(animation, function () {\n        if (isOutOfBounds(current)) {\n          startSpring({\n            from: current,\n            velocity: velocity\n          });\n        } else {\n          _complete();\n        }\n      });\n    } else {\n      _complete();\n    }\n\n    return {\n      stop: function stop() {\n        return activeAnimation && activeAnimation.stop();\n      }\n    };\n  });\n};\n\nvar index = /*#__PURE__*/createVectorAction(inertia, {\n  from: number.test,\n  velocity: number.test,\n  min: number.test,\n  max: number.test,\n  damping: number.test,\n  stiffness: number.test,\n  modifyTarget: function modifyTarget(func) {\n    return typeof func === 'function';\n  }\n});\n\nvar frame = function frame() {\n  return action(function (_a) {\n    var update = _a.update;\n    var initialTime = 0;\n    var process = sync.update(function (_a) {\n      var timestamp = _a.timestamp;\n      if (!initialTime) initialTime = timestamp;\n      update(timestamp - initialTime);\n    }, true, true);\n    return {\n      stop: function stop() {\n        return cancelSync.update(process);\n      }\n    };\n  });\n};\n\nvar scrubber = function scrubber(_a) {\n  var _b = _a.from,\n      from = _b === void 0 ? 0 : _b,\n      _c = _a.to,\n      to = _c === void 0 ? 1 : _c,\n      _d = _a.ease,\n      ease = _d === void 0 ? linear : _d,\n      _e = _a.reverseEase,\n      reverseEase = _e === void 0 ? false : _e;\n\n  if (reverseEase) {\n    ease = createReversedEasing(ease);\n  }\n\n  return action(function (_a) {\n    var update = _a.update;\n    return {\n      seek: function seek(progress) {\n        return update(progress);\n      }\n    };\n  }).pipe(ease, function (v) {\n    return mix(from, to, v);\n  });\n};\n\nvar vectorScrubber = /*#__PURE__*/createVectorAction(scrubber, {\n  ease: function ease(func) {\n    return typeof func === 'function';\n  },\n  from: number.test,\n  to: number.test\n});\nvar clampProgress = /*#__PURE__*/clamp(0, 1);\n\nvar tween = function tween(props) {\n  if (props === void 0) {\n    props = {};\n  }\n\n  return action(function (_a) {\n    var update = _a.update,\n        complete = _a.complete;\n    var _b = props.duration,\n        duration = _b === void 0 ? 300 : _b,\n        _c = props.ease,\n        ease = _c === void 0 ? easeOut : _c,\n        _d = props.flip,\n        flip = _d === void 0 ? 0 : _d,\n        _e = props.loop,\n        loop = _e === void 0 ? 0 : _e,\n        _f = props.yoyo,\n        yoyo = _f === void 0 ? 0 : _f,\n        _g = props.repeatDelay,\n        repeatDelay = _g === void 0 ? 0 : _g;\n    var _h = props.from,\n        from = _h === void 0 ? 0 : _h,\n        _j = props.to,\n        to = _j === void 0 ? 1 : _j,\n        _k = props.elapsed,\n        elapsed = _k === void 0 ? 0 : _k,\n        _l = props.flipCount,\n        flipCount = _l === void 0 ? 0 : _l,\n        _m = props.yoyoCount,\n        yoyoCount = _m === void 0 ? 0 : _m,\n        _o = props.loopCount,\n        loopCount = _o === void 0 ? 0 : _o;\n    var playhead = vectorScrubber({\n      from: from,\n      to: to,\n      ease: ease\n    }).start(update);\n    var currentProgress = 0;\n    var process;\n    var _isActive = false;\n\n    var reverseAnimation = function reverseAnimation(reverseEase) {\n      var _a;\n\n      if (reverseEase === void 0) {\n        reverseEase = false;\n      }\n\n      _a = [to, from], from = _a[0], to = _a[1];\n      playhead = vectorScrubber({\n        from: from,\n        to: to,\n        ease: ease,\n        reverseEase: reverseEase\n      }).start(update);\n    };\n\n    var isTweenComplete = function isTweenComplete() {\n      var isComplete = _isActive && elapsed > duration + repeatDelay;\n      if (!isComplete) return false;\n      if (isComplete && !loop && !flip && !yoyo) return true;\n      var overtime = elapsed - duration;\n      elapsed = overtime - repeatDelay;\n\n      if (loop && loopCount < loop) {\n        loopCount++;\n        return false;\n      } else if (flip && flipCount < flip) {\n        flipCount++;\n        reverseAnimation();\n        return false;\n      } else if (yoyo && yoyoCount < yoyo) {\n        yoyoCount++;\n        reverseAnimation(yoyoCount % 2 !== 0);\n        return false;\n      }\n\n      return true;\n    };\n\n    var updateTween = function updateTween() {\n      currentProgress = clampProgress(progress(0, duration, elapsed));\n      playhead.seek(currentProgress);\n    };\n\n    var startTimer = function startTimer() {\n      _isActive = true;\n      process = sync.update(function (_a) {\n        var delta = _a.delta;\n        elapsed += delta;\n        updateTween();\n\n        if (isTweenComplete()) {\n          cancelSync.update(process);\n          complete && sync.update(complete, false, true);\n        }\n      }, true);\n    };\n\n    var stopTimer = function stopTimer() {\n      _isActive = false;\n      if (process) cancelSync.update(process);\n    };\n\n    startTimer();\n    return {\n      isActive: function isActive() {\n        return _isActive;\n      },\n      getElapsed: function getElapsed() {\n        return clamp(0, duration, elapsed);\n      },\n      getProgress: function getProgress() {\n        return currentProgress;\n      },\n      stop: function stop() {\n        stopTimer();\n      },\n      pause: function pause() {\n        stopTimer();\n        return this;\n      },\n      resume: function resume() {\n        if (!_isActive) startTimer();\n        return this;\n      },\n      seek: function seek(newProgress) {\n        elapsed = mix(0, duration, newProgress);\n        sync.update(updateTween, false, true);\n        return this;\n      },\n      reverse: function reverse() {\n        reverseAnimation();\n        return this;\n      }\n    };\n  });\n};\n\nvar clampProgress$1 = /*#__PURE__*/clamp(0, 1);\n\nvar defaultEasings = function defaultEasings(values, easing) {\n  return values.map(function () {\n    return easing || easeOut;\n  }).splice(0, values.length - 1);\n};\n\nvar defaultTimings = function defaultTimings(values) {\n  var numValues = values.length;\n  return values.map(function (value, i) {\n    return i !== 0 ? i / (numValues - 1) : 0;\n  });\n};\n\nvar interpolateScrubbers = function interpolateScrubbers(input, scrubbers, update) {\n  var rangeLength = input.length;\n  var finalInputIndex = rangeLength - 1;\n  var finalScrubberIndex = finalInputIndex - 1;\n  var subs = scrubbers.map(function (scrub) {\n    return scrub.start(update);\n  });\n  return function (v) {\n    if (v <= input[0]) {\n      subs[0].seek(0);\n    }\n\n    if (v >= input[finalInputIndex]) {\n      subs[finalScrubberIndex].seek(1);\n    }\n\n    var i = 1;\n\n    for (; i < rangeLength; i++) {\n      if (input[i] > v || i === finalInputIndex) break;\n    }\n\n    var progressInRange = progress(input[i - 1], input[i], v);\n    subs[i - 1].seek(clampProgress$1(progressInRange));\n  };\n};\n\nvar keyframes = function keyframes(_a) {\n  var easings = _a.easings,\n      _b = _a.ease,\n      ease = _b === void 0 ? linear : _b,\n      times = _a.times,\n      values = _a.values,\n      tweenProps = __rest(_a, [\"easings\", \"ease\", \"times\", \"values\"]);\n\n  easings = Array.isArray(easings) ? easings : defaultEasings(values, easings);\n  times = times || defaultTimings(values);\n  var scrubbers = easings.map(function (easing, i) {\n    return vectorScrubber({\n      from: values[i],\n      to: values[i + 1],\n      ease: easing\n    });\n  });\n  return tween(__assign({}, tweenProps, {\n    ease: ease\n  })).applyMiddleware(function (update) {\n    return interpolateScrubbers(times, scrubbers, update);\n  });\n};\n\nvar physics = function physics(props) {\n  if (props === void 0) {\n    props = {};\n  }\n\n  return action(function (_a) {\n    var complete = _a.complete,\n        update = _a.update;\n    var _b = props.acceleration,\n        acceleration = _b === void 0 ? 0 : _b,\n        _c = props.friction,\n        friction = _c === void 0 ? 0 : _c,\n        _d = props.velocity,\n        velocity = _d === void 0 ? 0 : _d,\n        springStrength = props.springStrength,\n        to = props.to;\n    var _e = props.restSpeed,\n        restSpeed = _e === void 0 ? 0.001 : _e,\n        _f = props.from,\n        from = _f === void 0 ? 0 : _f;\n    var current = from;\n    var process = sync.update(function (_a) {\n      var delta = _a.delta;\n      var elapsed = Math.max(delta, 16);\n      if (acceleration) velocity += velocityPerFrame(acceleration, elapsed);\n      if (friction) velocity *= Math.pow(1 - friction, elapsed / 100);\n\n      if (springStrength !== undefined && to !== undefined) {\n        var distanceToTarget = to - current;\n        velocity += distanceToTarget * velocityPerFrame(springStrength, elapsed);\n      }\n\n      current += velocityPerFrame(velocity, elapsed);\n      update(current);\n      var isComplete = restSpeed !== false && (!velocity || Math.abs(velocity) <= restSpeed);\n\n      if (isComplete) {\n        cancelSync.update(process);\n        complete();\n      }\n    }, true);\n    return {\n      set: function set(v) {\n        current = v;\n        return this;\n      },\n      setAcceleration: function setAcceleration(v) {\n        acceleration = v;\n        return this;\n      },\n      setFriction: function setFriction(v) {\n        friction = v;\n        return this;\n      },\n      setSpringStrength: function setSpringStrength(v) {\n        springStrength = v;\n        return this;\n      },\n      setSpringTarget: function setSpringTarget(v) {\n        to = v;\n        return this;\n      },\n      setVelocity: function setVelocity(v) {\n        velocity = v;\n        return this;\n      },\n      stop: function stop() {\n        return cancelSync.update(process);\n      }\n    };\n  });\n};\n\nvar vectorPhysics = /*#__PURE__*/createVectorAction(physics, {\n  acceleration: number.test,\n  friction: number.test,\n  velocity: number.test,\n  from: number.test,\n  to: number.test,\n  springStrength: number.test\n});\n\nvar multi = function multi(_a) {\n  var getCount = _a.getCount,\n      getFirst = _a.getFirst,\n      getOutput = _a.getOutput,\n      mapApi = _a.mapApi,\n      setProp = _a.setProp,\n      startActions = _a.startActions;\n  return function (actions) {\n    return action(function (_a) {\n      var update = _a.update,\n          _complete2 = _a.complete,\n          error = _a.error;\n      var numActions = getCount(actions);\n      var output = getOutput();\n\n      var updateOutput = function updateOutput() {\n        return update(output);\n      };\n\n      var numCompletedActions = 0;\n      var subs = startActions(actions, function (a, name) {\n        var hasCompleted = false;\n        return a.start({\n          complete: function complete() {\n            if (!hasCompleted) {\n              hasCompleted = true;\n              numCompletedActions++;\n              if (numCompletedActions === numActions) sync.update(_complete2);\n            }\n          },\n          error: error,\n          update: function update(v) {\n            setProp(output, name, v);\n            sync.update(updateOutput, false, true);\n          }\n        });\n      });\n      return Object.keys(getFirst(subs)).reduce(function (api, methodName) {\n        api[methodName] = mapApi(subs, methodName);\n        return api;\n      }, {});\n    });\n  };\n};\n\nvar composite = /*#__PURE__*/multi({\n  getOutput: function getOutput() {\n    return {};\n  },\n  getCount: function getCount(subs) {\n    return Object.keys(subs).length;\n  },\n  getFirst: function getFirst(subs) {\n    return subs[Object.keys(subs)[0]];\n  },\n  mapApi: function mapApi(subs, methodName) {\n    return function () {\n      var args = [];\n\n      for (var _i = 0; _i < arguments.length; _i++) {\n        args[_i] = arguments[_i];\n      }\n\n      return Object.keys(subs).reduce(function (output, propKey) {\n        var _a;\n\n        if (subs[propKey][methodName]) {\n          args[0] && args[0][propKey] !== undefined ? output[propKey] = subs[propKey][methodName](args[0][propKey]) : output[propKey] = (_a = subs[propKey])[methodName].apply(_a, args);\n        }\n\n        return output;\n      }, {});\n    };\n  },\n  setProp: function setProp(output, name, v) {\n    return output[name] = v;\n  },\n  startActions: function startActions(actions, starter) {\n    return Object.keys(actions).reduce(function (subs, key) {\n      subs[key] = starter(actions[key], key);\n      return subs;\n    }, {});\n  }\n});\nvar DEFAULT_DURATION = 300;\n\nvar flattenTimings = function flattenTimings(instructions) {\n  var flatInstructions = [];\n  var lastArg = instructions[instructions.length - 1];\n  var isStaggered = typeof lastArg === 'number';\n  var staggerDelay = isStaggered ? lastArg : 0;\n  var segments = isStaggered ? instructions.slice(0, -1) : instructions;\n  var numSegments = segments.length;\n  var offset = 0;\n  segments.forEach(function (item, i) {\n    flatInstructions.push(item);\n\n    if (i !== numSegments - 1) {\n      var duration = item.duration || DEFAULT_DURATION;\n      offset += staggerDelay;\n      flatInstructions.push(\"-\" + (duration - offset));\n    }\n  });\n  return flatInstructions;\n};\n\nvar flattenArrayInstructions = function flattenArrayInstructions(instructions, instruction) {\n  Array.isArray(instruction) ? instructions.push.apply(instructions, flattenTimings(instruction)) : instructions.push(instruction);\n  return instructions;\n};\n\nvar convertDefToProps = function convertDefToProps(props, def, i) {\n  var duration = props.duration,\n      easings = props.easings,\n      times = props.times,\n      values = props.values;\n  var numValues = values.length;\n  var prevTimeTo = times[numValues - 1];\n  var timeFrom = def.at === 0 ? 0 : def.at / duration;\n  var timeTo = (def.at + def.duration) / duration;\n\n  if (i === 0) {\n    values.push(def.from);\n    times.push(timeFrom);\n  } else {\n    if (prevTimeTo !== timeFrom) {\n      if (def.from !== undefined) {\n        values.push(values[numValues - 1]);\n        times.push(timeFrom);\n        easings.push(linear);\n      }\n\n      var from = def.from !== undefined ? def.from : values[numValues - 1];\n      values.push(from);\n      times.push(timeFrom);\n      easings.push(linear);\n    } else if (def.from !== undefined) {\n      values.push(def.from);\n      times.push(timeFrom);\n      easings.push(linear);\n    }\n  }\n\n  values.push(def.to);\n  times.push(timeTo);\n  easings.push(def.ease || easeInOut);\n  return props;\n};\n\nvar timeline = function timeline(instructions, _a) {\n  var _b = _a === void 0 ? {} : _a,\n      duration = _b.duration,\n      elapsed = _b.elapsed,\n      ease = _b.ease,\n      loop = _b.loop,\n      flip = _b.flip,\n      yoyo = _b.yoyo;\n\n  var playhead = 0;\n  var calculatedDuration = 0;\n  var flatInstructions = instructions.reduce(flattenArrayInstructions, []);\n  var animationDefs = [];\n  flatInstructions.forEach(function (instruction) {\n    if (typeof instruction === 'string') {\n      playhead += parseFloat(instruction);\n    } else if (typeof instruction === 'number') {\n      playhead = instruction;\n    } else {\n      var def = __assign({}, instruction, {\n        at: playhead\n      });\n\n      def.duration = def.duration === undefined ? DEFAULT_DURATION : def.duration;\n      animationDefs.push(def);\n      playhead += def.duration;\n      calculatedDuration = Math.max(calculatedDuration, def.at + def.duration);\n    }\n  });\n  var tracks = {};\n  var numDefs = animationDefs.length;\n\n  for (var i = 0; i < numDefs; i++) {\n    var def = animationDefs[i];\n    var track = def.track;\n\n    if (track === undefined) {\n      throw new Error('No track defined');\n    }\n\n    if (!tracks.hasOwnProperty(track)) tracks[track] = [];\n    tracks[track].push(def);\n  }\n\n  var trackKeyframes = {};\n\n  for (var key in tracks) {\n    if (tracks.hasOwnProperty(key)) {\n      var keyframeProps = tracks[key].reduce(convertDefToProps, {\n        duration: calculatedDuration,\n        easings: [],\n        times: [],\n        values: []\n      });\n      trackKeyframes[key] = keyframes(__assign({}, keyframeProps, {\n        duration: duration || calculatedDuration,\n        ease: ease,\n        elapsed: elapsed,\n        loop: loop,\n        yoyo: yoyo,\n        flip: flip\n      }));\n    }\n  }\n\n  return composite(trackKeyframes);\n};\n\nvar listen = function listen(element, events, options) {\n  return action(function (_a) {\n    var update = _a.update;\n    var eventNames = events.split(' ').map(function (eventName) {\n      element.addEventListener(eventName, update, options);\n      return eventName;\n    });\n    return {\n      stop: function stop() {\n        return eventNames.forEach(function (eventName) {\n          return element.removeEventListener(eventName, update, options);\n        });\n      }\n    };\n  });\n};\n\nvar defaultPointerPos = function defaultPointerPos() {\n  return {\n    clientX: 0,\n    clientY: 0,\n    pageX: 0,\n    pageY: 0,\n    x: 0,\n    y: 0\n  };\n};\n\nvar eventToPoint = function eventToPoint(e, point) {\n  if (point === void 0) {\n    point = defaultPointerPos();\n  }\n\n  point.clientX = point.x = e.clientX;\n  point.clientY = point.y = e.clientY;\n  point.pageX = e.pageX;\n  point.pageY = e.pageY;\n  return point;\n};\n\nvar points = [/*#__PURE__*/defaultPointerPos()];\nvar isTouchDevice = false;\n\nif (typeof document !== 'undefined') {\n  var updatePointsLocation = function updatePointsLocation(_a) {\n    var touches = _a.touches;\n    isTouchDevice = true;\n    var numTouches = touches.length;\n    points.length = 0;\n\n    for (var i = 0; i < numTouches; i++) {\n      var thisTouch = touches[i];\n      points.push(eventToPoint(thisTouch));\n    }\n  };\n\n  listen(document, 'touchstart touchmove', {\n    passive: true,\n    capture: true\n  }).start(updatePointsLocation);\n}\n\nvar multitouch = function multitouch(_a) {\n  var _b = _a === void 0 ? {} : _a,\n      _c = _b.preventDefault,\n      preventDefault = _c === void 0 ? true : _c,\n      _d = _b.scale,\n      scale = _d === void 0 ? 1.0 : _d,\n      _e = _b.rotate,\n      rotate = _e === void 0 ? 0.0 : _e;\n\n  return action(function (_a) {\n    var update = _a.update;\n    var output = {\n      touches: points,\n      scale: scale,\n      rotate: rotate\n    };\n    var initialDistance = 0.0;\n    var initialRotation = 0.0;\n    var isGesture = points.length > 1;\n\n    if (isGesture) {\n      var firstTouch = points[0],\n          secondTouch = points[1];\n      initialDistance = distance(firstTouch, secondTouch);\n      initialRotation = angle(firstTouch, secondTouch);\n    }\n\n    var updatePoint = function updatePoint() {\n      if (isGesture) {\n        var firstTouch = points[0],\n            secondTouch = points[1];\n        var newDistance = distance(firstTouch, secondTouch);\n        var newRotation = angle(firstTouch, secondTouch);\n        output.scale = scale * (newDistance / initialDistance);\n        output.rotate = rotate + (newRotation - initialRotation);\n      }\n\n      update(output);\n    };\n\n    var onMove = function onMove(e) {\n      if (preventDefault || e.touches.length > 1) e.preventDefault();\n      sync.update(updatePoint);\n    };\n\n    var updateOnMove = listen(document, 'touchmove', {\n      passive: !preventDefault\n    }).start(onMove);\n    if (isTouchDevice) sync.update(updatePoint);\n    return {\n      stop: function stop() {\n        cancelSync.update(updatePoint);\n        updateOnMove.stop();\n      }\n    };\n  });\n};\n\nvar getIsTouchDevice = function getIsTouchDevice() {\n  return isTouchDevice;\n};\n\nvar point = /*#__PURE__*/defaultPointerPos();\nvar isMouseDevice = false;\n\nif (typeof document !== 'undefined') {\n  var updatePointLocation = function updatePointLocation(e) {\n    isMouseDevice = true;\n    eventToPoint(e, point);\n  };\n\n  listen(document, 'mousedown mousemove', true).start(updatePointLocation);\n}\n\nvar mouse = function mouse(_a) {\n  var _b = (_a === void 0 ? {} : _a).preventDefault,\n      preventDefault = _b === void 0 ? true : _b;\n  return action(function (_a) {\n    var update = _a.update;\n\n    var updatePoint = function updatePoint() {\n      return update(point);\n    };\n\n    var onMove = function onMove(e) {\n      if (preventDefault) e.preventDefault();\n      sync.update(updatePoint);\n    };\n\n    var updateOnMove = listen(document, 'mousemove').start(onMove);\n    if (isMouseDevice) sync.update(updatePoint);\n    return {\n      stop: function stop() {\n        cancelSync.update(updatePoint);\n        updateOnMove.stop();\n      }\n    };\n  });\n};\n\nvar getFirstTouch = function getFirstTouch(_a) {\n  var firstTouch = _a[0];\n  return firstTouch;\n};\n\nvar pointer = function pointer(props) {\n  if (props === void 0) {\n    props = {};\n  }\n\n  return getIsTouchDevice() ? multitouch(props).pipe(function (_a) {\n    var touches = _a.touches;\n    return touches;\n  }, getFirstTouch) : mouse(props);\n};\n\nvar index$1 = function index$1(_a) {\n  if (_a === void 0) {\n    _a = {};\n  }\n\n  var x = _a.x,\n      y = _a.y,\n      props = __rest(_a, [\"x\", \"y\"]);\n\n  if (x !== undefined || y !== undefined) {\n    var applyXOffset_1 = applyOffset(x || 0);\n    var applyYOffset_1 = applyOffset(y || 0);\n    var delta_1 = {\n      x: 0,\n      y: 0\n    };\n    return pointer(props).pipe(function (point) {\n      delta_1.x = applyXOffset_1(point.x);\n      delta_1.y = applyYOffset_1(point.y);\n      return delta_1;\n    });\n  } else {\n    return pointer(props);\n  }\n};\n\nvar chain = function chain() {\n  var actions = [];\n\n  for (var _i = 0; _i < arguments.length; _i++) {\n    actions[_i] = arguments[_i];\n  }\n\n  return action(function (_a) {\n    var update = _a.update,\n        _complete3 = _a.complete;\n    var i = 0;\n    var current;\n\n    var playCurrent = function playCurrent() {\n      current = actions[i].start({\n        complete: function complete() {\n          i++;\n          i >= actions.length ? _complete3() : playCurrent();\n        },\n        update: update\n      });\n    };\n\n    playCurrent();\n    return {\n      stop: function stop() {\n        return current && current.stop();\n      }\n    };\n  });\n};\n\nvar parallel = /*#__PURE__*/multi({\n  getOutput: function getOutput() {\n    return [];\n  },\n  getCount: function getCount(subs) {\n    return subs.length;\n  },\n  getFirst: function getFirst(subs) {\n    return subs[0];\n  },\n  mapApi: function mapApi(subs, methodName) {\n    return function () {\n      var args = [];\n\n      for (var _i = 0; _i < arguments.length; _i++) {\n        args[_i] = arguments[_i];\n      }\n\n      return subs.map(function (sub, i) {\n        if (sub[methodName]) {\n          return Array.isArray(args[0]) ? sub[methodName](args[0][i]) : sub[methodName].apply(sub, args);\n        }\n      });\n    };\n  },\n  setProp: function setProp(output, name, v) {\n    return output[name] = v;\n  },\n  startActions: function startActions(actions, starter) {\n    return actions.map(function (action, i) {\n      return starter(action, i);\n    });\n  }\n});\n\nvar parallel$1 = function parallel$1() {\n  var actions = [];\n\n  for (var _i = 0; _i < arguments.length; _i++) {\n    actions[_i] = arguments[_i];\n  }\n\n  return parallel(actions);\n};\n\nvar crossfade = function crossfade(a, b) {\n  return action(function (observer) {\n    var balance = 0;\n    var fadable = parallel$1(a, b).start(__assign({}, observer, {\n      update: function update(_a) {\n        var va = _a[0],\n            vb = _a[1];\n        observer.update(mix(va, vb, balance));\n      }\n    }));\n    return {\n      setBalance: function setBalance(v) {\n        return balance = v;\n      },\n      stop: function stop() {\n        return fadable.stop();\n      }\n    };\n  });\n};\n\nvar delay = function delay(timeToDelay) {\n  return action(function (_a) {\n    var complete = _a.complete;\n    var timeout = setTimeout(complete, timeToDelay);\n    return {\n      stop: function stop() {\n        return clearTimeout(timeout);\n      }\n    };\n  });\n};\n\nvar merge = function merge() {\n  var actions = [];\n\n  for (var _i = 0; _i < arguments.length; _i++) {\n    actions[_i] = arguments[_i];\n  }\n\n  return action(function (observer) {\n    var subs = actions.map(function (thisAction) {\n      return thisAction.start(observer);\n    });\n    return {\n      stop: function stop() {\n        return subs.forEach(function (sub) {\n          return sub.stop();\n        });\n      }\n    };\n  });\n};\n\nvar schedule = function schedule(scheduler, schedulee) {\n  return action(function (_a) {\n    var _update = _a.update,\n        complete = _a.complete;\n    var latest;\n    var schedulerSub = scheduler.start({\n      update: function update() {\n        return latest !== undefined && _update(latest);\n      },\n      complete: complete\n    });\n    var scheduleeSub = schedulee.start({\n      update: function update(v) {\n        return latest = v;\n      },\n      complete: complete\n    });\n    return {\n      stop: function stop() {\n        schedulerSub.stop();\n        scheduleeSub.stop();\n      }\n    };\n  });\n};\n\nvar stagger = function stagger(actions, interval) {\n  var intervalIsNumber = typeof interval === 'number';\n  var actionsWithDelay = actions.map(function (a, i) {\n    var timeToDelay = intervalIsNumber ? interval * i : interval(i);\n    return chain(delay(timeToDelay), a);\n  });\n  return parallel$1.apply(void 0, actionsWithDelay);\n};\n\nvar styler = function styler() {\n  return invariant(false, 'styler has been removed from Popmotion in 9.0. Downgrade to 8.x or npm install stylefire');\n};\n\nexport { Action, ValueReaction, action, chain, composite, crossfade, vectorDecay as decay, delay, frame as everyFrame, index as inertia, keyframes, listen, merge, mouse, multicast, multitouch, parallel$1 as parallel, vectorPhysics as physics, index$1 as pointer, schedule, vectorSpring as spring, stagger, styler, timeline, tween, value };","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nimport { __assign, __spreadArrays, __rest, __extends } from 'tslib';\nimport { useRef, memo, useEffect, createContext, useContext, useMemo, forwardRef, createElement, Fragment, useCallback, useState, Component, useLayoutEffect, cloneElement, Children, isValidElement } from 'react';\nimport sync, { getFrameData, cancelSync } from 'framesync';\nimport { velocityPerSecond, distance, mix, interpolate, wrap } from '@popmotion/popcorn';\nimport styler, { createStylerFactory, buildStyleProperty, isTransformProp, transformProps, buildSVGAttrs } from 'stylefire';\nimport { invariant, warning } from 'hey-listen';\nimport { color, complex, number, px, percent, degrees, vw, vh } from 'style-value-types';\nimport { action, delay, tween, spring, keyframes as keyframes$1, inertia } from 'popmotion';\nimport * as easingLookup from '@popmotion/easing';\nimport { cubicBezier, linear } from '@popmotion/easing';\n\nvar isFloat = function isFloat(value) {\n  return !isNaN(parseFloat(value));\n};\n/**\r\n * `MotionValue` is used to track the state and velocity of motion values.\r\n *\r\n * @public\r\n */\n\n\nvar MotionValue =\n/** @class */\nfunction () {\n  /**\r\n   * @param init - The initiating value\r\n   * @param config - Optional configuration options\r\n   *\r\n   * -  `transformer`: A function to transform incoming values with.\r\n   *\r\n   * @internal\r\n   */\n  function MotionValue(init, _a) {\n    var _this = this;\n\n    var _b = _a === void 0 ? {} : _a,\n        transformer = _b.transformer,\n        parent = _b.parent;\n    /**\r\n     * Duration, in milliseconds, since last updating frame.\r\n     *\r\n     * @internal\r\n     */\n\n\n    this.timeDelta = 0;\n    /**\r\n     * Timestamp of the last time this `MotionValue` was updated.\r\n     *\r\n     * @internal\r\n     */\n\n    this.lastUpdated = 0;\n    /**\r\n     * Tracks whether this value can output a velocity. Currently this is only true\r\n     * if the value is numerical, but we might be able to widen the scope here and support\r\n     * other value types.\r\n     *\r\n     * @internal\r\n     */\n\n    this.canTrackVelocity = false;\n\n    this.updateAndNotify = function (v, render) {\n      if (render === void 0) {\n        render = true;\n      }\n\n      _this.prev = _this.current;\n      _this.current = _this.transformer ? _this.transformer(v) : v;\n\n      if (_this.updateSubscribers && _this.prev !== _this.current) {\n        _this.updateSubscribers.forEach(_this.notifySubscriber);\n      }\n\n      if (_this.children) {\n        _this.children.forEach(_this.setChild);\n      }\n\n      if (render && _this.renderSubscribers) {\n        _this.renderSubscribers.forEach(_this.notifySubscriber);\n      } // Update timestamp\n\n\n      var _a = getFrameData(),\n          delta = _a.delta,\n          timestamp = _a.timestamp;\n\n      if (_this.lastUpdated !== timestamp) {\n        _this.timeDelta = delta;\n        _this.lastUpdated = timestamp;\n        sync.postRender(_this.scheduleVelocityCheck);\n      }\n    };\n    /**\r\n     * Notify a subscriber with the latest value.\r\n     *\r\n     * This is an instanced and bound function to prevent generating a new\r\n     * function once per frame.\r\n     *\r\n     * @param subscriber - The subscriber to notify.\r\n     *\r\n     * @internal\r\n     */\n\n\n    this.notifySubscriber = function (subscriber) {\n      subscriber(_this.current);\n    };\n    /**\r\n     * Schedule a velocity check for the next frame.\r\n     *\r\n     * This is an instanced and bound function to prevent generating a new\r\n     * function once per frame.\r\n     *\r\n     * @internal\r\n     */\n\n\n    this.scheduleVelocityCheck = function () {\n      return sync.postRender(_this.velocityCheck);\n    };\n    /**\r\n     * Updates `prev` with `current` if the value hasn't been updated this frame.\r\n     * This ensures velocity calculations return `0`.\r\n     *\r\n     * This is an instanced and bound function to prevent generating a new\r\n     * function once per frame.\r\n     *\r\n     * @internal\r\n     */\n\n\n    this.velocityCheck = function (_a) {\n      var timestamp = _a.timestamp;\n\n      if (timestamp !== _this.lastUpdated) {\n        _this.prev = _this.current;\n      }\n    };\n    /**\r\n     * Updates child `MotionValue`.\r\n     *\r\n     * @param child - Child `MotionValue`.\r\n     *\r\n     * @internal\r\n     */\n\n\n    this.setChild = function (child) {\n      return child.set(_this.current);\n    };\n\n    this.parent = parent;\n    this.transformer = transformer;\n    this.set(init, false);\n    this.canTrackVelocity = isFloat(this.current);\n  }\n  /**\r\n   * Creates a new `MotionValue` that's subscribed to the output of this one.\r\n   *\r\n   * @param config - Optional configuration options\r\n   *\r\n   * -  `transformer`: A function to transform incoming values with.\r\n   *\r\n   * @internal\r\n   */\n\n\n  MotionValue.prototype.addChild = function (config) {\n    if (config === void 0) {\n      config = {};\n    }\n\n    var child = new MotionValue(this.current, __assign({\n      parent: this\n    }, config));\n    if (!this.children) this.children = new Set();\n    this.children.add(child);\n    return child;\n  };\n  /**\r\n   * Stops a `MotionValue` from being subscribed to this one.\r\n   *\r\n   * @param child - The subscribed `MotionValue`\r\n   *\r\n   * @internal\r\n   */\n\n\n  MotionValue.prototype.removeChild = function (child) {\n    if (!this.children) {\n      return;\n    }\n\n    this.children.delete(child);\n  };\n  /**\r\n   * Subscribes a subscriber function to a subscription list.\r\n   *\r\n   * @param subscriptions - A `Set` of subscribers.\r\n   * @param subscription - A subscriber function.\r\n   */\n\n\n  MotionValue.prototype.subscribeTo = function (subscriptions, subscription) {\n    var _this = this;\n\n    var updateSubscriber = function updateSubscriber() {\n      return subscription(_this.current);\n    };\n\n    subscriptions.add(updateSubscriber);\n    return function () {\n      return subscriptions.delete(updateSubscriber);\n    };\n  };\n  /**\r\n   * Adds a function that will be notified when the `MotionValue` is updated.\r\n   *\r\n   * It returns a function that, when called, will cancel the subscription.\r\n   *\r\n   * When calling `onChange` inside a React component, it should be wrapped with the\r\n   * `useEffect` hook. As it returns an unsubscribe function, this should be returned\r\n   * from the `useEffect` function to ensure you don't add duplicate subscribers..\r\n   *\r\n   * @library\r\n   *\r\n   * ```jsx\r\n   * function MyComponent() {\r\n   *   const x = useMotionValue(0)\r\n   *   const y = useMotionValue(0)\r\n   *   const opacity = useMotionValue(1)\r\n   *\r\n   *   useEffect(() => {\r\n   *     function updateOpacity() {\r\n   *       const maxXY = Math.max(x.get(), y.get())\r\n   *       const newOpacity = transform(maxXY, [0, 100], [1, 0])\r\n   *       opacity.set(newOpacity)\r\n   *     }\r\n   *\r\n   *     const unsubscribeX = x.onChange(updateOpacity)\r\n   *     const unsubscribeY = y.onChange(updateOpacity)\r\n   *\r\n   *     return () => {\r\n   *       unsubscribeX()\r\n   *       unsubscribeY()\r\n   *     }\r\n   *   }, [])\r\n   *\r\n   *   return <Frame x={x} />\r\n   * }\r\n   * ```\r\n   *\r\n   * @motion\r\n   *\r\n   * ```jsx\r\n   * export const MyComponent = () => {\r\n   *   const x = useMotionValue(0)\r\n   *   const y = useMotionValue(0)\r\n   *   const opacity = useMotionValue(1)\r\n   *\r\n   *   useEffect(() => {\r\n   *     function updateOpacity() {\r\n   *       const maxXY = Math.max(x.get(), y.get())\r\n   *       const newOpacity = transform(maxXY, [0, 100], [1, 0])\r\n   *       opacity.set(newOpacity)\r\n   *     }\r\n   *\r\n   *     const unsubscribeX = x.onChange(updateOpacity)\r\n   *     const unsubscribeY = y.onChange(updateOpacity)\r\n   *\r\n   *     return () => {\r\n   *       unsubscribeX()\r\n   *       unsubscribeY()\r\n   *     }\r\n   *   }, [])\r\n   *\r\n   *   return <motion.div style={{ x }} />\r\n   * }\r\n   * ```\r\n   *\r\n   * @internalremarks\r\n   *\r\n   * We could look into a `useOnChange` hook if the above lifecycle management proves confusing.\r\n   *\r\n   * ```jsx\r\n   * useOnChange(x, () => {})\r\n   * ```\r\n   *\r\n   * @param subscriber - A function that receives the latest value.\r\n   * @returns A function that, when called, will cancel this subscription.\r\n   *\r\n   * @public\r\n   */\n\n\n  MotionValue.prototype.onChange = function (subscription) {\n    if (!this.updateSubscribers) this.updateSubscribers = new Set();\n    return this.subscribeTo(this.updateSubscribers, subscription);\n  };\n  /**\r\n   * Adds a function that will be notified when the `MotionValue` requests a render.\r\n   *\r\n   * @param subscriber - A function that's provided the latest value.\r\n   * @returns A function that, when called, will cancel this subscription.\r\n   *\r\n   * @internal\r\n   */\n\n\n  MotionValue.prototype.onRenderRequest = function (subscription) {\n    if (!this.renderSubscribers) this.renderSubscribers = new Set(); // Render immediately\n\n    this.notifySubscriber(subscription);\n    return this.subscribeTo(this.renderSubscribers, subscription);\n  };\n  /**\r\n   * Attaches a passive effect to the `MotionValue`.\r\n   *\r\n   * @internal\r\n   */\n\n\n  MotionValue.prototype.attach = function (passiveEffect) {\n    this.passiveEffect = passiveEffect;\n  };\n  /**\r\n   * Sets the state of the `MotionValue`.\r\n   *\r\n   * @remarks\r\n   *\r\n   * ```jsx\r\n   * const x = useMotionValue(0)\r\n   * x.set(10)\r\n   * ```\r\n   *\r\n   * @param latest - Latest value to set.\r\n   * @param render - Whether to notify render subscribers. Defaults to `true`\r\n   *\r\n   * @public\r\n   */\n\n\n  MotionValue.prototype.set = function (v, render) {\n    if (render === void 0) {\n      render = true;\n    }\n\n    if (!render || !this.passiveEffect) {\n      this.updateAndNotify(v, render);\n    } else {\n      this.passiveEffect(v, this.updateAndNotify);\n    }\n  };\n  /**\r\n   * Returns the latest state of `MotionValue`\r\n   *\r\n   * @returns - The latest state of `MotionValue`\r\n   *\r\n   * @public\r\n   */\n\n\n  MotionValue.prototype.get = function () {\n    return this.current;\n  };\n  /**\r\n   * Returns the latest velocity of `MotionValue`\r\n   *\r\n   * @returns - The latest velocity of `MotionValue`. Returns `0` if the state is non-numerical.\r\n   *\r\n   * @public\r\n   */\n\n\n  MotionValue.prototype.getVelocity = function () {\n    // This could be isFloat(this.prev) && isFloat(this.current), but that would be wasteful\n    return this.canTrackVelocity ? // These casts could be avoided if parseFloat would be typed better\n    velocityPerSecond(parseFloat(this.current) - parseFloat(this.prev), this.timeDelta) : 0;\n  };\n  /**\r\n   * Registers a new animation to control this `MotionValue`. Only one\r\n   * animation can drive a `MotionValue` at one time.\r\n   *\r\n   * ```jsx\r\n   * value.start()\r\n   * ```\r\n   *\r\n   * @param animation - A function that starts the provided animation\r\n   *\r\n   * @internal\r\n   */\n\n\n  MotionValue.prototype.start = function (animation) {\n    var _this = this;\n\n    this.stop();\n    return new Promise(function (resolve) {\n      _this.stopAnimation = animation(resolve);\n    }).then(function () {\n      return _this.clearAnimation();\n    });\n  };\n  /**\r\n   * Stop the currently active animation.\r\n   *\r\n   * @public\r\n   */\n\n\n  MotionValue.prototype.stop = function () {\n    if (this.stopAnimation) this.stopAnimation();\n    this.clearAnimation();\n  };\n  /**\r\n   * Returns `true` if this value is currently animating.\r\n   *\r\n   * @public\r\n   */\n\n\n  MotionValue.prototype.isAnimating = function () {\n    return !!this.stopAnimation;\n  };\n\n  MotionValue.prototype.clearAnimation = function () {\n    this.stopAnimation = null;\n  };\n  /**\r\n   * Destroy and clean up subscribers to this `MotionValue`.\r\n   *\r\n   * The `MotionValue` hooks like `useMotionValue` and `useTransform` automatically\r\n   * handle the lifecycle of the returned `MotionValue`, so this method is only necessary if you've manually\r\n   * created a `MotionValue` via the `motionValue` function.\r\n   *\r\n   * @public\r\n   */\n\n\n  MotionValue.prototype.destroy = function () {\n    this.updateSubscribers && this.updateSubscribers.clear();\n    this.renderSubscribers && this.renderSubscribers.clear();\n    this.parent && this.parent.removeChild(this);\n    this.stop();\n  };\n\n  return MotionValue;\n}();\n/**\r\n * @internal\r\n */\n\n\nfunction motionValue(init, opts) {\n  return new MotionValue(init, opts);\n}\n/**\r\n * Creates a constant value over the lifecycle of a component.\r\n *\r\n * Even if `useMemo` is provided an empty array as its final argument, it doesn't offer\r\n * a guarantee that it won't re-run for performance reasons later on. By using `useConstant`\r\n * you can ensure that initialisers don't execute twice or more.\r\n */\n\n\nfunction useConstant(init) {\n  var ref = useRef(null);\n\n  if (ref.current === null) {\n    ref.current = init();\n  }\n\n  return ref.current;\n}\n\nvar isMotionValue = function isMotionValue(value) {\n  return value instanceof MotionValue;\n}; // Creating a styler factory for the `onUpdate` prop allows all values\n// to fire and the `onUpdate` prop will only fire once per frame\n\n\nvar updateStyler = createStylerFactory({\n  onRead: function onRead() {\n    return null;\n  },\n  onRender: function onRender(state, _a) {\n    var onUpdate = _a.onUpdate;\n    return onUpdate(state);\n  }\n});\n\nvar MotionValuesMap =\n/** @class */\nfunction () {\n  function MotionValuesMap() {\n    this.hasMounted = false;\n    this.values = new Map();\n    this.unsubscribers = new Map();\n  }\n\n  MotionValuesMap.prototype.has = function (key) {\n    return this.values.has(key);\n  };\n\n  MotionValuesMap.prototype.set = function (key, value) {\n    this.values.set(key, value);\n\n    if (this.hasMounted) {\n      this.bindValueToOutput(key, value);\n    }\n  };\n\n  MotionValuesMap.prototype.get = function (key, defaultValue) {\n    var value = this.values.get(key);\n\n    if (value === undefined && defaultValue !== undefined) {\n      value = new MotionValue(defaultValue);\n      this.set(key, value);\n    }\n\n    return value;\n  };\n\n  MotionValuesMap.prototype.forEach = function (callback) {\n    return this.values.forEach(callback);\n  };\n\n  MotionValuesMap.prototype.bindValueToOutput = function (key, value) {\n    var _this = this;\n\n    var onRender = function onRender(v) {\n      return _this.output && _this.output(key, v);\n    };\n\n    var unsubscribeOnRender = value.onRenderRequest(onRender);\n\n    var onChange = function onChange(v) {\n      _this.onUpdate && _this.onUpdate.set(key, v);\n    };\n\n    var unsubscribeOnChange = value.onChange(onChange);\n\n    if (this.unsubscribers.has(key)) {\n      this.unsubscribers.get(key)();\n    }\n\n    this.unsubscribers.set(key, function () {\n      unsubscribeOnRender();\n      unsubscribeOnChange();\n    });\n  };\n\n  MotionValuesMap.prototype.setOnUpdate = function (onUpdate) {\n    this.onUpdate = undefined;\n\n    if (onUpdate) {\n      this.onUpdate = updateStyler({\n        onUpdate: onUpdate\n      });\n    }\n  };\n\n  MotionValuesMap.prototype.setTransformTemplate = function (transformTemplate) {\n    if (this.transformTemplate !== transformTemplate) {\n      this.transformTemplate = transformTemplate;\n      this.updateTransformTemplate();\n    }\n  };\n\n  MotionValuesMap.prototype.getTransformTemplate = function () {\n    return this.transformTemplate;\n  };\n\n  MotionValuesMap.prototype.updateTransformTemplate = function () {\n    if (this.output) {\n      this.output(\"transform\", this.transformTemplate);\n    }\n  };\n\n  MotionValuesMap.prototype.mount = function (output) {\n    var _this = this;\n\n    this.hasMounted = true;\n    if (output) this.output = output;\n    this.values.forEach(function (value, key) {\n      return _this.bindValueToOutput(key, value);\n    });\n    this.updateTransformTemplate();\n  };\n\n  MotionValuesMap.prototype.unmount = function () {\n    var _this = this;\n\n    this.values.forEach(function (_value, key) {\n      var unsubscribe = _this.unsubscribers.get(key);\n\n      unsubscribe && unsubscribe();\n    });\n  };\n\n  return MotionValuesMap;\n}();\n\nvar specialMotionValueProps = new Set([\"dragOriginX\", \"dragOriginY\"]);\n\nvar useMotionValues = function useMotionValues(props) {\n  var motionValues = useConstant(function () {\n    var map = new MotionValuesMap();\n    /**\r\n     * Loop through every prop and add any detected `MotionValue`s. This is SVG-specific\r\n     * code that should be extracted, perhaps considered hollistically with `useMotionStyles`.\r\n     *\r\n     * <motion.circle cx={motionValue(0)} />\r\n     */\n\n    for (var key in props) {\n      if (isMotionValue(props[key]) && !specialMotionValueProps.has(key)) {\n        map.set(key, props[key]);\n      }\n    }\n\n    return map;\n  });\n  motionValues.setOnUpdate(props.onUpdate);\n  motionValues.setTransformTemplate(props.transformTemplate);\n  return motionValues;\n};\n\nvar session = null;\nvar syncRenderSession = {\n  isOpen: function isOpen() {\n    return session !== null;\n  },\n  open: function open() {\n    invariant(!session, \"Sync render session already open\");\n    session = [];\n  },\n  flush: function flush() {\n    invariant(session !== null, \"No sync render session found\");\n    session && session.forEach(function (styler) {\n      return styler.render();\n    });\n    session = null;\n  },\n  push: function push(styler) {\n    invariant(session !== null, \"No sync render session found\");\n    session && session.push(styler);\n  }\n};\n/**\r\n * `useEffect` gets resolved bottom-up. We defer some optional functionality to child\r\n * components, so to ensure everything runs correctly we export the ref-binding logic\r\n * to a new component rather than in `useMotionValues`.\r\n */\n\nvar MountComponent = function MountComponent(_a) {\n  var ref = _a.innerRef,\n      values = _a.values,\n      isStatic = _a.isStatic;\n  useEffect(function () {\n    invariant(ref.current instanceof Element, \"No `ref` found. Ensure components created with `motion.custom` forward refs using `React.forwardRef`\");\n    var domStyler = styler(ref.current, {\n      preparseOutput: false,\n      enableHardwareAcceleration: !isStatic\n    });\n    values.mount(function (key, value) {\n      domStyler.set(key, value);\n\n      if (syncRenderSession.isOpen()) {\n        syncRenderSession.push(domStyler);\n      }\n    });\n    return function () {\n      return values.unmount();\n    };\n  }, []);\n  return null;\n};\n\nvar Mount = /*#__PURE__*/memo(MountComponent);\n\nvar createValueResolver = function createValueResolver(resolver) {\n  return function (values) {\n    var resolvedValues = {};\n    values.forEach(function (value, key) {\n      return resolvedValues[key] = resolver(value);\n    });\n    return resolvedValues;\n  };\n};\n\nvar resolveCurrent = createValueResolver(function (value) {\n  return value.get();\n});\nvar transformOriginProps = new Set([\"originX\", \"originY\", \"originZ\"]);\n\nvar isTransformOriginProp = function isTransformOriginProp(key) {\n  return transformOriginProps.has(key);\n};\n\nvar buildStyleAttr = function buildStyleAttr(values, styleProp, isStatic) {\n  var motionValueStyles = resolveCurrent(values);\n  var transformTemplate = values.getTransformTemplate();\n\n  if (transformTemplate) {\n    // If `transform` has been manually set as a string, pass that through the template\n    // otherwise pass it forward to Stylefire's style property builder\n    motionValueStyles.transform = styleProp.transform ? transformTemplate({}, styleProp.transform) : transformTemplate;\n  }\n\n  return buildStyleProperty(__assign(__assign({}, styleProp), motionValueStyles), !isStatic);\n};\n\nvar useMotionStyles = function useMotionStyles(values, styleProp, isStatic, transformValues) {\n  if (styleProp === void 0) {\n    styleProp = {};\n  }\n\n  var style = {};\n  var prevMotionStyles = useRef({}).current;\n\n  for (var key in styleProp) {\n    var thisStyle = styleProp[key];\n\n    if (isMotionValue(thisStyle)) {\n      // If this is a motion value, add it to our MotionValuesMap\n      values.set(key, thisStyle);\n    } else if (!isStatic && (isTransformProp(key) || isTransformOriginProp(key))) {\n      // Or if it's a transform prop, create a motion value (or update an existing one)\n      // to ensure Stylefire can reconcile all the transform values together.\n      // A further iteration on this would be to create a single styler per component that gets\n      // used in the DOM renderer's buildStyleAttr *and* animations, then we would only\n      // have to convert animating values to `MotionValues` (we could probably remove this entire function).\n      // The only architectural consideration is to allow Stylefire to have elements mounted after\n      // a styler is created.\n      if (!values.has(key)) {\n        // If it doesn't exist as a motion value, create it\n        values.set(key, motionValue(thisStyle));\n      } else {\n        // Otherwise only update it if it's changed from a previous render\n        if (thisStyle !== prevMotionStyles[key]) {\n          var value = values.get(key);\n          value.set(thisStyle);\n        }\n      }\n\n      prevMotionStyles[key] = thisStyle;\n    } else {\n      style[key] = thisStyle;\n    }\n  }\n\n  return transformValues ? transformValues(style) : style;\n};\n\nvar isKeyframesTarget = function isKeyframesTarget(v) {\n  return Array.isArray(v);\n};\n\nvar isCustomValue = function isCustomValue(v) {\n  return Boolean(v && _typeof(v) === \"object\" && v.mix && v.toValue);\n};\n\nvar resolveFinalValueInKeyframes = function resolveFinalValueInKeyframes(v) {\n  // TODO maybe throw if v.length - 1 is placeholder token?\n  return isKeyframesTarget(v) ? v[v.length - 1] || 0 : v;\n};\n\nvar auto = {\n  test: function test(v) {\n    return v === \"auto\";\n  },\n  parse: function parse(v) {\n    return v;\n  }\n};\nvar dimensionTypes = [number, px, percent, degrees, vw, vh, auto];\n\nvar valueTypes = __spreadArrays(dimensionTypes, [color, complex]);\n\nvar testValueType = function testValueType(v) {\n  return function (type) {\n    return type.test(v);\n  };\n};\n\nvar getDimensionValueType = function getDimensionValueType(v) {\n  return dimensionTypes.find(testValueType(v));\n};\n\nvar getValueType = function getValueType(v) {\n  return valueTypes.find(testValueType(v));\n};\n\nvar underDampedSpring = function underDampedSpring() {\n  return {\n    type: \"spring\",\n    stiffness: 500,\n    damping: 25,\n    restDelta: 0.5,\n    restSpeed: 10\n  };\n};\n\nvar overDampedSpring = function overDampedSpring(to) {\n  return {\n    type: \"spring\",\n    stiffness: 700,\n    damping: to === 0 ? 100 : 35\n  };\n};\n\nvar linearTween = function linearTween() {\n  return {\n    ease: \"linear\",\n    duration: 0.3\n  };\n};\n\nvar keyframes = function keyframes(values) {\n  return {\n    type: \"keyframes\",\n    duration: 0.8,\n    values: values\n  };\n};\n\nvar defaultTransitions = {\n  x: underDampedSpring,\n  y: underDampedSpring,\n  z: underDampedSpring,\n  rotate: underDampedSpring,\n  rotateX: underDampedSpring,\n  rotateY: underDampedSpring,\n  rotateZ: underDampedSpring,\n  scaleX: overDampedSpring,\n  scaleY: overDampedSpring,\n  scale: overDampedSpring,\n  opacity: linearTween,\n  backgroundColor: linearTween,\n  color: linearTween,\n  default: overDampedSpring\n};\n\nvar getDefaultTransition = function getDefaultTransition(valueKey, to) {\n  var transitionFactory;\n\n  if (isKeyframesTarget(to)) {\n    transitionFactory = keyframes;\n  } else {\n    transitionFactory = defaultTransitions[valueKey] || defaultTransitions.default;\n  }\n\n  return __assign({\n    to: to\n  }, transitionFactory(to));\n};\n/**\r\n * A Popmotion action that accepts a single `to` prop. When it starts, it immediately\r\n * updates with `to` and then completes. By using this we can compose instant transitions\r\n * in with the same logic that applies `delay` or returns a `Promise` etc.\r\n *\r\n * Accepting `duration` is a little bit of a hack that simply defers the completetion of\r\n * the animation until after the duration finishes. This is for situations when you're **only**\r\n * animating non-animatable values and then setting something on `transitionEnd`. Really\r\n * you want this to fire after the \"animation\" finishes, rather than instantly.\r\n *\r\n * ```\r\n * animate={{\r\n *   display: 'block',\r\n *   transitionEnd: { display: 'none' }\r\n * }}\r\n * ```\r\n */\n\n\nvar just = function just(_a) {\n  var to = _a.to,\n      duration = _a.duration;\n  return action(function (_a) {\n    var update = _a.update,\n        complete = _a.complete;\n    update(to);\n    duration ? delay(duration).start({\n      complete: complete\n    }) : complete();\n  });\n};\n\nvar easingDefinitionToFunction = function easingDefinitionToFunction(definition) {\n  if (Array.isArray(definition)) {\n    // If cubic bezier definition, create bezier curve\n    invariant(definition.length === 4, \"Cubic bezier arrays must contain four numerical values.\");\n    var x1 = definition[0],\n        y1 = definition[1],\n        x2 = definition[2],\n        y2 = definition[3];\n    return cubicBezier(x1, y1, x2, y2);\n  } else if (typeof definition === \"string\") {\n    // Else lookup from table\n    invariant(easingLookup[definition] !== undefined, \"Invalid easing type '\" + definition + \"'\");\n    return easingLookup[definition];\n  }\n\n  return definition;\n};\n\nvar isEasingArray = function isEasingArray(ease) {\n  return Array.isArray(ease) && typeof ease[0] !== \"number\";\n};\n\nvar isDurationAnimation = function isDurationAnimation(v) {\n  return v.hasOwnProperty(\"duration\") || v.hasOwnProperty(\"repeatDelay\");\n};\n/**\r\n * Check if a value is animatable. Examples:\r\n *\r\n * ✅: 100, \"100px\", \"#fff\"\r\n * ❌: \"block\", \"url(2.jpg)\"\r\n * @param value\r\n *\r\n * @internal\r\n */\n\n\nvar isAnimatable = function isAnimatable(key, value) {\n  // If the list of keys tat might be non-animatable grows, replace with Set\n  if (key === \"zIndex\") return false; // If it's a number or a keyframes array, we can animate it. We might at some point\n  // need to do a deep isAnimatable check of keyframes, or let Popmotion handle this,\n  // but for now lets leave it like this for performance reasons\n\n  if (typeof value === \"number\" || Array.isArray(value)) return true;\n\n  if (typeof value === \"string\" && // It's animatable if we have a string\n  complex.test(value) && // And it contains numbers and/or colors\n  !value.startsWith(\"url(\") // Unless it starts with \"url(\"\n  ) {\n    return true;\n  }\n\n  return false;\n};\n/**\r\n * Converts seconds to milliseconds\r\n *\r\n * @param seconds - Time in seconds.\r\n * @return milliseconds - Converted time in milliseconds.\r\n */\n\n\nvar secondsToMilliseconds = function secondsToMilliseconds(seconds) {\n  return seconds * 1000;\n};\n\nvar transitions = {\n  tween: tween,\n  spring: spring,\n  keyframes: keyframes$1,\n  inertia: inertia,\n  just: just\n};\nvar transitionOptionParser = {\n  tween: function tween(opts) {\n    if (opts.ease) {\n      var ease = isEasingArray(opts.ease) ? opts.ease[0] : opts.ease;\n      opts.ease = easingDefinitionToFunction(ease);\n    }\n\n    return opts;\n  },\n  keyframes: function keyframes(_a) {\n    var from = _a.from,\n        to = _a.to,\n        velocity = _a.velocity,\n        opts = __rest(_a, [\"from\", \"to\", \"velocity\"]);\n\n    if (opts.values && opts.values[0] === null) {\n      var values = __spreadArrays(opts.values);\n\n      values[0] = from;\n      opts.values = values;\n    }\n\n    if (opts.ease) {\n      opts.easings = isEasingArray(opts.ease) ? opts.ease.map(easingDefinitionToFunction) : easingDefinitionToFunction(opts.ease);\n    }\n\n    opts.ease = linear;\n    return opts;\n  }\n};\n\nvar isTransitionDefined = function isTransitionDefined(_a) {\n  var when = _a.when,\n      delay = _a.delay,\n      delayChildren = _a.delayChildren,\n      staggerChildren = _a.staggerChildren,\n      staggerDirection = _a.staggerDirection,\n      transition = __rest(_a, [\"when\", \"delay\", \"delayChildren\", \"staggerChildren\", \"staggerDirection\"]);\n\n  return Object.keys(transition).length;\n};\n\nvar getTransitionDefinition = function getTransitionDefinition(key, to, transitionDefinition) {\n  var delay = transitionDefinition ? transitionDefinition.delay : 0; // If no object, return default transition\n  // A better way to handle this would be to deconstruct out all the shared Orchestration props\n  // and see if there's any props remaining\n\n  if (transitionDefinition === undefined || !isTransitionDefined(transitionDefinition)) {\n    return __assign({\n      delay: delay\n    }, getDefaultTransition(key, to));\n  }\n\n  var valueTransitionDefinition = transitionDefinition[key] || transitionDefinition.default || transitionDefinition;\n\n  if (valueTransitionDefinition.type === false) {\n    return {\n      delay: valueTransitionDefinition.hasOwnProperty(\"delay\") ? valueTransitionDefinition.delay : delay,\n      to: isKeyframesTarget(to) ? to[to.length - 1] : to,\n      type: \"just\"\n    };\n  } else if (isKeyframesTarget(to)) {\n    return __assign(__assign({\n      values: to,\n      duration: 0.8,\n      delay: delay,\n      ease: \"linear\"\n    }, valueTransitionDefinition), {\n      // This animation must be keyframes if we're animating through an array\n      type: \"keyframes\"\n    });\n  } else {\n    return __assign({\n      type: \"tween\",\n      to: to,\n      delay: delay\n    }, valueTransitionDefinition);\n  }\n};\n\nvar preprocessOptions = function preprocessOptions(type, opts) {\n  return transitionOptionParser[type] ? transitionOptionParser[type](opts) : opts;\n};\n\nvar getAnimation = function getAnimation(key, value, target, transition) {\n  var origin = value.get();\n  var isOriginAnimatable = isAnimatable(key, origin);\n  var isTargetAnimatable = isAnimatable(key, target); // TODO we could probably improve this check to ensure both values are of the same type -\n  // for instance 100 to #fff. This might live better in Popmotion.\n\n  warning(isOriginAnimatable === isTargetAnimatable, \"You are trying to animate \" + key + \" from \\\"\" + origin + \"\\\" to \" + target + \". \\\"\" + origin + \"\\\" is not an animatable value - to enable this animation set \" + origin + \" to a value animatable to \" + target + \" via the `style` property.\"); // Parse the `transition` prop and return options for the Popmotion animation\n\n  var _a = getTransitionDefinition(key, target, transition),\n      _b = _a.type,\n      type = _b === void 0 ? \"tween\" : _b,\n      transitionDefinition = __rest(_a, [\"type\"]); // If this is an animatable pair of values, return an animation, otherwise use `just`\n\n\n  var actionFactory = isOriginAnimatable && isTargetAnimatable ? transitions[type] : just;\n  var opts = preprocessOptions(type, __assign({\n    from: origin,\n    velocity: value.getVelocity()\n  }, transitionDefinition)); // Convert duration from Framer Motion's seconds into Popmotion's milliseconds\n\n  if (isDurationAnimation(opts)) {\n    if (opts.duration) {\n      opts.duration = secondsToMilliseconds(opts.duration);\n    }\n\n    if (opts.repeatDelay) {\n      opts.repeatDelay = secondsToMilliseconds(opts.repeatDelay);\n    }\n  }\n\n  return [actionFactory, opts];\n};\n/**\r\n * Start animation on a value. This function completely encapsulates Popmotion-specific logic.\r\n *\r\n * @internal\r\n */\n\n\nfunction startAnimation(key, value, target, _a) {\n  var _b = _a.delay,\n      delay$1 = _b === void 0 ? 0 : _b,\n      transition = __rest(_a, [\"delay\"]);\n\n  return value.start(function (complete) {\n    var activeAnimation;\n\n    var _a = getAnimation(key, value, target, transition),\n        animationFactory = _a[0],\n        _b = _a[1],\n        valueDelay = _b.delay,\n        options = __rest(_b, [\"delay\"]);\n\n    if (valueDelay !== undefined) {\n      delay$1 = valueDelay;\n    }\n\n    var animate = function animate() {\n      var animation = animationFactory(options); // Bind animation opts to animation\n\n      activeAnimation = animation.start({\n        update: function update(v) {\n          return value.set(v);\n        },\n        complete: complete\n      });\n    }; // If we're delaying this animation, only resolve it **after** the delay to\n    // ensure the value's resolve velocity is up-to-date.\n\n\n    if (delay$1) {\n      activeAnimation = delay(secondsToMilliseconds(delay$1)).start({\n        complete: animate\n      });\n    } else {\n      animate();\n    }\n\n    return function () {\n      if (activeAnimation) activeAnimation.stop();\n    };\n  });\n}\n/**\r\n * Get the current value of every `MotionValue`\r\n * @param values -\r\n */\n\n\nvar getCurrent = function getCurrent(values) {\n  var current = {};\n  values.forEach(function (value, key) {\n    return current[key] = value.get();\n  });\n  return current;\n};\n/**\r\n * Get the current velocity of every `MotionValue`\r\n * @param values -\r\n */\n\n\nvar getVelocity = function getVelocity(values) {\n  var velocity = {};\n  values.forEach(function (value, key) {\n    return velocity[key] = value.getVelocity();\n  });\n  return velocity;\n};\n/**\r\n * Check if value is a function that returns a `Target`. A generic typeof === 'function'\r\n * check, just helps with typing.\r\n * @param p -\r\n */\n\n\nvar isTargetResolver = function isTargetResolver(p) {\n  return typeof p === \"function\";\n};\n/**\r\n * Check if value is a list of variant labels\r\n * @param v -\r\n */\n\n\nvar isVariantLabels = function isVariantLabels(v) {\n  return Array.isArray(v);\n};\n/**\r\n * Check if value is a numerical string, ie \"100\" or \"100px\"\r\n */\n\n\nvar isNumericalString = function isNumericalString(v) {\n  return /^\\d*\\.?\\d+$/.test(v);\n};\n/**\r\n * Control animations for a single component\r\n *\r\n * @internal\r\n */\n\n\nvar ValueAnimationControls =\n/** @class */\nfunction () {\n  function ValueAnimationControls(_a) {\n    var _this = this;\n\n    var values = _a.values,\n        readValueFromSource = _a.readValueFromSource,\n        makeTargetAnimatable = _a.makeTargetAnimatable;\n    /**\r\n     * A reference to the component's latest props. We could probably ditch this in\r\n     * favour to a reference to the `custom` prop now we don't send all props through\r\n     * to target resolvers.\r\n     */\n\n    this.props = {};\n    /**\r\n     * The component's variants, as provided by `variants`\r\n     */\n\n    this.variants = {};\n    /**\r\n     * A set of values that we animate back to when a value is cleared of all overrides.\r\n     */\n\n    this.baseTarget = {};\n    /**\r\n     * A series of target overrides that we can animate to/from when overrides are set/cleared.\r\n     */\n\n    this.overrides = [];\n    /**\r\n     * A series of target overrides as they were originally resolved.\r\n     */\n\n    this.resolvedOverrides = [];\n    /**\r\n     * A Set of currently active override indexes\r\n     */\n\n    this.activeOverrides = new Set();\n    /**\r\n     * A Set of value keys that are currently animating.\r\n     */\n\n    this.isAnimating = new Set();\n    /**\r\n     * Check if the associated `MotionValueMap` has a key with the provided string.\r\n     * Pre-bound to the class so we can provide directly to the `filter` in `checkForNewValues`.\r\n     */\n\n    this.hasValue = function (key) {\n      return !_this.values.has(key);\n    };\n\n    this.values = values;\n    this.readValueFromSource = readValueFromSource;\n    this.makeTargetAnimatable = makeTargetAnimatable;\n    this.values.forEach(function (value, key) {\n      return _this.baseTarget[key] = value.get();\n    });\n  }\n  /**\r\n   * Set the reference to the component's props.\r\n   * @param props -\r\n   */\n\n\n  ValueAnimationControls.prototype.setProps = function (props) {\n    this.props = props;\n  };\n  /**\r\n   * Set the reference to the component's variants\r\n   * @param variants -\r\n   */\n\n\n  ValueAnimationControls.prototype.setVariants = function (variants) {\n    if (variants) this.variants = variants;\n  };\n  /**\r\n   * Set the component's default transition\r\n   * @param transition -\r\n   */\n\n\n  ValueAnimationControls.prototype.setDefaultTransition = function (transition) {\n    if (transition) this.defaultTransition = transition;\n  };\n  /**\r\n   * Set motion values without animation.\r\n   *\r\n   * @param definition -\r\n   * @param isActive -\r\n   */\n\n\n  ValueAnimationControls.prototype.setValues = function (definition, _a) {\n    var _this = this;\n\n    var _b = _a === void 0 ? {} : _a,\n        _c = _b.isActive,\n        isActive = _c === void 0 ? new Set() : _c,\n        priority = _b.priority;\n\n    var _d = this.resolveVariant(definition),\n        target = _d.target,\n        transitionEnd = _d.transitionEnd;\n\n    target = this.transformValues(__assign(__assign({}, target), transitionEnd));\n    return Object.keys(target).forEach(function (key) {\n      if (isActive.has(key)) return;\n      isActive.add(key);\n\n      if (target) {\n        var targetValue = resolveFinalValueInKeyframes(target[key]);\n\n        if (_this.values.has(key)) {\n          var value = _this.values.get(key);\n\n          value && value.set(targetValue);\n        } else {\n          _this.values.set(key, motionValue(targetValue));\n        }\n\n        if (!priority) _this.baseTarget[key] = targetValue;\n      }\n    });\n  };\n  /**\r\n   * Allows `transformValues` to be set by a component that allows us to\r\n   * transform the values in a given `Target`. This allows Framer Library\r\n   * to extend Framer Motion to animate `Color` variables etc. Currently we have\r\n   * to manually support these extended types here in Framer Motion.\r\n   *\r\n   * @param values -\r\n   */\n\n\n  ValueAnimationControls.prototype.transformValues = function (values) {\n    var transformValues = this.props.transformValues;\n    return transformValues ? transformValues(values) : values;\n  };\n  /**\r\n   * Check a `Target` for new values we haven't animated yet, and add them\r\n   * to the `MotionValueMap`.\r\n   *\r\n   * Currently there's functionality here that is DOM-specific, we should allow\r\n   * this functionality to be injected by the factory that creates DOM-specific\r\n   * components.\r\n   *\r\n   * @param target -\r\n   */\n\n\n  ValueAnimationControls.prototype.checkForNewValues = function (target) {\n    var newValueKeys = Object.keys(target).filter(this.hasValue);\n    var numNewValues = newValueKeys.length;\n    if (!numNewValues) return;\n\n    for (var i = 0; i < numNewValues; i++) {\n      var key = newValueKeys[i];\n      var targetValue = target[key];\n      var value = null; // If this is a keyframes value, we can attempt to use the first value in the\n      // array as that's going to be the first value of the animation anyway\n\n      if (Array.isArray(targetValue)) {\n        value = targetValue[0];\n      } // If it isn't a keyframes or the first keyframes value was set as `null`, read the\n      // value from the DOM. It might be worth investigating whether to check props (for SVG)\n      // or props.style (for HTML) if the value exists there before attempting to read.\n\n\n      if (value === null) {\n        value = this.readValueFromSource(key);\n        invariant(value !== null, \"No initial value for \\\"\" + key + \"\\\" can be inferred. Ensure an initial value for \\\"\" + key + \"\\\" is defined on the component.\");\n      }\n\n      if (typeof value === \"string\" && isNumericalString(value)) {\n        // If this is a number read as a string, ie \"0\" or \"200\", convert it to a number\n        value = parseFloat(value);\n      } else if (!getValueType(value) && complex.test(targetValue)) {\n        // If value is not recognised as animatable, ie \"none\", create an animatable version origin based on the target\n        value = complex.getAnimatableNone(targetValue);\n      }\n\n      this.values.set(key, motionValue(value));\n      this.baseTarget[key] = value;\n    }\n  };\n  /**\r\n   * Resolve a variant from its label or resolver into an actual `Target` we can animate to.\r\n   * @param variant -\r\n   */\n\n\n  ValueAnimationControls.prototype.resolveVariant = function (variant) {\n    if (!variant) {\n      return {\n        target: undefined,\n        transition: undefined,\n        transitionEnd: undefined\n      };\n    }\n\n    if (isTargetResolver(variant)) {\n      // resolve current and velocity\n      variant = variant(this.props.custom, getCurrent(this.values), getVelocity(this.values));\n    }\n\n    var _a = variant.transition,\n        transition = _a === void 0 ? this.defaultTransition : _a,\n        transitionEnd = variant.transitionEnd,\n        target = __rest(variant, [\"transition\", \"transitionEnd\"]);\n\n    return {\n      transition: transition,\n      transitionEnd: transitionEnd,\n      target: target\n    };\n  };\n  /**\r\n   * Get the highest active override priority index\r\n   */\n\n\n  ValueAnimationControls.prototype.getHighestPriority = function () {\n    if (!this.activeOverrides.size) return 0;\n    return Math.max.apply(Math, Array.from(this.activeOverrides));\n  };\n  /**\r\n   * Set an override. We add this layer of indirection so if, for instance, a tap gesture\r\n   * starts and overrides a hover gesture, when we clear the tap gesture and fallback to the\r\n   * hover gesture, if that hover gesture has changed in the meantime we can go to that rather\r\n   * than the one that was resolved when the hover gesture animation started.\r\n   *\r\n   * @param definition -\r\n   * @param overrideIndex -\r\n   */\n\n\n  ValueAnimationControls.prototype.setOverride = function (definition, overrideIndex) {\n    this.overrides[overrideIndex] = definition;\n\n    if (this.children) {\n      this.children.forEach(function (child) {\n        return child.setOverride(definition, overrideIndex);\n      });\n    }\n  };\n  /**\r\n   * Start an override animation.\r\n   * @param overrideIndex -\r\n   */\n\n\n  ValueAnimationControls.prototype.startOverride = function (overrideIndex) {\n    var override = this.overrides[overrideIndex];\n\n    if (override) {\n      return this.start(override, {\n        priority: overrideIndex\n      });\n    }\n  };\n  /**\r\n   * Clear an override. We check every value we animated to in this override to see if\r\n   * its present on any lower-priority overrides. If not, we animate it back to its base target.\r\n   * @param overrideIndex -\r\n   */\n\n\n  ValueAnimationControls.prototype.clearOverride = function (overrideIndex) {\n    var _this = this;\n\n    if (this.children) {\n      this.children.forEach(function (child) {\n        return child.clearOverride(overrideIndex);\n      });\n    }\n\n    var override = this.overrides[overrideIndex];\n    if (!override) return;\n    this.activeOverrides.delete(overrideIndex);\n    var highest = this.getHighestPriority();\n    this.resetIsAnimating();\n\n    if (highest) {\n      var highestOverride = this.overrides[highest];\n      highestOverride && this.startOverride(highest);\n    } // Figure out which remaining values were affected by the override and animate those\n\n\n    var overrideTarget = this.resolvedOverrides[overrideIndex];\n    if (!overrideTarget) return;\n    var remainingValues = {};\n\n    for (var key in this.baseTarget) {\n      if (overrideTarget[key] !== undefined) {\n        remainingValues[key] = this.baseTarget[key];\n      }\n    }\n\n    this.onStart();\n    this.animate(remainingValues).then(function () {\n      return _this.onComplete();\n    });\n  };\n  /**\r\n   * Apply a target/variant without any animation\r\n   */\n\n\n  ValueAnimationControls.prototype.apply = function (definition) {\n    if (Array.isArray(definition)) {\n      return this.applyVariantLabels(definition);\n    } else if (typeof definition === \"string\") {\n      return this.applyVariantLabels([definition]);\n    } else {\n      this.setValues(definition);\n    }\n  };\n  /**\r\n   * Apply variant labels without animation\r\n   */\n\n\n  ValueAnimationControls.prototype.applyVariantLabels = function (variantLabelList) {\n    var _this = this;\n\n    var isActive = new Set();\n\n    var reversedList = __spreadArrays(variantLabelList).reverse();\n\n    reversedList.forEach(function (key) {\n      var _a = _this.resolveVariant(_this.variants[key]),\n          target = _a.target,\n          transitionEnd = _a.transitionEnd;\n\n      if (transitionEnd) {\n        _this.setValues(transitionEnd, {\n          isActive: isActive\n        });\n      }\n\n      if (target) {\n        _this.setValues(target, {\n          isActive: isActive\n        });\n      }\n\n      if (_this.children && _this.children.size) {\n        _this.children.forEach(function (child) {\n          return child.applyVariantLabels(variantLabelList);\n        });\n      }\n    });\n  };\n\n  ValueAnimationControls.prototype.start = function (definition, opts) {\n    var _this = this;\n\n    if (opts === void 0) {\n      opts = {};\n    }\n\n    if (opts.priority) {\n      this.activeOverrides.add(opts.priority);\n    }\n\n    this.resetIsAnimating(opts.priority);\n    var animation;\n\n    if (isVariantLabels(definition)) {\n      animation = this.animateVariantLabels(definition, opts);\n    } else if (typeof definition === \"string\") {\n      animation = this.animateVariant(definition, opts);\n    } else {\n      animation = this.animate(definition, opts);\n    }\n\n    this.onStart();\n    return animation.then(function () {\n      return _this.onComplete();\n    });\n  };\n\n  ValueAnimationControls.prototype.animate = function (animationDefinition, _a) {\n    var _this = this;\n\n    var _b = _a === void 0 ? {} : _a,\n        _c = _b.delay,\n        delay = _c === void 0 ? 0 : _c,\n        _d = _b.priority,\n        priority = _d === void 0 ? 0 : _d,\n        transitionOverride = _b.transitionOverride;\n\n    var _e = this.resolveVariant(animationDefinition),\n        target = _e.target,\n        transition = _e.transition,\n        transitionEnd = _e.transitionEnd;\n\n    if (transitionOverride) {\n      transition = transitionOverride;\n    }\n\n    if (!target) return Promise.resolve();\n    target = this.transformValues(target);\n\n    if (transitionEnd) {\n      transitionEnd = this.transformValues(transitionEnd);\n    }\n\n    this.checkForNewValues(target);\n\n    if (this.makeTargetAnimatable) {\n      var animatable = this.makeTargetAnimatable(target, transitionEnd);\n      target = animatable.target;\n      transitionEnd = animatable.transitionEnd;\n    }\n\n    if (priority) {\n      this.resolvedOverrides[priority] = target;\n    }\n\n    this.checkForNewValues(target);\n    var animations = [];\n\n    for (var key in target) {\n      var value = this.values.get(key);\n      if (!value || !target || target[key] === undefined) continue;\n      var valueTarget = target[key];\n\n      if (!priority) {\n        this.baseTarget[key] = resolveFinalValueInKeyframes(valueTarget);\n      }\n\n      if (this.isAnimating.has(key)) continue;\n      this.isAnimating.add(key);\n      animations.push(startAnimation(key, value, valueTarget, __assign({\n        delay: delay\n      }, transition)));\n    }\n\n    var allAnimations = Promise.all(animations);\n    return transitionEnd ? allAnimations.then(function () {\n      _this.setValues(transitionEnd, {\n        priority: priority\n      });\n    }) : allAnimations;\n  };\n\n  ValueAnimationControls.prototype.animateVariantLabels = function (variantLabels, opts) {\n    var _this = this;\n\n    var animations = __spreadArrays(variantLabels).reverse().map(function (label) {\n      return _this.animateVariant(label, opts);\n    });\n\n    return Promise.all(animations);\n  };\n\n  ValueAnimationControls.prototype.animateVariant = function (variantLabel, opts) {\n    var _this = this;\n\n    var when = false;\n    var delayChildren = 0;\n    var staggerChildren = 0;\n    var staggerDirection = 1;\n    var priority = opts && opts.priority || 0;\n    var variant = this.variants[variantLabel];\n    var getAnimations = variant ? function () {\n      return _this.animate(variant, opts);\n    } : function () {\n      return Promise.resolve();\n    };\n    var getChildrenAnimations = this.children ? function () {\n      return _this.animateChildren(variantLabel, delayChildren, staggerChildren, staggerDirection, priority);\n    } : function () {\n      return Promise.resolve();\n    };\n\n    if (variant && this.children) {\n      var transition = this.resolveVariant(variant).transition;\n\n      if (transition) {\n        when = transition.when || when;\n        delayChildren = transition.delayChildren || delayChildren;\n        staggerChildren = transition.staggerChildren || staggerChildren;\n        staggerDirection = transition.staggerDirection || staggerDirection;\n      }\n    }\n\n    if (when) {\n      var _a = when === \"beforeChildren\" ? [getAnimations, getChildrenAnimations] : [getChildrenAnimations, getAnimations],\n          first = _a[0],\n          last = _a[1];\n\n      return first().then(last);\n    } else {\n      return Promise.all([getAnimations(), getChildrenAnimations()]);\n    }\n  };\n\n  ValueAnimationControls.prototype.animateChildren = function (variantLabel, delayChildren, staggerChildren, staggerDirection, priority) {\n    if (delayChildren === void 0) {\n      delayChildren = 0;\n    }\n\n    if (staggerChildren === void 0) {\n      staggerChildren = 0;\n    }\n\n    if (staggerDirection === void 0) {\n      staggerDirection = 1;\n    }\n\n    if (priority === void 0) {\n      priority = 0;\n    }\n\n    if (!this.children) {\n      return Promise.resolve();\n    }\n\n    var animations = [];\n    var maxStaggerDuration = (this.children.size - 1) * staggerChildren;\n    var generateStaggerDuration = staggerDirection === 1 ? function (i) {\n      return i * staggerChildren;\n    } : function (i) {\n      return maxStaggerDuration - i * staggerChildren;\n    };\n    Array.from(this.children).forEach(function (childControls, i) {\n      var animation = childControls.animateVariant(variantLabel, {\n        priority: priority,\n        delay: delayChildren + generateStaggerDuration(i)\n      });\n      animations.push(animation);\n    });\n    return Promise.all(animations);\n  };\n\n  ValueAnimationControls.prototype.onStart = function () {\n    var onAnimationStart = this.props.onAnimationStart;\n    onAnimationStart && onAnimationStart();\n  };\n\n  ValueAnimationControls.prototype.onComplete = function () {\n    var onAnimationComplete = this.props.onAnimationComplete;\n    onAnimationComplete && onAnimationComplete();\n  };\n\n  ValueAnimationControls.prototype.checkOverrideIsAnimating = function (priority) {\n    var numOverrides = this.overrides.length;\n\n    for (var i = priority + 1; i < numOverrides; i++) {\n      var resolvedOverride = this.resolvedOverrides[i];\n\n      if (resolvedOverride) {\n        for (var key in resolvedOverride) {\n          this.isAnimating.add(key);\n        }\n      }\n    }\n  };\n\n  ValueAnimationControls.prototype.resetIsAnimating = function (priority) {\n    if (priority === void 0) {\n      priority = 0;\n    }\n\n    this.isAnimating.clear(); // If this isn't the highest priority gesture, block the animation\n    // of anything that's currently being animated\n\n    if (priority < this.getHighestPriority()) {\n      this.checkOverrideIsAnimating(priority);\n    }\n\n    if (this.children) {\n      this.children.forEach(function (child) {\n        return child.resetIsAnimating(priority);\n      });\n    }\n  };\n\n  ValueAnimationControls.prototype.stop = function () {\n    this.values.forEach(function (value) {\n      return value.stop();\n    });\n  };\n  /**\r\n   * Add the controls of a child component.\r\n   * @param controls -\r\n   */\n\n\n  ValueAnimationControls.prototype.addChild = function (controls) {\n    if (!this.children) {\n      this.children = new Set();\n    }\n\n    this.children.add(controls); // We set child overrides when `setOverride` is called, but also have to do it here\n    // as the first time `setOverride` is called all the children might not have been added yet.\n\n    this.overrides.forEach(function (override, i) {\n      override && controls.setOverride(override, i);\n    });\n  };\n\n  ValueAnimationControls.prototype.removeChild = function (controls) {\n    if (!this.children) {\n      return;\n    }\n\n    this.children.delete(controls);\n  };\n\n  ValueAnimationControls.prototype.resetChildren = function () {\n    if (this.children) this.children.clear();\n  };\n\n  return ValueAnimationControls;\n}();\n/**\r\n * Use callback either only on the initial render or on all renders. In concurrent mode\r\n * the \"initial\" render might run multiple times\r\n *\r\n * @param callback - Callback to run\r\n * @param isInitialOnly - Set to `true` to only run on initial render, or `false` for all renders. Defaults to `false`.\r\n *\r\n * @public\r\n */\n\n\nfunction useInitialOrEveryRender(callback, isInitialOnly) {\n  if (isInitialOnly === void 0) {\n    isInitialOnly = false;\n  }\n\n  var isInitialRender = useRef(true);\n\n  if (!isInitialOnly || isInitialOnly && isInitialRender.current) {\n    callback();\n  }\n\n  isInitialRender.current = false;\n}\n/**\r\n * Control animations on one or more components.\r\n *\r\n * @public\r\n */\n\n\nvar AnimationControls =\n/** @class */\nfunction () {\n  function AnimationControls() {\n    /**\r\n     * Track whether the host component has mounted.\r\n     *\r\n     * @internal\r\n     */\n    this.hasMounted = false;\n    /**\r\n     * Pending animations that are started before a component is mounted.\r\n     *\r\n     * @internal\r\n     */\n\n    this.pendingAnimations = [];\n    /**\r\n     * A collection of linked component animation controls.\r\n     *\r\n     * @internal\r\n     */\n\n    this.componentControls = new Set();\n  }\n  /**\r\n   * Set variants on this and all child components.\r\n   *\r\n   * @param variants - The variants to set\r\n   *\r\n   * @internal\r\n   */\n\n\n  AnimationControls.prototype.setVariants = function (variants) {\n    this.variants = variants;\n    this.componentControls.forEach(function (controls) {\n      return controls.setVariants(variants);\n    });\n  };\n  /**\r\n   * Set a default transition on this and all child components\r\n   *\r\n   * @param transition - The default transition to set\r\n   *\r\n   * @internal\r\n   */\n\n\n  AnimationControls.prototype.setDefaultTransition = function (transition) {\n    this.defaultTransition = transition;\n    this.componentControls.forEach(function (controls) {\n      return controls.setDefaultTransition(transition);\n    });\n  };\n  /**\r\n   * Subscribes a component's animation controls to this.\r\n   *\r\n   * @param controls - The controls to subscribe\r\n   * @returns An unsubscribe function.\r\n   *\r\n   * @internal\r\n   */\n\n\n  AnimationControls.prototype.subscribe = function (controls) {\n    var _this = this;\n\n    this.componentControls.add(controls);\n    if (this.variants) controls.setVariants(this.variants);\n    if (this.defaultTransition) controls.setDefaultTransition(this.defaultTransition);\n    return function () {\n      return _this.componentControls.delete(controls);\n    };\n  };\n  /**\r\n   * Starts an animation on all linked components.\r\n   *\r\n   * @remarks\r\n   *\r\n   * ```jsx\r\n   * controls.start(\"variantLabel\")\r\n   * controls.start({\r\n   *   x: 0,\r\n   *   transition: { duration: 1 }\r\n   * })\r\n   * ```\r\n   *\r\n   * @param definition - Properties or variant label to animate to\r\n   * @param transition - Optional `transtion` to apply to a variant\r\n   * @returns - A `Promise` that resolves when all animations have completed.\r\n   *\r\n   * @public\r\n   */\n\n\n  AnimationControls.prototype.start = function (definition, transitionOverride) {\n    var _this = this;\n\n    if (this.hasMounted) {\n      var animations_1 = [];\n      this.componentControls.forEach(function (controls) {\n        var animation = controls.start(definition, {\n          transitionOverride: transitionOverride\n        });\n        animations_1.push(animation);\n      });\n      return Promise.all(animations_1);\n    } else {\n      return new Promise(function (resolve) {\n        _this.pendingAnimations.push({\n          animation: [definition, transitionOverride],\n          resolve: resolve\n        });\n      });\n    }\n  };\n  /**\r\n   * Instantly set to a set of properties or a variant.\r\n   *\r\n   * ```jsx\r\n   * // With properties\r\n   * controls.set({ opacity: 0 })\r\n   *\r\n   * // With variants\r\n   * controls.set(\"hidden\")\r\n   * ```\r\n   *\r\n   * @internalremarks\r\n   * We could perform a similar trick to `.start` where this can be called before mount\r\n   * and we maintain a list of of pending actions that get applied on mount. But the\r\n   * expectation of `set` is that it happens synchronously and this would be difficult\r\n   * to do before any children have even attached themselves. It's also poor practise\r\n   * and we should discourage render-synchronous `.start` calls rather than lean into this.\r\n   *\r\n   * @public\r\n   */\n\n\n  AnimationControls.prototype.set = function (definition) {\n    invariant(this.hasMounted, \"controls.set() should only be called after a component has mounted. Consider calling within a useEffect hook.\");\n    return this.componentControls.forEach(function (controls) {\n      return controls.apply(definition);\n    });\n  };\n  /**\r\n   * Stops animations on all linked components.\r\n   *\r\n   * ```jsx\r\n   * controls.stop()\r\n   * ```\r\n   *\r\n   * @public\r\n   */\n\n\n  AnimationControls.prototype.stop = function () {\n    this.componentControls.forEach(function (controls) {\n      return controls.stop();\n    });\n  };\n  /**\r\n   * Initialises the animation controls.\r\n   *\r\n   * @internal\r\n   */\n\n\n  AnimationControls.prototype.mount = function () {\n    var _this = this;\n\n    this.hasMounted = true;\n    this.pendingAnimations.forEach(function (_a) {\n      var animation = _a.animation,\n          resolve = _a.resolve;\n      return _this.start.apply(_this, animation).then(resolve);\n    });\n  };\n  /**\r\n   * Stops all child animations when the host component unmounts.\r\n   *\r\n   * @internal\r\n   */\n\n\n  AnimationControls.prototype.unmount = function () {\n    this.hasMounted = false;\n    this.stop();\n  };\n\n  return AnimationControls;\n}();\n/**\r\n * @internal\r\n */\n\n\nvar animationControls = function animationControls() {\n  return new AnimationControls();\n};\n\nvar PresenceContext = /*#__PURE__*/createContext(null);\n/**\r\n * @internal\r\n */\n\nvar MotionContext = /*#__PURE__*/createContext({\n  static: false\n});\n\nvar isVariantLabel = function isVariantLabel(v) {\n  return typeof v === \"string\" || Array.isArray(v);\n};\n\nvar isAnimationControls = function isAnimationControls(v) {\n  return v instanceof AnimationControls;\n};\n/**\r\n * Set up the context for children motion components.\r\n *\r\n * We also use this opportunity to apply `initial` values\r\n */\n\n\nvar useMotionContext = function useMotionContext(parentContext, controls, values, isStatic, _a) {\n  if (isStatic === void 0) {\n    isStatic = false;\n  }\n\n  var initial = _a.initial,\n      animate = _a.animate,\n      variants = _a.variants,\n      whileTap = _a.whileTap,\n      whileHover = _a.whileHover;\n\n  var _b;\n\n  var presenceContext = useContext(PresenceContext); // Override initial with that from a parent context, if defined\n\n  if (((_b = presenceContext) === null || _b === void 0 ? void 0 : _b.initial) !== undefined) {\n    initial = presenceContext.initial;\n  }\n\n  var initialState;\n\n  if (initial === false && !isAnimationControls(animate)) {\n    initialState = animate;\n  } else if (typeof initial !== \"boolean\") {\n    initialState = initial;\n  } // Track mounted status so children can detect whether they were present during their\n  // parent's first render\n\n\n  var hasMounted = useRef(false); // We propagate this component's ValueAnimationControls *if* we're being provided variants,\n  // if we're being used to control variants, or if we're being passed animation controls.\n  // Otherwise this component should be \"invisible\" to variant propagation. This is a slight concession\n  // to Framer X where every `Frame` is a `motion` component and it might be if we change that in the future\n  // that this restriction is removed.\n\n  var shouldPropagateControls = variants || isVariantLabel(animate) || isVariantLabel(whileTap) || isVariantLabel(whileHover) || isAnimationControls(animate); // If this component's `initial` prop is a variant label, propagate it. Otherwise pass the parent's.\n\n  var targetInitial = isVariantLabel(initialState) ? initialState : parentContext.initial; // If this is a variant tree we need to propagate the `animate` prop in case new children are added after\n  // the tree initially animates.\n\n  var targetAnimate = isVariantLabel(animate) ? animate : parentContext.animate; // Only allow `initial` to trigger context re-renders if this is a `static` component (ie we're on the Framer canvas)\n  // or in another non-animation/interaction environment.\n\n  var initialDependency = isStatic ? targetInitial : null; // Only allow `animate` to trigger context re-renders if it's a variant label. If this is an array of\n  // variant labels there's probably an optimisation to deep-compare but it might be an over-optimisation.\n  // We want to do this as we rely on React's component rendering order each render cycle to determine\n  // the new order of any child components for the `staggerChildren` functionality.\n\n  var animateDependency = shouldPropagateControls && isVariantLabel(targetAnimate) ? targetAnimate : null; // The context to provide to the child. We `useMemo` because although `controls` and `initial` are\n  // unlikely to change, by making the context an object it'll be considered a new value every render.\n  // So all child motion components will re-render as a result.\n\n  var context = useMemo(function () {\n    return {\n      controls: shouldPropagateControls ? controls : parentContext.controls,\n      initial: targetInitial,\n      animate: targetAnimate,\n      values: values,\n      hasMounted: hasMounted,\n      isReducedMotion: parentContext.isReducedMotion\n    };\n  }, [initialDependency, animateDependency, parentContext.isReducedMotion]); // Update the `static` property every render. This is unlikely to change but also essentially free.\n\n  context.static = isStatic; // Set initial state. If this is a static component (ie in Framer canvas), respond to updates\n  // in `initial`.\n\n  useInitialOrEveryRender(function () {\n    var initialToApply = initialState || parentContext.initial;\n    initialToApply && controls.apply(initialToApply);\n  }, !isStatic);\n  useEffect(function () {\n    hasMounted.current = true;\n  }, []);\n  return context;\n};\n/**\r\n * Creates an imperative set of controls to trigger animations.\r\n *\r\n * This allows a consolidated, uniform API for animations, to be triggered by other APIs like the `animate` prop, or the gesture handlers.\r\n *\r\n * @param values\r\n * @param props\r\n * @param ref\r\n * @param subscribeToParentControls\r\n *\r\n * @internal\r\n */\n\n\nfunction useValueAnimationControls(config, props, subscribeToParentControls) {\n  var variants = props.variants,\n      transition = props.transition;\n  var parentControls = useContext(MotionContext).controls;\n  var presenceContext = useContext(PresenceContext);\n  var controls = useConstant(function () {\n    return new ValueAnimationControls(config);\n  }); // Reset and resubscribe children every render to ensure stagger order is correct\n\n  if (!presenceContext || presenceContext.isPresent) {\n    controls.resetChildren();\n    controls.setProps(props);\n    controls.setVariants(variants);\n    controls.setDefaultTransition(transition);\n  } // We have to subscribe to the parent controls within a useEffect rather than during render,\n  // as\n\n\n  useEffect(function () {\n    if (subscribeToParentControls && parentControls) {\n      parentControls.addChild(controls);\n    }\n  });\n  useEffect(function () {\n    return function () {\n      // Remove reference to onAnimationComplete from controls. All the MotionValues\n      // are unsubscribed from this component separately. We let animations run out\n      // as they might be animating other components.\n      var onAnimationComplete = props.onAnimationComplete,\n          unmountProps = __rest(props, [\"onAnimationComplete\"]);\n\n      controls.setProps(unmountProps);\n      parentControls && parentControls.removeChild(controls);\n    };\n  }, []);\n  return controls;\n}\n\nvar checkShouldInheritVariant = function checkShouldInheritVariant(_a) {\n  var animate = _a.animate,\n      variants = _a.variants,\n      _b = _a.inherit,\n      inherit = _b === void 0 ? true : _b;\n  return inherit && !!variants && (!animate || animate instanceof AnimationControls);\n};\n/**\r\n * Uses the ref that is passed in, or creates a new one\r\n * @param external - External ref\r\n * @internal\r\n */\n\n\nfunction useExternalRef(externalRef) {\n  // We're conditionally calling `useRef` here which is sort of naughty as hooks\n  // shouldn't be called conditionally. However, Framer Motion will break if this\n  // condition changes anyway. It might be possible to use an invariant here to\n  // make it explicit, but I expect changing `ref` is not normal behaviour.\n  var ref = !externalRef || typeof externalRef === \"function\" ? useRef(null) : externalRef; // Handle `ref` functions. Again, calling the hook conditionally is kind of naughty\n  // but `ref` types changing between renders would break Motion anyway. If we receive\n  // bug reports about this, we should track the provided ref and throw an invariant\n  // rather than move the conditional to inside the useEffect as this will be fired\n  // for every Frame component within Framer.\n\n  if (externalRef && typeof externalRef === \"function\") {\n    useEffect(function () {\n      externalRef(ref.current);\n      return function () {\n        return externalRef(null);\n      };\n    }, []);\n  }\n\n  return ref;\n}\n/**\r\n * @internal\r\n */\n\n\nvar createMotionComponent = function createMotionComponent(_a) {\n  var getValueControlsConfig = _a.getValueControlsConfig,\n      loadFunctionalityComponents = _a.loadFunctionalityComponents,\n      renderComponent = _a.renderComponent;\n\n  function MotionComponent(props, externalRef) {\n    var ref = useExternalRef(externalRef);\n    var parentContext = useContext(MotionContext);\n    var isStatic = parentContext.static || props.static || false;\n    var values = useMotionValues(props);\n    var style = useMotionStyles(values, props.style, isStatic, props.transformValues);\n    var shouldInheritVariant = checkShouldInheritVariant(props);\n    var controlsConfig = useConstant(function () {\n      return getValueControlsConfig(ref, values);\n    });\n    var controls = useValueAnimationControls(controlsConfig, props, shouldInheritVariant);\n    var context = useMotionContext(parentContext, controls, values, isStatic, props);\n    var functionality = isStatic ? null : loadFunctionalityComponents(ref, values, props, parentContext, controls, shouldInheritVariant);\n    var renderedComponent = renderComponent(ref, style, values, props, isStatic);\n    return /*#__PURE__*/createElement(Fragment, null, /*#__PURE__*/createElement(MotionContext.Provider, {\n      value: context\n    }, renderedComponent), /*#__PURE__*/createElement(Fragment, null, /*#__PURE__*/createElement(Mount, {\n      innerRef: ref,\n      values: values,\n      isStatic: isStatic\n    }), functionality));\n  }\n\n  return /*#__PURE__*/forwardRef(MotionComponent);\n};\n/**\r\n * @internal\r\n */\n\n\nvar htmlElements = [\"a\", \"abbr\", \"address\", \"area\", \"article\", \"aside\", \"audio\", \"b\", \"base\", \"bdi\", \"bdo\", \"big\", \"blockquote\", \"body\", \"br\", \"button\", \"canvas\", \"caption\", \"cite\", \"code\", \"col\", \"colgroup\", \"data\", \"datalist\", \"dd\", \"del\", \"details\", \"dfn\", \"dialog\", \"div\", \"dl\", \"dt\", \"em\", \"embed\", \"fieldset\", \"figcaption\", \"figure\", \"footer\", \"form\", \"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\", \"head\", \"header\", \"hgroup\", \"hr\", \"html\", \"i\", \"iframe\", \"img\", \"input\", \"ins\", \"kbd\", \"keygen\", \"label\", \"legend\", \"li\", \"link\", \"main\", \"map\", \"mark\", \"menu\", \"menuitem\", \"meta\", \"meter\", \"nav\", \"noscript\", \"object\", \"ol\", \"optgroup\", \"option\", \"output\", \"p\", \"param\", \"picture\", \"pre\", \"progress\", \"q\", \"rp\", \"rt\", \"ruby\", \"s\", \"samp\", \"script\", \"section\", \"select\", \"small\", \"source\", \"span\", \"strong\", \"style\", \"sub\", \"summary\", \"sup\", \"table\", \"tbody\", \"td\", \"textarea\", \"tfoot\", \"th\", \"thead\", \"time\", \"title\", \"tr\", \"track\", \"u\", \"ul\", \"var\", \"video\", \"wbr\", \"webview\"];\n/**\r\n * @internal\r\n */\n\nvar svgElements = [\"animate\", \"circle\", \"clipPath\", \"defs\", \"desc\", \"ellipse\", \"feBlend\", \"feColorMatrix\", \"feComponentTransfer\", \"feComposite\", \"feConvolveMatrix\", \"feDiffuseLighting\", \"feDisplacementMap\", \"feDistantLight\", \"feDropShadow\", \"feFlood\", \"feFuncA\", \"feFuncB\", \"feFuncG\", \"feFuncR\", \"feGaussianBlur\", \"feImage\", \"feMerge\", \"feMergeNode\", \"feMorphology\", \"feOffset\", \"fePointLight\", \"feSpecularLighting\", \"feSpotLight\", \"feTile\", \"feTurbulence\", \"filter\", \"foreignObject\", \"g\", \"image\", \"line\", \"linearGradient\", \"marker\", \"mask\", \"metadata\", \"path\", \"pattern\", \"polygon\", \"polyline\", \"radialGradient\", \"rect\", \"stop\", \"svg\", \"switch\", \"symbol\", \"text\", \"textPath\", \"tspan\", \"use\", \"view\"];\n/**\r\n * @internal\r\n */\n\nvar MotionPluginContext = /*#__PURE__*/createContext({\n  transformPagePoint: function transformPagePoint(p) {\n    return p;\n  }\n});\n/**\r\n * @remarks For now I think this should remain a private API for our own use\r\n * until we can figure out a nicer way of allowing people to add these\r\n *\r\n * @internal\r\n */\n\nfunction MotionPlugins(_a) {\n  var children = _a.children,\n      props = __rest(_a, [\"children\"]);\n\n  var pluginContext = useContext(MotionPluginContext);\n  var value = useRef(__assign({}, pluginContext)).current; // Mutative to prevent triggering rerenders in all listening\n  // components every time this component renders\n\n  for (var key in props) {\n    value[key] = props[key];\n  }\n\n  return /*#__PURE__*/createElement(MotionPluginContext.Provider, {\n    value: value\n  }, children);\n}\n\nfunction useUnmountEffect(callback) {\n  return useEffect(function () {\n    return function () {\n      return callback();\n    };\n  }, []);\n}\n\nfunction addDomEvent(target, eventName, handler, options) {\n  if (!handler) return;\n  target.addEventListener(eventName, handler, options);\n  return function () {\n    return target.removeEventListener(eventName, handler, options);\n  };\n}\n/**\r\n * Attaches an event listener directly to the provided DOM element.\r\n *\r\n * Bypassing React's event system can be desirable, for instance when attaching non-passive\r\n * event handlers.\r\n *\r\n * ```jsx\r\n * const ref = useRef(null)\r\n *\r\n * useDomEvent(ref, 'wheel', onWheel, { passive: false })\r\n *\r\n * return <div ref={ref} />\r\n * ```\r\n *\r\n * @param ref - React.RefObject that's been provided to the element you want to bind the listener to.\r\n * @param eventName - Name of the event you want listen for.\r\n * @param handler - Function to fire when receiving the event.\r\n * @param options - Options to pass to `Event.addEventListener`.\r\n *\r\n * @public\r\n */\n\n\nfunction useDomEvent(ref, eventName, handler, options) {\n  useEffect(function () {\n    var element = ref.current;\n\n    if (handler && element) {\n      return addDomEvent(element, eventName, handler, options);\n    }\n  }, [ref, eventName, handler, options]);\n}\n\nfunction isMouseEvent(event) {\n  // PointerEvent inherits from MouseEvent so we can't use a straight instanceof check.\n  if (typeof PointerEvent !== \"undefined\" && event instanceof PointerEvent) {\n    return !!(event.pointerType === \"mouse\");\n  }\n\n  return event instanceof MouseEvent;\n}\n\nfunction isTouchEvent(event) {\n  var hasTouches = !!event.touches;\n  return hasTouches;\n}\n/**\r\n * Filters out events not attached to the primary pointer (currently left mouse button)\r\n * @param eventHandler\r\n */\n\n\nfunction filterPrimaryPointer(eventHandler) {\n  if (!eventHandler) return undefined;\n  return function (event) {\n    var isMouseEvent = event instanceof MouseEvent;\n    var isPrimaryPointer = !isMouseEvent || isMouseEvent && event.button === 0;\n\n    if (isPrimaryPointer) {\n      eventHandler(event);\n    }\n  };\n}\n\nvar defaultPagePoint = {\n  pageX: 0,\n  pageY: 0\n};\n\nfunction pointFromTouch(e) {\n  var primaryTouch = e.touches[0] || e.changedTouches[0];\n\n  var _a = primaryTouch || defaultPagePoint,\n      pageX = _a.pageX,\n      pageY = _a.pageY;\n\n  return {\n    x: pageX,\n    y: pageY\n  };\n}\n\nfunction pointFromMouse(_a) {\n  var _b = _a.pageX,\n      pageX = _b === void 0 ? 0 : _b,\n      _c = _a.pageY,\n      pageY = _c === void 0 ? 0 : _c;\n  return {\n    x: pageX,\n    y: pageY\n  };\n}\n\nfunction extractEventInfo(event) {\n  return {\n    point: isTouchEvent(event) ? pointFromTouch(event) : pointFromMouse(event)\n  };\n}\n\nvar wrapHandler = function wrapHandler(handler, shouldFilterPrimaryPointer) {\n  if (shouldFilterPrimaryPointer === void 0) {\n    shouldFilterPrimaryPointer = false;\n  }\n\n  if (!handler) return;\n\n  var listener = function listener(event) {\n    return handler(event, extractEventInfo(event));\n  };\n\n  return shouldFilterPrimaryPointer ? filterPrimaryPointer(listener) : listener;\n};\n\nvar isBrowser = typeof window !== \"undefined\"; // We check for event support via functions in case they've been mocked by a testing suite.\n\nvar supportsPointerEvents = function supportsPointerEvents() {\n  return isBrowser && window.onpointerdown === null;\n};\n\nvar supportsTouchEvents = function supportsTouchEvents() {\n  return isBrowser && window.ontouchstart === null;\n};\n\nvar supportsMouseEvents = function supportsMouseEvents() {\n  return isBrowser && window.onmousedown === null;\n};\n\nvar mouseEventNames = {\n  pointerdown: \"mousedown\",\n  pointermove: \"mousemove\",\n  pointerup: \"mouseup\",\n  pointercancel: \"mousecancel\",\n  pointerover: \"mouseover\",\n  pointerout: \"mouseout\",\n  pointerenter: \"mouseenter\",\n  pointerleave: \"mouseleave\"\n};\nvar touchEventNames = {\n  pointerdown: \"touchstart\",\n  pointermove: \"touchmove\",\n  pointerup: \"touchend\",\n  pointercancel: \"touchcancel\"\n};\n\nfunction getPointerEventName(name) {\n  if (supportsPointerEvents()) {\n    return name;\n  } else if (supportsTouchEvents()) {\n    return touchEventNames[name];\n  } else if (supportsMouseEvents()) {\n    return mouseEventNames[name];\n  }\n\n  return name;\n}\n\nfunction addPointerEvent(target, eventName, handler, options) {\n  return addDomEvent(target, getPointerEventName(eventName), wrapHandler(handler, eventName === \"pointerdown\"), options);\n}\n\nfunction usePointerEvent(ref, eventName, handler, options) {\n  return useDomEvent(ref, getPointerEventName(eventName), wrapHandler(handler, eventName === \"pointerdown\"), options);\n}\n/** @public */\n\n\nvar Point;\n\n(function (Point) {\n  /** @beta */\n  Point.subtract = function (a, b) {\n    return {\n      x: a.x - b.x,\n      y: a.y - b.y\n    };\n  };\n  /** @beta */\n\n\n  Point.relativeTo = function (idOrElem) {\n    var elem;\n\n    var getElem = function getElem() {\n      // Caching element here could be leaky because of React lifecycle\n      if (elem !== undefined) return elem;\n\n      if (typeof idOrElem === \"string\") {\n        elem = document.getElementById(idOrElem);\n      } else {\n        elem = idOrElem;\n      }\n\n      return elem;\n    };\n\n    return function (_a) {\n      var x = _a.x,\n          y = _a.y;\n      var localElem = getElem();\n      if (!localElem) return undefined;\n      var rect = localElem.getBoundingClientRect();\n      return {\n        x: x - rect.left - window.scrollX,\n        y: y - rect.top - window.scrollY\n      };\n    };\n  };\n})(Point || (Point = {}));\n\nvar isViewportScrollBlocked = false;\nvar isBrowser$1 = typeof window !== \"undefined\";\n\nif (isBrowser$1) {\n  document.addEventListener(\"touchmove\", function (event) {\n    if (isViewportScrollBlocked) {\n      event.preventDefault();\n    }\n  }, {\n    passive: false\n  });\n}\n\nvar blockViewportScroll = function blockViewportScroll() {\n  return isViewportScrollBlocked = true;\n};\n\nvar unblockViewportScroll = function unblockViewportScroll() {\n  return isViewportScrollBlocked = false;\n};\n/**\r\n * @internal\r\n */\n\n\nvar PanSession =\n/** @class */\nfunction () {\n  function PanSession(event, handlers, _a) {\n    var _this = this;\n\n    var transformPagePoint = (_a === void 0 ? {} : _a).transformPagePoint;\n    /**\r\n     * @internal\r\n     */\n\n    this.startEvent = null;\n    /**\r\n     * @internal\r\n     */\n\n    this.lastMoveEvent = null;\n    /**\r\n     * @internal\r\n     */\n\n    this.lastMoveEventInfo = null;\n    /**\r\n     * @internal\r\n     */\n\n    this.handlers = {};\n\n    this.updatePoint = function () {\n      if (!(_this.lastMoveEvent && _this.lastMoveEventInfo)) return;\n      var info = getPanInfo(_this.lastMoveEventInfo, _this.history);\n      var isPanStarted = _this.startEvent !== null; // Only start panning if the offset is larger than 3 pixels. If we make it\n      // any larger than this we'll want to reset the pointer history\n      // on the first update to avoid visual snapping to the cursoe.\n\n      var isDistancePastThreshold = distance(info.offset, {\n        x: 0,\n        y: 0\n      }) >= 3;\n      if (!isPanStarted && !isDistancePastThreshold) return;\n      var point = info.point;\n      var timestamp = getFrameData().timestamp;\n\n      _this.history.push(__assign(__assign({}, point), {\n        timestamp: timestamp\n      }));\n\n      var _a = _this.handlers,\n          onStart = _a.onStart,\n          onMove = _a.onMove;\n\n      if (!isPanStarted) {\n        onStart && onStart(_this.lastMoveEvent, info);\n        _this.startEvent = _this.lastMoveEvent;\n      }\n\n      onMove && onMove(_this.lastMoveEvent, info);\n    }; // If we have more than one touch, don't start detecting this gesture\n\n\n    if (isTouchEvent(event) && event.touches.length > 1) return;\n    this.handlers = handlers;\n    this.transformPagePoint = transformPagePoint;\n    var info = extractEventInfo(event);\n    var initialInfo = transformPoint(info, this.transformPagePoint);\n    var point = initialInfo.point;\n    var timestamp = getFrameData().timestamp;\n    this.history = [__assign(__assign({}, point), {\n      timestamp: timestamp\n    })];\n    var onSessionStart = handlers.onSessionStart;\n    onSessionStart && onSessionStart(event, getPanInfo(initialInfo, this.history));\n    var removeOnPointerMove = addPointerEvent(window, \"pointermove\", function (event, info) {\n      return _this.handlePointerMove(event, info);\n    });\n    var removeOnPointerUp = addPointerEvent(window, \"pointerup\", function (event, info) {\n      return _this.handlePointerUp(event, info);\n    });\n\n    this.removeListeners = function () {\n      removeOnPointerMove && removeOnPointerMove();\n      removeOnPointerUp && removeOnPointerUp();\n    };\n  }\n\n  PanSession.prototype.handlePointerMove = function (event, info) {\n    this.lastMoveEvent = event;\n    this.lastMoveEventInfo = transformPoint(info, this.transformPagePoint); // Because Safari doesn't trigger mouseup events when it's above a `<select>`\n\n    if (isMouseEvent(event) && event.buttons === 0) {\n      this.handlePointerUp(event, info);\n      return;\n    } // Throttle mouse move event to once per frame\n\n\n    sync.update(this.updatePoint, true);\n  };\n\n  PanSession.prototype.handlePointerUp = function (event, info) {\n    this.end();\n    var onEnd = this.handlers.onEnd;\n    if (!onEnd) return;\n    var panInfo = getPanInfo(transformPoint(info, this.transformPagePoint), this.history);\n    onEnd && onEnd(event, panInfo);\n  };\n\n  PanSession.prototype.updateHandlers = function (handlers) {\n    this.handlers = handlers;\n  };\n\n  PanSession.prototype.end = function () {\n    this.removeListeners && this.removeListeners();\n    cancelSync.update(this.updatePoint);\n    unblockViewportScroll();\n  };\n\n  return PanSession;\n}();\n\nfunction transformPoint(info, transformPagePoint) {\n  return transformPagePoint ? {\n    point: transformPagePoint(info.point)\n  } : info;\n}\n\nfunction getPanInfo(_a, history) {\n  var point = _a.point;\n  return {\n    point: point,\n    delta: Point.subtract(point, lastDevicePoint(history)),\n    offset: Point.subtract(point, startDevicePoint(history)),\n    velocity: getVelocity$1(history, 0.1)\n  };\n}\n\nfunction startDevicePoint(history) {\n  return history[0];\n}\n\nfunction lastDevicePoint(history) {\n  return history[history.length - 1];\n}\n\nfunction getVelocity$1(history, timeDelta) {\n  if (history.length < 2) {\n    return {\n      x: 0,\n      y: 0\n    };\n  }\n\n  var i = history.length - 1;\n  var timestampedPoint = null;\n  var lastPoint = lastDevicePoint(history);\n\n  while (i >= 0) {\n    timestampedPoint = history[i];\n\n    if (lastPoint.timestamp - timestampedPoint.timestamp > secondsToMilliseconds(timeDelta)) {\n      break;\n    }\n\n    i--;\n  }\n\n  if (!timestampedPoint) {\n    return {\n      x: 0,\n      y: 0\n    };\n  }\n\n  var time = (lastPoint.timestamp - timestampedPoint.timestamp) / 1000;\n\n  if (time === 0) {\n    return {\n      x: 0,\n      y: 0\n    };\n  }\n\n  var currentVelocity = {\n    x: (lastPoint.x - timestampedPoint.x) / time,\n    y: (lastPoint.y - timestampedPoint.y) / time\n  };\n\n  if (currentVelocity.x === Infinity) {\n    currentVelocity.x = 0;\n  }\n\n  if (currentVelocity.y === Infinity) {\n    currentVelocity.y = 0;\n  }\n\n  return currentVelocity;\n}\n/**\r\n *\r\n * @param handlers -\r\n * @param ref -\r\n *\r\n * @internalremarks\r\n * Currently this sets new pan gesture functions every render. The memo route has been explored\r\n * in the past but ultimately we're still creating new functions every render. An optimisation\r\n * to explore is creating the pan gestures and loading them into a `ref`.\r\n *\r\n * @internal\r\n */\n\n\nfunction usePanGesture(_a, ref) {\n  var onPan = _a.onPan,\n      onPanStart = _a.onPanStart,\n      onPanEnd = _a.onPanEnd,\n      onPanSessionStart = _a.onPanSessionStart;\n  var hasPanEvents = onPan || onPanStart || onPanEnd || onPanSessionStart;\n  var panSession = useRef(null);\n  var transformPagePoint = useContext(MotionPluginContext).transformPagePoint;\n  var handlers = {\n    onSessionStart: onPanSessionStart,\n    onStart: onPanStart,\n    onMove: onPan,\n    onEnd: function onEnd(event, info) {\n      panSession.current = null;\n      onPanEnd && onPanEnd(event, info);\n    }\n  };\n  useEffect(function () {\n    if (panSession.current !== null) {\n      panSession.current.updateHandlers(handlers);\n    }\n  });\n\n  function onPointerDown(event) {\n    panSession.current = new PanSession(event, handlers, {\n      transformPagePoint: transformPagePoint\n    });\n  }\n\n  usePointerEvent(ref, \"pointerdown\", hasPanEvents && onPointerDown);\n  useUnmountEffect(function () {\n    return panSession.current && panSession.current.end();\n  });\n}\n/**\r\n * Recursively traverse up the tree to check whether the provided child node\r\n * is the parent or a descendant of it.\r\n *\r\n * @param parent - Element to find\r\n * @param child - Element to test against parent\r\n */\n\n\nvar isNodeOrChild = function isNodeOrChild(parent, child) {\n  if (!child) {\n    return false;\n  } else if (parent === child) {\n    return true;\n  } else {\n    return isNodeOrChild(parent, child.parentElement);\n  }\n};\n\nvar order = [\"whileHover\", \"whileTap\", \"whileDrag\"];\n\nvar getGesturePriority = function getGesturePriority(gesture) {\n  return order.indexOf(gesture) + 1;\n};\n\nfunction createLock(name) {\n  var lock = null;\n  return function () {\n    var openLock = function openLock() {\n      lock = null;\n    };\n\n    if (lock === null) {\n      lock = name;\n      return openLock;\n    }\n\n    return false;\n  };\n}\n\nvar globalHorizontalLock = createLock(\"dragHorizontal\");\nvar globalVerticalLock = createLock(\"dragVertical\");\n\nfunction getGlobalLock(drag) {\n  var lock = false;\n\n  if (drag === \"y\") {\n    lock = globalVerticalLock();\n  } else if (drag === \"x\") {\n    lock = globalHorizontalLock();\n  } else {\n    var openHorizontal_1 = globalHorizontalLock();\n    var openVertical_1 = globalVerticalLock();\n\n    if (openHorizontal_1 && openVertical_1) {\n      lock = function lock() {\n        openHorizontal_1();\n        openVertical_1();\n      };\n    } else {\n      // Release the locks because we don't use them\n      if (openHorizontal_1) openHorizontal_1();\n      if (openVertical_1) openVertical_1();\n    }\n  }\n\n  return lock;\n}\n\nvar tapGesturePriority = getGesturePriority(\"whileTap\");\n/**\r\n * @param handlers -\r\n * @internal\r\n */\n\nfunction useTapGesture(_a, ref) {\n  var onTap = _a.onTap,\n      onTapStart = _a.onTapStart,\n      onTapCancel = _a.onTapCancel,\n      whileTap = _a.whileTap,\n      controls = _a.controls;\n  var hasTapListeners = onTap || onTapStart || onTapCancel || whileTap;\n  var isTapping = useRef(false);\n  var cancelPointerEventListener = useRef(null);\n\n  function removePointerUp() {\n    cancelPointerEventListener.current && cancelPointerEventListener.current();\n    cancelPointerEventListener.current = null;\n  }\n\n  if (whileTap && controls) {\n    controls.setOverride(whileTap, tapGesturePriority);\n  } // We load this event handler into a ref so we can later refer to\n  // onPointerUp.current which will always have reference to the latest props\n\n\n  var onPointerUp = useRef(null);\n\n  onPointerUp.current = function (event, info) {\n    var element = ref.current;\n    removePointerUp();\n    if (!isTapping.current || !element) return;\n    isTapping.current = false;\n\n    if (controls && whileTap) {\n      controls.clearOverride(tapGesturePriority);\n    } // Check the gesture lock - if we get it, it means no drag gesture is active\n    // and we can safely fire the tap gesture.\n\n\n    var openGestureLock = getGlobalLock(true);\n    if (!openGestureLock) return;\n    openGestureLock();\n\n    if (!isNodeOrChild(element, event.target)) {\n      onTapCancel && onTapCancel(event, info);\n    } else {\n      onTap && onTap(event, info);\n    }\n  };\n\n  function onPointerDown(event, info) {\n    removePointerUp();\n    cancelPointerEventListener.current = addPointerEvent(window, \"pointerup\", function (event, info) {\n      return onPointerUp.current(event, info);\n    });\n    var element = ref.current;\n    if (!element || isTapping.current) return;\n    isTapping.current = true;\n    onTapStart && onTapStart(event, info);\n\n    if (controls && whileTap) {\n      controls.startOverride(tapGesturePriority);\n    }\n  }\n\n  usePointerEvent(ref, \"pointerdown\", hasTapListeners ? onPointerDown : undefined);\n  useUnmountEffect(removePointerUp);\n}\n\nvar hoverPriority = getGesturePriority(\"whileHover\");\n\nvar filterTouch = function filterTouch(listener) {\n  return function (event, info) {\n    if (isMouseEvent(event)) listener(event, info);\n  };\n};\n/**\r\n *\r\n * @param props\r\n * @param ref\r\n * @internal\r\n */\n\n\nfunction useHoverGesture(_a, ref) {\n  var whileHover = _a.whileHover,\n      onHoverStart = _a.onHoverStart,\n      onHoverEnd = _a.onHoverEnd,\n      controls = _a.controls;\n\n  if (whileHover && controls) {\n    controls.setOverride(whileHover, hoverPriority);\n  }\n\n  usePointerEvent(ref, \"pointerenter\", filterTouch(function (event, info) {\n    if (onHoverStart) onHoverStart(event, info);\n\n    if (whileHover && controls) {\n      controls.startOverride(hoverPriority);\n    }\n  }));\n  usePointerEvent(ref, \"pointerleave\", filterTouch(function (event, info) {\n    if (onHoverEnd) onHoverEnd(event, info);\n\n    if (whileHover && controls) {\n      controls.clearOverride(hoverPriority);\n    }\n  }));\n}\n/**\r\n * Add pan and tap gesture recognition to an element.\r\n *\r\n * @param props - Gesture event handlers\r\n * @param ref - React `ref` containing a DOM `Element`\r\n * @public\r\n */\n\n\nfunction useGestures(props, ref) {\n  usePanGesture(props, ref);\n  useTapGesture(props, ref);\n  useHoverGesture(props, ref);\n}\n\nvar makeRenderlessComponent = function makeRenderlessComponent(hook) {\n  return function (props) {\n    hook(props);\n    return null;\n  };\n};\n\nvar gestureProps = [\"onPan\", \"onPanStart\", \"onPanEnd\", \"onPanSessionStart\", \"onTap\", \"onTapStart\", \"onTapCancel\", \"whileTap\", \"whileHover\", \"onHoverStart\", \"onHoverEnd\"];\nvar Gestures = {\n  key: \"gestures\",\n  shouldRender: function shouldRender(props) {\n    return gestureProps.some(function (key) {\n      return props.hasOwnProperty(key);\n    });\n  },\n  Component: makeRenderlessComponent(function (_a) {\n    var innerRef = _a.innerRef,\n        props = __rest(_a, [\"innerRef\"]);\n\n    useGestures(props, innerRef);\n  })\n};\n\nvar isRefObject = function isRefObject(ref) {\n  return _typeof(ref) === \"object\" && ref.hasOwnProperty(\"current\");\n};\n\nvar noop = function noop(v) {\n  return v;\n};\n\nvar ComponentDragControls =\n/** @class */\nfunction () {\n  function ComponentDragControls(_a) {\n    var ref = _a.ref,\n        values = _a.values,\n        controls = _a.controls;\n    /**\r\n     * Track whether we're currently dragging.\r\n     *\r\n     * @internal\r\n     */\n\n    this.isDragging = false;\n    /**\r\n     * The current direction of drag, or `null` if both.\r\n     *\r\n     * @internal\r\n     */\n\n    this.currentDirection = null;\n    /**\r\n     * The permitted t/r/b/l boundaries of travel, in pixels.\r\n     *\r\n     * @internal\r\n     */\n\n    this.constraints = false;\n    /**\r\n     * A reference to the host component's latest props.\r\n     *\r\n     * @internal\r\n     */\n\n    this.props = {\n      transformPagePoint: noop\n    };\n    /**\r\n     * References to the MotionValues used for tracking the current dragged point.\r\n     *\r\n     * @internal\r\n     */\n\n    this.point = {};\n    /**\r\n     * The origin point for the current drag gesture.\r\n     *\r\n     * @internal\r\n     */\n\n    this.origin = {\n      x: motionValue(0),\n      y: motionValue(0)\n    }; // This is a reference to the global drag gesture lock, ensuring only one component\n    // can \"capture\" the drag of one or both axes.\n    // TODO: Look into moving this into pansession?\n\n    this.openGlobalLock = null;\n    /**\r\n     * @internal\r\n     */\n\n    this.panSession = null;\n    /**\r\n     * A reference to the previous constraints bounding box\r\n     *\r\n     * @internal\r\n     */\n\n    this.prevConstraintsBox = {\n      width: 0,\n      height: 0,\n      x: 0,\n      y: 0\n    };\n    this.ref = ref;\n    this.values = values;\n    this.controls = controls;\n  }\n  /**\r\n   * Start dragging the host component.\r\n   *\r\n   * @param event - The originating pointer event.\r\n   * @param options -\r\n   *\r\n   * @public\r\n   */\n\n\n  ComponentDragControls.prototype.start = function (originEvent, _a) {\n    var _this = this;\n\n    var _b = (_a === void 0 ? {} : _a).snapToCursor,\n        snapToCursor = _b === void 0 ? false : _b;\n    snapToCursor && this.snapToCursor(originEvent);\n\n    var onSessionStart = function onSessionStart() {\n      // Initiate viewport scroll blocking on touch start. This is a very aggressive approach\n      // which has come out of the difficulty in us being able to do this once a scroll gesture\n      // has initiated in mobile browsers. This means if there's a horizontally-scrolling carousel\n      // on a page we can't let a user scroll the page itself from it. Ideally what we'd do is\n      // trigger this once we've got a scroll direction determined. This approach sort-of worked\n      // but if the component was dragged too far in a single frame page scrolling would initiate.\n      blockViewportScroll(); // Stop any animations on both axis values immediately. This allows the user to throw and catch\n      // the component.\n\n      bothAxis(function (axis) {\n        var axisPoint = _this.point[axis];\n        axisPoint && axisPoint.stop();\n      });\n    };\n\n    var onStart = function onStart(event, info) {\n      // If constraints are an element, resolve them again in case they've updated.\n      if (_this.constraintsNeedResolution) {\n        var _a = _this.props,\n            dragConstraints = _a.dragConstraints,\n            transformPagePoint_1 = _a.transformPagePoint;\n        _this.constraints = calculateConstraintsFromDom(dragConstraints, _this.ref, _this.point, transformPagePoint_1);\n\n        _this.applyConstraintsToPoint();\n      } // Set point origin and stop any existing animations.\n\n\n      bothAxis(function (axis) {\n        var axisPoint = _this.point[axis];\n        if (!axisPoint) return;\n\n        _this.origin[axis].set(axisPoint.get());\n      }); // Attempt to grab the global drag gesture lock - maybe make this part of PanSession\n\n      var _b = _this.props,\n          drag = _b.drag,\n          dragPropagation = _b.dragPropagation;\n\n      if (drag && !dragPropagation) {\n        if (_this.openGlobalLock) _this.openGlobalLock();\n        _this.openGlobalLock = getGlobalLock(drag);\n        if (!_this.openGlobalLock) return;\n      }\n\n      _this.isDragging = true;\n      _this.currentDirection = null;\n      var onDragStart = _this.props.onDragStart;\n      onDragStart && onDragStart(event, convertPanToDrag(info, _this.point));\n    };\n\n    var onMove = function onMove(event, info) {\n      var _a = _this.props,\n          dragPropagation = _a.dragPropagation,\n          dragDirectionLock = _a.dragDirectionLock; // If we didn't successfully receive the gesture lock, early return.\n\n      if (!dragPropagation && !_this.openGlobalLock) return;\n      var offset = info.offset; // Attempt to detect drag direction if directionLock is true\n\n      if (dragDirectionLock && _this.currentDirection === null) {\n        _this.currentDirection = getCurrentDirection(offset); // If we've successfully set a direction, notify listener\n\n        if (_this.currentDirection !== null) {\n          var onDirectionLock = _this.props.onDirectionLock;\n          onDirectionLock && onDirectionLock(_this.currentDirection);\n        }\n\n        return;\n      }\n\n      _this.updatePoint(\"x\", offset);\n\n      _this.updatePoint(\"y\", offset);\n\n      var onDrag = _this.props.onDrag;\n      onDrag && onDrag(event, convertPanToDrag(info, _this.point));\n    };\n\n    var onEnd = function onEnd(event, info) {\n      _this.stop(event, info);\n    };\n\n    var transformPagePoint = this.props.transformPagePoint;\n    this.panSession = new PanSession(originEvent, {\n      onSessionStart: onSessionStart,\n      onStart: onStart,\n      onMove: onMove,\n      onEnd: onEnd\n    }, {\n      transformPagePoint: transformPagePoint\n    });\n  };\n\n  ComponentDragControls.prototype.cancelDrag = function () {\n    unblockViewportScroll();\n    this.isDragging = false;\n    this.panSession && this.panSession.end();\n    this.panSession = null;\n\n    if (!this.props.dragPropagation && this.openGlobalLock) {\n      this.openGlobalLock();\n      this.openGlobalLock = null;\n    }\n  };\n\n  ComponentDragControls.prototype.stop = function (event, info) {\n    var _a;\n\n    (_a = this.panSession) === null || _a === void 0 ? void 0 : _a.end();\n    this.panSession = null;\n    var isDragging = this.isDragging;\n    this.cancelDrag();\n    if (!isDragging) return;\n    var _b = this.props,\n        dragMomentum = _b.dragMomentum,\n        dragElastic = _b.dragElastic,\n        onDragEnd = _b.onDragEnd;\n\n    if (dragMomentum || dragElastic) {\n      var velocity = info.velocity;\n      this.animateDragEnd(velocity);\n    } else {\n      this.recordBoxInfo(this.constraints);\n    }\n\n    onDragEnd && onDragEnd(event, convertPanToDrag(info, this.point));\n  };\n\n  ComponentDragControls.prototype.recordBoxInfo = function (constraints) {\n    if (constraints) {\n      var right = constraints.right,\n          left = constraints.left,\n          bottom = constraints.bottom,\n          top_1 = constraints.top;\n      this.prevConstraintsBox.width = (right || 0) - (left || 0);\n      this.prevConstraintsBox.height = (bottom || 0) - (top_1 || 0);\n    }\n\n    if (this.point.x) this.prevConstraintsBox.x = this.point.x.get();\n    if (this.point.y) this.prevConstraintsBox.y = this.point.y.get();\n  };\n\n  ComponentDragControls.prototype.snapToCursor = function (event) {\n    var _this = this;\n\n    var transformPagePoint = this.props.transformPagePoint;\n    var point = extractEventInfo(event).point;\n    var boundingBox = getBoundingBox(this.ref, transformPagePoint);\n    var center = {\n      x: boundingBox.width / 2 + boundingBox.left + window.scrollX,\n      y: boundingBox.height / 2 + boundingBox.top + window.scrollY\n    };\n    var offset = {\n      x: point.x - center.x,\n      y: point.y - center.y\n    };\n    bothAxis(function (axis) {\n      var point = _this.point[axis];\n      if (!point) return;\n\n      _this.origin[axis].set(point.get());\n    });\n    this.updatePoint(\"x\", offset);\n    this.updatePoint(\"y\", offset);\n  };\n\n  ComponentDragControls.prototype.setPoint = function (axis, value) {\n    this.point[axis] = value;\n  };\n\n  ComponentDragControls.prototype.updatePoint = function (axis, offset) {\n    var _a = this.props,\n        drag = _a.drag,\n        dragElastic = _a.dragElastic;\n    var axisPoint = this.point[axis]; // If we're not dragging this axis, do an early return.\n\n    if (!shouldDrag(axis, drag, this.currentDirection) || !axisPoint) return;\n    var current = applyConstraints(axis, this.origin[axis].get() + offset[axis], this.constraints, dragElastic);\n    axisPoint.set(current);\n  };\n\n  ComponentDragControls.prototype.updateProps = function (_a) {\n    var _this = this;\n\n    var _b = _a.drag,\n        drag = _b === void 0 ? false : _b,\n        _c = _a.dragDirectionLock,\n        dragDirectionLock = _c === void 0 ? false : _c,\n        _d = _a.dragPropagation,\n        dragPropagation = _d === void 0 ? false : _d,\n        _e = _a.dragConstraints,\n        dragConstraints = _e === void 0 ? false : _e,\n        _f = _a.dragElastic,\n        dragElastic = _f === void 0 ? true : _f,\n        _g = _a.dragMomentum,\n        dragMomentum = _g === void 0 ? true : _g,\n        remainingProps = __rest(_a, [\"drag\", \"dragDirectionLock\", \"dragPropagation\", \"dragConstraints\", \"dragElastic\", \"dragMomentum\"]);\n\n    this.props = __assign({\n      drag: drag,\n      dragDirectionLock: dragDirectionLock,\n      dragPropagation: dragPropagation,\n      dragConstraints: dragConstraints,\n      dragElastic: dragElastic,\n      dragMomentum: dragMomentum\n    }, remainingProps);\n    var _dragValueX = remainingProps._dragValueX,\n        _dragValueY = remainingProps._dragValueY,\n        dragOriginX = remainingProps.dragOriginX,\n        dragOriginY = remainingProps.dragOriginY;\n    if (dragOriginX) this.origin.x = dragOriginX;\n    if (dragOriginY) this.origin.y = dragOriginY; // Get the `MotionValue` for both draggable axes, or create them if they don't already\n    // exist on this component.\n\n    bothAxis(function (axis) {\n      if (!shouldDrag(axis, drag, _this.currentDirection)) return;\n      var defaultValue = axis === \"x\" ? _dragValueX : _dragValueY;\n\n      _this.setPoint(axis, defaultValue || _this.values.get(axis, 0));\n    }); // If `dragConstraints` is a React `ref`, we should resolve the constraints once the\n    // component has rendered.\n\n    this.constraintsNeedResolution = isRefObject(dragConstraints);\n    this.constraints = this.constraintsNeedResolution ? this.constraints || false : dragConstraints;\n  };\n\n  ComponentDragControls.prototype.applyConstraintsToPoint = function (constraints) {\n    var _this = this;\n\n    if (constraints === void 0) {\n      constraints = this.constraints;\n    }\n\n    return bothAxis(function (axis) {\n      var axisPoint = _this.point[axis];\n      axisPoint && !axisPoint.isAnimating() && applyConstraints(axis, axisPoint, constraints, 0);\n    });\n  };\n\n  ComponentDragControls.prototype.animateDragEnd = function (velocity) {\n    var _this = this;\n\n    var _a = this.props,\n        drag = _a.drag,\n        dragMomentum = _a.dragMomentum,\n        dragElastic = _a.dragElastic,\n        dragTransition = _a.dragTransition,\n        _dragValueX = _a._dragValueX,\n        _dragValueY = _a._dragValueY,\n        _dragTransitionControls = _a._dragTransitionControls;\n    var momentumAnimations = bothAxis(function (axis) {\n      var _a;\n\n      if (!shouldDrag(axis, drag, _this.currentDirection)) {\n        return;\n      }\n\n      var transition = _this.constraints ? getConstraints(axis, _this.constraints) : {};\n      /**\r\n       * Overdamp the boundary spring if `dragElastic` is disabled. There's still a frame\r\n       * of spring animations so we should look into adding a disable spring option to `inertia`.\r\n       * We could do something here where we affect the `bounceStiffness` and `bounceDamping`\r\n       * using the value of `dragElastic`.\r\n       */\n\n      var bounceStiffness = dragElastic ? 200 : 1000000;\n      var bounceDamping = dragElastic ? 40 : 10000000;\n      var animationControls = _dragTransitionControls || _this.controls;\n\n      var inertia = __assign(__assign({\n        type: \"inertia\",\n        velocity: dragMomentum ? velocity[axis] : 0,\n        bounceStiffness: bounceStiffness,\n        bounceDamping: bounceDamping,\n        timeConstant: 750,\n        restDelta: 1\n      }, dragTransition), transition);\n\n      var externalAxisMotionValue = axis === \"x\" ? _dragValueX : _dragValueY; // If we're not animating on an externally-provided `MotionValue` we can use the\n      // component's animation controls which will handle interactions with whileHover (etc),\n      // otherwise we just have to animate the `MotionValue` itself.\n\n      return externalAxisMotionValue ? startAnimation(axis, externalAxisMotionValue, 0, inertia) : animationControls.start((_a = {}, _a[axis] = 0, _a.transition = inertia, _a));\n    }); // Run all animations and then resolve the new drag constraints.\n\n    return Promise.all(momentumAnimations).then(function () {\n      _this.recordBoxInfo(_this.constraints);\n\n      _this.scalePoint();\n\n      var onDragTransitionEnd = _this.props.onDragTransitionEnd;\n      onDragTransitionEnd && onDragTransitionEnd();\n    });\n  };\n\n  ComponentDragControls.prototype.scalePoint = function () {\n    var _this = this;\n\n    var _a = this.props,\n        dragConstraints = _a.dragConstraints,\n        transformPagePoint = _a.transformPagePoint;\n    if (!isRefObject(dragConstraints)) return;\n    var constraintsBox = getBoundingBox(dragConstraints, transformPagePoint);\n    var draggableBox = getBoundingBox(this.ref, transformPagePoint); // Scale a point relative to the transformation of a constraints-providing element.\n\n    var scaleAxisPoint = function scaleAxisPoint(axis, dimension) {\n      var pointToScale = _this.point[axis];\n      if (!pointToScale) return; // Stop any current animations as they bug out if you resize during one\n\n      if (pointToScale.isAnimating()) {\n        pointToScale.stop();\n\n        _this.recordBoxInfo();\n\n        return;\n      } // If the previous dimension was `0` (default), set `scale` to `1` to prevent\n      // divide by zero errors.\n\n\n      var scale = _this.prevConstraintsBox[dimension] ? (constraintsBox[dimension] - draggableBox[dimension]) / _this.prevConstraintsBox[dimension] : 1;\n      pointToScale.set(_this.prevConstraintsBox[axis] * scale);\n    };\n\n    scaleAxisPoint(\"x\", \"width\");\n    scaleAxisPoint(\"y\", \"height\");\n  };\n\n  ComponentDragControls.prototype.mount = function (element) {\n    var _this = this;\n\n    var stopPointerListener = addPointerEvent(element, \"pointerdown\", function (event) {\n      var _a = _this.props,\n          drag = _a.drag,\n          _b = _a.dragListener,\n          dragListener = _b === void 0 ? true : _b;\n      drag && dragListener && _this.start(event);\n    });\n    var stopResizeListener = addDomEvent(window, \"resize\", function () {\n      return _this.scalePoint();\n    });\n\n    if (this.constraintsNeedResolution) {\n      var _a = this.props,\n          dragConstraints = _a.dragConstraints,\n          transformPagePoint = _a.transformPagePoint;\n      var constraints = calculateConstraintsFromDom(dragConstraints, this.ref, this.point, transformPagePoint);\n      this.applyConstraintsToPoint(constraints);\n      this.recordBoxInfo(constraints);\n    } else if (!this.isDragging && this.constraints) {\n      this.applyConstraintsToPoint();\n    }\n\n    return function () {\n      stopPointerListener && stopPointerListener();\n      stopResizeListener && stopResizeListener();\n\n      _this.cancelDrag();\n    };\n  };\n\n  return ComponentDragControls;\n}(); // Call a handler once for each axis\n\n\nfunction bothAxis(handler) {\n  return [handler(\"x\"), handler(\"y\")];\n}\n\nfunction convertPanToDrag(info, point) {\n  return __assign(__assign({}, info), {\n    point: {\n      x: point.x ? point.x.get() : 0,\n      y: point.y ? point.y.get() : 0\n    }\n  });\n}\n\nfunction getConstraints(axis, _a) {\n  var top = _a.top,\n      right = _a.right,\n      bottom = _a.bottom,\n      left = _a.left;\n\n  if (axis === \"x\") {\n    return {\n      min: left,\n      max: right\n    };\n  } else {\n    return {\n      min: top,\n      max: bottom\n    };\n  }\n}\n\nfunction shouldDrag(direction, drag, currentDirection) {\n  return (drag === true || drag === direction) && (currentDirection === null || currentDirection === direction);\n}\n/**\r\n * Based on an x/y offset determine the current drag direction. If both axis' offsets are lower\r\n * than the provided threshold, return `null`.\r\n *\r\n * @param offset - The x/y offset from origin.\r\n * @param lockThreshold - (Optional) - the minimum absolute offset before we can determine a drag direction.\r\n */\n\n\nfunction getCurrentDirection(offset, lockThreshold) {\n  if (lockThreshold === void 0) {\n    lockThreshold = 10;\n  }\n\n  var direction = null;\n\n  if (Math.abs(offset.y) > lockThreshold) {\n    direction = \"y\";\n  } else if (Math.abs(offset.x) > lockThreshold) {\n    direction = \"x\";\n  }\n\n  return direction;\n}\n/**\r\n * Takes a parent Element and a draggable Element and returns pixel-based drag constraints.\r\n *\r\n * @param constraintsRef\r\n * @param draggableRef\r\n */\n\n\nfunction calculateConstraintsFromDom(constraintsRef, draggableRef, point, transformPagePoint) {\n  invariant(constraintsRef.current !== null && draggableRef.current !== null, \"If `dragConstraints` is set as a React ref, that ref must be passed to another component's `ref` prop.\");\n  var parentBoundingBox = getBoundingBox(constraintsRef, transformPagePoint);\n  var draggableBoundingBox = getBoundingBox(draggableRef, transformPagePoint);\n  var left = parentBoundingBox.left - draggableBoundingBox.left + getCurrentOffset(point.x);\n  var top = parentBoundingBox.top - draggableBoundingBox.top + getCurrentOffset(point.y);\n  var right = parentBoundingBox.width - draggableBoundingBox.width + left;\n  var bottom = parentBoundingBox.height - draggableBoundingBox.height + top;\n  return {\n    top: top,\n    left: left,\n    right: right,\n    bottom: bottom\n  };\n}\n\nfunction getBoundingBox(ref, transformPagePoint) {\n  var rect = ref.current.getBoundingClientRect();\n\n  var _a = transformPagePoint({\n    x: rect.left,\n    y: rect.top\n  }),\n      left = _a.x,\n      top = _a.y;\n\n  var _b = transformPagePoint({\n    x: rect.width,\n    y: rect.height\n  }),\n      width = _b.x,\n      height = _b.y;\n\n  return {\n    left: left,\n    top: top,\n    width: width,\n    height: height\n  };\n}\n\nfunction getCurrentOffset(point) {\n  return point ? point.get() : 0;\n}\n\nfunction applyConstraints(axis, value, constraints, dragElastic) {\n  var constrainedValue = value instanceof MotionValue ? value.get() : value;\n\n  if (!constraints) {\n    return constrainedValue;\n  }\n\n  var _a = getConstraints(axis, constraints),\n      min = _a.min,\n      max = _a.max;\n\n  if (min !== undefined && constrainedValue < min) {\n    constrainedValue = dragElastic ? applyOverdrag(min, constrainedValue, dragElastic) : Math.max(min, constrainedValue);\n  } else if (max !== undefined && constrainedValue > max) {\n    constrainedValue = dragElastic ? applyOverdrag(max, constrainedValue, dragElastic) : Math.min(max, constrainedValue);\n  }\n\n  if (value instanceof MotionValue) {\n    value.set(constrainedValue);\n  }\n\n  return constrainedValue;\n}\n\nfunction applyOverdrag(origin, current, dragElastic) {\n  var dragFactor = typeof dragElastic === \"number\" ? dragElastic : 0.35;\n  return mix(origin, current, dragFactor);\n}\n/**\r\n * A hook that allows an element to be dragged.\r\n *\r\n * @param param\r\n * @param ref\r\n * @param values\r\n * @param controls\r\n *\r\n * @internal\r\n */\n\n\nfunction useDrag(props, ref, values, controls) {\n  var groupDragControls = props.dragControls;\n  var transformPagePoint = useContext(MotionPluginContext).transformPagePoint;\n  var dragControls = useConstant(function () {\n    return new ComponentDragControls({\n      ref: ref,\n      values: values,\n      controls: controls\n    });\n  });\n  dragControls.updateProps(__assign(__assign({}, props), {\n    transformPagePoint: transformPagePoint\n  }));\n  useEffect(function () {\n    return groupDragControls && groupDragControls.subscribe(dragControls);\n  }, [dragControls]);\n  useEffect(function () {\n    return dragControls.mount(ref.current);\n  }, []);\n}\n\nvar Drag = {\n  key: \"drag\",\n  shouldRender: function shouldRender(props) {\n    return !!props.drag;\n  },\n  Component: makeRenderlessComponent(function (_a) {\n    var innerRef = _a.innerRef,\n        values = _a.values,\n        controls = _a.controls,\n        props = __rest(_a, [\"innerRef\", \"values\", \"controls\"]);\n\n    return useDrag(props, innerRef, values, controls);\n  })\n};\n\nfunction isCSSVariable(value) {\n  return typeof value === \"string\" && value.startsWith(\"var(--\");\n}\n/**\r\n * Parse Framer's special CSS variable format into a CSS token and a fallback.\r\n *\r\n * ```\r\n * `var(--foo, #fff)` => [`--foo`, '#fff']\r\n * ```\r\n *\r\n * @param current\r\n */\n\n\nvar cssVariableRegex = /var\\((--[a-zA-Z0-9-_]+),? ?([a-zA-Z0-9 ()%#.,-]+)?\\)/;\n\nfunction parseCSSVariable(current) {\n  var match = cssVariableRegex.exec(current);\n  if (!match) return [,];\n  var token = match[1],\n      fallback = match[2];\n  return [token, fallback];\n}\n\nvar maxDepth = 4;\n\nfunction getVariableValue(current, element, depth) {\n  if (depth === void 0) {\n    depth = 1;\n  }\n\n  invariant(depth <= maxDepth, \"Max CSS variable fallback depth detected in property \\\"\" + current + \"\\\". This may indicate a circular fallback dependency.\");\n\n  var _a = parseCSSVariable(current),\n      token = _a[0],\n      fallback = _a[1]; // No CSS variable detected\n\n\n  if (!token) return; // Attempt to read this CSS variable off the element\n\n  var resolved = window.getComputedStyle(element).getPropertyValue(token);\n\n  if (resolved) {\n    return resolved;\n  } else if (isCSSVariable(fallback)) {\n    // The fallback might itself be a CSS variable, in which case we attempt to resolve it too.\n    return getVariableValue(fallback, element, depth + 1);\n  } else {\n    return fallback;\n  }\n}\n/**\r\n * Resolve CSS variables from\r\n *\r\n * @internal\r\n */\n\n\nfunction resolveCSSVariables(values, ref, _a, transitionEnd) {\n  var target = __rest(_a, []);\n\n  var element = ref.current;\n  if (!(element instanceof HTMLElement)) return {\n    target: target,\n    transitionEnd: transitionEnd\n  }; // If `transitionEnd` isn't `undefined`, clone it. We could clone `target` and `transitionEnd`\n  // only if they change but I think this reads clearer and this isn't a performance-critical path.\n\n  if (transitionEnd) {\n    transitionEnd = __assign({}, transitionEnd);\n  } // Go through existing `MotionValue`s and ensure any existing CSS variables are resolved\n\n\n  values.forEach(function (value) {\n    var current = value.get();\n    if (!isCSSVariable(current)) return;\n    var resolved = getVariableValue(current, element);\n    if (resolved) value.set(resolved);\n  }); // Cycle through every target property and resolve CSS variables. Currently\n  // we only read single-var properties like `var(--foo)`, not `calc(var(--foo) + 20px)`\n\n  for (var key in target) {\n    var current = target[key];\n    if (!isCSSVariable(current)) continue;\n    var resolved = getVariableValue(current, element);\n    if (!resolved) continue; // Clone target if it hasn't already been\n\n    target[key] = resolved; // If the user hasn't already set this key on `transitionEnd`, set it to the unresolved\n    // CSS variable. This will ensure that after the animation the component will reflect\n    // changes in the value of the CSS variable.\n\n    if (transitionEnd && transitionEnd[key] === undefined) {\n      transitionEnd[key] = current;\n    }\n  }\n\n  return {\n    target: target,\n    transitionEnd: transitionEnd\n  };\n}\n\nvar positionalKeys = new Set([\"width\", \"height\", \"top\", \"left\", \"right\", \"bottom\", \"x\", \"y\"]);\n\nvar isPositionalKey = function isPositionalKey(key) {\n  return positionalKeys.has(key);\n};\n\nvar hasPositionalKey = function hasPositionalKey(target) {\n  return Object.keys(target).some(isPositionalKey);\n};\n\nvar setAndResetVelocity = function setAndResetVelocity(value, to) {\n  // Looks odd but setting it twice doesn't render, it'll just\n  // set both prev and current to the latest value\n  value.set(to, false);\n  value.set(to);\n};\n\nvar isNumOrPxType = function isNumOrPxType(v) {\n  return v === number || v === px;\n};\n\nvar BoundingBoxDimension;\n\n(function (BoundingBoxDimension) {\n  BoundingBoxDimension[\"width\"] = \"width\";\n  BoundingBoxDimension[\"height\"] = \"height\";\n  BoundingBoxDimension[\"left\"] = \"left\";\n  BoundingBoxDimension[\"right\"] = \"right\";\n  BoundingBoxDimension[\"top\"] = \"top\";\n  BoundingBoxDimension[\"bottom\"] = \"bottom\";\n})(BoundingBoxDimension || (BoundingBoxDimension = {}));\n\nvar getPosFromMatrix = function getPosFromMatrix(matrix, pos) {\n  return parseFloat(matrix.split(\", \")[pos]);\n};\n\nvar getTranslateFromMatrix = function getTranslateFromMatrix(pos2, pos3) {\n  return function (_bbox, _a) {\n    var transform = _a.transform;\n    if (transform === \"none\" || !transform) return 0;\n    var matrix3d = transform.match(/^matrix3d\\((.+)\\)$/);\n\n    if (matrix3d) {\n      return getPosFromMatrix(matrix3d[1], pos3);\n    } else {\n      var matrix = transform.match(/^matrix\\((.+)\\)$/);\n\n      if (matrix) {\n        return getPosFromMatrix(matrix[1], pos2);\n      } else {\n        return 0;\n      }\n    }\n  };\n};\n\nvar transformKeys = new Set([\"x\", \"y\", \"z\"]);\nvar nonTranslationalTransformKeys = transformProps.filter(function (key) {\n  return !transformKeys.has(key);\n});\n\nfunction removeNonTranslationalTransform(values, elementStyler) {\n  var removedTransforms = [];\n  nonTranslationalTransformKeys.forEach(function (key) {\n    var value = values.get(key);\n\n    if (value !== undefined) {\n      removedTransforms.push([key, value.get()]);\n      value.set(key.startsWith(\"scale\") ? 1 : 0);\n    }\n  }); // Apply changes to element before measurement\n\n  if (removedTransforms.length) elementStyler.render();\n  return removedTransforms;\n}\n\nvar positionalValues = {\n  // Dimensions\n  width: function width(_a) {\n    var width = _a.width;\n    return width;\n  },\n  height: function height(_a) {\n    var height = _a.height;\n    return height;\n  },\n  top: function top(_bbox, _a) {\n    var top = _a.top;\n    return parseFloat(top);\n  },\n  left: function left(_bbox, _a) {\n    var left = _a.left;\n    return parseFloat(left);\n  },\n  bottom: function bottom(_a, _b) {\n    var height = _a.height;\n    var top = _b.top;\n    return parseFloat(top) + height;\n  },\n  right: function right(_a, _b) {\n    var width = _a.width;\n    var left = _b.left;\n    return parseFloat(left) + width;\n  },\n  // Transform\n  x: getTranslateFromMatrix(4, 13),\n  y: getTranslateFromMatrix(5, 14)\n};\n\nvar convertChangedValueTypes = function convertChangedValueTypes(target, values, element, elementStyler, changedKeys) {\n  var originBbox = element.getBoundingClientRect();\n  var elementComputedStyle = getComputedStyle(element);\n  var display = elementComputedStyle.display,\n      top = elementComputedStyle.top,\n      left = elementComputedStyle.left,\n      bottom = elementComputedStyle.bottom,\n      right = elementComputedStyle.right,\n      transform = elementComputedStyle.transform;\n  var originComputedStyle = {\n    top: top,\n    left: left,\n    bottom: bottom,\n    right: right,\n    transform: transform\n  }; // If the element is currently set to display: \"none\", make it visible before\n  // measuring the target bounding box\n\n  if (display === \"none\") {\n    elementStyler.set(\"display\", target.display || \"block\");\n  } // Apply the latest values (as set in checkAndConvertChangedValueTypes)\n\n\n  elementStyler.render();\n  var targetBbox = element.getBoundingClientRect();\n  changedKeys.forEach(function (key) {\n    // Restore styles to their **calculated computed style**, not their actual\n    // originally set style. This allows us to animate between equivalent pixel units.\n    var value = values.get(key);\n    setAndResetVelocity(value, positionalValues[key](originBbox, originComputedStyle));\n    target[key] = positionalValues[key](targetBbox, elementComputedStyle);\n  });\n  return target;\n};\n\nvar checkAndConvertChangedValueTypes = function checkAndConvertChangedValueTypes(values, ref, target, transitionEnd) {\n  if (transitionEnd === void 0) {\n    transitionEnd = {};\n  }\n\n  target = __assign({}, target);\n  transitionEnd = __assign({}, transitionEnd);\n  var element = ref.current;\n  var elementStyler = styler(element);\n  var targetPositionalKeys = Object.keys(target).filter(isPositionalKey); // We want to remove any transform values that could affect the element's bounding box before\n  // it's measured. We'll reapply these later.\n\n  var removedTransformValues = [];\n  var hasAttemptedToRemoveTransformValues = false;\n  var changedValueTypeKeys = targetPositionalKeys.reduce(function (acc, key) {\n    var value = values.get(key);\n    if (!value) return acc;\n    var from = value.get();\n    var to = target[key];\n    var fromType = getDimensionValueType(from);\n    var toType; // TODO: The current implementation of this basically throws an error\n    // if you try and do value conversion via keyframes. There's probably\n    // a way of doing this but the performance implications would need greater scrutiny,\n    // as it'd be doing multiple resize-remeasure operations.\n\n    if (isKeyframesTarget(to)) {\n      var numKeyframes = to.length;\n\n      for (var i = to[0] === null ? 1 : 0; i < numKeyframes; i++) {\n        if (!toType) {\n          toType = getDimensionValueType(to[i]);\n          invariant(toType === fromType || isNumOrPxType(fromType) && isNumOrPxType(toType), \"Keyframes must be of the same dimension as the current value\");\n        } else {\n          invariant(getDimensionValueType(to[i]) === toType, \"All keyframes must be of the same type\");\n        }\n      }\n    } else {\n      toType = getDimensionValueType(to);\n    }\n\n    if (fromType !== toType) {\n      // If they're both just number or px, convert them both to numbers rather than\n      // relying on resize/remeasure to convert (which is wasteful in this situation)\n      if (isNumOrPxType(fromType) && isNumOrPxType(toType)) {\n        var current = value.get();\n\n        if (typeof current === \"string\") {\n          value.set(parseFloat(current));\n        }\n\n        if (typeof to === \"string\") {\n          target[key] = parseFloat(to);\n        } else if (Array.isArray(to) && toType === px) {\n          target[key] = to.map(parseFloat);\n        }\n      } else {\n        // If we're going to do value conversion via DOM measurements, we first\n        // need to remove non-positional transform values that could affect the bbox measurements.\n        if (!hasAttemptedToRemoveTransformValues) {\n          removedTransformValues = removeNonTranslationalTransform(values, elementStyler);\n          hasAttemptedToRemoveTransformValues = true;\n        }\n\n        acc.push(key);\n        transitionEnd[key] = transitionEnd[key] !== undefined ? transitionEnd[key] : target[key];\n        setAndResetVelocity(value, to);\n      }\n    }\n\n    return acc;\n  }, []);\n\n  if (changedValueTypeKeys.length) {\n    var convertedTarget = convertChangedValueTypes(target, values, element, elementStyler, changedValueTypeKeys); // If we removed transform values, reapply them before the next render\n\n    if (removedTransformValues.length) {\n      removedTransformValues.forEach(function (_a) {\n        var key = _a[0],\n            value = _a[1];\n        values.get(key).set(value);\n      });\n    } // Reapply original values\n\n\n    elementStyler.render();\n    return {\n      target: convertedTarget,\n      transitionEnd: transitionEnd\n    };\n  } else {\n    return {\n      target: target,\n      transitionEnd: transitionEnd\n    };\n  }\n};\n/**\r\n * Convert value types for x/y/width/height/top/left/bottom/right\r\n *\r\n * Allows animation between `'auto'` -> `'100%'` or `0` -> `'calc(50% - 10vw)'`\r\n *\r\n * @param values\r\n * @param ref\r\n * @param target\r\n * @param transitionEnd\r\n * @internal\r\n */\n\n\nfunction unitConversion(values, ref, target, transitionEnd) {\n  return hasPositionalKey(target) ? checkAndConvertChangedValueTypes(values, ref, target, transitionEnd) : {\n    target: target,\n    transitionEnd: transitionEnd\n  };\n}\n\nvar parseDomVariant = function parseDomVariant(values, ref) {\n  return function (target, transitionEnd) {\n    var resolved = resolveCSSVariables(values, ref, target, transitionEnd);\n    target = resolved.target;\n    transitionEnd = resolved.transitionEnd;\n    return unitConversion(values, ref, target, transitionEnd);\n  };\n};\n\nfunction useForceUpdate() {\n  var _a = useState(0),\n      forcedRenderCount = _a[0],\n      setForcedRenderCount = _a[1];\n\n  return useCallback(function () {\n    return setForcedRenderCount(forcedRenderCount + 1);\n  }, [forcedRenderCount]);\n}\n\nvar SyncLayoutContext = /*#__PURE__*/createContext(null);\n/**\r\n * When layout changes happen asynchronously to their instigating render (ie when exiting\r\n * children of `AnimatePresence` are removed), `SyncLayout` can wrap parent and sibling\r\n * components that need to animate as a result of this layout change.\r\n *\r\n * @motion\r\n *\r\n * ```jsx\r\n * const MyComponent = ({ isVisible }) => {\r\n *   return (\r\n *     <SyncLayout>\r\n *       <AnimatePresence>\r\n *         {isVisible && (\r\n *           <motion.div exit={{ opacity: 0 }} />\r\n *         )}\r\n *       </AnimatePresence>\r\n *       <motion.div positionTransition />\r\n *     </SyncLayout>\r\n *   )\r\n * }\r\n * ```\r\n *\r\n * @internalremarks\r\n *\r\n * The way this component works is by memoising a function and passing it down via context.\r\n * The function, when called, updates the local state, which is used to invalidate the\r\n * memoisation cache. A new function is called, performing a synced re-render of components\r\n * that are using the SyncLayoutContext.\r\n *\r\n * @internal\r\n */\n\nvar UnstableSyncLayout = function UnstableSyncLayout(_a) {\n  var children = _a.children;\n  var forceUpdate = useForceUpdate();\n  return /*#__PURE__*/createElement(SyncLayoutContext.Provider, {\n    value: forceUpdate\n  }, children);\n};\n\nvar _a;\n\nvar StepName;\n\n(function (StepName) {\n  StepName[\"Prepare\"] = \"prepare\";\n  StepName[\"Read\"] = \"read\";\n  StepName[\"Render\"] = \"render\";\n})(StepName || (StepName = {}));\n\nvar stepOrder = [StepName.Prepare, StepName.Read, StepName.Render];\nvar jobs = stepOrder.reduce(function (acc, key) {\n  acc[key] = [];\n  return acc;\n}, {});\nvar jobsNeedProcessing = false;\n\nfunction flushCallbackList(list) {\n  var numJobs = list.length;\n\n  for (var i = 0; i < numJobs; i++) {\n    list[i]();\n  }\n\n  list.length = 0;\n}\n\nfunction flushAllJobs() {\n  if (!jobsNeedProcessing) return;\n  flushCallbackList(jobs.prepare);\n  flushCallbackList(jobs.read);\n  flushCallbackList(jobs.render);\n  jobsNeedProcessing = false;\n} // Note: The approach of schedulng jobs during the render step is incompatible with concurrent mode\n// where multiple renders might happen without a DOM update. This would result in unneccessary batched\n// jobs. But this was already a problem with our previous approach to positionTransition.\n// Hopefully the React team offer a getSnapshotBeforeUpdate-esque hook and we can move to that.\n\n\nvar createUseSyncEffect = function createUseSyncEffect(stepName) {\n  return function (callback) {\n    if (!callback) return;\n    jobsNeedProcessing = true;\n    jobs[stepName].push(callback);\n  };\n};\n\nvar layoutSync = (_a = {}, _a[StepName.Prepare] = createUseSyncEffect(StepName.Prepare), _a[StepName.Read] = createUseSyncEffect(StepName.Read), _a[StepName.Render] = createUseSyncEffect(StepName.Render), _a.flush = flushAllJobs, _a);\n\nfunction isHTMLElement(element) {\n  return element instanceof HTMLElement;\n}\n\nvar defaultLayoutTransition = {\n  duration: 0.8,\n  ease: [0.45, 0.05, 0.19, 1.0]\n};\nvar defaultPositionTransition = underDampedSpring();\n\nfunction getDefaultLayoutTransition(isPositionOnly) {\n  return isPositionOnly ? defaultPositionTransition : defaultLayoutTransition;\n}\n\nfunction isResolver(transition) {\n  return typeof transition === \"function\";\n}\n\nvar axisLabels = {\n  x: {\n    id: \"x\",\n    size: \"width\",\n    min: \"left\",\n    max: \"right\",\n    origin: \"originX\"\n  },\n  y: {\n    id: \"y\",\n    size: \"height\",\n    min: \"top\",\n    max: \"bottom\",\n    origin: \"originY\"\n  }\n};\n\nfunction centerOf(min, max) {\n  return (min + max) / 2;\n}\n\nfunction calcAxisDelta(prev, next, names) {\n  var _a;\n\n  var sizeDelta = prev[names.size] - next[names.size];\n  var origin = 0.5; // If the element has changed size we want to check whether either side is in\n  // the same position before/after the layout transition. If so, we can anchor\n  // the element to that position and only animate its size.\n\n  if (sizeDelta) {\n    if (prev[names.min] === next[names.min]) {\n      origin = 0;\n    } else if (prev[names.max] === next[names.max]) {\n      origin = 1;\n    }\n  }\n\n  var delta = (_a = {}, _a[names.size] = sizeDelta, _a[names.origin] = origin, _a[names.id] = // Only measure a position delta if we haven't anchored to one side\n  origin === 0.5 ? centerOf(prev[names.min], prev[names.max]) - centerOf(next[names.min], next[names.max]) : 0, _a);\n  return delta;\n}\n\nfunction calcDelta(prev, next) {\n  var delta = __assign(__assign({}, calcAxisDelta(prev, next, axisLabels.x)), calcAxisDelta(prev, next, axisLabels.y));\n\n  return delta;\n}\n\nvar offset = {\n  getLayout: function getLayout(_a) {\n    var offset = _a.offset;\n    return offset;\n  },\n  measure: function measure(element) {\n    var offsetLeft = element.offsetLeft,\n        offsetTop = element.offsetTop,\n        offsetWidth = element.offsetWidth,\n        offsetHeight = element.offsetHeight;\n    return {\n      left: offsetLeft,\n      top: offsetTop,\n      right: offsetLeft + offsetWidth,\n      bottom: offsetTop + offsetHeight,\n      width: offsetWidth,\n      height: offsetHeight\n    };\n  }\n};\nvar boundingBox = {\n  getLayout: function getLayout(_a) {\n    var boundingBox = _a.boundingBox;\n    return boundingBox;\n  },\n  measure: function measure(element) {\n    var _a = element.getBoundingClientRect(),\n        left = _a.left,\n        top = _a.top,\n        width = _a.width,\n        height = _a.height,\n        right = _a.right,\n        bottom = _a.bottom;\n\n    return {\n      left: left,\n      top: top,\n      width: width,\n      height: height,\n      right: right,\n      bottom: bottom\n    };\n  }\n};\n\nfunction readPositionStyle(element) {\n  return window.getComputedStyle(element).position;\n}\n\nfunction getLayoutType(prev, next, isPositionOnly) {\n  return isPositionOnly && prev === next ? offset : boundingBox;\n}\n\nfunction isSizeKey(key) {\n  return key === \"width\" || key === \"height\";\n}\n\nfunction getTransition(_a) {\n  var layoutTransition = _a.layoutTransition,\n      positionTransition = _a.positionTransition;\n  return layoutTransition || positionTransition;\n}\n\nvar LayoutAnimation =\n/** @class */\nfunction (_super) {\n  __extends(LayoutAnimation, _super);\n\n  function LayoutAnimation() {\n    return _super !== null && _super.apply(this, arguments) || this;\n  } // Measure the current state of the DOM before it's updated, and schedule checks to see\n  // if it's changed as a result of a React render.\n\n\n  LayoutAnimation.prototype.getSnapshotBeforeUpdate = function () {\n    var _a = this.props,\n        innerRef = _a.innerRef,\n        positionTransition = _a.positionTransition,\n        values = _a.values,\n        controls = _a.controls;\n    var element = innerRef.current;\n    if (!isHTMLElement(element)) return;\n    var layoutTransition = getTransition(this.props);\n    var isPositionOnly = !!positionTransition;\n    var positionStyle = readPositionStyle(element);\n    var prev = {\n      offset: offset.measure(element),\n      boundingBox: boundingBox.measure(element)\n    };\n    var transform;\n    var next;\n    var compare; // We split the unsetting, read and reapplication of the `transform` style prop into\n    // different steps via useSyncEffect. Multiple components might all be doing the same\n    // thing and by splitting these jobs and flushing them in batches we prevent layout thrashing.\n\n    layoutSync.prepare(function () {\n      // Unset the transform of all layoutTransition components so we can accurately measure\n      // the target bounding box\n      transform = element.style.transform;\n      element.style.transform = \"\";\n    });\n    layoutSync.read(function () {\n      // Read the target VisualInfo of all layoutTransition components\n      next = {\n        offset: offset.measure(element),\n        boundingBox: boundingBox.measure(element)\n      };\n      var nextPosition = readPositionStyle(element);\n      compare = getLayoutType(positionStyle, nextPosition, isPositionOnly);\n    });\n    layoutSync.render(function () {\n      // Reverse the layout delta of all newly laid-out layoutTransition components into their\n      // prev visual state and then animate them into their new one using transforms.\n      var prevLayout = compare.getLayout(prev);\n      var nextLayout = compare.getLayout(next);\n      var delta = calcDelta(prevLayout, nextLayout);\n      var hasAnyChanged = delta.x || delta.y || delta.width || delta.height;\n\n      if (!hasAnyChanged) {\n        // If layout hasn't changed, reapply the transform and get out of here.\n        transform && (element.style.transform = transform);\n        return;\n      }\n\n      styler(element).set({\n        originX: delta.originX,\n        originY: delta.originY\n      });\n      syncRenderSession.open();\n      var target = {};\n      var transition = {};\n      var transitionDefinition = isResolver(layoutTransition) ? layoutTransition({\n        delta: delta\n      }) : layoutTransition;\n\n      function makeTransition(layoutKey, transformKey, targetValue, visualOrigin) {\n        // If this dimension hasn't changed, early return\n        var deltaKey = isSizeKey(layoutKey) ? layoutKey : transformKey;\n        if (!delta[deltaKey]) return;\n        var baseTransition = typeof transitionDefinition === \"boolean\" ? __assign({}, getDefaultLayoutTransition(isPositionOnly)) : transitionDefinition;\n        var value = values.get(transformKey, targetValue);\n        var velocity = value.getVelocity();\n        transition[transformKey] = baseTransition[transformKey] ? __assign({}, baseTransition[transformKey]) : __assign({}, baseTransition);\n\n        if (transition[transformKey].velocity === undefined) {\n          transition[transformKey].velocity = velocity || 0;\n        } // The target value of all transforms is the default value of that prop (ie x = 0, scaleX = 1)\n        // This is because we're inverting the layout change with `transform` and then animating to `transform: none`\n\n\n        target[transformKey] = targetValue;\n        var offsetToApply = !isSizeKey(layoutKey) && compare === offset ? value.get() : 0;\n        value.set(visualOrigin + offsetToApply);\n      }\n\n      makeTransition(\"left\", \"x\", 0, delta.x);\n      makeTransition(\"top\", \"y\", 0, delta.y);\n\n      if (!isPositionOnly) {\n        makeTransition(\"width\", \"scaleX\", 1, prev.boundingBox.width / next.boundingBox.width);\n        makeTransition(\"height\", \"scaleY\", 1, prev.boundingBox.height / next.boundingBox.height);\n      }\n\n      target.transition = transition; // Only start the transition if `transitionDefinition` isn't `false`. Otherwise we want\n      // to leave the values in their newly-inverted state and let the user cope with the rest.\n\n      transitionDefinition && controls.start(target); // Force a render to ensure there's no visual flickering\n\n      syncRenderSession.flush();\n    });\n    return null;\n  };\n\n  LayoutAnimation.prototype.componentDidUpdate = function () {\n    layoutSync.flush();\n  };\n\n  LayoutAnimation.prototype.render = function () {\n    return null;\n  };\n\n  LayoutAnimation.contextType = SyncLayoutContext;\n  return LayoutAnimation;\n}(Component);\n\nvar Layout = {\n  key: \"layout\",\n  shouldRender: function shouldRender(_a) {\n    var positionTransition = _a.positionTransition,\n        layoutTransition = _a.layoutTransition;\n    invariant(!(positionTransition && layoutTransition), \"Don't set both positionTransition and layoutTransition on the same component\");\n    return typeof window !== \"undefined\" && !!(positionTransition || layoutTransition);\n  },\n  Component: LayoutAnimation\n};\n/**\r\n * A list of all valid MotionProps\r\n *\r\n * @internalremarks\r\n * This doesn't throw if a `MotionProp` name is missing - it should.\r\n */\n\nvar validMotionProps = new Set([\"initial\", \"animate\", \"exit\", \"style\", \"variants\", \"transition\", \"transformTemplate\", \"transformValues\", \"custom\", \"inherit\", \"static\", \"positionTransition\", \"layoutTransition\", \"onAnimationStart\", \"onAnimationComplete\", \"onUpdate\", \"onDragStart\", \"onDrag\", \"onDragEnd\", \"onDirectionLock\", \"onDragTransitionEnd\", \"drag\", \"dragControls\", \"dragListener\", \"dragConstraints\", \"dragDirectionLock\", \"dragElastic\", \"dragMomentum\", \"dragPropagation\", \"dragTransition\", \"_dragValueX\", \"_dragValueY\", \"_dragTransitionControls\", \"dragOriginX\", \"dragOriginY\", \"onPan\", \"onPanStart\", \"onPanEnd\", \"onPanSessionStart\", \"onTap\", \"onTapStart\", \"onTapCancel\", \"whileHover\", \"whileTap\", \"onHoverEnd\", \"onHoverStart\"]);\n/**\r\n * Check whether a prop name is a valid `MotionProp` key.\r\n *\r\n * @param key - Name of the property to check\r\n * @returns `true` is key is a valid `MotionProp`.\r\n *\r\n * @public\r\n */\n\nfunction isValidMotionProp(key) {\n  return validMotionProps.has(key);\n}\n\nvar AnimatePropType;\n\n(function (AnimatePropType) {\n  AnimatePropType[\"Target\"] = \"Target\";\n  AnimatePropType[\"VariantLabel\"] = \"VariantLabel\";\n  AnimatePropType[\"AnimationSubscription\"] = \"AnimationSubscription\";\n})(AnimatePropType || (AnimatePropType = {}));\n\nfunction shallowCompare(next, prev) {\n  if (prev === null) return false;\n  var prevLength = prev.length;\n  if (prevLength !== next.length) return false;\n\n  for (var i = 0; i < prevLength; i++) {\n    if (prev[i] !== next[i]) return false;\n  }\n\n  return true;\n}\n\nvar hasUpdated = function hasUpdated(prev, next) {\n  return next !== undefined && (Array.isArray(prev) && Array.isArray(next) ? !shallowCompare(next, prev) : prev !== next);\n};\n\nfunction targetWithoutTransition(_a, mergeTransitionEnd) {\n  if (mergeTransitionEnd === void 0) {\n    mergeTransitionEnd = false;\n  }\n\n  var transition = _a.transition,\n      transitionEnd = _a.transitionEnd,\n      target = __rest(_a, [\"transition\", \"transitionEnd\"]);\n\n  return mergeTransitionEnd ? __assign(__assign({}, target), transitionEnd) : target;\n}\n/**\r\n * Handle the `animate` prop when its an object of values, ie:\r\n *\r\n * ```jsx\r\n * <motion.div animate={{ opacity: 1 }} />\r\n * ```\r\n *\r\n * @internalremarks\r\n * It might be worth consolidating this with `use-variants`\r\n *\r\n * ```jsx\r\n * <motion.div animate=\"visible\" />\r\n * ```\r\n *\r\n * @param target\r\n * @param controls\r\n * @param values\r\n * @param transition\r\n *\r\n * @internal\r\n */\n\n\nfunction useAnimateProp(targetAndTransition, controls, values, defaultTransition) {\n  var isInitialRender = useRef(true);\n  var prevValues = useRef(null);\n\n  if (!prevValues.current) {\n    prevValues.current = targetWithoutTransition(targetAndTransition, true);\n  }\n\n  useEffect(function () {\n    var targetToAnimate = {}; // These are the values we're actually animating\n\n    var animatingTarget = targetWithoutTransition(targetAndTransition); // This is the target as it'll be once transitionEnd values are applied\n\n    var finalTarget = targetWithoutTransition(targetAndTransition, true); // Detect which values have changed between renders\n\n    for (var key in animatingTarget) {\n      // This value should animate on mount if this value doesn't already exist (wasn't\n      // defined in `style` or `initial`) or if it does exist and it's already changed.\n      var shouldAnimateOnMount = isInitialRender.current && (!values.has(key) || values.get(key).get() !== finalTarget[key]); // If this value has updated between renders or it's we're animating this value on mount,\n      // add it to the animate target.\n\n      var isValidValue = finalTarget[key] !== null;\n      var valueHasUpdated = hasUpdated(prevValues.current[key], finalTarget[key]);\n\n      if (isValidValue && (valueHasUpdated || shouldAnimateOnMount)) {\n        targetToAnimate[key] = animatingTarget[key];\n      }\n    }\n\n    isInitialRender.current = false;\n    prevValues.current = __assign(__assign({}, prevValues.current), finalTarget);\n\n    if (Object.keys(targetToAnimate).length) {\n      controls.start(__assign(__assign({}, targetToAnimate), {\n        transition: targetAndTransition.transition || defaultTransition,\n        transitionEnd: targetAndTransition.transitionEnd\n      }));\n    }\n  }, [targetAndTransition]);\n}\n\nvar labelsToArray = function labelsToArray(label) {\n  if (!label) {\n    return [];\n  }\n\n  if (Array.isArray(label)) {\n    return label;\n  }\n\n  return [label];\n};\n\nvar resolveVariantLabels = function resolveVariantLabels(variant) {\n  var unresolvedVariant = variant instanceof MotionValue ? variant.get() : variant;\n  return Array.from(new Set(labelsToArray(unresolvedVariant)));\n};\n/**\r\n * Hooks in React sometimes accept a dependency array as their final argument. (ie useEffect/useMemo)\r\n * When values in this array change, React re-runs the dependency. However if the array\r\n * contains a variable number of items, React throws an error.\r\n */\n\n\nvar asDependencyList = function asDependencyList(list) {\n  return [list.join(\",\")];\n};\n\nvar hasVariantChanged = function hasVariantChanged(oldVariant, newVariant) {\n  return oldVariant.join(\",\") !== newVariant.join(\",\");\n};\n/**\r\n * Handle variants and the `animate` prop when its set as variant labels.\r\n *\r\n * @param initial - Initial variant(s)\r\n * @param animate - Variant(s) to animate to\r\n * @param inherit - `true` is inheriting animations from parent\r\n * @param controls - Animation controls\r\n *\r\n * @internal\r\n */\n\n\nfunction useVariants(initial, animate, inherit, controls) {\n  var targetVariants = resolveVariantLabels(animate);\n  var context = useContext(MotionContext);\n  var parentAlreadyMounted = context.hasMounted && context.hasMounted.current;\n  var hasMounted = useRef(false);\n  useEffect(function () {\n    var shouldAnimate = false;\n\n    if (inherit) {\n      // If we're inheriting variant changes and the parent has already\n      // mounted when this component loads, we need to manually trigger\n      // this animation.\n      shouldAnimate = !!parentAlreadyMounted;\n      targetVariants = resolveVariantLabels(context.animate);\n    } else {\n      shouldAnimate = hasMounted.current || hasVariantChanged(resolveVariantLabels(initial), targetVariants);\n    }\n\n    shouldAnimate && controls.start(targetVariants);\n    hasMounted.current = true;\n  }, asDependencyList(targetVariants));\n}\n/**\r\n * `useAnimationGroupSubscription` allows a component to subscribe to an\r\n * externally-created `AnimationControls`, created by the `useAnimation` hook.\r\n *\r\n * @param animation\r\n * @param controls\r\n *\r\n * @internal\r\n */\n\n\nfunction useAnimationGroupSubscription(animation, controls) {\n  var unsubscribe = useMemo(function () {\n    return animation.subscribe(controls);\n  }, [animation]);\n  useEffect(function () {\n    return function () {\n      unsubscribe && unsubscribe();\n    };\n  }, [unsubscribe]);\n}\n\nvar _a$1, _b;\n\nvar AnimatePropComponents = (_a$1 = {}, _a$1[AnimatePropType.Target] = makeRenderlessComponent(function (_a) {\n  var animate = _a.animate,\n      controls = _a.controls,\n      values = _a.values,\n      transition = _a.transition;\n  return useAnimateProp(animate, controls, values, transition);\n}), _a$1[AnimatePropType.VariantLabel] = makeRenderlessComponent(function (_a) {\n  var animate = _a.animate,\n      _b = _a.inherit,\n      inherit = _b === void 0 ? true : _b,\n      controls = _a.controls,\n      initial = _a.initial;\n  return useVariants(initial, animate, inherit, controls);\n}), _a$1[AnimatePropType.AnimationSubscription] = makeRenderlessComponent(function (_a) {\n  var animate = _a.animate,\n      controls = _a.controls;\n  return useAnimationGroupSubscription(animate, controls);\n}), _a$1);\n\nvar isVariantLabel$1 = function isVariantLabel$1(prop) {\n  return Array.isArray(prop) || typeof prop === \"string\";\n};\n\nvar isAnimationSubscription = function isAnimationSubscription(_a) {\n  var animate = _a.animate;\n  return animate instanceof AnimationControls;\n};\n\nvar animationProps = [\"initial\", \"animate\", \"whileTap\", \"whileHover\"];\nvar animatePropTypeTests = (_b = {}, _b[AnimatePropType.Target] = function (props) {\n  return props.animate !== undefined && !isVariantLabel$1(props.animate) && !isAnimationSubscription(props);\n}, _b[AnimatePropType.VariantLabel] = function (props) {\n  return props.variants !== undefined || animationProps.some(function (key) {\n    return typeof props[key] === \"string\";\n  });\n}, _b[AnimatePropType.AnimationSubscription] = isAnimationSubscription, _b);\n\nvar getAnimationComponent = function getAnimationComponent(props) {\n  var animatePropType = undefined;\n\n  for (var key in AnimatePropType) {\n    if (animatePropTypeTests[key](props)) {\n      animatePropType = key;\n    }\n  }\n\n  return animatePropType ? AnimatePropComponents[animatePropType] : undefined;\n};\n/**\r\n * When a component is the child of `AnimatePresence`, it can use `usePresence`\r\n * to access information about whether it's still present in the React tree.\r\n *\r\n * ```jsx\r\n * import { usePresence } from \"framer-motion\"\r\n *\r\n * export const Component = () => {\r\n *   const [isPresent, safeToRemove] = usePresence()\r\n *\r\n *   useEffect(() => {\r\n *     !isPresent setTimeout(safeToRemove, 1000)\r\n *   }, [isPresent])\r\n *\r\n *   return <div />\r\n * }\r\n * ```\r\n *\r\n * If `isPresent` is `false`, it means that a component has been removed the tree, but\r\n * `AnimatePresence` won't really remove it until `safeToRemove` has been called.\r\n *\r\n * @public\r\n */\n\n\nfunction usePresence() {\n  var context = useContext(PresenceContext);\n  if (context === null) return [true];\n  var isPresent = context.isPresent,\n      onExitComplete = context.onExitComplete,\n      register = context.register;\n  useEffect(register, []);\n  return !isPresent && onExitComplete ? [false, onExitComplete] : [true];\n}\n\nvar Exit = {\n  key: \"exit\",\n  shouldRender: function shouldRender(props) {\n    return !!props.exit && !checkShouldInheritVariant(props);\n  },\n  Component: makeRenderlessComponent(function (props) {\n    var _a;\n\n    var animate = props.animate,\n        controls = props.controls,\n        exit = props.exit;\n\n    var _b = usePresence(),\n        isPresent = _b[0],\n        onExitComplete = _b[1];\n\n    var presenceContext = useContext(PresenceContext);\n    var isPlayingExitAnimation = useRef(false);\n    var custom = ((_a = presenceContext) === null || _a === void 0 ? void 0 : _a.custom) !== undefined ? presenceContext.custom : props.custom;\n    useEffect(function () {\n      if (!isPresent) {\n        if (!isPlayingExitAnimation.current && exit) {\n          controls.setProps(__assign(__assign({}, props), {\n            custom: custom\n          }));\n          controls.start(exit).then(onExitComplete);\n        }\n\n        isPlayingExitAnimation.current = true;\n      } else if (isPlayingExitAnimation.current && animate && !(animate instanceof AnimationControls)) {\n        controls.start(animate);\n      }\n\n      if (isPresent) {\n        isPlayingExitAnimation.current = false;\n      }\n    }, [isPresent]);\n  })\n};\n\nvar isPropValid = function isPropValid(key) {\n  return !isValidMotionProp(key);\n};\n/**\r\n * Emotion and Styled Components both allow users to pass through arbitrary props to their components\r\n * to dynamically generate CSS. They both use the `@emotion/is-prop-valid` package to determine which\r\n * of these should be passed to the underlying DOM node.\r\n *\r\n * However, when styling a Motion component `styled(motion.div)`, both packages pass through *all* props\r\n * as it's seen as an arbitrary component rather than a DOM node. Motion only allows arbitrary props\r\n * passed through the `custom` prop so it doesn't *need* the payload or computational overhead of\r\n * `@emotion/is-prop-valid`, however to fix this problem we need to use it.\r\n *\r\n * By making it an optionalDependency we can offer this functionality only in the situations where it's\r\n * actually required.\r\n */\n\n\ntry {\n  var emotionIsPropValid_1 = require(\"@emotion/is-prop-valid\").default;\n\n  isPropValid = function isPropValid(key) {\n    // Handle events explicitly as Emotion validates them all as true\n    if (key.startsWith(\"on\")) {\n      return !isValidMotionProp(key);\n    } else {\n      return emotionIsPropValid_1(key);\n    }\n  };\n} catch (_a) {// We don't need to actually do anything here - the fallback is the existing `isPropValid`.\n}\n\nfunction filterValidProps(props) {\n  var domProps = {};\n\n  for (var key in props) {\n    if (isPropValid(key)) {\n      domProps[key] = props[key];\n    }\n  }\n\n  return domProps;\n}\n\nvar buildHTMLProps = function buildHTMLProps(values, style, isStatic, isDrag) {\n  // The `any` isn't ideal but it is the type of createElement props argument\n  var props = {\n    style: buildStyleAttr(values, style, isStatic)\n  };\n\n  if (isDrag) {\n    // Disable text selection\n    props.style.userSelect = \"none\"; // Disable the ghost element when a user drags\n\n    props.draggable = false;\n  }\n\n  return props;\n};\n\nvar buildSVGProps = function buildSVGProps(values, style) {\n  var motionValueStyles = resolveCurrent(values);\n  var props = buildSVGAttrs(motionValueStyles, undefined, undefined, undefined, undefined, false);\n  props.style = __assign(__assign({}, style), props.style);\n  return props;\n};\n\nvar functionalityComponents = [Layout, Drag, Gestures, Exit];\nvar numFunctionalityComponents = functionalityComponents.length;\n/**\r\n * Create a configuration for `motion` components that provides DOM-specific functionality.\r\n *\r\n * @internal\r\n */\n\nfunction createDomMotionConfig(Component) {\n  var isDOM = typeof Component === \"string\";\n  var isSVG = isDOM && svgElements.indexOf(Component) !== -1;\n  return {\n    renderComponent: function renderComponent(ref, style, values, props, isStatic) {\n      var forwardedProps = isDOM ? filterValidProps(props) : props;\n      var staticVisualStyles = isSVG ? buildSVGProps(values, style) : buildHTMLProps(values, style, isStatic, !!props.drag);\n      return /*#__PURE__*/createElement(Component, __assign(__assign(__assign({}, forwardedProps), {\n        ref: ref\n      }), staticVisualStyles));\n    },\n\n    /**\r\n     * loadFunctionalityComponents gets used by the `motion` component\r\n     *\r\n     * Each functionality component gets provided the `ref`, animation controls and the `MotionValuesMap`\r\n     * generated for that component, as well as all the `props` passed to it by the user.\r\n     *\r\n     * The pattern used to determine whether to load and use each piece of functionality is\r\n     * consistent (should render? Then push component) and could be used to extend functionality.\r\n     *\r\n     * By exposing a mutable piece of memory via an API like `extendMotionComponent` we could\r\n     * allow users to add `FunctionalComponentDefinition`s. This would allow us to offer file size\r\n     * reductions by shipping an entry point that doesn't load gesture and drag functionality, and\r\n     * also offer a way for users to develop plugins/other functionality. Because these functionalities\r\n     * are loaded as components, we can look into using Suspense for this purpose.\r\n     *\r\n     * For user-defined functionality we'd need to allow\r\n     *  1) User-defined prop typing (extending `P`)\r\n     *  2) User-defined \"clean props\" function that removes their plugin's props before being passed to the DOM.\r\n     */\n    loadFunctionalityComponents: function loadFunctionalityComponents(ref, values, props, context, controls, inherit) {\n      var activeComponents = []; // TODO: Consolidate Animation functionality loading strategy with other functionality components\n\n      var Animation = getAnimationComponent(props);\n\n      if (Animation) {\n        activeComponents.push( /*#__PURE__*/createElement(Animation, {\n          key: \"animation\",\n          initial: props.initial,\n          animate: props.animate,\n          variants: props.variants,\n          transition: props.transition,\n          controls: controls,\n          inherit: inherit,\n          values: values\n        }));\n      }\n\n      for (var i = 0; i < numFunctionalityComponents; i++) {\n        var _a = functionalityComponents[i],\n            shouldRender = _a.shouldRender,\n            key = _a.key,\n            Component_1 = _a.Component;\n\n        if (shouldRender(props, context)) {\n          activeComponents.push( /*#__PURE__*/createElement(Component_1, __assign({\n            key: key\n          }, props, {\n            parentContext: context,\n            values: values,\n            controls: controls,\n            innerRef: ref\n          })));\n        }\n      }\n\n      return activeComponents;\n    },\n    getValueControlsConfig: function getValueControlsConfig(ref, values) {\n      return {\n        values: values,\n        readValueFromSource: function readValueFromSource(key) {\n          return styler(ref.current).get(key);\n        },\n        // TODO: This is a good second source of plugins. This function contains the CSS variable\n        // and unit conversion support. These functions share a common signature. We could make another\n        // API for adding these.\n        makeTargetAnimatable: parseDomVariant(values, ref)\n      };\n    }\n  };\n}\n\nvar htmlMotionComponents = htmlElements.reduce(function (acc, Component) {\n  var config = createDomMotionConfig(Component); // Suppress \"Expression produces a union type that is too complex to represent\" error\n  // @ts-ignore\n\n  acc[Component] = createMotionComponent(config);\n  return acc;\n}, {});\nvar svgMotionComponents = svgElements.reduce(function (acc, Component) {\n  // Suppress \"Expression produces a union type that is too complex to represent\" error\n  // @ts-ignore\n  acc[Component] = createMotionComponent(createDomMotionConfig(Component));\n  return acc;\n}, {});\n/**\r\n * HTML & SVG components, optimised for use with gestures and animation. These can be used as\r\n * drop-in replacements for any HTML & SVG component, all CSS & SVG properties are supported.\r\n *\r\n * @internalremarks\r\n *\r\n * I'd like to make it possible for these to be loaded \"on demand\" - to reduce bundle size by only\r\n * including HTML/SVG stylers, animation and/or gesture support when necessary.\r\n *\r\n * ```jsx\r\n * <motion.div animate={{ x: 100 }} />\r\n *\r\n * <motion.p animate={{ height: 200 }} />\r\n *\r\n * <svg><motion.circle r={10} animate={{ r: 20 }} /></svg>\r\n * ```\r\n *\r\n * @public\r\n */\n\nvar motion = __assign(__assign({\n  /**\r\n   * Convert a custom React component into a `motion` component.\r\n   *\r\n   * It can also accept a string, to create [custom DOM elements](https://developer.mozilla.org/en-US/docs/Web/Web_Components/Using_custom_elements).\r\n   *\r\n   * ```jsx\r\n   * const Component = React.forwardRef((props: Props, ref) => {\r\n   *   return <div ref={ref} />\r\n   * })\r\n   *\r\n   * const MotionComponent = motion.custom<Props>(Component)\r\n   * ```\r\n   *\r\n   * @param Component -\r\n   */\n  custom: function custom(Component) {\n    return createMotionComponent(createDomMotionConfig(Component));\n  }\n}, htmlMotionComponents), svgMotionComponents);\n/**\r\n * Creates a `MotionValue` to track the state and velocity of a value.\r\n *\r\n * Usually, these are created automatically. For advanced use-cases, like use with `useTransform`, you can create `MotionValue`s externally and pass them into the animated component via the `style` prop.\r\n *\r\n * @library\r\n *\r\n * ```jsx\r\n * export function MyComponent() {\r\n *   const scale = useMotionValue(1)\r\n *\r\n *   return <Frame scale={scale} />\r\n * }\r\n * ```\r\n *\r\n * @motion\r\n *\r\n * ```jsx\r\n * export const MyComponent = () => {\r\n *   const scale = useMotionValue(1)\r\n *\r\n *   return <motion.div style={{ scale }} />\r\n * }\r\n * ```\r\n *\r\n * @param initial - The initial state.\r\n *\r\n * @public\r\n */\n\n\nfunction useMotionValue(initial) {\n  return useConstant(function () {\n    return motionValue(initial);\n  });\n}\n/**\r\n * If the provided value is a MotionValue, this returns the actual value, otherwise just the value itself\r\n *\r\n * TODO: Remove and move to library\r\n *\r\n * @internal\r\n */\n\n\nfunction unwrapMotionValue(value) {\n  var unwrappedValue = value instanceof MotionValue ? value.get() : value;\n  return isCustomValue(unwrappedValue) ? unwrappedValue.toValue() : unwrappedValue;\n}\n\nvar isCustomValueType = function isCustomValueType(v) {\n  return _typeof(v) === \"object\" && v.mix;\n};\n\nvar getMixer = function getMixer(v) {\n  return isCustomValueType(v) ? v.mix : undefined;\n};\n\nfunction transform() {\n  var args = [];\n\n  for (var _i = 0; _i < arguments.length; _i++) {\n    args[_i] = arguments[_i];\n  }\n\n  var useImmediate = !Array.isArray(args[0]);\n  var argOffset = useImmediate ? 0 : -1;\n  var inputValue = args[0 + argOffset];\n  var inputRange = args[1 + argOffset];\n  var outputRange = args[2 + argOffset];\n  var options = args[3 + argOffset];\n  var interpolator = interpolate(inputRange, outputRange, __assign({\n    mixer: getMixer(outputRange[0])\n  }, options));\n  return useImmediate ? interpolator(inputValue) : interpolator;\n}\n\nvar isTransformer = function isTransformer(v) {\n  return typeof v === \"function\";\n};\n\nvar noop$1 = function noop$1(v) {\n  return v;\n};\n\nfunction useTransform(parent, customTransform, to, options) {\n  var value = useRef(null);\n  var comparitor = [parent];\n  var transformer = noop$1;\n\n  if (isTransformer(customTransform)) {\n    transformer = customTransform;\n  } else if (Array.isArray(to)) {\n    var from = customTransform;\n    transformer = transform(from, to, options);\n    comparitor = [parent, from.join(\",\"), to.join(\",\")];\n  }\n\n  return useMemo(function () {\n    if (value.current) value.current.destroy();\n    value.current = parent.addChild({\n      transformer: transformer\n    });\n    return value.current;\n  }, comparitor);\n} // Keep things reasonable and avoid scale: Infinity. In practise we might need\n// to add another value, opacity, that could interpolate scaleX/Y [0,0.01] => [0,1]\n// to simply hide content at unreasonable scales.\n\n\nvar maxScale = 100000;\n\nvar invertScale = function invertScale(scale) {\n  return scale > 0.001 ? 1 / scale : maxScale;\n};\n/**\r\n * Returns a `MotionValue` each for `scaleX` and `scaleY` that update with the inverse\r\n * of their respective parent scales.\r\n *\r\n * This is useful for undoing the distortion of content when scaling a parent component.\r\n *\r\n * By default, `useInvertedScale` will automatically fetch `scaleX` and `scaleY` from the nearest parent.\r\n * By passing other `MotionValue`s in as `useInvertedScale({ scaleX, scaleY })`, it will invert the output\r\n * of those instead.\r\n *\r\n * @motion\r\n *\r\n * ```jsx\r\n * const MyComponent = () => {\r\n *   const { scaleX, scaleY } = useInvertedScale()\r\n *   return <motion.div style={{ scaleX, scaleY }} />\r\n * }\r\n * ```\r\n *\r\n * @library\r\n *\r\n * ```jsx\r\n * function MyComponent() {\r\n *   const { scaleX, scaleY } = useInvertedScale()\r\n *   return <Frame scaleX={scaleX} scaleY={scaleY} />\r\n * }\r\n * ```\r\n *\r\n * @public\r\n */\n\n\nfunction useInvertedScale(scale) {\n  var parentScaleX = useMotionValue(1);\n  var parentScaleY = useMotionValue(1);\n  var values = useContext(MotionContext).values;\n  invariant(!!(scale || values), \"If no scale values are provided, useInvertedScale must be used within a child of another motion component.\");\n\n  if (scale) {\n    parentScaleX = scale.scaleX || parentScaleX;\n    parentScaleY = scale.scaleY || parentScaleY;\n  } else if (values) {\n    parentScaleX = values.get(\"scaleX\", 1);\n    parentScaleY = values.get(\"scaleY\", 1);\n  }\n\n  var scaleX = useTransform(parentScaleX, invertScale);\n  var scaleY = useTransform(parentScaleY, invertScale);\n  return {\n    scaleX: scaleX,\n    scaleY: scaleY\n  };\n}\n\nfunction useOnChange(value, callback) {\n  useEffect(function () {\n    return isMotionValue(value) ? value.onChange(callback) : undefined;\n  }, [value]);\n}\n/**\r\n * Creates a `MotionValue` that, when `set`, will use a spring animation to animate to its new state.\r\n *\r\n * It can either work as a stand-alone `MotionValue` by initialising it with a value, or as a subscriber\r\n * to another `MotionValue`.\r\n *\r\n * @remarks\r\n *\r\n * ```jsx\r\n * const x = useSpring(0, { stiffness: 300 })\r\n * const y = useSpring(x, { damping: 10 })\r\n * ```\r\n *\r\n * @param inputValue - `MotionValue` or number. If provided a `MotionValue`, when the input `MotionValue` changes, the created `MotionValue` will spring towards that value.\r\n * @param springConfig - Configuration options for the spring.\r\n * @returns `MotionValue`\r\n *\r\n * @public\r\n */\n\n\nfunction useSpring(source, config) {\n  if (config === void 0) {\n    config = {};\n  }\n\n  var activeSpringAnimation = useRef(null);\n  var value = useMotionValue(isMotionValue(source) ? source.get() : source);\n  useMemo(function () {\n    return value.attach(function (v, set) {\n      if (activeSpringAnimation.current) {\n        activeSpringAnimation.current.stop();\n      }\n\n      activeSpringAnimation.current = spring(__assign({\n        from: value.get(),\n        to: v,\n        velocity: value.getVelocity()\n      }, config)).start(set);\n      return value.get();\n    });\n  }, Object.values(config));\n  useOnChange(source, function (v) {\n    return value.set(parseFloat(v));\n  });\n  return value;\n}\n\nfunction createScrollMotionValues() {\n  return {\n    scrollX: motionValue(0),\n    scrollY: motionValue(0),\n    scrollXProgress: motionValue(0),\n    scrollYProgress: motionValue(0)\n  };\n}\n\nfunction setProgress(offset, maxOffset, value) {\n  value.set(!offset || !maxOffset ? 0 : offset / maxOffset);\n}\n\nfunction createScrollUpdater(values, getOffsets) {\n  var update = function update() {\n    var _a = getOffsets(),\n        xOffset = _a.xOffset,\n        yOffset = _a.yOffset,\n        xMaxOffset = _a.xMaxOffset,\n        yMaxOffset = _a.yMaxOffset; // Set absolute positions\n\n\n    values.scrollX.set(xOffset);\n    values.scrollY.set(yOffset); // Set 0-1 progress\n\n    setProgress(xOffset, xMaxOffset, values.scrollXProgress);\n    setProgress(yOffset, yMaxOffset, values.scrollYProgress);\n  };\n\n  update();\n  return update;\n}\n\nvar isBrowser$2 = typeof window !== \"undefined\";\nvar useIsomorphicLayoutEffect = isBrowser$2 ? useLayoutEffect : useEffect;\n\nvar getElementScrollOffsets = function getElementScrollOffsets(element) {\n  return function () {\n    return {\n      xOffset: element.scrollLeft,\n      yOffset: element.scrollTop,\n      xMaxOffset: element.scrollWidth - element.offsetWidth,\n      yMaxOffset: element.scrollHeight - element.offsetHeight\n    };\n  };\n};\n/**\r\n * Returns MotionValues that update when the provided element scrolls:\r\n *\r\n * - `scrollX` — Horizontal scroll distance in pixels.\r\n * - `scrollY` — Vertical scroll distance in pixels.\r\n * - `scrollXProgress` — Horizontal scroll progress between `0` and `1`.\r\n * - `scrollYProgress` — Vertical scroll progress between `0` and `1`.\r\n *\r\n * @library\r\n *\r\n * ```jsx\r\n * import * as React from \"react\"\r\n * import {\r\n *   Frame,\r\n *   useElementScroll,\r\n *   useTransform\r\n * } from \"framer\"\r\n *\r\n * export function MyComponent() {\r\n *   const ref = React.useRef()\r\n *   const { scrollYProgress } = useElementScroll(ref)\r\n *\r\n *   return (\r\n *     <Frame ref={ref}>\r\n *       <Frame scaleX={scrollYProgress} />\r\n *     </Frame>\r\n *   )\r\n * }\r\n * ```\r\n *\r\n * @motion\r\n *\r\n * ```jsx\r\n * export const MyComponent = () => {\r\n *   const ref = useRef()\r\n *   const { scrollYProgress } = useElementScroll(ref)\r\n *\r\n *   return (\r\n *     <div ref={ref}>\r\n *       <motion.div style={{ scaleX: scrollYProgress }} />\r\n *     </div>\r\n *   )\r\n * }\r\n * ```\r\n *\r\n * @public\r\n */\n\n\nfunction useElementScroll(ref) {\n  var values = useConstant(createScrollMotionValues);\n  useIsomorphicLayoutEffect(function () {\n    var element = ref.current;\n    invariant(!!element, \"ref provided to useScroll must be passed into a HTML element.\");\n    if (!element) return;\n    var updateScrollValues = createScrollUpdater(values, getElementScrollOffsets(element));\n    var scrollListener = addDomEvent(element, \"scroll\", updateScrollValues, {\n      passive: true\n    });\n    var resizeListener = addDomEvent(element, \"resize\", updateScrollValues);\n    return function () {\n      scrollListener && scrollListener();\n      resizeListener && resizeListener();\n    };\n  }, []);\n  return values;\n}\n\nvar viewportScrollValues = createScrollMotionValues();\n\nfunction getViewportScrollOffsets() {\n  return {\n    xOffset: window.pageXOffset,\n    yOffset: window.pageYOffset,\n    xMaxOffset: document.body.clientWidth - window.innerWidth,\n    yMaxOffset: document.body.clientHeight - window.innerHeight\n  };\n}\n\nvar hasListeners = false;\n\nfunction addEventListeners() {\n  hasListeners = true;\n  if (typeof window === \"undefined\") return;\n  var updateScrollValues = createScrollUpdater(viewportScrollValues, getViewportScrollOffsets);\n  addDomEvent(window, \"scroll\", updateScrollValues, {\n    passive: true\n  });\n  addDomEvent(window, \"resize\", updateScrollValues);\n}\n/**\r\n * Returns MotionValues that update when the viewport scrolls:\r\n *\r\n * - `scrollX` — Horizontal scroll distance in pixels.\r\n * - `scrollY` — Vertical scroll distance in pixels.\r\n * - `scrollXProgress` — Horizontal scroll progress between `0` and `1`.\r\n * - `scrollYProgress` — Vertical scroll progress between `0` and `1`.\r\n *\r\n * @library\r\n *\r\n * ```jsx\r\n * import * as React from \"react\"\r\n * import {\r\n *   Frame,\r\n *   useViewportScroll,\r\n *   useTransform\r\n * } from \"framer\"\r\n *\r\n * export function MyComponent() {\r\n *   const { scrollYProgress } = useViewportScroll()\r\n *   return <Frame scaleX={scrollYProgress} />\r\n * }\r\n * ```\r\n *\r\n * @motion\r\n *\r\n * ```jsx\r\n * export const MyComponent = () => {\r\n *   const { scrollYProgress } = useViewportScroll()\r\n *   return <motion.div style={{ scaleX: scrollYProgress }} />\r\n * }\r\n * ```\r\n *\r\n * @public\r\n */\n\n\nfunction useViewportScroll() {\n  useIsomorphicLayoutEffect(function () {\n    !hasListeners && addEventListeners();\n  }, []);\n  return viewportScrollValues;\n}\n/**\r\n * Creates `AnimationControls`, which can be used to manually start, stop\r\n * and sequence animations on one or more components.\r\n *\r\n * The returned `AnimationControls` should be passed to the `animate` property\r\n * of the components you want to animate.\r\n *\r\n * These components can then be animated with the `start` method.\r\n *\r\n * @library\r\n *\r\n * ```jsx\r\n * import * as React from 'react'\r\n * import { Frame, useAnimation } from 'framer'\r\n *\r\n * export function MyComponent(props) {\r\n *    const controls = useAnimation()\r\n *\r\n *    controls.start({\r\n *        x: 100,\r\n *        transition: { duration: 0.5 },\r\n *    })\r\n *\r\n *    return <Frame animate={controls} />\r\n * }\r\n * ```\r\n *\r\n * @motion\r\n *\r\n * ```jsx\r\n * import * as React from 'react'\r\n * import { motion, useAnimation } from 'framer-motion'\r\n *\r\n * export function MyComponent(props) {\r\n *    const controls = useAnimation()\r\n *\r\n *    controls.start({\r\n *        x: 100,\r\n *        transition: { duration: 0.5 },\r\n *    })\r\n *\r\n *    return <motion.div animate={controls} />\r\n * }\r\n * ```\r\n *\r\n * @returns Animation controller with `start` and `stop` methods\r\n *\r\n * @public\r\n */\n\n\nfunction useAnimation() {\n  var animationControls = useConstant(function () {\n    return new AnimationControls();\n  });\n  useEffect(function () {\n    animationControls.mount();\n    return function () {\n      return animationControls.unmount();\n    };\n  }, []);\n  return animationControls;\n}\n/**\r\n * Experimental API.\r\n *\r\n * Makes an animated version of `useState`.\r\n *\r\n * @remarks\r\n *\r\n * When the returned state setter is called, values will be animated to their new target.\r\n *\r\n * This allows the animation of arbitrary React components.\r\n *\r\n * **Note:** When animating DOM components, it's always preferable to use the `animate` prop, as Framer\r\n * will bypass React's rendering cycle with one optimised for 60fps motion. This Hook is specifically\r\n * for animating props on arbitrary React components, or for animating text content.\r\n *\r\n * ```jsx\r\n * const [state, setState] = useAnimatedState({ percentage: 0 })\r\n *\r\n * return (\r\n *   <Graph\r\n *     percentage={state.percentage}\r\n *     onTap={() => setState({ percentage: 50 })}\r\n *   />\r\n * )\r\n * ```\r\n *\r\n * @internalremarks\r\n *\r\n * TODO:\r\n * - Make hook accept a typed version of Target that accepts any value (not just DOM values)\r\n * - Allow hook to accept single values. ie useAnimatedState(0)\r\n * - Allow providing MotionValues via initialState.\r\n *\r\n * @beta\r\n */\n\n\nfunction useAnimatedState(initialState) {\n  var _a = useState(initialState),\n      animationState = _a[0],\n      onUpdate = _a[1];\n\n  var config = useConstant(function () {\n    return {\n      onUpdate: onUpdate\n    };\n  });\n  var values = useMotionValues(config);\n  var controls = useValueAnimationControls({\n    values: values,\n    readValueFromSource: function readValueFromSource(key) {\n      return animationState[key];\n    }\n  }, {}, false);\n  var startAnimation = useConstant(function () {\n    return function (animationDefinition) {\n      return controls.start(animationDefinition);\n    };\n  });\n  useEffect(function () {\n    values.mount();\n    return function () {\n      return values.unmount();\n    };\n  }, []);\n  return [animationState, startAnimation];\n}\n/**\r\n * Cycles through a series of visual properties. Can be used to toggle between or cycle through animations. It works similar to `useState` in React. It is provided an initial array of possible states, and returns an array of two arguments.\r\n *\r\n * @library\r\n *\r\n * ```jsx\r\n * import * as React from \"react\"\r\n * import { Frame, useCycle } from \"framer\"\r\n *\r\n * export function MyComponent() {\r\n *   const [x, cycleX] = useCycle(0, 50, 100)\r\n *\r\n *   return (\r\n *     <Frame\r\n *       animate={{ x: x }}\r\n *       onTap={() => cycleX()}\r\n *      />\r\n *    )\r\n * }\r\n * ```\r\n *\r\n * @motion\r\n *\r\n * An index value can be passed to the returned `cycle` function to cycle to a specific index.\r\n *\r\n * ```jsx\r\n * import * as React from \"react\"\r\n * import { motion, useCycle } from \"framer-motion\"\r\n *\r\n * export const MyComponent = () => {\r\n *   const [x, cycleX] = useCycle(0, 50, 100)\r\n *\r\n *   return (\r\n *     <motion.div\r\n *       animate={{ x: x }}\r\n *       onTap={() => cycleX()}\r\n *      />\r\n *    )\r\n * }\r\n * ```\r\n *\r\n * @param items - items to cycle through\r\n * @returns [currentState, cycleState]\r\n *\r\n * @public\r\n */\n\n\nfunction useCycle() {\n  var items = [];\n\n  for (var _i = 0; _i < arguments.length; _i++) {\n    items[_i] = arguments[_i];\n  } // TODO: After Framer X beta, remove this warning\n\n\n  warning(items.length > 1, \"useCycle syntax has changed. `useCycle([0, 1, 2])` becomes `useCycle(0, 1, 2)`\");\n  var index = useRef(0);\n\n  var _a = useState(items[index.current]),\n      item = _a[0],\n      setItem = _a[1];\n\n  return [item, function (next) {\n    index.current = typeof next !== \"number\" ? wrap(0, items.length, index.current + 1) : next;\n    setItem(items[index.current]);\n  }];\n}\n/**\r\n * Can manually trigger a drag gesture on one or more `drag`-enabled `motion` components.\r\n *\r\n * @library\r\n *\r\n * ```jsx\r\n * const dragControls = useDragControls()\r\n *\r\n * function startDrag(event) {\r\n *   dragControls.start(event, { snapToCursor: true })\r\n * }\r\n *\r\n * return (\r\n *   <>\r\n *     <Frame onTapStart={startDrag} />\r\n *     <Frame drag=\"x\" dragControls={dragControls} />\r\n *   </>\r\n * )\r\n * ```\r\n *\r\n * @motion\r\n *\r\n * ```jsx\r\n * const dragControls = useDragControls()\r\n *\r\n * function startDrag(event) {\r\n *   dragControls.start(event, { snapToCursor: true })\r\n * }\r\n *\r\n * return (\r\n *   <>\r\n *     <div onMouseDown={startDrag} />\r\n *     <motion.div drag=\"x\" dragControls={dragControls} />\r\n *   </>\r\n * )\r\n * ```\r\n *\r\n * @public\r\n */\n\n\nvar DragControls =\n/** @class */\nfunction () {\n  function DragControls() {\n    this.componentControls = new Set();\n  }\n  /**\r\n   * Subscribe a component's internal `ComponentDragControls` to the user-facing API.\r\n   *\r\n   * @internal\r\n   */\n\n\n  DragControls.prototype.subscribe = function (controls) {\n    var _this = this;\n\n    this.componentControls.add(controls);\n    return function () {\n      return _this.componentControls.delete(controls);\n    };\n  };\n  /**\r\n   * Start a drag gesture on every `motion` component that has this set of drag controls\r\n   * passed into it via the `dragControls` prop.\r\n   *\r\n   * ```jsx\r\n   * dragControls.start(e, {\r\n   *   snapToCursor: true\r\n   * })\r\n   * ```\r\n   *\r\n   * @param event - A mouse/touch/pointer event.\r\n   * @param options - Options\r\n   *\r\n   * @public\r\n   */\n\n\n  DragControls.prototype.start = function (event, options) {\n    this.componentControls.forEach(function (controls) {\n      controls.start(event.nativeEvent || event, options);\n    });\n  };\n\n  return DragControls;\n}();\n\nvar createDragControls = function createDragControls() {\n  return new DragControls();\n};\n/**\r\n * Usually, dragging is initiated by pressing down on a `motion` component with a `drag` prop\r\n * and moving it. For some use-cases, for instance clicking at an arbitrary point on a video scrubber, we\r\n * might want to initiate that dragging from a different component than the draggable one.\r\n *\r\n * By creating a `dragControls` using the `useDragControls` hook, we can pass this into\r\n * the draggable component's `dragControls` prop. It exposes a `start` method\r\n * that can start dragging from pointer events on other components.\r\n *\r\n * @library\r\n *\r\n * ```jsx\r\n * const dragControls = useDragControls()\r\n *\r\n * function startDrag(event) {\r\n *   dragControls.start(event, { snapToCursor: true })\r\n * }\r\n *\r\n * return (\r\n *   <>\r\n *     <Frame onTapStart={startDrag} />\r\n *     <Frame drag=\"x\" dragControls={dragControls} />\r\n *   </>\r\n * )\r\n * ```\r\n *\r\n * @motion\r\n *\r\n * ```jsx\r\n * const dragControls = useDragControls()\r\n *\r\n * function startDrag(event) {\r\n *   dragControls.start(event, { snapToCursor: true })\r\n * }\r\n *\r\n * return (\r\n *   <>\r\n *     <div onMouseDown={startDrag} />\r\n *     <motion.div drag=\"x\" dragControls={dragControls} />\r\n *   </>\r\n * )\r\n * ```\r\n *\r\n * @public\r\n */\n\n\nfunction useDragControls() {\n  return useConstant(createDragControls);\n}\n\nvar PresenceChild = function PresenceChild(_a) {\n  var children = _a.children,\n      initial = _a.initial,\n      isPresent = _a.isPresent,\n      _onExitComplete = _a.onExitComplete,\n      custom = _a.custom;\n  var numPresenceChildren = useRef(0);\n  var numExitComplete = useRef(0);\n  var context = {\n    initial: initial,\n    isPresent: isPresent,\n    custom: custom,\n    onExitComplete: function onExitComplete() {\n      numExitComplete.current++;\n      var allComplete = numExitComplete.current >= numPresenceChildren.current;\n      _onExitComplete && allComplete && _onExitComplete();\n    }\n  };\n  var register = useMemo(function () {\n    numExitComplete.current = 0;\n    return function () {\n      numPresenceChildren.current++;\n      return function () {\n        return numPresenceChildren.current--;\n      };\n    };\n  }, [isPresent]);\n  return /*#__PURE__*/createElement(PresenceContext.Provider, {\n    value: __assign(__assign({}, context), {\n      register: register\n    })\n  }, children);\n};\n\nfunction getChildKey(child) {\n  return child.key || \"\";\n}\n\nfunction updateChildLookup(children, allChildren) {\n  var seenChildren = process.env.NODE_ENV !== \"production\" ? new Set() : null;\n  children.forEach(function (child) {\n    var key = getChildKey(child);\n\n    if (process.env.NODE_ENV !== \"production\" && seenChildren) {\n      if (seenChildren.has(key)) {\n        console.warn(\"Children of AnimatePresence require unique keys. \\\"\" + key + \"\\\" is a duplicate.\");\n      }\n\n      seenChildren.add(key);\n    }\n\n    allChildren.set(key, child);\n  });\n}\n\nfunction onlyElements(children) {\n  var filtered = []; // We use forEach here instead of map as map mutates the component key by preprending `.$`\n\n  Children.forEach(children, function (child) {\n    if ( /*#__PURE__*/isValidElement(child)) filtered.push(child);\n  });\n  return filtered;\n}\n/**\r\n * `AnimatePresence` enables the animation of components that have been removed from the tree.\r\n *\r\n * When adding/removing more than a single child, every child **must** be given a unique `key` prop.\r\n *\r\n * @library\r\n *\r\n * Any `Frame` components that have an `exit` property defined will animate out when removed from\r\n * the tree.\r\n *\r\n * ```jsx\r\n * import { Frame, AnimatePresence } from 'framer'\r\n *\r\n * // As items are added and removed from `items`\r\n * export function Items({ items }) {\r\n *   return (\r\n *     <AnimatePresence>\r\n *       {items.map(item => (\r\n *         <Frame\r\n *           key={item.id}\r\n *           initial={{ opacity: 0 }}\r\n *           animate={{ opacity: 1 }}\r\n *           exit={{ opacity: 0 }}\r\n *         />\r\n *       ))}\r\n *     </AnimatePresence>\r\n *   )\r\n * }\r\n * ```\r\n *\r\n * You can sequence exit animations throughout a tree using variants.\r\n *\r\n * @motion\r\n *\r\n * Any `motion` components that have an `exit` property defined will animate out when removed from\r\n * the tree.\r\n *\r\n * ```jsx\r\n * import { motion, AnimatePresence } from 'framer-motion'\r\n *\r\n * export const Items = ({ items }) => (\r\n *   <AnimatePresence>\r\n *     {items.map(item => (\r\n *       <motion.div\r\n *         key={item.id}\r\n *         initial={{ opacity: 0 }}\r\n *         animate={{ opacity: 1 }}\r\n *         exit={{ opacity: 0 }}\r\n *       />\r\n *     ))}\r\n *   </AnimatePresence>\r\n * )\r\n * ```\r\n *\r\n * You can sequence exit animations throughout a tree using variants.\r\n *\r\n * If a child contains multiple `motion` components with `exit` props, it will only unmount the child\r\n * once all `motion` components have finished animating out. Likewise, any components using\r\n * `usePresence` all need to call `safeToRemove`.\r\n *\r\n * @public\r\n */\n\n\nvar AnimatePresence = function AnimatePresence(_a) {\n  var children = _a.children,\n      custom = _a.custom,\n      _b = _a.initial,\n      initial = _b === void 0 ? true : _b,\n      onExitComplete = _a.onExitComplete,\n      exitBeforeEnter = _a.exitBeforeEnter; // We want to force a re-render once all exiting animations have finished. We\n  // either use a local forceUpdate function, or one from a parent context if it exists.\n\n  var localForceUpdate = useForceUpdate();\n  var contextForceUpdate = useContext(SyncLayoutContext);\n  var forceUpdate = contextForceUpdate || localForceUpdate;\n  var isInitialRender = useRef(true); // Filter out any children that aren't ReactElements. We can only track ReactElements with a props.key\n\n  var filteredChildren = onlyElements(children); // Keep a living record of the children we're actually rendering so we\n  // can diff to figure out which are entering and exiting\n\n  var presentChildren = useRef(filteredChildren); // A lookup table to quickly reference components by key\n\n  var allChildren = useRef(new Map()).current; // A living record of all currently exiting components.\n\n  var exiting = useRef(new Set()).current;\n  updateChildLookup(filteredChildren, allChildren); // If this is the initial component render, just deal with logic surrounding whether\n  // we play onMount animations or not.\n\n  if (isInitialRender.current) {\n    isInitialRender.current = false;\n    return /*#__PURE__*/createElement(Fragment, null, filteredChildren.map(function (child) {\n      return /*#__PURE__*/createElement(PresenceChild, {\n        key: getChildKey(child),\n        isPresent: true,\n        initial: initial ? undefined : false\n      }, child);\n    }));\n  } // If this is a subsequent render, deal with entering and exiting children\n\n\n  var childrenToRender = __spreadArrays(filteredChildren); // Diff the keys of the currently-present and target children to update our\n  // exiting list.\n\n\n  var presentKeys = presentChildren.current.map(getChildKey);\n  var targetKeys = filteredChildren.map(getChildKey); // Diff the present children with our target children and mark those that are exiting\n\n  var numPresent = presentKeys.length;\n\n  for (var i = 0; i < numPresent; i++) {\n    var key = presentKeys[i];\n\n    if (targetKeys.indexOf(key) === -1) {\n      exiting.add(key);\n    } else {\n      // In case this key has re-entered, remove from the exiting list\n      exiting.delete(key);\n    }\n  } // If we currently have exiting children, and we're deferring rendering incoming children\n  // until after all current children have exiting, empty the childrenToRender array\n\n\n  if (exitBeforeEnter && exiting.size) {\n    childrenToRender = [];\n  } // Loop through all currently exiting components and clone them to overwrite `animate`\n  // with any `exit` prop they might have defined.\n\n\n  exiting.forEach(function (key) {\n    // If this component is actually entering again, early return\n    if (targetKeys.indexOf(key) !== -1) return;\n    var child = allChildren.get(key);\n    if (!child) return;\n    var insertionIndex = presentKeys.indexOf(key);\n\n    var onExit = function onExit() {\n      exiting.delete(key); // Remove this child from the present children\n\n      var removeIndex = presentChildren.current.findIndex(function (child) {\n        return child.key === key;\n      });\n      presentChildren.current.splice(removeIndex, 1); // Defer re-rendering until all exiting children have indeed left\n\n      if (!exiting.size) {\n        presentChildren.current = filteredChildren;\n        forceUpdate();\n        onExitComplete && onExitComplete();\n      }\n    };\n\n    childrenToRender.splice(insertionIndex, 0, /*#__PURE__*/createElement(PresenceChild, {\n      key: getChildKey(child),\n      isPresent: false,\n      onExitComplete: onExit,\n      custom: custom\n    }, child));\n  }); // Add `MotionContext` even to children that don't need it to ensure we're rendering\n  // the same tree between renders\n\n  childrenToRender = childrenToRender.map(function (child) {\n    var key = child.key;\n    return exiting.has(key) ? child : /*#__PURE__*/createElement(PresenceChild, {\n      key: getChildKey(child),\n      isPresent: true\n    }, child);\n  });\n  presentChildren.current = childrenToRender;\n\n  if (process.env.NODE_ENV !== \"production\" && exitBeforeEnter && childrenToRender.length > 1) {\n    console.warn(\"You're attempting to animate multiple children within AnimatePresence, but its exitBeforeEnter prop is set to true. This will lead to odd visual behaviour.\");\n  }\n\n  return /*#__PURE__*/createElement(Fragment, null, exiting.size ? childrenToRender : childrenToRender.map(function (child) {\n    return /*#__PURE__*/cloneElement(child);\n  }));\n}; // Does this device prefer reduced motion? Returns `null` server-side.\n\n\nvar prefersReducedMotion = motionValue(null);\n\nif (typeof window !== \"undefined\") {\n  if (window.matchMedia) {\n    var motionMediaQuery_1 = window.matchMedia(\"(prefers-reduced-motion)\");\n\n    var setReducedMotionPreferences = function setReducedMotionPreferences() {\n      return prefersReducedMotion.set(motionMediaQuery_1.matches);\n    };\n\n    motionMediaQuery_1.addListener(setReducedMotionPreferences);\n    setReducedMotionPreferences();\n  } else {\n    prefersReducedMotion.set(false);\n  }\n}\n\nfunction determineShouldReduceMotion(prefersReduced, isReducedMotion) {\n  return typeof isReducedMotion === \"boolean\" ? isReducedMotion : Boolean(prefersReduced);\n}\n/**\r\n * A hook that returns `true` if we should be using reduced motion based on the current device's Reduced Motion setting.\r\n *\r\n * This can be used to implement changes to your UI based on Reduced Motion. For instance, replacing motion-sickness inducing\r\n * `x`/`y` animations with `opacity`, disabling the autoplay of background videos, or turning off parallax motion.\r\n *\r\n * It will actively respond to changes and re-render your components with the latest setting.\r\n *\r\n * ```jsx\r\n * export function Sidebar({ isOpen }) {\r\n *   const shouldReduceMotion = useReducedMotion()\r\n *   const closedX = shouldReduceMotion ? 0 : \"-100%\"\r\n *\r\n *   return (\r\n *     <motion.div animate={{\r\n *       opacity: isOpen ? 1 : 0,\r\n *       x: isOpen ? 0 : closedX\r\n *     }} />\r\n *   )\r\n * }\r\n * ```\r\n *\r\n * @return boolean\r\n *\r\n * @public\r\n */\n\n\nfunction useReducedMotion() {\n  var isReducedMotion = useContext(MotionContext).isReducedMotion;\n\n  var _a = useState(determineShouldReduceMotion(prefersReducedMotion.get(), isReducedMotion)),\n      shouldReduceMotion = _a[0],\n      setShouldReduceMotion = _a[1];\n\n  useEffect(function () {\n    return prefersReducedMotion.onChange(function (v) {\n      setShouldReduceMotion(determineShouldReduceMotion(v, isReducedMotion));\n    });\n  }, [setShouldReduceMotion, isReducedMotion]);\n  return shouldReduceMotion;\n}\n/**\r\n * Define accessibility options for a tree. Can be used to force the tree into Reduced Motion mode,\r\n * or disable device detection.\r\n *\r\n * @internal\r\n */\n\n\nfunction ReducedMotion(_a) {\n  var children = _a.children,\n      enabled = _a.enabled;\n  var context = useContext(MotionContext);\n  context = useMemo(function () {\n    return __assign(__assign({}, context), {\n      isReducedMotion: enabled\n    });\n  }, [enabled]);\n  return /*#__PURE__*/createElement(MotionContext.Provider, {\n    value: context\n  }, children);\n}\n\nexport { AnimatePresence, AnimationControls, DragControls, MotionContext, MotionPluginContext, MotionPlugins, MotionValue, Point, ReducedMotion, UnstableSyncLayout, animationControls, createMotionComponent, isValidMotionProp, motion, motionValue, transform, unwrapMotionValue, useAnimatedState, useAnimation, useCycle, useDomEvent, useDragControls, useElementScroll, useExternalRef, useGestures, useInvertedScale, useMotionValue, usePanGesture, usePresence, useReducedMotion, useSpring, useTapGesture, useTransform, useViewportScroll };"],"sourceRoot":""}